为了练习并行化do循环,我在Fortran中执行以下操作
$\integral{0}{1} \frac{4}{1+x^{2}} = \pi$
Run Code Online (Sandbox Code Playgroud)
以下是我实现的代码:
program mpintegrate
integer i,nmax,nthreads,OMP_GET_NUM_THREADS
real xn,dx,value
real X(100000)
nthreads = 4
nmax = 100000
xn = 0.0
dx = 1.0/nmax
value = 0.0
do i=1,nmax
X(i) = xn
xn = xn + dx
enddo
call OMP_SET_NUM_THREADS(nthreads)
!$OMP Parallel
!$OMP Do Schedule(Static) Private(i,X)
do i=1,nmax
value = value + dx*(4.0/(1+X(i)*X(i)))
enddo
!$OMP End DO NoWait
!$OMP End Parallel
print *, value
end
Run Code Online (Sandbox Code Playgroud)
编译程序没问题
gfortran -fopenmp -o mpintegrate mpintegrate.f
Run Code Online (Sandbox Code Playgroud)
问题是当我执行程序时.当我按原样运行程序时,我得到的值(1,4).然而,当我使用omp do循环取消注释print语句时,最终值大约是应该是什么,pi.
为什么答案value不正确?