在運(yùn)行時(shí)的軟件流水線的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明描述的實(shí)施例大體上涉及軟件流水線,并且更特定地涉及在動(dòng)態(tài)編譯器中 執(zhí)行軟件流水線。
【背景技術(shù)】
[0002] 軟件流水線可以是高效編譯器技術(shù),其利用來自循環(huán)的指令級(jí)并行性。常規(guī)軟件 流水線可局限于靜態(tài)編譯器中的部署,其可不適合于動(dòng)態(tài)編譯活動(dòng),例如在硬件/軟件協(xié) 同設(shè)計(jì)、動(dòng)態(tài)語言、云計(jì)算和嵌入式系統(tǒng)中牽涉的那些。
【附圖說明】
[0003] 本發(fā)明的實(shí)施例的各種優(yōu)勢(shì)將通過閱讀下列說明和附上的權(quán)利要求書并且通過 參考下列圖而對(duì)本領(lǐng)域內(nèi)技術(shù)人員變得明顯,其中: 圖1是根據(jù)實(shí)施例的裝置的示例的框圖; 圖2A和2B是根據(jù)實(shí)施例的方法的示例的流程圖; 圖3A-3E是根據(jù)實(shí)施例的場(chǎng)景的插圖; 圖4是根據(jù)實(shí)施例的系統(tǒng)的框圖; 圖5是根據(jù)實(shí)施例的處理器的示例的框圖。
【具體實(shí)施方式】
[0004] 現(xiàn)在轉(zhuǎn)向圖1,圖示用于對(duì)動(dòng)態(tài)編譯器執(zhí)行軟件流水線的裝置21。圖示的裝置21 包括第一模塊22、第二模塊23、第三模塊24、第四模塊25和第五模塊26。該第一模塊22 可確定對(duì)于由動(dòng)態(tài)編譯器處理一個(gè)或多個(gè)循環(huán)的性能水平,其中該性能水平通過計(jì)算最小 啟動(dòng)間隔(Mil)來確定。第二模塊23可執(zhí)行代碼優(yōu)化以對(duì)一個(gè)或多個(gè)循環(huán)產(chǎn)生在規(guī)定時(shí) 期內(nèi)實(shí)現(xiàn)所確定的性能水平的流水線調(diào)度,其中執(zhí)行的代碼優(yōu)化包括分配硬件資源并且確 定對(duì)于每個(gè)分區(qū)級(jí)中包括的指令的局部依賴性來產(chǎn)生局部調(diào)度。
[0005] 另外,執(zhí)行的代碼優(yōu)化可包括調(diào)整局部調(diào)度來解決循環(huán)承載依賴性以創(chuàng)建調(diào)整的 局部調(diào)度并且使指令從它們的當(dāng)前級(jí)移到下一個(gè)級(jí)以如果所調(diào)整的局部調(diào)度未實(shí)現(xiàn)性能 水平且還未發(fā)生規(guī)定時(shí)期則產(chǎn)生下一個(gè)迭代調(diào)度。執(zhí)行的代碼優(yōu)化可重復(fù)以使用下一個(gè)迭 代調(diào)度來產(chǎn)生新的調(diào)整的局部調(diào)度,只要規(guī)定時(shí)期直到調(diào)整的局部調(diào)度實(shí)現(xiàn)性能水平才發(fā) 生即可。
[0006] 第三模塊24可對(duì)一個(gè)或多個(gè)循環(huán)建立依賴圖并且基于性能水平將每個(gè)依賴圖分 區(qū)成級(jí)。第四模塊25可確定調(diào)整的局部調(diào)度是否實(shí)現(xiàn)性能水平并且如果所調(diào)整的局部調(diào) 度未實(shí)現(xiàn)性能水平,則第五模塊26可確定是否已發(fā)生規(guī)定時(shí)期。圖示的裝置21因此在優(yōu) 化對(duì)于動(dòng)態(tài)編譯活動(dòng)(例如在硬件/軟件協(xié)同設(shè)計(jì)、動(dòng)態(tài)語言、云計(jì)算和嵌入式系統(tǒng)中牽涉 的那些)的代碼方面可以是有用的。
[0007] 圖2A圖示在運(yùn)行時(shí)對(duì)動(dòng)態(tài)編譯器執(zhí)行軟件流水線的方法。圖示的方法可實(shí)現(xiàn)為 邏輯指令集和/或固件,其存儲(chǔ)在例如隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可編程 ROM (PR0M)、閃速存儲(chǔ)器等機(jī)器或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,在例如可編程邏輯陣列(PLA)、 現(xiàn)場(chǎng)可編程門陣列(FPGA)、復(fù)雜可編程邏輯設(shè)備(CPLD)等可配置邏輯中,在使用匯編語言 編程和例如專用集成電路(ASIC)、互補(bǔ)金屬氧化物半導(dǎo)體(CMOS)或晶體管-晶體管邏輯 (TTL)技術(shù)等電路技術(shù)的固定功能性硬件中,或其任何組合中。例如,用于實(shí)施在圖示的方 法中示出的操作的計(jì)算機(jī)程序代碼可采用一個(gè)或多個(gè)編程語言的任何組合來編寫,其包括 面向?qū)ο缶幊陶Z言(例如C++或類似物)和常規(guī)程序編程語言,例如"C"編程語言或相似編 程語言。此外,方法可使用前面提到的電路技術(shù)中的任一個(gè)來實(shí)現(xiàn)。
[0008] 方法可一般通過在不違背任何依賴或資源約束的情況下使循環(huán)迭代的執(zhí)行重疊 來執(zhí)行軟件流水線。圖示的方法在過程塊11處通過計(jì)算最小啟動(dòng)間隔(Mil)而開始。該最 小啟動(dòng)間隔可以是循環(huán)迭代開始到下一個(gè)循環(huán)迭代開始之間的最短時(shí)期。在一個(gè)示例中, 啟動(dòng)間隔越短,完成循環(huán)過程所需要的周期數(shù)越小并且可使用軟件流水線越快地執(zhí)行循環(huán) 過程。另外,作為計(jì)算MII的副產(chǎn)物,可在后續(xù)調(diào)度期間識(shí)別關(guān)鍵操作并且給予其優(yōu)先級(jí)。
[0009] 對(duì)于指定循環(huán),例如在圖3A中圖示的循環(huán),建立依賴圖。例如在圖3B中圖示依賴 圖。在圖中,圖示有兩個(gè)循環(huán)承載依賴邊緣,d - b和b - a,每個(gè)具有迭代距離值(1)。依 賴邊緣c - d具有兩個(gè)周期的延遲。其它依賴是局部的,并且因此它們具有迭代距離值(0)。 強(qiáng)連通分量(SSC)可使用例如Tarjan的強(qiáng)連通分量算法等算法從依賴圖識(shí)別。
[0010] 最小啟動(dòng)間隔可使用算法中識(shí)別的SCC來計(jì)算,例如Howard迭代策略算法,其可 實(shí)現(xiàn)如下: MllCalculation(H),其中H是在Howard迭代策略算法中掃描SCC的最大次數(shù)。
[0011] 在依賴圖中識(shí)別SCC MII - - OO for 每個(gè) SCC do 利用Howard迭代策略算法計(jì)算SCC的廣義最大電路平均值,但策略在持續(xù)H次地掃描 SCC后還未穩(wěn)定時(shí)中止 MII=max(MII,廣義最大電路平均值) isCritical(a) 一 FALSE .穿 operation a for 每個(gè) SCC do if MII=SCC的廣義最大電路平均值then isCritical (a) -TRUEoperation a e SCC 策略圖中的關(guān)鍵周期。
[0012] 在過程塊12處,圖示的方法將依賴圖分區(qū)成初始級(jí)集來形成接近最佳調(diào)度的初 始調(diào)度。過程塊12還可提供初始化時(shí)期變量(例如,"i",在下文更詳細(xì)論述的)。每個(gè)級(jí)可 具有預(yù)定高度MII。例如,如果在圖3B中圖示的依賴圖被切開使得每個(gè)級(jí)具有MII個(gè)周期, 則所得的初始調(diào)度在圖3C中圖示,這時(shí)MII等于二(2)。
[0013] 依賴圖可使用例如Bellman-Ford算法等算法來分區(qū)。算法可計(jì)算自偽開始節(jié)點(diǎn) 到依賴圖中的每個(gè)節(jié)點(diǎn)的最長(zhǎng)路徑。在一個(gè)示例中,對(duì)于節(jié)點(diǎn)的路徑長(zhǎng)度除以MII是對(duì)于 節(jié)點(diǎn)的級(jí)指數(shù)。這樣的方法可創(chuàng)建初始調(diào)度,其中每個(gè)節(jié)點(diǎn)被分配級(jí)。在該過程中,每個(gè)邊 緣(a - b,δ,d)可具有δ -d*MII的長(zhǎng)度,并且偽開始可連接到具有長(zhǎng)度0的任何其它節(jié) 點(diǎn)。邊緣a -b,S,d具有從a -b的依賴,其中δ是延遲并且d是迭代距離。計(jì)算的最 長(zhǎng)路徑可分成級(jí)。
[0014] 算法可例如使用閾值B來控制Bellman-Ford算法的迭代次數(shù)而實(shí)現(xiàn)如下。一旦 迭代次數(shù)達(dá)到B并且未完成算法,整個(gè)方法中止。
在過程塊13處,圖示的方法開始執(zhí)行代碼優(yōu)化來產(chǎn)生流水線調(diào)度并且實(shí)現(xiàn)計(jì)算的 MII。特別地,在過程塊13處,圖示的方法可分配硬件資源、實(shí)行對(duì)分區(qū)級(jí)中的指令的局部 依賴以及創(chuàng)建局部調(diào)度??蓪?duì)指令內(nèi)的每個(gè)操作分配資源和偏移。過程塊13可例如用算 法實(shí)現(xiàn)如下:
對(duì)于當(dāng)前內(nèi)核中反向順序中的每個(gè)操作,do 對(duì)于每個(gè)外出邊緣爆:£|0::,do
應(yīng)用例如任何列表調(diào)度,其作用于局部依賴并且按照具有高度優(yōu)先級(jí)函數(shù)的資源約束 工作。
[0016] 在過程塊14處,圖示的方法可通過調(diào)整局部調(diào)度來解決循環(huán)承載依賴而繼續(xù)執(zhí) 行代碼優(yōu)化。對(duì)于未用局部調(diào)度解決的每個(gè)循環(huán)承載依賴,可在源與目的指令之間插入一 個(gè)或多個(gè)空白級(jí)以嘗試解決循環(huán)承載依賴(即,水平內(nèi)核擴(kuò)展)。這樣的方法在兩個(gè)操作之 間延伸時(shí)間距離以不小于依賴的延遲。圖3D圖示具有循環(huán)承載依賴的局部調(diào)度。通過在 c與d之間添加空白級(jí)(如在圖3E中圖示的),解決依賴。
[0017] 為了解決在過程塊13期間還未解決的循環(huán)承載依賴,內(nèi)核擴(kuò)展可例如執(zhí)行如下: 讓(a - b,δ,d)成為在任何執(zhí)行代碼優(yōu)化之前原始依賴圖中未解決的循環(huán)承載依賴 圖。作為第一選擇,進(jìn)行通過在循環(huán)承載依賴的源與匯節(jié)點(diǎn)之間插入空白級(jí)的水平內(nèi)核擴(kuò) 展來增加時(shí)間距離d的嘗試。這樣的方法可迫使它們的時(shí)間差異滿足或超出依賴的延遲, 并且從而在不增加啟動(dòng)間隔的情況下解決依賴。
[0018] 作為其中存在通過插入空白級(jí)而無法解決的任何循環(huán)承載依賴的另一個(gè)方法中, 啟動(dòng)間隔(II)可增加。
[0019] 當(dāng)新的耐,可不違背激茜足的之前的憾。如果特定憾盼匯節(jié)點(diǎn)級(jí)在依賴細(xì)節(jié)點(diǎn) 級(jí)之前,貝I族它們之間插入級(jí)可只御寸間差減小。簡(jiǎn)而言之,對(duì)于依賴可存在"禁止"級(jí)和"可擴(kuò)展"級(jí)。緊 樹封襟止何擴(kuò)膨級(jí)之Ι?獻(xiàn)空白級(jí)所吏憾隨與&間的時(shí)間差減小獅。形式h對(duì)于邊緣e: a -b,墻ρφ?、、、、a) ^ LtXiuiiJ^Wcum ? ^ ^ }。 Stage(o)可以是運(yùn)算〇的級(jí)指數(shù)。
[0020] 注意兩個(gè)集可由源與匯節(jié)點(diǎn)的級(jí)之間的級(jí)組成,因?yàn)槿绻谠春蛥R節(jié)點(diǎn)的級(jí)兩者 之前(或兩者之后)插入級(jí),對(duì)時(shí)間差將沒有影響。
[0021] 現(xiàn)在對(duì)于未解決的依賴,為了在不改變啟動(dòng)間隔(II)的情況下解決它,緊挨它的 可擴(kuò)展級(jí)中的一個(gè)之前插入的級(jí)的最小數(shù)量可從以下得到: 在5;〇/!*// + 〇/7'5拉|?-£?/'/泌?丨,其中(^861:(0)是在內(nèi)核中它的級(jí)中的運(yùn)算 〇的時(shí)間偏移。
[0022] 基本上,可計(jì)算禁止級(jí)的全局集,其中該全局集是所