【问题标题】:How to correcly upgrade your OpenMP version?如何正确升级您的 OpenMP 版本?
【发布时间】:2020-08-01 20:24:06
【问题描述】:

我正在尝试通过 Amazon EC2 在一些虚拟机上部署 OpenMP/MPI 项目。每个虚拟机都运行 Ubuntu 16.04,目前我有: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 和相对的mpich

我在 Ubuntu 18.04 上使用 gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 正确测试了我的项目。基本上,我将 OpenMP 数组归约与自定义归约运算符一起使用,据我所知,这从 OpenMP 4.5 开始可用。这确实是一个问题,因为在我的虚拟机上我收到以下错误:error: ‘array1_test’ has invalid type for ‘reduction’

我认为我简单的升级就足够了 (following this),但之后 MPI 抱怨 Please use the same version of GCC and g++ for compiling MPICH and user MPI programs。我尝试重新安装 mpich 但没有成功。

我正在使用 cmake 进行编译。链接 MPI 如下:

link_libraries(${MPI_CXX_LIBRARIES})
if(MPI_CXX_COMPILE_FLAGS)
  set_property(GLOBAL PROPERTY COMPILE_FLAGS "${MPI_CXX_COMPILE_FLAGS}")
endif()
if(MPI_CXX_LINK_FLAGS)
set_property(GLOBAL PROPERTY LINK_FLAGS "${MPI_CXX_LINK_FLAGS}")
endif()

我做错了什么,如何正确升级 OpenMP 而不会弄乱 MPI 配置?

【问题讨论】:

  • 您必须将编译器升级到支持您要使用的 OpenMP 功能的版本。如果 MPI 的东西使用不同的编译器,那也必须升级才能匹配。
  • 正如我所说,我已经尝试将gcc 升级到版本 7.4.0。 mpicc 也已更新,因为它已链接到它。遗憾的是,我仍然收到 MPI 错误。
  • 该错误消息听起来确实像是 MPI 工具链中的某些内容没有升级。
  • 我尝试重新安装 mpich 但显然也没有用。也许值得一提的是我正在使用cmake 进行编译。我已经更新了问题。
  • 问题是 Ubuntu 16.04 软件包(包括 MPICH)是用太旧版本的 GCC 编译的。使用较新版本的 GCC 不足以解决问题。使用更新版本的 Ubuntu,如 LTS 18.04,应该可以解决您的问题。但是,您可以尝试使用backport,以便 MPICH 和 GCC 可以是最新的!另一种选择是自己从较新的 GCC 构建 MPICH(Spack 可以提供帮助)。不要忘记检查 CMake 在 gcc 和 g++ 之间使用相同的版本,因为它不能保证。

标签: c++ compiler-errors mpi openmp


【解决方案1】:

因此,对于遇到我的问题的任何人,我已经按照@Jérôme Richard 的建议解决了从源 MPICH 构建的问题。

1) 我安装了较新版本的 gcc,以便为我的项目提供兼容的 OpenMP 标准(例如 4.5)并解决 error: ‘array1_test’ has invalid type for ‘reduction’ 问题。

2) 我已经从 MPICH 网站 (download section) 下载了源文件。

3) 按照他们的安装指南,我设法安装了mpich,使用gcc 7.4.0 进行编译以解决Please use the same version of GCC and g++ for compiling MPICH and user MPI programs 问题。

请注意,我需要坚持使用 Ubuntu 16.04。只需使用更新的 Ubuntu 版本(例如 >=18.04),就可以跳过所有这些麻烦。

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 2014-12-09
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多