一种指令缓存锁实现方法

文档序号:6335207阅读:170来源:国知局
专利名称:一种指令缓存锁实现方法
技术领域
本发明涉及体系结构中的存储领域,特别涉及一种指令缓存锁实现方法。
背景技术
目前大多数嵌入式系统的性能在很大程度上是受内存平均访问延迟来决定的,提 高缓存的命中率就能减少内存的访问次数,也就能提高系统性能。当前的一些嵌入式处理 器都使用缓存锁机制,在软件的控制下将一些内存块锁在缓存中。缓存的作用主要是缓解 调整处理器与低速主存之间速度及性能上的不匹配,在实际过程中,指令缓存在嵌入式系 统性能和能源消耗方面起到至关重要的作用,因为指令是在每个时钟周期都要提取的。指 令缓存性能的提高,对整个系统性能影响很大,很多技术都是针对指令缓存性能进行改进 的。指令缓存锁机制主要是用于实时要求较高的系统,实时判断性强。在高实时性系 统中,最坏情况下的执行时间是多任务实时任务调度分析算法的输入数据,但是这种方法 用在微型硬件结构上就难以评估一个安全可靠的最坏运行时间。在缓存中静态锁住一些指 令,最坏运行时间的可预测性变得更高。目前也有人提出过一些关于指令缓存锁的方法,例 如LRU算法(最近最少使用算法),对于在内存中但最近又不用的数据块(内存块),每次 调换时,找到最近最少使用的那个页面调出内存。还有一些缓存锁方法是循环结构,每次循 环都要进行评估预测,性能损耗大,且用得是相同的方法来评估性价比这就导致不精确。前 人也曾为每一数据访问指令而提出的基于引用长度窗口的数据缓存锁机制,数据缓存锁没 有评估好性价比,也不能保证性能提高。

发明内容
为了提高系统性能和降低能源消耗,提高缓存命中率,减少低级存储器的访问,本 发明提出一种指令缓存锁实现方法。本发明解决技术问题所采用的技术方案是一种指令缓存锁实现方法,所述方法包括如下步骤1)程序概要分析预先运行一段程序,记录包括内存块访问顺序和引用次数、重复访问的时间间隔、 命中次数;2)选择内存块锁入缓存程序开始运行时,对每个内存块设置一个访问计数器和LRU计数器,访问计数器 记录内存块的访问次数,对每个内存块中的访问计数器和LRU计数器分别分配权重m、N2, 根据步骤1)记录内存块命中次数,按照Ni*访问次数+N2*(LRU计数器的极限值-LRU值) 进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,并满足锁入缓存中内存块总 数不超过缓存空间容量,N1+N2 = 1。所述访问计数器权值m值为0.3彡m彡0.6,所述LRU计数器权值N2值为0. 4 ≤ N2 ≤ 0. 7。所述选择内存块锁入缓存,如果锁入缓存中的内存块命中次数小于阈值A,则调高 LRU计数器的权重;如果锁入缓存中内存块命中次数超过阈值B,则调高内存块访问计数器 的权重;如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块锁 入缓存中。所述选择内存块锁入缓存,如果未锁入缓存中内存块的统计值大于锁入缓存中内 存块的值,则将该内存块替换缓存中小于该统计值的内存块。本发明具有的有益效果是锁在缓存中的内存块是不会被替换算法替换出去的, 只有在锁被解除时才能被替换,这些具有锁状态的内存块是一些引用次数较多的块,将它 们保留在缓存中能大大提高缓存命中率,减少低级存储器的访问,减少了平均内存访问延 迟。这种锁缓存技术在性能和节能方面都有很大的提高,相对于之前的一些节能技术精确
度更高。


