欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種編譯器的代碼優(yōu)化調(diào)度方法

文檔序號(hào):10488790閱讀:327來源:國知局
一種編譯器的代碼優(yōu)化調(diào)度方法
【專利摘要】本發(fā)明涉及一種編譯器的代碼優(yōu)化調(diào)度方法,應(yīng)用于VLIW類型處理器,該方法包括以下步驟:(1)將代碼劃分成基本塊;(2)對每個(gè)基本塊建立數(shù)據(jù)依賴圖,所述的數(shù)據(jù)依賴圖包括多個(gè)結(jié)點(diǎn)和用于連接結(jié)點(diǎn)的邊,所述的結(jié)點(diǎn)表示指令及指令所需要的機(jī)器資源,所述的邊表示指令之間的數(shù)據(jù)相關(guān)性;(3)對代碼進(jìn)行全局調(diào)度;(4)對代碼進(jìn)行拓?fù)渑判颉Ec現(xiàn)有技術(shù)相比,本發(fā)明具有能更好的適應(yīng)VLIW處理器等優(yōu)點(diǎn)。
【專利說明】
一種編譯器的代碼優(yōu)化調(diào)度方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及一種代碼優(yōu)化調(diào)度方法,尤其是涉及一種編譯器的代碼優(yōu)化調(diào)度方 法。
【背景技術(shù)】
[0002] 數(shù)字信號(hào)處理器(DSP)是一種特殊結(jié)構(gòu)的微處理器,是專門用來高效率處理數(shù)字 信號(hào)的處理器,其主要特色是強(qiáng)大的數(shù)字運(yùn)算能力。和通用處理器的架構(gòu)和微架構(gòu)相比,專 用數(shù)字信號(hào)處理器的架構(gòu)和微架構(gòu)能夠顯著提高數(shù)字信號(hào)的處理速度和效率。數(shù)字信號(hào)處 理器(DSP)已經(jīng)成為數(shù)字化世界中日益重要的芯片。
[0003] 隨著高新技術(shù)的快速發(fā)展,對數(shù)字信號(hào)處理器(DSP)的性能和效率要求也越來越 高。超長指令字(VLIW)和單指令流多數(shù)據(jù)流(snro)等技術(shù)已經(jīng)廣泛應(yīng)用于數(shù)字信號(hào)處理器 (DSP)的設(shè)計(jì)中。超長指令字(VLIW)是通過將多條指令組合一起并行執(zhí)行提高運(yùn)算速度的 處理器架構(gòu)。VLIW處理器的利用率取決于編譯器的代碼優(yōu)化能力。編譯器需要在代碼中發(fā) 掘出更多的并行性,并優(yōu)化指令調(diào)度,提高指令執(zhí)行并行度。由于求出對一段代碼的最好的 調(diào)度方案的算法是一個(gè)NP完全問題,所以我們需要求出一個(gè)相對最優(yōu)調(diào)度算法。

【發(fā)明內(nèi)容】

