set-associative 缓存的缓存命中率:我看不懂这张图
Cache hit rate for a set-associative cache: I don't understand this diagram
标题可能不是很好,但我找不到更好的。
我们有作业要做,我没有交,因为我看不懂。现在因为它结束了,我们得到了解决方案......现在我正在尝试使用解决方案来理解任务,因为试图理解我们教授的复杂脚本对我来说是浪费时间。
任务:
We have a direct mapped cache with following access frequency on main
memory blocks:
2 5 0 13 2 5 10 8 0 4 5 2
What's the hitting quote (aka hit rate) if the cache is a
set-associative cache with set size 4 and FIFO?
从my last question about direct-mapped caches开始,我学会了如何计算点击率,想顺便说声谢谢。
我唯一的问题是我不明白数字是如何放在 table 中的。
我想可能喜欢编程:0-3 是 array1,其他 0-3 是 array2。
我们取缓存的第一个数字 2 并将其放入 array1,因此它位于 array1[0] 中。然后我们对下一个数字做同样的事情,取 5 并将它放在 array2[0] 中。现在取下一个数字 0 并放入数组 [1]
.
但是好像模式不对,一直到第 4 行都是正确的 table 但是后来就错了...
为什么 table 中的数字会这样排列?
解法:
您可能想知道为什么数字与地址不对齐,就像直接映射的情况一样。这张图中发生的事情是将项目从左到右放入集合中,仅此而已,因为集合最初是空的。值 2、0、10 和 8 映射到最左边的集合。 2 首先出现,因此它位于最左边的列中。然后 0 被放置在下一个可用的位置。 2 再次出现,即括号中指示的 "hit"。然后 10 出现并进入第三个位置。 8 到第四个位置,缓存块现在已满。 0 重复出现,并且命中,因为它仍在缓存中,位于第二个位置。现在出现 4。缓存集已满:必须删除某些内容。 2 被踢出(可能是由于最近最少使用 (LRU) 替换策略)并被 4 替换。这就是为什么 4 在最左边的列中;它已经取代了 2。现在 2 再次出现并且不再在缓存中,因为它刚刚被踢出。现在最近最少使用的缓存项是 0,所以 it 被踢出,2 现在位于第二个位置。
请注意,真正的四路组相联缓存并不总是使用完整的块范围 LRU 替换策略,因为一些进一步的简化可以加快它们的速度。
而且,顺便说一下,地址是根据简单的模 4 分配到集合中的。偶数地址在左边集合,奇数地址在右边:
set 0 set 1
0 1 2 3 | 0 1 2 3 <- addr modulo 4
---------------+-----------------
0 1 2 3 | 4 5 6 7 <- full addr
8 9 10 11 | 12 13 14 15
如您所见,这与 table 中的内容一致;当然,除了地址与它们的模 4 位置不匹配:根据替换策略,它们在每个集合中被赋予任意位置。
标题可能不是很好,但我找不到更好的。
我们有作业要做,我没有交,因为我看不懂。现在因为它结束了,我们得到了解决方案......现在我正在尝试使用解决方案来理解任务,因为试图理解我们教授的复杂脚本对我来说是浪费时间。
任务:
We have a direct mapped cache with following access frequency on main memory blocks:
2 5 0 13 2 5 10 8 0 4 5 2
What's the hitting quote (aka hit rate) if the cache is a set-associative cache with set size 4 and FIFO?
从my last question about direct-mapped caches开始,我学会了如何计算点击率,想顺便说声谢谢。 我唯一的问题是我不明白数字是如何放在 table 中的。
我想可能喜欢编程:0-3 是 array1,其他 0-3 是 array2。
我们取缓存的第一个数字 2 并将其放入 array1,因此它位于 array1[0] 中。然后我们对下一个数字做同样的事情,取 5 并将它放在 array2[0] 中。现在取下一个数字 0 并放入数组 [1]
.
但是好像模式不对,一直到第 4 行都是正确的 table 但是后来就错了...
为什么 table 中的数字会这样排列?
解法:
您可能想知道为什么数字与地址不对齐,就像直接映射的情况一样。这张图中发生的事情是将项目从左到右放入集合中,仅此而已,因为集合最初是空的。值 2、0、10 和 8 映射到最左边的集合。 2 首先出现,因此它位于最左边的列中。然后 0 被放置在下一个可用的位置。 2 再次出现,即括号中指示的 "hit"。然后 10 出现并进入第三个位置。 8 到第四个位置,缓存块现在已满。 0 重复出现,并且命中,因为它仍在缓存中,位于第二个位置。现在出现 4。缓存集已满:必须删除某些内容。 2 被踢出(可能是由于最近最少使用 (LRU) 替换策略)并被 4 替换。这就是为什么 4 在最左边的列中;它已经取代了 2。现在 2 再次出现并且不再在缓存中,因为它刚刚被踢出。现在最近最少使用的缓存项是 0,所以 it 被踢出,2 现在位于第二个位置。
请注意,真正的四路组相联缓存并不总是使用完整的块范围 LRU 替换策略,因为一些进一步的简化可以加快它们的速度。
而且,顺便说一下,地址是根据简单的模 4 分配到集合中的。偶数地址在左边集合,奇数地址在右边:
set 0 set 1
0 1 2 3 | 0 1 2 3 <- addr modulo 4
---------------+-----------------
0 1 2 3 | 4 5 6 7 <- full addr
8 9 10 11 | 12 13 14 15
如您所见,这与 table 中的内容一致;当然,除了地址与它们的模 4 位置不匹配:根据替换策略,它们在每个集合中被赋予任意位置。