Cache性能分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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与写主存同步进行