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

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的一行构成

tagdata blockflag 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):

tagindexblock offset
  • block offset: 说的是对于内存地址来说,其后block offset个字节的数据会构成一个和cache做数据交换的块,故就是cache块的大小;
  • index: 说的是对于内存地址来说,其应该被映射到cache里的哪一组,故该部分的位数代表的是整个cache能hold住多少组,而组数目又由每个cache块大小和(4路组相连那路数就是4)“路数”有关的,其计算方式为:
    s e t N u m s = c a c h e W h o l e S i z e ( n u m O f W a y s ) ∗ ( b l o c k S i z e ) ) 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的计算方式:
s e t N u m s = c a c h e W h o l e S i z e ( n u m O f W a y s ) ∗ ( b l o c k S i z e ) ) = 1024 ∗ 512 B y t e 4 ∗ 512 B y t e = 2 8 setNums = \frac{cacheWholeSize}{(numOfWays) * (blockSize))} = \frac{1024*512 Byte}{4*512Byte} = 2^{8} setNums=(numOfWays)(blockSize))cacheWholeSize=4512Byte1024512Byte=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.

18104
TAGSETOFFSET

3 ref:

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值