是否可以在 omp 并行块之外使用 omp pragma,如关键、单一、主或屏障?我有一个可以从 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 一起工作的方式。我想知道这种行为是可移植的,还是规范没有定义的东西,任何东西都是可以预期的。