GPU 历史 —— 从图形到通用计算

第五章是这本书最重的一章——GPU 与 AI 加速。在进入复杂的现代芯片之前,先回看这条线是怎么走出来的。GPU 不是为了 AI 设计的——它在过去 25 年里因为偶然的几个技术决策,刚好成了 AI 时代最锋利的算力工具。

“GPU”这个词怎么来的

NVIDIA 1999 年发布 GeForce 256,对外宣称这是世界上第一颗 “GPU”(Graphics Processing Unit)。这个词其实是 NVIDIA 营销出来的——之前类似的卡叫 “graphics card” 或 “video card”,没有”处理器”这个含义。

为什么叫 GPU?因为 GeForce 256 集成了T&L(Transform and Lighting)固定功能流水线——把 3D 图形里的几何变换和光照计算从 CPU 卸载到显卡上。这是图形流水线第一次”自己有处理能力”

但那时 GPU 还非常专用——只能做图形管线里的几个固定步骤。

三个关键转折

graph LR
  T1[1999
固定流水线 T&L] --> T2[2001
可编程着色器
shader] T2 --> T3[2006
统一架构
G80 + CUDA] T3 --> T4[2012
AlexNet 引爆 AI
GPU 成 AI 算力]

转折 1:可编程着色器(2001-2003)

DirectX 8 / OpenGL 1.5 引入 vertex shaderpixel shader——开发者可以给 GPU 写程序了。NVIDIA GeForce 3、ATI Radeon 8500 是开端。

shader 让 GPU 从”固定功能”变成”可编程并行处理器”——但程序只能用图形 API(DirectX/OpenGL)写,输入输出是图像数据。

转折 2:统一架构 + CUDA(2006)

NVIDIA G80(GeForce 8800,2006)做了两件大事:

  1. 统一着色器架构——同一组计算单元既能做 vertex 又能做 pixel,自动调度
  2. CUDA——开放给非图形开发者的 C 风格编程模型

CUDA 第一次让”用 GPU 算非图形问题”变得简单——不再需要把矩阵乘法伪装成”画一张纹理”。

科研、HPC、金融、地震模拟一波 GPU 化随之而来——但还都是”小圈子”。

转折 3:AlexNet(2012)

2012 年 ImageNet 比赛,AlexNet 用 2 颗 NVIDIA GTX 580 训练 CNN,错误率从 26% 砍到 16%——开启深度学习时代。

GPU 之所以适合 CNN/深度学习,是因为这两种工作负载天生需要的就是大规模并行的矩阵-向量乘法

  • CNN 的卷积本质上是大量乘加
  • Transformer 的注意力是大矩阵乘法
  • 训练反向传播也是大矩阵乘法

CPU 几十核一秒跑几百 GFLOPS,GPU 几千核一秒跑几十 TFLOPS——同样的电、几十倍的速度。

CPU vs GPU 的本质差异

graph TB
  subgraph CPU["CPU"]
    direction LR
    CC1[少量大核
4-128 个] CTL[复杂控制
OoO/分支预测] CCH[大缓存
L1/L2/L3] end subgraph GPU direction LR GC[海量小核
千到万个] GS[简化控制
SIMT 一条指令带一群线程] GMEM[少缓存
大显存带宽] end
CPU GPU
核数 几十 几千-几万
单核性能
单核控制 复杂(OoO、分支预测、超标量) 简单(SIMT、共享 PC)
单核缓存 几 MB KB-级 shared memory
内存带宽 数百 GB/s 数千 GB/s (HBM)
适合 串行/分支多 数据并行、计算密集

SIMT:GPU 的核心执行模型

SIMT = Single Instruction, Multiple Thread——一组 32 个线程(NVIDIA 的 warp)共享一个程序计数器,同步执行同一条指令,但操作不同数据。

1
2
3
CPU SISD:     1 条指令 × 1 份数据
CPU SIMD: 1 条指令 × N 份数据(AVX 等)
GPU SIMT: 1 条指令 × N 个线程,每线程操作自己的数据

SIMT 的代价:同一 warp 内分支必须串行执行if/else 在 warp 内会让一半线程闲等——这就是 GPU 编程经常说的”避免分支分歧”。

一颗现代 GPU 内部

