Skip to content
Snippets Groups Projects
Commit 0049bb86 authored by Xin Li's avatar Xin Li
Browse files

double precision in fortran

parent e4d526e0
No related branches found
No related tags found
No related merge requests found
......@@ -16,22 +16,22 @@ use omp_lib
implicit none
integer*8 :: num_steps = 100000000
real*8 step
integer(kind=8) :: num_steps = 100000000
real(kind=8) step
integer i
real*8 x, pi, raw_sum
real*8 start_time, run_time
real(kind=8) x, pi, raw_sum
real(kind=8) start_time, run_time
step = 1.0D0 / num_steps
start_time = OMP_GET_WTIME()
raw_sum = 0.0
raw_sum = 0.0D0
do i = 1, num_steps
x = (i-0.5)*step
raw_sum = raw_sum + 4.0/(1.0+x*x)
x = (i-0.5D0)*step
raw_sum = raw_sum + 4.0D0/(1.0D0+x*x)
enddo
pi = step * raw_sum
......
......@@ -13,13 +13,13 @@ implicit none
integer, parameter :: MAX_THREADS = 4
integer*8 :: num_steps = 100000000
integer(kind=8) :: num_steps = 100000000
real*8 step
real(kind=8) step
integer i, num_threads
real*8 x, pi, raw_sum
real*8 start_time, run_time
real(kind=8) x, pi, raw_sum
real(kind=8) start_time, run_time
step = 1.0D0 / num_steps
......@@ -28,7 +28,7 @@ do num_threads = 1, MAX_THREADS
call OMP_SET_NUM_THREADS(num_threads)
start_time = OMP_GET_WTIME()
raw_sum = 0.0
raw_sum = 0.0D0
!$omp parallel
......@@ -38,8 +38,8 @@ do num_threads = 1, MAX_THREADS
!$omp do private(x) reduction(+:raw_sum)
do i = 1, num_steps
x = (i-0.5)*step
raw_sum = raw_sum + 4.0/(1.0+x*x)
x = (i-0.5D0)*step
raw_sum = raw_sum + 4.0D0/(1.0D0+x*x)
enddo
!$omp end do
......
......@@ -18,15 +18,15 @@ implicit none
integer, parameter :: MAX_THREADS = 4
integer*8 :: num_steps = 100000000
real*8 step
integer(kind=8) :: num_steps = 100000000
real(kind=8) step
integer i, num_threads
real*8 pi, full_sum, partial_sum
real*8 start_time, run_time
real(kind=8) pi, full_sum, partial_sum
real(kind=8) start_time, run_time
integer thread_id
real*8 x
real(kind=8) x
step = 1.0D0 / num_steps
......@@ -34,20 +34,20 @@ do num_threads = 1, MAX_THREADS
call OMP_SET_NUM_THREADS(num_threads)
start_time = OMP_GET_WTIME()
full_sum = 0.0
full_sum = 0.0D0
!$omp parallel private(thread_id, partial_sum, i, x)
thread_id = OMP_GET_THREAD_NUM() + 1
partial_sum = 0.0
partial_sum = 0.0D0
!$omp single
print '(" num_threads = ", i0)', num_threads
!$omp end single
do i = thread_id, num_steps, num_threads
x = (i+0.5)*step
partial_sum = partial_sum + 4.0/(1.0+x*x)
x = (i-0.5D0)*step
partial_sum = partial_sum + 4.0D0/(1.0D0+x*x)
enddo
!$omp critical
......
......@@ -18,16 +18,16 @@ implicit none
integer, parameter :: MAX_THREADS = 4
integer*8 :: num_steps = 100000000
real*8 step
integer(kind=8) :: num_steps = 100000000
real(kind=8) step
integer i, num_threads
real*8 pi, full_sum
real*8 start_time, run_time
real*8, dimension(1:MAX_THREADS) :: partial_sum
real(kind=8) pi, full_sum
real(kind=8) start_time, run_time
real(kind=8), dimension(1:MAX_THREADS) :: partial_sum
integer thread_id
real*8 x
real(kind=8) x
step = 1.0D0 / num_steps
......@@ -39,15 +39,15 @@ do num_threads = 1, MAX_THREADS
!$omp parallel private(thread_id, i, x)
thread_id = OMP_GET_THREAD_NUM() + 1
partial_sum(thread_id) = 0.0
partial_sum(thread_id) = 0.0D0
if (thread_id == 1) then
print '(" num_threads = ", i0)', num_threads
endif
do i = thread_id, num_steps, num_threads
x = (i+0.5)*step
partial_sum(thread_id) = partial_sum(thread_id) + 4.0/(1.0+x*x)
x = (i-0.5D0)*step
partial_sum(thread_id) = partial_sum(thread_id) + 4.0D0/(1.0D0+x*x)
enddo
!$omp end parallel
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment