一種面向vliw體系結(jié)構(gòu)的多元啟發(fā)式指令選擇方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及VLIW (Very LongInstruct1n Word,超長指令字)體系結(jié)構(gòu)的編譯優(yōu)化技術(shù)領(lǐng)域,尤其涉及一種面向VLIW體系結(jié)構(gòu)的多元啟發(fā)式指令選擇方法。
【背景技術(shù)】
[0002]基本塊調(diào)度是提高代碼的指令級并行度的重要處理過程之一,它在保證產(chǎn)生相同結(jié)果的前提下,通過重新安排指令的執(zhí)行順序來充分發(fā)揮硬件的性能,因而是流水線體系結(jié)構(gòu)或者多功能單元的超長指令字體系結(jié)構(gòu)中提高代碼執(zhí)行效率的重要途徑。
[0003]對于流水線體系結(jié)構(gòu),基本塊調(diào)度通常是采用表調(diào)度方法,采用該方法在調(diào)度過程中,需要維持2個(gè)序列:一是已經(jīng)調(diào)度過(被發(fā)射)的結(jié)點(diǎn)序列Scheds ; 二是每一個(gè)時(shí)間點(diǎn)的候選指令集合Cands。候選指令集合Cands有兩個(gè)子集:一是到基本塊末尾具有最大延遲時(shí)間的第一候選指令集合ACands ;二是第一候選指令集合ACands中最早開始時(shí)間小于或等于等于當(dāng)前時(shí)間的第二候選指令集合BCands。
[0004]基于表調(diào)度方法對基本塊的指令進(jìn)行重排的流程如下:
O獲得各指令到基本塊末尾的最大可能延遲;
2)從基本塊的無環(huán)有向圖(DirectedAcyclic Graph,DAG)的根結(jié)點(diǎn)向葉結(jié)點(diǎn)方向遍歷,找出候選指令集合Cands ;
3)從候選指令集合Cands中找到到達(dá)基本塊末尾具有最大延遲時(shí)間的指令到第一候選指令集合ACands ;
4)從ACands中選擇合適的指令到已經(jīng)調(diào)度過的結(jié)點(diǎn)序列Scheds;
5)反復(fù)進(jìn)行2)、3)、4)三個(gè)步驟的處理直到基本塊內(nèi)的所有指令全部都到已經(jīng)調(diào)度過的結(jié)點(diǎn)序列Scheds中,已經(jīng)調(diào)度過的結(jié)點(diǎn)序列Scheds中的指令順序即指令重排后的指令順序。
[0005]在基本塊調(diào)度中,影響指令重排結(jié)果的核心因素是每一個(gè)時(shí)間點(diǎn)的指令的選擇。在表調(diào)度方法中,具體就是從候選指令集合Cands中的選擇指令。然而,當(dāng)?shù)谝缓蜻x指令集合ACands中的指令數(shù)量大于I時(shí),則存在具體選擇哪條指令的問題。
[0006]目前對于解決指令選擇的問題有一些啟發(fā)式策略,例如:
策略一:從第一候選指令集合ACands中選擇延遲時(shí)間最大或具有最小ETime的結(jié)點(diǎn)n,其中ETime是為了避免停頓該結(jié)點(diǎn)應(yīng)當(dāng)被調(diào)度的最早時(shí)間;
策略二:如果體系結(jié)構(gòu)有多條流水線,并且每條流水線都有若干候選結(jié)點(diǎn),則優(yōu)先選擇最近沒有為它調(diào)度指令的那些流水線上的候選結(jié)點(diǎn);
策略三:優(yōu)先選擇那些在選擇之后能使新產(chǎn)生的候選指令集合Cands的元素個(gè)數(shù)最大的指令。
[0007]上述三種策略對于功能單元豐富的流向量超長指令字處理器而言,一方面沒有考慮處理器內(nèi)標(biāo)量處理單元和向量處理單元的區(qū)分;另一方面沒有考慮指令間數(shù)據(jù)依賴關(guān)系所隱含的相應(yīng)功能單元之間的關(guān)聯(lián)性,因此其均不適用于在VLIW體系結(jié)構(gòu)中進(jìn)行較好的指令選擇。
[0008]由于流向量超長指令字處理器具有超標(biāo)量機(jī)器的特征,因此目前對于超標(biāo)量系統(tǒng),指令調(diào)度還存在通過使用成組啟發(fā)式的貪婪法來實(shí)現(xiàn)的策略。該貪婪法是盡可能地用就緒指令填充有效指令槽實(shí)現(xiàn),具體方法是:假設(shè)所考慮的處理機(jī)有η個(gè)可并行執(zhí)行的部件P1...Ρη,并且每一個(gè)部件Pi可以執(zhí)行類別為PClass (i)的指令,用表調(diào)度算法中所用的數(shù)據(jù)結(jié)構(gòu)的η個(gè)副本來模擬這些功能部件,并由IClass函數(shù)確定具體指令inst所對應(yīng)的類別,當(dāng)且僅當(dāng)PClass (i) = IClass (inst)時(shí)指令inst能夠由執(zhí)行部件Pi執(zhí)行。但該貪婪方法是從在表調(diào)度方法的基礎(chǔ)上修改而來的,其仍然沒有考慮處理器內(nèi)處理單元與指令之間的硬件特性,以及指令間數(shù)據(jù)依賴關(guān)系所隱含的功能單元之間的關(guān)聯(lián)性。
[0009]綜上所述,上述指令選擇策略對于流向量VLIW處理器均不能較好地反映代碼與功能單元之間的關(guān)聯(lián)關(guān)系,也不能反映代碼在處理器上一段時(shí)間內(nèi)的執(zhí)行特征,因此無法充分地發(fā)掘VLIW類處理器中指令的并行性,同時(shí)難以充分發(fā)揮硬件的性能。
【發(fā)明內(nèi)容】
[0010]本發(fā)明要解決的技術(shù)問題就在于:針對現(xiàn)有技術(shù)存在的技術(shù)問題,本發(fā)明提供一種實(shí)現(xiàn)方法簡單、指令選擇合理且并行度高的面向VLIW體系結(jié)構(gòu)的多元啟發(fā)式指令選擇方法,能夠針對VLIW體系結(jié)構(gòu)的特性,充分考慮指令與處理單元之間的硬件特性以及數(shù)據(jù)與功能單元的關(guān)聯(lián)性。
[0011]為解決上述技術(shù)問題,本發(fā)明提出的技術(shù)方案為:
一種面向VLIW體系結(jié)構(gòu)的多元啟發(fā)式指令選擇方法,步驟包括:
1)獲取各功能單元的候選指令集中所有可發(fā)射指令,所述可發(fā)射指令為所有數(shù)據(jù)依賴指令均已執(zhí)行完的指令;
2)分別計(jì)算各功能單元中每條可發(fā)射指令對應(yīng)的多個(gè)啟發(fā)量,所述啟發(fā)量包括指令與依賴指令之間的依賴關(guān)系量、指令與處理單元之間的關(guān)系量以及指令與功能單元之間的關(guān)系量;
3)對各功能單元中的可發(fā)射指令執(zhí)行多次排序,每次排序時(shí)按照優(yōu)先級順序選擇一個(gè)啟發(fā)量作為排序比較量,得到排序后的可發(fā)射指令序列作為指令選擇對象。
[0012]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟3)中每個(gè)功能單元的可發(fā)射指令執(zhí)行多次排序的具體實(shí)施步驟為:
3.1)取目標(biāo)功能單元中所有可發(fā)射指令作為當(dāng)前排序序列,并選擇優(yōu)先級最高的啟發(fā)量作為當(dāng)前啟發(fā)量,轉(zhuǎn)入執(zhí)行步驟3.2);
3.2)將可發(fā)射指令根據(jù)當(dāng)前啟發(fā)量的值進(jìn)行排序,對排序后的指令按照啟發(fā)量的值分為多個(gè)指令子序列,得到排序后的多個(gè)指令子序列;
3.3)取所述步驟3.2)得到的排序后的多個(gè)指令子序列中最優(yōu)啟發(fā)量值對應(yīng)的最優(yōu)指令子序列作為當(dāng)前排序序列,并選擇優(yōu)先級為下一級的啟發(fā)量作為當(dāng)前啟發(fā)量,返回執(zhí)行步驟3.2),直至完成根據(jù)所有啟發(fā)量進(jìn)行的排序。
[0013]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟2)中指令與處理單元之間的關(guān)系量具體包括:目標(biāo)指令中與目標(biāo)指令對應(yīng)不同處理單元的數(shù)據(jù)依賴指令數(shù)所對應(yīng)的第一處理單元關(guān)系量,以及目標(biāo)指令中是由標(biāo)量處理單元或向量處理單元的通道寄存器引起數(shù)據(jù)依賴的數(shù)據(jù)依賴指令數(shù)所對應(yīng)的第二處理單元關(guān)系量;所述步驟2)中啟發(fā)量包括對應(yīng)所述第一處理單元關(guān)系量的另類處理單元依賴指令啟發(fā)量、對應(yīng)所述第二處理單元關(guān)系量的通道寄存器依賴指令啟發(fā)量。
[0014]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟2)中指令與功能單元之間的關(guān)系量具體包括:目標(biāo)指令的數(shù)據(jù)依賴指令對應(yīng)的所有功能單元數(shù)所對應(yīng)的第一功能單元關(guān)系量,以及目標(biāo)指令的數(shù)據(jù)依賴指令對應(yīng)的所有功能單元中下拍空閑的功能單元數(shù)所對應(yīng)的第二功能單元關(guān)系量,以及目標(biāo)指令中與目標(biāo)指令對應(yīng)不同功能單元的數(shù)據(jù)依賴指令數(shù)所對應(yīng)的第三功能單元關(guān)系量;所述步驟I)中啟發(fā)量還包括對應(yīng)所述第一功能單元關(guān)系量的關(guān)聯(lián)功能單元啟發(fā)量、對應(yīng)所述第二功能單元關(guān)系量的下拍空閑關(guān)聯(lián)功能單元啟發(fā)量、以及對應(yīng)所述第三功能單元關(guān)系量的另類功能單元依賴指令啟發(fā)量。
[0015]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟2)中指令與依賴指令之間的依賴關(guān)系量具體是指目標(biāo)指令的所有數(shù)據(jù)依賴指令數(shù);所述步驟2)中啟發(fā)量還包括對應(yīng)所述數(shù)據(jù)依賴指令數(shù)的依賴指令啟發(fā)量。
[0016]作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟2)中啟發(fā)量還包括指令本身執(zhí)行特性啟發(fā)量,所述指令本身執(zhí)行特性啟發(fā)量為執(zhí)行目標(biāo)指令所需的節(jié)拍數(shù)。
[0017]作為本發(fā)明的進(jìn)一步改進(jìn):所述步驟3)中各啟發(fā)量的優(yōu)先級順序從高到低依次為:另類處理單元依賴指令啟發(fā)量、通道寄存器依賴指令啟發(fā)量、下拍空閑關(guān)聯(lián)功能單元啟發(fā)量、關(guān)聯(lián)功能單元啟發(fā)量、另類功能單元依賴指令啟發(fā)量、依賴指令啟發(fā)量以及指令執(zhí)行節(jié)拍數(shù)。
[0018]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟I)中還包括獲取資源狀態(tài)表步驟,具體實(shí)施步驟為:獲取目標(biāo)基本塊中當(dāng)前節(jié)拍以及當(dāng)前節(jié)拍前若干個(gè)節(jié)拍中各個(gè)功能單元狀態(tài)的資源狀態(tài)表,所述資源狀態(tài)表的每個(gè)結(jié)點(diǎn)記錄了對應(yīng)的功能單元在目標(biāo)時(shí)刻執(zhí)行的目標(biāo)指令以及完成所述目標(biāo)指令還需要的節(jié)拍數(shù)。
[0019]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟I)中每個(gè)功能單元獲取可發(fā)射指令的具體實(shí)施步驟為:為當(dāng)前功能單元設(shè)置一個(gè)存儲可發(fā)射指令的可發(fā)射指令集合并初始化為空;遍歷所述資源狀態(tài)表中當(dāng)前功能單元的所有一級就緒指令,如果一條目標(biāo)指令的所