C C WHET.FOR - WHETSTONE BENCHMARK (FORTRAN) - SINGLE PRECISION C C C THE WHETSTONE BENCHMARK IS ONE MEASURE OF THE EXPECTED C PERFORMANCE OF COMPUTATIONALLY BOUND PROGRAMS. THIS TEST C MEASURES THE EXECUTION RATE FOR A MIX OF THE C MOST COMMON TYPES OF CODE SEQUENCES. THE EFFICIENCY OF C THE COMPILER IN GENERATING GOOD CODE HAS TO BE CONSIDERED C PART OF THE FINAL RATE AS WELL AS THE RAW NUMBER CRUNCHING C SPEED OF THE CPU. C C HERE ARE SOME PREVIOUSLY MEASURED WHETSTONE RATINGS. C A NUMBER OF THESE ENTRIES WERE EXTRACTED FROM THE OCTOBER C 1975 ISSUE OF THE DECUS 12-BIT SIG NEWSLETTER. C C MACHINE OP SYS / COMPILER PREC SPEED C PDP-8I OS/8 FORTRAN IV 2^23 2.6 C PDP-8E OS/8 FORTRAN IV 2^23 3.15 C PDP-12/FPP-12 ? 2^23 34.5 C C PDP-11/45,FPP RT11 FORTRAN IV 2^55 65.96 C PDP-11/45,FPP FORTRAN IV PLUS 2^55 168.86 C C PDP-11/70,FPP RSTS/E BASIC-PLUS 2^23 35.52 C PDP-11/70,FPP RSTS/E BASIC-PLUS (%) 2^23 44.99 C PDP-11/70,FPP RSTS/E BASIC-PLUS-2 2^23 171.21 C PDP-11/70,FPP RSTS/E FORTRAN-IV V1 2^23 216.76 C PDP-11/70,FPP RSTS/E FORTRAN-IV V2 2^23 285.63 C PDP-11/70,FPP RSTS/E FORTRAN-IV-PLUS 2^23 631.96 C PDP-11/70,FPP RSTS/E FORTRAN-IV-PLUS 2^55 479.04 C C VAX 11/780 VMS FORTRAN-IV-PLUS 2^23 711 C VAX 11/780, FP ACCELERATOR VMS F4+ 2^23 1200 C C IBM 360/65 FORTRAN G 16^6 430 C IBM 360/65 FORTRAN G 16^14 321 C IBM 360/65 FORTRAN H OPT 2 16^6 521 C IBM 360/65 FORTRAN H OPT 2 16^14 421 C IBM 360/75 FORTRAN G ? 518.6 C IBM 370/158 VSII V1.7 HASP 16^6 650 C FORTRAN H EXT LEV 2.1 C NO OPTIMIZE C C DECSYSTEM 10 KA FORTRAN 2^27 194 C DECSYSTEM 10 KA FORTRAN 2^54 56 C DECSYSTEM 10 KI FORTRAN 2^27 500 C DECSYSTEM 10 KI FORTRAN 2^54 250 C C NOVA 840,MMPU,FFPU,MID FORTRAN 5 (3.01) 16^6 71 C NOVA 840,MMPU,FPPU,MID FORTRAN 5 (3.01) 16^14 56 C C CDC 6500 MACE FTN (OPT=2) 2^48 610.17 C CDC 6500 MACE ZURICH PASCAL 2^48 473.38 C C CDC 7600 FTN (OPT=2) 2^48 8333.0 C COMMON T,T1,T2,E1(4),J,K,L DIMENSION I9(2), T9(2) C T=0.499975 T1=0.50025 T2=2.0 C I9(1) = 25 I9(2) = 35 TYPE 400 400 FORMAT ( / ' Enter two 2-digit I values separated by a comma' ) ACCEPT 410, I9(1), I9(2) 410 FORMAT ( I2, 1X, I2 ) DO 200 I8 = 1, 2, 1 TYPE 430, I8 430 FORMAT ( 5H Pass, I2 ) I = I9(I8) T9(I8) = CPUTIM ( X ) C ISAVE=I 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 C E1(1)=1.0 E1(2)=-1.0 E1(3)=-1.0 E1(4)=-1.0 C 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 C IF (N3) 39,39,31 31 DO 38 I=1,N3,1 38 CALL PA(E1) 39 CONTINUE C J=1 C IF (N4) 49,49,41 41 DO 48 I=1,N4,1 IF (J-1) 43,42,43 42 J=2 GOTO 44 43 J=3 44 IF (J-2) 46,46,45 45 J=0 GOTO 47 46 J=1 47 IF (J-1) 411,412,412 411 J=1 GOTO 48 412 J=0 48 CONTINUE 49 CONTINUE C J=1 K=2 L=3 C 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 C X=0.5 Y=0.5 C 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 C X=1.0 Y=1.0 Z=1.0 C IF (N8) 89,89,81 81 DO 88 I=1,N8,1 88 CALL P3(X,Y,Z) 89 CONTINUE C J=1 K=2 L=3 E1(1)=1.0 E1(2)=2.0 E1(3)=3.0 C IF (N9) 99,99,91 91 DO 98 I=1,N9,1 98 CALL P0 99 CONTINUE C J=2 K=3 C 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 C X=0.75 C IF (N11) 119,119,111 111 DO 118 I=1,N11,1 118 X=SQRT(EXP(ALOG(X)/T1)) 119 CONTINUE T9(I8) = CPUTIM ( X ) - T9(I8) 200 CONTINUE W = FLOAT ( I9(2)-I9(1) ) * 100.0 / (T9(2)-T9(1)) TYPE 920, I9(1), T9(1), I9(2), T9(2), W 920 FORMAT ( // 4H I1=, I3, 6H T1=, F7.2, 9H CPU Sec. / * 4H I2=, I3, 6H T2=, F7.2, 9H CPU Sec. // * 8H Speed =, F8.2, 12H Whetstones. / ) C STOP END C SUBROUTINE PA 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 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 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