📄 一句话概括

06 篇的"取指 → 译码 → 执行"只是骨架。这一篇钻进"执行"内部:控制器用控制信号(高低电压)开关一扇扇"门",数据沿着通路自己流动;再靠流水线让四步重叠,一条指令接一条不停歇——CPU 快的秘诀不是单步更快,而是不让任何电路闲着。


1. 承上:从"谁执行"到"怎么执行"

前三篇各占一角:05 讲指令怎么写(下指令),06 讲谁接收(CPU 四角色),这篇回答最后一个问题——"执行"这两个字,在电的世界里到底发生了什么?

2. 指挥官的喊话方式:控制信号

06 篇说控制器是"唯一懂指令的部门"。它发号施令的方式很朴素:不是说话,是拉高或拉低一根根导线的电压。

每一根控制线背后都接着一扇"门"(03 篇的逻辑门):

译码完成后,控制器把本条指令对应的那组控制线一次性拉对——该开的开、该关的关。之后不用再管:门开了,电自己会流。这就是"执行"的全部真相。

💡 呼应 03 篇

加法器是门搭的,控制信号的"开关"也是门。整个 CPU 里没有魔法,只有几十亿个门在不同时刻开开关关。时钟每滴答一拍,全芯片的门统一动作一次。

3. 一条 ADD A, B 的完整旅程

任务:把寄存器 A(存着 5)和寄存器 B(存着 3)相加,结果写回 A。逐拍看:

拍 阶段 发生了什么 谁在干活
1 取指 控制器按书签从内存搬回指令 ADD A, B 控制器 + 内存
2 译码 拆开指令:"做加法,A 和 B,写回 A" 控制器
3 取数 拉开 A、B 的门,5 和 3 流向 ALU 寄存器 → ALU
4 运算 ALU 里的加法器(03 篇)通电,输出 8 ALU
5 写回 拉开"写回 A"的门,8 流回寄存器 A ALU → 寄存器
6 移书签 程序计数器 +1,指向下一条 程序计数器

六拍走完,A 从 5 变成了 8。程序的一行、电路的一次齐奏——所有软件都是这样一拍一拍跑出来的。

4. 流水线:不让任何电路闲着

上表有个大浪费:ALU 算的时候(第 4 拍),取指电路、译码电路全在干等。CPU 的解法是流水线(Pipeline)——洗车房模型:

冲水 → 打泡沫 → 擦干 → 抛光,四个工位。第一辆车进抛光时,第二辆正在擦干,第三辆正在打泡沫……每辆车仍要 4 道工序,但稳态下每个周期都能交出一辆成品车。

指令同理。取、译、执、写四个工位重叠开工:

现代 CPU 的流水线有 14~20 级(工位更多、每工位更细),同样的道理推到极致。

📝 关键洞察

CPU 提速的历史就是"消灭等待"的历史:流水线消灭工位间的等待,缓存消灭访内存的等待,多核消灭任务排队的等待。电信号本身的速度几乎没变过——变的是"别闲着"的组织艺术。

5. 流水线的天敌:跳转(和它的对策)

流水线最怕的是 06 篇讲过的跳转指令。流水线要求"下一拍取哪条指令"提前知道,可跳转让下一拍取哪条取决于本条的计算结果——工位排满了,车却可能要掉头。

CPU 的对策叫分支预测(Branch Prediction):

这就是为什么 if 分支特别多、走向毫无规律的代码跑得慢——CPU 老赌错。也是为什么"把最可能的分支放前面"是老程序员的优化习惯。

📝 两个进阶名词,知道即可

乱序执行:硬件自动把不相关的指令调换顺序,谁的数据齐了先干谁,填流水线的空隙。 超线程:一个物理核伪装成两个"逻辑核",A 线程卡在等内存时让 B 线程插进来用闲置工位——"8 核 16 线程"的 16 就是这么来的。

6. 回到生活:买 CPU 看什么参数

现在你能看懂 CPU 广告词了:

实际速度 ≈ 主频 × IPC × 核数 × 软件配合度
参数 是什么 本篇对应
主频 3.6GHz 节拍器每秒滴答 36 亿次 时钟(06 篇)
IPC(每周期指令数) 一拍能同时推进几条指令 流水线 + 分支预测 + 乱序执行(本篇)
8 核 几套独立班底并行 多核(06 篇)
软件配合度 程序会不会用满多核、分支是否规律 程序员 + 编译器的活

这解释了为什么同样主频的新 CPU 快得多:主频受功耗和散热限制涨不动了(04 篇摩尔定律放缓的延续),厂商全靠加宽流水线、加聪明预测、加核来涨性能——"执行的艺术"成了主战场。

7. 常见误区

⚠️ 误区一:CPU 一步只干一件事,干完再干下一件

现代核里同时有十几条指令在不同工位上跑。你看到的"顺序执行"是结果上的顺序,物理上早就重叠了。 [!warning] 误区二:主频 × 4 核 = 4 倍主频的速度 多核要任务拆得开才吃得到;流水线要分支猜得准才满速。参数是上限,配合度决定实际值。 [!warning] 误区三:执行就是"算" 绝大多数指令不算数,而是搬数据(05 篇的 MOV)和控制流向(跳转)。ALU 只是流水线里的一个工位。 [!warning] 误区四:分支预测错了会算错结果 不会。预测只影响排班,猜错就推倒重排,结果永远正确——牺牲时间,不牺牲对错。 [!warning] 误区五:流水线级数越多越好 级数越深,猜错分支时冲刷的代价越大、电路越复杂。14~20 级是"并行度"和"翻车成本"的平衡点,不是越多越强。

8. 可折叠自测题

❓ - Q1. 控制器怎么"发号施令"?指挥官会说话吗?

不会说话。它靠控制信号——把一根根导线的电压拉高/拉低,相当于开/关一扇扇门(逻辑门)。门开了,数据沿通路自己流动。 [!question]- Q2. ADD A, B 从取指到完成要经过哪几步? 取指 → 译码 → 取数(A、B 送 ALU)→ 运算(加法器出 8)→ 写回(8 进寄存器 A)→ 书签后移。约 6 拍。 [!question]- Q3. 流水线为什么能提速?它加快速的单步了吗? 没有。它让取、译、执、写四个工位重叠工作——单条指令耗时不变,稳态下每拍交出一条,吞吐量成倍涨。洗车房模型。 [!question]- Q4. 分支预测赌错了会怎样?结果会算错吗? 流水线里排错的指令全部作废重排(冲刷),浪费十几拍——结果永远正确,代价只是时间。 [!question]- Q5. 为什么 CPU 主频涨不动了,性能却还在涨? 主频受功耗/散热物理限制(04 篇摩尔定律放缓)。性能靠加宽流水线、更聪明的分支预测、乱序执行、多核——即提高每拍干的活(IPC)和并行度。


9. 下一步学什么


10. 相关笔记