CS152 · Lab 2

Lab 2: Rocket Cache Hierarchy

把第 6-10 课讲的缓存放置策略、AMAT、TLB 变成真实硬件上可以测量的数字:在一颗真实的 Rocket RISC-V 核心上,通过矩阵转置这个经典的访存局部性案例,亲手调整缓存参数并观察性能变化。

发布:2023-02-14(随第 9 课) 截止:2023-03-02 难度:中等

实验目标


指导性部分(约占 30% 分数)——矩阵转置案例

核心案例研究围绕矩阵转置展开,循序渐进:

  1. 朴素转置:先跑一个未经优化的转置实现,观察其糟糕的访存局部性(正是第 8 课"矩阵乘法朴素代码"里按列访问模式差的同一类问题)
  2. 缓存分块:引入分块因子 B,把大矩阵拆成能装进缓存的小块来转置,寻找最优的分块大小
  3. 调整 L1 相联度:通过 WithL1DCacheWays/WithL1DCacheSets 配置项调整数据缓存的组织方式,观察相联度变化对命中率的影响
  4. 增加 L2:接入一个 8 路组相联、64KiB 的二级缓存(CS152RocketL2Config),再引入第二层分块,观察多级缓存下最优分块策略如何变化

开放性部分(约占 70% 分数,三选一)

  1. 逆向工程"神秘"配置:用 ccbench 指针追逐(pointer-chase)微基准测试,反推出一个未知配置的缓存/TLB/DRAM 参数——这是第 7、9 课讲的 AMAT/TLB Reach 概念的逆向应用
  2. 设计一个硬件 L1 预取器:用 Chisel(CustomL1Prefetcher)或 C++ DPI 模型实现,在矩阵转置/Lab 1 基准测试/GAPBS BFS 上评估效果——直接呼应第 8 课"预取时机比预测准确性更重要"这一核心论点
  3. 设计自定义缓存替换策略与受害者缓存:在 spike 模拟器的缓存模型(cachesim.cc)中实现,用 5 个 SPEC CPU2006 基准测试(bzip2、mcf、soplex、sjeng、lbm)评估——直接呼应第 8 课讲过的受害者缓存(HP 7200)设计思路

交付物与评分说明


知识检查

问题 1:Lab 2 指导性部分中的"缓存分块(cache blocking)"技术,直接呼应了第几课的什么内容?

问题 2:开放性部分选项 2(设计硬件 L1 预取器)直接呼应第 8 课的哪条核心论点?


参考资料与延伸阅读