计算机体系结构 34:有界处理器集成

核心问题

参考执行、流水线时序和缓存延迟接在一起后,怎样证明加速结构没有改变程序的提交结果?最小可检查条件是:参考模型与流水线产生同序、同值的提交事件;延迟只改变周期;故意移除正确性机制时,差分检查必须失败。

附件:34-integration.json和模型源码。

范围与证据等级

证据等级为教学时序模型。当前恢复模型只执行五条指令,支持本案例所需的 addi、lw、add、sw 和 halt。它没有实现完整 RV32I、异常、MMU、乱序、多核或真实 DRAM。

缓存只有两行,每行 16 字节,记录 tag、命中、缺失和固定 miss 延迟。数据值仍由架构 memory 字典提供,因此模型没有验证完整的 write-back 数据层级,也没有证明脏块最终到达 DRAM。

核心案例:结果相同,时间不同

初始 memory[16]=7。程序把 16 写入 x1,从地址 16 读取 7 到 x2,计算 x3=14,再把 14 写到地址 32。参考执行和流水线提交序列均包含五个事件,最终 x2=7、x3=14、memory[32]=14。

两次访存落在不同 cache block,模型得到 2 miss、0 hit。基线包含流水线填充和一次 load-use 停顿,共 10 拍;每次 miss 增加 4 拍,组合结果为 18 拍。这里的拍数只属于这组固定规则。

负例同时关闭前递和互锁,依赖 lw 的 add 读到旧值,使 x3=0。差分器将其与参考值 14 比较并报告失败。只关闭前递但保留互锁可以得到较慢的正确实现,不属于这个负例。

模式:提交状态与时间状态分账

1
2
正确性:commit_reference == commit_timing
性能:cycles = base + declared_stalls

流水线、缓存和更复杂的模拟器都应分别维护这两本账。周期相同不能证明值正确,提交一致也不能证明时序接近真实硬件。

验收结果

python3 examples/computer-architecture/run_batch.py 34-35 退出 0。提交事件、最终寄存器和内存一致;两次 cache miss 及 18 拍结果可由输出重算;前递与互锁同时关闭的负例被检出。验收不包含完整 write-back 数据传播。

练习

若第二次访问改到地址 20,按当前 cache 参数重新计算 hit/miss 和总拍数。

为什么“关闭前递后结果仍正确”不能证明前递没有用?

模式速查

检查 能证明 不能证明
提交值逐项相等 本程序架构结果一致 完整 ISA 合规
cache 元数据轨迹 题设 hit/miss 与延迟 write-back 数据传播
注入负例被检出 差分器能抓住该故障 覆盖所有冒险

一手参考资料