2 路关联高速缓存寻址需要多少位?
How many bits are needed needed for 2 way associative cache addressing?
下面的问题让我很困惑,因为它与我见过的其他例子不相似。
对于 128 字节内存和 32 字节 2 路集关联写回,写分配数据高速缓存与 4 字节块和 LRU(最近最少使用)替换策略,显示块偏移的内存地址分解,设置索引和标记字段。每个字段需要多少位?
我想出了寻址总共需要 7 位。在这 7 位中,块偏移量需要 2 位,集合索引需要 2 位,标签需要 3 位。这是正确的吗?
首先让我们做一些数学运算:
- 您需要 7 位来寻址 128 字节的内存。
- 缓存有32个字节,每个块有4个字节。因此您的缓存可以容纳
32 bytes / 4 bytes_per_line
行,产生 8 行。由于缓存是 2 路组关联的,因此每个块都可以使用每个组的两条线中的任何一条。所以你有 4 组,每组 2 行。
因此:
- 您需要 2 位来寻址块内的给定偏移量
- 您需要 2 位来寻址给定的集合
- 剩下的 3 位用于标签
因此每个地址的编码是:
tag(3 bits) | set(2 bits) | offset(2 bits)
下面的问题让我很困惑,因为它与我见过的其他例子不相似。
对于 128 字节内存和 32 字节 2 路集关联写回,写分配数据高速缓存与 4 字节块和 LRU(最近最少使用)替换策略,显示块偏移的内存地址分解,设置索引和标记字段。每个字段需要多少位?
我想出了寻址总共需要 7 位。在这 7 位中,块偏移量需要 2 位,集合索引需要 2 位,标签需要 3 位。这是正确的吗?
首先让我们做一些数学运算:
- 您需要 7 位来寻址 128 字节的内存。
- 缓存有32个字节,每个块有4个字节。因此您的缓存可以容纳
32 bytes / 4 bytes_per_line
行,产生 8 行。由于缓存是 2 路组关联的,因此每个块都可以使用每个组的两条线中的任何一条。所以你有 4 组,每组 2 行。
因此:
- 您需要 2 位来寻址块内的给定偏移量
- 您需要 2 位来寻址给定的集合
- 剩下的 3 位用于标签
因此每个地址的编码是:
tag(3 bits) | set(2 bits) | offset(2 bits)