Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 系统与高性能 / Systems & Performance

计算系统 / Computing Systems

1. 计算系统:计算机如何执行与加速程序

2. 从 C++ 源码到 CPU 执行

3. CPU 流水线、乱序执行与分支预测

4. Cache、一致性、伪共享与 NUMA

5. GPU、SM、Warp 与显存

6. 计算执行模型:程序怎样映射到机器

7. SIMD 与编译器向量化

8. C++ 多线程与 OpenMP

9. CUDA 平台与编程模型

10. CUDA Kernel、内存与性能

11. CPU-GPU 异构流水线

12. MPI 与分布式并行

13. 并行算法模式

14. 性能模型与工具

15. 递进学习项目:从单线程到集群

历史完整正文 / Original Deep Dives

1. 历史完整正文:统一前文章逐篇保留

原体系结构与硬件 / Original Architecture

1. 硬件编程与高性能计算:一张可走通的学习地图 / A Practical Learning Map for Hardware Programming and HPC

2. 计算机体系结构:CPU、内存与 GPU / Computer Architecture: CPUs, Memory, and GPUs

3. 计算机架构基础——为什么 GPU 比 CPU 更快 / Computer Architecture Fundamentals: Why GPUs Outperform CPUs

4. 并行计算理论——30 天训练能优化到多快? / Parallel Computing Theory and the Limits of Training Acceleration

5. GPU 架构深入——上万个核心如何分工协作 / GPU Architecture and Massive Parallel Execution

6. CUDA 编程模型——把矩阵乘法映射到 GPU / The CUDA Programming Model for Mapping Matrix Multiplication to GPUs

7. CUDA 内存管理——百亿参数如何装进显存 / CUDA Memory Management for Large Models

8. CUDA 性能优化——从 30 天缩短到 10 天 / CUDA Performance Optimization

9. CPU 并行编程——OpenMP 与 SIMD 向量化 / CPU Parallel Programming with OpenMP and SIMD

10. HPC 集群与 MPI——多节点分布式训练 / HPC Clusters and MPI for Distributed Training

11. 异构计算——CPU 与 GPU 如何协同工作 / Heterogeneous Computing with CPUs and GPUs

12. 深度学习训练优化实战——从 30 天到 3 天 / Deep Learning Training Optimization from Thirty Days to Three

13. 性能分析工具——找到真正的瓶颈 / Performance Analysis Tools for Finding Real Bottlenecks

14. NPU 全景——昇腾/寒武纪/TPU/苹果生态 / The NPU Landscape: Ascend, Cambricon, TPU, and Apple

15. 未来趋势——2030 年的计算机会是什么形态 / Future Computing Trends Toward 2030

16. 硬件与高性能计算:从“程序为什么慢”开始 / Hardware and HPC Starting from Why Programs Are Slow

原并行计算 / Original Parallel Computing

1. 并行计算:从 SIMD 到 MPI / Parallel Computing from SIMD to MPI

2. 并行计算全景:从晶体管、CPU、GPU 到计算集群 / Parallel Computing from Transistors, CPUs, and GPUs to Clusters

3. 并行计算基础:任务分解、加速比与可扩展性 / Parallel Computing Fundamentals: Decomposition, Speedup, and Scalability

4. 处理器体系结构:从指令流水线到多核芯片 / Processor Architecture from Instruction Pipelines to Multicore Chips

5. CPU 并行:多线程、SIMD、Cache 一致性与 NUMA / CPU Parallelism with Threads, SIMD, Cache Coherence, and NUMA

6. 内存层次:Cache、带宽、局部性与一致性 / Memory Hierarchies, Bandwidth, Locality, and Coherence

7. GPU 体系结构:SIMT、Warp、SM 与吞吐优先设计 / GPU Architecture with SIMT, Warps, and Streaming Multiprocessors

8. CUDA 编程模型:Thread、Block、Grid 与内存协作 / CUDA Threads, Blocks, Grids, and Cooperative Memory Access

9. 并行算法模式:Map、Reduce、Scan、Stencil 与任务图 / Parallel Patterns: Map, Reduce, Scan, Stencil, and Task Graphs

10. 异构计算:CPU、GPU、NPU 如何协同工作 / Heterogeneous Computing with CPUs, GPUs, and NPUs

11. 分布式并行:MPI、集合通信、RDMA 与多机多卡 / Distributed Parallelism with MPI, Collective Communication, and RDMA

12. 性能工程:测量、Roofline、瓶颈定位与优化闭环 / Performance Engineering with Measurement, Roofline, and Bottleneck Analysis

13. 并行计算实战:AI、CAE、图像与科学计算 / Parallel Computing for AI, CAE, Imaging, and Scientific Computing

14. 并行计算实践路线:从单核优化到多机多卡 / A Parallel Computing Project Path from Single-Core to Multi-Node GPUs

本页目录

分布式并行:MPI、集合通信、RDMA 与多机多卡 / Distributed Parallelism with MPI, Collective Communication, and RDMA ​

📅 创建时间:2026-07-20 🏷️ 标签:#MPI #分布式计算 #集合通信 #RDMA #多机多卡 📚 前置知识:[[08-heterogeneous-computing]] 📚 相关知识:[[/02-systems-and-performance/02-computer-architecture-and-hardware/08-mpi-cluster-hpc]] [[/04-ai/03-ai-infrastructure/clusters/07-nccl-cluster-networking]]


1. 从共享内存到消息传递 ​

一台服务器中的线程可以访问共享内存。不同服务器拥有独立地址空间,只能通过网络交换消息。

text
节点 A                         节点 B
CPU + 内存 A   ← 网络消息 →    CPU + 内存 B
GPU 0/1                       GPU 0/1
1
2
3

程序必须明确:谁拥有数据、何时发送、发给谁、接收后怎样继续计算。


2. MPI 的基本概念 ​

MPI 是高性能计算中常用的消息传递标准。每个进程拥有 Rank:

text
Rank 0  Rank 1  Rank 2  Rank 3
1

点对点通信:

cpp
MPI_Send(..., destination, tag, communicator);
MPI_Recv(..., source, tag, communicator, ...);
1
2

需要避免双方都等待接收、消息标签不匹配和缓冲区生命周期错误。


3. 集合通信 ​

Broadcast ​

一个 Rank 把数据发给所有 Rank。

Reduce ​

各 Rank 的数据进行求和、最大值等归约,结果送到一个 Rank。

AllReduce ​

所有 Rank 提供数据,并让所有 Rank 获得归约结果。分布式训练的梯度同步经常使用它。

AllGather ​

每个 Rank 收集所有 Rank 的数据分片。

AllToAll ​

每个 Rank 向所有其他 Rank 发送不同数据,常见于专家并行和数据重分布。

成熟通信库会根据消息大小和拓扑选择 Ring、Tree 等算法。


4. 延迟与带宽模型 ​

一次消息传输可以粗略表示为:

text
通信时间 = 启动延迟 α + 数据量 / 带宽
1

大量小消息主要受延迟影响,大消息主要受带宽影响。因此常见优化包括:

  • 合并小消息
  • 减少同步次数
  • 使用非阻塞通信
  • 在计算期间提前发送边界数据
  • 让通信模式匹配网络拓扑

5. Halo Exchange ​

网格被划分到不同节点后,每个节点需要邻居的边界数据:

text
节点 A 区域 | Halo | 节点 B 区域
1

典型步骤:

  1. 更新本地内部网格。
  2. 异步发送边界。
  3. 同时计算不依赖远程数据的区域。
  4. 等待边界到达。
  5. 计算边界区域。

这是通信与计算重叠的经典案例。


6. RDMA 与高速互联 ​

传统网络通信需要多次内核和内存拷贝。RDMA 允许网卡直接访问已注册内存,减少 CPU 参与和拷贝。

集群常见互联层次:

text
GPU 内部互联 / NVLink
节点内 PCIe / NVSwitch
节点间 InfiniBand / RoCE / Ethernet
1
2
3

通信库需要理解拓扑,避免本可走高速链路的数据绕行低速路径。


7. 多 GPU 并行策略 ​

数据并行 ​

每张 GPU 保留完整模型,处理不同数据,最后同步梯度。简单,但模型必须能放入单卡。

张量并行 ​

把单个矩阵或层切到多张 GPU,需要频繁集合通信。

流水线并行 ​

不同 GPU 保存不同层,微批次在阶段间流动,存在流水线气泡。

专家并行 ​

不同专家分布在不同设备,Token 通过 AllToAll 路由,负载均衡十分重要。

现实中的大型训练常组合多种并行方式。


8. 分布式系统特有问题 ​

  • 某个 Rank 变慢会拖慢全部同步参与者
  • 网络拥塞造成性能抖动
  • 节点或 GPU 故障导致任务中止
  • 日志分散,定位问题困难
  • 不同节点环境不一致
  • Checkpoint 规模大、写入慢

高性能集群不仅是算法问题,也依赖调度、监控、存储和运维能力。


历史分布式补充 ​

本页保留课程合并前的分布式并行说明。

当前版本补充消息协议、Buffer 生命周期、拓扑、I/O 和故障恢复。

Rank 与 Communicator ​

Rank 是 Communicator 内的进程编号。

Communicator 隔离通信上下文和参与集合。

点对点 ​

消息匹配使用 Source、Destination、Tag 和 Communicator。

Tag 应有稳定协议。

Blocking ​

Blocking 不一定表示远端已经处理。

理解具体调用的完成条件。

Nonblocking ​

Nonblocking 启动操作后返回。

完成前 Buffer 和 Request 必须保持有效。

Collective ​

Broadcast、Reduce、Allreduce、Gather、Scatter 和 Alltoall 是全体协议。

顺序与参数必须一致。

Allreduce ​

用于梯度、残差和全局统计。

受消息、Rank、拓扑和最慢参与者影响。

域分解 ​

分区考虑:

  • 工作;
  • 内存;
  • 边界;
  • 通信;
  • 局部性;
  • 迁移。

Halo ​

Ghost 数据保存远端边界副本。

先计算内部,再交换边界可帮助重叠。

Progress ​

Nonblocking API 不保证自动进展。

MPI 实现、网络和线程模式影响通信推进。

拓扑 ​

节点、Socket、NUMA、GPU 和 NIC 共同决定路径。

进程映射需要拓扑感知。

小消息 ​

受延迟、协议和软件开销限制。

合并消息可减少次数,但增加等待。

大消息 ​

受带宽、Buffer 和拥塞限制。

分块有助于流水,但增加请求管理。

Straggler ​

同步阶段等待最慢 Rank。

分析每 Rank 时间和工作量,不只看平均。

分布式 I/O ​

大量小文件会压力元数据服务。

Collective I/O、Aggregator 和分块格式是候选方案。

Checkpoint ​

Checkpoint 需要一致性、完整性、版本和恢复验证。

写完不等于能恢复。

故障 ​

处理节点、网络、存储、OOM、取消和部分输出。

重试要与幂等协议结合。

混合并行 ​

MPI、OpenMP、SIMD 和 GPU 可以分层组合。

避免线程和进程过度订阅。

强扩展 ​

固定问题,观察时间、效率和通信。

弱扩展 ​

每资源工作近似固定,观察全局成本增长。

Profile ​

记录:

  • Rank 时间;
  • 消息;
  • Collective;
  • 等待;
  • 映射;
  • I/O;
  • 网络;
  • 正确性。

历史版本边界 ​

MPI 实现、网络硬件和集合算法持续变化。

旧延迟与带宽数字只适用于原环境。

当前课程映射 ​

当前文章新增:

  • Communicator;
  • Tag 协议;
  • Nonblocking 生命周期;
  • 拓扑;
  • I/O;
  • Checkpoint;
  • 故障;
  • 测量和完成标准。

阅读完成标准 ​

应能:

  • 设计分区;
  • 匹配消息;
  • 使用 Collective;
  • 管理 Buffer;
  • 分析 Halo;
  • 找 Straggler;
  • 设计恢复;
  • 限定历史结果。

归档复现记录 ​

  • MPI 实现;
  • 版本;
  • 节点;
  • CPU/GPU;
  • 网络;
  • Rank 映射;
  • 线程级别;
  • 输入与分区;
  • 消息统计;
  • Collective;
  • I/O;
  • 原始 Trace;
  • 正确性;
  • 当前差异。

核心总结 ​

  • 分布式并行使用消息而不是共享变量协作。
  • 通信成本由启动延迟、带宽、数据量和拓扑共同决定。
  • 集合通信是多机 AI 与 HPC 的关键基础设施。
  • 应尽量重叠通信和计算,并减少全局同步。
  • 扩展性能最终常被最慢节点和网络限制。

下一篇:[[10-performance-engineering]]

最后更新于:

Pager
上一篇10. 异构计算:CPU、GPU、NPU 如何协同工作 / Heterogeneous Computing with CPUs, GPUs, and NPUs
下一篇12. 性能工程:测量、Roofline、瓶颈定位与优化闭环 / Performance Engineering with Measurement, Roofline, and Bottleneck Analysis

持续记录,持续成长

Copyright © Tidenflow