caching - 组关联缓存的缓存命中率 : I don't understand this diagram

标签 caching memory cpu-architecture

标题可能不太好,但我找不到更好的标题。

我们有作业要做,但我没有交,因为我听不懂。现在因为结束了,我们得到了解决方案...现在我正在尝试使用解决方案来理解任务,因为尝试理解我们教授的复杂脚本对我来说是浪费时间。


任务:

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 ,我学会了如何计算点击引用,顺便说一句非常感谢。 我唯一的问题是我不明白这些数字是如何放置在表格中的。

我想像编程一样:0-3是数组1,其他0-3是数组2。 我们取出缓存的第一个数字 2 并将其放入 array1 中,因此它位于 array1[0] 中。然后我们对下一个数字执行相同的操作,取 5 并将其放入 array2[0] 中。现在取出下一个数字 0 并将其放入数组[1]中。

但是看起来模式是错误的,直到表的第 4 行为止都是正确的,但随后就错误了......

为什么表格中的数字是这样排列的?

解决方案:enter image description here

最佳答案

您可能想知道为什么数字与地址不对齐,就像直接映射的情况一样。该图中发生的情况是,项目从左到右放入集合中,仅此而已,因为集合最初是空的。值 2、0、10 和 8 映射到最左边的集合。 2 首先出现,因此它位于最左边的列中。然后将 0 放置在下一个可用位置。 2 再次出现,即括号中所示的“命中”。然后 10 出现并进入第三位。 8 转到第四个位置,并且缓存 block 现在已满。 0 重复出现,并且命中,因为它仍在缓存中,位于第二个位置。现在出现了 4 个。缓存集已满:必须剔除某些内容。 2 被踢出(可能是由于最近最少使用 (LRU) 替换策略)并被 4 取代。这就是为什么 4 位于最左边的列;它已经取代了 2。现在 2 再次出现并且不再在缓存中,因为它刚刚被踢出。现在最近最少使用的缓存项是 0,因此它被踢出,2 现在位于第二位。

请注意,真正的四路组关联缓存并不总是使用完整的 block 范围 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  

可以看到,这与表中的内容是一致的;当然,除了地址与它们的模 4 位置不匹配之外:根据替换策略,它们在每组中被赋予任意位置。

关于caching - 组关联缓存的缓存命中率 : I don't understand this diagram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38308430/

相关文章:

c# - Web应用程序允许用户选择用作构建 block 的对象?

javascript - 如何删除本地主机上的服务 worker 缓存

大型数组的Java纯粹存在导致大量内存尖峰

macros - 检测预处理器中的 -xarch 选项?

multithreading - 多个线程可以同时访问共享内存吗?

php - PHP 函数中的静态变量是否跨实例全局?

java - 为 Multi-Tenancy 设置 Hazelcast 缓存

java - 查看/解决 Windows XP 内存碎片的工具

C - 交换两个相同大小的内存块的最快方法?

caching - 对于回写式缓存策略,为什么数据应该首先从内存中读取,然后再写入缓存?