计算机组成——Cache

news2025/1/1 14:26:48

目录

为什么引入高速缓存?

数据查找方案:

命中率与缺失率

Cache和主存的映射方式

1.全相联映射

经典考法

覆盖问题

访存

2.组相联映射

3.直接映射(和组相联类似)

覆盖问题

替换算法

1.随机算法(RAND)

2.先进先出算法(FIFO)

3.最近最少使用原则

4.最近不经常使用算法

为什么引入高速缓存?

数据查找方案:

命中率与缺失率

Cache和主存的映射方式

1.全相联映射

经典考法

2.组相联映射

3.直接映射(和组相联类似)

替换算法

1.随机算法(RAND)

2.先进先出算法(FIFO)

3.最近最少使用原则

4.最近不经常使用算法


为什么引入高速缓存?

CPU的速度为0.2ns,内存的速度为20ns,为了弥补他们之间速度差,我们在CPU内引入高速缓存

数据查找方案:

        方案一:先访问Cache未命中再访问内存

        此时,查找数据的时间为 t=Htc+(1-H)(tc+tm)

        方案二:CPU同时去Cache和内存当中查找数据

        此时,查找数据的时间为 t=Htc+(1-H)tm

命中率与缺失率

        设tc为访问一次Cache所需要的时间,tm为访问一次内存所需要的时间。

        命中率H:CPU欲访问的信息已经在Cache中的比率

        缺失率:M=1-H。

下面是一个例题—性能对比

Cache和主存的映射方式
1.全相联映射

全相联映射就是主存块可以放在Cache的任意位置

经典考法

假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache行,行长为64B.

按字节编址:256MB=2^28B——需要28位来储存块号

现在一个主存块的大小:64B=2^6B——需要更新块号分配

——此时,更新为22位用于块号寻址,6位用于块内寻址

下面进行全相联映射

首先我们一定需要有一个有效位,刚开始整个Cache都是空的,所以把他的有效位都标记为0

标记的大小也为22位(同块号)

注意Cache块本身也有3位地址(以下图为例子),一个cache块内部也有6位的地址(cache块的大小同主存块相同都为64B),所以这是大小给你的可能是(1+22+3+6)要区分清楚

覆盖问题

当Cache满了,我们在这里涉及到淘汰策略

访存

现在全相联映射结束之后,CPU要访问某一个字节1...10110010101010010,怎么办?

给地址分段,区分出来哪是有效位、标记、Cache块号、块内地址

2.组相联映射

组相联映射:每一个主存块可以被放到特定分组当中的任意一个位置,具体放到哪个分组,可以用主存块号对总的分组数进行一个取余操作

3.直接映射(和组相联类似)

直接映射主存块在Cache中的位置=主存块号%Cache总块数

覆盖问题

如果采用直接映射的方式,他有一个显而易见的缺点,就是虽然这Cache里面还有很多空闲的Cache块,但是不能用,我们只能把这些主存块放到固定的位置。

和全相联比灵活性差一些,空间利用率也不充分

思考:我们用22位的标记(即把主存号全部保存下来),这个方式是否可以进行优化?

如下图,每个主存块号的末尾是三位正好对应着Cache块号,所以在这个例子当中我们只需要记录内存号前边的19位即可。(这取决于Cache块的大小)

因此,如果采用直接映射,原本的主存块号可以再细分为两个部分。前面的19位作为标记,后面三位反应每一个主存块号在哪一个Cache行中

访存

1+19+3+6=29 通过29位地址即可实现访存

替换算法

替换算法是针对于全相联映射和组相联映射

1.随机算法(RAND)

如果Cache块满了,我们随机选择一块进行替换,非常自由

2.先进先出算法(FIFO)

我们会优先替换掉最先进入Cache的块

出现抖动现象——刚换出的块,很快又被访问

3.最近最少使用原则

