当前位置:文档之家› 计算机体系结构cache模拟器实验报告

计算机体系结构cache模拟器实验报告

计算机体系结构——Cache模拟器实验实验报告姓名崔雪莹学号 ********班级计科1202班老师董岚2015年 06月07日一、阅读分析附件模拟器代码 (3)1、关键参数 (3)2、关键算法 (4)二、课后习题 (6)1、习题内容 (6)2、题目分析 (6)3、计算及结果 (7)4、模拟器上实验结果检验 (8)三、整体分析 (11)1、三种映射方式对Cache效率的的影响 (11)2、block块大小与Cache容量对Cache效率的影响 (12)3、Cache容量与相连度对Cache效率的影响 (13)4、三种失效类型影响因素 (14)四、实验思考和感受 (16)1、关于模拟器的思考 (16)2、关于整个实验的思考 (17)一、阅读分析附件模拟器代码1、关键参数(1)用户可见参数:(用户通过命令行输入参数)(2)程序内部主要参数:(代码内部重要参数)2、关键算法注:这里不粘贴代码,只是进行简单的代码算法说明(1)块地址表示:注:图是我按照自己的想法自己画的,可能有些地方并不准确,望老师指正。

图中以一个例子来解释cache模拟器中block和数据地址的关系,以及和组地址和标志位的关系。

(2)Index与tag:由上面计算:index = blockaddress % NOofset index = 16 % 8 = 2tag = blockaddress / Noofset tag = 16/8 = 2以上例,字地址16为例,写成二进制为0001 0010 B,其中组数为8,又因为2^3=8,所以字地址取后3位为:index = 010 B = 2 ,取前29位为:tag = 0…0010 B = 2 。

所以,算法与理论是一致的。

(3)Valid:有效位。

当通过上述方式寻址找到了数据存放的数据块,接下来判断有效位:有效位为1,说明数据是有效的,可以从block提取数据;有效位为0,说明块里的数据是无效的,所以不能从block提取数据,出现miss,此时判断miss类型,同时需要访问内存或下一级存储,将数据放到cache里。

(4)失效类型及判断方法:判断失效类型,函数misstype(int ba ,int nb ,int l)。

Compulsory miss(强制性失效,冷启动):当第一次访问某一个块的时候,数据是肯定不在块中的,此时出现强制性失效,或者说是冷启动失效。

Capacity miss(容量失效):所需的数据不能全部调入cache中,块被替换后又被重新访问,意思就是当所有的块都被占满了,这样又有数据希望被调入缓存时,就出现了容量失效。

Conflict miss(冲突失效):在组相联或直接映像中,数据想要替换进某一组中,组内的块都被占满了,但是别的组的块有空余,数据只能替换这一组,尽管别的组有空余也不能替换。

这样就出现了冲突失效。

(5)LRU算法实现替换:LRU替换算法是采用最近最久未使用的块,其中Lru[][]数组存放最近多少次未被使用,因为是采用循环访问,当循环访问到这一组时,把这组所有的块的Lru[][]值都加1,如果成功访问到这一块,数据能从其中取出来,就把这一块的Lru[][]值置0,退出循环。

(6)直接映射、组相联映射、全相联映射:直接映射:是特殊的组相联映射,就是相联度为1的组相联映射。

所以采取和组相联一样的程序和算法,当识别该组第一块失效时,直接进行替换,因为有且只有一块。

组相联映射:当识别该组某块失效时,如果块都被占满,要根据Lru[][]值的大小,判断哪一块被替换掉。

全相联映射:从上到下cache块存数据,则从上到下循环即可,遇到失效时,要根据Lru[][]值的大小,判断哪一块被替换掉。

二、课后习题1、习题内容在CacheSimulator模拟器上模拟如下程序的运行过程:int i,j,c stride,array[256]for(i=0;i<10000;i++)for(j=0;j<256;j=j+stride)c = array[j]+5;假设Cache总大小是256个字节,且块大小为16字节(4个字)。

同时假设内存当中只有这一个程序在运行,而且整形数字的长度为一个字长(字长为32位),在直接相连映射下,stribe分别等于132、131时程序的运行结果,并分析原因。

而当采用两路组相连时又会有什么结果并分析原因。

2、题目分析当stribe = 132/131 时,程序相当于循环访问内存偏移地址为0和地址132/131的内容,循环10000次,也就是访问了2000次存储。

结合cache机制,cache大小为256个字节,块大小为16个字节,所以块的个数为256/16 = 16个。

若为2路组相连,则有16/2 = 8组。

当第一次访问块时,一定会发生强制性失效,计一次miss。

3、计算及结果1)直接映像时:●stride=132array[0]的块地址为0,映射到cache的块号为0:0 mod 16 = 0array[132]的块地址为132/4 = 33,映射到cache的块号为1:33 mod 16 = 1因为第一次访问cache,0和1一定会发生强制性失效,之后因为调入cache,不会发生失效。

