一、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标准实现
支持slurm和JSM的pmix协议
支持多个CPU平台,兼容性好
跨多个IB子网运作MPI作业
默认支持的HCA从4更新到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 | 同时支持IB和TCP/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 Library是Intel® 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 加速节点通信