現在のところ、私のコードのどこか深いところで、ネストされたfor-loop(N1 =〜10000、N2 =〜500、x、y = 10-50)を使って作業しています。私は#pragma omp
を使ってOpenMPに計算をいくつかのコアに配布させました。OpenMPスケジューリングは条件付き内部ループで効率的ですか?
#pragma omp parallel for
for (int i = 0; i < N1; ++i)
{
for (int j = 0; j < N2; ++j)
{
for (int k = x; k <= y; ++k)
{
// calculation
}
}
}
は今、私の2 innerloopsは
#pragma omp parallel for
for (int i = 0; i < N1; ++i)
{
if (toExecute[i])
{
for (int j = 0; j < N2; ++j)
{
for (int k = x; k <= y; ++k)
{
// calculation
}
}
}
}
内側のネストされたループ条件となりどちらか長い時間がかかる、または直後に行われます。もちろん、if-statementを省略することもできます。これは、outer-loopとif-statementをより短いループに置き換え、後のインデックス作成を参照します。
質問:私の外側のループ内でifステートメントを処理するには十分にスマートなのですか?何か手動で行う必要がありますか?
私は現在Visual Studio 2017でC++を使用しています(OpenMPのバージョンは少し遅れていると思います)。