【问题标题】:compile c++ code with and without fopenmp flag编译带有和不带有 fopenmp 标志的 C++ 代码
【发布时间】:2016-08-10 09:10:21
【问题描述】:

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

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

但在 C++ 中,我会遇到类似的错误 未定义对omp_get_thread_num的引用

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

$!omp id = omp_get_thread_num()

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

【问题讨论】:

  • 次要问题,但我认为您的意思是 !$ fortan 而不是 $!
  • @d_1999 如果您的编辑仍需要审核,请确保改进帖子中的所有内容。
  • @ali 你可以使用 cpp 宏
  • C 在 fortran 使用 !$ 的地方使用了#pragma

标签: c++ fortran openmp


【解决方案1】:

您可以使用 _OPENMP 定义保护您的 C/C++ 代码。这样,您就可以避免在您的应用程序未链接到 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
}

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    相关资源
    最近更新 更多