人人都会AI编程

15.2 GPU 硬件架构解析:计算单元、存储层级、调度单元

更新时间:2026-07-09

在 15.1 节中,我们对比了 CPU 与 GPU 的架构哲学:CPU 是“少而精”的串行低延迟处理器,GPU 则是“多而密”的并行高吞吐处理器。但这种区别不能只停留在芯片外观层面——要真正写好 CUDA 算子、调通分布式训练或排查推理瓶颈,你必须走进 GPU 内部,看清它的三大核心组件:计算单元、存储层级和调度单元。对大模型开发者而言,这三者共同决定了一次矩阵乘法能不能跑满、一个 Batch 的数据会不会爆显存、以及你的训练任务究竟是卡在算力上还是卡在“搬数据”上。


一、计算单元:以 SM 为积木的并行阵列

现代 GPU(以 NVIDIA Ampere/Hopper 为例)从硅片上看,就是一片由数十到上百个 SM(Streaming Multiprocessor,流式多处理器) 组成的阵列。SM 是 GPU 执行计算的最小独立工厂,GPU 的整体算力本质上等于 “单个 SM 的算力 × SM 数量”。

一个 SM 内部并非只有一种计算器,而是多条异构流水线:

  • CUDA Core(FP32/INT32 单元):负责标量运算和基础浮点操作,是传统图形与通用计算的主力。
  • Tensor Core:专门加速矩阵乘累加(Matrix Multiply-Accumulate, MMA),是现代 AI 训练的“核武器”。它能在单个时钟周期内完成一个 4×4 或更大分块的混合精度矩阵运算。
  • Special Function Unit(SFU):处理超越函数(exp、log、sin、sqrt 等)。在大模型里,Softmax 激活、LayerNorm、位置编码中的三角函数都依赖它。
  • Load/Store Unit(LD/ST):负责与存储层级打交道,把数据从显存/缓存搬进 SM,再把结果写回去。

实用认知:当你在 PyTorch 里写一句 torch.matmul(a, b) 时,底层会被拆解成大量 Warp(线程束)级别的 MMA 指令,被分发到几十个 SM 的 Tensor Core 上同时执行。SM 数量直接决定了你能把任务切得多碎、并行得多开。A100 有 108 个 SM,H100 有 132 个(SXM 版),这也是同代架构下旗舰卡与中端卡的核心差异之一。


二、存储层级:速度、容量与可控性的三角权衡

新手最容易犯的错误,是把 GPU 显存当成“一块均匀的高速内存”。实际上,GPU 内部有一套严苛的存储金字塔,每一层的速度、容量和可控性都相差数量级。对大模型训练与推理而言,存储层级往往比计算单元更早成为瓶颈

| 层级 | 位置 | 典型容量 | 典型延迟 | 开发者可控性 | 大模型场景意义 |
|------|------|----------|----------|--------------|----------------|
| 寄存器(Register) | SM 内部,线程私有 | 每线程 255 个(约 1 KB) | ~1 周期 | 编译器自动分配 | 存放当前计算的中间标量,无法直接干预 |
| L1 缓存 / Shared Memory | SM 内部,Block 级共享 | 每 SM 几十~一百多 KB(可配置) | ~20–30 周期 | 可编程 | FlashAttention、算子融合的核心战场 |
| L2 缓存 | 芯片级,跨 SM 共享 | 数 MB 级(A100 40 MB,H100 50 MB) | ~100–200 周期 | 不可编程,自动缓存 | 隐藏显存访问延迟,复用 Attention 中的 K/V |
| 显存(VRAM / HBM / GDDR) | 芯片外部,通过位宽总线连接 | 数十 GB(24 GB–96 GB) | ~400–600 周期 | 显式申请/释放 | 存放模型权重、优化器状态、激活值 |

关键实战概念

1. 算力瓶颈 vs 显存带宽瓶颈
大模型推理(尤其是自回归生成)的典型特征是:每从显存读取一次权重,只进行一次矩阵乘法。此时 GPU 的 Tensor Core 会频繁空闲,等待显存把数据送过来。这种情况称为 Memory-Bound(带宽受限)。反之,如果 Batch Size 足够大、矩阵分块足够饱满,Tensor Core 能持续饱和工作,则称为 Compute-Bound(算力受限)

实用意义:买卡时不能只看 TFLOPS。如果你主要做推理,显存带宽(GB/s)显存容量(GB) 的优先级可能更高。H100 相比 A100 的代际提升,不仅来自更多 SM,更来自 HBM3 带来的 3.35 TB/s 带宽(A100 HBM2e 为 2.0 TB/s)。

