GPU 架构学习

第十七课:NVIDIA GPU 架构如何演进

这一课按时间线梳理 NVIDIA GPU 架构演进,重点不是背型号,而是看每一代解决了什么瓶颈。

目录一、Tesla/G80:GPU 从图形处理器变成并行计算器二、Fermi:建立完整的通用计算基础三、Kepler:扩大吞吐规模并减少调度瓶颈四、Maxwell:不再只追求更多核心,而是追求每瓦效率五、Pascal:连接低精度计算、高带宽显存和多 GPU六、Volta:Tensor Core 改变了 GPU 的计算方向七、Turing:实时光线追踪与 AI 进入消费级图形八、Ampere:让 Tensor Core 覆盖更多精度和工作负载九、Hopper:数据搬运和多 SM 协作成为核心设计对象十、Blackwell:从单芯片 GPU 走向机架级 AI 计算机十一、架构路线并非只有一条十二、从历史中可以看到的五条主线1. 从固定功能走向可编程2. 从裸算力走向完整存储体系3. 从通用算术走向专用矩阵计算4. 从同步执行走向异步数据流水5. 从单 GPU 走向系统级扩展十三、三个最重要的历史转折点十四、不要只比较 CUDA Core 数量本课核心结论第十八课:PTX、SASS 和 Compute Capability

导语:这一课按时间线梳理 NVIDIA GPU 架构演进,重点不是背型号,而是看每一代解决了什么瓶颈。

学习架构演进时,不应只背“CUDA Core 数量增加了多少”,而要关注每一代主要解决的瓶颈:

Tesla:让 GPU 能进行通用计算
Fermi:让 GPU 更像完整的计算处理器
Kepler:扩大并行规模
Maxwell:提高每瓦性能
Pascal:加强低精度、显存和多 GPU
Volta:引入 Tensor Core
Turing:引入 RT Core
Ampere:统一 AI、HPC 和资源隔离
Hopper:强化数据搬运与 Transformer
Blackwell:低至 FP4,并扩展到机架级计算

这里的 Tesla 架构 是早期 CUDA GPU 架构;后来 NVIDIA 也曾把数据中心产品称为 Tesla 产品线,二者不要混淆。


一、Tesla/G80:GPU 从图形处理器变成并行计算器

2006 年的 G80 是 NVIDIA GPU 架构的重要转折点。

在它之前,GPU 中往往存在不同的专用处理器:

顶点处理器
像素处理器
几何处理器

如果某一帧像素工作很多、顶点工作很少,就可能出现:

像素处理器忙不过来
顶点处理器却处于空闲

G80 采用统一着色器架构,让同一套可编程处理器能够执行顶点、像素、几何和计算任务。它还引入标量线程处理、SIMT、Shared Memory 和线程屏障;CUDA 则让程序员能够使用高级语言直接编写通用计算程序,而不再需要把科学计算伪装成图形渲染。

这一代最重要的改变不是“核心更多”,而是:

GPU 从固定图形流水线,转向可编程的大规模并行处理器。

其基本模型已经与今天非常接近:

Grid
 └── Block
      └── Warp
           └── Thread

现代 GPU 仍然延续着 G80 奠定的 SIMT、Warp 和 Shared Memory 等基本思想。


二、Fermi:建立完整的通用计算基础

早期 CUDA GPU 已经能运行通用程序,但距离成熟的 HPC 处理器还有差距,例如:

  • 缓存体系较弱;
  • 双精度性能不足;
  • 缺乏完整 ECC;
  • 原子操作较慢;
  • 多任务执行能力有限。

Fermi 针对这些问题加入了可配置的 L1/Shared Memory、统一 L2 Cache、ECC、更强的双精度、并发 Kernel、双 Warp Scheduler,以及更完整的 C++ 和统一地址空间支持。

可以把 Fermi 的目标概括为:

G80:
GPU 可以做计算

Fermi:
GPU 可以可靠地承担大型科学计算

Fermi 也是前面所学现代 GPU 结构的重要起点:

多个 SM

公共 L2 Cache

多个显存分区

三、Kepler:扩大吞吐规模并减少调度瓶颈

Kepler 进一步强调性能、能效和大规模并行。

它引入或强化了几个重要功能:

  • SMX:更大规模的流式多处理器;
  • Hyper-Q;
  • Dynamic Parallelism;
  • GPUDirect RDMA;
  • 高双精度计算能力。

NVIDIA 官方将 SMX、Dynamic Parallelism 和 Hyper-Q 列为 Kepler 面向并行计算的主要创新。

Hyper-Q 解决什么问题

