我一直在嘗試在兩個嵌套循環內的簡單求和操作上應用OpenMP,但到目前爲止產生了不正確的結果。我一直在環視here和here,也在here。所有建議使用reduction
子句,但它不適用於我的情況,通過產生非常大的數字導致segmentation fault
。OpenMP over求和
我也試過這種方式貼在here和我自己的問題here已經解決了。兩者都不使用reduction
,只是簡單地將總和變量設置爲shared
,但它也會產生不正確的結果。有什麼我失蹤了嗎?何時使用reduction
而不是在面對求和操作時使用它?使用reduction
條款
代碼
index = 0
!$OMP PARALLEL DO PRIVATE(iy,ix) REDUCTION(:+index)
do iy = 1, number(2)
do ix = 1, number(1)
index = index + 1
xoutput(index)=xinput(ix)
youtput(index)=yinput(iy)
end do
end do
!$OMP END PARALLEL DO
代碼,而無需使用reduction
條款
index = 0
!$OMP PARALLEL DO PRIVATE(iy,ix) SHARED(index)
do iy = 1, number(2)
do ix = 1, number(1)
index = index + 1
xoutput(index)=xinput(ix)
youtput(index)=yinput(iy)
end do
end do
!$OMP END PARALLEL DO
它可能應該讀作還原(+:指數)'。 .. –
在第二個版本中,'索引'在線程之間共享,'索引=索引+1'這一行導致競爭條件! –