gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:18:05 26 4
gpt4 key购买 nike

我有使用 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?

最佳答案

我不确定您能否以“简单”的方式做到这一点。
我想出的解决方案是使用 #define 为特定文件打开/关闭 OpenMP 并包装您的编译指示:

#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 版本,该子句可能不适用于您的所有指令。

关于c++ - 如何在源文件的翻译单元中禁用 OMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30972774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com