小编use*_*083的帖子

线程总结变量在OpenMP中给出了错误的答案

为了练习并行化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不正确?

fortran openmp fortran77

2
推荐指数
1
解决办法
929
查看次数

标签 统计

fortran ×1

fortran77 ×1

openmp ×1