【计算机组成与体系结构Ⅱ】Cache性能分析(实验)

实验6:Cache性能分析

一、实验目的

1:加深对 Cache 的基本概念、基本组织结构以及基本工作原理的理解。

2:掌握 Cache 容量、相联度、块大小对 Cache 性能的影响。

3:掌握降低 Cache 不命中率的各种方法以及这些方法对提高 Cache 性能的好处。

4:理解 LRU 与随机法的基本思想以及它们对 Cache 性能的影响。

二、实验平台

    Cache模拟器:MyCache。

三、实验内容与步骤

3.1:掌握 MyCache 模拟器的使用方法

1:启动 MyCache。

2:用鼠标点击“复位”按钮,把各参数设置为默认值。

3:选择一个地址流文件。方法: 选择“访问地址”的“地址流文件”选项,然后点击“浏览”按钮,从 MyCache 模拟器所在的文件夹下的“地址流”文件夹中选取地址流文件(如:ed.din)。

4:设置相关参数,选择执行到底或步进执行,得到相关失效率结果。

3.2:Cache 容量对失效率的影响

地址流文件:eg.din(由于eg.din文件在后面表现不好,因此本实验在初步检测效果时均改为使用all.din文件)

Cache 容量

(KB)

2

4

8

16

32

64

128

256

失效率

5.4%

5.4%

5.0%

4.7%

4.7%

4.7%

4.7%

4.7%

表0:不同容量下 Cache 的失效率

地址流文件:all.din

Cache 容量

(KB)

2

4

8

16

32

64

128

256

失效率

9.87%

7.19%

4.48%

2.65%

1.42%

0.89%

0.60%

0.49%

表1:不同容量下 Cache 的失效率

【结论】增大Cache的容量时,可以在一定程度上减少容量失效,降低Cache的失效率。

3.3:相联度对失效率的影响

地址流文件:all.din

【Cache容量 = 64KB时】

相联度

1

2

4

8

16

32

失效率

0.89%

0.53%

0.47%

0.45%

0.44%

0.44%

表2:当容量为 64KB 时, 不同相联度下 Cache 的失效率

【Cache容量 = 256KB时】

相联度

1

2

4

8

16

32

失效率

0.49%

0.38%

0.36%

0.36%

0.35%

0.35%

表3:当容量为 256KB 时, 不同相联度下 Cache 的失效率

【结论】增大Cache的相联度时,可以在一定程度上减少冲突失效,降低Cache的失效率。

3.4:Cache 块大小对失效率的影响

地址流文件:all.din

块大小

(B)

Cache 容量(KB)

2

8

32

128

512

16

12.02%

5.79%

1.86%

0.95%

0.71%

32

9.87%

4.48%

1.42%

0.60%

0.42%

64

9.36%

4.03%

1.20%

0.43%

0.27%

128

10.49%

4.60%

1.08%

0.35%

0.20%

256

13.45%

5.35%

1.19%

0.34%

0.16%

表4:各种块大小情况下 Cache 的失效率

【结论】对于给定的Cache容量,当块大小增加的时候,失效率先下降后上升。同时,Cache的容量越大,失效率达到最低的块大小(极小值点)就越大。因此,在一定范围内增加Cache的块大小,可以减少强制性失效。给定容量cache,块太小1次调进cache数据少,失效率增加;块太大,块数太少,冲突失效增加。

3.5:替换算法对失效率的影响

地址流文件:all.din

Cache

容量

相  联  度

2  路

4  路

8  路

LRU

随机算法

LRU

随机算法

LRU

随机算法

16KB

1.71%

2.05%

1.33%

1.77%

1.21%

1.97%

64KB

0.53%

0.63%

0.47%

0.58%

0.45%

0.59%

256KB

0.38%

0.40%

0.36%

0.37%

0.36%

0.36%

1MB

0.35%

0.35%

0.35%

0.35%

0.35%

0.35%

表5:LRU 和随机替换法的失效率的比较

【结论】当Cache容量较小时(<=64KB),同种相联度采用LRU替换算法的失效率明显低于采用随机算法的失效率,即说明Cache容量较小时LRU替换算法更优。当Cache容量较大时,同种相联度采用LRU替换算法的失效率与采用随机算法的失效率大致相同,即说明Cache容量较大时LRU替换算法和随即替换法的效果相似。

3.6:混合 Cache 和分离 Cache 的比较

地址流文件:all.din

    其中,指令Cache的容量 = 数据Cache的容量 = 1/2 混合Cache的容量。

总容量

指令 Cache

数据 Cache

混合 Cache

4KB

6.01%

7.19%

8KB

4.16%

4.48%

16KB

2.65%

2.65%

32KB

1.52%

1.42%

64KB

0.79%

0.89%

128KB

0.53%

0.60%

256KB

0.45%

0.49%

