‘2020 春 第六章 家庭作业
6.32和6.33类似,而且都用到6.31的图,可以放在一起说
首先,这个高速缓存b=2,有八个组,所以S=8,s=3,而地址有13位,所以t=13-2-3=8位
6.32
A
将0x718转换成2进制
0 0 1 1 1 0 0 0 1 1 0 0 0
B
块偏移量CO由最后位决定 CO=0x0
索引CI由4-2位决定CI=(110)2=0X6
高速缓存标记CT由高八位决定CT=0X38
判断是否命中,遵循,组选择,行匹配,字抽取的顺序
- 组选择:选第六组
2.行匹配
只有tag值相等且有效位为1才算命中,所以第六组的第一行不算命中,因为有效位是0
在第四行命中
3.字抽取
抽取第0个字节 0xFA
6.33
A
将0x16EC转换成2进制
1 0 1 1 0 1 1 1 0 1 1 0 0
B
块偏移量CO由最后位决定 CO=0x0
索引CI由4-2位决定CI=(011)2=0X3
高速缓存标记CT由高八位决定CT=0Xb7
判断是否命中,遵循,组选择,行匹配,字抽取的顺序
- 组选择:选第六组
2.行匹配
只有tag值相等且有效位为1才算命中,第三组没有tag值相等的,所以不命中
3.
返回的高速缓存值为—
A
高速缓存为1024字节,块大小B=32,直接映射E=1,所以高速缓存共有S=C/(EB)1024/32=32组,所以s=5,b=5,因为E=1,t=0(直接映射不需要标记位)
二维数组在机器中的存储等价于多个相同大小的一维数组连续存储,所以x[1][i]的地址等于x[0][i]的地址+4256=x[0][i]的地址+2^10
所以x[0][i]和x[1][i]的地址低十位是完全相同的,也就是说对应的s和b,也即组索引和块偏移完全相同,每次对cache的访问都是不命中,不命中率为100%!
B
如果把高速缓存大小变为2048,那么S=2048/32=128组,s=6,b=5
x[1][i]与x[0][i]的组索引不再相同,对应于两个不同的组中的块,那么32字节大小的块只有第一次访问是冷不命中,之后的七次访问都是命中,不命中率12.5%。
C
高速缓存大小C=1024,两路组相联E=2,块大小B=32,则S=1024/(2*32)=16,b=5,s=4
x[0][i]与x[1][i]可以放在同一个组中的不同行,对于每个块的第一次访问是不命中,后七次都是命中,所以不命中率为12.5%
D
更大的高速缓存大小不能降低不命中率,因为高速缓存一开始是空的,无论多大的高速缓存,对于每个块的第一次访问都是冷不命中(冷不命中是无法避免的),后七次访问才可能是命中,块大小为32时,不命中率最大只能是12.5%
E
能降低不命中率,当块变大时,在第一次不命中后,后几次连续访问命中的次数会变多,连续访问的比例变多,不命中率降低
该高速缓存为直接映射E=1,每行四个字节,块大小B=4,高速缓存大小C=64kb,所以S=64*1024/4=16kb
所以b=2,s=14
对于这道题,其实不用考虑这么复杂,因为结构体是连续存储,char类型成员无特殊的对齐规则,所以只有对buffer[i][j].r的访问是不命中,对g b a三个结构体成员的访问是命中的
不命中率为1/4=25%