如何在源文件的翻译单元中禁用OMP
How to disable OMP in a translation unit at the source file?
我有用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版本,该子句可能不适用于所有指令。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 不同翻译单元中不可重载的非内联函数定义
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 将QIcon添加到QTableView单元格
- C++omp没有显著改善
- 用于交叉编译和CMake的预处理器宏的单元测试
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 字节真的是最小可寻址单元吗
- 等待整个 omp 块完成,然后再调用第二个函数
- C++ 用于单元测试的模板模板
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 提升 1.64 单元测试编译失败
- boost::包含提升单元的元组的哈希值
- 单元测试欧拉到四元数实现失败
- 查找矩阵中单元格的相邻元素
- 运行 C++ 单元测试时LNK2005链接错误
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 如何在源文件的翻译单元中禁用OMP