我想知道是否有办法使用 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++;
}
}
有没有人有这方面的解决方案......
答案 0 :(得分:4)
您确实在那里存在数据依赖性问题,因为k
可以从i
和j
计算:
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
作为i
和j
的函数,并保留相同的行为:
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;
}
}