早期架构中,多个 CPU 任务提交到 GPU 后,可能被压缩到较少的硬件工作队列中,造成无关任务之间出现“假依赖”。

Hyper-Q 增加了更多独立硬件工作队列:

多个 CPU 线程或 MPI 进程

多个硬件工作队列

更充分地向 GPU 提交任务

Dynamic Parallelism

它允许 GPU Kernel 在 GPU 内部启动新的 Kernel。

传统方式:

GPU 完成一阶段

通知 CPU

CPU 启动下一 Kernel

Dynamic Parallelism:

GPU Kernel

直接启动子 Kernel

这对递归、自适应网格和不规则任务更方便,但子 Kernel 启动仍有成本。


四、Maxwell:不再只追求更多核心,而是追求每瓦效率

Kepler 的 SMX 很宽,包含大量执行单元,但并不是所有工作负载都能持续填满这些资源。

Maxwell 重新设计了 Streaming Multiprocessor,将其划分成更独立的处理分区,并改善了:

  • 控制逻辑分区;
  • 工作负载平衡;
  • 时钟门控粒度;
  • 编译器静态调度;
  • 指令发射效率。

NVIDIA 将 Maxwell SMM 的核心目标概括为显著提升架构和能量效率。

其思路是:

Kepler:
一个很宽的大型 SMX

Maxwell:
拆成多个更独立、更容易利用的执行分区

因此,即使某些 Maxwell 产品的理论资源增长不夸张,它们的实际每瓦性能仍明显提高。

这一代说明了一个重要规律:

增加执行单元数量并不困难,困难的是让执行单元持续获得可执行指令和数据。


五、Pascal:连接低精度计算、高带宽显存和多 GPU

Pascal 是 AI 计算快速发展阶段的重要过渡架构。

其代表性变化包括:

  • 16 nm FinFET;
  • HBM2;
  • 第一代 NVLink;
  • 更高 FP16 吞吐率;
  • 改进 Unified Memory;
  • GPU 硬件页面错误与数据迁移。

Pascal P100 将高速 NVLink、HBM2 和高能效计算结合起来,为多 GPU 深度学习和 HPC 奠定了更强的系统基础。

Pascal 的重点已经不只是 SM:

更快的计算
+
更高的显存带宽
+
更快的 GPU 间互连
+
更方便的 CPU/GPU 内存管理

这反映出 GPU 性能问题开始从“芯片内部算得多快”,扩展到:

数据怎样进入 GPU,以及多块 GPU 怎样协作。


六、Volta:Tensor Core 改变了 GPU 的计算方向

Volta 是 AI GPU 架构的关键分界点。

在 Volta 之前,神经网络矩阵乘法主要依靠普通 CUDA Core 执行大量标量 FMA。

Volta 首次加入 Tensor Core:

D=A×B+CD=A\times B+C

Tensor Core 直接处理矩阵块,并采用低精度乘法和较高精度累加,使深度学习吞吐率大幅提高。完整 GV100 SM 中配置了独立 FP32、INT32、FP64 和 Tensor Core 管线。

Volta 还引入了 Independent Thread Scheduling,使 Warp 内线程具有更细粒度的执行状态。但这不意味着 Warp 消失,也不意味着分支发散没有代价。

Volta 的历史意义是:

以前:
GPU 是通用并行处理器,也能运行 AI

Volta 以后:
GPU 内部出现了明确面向 AI 矩阵计算的专用单元

从这里开始,GPU 更明显地成为一种异构芯片:

CUDA Core:通用标量计算
Tensor Core:矩阵计算
LSU:数据搬运
SFU:特殊函数
固定功能单元:图形等任务

七、Turing:实时光线追踪与 AI 进入消费级图形

Volta 主要面向数据中心和 HPC,而 Turing 将 Tensor Core 带入 RTX 图形产品,并首次加入 RT Core。

RT Core 主要加速:

  • BVH 遍历;
  • 光线与包围盒求交;
  • 光线与三角形求交。

Tensor Core 则可以用于:

  • AI 降噪;
  • 图像重建;
  • DLSS;
  • INT8/INT4 推理。

Turing 由可编程着色、RT Core 和增强型 Tensor Core共同构成混合渲染架构,使光栅化、光线追踪和 AI 能在同一渲染流程中协作。

其思路可以表示为:

光栅化:
高效完成大部分基础画面

RT Core:
处理反射、阴影和求交

Tensor Core:
执行 AI 降噪和图像重建

Turing 说明 GPU 的发展并不是完全抛弃专用硬件,而是:

在可编程 SM 周围加入越来越多面向高频任务的专用加速结构。


