论文部分内容阅读
摘要:Cache失效率的高低是影响Cache性能的一个重要因素,采取有效的方法降低Cache失效率,对提高Cache的性能乃至整个系统的性能有着举足轻重的作用,本文就几种降低Cache失效率的方法进行探讨。
关键词:Cache;失效率
中图分类号:TP314 文献标识码:A文章编号:1007-9599 (2011) 19-0000-01
Methods to Reduce the Failure Rate of Cache
Guo Tongzhu
(School of Computer Science&Engineering,Anhui University of Science&Technology,Huainan232001,China)
Abstract:Cache failure rate is affecting the level of performance is an important factor Cache,Cache effective ways to reduce the failure rate,to improve the performance of Cache performance of the whole system has a pivotal role in this paper several methods to reduce the failure rate Cache were discussed.
Keywords:Cache;Failure rate
Cache失效率的高低是影响Cache性能的一个重要因素,采取有效的方法降低Cache失效率,对提高Cache的性能乃至整个系统的性能有着举足轻重的作用。
按照产生失效的原因不同,可以把Cache的失效分为三类:强制性失效,容量失效和冲突失效。强制性失效是指当第一次访问一个块时,该块不在Cache中,需要从下一级存储器中调入Cache;容量失效是指如果程序执行所需的快不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生失效;冲突失效是指在组相联或直接映像Cache中,若太多的快映像到同一块中,则会出现某个块被别的块替换,然后又被重新访问的情况。下面就来讨论几种可以降低Cache失效率的方法。
一、增加Cache块的大小
降低失效率的最简单的方法是增加块的大小,增加Cache块大小会产生双重作用:一方面,利用空间局部性,可以减少了强制性失效。另一方面,增加Cache块的大小减少了Cache中块的数目,有可能增加冲突失效。刚开始增加快大小时,由于块大小还不是很大,上述第一种作用超过第二种作用,从而使失效率下降。但等到块大小较大时,第二种作用超过第一种作用,反而使失效率上升。显然,我们不能把块大小增加到使失效率上升的程度。
二、提高相联度
提高相联度可以给Cache块提供更多的位置选择,从而可以降低冲突失效。根据2:1Cache经验规则,容量为N的直接映像Cache的失效率和容量为N/2的路组相联Cache的失效率差不多相同。同时应当注意,提高相联度增加了硬件代价,相联度应控制在合理的范围。
三、增加Cache的容量
降低Cache失效率最直接的方法是增加Cache的容量,但这种方法不但会增加成本,而且还可能增加命中时间。这种方法片外Cache中用得比较多。
四、Victim Cache
一种能减少冲突失效次数而又不影响时钟频率的方法是在Cache和它下一级存储器的数据通路之间增加一个全相联映像的小Cache,称为Victim Cache。每当发生失效时,在访问下一级存储器之前,先检查Victim Cache中是否包含有所需要的快,如果有,就将该快与Cache中某个块作交换,从而减少了访存的概率。Victim Cache对减少冲突失效很有效,尤其是对于那些小型的直接映像数据Cache更是如此。
五、伪相联映像Cache
伪相联映像Cache是一种既能获得多路组相联映像Cache的低失效率,又能保持直接映像Cache的命中速度的方法。伪相联Cache是在逻辑上把直接映像Cache的空间上下平分为两个区。对于任何一次访问,伪相联Cache先按直接映像Cache的方式去处理。若命中,则其访问过程与直接映像Cache的情况一样。若不命中,则再到另一区相应的位置去查找。若找到,则发生了伪命中,否则就只好访问下一级存储器。
六、硬件预取
Victim Cache和伪相联映像Cache都能在不影响处理器时钟频率的前提下降低失效率,预取技术也能够实现这一点。指令和数据都可以预取,预取的内容可以直接放入Cache,也可以放在一个访问速度比主存快的外部缓冲器中。指令预取通常由Cache之外的硬件完成。如Alpha AXP 21064微处理器在发生指令失效时取两个块:被请求的指令块和顺序的下一指令块。被请求指令块返回时放入Cache,而预取指令块放在缓冲器中;如果某次被请求的指令块正好在缓冲器里,则取消对存储器的访问,直接从缓冲器中读出这一块,同时发出对下一指令块的预取访存请求。
七、编译器控制的预取
编译器控制的预取是硬件预取的一种替代方法,该方法是在编译时加入预取指令,在数据被使用之前发出预取请求。和硬件预取一样,编译器控制预取的目的也是要使执行指令和读取数据能重叠执行。循环是预取优化的主要对象,因为它们易于进行预取优化。如果失效开销较小,编译器只要简单地将循环体展开一次或两次,并调度好预取和执行的重叠。如果失效开销较大,编译器就将循环展开许多次,以便为后面较远的循环预取数据。
八、编译器优化
前面介绍的几种降低Cache失效率的技术都需要改变或者增加硬件,而编译器优化是通过对软件的优化来降低失效率。这是硬件设计者最喜欢的解决方案。处理器和主存之间越来越大的性能差距促使编译器设计者去仔细研究存储层次的行为,以期能通过编译时的优化来改性性能。我们能很容易地重新组织程序而不影响程序的正确性。
以上的几种降低Cache失效率的方法,可以在不同程度上降低Cache的失效率。同时我们应当注意到,任何一种方法都不是万能的,某一种方法对Cache的改进是以损失另一些方面性能为代价的,在应用中要注意采用合适的方法。
参考文献:
[1]张国栋,虞歌.一种集群应用中的Cache方案探讨[J].福建电脑,2009,9
[2]杜红燕,田兴彦,田新华.一个由编译器控制的Cache替换策略[J].计算机工程,2006,8
关键词:Cache;失效率
中图分类号:TP314 文献标识码:A文章编号:1007-9599 (2011) 19-0000-01
Methods to Reduce the Failure Rate of Cache
Guo Tongzhu
(School of Computer Science&Engineering,Anhui University of Science&Technology,Huainan232001,China)
Abstract:Cache failure rate is affecting the level of performance is an important factor Cache,Cache effective ways to reduce the failure rate,to improve the performance of Cache performance of the whole system has a pivotal role in this paper several methods to reduce the failure rate Cache were discussed.
Keywords:Cache;Failure rate
Cache失效率的高低是影响Cache性能的一个重要因素,采取有效的方法降低Cache失效率,对提高Cache的性能乃至整个系统的性能有着举足轻重的作用。
按照产生失效的原因不同,可以把Cache的失效分为三类:强制性失效,容量失效和冲突失效。强制性失效是指当第一次访问一个块时,该块不在Cache中,需要从下一级存储器中调入Cache;容量失效是指如果程序执行所需的快不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生失效;冲突失效是指在组相联或直接映像Cache中,若太多的快映像到同一块中,则会出现某个块被别的块替换,然后又被重新访问的情况。下面就来讨论几种可以降低Cache失效率的方法。
一、增加Cache块的大小
降低失效率的最简单的方法是增加块的大小,增加Cache块大小会产生双重作用:一方面,利用空间局部性,可以减少了强制性失效。另一方面,增加Cache块的大小减少了Cache中块的数目,有可能增加冲突失效。刚开始增加快大小时,由于块大小还不是很大,上述第一种作用超过第二种作用,从而使失效率下降。但等到块大小较大时,第二种作用超过第一种作用,反而使失效率上升。显然,我们不能把块大小增加到使失效率上升的程度。
二、提高相联度
提高相联度可以给Cache块提供更多的位置选择,从而可以降低冲突失效。根据2:1Cache经验规则,容量为N的直接映像Cache的失效率和容量为N/2的路组相联Cache的失效率差不多相同。同时应当注意,提高相联度增加了硬件代价,相联度应控制在合理的范围。
三、增加Cache的容量
降低Cache失效率最直接的方法是增加Cache的容量,但这种方法不但会增加成本,而且还可能增加命中时间。这种方法片外Cache中用得比较多。
四、Victim Cache
一种能减少冲突失效次数而又不影响时钟频率的方法是在Cache和它下一级存储器的数据通路之间增加一个全相联映像的小Cache,称为Victim Cache。每当发生失效时,在访问下一级存储器之前,先检查Victim Cache中是否包含有所需要的快,如果有,就将该快与Cache中某个块作交换,从而减少了访存的概率。Victim Cache对减少冲突失效很有效,尤其是对于那些小型的直接映像数据Cache更是如此。
五、伪相联映像Cache
伪相联映像Cache是一种既能获得多路组相联映像Cache的低失效率,又能保持直接映像Cache的命中速度的方法。伪相联Cache是在逻辑上把直接映像Cache的空间上下平分为两个区。对于任何一次访问,伪相联Cache先按直接映像Cache的方式去处理。若命中,则其访问过程与直接映像Cache的情况一样。若不命中,则再到另一区相应的位置去查找。若找到,则发生了伪命中,否则就只好访问下一级存储器。
六、硬件预取
Victim Cache和伪相联映像Cache都能在不影响处理器时钟频率的前提下降低失效率,预取技术也能够实现这一点。指令和数据都可以预取,预取的内容可以直接放入Cache,也可以放在一个访问速度比主存快的外部缓冲器中。指令预取通常由Cache之外的硬件完成。如Alpha AXP 21064微处理器在发生指令失效时取两个块:被请求的指令块和顺序的下一指令块。被请求指令块返回时放入Cache,而预取指令块放在缓冲器中;如果某次被请求的指令块正好在缓冲器里,则取消对存储器的访问,直接从缓冲器中读出这一块,同时发出对下一指令块的预取访存请求。
七、编译器控制的预取
编译器控制的预取是硬件预取的一种替代方法,该方法是在编译时加入预取指令,在数据被使用之前发出预取请求。和硬件预取一样,编译器控制预取的目的也是要使执行指令和读取数据能重叠执行。循环是预取优化的主要对象,因为它们易于进行预取优化。如果失效开销较小,编译器只要简单地将循环体展开一次或两次,并调度好预取和执行的重叠。如果失效开销较大,编译器就将循环展开许多次,以便为后面较远的循环预取数据。
八、编译器优化
前面介绍的几种降低Cache失效率的技术都需要改变或者增加硬件,而编译器优化是通过对软件的优化来降低失效率。这是硬件设计者最喜欢的解决方案。处理器和主存之间越来越大的性能差距促使编译器设计者去仔细研究存储层次的行为,以期能通过编译时的优化来改性性能。我们能很容易地重新组织程序而不影响程序的正确性。
以上的几种降低Cache失效率的方法,可以在不同程度上降低Cache的失效率。同时我们应当注意到,任何一种方法都不是万能的,某一种方法对Cache的改进是以损失另一些方面性能为代价的,在应用中要注意采用合适的方法。
参考文献:
[1]张国栋,虞歌.一种集群应用中的Cache方案探讨[J].福建电脑,2009,9
[2]杜红燕,田兴彦,田新华.一个由编译器控制的Cache替换策略[J].计算机工程,2006,8