在最近一系列的文章中,我们集中介绍了在计算机体系结构学术界广泛使用的一款模拟器SimpleScalar,包括SimpleScalar中的各种模拟器,以及模拟器的运行,提到了影响cache性能的几个方面:容量、块大小、相关度、替换算法。并且通过四篇文章,四个实验详细分析了影响过程,并给出了相应的分析,如果大家仔细读过文章,应该是对cache的这四个方面有了一个基础的认识。今天我们再进一步的讨论一下cache的问题。 在《如何用SimpleScalar进行cache性能研究(四)替换策略的影响》文章中,我们讲到当我们从主存中,调一个块到cache中时,经常出现的情况是,被调块映射到cahce中的块正在被使用。在这种情况下,我们需要强制将之前的块从cache中移出,放入新映射的cache块。 那么我们可以继续思索,虽然之前的块被移出,但是它的相关度还是有的,只是说相关度小于当前正在被调用的块而已,如果说cache增大之后,通过前面的文章,知道cache性能是能提升的,那我们能否在这之间做一个折中,即在cache和它的下一级存储器的数据通路中间,增加一块全相连,且容量较小的cache,将上面讲到的在替换过程中,被移出的失效块(称为victim),放入这个小cache里面,以供后面使用。 通过上面的描述,我们可以知道,victimcache只会在发生替换时候,才会被使用到,所以victimcache可以很好的减小失效冲突。如果当前的数据cache容量较小,也就是会经常发生冲突失效的话,victimcache对降低missrate有非常好的正向作用。 基于以上的考虑,我们可以通过进行相关的实验,验证我们的猜想。在试验过程中,我们需要关注以下指标:victimcache加入前和加入后,cache的missrate,和victimcache的cache性能的变化;功耗的变化; 需要说明的是,因为本次实验需要修改simoutorder。c代码,所以难度较高,就不再贴出Ccode。只是给出一些实验结果以及相应的结论分析。实验中使用simplesim3。0estspisabin。littleestmath。 小结 今天只是给出整个实验的设计思路,等到后面实验完成,数据统计完毕之后,再将详细的实验对比数据、曲线等信息发出来。 针对上面讲到的实验思路,以及实验设计方面,如果有什么好的建议,也欢迎和我进行讨论。