双向组关联缓存命中/未命中率计算

时间:2018-02-11 23:18:00

标签: memory cpu-architecture

我很难弄清楚如何知道什么时候会有打击或错过。这是我正在做的问题(我有答案,但我无法弄清楚他们是如何得到答案的):

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

  • 显示主内存地址格式,允许我们将地址从主内存映射到缓存。请务必包含字段及其大小。 (我理解这一点并完成了工作并得到了答案)

  • 计算从主存储器中的位置8到51循环3次的程序的命中率。您可以按分数留下命中率。这是答案:

  

循环的第一次迭代:地址8是未命中,然后是整个   阻止进入第1组。因此,9-15然后命中。 16是小姐,   进入第2组,17-23的整个区块都是命中。 24是一个错过,整个   阻止进入第3组,25-31是命中。 32是整个块的未命中   进入Set 0,33-39然后命中。 40是一个未命中的整个区块   进入第1组(请注意我们不必抛弃该区块   地址8,因为这是双向集合关联),41-47是命中。 48是a   小姐,整场比赛进入第2组,49-51是命中。

     

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

     

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

我仍然有问题包围我如何弄清楚什么内存地址/块将命中或未命中。

1 个答案:

答案 0 :(得分:1)

问题中存在一些含糊之处:

  1. 未给出缓存行大小
  2. 据说每个记忆条目长8个字。
  3. 因此我做了一些假设:

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

      当发出地址8(x000000 01 000)时,index为01,TAG为000000。 这不在缓存中,因此是一个错过。

      对于地址9(x000000 01 001),索引为01,TAG为000000.这已经在缓存中,因此它是一个命中。

      对于地址10(x000000 01 010),索引为01,TAG为000000.这已经在缓存中,因此它被命中。

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

      当发出地址16(x000000 10 000)时,index为10,TAG为000000。 这不在缓存中,因此是一个错过。 当发出地址17(x000000 10 001)时,索引为10,并且TAG为000000.这已经在缓存中,因此它是命中。 相同的模式一直持续到地址23(x000000 10 111)

      8-15:缓存索引01,TAG 00000:1 Miss,7 Hits 16-23:缓存索引10,TAG 00000:1 Miss,7 Hits 24-31:缓存索引11,TAG 00000:1 Miss,7 Hits 32-39:缓存索引00,TAG 00000:1 Miss,7 Hits

      现在对于地址40(x000001 10 000),索引是10,但TAG是000001.这是一个未命中,当数据从内存中带来时,这可以转到第二个条目缓存块索引为10,因为我们的缓存是双向的。

      40-47:缓存索引01,TAG 00001:1 Miss,7 Hits 48-51:缓存索引10,TAG 00001:1 Miss,3 Hits

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

      总的来说,我们在142次访问中有126次点击。 命中率为126/132