使用宏打开/关闭openmp

时间:2016-02-29 18:26:15

标签: c++ macros openmp

我想在我的代码的特定部分中打开/关闭openmp并行for循环,其中其他部分的并行化将保持不变。另外我不想每次都改变那些部分的源代码,所以尝试了一些像下面这样的宏hack。

#ifdef USE_PARALLEL
  #define USE_OPENMP_FOR #pragma omp parallel for
#else
  #define USE_OPENMP_FOR
#endif

所以在源代码中,我可以简单地使用...

USE_OPENMP_FOR
for ( int i = 0 ; i < 100 ; ++i ) {
  // some stuffs
}

如果我需要那些并行循环,请在USE_PARALLEL文件中定义宏main.cpp

但不幸的是,这根本不起作用。我知道问题出在#define QIC_LIB_OPENMP_FOR #pragma omp parallel for行。但找不到任何解决方案。

有没有办法解决这个问题,无论是否有宏黑客攻击?

EDIT :: 这个问题与disable OpenMP in nice way不同,因为我想在特定部分关闭openmp,而不是整个程序。 正如 Jarod42 Anedar 所示,_Pagma("...")解决了我的问题。

1 个答案:

答案 0 :(得分:2)

您基本上不能在#pragma中使用#define,但您可以在宏定义中将pragma运算符用作_pragma("omp parallel for")

如果您的编译器不支持,那么这应该有效:

#ifdef USE_PARALLEL
    #define USE_OPENMP_FOR omp parallel for
#else
    #define USE_OPENMP_FOR
#endif

#pragma USE_OPENMP_FOR
for ( int i = 0 ; i < 100 ; ++i ) {
  // some stuffs
}

如果未定义#pragma,则只会解析为空USE_PARALLEL