【发布时间】:2018-11-09 13:02:01
【问题描述】:
我正在尝试并行化 for 循环,但我不确定如何并行化,因为此循环使用的变量 k 不是 i(i 增加了 2,因为我正在处理数组的两个部分a 一次)用于数组索引 b 和 c。
for (int i = 0; i < asize; i +=2)
{
b[k] = a[i];
c[k] = a[i + 1];
k++;
}
#pragma omp parallel for 与k 发生数据竞争并产生错误结果
而#pragma omp parallel for private(k) 导致每个线程在自己的IE 上增加k。多个线程同时写入b[0] and c[0] 也会产生错误的结果。
【问题讨论】:
-
如果你意识到
k == i/2;你不需要k -
你说得对,我似乎没有看到这一点。哎呀。谢谢。 @user463035818
-
否则我希望 openmp 有一些
shared可以用来代替private(k),尽管不共享总是更好 -
因为
private创建了特定于每个线程的变量,对吧?