home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
fortran
/
library
/
whets
/
whets.for
/
Fwhets.f
< prev
next >
Wrap
Text File
|
1990-02-21
|
4KB
|
218 lines
C The following line is for the Lawrence Livermore Labs Fortran Compiler
C*$*OPTION FREE FORMAT
C
C WHETSTONE BENCHMARK
C
C SINGLE-PRECISION VERSION
C
C This program is the result of extensive research to
C determine the instruction mix of a typical Fortran
C program. The results of this program on different
C machines should give a good indication of which
C machine performs better under a typical load of
C Fortran programs. The statements are purposely
C arranged to defeat optimization by the compiler.
C
DIMENSION CPU(2)
COMMON T,T1,T2,E1(4),J,K,L
C
T = 0.499975
T1 = 0.50025
T2 = 2.0
PRINT 999
999 FORMAT (// ' WHETSTONE BENCHMARK (SINGLE PRECISION)')
1 PRINT 1000
1000 FORMAT (// ' NUMBER OF ITERATIONS? ')
READ 1001, ITER
1001 FORMAT (I8)
IPASS = 1
C
5 IF (IPASS.EQ.2) ITER = ITER + 10
IF (IPASS.EQ.2) PRINT 1002, ITER
1002 FORMAT (' PASS 2:', I10, ' ITERATIONS'/)
I = ITER
10 SSEC = SECOND()
C
N1 = 0
N2 = 12 * I
N3 = 14 * I
N4 = 345 * I
N5 = 0
N6 = 210 * I
N7 = 32 * I
N8 = 899 * I
N9 = 616 * I
N10 = 0
N11 = 93 * I
N12 = 0
C
X1 = 1.0
X2 = -1.0
X3 = -1.0
X4 = -1.0
C
IF (N1) 19, 19, 11
11 DO 18 I = 1, N1, 1
X1 = (X1 + X2 + X3 - X4) * T
X2 = (X1 + X2 - X3 + X4) * T
X4 = (-X1+ X2 + X3 + X4) * T
X3 = (X1 - X2 + X3 + X4) * T
18 CONTINUE
19 CONTINUE
CALL POUT(N1,N1,N1,X1,X2,X3,X4)
C
E1(1) = 1.0
E1(2) = -1.0
E1(3) = -1.0
E1(4) = -1.0
IF (N2) 29, 29, 21
21 DO 28 I = 1, N2, 1
E1(1) = ( E1(1) + E1(2) + E1(3) - E1(4)) * T
E1(2) = ( E1(1) + E1(2) - E1(3) + E1(4)) * T
E1(3) = ( E1(1) - E1(2) + E1(3) + E1(4)) * T
E1(4) = (-E1(1) + E1(2) + E1(3) + E1(4)) * T
28 CONTINUE
29 CONTINUE
CALL POUT(N2,N3,N2,E1(1),E1(2),E1(3),E1(4))
C
IF (N3) 39, 39, 31
31 DO 38 I = 1, N3, 1
38 CALL PA(E1)
39 CONTINUE
CALL POUT(N3,N2,N2,E1(1),E1(2),E1(3),E1(4))
C
J = 1
IF (N4) 49, 49, 41
41 DO 48 I = 1, N4, 1
IF (J-1) 43, 42, 43
42 J = 2
GO TO 44
43 J = 3
44 IF (J-2) 46, 46, 45
45 J = 0
GO TO 47
46 J = 1
47 IF (J-1) 411, 412, 412
411 J = 1
GO TO 48
412 J = 0
48 CONTINUE
49 CONTINUE
CALL POUT(N4,J,J,X1,X2,X3,X4)
C
J = 1
K = 2
L = 3
IF (N6) 69, 69, 61
61 DO 68 I = 1, N6, 1
J = J * (K-J) * (L-K)
K = L * K - (L-J) * K
L = (L-K) * (K+J)
E1(L-1) = J + K + L
E1(K-1) = J * K * L
68 CONTINUE
69 CONTINUE
CALL POUT(N6,J,K,E1(1),E1(2),E1(3),E1(4))
C
X = 0.5
Y = 0.5
IF (N7) 79, 79, 71
71 DO 78 I = 1, N7, 1
X = T * ATAN(T2*SIN(X)*COS(X)/(COS(X+Y)+COS(X-Y)-1.0))
Y = T * ATAN(T2*SIN(Y)*COS(Y)/(COS(X+Y)+COS(X-Y)-1.0))
78 CONTINUE
79 CONTINUE
CALL POUT(N7,J,K,X,X,Y,Y)
C
X = 1.0
Y = 1.0
Z = 1.0
IF (N8) 89, 89, 81
81 DO 88 I = 1, N8, 1
88 CALL P3(X,Y,Z)
89 CONTINUE
CALL POUT(N8,J,K,X,Y,Z,Z)
C
J = 1
K = 2
L = 3
E1(1) = 1.0
E1(2) = 2.00
E1(3) = 3.0
IF (N9) 99, 99, 91
91 DO 98 I = 1, N9, 1
98 CALL P0
99 CONTINUE
CALL POUT(N9,J,K,E1(1),E1(2),E1(3),E1(4))
C
J = 2
K = 3
IF (N10) 109, 109, 101
101 DO 108 I = 1, N10, 1
J = J + K
K = J + K
J = J - K
K = K - J - J
108 CONTINUE
109 CONTINUE
CALL POUT(N10,J,K,X1,X2,X3,X4)
C
X = 0.75
IF (N11) 119, 119, 111
111 DO 118 I = 1, N11, 1
118 X = SQRT(EXP(ALOG(X)/T1))
119 CONTINUE
CALL POUT(N11,J,K,X,X,X,X)
C
FSEC = SECOND()
CPU(IPASS) = FSEC - SSEC
PRINT 2000, IPASS, CPU(IPASS)
2000 FORMAT (/ ' PASS',I2,':',F10.4,' SEC CPU TIME'//)
IPASS = IPASS + 1
IF (IPASS.LE.2) GO TO 5
C
WIPS = 1000.0 / (CPU(2) - CPU(1))
PRINT 3000, WIPS
3000 FORMAT (// ' WHETSTONE INSTRUCTIONS PER SECOND:', F7.1)
C
STOP 'END SINGLE-PRECISION TEST'
END
C
SUBROUTINE PA(E)
COMMON T, T1, T2
DIMENSION E(4)
J = 0
1 E(1) = ( E(1) + E(2) + E(3) - E(4)) * T
E(2) = ( E(1) + E(2) - E(3) + E(4)) * T
E(3) = ( E(1) - E(2) + E(3) + E(4)) * T
E(4) = (-E(1) + E(2) + E(3) + E(4)) / T2
J = J + 1
IF (J-6) 1, 2, 2
2 CONTINUE
RETURN
END
C
SUBROUTINE P0
COMMON T, T1, T2, E1(4), J, K, L
E1(J) = E1(K)
E1(K) = E1(L)
E1(L) = E1(J)
RETURN
END
C
SUBROUTINE P3(X,Y,Z)
COMMON T, T1, T2
X1 = X
Y1 = Y
X1 = T * (X1 + Y1)
Y1 = T * (X1 + Y1)
Z = (X1 + Y1) / T2
RETURN
END
C
SUBROUTINE POUT(N,J,K,X1,X2,X3,X4)
PRINT 3000, N, J, K, X1, X2, X3, X4
3000 FORMAT(1H , 3I7, 4E12.4)
RETURN
END