亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種針對(duì)科學(xué)計(jì)算程序靜態(tài)分析性能的預(yù)測(cè)代價(jià)優(yōu)化方法

文檔序號(hào):9471288閱讀:648來源:國知局
一種針對(duì)科學(xué)計(jì)算程序靜態(tài)分析性能的預(yù)測(cè)代價(jià)優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及預(yù)測(cè)代價(jià)優(yōu)化方法,特別涉及一種針對(duì)科學(xué)計(jì)算程序靜態(tài)分析性能的 預(yù)測(cè)代價(jià)優(yōu)化方法。
【背景技術(shù)】
[0002] 傳統(tǒng)的程序性能評(píng)測(cè)中,動(dòng)態(tài)分析的方法是通過小規(guī)模預(yù)測(cè)大規(guī)模,即在小的輸 入規(guī)模和并行度下多次測(cè)量,將得到的數(shù)據(jù)繪制在一個(gè)坐標(biāo)圖上并進(jìn)行曲線擬合或是回歸 分析,最后通過曲線擬合得到的公式,就能夠預(yù)測(cè)更大規(guī)模和更大并行度下的運(yùn)行時(shí)間,這 種方法需要大量數(shù)據(jù)采樣,預(yù)測(cè)代價(jià)非常大。而利用靜態(tài)分析的方法,可以通過編譯器階段 分析源代碼直接獲取程序的特征,然后再將分析后的程序特征插粧到原始程序中,對(duì)于編 譯階段分析不出來的程序特征,通過插粧的方法在原始程序中獲取,這種方法如果再選擇 運(yùn)行插粧后的程序的話其預(yù)測(cè)代價(jià)也比較大,而且相對(duì)于動(dòng)態(tài)分析的方法,還引入的靜態(tài) 分支概率等的誤差,得不償失。因此,需要一種方法,能夠減少靜態(tài)分析方法的預(yù)測(cè)代價(jià),來 彌補(bǔ)其不足。

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

