《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于BWDSP指令Cache的PLRU替換算法研究
基于BWDSP指令Cache的PLRU替換算法研究
來源:電子技術應用2013年第1期
洪興勇1,洪 一1,2
1.合肥工業大學 計算機與信息學院,安徽 合肥230009; 2.中國電子科技集團第38研究所,安徽 合肥230031
摘要: 通過BWDSP模擬器對目前常用的幾種替換算法和大小不同的指令Cache塊進行仿真實驗得出不同缺失率。實驗結果表明,所提出的PLRU替換算法性能高于LRU、LFU、FIFO替換算法,并使BWDSP整體性能提高到為其他三種替換算法的1.12倍左右。
中圖分類號: TP368
文獻標識碼: A
文章編號: 0258-7998(2013)01-0027-04
The PLRU replacement algorithm of instruction Cache based on BWDSP
Hong Xingyong1,Hong Yi1,2
1.School of Computer and Information, Hefei University of Technology, Hefei 230009,China; 2.No.38 Research Institute, China Electronics Technology Group Corporation, Hefei 230031,China
Abstract: The paper does some experiments for the miss rates of different replacement algorithms and different Cache size on the simulator of BWDSP. The result of experiments shows that the PLRU algorithm is more efficient than LRU, LFU and FIFO algorithms,and the total performance of BWDSP increases by nearly 12% times.
Key words : BWDSP;instruction Cache;replacement algorithm;PLRU

    自1978年以來,我國的集成電路用量和產量幾乎以平均每年20%的速度同步增長,集成電路生產中心也在向中國大陸轉移,使我國IC產業迅速發展。目前IC制造工藝水平已達到28 nm,為設計高性能DSP系統打下了牢固的基礎。DSP處理器速度與存儲器速度之間的差異是DSP體系結構設計的一個瓶頸問題,在DSP處理器的存儲層次中,Cache是離處理器內核最近的一層存儲器,而Cache技術是有效解決DSP處理器的存儲層問題的重要技術[1]。可以依據Cache的速度和命中率來配置Cache的參數,使Cache的性能達到最佳[2]。

1 BWDSP處理器總體結構
    BWDSP處理器是中國電子集團第38研究所自主研制的一款32 bit靜態超標量處理器,采用8發射、11級流水線、SIMD架構。處理器指令總線寬度為512 bit,數據總線位寬為256 bit;指令存儲空間和數據存儲空間在物理上是分開的,指令存儲空間大小為2 MB,指令Cache空間為512 KB,數據存儲空間為8 MB;取指程序計數器每變化一次,從指令Cache中取出8條指令為一個256 bit指令包進入指令流水線。BWDSP處理器的執行部件包含在4個執行宏中,分別為macro x、macro y、macro z、macro t。指令譯碼單元解析從指令包中得到的并行指令,并決定指令在那些執行宏中運行,進而為指令分配對應執行宏中的執行資源,并且把指令翻譯為微操作,發射到4個執行宏。高性能DSP處理器總體結構如圖1所示。


    在高性能DSP處理器上對指令進行重復訪問時,指令Cache的失效次數與指令空間大小的關系:首先計算第一次重復訪問時的失效次數。設程序指令大小為M,即M0=M/512個Cache行。當M≤512 KB時,程序被訪問后,指令Cache每一組內至多包含一個Cache行的有效指令數據,不會因為沖突失效而發生替換,所以再次執行程序時,不會使指令Cache發生失效;當M在512 KB~1 024 KB時,訪問完一遍之后,前512個Cache行的數據會填充每組內的一個Cache行,而超過512個Cache行的部分,每個Cache行的指令數據有1/4的概率替換掉有效數據,因此,被替換出去的Cache行數約為(M0-512)/4,即重復訪問的失效概率約為(M0-512)/4 M;對于M在1 024 KB~1 536 KB、1 536 KB~2 048 KB、2 048 KB~∞的情況時,可用同樣的方法分析得到訪問一遍之后被替換出去的Cache行數目。
    由上述可知,當執行程序指令空間小于512 KB(即M0<512 KB)時,所有Cache行都不會被替換掉;而當執行程序指令空間大于512 KB時,被替換出去Cache行數呈線性增長,并且不同區間內增長的斜率依次變大。因此,當執行程序指令空間大于指令Cache大小時,指令Cache行被替換出去的概率與指令Cache的替換算法有關。
    指令Cache 參數包括:Cache容量大小、Cache塊大小、組相聯度和替換策略。在某種程度上,可通過優化Cache參數提高Cache的性能,但當Cache容量增加到某一程度時,Cache命中率將迅速降低[3]。指令Cache替換算法是影響指令Cache性能的主要因素,目前常見的指令Cache替換算法有Random、FIFO、LRU、LFU、MRU、SCK-4[4],此外還有比較新穎的LNC算法。FIFIO和Random算法硬件實現簡單,但其性能不佳;而常用的LRU算法性能最佳,但是硬件實現過于復雜,同時該算法占用時間較多。因此,LRU替換算法不是指令Cache最佳的替換算法[5]。預取技術是利用空間局部性,若利用預取技術來克服LRU算法,其缺點將導致缺失不斷增加[6]。而采用PLRU算法對LRU算法進行改進,幾乎不會影響Cache的缺失率,并且簡化了硬件實現代價及復雜度[7]。
2 PLRU替換算法
    LRU(Least Recently Used)替換算法是基于程序時間局部性原理(即現在使用指令代碼在不久時間里將再次訪問該條指令代碼),每次替換最近最少被使用的Cache塊。LRU替換算法是組相聯Cache中最常用的替換算法之一(即比較Cache組內指令行中哪個指令行時間最長沒有被訪問過則被替換出去),而且每次都要記錄每個指令塊的使用情況。Cache是N組相聯映射,需要log2N位來描述LRU替換算法中組內每塊的使用狀態[8]。嚴格意義上的LRU算法實現代價很大,因此考慮到硬件開銷,通常使用偽LRU替換算法,即PLRU(Pseudo-LRU)算法。PLRU算法與LRU算法相近,但簡化了數據預測的過程[9]。PLRU通過使用MRU(Most Recently Used)位,使組中每個Cache塊都有自己的MRU位。4-way組相聯指令Cache的PLRU替換算法示意圖如圖2所示。
  

    PLRU替換算法的步驟如下:
    (1)上電復位時,將LRU Array所有入口值設置為8&rsquo;b11100100,即lru[0:7]=11100100。4路中最近經常使用情況為way0>way1>way2>way3。
    (2)如果命中Cache,則按照下述算法更新8 bit的矢量(lru[0:7])值。
    在BWDSP指令Cache采用4-way組相聯的Cache中,Cache命中可能在4路中的某一路命中,當某一路命中時則要更新lru[0:7]的值。有如下4種情況:
    ①若命中Cache的way0,則根據lru[0:1]值為b00、b01、b10、b11 4種情況更新lru[0:7]的值:
    if   (lru[0:1]= =b00)
      {lru[6:7]&larr;lru[6:7]-1;lru[4:5]&larr;lru[4:5]-1; lru[2:3]
&larr;lru[2:3]-1; lru[0:1]&larr;b11;}
    else if  (lru[0:1]= =b01)
        { if (lru[2:3]==b00)lru[2:3]&larr;lru[2:3];else lru[2:3]
&larr;lru[2:3]-1;
         if (lru[4:5]==b00)lru[4:5]&larr;lru[4:5];else lru[4:5]
&larr;lru[4:5]-1;
         if (lru[6:7]==b00)lru[6:7]&larr;lru[6:7];else lru[6:7]
&larr;lru[6:7]-1;
         lru[0:1] &larr;b11;}
    else if  (lru[1:0]= =b10)
            { if (lru[2:3]==b11) lru[2:3]&larr;lru[2:3]-1;
else lru[2:3]&larr;lru[2:3];
            if (lru[4:5]==b11) lru[4:5]&larr;lru[4:5]-1;else
lru[4:5]&larr;lru[4:5];
            if (lru[6:7]==b11) lru[6:7]&larr;lru[6:7]-1; else
lru[6:7]&larr;lru[6:7];
            lru[0:1]=b11;}
    else  (lru[1:0]= =b11)
            {lru[6:7]&larr;lru[6:7];lru[4:5]&larr;lru[4:5];lru[2:3]
&larr;lru[2:3];lru[0:1]&larr;lru[0:1];}
    ②若命中Cache 的way1,則根據lru[2:3]值為b00、b01、b10、b11 4種情況更新lru[0:7]的值:
    if  (lru[2:3]=b00)
      {lru[6:7]&larr;lru[6:7]-1;lru[4:5]&larr;lru[4:5]-1; lru[2:3]
&larr;b11; lru[0:1]&larr;lru[0:1]-1;}
    else if(lru[2:3]= =b01)
          { if (lru[0:1]==b00) lru[0:1]&larr;lru[0:1];
else lru[0:1]&larr;lru[0:1]-1;
        if (lru[4:5]==b00) lru[4:5]&larr;lru[4:5];
else lru[4:5]&larr;lru[4:5]-1 ;
        if (lru[6:7]==b00) lru[6:7]&larr;lru[6:7];
else lru[6:7]&larr;lru[6:7]-1 ;
        lru[2:3] &larr;b11;}
    else if(lru[2:3]= =b10)
            { if (lru[1:0]==b11)lru[0:1]&larr;lru[0:1]-1;
else lru[0:1]&larr;lru[0:1];
            if (lru[4:5]==b11)lru[4:5]&larr;lru[4:5]-1;
else lru[4:5]&larr;lru[4:5];
            if (lru[6:7]==b11)lru[6:7]&larr;lru[6:7]-1;
else lru[6:7]&larr;lru[6:7];
            lru[2:3]=b11;}
    else (lru[2:3]= =b11)
            {lru[6:7]&larr;lru[6:7];lru[4:5]&larr;lru[4:5];lru[2:3]
&larr;lru[2:3];lru[0:1]&larr;lru[0:1];}
    ③若命中Cache 的way2,則根據lru[4:5]值為b00、b01、b10、b11 4種情況更新lru[0:7]的值:
    if(lru[4:5]=b00)
       {lru[6:7]&larr;lru[6:7]-1;lru[4:5]&larr;b11;lru[2:3]
&larr;lru[2:3]-1;lru[0:1]&larr;lru[0:1]-1;}
    else if(lru[4:5]= =b01)
        { if (lru[0:1]= =b00)lru[0:1]&larr;lru[0:1];
else lru[0:1]&larr;lru[0:1]-1;
        if (lru[2:3]= =b00)lru[2:3]&larr;lru[2:3]; else lru[2:3]
&larr;lru[2:3]-1;
        if (lru[6:7]= =b00)lru[6:7]&larr;lru[6:7]; else lru[6:7]
&larr;lru[6:7]-1;
        lru[4:5] &larr;b11}
    else if(lru[4:5]= =b10)
            { if (lru[1:0]==b11)lru[0:1]&larr;lru[0:1]-1;
else lru[0:1]&larr;lru[0:1];
            if (lru[2:3]==b11)lru[2:3]&larr;lru[2:3]-1;
else lru[2:3]&larr;lru[2:3];
            if (lru[6:7]==b11)lru[6:7]&larr;lru[6:7]-1;
else lru[6:7]&larr;lru[6:7];
            lru[4:5]=b11;}
    else  (lru[2:3]= =b11)
            {lru[6:7]&larr;lru[6:7]; lru[4:5]&larr;lru[4:5];
lru[2:3]&larr;lru[2:3]; lru[0:1]&larr;lru[0:1];}
    ④若命中Cache 的way3,則根據lru[6:7]值為b00、b01、b10、b11 4種情況更新lru[0:7]的值:
    if (lru[6:7]==b00) {lru[6:7]&larr;b11;lru[4:5]&larr;lru[4:5]-1;
lru[2:3]&larr;lru[2:3]-1; lru[0:1]&larr;lru[0:1]-1;}
    else if(lru[6:7]= =b01)
        { if (lru[0:1]==b00)lru[0:1]&larr;lru[0:1];
else lru[0:1]&larr;lru[0:1]-1;
        if (lru[2:3]==b00)lru[2:3]&larr;lru[2:3];
else lru[2:3]&larr;lru[2:3]-1 ;
        if (lru[4:5]==b00)lru[4:5]&larr;lru[4:5];
else lru[4:5]&larr;lru[4:5]-1 ;
        lru[6:7] &larr;b11}
    else if(lru[6:7]= =b10)
            { if (lru[1:0]==b11)lru[0:1]&larr;lru[0:1]-1;
else lru[0:1]&larr;lru[0:1];
            if (lru[2:3]==b11)lru[2:3]&larr;lru[2:3]-1;
else lru[2:3]&larr;lru[2:3];
            if (lru[4:5]==b11)lru[4:5]&larr;lru[4:5]-1;
else lru[4:5]&larr;lru[4:5];
            lru[6:7]=b11;}
    else (lru[6:7]= =b11)
            {lru[6:7]&larr;lru[6:7];lru[4:5]&larr;lru[4:5];
lru[2:3]&larr;lru[2:3]; lru[0:1]&larr;lru[0:1];}
    (3)如果Cache缺失,則按照下述替換算法替換Cache的數據塊,并更新對應的lru[0:7]的值。
    if(lru[0:1]==b00),
      {  替換way0中的數據塊;
         同時要更新對應lru[0:7]的值:lru[6:7]=lru[6:7]-1;
         lru[4:5]=lru[4:5]-1;lru[2:3]=lru[2:3]-1;lru[0:1]=11;}
    if(lru[2:3]==b00)
      {  替換way1中的數據塊;
         同時要更新對應lru[0:7]的值: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;}
    If(lru[4:5]==b00)
      {  替換way2中的數據塊;
         同時要更新對應lru[0:7]的值:lru[6:7]=lru[6:7]-1,
         lru[4:5]=b11,lru[2:3]=lru[2:3]-1,lru[0:1]
         =lru[0:1]-1;}
    if (lru[6:7]==b00)
      {  替換way3中的數據塊;
         同時要更新對應lru[0:7]的值:lru[6:7]=b11;
         lru[4:5]= lru[4:5]-1;lru[2:3]= lru[2:3]-1;lru[0:1]=
         lru[0:1]-1;}
3 仿真與實驗結果
    BWDSP模擬器包含了編譯器、BWDSP指令集、匯編器,能夠編譯用高級語言(C語言)編寫的雷達信號處理的程序代碼和產生基于BWDSP體系結構的目標代碼。BWDSP模擬器的主頻為1 MHz、11級流水線,其內核發射的寬度為8條指令,指令存儲器為1 Mb,指令Cache大小為256 Kb,4路組相聯映射,數據存儲器為2 Mb。用4個典型雷達信號處理程序xd_lib_test2_1_Cache.out、xd_lib_test2_1_part_cache.out、xd_lib_test2_1_Cache.out、dsp.out在BWDSP模擬器驗證平臺上對本文提出的PLRU替換算法進行仿真實驗,并與直接映射、FIFO、RLU、Random替換算法進行對比,從指令Cache的訪問次數、命中次數、缺失次數和命中率來統計指令Cache的性能,其仿真結果如表1所示。

 

 

    表1的仿真結果表明,本文提出的PLRU替換算法其命中率高于其他三種替換算法,且實現PLRU替換算法的硬件代價相對于LRU替換算法要低。通過驗證,高性能BWDSP處理器其整體性能都高于其他三種方法的1.12倍。
    高性能DSP處理器是未來DSP發展趨勢,高速緩存器的多層次存儲器體系結構是提高數字信號處理器系統性能的重要方法。本文在32 bit BWDSP基礎上提出了基于PLRU替換算法的512 bit指令包的指令Cache研究,通過實驗仿真,指令Cache的PLRU替換算法在指令Cache的命中率比FIFO、RLU、Random替換算法都要高出約5.0%。
參考文獻
[1] PEREZ W J H,SANCHEZ E,REORDA M S.Functional test generation for the PLRU replacement mechanism of embedded Cache memories[C].Test Workshop(LATW),2011 12th Latin American,27-30 March 2011.
[2] TAWADA M,YANAGISAWA M,OHTSUKI T,et al.Exact and fast L1 Cache configuration simulation for embedded systems with FIFO/PLRU Cache replacement policies[C]. VLSI Desgin,Automation and Test(VLSI-DAT),International Symposium,2011:1-4.
[3] KLEEN A,STIENBERG E,ANSCHEL M,et al.An improved instruction Cache replacement algorithm[C].Signal Processing Systems Design and Implementation,2-4 Nov.2005:573-578.
[4] 田小波,陳蜀宇.基于最小效用的流媒體緩存替換算法[J].計算機應用,2007,27(3):733-736.
[5] KLEEN A,STIENBERG E,ANSCHEL M,et al.An improved instruction Cache replacement algorithm[C].Signal Processing Systems Design and Implementation,2-4 Nov.2005:573-578.
[6] ZUCKER D F,LEE R B,FLYNN M J.Hardware and software Cache prefetching techniques for MPEG benchmarks[J].IEEE Transactions on Circuits  and Systems for Video Technology,2000,10(5):782-796.
[7] 江喜平,高德遠.CISC中混合Cache的優化設計[J].計算機工程與應用,2006(10):109-111.
[8] Zhang Xi,Li Chongmin,Wang Haixia.A Cache replacement policy using adaptive insertion and re-reference prediction[C].Computer Architecture and High Performance Computing.oct.2010:95-102.
[9] MOLMEN S,MOHSEN S,HOSSEIN R M. Performance evaluation of Cache memory organizations in embedded systems[C].Information Technology,2007:1045-1050.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲免费av电影| 亚洲欧美日韩一区二区三区在线| 欧美日韩高清在线观看| 久久久久久日产精品| 性色av一区二区三区红粉影视| 一区二区三区视频在线播放| 日韩午夜电影av| 亚洲久久在线| 亚洲精品国精品久久99热| 亚洲第一精品福利| 亚洲成人在线网| 久久精品99无色码中文字幕| 欧美一区亚洲一区| 欧美影院在线| 久久精品麻豆| 亚洲福利专区| 狠狠操狠狠色综合网| 欧美日韩一区在线观看| 欧美日韩dvd在线观看| 欧美精品日韩综合在线| 免费视频久久| 欧美成人蜜桃| 欧美国产综合| 欧美另类videos死尸| 欧美精品色网| 欧美日韩精品三区| 欧美性猛交xxxx乱大交退制版| 欧美午夜剧场| 国产精品ⅴa在线观看h| 国产精品高潮呻吟久久av无限| 国产精品久久久久久久午夜| 国产精品久久久久久久久久久久| 国产精品视频导航| 国产一区二区黄色| 亚洲第一黄色| 亚洲精品在线观| 一区二区三区四区精品| 亚洲一区二区在线免费观看视频 | 夜夜夜久久久| 亚洲在线观看视频网站| 午夜日韩视频| 久久影视精品| 欧美日韩成人在线视频| 国产精品久久久久av| 国产一区二区成人| 亚洲国产合集| 夜色激情一区二区| 午夜欧美大片免费观看| 亚洲国产成人精品久久| 一本不卡影院| 久久激情综合| 欧美国产日韩免费| 欧美日韩精品一区二区三区| 国产精自产拍久久久久久| 极品中文字幕一区| 99精品欧美一区二区三区综合在线 | 久久久久九九视频| 欧美精品91| 国产一区二区av| 99精品欧美| 亚洲国产精品专区久久| 亚洲一区二区三区激情| 久久综合999| 国产精品久久久久9999高清 | 91久久夜色精品国产网站| 亚洲一二区在线| 老司机午夜免费精品视频| 欧美午夜片在线免费观看| 国产在线精品成人一区二区三区| 亚洲日本中文字幕| 欧美一区二区三区免费在线看 | 久久综合久久综合九色| 欧美日韩美女在线观看| 国产资源精品在线观看| 一本色道久久综合亚洲精品不卡 | 亚洲国产精品美女| 亚洲欧美三级在线| 欧美成人亚洲成人| 国产欧美精品一区| 日韩视频第一页| 亚洲国产成人不卡| 欧美一级午夜免费电影| 欧美精品123区| 精品二区久久| 亚洲欧美在线观看| 亚洲自拍啪啪| 欧美精品一区二区三区很污很色的 | 亚洲级视频在线观看免费1级| 亚洲欧美bt| 亚洲视频一区| 欧美精品在线视频| 尤物精品在线| 欧美一区二区三区在线视频| 亚洲一区久久久| 欧美日韩三级视频| 亚洲精品国产系列| 亚洲国内自拍| 久久久夜夜夜| 国产日韩精品视频一区| 中文国产一区| 亚洲色图自拍| 欧美日韩高清免费| 亚洲狠狠婷婷| 亚洲国产欧美一区二区三区丁香婷| 欧美亚洲在线观看| 国产精品久久久久影院亚瑟| 亚洲欧洲日本在线| 亚洲人成人77777线观看| 久久蜜桃精品| 国产一区激情| 欧美呦呦网站| 久久精品人人爽| 国产美女精品免费电影| 亚洲天天影视| 亚洲欧美日韩一区在线| 国产精品mm| 一本久道综合久久精品| 宅男噜噜噜66国产日韩在线观看| 欧美日产一区二区三区在线观看| 亚洲国产小视频在线观看| 亚洲欧洲久久| 欧美电影免费观看大全| 亚洲黄色成人| 日韩视频一区二区在线观看 | 亚洲精品一区二区三区福利| 老色批av在线精品| 在线观看久久av| 久久精品一区二区国产| 久久综合色天天久久综合图片| 韩国亚洲精品| 亚洲高清免费视频| 欧美成黄导航| 亚洲人成小说网站色在线| 99re热这里只有精品视频| 欧美国产日产韩国视频| 亚洲精品系列| 亚洲在线观看视频| 国产日韩精品在线播放| 午夜精品在线视频| 久久精品欧美| 好看的日韩视频| 亚洲青色在线| 欧美日韩免费一区| 亚洲一二三四久久| 久久国产主播| 在线观看精品视频| 一区二区免费看| 国产精品日韩精品| 欧美一区二区三区在线| 女同一区二区| 一级成人国产| 久久高清福利视频| 曰本成人黄色| 999在线观看精品免费不卡网站| 欧美日韩麻豆| 亚洲影院在线| 免费观看在线综合| 日韩亚洲成人av在线| 亚洲欧美日韩在线一区| 韩国一区电影| 99精品国产福利在线观看免费| 欧美视频福利| 午夜精品亚洲一区二区三区嫩草| 久久久欧美精品| 亚洲精品国产精品国产自| 羞羞视频在线观看欧美| 精品99视频| 亚洲视频欧美视频| 国产日韩在线一区| 亚洲美女黄网| 国产日韩精品在线播放| 亚洲精品一级| 国产精品婷婷| 91久久久久久久久久久久久| 国产精品久久久久国产精品日日 | 国产麻豆视频精品| 亚洲激情不卡| 欧美日韩午夜剧场| 久久不射中文字幕| 欧美日韩精品在线视频| 亚洲欧美在线一区| 欧美精品亚洲二区| 午夜在线a亚洲v天堂网2018| 欧美18av| 亚洲欧美在线观看| 欧美片在线观看| 先锋资源久久| 欧美日韩系列| 亚洲大胆在线| 国产精品久久久久久久浪潮网站| 亚洲风情在线资源站| 国产精品久久久久久久9999| 亚洲欧洲精品天堂一级| 国产精品亚洲综合久久| 亚洲精品国产精品国自产观看 | 亚洲第一色中文字幕| 亚洲欧美在线一区| 亚洲国产欧美精品| 久久不射电影网| 夜夜狂射影院欧美极品|