【问题标题】:Calculating number of bits in a cache计算缓存中的位数
【发布时间】:2014-05-25 20:54:36
【问题描述】:

前言:有许多不同的设计模式对缓存的整体性能很重要。下面是列出的参数 不同的直接映射缓存设计。

  • 缓存数据大小:32 kib
  • 缓存块大小:2 个字
  • 缓存访问时间:1 个周期

问题:计算上面列出的缓存所需的位数,假设地址为 32 位。给定总大小,找到 具有 16 字块的最近直接映射缓存的总大小 大小相等或更大。解释为什么第二个缓存,尽管它 更大的数据大小,可能会提供比第一个更慢的性能 缓存。

这是公式
缓存中的位数 2^n X(块大小 + 标记大小 + 有效字段大小)

这是我得到的65536(1+14X(32X2)..
这是正确的吗?

【问题讨论】:

    标签: caching computer-science cpu-architecture cpu-cache


    【解决方案1】:

    我认为您使用的公式是正确的。根据我的教科书《计算机组织与设计硬件,第 5 版》,直接映射缓存中的总位数为:

    2^indext bits * (block size + tag size + valid field size).
    
    • 块大小由问题给出:2 个字 = 32 位
    • 标签大小:32 - 位偏移 - 位索引
    • 有效字段大小通常为 1 个有效位

    【讨论】:

    • 该问题没有指定字长,但鉴于地址大小是 32 位,一个好的猜测是字长 = 32 位。 (所以指针是 1 个字,就像典型的 32 位 RISC)。比您假设的 16 位字长更可能。一个更好的问题是指定单词大小,而不是让回答者猜测。也许它是由 OP 遗漏的某些上下文所暗示的。
    【解决方案2】:

    我也遇到了同样的问题,但我有第一部分的答案。

    计算所需的总位数

    1. 您需要将 KB 转换为单词并获取索引位。
    2. 使用第 1 部分的答案来获取您的标签位。
    3. 将它们插入这个公式。

      (2^(index bits)) * ((tag bits)+(valid bits)+(data size))
      

    提示:本例中数据大小为 64 位,有效位为 1。所以只需找到索引位和标记位即可。

    而且我认为你的答案不正确。我没有检查,但我可以看到您将 1+14 和 (32x2) 相乘而不是相加。

    【讨论】:

      【解决方案3】:

      使用:(2^index bits) * (valid bits + tag bits + (data bits * 2^offset bits))

      我得到的第一个:

      total bits = 2^15 (1+14+(32*2^1)) = 2588672 bits
      

      对于我得到的 16 个字块的缓存:

      total bits = 2^13(1 +13+(32*2^4)) = 4308992
      

      16 字块和 32 位地址的下一个最小缓存为 2158592 位,小于第一个缓存。

      【讨论】:

      • 你是怎么在第一部分找到2^15 blocks的?由于缓存数据大小为32KiB,并且有2 words/block,所以32 * 2^10 bytes / 8 bytes的结果为2^12 blocks
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2018-09-26
      • 1970-01-01
      • 2018-05-01
      • 2012-06-26
      相关资源
      最近更新 更多