C****************************************************************************** C FILE: mem01.f C DESCRIPTION: C Demonstrates effect of stride C****************************************************************************** program mem01 IMPLICIT NONE integer ARRAY_SIZE parameter(ARRAY_SIZE = 1000) integer I, J real A(ARRAY_SIZE,ARRAY_SIZE), AA(ARRAY_SIZE,ARRAY_SIZE) real B(ARRAY_SIZE,ARRAY_SIZE), BB(ARRAY_SIZE,ARRAY_SIZE) real C(ARRAY_SIZE,ARRAY_SIZE), CC(ARRAY_SIZE,ARRAY_SIZE) integer(8) T1, T2, IRTC C***************************************************************************** C* Initialize Data * C***************************************************************************** DO I = 1, 1000 DO J = 1, 1000 A(J,I) = RAND() B(J,I) = RAND() C(J,I) = RAND() AA(J,I) = RAND() BB(J,I) = RAND() CC(J,I) = RAND() END DO END DO C***************************************************************************** C* Stride 1000 Loop * C***************************************************************************** T1 = IRTC() DO I = 1, 1000 DO J = 1, 1000 C(I,J) = C(I,J) + A(I,J) * B(I,J) END DO END DO T2 = IRTC() write(*,*)'Stride 1000 loop took', (T2-T1)/1000000, 'msec' C***************************************************************************** C* Stride 1 Loop * C***************************************************************************** T1 = IRTC() DO J = 1, 1000 DO I = 1, 1000 C(I,J) = C(I,J) + A(I,J) * B(I,J) END DO END DO T2 = IRTC() write(*,*)'Stride 1 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. I = RAND() * 10 J = RAND() * 10 print *, ' ' print *, 'Ignore this next line of output' print *, A(I,J), B(I,J),C(I,J),AA(I,J),BB(I,J),CC(I,J) END