PROGRAM SLINGA3 ! Undersökning av hastigheten vid access av stora fält ! på olika sätt. ! Rättad 1999-09-10 IMPLICIT NONE INTEGER, PARAMETER :: DIM = 50 INTEGER :: Cykler_per_sekund, Startcykel, Slutcykel INTEGER :: I, J, K REAL, DIMENSION(1:DIM,1:DIM,1:DIM) :: FAELT REAL :: TID ! Initiering av fältet CALL RANDOM_SEED CALL RANDOM_NUMBER(FAELT) ! Initiering av tidmätning CALL SYSTEM_CLOCK(COUNT_RATE=Cykler_per_sekund) ! Metod 1 med explicit slinga, sista index varierar snabbast OPEN(UNIT=1,FILE='slask1',STATUS='REPLACE',FORM='UNFORMATTED') CALL SYSTEM_CLOCK(COUNT=Startcykel) DO I = 1, DIM DO J = 1, DIM DO K = 1, DIM FAELT(I,J,K) = FAELT(I,J,K)**2 END DO END DO END DO CALL SYSTEM_CLOCK(COUNT=Slutcykel) TID = REAL(Slutcykel - Startcykel)/REAL(Cykler_per_sekund) WRITE(*,*) ' Tid i metod 1 = ', TID, ' sekunder' WRITE(1) SUM(FAELT) CLOSE(1) ! Metod 2 med explicit slinga, första index varierar snabbast OPEN(UNIT=1,FILE='slask1',STATUS='OLD',FORM='UNFORMATTED') CALL SYSTEM_CLOCK(COUNT=Startcykel) DO K = 1, DIM DO J = 1, DIM DO I = 1, DIM FAELT(I,J,K) = FAELT(I,J,K)**2 END DO END DO END DO CALL SYSTEM_CLOCK(COUNT=Slutcykel) TID = REAL(Slutcykel - Startcykel)/REAL(Cykler_per_sekund) WRITE(*,*) ' Tid i metod 2 = ', TID, ' sekunder' WRITE(1) SUM(FAELT) CLOSE(1) ! Metod 3 med fält-operation OPEN(UNIT=1,FILE='slask1',STATUS='OLD',FORM='UNFORMATTED') CALL SYSTEM_CLOCK(COUNT=Startcykel) FAELT = FAELT**2 CALL SYSTEM_CLOCK(COUNT=Slutcykel) TID = REAL(Slutcykel - Startcykel)/REAL(Cykler_per_sekund) WRITE(*,*) ' Tid i metod 3 = ', TID, ' sekunder' WRITE(1) SUM(FAELT) CLOSE(1) END PROGRAM SLINGA3