C $Header: /u/gcmpack/MITgcm/eesupp/src/comm_stats.F,v 1.6 2004/03/27 03:51:50 edhill Exp $ C $Name: $ #include "CPP_EEOPTIONS.h" CBOP C !ROUTINE: COMM_STATS C !INTERFACE: SUBROUTINE COMM_STATS IMPLICIT NONE C !DESCRIPTION: C *========================================================== C | SUBROUTINE COMM\_STATS C | o Print out statistics from communication routines. C *========================================================== C !USES: C == Global variables == #include "SIZE.h" #include "EEPARAMS.h" #include "EESUPPORT.h" #include "EXCH.h" #include "BAR2.h" C !LOCAL VARIABLES: C == Local variables == C bi, bj, I :: Loop counters C msgBuf :: Temp. for building text messages. INTEGER bi, bj, I CHARACTER*(MAX_LEN_MBUF) msgBuf CEOP C o For each tile print its excange statistics WRITE(msgBuf,'(A)') & '// ======================================================' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A)') '// Tile <-> Tile communication statistics' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A)') & '// ======================================================' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) IF ( exchCollectStatistics ) THEN DO bj=1,nSy DO bi=1,nSx WRITE(msgBuf,'(A,A,I6.6)') & '//',' o Tile number: ',tileNo(bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) C o X exchange stats. WRITE(msgBuf,'(A,A,I15)') & '//',' No. X exchanges =',exchRecvXExchCount(1,bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Max. X spins =',exchRecvXSpinMax (1,bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Min. X spins =',exchRecvXSpinMin (1,bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Total. X spins =',exchRecvXSpinCount(1,bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) IF ( FLOAT(exchRecvXExchCount(1,bi,bj)) .NE. 0. ) THEN WRITE(msgBuf,'(A,A,1PE15.2)') & '//',' Avg. X spins =', & FLOAT(exchRecvXSpinCount(1,bi,bj))/ & FLOAT(exchRecvXExchCount(1,bi,bj)) ELSE WRITE(msgBuf,'(A,A,1PE15.2)') & '//',' Avg. X spins =', & 0. ENDIF CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) C o Y exchange stats. WRITE(msgBuf,'(A,A,I15)') & '//',' No. Y exchanges =',exchRecvYExchCount(1,bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Max. Y spins =',exchRecvYSpinMax (1,bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Min. Y spins =',exchRecvYSpinMin (1,bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Total. Y spins =',exchRecvYSpinCount(1,bi,bj) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) IF ( FLOAT(exchRecvYExchCount(1,bi,bj)) .NE. 0. ) THEN WRITE(msgBuf,'(A,A,1PE15.2)') & '//',' Avg. Y spins =', & FLOAT(exchRecvYSpinCount(1,bi,bj))/ & FLOAT(exchRecvYExchCount(1,bi,bj)) ELSE WRITE(msgBuf,'(A,A,1PE15.2)') & '//',' Avg. Y spins =', & 0. ENDIF CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) ENDDO ENDDO ENDIF IF ( bar2CollectStatistics ) THEN DO I=1,nThreads WRITE(msgBuf,'(A,A,I6.6)') & '//',' o Thread number: ',I CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' No. barriers =',BAR2_barrierCount(1,I) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Max. barrier spins =',BAR2_spinsMax(1,I) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Min. barrier spins =',BAR2_spinsMin(1,I) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) WRITE(msgBuf,'(A,A,I15)') & '//',' Total barrier spins =',BAR2_spinsCount(1,I) CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) IF ( FLOAT(BAR2_spinsCount(1,I)) .NE. 0. ) THEN WRITE(msgBuf,'(A,A,1PE15.2)') & '//',' Avg. barrier spins =', & FLOAT(BAR2_spinsCount(1,I))/FLOAT(BAR2_barrierCount(1,I)) ELSE WRITE(msgBuf,'(A,A,1PE15.2)') & '//',' Avg. barrier spins =', & 0. ENDIF CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, & SQUEEZE_RIGHT , 1) ENDDO ENDIF C RETURN END