则失效次数为2,则失效率为:2/20000 = 0.01%命中次数为19998次,命中率为:19998/20000 = 99.99% = 1(近似)失效类型为强制性失效,次数为2。

●stride=131array[0]的块地址为0,映射到cache的块号为0:0 modulo 16 = 0array[131]的块地址为131/4 = 32,映射到cache的块号为0:32 modulo 16 = 0因为第一次访问cache,0一定会发生强制性失效,之后cache里块号为0的块不断地被替换写入替换写入,此时发生冲突失效。

则失效次数为20000,则失效率为:20000/20000 = 1 = 100%命中率为0。

失效类型为强制性失效次数1,冲突失效次数为19999。

2)2路组相联:●stride=132array[0]的块地址为0,映像到cache的组号为0:0 modulo 8 = 0array[132]的块地址为132/4 = 33,映像到cache组号为1:33 modulo 8 = 1因为第一次访问cache,0和1一定会发生强制性失效,之后因为调入cache,不会发生失效。

则失效次数为2,则失效率为:2/20000 = 0.01%命中次数为19998次,命中率为:19998/20000 = 99.99% = 1(近似)失效类型为强制性失效,次数为2。

stride=131array[0]的块地址为0,映像到cache组号为:0 modulo 8 = 0array[131]的块地址为131/4 = 32,映像到cache组号为:32 modulo 8 = 0因为第一次访问cache,0和1一定会发生强制性失效,之后因为是2路组相联,array[0]与array[131]都在0组,不会发生失效,则失效次数为2,失效率为:2/20000 = 0.01%命中次数为19998次,命中率为:19998/20000 = 99.99% = 1(近似)失效类型为强制性失效,次数为2。

4、模拟器上实验结果检验注:因为例题的循环次数为10000,为了便于实验,我将循环次数设置为100,结果参照100的计算,原理是一致的。

因为实际131/132都是字地址,而project.txt设置的是字节地址,所以将project.txt里值设置为0 和132*4/131*4 循环100次,设置cache大小为256,block大小为4,可以分别看到直接映射和2路组相连映射的结果为:可以看到实验结果与计算是一致的(因为循环次数100,所以实验结果小数点要后移两位)。

同时对习题1的思考(见后)也证明是正确的。

(1)直接映射:stride = 132 截图(2)直接映射:stride = 131 截图(3)2路组相连:stride = 132 截图(4)2路组相连:stride = 131 截图三、整体分析1、三种映射方式对Cache效率的的影响其他相同条件:block大小为2,组相连相连度为4,project.txt为200个0~1000的随机数。

生成图表:此时可以看到:1.直接映射的失效率高,组相连失效率中等,全相连失效率最低2.随着cache容量的增加,失效率越小。

3.当cache容量为1024时,因为数据取值的原因,三种方式失效率相等,说明当cache容量足够大,三种方式失效率是一样的。

2、block块大小与Cache容量对Cache效率的影响其他相同条件:直接映射,相连度为1,project.txt为200个0~1000的随机数。

生成图表:此时可以看到:1.对于给定的cache容量如64字节,当块大小增加时,失效率先是下降,后来反而上升了。

2.Cache容量越大,使其失效率达到最低的块的大小就越大。

3.因为取得数据样本是随机的,不是连续的,实验数据并不是十分准确,比如cache容量128时,块大小出现两次失效率3、Cache容量与相连度对Cache效率的影响其他相同条件:组相连,块大小2,project.txt为200个0~1000的随机数。

生成图表:此时可以看到:1.提高相连度会使失效率下降。

2.因为取得数据样本是随机的,不是连续的,实验数据并不是十分准确。

3.当容量为1024时,也就是cache一定大时,失效率没什么区别。

4、三种失效类型影响因素(1)相连度对三种失效类型影响:其他相同条件:cache大小为256,block大小为2,组相连,project.txt为200个0~1000的随机数。

可以看出:1.强制性失效,即冷启动,不受相连度的影响。

2.容量失效基本不受相连度影响,但因为数据偶然性,出现增大趋势。

3.冲突失效随着相连度的增加而降低。

(2)Cache容量对三种失效类型影响:其他相同条件:block大小为2,组相连度为4,project.txt为200个0~1000的随机数。

可以看出:1.容量越大,失效率越小。

2.强制性失效不受容量大小的影响。

3.容量失效随着容量的增加而大大减小。

4.冲突失效不受容量大小的影响。

四、实验思考和感受1、关于模拟器的思考○1Cache大小可选为16/64/128/256,因为代码写了,但是没有增加选项。

但是,我考虑因为16实在太小了,没什么意义。

○2打开文件名字为project.txt,修改文件名。

○3个人感觉有地方不太合适,因为直接映像就是特殊的组相联映射,所以相联度一定为1,但是代码中并没有设计这一点,当一个完全不懂得人使用时,很有可能设置相联度大于1,造成错误。

相关主题