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