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

匯編級跨文件調(diào)度框架的構(gòu)建方法

文檔序號:6524317閱讀:251來源:國知局
匯編級跨文件調(diào)度框架的構(gòu)建方法
【專利摘要】本發(fā)明涉及一種匯編級跨文件調(diào)度框架的構(gòu)建方法,其步驟包括:判斷、分析并描述匯編級寄存器內(nèi)指令之間的數(shù)據(jù)依賴關(guān)系,構(gòu)建匯編級數(shù)據(jù)依賴圖ADDG,并且利用偽相關(guān)檢測算法進行寄存器重新分配;分析匯編級基本塊之間的調(diào)用關(guān)系,構(gòu)建匯編級控制流圖ACFG,并選擇性添加控制依賴圖CDG中刪除冗余信息的特性來輔助后續(xù)調(diào)度;構(gòu)建匯編級程序調(diào)用圖APCG,組織管理全局源文件內(nèi)函數(shù)調(diào)用關(guān)系。本發(fā)明提供了一種匯編級跨文件調(diào)度框架的構(gòu)建方法,該方法從匯編級著手構(gòu)建更高效的結(jié)構(gòu)來完成更深層次的優(yōu)化,其存儲資源占用代價低、構(gòu)建方法簡單,并且支持全文件級的指令再調(diào)度與優(yōu)化。
【專利說明】匯編級跨文件調(diào)度框架的構(gòu)建方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機領(lǐng)域,尤其涉及一種匯編級跨文件調(diào)度框架的構(gòu)建方法。
【背景技術(shù)】
[0002]編譯優(yōu)化的效果與編譯器可見的視野息息相關(guān),更寬的視野能給編譯器更大的發(fā)揮空間,從而獲得更好的優(yōu)化效果。采用跨文件調(diào)度框架能使編譯器的視野擴大至整個程序是未來編譯領(lǐng)域的發(fā)展方向。然而,跨文件調(diào)度框架下進行的過程間分析、優(yōu)化等均占用了過多的編譯時間和較大的存儲空間,這就導(dǎo)致絕大多數(shù)編譯器并不支持跨文件調(diào)度框架。
[0003]現(xiàn)有技術(shù)方案一般是針對編譯框架的中間語言提出,其中特征較為明顯的實現(xiàn)方法包括Vortex編譯器、SYZYGY編譯系統(tǒng)、LLVM編譯系統(tǒng)。其中:
[0004]VorteX是華盛頓大學(xué)實現(xiàn)的支持跨文件優(yōu)化的編譯器。Vortex編譯器前端正常的處理整個應(yīng)用程序,然后利用它的專用中間語言Vortex IL中間代碼表示把所有的編譯結(jié)果保存下來,一旦得到全部的過程的VIL表示,也就形成了跨文件調(diào)度框架。
[0005]SYZYGY是HP公司的Sungdo Moon等人于2004年實現(xiàn)的基于HP-UX的Itanium處理器的編譯器的連接時跨文件過程間優(yōu)化框架。它將傳統(tǒng)編譯流程劃分為四個階段,包括:前端、連接時、過程間分析和后端,它選擇來連接時來可見全部的過程信息,所以在連接前保存目標代碼的編譯結(jié)果。
[0006]LLVM是伊利諾斯大學(xué)2004年提出的連接時全程序優(yōu)化框架。為了支持全程序優(yōu)化,LLVM選擇的是通過一個偽連接器來保存編譯的中間結(jié)果,這個中間結(jié)果以目標文件的面貌出現(xiàn)。但不同于SYZYGY的目標代碼。LLVM擴展了 GCC原編譯器的Link階段。在LLVM系統(tǒng)中提供了一個用于進行跨文件過程間分析和優(yōu)化的偽連接器,這個連接器主要用來處理LLVM系統(tǒng)自身生成的目標代碼和LLVM匯編代碼。LLVM修改了 GCC前端,這個前端完成對源程序的處理生成樹表示后將樹表示轉(zhuǎn)換成LLVM的中間代碼表示形式,中級優(yōu)化器對這個中間代碼表示進行一系列優(yōu)化后生成LLVM的.ο文件。全部程序都被修改后的前端轉(zhuǎn)換為LLVM的.ο文件后,再調(diào)用LLVM的優(yōu)化連接器將它們Link為一個單獨的文件。這樣編譯器就可見到全部的過程并基于這個文件進行跨文件的過程間分析和優(yōu)化變形。完成優(yōu)化變形后,這個LLVM中間代碼表示被轉(zhuǎn)換成GCC自身所使用的RTL表示。GCC編譯器處理RTL表示,生成真正的目標代碼,然后調(diào)用真正的Nati ve Li nker生成最終的可執(zhí)行文件。
[0007]現(xiàn)有技術(shù)主要是通過保存編譯器的中間結(jié)果實現(xiàn)跨文件調(diào)度框架,而保存中間結(jié)果是為了輔助跨文件間過程調(diào)度,但這并不能提供合適的結(jié)構(gòu)去實現(xiàn)指令級再調(diào)度。

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

