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

本页目录

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

📅 创建时间:2026-07-20 🏷️ 标签:#学习路线 #并行项目 #CUDA实践 #MPI实践 📚 前置知识:[[11-application-cases]]


1. 学习目标 ​

并行计算不能只靠阅读。建议为每一层建立“串行基线、并行版本、性能证据和正确性测试”。

最终应该能够独立完成:

  • 设计可重复的 Benchmark
  • 使用多线程和 SIMD 优化 CPU 程序
  • 编写并分析 CUDA Kernel
  • 用 MPI 把问题扩展到多个进程
  • 解释性能没有线性扩展的原因
  • 输出包含环境、数据和结论的性能报告

2. 实验一:内存访问与 Cache ​

内容 ​

  • 比较连续访问、跨步访问和随机访问
  • 比较行优先与列优先矩阵遍历
  • 改变数组规模,观察超过不同 Cache 容量后的变化

记录 ​

  • 每秒处理字节数
  • Cache Miss
  • 不同步长的耗时曲线

目标:建立“计算量相同,数据访问不同,性能可以差很多”的直觉。


3. 实验二:CPU 多线程归约 ​

实现数组求和:

  1. 串行版本
  2. 每次加法使用全局锁的错误并行版本
  3. 每线程局部求和、最后归约
  4. OpenMP Reduction

比较 1、2、4、8、16 个线程的加速比和效率,并解释锁竞争与内存带宽上限。


4. 实验三:SIMD 与编译器向量化 ​

  • 编译同一循环的 Debug 和 Release 版本
  • 查看编译器向量化报告
  • 添加循环依赖让向量化失败
  • 调整数据对齐和数据布局
  • 比较标量、自动向量化和手写 Intrinsics

重点不是追求某个数字,而是能用报告证明编译器做了什么。


5. 实验四:CUDA 向量与矩阵运算 ​

第一阶段 ​

  • Vector Add
  • 边界判断
  • CUDA 错误检查
  • 使用 Event 测量 Kernel 时间

第二阶段 ​

  • 朴素矩阵乘法
  • Shared Memory 分块
  • 不同 Block 尺寸
  • 与 cuBLAS 比较

目标:理解自写 Kernel 与成熟库之间的差距来自哪些优化。


6. 实验五:并行算法原语 ​

依次实现:

  • Map
  • Reduce
  • Histogram
  • Prefix Scan
  • Stream Compaction

重点观察同步范围、原子操作、共享内存和多 Kernel 分阶段执行。


7. 实验六:CPU-GPU 流水线 ​

构建批量图像处理程序:

text
CPU 读取 → CPU 解码 → GPU 滤波 → CPU 编码
1

逐步加入:

  • Pinned Memory
  • 异步拷贝
  • 两个或多个 Stream
  • 双缓冲
  • 批处理

用时间线证明计算与传输是否真正重叠。


8. 实验七:MPI 网格计算 ​

实现二维热传导或简单 Jacobi 迭代:

  • 按行划分网格
  • 相邻 Rank 交换边界
  • 从阻塞通信改为非阻塞通信
  • 重叠内部区域计算与 Halo Exchange
  • 测试强扩展和弱扩展

记录每个 Rank 的计算、通信和等待时间。


9. 综合项目建议 ​

项目 A:异构图像处理引擎 ​

关键词:线程池、SIMD、CUDA、流水线、性能面板。

项目 B:并行有限差分求解器 ​

关键词:Stencil、OpenMP、CUDA、MPI、Halo Exchange、VTK 输出。

项目 C:小型分布式训练实验 ​

关键词:PyTorch DDP、NCCL、数据并行、梯度同步、Profiler。

项目 D:并行性能教学可视化 ​

关键词:Amdahl、Roofline、Cache、Warp 发散、通信拓扑。


10. 每个项目的交付物 ​

text
README
├─ 问题定义
├─ 硬件与软件环境
├─ 串行基线
├─ 并行设计
├─ 正确性验证
├─ Benchmark 方法
├─ 性能图表
├─ 瓶颈分析
└─ 已知限制与下一步
1
2
3
4
5
6
7
8
9
10

