次のスタイルのコードがあります。
for (set=0; set < n; set++) //For1
{
#pragma omp parallel for num_threads(x)
for (i=0; i < m; i++) //For2: this loop can be executed in parallel
{
commands...
}
for (j=0; j < m; j++) //For3: this loop depends on the output of the For2 and also should be executed in a sequential way
{
commands...
}
}
お気づきのように、n 個の独立したセット (外側のループ、つまり For1) があります。各 Set は、並列ループ (For2) と、For2 の後に実行されるシーケンシャル セクション (For3) で構成されます。
For2の並列化には「#pragma omp parallel for num_threads(x)」を既に使用しています。
ここで、外側のループ (For1) も並列にしたいと考えています。つまり、各 Set を並行して実行したいのです。
openmpでそれがどのように可能かを教えていただければ幸いです。
1 つの方法は、各セットに対応する n 個のスレッドを作成することです。それが正しいか?しかし、openmp 機能を完全に使用する別の方法があるかどうか疑問に思っていますか?
前もって感謝します。