我正在努力解决这个问题,我环顾四周,但所有类似的问题都比我的更高级,利用日志,它比我们在课堂上所做的更高级。问题是这样的:
假设您有一个 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
位长。
虽然我对此不太确定。有没有人有办法解决这个问题?
如果内存是字节可寻址的
这个说法只是告诉我们主存储器是字节可寻址的,即无论数据和地址总线的宽度如何,都可以一次访问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 ║
╚════════╧════════╧════════╝
缓存容量为 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 位将分配给标签。