一、实验目的
(1)加深对Cache的基本概念、基本组织结构以及基本工作原理的理解。
(2)掌握Cache容量、相联度、块大小对Cache性能的影响。
(3)掌握降低Cache不命中率的各种方法以及这些方法对提高Cache性能的好处。
(4) 理解LRU与随机法的基本思想以及它们对Cache性能的影响。
二、实验硬、软件环境
Windows计算机、Mycache算法模拟器
三、实验内容及步骤
1. 首先要掌握MyCache模拟器的使用方法。
(1)双击 MyCache.exe,启动模拟器。
(2)系统打开操作界面,如下图所示:
(3)可以设置的参数包括Cache的容量、块大小、相联度、替换算法、预取策略、写策略、写不命中时的调块策略。可以直接从列表中选择。
(4)访问地址可以选择来自地址流文件,也可以选择手动输入。如果是前者,则可以通过单击“浏览”按钮,从模拟器所在文件夹下的“地址流”文件夹中选取地址流文件(.din)文件,然后执行。执行得方式可以是单步,也可以选择一次执行结束。如果选择手动输入,就可以在“执行控制”区域中输入块地址,然后单击“访问”按钮。系统会在界面的右边显示访问类型、地址、块号以及块内地址。
(5)模拟结果包括:
a) 访问总次数,总的不命中次数,总的不命中率。
b) 读指令操作的次数,其不命中次数及其不命中率。
c) 读数据操作的次数,其不命中次数及其不命中率。
d) 写数据操作的次数,其不命中次数及其不命中率。
e) 手动输入单次访问的相关信息。
2. 设计方法降低Cache不命中率
方法一:探究Cache容量对不命中率的影响
(1)选择不同的Cache容量,包括2KB、4KB,8KB,16KB,32KB,64KB、128KB和256KB。分别执行模拟器(单击“执行到底”按钮即可执行),然后在表4.1中记录各种情况下的不命中率.
表4.1 不同容量下Cache的不命中率
Cache容量(KB) | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 |
不命中率 | 9.78% | 7.19% | 4.48% | 2.65% | 1.42% | 0.89% | 0.42% | 0.40% |
(2)选择 all.din 地址流文件。
(3)以容量为横坐标,画出不命中率随Cache容量变化而变化的曲线。
(4)根据该模拟结果,分析Cache容量对不命中率的影响。
答:根据实验结果可以看出,Cache的不命中率随着Cache容量的增大而降低,但当容量增大到一定程度后(256KB),再增大Cache的容量变化就不明显了。
方法二:相联度对不命中率的影响
(1)用鼠标单击“复位”按钮,把各参数设置为默认值。此时的Cache容量为64KB。
(2)选择一个地址流文件。方法:选择“访问地址”—>“地址流文件”选项,然后单击“浏览”按钮,从本模拟器所在文件夹下的“地址流”文件夹中选取。
(3)选择不同的Cache相联度,包括2路、4路、8路、16路和32路。分别执行模拟器(单击“执行到底”按钮即可执行),然后在表4.2中记录各种情况下的不命中率。
表4.2 当容量为64KB时,不同相联度下Cache的不命中率
相联度 | 1 | 2 | 4 | 8 | 16 | 32 |
不命中率 | 0.89% | 0.53% | 0.47% | 0.45% | 0.44% | 0.40% |
选择 all.din 地址流文件。
- 把Cache的容量设置为256KB,重复3)的工作,并填写表4.3.
表4.3 当Cache容量为256KB时,不同相联度下Cache的不命中率
相联度 | 1 | 2 | 4 | 8 | 16 | 32 |
不命中率 | 0.49% | 0.38% | 0.36% | 0.36% | 0.35% | 0.35% |
(5)以相联度为横坐标,画出在64KB和256KB的情况下不命中率随Cache相联度变化而变化的曲线,并指明地址流文件名all.din。
(6)根据该模拟结果,你能得出什么结论?
答:从图中可以看出,提高相联度可以降低Cache不命中率。但随着相联度提到到一定程度后(8路相联),再提高相联度Cache的不命中率几乎不变了。
方法三: Cache块大小对不命中率的影响
(1)用鼠标单击“复位”按钮,把各参数设置为默认值。
(2)选择一个地址流文件。方法:选择“访问地址”—>“地址流文件”选项,然后单击“浏览”按钮,从本模拟器所在文件夹下的“地址流”文件夹中选取。
(3)选择不同的Cache块大小,包括16B、32B、64B、128B和256B。对于 Cache的各种容量,包括2KB、8KB、32KB、64KB、128KB和512KB。分别执行模拟器(单击“执行到底”按钮即可执行),然后在表4.4中记录各种情况下的不命中率。
表4.4各种情况下 Cache的不命中率
块大小(B) | Cache容量(KB) | |||||
2 | 8 | 32 | 64 | 128 | 512 | |
16 | 12.02% | 5.79% | 1.86% | 1.26% | 0.95% | 0.71% |
32 | 9.87% | 4.48% | 1.42% | 0.89% | 0.60% | 0.42% |
64 | 9.36% | 4.03% | 1.20% | 0.71% | 0.43% | 0.27% |
128 | 10.49% | 4.60% | 1.08% | 0.64% | 0.35% | 0.20% |
256 | 13.45% | 5.35% | 1.19% | 0.67% | 0.34% | 0.16% |
地址流文件名:all.din。
(4)分析Cache块大小对不命中率的影响。
答:从上图可以看出,当Cache容量一定的时候,若增大Cache块大小,Cache的不命中率先是下降,然后反升。这是因为增加块大小会产生双重作用: (1)增加了空间局部性,减少了强制性不命中;(2)减少了Cache中块的数目,所以有可能增加冲突不命中。当块比较小时,第(1)种作用会超过(2)种作用,使不命中率下降:当块比较大时,第(2)种作用超过第(1)种作用,反而使不命中率上上升。
方法四:替换算法对不命中率的影响
(1)用鼠标单击“复位”按钮,把各参数设置为默认值。
(2)选择地址流文件all. din。方法:选择“访问地址”—>“地址流文件”选项,然后单击“浏览”按钮,从本模拟器所在文件夹下的“地址流”文件夹中选取。
(3)对于不同的替换算法、Cache容量和相联度,分别执行模拟器(单击“执行到底”按钮即可执行),然后在表4.5中记录各种情况下的不命中率。
表4.5 LRU和随机替换算法的不命中率比较
Cache容量(KB) | 相联度 | |||||
2路 | 4路 | 8路 | ||||
LRU | 随机算法 | LRU | 随机算法 | LRU | 随机算法 | |
16KB | 1.71% | 2.13% | 1.33% | 1.92% | 1.21% | 2.10% |
64KB | 0.53% | 0.47% | 0.47% | 0.63% | 0.45% | 0.61% |
256KB | 0.38% | 0.39% | 0.36% | 0.37% | 0.36% | 0.36% |
1M | 0.35% | 0.35% | 0.35% | 0.35% | 0.35% | 0.35% |
(4)分析不同的替换算法对Cache不命中率的影响。
答:从上表数据和图示曲线可以看出,无论相联度是多大,在Cache容量比较小时,LRU法的不命中率低于随机法,但当Cache容量增加到一定程度之后(256KB), LRU法和随机法已经没有太大的差别了。