缓存是介于CPU和内存之间的临时内存。它的容量比内存小,但交换速度更快。缓存中的数据是内存的一小部分,但这一小部分会在短时间内被CPU访问。当CPU调用大量数据时,可以避开内存,直接从缓存中调用,从而加快读取速度。起初,只有一级缓存,L2缓存似乎可以协调L1缓存和内存之间的速度。二级缓存比一级缓存更慢更大,主要用于一级缓存和内存之间的临时数据交换。其实现在Intel和AMD处理器在一级缓存的逻辑结构设计上是不一样的,所以二级缓存对CPU性能的影响也是不一样的。
操作原理
缓存的工作原理是,当CPU要读取一个数据时,先从缓存中查找,如果找到,立即读取并发送给CPU处理;如果没有找到,会以相对较慢的速度从内存中读取,并发送给CPU进行处理。同时将这个数据所在的数据块转移到缓存中,这样以后就可以从缓存中读取整个数据块,不需要再调用内存。
缓存利用率
CPU在缓存中找到有用的数据称为命中,当缓存中没有CPU需要的数据时(这称为未命中),CPU访问内存。理论上讲,在一个有L2缓存的CPU中,读取L1缓存的命中率是80%。也就是说,在CPU一级缓存中找到的有用数据占总数据的80%,剩下的20%是从二级缓存中读取的。由于无法准确预测要执行的数据,读取L2缓存的命中率约为80%(从L2缓存读取有用数据占总数据的16%)。那么其他数据将不得不从内存中调用,但这已经是一个相当小的比例。目前更高端的CPU也会有三级缓存,是为读取二级缓存后未命中的数据而设计的。在三级缓存的CPU中,只需要从内存中调用5%左右的数据,进一步提高了CPU的效率。
为了保证CPU访问时的高命中率,缓存中的内容要用一定的算法进行替换。一种常用的算法是“最近最少使用的算法”(LRU算法),它消除最近一段时间内最少访问的行。因此,有必要为每一行设置一个计数器。LRU算法是清除命中行的计数器,并将其他行的计数器加1。当需要替换时,消除行计数器的计数值最大的数据线被消除。这是一种高效科学的算法,其计数器清零过程可以在频繁调用后从缓存中清除一些不必要的数据,从而提高缓存的利用率。
处理器缓存
所谓的处理器缓存通常是指L2缓存,或外部缓存。即缓存是一种小规模但高速的存储器,位于CPU和主存储器DRAM(动态RAM)之间,通常由SRAM(静态随机存取存储器)组成。用于存储CPU经常使用的数据,使CPU不必依赖相对较慢的DRAM(动态随机存取存储器)。L2高速缓存一直是一种速度极高、价格昂贵的存储器,被称为SRAM(Static RAM),是static memory的英文缩写。由于SRAM采用与CPU相同的半导体工艺,与DRAM相比,SRAM的访问速度更快,但体积更大,价格更高。