使用和不使用 fopenmp 标志编译 C++ 代码

ali*_*ali 5 c++ fortran openmp

我已经安装了 C++ 和 Fortran 编译器并测试了 (C++) 程序(串行和并行版本)。

在 Fortran 中编译(并行化)代码而不启用该-openmp选项时应以(默认)串行模式编译代码

但在 C++ 中,我收到了诸如未定义引用之类的错误 omp_get_thread_num

但是在 Fortran 中,当您编译没有 -fopenmp 标志的代码时,它会忽略任何以$!omp类似开头的代码

$!omp id = omp_get_thread_num()
Run Code Online (Sandbox Code Playgroud)

C++ 中有没有类似的选项?

Har*_*ald 3

您可以使用 _OPENMP 定义来保护您的 C/C++ 代码。这样,只要您的应用程序未链接到 OpenMP 运行时,您就可以避免引入对 OpenMP 运行时的调用。

例如,您可以使用以下代码

void foo (void)
{
#ifdef _OPENMP
   printf ("I have been compiled with OpenMP support\n");
#else
   printf ("I have been compiled without OpenMP support\n");
#endif
}
Run Code Online (Sandbox Code Playgroud)