• 1.摘要
  • 2.基本信息
  • 3.基本介绍
  • 4.缓冲作用
  • 5.运作流程
  • 6.内容概念
  • 6.1.一级缓存
  • 6.2.二级缓存
  • 6.3.三级缓存
  • 7.工作原理
  • 7.1.读取顺序
  • 7.2.缓存分类
  • 7.3.读取命率
  • 7.4.相关原理
  • 7.5.sram存储
  • 7.6.速度效率
  • 8.缓存比较
  • 9.相关比较
  • 9.1.Intel系列
  • 9.2.AMD系列
  • 10.参考资料

CPU缓存

CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存大小是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。

1/2

基本信息

  • 中文名

    CPU缓存

  • 外文名

    Cache Memory

  • 优点

    高速度大容量

  • 作用

    加快读取速度

  • 分类

    一级缓存二级缓存三级缓存

  • 存储器

    SRAM存储器

基本介绍

CPU缓存

CPU缓存的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。

缓存大小是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是从CPU芯片面积和成本的因素来考虑,缓存都很小。

按照数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存,二级缓存,部分高端CPU还具有三级缓存,每一级缓存中所储存的全部数据都是下一级缓存的一部分,这三种缓存的技术难度和制造成本是相对递减的,所以其容量也是相对递增的。当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。

缓冲作用

高速缓冲存储器Cache是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。

在Cache中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从Cache中调用,从而加快读取速度。由此可见,在CPU中加入Cache是一种高效的解决方案,这样整个内存储器(Cache+内存)就变成了既有Cache的高速度,又有内存的大容量的存储系统了。

Cache对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与Cache间的带宽引起的。1

运作流程

CPU缓存的运作流程

下面简要描述一个假想的直接映射缓存的工作流程。这个缓存共有四个缓存块,每个块16字节,即4个字,因此共有64字节存储空间。使用写回(Write back)策略以保证数据一致性。

系统启动时,缓存内没有任何数据。之后,数据逐渐被载入或换出缓存。假设在此后某一时间点,缓存和内存布局如右图所示。此时,若处理器执行数据读取指令,控制逻辑依如下流程:

  • (将地址由高至低划分为四个部分:标签、索引、块内偏移、字节偏移。其中块内偏移和字节偏移各占两位,后者在以下操作中不使用。)

  • 用索引定位到相应的缓存块。

  • 用标签尝试匹配该缓存块的对应标签值。如果存在这样的匹配,称为命中(Hit);否则称为未命中(Miss)。

  • 如命中,用块内偏移将已定位缓存块内的特定字取出,送回处理器。

  • 如未命中,先用此块地址(标签+索引)从内存读取数据并载入到当前缓存块,再用块内索引将位于此块内的特定数据单元取出,送回处理器。这里要注意的是,(1)读入的数据会冲掉之前的内容。为保证数据一致性,必须先将数据块内的现有内容写回内存。(2)尽管处理器请求的只是一个字,缓存仍必须在读取的时候把整个数据块都填充满。(3)缓存的读取是按缓存块大小为边界对齐的。对于大小为16字节的缓存块,任何因为0x0001、或0x0002、或0x0003、或0x0004造成的未命中,都会导致位于内存0x0000—0x0003的全部四个字被读入块中。

  • 在右图中,如此时处理器请求的地址在0x0020到0x0023之间,或在0x0004到0x0007之间,或在0x0528到0x052B之间,或在0x05EC到0x05EF之间,均会命中。其余地址则全部未命中。

    而处理器执行数据写入指令时,控制逻辑依如下流程:

  • 用索引定位到相应的缓存块。

  • 用标签尝试匹配该缓存块的对应标签值。其结果为命中或未命中。

  • 如命中,用块内索引定位此块内的目标字。然后直接改写这个字。

  • 如未命中,依系统设计不同可有两种处理策略,分别称为分配写(Write allocate)和非分配写(No-write allocate)。如果是分配写,则先如处理读未命中一样,将未命中数据读入缓存,然后再将数据写到被读入的字单元。如果是非分配写,则直接将数据写回内存。

内容概念

一级缓存

CPU缓存

一级缓存(Level 1 Cache)简称L1 Cache,位于CPU内核的旁边,是与CPU结合最为紧密的CPU缓存,也是历史上最早出现的CPU缓存。由于一级缓存的技术难度和制造成本最高,提高容量所带来的技术难度增加和成本增加非常大,所带来的性能提升却不明显,性价比很低,而且现有的一级缓存的命中率已经很高,所以一级缓存是所有缓存中容量最小的,比二级缓存要小得多。

一般来说,一级缓存可以分为一级数据缓存(Data Cache,D-Cache)和一级指令缓存(Instruction Cache,I-Cache)。