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

Detect at runtime if OPENMP is being used in a C++ program

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

例如

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

我该如何实现

bool isOpenMPEnabled()

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

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

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