我想在我的代码的特定部分打开/关闭 openmp parallel 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
}
如果我需要这些并行循环,则在 main.cpp
文件中定义宏 USE_PARALLEL
。
但不幸的是,这根本不起作用。我知道问题出在 #define QIC_LIB_OPENMP_FOR #pragma omp parallel for
行中。但找不到任何解决方案。
有没有办法解决这个问题,有没有宏黑客?
编辑:
这个问题不同于disable OpenMP in nice way因为我想在特定部分而不是整个程序中关闭 openmp。
根据 Jarod42 和 Anedar 的建议,_Pagma("...")
解决了我的问题。
最佳答案
您基本上不能在 #define
中使用 #pragma
,但您可以将 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
}
如果未定义 USE_PARALLEL
,它将解析为一个空的 #pragma
。
关于c++ - 使用宏打开/关闭 openmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35706798/