提问人:nadavhalahmi 提问时间:1/23/2023 更新时间:1/24/2023 访问量:159
Openmp 可重现缩减 [重复]
Openmp reproducible reduction [duplicate]
问:
我有以下示例代码:
!$omp threadpriavate(var)
!$omp parallel do reduction(+:var)
do
var = var + compilated_floating_point_computation()
end do
!$omp end parallel do
print *,var
即使我使用相同数量的线程,每次运行的 var 结果也略有不同。我尝试添加openmp子句,但出现以下编译错误: .order(reproducible:concurrent)
Error: threadprivate variable 'var' used in a region with 'order(concurrent)' clause
有没有办法使用约简,同时在相同数量的线程上仍然保持浮点可重复性?
答:
1赞
Victor Eijkhout
1/24/2023
#1
如果你的计算比加法约简要高得多,你可以用计算结果创建一个数组,并按顺序求和。
否则,不同的结果是并行性的内在副作用。接受它的本质,使用稳定的算法,这样它就无关紧要了,或者使用各种集成来获得具有统计意义的结果。
上一个:浮点数学坏了吗?
评论