diff --git a/intro_lab/pi.f90 b/intro_lab/pi.f90 index 964bce76f02dec1aab2518e5a7c3692a8f1fb8ab..4f4e1def58ea447aec5b3b2e6f2adc9ee8bed931 100644 --- a/intro_lab/pi.f90 +++ b/intro_lab/pi.f90 @@ -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 diff --git a/intro_lab/solutions/pi_loop.f90 b/intro_lab/solutions/pi_loop.f90 index a8215ee5f36a00ee18df500c881b653bf5646aa0..91f5d83bfb3430959ce12a425307233e5aeba593 100755 --- a/intro_lab/solutions/pi_loop.f90 +++ b/intro_lab/solutions/pi_loop.f90 @@ -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 diff --git a/intro_lab/solutions/pi_spmd_final.f90 b/intro_lab/solutions/pi_spmd_final.f90 index 6336dca90f95011dcb04f7d0fe6760fc7cd7d594..f21b2eace608f435f511bc09377720cd2f421f50 100755 --- a/intro_lab/solutions/pi_spmd_final.f90 +++ b/intro_lab/solutions/pi_spmd_final.f90 @@ -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 diff --git a/intro_lab/solutions/pi_spmd_simple.f90 b/intro_lab/solutions/pi_spmd_simple.f90 index 89eb73784240f3d70460b834cfdb8b9cfa45d1b7..737ca1b0269b9c8d90473fca7302386cf0c09d1b 100755 --- a/intro_lab/solutions/pi_spmd_simple.f90 +++ b/intro_lab/solutions/pi_spmd_simple.f90 @@ -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