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

本页目录

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

📅 创建时间:2026-07-20 🏷️ 标签:#并行计算 #计算机体系结构 #CPU #GPU #HPC 📚 前置知识:基本编程经验;了解 C/C++ 数组、指针和线程会更顺畅 📚 相关知识:[[/02-systems-and-performance/02-computer-architecture-and-hardware/00-hardware-overview]] [[/01-cpp/06-concurrency/04-concurrency]] [[/04-ai/01-llm-engineering/09-transformer-training-computation]]


文档目标 ​

并行计算不是“多开几个线程”,而是一套横跨算法、编程模型、体系结构和硬件系统的完整方法论。

这套专题围绕一个核心问题展开:

当单个计算单元已经无法继续明显提速时,怎样让更多计算单元协同工作,并让数据及时到达它们手中?

学完后你应该能够:

  • 区分并发、并行、分布式计算与异构计算
  • 理解 CPU 多核、SIMD、GPU SIMT 和集群的差异
  • 判断任务是否可以拆分,以及理论加速上限
  • 解释 Cache、NUMA、显存和网络为什么决定真实性能
  • 使用 OpenMP、CUDA 和 MPI 描述不同层级的并行
  • 用 Speedup、Efficiency、Roofline 等模型分析瓶颈
  • 为 AI、CAE、图像处理和科学计算选择合理架构

一张图理解整个专题 ​

text
应用问题
│
├─ 能不能拆?                    → 任务依赖、数据依赖、Amdahl 定律
│
├─ 在一个核心里怎样并行?        → 指令流水线、乱序执行、SIMD
│
├─ 在一颗 CPU 里怎样并行?       → 多核、线程、Cache 一致性、NUMA
│
├─ 在一张 GPU 里怎样并行?       → SIMT、Warp、SM、显存层次
│
├─ CPU 和 GPU 怎样协作?         → 异构计算、数据传输、任务流水线
│
├─ 一台机器不够怎么办?          → MPI、集合通信、RDMA、多机多卡
│
└─ 为什么没有变快?              → 测量、Roofline、负载均衡、通信开销
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

并行系统的性能可以粗略写成:

text
总时间 = 有效计算 + 数据移动 + 同步等待 + 调度开销
1

增加核心只会减少其中一部分。很多程序最终受限于数据移动和等待,而不是算术运算。


课程路线 ​

阶段文档核心问题
建立直觉01 基础概念与性能模型为什么并行、最多能快多少?
硬件基础02 处理器体系结构指令在处理器里怎样执行?
CPU 并行03 多核、SIMD 与 NUMACPU 怎样同时完成不同工作?
内存系统04 Cache、一致性与数据局部性为什么访存经常比计算更贵?
GPU 架构05 GPU 与 SIMTGPU 为什么适合海量规则任务?
GPU 编程06 CUDA 执行与内存模型Thread、Block、Grid 怎样映射硬件?
算法设计07 并行模式与算法Reduction、Scan、Stencil 怎样设计?
单机异构08 CPU-GPU 协同任务和数据应该放在哪里?
集群并行09 MPI、网络与集合通信多台机器怎样交换数据?
工程优化10 性能分析与 Roofline瓶颈究竟在哪里?
真实应用11 AI、CAE 与科学计算不同领域怎样组合这些技术?
实践路线12 项目与实验怎样从零建立并行工程能力?

推荐按编号顺序阅读。已经掌握计算机组成原理的读者,可以从 03 开始;已有 CUDA 经验的读者,也不建议跳过 01、04 和 10。


四种容易混淆的概念 ​

并发 ​

多个任务在一段时间内都获得执行机会,不保证同一时刻真正执行。单核操作系统也能并发。

并行 ​

多个计算单元在同一时刻执行多个操作。多核 CPU、GPU 和多机集群都属于并行系统。

分布式计算 ​

计算单元拥有独立内存,通过网络通信。重点是节点自治、通信和故障处理。

异构计算 ​

系统中存在不同特性的处理器,例如 CPU、GPU、NPU 和 FPGA,由它们分别处理擅长的任务。


贯穿课程的三个案例 ​

案例一:向量相加 ​

cpp
for (int i = 0; i < n; ++i) {
    c[i] = a[i] + b[i];
}
1
2
3

循环之间互不依赖,适合 SIMD、多线程和 GPU,但算术强度低,通常受内存带宽限制。

案例二:矩阵乘法 ​

text
C[i,j] = Σ A[i,k] × B[k,j]
1

计算量大、数据可以复用,是 Cache 分块、向量化和 GPU Tensor Core 的经典场景。

案例三:大模型训练 ​

模型训练同时涉及:

  • GPU 内部的张量并行计算
  • 单机多卡的高速互联
  • 多机之间的梯度同步
  • CPU 数据预处理和 I/O
  • 显存容量、通信与计算重叠

