GPU 的历史,本质上是一部「从专用到通用、再为 AI 重新专用化」的螺旋史:它最初只是把三角形画上屏幕的固定电路,中途被改造成一台大规模并行的通用计算机,最后又在大模型推动下,长出 Tensor Core、HBM、NVLink 这些专为矩阵乘与集合通信服务的器官。

NVIDIA GPU 架构代际时间线

一、从 3D 渲染算法说起

要理解 GPU 为什么长成今天的样子,得先知道它最初要解决什么问题:实时三维渲染。把一个三维场景画到二维屏幕上,核心是一条光栅化(rasterization)流水线:

顶点 (3D 坐标)
  → 顶点变换(模型/视图/投影矩阵相乘,MVP)
  → 裁剪 / 透视除法 → 屏幕空间
  → 光栅化(三角形 → 覆盖的像素)
  → 片元着色(纹理采样 + 光照)
  → 深度测试 / 混合 → 帧缓冲

这条流水线有两个决定 GPU 命运的特征:天然并行(每个顶点、每个像素彼此独立)与计算密集(大量矩阵-向量乘与插值)。「对海量独立元素做相同计算」这一结构,正是后来 SIMT 执行模型与 GPGPU 的根。关于其中的线性代数,见《线性代数基础》。

二、SGI 时代(1980–1993)

个人电脑还没有 GPU 的年代,高端三维图形属于 SGI(Silicon Graphics)这样的工作站厂商。SGI 用专用图形硬件做好莱坞特效和科学可视化,并定义了影响深远的 OpenGL 图形 API——它把渲染流水线抽象成一组标准化阶段,成了后来所有图形硬件的事实接口。这个时代确立了「流水线式固定功能图形硬件」的范式,但它昂贵、封闭、与通用计算无关。

三、群魔乱舞(1994–2000)

3D 游戏(Quake、Tomb Raider)引爆了消费级三维加速卡市场,一时间厂商林立:3dfx(Voodoo)、ATI、NVIDIA、S3、Matrox、PowerVR……这就是「群魔乱舞」。各家 API 互不兼容(Glide、Direct3D、OpenGL 并存),硬件只做固定功能管线:顶点变换、光栅化、纹理贴图、混合都是写死的专用电路,参数可调但逻辑不可改。

两个标志性节点:

竞争最终收敛到 NVIDIA 与 ATI 两强,3dfx 等被淘汰或收购。这个阶段的关键词仍是吞吐:用大量并行的固定单元批量刷像素,程序员无法干预中间计算。

四、AN 争霸与可编程着色器(2000–2006)

「AN 争霸」指 ATI 与 NVIDIA 的双雄对决。技术主线是可编程着色器(programmable shader)的登场:

但此时顶点单元与像素单元是物理分离、数量固定的两组硬件:

着色器架构演变

一个画面顶点多像素少时,像素单元闲置;反之顶点单元闲置——硬件利用率被负载比例死死卡住。这个「分离导致浪费」的矛盾,直接催生了下一代的统一着色器架构。

五、统一着色器与初代 CUDA:Tesla(2006–2010)

2006 年底的 GeForce 8800(G80,Tesla 架构)是整部历史的转折点,它同时做了两件事:

  1. 统一着色器阵列:不再区分顶点单元和像素单元,而是一池标量核心(Streaming Processor,SP),由硬件调度器按需分配给任意着色阶段。负载不均的问题被从根上解决——这也是前一节那个矛盾的终点。
  2. CUDA:NVIDIA 同期推出 CUDA,把这池核心暴露成一个可以用 C 语言编程的通用并行计算设备。

从此 GPU 不再只是图形芯片,而是一台可编程的大规模并行计算机(GPGPU)。这里确立了沿用至今的执行模型 SIMT(Single Instruction, Multiple Threads):大量线程被组织成 warp(32 线程)同步执行同一条指令,用海量线程的切换来掩盖访存延迟——这正是第一节「对海量独立元素做相同计算」在硬件上的落地。关于 CPU 与 GPU 的生产者-消费者关系,详见《CPU & GPU》。

G80 的 SM(Streaming Multiprocessor)只有 8 个 SP、结构简单;但「SM = 一组核心 + 共享的调度与存储」这个基本单元,一直沿用到今天:

SM 内部结构

六、通用计算的成熟:Fermi → Pascal(2010–2016)

接下来的四代,是把 GPGPU 从「能跑」打磨到「好用」,重心在存储层级、精度、互联与能效:

