流水贯脉
你以为5级流水线就是5倍加速。但结构、数据、控制三类冒险让流水线不断停顿——加速比永远摸不到那个极限。气泡不是bug,是冒险的代价。
贯脉之门
结丹试炼的甬道尽头,是一扇刻满电路纹路的石门。门楣上「贯脉」二字被一层半透明的气泡遮住了一半。
石台上摆着一块晶板,上面刻着一条指令的执行轨迹:取指、译码、执行、访存、写回——五步,五拍,走完一条,才轮到下一条。
「你学了数据通路,知道一条指令怎么走。但每次只走一条——你不觉得浪费吗?」
「5级,5倍。你说是不是?」
流水线加速预测挑战器
先下注,再拖指令数对比串行/流水线两种模式
串行 / 流水线 对比模拟器
五级法阵 · 流水贯脉
石门内是一座五层环形法阵,五层之间隔着透明的级间屏障——那是级间寄存器。
「五级,五脉。取指(IF)、译码(ID)、执行(EX)、访存(MEM)、写回(WB)。指令从顶层流入,逐级下沉,每一拍前进一步。把五块功能石放进去。放对了,法阵就活了。」
五级法阵流水线动画器
拖功能石归位 → 逐拍推进时空图 → 看法阵充满
流水线时空图
吞吐天平 · 理论之巅
法阵旁悬着一台天平,左盘刻「吞吐量」,右盘刻「加速比」,中间立着一根CPI标尺。
「法阵搭好了。现在称一称——它到底有多快。别猜,算。」
「5倍嘛。你S0不就猜过了?这回有公式了,更稳了。」
吞吐天平公式组装器
拖因子组装5个公式 → n滑块验证 → 计算练习
计算练习:k=5, n=1000,求 S 与 CPI
结构裂隙 · 第一崩塌
你把指令序列灌入法阵,正准备欣赏5倍加速的盛景——第3拍,法阵发出一声刺耳的摩擦声。IF层的取指光球和MEM层的访存光球同时撞向同一块存储晶石。
「理论是天平上的数字。现实是——你的存储器只有一个端口。」
结构冒险触发器 · 单端口存储器冲突
运行触发IF/MEM冲突 → 插入气泡 → 拆分I-Cache/D-Cache
数据暗流 · 依赖之网
结构裂隙修好了,法阵恢复流畅。你正松一口气——时空图上,两条指令之间忽然亮起一根红线。ADD R1,R2,R3 后面跟着 SUB R4,R1,R5。它读的R1,还没写进去。
「这不是资源冲突。这是逻辑依赖——后面的指令,需要前面指令的结果。」
数据依赖识别器 · RAW/WAR/WAW
为三组指令序列标注依赖类型 → 分析五级流水线影响
气泡深渊 · 第二崩塌
RAW依赖的红线悬在时空图上。气泡之魔从裂缝中钻出来,盘在法阵上方,声音甜得发腻:
「停一拍就好了。等它写完再读——安全,稳妥,天经地义。」
「你亲手塞进去的,它记在你的法阵上。」
气泡深渊三旋钮实验台
调冒险密度 / 前递开关 / Load-use频率 → 看CPI与加速比曲线
本命流水线 · 气泡疤痕
前递之桥 · 数据前递
气泡深渊的灰雾还没散尽。诺依曼老祖在法阵旁画了一条弧线——从EX层的出口,直接弯回EX层的入口。你看着那条弧线,像一座桥,跨过了三拍的等待。
「ADD的结果在EX就算完了。为什么要等它走完MEM、走完WB、写回寄存器堆,再让SUB去读?直接从EX递给EX——不等写回。」
前递路径架设器 · EX→EX / MEM→EX
架设两条前递路径 → 气泡消散 → 触发Load-use死角
分岔迷途 · 控制冒险
前递之桥架好了,法阵流畅了许多。你正觉得胜利在望——时空图上出现了一条 BEQ R1, R2, Label 指令。它在EX层比较R1和R2,如果相等就跳转。但IF层已经提前取了指令。取的是谁?不知道。
「猜吧。猜对了什么事都没有。猜错了——冲刷。」
控制冒险体验器 · 冲刷代价
运行分支序列 → 预测错误冲刷 → 双滑块量化 → 延迟槽
预言之眼 · 分支预测
法阵上方浮出一只石眼,眼眶里空空荡荡。诺依曼老祖说:冲刷的代价取决于你猜得准不准。这只眼,可以帮你猜。但你得自己教它。
「猜?你猜得了几次?历史不会简单重复。」
分支预测器配置面板
依次配置预测器 → 看准确率与冲刷代价联动
Boss 战 · 气泡之魔
法阵灯光齐灭。气泡从四面八方涌来,凝成一张巨大的、由无数灰色气泡拼成的脸。
「我是气泡之魔。我不住在流水线里——流水线是我的房子,不是我的食物。我住在'理想与现实的差距'里。你每以为5级就是5倍,我就胖了一圈。三问。答错一题,气泡就厚一分。」
渊账累计 0 笔 · 三问全对后清零
尾声 · 性能天平
气泡散尽时,法阵恢复了运转。你的本命流水线上还留着几道疤痕——结构冒险修好了、大部分数据冒险被前递覆盖了、Load-use那道还在、控制冒险被预测压到最低。
「你算出了4.7倍。不错。但——如果我把5级改成10级呢?20级?31级?Pentium 4,31级流水线,主频飙到3.8GHz——但一次分支预测错误冲刷31拍。更深,还是更宽?——这是下一章的问题。」
知识图谱点亮 · Pentium 4 深度权衡
点亮全章碎片 → 拖深度滑块看主频与冲刷代价交叉