ネストされたループがいくつかあり、最初のループを並列モードにしました。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++ 用のツールはありますか?
この変更されたコードは機能しますが、パフォーマンスは向上しません。