如何在Microsoft Azure上编译MPI应用程序(使用RDMA)?

时间:2017-05-18 04:55:24

标签: azure mpi intel openmpi hpc

我在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?这对于个人项目来说相当昂贵。

1 个答案:

答案 0 :(得分:0)

您不需要英特尔编译器才能使用英特尔MPI。它也适用于GCC。 IMPI提供特定于Intel的编译器包装器(mpiiccmpiicpcmpiifort)和通用编译器包装器(mpiccmpicxxmpif90等。)后者适用于任何兼容的编译器。

为了将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工作)