後の暗黙のバリアは、例えばOMPクリティカルセクションOMPクリティカルセクション
後の暗黙のOMPバリアがそこにあると、私はバージョン2にバージョン-1、この次のコードを変更することができます。
VERSION-1
int min = 100;
#pragma omp parallel
{
int localmin = min;
#pragma omp for schedule(static)
for(int i = 0; i < 1000; i++)
localmin = std::min(localmin, arr[i]);
#pragma omp critical
{
min = std::min(localmin, min)
}
}
VERSION-2
int min = 100;
#pragma omp parallel
{
int localmin = min;
#pragma omp for schedule(static) nowait
for(int i = 0; i < 1000; i++)
localmin = std::min(localmin, arr[i]);
#pragma omp critical
{
min = std::min(localmin, min)
}
} // will I get the right "min" after this (because I have included nowait)
は、私は、バージョン1およびバージョン2の両方に同じ結果を得るのだろうか?
ompクリティカル領域の後に暗黙バリアがありますか?
EDIT:例は..また、非常に貧弱である申し訳ありませんがあれば、私はバージョン1とバージョン2の間のいずれかのパフォーマンスの違いがあるかどうかを知りたいのですが
これはおそらく最良の例ではありません。なぜなら、平行領域を離れるときに障壁が存在するからです。それにもかかわらず、良い質問。 +1 – Mysticial
あなたが掲示した人為的な例でv2 over v1でパフォーマンス上の利点はありませんが、現実の世界では可能性があります。 –