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