3.1 实验目的
加深对Cache的基本概念及其工作原理的理解;
掌握降低Cache不命中率的各种方法以及这些方法对提高Cache性能的好处;
理解常见替换算法(LRU与随机法)的基本思想以及它们对Cache性能的影响。
3.2 实验平台
实验平台采用Cache模拟器MyCache。
3.3 实验内容
快速阅读课件“第7章 存储系统”的“7.2节 映象规则/查找算法/替换算法/ 写策略”(19-41屏),“7.3节 降低Cache不命中率”(49-56屏)。
3.3.1 Cache块访问分析
1)启动MyCache,点击“复位”,把各参数设置为默认值,选择一个地址流文件,比如all.din。查看一下地址流文件all.din中的前4行:
2 408ed4 读指令
0 10019d94 读数据
2 408ed8 读指令
1 10019d88 写数据
每行都由两个数字组成,第一个数字表示操作类型(0:读数据,1:写数据,2:读指令),第二个数字表示地址(16进制)。比如:第一行的意思就是读指令(指令地址是408ed4)。
2)按默认设置,即:统一Cache(容量64KB),块大小32B,相联度为1(即直接映像),替换策略LRU,不预取,写回法,写不命中时按写分配。
步进执行,自己分析写出前4步操作(即前4行)每步访问的主存块号、块内地址、Cache块号,分析不命中/命中的原因。
1. 2 408ed4 读指令
因为是第一次访问该块,所以cache中没有该块,所以不命中。
地址流文件中,指令地址为408ed4,换算成十进制为4,230,868,即为模拟结果中的地址。
因为统一Cache(容量64KB),块大小32B,相联度为1(即直接映像),所以有2048块(组),索引占11位。
该块的块号为2 0476(16进制),块内地址为14,索引(组)为476。
2. 0 10019d94 读数据
因为是第一次访问该块,所以cache中没有该块,所以不命中。
地址流文件中,数据地址为10019d94,换算成十进制为268,541,332,即为模拟结果中的地址。
因为统一Cache(容量64KB),块大小32B,相联度为1(即直接映像),所以有2048块(组),索引占11位。
该块的块号为80 0CEC(16进制),块内地址为14,索引(组)为4EC。
3. 2 408ed8 读指令
地址流文件中,指令地址为408ed8,换算成十进制为4,230,872,即为模拟结果中的地址。
因为统一Cache(容量64KB),块大小32B,相联度为1(即直接映像),所以有2048块(组),索引占11位。
该块的块号为2 0476(16进制),块内地址为18,索引(组)为476。
因为是第二次访问该块,cache中有该块,所以命中。
4. 1 10019d88 写数据
地址流文件中,数据地址为10019d88,换算成十进制为268,541,320,即为模拟结果中的地址。
因为统一Cache(容量64KB),块大小32B,相联度为1(即直接映像),所以有2048块(组),索引占11位。
该块的块号为80 0CEC(16进制),块内地址为8,索引(组)为4EC。
因为是第二次访问该块,cache中有该块,所以命中。
3.3.2 Cache容量对不命中率的影响
1)点击“复位”按钮,把各参数设置为默认值。选择一个地址流文件,比如all.din。
2)选择不同的Cache容量,分别2KB、4KB、8KB、16KB、32KB、64KB、128KB、256KB。分别执行模拟器(点“执行到底”按钮),自己列表记录各种情况下的不命中率。
Cache容量(KB) | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 |
不命中率(%) | 9.87 | 7.19 | 4.48 | 2.65 | 1.42 | 0.89 | 0.60 | 0.49 |
3)根据该模拟结果,写出你得出的结论。
由表可见,Cache容量越高,不命中率越低。原因是当Cache容量越高时,访问的块越有可能被保留在cache中。其中,当cache容量大于64KB时,不命中率的降低幅度大幅下降。
3.3.3相联度对不命中率的影响
- 点击“复位”按钮,把各参数设置为默认值,此时的Cache容量为64KB。选择一个地址流文件,比如all.din。
- 选择不同的Cache相联度,分别为直接映像、2路、4路、8路、16路和32路。分别执行模拟器(点“执行到底”按钮),自己列表记录各种情况下的不命中率。
- 根据该模拟结果,写出你得出的结论。
Cache相联度(路) | 1(直接映像) | 2 | 4 | 8 | 16 | 32 |
不命中率(%) | 0.89 | 0.53 | 0.47 | 0.45 | 0.44 | 0.44 |
由表可见,Cache相联度越高,不命中率越低。原因是因为cache相联度越高时,块存放的自由度越高,被替换出的可能性越小。其中,当Cache相联度大于8时,不命中率的降低幅度大幅下降。
3.3.4 Cache块大小对不命中率的影响
- 点击“复位”按钮,把各参数设置为默认值。选择一个地址流文件,比如all.din。
- 对于不同的Cache容量,分别为2KB、8KB、32KB和128KB,在每种容量下选择不同的Cache块大小(分别为16B、32B、64B、128B和256B)进行实验。分别执行模拟器(点“执行到底”按钮),自己列表记录各种情况下的不命中率。
- 分析Cache块大小对不命中率的影响。
Cache容量(KB)/ 不命中率(%)/ Cache块大小(B) | 2 | 8 | 32 | 128 |
16 | 12.02 | 5.79 | 1.86 | 0.95 |
32 | 9.87 | 4.48 | 1.42 | 0.60 |
64 | 9.36 | 4.03 | 1.20 | 0.43 |
128 | 10.49 | 4.60 | 1.08 | 0.35 |
256 | 13.45 | 5.35 | 1.19 | 0.34 |
由表可见,当Cache容量一定时,随着Cache块大小增加,不命中率下降后又上升。这是因为增加块大小会产生双重作用:(1)块存放的自由度增高,减少了强制性不命中;(2)Cache中可存放的块的数目减少,增加了不命中率。当块比较小时,第(1)种作用起主要效果,使不命中率下降;当块比较大时,第(2)种作用效果超过第一种作用,使不命中率上升。
-------------------------------------------------------------------------------------------------------
最后一点碎碎念:如果各位有发现本文有哪处有误或理解不当的地方,敬请指正。