cache性能分析实验报告.docx
《cache性能分析实验报告.docx》由会员分享,可在线阅读,更多相关《cache性能分析实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
cache性能分析实验报告
cache性能分析实验报告
计算机系统结构实验报告
名称:
Cache性能分析
学院:
信息工程
姓名:
陈明
学号:
S121055
专业:
计算机系统结构
年级:
研一
实验目的
1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理解;
2.了解Cache的容量、相联度、块大小对Cache性能的影响;
3.掌握降低Cache失效率的各种方法,以及这些方法对Cache性能提高的好处;
4.理解Cache失效的产生原因以及Cache的三种失效;
5.理解LRU与随机法的基本思想,及它们对Cache性能的影响;
实验平台
Vmware虚拟机,redhat9.0linux操作系统,SimpleScalar模拟器
实验步骤
1.运行SimpleScalar模拟器;
2.在基本配置情况下运行程序(请指明所选的测试程序),统计Cache总失效次数、三种不同种类的失效次数;
3.改变Cache容量(*2,*4,*8,*64),运行程序(指明所选的测试程序),统计各种失效的次数,并分析Cache容量对Cache性能的影响;
4.改变Cache的相联度(1路,2路,4路,8路,64路),运行程序(指明所选的测试程序),统计各种失效的次数,并分析相联度对Cache性能的影响;
5.改变Cache块大小(*2,*4,*8,*64),运行程序(指明所选的测试程序),统计各种失效的次数,并分析Cache块大小对Cache性能的影响;
6.分别采用LRU与随机法,在不同的Cache容量、不同的相联度下,运行程序(指明所选的测试程序)统计Cache总失效次数,计算失效率。
分析不同的替换算法对Cache性能的影响。
预备知识
1.SimpleScalar模拟器的相关知识。
详见相关的文档。
2.复习和掌握教材中相应的内容
(1)可以从三个方面改进Cache的性能:
降低失效率、减少失效开销、减少Cache命中时间。
(2)按照产生失效的原因不同,可以把Cache失效分为三类:
①强制性失效(Compulsorymiss)
当第一次访问一个块时,该块不在Cache中,需从下一级存储器中调入Cache,这就是强制性失效。
这种失效也称为冷启动失效或首次访问失效。
②容量失效(Capacitymiss)
如果程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生失效。
这种失效称为容量失效。
③冲突失效(Conflictmiss)
在组相联或直接映象Cache中,若太多的块映象到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。
这就是发生了冲突失效。
这种失效也称为碰撞失效(collision)或干扰失效(interference)。
(3)降低Cache失效率的方法:
增加Cache块大小、提高相联度、VictimCache、伪相联Cache、硬件预取技术、由编译器控制的预取和编译器优化。
(4)替换算法
①随机法:
为了均匀使用一组中的各块,这种方法随机地选择被替换的块。
②最近最少使用法LRU(LeastRecentlyUsed):
选择近期最少被访问的块作为被替换的块。
但由于实现比较困难,现在实际上实现的LRU都只是选择最久没有被访问过的块作为被替换的块。
f:
FIFO,先进先出;
r:
RANDOM,随机策略。
例如:
-cache:
dl1dl1:
2048:
64:
4:
r,表示对一级数据cache进行配置,2048表示有2048组,64表示cache块大小为64byte,4表示相联度为4,r表示替换策略为RANDOM。
在此配置下,一级数据cache的容量为2048*64*4=512KB。
由于SimplescalarSpec2000测试程序在其官方网站不能下载,故使用simplescalar模拟器自带的测试程序以及自己设计的一个程序进行测试。
自带的测试程序是在/root/simplescalar/simplesim-3.0/tests-pisa/bin.little目录下的test-math,test-fmath,test-llong以及test-printf。
我们所有的实验内容都是对一级数据cache来进行分析的。
在simplescalar中,我们使用的模拟器是sim-cache。
二simplescalar模拟器基本配置情况下的运行模拟
在基本的配置情况下运行自己设计的程序,代码如下:
#include
Main()
{
printf(“helloworld!
\n”);
return0;
}
1.编辑好程序后,将其保存在/root/simplescalar文件夹下,文件命名为hello.c,用安装好的simplescalar中的编译器sslittle-na-sstrix-gcc(它的访问目录为/root/simplescalar/bin/sslittle-na-sstrix-gcc)对其进行编译,编译后生成了能够在模拟器中可以运行的可执行文件a.out。
命令行运行界面如下图所示:
2.我们使用simplescalar中的模拟器sim-cache对a.out模拟执行,执行后的界面如下图所示:
说明:
下面的截取的界面是一个完整的界面,限于完整的界面太大,在后面的实验内容的三、四、五、六部分只截取了我们需要的部分界面。
3.对运行结果进行分析
从上面的运行结果中我们提取出一级数据cache(dl1)的信息进行分析:
dl1.accesses4420#totalnumberofaccesses一级数据cache上的总访问次数
dl1.hits3963#totalnumberofhits一级数据cache上的命中次数
dl1.misses457#totalnumberofmisses一级数据cache上的失效次数
dl1.replacements201#totalnumberofreplacements一级数据cache上发生替换的次数
dl1.writebacks190#totalnumberofwritebacks一级数据cache上发生写回的次数
dl1.invalidations0#totalnumberofinvalidations一级数据cache上无效访问的次数
dl1.miss_rate0.1034#missrate(i.e.,misses/ref)一级数据cache上的失效率
dl1.repl_rate0.0455#replacementrate(i.e.,repls/ref)一级数据cache上发生替换的概率
dl1.wb_rate0.0430#writebackrate(i.e.,wrbks/ref)一级数据cache上发生写回的概率
dl1.inv_rate0.0000#invalidationrate(i.e.,invs/ref)一级数据cache上发生无效访问的概率
从分析中,我们可以得出,一级数据cache总共的失效次数(dl1.misses)为457次,我们知道容量失效和冲突失效都发生了替换,所以它们的失效次数(dl1.replacements)总共为201次,强制性失效次数为457-201=256次。
一级数据cache的总失效率为0.1034。
三Cache容量对Cache性能的影响
1.操作说明:
(1)改变simplescalar模拟器中的一级数据cache(dl1)的容量配置,我们通过改变组数来改变它的容量。
与此同时固定块大小为32byte、相联度为2以及替换策略为LRU等参数。
(2)测试的程序是simplescalar自带的测试程序test-math。
2.运行的界面(截取了部分所需的界面)如下图所示:
容量为2KB(32*32*2*1)时,
容量为4KB(64*32*2*1)时,
容量为8KB(128*32*2*1)时,
容量为64KB(1024*32*2*1)时,
3.运行结果分析
从面的运行结果中,我们提取所需要的一级数据cache的信息,如下表所示:
dd1容量
总的失效次数
总的失效率
容量失效和冲突失效总次数
强制性失效次数
2KB
1395
0.0243
1331
64
4KB
840
0.0146
712
128
8KB
669
0.0116
413
256
64KB
542
0.0094
0
542
从上表,我们可以分析出,随着cache容量的不断增加,程序的失效率不断降低。
容量失效和冲突失效的次数随着cache容量的增加不断地减少,而强制性失效次数则不断地增加。
四Cache相联度对Cache性能的影响
1.操作说明
(1)改变simplescalar模拟器中的一级数据cache的相联度大小。
与此同时固定cache的容量16KB、块大小32byte以及替换策略为LRU等参数。
(2)测试的程序是simplescalar自带的测试程序test-fmath。
2.运行的界面(只截取了部分所需的界面)如下图所示:
相联度为1路时,
相联度为2路时,
相联度为4路时,
相联度为8路时,
相联度为64路时,
3.运行结果分析
从上面的运行结果中,我们提取所需要的一级数据cache的信息,如下表所示:
dl1相联度
总的失效次数
总的失效率
容量失效和冲突失效总次数
强制性失效的次数
1
492
0.0296
83
409
2
492
0.0296
76
416
4
476
0.0286
28
448
8
472
0.0284
10
462
64
470
0.0282
0
470
从上表,我们可以分析得出,随着相联度的增加,程序的失效率逐渐降低,但降低的幅度比较小。
容量失效和冲突失效的次数随着相联度的增加不断地减少,而强制性的失效次数则不断地增加。
五Cache块大小对Cache性能的影响
1.操作说明
(1)改变simplescalar模拟器中的一级数据cache的块大小。
与此同时固定Cache的容量为32KB、相联度为2以及替换策略为LRU等参数。
(2)测试的程序是simplescalar自带的测试程序test-printf。
2.运行的界面(只截取了部分所需的界面)如下图所示:
块大小为8byte时,
块大小为16byte时,
当块大小为32byte时,
当块大小为64byte时,
3.对上面的运行结果,我们提取所需要的一级数据cache的信息,如下表所示:
块大小
总的失效次数
总的失效率
容量失效和冲突失效总次数
强制性失效的次数
8byte
2050
0.0039
2
2048
16byte
1061
0.0020
2
1059
32byte
560
0.0011
3
557
64byte
295
0.0006
2
293
从上表,我们可以分析得出,随着块大小的增加,程序的失效率逐渐地降低。
容量失效和冲突失效的次数随着块大小的增加,基本维持在一个稳定的值,而强制性的失效次数则不断地降低,且幅度比较大。
六Cache的替换策略对Cache性能的影响
1.操作说明
(1)改变simplescalar模拟器中的一级数据cache的替换策略。
与此同时固定Cache的块大小为32byte、相联度为2。
在Cache容量为2KB、4KB、8KB和64KB的情况下,分别进行测试。
(2)测试的程序是simplescalar自带的测试程序test-llong。
2.运行的界面(只截取了部分所需的界面)如下图所示:
容量为2KB时,使用了LRU替换策略
使用了RANDOM策略
容量为4KB时,使用了LRU替换策略
使用了RANDOM策略
容量为8KB时,使用了LRU策略
使用了RANDOM策略
容量为64KB时,使用了LRU替换策略
使用了RANDOM策略
3.对上面的运行结果,我们提取所需要的一级数据cache信息,如下表所示:
dl1容量
替换策略
总的失效次数
总的失效率
容量失效和冲突失效总次数
强制性失效的次数
2KB
l
474
0.0453
410
64
2KB
r
484
0.0462
420
64
4KB
l
466
0.0445
338
28
4KB
r
467
0.0446
341
26
8KB
l
465
0.0444
209
256
8KB
r
465
0.0444
233
32
64KB
l
439
0.0419
0
439
64KB
r
439
0.0419
1
438
从上表我们可以分析得出,最近最少使用策略(LRU)相对较好,但它与随机策略在一定的cache容量范围内相差不大。
容量失效和冲突失效次数,使用LRU替换策略的情况下,比较少;而强制性失效次数,使用RANDOM替换策略的情况下,比较少。