0

次のコード(Pg.187、RourkeによるCのComputational Geom)は、シリアルおよびパラレル(2 proc)で実行するのに同じ時間がかかります。問題を特定するのを手伝ってください。これが平行部分です

int chunk;
chunk=10;
#pragma omp parallel private(i,j,k,xn,yn,zn)
{
#pragma omp for schedule(static,chunk)
    for(i=0;i<n-2;i++)
    {
        for(j=i+1;j<n;j++)
            for(k=i+1;k<n;k++)
                if(j!=k)
                {
                    xn=(y[j]-y[i])*(z[k]-z[i])-(y[k]-y[i])*(z[j]-z[i]);
                    yn=(x[k]-x[i])*(z[j]-z[i])-(x[j]-x[i])*(z[k]-z[i]);
                    zn=(x[j]-x[i])*(y[k]-y[i])-(x[k]-x[i])*(y[j]-y[i]);
                    if(flag=(zn<0))
                        for(m=0;m<n;m++)
                            flag=flag && ((x[m]-x[i])*xn + (y[m]-y[i])*yn + (z[m]-z[i])*zn <=0);
                    if (flag)
                        printf("%d\t%d\t%d\n",i,j,k);
                }
    }
}
4

1 に答える 1

1

OK、解決しました。残りの変数-mとフラグもプライベートにする必要がありました。

于 2012-05-07T07:58:40.623 に答える