计算机体系结构cache模拟器实验报告
体系结构试验报告(cache存储过程)

体系结构实验报告实验目的通过程序,模拟cache存储过程,并通过控制变量法模拟分析Cache性能实验步骤:我们要通过老师所给程序进行模拟,并通过操作系统试验中老师所给算法生成出project.txt ,并通过project.txt 里面的数据来模拟程序的局部性等特性。
实验结果1、比较关联方式,控制blockSize, CacheSize 不变:(1)、Direct_mapped(2) 、Set_associate:(3) 、Fully_associate通过上述三个比较可以看出,各种映射有自己的优点。
但是不难看出,增大关联度会减小miss rate,但是增加到一定程度又会有抑制作用。
2.比较Cache大小对于性能的影响。
(1)、Direct_mapped,Cache容量为64 时:(2rDirecflmapped〉Cache朿*R128 手(3r Direcflmapped〉Cache助*R256口F一pwsef 峑s 2O J I 0\^J.e e K ^g 63-L w g <J g -f aJnnnrEd理"巧 nmrMecIrlxMLH肆一事呼LJw匸-dJ-LUfJF U »»a iB cinIJr ltRn x li 黑鱼*=£1K s 1!蚯c a p w p llrt t M:C4mw JLl n rll n i H HHi L n h != l£lx-瞌忻恥f*<41.匸«F 23L L/2\.*X «礼 j !H F i <n对比实验结果,不难发现,随着Cache容量的增加,Cache的命中率一直在提升。
分析原因发现,虽然Cache容量大了,但并不等于其预存的内容增多,所以命中率会上升。
3、比较Cache大小对于性能的影响。
(1)、Direct_mapped,关联度为 1 时:(2)、Direct_mapped,关联度为2 时:(3)、Direct_mapped,关联度为4 时:(4) 、Direct mapped ,关联度为 8 时:I ■ C -\LI wrs 1.11uwei mo\Dw_-m e ts'_Vi EUUI I ^tud o l£f Pre e-crE\tt. q\Dfft!uq\ti'g.-i-j rIE Is-* -IrMHiF OP n tiny Ret U <A lun f 1± flhissH41# a 聊C4pnic4tv Conflictnx5S(5) 、Direct map ped ,关联度为 16 时:可以看出,随着关联度的提高,命中率也有所增加Canipuilsnry 1XSE-hH MuflfafiP = I44.MIUUM1Ace R -S3 NumWr ■寸-F口寸 灭 」eqlunu>loo-q〈 p ①ddelu —10①」一q <(L)S33I・鹫詡M us y u s L l's童wr#*■L 書-E .f n -sr e U F K e$us.H92m £百1-■阿*E戏*%贰%严一&丫A*u-uk s ?£Lc 』 C3"f l a毒* 1和4£sE E *B J W11v m 「>!5q言石-d ^l L l e l迟E n p xll -,.I 曰右号v d d -o'w -o M n 「口釜l Y ci-te L ^R 」eqlunu>loo-q 〈 p ①ddelu —10①」Q <通过以上三组数据不难看出,当block number增加时,命中率明显增高了。
Cache模拟器实验报告

Cache模拟器一、实验目标:程序运行时,都会对内存进行相关操作,所访问的内存地址可以被记录下来,形成memory trace文件。
在本实验中,你将使用benchmark 程序产生的memory trace文件来测试Cache命中率,文件可以在/classes/fa07/cse240a/proj1-traces.tar.gz上获得。
每次存储器访问都包含了三个信息:1.访问类型,’l’表示Load操作,’s’表示Store操作;2.地址。
采用32位无符号的十六进制表示;3.存储器访问指令之间的间隔指令数。
例如第5条指令和第10条指令为存储器访问指令,且中间没有其他存储器访问指令,则间隔指令数为4。
通过写一段程序,模拟Cache模拟器的执行过程。
二、实验要求:写一段程序模拟Cache模拟器的执行过程,并对5个trace文件进行测试,完成以下目标:1.请统计Load类型指令和Store类型指令在这5个trace文件中的指令比例。
2.设Cache总容量为32KB,对以下所有参数进行组合(共有72种组合),测量相应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命中率的情况下,这三种缺失所占的比例,并和教材图C.8给出的比例进行比较。
计算机组成原理实验报告-Cache模拟器的实现

计算机组成原理实验报告-Cache模拟器的实现实验内容:1、启动CacheSim。
2、根据课本上的相关知识,进一步熟悉Cache的概念和工作机制。
3、依次输入以下参数:Cache容量、块容量、映射方式、替换策略和写策略。
Cache容量块容量映射方式替换策略写策略256KB 8 Byte 直接映射------ -------64KB 32 Byte 4路组相联 LRU -------64KB 32 Byte 4路组相联随机--------8KB 64 Byte 全相联 LRU ---------4、读取cache-traces.zip中的trace文件。
5、运行程序,观察cache的访问次数、读/写次数、平均命中率、读/写命中率。
思考:1、Cache的命中率与其容量大小有何关系?2、Cache块大小对不命中率有何影响?3、替换算法和相联度大小对不命中率有何影响?实验步骤与预习:实验步骤:1、启动CacheSim。
2、根据课本上的相关知识,进一步熟悉Cache的概念和工作机制。
3、依次输入以下参数:Cache容量、块容量、映射方式、替换策略和写策略。
4、读取cache-traces.zip中的trace文件。
5、运行程序,观察cache的访问次数、读/写次数、平均命中率、读/写命中率。
预习:Cache:高速缓冲存储器高速缓冲器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。
Cache的功能是用来存放那些近期需要运行的指令与数据。
目的是提高CPU对存储器的访问速度。
工作机制:主要由三大部分组成:Cache存储器:存放由主存调入的指令与数据块。
地址转换部件:建立目录表以实现主存地址到缓存地址的转换。
替换部件:在缓存已满时按照一定的策略进行数据块替换,并修改地址转换部件。
实验结果:一般而言,cache用量越大,其cpu命中率越高,当然容量也没必要太大,当cache 容量达到一定的值时,命中率不因容量的增大而有明显的提高。
计算机体系结构cache模拟器实验报告

计算机体系结构——Cache模拟器实验实验报告姓名崔雪莹学号12281166班级计科1202班老师董岚2015年06月07日一、阅读分析附件模拟器代码 (4)1、关键参数 (4)2、关键算法 (5)二、课后习题 (8)1、习题内容 (8)2、题目分析 (8)3、计算及结果 (9)4、模拟器上实验结果检验 (11)三、整体分析 (15)1、三种映射方式对Cache效率的的影响 (15)2、block块大小与Cache容量对Cache效率的影响 (16)3、Cache容量与相连度对Cache效率的影响 (17)4、三种失效类型影响因素 (18)四、实验思考和感受 (21)1、关于模拟器的思考 (21)2、关于整个实验的思考 (22)一、阅读分析附件模拟器代码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里。
计组实验报告

计组实验报告【实验名称】:基于MIPS的Cache设计与实现【实验目的】:通过设计、模拟和测试基于MIPS的Cache,理解和掌握Cache的基本原理和实现方法,加深对计算机组成原理的理解和应用。
【实验设备】:Xilinx ISE Design Suite 14.7、Verilog HDL仿真工具、Mars模拟器。
【实验原理】Cache是计算机系统中重要的存储器层次结构,它可以提高访问速度,降低访问延迟。
Cache是一种由高速存储器和控制电路组成的存储器,它的作用是缓存主存中最近使用过的指令和数据,当下一次需要使用这些指令和数据时,可以直接从Cache中获取,而不需要访问主存,从而提高访问速度。
计算机系统中的Cache存储器既可以用硬件实现,也可以用软件实现。
MIPS Cache包括指令Cache和数据Cache两个部分。
指令Cache用于存储CPU需要的指令,而数据Cache用于存储CPU需要的数据。
Cache中的每一个存储块叫做一个Cache 行,每一个Cache行包括若干字块,每一个字块包括若干字节。
Cache行的大小一般是2^n 个字节。
Cache使用一种叫做Cache命中的技术,通过判断当前CPU需要的数据是否在Cache中来确定是否需要访问主存。
如果当前CPU需要的数据在Cache中,则称为Cache命中,可以直接从Cache中获取数据;如果当前CPU需要的数据不在Cache中,则称为Cache未命中,需要从主存中获取数据。
Cache有三种常见的替换算法:随机替换算法、先进先出(FIFO)替换算法和最近最少使用(LRU)替换算法。
随机替换算法是最简单的方法,它实现起来比较简单,但是效率不高。
FIFO替换算法是一种比较简单的替换算法,它在实现的时候需要维护一个队列来保证替换最早进入Cache的数据,但是这种算法无法适应程序的访存局部性。
LRU替换算法是一种比较复杂的替换算法,它需要维护一个使用时间序列来记录各数据块被使用的时间,当需要替换时,选择使用时间最旧的数据块替换掉。
计算机系统结构课程实验报告实验二:存贮层次模拟器

计算机系统结构课程实验报告2012—2013 学年第 1 学期学生姓名:学生班级:2011179学生学号:**********师:***教研室:计算机系统结构教研室2012年10月23日实验二:存贮层次模拟器一、实验目的与要求使学生清楚认识虚拟存贮层次结构,熟练掌握常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。
要求用程序实现任意地址流在存储层次上的命中情况,实验结束后提交源程序和实验说明书。
二、实验内容在模拟器上实现在任意地址流下求出在cache-主存—辅存三层存贮层次上的命中率。
三、实验步骤1.主存-辅存:映像方式可以选择组相联方式;替换算法可以使用LRU算法和FIFO算法。
2.要求主存容量、页大小以及组数等可以输入修改。
3.求出命中率;显示替换的全过程;任选一种高级语言来做。
4.要有简洁、易于操作的界面。
四、程序源代码#include<stdio.h>#include<string.h>#include <iostream.h>struct Fu{int gh;//组号int gnh;//组内块号int kd;//块内地址};Fu c[50];int count[50];//计数器int d[50];//地址流int Groupfind(int mainAddr,int FuSize,int bsINg){return mainAddr%FuSize/bsINg;}void InitFu(int bsINg,int FuSize){for(int i=0;i<FuSize;i++){c[i].kd=-1;//块内地址初始化为-1c[i].gnh=i%bsINg;//组内块号初始化为c[i].gh=i/bsINg;//组号count[i]=0;}int Find(int gh,int bsINg){int index=0+gh*bsINg;int max=count[index];for(int i=0+gh*bsINg;i<0+gh*bsINg+bsINg;i++){if(count[i]>max){max=count[i];index=i;}}return index;}int IsFull(int gh,int bsINg){for(int i=0+gh*bsINg;i<0+gh*bsINg+bsINg;i++){if(c[i].kd==-1)return i;}return -1;}void AddCount(int gh,int bsINg){for(int i=0+gh*bsINg;i<0+gh*bsINg+bsINg;i++)if (c[i].kd!=-1){count[i]++;}}int IsShoot(int mainAddr,int gh,int bsINg){for(int i=0+gh*bsINg;i<0+gh*bsINg+bsINg;i++)if (c[i].kd==mainAddr){return i;}return -1;}void LRU1(int mainAddr,int groups,int FuSize,char* src,int type,int bsINg,double &shoot)//kd地址流中的一个,int gh=Groupfind(mainAddr,FuSize,bsINg);//找到组号int i=-1;int j=-1;i=IsShoot(mainAddr,gh,bsINg);j=IsFull(gh,bsINg);if (i!=-1)//命中{//命中if(type==0){AddCount(gh,bsINg);count[i]=0;}c[i].kd=mainAddr;strcpy(src,"命中");shoot++;return;}if (j!=-1)//调进{AddCount(gh,bsINg);count[j]=0;c[j].kd=mainAddr;strcpy(src,"调进");return;}int k;k=Find(gh,bsINg);AddCount(gh,bsINg);count[k]=0;c[k].kd=mainAddr;strcpy(src,"替换");}void DisplayTitle(){cout<<"辅存-主存映像关系组相联方式"<<endl;}void Display(char* src,int cl){for (int i=0;i<cl;i++){cout<<c[i].kd<<"\t";cout<<src<<endl;}void DisplayHead(int cl){for (int i=0;i<cl;i++){cout<<i<<"\t";}cout<<endl;}void main(){char src[5];int type;int g,cl;int bsINg;int MainSize;int addr;int i=0;double shoot=0;DisplayTitle();cout<<"选择LRU(0)or FIFO(1):";cin>>type;cout<<"输入辅存大小:";cin>>MainSize;cout<<"输入主存大小:";cin>>cl;cout<<"输入组数:";cin>>g;bsINg=cl/g;cout<<"输入地址流(以-1结束):";cin>>addr;while(addr!=-1){d[i++]=addr;cin>>addr;}InitFu(g,cl);DisplayHead(cl);for (int j=0;j<i;j++){LRU1(d[j],g,cl,src,type,bsINg,shoot);Display(src,cl);cout<<"命中率:"<<shoot/i<<endl;}四、实验截图1、当替换算法采用FIFO,主存的组数为1,则结果如下图所示:2、当替换算法采用LRU,主存的组数为1,则结果如下图所示:3、当替换算法采用FIFO,主存的组数为2,则结果如下图所示:4、当替换算法采用FIFO,主存的组数为2,则结果如下图所示:五、实验总结通过本次实验我搞清楚了虚拟存贮层次结构,掌握了常用的几种存储地址映象与变换方法,以及FIFO、LRU等替换算法的工作全过程。
《计算机体系结构》第六次实验 cache

Cache实验报告姓名:王宇航学号:09283020 安全0901Cache实验报告一、实验要求:1.阅读分析附件模拟器代码要求:1)读懂2)关键注释3)总结关键参数和算法的实现方法2.通过读懂代码加深了解cache的实现技术3.结合书后习题1进行测试4.通过测试和进行实验设计了解参数和算法选择的特点和相互关系(比较,组合等),需要定性和量化结合说明,可以用数字或图表等多种描述手段配合说明。
二、实验代码:1. LRU页面置换算法程序一共有3中模式:Direct_mapped 2 Set_associate 3 Fully_associate对于第一种,直接映射,显然用不到LRU算法,因为每一个地址在cache中只有一个地方可以去。
对于后两种,组相联映射和全相联映射,就需要用到LRU算法了。
其中,全相联映射等于是只有一个set的Set_associate,而LRU正是用在一个set中,所以,后面两种模式的LRU问题可以归结为一种:一个set中,来了一个没有的页面,需要置换出一个,应该置换出哪一个的问题。
那么,具体过程如下:1 这个set中的每一个block都有一个lru值,初始为0。
2 每次访问这个set的时候,不管是否命中,这个set中的所有block的lru值都+1。
3 当需要置换出去一个页面的时候,选择一个lru值最大的那个置换出入,用来放入刚刚进来的。
4 不管是否命中,刚刚访问过的,或者加入的那个block的lru值置为0。
if(x<lru[index][z])//选择lru值最大的一个{x=lru[index][z];y=z;}if(z==((assoc*2)-2))//没有命中时{newarray[index][y+1]=tag; //把lru值最大的替换掉misscount++;c=misstype(blockaddress[j],NOofblock,j);cc=1;for(m=0;m<(assoc*2);m=m+2)//所有的lru值+1lru[index][m]++;lru[index][y]=0;//把lru值最大的替换掉}z=z+2;2. 用于判断缺页类型的算法在程序中,体现了3中缺页的类型:Compulsory Miss:之前没有出现的地址,肯定不会命中Conflict Miss:由于冲突而产生的不命中Capacity Miss:由于容量不足而导致的不命中在函数int misstype(int ba, int nb, int l)中。
实验1-Cache性能分析

