评分标准
我们将在以下 4 个测例上运行你编写的缓存测试程序和优化前后的矩阵乘法程序,具体规格如下:
测例编号 | 访存延迟 | 缓存大小(B) | 缓存行大小(B) | 相联度 | 替换策略 | 写策略 | 矩阵乘法测试 |
---|---|---|---|---|---|---|---|
1 | 5 | 2048 | 32 | 4 | LRU | 写通过 | |
2 | 5 | 4096 | 4 | 16 | FIFO | 写通过 | |
3 | 5 | 512 | 16 | 8 | LRU | 写回 | √ |
4 | 5 | 1024 | 8 | 4 | FIFO | 写回 | √ |
你只需要通过这 4 个测例即可,其他规格 cache 在本实验中不做要求。
具体评分细则如下:
- 缓存大小测试:2 分。通过测试 1 分,报告中给出原理 1 分。
- 缓存行大小测试:3 分。通过测试 2 分,报告中给出原理 1 分。
- 相联度测试:3 分。通过测试 2 分,报告中给出原理 1 分。
- 替换策略测试:1 分。通过测试 0.5 分,报告中给出原理 0.5 分。
- 写策略测试:1 分。通过测试 0.5 分,报告中给出原理 0.5 分。
- 矩阵乘法测试:2 分。通过测试 1.5 分,报告中给出原理 0.5 分。
所有测试项目均为捆绑测试(即必须通过全部测例才可以获得分数)。总分不会超过 10 分。
实验收取
请在自己的仓库中,将 .gitlab-ci.yml
修改为如下内容:
image: riscv64:alpha
before_script:
- rm -rf checkfiles/ || true
- rm -rf build/ || true
- git clone $TESTCASES
- mkdir build && cp tomasulo-simulator-testcases/check_predict.sh build/check_predict.sh && cp tomasulo-simulator-testcases/check_tomasulo.sh build/check_tomasulo.sh
- cp -r tomasulo-simulator-testcases/checkfiles ./checkfiles
- cd build && cmake -DJUDGE_ONLINE:STRING=true ..
- make
after_script:
- cd ~/ && rm -rf build
stages:
- cache
job 1:
stage: cache
script:
- ./cache_checker -f ../checkfiles/cache_spec.chk
tags:
- 2024-alpha
这样评测 ci 就会运行 cache-lab 的相关测例,并进行评分了。对于标准实现,评分程序最后的输出如下:
Testcase 0 1 2 3
Size PASSED PASSED PASSED PASSED
Block PASSED PASSED PASSED PASSED
Assoc PASSED PASSED PASSED PASSED
Matmul SKIPPED SKIPPED PASSED PASSED
Replace FAILED SKIPPED SKIPPED SKIPPED
Write PASSED PASSED FAILED SKIPPED
Final score: 100
可以看到,标准实现没有完成替换策略和写策略的测试,只完成了 4 项必做任务。checker
输出的最终分数是按照对应项目的报告满分,满分为 100 计算。请同学们在进行实验时自己进行换算。
实验提示
- 给出的访存延迟仅仅为期望值,实际的访存时间可能会有浮动。
- 内存模拟器模拟的内存对连续访存有优化,重复读取相同地址或者连续读取相邻地址的访存速度会显著变快。
- 请不要进行硬编码,保证你的程序有一定的普适性。如果我们发现你在某个测试项目当中对测例进行过拟合,你将会失去对应测试项目的分数。
- 实验中提供的
run_tests.sh
会运行上述 4 个测例。在i7-10750H
CPU 上,4 个测试大约需要运行 10 分钟,在 CI 评测机上大约需要运行 7 分钟。 - 实验的测试时间很长,请同学们务必安排好时间进行实验,防止因服务器压力过大导致实验无法提交。
- 评测机的 Timeout 为 15min。如果你发现自己的实现不能够满足时间限制,请优化你的实现。
实验参考
作为参考,我们给出标准实现在模拟器的对应测例的运行周期数。
缓存大小测试
测例\测试大小 | 512 | 1024 | 2048 | 4096 | 8192 |
---|---|---|---|---|---|
1 | 21052 | 21167 | 21292 | 43497 | 43420 |
2 | 21065 | 21065 | 21067 | 21058 | 29157 |
3 | 21033 | 35303 | 35225 | 35296 | 35272 |
4 | 21098 | 21098 | 31208 | 31128 | 31201 |
缓存行大小测试
测例\测试步长 | 2 | 4 | 8 | 16 | 32 | 64 |
---|---|---|---|---|---|---|
1 | 85523 | 89107 | 96275 | 110611 | 139281 | 172057 |
2 | 81930 | 81932 | 114670 | 114614 | 114726 | 114629 |
3 | 85006 | 88079 | 94224 | 106513 | 139247 | 139208 |
4 | 83982 | 86031 | 90125 | 122827 | 122824 | 122967 |
相联度测试
测例\测试相联度 | 1 | 2 | 4 | 8 | 16 | 32 |
---|---|---|---|---|---|---|
1 | 110645 | 96329 | 179154 | 175689 | 173757 | 172937 |
2 | 110630 | 96305 | 89147 | 85599 | 116522 | 115651 |
3 | 110634 | 96313 | 89174 | 142861 | 141061 | 147940 |
4 | 110631 | 96306 | 129939 | 126557 | 124744 | 123973 |
矩阵乘法测试
测例 3:
[ WARNING ] Before optimization, cache hit rate = 0.533, finished in 116655 cycles
[ WARNING ] After optimization, cache hit rate = 0.952, finished in 98985 cycles
测例 4:
[ WARNING ] Before optimization, cache hit rate = 0.774, finished in 91854 cycles
[ WARNING ] After optimization, cache hit rate = 0.932, finished in 95446 cycles
最后更新:
2025年3月11日
作者: