首 页文档资料下载资料维修视频汽修在线平台
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 电子技术 > 嵌入式技术
基于BWDSP指令Cache的PLRU替换算法研究
来源:本站整理  作者:佚名  2013-01-22 08:44:23


2 PLRU替换算法

  LRU (Least Recently Used)替换算法是基于程序时间局部性原理(即现在使用指令代码在不久时间里将再次访问该条指令代码),每次替换最近最少被使用的Cache块。LRU替换算法是组相联Cache中最常用的替换算法之一(即比较Cache组内指令行中哪个指令行时间最长没有被访问过则被替换出去),而且每次都要记录每个指令块的使用情况。Cache是N组相联映射,需要log2N位来描述LRU替换算法中组内每块的使用状态。严格意义上的LRU算法实现代价很大,因此考虑到硬件开销,通常使用伪LRU替换算法,即PLRU (Pseudo -LRU)算法。PLRU算法与LRU算法相近,但简化了数据预测的过程。 PLRU通过使用MRU (Most Recently Used)位,使组中每个Cache块都有自己的MRU位。4-way组相联指令Cache的PLRU替换算法示意图如图2所示。

 

    4 -way组相联Cache由Data Array、 Tag Array, LRUArray三部分组成,其中,LRU Array的入口数目与TagArray的人口数目一致,每个LRU Array人口包含一个8 bit的LRU矢量“lru[0:7]。"lru[0:1]表示way0的状态(b00表示way0是最近最少使用,b01表示way0是最近第2少使用,b10表示way0是最近第3少使用,b11表示way0是最近经常使用);lru[2:3、表示way l的状态;lru[4:5]表示way2的状态;lru[6:7]表示way3的状态。其lru[0:7]结构图如图3所示。

 

    PLRU替换算法的步骤如下:

    (1)上电复位时,将LRU Array所有入口值设置为8'b11100100,即lru [ 0: 7 ] =11100100 。 4路中最近经常使用情况为way0 > way 1 > way2 > way3 。

 

    (2)如果命中Cache,则按照下述算法更新8 bit的矢量(lru[0:7])值。

 

    在BWDSP指令Cache采用4-way组相联的Cache中,Cache命中可能在4路中的某一路命中,当某一路命中时则要更新lru[0:7]的值。有如下4种情况:

 

①命中Cache的way0,则根据Iru [0: 1]值为b00 ,b01 ,b10,b11  4种情况更新lru[0:7]的值:

    if  (lru[0:1]==b00)

      {lru [ 6:7]←lru[6:7]-1;lru [ 4:5] ←lru[4:5]-1;lru [ 2:3]

                              ←lru[2:3]-1;lru[0:1] ←bI11;}

    else if (lru[0:1]==b01)

        { if (lru [ 2:3]==b00)lru[2:3] ←ru[2:3];else lru [ 2:3]

                                            ←lru[2:3]-1;

          if (lru[4:5]==b00)lru[4:5 ] ←lru [ 4:5 ] ;else lru[4:5]

                                            ←lru [4:5]-1;

          if (lru [ 6:7]==b00)lru[6:7] ←lru[6:7];else lru[6:7]

                                            ←lru [ 6:7]-1;

          lru[0:1]←b 11;}

    else if (lru[1:0]= =b10)

              {if (lru[2:3]==b11)Iru [ 2:3] ← lru[2:3]-1;

                                  else lru [ 2:3] ←lru[2:3];

            if (lru[4:5]==b11)Iru [4:5 ] ←lru [4:5]-1; else

                                        lru [ 4:5] ←lru[4:5];

            if (lru[6:7]==b11)lru [ 6:7] ←lru[6:7]-1;else

                                        lru[6:7] ←lru[6:7];

            lru [ 0:1]=b11;}

    else  (lru [ 1: 0]==b11)

              {lru[6:7] ←lru[6:7];lru [ 4:5]-lru [4:5];lru [ 2:3]

                          ←lru[2:3];lru [ 0:1] ←lru[0:1];}

 

    ②若命中Cach。的way 1,则根据lru [2:3]值为b00 ,b01 ,b10,b11 4种情况更新lru[0:7]的值:

    if (lru [ 2:3]=b00)

      {lru[6:7] ←lru[6:7]-1;lru [4:5] ←lru[4:5]-1;lru [ 2:3]

                            ←b11;lru [ 0:1] ←lru[0:1]-1;}

else if (lru [ 2:3==b01]

 

        {if (lru[0:1 ]==b00) lru[0:1 ] ←lru [ 0:1 ];

                                else lru[0:1] ←lru[0:1]-1;

        if (lru[4:5]==b00) lru[4:5 ] ←lru [4:5];

                              else lru [ 4:5] ←lru[4:5]-1;

        if (lru[6:7]==b00) lru[6:7] ←lru[6:7];

                              else lru [ 6:7] ←lru[6:7]-1;

        lru [ 2:3]←b 11;}

    else if(lru[2:3]==b10)

              {if (lru[1:0]==b11)lru[0:1] ←-lru[0:1]-1;

                                  else lru[0:1 ] ←lru[0:1 ];

              if (lru[4:5]==b11)lru[4:5] ←lru[4:5]-1;

                                    else lru[4:5 ] ←lru [4:5];

              if (lru[6:7]==b11)lru[6:7] ←lru[6:7]-1;

                                  else lru [ 6:7] ←lru[6:7];

              lru [ 2:3]=b11;}

    else (lru[2:3]==b11)

              {lru [ 6:7] ←lru[6:7];lru [ 4:5] ←lru[4:5];lru [ 2:3]

                            ←lru [ 2:3];lru[0:1] ←lru[0:1];}

 

上一页  [1] [2] [3]  下一页

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:55,886.72000 毫秒