劉炳濤 王 達(dá) 葉笑春 張 浩 范東?!堉久?/p>
1(中國(guó)科學(xué)院計(jì)算技術(shù)研究所 北京 100190)2 (中國(guó)科學(xué)院大學(xué) 北京 100049) (liubingtao@ict.ac.cn)
?
一種緩存數(shù)據(jù)流信息的處理器前端設(shè)計(jì)
劉炳濤1,2王達(dá)1葉笑春1張浩1范東睿1張志敏1
1(中國(guó)科學(xué)院計(jì)算技術(shù)研究所北京100190)2(中國(guó)科學(xué)院大學(xué)北京100049) (liubingtao@ict.ac.cn)
摘要為了能夠同時(shí)發(fā)掘程序的線程級(jí)并行性和指令級(jí)并行性,動(dòng)態(tài)多核技術(shù)通過(guò)將數(shù)個(gè)小核重構(gòu)為一個(gè)較強(qiáng)的虛擬核來(lái)適應(yīng)程序多樣的需求.通常這種虛擬核性能弱于占有等量芯片資源的原生核,一個(gè)重要的原因就是取指、譯碼和重命名等流水線的前端各階段具有串行處理的特征較難經(jīng)重構(gòu)后協(xié)同工作.為解決此問(wèn)題,提出了新的前端結(jié)構(gòu)——數(shù)據(jù)流緩存,并給出與之配合的向量重命名機(jī)制.數(shù)據(jù)流緩存利用程序的數(shù)據(jù)流局部性,存儲(chǔ)并重用指令基本塊內(nèi)的數(shù)據(jù)依賴等信息.處理器核利用數(shù)據(jù)流緩存能更好地發(fā)掘程序的指令級(jí)并行性并降低分支預(yù)測(cè)錯(cuò)誤的懲罰,而動(dòng)態(tài)多核技術(shù)中的虛擬核通過(guò)使用數(shù)據(jù)流緩存旁路傳統(tǒng)的流水線前端各階段,其前端難協(xié)同工作的問(wèn)題得以解決.對(duì)SPEC CPU2006中程序的實(shí)驗(yàn)證明了數(shù)據(jù)流緩存能夠以有限代價(jià)覆蓋大部分程序超過(guò)90%的動(dòng)態(tài)指令,然后分析了添加數(shù)據(jù)流緩存對(duì)流水線性能的影響.實(shí)驗(yàn)證明,在前端寬度為4條指令、指令窗口容量為512的配置下,采用數(shù)據(jù)流緩存的虛擬核性能平均提升9.4%,某些程序性能提升高達(dá)28%.
關(guān)鍵詞處理器微結(jié)構(gòu);指令緩存;數(shù)據(jù)流;指令重命名;數(shù)據(jù)流局部性
因?yàn)榻Y(jié)構(gòu)復(fù)雜度增長(zhǎng)和功耗墻[1]等問(wèn)題,單核處理器頻率和性能的增長(zhǎng)在21世紀(jì)初遇到瓶頸.處理器結(jié)構(gòu)設(shè)計(jì)師們轉(zhuǎn)而通過(guò)增加片上集成的處理器核數(shù)來(lái)維持處理器符合摩爾定律的性能增長(zhǎng)[2].如今多核處理器已經(jīng)逐漸占據(jù)了桌面和移動(dòng)處理市場(chǎng).
片上多核處理器(chip multi-processor, CMP)通過(guò)發(fā)掘程序的線程級(jí)并行性(thread-level parall-elism, TLP)來(lái)提供更高的處理能力.但利用程序的TLP有其局限性:1)歷史遺留的大量串行程序并沒(méi)有合理的并行化方案;2)通用處理領(lǐng)域大部分的計(jì)算并沒(méi)有足夠的TLP可供發(fā)掘;3)Hill與Marty[3]指出,根據(jù)阿姆達(dá)法則,隨著程序中并行部分的加速,串行部分漸漸成為繼續(xù)降低程序運(yùn)行時(shí)間的瓶頸.這些都表明處理器的單線程處理能力仍然非常重要.
芯片資源總量固定的情況下,核數(shù)增加會(huì)提升處理器發(fā)掘TLP的能力,同時(shí)單核分得資源減少,降低處理器發(fā)掘指令級(jí)并行性(instruction-level parallelism, ILP)的能力.為了在多核設(shè)計(jì)中兼顧發(fā)掘程序的TLP與ILP,學(xué)術(shù)界提出了動(dòng)態(tài)多核(dynamic multi-core, DMC)技術(shù)[3].DMC處理器可以動(dòng)態(tài)地將數(shù)個(gè)較弱的原生核(native core, N-Core)合并為一個(gè)較強(qiáng)的虛擬核(virtual core, V-Core),增加處理器發(fā)掘ILP的能力.DMC技術(shù)按應(yīng)用的需求重構(gòu)多核的組織形式,打破了處理器發(fā)掘ILP與發(fā)掘TLP之間不可調(diào)和的邊界.采用DMC技術(shù)的處理器,其適應(yīng)性和通用性強(qiáng)于固定搭配處理器核的其他類型的多核處理器.
用多個(gè)小的N-Core通過(guò)DMC技術(shù)動(dòng)態(tài)重構(gòu)出的V-Core,其性能通常要弱于用等量芯片資源直接實(shí)現(xiàn)的一個(gè)大的N-Core.一個(gè)重要的原因在于V-Core取得指令的能力弱于其執(zhí)行指令的能力.首先,取指、譯碼和重命名等流水線前端各階段具有串行處理的特點(diǎn),較難協(xié)同工作來(lái)成倍增加指令的供給帶寬.而流水線后端的發(fā)射、執(zhí)行、寫回等階段因具有并行處理的特點(diǎn),相對(duì)較易經(jīng)重構(gòu)后協(xié)同工作增加指令處理能力.其次,傳統(tǒng)的流水線從存儲(chǔ)器中取得的有效指令數(shù)目與執(zhí)行單元處理的有效指令數(shù)目相等,前后端耦合工作.流水線的以上2個(gè)特點(diǎn),決定了DMC處理器中不同粒度的V-Core與N-Core不能全部做到流水線前后端匹配,并導(dǎo)致了DMC處理器不能在各種動(dòng)態(tài)組織形式下都達(dá)到極優(yōu)性能.
為了解決DMC處理器中存在的上述問(wèn)題,我們提出了一種新的處理器前端設(shè)計(jì),稱作數(shù)據(jù)流緩存(dataflow cache, DF-Cache),并給出了與之配合的向量重命名(vector renaming, VR)機(jī)制.DF-Cache利用數(shù)據(jù)流局部性(dataflow locality),其操作的基本單元是經(jīng)譯碼和重命名處理后的指令基本塊,包含了數(shù)據(jù)依賴等信息.當(dāng)指令基本塊在DF-Cache中命中時(shí),經(jīng)向量重命名后,流水線可以立即將其指令交付發(fā)射隊(duì)列,旁路了流水線前端各階段.DF-Cache的作用體現(xiàn)在如下2點(diǎn):1)DF-Cache提升了流水線的指令供給帶寬并降低了指令供給延遲,進(jìn)而提升了處理器發(fā)掘程序ILP的能力,同時(shí)降低分支預(yù)測(cè)錯(cuò)誤帶來(lái)的懲罰;2)DMC處理器中的V-Core利用DF-Cache旁路流水線前端各階段,并不需要取指、譯碼和重命名等流水線階段經(jīng)合并后協(xié)同工作.當(dāng)DF-Cache對(duì)動(dòng)態(tài)指令的覆蓋率很高時(shí),處理器執(zhí)行的大部分指令并非直接取自前端,流水線前端的處理能力不再限制流水線后端對(duì)指令的執(zhí)行,前后端不匹配的問(wèn)題得以解決.
對(duì)SPEC CPU2006中程序的實(shí)驗(yàn)證明了DF-Cache能夠以有限代價(jià)覆蓋大部分程序超過(guò)90%的動(dòng)態(tài)指令;另外,我們分析了添加DF-Cache對(duì)流水線性能的影響.實(shí)驗(yàn)證明,在前端寬度為4、指令窗口大小為512的配置下,采用DF-Cache的V-Core程序執(zhí)行性能平均提升9.4%,某些程序執(zhí)行性能提升高達(dá)28%.
1相關(guān)工作
DF-Cache通過(guò)發(fā)掘數(shù)據(jù)流局部性來(lái)提升流水線前端指令供給能力,進(jìn)而解決DMC處理器中V-Core前后端能力失配的問(wèn)題.相關(guān)工作分為如下2節(jié).
1.1流水線前端的指令供給與數(shù)據(jù)流局部性
為了使處理器的指令窗口有足夠負(fù)載,很多研究著眼于提高流水線前端的指令供給能力.這些研究通常采用的方法是通過(guò)使用各種緩存結(jié)構(gòu)來(lái)旁路相應(yīng)流水線階段的操作,從而達(dá)到降低延遲、提高帶寬的目的.
傳統(tǒng)的指令緩存(instruction cache, ICache)利用計(jì)算的時(shí)間局部性,實(shí)現(xiàn)了容量大、延遲低的指令存儲(chǔ)結(jié)構(gòu),從而降低取指延遲[4].DF-Cache也是一種指令的緩存,降低指令進(jìn)入發(fā)射隊(duì)列之前的總的前端延遲.與ICache的不同有2點(diǎn):1)DF-Cache緩存的是動(dòng)態(tài)指令的數(shù)據(jù)流圖,可以直接供后端使用,而ICache緩存的是統(tǒng)一編址內(nèi)存空間內(nèi)的靜態(tài)指令;2)DF-Cache的操作單元是以分支等控制指令分割的指令基本塊,而ICache操作單元是以地址索引的數(shù)條指令組成的緩存行.
Loop Cache[5]利用回跳分支指令發(fā)現(xiàn)計(jì)算中的循環(huán),然后對(duì)循環(huán)指令進(jìn)行緩存降低取指延遲.Loop Cache在Intel的Nehalem架構(gòu)處理器中已有應(yīng)用[6],Nehalem中的loop stream detector存儲(chǔ)譯碼后的28條微指令,可以旁路譯碼等流水線階段.相較Loop Cache,DF-Cache系統(tǒng)發(fā)掘了動(dòng)態(tài)指令流中的數(shù)據(jù)流局部性,不局限于特殊指令或單個(gè)循環(huán),可以加速多個(gè)或多重的循環(huán)代碼的取指.
Trace Cache[7]比Loop Cache更進(jìn)一步.它緩存譯碼后的指令,用首指令地址與后續(xù)數(shù)個(gè)分支的結(jié)果進(jìn)行索引.如果與多個(gè)分支預(yù)測(cè)的結(jié)果匹配,Trace Cache可以在1個(gè)周期內(nèi)跨越多個(gè)分支提供指令,大大提升前端帶寬.Trace Cache已在商業(yè)處理器中得到應(yīng)用,Intel的Sandy-Bridge架構(gòu)處理器中的decoded uop cache即是一種Trace Cache,可以覆蓋80%的處理器動(dòng)態(tài)指令[8].DF-Cache相比較Trace Cache有2點(diǎn)改進(jìn):1)DF-Cache相比較Trace Cache多緩存了基本塊內(nèi)的指令依賴信息,所以流水線利用DF-Cache能夠旁路了重命名階段前半部分消除名相關(guān)的工作;2)DF-Cache 的操作單元是指令基本塊,相比較Trace Cache,在存儲(chǔ)空間使用效率[9]和與分支預(yù)測(cè)相關(guān)的操作上更具優(yōu)勢(shì).實(shí)驗(yàn)證明,DF-Cache以更小的硬件代價(jià)實(shí)現(xiàn)了更高的指令覆蓋率.
Swanson等人[10]提出了數(shù)據(jù)流局部性的概念,將其解釋為程序中動(dòng)態(tài)數(shù)據(jù)依賴的可預(yù)測(cè)性.為了發(fā)掘這種局部性,WaveScalar提出了新的指令集和微結(jié)構(gòu).DF-Cache則僅在微結(jié)構(gòu)上做改進(jìn),不需要修改指令集,而對(duì)數(shù)據(jù)流局部性的發(fā)掘更有針對(duì)性.
Oberoi與Sohi[11]提出并行化流水線前端的方案.其中稱為Fragment Buffers的結(jié)構(gòu)可以緩存取得的指令并重用.根據(jù)測(cè)試程序的不同,可以使用16個(gè)這種緩沖區(qū)覆蓋程序20%~70%的指令.這種緩沖區(qū)的管理方式與DF-Cache類似,不過(guò)緩存的內(nèi)容卻不同,F(xiàn)ragment Buffers并沒(méi)有為了發(fā)掘數(shù)據(jù)流局部性做針對(duì)性的設(shè)計(jì).
總而言之,提高指令供給能力的研究通常是通過(guò)有選擇的緩存前端流水線各階段的結(jié)果來(lái)加速后續(xù)的重復(fù)操作,指令覆蓋率是衡量其效果的重要指標(biāo).首先,DF-Cache的設(shè)計(jì)符合該邏輯;其次,DF-Cache針對(duì)發(fā)掘數(shù)據(jù)流局部性而設(shè)計(jì),與以往研究不同.結(jié)構(gòu)上體現(xiàn)于2點(diǎn):1)DF-Cache緩存并重用了重命名階段的數(shù)據(jù)依賴信息,據(jù)我們所知,這是之前研究所沒(méi)有的;2)緩存的粒度為指令基本塊,提高前端能力的同時(shí)可以高效地利用片上資源,與預(yù)測(cè)執(zhí)行等技術(shù)更直接銜接.
1.2動(dòng)態(tài)多核技術(shù)
在多核處理器善于發(fā)掘TLP的基礎(chǔ)上,DMC技術(shù)合并N-Core構(gòu)建較強(qiáng)的V-Core來(lái)適應(yīng)程序?qū)LP發(fā)掘的需求.
Core Fusion[12]可以將寬度為2的N-Core“融合(FUSE)”為寬度為4或8的V-Core,它提出了詳細(xì)的重構(gòu)方案.前端的Fetch和Decode階段通過(guò)同步措施協(xié)同工作,然而Rename階段卻沒(méi)有融合.當(dāng)處理器數(shù)個(gè)N-Core按照V-Core的模式工作時(shí),N-Core自身的重命名部件被旁路,而由單獨(dú)的SMU負(fù)責(zé)V-Core的重命名和指令分發(fā)工作.當(dāng)融合出的V-Core的寬度大于8時(shí),SMU便難以實(shí)現(xiàn).Fetch與Decode的同步開(kāi)銷增長(zhǎng)亦不容忽略.Core Fusion融合得出的V-Core前端不具可擴(kuò)展性,導(dǎo)致Core Fusion的能融合的N-Core數(shù)目和獲得的V-Core的寬度受到限制,V-Core的性能也要弱于占用等量芯片資源的N-Core.
CLP(composable lightweight processor)[13]通過(guò)特殊的廣播與收集措施完成V-Core中指令的取指與提交.因?yàn)闆](méi)有核間共享的結(jié)構(gòu),其可擴(kuò)展性要強(qiáng)于Core Fusion.但是CLP依賴非傳統(tǒng)ISA的EDGE指令集來(lái)實(shí)現(xiàn)分布式的指令處理結(jié)構(gòu),需要編譯器的支持,其適應(yīng)性不如DF-Cache.
WiDGET[14]區(qū)別線程管理和計(jì)算資源分配,將計(jì)算資源從流水線中解耦合出來(lái)形成資源池,按應(yīng)用需求分配計(jì)算資源給硬件線程形成V-Core.該DMC技術(shù)只重構(gòu)計(jì)算資源,流水線的串行部分在形成V-Core時(shí)沒(méi)有任何改變,其目的在于實(shí)現(xiàn)與功耗成比例的計(jì)算,其V-Core不具有可擴(kuò)展性,流水線的寬度沒(méi)有改變,所以無(wú)法動(dòng)態(tài)調(diào)整芯片發(fā)掘TLP和發(fā)掘ILP的能力.
Dynamic Core Morphing[15]通過(guò)動(dòng)態(tài)組合2個(gè)非對(duì)稱核后端的計(jì)算資源,使其適應(yīng)應(yīng)用的需求,達(dá)到更好的功耗計(jì)算比.該DMC技術(shù)重構(gòu)的多種V-Core不能都達(dá)到前后端匹配,影響處理器總體能達(dá)到的性能.
從以上研究可以看出,目前已有的DMC技術(shù)并沒(méi)有提出合理的流水線前端的重構(gòu)方案.Core-Fusion的前端融合缺乏可擴(kuò)展性,CLP為了構(gòu)建V-Core借助于非傳統(tǒng)ISA,WiDGET和MorphCore等則不考慮對(duì)流水線前端做動(dòng)態(tài)改變.DF-Cache加入流水線后可以部分替代傳統(tǒng)的流水線前端,通過(guò)發(fā)掘數(shù)據(jù)流局部性為流水線后端提供指令,從而解決DMC中各種V-Core前端能力不足的問(wèn)題.
2數(shù)據(jù)流緩存的原理與擴(kuò)展的流水線結(jié)構(gòu)
以存儲(chǔ)程序?yàn)樘卣鞯鸟T-諾依曼體系結(jié)構(gòu)將程序指令存放在統(tǒng)一編址的存儲(chǔ)空間內(nèi),我們稱之為靜態(tài)指令.程序要被處理器執(zhí)行,首先需要從內(nèi)存中將靜態(tài)指令取出,然后經(jīng)過(guò)譯碼和重命名變?yōu)檫m合執(zhí)行單元使用的微指令的形式,我們稱之為動(dòng)態(tài)指令.提高靜態(tài)指令到動(dòng)態(tài)指令的轉(zhuǎn)換效率和提高動(dòng)態(tài)指令的執(zhí)行效率是馮氏結(jié)構(gòu)的2個(gè)基本問(wèn)題.DF-Cache嘗試解決上述第1個(gè)問(wèn)題.我們分別從計(jì)算模型和處理器微結(jié)構(gòu)2個(gè)角度闡述DF-Cache的原理及優(yōu)勢(shì).
1) 從計(jì)算的角度看.DF-Cache充分利用計(jì)算的數(shù)據(jù)流局部性,提高了處理器前端指令供給能力.
靜態(tài)指令與動(dòng)態(tài)指令的數(shù)量有量級(jí)上的差距,從側(cè)面說(shuō)明動(dòng)態(tài)指令流有很好的時(shí)間局部性.利用這種局部性,從內(nèi)存到發(fā)射隊(duì)列間的整個(gè)指令轉(zhuǎn)換過(guò)程有可以優(yōu)化的環(huán)節(jié).比如ICache,它通過(guò)緩存并重用從內(nèi)存中取得的指令,使得處理器執(zhí)行的動(dòng)態(tài)指令數(shù)量遠(yuǎn)大于從內(nèi)存中取得的靜態(tài)指令數(shù)量.DF-Cache更進(jìn)一步將緩存從取指階段推進(jìn)到重命名階段之后,即指令轉(zhuǎn)換的最后一個(gè)環(huán)節(jié).而DF-Cache利用的數(shù)據(jù)流局部性,則是計(jì)算的時(shí)間局部性在傳統(tǒng)的ISA格局下一種特殊的表現(xiàn)形式.
比較程序存儲(chǔ)的靜態(tài)指令代碼和執(zhí)行的動(dòng)態(tài)指令流,我們可以發(fā)現(xiàn),以分支等控制指令為邊界劃分的指令基本塊在內(nèi)容上是一一對(duì)應(yīng)的.單個(gè)靜態(tài)的指令基本塊通常對(duì)應(yīng)1個(gè)或數(shù)個(gè)動(dòng)態(tài)的指令基本塊實(shí)例,而這些實(shí)例內(nèi)的指令依賴等信息完全相同.所以動(dòng)態(tài)指令流中地址連續(xù)的指令之間的重命名結(jié)果可以緩存并重用,這就是數(shù)據(jù)流局部性的具體體現(xiàn).著眼于此,我們的緩存結(jié)構(gòu)將由控制指令分割的指令基本塊作為操作單元.DF-Cache緩存指令基本塊內(nèi)的各種信息,包括譯碼后的微指令和微指令間依賴等.指令轉(zhuǎn)換工作剩余部分則還有分支等控制指令的預(yù)測(cè)和驗(yàn)證,以及基本塊間的操作數(shù)依賴表示.這2點(diǎn)是指令轉(zhuǎn)換過(guò)程中沒(méi)有可重復(fù)性的部分.當(dāng)指令基本塊在DF-Cache中命中時(shí),通過(guò)復(fù)用存儲(chǔ)的基本塊內(nèi)數(shù)據(jù)流信息,傳統(tǒng)處理器前端的取指、譯碼和重命名的解決名相關(guān)部分等都被旁路,降低了前端的延遲,提高指令供給帶寬.
2) 從微結(jié)構(gòu)的角度看.DF-Cache加入流水線后,解耦合了流水線的前端和后端.這解決了DMC技術(shù)中前端難以重構(gòu)和前后端能力失配的問(wèn)題.
DMC技術(shù)[12]中多個(gè)N-Core的前端很難通過(guò)合并達(dá)到更高的指令供給能力.流水線的后端天然有并行處理的特點(diǎn),發(fā)射隊(duì)列與執(zhí)行單元的動(dòng)態(tài)組合問(wèn)題可類比于傳統(tǒng)單核處理器中分簇(clustered)后端的設(shè)計(jì)問(wèn)題.然而流水線的前端負(fù)責(zé)指令轉(zhuǎn)換,串行處理的特點(diǎn)導(dǎo)致其很難協(xié)同工作.尤其是重命名階段,針對(duì)指令的重命名多采用級(jí)聯(lián)比較器和多路器的設(shè)計(jì)[16],串聯(lián)多個(gè)重命名部件導(dǎo)致一個(gè)超長(zhǎng)的重命名延遲是無(wú)法接受的.所以像Core Fusion中的SMU[12]部件,重構(gòu)的V-Core常另外設(shè)計(jì)結(jié)構(gòu)替代單核內(nèi)的重命名部件.即便如此,因?yàn)橹噶钪孛刑幚砻織l指令的特點(diǎn),目前已知的前端設(shè)計(jì)方法不具有可擴(kuò)展性,很難匹配V-Core的流水線后端增長(zhǎng)的帶寬需求.
DF-Cache作為一種存儲(chǔ)主體基于RAM的結(jié)構(gòu),通過(guò)整合多個(gè)核的DF-Cache可以實(shí)現(xiàn)更高的動(dòng)態(tài)指令覆蓋率,提供更高的讀寫帶寬,具有可擴(kuò)展性.利用DF-Cache進(jìn)行指令轉(zhuǎn)換的帶寬和延遲由向量化重命名決定,它與基本塊的數(shù)量相關(guān),而不與指令數(shù)量直接相關(guān).另一方面,DF-Cache位于流水線前端與后端的結(jié)合處,DF-Cache命中時(shí)取指、譯碼和重命名階段被旁路,這些流水線階段的能力并不直接決定流水線轉(zhuǎn)化指令的能力.如果對(duì)動(dòng)態(tài)指令流有很高的覆蓋率,DF-Cache可以滿足后端對(duì)指令供給的需求.這樣前后端的處理能力不匹配對(duì)V-Core的整體效率沒(méi)有影響.另外,不同于執(zhí)行單元數(shù)量和流水線寬度的設(shè)計(jì)考量,DF-Cache不存在過(guò)度設(shè)計(jì),它所要考慮的是對(duì)動(dòng)態(tài)指令的覆蓋率,與程序的ILP大小、流水線的執(zhí)行能力強(qiáng)弱不直接相關(guān).

