我试图用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/

10-09 03:42