添加一列计数器,用于记录cache块里存放的主存块多久没有被放问过,一旦被访问到计数器清零。最终我们会替换计数器最大的一个cache块

注意!!

这里不变了——因为Cache块的总数是2,则计数器需要n位,且Cache块装满后所有计数器的值一定不重复。

如果我们频繁访问到的主存块的数量大于cache行数,就会发生抖动现象。

4.最近不经常使用算法

与最近最少使用不同,该计数器记录被访问的次数,每次替换计数器最小的块

为什么引入高速缓存?

CPU的速度为0.2ns,内存的速度为20ns,为了弥补他们之间速度差,我们在CPU内引入高速缓存

数据查找方案:

方案一:先访问Cache未命中再访问内存

此时,查找数据的时间为 t=Htc+(1-H)(tc+tm)

方案二:CPU同时去Cache和内存当中查找数据

此时,查找数据的时间为 t=Htc+(1-H)tm

命中率与缺失率

设tc为访问一次Cache所需要的时间,tm为访问一次内存所需要的时间。

命中率H:CPU欲访问的信息已经在Cache中的比率

缺失率:M=1-H。

下面是一个例题—性能对比

Cache和主存的映射方式
1.全相联映射

全相联映射就是主存块可以放在Cache的任意位置

经典考法

假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache行,行长为64B.

按字节编址:256MB=2^28B——需要28位来储存块号

现在一个主存块的大小:64B=2^6B——需要更新块号分配

——此时,更新为22位用于块号寻址,6位用于块内寻址

下面进行全相联映射

首先我们一定需要有一个有效位,刚开始整个Cache都是空的,所以把他的有效位都标记为0

标记的大小也为22位(同块号)

注意Cache块本身也有3位地址(以下图为例子),一个cache块内部也有6位的地址(cache块的大小同主存块相同都为64B),所以这是大小给你的可能是(1 22 3 6)要区分清楚

覆盖问题

当Cache满了,我们在这里涉及到淘汰策略

访存

现在全相联映射结束之后,CPU要访问某一个字节1...10110010101010010,怎么办?

给地址分段,区分出来哪是有效位、标记、Cache块号、块内地址

2.组相联映射

组相联映射:每一个主存块可以被放到特定分组当中的任意一个位置,具体放到哪个分组,可以用主存块号对总的分组数进行一个取余操作

3.直接映射(和组相联类似)

直接映射主存块在Cache中的位置=主存块号%Cache总块数

覆盖问题

如果采用直接映射的方式,他有一个显而易见的缺点,就是虽然这Cache里面还有很多空闲的Cache块,但是不能用,我们只能把这些主存块放到固定的位置。

和全相联比灵活性差一些,空间利用率也不充分

思考:我们用22位的标记(即把主存号全部保存下来),这个方式是否可以进行优化?

如下图,每个主存块号的末尾是三位正好对应着Cache块号,所以在这个例子当中我们只需要记录内存号前边的19位即可。(这取决于Cache块的大小)

因此,如果采用直接映射,原本的主存块号可以再细分为两个部分。前面的19位作为标记,后面三位反应每一个主存块号在哪一个Cache行中

访存

1+19+3+6=29 通过29位地址即可实现访存

替换算法

替换算法是针对于全相联映射和组相联映射

1.随机算法(RAND)

如果Cache块满了,我们随机选择一块进行替换,非常自由

2.先进先出算法(FIFO)

我们会优先替换掉最先进入Cache的块

出现抖动现象——刚换出的块,很快又被访问

3.最近最少使用原则

添加一列计数器,用于记录cache块里存放的主存块多久没有被放问过,一旦被访问到计数器清零。最终我们会替换计数器最大的一个cache块

注意!!

这里不变了——因为Cache块的总数是2,则计数器需要n位,且Cache块装满后所有计数器的值一定不重复。

如果我们频繁访问到的主存块的数量大于cache行数,就会发生抖动现象。

4.最近不经常使用算法