Fermi(2010,GF100) 第一次给 GPU 配上完整的缓存层级:每个 SM 有可配置的 64 KB(在共享内存与 L1 之间按 48/16 或 16/48 划分),再加全芯片共享的 L2 和 ECC 保护,并提供可用的 FP64——GPU 正式具备跑科学计算的资格。SM 升级到 32 核、双 warp 调度器。

Kepler(2012,GK110) 推出 SMX(192 CUDA 核/SM),引入动态并行(kernel 内部再启动 kernel)、Hyper-Q(多队列并发)和 GPUDirect RDMA(GPU 显存直连网卡),K20/K40 大规模进入超算与 HPC。

Maxwell(2014,GM2xx) 以能效为核心,重排 SM(SMM,128 核分成 4×32 子分区),每瓦性能大幅提升;代价是砍弱了 FP64。「把 SM 切成 4 个子分区、各带自己的 warp 调度器和寄存器」的结构从此定型。

Pascal(2016,GP100) 是又一个关键节点:首次采用 HBM2 堆叠显存、NVLink 1.0(约 160 GB/s/GPU)高速卡间互联、原生 2× 吞吐的 FP16,并改进统一内存(页迁移)。带宽与互联,而非单纯算力,开始成为瓶颈的主角——为大模型时代埋下伏笔。

七、AI 转折:Tensor Core 三代(2017–2020)

深度学习的核心计算是矩阵乘加(GEMM),传统 CUDA Core 一次只做一个标量乘加,效率不足。2017 年 Volta(V100)引入 Tensor Core——一个每周期完成一整块小矩阵乘加(如 \(D = A \times B + C\),\(4\times4\) 块)的专用单元。这是 GPU 的第二次「专用化」,但对象从图形换成了 AI。

架构 年份 代表卡 Tensor Core 代次与关键推进
Volta 2017 V100 1 代 Tensor Core(FP16 累加 FP32);每线程独立 PC 的独立线程调度;L1/共享合并为 128 KB;NVLink 2.0(300 GB/s)
Turing 2018 T4 / RTX 2 代 Tensor Core(新增 INT8/INT4 推理);首个 RT Core 光追;FP32 与 INT32 可并发
Ampere 2020 A100 3 代 Tensor Core(新增 TF32、BF16、FP64 张量);结构化稀疏 2:4(2× 吞吐);MIG 多实例切分;40 MB L2;NVLink 3.0(600 GB/s)

精度格式的演进是一条清晰副线:FP32 → FP16(Pascal)→ TF32/BF16(Ampere),每一步都用「够用的精度换更高吞吐」。TF32 保留 FP32 的 8 位指数(动态范围不变)但把尾数砍到 10 位;BF16 则是 8 位指数 + 7 位尾数,训练稳定性好。低精度的数值原理见《量化》。

Ampere 的另外两件事对推理工程影响深远:MIG 把一张 A100 切成最多 7 个相互隔离的实例,解决小模型下的资源碎片;结构化稀疏要求每 4 个权重里剪掉 2 个,换取 Tensor Core 2× 吞吐。

八、大模型基座:Hopper(2022)

当模型进入千亿、万亿参数,架构重心从「单芯片算力」转向「如何把一堆芯片拼成一台机器」。Hopper(H100,TSMC 4N,约 800 亿晶体管,132 个 SM) 的几个标志:

到这一代,「GPU 架构」已不只是芯片内部的事,而是芯片 + 封装 + 互联 + 机柜的系统工程。

九、Blackwell:多 die 与「AI 工厂」(2024)

