我正在尝试测试一小段代码的速度,如下所示:
for(i=0;i<imgDim;i++)
{
X[0][i] = Z[i] - U1[i] * rhoinv;
X[1][i] = Z[i] - U2[i] * rhoinv;
X[2][i] = Z[i] - U3[i] * rhoinv;
}
迭代次数约为 200,imgDim 为 1000000。这段代码的总时间约为 2 秒。整个代码大约需要 15 秒。但是在我使用 openmp 来并行这段代码之后,例如:
omp_set_num_threads(max_threads);
#pragma omp parallel shared(X,Z,U1,U2,U3,imgDim,rhoinv) private(i)
{
#pragma omp for schedule(dynamic)
for(i=0;i<imgDim;i++)
{
X[0][i] = Z[i] - U1[i] * rhoinv;
X[1][i] = Z[i] - U2[i] * rhoinv;
X[2][i] = Z[i] - U3[i] * rhoinv;
}
}
max_threads 为 8。只有这一小段代码需要大约 11 秒,而整个代码大约需要 27 秒。最奇怪的是,如果我将 max_threads 更改为 1,时间会减少到 6 秒。但仍然比顺序代码长得多。
这花了我很多时间,我找不到问题。如果有人可以帮助我,我将不胜感激。