[0003] 本發(fā)明的目的是為了解決靜態(tài)分析方法的預(yù)測(cè)代價(jià)大,引入誤差的問題而提出的 一種針對(duì)科學(xué)計(jì)算程序靜態(tài)分析性能的預(yù)測(cè)代價(jià)優(yōu)化方法。
[0004] 上述的發(fā)明目的是通過以下技術(shù)方案實(shí)現(xiàn)的:
[0005] 步驟一、選擇編譯器框架LLVM對(duì)科學(xué)計(jì)算程序的編譯成初始中間代碼;將初始中 間代碼IR進(jìn)行進(jìn)行靜態(tài)分析得到程序特征,將程序特征通過插粧的方法插入到初始中間 代碼后得到中間代碼IR;
[0006] 其中,中間代碼為IR有三種格式:計(jì)算機(jī)內(nèi)存中的編譯中間語言、硬盤上存儲(chǔ)的 二進(jìn)制中間語言和可讀的中間語言;
[0007] 步驟二、利用刪減方法對(duì)中間代碼IR進(jìn)行依賴分析計(jì)算,得到依賴圖;其中,依賴 分析包括正向規(guī)則和反向規(guī)則;
[0008] 步驟三、利用剪枝方法的過濾函數(shù)將依賴圖進(jìn)行過濾,得到剪枝后的依賴圖;其 中,過濾函數(shù)具體為:結(jié)構(gòu)體過濾函數(shù)和調(diào)用過濾函數(shù);
[0009] 步驟四、根據(jù)調(diào)用關(guān)系CallGraph自下而上的方向遍歷中間代碼IR;結(jié)合剪枝后 的依賴圖中,在中間代碼中刪減代碼時(shí)從fortran輸出函數(shù)開始刪除相關(guān)函數(shù)、相關(guān)函數(shù) 對(duì)應(yīng)的依賴指令、替換并行度參數(shù)、相關(guān)指令以及相關(guān)指令對(duì)應(yīng)的依賴指令后,得到刪除后 的中間代碼;
[0010] 其中,相關(guān)函數(shù)包括fortran的輸出函數(shù)、時(shí)間函數(shù)、MPI同步函數(shù)、MPI點(diǎn)對(duì)點(diǎn)通 信函數(shù)、MPI匯集通信函數(shù)、MPI_A1Ireduce函數(shù)和MPI_Bcast函數(shù);相關(guān)指令包括return 指令和store指令。
[0011] 發(fā)明效果
[0012] 對(duì)于靜態(tài)分析后的中間代碼,我們首先通過基于規(guī)則的依賴分析(正向規(guī)則和 反向規(guī)則的組合),生成指令的依賴圖;然后通過過濾方法對(duì)依賴圖進(jìn)行剪枝,減少圖的規(guī) 模,提高處理速度;做了以上兩步工作之后,我們就可以刪減代碼,這樣就打開了依賴關(guān)系, 把刪減的指令和其依賴的指令一起刪除掉;進(jìn)而通過編譯器死代碼消除的方法刪減更多的 無用指令;最后編譯成可執(zhí)行程序。該程序由于是刪減代碼之后的程序,因此執(zhí)行時(shí)間大大 的縮短,由于又刪除的mpi指令,因此可以在單機(jī)運(yùn)行,很好的實(shí)現(xiàn)了單機(jī)模擬多機(jī)如圖3。
[0013] 由于一種針對(duì)科學(xué)計(jì)算程序靜態(tài)分析性能的預(yù)測(cè)代價(jià)優(yōu)化方法能自動(dòng)的決定哪 些語句是對(duì)插粧無用的,因此需要進(jìn)行數(shù)據(jù)依賴關(guān)系分析。我們需要一個(gè)特殊的工具來輔 助分析數(shù)據(jù)依賴問題。雖然LLVM的SSA形式直接揭示了一些在寄存器上的數(shù)據(jù)依賴關(guān)系, 但對(duì)于內(nèi)存依賴如load/store則無能為力。我們的目標(biāo)是能找出load指令之前對(duì)應(yīng)store 語句,從而知道讀取的內(nèi)容是前面哪里寫入的內(nèi)容,亦即得到其依賴關(guān)系。
[0014] Use和User是LLVM的兩個(gè)重要的概念。User是在定義時(shí)使用其他對(duì)象的復(fù)雜對(duì) 象。所有指令都是User。如圖7,Use是一個(gè)User和被使用對(duì)象的關(guān)系的二元組。Use的 重要之處在于,對(duì)于一個(gè)對(duì)象%nblocks,LLVM能給出所有使用它的Use關(guān)系列表。并且迭 代器use_begin位于IR的下方,use_end位于IR的商法。因此,我們需要利用Use列表來 尋找依賴關(guān)系。
[0015] 我們?cè)O(shè)計(jì)了DateDepGrap的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)依賴關(guān)系,該數(shù)據(jù)結(jié)構(gòu)是用HashMap 來存儲(chǔ)節(jié)點(diǎn),std: :vector來存儲(chǔ)邊(child),同時(shí)支持動(dòng)態(tài)更新邊和節(jié)點(diǎn)。例如一個(gè)樹,存 儲(chǔ)為數(shù)據(jù)如圖5所示,對(duì)每個(gè)節(jié)點(diǎn)都用一個(gè)數(shù)組來存儲(chǔ)其子節(jié)點(diǎn),這樣,節(jié)點(diǎn)到各個(gè)子節(jié)點(diǎn) 就表達(dá)了邊的語義了。
[0016] 由于靜態(tài)分析過程已經(jīng)通過分析源代碼獲取到程序的特征(基本塊數(shù)量等),并 將獲取的數(shù)據(jù)插粧到原始程序中,原則上只需要保留插粧的代碼,其他的如核心計(jì)算的代 碼就可以刪除,這樣就大大減少了該方法的性能預(yù)測(cè)代價(jià)?;谶@種思想本發(fā)明實(shí)現(xiàn)了一 種刪減的方法,該方法能夠確定程序中哪些語句是對(duì)插粧無用的,進(jìn)而進(jìn)行刪除,減少程序 的執(zhí)行時(shí)間也就是預(yù)測(cè)代價(jià),同時(shí)又能夠獲取程序特征,保證預(yù)測(cè)的準(zhǔn)確性。
[0017] 基于該結(jié)構(gòu),我們實(shí)現(xiàn)了一些工具,可以得到依賴關(guān)系圖,如圖6。其中反向規(guī)則是
[0018] 下面將要介紹的概念。實(shí)現(xiàn)邊框的是SOLVED的節(jié)點(diǎn),表明被找到了有依賴的。虛 線邊框的是UNSOLVED的節(jié)點(diǎn),表明被其他節(jié)點(diǎn)引用,但自身沒有找出依賴的節(jié)點(diǎn)。
[0019] 圖11是基于EP(-個(gè)基準(zhǔn)測(cè)試程序)的并行程序性能預(yù)測(cè)實(shí)驗(yàn),其方法是通過靜 態(tài)分析并加入了刪減的過程。橫坐標(biāo)為并行度,縱坐標(biāo)為程序執(zhí)行時(shí)間,可以看到,我們的 預(yù)測(cè)代價(jià)是非常低的,而且不影響預(yù)測(cè)的準(zhǔn)確性。達(dá)到了一種針對(duì)科學(xué)計(jì)算程序靜態(tài)分析 性能的預(yù)測(cè)代價(jià)優(yōu)化方法的目的。
【附圖說明】
[0020] 圖1為【具體實(shí)施方式】一提出的傳統(tǒng)靜態(tài)編譯器結(jié)構(gòu)示意圖;
[0021] 圖2為【具體實(shí)施方式】一提出的LLVM編譯器結(jié)構(gòu)示意圖;
[0022] 圖3為【具體實(shí)施方式】一提出的刪減過程細(xì)節(jié)流程圖;
[0023] 圖4為實(shí)施例一提出的刪減原理示意圖;
[0024] 圖5為【具體實(shí)施方式】一提出的一個(gè)樹的DataDepGraph數(shù)據(jù)結(jié)構(gòu)示意圖;其中, 1~6表示數(shù)據(jù)結(jié)構(gòu)中的樹的節(jié)點(diǎn);
[0025] 圖6為【具體實(shí)施方式】一提出的一個(gè)利用反向規(guī)則查詢的依賴關(guān)系寫入的dot并轉(zhuǎn) 換成圖片,其中,每一個(gè)矩形框中的內(nèi)容表示的是一條中間代碼指令;
[0026] 圖7為【具體實(shí)施方式】二提出的中間代碼指令表示的直接依賴,同名依賴,User和 Use的關(guān)系不意圖;
[0027] 圖8為【具體實(shí)施方式】二提出的中間代碼指令表示的正向規(guī)則查詢gfortran輸出 語句的依賴關(guān)系圖;
[0028] 圖9為【具體實(shí)施方式】五提出的一個(gè)函數(shù)調(diào)用圖及其標(biāo)記的數(shù),其中,,function表 示函數(shù),a、b、c和d表示函數(shù)的名字;(1)~(6)、A~D表示劃分的函數(shù)區(qū)域;call@表示 函數(shù)調(diào)用指令;
[0029] 圖10為【具體實(shí)施方式】一提出的Reduce運(yùn)行層次結(jié)構(gòu)示意圖;
[0030] 圖11為實(shí)施例一提出的科學(xué)計(jì)算程序EP(EmbarrassinglyParallel)中的數(shù)據(jù) 規(guī)模D在taub(大型集群環(huán)境)上的預(yù)測(cè)結(jié)果對(duì)比示意圖。
【具體實(shí)施方式】
【具體實(shí)施方式】 [0031] 一:本實(shí)施方式的一種針對(duì)科學(xué)計(jì)算程序靜態(tài)分析性能的預(yù)測(cè)代價(jià) 優(yōu)化方法,具體是按照以下步驟制備的:
[0032] 所謂的規(guī)則是對(duì)于限定條件的輸入才能應(yīng)用相應(yīng)的規(guī)則;我們并不設(shè)計(jì)一個(gè)固定 的復(fù)雜的尋找依賴的過程函數(shù),而是設(shè)計(jì)一個(gè)框架和一堆規(guī)則,通過將不同的規(guī)則組合進(jìn) 框架從而適應(yīng)不同環(huán)境中尋找依賴的需求。
[0033] 規(guī)則能夠擴(kuò)展圖;例如,輸入一條指令,通過查詢匹配的規(guī)則,并應(yīng)用之,則將此 指令關(guān)聯(lián)的其他指令加入進(jìn)了依賴圖中,每次一條匹配的規(guī)則將當(dāng)前unsolve對(duì)象標(biāo)記為 solved,并加入更多的unsolve對(duì)象,從而下次執(zhí)行循環(huán)的時(shí)候由popUnsolved返回,如此 反復(fù)則不斷的將圖擴(kuò)大。我們把這些規(guī)則分為正向規(guī)則和反向規(guī)則。
[0034] 步驟一、選擇編譯器框架LLVM(Low Level Virtual Machine)對(duì)科學(xué)計(jì)算程序的 編譯成初始中間代碼;將初始中間代碼IR進(jìn)行進(jìn)行靜態(tài)分析(靜態(tài)循環(huán)次數(shù),靜態(tài)分支概 率等)得到程序特征(基本塊次數(shù)等),將程序特征通過插粧的方法插入到初始中間代碼后 得到中間代碼IR;
[0035] 其中,中間代碼為IRQntermediateRepresentation)有三種格式:計(jì)算機(jī)內(nèi)存 中的編譯中間語言、硬盤上存儲(chǔ)的二進(jìn)制中間語言(bitc〇de,g卩.be文件)和可讀的中間語 言(.11文件);三種格式完全等價(jià),可以相互轉(zhuǎn)換;LLVM的一大特色是設(shè)計(jì)了一套高度可 用的中間代碼,其語法類似匯編但比匯編更高級(jí);
[0036] LLVM的編譯器結(jié)構(gòu)在傳統(tǒng)編譯器結(jié)構(gòu)的基礎(chǔ)上做了較大的改進(jìn);傳統(tǒng)靜態(tài)編譯 器分為前端、優(yōu)化和后端三個(gè)階段,前端對(duì)原程序進(jìn)行分析并產(chǎn)生中間表示,后端在優(yōu)化的 中間表示基礎(chǔ)上生成目標(biāo)代碼,結(jié)構(gòu)如圖1所示;LLVM結(jié)構(gòu)如圖2所示,這種結(jié)構(gòu)的優(yōu)點(diǎn)是 如果需要支持一種新的編程語言,那么只需要實(shí)現(xiàn)一種新的前端;如果需要支持一種新的 硬件設(shè)備,那只需要實(shí)現(xiàn)一個(gè)新的后端;而優(yōu)化階段因?yàn)槭轻槍?duì)統(tǒng)一的LLVMIR,所以它是 一個(gè)通用的階段;
[0037] 靜態(tài)分析的優(yōu)點(diǎn)就是不需要執(zhí)行源程序就已經(jīng)通過分析得到程序特征,但是還有 一部分程序特征是不能通過編譯器方法分析得到,比如,位于循環(huán)內(nèi)的基本塊,由于該循環(huán) 的循環(huán)次數(shù)和程序內(nèi)部的一些計(jì)算結(jié)果有關(guān),這種情況下,
當(dāng)前第1頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1