GPU 学习日报 Day 1:CPU vs GPU:为什么 GPU 适合大模型
30 天学习计划 | Week 1 - 建立 GPU 心智模型 | Day 1/30
今日主题: CPU 与 GPU 的体系结构差异
CPU vs GPU:为什么 GPU 适合大模型
在大模型(LLM)推理的物理世界中,GPU 之所以成为绝对主导,根本原因在于其底层硬件架构与 Transformer 模型的数学计算特征实现了完美契合。CPU 的设计哲学是“单兵作战,极速响应”,它将大部分晶体管投入到复杂的控制电路和超大缓存上,以极低的延迟处理串行任务;而 GPU 的设计哲学是“集团军冲锋,高吞吐量”,它将绝大部分晶体管转化为数百个简单的计算核心,通过成千上万个线程的并行来掩盖内存访问延迟。
Transformer 的核心运算是大规模密集矩阵乘法,这种计算具有高度的规则性和数据并行性。GPU 凭借 SIMT(单指令多线程)执行模型,能够将这些庞大的矩阵运算拆解为数以万计的独立线程同时推进。理解 CPU 与 GPU 的体系结构差异,不仅是理解大模型推理性能瓶颈的基石,更是后续进行算子优化、显存管理和并行策略设计的物理先决条件。
一、背景与动机:为什么大模型时代需要重新认识硬件
在过去十年中,深度学习从简单的 MLP 走向了如今参数量动辄千亿的大语言模型(LLM)。模型参数量的爆炸式增长,使得计算量从“兆级”(MFLOPS)飙升至“百亿亿级”(EFLOPS)。
在这一演进过程中,传统的 CPU 体系结构遭遇了物理瓶颈。CPU 的设计初衷是为了运行操作系统、数据库和复杂的业务逻辑,它追求的是单线程的极致低延迟,而非数据吞吐量。当面对大模型动辄数千维度的矩阵乘法时,CPU 的少量核心显得捉襟见肘,大部分时间都浪费在数据搬运和复杂指令解码上。
大模型推理本质上是一个高吞吐量与显存带宽极限博弈的游戏。要在这个游戏中胜出,我们必须深入理解硬件底层的执行逻辑,建立起“代码如何映射到硅片”的物理直觉。只有弄清 CPU 与 GPU 的分野,我们才能真正理解为什么 CUDA 核心、Tensor Core 和高带宽显存(HBM)会成为大模型时代的“算力三剑客”。
二、核心内容:CPU 与 GPU 的体系结构差异
1. CPU 的设计目标:低延迟与复杂控制流
CPU(Central Processing Unit,中央处理器) 的核心设计目标是低延迟。它像是一个极其聪明的全能学者,擅长处理复杂的逻辑分支、任务调度和指令间的依赖关系。
为了实现低延迟,CPU 在芯片面积分配上做出了极大的妥协。一个典型的 CPU 核心中,实际的算术逻辑单元(ALU)只占很小一部分,绝大部分硅片面积被用于:
- 大容量多级缓存(L1/L2/L3 Cache):为了减少访问主存(DRAM)带来的百纳秒级延迟,CPU 试图将常用数据保持在离计算单元最近的缓存中。
- 复杂的控制电路:包括分支预测器、乱序执行引擎等。当遇到
if-else语句时,CPU 会预测哪条分支会执行,并提前将指令乱序发射执行,从而避免流水线停顿。 - 指令级并行:CPU 通过在一个时钟周期内同时发射并执行多条不相关的指令来榨取性能。
这种设计使得 CPU 在处理串行、复杂控制流任务时游刃有余,但在面对大模型那种“无分支、海量数据”的矩阵运算时,庞大的控制电路和缓存反而成了累赘,导致芯片面积利用率极低,吞吐量上不去。
2. GPU 的设计目标:高吞吐与隐藏 Memory Latency
与 CPU 相反,GPU(Graphics Processing Unit,图形处理器) 的核心设计目标是高吞吐量。GPU 像是一支由成千上万个普通工人组成的流水线,每个人只能做简单的加减乘除,但胜在人多力量大。
GPU 的架构被称为 SIMT(Single Instruction, Multiple Threads,单指令多线程)。它将芯片面积极大地倾斜给了计算单元(ALU),而极大地削减了缓存和控制逻辑。GPU 没有像 CPU 那样复杂的分支预测和乱序执行机制,而是采用一种极其有效的策略来应对内存访问延迟:线程级并行。
当 GPU 中的某个线程因为等待内存数据而停顿时,硬件调度器会瞬间切换到另一个准备就绪的线程继续执行计算。由于 GPU 内部维护了成千上万个线程的上下文,它总能在零周期切换开销内找到有事可做的线程。这就是所谓的隐藏内存延迟。GPU 不追求单条指令多快完成,而是保证在任何时刻,芯片内的计算单元都在满载运行。
3. Latency vs Throughput 的本质区别
要理解 CPU 与 GPU 的差异,必须从物理直觉上区分两个概念:延迟和吞吐量。
- 延迟:从发出指令到拿到结果所需的时间。相当于你独自去超市买一瓶水,开车来回的时间。
- 吞吐量:在单位时间内能够处理的数据总量。相当于一辆能装 100 人的大巴车,从起点到终点的时间可能比私家车长,但由于它一次运 100 人,其单位时间运送乘客的吞吐量远超私家车。
CPU 是“低延迟、低吞吐”的跑车;GPU 是“高延迟、高吞吐”的大巴车。在大模型推理中,一个 Transformer 层的矩阵乘法包含数百万个浮点乘加运算。如果用 CPU 做,相当于派跑车跑几百万趟;而用 GPU 做,则是派几万辆大巴车一次性运完。显然,大模型的数学特征决定了它是一个典型的吞吐量受限问题,天然属于 GPU 的主场。
4. SIMD / SIMT 执行模型
SIMD(Single Instruction, Multiple Data,单指令多数据) 是一种传统的并行执行模型,CPU 的 AVX 指令集就采用这种模式。在 SIMD 中,一条指令同时处理一个向量中的多个数据。缺点是如果遇到分支,不同数据需要走不同逻辑,SIMD 就必须串行执行所有分支,并用掩码屏蔽不需要的结果,效率大打折扣。
SIMT(Single Instruction, Multiple Threads,单指令多线程) 是 NVIDIA 针对 GPU 提出的创新执行模型。在 SIMT 中,多个线程被组织成一个 Warp(线程束)(通常是 32 个线程)。GPU 的控制单元向整个 Warp 发射同一条指令,但这 32 个线程各自有独立的寄存器和程序计数器(PC)。
SIMT 相比 SIMD 的优势在于“弹性”:虽然同一时刻一个 Warp 执行的是同一条指令,但由于线程是独立的,硬件可以在遇到分支时,让不同线程执行不同的路径(虽然此时会发生 Warp Divergence,即线程束分叉,导致串行执行,但架构上是支持的)。对于大模型中无分支的密集矩阵运算,SIMT 模型能够以极低的控制开销,驱动海量计算核心同步执行乘加操作。
5. 为什么 GPU 可以拥有大量计算单元
从芯片制造物理来看,硅片面积是固定的。为什么 GPU 能塞进成百上千个核心,而 CPU 只有十几个?
答案在于晶体管的分配策略。CPU 为了实现复杂的乱序执行和分支预测,需要极其庞大的控制逻辑和重排缓冲区(ROB)、寄存器重命名表等。这些逻辑电路占据了 80% 以上的芯片面积,导致能留给 ALU 的空间极少。
GPU 则完全不同。由于采用 SIMT 模型,一个 Warp 的 32 个线程共享同一个取指/译码单元和控制逻辑。这意味着 GPU 不需要为每个核心配备复杂的控制电路,省下的巨大面积全部用来堆砌 ALU。在 NVIDIA 的架构中,多个 ALU 组成一个 SM(Streaming Multiprocessor,流多处理器),多个 SM 又组成整个 GPU。这种“一个控制单元指挥大量 ALU”的架构,使得 GPU 在同等晶体管规模下,计算核心数量是 CPU 的数百倍,完美契合大模型对海量算力的渴求。
6. Transformer 为什么天然适合 GPU
最后,我们将目光落回大模型本身。Transformer 架构为什么与 GPU 如此契合?
- 计算密集型:Transformer 的核心是自注意力机制和前馈神经网络,其底层运算是 $Y = X \times W$ 的矩阵乘法。矩阵乘法中每个元素的计算相互独立,且计算量随维度呈立方级增长。这种海量、规则、无分支的乘加运算,完美匹配 GPU 的 SIMT 执行模型。
- 高算术强度:算术强度是指每字节内存访问对应的浮点运算次数。Transformer 的矩阵越大,其算术强度越高。这意味着 GPU 强大的计算单元不会因为等数据而闲置,高带宽显存(HBM)配合大量并行���程足以隐藏延迟。
- 无复杂控制流:在模型推理的前向传播中,不存在像传统软件那样复杂的
if-else跳转,整个计算图是静态且确定的数据流图。这避免了 GPU 最害怕的 Warp Divergence,保证了计算流水线的满载运行。
三、图示与对比:建立物理直觉
为了更直观地理解,我们通过 ASCII 图和对比表格来展示两者的差异。
CPU vs GPU 芯片面积分配示意图
1 | ======================= CPU 架构 (Core i9 为例) ======================= |
核心特性对比表
| 特性维度 | CPU (中央处理器) | GPU (图形处理器) |
|---|---|---|
| 设计目标 | 极低延迟 | 极高吞吐量 |
| 并行机制 | ILP (指令级并行) | TLP (线程级并行) |
| 执行模型 | 乱序执行、分支预测 | SIMT (单指令多线程) |
| 芯片面积占比 | 控制逻辑与大缓存占 >80% | 计算 ALU 占 >80% |
| 核心数量 | 少 (十几个) | 多 (数千个 CUDA Core) |
| 内存延迟应对 | 大容量多级缓存命中 | 频繁切换线程掩盖延迟 |
| 适合任务 | 复杂逻辑、操作系统、串行任务 | 密集型计算、矩阵运算、并行渲染 |
四、实践练习与思考题
思考题:Transformer 的矩阵运算为什么天然适合 GPU 的 SIMT 执行模型?
参考解析:
- 数据并行映射:在 Transformer 的注意力计算 $Q \times K^T$ 中,输出矩阵的每一个元素 $(i, j)$ 的计算仅依赖于 $Q$ 的第 $i$ 行和 $K$ 的第 $j$ 行,不同元素之间互不依赖。我们可以将输出矩阵的每个元素分配给一个独立的 GPU 线程计算。由于一个 Warp 包含 32 个线程,这 32 个线程可以同时计算输出矩阵中相邻的 32 个元素,它们执行的指令完全相同(点积运算),只是访问的数据不同,完美契合 SIMT“单指令多数据/线程”的本质。
- 无分支特性:点积运算本质上是连续的乘加(MAD)操作循环,内部没有条件跳转指令。这保证了在 SIMT 模型下,整个 Warp 的 32 个线程在任何一个时钟周期内都不会发生分叉,硬件流水线始终满载运行,将硅片利用率推向极限。
五、与 LLM Inference 的关联
理解 CPU 与 GPU 的架构差异,对于大模型推理性能优化具有直接的指导意义:
- Kernel 融合:既然 GPU 的控制逻辑极简且吞吐量巨大,我们在编写推理引擎(如 vLLM, TensorRT-LLM)时,应尽量将多个小算子融合成一个大 Kernel,以减少指令发射开销和显存读写延迟。
- 访存优化:由于 GPU 依赖 TLP 隐藏延迟而非大缓存,如果发生未对齐访问或产生大量显存碎片,会导致 Warp 内线程无法同时获取数据,造成计算单元空转。因此,显存连续性布局和 PagedAttention 等技术至关重要。
- 避免分支:在编写自定义 CUDA 算子时,应极力避免在 Warp 内部使用
if-else。即使必须分段处理,也应让整个 Warp 走同一分支,防止 SIMT 退化成串行执行。
六、FAQ
Q1: 既然 GPU 计算能力这么强,为什么不能用 GPU 完全替代 CPU?
A: GPU 的 SIMT 模型要求代码具有高度的规则性和数据并行性。而操作系统、数据库、网络协议栈等任务充满了复杂的逻辑分支、中断处理和串行依赖。如果用 GPU 运行这些任务,其极简的控制逻辑会导致严重的流水线停顿,性能反而极差。CPU 和 GPU 是互补关系:CPU 负责“指挥与调度”,GPU 负责“大规模集团冲锋”。
Q2: SIMD 和 SIMT 在实际编程中有什么具体区别?
A: 在 SIMD(如 CPU AVX 指令)中,你操作的是一个向量寄存器,如果遇到 if 分支,你必须用位掩码把不需要的结果屏蔽掉,所有路径的指令实际上都在执行。而在 SIMT(如 CUDA)中,每个线程有自己的 PC,如果遇到 if,不满足条件的线程可以真的不执行那条路径(尽管同 Warp 内满足条件的线程需要等待),这在逻辑编写上更接近普通的标量代码,降低了编程难度。
Q3: 为什么 GPU 不像 CPU 一样配备大容量 L3 缓存来提升性能?
A: 芯片面积和功耗预算是有限的。如果给 GPU 加上几十 MB 的 L3 缓存,能塞进芯片的 ALU 数量就会锐减,失去高吞吐优势。此外,大模型的计算数据量极大(动辄 GB 级别),几十 MB 的缓存根本装不下,命中率极低。GPU 的策略是“放弃缓存,用海量线程去掩盖延迟”,并将省下的面积全用来堆 ALU 和高带宽显存(HBM)控制器。
Q4: 大模型推理中的 Prefill 和 Decode 阶段,哪个更受 CPU 架构影响?
A: Prefill 阶段(首字计算)由于是对整个 Prompt 进行并行矩阵乘法,计算密集度极高,完全受限于 GPU 算力。而 Decode 阶段���逐字生成)每次只生成一个 token,此时矩阵变成了向量,算术强度骤降,瓶颈转移到了显存带宽上。虽然此时 GPU 的计算单元可能闲置,但由于 GPU 依赖 TLP 且拥有极高带宽的 HBM,它依然比 CPU 的内存系统更能承受这种高频小批量访存。
Q5: 为什么说 Transformer 架构比以前的 RNN 更适合 GPU?
A: RNN(如 LSTM)本质上是时间步串行模型,必须先算完 $t-1$ 步才能算 $t$ 步。这种强依赖关系导致无法在时间维度上展开大规模并行,GPU 的大量核心会处于“等米下锅”的闲置状态。而 Transformer 用自注意力机制取代了时间步依赖,整个序列可以同时计算,把问题完全转化为空间上的矩阵并行,将 GPU 的 SIMT 优势发挥到了极致。
七、参考资料
- NVIDIA CUDA C++ Programming Guide - 深入理解 SIMT 执行模型与 Warp 调度机制
- Hennessy, J. L., & Patterson, D. A. (2017). Computer Architecture: A Quantitative Approach - CPU 与 GPU 体系结构定量分析的经典教材
- Vaswani, A., et al. (2017). Attention Is All You Need - Transformer 架构原始论文,理解其矩阵运算本质
- NVIDIA H100 Tensor Core GPU Architecture Whitepaper - 现代 GPU 如何通过 Tensor Core 进一步加速大模型矩阵运算
📋 本日知识点清单
- CPU 的设计目标:低延迟、复杂控制流、大 Cache、Instruction Level Parallelism
- GPU 的设计目标:高吞吐、大量并行、隐藏 Memory Latency、Thread Level Parallelism
- Latency vs Throughput 的本质区别
- SIMD / SIMT 执行模型
- 为什么 GPU 可以拥有大量计算单元
- Transformer 为什么天然适合 GPU
📝 实践练习
思考并回答:Transformer 的矩阵运算为什么天然适合 GPU 的 SIMT 执行模型?
本文是「GPU → LLM Inference」30 天学习计划的一部分。学习路线:GPU 硬件 → CUDA 执行模型 → 显存/带宽 → Kernel → Attention → KV Cache → 并行策略 → 推理性能。