ПРОГРАММА ВЕТСТОУН
Аннотация
Программу Ветстоун применяют для определения производительности комплексов при решении научно-технических задач.
Программа является синтетической, она состоит из 11 модулей, осуществляющих:
работу с простыми переменными и массивами;
арифметические преобразования с фиксированной и плавающей запятой;
вызовы подпрограмм с передачей параметров;
вычисление стандартных функций.
Долевое участие каждого модуля в общем времени работы программы определяют с помощью весовых коэффициентов.
Время работы программы регулируется параметром внешнего цикла . Для программа содержит 100000 операций Ветстоун.
Программа построена настолько тщательно, что на времени ее выполнения практически не отражается оптимизирующая работа трансляторов.
С целью учета накладных расходов осуществляют два прогона программы, например, для и . В качестве расчетного показателя принимают время , где , - время работы и программы для и .
В тексте приводятся две версии программы:
типовая программа 1 - программа Ветстоун для операндов с одинарной точностью;
типовая программа 2 - программа Ветстоун для операндов с двойной точностью.
При расчете производительности на программе Ветстоун используется единица измерения "операций Ветстоун в секунду".
С | PROGRAM WHETSTONE 1 | |||
С | ОДИНАРНАЯ ТОЧНОСТЬ | |||
С | COMMON Т, Т1, Т2, Е1 (4), J, К, L | |||
Т =0.499975 | ||||
Т1=0.5002 | ||||
Т2=2.0 | ||||
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 | ||||
С************* | MODULE 1: SIMPLE IDENTIFIERS ******** ********** | |||
X1=1.0 | ||||
X2=1.0 | ||||
X3=-1.0 | ||||
X4=-1.0 | ||||
IF (N1) 19, 19, 11 | ||||
11 | DO 18 I=1, N1, 1 | |||
X1=(X1+X2+X3-X4)*T | ||||
Х2=(Х1+Х2-Х3+Х4)*Т | ||||
Х3= (Х1-Х2+Х3+Х4)*Т | ||||
Х4=(-Х1+Х2+Х3+Х4)*Т | ||||
18 | CONTINUE | |||
19 | CONTINUE | |||
С | CALL POUT (N1, N1, N, X1, X2, Х3, Х4) | |||
С************ | MODULE : 2 ARRAY ELEMENTS ********** ******** | |||
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)) | |||
С************ | MODULE 3: ARRAY AS PARAMETER **************** | |||
E1 (1)=1.0 | ||||
E1 (2)=-1.0 | ||||
E1 (3)=-1.0 | ||||
E1 (4)=-1.0 | ||||
IF (N3) 39, 39, 31 | ||||
31 | DO 38 I=1, N3, 1 | |||
38 | CALL PA (E1) | |||
39 | CONTINUE | |||
С4 | CALL POUT (N3, N2, N2, E1 (1), N1 (2) N1 (3), N1 (4)) | |||
С************ | MODULE 4: CONDITIONAL JUMPS ************** | |||
J=1 | ||||
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 | |||
С4 | CALL POUT (N, J, J, X1, X2, Х3, Х4) | |||
С************ | MODULE 5: OMITTED *********************** | |||
С************ | MODULE 6: INTEGER ARITHMETIC ********************** | |||
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) | |||
С************ | MODULE 7: TRIGONOMETRIC FUNCTION ********** | |||
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 (Х-Y)-1.0)) | ||||
Y=T*ATAN(T2*SIN(Y)*COS((Y)/COS(X+Y)+CОS(X-Y)-1.0)) | ||||
78 | CONTINUE | |||
79 | CONTINUE | |||
С | ||||
С | CALL POUT (N7, J, K, X, X, Y, Y) | |||
С************ | MODULE 8: SUBROUTINE CALLS************** | |||
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, К, X, Y, Z, Z) | |||
С************ | MODULE 9: ARRAY REFERENCES ******* | |||
J=1 | ||||
K=2 | ||||
L=3 | ||||
E1 (1)=1.0 | ||||
E1 (2) =2.0 | ||||
E1 (3)=3.0 | ||||
IF (N9) 99, 99, 91 | ||||
91 | DO 98 I=1, N9, 1 | |||
98 | CALL PO | |||
99 | CONTINUE | |||
С | CALL POUT (N9, J, K, E1 (1), E1 (2), E1 (3), E1 (4) | |||
С************ | MODULE 10: INTEGER ARITHMETICS ******** | |||
J=2 | ||||
K=3 | ||||
IF (N10) 109, 109, 101 | ||||
101 | DO 108 I=1, N10, 1 | |||
J=J+K | ||||
K=J+K | ||||
J=K-J | ||||
K=K-J-J | ||||
108 | CONTINUE | |||
109 | CONTINUE | |||
С | CALL POUT (N10, J, K, X1, X2, Х3, Х2) | |||
С************ | MODULE 11: STANDARD FUNCTION ******** | |||
X=0.75 | ||||
IF (N11) 119, 119, 111 | ||||
111 | DO 118 I=1, N11, 1 | |||
118 | X=SQRT (EXP (ALOG (H)/T1)) | |||
119 | CONTINUE | |||
С | CALL POUT (N11, J, К, X, X, X, X) | |||
С | STOP | |||
END | ||||
SUBROUTINE PA (E) | ||||
COMMON T, T1, T2 | ||||
DIMENSION E (4) | ||||
J=0 | ||||
1 | E (1)=(Е (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 | ||||
SUBROUTINE PO | ||||
COMMON T, T1, T2, E1 (4), J, К, L | ||||
E1 (J)=E1 (K) | ||||
E1 (K)=E1 (L) | ||||
E1 (L)=E1 (J) | ||||
RETURN | ||||
END | ||||
SUBROUTINE P3 (X, Y, Z) | ||||
COMMON T, T1, T2 | ||||
X1=X | ||||
Y1=Y | ||||
X1=T*(X1+Y1) | ||||
Y1=T*(X1+Y1) | ||||
Z=(Х1+Y1)/T2 | ||||
RETURN | ||||
END | ||||
SUBROUTINE POUT (N, J, K, X1, X2, Х3, Х4) | ||||
C | WRITE (1, 1) N, J, K, X1, X2, X2, Х4 | |||
1 | FORMAT (' ', 317, 4E12, 4) | |||
RETURN | ||||
END | ||||
С | PROGRAM WHETSTONE 2 | |||
C | ДВОЙНАЯ ТОЧНОСТЬ | |||
C | COMMON T, T1, T2, E1 (4), J, K, L | |||
IMPLICIT DOUBLE PRECISION (A-H, O-Z) | ||||
T =0.499975 | ||||
T 1=0.5002 | ||||
T2=2.0 | ||||
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 | ||||
C************* | MODULE 1: SIMPLE IDENTIFIERS******************* | |||
X1 =1.0 | ||||
Х2=-1.0 | ||||
Х3=-1.0 | ||||
X4=-1.0 | ||||
IF (N1) 19, 19, 11 | ||||
11 | DO 18 I=1, N1, 1 | |||
X1=(X1+X2+X3-X4) *T | ||||
Х2=(Х1+Х2-Х3+Х4)*Т | ||||
Х3=(X1-Х2+Х3+Х4) *Т | ||||
Х4=(-Х1+Х2+Х3+Х4)*Т | ||||
18 | CONTINUE | |||
19 | CONTINUE | |||
С | CALL POUT (N1, N1, N, XI, X2, ХЗ, Х4) | |||
С*********** | MODULE : 2 ARRAY ELEMENTS ************ ****** | |||
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)+Е1 (4))*Т | ||||
28 | CONTINUE | |||
29 | CONTINUE | |||
С | CALL POUT (N2, N3, N2, E1 (1), E1 (2), E1 (3), E1 (4)) | |||
С*********** | MODULE 3: ARRAY AS PARAMETER ******************* | |||
E1 (1)=1.0 | ||||
E1 (2)=-1.0 | ||||
E1 (3)=-1.0 | ||||
E1 (4)=-1.0 | ||||
IF (N3) 39, 39, 31 | ||||
31 | DC 38 I=1, N3, 1 | |||
38 | CALL PA (E1) | |||
39 | CONTINUE | |||
С4 | CALL POUT (N3, N2, N2, E1 (1), N1 (2), N1 (3), N1 (4)) | |||
С********** | MODULL 4: CONDITIONAL JUMPS ********** **** | |||
J=1 | ||||
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 | |||
С4 | CALL POUT (N4, J, J, X1, X2, Х3, Х4) | |||
C************ | MODULE 5: OMITTED*********************** | |||
C************ | MODULE 6: INTEGER ARITHMETIC ************ | |||
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 | |||
C | CALL POUT (N6, J, К, E1 (1), E1 (2), E1 (3), E1 (4)) | |||
C********** | MODULE 7: TRIGONOMETRIC FUNCTION********** | |||
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 | |||
C | ||||
С | POUT (N7, J, K, X, X, Y, Y) | |||
С************ | MODULE 8: SUBROUTINE CALLS *************** | |||
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 | |||
C | CALL POUT (N8, J, K, X, Y, Z, Z) | |||
С************ | MODULE 9: ARRAY REFERENCES ******* | |||
J=1 | ||||
K=2 | ||||
L=3 | ||||
E1 (1)=1.0 | ||||
E1 (2)=2.0 | ||||
E1 (3)=3.0 | ||||
IF (N9) 99, 99, 91 | ||||
91 | DO 98 I=1, N9, 1 | |||
98 | CALL PO | |||
99 | CONTINUE | |||
C | CALL POUT (N9, J, K, E1 (1), E1 (2), E1 (3), E1 (4)) | |||
C********** | MODULE 10: INTEGER ARITHMETICS ******** | |||
J=2 | ||||
K=3 | ||||
IF (N10) 109, 109, 101 | ||||
101 | DO 108 I=1, N10, 1 | |||
J =J+K | ||||
K=J+K | ||||
J =K-J | ||||
K=K-J-J | ||||
108 | CONTINUE | |||
109 | CONTINUE | |||
С | CALL POUT (N10, J, K, X1, X2, Х3, Х4) | |||
C************ | MODULE 11: STANDARD FUNCTION ******** | |||
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) | |||
С | END OF TIME INTERVAL | |||
END | ||||
SUBROUTINE PA (E) | ||||
IMPLICIT DOUBLE PRECISION (A-H, O-Z) | ||||
DIMENSION E (4) | ||||
COMMON T, T1, T2 | ||||
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 | ||||
SUBROUTINE PO | ||||
IMPLICIT DOUBLE PRECISION (A-H, O-Z) | ||||
COMMON T, T1, T2, E1 (4), J, K, L | ||||
E1 (J)=E1 (K) | ||||
E1 (K)=E1 (L) | ||||
E1 (L)=E1 (J) | ||||
RETURN | ||||
END | ||||
SUBROUTINE P3 (X, Y, Z) | ||||
IMPLICIT DOUBLE PRECISION (A-H, O-Z) | ||||
COMMON T, T1, T2 | ||||
X1=X | ||||
Y1=Y | ||||
X1=T*(X1+Y1) | ||||
Y1=T*(X1+Y1) | ||||
Z=(X1+Y1)/T2 | ||||
RETURN | ||||
END | ||||
SUBROUTINE POUT (N, J, K, X1, X2, Х3, Х4) | ||||
IMPLICIT DOUBLE PRECISION (A-H, O-Z) | ||||
С | WRITE (1, 1) N, J, K, X1, X2, X2, Х4 | |||
1 | FORMAT (' ', 317, 4E12, 4) | |||
RETURN | ||||
END |