西安邮电大学(计算机学院)课内实验报告实验名称:Cache性能分析专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:实验日期:实验1 Cache性能分析1 实验目的(1)加深对Cache的基本概念、基本组织结构以及基本工作原理的理解。
(2)掌握Cache容量、相联度、块大小对Cache性能的影响。
(3)掌握降低Cache不命中率的各种方法.2 实验平台采用MyCache模拟器.MyCache模拟器的使用方法:(1) 双击MyCache。
exe,启动模拟器。
(2)系统打开操作界面,如下图所示:(3)略、写不命中时的调块策略。
可以直接从列表中选择.(4) 访问地址可以选择来自地址流文件,也可以选择手动输入.如果是前者,则可以通过单击“浏览"按钮,从模拟器所在文件夹下的“地址流”文件夹中选取地址流文件(.din)文件,然后执行。
执行得方式可以是单步,也可以选择一次执行结束。
如果选择手动输入,就可以在“执行控制”区域中输入块地址,然后单击“访问”按钮.系统会在界面的右边显示访问类型、地址、块号以及块内地址.(5) 模拟结果包括:●访问总次数,总的不命中次数,总的不命中率。
●读指令操作的次数,其不命中次数及其不命中率.●读数据操作的次数,其不命中次数及其不命中率。
●写数据操作的次数,其不命中次数及其不命中率。
●手动输入单次访问的相关信息。
3 实验内容和步骤3。
1 Cache容量对不命中率的影响(1) 启动MyCache.(2)单击“复位”按钮,将各参数设置为默认值。
(3)选择一个地址流文件。
具体方法:选择“访问地址”→“地址流文件"选项,然后单击“浏览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。
(4) 选择不同的Cache容量,包括2KB,4 KB,8 KB,16 KB,32 KB,64 KB,128 KB和256 KB,分别执行模拟器(单击“执行到底”按钮就可执行),然后在表1.1中记录各种情况下的不命中率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机体系结构——Cache模拟器实验实验报告姓名崔雪莹学号班级计科1202班老师董岚2015年 06月07日一、阅读分析附件模拟器代码...............................错误!未定义书签。
1、关键参数.......................................错误!未定义书签。
2、关键算法.......................................错误!未定义书签。
二、课后习题.............................................错误!未定义书签。
1、习题内容.......................................错误!未定义书签。
2、题目分析.......................................错误!未定义书签。
3、计算及结果.....................................错误!未定义书签。
4、模拟器上实验结果检验...........................错误!未定义书签。
三、整体分析.............................................错误!未定义书签。
1、三种映射方式对Cache效率的的影响...............错误!未定义书签。
2、block块大小与Cache容量对Cache效率的影响 .....错误!未定义书签。
3、Cache容量与相连度对Cache效率的影响...........错误!未定义书签。
4、三种失效类型影响因素...........................错误!未定义书签。
四、实验思考和感受.......................................错误!未定义书签。
1、关于模拟器的思考...............................错误!未定义书签。
2、关于整个实验的思考.............................错误!未定义书签。
一、阅读分析附件模拟器代码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 = %命中次数为19998次,命中率为:19998/20000 = % = 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 = %命中次数为19998次,命中率为:19998/20000 = % = 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 = %命中次数为19998次,命中率为:19998/20000 = % = 1(近似)失效类型为强制性失效,次数为2。
4、模拟器上实验结果检验注:因为例题的循环次数为10000,为了便于实验,我将循环次数设置为100,结果参照100的计算,原理是一致的。
因为实际131/132都是字地址,而设置的是字节地址,所以将里值设置为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,为200个0~1000的随机数。
生成图表:此时可以看到:1.直接映射的失效率高,组相连失效率中等,全相连失效率最低2.随着cache容量的增加,失效率越小。
3.当cache容量为1024时,因为数据取值的原因,三种方式失效率相等,说明当cache容量足够大,三种方式失效率是一样的。
2、block块大小与Cache容量对Cache效率的影响其他相同条件:直接映射,相连度为1,为200个0~1000的随机数。
生成图表:此时可以看到:1.对于给定的cache容量如64字节,当块大小增加时,失效率先是下降,后来反而上升了。
2.Cache容量越大,使其失效率达到最低的块的大小就越大。
3.因为取得数据样本是随机的,不是连续的,实验数据并不是十分准确,比如cache容量128时,块大小出现两次失效率3、Cache容量与相连度对Cache效率的影响其他相同条件:组相连,块大小2,为200个0~1000的随机数。
生成图表:此时可以看到:1.提高相连度会使失效率下降。
2.因为取得数据样本是随机的,不是连续的,实验数据并不是十分准确。
3.当容量为1024时,也就是cache一定大时,失效率没什么区别。