Cache的三种映射和局部性

完全重映射和部分重映射分析(超详细) 芯片的重映射功能是为了最大化利用IO口,减少IO口数量,每一个内置外设有若干个输入输出引脚,对应的IO口是固定不变的,为了让设计师更好走线且使用功能,引入了重映射。设置复用 重映射和调试I/O配置寄存器,实现引脚的重新映射。这时,复用功能不再映射到它 们的原始分配上。REMAP=0表示为默认引脚,REMAP=1表示为开启重映射 ... 阅读详情

计算机存储层级结构

上图是计算机的存储的层次结构图,自上而下,运行速度越来越慢,存储容量越来越大

其实CPU在运行时,所需要的操作数大多数是来自寄存器的,速度是很快的,而离CPU越远的,运算速度越慢

就我个人的理解,cache就是我们CPU内部的SRAM,主存是DRAM,也就是我们经常听说的内存条,外存储就是硬盘之类的

我们应该了解,计算机在运行时,操作指令多存放在主存(内存条)中,再结合上图可以发现,主存并不是离寄存器最近的存储器件,那么为了提高计算机的速度,应当将运行指令先从主存中拷贝到cache中,对DRAM和SRAM有过了解的小伙伴应该知道,SRAM运行速度快,但成本高;DRAM运行速度相对慢,但是价格相对便宜,因此cache的容量必定不会与主存的容量大小相同

那么如何保证从主存拷贝到cache中的指令和数据正是我们所需要的呢?

这就涉及到了程序访问的局部性

程序访问的局部性

分析结果表明:

在较短时间间隔内,程序产生的地址/所访问数据往往几种在存储器的一个很小范围内

程序访问局部性可以分为:时间局部性和空间局部性

  • 时间局部性:刚被访问过的存储单元很可能不久后又被访问
  • 空间局部性:刚被访问过的存储单元临近的单元很可能不就后被访问

这里再来介绍个概念

CPU和cache之间是以字进行指令/数据的传输

主存和cache之间是以块进行指令/数据的传输,每个块中又包含多个字(单元)

当CPU要从主存中读取指令/数据的时候,会先查看cache中有没有,如果有直接调用cache中的指令/数据,如果没有则先从主存中拷贝到cache中,在从cache中调用

从两个局部性分别来看

  • 时间局部性:对于从主存拷贝到cache中的指令/数据,如果不与映射方式冲突,不会在CPU调用完后就立即擦除(映射方式接下来会介绍),可以理解为,被CPU调用的指令/数据还是保留在cache中,如果下次再次调用这些指令/数据,它们还在cache中,不用从主存取
  • 空间局部性:因为从主存中拷贝到cache中的指令/数据是以块为单位的,假如说一个块中有10个数字,刚开始CPU想访问在数字1位置的指令/数据,而cache此时将数字0-9都拷贝进cache中,那么下次CPU想访问在数组5中的指令/数据时,它们也都在cache中
cache与主存的映射

cache与主存可按三种方式进行映射:直接映射、全映射、组映射

直接映射

(直接从网上的视频中摘个题目)

from MOOC

因为主存和cache之间是以块为单位进行传输的,因此cache和主存中每个块的大小要相同

from MOOC

这是直接映射的示意图

从题目中给的计算结果看,cache共分为16个槽(也叫行),主存共分为2048个块

将主存的块根据cache的槽数进行块群的划分

128个块群是由主存的2048个块 / cache的16个槽得来的,主存中每个块群有16个块

直接映射就是每个块群的第几个块只能映射到cache的第几个槽中

这么说有点抽象,换个说法

0块是0块群的第一个块,那么0块就只能映射到cache的第一个槽(0槽);16块又是1块群中的第一个块,那么16块也只能映射到cache的第一个槽(0槽)

在介绍局部性的时候,我有提过“如果不与映射方式冲突”,试想一下,按照直接映射的方式,CPU第一次访问的是主存的0块,下次访问的是主存的16块呢

接下来介绍地址

from MOOC

