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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 = 2

tag = 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=132

array[0]的块地址为0,映射到cache的块号为0:

0 mod 16 = 0

array[132]的块地址为132/4 = 33,映射到cache的块号为1:

33 mod 16 = 1

因为第一次访问cache,0和1一定会发生强制性失效,之后因为调入

相关文档
最新文档