PROGRAM TIMTST C C TO BUILD: C FOR TIMERTEST=TIMERTEST C FTB TIMERTEST=TIMERTEST,LB:[1,1]TIMER C C *** TIMER ROUTINES MAY BE USED WITH FODT....HOWEVER, TIMING INFORMATION C WILL INCLUDE TIME WAITING FOR TERMINAL I/O (ELAPSED TIME) *** C C C *** TIMER.CMN *** C COMMON DECLARATIONS FOR TIMER PROFILING ROUTINES: COMMON /TIMCOM/ LUN, NSUBS, NSTAK COMMON /TIMCM0/ CPUTIM COMMON /TIMCM1/ NAMES COMMON /TIMCM2/ ISTAK COMMON /TIMCM3/ TSTAK C C ARRAY DECLARATIONS: C SUBSTITUTE THE NUMBER OF ROUTINES YOU WANT TO PROFILE FOR ### C SUBSTITUTE THE DEPTH OF NESTED ROUTINES BEING TIMED FOR @@@ C INTEGER LUN, NSUBS, NSTAK INTEGER ISTAK(5) REAL*4 CPUTIM(3,4), TSTAK(5) REAL*8 NAMES(4) C C INITIALIZE THE PARAMETERS AND ROUTINE NAMES: C DATA NSUBS/4/, NSTAK/5/, LUN/5/ DATA NAMES /'MAINPROG','SUB1','SUB2','LOOP1'/ C C THE PROFILE INFORMATION IS WRITTEN TO THE LUN SPECIFIED BY THE C VARIABLE 'LUN'....THIS MAY BE CHANGED TO ANY LUN ASSOCIATED WITH C AN OPEN, FORMATTED, SEQUENTIAL FILE.....IF IT IS ZERO OR NEGATIVE, C THE PROFILE WILL NOT BE GENERATED. THE DEFAULT LUN 5 IS NORMALLY C ASSOCIATED WITH THE TASK'S TI: C C THE TIMER ROUTINES ARE: C CALL TIMEON - START TIMER(S) C CALL TIMEOF - STOP TIMER(S) AND OPTIONALLY PRINT STATISTICS C CALL TIMCAL(NSUB) - START SUBROUTINE TIMER AND PRINT ENTRY MESSAGE C CALL TIMRET(NSUB) - STOP SUBROUTINE TIMER AND PRINT EXIT MESSAGE C CALL TIMCL(NSUB) - START SUBROUTINE TIMER (NO MSG) C CALL TIMRT(NSUB) - STOP SUBROUTINE TIMER (NO MSG) C C WHERE: C NSUB = SUBROUTINE NUMBER (MAIN IS ALWAYS 1) C NSUB MUST BE > 1 C C *** END *** TIMER.CMN *** C CALL TIMEON !START TIMER OF MAINPROG OPEN(UNIT=2,NAME='TMP.TMP',TYPE='SCRATCH',FORM='FORMATTED') DO 100 J = 1,180 WRITE(2,201) 201 FORMAT (100X) 100 CONTINUE CALL TIMEOF !PRINT A TIMING REPORT FOR THE ABOVE LOOP C REWIND 2 !POINT TO THE BEGINNING OF THE SCRATCH FILE C CALL TIMEON !START A NEW PROFILE DO 200 J = 1,3 CALL SUB1 200 REWIND 2 CALL TIMEOF !PRINT A REPORT FOR THE ABOVE LOOP AND SUBRS CLOSE(UNIT=2) !THE SCRATCH FILE IS DELETED WHEN CLOSED STOP END C SUBROUTINE SUB1 CALL TIMCAL(2) !START TIMING OF SUB1...PRINT ENTRY MSG DO 100 J = 1,60 CALL SUB2 100 CONTINUE CALL TIMRET(2) !STOP SUB1 TIMING AND PRINT EXIT MSG RETURN END C SUBROUTINE SUB2 CALL TIMCL(3) !START TIMING THIS WHOLE SUBR AS SUB2 (NO MSG) DO 5,I=1,5 5 CONTINUE CALL TIMCL(4) !TIME THIS SECTION AS LOOP1 (NO MSG) WRITE(2,201) 201 FORMAT (100X) CALL TIMRT(4) !STOP LOOP1 TIMING (NO MSG) CALL TIMRT(3) !STOP TIMING SUB2 (NO MSG) RETURN END