我试图用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 ......也需要私密,但也没有用。
答案 0 :(得分:1)
您正在设置dpx
两次而不使用它。这是有意的吗?或者您希望第二个电话是d2py
吗?你永远不会设置d2py
,然后使用它,这似乎是可疑的。