
CPU缓存:通过优化的读取机制,CPU读取缓存的命中率可以很高(大部分CPU可以达到90%左右),也就是说CPU下次读取的数据有90%在缓存中,只有10%左右需要从内存中读取。这大大节省了CPU直接读取内存的时间,也使得CPU在读取数据时基本不需要等待。
一般来说,CPU读取数据的顺序是先缓存,再存储内存。
CPU集成缓存称为L1缓存,而外部缓存称为L2缓存。后来,随着生产技术的不断改进,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对慢速内存的访问。
L2缓存是CPU性能的关键之一。如果CPU内核保持不变,增加L2缓存容量可以大大提高性能。但是,同一个核中CPU的高低端差异往往存在于L2缓存中,可见L2缓存对CPU的重要性。
CPU在缓存中找到有用的数据称为命中,当缓存中没有CPU需要的数据时(这称为未命中),CPU访问内存。理论上讲,在一个有L2缓存的CPU中,读取L1缓存的命中率是80%。也就是说,在CPU一级缓存中找到的有用数据占总数据的80%,剩下的20%是从二级缓存中读取的。由于无法准确预测要执行的数据,读取L2缓存的命中率约为80%(从L2缓存读取有用数据占总数据的16%)。那么其他数据将不得不从内存中调用,但这已经是一个相当小的比例。
目前更高端的CPU有三级缓存,是针对读取二级缓存后未命中的数据而设计的。在三级缓存的CPU中,只需要从内存中调用5%左右的数据,进一步提高了CPU的效率。从某种意义上说,预取效率的提高大大降低了生产成本,但提供了非常接近理想的性能。除非有一天生产技术变得非常强大,内存还是会存在,缓存的增量性能还是会存在。









