精华内容
下载资源
问答
  • 计算机系统结构课程使用logsim实现的cache,得到A、92分,注意logsim版本为logisim-evolution-google
  • 第6关:4路组相连cache设计.txt
  • 2路组相连cache例子 上图是2路组相连的cache,可以看到 物理地址tag/set/block_offset说明: Cache row entries usually have the following structure: tag data block flag bits An effective memory address ...

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

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

    2wayCache
    上图是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))}
      拿最开始的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))=1024512Byte4512Byte=28 setNums = \frac{cacheWholeSize}{(numOfWays) * (blockSize))} = \frac{1024*512 Byte}{4*512Byte} = 2^{8}
    故,最后的结果如下:

    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:

    展开全文
  • Cache组相连映射

    千次阅读 2016-08-28 17:08:07
    设i是Cache号,j是主存的块号,那么一个主存块怎么映射到中呢? i = j mod Q 根据这个计算式,应该明白,相邻的主存块映射在不同Cache组中。那么我们需要仔细研究一下这个时候的主存地址怎么分配。格局和直接...

    简单说就是,组相连映射是直接映射和全相连映射的一种折中。

    具体的执行策略是:将Cache进行分组,数量记为Q,每组有R个字块。
    设i是Cache的组号,j是主存的块号,那么一个主存块怎么映射到组中呢?

     i = j mod Q
    

    根据这个计算式,应该明白,相邻的主存块映射在不同Cache组中。

    那么我们需要仔细研究一下这个时候的主存地址怎么分配。

    格局和直接映射比较相似:分为高m位和低b位。
    高m位也分为两个部分:主存字块标记和组地址。
    我们知道,每组有R个字块,那么用r位标记,则有2r块。所以当Cache块有2c块时,组数R=2c2r=2(cr)

    所以组地址需要cr位。

    c是Cache块数需要的位数(2c),根据情景很容易计算得到。
    那么主存高位的标记就是t+r位了。

    这里的标记反而多于直接映射,因为在组内,需要按照全相连映射的方式,所以需要多r位进行标记。

    当r = 0时,就是直接映射,当 r = c时就是全相连映射。

    因此,一切都综合在组相连中。

    展开全文
  • cache组相连,页着色

    千次阅读 2012-11-25 20:54:05
    粗略的了解了下cache的结构: cache分为全相联,直接相连,组相连。重点讲讲组相连。 什么是cache行?cache是以行为单位进行存储的,如每...每次将内存的一个组存到cache中(这是由于局部性原理,最近访问的数据可能

    粗略的了解了下cache的结构:

    cache分为全相联,直接相连,组相连。重点讲讲组相连。

    什么是cache行?cache是以行为单位进行存储的,如每个cache行为连续的32B。当然,每个cache行前面还有一些标记信息用来判定cache存的是内存哪部分的信息,是否有效等。

    组相连是将cache分组,同时内存也分组。每次将内存的一个组存到cache中(这是由于局部性原理,最近访问的数据可能会被重复访问,他的邻居也极可能被访问,那把他们都放入cache最有效了)。具体如下:

    设cache是n路组相连,将每n个连续的cache行编为一组(同时内存中也分成相同大小的组),假设分成了m个组。内存也分成n*(每cache行大小的组)的组,假设分成了p个组。用p%m来进行cache组和内存组之间的对应。对应好后,组的内部的cache行与内存行之间用全相连。


    页着色的问题:

    上文说了,cache行前是有信息来用于判定存的是内存的哪部分的,比如tags信息。tags存的是当前cache行映射的内存的部分物理地址。

    为了加快判断cache是否命中,cpu一般会分两步走:1,使用tlb将线性地址转化为物理地址;2,等不及1步完成以便用物理地址来判断cache是否命中,先使用线性地址来进行cache是否命中的初步处理;到2步后期使用1步物理地址来确定是否命中。

    假设内存4K一页,cache 32B一行,64KB,32位系统,4路组相连。

    下面主要讲第二步:

    本来,我们使用物理地址来找cache的,现在为了加快速度,我们使用线性地址来找对应的cache,这样更快,但是也会有相应的问题。。。

    4k页的话,线性地址和物理地址的低12位(0~11)为页内偏移地址,他们是相等的无需映射。

    32B的cache行的话,需要线性地址的5位(0~4)的cache行内偏移地址。

    由于是64K的cache,cache行32B,4路组相连,故需64K/32*4共2^9个组。需9位来区分是那个cache组。需5~13,共9位线性地址。

    这样就可以选定那个cache组,这时候tlb算物理地址也完成了,用物理地址&tags来判定选中的是组内的那个cache行。因为一个组只有4行,故最多只需判断4次,节约了时间。

    那这里就出现了个问题,12~13这两位是线性地址,且与物理地址不一样(本来找cache是用物理地址的)。这样就会产生这种情况,本来要找的数据存在cache的a地址,但是线性地址的12~13位不可靠,不是物理地址,这样会有2个问题:

    1,命中错误的cache行(设为地址b),误以为要找的数据没有在cache中,这样就会就数据在放到b中来。这样就会有同一数据在cache中的多个备份。(cache别名问题)

    2,命中了错误的cache行,误以为那是正确的数据,导致数据错误。(当然后面会用1步算好的物理地址在去匹配一下,故这个错误不太可能发生)

    故需页着色,4路组相连中,线性地址的12~13位必须和物理地址的12~13位相等——这可能需要在MMU等方面下足功夫才能保证。(嘿嘿,页着色解决的是cache别名的问题,但是解决方法和cache没有半毛钱关系)

    同时也可以使内存分成16K来克服上述问题。还有一起其他的方法也可以解决页着色的问题。


    展开全文
  • 实验四:汉字字库存储芯片扩展实验 实验五:寄存器文件设计 实验六:MIPS RAM设计 实验七:4路组相连cache设计

    实验四:汉字字库存储芯片扩展实验

    实验五:寄存器文件设计

    实验六:MIPS RAM设计

    实验七:4路组相连cache设计

     

     

    展开全文
  •  Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射。在信息按这种映射关系装入...
  • Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射。在信息按这种映射关系装入...
  • Cache直接映射、组相连映射以及全相连映射

    千次阅读 多人点赞 2018-03-07 11:01:00
    主存和Cache都分组,主存中一个组内的块数与Cache中的分组数相同,间采用直接映射,内采用全相联映射。也就是说,将Cache分成u,每v块,主存块存放到哪个是固定的,至于存到该哪一块则是灵活的。例如,...
  • 2 3 高速缓冲存储器(Cache) 内存地址格式 全相联 直接相联 组相连
  • cache地址映射,全相连、直接、相联

    千次阅读 多人点赞 2020-03-25 12:52:12
    高速缓存存储器的地址映射 信息在主存和Cache中,确定它们的对应关系就需要借助地址映射。 地址映射的定义: 主存地址按某种规律(函数)映射到cache中。 当cpu访问存储器时,它发出...相联方式 几概念 ...
  • 6、Cache-主存映射方式思维导图 思维导图
  • 2.3 高速缓冲存储器(Cache) 2.3.1 高速缓冲存储器的功能、结构与工作原理 高速缓冲存储器是存在于主存与CPU之间的级存储器, 由静态存储...为此需要解决2技术问题:是主存地址与缓存地址的映象及转换; 二是按
  • 两路相联cache

    千次阅读 2020-08-22 11:42:54
    //cache共32块,分为16,每2块,即两路相联,1块=4字,1字=4字节 //主存共1024块,4096字 //主存地址共12位,[1:0]为块内偏移,[5:2]为地址,[11:6]为Tag //V、D、Tag、Data=1+1+6+128=136 module cache...
  • 主存到Cache直接映射、全相联映射和相联映射

    万次阅读 多人点赞 2016-11-29 14:30:46
    ---- Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块(cache line)为单位的。为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射。---- 在...
  • cache

    2021-04-06 21:25:32
    体系结构知识 多路组相连: 将cache划分成n相等的部分,这样每路的相同地址有1/n的概率不会被替换。 cache flush知识
  • 某计算机的Cache共有16块,采用2路-相联映射方式(即每包括2块)。...1.相联映射方式下,主存块按模Q(Q为Cache组数)映射到Cache对应中的任块; Cache共有16块,采用2路相联映射,故C...
  • Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射。在信息按这种映射关系装入...
  • cpu组相连映射

    2016-06-28 09:23:00
     相联映射方式 是全相联映射方式和直接相联映射方式的结合,结合两者的优点 · 方法:把Cache分为若干,每含有若干行。 间直接映射,内全相联映射。 (图7) · 映射过程:(见图8) ① 存入Cache:...
  • Cache

    千次阅读 2015-07-05 17:16:02
    Cache
  • 动手实现一个 LRU cache

    2018-04-16 16:26:00
    http://ifeve.com/%E5%8A%A8%E6%89%8B%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA-lru-cache/ 转载于:https://www.cnblogs.com/gotodsp/p/8856554.html
  • 【计原理学习笔记】Cache的映射

    千次阅读 2020-03-09 23:14:19
    目录 一、直接映射 直接映射工作图 地址构成 ...直接映射中Cache地址和...定义:主存中任一给定的块,只能映射/装载到某一个指定的Cache块中 构成:根据cache存储体和主存储体的大小,将主存划分为若干个与cache...
  • 1,一个采用直接映射方式的32KB缓存,假设块长为8个32位的字,且CPU访问缓存命中, 则主存地址为ABCDEFH的单元在缓存的第(H)块内。 转换: ABCDEF(16)=1010 1011 1100 1101 1110 1111(2) 求出字块位数: 8...
  • 关于组相连命中率问题

    千次阅读 2010-11-19 22:44:00
    因为文件分成132页,且cache开始为空,第次往cache中调入页面时,只能调进128,因为cache只能装128页面(物理块),那么还有132-128=4页面没有装进去。按照LRU算法只能将cache的其中4页换出,即132页,...
  • 为什么用cache2.cache的工作原理主存与缓存的编址命中与未命中cache的命中率cache-主存系统的效率3.cache的读写操作读操作写操作4.cache的改进增加cache级数统一缓存和分立缓存二、cache-主存存储映射(重点)1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,522
精华内容 4,608
关键字:

一个组相连cache