Fig. 2 The logic function and organization of UB.圖2 UB的邏輯功能與結(jié)構(gòu)
添加DF-Cache后的流水線結(jié)構(gòu)如圖1所示.虛線上方為DF-Cache對(duì)一個(gè)傳統(tǒng)流水線的擴(kuò)展.DF-Cache命中的指令基本塊,不經(jīng)過(guò)取指和譯碼階段,而后端的執(zhí)行和提交階段為2條流水線所共用.

Fig. 1 Pipeline augmented with DF-Cache.圖1 DF-Cache擴(kuò)展的流水線
從圖1可以看出,如果DF-Cache覆蓋了動(dòng)態(tài)指令流,那么計(jì)算就在DF-Cache和執(zhí)行單元之間構(gòu)成了封閉循環(huán),指令快速地填充到發(fā)射隊(duì)列,后端執(zhí)行單元被最大限度地使用.
基本指令塊被緩存的信息集合稱為config.指令轉(zhuǎn)換時(shí)如果命中這個(gè)config,后端分配物理寄存器和發(fā)射隊(duì)列空間給基本塊的實(shí)例,我們稱其為屬于該config的1個(gè)幀(frame).config對(duì)應(yīng)靜態(tài)的指令基本塊,而frame對(duì)應(yīng)動(dòng)態(tài)的指令基本塊.config存放微指令的編碼以及基本塊內(nèi)指令間的相對(duì)數(shù)據(jù)依賴等信息,frame存放指令的操作數(shù)等信息.
DF-Cache含有2個(gè)組件:微指令緩沖區(qū)(uop buffer, UB)和幀更新緩沖區(qū)(frame update buffer, FUB),分別存放config和frame,如圖1所示.
DF-Cache的功能主要有3個(gè):1)UB命中時(shí),它替代取指和譯碼階段以及重命名階段的部分功能,完成指令的獲??;2)與發(fā)射隊(duì)列(issue queue, IQ)并列的FUB,與指針追蹤部件配合,完成指令的喚醒和選擇;3)指令從UB到FUB的填充,由VR部件負(fù)責(zé).本節(jié)分別介紹這3個(gè)功能的實(shí)現(xiàn).
2.1微指令緩沖區(qū)UB
UB存儲(chǔ)譯碼后的指令基本塊,邏輯功能如圖2所示,物理實(shí)現(xiàn)示意如圖3所示.

