我不太了解这两个缓存之间的主要区别,我想知道是否有人可以帮助我?
我知道,使用完全关联的缓存,地址可以存储在标签数组的任何行上,而直接映射的缓存在一行上只能有一个地址。
但这就是我所知道的。
简而言之,您已经基本回答了您的问题。这是组织缓存的两种不同方式(另一种方式是n路集关联,将两者结合起来,并且在现实世界中最常使用)。
Direct-Mapped Cache比较简单(只需要一个比较器和一个多路复用器),因此更便宜且工作更快。给定任何地址,很容易在高速缓存中标识单个条目的位置。使用DM高速缓存时的主要缺点是冲突缺失,即两个不同的地址对应于高速缓存中的一个条目。即使高速缓存很大并且包含许多过时的条目,也不能简单地逐出这些条目,因为高速缓存中的位置由地址预先确定。
完全关联缓存要复杂得多,它允许将地址存储到任何条目中。有一个价格。为了检查高速缓存中是否有特定地址,它必须比较所有当前条目(准确的标记)。除了要保持时间上的局部性,它还必须有驱逐政策。通常会实现LRU(最近最少使用)的近似,但是它也会在方案中添加其他比较器和晶体管,因此当然会花费一些时间。
完全关联的缓存适用于小型缓存(例如,某些Intel处理器上的TLB缓存是完全关联的),但这些缓存很小,甚至很小。我们最多谈论的是几十个条目。
甚至L1i和L1d高速缓存都更大,并且需要组合的方法:将高速缓存划分为多个集合,每个集合由“方式”组成。集是直接映射的,并且在其内部是完全关联的。“路”的数量通常很少,例如在Intel Nehalem CPU中有4路(L1i),8路(L1d,L2)和16路(L3)集。N路集关联缓存几乎解决了时间局部性的问题,而不是解决在实践中使用的复杂性。
我强烈推荐UC Berkeley于2011年开设的课程“ Computer Science 61C”,该课程可在Archive中找到。除其他内容外,它还包含3个关于内存层次结构和缓存实现的讲座。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句