cache相关的国内外研究热点文档格式.docx
《cache相关的国内外研究热点文档格式.docx》由会员分享,可在线阅读,更多相关《cache相关的国内外研究热点文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
![cache相关的国内外研究热点文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/4/9748531c-846a-4109-b886-3d64a7530fd7/9748531c-846a-4109-b886-3d64a7530fd71.gif)
.4. DIP数据插入策略动态选择机制 5
4.1.GlobalDIP动态策略选择机制 5
4.2.DSS动态策略选择机制 6
第2章 Cache一致性协议 7
.1. 符号一致性协议(TokenCoherence) 7
1.1.一个启发式例子 7
1.2.正确性底层(CorrectnessSubstrate)协议 8
1.3.持续性请求 8
1.4.性能协议(PerformanceProtocols) 9
1.5.TokenB协议:
面向多处理器的整合。
10
1.6.对符号协议性能评估 10
.2. 自适应监听:
通过在多处理器中嵌入一个向前过滤环 10
2.1.消息顺序和基于环的协议(MessageOrdering&
RingBasedProtocols) 11
2.2.自适应的监听 12
2.3.灵活可变的的监听算法(AlgorithmsforFlexibleSnooping) 14
第3章 互联线对cache性能的影响 16
3.1.互联线相关的cache一致性协议 16
3.2.大型NUCA体系cache的互联线设计 16
第4章 Cache一致性模型和存储器流模型两种存储模型的比较 19
4.1.cache一致性(IncoherentCache-based)模型 19
4.2.流模型(streamMemoryModal) 20
4.3.定性比较 20
4.4.CMP体系架构 21
4.5.评估方法 22
4.6.比较总结 24
个人心得 25
参考文献 26
第1章 新的Cache插入原则
.1. LRU的缺陷
在cache数据插入原则当中,LRU是最好的选择吗?
我之前一直认为LRU是最接近理想状况一直的替换原则,但是事实并非如此。
LRU替换原则存在缺陷。
首先,如果只采用LRU,当需要经常被cache用到的数据大小比cache的size大时,那么采取LRU替换原则会产生thrashing。
这是因为替换前后的数据有一定的相关性,LRU的替换原则是将新数据放到MRU上。
这样一来,可能被替换出去的数据可能马上又会被用到,而很多没有被替换的LRU位置上的数据实际上并不可能总是被用到。
所以cache的访问需要再次accessmemory。
在有大量大块数据需要被替换的情况下,大概有60%的时间花费在L2cache载入数据这个过程中。
如果在正被用作工作的存储空间比cache的可用空间要大,那么留一些活动集和的
cache数据是有利于cache命中的。
MonuddinJ.Q等[1]对于高性能cache提出一种自适应的
cache替换算法。
他们的研究在插入策略上改动了一点点,但是能有效提高需要大量数据存储替换的任务性能。
.2. LIP数据插入原则
数据在插入到MRU位置上时,会被优先得到访问,因为数据遍历是从MRU到LRU
这样的顺序进行的。
对于时间局部性较高的数据而言,如果数据工作集的数据量比可用
cache小的时候,将数据插入到MRU位置上,访问的命中率更高。
但是数据如果工作集数据量要比可用cache的大小大很多时,就会产生thrashing。
因为很有可能刚刚替换进去的数据马上又被替换出来了。
因此,他们提出在LIP(LRUInsertionPolicy)数据插入原则。
过程很简单,只有两个步骤:
(1)如果在经常被cache用到的数据大小比cache的size大时,将所有的新数据放到
LRU位置上,而不是LRU所采用的MRU位置上。
(2)在LRU位置上的数据被处理器访问到之后,这些数据会被迁移到MRU位置上。
如此一来,数据先被放到LRU位置上,处理器开始访问,由于LRU上的数据是处理器正需要的数据,所以马上会被放到MRU位置上,如此一来,无形中扩大了可用cache的大小。
当数据并未被访问到的时候,继续向存储器要数据,但是这个时候并不是全部将需要的数据给替换,根据替换原则,LRU位置上的数据会留下一些fraction,以利于访问命中。
LIP插入原则相对与LRU而言,提高了需要大量数据访问的任务的性能,但是对于需要数据量比可用cache空间小的时候,并没有优势,因为数据访问过程中访问LRU位置上数据的代价要比MRU位置上数据代价大。
因为本身它是与LRU替换原则想背驰的。
.3. BIP插入原则
为了能让替换更有效,采取了BIP(BimodalInsertionPolicy),(LIP经过固定数量的
miss后,新进来的数据被置于MRU的位置上)。
这是因为LIP在处理循环引用模式的miss
hit的数据时,性能并不好。
循环引用数据会引起数据替换的死循环。
BIP控制了一个参数,叫做bimodalthrottleparameter,ε,ε控制了新进来的数据被替换到MRU位置上的百分比。
当ε=0的时候,就是LIP;
ε=1时,就是LRU。
通过改变ε,能够使BIP适应工作集合的改变,并做到thrashing保护。
为了分析LIP和BIP,通过模型分析。
若ai表示cache的数据地址。
(a1,a2,…aT)表示对a1,a2,…aT数据的一次数据引用访问,时序序列(a1,a2,…aT)N表示对该数据引用访问N次。
在(a1,a2,…aT)N后紧跟数据访问(b1,b2…,bT)N,访问的是一个全相连的的cache,包含的可用空间为K(K<
T)。
假如BIP中的ε很小,并且N>
>
T,N>
K/ε。
表1.1给出了LRU,OPT(理想情况),LIP,BIP的命中率。
表1.1LRU,OPT,LIP,BIP对于例子的命中情况
LRU命中率为0是因为发生了thrashing,而LIP由于不允许第二个序列进入到cache的MRU中,导致了第二个序列的零命中。
对于BIP而言,由于其概率性可允许数据进入到MRU位置,第二个序列访问cache时,经过K/ε失配后,所有的数据都会属于第二个序列。
.4. DIP数据插入策略动态选择机制
DIP(DynamicInsertionPolicy),通过评估LRU和BIP失配的比较,动态地在LRU和
BIP中切换policy的机制。
4.1.GlobalDIP动态策略选择机制
图1.1全局DIP
最直观的方法实现DIP是为数据提供全局的tag目录,数据集为LRU和BIP都维持一个tag,跟踪哪种策略实现得更好。
动态得计算数据集分别用LRU和BIP替换策略的失配,通过因子权重计算后做全局决策。
如图1.1所示。
4.2.DSS动态策略选择机制
全局选择机制需要维持两个tag目录,代价比较大。
M.K.Qureshi[2]等提出通过DSS(DynamicSetSample)可以显著减少硬件消耗代价。
SetSample是指在选择DIP策略时候选择数据的集合。
如图1.2所示,部分数据通过LRU替换策略,部分数据集合通过BIP数据调度策略。
划分给LRU策略的数据集合发生cache失配时,递增PESL的值;
划分给BIP策略的数据集合发生cache失配时,递减PESL的值。
当下一个未知的数据集合到来时,如果PESI=0,那么采用LRU,否则采用BIP。
图1.2DSSDIP
DSS牵涉到一个问题,怎样给两种策略分配数据集合。
数据集合策略分配可以是动态分配,也可以是静态设计时候的分配。
他们的研究中给出了一种分配的办法,初始状态下,将部分数据均匀的分配给各种策略。
比如说,有1024个集合,那么每隔33个集合,
0,33……分配给LRU,每隔31个集合,如1,32……分配给BIP。
我个人觉得这个分配有欠妥当,因为一个数据在未知采用何种分配策略更好,就初始化,并不是一个好提议。
文中提到了动态分配未知的,没有说到如何改变已知的,或者我并未彻底了解这个分配的动态变化过程(文献[1]中有一段对setdueling的数学证明,不是
很明白)。
如果要性能达到最好,数据的替换策略不仅仅是动态选择,更是需要动态改变的。
最后,通过与LRU、BIP等做了性能比较,使用DIP后对于标准测试程序的cache命中率有了大幅度提高。
第2章 Cache一致性协议
目前的cache一致性一般靠两种方式实现:
添加公用的cache-to-cache失配(目录协议)或者需要全序的互联线(传统的基于总线的监听协议)。
在实现低延时的cache一致性的问题上,这两种协议性能都很低。
.1. 符号一致性协议(TokenCoherence)
MMartin等[3]陈述了一种新的一致性框架协议,这个协议能优化一般的cache一致性实例,并潜在得解决速率问题、提高安全性、减少了饥饿。
这个协议称作为符号一致性
(TokenCoherence)协议。
他们中的协议由两部分组成:
精确性底层协议和性能协议。
底
层协议提出了数据块的记号机制,将每个数据块都关联固定数量的记号,处理器只有拥有了特定记号数量下才能进行读写访问;
对于避免饿死,底层协议提供持续性消息;
性能协议提出了短暂性请求,并且满足请求的处理方式。
他们还提出了符号一致性中的一个特殊协议,TokenB协议,能够整合无序多处理器,实现低延时。
通过实验表明,在正常工作量下,他们所提出的新的一致性协议要比传统的监听协议和目录协议做得好。
1.1.一个启发式例子
传统的基于无效性的协议允许一个共享数据能够被一个拥有写权限的处理器和一批拥有读权限的处理器共同访问,当然这些处理器不能对该数据不能同时操作。
当一个处理器需要进行读或者写操作时,先通过在无序低延时的互联线上广播一个操作消息。
但是这个操作消息很有可能不正确,因为网络的拓扑结构和消息路由的顺序原因。
一旦不正确,处理器就会读到较旧的数据。
如图2.1 a所示,P0要对一个数据块进行读和写操作,P1只要进行如操作。
在①时刻,
P0将它的操作请求进行广播,在时刻②,P1捕捉到该请求,并在时刻③返回给P0(假设数
据的