结构冒险
约 55 分钟
结构冒险
从一条机器轨迹开始
这一讲不先背结构图。我们从可复现输入进入“流水线、冒险与预测”:为结构冒险建立一个确定性模型,输入正常、边界、非法和组合四类数据,输出逐步状态与最终结果。第一步固定位宽、字节序和初态,第二步逐条执行或逐周期推进,第三步记录寄存器、存储、控制和异常,最后用不变量反查。屏幕上的最终数值只是结果,真正要掌握的是它经过哪条硬件路径、用了什么接口承诺、何时可能失败。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
三层契约
系统课始终分开语言/运行时、ISA与微体系结构。语言层规定类型和未定义行为,ISA规定指令、寄存器、地址和异常的可见结果,微体系结构选择流水、Cache、预测和执行单元实现同一ISA。结构冒险必须沿位模式、指令、寄存器、数据通路和时钟事件逐层解释,明确输入状态、硬件动作、输出状态和不可破坏的不变量。同一程序换处理器仍应保持ISA语义,却可能有完全不同的周期和缓存轨迹。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
请为结构冒险画三栏:软件看到什么,ISA必须保证什么,硬件可以怎样实现。每一栏写对象、位宽、状态和事件。若出现“CPU自动处理”,继续拆成译码、读寄存器、ALU、访存、写回、中断或一致性消息,直到每个动作有输入和输出。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
跟老师逐步推演
选择一个包含6条指令或访问的小例子。先把整数写成固定宽度十六进制,再列PC、指令、源寄存器、目的寄存器、有效地址和异常。流水线题按周期写IF/ID/EX/MEM/WB,Cache题拆tag/index/offset,虚拟地址题拆VPN与页内偏移,I/O题标中断或DMA发生点。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
每一步都写旧状态、触发条件、新状态和观测。若结果与预期不同,定位首个分歧,而不是修改最后答案。针对结构冒险再换一个零、最大值、未对齐、冲突、缺页、误预测或并发输入,验证模型是否仍遵守接口。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
位级与周期计算
所有公式先统一单位。w位无符号范围为0到2^w−1,补码范围为−2^(w−1)到2^(w−1)−1。Cache容量、块大小和组数决定offset与index位;CPI、频率和指令数决定CPU时间;AMAT按命中时间与失效代价加权。公式只能在题设模型下使用。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
若6条指令理想CPI为1,另有2次停顿,每次2周期,简化总周期为6+2×2=10。这不包括填充、冲刷或Cache失效,现实题必须把事件逐项加回。先估数量级,再检查周期与秒、字节与位是否混用。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
可运行实验
代码题是真实Python或C++17程序,从标准输入读取,向标准输出写稳定结果,至少四组不同测试。位级实验必须遮罩到给定位宽,汇编模拟器必须明确非法指令,流水线模拟必须声明同周期先后,Cache模拟必须固定替换规则。不得以伪代码或不可复现sleep冒充实验。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
参考模型优先清晰,保存每步轨迹;优化实现与参考逐输出比较。实验通过只能证明这些输入下实现符合模型,不能证明硬件一般性质。增加一个原题没有的边界输入,并解释它对应哪条ISA或硬件边界。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
冒险、失败与安全边界
本节关键边界是:分析结构冒险时不能把语言级抽象、ISA承诺和微体系结构实现混为一层,也不能省略位宽、字节序、周期或权限条件。构造一个最短反例,展示错误模型会在哪个周期或位上首次偏离。常见错误包括符号扩展方向、未对齐地址、错误转发源、脏块写回遗漏、TLB未命中等同缺页、中断返回PC错误、原子操作被拆开。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
性能优化不能改变可见语义。乱序、预测和Cache都必须在异常、内存顺序和一致性边界上恢复正确状态。看到更快结果时还要检查工作量是否相同、缓存是否预热、编译选项是否一致、计数器是否覆盖同一观察窗。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
跨层连接
位模式进入逻辑门,逻辑门组成数据通路,数据通路执行ISA,ABI组织过程,链接装载建立地址,流水线提高吞吐,Cache和虚存缩短或重映射访问,I/O连接设备,多核一致性维护共享,性能工程把所有层放进同一证据链。为结构冒险写一条上游输入和一条下游影响。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
练习与自检
完成单选、多选、计算和相关代码实验。闭卷回答:位宽和单位是什么,软件/ISA/微结构三层如何分工,逐步状态怎样变化,不变量是什么,最短失败例是什么,代码测试覆盖什么,公式遗漏哪些现实事件。能在新轨迹上重新推导才算掌握。
(本段唯一反查锚:cs-25-computer-architecture/07/02/结构冒险。)
Practice
本课练习
先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。
完成结构冒险的系统轨迹设计题:提交位宽与初态、软件/ISA/微结构三层接口、逐周期或逐访问轨迹、性能公式、一个失败反例与恢复。
【公开评分量表(10分)】接口2分;轨迹3分;计算2分;失败边界2分;复核1分。只列名词不得分。