【发布时间】:2015-07-17 19:46:53
【问题描述】:
我不太明白这两个缓存之间的主要区别,我想知道是否有人可以帮助我?
我知道,对于全关联缓存,地址可以存储在标记数组的任何一行,而直接映射缓存只能在一行中包含一个地址。
但这就是我所知道的一切。
【问题讨论】:
标签: memory memory-management cpu-cache
我不太明白这两个缓存之间的主要区别,我想知道是否有人可以帮助我?
我知道,对于全关联缓存,地址可以存储在标记数组的任何一行,而直接映射缓存只能在一行中包含一个地址。
但这就是我所知道的一切。
【问题讨论】:
标签: memory memory-management cpu-cache
简而言之,您基本上已经回答了您的问题。这是组织缓存的两种不同方式(另一种是n-way set associative,它结合了这两种方式,并且最常用于现实世界的 CPU)。
直接映射缓存更简单(只需要一个比较器和一个多路复用器),因此更便宜且运行速度更快。给定任何地址,很容易识别缓存中的单个条目,它可以在哪里。使用 DM 缓存时的一个主要缺点称为冲突未命中,当两个不同的地址对应于缓存中的一个条目时。即使缓存很大并且包含许多陈旧的条目,它也不能简单地驱逐这些,因为缓存中的位置是由地址预先确定的。
全关联缓存要复杂得多,它允许将地址存储到任何条目中。这是有代价的。为了检查特定地址是否在缓存中,它必须比较 all 当前条目(准确的标签)。此外,为了保持时间局部性,它必须有一个驱逐策略。通常实现 LRU 的近似(最近最少使用),但它也在方案中添加了额外的比较器和晶体管,当然会消耗一些时间。
全关联缓存适用于小型缓存(例如,某些英特尔处理器上的 TLB 缓存是完全关联的),但这些缓存很小,非常小。我们最多讨论几十个条目。
即使是 L1i 和 L1d 缓存也更大,需要一种组合方法:一个缓存分为多个集合,每个集合由“路”组成。集合是直接映射的,并且在自身内部是完全关联的。 “路”的数量通常很少,例如在 Intel Nehalem CPU 中有 4 路 (L1i)、8 路 (L1d, L2) 和 16 路 (L3) 组。 N-way set associative cache很好地解决了时间局部性问题,实际使用起来并不复杂。
我强烈推荐加州大学伯克利分校 2011 年的课程“计算机科学 61C”,available on Archive。除了其他内容之外,它还包含 3 个关于内存层次结构和缓存实现的讲座。
本课程还有2015版freely available on youtube。
【讨论】:
在这种类型的缓存中,直接映射缓存每组有一行,这意味着第一行中的前 A 坐在另一行 B 坐在另一行,依此类推,但在完全关联的缓存中,只有一个组,所有的人都坐在随机我们不知道A坐在哪一行,B坐在哪一行希望你理解,如果不是参考RE BRYANT程序员预期
【讨论】: