您的位置  > 互联网

CPU三级缓存:CPU和内存之间有一层高速缓存

前言

大家好,我叫小鹏。

上一篇文章我们讲了计算机内存系统的金字塔结构,其中CPU和内存之间有一层缓存,也就是我们今天要讲的CPU三级缓存。

那么,CPU Cache的结构是怎样的,其背后隐藏着哪些设计思想,以及CPU Cache与内存数据是如何关联的。 今天我们就重点讨论一下这些问题。

学习路线图:

1.了解CPU缓存1.1内存的金字塔结构

现代计算机系统将采用分层架构,以在容量、速度和价格方面寻求最大的成本效益。 从上到下,容量从“CPU寄存器-CPU缓存-内存-硬盘”逐渐增大,速度逐渐减慢,单价逐渐增加。 减少。

记忆金字塔

1.2 为什么要在CPU和内存之间添加缓存?

我认为有2个原因:

1.3 CPU的三级缓存结构

当CPU Cache这个概念刚出现的时候,CPU和内存之间只有一个Cache。 随着芯片集成度的提高,现代CPU Cache普遍采用L1/L2/L3多级Cache结构来提高性能。 从上到下,容量逐渐增大,访问速度逐渐降低。 当发生缓存未命中时,缓存系统会搜索较低级别。

CPU三级缓存

2、理解CPU三级缓存的设计思想 2.1 L1为什么要把指令缓存和数据缓存分开?

这种策略称为分离缓存,对应的称为统一缓存:

统一缓存:指令和数据存储在统一的缓存中。

那么,为什么一级缓存要把指令和数据分开呢? 我认为有2个原因:

2.2 为什么L1使用单独缓存,L2使用统一缓存?

我认为有2个原因:

2.3 L3缓存是多核共享的。 如果放在芯片外面有什么区别吗?

集成在芯片内部的缓存称为片内缓存,集成在芯片(主板)外部的缓存称为片外缓存。 最初,由于芯片集成工艺的限制,片上缓存不可能很大,所以L2/L3缓存被设计在主板上而不是芯片内部。

后来L2/L3逐渐集成到CPU芯片中。 片内缓冲和片外缓冲有区别,主要体现在两个方面:

3、CPU Cache的基本单元——Cache Line

CPU Cache读取内存数据时,并不是一次只读取一个字或一个字节,而是一块一块地读取。 每小块数据也称为CPU Cache Line。 这也是局部性原理的一个应用。 当一条指令或数据被访问时,很可能相邻地址的数据也会被访问。 在缓存中存储更多可能被访问的数据可以提高缓存命中率。

当然块长度越大越好(通常是4到8个字,即64位):

区分几种容量单位:

其实,当CPU访问内存数据时,计算机中“缓存设计”的一般规则都是一样的:对于基于Cache的系统,读写数据总是先访问Cache,并检查要访问的数据是否在内存中。缓存。 如果命中,则直接使用Cache上的数据。 否则,会先将底层数据源加载到Cache中,然后再从Cache中读取数据。

那么,CPU如何知道要访问的内存数据是否在CPU Cache中、在CPU中的什么位置、是否有效呢? 这就是下一节将要讨论的内存地址和Cache地址之间的映射问题。

4.内存地址与Cache地址的映射

无论是检查、读取还是写入Cache数据,CPU都需要知道所访问的内存数据对应于Cache上的哪个位置。 这就是内存地址和Cache地址之间的映射问题。

事实上,由于内存块和缓存块的大小是相同的,所以在映射过程中,我们只需要考虑“内存块索引-缓存块索引”之间的映射关系,以及访问块的哪一部分即可具体来说? 使用相同的偏移量在块内搜索单词。 例如:假设内存有32个内存块,CPU Cache有8个缓存块,我们只需要考虑紫色部分标记的索引如何匹配即可。

目前,地图解决方案主要有以下三种:

内存块索引-缓存块索引

4.1 直接映射

直接映射是三种方法中最简单的映射方法。 直接映射的策略是在内存块和缓存块之间建立固定的映射关系。 内存块总是映射到同一个缓存块。

具体方法:

直接映射

4.2 全关联映射

了解了直接映射方法后,我们发现直接映射存在两个问题:

基于直接映射的缺点,全关联映射的策略是允许内存块映射到任意Cache块。 这种方法可以充分利用Cache空间,块冲突率较低,但所需电路结构较复杂,成本较高。

具体方法:

全关联映射

4.3 组关联映射

集合关联映射是直接映射和完全关联映射之间的折衷方案。 组联映射的策略是将Cache分为多个组,每个内存块固定映射到一个组,并且允许映射到组内。 任何缓存块。 显然,当组关联的分组为1时,等于全关联映射,当分组等于Cache块数时,等于直接映射。

设置关联映射

5. 缓存块替换策略

在直接映射的Cache中,由于每个主存块与一个Cache块都有直接的映射关系,因此不存在替换策略。 在使用全相联映射或组相联映射的Cache中,主存块和Cache块之间没有固定的映射关系。 当需要将新的内存块加载到Cache中(并且Cache块没有空闲空间)时,需要将其替换。 到Cache块上的数据。 此时就存在替换策略的问题。

常见的更换策略:

六、总结

今天我们主要讨论了CPU Cache的基本设计思想以及Cache与内存的映射关系。 CPU Cache如何读写还没有讨论。 还有另一个 CPU 缓存一致性问题 [2]。 这是关于什么的? 我们将在下一篇文章中详细讨论,敬请关注。

参考

参考

[1]

·:

[2]

CPU缓存一致性问题:

[3]

深入讲解计算机组成原理(第37、38讲):

[4]

计算机组织原理教程(第 7 章):

[5]

CPU缓存:

[6]

中央处理器: