【问题标题】:How to calculate the Cache Tag size from associativity and distance between aliasing sets?如何根据关联性和别名集之间的距离计算缓存标记大小?
【发布时间】:2014-08-05 17:32:30
【问题描述】:

任何人都可以帮助我并给出一些关于计算缓存标记大小的提示,并给出以下数据:

  1. 高速缓存的关联性,方式 = 4
  2. 缓存大小 = 512kB
  3. 每行的大小 = 128 字节
  4. 每个子集的行之间的最小距离 = 16kB

我找到了以下公式:

Stag = log2(Smemory*A/Scache)

地点:

  • Stag — 缓存标签的大小,以位为单位

  • Smemory — 可缓存的操作内存范围,以字节为单位

  • Scache — 高速缓存的大小,以字节为单位

  • A — 缓存内存的关联性,在方式上。

但是,我没有获得 Smemory。有没有可能使用给定数据计算它的方法?

【问题讨论】:

    标签: caching cpu-architecture cpu-cache


    【解决方案1】:

    你必须在这里做两个假设。首先是关于地址宽度的假设,这就是您的公式要求 Smemory 的原因。其次是关于一个字有多少字节以及您是否具有字寻址能力或字节寻址能力的假设。让我给你看一个例子。让我们假设一个 32 位地址和字节寻址能力。然后,您将拥有:

    # of index bits = log2(512K / 4) = 17
    # of tag bits = 32 - 17 = 15
    

    使用你的公式

    log2((2^32)*4/512K) = 15

    如果您只有 32 位字的字寻址能力,那么您会得到:

    # of index bits = log2(512K / 4) = 17
    # of tag bits = 32 - 17 - log2(4) = 13
    

    你必须调整你的公式以获得相同的结果:

    log2((2^32)*4/(512K*4)) = 13

    你的公式应该是这样的:

    Stag = log2(Smemory*A/(Scache * Sword)),

    地点:

    Sword 是字的大小,以字节为单位

    【讨论】:

    • 字可寻址性意味着地址的行内偏移部分中的位更少,而不是标签中的位。我们给出了缓存大小和行大小(以字节为单位),而不是可寻址单元的数量,所以你不应该乘以512K * 4。我认为这一切都抵消了,因为任何地方都没有涉及文字。这个问题的有趣部分是我们没有给出Smemory,而是给出了一些其他的东西,比如“子集”之间的16kB距离,这可能就足够了。不确定,没有尝试解决,但我很确定这个答案不正确。 ://
    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 2018-09-26
    • 2014-08-01
    • 2014-03-31
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多