home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / fortran / library / whets / fwhetd.f < prev    next >
Text File  |  1994-07-05  |  5KB  |  223 lines

  1. C The following line is for the Lawrence Livermore Labs Fortran Compiler
  2. C*$*OPTION FREE FORMAT              
  3. C
  4. C    WHETSTONE BENCHMARK
  5. C
  6. C    DOUBLE PRECISION VERSION
  7. C
  8. C    This program is the result of extensive research to
  9. C    determine the instruction mix of a typical Fortran
  10. C    program.  The results of this program on different
  11. C    machines should give a good indication of which
  12. C    machine performs better under a typical load of
  13. C    Fortran programs.  The statements are purposely
  14. C    arranged to defeat optimization by the compiler.
  15. C
  16.     DOUBLE PRECISION X1,X2,X3,X4,X,Y,Z,T,T1,T2,E1
  17.     DIMENSION CPU(2)
  18.     COMMON T,T1,T2,E1(4),J,K,L
  19. C
  20.          T  = 0.499975    D00
  21.          T1 = 0.50025    D00
  22.          T2 = 2.0        D00
  23.          PRINT 999
  24. 999         FORMAT (// ' WHETSTONE BENCHMARK (DOUBLE PRECISION)')
  25. 1            PRINT 1000
  26. 1000         FORMAT (// ' NUMBER OF ITERATIONS? ')
  27.          READ 1001, ITER
  28. 1001         FORMAT (I8)
  29.          IPASS = 1
  30. C
  31. 5         IF (IPASS.EQ.2) ITER = ITER + 10
  32.          IF (IPASS.EQ.2) PRINT 1002, ITER
  33. 1002         FORMAT (' PASS 2:', I10, ' ITERATIONS'/)
  34.          I = ITER
  35. 10         SSEC = SECOND()
  36. C
  37.     N1  = 0
  38.     N2  = 12 * I
  39.     N3  = 14 * I
  40.     N4  = 345 * I
  41.     N5  = 0
  42.     N6  = 210 * I
  43.     N7  = 32 * I
  44.     N8  = 899 * I
  45.     N9  = 616 * I
  46.     N10 = 0
  47.     N11 = 93 * I
  48.     N12 = 0
  49. C
  50.     X1  =  1.0D0
  51.     X2  = -1.0D0
  52.     X3  = -1.0D0
  53.     X4  = -1.0D0
  54. C
  55.     IF (N1) 19, 19, 11
  56. 11    DO 18 I = 1, N1, 1
  57.         X1 = (X1 + X2 + X3 - X4) * T
  58.         X2 = (X1 + X2 - X3 + X4) * T
  59.         X4 = (-X1+ X2 + X3 + X4) * T
  60.         X3 = (X1 - X2 + X3 + X4) * T
  61. 18    CONTINUE
  62. 19    CONTINUE
  63.     CALL POUT(N1,N1,N1,X1,X2,X3,X4)
  64. C
  65.     E1(1) =  1.0 D0
  66.     E1(2) = -1.0 D0
  67.     E1(3) = -1.0 D0
  68.     E1(4) = -1.0 D0
  69.     IF (N2) 29, 29, 21
  70. 21    DO 28 I = 1, N2, 1
  71.         E1(1) = ( E1(1) + E1(2) + E1(3) - E1(4)) * T
  72.         E1(2) = ( E1(1) + E1(2) - E1(3) + E1(4)) * T
  73.         E1(3) = ( E1(1) - E1(2) + E1(3) + E1(4)) * T
  74.         E1(4) = (-E1(1) + E1(2) + E1(3) + E1(4)) * T
  75. 28    CONTINUE
  76. 29     CONTINUE
  77.     CALL POUT(N2,N3,N2,E1(1),E1(2),E1(3),E1(4))
  78. C
  79.     IF (N3) 39, 39, 31
  80. 31    DO 38 I = 1, N3, 1
  81. 38        CALL PA(E1)
  82. 39    CONTINUE
  83.     CALL POUT(N3,N2,N2,E1(1),E1(2),E1(3),E1(4))
  84. C
  85.     J = 1
  86.     IF (N4) 49, 49, 41
  87. 41    DO 48 I = 1, N4, 1
  88.         IF (J-1) 43, 42, 43
  89. 42        J = 2
  90.         GO TO 44
  91. 43        J = 3
  92. 44        IF (J-2) 46, 46, 45
  93. 45        J = 0
  94.         GO TO 47
  95. 46        J = 1
  96. 47        IF (J-1) 411, 412, 412
  97. 411        J = 1
  98.         GO TO 48
  99. 412        J = 0
  100. 48    CONTINUE
  101. 49    CONTINUE
  102.     CALL POUT(N4,J,J,X1,X2,X3,X4)
  103. C
  104.     J = 1
  105.     K = 2
  106.     L = 3
  107.     IF (N6) 69, 69, 61
  108. 61    DO 68 I = 1, N6, 1
  109.         J = J * (K-J) * (L-K)
  110.         K = L * K - (L-J) * K
  111.         L = (L-K) * (K+J)
  112.         E1(L-1) = J + K + L
  113.         E1(K-1) = J * K * L
  114. 68    CONTINUE
  115. 69    CONTINUE
  116.     CALL POUT(N6,J,K,E1(1),E1(2),E1(3),E1(4))
  117. C
  118.     X = 0.5 D0
  119.     Y = 0.5 D0
  120.     IF (N7) 79, 79, 71
  121. 71    DO 78 I = 1, N7, 1
  122.         X = T * DATAN(T2*DSIN(X)*DCOS(X)/(DCOS(X+Y)+DCOS(X-Y)-1.0D0))
  123.         Y = T * DATAN(T2*DSIN(Y)*DCOS(Y)/(DCOS(X+Y)+DCOS(X-Y)-1.0D0))
  124. 78    CONTINUE
  125. 79    CONTINUE
  126.     CALL POUT(N7,J,K,X,X,Y,Y)
  127. C
  128.     X = 1.0 D0
  129.     Y = 1.0 D0
  130.     Z = 1.0 D0
  131.     IF (N8) 89, 89, 81
  132. 81    DO 88 I = 1, N8, 1
  133. 88        CALL P3(X,Y,Z)
  134. 89    CONTINUE
  135.     CALL POUT(N8,J,K,X,Y,Z,Z)
  136. C
  137.     J = 1
  138.     K = 2
  139.     L = 3
  140.     E1(1) = 1.0 D0
  141.     E1(2) = 2.0 D0
  142.     E1(3) = 3.0 D0
  143.     IF (N9) 99, 99, 91
  144. 91    DO 98 I = 1, N9, 1
  145. 98        CALL P0
  146. 99    CONTINUE
  147.     CALL POUT(N9,J,K,E1(1),E1(2),E1(3),E1(4))
  148. C
  149.     J = 2
  150.     K = 3
  151.     IF (N10) 109, 109, 101
  152. 101    DO 108 I = 1, N10, 1
  153.         J = J + K
  154.         K = J + K
  155.         J = J - K
  156.         K = K - J - J
  157. 108    CONTINUE
  158. 109    CONTINUE
  159.     CALL POUT(N10,J,K,X1,X2,X3,X4)
  160. C
  161.     X = 0.75 D0
  162.     IF (N11) 119, 119, 111
  163. 111    DO 118 I = 1, N11, 1
  164. 118        X = DSQRT(DEXP(DLOG(X)/T1))
  165. 119    CONTINUE
  166.     CALL POUT(N11,J,K,X,X,X,X)
  167. C
  168.         FSEC = SECOND()
  169.         CPU(IPASS) = FSEC - SSEC
  170.         PRINT 2000, IPASS, CPU(IPASS)
  171. 2000        FORMAT (/ ' PASS',I2,':',F10.4,' SEC CPU TIME'//)
  172.         IPASS = IPASS + 1
  173.         IF (IPASS.LE.2) GO TO 5
  174. C
  175.         WIPS = 1000.0 / (CPU(2) - CPU(1))
  176.         PRINT 3000, WIPS
  177. 3000        FORMAT (// ' WHETSTONE INSTRUCTIONS PER SECOND:', F7.1)
  178. C
  179.     STOP 'END DOUBLE-PRECISION TEST'
  180.     END
  181. C
  182.     SUBROUTINE PA(E)
  183.     DOUBLE PRECISION T, T1, T2, E
  184.     COMMON T, T1, T2
  185.     DIMENSION E(4)
  186.     J = 0
  187. 1    E(1) = ( E(1) + E(2) + E(3) - E(4)) * T
  188.     E(2) = ( E(1) + E(2) - E(3) + E(4)) * T
  189.     E(3) = ( E(1) - E(2) + E(3) + E(4)) * T
  190.     E(4) = (-E(1) + E(2) + E(3) + E(4)) / T2
  191.     J = J + 1
  192.     IF (J-6) 1, 2, 2
  193. 2    CONTINUE
  194.     RETURN
  195.     END
  196. C
  197.     SUBROUTINE P0
  198.     DOUBLE PRECISION T, T1, T2, E1
  199.     COMMON T, T1, T2, E1(4), J, K, L
  200.     E1(J) = E1(K)
  201.     E1(K) = E1(L)
  202.     E1(L) = E1(J)
  203.     RETURN
  204.     END
  205. C
  206.     SUBROUTINE P3(X,Y,Z)
  207.     DOUBLE PRECISION T, T1, T2, X1, Y1, X, Y, Z
  208.     COMMON T, T1, T2
  209.     X1 = X
  210.     Y1 = Y
  211.     X1 = T * (X1 + Y1)
  212.     Y1 = T * (X1 + Y1)
  213.     Z  = (X1 + Y1) / T2
  214.     RETURN
  215.     END
  216. C
  217.     SUBROUTINE POUT(N,J,K,X1,X2,X3,X4)
  218.     DOUBLE PRECISION X1, X2, X3, X4
  219.     PRINT 3000, N, J, K, X1, X2, X3, X4
  220. 3000    FORMAT(1H , 3I7, 4E12.4)
  221.     RETURN
  222.     END
  223.