C****************************************************************************** C FILE: loop10.f C DESCRIPTION: C Demonstrates loop collapse C****************************************************************************** program loop10 IMPLICIT NONE integer ARRAY_SIZE, DIM1, DIM2, DIM3 parameter(ARRAY_SIZE = 1000) parameter(DIM1 = 500) parameter(DIM2 = 80) parameter(DIM3 = 40) integer I, J, K real A(DIM1, DIM2, DIM3), AA(DIM1, DIM2, DIM3) real B(DIM1, DIM2, DIM3), BB(DIM1, DIM2, DIM3) real C(DIM1, DIM2, DIM3), CC(DIM1, DIM2, DIM3) integer(8) T1, T2, IRTC C***************************************************************************** C* Uncollapsed Loop * C***************************************************************************** T1 = IRTC() DO K=1, DIM3 DO J=1, DIM2 DO I=1, DIM1 A(I, J, K) = A(I, J, K) + B(I, J, K) * C(I, J, K) ENDDO ENDDO ENDDO T2 = IRTC() write(*,*)'Untuned loop took', (T2-T1)/1000000, 'msec' C***************************************************************************** C* Collapsed Loop * C***************************************************************************** T1 = IRTC() DO I=1, (DIM1 * DIM2 * DIM3) AA(I, 1, 1) = AA(I, 1, 1) + BB(I, 1, 1) * CC(I, 1, 1) 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,DIM3), AA(DIM1,DIM2,DIM3) 999 end