07 - 时钟、指令、流水线:CPU 为什么越来越快
「CPU 主频 3.0 GHz」「8 核」「性能提升 20%」……这些词到底啥意思?这一章讲清楚 CPU 快慢由什么决定,以及工程师用什么招数让它越来越快。
时钟:CPU 的节拍器
CPU 内部有一个时钟,像节拍器一样滴答滴答,发出一个个节拍(叫时钟周期)。CPU 的所有动作都踩着这个节拍进行,一个节拍走一小步。
- 主频(时钟频率):一秒钟能打多少个节拍。
- 单位是 Hz。3.0 GHz 就是一秒 30 亿个节拍。
节拍越快,单位时间里能推进的步骤越多,CPU 自然越快。所以早年 CPU 竞赛就是拼主频:从几百 MHz 一路飙到 3、4 GHz。
就像跑步,步频越快跑得越快。主频就是 CPU 的「步频」。
但光提主频,撞墙了
主频不能无限提高。频率越高,CPU 发热越猛、耗电越大,到 4 GHz 左右就很难再往上冲了——再快就要烧掉了。于是工程师换思路,从别的地方榨性能。主要两招:流水线和多核。
招数一:流水线(让每个节拍都不闲着)
回忆第 04 章,执行一条指令要经过「取指 → 解码 → 执行 →……」好几个阶段。如果老老实实一条干完再干下一条,那么当指令在「执行」阶段时,负责「取指」的部件就闲着——浪费。
**流水线(Pipeline)**的思路:像工厂流水线一样,让各阶段同时忙不同的指令。
不用流水线(一条条来,很多部件在闲着):
指令1: 取指 解码 执行
指令2: 取指 解码 执行
指令3: 取指 解码 执行
用流水线(错开,每个阶段都不闲):
指令1: 取指 解码 执行
指令2: 取指 解码 执行
指令3: 取指 解码 执行
指令4: 取指 解码 执行
指令 1 在「执行」时,指令 2 正在「解码」、指令 3 正在「取指」——三个部件同时都在干活。虽然每条指令走完全程时间没变,但单位时间里完成的指令数量大大增加,整体吞吐飙升。
就像洗衣店:第一批衣服在烘干时,第二批正在洗、第三批正在收。机器一刻不停,效率翻几倍。
流水线也有代价:万一遇到跳转指令(第 04 章的 if / for),CPU 提前「排好队」的后几条指令可能白排了,得清空重来。所以 CPU 还会「猜」跳转往哪走(叫分支预测),猜对就赚,猜错就得重来。
招数二:多核(人多力量大)
既然单个核心的频率提不上去,那就在一块芯片上塞好几个 CPU 核心,让它们并行干活。这就是「4 核」「8 核」「16 核」的意思。
- 8 核,理想情况下能同时干 8 件事(真并行,对应操作系统篇第 04 章的「并行」)。
- 但前提是任务能拆开并行。有些任务天生一步接一步,多核也帮不上忙。这也是为什么核越多不代表所有程序都成比例变快。
一个人挑不动更重的担子了,那就多找几个人一起挑。前提是活儿能分给多个人干。
衡量 CPU 快慢,不能只看主频
所以,判断一颗 CPU 强不强,不能只看主频数字。真正影响性能的因素综合起来有:
- 主频:步频多快;
- 核心数:能几路并行;
- 每个节拍能干多少活(流水线、架构设计的优劣);
- 缓存大小(第 06 章,缓存大命中率高,少去等内存)。
这就是为什么两颗主频一样的 CPU,性能可能差一大截——架构、缓存、核心数都在起作用。
小结
- CPU 靠时钟打节拍,主频(如 3.0 GHz = 每秒 30 亿拍)越高越快。
- 主频受发热和功耗限制,冲不上去,于是转向别的招数。
- 流水线:让取指/解码/执行等阶段错开同时进行,各部件不闲着,大幅提升吞吐(代价是遇跳转可能白排队)。
- 多核:一块芯片塞多个核心并行干活,但要求任务能拆开。
- 衡量 CPU 性能要综合看主频、核心数、架构、缓存,不能只看主频数字。
下一章 → 08 - 负数和小数在计算机里长什么样 | 回到 README 目录