專利名稱:一種超長指令字結(jié)構(gòu)下延遲槽調(diào)度方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種指令調(diào)度技術(shù),尤其涉及一種超長指令字結(jié)構(gòu)下延遲槽調(diào)度方法及其系統(tǒng)。
背景技術(shù):
超長指令字(Very Long Instruction Word,簡稱VLIW)是一種非常長的指令組合,它把許多條指令連在一起,增加了運算的速度。VLIW技術(shù)是提高處理器指令級并行性的主要性能之一,它采用軟硬件協(xié)同開發(fā)處理器的并行性。長指令的組裝由編譯器完成,而不是采用超標(biāo)量處理器基于硬件動態(tài)調(diào)度策略,從而大幅度降低了硬件復(fù)雜度和芯片功耗。在數(shù)字信號處理器(Digital Signal Processing,簡稱DSP)體系結(jié)構(gòu)設(shè)計中,通 常是在精簡指令集計算機(Reduced Instruction Set Computer,簡稱RISC)體系結(jié)構(gòu)下結(jié)合VILW技術(shù)進行研究。采用這種體系結(jié)構(gòu)的流水處理器中,分支指令是提高性能的一個重要障礙,這是因為分支指令之后的指令預(yù)取地址需要在分支指令執(zhí)行到比較后的流水級時才能產(chǎn)生,中間的延遲會造成指令流水線停頓等分支結(jié)果,從而直接影響后續(xù)指令序列的執(zhí)行,降低了指令并行度。延遲槽結(jié)構(gòu)正是為了降低此類指令流水線控制流相關(guān)帶來的性能開銷,其原理是,如果在分支指令之后填入與分支指令不相關(guān)的指令,那么處理器的指令流水線將仍然處于工作狀態(tài),分支指令帶來的延遲將會被這些指令合理應(yīng)用,延遲槽就是用于存放這些指令的結(jié)構(gòu)。延遲槽結(jié)構(gòu)在實際程序執(zhí)行中要想獲得良好效果,需要軟件調(diào)度算法的支持。如果在延遲槽中填充有用的指令,那么處理器的處理性能就可能提高,而如果找不到合適的指令使得延遲槽不得不填充空操作指令的話,那么控制相關(guān)操作所帶來的性能損耗依然存在。因此,軟件上如何讓指令延遲槽獲得盡量充分的使用,是值的探究的。延遲槽調(diào)度算法主要包括局部調(diào)度算法和全局調(diào)度算法兩種方案。傳統(tǒng)編譯器只采用較為簡單的局部函數(shù)片段的調(diào)度,即局部調(diào)度,延遲槽中所填充的指令從基本塊(Basic Block)中選取,基本塊是程序中一個順序執(zhí)行的語句序列,在執(zhí)行時只能從入口語句入,從出口語句退出(基本塊只有一個出口語句和一個入口語句),基本塊以分支指令做為結(jié)束指令。如果基本塊中沒有合適指令可選擇,那么就填充空操作指令,而全局調(diào)度則是在發(fā)現(xiàn)基本塊中沒有合適指令可填充延遲槽后,還會基于一定約束規(guī)則從其他基本塊中選擇合適的指令進行填充,也就是說全局調(diào)度允許跨越基本塊邊界的代碼移動,如果這個過程也失敗,那么再選擇空操作指令進行填充,但在編譯器上實現(xiàn)全局調(diào)度的代價較大,而且直接影響編譯器的編譯速度。在傳統(tǒng)的DSP處理器體系結(jié)構(gòu)設(shè)計中,通常只使用局部調(diào)度算法或限于對編譯速度的考慮選擇全局調(diào)度和編譯器效率的折中,而局部調(diào)度算法通常局限于局部函數(shù)片段可選的目標(biāo)指令數(shù)很少,當(dāng)編譯器充分優(yōu)化時,局部函數(shù)片段中指令之間的邏輯性增強導(dǎo)致延遲槽使用率偏低。當(dāng)傳統(tǒng)的DSP處理器體系結(jié)構(gòu)設(shè)計方案沒用到基于VLIW技術(shù)實現(xiàn)的體系結(jié)構(gòu)中,則無法評估對指令并行度的影響,而對延遲槽的使用可能帶來對指令并行度的破壞,反而影響程序的實際效率。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種超長指令字結(jié)構(gòu)下的延遲槽調(diào)度的方法,以達到延遲槽調(diào)度和程序并行性度之間的權(quán)衡,局部調(diào)度和全局調(diào)度之間的權(quán)衡,從而使程序獲得更高的執(zhí)行效率。為實現(xiàn)上述目的,一方面,本發(fā)明提供一種超長指令字結(jié)構(gòu)下的延遲槽調(diào)度方法,該方法包括以下步驟對當(dāng)前基本塊內(nèi)指令進行局部調(diào)度,所述局部調(diào)度完成后判斷是否有剩余指令延遲槽,若沒有,則調(diào)度結(jié)束;否則將可填充入指令延遲槽但開銷較大的指令放入局部備選指令緩存;對分支目標(biāo)基本塊內(nèi)指令進行全局調(diào)度,選取可填充入指令延遲槽的指令放入全局備選指令緩存; 從所述局部備選指令緩存和/或所述全局備選指令緩存中選取指令填充入所述剩余指令延遲槽。另一方面,本發(fā)明還提供一種超長指令字結(jié)構(gòu)下的延遲槽調(diào)度系統(tǒng),該系統(tǒng)包括局部調(diào)度單元,用于對當(dāng)前基本塊內(nèi)指令進行局部調(diào)度,所述局部調(diào)度完成后判斷是否有剩余指令延遲槽,若沒有,則調(diào)度結(jié)束;否則將可填充入指令延遲槽但開銷較大的指令放入局部備選指令緩存;全局調(diào)度單元,用于對分支目標(biāo)基本塊內(nèi)指令進行全局調(diào)度,選取可填充入指令延遲槽的指令放入全局備選指令緩存;平衡調(diào)度單元,用于從所述局部備選指令緩存和/或所述全局備選指令緩存中選取指令填充入所述剩余指令延遲槽。本發(fā)明實施例提供的一種超長指令字結(jié)構(gòu)下的延遲槽調(diào)度的方法可從匯編級著手完成延遲槽的指令填充工作,該方法結(jié)合了延遲槽調(diào)度方法中局部調(diào)度策略和全局調(diào)度策略,以達到延遲槽調(diào)度和程序并行性度之間的權(quán)衡,局部調(diào)度和全局調(diào)度之間的權(quán)衡,從而使程序獲得更高的執(zhí)行效率。
通過以下結(jié)合附圖以舉例方式對本發(fā)明的實施方式進行詳細描述后,本發(fā)明的其他特征、特點和優(yōu)點將會更加明顯。圖I為本發(fā)明實施例一種超長指令字結(jié)構(gòu)下延遲槽調(diào)度系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明實施例一種超長指令字結(jié)構(gòu)下延遲槽調(diào)度方法流程圖;圖3為局部調(diào)度前構(gòu)造的有向指令依賴圖;圖4為全局調(diào)度前構(gòu)造的有向指令依賴圖。
具體實施例方式下面通過附圖和實施例,對本申請的技術(shù)方案做進一步的詳細描述。本發(fā)明實施例提出的一種VLIW結(jié)構(gòu)下的延遲槽調(diào)度方法,用于從匯編級著手完成延遲槽的指令填充工作。該方法結(jié)合了己提出的延遲槽調(diào)度算法中局部調(diào)度策略、全局調(diào)度策略,并針對VLIW結(jié)構(gòu)對指令并行的要求,設(shè)計了平衡調(diào)度策略以達到指令延遲槽調(diào)度和程序并行度之間的權(quán)衡、局部調(diào)度和全局調(diào)度之間的權(quán)衡,籍此獲得盡可能高的指令流水線性能。下面結(jié)合圖I和圖2詳細介紹本發(fā)明實施例VLIW結(jié)構(gòu)下的延遲槽調(diào)度方法及其系統(tǒng)。如圖I所示,該系統(tǒng)包括處理單元U、局部調(diào)度單元21、全局調(diào)度單元22、平衡調(diào)度單元31、統(tǒng)計單元32,以及代碼生成單元41。處理單元11用于依次解析輸入的匯編文件,并從匯編文件中獲得每條匯編指令所包含的具體信息。上述具體信息包括寄存器信息、目標(biāo)地址信息、指令名稱、指令所涉及到的硬件功能單元的劃分,以及指令執(zhí)行的周期(cycle)數(shù)目。處理單元11將接收到的匯編文件以函數(shù)片段為單位,將函數(shù)標(biāo)號存儲并建立哈希索引表,以方便索引。處理單元11采用雙向鏈表結(jié)構(gòu)將匯編指令以包為單位進行組織。例如,匯編文件如下所示 test:prOadd dO,dl,d2 | IprOsub d3,d4,d5 | 2prOadd d6,d7,d8 | 3prOsub d9,dl0,dll.4prO j testl. 5testl:prO addia alO,I. 6prO addia a8,11 7prO j test I. 8prO addia a5, 11 9prO sub d9,dlO,dll. 10prO j test . 11以上匯編文件被劃分為兩個函數(shù)片段,即函數(shù)片段test和函數(shù)片段testl,函數(shù)片段tes t中的指令I(lǐng) 4構(gòu)成指令包pakl,指令I(lǐng) 指令3中的末尾符“ I ”代表該條匯編指令為可并包指令,指令4中的末尾符”代表該條指令為最后一條可并包指令,pakl中的子鏈表則由指令I(lǐng) 4的邏輯順序組織,指令5構(gòu)成指令包pak2。因此,函數(shù)片段test由pakl和pak2構(gòu)成。針對函數(shù)片段test進行局部調(diào)度的對象集合為{pakl、pak2},而根據(jù)分支指令,即指令5的推斷寄存器prO分析全局調(diào)度的對象集合為{從testl的指令6起至下一個分支指令或函數(shù)片段}或子函數(shù)片段內(nèi)兩條分支指令之間的全部指令包,如以上匯編文件中的指令9 指令11。統(tǒng)計單元32用于統(tǒng)計目標(biāo)函數(shù)片段的靜態(tài)指令周期數(shù),以及經(jīng)過局部調(diào)度和全局調(diào)度后所帶來的指令周期數(shù)的變化。通過統(tǒng)計單元32統(tǒng)計獲得的函數(shù)片段周期數(shù)成為評估指令流水線性能優(yōu)劣的依據(jù)。具體地,在超長指令結(jié)構(gòu)下延遲槽調(diào)度系統(tǒng)中,每個指令延遲槽可代表節(jié)省一個指令周期。在進行局部調(diào)度和全局調(diào)度之前,統(tǒng)計單元32需要遍歷具體函數(shù)片段的指令包集合{pakl、pak2, . . . , pakn}中各元素的子指令鏈表,并計算出最大指令周期數(shù),構(gòu)成最大指令周期數(shù)集合{cl,c2,...cn},累加該集合中的全部元素的值,從而獲得該函數(shù)片段的指令周期數(shù)。本發(fā)明實施例延遲槽調(diào)度系統(tǒng)在開始局部調(diào)度時,一方面,需要考慮延遲槽節(jié)省的指令周期數(shù);另一個方面,需要考慮超長指令結(jié)構(gòu)下指令包的拆分和重組所帶來的指令周期數(shù)的影響。局部調(diào)度單元21用于對當(dāng)前基本塊內(nèi)指令進行局部調(diào)度,當(dāng)局部調(diào)度完成后判斷是否有剩余指令延遲槽,若沒有,則調(diào)度結(jié)束;否則將可填充入指令延遲槽但開銷較大的指令放入局部備選指令緩存。具體地,局部調(diào)度單元21實現(xiàn)函數(shù)片段內(nèi)指令的局部調(diào)度,從目標(biāo)函數(shù)子片段中選取與分支指令、下文指令無關(guān)的指令填充入延遲槽,體現(xiàn)的是一種自下而上的過程,在進行局部調(diào)度前期需要分析當(dāng)前基本塊內(nèi)指令間的依賴關(guān)系,構(gòu)造局部有向指令依賴圖,局部指令依賴圖的入口節(jié)點選擇目標(biāo)分支指令。根據(jù)局部指令依賴圖可從基本塊中找出與分 支指令存在相關(guān)沖突的全部指令,構(gòu)成局部相關(guān)指令集合,并從基本塊中找出可填入指令延遲槽中的全部指令,構(gòu)成局部備選指令集合。如圖3左側(cè)圖所示的函數(shù)片段,假定分支指令9中的call在該體系結(jié)構(gòu)下默認使用到的寄存器為地址寄存器all,則圖2右側(cè)圖中實曲線部分代表和call指令存在數(shù)據(jù)依賴關(guān)系的指令,即表明存在讀后寫的依賴關(guān)系,則相關(guān)指令集合{1,2,6,7,8}無法被填入指令延遲槽中;而圖2右側(cè)圖中虛曲線部分代表指令5和相關(guān)指令集合中的指令7存在寫后讀的反依賴關(guān)系,即指令5同樣無法添加入指令延遲槽中,因此最終的相關(guān)指令集合為{1,2,5,6,7,8,9}。因此,在圖3左側(cè)圖所示的函數(shù)片段中可能被填充入指令延遲槽的局部備選指令集合為{3,4}。在傳統(tǒng)的局部調(diào)度算法中會根據(jù)目標(biāo)體系結(jié)構(gòu)中延遲槽的數(shù)目將備選指令集合{3,4}盡可能的添加入指令延遲槽中,然而,在采用超長指令結(jié)構(gòu)技術(shù)的目標(biāo)體系結(jié)構(gòu)上,按照傳統(tǒng)的局部調(diào)度方式進行填充的效果并不明顯甚至毫無效果。通過圖3左側(cè)圖中各匯編指令的末尾符可以看出指令集合{3,4,5}可構(gòu)成一個指令并行包,指令{I}、指令{2}、指令集合{6,7}和指令集合{8,9}同樣構(gòu)成獨立的指令并行包,即{5}形成相關(guān)指令子集合。以下針對局部調(diào)度單元21在進行局部調(diào)度時平衡調(diào)度單元31進行的平衡調(diào)度進行說明。根據(jù)目標(biāo)體系結(jié)構(gòu)下指令延遲槽數(shù)和局部備選指令集合中指令數(shù)目的比較,以及局部相關(guān)指令集合中與預(yù)備填充入指令延遲槽中的局部備選指令集合中的指令存在于同一個指令并行包的局部相關(guān)指令子集合,是否能與相關(guān)指令集合中的其他元素重新構(gòu)成指令并行包等情況對局部調(diào)度中的平衡調(diào)度算法進行討論第一種情況指令延遲槽數(shù)目大于或者等于局部備選指令集合{3,4}元素數(shù)目,且函數(shù)片段中的局部相關(guān)指令子集合,即指令5,和相關(guān)指令集合中除相關(guān)指令子集合中的指令5之外的指令,即指令{I}、指令{2}、指令集合{6,7}或指令集合{8,9}不可以構(gòu)成新的指令并行包。在第一種情況下,針對局部備選指令集合{3,4}的指令調(diào)度將導(dǎo)致兩個指令延遲槽被占用,而與局部備選指令集合{3,4}可構(gòu)成指令并行包的指令{5}卻構(gòu)成了獨立的指令包。這樣一方面,由于函數(shù)片段中的指令{3}、指令{4}和指令{5}本身可以合并為一個指令包,那么針對局部備選指令集合{3,4}的調(diào)度將不會改變指令集合{3,4,5}對指令流水線的占用;另一方面,備選指令集合{3,4}的調(diào)度將導(dǎo)致指令延遲槽的浪費。因此,對于第一種情況,將不會進行局部備選指令集合{ 3,4}的調(diào)度,而進入下一步的全局調(diào)度。第二種情況指令延遲槽數(shù)目大于或者等于備選指令集合元素數(shù)目,且局部相關(guān)指令集合和與所述局部相關(guān)指令子集合可以構(gòu)成新的指令并行包。例如,指令延遲槽數(shù)目大于等于局部備選指令集合{ 3,4 }元素數(shù)目,且指令{ 5 }可以和指令{I}、指令{2}、指令集合{6,7}或指令集合{8,9}構(gòu)成新的指令并行包。在第二種情況下,針對局部備選指令集合{3,4}的指令調(diào)度同樣將導(dǎo)致兩個指令延遲槽被占用,而指令{5}合并到其他指令包時還需要討論兩種情況情況A,指令{5}的引入導(dǎo)致兩個指令包間添加額外的nop(空)指令時,則局部備選指令集合{3,4}不能被調(diào)度;情況B,指令{5}的引入不會導(dǎo)致額外的nop指令的引入,針對情況B,還需要根據(jù)全局調(diào)度時的結(jié)果進行權(quán)衡。第三種情況指令延遲槽數(shù)目小于局部備選指令集合元素數(shù)目,且與所述局部相 關(guān)指令子集合和所述局部備選指令集合中的任一或多條指令可以和所述局部相關(guān)指令集合構(gòu)成新的指令并行包。例如,指令延遲槽數(shù)目小于局部備選指令集合{ 3,4}元素數(shù)目,且指令{ 5 }可以和局部備選指令集合{ 3,4 }中的指令{ 3 }或指令{ 4 }與指令{ I }、指令{ 2 }、指令集合{ 6,7 }或指令集合{ 8,9 }構(gòu)成新的指令并行包。在第三種情況下,通過局部調(diào)度從局部備選指令集合{3,4}中選取一條指令填入指令延遲槽,節(jié)省I個指令周期。但其結(jié)果還需要根據(jù)全局調(diào)度時的結(jié)果進行權(quán)衡。第四種情況指令延遲槽數(shù)目小于局部備選指令集合元素數(shù)目,且與所述局部相關(guān)指令子集合和所述局部備選指令集合中的任一或多條指令不全部可以和所述局部相關(guān)指令集合構(gòu)成新的指令并行包。例如,指令延遲槽數(shù)目小于局部備選指令集合{ 3,4 }元素數(shù)目,且指令{ 5 }不全部可以和局部備選指令集合{ 3,4 }中的指令{ 3 }或指令{ 4 }與指令{ I }、指令{ 2 }、指令集合{6,7}或指令集合{8,9}構(gòu)成新的指令并行包。在第四種情況下,通過局部調(diào)度將局部備選指令{ 3,4 }中的一條指令填入指令延遲槽將不會提升指令流水性的性能,因此只能進行全局調(diào)度。第五種情況,指令延遲槽數(shù)目小于局部備選指令集合元素數(shù)目,且與所述局部相關(guān)指令子集合和所述局部備選指令集合中的任一或多條指令全部不可以和所述局部相關(guān)指令集合構(gòu)成新的指令并行包。例如,指令延遲槽數(shù)目小于局部備選指令集合{ 3,4 }元素數(shù)目,且指令{ 5 }和指令{ 3 }或指令{ 4 }全部不可以和指令{ I }、指令{ 2 }、指令集合{ 6,7 }或指令集合{ 8,9 }構(gòu)成新的指令并行包。在第五種情況下,如果指令{3}和指令{4}存在于同一個指令并行包,那么通過局部調(diào)度將局部備選指令集合{3,4}中的一條指令填入指令延遲槽同樣不會提升指令流水線的性能,因此只能進行全局調(diào)度。如果指令{3}和指令{4}存在于同一個并行包,那么通過局部調(diào)度利用局部備選指令{3,4}填滿延遲槽,就可節(jié)省延遲槽數(shù)目,因此只需進行局部調(diào)度。需要說明的是,局部調(diào)度是根據(jù)當(dāng)前指令延遲槽的數(shù)目以及局部備選指令集合的開銷而判斷是否填充延遲槽,在局部調(diào)度中需提供一個局部備選緩存器,用于存儲局部備選指令集合中可以被調(diào)度但開銷較大的局部備選指令集合,當(dāng)在下一步的全局調(diào)度完成后,再從局部調(diào)度緩存器與全局調(diào)度緩存器中存儲的備選指令選擇指令填充入剩余指令延遲槽中。優(yōu)選地,在將局部備選指令集合中可填充入指令延遲槽但開銷較大的指令放入局部備選緩存器時,先刪除局部指令集合中不能使性能提高的指令。 全局調(diào)度需要將分支目標(biāo)函數(shù)片段中的部分代碼搬移到延遲槽中,但程序函數(shù)之間的調(diào)用通常是多對一而非一對一的關(guān)系,因此,全局調(diào)度算法自然而然的結(jié)合分支預(yù)測來實現(xiàn),這樣通常導(dǎo)致代碼量的增加。然而,在超長指令字結(jié)構(gòu)下,廣泛使用的推斷寄存器卻讓全局調(diào)度算法獲得了更好的實現(xiàn),以一個處理器的體系結(jié)構(gòu)為例,保留推斷寄存器prO所指引的指令將總是被執(zhí)行的。因此,可根據(jù)Pr寄存器的索引號來確認分支指令是否一定執(zhí)行。全局調(diào)度體現(xiàn)的是一種自上而下的探索過程,相比于局部調(diào)度而言,它需要對目標(biāo)代碼片段的指令并行性做出一定的調(diào)整,是一種“先到先得”(即先獲得調(diào)度權(quán)的處理,后獲得不處理)的過程。在全局調(diào)度使用的前期,同樣需要構(gòu)造出全局有向指令依賴圖,而該依賴圖的入口節(jié)點同樣選擇目標(biāo)分支指令。根據(jù)指令依賴圖可從基本塊中找出與分支指令存在相關(guān)沖突的全部指令,構(gòu)成全局相關(guān)指令集合,并從基本塊中找出可填入指令延遲槽中的全部指令,構(gòu)成全局調(diào)度時的全局備選指令集合。并根據(jù)全局相關(guān)指令集合查找與全局備選指令集合中指令元素存在于相同指令并行包的指令元素,構(gòu)成全局相關(guān)指令子集
口 ο如圖4所示的函數(shù)片段,假定分支指令{9}中的call指令在該體系結(jié)構(gòu)下默認使用到的寄存器為地址寄存器all,則圖4中右側(cè)圖示出的實曲線部分則代表和call指令存在數(shù)據(jù)依賴關(guān)系的指令,即指令集合{ 14,15},指令集合{ 14,15}將無法放入指令延遲槽中,而虛曲線代表的是目標(biāo)函數(shù)片段自身指令之間的數(shù)據(jù)依賴關(guān)系,即指令11不能在指令10之前執(zhí)行,指令15不能在指令11之前執(zhí)行。因此,最后可能被填充入指令延遲槽的全局備選指令集合為{ 10,11,12,13}。傳統(tǒng)的模式下,按照延遲槽剩余的數(shù)量盡可能的填充入指令,而通常容易忽略程序片段自身所擁有的并行性。從圖4左側(cè)圖的函數(shù)片段中可以看出全局備選指令集合{ 10,11,12,13}中的子集合{ 11,12,13}處于同一個并行指令包中,如何最大效率的使用指令延遲槽,同樣可分如下幾種情況進行討論以下針對全局調(diào)度單元22在進行全局調(diào)度時平衡調(diào)度單元31進行的平衡調(diào)度進行說明。以下結(jié)合圖3,并根據(jù)目標(biāo)體系結(jié)構(gòu)下剩余指令延遲槽數(shù)目和備選指令集合元素數(shù)目的比較情況對全局調(diào)度中的平衡調(diào)度算法進行討論第一種情況,剩余指令延遲槽數(shù)目大于等于全局備選指令集合{ 10,11,12,13}元
素數(shù)目。在第一種情況下,全局備選指令集合{ 10,11,12,13}可全部填入指令延遲槽中。由于全局備選指令集合{ 10,11,12,13}中的子集合{ 11,12,13}和指令14是處于同一個并行指令包中,當(dāng)指令{14}不能添加入指令{15}所在的并行指令包時,全局備選指令集合{10,11,12,13}全部填入指令延遲槽中所帶來的效果僅減少了由指令{ 10}所構(gòu)成的并行指令包的周期數(shù);當(dāng)指令{ 14}可以添加入指令{ 15}所在的并行指令包時,則全局備選指令集合{ 10,11,12,13}全部填入指令延遲槽中所帶來的效果僅減少了由指令{ 10}和指令集合{ 11,12,13}分別構(gòu)成并行指令包的周期數(shù)。因此,當(dāng)局部調(diào)度時的第一種情況成立時,或當(dāng)局部調(diào)度時的第二種情況的情況A成立時,全局調(diào)度的結(jié)果即是延遲槽最終的調(diào)度結(jié)果。當(dāng)局部調(diào)度時的第二種情況的情況B成立時,而此時的剩余延遲槽數(shù)目又等于全局備選指令集合{ 10,11,12,13 }元素數(shù)目時,最終的調(diào)度結(jié)果則是I :當(dāng)剩余延遲槽的數(shù)量大于或等于局部備選指令集合{3,4}與全局備選指令集合{ 10,11,12,13}指令元素數(shù)目之和時,那么調(diào)度結(jié)果則是將他們?nèi)刻砑尤胫噶钛舆t槽中。2 :如果剩余延遲槽的數(shù)量小于局部備選指令集合{3,4}與全局備選指令集合{ 10,11,12,13}指令元素數(shù)目之和,那么調(diào)度結(jié)果則是將局部備選指令集合或全局備選指令集合的元素全部添加入指令延遲槽中。第二種情況,剩余指令延遲槽數(shù)目小于全局備選指令集合{ 10,11,12,13}元素數(shù)目,且大于等于局部調(diào)度所獲得局部調(diào)度備選指令集合元素數(shù)目。 在第二種情況下,全局備選指令集合{10,11,12,13}不能全部填入指令延遲槽中,按照傳統(tǒng)的全局調(diào)度算法將全局備選指令集合{10,11,12,13}的子集合{10,11}放入指令延遲槽中,當(dāng)指令集合{ 12,13,14,15}不能獨立成包時,將占用兩個指令延遲槽,所帶來的效果是減少了由指令{10}所構(gòu)成的并行指令包的周期數(shù);當(dāng)指令集合{12,13,14,15}可獨立成包時,占用兩個指令延遲槽,所帶來的效果是減少了兩個并行指令包的周期數(shù)?;虬凑諅鹘y(tǒng)的全局調(diào)度方案將備選指令集合{ 10,11,12,13}的子集合{ 10,11,12}放入指令延遲槽中,當(dāng)指令集合{ 13,14,15}可以獨立成包時,占用三個指令延遲槽,所帶來的效果是減少了兩個并行指令包的周期數(shù);當(dāng)指令集合{13,14,15}不可以獨立成包時,占用三個指令延遲槽,所帶來的效果是減少了由指令10所構(gòu)成的并行指令包的周期數(shù)。全局調(diào)度時的第二種情況所帶來的效果均優(yōu)于局部調(diào)度時的第一種情況和第二種情況,因此,全局調(diào)度結(jié)果即是指令延遲槽最終的調(diào)度結(jié)果。第三種情況,剩余指令延遲槽數(shù)目小于2。在第三種情況下,只能從全局備選指令集合{ 10,11,12,13}中選取一條指令填入指令延遲槽中,由于全局備選指令集合{10,11,12,13}中的指令{10}構(gòu)成了單指令包。因此,將指令10填入指令延遲槽中將減少一個指令周期,而延遲槽的使用效率卻很高。局部調(diào)度時的第一種情況至第五種情況中的任一種情況成立時,全局調(diào)度的第三種情況的結(jié)果即是指令延遲槽最終的調(diào)度結(jié)果。同樣需要說明的是,在全局調(diào)度方案中仍然需要提供一個全局備選指令緩存器,用于存儲全局調(diào)度時開銷較大的全局備選指令集合。在平衡調(diào)度方案中,需判斷局部備選指令緩存器是否為空,如果是,則從全局備選指令緩存器中選取指令填充入指令延遲槽,否則從局部備選指令緩存器和全局備選指令緩存器中選取性能最優(yōu)的指令填充入剩余指令延遲槽。優(yōu)選地,在將全局備選指令集合中可填充入指令延遲槽但開銷較大的指令放入局部備選緩存器時,先刪除局部指令集合中不能使性能提高的指令。另外,當(dāng)全局調(diào)度緩存與局部調(diào)度緩存中的指令數(shù)目之和大于指令延遲槽數(shù)目時,需要考慮指令延遲槽中的指令相關(guān)分析,在向指令延遲槽中添加指令時同樣需要考慮指令之間的相關(guān)性。在一個例子中,指令延遲槽中填入有三條指令(如下所示),DelayslotPrO mu I dO, dl, d2. IPrO nop. 2PrO nop sub d3, d4, dO. 3其中,指令{ I }和指令{3}出現(xiàn)了關(guān)于數(shù)據(jù)寄存器dO的依賴關(guān)系,而指令{ I }中的mul指令的執(zhí)行周期為2個周期,傳統(tǒng)的做法是在指令延遲槽2中填入nop指令,而nop指令的填入將會浪費指令延遲槽。因此,需要選用其他無關(guān)指令來填充入指令延遲槽2的 位置,從而解決nop指令對指令延遲槽的浪費。本發(fā)明實施例提供的超長指令結(jié)構(gòu)下的延遲槽算法結(jié)合了傳統(tǒng)的局部調(diào)度算法和全局調(diào)度算法,并針對超長指令字結(jié)構(gòu)提出了平衡調(diào)度算法。通過延遲槽調(diào)度和程序并行性度之間的權(quán)衡,局部調(diào)度和全局調(diào)度之間的權(quán)衡,從而使程序獲得更高的執(zhí)行效率。另夕卜,在計算復(fù)雜度要低于編譯器中使用的全局調(diào)度算法,且更加靈活,可更加充分的挖掘目標(biāo)程序的執(zhí)行效率。顯而易見,在不偏離本發(fā)明的真實精神和范圍的前提下,在此描述的本發(fā)明可以有許多變化。因此,所有對于本領(lǐng)域技術(shù)人員來說顯而易見的改變,都應(yīng)包括在本權(quán)利要求書所涵蓋的范圍之內(nèi)。本發(fā)明所要求保護的范圍僅由所述的權(quán)利要求書進行限定。
權(quán)利要求
1.一種超長指令字結(jié)構(gòu)下延遲槽調(diào)度方法,其特征在于包括以下步驟 對當(dāng)前基本塊內(nèi)指令進行局部調(diào)度,所述局部調(diào)度完成后判斷是否有剩余指令延遲槽,若沒有,則調(diào)度結(jié)束;否則將可填充入指令延遲槽但開銷較大的指令放入局部備選指令緩存; 對分支目標(biāo)基本塊內(nèi)指令進行全局調(diào)度,選取可填充入指令延遲槽的指令放入全局備選指令緩存; 從所述局部備選指令緩存和/或所述全局備選指令緩存中選取指令填充入所述剩余指令延遲槽。
2.根據(jù)權(quán)利要求I所述的調(diào)度方法,其特征在于,所述局部調(diào)度包括 根據(jù)當(dāng)前基本塊內(nèi)指令間的依賴關(guān)系,獲取局部備選指令集合和局部相關(guān)指令集合; 根據(jù)所述局部相關(guān)指令集合查找與所述局部備選指令集合中各指令元素存在于同一指令并行包的指令元素,構(gòu)成局部相關(guān)指令子集合; 根據(jù)目標(biāo)體系結(jié)構(gòu)結(jié)構(gòu)下指令延遲槽的數(shù)目、所述局部備選指令集合和所述集合中的指令數(shù)目、以及所述局部相關(guān)指令子集合,從所述局部備選指令集合中選取指令填充入指令延遲槽。
3.根據(jù)權(quán)利要求I所述的調(diào)度方法,其特征在于,在將可填充入指令延遲槽但開銷較大的指令放入局部備選指令緩存之前,還包括 刪除所述局部備選指令集合中不能使性能提高的指令。
4.根據(jù)權(quán)利要求權(quán)I所述的調(diào)度方法,其特征在于,所述對分支目標(biāo)基本塊內(nèi)指令進行全局調(diào)度,選取可填充入指令延遲槽的指令放入全局備選指令緩存進一步包括 根據(jù)分支目標(biāo)基本塊內(nèi)指令間的依賴關(guān)系,獲取全局備選指令集合和全局相關(guān)指令集合; 根據(jù)所述全局相關(guān)指令集合查找與所述全局備選指令集合中指令元素存在于相同指令并行包的指令元素,構(gòu)成全局相關(guān)指令子集合; 根據(jù)當(dāng)前剩余延遲槽的數(shù)目、所述全局備選指令集合和所述集合中的指令數(shù)目、以及所述全局相關(guān)指令子集合,從所述全局備選指令集合中選取可填充入指令延遲槽的指令放入全局備選指令緩存。
5.根據(jù)權(quán)利要求4所述的調(diào)度方法,其特征在于,從所述備選指令集合中選取可以填充入指令延遲槽的指令放入全局備選指令緩存之前,還包括 刪除所述全局備選指令集合中不能使性能提高的指令。
6.根據(jù)權(quán)利要求I所述的調(diào)度方法,其特征在于,從所述局部備選指令緩存和/或所述全局備選指令緩存中選取指令填充入所述剩余指令延遲槽進一步包括 判斷所述局部備選指令緩存是否為空,如果是,則從所述全局備選指令緩存中選取指令填充入指令延遲槽,否則從所述局部備選指令緩存和所述全局備選指令緩存中選取性能最優(yōu)的指令填充入剩余指令延遲槽。
7.根據(jù)權(quán)利要求I至6中任一權(quán)利要求所述的調(diào)度方法,其特征在于,所述指令是匯編指令。
8.一種超長指令字結(jié)構(gòu)下延遲槽調(diào)度系統(tǒng),其特征在于包括 局部調(diào)度單元,用于對當(dāng)前基本塊內(nèi)指令進行局部調(diào)度,所述局部調(diào)度完成后判斷是否有剩余指令延遲槽,若沒有,則調(diào)度結(jié)束;否則將可填充入指令延遲槽但開銷較大的指令放入局部備選指令緩存; 全局調(diào)度單元,用于對分支目標(biāo)基本塊內(nèi)指令進行全局調(diào)度,選取可填充入指令延遲槽的指令放入全局備選指令緩存 ; 平衡調(diào)度單元,用于從所述局部備選指令緩存和/或所述全局備選指令緩存中選取指令填充入所述剩余指令延遲槽。
全文摘要
本發(fā)明公開了一種超長指令字結(jié)構(gòu)下延遲槽調(diào)度方法及其系統(tǒng)。該調(diào)度方法包括對當(dāng)前基本塊內(nèi)指令進行局部調(diào)度,所述局部調(diào)度完成后判斷是否有剩余指令延遲槽,若沒有,則調(diào)度結(jié)束;否則將可填充入指令延遲槽但開銷較大的指令放入局部備選指令緩存;對分支目標(biāo)基本塊內(nèi)指令進行全局調(diào)度,選取可填充入指令延遲槽的指令放入全局備選指令緩存;從所述局部備選指令緩存和/或所述全局備選指令緩存中選取指令填充入所述剩余指令延遲槽。該調(diào)度系統(tǒng)包括局部調(diào)度單元、全局調(diào)度單元和平衡調(diào)度單元。本發(fā)明通過延遲槽調(diào)度和程序并行性度之間的權(quán)衡,局部調(diào)度和全局調(diào)度之間的權(quán)衡,從而使程序獲得更高的執(zhí)行效率。
文檔編號G06F9/38GK102880449SQ20121034770
公開日2013年1月16日 申請日期2012年9月18日 優(yōu)先權(quán)日2012年9月18日
發(fā)明者朱浩, 彭楚, 王東輝, 洪纓, 侯朝煥 申請人:中國科學(xué)院聲學(xué)研究所