[Info-vax] x86-64 data aligment / faulting

Arne Vajhøj arne at vajhoej.dk
Sun Feb 27 21:27:13 EST 2022


On 2/27/2022 8:56 PM, Arne Vajhøj wrote:
> I simply can't get a big difference between aligned and unaligned access.
> 
> Data at the bottom.
> 
> I am not saying that there are no cases where unaligned data access
> make a significant difference.
> 
> But I have not been able to come up with a case.

Code below in case anybody wonder WTF I am doing.

Arne

       PROGRAM TEST_ALIGN
       INTEGER*4 N,REP,OFFSET
       PARAMETER (N=2500000,REP=100,OFFSET=17)
       BYTE DUMMY(OFFSET)
       REAL*8 X(N+(OFFSET-1)/8+1)
       EQUIVALENCE (DUMMY,X)
       INTEGER*4 I,J,SCALE(4)
       DATA SCALE/1000,100,10,1/
       DO 200 J=1,REP
         DO 100 I=1,N+1
           X(I)=I
100     CONTINUE
200   CONTINUE
       DO 400 J=1,4
         WRITE(6,700) N/SCALE(J),8*N/SCALE(J),REP*SCALE(J),
      +               'SEQUENTIAL ACCESS'
         DO 300 I=1,OFFSET
             CALL TEST(I,DUMMY(I),N/SCALE(J),REP*SCALE(J),.FALSE.)
300     CONTINUE
400   CONTINUE
       DO 600 J=1,4
         WRITE(6,700) 2**(9+3*J),8*2**(9+3*J),REP*SCALE(J)/6,
      +               'RANDOM ACCESS'
         DO 500 I=1,OFFSET
             CALL TEST(I,DUMMY(I),2**(9+3*J),REP*SCALE(J)/6,.TRUE.)
500     CONTINUE
600   CONTINUE
700   FORMAT(1X,'DATA SIZE = ',I7,' (',I8,' BYTES), REP = ',I6,', ',A)
       END

and:

       SUBROUTINE TEST(IX,X,N,REP,RANACC)
       INTEGER*4 IX,N,REP
       REAL*8 X(*)
       LOGICAL*4 RANACC
       INTEGER*4 I,T1,T2,DUMMY,RANIX
       CALL SYSTEM_CLOCK(T1,DUMMY,DUMMY)
       DO 200 J=1,REP
         IF(RANACC) RANIX=0
         DO 100 I=1,N
           IF(RANACC) THEN
             RANIX=MOD(401*RANIX+1,N)
             X(RANIX+1)=I
           ELSE
             X(I)=I
           ENDIF
100     CONTINUE
200   CONTINUE
       CALL SYSTEM_CLOCK(T2,DUMMY,DUMMY)
       IF(RANACC) THEN
         WRITE(6,300) IX-1,MOD(LOC(X),8),T2-T1
       ELSE
         WRITE(6,300) IX-1,MOD(LOC(X),8),T2-T1
       ENDIF
       RETURN
300   FORMAT(1X,'OFFSET ',I2,' (ADDRESS MOD 8 = ',I1,'): ',I6,' ms')
       END




More information about the Info-vax mailing list