有条件的“pragma omp”

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

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

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

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

当问题可能太小而无法进行并行化时,我有时会使用它。 我想你可以使用相同的方法在运行时检查调试标志。 我会把它留给你来弄清楚C ++的语法,但它可能完全一样。

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) { ... }