# openmpi-5.0.6 安装指导书
**文档控制**
|**序号**|**修改人/验证人**|**修改内容**|**日期**|
|---|---|---|---|
|1|zhangjiannan|创建文档|2025\.2\.15|
|||||
|||||
|||||
# 一、关于本指导书
## 1\.1 指导书目的
针对OPENMPI的安装配置,为实施人员提供简明规范性指导。
## 1\.2 指导书适用对象
本指导书适用于涉及服务器交付的实施人员。
## 1\.3 指导书中的格式定义
本指导书代码块中内容为执行的shell命令及输出,例如:
```Bash
[bjuci@server01 ~]$ ls
Intel
```
## 1\.4 本指导书测试平台
|**处理器平台**|Intel\(R\) Xeon\(R\) Platinum 8468V|
|---|---|
|**操作系统版本**|Ubuntu 22\.04\.4 LTS Server版|
|**编译环境**|gcc、g\+\+、 \(Ubuntu 11\.4\.0\)、[Intel® oneAPI HPC Toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/hpc-toolkit.html)|
## 1\.5 所需软件官方下载地址
|openmpi5\.0\.6|https://www.open-mpi.org/software/ompi/|
|---|---|
|Intel oneAPI Base Toolkit|[https://software\.intel\.com/content/www/us/en/develop/tools/oneapi/base\-toolkit/download\.html](https://software.intel.com/content/www/us/en/develop/tools/oneapi/base-toolkit/download.html)|
|Intel oneAPI HPC Toolkit|[https://software\.intel\.com/content/www/us/en/develop/tools/oneapi/hpc\-toolkit/download\.html](https://software.intel.com/content/www/us/en/develop/tools/oneapi/hpc-toolkit/download.html)|
# 二、**OPENMPI介绍**
## 2\.1 **概念原理**
Open MPI 是一个开源的 MPI(Message Passing Interface)实现,广泛用于高性能计算(HPC)中的并行编程。它由多个组织和开发者共同维护,旨在提供一个高效、灵活且可扩展的 MPI 库。
## **2\.2 功能描述**
OpenMPI借助TCP/IP网络连接的多台计算机,以此分发数据从而提升高性能间的消息传递。该软件常和支持mpi应用的软件结合使用,实现应用软件的多客户端、多进程、多线程。
## 2\.3 主要特点
- **高性能**:Open MPI 针对多种网络和硬件进行了优化,支持 InfiniBand、TCP/IP 等多种通信协议。
- **跨平台**:支持 Linux、macOS、Windows 等多种操作系统。
- **灵活性**:允许用户根据需要选择不同的通信模块和运行时配置。
- **可扩展性**:适用于从小型集群到超大规模计算环境。
- **社区支持**:拥有活跃的开发者社区和丰富的文档资源。
## **2\.4 应用领域**
软件使用集中在高性能计算、集群、并行计算中,如超算、气象、智能制造、并行运算等场景。
协同软件:Python\+mpi、R\+mpi、GROMACS\+mpi、namd\+mpi等。
*注意:目前安装 *OPENMPI\-5\.0\.6 无须授权
# 三、GNU编译安装步骤OPENMPI\-5\.0\.6
## **3\.1 下载源码**
1、从官网上下载对应的安装包

上传安装包到指定目录(以/opt/bjuci为例),将软件包openmpi\-5\.0\.6\.tar\.gz上传到此目录。
```SQL
[root@uci01 /opt/bjuci]# tar -zxvf openmpi-5.0.6.tar.gz
[root@uci01 /opt/bjuci]# ls -trl
[root@uci01 /opt/bjuci]# cd openmpi-5.0.6
[root@uci01 /opt/bjuci]# ls -trl
```

## 3\.2 编译
```Plain Text
[root@uci01 /opt/bjuci/openmpi-5.0.6]# ./configure --prefix=/opt/inspur/openmpi-5.0.6-gnu CC=gcc CXX=g++ FC=gfortran F77=gfortran
[root@uci01 /opt/bjuci/openmpi-5.0.6]# make -j 8
[root@uci01 /opt/bjuci/openmpi-5.0.6]# make install
```
## **3\.3 环境变量配置**
安装完成后,配置环境变量。对于环境环境变量的配置可以有以下几种配置:
1)、将环境变量放在/etc/profile中,设置一个全局环境变量,系统下的任何用户都能使用
2)、可以放在当前用户的\.bashrc中,这样那个用户使用就自己设置
3)、放在一个公共的目录下,自己新建一个XXX\.sh文件,将环境变量内容加入到里面,调用的时候执行XXX\.sh即可。这个属于临时调用。
具体的环境变量内容如下:
注意:MPI\_HOME=/opt/bjuci/openmpi\-5\.0\.6\-gun,是执行\./configure \-\-prefix时配置的路径
```Bash
export MPI_HOME=/opt/bjuci/openmpi-5.0.6-gun
export PATH=${MPI_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${MPI_HOME}/lib:$LD_LIBRARY_PATH
export MANPATH=${MPI_HOME}/share/man:$MANPATH
```
\#设置完成后用以下命令验证是否生效
|$which mpirun<br>/opt/bjuci/openmpi\-5\.0\.6\-gun/bin/mpirun|
|---|
# 四、OneApi编译安装步骤OPENMPI\-5\.0\.6
**oneAPI 是英特尔(Intel)推出的一个统一的编程模型和开发工具集,旨在简化跨多种硬件架构(如 CPU、GPU、FPGA 和其他加速器)的应用程序开发。oneAPI 的目标是打破传统编程中针对特定硬件的限制,提供一种开放的、统一的编程方式,使开发者能够更高效地利用异构计算资源。
## 4\.1 下载
同3\.1部分。
## 4\.2 安装部署
```Plain Text
[root@uci01 /opt/bjuci/openmpi-5.0.6]# ./configure --prefix=/opt/inspur/openmpi-5.0.6-intel CC=icc CXX=icpc F77=ifort FC=ifort F90=ifort --disable-shared --enable-static --with-openib
[root@uci01 /opt/bjuci/openmpi-5.0.6]# make -j 8
[root@uci01 /opt/bjuci/openmpi-5.0.6]# make install
```
## **4\.3 环境变量配置**
安装完成后,配置环境变量。对于环境环境变量的配置可以有以下几种配置:
1)将环境变量放在/etc/profile中,设置一个全局环境变量,系统下的任何用户都能使用
2)可以放在当前用户的\.bashrc中,这样那个用户使用就自己设置
3)放在一个公共的目录下,自己新建一个XXX\.sh文件,将环境变量内容加入到里面,调用的时候执行XXX\.sh即可。这个属于临时调用。
具体的环境变量内容如下:
```Bash
export MPI_HOME=/opt/bjuci/openmpi-5.0.6-intel
export PATH=${MPI_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${MPI_HOME}/lib:$LD_LIBRARY_PATH
export MANPATH=${MPI_HOME}/share/man:$MANPATH
```
\#设置完成后用以下命令验证是否生效
```Bash
$which mpirun
```
# 五、**openmpi运行测试**
**5\.1 程序运行测试**
测试程序运行结果
```Bash
[root@uci01]$ mpirun -np 4 -hostfile hostfile hello
```
• \-np X:运行X个进程
•\-hostfile:指定计算节点
程序源码如下:
```C++
[root@mu01 test] #cat hello.c
[root@mu01 test] #mpicc -o hello hello.c #得到可执行程序hello
#include <mpi.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
MPI_Init(NULL, NULL);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name,&name_len);
printf("Hello World from processor %s, rank %d"
" out of %d processor\n",
processor_name,world_rank,world_size);
MPI_Finalize();
}
```