openMp:需要并行化具有数据依赖性问题的循环

时间:2010-11-25 07:39:22

标签: c openmp

我想知道是否有办法使用 OpenMP 并行化“for循环”存在数据依赖性问题。

这是我想要并行化的 for loop

int k = 0;
int A[100][100];
for(i = 0; i < 100; i++) {
    for(j = 0; j < 100; j++) {
           A[i][j] = k;
           k++;
    }
}

有没有人有这方面的解决方案......

2 个答案:

答案 0 :(得分:4)

确实在那里存在数据依赖性问题,因为k可以从ij计算:

int A[100][100];
for(i = 0; i < 100; i++) {
    for(j = 0; j < 100; j++) {
        A[i][j] = i * 100 + j;
    }
}

如果您能够提供一个更实际的例子来说明您的目标,我们可以为您提供更多帮助。

答案 1 :(得分:0)

乍一看,问题是k未被声明为派生值;它是循环外部的一个值,可能会使编译器感到困惑。

您可以重写循环以明确指定k作为ij的函数,并保留相同的行为:

int A[100][100];
for(i = 0; i < 100; i++) {
    for(j = 0; j < 100; j++) {
           const int k = i * 100 + j;
           A[i][j] = k;
    }
}