
CPU缓存:通过优化的读取机制,CPU读取缓存的命中率可以很高(大部分CPU可以达到90%左右),也就是说CPU下次读取的数据有90%在缓存中,只有10%左右需要从内存中读取。这大大节省了CPU直接读取内存的时间,也使得CPU在读取数据时基本上不需要等待。
一般来说,CPU读取数据的顺序是先缓存再内存。
CPU内核的集成缓存称为L1缓存,而外部缓存称为L2缓存。后来随着生产技术的不断进步,终于把二级缓存搬进了CPU。通常一级缓存也分为数据缓存(D-Cache)和指令缓存(I-Cache)。它们分别用于存储数据和执行这些数据的指令,并且可以同时被CPU访问,减少了争用缓存带来的冲突,提高了CPU效率。
CPU的一级缓存通常是静态RAM,速度很快,但是静态RAM的集成度低(存储同样的数据,静态RAM的体积是动态RAM的6倍),价格也比较贵(同样容量的静态RAM是动态RAM的4倍)。
扩充静态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的效率。从某种意义上说,预取效率的提高大大降低了生产成本,但提供了非常接近理想的性能。除非有一天生产技术变得非常强大,内存依然存在,缓存的增量性能依然保留。










