我想在我的代码的特定部分中打开/关闭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("...")
解决了我的问题。
答案 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
。