是否可以在omp并行块之外使用omp pragma,如critical,single,master或barrier?我有一个可以从OMP并行块调用的函数.如果是,我需要将部分代码包含在关键部分中.换句话说,这段代码好吗?
void myfunc(){
#pragma omp critical
{ /* code */ }
}
// not inside an omp parallel region
myfunc();
#pragma omp parallel
{
// inside an omp parallel region
myfunc();
}
Run Code Online (Sandbox Code Playgroud)
我在OpenMP文档中没有提到这一点.我猜代码应该与1个线程执行完全一样 - 这就是它与gcc一起工作的方式.我想知道这种行为是否可移植,或者是规范没有定义的东西,可以预期任何事情.