【问题标题】:How exactly to count the hit rate of a direct mapped cache?如何准确计算直接映射缓存的命中率?
【发布时间】:2016-11-12 17:13:30
【问题描述】:

我们得到了一个 8 帧的缓存,它是直接映射的。已观察到主内存块的以下访问顺序:

2 5 0 13 2 5 10 8 0 4 5 2

计算这个有组织的缓存的命中率。

解决方案:

我明白这些数字是如何以及为什么这样放在表格中的。但我不明白为什么 2 和 5 被加粗,为什么我们的命中率是 17%。

我们的教授已经解决了这个问题,但我没有完全理解。

【问题讨论】:

  • 当你让教授解释时,他/她说了什么?
  • 螺栓 = 缓存命中。 17% = 12 人中有 2 人。但我们不会像你一样在同一个地方尝试相同的课程。
  • dwelch 我没有问他,因为我很害羞:/
  • @rpbudd 教授的存在是为了帮助我们学习。如果你不让他知道你不懂,教授会认为一切正常。

标签: caching memory cpu-architecture


【解决方案1】:

就像@Margaret Bloom 在 cmets 中提到的那样,粗体数字指的是缓存命中。非粗体表示缓存未命中。

使用这个模拟器你可能会更好地理解它:cachesimulator.com

模拟器仅适用于 WORD 指令,因此需要对您的作业进行一些转换以模拟它:

缓存大小: 32 字节(8 行)

块大小: 4 字节(每行一个字)

关联性: 1(直接映射缓存)

替换算法: LRU

内存大小:(任何大于 (14*4) 的数字都可以)例如:1024

现在,由于模拟器使用 WORD 指令,您需要通过将每个数字乘以 4 来转换访问序列,此外,在模拟器中,您输入十六进制地址,因此在乘以 4 后,您将转换为十六进制,然后您得到:

8 14 0 34 8 14 28 20 0 10 14 8

在模拟器中,您在表格中输入说明:

<operationtype><space><register><space><address>

在您的情况下,操作类型是 LOAD 并且寄存器无关紧要。所以你可以使用任何寄存器,例如:

LOAD 1 8
LOAD 1 14 
LOAD 1 0 
LOAD 1 34 
LOAD 1 8 
LOAD 1 14 
LOAD 1 28 
LOAD 1 20 
LOAD 1 0 
LOAD 1 10 
LOAD 1 14 
LOAD 1 8

在模拟器的文本区域输入上述说明,然后单击运行。然后,您可以实时查看高速缓存命中和未命中,当模拟完成时,您可以通过查看高速缓存的内容和指令结果列表来分析结果。您可以将鼠标悬停在缓存中的每个元素所引用的主内存地址上。

【讨论】:

    【解决方案2】:

    我明白这些数字是如何以及为什么这样放在表格中的。

    所以你了解了哪些地址如何映射到缓存行,并且垂直轴是时间。

    但我不明白为什么 2 和 5 被加粗,为什么我们的命中率是 17%。

    当先前对同一缓存行的访问是针对同一地址时,表条目是粗体(缓存命中)。映射到同一缓存行的不同地址会导致缓存未命中(驱逐旧内容)。

    以视觉/图形方式:在同一列中垂直向上查看,以查看缓存行中哪些数据当前是热的。

    显然,一旦您知道有多少缓存命中,计算命中率就很容易了。


    通常你应该问你的教授这样非常基本的问题。但是,您的图表确实很容易理解,所以它使这个琐碎的问题很容易理解和回答。

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 2013-04-02
      • 2018-05-24
      相关资源
      最近更新 更多