oliveria@engin.umich.edu (ROQUE DONIZETE DE OLIVEIRA) (09/13/90)
How to correctly calculate cpu usage in fortran on the IBM RS/6000 ? I tried the following program ( h.f ) : C----------------------------------------------------------------------- REAL*8 T , T1 , T2 , X CALL TIME(T1) X = 1. DO 10 I=1,100000 X = X + 10. 10 CONTINUE WRITE(6,50) X 50 FORMAT('X=',D14.7) CALL TIME(T2) T=T2 -T1 WRITE(6,100) T 100 FORMAT('T=',D14.7) STOP END C----------------------------------------------------------------------- SUBROUTINE TIME(T) REAL*8 T I1 = MCLOCK( ) T = 60*I1 RETURN END C----------------------------------------------------------------------- xlf -o h.exe h.f ** main === End of Compilation 1 === ** time === End of Compilation 2 === 1501-510 Compilation successful for file h.f. xanadu% h.exe X= .1000001D+07 T= .4800000D+03 STOP xanadu% time h.exe X= .1000001D+07 T= .4200000D+03 STOP 1.8900u 1.1900s 0:00 91666% 0+0k 0+0io 0pf+0w As you can see the output T=480 seconds is wrong (it took about a second to run). It is probably a mistake in my sample program above. Can someone point it out to me ? I wished it had the ETIME function as most other unix f77 do. Thanks. Roque Oliveira oliveria@caen.engin.umich.edu
RAH@IBM.COM ("Russell A. Heise") (10/10/90)
oliveria@engin.umich.edu (ROQUE DONIZETE DE OLIVEIRA) writes: > How to correctly calculate cpu usage in fortran on the IBM RS/6000 ? > I tried the following program ( h.f ) : > C----------------------------------------------------------------------- > REAL*8 T , T1 , T2 , X > CALL TIME(T1) > X = 1. > DO 10 I=1,100000 > X = X + 10. > 10 CONTINUE > WRITE(6,50) X > 50 FORMAT('X=',D14.7) > CALL TIME(T2) > T=T2 -T1 > WRITE(6,100) T > 100 FORMAT('T=',D14.7) > STOP > END > C----------------------------------------------------------------------- > SUBROUTINE TIME(T) > REAL*8 T > I1 = MCLOCK( ) > T = 60*I1 > RETURN > END > C----------------------------------------------------------------------- > > xlf -o h.exe h.f > ** main === End of Compilation 1 === > ** time === End of Compilation 2 === > 1501-510 Compilation successful for file h.f. > xanadu% h.exe > X= .1000001D+07 > T= .4800000D+03 > STOP > xanadu% time h.exe > X= .1000001D+07 > T= .4200000D+03 > STOP > 1.8900u 1.1900s 0:00 91666% 0+0k 0+0io 0pf+0w > > As you can see the output T=480 seconds is wrong (it took about a second > to run). It is probably a mistake in my sample program above. Can someone > point it out to me ? > I wished it had the ETIME function as most other unix f77 do. > Thanks. An associate recommends changing the two lines: > I1 = MCLOCK( ) > T = 60*I1 to: T = DBLE(MCLOCK()/100D0) The change introduces several points to consider. The documentation for MCLOCK() is wrong: it gives results in hundredths of a second (not sixtieths). The "D0" at the end of the division instructs the compiler to maintain precision appropriate for "REAL*8 T". The DBLE() confirms the casting from integer to REAL*8. Russ Heise, AIX Technical Support, IBM