我在以下简单代码中遇到了问题。我正在尝试将OpenMP与GFortran一起使用。代码波纹管的结果x应该是具有和不具有相同的!$OMP语句,因为并行码和序列代码应该输出相同的结果。
program test
implicit none
!INCLUDE 'omp_lib.h'
integer i,j
Real(8) :: x,t1,t2
x=0.0d0
!$OMP PARALLEL DO PRIVATE(i,j) shared(X)
Do i=1,3
Write(*,*) I
!pause
Do j=1,10000000
!$OMP ATOMIC
X=X+2.d0*Cos(i*j*1.0d0)
end do
end do
!$OMP END PARALLEL Do
write(*,*) x
end program test
Run Code Online (Sandbox Code Playgroud)
但是奇怪的是我得到以下结果x:
平行:-3.17822355415XXXXX
序列号: -3.1782235541569084
哪里XXXXX是一些随机数字。每次运行串行代码,都会得到相同的结果(-3.1782235541569084)。我该如何解决?这是由于某些OpenMP工作精度选项引起的吗?