【问题标题】:How does a direct mapped cache with 16 one-word blocks vary from one with 8 two-word blocks具有 16 个单字块的直接映射缓存与具有 8 个二字块的直接映射缓存有何不同
【发布时间】:2013-11-24 00:52:27
【问题描述】:

我正在寻找具有 16 个单字块和一个使用 8 个 2 字块的缓存的二进制地址、标记、索引和命中或未命中,这些块在开始时都假定为空

假设我有参考的说明 4、4、32、31、5、32

对于第一个缓存(16 个单字块),您必须首先将 4 转换为二进制,然后将该二进制值拆分以获取标记,然后如果您再次找到该索引,它将被标记为命中

话虽如此,我相信下表使用这种方法是正确的。

Ref | Binary |  Tag  | Index | Hit or Miss
 4   00000100   0000   0100      miss
 4   00000100   0000   0100      hit
32   00100000   0010   0000      miss
31   00011111   0001   1111      miss
 5   00000101   0000   0101      miss
32   00100000   0010   0000      hit

我希望对第二个缓存(8 个双字块)执行相同的操作,但我不确定如何继续。

我认为二进制文件对于数字来说是相同的,但是我对如何从中确定标签和索引以及在与第一个缓存相同的引用指令上是否存在命中或未命中感到困惑。

如何确定标签、索引以及它在此缓存中是否命中或未命中?

【问题讨论】:

    标签: caching


    【解决方案1】:

    不同之处在于,您可以使用一半的缓存行,在缓存行内提供 4 位标记、3 位索引和 1 位位移(指示两个字块中的哪个字被寻址) .对于给出的示例,由于访问 4 获取 5 以及更广泛的获取将获得一个额外的命中。

    Ref | Binary |  Tag  | Index | Disp |  Hit or Miss
     4   00000100   0000   010     0       miss
     4   00000100   0000   010     0       hit
    32   00100000   0010   000     0       miss
    31   00011111   0001   111     1       miss
     5   00000101   0000   010     1      *hit
    32   00100000   0010   000     0       hit
    

    【讨论】:

    • 好的,这就是为什么对 5 的引用会受到影响,所以如果你接下来有对 33 的引用,那么标签将是 0010,索引为 000,位移为 1因为索引匹配而表示命中?
    • Index 和 tag 都匹配 5,如果 33 是​​下一次读取,这将是一个命中。但是,在 32 和 33 之间读取 17 会导致两次 冲突未命中:标签 0001 将替换索引 000 处的标签 0010(从缓存中逐出 32 和 33 以支持 16 和 17),只是转身并在需要 33 时反转该过程。
    • 哎呀,你是对的,索引和标签都必须匹配,但我现在明白了,谢谢你为我澄清这一点
    猜你喜欢
    • 1970-01-01
    • 2015-07-07
    • 2012-04-11
    • 2018-06-24
    • 2018-05-24
    • 2014-06-04
    • 2020-04-18
    • 2012-07-09
    相关资源
    最近更新 更多