Fortran 使用MPI从gfortan切换到ifort

Fortran 使用MPI从gfortan切换到ifort,fortran,mpi,intel,Fortran,Mpi,Intel,我用fortran编写了一段代码,使用MPI进行并行化,我一直使用gfortran作为编译器,但现在我想使用Intel iFortran。问题是,在服务器上,我尝试为mpif90运行gnu编译器,但gnu编译器设置为默认值: mpif90 --showme gfortran -I/usr/lib/openmpi/include -pthread -I/usr/lib/openmpi/lib -L/usr//lib -L/usr/lib/openmpi/lib -lmpi_f90 -lmpi_f7

我用fortran编写了一段代码,使用MPI进行并行化,我一直使用gfortran作为编译器,但现在我想使用Intel iFortran。问题是,在服务器上,我尝试为mpif90运行gnu编译器,但gnu编译器设置为默认值:

mpif90 --showme
gfortran -I/usr/lib/openmpi/include -pthread -I/usr/lib/openmpi/lib -L/usr//lib -L/usr/lib/openmpi/lib -lmpi_f90 -lmpi_f77 -lmpi -ldl -lhwloc
我不知道iPort中必须包含哪些标志。我是这样试的:

ifort -openmp test_mpi.f -I/usr/local/openmpi-1.8.4-intel/include -I/usr/local/openmpi-1.8.4-intel/lib -L/usr/local/openmpi-1.8.4-intel/lib -lmpi_f90 -lmpi_f77 -lmpi
这给了我一个输出:

/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib//libmpi_f77.so: undefined reference to `opal_uses_threads'
然后,我尝试使用/usr/lib/OpenMpi/,而不是英特尔OpenMpi,程序可以编译,但在执行时,我得到:

./a.out: error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory
这是有线的,因为查找echo$LD_LIBRARY_路径:

/opt/intel/composer_xe_2013.5.192/compiler/lib/intel64:/opt/intel/composer_xe_2013.5.192/mpirt/lib/intel64:/opt/intel/composer_xe_2013.5.192/ipp/../compiler/lib/intel64:/opt/intel/composer_xe_2013.5.192/ipp/lib/intel64:/opt/intel/composer_xe_2013.5.192/compiler/lib/intel64:/opt/intel/composer_xe_2013.5.192/mkl/lib/intel64:/opt/intel/composer_xe_2013.5.192/tbb/lib/intel64/gcc4.4
在/opt/intel/composer_xe_2013.5.192/compiler/lib/intel64中有“libiomp5.so”

有人知道如何修复我的编译器标志吗

@高性能标记: 我现在是这样做的:

ifort -openmp test_mpi.f -I/opt/intel/mpi-rt/4.1.0/include -I/opt/intel/mpi-rt/4.1.0/lib -L/opt/intel/mpi-rt/4.1.0/lib -lmpi_f90 -lmpi_f77 -lmpi
这给了我:

ld: skipping incompatible /opt/intel/mpi-rt/4.1.0/lib/libmpi.so when searching for -lmpi ld: skipping incompatible /opt/intel/mpi-rt/4.1.0/lib/libmpi.a when searching for -lmpi
通过跳过
-lmpi
错误:

include -I/opt/intel/mpi-rt/4.1.0/lib -L/opt/intel/mpi-rt/4.1.0/lib -lmpi_f90 -lmpi_f77 ld: /tmp/ifort41PQRn.o: undefined reference to symbol 'mpi_null_delete_fn_' ld: note: 'mpi_null_delete_fn_' is defined in DSO /usr/lib/libmpi.so.1 so try adding it to the linker command line /usr/lib/libmpi.so.1: could not read symbols: Invalid operation

出现了

您需要首先设置编译器变量。英特尔为该任务提供了一个脚本:
/bin/compilervars.sh intel64
。然后所有的库都应该被找到,代码将被编译…@AlexanderVogt:对不起,我现在得到了它!我做到了:
/opt/intel/composer_xe_2015.1.133/bin/compilervars。”intel64'
有效。我用:
ifort-openmp test\u mpi.f-I/usr/lib/openmpi/include-I/usr/lib/openmpi/lib-L/usr/lib/openmpi/lib-lmpi\u f90-lmpi\u f77-lmpi
编译了它,它再次给了我:
/a.out:加载共享库时出错:libiomp5.so:无法打开共享对象文件:执行时没有这样的文件或目录
。我会重新下载询问HPC系统管理员是否支持使用模块选择OMPILER和mpi版本。“这要简单得多!”高性能马克和弗拉基米尔:我两个都做了,而且我让它运行起来了!问题是$PATH和$LD_LIBRARY_PATH没有指向英特尔编译器。感谢您应该始终使用为相应编译器安装或使用相应编译器编译的MPI库。通常,
/usr/lib
中的库是用
gcc
编译的,可能与英特尔编译器不兼容。您应该询问您的系统管理员,使用哪个版本(正如@VladimirF指出的,最好使用模块系统)。