omp 並列ブロックの外側で critical、single、master、barrier などの omp プラグマを使用しても問題ありませんか? OMP 並列ブロックから、またはそうでなくても呼び出せる関数があります。はいの場合、コードの一部をクリティカル セクションで囲む必要があります。つまり、このコードは大丈夫ですか?
void myfunc(){
#pragma omp critical
{ /* code */ }
}
// not inside an omp parallel region
myfunc();
#pragma omp parallel
{
// inside an omp parallel region
myfunc();
}
OpenMP ドキュメントでこれについての言及は見つかりませんでした。コードは 1 スレッドの実行とまったく同じように動作するはずです。これが gcc での動作です。この動作が移植可能かどうか、または仕様で定義されておらず、何も期待できないものかどうかを知りたいです。