从这个图中可以看到,地址分为:主存地址、主存块号、主存标记、cache槽号、块内地址和cache地址

  • 块内地址指出来每个块中访问的是第几个单元

  • cache槽号指出存储在第几个槽中

  • cache槽号指出指令/数据存储在cache中第几个槽的第几个单元中

  • 主存标记指出访问的是主存中的第几个块群

  • 主存块号(主存标记+cache槽号)指出访问的是主存的第几个块

比如我们要对0220CH单元进行访问

0220CH转换成二进制是 0000_0010_0010_0000_1100B

主存标记是前7位 -> 0000_001 (1块群)

cache槽号是主存标记后面的4位 -> 0_001 (1槽)

块内地址是最后的9位 -> 0_0000_1100 (12单元)

主存块号是前11位 -> 0000_0010_001 (17块)

即0220CH单元是主存中1块群1块(17块)中的12单元

直接映射访问方式:

假如CPU想访问主存0块中的12单元,CPU先查看cache的0槽(0块应当映射到0槽中)是否存在0块的内容,如果没有则先将主存0块中的内容拷贝到cache的0槽,在从cache中访问

试想一下,假设我们的cache固定,就是16个槽,如果我们的主存非常大,要分很多块群,是不是就大大增加了hit cache同一个槽的概率了

这也是直接映射的缺点

全映射

from MOOC

全映射是主存中任意一个块都可以映射到cache中的任意一个槽中,没有主存的某个块只能映射到cache的一个槽中的限制

因此,对于全映射的地址来说,主存地址中不存在cache槽号的内容

全映射访问方式:

假如CPU想访问主存0块中的12单元,CPU会从cache的0槽到15槽依次查看0块是否映射到cache中,如果都没有,主存才会将0块映射到cache中

试想一下,如果cache的槽号非常多,CPU每次要访问主存中的某个块里的单元,都要先将cache中的每个槽先查看一遍,是不是很浪费时间

组映射

组映射可以理解为是直接映射和全映射的结合体

from MOOC

在组映射中,会将cache进行分组,每组cache又会存在几个槽

组映射时,主存和cache的组之间映射是直接映射,与cache组中每个槽之间的映射时全映射

就像之前的例子,我们将cache的16个槽分为8组,每组有2个槽,那么在进行组映射的时候,主存在中块会先与cache的组进行直接映射,在确定要映射的组后,再与组内的两个槽进行全映射

from MOOC

这里地址中的标记位指出对应槽取自主存的哪个组群

联想刚才在全映射和直接映射提出的两个极端的情况:

  • 如果主存很大(块多),主存的块hit cache同一个槽的概率增大,而在组映射的情况下,主存的块hit的是cache的组,而cache的组内有多个槽,主存的块可以存放在cache组内的任何一个槽中
  • 如果cache很大(槽多),CPU要访问主存的某个块时,只需要先在cache的固定组中查看这个块是否存在即可
对比三种映射的地址

直接放图吧

Cache 缓存 Cache 的由来:随着MCU性能的不断提升,MCU的时钟频率不断提升工作速率不断提高,MCU访问内存的速率也随之被提升。但是内存性能的提升速率不及MCU快,因此内存访问的速率相比MCU慢的多。 阅读详情

相关推荐

Cache(高速缓冲存储器)

高速缓存位于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小,速度比主存 高得多,接近于CPU的速度,单位成本比内存高·Cache存储了频繁访问内存的数据。 1.Cache原理、命中率、失效率 使用Cache改善系统性能的主要依据是程序的局部性原理 (1)程序局部性原理 时间局部性 当前访问的指令,不久的将来可能还会访问空间局部性 当前访问了此条指令,有可能马上会访问它附近的指令 ()命中率 访问的指令能够在Cache中找到,称之为命中。单位时间内在Cache 中命中的数量与执

weixin_73483086的博客 1985

计算机组成原理-第三章-存储系统

408考研,存储系统,RAM,ROM,FlashMemory(闪存),Cache,虚拟存储器,高速缓冲存储器,CPU与内存相连,多体并行存储器,

qq_38738735的博客 3221

计组 | 【Cache】主存映射cache容量及cache写策略

