1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
PROGRAM TEST5
* * -- LAPACK test routine (version 3.3.1) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * -- April 2011 -- * * .. Parameters .. INTEGER NMAX, ITS PARAMETER ( NMAX = 1000, ITS = 50000 ) * .. * .. Local Scalars .. INTEGER I, J DOUBLE PRECISION ALPHA, AVG, T1, T2, TNOSEC, TOTAL * .. * .. Local Arrays .. DOUBLE PRECISION X( NMAX ), Y( NMAX ) * .. * .. External Functions .. DOUBLE PRECISION DSECND EXTERNAL DSECND * .. * .. Intrinsic Functions .. INTRINSIC DBLE * .. * .. Executable Statements .. * * .. Figure TOTAL flops .. TOTAL = DBLE(NMAX) * DBLE(ITS) * 2.0 * * Initialize X and Y * DO 10 I = 1, NMAX X( I ) = DBLE( 1 ) / DBLE( I ) Y( I ) = DBLE( NMAX-I ) / DBLE( NMAX ) 10 CONTINUE ALPHA = 0.315D0 * * Time TOTAL SAXPY operations * T1 = DSECND( ) DO 30 J = 1, ITS DO 20 I = 1, NMAX Y( I ) = Y( I ) + ALPHA*X( I ) 20 CONTINUE ALPHA = -ALPHA 30 CONTINUE T2 = DSECND( ) TNOSEC = T2 - T1 WRITE( 6, 9999 )TOTAL, TNOSEC IF( TNOSEC.GT.0.0 ) THEN WRITE( 6, 9998 )(TOTAL/1.0D6)/TNOSEC ELSE WRITE( 6, 9994 ) END IF * * Time TOTAL DAXPY operations with DSECND in the outer loop * T1 = DSECND( ) DO 50 J = 1, ITS DO 40 I = 1, NMAX Y( I ) = Y( I ) + ALPHA*X( I ) 40 CONTINUE ALPHA = -ALPHA T2 = DSECND( ) 50 CONTINUE * * Compute the time used in milliseconds used by an average call * to DSECND. * WRITE( 6, 9997 )T2 - T1 AVG = ( ( T2-T1 ) - TNOSEC ) * 1000.0D+00/DBLE( ITS ) IF( AVG.GT.0.0) $ WRITE( 6, 9996 )AVG * * Compute the equivalent number of floating point operations used * by an average call to DSECND. * IF(( AVG.GT.0.0 ).AND.( TNOSEC.GT.0.0 )) $ WRITE( 6, 9995 )(AVG/1000) * TOTAL / TNOSEC * 9999 FORMAT( ' Time for ', G10.3,' DAXPY ops = ', G10.3, ' seconds' ) 9998 FORMAT( ' DAXPY performance rate = ', G10.3, ' mflops ' ) 9997 FORMAT( ' Including DSECND, time = ', G10.3, ' seconds' ) 9996 FORMAT( ' Average time for DSECND = ', G10.3, $ ' milliseconds' ) 9995 FORMAT( ' Equivalent floating point ops = ', G10.3, ' ops' ) 9994 FORMAT( ' *** Warning: Time for operations was less or equal', $ ' than zero => timing in TESTING might be dubious' ) CALL MYSUB(NMAX,X,Y) END SUBROUTINE MYSUB(N,X,Y) INTEGER N DOUBLE PRECISION X(N), Y(N) RETURN END |