表6:分离 Cache 和混合 Cache 失效率的比较

【结论】当总容量一定时,分离Cache的失效率通常低于混合Cache的失效率。随着Cache容量的增加,无论是分离Cache还是混合Cache,失效率都有所降低。

3.7:Cache 工作原理剖析

(1)测试eg.din地址流


参数设置:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第1张图片

执行控制采用“步进”模式,观察结果,填写实验“实验 6- 中间结果分析”中的“eg.din” 页表, 进行分析并回答问题。

【步进结果】

Step1:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第2张图片

Step2:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第3张图片


Step3:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第4张图片


Step4:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第5张图片


Step5:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第6张图片


Step6:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第7张图片


Step7:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第8张图片


Step8:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第9张图片


Step9:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第10张图片


Step10:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第11张图片

【问题回答】

1)Cache分为几组?每组多少块,块的大小是多少?

组数 = 容量 / 块大小 / 相联度 = 2KB / 16B / 2 = 2^6 = 64,因此Cache分为64组。

每组2块,因为是2路组相联。

块大小是16B,条件中已经给出。

2)索引用多少位表示?对应地址的第几位到第几位?组号和索引之间什么关系?用多少位?块号用多少位,块内地址多少位?

索引的长度与Cache的组数相关,用于映射所在组的行号。Cache一共64(2^6)组,因此索引需要6位来表示。

由于块大小是16B = 2^4 B,因此块内地址占4位。所以从右侧数起的第5位地址~第10位地址是索引对应的地址位置。

主存的组号与Cache的索引之间是一一映射的,即相同。

均用6位。

主存的块号用28位,块内地址用4位。

3)目录表中多少行,多少列?如何找到对应块号并读入?

目录表中的行数与Cache的组数相同,所以是64行。目录表需要存储主存的块号和Cache的组号,所以是2列。

根据主存地址,可以求出主存的Tag、映射的Cache组号、块内地址。在目录表中找到该主存地址映射的Cache组号,比较目录表该行的Tag是否与该主存地址的Tag相同。该Tag是主存块号去掉末尾映射的Cache组号所构成的。

4)如果是直接相联,索引用多少位?目录表中多少行?

直接相联的组数 = 容量 / 块大小 = 2KB / 16B = 2^7 = 128。索引用7位。

目录表中有128行。

5)从内存读取的数据多大,读取操作完毕之后Cache里面得到的数据多少位?

从内存读取数据以块为单位,块有多大则读取的数据有多大。所以读取的数据为16B。

读取操作完毕后,Cache里面得到的数据是16B = 16 * 8 bit = 128bit。

6)这里的块号是主存块号还是Cache块号?

主存块号。明显超出了Cache的块数。

7)按照索引进行寻址,要进行几次比较?跟什么有关系?

2次比较。首先比较索引,然后比较Tag。

跟相联度有关系。

8)Cache里面会把该数据调入吗?是先调入后写还是先写后调入?

会。

先调入后写。

9)采用写回策略,存储器中的数据会修改吗?

不会修改。仅当Cache中相应的块被替换时,才写回主存。

10)解释什么是命中?最后传给CPU的数据是多少位?

CPU在Cache中寻找所需的数据,若该数据存在Cache中,就表示命中,否则缺失。

最后传给CPU的数据是32位,调入是一整个块,但是CPU执行只传送一个字。

【Excel表格填写】


基本设置:


序号1~序号8:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第12张图片


序号9~序号10:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第13张图片

(2)测试mytest.din地址流

例题:设一个 Cache 中有 8 个块,访问主存进行读操作的块地址序列为 22、26、22、26、16、 4、16、18(地址内位移可以随机设定),分析每次访问后的 Cache 内容和命中率。


参数设置:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第14张图片

内存地址范围 0X00000000-0XFFFFFFFF,编写地址流文件,保证 Cache 的块数为 8。

执行控制采用 “步进” 模式,观察结果,填写实验“实验 6- 中间 结果分析 ”中的“mytest.din”页表,进行分析并回答问题。


    验证结构是否和下图的分析结构相同。

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第15张图片

【步进结果】


Step1:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第16张图片


Step2:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第17张图片


Step3:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第18张图片


Step4:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第19张图片


Step5:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第20张图片


Step6:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第21张图片


Step7:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第22张图片


Step8:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第23张图片

【Excel表格填写】


基本设置:

序号1~序号8:

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第24张图片

【验证结构】

由Excel表的结果可知,Cache实际工作的结果和下图的分析结构基本相同。(除了第8次执行的替换中,Cache第4行的数据消失了)

在第1次执行时,由于Cache第6行为空,所以向Cache第6行写入主存第22块的内容。

在第2次执行时,由于Cache第2行为空,所以向Cache第2行写入主存第26块的内容。

