每行缓存位和总长度

时间:2014-10-25 05:56:21

标签: caching computer-architecture cpu-cache lru

如果我有

  

32位地址

  

缓存大小(c)8 KB

  

块大小(b)16 B

  

设置关联性(a)1

直接映射缓存 缓存中每行的位数是多少?包括脏位和有效位。 缓存中的行总数是多少?

通过在互联网上搜索获得的一些想法是

offset bits = log b = 4 bits
index bits = log c/b * 1024 = 9 bits
tag bits = 32 - offset - index = 19 bits
validity and dirty would have 1, 1 bit

仍然困惑我将如何计算缓存大小或此缓存将包含多少行?

1 个答案:

答案 0 :(得分:3)

您的互联网搜索为您提供了正确的答案。

  • 16字节的块大小 - >需要4位来指定块内的偏移量。
  • 8K字节高速缓存和16字节行 - > 512块。 (8K / 16 = 512)
  • 直接映射缓存 - > 512/1路集关联性= 512集
  • 512套 - >需要9位索引(512 = 2 ^ 9)

对于32位地址,如果4位用于块偏移,9则用于索引,这意味着标记需要剩余的19位。

由于这是直接映射高速缓存,因此替换策略(例如LRU)不需要任何位。你的有效性至少需要一位。使用2位,您可以实现像MESI这样的缓存一致性算法。因此每个块需要20到21位。