【计算机系统结构实验】实验3 Cache性能分析

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         读指令

【计算机系统结构实验】实验3 Cache性能分析_第1张图片

因为是第一次访问该块,所以cache中没有该块,所以不命中。

地址流文件中,指令地址为408ed4,换算成十进制为4,230,868,即为模拟结果中的地址。

因为统一Cache(容量64KB),块大小32B,相联度为1(即直接映像),所以有2048块(组),索引占11位。

该块的块号为2 0476(16进制),块内地址为14,索引(组)为476。

2. 0  10019d94       读数据

【计算机系统结构实验】实验3 Cache性能分析_第2张图片

因为是第一次访问该块,所以cache中没有该块,所以不命中。

地址流文件中,数据地址为10019d94,换算成十进制为268,541,332,即为模拟结果中的地址。

因为统一Cache(容量64KB),块大小32B,相联度为1(即直接映像),所以有2048块(组),索引占11位。

该块的块号为80 0CEC(16进制),块内地址为14,索引(组)为4EC。

3. 2  408ed8         读指令

【计算机系统结构实验】实验3 Cache性能分析_第3张图片

地址流文件中,指令地址为408ed8,换算成十进制为4,230,872,即为模拟结果中的地址。

因为统一Cache(容量64KB),块大小32B,相联度为1(即直接映像),所以有2048块(组),索引占11位。

该块的块号为2 0476(16进制),块内地址为18,索引(组)为476。

因为是第二次访问该块,cache中有该块,所以命中。

4. 1  10019d88       写数据

【计算机系统结构实验】实验3 Cache性能分析_第4张图片

地址流文件中,数据地址为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相联度对不命中率的影响

  1. 点击“复位”按钮,把各参数设置为默认值,此时的Cache容量为64KB。选择一个地址流文件,比如all.din。
  2. 选择不同的Cache相联度,分别为直接映像、2路、4路、8路、16路和32路。分别执行模拟器(点“执行到底”按钮),自己列表记录各种情况下的不命中率。
  3. 根据该模拟结果,写出你得出的结论。

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块大小对不命中率的影响

  1. 点击“复位”按钮,把各参数设置为默认值。选择一个地址流文件,比如all.din。
  2. 对于不同的Cache容量,分别为2KB、8KB、32KB和128KB,在每种容量下选择不同的Cache块大小(分别为16B、32B、64B、128B和256B)进行实验。分别执行模拟器(点“执行到底”按钮),自己列表记录各种情况下的不命中率。
  3. 分析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)种作用效果超过第一种作用,使不命中率上升。

-------------------------------------------------------------------------------------------------------

最后一点碎碎念:如果各位有发现本文有哪处有误或理解不当的地方,敬请指正。

你可能感兴趣的:(计算机系统结构,cache)