一种基于分组LRU的Cache替换算法的制作方法

文档序号:6374421阅读:400来源:国知局
专利名称:一种基于分组LRU的Cache替换算法的制作方法
技术领域
本发明主要涉及到微处理器设计领域,特指一种微处理器设计中基于分组LRU的Cache替换算法。
背景技术
在现代微处理器设计中,它的存储系统往往采用cache来减小访存延迟。在cache的设计中,替换策略影响着cache的命中率。目前,现有技术中所使用的主要有随机替换、先进先出(FIFO)、最少频繁使用(LFU)以及最近最少使用(LRU)等策略。其中,“先进先出”的替换策略在寻找最不可能会用到的替换对象方面比随机替换好不了多少,而LRU策略在大部分应用环境中是最合适的,因为它所关注的各个访问在时间上的局部性。而LFU策略能够将经常使用的数据保留在cache中,所以某些情况下也能有较好的效果。因为LRU实现的代价比较大,在实际的实现过程中往往不采用真正的LRU,而是采用某种伪LRU算法。如图2所示,为一个典型的cache替换算法,替换时机发生在挑选牺牲者的步骤中。传统的算法是为每一个cache行设置一个LRU权重值,一般来说,这个权重值是该cache行在上次访问后流失的时间,替换时计算各路的LRU权重值,并将权重值最大的作为牺牲者逐出cache。

发明内容
本发明要解决的技术问题就在于针对现有技术存在的技术问题,本发明提供一种能够保持cache具有较高的命中率、且硬件实现的代价较小的基于分组LRU的Cache替
换算法。为解决上述技术问题,本发明采用以下技术方案
一种基于分组LRU的Cache替换算法,其步骤为
(1)设置全局的轮转优先级寄存器global_stateglobal_state作为Cache中各组轮转优先级的标志,如果其中一个位置为I则代表着与该位置对应的组具有最高优先级;每发生一次替换之后,global_state都要循环左移一位;
设置局部的轮转优先级寄存器group_state :为Cache中每个组的各路设置一个局部的轮转优先级寄存器group_state, group_state作为组内每路轮转优先级的标志,如果其中一个位置为I则代表着与该位置对应的路具有最高优先级;
(2)在进行替换操作时,首先查找Cache中每个组是否有请求,如果有请求就按照各自的优先级选择最高优先级的组;在最高优先级的组内,查找每一路是否有请求,如果有请求则选择最高优先级的一路,作为要换出的对象。与现有技术相比,本发明的优点在于本发明基于分组LRU的Cache替换算法中,无论cache分为多少组,每组中包括多少路,均为这些组设置局部寄存器和一个全局寄存器。与其他伪LRU的实现方式相比,本发明所用的状态寄存器较少,该硬件逻辑实现延时小,能够用于高频率的设计中,而且本发明能够保持cache具有较高的命中率。


