Caching 计算缓存中的位数

Caching 计算缓存中的位数,caching,computer-science,cpu-architecture,cpu-cache,Caching,Computer Science,Cpu Architecture,Cpu Cache,前言:有许多不同的设计模式对缓存的整体性能很重要。下面列出了的参数 不同的直接映射缓存设计 缓存数据大小:32千字节 缓存块大小:2个字 缓存访问时间:1个周期 问题:假设32位地址,计算上面列出的缓存所需的位数。给定总大小,找到 最近的直接映射缓存的总大小(包含16个字块) 大小相等或更大。解释为什么第二个缓存 数据量越大,性能可能会比第一个版本慢 缓存 下面是公式: 缓存中的位数2^n X(块大小+标记大小+有效字段大小) 以下是我得到的:65536(1+14X(32X2)。 这是正确的

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

  • 缓存数据大小:32千字节
  • 缓存块大小:2个字
  • 缓存访问时间:1个周期
问题:假设32位地址,计算上面列出的缓存所需的位数。给定总大小,找到 最近的直接映射缓存的总大小(包含16个字块) 大小相等或更大。解释为什么第二个缓存 数据量越大,性能可能会比第一个版本慢 缓存

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

以下是我得到的:
65536(1+14X(32X2)


这是正确的吗?

我也被困在同一个问题上,但我有第一部分的答案

计算所需的总位数

  • 您需要将KB转换为单词并获取索引位
  • 使用第1部分中的答案获取标记位
  • 把它们插入这个公式

    (2^(index bits)) * ((tag bits)+(valid bits)+(data size))
    
  • 提示:在本例中,数据大小为64位,有效位为1。因此只需找到索引和标记位即可

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

    使用:
    (2^索引位)*(有效位+标记位+(数据位*2^偏移位))

    对于第一个,我得到:

    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^indext bits * (block size + tag size + valid field size).
    
    • 块大小由以下问题给出:2个字=32位
    • 标记大小:32-偏移量(位)-索引(位)
    • 有效字段大小通常为1个有效位

    您如何在第一部分找到
    2^15个块
    ?由于缓存数据大小为
    32KiB
    ,并且有
    2个字/块
    32*2^10字节/8字节
    导致
    2^12个块
    。问题没有指定字的大小,但如果地址大小是32位的话,很好的猜测是字的大小=32-位。(因此指针是一个单词,就像一个典型的32位RISC)。比您假设的16位单词大小更可能。更好的问题应该指定单词大小,而不是让回答者猜测。可能是OP遗漏的某些上下文暗示了这一点。