是否可以在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/

10-15 03:13