在第3次执行时,需要访问主存中第22块的内容,因此先向Cache第6行中比对Tag,发现Tag一致,则命中。

在第4次执行时,需要访问主存中第26块的内容,因此先向Cache第2行中比对Tag,发现Tag一致,则命中。

在第5次执行时,由于Cache第0行为空,所以向Cache第0行写入主存第16块的内容。

在第6次执行时,由于Cache第4行为空,所以向Cache第4行写入主存第4块的内容。

在第7次执行时,需要访问主存中第16块的内容,因此先向Cache第0行中比对Tag,发现Tag一致,则命中。


在第8次执行时,需要访问主存中第18块的内容,因此先向Cache第2行中比对Tag,发现Tag不一致,则不命中,且将原来主存第26块的内容,替换为主存第18块的内容。

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第25张图片

【地址流文件内容】

    mytest.din文件的内容如下所示:

2 1680  00010110 10000000

2 1AA5  00011010 10100101

2 1663  00010110 01100011

2 1A48  00011010 01001000

2 1021  00010000 00100001

2 401   00000100 00000001

2 1006  00010000 00000110

2 12E3  00010010 11100011

 

【问题回答】

1)Cache分为几组?每组多少块,块的大小是多少?

2KB / 256B = 2^11B / 2^8B = 2^3,所以Cache分为8块。

每组1块,因为是直接相联。

块的大小是256B。

2)索引用多少位表示?对应地址的第几位到第几位?组号和索引之间什么关系?用多少位?块号用多少位,块内地址多少位?

索引用3位表示,因为一共有2^3=8块。

由于块大小是256B = 2^8 B,因此块内地址占8位。所以从右侧数起的第9位地址~第11位地址是索引对应的地址位置。

主存的组号与Cache的索引之间是一一映射的,即相同。

均用3位。

所以主存的块号用32 – 8 = 24 位,块内地址用8位。

3)目录表中多少行,多少列?如何找到对应块号并读入?

目录表中的行数与Cache的组数相同,所以是8行。目录表需要存储主存的块号和Cache的组号,所以是2列。

读出目录表中的tag内容与主存的比较。

4)从内存读取的数据多大,读取操作完毕之后Cache里面得到的数据多少位?

从内存读取的数据为一个块的大小,即256B。

读取操作完毕之后,Cache里面得到的数据位数是:256 * 8 bit = 2048bit。

四、实验总结

1:在mytest.din的实验中,主存的地址范围是0X0000 0000 – 0XFFFF FFFF ,最大地址对应的十进制数是4294967295。4294967295 / 8 = 536870911.875,取整后可知主存需要划分为536870912个块,十六进制下为2000 0000。


2:全相联的映射关系如下图所示。主存和Cache按照块大小进行划分编号后,主存中任意一块都可以映射到Cache的任意一行。如果Cache存满(每一行都对应了一个主存块),则采用相应的替换原则进行主存块内容的替换。

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第26张图片


3:直接相联的映射关系如下图所示。主存和Cache按照块大小进行划分编号后,主存中块必须按照【主存块号 % Cache块数】的关系进行映射,即相同余数的主存块存到Cache的同一行位置处,如果已经存有主存块的数据,则需要替换。

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第27张图片


4:组相联的映射关系如下图所示。主存和Cache按照块大小进行划分编号后,Cache按照相联度进行组的划分,而主存按照Cache中的组数进行组群的划分。主存中的组群按照直接相联的方法进行映射,主存中组群内的块按照全相联的方法在对应的Cache组里面进行映射。

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第28张图片

5:在编写mytest.din文件时,可以使用记事本打开,只需要编写1个label和1个address,其余内容会自动默认是注释。在label中的对应关系如下表所示。同时,address的范围是[0,FFFFFFFF]。

Label类型

类型含义

0

read data  读数据

1

write data  写数据

2

instruction fetch  取指令

3

escape record (treated as unknown access type)
 转义记录(视为未知访问类型)

4

escape record (causes cache flush)
转义记录(导致缓存刷新)

6:Cache的失效类型分为以下三种:

  1. 强制性失效:第一次访问Cache,该块不在Cache中,要从下级存储器中调入;发生在空Cache中。
  2. 容量失效:Cache容量有限,所需块无法全部调入;块被替换后可能被重新访问,发生失效;发生在全相联Cache中。
  3. 冲突失效:直接相联或组相联Cache,组内空间已满,进行替换后又被重新访问(其他组有空闲块,或对某些组块数要求超过了n路)。

7:2:1的Cache经验规则:容量为N的直接映象Cache失效率约等于容量为N/2的2路组相联Cache失效率,当N > 128KB时不成立。

8:降低Cache失效率 的方法。

【计算机组成与体系结构Ⅱ】Cache性能分析(实验)_第29张图片

你可能感兴趣的:(计算机组成与体系结构,体系结构,Cache)