PROGRAM HW1 ! ! Program for performing code and compiler optimization experiments. ! Author: Ming Xue, 2003. Modified 2005. ! IMPLICIT NONE INTEGER :: n PARAMETER(n=5000) REAL :: a(n,n),b(n,n),c(n,n),d(n,n),e(n,n),f(n,n) REAL :: t1,t2,cputime REAL :: tmp(2) REAL :: etime INTEGER :: i,j a = 1.0 b = 2.0 c = 2.0 d = 4.0 e = 5.0 f = 6.0 !------------------------------------------------------------------------------ ! Section 1a !------------------------------------------------------------------------------ t1 = etime(tmp) DO i = 1,n DO j = 1,n a(i,j) = (a(i,j)*b(i,j) + c(i,j)*d(i,j))**0.315 ENDDO ENDDO t2 = etime(tmp) PRINT *, 'CPU time used by section 1a was ', t2 - t1,'(s)' !------------------------------------------------------------------------------ ! Section 1b !------------------------------------------------------------------------------ t1 = etime(tmp) DO j = 1,n DO i = 1,n a(i,j) = (a(i,j)*b(i,j) + c(i,j)*d(i,j))**0.315 ENDDO ENDDO t2 = etime(tmp) PRINT *, 'CPU time used by section 1b was ', t2 - t1,'(s)' !------------------------------------------------------------------------------ ! Section 1c !------------------------------------------------------------------------------ t1 = etime(tmp) DO j = 1,n DO i = 1,n e(i,j) = a(i,j)*b(i,j) ENDDO ENDDO DO j = 1,n DO i = 1,n f(i,j) = c(i,j)*d(i,j) ENDDO ENDDO DO j = 1,n DO i = 1,n a(i,j) = (e(i,j) + f(i,j))**0.315 ENDDO ENDDO t2 = etime(tmp) PRINT *, 'CPU time used by section 1c was ', t2 - t1,'(s)' !------------------------------------------------------------------------------ ! Section 1d - array syntax array operations !------------------------------------------------------------------------------ t1 = etime(tmp) a = (a * b + c * d )**0.315 t2 = etime(tmp) PRINT *, 'CPU time used by section 1d was ', t2 - t1,'(s)' !------------------------------------------------------------------------------ ! Section 1e !------------------------------------------------------------------------------ t1 = etime(tmp) DO j = 1,n DO i = 2,n a(i,j) = (a(i-1,j)*b(i,j) + c(i,j)*d(i,j))**0.315 ENDDO ENDDO t2 = etime(tmp) PRINT *, 'CPU time used by section 1e was ', t2 - t1,'(s)' !------------------------------------------------------------------------------ ! Section 2a !------------------------------------------------------------------------------ t1 = etime(tmp) DO j =1,n DO i= 1,n CALL SUB1(a(i,j), b(i,j), c(i,j), d(i,j),i,j) END DO END DO t2 = etime(tmp) PRINT *, 'CPU time used by section 2a was ', t2 - t1,'(s)' !------------------------------------------------------------------------------ ! Section 2b !------------------------------------------------------------------------------ t1 = etime(tmp) CALL SUB2(a,b,c,d,n) t2 = etime(tmp) PRINT *, 'CPU time used by section 2b was ', t2 - t1,'(s)' STOP END PROGRAM HW1 SUBROUTINE SUB1 (a,b,c,d,i,j) IMPLICIT NONE REAL :: a,b,c,d INTEGER :: i,j a = (a*b + c*d)**0.315 RETURN END SUBROUTINE SUB1 SUBROUTINE SUB2(a,b,c,d,n) IMPLICIT NONE INTEGER :: n REAL :: a(n,n),b(n,n),c(n,n),d(n,n) INTEGER :: i,j REAL :: t1,t2,cputime REAL :: tmp(2) REAL :: etime t1 = etime(tmp) DO j =1,n DO i= 1,n a(i,j)= (a(i,j)*b(i,j) + c(i,j)*d(i,j))**0.315 END DO END DO t2 = etime(tmp) PRINT *, 'CPU time used by section 2b inside sub2 was ', t2 - t1,'(s)' RETURN END SUBROUTINE SUB2 REAL FUNCTION cputime() cputime = mclock()/100. RETURN END FUNCTION cputime REAL FUNCTION f_cputime() REAL :: tmp(2) !------------------------------------------------------------------------------ ! SUN/DEC/SGI DEFINITION FOR TIMING !------------------------------------------------------------------------------ f_cputime = etime(tmp) RETURN END FUNCTION f_cputime