与最近最少使用不同,该计数器记录被访问的次数,每次替换计数器最小的块

若有多个计数器最小的行可按照行号递增或FIFO算法淘汰

注意!!

这个计数器并没有上限,这就意味着我们需要更多的bit位存储

若有多个计数器最小的行可按照行号递增或FIFO算法淘汰

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV和PyQt的应用

1.创建一个 PyQt 应用程序,该应用程序能够: 使用 OpenCV 加载一张图像。在 PyQt 的窗口中显示这张图像。提供四个按钮(QPushButton): 一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行翻…

基于Spring Boot的宠物领养系统的设计与实现(代码+数据库+LW)

摘 要 如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一些新的技术,而新技术的产生往往是为了解决现有问题而产生的。针对于宠物领…

uniapp 判断多选、选中取消选中的逻辑处理

一、效果展示 二、代码 1.父组件: :id=“this.id” : 给子组件传递参数【id】 @callParentMethod=“takeIndexFun” :给子组件传递方法,这样可以在子组件直接调用父组件的方法 <view @click="$refs.member.open()"

百度热力图数据日期如何选择

目录 1、看日历2、看天气 根据研究内容定&#xff0c;一般如果研究城市活力的话&#xff0c;通常会写“非重大节假日&#xff0c;非重大活动&#xff0c;非极端天气等”。南方晴天不多&#xff0c;有小雨或者中雨都可认为没有影响&#xff0c;要不然在南方很难找到完全一周没有…

【深入理解SpringCloud微服务】Sentinel源码解析——FlowSlot流控规则

Sentinel源码解析——FlowSlot流控规则 StatisticNode与StatisticSlotStatisticNode内部结构StatisticSlot FlowSlot流控规则 在前面的文章&#xff0c;我们对Sentinel的原理进行了分析&#xff0c;Sentinel底层使用了责任链模式&#xff0c;这个责任链就是ProcessorSlotChain对…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)11

文章目录 一、算法概念11二、算法原理&#xff08;一&#xff09;感知机&#xff08;二&#xff09;多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、MLP分类任务实…

R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别

全文链接&#xff1a;https://tecdat.cn/?p38667 摘要&#xff1a;在母婴暴露于空气污染对儿童健康影响的研究中&#xff0c;常需对孕期暴露情况与健康结果进行回归分析。分布滞后非线性模型&#xff08;DLNM&#xff09;是一种常用于估计暴露 - 时间 - 响应函数的统计方法&am…

e3 1220lv3 cpu-z分数

e3 1220lv3 双核四线程&#xff0c;1.1G频率&#xff0c;最低可在800MHZ运行&#xff0c;TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。

Debian安装配置RocketMQ

安装配置 本次安装在/tools/rocket目录下 下载 wget https://dist.apache.org/repos/dist/release/rocketmq/5.3.1/rocketmq-all-5.3.1-bin-release.zip 解压缩 unzip rocketmq-all-5.3.1-bin-release.zip 如果出现以下报错 -bash: unzip: command not found可安装unzip工具后执…

cocos 运行时,实时查看、修改节点树

简介 cocos论坛提供的一款辅助查看、修改cocos运行时的节点树工具&#xff0c;同时也可以实时修改运行的节点树并进行修改。在此感谢大佬提供这么实用的工具。 参考链接&#xff1a;【运行时显示节点树插件】ccc-devtools悄悄更新 - Creator 2.x - Cocos中文社区 仓库链接&a…

UE(虚幻)学习(四) 第一个C++类来控制小球移动来理解蓝图和脚本如何工作

UE5视频看了不少&#xff0c;但基本都是蓝图如何搞&#xff0c;或者改一下属性&#xff0c;理解UE系统现有组件使用的。一直对C脚本和蓝图之间的关系不是很理解&#xff0c;看到一个视频讲的很好&#xff0c;我也做笔记记录一下。 我的环境是UE5.3.2. 创建UE空项目 我们创建…

