【计算机组成与体系结构Ⅱ】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地址流


参数设置:

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

【步进结果】

Step1:

Step2:


Step3:


Step4:


Step5:


Step6:


Step7:


Step8:


Step9:


Step10:

【问题回答】

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:


序号9~序号10:

(2)测试mytest.din地址流

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


参数设置:

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

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


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

【步进结果】


Step1:


Step2:


Step3:


Step4:


Step5:


Step6:


Step7:


Step8:

【Excel表格填写】


基本设置:

序号1~序号8:

【验证结构】

由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块的内容。

【地址流文件内容】

    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存满(每一行都对应了一个主存块),则采用相应的替换原则进行主存块内容的替换。


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


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

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失效率 的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/331275.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot智慧校园电子班牌统一管理平台源码

借助AIoT智能物联、云计算技术打造智慧绿色校园&#xff0c;助力实现校园教务管理、教师管理、学籍管理、考勤、信息发布、班级文明建设、校园风采、家校互通等场景功能&#xff0c;打造安全、便捷、绿色的智慧校园。 前后端分离架构 1、使用springbootvue2 2、数据库&#xff…

Day31 46全排列 47全排列II 回溯去重tips 51N皇后 37解数独

46 全排列 给定一个 没有重复 数字的序列&#xff0c;返回其所有可能的全排列。 示例: 输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 排列问题与组合问题的不同之处就在于&#xff0c;没有startIndex&#xff0c;同时需要设置一个used数组…

剩余电流继电器装在哪里?电工必备知识

可实时监测和显示TN-S、TT系统配电线路的剩余电流&#xff1b; 每只剩余电流监测仪最多可监测16个回路的剩余电流&#xff0c;剩余电流监测范围为1mA-30A&#xff1b; 每路剩余电流监测均可设置报警值&#xff0c;报警值的设置范围为5mA-30A。每路剩余电流监测可设置为超值…

Docker(一)简介和基本概念

一、简介 本章将带领你进入 Docker 的世界。 什么是 Docker&#xff1f; 用它会带来什么样的好处&#xff1f; 好吧&#xff0c;让我们带着问题开始这神奇之旅。 1.什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目&…

Joern环境的安装(Windows版)

Joern环境的安装(Windows版) 网上很少有关于Windows下安装Joern的教程&#xff0c;而我最初使用也是装在Ubuntu虚拟机中&#xff0c;这样使用很占内存&#xff0c;影响体验感。在Windows下使用源码安装Joern也是非常简单的过程&#xff1a; 提前需要的本地环境&#xff1a; …

基于YOLOv8深度学习的智能肺炎诊断系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

图像处理中,采用极线约束准则来约束特征点匹配搜索空间,理论上在极线上进行搜索。这里的极线是什么线,怎么定义的?基本矩阵F和本质矩阵E有什么区别?

问题描述&#xff1a;图像处理中&#xff0c;采用极线约束准则来约束特征点匹配搜索空间&#xff0c;理论上在极线上进行搜索。这里的极线是什么线&#xff0c;怎么定义的&#xff1f;基本矩阵F和本质矩阵E有什么区别&#xff1f; 问题1解答&#xff1a; 极线是通过极线几何学…

多特征变量序列预测-模型代码全家桶

包括代码、文献、文件解读&#xff01;&#xff01;&#xff01; 包括多特征变量序列预处理的代码&#xff0c; 预测效果好&#xff01;&#xff01;&#xff01;性能优越 包括 完整的风速数据集&#xff0c; 以及已经生成制作好的数据集、标签&#xff0c;对应代码均可以运行…

冻结Prompt微调LM: T5 PET (a)

T5 paper: 2019.10 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer Task: Everything Prompt: 前缀式人工prompt Model: Encoder-Decoder Take Away: 加入前缀Prompt&#xff0c;所有NLP任务都可以转化为文本生成任务 T5论文的初衷如…

力扣刷MySQL-第四弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

GPT应用程序的上线流程

将GPT应用程序上线涉及多个步骤&#xff0c;包括开发、测试、部署和发布。以下是一般的上线流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 开发和测试&#xff1a; 在开发阶段&#xff0c;确保您…

Spring MVC的原理

Spring MVC中的MVC即模型-视图-控制器&#xff0c;该框架围绕一个DispatcherServlet设计而成&#xff0c;DispatcherServlet会把请求分发给各个处理器&#xff0c;并支持可配置的处理器映射和视图渲染等功能。Spring MVC的具体工作流程如下&#xff1a; &#xff08;1&#xff…

深度解析 Compose 的 Modifier 原理 -- Modifier.layout()、LayoutModifier

" Jetpack Compose - - Modifier 原理系列文章 " &#x1f4d1; 《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》 &#x1f4d1; 《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》 &#x1f4d1; 《 深…

redis安装-Linux为例

可以下载一个Shell或者MobaXterm工具&#xff0c;便于操作 在redis官网下载压缩包 开始安装 安装依赖 yum install -y gcc tcl切换目录 切换目录后直接把redis安装包拖到/user/local/src/下 cd /user/local/src/解压然后安装 #解压 tar -zxvf redis-7.2.4.tar.gz #安装 …

C语言——小细节和小知识12

一、倒置句子 将句子中的单词位置倒置&#xff0c;标点不用倒置&#xff0c;例如i love you.倒置结果是&#xff1a;you. love i。 1、两步翻转法 采用两步翻转法来实现单词位置的倒置。首先&#xff0c;它整体翻转整个字符串&#xff0c;然后再逐个翻转每个单词内的字符。 …

环形链表问题

环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

如何录制屏幕视频?让视频制作更简单!

随着数字化时代的来临&#xff0c;录制屏幕视频成为一种常见的传播和教学方式。无论是制作演示文稿、教学视频&#xff0c;还是记录游戏操作&#xff0c;屏幕录制为用户提供了强大而灵活的工具。可是您知道如何录制屏幕视频吗&#xff1f;本文将深入介绍两种常见的屏幕录制方法…

vue el-select自定义搜索选择案例

开发中常见的有选择框并且输入关键词可以快速检索功能&#xff0c;刚好这次项目需求&#xff0c;就开始吧 需求&#xff1a;1、生成1000到100000的数可选择&#xff0c;递增1000 2、这些数必须三位数用逗号隔开&#xff0c;比如1,000.00这样的形式显示 3、输入关键词比如10&am…

zabbix监控平台(agent端)

引言&#xff1a;明人不说暗话&#xff0c;上一篇文章我们讲了zabbix的serrver端部署和配置&#xff0c;今天详细讲解一下agent端服务器&#xff08;客户端&#xff09;的配置和关联 1.进入官网 Zabbix&#xff1a;企业级开源监控解决方案 2.进入下载页面选择需要下载的版本信…

【JVM】JVM概述

JVM概述 基本介绍 JVM&#xff1a;全称 Java Virtual Machine&#xff0c;即 Java 虚拟机&#xff0c;一种规范&#xff0c;本身是一个虚拟计算机&#xff0c;直接和操作系统进行交互&#xff0c;与硬件不直接交互&#xff0c;而操作系统可以帮我们完成和硬件进行交互的工作特…