【发布时间】:2017-05-03 13:33:30
【问题描述】:
我正在尝试使用 mpi 和 openmp 编写在并行硬件中运行的代码。我有以下代码:
#pragma omp parallel for private(k, temp_r)
for(j=0; j<size; j++){
temp_r = b[j];
for(k=0; k<rows; k++){
temp_r = temp_r - A[j*rows + k] * x[k];
}
r[j] = temp_r;
}
我知道这段代码可以进一步改进,因为内部 for 循环是一个缩减。我可以减少一个 for 循环。但我不知道该怎么做,因为这里涉及两个 for 循环。任何见解都会有所帮助。
【问题讨论】:
-
你真正想做什么?你的目标是什么?什么是典型的
size/rows。你在什么系统上执行代码?最终,您必须提供minimal reproducible example 才能获得好的答案。 -
就您所展示的内容而言,大多数编译器应该都能很好地处理它。根据编译器和选项,内部循环上的 #pragma omp simd reduction(+: temp_r) 可能有助于也可能不会帮助产生 simd 优化。如果您的编译器对 j 的使用产生警告,则通过 for(int j=o;... 将其设为本地应该会有所帮助。
标签: for-loop parallel-processing openmp