1. cpu缓存的介绍
问:最近经常有朋友问cpu缓存是什么?CPU缓存有哪些类型?电脑知识网推荐文章
答:CPU缓存可以大幅度提升CPU内部数据读取效率,因此是衡量CPU性能的一个重要指标,包括L1 Cache(一级缓存)、L2 Cache(二级缓存)和L3 Cache(三级缓存)三种,其中L1 Cache是CPU第一层高速缓存,由于CPU制造工艺等方面的因素,L1缓存的容量一般都比较小。一般CPU的L1缓存容量通常在32KB~256KB左右。L2 Cache是CPU的第二层高速缓存,L2高速缓存容量对CPU的性能有很大的影响,一般来说是越大越好,现在使用的.CPU的L2 Cache容量一般在256KB~2MB。L3 Cache(三级缓存)能进一步降低内存延迟,也能增强CPU处理大数据量的能力。随着64位处理器的全面普及,出于进一步提升CPU性能的考虑,Intel已经把高速的L3 加入到Itanium 2(安腾2)和P4EE中。
2. CPU也有内存缓存到底是怎么回事
分类: 电脑/网络 >> 电脑常识
解析:
CPU缓存的工作原理
当CPU要读取一个数据时,首先会从缓存(Cache)中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
通过优化的的读取机制,可以使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。
早期的CPU缓存容量很小,并且功能单一,Intel从Pentium时代后把缓存进行了分类,当时集成在CPU内核中的缓存已不足以满足CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上和主板上的缓存等不同类型,于是当时便把CPU内核集成的缓存称为一级缓存(L1 cache),而外部的称为二级缓存(L2 Cache);后来随着生产技术的不断提高,最终二级缓存也被挪进了CPU当中。通常一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了CPU效能。此外,Intel在Pentium 4 CPU中还增加了一种一级追踪缓存,容量为12KB。
L1 cache vs L2 Cache
用于存储数据的缓存部分通常被称为RAM,掉电以后其中的信息就会消失。RAM又分两种,其中一种是静态RAM(SRAM);另外一种是动态RAM(DRAM)。前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM。CPU的L1级缓存通常都是静态RAM,速度非常的快,但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),而且价格也相对较为昂贵(同容量的静态RAM是动态RAM的四倍)。扩大静态RAM作为缓存是一个不太合算的做法,但是为了提高系统的性能和速度又必须要扩大缓存,这就有了一个折中的方法:在不扩大原来的静态RAM缓存容量的情况下,仅仅增加一些高速动态RAM做为L2级缓存。高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,而且成本也较为适中。一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。
二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上存在差异,由此可见二级缓存对CPU的重要性。CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。目前的较高端CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率,从某种意义上说,预取效率的提高,大大降低了生产成本却提供了非常接近理想状态的性能。除非某天生产技术变得非常强,否则内存仍会存在,缓存的性能递增特性也仍会保留。
CPU缓存与内存的关系
既然CPU缓存能够在很大程度上提高CPU的性能,那么,有些朋友可能会问,是不是将来有可能,目前的系统内存将会被CPU取代呢?
答案应该是否定的,首先,尽管CPU缓存的传输速率确实很高,但要完全取代内存的地位仍不可行,这主要是因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,与此同时系统的速度就慢了下来,不过CPU会把这些数据复制到缓存中去,以便下一次不用再到内存中去取。也即是说,随着缓存增大到一定程度,其对CPU性能的影响将越来越小,在性能比上来说,越来越不合算。
就目前缓存容量、成本以及功耗表现来看,还远远无法与内存抗衡,另外从某种意义上来说,内存也是CPU缓存的一种表现形式,只不过在速率上慢很多,然而却在容量、功耗以及成本方面拥有巨大优势。如果内存在将来可以做到足够强的话,反而很有取代CPU缓存的可能。
缓存的读写算法同样重要
即便CPU内部集成的缓存数据交换能力非常强,也仍需要对调取数据做一定的筛选。这是因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据经常是被访问最频繁的。命中率算法中较常用的“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。
小结
高速缓存做为CPU不可分割的一部分,已经融入到性能提升的考虑因素当中,伴随生产技术的进一步发展,缓存的级数还将增加,容量也会进一步提高。作为CPU性能助推器的高速缓存,仍会在成本和功耗控制方面发挥巨大的优势,而性能方面也会取得长足的发展。
3. CPU通过高速缓存Cache对主存的数据存取过程的解释原理
Cache的控制器会预测CPU将要执行的指令,然后通过地址控制器从主存中寻找对应指令所在的地址,然后将这部分地址中所存放的指令存入Cache,并把CPU处理完毕的指令通过同样的方式回传入主存。
4. cpu中高速缓冲存储器cache可以长期存放数据
cpu中高速缓冲存储器cache可以长期存放数据,不可以。
高速缓冲存储器,简称高速缓存或者 Cache,是一种尺寸较小、读写效率介于寄存器和 RAM 型主存储器之间的易失性存储器(即无法永久性存储数据)
5. CPU Cache
title: CPU Cache
date: 2019-11-17 20:20:30
keywords: cache "CPU cache" "三级缓存" 缓存映射 cache原理 多级cache TLB
引入 Cache 的理论基础是程序局部性原理,包括时间局部性和空间局部性。时间局部性原理即最近被CPU访问的数据,短期内CPU 还要访问(时间);空间局部性即被CPU访问的数据附近的数据,CPU短期内还要访问(空间)。因此如果将刚刚访问过的数据缓存在一个速度比主存快得多的存储中,那下次访问时,可以直接从这个存储中取,其速度可以得到数量级的提高。
CPU缓存是(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。
在CPU中加入缓存是一种高效的解决方案,是对于存储器件成本更低,速度更快这两个互相矛盾的目标的一个最优解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
下图是一个典型的存储器层次结构,我们可以看到一共使用了三级缓存
各级存储访问延迟的对比
介于CPU和主存储器间的高速小容量存储器,由静态存储芯片SRAM组成,容量较小但比主存DRAM技术更加昂贵而快速, 接近于CPU的速度。CPU往往需要重复读取同样的数据块, Cache的引入与缓存容量的增大,可以大幅提升CPU内部读取数据的命中率,从而提高系统性能。通常由高速存储器、联想存储器、地址转换部件、替换部件等组成。如图所示。
早期采用外部(Off-chip)Cache,不做在CPU内而是独立设置一个Cache。现在采用片内(On-chip)Cache,将Cache和CPU作在一个芯片上,且采用多级Cache,同时使用L1 Cache和L2 Cache,甚至有L3 Cache。
上图显示了最简单的缓存配置。它对应着最早期使用CPU cache的系统的架构。CPU内核不再直接连接到主内存。所有的数据加载和存储都必须经过缓存。CPU核心与缓存之间的连接是一种特殊的快速连接。在一个简化的表示中,主存和高速缓存连接到系统总线,该系统总线也可用于与系统的其他组件进行通信。我们引入了系统总线(现代叫做“FSB”)。
引入缓存后不久,系统变得更加复杂。高速缓存和主存之间的速度差异再次增大,使得另一个级别的高速缓存不得不被添加进来,它比第一级高速缓存更大且更慢。出于经济原因,仅增加第一级缓存的大小不是一种选择。今天,甚至有机器在生产环境中使用了三级缓存。带有这种处理器的系统如图下所示。随着单个CPU的内核数量的增加,未来的缓存级别数量可能会增加。现在已经出现了拥有四级cache的处理器了。
上图展示了三级缓存的结构。L1d是一级数据cache,L1i是一级指令cache。请注意,这只是一个示意图; 现实中的数据流从core到主存的过程中不需要经过任何更高级别的cache。CPU设计人员有很大的自由来设计cache的接口。对于程序员来说,这些设计选择是不可见的。
另外,我们有拥有多个core的处理器,每个core可以有多个“线程”。核心和线程之间的区别在于,独立的核心具有所有硬件资源的独立的副本,早期的多核处理器,甚至具有单独的第二级缓存而没有第三级缓存。核心可以完全独立运行,除非它们在同一时间使用相同的资源,例如与外部的连接。另一方面,线程们共享几乎所有的处理器资源。英特尔的线程实现只为线程提供单独的寄存器,甚至是有限的,还有一些寄存器是共享的。
一个现代CPU的完整概貌如图所示。
由于cache中对应的都是主存地址,即物理地址,在cqu查看具体数据是否在cache中时,如果CPU传送过来的地址时一个虚拟地址,需要将其转换成实际物理地址再到cache中去寻找。Cache的实现需要TLB的帮助。可以说TLB命中是Cache命中的基本条件。TLB不命中,会更新TLB项,这个代价非常大,Cache命中的好处基本都没有了。在TLB命中的情况下,物理地址才能够被选出,Cache的命中与否才能够达成。
TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存。TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据。
当cpu对数据进行读请求时,CPU根据虚拟地址(前20位)到TLB中查找.TLB中保存着虚拟地址(前20位)和页框号的对映关系,如果匹配到虚拟地址就可以迅速找到页框号(页框号可以理解为页表项),通过页框号与虚拟地址后12位的偏移组合得到最终的物理地址.
如果没在TLB中匹配到虚拟地址,就出现TLB丢失,需要到页表中查询页表项,如果不在页表中,说明要读取的内容不在内存,需要到磁盘读取.
TLB是MMU中的一块高速缓存,也是一种Cache.在分页机制中,TLB中的数据和页表的数据关联,不是由处理器维护,而是由OS来维护,TLB的刷新是通过装入处理器中的CR3寄存器来完成.如果MMU发现在TLB中没有命中,它在常规的页表查找后,用找到的页表项替换TLB中的一个条目.
当进程进行上下文切换时重新设置cr3寄存器,并且刷新tlb.
有两种情况可以避免刷tlb.
第一种情况是使用相同页表的进程切换.
第二种情况是普通进程切换到内核线程.
lazy-tlb(懒惰模式)的技术是为了避免进程切换导致tlb被刷新.
当普通进程切换到内核线程时,系统进入lazy-tlb模式,切到普通进程时退出该模式.
cache是为了解决处理器与慢速DRAM(慢速DRAM即内存)设备之间巨大的速度差异而出现的。cache属于硬件系统,linux不能管理cache.但会提供flush整个cache的接口.
cache分为一级cache,二级cache,三级cache等等.一级cache与cpu处于同一个指令周期.
CPU从来不从DRAM直接读/写字节或字,从CPU到DRAM的每次读或写的第一步都要经过L1 cache,每次以整数行读或写到DRAM中.Cache Line是cache与DRAM同步的最小单位.典型的虚拟内存页面大小为4KB,而典型的Cache line通常的大小为32或64字节.
CPU 读/写内存都要通过Cache,如果数据不在Cache中,需要把数据以Cache Line为单位去填充到Cache,即使是读/写一个字节.CPU 不存在直接读/写内存的情况,每次读/写内存都要经过Cache.
缓存里有的数据,主存中一定存在。
一级缓存中还分数据缓存(data cache,d-cache)和指令缓存(instruction cache,i-cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被cpu访问,所以一级cache间数据时独立的。
一级没有的数据二级可能有也可能没有。因为一级缓存miss会接着访问二级缓存。
一级有二级一定有,三级也一定有。因为一级的数据从二级中读上来的。在一级缺失二级命中时发生。
二级没有的数据三级可能有也可能没有。因为二级确实会接着访问三级缓存。找不到会继续访问主存。
二级有的数据三级一定有。在二级缺失三级命中时,数据会从三级缓存提到二级缓存。
三级没有的数据,主存可能有也可能没有。三级缓存缺失,会访问主存,主存也缺失就要从外存访问数据了。
三级缓存有的数据主存一定有。因为在三级缺失主存命中时,数据会从主存提到三级缓存中来。
一级缓存就是指CPU第一层级的高速缓存,主要是为了缓存指令和缓存数据,一级缓存的容量对CPU性能影响非常大,但是因为成本太高,所以一般容量特别小,也就256KB左右。
二级缓存是CPU第二层级的高速缓存,对于CPU来说,二级缓存容量越大越好,它是直接影响CPU性能的,CPU每个核心都会有自己的缓存,一个CPU的二级缓存容量是所有核心二级缓存容量的总和。
三级缓存就是CPU第三层级的高速缓存,主要是为了降低与内存进行数据传输时的延迟问题,三级缓存与一二级不同,三级缓存只有一个,它是所有核心共享,所以在CPU参数中可以看到,三级缓存相对于其他两级缓存来说都很大。
由于缓存的设置与OS无关且透明,所以对于不同的体系架构下不同的处理器对待缓存区域的处理和方式都不同,不同的处理器也有不同的缓存设置值。从主流的处理器cache大小来看,一般一个cache line的大小都是固定的64B左右,这是经过经验得到的比较合理的大小,一般一级cache大小在数十KB左右,二级cache大小在数十到数百KB左右,而L3 cache大小在数MB左右。
由于三级cache一般来说是运用于拥有多核的处理器,对于单核处理器来说二级cache就能够足够保持够高的cache命中率。所以一般的三级cache一般只针对于多核处理器。L1和L2级cache是处理器核所单独的内容。L1又可以看成是L2的cache。L2可以看成是L3级cache的cache。所以我们分两个部分讨论数据放置与数据淘汰策略。
各级cache间的数据放置策略主要有三种。直接相连映射,全相联映射和组相联映射。将一个主存块存储到唯一的一个Cache行。对应的大小都是一个cache line的大小,一般来说是64B。
多对一的映射关系,但一个主存块只能拷贝到cache的一个特定行位置上去。cache的行号i和主存的块号j有如下函数关系:i=j mod m(m为cache中的总行数)。
可以将一个主存块存储到任意一个Cache行。
主存的一个块直接拷贝到cache中的任意一行上
可以将一个主存块存储到唯一的一个Cache组中任意一个行。
将cache分成u组,每组v行,主存块存放到哪个组是固定的,至于存到该组哪一行是灵活的,即有如下函数关系:cache总行数m=u×v 组号q=j mod u
组间采用直接映射,组内为全相联。硬件较简单,速度较快,命中率较高。是现代处理器中一般所常用的映射方式。
Cache工作原理要求它尽量保存最新数据,当从主存向Cache传送一个新块,而Cache中可用位置已被占满时,就会产生Cache替换的问题。
常用的替换算法有下面三种。
LFU(Least Frequently Used,最不经常使用)算法将一段时间内被访问次数最少的那个块替换出去。每块设置一个计数器,从0开始计数,每访问一次,被访块的计数器就增1。当需要替换时,将计数值最小的块换出,同时将所有块的计数器都清零。
这种算法将计数周期限定在对这些特定块两次替换之间的间隔时间内,不能严格反映近期访问情况,新调入的块很容易被替换出去。
LRU(Least Recently Used,近期最少使用)算法是把CPU近期最少使用的块替换出去。这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。每块也设置一个计数器,Cache每命中一次,命中块计数器清零,其他各块计数器增1。当需要替换时,将计数值最大的块换出。
LRU算法相对合理,但实现起来比较复杂,系统开销较大。这种算法保护了刚调入Cache的新数据块,具有较高的命中率。LRU算法不能肯定调出去的块近期不会再被使用,所以这种替换算法不能算作最合理、最优秀的算法。但是研究表明,采用这种算法可使Cache的命中率达到90%左右。
最简单的替换算法是随机替换。随机替换算法完全不管Cache的情况,简单地根据一个随机数选择一块替换出去。随机替换算法在硬件上容易实现,且速度也比前两种算法快。缺点则是降低了命中率和Cache工作效率。
处理器微架构访问Cache的方法与访问主存储器有类似之处。主存储器使用地址编码方式,微架构可以地址寻址方式访问这些存储器。Cache也使用了类似的地址编码方式,微架构也是使用这些地址操纵着各级Cache,可以将数据写入Cache,也可以从Cache中读出内容。只是这一切微架构针对Cache的操作并不是简单的地址访问操作。为简化起见,我们忽略各类Virtual Cache,讨论最基础的Cache访问操作,并借此讨论CPU如何使用TLB完成虚实地址转换,最终完成对Cache的读写操作。
Cache的存在使得CPU Core的存储器读写操作略微显得复杂。CPU Core在进行存储器方式时,首先使用EPN(Effective Page Number)进行虚实地址转换,并同时使用CLN(Cache Line Number)查找合适的Cache Block。这两个步骤可以同时进行。在使用Virtual Cache时,还可以使用虚拟地址对Cache进行寻址。为简化起见,我们并不考虑Virtual Cache的实现细节。
EPN经过转换后得到VPN,之后在TLB中查找并得到最终的RPN(Real Page Number)。如果期间发生了TLB Miss,将带来一系列的严重的系统惩罚,我们只讨论TLB Hit的情况,此时将很快获得合适的RPN,并依此得到PA(Physical Address)。
在多数处理器微架构中,Cache由多行多列组成,使用CLN进行索引最终可以得到一个完整的Cache Block。但是在这个Cache Block中的数据并不一定是CPU Core所需要的。因此有必要进行一些检查,将Cache Block中存放的Address与通过虚实地址转换得到的PA进行地址比较(Compare Address)。如果结果相同而且状态位匹配,则表明Cache Hit。此时微架构再经过Byte Select and Align部件最终获得所需要的数据。如果发生Cache Miss,CPU需要使用PA进一步索引主存储器获得最终的数据。
由上文的分析,我们可以发现,一个Cache Block由预先存放的地址信息,状态位和数据单元组成。一个Cache由多个这样的Cache Block组成,在不同的微架构中,可以使用不同的Cache Block组成结构。我们首先分析单个Cache Block的组成结构。单个Cache Block由Tag字段,状态位和数据单元组成,如图所示。
其中Data字段存放该Cache Block中的数据,在多数处理器微架构中,其大小为32或者64字节。Status字段存放当前Cache Block的状态,在多数处理器系统中,这个状态字段包含MESI,MOESI或者MESIF这些状态信息,在有些微架构的Cache Block中,还存在一个L位,表示当前Cache Block是否可以锁定。许多将Cache模拟成SRAM的微架构就是利用了这个L位。有关MOESIFL这些状态位的说明将在下文中详细描述。在多核处理器和复杂的Cache Hierarchy环境下,状态信息远不止MOESIF。
RAT(Real Address Tag)记录在该Cache Block中存放的Data字段与那个地址相关,在RAT中存放的是部分物理地址信息,虽然在一个CPU中物理地址可能有40,46或者48位,但是在Cache中并不需要存放全部地址信息。因为从Cache的角度上看,CPU使用的地址被分解成为了若干段,如图所示。
这个地址也可以理解为CPU访问Cache使用的地址,由多个数据段组成。首先需要说明的是Cache Line Index字段。这一字段与Cache Line Number类似,CPU使用该字段从Cache中选择一个或者一组Entry。
Bank和Byte字段之和确定了单个Cache的Data字段长度,通常也将这个长度称为Cache 行长度,上图所示的微架构中的Cache Block长度为64字节。目前多数支持DDR3 SDRAM的微架构使用的Cache Block长度都是64字节。部分原因是由于DDR3 SDRAM的一次Burst Line为8,一次基本Burst操作访问的数据大小为64字节。
在处理器微架构中,将地址为Bank和Byte两个字段出于提高Cache Block访问效率的考虑。Multi-Bank Mechanism是一种常用的提高访问效率的方法,采用这种机制后,CPU访问Cache时,只要不是对同一个Bank进行访问,即可并发执行。Byte字段决定了Cache的端口位宽,在现代微架构中,访问Cache的总线位宽为64位或者为128位。
剩余的字段即为Real Address Tag,这个字段与单个Cache中的Real Address Tag的字段长度相同。CPU使用地址中的Real Address Tag字段与Cache Block的对应字段和一些状态位进行联合比较,判断其访问数据是否在Cache中命中
如果cache miss,就去下一级cache或者主存中去查找数据,并将查找到的数据采用上面的数据淘汰策略将数据替换到cache中。
由于在发生cache miss时会产生数据替换,在运行过程中缓存的数据也可能会被修改。所以需要一个策略来保持数据在缓存和主存间的一致性。
Cache写机制分为write through和write back两种。
6. CPU缓存的工作原理
CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入Cache中,可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。
正是这样的读取机制使CPU读取Cache的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在Cache中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先Cache后内存。 前面是把Cache作为一个整体来考虑的,下面分类分析。Intel从Pentium开始将Cache分开,通常分为一级高速缓存L1和二级高速缓存L2。在以往的观念中,L1 Cache是集成在CPU中的,被称为片内Cache。在L1中还分数据Cache(D-Cache)和指令Cache(I-Cache)。它们分别用来存放数据和执行这些数据的指令,而且两个Cache可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。
在P4处理器中使用了一种先进的一级指令Cache——动态跟踪缓存。它直接和执行单元及动态跟踪引擎相连,通过动态跟踪引擎可以很快地找到所执行的指令,并且将指令的顺序存储在追踪缓存里,这样就减少了主执行循环的解码周期,提高了处理器的运算效率。
以前的L2 Cache没集成在CPU中,而在主板上或与CPU集成在同一块电路板上,因此也被称为片外Cache。但从PⅢ开始,由于工艺的提高L2 Cache被集成在CPU内核中,以相同于主频的速度工作,结束了L2 Cache与CPU大差距分频的历史,使L2 Cache与L1 Cache在性能上平等,得到更高的传输速度。L2Cache只存储数据,因此不分数据Cache和指令Cache。在CPU核心不变化的情况下,增加L2 Cache的容量能使性能提升,同一核心的CPU高低端之分往往也是在L2 Cache上做手脚,可见L2 Cache的重要性。CPU的L1 Cache与L2 Cache惟一区别在于读取顺序。 CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为80%。也就是说CPU从L1 Cache中找到的有用数据占数据总量的80%,剩下的20%从L2 Cache读取。在一些高端领域的CPU(像Intel的Itanium)中,我们常听到L3 Cache,它是为读取L2 Cache后未命中的数据设计的—种Cache。
为了保证CPU访问时有较高的命中率Cache中的内容应该按一定的算法替换,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出Cache,提高Cache的利用率。缓存技术的发展
总之,在传输速度有较大差异的设备间都可以利用Cache作为匹配来调节差距,或者说是这些设备的传输通道。在显示系统、硬盘和光驱,以及网络通讯中,都需要使用Cache技术。但Cache均由静态RAM组成,结构复杂,成本不菲,使用现有工艺在有限的面积内不可能做得很大,不过,这也正是技术前进的源动力,有需要才有进步! 随着CPU制造工艺的发展,二级缓存也能轻易的集成在CPU内核中,容量也在逐年提升。用集成在CPU内部与否来定义一、二级缓存,已不确切。而且随着二级缓存被集成入CPU内核中,以往二级缓存与CPU大差距分频的情况也被改变,此时其以相同于主频的速度工作,可以为CPU提供更高的传输速度。同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对于CPU的重要性。
CPU产品中,一级缓存的容量基本在4KB到64KB之间,二级缓存的容量则分为128KB、256KB、512KB、1MB、2MB等。一级缓存容量各产品之间相差不大,而二级缓存容量则是提高CPU性能的关键。二级缓存容量的提升是由CPU制造工艺所决定的,容量增大必然导致CPU内部晶体管数的增加,要在有限的CPU面积上集成更大的缓存,对制造工艺的要求也就越高。
双核心CPU的二级缓存比较特殊,和以前的单核心CPU相比,最重要的就是两个内核的缓存所保存的数据要保持一致,否则就会出现错误,为了解决这个问题不同的CPU使用了不同的办法。
7. cache是CPU缓存吗
CPU缓存是为更快速的连接CPU与内存而存在的中间媒介。
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多,但是交换速度却比内存要快得多。
高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。
8. CPU的缓存有什么作用
分类: 电脑/网络 >> 硬件
解析:
楼上说的太学术,我简单点给你说.看了保证你完全了解什么是缓存和他们的区别
cpu缓存现在都分两个级别,一及缓存称L1 cache,二级缓存称为L2 cache.
当然对于不同cpu,两及缓存的作用是不同的.但总体来说,缓存是储存cpu急需处理的数据的地方,当cpu要处理东西的时候,缓存中就开始储存这些数据,由于缓存速度非常之高,所以,cpu读取这些数据的速度就相当快.
由于缓存容量相当小,但是当缓存中的数据处理完了又没有来得及重新添满的时候,或者是缓存中的数据不是cpu马上要处理的数据的时候,cpu就只有跳过缓存,直接村内存读取,内存的速度要相对慢得多,所以这个时候cpu整体的速度就下降了.
当然,AMD和intel在缓存上的结构完全不同,这个造成了为什么intel的主流处理器的L2 cache缓存在2-4Mb,而AMD的L2 cache只有256kb-512kb.这个我们就要说到他们L1 cache的区别了.
intel的L1中不储存cpu要处理的实际数据,他储存的都是L2中数据的目录,也就是intel的cpu要处理数据的时候先要访问L1,为的是了解他要储存的实际数据在L2中具体的位置.这个大大减少了cpu寻找L2数据的时间.比喻起来,intel的L2是一个仓库,L1关于就是这个仓库中储存东西具 *** 置的目录.
AMD完全不同,L1中就储存实际数据,L2也储存实际数据,当L1中的数据用完了的时候,或者L1不能装的过大的数据的时候,cpu就直接处理L2中的数据.比喻起来,AMD的L1是个小仓库,L2是个大仓库.
然后是为什么他们对L2需求不同.
AMD的很好理解,他cpu处理数据的时候是有续处理的,先处理L1,处理完了再处理L2,数据一个接一个.
intel采取的是则是乱处理方式,cpu不会衣顺序处理数据,而是随即挑选数据来处理,当他随便挑选的数据在L2中时,他就读取L1了解数据在L2的位置,然后处理这个数据,但是当数据不在L2中时,就读取内存.
这个造就了他们L2大小不同,intel的处理方式像是一个人随机的在扔飞标,飞标落在标盘每个地方的几率是相同的,标盘内的红心就是L2的数据,标盘的其他地方是内存.前面说了,L2中数据是高速的,只有处理L2的,才能更快,否则要慢很多。所以,一个随机扔飞标的人为了让飞标落在红心的几率更大,最好的办法就是加大红心的面积,也就是L2.因此为了提高cpu的速度,intel需要很大的红心,也就是L2.
AMD则不同,他是一个接一个处理的,不是随机的扔飞标,他要考虑的只是L1和L2中单个数据的大小,因为cpu要处理的数据几乎都在0-2Mb之间,0-128kb的占了50%,128-256kb占了25%,256-512的占了24%,大于512kb的只占了1%.
因此,512kb就能满足cpu几乎所有的需求了,只有处理那些1%的大于512kb的数据的时候AMD才会访问内存.因此AMD需求很小的L2.