6

我正在尝试使用 OpenMP 进行不同类型的并行化。结果,我的#pragma omp parallel for代码中有几行我(取消)交替注释。有没有办法让这些行有条件地使用类似下面的东西,而不是工作代码?

   define OMPflag 1 
   #if OMPFlag pragma omp parallel for
   for ...
4

2 回答 2

7

C99 有一个_Pragma关键字,可以让您将原本应该#pragma在宏中的内容放入其中。就像是

#define OMP_PARA_INTERNAL _Pragma("omp parallel for")
#if [your favorite condition]
#define OMP_FOR OMP_PARA_INTERNAL for
#else
#define OMP_FOR for
#endif

然后在你的代码中

OMP_FOR (unsigned i; i < n; ++i) {
  ...
}
于 2010-11-03T12:51:03.720 回答
5

OpenMP 并行构造可以if指定一个子句。在 Fortran 我会写这样的东西:

!$omp parallel if(n>25) ... 

当问题可能太小而无法并行化时,我有时会使用它。我想您可以使用相同的方法在运行时检查调试标志。我将由您自己弄清楚 C++ 语法,但它可能完全相同。

于 2010-11-03T10:40:13.150 回答