它是现代并行计算各层技术的综合实例。


学习原则 ​

  1. 先判断依赖,再决定如何拆分。
  2. 先测量瓶颈,再进行优化。
  3. 把数据移动视为一级成本。
  4. 同时考虑延迟、吞吐、容量和能耗。
  5. 优先使用成熟库,理解底层是为了正确选型和排障。

历史原文定位 ​

本页保存课程合并前的并行全景。

当前权威版本补充了依赖、模式、正确性和测量流程。

历史页面用于:

  • 恢复旧链接;
  • 查找原始例子;
  • 对比术语;
  • 验证课程迁移;
  • 保留早期学习顺序。

原文中的核心问题 ​

text
Can work be decomposed?
Where is data?
What must synchronize?
What is the overhead?
How is correctness verified?
1
2
3
4
5

这些问题比具体 API 更稳定。

Work 与关键路径 ​

Work 是全部任务总量。 关键路径决定无限资源下的最低时间。

并行度不足时,换更多核心或 GPU 无法解决。

串行比例 ​

Amdahl 提醒固定问题的串行上限。

真实系统还包含通信、调度、内存和负载不均。

扩展曲线必须由测量获得。

粒度 ​

细任务提高调度与同步比例。 粗任务减少可并行度并产生尾部。

线程、GPU 和 MPI 都有各自固定开销。

数据位置 ​

text
register/cache
  -> local memory
  -> remote NUMA
  -> device memory
  -> network peer
  -> storage
1
2
3
4
5
6

计算越远离数据,搬运成本越重要。

CPU 路径 ​

CPU 适合:

  • 分支;
  • 任务;
  • 控制;
  • 小规模;
  • 低延迟;
  • 不规则访问。

SIMD 和多线程可以组合。

GPU 路径 ​

GPU 适合:

  • 规则数据并行;
  • 大批量;
  • 高吞吐;
  • 可隐藏延迟;
  • 高带宽访问。

传输与启动必须计入。

MPI 路径 ​

MPI 适合跨进程和多节点。

需要设计:

  • 分区;
  • 消息;
  • Collective;
  • Halo;
  • 重叠;
  • Checkpoint;
  • 故障。

Map ​

Map 是独立元素变换。 它最容易映射到 SIMD、线程和 GPU。

Reduce ​

Reduce 合并局部结果。

树形归约减少关键路径。 浮点顺序需要容差。

Scan ​

Scan 生成前缀。 它通过多个并行阶段处理依赖。

Stencil ​

Stencil 访问邻域。

Cache Blocking、Shared Memory 和 Halo 是常见重点。

Pipeline ​

Pipeline 让不同阶段并发。

最慢阶段限制吞吐。 队列要有界。

Task Graph ​

Task Graph 适合不规则依赖。

运行时管理 Ready Task、偷取和完成事件。

数据竞争 ​

共享写缺少同步会导致错误。

锁和原子不是越少越好,协议正确是前提。

False Sharing ​

不同字段共享 Cache Line 也可能争用。

使用线程局部数据和对齐,并通过 Profile 验证。

浮点差异 ​

并行顺序变化会改变舍入。

领域容差、残差和守恒量用于验证。

强扩展 ​

固定总规模,增加资源。

效率下降通常来自串行、通信和不均衡。

弱扩展 ​

每资源规模近似固定。

全局通信和 I/O 仍会增长。

历史性能数字 ​

旧数字必须带:

  • 硬件;
  • 编译器;
  • 输入;
  • 资源数;
  • 命令;
  • 正确性。

否则只能作为历史现象。

当前课程补充 ​

当前文章增加:

  • Work/Span;
  • 常见模式;
  • CPU/GPU/MPI 映射;
  • 正确性护栏;
  • 强弱扩展;
  • Profile 流程;
  • 完成标准。

阅读验收 ​

读者应能:

  • 解释并行上限;
  • 画数据分解;
  • 找同步点;
  • 选择执行层次;
  • 估算通信;
  • 设计基准;
  • 验证结果;
  • 区分历史与当前结论。

核心总结 ​

  • 并行性能由算法、硬件、内存和通信共同决定。
  • CPU 擅长复杂控制与低延迟,GPU 擅长规则、高吞吐的数据并行。
  • 从单核到集群,通信范围越来越大,代价也越来越高。
  • 并行优化的本质,是让计算单元持续获得足够的数据和可执行工作。

下一篇:[[01-parallel-foundations]]

最后更新于:

Pager
上一篇1. 并行计算:从 SIMD 到 MPI / Parallel Computing from SIMD to MPI
下一篇3. 并行计算基础:任务分解、加速比与可扩展性 / Parallel Computing Fundamentals: Decomposition, Speedup, and Scalability

持续记录,持续成长

Copyright © Tidenflow