begin;
comment
THE WHETSTONE BENCHMARK.
SEE:
A SYNTHETIC BENCHMARK,
H.J. CURNOW AND B.A. WHICHMANN,
THE COMPUTING JOURNAL, VOLUME 19 NUMBER 1
FEB 1976, P. 43-49
SOME RESULTS
(IN THOUSANDS OF WHETSTONE INSTRUCTIONS PER SECOND):
IBM 3090: (DELFT ?) ALGOL COMPILER 5000
SUN 3/60: NASE ALGOL INTERPRETER 10
NASE ALGOL2C 400
SPARC 2: NASE ALGOL INTERPRETER 63
NASE ALGOL2C 4200
PYRAMID ??: NASE ALGOL INTERPRETER 20
``NASE'' INDICATES NASE A60.
;
real X1, X2, X3, X4, X, Y, Z, T, T1, T2;
array E1[1 : 4];
integer I, J, K, L, N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11;
procedure PA(E);
array E;
begin;
integer J;
J := 0;
LAB: 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 then goto LAB;
end ;
procedure P0;
begin;
E1[J] := E1[K];
E1[K] := E1[L];
E1[L] := E1[J];
end ;
procedure P3(X, Y, Z);
value X, Y;
real X, Y, Z;
begin;
X := T
(X + Y);
Y := T
(X + Y);
Z := (X + Y) ÷ T2;
end ;
procedure POUT(N, J, K, X1, X2, X3, X4);
value N, J, K, X1, X2, X3, X4;
integer N, J, K;
real X1, X2, X3, X4;
begin;
OUTREAL(1, N);
OUTREAL(1, J);
OUTREAL(1, K);
OUTREAL(1, X1);
OUTREAL(1, X2);
OUTREAL(1, X3);
OUTREAL(1, X4);
OUTSTRING(1, "\N");
end ;
comment INITIALIZE CONSTANTS
;
T := 0.499975;
T1 := 0.50025;
T2 := 2.0;
comment READ THE VALUE OF I, CONTROLLING TOTAL WIGHT: IF I = 10 THE
TOTAL WHIGHT IS ONE MILLION WHETSTONE INSTRUCTIONS
;
comment INREAL (2, I)
;
I := 10;
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;
comment MODULE 1: SIMPLE IDENTIFIERS
;
X1 := 1.0;
X2 := X3 := X4 := -1.0;
for I := 1 step 1 until N1 do
begin;
X1 := (X1 + X2 + X3 - X4)
T;
X2 := (X1 + X2 - X3 + X4)
T;
X3 := (X1 - X2 + X3 + X4)
T;
X4 := (-X1 + X2 + X3 + X4)
T;
end ;
POUT(N1, N1, N1, X1, X2, X3, X4);
comment MODULE 2: ARRAY ELEMENTS
;
E1[1] := 1.0;
E1[2] := E1[3] := E1[4] := -1.0;
for I := 1 step 1 until N2 do
begin;
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;
end ;
POUT(N2, N3, N2, E1[1], E1[2], E1[3], E1[4]);
comment MODULE 3: AS ARRAY PARAMETER
;
for I := 1 step 1 until N3 do PA(E1);
POUT(N3, N2, N2, E1[1], E1[2], E1[3], E1[4]);
comment MODULE 4: CONDITIONAL JUMPS
;
J := 1;
for I := 1 step 1 until N4 do
begin;
if J = 1 then J := 2 else J := 3;
if J > 2 then J := 0 else J := 1;
if J < 1 then J := 1 else J := 0;
end ;
POUT(N4, J, J, X1, X2, X3, X4);
comment MODULE 5: OMITTED
;
comment MODULE 6: INTEGER ARITHMETIK
;
J := 1;
K := 2;
L := 3;
for I := 1 step 1 until N6 do
begin;
J := J
(K - J)
(L - K);
K := L
K - (L - J)
K;
L := (L - K)
(K + J);
comment TYPO IN TCJ
;
E1[L - 1] := J + K + L;
E1[K - 1] := J
K
L;
end ;
POUT(N6, J, K, E1[1], E1[2], E1[3], E1[4]);
comment MODULE 7: TRIG FUNCTIONS
;
X := Y := 0.5;
for I := 1 step 1 until N7 do
begin;
X := T
ARCTAN(T2
SIN(X)
COS(X) ÷ (COS(X + Y) + COS(X - Y) - 1.0));
Y := T
ARCTAN(T2
SIN(Y)
COS(Y) ÷ (COS(X + Y) + COS(X - Y) - 1.0));
end ;
POUT(N7, J, K, X, X, Y, Y);
comment MODULE 8: PROCEDURE CALLS
;
X := Y := Z := 1.0;
for I := 1 step 1 until N8 do
P3(X, Y, Z);
POUT(N8, J, K, X, Y, Z, Z);
comment MODULE 9: ARRAY REFERENCES
;
J := 1;
K := 2;
L := 3;
E1[1] := 1.0;
E1[2] := 2.0;
E1[3] := 3.0;
for I := 1 step 1 until N9 do P0;
POUT(N9, J, K, E1[1], E1[2], E1[3], E1[4]);
comment MODULE 10: INTEGER ARITHMETIK
;
J := 2;
K := 3;
for I := 1 step 1 until N10 do
begin;
J := J + K;
K := J + K;
J := K - J;
K := K - J - J;
end ;
POUT(N10, J, K, X1, X2, X3, X4);
comment MODULE 11: STANDARD FUNCTIONS
;
X := 0.75;
for I := 1 step 1 until N11 do
X := SQRT(EXP(LN(X) ÷ T1));
POUT(N11, J, K, X, X, X, X);
end ;