近期Cache替代算法和模型综述.docx
- 文档编号:141373
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:13
- 大小:250.46KB
近期Cache替代算法和模型综述.docx
《近期Cache替代算法和模型综述.docx》由会员分享,可在线阅读,更多相关《近期Cache替代算法和模型综述.docx(13页珍藏版)》请在冰豆网上搜索。
近期Cache替代算法和模型综述
1引言
尽管近几年来,各种提升性能的体系结构和算法层出不穷,CacheReplacement的效率依然非常重要。
在今日的双缓存的CMP体系结构中,第一层通常是处理器私有的,第二层缓存则一般是多处理器共享的。
目前这种结构在遇到cachemiss的有以下两个问题[1]:
1)当一个处理器发生miss的时候,该处理器在stall的同时向内存请求调度数据。
这个时候由于chip之间的带宽有限,无形中增加了通讯竞争,从而导致所有处理器的性能下降;
2)当一个miss发生的时候,需要的cacheline会从内存中调度到二级共享缓存里面。
由于二级缓存可用空间有限,直接导致其他处理器为争夺空间而增加了cache
miss。
这样,一个处理器的cachemiss也会潜在的增加其他处理器的cachemiss;所以,一个处理器的cachemiss会从以下三方面导致真个CMP的性能下降,即目标处
理器stall;潜在的消耗了宝贵的off-chip贷款;可能增加其他处理器的cachemiss。
LRU是目前体系中用的最多的cache替代算法。
但是,应用程序的访问模式除了不全部都是LRU偏好的,存在着以下一些缺陷:
1)缺少重用信息,遇到内存需求强烈的程序时,效率低下,性能不及LFU;
2)遇到带有周期性性质,工作集大于缓存大小的应用程序会发生抖动,效率不及
MRU;
3)不区分miss的代价,总是以miss的总数表示处理器stall的次数,在某些体系下没有很好的减少处理器stall的次数而影响了性能;
针对以上几点传统LRU算法的缺陷,近期解决思路主要集中在两个方面:
1)改进LRU算法,以解决某类传统LRU解决不好的问题,比如LRU-LFU[1],BIP[2],LIN[3];
2)使用自适应混合模型两个方面,以一方面解决LRU的效能问题,又可以通过自适应的调整来实现通用性,比如AC[4]模型,SBAP[3]和SetDueling[2];
于此同时,也有人针对一级缓存的直接映射模式的缺点如访问不均衡性提出了自己的解决方案,以最小硬件的代价来获得均匀访问并提高性能,如B-cache[5]。
无论哪种解决方案,其目标不过以下几点:
1)尽可能的减少miss带来的性能损失;
2)尽可能少的硬件代价;
3)尽可能少的额外能源需求,甚至在总体上降低能耗;
4)尽可能容易实现;
5)尽可能的通用,可以满足不同的平台,不同的应用。
以下几章将从不同的类型和角度出发,对近期cache算法、模型进行分类、比较和介绍。
其中第二章主要介绍几类通过改善LRU在某些环境下表现的算法;第三章主要介绍混合模型,如何自适应的调整和选择更好的替代算法;第四章介绍其他思路的方法,主要是改进第一层缓存非均匀访问情况;最后一章进行了总结。
2改善LRU算法
该类型解决方案通过分析LRU在某类访问模式、工作集以及体系结构下的缺陷,有针对性的将其与一些特性比如访问频率、miss代价以及周期访问特性等互相融合以改进原有的LRU算法。
2.1结合重用信息
HaakonDybdahl,PerStenstroem和LasseNatvig提出了基于LRU并以访问频率加强的
cache替换算法LRUbasedreplacementalgorithmaugmentedwithfrequencyofaccess[1]
该算法针对CMP的共享缓存,在考虑access pattern时同时考虑频率和访问时间,可提高对那些内存需求强烈的应用的效率。
该替换算法以保护那些潜在的将来会重新访问的cache line免于被替换出去。
它同时结合了LRU和访问频率概念,在选择替换cache时,在一个LRU块集合里面再挑选被访问次数最少的块。
同时它也能与WBscheme[6]结合,使得系统能够在发现该算法不能提高性能的时候自动关掉。
改进二级缓存的性能能够减少芯片外cache的带宽需求和处理器的停顿此数。
通过增强替换算法使其能够保护那些很有可能被访问到的cache块不被替换出去,以提高二级缓存的性能,进而提供总体性能。
算法实现细节如下:
在每个cacheline上增加一个计数器,用来和LRU算法一起挑选替换对象。
先用LRU算法挑选一系列潜在可替换者,然后在里面挑选访问频率最低的作为替代者。
同时采用选择性缓存策略,即有时候直接将请求的数据块放进一级缓存,但没有在二级缓存内替换相应cache并放入数据,减少不必要的冲突miss。
该算法的硬件结构如下:
图2.1cache结构
此外,为了实现switching,该设计还需要为二级缓存的某些cache集增加shadowtags,并另第二种算法跑在这个shadowtags上,以此代表第二种算法对整个二级缓存的工作性能。
对应cache块上的计数器在遇到以下的几种访问时会被修改:
1)Hit:
无论是writehits还是readhits,对应cacheline的计数器都会增加一个常量,
hitread或者是hitwrite,一直增加到一个最大值maximum;
2)任何的访问(readhit、writehit以及miss):
除了那个被命中的cacheline,所有的cacheline的计数器(如果大于1的花)都会减去1。
如此,该算法使得那些即便在过去被无限次访问过的cacheline,也会随着时间的发展被替换出二级缓存。
该算法利用LRU堆栈和计数器值启发式的挑选被替换者。
只有那些最长时间没有被访问的cacheline会作为候选的被替换者,然后该算法会依次比较这些候选者的访问计数器,并挑出值最低的那个。
该最小值会和一个叫bypass_threshold的值进行比较,如果大于该
阈值,则说明该对应的cacheline有很高的时间局部性而不该被替换出去,请求的cache
line会跳过二级缓存直接放入一级缓存;否则,对应的cacheline会被替换,请求的cache
line被标注为最近访问的,并且计数值赋予一个常数的初始值init_counter.
该机制有三个特性如下:
1)最近访问的cache不会被替换出去;
2)频繁访问的cache也不会被替换出去,当然,除非它一直没有被访问,计数器自减至一个低值;
3)Writehit和Readhit的权重是可以不一样的,writehit的权重越大,dirtycache就不容易被替换,如此也可以减少因为dirtycache被替换引起的额外的对off-chip带宽的消耗,从而提高整体性能。
为了得到一个更通用的方案,使得在适应内存需求强烈的程序同时也不会降低LRU有好程序的性能,这里采取了Switch策略:
该机制首先随机的选择一些cache集放入shadowtags,然后统计shadowtags和在二级缓存中对应的cache集的hit、miss数目,从而比较在shadowtags和二级缓存中使用的替换算法之间的优劣,从而另二级缓存使用表现良好的算法。
该算法有一定的鲁棒性,目前针对cache 空间不够大的情况,如果cache足够大,也不至于影响性能,同时也使用的了adaptivereplacement,能和LRU算法之间自适应的调整和选择优先算法。
为减少计数器在每次访问更新的硬件代价,可用比较简单的模拟方法,即每次访问用RR的方式选择只一个cacheline,并减少计数器的值,以此来减少计数器的大小和逻辑算术单元的大小。
但是该算法每个cache需要8bit,再算上作为shadowtag需要增加的硬件,硬件相对要求较高。
同时算法每次都要对所有的cacheline做操作以更新频率数据,并且每次替换又需要进行依次比较,执行效率较低。
2.2结合MRU
MoinuddinK.Qureshi[2]和AamerJaleel等依据工作集的特性不同不同,将replacement算法分为replace和insert两个部分,从而提出了算法LRUInsertionPolicy(LIP)、BimodalInsertionPolicy(BIP)进而提出了DynamicInsertionPolicy(DIP)。
一般使用的LRU替代算法在遇到工作集大于可使用的cache大小的时候就会很容易发生抖动。
在这种情况下大部分的cacheline会直接从MRU的位置变成LRU的位置而没有经过一次hit,直接导致对cache空间的低效率使用。
如果cache空间能够至少保存一部分的工作集,应该就可以提高一部分的hit率。
通过对插入机制的一个简单的改变就会大大的减少这种内存需求强烈的程序的miss率。
可以通过LRUInsertionPolicy(LIP)将新近的cacheline放在LRU的位置而不是MRU的位置。
LIP保护cache免于抖动,并且对那些具有周期访问模式的程序有一个很好的优化命中率的作用。
而BimodalInsertionPolicy(BIP)作为LIP的增强版本使得在维持对抖动的保护的同时能够适应工作集的变化。
而动态插入策略(DIP)则能够在BIP和传统的LRU进行选择以挑选那个miss最少的策略。
BIP插入算法对当前的cache结构不需要做任何的改变,易于实现,只需要增加小于2
个字节的空间。
在使用DIP后,对Benchmark能够平均减少MPJI21%。
Cache替换算法可以分为两个部分:
选择策略和插入策略。
其中选择策略是用来选择在miss发生的时候,哪块应该被替换出去;而插入策略则是,在需要的cache块进来的时
候,放在哪个位置。
LRU就是使用LRU选择策略和MRU插入策略,即替换LRU位置的cache,并将新到的块放入MRU位置,在同时一路的转向LRU位置并给该块被访问hit的机会。
该策略对那些有很强的时间局部性的程序有很好的性能,但是对内存需求强烈并且工作集比缓存大很多的程序来说,效果就很差了。
并且,LRU下的访问不均衡,二级缓存里面60%的cacheline并没有被选择和插入策略照顾到过,事实上,这么多的cache空间就闲置了。
在LIP机制下,一开始的时候把新来的cache放入LRU位置,只有当该cache被访问过时才逐渐向MRU位置移动。
如此则能够避免在遇到那些有周期访问模式并且需要大量内存的工作集时发生抖动现象。
LIP机制比较容易实现,直接在对LRU模式做插入操作的时候避免更新Recency数据即可。
LIP的缺陷在于,缺少老化机制,即cache块只会往MRU方向运动,而不会因为很久没有被命中而往LRU方向运动,因此对一个给定的应用可能不会响应变化。
BIP就针对这个对LIP进行了改进。
在BIP下,新进的cache line会有一定的比较低的几率被插入MRU位置而不是LRU位置,该几率可以用bimodalthrottleparameter(є)来表示。
BIP是LRU和
LIP的更一般形式,当є是0的时候,BIP=LIP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 近期 Cache 替代 算法 模型 综述