Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 74 additions & 5 deletions src/fiat/gstats/gstats_print.F90
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,11 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)
! P.Towers 11-May-2011 : mpl comms statistics output
! F. Vana 05-Mar-2015 Support for single precision
! G. Mozdzynski 18-Aug-2015 Avoid confusion, procs are tasks
! M. Plesske 05-Nov-2025 added LCSV_STATS
! ------------------------------------------------------------------

USE EC_PARKIND, ONLY: JPRD, JPIM
USE YOMGSTATS, ONLY: JPMAXDELAYS, JPMAXSTAT, NPROC_STATS, LXML_STATS, MYPROC_STATS, LSYNCSTATS, &
USE YOMGSTATS, ONLY: JPMAXDELAYS, JPMAXSTAT, NPROC_STATS, LXML_STATS, LCSV_STATS, MYPROC_STATS, LSYNCSTATS, &
& LDETAILED_STATS, LSTATS_COMMS, LSTATS_OMP, LBARRIER_STATS2, JBMAXBASE, &
& NBAR_PTR, CCDESC, CCTYPE, LSTATS, TIMESUM, TIMESQSUM, TIMEMAX, TIMESUMB, &
& TIMELCALL, NCALLS, TTCPUSUM, TVCPUSUM, JPTAGSTAT, NPRCIDS_STATS, LSTATS_MPL, &
Expand All @@ -73,6 +74,10 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)
REAL(KIND=JPRD) :: PAVEAVE(0:KLEN)
CHARACTER*7 CLACTION(0:3)
CHARACTER(LEN=JPMAXDELAYS*10) CLTEMP
CHARACTER(LEN=128) :: CSVNAME
CHARACTER(LEN=32) :: CSVCOLS(15)
CHARACTER(LEN=512) :: CSVLINE

INTEGER(KIND=JPIM),PARAMETER :: JPARRAYS=8
REAL(KIND=JPRD) :: ZREABUF(JPARRAYS*(JPMAXSTAT+1))
REAL(KIND=JPRD) :: ZAVEAVE(0:JPMAXSTAT),ZAVEMAX(0:JPMAXSTAT),ZTIMELCALL(0:JPMAXSTAT),&
Expand All @@ -94,7 +99,7 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)

! LOCAL INTEGER SCALARS
INTEGER(KIND=JPIM) :: ICALLS, ILBUF, ILSEND, ILRECV, &
&ISEND, ITAG, JJ, JNUM, JROC, JCALL, ICALLER,IACTION
&ISEND, ITAG, JJ, I, JNUM, JROC, JCALL, ICALLER,IACTION
INTEGER(KIND=JPIM) :: IMEM, INUM, JMEM
INTEGER(KIND=JPIM) :: JDELAY, IDELAY
INTEGER(KIND=JPIM) :: NSEND,NRECV
Expand All @@ -112,7 +117,7 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)
REAL(KIND=JPRD) :: TOTRECVBYTES(501:1000)
REAL(KIND=JPRD) :: TOTSENDBYTESSUM
REAL(KIND=JPRD) :: TOTRECVBYTESSUM
INTEGER(KIND=JPIM) :: IXMLLUN
INTEGER(KIND=JPIM) :: IXMLLUN, ICSVUN

! ------------------------------------------------------------------

Expand Down Expand Up @@ -151,6 +156,72 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)
ENDIF
ENDDO
ENDIF

! CSV OUTPUT FOR EACH RANK
IF (LSTATS .AND. LCSV_STATS) THEN
! OPENING THE FILE
ICSVUN = 45+MYPROC_STATS
CSVCOLS='NaN'
WRITE(CSVNAME, '(A,I0,A)') 'gstats.', MYPROC_STATS, '.csv'
OPEN (UNIT=ICSVUN, FILE=CSVNAME, ACTION='write')
!write header
WRITE(ICSVUN,'(A)') 'GSTATS ID, SECTION, NUMCALLS, TOTAL TIME, MAX TIME, AVE TIME, AVE TIME CPU, AVE TIME VECTOR, STDDEV, NUMSENDS, BYTES SEND, AVE BYTES SEND, NUMRECVS, BYTES RECV, AVE BYTES RECV'

