專利名稱:一種優(yōu)化的編譯方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)的編譯方法,具體涉及一種根據(jù)待編譯內(nèi)容 自動(dòng)優(yōu)化編譯方案的編譯方法。
背景技術(shù):
當(dāng)我們用高級(jí)語(yǔ)言書寫源程序后,通常需要將其編譯成可執(zhí)行的機(jī) 器代碼,而編譯過(guò)程有多種編譯方式可以使用,不同的編譯方式在一 定程度上決定了最終代碼的性能。 一般而言,編譯方式主要在以下三 個(gè)方面決定最終代碼的性能代碼的可調(diào)試性及編譯速度、代碼尺寸、 代碼效率。其中,代碼的可調(diào)試性及編譯速度往往做調(diào)試代碼之用, 最終的產(chǎn)品并不使用;而代碼尺寸及代碼效率就是非常重要的編譯指 標(biāo),特別是對(duì)很多低成本的嵌入式系統(tǒng),代碼尺寸及代碼效率往往與 系統(tǒng)的性能、成本密切相關(guān),故編譯過(guò)程不同編譯方式的選擇至關(guān)重 要,而不同編譯方式的側(cè)重不同,實(shí)際編譯中不能同時(shí)滿足代碼尺寸 最小和運(yùn)行速度最快兩個(gè)最優(yōu)指標(biāo),只能選擇其一。同時(shí),由于編譯 過(guò)程和運(yùn)行過(guò)程的分離,編譯時(shí)編譯器無(wú)法得到各部分代碼運(yùn)行時(shí)占 用時(shí)間的信息,故現(xiàn)有技術(shù)中對(duì)編譯方式的選擇多由程序員人為指定 的,為了達(dá)到代碼效率與代碼尺寸的平衡,程序員需要能夠人工區(qū)分代 碼的耗時(shí)部分和體積較大的部分,并同時(shí)要對(duì)這兩個(gè)部分指定編譯方 式,這個(gè)過(guò)程需要花費(fèi)精力,也比較繁瑣。如何在滿足用戶給定的編 譯指標(biāo)的前提下,自動(dòng)兼顧其它指標(biāo),即在代碼尺寸、代碼效率等不 同性能間進(jìn)行自動(dòng)優(yōu)化與平衡,是編譯過(guò)程中需要解決的問(wèn)題
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中編譯程序不能自動(dòng)優(yōu)化的問(wèn)題,本發(fā)明根據(jù)編譯過(guò)程 的特點(diǎn),通過(guò)在編譯過(guò)程中引入典型運(yùn)算實(shí)例,提出了一個(gè)新的解決方案。
根據(jù)本發(fā)明,提供了一種編譯方法,該方法包括下述步驟分別以 最優(yōu)尺寸和最優(yōu)速度為目標(biāo)編譯源程序;運(yùn)用典型運(yùn)算實(shí)例分別運(yùn)行 所述最優(yōu)尺寸和最優(yōu)速度的編譯結(jié)果;根據(jù)用戶給定的編譯指標(biāo),綜 合分析程序中各函數(shù)在所述不同編譯結(jié)果中的代碼尺寸和運(yùn)行時(shí)間, 確定各函數(shù)的優(yōu)選編譯方式;將源程序的各函數(shù)按所述確定的優(yōu)選編 譯方式編譯,得到最終的可執(zhí)行代碼。
可選的是,上述用戶給定的編譯指標(biāo)為代碼尺寸,所述綜合分析 步驟包括計(jì)算得出各函數(shù)在最優(yōu)尺寸和最優(yōu)速度的兩種編譯方式下, 增加單位代碼尺寸所節(jié)省的時(shí)間,排列出適合最優(yōu)速度編譯方式的函 數(shù)的先后順序;計(jì)算所述的用戶給定的代碼尺寸與最優(yōu)尺寸編譯方式 下的差值,確定使用代碼速度優(yōu)化函數(shù)能夠增加的空間余量;以及,按 照所述的適合最優(yōu)速度編譯方式的函數(shù)的先后順序,依次判斷各能否 在滿足用戶給定的代碼尺寸的前提下,采用最優(yōu)速度的編譯方式,直至 所述的代碼速度的優(yōu)化空間余量用盡。
可選的是,上述用戶給定的編譯指標(biāo)為運(yùn)行時(shí)間,所述綜合分析 步驟包括計(jì)算得出各函數(shù)在最優(yōu)尺寸和最優(yōu)速度的兩種編譯方式下, 增加單位時(shí)間所節(jié)省的代碼尺寸,排列出適合最優(yōu)尺寸編譯方式的函 數(shù)的先后順序;計(jì)算所述的用戶給定的運(yùn)行時(shí)間與最優(yōu)速度編譯方式 下的差值,確定使用代碼尺寸優(yōu)化函數(shù)所能增長(zhǎng)的時(shí)間;以及,按照所 述的適合最優(yōu)尺寸編譯方式的函數(shù)的先后順序,依次判斷各能否在滿 足用戶給定的運(yùn)行時(shí)間的前提下,采用最優(yōu)尺寸的編譯方式,直至所述 的代碼尺寸的優(yōu)化時(shí)間余量用盡。
可選的是,上述的典型運(yùn)算實(shí)例由用戶根據(jù)該程序的目的確定。
本發(fā)明由于在編譯過(guò)程中引入了典型運(yùn)算實(shí)例,使得程序運(yùn)行的精確 速度在編譯中即可得到的,改變了現(xiàn)有技術(shù)的編譯時(shí)無(wú)法知道運(yùn)行的精確時(shí)間,同時(shí),編譯過(guò)程通過(guò)執(zhí)行這個(gè)典型運(yùn)算實(shí)例來(lái)自行判斷程序的各個(gè) 函數(shù)的不同優(yōu)化方向,選擇各函數(shù)的優(yōu)選編譯方式,以達(dá)到代碼尺寸與代 碼效率的最佳平衡。
需要說(shuō)明的是,本發(fā)明的上述方法中求得的是近似最優(yōu)解,但方法簡(jiǎn) 單且速度快,能夠滿足實(shí)際工作需要。
下文將參照附圖對(duì)本發(fā)明的具體實(shí)施方案進(jìn)行更詳細(xì)的舉例說(shuō)明, 其中-
圖1是本發(fā)明的編譯方法流程圖2是本發(fā)明的具體實(shí)施例一的綜合分析步驟的流程圖; 圖3是本發(fā)明的具體實(shí)施例二的綜合分析步驟的流程圖。
具體實(shí)施例方式
圖l是本發(fā)明的編譯方法流程圖。如圖所示,當(dāng)程序員使用高級(jí)語(yǔ)言 編寫完源程序后,分別使用最優(yōu)尺寸和最優(yōu)速度兩種方式編譯,得到 兩個(gè)可執(zhí)行的編譯結(jié)果;根據(jù)用戶給定的典型運(yùn)算實(shí)例分別執(zhí)行上述 兩個(gè)編譯結(jié)果,所謂典型運(yùn)算實(shí)例由用戶根據(jù)該程序的目的確定,例 如對(duì)于一個(gè)MP3的解碼程序, 一個(gè)MP3編碼文件就是一個(gè)典型的運(yùn)算實(shí)
例;執(zhí)行完畢后,記錄下在每種編譯方式下各函數(shù)的運(yùn)行時(shí)間和代碼 尺寸;然后進(jìn)行綜合分析,根據(jù)用戶的要求,即用戶給定的代碼尺寸 或運(yùn)行時(shí)間,以函數(shù)為單位進(jìn)行綜合分析,確定每個(gè)函數(shù)優(yōu)選的編譯 方式,即對(duì)該函數(shù)采用最優(yōu)尺寸還是最優(yōu)速度編譯方式;最后,根據(jù) 上述確定的各函數(shù)的優(yōu)選編譯方式編譯源程序,得到最終的可執(zhí)行代 碼。
圖2是本發(fā)明的具體實(shí)施例一的綜合分析步驟的流程圖,本實(shí)施例中 用戶給定的指標(biāo)為代碼尺寸。如圖所示,綜合分析步驟是根據(jù)用戶給 定的指標(biāo),綜合分析程序中各函數(shù)的在不同編譯結(jié)果中的運(yùn)行指標(biāo),包括該函數(shù)的代碼尺寸和運(yùn)行時(shí)間,最后確定各函數(shù)的優(yōu)選編譯方式, 即找出哪些函數(shù)在主要編譯目標(biāo)是代碼尺寸的前提下,更適合采用最 優(yōu)速度的編譯方式,以實(shí)現(xiàn)代碼的尺寸和速度的兼顧優(yōu)化。
本實(shí)施例中,用戶輸入給定的指標(biāo)為代碼尺寸&e,首先需要將各函 數(shù)按照適合最優(yōu)速度編譯方式的先后進(jìn)行排序,通過(guò)比較各函數(shù)在最 優(yōu)尺寸和最優(yōu)速度的兩種編譯方式下,增加單位代碼尺寸所節(jié)省的時(shí) 間即可得到該排序。如圖所示,整個(gè)源代碼中有^個(gè)需要確認(rèn)編譯效率 的函數(shù),分為編號(hào)為1,2,3,L j,在最優(yōu)體積方式編譯下,每個(gè)函數(shù)的代 碼大小分別為&,&,L 運(yùn)行典型運(yùn)算實(shí)例的時(shí)間分別為 rCp7b2,L ,T^;在最優(yōu)速度方式編譯下,每個(gè)函數(shù)的代碼大小分別為 ^,&,L,&,運(yùn)行典型運(yùn)算實(shí)例的時(shí)間分別為7^,7^,L,T^,計(jì)算 S =& -^ ,7>2V7V ,然后計(jì)算尸 = ;/&, P"即代表了序號(hào)為"的函數(shù)增 加單位代碼尺寸所節(jié)省的運(yùn)行時(shí)間,P"越大,代表這個(gè)函數(shù)在增加相同 的代碼尺寸的前提下,能夠節(jié)省更多的運(yùn)行時(shí)間,故該函數(shù)更加適合采 用最優(yōu)速度的編譯方式。根據(jù)上述步驟中得到了各函數(shù)的編碼效率P。, 然后根據(jù)用戶給定的代碼尺寸&e,確定各函數(shù)的優(yōu)選編譯方式。將上 述4A,L P,這X個(gè)數(shù)值從大到小排序,得到其順序排列為&込L仏即
Q2込2L2仏,其對(duì)應(yīng)關(guān)系為從1,2,3,L ,X到1,2,3,L ,Z的--映射/,即
gm =尸/(—(附=1,2山,爿)。
其次,考慮可進(jìn)行代碼速度優(yōu)化的空間,即計(jì)算所述的用戶給定的 代碼尺寸與最優(yōu)尺寸編譯方式下的差值。根據(jù)用戶輸入的期望^e大
小,計(jì)算£"&-|:&,,丄越大表明可供優(yōu)化代碼速度的空間越大,同
時(shí)本實(shí)施例中設(shè)tf—空集合5 ,用于記錄優(yōu)選編譯方式為最優(yōu)速度的函 數(shù)。然后,按照上述適合最優(yōu)速度編譯方式的函數(shù)的先后順序,依次 判斷各能否在滿足用戶給定的代碼尺寸的前提下,采用最優(yōu)速度的編 譯方式。首先令循環(huán)變量/ = 1,判斷關(guān)系式Z2S,是否成立,如成立, S朋,并將數(shù)值/(z')放入到集合5中,將/加1,重復(fù)本句的過(guò)程,直到/>^時(shí)退出。則序號(hào)在集合5中函數(shù)使用最優(yōu)速度方式編譯,而其 他函數(shù)則使用最優(yōu)尺寸方式編譯。
圖3是本發(fā)明的具體實(shí)施例二的綜合分析步驟的流程圖,本實(shí)施例中
用戶給定的指標(biāo)為運(yùn)行時(shí)間。如圖所示,本實(shí)施例比較上述實(shí)施例,
僅綜合分析步驟的有所區(qū)別,故此處僅就區(qū)別部分展開說(shuō)明。
本實(shí)施例中,用戶輸入給定的指標(biāo)為運(yùn)行時(shí)間^"首先需要將各 函數(shù)按照適合最優(yōu)尺寸編譯方式的先后進(jìn)行排序,通過(guò)比較各函數(shù)在 最優(yōu)速度和最優(yōu)尺寸的兩種編譯方式下,增加單位代碼時(shí)間所節(jié)省的 尺寸即可得到該排序。如圖所示,整個(gè)源代碼中有^個(gè)需要確認(rèn)編譯效 率的函數(shù),分為編號(hào)為1,2,3,L,X,在最優(yōu)速度方式編譯下,每個(gè)函數(shù)的 代碼大小分別為^,&,L ,&r運(yùn)行典型運(yùn)算實(shí)例的時(shí)間分別為 ",7^,L,7^;在最優(yōu)體積方式編譯下,每個(gè)函數(shù)的代碼大小分別為 SCl,&2,L,&,,運(yùn)行典型運(yùn)算實(shí)例的時(shí)間分別為rc,,7^,L,T^,計(jì)算
s =& -& ,r = 7vre ,然后計(jì)算尸 = ;/5 ,《即代表了序號(hào)為"的函數(shù)增
加單位代碼尺寸所節(jié)省的運(yùn)行時(shí)間,p。越小,代表這個(gè)函數(shù)在增加相同 的運(yùn)行時(shí)間的前提下,能夠節(jié)省更多的代碼尺寸,故該函數(shù)更加適合采 用最優(yōu)尺寸的編譯方式。根據(jù)上述步驟中得到了各函數(shù)的編碼效率p",
然后根據(jù)用戶給定的運(yùn)行時(shí)間"m"確定各函數(shù)的優(yōu)選編譯方式。將上
述A,P2,L P,這^個(gè)數(shù)值從小到大排序,得到其順序排列為e、,込L仏即
Q^"LS仏,其對(duì)應(yīng)關(guān)系為從1,2,3,L j到l,2,3,L j的一一映射/,即 0 =尸/( 0(附=1,2山,牟
其次,考慮可進(jìn)行代碼尺寸優(yōu)化的空間,即計(jì)算所述的用戶給定的 運(yùn)行時(shí)間與最優(yōu)速度編譯方式下的運(yùn)行時(shí)間的差值。根據(jù)用戶輸入的
期望"me大小,計(jì)算尺="歴-|:",尺越大表明可供優(yōu)化代碼速度的空
間越大,同時(shí)本實(shí)施例中設(shè)rf1—空集合5,用于記錄優(yōu)選編譯方式為最 優(yōu)尺寸的函數(shù)。然后,按照上述適合最優(yōu)尺寸編譯方式的函數(shù)的先后 順序,依次判斷各能否在滿足用戶給定的運(yùn)行時(shí)間的前提下,采用最優(yōu)尺寸的編譯方式。首先令循環(huán)變量/ = 1,判斷關(guān)系式《27>(,)是否成立, 如成立,令《=《-7>(,),并將數(shù)值/(0放入到集合5中,將/加l,重復(fù)本 句的過(guò)程,直到/>^4時(shí)退出。則序號(hào)在集合S中函數(shù)使用最優(yōu)尺寸方式 編譯,而其他函數(shù)則使用最優(yōu)速度方式編譯。
應(yīng)當(dāng)說(shuō)明的是,以上描述旨在說(shuō)明本發(fā)明的具體實(shí)施方案,不能 理解為對(duì)本發(fā)明的限制,本發(fā)明所要求保護(hù)的范圍僅由權(quán)利要求書進(jìn)
行限制。
權(quán)利要求
1、一種編譯方法,其特征在于,所述方法包括下述步驟分別以最優(yōu)尺寸和最優(yōu)速度為目標(biāo)編譯源程序;運(yùn)用典型運(yùn)算實(shí)例分別運(yùn)行所述最優(yōu)尺寸和最優(yōu)速度的編譯結(jié)果;根據(jù)用戶給定的編譯指標(biāo),綜合分析程序中各函數(shù)在所述不同編譯結(jié)果中的代碼尺寸和運(yùn)行時(shí)間,確定各函數(shù)的優(yōu)選編譯方式;以及,將源程序的各函數(shù)按所述確定的優(yōu)選編譯方式編譯,得到最終的可執(zhí)行代碼。
2、 根據(jù)權(quán)利要求l所述的編譯方法,其特征在于,所述用戶給 定的編譯指標(biāo)為代碼尺寸,所述綜合分析步驟包括-計(jì)算得出各函數(shù)在最優(yōu)尺寸和最優(yōu)速度的兩種編譯方式下,增加單 位代碼尺寸所節(jié)省的時(shí)間,排列出適合最優(yōu)速度編譯方式的函數(shù)的先 后順序;計(jì)算所述的用戶給定的代碼尺寸與最優(yōu)尺寸編譯方式下的空間差值, 確定使用代碼速度優(yōu)化能夠增加的空間余量;以及,按照所述的適合最優(yōu)速度編譯方式的函數(shù)的先后順序,依次判斷各 個(gè)函數(shù)能否在滿足用戶給定的代碼尺寸的前提下,采用最優(yōu)速度的編 譯方式,直至所述的代碼速度的優(yōu)化空間余量用盡。
3、 根據(jù)權(quán)利要求l所述的編譯方法,其特征在于,所述用戶給 定的編譯指標(biāo)為運(yùn)行時(shí)間,所述綜合分析步驟包括計(jì)算得出各函數(shù)在最優(yōu)尺寸和最優(yōu)速度的兩種編譯方式下,增加單 位代碼尺寸所節(jié)省的時(shí)間,排列出適合最優(yōu)尺寸編譯方式的函數(shù)的先 后順序;計(jì)算所述的用戶給定的運(yùn)行時(shí)間與最優(yōu)速度編譯方式下的時(shí)間差值, 確定使用代碼尺寸優(yōu)化能夠增加的時(shí)間余量;以及,按照所述的適合最優(yōu)尺寸編譯方式的函數(shù)的先后順序,依次判斷各 個(gè)函數(shù)能否在滿足用戶給定的運(yùn)行時(shí)間的前提下,采用最優(yōu)尺寸的編 譯方式,直至所述的代碼尺寸的優(yōu)化時(shí)間余量用盡。
4、根據(jù)權(quán)利要求l所述的編譯方法,其特征在于,所述的典型運(yùn)算實(shí)例由用戶根據(jù)該程序的目的確定。
全文摘要
本發(fā)明披露了一種優(yōu)化的編譯方法,該方法包括下述步驟分別以最優(yōu)尺寸和最優(yōu)速度為目標(biāo)編譯源程序;運(yùn)用典型運(yùn)算實(shí)例分別運(yùn)行所述最優(yōu)尺寸和最優(yōu)速度的編譯結(jié)果;根據(jù)用戶給定的編譯指標(biāo),綜合分析程序中各函數(shù)在所述不同編譯結(jié)果中的代碼尺寸和運(yùn)行時(shí)間,確定各函數(shù)的優(yōu)選編譯方式;將源程序的各函數(shù)按所述確定的優(yōu)選編譯方式編譯,得到最終的可執(zhí)行代碼。本發(fā)明由于在編譯過(guò)程中引入了典型運(yùn)算實(shí)例,實(shí)現(xiàn)了編譯過(guò)程中代碼尺寸與代碼效率的最佳平衡。
文檔編號(hào)G06F9/44GK101551748SQ200910077258
公開日2009年10月7日 申請(qǐng)日期2009年1月21日 優(yōu)先權(quán)日2009年1月21日
發(fā)明者巖 史 申請(qǐng)人:北京海爾集成電路設(shè)計(jì)有限公司