【发布时间】: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 来说都可以。