[0008]本發(fā)明的目的是針對上述問題,提供了一種有效的匯編級跨文件調(diào)度框架的構(gòu)建方法。[0009]為實現(xiàn)上述目的,本發(fā)明提供了一種匯編級跨文件調(diào)度框架的構(gòu)建方法,其包括以下步驟:
[0010]構(gòu)建匯編級數(shù)據(jù)依賴圖ADDG,判斷、分析并描述匯編級寄存器內(nèi)指令之間的數(shù)據(jù)依賴關(guān)系,并且利用偽相關(guān)檢測算法進行寄存器重新分配,避免臨時寄存器的復(fù)用帶來數(shù)據(jù)間的偽相關(guān);以及
[0011]構(gòu)建匯編級控制依賴圖ACFG,控制數(shù)據(jù)依賴分析,并添加控制依賴圖CDG中刪除冗余信息的特性來輔助后續(xù)調(diào)度,構(gòu)建基于多叉樹結(jié)構(gòu)的謂詞分析方法,通過遍歷控制流圖,跨基本塊的分析條件判斷相關(guān)指令間的數(shù)據(jù)依賴關(guān)系來完成謂詞分析;以及
[0012]構(gòu)建匯編級程序調(diào)用圖APCG,組織管理全局源文件間的關(guān)系;
[0013]所述APCG中每個節(jié)點對應(yīng)一個所述ACFG,所述ACFG中每個節(jié)點可映射到一個匯編級基本塊,所述ACFG中每個節(jié)點對應(yīng)一個獨立的ADDG。
[0014]進一步地,所述ADDG包括數(shù)據(jù)依賴檢測算法、ADDG創(chuàng)建算法以及所述偽相關(guān)檢測算法,其中,
[0015]所述數(shù)據(jù)依賴檢測算法用于判斷兩條指令之間為何種所述數(shù)據(jù)依賴關(guān)系;
[0016]所述ADDG創(chuàng)建算法反映了匯編級基本塊內(nèi)全部指令之間為何種所述數(shù)據(jù)依賴關(guān)系,并表現(xiàn)出來;
[0017]所述偽相關(guān)檢測算法用于寄存器重新分配,避免偽相關(guān)帶來的數(shù)據(jù)依賴關(guān)系。
[0018]進一步地,所述ADDG是一個有向無環(huán)圖DAG。
[0019]進一步地,所述ACFG是一個有向有環(huán)圖DCG。
[0020]進一步地,所述構(gòu)建基于多叉樹結(jié)構(gòu)的謂詞分析方法是通過遍歷控制流圖,跨基本塊的分析條件判斷相關(guān)指令之間的數(shù)據(jù)依賴關(guān)系來完成謂詞分析。
[0021]進一步地,所述寄存器重新分配包括以下步驟:
[0022]函數(shù)??蚣芊治觯紫确治龀绦虻臈?蚣埽⒔y(tǒng)計函數(shù)內(nèi)即將用到的同類寄存器;以及
[0023]路徑分析,分析后文將介紹的ACFG統(tǒng)計當前匯編級基本塊的全部前驅(qū)動點對同類寄存器的使用情況;以及
[0024]判斷所述路徑分析中同類寄存器是否全部被使用。
[0025]進一步地,所述函數(shù)??蚣芊治鲇糜诒4婧瘮?shù)內(nèi)使用到的臨時寄存器。
[0026]進一步地,若所述路徑分析中同類寄存器全部被使用,則判斷修改棧結(jié)構(gòu)
[0027]時導(dǎo)致的指令帶來的影響是否小于對依賴關(guān)系的減少。
[0028]進一步地,若所述路徑分析中同類寄存器未全部被使用,則任意選擇一個
[0029]未使用的寄存器進行重新分配。
[0030]進一步地,若所述修改棧結(jié)構(gòu)時導(dǎo)致的指令帶來的影響小于對依賴關(guān)系的減少,則重新進行分配,否則放棄分配。
[0031]進一步地,構(gòu)建所述APCG的步驟包括:
[0032]前端分析過程中收集全部的函數(shù),并創(chuàng)建所述APCG的點集合;以及
[0033]順序分析點集元素對應(yīng)的匯編指令片段,分析其中的函數(shù)調(diào)用指令目標地址,并在點元素之間添加邊;以及
[0034]生成未經(jīng)邊冗余刪除的APCG ;
[0035]進一步地,所述APCG是一個DCG。[0036]本發(fā)明帶來的有益效果是:本發(fā)明提供了一種匯編級跨文件調(diào)度框架的構(gòu)建方法,該方法從匯編級著手構(gòu)建更高效的結(jié)構(gòu)來完成更深層次的優(yōu)化,其存儲資源占用代價低、構(gòu)建方法簡單,并且支持全文件級的指令再調(diào)度與優(yōu)化。
【專利附圖】

