在科学计算、大数据分析和人工智能等领域,并行计算是处理大规模数据和复杂问题的核心技术,消息传递接口(MPI)作为一种标准化的并行编程库,允许多个进程在分布式内存系统上进行通信和协作,是高性能计算(HPC)环境中的基石,CentOS作为企业级Linux发行版,因其稳定性和可靠性,在服务器和HPC集群中被广泛采用,在CentOS系统上正确安装和配置MPI环境,是开展并行计算工作的第一步。

什么是MPI?
MPI并不是一个具体的软件,而是一个规范或标准,它定义了一套用于进程间通信的库函数API,包括点对点通信(如发送和接收)和集体通信(如广播、归约等),开发者可以基于这些API编写可移植的并行程序,最主流的MPI实现有两个:OpenMPI和MPICH,它们都遵循MPI标准,但在性能、特性和社区支持上略有差异,本文将以更为流行和功能丰富的OpenMPI为例,详细介绍其在CentOS系统上的安装过程。
安装前的准备
在开始安装之前,请确保您的CentOS系统已经准备就绪,这包括拥有一个具有sudo权限的用户账户,以及系统已连接到互联网,编译和安装MPI需要一些基础的开发工具。
您可以通过以下命令来安装这些必要的开发工具包,这个命令会一次性安装GCC编译器、make工具、kernel-devel等编译软件所需的绝大部分依赖。
sudo yum groupinstall -y "Development Tools"
对于CentOS 8或更高版本,您可能需要使用dnf替代yum:
sudo dnf groupinstall -y "Development Tools"
使用YUM/DNF仓库安装(推荐)
这是最简单、最快捷的安装方式,适合大多数用户,通过CentOS的官方软件仓库或EPEL(Extra Packages for Enterprise Linux)仓库,可以直接安装预编译好的OpenMPI包。
确保EPEL仓库已启用,EPEL提供了许多官方仓库中没有的高质量软件包。
# 对于CentOS 7 sudo yum install -y epel-release # 对于CentOS 8 sudo dnf install -y epel-release
启用EPEL后,您可以直接使用yum或dnf来安装OpenMPI,建议同时安装运行时库和开发包(devel),这样既可以运行MPI程序,也可以编译自己的MPI代码。
# 使用yum安装 sudo yum install -y openmpi openmpi-devel # 或使用dnf安装 sudo dnf install -y openmpi openmpi-devel
安装完成后,系统会将OpenMPI的头文件和库文件放置在标准路径下,为了让系统能够找到mpicc、mpirun等命令,您需要加载相应的环境模块,CentOS通常会将环境模块配置文件放在/etc/profile.d/目录下。
module load openmpi-x86_64
为了使这个设置在每次登录时自动生效,您可以将上述命令添加到您的shell配置文件中,例如~/.bashrc或~/.bash_profile。
echo "module load openmpi-x86_64" >> ~/.bashrc source ~/.bashrc
从源代码编译安装(适用于高级用户)
当您需要安装特定版本的OpenMPI,或者希望自定义安装路径和编译选项时,从源代码编译是最佳选择,这种方式提供了最大的灵活性。

下载源代码
访问OpenMPI的官方网站下载最新稳定版的源代码压缩包,下载openmpi-4.1.4版本:wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.gz
解压并进入目录
tar -xvzf openmpi-4.1.4.tar.gz cd openmpi-4.1.4
配置编译选项
使用./configure脚本来配置安装,一个常见的做法是将OpenMPI安装到/usr/local下的一个自定义目录,以便于管理和未来升级。./configure --prefix=/usr/local/openmpi-4.1.4
这个过程会检查您的系统环境,确保所有依赖都已满足。
编译和安装
配置成功后,执行make进行编译,然后使用make install将编译好的文件安装到指定的--prefix目录。make -j$(nproc) # -j$(nproc)会使用所有可用的CPU核心进行编译,加快速度 sudo make install
配置环境变量
从源代码安装后,需要手动配置环境变量,以便系统能找到MPI的执行文件和库文件,编辑您的~/.bashrc文件,添加以下内容:# OpenMPI Environment Variables export PATH=/usr/local/openmpi-4.1.4/bin:$PATH export LD_LIBRARY_PATH=/usr/local/openmpi-4.1.4/lib:$LD_LIBRARY_PATH
保存文件后,执行
source ~/.bashrc使配置立即生效。
验证安装
无论采用哪种安装方法,验证安装是否成功都是一个好习惯,最直接的方式是检查MPI编译器和运行器的版本。
mpirun --version mpicc --version
如果这两个命令都能正确输出版本信息,说明安装基本成功,我们可以编写一个经典的“Hello World”MPI程序来做一个完整的测试。
创建一个名为hello_mpi.c的文件,并写入以下C代码:

#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
MPI_Init(&argc, &argv);
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 processorsn",
processor_name, world_rank, world_size);
MPI_Finalize();
return 0;
} 使用OpenMPI的C编译器mpicc来编译它:
mpicc -o hello_mpi hello_mpi.c
使用mpirun来运行这个程序。-np标志指定了要启动的进程数量。
mpirun -np 4 ./hello_mpi
您应该会看到4行输出,每一行都来自一个不同的进程,并显示其排名和所在处理器名称,这证明您的MPI环境已经完全配置好,可以开始并行编程之旅了。
OpenMPI与MPICH的简单对比
| 特性 | OpenMPI | MPICH |
|---|---|---|
| 开发社区 | 由多个学术和商业机构组成的联盟 | 最初由Argonne国家实验室和MSU开发 |
| 功能特性 | 功能丰富,支持更多网络拓扑和高级特性 | 相对轻量,专注于核心MPI标准的实现和稳定性 |
| 兼容性 | 与MPICH在API层面高度兼容 | 与OpenMPI在API层面高度兼容 |
| 流行度 | 在学术界和HPC社区中非常流行 | 在某些商业和特定领域应用广泛 |
相关问答FAQs
我使用YUM安装了OpenMPI,但在终端输入mpicc时提示“command not found”,这是为什么?
解答: 这是因为您的Shell环境变量PATH中没有包含OpenMPI可执行文件的路径,通过YUM安装的OpenMPI通常使用环境模块系统来管理,您需要先加载对应的模块才能使用这些命令,请执行module load openmpi-x86_64,然后再尝试mpicc,为了让这个设置永久生效,请将module load openmpi-x86_64命令添加到您的~/.bashrc或~/.bash_profile文件中,然后重新登录或执行source ~/.bashrc。
我应该选择YUM安装还是从源代码编译安装MPI?
解答: 这取决于您的具体需求。
- 选择YUM安装:如果您是初学者,或者只需要一个稳定、标准的MPI环境来运行或开发常规的并行程序,YUM安装是最佳选择,它简单、快速,且能自动处理依赖关系,系统更新时也可以方便地升级MPI版本。
- 选择源代码编译安装:如果您是高级用户,有以下几种情况可能需要编译安装:1) 需要安装一个CentOS仓库中没有提供的特定旧版本或最新预发布版本的MPI;2) 需要自定义安装路径,以便在同一台机器上管理多个不同版本的MPI;3) 需要启用或禁用某些特定的编译选项(针对特定硬件进行优化),编译安装提供了最大的灵活性,但过程更复杂,且需要手动管理依赖和环境变量。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复