OpenMP并行读取写入竞争条件?

时间:2014-10-23 14:44:09

标签: fortran openmp

我对OpenMP中可能出现的竞争条件感到有点困惑

具体来说,我有两个包含数据的数组AB,我希望将数据合二为一,计算一些内容,并将其存储到其他数据中。

我的fortran代码看起来像这样

!$OMP PARALLEL DO PRIVATE(tmp,data)
DO i = 1, 10000
   tmp = A(i) !!Extract A(i)
   data = Do_Stuff(tmp) !!Compute
   B(i)=data !!Store
END DO
!$OMP END PARALLEL DO

这里有潜伏的竞争条件吗?

我问,因为在介绍的第11-12页我reading下面的代码有这个问题,即使索引i对于所有迭代都不同。

!$OMP PARALLEL DO
do i = 1, 1000
    B(i) = 10 * i
    A(i) = A(i) + B(i)
end do 
!$OMP END PARALLEL DO

1 个答案:

答案 0 :(得分:1)

你的第一个例子中有一个竞争条件。

变量data未明确赋予数据共享属性且没有预定属性,因此在并行构造中它是共享的。多个线程将读写它。

在你的第二个例子中没有这样的条件。