英特尔 Fortran 编译器找不到模块“mpi”
Posted
技术标签:
【中文标题】英特尔 Fortran 编译器找不到模块“mpi”【英文标题】:Intel Fortran compiler cannot find module `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
也无法识别。
【参考方案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 安装的黄金标准。以上是关于英特尔 Fortran 编译器找不到模块“mpi”的主要内容,如果未能解决你的问题,请参考以下文章
具有140多个模块的英特尔Fortran 11.1长编译时间