单颗 die 受光罩(reticle)面积限制已到物理极限,Blackwell(B200) 的核心突破是用先进封装拼芯片:两颗 reticle 极限的 die 通过约 10 TB/s 的片间互联(NV-HBI)连成一体,对软件呈现为一颗统一的 CUDA GPU(专辑 #17 专门讨论了多 die 与 Cache 一致性)。其余要点:

更重要的是系统层:GB200 = 2 颗 Blackwell + 1 颗 Grace CPU;GB200 NVL72 用 NVLink Switch 把 72 颗 GPU + 36 颗 Grace 连成单一 NVLink 域,整机柜像一张大 GPU 一样工作。专辑 #18–#20 把这套东西称为「AI 工厂 / AI 云」,强调它已经是以机柜(rack)为单位交付的系统产品,而不是一块板卡。互联拓扑见《Topology》,通信原语见《Communication》,机柜内 scale-up 与跨机柜 scale-out 的分工是其中关键。

十、ASIC 能取代 GPU 吗

伴随博通(Broadcom)等厂商的定制 ASIC(如各家自研 TPU/加速器)大涨,一个常被问的问题是:专用 ASIC 会不会取代通用 GPU?专辑给出的判断大致是:

结论不是「谁取代谁」,而是分层共存:训练与前沿探索留给 GPU,稳定的大规模推理负载会被 ASIC 和专用推理芯片蚕食——这也正是下一节 Groq LPU 的切入点。

十一、Rubin / Rubin CPX / 288 卡系统(2026)

2026 年的 Rubin 配合 Vera CPU(合称 Vera Rubin),进入 NVIDIA 承诺的「一年一代」节奏,升级 HBM4、NVLink 6、ConnectX-9 SuperNIC、Spectrum-6 以太网、BlueField-4 DPU,并继续放大 scale-up 域规模(专辑 #15 推测了约 288 卡级别的系统架构)。

Rubin 最值得注意的是第一次按推理的两个阶段做硬件分工,即 Rubin CPX(专辑 #7):

于是 Rubin CPX 专为 prefill / 超长上下文 设计:堆算力、改用更便宜的 GDDR7 而非 HBM;标准 Rubin GPU 配 HBM4 承担 decode。这正是把《Disaggregation》里 prefill/decode 分离的软件思想,下沉成了异构硬件分工——不同阶段用不同芯片,而不是让一种通用 GPU 两头将就。按公开路线图,其后是 2027 年的 Rubin Ultra 与之后的 Feynman,延续年度节奏。

十二、另一条路线:Groq LPU 与 NV 的整合(专辑 Groq / Feynman 系列)

并非所有人都认同「通用 GPU」这条路。Groq 的 LPU(Language Processing Unit),底层是 TSP(Tensor Streaming Processor),走了一条几乎相反的设计哲学:

GPU 与 Groq LPU 的对比

GPU 优化的是吞吐,LPU 优化的是单请求延迟,两者正好互补。据公开报道,NVIDIA 以约 200 亿美元 规模拿下 Groq 的技术(专辑 #6「被 NV 看上值 20B 的 Groq」、#5「如何整合吸收 Groq 的技术」),并计划把这种确定性低延迟解码能力整合进 Rubin / Feynman(专辑 #3、#4 讨论「Rubin + Groq3 LPU」「Feynman + LPU」的组合架构)。

这其实是 GPU 历史的又一次「专用化」:当年为图形专用、后来为矩阵乘专用,现在要为低延迟解码再专用一次——用一条专用路径补上通用 GPU 在实时自回归生成上的短板。

十三、贯穿始终:存储与互联

贯穿所有代际、却常被忽略的,是存储与互联这条隐形主线。算力增长远快于访存带宽增长,于是「如何喂饱计算单元」反而成了架构设计的中心问题:

存储层级与互联层级

一个有用的判断框架是 Roofline:一个 kernel 到底受算力限制还是带宽限制,取决于它的算术强度。架构每一代其实都在同时抬高「算力屋顶」和「带宽屋顶」,而大模型推理的 decode 阶段几乎总是撞在带宽屋顶上——这也是 Rubin CPX 要把 prefill 与 decode 分开用不同芯片的根本原因。详见《Roofline》。

十四、主线规律总结

回看整条历史,有几条反复出现的规律:

  1. 专用 → 通用 → 再专用的螺旋:固定管线(专用图形)→ 统一着色器 + CUDA(通用计算)→ Tensor Core(专用 AI 矩阵乘)→ Rubin CPX / LPU(专用推理阶段)。每次「再专用」都是因为某类负载大到值得为它定制硅片。
  2. 瓶颈从算力转向带宽再转向互联:单芯片算力早已过剩,HBM 带宽、NVLink 互联乃至整机柜拓扑,才是近十年真正的战场。
  3. 精度持续走低:FP32 → FP16 → TF32/BF16 → FP8 → FP4,每一步都用可接受的精度损失换吞吐。
  4. 架构边界不断外扩:从「芯片内部」扩到「芯片 + 封装 + 互联 + 机柜」,软件层的 prefill/decode 分离甚至开始反向定义硬件分工。
时期 代表 本质
1980–1993 SGI / OpenGL 工作站级固定功能图形流水线
1994–2000 Voodoo / GeForce 256 消费级固定功能 3D 加速,群雄混战
2000–2006 GeForce3 / Radeon 可编程但分离的着色器,AN 争霸
2006–2010 G80 / Tesla 统一着色器 + CUDA,GPGPU 诞生
2010–2016 Fermi→Pascal 通用计算成熟,HBM/NVLink 登场
2017–2020 Volta→Ampere Tensor Core,为 AI 专用化
2022–2024 Hopper/Blackwell FP8/FP4,芯片+封装+互联的系统工程
2026+ Rubin/Feynman 按推理阶段异构分工,整合 Groq LPU