2. Shared Memory 的战术价值
L1/Shared Memory 是金字塔中唯一可由开发者(或编译器)显式控制的高速层。在 CUDA 编程或底层算子优化中,通过 shared 内存把即将复用的数据块(如 FlashAttention 中的 K/V Tile)暂存在 SM 内部,能避免反复访问 HBM。

这也是为什么 17.3 节将要讲到的 FlashAttention,其硬件根基并非什么神秘算法,而是极致利用了 Shared Memory 和寄存器,将 Attention 计算中的访存次数从 O(N²) 降低到接近 O(N)。不懂这一层存储分级,就无法真正理解推理加速库的优化逻辑。

3. L2 缓存的隐式红利
L2 虽然不可编程,但好的算子设计(如合理的块大小、数据重排)能让权重或激活值在 L2 中被多次命中。Hopper 架构新增的 Distributed Shared MemoryTensor Memory Accelerator(TMA) 本质上都是在进一步优化 L2 到 SM 之间的数据搬运效率。


三、调度单元:Warp Scheduler 与延迟隐藏

GPU 动辄同时运行数万个线程,它是如何管理的?答案不是“每个线程自由跑”,而是成组调度

  • Warp(线程束):NVIDIA GPU 的基本调度单位,一个 Warp 固定包含 32 个线程。这 32 个线程在硬件层面被绑定在一起,执行同一条指令(这就是 15.4 节将详述的 SIMT 模型),但各自处理不同的数据。
  • Warp Scheduler:每个 SM 内部有多个 Warp Scheduler(通常 4 个)。每个时钟周期,Scheduler 会从当前驻留的就绪队列中挑选一个 Warp,把指令发射到执行单元。
  • 延迟隐藏(Latency Hiding):这是 GPU 高吞吐的核心秘诀。当某个 Warp 因为等待显存数据(LD/ST)或 SFU 计算而阻塞时,Scheduler 会立刻零开销切换到另一个就绪 Warp。只要 SM 上同时驻留的 Warp 足够多,计算流水线就不会断流。

对大模型开发的启示

  • Batch Size 的本质是喂饱调度器:训练时如果 Batch Size 设得太小(如微批次只有一个序列),SM 上的 Warp 很快会全部进入等待状态,Tensor Core 空转,MFU(模型算力利用率)暴跌。这也是 ZeRO、Gradient Accumulation 等技术存在的部分原因——通过增大有效 Batch,让调度器总有活干。
  • 分支发散的惩罚:如果 Warp 内 32 个线程遇到 if-else 条件分支(比如某些位置做 Mask,某些不做),硬件会串行执行各分支路径,导致 32 路并行暂时坍缩。这也是早期稀疏 Attention、条件计算在 GPU 上效率不高的硬件根源。

四、架构全景:三者如何协同完成一次计算

把计算单元、存储层级和调度单元串起来,看一次大模型前向传播中的矩阵乘法(GEMM):

  1. 调度:Warp Scheduler 选中一组 Warp,下发 MMA 指令;
  2. 取数:LD/ST 单元从显存(HBM)经 L2 缓存,把矩阵分块(Tile)载入 Shared Memory;
  3. 计算:Tensor Core 从 Shared Memory 取数,执行矩阵乘累加,结果暂存寄存器;
  4. 回写:寄存器中的结果经 Shared Memory → L2 → HBM,写回显存。

当模型达到百亿、千亿参数,权重矩阵过大,无法常驻 L2 或 Shared Memory,步骤 2 和 4 的“搬运”开销会远超步骤 3 的“计算”开销。此时你花大价钱买的不是算力,而是显存带宽,以及算法工程师减少数据搬运的能力。


五、小结

GPU 不是“有很多小 CPU 的芯片”,而是一个由 SM 计算阵列、严格分层的存储系统、硬件 Warp 调度器 精密耦合的专用并行处理器。

给大模型开发者的三条 takeaway:

  1. 看卡要看“铁三角”:SM 数量决定峰值算力,HBM 带宽决定算力能否兑现,显存容量决定能塞下多大的模型;
  2. 存储层级决定优化天花板:Shared Memory 的可编程性,是自定义算子(如 FlashAttention)超越框架原生实现的突破口;
  3. 调度机制解释了 Batch Size 的敏感性:训练吞吐和推理并发不是纯软件问题,而是你能不能喂饱 Warp Scheduler 的硬件问题。

在 15.3 节中,我们将进一步拆解 SM 内部的三类核心——CUDA Core、Tensor Core 与 RT Core,明确它们在大模型 Workload 中的具体分工,以及为什么 Hopper 的第四代 Tensor Core 是生成式 AI 的代际分水岭。