Fig. 3 Implementation of UB.圖3 UB的邏輯物理實(shí)現(xiàn)
UB由主微指令緩沖區(qū)(main-UB)和宏微指令緩沖區(qū)(mega-UB)組成.main-UB存儲(chǔ)微指令相關(guān)的信息,比如微指令編碼、微指令間寄存器依賴等,如圖2(c)所示;main-UB由RAM實(shí)現(xiàn),mega-UB存儲(chǔ)基本塊的宏信息,比如首指令的PC值(idxPC)、最后的控制指令的PC值(brPC)等,如圖2(d)所示;mega-UB是基于CAM結(jié)構(gòu)的全相連Cache,用idxPC做索引標(biāo)簽(tag),UB的各字段組成及大小評(píng)估如圖3所示.
讀取緩存的微指令是UB在流水線中的關(guān)鍵路徑操作,主要有2步:1)通過(guò)idxPC檢索mega-UB,獲得微指令在main-UB中的存儲(chǔ)地址(mainUBPtr);2)在main-UB中取出微指令.main-UB對(duì)指令基本塊分行存儲(chǔ),各行之間通過(guò)指針組成鏈表.只有首行的微指令讀取需要檢索mega-UB,后續(xù)的微指令通過(guò)追蹤指針(NextRowPtr)訪問(wèn)main-UB即可獲得.
圖2(a)展示了地址從0x10c50到0x10c60的指令基本塊.首指令地址0x10c50作為該指令基本塊的索引,通過(guò)檢索mega-UB的idxPC字段確認(rèn)DF-Cache是否命中,并獲得基本塊在main-UB中的首行存儲(chǔ)地址,進(jìn)而在main-UB中讀取微指令.同時(shí),0x10c60作為brPC從mega-UB中讀出,分支預(yù)測(cè)器(BPred)使用brPC做分支預(yù)測(cè),獲得下一個(gè)基本指令塊的idxPC,繼續(xù)檢索mega-UB,循環(huán)往復(fù).
DF-Cache的取指方式與ICache相比,有3個(gè)特點(diǎn)值得注意:
1) 基于傳統(tǒng)的取指邏輯,BPred必須在ICache取到控制指令后才可以利用其PC值作出分支預(yù)測(cè).而mega-UB與BPred的互動(dòng)不需要訪問(wèn)main-UB.這縮短了分支預(yù)測(cè)之間的間隔,理論上每個(gè)周期都可以從新的指令基本塊開(kāi)始取指,多個(gè)指令基本塊的微指令讀取周期可以重疊(overlap).
2) 獲得同樣多的指令,mega-UB的訪問(wèn)次數(shù)不會(huì)多于ICache.因?yàn)閙ega-UB只有遇到控制指令時(shí)才進(jìn)行檢索,而ICache在這種情況下也必須進(jìn)行tag比較.同時(shí)ICache在遇到Cache行分界時(shí)都要進(jìn)行檢索,其訪問(wèn)次數(shù)應(yīng)大于mega-UB.
3) mega-UB與BPred以及后續(xù)提到的向量重命名邏輯三者配合,可以比較自然地實(shí)現(xiàn)基于檢查點(diǎn)(checkpoint)的預(yù)測(cè)執(zhí)行.每次mega-UB的檢索,都是進(jìn)行了一次分支預(yù)測(cè),產(chǎn)生了一個(gè)新的frame到FUB中,同時(shí)進(jìn)行一次向量重命名.此時(shí)建立checkpoint,存儲(chǔ)當(dāng)前節(jié)點(diǎn)的結(jié)構(gòu)寄存器映射以及一個(gè)最新的frame相關(guān)信息.將來(lái)控制指令執(zhí)行后,如果發(fā)現(xiàn)分支預(yù)測(cè)錯(cuò)誤可以進(jìn)行回卷.首先丟掉(flush)后續(xù)預(yù)測(cè)執(zhí)行的frame;錯(cuò)誤的分支預(yù)測(cè)指令所在的frame因?yàn)闆](méi)有提交(commit),其所在的config引用計(jì)數(shù)(refCNT)就不為0,從而config也不會(huì)被替換掉,利用checkpoint中的信息做現(xiàn)場(chǎng)恢復(fù),利用正確執(zhí)行方向的idxPC檢索mega-UB恢復(fù)執(zhí)行.
圖2(b)展示了我們?nèi)绾卫靡蕾囍羔?depen-dence pointer)[17-18]表示指令的操作數(shù)依賴.依賴指針是前向的(forward)數(shù)據(jù)流依賴表示,例如指令B依賴指令A(yù),那么在指令A(yù)的操作數(shù)寄存器旁并列存放著指向指令B的源操作數(shù)物理寄存器的指針,當(dāng)指令A(yù)的操作數(shù)更新后,指令追蹤部件負(fù)責(zé)將操作數(shù)傳遞給指令B.指令依賴指針與RAM的實(shí)現(xiàn)相結(jié)合用來(lái)實(shí)現(xiàn)可擴(kuò)展的發(fā)射隊(duì)列.指令基本塊作為整體,對(duì)結(jié)構(gòu)寄存器文件的讀寫集合存儲(chǔ)在結(jié)構(gòu)寄存器讀寫向量?jī)?nèi),用來(lái)做向量重命名.
圖2(c)展示了基本塊內(nèi)的微指令和依賴信息在main-UB中的存儲(chǔ)情況.FUB分為3個(gè)塊(bank),依次存儲(chǔ)微指令的2個(gè)源操作數(shù)和1個(gè)目的操作數(shù),bank由bid索引.指令間的相對(duì)依賴由uopid和bid組成的依賴指針鏈表示.arch項(xiàng)記錄了這個(gè)操作數(shù)是來(lái)自或?qū)懭肽膫€(gè)結(jié)構(gòu)寄存器.
圖2(d)列舉了mega-UB的字段.idxPC用來(lái)做緩存的檢索,判斷緩存是否命中;brPC提供給分支預(yù)測(cè)器使用;LRUPtrs為記錄基本塊訪問(wèn)的時(shí)間先后順序的雙向鏈表指針,用來(lái)維護(hù)LRU(least recently used)信息;mainUBPtr是基本塊在main-UB的首行地址;uopCNT記錄了基本塊內(nèi)的微指令數(shù)目,這個(gè)字段用來(lái)在FUB中分配連續(xù)的空間;refCNT記錄屬于此config的frame實(shí)例數(shù)量;rdVec和wrVec這2個(gè)字段用來(lái)做向量重命名.
DF-Cache未命中時(shí),由ICache負(fù)責(zé)取指,同時(shí)DF-Cache采集指令基本塊的信息,并逐步完成基本塊內(nèi)的指令依賴表示.整個(gè)基本塊取指譯碼完成后,嘗試在DF-Cache中存儲(chǔ)該指令基本塊.
DF-Cache滿時(shí),包括2種情況:mega-UB溢出和main-UB溢出.DF-Cache使用LRU策略進(jìn)行替換,在mega-UB中LRUPtrs組成的雙向鏈表尾逐個(gè)向前清理,直到mega-UB中有空閑條目,main-UB中有足夠空行.
DF-Cache中條目的構(gòu)建與替換不是流水線的關(guān)鍵路徑操作,限于篇幅限制不再繼續(xù)展開(kāi).
對(duì)動(dòng)態(tài)指令的覆蓋率決定了DF-Cache的實(shí)際應(yīng)用效果.著眼于應(yīng)用的數(shù)據(jù)流局部性特征,我們對(duì)不同設(shè)計(jì)參數(shù)配置的UB進(jìn)行實(shí)驗(yàn),考察DF-Cache的指令覆蓋率.同時(shí),DF-Cache的面積、功耗與延遲作為約束,也決定了其是否有實(shí)現(xiàn)的價(jià)值.詳細(xì)分析見(jiàn)3.1節(jié)的實(shí)驗(yàn)部分.
2.2向量重命名VR
傳統(tǒng)的重命名部件的操作對(duì)象是單條指令.1)為每條指令分配存儲(chǔ)操作數(shù)的物理寄存器和發(fā)射隊(duì)列空間;2)解決名相關(guān)依賴,比對(duì)指令的操作數(shù)編碼和寄存器重命名表(register aliasing table, RAT),獲得每個(gè)操作數(shù)依賴的物理寄存器編號(hào)或者從寄存器文件中讀出操作數(shù)的值,并更新RAT;3)將指令和操作數(shù)等寫入發(fā)射隊(duì)列.
向量重命名與傳統(tǒng)重命名結(jié)果相同,但過(guò)程不同.我們將指令的寄存器依賴分為2類:位于基本塊內(nèi)的和位于基本塊間的依賴.1)DF-Cache存儲(chǔ)了基本塊內(nèi)的依賴,只要將config中存儲(chǔ)的依賴關(guān)系加上frame在FUB中的偏移,即可得到絕對(duì)依賴關(guān)系;2)向量重命名部件對(duì)數(shù)個(gè)基本塊的讀寫向量進(jìn)行處理,分析基本塊間的依賴得出操作數(shù)傳遞路徑,并將其補(bǔ)充到發(fā)射隊(duì)列里,完成基本塊間的指令依賴表示.指令進(jìn)入發(fā)射隊(duì)列后,不再有塊內(nèi)和塊間的區(qū)分,被獨(dú)立地調(diào)度執(zhí)行.
DF-Cache連續(xù)命中時(shí),向量重命名部件可在2個(gè)流水的時(shí)鐘周期內(nèi)完成數(shù)個(gè)基本塊的重命名和發(fā)射隊(duì)列的填充操作.
周期1.VR完成基本塊內(nèi)的重命名,并為基本塊間的重命名做準(zhǔn)備.VR的操作對(duì)象是被分支預(yù)測(cè)選中且在DF-Cache中命中的數(shù)個(gè)指令基本塊.首先,每個(gè)frame獲得唯一的frameID并從main-UB向FUB中復(fù)制微指令,即在FUB中分配一塊連續(xù)的物理寄存器和發(fā)射隊(duì)列空間并對(duì)應(yīng)uopid復(fù)制基本塊內(nèi)指令的相對(duì)依賴指針和立即數(shù)操作數(shù).其次,main-UB中的結(jié)構(gòu)寄存器讀寫字段也被讀取,VR將表示塊間依賴的讀寫向量和對(duì)應(yīng)的物理寄存器的地址存儲(chǔ)到向量重命名部件內(nèi),為第2周期的工作做準(zhǔn)備.圖4展示了第1周期操作的結(jié)果.
周期2.VR完成基本塊間的重命名.利用讀寫向量和對(duì)應(yīng)的物理寄存器地址,VR將塊間寄存器依賴補(bǔ)充到指令窗口中,同時(shí)更新RAT.更新依賴時(shí),結(jié)構(gòu)寄存器的寫向量的物理寄存器依賴指針地址作為更新地址,對(duì)應(yīng)的讀向量的物理寄存器地址作為更新值.我們以圖4(a)的基本塊為例子,假設(shè)分支預(yù)測(cè)器給出連續(xù)3個(gè)0x10c60的分支都是預(yù)測(cè)命中,那么我們要將該config的3個(gè)frame更新到指令窗口中.假設(shè)3個(gè)frame在VR的第1周期內(nèi)分得的frameID分別是0x0a,0x0b,0x0c.第2周期的向量重命名過(guò)程和指令窗口更新結(jié)果如圖5所示.

