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

How to disable OMP in a translation unit at the source file?

本文关键字:OMP 单元 翻译 源文件      更新时间:2023-10-16

我有用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被默默地忽略了。

我看过《使用OpenMP:可移植共享内存并行编程》,但我还没有看到如何做到这一点。

我尽量避免修改CXXFLAGS、makefile配方和Visual Studio项目设置。

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

我不确定你能用"简单"的方式做到这一点
我提出的解决方案是使用#define为特定文件打开/关闭OpenMP,并包装您的杂注:

#ifdef USE_OMP
#pragma omp ...
#endif

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

  • 想要使用OpenMP时的#define USE_OMP
  • 或者在您想要禁用//#define USE_OMP行时对其进行注释

这不是很优雅,但能起作用。

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

 pragma omp parallel sections if(USE_OMP)

其中CCD_ 9被设置为真或假。然而,我不确定这个解决方案会给出与禁用OpenMP相同的行为。请注意,根据您的OpenMP版本,该子句可能不适用于所有指令。