C C To measure the amount of cache C C coded by R.Himeno C refering a book written by H.Samukawa, C RISC Super Speedup Programing Technique C C a:16MB C testing range from 24KB to 16MB parameter (imax=8,jmax=512) dimension a(imax,jmax*1024),time0(2),time1(2) data m0/ 6/,m1/16000/,kmax/100/ C C initailize do j=1,jmax*1024 do i=1,imax a(i,j) = 1.0 enddo enddo nflops=20 C ^^^^^^^^^ please specify the spec of your computer (MFLOPS) C nflops=nflops*1000000 C C test sm0=float(m0*1024/(4*imax)) sm1=float(m1*1024/(4*imax)) sm0l=alog(sm0) sm1l=alog(sm1) dsml=(sm1l-sm0l)/float(kmax-1) do k=1,kmax sml=sm0l+dsml*(k-1) sm =exp(sml) m =sm c ntest=nflops/(m*16) ntest=nflops/(m*8) ee0=etime(time0) do nn=1,ntest call calc(imax,m,a,s) enddo ee1=etime(time1) c flop=float(ntest)*float(m*16+3) flop=float(ntest)*float(m*8+1) flops=flop/(ee1-ee0)*1.0e-6 size=float(imax*m*4)/1024.0 c write(*,1000) k,size,flops write(*,*) k,size,flops enddo 1000 format(' No.',i3,5x,'Size',f10.3,'kB',5x,'Speed',f10.3,'MFLOPS') stop end subroutine calc(imax,m,a,s) dimension a(imax,m) s0=0.0 s1=0.0 c s2=0.0 c s3=0.0 do i=1,m s0=s0+a(1,i)*a(2,i)+a(3,i)*a(4,i) s1=s1+a(5,i)*a(6,i)+a(7,i)*a(8,i) c s2=s2+a(1,i)*a(8,i)+a(2,i)*a(7,i) c s3=s3+a(3,i)*a(6,i)+a(4,i)*a(5,i) enddo s=s0+s1 c s=s0+s1+s2+s3 return end