OpenMP竞争状态?
问题描述:
我读过OpenMP中的变量是默认共享的。这是否意味着在下面的代码中,它应该将所有数字从0到N-1相加,这里有一个竞争条件?OpenMP竞争状态?
int sum = 0,i;
#pragma omp parallel for
for (i = 0; i < N; i++)
sum+=i;
答
是的,存在竞争条件。您应该将reduction(+:sum)
添加到编译指示中。这将有效地在每个线程中创建不可见的私人副本,然后在循环之后对它们进行求和。
并且还使'我'私人? – jitihsk 2013-04-10 22:56:06
这里没有必要,因为openmp'for'中的循环迭代变量是自动私有的。 – 2013-04-11 05:53:49