ompクリティカルセクションの後に暗黙のompバリアがありますか
たとえば、次のコードバージョン1をバージョン2に変更できますか?
バージョン-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)
}
}
バージョン-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クリティカル領域の後に暗黙のバリアがありますか?
編集: 例が非常に貧弱な場合は申し訳ありません..また、バージョン1とバージョン2の間にパフォーマンスの違いがあるかどうかを知りたいです