什么是一级缓存

   CPU缓存(Cache Memory)是位于CPU与 内存之间的临时 存储器,
它的容量比内存小的多可是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,由于CPU运算速度要比内存读
写速度快不少,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短期内CPU即将访问的,
当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。因而可知,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓
存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是由于CPU的数据交换顺序和CPU与缓存间的带
宽引发的。
   
缓存的工做原理是当CPU要读取一个数据时,首先从缓存中查找,若是找到就当即读取并送给CPU处理;若是没有找到,就用相对慢的速度从内存中读取并送给
CPU处理,同时把这个数据所在的数据块调入缓存中,可使得之后对整块数据的读取都从缓存中进行,没必要再调用内存。

   
正是这样的读取机制使CPU读取缓存的命中率很是高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%
须要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来讲,CPU读取数据的顺序是先缓存后内存。

    目前缓存基本上都是采用SRAM存储器,SRAM是英文St atic
RAM的缩写,它是一种具备静志存取功能的存储器,不须要刷新电路即能保存它内部存储的数据。不像DRAM内存那样须要刷新电路,每隔一段时间,固定要对
DRAM刷新充电一次,不然内部的数据即会消失,所以SRAM具备较高的性能,可是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存能够
设计为较小的体积,可是SRAM却须要很大的体积,这也是目前不能将缓存容量作得太大的重要缘由。它的特色概括以下:优势是节能、速度快、没必要配合内存刷
新电路、可提升总体的工做效率,缺点是集成度低、相同的容量体积较大、并且价格较高,只能少许用于关键性系统以提升效率。

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

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

    通常来讲,一级缓存能够分为一级数据缓存(Data
Cache,D-Cache)和一级指令缓存(Instruction
Cache,I-Cache)。两者分别用来存放数据以及对执行这些数据的指令进行即时解码,并且二者能够同时被CPU访问,减小了争用Cache所形成
的冲突,提升了处理器效能。目前大多数CPU的一级数据缓存和一级指令缓存具备相同的容量,例如AMD的Athlon
XP就具备64KB的一级数据缓存和64KB的一级指令缓存,其一级缓存就以64KB+64KB来表示,其他的CPU的一级缓存表示方法以此类推。

    Intel的采用NetBurst架构的CPU(最典型的就是Pentium
4)的一级缓存有点特殊,使用了新增长的一种一级追踪缓存(Execution Trace
Cache,T-Cache或ETC)来替代一级指令缓存,容量为12KμOps,表示能存储12K条即12000条解码后的微指令。一级追踪缓存
与一级指令缓存的运行机制是不相同的,一级指令缓存只是对指令做即时的解码而并不会储存这些指令,而一级追踪缓存一样会将一些指令做解码,这些指令称为微
指令(micro-ops),而这些微指令能储存在一级追踪缓存以内,无需每一次都做出解码的程序,所以一级追踪缓存能有效地增长在高工做频率下对指令的
解码能力,而μOps就是micro-ops,也就是微型操做的意思。它以很高的速度将μops提供给处理器核心。Intel
NetBurst微型架构使用执行跟踪缓存,将×××从执行循环中分离出来。这个跟踪缓存以很高的带宽将uops提供给核心,从本质上适于充分利用软件中
的指令级并行机制。Intel并无公布一级追踪缓存的实际容量,只知道一级追踪缓存能储存12000条微指令(micro-ops)。因此,咱们不能简
单地用微指令的数目来比较指令缓存的大小。实际上,单核心的NetBurst架构CPU使用8Kμops的缓存已经基本上够用了,多出的
4kμops能够大大提升缓存命中率。而若是要使用超线程技术的话,12KμOps就会有些不够用,这就是为何有时候Intel处理器在使
用超线程技术时会致使性能降低的重要缘由。

    例如Northwood核心的一级缓存为8KB+12KμOps,就表示其一级数据缓存为8KB,一级追踪缓存为12KμOps;而 Prescott核心的一级缓存为16KB+12KμOps,就表示其一级数据缓存为16KB,一级追踪缓存为12KμOps。在这里 12KμOps绝对不等于12KB,单位都不一样,一个是μOps,一个是Byte(字节),并且两者的运行机制彻底不一样。因此那些把 Intel的CPU一级缓存简单相加,例如把Northwood核心说成是20KB一级缓存,把Prescott核心说成是28KB一级缓存,而且据此认 为Intel处理器的一级缓存容量远远低于AMD处理器128KB的一级缓存容量的见解是彻底错误的,两者不具备可比性。在架构有必定区别的CPU对比 中,不少缓存已经难以找到对应的东西,即便相似名称的缓存在设计思路和功能定义上也有区别了,此时不能用简单的算术加法来进行对比;而在架构极为近似的 CPU对比中,分别对比各类功能缓存大小才有必定的意义。
相关文章
相关标签/搜索