【问题标题】:Cache bits per row and total length每行缓存位数和总长度
【发布时间】:2014-12-20 23:43:05
【问题描述】:

如果我有一个

32位地址

缓存大小(c) 8 KB

块大小(b) 16 B

设置关联性(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

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

【问题讨论】:

    标签: caching computer-architecture cpu-cache lru


    【解决方案1】:

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

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

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

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

    【讨论】:

    • bits per set 将是(块大小 + 标签 + 有效性 + 脏) (16*8=128 + 19 + 1 + 1) = 149 对吗?并且 128/4 = 来自主存储器的每个字 32 位?
    • 每组位数 =(每块位数 * 每组块数)+ 用于替换策略的位数。对于 OP 的问题,即 (20 or 21 * 1) + 0。请注意,如果缓存是直写的,则不需要脏位。
    猜你喜欢
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多