以 NVIDIA H100 SM(Streaming Multiprocessor)为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SM 内部:
- 4 个 sub-partition,每个有:
- 16 个 INT32 ALU
- 16 个 FP32 ALU
- 8 个 FP64 ALU
- 1 个 Tensor Core(张量计算单元)
- 1 个 LSU(Load/Store Unit)
- 1 个 SFU(特殊函数单元)
- 256 KB shared memory + L1 cache
- 64 KB register file × 4
- Warp scheduler

H100 共 132 个 SM
每 SM 含 128 FP32 ALU
总:~17000 个 FP32 ALU

Tensor Core 是 2017 年 Volta 引入的——专门做 4×4 矩阵乘加,是现代 AI 算力的关键。后面的章节专题讲。

GPU 的存储层次

GPU 的存储和 CPU 不一样:

graph TB
  REG[寄存器
每线程 数十-数百
~1 cycle] SH[Shared Memory
每 SM 192-256 KB
~30 cycle] L2[L2 Cache
整 GPU 共享 50-60 MB
~200 cycle] HBM[HBM 显存
~80 GB / 8 TB/s
~500 cycle] HOST[Host DRAM
~10 μs PCIe / NVLink-C2C] REG --> SH --> L2 --> HBM --> HOST

GPU 上”存储”的特性:

  • 每 SM 私有的 register file 很大(H100 SM 有 64K × 4 个 32-bit 寄存器),让大量线程同时驻留
  • shared memory 是程序员可见的快速 scratch,对算法优化非常关键
  • HBM 显存比 DRAM 带宽高一个数量级,是 GPU 的主存
  • 与 CPU 主存通过 PCIe 或 NVLink-C2C 连接

编程模型的演进

1
2
3
4
5
6
7
8
2003 之前:HLSL/GLSL shader(图形)
2007: CUDA C/C++(NVIDIA)
2009: OpenCL(跨平台)
2014+: CUDA C++14/17/20,引入 cooperative groups
2017+: Tensor Core 暴露给 PTX
2022+: Hopper 引入 TMA、Distributed Shared Memory
2024+: CUDA 12.4+,CUDA Graph,cuBLAS/cuDNN/cuTensor 各种 lib
2024+: AMD ROCm 6+,OpenCL/HIP

CUDA 的成功不只是 API 设计——是生态

graph TB
  CUDA[CUDA C++]
  CUDA --> CUBLAS[cuBLAS
线性代数] CUDA --> CUDNN[cuDNN
深度学习算子] CUDA --> CUSPARSE[cuSPARSE
稀疏] CUDA --> CUFFT[cuFFT
傅里叶] CUDA --> CUTLASS[CUTLASS
矩阵乘模板] CUDA --> NCCL[NCCL
多卡集合通信] CUDA --> TENSORRT[TensorRT
推理优化] CUDA --> TRT_LLM[TensorRT-LLM
大模型推理]

PyTorch、TensorFlow、JAX 全部默认通过这套 stack 落地到 NVIDIA GPU——CUDA 生态是 NVIDIA 真正的护城河,比硬件更难追赶。AMD ROCm 经过几年努力才让 PyTorch 在 MI300 上跑得动,但 cuBLAS/cuDNN 等的等价物仍在追赶。

数据中心 GPU 的几个关键变化点

graph TB
  T1[2014 K40
HPC 起飞] T2[2016 P100
第一颗 NVLink GPU] T3[2017 V100
第一颗 Tensor Core] T4[2020 A100
BF16/TF32, MIG 多租户] T5[2022 H100
FP8, Transformer Engine] T6[2024 B100/B200
FP4, NVL72 整机柜] T7[2025/26 Vera/Rubin
下一代] T1 --> T2 --> T3 --> T4 --> T5 --> T6 --> T7

下一篇展开。

小结

  • GPU 起源是图形固定流水线,T&L → shader → 统一架构是技术路线
  • CUDA(2007)打开了 GPU 通用计算的大门
  • AlexNet(2012)让 GPU 成为 AI 算力的主力
  • CPU 强单核、GPU 强并行——SIMT 是 GPU 的执行模型
  • HBM 显存 + Tensor Core + CUDA 生态是 NVIDIA 的三件套护城河

下一篇按时间梳理 NVIDIA 数据中心 GPU 的演进路线——从 V100 一路到 Rubin。