2013-04-08 99 views
0

我读过OpenMP中的变量是默认共享的。这是否意味着在下面的代码中,它应该将所有数字从0到N-1相加,这里有一个竞争条件?OpenMP竞争状态?

int sum = 0,i; 
#pragma omp parallel for 
for (i = 0; i < N; i++) 
    sum+=i; 

回答

2

是的,存在竞争条件。您应该将reduction(+:sum)添加到编译指示中。这将有效地在每个线程中创建不可见的私人副本,然后在循环之后对它们进行求和。

+0

并且还使'我'私人? – jitihsk 2013-04-10 22:56:06

+1

这里没有必要,因为openmp'for'中的循环迭代变量是自动私有的。 – 2013-04-11 05:53:49