如何在源文件的翻译单元中禁用OMP?

时间:2015-06-22 05:43:49

标签: c++ openmp

我有使用OMP工具编写的C / C ++源文件。例如,在C ++类文件中:

#pragma omp parallel sections
{
    #pragma omp section
        cp = ModularSquareRoot(cp, m_p);
    #pragma omp section
        cq = ModularSquareRoot(cq, m_q);
}

对于基准测试和测试,我想用-fopenmp构建库,但是在这个特定的类文件上禁用它。我希望我可以在类的头文件中添加#pragma omp disable或类似内容,以便为翻译单元禁用它。但是#pragma omp disable被默默地忽略了。

我查看了Using OpenMP: Portable Shared Memory Parallel Programming,但我还没有看到如何做到这一点。 (我很可能会错过它,因为我还没有完全阅读它。)

我试图避免修改CXXFLAGS,makefile配方和Visual Studio项目设置。

有没有办法在源文件的特定翻译单元中禁用OMP?

1 个答案:

答案 0 :(得分:3)

我不确定你能否在一个简单的"方式。
我想出的解决方案是使用#define为特定文件打开/关闭OpenMP并包装你的pragma:

#ifdef USE_OMP
#pragma omp ...
#endif

然后在头文件的顶部,您可以指定

  • #define USE_OMP当您想使用OpenMP
  • 时 如果要禁用该行,请
  • 或注释该行//#define USE_OMP

这不是很优雅,但做的工作。

正如Avi Ginsburg的评论所指出的,您也可以使用OpenMP中的if子句:

 pragma omp parallel sections if(USE_OMP)

其中USE_OMP设置为true或false。 但是,我不确定此解决方案是否会提供与禁用OpenMP相同的行为。请注意,根据您的OpenMP版本,该子句可能不适用于您的所有指令。