! WRITING OUTPUT FOR EVERY RECORDED GSTATS SECTION
DO JNUM=0,JPMAXSTAT
IF (NCALLS(JNUM) > 1) THEN
! TIMING INFORMATION
ICALLS = NCALLS(JNUM)/2
IF (ICALLS > 1) THEN
ZSTDDEV = 1000._JPRD*SQRT(MAX((TIMESQSUM(JNUM)-TIMESUM(JNUM)**2/ICALLS)/(ICALLS-1),0.0_JPRD))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ZSTDDEV = 1000._JPRD*SQRT(MAX((TIMESQSUM(JNUM)-TIMESUM(JNUM)**2/ICALLS)/(ICALLS-1),0.0_JPRD))
ZSTDDEV = 1000._JPRD*SQRT(MAX((TIMESQSUM(JNUM)-TIMESUM(JNUM)**2/REAL(ICALLS,JPRD))/REAL(ICALLS-1,JPRD),0.0_JPRD))

ELSE
ZSTDDEV= 0.0_JPRD
ENDIF
WRITE(CSVCOLS(1), '(I0)') JNUM
CSVCOLS(2) = CCDESC(JNUM)
WRITE(CSVCOLS(3), '(I0)') ICALLS
WRITE(CSVCOLS(4), '(F0.6)') TIMESUM(JNUM)
WRITE(CSVCOLS(5), '(F0.6)') TIMEMAX(JNUM)*1000._JPRD
WRITE(CSVCOLS(6), '(F0.6)') TIMESUM(JNUM)/ICALLS*1000._JPRD
WRITE(CSVCOLS(7), '(F0.6)') TTCPUSUM(JNUM)/ICALLS*1000._JPRD
WRITE(CSVCOLS(8), '(F0.6)') TVCPUSUM(JNUM)/ICALLS*1000._JPRD
WRITE(CSVCOLS(9), '(F0.6)') ZSTDDEV

! COMMUNICATION INFORMATION
IF (LSTATS_MPL .AND. JNUM > 500 .AND. JNUM < 1001) THEN
IF(NUMSEND(JNUM) /= 0) THEN
AVGSENDLEN=SENDBYTES(JNUM)*1.E-3_JPRD/NUMSEND(JNUM)
ELSE
AVGSENDLEN=0.0_JPRD
ENDIF
IF(NUMRECV(JNUM) /= 0) THEN
AVGRECVLEN=RECVBYTES(JNUM)*1.E-3_JPRD/NUMRECV(JNUM)
ELSE
AVGRECVLEN=0.0_JPRD
ENDIF
WRITE(CSVCOLS(10), '(I0)') NUMSEND(JNUM)
WRITE(CSVCOLS(11), '(F0.6)') SENDBYTES(JNUM)
WRITE(CSVCOLS(12), '(F0.6)') AVGSENDLEN
WRITE(CSVCOLS(13), '(I0)') NUMRECV(JNUM)
WRITE(CSVCOLS(14), '(F0.6)') RECVBYTES(JNUM)
WRITE(CSVCOLS(15), '(F0.6)') AVGRECVLEN
ENDIF
CSVLINE = CSVCOLS(1)
DO I = 2, 15
CSVLINE = TRIM(CSVLINE)//','//TRIM(CSVCOLS(I))
END DO
CSVCOLS='NaN'

! WRITE TO CSV FILE
WRITE(ICSVUN, '(A)'), CSVLINE
ENDIF
ENDDO

! CLOSING CSV FILES
CLOSE(ICSVUN)
ENDIF

! COLLECTING ALL INFORMATION AT RANK 1 AND COMPUTING FURTHER METRICS
IF (LSTATS .AND. MYPROC_STATS /= 1) THEN
JJ = 1
DO JNUM=0,JPMAXSTAT
Expand Down Expand Up @@ -568,7 +639,6 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)
&'<fraction unit="percent">',ZFRAC,'</fraction>',&
&'<unbalanced unit="percent">',ZUNBAL,'</unbalanced>','</comitem>'
ENDIF

ZT_SUM=ZT_SUM+ZMEANT
ENDIF
ENDDO
Expand Down Expand Up @@ -1009,6 +1079,5 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)
WRITE(IXMLLUN,'(A)')'</gstats>'
CLOSE(IXMLLUN)
ENDIF

RETURN
END SUBROUTINE GSTATS_PRINT
14 changes: 9 additions & 5 deletions src/fiat/gstats/gstats_setup.F90
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ SUBROUTINE GSTATS_SETUP( KPROC,KMYPROC,KPRCIDS,&

USE EC_PARKIND, ONLY: JPIM, JPRD
USE YOMGSTATS, ONLY: LSTATS, LSTATSCPU, LSYNCSTATS, LDETAILED_STATS, LBARRIER_STATS, &
& LBARRIER_STATS2, LXML_STATS, LSTATS_OMP, LSTATS_COMMS, NSTATS_MEM, &
& LBARRIER_STATS2, LXML_STATS, LCSV_STATS, LSTATS_OMP, LSTATS_COMMS, NSTATS_MEM, &
& LSTATS_MEM, LSTATS_ALLOC, LTRACE_STATS, NTRACE_STATS, MYPROC_STATS, &
& NPROC_STATS, NPRCIDS_STATS, NCALL_TRACE, TIME_TRACE, LSTATS_MPL, NUMSEND, &
& NUMRECV, SENDBYTES, RECVBYTES, UNKNOWN_NUMSEND, UNKNOWN_NUMRECV, &
Expand All @@ -82,15 +82,17 @@ SUBROUTINE GSTATS_SETUP( KPROC,KMYPROC,KPRCIDS,&
LOGICAL :: LDSTATS_MEM
LOGICAL :: LDSTATS_ALLOC
LOGICAL :: LDXML_STATS
LOGICAL :: LDCSV_STATS
! ------------------------------------------------------------------

LSTATS = LDSTATS
LSTATSCPU = LDSTATSCPU
LSYNCSTATS = LDSYNCSTATS
LDETAILED_STATS=LDDETAILED_STATS
LBARRIER_STATS=LDBARRIER_STATS
LBARRIER_STATS2=LDBARRIER_STATS2
LXML_STATS=LDXML_STATS
LDETAILED_STATS = LDDETAILED_STATS
LBARRIER_STATS = LDBARRIER_STATS
LBARRIER_STATS2 = LDBARRIER_STATS2
LXML_STATS = LDXML_STATS
!LCSV_STATS = LDCSV_STATS
LSTATS_OMP = LDSTATS_OMP
LSTATS_COMMS = LDSTATS_COMMS
NSTATS_MEM = KSTATS_MEM
Expand All @@ -99,6 +101,7 @@ SUBROUTINE GSTATS_SETUP( KPROC,KMYPROC,KPRCIDS,&
LTRACE_STATS = LDTRACE_STATS
IF (LTRACE_STATS) NTRACE_STATS = KTRACE_STATS


MYPROC_STATS = KMYPROC
NPROC_STATS = KPROC
ALLOCATE(NPRCIDS_STATS(NPROC_STATS))
Expand All @@ -115,6 +118,7 @@ SUBROUTINE GSTATS_SETUP( KPROC,KMYPROC,KPRCIDS,&

IF (LDETAILED_STATS) THEN
LSTATS_MPL = .TRUE.
LCSV_STATS = .TRUE.
ALLOCATE(NUMSEND(501:1000))
ALLOCATE(NUMRECV(501:1000))
ALLOCATE(SENDBYTES(501:1000))
Expand Down
2 changes: 2 additions & 0 deletions src/fiat/gstats/yomgstats.F90
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ MODULE YOMGSTATS
! start of timing event
! LDETAILED_STATS - TRUE for more detail in output
! LXML_STATS - TRUE for stats output in XML
! LCSV_STATS - TRUE for stats output in CSV per rank
! LSTATS_OMP - TRUE for gathering timing statistics on OpenMP regions
! 1001-1999
! LSTATS_COMMS - TRUE for gathering detailed timing of Message passing
Expand Down Expand Up @@ -71,6 +72,7 @@ MODULE YOMGSTATS
LOGICAL :: LSTATSCPU = .TRUE.
LOGICAL :: LSYNCSTATS = .FALSE.
LOGICAL :: LXML_STATS = .FALSE.
LOGICAL :: LCSV_STATS = .FALSE.
LOGICAL :: LDETAILED_STATS = .TRUE.
LOGICAL :: LBARRIER_STATS = .FALSE.
LOGICAL :: LBARRIER_STATS2 = .FALSE.
Expand Down
Loading