是否可以在omp并行块外部使用关键,单个,主或障碍之类的omp编译指示?我有一个可以从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一起工作的方式。我想知道这种行为是否是可移植的,或者是规范未定义并且可以预期的事情。
最佳答案
根据this文件:
因此,答案是可以在并行区域之外使用这些编译指示。尽管我仍然没有在文档中明确写出它。
关于c++ - omp并行块外的pragmas,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12316776/