CPU缓存(Cache Memory)是位於CPU与记忆体之间的临时存储器, 它的容量比记忆体小的多但是交换速度却比记忆体要快得多。缓存的出现主要是为了解决CPU运算速度与记忆体读写速度不匹配的矛盾,因为CPU运算速度要比 记忆体读 写速度快很多,这样会使CPU花费很长时间等待资料到来或把资料写入记忆体。在缓存中的资料是记忆体中的一小部分,但这一小部分是短时间内CPU即将访问 的, 当CPU调用大量资料时,就可避开记忆体直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内记忆体(缓 存 +记忆体)就变成了既有缓存的高速度,又有记忆体的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的资料交换顺序和CPU与缓存间的 带宽 引起的。
缓存的工作原理是当CPU要读取一个资料时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从记忆体中读取 并送给 CPU处理,同时把这个资料所在的资料块调入缓存中,可以使得以后对整块资料的读取都从缓存中进行,不必再调用记忆体。
CPU在缓存中找到有用的资料被称为命中,当缓存中没有CPU所需的资料时(这时称为未命中),CPU才访问记忆体。从理论上讲,在一颗拥有二级 缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用资料占资料总量的80%,剩下的20%从二级缓存中读取。由於不能准 确预测将要执行的资料,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的资料占总数据的16%)。那麼还有的资料就不得不从记忆体调用,但这已 经 是一个相当小的比例了。目前的较高端的CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的资料设计的—种缓存,在拥有三级缓存的CPU中,只有约 5%的资料需要从记忆体中调用,这进一步提高了CPU的效率。
目前缓存基本上都是采用SRAM记忆体,SRAM是英文Static 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缓存是个整体的,而且容量很低,英代尔公司从Pentium时代开始把缓存进行了分类。当时集成在CPU内核中的缓存已不足以满足 CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上或主板上 的缓存,此时就把 CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。二者分别用来存放资料和执行这些资料的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处 理器效能。英代尔公司在推出Pentium 4处理器时,用新增的一种一级追踪缓存替代指令缓存,容量为12KμOps,表示能存储12K条微指令。
随著CPU制造工艺的发展,二级缓存也能轻易的集成在CPU内核中,容量也在逐年提升。现在再用集成在CPU内部与否来定义一、二级缓存,已不 确切。而且随著二级缓存被集成入CPU内核中,以往二级缓存与CPU大差距分频的情况也被改变,此时其以相同於主频的速度工作,可以为CPU提供更高的传 输速度。
二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对於CPU的重要性。
为了保证CPU访问时有较高的命中率,缓存中的内容应该按一定的演算法替换。一种较常用的演算法是“最近最少使用演算法”(LRU演算法),它是将最 近 一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU演算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数 器 计数值最大的资料行出局。这是一种高效、科学的演算法,其计数器清零过程可以把一些频繁调用后再不需要的资料淘汰出缓存,提高缓存的利用率。
CPU产品中,一级缓存的容量基本在4KB到64KB之间,二级缓存的容量则分为128KB、256KB、512KB、1MB、2MB等。一级 缓存容量各产品之间相差不大,而二级缓存容量则是提高CPU性能的关键。二级缓存容量的提升是由CPU制造工艺所决定的,容量增大必然导致CPU内部晶体 管数的增加,要在有限的CPU面积上集成更大的缓存,对制造工艺的要求也就越高。
L2=2MB x2 是否跟L2=4MB一样快?
不是!详情请看以下的文章:
多核心CPU的二级缓存比较特殊,和以前的单核心CPU相比,最重要的就是多个内核的缓存所保存的资料要保持一致,否则就会出现错误,为了解决这个问题不同的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的“Smart cache”共用缓存技术,实现了真正意义上的缓存资料同步,大幅度降低了资料延迟,减少了对前端汇流排的占用,性能表现不错,是目前双核心处理器上最先 进 的二级缓存架构。今后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。
参考资料
绝对原创