我试图用openmp伪装我的代码,但是我遇到了一些麻烦。我的代码有多个循环,因此我尝试并行化每个“ for”块,以使我的代码运行更快。但是我有问题并行某些块。问题基本上是当我并行化时得到的结果趋向于0,而当代码在没有openmp的情况下运行时却没有。
这是一个试图并行化的块的示例(其中有3个):
#pragma omp parallel for private(j)
for(i=1;i<127;i++)
for(j=1;j<127;j++)
{
dpx=dp(p[i+1][j],p[i-1][j]);
dpy=dp(p[i][j+1],p[i][j-1]);
d2px=d2p(p[i+1][j],p[i][j],p[i-1][j]);
dpx=dp(p[i][j+1],p[i][j],p[i][j-1]);
f=F(d2px,d2py,dpx,dpy,p[i][j],i,j);
p1[i][j]=p[i][j] + f;
}
有谁知道为什么我得到的结果对于p或p1值趋于0?我认为也许dpx,dpy ...也需要私有,但这也不起作用。
最佳答案
您两次设置dpx
而不使用它。那是故意的吗?还是您想要第二个电话为d2py
?您从未设置d2py
,然后再使用它,这似乎很可疑。
关于c++ - openmp循环结果为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21217796/