本文主要是介绍体系结构19_降低Cache失效率的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.三种失效(3C)
(1)强制性失效(Compulsory miss)
当第一次访问一个块时,该块不在Cache中,需从下一级存储器中调入Cache,这就是强制性失效
(冷启动失效,首次访问失效)
(2)容量失效(Capacity miss)
如果程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生失效。这种失效称为容量失效。
(3)冲突失效(Conflict miss)
在组相联或直接映像Cache中,若太多的块映像到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。这就是发生了冲突失效。
(碰撞失效,干扰失效)
2.三种失效所占的比例
可以看出:
(1)相联度越高,冲突失效就越少
(2)强制性失效不受Cache容量的影响,但容量失效却随着容量的增加而减少;请执行失效和容量失效不受相联度的影响。
(3)表中的数据符合2:1的Cache经验规则,即大小为N的直接映像Cache的失效率约等于大小为N/2的两路组相联Cache的失效率
3.减少三种失效的方法
强制性失效:增加块大小,预取(本身很少)
容量失效:增加容量 (防止出现抖动现象)
冲突失效:提高相联度 (理想情况:全相联)
4.许多降低失效率的方法会增加命中时间或失效开销
增加Cache块大小
1.失效率与块大小的关系
(1)对于给定的Cache容量,当块大小增加失效率开始时下降,后来反而上升。
(2)Cache容量越大,失效率达到最低的块大小就越大
2.增加块大小会增加失效开销
例1: 假定存储系统在延迟40个时钟周期后,每两个时钟周期能送出16个字节。即:经过42个时钟周期,它可提供16个字节;经过44个时钟周期,可提供32个字节;依次类推。试问:对于表5-6中列出的各种容量的Cache,在块大小分别为多少时,平均访存时间最小?假设命中时间为一个时钟周期
解:
解题过程
1KB、4KB、16KB Cache:块大小=32字节
64KB、256KB Cache:块大小=64字节
提高相联度
1. 采用相联度超过8的方法实际意义不大
2. 2:1 Cache经验规则
容量为N的直接映像Cache
约等于容量为N/2的两组相联Cache
3.提高相联度是以增加命中时间为代价
例如:
TTL或ECL板级Cache,两路组相联:(板级Cache:以前的CPU中不包含Cache,他俩放在一个板子上)
增加10%
定制的CMOS Cache,两路组相联:(Cache做在了CPU里)
增加2%
Victim Cache
1.基本思想
在Cache和它从下一级存储器调数据的通路之间设置一个全相联的小Cache,用于存放被替换出去的块(称为Victim),以备重用。
工作过程:
2.作用
对于减小冲突失效很有效,特别是对于小容量的直接映象数据Cache,作用尤其明显。例如,项数为4的Victim Cache:使4KBCache的冲突失效减少。 20%~90%(跟程序有关)
伪相联Cache
取直接映象及组相联两者的优点:
命中时间少,失效率低
缺点: 多种命中时间会使CPU流水线的设计复杂化
(1)基本思想及工作原理
在逻辑上把直接映象Cache的空间上下平分为两个区。对于任何一次访问,伪相联Cache先按直接映象Cache的方式去处理。若命中,则其访问过程与直接映象Cache的情况一样。若不命中,则再到另一区相应的位置去查找。若找到,则发生了伪命中,否则就只好访问下一级存储器。
(2)快速命中与慢速命中
要保证绝大多数命中都是快速命中
这篇关于体系结构19_降低Cache失效率的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!