Fig. 4 First cycle of VR.圖4 向量重命名第1周期

Fig. 5 Second cycle of VR.圖5 向量重命名第2周期
向量重命名要求獲得每個(gè)frame的結(jié)構(gòu)寄存器讀寫向量,并且有對(duì)應(yīng)物理寄存器的地址.依賴的發(fā)現(xiàn)和表示過(guò)程舉例說(shuō)明.首先是R0結(jié)構(gòu)寄存器,如圖5(a)所示的虛豎線,從上到下依次為1 10 10 10 1.VR從讀向量為1的位置入手,其獲得的操作數(shù)來(lái)自離它最近的前面一個(gè)標(biāo)記為1的位置*FUB采用單鏈的指針追蹤實(shí)現(xiàn)喚醒和選擇,使得發(fā)射隊(duì)列可擴(kuò)展.如果采用廣播的形式完成喚醒,要考察標(biāo)記為1的最近的寫,通過(guò)減少參數(shù)傳遞的跳數(shù),縮短指令喚醒的延遲..比如BB0的讀向量的R0位置的1和對(duì)應(yīng)的物理寄存器地址2:0a:3說(shuō)明,BB0的第4條微指令的第2個(gè)源操作數(shù)來(lái)自RAT記錄的R0.如果RAT中R0位置是有效的,那么將結(jié)構(gòu)寄存器的值拷貝到FUB的BK2的0a:3地址的data字段;如果R0的位置是無(wú)效的,而是記錄1個(gè)物理寄存器的地址,物理寄存器地址(2:0a:3)拷貝到R0所記錄的物理寄存器的依賴指針里,延續(xù)依賴鏈.再比如BB1的讀向量的R1位置的1和對(duì)應(yīng)的物理寄存器地址1:0b:0說(shuō)明,BB1的第1條微指令的第1個(gè)源操作數(shù)來(lái)自BB0的第4條微指令的第1個(gè)源操作數(shù)(1:0a:3),將(1:0b:0)寫入到(1:0a:3)位置的物理寄存器的依賴指針內(nèi),延續(xù)依賴鏈.最后,見(jiàn)圖5(a)中的RAT′,將每個(gè)最后寫結(jié)構(gòu)寄存器的物理寄存器的地址更新到RAT表中.更新后的FUB見(jiàn)圖5(b).
VR大部分的邏輯操作可以向量化地并行進(jìn)行.以圖5(a)的向量重命名的位矩陣為例.VR可以分別操作各個(gè)結(jié)構(gòu)寄存器對(duì)應(yīng)的縱向位向量而互不影響,而針對(duì)單個(gè)橫向的讀位向量分別查詢距離最近的1并負(fù)責(zé)更新FUB中的依賴,也可以并行進(jìn)行.假設(shè)1個(gè)周期可以預(yù)測(cè)并寫入到FUB中n個(gè)基本指令塊,而結(jié)構(gòu)寄存器有m個(gè),那么需要(n+1)m個(gè)判斷位是否為1并查詢長(zhǎng)度為(2n+1)的向量中最后的1的邏輯部件.硬件開(kāi)銷基本固定,與各基本塊內(nèi)的指令數(shù)和單周期內(nèi)重命名的總指令數(shù)不直接相關(guān).
2.3幀更新緩沖區(qū)FUB
FUB的設(shè)計(jì)類似于RUU[19],流水線并沒(méi)有單獨(dú)的物理寄存器文件,物理寄存器的地址與frame在FUB中的地址信息frameID相關(guān)聯(lián),F(xiàn)UB除了存儲(chǔ)操作數(shù)的依賴信息并調(diào)度微指令外,還存儲(chǔ)操作數(shù).
與RUU不同的是,F(xiàn)UB由RAM而不是CAM組成,數(shù)塊RAM加上指令追蹤部件實(shí)現(xiàn)可擴(kuò)展的發(fā)射隊(duì)列.我們采用了類似ForwardFlow[18]中Dataflow Queue的設(shè)計(jì).
在2.2節(jié)中已經(jīng)提到了FUB的部分實(shí)現(xiàn),F(xiàn)UB由main-FUB和mega-FUB組成.main-FUB作為指令窗口的組成部分*另一部分是標(biāo)量重命名所使用的發(fā)射隊(duì)列,如圖1中IQ所示,同樣采用類似DataflowQueue的設(shè)計(jì).除了填充指令方式不同,IQ與FUB在指令喚醒和選擇上是統(tǒng)一的.,與依賴追蹤部件協(xié)同完成指令的喚醒(wakeup)和發(fā)射(issue).mega-FUB用frameID索引,記錄屬于frame整體的信息,比如frame屬于哪個(gè)config以及該frame還有多少條uop沒(méi)有發(fā)射等,這些信息用來(lái)協(xié)助管理UB和FUB.
依賴追蹤部件沿依賴鏈逐個(gè)傳遞操作數(shù),同時(shí)它負(fù)責(zé)喚醒指令并提供可以發(fā)射的指令給選擇邏輯(select logic).在更新操作數(shù)后,追蹤部件會(huì)將指令的2個(gè)源操作數(shù)讀出,如果操作數(shù)都準(zhǔn)備好,負(fù)責(zé)將這條指令交給選擇邏輯等待發(fā)射,發(fā)射如果不能立刻完成,依賴追蹤部件會(huì)阻塞在這條指令上,直到發(fā)射完成.在更新操作數(shù)后如果另外1個(gè)源操作數(shù)沒(méi)準(zhǔn)備好,依賴追蹤部件會(huì)繼續(xù)沿依賴鏈傳遞操作數(shù).這種指令依賴追蹤與RAM結(jié)合的設(shè)計(jì)保證發(fā)射窗口有可擴(kuò)展性,實(shí)現(xiàn)較大的指令窗口同時(shí)對(duì)性能沒(méi)有太大影響[17-18,20].
每個(gè)指令追蹤部件皆負(fù)責(zé)一段RAM的更新,不屬于其管理范圍的操作數(shù)會(huì)傳遞給負(fù)責(zé)該操作數(shù)的指令追蹤部件處理.每個(gè)指令追蹤部件有輔助的FIFO緩存屬于該部件但無(wú)法立刻追蹤的操作數(shù).RAM的分段越多,F(xiàn)UB的讀寫帶寬越大.總的指令追蹤部件數(shù)量與RAM的分段數(shù)相同,并且決定了FUB單周期內(nèi)能提供給選擇邏輯進(jìn)行發(fā)射的微指令數(shù).
3實(shí)驗(yàn)結(jié)果與分析
3.1數(shù)據(jù)流緩存的動(dòng)態(tài)指令覆蓋率與實(shí)現(xiàn)代價(jià)評(píng)估
DF-Cache能以有限的代價(jià)覆蓋足夠的動(dòng)態(tài)指令才有應(yīng)用價(jià)值.我們首先考察DF-Cache在不同設(shè)計(jì)參數(shù)下對(duì)指令的覆蓋率,然后分析DF-Cache的訪問(wèn)延遲、面積和功耗,并與32KB的ICache進(jìn)行比較.
我們使用SPEC CPU2006[21]中的部分程序作為測(cè)試程序集,使用ref等級(jí)的輸入數(shù)據(jù),如表1所示.我們用ESESC模擬器[22]運(yùn)行測(cè)試程序集,每個(gè)程序我們運(yùn)行20億條動(dòng)態(tài)指令,分析DF-Cache對(duì)動(dòng)態(tài)指令流的覆蓋率.

