跳到主要内容
AIInfra前置基础

第5章:GPU 硬件概论

理解 GPU 架构设计哲学、存储层次、主流 GPU 规格对比和互联拓扑,为 CUDA 编程建立硬件认知

GPU 硬件架构 NVLink Roofline 存储层次

写 CUDA Kernel 之前必须先搞清楚”工厂怎么布局”——GPU 的硬件架构直接决定了代码的性能上限。本文从 GPU 与 CPU 的设计哲学差异讲起,系统介绍 SM / Tensor Core / 存储层次 / 主流 GPU 参数 / 互联拓扑,最后用 Roofline 模型把硬件参数串成一个分析工具。

📑 目录


1. CPU vs GPU:延迟 vs 吞吐

CPU 和 GPU 都在做计算,但设计哲学完全相反。

维度CPUGPU
设计目标单线程低延迟海量并行高吞吐
核心数量几十(高级缓存大)数千(简单 ALU 多)
控制逻辑复杂(分支预测、乱序执行)简单(SIMT,一组线程同步执行)
缓存三级 cache,L1 通常 32-64KBL1 较小,Shared Memory 可编程
适合任务串行控制、低延迟事务数据并行、矩阵运算

🌟 比喻:CPU 是几个博士组成的研究团队,每人能做复杂决策;GPU 是几千个流水线工人,每人只会拧一颗螺丝,但全员同时动作。AI 的核心计算都是矩阵乘法和向量加法——重复且独立的简单工作,正好是 GPU 的舞台。


2. GPU 内部:SM、Core、Warp

2.1 三层硬件结构

GPU(整张卡,例如 H100)
 └── SM × 132 (Streaming Multiprocessor,流多处理器)
      └── CUDA Core × 128 + Tensor Core × 4 (per SM)
           └── Warp(32 个线程,SIMT 最小调度单位)
含义类比
GPU一整张卡一座工厂
SM一组共享调度器和 Shared Memory 的执行单元工厂内的一个车间
CUDA Core单精度浮点单元一个工人
Tensor Core矩阵乘累加专用单元一台数控机床(批量做矩阵乘)
Warp32 线程一组,同步执行一个班组,同步做相同动作

2.2 Warp:GPU 调度的真正”原子单位”

GPU 不是按线程调度的,而是按 Warp(32 线程) 调度。一个 Warp 内的所有线程在同一个时钟周期执行同一条指令(SIMT,Single Instruction Multiple Thread)。

Warp Divergence:如果 Warp 内的线程因 if/else 走不同路径,GPU 会串行执行两条路径,把不属于该路径的线程 mask 掉:

if (tid % 2 == 0) {
    // 一半线程跑这里,另一半空转
    do_A();
} else {
    do_B();   // 然后另一半跑这里,前一半空转
}

避免 Warp Divergence 是 CUDA 优化的基本功。

2.3 Tensor Core:AI 时代的灵魂芯片

Tensor Core 是为矩阵乘累加(MMA)设计的专用单元,一个时钟周期能做一个 16×16×16 的矩阵乘加(FP16 累加到 FP32)。

架构Tensor Core 代际支持精度
Volta (V100)第 1 代FP16
Ampere (A100)第 3 代FP16, BF16, TF32, INT8, sparse
Hopper (H100)第 4 代+ FP8, sparse, async TMA
Blackwell (B200)第 5 代+ FP4, microscaling

关键事实:H100 的 FP16 算力 ≈ 989 TFLOPS,其中 超过 90% 来自 Tensor Core。CUDA Core 的 FP32 算力只有 67 TFLOPS——所以写 AI Kernel 不用 Tensor Core 等于浪费 90% 的算力


3. 存储层次:为什么 Memory Wall 致命

