OpenMP がネストされたループでどのように機能するかを理解するのに問題があります。助けてください!
並行して実行する次のコードを取得しました。
#pragma omp parallel private(i)
{
for(i=0; i<n; i++)
{
#pragma omp for
for(j=0; j<n; j++)
{
if(asubsref(seed,j) > 0)
asubsref(bin,j) = asubsref(bin,j) + 1;
}
#pragma omp for
for(j=0; j<n; j++)
asubsref(seed,j) = asubsref(seed,j) - asubsref(w,i);
}
}
ただし、このコードがどのように機能するかはよくわかりません (運が良かっただけです)。これが私がそれがしていると思うことです...
そのfor(i=0; i<n; i++)
ため、異なるスレッドに分割され、並行して実行されます。i
は であると宣言されているためprivate
、ループの各インスタンスは「サンドボックス化」されています。つまり、変更j
はそのスレッドに残ります (少なくともすべてのスレッドが完了するまで?)。宣言しない#pragma omp for
とコードが破損するため、混乱しています...なぜそうなのかわかりません。
誰かがこのコードが何をしているかを説明してくれたら、とても感謝しています! ありがとうございました!