[0004] 本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種能縮短程序執(zhí) 行時(shí)間的編譯器的代碼優(yōu)化調(diào)度方法,運(yùn)用啟發(fā)式算法,采用關(guān)鍵路徑,機(jī)器資源等作為判 斷條件,該方法優(yōu)化的調(diào)度了原來并行能力不強(qiáng)的代碼,使之更好的適應(yīng)VLIW處理器。
[0005] 本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):一種編譯器的代碼優(yōu)化調(diào)度方法, 應(yīng)用于VLIW類型處理器,該方法包括以下步驟:
[0006] (1)將代碼劃分成基本塊;
[0007] (2)對每個(gè)基本塊建立數(shù)據(jù)依賴圖,所述的數(shù)據(jù)依賴圖包括多個(gè)結(jié)點(diǎn)和用于連接 結(jié)點(diǎn)的邊,所述的結(jié)點(diǎn)表示指令及指令所需要的機(jī)器資源,所述的邊表示指令之間的數(shù)據(jù) 相關(guān)性;
[0008] (3)對代碼進(jìn)行全局調(diào)度;
[0009] (4)對代碼進(jìn)行拓?fù)渑判颉?br>[0010] 所述的步驟(1)具體為:
[0011] (101)代碼進(jìn)入編譯器后生成中間代碼,求出中間代碼的所有基本塊的入口語句, 或者能由條件或者無條件語句轉(zhuǎn)移到的語句,或者緊跟在條件轉(zhuǎn)移語句后面的語句;
[0012] (102)構(gòu)造每一個(gè)入口語句所屬的基本塊,所述的基本塊由一個(gè)入口語句到另一 個(gè)入口語句之間的語句序列組成,或者由轉(zhuǎn)移語句之間的語句序列組成,或者由停語句之 間的語句序列組成。凡是沒有被納入某一基本塊的語句,都是程序中控制流程無法到達(dá)的 語句,從而也不會(huì)被執(zhí)行,可以把他從代碼中刪除。
[0013] 所述的步驟(2)具體為:
[0014] (201)建立集合G= (N,E),N表示結(jié)點(diǎn),E表示邊;E中每個(gè)e = nl->n2都有標(biāo)號(hào)d,代 表了n2不能在nl執(zhí)行后d個(gè)時(shí)鐘周期內(nèi)執(zhí)行;
[0015] (202)設(shè)定沒有輸出的結(jié)點(diǎn)的初始值為0,有輸出的結(jié)點(diǎn)的值等于與該結(jié)點(diǎn)輸出邊 相連的結(jié)點(diǎn)的值加上這兩個(gè)結(jié)點(diǎn)相連的邊的值d,若該結(jié)點(diǎn)有兩個(gè)輸出邊,則選取結(jié)點(diǎn)值和 邊之和中更大的那個(gè)值作為該結(jié)點(diǎn)的值。
[0016] 所述的步驟(3)具體為:根據(jù)基本塊的支配關(guān)系移動(dòng)代碼,進(jìn)行投機(jī)性的預(yù)測執(zhí) 行,并更新數(shù)據(jù)依賴圖?;緣K的支配關(guān)系的描述為:如果從控制流圖的入口處到達(dá)基本塊 的B'的所有路徑都經(jīng)過一個(gè)基本塊B,那么就認(rèn)為B支配B'。類似的,如果從B'到達(dá)流圖出口 的路徑都經(jīng)過B,那么B就反向支配B'。若B支配B'且B'反向支配B,那么B和B'是控制等價(jià)的。 在控制等價(jià)的兩個(gè)基本塊里,在不違反數(shù)據(jù)依賴的情況的下進(jìn)行代碼移動(dòng),并且更新數(shù)據(jù) 依賴圖。全局調(diào)度及預(yù)處理完成之后,代碼的緊湊性提高。
[0017] 所述的步驟(4)中采用帶優(yōu)先級(jí)的啟發(fā)式函數(shù)來調(diào)度結(jié)點(diǎn),具體特點(diǎn)如下:
[0018] 1.該啟發(fā)式函數(shù)選取若干個(gè)特征值,包括關(guān)鍵路徑,資源約束等;
[0019] 2.關(guān)鍵路徑是數(shù)據(jù)依賴圖中最長的路徑,也就是結(jié)點(diǎn)的高度;
[0020] 3.在這幾個(gè)的特征值中,關(guān)鍵路徑的權(quán)重最大。
[0021 ]調(diào)度一個(gè)基本塊的過程具體為:
[0022] (401)選取數(shù)據(jù)依賴圖中所有沒有輸入邊的結(jié)點(diǎn),組成集合NoneInput(N);
[0023] (402)初始化package,并將集合None Input (N)中結(jié)點(diǎn)值最大的結(jié)點(diǎn)加入package, 按照結(jié)點(diǎn)值從大到小的順序,依次檢查結(jié)點(diǎn)是否滿足槽約束條件,并將滿足槽約束條件的 結(jié)點(diǎn)加入Package,并從集合None Input (N)和數(shù)據(jù)依賴圖中刪除,并把這些結(jié)點(diǎn)的輸出邊的 值減一,直到集合None Input (N)為空,則插入Nop指令并結(jié)束該package;若兩個(gè)結(jié)點(diǎn)的值相 同,則對那幾個(gè)值相同的點(diǎn)進(jìn)行綜合考慮:先考慮資源要求更加的嚴(yán)苛的指令,先把要求更 加嚴(yán)苛的指令安放好,然后把資源要求不太嚴(yán)格的指令安放進(jìn)去。最終要使槽的利用率最 高。若指令組合的效果相同,則按指令在程序出現(xiàn)的順序來選擇。若值相同的結(jié)點(diǎn)過多,則 開啟一個(gè)特定大小的窗口,對窗口里的指令進(jìn)行選擇。直到所有結(jié)點(diǎn)均被選擇過或者槽數(shù) 放滿,結(jié)束此package,然后開啟下一個(gè)package。然后,把之前那個(gè)package里的結(jié)點(diǎn)從 NoneInput(N)集合和數(shù)據(jù)依賴圖中刪除,并且把這些結(jié)點(diǎn)的輸出邊上的值減一,若邊上的 值為〇,則把此邊從E集合中刪除,否則保留此邊。
[0024] (403)檢查數(shù)據(jù)依賴圖,把所有沒有輸入的結(jié)點(diǎn)加入集合NoneInput(N)中,并執(zhí)行 步驟(402),重復(fù)步驟(403)。
[0025] 一個(gè)基本塊調(diào)度完成后,結(jié)束當(dāng)前Package,進(jìn)入下一基本塊,依次執(zhí)行步驟 (401)、( 402)及(403),直到所有基本塊均調(diào)度完成。
[0026] 調(diào)度的終止判斷條件為:在程序開始時(shí),編譯器會(huì)記錄代碼未調(diào)度時(shí)程序需要的 執(zhí)行時(shí)間,當(dāng)每一次package結(jié)束時(shí),對當(dāng)前執(zhí)行時(shí)間和代碼未調(diào)度時(shí)程序需要的執(zhí)行時(shí)間 進(jìn)行比較,若當(dāng)前執(zhí)行時(shí)間〉代碼未調(diào)度時(shí)程序需要的執(zhí)行時(shí)間,則停止調(diào)度,并采用未調(diào) 度的執(zhí)行策略。
[0027] 所述的步驟(402)中,若結(jié)點(diǎn)值相同的結(jié)點(diǎn)數(shù)大于或等于5個(gè),則開啟一個(gè)設(shè)定大 小的窗口,對窗口里的指令進(jìn)行選擇,直到所有的結(jié)點(diǎn)均被選擇過或槽數(shù)被放滿,則結(jié)束此 Package 0
[0028]本發(fā)明涉及到的數(shù)字信號(hào)處理器的體系結(jié)構(gòu)需要滿足以下兩個(gè)條件:
[0029] 1.處理器采用超長指令字(VLIW)設(shè)計(jì)技術(shù),取指部件一次需要獲取η條指令,n>0, 指令長度為2y個(gè)字,y> = 0,其中字長可以是任意長度。
[0030] 2.代碼不涉及遞歸函數(shù)的調(diào)用。
[0031] 與現(xiàn)有技術(shù)相比,本發(fā)明提出的一種新的啟發(fā)式算法,采用關(guān)鍵路徑,機(jī)器資源等 作為判斷條件,該算法的輸入是一個(gè)特殊的數(shù)據(jù)依賴圖,該數(shù)據(jù)依賴圖經(jīng)過全局調(diào)度,并且 加入的結(jié)點(diǎn)的值這一概念。在結(jié)點(diǎn)的值相對多的時(shí)候,采用窗口的模式來形成局部最優(yōu)的 解。該算法優(yōu)化的調(diào)度了原來并行能力不強(qiáng)的代碼,使之更好的適應(yīng)VLIW處理器,提高代碼 的并行性,提高處理器的利用率。
【附圖說明】
[0032] 圖1為本發(fā)明實(shí)施例中的代碼基本塊;
[0033]圖2為數(shù)據(jù)依賴圖的結(jié)構(gòu)示意圖;
[0034]圖3為調(diào)度一次后的代碼示意圖;
[0035]圖4為調(diào)度兩次后的代碼示意圖。
【具體實(shí)施方式】
[0036]下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。
[0037] 一種編譯器的代碼優(yōu)化調(diào)度方法,應(yīng)用于VLIW類型處理器,該方法包括以下步驟:
[0038] (1)將代碼劃分成基本塊(如圖1所示),具體為:(101)代碼進(jìn)入編譯器后生成中間 代碼,求出中間代碼的所有基本塊的入口語句,或者能由條件或者無條件語句轉(zhuǎn)移到的語 句,或者緊跟在條件轉(zhuǎn)移語句后面的語句;
[0039] (102)構(gòu)造每一個(gè)入口語句所屬的基本塊,基本塊由一個(gè)入口語句到另一個(gè)入口 語句之間的語句序列組成,或者由轉(zhuǎn)移語句之間的語句序列組成,或者由停語句之間的語 句序列組成。凡是沒有被納入某一基本塊的語句,都是程序中控制流程無法到達(dá)的語句,從 而也不會(huì)被執(zhí)行,可以把他從代碼中刪除。
[0040] (2)對每個(gè)基本塊建立數(shù)據(jù)依賴圖(如圖2所示),數(shù)據(jù)依賴圖包括多個(gè)結(jié)點(diǎn)和用于 連接結(jié)點(diǎn)的邊,結(jié)點(diǎn)表示指令及指令所需要的機(jī)器資源,邊表示指令之間的數(shù)據(jù)相關(guān)性;具 體為:
[0041] (201)建立集合G= (N,E),N表示結(jié)點(diǎn),E表示邊;E中每個(gè)e = nl->n2都有標(biāo)號(hào)d,代 表了n2不能在nl執(zhí)行后d個(gè)時(shí)鐘周期內(nèi)執(zhí)行;
[0042] (202)設(shè)定沒有輸出的結(jié)點(diǎn)的初始值為0,有輸出的結(jié)點(diǎn)的值等于與該結(jié)點(diǎn)輸出邊 相連的結(jié)點(diǎn)的值加上這兩個(gè)結(jié)點(diǎn)相連的邊的值d,若該結(jié)點(diǎn)有兩個(gè)輸出邊,則選取結(jié)點(diǎn)值和 邊之和中更大的那個(gè)值作為該結(jié)點(diǎn)的值。
[0043] (3)對代碼進(jìn)行全局調(diào)度,具體為:根據(jù)基本塊的支配關(guān)系移動(dòng)代碼,進(jìn)行投機(jī)性 的預(yù)測執(zhí)行,并更新數(shù)據(jù)依賴圖?;緣K的支配關(guān)系的描述為:如果從控制流圖的入口處到 達(dá)基本塊的B'的所有路徑都經(jīng)過一個(gè)基本塊B,那么就認(rèn)為B支配B'。類似的,如果從B'到達(dá) 流圖出口的路徑都經(jīng)過B,那么B就反向支配B'。若B支配B'且B'反向支配B,那么B和B'是控 制等價(jià)的。在控制等價(jià)的兩個(gè)基本塊里,在不違反數(shù)據(jù)依賴的情況的下進(jìn)行代碼移動(dòng),并且 更新數(shù)據(jù)依賴圖。全局調(diào)度及預(yù)處理完成之后,代碼的緊湊性提高。
[0044] (4)對代碼進(jìn)行拓?fù)渑判?,采用帶?yōu)先級(jí)的啟發(fā)式函數(shù)來調(diào)度結(jié)點(diǎn),具體特點(diǎn)如 下:
[0045] 1.該啟發(fā)式函數(shù)選取若干個(gè)特征值,包括關(guān)鍵路徑,資源約束等;
[0046] 2.關(guān)鍵路徑是數(shù)據(jù)依賴圖中最長的路徑,也就是結(jié)點(diǎn)的高度;
[0047] 3.在這幾個(gè)的特征值中,關(guān)鍵路徑的權(quán)重最大。
[0048]調(diào)度一個(gè)基本塊的過程具體為:
[0049] (401)選取數(shù)據(jù)依賴圖中所有沒有輸入邊的結(jié)點(diǎn),組成集合NoneInput(N);
[0050] (402)初始化package,并將集合None Input (N)中結(jié)點(diǎn)值最大的結(jié)點(diǎn)加入package, 按照結(jié)點(diǎn)值從大到小的順序,依次檢查結(jié)點(diǎn)是否滿足槽約束條件,并將滿足槽約束條件的 結(jié)點(diǎn)加入Package,并從集合None Input (N)和數(shù)據(jù)依賴圖中刪除,并把這些結(jié)點(diǎn)的輸出邊的 值減一,直到集合None Input (N)為空,則插入Nop指令并結(jié)束該package;若兩個(gè)結(jié)點(diǎn)的值相 同,則對那幾個(gè)值相同的點(diǎn)進(jìn)行綜合考慮:先考慮資源要求更加的嚴(yán)苛的指令,先把要求更 加嚴(yán)苛的指令安放好,然后把資源要求不太嚴(yán)格的指令安放進(jìn)去。最終要使槽的利用率最 高。若指令組合的效果相同,則按指令在程序出現(xiàn)的順序來選擇。若值相同的結(jié)點(diǎn)過多,則 開啟一個(gè)特定大小的窗口,對窗口里的指令進(jìn)行選擇。直到所有結(jié)點(diǎn)均被選擇過或者槽數(shù) 放滿,結(jié)束此package,然后開啟下一個(gè)package。然后,把之前那個(gè)package里的結(jié)點(diǎn)從 NoneInput(N)集合和數(shù)據(jù)依賴圖中刪除,并且把這些結(jié)點(diǎn)的輸出邊上的值減一,若邊上的 值為〇,則把此邊從E集合中刪除,否則保留此邊。
[00511 (403)檢查數(shù)據(jù)依賴圖,把所有沒有輸入的結(jié)點(diǎn)加入集合NoneInput(N)中,并執(zhí)行 步驟(402),重復(fù)步驟(403)。
[0052] 一個(gè)基本塊調(diào)度完成后,結(jié)束當(dāng)前Package,進(jìn)入下一基本塊,依次執(zhí)行步驟 (401)、( 402)及(403),直到所有基本塊均調(diào)度完成。
[0053]調(diào)度的終止判斷條件為:在程序開始時(shí),編譯器會(huì)記錄代碼未調(diào)度時(shí)程序需要的 執(zhí)行時(shí)間,當(dāng)每一次package結(jié)束時(shí),對當(dāng)前執(zhí)行時(shí)間和代碼未調(diào)度時(shí)程序需要的執(zhí)行時(shí)間 進(jìn)行比較,若當(dāng)前執(zhí)行時(shí)間〉代碼未調(diào)度時(shí)程序需要的執(zhí)行時(shí)間,則停止調(diào)度,并采用未調(diào) 度的執(zhí)行策略。
[0054] 步驟(402)中,若結(jié)點(diǎn)值相同的結(jié)點(diǎn)數(shù)大于或等于5個(gè),則開啟一個(gè)設(shè)定大小的窗 口,對窗口里的指令進(jìn)行選擇,直到所有的結(jié)點(diǎn)均被選擇過或槽數(shù)被放滿,則結(jié)束此 Package 0
[0055] 本發(fā)明涉及到的數(shù)字信號(hào)處理器的體系結(jié)構(gòu)需要滿足以下兩個(gè)條件:
[0056] 1.處理器采用超長指令字(VLIW)設(shè)計(jì)技術(shù),取指部件一次需要獲取η條指令,n>0, 指令長度為2y個(gè)字,y> = 0,其中字長可以是任意長度。
[0057] 2.代碼不涉及遞歸函數(shù)的調(diào)用。
[0058]根據(jù)上述理論,本實(shí)施例對如圖1所示的代碼基本塊進(jìn)行調(diào)度,圖1的基本塊作為 代碼的初始輸入。圖2是數(shù)據(jù)依賴圖,具有結(jié)點(diǎn)Nl~N7,按照上面描述的方法,結(jié)點(diǎn)的內(nèi)容包 括它需要的機(jī)器資源和結(jié)點(diǎn)的值。結(jié)點(diǎn)的值的計(jì)算方法如上所述,沒有輸出的結(jié)點(diǎn)的值為 0,所以N2,和N7的值為0。有輸出的結(jié)點(diǎn)的值的等于相連結(jié)點(diǎn)的值與邊上的值的和。所以N6, N5,N4,N3的值分別為1,2,3,5。Nl有兩個(gè)輸出邊,分別指向N2和N5,指向N2的那個(gè)路徑算出 了來的值為2,指向N5的那個(gè)路徑算出來的值為4,所以以4作為NI的值。圖2中右邊的橢圓框 指出了該每條指令所需要的機(jī)器資源,這里僅僅以VLIW的槽約束來舉例。指令NI,N2,N3, N6,N7只能被安排在23槽,而N4,N5則四個(gè)槽都可以被安放。。
[0059]開始調(diào)度時(shí),初始化一個(gè)VLIW package,這里記為{}。初始時(shí),遍歷數(shù)據(jù)依賴圖, NoneInput (N)更新為{NI,N4}。然后開始調(diào)度,由于N4的值大于Nl,所以先把N4放入 package,根據(jù)槽限制,只能放在2,3槽,所以把M放在第2槽。然后再NoneInput(N)中找出次 長路徑,也就是Nl,加入package。根據(jù)槽限制,只能放在第三槽。此時(shí),NoneInput(N)為空, 結(jié)束此package。此時(shí)此package的內(nèi)容為{Nop,Nop,M,Nl}。
[0060] 調(diào)度一次之后的數(shù)據(jù)依賴圖如圖3所示,NI,N4從圖中刪除,這兩個(gè)結(jié)點(diǎn)的輸出邊 減一。然后遍歷數(shù)據(jù)依賴圖,檢查是否有新結(jié)點(diǎn)加入NoneInput(N)。此時(shí)發(fā)現(xiàn)沒有,所以插 入nop結(jié)束此package,此package為{Nop,Nop,Nop,Nop} ·
[0061] 調(diào)度兩次之后的數(shù)據(jù)依賴圖如圖4所示,此時(shí)上次值為1的邊由于減一變成了 0,從 圖中刪除。然后重新遍歷數(shù)據(jù)圖,此時(shí),NoneInput(N)中為{N2,N4}.同理,選擇值更大的N4 先加入package,放在0槽,然后選擇N2放入2槽。此時(shí),None Input (N)為空,結(jié)束此package。 MpackageS{N4,Nop,N2,Nop}。
[0062] 以此類推。
[0063] 最后調(diào)度的結(jié)果如表1所示。未調(diào)度時(shí)代碼的執(zhí)行周期為9個(gè)周期,調(diào)度之后的執(zhí) 行周期為6個(gè)周期,優(yōu)化了 3個(gè)周期,優(yōu)化率達(dá)到33.3%。
[0064]表1調(diào)度結(jié)果
[0066] 圖2、圖3及圖4中slot表示槽。
【主權(quán)項(xiàng)】
1. 一種編譯器的代碼優(yōu)化調(diào)度方法,應(yīng)用于VLIW類型處理器,其特征在于,該方法包括 以下步驟: (1) 將代碼劃分成基本塊; (2) 對每個(gè)基本塊建立數(shù)據(jù)依賴圖,所述的數(shù)據(jù)依賴圖包括多個(gè)結(jié)點(diǎn)和用于連接結(jié)點(diǎn) 的邊,所述的結(jié)點(diǎn)表示指令及指令所需要的機(jī)器資源,所述的邊表示指令之間的數(shù)據(jù)相關(guān) 性; (3) 對代碼進(jìn)行全局調(diào)度; (4) 對代碼進(jìn)行拓?fù)渑判颉?. 根據(jù)權(quán)利要求1所述的一種編譯器的代碼優(yōu)化調(diào)度方法,其特征在于,所述的步驟 (1) 具體為: (101) 代碼進(jìn)入編譯器后生成中間代碼,求出中間代碼的所有基本塊的入口語句,或者 能由條件或者無條件語句轉(zhuǎn)移到的語句,或者緊跟在條件轉(zhuǎn)移語句后面的語句; (102) 構(gòu)造每一個(gè)入口語句所屬的基本塊,所述的基本塊由一個(gè)入口語句到另一個(gè)入 口語句之間的語句序列組成,或者由轉(zhuǎn)移語句之間的語句序列組成,或者由停語句之間的 語句序列組成。3. 根據(jù)權(quán)利要求1所述的一種編譯器的代碼優(yōu)化調(diào)度方法,其特征在于,所述的步驟 (2) 具體為: (201) 建立集合G= (N,E),N表示結(jié)點(diǎn),E表示邊; (202) 設(shè)定沒有輸出的結(jié)點(diǎn)的初始值為0,有輸出的結(jié)點(diǎn)的值等于與該結(jié)點(diǎn)輸出邊相連 的結(jié)點(diǎn)的值加上這兩個(gè)結(jié)點(diǎn)相連的邊的值d,若該結(jié)點(diǎn)有兩個(gè)輸出邊,則選取結(jié)點(diǎn)值和邊之 和中更大的那個(gè)值作為該結(jié)點(diǎn)的值。4. 根據(jù)權(quán)利要求1所述的一種編譯器的代碼優(yōu)化調(diào)度方法,其特征在于,所述的步驟 (3) 具體為:根據(jù)基本塊的支配關(guān)系移動(dòng)代碼,進(jìn)行投機(jī)性的預(yù)測執(zhí)行,并更新數(shù)據(jù)依賴圖。5. 根據(jù)權(quán)利要求3所述的一種編譯器的代碼優(yōu)化調(diào)度方法,其特征在于,所述的步驟 (4) 中采用帶優(yōu)先級(jí)的啟發(fā)式函數(shù)來調(diào)度結(jié)點(diǎn),調(diào)度一個(gè)基本塊的過程具體為: (401) 選取數(shù)據(jù)依賴圖中所有沒有輸入邊的結(jié)點(diǎn),組成集合Nonelnput (N); (402) 初始化package,并將集合Nonelnput(N)中結(jié)點(diǎn)值最大的結(jié)點(diǎn)加入package,按照 結(jié)點(diǎn)值從大到小的順序,依次檢查結(jié)點(diǎn)是否滿足槽約束條件,并將滿足槽約束條件的結(jié)點(diǎn) 加入Package,并從集合Nonelnput (N)和數(shù)據(jù)依賴圖中刪除,并把這些結(jié)點(diǎn)的輸出邊的值減 一,直到集合Nonelnput (N)為空,則插入Nop指令并結(jié)束該package; (403) 檢查數(shù)據(jù)依賴圖,把所有沒有輸入的結(jié)點(diǎn)加入集合N〇neInput(N)中,并執(zhí)行步驟 (402),重復(fù)步驟(403)。6. 根據(jù)權(quán)利要求5所述的一種編譯器的代碼優(yōu)化調(diào)度方法,其特征在于,一個(gè)基本塊調(diào) 度完成后,結(jié)束當(dāng)前Package,進(jìn)入下一基本塊,依次執(zhí)行步驟(401)、(402)及(403),直到所 有基本塊均調(diào)度完成。7. 根據(jù)權(quán)利要求5所述的一種編譯器的代碼優(yōu)化調(diào)度方法,其特征在于,調(diào)度的終止判 斷條件為:在程序開始時(shí),編譯器會(huì)記錄代碼未調(diào)度時(shí)程序需要的執(zhí)行時(shí)間,當(dāng)每一次 package結(jié)束時(shí),對當(dāng)前執(zhí)行時(shí)間和代碼未調(diào)度時(shí)程序需要的執(zhí)行時(shí)間進(jìn)行比較,若當(dāng)前執(zhí) 行時(shí)間〉代碼未調(diào)度時(shí)程序需要的執(zhí)行時(shí)間,則停止調(diào)度。8.根據(jù)權(quán)利要求5所述的一種編譯器的代碼優(yōu)化調(diào)度方法,其特征在于,所述的步驟 (402)中,若結(jié)點(diǎn)值相同的結(jié)點(diǎn)數(shù)大于或等于5個(gè),則開啟一個(gè)設(shè)定大小的窗口,對窗口里的 指令進(jìn)行選擇,直到所有的結(jié)點(diǎn)均被選擇過或槽數(shù)被放滿,則結(jié)束此Package。
【文檔編號(hào)】G06F9/45GK105843660SQ201610159967
【公開日】2016年8月10日
【申請日】2016年3月21日
【發(fā)明人】吳俊 , 李涵, 任浩琪, 張志峰, 趙朝興, 雷蕾, 常睿
【申請人】同濟(jì)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
祁阳县| 泰安市| 合肥市| 仙游县| 梁平县| 桂阳县| 贡觉县| 肃南| 浮梁县| 灌阳县| 延安市| 罗甸县| 台中市| 上林县| 上栗县| 张家口市| 金门县| 新河县| 田阳县| 盐源县| 龙口市| 大悟县| 桑植县| 焦作市| 台北县| 南充市| 成都市| 赫章县| 固始县| 永康市| 曲周县| 台南县| 开封县| 临泽县| 库伦旗| 建德市| 通辽市| 华阴市| 万盛区| 同江市| 皮山县|