记一次内存泄漏分析(待写稿)

背景 线上Flink频繁重启&#xff0c;先后排查了很多情况&#xff0c;目前在内存阶段排查&#xff0c;首先说说学到的知识 内存泄漏分析 JVM常用命令 JConsole JVisualvm 快照的这里是最有用的&#xff0c;它和jmap不同&#xff0c;jmap查找的是占用字节最多的类&#xff…

【蓝桥杯——物联网设计与开发】拓展模块5 - 光敏/热释电模块

目录 一、光敏/热释电模块 &#xff08;1&#xff09;资源介绍 &#x1f505;原理图 &#x1f505;AS312 &#x1f319;简介 &#x1f319;特性 &#x1f505;LDR &#xff08;2&#xff09;STM32CubeMX 软件配置 &#xff08;3&#xff09;代码编写 &#xff08;4&#x…

C语言从入门到放弃教程

C语言从入门到放弃 1. 介绍1.1 特点1.2 历史与发展1.3 应用领域 2. 安装2.1 编译器安装2.2 编辑器安装 3. 第一个程序1. 包含头文件2. 主函数定义3. 打印语句4. 返回值 4. 基础语法4.1 注释4.1.1 单行注释4.1.2 多行注释 4.2 关键字4.2.1 C语言标准4.2.2 C89/C90关键字&#xf…

第三百四十六节 JavaFX教程 - JavaFX绑定

JavaFX教程 - JavaFX绑定 JavaFX绑定同步两个值&#xff1a;当因变量更改时&#xff0c;其他变量更改。 要将属性绑定到另一个属性&#xff0c;请调用bind()方法&#xff0c;该方法在一个方向绑定值。例如&#xff0c;当属性A绑定到属性B时&#xff0c;属性B的更改将更新属性A…

慧集通客户案例:致远OA与熵基考勤机集成方案

本原型公司是一家专注大健康产业的综合性高新科技形实体企业&#xff0c;按照单位的战略业务布局&#xff0c;围绕“做强做优、世界一流”的目标&#xff0c;加快内外部资源整合、加强业务协同、优化资源配置&#xff0c;有序推进大健康及相关产业的有机融合&#xff0c;加快构…

SCSA: Exploring the Synergistic Effects Between Spatial and Channel Attention

摘要 https://arxiv.org/pdf/2407.05128 通道注意力和空间注意力分别为各种下游视觉任务在提取特征依赖性和空间结构关系方面带来了显著改进。通道注意力和空间注意力的结合使用被广泛认为有利于进一步提升性能&#xff1b;然而&#xff0c;通道注意力和空间注意力之间的协同作…

UE5在蓝图中使用VarestX插件访问API

在Fab中安装好VarestX免费插件 这个插件可以用来远程请求http和api等&#xff0c;返回json等格式内容 插件网址 https://www.fab.com/zh-cn/listings/d283e40c-4ee5-4e73-8110-cc7253cbeaab 虚幻里开启插件 然后网上随便搜个免费api测试一下&#xff0c;这里我找了个微博热搜…

碰一碰发视频矩阵系统源码搭建,支持OEM

一、引言 随着短视频的火爆发展&#xff0c;碰一碰发视频的矩阵系统逐渐受到关注。这种系统能够实现用户通过碰一碰设备&#xff08;如 NFC 标签&#xff09;快速触发视频的发布&#xff0c;在营销推广、互动体验等领域有着广泛的应用前景。本文将详细介绍碰一碰发视频矩阵系统…

Pandas01

文章目录 内容简介1 常用数据分析三方库2 Jupyter notebook3 Series的创建3.1 通过Numpy的Ndarray 创建一个Series3.2 通过列表创建Series 4 Series的属性和方法4.1 常用属性4.2 常用方法4.3 布尔值列表筛选部分数据4.4 Series 的运算 5 DataFrame的创建通过字典创建通过列表[元…