在最近一系列的文章中,我们集中介绍了在计算机体系结构学术界广泛使用的一款模拟器SimpleScalar,包括各种模拟器,以及模拟器的运行,提到了影响cache性能的几个方面:容量、块大小、相关度、替换算法。 我们通过三篇文章,以及相关的实验,分别探讨了cache容量和块大小,以及相关度对cache性能的影响,并给出了相应的分析。今天我们继续探索影响Cache性能的最好一个重要的方面--替换算法。替换策略概念 因为实际的计算机体系结构中,主存中的块数量要多于cache中的块数量,所以当我们从主存中,调一个块到cache中时,经常出现的情况是,被调块映射到cahce中的块正在被使用。在这种情况下,我们需要强制将之前的块从cache中移出,放入新映射的cache块。整个替换过程需要遵守相应的替换策略。 当前主要的替换策略有三种:先进先出(FIFO)策略、最近最少使用(LRU)策略、随机(RANDOM)策略。 三种替换策略没有绝对好坏之分,只是说是否适应当前的应用场景。判断当前替换策略的准则就是,是不是将使用率更高的块保留在了cache中,能不能降低cache的失效率和提升了cache的性能。 替换算法对cache性能的影响 整个实验的具体做法是:在SimpleScalar的配置过程中,固定Cache的块大小为32byte,相联度为2,容量从2k、4k、8k一直变化到256k,同时分别改变替换策略,获得失效率数据。 整个过程的参数变化如下表所示(给出部分参数,剩余的类似): 表一 参数变化 经过测试,我们得到不同替换策略,失效率的变化情况。具体变化趋势曲线如下图所示,其中横轴为cache容量,纵轴为cache失效率。 图一 Cache相联度对失效率影响结果分析 从上图的曲线中可以发现,当cache容量还比较小的阶段,随机(RANDOM)替换策略的失效率最低,最少使用替换策略(LRU)次之,先进先出替换策略(FIFO)最高,即随机替换策略(RANDOM)的cache的性能更好,最少使用替换策略(LRU)的性能次之,先进先出替换策略(FIFO)的cache性能最差。但是随着Cache容量的不断增加,三种替换策略之下的失效率都开始下降,在同一cache容量下,我们可以看出,最近最少使用(LRU)替换策略和先进先出(FIFO)策略的失效率要略好于随机(RANDOM)替换策略。 所以如果我们关注计算机体系结构相关信息,就能看到现在一般的计算机中,最少使用LRU替换策略使用的较多。 小结 近日来,我们通过四篇文章,系统介绍了影响Cache性能的四个方面,通过相应的实验,分析实验数据,得出了对比结论。希望大家能从这四篇系列文章中,有所收获。 另外,和计算机体系相关的问题,也欢迎大家和我进行讨论。 参考资料:[1]SimpleScalar模拟器使用指南