精华内容
下载资源
问答
  • 三种cache映射方式简单讲解

    千次阅读 2020-06-28 18:33:33
    通过一定的方式将cache映射到内存,这可以看作是硬件的“哈希”,今天主要介绍三种映射方式,分析其原理,以及miss率等等 直接映射 直接映射简单粗暴,每一个内存块都对应到一个cache行,而且映射的方式也很粗暴。...

    前言

    关于cache【cache高速缓存 简单讲解与验证

    上次讲到cache的基本原理,并且做了一个简单的实验来验证cache对存取效率的提升,今天来复习一下三种cache的存取方式

    通过一定的方式将cache映射到内存,这可以看作是硬件的“哈希”,今天主要介绍三种映射方式,分析其原理,以及miss率等等

    直接映射

    直接映射简单粗暴,每一个内存块都对应到一个cache行,而且映射的方式也很粗暴。下面通过一张图片了解一下
    在这里插入图片描述
    假设有4个cache行,每行16字节,那么主存中

    0-15字节被映射到cache行1
    16-31字节被映射到cache行2
    32-47字节被映射到cache行3
    48-63字节被映射到cache行4

    64-79字节被映射到cache行1 这里循环往复,以4个16字节为循环长度,上图中不同颜色的连线表示了这种循环映射

    我们对内存中的地址,直接模除64(4*16=64),看结果,如果模除结果是在0-15,那么cache行1,请!,其他的同理

    示例
    假设每次访问的都是映射到同一行的内存块,那么会不断的miss,因为就一块cache,大家一起用,互相覆盖,造成miss率高
    在这里插入图片描述

    优点是电路搭建简单,成本低。缺点是miss率很高

    全连接映射

    全连接映射顾名思义,谁都能映射。任意内存块,可以被映射到任意cache行。可以将cache看作一个list,只要list未满,就载入最前的一个空cache行,直到cache满,然后淘汰掉旧行,载入新行。
    在这里插入图片描述

    示例:
    在这里插入图片描述

    全连接映射hit率很高,因为大家公用所有cache,而不是像直接映射一样大家共用一个cache行。缺点是硬件实现很复杂,成本非常高(有n个cache行,就要有n个地址的比较电路来判断地址是否在行内)

    组映射

    组映射将cache分组,一个cache组包含多个cache行,而内存块以直接映射的形式,先映射到对应的组上,然后再以全连接映射的方式,再组内寻找对应到的cache行。

    在这里插入图片描述

    示例:
    如下示例中,两次访问映射到同一cache组的地址,如果是直接映射,那么会被覆盖,而组内采用全连接映射,则避免了覆盖的情况。
    在这里插入图片描述

    优缺点:综合了上述两种映射,暨能做到组间直接映射,又能做到组内全连接映射,在成本和效率上有所折中,是折中的平衡方案。

    展开全文
  • 在此,主要讨论cache和内存之间的映射关系,参考《大话处理器》5.2.3节 cache映射方式,学习总结如下。 1 直接映射 特点:主存中的一个块只能映射到Cache的某一特定块中去 好处:随便给一个地址,就知道其在哪个...

    在计算机存储结构中,存在 一个存储容量金字塔,靠近塔顶的延迟小/造价高/容量小,靠近塔底的相对延迟大/造价低/容量大,任意两级之间都存在一个映射关系。
    在这里插入图片描述

    在此,主要讨论cache和内存之间的映射关系,参考《大话处理器》5.2.3节 cache映射方式,学习总结如下。

    1 直接映射

    特点:主存中的一个块只能映射到Cache的某一特定块中去
    好处:随便给一个地址,就知道其在哪个cacheline中
    坏处:容易被踢,miss率高。如0x100先占据cacheline0,0x200来的时候就需要把0x100踢掉。
    相当于是 set num = 1的 组相连映射方式
    在这里插入图片描述

    2 全相联映射

    特点:主存中任何一块都可以映射到Cache中的任何一块位置
    好处:效率高,miss率低
    坏处:查找麻烦,需要遍历整个cache
    在这里插入图片描述

    3 组相关

    特点:组间直接映射,组内全相联。现代处理中的Cache一般都采用组相关(set- associative)
    好处:比 全相联 查找方便,比直接映射 miss率低
    下图三和图四是一个set num = 2;way num = 4的组相关映射示意图,两者区别是,图三在映射时,memory的连续地址映射到同一个set;而图四是memory的地址交错地映射到同一个set。
    如果采用图三的映射方式,会导致一个地址的tag bit位有两部分:bit[64:10] 和bit[8:6],故一般都采用图四的映射方式。
    对于图四的映射方式,给定一个cache容量 = way num * set num * 1个cacheline的byte数,根据set num就可以得到set的index 地址bit。比如cache容量为2M,way num = 16,cacheline大小为64byte,则set num = 2048 = 2^11,所以set index = A[16:6]。
    给定一个cache容量,Way num和set num是一个需要平衡的关系,way num太小容易被踢,而way太大 查找比对tag的逻辑就比较复杂(时序收敛问题),且set num太小也会造成miss率提高。现代处理器的way num一般为4 /8 /16/ 32等,一般不会超过32。 Way num 一般都是2的n次方,但也有非2的n次方的,很少见罢了。
    图三
    图三 组相关映射示意图(一)

    在这里插入图片描述

    图四 组相关映射示意图(二)
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • cache映射方式

    千次阅读 2012-10-22 11:13:45
    Cache与主存之间的全相联映射,直接映射和组相联映射的区别 1.高速缓冲存储器的功能、结构与工作原理  高速缓冲存储器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得...

     Cache与主存之间的全相联映射,直接映射和组相联映射的区别

    1.高速缓冲存储器的功能、结构与工作原理

      高速缓冲存储器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据。目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题:一是主存地址与缓存地址的映象及转换;二是按一定原则对Cache的内容进行替换。

    Cache的结构和工作原理如图2.3.1所示。 

    主要由三大部分组成:

    Cache存储体:存放由主存调入的指令与数据块。

      地址转换部件:建立目录表以实现主存地址到缓存地址的转换。

      替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。

     

     

    2.地址映象与转换

      地址映象是指某一数据在内存中的地址与在缓冲中的地址,两者之间的对应关系。下面介绍三种地址映象的方式。

    1.全相联方式

      地址映象规则:主存的任意一块可以映象到Cache中的任意一块

    (1) 主存与缓存分成相同大小的数据块。

    (2) 主存的某一数据块可以装入缓存的任意一块空间中。

      全相联方式的对应关系如图2.3.2所示。如果Cache的块数为Cb,主存的块数为Mb,则映象关系共有Cb×Mb种。

     

    2.3.3示出了目录表的格式及地址变换规则。目录表存放在相关(联)存储器中,其中包括三部分:数据块在主存的块地址、存入缓存后的块地址、及有效位(也称装入位)。由于是全相联方式,因此,目录表的容量应当与缓存的块数相同。

    举例:某机主存容量为1MCache的容量为32KB每块的大小为16个字(或字节)。划出主、缓存的地址格式、目录表格式及其容量。

    优点:命中率比较高,Cache存储空间利用率高。

    缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。

    2.直接相联方式

      地址映象规则:主存储器中一块只能映象到Cache的一个特定的块中。

    (1) 主存与缓存分成相同大小的数据块。

    (2) 主存容量应是缓存容量的整数倍,将主存空间按缓存的容量分成区,主存中每一区的块数与缓存的总块数相等。

    (3) 主存中某区的一块存入缓存时只能存入缓存中块号相同的位置。

      图2.3.4示出了直接相联映象规则。可见,主存中各区内相同块号的数据块都可以分别调入缓存中块号相同的地址中,但同时只能有一个区的块存入缓存。由于主、缓存块号相同,因此,目录登记时,只记录调入块的区号即可。

     

     图2.3.5示出了主、缓冲地址格式、目录表的格式及地址变换规则。主、缓存块号及块内地址两个字段完全相同。目录表存放在高速小容量存储器中,其中包括二部分:数据块在主存的区号和有效位。目录表的容量与缓存的块数相同。

     

    地址变换过程:用主存地址中的块号B去访问目录存储器,把读出来的区号与主存地址中的区号E进行比较,比较结果相等,有效位为1,则Cache命中,可以直接用块号及块内地址组成的缓冲地址到缓存中取数;比较结果不相等,有效位为1可以进行替换,如果有效位为0,可以直接调入所需块。

    优点:地址映象方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。

    缺点:替换操作频繁,命中率比较低。

      举例:上例中,主存容量为1M Cache的容量为32KB,每块的大小为16个字(或字节)。划出主、缓存的地址格式、目录表格式及其容量。

     

      容量:与缓冲块数量相同即2112048(或32K/162048)。

     

    3.组相联映象方式

      组相联的映象规则:

    (1) 主存和Cache按同样大小划分成块。

    (2) 主存和Cache按同样大小划分成组。

    (3) 主存容量是缓存容量的整数倍,将主存空间按缓冲区的大小分成区,主存中每一区的组数与缓存的组数相同。

    (4) 当主存的数据调入缓存时,主存与缓存的组号应相等,也就是各区中的某一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放,即从主存的组到Cache的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。

      图2.3.6示出了组相联的映象关系,图中缓存共分Cg个组,每组包含有Gb块;主存是缓存的Me倍,所以共分有Me个区,每个区有Cg组,每组有Gb块。那么,主存地址格式中应包含4个字段:区号、区内组号、组内块号和块内地址缓存中包含3个字段:组号、组内块号、块内地址。主存地址与缓存地址的转换有两部分,组地址是按直接映象方式,按地址进行访问,而块地址是采用全相联方式,按内容访问。组相联的地址转换部件也是采用相关存储器实现,见图2.3.7

      相关存储器中每个单元包含有:主存地址中的区号E与组内块号B,两者结合在一起,其对应的字段是缓存块地址b。相关存储器的容量,应与缓存的块数相同。当进行数据访问时,先根据组号,在目录表中找到该组所包含的各块的目录,然后将被访数据的主存区号与组内块号,与本组内各块的目录同时进行比较。如果比较相等,而且有效位为1则命中。

     

      

     

     

    可将其对应的缓存块地址b送到缓存地址寄存器的块地址字段,与组号及块内地址组装即形成缓存地址。如果比较不相等,说明没命中,所访问的数据块尚没有进入缓存,则进行组内替换;如果有效位为0,则说明缓存的该块尚未利用,或是原来数据作废,可重新调入新块。

      优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。

      缺点:实现难度和造价要比直接映象方式高。

     

     

     

     

    展开全文
  • 基本介绍为了平衡高速的CPU与较慢的主存之间的差异,我们引入到了cache作为中间媒介,cache的主要作用说来可以理解...这篇博客的主要任务是探讨Main memory到cache的多种映射机制,并讨论其优势与劣势,知道后期的使用

    基本介绍

    为了平衡高速的CPU与较慢的主存之间的差异,我们引入到了cache作为中间媒介,cache的主要作用说来可以理解成将主存中很有可能被CPU使用的小部分数据调入cache中,由于cache是很快的,则可以对系统的系统有较大提升。相关详细情况可以参见计算机组成原理–cache概念及其作用

    这篇博客的主要任务是探讨Main memory到cache的多种映射机制,并讨论其优势与劣势,知道后期的使用。

    目前已经投入使用的映射机制主要有以下三种:

    • 直接映射(Direct Mapping)
    • 全局关联映射(Fully Associative Mapping)
    • 组关联映射(Set Associate Mapping)

    以下将对三种分别进行介绍。

    直接映射(Direct Mapping)

    直接映射的直观表示图为:

    这里写图片描述

    关于其设计实现是基于模数计算得到的。我们知道,cache的每一行与主存的一个块是相互对应的。

    我们有如下公式:

    i = j mod m

    其中j是主存块的编号,m是cache的行数,而i是主存中块映射到cache中的行编号。

    接下来我们看一看直接映射的地址结构,如图所示:

    这里写图片描述

    其将24位的地址分为字地址,行数和标签。其中字数是由主存中块所包含的大小决定的(如此处word为2,假设每个地址空间有一个字节的数据,则一个块有四个字节)。

    行数是根据实际条件进行确定的,将在之后的练习中具体说明。

    而Tag的位数,则是有减法计算得到的。

    我们可以很直观地看到,使用直接映射的方式实现起来相对而言较为方便,但是其劣势也是很大的一个问题,也就是thrashing(抖动)。 如图所示:

    这里写图片描述

    由于00001与01001的word位相同,因此其将被映射到cache的同一行,调用完成00001后,不命中,CPU去主存中取01001的块,然后10001也不命中,再去主存中取。则会大大浪费时间,因为不命中的时间消耗等于cache访问的消耗加上主存访问的消耗。

    这也就是我们所说的抖动的现象。

    全局关联映射(Fully Associate Mapping)

    上面讲到的直接映射机制有着容易发生抖动致使CPU效率降低的现象,那么产生这种问题的根本原因是什么呢?不难发现,是我们将映射规则定义得太死板了,也就是存在主存和高速缓存之间的一一映射关系。

    为了解决抖动的这一问题,我们引入了全局关联映射(Fully Associate Mapping)。其核心思想就是对于每一个块都可以放入任何一个cache中的行。

    直观表示为:

    这里写图片描述

    当cache还有空行时,对应的块直接填入其中的任意一个。当cache被填满时,则使用后面博客中会提到的替换算法来进行选择性填入。

    全局关联映射的地址结构为:

    这里写图片描述

    我们可以看到tag位有22bit之多,因此实现起来的并行比较电路较为复杂,计算量较大,影响性能,同时这种复杂性就自然造成了成本的提升。

    组关联映射(Set Associate Mapping)

    直接映射的实现结构简单但是映射机制不够灵活,全局关联映射的映射机制灵活但是实现结构相对复杂。

    那么我们能不能对两者进行折中呢?自然可以。这也便引出了组关联映射(Set Associate Mapping)的概念。

    其是将多个块归类为一个组,同时将cache中的多行也化归为一组。主存中的组与cache中的组是对应的,也是采用的直接映射中模数的方式,只不过其模的m为cache中组的数量。

    此外,主存中的数据导入到cache中仍然是采用块的方式,而且其导入的块可以放在对应组的任何一行,其思想来源便是全局关联映射。

    组关联映射的直观表示为:

    这里写图片描述

    对应的,组关联映射的地址结构为:

    这里写图片描述

    其得到的方式与直接映射以及全局关联映射基本相同,此处便不再进行赘述。

    实践证明,组的线数在2–8是在trade-off之下性能的最好状态。

    总结

    本文章讨论了主存到cache映射的三种机制。从直接映射,到全局关联映射,再到两者的折中,组关联映射。从宏观上对其进行了分析,对其思想进行了清晰的阐述。

    特别感谢西安交通大学李晨老师为我们教授的计算机组成原理这门课,生动幽默,深入浅出。文中所有使用的图片均来自于李晨老师的课件,所有权归属于李晨老师。

    展开全文
  • 最近辅导了一位学生的专业课,恰巧问了我有关计算机组成原理的Cache位数问题,我搜集了一下相关资料,觉得还蛮经典的这个问题,分享一下 ...2.Cache和主存的映射方式 3.例题 4.练习与讲解 ...
  • 主存到Cache直接映射、全相联映射和组相联映射

    万次阅读 多人点赞 2016-11-29 14:30:46
    为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射。---- 在信息按这种映射关系装入Cache后,CPU执行程序时,会将程序中的主存地址变换成Cache地址,这个变换过程叫做地址变换。...
  • Cache地址映射

    万次阅读 多人点赞 2018-09-01 15:17:35
    理解Cache地址映射之前补充一些基础知识,Cache的地址映射和MMU(内存管理单元)和TLB Cache(转译查找缓存)中的映射是有区别的。Cache、TLB Cache、MMU在CPU中结构如图1所示,图1展现的是Cortex A9 Processor内部...
  • Cache 地址映射

    千次阅读 2014-03-24 19:56:05
    Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中,必须应用...Cache的地址映射方式有直接映射、全相联映射和组相联映射。假设某台计算机主存容
  • cache地址映射

    2017-11-26 10:45:48
    所谓映射就是将主存内容对应到cache中。 前因  cache引入就是缓解cpu和主存运行速度差距的。cpu要运行的内容如果在cache中存在,则直接送给cpu,如果不在,则去主存中寻找,主存直接传给cpu,再根据局部性...
  • cache主存映射一、三种映射方式1. 全相联映射2. 直接映射3. 组相联映射二、cache容量计算1. 先计算cache行标记项位数2. 再计算cache块位数3. 最后计算cache总容量三、cache写策略1. 写命中:(1)全写法 Write ...
  • Cache之直接映射

    万次阅读 多人点赞 2016-08-28 16:18:07
    Cache之直接映射@(组成原理)直接映射的再次理解: 首先,理清楚这种映射下的主存物理地址位数的分配。核心目的:加快主存和CPU之间的交换,目的在快。区别于虚拟地址的目的是扩大容量以及逻辑上容易编写程序等。...
  • cache直接映射

    2019-12-27 23:48:36
    为了方便理解,假设cache只有8行,主存只有32块
  • 说明:  这篇文章挺好,转载一下,防止迷路。 转载: ... ... Cache的容量很小,它保存的内容...为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射。在信息按这种映射关系装入Cache...
  • Cache-地址映射

    2020-07-26 10:59:30
    Cache-地址映射 1.Cache的基本工作原理 2.地址映射 3.三种映射方式对比 4.总结
  • Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中,必须...Cache的地址映射方式有直接映射、全相联映射和组相联映射。假设某台计算机主存容量...
  • cache和主存的映射方式直接映射全相联映射组相联映射 直接映射 cache块号=主存的块号 mod Cache的总块号 标记 cache行号 块内地址 根据主存块号的后三位确定所属块号,将对应cache行的标记和主存地址的高t位...
  • Cache —— Cache和主存的映射方式

    千次阅读 多人点赞 2019-07-26 22:16:16
    地址映射:地址映射是一种规则,它指明了把主存地址空间映射Cache地址空间所用的规则,即把存放在主存中的程序按照某种规则装入Cache。由于Cache的块数比主存块数少得多,因此需要加入 主存字块标记 和 字块内地址...
  • cpu的执行速度很快,cpu从memory读取数据速度很慢,导致cpu需要等memory,为了提高cpu的效率,根据程序的局部性原理(现在访问的数据很有可能以后还会访问),引入了读写比较快的memory cachecache用来存放刚刚访问...
  • cache三种映射方式

    2021-04-17 21:47:38
    主存与cache的地址映射方式有全相联方式、直接方式和组相联方式三种。 直接映射(directmapping) 将一个主存块存储到唯一的一个Cache行。 全相联映射(fullyassociative mapping) 可以将一个主存块存储到任意一个...
  • Cache之组相连映射

    千次阅读 2016-08-28 17:08:07
    简单说就是,组相连映射是直接映射...根据这个计算式,应该明白,相邻的主存块映射在不同Cache组中。那么我们需要仔细研究一下这个时候的主存地址怎么分配。格局和直接映射比较相似:分为高m位和低b位。 高m位也分为
  • 浅谈cache的直接映射、全相联映射和组相联映射

    千次阅读 多人点赞 2019-06-24 11:27:34
    对于cache的几种映射方式进行一个小总结,方便以后自己不会了来看看 以下用图书馆坐座位的例子来说一说直接映射、全相联映射和组相联映射。 对于直接映射,每个块在cache中只能有一个位置,非常局限,就好像图书馆里...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 187,076
精华内容 74,830
关键字:

cache映射