GPU CPU 区别:一个为延迟优化,一个为吞吐量优化
更新时间:2026-09-25。打开机箱,CPU 只有巴掌大、GPU 却像一块带风扇的大板;跑同样一段矩阵乘法,GPU 能比 CPU 快几十倍,可让 GPU 去跑操作系统内核,它又笨又慢。这篇不讲型号参数,只回答一个架构问题:GPU CPU 区别到底在哪。它和AI 加速器入门是姊妹篇——那篇讲 NPU 的 MAC 阵列,这篇讲 GPU 为什么靠「人海战术」取胜。
本文要回答的问题
- 同样是芯片,CPU 和 GPU 在优化目标上有什么根本不同?
- 为什么 CPU 只有几个核、主频却很高,GPU 有几千个核、每个核却很简单?
- 为什么图形渲染、矩阵乘法这类活天然适合 GPU?
- 给一组典型数字:核心数、缓存、主频、带宽到底差多少?
- 什么程序放到 GPU 上反而更慢?Amdahl 定律怎么解释这件事?
一、两个优化目标:延迟,还是吞吐量
理解 GPU CPU 区别,先要分清两个常被混用的词:
- 延迟(latency):完成单个任务要多久。你点开一个菜单,它 50 毫秒后弹出来还是 200 毫秒后弹出来,这是延迟问题。
- 吞吐量(throughput):单位时间内能干完多少任务。显卡一秒钟画出 2 亿个三角形像素还是 2000 万个,这是吞吐量问题。
CPU 被设计成一个低延迟的通用任务处理机:操作系统、编译器、数据库事务、交互式程序——这些负载指令流曲折、分支丛生、前后步骤互相依赖,但要求「这一件事立刻给结果」。GPU 则被设计成一个高吞吐量的数据处理机:屏幕上几百万个像素、矩阵里几十万个元素,每个都做同样的运算,晚算完哪一个无所谓,关键是一秒钟内全部刷完。
一句话:CPU 让一个线程尽快跑完,GPU 让一万个线程同时在跑。 这个目标差异,决定了两家把硅片面积花在完全不同的地方。
打个比方:CPU 追求的是一名百米选手的起跑反应和冲刺速度,观众在意他个人这一枪跑了几秒;GPU 追求的是一座港口一天能吞吐多少集装箱,单个箱子在码头上多停留几秒无人关心,但几万只箱子必须同时被吊起、运走。目标不同,训练方式和港口布局自然天差地别——接下来三节就分别拆解这座「跑道」和这座「港口」的内部构造。
二、CPU:把 die 面积花在缓存和「让单核更快」上
现代 CPU 内核是工程上最复杂的机器之一。为了让一条充满意外的指令流跑得尽可能快,一个强核里塞了大量「辅助机构」:
- 分支预测器:猜下一条指令往哪走,猜对了流水线不停车;现代预测器准确率超过 95%,背后是几十 KB 的历史表和复杂算法。
- 乱序执行(OoO):指令不是按写的顺序执行,而是谁的数据先备好谁先上,再把结果按顺序提交。这需要巨大的重排序缓冲、寄存器重命名和发射逻辑。
- 深度多级流水线 + 高主频:3–5 GHz 的主频意味着每 0.2–0.3 纳秒就要推进一拍,对时序和电路的要求极为苛刻。
- 大缓存:每个核带私有的 L1/L2,所有核共享几十 MB 的 L3。数据在缓存里命中,延迟只有几纳秒;去一趟主存要两百多纳秒,强核根本等不起。
这些机构的共同点是:它们一个 ALU(算术逻辑单元)都不是,却占了大量晶体管和 die 面积。在一颗典型桌面 CPU 上,缓存(尤其 L3)和核内控制逻辑往往占掉一半以上的面积,真正做加减乘除的运算器反而是小头。换来的是:哪怕程序逻辑再曲折、依赖再深,单核也能以极高的速度把它啃下来。
可以用一个生活类比体会这套设计:强核像一位经验老到的大厨,灶台上同时摆着七八口锅,炖汤等着开锅的间隙去切菜,切完发现盐没了立刻改用酱油——每一步都在临场判断、穿插调度,保证「这一桌菜」以最快速度上齐。乱序执行就是多口锅并行推进,分支预测就是提前备菜,缓存则是把常用调料摆在手边而不是每次跑去仓库。这位大厨单位时间做的菜未必特别多,但任何一桌单点的菜他都能很快端出来。真实程序里分支和依赖到底多常见?一般通用代码平均每五六条指令就有一条跳转指令,数据在缓存里的命中率则常年保持在九成以上——这两个数字决定了「猜得准、取得快」比「算得多」更值钱。
三、GPU:几千个简单小核,面积尽量给计算
GPU 的选择恰好相反:既然面对的是「同一条操作刷遍海量数据」,那就把预测器、乱序窗口这些昂贵机构全部砍掉,把省下的面积换成成千上万个简单计算单元。
以数据中心常见的配置为例:一颗 GPU 里有上百个流式多处理器(SM),每个 SM 包含几十个 ALU,全芯片 FP32 核心数以万计;而同期的高端 CPU 只有十几个核。GPU 的核顺序执行、顺序发射,控制电路极其精简,但单位面积上的运算器密度是 CPU 的几十倍。缓存方面,GPU 也有 L1、共享内存和 L2,但单个线程分到的缓存很小——它靠的是「你不等这一份数据,可以先切去算另一个线程」来掩盖访存延迟,而不是靠大缓存保证每次命中。
下面这张 die 面积分配对比图,画出了两家最直观的区别:
GPU 掩盖访存延迟的办法和 CPU 完全不同,值得多说一句。CPU 的思路是「保证这一份数据快点到」——大缓存、乱序窗口都在等同一个线程;GPU 的思路是「这份数据没到就先不等」——一个 SM 上同时驻留十几个甚至几十个 warp,当前 warp 一旦卡在访存,调度器一拍之内就切到另一个就绪的 warp,ALU 始终有活干。这叫用多线程隐藏延迟(latency hiding),代价是每个 SM 都要配一块极大的寄存器堆来保存所有驻留线程的现场,线程切换时不发生任何额外开销。所以 GPU 上衡量一个核是否「满载」的关键指标,不是单个线程跑多快,而是有没有足够多的线程可供调度。
注意图中 GPU 底部那条特别宽的内存接口:喂饱上万个 ALU 需要极宽的数据通道,这也是 GPU 普遍使用 HBM 或 GDDR 的原因(封装形式见先进封装入门)。HBM 把多层 DRAM 芯片垂直堆叠起来,通过硅中介层和 GPU 连在一起,几千根数据线并行传输;这种封装和良率成本不菲,但换来的带宽是普通内存条的十倍以上。
四、图形与矩阵:天生的数据并行
GPU 最早为图形而生。渲染一帧画面时,屏幕上每一个像素的颜色都是独立算出来的:像素 A 的光照计算不需要像素 B 的结果,两百万个像素就是两百万个彼此无关的小任务。三角形变换也类似:一个矩阵乘上所有顶点坐标,操作完全相同,只是数据不同。图形流水线的完整故事可以看GPU 图形渲染流水线发展史。
人们后来发现,科学计算和 AI 里最耗时的部分结构一模一样。矩阵乘法 C = A × B 里,输出矩阵的每个元素都是「一行乘一列再求和」,几十万个元素同样彼此独立、操作同样规则。这就是数据并行(data parallelism):不是任务有很多种,而是同一种任务对着大量数据重复做。
用数字感受一下规模:一张 4K 画面约 830 万个像素,按每秒 60 帧渲染,每秒要给近 5 亿个像素各算一遍光照;一个 70 亿参数的大语言模型,生成一个词的过程中要做上百亿次乘加,其中绝大部分集中在几个大矩阵乘法上。这些计算如果摊到 CPU 的十几个核上,每个核要串行处理几百万个元素;而在 GPU 上,每个元素分配给一个线程,上万个线程一轮轮地刷,几十轮到几百轮就全部结束。更关键的是访存模式也规整:线程们按顺序访问相邻地址,硬件可以把几十次小访问合并成几次宽传输,缓存和带宽都用得很满——这与指针追踪那种东一榔头西一棒子的访问形成鲜明对比。
GPU 执行这种负载的方式叫 SIMT(单指令多线程):一个调度器把几十个线程编成一组(warp),让它们在同一拍执行同一条指令、各自处理自己的数据。一条「乘法」指令发出去,背后是几十个乘法器同时翻动,指令读取和译码的成本被几十份计算摊薄。下图是这个模型的示意:
代价是:如果同一个 warp 里的线程走到不同分支(一个进 if、一个进 else),SIMT 没法让它们真的分道扬镳,只能把两条路串行各跑一遍,不用的线程空转,这叫分支分歧(branch divergence)。细节可看 SIMT 与 warp 分支分歧,warp 调度器的硬件结构见 GPU 架构:warp 调度器。
五、典型数字:核心数、缓存、主频、带宽
数字会让前面的论述更具体。下面取当代常见量级(桌面 CPU 与数据中心加速卡各一档),不同型号有出入,但数量级的对比是稳定的:
| 对比维度 | 高端 CPU(延迟优化) | 高端 GPU(吞吐量优化) |
|---|---|---|
| 通用核心 / 计算单元 | 8–32 个复杂强核 | 数百个 SM、上万个 FP32 ALU |
| 单核控制机构 | 分支预测、乱序、重命名,很重 | 顺序执行,精简,靠多线程掩盖延迟 |
| 主频 | 3–5 GHz | 1.5–2.5 GHz 左右 |
| 片上缓存 | L3 32–128 MB,单核份额大 | L2 几十 MB,每线程份额很薄 |
| 内存 / 显存 | DDR5,约 0.1–0.4 TB/s | HBM3/GDDR6X,约 1–3.3 TB/s |
| FP32 峰值算力 | 几 TFLOPS | 几十 TFLOPS(配张量核达数百 TFLOPS) |
| 典型擅长负载 | 操作系统、数据库、编译、串行逻辑 | 图形、矩阵乘、卷积、向量批处理 |
读这张表要避免一个误解:GPU 主频更低、单核更弱,并不是技术落后,而是有意的面积再分配——与其把一个核的乱序窗口做大一倍,不如用同样的晶体管再摆几百个 ALU。对数据并行负载,这笔买卖极其划算;对单线程延迟,它则毫无帮助。
还可以从功耗角度读这张表。芯片功耗与主频近似线性、与电压频率的乘积相关,把一个核推到 5 GHz 的代价远高于让两个核跑在 2 GHz:频率每拉高一点,电压往往也要跟着抬,能耗随频率二次甚至三次方上涨。所以 CPU 为延迟付的是「电费」,同样的焦耳,GPU 选择摊给更多中等频率的 ALU,换来的运算次数多得多。这也是为什么手机 SoC 里 CPU 大核只负责交互瞬间的响应、重活交给 GPU 或 NPU 的原因——谁都知道大核费电。表里的带宽数字也值得对照算力一起看:GPU 每秒能做几十亿次乘加,但每个参与运算的数都得从显存搬进来,若带宽喂不满,再强的 ALU 也要停工,这正是 AI 芯片语境里常说的「内存墙」。顺带一提,CPU 也在向向量计算靠拢,比如 RISC-V 的 V 扩展(见 RISC-V 入门),但通用核的面积大头仍然是缓存和控制。
六、Amdahl 定律:什么时候 GPU 帮不上忙
堆核心不是万能的,这由 Amdahl 定律定量描述。假设一个程序里可并行的部分占比例 p,并行部分用 n 个核加速,那么整机加速比是:
加速比 = 1 / ((1 − p) + p / n)
关键在于分母里那个 (1 − p)——程序中必须串行的部分,核心再多也缩不动。举几个数字:95% 可并行的程序,理论极限加速比只有 20 倍(1 / 0.05),哪怕你插十万个核;90% 可并行,极限只有 10 倍。核心数 n 趋向无穷时,加速比上限就是串行比例的倒数。
这直接给出了 GPU 适用与不适用的判据:
- 适合 GPU:计算密度高(算术多、访存有规律)、数据彼此独立、分支少。图形渲染、矩阵乘法、卷积、信号处理、大规模仿真都是典型——这也正是 AI 加速器和 GPU 大显身手的领域。
- 不适合 GPU:①分支密集且不可预测,warp 内频繁分歧,ALU 大量空转;②存在长串数据依赖,每一步必须等上一步结果(如递归、指针追踪、很多事务处理),并行比例 p 本身就低;③数据量小但反复在 CPU 与显存之间搬运——PCIe 传输一次几微秒到上百微秒,小活还没算完、传输时间先亏了。
具体说几个常见反例。把链表逐个节点查找放到 GPU 上,每个节点的地址藏在前一个节点里,几千个线程只能干等一个线程串行取数据,比 CPU 慢得多;很多人以为「排序」该快,但通用排序里比较结果决定数据往哪走,分支和随机访存都多,GPU 版本需要专门算法才能追上 CPU;数据库里带大量条件判断的小查询、操作系统的进程调度、文本解析,同样是 CPU 的主场。反过来,一旦把这些程序中的热点重写成规整的批处理形式(例如先按规则过滤再统一聚合),可并行比例提上去,GPU 的优势才会重新出现——优化的着力点首先是算法结构,而不是换硬件。
所以工程上的常见形态是协同:CPU 负责调度、控制和串行段落,把规则、大块的数据并行段落卸载给 GPU,二者通过 PCIe(或更紧的封装互连)配合。脱离负载空谈「GPU 比 CPU 强」没有意义——它们本来就是为两种目标设计的两类机器。
这一篇在知识体系里的位置
- 想看 GPU 为图形而生的完整脉络 → GPU 图形渲染流水线发展史;
- 想看 SIMT 怎么调度、分支分歧怎么发生 → GPU 架构:warp 调度器、SIMT 与 warp 分支分歧;
- 想看比 GPU 更极端的专用路线(MAC 脉动阵列、TOPS、内存墙)→ AI 加速器入门;
- 想看宽内存通道用的 HBM 与先进封装、大 die 的良率问题 → 封装入门、良率基础;
- 想看 CPU 核内部的缓存层次与通用核的向量扩展 → 片上存储器、RISC-V 入门。
总结
一句话总结:GPU CPU 区别的根子是优化目标不同——CPU 为单任务延迟优化,把 die 面积花在少量高主频(3–5 GHz)强核、大容量 L2/L3 缓存和分支预测、乱序执行等昂贵控制机构上,保证曲折串行的指令流也能尽快跑完;GPU 为吞吐量优化,砍掉这些机构,用数百个 SM、上万个简单 ALU 把面积主要给计算,主频反而只有 1.5–2.5 GHz,并靠 1–3.3 TB/s 的 HBM/GDDR 宽接口和「切换线程掩盖延迟」喂饱算阵列;图形渲染(几百万像素、顶点各自独立)和矩阵乘法(输出元素彼此独立、操作规则)天然是数据并行负载,SIMT 让一个 warp 里的几十线程同拍执行同一条指令、各处理各的数据,但 warp 内走不同分支会分支分歧、两路串行空转;按 Amdahl 定律加速比受串行比例锁死(95% 可并行极限也仅 20 倍),所以分支多、依赖链长、数据量小到 PCIe 搬运不划算的程序上 GPU 反而更慢,现实形态是 CPU 管控制调度、GPU 管大块数据并行段落的协同,而非谁取代谁。