匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法
【專(zhuān)利摘要】本發(fā)明涉及一種匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其步驟包括:判斷、分析并描述匯編級(jí)寄存器內(nèi)指令之間的數(shù)據(jù)依賴(lài)關(guān)系,構(gòu)建匯編級(jí)數(shù)據(jù)依賴(lài)圖ADDG,并且利用偽相關(guān)檢測(cè)算法進(jìn)行寄存器重新分配;分析匯編級(jí)基本塊之間的調(diào)用關(guān)系,構(gòu)建匯編級(jí)控制流圖ACFG,并選擇性添加控制依賴(lài)圖CDG中刪除冗余信息的特性來(lái)輔助后續(xù)調(diào)度;構(gòu)建匯編級(jí)程序調(diào)用圖APCG,組織管理全局源文件內(nèi)函數(shù)調(diào)用關(guān)系。本發(fā)明提供了一種匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,該方法從匯編級(jí)著手構(gòu)建更高效的結(jié)構(gòu)來(lái)完成更深層次的優(yōu)化,其存儲(chǔ)資源占用代價(jià)低、構(gòu)建方法簡(jiǎn)單,并且支持全文件級(jí)的指令再調(diào)度與優(yōu)化。
【專(zhuān)利說(shuō)明】匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法。
【背景技術(shù)】
[0002]編譯優(yōu)化的效果與編譯器可見(jiàn)的視野息息相關(guān),更寬的視野能給編譯器更大的發(fā)揮空間,從而獲得更好的優(yōu)化效果。采用跨文件調(diào)度框架能使編譯器的視野擴(kuò)大至整個(gè)程序是未來(lái)編譯領(lǐng)域的發(fā)展方向。然而,跨文件調(diào)度框架下進(jìn)行的過(guò)程間分析、優(yōu)化等均占用了過(guò)多的編譯時(shí)間和較大的存儲(chǔ)空間,這就導(dǎo)致絕大多數(shù)編譯器并不支持跨文件調(diào)度框架。
[0003]現(xiàn)有技術(shù)方案一般是針對(duì)編譯框架的中間語(yǔ)言提出,其中特征較為明顯的實(shí)現(xiàn)方法包括Vortex編譯器、SYZYGY編譯系統(tǒng)、LLVM編譯系統(tǒng)。其中:
[0004]VorteX是華盛頓大學(xué)實(shí)現(xiàn)的支持跨文件優(yōu)化的編譯器。Vortex編譯器前端正常的處理整個(gè)應(yīng)用程序,然后利用它的專(zhuān)用中間語(yǔ)言Vortex IL中間代碼表示把所有的編譯結(jié)果保存下來(lái),一旦得到全部的過(guò)程的VIL表示,也就形成了跨文件調(diào)度框架。
[0005]SYZYGY是HP公司的Sungdo Moon等人于2004年實(shí)現(xiàn)的基于HP-UX的Itanium處理器的編譯器的連接時(shí)跨文件過(guò)程間優(yōu)化框架。它將傳統(tǒng)編譯流程劃分為四個(gè)階段,包括:前端、連接時(shí)、過(guò)程間分析和后端,它選擇來(lái)連接時(shí)來(lái)可見(jiàn)全部的過(guò)程信息,所以在連接前保存目標(biāo)代碼的編譯結(jié)果。
[0006]LLVM是伊利諾斯大學(xué)2004年提出的連接時(shí)全程序優(yōu)化框架。為了支持全程序優(yōu)化,LLVM選擇的是通過(guò)一個(gè)偽連接器來(lái)保存編譯的中間結(jié)果,這個(gè)中間結(jié)果以目標(biāo)文件的面貌出現(xiàn)。但不同于SYZYGY的目標(biāo)代碼。LLVM擴(kuò)展了 GCC原編譯器的Link階段。在LLVM系統(tǒng)中提供了一個(gè)用于進(jìn)行跨文件過(guò)程間分析和優(yōu)化的偽連接器,這個(gè)連接器主要用來(lái)處理LLVM系統(tǒng)自身生成的目標(biāo)代碼和LLVM匯編代碼。LLVM修改了 GCC前端,這個(gè)前端完成對(duì)源程序的處理生成樹(shù)表示后將樹(shù)表示轉(zhuǎn)換成LLVM的中間代碼表示形式,中級(jí)優(yōu)化器對(duì)這個(gè)中間代碼表示進(jìn)行一系列優(yōu)化后生成LLVM的.ο文件。全部程序都被修改后的前端轉(zhuǎn)換為L(zhǎng)LVM的.ο文件后,再調(diào)用LLVM的優(yōu)化連接器將它們Link為一個(gè)單獨(dú)的文件。這樣編譯器就可見(jiàn)到全部的過(guò)程并基于這個(gè)文件進(jìn)行跨文件的過(guò)程間分析和優(yōu)化變形。完成優(yōu)化變形后,這個(gè)LLVM中間代碼表示被轉(zhuǎn)換成GCC自身所使用的RTL表示。GCC編譯器處理RTL表示,生成真正的目標(biāo)代碼,然后調(diào)用真正的Nati ve Li nker生成最終的可執(zhí)行文件。
[0007]現(xiàn)有技術(shù)主要是通過(guò)保存編譯器的中間結(jié)果實(shí)現(xiàn)跨文件調(diào)度框架,而保存中間結(jié)果是為了輔助跨文件間過(guò)程調(diào)度,但這并不能提供合適的結(jié)構(gòu)去實(shí)現(xiàn)指令級(jí)再調(diào)度。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的目的是針對(duì)上述問(wèn)題,提供了一種有效的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法。[0009]為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其包括以下步驟:
[0010]構(gòu)建匯編級(jí)數(shù)據(jù)依賴(lài)圖ADDG,判斷、分析并描述匯編級(jí)寄存器內(nèi)指令之間的數(shù)據(jù)依賴(lài)關(guān)系,并且利用偽相關(guān)檢測(cè)算法進(jìn)行寄存器重新分配,避免臨時(shí)寄存器的復(fù)用帶來(lái)數(shù)據(jù)間的偽相關(guān);以及
[0011]構(gòu)建匯編級(jí)控制依賴(lài)圖ACFG,控制數(shù)據(jù)依賴(lài)分析,并添加控制依賴(lài)圖CDG中刪除冗余信息的特性來(lái)輔助后續(xù)調(diào)度,構(gòu)建基于多叉樹(shù)結(jié)構(gòu)的謂詞分析方法,通過(guò)遍歷控制流圖,跨基本塊的分析條件判斷相關(guān)指令間的數(shù)據(jù)依賴(lài)關(guān)系來(lái)完成謂詞分析;以及
[0012]構(gòu)建匯編級(jí)程序調(diào)用圖APCG,組織管理全局源文件間的關(guān)系;
[0013]所述APCG中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)所述ACFG,所述ACFG中每個(gè)節(jié)點(diǎn)可映射到一個(gè)匯編級(jí)基本塊,所述ACFG中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)獨(dú)立的ADDG。
[0014]進(jìn)一步地,所述ADDG包括數(shù)據(jù)依賴(lài)檢測(cè)算法、ADDG創(chuàng)建算法以及所述偽相關(guān)檢測(cè)算法,其中,
[0015]所述數(shù)據(jù)依賴(lài)檢測(cè)算法用于判斷兩條指令之間為何種所述數(shù)據(jù)依賴(lài)關(guān)系;
[0016]所述ADDG創(chuàng)建算法反映了匯編級(jí)基本塊內(nèi)全部指令之間為何種所述數(shù)據(jù)依賴(lài)關(guān)系,并表現(xiàn)出來(lái);
[0017]所述偽相關(guān)檢測(cè)算法用于寄存器重新分配,避免偽相關(guān)帶來(lái)的數(shù)據(jù)依賴(lài)關(guān)系。
[0018]進(jìn)一步地,所述ADDG是一個(gè)有向無(wú)環(huán)圖DAG。
[0019]進(jìn)一步地,所述ACFG是一個(gè)有向有環(huán)圖DCG。
[0020]進(jìn)一步地,所述構(gòu)建基于多叉樹(shù)結(jié)構(gòu)的謂詞分析方法是通過(guò)遍歷控制流圖,跨基本塊的分析條件判斷相關(guān)指令之間的數(shù)據(jù)依賴(lài)關(guān)系來(lái)完成謂詞分析。
[0021]進(jìn)一步地,所述寄存器重新分配包括以下步驟:
[0022]函數(shù)??蚣芊治?,首先分析程序的??蚣?,并統(tǒng)計(jì)函數(shù)內(nèi)即將用到的同類(lèi)寄存器;以及
[0023]路徑分析,分析后文將介紹的ACFG統(tǒng)計(jì)當(dāng)前匯編級(jí)基本塊的全部前驅(qū)動(dòng)點(diǎn)對(duì)同類(lèi)寄存器的使用情況;以及
[0024]判斷所述路徑分析中同類(lèi)寄存器是否全部被使用。
[0025]進(jìn)一步地,所述函數(shù)棧框架分析用于保存函數(shù)內(nèi)使用到的臨時(shí)寄存器。
[0026]進(jìn)一步地,若所述路徑分析中同類(lèi)寄存器全部被使用,則判斷修改棧結(jié)構(gòu)
[0027]時(shí)導(dǎo)致的指令帶來(lái)的影響是否小于對(duì)依賴(lài)關(guān)系的減少。
[0028]進(jìn)一步地,若所述路徑分析中同類(lèi)寄存器未全部被使用,則任意選擇一個(gè)
[0029]未使用的寄存器進(jìn)行重新分配。
[0030]進(jìn)一步地,若所述修改棧結(jié)構(gòu)時(shí)導(dǎo)致的指令帶來(lái)的影響小于對(duì)依賴(lài)關(guān)系的減少,則重新進(jìn)行分配,否則放棄分配。
[0031]進(jìn)一步地,構(gòu)建所述APCG的步驟包括:
[0032]前端分析過(guò)程中收集全部的函數(shù),并創(chuàng)建所述APCG的點(diǎn)集合;以及
[0033]順序分析點(diǎn)集元素對(duì)應(yīng)的匯編指令片段,分析其中的函數(shù)調(diào)用指令目標(biāo)地址,并在點(diǎn)元素之間添加邊;以及
[0034]生成未經(jīng)邊冗余刪除的APCG ;
[0035]進(jìn)一步地,所述APCG是一個(gè)DCG。[0036]本發(fā)明帶來(lái)的有益效果是:本發(fā)明提供了一種匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,該方法從匯編級(jí)著手構(gòu)建更高效的結(jié)構(gòu)來(lái)完成更深層次的優(yōu)化,其存儲(chǔ)資源占用代價(jià)低、構(gòu)建方法簡(jiǎn)單,并且支持全文件級(jí)的指令再調(diào)度與優(yōu)化。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0037]圖1為本發(fā)明一實(shí)施例一種匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法流程圖;
[0038]圖2為本發(fā)明一實(shí)施例中11-16的ADDG示意圖;
[0039]圖3為寄存器重新分配后的ADDG示意圖;
[0040]圖4為本發(fā)明進(jìn)行寄存器重分配時(shí)的流程圖;
[0041]圖5為表8中對(duì)應(yīng)的基本控制流圖;
[0042]圖6為表8中所示的代碼片段的謂詞關(guān)系示意圖;
[0043]圖7為本發(fā)明一實(shí)施例中ACFG示意圖;
圖8為本發(fā)明匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法中APCG、ACFG及ADDG間的嵌套關(guān)系示意圖。
【具體實(shí)施方式】
[0044]下面通過(guò)附圖和 實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步地詳細(xì)描述。
[0045]如圖1所示是本發(fā)明一實(shí)施例一種匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法流程圖,如圖所示,本發(fā)明具體包括以下步驟:
[0046]步驟101、構(gòu)建匯編級(jí)數(shù)據(jù)依賴(lài)圖(Assembly Data Dependence Graph, ADDG),判斷、分析并描述匯編級(jí)寄存器內(nèi)指令之間的數(shù)據(jù)依賴(lài)關(guān)系,并且利用偽相關(guān)檢測(cè)算法進(jìn)行寄存器重新分配,避免臨時(shí)寄存器的復(fù)用帶來(lái)數(shù)據(jù)間的偽相關(guān)。
[0047]數(shù)據(jù)依賴(lài)是指語(yǔ)句之間存在數(shù)據(jù)約束關(guān)系,如果兩個(gè)運(yùn)算操作之間無(wú)重復(fù)使用的變量,或僅連續(xù)讀取同一個(gè)變量,那么執(zhí)行結(jié)果與它們的執(zhí)行順序無(wú)關(guān),如果相關(guān)則這兩個(gè)運(yùn)算操作之間就被認(rèn)定為存在數(shù)據(jù)約束關(guān)系。數(shù)據(jù)依賴(lài)關(guān)系包括:寫(xiě)后寫(xiě)、寫(xiě)后讀、讀后寫(xiě)以及存儲(chǔ)依賴(lài)四種。匯編級(jí)數(shù)據(jù)依賴(lài)圖就是為了描述匯編級(jí)基本塊內(nèi)指令之間的這四種數(shù)據(jù)依賴(lài)關(guān)系。
[0048]ADDG 是一個(gè)有向無(wú)環(huán)圖(Directed Acyclic Graph, DAG)。在 ADDG 中,G (ADDG) = (V (G),E (G),Φ (G)),其中V (G)是節(jié)點(diǎn)集合,E (G)是邊集合,Φ (G)是關(guān)聯(lián)函數(shù)。
[0049]節(jié)點(diǎn)集合V (G) = Iv1, V2, Vf vn},其中Vi與匯編級(jí)基本塊內(nèi)的指令呈--映射關(guān)系
并被其屬性刻畫(huà),Vi的出度(out-degree)和入度(in-degree)均不超過(guò)當(dāng)前指令使用寄存器的數(shù)目。
[0050]邊集合E(G) = R1, e2, e^“ej ,若取 efKv」,vk> | Vj, vk e V (G)},則 Oi 是一條以 Vj為初節(jié)點(diǎn),以Vk為終節(jié)點(diǎn)的有向邊,它描述了 Vk之間存在一種或多種數(shù)據(jù)依賴(lài)關(guān)系。同時(shí),E(G)中邊元素的有向性說(shuō)明了初節(jié)點(diǎn),終節(jié)點(diǎn)在執(zhí)行順序上的唯一性,如果多個(gè)邊元素以及邊的數(shù)據(jù)依賴(lài)關(guān)系屬性可組成Vm — Vn的一條通路或者路徑,則vm,vn可到達(dá)任意兩節(jié)點(diǎn)之間;如果不可到達(dá),則說(shuō)明它們可以以任意順序被執(zhí)行。
[0051]關(guān)聯(lián)函數(shù)Φ (G)描述了邊與節(jié)點(diǎn)之間的關(guān)聯(lián)關(guān)系E — VXV,本發(fā)明實(shí)施例中V(G)內(nèi)各節(jié)點(diǎn)元素之間至多存在一條邊,因此,Φ (G)是單映射的,即ADDG任意兩節(jié)點(diǎn)之間不存在無(wú)重復(fù)邊。
[0052]表1為本發(fā)明建立ADDG時(shí)所用到的數(shù)據(jù)結(jié)構(gòu)。其中,結(jié)構(gòu)體VexPos對(duì)ADDG中的節(jié)點(diǎn)的位置進(jìn)行了定義,Lidx為遍歷語(yǔ)句行的迭代器,F(xiàn)idx為遍歷文件的迭代器;結(jié)構(gòu)體VexNode對(duì)節(jié)點(diǎn)集合V (G)進(jìn)行了定義,Firstln_為連接節(jié)點(diǎn)的第一條入邊,F(xiàn)irstOut_為連接節(jié)點(diǎn)的第一條出邊;結(jié)構(gòu)體ArcBox定義了邊集合E(G), HeadVex與TailVex分別為一條邊的初節(jié)點(diǎn)和終節(jié)點(diǎn),Id定義了邊屬性,PathId用于標(biāo)記邊對(duì)應(yīng)的通路,Correlation數(shù)組存儲(chǔ)對(duì)應(yīng)邊描述的全部依賴(lài)關(guān)系,HLink指針用于指向下一條與當(dāng)前邊共用相同初節(jié)點(diǎn)的下一條邊,而TLink則指向共用相同終節(jié)點(diǎn)的下一條邊;結(jié)構(gòu)體Graph定義了 F1DG的結(jié)構(gòu),vector容器VeXN0de_存儲(chǔ)ADDG,BlockNode則存儲(chǔ)后續(xù)的匯編級(jí)控制流圖。
[0053]表1
[0054]
【權(quán)利要求】
1.一種匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,包括以下步驟: 構(gòu)建匯編級(jí)數(shù)據(jù)依賴(lài)圖ADDG,判斷、分析并描述匯編級(jí)寄存器內(nèi)指令之間的數(shù)據(jù)依賴(lài)關(guān)系,并且利用偽相關(guān)檢測(cè)算法進(jìn)行寄存器重新分配,避免臨時(shí)寄存器的復(fù)用帶來(lái)數(shù)據(jù)間的偽相關(guān);以及 構(gòu)建匯編級(jí)控制依賴(lài)圖ACFG,控制數(shù)據(jù)依賴(lài)分析,并添加控制依賴(lài)圖CDG中刪除冗余信息的特性來(lái)輔助后續(xù)調(diào)度,構(gòu)建基于多叉樹(shù)結(jié)構(gòu)的謂詞分析方法,通過(guò)遍歷控制流圖,跨基本塊的分析條件判斷相關(guān)指令間的數(shù)據(jù)依賴(lài)關(guān)系來(lái)完成謂詞分析;以及 構(gòu)建匯編級(jí)程序調(diào)用圖APCG,組織管理全局源文件間的關(guān)系; 所述APCG中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)所述ACFG,所述ACFG中每個(gè)節(jié)點(diǎn)可映射到一個(gè)匯編級(jí)基本塊,所述ACFG中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)獨(dú)立的ADDG。
2.如權(quán)利要求1所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述ADDG包括數(shù)據(jù)依賴(lài)檢測(cè)算法、ADDG創(chuàng)建算法以及所述偽相關(guān)檢測(cè)算法,其中, 所述數(shù)據(jù)依賴(lài)檢測(cè)算法用于判斷兩條指令之間為何種所述數(shù)據(jù)依賴(lài)關(guān)系; 所述ADDG創(chuàng)建算法反映了匯編級(jí)基本塊內(nèi)全部指令之間為何種所述數(shù)據(jù)依賴(lài)關(guān)系,并表現(xiàn)出來(lái); 所述偽相關(guān)檢測(cè)算法用于寄存器重新分配,避免偽相關(guān)帶來(lái)的數(shù)據(jù)依賴(lài)關(guān)系。
3.如權(quán)利要求1或2所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述ADDG是一個(gè)有向無(wú)環(huán)圖DAG。
4.如權(quán)利要求1所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述ACFG是一個(gè)有向有環(huán)圖DCG。
5.如權(quán)利要求1所述的如權(quán)利要求1所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述構(gòu)建基于多叉樹(shù)結(jié)構(gòu)的謂詞分析方法是通過(guò)遍歷控制流圖,跨基本塊的分析條件判斷相關(guān)指令之間的數(shù)據(jù)依賴(lài)關(guān)系來(lái)完成謂詞分析。
6.如權(quán)利要求1或2所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述寄存器重新分配包括以下步驟: 函數(shù)??蚣芊治?,首先分析程序的??蚣?,并統(tǒng)計(jì)函數(shù)內(nèi)即將用到的同類(lèi)寄存器;以及 路徑分析,分析后文將介紹的ACFG統(tǒng)計(jì)當(dāng)前匯編級(jí)基本塊的全部前驅(qū)動(dòng)點(diǎn)對(duì)同類(lèi)寄存器的使用情況;以及 判斷所述路徑分析中同類(lèi)寄存器是否全部被使用。
7.如權(quán)利要求6所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述函數(shù)棧框架分析用于保存函數(shù)內(nèi)使用到的臨時(shí)寄存器。
8.如權(quán)利要求6所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,若所述路徑分析中同類(lèi)寄存器全部被使用,則判斷修改棧結(jié)構(gòu)時(shí)導(dǎo)致的指令帶來(lái)的影響是否小于對(duì)依賴(lài)關(guān)系的減少。
9.如權(quán)利要求6所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,若所述路徑分析中同類(lèi)寄存器未全部被使用,則任意選擇一個(gè)未使用的寄存器進(jìn)行重新分配。
10.如權(quán)利要求8所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,若所述修改棧結(jié)構(gòu)時(shí)導(dǎo)致的指令帶來(lái)的影響小于對(duì)依賴(lài)關(guān)系的減少,則重新進(jìn)行分配,否則放棄分配。
11.如權(quán)利要求1所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,構(gòu)建所述APCG的步驟包括: 前端分析過(guò)程中收集全部的函數(shù),并創(chuàng)建所述APCG的點(diǎn)集合;以及順序分析點(diǎn)集元素對(duì)應(yīng)的匯編指令片段,分析其中的函數(shù)調(diào)用指令目標(biāo)地址,并在點(diǎn)元素之間添加邊;以及 生成未經(jīng)邊冗余刪除的APCG。
12.如權(quán)利要求1或11所述的匯編級(jí)跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述APCG 是一個(gè) DCG。
【文檔編號(hào)】G06F9/45GK103645930SQ201310697997
【公開(kāi)日】2014年3月19日 申請(qǐng)日期:2013年12月18日 優(yōu)先權(quán)日:2013年12月18日
【發(fā)明者】朱浩, 彭楚, 王東輝, 洪纓 申請(qǐng)人:中國(guó)科學(xué)院聲學(xué)研究所