题目重点:解释cache时先明确line、set、way及替换/写策略。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练byte-addressed、容量C、line B、A路组相联,C/B/A为二幂set数。
- 多级延迟按串行访存简化分析;乱序重叠、预取与带宽另算,不能用平均延迟直接预测IPC。
解题路线
- offset=address mod B,set=floor(address/B) mod S,tag=floor(address/(B·S))。同set超过A条活跃line会冲突,即使全cache仍有空位。
- 区分compulsory/capacity/conflict miss,通过相同trace的无限cache/同容量全相联参考帮助归因。write-through/write-back与write-allocate/no-allocate是不同选择维度。
- 训练平均访问延迟hitTime+missRate×missPenalty,必须说明penalty为额外等待且包含何级。实际memory级联每层是条件miss率,不能把全局miss率随意相乘或加。
手动走一遍
C32KiB、B64、A8,S64:offset6bits、set6bits,其余tag。hit1cycle、missRate0.05、额外penalty100,简化平均6cycle;并行访存下吞吐不一定每6cycle一个。
规模与取舍
数据容量C,加tag/valid/dirty/replacement等元数据;访问训练O(A)比较或并行硬件结构,不把软件循环的O(A)当实际硬件固定时延。
易错点与追问
容易失分的边界
- 两地址同set不必互相驱逐,直到超过关联度。
- 增容量不一定降低所有延迟,hitTime/面积/功耗可能上升。
继续深挖
- 怎样设计trace区分容量不足与stride冲突?
- 预取降低miss但提高带宽时,哪些统计显示净收益?
技术参考
- gem5经典Cache:技术语义参考,具体题目按本文约定。