【附圖說明】
[0037]圖1為本發(fā)明一實施例一種匯編級跨文件調(diào)度框架的構(gòu)建方法流程圖;
[0038]圖2為本發(fā)明一實施例中11-16的ADDG示意圖;
[0039]圖3為寄存器重新分配后的ADDG示意圖;
[0040]圖4為本發(fā)明進行寄存器重分配時的流程圖;
[0041]圖5為表8中對應(yīng)的基本控制流圖;
[0042]圖6為表8中所示的代碼片段的謂詞關(guān)系示意圖;
[0043]圖7為本發(fā)明一實施例中ACFG示意圖;
圖8為本發(fā)明匯編級跨文件調(diào)度框架的構(gòu)建方法中APCG、ACFG及ADDG間的嵌套關(guān)系示意圖。
【具體實施方式】
[0044]下面通過附圖和 實施例,對本發(fā)明的技術(shù)方案做進一步地詳細描述。
[0045]如圖1所示是本發(fā)明一實施例一種匯編級跨文件調(diào)度框架的構(gòu)建方法流程圖,如圖所示,本發(fā)明具體包括以下步驟:
[0046]步驟101、構(gòu)建匯編級數(shù)據(jù)依賴圖(Assembly Data Dependence Graph, ADDG),判斷、分析并描述匯編級寄存器內(nèi)指令之間的數(shù)據(jù)依賴關(guān)系,并且利用偽相關(guān)檢測算法進行寄存器重新分配,避免臨時寄存器的復(fù)用帶來數(shù)據(jù)間的偽相關(guān)。
[0047]數(shù)據(jù)依賴是指語句之間存在數(shù)據(jù)約束關(guān)系,如果兩個運算操作之間無重復(fù)使用的變量,或僅連續(xù)讀取同一個變量,那么執(zhí)行結(jié)果與它們的執(zhí)行順序無關(guān),如果相關(guān)則這兩個運算操作之間就被認定為存在數(shù)據(jù)約束關(guān)系。數(shù)據(jù)依賴關(guān)系包括:寫后寫、寫后讀、讀后寫以及存儲依賴四種。匯編級數(shù)據(jù)依賴圖就是為了描述匯編級基本塊內(nèi)指令之間的這四種數(shù)據(jù)依賴關(guān)系。
[0048]ADDG 是一個有向無環(huán)圖(Directed Acyclic Graph, DAG)。在 ADDG 中,G (ADDG) = (V (G),E (G),Φ (G)),其中V (G)是節(jié)點集合,E (G)是邊集合,Φ (G)是關(guān)聯(lián)函數(shù)。
[0049]節(jié)點集合V (G) = Iv1, V2, Vf vn},其中Vi與匯編級基本塊內(nèi)的指令呈--映射關(guān)系
并被其屬性刻畫,Vi的出度(out-degree)和入度(in-degree)均不超過當前指令使用寄存器的數(shù)目。
[0050]邊集合E(G) = R1, e2, e^“ej ,若取 efKv」,vk> | Vj, vk e V (G)},則 Oi 是一條以 Vj為初節(jié)點,以Vk為終節(jié)點的有向邊,它描述了 Vk之間存在一種或多種數(shù)據(jù)依賴關(guān)系。同時,E(G)中邊元素的有向性說明了初節(jié)點,終節(jié)點在執(zhí)行順序上的唯一性,如果多個邊元素以及邊的數(shù)據(jù)依賴關(guān)系屬性可組成Vm — Vn的一條通路或者路徑,則vm,vn可到達任意兩節(jié)點之間;如果不可到達,則說明它們可以以任意順序被執(zhí)行。
[0051]關(guān)聯(lián)函數(shù)Φ (G)描述了邊與節(jié)點之間的關(guān)聯(lián)關(guān)系E — VXV,本發(fā)明實施例中V(G)內(nèi)各節(jié)點元素之間至多存在一條邊,因此,Φ (G)是單映射的,即ADDG任意兩節(jié)點之間不存在無重復(fù)邊。
[0052]表1為本發(fā)明建立ADDG時所用到的數(shù)據(jù)結(jié)構(gòu)。其中,結(jié)構(gòu)體VexPos對ADDG中的節(jié)點的位置進行了定義,Lidx為遍歷語句行的迭代器,F(xiàn)idx為遍歷文件的迭代器;結(jié)構(gòu)體VexNode對節(jié)點集合V (G)進行了定義,Firstln_為連接節(jié)點的第一條入邊,F(xiàn)irstOut_為連接節(jié)點的第一條出邊;結(jié)構(gòu)體ArcBox定義了邊集合E(G), HeadVex與TailVex分別為一條邊的初節(jié)點和終節(jié)點,Id定義了邊屬性,PathId用于標記邊對應(yīng)的通路,Correlation數(shù)組存儲對應(yīng)邊描述的全部依賴關(guān)系,HLink指針用于指向下一條與當前邊共用相同初節(jié)點的下一條邊,而TLink則指向共用相同終節(jié)點的下一條邊;結(jié)構(gòu)體Graph定義了 F1DG的結(jié)構(gòu),vector容器VeXN0de_存儲ADDG,BlockNode則存儲后續(xù)的匯編級控制流圖。
[0053]表1
[0054]
【權(quán)利要求】
1.一種匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,包括以下步驟: 構(gòu)建匯編級數(shù)據(jù)依賴圖ADDG,判斷、分析并描述匯編級寄存器內(nèi)指令之間的數(shù)據(jù)依賴關(guān)系,并且利用偽相關(guān)檢測算法進行寄存器重新分配,避免臨時寄存器的復(fù)用帶來數(shù)據(jù)間的偽相關(guān);以及 構(gòu)建匯編級控制依賴圖ACFG,控制數(shù)據(jù)依賴分析,并添加控制依賴圖CDG中刪除冗余信息的特性來輔助后續(xù)調(diào)度,構(gòu)建基于多叉樹結(jié)構(gòu)的謂詞分析方法,通過遍歷控制流圖,跨基本塊的分析條件判斷相關(guān)指令間的數(shù)據(jù)依賴關(guān)系來完成謂詞分析;以及 構(gòu)建匯編級程序調(diào)用圖APCG,組織管理全局源文件間的關(guān)系; 所述APCG中每個節(jié)點對應(yīng)一個所述ACFG,所述ACFG中每個節(jié)點可映射到一個匯編級基本塊,所述ACFG中每個節(jié)點對應(yīng)一個獨立的ADDG。
2.如權(quán)利要求1所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述ADDG包括數(shù)據(jù)依賴檢測算法、ADDG創(chuàng)建算法以及所述偽相關(guān)檢測算法,其中, 所述數(shù)據(jù)依賴檢測算法用于判斷兩條指令之間為何種所述數(shù)據(jù)依賴關(guān)系; 所述ADDG創(chuàng)建算法反映了匯編級基本塊內(nèi)全部指令之間為何種所述數(shù)據(jù)依賴關(guān)系,并表現(xiàn)出來; 所述偽相關(guān)檢測算法用于寄存器重新分配,避免偽相關(guān)帶來的數(shù)據(jù)依賴關(guān)系。
3.如權(quán)利要求1或2所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述ADDG是一個有向無環(huán)圖DAG。
4.如權(quán)利要求1所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述ACFG是一個有向有環(huán)圖DCG。
5.如權(quán)利要求1所述的如權(quán)利要求1所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述構(gòu)建基于多叉樹結(jié)構(gòu)的謂詞分析方法是通過遍歷控制流圖,跨基本塊的分析條件判斷相關(guān)指令之間的數(shù)據(jù)依賴關(guān)系來完成謂詞分析。
6.如權(quán)利要求1或2所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述寄存器重新分配包括以下步驟: 函數(shù)??蚣芊治?,首先分析程序的??蚣?,并統(tǒng)計函數(shù)內(nèi)即將用到的同類寄存器;以及 路徑分析,分析后文將介紹的ACFG統(tǒng)計當前匯編級基本塊的全部前驅(qū)動點對同類寄存器的使用情況;以及 判斷所述路徑分析中同類寄存器是否全部被使用。
7.如權(quán)利要求6所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述函數(shù)??蚣芊治鲇糜诒4婧瘮?shù)內(nèi)使用到的臨時寄存器。
8.如權(quán)利要求6所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,若所述路徑分析中同類寄存器全部被使用,則判斷修改棧結(jié)構(gòu)時導(dǎo)致的指令帶來的影響是否小于對依賴關(guān)系的減少。
9.如權(quán)利要求6所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,若所述路徑分析中同類寄存器未全部被使用,則任意選擇一個未使用的寄存器進行重新分配。
10.如權(quán)利要求8所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,若所述修改棧結(jié)構(gòu)時導(dǎo)致的指令帶來的影響小于對依賴關(guān)系的減少,則重新進行分配,否則放棄分配。
11.如權(quán)利要求1所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,構(gòu)建所述APCG的步驟包括: 前端分析過程中收集全部的函數(shù),并創(chuàng)建所述APCG的點集合;以及順序分析點集元素對應(yīng)的匯編指令片段,分析其中的函數(shù)調(diào)用指令目標地址,并在點元素之間添加邊;以及 生成未經(jīng)邊冗余刪除的APCG。
12.如權(quán)利要求1或11所述的匯編級跨文件調(diào)度框架的構(gòu)建方法,其特征在于,所述APCG 是一個 DCG。
【文檔編號】G06F9/45GK103645930SQ201310697997
【公開日】2014年3月19日 申請日期:2013年12月18日 優(yōu)先權(quán)日:2013年12月18日
【發(fā)明者】朱浩, 彭楚, 王東輝, 洪纓 申請人:中國科學(xué)院聲學(xué)研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
巢湖市| 日照市| 阳原县| 巴彦淖尔市| 正阳县| 西青区| 札达县| 海兴县| 海原县| 清镇市| 沙湾县| 洪洞县| 武冈市| 和顺县| 阳泉市| 惠州市| 达日县| 新民市| 浦江县| 广东省| 镇宁| 旌德县| 宜君县| 红桥区| 峨山| 邻水| 油尖旺区| 黄浦区| 江永县| 福建省| 刚察县| 赣榆县| 紫金县| 宝应县| 英山县| 丰都县| 夏河县| 长乐市| 嵊州市| 五峰| 咸宁市|