本發(fā)明涉及形式化語義領(lǐng)域,尤其涉及基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)。
背景技術(shù):
嵌入式系統(tǒng)的硬件往往根據(jù)具體應(yīng)用而定制,為了獲得更多的軟件支持,通常需要編寫專用的編譯器以完成高級(jí)語言到具體的目標(biāo)平臺(tái)代碼的轉(zhuǎn)換,并同時(shí)滿足嵌入式系統(tǒng)對(duì)高性能、高可靠性、低功耗等要求。不同目標(biāo)平臺(tái)擁有不同的特性,開發(fā)目標(biāo)平臺(tái)專用的編譯器往往成本太高。本發(fā)明提出了基于代數(shù)演算的中間代碼系統(tǒng),根據(jù)可由用戶定制的優(yōu)化策略,對(duì)中間代碼進(jìn)行優(yōu)化,生成高效的目標(biāo)平臺(tái)機(jī)器碼。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提出了基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng),所述系統(tǒng)包括:
高級(jí)語言轉(zhuǎn)換單元,用于將輸入的源代碼、其他形式的中間語言轉(zhuǎn)換成為所述優(yōu)化系統(tǒng)使用的中間語言(該中間語言是系統(tǒng)內(nèi)部約定好的程序語義表示語言,它應(yīng)該具備兩種重要的性質(zhì):易于生成,且能夠被輕松地翻譯為目標(biāo)機(jī)器上的語言),并將輸出作為代數(shù)優(yōu)化單元的輸入。具體轉(zhuǎn)換過程與編譯器前端工作過程類似,對(duì)輸入的源代碼、其他形式的中間代碼依次進(jìn)行詞法分析、語法分析,生成抽象語法樹(抽象語法樹也是一種中間表示),然后將抽象語法樹轉(zhuǎn)化成需要優(yōu)化的中間語言(即規(guī)范型)表示形式。
代數(shù)優(yōu)化單元,用于對(duì)所述高級(jí)語言轉(zhuǎn)換單元輸出的規(guī)范型,使用優(yōu)化策略進(jìn)行優(yōu)化。代數(shù)優(yōu)化單元中的優(yōu)化策略庫包含了一系列的優(yōu)化策略(如簡化規(guī)則中的冗余消除策略),優(yōu)化策略規(guī)定了程序優(yōu)化的方向。比如冗余消除策略,消除中間表示中的公共子表達(dá)式、循環(huán)不變表達(dá)式和部分冗余表達(dá)式。優(yōu)化器根據(jù)優(yōu)化策略對(duì)程序的中間表示進(jìn)行優(yōu)化。
優(yōu)化策略定制單元,允許用戶提供目標(biāo)平臺(tái)硬件特性,定制特別的優(yōu)化策略,以便于生成高效的中間代碼,加速編譯器后端的編譯速度。第一,不同的目標(biāo)機(jī)器平臺(tái)擁有不同的硬件特性,第二,不同的程序?qū)?yōu)化的需求不同,對(duì)諸如并發(fā)性、實(shí)時(shí)性等性質(zhì)要求不一,為生成高效的可執(zhí)行代碼,需要特殊的優(yōu)化策略來指導(dǎo)優(yōu)化過程?;谝陨蟽蓚€(gè)原因,系統(tǒng)提供優(yōu)化策略定制接口,用戶可以根據(jù)實(shí)際情況,定制優(yōu)化策略。系統(tǒng)提供優(yōu)化選項(xiàng),由用戶選擇是否需要該優(yōu)化,生成定制策略,存入策略庫。
目標(biāo)代碼生成單元,由優(yōu)化過的中間代碼生成目標(biāo)平臺(tái)的可執(zhí)行機(jī)器碼。優(yōu)化器會(huì)產(chǎn)生優(yōu)化后的程序中間表示,目標(biāo)代碼生成單元以優(yōu)化后的中間表示為輸入,生成可執(zhí)行的目標(biāo)平臺(tái)機(jī)器碼。運(yùn)行過程與編譯器后端工作過程類似。
本發(fā)明提出的所述基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)中,所述高級(jí)語言轉(zhuǎn)換單元包括支持語言庫、高級(jí)語言轉(zhuǎn)換器。所述支持語言庫包括所有支持語言的轉(zhuǎn)換規(guī)則,分別定義了支持語言到中間語言的轉(zhuǎn)換規(guī)則。所述高級(jí)語言轉(zhuǎn)換器,用于將輸入語言根據(jù)支持語言庫轉(zhuǎn)換為中間語言代數(shù)規(guī)范型。
本發(fā)明提出的所述基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)中,所述代數(shù)優(yōu)化單元包括優(yōu)化策略庫、優(yōu)化器、優(yōu)化策略定制單元。所述優(yōu)化策略庫包含:一系列策略規(guī)則,如等價(jià)性規(guī)則,用于證明程序的等價(jià)性,或?qū)Τ绦蜻M(jìn)行等價(jià)變形;簡化規(guī)則,側(cè)重于簡化程序的結(jié)構(gòu),轉(zhuǎn)化過程把一些復(fù)雜的算子消除掉,使得程序語法更為簡單,從而更方便對(duì)程序行為進(jìn)行分析;效率規(guī)則,將程序的架構(gòu)考慮在內(nèi),可以應(yīng)用代數(shù)規(guī)則轉(zhuǎn)化使得程序的形式更貼近于底層實(shí)現(xiàn)。所述優(yōu)化策略定制單元,接收用戶輸入的平臺(tái)特性、優(yōu)化指標(biāo)等特征,將上述特征轉(zhuǎn)化為優(yōu)化策略,用于所述優(yōu)化器。
本發(fā)明提出的所述基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)中,所述目標(biāo)代碼生成單元,用于將優(yōu)化過的中間代碼轉(zhuǎn)化為目標(biāo)平臺(tái)可執(zhí)行機(jī)器碼。
本發(fā)明的有益效果包括:
本發(fā)明基于形式化代數(shù)語義,所有的輸入代碼都可以在代數(shù)規(guī)則的支持下進(jìn)行等價(jià)變化。代數(shù)規(guī)則的合理性,保證了轉(zhuǎn)換的正確性。
本發(fā)明根據(jù)不同的優(yōu)化策略,可以對(duì)中間語言進(jìn)行不同程度的優(yōu)化,保證本系統(tǒng)廣泛的應(yīng)用范圍。
本發(fā)明提供半自動(dòng)化、半自動(dòng)化的程序中間代碼優(yōu)化。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1是本發(fā)明基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)框架圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施方式。雖然附圖中顯示了本公開的示例性實(shí)施方式,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施方式所限制。相反,提供這些實(shí)施方式是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
根據(jù)本發(fā)明的實(shí)施方式,提出一種基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng),所述系統(tǒng)包括:高級(jí)語言轉(zhuǎn)換單元,用于將輸入的源代碼、其他形式的中間語言轉(zhuǎn)換成為所述優(yōu)化系統(tǒng)使用的中間語言,并將輸出作為代數(shù)優(yōu)化單元的輸入;代數(shù)優(yōu)化單元,用于向用戶提供優(yōu)化策略定制,允許用戶提供目標(biāo)平臺(tái)硬件特性,定制特別的優(yōu)化策略,使用優(yōu)化策略對(duì)所述高級(jí)語言轉(zhuǎn)換單元輸出的中間語言進(jìn)行優(yōu)化,得到經(jīng)過優(yōu)化的中間代碼;優(yōu)化策略用戶定制單元,允許用戶提供目標(biāo)平臺(tái)硬件特性,定制特別的優(yōu)化策略,以便于生成高效的中間代碼,加速編譯器后端的編譯速度;目標(biāo)代碼生成單元,用于將經(jīng)過優(yōu)化的中間代碼生成目標(biāo)平臺(tái)的可執(zhí)行機(jī)器碼。
本發(fā)明提出的所述基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)中,所述高級(jí)語言轉(zhuǎn)換單元包括支持語言庫、高級(jí)語言轉(zhuǎn)換器。所述支持語言庫包括Java、C++等高級(jí)語言到中間語言的轉(zhuǎn)換規(guī)則。所述高級(jí)語言轉(zhuǎn)換器,用于將輸入語言根據(jù)支持語言庫轉(zhuǎn)換為中間語言。
本發(fā)明提出的所述基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)中,所述代數(shù)優(yōu)化單元包括優(yōu)化策略庫、優(yōu)化器、優(yōu)化策略定制單元。優(yōu)化策略庫包括一系列代數(shù)規(guī)則(通過代數(shù)等式、不等式形式來描述),如等價(jià)性規(guī)則,用于證明程序的等價(jià)性,或?qū)Τ绦蜻M(jìn)行等價(jià)變形;簡化規(guī)則,側(cè)重于簡化程序的結(jié)構(gòu),轉(zhuǎn)化過程把一些復(fù)雜的算子消除掉,使得程序語法更為簡單,從而更方便對(duì)程序行為進(jìn)行分析;效率規(guī)則,將程序的架構(gòu)考慮在內(nèi),可以應(yīng)用代數(shù)規(guī)則轉(zhuǎn)化使得程序的形式更貼近于底層實(shí)現(xiàn)。所述優(yōu)化策略定制單元,用于接收用戶輸入的平臺(tái)特性、優(yōu)化指標(biāo)等特征,將上述特征轉(zhuǎn)化為優(yōu)化策略,用于所述優(yōu)化器。
本發(fā)明提出的所述基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)中,所述目標(biāo)代碼生成單元,用于將優(yōu)化過的中間代碼轉(zhuǎn)化為目標(biāo)平臺(tái)可執(zhí)行機(jī)器碼。
下面具體講述本發(fā)明所述基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)。
實(shí)施例1
本實(shí)施例以應(yīng)用本發(fā)明基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)對(duì)LLVM中間語言的優(yōu)化為例。
LLVM是一個(gè)支持多種高級(jí)語言、多種目標(biāo)平臺(tái),多階段優(yōu)化的編譯器架構(gòu),遵循了標(biāo)準(zhǔn)的編譯器流程準(zhǔn)則,分為高級(jí)語言前端、中間代碼優(yōu)化器與后端目標(biāo)代碼生成器三個(gè)部分。LLVM前端首先將源程序轉(zhuǎn)換為LLVMIR程序,經(jīng)過一系列的控制流、數(shù)據(jù)流分析后對(duì)LLVM IR程序進(jìn)行優(yōu)化,再根據(jù)具體的目標(biāo)處理器平臺(tái)生成對(duì)應(yīng)的目標(biāo)代碼。
LLVM IR有三種形式:編譯器IR、寫入文件的字節(jié)碼IR,以及作為匯編語言的IR。這三種表現(xiàn)形式是等價(jià)的,它是LLVM中間代碼優(yōu)化段的不同表現(xiàn)形式。將LLVM IR作為高級(jí)語言轉(zhuǎn)換單元的輸入,將其轉(zhuǎn)換為本發(fā)明所述的基于代數(shù)演算的中間代碼優(yōu)化系統(tǒng)使用的中間語言程序,作為代數(shù)優(yōu)化單元的輸入。
通過對(duì)控制流與數(shù)據(jù)流的分析,目標(biāo)處理平臺(tái)的特征等信息收集,我們將提出程序轉(zhuǎn)化的定向規(guī)則,稱為程序轉(zhuǎn)換規(guī)則,從而有效地支撐LLVM IR程序的優(yōu)化,提高程序質(zhì)量,最終形成一套針對(duì)LLVM IR程序優(yōu)化的代數(shù)演算系統(tǒng),然后利用策略定制單元將代數(shù)演算系統(tǒng)存入優(yōu)化策略庫。
優(yōu)化器可以利用優(yōu)化策略對(duì)中間代碼進(jìn)行標(biāo)準(zhǔn)的標(biāo)量優(yōu)化、循環(huán)優(yōu)化以及進(jìn)程間優(yōu)化等。
目標(biāo)代碼生成單元可以根據(jù)代數(shù)優(yōu)化單元優(yōu)化過的中間代碼,來生成可在目標(biāo)平臺(tái)上高效運(yùn)行的機(jī)器碼。
下面詳細(xì)介紹使用本發(fā)明所述系統(tǒng)對(duì)LLVM IR程序進(jìn)行優(yōu)化。
首先,將LLVM IR程序輸入到本發(fā)明所述系統(tǒng)的高級(jí)語言轉(zhuǎn)換單元,本發(fā)明所述系統(tǒng)會(huì)將其轉(zhuǎn)換為一種中間語言表示形式。
然后,使用本發(fā)明所述系統(tǒng)的策略定制單元為LLVM IR制定優(yōu)化策略,優(yōu)化策略通過以下兩種方式得到:
1)對(duì)LLVM IR程序進(jìn)行控制流和數(shù)據(jù)流分析,總結(jié)出優(yōu)化目標(biāo)(如消除復(fù)雜算子、消除循環(huán)冗余等)并轉(zhuǎn)換為代數(shù)規(guī)則。對(duì)程序進(jìn)行控制流分析可以得到程序的控制流結(jié)構(gòu),得到循環(huán)結(jié)構(gòu)后可以通過把循環(huán)轉(zhuǎn)換為有限條件選擇來消除循環(huán)。此處得到的優(yōu)化規(guī)則可以為代數(shù)等式的形式,等式左邊是優(yōu)化前的結(jié)構(gòu),等式右邊是優(yōu)化后的結(jié)構(gòu)。對(duì)程序進(jìn)行到達(dá)定值數(shù)據(jù)流分析,可以得到程序中每個(gè)點(diǎn)處的變量值,因此可以對(duì)程序進(jìn)行合并已知量的優(yōu)化操作。此時(shí)優(yōu)化規(guī)則表現(xiàn)為代數(shù)等式的形式,等式左側(cè)位變量組成的表達(dá)式,而等式右側(cè)為左側(cè)表達(dá)式當(dāng)前的值,此優(yōu)化規(guī)則可減少公共表達(dá)式計(jì)算的次數(shù)。
2)對(duì)LLVM IR程序進(jìn)行大量的仿真實(shí)驗(yàn),分析實(shí)驗(yàn)結(jié)果得出優(yōu)化目標(biāo)并轉(zhuǎn)換為代數(shù)規(guī)則。不同程序的應(yīng)用場景不同,利用程序仿真可以模擬一些運(yùn)行場景,收集程序運(yùn)行時(shí)信息(CUP使用率、I/O次數(shù)、是否可并行執(zhí)行等),制定優(yōu)化方向,使得優(yōu)化更符合當(dāng)前待優(yōu)化程序的特點(diǎn)。
得到優(yōu)化策略以后,優(yōu)化器會(huì)自動(dòng)的應(yīng)用優(yōu)化策略到中間語言表示的程序上,最終達(dá)到優(yōu)化的目的。
最后,目標(biāo)代碼生成單元可以根據(jù)代數(shù)優(yōu)化單元優(yōu)化過的中間代碼,來生成可在目標(biāo)平臺(tái)上高效運(yùn)行的機(jī)器碼。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。