没有正确性测试的加速结果没有意义,没有测量方法的性能数字也无法复现。


11. 推荐工具链 ​

层级工具
C++ 构建CMake、GCC/Clang/MSVC
CPU 并行std::thread、OpenMP、oneTBB
CPU 分析perf、VTune、火焰图
GPU 编程CUDA、cuBLAS、Thrust
GPU 分析Nsight Systems、Nsight Compute
分布式Open MPI / MPICH、NCCL
数值验证Python、NumPy、单元测试
可视化Python、Matplotlib、VTK

历史项目实践补充 ​

本页保留合并前的实验清单。

当前项目指南增加仓库结构、CI、失败注入和报告规范。

串行基线 ​

先实现清晰且正确的串行版本。

它用于 Oracle、性能基线和调试。

输入覆盖 ​

  • 空;
  • 小;
  • 典型;
  • 大;
  • 非对齐;
  • 倾斜;
  • 错误;
  • 资源边界。

正确性 ​

使用精确答案、容差和不变量。

并行版本重复运行,发现数据竞争和非确定性。

基准 ​

保存:

  • Commit;
  • 编译器;
  • 硬件;
  • 输入;
  • 并发资源;
  • 预热;
  • 样本;
  • 原始结果;
  • 正确性。

Profile ​

CPU 使用 WPA、VTune 或 Perf。

NVIDIA GPU 使用 Nsight Systems 和 Nsight Compute。

先系统级定位,再对热点下钻。

内存实验 ​

比较:

  • 顺序和随机;
  • Stride;
  • AoS/SoA;
  • 工作集;
  • False Sharing;
  • NUMA。

CPU 实验 ​

比较:

  • 串行;
  • SIMD;
  • 静态线程;
  • 动态调度;
  • 不同线程数;
  • 亲和性。

CUDA 实验 ​

覆盖:

  • 索引边界;
  • Block;
  • 合并访问;
  • Shared Memory;
  • Stream;
  • 传输;
  • 错误检查。

MPI 实验 ​

覆盖:

  • 分区;
  • Point-to-Point;
  • Collective;
  • Halo;
  • 强扩展;
  • 弱扩展;
  • 最慢 Rank。

失败注入 ​

  • OOM;
  • 文件失败;
  • 无设备;
  • 非法参数;
  • 取消;
  • 超时;
  • Rank 故障;
  • 部分输出。

仓库交付 ​

包含:

  • README;
  • 构建;
  • 源码;
  • 测试;
  • Benchmark;
  • Profile 脚本;
  • 结果索引;
  • 报告。

当前课程映射 ​

当前版本增加:

  • 标准目录结构;
  • 输入矩阵;
  • Correctness Gate;
  • CI;
  • 可复现脚本;
  • 扩展曲线;
  • 失败注入;
  • 报告模板。

归档复现 ​

旧命令和工具版本需要在目标环境重新确认。

复现结果记录与历史差异,不覆盖原始结论。

每次项目复现还应保存数据校验和、构建产物哈希和完整运行日志。 无法获得原硬件时,报告说明替代平台及其影响。 性能差异不得在没有正确性对照时解释为优化收益。 旧结果只作为参考,不自动升级为当前回归基线。 项目报告应列出尚未验证的假设。 完成标准以可复现证据为准。

12. 完成专题后应该能回答 ​

  1. 为什么增加核心后加速比会逐渐下降?
  2. 为什么连续访问比随机访问快?
  3. CPU SIMD 和 GPU SIMT 有什么区别?
  4. 为什么高 Occupancy 不保证高性能?
  5. 什么时候程序受内存带宽限制?
  6. CPU-GPU 传输为什么可能抵消加速收益?
  7. AllReduce 为什么会限制多机训练扩展?
  8. 怎样用证据说明一个优化确实有效?

如果能结合自己的实验回答这些问题,就已经建立了较完整的并行计算知识框架。

返回专题首页:[[00-parallel-computing-overview]]

最后更新于:

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

持续记录,持续成长

Copyright © Tidenflow