01:       PROGRAM TEST4
02: *
03: *  -- LAPACK test routine (version 3.2) --
04: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
05: *     November 2006
06: *
07: *     .. Parameters ..
08:       INTEGER            NMAX, ITS
09:       PARAMETER          ( NMAX = 100, ITS = 5000 )
10: *     ..
11: *     .. Local Scalars ..
12:       INTEGER            I, J
13:       REAL               ALPHA, AVG, T1, T2, TNOSEC
14: *     ..
15: *     .. Local Arrays ..
16:       REAL               X( NMAX ), Y( NMAX )
17: *     ..
18: *     .. External Functions ..
19:       REAL               SECOND
20:       EXTERNAL           SECOND
21: *     ..
22: *     .. Intrinsic Functions ..
23:       INTRINSIC          REAL
24: *     ..
25: *     .. Executable Statements ..
26: *
27: *
28: *     Initialize X and Y
29: *
30:       DO 10 I = 1, NMAX
31:          X( I ) = REAL( 1 ) / REAL( I )
32:          Y( I ) = REAL( NMAX-I ) / REAL( NMAX )
33:    10 CONTINUE
34:       ALPHA = 0.315
35: *
36: *     Time 1,000,000 SAXPY operations
37: *
38:       T1 = SECOND( )
39:       DO 30 J = 1, ITS
40:          DO 20 I = 1, NMAX
41:             Y( I ) = Y( I ) + ALPHA*X( I )
42:    20    CONTINUE
43:          ALPHA = -ALPHA
44:    30 CONTINUE
45:       T2 = SECOND( )
46:       WRITE( 6, 9999 )T2 - T1
47:       IF( T2-T1.GT.0.0 ) THEN
48:          WRITE( 6, 9998 )1.0 / ( T2-T1 )
49:       ELSE
50:          WRITE( 6, 9994 )
51:       END IF
52:       TNOSEC = T2 - T1
53: *
54: *     Time 1,000,000 SAXPY operations with SECOND in the outer loop
55: *
56:       T1 = SECOND( )
57:       DO 50 J = 1, ITS
58:          DO 40 I = 1, NMAX
59:             Y( I ) = Y( I ) + ALPHA*X( I )
60:    40    CONTINUE
61:          ALPHA = -ALPHA
62:          T2 = SECOND( )
63:    50 CONTINUE
64: *
65: *     Compute the time used in milliseconds used by an average call
66: *     to SECOND.
67: *
68:       WRITE( 6, 9997 )T2 - T1
69:       AVG = ( ( T2-T1 ) - TNOSEC ) * 1000./REAL( ITS )
70:       WRITE( 6, 9996 )AVG
71: *
72: *     Compute the equivalent number of floating point operations used
73: *     by an average call to SECOND.
74: *
75:       IF( TNOSEC.GT.0.0 )
76:      $   WRITE( 6, 9995 )1000.*AVG / TNOSEC
77: *
78:  9999 FORMAT( ' Time for 1,000,000 SAXPY ops  = ', G10.3, ' seconds' )
79:  9998 FORMAT( ' SAXPY performance rate        = ', G10.3, ' mflops ' )
80:  9997 FORMAT( ' Including SECOND, time        = ', G10.3, ' seconds' )
81:  9996 FORMAT( ' Average time for SECOND       = ', G10.3,
82:      $      ' milliseconds' )
83:  9995 FORMAT( ' Equivalent floating point ops = ', G10.3, ' ops' )
84:  9994 FORMAT( ' *** Error:  Time for operations was zero' )
85:       CALL MYSUB(NMAX,X,Y)
86:       END
87:       SUBROUTINE MYSUB(N,X,Y)
88:       INTEGER N
89:       REAL X(N), Y(N)
90:       RETURN
91:       END
92: