【问题标题】:Intel Fortran compiler cannot find module `mpi`英特尔 Fortran 编译器找不到模块“mpi”
【发布时间】:2018-12-06 08:52:49
【问题描述】:

我最近在学术许可下安装了 Intel 的 Parallel Studio XE 2019,我正在尝试编译采用 MPI 的 Fortran90 代码。我收到以下错误:

>> ifort -O3 -ip -ipo -c parallel.f90
parallel.f90(7): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MPI]
  use mpi
------^

显然ifort 无法找到 MPI 库。据我了解,英特尔库带有自己的 MPI 库,所以我认为我不应该担心链接到例如libopenmpi。当我用 GNU 的 mpif90 编译相同的代码时,一切都按预期工作。

下面我包含了echo $LD_LIBRARY_PATH 的(已编辑的)输出。有什么遗漏吗?

/home/***/intel/compilers_and_libraries_2019.1.144/linux/compiler/lib/intel64_lin
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/libfabric/lib
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/lib/release
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/lib
/home/***/intel/compilers_and_libraries_2019.1.144/linux/ipp/lib/intel64
/home/***/intel/compilers_and_libraries_2019.1.144/linux/compiler/lib/intel64_lin
/home/***/intel/compilers_and_libraries_2019.1.144/linux/mkl/lib/intel64_lin
/home/***/intel/compilers_and_libraries_2019.1.144/linux/tbb/lib/intel64/gcc4.7
/home/***/intel/compilers_and_libraries_2019.1.144/linux/tbb/lib/intel64/gcc4.7
/home/***/intel/compilers_and_libraries_2019.1.144/linux/daal/lib/intel64_lin
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/libfabric/lib
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/lib/release
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/lib
/home/***/intel/compilers_and_libraries_2019.1.144/linux/compiler/lib/intel64_lin
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/libfabric/lib
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/lib/release
/home/***/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/lib
/home/***/intel/compilers_and_libraries_2019.1.144/linux/ipp/lib/intel64
/home/***/intel/compilers_and_libraries_2019.1.144/linux/compiler/lib/intel64_lin
/home/***/intel/compilers_and_libraries_2019.1.144/linux/mkl/lib/intel64_lin
/home/***/intel/compilers_and_libraries_2019.1.144/linux/tbb/lib/intel64/gcc4.7
/home/***/intel/compilers_and_libraries_2019.1.144/linux/tbb/lib/intel64/gcc4.7
/home/***/intel/compilers_and_libraries_2019.1.144/linux/daal/lib/intel64_lin
/home/***/intel/compilers_and_libraries_2019.1.144/linux/daal/../tbb/lib/intel64_lin/gcc4.4

[编辑]echo $PATH的内容:

/home/****/intel/intelpython3/bin
/home/****/intel/advisor_2019.1.0.579143/bin64
/home/****/intel/vtune_amplifier_2019.1.0.579888/bin64
/home/****/intel/inspector_2019.1.0.579146/bin64
/home/****/intel/compilers_and_libraries_2019.1.144/linux/bin/intel64
/home/****/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/libfabric/bin
/home/****/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/bin
/home/****/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/libfabric/bin
/home/****/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/bin
/home/****/intel/compilers_and_libraries_2019.1.144/linux/bin/intel64
/home/****/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/libfabric/bin
/home/****/intel//compilers_and_libraries_2019.1.144/linux/mpi/intel64/bin
/home/****/anaconda3/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
/home/****/intel//parallel_studio_xe_2019.1.053/bin

【问题讨论】:

  • 您可能应该使用 mpif90 而不是 ifort 进行编译 - 这能解决问题吗?
  • mpif90 链接到gfortran。你的意思是mpiif90(注意double i)?如果是这样:Command 'mpiif90' not found, did you mean: ... 是我调用 mpiif90 时得到的结果
  • 您的计算机中可以有多个mpif90。您是如何为英特尔编译器安装 MPI 的?您是否根据需要使用ifortvars.sh 脚本?
  • mpiifort 怎么样?灵感来自hpc.cineca.it/center_news/…
  • @VladimirF MPI 带有 Parallel Studio XE,但我从系统的存储库 (apt install libopenmpi-dev) 安装了mpif90。我按照说明采购了psxevars.sh,据说它的来源是ifortvars.sh(我在我的intel 目录中哪里可以找到ifortvars.sh?)。 @IanBush mpiifort 也无法识别。

标签: fortran mpi intel-parallel-studio


【解决方案1】:

如果您想将英特尔 MPI 与英特尔 Fortran 编译器一起使用,包装器为 mpiifort。

如果您想在use mpi 中使用其他 MPI(例如 Open MPI),那么您可能需要重新构建 MPI 库,因为 Fortran 模块在供应商之间不可互操作,有时甚至同一供应商的不同编译器版本也不可互操作.

我强烈建议您使用 ifort 并手动设置包含和库路径。

FWIW,英特尔 MPI mpif90 使用 GNU gfortran 编译器。

【讨论】:

  • 目前在我的系统上找不到mpiifort,在Parallel Studio安装目录中也找不到。但是根据您的说法,use mpi 不能与英特尔产品一起使用?所以没有办法用gfortran 和ifort 编译相同的代码?
  • 也许英特尔 MPI 没有学术许可,只安装了运行时(免费使用)。如果您use mpi,那么您必须使用用于构建 MPI 库的相同编译器。英特尔包装器隐藏了这一点,但 Open MPI 并非如此。如果您打算同时使用这两种编译器,那么您必须构建并安装两次 Open MPI。 Fortran 模块的互操作性不仅限于 MPI。您不能使用gfortran 构建模块foo,然后使用ifort 构建use foo 的其他源。最重要的是,use MPI 仅在使用 ifort 构建 Open MPI 时才能与 ifort 一起使用。
  • 只有 Parallel Studio XE cluster edition 拥有完整的英特尔 MPI。如果没有,则只有运行时可用。不过,您可能只能获得英特尔 MPI 的学术许可。
  • 感谢您的建议。我将尝试使用英特尔编译器编译 OpenMPI 并将其链接。 @VladimirF 您提到您可以在一个系统上拥有多个 mpif90 实例。我将如何正确地做到这一点(不破坏我的 GNU 配置)?
  • @MPA,您可以在不同的目录中构建和安装多个 MPI 库。只要它们不在PATH 和LD_LIBRARY_PATH 中,一切都应该没问题。您可以通过修改路径以指向您要使用的版本在它们之间切换。最好使用 Modules 等环境管理工具来完成此操作,这是当今 HPC 安装的黄金标准。
猜你喜欢
  • 2016-04-26
  • 2010-12-04
  • 2017-03-06
  • 2017-01-22
  • 2016-10-19
  • 2010-12-08
  • 1970-01-01
  • 2021-11-14
  • 2012-04-23
相关资源
最近更新 更多