C++ 使用宏打开/关闭openmp

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 ;

我想在代码的特定部分打开/关闭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 ; ++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。它当然与国际商会合作。