崔雪莹——Cache实现分析1计算机体系结构——Cache模拟器实验实验报告姓名崔雪莹学号12281166班级计科1202班老师董岚2015年06月07日崔雪莹——Cache实现分析2一、阅读分析附件模拟器代码..............................................................................................31、关键参数.............................................................................................................32、关键算法.............................................................................................................4二、课后习题.........................................................................................................................61、习题内容.............................................................................................................62、题目分析.............................................................................................................63、计算及结果.........................................................................................................74、模拟器上实验结果检验.....................................................................................8三、整体分析.......................................................................................................................111、三种映射方式对Cache效率的的影响...........................................................112、block块大小与Cache容量对Cache效率的影响..........................................123、Cache容量与相连度对Cache效率的影响....................................................134、三种失效类型影响因素...................................................................................14四、实验思考和感受...........................................................................................................161、关于模拟器的思考...........................................................................................162、关于整个实验的思考.......................................................................................17崔雪莹——Cache实现分析3一、阅读分析附件模拟器代码1、关键参数(1)用户可见参数:(用户通过命令行输入参数)参数名含义值备注choice映像方式选项1/2/31为直接映射,2为组相连映射,3为全相连映射cachesizeCache大小16/64/128/256以字节为单位blocksizeBlock大小1/2/4以字为单位assoc相连度1/2/4/8/16assoc路组相连(n-way)accesscount请求次数待输出等于project.txt的值个数hitcount命中次数待输出成功在Cache找到次数hitrate命中率待输出HitRate=hitcount/accesscountmisscount未命中次数待输出没在Cache找到次数misscount=1-hitcountmissrate未命中率待输出MissRate=misscount/accesscountc1c,c2c,c3c失效次数待输出分别为三种失效类型的次数(2)程序内部主要参数:(代码内部重要参数)参数名含义计算备注blockinbyte块的字节大小=blocksize*4每一个块占多少字节NOofblock块个数=cachesize/blockinbyteCache中多少个块NOofset组个数=NOofblock/assoc块分成了多少个组bytearray[]要访问的数据的字节地址=projec.txt中的值project.txt文件数据赋给了bytearray[]数组wordaddress[]要访问的数据的字地址=bytearray[j]/4blocksize是字为单位的,就是说一个block占多少个字,所以数据也要求字地址blockaddress[]数据的块地址=wordaddress[]/blocksize数据在第几块崔雪莹——Cache实现分析4index索引位(组地址)=blockaddress[j]%NOofset若Noofset=2^m,则块地址低m位为索引位(组地址)。tag标识位(组内寻址)=blockaddress[j]/NOofset块地址高(32-m)位为标识位,用于确定组内哪块数据,newarray[index][z+1]中存放*valid有效位有效为1,失效为0判断该cache块数据是否有效*是因为没有真正定义,只是存放newarray[index][z]中lru[index][z]最近未被使用次数每次加1,被重写置0替换时,替换掉lru[index][]值最大的那个块2、关键算法注:这里不粘贴代码,只是进行简单的代码算法说明(1)块地址表示:注:图是我按照自己的想法自己画的,可能有些地方并不准确,望老师指正。图中以一个例子来解释cache模拟器中block和数据地址的关系,以及和组地址和标志位的关系。崔雪莹——Cache实现分析5(2)Index与tag:由上面计算:index=blockaddress%NOofsetindex=16%8=2tag=blockaddress/Noofsettag=16/8=2以上例,字地址16为例,写成二进制为00010010B,其中组数为8,又因为2^3=8,所以字地址取后3位为:index=010B=2,取前29位为:tag=0…0010B=2。所以,算法与理论是一致的。(3)Valid:有效位。当通过上述方式寻址找到了数据存放的数据块,接下来判断有效位:有效位为1,说明数据是有效的,可以从block提取数据;有效位为0,说明块里的数据是无效的,所以不能从block提取数据,出现miss,此时判断miss类型,同时需要访问内存或下一级存储,将数据放到cache里。(4)失效类型及判断方法:判断失效类型,函数misstype(intba,intnb,intl)。Compulsorymiss(强制性失效,冷启动):当第一次访问某一个块的时候,数据是肯定不在块中的,此时出现强制性失效,或者说是冷启动失效。Capacitymiss(容量失效):所需的数据不能全部调入cache中,块被替换后又被重新访问,意思就是当所有的块都被占满了,这样又有数据希望被调入缓存时,就出现了容量失效。Conflictmiss(冲突失效):在组相联或直接映像中,数据想要替换进某一组中,组内的块都被占满了,但是别的组的块有空余,数据只能替换这一组,尽管别的组有空余也不能替换。这样就出现了冲突失效。(5)LRU算法实现替换:LRU替换算法是采用最近最久未使用的块,其中Lru[][]数组存放最近多少次未被使用,因为是采用循环访问,当循环访问到这一组时,把这崔雪莹——Cache实现分析6组所有的块的Lru[][]值都加1,如果成功访问到这一块,数据能从其中取出来,就把这一块的Lru[][]值置0,退出循环。(6)直接映射、组相联映射、全相联映射:直接映射:是特殊的组相联映射,就是相联度为1的组相联映射。所以采取和组相联一样的程序和算法,当识别该组第一块失效时,直接进行替换,因为有且只有一块。组相联映射:当识别该组某块失效时,如果块都被占满,要根据Lru[][]值的大小,判断哪一块被替换掉。全相联映射:从上到下cache块存数据,则从上到下循环即可,遇到失效时,要根据Lru[][]值的大小,判断哪一块被替换掉。二、课后习题1、习题内容在CacheSimulator模拟器上模拟如下程序的运行过程:inti,j,cstride,array[256]for(i=0;i10000;i++)for(j=0;j256;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。崔雪莹——Cache实现分析73、计算及结果1)直接映像时:stride=132array[0]的块地址为0,映射到cache的块号为0:0mod16=0array[132]的块地址为132/4=33,映射到cache的块号为1:33mod16=1因为第一次访问cache,0和1一定会发生强制性失效,之后因为调入cache,不会发生失效。则失效次数为2,则失效率为:2/20000=0.01%命中次数为19998次,命中率为:19998/20000=99.99%=1(近似)失效类型为强制性失效,次数为2。stride=131array[0]的块地址为0,映射到cache的块号为0:0modulo16=0array[131]的块地址为131/4=32,映射到cache的块号为0:32modulo16=0因为第一次访问cache,0一定会发生强制性失效,之后cache里块号为0的块不断地被替换写入替换写入,此时发生冲突失效。则失效次数为20000,则失效率为:20000/20000=1=100%命中率为0。失效类型为强制性失效次数1,冲突失效次数为19999。2)2路组相联:stride=132array[0]的块地址为0,映像到cache的组号为0:0modulo8=0array[132]的块地址为132/4=33,映像到cache