我在Microsoft Azure上设置了一些支持RDMA的H16R实例,并且英特尔乒乓球测试工作正常:
mpirun -hosts <host1>,<host2> -ppn 1 -n 2 -env I_MPI_FABRICS=dapl -env I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -env I_MPI_DYNAMIC_CONNECTION=0 IMB-MPI1 pingpong
但是,当我想编译MPI应用程序(例如LAMMPS)时会出现问题。尽管这些H16R实例使用英特尔MPI进行通信,但微软在其HPC CentOS 7.1映像上包含英特尔编译器并不会出现这种情况。
所以我安装了OpenMPI并使用mpic++
编译了LAMMPS;然而,OpenMPI的mpirun
抱怨并且不会运行任何东西。
我是否真的需要为此任务购买英特尔编译器?有没有办法在这些虚拟机上使用OpenMPI?这对于个人项目来说相当昂贵。
答案 0 :(得分:0)
您不需要英特尔编译器才能使用英特尔MPI。它也适用于GCC。 IMPI提供特定于Intel的编译器包装器(mpiicc
,mpiicpc
,mpiifort
)和通用编译器包装器(mpicc
,mpicxx
,mpif90
等。)后者适用于任何兼容的编译器。
为了将mpicxx
用于LAMMPS,您必须通过在命令行参数中提供GCC来告诉包装器使用GCC:
$ mpicxx -cxx=g++ ...
或设置I_MPI_CXX
环境变量:
$ export I_MPI_CXX=g++
$ mpicxx ...
这同样适用于C和Fortran包装器。无任何参数运行它们,您将获得可用于提供实际编译器名称的选项列表。
至于使用替代MPI实现,Azure提供的虚拟InfiniBand适配器似乎缺乏对共享接收队列的支持,Open MPI将无法使用其默认配置运行。您可以尝试使用以下mpiexec
选项运行:
--mca btl_openib_receive_queues P,128,256,192,128:P,2048,1024,1008,64:P,12288,1024,1008,64:P,65536,1024,1008,64
这会将所有共享接收队列重新配置为私有队列。我不知道它是否真的有效 - 我无权访问Azure HPC实例,这完全基于来自this question的错误消息(不幸的是,OP没有回复我的询问是否上述论点使Open MPI工作)