沈天真
作者沈天真2021-02-20 23:28
售前支持, IPS

你真的了解CPU Cache吗?系列I----基础知识

字数 1781阅读 2353评论 0赞 0

局部性原理

一个编写良好的计算机程序,它们倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身,我们称这种程序具有良好的局部性。这种倾向性,我们称之为局部性原理,是一个持久的概念,对于硬件和软件系统的设计和性能都有着极大的影响。

在一个具有良好时间局部性的程序中,被引用过一次的存储器在不远的将来会被再次引用。在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器的位置。

在硬件层,局部性原理允许计算机设计者通过引入称为高速缓存存储器的小而快速的存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。在操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被引用块的高速缓存。

Cache

cache,中译名高速缓冲存储器,其作用是为了更好的利用局部性原理,减少CPU访问主存的次数。简单地说,CPU正在访问的指令和数据,其可能会被以后多次访问到,或者是该指令和数据附近的内存区域,也可能会被多次访问。因此,第一次访问这一块区域时,将其复制到cache中,以后访问该区域的指令或者数据时,就不用再从主存中取出。

下图显示了典型的计算机或者服务器组成中存储的层次结构。

从上图中也可以看出Cache弥补了CPU与内存之间的巨大访问速度差异,而SCM弥补了内存和磁盘之间的巨大访问速度差异。

Cache 组成

现代CPU大多数都采用多级缓存机制,常见是3级缓存机制,即 L1 Cache , L2 Cache ,L3 Cache。L1 Cache 紧连着CPU,L2 Cache接着L1 Cache,L3 Cache连接着L2 Cache 和内存。

下图是Power9 CPU的一个示意图,可以看出 L1 Cache / L2 Cache / L3 Cache 的分布。

其中 L1 Cache 是在每个Core的内部。

L1 Cache

L1 Cache是比较特殊的,因为它又由 数据缓存L1 Data Cache俗称 D-Cache和 指令缓存L1 Instruction Cache 俗称 I-Cache 组成。其中I-Cache 还承担着分支预取的功能,尤其在类似循环操作的时候,提前把下一个指令放到I-Cache 中,这时I-Cache 看起来很像 Input-Cache。

Inclusive Cache vs Non-Inclusive Cache

为了让问题简单化,只考虑 L1 Cache 和 L2 Cache。

Inclusive Cache

简单说来,如果L2 Cache (low level cache)包含所有L1 Cache (high level cache) 中的数据,那么把 L2 Cache 叫做L1 Cache 的 Inclusive Cache (全包含Cache)。

上图L2 Cache是Inclusive Cache,如果 Y 在L2 Cache 中不再存在,L2 Cache 会通知 L1 Cache ,把Y也删除。

Non-Inclusive Cache

简单说来,如果 L2 Cache (low level cache),只包含 L1 Cache (high level cache) 中没有的数据,那么把 L2 Cache 叫做 L1 Cache 的 Non-Inclusive Cache (非包含 Cache)。

上图L2 cache是 Non-Inclusive Cache。L2 Cache 只有L1 Cache 中没有的数据。

Inclusive Cache 多了一个 “Back Invalidation”,很多时候,Inclusive Cache 会慢一点。

一个典型的代表是 Intel Skylake 对于 L3 Cache 的修改,将其从之前的 Inclusive Cache 修改为 Non-Inclusive Cache。

Cache Line

cache line:每次内存和CPU缓存之间交换数据都是固定大小,cache line就表示这个固定的长度。

cache set:一个或多个cache line组成cache set,也叫cache row。

至此,希望您已经基本了解 Cache 的一些基本概念,还有更多文章,请您继续关注。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广