【发布时间】:2021-05-10 15:28:04
【问题描述】:
我这样并行化我的代码:
for (int i=0; i<size; ++i) {
#pragma omp parallel for
for (int j=i; j<size; ++j) {
int l = j+1;
float sum = a[i*size+j];
float sum2 = a[l*size+i];
for (int k=0; k<i; ++k) {
sum -= a[i*size+k] * a[k*size+j];
sum2 -= a[l*size+k] * a[k*size+i];
}
a[i*size+j]=sum;
a[l*size+i]=sum2;
}
#pragma omp parallel for
for (int j=i+1; j<size; ++j) {
a[j*size+i]/=a[i*size+i];
}
}
但我希望它是这样的:
for (int i=0; i<size; ++i) {
#pragma omp parallel for
for (int j=i; j<size; ++j) {
int l = j+1;
float sum = a[i*size+j];
float sum2 = a[l*size+i];
for (int k=0; k<i; ++k) {
sum -= a[i*size+k] * a[k*size+j];
sum2 -= a[l*size+k] * a[k*size+i];
}
a[i*size+j]=sum;
a[l*size+i]=sum2;
a[l*size+i]/=a[i*size+i];
}
}
这样我才能获得更好的表现。但是,如果我将a[l*size+i]/=a[i*size+i]; 放入与其他内容相同的循环中,我得到的结果与我应该得到的结果不同。我猜这是因为 OpenMP 指令,因为没有它们,两者的结果相同。
如果有人能给我一些关于如何实现这一点或如何提高总体性能的提示,我会很高兴。
【问题讨论】:
标签: c++ c multithreading parallel-processing openmp