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 shader 和 pixel shader——开发者可以给 GPU 写程序了。NVIDIA GeForce 3、ATI Radeon 8500 是开端。
shader 让 GPU 从”固定功能”变成”可编程并行处理器”——但程序只能用图形 API(DirectX/OpenGL)写,输入输出是图像数据。
转折 2:统一架构 + CUDA(2006)
NVIDIA G80(GeForce 8800,2006)做了两件大事:
- 统一着色器架构——同一组计算单元既能做 vertex 又能做 pixel,自动调度
- 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 | |
SIMT 的代价:同一 warp 内分支必须串行执行。if/else 在 warp 内会让一半线程闲等——这就是 GPU 编程经常说的”避免分支分歧”。
一颗现代 GPU 内部
以 NVIDIA H100 SM(Streaming Multiprocessor)为例:
1 | |
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 | |
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。