【发布时间】:2013-03-10 02:46:32
【问题描述】:
此代码使用 OpenMP 时速度较慢。如果没有 OpenMP,我会得到大约 10 秒。使用 OpenMP,我得到大约 40 秒。怎么了?非常感谢朋友们!
for (i=2;i<(nnoib-2);++i){
#pragma omp parallel for
for (j=2; j<(nnojb-2); ++j) {
C[i][j]= absi[i]*absj[j]*
(2.0f*B[i][j] + absi[i]*absj[j]*
(VEL[i][j]*VEL[i][j]*fat*
(16.0f*(B[i][j-1]+B[i][j+1]+B[i-1][j]+B[i+1][j])
-1.0f*(B[i][j-2]+B[i][j+2]+B[i-2][j]+B[i+2][j])
-60.0f*B[i][j]
)-A[i][j]));
c2 = (abs(C[i][j]) > Amax[i][j]);
if (c2) {
Amax[i][j] = abs(C[i][j]);
Ttra[i][j] = t;
}
}
}
【问题讨论】:
-
c2声明在哪里? -
c2 是一个全局变量。 c2 是整数。谢谢!
-
然后将其设为本地,因为
c2上会有竞争条件/依赖关系。 -
好的!我将会!可以是 "if (abs(C[i][j]) > Amax[i][j])" 吗?
标签: c++ performance parallel-processing openmp icc