3.1 GPU 存储金字塔

                ┌──────────────────────┐
        快      │  寄存器 (Register)   │  ~256 KB / SM, 1 cycle
        ↑      ├──────────────────────┤
        │      │  Shared Mem / L1     │  ~228 KB / SM, ~30 cycle
        │      ├──────────────────────┤
        慢      │  L2 Cache            │  50-60 MB,~200 cycle
        ↓      ├──────────────────────┤
                │  HBM (显存)          │  80-141 GB,~400 cycle
                ├──────────────────────┤
                │  Host Memory (CPU)   │  TB 级,~10000 cycle (PCIe)
                └──────────────────────┘

带宽对比(H100 为例):

容量带宽
寄存器256 KB/SM~20 TB/s
Shared Memory228 KB/SM~10 TB/s
L2 Cache50 MB~5 TB/s
HBM380 GB3.35 TB/s
PCIe 5.064 GB/s(主机↔设备)

3.2 Memory Wall

Memory Wall:算力增长速度远超带宽增长速度,导致大多数 AI Kernel 不是被算力卡住,而是被显存带宽卡住。

举例:LLM Decode 阶段(batch 小、矩阵退化为向量),每次只用一点点算力,但要把整个权重和 KV Cache 从 HBM 搬到 SM——典型的 memory bound,带宽决定速度。

3.3 写 Kernel 的核心准则

最大化数据在快速存储中的复用,最小化对慢速存储的访问。

GEMM Tiling、FlashAttention 的核心都是这个准则:把数据分块加载到 Shared Memory / 寄存器,在快速存储中反复使用,只往 HBM 写最终结果。


4. 主流 GPU 参数对比

维度A100 80GBH100 SXMH200 SXMB200
架构AmpereHopperHopperBlackwell
SM 数量108132132148
FP16 (Tensor Core)312 TF989 TF989 TF2250 TF
FP8 (Tensor Core)1979 TF1979 TF4500 TF
显存类型HBM2eHBM3HBM3eHBM3e
显存容量80 GB80 GB141 GB192 GB
显存带宽2 TB/s3.35 TB/s4.8 TB/s8 TB/s
L2 Cache40 MB50 MB50 MB~80 MB
NVLink 带宽600 GB/s900 GB/s900 GB/s1800 GB/s
功耗 (TDP)400 W700 W700 W1000 W

几个直觉:

  • FP8 算力是 FP16 的 2 倍:推理走 FP8 是 H100 的杀手锏
  • H200 = H100 + 显存大升级:同算力但显存带宽 +43%,容量 +75%,大模型推理收益巨大
  • B200 显存带宽 8 TB/s:几乎是 A100 的 4 倍,长上下文推理大幅提升

5. Roofline:从硬件参数到性能预测

Roofline 模型把硬件的算力上限和带宽上限画在同一张图上,用 Arithmetic Intensity(算术强度) 把 Kernel 定位在图中:

AI=FLOPsBytes\text{AI} = \frac{\text{FLOPs}}{\text{Bytes}}

意思是:每搬一字节数据,做了多少次浮点运算。

5.1 Roofline 公式

实际性能 = min(Peak FLOPs,AI×Peak Bandwidth)\min(\text{Peak FLOPs}, \text{AI} \times \text{Peak Bandwidth})

性能 (TFLOPS)
   │      Peak FLOPs (算力屋顶)
   │  ┌────────────────────────
   │  /
   │ /  ← 斜率 = Peak Bandwidth
   │/
   └─────────────────────── Arithmetic Intensity (FLOPs/Byte)

    Ridge Point(算力 / 带宽)
  • AI < Ridge Point:Memory Bound,被带宽卡住,优化方向是减少访存
  • AI > Ridge Point:Compute Bound,被算力卡住,优化方向是用 Tensor Core / 提高吞吐

5.2 H100 的 Ridge Point

Ridge Point=989 TFLOPS3.35 TB/s295 FLOPs/Byte\text{Ridge Point} = \frac{989 \text{ TFLOPS}}{3.35 \text{ TB/s}} \approx 295 \text{ FLOPs/Byte}

意思是:只有当一个 Kernel 每搬 1 字节数据能做 295 次浮点运算,才能跑满 H100 的算力

