專利名稱:一種計算機程序的優(yōu)化方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機程序,尤其涉及一種計算機程序的優(yōu)化方法及系統(tǒng)。
背景技術(shù):
計算機系統(tǒng)中運行的程序通常是使用高級語言編寫,經(jīng)編譯器翻譯和優(yōu)化得到的 結(jié)果。對程序的優(yōu)化處理效果決定了程序在計算機系統(tǒng)上的運行性能。使用有些語言(比 如等)編寫的程序需要在程序運行期間對其進行翻譯和優(yōu)化。此時優(yōu)化方法本 身的執(zhí)行效率也會影響到整個程序的運行時間。因此,計算機系統(tǒng)中需要運行效率高且優(yōu) 化效果好的優(yōu)化方法。標(biāo)量優(yōu)化是相對于并行優(yōu)化(包括指令級、數(shù)據(jù)級、線程級等)的一類優(yōu)化技術(shù)。 常見的很多優(yōu)化,比如公共子表達式消除、循環(huán)不變代碼移動、常數(shù)傳播、復(fù)制傳播、強度削 弱、部分冗余消除和死代碼消除等都屬于標(biāo)量優(yōu)化。它們都具有共同的優(yōu)化目標(biāo)減少程序 中的計算數(shù)量和降低計算強度,從而提高程序的執(zhí)行效率。各種優(yōu)化技術(shù)通常都是工作在程序的某種中間表示上的。傳統(tǒng)的標(biāo)量優(yōu)化技術(shù)使 用普通的命令式語言作為中間表示,優(yōu)化中需要的各種屬性信息由數(shù)據(jù)流分析方法計算得 到,運行效率較低。靜態(tài)單賦值(Static Single Assignment, SSA)形式是命令式語言的一 種特殊形式,要求每個變量在程序中只有一個被賦值(定義)的語句,且一個變量的所有使 用語句都被該變量的定義語句所支配,即從程序入口出到達每個使用語句的所有控制流路 徑都經(jīng)過該變量的定義語句。將一個程序變換為靜態(tài)單賦值形式需要對變量進行換名和在 適當(dāng)?shù)暮喜⒐?jié)點處(假設(shè)有m條入邊)插入特殊的語句,phi節(jié)點x_0 = phi(x_l,…,x_ m)來合并不同路徑的值。其語義是當(dāng)程序執(zhí)行路徑沿第i個前驅(qū)進入該phi節(jié)點所在的 程序節(jié)點,則x_0 = x_i。靜態(tài)單賦值形式的程序中的所有變量的定義-使用關(guān)系都被顯式表示出來,通過 追溯變量的賦值語句即可得到數(shù)據(jù)流信息。因此,采用靜態(tài)單賦值形式作為中間表示,使很 多傳統(tǒng)的標(biāo)量優(yōu)化技術(shù)得到了簡化,運行效率更高,實現(xiàn)也更容易。美國專利號為6026241 和6128775的兩個發(fā)明分別為采用靜態(tài)單賦值形式進行部分冗余消除和寄存器提升的兩 個優(yōu)化方法。美國專利號為6301704的發(fā)明描述了一種采用靜態(tài)單賦值形式作為中間表示 進行多種標(biāo)量優(yōu)化的方法和系統(tǒng)。然而,上述采用靜態(tài)單賦值的優(yōu)化方法都是基于“語法”等值關(guān)系的優(yōu)化方法,即 只能消除語法上完全相同的表達式間的冗余計算或訪存語句,優(yōu)化能力受到很大限制。通 常需要同時采用多種輔助方法(值編號、表達式重結(jié)合等)對程序進行一系列預(yù)處理以盡 量增加標(biāo)量優(yōu)化方法的優(yōu)化機會。比這種組合方案更徹底的解決方案是采用基于“語義”等 值關(guān)系的優(yōu)化方法。但現(xiàn)有的基于“語義”等值的方法采用的仍然是傳統(tǒng)的非靜態(tài)單賦值 形式的中間表示,通過構(gòu)造一個龐大的值流圖并在其上進行數(shù)據(jù)流分析來計算如何對輸入 程序進行變換,運行效率非常低下,因而無法實際應(yīng)用。如何將“語義”等值關(guān)系顯式表示 在程序中間表示中以提高優(yōu)化方法的效率仍然沒有得到解決。
發(fā)明內(nèi)容
為了解決上述的技術(shù)問題,提供了一種計算機程序的優(yōu)化方法及系統(tǒng),其目的在 于,利用“稀疏值流圖”(Sparse Value Flow Graph, SVFG)形式,將程序中的“語義”等值關(guān) 系顯式包含在程序的中間表示中,并在此基礎(chǔ)上進行高效率的標(biāo)量優(yōu)化以實現(xiàn)效率高且優(yōu) 化效果更好的優(yōu)化方法。本發(fā)明提供了一種計算機程序的優(yōu)化方法,包括步驟1,通過值編號分析計算得到每個變量和表達式的值編號;步驟2,將靜態(tài)單賦值形式的計算機程序轉(zhuǎn)換為半稀疏值流圖形式的計算機程 序;步驟3,計算半稀疏值流圖形式的計算機程序進行標(biāo)量優(yōu)化所需的初始屬性;如 果初始屬性已經(jīng)包含所有所需優(yōu)化信息則執(zhí)行步驟4,否則擴展半稀疏值流圖形式的計算 機程序為稀疏值流圖形式的計算機程序,并計算進行標(biāo)量優(yōu)化所需的屬性,直到所有所需 屬性計算完畢,執(zhí)行步驟4;步驟4,根據(jù)計算得到的屬性對半稀疏值流圖形式的計算機程序或稀疏值流圖形 式的計算機程序進行程序變換以優(yōu)化計算機程序;半稀疏值流圖形式的計算機程序中所有的值傳輸流都不能越過與其“語義”等值 的計算,具有相同值編號的程序節(jié)點間的全局等值關(guān)系被連接起來;稀疏值流圖形式的計算機程序中所有的值傳輸流都不能越過與其“語義”等值的 計算,所有的全局等值關(guān)系都必須被一值傳輸流所連接。步驟2中,半稀疏值流圖為每個值編號插入phi節(jié)點并使用靜態(tài)單賦值的變量將 在不同位置的同一個值編號連接起來。步驟3中,半稀疏值流圖形式的計算機程序的變量作為半稀疏值流圖的節(jié)點;稀 疏值流圖形式的計算機程序的變量作為稀疏值流圖的節(jié)點;半稀疏值流圖或稀疏值流圖的 邊由變量引用關(guān)系建立,半稀疏值流圖形式的計算機程序或稀疏值流圖的形式的計算機程 序的中間表示是表示等值關(guān)系的值流圖;進行標(biāo)量優(yōu)化所需的屬性附加在半稀疏值流圖形 式的計算機程序或稀疏值流圖的形式的計算機程序的變量上。半稀疏值流圖或稀疏值流圖是一個邊標(biāo)記的有向圖Gs = (Ns, Es,V5,VE),包含開始節(jié)點集合V5包含所有存在的值編號對應(yīng)的偽變量(1 ;結(jié)束節(jié)點集合VE包含所有存在的值編號對應(yīng)的偽變量£ 1 ;節(jié)點集合Ns包含所有開始節(jié)點、結(jié)束節(jié)點和程序中所有變量的集合;邊集合Es為包含三元組(x,i,y)的集合,其中x、y為節(jié)點,i為自然數(shù)。步驟2中,對于靜態(tài)單賦值形式的計算機程序中出現(xiàn)的每個值編號t執(zhí)行下列步 驟步驟201,對每個程序節(jié)點n G J(t)-{Def(x) x G V A vl[x] = 4,創(chuàng)建變量叉, 并設(shè)置vl[x] = t ;然后向每個程序節(jié)點n中插入phi節(jié)點x=cp(x,...,x);步驟202,對于每個程序節(jié)點
中插入 phi 節(jié)點 步驟203,將ζ 1壓入棧P ;步驟204,調(diào)用函數(shù) Search(t,n);步驟205,刪除未使用的phi節(jié)點; 步驟204包括步驟2041,令h =棧P的高度;步驟2042,如果η為靜態(tài)單賦值形式的計算機程序的合并節(jié)點,則將η中所有值編 號為t的phi節(jié)點的結(jié)果變量壓入棧P ;步驟2043,否則,如果η為賦值語句,且其結(jié)果變量的值編號為t,將η的右側(cè)表達 式替換為棧P的棧頂變量,并將η的左側(cè)結(jié)果變量壓入棧P ;步驟2044,對于succ (η)中的每個合并節(jié)點nl,將nl中的每個phi節(jié)點的對應(yīng)于 節(jié)點η的值編號為t的變量替換為棧P的棧頂變量;步驟2045,對每個 children (η)中的節(jié)點 η,,執(zhí)行 Search (t,η,);步驟2046,如果棧P的高度大于h,將多出的變量彈出;其中,DF(S)表示所有S中節(jié)點的支配邊界的并集,S表示任意程序節(jié)點集合; DF+(S)表示S的迭代支配邊界;J(t) = {n|ne DF+(J0(t)) Λ t的定義節(jié)點嚴格支配η}, 對于一個值編號t e V,用JtlU)表示包含所有需要使用t的值的程序節(jié)點集合,V = {V (χ) χ e V}表示所有變量的值編號集合;Def(X)表示變量χ的定值語句;dn(t)表示值 編號t的定義節(jié)點,在該節(jié)點執(zhí)行之后,具有值編號t的一個表達式被計算;Vl為值編號算 法計算得到的每個變量的值編號數(shù)組;ζ 1表示一個恰好在t的定義節(jié)點dn (t)之后被賦值 的值編號為t的偽變量;ε tn表示一個在程序節(jié)點η e DF({dn(t)})處被一個偽phi節(jié)點 賦值的值編號為t的偽變量;P是一個變量棧,用于構(gòu)造值傳輸流;succ (η)表示程序節(jié)點 η e N在程序控制流圖中的所有后繼節(jié)點的集合;children (η)表示程序節(jié)點η e N在支配 樹上所有子節(jié)點的集合。三元組(X,i,y)表示一條標(biāo)記的邊;三元組(X,i,y) e ES表示一條從變量χ到 變量y的值傳輸流。步驟3中,首先按如下公式計算半移動向下安全屬性 其中,SUCCna(X)= {(i,Def (y)) | (x, i, y) e Es Λ desc(De f(x), Def (y))}, 對于任意程序節(jié)點Ii1和n2 e N,謂詞desc (叫,n2) = true當(dāng)且僅當(dāng)Ii1 = n2或Ii1在控制 流G的以開始節(jié)點為根節(jié)點的深度優(yōu)先搜索樹上是Ii2的子孫節(jié)點;SUCCna(X)中的每個 序偶(i,n) e ω XN表示稀疏值流圖節(jié)點χ的值沿一條值傳輸流經(jīng)過η的第i個前驅(qū) 節(jié)點,傳入至少一個在節(jié)點η處定值的稀疏值流圖節(jié)點,ω是自然數(shù)集合,N是所有程序 節(jié)點集合;Succv(x, i, η) = {y (χ, i,y) e Es Λ Def (y) = η}為包含所有對應(yīng)于給定序 偶(i,η) e succna(x)的在節(jié)點η處定值的變量集合;局部屬性comp(X)為真當(dāng)且僅當(dāng) Def (x) e Na,Na是賦值語句組成的程序節(jié)點集合。
步驟4中,對于值編號集合{t 11 e B且smds* }中的值編號進行擴展,包括步驟401,創(chuàng)建一個新的變量x并設(shè)置vl [x] = t ;步驟402,向dn⑴中插入phi節(jié)點x =小(4 “,. . .,4 tm),其中ti為x對應(yīng)于 第i條入邊的值編號;步驟403,將半稀疏值流圖形式的計算機程序中所有(1替換為x ;步驟404,對每個值編號(”執(zhí)行步驟201-步驟205 ;其中,B = {t|dn(t)為半稀疏值流圖形式的計算機程序合并節(jié)點,且其中不包含 結(jié)果變量的值編號為t的phi節(jié)點} ;smds*表示半移動向下安全屬性方程組的最大解。步驟3中,按照如下公式計算移動向下安全屬性 按照如下公式計算向上安全屬性 其中succn(x) = {(i,Def(y)) | (x, i,y) G Es};公式中的 md s* 表示移動向下安 全屬性方程組的最大解;predv(x) = {y|(y,i,x) G Es}為x在稀疏值流圖上所有前驅(qū)節(jié)點 的集合。步驟4中,按照下述集合選取插入計算的位置信息 其中cus*表示向上安全屬性方程組的最大解;步驟4中,進行插入計算后還清除 無用的代碼。本發(fā)明提供了一種計算機程序的優(yōu)化系統(tǒng),包括值編號計算模塊,用于通過值編號分析計算得到每個變量和表達式的值編號;計算機程序優(yōu)化模塊,將靜態(tài)單賦值形式的計算機程序轉(zhuǎn)換為半稀疏值流圖形式 的計算機程序;計算半稀疏值流圖形式的計算機程序進行標(biāo)量優(yōu)化所需的初始屬性;如果 初始屬性已經(jīng)包含所有所需優(yōu)化信息則根據(jù)計算得到的屬性對半稀疏值流圖形式的計算 機程序或稀疏值流圖形式的計算機程序進行程序變換以優(yōu)化計算機程序,否則擴展半稀疏 值流圖形式的計算機程序為稀疏值流圖形式的計算機程序,并計算進行標(biāo)量優(yōu)化所需的屬 性,直到所有所需屬性計算完畢,根據(jù)計算得到的屬性對半稀疏值流圖形式的計算機程序 或稀疏值流圖形式的計算機程序進行程序變換以優(yōu)化計算機程序;半稀疏值流圖形式的計算機程序中所有的值傳輸流都不能越過與其“語義”等值 的計算,具有相同值編號的程序節(jié)點間的全局等值關(guān)系被連接起來;
稀疏值流圖形式的計算機程序中所有的值傳輸流都不能越過與其“語義”等值的 計算,所有的全局等值關(guān)系都必須被一值傳輸流所連接。半稀疏值流圖為每個值編號插入phi節(jié)點并使用靜態(tài)單賦值的變量將在不同位 置的同一個值編號連接起來。步驟3中,半稀疏值流圖形式的計算機程序的變量作為半稀疏值流圖的節(jié)點;稀 疏值流圖形式的計算機程序的變量作為稀疏值流圖的節(jié)點;半稀疏值流圖或稀疏值流圖的 邊由變量引用關(guān)系建立,半稀疏值流圖形式的計算機程序或稀疏值流圖的形式的計算機程 序的中間表示是表示等值關(guān)系的值流圖;進行標(biāo)量優(yōu)化所需的屬性附加在半稀疏值流圖形 式的計算機程序或稀疏值流圖的形式的計算機程序的變量上。半稀疏值流圖或稀疏值流圖是一個邊標(biāo)記的有向圖Gs = (Ns, Es,V5,VE),包含開始節(jié)點集合V5包含所有存在的值編號對應(yīng)的偽變量(1 ;結(jié)束節(jié)點集合VE包含所有存在的值編號對應(yīng)的偽變量£ 1 ;節(jié)點集合Ns包含所有開始節(jié)點、結(jié)束節(jié)點和程序中所有變量的集合;邊集合Es為包含三元組(x,i,y)的集合,其中x、y為節(jié)點,i為自然數(shù)。對于靜態(tài)單賦值形式的計算機程序中出現(xiàn)的每個值編號t,計算機程序優(yōu)化模塊 執(zhí)行下述處理對每個程序節(jié)點
創(chuàng)建變量x,并設(shè)置 vl[x] = t ;然后向每個程序節(jié)點n中插入phi節(jié)點x = cp(x,...,x);對于每個程序節(jié)點
向n中插入 phi 節(jié)點stn =cp(stn,…“;將(1壓入棧P ;調(diào)用函數(shù)Search (t,n);刪除未使用的phi節(jié)點;調(diào)用函數(shù)Search (t,n)包括令h=棧P的高度;如果n為靜態(tài)單賦值形式的計算機程序的合并節(jié)點,則將n中所有值編號為t的 phi節(jié)點的結(jié)果變量壓入棧P;否則,如果n為賦值語句,且其結(jié)果變量的值編號為t,將n的右側(cè)表達式替換為棧 P的棧頂變量,并將n的左側(cè)結(jié)果變量壓入棧P ;對于SUCC(n)中的每個合并節(jié)點nl,將nl中的每個phi節(jié)點的對應(yīng)于節(jié)點n的值 編號為t的變量替換為棧P的棧頂變量;對每個 children (n)中的節(jié)點 n,,執(zhí)行 Search (t,n,);如果棧P的高度大于h,將多出的變量彈出;其中,DF(S)表示所有S中節(jié)點的支配邊界的并集,S表示任意程序節(jié)點集合; DF+(S)表示S的迭代支配邊界;J(t) = {n|n G DF+(J0(t)) A t的定義節(jié)點嚴格支配n}, 對于一個值編號t e V,用Jjt)表示包含所有需要t的值的節(jié)點集合,V = {V(x) x g V} 表示所有變量的值編號集合;Def(x)表示變量x的定值語句;dn(t)表示值編號t的定義節(jié) 點,在該節(jié)點執(zhí)行之后,具有值編號t的一個表達式被計算;vl為值編號算法計算得到的每 個變量的值編號數(shù)組;(1表示一個恰好在t的定義節(jié)點dn (t)之后被賦值的值編號為t的偽變量;〃n表示一個在程序節(jié)點n e DF({dn(t)})處被一個偽phi節(jié)點賦值的值編號 為t的偽變量;P是一個變量棧,用于構(gòu)造值傳輸流;succOi)表示程序節(jié)點n e N在程序控 制流圖中的所有后繼節(jié)點的集合;children (n)表示程序節(jié)點n e N在支配樹上所有子節(jié) 點的集合。三元組(x,i,y)表示一條標(biāo)記的邊;三元組(x,i, y) G Es表示一條從變量x到 變量y的值傳輸流。計算機程序優(yōu)化模塊按如下公式計算半移動向下安全屬性 其中,
對于 任意程序節(jié)點叫和n2 G N,謂詞desc (ni,n2) = true當(dāng)且僅當(dāng)叫=n2或叫在控制流G的 以開始節(jié)點為根節(jié)點的深度優(yōu)先搜索樹上是 的子孫節(jié)點;SUCCna(X)中的每個序偶(i, n) G XN表示稀疏值流圖節(jié)點x的值沿一條值傳輸流經(jīng)過n的第i個前驅(qū)節(jié)點,傳入至 少一個在節(jié)點n處定值的稀疏值流圖節(jié)點,《是自然數(shù)集合,N是程序節(jié)點集合;SUCCv(x, i,n) = {y (x,i,y) G Es A Def(y) = n}為包含所有對應(yīng)于給定序偶(i,n) G succna(x) 的在節(jié)點n處定值的變量集合;局部屬性COmp(x)為真當(dāng)且僅當(dāng)De f(x) G Na,Na是賦值 語句組成的程序節(jié)點集合。計算機程序優(yōu)化模塊對值編號集合{t|t e B且smds^t)}中的值編號進行擴 展,包括創(chuàng)建一個新的變量x并設(shè)置vl [x] = t ;向dn(t)中插入phi節(jié)點x= (HC1,...,O,其中ti為x對應(yīng)于第i條入邊 的值編號;將半稀疏值流圖形式的計算機程序中所有(1替換為x ;步驟404,對每個值編號(”執(zhí)行步驟201-步驟205 ;其中,B = {t|dn(t)為半稀疏值流圖形式的計算機程序合并節(jié)點,且其中不包含 結(jié)果變量的值編號為t的phi節(jié)點} ;smds*表示半移動向下安全屬性方程組的最大解。計算機程序優(yōu)化模塊按照如下公式計算移動向下安全屬性 按照如下公式計算向上安全屬性 其中succn(x) = {(i,Def(y)) | (x, i,y) G Es};公式中的 md s* 表示移動向下安 全屬性方程組的最大解;predv(x) = {y|(y,i,x) G Es}為x在稀疏值流圖上所有前驅(qū)節(jié)點 的集合。計算機程序優(yōu)化模塊按照下述集合選取插入計算的位置信息 其中cus*表示向上安全屬性方程組的最大解;進行插入計算后還清除無用的代碼。本發(fā)明能夠提高程序優(yōu)化的效率,并且能夠?qū)崿F(xiàn)更好的優(yōu)化效果。
圖1為一個已轉(zhuǎn)換為靜態(tài)單賦值形式的示例程序,其中包含幾種不滿足SVR;形式 約束條件的幾種情況;圖2為圖1程序轉(zhuǎn)換為SVFG形式后的結(jié)果;圖3為轉(zhuǎn)換為半SVFG形式前的示例程序;圖4為圖3程序中變量的值編號結(jié)構(gòu)5為圖3程序轉(zhuǎn)換為半SVFG形式后的結(jié)果;圖6為圖5中的半SVFG形式根據(jù)屬性計算按需擴展后的結(jié)果;圖7為圖6程序中變量的值編號結(jié)構(gòu)圖;圖8為插入計算并清除無用代碼后的最終優(yōu)化結(jié)果。
具體實施例方式現(xiàn)有的基于“語義”等值的標(biāo)量優(yōu)化方法仍然采用傳統(tǒng)的非靜態(tài)單賦值形式的中 間表示,通過構(gòu)造一個龐大的值流圖并在其上進行數(shù)據(jù)流分析來計算如何對輸入程序進行 變換,運行效率非常低下,因而無法實際應(yīng)用。本發(fā)明公開了一種使用稀疏值流圖作為程序 中間表示的標(biāo)量優(yōu)化方法,采用一種新的程序中間表示形式“稀疏值流圖”形式,將程序中 的“語義”等值關(guān)系顯式包含在程序的中間表示中,并在此基礎(chǔ)上進行高效率的標(biāo)量優(yōu)化以 實現(xiàn)效率高且優(yōu)化效果更好的優(yōu)化方法。其中稀疏值流圖形式是靜態(tài)單賦值形式的擴展形 式,能夠直接應(yīng)用于現(xiàn)有的基于靜態(tài)單賦值中間表示的編譯器中。本發(fā)明提供了一種表示程序中“語義”等值關(guān)系的方法,所述表示法為靜態(tài)單賦值 形式的擴展形式,并且滿足性質(zhì)(1)所有的值傳輸流都不能越過與其“語義”等值的計算;(2)所有的全局等值關(guān)系都必須被某個值傳輸流所連接。本發(fā)明提供的程序優(yōu)化方法包含以下處理步驟步驟一使用值編號分析計算得到每個變量和表達式的值編號;
步驟二 構(gòu)造半稀疏值流圖形式;步驟三計算標(biāo)量優(yōu)化所需的初始屬性;步驟四如果初始屬性已經(jīng)包含所有所需優(yōu)化信息則執(zhí)行步驟五,否則根據(jù)需要 擴展半稀疏值流圖形式,并計算新的所需屬性,直到所有所需屬性計算完畢;步驟五根據(jù)計算得到的屬性進行程序變換以實現(xiàn)對程序的優(yōu)化。步驟二中構(gòu)造半稀疏值流圖為每個值編號插入phi節(jié)點并使用靜態(tài)單賦值的變 量將同一個值編號在不同位置的出現(xiàn)連接起來。程序中的變量作為SVFG的節(jié)點,SVFG的邊由變量引用關(guān)系建立,程序的中間表示 同時也是表示等值關(guān)系的值流圖。優(yōu)化所需屬性附加在每個程序變量上。步驟三和步驟四中計算的smds屬性通過忽略程序控制流圖中的回邊而消除了循 環(huán)定義的可能性,從而能夠被按順序計算得到。步驟五計算得到需要插入計算的位置信息,三元組(x,i,n)表示向程序節(jié)點n的 第i條入邊插入用于計算與x相等的最少的一組簡單語句(每條語句中只包含一個計算), 然后將n中對應(yīng)于第i條入邊的所有x替換為插入的最后一條語句的結(jié)果變量。下面將首先定義SVFG形式,然后介紹以上每個步驟的具體實現(xiàn)方法。SVR;具有與值流圖相同的表示等值關(guān)系的能力,但通過利用靜態(tài)單賦值形式的性 質(zhì),需要的圖節(jié)點數(shù)量大大減少。SVR;形式是一種靜態(tài)單賦值形式的擴展,等值關(guān)系被顯式 包含在了 SVR;形式的程序中,使得優(yōu)化算法對等值關(guān)系的使用變得更加方便。一個程序是 SVFG形式的當(dāng)且僅當(dāng)下面三個條件同時滿足1)該程序為靜態(tài)單賦值形式;2)所有的值傳輸流都不能越過與其“語義”等值的計算;3)所有的全局等值關(guān)系都必須被某個值傳輸流所連接。圖1給出了一些不滿足SVR;形式條件的典型例子。令Def (x)表示變量x的定值 語句,對于變量x5,滿足x5在Def(x5)(節(jié)點n6)全局等值于xl在Def (xl)(節(jié)點n3)處 的值并且n6存在于路徑(n3,n4,n5,n6,n7,n8),違反了 SVFG形式的第二個條件。表達式 a+c在n6全局等值于x2在Def (x2)(節(jié)點n4)處的值,但是不存在從n6到n4的值傳輸流, 違反了 SVFG形式的第三個條件。同樣,對于表達式a+e,n5,n6和xl或和x3也違反了條件 三。一個容易被忽略的情況是表達式b+d,n9,nlO和x8。需要注意的是b+d在n9全局等 值于x8在nlO處的值。圖2為圖1程序轉(zhuǎn)換為SVR;形式后的結(jié)果。所有違反條件的情況 都通過在適當(dāng)?shù)奈恢貌迦雙hi節(jié)點和修改賦值語句以建立值傳輸流而被消除。當(dāng)一個程序被轉(zhuǎn)換為SVR;形式后,程序中的全局等值信息將通過變量引用顯式 表示出來,其中一定不存在可被安全消除的冗余計算。冗余消除優(yōu)化問題被轉(zhuǎn)換為尋找能 夠最大程度重用計算結(jié)果的安全的計算插入位置問題。為了實現(xiàn)這個目標(biāo),首先要將程序 轉(zhuǎn)換成一個更易于構(gòu)造的限制條件更少的半SVFG形式。半SVFG形式放寬了 SVFG形式的 條件3)。它只要求具有相同值編號的程序節(jié)點間的全局等值關(guān)系被連接起來,不同值編號 之間的全局等值關(guān)系則不一定要連接在一起。將一個SSA形式的程序轉(zhuǎn)換為半SVR;形式的程序首先要計算每個變量的值編號。 目前已經(jīng)有許多具有不同精確度和運行效率的值編號分析方法。本發(fā)明可采用任意一種 基于靜態(tài)單賦值形式的值編號分析方法的結(jié)果。圖3為一個靜態(tài)單賦值形式的示例程序,圖4為采用一種完全值編號分析方法得到的分析結(jié)果,以有向無環(huán)圖的形式表示出不同值 編號間的結(jié)構(gòu)關(guān)系。在此基礎(chǔ)上,只需要在適當(dāng)?shù)奈恢貌迦雙hi節(jié)點并用變量將所有具有 相同值編號的變量的定義語句(賦值語句或Phi節(jié)點)連接在一起從而形成它們之間的值 傳輸流。令符號V = {V(x) x G V}表示所有變量的值編號集合。對于一個值編號t G V, 用Kt)表示包含所有需要使用t的值的程序節(jié)點集合。一個程序節(jié)點n e N的支配邊界 (dominance frontier)是一個程序節(jié)點集合,其中所有的節(jié)點n'滿足條件n支配n'的 一個前驅(qū)節(jié)點但不嚴格支配n'。對于任意程序節(jié)點集合S,用符號DF(S)表示所有S中節(jié) 點的支配邊界的并集。用DF+(S)表示S的迭代支配邊界,即下面的遞增節(jié)點集合序列的極 限D(zhuǎn)Fi = DF (S);DFi+1 = DFi U F(DFi);對于一個值編號t G V,需要為t插入phi節(jié)點的所有程序節(jié)點的集合為
的定義節(jié)點嚴格支配 n}。其中條件“t的定義節(jié)點嚴格支配n”是用來確保t在n的所有前驅(qū)節(jié)點處都是有 意義的。下面首先列出構(gòu)造半SVR;形式的過程中用到的一些符號及其含義-Def(x)表示變量x的定值語句(在靜態(tài)單賦值形式的程序中,該定值語句是唯一 的)-dn(t)表示值編號t的定義節(jié)點,即一個程序節(jié)點,滿足恰好在該節(jié)點執(zhí)行之后, 具有值編號t的一個表達式可被計算。比如程序片段nl:a = f() ;n2:b = g(),則值編號 a+b的定義節(jié)點為n2,因為恰好在n2之后a+b可被計算。-Vl為值編號算法計算得到的每個變量的值編號數(shù)組;- ( 1表示一個恰好在t的定義節(jié)點之后被賦值的值編號為t的偽變量。它只是一 個用于分析的虛擬變量,它的賦值語句并不存在,也不需要真正出現(xiàn)在程序中。表示一個在程序節(jié)點n G DF({dn(t)})處被一個偽phi節(jié)點賦值的值編號 為t的偽變量。它用于標(biāo)記在此之后值編號為t不會再被計算或使用。-S是一個變量棧,用于構(gòu)造值傳輸流。-succ(n)表示程序節(jié)點n G N在程序控制流圖中的所有后繼節(jié)點的集合。-children (n)表示程序節(jié)點n G N在支配樹上所有子節(jié)點的集合。下面是構(gòu)造半SVFG形式的流程1.對于程序中出現(xiàn)的每個值編號t,執(zhí)行下列操作;2.對每個程序節(jié)點n G J (t) - {Def (x) | x為值編號為t的變量},創(chuàng)建變量x,并設(shè) 置vl[x] : = t;然后向n中插入phi節(jié)點x = (p(x,...,x);3.對于每個節(jié)點
向 n 中插入phi
節(jié)點 4.將4 1壓入棧S;5.調(diào)用 Search (t,n);6.刪除未使用的phi節(jié)點;Search (t,n)過程執(zhí)行下列操作
1.令h=棧S的高度;2.如果n為程序的合并節(jié)點,則將n中所有值編號為t的phi節(jié)點的結(jié)果變量壓 入棧S;3.否則,如果n為賦值語句,且其結(jié)果變量的值編號為t,將n的右側(cè)表達式替換 為S的棧頂變量,并將n的左側(cè)結(jié)果變量壓入S ;4.對于succ(n)中的每個合并節(jié)點nl,將nl中的每個phi節(jié)點的對應(yīng)于節(jié)點n 的值編號為t的變量替換為S的棧頂變量;5.對每個 children (n)中的節(jié)點 n,,執(zhí)行 Search (t,n,);6.如果S的高度大于h,將多出的變量(節(jié)點n中遇到的變量)彈出。圖5展示了一個由該方法變換得到的半SVR;形式的程序(包含偽變量)。注意其 中(5,n9, n10與x3仍然違反了 SVFG形式的條件三,但是卻滿足半SVFG形式的定義。由于在一個SSA形式的程序中,每個變量恰好有且僅有一個定值語句(賦值語句 或Phi節(jié)點),我們可以用變量來唯一地代表程序中的每一個賦值。一個半SVFG形式程序 的稀疏值流圖是一個邊標(biāo)記的有向圖& = (NS,ES,V5,VE),包含-開始節(jié)點集合V5包含所有存在的值編號對應(yīng)的偽變量(1;-結(jié)束節(jié)點集合VE包含所有存在的值編號對應(yīng)的偽變量£1 ;_節(jié)點集合隊包含所有開始節(jié)點、結(jié)束節(jié)點和程序中所有變量的集合;_邊集合Es為包含三元組(x,i,y)的集合,其中x、y為節(jié)點,i為自然數(shù)。每條標(biāo)記的邊(x,i, y) G Es表示一條從變量x到變量y的值傳輸流,即變量x 的值沿任意一條從Def(x)開始,先到達Def(y)的第i個前驅(qū)節(jié)點后,然后到達Def (y)的 控制流路徑通過賦值語句或phi節(jié)點傳遞到變量y。由于SVFG形式的性質(zhì),所有被相應(yīng)的 控制流路徑穿過的與節(jié)點在等值關(guān)系上與x和y都是無關(guān)的。這相當(dāng)于從一個VFG節(jié)點直 接跳到下一個相關(guān)的VFG節(jié)點,與程序的VFG有著直接的對應(yīng)關(guān)系,因此基于VFG表示法的 優(yōu)化方法能夠幾乎直接被轉(zhuǎn)換為基于SVFG形式的方法。有了半SVFG形式,下一步要為每個SVFG節(jié)點計算一個稱為半移動向下安全的屬 性(smds)。最終的目標(biāo)是要找到所有滿足移動向下安全屬性(mds)的SVR;節(jié)點,其中包括 原程序中存在的和需要進一步擴展得到的。滿足smds屬性的節(jié)點一定滿足mds屬性。因 此在找到所有滿足smds屬性的節(jié)點后通過排除非mds的節(jié)點即可得到所有滿足mds屬性 的SVFG節(jié)點。之所以采用這種間接的方法計算滿足mds屬性的節(jié)點是因為mds屬性不能 被結(jié)構(gòu)化定義,即無法按照一定的順序逐漸構(gòu)造出所有滿足mds屬性的節(jié)點。而適當(dāng)放寬 的smds屬性則滿足這個性質(zhì),能夠從半SVFG開始,先計算得到初始的滿足smds屬性的節(jié) 點,然后在適當(dāng)?shù)奈恢蒙蠑U展半SVFG形式以得到新的滿足smds屬性的節(jié)點,直到所有滿足 smds屬性的節(jié)點都被找到。下面是smds屬性的計算公式 其中集合
Def (y))},對于任意程序節(jié)點H1和n2 e N,謂詞desc(ni,n2) = true當(dāng)且僅當(dāng)Ii1 = n2或Ii1在控制流G的以程序開始節(jié)點為根節(jié)點的DFS樹上是Ii2的子孫節(jié)點。SUCCna(X)中的每個 序偶(i,n) e ω XN表示SVRi節(jié)點χ的值沿某條值傳輸流經(jīng)過η的第i個前驅(qū)節(jié)點,傳入 至少一個在節(jié)點η處定值的SVRi節(jié)點,ω是自然數(shù)集合,N是所有程序節(jié)點集合。succv(x, i,n) = {y (χ, i,y) e Es Λ Def (y) = η}為包含所有對應(yīng)于給定序偶(i,n) e succna(x) 的在節(jié)點η處定值的變量集合。predv (x) = {y (y,i,x) e Ej為χ在SVTO上所有前驅(qū)節(jié) 點的集合。局部屬性Comp(X)為真當(dāng)且僅當(dāng)Def(X) e Na,即變量χ由原程序中的賦值語句 所賦值,Na是賦值語句組成的程序節(jié)點集合。為了擴展半SVFG形式為SVFG形式,需要在適當(dāng)?shù)奈恢眠B接值傳輸流。例如,在圖 5中,對值編號%+bJ在圖中編號為5)進行擴展,該程序即可轉(zhuǎn)換為SVRi形式。值傳輸流 中斷的位置一定發(fā)生在由Phi節(jié)點定義的值編號,因為在由其它節(jié)點(比如函數(shù)調(diào)用或讀 取全局變量等)定義的值編號的定義節(jié)點之前不可能計算得到總與該值編號相等的值。需 要連接的值編號集合為B= {t|dn(t)為程序合并節(jié)點(即包含phi節(jié)點的位置),且其中不包含結(jié)果變 量的值編號為t的phi節(jié)點};下面是為一個給定的值編號t擴展值傳輸流的流程1.創(chuàng)建一個新的變量χ并設(shè)置Vl [χ] = t2.向dn(t)中插入phi節(jié)點χ = Φ(ζ",···,4巧,其中衍為1對應(yīng)于第土條 入邊的值編號3.將程序中所有ζ 1替換為χ4.對每個值編號ζ"執(zhí)行構(gòu)造半SVRi形式的流程1-6步,即為ζ"創(chuàng)建phi節(jié) 點和連接ζ"的每個出現(xiàn)。注意在執(zhí)行該操作的過程中,ζ "有可能為新的值編號。簡單地重復(fù)對新的值編號 進行擴展有可能是一個不會終止的過程。因此基于SVRi形式的優(yōu)化方法要根據(jù)已有分析 結(jié)果,按需進行擴展。由于最終要得到的是所有滿足mds屬性的SVRi節(jié)點,而不滿足smds 屬性的節(jié)點一定不滿足mds屬性,且其前驅(qū)節(jié)點也不會滿足mds屬性。所以,我們只需要對 當(dāng)前半-SVFG中的已滿足smds的節(jié)點進行擴展,即對值編號集合{t 11 e B且smds* ( ζ } 中的值編號采用上述方法進行擴展,smds*表示半移動向下安全屬性方程組的最大解,即一 個變量集合到{true,false}集合的函數(shù),一個變量χ滿足smds屬性,則smdslx) = true, 否則smds*(χ) = false。由于任何程序中滿足smds屬性的節(jié)點數(shù)量是有限的,因此擴展過 程是可終止的。當(dāng)所有滿足smds屬性的節(jié)點得到后,采用下列公式計算mds和向上安全屬 性(cus) 其中mds屬性的計算公式只需要將計算smds的方程組中的succ/ (x)替換為 succn(x) = {(i,Def(y)) | (x,i,y) e Es}。由于去掉了 desc謂詞的限制條件,該方程組會 導(dǎo)致不同節(jié)點的屬性間的循環(huán)依賴,因此無法按順序計算。公式中的mds*表示mds方程組 的最大解。圖6為圖5中的半SVFG形式根據(jù)屬性計算按需擴展后的結(jié)果。此時滿足cus屬 性的SVFG節(jié)點集合為{a7,Xl,. . .,x6,yi,. . .,y8,4 S 4 3,4 8,4 9}。圖7為圖6程序中變 量的值編號結(jié)構(gòu)圖(比圖4增加了擴展過程中產(chǎn)生的8,9,10三個值編號)。最后,下面的集合Insert給出了需要插入計算的位置信息 其中cus*表示cus方程組的最大解。每個三元組(x,i,n) G Insert表示先向程 序節(jié)點n的第i條入邊插入用于計算x的值編號的最少的一組簡單語句(每條語句中只包 含一個計算),然后將n中對應(yīng)于第i條入邊的所有x替換為插入的最后一條語句的結(jié)果 變量。這里“最少的一組”的含義是不插入任何用于計算已經(jīng)計算過的x的值編號的子表 達式的語句,即不重新計算已經(jīng)在一個支配n的第i個前驅(qū)節(jié)點的節(jié)點處計算過的子表達 式的值。這可以通過在一個對支配樹自頂向下的遍歷過程中進行插入計算來實現(xiàn),在該過 程中只需要維護一個為每個值編號保存有效變量的數(shù)組,在需要時即可直接復(fù)用其中的結(jié) 果。由于SVFG形式的程序已經(jīng)把所有可重用的計算結(jié)果通過變量連接在了一起,即已經(jīng)不 存在可安全消除的冗余計算(實際上不包含任何計算語句,只有在適當(dāng)位置插入計算后程 序才能被正確執(zhí)行),因此插入計算之后,只需要清除所有沒有使用到的phi節(jié)點(包括所 有偽phi節(jié)點)即完成了程序優(yōu)化工作。其中清除無用代碼的工作可由現(xiàn)有的死代碼消除 方法完成。根據(jù)上面的公式,示例程序的Insert集合為 對于三元組(4 S 1,n3),需要在n3的第一條入邊插入值編號為1的計算Zl = a0+b0(由圖7可知計算每個值編號的表達式結(jié)構(gòu)),并將n3中phi節(jié)點的第一個參數(shù)由(1 改為Zl。對于Insert集合中的其它五個三元組同樣處理。在清除所有無用節(jié)點(即其值 不會被使用的節(jié)點)后最終得到的程序如圖8所示。本領(lǐng)域的技術(shù)人員在不脫離權(quán)利要求書確定的本發(fā)明的精神和范圍的條件下,還 可以對以上內(nèi)容進行各種各樣的修改。因此本發(fā)明的范圍并不僅限于以上的說明,而是由 權(quán)利要求書的范圍來確定的。
權(quán)利要求
一種計算機程序的優(yōu)化方法,其特征在于,包括步驟1,通過值編號分析計算得到每個變量和表達式的值編號;步驟2,將靜態(tài)單賦值形式的計算機程序轉(zhuǎn)換為半稀疏值流圖形式的計算機程序;步驟3,計算半稀疏值流圖形式的計算機程序進行標(biāo)量優(yōu)化所需的初始屬性;如果初始屬性已經(jīng)包含所有所需優(yōu)化信息則執(zhí)行步驟4,否則擴展半稀疏值流圖形式的計算機程序為稀疏值流圖形式的計算機程序,并計算進行標(biāo)量優(yōu)化所需的屬性,直到所有所需屬性計算完畢,執(zhí)行步驟4;步驟4,根據(jù)計算得到的屬性對半稀疏值流圖形式的計算機程序或稀疏值流圖形式的計算機程序進行程序變換以優(yōu)化計算機程序;半稀疏值流圖形式的計算機程序中所有的值傳輸流都不能越過與其“語義”等值的計算,具有相同值編號的程序節(jié)點間的全局等值關(guān)系被連接起來;稀疏值流圖形式的計算機程序中所有的值傳輸流都不能越過與其“語義”等值的計算,所有的全局等值關(guān)系都必須被一值傳輸流所連接。
2.如權(quán)利要求1所述的計算機程序的優(yōu)化方法,其特征在于,步驟2中,半稀疏值流圖 為每個值編號插入Phi節(jié)點并使用靜態(tài)單賦值的變量將在不同位置的同一個值編號連接 起來。
3.如權(quán)利要求1所述的計算機程序的優(yōu)化方法,其特征在于,步驟3中,半稀疏值流圖 形式的計算機程序的變量作為半稀疏值流圖的節(jié)點;稀疏值流圖形式的計算機程序的變量 作為稀疏值流圖的節(jié)點;半稀疏值流圖或稀疏值流圖的邊由變量引用關(guān)系建立,半稀疏值 流圖形式的計算機程序或稀疏值流圖的形式的計算機程序的中間表示是表示等值關(guān)系的 值流圖;進行標(biāo)量優(yōu)化所需的屬性附加在半稀疏值流圖形式的計算機程序或稀疏值流圖的 形式的計算機程序的變量上。
4.如權(quán)利要求1所述的計算機程序的優(yōu)化方法,其特征在于,半稀疏值流圖或稀疏值流圖是一個邊標(biāo)記的有向圖Gs = (Ns, Es,V5,VE),包含 開始節(jié)點集合包含所有存在的值編號對應(yīng)的偽變量(1 ; 結(jié)束節(jié)點集合VE包含所有存在的值編號對應(yīng)的偽變量£ 1 ; 節(jié)點集合Ns包含所有開始節(jié)點、結(jié)束節(jié)點和程序中所有變量的集合; 邊集合Es為包含三元組(x,i,y)的集合,其中x、y為節(jié)點,i為自然數(shù)。
5.如權(quán)利要求4所述的計算機程序的優(yōu)化方法,其特征在于,步驟2中,對于靜態(tài)單賦 值形式的計算機程序中出現(xiàn)的每個值編號t執(zhí)行下列步驟步驟201,對每個程序節(jié)點n G J(t)-{Def(x) x G V A vl[x] = 4,創(chuàng)建變量^并設(shè) 置vl [x] : = t ;然后向每個程序節(jié)點n中插入phi節(jié)點x =cp(x,...,x);步驟202,對于每個程序節(jié)點 向n中插A phi 節(jié)點 步驟203,將^壓入棧卩; 步驟204,調(diào)用函數(shù)Search (t,n); 步驟205,刪除未使用的phi節(jié)點; 步驟204包括步驟2041,令h=棧P的高度;步驟2042,如果n為靜態(tài)單賦值形式的計算機程序的合并節(jié)點,則將n中所有值編號為 t的phi節(jié)點的結(jié)果變量壓入棧P ;步驟2043,否則,如果n為賦值語句,且其結(jié)果變量的值編號為t,將n的右側(cè)表達式替 換為棧P的棧頂變量,并將n的左側(cè)結(jié)果變量壓入棧P ;步驟2044,對于suCC(n)中的每個合并節(jié)點nl,將nl中的每個phi節(jié)點的對應(yīng)于節(jié)點 n的值編號為t的變量替換為棧P的棧頂變量;步驟2045,對每個children (n)中的節(jié)點n,,執(zhí)行Search (t,n,); 步驟2046,如果棧P的高度大于h,將多出的變量彈出;其中,DF(S)表示所有S中節(jié)點的支配邊界的并集,S表示任意程序節(jié)點集合;DF+(S) 表示S的迭代支配邊界;J(t) = {n|nGDF+(J0(t)) A t的定義節(jié)點嚴格支配n},對于一個 值編號t e V,用Jjt)表示包含所有需要使用t的值的程序節(jié)點集合,V = {V(x) x g V} 表示所有變量的值編號集合;Def(x)表示變量x的定值語句;dn(t)表示值編號t的定義節(jié) 點,在該節(jié)點執(zhí)行之后,具有值編號t的一個表達式被計算;Vl為值編號算法計算得到的每 個變量的值編號數(shù)組;(1表示一個恰好在t的定義節(jié)點dn (t)之后被賦值的值編號為t的 偽變量;£ \表示一個在程序節(jié)點n G DF({dn(t)})處被一個偽phi節(jié)點賦值的值編號為 t的偽變量;P是一個變量棧,用于構(gòu)造值傳輸流;succOi)表示程序節(jié)點n e N在程序控制 流圖中的所有后繼節(jié)點的集合;children(n)表示程序節(jié)點n G N在支配樹上所有子節(jié)點 的集合。
6.如權(quán)利要求5所述的計算機程序的優(yōu)化方法,其特征在于,三元組(x,i,y)表示一 條標(biāo)記的邊;三元組(x,i,y) G Es表示一條從變量x到變量y的值傳輸流。
7.如權(quán)利要求6所述的計算機程序的優(yōu)化方法,其特征在于,步驟3中,首先按如下公 式計算半移動向下安全屬性 其中,suCCna(X) = {(i,Def(y)) | (x,i,y) G Es A desc (Def (x),Def (y))},對于任意程 序節(jié)點叫和 G N,謂詞deSC(ni,n2) = true當(dāng)且僅當(dāng)叫二 或叫在控制流G的以開始節(jié) 點為根節(jié)點的深度優(yōu)先搜索樹上是n2的子孫節(jié)點;SUCCna(x)中的每個序偶(i,n) G coXN 表示稀疏值流圖節(jié)點x的值沿一條值傳輸流經(jīng)過n的第i個前驅(qū)節(jié)點,傳入至少一個在節(jié) 點n處定值的稀疏值流圖節(jié)點,《是自然數(shù)集合,N是所有程序節(jié)點集合;SUCCv(X,i,n)= {y (x,i,y) G Es A Def(y) = n}為包含所有對應(yīng)于給定序偶(i, n) G succna(x)的在節(jié) 點n處定值的變量集合;局部屬性COmp(x)為真當(dāng)且僅當(dāng)Def(x) G隊,隊是賦值語句組成 的程序節(jié)點集合。
8.如權(quán)利要求7所述的計算機程序的優(yōu)化方法,其特征在于,步驟4中,對于值編號集 合{t 11 e B且smds* D}中的值編號進行擴展,包括步驟401,創(chuàng)建一個新的變量x并設(shè)置vl[x] = t ;步驟402,向dn(t)中插入phi節(jié)點x=小(4",...,O,其中ti為x對應(yīng)于第i條入邊的值編號;步驟403,將半稀疏值流圖形式的計算機程序中所有(1替換為x ; 步驟404,對每個值編號(”執(zhí)行步驟201-步驟205 ;其中,B = {t|dn(t)為半稀疏值流圖形式的計算機程序合并節(jié)點,且其中不包含結(jié)果 變量的值編號為t的phi節(jié)點} ;smds*表示半移動向下安全屬性方程組的最大解。
9.如權(quán)利要求8所述的計算機程序的優(yōu)化方法,其特征在于,步驟3中,按照如下公式 計算移動向下安全屬性 mds(y) 否貝ll 按照如下公式計算向上安全屬性 其中succn(x) = {(i,Def(y)) | (x,i,y) G Ej ;公式中的mds*表示移動向下安全屬性 方程組的最大解;predv(x) = {y (y,i,x) G Es}為x在稀疏值流圖上所有前驅(qū)節(jié)點的集
10.如權(quán)利要求9所述的計算機程序的優(yōu)化方法,其特征在于,步驟4中,按照下述集合 選取插入計算的位置信息 其中cus*表示向上安全屬性方程組的最大解;步驟4中,進行插入計算后還清除無用 的代碼。
11.一種計算機程序的優(yōu)化系統(tǒng),其特征在于,包括值編號計算模塊,用于通過值編號分析計算得到每個變量和表達式的值編號;計算機程序優(yōu)化模塊,將靜態(tài)單賦值形式的計算機程序轉(zhuǎn)換為半稀疏值流圖形式的計 算機程序;計算半稀疏值流圖形式的計算機程序進行標(biāo)量優(yōu)化所需的初始屬性;如果初始 屬性已經(jīng)包含所有所需優(yōu)化信息則根據(jù)計算得到的屬性對半稀疏值流圖形式的計算機程 序或稀疏值流圖形式的計算機程序進行程序變換以優(yōu)化計算機程序,否則擴展半稀疏值流 圖形式的計算機程序為稀疏值流圖形式的計算機程序,并計算進行標(biāo)量優(yōu)化所需的屬性, 直到所有所需屬性計算完畢,根據(jù)計算得到的屬性對半稀疏值流圖形式的計算機程序或稀 疏值流圖形式的計算機程序進行程序變換以優(yōu)化計算機程序;半稀疏值流圖形式的計算機程序中所有的值傳輸流都不能越過與其“語義”等值的計 算,具有相同值編號的程序節(jié)點間的全局等值關(guān)系被連接起來;稀疏值流圖形式的計算機程序中所有的值傳輸流都不能越過與其“語義”等值的計 算,所有的全局等值關(guān)系都必須被一值傳輸流所連接。
12.如權(quán)利要求11所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,半稀疏值流圖為每個 值編號插入Phi節(jié)點并使用靜態(tài)單賦值的變量將在不同位置的同一個值編號連接起來。
13.如權(quán)利要求11所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,步驟3中,半稀疏值流 圖形式的計算機程序的變量作為半稀疏值流圖的節(jié)點;稀疏值流圖形式的計算機程序的變 量作為稀疏值流圖的節(jié)點;半稀疏值流圖或稀疏值流圖的邊由變量引用關(guān)系建立,半稀疏 值流圖形式的計算機程序或稀疏值流圖的形式的計算機程序的中間表示是表示等值關(guān)系 的值流圖;進行標(biāo)量優(yōu)化所需的屬性附加在半稀疏值流圖形式的計算機程序或稀疏值流圖 的形式的計算機程序的變量上。
14.如權(quán)利要求11所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,半稀疏值流圖或稀疏值流圖是一個邊標(biāo)記的有向圖Gs = (Ns, Es,V5,VE),包含 開始節(jié)點集合包含所有存在的值編號對應(yīng)的偽變量(1 ; 結(jié)束節(jié)點集合VE包含所有存在的值編號對應(yīng)的偽變量£ 1 ; 節(jié)點集合Ns包含所有開始節(jié)點、結(jié)束節(jié)點和程序中所有變量的集合; 邊集合Es為包含三元組(x,i,y)的集合,其中x、y為節(jié)點,i為自然數(shù)。
15.如權(quán)利要求14所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,對于靜態(tài)單賦值形式 的計算機程序中出現(xiàn)的每個值編號t,計算機程序優(yōu)化模塊執(zhí)行下述處理對每個程序節(jié)點n G J (t) - {Def (x) x G V A vl [x] = t},創(chuàng)建變量x,并設(shè)置vl [x] =t ;然后向每個程序節(jié)點n中插入phi節(jié)點X 對于每個程序節(jié)點 向n中插入phi節(jié)將e1壓入棧P ; 調(diào)用函數(shù)Search (t,n); 刪除未使用的phi節(jié)點; 調(diào)用函數(shù)Search (t,n)包括 令h=棧P的高度;如果n為靜態(tài)單賦值形式的計算機程序的合并節(jié)點,則將n中所有值編號為t的phi 節(jié)點的結(jié)果變量壓入棧P;否則,如果n為賦值語句,且其結(jié)果變量的值編號為t,將n的右側(cè)表達式替換為棧P的 棧頂變量,并將n的左側(cè)結(jié)果變量壓入棧P ;對于SUCC(n)中的每個合并節(jié)點nl,將nl中的每個phi節(jié)點的對應(yīng)于節(jié)點n的值編號 為t的變量替換為棧P的棧頂變量;對每個children (n)中的節(jié)點n,,執(zhí)行Search (t,n,); 如果棧P的高度大于h,將多出的變量彈出;其中,DF(S)表示所有S中節(jié)點的支配邊界的并集,S表示任意程序節(jié)點集合;DF+(S)表示S的迭代支配邊界;J (t) = {n|nG DF+ (J0 (t)) At的定義節(jié)點嚴格支配n},對于一個值編號t e V,用Jjt)表示包含所有需要t的值的節(jié)點集合,V = {V(x) x g V}表示所有變量的值編號集合;Def(x)表示變量x的定值語句;dn(t)表示值編號t的定義節(jié)點,在該節(jié)點執(zhí)行之后,具有值編號t的一個表達式被計算;Vl為值編號算法計算得到的每個變量的值編號數(shù)組;(1表示一個恰好在t的定義節(jié)點dn(t)之后被賦值的值編號為t的偽變量;e \表示一個在程序節(jié)點n G DF({dn(t)})處被一個偽phi節(jié)點賦值的值編號為t的偽變量;p是一個變量棧,用于構(gòu)造值傳輸流;suCC(n)表示程序節(jié)點n e N在程序控制流圖中的所有后繼節(jié)點的集合;children (n)表示程序節(jié)點n G N在支配樹上所有子節(jié)點的集合。
16.如權(quán)利要求15所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,三元組(x,i,y)表示 一條標(biāo)記的邊;三元組(x,i,y) G Es表示一條從變量x到變量y的值傳輸流。
17.如權(quán)利要求16所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,計算機程序優(yōu)化模塊 按如下公式計算半移動向下安全屬性 其中,Succna(x) = {(i, Def(y)) | (x, i, y) G Es 八 desc (Def (x),Def (y))},對于任 意程序節(jié)點叫和n2 G N,謂詞desc (叫,n2) = true當(dāng)且僅當(dāng)叫=n2或叫在控制流G的 以開始節(jié)點為根節(jié)點的深度優(yōu)先搜索樹上是 的子孫節(jié)點;SUCCna(X)中的每個序偶(i, n) G XN表示稀疏值流圖節(jié)點x的值沿一條值傳輸流經(jīng)過n的第i個前驅(qū)節(jié)點,傳入至 少一個在節(jié)點n處定值的稀疏值流圖節(jié)點,《是自然數(shù)集合,N是程序節(jié)點集合;SUCCv(x, i,n) = {y (x,i,y) G Es A Def(y) = n}為包含所有對應(yīng)于給定序偶(i,n) G succna(x) 的在節(jié)點n處定值的變量集合;局部屬性COmp(x)為真當(dāng)且僅當(dāng)Def(x) G隊,隊是賦值語 句組成的程序節(jié)點集合。
18.如權(quán)利要求17所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,計算機程序優(yōu)化模塊 對值編號集合{t|t e B且smdsK 中的值編號進行擴展,包括創(chuàng)建一個新的變量x并設(shè)置vl [x] :=t; 向dn(t)中插入phi節(jié)點x =小((", ,4tm),其中ti為x對應(yīng)于第i條入邊的值編號;將半稀疏值流圖形式的計算機程序中所有(1替換為x ; 步驟404,對每個值編號(”執(zhí)行步驟201-步驟205 ;其中,B = {t|dn(t)為半稀疏值流圖形式的計算機程序合并節(jié)點,且其中不包含結(jié)果 變量的值編號為t的phi節(jié)點} ;smds*表示半移動向下安全屬性方程組的最大解。
19.如權(quán)利要求18所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,計算機程序優(yōu)化模塊 按照如下公式計算移動向下安全屬性 否則按照如下公式計算向上安全屬性 其中succn(x) = {(i,Def(y)) | (x,i,y) G Ej ;公式中的mds*表示移動向下安全屬性 方程組的最大解;predv(x) = {y (y,i,x) G Es}為x在稀疏值流圖上所有前驅(qū)節(jié)點的集
20.如權(quán)利要求19所述的計算機程序的優(yōu)化系統(tǒng),其特征在于,計算機程序優(yōu)化模塊 按照下述集合選取插入計算的位置信息 其中cus*表示向上安全屬性方程組的最大解; 進行插入計算后還清除無用的代碼。
全文摘要
本發(fā)明涉及一種計算機程序的優(yōu)化方法及系統(tǒng)。該優(yōu)化方法包括步驟1,通過值編號分析計算得到每個變量和表達式的值編號;步驟2,將靜態(tài)單賦值形式的計算機程序轉(zhuǎn)換為半稀疏值流圖形式的計算機程序;步驟3,計算半稀疏值流圖形式的計算機程序進行標(biāo)量優(yōu)化所需的初始屬性;如果初始屬性已經(jīng)包含所有所需優(yōu)化信息則執(zhí)行步驟4,否則擴展半稀疏值流圖形式的計算機程序為稀疏值流圖形式的計算機程序,并計算進行標(biāo)量優(yōu)化所需的屬性,直到所有所需屬性計算完畢,執(zhí)行步驟4;步驟4,根據(jù)計算得到的屬性對半稀疏值流圖形式的計算機程序或稀疏值流圖形式的計算機程序進行程序變換以優(yōu)化計算機程序。本發(fā)明能夠提高程序優(yōu)化的效率。
文檔編號G06F9/44GK101876899SQ20091024330
公開日2010年11月3日 申請日期2009年12月18日 優(yōu)先權(quán)日2009年12月18日
發(fā)明者劉先華, 程旭, 聶久燾 申請人:北京北大眾志微系統(tǒng)科技有限責(zé)任公司