PROGRAM TIME REAL*8 Z(5),X(5),Y(5),C(4,5),A(4,5),B(5,5),P,Q DATA P,Q /5.,2./ DATA X/5*2./, Y/5*1./ DATA A/20*1./,B/25*1./ DATA ZERO/0.0/ TYPE 900 900 FORMAT(' TYPE',7X,' FORTRAN FORT (IN) MATLIB') T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME C FORTRAN DOT LOOP DO 10 I=1,1000 10 CALL TDOT(Z,X,Y,3) T2 = SECNDS(T1) !TIME FOR 1000 DOT C TYPE *,' Z ',Z(1) T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME C MATLIB DOT LOOP DO 20 I=1,1000 20 CALL DOTD(Z,X,Y,3) T3 = SECNDS(T1) TYPE 901,T2,ZERO,T3 901 FORMAT(' 1000 DOT ',3F10.3) C FORTRAN VECTOR ADD LOOP T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME DO 30 I=1,1000 DO 35 J=1,3 35 Z(J) = X(J) + Y(J) 30 CONTINUE T2 = SECNDS(T1) C TYPE *,' VADD ',Z T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME C MATLIB VECTOR ADD LOOP DO 40 I=1,1000 40 CALL VADD(Z,X,Y,3) T3 = SECNDS(T1) TYPE 902,ZERO,T2,T3 902 FORMAT(' 1000 VADD ',3F10.3) C FORTRAN LOOP FOR 1000 MATRIX ADDS T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME DO 50 I=1,1000 50 CALL TMATAD(C,A,B,3,4,4,5,4) T2 = SECNDS(T1) C TYPE *,' MATADD ',C C MATLIB LOOP FOR 1000 MATRIX ADDS T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME DO 60 I=1,1000 60 CALL MPADDD(C,A,B,3,4,4,5,4) T3 = SECNDS(T1) 903 FORMAT(' 1000 MADD ',3F10.3) T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME C FORTRAN MATRIX ADD IN LINE DO 90 K=1,1000 DO 70 J=1,4 DO 80 I=1,3 80 C(I,J) = A(I,J)+B(I,J) 70 CONTINUE 90 CONTINUE T4 = SECNDS(T1) TYPE 903, T2,T4,T3 T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME C FORTRAN MATRIX MULTIPLY DO 100 I=1,1000 100 CALL TMATMP(C,A,B,3,5,4,4,5,5) T2 = SECNDS(T1) C MATLIB MATRIX MULTIPLY T1 = SECNDS(0.0) !INITIALIZE ELAPSED TIME DO 110 I=1,1000 110 CALL MPMULD(C,A,B,3,5,4,4,5,5) T3 = SECNDS(T1) TYPE 904,T2,ZERO,T3 904 FORMAT(' 1000 MMUL ',3F10.3) C IN LINE MOVE T1 = SECNDS(0.0) DO 120 I=1,1000 DO 115 J=1,5 115 Z(J) = X(J) 120 CONTINUE T2 = SECNDS(T1) C MATLIB MOVE T1 = SECNDS(0.0) DO 130 I=1,1000 130 CALL VMOVD(Z,X,5) T3 = SECNDS(T1) TYPE 905,ZERO,T2,T3 905 FORMAT(' 1000 VMOV ',3F10.3) STOP END SUBROUTINE TDOT(Z,X,Y,N) REAL*8 Z,X(N),Y(N) Z=0. DO 10 I=1,N 10 Z = Z + X(I)*Y(I) RETURN END SUBROUTINE TMATAD(C,A,B,M,N,RA,RB,RC) C MATRIX ADDITION INTEGER RA,RB,RC REAL*8 C(RC,1),A(RA,1),B(RB,1) DO 20 J=1,N DO 10 I=1,M 10 C(I,J) = A(I,J)+B(I,J) 20 CONTINUE RETURN END SUBROUTINE TMATMP(C,A,B,L,M,N,RA,RB,RC) C MATRIX MULTIPLY INTEGER RA,RB,RC REAL*8 C(RC,1),A(RA,1),B(RB,1) REAL*8 Z DO 100 J=1,N DO 50 I=1,L Z=0. DO 10 K=1,M 10 Z = Z + A(I,K)*B(K,J) 50 C(I,J) = Z 100 CONTINUE RETURN END