Table 1 Selected SPEC CPU2006 Benchmarks And Input
在使用CACTI對(duì)不同參數(shù)的DF-Cache設(shè)計(jì)的面積、功耗和延遲進(jìn)行分析后,我們認(rèn)為mega-UB容量為256個(gè)條目、main-UB容量為512個(gè)數(shù)據(jù)行的配置較為合理,并將其作為3.2節(jié)實(shí)驗(yàn)的DF-Cache配置.該配置下DF-Cache對(duì)測(cè)試程序的平均動(dòng)態(tài)指令覆蓋率大于90%,其功耗、面積和訪問(wèn)延遲都要優(yōu)于32 KB的ICache.
3.1.1數(shù)據(jù)流緩存的動(dòng)態(tài)指令覆蓋率
DF-Cache采用LRU替換策略,指令基本塊能否在DF-Cache中持續(xù)命中,取決于其數(shù)據(jù)流局部性.數(shù)據(jù)流局部性的衡量標(biāo)準(zhǔn)即1個(gè)靜態(tài)指令基本塊的相鄰2個(gè)動(dòng)態(tài)實(shí)例之間間隔的指令基本塊種類數(shù).舉例說(shuō)明,假設(shè)mega-UB的條目數(shù)為4,遇到某個(gè)config的第1個(gè)frame時(shí),該config被放到隊(duì)列頭,如果該config的第2個(gè)frame到來(lái)前遇到的基本塊不超過(guò)3種,那么該config沒(méi)有被替換,第2個(gè)frame仍能夠命中.程序中屬于相同config的frame之間間隔的config種類少,表明該程序有好的數(shù)據(jù)流局部性,用較小的mega-UB容量即可覆蓋較多的動(dòng)態(tài)指令.mega-UB中條目越多則動(dòng)態(tài)指令覆蓋率越高.另外,mega-UB是基于CAM的全相連Cache,條目增多會(huì)增加功耗并增大訪問(wèn)延遲.
mega-UB中每個(gè)條目對(duì)應(yīng)單個(gè)指令基本塊,而main-UB中每個(gè)數(shù)據(jù)行存儲(chǔ)8個(gè)譯碼后的微指令,main-UB中每個(gè)數(shù)據(jù)行只能屬于單個(gè)指令基本塊,所以main-UB的行數(shù)應(yīng)該大于等于mega-UB的條目數(shù).
參照?qǐng)D3,mega-UB與main-UB的寬度是確定的,分別為25 B與64 B.需要考量的是部件的高度,即mega-UB中的條目數(shù)與main-UB中的數(shù)據(jù)行數(shù).mega-UB的實(shí)現(xiàn)分為4種:CAM128,CAM256,CAM512,CAM1024.CAM代表了其硬件結(jié)構(gòu),數(shù)字代表了其含有的條目數(shù).main-UB的實(shí)現(xiàn)分為3種:RAM256,RAM512,RAM1024.兩者叉積構(gòu)成DF-Cache的各種配置,例如CAM128與RAM256的組合記為mega-UB128 main-UB256.圖6展示了有代表性的DF-Cache配置對(duì)測(cè)試程序的覆蓋率結(jié)果.

