当前位置: 代码迷 >> 综合 >> 高速缓存--挖掘之六
  详细解决方案

高速缓存--挖掘之六

热度:46   发布时间:2024-01-15 16:28:14.0

·高速缓存用来存放当前最活跃的程序和数据,其特点:容量一般在几千字节到几兆字节之间;速度一般比主存快5到10倍,由快速半导体存储器构成;其内容是主存局部域的副本,对程序员是透明的。


高速缓存有两部分组成:控制部分和存储器部分

控制部分的功能是判断CPU要访问的信息是否在存储器部分中,如果在则为命中,若不在则为未命中,然后按照替换规则决定主存的一块信息放到存储器部分的的那一块中。


下面时讲述替换规则部分:

高速缓存中的地址映像方法

       在CPU工作时,送出的时主存单元的地址,而应从高速缓存存储器中读/写信息。这就需要将主存地址转换成高速缓存存储器的地址,这种地址的转换称为地址映像。映像方式有以下三种:

1) 直接映像

直接映像时指主存的块与高速缓存存储器中块的对应关系时固定的。在这种映像方式下,由于主存中的块只能存放在高速缓存存储器的相同块号中,因此,只要主存地址中的主存区号和高速缓存存储器中的主存区号相同,则表明命中。一旦命中,准村地址中的区内块号立即可得到要访问的高速缓存存储器中的块,而块内的地址就是主存地址给出的低位地址。

优势:地址变换简单  劣势:灵活性很差

2) 全相联映像

主存与高速缓存存储器均分为大小相等的块,这种映像允许主存中任一块可以调入高速缓存存储器的任一块的空间中。在地址变换时,利用主存地址的高位表示主存的块号与高速缓存存储器中相联存储器所有单元中记录的主存块号相比较,若相同即为命中。这时相联存储器单元的编号就对应要访问高速缓存存储器的块号,从而在相中的高速缓存存储器块中根据块内地址访问对应的存储单元。

优势:灵活                 劣势:无法从主存块号中直接获得高速缓存存储器的块号,变换比较复杂,速度比较慢

3) 组相联映像

这种方式是前面两种方式的折中。具体办法是将高速缓存存储器中的块再分成组。组相联映像就是规定组采用直接映像方式而块采用全相联映像方式。只要保证主存和高速缓存存储器中组的个数一致。在这种方式下,通过直接映像方式来决定组号,在一组内再用全相联映像方式决定高速缓存存储器中的块号。由主存地址的高位决定的主存区号与高速缓存存储器中区号比较可决定是否命中。主存后面的地址即为组号。


替换算法:

 替换算法的目标是是高速缓存获得尽可能高的命中率。常用的算法由如下几种:

1) 随机替换算法。由随机数发生器产生一个要替换的块号,将该块替换出去。

2) 先进先出算法。将当前高速缓存中最先进入的信息块替换出去。

3) 近期最少使用算法。将近期最少使用的信息块从高速缓存中替换出去。

4) 优化替换算法。这种方法必须先执行一次程序,统计高速缓存的替换情况。有了这样的先验信息,在第二次执行该程序时便可以用最有效的方式来替换。


Note:这几种算法各有其合理的一方面,又有其不能完全覆盖问题解决的一面。随机替换算法是听天由命,先进先出是期望用户不要频繁的交替使用几个程序应用,近期最少使用算法是期望用户不是一个怀旧主义者,优化替换算法是第一次莫名其妙的惊慌失措。 总之就是蛋疼!


高速缓存的性能:

选择恰当的块容量,提高高速缓存的容量和提高高速缓存的相联度有助于提高高速缓存的命中率。

当前CPU的高速缓存通常为二级结构。一级缓存结构要求速度足够快的赶上CPU的主频,二级结构要求由足够的容量来保证足够高的命中率。


  作为快和慢之间的缓冲单位,可以考虑高速缓存作为一种指导方案。虽然它不完美,不过已经可以保证日常工作正常进行了。生活大抵也是如此吧。