2015CMU 15-213 CSAPP 深入理解计算机系统 课程视频含英文字幕
这是2015年的课程,PPT 已经不太一样了。
与实验直接相关的内容是 Lecture 11 与 12.
学校下发的是 2013年 的 PPT 和 2012年 的文档,我姑且还是翻译了一下:
Cache Lab 实现与分块
Cache Lab 中文文档
PPT 里面的一幅漫画,不太懂。毕竟没玩过 Video Game
用反向图片搜索找到这个漫画的出处了,附漫画网站:
xkcd:A webcomic of romance,
sarcasm, math, and language.
差不多已经把文档和 PPT 看过一遍了,CMU 的公开课也看了一下。感觉差不多可以开始做实验了。
任务1
PS:学校还是很蛋疼的,要我们在还没学对应知识的时候就做实验,给的阅读材料也不是很全,只看材料不看公开课的讲解还是很难理解的。
那么就分析一下文档中给出的例子吧:
linux> ./csim-ref -v -s 4 -E 1 -b 4 -t traces/yi.trace
L 10,1 miss
M 20,1 miss hit
L 22,1 hit
S 18,1 hit
L 110,1 miss eviction
L 210,1 miss eviction
M 12,1 miss eviction hit
hits:4 misses:5 evictions:3
根据命令行参数,这个模拟缓存有4个缓存集,结合度为1(每个缓存集有一个缓存行),每个块的字节数为 24 =16个;追迹文件为 yi.trace。下面逐行进行解析:
结合度为1,即“直接映射”,此种方法下,由于缓存集中只有一个缓存行,所以不必考虑驱逐规则,总是“后来者居上”。
set |
line0:有效位 - 标志位 - 块 |
set 0 |
0 - 未知 - 未知 |
set 1 |
0 - 未知 - 未知 |
set 2 |
0 - 未知 - 未知 |
set 3 |
0 - 未知 - 未知 |
-
L 10,1 miss ——从内存地址 0x10(16进制) 开始,取1 个字节的数据(下标从0开始,地址为16,也就是第 17 个字节)Load;由于是第一次访问,缓存中还是空的,此时发生冷落空。于是从内存中取回对应块:
set |
line0:有效位 - 标志位 - 块 |
set 0 |
0 - 未知 - 未知 |
set 1 |
1 - 00000000000000000000000000 - 0x10 ~ 0x1F |
set 2 |
0 - 未知 - 未知 |
set 3 |
0 - 未知 - 未知 |
-
M 20,1 miss hit ——此时缓存中装入了块 1,即第 17 - 32 个字节。然而这次操作是要 Load + Store 地址 0x20 开始的一个字节(第 33 个字节),这个字节在块 2 中,而块 2 不在缓存中,故 Load 时发生落空;Load 之后,块 2 被装入缓存,故 Store 时连击。
set |
line0:有效位 - 标志位 - 块 |
set 0 |
0 - 未知 - 未知 |
set 1 |
1 - 00000000000000000000000000 - 0x10 ~ 0x1F |
set 2 |
1 - 00000000000000000000000000 - 0x20 ~ 0x2F |
set 3 |
0 - 未知 - 未知 |
-
L 22,1 hit ——Load 第 35 个字节,在块 2 中,连击。
set |
line0:有效位 - 标志位 - 块 |
set 0 |
0 - 未知 - 未知 |
set 1 |
1 - 00000000000000000000000000 - 0x10 ~ 0x1F |
set 2 |
1 - 00000000000000000000000000 - 0x20 ~ 0x2F |
set 3 |
0 - 未知 - 未知 |
-
S 18,1 hit ——Store 第 24 个字节,在块 1 中,连击。
set |
line0:有效位 - 标志位 - 块 |
set 0 |
0 - 未知 - 未知 |
set 1 |
1 - 00000000000000000000000000 - 0x10 ~ 0x1F |
set 2 |
1 - 00000000000000000000000000 - 0x20 ~ 0x2F |
set 3 |
0 - 未知 - 未知 |
-
L 110,1 miss eviction ——Load 第 273 字节,在块 17 中,块 17 不在缓存中,落空。Load 之后块 17 被装入缓存,由于17%4 = 1,块 17 应当被装在 1 处(或者将地址展开为二进制,根据 set index 为 01 判断),而 1 处已经装了 块 1,故块 1 被驱逐,块 17 被取回。
set |
line0:有效位 - 标志位 - 块 |
set 0 |
0 - 未知 - 未知 |
set 1 |
1 - 00000000000000000000000100 - 0x110 ~ 0x11F |
set 2 |
1 - 00000000000000000000000000 - 0x20 ~ 0x2F |
set 3 |
0 - 未知 - 未知 |
-
L 210,1 miss eviction ——Load 第 529 字节,在块 33 中,块 33 不在缓存中,落空。Load 之后块 33 被装入缓存,由于33%4 = 1,块 33 应当被装在 1 处,而 1 处已经装了 块 17,故块 17 被驱逐,块 33 被取回。
set |
line0:有效位 - 标志位 - 块 |
set 0 |
0 - 未知 - 未知 |
set 1 |
1 - 00000000000000000000001000 - 0x210 ~ 0x21F |
set 2 |
1 - 00000000000000000000000000 - 0x20 ~ 0x2F |
set 3 |
0 - 未知 - 未知 |
-
M 12,1 miss eviction hit ——Load + Store 第 19 字节,在块 1 中,块 1 被驱逐,已经不在缓存中,在缓存容量允许(尚有未使用的缓存行)的情况下,由于多个块映射在一处,发生冲突落空。Load 之后块 1 被装入缓存,块 33 被驱逐。Store 时连击。
set |
line0:有效位 - 标志位 - 块 |
set 0 |
0 - 未知 - 未知 |
set 1 |
1 - 00000000000000000000000000 - 0x10 ~ 0x1F |
set 2 |
1 - 00000000000000000000000000 - 0x20 ~ 0x2F |
set 3 |
0 - 未知 - 未知 |