初识MPI - 关于各种MPI的关系

2025 年 5 月 15 日 星期四
/
7

初识MPI - 关于各种MPI的关系

个人接触的最多其实是CUDA,但因为最近工作需要用到MPI,又重新对MPI有了新的认识。 本篇内容简单介绍MPI,并阐述mpicc、mpich等各种mpi的关系

什么MPI

MPI 实际上是 计算编程模型 + 通信语义接口规范

MPI 是一个并行编程标准,它既定义了模型,也定义了协议;并由多个实现完成实际运行支持。

关于 mpi 与 openmp 与 cuda

cuda就不用多说了,深度学习离不开cuda;gpt3.5问世之后 nvidia 市价更是狂涨
一开始总是分不清openmpopenmpi 的关系,有一段时间以为是同一个东西, 这里简单两个表格区别三者

架构

并行模型面向架构编程范式粒度使用方式
OpenMP多核 CPU共享内存并行中等粒度在单节点上用线程并行
MPI多节点集群分布式内存并行大粒度多进程 + 消息传递
CUDAGPU大规模 SIMD 并行细粒度在 GPU 上运行线程块

特性

特性MPIOpenMPCUDA
并行模型分布式 + 消息传递共享内存 + 多线程GPU 并行 + SIMT
是否开放标准✅ 是(MPI Forum)✅ 是(OpenMP ARB)❌ 否(NVIDIA 私有)
是否定义接口规范✅ 是(API + 语义)✅ 是(指令 + API)✅ 是(NVIDIA 定义的 API 规范)
是否有官方实现❌(由第三方如 MPICH 提供)❌(由编译器支持)✅ 有(NVIDIA 提供完整工具链)
是否跨平台✅(理论)✅(只要编译器支持)❌(只能跑在 NVIDIA GPU 上)

MPI实现

常见的openmpi mpich mpi-intel 就是MPI的实现
一般使用 which mpiccmpicc --show 检查真实路径与底层调用的编译器

实现名称开源/商业特色与用途
MPICH开源标准参考实现之一,稳定,兼容性好,适合教学与通用集群环境
Open MPI开源可扩展性强,模块化设计,社区活跃,支持多种平台和网络
Intel MPI商业(有免费版)对 Intel 编译器和硬件优化极好,常用于 HPC 与商业计算
MVAPICH2开源基于 MPICH,专为 InfiniBand 和高性能互连优化
Cray MPI商业Cray 超算平台专用,深度优化,通常预装
IBM Spectrum MPI商业IBM 平台专用,基于 Open MPI,适配 Power 架构
Microsoft MPI (MS-MPI)开源Windows 平台的主要 MPI 实现,适合开发和教育场景

编译器包装器

还有一些 如 mpicc mpif90 等,是MPI实现的编译器包装器 | 编译器包装器: 自动进行编译和链接过程、并进行一定的优化,以提高开发效率

MPI 实现C 编译器包装器C++ 编译器包装器Fortran 包装器(77)Fortran 包装器(90/95)
MPICHmpiccmpicxxmpif77mpif90
Open MPImpiccmpic++mpif77mpif90
Intel MPImpiiccmpiicpcmpiifortmpiifort
MVAPICH2mpiccmpicxxmpif77mpif90
Cray MPIccCCftnftn
IBM Spectrummpixlcmpixlcxxmpixlf77mpixlf90
MS-MPImpicc.exe无官方包装器

gcc main.c \
  -I/usr/local/mpi/include \
  -L/usr/local/mpi/lib \
  -lmpi \
  -o myprog

# 简化
mpicc main.c -o myprog

🧩 用 Python 类比

MPI 生态Python 类比说明
MPINumPy API 或 Python 标准规范标准定义了怎么通信,就像 NumPy 定义了数组操作接口
MPICHNumPy 的 C 实现 / python解释器(PyPy、CPython)提供标准的实现,底层做了优化
MPICCpython setup.py build_ext 中调用的 C 编译器包装器mpicc 是 gcc 的包装器,自动链接 MPI 库,避免你手动加 -I-L

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...