赞
踩
虽然平均访存时间(平均访存时间 = 命中时间+不命中率×不命中开销)是一个比命中率更好的指标,但仍然是衡量性能的一个间接指标。执行一个程序所需的CPU时间能更好的反映存储系统的性能
最终方案:计算程序执行的CPU时间
假设所有的访存停顿都是由Cache不命中引起的,这是因为和IO设备使用存储器引起的竞争从而引发停顿相比,不命中引起的停顿占大多数
注意:IC = 指令数,不命中开销的单位是时钟周期数
上图中用红色中括号括起来的部分可看作考虑了cache不命中后的CPI
因为平均访存时间=命中时间+不命中率×不命中开销
所以可以从三个方面改进Cache的性能
强制性不命中(Compulsory miss)
当第一次访问一个块时,该块不在Cache中,需从下一级存储器中调入Cache,这就是强制性不命中。(冷启动不命中,首次访问不命中)
容量不命中(Capacity miss)
如果程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生不命中。这种不命中称为容量不命中。
冲突不命中(Conflict miss)
在组相联或直接映像Cache中,若太多的块映像到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。这就是发生了冲突不命中。 (颠簸、碰撞不命中,干扰不命中)
解决强制性不命中:增加块大小,预取
解决容量不命中:除了增加cache行(扩容)别无他法,提高相联度对容量不命中无效
解决冲突不命中:可以增加cache行,提高相联度
许多降低不命中率的方法会增加命中时间或不命中开销
而伪相联可以同时拥有两个优点:命中时间小 、不命中率低
缺点是伪相联cache具有一快一慢两种命中时间,优化方式是当出现伪命中时交换两个块的内容,把最近刚访问过的块放到第一位置上,以减少未命中次数(局部性原理)
编译优化技术包括
局部不命中率 = 该级Cache的不命中次数 / 到达该级Cache的访问次数
全局不命中率 = 该级Cache的不命中次数 / CPU发 出的访存的总次数
对于第二级Cache,有以下结论
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。