c++ - 使用宏打开/关闭 openmp

标签 c++ macros openmp

我想在我的代码的特定部分打开/关闭 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。 根据 Jarod42Anedar 的建议,_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/

相关文章:

c - 使用 C 在 OpenMP 中执行后合并要打印的数据

c++ - 将字符串转换为 boost::gregorian::greg_month

c++ - 我可以像在 C++ 中那样在 R 中拥有多个独立的随机数生成器吗?

c - 可以有零个或一个参数的通用宏

c++ - OpenMP for 循环和指针

c++ - 并行循环中的惰性 vector 访问

c++ - 如何从整个磁盘中排除要挂载的一个文件

c++ - C++ 中的枚举类型

c - 计算存储数字 n 所需位数的宏

c - 如何在 ath5k 无线驱动程序中禁用快速帧