在20世纪80年代,CPU性能有了很大的提高,尽管这受到了星载内存访问速度缓慢增长的阻碍。随着这种差距的恶化,工程师们发现了一种新的设计技术–缓存–来缓解这个问题。
什么是CPU硬件缓存/h3>
CPU硬件缓存是一个较小的内存,位于靠近处理器的地方,它存储最近引用的数据或指令,以便在需要时能够快速检索它们。通过减少访问较慢的主内存的代价高昂的读和写,缓存对CPU的性能有着巨大的影响。几乎所有的现代处理器都使用某种形式的缓存。
第一个缓存是片外缓存,或外部缓存。它们很快就被片上高速缓存存储器所取代,这些存储器通常是由SRAM制成的。为了进一步提高性能,这些片上缓存被分成指令和数据分区.
图1显示了一个分区示例。
图1.英特尔80486使用了一个通用缓存,而它的后继PentiumP5则有一个分区缓存(总线宽度被省略了)。
高速缓存分区导致了多级缓存层次结构的产生,其中处理器核心将拥有自己的小型私有缓存(L1),位于较大的共享缓存(L2)之上,一些处理器包括第三级缓存(L3),偶尔还有第四个(L4)。
局部性(AKA缓存是如何工作的
为什么缓存工作存通过引用的局部性原则工作。引用的局部性是指处理器在运行应用程序时访问相同内存位置的趋势。因为这些内存访问是可预测的,所以可以通过缓存利用它们。
局部性通常分为两个子集–时间局部性和空间局部性–有时还有第三个子集,称为算法局部性。
时间局部性
时态局部性是指在短时间内对特定数据项进行重用。这取决于这样一个事实:在处理器上运行的程序往往在短时间内使用相同的变量和数据结构。在从主内存中获取一个项并将其存储在缓存中之后,对该数据的任何后续调用都可以更快地完成。
空间局部性
空间局部性是指即将需要的数据项驻留在当前所需项附近或邻近的内存位置的趋势。这可能是程序员或编译器在内存中群集项的结果。
例如,使用数组(一种数据结构类型)的应用程序将将数组的元素存储在相邻的内存位置。通过缓存当前正在使用的数据项,处理器可以在必要时快速访问这些相邻项。
算法局部性
较少讨论的局部性类型是算法局部性。算法局部性是应用程序对相关数据项执行操作的趋势,虽然不是在任何短时间内,而且尽管这些项在内存中并不接近。
使用链接列表(另一种类型的数据结构)的应用程序可能会显示这种行为。这种类型的局部性可能出现在图形处理或迭代模拟中。
逻辑缓存组织
缓存存储和检索数据的方式和位置取决于缓存的组织方式。这称为缓存的逻辑组织。确定存储的内容由内置在缓存中的管理启发式控制,但它也受到逻辑组织的严重影响。因此,缓存的布局方式对其性能起着巨大的作用。
有三种主要的方法来组织缓存:
- 全结合
- 直接映射
- 集结合
缓存块
当CPU需要访问主内存中的项时,它使用一个地址来定位该项。CPU硬件缓存通常工作透明,这意味着程序员不必以任何方式确认缓存。因此,用于访问内存的地址首先由缓存处理。此地址用于标识数据项是否位于缓存中。
术语“缓存命中”表示在缓存中找到了数据项,而“缓存未命中”表示没有找到数据项。
缓存被组织成一组称为缓存块的数据。每个地址被划分为多个位字段,以便能够识别正确的缓存块。这些字段是缓存标记、设置 和字节偏移量。图2显示了一个划分为缓存可以解释的字段的地址。
图2.寻址缓存块
当CPU缓存被赋予一个地址时,它会将这个地址分解成必要的字段,并开始检查它的缓存条目。缓存条目由缓存标记(此处标记为标记)和缓存块(标记为数据)组成。
- 这个缓存标签是正在引用哪个缓存块的信 的标识符。
- 这个缓存块存储在该标记上的实际数据,表示主内存中的一组项。为了找到该块中的单个单词,需要使用偏移量。
直接映射
在直接映射的高速缓存中,缓存条目被组织成多个集合.地址中的集合编 用于索引每组条目。一旦确定了集合,就会比较缓存标记。如果它们是匹配的,则这是缓存命中,并输出指定的数据。
理解直接映射缓存的关键是每个集合只有一个缓存项。这使得直接映射的高速缓存非常快,同时消耗最少的能量。
图3…直接映射缓存
由于每个集合只能包含一个条目,直接映射缓存确实具有较高的争用率,这意味着多个数据项将希望存储在同一个位置。这会导致缓存丢失。解决此问题的一种方法是使用完全关联的缓存。
全结合
完全关联的高速缓存与直接映射的高速缓存相反.与包含单个条目的多个集不同,完全关联缓存具有多个缓存项,所有缓存项都包含在一个集合中。因此,集合 不再提供任何信息,也不再被使用。相反,当缓存处理内存地址时,将检查每个缓存条目是否有匹配的标记。如果找到,字节偏移量将用于输出缓存块中的正确数据。
检查每个缓存条目使得完全关联缓存比直接映射缓存消耗更多的能量.通过使用集合关联缓存在功耗和更高的争用率之间找到平衡。
图4.全关联缓存
集结合
一个集合关联缓存提供了这两个世界中最好的。它由多个集组成,每组包含多个缓存项。它怎麽工作先,SET编 允许缓存跳转到适当的条目集。接下来,搜索每组条目以寻找匹配的标记。如果找到,字节偏移量将用于输出所请求的数据。这种方法允许缓存提供功耗和争用率的优化平衡。
图5显示了一个4路集关联缓存.它被称为4路,因为每个集合最多可以包含四个缓存项。如果每组只能容纳两个高速缓存项,那将是双向的.因此,一个直接映射的缓存实际上只是一个单向集关联缓存,而一个完全关联的缓存是一个单一集m路集关联缓存,其中m是缓存条目的数量。
图5.集关联缓存
管理启发式
一旦确定了缓存的逻辑组织,就需要确定一组管理启发式。管理启发式只是一组规则,用来决定缓存如何执行其职责。这些通常是在缓存控制器中实现的,缓存控制器位于高速缓存之上,充当缓存与CPU之间的接口。缓存管理启发式方法可分为两类:内容管理和一致性管理。
内容管理
内容管理启发式就是它们听起来的样子。它们是一组规则,它们决定何时缓存和缓存什么。这些启发式方法标识从内存中请求的重要项,并将这些项复制到缓存中。内容启发式的两个例子是预取被认为重要或即将使用的数据项和替换策略,这些策略决定在缓存集已满或接近容量时替换哪些项。
一致性管理
一致性管理试探法都是关于保持缓存与其他内存同步的。这可能意味着主存、层次结构中的其他缓存级别,甚至缓存本身。例如,缓存不应该在其缓存块中有相同数据的多个副本。此外,如果缓存和主内存有不同的副本应该是相同的数据,应用程序可能会收到过时或陈旧的数据项。这在多核系统中尤其有可能。因此,一致性管理启发式方法可能会定期使用缓存数据的更新版本更新主内存。
CPU硬件缓存基本原理综述
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!