一级缓存

一级缓存都内置在CPU内部并与CPU同速运行,可以有效的提高CPU的运行效率。一级缓存越大,CPU的运行效率越高,但受到CPU内部结构的限制,一级缓存的容量都很小。

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对比中,分别对比各种功能 缓存大小才有一定的意义。

 

编辑本段作用

但是一级缓存和 二级缓存的大,它究竟有多少好处呢?你得告诉我们经销商,实际上你得用最普通的话跟他讲。所以我们给他们打个比方,说这个就好比你开汽车的时候,后备箱是整个的 二级缓存,假如说扶手里面有一个小箱子,那是你的一级缓存。一级缓存大好在哪里呢?就是你随时开车的时候,随时在里面都可以取东西了。假如你一级缓存小的话,你还得把车停下来,到后备箱里取东西。
首先我们来简单了解一下一级缓存。目前所有主流 处理器大都具有一级缓存和 二级缓存,少数高端处理器还集成了 三级缓存。其中,一级缓存可分为一级 指令缓存和一级 数据缓存。一级 指令缓存用于暂时 存储并向CPU递送各类运算指令;一级 数据缓存用于暂时 存储并向CPU递送运算所需数据,这就是一级缓存的作用。
那么, 二级缓存的作用又是什么呢?简单地说, 二级缓存就是一级缓存的缓冲器:一级缓存制造成本很高因此它的 容量有限,二级缓存的作用就是 存储那些CPU处理时需要用到、一级缓存又无法存储的数据。同样道理, 三级缓存内存可以看作是 二级缓存的缓冲器,它们的 容量递增,但单位制造成本却递减。需要注意的是, 无论是二级缓存、 三级缓存 还是 内存 都不能存储 处理器 操作的原始 指令 ,这些指令只能存储在CPU的一级 指令缓存 中,而余下的二级缓存、三级缓存和内存仅用于存储CPU所需数据。

 

编辑本段数据缓存设计

根据工作原理的不同,目前主流 处理器所采用的一级 数据缓存又可以分为实数据读写缓存和数据代码 指令 追踪缓存2种,它们分别被AMD和Intel所采用。不同的一级 数据缓存设计对于 二级缓存容量的需求也各不相同,下面让我们简单了解一下这两种一级数据缓存设计的不同之处。

AMD缓存设计

AMD采用的一级缓存设计属于传统的“实数据读写缓存”设计。基于该架构的一级 数据缓存主要用于 存储CPU最先读取的数据;而更多的读取数据则分别存储在 二级缓存系统内存当中。做个简单的假设,假如 处理器需要读取“AMD ATHLON 64 3000+ IS GOOD”这一串数据(不记空格),那么首先要被读取的“AMDATHL”将被 存储在一级 数据缓存中,而余下的“ON643000+ISGOOD”则被分别 存储在二级缓存和系统 内存当中(如下图所示)。
需要注意的是,以上假设只是对AMD 处理器一级 数据缓存的一个抽象描述,一级数据缓存和 二级缓存所能存储的数据长度完全由缓存 容量的大小决定,而绝非以上假设中的几个 字节。“实数据读写缓存”的优点是数据读取直接快速,但这也需要一级 数据缓存具有一定的 容量,增加了 处理器的制造难度(一级数据缓存的单位制造成本较 二级缓存高)。

Intel缓存设计

自P4时代开始,Intel开始采用全新的“数据代码指令追踪缓存”设计。基于这种架构的一级 数据缓存不再 存储实际的数据,而是存储这些数据在 二级缓存中的 指令代码(即数据在二级缓存中存储的起始 地址)。假设处理器需要读取“INTEL P4 IS GOOD”这一串数据(不记空格),那么所有数据将被 存储二级缓存中,而一级数据代码指令追踪缓存需要 存储的仅仅是上述数据的起始地址(如下图所示)。
由于一级 数据缓存不再存储实际数据,因此“数据代码指令追踪缓存”设计能够极大地降低CPU对一级数据缓存 容量的要求,降低 处理器的生产难度。但这种设计的弊端在于数据读取效率较“实数据读写缓存设计”低,而且对 二级缓存 容量的依赖性非常大。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值