用于程序自動性能預測的視點提升方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及一種用于程序自動性能預測的視點提升方法。
【背景技術(shù)】
[0002] 程序常見的性能評測方法包括動態(tài)分析和靜態(tài)分析。所謂動態(tài)分析即真實運行較 小輸入規(guī)模和并行度預測大規(guī)模的情況,靜態(tài)分析即基于編譯器分析代碼,獲取程序特征。 現(xiàn)在希望動態(tài)分析和靜態(tài)分析相結(jié)合獲取程序性能。動態(tài)分析代表精確性,而靜態(tài)分析代 表預測性。
[0003] 研究中通過靜態(tài)分析獲取循環(huán)次數(shù),插粧到源程序中,運行刪減后的程序獲取循 環(huán)次數(shù),結(jié)合程序特征,最終得到預測時間。LLVM本身提供了EdgeProfiling,即在循環(huán)的 preheader插入"邊"的信息。但運種方法是純動態(tài)分析的方法與我們預測的初衷不符,所 得的預測概率較低。
[0004] 需要在保證精度的同時尋找合適的插入位置,所尋找的插粧位置即視點,視點是 指通過靜態(tài)分析得到循環(huán)次數(shù)的插粧位置,其優(yōu)點在于完美的統(tǒng)一了靜態(tài)預測和動態(tài)預 巧。。通過提升或降低視點來自由調(diào)節(jié)動態(tài)性和靜態(tài)性的比例。視點過高,增加預測性但會 降低精度,也就是趨近于純靜態(tài)分析。如果視點過低則會失去預測性,趨近于LLVM提供的 EdgeProfiling。亟需一種能夠保證精度的同時盡量提升視點W提高預測性的方法。
【發(fā)明內(nèi)容】
陽0化]本發(fā)明的目的是為了解決現(xiàn)有的程序自動性能預測方法存在難W在保證預測精 度的同時確定最大預測性的問題,而提出一種用于程序自動性能預測的視點提升方法。
[0006] 一種用于程序自動性能預測的視點提升方法,所述方法通過W下步驟實現(xiàn):
[0007] 步驟一、定義基本塊N執(zhí)行次數(shù)的視點V,則利用二元組表示的基本塊頻率為巧y, Bv,w);其中,Ey表示視點V的實際運行次數(shù),B表示在視點V中預測到基本塊N的頻率;所 述視點V即為計算循環(huán)基本塊執(zhí)行次數(shù)的指令的插入點;
[000引步驟二、對二元組表示的基本塊頻率巧y,Bv,J中的視點V的實際運行次數(shù)Ey的量 進行提升操作,且提升后的視點V滿月
竄中,5表示支配關(guān)系,即在視點V能 夠獲取直接依賴的%start、%end和%strideS個變量的值;
[0009] 步驟S、確定二元組表示的基本塊頻率巧y,Bv,w)中的視點V中預測到基本塊N的 頻率Bv,w的量;
[0010] 步驟四、令視點V的實際運行次數(shù)Ey與視點V中預測到基本塊N的頻率B的乘 積定義為基本塊N的頻率町,即町二EvXBv,w;
[0011] 步驟五、每實際運行一次視點V都得到實際運行次數(shù)Ey,相應(yīng)地,將視點V中預 測到基本塊N的頻率Bv,w的指令插入視點V,因此視點V在一次運行中總的基本塊頻率為
[0012] 本發(fā)明的有益效果為:
[0013] 本發(fā)明通過將基本塊次數(shù)插入Preheader中,W提升精度,并通過使視點V獲取直 接依賴的%start、%end和%Strides個變量的值來提升視點,從而彌補因為提升精度 而導致的預測性降低的缺點,進而通過提高的預測性使后期代碼刪減操作,全局計數(shù)器數(shù) 組的讀寫散布在每個基本塊內(nèi),從而阻斷了刪減過程。實現(xiàn)在保證精度的同時確定合適的 插入位置,結(jié)合靜態(tài)分支概率提高預測性。且預測精確率達到92-95%。
【附圖說明】
[0014] 圖1為本發(fā)明的流程圖;
[0015] 圖2為本發(fā)明實施例1中不同視點包含不同程度的動態(tài)性靜態(tài)性比例;
[0016] 圖3為本發(fā)明實施例1設(shè)及的不同視點循環(huán)嵌套示意圖;
【具體實施方式】
【具體實施方式】 [0017] 一:
[0018] 本實施方式的用于程序自動性能預測的視點提升方法,結(jié)合圖1所示,所述方法 通過W下步驟實現(xiàn):
[0019] 步驟一、定義基本塊N執(zhí)行次數(shù)的視點V,則利用二元組表示的基本塊頻率為巧y, Bv,w);其中,Ey表示視點V的實際運行次數(shù),B表示在視點V中預測到基本塊N的頻率;所 述視點V即為計算循環(huán)基本塊執(zhí)行次數(shù)的指令的插入點;
[0020] 步驟二、對二元組表示的基本塊頻率巧y,Bv,w)中的視點V的實際運行次數(shù)Ev的 量進行提升操作,且提升后的視點V滿足
其中,5表示支配關(guān)系,即在視點 V能夠獲取直接依賴的%start、%end和%strideS個變量的值;
[0021] 步驟S、確定二元組表示的基本塊頻率巧y,Bv,w)中的視點V中預測到基本塊N的 頻率Bv,w的量;
[0022] 步驟四、令視點V的實際運行次數(shù)Ey與視點V中預測到基本塊N的頻率B的乘 積定義為基本塊N的頻率町,即町二EvXBv,w;
[0023] 步驟五、隨著程序的運行,每實際運行一次視點V都得到實際運行次數(shù)Ey,相應(yīng)地, 將視點V中預測到基本塊N的頻率Bv,w的指令插入視點V,因此視點V在一次運行中總的基 本塊頻率為
運里特別選用E表示視點V的動態(tài)基本塊頻率,因為它的 值等于EdgeProfiling的結(jié)果。
[0024] 與LLVM的EdgeProfiling方法,將基本塊次數(shù)插入Preheader中,提升了精度卻 降低了預測性。不同的是,本發(fā)明方法能夠增加預測性,好處是便于后期刪減代碼,全局計 數(shù)器數(shù)組的讀寫散布在每個基本塊內(nèi),從而阻斷了刪減過程,因此提升視點是必要的。 陽0巧]【具體實施方式】二:
[00%] 與【具體實施方式】一不同的是,本實施方式的用于程序自動性能預測的視點提升方 法,步驟一所述的二元組表示的基本塊頻率巧y,Bv,j的取值為:
[0027] (1)當選擇基本塊本身作為視點時,二元組表示的基本塊頻率表示為巧w,l);
[0028] (2)對于循環(huán)中的基本塊,當選擇循環(huán)的Preheader作為視點時,基本塊頻率表示 關(guān)
其中,%tc表示靜態(tài)分析循環(huán)次數(shù),
是編譯框架LLVM提供 的靜態(tài)分支預測的概率;
[0029] (3)對于非循環(huán)的基本塊,沿用編譯框架LLVM基本塊頻率,非循環(huán)的基本塊的視 點仍然為函數(shù)入口基本塊e,即:巧。,Bc,n)。
【具體實施方式】 [0030] =:
[0031] 與【具體實施方式】一或二不同的是,本實施方式的用于程序自動性能預測的視點提 升方法,步驟二所述對二元組表示的基本塊頻率巧y,Bv,J中的視點V的實際運行次數(shù)Ey的 量進行提升操作的過程:
[0032] 步驟二一、選擇循環(huán)的基本塊次數(shù)的直接依賴的指令,所述的直接依賴的指令包 括程序執(zhí)行時存取指令、交換指令、運算指令中的一種;
[0033] 步驟二二、將步驟二一選擇的直接依賴的指令中只被使用一次的操作數(shù)賦值給目 標集合Targets;直接依賴的指令即是生成Loop化ipCount時插入的指令,也就是需要被提 升的指令;
[0034] 步驟二=、將步驟步驟二一選擇的指令中多次使用的操作數(shù)的父循環(huán)ParentLoop 的視點賦值給Depends集合;
[0035] 步驟二四、若Depends集合為空,則返回循環(huán)所在的基本塊,并進行步驟二五的操 作;否則,進行尋找視點V的操作;
[0036] 步驟二五、遍歷目標集合Targets中的指令,將指令插入到初始視點P0S的終止指 令Terminator之前;
[0037] 步驟二六、返回初始視點P0S,即完成視點V的提升。
【具體實施方式】 [0038] 四:
[0039] 與【具體實施方式】=不同的是,本實施方式的用于程序自動性能預測的視點提升方 法,步驟二四所述尋找視點V的操作的過程為,
[0040] 遍歷Depends集合中的基本塊N,若初始視點pos能夠支配基本塊N,則視點pos 重新賦值為基本快N;否則,初始視點pos仍為原值。
【具體實施方式】 [0041] 五:
[0042] 與【具體實施方式】一、二或四不同的是,本實施方式的用于程序自動性能預測的視 點提升方法,步驟=所述確定二元組表示的基本塊頻率巧y,Bv,W)中的視點V中預測到基本 塊N的頻率Bv,w的量的過程為,
[0043] 當選擇的視點V與父循環(huán)在同一循環(huán)層時,確定視點V中預測到基本塊N的頻率 Bv,w表示為:Ey,(V-m) %tc;其中,m表示父循環(huán)所在的循環(huán)層;