CS152 · Lab 2
Lab 2: Rocket Cache Hierarchy
把第 6-10 课讲的缓存放置策略、AMAT、TLB 变成真实硬件上可以测量的数字:在一颗真实的 Rocket RISC-V 核心上,通过矩阵转置这个经典的访存局部性案例,亲手调整缓存参数并观察性能变化。
发布:2023-02-14(随第 9 课)
截止:2023-03-02
难度:中等
实验目标
- 在单核 Rocket Chip(RV64GC,
CS152RocketConfig,4KiB 直接映射 L1)上运行真实的矩阵转置代码
- 通过缓存分块(cache blocking)技术,亲手体会第 8 课"编译器局部性优化"讲过的循环变换如何转化为真实的性能提升
- 通过调整 L1 相联度、增加 L2,理解第 7 课"缓存参数如何影响命中率/命中时间"这对权衡在真实硬件上的具体表现
指导性部分(约占 30% 分数)——矩阵转置案例
核心案例研究围绕矩阵转置展开,循序渐进:
- 朴素转置:先跑一个未经优化的转置实现,观察其糟糕的访存局部性(正是第 8 课"矩阵乘法朴素代码"里按列访问模式差的同一类问题)
- 缓存分块:引入分块因子 B,把大矩阵拆成能装进缓存的小块来转置,寻找最优的分块大小
- 调整 L1 相联度:通过
WithL1DCacheWays/WithL1DCacheSets 配置项调整数据缓存的组织方式,观察相联度变化对命中率的影响
- 增加 L2:接入一个 8 路组相联、64KiB 的二级缓存(
CS152RocketL2Config),再引入第二层分块,观察多级缓存下最优分块策略如何变化
开放性部分(约占 70% 分数,三选一)
- 逆向工程"神秘"配置:用
ccbench 指针追逐(pointer-chase)微基准测试,反推出一个未知配置的缓存/TLB/DRAM 参数——这是第 7、9 课讲的 AMAT/TLB Reach 概念的逆向应用
- 设计一个硬件 L1 预取器:用 Chisel(
CustomL1Prefetcher)或 C++ DPI 模型实现,在矩阵转置/Lab 1 基准测试/GAPBS BFS 上评估效果——直接呼应第 8 课"预取时机比预测准确性更重要"这一核心论点
- 设计自定义缓存替换策略与受害者缓存:在
spike 模拟器的缓存模型(cachesim.cc)中实现,用 5 个 SPEC CPU2006 基准测试(bzip2、mcf、soplex、sjeng、lbm)评估——直接呼应第 8 课讲过的受害者缓存(HP 7200)设计思路
交付物与评分说明
- 指导性部分独立完成、单独提交;开放性部分可以组队(每组一个问题)
- 报告须为可读的英文摘要,不接受日志文件转储
- 全学期至少完成 3/5 个实验,否则自动判定为 F
知识检查
问题 1:Lab 2 指导性部分中的"缓存分块(cache blocking)"技术,直接呼应了第几课的什么内容?
问题 2:开放性部分选项 2(设计硬件 L1 预取器)直接呼应第 8 课的哪条核心论点?
参考资料与延伸阅读
🧪 Lab 2