PROGRAM VTEST1 C----------------------------------------------------------------------------- C C This program writes four arrays, one of each data type, C then reads them back and compares with what was written. C Next, it does a real array of square roots and then a C double precision array of squares. C C The accesses and faults are printed at the end of each C group. Finally, the hit ration for the entire program is C printed. The hit ration will always be high because of C the sequential nation of this particular program. C C----------------------------------------------------------------------------- PARAMETER (NSIZE = 4000) BYTE BYTE, B INTEGER*2 INTGER INTEGER*4 ACCESSES, FAULTS REAL*4 REAL, R REAL*8 DOUBLE, D VIRTUAL BYTE(NSIZE), INTGER(NSIZE), REAL(NSIZE), DOUBLE(NSIZE) COMMON /VCOUNT/ ACCESSES, FAULTS C...... Initialize statistics ACCESSES = 0 FAULTS = 0 C...... Print message WRITE (5,*) ' ' WRITE (5,*) 'VIRTUAL DISK ARRAY TEST' WRITE (5,*) C...... Load data DO 10 I=1,NSIZE B=I BYTE(I)=B 10 CONTINUE DO 20 I=1,NSIZE INTGER(I)=I 20 CONTINUE DO 30 I=1,NSIZE R=I REAL(I)=R 30 CONTINUE DO 40 I=1,NSIZE D=I DOUBLE(I)=D 40 CONTINUE TYPE 200, ACCESSES, FAULTS C...... Check values DO 110 I=1,NSIZE B=I IF (BYTE(I) .NE. B) WRITE (5,*) 'BYTE test ',B,BYTE(I) 110 CONTINUE DO 120 I=1,NSIZE IF (INTGER(I) .NE. I) WRITE (5,*) 'INTEGER test ',I,INTGER(I) 120 CONTINUE DO 130 I=1,NSIZE R=I IF (REAL(I) .NE. R) WRITE (5,*) 'REAL test ',R,REAL(I) 130 CONTINUE DO 140 I=1,NSIZE D=DOUBLE(I) IF (DOUBLE(I) .NE. D) WRITE (5,*) 'DOUBLE test',D,DOUBLE(I) 140 CONTINUE TYPE 200, ACCESSES, FAULTS C...... Do square-root and square loading DO 150 I=1,NSIZE R=I REAL(I)=SQRT(R) 150 CONTINUE DO 160 I=1,NSIZE D=I DOUBLE(I)=D*D 160 CONTINUE TYPE 200, ACCESSES, FAULTS C...... Check results DO 170 I=1,NSIZE R=I IF (REAL(I) .NE. SQRT(R)) 1 WRITE (5,*) 'SQRT test ',I,SQRT(R),REAL(I) 170 CONTINUE DO 180 I=1,NSIZE D=I IF (DOUBLE(I) .NE. D*D) 1 WRITE (5,*) 'SQUARE test ',I,D*D,DOUBLE(I) 180 CONTINUE TYPE 200, ACCESSES, FAULTS C...... Print statistics HITS = 100.0 * ( 1.0-(FLOAT(FAULTS)/FLOAT(ACCESSES)) ) TYPE 205, HITS C----------------------------------------------------------------------------- 200 FORMAT(' ACCESSES =',I10,' FAULTS =',I10/) 205 FORMAT(' Hit ratio = ',F8.2,'%'/) END