减小字体
增大字体
作者:佚名 来源:本站整理 发布时间:2011-03-30 16:35:47
CPU 缓存(Cache Memoney)是位于 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 内核集成的缓存,称为一级缓存。而外部的称为二级缓存。一级缓存中,还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被 CPU 访问,减少了争用 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 的效率。
为了保证 CPU 访问时有较高的命中率,缓存中的内容应该按一定的算法替换。一种较常用的算法,是 近 少使用算法(LRU 算法),它是将 近一段时间内 少被访问过的行淘汰出局。因此,需要为每行设置一个计数器,LRU 算法是把命中行的计数器清零,其他各行计数器加 1。当需要替换时,淘汰行计数器计数值 大的数据行出局。这是一种高效、科学的算法。其计数器清零过程,可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。
CPU 产品中,一级缓存的容量基本在 4KB 到 64KB 之间,二级缓存的容量则分为 128KB、256KB、512KB、1MB、2MB 等。一级缓存容量,各产品之间相差不大,而二级缓存容量,则是提高 CPU 性能的关键。二级缓存容量的提升,是由 CPU 制造工艺所决定的,容量增大必然导致 CPU 内部晶体管数的增加,要在有限的 CPU 面积上集成更大的缓存,对制造工艺的要求也就越高。