c++ - 在运行时检测 OPENMP 是否正在 C++ 程序中使用

标签 c++ openmp

我想在运行时知道 C++ 程序是否在启用 OPENMP 的情况下编译。有些事情 OPENMP 2.0 不能轻易做到,所以我想用另一种机制来伪造它们。但是,如果代码是在禁用 OPENMP 的情况下编译的,那么我还想禁用我的其他机制并串行运行所有内容。

例如

if( isOpenMPEnabled() )
    runFakeParallelAlgorithm();
else
    runSequentialAlgorithm();

我该如何实现

bool isOpenMPEnabled()

我应该说我们使用的是 OPENMP 2.0

最佳答案

如果/openmp 标志被传递给编译器并且编译成功,将添加一个预处理器指令,您可以使用它在运行时检查它:

#if defined(_OPENMP)
   #pragma omp ...
#endif

关于c++ - 在运行时检测 OPENMP 是否正在 C++ 程序中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56166109/

相关文章:

c++ - 为什么可以从 QWidget 创建对象而无需将其包含在 C++ 程序的开头

c++ - libespeak 在消息末尾发出额外的音节

基于任务的编程 : #pragma omp task versus #pragma omp parallel for

c++ - 嵌套并行 for 循环 : "Parallel outer for loop" in "parallel inner for loop as a function"

parallel-processing - 从纯 OpenMP 迁移到带有 MPI 的 hyprid

c++ - Visual Studio 2013 OMP Release模式

c++ - openMP:从并行区域调用并行函数

c++ - 将 std::vector 传递给函数

c++ - 错误 : cast from 'void*' to 'int' loses precision

C++ - 将调用者文件和行传递给函数的样式(等同于 __FILE__ 和 __LINE__)