资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划cache模拟器实验报告Cache模拟器一、实验目标:程序运行时,都会对内存进行相关操作,所访问的内存地址可以被记录下来,形成memorytrace文件。在本实验中,你将使用benchmark程序产生的memorytrace文件来测试Cache命中率,文件可以在http:/classes/fa07/cse240a/上获得。每次存储器访问都包含了三个信息:1.访问类型,l表示Load操作,s表示Store操作;2.地址。采用32位无符号的十六进制表示;3.存储器访问指令之间的间隔指令数。例如第5条指令和第10条指令为存储器访问指令,且中间没有其他存储器访问指令,则间隔指令数为4。通过写一段程序,模拟Cache模拟器的执行过程。二、实验要求:写一段程序模拟Cache模拟器的执行过程,并对5个trace文件进行测试,完成以下目标:1.请统计Load类型指令和Store类型指令在这5个trace文件中的指令比例。2.设Cache总容量为32KB,对以下所有参数进行组合,测量相应5个文件的Cache命中率。通过对命中率的分析,可以发现什么规律。行大小:32字节、64字节、128字节相连度:8路相联、4路相联、2路相联、1路相联替换策略:FIFO,随机替换,LRU写策略:写直达、写回3.给出5个文件的最佳Cache命中率的参数组合。针对不同的trace文件,最佳配置是否相同。4.测量各种组合下Cache和主存之间的数据传输量。5.给出5个文件的最小数据传输量的参数组合。这个组合和第3问中得到的组合是否一致。针对不同的trace文件,最佳配置是否相同。6.Cache缺失有三种原因:1)强制缺失;2)容量缺失;3)冲突缺失。分析这三种缺失并说明你的分析方法。7.请给出5个trace文件在最优Cache命中率的情况下,这三种缺失所占的比例,并和教材图给出的比例进行比较。三、程序设计与实现:本程序我打算采用java进行编写,因为java能够很好地体现面向对象编程的优点。首先需要定义相关的数据类型。将指令定义为一个单独的指令类,好方便操作和记录统计,其中属性包括该指令的类型,比如是Load指令还是Store指令,还包括指令的地址。classInstructionStringtype;Stringaddrs;将Cache定义为一个类,Cache中的字段包括Tag标识字段,用于查找到相应组后进行比较看是否命中。Dirty字段用于写回策略中判断是否数据已经被修改了,如果修改了则在置换的时候需要写回,在统计Cache与主存的数据传输量时需要用到。最后一个字段是count,该字段用于记录该Cache块最近被访问的频度,用于组相连时LRU替换策略时判断哪个块最长时间没被访问到。classCacheinttag;intdirty;intcount;最后定义一个Cache模拟器类。用一个二维数组来模拟Cache,因为二维数组可以很好地表示组相连Cache,而直接相连和全相联Cache都是组相连的特殊情况,当第一维为1时,表示全相连Cache,当第二维为1时,表示直接相连Cache。publicclassCacheSimulatorpubliclongsize;/Cache大小publicintline_size;/块大小publicintset_associativity;/相联度publicstaticlongset_count;/组数publicintset_indexs;/用于FIFO中记录需替换的块号publicCachecaches;publicstaticArrayListinstrsArrayList();publicstaticHashSetcompulsory=newnewHashSet();/记录强制缺失publicstaticlongconflict;/记录冲突缺失publicbooleanwrite_method=false;/false表示写回,true表示写直达publicintreplace_method=0;/0为Random,1为FIFO,2为LRUpublicstaticHitRationTypehitRations=newHitRationType72;publicstaticintcommunication_times;Randomrand=newRandom(set_associativity);/用于随机替换策略staticintoffset=0;staticintread_misses=0,read_hits=0;staticintreads=0;staticintwrite_misses=0,write_hits=0;staticintwrites=0;staticintothers=0;staticinttotals=0;接下来需要定义几个辅助方法,首先第一个是readFile方法,通过读入trace文件来将数据提取出来,保存到指令list中,同时统计读操作和写操作的指令数目,以及总的指令数目。具体如下所示:staticvoidreadFile(Stringpath)throwsIOExceptionFilefile=newFile(path);BufferedReaderbr=newBufferedReader(newInputStreamReader(newFileInputStream(file);Strings;Stringsts;while(s=()!=null)sts=();Instructioninst=newInstruction();/将数据保存到指令类中if(sts0.endsWith(l)/统计指令类型数目reads+;=l;elsewrites+;=s;=sts1;others+=(sts2);(inst);Stringtmp=+getIndex();(tmp);totals=reads+writes+others;();定义一个函数getIndex和getTag,输入一个十六进制的指令,然后分别返回其对应的索引字段和Tag字段。要求索引字段和Tag字段,首先得分别算出地址中tag字段、索引字段和块内偏移字段的位数,而这与Cache的映射策略、Cache的大小以及块大小有关。staticintgetIndex(Stringaddr)Stringto=toBinaryString(addr);Stringindex_add=(int)()-offset-(int)log(set_count,2),to.length()-offset);intindex=(index_add,2);returnindex;staticintgetTag(Stringaddr)Stringto=toBinaryString(addr);Stringtag_add=(0,()-offset-(int)()-offset-(int)log(set_count,2);inttag=(tag_add,2);returntag;在getIndex函数中用到了一个自定义的log函数,该函数能够通过将一个数据返回其以2为基值的对数值,比如Cache块大小为32,则log返回5。publicstaticdoublelog(doublevalue,doublebase)return(value)/(base);由于java中所实现的将十六进制数转换为2进制数的函数并不完善,比如当十六进制数字最高几位为0时,javaAPI中的函数默认不将其进行转换,而是直接忽略。因此,在程序中需要自定义一个函数来实现将十六进制的指令转换为2进制表示。staticStringtoBinaryString(Stringaddr)Stringsub=(2);StringBuffersb=newStringBuffer();for(inti=0;i();i+)switch(i)case0:(0000);break;内蒙古大学计算机组成原理实验设计报告班级:13软件二班小组组长:张曦小组成员:李聪、高浪、沈冲、王佳煜、罗旭亮指导老师:刘彩霞设计题目:组合逻辑控制器设计一、实验设计目的:设计一个指令格式如下图的组合逻辑控制器。98寻址方式71寄存器编号直接寻址地址操作码0:CLA0:寄存器直接0:R01:R1二、实验设计原理及思路:1、cup数据通路图如下:2、指令微流程图如下:IR(9)其中微命令如下:PC-SBDR-SBIR(0)-SBIR(0-7)-SBSB-ARSB-IR0-ACPC+1RDADD3、微命令编码设计4、此地址部分设计:NAC字段:2位00:顺序;01:无条件跳转;10:指令跳转;11:add寻址方式跳转NA字段:4位共9跳微指令所以NA占4位5、控制存储器存储空间分配:三、实验代码:西安邮电大学课内实验报告实验名称:专业名称:软件工程班级:学生姓名:学号文件,然后执行。执行得方式可以是单步,也可以选择一次执行结束。如果选择手动输入,就可以在“执行控制”区域中输入块地址,然后单击“访问”按钮。系统会在界面的右边显示访问类型、地址、块号以及块内地址。(5)模拟结果包括:?访问总次数,总的不命中次数,总的不命中率。?读指令操作的次数,其不命中次数及其不命中率。?读数据操作的次数,其不命中次数及其不命中率。?写数据操作的次数,其不命中次数及其不命中率。?手动输入单次访问的相关信息。3实验内容和步骤Cache容量对不命中率的影响(1)启动MyCache。(2)单击“复位”按钮,将各参数设置为默认值。(3)选择一个地址流文件。具体方法:选择“访问地址”“地址流文件”选项,然后单击“浏览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。(4)选择不同的Cache容量,包括2KB,4KB,8KB,16KB,32KB,64KB,128KB和256KB,分别执行模拟器,然后在表中记录各种情况下的不命中率。地址流文件名:(5)指明地址流文件名,以容量为横坐标,画出不命中率虽Cache容量变化而变化的曲线图。(6)根据该模拟结果,能得出什么结论?未命中率受cache容量的变化而变化,cache容量越大,未命中率越低相联度对不命中率的影响(1)单击“复位”按钮,将各参数设置为默认值。此时的Cache容量为64KB。(2)选择一个地址流文件。具体方法:选择“访问地址”“地址流文件”选项,然后单击“浏览”按
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号