Fig. 6 Instruction coverage by DF-Cache of different configurations.圖6 不同配置DF-Cache的指令覆蓋率
從圖6可以看出,不同的程序表現(xiàn)出不同的特征.第1類程序包括gcc,namd,gobmk,h264ref等,這些應(yīng)用的數(shù)據(jù)流局部性較差,對(duì)mega-UB的容量敏感.體現(xiàn)出這些應(yīng)用的計(jì)算比較復(fù)雜,其控制流很可能與輸入數(shù)據(jù)相關(guān),通常其分支預(yù)測(cè)準(zhǔn)確性也較低.第2類程序包括milc,libquantum,lbm,astar等,這些程序數(shù)據(jù)流局部性好、控制流簡(jiǎn)單,較小的mega-UB即可覆蓋接近100%的動(dòng)態(tài)指令.第3類程序包括其他的測(cè)試程序,當(dāng)mega-UB的容量超過(guò)某值后,即可有較高動(dòng)態(tài)指令覆蓋率.從設(shè)計(jì)空間探索的角度看,我們所取的4個(gè)配置樣本點(diǎn)無(wú)法完全滿足第1類程序的數(shù)據(jù)流局部性要求,能滿足第2類程序的數(shù)據(jù)流局部性要求,能覆蓋到第3類程序的數(shù)據(jù)流局部性臨界點(diǎn).
觀察經(jīng)過(guò)幾何平均的覆蓋率,可以看到mega-UB256 main-UB512的DF-Cache配置對(duì)動(dòng)態(tài)指令的覆蓋率超過(guò)了90%.該數(shù)據(jù)已經(jīng)超過(guò)了SandyBridge中decoded uop cache的80%的指令覆蓋率.
3.1.2數(shù)據(jù)流緩存的實(shí)現(xiàn)代價(jià)分析
CACTI通過(guò)對(duì)存儲(chǔ)器件進(jìn)行建模可以分析其面積、功耗和訪問(wèn)延遲.我們首先分析DF-Cache的組件mega-UB和main-UB,然后計(jì)算得出不同配置的DF-Cache估計(jì)的實(shí)現(xiàn)代價(jià).
mega-UB和main-UB的物理實(shí)現(xiàn)如圖3所示,我們對(duì)RAM,CAM,ICache用CACTI5.3版本進(jìn)行評(píng)估,配置間有差異的輸入?yún)?shù)如表2所示,另外所有配置使用65nm工藝,有1個(gè)讀寫端口,bank數(shù)為1.

Table 2 CACTI Inputs
訪問(wèn)延遲、功耗與面積的評(píng)估結(jié)果分別如圖7~9所示:

Fig. 7 Latency and cycle of CAM,RAM and ICache.圖7 CAM,RAM,ICache的延遲與周期

Fig. 8 Energy per access of CAM,RAM and ICache.圖8 CAM,RAM,ICache的單次訪問(wèn)功耗

Fig. 9 Area of CAM,RAM and ICache.圖9 CAM,RAM,ICache的面積
mega-UB使用CAM實(shí)現(xiàn),其訪問(wèn)延遲、單次讀寫功耗和面積開(kāi)銷的變化曲線都比較陡峭,說(shuō)明其可擴(kuò)展性較差.但CAM256的各項(xiàng)數(shù)據(jù)仍在可接受的范圍內(nèi).
main-UB使用RAM實(shí)現(xiàn),它在功耗和面積方面都要大大優(yōu)于同樣容量的ICache,這是因?yàn)樗褂脧膍ega-UB中獲得的RAM地址直接被訪問(wèn),沒(méi)有普通Cache的標(biāo)簽陣列(tag array).
從UB中取微指令分2種情況:如果是基本塊的首行,首先訪問(wèn)mega-UB,然后從main-UB中取得微指令;否則,利用基本塊每行末尾的指針取得后續(xù)行的微指令.前者的代價(jià)較大,我們稱之為最差情況(worst case),而后者為最好情況(best case).
UB的各項(xiàng)指標(biāo)計(jì)算如下:訪問(wèn)延遲為2個(gè)組件訪問(wèn)延遲的和(worst case)或main-UB的訪問(wèn)延遲(best case).周期等于mega-UB和main-UB周期較大者(訪問(wèn)mega-UB與訪問(wèn)main-UB流水實(shí)現(xiàn)).讀寫事件動(dòng)態(tài)功耗為2個(gè)組件功耗的和(worst case)或main-UB的功耗(best case).面積開(kāi)銷為2個(gè)組件面積開(kāi)銷的和.UB各種配置的評(píng)估結(jié)果如圖10~12所示.

Fig. 10 Latency and cycle of UB.圖10 UB的延遲與周期

Fig. 11 Energy per access of UB.圖11 UB的單次訪問(wèn)功耗

Fig. 12 Area of UB.圖12 UB的面積
可以看出,mega-UB256 main-UB512的配置在訪問(wèn)延遲和單次讀寫功耗以及面積開(kāi)銷方面都要優(yōu)于同樣存儲(chǔ)32KB指令數(shù)據(jù)的4-Way ICache.其功耗開(kāi)銷在最差情況也不大于ICache,而最優(yōu)情況下只有ICache的一半.面積開(kāi)銷只有ICache的40%.
前面2.1節(jié)簡(jiǎn)單提到,mega-UB與main-UB是松散耦合的,與傳統(tǒng)的ICache不同.從該點(diǎn)出發(fā),DF-Cache可以在結(jié)構(gòu)上進(jìn)行優(yōu)化進(jìn)而提高性能.首先,mega-UB和main-UB可以通過(guò)地址緩存隊(duì)列連接,mega-UB負(fù)責(zé)不斷將預(yù)測(cè)獲得的指令基本塊首數(shù)據(jù)行地址放到隊(duì)列中,而main-UB可以從隊(duì)列中取得基本塊首數(shù)據(jù)行地址,自由地完成后續(xù)的微指令取出操作.其次,main-UB基于RAM實(shí)現(xiàn),其訪問(wèn)延遲和功耗低,可以倍頻工作,或者多個(gè)讀寫端口同時(shí)訪問(wèn)多個(gè)基本塊,提高指令供給的寬度.最后,對(duì)在存儲(chǔ)空間內(nèi)連續(xù)的數(shù)個(gè)基本塊,可以在main-UB中鏈接起來(lái),使得main-UB有連續(xù)跨基本塊預(yù)取指的能力,而不完全依賴mega-UB.
通過(guò)以上分析可以看出,DF-Cache的結(jié)構(gòu)和工作方式與傳統(tǒng)的ICache相比,在性能、面積和功耗上都有優(yōu)勢(shì).另外考慮到DF-Cache旁路了譯碼和重命名階段,DF-Cache可以降低處理器的動(dòng)態(tài)功耗.在ESESC中集成的mcpat工具里添加DF-Cache和向量重命名部件的延遲、面積和功耗模型,并在ESESC的時(shí)序模型中添加必要的性能計(jì)數(shù)器,即可以實(shí)時(shí)分析得到添加了DF-Cache的處理器運(yùn)行特定測(cè)試程序時(shí)的動(dòng)態(tài)功耗.本文重點(diǎn)在于DF-Cache加入流水線對(duì)功能和性能的影響,其具體的功耗優(yōu)勢(shì)不再繼續(xù)展開(kāi).本節(jié)通過(guò)分析說(shuō)明了,DF-Cache能以可接受的代價(jià)實(shí)現(xiàn)較高的動(dòng)態(tài)指令覆蓋率.
3.2加入數(shù)據(jù)流緩存對(duì)流水線的影響
DF-Cache加入流水線的作用可概括如下:首先它提升了指令供給帶寬并降低了指令供給延遲;其次,DF-Cache解耦合了流水線的前后端,DF-Cache負(fù)責(zé)向后端供應(yīng)指令,可以解決DMC處理器中V-Core流水線前端能力較弱的問(wèn)題.本節(jié),我們從上述2個(gè)方面分析DF-Cache對(duì)流水線的影響.
表3展示了ESESC模擬處理器核的基準(zhǔn)配置的全部參數(shù)設(shè)置,我們記該配置為F4-B128.F4表示流水線寬度為每周期4條指令,B128表示指令窗口容量為128.

Table 3 Base Configuration F4-B128
表4列舉了我們選擇進(jìn)行實(shí)驗(yàn)的10種處理器核配置.僅與基準(zhǔn)配置不同的參數(shù)設(shè)置在表4中進(jìn)行了列舉,包括流水線寬度、指令窗口大小、功能部件配備和是否搭配有DF-Cache.

Table 4 Selected Configurations in Sample Space
F4-B128,F(xiàn)6-B256,F(xiàn)8-B512模擬的是有不同ILP發(fā)掘能力的N-Core,其前端指令供給能力與后端的執(zhí)行能力匹配較好.F4-B256,F(xiàn)4-B512模擬的是通過(guò)DMC技術(shù)重構(gòu)得來(lái)的V-Core,因?yàn)榱魉€前端各階段的融合效果差,它們的指令供給能力要弱于指令執(zhí)行能力.D4-B128,D4-B256,D4-B512,D6-B256,D8-B512這5個(gè)D系列配置,與F系列的配置一一對(duì)應(yīng),僅額外添加了DF-Cache.要考察前端結(jié)構(gòu)對(duì)流水線的影響,我們需要控制非相關(guān)變量.因而忽略流水線后端V-Core融合導(dǎo)致的額外開(kāi)銷,操作數(shù)傳遞延遲設(shè)置為0.舉例說(shuō)明,F(xiàn)4-B256,D4-B256,F(xiàn)6-B256,D6-B256雖屬不同結(jié)構(gòu),卻擁有相同性能的后端.這使得模擬獲得的實(shí)驗(yàn)數(shù)據(jù)能夠體現(xiàn)出不同前端結(jié)構(gòu)帶來(lái)的影響,有可比較性.
與Core Fusion等DMC設(shè)計(jì)的實(shí)驗(yàn)類似,我們關(guān)注V-Core執(zhí)行單線程程序發(fā)掘ILP的能力,暫時(shí)不考慮多道程序和多線程程序在DMC中的執(zhí)行.我們使用ESESC的TASS采樣模式運(yùn)行了每個(gè)測(cè)試程序10億條動(dòng)態(tài)指令,TASS采樣設(shè)置RWDT各階段的比例為250:245:2:13.模擬的結(jié)果如圖13所示.IPC數(shù)值已經(jīng)歸一化到F4-B128,方便比較.

