【问题标题】:Direct Mapped Cache Hit/Miss直接映射缓存命中/未命中
【发布时间】:2012-05-09 16:47:18
【问题描述】:

如果这是错误的堆栈交换,我深表歉意;它似乎是最接近可能对计算机体系结构有所帮助的地方。对于计算机系统中的作业问题,有人问我:

Consider three direct mapped caches X, Y, and Z each interpreting an
8-bit address slightly differently according to the {tag:setIdx:byteOffset}
format specified. For each address in the reference stream, indicate whether the
access will hit (H) or miss (M) in each cache.

                  C1       C2     C3
Address Formats: {2:2:4} {2:3:3} {2:4:2}

Address References in Binary: 00000010, 00000100...

我应该说每个地址引用是否会导致命中或未命中,但我不知道从哪里开始。

对于格式,我认为标签表示缓存块中数据的标签,setIdx 表示为表示缓存中的不同块而给出的位数,偏移量是块中的特定字节,您可以从中选择。

我觉得我不明白什么是命中或未命中。我认为有3种类型:强制、能力和冲突。如果我不知道缓存中已经存在什么,我怎么知道哪个是强制缺失?给定标签格式,我如何判断缓存的容量?

感谢任何提示或提示。

【问题讨论】:

    标签: caching memory computer-architecture


    【解决方案1】:

    我不认为你会受到打击。即使地址 00 00 0100 会查找相同的块,它也会查找内存中的不同地址。在直接映射的缓存中,命中仅是由于尝试在连续指令中访问同一块中内存中的相同地址而导致的。内存中的地址由字节地址而不是块号给出。只要不尝试访问块中的相同地址,直接映射缓存就会替换块的内容。如果 00 00 0100 在另一个 00 00 0100 之前,那么在直接映射缓存中会有命中。

    在关联的缓存中,内存地址由块号给出,而不是字节地址,因此会在此处生成命中。

    块号由 floor(Byte address/Bytes per block) mod (块数)给出

    【讨论】:

    • 通常缓存会在未命中时加载整个块,而不仅仅是请求的字节。 (一些高速缓存使用扇区,每块提供一个以上的有效位,但没有主流处理器提供每字节甚至每 4 字节块的有效位。此外,对于当前的 DRAM,最小突发长度为 4——使用突发斩波,这会降低性能,因此 64 位宽的接口提供最小 32 字节传输。)
    • @PaulA.Clayton 你也可以看看这个缓存问题吗? stackoverflow.com/questions/30555623/…
    【解决方案2】:

    以C1为例,setIdx有2位,byteOffset有4位。

    所以这个缓存将有 2^2 = 4 个块(00、01、10 和 11),每个块将有 2^4 = 16 个字节。

    地址引用现在可以拆分为 C1 格式:{00 00 0010}

    假设缓存默认为空,第一次查找将导致未命中。但是,缓存现在将加载带有标签“00”的块“00”。

    下一个引用 {00 00 0100} 会查找块“00”,它看到标签也是“00”,我们命中了。

    【讨论】:

    • 那么字节偏移量是多少?
    • 字节偏移量是一个块的大小。例如,使用与上述相同的引用,假设 C1 在块 {00} 中加载了 {00 00 0010},则此块包含内存 {00 00 0000} 到 {00 00 1111}。但是,如果您尝试查找 {01 00 0010},则会失败,因为标签不同。 (另外我假设这是一个单向集合关联映射)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2016-11-12
    • 2018-06-24
    • 2021-03-25
    • 2018-05-24
    相关资源
    最近更新 更多