我遇到了一個簡單的代碼下面的問題。我正在嘗試與GFortran一起使用OpenMP。 x
的代碼結果應該與AND沒有!$OMP
語句相同,因爲並行代碼和串行代碼應輸出相同的結果。OpenMP工作精度
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
但奇怪的是我得到以下結果x
:
並行:-3.17822355415XXXXX
編號:-3.1782235541569084
其中XXXXX
是一些隨機數字。每次運行串行代碼時,我都會得到相同的結果(-3.1782235541569084)。我該如何解決它?這是由於某些OpenMP工作精度選項造成的問題嗎?
我意識到你在說什麼。我在我的問題中展示的代碼僅僅是我在真實代碼中面臨的一個示例,這些代碼執行了更多計算。我正在編寫一個代碼來爲我計算流體動力學(CFD)開發的新方法學進行基準測試。所以這就是爲什麼我關心這個問題,因爲我會盡可能地使用最大精度數字來比較和基準方法。 – Eleteroboltz