
# 安装和使用社区OpenMPI
#### 操作场景
本节指导用户在BMS上安装和使用社区OpenMPI（以4.0.2版本为例）。
对于集群中的每台BMS，都需要执行该操作。
#### 前提条件
已配置BMS集群间互相免密登录。
#### 操作步骤
1. 安装OpenMPI。 
   1. 下载社区OpenMPI，版本号为"openmpi-4.0.2.tar.bz2"。 下载地址：**https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.2.tar.bz2**
      
   
   2. 将下载的OpenMPI压缩包拷贝至BMS内（建议在"/home/rhel"目录下）。
   
   3. 执行以下命令，解压软件包。 **# tar -xzvf openmpi-4.0.2.tar.bz2**
      **# cd openmpi-4.0.2**
      
   
   4. 执行以下命令，安装所需要的依赖包，安装之前请确保BMS能与外网连通。 **# yum install binutils-devel.x86_64 gcc-c++ autoconf automake libtool**
      图1安装binutils-devel.x86_64等依赖包成功   
      ![](https://support.huaweicloud.com/usermanual-hpc/zh-cn_image_0231686241.png "点击放大")
      
      
   
   5. 执行以下命令，安装编译OpenMPI。 **# ./openmpi-4.0.2/configure --prefix=/opt/openmpi-402--enable-mpirun-prefix-by-default --enable-mpi1-compatibility --with-ucx=/opt/ucx160**
      **# make -j 128 \&\& make install**
      图2OpenMPI安装成功   
      ![](https://support.huaweicloud.com/usermanual-hpc/zh-cn_image_0231686242.png "点击放大") 
   
   
   
   
   

2. 配置MPI环境变量。 
   1. 普通用户下，在"\~/.bashrc"中添加如下环境变量： **export PATH=$PATH:/opt/openmpi-310/bin**
      **export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/openmpi-310/lib**
      
   
   2. 执行以下命令，导入配置的MPI环境变量。 **$ source \~/.bashrc**
      
   
   3. 执行以下命令，查看MPI环境变量是否正常。 **$ which mpirun**
      图3环境变量正常   
      ![](https://support.huaweicloud.com/usermanual-hpc/zh-cn_image_0231686244.png "点击放大")
      回显如[图3]所示表示环境变量正常。
      
   
   
   
   
3. 执行以下命令，在单个BMS上运行社区OpenMPI。 
   1. 执行以下命令，生成可执行文件。 **$ cd** \~
      **$ vi hello.c**
      编辑内容如下：
      ```
      #include<mpi.h>    
      #include<stdio.h>    
      int main(int argc, char** argv){ 
             //Initialize the MPI environment 
             MPI_Init(NULL, NULL); 
             //Get the number of processes 
             int world_size; 
             MPI_Comm_size(MPI_COMM_WORLD, &world_size); 
             //Get the rank of the process 
             int world_rank; 
             MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 
             //Get the name of the processor 
             char processor_name[MPI_MAX_PROCESSOR_NAME]; 
             int name_len; 
             MPI_Get_processor_name(processor_name, &name_len); 
             //Print off a hello world message. 
             printf("Hello world from processor %s, rank %d"" out of %d processors\n",processor_name, world_rank, world_size); 
             //Finalize the MPI environment. 
             MPI_Finalize(); 
         }
      ```
      **$ mpicc hello.c -o hello**
      
      ![](https://support.huaweicloud.com/usermanual-hpc/public_sys-resources/notice_3.0-zh-cn.png)
      不同版本的MPI运行的hello文件是不同的，都需要使用命令**mpicc hello.c -o hello**对hello.c文件重新编译。
      
   
   2. 执行以下命令，在单个BMS上运行社区OpenMPI。 **$ mpirun -np 2 /home/rhel/hello**
      图4社区OpenMPI运行成功   
      ![](https://support.huaweicloud.com/usermanual-hpc/zh-cn_image_0231686247.png "点击放大")
      回显如[图4]所示，表示单个BMS上运行社区OpenMPI成功。
      
   
   
   
   
 
