【发布时间】:2012-04-07 08:06:12
【问题描述】:
我有一个嵌套循环:(L 和 A 是完全定义的输入)
#pragma omp parallel for schedule(guided) shared(L,A) \
reduction(+:dummy)
for (i=k+1;i<row;i++){
for (n=0;n<k;n++){
#pragma omp atomic
dummy += L[i][n]*L[k][n];
L[i][k] = (A[i][k] - dummy)/L[k][k];
}
dummy = 0;
}
及其顺序版本:
for (i=k+1;i<row;i++){
for (n=0;n<k;n++){
dummy += L[i][n]*L[k][n];
L[i][k] = (A[i][k] - dummy)/L[k][k];
}
dummy = 0;
}
它们都给出不同的结果。而且并行版本比顺序版本慢很多。
什么可能导致问题?
编辑:
为了摆脱原子指令带来的问题,我将代码修改如下:
#pragma omp parallel for schedule(guided) shared(L,A) \
private(i)
for (i=k+1;i<row;i++){
double dummyy = 0;
for (n=0;n<k;n++){
dummyy += L[i][n]*L[k][n];
L[i][k] = (A[i][k] - dummyy)/L[k][k];
}
}
但它也没有解决问题。结果仍然不同。
【问题讨论】:
-
如果您在浮点数上进行操作,请阅读此stackoverflow.com/a/8991640/893693
标签: c++ gcc parallel-processing openmp