我对OpenMP中可能出现的竞争条件感到有点困惑
具体来说,我有两个包含数据的数组A
和B
,我希望将数据合二为一,计算一些内容,并将其存储到其他数据中。
我的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
答案 0 :(得分:1)
你的第一个例子中有一个竞争条件。
变量data
未明确赋予数据共享属性且没有预定属性,因此在并行构造中它是共享的。多个线程将读写它。
在你的第二个例子中没有这样的条件。