KernelAI 估算类型
GEMM (大矩阵乘)100~500Compute Bound(Tensor Core 跑满)
Softmax1~5Memory Bound
LayerNorm1~3Memory Bound
Attention Decode< 1严重 Memory Bound
FlashAttention(算法优化后)10~30接近 Compute Bound

🌟 Roofline 的工程意义:看到一个 Kernel 慢,先算它的 AI,判断在屋顶下方还是斜坡上——决定是优化算法(降访存)还是优化计算(用 Tensor Core)。


6.1 单机内部互联

互联方式双向带宽(每对 GPU)用途
PCIe 4.0 x1664 GB/s主机↔GPU,慢速备选
PCIe 5.0 x16128 GB/s同上,新一代
NVLink 4 (H100)900 GB/sGPU↔GPU,14× PCIe
NVLink 5 (B200)1800 GB/sGPU↔GPU,28× PCIe
NVSwitch全互联8 卡之间任意一对都满速

6.2 多机互联

网络带宽延迟用途
Ethernet (10 GbE)1.25 GB/sμs慢速备份
InfiniBand HDR25 GB/s<1 μs主流多机
InfiniBand NDR50 GB/s<1 μs最新多机
RoCE v225-50 GB/sμs以太网上跑 RDMA

🌟 关键经验法则:

  • NVLink 比 IB 快 18-36 倍 —— 张量并行(高频 AllReduce)必须限制在单机 NVLink 内
  • IB 比 PCIe-only 快 几十倍 —— 跨机训练必须有 IB,纯以太网不可行
  • Pipeline 并行可以跨机 —— 因为通信量小且不是每步都通

6.3 看拓扑:nvidia-smi topo -m

        GPU0  GPU1  GPU2  GPU3
GPU0     X    NV4   NV4   NV4
GPU1    NV4    X    NV4   NV4
GPU2    NV4   NV4    X    NV4
GPU3    NV4   NV4   NV4    X
标记含义
NV#NVLink,数字代表链路条数
PIXPCIe Switch 同一桥下
PXB跨多个 PCIe Switch
NODE同 NUMA node
SYS跨 NUMA node(最慢)

排查”训练为什么慢”:如果应该走 NVLink 的两张卡显示成 SYS,说明 NCCL 走错通道,要检查 CUDA_VISIBLE_DEVICESNCCL_TOPO_FILE


✅ 自我检验清单

  • CPU vs GPU:能向小白解释”为什么矩阵乘法 GPU 比 CPU 快几十倍”
  • SM 与 Warp:能说清 Block / Warp / Thread 的层次,以及为什么 Block Size 应该是 32 的倍数
  • Tensor Core:能说出为什么不用 Tensor Core 等于浪费 90% 算力
  • 存储层次:能背诵寄存器 / Shared Mem / L2 / HBM 的容量与带宽量级
  • Memory Wall:能解释为什么 LLM Decode 是 memory bound,以及怎么诊断
  • H100 vs A100:能对比关键参数差异,以及哪些场景升级 H100 收益最大
  • Roofline 应用:给定 Kernel 的 AI,能判断它在屋顶下还是屋顶上,并指出优化方向
  • 拓扑判读:能看懂 nvidia-smi topo -m 输出,判断哪些卡走 NVLink、哪些走 PCIe
  • 并行策略选型:能解释为什么张量并行不能跨机、流水线并行可以跨机

📚 参考资料

官方资料

经典论文

  • Roofline: An Insightful Visual Performance Model (Williams et al., 2009)
  • Hopper Architecture Deep-Dive (NVIDIA GTC talk)

中文解读

  • 小小将:GPU 体系结构详解 —— 知乎专栏
  • 猛猿:NVIDIA H100 架构深度解析
  • 方佳瑞:从硬件视角理解 LLM 推理

系统级综述

  • AI Systems Performance Engineering(Chris Fregly, O’Reilly 2025):learning.oreilly.com —— Ch2 系统介绍 GB200 NVL72 / Grace-Blackwell 超级芯片 / NVLink-C2C 统一内存,是本章硬件全景的进阶延伸