降低Cache失效率的方法[1]

台式机

8人已加入

描述

降低Cache失效率的方法[1]

 学习目标:

    理解失效的三种类型(3C);

    掌握Cache容量、相联度等与3C的关系;

    掌握2:1Cache经验规则;

    理解增加Cache块大小对失效率的影响;

    理解提高相联度对失效率的影响;

    掌握Victim Cache的思想;

    掌握伪相联Cache的思想。

    正文:

    4.3降低Cache失效率的方法

    许多有关 Cache 的研究都致力于降低 Cache 的失效率。本节就来讨论这个问题。 按照产生失效的原因不同,我们可以把失效分为以下三类(简称为3C):

    (1) 强制性失效 (Compulsory miss)

    当第一次访问一个块时,该块不在 Cache 中,需从下一级存储器中调入 Cache ,这就是强制性失效。这种失效也称为冷启动失效或首次访问失效。

    (2) 容量失效 (Capacity miss)

    如果程序执行时所需的块不能全部调入 Cache 中,则当某些块被替换后,若又重新被访问,就会发生失效。这种失效称为容量失效。

    (3) 冲突失效 (Conflict miss)

    在组相联或直接映象 Cache 中,若太多的块映象到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。这就是发生了冲突失效。这种失效也称为碰撞失效或干扰失效。
 

表4.5针对 SPEC92 典型程序给出了上述三种失效所占的比例(这些数据是在 DECstation 5000上测得的。假设 Cache 的块大小为32字节,并采用 LRU 算法)。为了说明高相联度的好处,表中列出了在直接映象、两路组相联、四路组相联和八路组相联的情况下,冲突失效的值。可以看出:

Cache(1) 相联度越高,冲突失效就越少;

    (2) 强制性失效和容量失效不受相联度的影响;

    (3) 强制性失效不受 Cache 容量的影响,但容量失效却随着容量的增加而减少;

    (4) 表中的数据符合2:1的 Cache 经验规则,即大小为N的直接映象 Cache 的失效率约等于大小为N/2的两路组相联 Cache 的失效率。

    图4.3.1和图4.3.2是表4.5中数据的图示,其中图4.3.1为绝对失效率,图4.3.2为各种类型失效率所占的百分比。

图中可以看出, SPEC92 程序的强制失效率很小。其他许多运行时间较长的程序也是如此。在 3C 中,冲突失效似乎是最容易减少的,只要采用全相联,就不会发生冲突失效。但是,用硬件实现全相联是很昂贵的,而且可能会降低处理器的时钟频率(见例4.3),从而导致整体性能的下降。至于容量失效,除了增大 Cache 以外,没有别的办法。在一个存储层次中,如果高一级存储器的容量比程序所需的空间小得多,就有可能出现抖动现象。这时大部分时间是花在两级存储器之间移动数据。出现抖动时,由于大量进行替换,机器的运行速度接近于只有第二级存储器的情况,甚至更慢。

    另一个减少 3C 的方法是增加块的大小,以减少强制性失效。但在下面我们将看到,块大小增加可能会增加其它类型的失效。下面我们介绍7种降低失效率的方法。需要强调的是,许多降低失效率的方法会增加命中时间或失效开销。因此,在具体使用时,要综合考虑,保证降低失效率确能使整个系统速度提高。

4.3.1增加Cache块大小

    降低失效率最简单的方法是增加块大小。图4.3.3中对于一组不同的 Cache 容量,给出了失效率和块大小的关系(在与表4.5类似的情况下测得的)。表4.6列出了图4.3.3的具体数据。

(1) 对于给定的 Cache 容量,当块大小增加(从16字节开始)时,失效率开始是下降,后来反而上升了。

    (2) Cache 容量越大,使失效率达到最低的块大小就越大。

    导致上述失效率先下降后上升的原因,在于增加块大小会产生双重作用。一方面它减少了强制性失效,因为局部性原理有两方面的含义:时间局部性和空间局部性,增加块大小利用了空间局部性;另一方面,由于增加块大小会减少 Cache 中块的数目,所以有可能会增加冲突失效。在 Cache 容量较小时,甚至还会增加容量失效。刚开始增加块大小时,由于块大小还不是很大,上述的第一种作用超过第二种作用,从而使失效率下降。但等到块大小较大时,第二种作用超过第一种作用,使失效率上升。

    例4.4 假定存储系统在延迟40个时钟周期后,每2个时钟周期能送出16个字节。即:经过42个时钟周期,它可提供16个字节;经过44个时钟周期,可提供32个字节;依此类推。请问对于表4.6中列出的各种容量的 Cache ,在块大小分别为多少时,平均访存时间最小?

    解: 动画演示

    平均访存时间为

    平均访存时间 = 命中时间 + 失效率 × 失效开销

    假设命中时间与块大小无关,为1个时钟,那么对于一个块大小为16字节,容量为1KB的 Cache 来说:

    平均访存时间 = 1+(15.05 %×42) = 7.321 个时钟周期

    而对于块大小为256字节、容量为256KB的 Cache 来说,平均访存时间为

    平均访存时间 = 1+(0.49 %×76) = 1.353 个时钟周期

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分