高性能 C++ 并行编程导读
高性能 C++ 并行编程导读
时间:2026/05/08
这组笔记现在按“从语言与内存基础,到 CPU 性能工程,再到并行框架、GPU 与实战”的顺序整理。
阅读时不建议完全按时间写作顺序看,而建议按下面这条主线走。
1. 推荐学习顺序
C 指针与内存模型RAII 与智能指针左右值、完美转发与引用折叠模板与元编程虚函数、多态与动态派发vector 容器优化std::pmr 与内存池编译器优化与汇编视角访存优化SIMD 与自动向量化Benchmark 与性能分析方法C++11 多线程编程C++20/23 并发工具原子操作、内存序与无锁基础标准库并行算法与执行策略TBB 并行编程NUMA 与多路 CPU 访存CUDA 开启的 GPU 编程流体仿真实战
2. 每篇笔记解决什么问题
| 编号 | 主题 | 核心问题 |
|---|---|---|
[01] |
C 指针与内存模型 | 地址、生命周期、数组退化、别名与缓存直觉 |
[02] |
RAII 与智能指针 | 资源如何自动释放,所有权如何表达 |
[03] |
左右值、完美转发与引用折叠 | std::move / std::forward 到底在做什么 |
[04] |
模板与元编程 | 泛型、类型推导、if constexpr、traits、concepts |
[05] |
vector 容器优化 | 连续内存、扩容、失效规则、并发写入模式 |
[06] |
编译器优化与汇编视角 | 编译器如何重写 C++,哪些写法更利于优化 |
[07] |
访存优化 | cache、AoS/SoA、stride、blocking、false sharing |
[08] |
C++11 多线程编程 | thread/mutex/condition_variable/future/thread pool |
[09] |
原子操作、内存序与无锁基础 | atomic、CAS、acquire/release、seq_cst |
[10] |
TBB 并行编程之旅 | task、并行循环、归约、scan、arena、pipeline |
[11] |
CUDA 开启的 GPU 编程 | kernel、内存、shared memory、stream、Thrust |
[12] |
流体仿真实战 | 把 CUDA、访存、数值迭代放到一个完整案例里 |
[13] |
std::pmr 与内存池 |
memory_resource、arena、pool、资源生命周期与分配优化 |
[14] |
虚函数、多态与动态派发 | 虚表直觉、虚析构、对象切片、动态派发成本与替代方案 |
[15] |
SIMD 与自动向量化 | 数据并行、循环依赖、别名、对齐、SoA、编译器向量化报告 |
[16] |
Benchmark 与性能分析方法 | benchmark、profiling、火焰图、硬件计数器、性能优化闭环 |
[17] |
NUMA 与多路 CPU 访存 | 本地/远端内存、first touch、线程亲和性、跨 socket 扩展性 |
[18] |
C++20/23 并发工具 | jthread/stop_token/latch/barrier/semaphore/atomic::wait |
[19] |
标准库并行算法与执行策略 | std::execution、par/par_unseq、reduce/scan/transform_reduce |
3. 这次整理做了什么
这套笔记经历了两轮整理:
- 把空白或草稿笔记补成正式版:
C 指针、RAII、编译器优化、访存优化、流体仿真 - 新增了几篇缺失但关键的笔记:
原子操作、内存序与无锁基础、std::pmr 与内存池、虚函数、多态与动态派发 - 补齐 CPU 性能工程和现代并行主题:
SIMD 与自动向量化、Benchmark 与性能分析方法、NUMA 与多路 CPU 访存、C++20/23 并发工具、标准库并行算法与执行策略 - 统一为按内容排序的
[NN]xxx.md命名
4. 如果只想抓主干
时间有限时,可以先看这 10 篇:
C 指针与内存模型RAII 与智能指针左右值、完美转发与引用折叠模板与元编程vector 容器优化编译器优化与汇编视角访存优化SIMD 与自动向量化Benchmark 与性能分析方法C++11 多线程编程
这几篇能先把 C++ 高性能和并行里最常见的基础坑位补齐。之后再看 原子操作、标准库并行算法、TBB、CUDA 和 流体仿真实战。
5. 接下来的自然扩展
这次已经补齐了 SIMD、benchmark/profiling、NUMA、现代并发工具和标准库并行算法。
如果后面继续扩展,比较值得补的是:
- 严格别名规则、
restrict与 noalias 设计 - 无锁数据结构进阶:ABA、hazard pointers、epoch reclamation
- OpenMP / MPI 与跨节点并行
- CUDA 深入:occupancy、warp divergence、coalesced access、Nsight
- LTO / PGO / sanitizer / 性能回归测试的工程化
- 协程、异步 I/O 与 executors / sender-receiver 后续演进
6. 按实例复习的路线
如果想按代码例子复习,可以优先这样走:
- 资源管理实例:
RAII、智能指针、自定义 deleter - 容器实例:
vector reserve/resize、迭代器失效、并行分区写入 - CPU 性能实例:顺序访问、AoS/SoA、blocking、false sharing、SIMD 自动向量化
- 测量实例:
steady_clock、Google Benchmark、profiling 指标解读 - 并发实例:线程池、阻塞队列、原子发布/获取、
jthread/barrier/semaphore - 并行算法实例:
parallel_for、parallel_reduce、std::execution::par - GPU 实例:CUDA kernel、shared memory tile、stream 异步拷贝
- 综合实例:流体仿真里的 ping-pong buffer、压力迭代和 CUDA 数据流