直接映射缓存与全相联缓存的区别

18

我不太明白这两个缓存之间的主要区别,想知道是否有人可以帮助解释一下?

我知道在全关联缓存中,一个地址可以存储在标记阵列的任何一行,而直接映射缓存每行只能有一个地址。

但那就是我所知道的全部内容。

2个回答

29
简而言之,您基本上已经回答了自己的问题。这是两种不同的缓存组织方式(另一种是“n路组相联”,结合了两者,并且在现实世界的CPU中最常用)。 直接映射缓存更简单(只需要一个比较器和一个多路复用器),因此更便宜、工作更快。给定任何地址,很容易确定它可以在缓存中的哪个条目中找到。使用DM缓存的一个主要缺点是称为冲突失误,当两个不同的地址对应于缓存中的一个条目时。即使缓存很大并且包含许多过时的条目,也不能简单地驱逐它们,因为地址确定了缓存内的位置。 全相联缓存要复杂得多,它允许将地址存储到任何条目中。但是,这是有代价的。为了检查特定地址是否在缓存中,必须比较所有当前条目(确切地说是标记)。此外,为了保持时间局部性,它必须具有淘汰策略。通常实现LRU(最近最少使用)的近似方法,但这也会在方案中增加额外的比较器和晶体管,并且当然需要一些时间。
完全相联缓存对于小型缓存是实用的(例如,某些英特尔处理器上的TLB缓存是完全相联的),但这些缓存很小,真的很小。我们最多只能谈论几十个条目。
即使是L1i和L1d缓存也更大,并需要组合方法:缓存被分成集合,每个集合包含“路”。集合是直接映射的,并且在其内部是完全相联的。“路”的数量通常很小,例如在英特尔Nehalem CPU中有4路(L1i),8路(L1d,L2)和16路(L3)集合。 N路组相联缓存基本上解决了时间局部性问题,并且在实践中使用起来并不复杂。
我强烈推荐加州大学伯克利分校2011年的“计算机科学61C”课程,可在Archive上获得。除其他内容外,它还包括关于内存层次结构和缓存实现的3个讲座。

这门课程还有一份2015年的版 免费在YouTube上提供


6
该课程已不再在YouTube上提供,但您仍然可以通过搜索“UC Berkeley计算机科学61C 2011”找到它。这是最新的有效链接:https://archive.org/details/ucberkeley-webcast-PLB96D778365083506 - Maxim

0

直接映射高速缓存是一种每个集合只有一行的高速缓存类型,这意味着例如在第一行中A坐在另一行B坐在等等,但在完全关联的高速缓存中只有一个集合,所有块都随机分布,我们不知道A和B坐在哪一行,希望您能理解,如果不理解,请参考RE BRYANT程序员的角度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接