📄 instrument.f
字号:
!----------------------------------------------------------------------- SUBROUTINE INSTRUMENT(K,KALL,TTOT,TMIN,TMAX)!$$$ SUBPROGRAM DOCUMENTATION BLOCK! . . . .! SUBPROGRAM: INSTRUMENT MONITOR WALL-CLOCK TIMES, ETC.! PRGMMR: IREDELL ORG: NP23 DATE:1998-07-16!! ABSTRACT: THIS SUBPROGRAM IS USEFUL IN INSTRUMENTING A CODE! BY MONITORING THE NUMBER OF TIMES EACH GIVEN SECTION! OF A PROGRAM IS INVOKED AS WELL AS THE MINIMUM, MAXIMUM! AND TOTAL WALL-CLOCK TIME SPENT IN THE GIVEN SECTION.!! PROGRAM HISTORY LOG:! 1998-07-16 IREDELL!! USAGE: CALL INSTRUMENT(K,KALL,TTOT,TMIN,TMAX)! INPUT ARGUMENT LIST:! K - INTEGER POSITIVE SECTION NUMBER! OR MAXIMUM SECTION NUMBER IN THE FIRST INVOCATION! OR ZERO TO RESET ALL WALL-CLOCK STATISTICS! OR NEGATIVE SECTION NUMBER TO SKIP MONITORING! AND JUST RETURN STATISTICS.!! OUTPUT ARGUMENT LIST:! KALL - INTEGER NUMBER OF TIMES SECTION IS CALLED! TTOT - REAL TOTAL SECONDS SPENT IN SECTION! TMIN - REAL MINIMUM SECONDS SPENT IN SECTION! TMAX - REAL MAXIMUM SECONDS SPENT IN SECTION!! SUBPROGRAMS CALLED:! W3UTCDAT RETURN THE UTC DATE AND TIME! W3DIFDAT RETURN A TIME INTERVAL BETWEEN TWO DATES!! REMARKS:! THIS SUBPROGRAM SHOULD NOT BE INVOKED FROM A MULTITASKING REGION.! NORMALLY, TIME SPENT INSIDE THIS SUBPROGRAM IS NOT COUNTED.! WALL-CLOCK TIMES ARE KEPT TO THE NEAREST MILLISECOND.!! EXAMPLE.! CALL INSTRUMENT(2,KALL,TTOT,TMIN,TMAX) ! KEEP STATS FOR 2 SUBS! DO K=1,N! CALL SUB1! CALL INSTRUMENT(1,KALL,TTOT,TMIN,TMAX) ! ACCUM STATS FOR SUB1! CALL SUB2! CALL INSTRUMENT(2,KALL,TTOT,TMIN,TMAX) ! ACCUM STATS FOR SUB2! ENDDO! PRINT *,'SUB2 STATS: ',KALL,TTOT,TMIN,TMAX! CALL INSTRUMENT(-1,KALL,TTOT,TMIN,TMAX) ! RETURN STATS FOR SUB1! PRINT *,'SUB1 STATS: ',KALL,TTOT,TMIN,TMAX!! ATTRIBUTES:! LANGUAGE: FORTRAN 90!!$$$ IMPLICIT NONE INTEGER,INTENT(IN):: K INTEGER,INTENT(OUT):: KALL REAL,INTENT(OUT):: TTOT,TMIN,TMAX INTEGER,SAVE:: KMAX=0 INTEGER,DIMENSION(:),ALLOCATABLE,SAVE:: KALLS REAL,DIMENSION(:),ALLOCATABLE,SAVE:: TTOTS,TMINS,TMAXS INTEGER,DIMENSION(8),SAVE:: IDAT INTEGER,DIMENSION(8):: JDAT REAL,DIMENSION(5):: RINC INTEGER:: KA! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KA=ABS(K)! ALLOCATE MONITORING ARRAYS IF INITIAL INVOCATION IF(KMAX.EQ.0) THEN KMAX=K ALLOCATE(KALLS(KMAX)) ALLOCATE(TTOTS(KMAX)) ALLOCATE(TMINS(KMAX)) ALLOCATE(TMAXS(KMAX)) KALLS=0 KA=0! OR RESET ALL STATISTICS BACK TO ZERO ELSEIF(K.EQ.0) THEN KALLS=0! OR COUNT TIME SINCE LAST INVOCATION AGAINST THIS SECTION ELSEIF(K.GT.0) THEN CALL W3UTCDAT(JDAT) CALL W3DIFDAT(JDAT,IDAT,4,RINC) KALLS(K)=KALLS(K)+1 IF(KALLS(K).EQ.1) THEN TTOTS(K)=RINC(4) TMINS(K)=RINC(4) TMAXS(K)=RINC(4) ELSE TTOTS(K)=TTOTS(K)+RINC(4) TMINS(K)=MIN(TMINS(K),RINC(4)) TMAXS(K)=MAX(TMAXS(K),RINC(4)) ENDIF ENDIF! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! RETURN STATISTICS IF(KA.GE.1.AND.KA.LE.KMAX.AND.KALLS(KA).GT.0) THEN KALL=KALLS(KA) TTOT=TTOTS(KA) TMIN=TMINS(KA) TMAX=TMAXS(KA) ELSE KALL=0 TTOT=0 TMIN=0 TMAX=0 ENDIF! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! KEEP CURRENT TIME FOR NEXT INVOCATION IF(K.GE.0) CALL W3UTCDAT(IDAT) END SUBROUTINE INSTRUMENT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -