那些城市那些花

导航

指令缓存

CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。
最早先的CPU缓存是个整体的,而且容量很低,英特尔公司从Pentium时代开始把缓存进行了分类。当时集成在CPU内核中的缓存已不足以满 足CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上或主板上的缓存,此时就把 CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。一级缓存中还分指令缓存(I-Cache)和数据缓存(D-Cache)。二者分别用来存放数据和执行这些数据的指令,提高了处理器效能。英特尔公司在推出Pentium 4处理器时,还新增了一种一级追踪缓存,容量为12KB.
随着CPU制造工艺的发展,二级缓存也能轻易集成在CPU内核中,容量也在逐年提升。再用集成在CPU内部与否来定义一、二级缓存,已不确切。而且随着二级缓存被集成入CPU内核中,以往二级缓存与CPU大差距分频的情况也被改变,此时其以相同于主频的速度工作,可以为CPU提供更高的传输速度。

二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对于CPU的重要性。CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。
较高端的CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约 5%的数据需要从内存中调用,这进一步提高了CPU的效率。

Intel二级缓存
Intel的双核心CPU主要有Pentium D、Pentium EE、Core Duo三种,其中Pentium D、Pentium EE的二级缓存方式完全相同。Pentium D和Pentium EE的二级缓存都是CPU内部两个内核具有互相独立的二级缓存,其中,8xx系列的Smithfield核心CPU为每核心1MB,而9xx系列的 Presler核心CPU为每核心2MB。这种CPU内部的两个内核之间的缓存数据同步是依靠位于主板北桥芯片上的仲裁单元通过前端总线在两个核心之间传输来实现的,所以其数据延迟问题比较严重,性能并不尽如人意。
Core Duo使用的核心为Yonah,它的二级缓存则是两个核心共享2MB的二级缓存,共享式的二级缓存配合Intel的“Smartcache”共享缓存技术,实现了真正意义上的缓存数据同步,大幅度降低了数据延迟,减少了对前端总线的占用,性能表现不错,是双核心处理器上最先进的二级缓存架构。今后Intel的双核心处理器的二级缓存都会采用这种两个内核共享二级缓存的“Smart cache”共享缓存技术。

AMD双二级缓存
Athlon 64 X2 CPU的核心主要有Manchester和Toledo两种,他们的二级缓存都是CPU内部两个内核具有互相独立的二级缓存,其中,Manchester 核心为每核心512KB,而Toledo核心为每核心1MB。处理器内部的两个内核之间的缓存数据同步是依靠CPU内置的System Request Interface(系统请求接口,SRI)控制,传输在CPU内部即可实现。这样一来,不但CPU资源占用很小,而且不必占用内存总线资源,数据延迟也 比Intel的Smithfield核心和Presler核心大为减少,协作效率明显胜过这两种核心。不过,由于这种方式仍然是两个内核的缓存相互独立, 从架构上来看也明显不如以Yonah核心为代表的Intel的共享缓存技术Smart Cache。

二级缓存事项
缓存是数据由内存通往CPU的桥梁。它的速度比内存快得多,但是容量也比内存小的多。同时缓存依据读取速度和容量进一步分为一级和二级。在CPU需要数据的时候,遵循一级缓存—〉二级缓存—〉内存的顺序,从而尽量提高读取速度。这样“缓存+内存”的系统就同时兼具了速度和容量的优点。二级缓存容量对性能的影响是渐渐减弱的,当二级缓存从没有增长到128KB时,带来的性能提升可能是直线上升的。但是当它从2MB增长到4MB的时候,可能使用者甚至感觉不到性能的提升。这是因为在当前CPU所处理数据的过程中,几乎无时不刻需要用到128KB以下的缓存,但是需要用到1MB以上缓存的时候很少(2%左右)。因此虽然二级缓存越涨越大,实际上对CPU性能的影响却是越来越小的。因此,完全不必要盲目追求二级缓存的高容量,够用就好。

指令缓存和指令追踪缓存
缓存存储的内容不止是数据,也包括指令,但是由于指令具备以下性质,导致指令缓存的机制远没有数据缓存那么复杂:
需要执行的代码量通常都比较固定,和问题的复杂度有关程序指令通常由编译器产生,产生过程中就能得到一定的优化。相比数据存取机制,程序流程的可预测度要强得多,更有利于prefeching 代码一般都具有很好的空间和时间局部性。
随着技术的发展,CPU的执行过程都流水化了,指令的执行都是分成阶段的,一开始指令安心等在指令缓存中,等待被处理单元执行时才取出,然后解码,准备相关参数,最后执行。这种过程有两个缺点,首先某些 x86指令非常复杂,经由解码器时需耗费太多的时间来解码,尤其是以X86为代表的CISA家族,最糟的情况下所有解码单元忙于解码复杂指令,以至于阻碍处理器的执行管道。另一个问题则是如果在小循环的代码中,每当这些代码进入执行路径几次,编码就得进行几次,造成时间的浪费。而且流水管线越做越长,这也就意味着一旦流水线遭遇不测发生中断,或者出现分枝预测的错误,造成的延时就会很大。可以说,这算是一个一直困扰CPU设计人员的问题。
从Pentium4开始,Intel采用了一种新的缓存类型,叫tracecache,俗称指令追踪缓存。它不是用来和一般的指令缓存一样存储指令的原始字节序列,而是被用来存储解码单元送出来的微操作。
指令追踪缓存位于指令解码器和内核第一层计算管线之间,指令在解码单元内获取和解码之后,微操作必须先经过追踪缓存的存储和和输出,才能到达内核第一层计算管线被执行。这样可以有效弥补上述两个缺点,因为此时所取的都是解码后的指令,还避免了指令的重复调用。更重要的是,追踪缓存确保处理器管道持续处于指令满载的状态,避免执行路径由于解码单元延迟的情况。应该说,指令追踪缓存确实是一个值得称道的技术。
当然,这些分析都是基于L1I缓存分析的,至于L2的缓存,因为是数据和指令统一存储,自然就不可能作出和追踪缓存类似的架构了。

CPU的L1指令缓存和L1高速缓存的关系
L1高速缓存,也就是一级高速缓存。CPU内置了高速缓存,可以提高CPU的运行效率。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。采用回写(Write Back)结构的高速缓存。它对读和写操作均有可提供缓存。而采用写通(Write-through)结构的高速缓存,仅对读操作有效。在486以上的计算机中基本采用了回写式高速缓存。在流行的处理器中,奔腾Ⅲ和Celeron处理器拥有32KB的L1高速缓存,奔腾4为8KB,而AMD的Duron和Athlon处理器的L1高速缓存高达128KB。
L2高速缓存,指CPU第二层的高速缓存,第一个采用L2高速缓存的是奔腾 Pro处理器,它的L2高速缓存和CPU运行在相同频率下的,但成本昂贵,市场生命很短,所以其后奔腾 II的L2高速缓存运行在相当于CPU频率一半下的。接下来的Celeron处理器又使用了和CPU同速运行的L2高速缓存,现在流行的CPU,无论是AthlonXP和奔腾4,其L2高速缓存都是和CPU同速运行的。除了速度以外,L2高速缓存容量也会影响CPU的性能,原则是越大越好,现在家庭用CPU容量最大的是512KB,而服务器和工作站上用CPU的L2高速缓存更高达1MB-3MB
CPU L1缓存首先是CPU的内部结构决定,CPU是由硅晶原片切割而成的,一块晶原片切割的CPU块有限,所以一个CPU的结构要非常合理地搭配L1,L2缓存大小,P4640比P4630高频,所以内部结构有所不同。而L1缓存的作用是数据交换的“超高速”通道,所以其大小不是重点,内部参数才是关键,只要参数(CL值,延迟等)够快,完全可以弥补大小的差距,像P-M 1.7G的CPU由于L1缓存的参数够高,虽然容量有不足,但在性能测试上L1缓存的速度比P4 630快的多。所以不必刻意要求L1缓存大小。(另外,CPU的缓存速度比一般内存快的多,大概快几十倍)
高速缓存英文是cache,是一种特殊的存储器子系统,其中复制了频繁使用的数据,以利于CPU快速访问。存储器的高速缓冲存储器存储了频繁访问的 RAM 位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。因为高速缓冲存储器总是比主RAM存储器速度快,所以当 RAM 的访问速度低于微处理器的速度时,常使用高速缓冲存储器。
------

注释:

CL(CAS Latency)
CAS的延迟时间,这是纵向地址脉冲的反应时间,也是在一定频率下衡量支持不同规范的内存的重要标志之一。内存负责向CPU提供运算所需的原始数据,而目前CPU运行速度超过内存数据传输速度很多,因此很多情况下CPU都需要等待内存提供数据,这就是常说的“CPU等待时间”。内存传输速度越慢,CPU等待时间就会越长,系统整体性能受到的影响就越大。因此,快速的内存是有效提升CPU效率和整机性能的关键之一。
 

 

posted on 2019-04-11 14:03  那些城市那些花  阅读(978)  评论(0编辑  收藏  举报