图I是本发明方法的流程示意图。图2是组相联cache与内存块之间的映射关系示意图。图3是本地cache访问的LRU算法流程示意图。图4是本发明中监听访问的LRU算法流程示意图。图5是具体应用实例中一个16路组相联的cache的示意图。
图6是具体应用实例中局部轮转优先级寄存器和全局轮转优先级寄存器的初始化状态示意图。图7是具体应用实例中一个替换算法操作时的寄存器状态示意图。图8是具体应用实例中一个替换算法操作时的寄存器状态示意图。
具体实施例方式以下将结合说明书附图和具体实施例对本发明做进一步详细说明。如图2所示,对于组相联的cache结构,内存中的每个数据块可以映射到一个cache组内的任何一路。一个组内路的数目被称为组相联度。图中的cache为两路组相联的cache。块号为0,4,8,12,…映射到O组中的两路中;块号为1,5,9,13,…映射到I组的两路中,块号为2,6,10,14,…映射到2组的两路中;同理,块号为3,7,11,15,…映射到3组的两路中。本发明即是在有新的数据块进入cache结构时,会将两路中的哪个数据块换出去。可以理解,如果不是两路相联,而是16路组相联,本发明则是将16路中的哪个数据块换出去。如图3所示,本地cache访问根据其所访问的地址,检查此地址是否在cache结构中命中。如果命中,则会更新LRU的状态。如果此指令是load或者store指令,则会将该cache行的LRU状态置为I ;如果是作废指令,则需要将该cache行的LRU状态位清零,之后将数据返回给请求方。在更新完LRU状态后,会检查所有路的LRU状态,如果所有路的LRU位均为I,则将LRU位统计清零。如果本地cache访问没有命中cache,则会向下一级cache或者主存发送获取数据的报文,等数据返回后,将此数据填充到cache,并且将LRU位设置为I ;之后将数据返回给请求方。如图4所示,监听请求来自于下面的目录控制器。监听请求到达cache后,检查是否在cache中命中,如果不命中,则会返回监听应答,而且没有数据返回。如果命中,则看看此次监听操作是否导致该cache行作废,如果导致该cache行作废,则将该cache行的LRU位清零,最后返回监听应答,根据监听类型决定带不带数据。如图I所示,本发明的基于分组LRU的Cache替换算法为
(I)设置全局的轮转优先级寄存器global_state global_state作为Cache中各组轮转优先级的标志,如果其中一个位置为I则代表着与该位置对应的组具有最高优先级;每发生一次替换之后,global_state都要循环左移一位;
设置局部的轮转优先级寄存器group_state :为Cache中每个组的各路设置一个局部的轮转优先级寄存器group_state, group_state作为组内每路轮转优先级的标志,如果其中一个位置为I则代表着与该位置对应的路具有最高优先级;(2)在进行替换操作时,首先查找Cache中每个组是否有请求,如果有请求就按照各自的优先级选择最高优先级的组;在最高优先级的组内,查找每一路是否有请求,如果有请求则选择最高优先级的一路,作为要换出的对象。本发明适合各种相联度的cache,以在一个16路组相联的cache示例中,说明本发明的分组LRU的Cache替换算法;当然,本发明的方法不仅仅适用于16路组相联的cache,同样适用于4路,8路,32路等各种相联度的cache。分组LRU的Cache替换算法需要从16路中选择I路替换出去。本发明的基于分组LRU的Cache替换算法的具体步骤为
I、为每一个cache line设置一个Used位。Used位的含义是最近被使用过,每次将数据填充到cache里,需要将Used位置I ;每次将数据替换出去,需要将Used位清0,而在每次访问这个cache行的时候置I。另外,如果一组里的所有16路的Used位都是I时,则表示每一路都使用过了,这时统一将所有路的Used位清零,再重新按照新的访问轨迹生成Used位。如图5所示,在具体应用实例中,为一个16路组相联的cache的示意图。将16路分成 四组,其中的0,1,2,3路分为一组,称为O组;4,5,6,7路分为一组,称为I组;8,9,10,11路分为一组,称为2组;12,13,14,15路分为一组,称为3组。2、将cache结构中的16路分为四组,其中每组四路。设置全局的轮转优先级寄存器global_state[3:0], global_state作为四组轮转优先级的标志,是一个4位的one-hot信号,某位置I意味着该组具有最高优先级。每发生一次替换之后,global_state [3:0]都要循环左移一位。这样下次替换的最高优先级就是另外一组了。初始化的时候,global_state寄存器的初值为4’ bOOOl,表示第O组具有最高的优先级。3、为每个组的四路设置一个局部的轮转优先级寄存器group_state,分别是group0_state [3:0], groupl_state [3:0], group2_state [3:0], group3_state[3:0]。group_state作为组内四路轮转优先级的标志,是一个4位的one-hot信号,某位置I意味着该路具有最高优先级。每发生一次替换之后,group_state [3:0]都要循环左移一位。这样下次替换的最高优先级就是另外一路了。初始化的时候,group_state寄存器的初值为4’ b0001,表示第O路具有最高的优先级。如图6所示,为具体应用实例中局部轮转优先级寄存器和全局轮转优先级寄存器的初始化状态示意图。其中,group0_state是一个4位的局部轮转优先级寄存器,对应了cache中O组内的各路的替换优先级。其中为I的位表示具有最高的替换优先级,图中的优先级为初始化后的优先级,其值为4’ b0001,表示O路的优先级最高,同等条件下应该先于本组中的其他路替换出去。同理,groupl_state的含义是cache中I组内4,5,6,7路的替换优先级;group2_state的含义是cache中2组内8,9,10, 11路的替换优先级;group3_state的含义是cache中3组内12,13,14,15路的替换优先级。global_state的是全局轮转优先级寄存器。global_state也是一个4位的优先级寄存器,对应着cache中O组,I组,2组和3组的替换优先级,其中的某位为I表示某个组具有最高的替换优先级。图中的优先级为初始化后的优先级,值为4’ bOOOl,表示O组的替换优先级最高,如果每组都有可被替换路的情况下,优先把O组的某路替换出去。4、组内具体的选择算法如下
4.I、选择O路的条件分为4种
(I)O 路的 used 位为 O,并且 group0_state [3:0] =4,bOOOl ;(2)O路的used位为O,并且1,2,3路的used位均为1,而且groupO—state[3:0]=4,bOOlO ;
(3)O路的used位为0,并且2,3路的used位均为1,而且groupO—state[3:0]=4, b0100 ;
(4)O 路的 used 位为 0,并且 3 路的 used 位为 1,而且 groupO—state [3:0] =4,blOOO ;
4. 2、选择I路的条件分为4种
(1)I 路的 used 位为 0,并且 groupl—state[3:0]=4,bOOlO ;
(2)I路的used位为0,并且2,3,O路的used位均为1,而且groupl—state[3:0]=4, b0100 ;
(3)I路的used位为0,并且3,O路的used位均为1,而且groupl—state[3:0]=4,blOOO ;
(4)I 路的 used 位为 0,并且 O 路的 used 位为 1,而且 groupl—state [3:0] =4,bOOOl ;
4.3、选择2路的条件分为4种
(1)2 路的 used 位为 0,并且 group2—state[3:0]=4’ b0100 ;
(2)2路的used位为0,并且3,0,I路的used位均为1,而且group2—state[3:0]=4,blOOO ;
(3)2路的used位为0,并且0,I路的used位均为1,而且group2—state[3:0]=4,bOOOl ;
(4)2 路的 used 位为 0,并且 I 路的 used 位为 1,而且 group2—state [3:0] =4,b0010 ;
4.4、选择3路的条件分为4种
(1)3 路的 used 位为 0,并且 group3—state[3:0]=4,blOOO ;
(2)3路的used位为0,并且0,1,2路的used位均为1,而且group3—state[3:0]=4,bOOOl ;
(3)3路的used位为0,并且1,2路的used位均为1,而且group3—state[3:0]=4,b0010 ;
(4)3 路的 used 位为 0,并且 2 路的 used 位为 1,而且 group3—state [3:0] =4,b0100 ;
5、组间的选择算法如下
5.I、选择O组的条件分为4种
(1)O组的四路的used位至少有一个为0,并且global—state [3:0] =4’ bOOOl ;
(2)O组的四路的used位至少有一个为0,并且1,2,3组的used位均为1,而且global—state [3:0] =4’ b0010 ;
(3)O组的四路的used位至少有一个为0,并且2,3组的used位均为1,而且global—state[3:0]=4, b0100 ;
(4)O组的四路的used位至少有一个为0,并且3组的used位均为1,而且global—state[3:0]=4, blOOO ;
5.2、选择I组的条件分为4种
(1)I 组的 used 至少有一个为 0,并且 global—state [3:0] =4,b0010 ;
(2)I组的used至少有一个为0,并且2,3,O组的used位均为1,而且global—state[3:0]=4,b0100 ;(3)I组的used至少有一个为O,并且3,O组的used位均为1,而且global—state[3:0]=4,blOOO ;
(4)I组的used至少有一个为0,并且O组的used位均为1,而且global—state[3:0]=4,bOOOl ;
5.3、选择2组的条件分为4种
(1)2 组的 used 位至少有一个为 0,并且 global—state [3:0] =4’ b0100 ;
(2)2组的used位至少有一个为0,并且3,0,I组的used位均为1,而且global—state[3:0]=4,blOOO ;
(3)2组的used位至少有一个为0,并且0,I组的used位均为1,而且global—state[3:0] =4,bOOOl ; (4)2组的used位至少有一个为0,并且I组的used位均为1,而且global—state[3:0]=4,b0010 ;
5.4、选择3组的条件分为4种
(1)3 组的 used 位至少有一个为 0,并且 global—state [3:0] =4,blOOO ;
(2)3组的used位至少有一个为0,并且0,1,2组的used位均为1,而且global—state[3:0] =4,bOOOl ;
(3)3组的used位至少有一个为0,并且1,2组的used位均为1,而且global—state[3:0]=4, b0010 ;
(4)3组的used位至少有一个为0,并且2组的used位为1,而且global—state[3:0]=4,b0100o如图7所示,为具体应用实例中一个替换算法操作时的寄存器状态示意图。根据global—state [3:0] =4’b0010,且 I 组的 used[7:4] =4’b0110,利用组间算法,可以选择 I 组为替换组。再根据groupl—state [3:0] =4’b0100,依据组内算法,可以判定7路应该被替换出去。如图8所示,为在另一个具体应用实例中一个替换算法操作时的寄存器状态示意图。根据 global—state [3:0] =4,b0010,且 2 组的 used[ll :8]=4,b0010,且 I 组的 used 位均为I,利用组间算法,可以选择2组为替换组。再根据group2—state [3:0] =4’b0001,依据组内算法,可以判定8路应该被替换出去。以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
权利要求
1 一种基于分组LRU的Cache替换算法,其特征在于,步骤为 (1)设置全局的轮转优先级寄存器global_stateglobal_state作为Cache中各组轮转优先级的标志,如果其中一个位置为I则代表着与该位置对应的组具有最高优先级;每发生一次替换之后,global_state都要循环左移一位; 设置局部的轮转优先级寄存器group_state :为Cache中每个组的各路设置一个局部的轮转优先级寄存器group_state, group_state作为组内每路轮转优先级的标志,如果其中一个位置为I则代表着与该位置对应的路具有最高优先级; (2)在进行替换操作时,首先查找Cache中每个组是否有请求,如果有请求就按照各自的优先级选择最高优先级的组;在最高优先级的组内,查找每一路是否有请求,如果有请求则选择最高优先级的一路,作为要换出的对象。
全文摘要
一种基于分组LRU的Cache替换算法,其步骤为(1)设置全局的轮转优先级寄存器global_stateglobal_state作为Cache中各组轮转优先级的标志,如果其中一个位置为1则代表着与该位置对应的组具有最高优先级;设置局部的轮转优先级寄存器group_state为Cache中每个组的各路设置一个局部的轮转优先级寄存器group_state,group_state作为组内每路轮转优先级的标志;(2)在进行替换操作时,首先查找Cache中每个组是否有请求,如果有请求就按照各自的优先级选择最高优先级的组;在最高优先级的组内,查找每一路是否有请求,如果有请求则选择最高优先级的一路,作为要换出的对象。本发明具有能够保持cache具有较高的命中率、且硬件实现的代价较小等优点。
文档编号G06F12/08GK102799538SQ20121027493
公开日2012年11月28日 申请日期2012年8月3日 优先权日2012年8月3日
发明者衣晓飞, 李永进, 邓让钰, 晏小波, 周宏伟, 张英, 窦强, 曾坤, 谢伦国, 马卓 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1