电子说
20世纪80年代,CPU性能有了显著提升,但这受到板载内存访问速度缓慢增长的阻碍。随着这种差异的恶化,工程师们发现了一种通过新的设计技术缓存来解决问题的方法。本文将帮助你进一步了解什么是缓存,它如何工作以及如何设计CPU缓存。
什么是CPU硬件缓存?
CPU硬件缓存是一个较小的内存,位于离处理器较近的位置,用于存储最近引用的数据或指令,以便在需要时可以快速检索它们。通过减少访问较慢主存储器的昂贵的读写操作,缓存对CPU的性能产生巨大影响。实际上,所有现代处理器都采用某种形式的缓存。第一个缓存是片外或外部的。这些很快就被通常由SRAM制成的片上高速缓存存储器取代。为了进一步提高性能,这些片上高速缓存分为指令和数据分区。图1显示了分区的示例。
图1.Intel80486使用了通用缓存,而其后继产品PentiumP5则使用了分区缓存(总线宽
缓存分区导致了多级缓存层次结构的诞生,其中处理器核心将拥有自己的小型私有缓存(L1),其位于更大的共享缓存(L2)之上,其中一些处理器包括第三级缓存(L3),偶尔会有第四级缓存(L4)。
位置(又称缓存如何工作?)
为什么缓存工作?缓存通过参考局部性原则工作。引用位置是指处理器在运行应用程序时访问相同内存位置的趋势。因为这些内存访问是可预测的,所以可以通过缓存来利用它们。局部性通常分为时间局部性和空间局部性两个子集,有时又分为三个子集,称为算法局部性。
时间位置
时间局部性是指在短时间内重用特定数据项。这依赖于以下事实:在处理器上运行的程序往往在短时间内使用相同的变量和数据结构。从主内存中提取一个项目并将其存储在缓存中之后,对该数据的任何后续调用都可以更快地完成。
空间位置
空间位置是指很快将需要的数据项驻留在当前需要的项附近或相邻的内存位置的趋势。这可能是程序员或编译器在内存中聚集项目的结果。例如,使用数组(一种数据结构)的应用程序将把数组的元素存储在相邻的存储单元中。通过缓存当前正在使用的数据项旁边的数据项,处理器可以在必要时快速访问那些相邻项。
算法局部性
一种不常讨论的局域类型是算法局部性。算法局部性是应用程序在相关数据项上执行操作的趋势,尽管不是在任何短时间段内,并且尽管事物在内存中彼此不相邻。使用链表(另一种数据结构)的应用程序可能会出现此行为。这种类型的局部性可能出现在图形处理或迭代模拟中。
逻辑缓存组织
缓存存储和检索数据的方式和位置取决于缓存的组织方式。这称为缓存的逻辑组织。确定存储的内容由内置于缓存中的管理启发式控制,但它也受到逻辑组织的严重影响。因此,缓存的布局方式在其性能中起着巨大的作用。组织缓存有三种主要方法:全相联缓存;直接映射高速缓存;组相联缓存。
缓存块
当CPU需要访问主内存中的项目时,它使用地址来查找该项目。CPU硬件缓存通常透明地工作,这意味着程序员不必以任何方式确认缓存。因此,用于访问存储器的地址首先由高速缓存处理。该地址用于标识数据项是否位于缓存中。
术语缓存命中表示在缓存中找到数据项,缓存未命中表示没有找到。高速缓存被组织成称为高速缓存块的数据组。每个地址被划分为若干个个位字段,以便可以识别正确的高速缓存块。这些字段是缓存标记、组编号和字节偏移量。图2显示了分成缓存可以解释的字段的地址。
图2.寻址缓存块
当一个CPU缓存被赋予一个地址时,它会将该地址分成必要的字段并开始检查其缓存条目。缓存条目包括缓存标记(此处标记为标记)和缓存块(标记数据)。缓存标记是一个标识符,用于指示引用哪个缓存块。缓存块是存储在该标记上的实际数据,表示来自主内存的一个项目块。要获取该块中的单个字段,需要使用偏移量。
直接映射
在直接映射的高速缓存中,高速缓存项被组织成多个组。地址中的组编号用于索引每组条目。一旦识别出组,就比较缓存标签。如果它们匹配,则这是缓存命中并输出指定的数据。理解直接映射缓存的关键是每个组只有一个缓存条目。这使得直接映射缓存非常快,同时消耗最少的功率。
图3.Adirect-mapped缓存
由于每个集合只能包含一个项,因此直接映射的缓存确实具有更高的争用率,这意味着需要将多个数据项存储在同一位置。这导致缓存未命中。解决此问题的一种方法是使用完全关联的缓存。
全相联
全相联缓存与直接映射缓存相反。全相联缓存具有多个缓存项,而不是包含单个项的多个集合,而是包含在单个集合中。因此,设定的号码不再提供任何信息,也不会使用。相反,当缓存处理内存地址时,将检查每个缓存条目的匹配标记。如果找到,则使用字节偏移量在高速缓存块内输出正确的数据。检查每个缓存条目使得全相联的缓存比直接映射缓存消耗更多的功率。通过使用组关联高速缓存来完成功耗和更高竞争率之间的平衡。
图4.全相联缓存
组相联
组相联缓存提供了两全其美的优势。它由多个集合组成,每个集合具有多个缓存条目。它是如何工作的?首先,设置好允许缓存跳转到适当的条目集。接下来,搜索每组条目以寻找匹配的标签。如果找到,则使用字节偏移量来输出所请求的数据。此方法允许缓存提供功耗和争用率的优化平衡。
图5显示了一个4路组相联缓存。它被称为4路,因为每个集合最多可以包含四个缓存条目。如果每个集合只能容纳两个缓存条目,那么它将是一个双向的。因此,直接映射高速缓存实际上只是单向组关联高速缓存,而组相联高速缓存是单组m路组相联高速缓存,其中m是高速缓存条目的数量。
责任编辑人:CC
全部0条评论
快来发表一下你的评论吧 !