C++ 使用宏打开/关闭openmp
我想在代码的特定部分打开/关闭openmp并行for循环,而在其他部分中的并行化将保持不变。我也不想每次都更改那个部分的源代码,所以我尝试了下面的一些宏攻击C++ 使用宏打开/关闭openmp,c++,macros,openmp,C++,Macros,Openmp,我想在代码的特定部分打开/关闭openmp并行for循环,而在其他部分中的并行化将保持不变。我也不想每次都更改那个部分的源代码,所以我尝试了下面的一些宏攻击 #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 ;
#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
}
使用OPENMP\u
对于(int i=0;i<100;++i){
//一些东西
}
如果需要这些并行循环,请在main.cpp
文件中定义宏USE_PARALLEL
但不幸的是,这根本不起作用。我知道问题出在#定义QIC#u LIB#u OPENMP#u FOR#pragma omp parallel FOR
行。但没有找到任何解决办法
有没有办法解决这个问题,有没有宏破解
编辑::
这个问题不同于我想在特定部分关闭openmp,而不是整个程序。
正如Jarod42和Anedar所建议的那样,
\u Pagma(“…”)
解决了我的问题。基本上不能在\define
中使用\pragma
,但可以在宏定义中使用pragma操作符作为\u 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
}
#ifdef使用并行
#定义omp并行使用OPENMP
#否则
#定义使用OPENMP
#恩迪夫
#pragma使用OPENMP
对于(int i=0;i<100;++i){
//一些东西
}
如果未定义
使用并行
,则只会解析为空的#pragma
。查看:#pragma
谢谢。成功了。我得到了答案。可能调用omp\u set\u num\u线程(1)代码>在循环关闭之前?您也可以将此方法用于宏。只是一个想法。可能是@Mustafangoul的复制品不,不是。因为我想在特定部分而不是整个程序中关闭openmp。请注意,在带有-Wall标志的gcc下,这将触发-Wunknown pragmas警告。\u Pragma(“”
与gcc和clang配合使用效果很好。虽然我不知道它是否能与icc或msvc合作。但是第二个解决方案不起作用,它给出了-Wunknown pragmas
警告,即使定义了使用\u PARALLEL
。\u Pragma是标准的C99。它当然与国际商会合作。