预备知识 1.cache的产生背景 在多体并行存储器中讲过,外部设备的优先级最高,这样就会导致CPU等待外部设备访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周期,从而降低了CPU的工作效率。 为了避免CPU与I/O设备争抢访存,可在 CPU与主存之间加一个Cache。 这样一来,如果外部设备正在和主存交换信息,CPU就可以不用等待,直接从Cache中取所需信息。当然,考生会提出质疑,Cache那么小,每次访问 CPU的数据都有吗?解释: 2.局部性原理 通过大量典型程序...

"You are worthy! You can do it!" 4507

Cache超清晰逻辑详解(cache的三种映射)

碰到实验室里装了sql2000,我要用sql2005以上的版本。不是很敢动机子,怕装了以后出冲突。公用的机房。没办法。上课只有用vs2010自带的sql2008了,附加数据库和调试程序这块搞了几天。。很多东西还没有摸熟,没办法。 简单说下,vs10中sql08的使用。 1)首先就是vs10要完全安装,必须要有 2)打开服务器标签页,右键选择新建链接, 3)

zanghui426的专栏 2688

cache和内存的映射方式

cache是一种高速缓冲存储器,她的主要作用是提高CPU数据输入的速率,调和CPU速度与内存存储速度之间的巨大差异。 通俗一点说就是CPU太快,内存速度相对比较慢,而cache的速度快,但是cache的价格比较昂贵。人们想到一个办法就是利用小容量的cache在CPU和内存中间当桥梁,也就是说把CPU在下一个时间段需要用到的数据提前存入cache中,当CPU需要的时候可以快速的从Cache中取得数

_____________________________________simanstar____ 1711

计算机组成原理——Cache工作原理以及映射方式

本文通过Cache仿真实验分析了三种地址映射机制(直接相联、全相联、组相联)的性能差异。实验表明:直接映射因固定位置存放导致冲突率高,全相联虽命中率高但硬件成本大。通过设计特定访问序列(如交替访问相同映射位置的地址),可观察到直接映射的持续缺失现象。

Zuming12138的博客 850

映射的概念以及用法

在数学里,映射是个术语,指两个元素的集之间元素相互“对应”的关系,为名词。映射,或者射影,在数学及相关的领域经常等同于函数,函数是从非空数集到非空数集的映射,而且只能是一对一映射或多对一映射。基于此,部分映射就相当于部分函数,而完全映射相当于完全函数。两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素a,B中总有唯一的一个元素b与它对应,就这种对应为从A到B的映射,记作fA→Bf:A→BfA→B。其中,b称为元素a在映射fffbfab=f(a)bfa。

研究方向:嵌入式、AI 8296

【Qt】QByteArray详解

