设置关联缓存:计算标签大小?

问题描述 投票:0回答:2

我正在努力解决这个问题,我环顾四周,但所有类似的问题都比我的更高级,利用日志,它比我们在课堂上所做的更高级。问题是这样的:

假设您有一个 4 路组关联缓存,总共有 4096 字节高速缓存,每个高速缓存行 128 字节。多少 套子里有这个缓存吗?如果内存是字节可寻址的并且地址 是 16 位,那么标签使用了多少字节?

这是我到目前为止所拥有的:

4096/128 = num lines

4096/128/4 = 8 = num sets
(每组为4路组关联的4行)

所以,需要3位来选择集合

(2^3=8)

我们还剩下

16-3 = 13 bits
用于标签和单词。

因为问题说内存是字节可寻址的,所以我认为这意味着该字是 8 位(= 1 字节)长,因此标签是

16-3-8 = 5
位长。

虽然我对此不太确定。有没有人有办法解决这个问题?

caching cpu-cache
2个回答
14
投票

如果内存是字节可寻址的

这个说法只是告诉我们主存储器是字节可寻址的,即无论数据和地址总线的宽度如何,都可以一次访问8位数据的架构。

这不会影响标签的位数。

解决方案:

4 路组关联

总缓存 = 4096 字节

块大小(缓存行)= 128 字节

缓存行数 = 4096 / 128 = 32 行

缓存中的组数 = 32 / 4 = 8 组

╔════════════════════════════╗
║       16 bit address            ║
╠══════════╤════════╤════════╣
║ tag bit?   │ 3 bits  │ 7 bits   ║
╚══════════╧════════╧════════╝
        

设置索引大小 = log28 = 3 位

字节偏移大小 = log2128 = 7 位

答案:

标签大小 = 16 - ( 3 + 7 ) = 6 位

╔══════════════════════════╗
║      16 bit address           ║
╠════════╤════════╤════════╣
║ 6 bits  │ 3 bits   │ 7 bits  ║
╚════════╧════════╧════════╝

0
投票
  • 缓存容量为 4096 字节意味着 (2^12) 字节 .

  • 缓存中的每个块/行包含(2^7)字节

-因此缓存中的行或块数为:(2^12)/(2^7)=2^5缓存中的块或行数

  • 由于它是4路集合关联,每个集合包含4个块,所以缓存中的集合数量为: 有 (2^5)/2^2 = 2^3 组。所以从这些我们知道需要 3 位来寻址设置偏移量。

  • 由于它是字节可寻址的,为了寻址字节偏移量,我们需要 7 位,因为每个块中有 128(2^7) 个字节。

  • 剩余 6 位将分配给标签。

© www.soinside.com 2019 - 2024. All rights reserved.