还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验报告Cache
一、实验要求.阅读分析附件模拟器代码1要求读懂关键注释总结关键参数和算法的实现方法
123.通过读懂代码加深了解的实现技术2cache.结合书后习题进行测试
31.通过测试和进行实验设计了解参数和算法选择的特点和相互关系比较,组合等,需要定4性和量化结合说明,可以用数字或图表等多种描述手段配合说明
二、实验代码:页面置换算法
1.LRU程序一共有中模式3Direct_mapped2Set_associate3Fully_associate对于第一种,直接映射,显然用不到算法,因为每一个地址在中只有一个地方LRU cache可以去对于后两种,组相联映射和全相联映射,就需要用到算法了LRU其中,全相联映射等于是只有一个的而正是用在一个中,所以,set Set_associate,LRU set后面两种模式的问题可以归结为一种一个中,来了一个没有的页面,需要置换出一LRU set个,应该置换出哪一个的问题那么,具体过程如下这个中的每一个都有一个值,初始为1set block Iru0每次访问这个的时候,不管是否命中,这个中的所有的值都2set setblock Iru+1当需要置换出去一个页面的时候,选择一个值最大的那个置换出入,用来放入刚刚3Iru进来的不管是否命中,刚刚访问过的,或者加入的那个的值置为〃4blockIru0ifxlru[index][z]选择值最大的一个Irux=lru[index][zj;y=z;}〃没有命中时ifz==assoc*2-2值最大的替换掉newarray[index][y+l]=tag;//JE Irumisscount++;c=misstypeblockaddress[j],NOofblock,j;cc=1;〃所有的值form=0;massoc*2;m=m+2Iru+1lru[index][m]+4-;值最大的替换掉lru[index][y]=O;//JE Iruz=z+2;用于判断缺页类型的算法
2.在程序中,体现了中缺页的类型3CompulsoryMiss之前没有出现的地址,肯定不会命中ConflictMiss由于冲突而产生的不命中CapacityMiss由于容量不足而导致的不命中在函数中int misstypeintba,int nb,int1ba表示当前不命中的地址nb表示NOofblock,即cache中block的数目1表示当前ba在访问序列bytearray数组中的位置数组,用来表示当前已经访问过了那些页面before数组,表示相邻两次访问之间,访问过的地址blarray ba变量表示数组的大小b,blarray Compulsory Miss那么,只要当前访问的页面,在之前没有访问过,那么,就是这种类型代Compulsory Miss码上就是遍历数组,看看有没有和相同的,没有的话就是同时不before baCompulsory Miss,要忘记把加入到数组,供下次使用ba beforeConflict Miss在统计相邻两次访问之间的不同的地址数目时,数组的大小就是这个值那么只ba blarrayb要和比较一下,只要表示其实还有多余的空间可以使在之前不被调出,就说明其nb bnb,ba实是由于冲突而被调出,即ba ConflictMisSo Capacity Miss反之,如果就表示,相邻两次访问之间的地址数目过大,导致空间不够使用,即bnb,baCapacity MisSo
三、实验过程:原始代码测试L:ache Sizefron range[64/128/256]16lock Size frominter theualue forn-way Setualue fronLl/2/4/8/1611Miss Rate=
0.333333Hit Rate=
0.666667Conpulsori;MissCapacity MissConflict Miss第一个测试Direct nappedhit Nunber=
4.000000miss Nunber=
2.000000Access Nunber=
6.000000iessany keyto continue第二个测试two-way setassociativeCache Sizefrom range[64/128/256]16Block Sizefrom rangeLl/2/4]1Enter theualue forn-way Setualue fron[1/2/4/8/16]2Miss Rate=
0.333333Hit Rate=
0.666667Compulsory MissCapacityMissConflict Misshit Number=
4.000000miss Nunber
2.000000Access Nunber=
6.000000Cache SizeFrom range[64/128/256]16Block Sizefrom rangeLl/2/4]1Enter thevalue forn-v/ay Setualue fron[1/2/4/8/16]4Miss Rate=
0.333333Hit Rate=
0.666667Compulsory MissCapacityMissConflict Miss第三个测试fully associativehitNunber=
4.000000miss Number=
2.000000Access Number=
6.000000可见三次测试的结果是相同的,因为我们给的三组输入数据是相同的下面我们用书上的例子进行测试Cache Sizefrom range[64/128/256]16Block Sizefrom range[1/2/411Enter theualue forn-way Setualue fron[1/2/4/8/16]1Miss Rate=
1.000000Hit Rate=
0.000000Compulsory MissCapacityMissConflict Miss第一个测试Direct mappedmiss Number
5.000000hitNumber=
0.000000Access Number=
5.000000如图,和课本的结果吻合全部由于其中有种不同的地址,所以的数miss,3Compulsory miss目是
3.第二个测试two-way setassociative Cache Sizefrom range[64/128/256]16Block Sizefrom range[1/2/4]1Enter theualue forn-way Setualue fron[1/2/4/8/1612Miss Rate=
0.800000Hit Rate=
0.200000CompulsoryMiss=3CapacityMiss=0ConflictMiss=1hitNunber=
1.000000miss Nunber=
4.000000Access Nunber=
5.000000如图,和课本的结果吻合只有一个由于其中有种不同的地址,所以的hit,3Compulsory miss数目是
3.Cache SizeFrom range[64/128/256]16Block Sizefrom rangeLl/2/4]1Enter theualue forn-viay Setualue fron[1/2/4/8/16]4Miss Rate=
0.600000Hit Rate=
0.400000Compulsory MissCapacityMissConflict MisshitNumber=
2.000000miss Nunber=
3.000000Access Nunber=
5.000000第三个测试fully associative如图,和课本的结果吻合有个由于其中有种不同的地址,所以的数2hit,3Compulsory miss目是
3.综上,上述三种模式的率如下左中右miss direct2-way fullhit0%miss100%代码测试
2.依据课后题进行代码测试为了测试的大小和中的大小对率的影响,block n-way nmiss需要反复实验所以,就需要一种策略来生成访问序列地址,但是又不能随便生成,因为序列需要满足一定的空间局部性和时间局部性在源代码中加入一小段测试代码如下网上找的测试代码,且将源代码中的指定打开文件注释掉,改为由以下函数生成页面访问序列生成函数int num,e,N;int Genintque[]double t=rand%100*
0.01;int m=rand%N/2+1;int p=rand%N/2;int ent=0;whiletrue e=rand%N/2+1;forint i=0;im;i++que[cnt++]=rand%e+p;if que[cnt-1]N-1que[cnt-1]=N-1;if ent==num break;if ent==num break;double r=rand%100*
0.01;if rtp=rand%N;else p=p+1%N;return ent;那么,为了兼顾到种模式,下面将按照3模式下,仅大小增加A Direct mapped BlockSize仅的改变,从B n-way n1〜16仅采用全相联C都用相同的数据测试次观察效果1000直接映射,大小增加1DirectmappedBlockSize大小固定为序列长度为Cache128,100当的时候:BlockSize=1Cache Sizefrom range[64/128/256]1Incorrect input.Cache Sizefrom range[64/128/256]128Block Sizefrom range[1/2/4]1Enter theualue forn-way Setualue from[1/2/4/8/16]1输入生成序列的长度N100输入需要测试的次数1000-.147110当的时候:BlockSize=2}ache Sizefron range[64/128/256]128Hock SizeFrom rangeLl/2/412inter theualue forn-way Setualue fron[1/2/4/8/16]1俞入生成序列的长度N.00俞人需要测试的次数.000当的时候:BlockSize=4Cache Sizefrom rangeL64/128/256]128Block Sizefrom rangeLl/2/4]4Enter theualue forn-way Setualue£ron[1/2/4/8/16]1输入生成序列的长度N100输入需要测试的次数1000-任过100次实验,平均缺页率为
0.049210由此可见,在直接映射下,当从、、依次的增长时,缺页率在减少blocksize124组相联映射中对缺页率的影响测试实验2n大小固定为为序列长度为从变到看结果时Cache64,BlockSize1,100,n116,n=lDache Sizefrom range[64/128/256]64Block Sizefrom range[1/2/411Enter theualue forn-way Setualue from[1/2/4/8/16]1谕入生成序列的长度NL00谕入需要测试的次数L
000.经过100次实验;平均缺页率为n=2Cache Sizefrom range[64/128/256]64Block Sizefrom range[1/2/4]1Enter theualue forn-way Setualue fron[1/2/4/8/16]2输入生成序列的长度N100输入需要测试的次数1000n=4Cache Sizefrom range[64/128/256]64Block Sizefrom rangeLl/2/4]1Enter theualue forn-way Setualue fron[1/2/4/8/16]4输入生成序列的长度N100输入需要测试的次数
1000.后也1000软实验;平均缺页率为
0.1569丁n=8acheSizefrom range[64/128/256]64Block Sizefrom range[1/2/411Enter theualue forn-way Setualue fronLl/2/4/8/16]8输入生成序列的长度N100输入需要测试的次数
1000.经过10茄次实验,平均缺页率为
0.156760n=16Cache Sizefromrange[64/128/256]64Block SizeFrom range[1/2/4]1Enter theualue forn-v/ay Setualue From11/2/4/8/16J16输入生成序列的长度N100输入需要测试的次数
1000.经过1000次实验,平均缺页率为
0.156480由此可知,随着的增大,缺页率是逐步减小的n全相联映射3,大小固定为为序列长度为Cache128,BlockSize2,100Cache SizeFrom range[64/128/256]128Block Sizefron range[1/2/4]2Enter theualue forn-way Setualue front1/2/4/8/16]4输入生成序列的长度N100输入需要测试的次数10002仝过1000次买验,平均缺贝率为
0.083750-由此可见,综合各方面,全相联映射是最优方法,其缺页率最低.实验总结4通过这次实验,我了解了中的三种映像规则直接映射、组相联映射和全相联映射cache的各自的优缺点和性能对比也提高了我阅读代码的能力,同时也理解了作业中遇到的问题总之,受益匪浅。
个人认证
优秀文档
获得点赞 0