更改OMP_SCHEDULE会导致错误的结果

时间:2017-06-11 13:32:47

标签: fortran openmp race-condition schedule

我编写了一个平滑粒子流体动力学代码,在使用OpenMP的静态计划时可以产生正确的结果。当我说出正确的结果时,我的意思是我已经根据分析解决方案验证了它们。

但是,我想切换到动态时间表,因为每次迭代要完成的工作不是一成不变的。据我所知,在这种情况下,动态计划会导致更快的计算。实际上,它运行得更快但结果现在不正确,导致看起来IMO成为竞争条件。

enter image description here

我应用OpenMP的循环的简化版本如下:

array1 = 0.0 ! Array of size N
array2 = 0.0 ! Array of size N
array3 = something ! Array of size N, will not change through the loop
!$OMP PARALLEL DO SHARED(array1, array2, array3) FIRSTPRIVATE(N) PRIVATE(i, j, N2, temp) SCHEDULE(runtime) DEFAULT(none)
do i=1,N

    N2 = function1(i) ! Reading from array3 and some math

    do j=1,N2

        temp = 0.0

        temp = function2(i,j) ! No writing here, just reading stuff from array3, doing math and storing the result in temp

        array1(i) = array1(i) + temp
    end do

    array2(i) = function3(array1(i)) ! Some math on array1(i), just reading

end do
!$OMP END PARALLEL DO

我调查了"虚假分享"问题,但它似乎只是一个性能问题意味着它不会影响结果(如果我是正确的)。

有人已经遇到过这样的问题吗?我错过了竞争条件吗?

0 个答案:

没有答案