很多人有个疑问,为什么Intel系列CPU在2005年后可以力压AMD十多年?精良的Cache设计和卓越的微架构是紧张的缘故原由。大多数高层程序员认为 Cache 是透明的,CPU可以很聪明地安排他们书写的程序,不须要关心数据是在内存中还是在Cache里。 他们大概是对的,大部分韶光Cache都可以安静的事情。但对付操作系统、编译软件、固件工程师和硬件工程师来说,Cache则须要我们特殊关照。现在越来越多的数据库软件和人工智能引擎也对Cache越来越敏感,须要针对性地优化。Cache设计和干系知识从而不再是阳春白雪,你大概某一天就会须要理解它。
本系列希望通过将Cache干系领域知识点拆解成大家关心的几个问题,来串起干系内容。这些问题包括:
下面是本系列的第一篇。
什么是Cache?Cache Memory也被称为Cache,是存储器子系统的组成部分,存放着程序常常利用的指令和数据,这便是Cache的传统定义。从广义的角度上看,Cache是快设备为了缓解访问慢设备延时的预留的Buffer,从而可以在粉饰访问延时的同时,尽可能地提高数据传输率。 快和慢是一个相对观点,与微架构(Microarchitecture)中的 L1/L2/L3 Cache比较, DDR内存是一个慢速设备;在磁盘 I/O 系统中,DDR却是快速设备,在磁盘 I/O 系统中,仍在利用DDR内存作为磁介质的Cache。在一个微架构中,除了有L1/L2/L3 Cache之外,用于虚实地址转换的各级TLB, MOB( Memory Ordering Buffers)、在指令流水线中的ROB,Register File和BTB等等也是一种Cache。我们这里的Cache,是狭义 Cache,是CPU流水线和主存储器的 L1/L2/L3 Cache。
Cache在哪里呢?大概很多人会不假思虑的说:“在CPU内核里。”Not so fast!
它也有可能在主板上!
我们先来理解一下Cache的历史。
它在平时可以做显存。也可以被设定为L4缓存:
Cache速率比内存速率快多少?
大家都知道内存都是DRAM,但对Cache是怎么组成就所知不多了。Cache是由CAM(Content Addressable Memory )为主体的tag和SRAM组成的。我们今后在系列文章中会详细先容CAM的组成,这里大略比较一下DRAM和SRAM。DRAM组成很大略:
DRAM
只有一个晶体管和一个电容。而SRAM就繁芜多了,一个简化的例子:
SRAM
须要6个晶体管。一个大略的比较如下:
那么速率差距多大呢?各级Cache的延迟差距很大,如下图:
可以看到延迟最低的是Registers和MOB(Memory Ordering Buffers),L1的延迟和CPU core在一个数量级之内(把稳这里并不能大略的认为L1便是3个Cycle,由于有pre-fetch),而DRAM延迟是它的60多倍。
结论说Cache在CPU的Die里面在现在绝大多数情形下都是精确的。最新Intel的optane内存会让普通DRAM作为cache,而自己作为真正内存,从而组成两级memory( L2 memory),为这个构造平添了一些变数。细心的读者大概会创造,Cache演化总的来说级数在增加,新加入的层级在位置上总是涌如今外层,逐渐向内部靠近。Cache的设计是CPU设计的主要内容之一,我们会在今后的文章中为大家详细先容。
后记如何知道自己CPU的L2、L3的容量多大呢?当然可以用CPU-z,但实在可以有个更加大略的办法,在命令行输入:wmic cpu get L2CacheSize,L3CacheSize
我的条记本得到这个结果:
想体验一下不要Cache的极限慢速吗?很多BIOS都有设置,可以关掉cache: