本發(fā)明涉及指令編譯處理,尤其涉及一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法及裝置。
背景技術(shù):
1、對于如數(shù)字信號處理器(dsp)的常見并行處理器,由于指令間的依賴關(guān)系較少并且不存在長控制流,通常由編譯器對依賴關(guān)系進行靜態(tài)分析以實現(xiàn)處理器的指令級別的并行,從而減少并行處理器完成目標(biāo)代碼的執(zhí)行時間。
2、對于數(shù)字信號處理器專用的指令集,最常見的指令依賴是數(shù)據(jù)依賴和控制依賴。當(dāng)編譯過程中的基本塊越大,調(diào)度算法可以處理的依賴關(guān)系也就越多,因此越容易進行優(yōu)化。而基本塊的大小由條件分支指令出現(xiàn)的位置決定,控制依賴的出現(xiàn)阻止了基本塊內(nèi)的調(diào)度算法進行更多優(yōu)化。
3、為了提高指令并行度,處理器設(shè)計者引入了謂詞執(zhí)行指令從而將控制依賴轉(zhuǎn)換為數(shù)據(jù)依賴進行處理。現(xiàn)有的分支轉(zhuǎn)換通常只支持單一謂詞,這個謂詞對應(yīng)了指令編碼中的一位預(yù)測碼。而這樣每條指令對應(yīng)一位預(yù)測碼的方式,當(dāng)涉及到多條件謂詞時,難以識別謂詞之間可能存在控制依賴關(guān)系,從而對調(diào)度算法的處理速度造成影響。
技術(shù)實現(xiàn)思路
1、本發(fā)明提供一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法及裝置,用以解決現(xiàn)有技術(shù)中單一謂詞的局限對調(diào)度算法的處理速度造成影響的缺陷,通過指令編譯預(yù)處理的分支轉(zhuǎn)換方法實現(xiàn)一種運行效率更高的調(diào)度算法。
2、本發(fā)明提供一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法,包括:
3、確定待處理的ir結(jié)構(gòu)中實際存在控制依賴關(guān)系的基本塊;
4、將所述待處理的ir結(jié)構(gòu)中的條件分支指令轉(zhuǎn)換為對應(yīng)的預(yù)測碼的比較賦值指令;
5、基于所述比較賦值指令將所述實際存在控制依賴關(guān)系的基本塊的指令提升為謂詞執(zhí)行指令。
6、根據(jù)本發(fā)明提供的一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法,所述確定待處理的ir結(jié)構(gòu)中實際存在控制依賴關(guān)系的基本塊的步驟,具體包括:
7、遍歷待處理的ir結(jié)構(gòu)的控制流圖,為每個控制分支生成對應(yīng)的控制標(biāo)記;
8、對所述每個控制分支下滿足條件跳轉(zhuǎn)的基本塊生成第一標(biāo)記,不滿足條件跳轉(zhuǎn)的基本塊生成第二標(biāo)記,將每個基本塊自身生成的第一標(biāo)記或第二標(biāo)記,以及其所屬的控制鏈上游鄰近基本塊生成的第一標(biāo)記或第二標(biāo)記共同確定為每個基本塊的塊標(biāo)記,其中,所述第一標(biāo)記和所述第二標(biāo)記為所述每個控制標(biāo)記對應(yīng)的一組互補標(biāo)記;
9、消去每個基本塊的塊標(biāo)記中的互補標(biāo)記,并將仍然存在塊標(biāo)記的基本塊確定為所述實際存在控制依賴關(guān)系的基本塊。
10、根據(jù)本發(fā)明提供的一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法,所述控制標(biāo)記為每個控制分支對應(yīng)的一位預(yù)測碼,所述第一標(biāo)記為其自身對應(yīng)的控制標(biāo)記,所述第二標(biāo)記為其自身對應(yīng)的控制標(biāo)記的邏輯非標(biāo)記。
11、根據(jù)本發(fā)明提供的一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法,所述消去每個基本塊的塊標(biāo)記中的互補標(biāo)記的步驟具體包括:
12、在確定全部基本塊的塊標(biāo)記后,遍歷所述控制流圖中全部基本塊的塊標(biāo)記,在所述塊標(biāo)記中存在所述互補標(biāo)記的情況下,消去所述互補標(biāo)記,并更新所述塊標(biāo)記。
13、根據(jù)本發(fā)明提供的一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法,所述消去每個基本塊的塊標(biāo)記中的互補標(biāo)記的步驟具體包括:
14、在確定一個基本塊的塊標(biāo)記后,檢測所述一個基本塊的塊標(biāo)記中是否存在所述互補標(biāo)記;
15、在所述一個基本塊的塊標(biāo)記中存在所述互補標(biāo)記的情況下,消去所述互補標(biāo)記,并更新所述塊標(biāo)記。
16、根據(jù)本發(fā)明提供的一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法,所述確定待處理的ir結(jié)構(gòu)中實際存在控制依賴關(guān)系的基本塊的步驟,具體包括:
17、在編譯器提供支配關(guān)系的編譯分析預(yù)處理的情況下,直接獲取所述實際存在控制依賴關(guān)系的基本塊。
18、本發(fā)明還提供一種指令編譯預(yù)處理的分支轉(zhuǎn)換裝置,包括:
19、確定模塊,用于確定待處理的ir結(jié)構(gòu)中實際存在控制依賴關(guān)系的基本塊;
20、轉(zhuǎn)換模塊,用于將所述待處理的ir結(jié)構(gòu)中的基本塊的條件分支指令轉(zhuǎn)換為對應(yīng)的預(yù)測碼的比較賦值指令;
21、提升模塊,用于基于所述比較賦值指令將所述實際存在控制依賴關(guān)系的基本塊的指令提升為謂詞執(zhí)行指令。
22、本發(fā)明還提供一種電子設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機程序,所述處理器執(zhí)行所述程序時實現(xiàn)如上述任一種所述指令編譯預(yù)處理的分支轉(zhuǎn)換方法。
23、本發(fā)明還提供一種非暫態(tài)計算機可讀存儲介質(zhì),其上存儲有計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)如上述任一種所述指令編譯預(yù)處理的分支轉(zhuǎn)換方法。
24、本發(fā)明還提供一種計算機程序產(chǎn)品,包括計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)如上述任一種所述指令編譯預(yù)處理的分支轉(zhuǎn)換方法。
25、本發(fā)明提供的指令編譯預(yù)處理的分支轉(zhuǎn)換方法及裝置,通過搜索待處理的ir結(jié)構(gòu)中的依賴關(guān)系,確定實際存在控制依賴關(guān)系的基本塊,進而在編譯器后端的處理過程中對存在同時存在控制依賴和數(shù)據(jù)依賴的函數(shù)進行分支轉(zhuǎn)換,從而將控制依賴轉(zhuǎn)換為數(shù)據(jù)依賴,為提高指令級別并行度的調(diào)度算法提供更多優(yōu)化空間。
1.一種指令編譯預(yù)處理的分支轉(zhuǎn)換方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的指令編譯預(yù)處理的分支轉(zhuǎn)換方法,其特征在于,所述確定待處理的ir結(jié)構(gòu)中實際存在控制依賴關(guān)系的基本塊的步驟,具體包括:
3.根據(jù)權(quán)利要求2所述的指令編譯預(yù)處理的分支轉(zhuǎn)換方法,其特征在于,所述控制標(biāo)記為每個控制分支對應(yīng)的一位預(yù)測碼,所述第一標(biāo)記為其自身對應(yīng)的控制標(biāo)記,所述第二標(biāo)記為其自身對應(yīng)的控制標(biāo)記的邏輯非標(biāo)記。
4.根據(jù)權(quán)利要求2所述的指令編譯預(yù)處理的分支轉(zhuǎn)換方法,其特征在于,所述消去每個基本塊的塊標(biāo)記中的互補標(biāo)記的步驟具體包括:
5.根據(jù)權(quán)利要求2所述的指令編譯預(yù)處理的分支轉(zhuǎn)換方法,其特征在于,所述消去每個基本塊的塊標(biāo)記中的互補標(biāo)記的步驟具體包括:
6.根據(jù)權(quán)利要求1所述的指令編譯預(yù)處理的分支轉(zhuǎn)換方法,其特征在于,所述確定待處理的ir結(jié)構(gòu)中實際存在控制依賴關(guān)系的基本塊的步驟,具體包括:
7.一種指令編譯預(yù)處理的分支轉(zhuǎn)換裝置,其特征在于,包括:
8.一種電子設(shè)備,包括存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運行的計算機程序,其特征在于,所述處理器執(zhí)行所述程序時實現(xiàn)如權(quán)利要求1至6任一項所述指令編譯預(yù)處理的分支轉(zhuǎn)換方法。
9.一種非暫態(tài)計算機可讀存儲介質(zhì),其上存儲有計算機程序,其特征在于,所述計算機程序被處理器執(zhí)行時實現(xiàn)如權(quán)利要求1至6任一項所述指令編譯預(yù)處理的分支轉(zhuǎn)換方法。
10.一種計算機程序產(chǎn)品,包括計算機程序,其特征在于,所述計算機程序被處理器執(zhí)行時實現(xiàn)如權(quán)利要求1至6任一項所述指令編譯預(yù)處理的分支轉(zhuǎn)換方法。