对象共享同一份数据,直到修改时才进行深拷贝,以节省内存和计算资源。:可存储任意二进制数据(如图片、音频、协议数据),不依赖字符编码。与编码(如 UTF-8、Latin-1)之间的桥梁(例如。• 补零规则确保奇数字符串能正确解析,避免数据截断。:内部自动分配和释放内存,无需手动管理。将输入的字符串视为十六进制编码数据,返回实际数据长度(不包括结尾的。的输入必须是有效的十六进制字符(,但针对 Qt 框架做了优化。:处理加密后的二进制结果(如。• 如果输入字符串长度为奇数,• 若输入长度为奇数,自动在。

CSUC的博客 1598

计算机组成原理——三种基本映射方式的比较

梳理 基本思想:分块 主存分块,一共有2^s块,编号从0开始 Cache分行,一共2^r行,编号从0开始 Cache每行的大小与主存每块的大小相同,大小为2^w个字 字是CPU每次访问存储器时可存取的最小单位 但Cache块数肯定是要小于主存块数的啦 这里要注意,主存的标记位为s位,而主存分块一共分了2^s块,每块的大小为2^w个字,而主存的块内地址有w位。聪明的呆呆同学想必已经发现了其中的联系。 全相联映射的工作原理 主存和cache均被分为固定大小的数据块,主存分块,Ca...

weixin_52595313的博客 7764

ENVI5.6 自动化流程:GF系列卫星影像批处理与质量优化

本文详细介绍了如何利用ENVI5.6构建针对GF-2、GF-6、GF-7系列卫星影像的自动化批处理流水线。通过配置Batch Processing工具,实现从正射校正到图像融合的全流程批量处理,并分享参数设置、质量监控与故障排查的实战经验,旨在显著提升海量遥感影像的处理效率与成果质量。

efc1234567的博客 604

车载与安防项目实战:如何用RK3588搭配NVP6158C实现4路AHD摄像头BT1120接入与同步预览

本文详细解析了基于RK3588处理器与NVP6158C解码芯片实现4路AHD摄像头BT1120接入与同步预览的技术方案。针对车载环视和安防监控场景,重点探讨了硬件架构设计、BT1120接口配置、多路同步机制及Android HAL适配等核心问题,提供了从底层驱动到上层应用的完整实现路径,为相关领域的工程实践提供可靠参考。

weixin_30571465的博客 486

计算机组成原理(3)三级存储 局部性原则 存储器性能指标 扩展 DRAM编址方式 cache 三种映射 替换策略

三级存储 RAM,随机存储 ROM,只读存储 ,MROM,PROM不可编程,可编程 EPROM,E^2PROM 紫外,电 擦除 三级存储内存,cache,外存 局部性原则 时间局部性:一条指令或数据,被执行后很可能会被再次访问 空间局部性:一条指令或数据,它附近得数据可能会被访问 所以,会将访问过得内容或访问过内容得整个块放入cache cache对程序员不可见 存储器性能指标 存储容...

qq_43430273的博客 2595

CDR插件开发之CPG插件004 - 认识VGCore并编译生成你的第一个CPG文件

上篇文章中,讲到了使用VS2019编译CDR类型库 VGCoreAuto.tlb,编译后得到了vgcoreauto.tlh和vgcoreauto.tli两个文件。本文将对这两个文件说明,并演示通过标准的libid形式来导入CDR类型库,在这个过程中,穿插一些VS2019的使用技巧(删除目录、复制工程、打开项目或解决方案、修改解决方案名称、修改项目名称等),使读者循序渐进,逐步提高对VS2019工具的熟练程度,最后通过修改项目属性配置,生成第一个CPG文件。

Zebe 2986

高速缓存器cache,三种关联方式——全相关联映射/直接关联映射/组关联映射

所以当CPU给出一个存储单元的地址之后,这个地址即为add1,取出add1的tag段,就是块号-第三位,放入比较器中和cache中的标记(5位,也是块号-3位)进行比较如果存在的话就找到了,在加上偏移地址就是cache中的地址,一共是s-r+偏移地址,因为不需要行号,本身cache中也没存,但是如果没匹配上,就需要加上行号r再去主存中找;由于在这种映射的方式下,每行放置的块号的后三位是确定的(都是一样的比如00000 000 和 00001 000)所以cache中的标记只需要存放5位即;

linjianshaonian_的博客 4667

Python教程:一文了解Python的深拷贝与浅拷贝

理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。

旦莫的博客 3968

吊打BEVFormer!GaussianBeV实战:用3D高斯开启BEV分割新范式

GaussianBeV是一种基于3D高斯建模的BEV分割新方法,在自动驾驶感知任务中实现了SOTA性能。其核心创新在于将场景元素表示为3D高斯分布,通过均值、协方差和权重精确描述物体位置、形状和置信度,相比传统BEV方法具有更强的空间建模能力。文章详细介绍了GaussianBeV的原理、环境配置、训练推理流程及其在自动驾驶和城市3D重建中的应用,并讨论了优化方向和未来发展趋势。该方法在nuScenes等数据集上表现出色,为BEV分割任务提供了新的解决方案。

m0_71589036的博客 106

Cache存储器和主存之间的的地址映射

为啥要用Cache存储器??? 因为CPU和主存之间存在读取速度的差异,所以要用Cache来充当主存和CPU之间的缓冲,注意Cache只是主存的子集Cache里的存储数据在主存中都可以找到,所以计算机的存储空间不包括cache 原理 因为程序的局部性原理,时间局部性和空间局部性 过程 CPU读取内存中的一个字时,便会发送这个字的内存地址到Cache和主存中,先看Cache中是否有,没有就去内存中找,内存把字发给CPU后,内存会把包含这个字的数据块发送给Cache(这时根据程序的局部性原理) 那CPU一次可以

qq_43728862的博客 4637

【Frida Android】实战篇8:客户端证书认证绕过 Hook 教程

通过重写类的方法,自定义证书校验逻辑;利用配置文件,从系统层面管理证书信任策略;以及通过 OkHttp 框架提供的方法,实现证书的强绑定校验。这些内容主要围绕客户端如何验证服务端证书的合法性展开。客户端证书认证。当 APK 预置了客户端证书,并且服务端会对客户端证书进行校验时,传统的中间人攻击方式将面临新的挑战。我们将深入分析这种场景的工作原理,并详细介绍如何通过技术手段获取客户端证书、配置中间人工具,最终成功实现抓包分析。

水滴石穿 1428

主存块和cache块关系_高速缓存Cache

程序局部性原理程序访问的局部性原理包括时间局部性和空间局部性。时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息。——程序中存在大量循环。空间局部性:在最近的未来要用到的信息,很可能与现在正在使用的信息存储在邻近空间。——指令通常是顺序存放、顺序执行的,数据一般也是以向量、数组等形式簇聚在一起存储。高速缓存技术就是利用程序的局部性访问原理,大大提高了程序的运行速度。程序局部...

weixin_31459571的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

高速缓冲存储器(Cache)

高速缓冲存储器(Cache) 相关知识介绍

ToFPGA的博客 2828

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

主存和cache每一块相等_内存管理——Cache(高速缓存)

对于大多数人来说Cache,是透明的、不存在的。其中一个原因是Cache是集成到CPU中,对于程序员来说是透明的。程序的执行过程,先将程序加载到主存(RAM),然后CPU从主存读取数据。已经有主存存在了,那么为什么还要存在Cache的必要呢?是为了解决什么问题?引入的原因:CPU通用寄存器的速度与主存之间存在这太大的差异。CPU的通用寄存器的速度一般小于1ns,主存的速度一般是65ns。速度差异近...

weixin_39625987的博客 1968

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

memory cache 直接映射、全相联映射和组相联映射

cpu的执行速度很快,cpu从memory读取数据速度很慢,导致cpu需要等memory,为了提高cpu的效率,根据程序的局部性原理(现在访问的数据很有可能以后还会访问),引入了读写比较快的memory cache,cache用来存放刚刚访问的memory的数据,这样下次再需要从memory读写数据时,可以直接从cache里面读,速度快了很多,提高了cpu的效率。 cache比memory速度快...

1449

cache

cache--提高CPU访存速度的有效方式之一 实现cache机制--分块与映射

lsj的博客 1537

高速缓冲存储器Cache的映射方式

为了解决容量,速度,价格之间的矛盾,把各种不同存储容量,不同存取速度,不同价格的存储器,按照一定的体系结构组织起来,使得所存放的程序和数据按照层次分布在各个存储器中,形成多层次的存储系统 程序的局部性原理:时间局部性和空间局部性...

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 1397

高速缓冲存储器cache

而直接相联映射查找成本低,但是命中率低。的任意块中,为了方便后续查找,主存数据块载入时还需要记录若干的标记标志信息。),每个数据库又包含若干个字,数据缺失时需要将数据所在的块从慢速主存调入。中固定的组,然后采用全相联的方式映射的方式映射到组内任何一个。访问主存的过程较为漫长,通常用主存访问时间表示。表示系统性能越好,表示命中访问时间,表示缺失访问时间,则。组相联映射就是直接映射和全相联映射两种方法的折中,全相联映射下,主存中每一个数据块都可以放置到**的地址空间,即把存放在主存中的程序或数据块载入。

qq_62379939的博客 1933
上一篇: VIM的宏操作
下一篇: 用VIM正则表达式进行批量替换的小练习
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值