【问题标题】:2-way set associative cache hit/miss ratio calculations2路集关联缓存命中/未命中率计算
【发布时间】:2018-07-22 02:15:55
【问题描述】:

我很难弄清楚如何知道什么时候会成功或失败。这是我正在做的问题(我有答案,但我不知道他们是如何得到答案的):

2 路集关联缓存由四个集组成。主存包含 2K 块,每块 8 个字。

  • 显示允许我们将地址从主存映射到缓存的主存地址格式。请务必包括字段及其大小。 (我明白这一点,并且已经做了工作并得到了答案)

  • 计算从主内存中位置 8 到 51 循环 3 次的程序的命中率。您可以将命中率保留为分数。答案如下:

循环的第一次迭代:地址 8 未命中,然后是整个 块被带入第 1 组。因此,9-15 被击中。 16是一个小姐, 进入第 2 组、第 17-23 组的整个格挡都是安打。 24 是一个错过,整个 被带入第 3 盘的拦网,25-31 是安打。 32 是未命中,整块 带入第 0 盘,然后 33-39 被击中。 40 是错过,整个街区 带入第 1 组(注意我们不必用 地址 8,因为这是 2 路组关联的),41-47 是命中。 48 是一个 失误,整个拦网带入第二盘,49-51被安打。

对于循环的第一次迭代,我们有 6 次未命中,并且 5*7 + 3 命中,或 38 次命中。在剩余的迭代中,我们有 5*8+4 个命中,或者 每个击打 44 次,再击打 88 次。

因此,我们有 6 次未命中和 126 次命中,命中率为 126/132, 或 95.45%。

我仍然无法弄清楚如何确定哪些内存地址/块将被命中或未命中。

【问题讨论】:

  • 属于缓存行的内存地址为命中,否则为未命中(内存地址不属于缓存行)。

标签: memory cpu-architecture


【解决方案1】:

这个问题有一些歧义:

  1. 没有给出缓存行大小
  2. 每个内存条目被称为 8 个字长。

因此我做了一些假设:

  1. 缓存行是 8 个字
  2. 主存储器是字寻址的

主内存有 2048 个条目,因此内存地址为 11 位。高速缓存行是 8 个字宽,因此至少 3 位用于高速缓存行内的字选择。有 4 个缓存块,因此接下来的两位用于索引。这为 TAG 留下了 6 位。

地址8(x00000001000)下发时,index为01,TAG为000000。 这不在缓存中,因此未命中。

对于地址 9 (x00000001001),索引是 01,标签是 000000。这已经在缓存中,因此它是命中的。

对于地址 10 (x00000001010),索引是 01,标签是 000000。这已经在缓存中,因此它是命中的。

相同的模式一直持续到地址 15 (x00000001111)。

地址16(x00000010000)下发时,index为10,TAG为000000。 这不在缓存中,因此未命中。 发出地址 17 (x00000010001) 时,索引为 10,TAG 为 000000。这已经在缓存中,因此命中。 相同的模式一直持续到地址 23 (x00000010111)

8-15 :cache index 01, TAG 00000: 1 Miss, 7 Hits 16-23:缓存索引 10,标签 00000:1 未命中,7 命中 24-31:缓存索引 11,标签 00000:1 次未命中,7 次命中 32-39 :cache index 00, TAG 00000: 1 Miss, 7 Hits

现在对于地址40(x00000110000),索引是10,但TAG是000001。这是一个未命中,当从内存中取出数据时,这可以转到第二个条目以 10 为索引的缓存块,因为我们的缓存是 2 路的。

40-47:缓存索引 01,标签 00001:1 次未命中,7 次命中 48-51 :cache index 10, TAG 00001: 1 Miss, 3 Hits

第一次迭代:6 次未命中和 38 次命中。对于第二次迭代,44 次命中,而对于第三次迭代,44 次命中。

所以总的来说,我们在 142 次访问中获得了 126 次点击。 命中率126/132

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2013-04-30
    • 2014-06-26
    • 2014-07-29
    • 1970-01-01
    • 2019-10-05
    相关资源
    最近更新 更多