level 12
丶Artoria
楼主
他喝水用的杯子印着“FETCH → DECODE → EXECUTE → MEMORY → WRITE BACK”。
每次喝水都要停顿五下,喃喃道:“一个时钟周期……又一个时钟周期……”
宿舍墙上贴着他手绘的“单周期CPU数据通路图”,每一根控制线都用红笔标明了信号值。
衣柜门上是“Cache-主存映射全对比”,直接相联、全相联、组相联的优缺点写满了便签。
书桌上堆满了草稿纸,上面全是海明码校验位计算、布斯算法的运算步骤、以及他试图优化的Tomasulo算法调度表。
凌晨两点,他准备关闭Logisim仿真,手指却停在开关上:
“等等……我这个流水线的数据冒险还没用旁路解决……现在停机会有结构性冒险……”
凌晨四点,他从一堆门电路波形图、DRAM刷新时序和手写的MIPS汇编代码中抬起头,屏幕的白光映着他涣散的瞳孔:
“我悟了!如果我把分支预测的两位饱和计数器与BTB的命中率关联建模,就能动态调整预测策略……这样就能显著降低流水线的气泡!”
话刚说完,他猛地捂住胸口,呼吸变得紊乱:
“我的TLB缺失率在飙升……
数据总线上出现了 metastability(亚稳态)……
流水线已经连续三个周期冒泡了……
是……是数据冒险导致了控制冒险……整个流水线……要stall(停顿)了……”
我们想拔掉他FPGA开发板的电源,他却死死按住电线:
“等一下……我的写直达缓存(Write-Through)还没改成写回(Write-Back)……
还有那个虚拟地址到物理地址的转换……页表遍历(Page Walk)还没完成……
DMA传输……DMA传输会破坏缓存一致性……”
他挣扎着拿起烙铁,想在面包板上补最后一个上拉电阻。
“从ALU输出到寄存器堆写入口……”
烙铁在“结果回写”的路径上空悬停,却没能落到那个焊点。
沾满松香的手指伸向示波器的触发按钮,想要捕捉那个导致异常的内存访问波形,却在按下的前一刻突然垂下。
他像是被一个精确异常(Precise Exception) 击中,而异常处理程序找不到对应的入口地址;
只留下断流的五级流水、失去同步的DRAM控制器、刚烧录一半的FPGA配置比特流,和一堆在草稿纸上如迷宫般的Cache一致性协议状态机。
摊开的《计算机组成与设计:硬件/软件接口》最后一页,被焊锡灼痕和示波器探头戳得千疮百孔,他写着:
“并不是我在学习计算机组成原理。
而是冯·诺依曼体系正在通过我,
这台时序紧张、缓存有限、分支预测时灵时不灵的生物计算机,
验证是否能完美协调
控制器、运算器、存储器、输入设备、输出设备
所有的硬件组件。”
最后几行颤抖的字迹,像是在试图将“生命”这个异步电路,
强行同步到那个理想的主时钟频率之下——
但他最终发现,无论插入多少流水线寄存器,
都再也无法追上下一个上升沿的到来。
