降低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 个时钟周期

国产特斯拉Model Y降价背后原因几何?
国产降噪耳机排行:华为和南卡降噪蓝牙耳机有何差别?
新能源汽车充电枪如何测试气密性?
PXB-6020协议转换器转换速度究竟有多快?
韦尔股份发布现金收购北京视信源科技发展有限公司20.07%股权公告
降低Cache失效率的方法[1]
激光雷达的装置正在成为发现地灾隐患的利器
精密稳压电源TL431构成的恒光源电路
永磁同步变频器是如何工作的
最为典型的Volt PHEV也会迎来换装
全球工程模拟软件巨头ANSYS宣布封禁华为!
特斯拉新增新能源汽车换电设施销售
上海光芯发布多模光纤用PLC分路器芯片
自制智能杯垫教程
林芩论币:3.2a5数字币今日分析
k型热电偶测温电路图解析
关于导电环商品的实际关键点的详细介绍
高分辨率的激光雷达应用关键解决方案
信号发生器电路简析
充电几分钟就有1000公里续航里程?中科院院士:不可能