Cache性能分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Cache 性能分析

一、性能分析

1.不同容量下Cache 命中率:

设置:选择不同的cache 容量,2k ,4k ,8k ,16k ,32k ,64k ,128k ,256k

块大小:16k 相联度:直接相连 替换策略:LRU 预取策略:不预取 写策略:写回

写不命中的调快策略:按写分配 文件:cc1.din

表1 不同容量下Cache 命中率

图1

结论:在其他条件一定的情况下,随着cache 容量的增加,不命中率逐渐减小

2.相联度对不命中率的影响:

设置:Cache 容量:64K/256KB 块大小;16B 相联度设置:1,2,4, 8,16,32 替换策LRU 预取策略:不预取 写策略:写回 写不命中的调快策略:按写分配 文件:cc1.din

Cache 容量为64KB 时:

表2 当容量为64K 时的不命中率

相联度 1 2 4 8 16 32

不命中率(%)

2.71 1.80 1.61 1.55 1.54 1.54

Cache 容量为256KB 时:

表3 当容量为256K 时的不命中率

相联度 1 2 4 8 16 32

不命中率(%)

1.58 1.34 1.28 1.26 1.24 1.24 结论:

Cache 的容量(KB ) 2 4 8 16 32 64 128 256

不命中率(%)

18.61 14.09 10.12 6.34 3.81 2.71 1.95 1.58

图2

结论:(1)当Cache容量一定时,随着相联度的不断增加,不命中率逐渐减小,但是当相联度增加到一定程度时,不命中率保持不变。

(2)当关联度相同时,Cache容量越大,不命中率越小,当关联度增加到一定程度时,不命中率和Cache容量大小无关。

3.Cache块大小对命中率的影响:

设置:Cahce块大小(B):16,32,64,128,256 Cache容量设置(KB):2,8,32,128,512

相联度:直接相联预取策略:不预取写策略:写回写不命中的调快策略:按写分配文件:eg.din

表4 不同Cache行大小情况下Cache的不命中率

块大小(B)

Cache的容量(KB)

2 8 32 128 512

16 7.80% 7.40% 7.20% 7.20% 7.20%

32 5.40% 5.00% 4.70% 4.70% 4.70%

64 4.00% 3.40% 3.10% 3.10% 3.10%

128 4.40% 3.30% 2.40% 2.40% 2.40%

256 6.50% 5.10% 2.30% 1.90% 1.90%

图3

结论:(1)在Cache容量一定时,Cache 不命中率随着Cache行的增加先减小后增加。

(2)在Cache行一定的情况下,Cache不命中率随着Cache容量的增加不断减小。

4.替换算法对不命中率的影响:

设置:Cache 大小设置如下,Cache 行大小:64B 预取策略:不预取 写策略:写回 写不命中的调快策略:按写分配 文件:tex.din

表5 替换算法对不命中率的影响 Cache 的容量

相联度

2路 4路 8路 LRU

FIFO RAND LRU FIFO RAND LRU FIFO RAND 16KB 0.09% 0.10% 0.37% 0.09% 0.11% 0.11% 0.10% 0.11% 0.33% 64KB 0.07% 0.08% 0.10% 0.07% 0.07% 0.07% 0.07% 0.07% 0.07% 256KB 0.07% 0.07% 0.07% 0.07% 0.07% 0.07% 0.07% 0.07% 0.07% 1MB

0.07%

0.07%

0.07%

0.07%

0.07%

0.07%

0.07%

0.07%

0.07%

结论:(1)LRU 、FIFO 、RAND 算法的不命中率随着相联度的增加而减少且随着cache 容量的增加而减少,但是当Cache 容量达到一定程度时,命中率和替换算法无关。

(2)在相联度相同,cache 容量相同时,使用LRU 替换算法的不命中率比其他的算法的不命中率小;

(3)当cache 容量增大到一定程度,相联度达到一定程度时,不命中率不会再降低,且与算法的选择关系不大。

5.降低不命中率的方法

通过以上对Cache 性能的分析,我们可以看出要提高命中率可以采取以下方法: (1)增加Cache 块大小 (2)增加cache 容量 (3)提高相联度

二、关于程序实现:

说明:程序没有实现出来,只有一些思路 (1)命中率的计算:

假设Cache 容量为16KB ,块大小为16B ,相联度为4路,那么: 1路大小为4B ,所以字地址位数为2

Cache 块数:

104142221616==B

B

B KB ,所以组号位数为10 剩下的就是tag 位了

由于所给的程序中的数据都是16进制的,那么我们要做的工作包括: ①把16进制转换为二进制

②对数据进行扩展,统一扩展为32位(不足的补0) ③截取tag 标志位

设置一个用于记录命中的count

tag 组号 字地址

命中率的计算就以tag位的比较为主:

tag位相同就表示命中(count++),否则就没命中

(2)替换算法

LRU替换算法:

可以使用计数器方法:

Step1:

被调入或者被替换的块,其计数器清“0”,而其它的计数器则加“1”。

Step2:

当访问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值,则该块的计数值加“1”;如果块的计数值大于命中块的计数值,则数值不变。最后将命中块的计数器清为0。

Step3:

需要替换时,则选择计数值最大的块被替换。

RAND替换算法:

随机替换算法就是用随机数发生器产生一个要替换的块号,将该块替换出去,这里需要设置一个随机数产生函数。

FIFO替换算法:

可以设置一个标志first = 1,然后给每一个数据一个sequence标志位

数据进来时:sequence = first;

first++;

那么替换的时候我们就替换带哦sequence 排在最前面的数据

(3)写回法和写直达法

写回法:

执行“写”操作时,只写入Cache,仅当Cache中相应的块被替换时,才写回主存。

这里,需要设置一个“修改位”-Dirty,当某行被换出时,根据此行修改位是1还是0,决定是将该行内容写回主存还是简单的丢弃。

如果Cache写未命中写回法的处理:为包含欲写字的贮存快在cache分配一行,将此块整个拷贝到Cache后对其进行修改。

写直达法:

写直达法不需要设置一个修改位,写cache与写主存同步进行

相关文档
最新文档