Fig. 13 One billion uops simulation result.圖13 10億條動(dòng)態(tài)指令模擬結(jié)果
簡(jiǎn)要分析沒(méi)有DF-Cache的F系列配置的測(cè)試結(jié)果反映出的程序與處理器結(jié)構(gòu)的特點(diǎn).
首先,比較F4-B128,F(xiàn)6-B256,F(xiàn)8-B512這3個(gè)N-Core的數(shù)據(jù),可以看到大部分的測(cè)試程序隨著處理器核發(fā)掘ILP的能力上升而執(zhí)行性能有所提升.bzip和libquantum提升較小,說(shuō)明程序本身蘊(yùn)含的ILP較有限或者長(zhǎng)延時(shí)指令較多,對(duì)指令窗口大小不敏感.gcc,namd,soplex,povray,h264ref則含有較高的ILP.再對(duì)比圖6我們可以看到,程序的數(shù)據(jù)流局部性與指令級(jí)并行性之間沒(méi)有明顯的相關(guān)關(guān)系,計(jì)算的這2個(gè)特性分別對(duì)應(yīng)了微結(jié)構(gòu)上流水線前端轉(zhuǎn)化指令的能力和流水線后端執(zhí)行指令的能力.流水線前后端相匹配,且滿足程序的2個(gè)特性才可以有比較高的執(zhí)行效率.
其次,分別比較F4-B256和F6-B256,以及F4-B512和F8-B512這2組V-Core對(duì)比N-Core的數(shù)據(jù).例如gcc,milc,namd,povray等測(cè)試程序,可以明顯看到DMC重構(gòu)得到的V-Core因?yàn)槠淝岸讼鄬?duì)較弱,影響到了流水線對(duì)這些程序的執(zhí)行效果.占用相同資源的N-Core性能強(qiáng)于重構(gòu)得來(lái)的V-Core.
3.2.1數(shù)據(jù)流緩存對(duì)流水線性能影響
DF-Cache將前端的譯碼和重命名信息進(jìn)行緩存,當(dāng)指令基本塊在其中命中時(shí),通過(guò)向量重命名后,可以快速填充到后端發(fā)射隊(duì)列中.所以DF-Cache可以提升前端帶寬、降低前端延遲.但是,傳統(tǒng)的處理器取指、譯碼和重命名等功能已經(jīng)流水化實(shí)現(xiàn),并且分支預(yù)測(cè)部件的正確率都很高,DF-Cache能發(fā)揮多少作用值得商榷,本節(jié)通過(guò)對(duì)比D系列N-Core相對(duì)F系列N-Core的測(cè)試數(shù)據(jù)來(lái)研究DF-Cache的加入對(duì)流水線性能的影響.
擁有不同ILP發(fā)掘能力的N-Core在有或無(wú)DF-Cache的情況下的執(zhí)行性能對(duì)比如圖14所示:

Fig. 14 The influence of DF-Cache on the pipeline of N-Core.圖14 DF-Cache對(duì)N-Core流水線性能影響

Fig. 15 Performance data of D8-B512 and F8-B512.圖15 D8-B512與F8-B512的性能數(shù)據(jù)
1) DF-Cache提升了部分程序的性能,例如gcc,gobmk,povray,sjeng,h264ref,omnetpp.同時(shí)參照?qǐng)D6和圖13可以得出,這些程序能夠被DF-Cache加速存在3個(gè)因素:①程序本身要含有足夠的ILP.DF-Cache提高指令供給,從而使得后端的計(jì)算能力得到更好的利用.而bzip2與libquantum因?yàn)槌绦蜃陨砘蛱幚砥骱蠖四芰υ驅(qū)е翴LP較低,所以DF-Cache對(duì)其提升有限.②這些程序的數(shù)據(jù)流局部性較差.與直覺(jué)相反,DF-Cache覆蓋率較低的程序反而受到的DF-Cache加速效果更好,這是因?yàn)檫@些程序局部性較差,從而指令供給能力提升的空間也大.③程序的分支預(yù)測(cè)準(zhǔn)確率也影響DF-Cache的效果.
2) mcf,milc,soplex,libquantum,astar的部分測(cè)試結(jié)果要比沒(méi)有DF-Cache的情況更差.這主要有2個(gè)原因:①如上段所述,數(shù)據(jù)流局部性好的程序前端帶寬提升的空間非常有限,前后端匹配的流水線已經(jīng)能非常好地利用后端的計(jì)算資源,DF-Cache的加入能提供的正面效果較弱.②通過(guò)分析程序的執(zhí)行過(guò)程,我們發(fā)現(xiàn)發(fā)射隊(duì)列的快速填充導(dǎo)致了不在關(guān)鍵路徑上的指令搶占了屬于關(guān)鍵路徑上的指令的執(zhí)行時(shí)機(jī),我們稱這種降低程序執(zhí)行效率的現(xiàn)象為關(guān)鍵路徑遮擋.如果指令調(diào)度器實(shí)現(xiàn)了優(yōu)先關(guān)鍵路徑指令的調(diào)度算法,該問(wèn)題即可解決.
圖15重點(diǎn)展示了D8-B512和F8-B512的性能對(duì)比數(shù)據(jù)和F8-B512執(zhí)行的ILP絕對(duì)數(shù)值以及分支預(yù)測(cè)準(zhǔn)確率.可以看到DF-Cache對(duì)流水線的加速效果與程序的ILP呈較明顯的正相關(guān)關(guān)系,而與程序的分支預(yù)測(cè)正確率呈較明顯的反相關(guān)關(guān)系.舉例說(shuō)明,povray程序有高的ILP而分支預(yù)測(cè)準(zhǔn)確率低,其受到DF-Cache加速效果最明顯,達(dá)到8.1%;bzip2雖然有低的分支預(yù)測(cè)準(zhǔn)確率,但其ILP有限,DF-Cache基本沒(méi)有加速其執(zhí)行;libquantum的分支預(yù)測(cè)準(zhǔn)確率高但I(xiàn)LP低,DF-Cache的加入反而影響其執(zhí)行,原因見(jiàn)上段的2點(diǎn).所有程序中,soplex與astar屬于偏離上述相關(guān)關(guān)系的測(cè)試程序,經(jīng)過(guò)對(duì)它們執(zhí)行過(guò)程的詳細(xì)分析其性能表現(xiàn)與關(guān)鍵路徑遮擋現(xiàn)象有關(guān),指令調(diào)度策略屬于流水線的后端執(zhí)行能力研究的范圍,與前端指令供給不相關(guān),在此不再做展開(kāi).
總而言之,帶有DF-Cache的處理器前端,能夠更有效地發(fā)掘計(jì)算的數(shù)據(jù)流局部性、增強(qiáng)流水線的指令轉(zhuǎn)化能力.1)它提升指令供給帶寬,增強(qiáng)處理器發(fā)掘ILP的能力;2)它縮短指令供給延遲,降低了分支預(yù)測(cè)錯(cuò)誤帶來(lái)的懲罰.
3.2.2數(shù)據(jù)流緩存解耦合流水線前后端
由3.2節(jié)開(kāi)始對(duì)F系列的V-Core和N-Core數(shù)據(jù)的對(duì)比可知,V-Core前端能力較弱影響其性能.這是目前大部分DMC技術(shù)需要解決的問(wèn)題.
首先,我們對(duì)比D系列的V-Core與F系列的V-Core的性能數(shù)據(jù),分析研究DF-Cache加入流水線后解耦合前后端的作用與效果.如圖16所示,除了bzip2,libquantum等ILP較差的程序外,V-Core運(yùn)行的所有程序在DF-Cache的幫助下,IPC都有很大提升.D4-B256相對(duì)于F4-B256性能平均提升了5.5%,D4-B512相對(duì)于F4-B512性能平均提升了9.4%,尤其是povray性能高達(dá)28%,這說(shuō)明DF-Cache為后端提供了更多的動(dòng)態(tài)指令,能夠較大提升流水線性能.

