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

上传人:b****4 文档编号:833603 上传时间:2022-10-13 格式:DOCX 页数:15 大小:168.25KB
下载 相关 举报
计算机体系结构cache模拟器实验报告.docx_第1页
第1页 / 共15页
计算机体系结构cache模拟器实验报告.docx_第2页
第2页 / 共15页
计算机体系结构cache模拟器实验报告.docx_第3页
第3页 / 共15页
计算机体系结构cache模拟器实验报告.docx_第4页
第4页 / 共15页
计算机体系结构cache模拟器实验报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

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

《计算机体系结构cache模拟器实验报告.docx》由会员分享,可在线阅读,更多相关《计算机体系结构cache模拟器实验报告.docx(15页珍藏版)》请在冰豆网上搜索。

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

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

计算机体系结构——

Cache模拟器实验

实验报告

姓名崔雪莹

学号12281166

班级计科1202班

老师董岚

2015年06月07日

一、阅读分析附件模拟器代码

1、关键参数

(1)用户可见参数:

(用户通过命令行输入参数)

参数名

含义

备注

choice

映像方式选项

1/2/3

1为直接映射,2为组相连映射,

3为全相连映射

cachesize

Cache大小

16/64/128/256

以字节为单位

blocksize

Block大小

1/2/4

以字为单位

assoc

相连度

1/2/4/8/16

assoc路组相连(n-way)

accesscount

请求次数

待输出

等于project、txt得值个数

hitcount

命中次数

待输出

成功在Cache找到次数

hitrate

命中率

待输出

HitRate=hitcount/accesscount

misscount

未命中次数

待输出

没在Cache找到次数

misscount=1-hitcount

missrate

未命中率

待输出

MissRate=misscount/accesscount

c1c,c2c,c3c

失效次数

待输出

分别为三种失效类型得次数

(2)程序内部主要参数:

(代码内部重要参数)

参数名

含义

计算

备注

blockinbyte

块得字节大小

=blocksize*4

每一个块占多少字节

NOofblock

块个数

=cachesize/blockinbyte

Cache中多少个块

NOofset

组个数

=NOofblock/assoc

块分成了多少个组

bytearray[]

要访问得数据得字节地址

=projec、txt中得值

project、txt文件数据赋给了bytearray[]数组

wordaddress[]

要访问得数据得字地址

=bytearray[j]/4

blocksize就是字为单位得,就就是说一个block占多少个字,所以数据也要求字地址

blockaddress[]

数据得块地址

=wordaddress[]/blocksize

数据在第几块

index

索引位(组地址)

=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与数据地址得关系,以及与组地址与标志位得关系。

(2)Index与tag:

由上面计算:

index=blockaddress%NOofsetindex=16%8=2

tag=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)。

pulsorymiss(强制性失效,冷启动):

当第一次访问某一个块得时候,数据就是肯定不在块中得,此时出现强制性失效,或者说就是冷启动失效。

Capacitymiss(容量失效):

所需得数据不能全部调入cache中,块被替换后又被重新访问,意思就就是当所有得块都被占满了,这样又有数据希望被调入缓存时,就出现了容量失效。

Conflictmiss(冲突失效):

在组相联或直接映像中,数据想要替换进某一组中,组内得块都被占满了,但就是别得组得块有空余,数据只能替换这一组,尽管别得组有空余也不能替换。

这样就出现了冲突失效。

(5)LRU算法实现替换:

LRU替换算法就是采用最近最久未使用得块,其中Lru[][]数组存放最近多少次未被使用,因为就是采用循环访问,当循环访问到这一组时,把这组所有得块得Lru[][]值都加1,如果成功访问到这一块,数据能从其中取出来,就把这一块得Lru[][]值置0,退出循环。

(6)直接映射、组相联映射、全相联映射:

直接映射:

就是特殊得组相联映射,就就是相联度为1得组相联映射。

所以采取与组相联一样得程序与算法,当识别该组第一块失效时,直接进行替换,因为有且只有一块。

组相联映射:

当识别该组某块失效时,如果块都被占满,要根据Lru[][]值得大小,判断哪一块被替换掉。

全相联映射:

从上到下cache块存数据,则从上到下循环即可,遇到失效时,要根据Lru[][]值得大小,判断哪一块被替换掉。

二、课后习题

1、习题内容

在CacheSimulator模拟器上模拟如下程序得运行过程:

inti,j,cstride,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:

0mod16=0

array[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=131

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

0modulo16=0

array[131]得块地址为131/4=32,映射到cache得块号为0:

32modulo16=0

因为第一次访问cache,0一定会发生强制性失效,之后cache里块号为0得块不断地被替换写入替换写入,此时发生冲突失效。

则失效次数为20000,则失效率为:

20000/20000=1=100%

命中率为0。

失效类型为强制性失效次数1,冲突失效次数为19999。

2)2路组相联:

●stride=132

array[0]得块地址为0,映像到cache得组号为0:

0modulo8=0

array[132]得块地址为132/4=33,映像到cache组号为1:

33modulo8=1

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

则失效次数为2,则失效率为:

2/20000=0、01%

命中次数为19998次,命中率为:

19998/20000=99、99%=1(近似)

失效类型为强制性失效,次数为2。

●stride=131

array[0]得块地址为0,映像到cache组号为:

0modulo8=0

array[131]得块地址为131/4=32,映像到cache组号为:

32modulo8=0

因为第一次访问cache,0与1一定会发生强制性失效,之后因为就是2路组相联,array[0]与array[131]都在0组,不会发生失效,则失效次数为2,失效率为:

2/20000=0、01%

命中次数为19998次,命中率为:

19998/20000=99、99%=1(近似)

失效类型为强制性失效,次数为2。

4、模拟器上实验结果检验

注:

因为例题得循环次数为10000,为了便于实验,我将循环次数设置为100,结果参照100得计算,原理就是一致得。

因为实际131/132都就是字地址,而project、txt设置得就是字节地址,所以将project、txt里值设置为0与132*4/131*4循环100次,设置cache大小为256,block大小为4,可以分别瞧到直接映射与2路组相连映射得结果为:

直接映射

stride=132

stride=131

misscount

 2

 200

missrate

 0、01

 1、00

hitcount

 198

 0

hitrate

 0、99

 0

accesscount

 200

 200

c1c(强制性失效)

 2

 2

c2c(容量性失效)

 0

 0

c3c(冲突性失效)

 0

 198

2路组相连映射

stride=132

stride=131

misscount

 2

 2

missrate

 0、01

 0、01

hitcount

 198

 198

hitrate

 0、99

 0、99

accesscount

 200

 200

c1c(强制性失效)

 2

 2

c2c(容量性失效)

 0

 0

c3c(冲突性失效)

 0

 0

可以瞧到实验结果与计算就是一致得(因为循环次数100,所以实验结果小数点要后移两位)。

同时对习题1得思考(见后)也证明就是正确得。

(1)直接映射:

stride=132截图

(2)直接映射:

stride=131截图

(3)2路组相连:

stride=132截图

(4)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1