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

Memory 双向集关联缓存命中/未命中率计算,memory,cpu-architecture,Memory,Cpu Architecture,我很难弄清楚如何知道什么时候会有命中或未命中。这是我正在做的问题(我有答案,但我不知道他们是如何得到答案的): 双向集合关联缓存由四个集合组成。主存储器包含2K个块,每个块包含8个字 显示允许我们将地址从主存映射到缓存的主存地址格式。确保包括字段及其大小。(我理解这一点,并且已经完成了工作并得到了答案) 计算主存储器中从位置8到51循环3次的程序的命中率。您可以将命中率保留为分数。答案如下: 循环的第一次迭代:地址8是未命中的,然后是完整的 方块被带入第一组。因此,9-15是命中率。16岁是

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

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

  • 显示允许我们将地址从主存映射到缓存的主存地址格式。确保包括字段及其大小。(我理解这一点,并且已经完成了工作并得到了答案)

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

循环的第一次迭代:地址8是未命中的,然后是完整的 方块被带入第一组。因此,9-15是命中率。16岁是个小姐, 进入第二组的整个方块,17-23都是命中。24是一个小姐,整个 进入第三组的方块,25-31为命中。32是一个失误,整个街区 进入第0组时,33-39为命中。40是一个失误,整个街区 进入第1组(注意,我们不必用 地址8(因为这是双向集合关联),41-47是命中。48是一个 小姐,第二盘的整个方块,49-51都是命中

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

因此,我们有6次未命中和126次命中,命中率为126/132, 或百分之九十五点四五


我仍然有一个问题,那就是如何判断哪些内存地址/块将被命中或未命中

这个问题有些含糊不清:

  • 未给出缓存线大小
  • 据说每个记忆条目有8个单词长
  • 因此,我做了一些假设:

  • 缓存线是8个字
  • 主存储器是字寻址的
  • 主存储器有2048个条目,因此存储器地址为11位。缓存线为8个字宽,因此缓存线内的字选择至少使用3位。有4个缓存块,因此接下来的两个位用于索引。这将为标记留下6位

    发出地址8(x00000001000)时,索引为01,标记为000000。 这不在缓存中,因此未命中

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

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

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

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

    8-15:缓存索引01,标记00000:未命中1次,命中7次 16-23:缓存索引10,标记00000:未命中1次,命中7次 24-31:缓存索引11,标记00000:1未命中,7次命中 32-39:缓存索引00,标记00000:未命中1次,命中7次

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

    40-47:缓存索引01,标记00001:1未命中,7次命中 48-51:缓存索引10,标记00001:1未命中,3次命中

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

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

    属于缓存线的内存地址是命中,否则就是未命中(内存地址不属于缓存线)。