You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

141 lines
2.8 KiB

! program to time the various routines
subroutine f_main
use ddmodule
implicit none
integer*4 old_cw
double precision t
double precision second
double precision time_thresh
parameter (time_thresh = 0.5d0)
type (dd_real) a, b, c, d
integer n, i, k
call f_fpu_fix_start (old_cw)
write (6, *) 'Timing addition / subtraction ...'
n = 512
do k = 1, 25
n = n * 2
a = ddpi()
b = sqrt(a)
c = sqrt(b)
d = sqrt(c)
t = second()
do i = 1, n
a = b + c
b = a - d
a = b + c
b = a - d
enddo
t = second() - t
if (t .ge. time_thresh) exit
enddo
n = n * 4
write (6, *) n, ' operations in ', t, ' seconds.'
write (6, *) t/n*1.0d6, ' usec'
call ddwrite(6, a)
write (6, *) 'Timing multiplication ...'
n = 512
do k = 1, 25
n = n * 2
a = 1.0d0 + ddpi() * 1.0d-7
b = a + 1.0d-7
c = b + 1.0d-8
d = c + 1.0d-9
t = second()
do i = 1, n
a = b * c
b = a * d
a = b * c
b = a * d
enddo
t = second() - t
if (t .ge. time_thresh) exit
enddo
n = n * 4
write (6, *) n, ' operations in ', t, ' seconds.'
write (6, *) t/n*1.0d6, ' usec'
call ddwrite(6, a)
write (6, *) 'Timing division ...'
n = 512
do k = 1, 25
n = n * 2
a = 1.0d0 + ddpi()
b = 2.0d0 + ddpi()
c = 1.0d0 + 1.0d-8
d = 1.0d0 + 1.0d-9
t = second()
do i = 1, n
a = b / c
b = a / d
a = b / c
b = a / d
enddo
t = second() - t
if (t .ge. time_thresh) exit
enddo
n = n * 4
write (6, *) n, ' operations in ', t, ' seconds.'
write (6, *) t/n*1.0d6, ' usec'
call ddwrite(6, a)
write (6, *) 'Timing square root ...'
n = 512
do k = 1, 25
n = n * 2
a = 0.0d0
b = 2.0d0 + ddpi()
t = second()
do i = 1, n
a = sqrt(a + b)
enddo
t = second() - t
if (t .ge. time_thresh) exit
enddo
write (6, *) n, ' operations in ', t, ' seconds.'
write (6, *) t/n*1.0d6, ' usec'
call ddwrite(6, a)
write (6, *) 'Timing sin ...'
n = 512
do k = 1, 25
n = n * 2
a = 0.0d0
c = 1.7d0 * ddreal(1.0d0) / dble(n)
d = 2.45d0 * ddpi() / dble(n + 3)
t = second()
do i = 1, n
a = a + sin(c)
c = c + d
enddo
t = second() - t
if (t .ge. time_thresh) exit
enddo
write (6, *) n, ' operations in ', t, ' seconds.'
write (6, *) t/n*1.0d6, ' usec'
call ddwrite(6, a)
write (6, *) 'Timing log ...'
n = 512
do k = 1, 25
n = n * 2
a = 0.0d0
c = exp(ddreal(-50.1d0));
d = exp(ddreal(100.2d0) / dble(n))
t = second()
do i = 1, n
a = a + log(c)
c = c * d
enddo
t = second() - t
if (t .ge. time_thresh) exit
enddo
write (6, *) n, ' operations in ', t, ' seconds.'
write (6, *) t/n*1.0d6, ' usec'
call ddwrite(6, a)
end