C AHL'S SIMPLE BENCHMARK C REMOVE C IN FRONT OF CODE LINES IF YOUR FORTRAN HAS A C UNIX-LIKE TIME FUNCTION DOUBLE PRECISION R,S,A INTEGER I,N C INTEGER ITER,T,TIME DOUBLE PRECISION DRAND WRITE (*,*) 1 'ahl.f77-- the Fortran-77 version of Ahls simple benchmark' C ITER=DRAND(TIME(0)) C ITER=0 C T=TIME(0) C 10 CONTINUE C IF (T .EQ. TIME(0)) GO TO 10 C T=TIME(0) C 20 CONTINUE C ITER=ITER+1 R=0. S=0. DO 30 N=1,100 A=N DO 40 I=1,10 A=DSQRT(A) R = R + DRAND(0) 40 CONTINUE DO 50 I=1,10 A = A*A R = R + DRAND(0) 50 CONTINUE S = S + A 30 CONTINUE C IF ((TIME(0)-T) .LT. 20) GO TO 20 C WRITE (*,*) ITER,' iterations' C WRITE (*,*) 20./ITER,' seconds per iteration' WRITE (*,*) 'Accuracy ',DABS(1010.0D0-S/5.0D0) WRITE (*,*) 'Random ',DABS(1000.0D0-R) END
C Ahl's simple benchmark C Remove C in front of code lines if your fortran has a C Unix-like time function double precision r,s,a integer i,n C integer*4 t,time,iter double precision drand print *, 1 'ahl.f-- the Extended Fortran-77 version of Ahls simple benchmark' C iter=drand(time(0)) C iter=0 C t=time(0) C do while (t .eq. time(0)) C end do C t=time(0) C do while ((time(0)-t) .lt. 20) C iter=iter+1 r=0. s=0. do n=1,100 a=n do i=1,10 a=dsqrt(a) r = r + drand(0) end do do i=1,10 a = a*a r = r + drand(0) end do s = s + a end do C end do C print *,iter,' iterations' C print *,20./iter,' seconds per iteration' print *,'Accuracy ',abs(1010.-s/5.) print *,'Random ',abs(1000.-r) end
C Ahl's simple benchmark double precision r,s,a real*4 t1,t integer*4 seed integer i,n,iter print *, + 'ahlvax.for-- the VAX Fortran version of Ahls simple benchmark' iter=0 t=secnds(0.0) seed=(int(t*256.)+1) t1=t do while (t .eq. t1) t=secnds(0.0) end do t1=t do while ((t-t1) .lt. 20) iter=iter+1 r=0. s=0. do n=1,100 a=n do i=1,10 a=a**0.5 r = r + ran(seed) end do do i=1,10 a = a**2 r = r + ran(seed) end do s = s + a end do t=secnds(0.0) end do print *,iter,' iterations' print *,(t-t1)/iter,' seconds per iteration' print *,abs(1010.-s/5.) print *,abs(1000.-r) end