59 INTEGER(KIND=JPIM) :: KULOUT,KLEN
60 REAL(KIND=JPRD) :: PAVEAVE(0:klen)
61 CHARACTER*7 CLACTION(0:3)
62 CHARACTER(LEN=JPMAXDELAYS*10) CLTEMP
63 INTEGER(KIND=JPIM),
PARAMETER :: JPARRAYS=8
64 REAL(KIND=JPRD) :: ZREABUF(jparrays*(
jpmaxstat+1))
66 &ZTHISTIME(0:JPMAXSTAT),ZFRACMAX(0:JPMAXSTAT),&
67 &ZSUMMAX(0:JPMAXSTAT),ZSUMTOT(0:JPMAXSTAT)
68 REAL(KIND=JPRD) :: ZT_SUM,ZT_SUM2,ZT_SUM3,ZT_SUMIO,ZT_SUM4,ZT_SUM5,ZT_SUMB
69 REAL(KIND=JPRD) :: ZDELAY,ZDELAY_MAX
80 INTEGER(KIND=JPIM) :: ICALLSX(0:
jpmaxstat)
83 INTEGER(KIND=JPIM) :: ICALLS, ILBUF, ILSEND, ILRECV, &
84 &ISEND, ITAG, JJ, JNUM, JROC, JCALL, ICALLER,IACTION
85 INTEGER(KIND=JPIM) :: IMEM, INUM, JMEM
86 INTEGER(KIND=JPIM) :: JDELAY, IDELAY
87 INTEGER(KIND=JPIM) :: NSEND,NRECV
90 REAL(KIND=JPRD) :: ZAVE, ZAVETCPU, ZAVEVCPU, ZCOMTIM, ZDETAIL,&
91 &ZFRAC, ZMAX, ZMEAN, ZSTDDEV, ZSUM, ZSUMB, &
92 &ZTOTAL, ZTOTCPU, ZTOTUNBAL, ZTOTVCPU, &
93 &ZUNBAL, ZMEANT, ZMAXT
95 REAL(KIND=JPRD) :: SBYTES,RBYTES,SENDRATE,RECVRATE
96 REAL(KIND=JPRD) :: AVGSENDLEN,AVGRECVLEN
97 REAL(KIND=JPRD) :: MAXCOMMTIME(501:1000)
98 REAL(KIND=JPRD) :: TOTSENDBYTES(501:1000)
99 REAL(KIND=JPRD) :: TOTRECVBYTES(501:1000)
101 INTEGER(KIND=JPIM) :: IXMLLUN
109 zaveave(:) = 0.0_jprd
110 zavemax(:) = 0.0_jprd
111 zfracmax(:)= 0.0_jprd
118 OPEN (unit=ixmllun, file=
'gstats.xml',action=
'write')
119 WRITE(ixmllun,
'(A)')
'<?xml version="1.0" encoding="UTF-8"?>' 120 WRITE(ixmllun,
'(A)')
'<gstats ' 121 WRITE(ixmllun,
'(A)')
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"& 122 & xsi:schemaLocation="http://www.ecmwf.int/services/prepifs/gstats ./gstats.xsd">' 125 WRITE(kulout,
'(A)')
'===-=== START OF TIMING STATISTICS ===-===' 127 WRITE(kulout,
'(A)')
'START OF TIMINGS SYNCRONIZED' 150 zreabuf(jj+5) =
ncalls(jnum)
159 CALL mpl_send(zreabuf(1:ilsend),kdest=
nprcids_stats(isend), &
160 & ktag=itag,cdstring=
'GSTATS_PRINT:')
175 CALL mpl_send(zreabuf(1:ilsend),kdest=
nprcids_stats(isend), &
176 & ktag=itag,cdstring=
'GSTATS_PRINT:')
184 maxcommtime(jnum)=0.0_jprd
185 totsendbytes(jnum)=0.0_jprd
186 totrecvbytes(jnum)=0.0_jprd
192 CALL mpl_recv(zreabuf(1:ilbuf),ksource=
nprcids_stats(jroc), &
193 & ktag=itag,cdstring=
'GSTATS_PRINT:')
201 icallsx(jnum) = nint(zreabuf(jj+5))
209 CALL mpl_recv(zreabuf(1:ilrecv),ksource=
nprcids_stats(jroc), &
210 & ktag=itag,cdstring=
'GSTATS_PRINT:')
213 numsend(jnum) = nint(zreabuf(jj))
215 numrecv(jnum) = nint(zreabuf(jj+2))
242 WRITE(kulout,
'(A,I4)')
'TIMING STATISTICS:TASK=',jroc
244 WRITE(ixmllun,
'(A,I4,A)')
'<timing task="',jroc,
'">' 247 WRITE(kulout,
'(A,F6.1,A)')
'STARTUP COST ',&
252 &
'CALLS SUM(s) AVE(ms) CPUAVE(ms) VAVE(ms) '//&
253 &
'STDDEV(ms) MAX(ms) '//&
257 IF(icallsx(jnum) > 1)
THEN 258 icalls = icallsx(jnum)/2
260 zave =
timesum(jnum)/icalls*1000._jprd
261 zmax =
timemax(jnum)*1000._jprd
263 zfrac =
timesum(jnum)/ztotal*100.0_jprd
264 zfracmax(jnum)=max(zfracmax(jnum),zfrac)
265 zsummax(jnum)=max(zsummax(jnum),
timesum(jnum))
266 zsumtot(jnum)=zsumtot(jnum)+zsum
267 zaveave(jnum)=zaveave(jnum)+zave
268 zavemax(jnum)=max(zavemax(jnum),zave)
269 zavetcpu =
ttcpusum(jnum)/icalls*1000._jprd
270 zavevcpu =
tvcpusum(jnum)/icalls*1000._jprd
272 zstddev = 1000._jprd*&
274 &/(icalls-1),0.0_jprd))
278 IF(
cctype(jnum).EQ.
'MPL')
THEN 280 zt_sumb=zt_sumb+zsumb
284 zt_sumb=zt_sumb+zsumb
286 IF(
cctype(jnum).EQ.
'OMP')
THEN 288 zt_sumb=zt_sumb+zsumb
290 IF(
cctype(jnum).EQ.
'IO-')
THEN 291 zt_sumio=zt_sumio+zsum
292 zt_sumb=zt_sumb+zsumb
294 IF(
cctype(jnum).EQ.
'SER')
THEN 296 zt_sumb=zt_sumb+zsumb
298 IF(
cctype(jnum).EQ.
'MXD')
THEN 300 zt_sumb=zt_sumb+zsumb
304 WRITE(kulout,
'(I4,1X,A3,1X,A40,1X,I5,6(1X,F9.1),1X,F5.1,1X,F8.2)')&
305 &jnum,
cctype(jnum),
ccdesc(jnum),icalls,zsum,zave,zavetcpu,zavevcpu,&
306 &zstddev,zmax,zsumb,zfrac
309 &
'(A,I4,A,//,A,A40,A,//,A,I5,A,//,6(A,F9.1,A,//),A,F5.1,A,//,A,F8.2,A,//,A)')&
310 &
'<num id="',jnum,
'">',&
311 &
'<description>',
ccdesc(jnum),
'</description>',&
312 &
'<sum unit="seconds">',icalls,
'</sum>',&
313 &
'<sumcall unit="ms">',zsum,
'</sumcall>',&
314 &
'<average unit="ms">',zave,
'</average>',&
315 &
'<cpuaverage unit="ms">',zavetcpu,
'</cpuaverage>',&
316 &
'<vave unit="ms">',zavevcpu,
'</vave>',&
317 &
'<stddev unit="ms">',zstddev,
'</stddev>',&
318 &
'<max unit="ms">',zmax,
'</max>',&
319 &
'<sumb unit="seconds">',zsumb,
'</sumb>',&
320 &
'<frac unit="percent">',zfrac,
'</frac>',&
331 WRITE(kulout,
'((A,2F8.1))')&
332 &
'CPU-TIME AND VECTOR CPU-TIME AS PERCENT OF TOTAL ',&
335 WRITE(ixmllun,
'((A,F8.1,A,//,A,F8.1,A))')&
339 &
'<cpuvectorfraction>',&
341 &
'</cpuvectorfraction>' 345 IF(zt_sum > 0.0_jprd)
THEN 346 WRITE(kulout,
'(A,F10.1,A,F6.2,A)')
'SUMMED TIME IN COMMUNICATIONS = '&
347 & ,zt_sum,
' SECONDS ',zt_sum/
timesum(0)*100.0_jprd,&
350 WRITE(ixmllun,
'(A,F10.1,A,//,A,F6.2,A)')
'<zcom unit="seconds">',&
352 &
'<fraczcom unit="percent">',zt_sum/
timesum(0)*100.0_jprd,&
356 IF(zt_sum2 > 0.0_jprd)
THEN 357 WRITE(kulout,
'(A,F10.1,A,F6.2,A)')
'SUMMED TIME IN PARALLEL REGIONS = '&
358 & ,zt_sum2,
' SECONDS ',zt_sum2/
timesum(0)*100.0_jprd,&
361 WRITE(ixmllun,
'(A,F10.1,A,//,A,F6.2,A)') &
362 &
'<parallelztime unit="seconds">',&
363 &zt_sum2,
'</parallelztime>',&
364 &
'<fracparallelztime unit="percent">',zt_sum2/
timesum(0)*100.0_jprd,&
365 &
'</fracparallelztime>' 368 IF(zt_sumio > 0.0_jprd)
THEN 369 WRITE(kulout,
'(A,F10.1,A,F6.2,A)')
'SUMMED TIME IN I/O SECTIONS = '&
370 & ,zt_sumio,
' SECONDS ',zt_sumio/
timesum(0)*100.0_jprd,&
373 WRITE(ixmllun,
'(A,F10.1,A,//,A,F6.2,A)')
'<ioztime unit="seconds">',&
374 &zt_sumio,
'</ioztime>',&
375 &
'<fracioztime unit="percent">',zt_sumio/
timesum(0)*100.0_jprd,&
379 IF(zt_sum3 > 0.0_jprd)
THEN 380 WRITE(kulout,
'(A,F10.1,A,F6.2,A)')
'SUMMED TIME IN SERIAL SECTIONS = '&
381 & ,zt_sum3,
' SECONDS ',zt_sum3/
timesum(0)*100.0_jprd,&
384 WRITE(ixmllun,
'(A,F10.1,A,//,A,F6.2,A)')
'<serialztime unit="seconds">',&
385 & zt_sum3,
'</serialztime>',&
386 &
'<fracserialztime unit="percent">',&
387 &zt_sum3/
timesum(0)*100.0_jprd,&
388 &
'</fracserialztime>' 391 IF(zt_sum4 > 0.0_jprd)
THEN 392 WRITE(kulout,
'(A,F10.1,A,F6.2,A)')
'SUMMED TIME IN BARRIERS = '&
393 & ,zt_sum4,
' SECONDS ',zt_sum4/
timesum(0)*100.0_jprd,&
396 WRITE(ixmllun,
'(A,F10.1,A,//,A,F6.2,A)')&
397 &
'<barrierztime unit="seconds">',&
398 &zt_sum4,
'</barrierztime>',&
399 &
'<fracbarrierztime unit="percent">',&
400 & zt_sum4/
timesum(0)*100.0_jprd,
'</fracbarrierztime>' 403 IF(zt_sum5 > 0.0_jprd)
THEN 404 WRITE(kulout,
'(A,F10.1,A,F6.2,A)')
'SUMMED TIME IN MIXED SECTIONS = '&
405 & ,zt_sum5,
' SECONDS ',zt_sum5/
timesum(0)*100.0_jprd,&
407 WRITE(ixmllun,
'(A,F10.1,A,//,A,F6.2,A)')&
408 &
'<mixedztime unit="seconds">',&
409 &zt_sum5,
'</mixedztime>',&
410 &
'<fracmixedztime unit="percent">',&
411 & zt_sum5/
timesum(0)*100.0_jprd,
'</fracmixedztime>' 414 WRITE(kulout,
'(A,F8.2)')
'FRACTION OF TOTAL TIME ACCOUNTED FOR ',&
415 & (zt_sum+zt_sum2+zt_sumio+zt_sum3+zt_sum4+zt_sum5)/
timesum(0)*100.0_jprd
416 WRITE(kulout,
'(A,F8.2)')
'FRACTION OF TOTAL TIME ACCOUNTED FOR INCLUDING SUMB ',&
417 & (zt_sum+zt_sum2+zt_sumio+zt_sum3+zt_sum4+zt_sum5+zt_sumb)/
timesum(0)*100.0_jprd
418 WRITE(kulout,
'(" ")')
420 WRITE(ixmllun,
'(A,F8.2,A)')
'<fractotal unit="percent">',&
421 &(zt_sum+zt_sum2+zt_sumio+zt_sum3+zt_sum4+zt_sum5)/
timesum(0)*100.0_jprd,&
428 WRITE(ixmllun,
'(A)')
'</timing>' 432 WRITE(kulout,
'(/,A,I4,/)')
'COMMUNICATIONS STATISTICS:TASK=',jroc
433 WRITE(kulout,
'(A)') &
435 &
' SUM(s) SENDS AVG(kb) TOTAL(MB) MB/s '//&
436 &
' RECVS AVG(kb) TOTAL(MB) MB/s ' 457 WRITE(kulout,
'(I6,1X,A40,f6.1,2(I8,3F8.1))') &
463 WRITE(kulout,
'(/,A,I4,/)')
'UNKNOWN COMMUNICATIONS STATISTICS:TASK=', jroc
464 WRITE(kulout,
'(A)') &
465 &
' NUM BEFORE ROUTINE '//&
466 &
' SENDS TOTAL(MB) '//&
470 WRITE(kulout,
'(I6,1X,A40,2(I8,F8.1))') &
476 WRITE(kulout,
'(7x,"TOTAL",35x,2(I8,F8.1),//)') &
484 totsendbytes(jnum) = totsendbytes(jnum) +
sendbytes(jnum)
485 totrecvbytes(jnum) = totrecvbytes(jnum) +
recvbytes(jnum)
488 maxcommtime(jnum) = max(maxcommtime(jnum),
timesum(jnum))
496 WRITE(ixmllun,
'(A)')
'<timing_all_tasks>' 499 WRITE(kulout,
'(A)')
'STATS FOR ALL TASKS' 500 WRITE(kulout,
'(A)') &
501 &
' NUM ROUTINE CALLS MEAN(ms) MAX(ms) FRAC(%) UNBAL(%)' 509 zmaxt = zsummax(jnum)
510 IF(zmeant .NE. 0.0)
THEN 511 zunbal= (zmaxt-zmeant)/ztotal*100._jprd
516 WRITE(kulout,
'(I4,1X,A40,1X,I8,2(1X,F9.1),2(1X,F9.2))')&
517 &jnum,
ccdesc(jnum),icalls,zmean,zmax,zfrac,zunbal
520 WRITE(ixmllun,
'(A,I4,A,//,A,A40,A,//,A,I8,A,2(A,F9.1,A,//),2(A,F9.2,A,//),A)')&
521 &
'<item id="',jnum,
'">',&
522 &
'<description>',
ccdesc(jnum),
'</description>',&
523 &
'<calls>',icalls,
'</calls>',&
524 &
'<mean unit="ms">',zmean,
'</mean>',&
525 &
'<max unit="ms">',zmax,
'</max>',&
526 &
'<fraction unit="percent">',zfrac,
'</fraction>',&
527 &
'<unbalanced unit="percent">',zunbal,
'</unbalanced>',
'</item>' 532 WRITE(ixmllun,
'(A)')
'</timing_all_tasks>' 537 WRITE(ixmllun,
'(A)')
'<timing_communications>' 540 WRITE(kulout,
'(A)')
'STATS FOR COMMUNICATIONS' 541 WRITE(kulout,
'(A)') &
542 &
' NUM ROUTINE CALLS MEAN(ms) MAX(ms) FRAC(%) UNBAL(%)' 546 & .AND.
ncalls(jnum) > 1)
THEN 551 zmaxt = zsummax(jnum)
552 IF(zmeant .NE. 0.0)
THEN 553 zunbal= (zmaxt-zmeant)/ztotal*100._jprd
558 ztotunbal = ztotunbal+(zmaxt-zmeant)
559 WRITE(kulout,
'(I4,1X,A40,1X,I8,2(1X,F9.1),2(1X,F9.2))')&
560 &jnum,
ccdesc(jnum),icalls,zmean,zmax,zfrac,zunbal
562 WRITE(ixmllun,
'(A,I4,A,//,A,A40,A,//,A,I8,A,//,2(A,F9.1,A,//),2(A,F9.2,A,//),A)')&
563 &
'<comitem id="',jnum,
'">',&
564 &
'<description>',
ccdesc(jnum),
'</description>',&
565 &
'<calls>',icalls,
'</calls>',&
566 &
'<mean unit="ms">',zmean,
'</mean>',&
567 &
'<max unit="ms">',zmax,
'</max>',&
568 &
'<fraction unit="percent">',zfrac,
'</fraction>',&
569 &
'<unbalanced unit="percent">',zunbal,
'</unbalanced>',
'</comitem>' 577 WRITE(kulout,
'(A,F10.1,A)')
'SUMMED TIME IN COMMUNICATIONS = ',zt_sum,
' SECONDS ' 580 WRITE(kulout,
'(/,A,/)')
'TOTAL COMMUNICATIONS VOLUMES AND BANDWIDTH' 581 WRITE(kulout,
'(A)') &
583 &
' SUM(s) SEND(GB) RECV(GB) GB/s' 585 IF(totsendbytes(jnum).GT.0.0_jprd.OR.totrecvbytes(jnum).GT.0.0_jprd)
THEN 586 WRITE(kulout,
'(I6,1X,A40,f6.1,2F10.1,F8.1)') &
587 & jnum,
ccdesc(jnum),maxcommtime(jnum),&
588 & totsendbytes(jnum)*1.e-9, &
589 & totrecvbytes(jnum)*1.e-9 , &
590 & (totsendbytes(jnum)*1.e-9)/maxcommtime(jnum)
593 WRITE(kulout,
'(/,A,42x,f6.1,2F10.1,F8.1)') &
595 &
sum(maxcommtime) , &
596 &
sum(totsendbytes)*1.e-9, &
597 &
sum(totrecvbytes)*1.e-9, &
598 & (
sum(totsendbytes)*1.e-9)/
sum(maxcommtime)
603 WRITE(ixmllun,
'(A,F10.1,A)')
'<zcom unit="seconds">',zt_sum,
'</zcom>' 607 WRITE(ixmllun,
'(A)')
'</timing_communications>' 613 WRITE(ixmllun,
'(A)')
'<timing_parallel>' 616 WRITE(kulout,
'(A)')
'STATS FOR PARALLEL REGIONS' 617 WRITE(kulout,
'(A)') &
618 &
' NUM ROUTINE CALLS MEAN(ms) MAX(ms) FRAC(%) UNBAL(%)' 626 zmaxt = zsummax(jnum)
627 IF(zmeant .NE. 0.0)
THEN 628 zunbal= (zmaxt-zmeant)/ztotal*100._jprd
633 ztotunbal = ztotunbal+(zmaxt-zmeant)
634 WRITE(kulout,
'(I4,1X,A40,1X,I8,2(1X,F9.1),2(1X,F9.2))')&
635 &jnum,
ccdesc(jnum),icalls,zmean,zmax,zfrac,zunbal
637 WRITE(ixmllun,
'(A,I4,A,//,A,A40,A,//,A,I8,A,//,2(A,F9.1,A,//),2(A,F9.2,A,//),A)')&
638 &
'<parallelitem id="',jnum,
'">',&
639 &
'<description>',
ccdesc(jnum),
'</description>',&
640 &
'<calls>',icalls,
'</calls>',&
641 &
'<mean unit="seconds">',zmean,
'</mean>',&
642 &
'<max unit="seconds">',zmax,
'</max>',&
643 &
'<fraction unit="percent">',zfrac,
'</fraction>',&
644 &
'<unbalanced unit="percent">',zunbal,
'</unbalanced>',&
653 WRITE(kulout,
'(A,F10.1,A)')
'SUMMED TIME IN PARALLEL REGIONS = ',zt_sum,
' SECONDS ' 657 WRITE(ixmllun,
'(A,F10.1,A)')
'<zpar unit="seconds">',zt_sum,
'</zpar>' 661 WRITE(kulout,
'(A)')
'STATS FOR I/O REGIONS' 662 WRITE(kulout,
'(A)') &
663 &
' NUM ROUTINE CALLS MEAN(ms) MAX(ms) FRAC(%) UNBAL(%)' 671 zmaxt = zsummax(jnum)
672 IF(zmeant .NE. 0.0)
THEN 673 zunbal= (zmaxt-zmeant)/ztotal*100._jprd
678 ztotunbal = ztotunbal+(zmaxt-zmeant)
679 WRITE(kulout,
'(I4,1X,A40,1X,I8,2(1X,F9.1),2(1X,F9.2))')&
680 &jnum,
ccdesc(jnum),icalls,zmean,zmax,zfrac,zunbal
682 WRITE(ixmllun,
'(A,I4,A,//,A,A40,A,//,A,I8,A,//,2(A,F9.1,A,//),2(A,F9.2,A,//),A)')&
683 &
'<para_io_item id="',jnum,
'">',&
684 &
'<description>',
ccdesc(jnum),
'</description>',&
685 &
'<calls>',icalls,
'</calls>',&
686 &
'<mean unit="seconds">',zmean,
'</mean>',
'<max unit="seconds">',&
688 &
'<fraction unit="percent">',zfrac,
'</fraction>',&
689 &
'<unbalanced unit="percent">',zunbal,
'</unbalanced>',&
698 WRITE(kulout,
'(A,F10.1,A)')
'SUMMED TIME IN I/O REGIONS = ',&
703 WRITE(ixmllun,
'(A,F10.1,A)')
'<zio unit="seconds">',zt_sum,
'</zio>' 707 WRITE(kulout,
'(A)')
'STATS FOR SERIAL(no OMP) REGIONS' 708 WRITE(kulout,
'(A)') &
709 &
' NUM ROUTINE CALLS MEAN(ms) MAX(ms) FRAC(%) UNBAL(%)' 717 zmaxt = zsummax(jnum)
718 IF(zmeant .NE. 0.0)
THEN 719 zunbal= (zmaxt-zmeant)/ztotal*100._jprd
724 ztotunbal = ztotunbal+(zmaxt-zmeant)
725 WRITE(kulout,
'(I4,1X,A40,1X,I8,2(1X,F9.1),2(1X,F9.2))')&
726 &jnum,
ccdesc(jnum),icalls,zmean,zmax,zfrac,zunbal
728 WRITE(ixmllun,
'(A,I4,A,A,A40,A,A,I8,A,2(A,F9.1,A),2(A,F9.2,A,//),A)')&
729 &
'<serialitem id="',jnum,
'">',&
730 &
'<description>',
ccdesc(jnum),
'</description>',&
731 &
'<calls>',icalls,
'</calls>',&
732 &
'<mean unit="ms">',zmean,
'</mean>',
'<max unit="ms">',zmax,
'</max>',&
733 &
'<fraction unit="percent">',zfrac,
'</fraction>',&
734 &
'<unbalanced unit="percent">',zunbal,
'</unbalanced>',
'</serialitem>' 742 WRITE(kulout,
'(A,F10.1,A)')
'SUMMED TIME IN SERIAL REGIONS = ',zt_sum,
' SECONDS ' 746 WRITE(ixmllun,
'(A,F10.1,A)')
'<zserial unit="seconds">',&
747 &zt_sum,
'</zserial>' 751 WRITE(kulout,
'(A)')
'STATS FOR MIXED SECTIONS' 752 WRITE(kulout,
'(A)') &
753 &
' NUM ROUTINE CALLS MEAN(ms) MAX(ms) FRAC(%) UNBAL(%)' 761 zmaxt = zsummax(jnum)
762 IF(zmeant .NE. 0.0)
THEN 763 zunbal= (zmaxt-zmeant)/ztotal*100._jprd
768 ztotunbal = ztotunbal+(zmaxt-zmeant)
769 WRITE(kulout,
'(I4,1X,A40,1X,I8,2(1X,F9.1),2(1X,F9.2))')&
770 &jnum,
ccdesc(jnum),icalls,zmean,zmax,zfrac,zunbal
772 WRITE(ixmllun,
'(A,I4,A,A,A40,A,A,I8,A,2(A,F9.1,A),2(A,F9.2,A,//),A)')&
773 &
'<mixeditem id="',jnum,
'">',&
774 &
'<description>',
ccdesc(jnum),
'</description>',&
775 &
'<calls>',icalls,
'</calls>',&
776 &
'<mean unit="ms">',zmean,
'</mean>',
'<max unit="ms">',zmax,
'</max>',&
777 &
'<fraction unit="percent">',zfrac,
'</fraction>',&
778 &
'<unbalanced unit="percent">',zunbal,
'</unbalanced>',
'</mixeditem>' 786 WRITE(kulout,
'(A,F10.1,A)')
'SUMMED TIME IN MIXED SECTIONS = ',zt_sum,
' SECONDS ' 790 WRITE(ixmllun,
'(A,F10.1,A)')
'<zmixed unit="seconds">',&
795 WRITE(ixmllun,
'(A)')
'</timing_parallel>' 800 WRITE(kulout,
'(A,F10.1,A,F4.1,A)')&
801 &
'TOTAL MEASURED IMBALANCE =',ztotunbal,&
802 &
' SECONDS, ',ztotunbal/ztotal*100._jprd,
' PERCENT' 810 WRITE(kulout,
'(3(A,F10.1)/)')
'TOTAL WALLCLOCK TIME ',ztotal,&
811 &
' CPU TIME',ztotcpu,
' VECTOR TIME ',ztotvcpu
813 WRITE(ixmllun,
'(3(A,F10.1,A,//)/)')
'<totalwallclocktime>',ztotal,&
814 &
'</totalwallclocktime>',&
815 &
'<cputime>',ztotcpu,
'</cputime>',&
816 &
'<vectortime>',ztotvcpu,
'</vectortime>' 836 & ktag=itag,cdstring=
'GSTATS_PRINT:')
839 & ktag=itag+1,cdstring=
'GSTATS_PRINT:')
841 & ktag=itag+2,cdstring=
'GSTATS_PRINT:')
843 cltemp((jdelay-1)*10+1:jdelay*10)=
cdelay_time(jdelay)
846 & ktag=itag+3,cdstring=
'GSTATS_PRINT:')
851 & ktag=itag,cdstring=
'GSTATS_PRINT:')
854 & ktag=itag+1,cdstring=
'GSTATS_PRINT:')
856 & ktag=itag+2,cdstring=
'GSTATS_PRINT:')
858 & ktag=itag+3,cdstring=
'GSTATS_PRINT:')
860 cdelay_time(jdelay)=cltemp((jdelay-1)*10+1:jdelay*10)
866 WRITE(kulout,
'("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")')
867 WRITE(kulout,
'("TASK=",I6," NUMBER OF UNEXPECTED DELAYS=",I4)') jroc,
ndelay_index 869 WRITE(kulout,
'(" NOTE THAT THE MAXIMUM NUMBER OF DELAYS HAS BEEN REACHED =",I6)')
jpmaxdelays 872 WRITE(kulout,
'("TOTAL UNEXPECTED DELAY TIME (SECS) =",F9.1)') zdelay
873 zdelay_max=max(zdelay_max,zdelay)
875 WRITE(kulout,
'(A,":",A,":",A,1X,I4,1X,A3,1X,A40,1X,F6.1)')&
888 WRITE(kulout,
'(" ")')
889 WRITE(kulout,
'("TASK=",I6," UNEXPECTED DELAYS SORTED BY COUNTER")') jroc
899 IF( idelay /= 0 )
THEN 900 WRITE(kulout,
'(I4,1X,A3,1X,A40,1X,I4,3X,F6.1)')&
904 WRITE(kulout,
'(" ")')
905 WRITE(kulout,
'(" ")')
907 CALL mpl_barrier(cdstring=
'GSTATS_PRINT')
911 WRITE(kulout,
'("MAXIMUM TOTAL UNEXPECTED DELAY TIME (SECS) =",F9.1)') zdelay_max
912 WRITE(kulout,
'(" ")')
913 WRITE(kulout,
'(" ")')
914 WRITE(kulout,
'(" TASK "," MPL "," BAR "," GBR "," GB2 "," OMP ",& 915 &" IO- "," SER "," MXD ")')
917 WRITE(kulout,
'(I6,8(2X,F9.1))') jroc,zmpl(jroc),zbar(jroc),zgbr(jroc),zgb2(jroc),&
918 &zomp(jroc),zio(jroc),zser(jroc),zmxd(jroc)
920 WRITE(kulout,
'(" ")')
921 WRITE(kulout,
'(" ")')
928 WRITE(kulout,
'(A)')
'=== TRACE OF CALLS TO GSTATS' 930 WRITE(kulout,
'(A,2I10)')
' ONLY PART OF TRACE STORED AS BUFFER TO SMALL ',&
933 WRITE(kulout,
'(A)')
'===' 936 claction(2)=
'SUSPEND' 941 IF (iaction == 0)
THEN 943 zthistime(icaller) = 0.0_jprd
944 ELSEIF (iaction == 2)
THEN 945 zthistime(icaller) =
time_trace(jcall)-ztimelcall(icaller)
946 ELSEIF (iaction == 3)
THEN 949 IF (iaction == 1)
THEN 950 WRITE(kulout,
'(1X,F10.3,1X,A,1X,A,1X,F10.3)') &
952 &zthistime(icaller)+(
time_trace(jcall)-ztimelcall(icaller))
961 paveave(0:klen) = zaveave(0:klen)
963 paveave(0:klen) = 0.0_jprd
966 WRITE(kulout,
'(/A)')
'===-=== END OF TIMING STATISTICS ===-===' 971 WRITE(ixmllun,
'(A)')
'<memory>' 974 WRITE(kulout,*)
'STATS FOR MEMORY' 976 &
' NUM ROUTINE CALLS CALL MAXINCR TOTINCR MININCR' 978 &
' NO (KB) (KB) (KB)' 985 WRITE(kulout,
'(I4,1X,A20,1X,I8,1X,I6,3(1X,I9))')&
986 &jnum,
ccdesc(jnum),icalls,inum,imem,jmem,
ntmem(jnum,5)
989 WRITE(ixmllun,
'(A,I4,A,//,A,A20,A,//,A,I8,A,//,A,I6,A,//,3(A,I9,A,//))')&
990 &
'<memitem id="',jnum,
'"/>',&
991 &
'<description>',
ccdesc(jnum),
'</description>',&
992 &
'<calls>',icalls,
'</calls>',&
993 &
'<callnum>',inum,
'</callnum>',
'<maxincr unit="kb">',imem,
'</maxincr>',&
994 &
'<totincr unit="kb">',jmem,
'</totincr>',&
995 &
'<minincr unit="kb">',
ntmem(jnum,5),
'</minincr>' 1001 WRITE(kulout,
'(/A)')
'===-=== END OF MEMORY STATISTICS ===-===' 1004 WRITE(ixmllun,
'(A)')
'</memory>' 1008 WRITE(ixmllun,
'(A)')
'</gstats>' real(kind=jprb), dimension(:), allocatable unknown_recvbytes
integer(kind=jpim), dimension(0:jpmaxstat, 5) ntmem
integer(kind=jpim) myproc_stats
real(kind=jprd), dimension(:), allocatable time_trace
real(kind=jprd), dimension(1:jpmaxdelays) tdelay_value
integer(kind=jpim), parameter jptagstat
character *10, dimension(1:jpmaxdelays) cdelay_time
integer(kind=jpim), parameter jbmaxbase
real(kind=jprd), dimension(0:jpmaxstat) tvcpusum
integer(kind=jpim), dimension(:), allocatable numrecv
real(kind=jprb), dimension(:), allocatable sendbytes
real(kind=jprd), dimension(0:jpmaxstat) timelcall
integer(kind=jpim) nproc_stats
integer(kind=jpim), dimension(1:jpmaxdelays) ndelay_counter
integer(kind=jpim), dimension(:), allocatable unknown_numrecv
integer(kind=jpim), dimension(0:jpmaxstat) nbar_ptr
integer(kind=jpim), parameter jpmaxstat
integer(kind=jpim) ntrace_stats
integer(kind=jpim), dimension(:), allocatable ncall_trace
real(kind=jprb), dimension(:), allocatable unknown_sendbytes
subroutine gstats_print(KULOUT, PAVEAVE, KLEN)
character *3, dimension(0:jpmaxstat) cctype
character *50, dimension(0:jpmaxstat) ccdesc
integer(kind=jpim), dimension(:), allocatable nprcids_stats
integer(kind=jpim) ndelay_index
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
integer(kind=jpim) nprnt_stats
integer(kind=jpim), parameter mrealt
real(kind=jprd), dimension(0:jpmaxstat) timesumb
real(kind=jprd), dimension(0:jpmaxstat) ttcpusum
integer(kind=jpim), dimension(:), allocatable unknown_numsend
integer(kind=jpim) ncalls_total
real(kind=jprb), dimension(:), allocatable recvbytes
real(kind=jprd), dimension(0:jpmaxstat) timemax
integer(kind=jpim), dimension(0:jpmaxstat) ncalls
real(kind=jprd), dimension(0:jpmaxstat) timesum
integer(kind=jpim), parameter jpmaxdelays
real(kind=jprd), dimension(0:jpmaxstat) timesqsum
real(kind=jprd), dimension(:), allocatable time_start
integer(kind=jpim), dimension(:), allocatable numsend