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

bra*_*ing 3 c++ openmp

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

例如

if( isOpenMPEnabled() )
    runFakeParallelAlgorithm();
else
    runSequentialAlgorithm();
Run Code Online (Sandbox Code Playgroud)

我怎样才能实施

bool isOpenMPEnabled()
Run Code Online (Sandbox Code Playgroud)

我应该说我们正在使用 OPENMP 2.0

小智 7

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

#if defined(_OPENMP)
   #pragma omp ...
#endif
Run Code Online (Sandbox Code Playgroud)

  • 是的,_OPENMP 定义不仅在支持 OpenMP 时设置,而且还包含编码为编译器支持的 OpenMP 版本的年份和月份的版本。 (2认同)