Bootstrap

Linux&HPC并行计算编程(二)-MPI编译安装与使用

一、OpenMPI的安装与使用

1.1 OpenMPI简介

OpenMPI项目是一个开源消息传递接口实现,由科研机构和行业合作伙伴联合开发和维护。因此,OpenMPI能够结合科学计算社区的专业知识、技术和资源,用以构建可用的最佳MPI库。

官网地址:https://www-lb.open-mpi.org

OpenMPI已实现或正在开发中的功能和特性包括:

完全符合MPI-3.1标准
线程安全性和并发性
动态进程生成
网络和进程容错
异构网络支持
单个库支持所有网络
运行时检测

多作业调度系统支持
多操作系统支持
多平台支持
高便捷性与可维护性
完整的API文档
主动响应邮件列表
基于BSD许可证的开源许可证 

1.2 编译安装 

tar xvf openmpi-X.X.X.tar.gz && cd openmpi-X.X.X

./configure --prefix=安装路径 CC=xxx CXX=xxx 		

make -j N												
make install    


#GNU编译器 CC=gcc CXX=g++
#Intel编译器 CC=icc CXX=icpc
#OpenMPI支持并行编译 
#N为编译使用的进程数

 自定义环境变量Modulefile文件


#%Module1.0
setenv 			OMPI_HOME		安装路径
prepend-path 		PATH			${OMPI_HOME}/bin
prepend-path		LIBRARY_PATH		${OMPI_HOME}/lib
prepend-path		LD_LIBRARY_PATH	${OMPI_HOME}/lib
prepend-path		INCLUDE		${OMPI_HOME}/include
prepend-path    	PKG_CONFIG_PATH	${OMPI_HOME}/lib/pkgconfig
prepend-path		MANPATH		${OMPI_HOME}/share/man

常用命令

命令解释

mpicc

OpenMPI C编译器

mpicxx 

mpic++

OpenMPI C++编译器

mpif77

mpif90

OpenMPI Fortran编译器

mpirun

mpiexec

OpenMPI运行命令

$ mpirun -np 4 -hostfile hostfile program
-np X:	运行X个进程
--hostfile:	指定计算节点列表
hostfile形式一:每行一个结点
node1
node1
node2
node2
hostfile形式二:指定重复次数
node1 slots=2
node2 slots=2
节点内使用共享内存,节点间使用InfiniBand通信
$ mpirun -np 12 -hostfile hosts --mca btl self,sm,openib ./program

常用选项

含义

--mca orte_rsh_agent ssh

指定节点间通信协议,默认为ssh(推荐) 可选 rsh

--mca btl self,tcp

使用以太网TCP/IP协议通信

--mca btl_tcp_if_include eth0

以太网通信时使用eth0接口,默认使用所有接口

--mca btl self,openib

Infiniband设备时,使用IB通信

--mca btl self,sm

单节点运行时使用共享内存,效率较高

二、Mvapich2的安装与使用 

2.1 Mvapich2简介

http://mvapich.cse.ohio-state.edu/overview/

Mvapich2是基于MPI-3.1标准实现

支持slurmJSMpmix协议

支持多个CPU平台,兼容性好

跨多个IB子网运作MPI作业

默认支持的HCA4更新到10

2.2 编译安装 

tar -xzf mvapich2-X.X.X.tgz 
 cd mvapich2-X.X.X
 ./configure --prefix=安装路径
 make
 make install

部分编译选项

含义

--with-device=ch3:mrail

--with-rdma=gen2

支持IB

--enable-cuda

支持GPU

--enable-multi-subnet

支持跨多个IB子网

--with-device=ch3:sock

支持tcp

--with-device=ch3:nemesis:ib,tcp

同时支持IBTCP/IP

自定义环境变量Modulefile文件 

#%Module1.0
setenv 			MVAPICH2_HOME	安装路径
prepend-path 		PATH			${MVAPICH2_HOME}/bin
prepend-path		LIBRARY_PATH		${MVAPICH2_HOME}/lib
prepend-path		LD_LIBRARY_PATH	${MVAPICH2_HOME}/lib
prepend-path		INCLUDE		${MVAPICH2_HOME}/include
prepend-path		MANPATH		${MVAPICH2_HOME}/share/man

常用命令

命令解释

mpicc

Mvapich2 C编译器

mpicxx 

mpic++

Mvapich2 C++编译器

mpif77

mpif90

Mvapich2 Fortran编译器

mpirun

mpirun_rsh

Mvapich2运行命令

在n0,n1两个结点上运行4个进程,默认SSH通信
$ mpirun -np 4 n0 n0 n1 n1 ./cpi
使用hostfile
$ mpirun -np 4 -hostfile hosts ./cpi
hostfile格式
# 允许使用注释 host1      # rank 0将放在host1 host2:2    # rank 1和2将放在host2 host3      # rank 3放在host3 host4:4    # ranks 4至7放在host4 # 若进程数大于8,剩作的进程将循环分配给这些结点。例如rank 8放在host1 # rand 9和rank 10放在host2
指定环境变量(需紧邻可执行文件)
$ mpirun -np 4 -hostfile hosts ENV1=value ENV2=value ./cpi
bunch绑定
$ mpirun_rsh -np 4 -hostfile hosts MV2_CPU_BINDING_POLICY=bunch ./a.out

scatter绑定
$ mpirun_rsh -np 4 -hostfile hosts MV2_CPU_BINDING_POLICY=scatter ./a.out

三、IntelMPI的安装与使用

3.1 intelmpi简介 

Intel® MPI LibraryIntel® oneAPI HPC Toolkit (HPC Kit)的一部分,该工具包包含多种工具,可帮助您构建、分析和部署HPC应用程序

新版本的IntelMPI是基于MPI-3.1标准实现

MPI产品官网:

https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/mpi-library.html

完整工具包:

https://software.intel.com/content/www/us/en/develop/tools/oneapi/hpc-toolkit/download.html

3.2 编译安装与使用

下载l_HPCKit_p_2023.0.0.25400_offline.sh
执行安装脚本:./l_HPCKit_p_2023.0.0.25400_offline.sh
使用独立包安装intelmpi
下载l_mpi_oneapi_p_2021.8.0.25329_offline.sh
执行安装脚本:./l_mpi_oneapi_p_2021.8.0.25329_offline.sh
加载IntelMPI环境变量可使用安装程序自带的脚本
source 安装目录/setvars.sh

常用命令

命令解释

mpicc

mpigcc

IntelMPI 基于GNU编译器的 C编译器

mpicxx 

mpigxx

IntelMPI 基于GNU编译器的 C++编译器

mpif77

mpif90

mpifc

IntelMPI 基于GNU编译器的  Frotran编译器

mpiicc

IntelMPI 基于Intel编译器的  C编译器 (推荐)

mpiicpc

IntelMPI 基于Intel编译器的 C++编译器 (推荐)

mpiifort

IntelMPI 基于Intel编译器的  Fortran编译器 (推荐)

mpirun

IntelMPI 运行命令

IntelMPI运行示例
mpirun -machinefile hostlist ./program
machinefile形式一:
node1
node1
node2
node2
machinefile形式二:
node1:2
node2:2

IntelMPI支持使用-env 的参数设置环境变量 



例如:
-env I_MPI_FABRICS "shm:ofi"
-env FI_PROVIDER mlx
-env I_MPI_OFI_EXPERIMENTAL 1
-env UCX_TLS "self,shm,rc_x"
-env I_MPI_SHM bdw_avx2     ## avx2 加速节点通信

;