【问题标题】:omp pragmas outside omp parallel blockomp 并行块外的 omp 编译指示
【发布时间】:2012-09-01 06:12:45
【问题描述】:

是否可以在 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 一起工作的方式。我想知道这种行为是可移植的,还是规范没有定义的东西,任何东西都是可以预期的。

【问题讨论】:

  • 我认为这对于大多数 pragma 来说都可以。

标签: c++ c openmp


【解决方案1】:

根据this文档:

DO/for、SECTIONS、SINGLE、MASTER 和 BARRIER 指令绑定到动态封闭的 PARALLEL(如果存在)。如果当前没有执行并行区域,则指令无效。

所以答案是这些 pragma 可以在并行区域之外使用。虽然我仍然没有发现它在文档中明确写入。

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多