题目重点:未完成缺失需要状态,同line后续请求和新line占用不同资源。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练MSHR按cache line地址标识,entry存目标请求列表/下级事务状态;读写权限升级另有状态机。
- entry数量、每entry目标上限、write buffer容量都是模型参数,不指定真实芯片数值。
解题路线
- cache miss先查是否已有line的MSHR,能兼容则把新请求挂target而不重复发相同fetch;不同line需要新entry,满时向上游背压。
- 下级响应找到entry,填cache并满足兼容targets,然后释放;写请求还要确认排他权限,不能只因为数据已到就无条件完成。取消CPU请求未必允许取消已经发出的内存事务。
- MSHR不等于writeback buffer:脏驱逐占写回队列,可能独立满。研究瓶颈应分entry-full、target-full、writeback-full、下级带宽和长期事务,避免只扩大一个队列。
手动走一遍
A/B同时读同line,常见只发一个下级读取、两个target;C读另一line需第二entry。两个entry都被长延迟miss占用,第三个不同line miss等待,即使其最终数据很快也无法无限发起。
规模与取舍
M entry、每entry最多K targets,状态O(MK);Little定律粗估并发需求≈miss到达率×平均服务时间,仍需考虑分布和资源约束。
易错点与追问
容易失分的边界
- 同line读和写合并必须满足权限/顺序,不是纯地址相同就安全。
- 将请求丢弃当背压会破坏程序结果,应retry或阻塞。
继续深挖
- MSHR增大但下级带宽已满,为什么吞吐可能不变?
- snoop响应和fill同tick,状态转换如何避免重复完成?
技术参考
- gem5内存请求与MSHR:技术语义参考,具体题目按本文约定。
