【问题标题】:OpenMP for loop when using a different index var to index the array?使用不同的索引变量索引数组时的OpenMP for循环?
【发布时间】:2018-11-09 13:02:01
【问题描述】:

我正在尝试并行化 for 循环,但我不确定如何并行化,因为此循环使用的变量 k 不是 ii 增加了 2,因为我正在处理数组的两个部分a 一次)用于数组索引 bc

for (int i = 0; i < asize; i +=2)
{
    b[k] = a[i];
    c[k] = a[i + 1];

    k++;
}

#pragma omp parallel fork 发生数据竞争并产生错误结果

#pragma omp parallel for private(k) 导致每个线程在自己的IE 上增加k。多个线程同时写入b[0] and c[0] 也会产生错误的结果。

【问题讨论】:

  • 如果你意识到k == i/2; 你不需要k
  • 你说得对,我似乎没有看到这一点。哎呀。谢谢。 @user463035818
  • 否则我希望 openmp 有一些 shared 可以用来代替 private(k),尽管不共享总是更好
  • 因为private 创建了特定于每个线程的变量,对吧?

标签: c++ openmp icc


【解决方案1】:

类似的东西?

for (int k = 0; 2*k < asize; k++) // i = 2*k
{
    b[k] = a[2*k];
    c[k] = a[2*k + 1];
}

【讨论】:

  • 也可以使用b[k/2] = a[k]; 但这只是一种不同的方式吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2021-12-13
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2021-04-07
相关资源
最近更新 更多