很多人有个疑问,为什么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设计的重要内容之一,我们会在今后的文章中为大家详细介绍。 Cache其他文章: 老狼:Cache是怎么组织和工作的?zhuanlan.zhihu.com 老狼:Cache为什么有那么多级?为什么一级比一级大?是不是Cache越大越好?zhuanlan.zhihu.com 后记
我的笔记本得到这个结果:
|
|