Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
6 changes: 2 additions & 4 deletions src/fiat/gstats/gstats_label.F90
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,9 @@ SUBROUTINE GSTATS_LABEL(KNUM, CTYPE, CDESC)
INTEGER(KIND=JPIM) :: ILEN, ITLEN

IF (KNUM < 0 .OR. KNUM > JPMAXSTAT) CALL ABOR1('GSTATS_LABEL:ILLEGAL KNUM')
ILEN = LEN(CDESC)
ILEN = MIN(ILEN,50)
ITLEN = LEN(CTYPE)
ITLEN = MIN(ILEN,3)
IF (CCDESC(KNUM) == '') THEN
ILEN = MIN(LEN(CDESC), LEN(CCDESC(KNUM)))
ITLEN = MIN(LEN(CTYPE), LEN(CCTYPE(KNUM)))
CCDESC(KNUM) = CDESC(1:ILEN)
CCTYPE(KNUM) = CTYPE(1:ITLEN)
ELSEIF (CCDESC(KNUM)(1:ILEN) /= CDESC(1:ILEN)) THEN
Expand Down
81 changes: 75 additions & 6 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,9 @@ 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)

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 +98,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 +116,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 +155,71 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)
ENDIF
ENDDO
ENDIF

! CSV OUTPUT FOR EACH RANK
IF (LSTATS .AND. LCSV_STATS) THEN
! OPENING THE FILE
CSVCOLS='NaN'
WRITE(CSVNAME, '(A,I0,A)') 'gstats.', MYPROC_STATS, '.csv'
IF (NPROC_STATS <= 1) WRITE(KULOUT, '(A,A)') "GSTATS writing file ", CSVNAME
IF (NPROC_STATS > 1) WRITE(KULOUT, '(A,I0,A)') "GSTATS writing files gstats.{1..", NPROC_STATS, "}.csv"
OPEN (NEWUNIT=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/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
! WRITE TO CSV FILE
DO I = 1, 14
WRITE(ICSVUN, '(2A)', advance='no') TRIM(CSVCOLS(I)), ','
ENDDO
WRITE(ICSVUN, '(A)') TRIM(CSVCOLS(15))
CSVCOLS='NaN'
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 +637,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 @@ -906,7 +974,9 @@ SUBROUTINE GSTATS_PRINT(KULOUT,PAVEAVE,KLEN)
WRITE(KULOUT,'(" ")')
WRITE(KULOUT,'(" ")')
ENDIF
CALL MPL_BARRIER(CDSTRING='GSTATS_PRINT')
IF (NPROC_STATS > 1) THEN
CALL MPL_BARRIER(CDSTRING='GSTATS_PRINT')
ENDIF
ENDDO
IF( MYPROC_STATS == 1 )THEN
WRITE(KULOUT,'("MAXIMUM TOTAL UNEXPECTED DELAY TIME (SECS) =",F9.1)') ZDELAY_MAX
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
15 changes: 9 additions & 6 deletions src/fiat/gstats/gstats_setup.F90
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
SUBROUTINE GSTATS_SETUP( KPROC,KMYPROC,KPRCIDS,&
& LDSTATS,LDSTATSCPU,LDSYNCSTATS,LDDETAILED_STATS,LDBARRIER_STATS,LDBARRIER_STATS2,&
& LDSTATS_OMP,LDSTATS_COMMS,LDSTATS_MEM,KSTATS_MEM,LDSTATS_ALLOC,&
& LDTRACE_STATS,KTRACE_STATS,KPRNT_STATS,LDXML_STATS)
& LDTRACE_STATS,KTRACE_STATS,KPRNT_STATS,LDXML_STATS,LDCSV_STATS)

!**** *GSTATS_SETUP* - Setup stats package

Expand Down 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, OPTIONAL :: 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
IF (PRESENT(LDCSV_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 Down
8 changes: 5 additions & 3 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 Expand Up @@ -123,11 +125,11 @@ MODULE YOMGSTATS
INTEGER(KIND=JPIM),PARAMETER :: JPMAXDELAYS=1000
INTEGER(KIND=JPIM) :: NDELAY_COUNTER(1:JPMAXDELAYS)
REAL(KIND=JPRD) :: TDELAY_VALUE(1:JPMAXDELAYS)
CHARACTER*10 :: CDELAY_TIME(1:JPMAXDELAYS)
CHARACTER(LEN=10) :: CDELAY_TIME(1:JPMAXDELAYS)
INTEGER(KIND=JPIM) :: NDELAY_INDEX = 0

CHARACTER*50 :: CCDESC(0:JPMAXSTAT) = ""
CHARACTER*3 :: CCTYPE(0:JPMAXSTAT) = ""
CHARACTER(LEN=50) :: CCDESC(0:JPMAXSTAT) = ""
CHARACTER(LEN=3) :: CCTYPE(0:JPMAXSTAT) = ""

INTEGER(KIND=JPIM) :: NPROC_STATS = 1
INTEGER(KIND=JPIM) :: MYPROC_STATS = 1
Expand Down
3 changes: 2 additions & 1 deletion src/fiat/include/fiat/gstats_setup.intfb.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ INTERFACE
SUBROUTINE GSTATS_SETUP( KPROC,KMYPROC,KPRCIDS,&
& LDSTATS,LDSTATSCPU,LDSYNCSTATS,LDDETAILED_STATS,LDBARRIER_STATS,LDBARRIER_STATS2,&
& LDSTATS_OMP,LDSTATS_COMMS,LDSTATS_MEM,KSTATS_MEM,LDSTATS_ALLOC,&
& LDTRACE_STATS,KTRACE_STATS,KPRNT_STATS,LDXML_STATS)
& LDTRACE_STATS,KTRACE_STATS,KPRNT_STATS,LDXML_STATS,LDCSV_STATS)
USE EC_PARKIND, ONLY : JPIM
LOGICAL :: LDSTATS
LOGICAL :: LDSTATSCPU
Expand All @@ -31,6 +31,7 @@ INTEGER(KIND=JPIM) :: KPRNT_STATS
LOGICAL :: LDSTATS_MEM
LOGICAL :: LDSTATS_ALLOC
LOGICAL :: LDXML_STATS
LOGICAL, OPTIONAL :: LDCSV_STATS
END SUBROUTINE
END INTERFACE

11 changes: 11 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,17 @@ add_test(NAME fiat_test_namelist
-P ${CMAKE_CURRENT_SOURCE_DIR}/test_program_output.cmake )

# ----------------------------------------------------------------------------------------

# ----------------------------------------------------------------------------------------
# Tests: test_gstats_fortran (only gstats print csv so far)
ecbuild_add_test(
TARGET fiat_test_gstats
SOURCES test_gstats.F90
LIBS fiat
LINKER_LANGUAGE Fortran
)
# ----------------------------------------------------------------------------------------

# Test installation of fiat is working

configure_file( test-install.sh.in ${CMAKE_CURRENT_BINARY_DIR}/test-install.sh @ONLY )
Expand Down
Loading
Loading