1 物理地址tag/set/block_offset说明:

1.1 以 2路组相连cache为例子介绍cache行和物理地址行的构成


上图是2路组相连的cache(引自https://www.sciencedirect.com/topics/computer-science/set-associative-cache)。
(直接映射cache也被称为单路cache的原因就是因为只有1路。)

1.1.1 cache的一行构成

tag data block flag bits
  • tag: 标签位用于比较在way1和way0两路中,哪一个cache块存了我们的目的数据(可以看到图中的两个等号的用硬件实现的比较器,就是用来比较way1 and way0中的两个tag的)
  • data block: 数据位用来存储(内存和cache交换的数据块)目标tag的数据块。
  • v: 有效位用来 表示该cache块是否有效。(复杂的cache设计可能有更多位)(比如当一开始cache里面一个数据块都没有为空的时候,所有的v标记都为0,然后当该数据块载入了,代表该块有效了,那么将其置为1即可。)

1.1.2 要去cache中找数据的内存地址

一个地址构成如下图: 左侧为MSB,右侧为LSB(lowest significant bits):

tag index block offset
  • block offset: 说的是对于内存地址来说,其后block offset个字节的数据会构成一个和cache做数据交换的块,故就是cache块的大小;
  • index: 说的是对于内存地址来说,其应该被映射到cache里的哪一组,故该部分的位数代表的是整个cache能hold住多少组,而组数目又由每个cache块大小和(4路组相连那路数就是4)“路数”有关的,其计算方式为:
    setNums=cacheWholeSize(numOfWays)∗(blockSize))setNums = \frac{cacheWholeSize}{(numOfWays) * (blockSize))} setNums=(numOfWays)∗(blockSize))cacheWholeSize​
    拿最开始的2路组相连来说,其中的MemoryAddress里的set我们看到了是2位,那么这个内存地址就可以根据set的两位去找到自己在cache中对应的组是哪一组,拿图中来说,当set的两位为10时,那么对应到第3组set2
  • tag: 用来在使用index选出cache位于哪一组后去比较具体的cache块位于哪一路。

2 结合实际例子

2.1 example1

一个四路相联cache,CPU字长为4字节,内存和cache都是以字节编址,cache和内存交换单位为块,每个块大小为512字节,cache能够容纳1024个块。如果物理内存为32位地址:

  • q1: 画出cache和内存的地址格式,标明块内偏移地址、组号和标签位置;
  • q2: 请计算内存地址FAB12389(16进制)在cache中可能的位置块号;

answer q1:
根据1.1.2的计算方式:
setNums=cacheWholeSize(numOfWays)∗(blockSize))=1024∗512Byte4∗512Byte=28setNums = \frac{cacheWholeSize}{(numOfWays) * (blockSize))} = \frac{1024*512 Byte}{4*512Byte} = 2^{8} setNums=(numOfWays)∗(blockSize))cacheWholeSize​=4∗512Byte1024∗512Byte​=28
故,最后的结果如下:

tag(32-8-9=17bit) index(8bit) block offset(9bit)

answer q2:
其内存地址分成4个Byte分别是:

FA(1111 1010) B1(1011 0001) 23(0010 0011) 89(1000 1001)

根据q1的结果,我们容易得出其tag,index和blockoffset对应的值分别如下:

