Series
GPU 架构学习合集
从 CPU/GPU 差异讲到 SIMT、SM、Warp、存储层次、Tensor Core、Nsight 性能分析、多 GPU 协作和简化 GPU RTL 设计。
课程目录
按学习顺序整理,每篇文章仍然可以通过博客分类、标签和搜索访问。
Blackwell 架构概览
我会用最基础的层次,把 Blackwell 的定位、核心改进和它解决什么问题讲清楚。
第一课:GPU 为什么存在,以及它和 CPU 有什么区别
先从“GPU为什么存在”讲起,再逐步进入线程、SIMT、SM、Warp、存储层次和指令执行。先建立整体框架,不急着看具体英伟达架构。
第二课:GPU 程序是怎样被执行的
下面继续讲 GPU 程序从启动到执行完成的全过程,重点理清 Kernel、Grid、Block、Warp、Thread 与 SM 的对应关系。
第三课:GPU 的存储层次
这一部分讲 GPU 的存储层次,以及为什么同一个程序只是改变数据访问方式,性能就可能相差数倍。
第四课:SM 内部结构与指令执行过程
这一部分进入 SM 内部,重点讲清楚 Warp Scheduler、发射、执行单元、Scoreboard 和流水线之间的关系。
第五课:分支、谓词执行与 Warp 发散
这一课继续讲控制流:同一个 Warp 遇到 if/else、循环和提前退出时,硬件如何处理,以及分支发散为什么会降低效率。
第六课:GPU 中的数据依赖、数据冒险与同步
这一课讲 GPU 中的数据依赖与数据冒险,重点区分“依赖本身”和“流水线造成的冲突”,并说明 Scoreboard、原子操作和内存屏障如何保证正确性。
第七课:GPU 是算力受限,还是带宽受限
这一课建立 GPU 性能分析的核心框架:先判断程序受算力限制,还是受显存带宽限制。
第八课:GPU 如何完成矩阵乘法
这一课用矩阵乘法把前面学过的线程、Block、Shared Memory、寄存器和计算强度串联起来。
第九课:GPU 如何执行神经网络卷积
这一课把矩阵乘法继续推进到卷积,重点解释卷积的数据组织、常见映射方式,以及为什么不同卷积在 GPU 上效率差异很大。
第十课:Tensor Core 与低精度计算
这一课讲 Tensor Core 和低精度计算:先理解不同数值格式,再看 MMA 指令、混合精度累加,以及 Blackwell 中 Transformer Engine 的作用。
第十一课:GPU 的缓存、显存控制器与内存事务
这一课继续深入 GPU 的内存系统,重点解释一个 Warp 的访存请求如何变成 Cache Line、内存事务,并最终到达 GDDR 或 HBM。
第十二课:Block 如何分配到 SM,以及 Occupancy 由什么决定
这一课讲 Block 如何进入 SM、哪些硬件资源限制并发度,以及 Occupancy 为什么只是性能指标之一。
第十三课:GPU 为什么有多个调度层次
这一课把调度层次串起来:从 CPU 提交 Kernel,到 Stream、Grid、Block,再到 SM 内部的 Warp 调度。
第十四课:多 GPU 如何协同工作
这一课进入多 GPU 系统,先讲 PCIe、NVLink、NVSwitch,再讲数据并行、张量并行、流水线并行和 AllReduce,最后用 GB200 NVL72 串起来。
第十五课:GPU 如何渲染一幅三维图像
这一课转向 GPU 的图形起源,讲一幅三维场景如何经过顶点处理、光栅化、像素着色和深度测试,最终变成屏幕图像。
第十六课:从 GPU 框图理解完整芯片
这一课把前面的 SM、缓存、显存控制器和图形单元放回整块 GPU 中,学习如何阅读一张完整的 GPU 架构框图。
第十七课:NVIDIA GPU 架构如何演进
这一课按时间线梳理 NVIDIA GPU 架构演进,重点不是背型号,而是看每一代解决了什么瓶颈。
第十八课:PTX、SASS 与 Compute Capability
前面讨论的是 GPU 硬件如何执行指令,但程序员通常写的是 CUDA C++:
第十九课:编译器如何优化 CUDA Kernel
这一课解释 CUDA 编译器如何从源代码生成更高效的 GPU 指令,以及这些优化怎样影响寄存器、分支、访存和 Occupancy。
第二十课:如何使用 Nsight Compute 分析 CUDA Kernel
这一课进入实际性能诊断:如何从 Nsight Compute 的报告中判断 Kernel 是计算受限、带宽受限,还是因为延迟与调度停顿而变慢。
第二十一课:从低效 Reduction Kernel 到高性能归约
这一课用 Reduction 实战串联原子操作、Shared Memory、分支发散、Warp Shuffle、向量化加载和多级归约。
第二十二课:Softmax 为什么难以高效,以及 FlashAttention 如何减少显存访问
这一课把 Reduction 应用到 Softmax 和 Attention,并推导 FlashAttention 如何用分块与在线 Softmax 避免保存完整的 N x N 注意力矩阵。
第二十三课:LayerNorm 和 RMSNorm 如何在 GPU 上实现
这一课讲 LayerNorm 与 RMSNorm;随后我会把课程收束到少数几个最必要章节,避免继续无限展开。
第二十四课:Transformer 中的 MLP、GEMM 与算子融合
这一课讲 Transformer 中计算量最大的 MLP 模块,以及 GEMM Epilogue、GELU/SiLU/SwiGLU 融合和张量并行的数据流。
第二十五课:稀疏计算、不规则访存,以及 GPU 不擅长什么
这一课是倒数第三课,重点解释“计算量更少”为什么不一定更快,以及不规则访存、原子冲突和负载不均衡为何会削弱 GPU 优势。
第二十六课:如何从零设计一个简化的 SIMT GPU
这一课从 RTL 设计角度搭建一颗最小可运行的 SIMT GPU。重点是模块边界、状态机和实现顺序,而不是一开始复制完整商用 GPU。
第二十七课:GPU 架构学习总结与统一分析框架
最后一课将把前面所有内容压缩成一套统一分析框架,并给出面向 GPU 架构与 RTL 设计的后续实践路线。