caching - 每行缓存位数和总长度

标签 caching cpu-architecture cpu-cache lru

如果我有一个

32bit address

cache size(c) 8 KB

Block Size(b) 16 B

Set Associativity(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

仍然对如何计算缓存大小或该缓存有多少行感到困惑?

最佳答案

您的互联网搜索给了您正确的答案。

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

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

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

关于caching - 每行缓存位数和总长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559721/

相关文章:

x86 - 什么特别地将 x86 缓存行标记为脏 - 任何写入,还是需要显式更改?

c++ - 多线程效率不高 : Debugging False Sharing?

java - @Cacheable 不拦截方法,缓存永远为空

spring - 使用 Spring/MyBatis 理解 EhCache

binary - 为什么二进制用八位字节表示?

architecture - 关于i7的分支预测

javascript - 如何使用 PhoneGap/Cordova 在本地缓存图像文件?

asp.net - 浏览器的缓存是否考虑了 URL 中的参数? (ASPX 页面)

c - 检测 objective-c PU 上的对齐内存要求

java - 确定纯 Java 中处理器缓存的大小