目录

cache 命中率优化实验

计算机组成原理课程实验(大二下):在给定 Cache 结构下优化矩阵转置的访存行为,降低 miss 数。

任务背景

本实验源自 CMU CS:APP cachelab 的 Part B(transpose)。目标 Cache 为 32 组直接映射、块大小 32 字节(s=5, E=1, b=5),统计三种尺寸矩阵转置过程中的 miss 数并按阈值评分。实验要求与约束(提炼自实验报告):

  • 三个子任务:32×32、64×64、61×67 矩阵转置;
  • 不允许新建辅助数组,局部变量不超过 12 个;
  • 评分阈值(driver.py 中定义):32×32 miss ≤ 300 得满分 8 分,≥ 600 得 0 分;64×64 ≤ 1300 满分 8 分,≥ 2000 得 0 分;61×67 ≤ 2000 满分 10 分,≥ 3000 得 0 分。

trans.c 中 transpose_submit 的优化思路:

  • 32×32:8×8 分块,配合 8 个临时变量按行展开写入,减少 A、B 映射到同一 cache 组的冲突;
  • 64×64:8×8 大块拆成两个 4×8 半块,先搬左半,右半 4 个元素借 B 的缓冲位暂存,再与 A 的下半块交换搬运,进一步降低直接映射冲突(代码注释记录了 8×8 直接分组 4723 → 4611,改 4×4 分块 1699 的调参轨迹);
  • 61×67:非 2 的幂边界,仍用 8×8 分块,按块内实际剩余行列数动态处理,完整块 8 变量展开,边界块(5 列)单独处理。

内容结构

文件 说明
trans.c 学生提交的转置函数(本仓库核心自研代码)
cal_set_num.py 计算矩阵每个元素映射到的 cache 组号(s=5, b=5),辅助分析冲突
cal_set_num.txt 上者输出结果(32×32 与 64×64 的组号分布)
Makefile 构建 test-trans 与 tracegen
test-trans.c 正确性与性能测试驱动
tracegen.c 在 valgrind 下生成访存 trace 的辅助程序
driver.py 总驱动,依次测试三种尺寸并按阈值计分
cachelab.c / cachelab.h 课程提供的辅助函数(注册函数、矩阵初始化、结果输出)
README 课程原始 handout 说明

运行方法

依赖:64 位 x86-64 Linux、gcc、python3、valgrind;另需课程提供的参考模拟器 csim-ref(二进制,不入库,test-trans 内部调用它统计 miss)。

make                                    # 编译 test-trans 和 tracegen
./test-trans -M 32 -N 32               # 单独测某个尺寸
./test-trans -M 64 -N 64
./test-trans -M 61 -N 67
python3 driver.py                       # 一键测三种尺寸并计分
python3 cal_set_num.py                  # 打印矩阵元素到 cache 组号的映射
make clean                              # 清理生成物

说明:实验原始目录中另有 csim-ref、test-trans、tracegen、trans.o 等编译产物或课程二进制,以及 23MB 的 valgrind 中间 trace 文件 trace.tmp 与 trace.f0/f1,均为运行时生成物,不入库,需要时由 make 与 test-trans 重新生成。

来源声明

  • 课程框架(Makefile、cachelab.c/h、test-trans.c、tracegen.c、driver.py、README、cal_set_num.py、csim-ref)为课程提供的 CMU CS:APP cachelab 风格 handout,非本人原创;
  • trans.c 中的 transpose_submit 及三种尺寸的分块策略、cal_set_num.txt 的输出结果为本人完成;
  • 仓库未包含实验报告、课件等文档,以及任何个人信息。
关于

计算机组成原理实验:CMU cachelab 风格的矩阵转置 cache 命中率优化(trans.c)

41.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号