home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / fortran / library / whets / whets.for / Fwhets.f < prev    next >
Text File  |  1990-02-21  |  4KB  |  218 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    SINGLE-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.     DIMENSION CPU(2)
  17.     COMMON T,T1,T2,E1(4),J,K,L
  18. C
  19.          T  = 0.499975    
  20.          T1 = 0.50025    
  21.          T2 = 2.0    
  22.          PRINT 999
  23. 999         FORMAT (// ' WHETSTONE BENCHMARK (SINGLE PRECISION)')
  24. 1            PRINT 1000
  25. 1000         FORMAT (// ' NUMBER OF ITERATIONS? ')
  26.          READ 1001, ITER
  27. 1001         FORMAT (I8)
  28.          IPASS = 1
  29. C
  30. 5         IF (IPASS.EQ.2) ITER = ITER + 10
  31.          IF (IPASS.EQ.2) PRINT 1002, ITER
  32. 1002         FORMAT (' PASS 2:', I10, ' ITERATIONS'/)
  33.          I = ITER
  34. 10         SSEC = SECOND()
  35. C
  36.     N1  = 0
  37.     N2  = 12 * I
  38.     N3  = 14 * I
  39.     N4  = 345 * I
  40.     N5  = 0
  41.     N6  = 210 * I
  42.     N7  = 32 * I
  43.     N8  = 899 * I
  44.     N9  = 616 * I
  45.     N10 = 0
  46.     N11 = 93 * I
  47.     N12 = 0
  48. C
  49.     X1  =  1.0
  50.     X2  = -1.0
  51.     X3  = -1.0
  52.     X4  = -1.0
  53. C
  54.     IF (N1) 19, 19, 11
  55. 11    DO 18 I = 1, N1, 1
  56.         X1 = (X1 + X2 + X3 - X4) * T
  57.         X2 = (X1 + X2 - X3 + X4) * T
  58.         X4 = (-X1+ X2 + X3 + X4) * T
  59.         X3 = (X1 - X2 + X3 + X4) * T
  60. 18    CONTINUE
  61. 19    CONTINUE
  62.     CALL POUT(N1,N1,N1,X1,X2,X3,X4)
  63. C
  64.     E1(1) =  1.0 
  65.     E1(2) = -1.0 
  66.     E1(3) = -1.0 
  67.     E1(4) = -1.0 
  68.     IF (N2) 29, 29, 21
  69. 21    DO 28 I = 1, N2, 1
  70.         E1(1) = ( E1(1) + E1(2) + E1(3) - E1(4)) * T
  71.         E1(2) = ( E1(1) + E1(2) - E1(3) + E1(4)) * T
  72.         E1(3) = ( E1(1) - E1(2) + E1(3) + E1(4)) * T
  73.         E1(4) = (-E1(1) + E1(2) + E1(3) + E1(4)) * T
  74. 28    CONTINUE
  75. 29     CONTINUE
  76.     CALL POUT(N2,N3,N2,E1(1),E1(2),E1(3),E1(4))
  77. C
  78.     IF (N3) 39, 39, 31
  79. 31    DO 38 I = 1, N3, 1
  80. 38        CALL PA(E1)
  81. 39    CONTINUE
  82.     CALL POUT(N3,N2,N2,E1(1),E1(2),E1(3),E1(4))
  83. C
  84.     J = 1
  85.     IF (N4) 49, 49, 41
  86. 41    DO 48 I = 1, N4, 1
  87.         IF (J-1) 43, 42, 43
  88. 42        J = 2
  89.         GO TO 44
  90. 43        J = 3
  91. 44        IF (J-2) 46, 46, 45
  92. 45        J = 0
  93.         GO TO 47
  94. 46        J = 1
  95. 47        IF (J-1) 411, 412, 412
  96. 411        J = 1
  97.         GO TO 48
  98. 412        J = 0
  99. 48    CONTINUE
  100. 49    CONTINUE
  101.     CALL POUT(N4,J,J,X1,X2,X3,X4)
  102. C
  103.     J = 1
  104.     K = 2
  105.     L = 3
  106.     IF (N6) 69, 69, 61
  107. 61    DO 68 I = 1, N6, 1
  108.         J = J * (K-J) * (L-K)
  109.         K = L * K - (L-J) * K
  110.         L = (L-K) * (K+J)
  111.         E1(L-1) = J + K + L
  112.         E1(K-1) = J * K * L
  113. 68    CONTINUE
  114. 69    CONTINUE
  115.     CALL POUT(N6,J,K,E1(1),E1(2),E1(3),E1(4))
  116. C
  117.     X = 0.5 
  118.     Y = 0.5 
  119.     IF (N7) 79, 79, 71
  120. 71    DO 78 I = 1, N7, 1
  121.         X = T * ATAN(T2*SIN(X)*COS(X)/(COS(X+Y)+COS(X-Y)-1.0))
  122.         Y = T * ATAN(T2*SIN(Y)*COS(Y)/(COS(X+Y)+COS(X-Y)-1.0))
  123. 78    CONTINUE
  124. 79    CONTINUE
  125.     CALL POUT(N7,J,K,X,X,Y,Y)
  126. C
  127.     X = 1.0 
  128.     Y = 1.0 
  129.     Z = 1.0 
  130.     IF (N8) 89, 89, 81
  131. 81    DO 88 I = 1, N8, 1
  132. 88        CALL P3(X,Y,Z)
  133. 89    CONTINUE
  134.     CALL POUT(N8,J,K,X,Y,Z,Z)
  135. C
  136.     J = 1
  137.     K = 2
  138.     L = 3
  139.     E1(1) = 1.0 
  140.     E1(2) = 2.00 
  141.     E1(3) = 3.0 
  142.     IF (N9) 99, 99, 91
  143. 91    DO 98 I = 1, N9, 1
  144. 98        CALL P0
  145. 99    CONTINUE
  146.     CALL POUT(N9,J,K,E1(1),E1(2),E1(3),E1(4))
  147. C
  148.     J = 2
  149.     K = 3
  150.     IF (N10) 109, 109, 101
  151. 101    DO 108 I = 1, N10, 1
  152.         J = J + K
  153.         K = J + K
  154.         J = J - K
  155.         K = K - J - J
  156. 108    CONTINUE
  157. 109    CONTINUE
  158.     CALL POUT(N10,J,K,X1,X2,X3,X4)
  159. C
  160.     X = 0.75 
  161.     IF (N11) 119, 119, 111
  162. 111    DO 118 I = 1, N11, 1
  163. 118        X = SQRT(EXP(ALOG(X)/T1))
  164. 119    CONTINUE
  165.     CALL POUT(N11,J,K,X,X,X,X)
  166. C
  167.         FSEC = SECOND()
  168.         CPU(IPASS) = FSEC - SSEC
  169.         PRINT 2000, IPASS, CPU(IPASS)
  170. 2000        FORMAT (/ ' PASS',I2,':',F10.4,' SEC CPU TIME'//)
  171.         IPASS = IPASS + 1
  172.         IF (IPASS.LE.2) GO TO 5
  173. C
  174.         WIPS = 1000.0 / (CPU(2) - CPU(1))
  175.         PRINT 3000, WIPS
  176. 3000        FORMAT (// ' WHETSTONE INSTRUCTIONS PER SECOND:', F7.1)
  177. C
  178.     STOP 'END SINGLE-PRECISION TEST'
  179.     END
  180. C
  181.     SUBROUTINE PA(E)
  182.     COMMON T, T1, T2
  183.     DIMENSION E(4)
  184.     J = 0
  185. 1    E(1) = ( E(1) + E(2) + E(3) - E(4)) * T
  186.     E(2) = ( E(1) + E(2) - E(3) + E(4)) * T
  187.     E(3) = ( E(1) - E(2) + E(3) + E(4)) * T
  188.     E(4) = (-E(1) + E(2) + E(3) + E(4)) / T2
  189.     J = J + 1
  190.     IF (J-6) 1, 2, 2
  191. 2    CONTINUE
  192.     RETURN
  193.     END
  194. C
  195.     SUBROUTINE P0
  196.     COMMON T, T1, T2, E1(4), J, K, L
  197.     E1(J) = E1(K)
  198.     E1(K) = E1(L)
  199.     E1(L) = E1(J)
  200.     RETURN
  201.     END
  202. C
  203.     SUBROUTINE P3(X,Y,Z)
  204.     COMMON T, T1, T2
  205.     X1 = X
  206.     Y1 = Y
  207.     X1 = T * (X1 + Y1)
  208.     Y1 = T * (X1 + Y1)
  209.     Z  = (X1 + Y1) / T2
  210.     RETURN
  211.     END
  212. C
  213.     SUBROUTINE POUT(N,J,K,X1,X2,X3,X4)
  214.     PRINT 3000, N, J, K, X1, X2, X3, X4
  215. 3000    FORMAT(1H , 3I7, 4E12.4)
  216.     RETURN
  217.     END
  218.