AI Infra 硬核拆解:GPU 内存层级体系——大模型时代的性能天花板
在我们的 SM 架构系列文章中,我们已经深入解析了 SM 的计算核心(CUDA Core、Tensor Core)和调度机制(Warp 调度)。今天,我们终于要触及 AI 系统真正的性能天花板:GPU 内存层级体系。
毫不夸张地说,在大模型时代,90% 以上的性能瓶颈都在内存,而不是计算。一个 7B 模型的推理,计算只占不到 30% 的时间,剩下的 70% 都在等待数据从内存传输到计算单元。即使是训练,随着 Tensor Core 性能的指数级提升,内存带宽也已经成为了主要瓶颈。
不理解 GPU 的内存层级体系,你就永远无法真正解释为什么同样的 FLOPS 不同 GPU 实际性能差异巨大,为什么 FlashAttention 能带来数倍的性能提升,为什么大模型推理会受到显存容量的严格限制。
今天,我们就从硬件底层到软件优化,彻底搞清楚 GPU 的内存层级体系,以及它是如何决定 AI 系统的真实性能的。
一、为什么需要内存层级体系?内存墙问题
在开始之前,我们先思考一个最根本的问题:为什么 GPU 要设计这么复杂的内存层级体系?直接用一个又大又快的内存不好吗?
答案很简单:受限于物理定律和成本,我们无法制造出一个同时满足"大容量、高速度、低功耗、低成本"的内存。
- 速度越快的内存,单位容量的成本越高,功耗也越高
- 容量越大的内存,速度越慢,延迟越高
这就是著名的**内存墙(Memory Wall)**问题:计算单元的性能增长速度远远超过了内存的性能增长速度,导致计算单元经常处于空闲状态,等待数据从内存传输过来。
解决内存墙问题的唯一方法:利用局部性原理,构建一个多层级的内存体系。将频繁访问的数据放在靠近计算单元的高速内存中,将不频繁访问的数据放在远离计算单元的低速内存中。
正确的比喻:如果把计算单元比作一个厨师,那么内存层级体系就是:
- 寄存器:厨师手里的食材,伸手就能拿到
- 共享内存/L1缓存:厨房的操作台,几步就能走到
- L2缓存:餐厅的仓库,需要走几分钟
- HBM显存:超市,需要开车去买
厨师的工作效率,很大程度上取决于他需要多少次去超市买东西。
二、GPU 内存层级体系概览
现代 GPU 采用严格的分层内存设计,从快到慢、从小到大依次是:
GPU 内存层级 ├── 寄存器文件(Register File) │ └── 每个 SM 独立拥有 ├── L1 缓存 / 共享内存(L1 Cache / Shared Memory) │ └── 每个 SM 独立拥有,可软件划分 ├── L2 缓存(L2 Cache) │ └── 所有 SM 共享 └── 全局显存(Global Memory) └── 所有 SM 共享,即 HBM核心设计原则:
- 越靠近计算单元的内存,速度越快,容量越小
- 越远离计算单元的内存,速度越慢,容量越大
- 上层内存是下层内存的缓存
各层内存的典型性能对比(以 H100 为例):
| 内存类型 | 每个 SM 容量 | 总容量 | 延迟(时钟周期) | 带宽(每个 SM) | 总带宽 | 谁管理 |
|---|---|---|---|---|---|---|
| 寄存器 | 256 KB | ~36 MB | 1 | ~19 TB/s | ~2700 TB/s | 编译器 |
| 共享内存 | 228 KB | ~32 MB | 20-30 | ~3 TB/s | ~430 TB/s | 程序员 |
| L1 缓存 | 228 KB | ~32 MB | 20-30 | ~3 TB/s | ~430 TB/s | 硬件 |
| L2 缓存 | - | 50 MB | 150-200 | - | 3.35 TB/s | 硬件 |
| HBM3 | - | 80 GB | 400-800 | - | 3.35 TB/s | 程序员 |
震撼的数字:寄存器的带宽是 HBM 的800 倍,延迟是 HBM 的1/400。这就是为什么我们要尽可能将数据留在寄存器中的原因。
三、寄存器文件:最快的存储,也是最容易被忽视的
寄存器文件是 GPU 上最快的存储,也是整个内存层级体系的基石。但同时,它也是最容易被程序员忽视的一层,因为它完全由编译器管理。
3.1 寄存器的基本特性
- 每个 SM 独立拥有:H100 每个 SM 有 256 KB 的寄存器文件,整个 GPU 共有 144 × 256 KB = 36 MB 的寄存器
- 线程私有:每个线程有自己独立的寄存器集合,其他线程无法访问
- 零延迟访问:寄存器访问只需要 1 个时钟周期,和计算本身的延迟一样
- 极高带宽:H100 每个 SM 的寄存器带宽约为 19 TB/s,是 HBM 的 5.7 倍
3.2 寄存器的分配与管理
寄存器是动态分配给活跃线程的。当一个 Warp 被调度到 SM 上时,SM 会为 Warp 中的每个线程分配所需的寄存器。
关键限制:寄存器的数量直接决定了 SM 能够同时驻留的 Warp 数量。
- 如果每个线程使用 32 个寄存器,那么一个 Warp(32 个线程)需要 32 × 32 = 1024 个寄存器
- H100 每个 SM 有 256 KB = 65536 个 32 位寄存器
- 所以每个 SM 最多可以驻留 65536 ÷ 1024 = 64 个 Warp,刚好达到 SM 的最大 Warp 数限制
但如果每个线程使用 64 个寄存器,那么一个 Warp 需要 2048 个寄存器,每个 SM 最多只能驻留 32 个 Warp,SM 占用率只有 50%。
3.3 寄存器溢出:性能的隐形杀手
当一个线程需要的寄存器数量超过了编译器能够分配的数量时,就会发生寄存器溢出(Register Spilling)。编译器会将多余的变量"溢出"到 L1 缓存甚至全局内存中。
寄存器溢出的性能影响:
- 一次寄存器溢出会导致一次内存访问,延迟从 1 个周期增加到 20 个周期以上
- 严重的寄存器溢出会导致性能下降 2-10 倍
- 这是很多 AI 算子性能不佳的主要原因之一
AI 工作负载中的寄存器优化:
- 减少每个线程的变量数量
- 尽量使用短生命周期的变量
- 避免使用大的数组或结构体
- 使用编译器选项
-maxrregcount限制每个线程的寄存器使用量
四、L1 缓存 / 共享内存:最灵活的片上存储
L1 缓存和共享内存是 GPU 内存体系中最特殊的一层,因为它们是同一个物理内存的不同逻辑划分。程序员可以根据需要调整它们之间的比例。
4.1 基本特性
- 每个 SM 独立拥有:H100 每个 SM 有 228 KB 的 L1/共享内存
- 可软件划分:可以配置为 0 KB 共享内存 + 228 KB L1 缓存,或 228 KB 共享内存 + 0 KB L1 缓存,或中间的任意比例
- 低延迟高带宽:访问延迟约 20-30 个时钟周期,带宽约 3 TB/s per SM
- 线程块共享:共享内存是同一个线程块内的所有线程共享的,L1 缓存是同一个 SM 内的所有线程共享的
4.2 L1 缓存:自动管理的高速缓存
L1 缓存是由硬件自动管理的,用于缓存频繁访问的全局内存数据。它的工作原理和 CPU 的 L1 缓存类似。
L1 缓存的特点:
- 硬件自动加载和淘汰数据
- 对程序员透明
- 缓存行大小为 128 字节
- 写回策略:写入 L1 缓存的数据不会立即写回全局内存
AI 工作负载中的 L1 缓存:
- 主要用于缓存模型参数和中间结果
- 对于小的算子,L1 缓存可以显著提高性能
- 对于大的算子,L1 缓存的作用有限,因为数据太大无法全部缓存
4.3 共享内存:程序员可控的片上存储
共享内存是 GPU 编程中最强大也最复杂的工具。它是唯一一块程序员可以直接控制的片上内存。
共享内存的核心用途:
- 线程间通信:同一个线程块内的线程可以通过共享内存交换数据
- 数据重用:将频繁访问的数据加载到共享内存中,减少对全局内存的访问
- 内存访问模式优化:将非连续的全局内存访问转换为连续的共享内存访问
4.4 共享内存的 Bank 冲突:最常见的性能陷阱
共享内存被分成 32 个独立的 Bank,每个 Bank 每个周期只能被访问一次。如果多个线程同时访问同一个 Bank,就会发生Bank 冲突,导致访问被串行化,性能下降。
Bank 冲突的严重程度:
- 0 个冲突:所有线程访问不同的 Bank,性能 100%
- 1 个冲突:2 个线程访问同一个 Bank,性能 50%
- 31 个冲突:32 个线程访问同一个 Bank,性能 1/32
解决 Bank 冲突的方法:
- 添加填充:在共享内存数组的末尾添加一个额外的元素,使数组的宽度不是 32 的倍数
- 改变数据布局:将行优先布局改为列优先布局,或反之
- 使用向量化访问:每个线程访问多个连续的元素
AI 算子中的 Bank 冲突:矩阵乘法和注意力机制是最容易发生 Bank 冲突的算子。FlashAttention 的一个重要优化就是通过精心设计的数据布局,完全消除了共享内存的 Bank 冲突。
五、L2 缓存:所有 SM 的共享缓冲区
L2 缓存是所有 SM 共享的统一缓存,它是片上内存和片外显存之间的桥梁。
5.1 基本特性
- 所有 SM 共享:H100 有 50 MB 的 L2 缓存,B100 有 192 MB 的 L2 缓存
- 硬件自动管理:对程序员透明
- 统一地址空间:所有 SM 看到的 L2 缓存是一致的
- 带宽与 HBM 相同:H100 的 L2 缓存带宽和 HBM 带宽相同,都是 3.35 TB/s,在 Hopper、Ampere、Ada Lovelace 架构上,速度比 L1 慢 6.5 倍
5.2 L2 缓存的作用
L2 缓存的主要作用是:
- 缓存频繁访问的数据:减少对 HBM 的访问
- SM 间通信:不同 SM 上的线程可以通过 L2 缓存交换数据
- 原子操作的执行:所有原子操作都在 L2 缓存中执行
5.3 大模型时代 L2 缓存的重要性
在大模型时代,L2 缓存的重要性急剧上升。这是因为:
- 大模型的参数很多,无法全部放在片上内存中
- 但模型的不同部分被访问的频率是不同的
- L2 缓存可以缓存频繁访问的参数,显著减少对 HBM 的访问
Blackwell B100 的重大改进:B100 将 L2 缓存从 H100 的 50 MB 增加到了 192 MB,增加了近 4 倍。这使得 B100 可以缓存整个 7B 模型的 FP8 权重,从而将推理性能提升了 2 倍以上。
六、全局显存 / HBM:AI 系统的生命线
全局显存,也就是我们常说的 HBM(高带宽内存),是 GPU 上最大也是最慢的一层内存。但同时,它也是 AI 系统的生命线,因为所有的模型参数、输入数据和中间结果都存储在这里。
6.1 HBM 的基本原理
HBM 是一种 3D 堆叠的内存技术,它将多个内存芯片堆叠在一起,通过硅通孔(TSV)连接,从而实现极高的带宽。
HBM 的核心优势:
- 极高的带宽:HBM3 可以实现超过 3 TB/s 的带宽,是 GDDR6 的 3 倍以上
- 极低的功耗:HBM 的每比特功耗只有 GDDR6 的 1/3
- 紧凑的尺寸:3D 堆叠技术大大减小了内存的占用面积
6.2 HBM 的性能特性
- 高带宽,高延迟:HBM 的带宽很高,但延迟也很高,约 400-800 个时钟周期
- 突发访问:HBM 最适合连续的大块数据访问,连续访问的带宽可以达到理论峰值的 90% 以上
- 随机访问性能差:随机访问的带宽只有理论峰值的 10% 左右
HBM 带宽的计算:
HBM 带宽 = 内存频率 × 总线宽度 × 2(DDR)
例如,H100 使用的 HBM3:
- 内存频率:5.2 Gbps
- 总线宽度:每个 HBM 堆栈 1024 位,共 5 个堆栈,总总线宽度 5120 位
- 带宽:5.2 Gbps × 5120 位 ÷ 8 = 3.328 TB/s
6.3 大模型时代的 HBM 瓶颈
在大模型时代,HBM 已经成为了最主要的性能瓶颈和成本瓶颈:
性能瓶颈:
- 一个 7B 模型的 FP16 权重有 14 GB,每次推理都需要将整个模型从 HBM 加载到计算单元
- 即使 HBM 带宽达到 3.35 TB/s,加载整个模型也需要约 4 毫秒
- 而计算只需要约 1 毫秒,所以 80% 的时间都在等待数据
成本瓶颈:
- HBM 是 GPU 上最昂贵的组件,占 GPU 总成本的 50% 以上
- 一个 80 GB 的 HBM3 堆栈的成本超过 1000 美元
- 这就是为什么大模型 GPU 如此昂贵的主要原因
6.4 HBM 的未来发展
HBM 的发展方向是:
- 更高的带宽:HBM4 的带宽将达到 8 TB/s 以上
- 更大的容量:单堆栈容量将达到 128 GB 以上
- 更低的功耗:每比特功耗将进一步降低
但即使如此,HBM 的性能增长速度仍然远远落后于 Tensor Core 的性能增长速度,内存墙问题会越来越严重。
七、内存层级体系的核心设计哲学:局部性原理
整个 GPU 内存层级体系的设计都是基于一个核心原理:局部性原理。
局部性原理分为两种:
- 时间局部性:如果一个数据被访问了,那么它在不久的将来很可能会被再次访问
- 空间局部性:如果一个数据被访问了,那么它附近的数据很可能也会被访问
所有的内存优化都是围绕着如何更好地利用局部性原理展开的:
- 缓存利用时间局部性,将频繁访问的数据留在高速内存中
- 合并内存访问利用空间局部性,一次访问连续的大块数据
- 数据重用同时利用时间局部性和空间局部性
八、训练和推理数据的流向
训练遵循可预测的流程。以在 8 个 H100 GPU 上训练 Llama 70B 为例:
- 第一阶段:存储 → CPU 内存
训练数据(分词后的文本,约 1 TB)存储在 NVMe 固态硬盘上。PyTorch DataLoader 会生成工作进程,将数据批次读入 CPU 内存。由于 CPU 预处理瓶颈,默认的 DataLoader 仅实现了 57.4% 的 GPU 利用率 。
- 第二阶段:CPU预处理
每个工作进程都在 CPU 上进行数据解码、预处理和批处理。对于视觉任务(例如 ImageNet),这包括 JPEG 解码、调整大小和数据增强等 CPU 密集型操作。多进程加载通过跨核心并行处理,可提供 1.5 到 5 倍的加速 。
- 第三阶段:CPU → GPU 传输
通过 PCIe 进行批量传输。PCIe Gen4 x16:约 32 GB/s。PCIe Gen5 x16:约 64 GB/s [14]。但问题在于:在 8 GPU 服务器中,所有 GPU 共享上行链路。每个 GPU 获得的有效带宽约为 8 GB/s,而非 64 GB/s。
PCIe 具有 1.54% 的编码开销(128b/130b 方案)[15]。实际利用率:由于协议开销、中断处理和操作系统延迟,显卡仅能达到理论带宽的约 19% 。
- 第四阶段:HBM → L2 → L1 → 寄存器(前向传递)
模型权重存储在 HBM 中(FP16 为 700 亿个参数 × 2 字节 = 140 GB)。前向传播期间:
- 权重流从 HBM 流向 L2 缓存(在 H100 上为 258–743 个周期)
- L2 流向 L1(速度快 6.5 倍)
- L1 为实际计算提供寄存器输入
每个Transformer层都执行矩阵乘法(Q、K、V投影)、注意力机制和前馈网络。在HBM中,激活值会在层间累积。
- 第五阶段:反向传播(梯度 → HBM)
反向传播算法会计算每个参数的梯度。这些梯度会写回 HBM。对于 Llama 70B 来说,这需要额外 140 GB 的梯度存储空间。
多 GPU 训练通过 NVLink 或 InfiniBand 增加了梯度同步(all-reduce),正如我们在网络带宽分析中所述。
- 第六阶段:优化器更新
AdamW 优化器为每个参数维护两个状态张量(动量和方差)。对于 700 亿个参数,FP32 格式总共需要 420 GB 的数据。优化器从 HBM 读取梯度,计算更新,然后将新的权重写回 HBM。
训练受限于内存带宽。模型 FLOPs 利用率 (MFU) 通常为 30-50%——GPU 会因内存访问而停滞,而不是因计算而停滞 。
推理阶段:流程更简单,瓶颈不同
推理过程跳过了第 5-6 阶段(没有梯度,也没有优化器)。
九、AI 工作负载的内存特性与优化要点
理解了内存层级体系,我们就可以针对性地优化 AI 工作负载的性能。
9.1 Transformer 模型的内存访问模式
Transformer 模型的内存访问模式有以下特点:
- 参数访问具有良好的时间局部性:模型参数在每次前向传播中都会被访问一次
- 中间结果具有良好的空间局部性:中间结果通常是连续存储的
- 注意力机制的内存访问模式很差:注意力机制需要访问非连续的内存地址,并且数据重用率很低
9.2 推理阶段优化
推理过程跳过了第 5-6 阶段(没有梯度,也没有优化器)。但它引入了一个新的内存消耗大户:键值缓存。
KV缓存机制
Transformer 模型利用注意力机制:每个 token 都会关注之前所有 token。在解码阶段,每个新 token 都需要来自之前所有 token 的键 (K) 和值 (V) 张量。每一步都重新计算这些张量会造成资源浪费。
解决方案:将 K 和 V 张量缓存到 HBM 中。
Llama 2 7B 的内存计算 [18]:
d_head = 128,n_heads = 32,n_layers = 32
- 每个令牌的键值缓存:2 × (128 × 32 × 32) × 2 字节 (FP16) = 约 512 KB
- 对于 4096 个令牌的上下文:仅 KV 缓存就需要大约 2 GB 的空间
- 对于长上下文,KV 缓存占据了大部分内存。在 Llama 70B 上,一个 32K 的上下文仅缓存张量就消耗了 60+ GB 的内存——比模型权重还要多 [19]。
预填充与解码
推理分为两个阶段:
- 预填充:并行处理所有输入标记(计算密集型)
- 解码:自回归生成令牌(受内存带宽限制)
解码是瓶颈所在。每次生成令牌都需要从 HBM 加载整个模型(Llama 70B 大约需要 140 GB)才能生成一个令牌。决定吞吐量的是内存带宽,而不是计算能力。
在大批量推理中,注意力机制中的 DRAM 带宽饱和是主要瓶颈。超过 50% 的注意力周期因等待内存而停滞 。
9.3 闪回注意力:寄存器优化
Flash Attention(Dao 等人,2022 年)是内存层次结构优化的一个教科书式的例子。
标准注意:
- 计算Q⋅KTQ·K^TQ⋅KT→ n×n 矩阵(二次方内存:O(n²))
- 将Q⋅KTQ·K^TQ⋅KT写入 HBM
- 从 HBM 读取 → Softmax → 写入 HBM
- 从 HBM 读取 → 乘以 V → 输出
- 对于 4K 序列,Q⋅KTQ·K^TQ⋅KT为 4096×4096 = 64 MB。标准注意力机制会多次读写此矩阵。
HBM 访问量:Ω(Nd + N²) 其中 N = 序列长度,d = 磁头尺寸 [21]
闪回式注意力策略:
- 将 Q、K、V 分割成适合 SRAM(共享内存 + 寄存器)的块。对于 H100,每个 SM 的 SRAM 容量为 228 KB。
- 将 Q tile、K tile和 V tile加载到 SRAM 中
- 完全在 SRAM 中逐块计算注意力。
- 使用在线softmax(无需实例化完整矩阵即可进行增量计算)
- 仅将最终输出写入 HBM
- HBM 访问次数:O(N²d²M⁻¹) 其中 M = SRAM 大小
对于典型值(d=128,M=228KB),Flash Attention 的 HBM 访问次数减少了 9 倍。
基准测试结果:
GPT-2(1K 序列):速度提升 3 倍 [21],BERT-large(512 序列):比 MLPerf 记录提升 15% 的端到端速度 .序列长度 2K:节省 10 倍内存, 序列长度 4K:节省 20 倍内存 .
Flash Attention 2 (Dao, 2023) [22] 进一步优化了并行性:
- 比 Flash Attention 1 快 2 倍
- 比 PyTorch 标准注意力机制快 9 倍
- 在 A100 上实现了理论最大 FLOPs/s 的 50–73%
关键在于:避免将中间结果(Q⋅KTQ·K^TQ⋅KT)写入速度较慢的HBM内存。所有数据都应保存在高速SRAM/寄存器中,直到最终输出。这样可以减少10-20倍的内存流量。
9.4 现代数据加载:绕过 CPU
存储→CPU→GPU这条流水线存在CPU瓶颈。现代库可以绕过这个瓶颈。
GPU 直接存储 (GDS)
传统模式:存储→CPU内存→GPU HBM(两份拷贝,PCIe交叉两次)
GDS模式:存储→GPU HBM(直接DMA,单份拷贝)
NVMe 通过 DMA 直接与 GPU 内存通信,完全绕过了 CPU。
性能:带宽提高 2-8 倍,延迟降低 3.8 倍 [23]。在 TPC-H 基准测试中:与非 GDS 相比,速度提高 6.7-32.8 倍 [24]。
NVIDIA DALI
将预处理(解码、调整大小、增强)从 CPU 转移到 GPU。
为什么?GPU 拥有超过 3000 GB/s 的内部带宽(HBM + 寄存器 + 计算),而 CPU 只有 25–67 GB/s(DDR4/DDR5)。对于数据并行操作,GPU 上的预处理速度比 CPU 快 10–100 倍。
基准测试[25]:
ResNet50:训练时间减少37%
ResNet152:训练时间减少43%
U-Net3D:端到端速度提升 2 倍
FFCV:
优化文件格式,以便进行顺序 GPU 读取。离线预处理(调整大小、归一化)并以优化后的布局存储。
结果:通过消除 CPU 预处理瓶颈,ImageNet 训练速度提升了 30 倍 [26]。在 AWS A100 上,FFCV 相比于原生 PyTorch,总训练成本降低了 52%–68% [27]。
这些库都秉持着相同的理念:最大限度地减少慢速内存层之间的数据移动;将计算转移到数据已经存在的地方(GPU),或者优化数据布局以最大限度地提高顺序访问模式(FFCV)。
9.5 其他针对 AI 工作负载的内存优化技术
- 算子融合:将多个小算子融合成一个大算子,减少中间结果的内存访问
- 数据重排:将数据重新排列成适合 GPU 内存访问的格式
- 混合精度:使用 FP16、BF16 或 FP8 精度,减少内存访问量
- 模型并行:将模型参数分布到多个 GPU 上,每个 GPU 只需要存储一部分参数
9.3 内存优化的优先级
内存优化应该按照以下优先级进行:
- 首先优化 HBM 访问:因为 HBM 是最慢的一层,优化 HBM 访问带来的收益最大
- 然后优化 L2 缓存访问:提高 L2 缓存的命中率
- 然后优化共享内存访问:避免 Bank 冲突,提高共享内存的利用率
- 最后优化寄存器使用:减少寄存器溢出,提高 SM 占用率
十、常见误区与最佳实践
误区 1:带宽越高,性能越好
真相:理论带宽只是一个上限,实际能达到的带宽取决于内存访问模式。连续访问可以达到 90% 以上的理论带宽,而随机访问只能达到 10% 左右。
最佳实践:尽量使用连续的内存访问模式,避免随机访问。
误区 2:共享内存越大越好
真相:共享内存和 L1 缓存是同一个物理内存的不同划分。增加共享内存的大小会减少 L1 缓存的大小,可能会导致 L1 缓存命中率下降,整体性能反而降低。
最佳实践:根据算子的特性选择合适的共享内存大小。对于数据重用率高的算子,使用较大的共享内存;对于数据重用率低的算子,使用较小的共享内存。
误区 3:所有数据都应该放在共享内存中
真相:将数据从全局内存加载到共享内存需要时间。如果数据只被访问一次,那么加载到共享内存反而会增加延迟。
最佳实践:只有当数据会被多次访问时,才将其加载到共享内存中。
误区 4:寄存器使用量越少越好
真相:减少寄存器使用量可以提高 SM 占用率,但如果每个线程的指令数增加,整体性能可能会下降。
最佳实践:通过实验找到最佳的寄存器使用量和 SM 占用率的平衡点。
十一、总结与学习建议
GPU 的内存层级体系是 AI 系统性能的决定性因素。在大模型时代,内存已经取代计算成为了主要的性能瓶颈。理解内存层级体系,是成为一名优秀 AI Infra 工程师的必备技能。
核心要点回顾:
- GPU 采用多层级内存体系,从快到慢依次是:寄存器、共享内存/L1 缓存、L2 缓存、HBM
- 寄存器是最快的存储,带宽是 HBM 的 800 倍,延迟是 HBM 的 1/400
- 共享内存是程序员可控的片上内存,Bank 冲突是最常见的性能陷阱
- L2 缓存在大模型时代变得越来越重要,B100 的 192 MB L2 缓存可以缓存整个 7B 模型
- HBM 是 AI 系统的生命线,也是最主要的性能和成本瓶颈
- 所有的内存优化都是围绕着如何更好地利用局部性原理展开的