有条件的“pragma omp”

时间:2010-11-03 09:21:45

标签: c macros openmp pragma

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

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

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

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

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