八、Ampere:让 Tensor Core 覆盖更多精度和工作负载

Ampere 的重要变化包括:

  • 第三代 Tensor Core;
  • TF32;
  • BF16;
  • FP64 Tensor Core;
  • INT8、INT4 等格式;
  • 2:4 结构化稀疏;
  • Global Memory 到 Shared Memory 的异步复制;
  • 更大的统一 L1/Shared Memory;
  • MIG。

A100 Tensor Core 可以处理多种浮点和整数格式,并通过 2:4 结构化稀疏提高特定矩阵运算吞吐率。Ampere 还允许数据更直接地从 Global Memory 搬到 Shared Memory,减少寄存器中转。

TF32 的意义

过去要使用 Tensor Core,通常需要显式把 FP32 模型转为 FP16。

TF32 让许多以 FP32 输入的矩阵计算能够更容易使用 Tensor Core:

FP32 范围
+
降低的乘法尾数精度
+
较高精度累加

MIG 的意义

MIG 可以把一块 A100 划分成多个相对隔离的 GPU Instance,每个实例拥有独立的 SM 和部分内存系统路径。

它解决的不是单任务峰值性能,而是:

一块很大的 GPU

安全、可预测地服务多个较小任务

九、Hopper:数据搬运和多 SM 协作成为核心设计对象

Tensor Core 的速度持续提高后,一个新问题越来越突出:

计算单元已经很快,但数据搬运、同步和多 SM 协作跟不上。

Hopper 因此不仅增强计算,还重点改进数据流。

主要变化包括:

  • 第四代 Tensor Core;
  • FP8;
  • 第一代 Transformer Engine;
  • Tensor Memory Accelerator;
  • Thread Block Cluster;
  • Distributed Shared Memory;
  • DPX 指令;
  • HBM3;
  • 第四代 NVLink。

Hopper 的 TMA 可以异步搬运多维数据块,使少量线程发起大块 Global Memory—Shared Memory 传输;Thread Block Cluster 则允许多个 SM 上的 Block 同步,并通过 Distributed Shared Memory 访问其他 Block 的 Shared Memory。

传统 CUDA 层次是:

Grid
 └── Block
      └── Thread

Hopper 增加了:

Grid
 └── Thread Block Cluster
      └── Block
           └── Thread

Transformer Engine 会在 FP8 和 16 位格式之间动态选择和转换,以兼顾性能与数值范围。

Hopper 的核心趋势是:

不只是增加 Tensor Core
而是让数据搬运、计算和同步形成异步流水线

十、Blackwell:从单芯片 GPU 走向机架级 AI 计算机

Blackwell 数据中心 GPU 使用两个接近光刻尺寸上限的 Die,通过约 10 TB/s 的封装内互连连接,并在软件中表现为一个统一 GPU。完整 Blackwell GPU 包含约 2080 亿个晶体管。

其主要演进包括:

  • 第五代 Tensor Core;
  • 第二代 Transformer Engine;
  • FP4 与微张量缩放;
  • 更强的可靠性和解压硬件;
  • 第五代 NVLink;
  • 面向 NVL72 的机架级扩展。

FP4 只有4位,单独使用很难覆盖神经网络张量的动态范围,因此 Blackwell 使用更细粒度的 Micro-Tensor Scaling,让不同局部数据块使用不同缩放因子。

Blackwell 的第五代 NVLink 可在 NVL72 中构建72 GPU高速域,官方给出的该域聚合 NVLink 带宽为130 TB/s。

因此 Blackwell 的设计单位不再只是:

一个 SM

一块 GPU

而越来越接近:

十、Blackwell:从单芯片 GPU 走向机架级 AI 计算机

图示:十、Blackwell:从单芯片 GPU 走向机架级 AI 计算机


十一、架构路线并非只有一条

从 Volta 以后,NVIDIA 的数据中心与图形架构出现了一定程度的分支:

十一、架构路线并非只有一条

图示:十一、架构路线并非只有一条

它们共享许多基础设计思想,但重点不同。

数据中心 GPU 更强调:

  • FP64、BF16、FP8、FP4;
  • HBM;
  • NVLink;
  • ECC 和 RAS;
  • MIG;
  • 大规模 AI 与 HPC。

图形 GPU 更强调:

  • RT Core;
  • 光栅化;
  • Texture Unit;
  • ROP;
  • 视频编码;
  • 显示输出;
  • 游戏能效。

所以不能仅凭架构名称,就假定所有产品具有相同资源比例。


十二、从历史中可以看到的五条主线

1. 从固定功能走向可编程

固定图形流水线

统一 Shader

CUDA 通用计算

