|
CPU片上高速缓存是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。
众所周知,随着CPU 内核的尺寸与带宽技术的进步,很快就会造成投资回报的递减。因此,当核心的尺寸工艺收缩到一个小尺度上后,出于成本方面的考虑,芯片制造商通常的选择有如下三种:生产更小的芯片、增加大量缓存、增加更多内核。选择更大的片上缓存则是其中性价比较高的一种选择,这也是为何从1990年代以来,从RISC处理器到x86处理器的制造商均不停地增加CPU片上缓存的原因。
缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。 缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存,以后对整块数据的读取都从缓存中进行,不必再调用内存。
正是这样的读取机制使CPU读取缓存的命中率非常高(现在大多数CPU可达90%以上),只有5%左右需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。
在大多数情况下,x86架构的多核CPU的内核拥有独立的L1缓存,共享L2缓存、内存子系统、中断子系统和外设。因此,系统设计师需要让每个内核独立访问某种资源,并确保资源不会被其他内核上的应用程序争抢。
在上世纪90年代,x86架构下的CPU大多只有4KB到32KB的一级片上缓存,128KB到256KB的二级缓存。直到1998年奔腾2至强400的出现,才实现了x86架构上的512KB二级缓存(更晚才出现1MB的二级缓存)——作为对比,1997年HP推出的PA-8500的二级缓存则是1.5MB,且其他工艺和参数指标均远超Xeon。
到2008年,在最新的6核至强(研发代号Dunnington)上,已经变成每两个内核共用3MB二级缓存,六个内核共享16MB三级缓存;而2007年IBM发布的双内核Power6上,每个核心拥有独立的4MB二级缓存,两个内核共享32MB三级缓存,可以看到与10年前相比,单纯就缓存容量而言,RISC与x86处理器之间的较大差距已经逐渐缩小。在成本允许的前提下,更大的片上缓存将进一步出现在x86处理器上。(谢文砚)
|