0

ネストされたループがいくつかあり、最初のループを並列モードにしました。aparそしてmpar、ループ内で値が変更される構造体であり、関数breakLogicが呼び出されて構造体が生成され、それらの構造体の事前に作成されたベクトルに格納されます。one、two ... は関数の前の方で宣言されています。

正確性を確保するために順序付きと重要を含めようとしましたが、まだ間違った結果が得られます。

#pragma omp parallel for ordered private(appFlip, atur, apar, mpar, i, j, k, l, m, n) shared(rawFlip)
for(i=0; i<oneL; i++)
    {
         initialize mpar
         #pragma omp critical
         apar.one = one[i];
         for(j=0; j<twoL; j++)
         {
             apar.two = two[j];
             for(k=0; k<threeL; k++)
             {
                  apar.three = floor(three[k]*apar.two);
                  appFlip = applyParamSin(rawFlip, apar);
                  for(l=0; l< fourL; l++)
                  {
                      mpar.four = four[l];
                      for(m=0; m<fiveL; m++)
                      {
                          mpar.five = five[m];
                          for(n=0; n<sixL; n++)
                          {
                              mpar.six = add[n];
                              atur = breakLogic(appFlip,  mpar, dt);
                              #pragma omp ordered
                              {
                                  sinResVec[itr] = atur;
                                  itr++;
                              }
                          }
                      }
                  }
                  r0(appFlip);
              }
         }
    }

それとも、このコードは並列処理に役立たないのでしょうか? 並列処理用にコードをプロファイリングし、潜在的な問題を示すことができる g++ 用のツールはありますか?

この変更されたコードは機能しますが、パフォーマンスは向上しません。

4

1 に答える 1