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