SICI · 天机门 · 第十二章

指令级并行 · 结丹一层

你以为5级流水线就是5倍加速。但结构、数据、控制三类冒险让流水线不断停顿——加速比永远摸不到那个极限。气泡不是bug,是冒险的代价。

门楣刻字:「5级,5倍。你说是不是?」
序章

贯脉之门

5级流水线,几倍加速?

结丹试炼的甬道尽头,是一扇刻满电路纹路的石门。门楣上「贯脉」二字被一层半透明的气泡遮住了一半。

总线之脉,系统总线通信

石台上摆着一块晶板,上面刻着一条指令的执行轨迹:取指、译码、执行、访存、写回——五步,五拍,走完一条,才轮到下一条。

诺依曼老祖 诺依曼老祖

「你学了数据通路,知道一条指令怎么走。但每次只走一条——你不觉得浪费吗?」

气泡之魔 气泡之魔

「5级,5倍。你说是不是?」

流水线加速预测挑战器

先下注,再拖指令数对比串行/流水线两种模式

气泡之魔逼你下注:流水线5级,加速几倍?
第一幕 · 自信

五级法阵 · 流水贯脉

把五块功能石放进去,法阵就活了

石门内是一座五层环形法阵,五层之间隔着透明的级间屏障——那是级间寄存器。

诺依曼老祖 诺依曼老祖

「五级,五脉。取指(IF)、译码(ID)、执行(EX)、访存(MEM)、写回(WB)。指令从顶层流入,逐级下沉,每一拍前进一步。把五块功能石放进去。放对了,法阵就活了。」

五级法阵流水线动画器

拖功能石归位 → 逐拍推进时空图 → 看法阵充满

流水线时空图

第一幕 · 自信

吞吐天平 · 理论之巅

拖因子组公式,称出流水线有多快

法阵旁悬着一台天平,左盘刻「吞吐量」,右盘刻「加速比」,中间立着一根CPI标尺。

诺依曼老祖 诺依曼老祖

「法阵搭好了。现在称一称——它到底有多快。别猜,算。」

气泡之魔 气泡之魔

「5倍嘛。你S0不就猜过了?这回有公式了,更稳了。」

吞吐天平公式组装器

拖因子组装5个公式 → n滑块验证 → 计算练习

第一幕 · 崩塌

结构裂隙 · 第一崩塌

理论4.98倍,实际能跑出多少?

你把指令序列灌入法阵,正准备欣赏5倍加速的盛景——第3拍,法阵发出一声刺耳的摩擦声。IF层的取指光球和MEM层的访存光球同时撞向同一块存储晶石。

诺依曼老祖 诺依曼老祖

「理论是天平上的数字。现实是——你的存储器只有一个端口。」

结构冒险触发器 · 单端口存储器冲突

运行触发IF/MEM冲突 → 插入气泡 → 拆分I-Cache/D-Cache

单端口存储器
第二幕 · 挣扎

数据暗流 · 依赖之网

RAW / WAR / WAW——哪种才是真依赖?

结构裂隙修好了,法阵恢复流畅。你正松一口气——时空图上,两条指令之间忽然亮起一根红线。ADD R1,R2,R3 后面跟着 SUB R4,R1,R5。它读的R1,还没写进去。

诺依曼老祖 诺依曼老祖

「这不是资源冲突。这是逻辑依赖——后面的指令,需要前面指令的结果。」

数据依赖识别器 · RAW/WAR/WAW

为三组指令序列标注依赖类型 → 分析五级流水线影响

第二幕 · 再崩塌

气泡深渊 · 第二崩塌

停一拍就好了?看看CPI怎么崩

RAW依赖的红线悬在时空图上。气泡之魔从裂缝中钻出来,盘在法阵上方,声音甜得发腻:

气泡之魔 气泡之魔

「停一拍就好了。等它写完再读——安全,稳妥,天经地义。」

诺依曼老祖 诺依曼老祖

「你亲手塞进去的,它记在你的法阵上。」

气泡深渊三旋钮实验台

调冒险密度 / 前递开关 / Load-use频率 → 看CPI与加速比曲线

数据冒险密度
0%
前递开关
关闭
Load-use频率
0%

本命流水线 · 气泡疤痕

CPI = 1.004 加速比 S = 4.98 气泡数 = 0 前递省停顿 = 0
第二幕 · 重建

前递之桥 · 数据前递

不等写回,直接把结果递过去

气泡深渊的灰雾还没散尽。诺依曼老祖在法阵旁画了一条弧线——从EX层的出口,直接弯回EX层的入口。你看着那条弧线,像一座桥,跨过了三拍的等待。

诺依曼老祖 诺依曼老祖

「ADD的结果在EX就算完了。为什么要等它走完MEM、走完WB、写回寄存器堆,再让SUB去读?直接从EX递给EX——不等写回。」

前递路径架设器 · EX→EX / MEM→EX

架设两条前递路径 → 气泡消散 → 触发Load-use死角

CPI = 1.054 气泡消除 = 0
第二幕 · 再崩

分岔迷途 · 控制冒险

分支猜错了——冲刷

前递之桥架好了,法阵流畅了许多。你正觉得胜利在望——时空图上出现了一条 BEQ R1, R2, Label 指令。它在EX层比较R1和R2,如果相等就跳转。但IF层已经提前取了指令。取的是谁?不知道。

气泡之魔 气泡之魔

「猜吧。猜对了什么事都没有。猜错了——冲刷。」

控制冒险体验器 · 冲刷代价

运行分支序列 → 预测错误冲刷 → 双滑块量化 → 延迟槽

冲刷开销CPI = 0.09 总CPI = 1.09 加速比 S = 4.59
第三幕 · 突破

预言之眼 · 分支预测

从静态到两级自适应——准确率飙到95%

法阵上方浮出一只石眼,眼眶里空空荡荡。诺依曼老祖说:冲刷的代价取决于你猜得准不准。这只眼,可以帮你猜。但你得自己教它。

气泡之魔 气泡之魔

「猜?你猜得了几次?历史不会简单重复。」

分支预测器配置面板

依次配置预测器 → 看准确率与冲刷代价联动

准确率 = 50% 残余冲刷CPI = 0.15 加速比 S = 3.85
第三幕 · 最高潮

Boss 战 · 气泡之魔

三问清算 · 排除法收网

法阵灯光齐灭。气泡从四面八方涌来,凝成一张巨大的、由无数灰色气泡拼成的脸。

气泡之魔 气泡之魔

「我是气泡之魔。我不住在流水线里——流水线是我的房子,不是我的食物。我住在'理想与现实的差距'里。你每以为5级就是5倍,我就胖了一圈。三问。答错一题,气泡就厚一分。」

渊账累计 0 笔 · 三问全对后清零

第三幕 · 收束

尾声 · 性能天平

更深还是更宽?——这是下一章的问题

气泡散尽时,法阵恢复了运转。你的本命流水线上还留着几道疤痕——结构冒险修好了、大部分数据冒险被前递覆盖了、Load-use那道还在、控制冒险被预测压到最低。

诺依曼老祖 诺依曼老祖

「你算出了4.7倍。不错。但——如果我把5级改成10级呢?20级?31级?Pentium 4,31级流水线,主频飙到3.8GHz——但一次分支预测错误冲刷31拍。更深,还是更宽?——这是下一章的问题。」

知识图谱点亮 · Pentium 4 深度权衡

点亮全章碎片 → 拖深度滑块看主频与冲刷代价交叉