2017-05-18 59 views
0

我已经建立了对微软的Azure支持RDMA几个H16R实例,英特尔乒乓球测试工作正常:如何编译Microsoft Azure上的MPI应用程序(用于使用RDMA)?

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进行通信,但并未发现Microsoft在其HPC CentOS 7.1映像上包含英特尔编译器。

所以我安装了OpenMPI并使用mpic++编译了LAMMPS;然而,OpenMPI的mpirun抱怨并且不会运行任何东西。

我是否真的需要为此任务购买英特尔编译器?有没有办法在这些虚拟机上使用OpenMPI?这对个人项目来说相当昂贵。

回答

0

您不需要英特尔编译器就可以使用英特尔MPI。它也适用于GCC。 IMPI提供了特定于Intel的编译器包装(mpiicc,mpiicpc,mpiifort)和通用的编译器包装(mpicc,mpicxx,mpif90等)。后者使用任何兼容的编译器。

为了使用mpicxx为LAMMPS,你必须告诉要么通过在命令行参数提供它使用GCC包装:

$ mpicxx -cxx=g++ ... 

或通过设置I_MPI_CXX环境变量:

$ export I_MPI_CXX=g++ 
$ mpicxx ... 

这同样适用于C和Fortran包装。无论用什么参数运行它们,都会得到一个可用于提供实际编译器名称的选项列表。

作为使用的替代MPI实现,由天青提供的虚拟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还没有回答我的询问上述说法是否让开放MPI工作的错误信息)

+0

这些安装在哪里?它们默认不在我的PATH中,执行'find/-name“mpiicc”'也不会透露任何东西。是否有我应该安装的软件包? – Nick

+0

在我们的集群上,这些包装在'/ opt/intel/impi/5.1.3.181/bin64 /'中。根据[文档](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/rdma-cluster),这也是其中IMPI是上基于CentOS的可寻虚拟机。 –

+0

的IMPI目录存在,然而,编译器包装不是(仅'mpirun','mpivars.sh'等)我想他们已经从CentOS的7.1 HPC图像即天青被供给除去。 – Nick

相关问题