图1是本发明一种实施例的流程图;图2是本发明一种实施例的局部流程图。
具体实施例方式以下结合附图对本发明提供的指令缓存锁实现方法作进一步详细的描述图1是本发明一种实施例的流程图,该方法包括如下步骤1)程序概要分析,预先运行一段程序,记录包括内存块访问顺序和引用次数、重复 访问的时间间隔、命中次数;2)选择内存块锁入缓存程序开始运行时,对每个内存块设置一个访问计数器和LRU计数器,访问计数器 记录内存块的访问次数,对每个内存块中的访问计数器和LRU计数器分别分配权重m、N2, 根据步骤1)记录内存块命中次数,按照Ni*访问次数+N2*(LRU计数器的极限值-LRU值) 进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,并满足锁入缓存中内存块总 数不超过缓存空间容量,N1+N2 = 1。本发明的内存块的LRU算法为已有技术,对内存块设置LRU计数器,当该内存块命 中时,命中的内存块的LRU计数器清零,未命中的LRU计数器加1。访问计数器用于记录内 存块访问次数,第一次装入缓存时该计数器值为0,每次访问到它时就增加1。阈值M可以 进行设定,例如4/16、3/16等值。其中1)程序概要分析过程如下①模拟运行一段程序图2是本发明局部流程图,要对程序特征进行分析,就需要 先模拟运行一段程序,或者完整地运行一次。在这个过程中,要记录程序内存块访问序列, 每个内存块被引用的次数。②程序运行过程特征分析根据之前程序运行的记录信息,对程序特征进行分析, 这是为内存块锁算法选择最优锁方案提供基础信息。这些分析包括内存块访问顺序和引用 次数,重复访问的时间间隔,命中次数及跳转记录。
这个阶段可执行一次,保存的信息可供以后使用,这可避免多次重复无效的执行 程序,一次记录信息可供终身使用,对于不同的输入数据,程序的行为可能会不一样,也可 根据输入数据进行更新,从总体来看,这部分只不会对程序性能造成负面影响。通过在机器 上运行一段程序,并记录访问信息,从而得到访问较多的内存块。程序概要分析过程中,可以使用临时内存块重复引用信息表来模拟程序行为,临 时内存块引用件中包含程序运行过程中一些内存块的访问记录。这部分是为后面的锁算法 提供基础信息,一般是在程序运行前操作完成,或是程序以前运行保存下来的。2)选择内存块锁入缓存是否将该内存块锁入缓存中,可以采用最优算法和启发式算法。①最优算法,实现步骤按照Ni*访问次数+N2* (LRU计数器的极限值-LRU值)进行统计,如果统计值超 过阈值M,则将该内存块锁在缓存中,并满足锁入缓存中内存块总数不超过缓存空间容量, N1+N2 = 1。阈值M可以进行设定。在程序概要分析时,当获得命中较多的内存块时,将其m值设定为较大,未命中 或者命中较少的内存块的m值设定为较小。当一个内存块的访问次数很大(相对于其他块来说),LRU计数时不是最高那么就 可以考虑将它锁在缓存中;如果一个块访问次数较少,但是它的LRU计数器很低,那么也可 心考虑将它锁在缓存,其中还有一点就是当前锁在缓存中的内存块数不能超过缓存空间容 量,如果被锁的块的LRU计数器增加较多时,便对它解锁,认为它对缓存命中无贡献。缓存是分组的,每个组独立分析,最终选择能使这个组的命中率达到最高的方案。 对每一个内存块,要分析它是否能锁在缓存中,搜索空间可以看成是一个二叉搜索树。在二 叉搜索树中和每一级都是对应于一个内存块的锁判定方案,是否要锁该块,当到达叶子结 点或者缓存组中锁定的内存块数量为组关联行数时,就停止搜索,返回一个锁策略。二叉搜索树中的每一级对应一个内存块的锁策略,在搜索过程中,当发现锁住该 块在指令缓存中时能增加总体命中率时,便表示这块将被标记不锁状态,否则为非锁状态。 它会为程序分析信息表中记录的每一个内存块进行锁判定,根据状态计算命中率,最后选 择命中率最高的状态作为最终方案。②启发式算法,实现步骤启发式算法是相对于最优算法,它的目的也是寻找一种使缓存命中率最高的锁方 案,所谓启发也就是会受前面搜索结果的影响(启发)。它也是根据各内存块的访问频率, 以寻找能达到最高缓存命中率的锁方案。如果锁入缓存中的内存块命中次数小于阈值A,则调高LRU计数器的权重。阈值A 的值可以预先设定,例如2。如果锁入缓存中内存块命中次数超过阈值A,则调高内存块访问计数器的权重。阈如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块锁 入缓存中。将未锁入缓存中内存块的统计值与锁入缓存中内存块值分别比较,只要有大于 任一锁入缓存中内存块值则将该内存块锁入缓存中。如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块替 换缓存中的内存块。将未锁入缓存中内存块的统计值与锁入缓存中内存块值分别比较,如果有未锁入缓存中内存块的统计值大于锁入缓存中内存块的统计值,则将该内存块替换缓 存中的内存块。启发式算法根据前面被锁住的块的访问次数和LRU计数器进行下一个块的寻找。 前面最优算法是综合考虑访问次数和LRU计数器。如果之前的判定方式是访问次数权重 大一点,而且在被锁后访问也比较多(这可通过访问计数器或LRU计数器判断),那么表示 之前的访问次数权重大一点的方案是可靠的,这次仍然可用这种方式,反之则应该增加LRU 数值的权重,因为前面的锁方案表现并不太好(被锁的内存块没被访问或者访问太少)。3)程序运行每次程序运行前,便将这些标记为锁状态的内存块锁在指令缓存中,这样在程序 运行过程中,这些访问频繁的内存块就不会丢失。实施例现有一个程序A,程序运行过程中的一段内存块访问序列为 (m0mlm2m3m4m5m6m7) 10,这个序列访问10次,各块都映射到同一个缓存组中,缓存是4路相 联的。在不锁的情况下,这个访问序列全都不命中,也就是80次访问全部丢失,按照指令缓 存锁技术,如果将这8个内存块中的任意4块,如m0,ml,m2, m3锁在指令缓存中,就会减少 一半的丢失。这个过程很简单,最主要的就是在外设上存储好程序内存块访问信息及各块 的锁状态策略。这个例子中,在m0_m7的访问结束后,每个块的访问计数器值都为0,不好区分锁 哪个块更好,但是LRU计数值不一样,m4m5m6m7的值比较低,分别是3,2,1,0那么可以考虑 将它们锁在内存中,再经过一轮访问后,被锁的块确实被访问了,则锁住这些块的方案是比 较好的。相对于LRU算法来说,它增加了一个访问计数值的考虑,就是这两个计数值的权重 之和来判定锁方案,它们之间的权重可以是0. 5,0. 5。权重可以在程序概要分析时确定,当 获得命中较多的内存块时,将其m值设定为较大,未命中或者命中较少的内存块的m值设 定为较小。也可以是其他值,在启发式算法中,这些值是可变化的。如果前面被锁的块访问次数比较多,则权重分配不变,否则,访问计数器的权重值 降低0. 1,LRU计数器的值增加0. 1。当LRU计数值的权重为1时就是LRU算法。与LRU的另一区别是LRU是每次有新 的块要进入缓存时都要判定,将LRU数值最大的块换出去,而块锁方法并不是有新行要进 来是就判定而是经过几次(缓存空间大小,如4路组就是4)缓存访问后如果被锁的块还没 被用到,则进行新行锁判定,这个缓存的访问次数可以通过被锁块的LRU值(它们中最大 的)来确定。最优算法m0mlm2m3访问完后,接着访问m4,这时要要用锁判定了,这5块的访问计数 器值都为0,LRU计数器值为4,3,2,1,0,(目前还没有块被锁在缓存中)锁方案选择 0. 5*0+0. 5*(4-LRU值),结果分别是0,0. 5,1,1. 5,2,那么锁住m4,m3,ml, m2,并将它们的 LRU计数器和访问次数计数器设为0,接着访问m5,不用计算权值,因为缓存访问次数还没 超过4,同理m6,m7。下一轮访问mO,在4次缓存访问中没访问被锁块,如果下次还没访问 被锁块,则要重新锁方案选择,后续访问序列为ml,m2,m3,m4,被锁块被访问了,所以仍然保持锁状态。启发式算法初始块的选择与最优算法类似,不同点在于新锁方案选择时,如果ml,m2, m3, m4 的访问计数值比较小,则表明之前访问次数多的块不一定在将来会被访问,所以权值计数 为0. 4*访问次数+0. 6* (4-LRU值),最后选择数值最大的4块锁在缓存中。
权利要求
一种指令缓存锁实现方法,其特征在于所述方法包括如下步骤1)程序概要分析预先运行一段程序,记录包括内存块访问顺序和引用次数、重复访问的时间间隔、命中次数;2)选择内存块锁入缓存程序开始运行时,对每个内存块设置一个访问计数器和LRU计数器,访问计数器记录内存块的访问次数,对每个内存块中的访问计数器和LRU计数器分别分配权重N1、N2,根据步骤1)记录内存块命中次数,按照N1*访问次数+N2*(LRU计数器的极限值 LRU值)进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,并满足锁入缓存中内存块总数不超过缓存空间容量,N1+N2=1。
2.根据权利要求1所述的指令缓存锁实现方法,其特征在于所述访问计数器权值m 值为0. 3 ≤ N1 ≤ 0. 6,所述LRU计数器权值N2值为0. 4≤N2 ≤0. 7。
3.根据权利要求1或2所述的指令缓存锁实现方法,其特征在于所述选择内存块锁 入缓存,如果锁入缓存中的内存块命中次数小于阈值A,则调高LRU计数器的权重;如果锁入缓存中内存块命中次数超过阈值A,则调高内存块访问计数器的权重;如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块锁入缓 存中。
4.根据权利要求1所述的指令缓存锁实现方法,其特征在于所述选择内存块锁入缓 存,如果未锁入缓存中内存块的统计值大于锁入缓存中内存块的值,则将该内存块替换缓 存中小于该统计值的内存块。
全文摘要
一种指令缓存锁实现方法,所述方法包括如下步骤1)程序概要分析,预先运行一段程序,记录包括内存块访问顺序和引用次数、重复访问的时间间隔、命中次数;2)选择内存块锁入缓存,对每个内存块设置一个访问计数器和LRU计数器,访问计数器记录内存块的访问次数,将每个内存块中的访问计数器和LRU计数器分别分配权重N1、N2,按照N1*访问次数+N2*(LRU计数器的极限值-LRU值)进行统计,如果统计值超过阈值M,则将该内存块锁在缓存中,N1+N2=1。本发明锁在指令缓存中的内存块只有在锁被解除时才能被替换,大大提高缓存命中率,减少低级存储器的访问,减少了平均内存访问延迟。
文档编号G06F9/38GK101989236SQ201010531799
公开日2011年3月23日 申请日期2010年11月4日 优先权日2010年11月4日
发明者乐金明, 乔福明, 虞保忠, 陈天洲, 马建良 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1