有条件的"pragma omp"

Fra*_*ter 6 c macros pragma openmp

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

   define OMPflag 1 
   #if OMPFlag pragma omp parallel for
   for ...
Run Code Online (Sandbox Code Playgroud)

Jen*_*edt 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
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中

OMP_FOR (unsigned i; i < n; ++i) {
  ...
}
Run Code Online (Sandbox Code Playgroud)


Hig*_*ark 5

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

!$omp parallel if(n>25) ... 
Run Code Online (Sandbox Code Playgroud)

当问题可能太小而无法进行并行化时,我有时会使用它.我想你可以使用相同的方法在运行时检查调试标志.我会让你知道C++语法,但它可能完全一样.

  • 我在这里找到了详细信息:https://computing.llnl.gov/tutorials/openMP/#Combined - > OpenMP Directives (2认同)