降低Cache失效率的方法[1]
降低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 算法)。为了说明高相联度的好处,表中列出了在直接映象、两路组相联、四路组相联和八路组相联的情况下,冲突失效的值。可以看出:
(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 个时钟周期
非常好我支持^.^
(61) 50.4%
不好我反对
(60) 49.6%
相关阅读:
- [电子说] ARM9处理器从哪些方面保证了FIQ异常响应的快速性? 2023-10-19
- [电子说] Python 中怎么来实现类似 Cache 的功能 2023-10-17
- [电子说] Cache工作原理讲解 Cache写入方式原理简介 2023-10-17
- [电子说] 深入理解Armv9 DSU-110中的L3 cache 2023-10-11
- [电子说] 在组相联cache中,用于替换cache line的算法有哪些? 2023-10-08
- [电子说] Linux性能优化:Cache对性能的影响 2023-10-04
- [电子说] Linux内存泄漏该如何去检测呢? 2023-09-21
- [电子说] 如何在Rust中使用Memcached 2023-09-19
( 发表人:admin )