Fig. 16 The influence of DF-Cache on the pipeline of V-Core.圖16 DF-Cache對(duì)V-Core流水線性能影響
然后,我們對(duì)比具有基本相同硬件開(kāi)銷的集成了DF-Cache的V-Core與沒(méi)有集成DF-Cache的N-Core的數(shù)據(jù).參照?qǐng)D13,可以看出D4-B256和F6-B256,以及D4-B512和F8-B512性能差距較小,平均性能差距小于5%.
而Core Fusion等DMC設(shè)計(jì)其合并后的V-Core性能要大大弱于同寬度的N-Core*例如Core Fusion的8發(fā)射V-Core在運(yùn)行SPEC整型程序時(shí)性能只達(dá)到6發(fā)射N-Core的76%,當(dāng)然Core Fusion全面建模了后端,我們對(duì)V-Core后端的估計(jì)相對(duì)樂(lè)觀..這說(shuō)明V-Core流水線后端的指令執(zhí)行能力在DF-Cache的幫助下得到了充分利用.
通過(guò)上面2段對(duì)DF-Cache加入流水線后性能下限和上限的分析,我們可以看到V-Core不再受限于能力失配的前端,性能更接近其后端的指令執(zhí)行能力.DMC技術(shù)在DF-Cache的幫助下有更高的實(shí)用價(jià)值.
4結(jié)束語(yǔ)
數(shù)據(jù)流緩存嘗試發(fā)掘程序的數(shù)據(jù)流局部性.通過(guò)緩存并重用指令基本塊內(nèi)的數(shù)據(jù)流信息,數(shù)據(jù)流緩存可以旁路取指、譯碼和重命名等流水線前端階段,解耦合流水線的指令供給和指令執(zhí)行功能.
通過(guò)分析程序的數(shù)據(jù)流局部性,我們證明了數(shù)據(jù)流緩存能夠以有限的代價(jià)覆蓋90%以上的動(dòng)態(tài)指令.在流水線寬度為4條指令、指令窗口大小為512條指令的虛擬核的配置下,采用數(shù)據(jù)流緩存提升了SPEC CPU2006平均9.4%的執(zhí)行性能.
數(shù)據(jù)流緩存能夠縮短指令供給延遲,提高指令供給帶寬,降低分支預(yù)測(cè)錯(cuò)誤帶來(lái)的懲罰,通過(guò)解放后端來(lái)增強(qiáng)處理器核發(fā)掘ILP的能力.另外,數(shù)據(jù)流緩存替代流水線前端供給指令,解決動(dòng)態(tài)多核技術(shù)中虛擬核的前端難以協(xié)作工作的問(wèn)題,提升了動(dòng)態(tài)多核技術(shù)中虛擬核的性能,增強(qiáng)動(dòng)態(tài)多核技術(shù)的實(shí)用性.
參考文獻(xiàn)
[1]Agarwal V, Hrishikesh M S, Keckler S W, et al. Clock rate versus IPC: The end of the road for conventional microarchitectures[C] //Proc of the 27th Int Symp on Computer Architecture. New York: ACM, 2000: 248-259
[2]Borkar S, Dubey P, Kahn K, et al. Platform 2015: Intel processor and platform evolution for the next decade[J/OL].[2015-03-04]. http://www.researchgate.net/publication/247190040
[3]Hill M D, Marty M R. Amdahl’s law in the multicore era[J]. Computer, 2008, 41(7): 33-38
[4]Hennessy J, Patterson D. Computer Architecture: A Quantitative Approach[M]. San Francisco, CA: Morgan Kaufmann, 2011
[5]Lee L H, Moyer B, Arends J. Instruction fetch energy reduction using loop caches for embedded applications with small tight loops[C] //Proc of the 1999 Int Symp on Low Power Electronics and Design. New York: ACM, 1999: 267-269
[6]Singhal R. Inside Intel next generation Nehalem microarchitecture[C/OL] //Proc of the 20th Symp of Hot Chips. [2015-03-04]. http://www.cs.uml.edu/~bill/cs515/Intel_Nehalem_Processor.pdf
[7]Rotenberg E, Bennett S, Smith J E. Trace cache: A low latency approach to high bandwidth instruction fetching[C] //Proc of the 29th Int Symp on Microarchitecture. Los Alamitos, CA: IEEE Computer Society, 1996: 24-35
[8]Lempel O. 2nd generation Intel core processor family: Intel core i7, i5 and i3[C/OL] //Proc of the 23rd Symp of Hot Chips. [2015-03-04]. http://www.hotchips.org/wp-content/uploads/hc_archives/hc23/HC23.19.9-Desktop-CPUs/HC23.19.911-Sandy-Bridge-Lempel-Intel-Rev 07.pdf
[9]Black B, Rychlik B, Shen J P. The block-based trace cache[C] //Proc of the 26th Int Symp on Computer Architecture. Los Alamitos, CA: IEEE Computer Society, 1999: 196-207
[10]Swanson S, Schwerin A, Mercaldi M, et al. The WaveScalar architecture[J]. ACM Trans on Computer Systems, 2007, 25(2): article 4
[11]Oberoi P S, Sohi G S. Parallelism in the front-end[C] //Proc of the 30th Int Symp on Computer Architecture. New York: ACM, 2003: 230-240
[12]Ipek E, Kirman M, Kirman N, et al. Core fusion: Accommodating software diversity in chip multiprocessors[C] //Proc of the 34th Int Symp on Computer Architecture. New York: ACM, 2007: 186-197
[13]Kim C, Sethumadhavan S, Govindan M S, et al. Composable lightweight processors[C] //Proc of the 40th Int Symp on Microarchitecture. Los Alamitos, CA: IEEE Computer Society, 2007: 381-394
[14]Watanabe Y, Davis J D, Wood D A. WiDGET: Wisconsin decoupled grid execution tiles[C] //Proc of the 37th Int Symp on Computer Architecture. New York: ACM, 2010: 2-13
[15]Rodrigues R, Annamalai A, Koren I, et al. Performance per Watt benefits of dynamic core morphing in asymmetric multicores[C] //Proc of Int Conf on Parallel Architectures and Compilation Techniques. Los Alamitos, CA: IEEE Computer Society, 2011: 121-130
[16]Yeager K C. The MIPS R10000 superscalar microprocessor[J]. IEEE Micro, 1996, 16(2): 28-40
[17]Raasch S E, Binkert N L, Reinhardt S K. A scalable instruction queue design using dependence chains[C] //Proc of the 29th Int Symp on Computer Architecture. Los Alamitos, CA: IEEE Computer Society, 2002: 318-329
[18]Gibson D, Wood D. ForwardFlow: A scalable core for power-constrained CMPs[C] //Proc of the 37th Int Symp on Computer Architecture. New York: ACM, 2010: 14-25
[19]Sohi G S, Vajapeyam S. Instruction issue logic for high-performance, interruptible pipelined computers[C] //Proc of the 14th Int Symp on Computer Architecture. New York: ACM, 1987: 27-34
[20]Kim I, Lipasti M H. Half-price architecture[C] //Proc of the 30th Int Symp on Computer Architecture. New York: ACM, 2003: 28-38
[21]Henning J L. SPEC CPU2006 benchmark descriptions[J]. ACM SIGARCH Computer Architecture News, 2006, 34(4): 1-17
[22]Ardestani E K, Renau J. ESESC: A fast multicore simulator using time-based sampling[C] //Proc of the 19th IEEE Int Symp on High Performance Computer Architecture. Los Alamitos, CA: IEEE Computer Society, 2013: 448-459

Liu Bingtao, born in 1983. PhD candidate. Student member of China Computer Federation. His main research interests include processor microarchitecture, recon-figurable computing and heterogeneous computing.

Wang Da, born in 1981. PhD, associate professor. Member of China Computer Federation. Her main research interests include IC testing and analysis, micro architecture design, many-core processor, and VLSI design and testing.

Ye Xiaochun, born in 1981. PhD, associate professor. Member of China Computer Federation. His main research interests include high-performance computer archi-tecture, software simulation, algorithm paralleling and optimizing.

Zhang Hao, born in 1981. PhD, associate professor. Member of China Computer Federation. Associate chief architect of the Godson-T many core processor. His research interests include high throughput CPU microarchitectures and application analysis.

Fan Dongrui, born in 1979. PhD, professor and PhD supervisor. Member of China Computer Federation. His main research interests include many-core processor design, high throughput processor design and low power micro-architecture.

Zhang Zhimin, born in 1963. Professor and PhD supervisor. His main research interests include SoC design and computer architecture.
A Dataflow Cache Processor Frontend Design
Liu Bingtao1,2, Wang Da1, Ye Xiaochun1, Zhang Hao1, Fan Dongrui1, and Zhang Zhimin1
1(InstituteofComputingTechnology,ChineseAcademyofSciences,Beijing100190)2(UniversityofChineseAcademyofSciences,Beijing100049)
AbstractIn order to exploit both thread-level parallelism (TLP) and instruction-level parallelism (ILP) of programs, dynamic multi-core technique can reconfigure multiple small cores to a more powerful virtual core. Usually a virtual core is weaker than a native core with equivalent chip resource. One important reason is that the fetch, decode and rename frontend stages are hard to cooperate after reconfiguration because of their serialized processing nature. To solve this problem, we propose a new frontend design called the dataflow cache with a corresponding vector renaming (VR) mechanism. By caching and reusing the data dependencies and other information of the instruction basicblock, the dataflow cache exploits the dataflow locality of programs. Firstly, the processor core can exploit better instruction-level parallelism and lower branch misprediction penalty with dataflow cache; Secondly, the virtual core in dynamic multi-core can solve its frontend problem by using dataflow cache to bypass the traditional frontend stages. By experimenting on the SPEC CPU2006 programs, we prove that dataflow cache can cover 90% of the dynamic instructions with limited cost. Then, we analyze the performance effect of adding the dataflow cache to pipeline. At last, experiments show that with a frontend of 4-instruction wide and an instruction window of 512-entry, the performance of the virtual core with dataflow cache is improved up to 9.4% in average with a 28% maximum for some programs.
Key wordsprocessor microarchitecture; instruction cache (ICache); dataflow; instruction renaming; dataflow locality
收稿日期:2015-04-23;修回日期:2015-07-14
基金項(xiàng)目:國(guó)家“九七三”重點(diǎn)基礎(chǔ)研究發(fā)展計(jì)劃基金項(xiàng)目(2011CB302501);國(guó)家“八六三”高技術(shù)研究發(fā)展計(jì)劃基金項(xiàng)目(2015AA011204,2012AA010901);“核高基”國(guó)家科技重大專項(xiàng)基金項(xiàng)目(2013ZX0102-8001-001-001);國(guó)家自然科學(xué)基金重點(diǎn)項(xiàng)目(61332009,61173007)
中圖法分類號(hào)TP303
This work was supported by the National Basic Research Program of China (973 Program) (2011CB302501), the National High Technology Research and Development Program of China (863 Program) (2015AA011204,2012AA010901), the National Science and Technology Major Projects of Hegaoji (2013ZX0102-8001-001-001), and the Key Program of the National Natural Science Foundation of China (61332009,61173007).