tag(32-8-9=17bit) = (don't care) index(8bit)= 1001 0001(B) = 128+16+1=145(D) block offset(9bit) = 1 1000 1001(B)

则其位于第145组,那么由于块号从左上角从左到右从上到下块号递增,那么位于145组的那几块的块号就是答案:

145*4 + (0,1,2,3) = 580,581,582,583块

2.2 example2 [2]

An Example
A computer uses 32-bit byte addressing. The computer uses a 2-way associative cache with a capacity of 32KB. Each cache block contains 16 bytes. Calculate the number of bits in the TAG, SET, and OFFSET fields of a main memory address.

Answer
Since there are 16 bytes in a cache block, the OFFSET field must contain 4 bits (24 = 16). To determine the number of bits in the SET field, we need to determine the number of sets. Each set contains 2 cache blocks (2-way associative) so a set contains 32 bytes. There are 32KB bytes in the entire cache, so there are 32KB/32B = 1K sets. Thus the set field contains 10 bits (210 = 1K).

Finally, the TAG field contains the remaining 18 bits (32 - 4 - 10). Thus a main memory address is decomposed as shown below.

18 10 4
TAG SET OFFSET

3 ref:

  • [1] https://www.sciencedirect.com/topics/computer-science/set-associative-cache
  • [2] https://www.d.umn.edu/~gshute/arch/cache-addressing.xhtml
  • [3] https://en.wikipedia.org/wiki/CPU_cache

多路组相连cache(缓存)结构(multi-way set associate cache)相关推荐

  1. 存储器里面的一个采用直接映射方式的32KB缓存-一个四路组相连的缓存,容量为16KB

    1,一个采用直接映射方式的32KB缓存,假设块长为8个32位的字,且CPU访问缓存命中, 则主存地址为ABCDEFH的单元在缓存的第(H)块内. 转换: ABCDEF(16)=1010 1011 11 ...

  2. 4路组相连cache设计_Cache组织方式

    经过下面文章的介绍,我们已经知道cache的基本工作原理. smcdef:图说Cache - Cache的基本原理​zhuanlan.zhihu.com 但是,我们一直避开了一个关键问题.我们都知道c ...

  3. Cache的地址结构,tag到底与Cache什么关系,Cache容量与总容量,Cache行长,Cache字地址?

    目录.Cache映射的问题 一.Cache的三种映射 重点:那么我说 1.直接映射 2.全相联映射 3.组相联映射 4.总结三种映射 二.Cache的三个字眼(例题) 1.Cache字地址多少位(字地 ...

  4. 4路组相连cache设计_移动图形处理器的纹理Cache设计

    随着手机.PAD等移动设备进一步普及,对3D图形绘制的需求也越来越大.桌面GPU相较于移动GPU,其渲染流程简单直接.数据吞吐率高,进而带宽需求高,功耗大.文献[1]指出相比于集成电路按照摩尔定律的发 ...

  5. 4路组相连cache设计_浅谈 Cache

    1. Cache的历史 在科研领域,C. J. Conti等人于1968年在描述360/85和360/91系统性能差异时最早引入了高速缓存(cache)一词.Alan Jay Smith于1982年的 ...

  6. (计算机组成原理)第三章存储系统-第六节2:Cache和主存的映射方式(全相联映射、直接映射和组相连映射)

    文章目录 一:全相联映射 二:直接映射 三:组相连映射 前面说过,Cache中实际保存的是主存中的数据副本,所以这里会涉及一个很重要的问题:Cache和主存是如何映射的?所谓映射是指把主存地址空间映射 ...

  7. Cache之组相连映射

    简单说就是,组相连映射是直接映射和全相连映射的一种折中. 具体的执行策略是:将Cache进行分组,数量记为Q,每组有R个字块. 设i是Cache的组号,j是主存的块号,那么一个主存块怎么映射到组中呢? ...

  8. 浅析 vSAN 磁盘组架构和缓存盘的“消亡”

    一.vSAN 中的 DiskGroup 架构的问题与应对思路回顾 如何将分散在多个服务器中的本地盘资源整合成集群范围可用的"共享存储资源池",是超融合架构中的一项关键技术.在 vS ...

  9. .net System.Web.Caching.Cache缓存类使用详解(转载)

    转自:http://www.cnblogs.com/virusswb/articles/1681561.html net System.Web.Caching.Cache缓存类使用详解 System. ...

最新文章

  1. Flask abort
  2. 2013 QConf上海软件开发大会总结
  3. PHP 使用 OSS 批量删除图片
  4. b s php 生产管理,求一套简单稳定的 B/S 架构的设备监控管理系统解决方案
  5. Hyper-V 2016 系列教程45 System Center 2016 Data Protection Manager 可以备份什么
  6. 调试远程服务器上的代码时报错:调试设置中的Python路径无效
  7. 托管系统的mysql设计_PHP+MySQL托管中心管理系统的设计与实现
  8. plist java_帮助plist文件
  9. scrapy数据存储在mysql数据库的两种方式
  10. c语言编程汉诺塔问题,C语言解决汉诺塔问题
  11. uni-app开发微信公众号H5网页,用微信开发者工具调试公众号
  12. 机器学习实战(第1章)
  13. 期货在低位放量下跌的现象(期货高位放量上涨意味什么)
  14. 甲骨文最新改邮箱、改账户名、改密码教程
  15. mysql进行创建序列化
  16. 微信小程序基于腾讯云对象存储的图片上传
  17. 推荐一些不常见的搜索引擎
  18. 梯度下降法-优化算法-机器学习
  19. DP + 前缀和 - 牡牛和牝牛 - AcWing 1307
  20. python文本转女生语音

热门文章

  1. 【愚公系列】2023年05月 攻防世界-Web(inget)
  2. 【Diary】2023·July
  3. 用于业务的精炼js工具函数(浏览器环境)
  4. 京东苏宁战正酣 搭车营销莫等闲
  5. ISP和DSP的区别
  6. PTA 基础编程题目集 7-36 复数四则运算
  7. 加一(非空数组)(力扣)
  8. 我国量子态隐形传输获突破 超越时空或成真
  9. UDP是什么、及UDP和TCP的区别?
  10. python 判断多边形,点是否重合(方法简单易懂,没有使用 cv2.pointPolygonTest函数)