一種基于依賴網格的指令級并行調度方法
【技術領域】
[0001]本發(fā)明涉及編譯優(yōu)化技術領域,尤其涉及一種基于依賴網格描述的指令級并行調度方法。
【背景技術】
[0002]在一個基本塊中,指令之間最基本的關聯(lián)關系之一是數(shù)據(jù)流造成的數(shù)據(jù)依賴約束,它決定了程序的運行結果。在現(xiàn)代的流水線處理器和超標量處理器中,可以通過指令重排來提高代碼的并行度以發(fā)揮先進的體系結構優(yōu)勢,但這種指令重排技術需要建立在了解基本塊內指令間并行性的基礎上才能進行。因此,在指令重排之前或在進行指令重排過程中,一項重要的工作就是對基本塊內指令間的并行性進行識別。
[0003]現(xiàn)有技術中,對基本塊中指令進行重排的基本方法主要為表調度方法,這種方法對指令間并行性的識別是依賴于一個描述基本塊中指令間數(shù)據(jù)依賴關系的無環(huán)有向圖(DAG,Directed Acyclic Graph),稱為基本塊的依賴DAG。表調度方法在指令調度過程中,通過基本塊的依賴DAG中描述的指令間數(shù)據(jù)依賴關系能夠在每個時間點獲取調度的候選指令集合Cands,進而根據(jù)一定的方案從候選指令集合Cands中選擇一條指令,余下的指令在下一個時間點重新處理。對于超標量處理器,由于在指令調度過程中,需要考慮將多條指令形成可同時流出的指令組,因此在基于依賴DAG的表調度方法的基礎上,還需要為每個可并行執(zhí)行的部件建立各自的數(shù)據(jù)結構,使得能夠在每個時間點為每個功能單元獲得相應的候選指令集合Cands。
[0004]綜上所述,上述基于依賴DAG的表調度方法存在以下問題:
1)該方法雖然描述了指令間的數(shù)據(jù)依賴關系,但并沒有表現(xiàn)指令間的其他關聯(lián)關系,尤其是與目標系統(tǒng)硬件相關的關系,因而在執(zhí)行調度過程中無法確定指令與硬件結構的相關性;
2)對于多功能單元的VLIW(Very Long Instruct1n Word,超長指令字)體系結構,由于該方法不能體現(xiàn)指令間因功能單元不同而造成的各功能單元之間的相關性,因而該方法在VLIW體系結構中不適于使用更激進或更具前瞻性的指令重排技術,不利于更充分地發(fā)掘體系結構特征帶來的基本塊內指令間并行性;
3)對于多功能單元的VLIW體系結構,由于該方法不能反映各功能單元的實時工作量,也不能實時地反映指令之間、指令與功能單元之間的關系,因此當某些指令能夠在多個功能單元中的任意一個中執(zhí)行時,該方法無法與功能單元分配相結合來讓指令調度產生更適應體系結構的優(yōu)化結果。
【發(fā)明內容】
[0005]本發(fā)明要解決的技術問題就在于:針對現(xiàn)有技術存在的技術問題,本發(fā)明提供一種實現(xiàn)方法簡單、適用范圍廣、指令級并行度高的基于依賴網格描述的指令級并行調度方法,能夠結合數(shù)據(jù)依賴關系和功能單元分配關系,同時描述指令間的并行關系以及與硬件結構之間的相關性。
[0006]為解決上述技術問題,本發(fā)明提出的技術方案為:
一種基于依賴網格描述的指令級并行調度方法,步驟包括:
1)獲取目標基本塊中指令之間的數(shù)據(jù)依賴關系以及各指令所對應的功能單元的信息,根據(jù)所述數(shù)據(jù)依賴關系設置并計算各指令的數(shù)據(jù)依賴優(yōu)先級值;
2)按所述數(shù)據(jù)依賴優(yōu)先級值以及功能單元劃分各指令,將劃分得到的結果按網格形式進行存儲,建立得到指令與數(shù)據(jù)依賴優(yōu)先級、功能單元之間依賴關系的依賴網格;
3)按照步驟2)得到的依賴網格中指令的數(shù)據(jù)依賴優(yōu)先級、指令與功能單元之間的關系進行指令間的并行性分析。
[0007]作為本發(fā)明的進一步改進:查詢目標基本塊中所有已確定對應物理功能單元的第一目標指令,并獲取每條所述第一目標指令對應的物理功能單元的信息;查找基本塊中所有未確定對應物理功能單元的第二目標指令,并獲取每條所述第二目標指令對應的多種組合功能單元的信息,所述組合功能單元為所述第二目標指令對應的所有物理功能單元根據(jù)所構成的可能組合。
[0008]作為本發(fā)明的進一步改進,步驟2)的具體實施步驟為:
2.1)遍歷各指令,并將各指令按照數(shù)據(jù)依賴優(yōu)先級劃分為多個指令組;
2.2)遍歷所述步驟2.1)得到的各指令組,將各指令組中所有已確定對應物理功能單元的第一目標指令按照所對應的所述物理功能單元進行劃分,得到多個第一指令子組;將各指令組中所有未確定對應物理功能單元的第二目標指令按照所對應的所述組合功能單元進行劃分,得到多個第二指令子組;
2.3)構建一個用于存儲所述指令子組的二維表結構,所述二維表中行向量對應指令的各數(shù)據(jù)依賴優(yōu)先級,每行的行號對應數(shù)據(jù)依賴優(yōu)先級值,列向量分為對應各物理功能單元的第一部分、對應各組合功能單元的第二部分,每個數(shù)據(jù)依賴優(yōu)先級值與一個物理功能單元或組合功能單元對應所述二維表的一個網格單元格;將各所述第一指令子組按照數(shù)據(jù)依賴優(yōu)先級值、物理功能單元分別保存至所述二維表的第一部分各網格存儲空間中,將各所述第二指令子組按照數(shù)據(jù)依賴優(yōu)先級、組合功能單元分別保存至所述二維表的第二部分各網格存儲空間中,由所述二維表的第一部分、第二部分構成指令與數(shù)據(jù)依賴優(yōu)先級、功能單元之間依賴關系的依賴網格。
[0009]作為本發(fā)明的進一步改進,步驟1.1)中計算各指令的數(shù)據(jù)依賴優(yōu)先級值的具體實施步驟為:
1.1)分別為各指令定義一個數(shù)據(jù)依賴優(yōu)先級值并初始化為O ;
1.2)從第二條指令開始,依次遍歷基本塊中各條指令計算對應的數(shù)據(jù)依賴優(yōu)先級值,每條指令計算時,按逆序遍歷當前指令的前一條指令與首條指令之間的所有目標指令,判斷目標指令中是否存在與當前指令有依賴關系的依賴指令,如果有這樣的依賴指令,將查找到的所有所述依賴指令中最大的數(shù)據(jù)依賴優(yōu)先級值加I后作為當前指令的數(shù)據(jù)依賴優(yōu)先級值。作為本發(fā)明的進一步改進,所述步驟1.2)中查找出所有與當前指令有依賴關系的指令的具體實施步驟為:
1.21)將當前指令中任意一個源變量作為目標源變量,在當前指令之前的所有指令中查找出對目標源變量進行最后一次定值的指令,得到目標源變量的最后一次定值指令,并將所述最后一次定值指令作為一條與當前指令有依賴關系的依賴指令;
1.22)取下一個源變量作為目標源變量,重復執(zhí)行步驟1.21),直至完成對當前指令中所有源變量的最后一次定值指令的查找,得到所有與當前指令有依賴關系的依賴指令。
[0010]作為本發(fā)明的進一步改進,步驟3)后還包括依賴網格動態(tài)調整步驟4),具體實施步驟為:
4.1)當所述依賴網格中處于最高數(shù)據(jù)依賴優(yōu)先級的待移除指令在本拍將被移除時,將所述待移除指令作為當前目標指令,并將所述待移除指令所對應的數(shù)據(jù)依賴優(yōu)先級作為當前參照數(shù)據(jù)依賴優(yōu)先級,轉入執(zhí)行步驟4.2);
4.2)在所述依賴網絡的數(shù)據(jù)依賴優(yōu)先級比所述參照數(shù)據(jù)依賴優(yōu)先級低一級的對應行中,查找出與所述當前目標指令有依賴關系的所有依賴指令作為待調整指令,并分別獲取每條所述待調整指令對應的所述依賴指令中最大數(shù)據(jù)依賴優(yōu)先級值,將獲取得到的所述最大數(shù)據(jù)依賴優(yōu)先級值加I后分別作為對應的所述待調整指令調整后的數(shù)據(jù)依賴優(yōu)先級值;然后將所述待調整指令按照調整后的數(shù)據(jù)依賴優(yōu)先級值調整到依賴網格中對應的位置,轉入執(zhí)行步驟4.3);
4.3)以調整后的指令作為當前目標指令,并將所述調整后的指令的優(yōu)先級作為當前參照數(shù)據(jù)依賴優(yōu)先級,返回執(zhí)行步驟4.2),直至執(zhí)行到沒有指令被調整或者到達最小的數(shù)據(jù)依賴優(yōu)先級對應的那一行。
[0011]作為本發(fā)明的進一步改進,所述步驟3)中并行性分析具體包括識別指令之間邏輯并行性步驟,具體實施步驟為:獲取所述依賴網格中處于目標數(shù)據(jù)依賴優(yōu)先級的所有指令,得到與目標數(shù)據(jù)依賴優(yōu)先級對應邏輯時間點的所有并行指令。
[0012]作為本發(fā)明的進一步改進,所述步驟3)中并行性分析具體包括識別功能單元候選指令集步驟,具體實施步驟為:獲取所述依賴網格中對應目標功能單元且處于目標數(shù)據(jù)依賴優(yōu)先級的所有指令,得到目標功能單元在目標數(shù)據(jù)依賴優(yōu)先級所對應的邏輯時間點的候選指令集。
[0013]作為本發(fā)明的進一步改進,所述步驟3)中并行性分析具體包括獲取目標執(zhí)行單元工作量步驟,具體實施步驟為:統(tǒng)計所述依賴網格中對應目標功能單元處于各數(shù)據(jù)依賴優(yōu)先級的所有指令,得到目標執(zhí)行單元在各邏輯時間點的工作量;統(tǒng)計所述依賴網格中對應目標功能單元的所有指令,得到目標執(zhí)行單元的總工作量。
[0014]作為本發(fā)明的進一步改進,所述步驟3)中并行性分析具體還包括功能單元關聯(lián)性分析步驟,具體實施