次のようなシナリオがあります。
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
for (k = 0; k < x; k++)
{
val = 2*i + j + 4*k
if (val != 0)
{
for(t = 0; t < l; t++)
{
someFunction((i + t) + someFunction(j + t) + k*t)
}
}
}
}
}
これがブロック A であると考えると、私のコードにはさらに 2 つの同様のブロックがあります。並列にしたいので、OpenMPプラグマを使いました。ただし、この場合、どの変数が共有され、プライベートになるかについて少し混乱しているため、並列化することはできません。内側のループでの関数呼び出しが sum += x のような演算である場合、削減句を追加できたはずです。一般に、入れ子になった for ループがあり、メインの操作を行う別の内部 for ループがある場合、OpenMP を使用してコードを並列化するアプローチはどのようになるでしょうか。並列領域を宣言してから、単純にプラグマ fors をブロックの前に置いてみましたが、間違いなくそこにポイントがありません!
ありがとう、サヤン