代表架构:G80。

2. 从裸算力走向完整存储体系

Shared Memory 为主

L1 + L2 + ECC

更大的缓存与统一内存

代表架构:Fermi、Pascal。

3. 从通用算术走向专用矩阵计算

CUDA Core FMA

Tensor Core

FP8 / FP4 Transformer Engine

代表架构:Volta、Hopper、Blackwell。

4. 从同步执行走向异步数据流水

线程加载数据并等待

异步复制

TMA 和多阶段流水线

代表架构:Ampere、Hopper。

5. 从单 GPU 走向系统级扩展

PCIe 多 GPU

NVLink

NVSwitch

机架级 NVLink Domain

代表架构:Pascal、Hopper、Blackwell。


十三、三个最重要的历史转折点

如果只记住三个节点,可以记:

G80:可编程化

GPU 不再只能画图

统一 Shader、SIMT、Shared Memory 和 CUDA 奠定现代 GPU 基础。

Volta:AI 专用化

矩阵计算不再只使用普通 CUDA Core

Tensor Core 使 AI 成为 GPU 硬件设计的核心目标。

Blackwell:系统化

性能单位从一块芯片扩展到整个机架

低精度、先进封装、NVLink Switch 和机架级系统共同决定最终性能。


十四、不要只比较 CUDA Core 数量

跨架构比较“CUDA Core 数量”常常会误导。

因为不同代 CUDA Core 的以下属性可能不同:

  • 每周期指令能力;
  • 工作频率;
  • 发射结构;
  • FP32 与 INT 管线关系;
  • 寄存器带宽;
  • 缓存容量;
  • SM 分区方式;
  • 实际利用率。

同样,Tensor Core 的数量也不能直接跨代比较。

例如:

Volta:每个 Tensor Core 每周期处理较小吞吐
Ampere:Tensor Core 数量可能减少,但单个能力明显增强

Ampere A100 每个 SM 的 Tensor Core 数由 Volta 的8个变为4个,但每个第三代 Tensor Core 的工作能力更强,SM 总矩阵吞吐率反而提高。

因此应比较:

实际支持的数据格式
每周期矩阵吞吐率
显存和片上带宽
软件支持
真实应用性能

而不是只数方框。


本课核心结论

第一,G80 和 CUDA奠定了统一着色、SIMT 和通用 GPU 计算的基础。

第二,Fermi 加入成熟缓存、ECC、双精度和并发 Kernel,使 GPU 更适合 HPC。

第三,Kepler 通过 SMX、Hyper-Q 和 Dynamic Parallelism 扩大并行规模和可编程性。

第四,Maxwell 通过重构 SM 分区提高每瓦性能和执行单元利用率。

第五,Pascal 将 FP16、HBM2、NVLink 和改进统一内存结合起来。

第六,Volta 首次加入 Tensor Core,是 GPU AI 专用化的重要转折点。

第七,Turing 加入 RT Core,形成光栅化、光线追踪和 AI 的混合图形架构。

第八,Ampere 扩展 Tensor Core 数据格式,引入 TF32、BF16、结构化稀疏、异步复制和 MIG。

第九,Hopper 通过 FP8、Transformer Engine、TMA 和 Thread Block Cluster 强化异步数据流。

第十,Blackwell 通过双 Die、FP4、细粒度缩放和第五代 NVLink,把设计范围扩展到机架级 AI 系统。

第十一,GPU 架构演进的核心并非单纯堆算力,而是同时演进:

compute+storage+data movement+low precision+interconnect+software\text{compute}+\text{storage}+\text{data movement}+\text{low precision}+\text{interconnect}+\text{software}

下一课将讲:

第十八课:PTX、SASS 和 Compute Capability

包括:

CUDA C++ 如何变成 GPU 指令
PTX 是什么
SASS 是什么
虚拟 ISA 与真实 ISA 的区别
sm_80、sm_90、sm_100 表示什么
为什么同一 CUDA 程序能运行在不同架构上
JIT 编译与 Fat Binary
如何查看 Kernel 的汇编指令

Blackwell 架构概览

我会用最基础的层次,把 Blackwell 的定位、核心改进和它解决什么问题讲清楚。

第二十七课:GPU 架构学习总结与统一分析框架

最后一课将把前面所有内容压缩成一套统一分析框架,并给出面向 GPU 架构与 RTL 设计的后续实践路线。

第二十六课:如何从零设计一个简化的 SIMT GPU

这一课从 RTL 设计角度搭建一颗最小可运行的 SIMT GPU。重点是模块边界、状态机和实现顺序,而不是一开始复制完整商用 GPU。