C****************************************************************************** C FILE: loop11.f C DESCRIPTION: C Demonstrates loop unrolling C****************************************************************************** program loop11 IMPLICIT NONE integer DIM1, DIM2 parameter(DIM1 = 400) parameter(DIM2 = 400) integer I, J, K real A(DIM1, DIM2), AA(DIM1, DIM2) real B(DIM1, DIM2), BB(DIM1, DIM2) real C(DIM1, DIM2), CC(DIM1, DIM2) integer(8) T1, T2, IRTC C***************************************************************************** C* Untuned Loop * C***************************************************************************** T1 = IRTC() DO J=1, DIM2 DO I=1, DIM1 DO K=1, 4 A(I, J) = A(I, J) + B(K, I) * C(K, J) ENDDO ENDDO ENDDO T2 = IRTC() write(*,*)'Untuned loop took', (T2-T1)/1000000, 'msec' C***************************************************************************** C* Tuned Loop * C***************************************************************************** T1 = IRTC() DO J=1, DIM2 DO I=1, DIM1 AA(I, J) = AA(I, J) + BB(1, I) * CC(1, J) AA(I, J) = AA(I, J) + BB(2, I) * CC(2, J) AA(I, J) = AA(I, J) + BB(3, I) * CC(3, J) AA(I, J) = AA(I, J) + BB(4, I) * CC(4, J) ENDDO ENDDO T2 = IRTC() write(*,*)'Tuned loop took', (T2-T1)/1000000, 'msec' C Need to actually use the results of the calculations or else the C optimizing compiler may just skip doing them...so we'll just C print them. This will force the optimizer to actually do the work. print *, A(DIM1, DIM2), AA(DIM1, DIM2) 999 end