国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      編譯系統(tǒng)以及編譯方法

      文檔序號:6488841閱讀:319來源:國知局
      編譯系統(tǒng)以及編譯方法
      【專利摘要】本發(fā)明提供對一程序碼庫進(jìn)行離線靜態(tài)分析的技術(shù),來建立專為那程序碼庫特制的一編譯器以及一些工具。本發(fā)明在此所揭示的技術(shù),可以讓此程序庫碼的總體資訊可以在編譯過程中,早點(diǎn)被采用,以便讓最佳化比較可能有更好的結(jié)果。此離線靜態(tài)分析可以產(chǎn)生一些特制化編譯組件,以便用來重建編譯器。這樣,隨著時(shí)間的演進(jìn),就可以得到專為此程序碼庫所特制的一編譯器。此編碼器在每次重建完成后,都會得到比較好的最佳化效果,而且也能繼續(xù)保持有效率的編碼時(shí)間。
      【專利說明】編譯系統(tǒng)以及編譯方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明相關(guān)于編譯(compilation)與軟件程序的最佳化(optimization),尤指對一程序碼庫(code base)進(jìn)行離線靜態(tài)分析,來重建一編譯器,使其特別適用于該程序碼庫的方法。如此,可以讓此程序碼庫的一些資訊可以在編譯過程中,早點(diǎn)被采用。好處是可以改善最佳化的效果,降低編譯所需的時(shí)間,也可以減少軟件開發(fā)所需的時(shí)間。
      【背景技術(shù)】
      [0002]編譯器是電腦程序的一種,可以將高階程序語言所寫的原始碼,轉(zhuǎn)換成另一種低階程序語言,最終目的是產(chǎn)生一電腦可執(zhí)行的程序。這里的低階程序語言一般指的是組合語言或是機(jī)械碼。在轉(zhuǎn)換高階程序語言的過程中,編譯器會判定原始碼語法上的正確性,產(chǎn)生目的碼的有效執(zhí)行時(shí)間組織(efficient run-time organization),并且依據(jù)連接器或是組合語言的規(guī)定,將輸出的檔案格式化。
      [0003]軟件程序的編譯大致上是先將軟件的每個(gè)原始碼檔案,或是依據(jù)原始碼格式所寫的每個(gè)物件,個(gè)別地經(jīng)過一編譯器,來編譯成許多個(gè)處理器可執(zhí)行的原生(native)檔案或是機(jī)械碼(machine code)檔案。這些原生或是機(jī)械碼檔案接著將由一連結(jié)器處理,一起合并組合成為一完整的可執(zhí)行程序。一個(gè)編譯器可以執(zhí)行以下所有的或是部分的動(dòng)作:語匯分析(lexical analysis)、前置處理(preprocessing)、語法分析(parsing)、語意分析(semantic analysis)、程序碼產(chǎn)生(code generation)、以及程序碼最佳化(codeoptimization)。
      [0004]調(diào)整編譯器的輸出以最小化或最大化所產(chǎn)生的可執(zhí)行程序的一些屬性,其所需要的程序,一般稱為程序碼最佳化。最常見的一些程序碼最佳化的目的,舉例來說,是將執(zhí)行程序所需的時(shí)間最短化,或是將執(zhí)行程序所要占用的存儲器量最小化。編譯器最佳化(compiler optimization)通常是以一連串的最佳化轉(zhuǎn)換(optimizing transformation)來實(shí)現(xiàn)。每個(gè)最佳化轉(zhuǎn)換其實(shí)都是一種演算法(algorithm),可以將一個(gè)程序轉(zhuǎn)換成語意上等同且占用比較少資源的另一個(gè)程序。
      [0005]一種將可執(zhí)行程序最佳化的已知作法,是讓編譯器對當(dāng)下編譯的單一目的檔,在編譯的過程中,施行所有的最佳化轉(zhuǎn)換。舉例來說,一些編譯器所執(zhí)行的最佳化操作包含有,基礎(chǔ)類別結(jié)合(base binding)、函數(shù)復(fù)制(function cloning)、以及部份求值(partialevaluation)。
      [0006]然而,以上所述的方法,每個(gè)目的碼檔案都是個(gè)別地被編譯器編譯而產(chǎn)生,所以都會碰到無法全域地知道整個(gè)程序狀況的問題。這也意味著,許多在編譯過程中執(zhí)行的最佳化轉(zhuǎn)換操作,其實(shí)是需要一些在連結(jié)許多個(gè)目的碼檔案時(shí)才能夠獲悉的資訊。因此,盡管一編譯器可以仰賴某一部分特別片段資訊來執(zhí)行一最佳化轉(zhuǎn)換操作,此編譯器無法得知并利用整個(gè)程序的總體特性(舉例來說,操作碼的分布情形、指令序列出現(xiàn)的頻繁程度等),來達(dá)到真正的最佳化。
      [0007]連結(jié)時(shí)間最佳化(link-time optimization),其施行的時(shí)機(jī)在于當(dāng)程序的總體特性為已知,在連結(jié)操作時(shí),對被編譯的程序進(jìn)行處理的一種已知程序最佳化方案。因?yàn)檫B結(jié)的主要目的是要連結(jié)并合并所有的目的碼檔案,以成為一單一可執(zhí)行檔案,所以此時(shí)可以得知整個(gè)程序的總體特性。連結(jié)時(shí)間最佳化可以對新連結(jié)成的檔案,進(jìn)行各式各樣的最佳化處理。連結(jié)時(shí)間最佳化也可牽涉到重新編譯整個(gè)程序,只不過,這樣的方式將會消耗大量的運(yùn)算處理。
      [0008]另一種已知的最佳化方案稱為跨程序最佳化(interprocedural optimization,IPO),其亦有能力分析整個(gè)程序。IPO采用一些傳統(tǒng)的最佳化技巧,像是”行內(nèi)化”(inline)程序、跨程序死碼刪除(interprocedural dead code elimination)、跨程序常數(shù)傳遞(constant propagation)、程序重組(procedure reordering)等等技巧,來嘗試降低或是刪除掉重復(fù)出現(xiàn)的運(yùn)算、改善存儲器的使用、并簡化回圈步驟。IPO的動(dòng)作可以在編譯過程中的任何一個(gè)階段進(jìn)行,也可以當(dāng)作連結(jié)時(shí)間最佳化的一部分。
      [0009]以上這些最佳化方案,都無法同時(shí)兼顧到I)快速的編譯時(shí)間與連結(jié)時(shí)間;以及2)較積極的程序總體最佳化。

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

      [0010]在此所揭示的技術(shù)提供了對一程序碼庫(code base)進(jìn)行離線靜態(tài)分析的技術(shù),來建立專為那程序碼庫所特制的一編譯器以及一些工具。先前技術(shù)中的最佳化方案往往因?yàn)槿狈υ摮绦虼a庫的總體資訊,所以無法有效地發(fā)揮效能。如果采用比較積極的最佳化方案,已知技術(shù)也會遭受過長的編譯時(shí)間的問題。本發(fā)明在此所揭示的技術(shù),可以讓此程序碼庫的一些總體資訊可以在編譯過程中,早點(diǎn)被采用,以便讓最佳化比較可能有更好的結(jié)果。舉例來說,可以在暫存器配置之前,就先找出一些共用的子序列,這樣,子序列才可能可以再利用;否則,因?yàn)檫@些共用子序列使用了不同的暫存器,將會被認(rèn)為是不同的子序列。當(dāng)先前技術(shù)已經(jīng)到了極限時(shí),本發(fā)明所提供的技術(shù)可能可以更進(jìn)一步地縮小所產(chǎn)生的目的碼檔案大小。
      [0011]舉例來說,編譯器編譯當(dāng)下程序碼庫的建構(gòu)過程中,編譯器內(nèi)的工具鏈(toolschain)會產(chǎn)生許多訊息,而靜態(tài)自動(dòng)分析依據(jù)這些資訊,來找出當(dāng)下程序碼庫中,一些可以重復(fù)使用的碼樣式(pattern)。以通用公共授權(quán)條款(GNU)的編譯器套件(GNU compilercollection)為例,靜態(tài)自動(dòng)分析先找出一些共用序列,然后產(chǎn)生組合源碼(assemblersource code)、區(qū)間程序碼樣式(peephole pattern)、以及C語言支援源碼,其中,組合源碼將給予庫存函數(shù)(library functions)所使用,區(qū)間程序碼樣式將會用來檢測應(yīng)用程序碼中的子序列(subsequence code)。靜態(tài)自動(dòng)分析程序收集這些資訊,來建構(gòu)一些特制化的編譯組件。這些特制化編譯組件可以用來重建既有的編譯器與編譯程序庫。
      [0012]此外,靜態(tài)自動(dòng)分析程序也收集函數(shù)呼叫行的位置與出現(xiàn)次數(shù)的相關(guān)資料,以及一些在之后編譯過程中可能可以用來協(xié)助判定的一些程序架構(gòu)資訊。
      [0013]在之后的編譯過程中,這個(gè)特制的編譯器,可供找出共用序列的出現(xiàn)位置,針對這些共用序列發(fā)出對應(yīng)的程序庫呼叫,并且運(yùn)用既有的最佳化動(dòng)作,來持續(xù)地最佳化編譯程序庫呼叫中的程序碼檔案。
      [0014]這種在編譯過程中找出可重復(fù)使用的碼樣式的方法,對于整個(gè)編譯與連結(jié)時(shí)間上,僅僅會增加一點(diǎn)點(diǎn)的時(shí)間成本;但是,這方法卻可以讓碼樣式的比對,能夠脫離暫存器配置所可能產(chǎn)生的限制。當(dāng)下程序庫碼的基礎(chǔ)架構(gòu),可以用來做碼樣式的辨認(rèn),以及更進(jìn)一步的最佳化?!緦@綀D】

      【附圖說明】
      [0015]圖1顯示已知一編譯程序的流程圖。
      [0016]圖2顯示依據(jù)本發(fā)明所實(shí)施的一編譯程序流程圖。
      [0017]圖3為整個(gè)程序的靜態(tài)分析的流程圖。
      [0018]圖4顯示編譯器重建的流程圖。
      [0019]主要元件符號說明
      [0020]100編譯程序
      [0021]110原始碼檔案
      [0022]120編譯器
      [0023]130、140 目的碼檔案
      [0024]150連結(jié)器
      [0025]160連結(jié)時(shí)間最佳化
      [0026]170可執(zhí)行程序
      [0027]200編譯程序流程
      [0028]210原始碼檔案
      [0029]220最佳化編譯器
      [0030]230中介表示
      [0031]240靜態(tài)分析
      [0032]250特制函數(shù)程序庫
      [0033]260特制化編譯組件
      [0034]270最佳化編譯器重建程序
      [0035]280目的碼檔案
      [0036]285連結(jié)器
      [0037]290可執(zhí)行程序
      [0038]310語法分析器
      [0039]320共用子序列
      [0040]330子序列庫
      [0041]340程序碼轉(zhuǎn)換規(guī)則
      [0042]350最佳化動(dòng)作效果檢查
      [0043]360快速模式管理程序
      [0044]410手寫程序碼轉(zhuǎn)換規(guī)則
      [0045]420指令集架構(gòu)敘述
      [0046]430機(jī)械語法分析器
      [0047]440客制化編譯組件
      [0048]450手寫原始碼【具體實(shí)施方式】
      [0049]本發(fā)明提供了對一程序碼庫(code base)進(jìn)行離線靜態(tài)分析的技術(shù),可以讓此程序碼庫的總體資訊提早在編譯過程中被采用,以改善最佳化的結(jié)果。離線靜態(tài)分析可以產(chǎn)生一些特制化編譯組件,以便用來重建編譯器。這樣,隨著時(shí)間的演進(jìn),就可以得到專為此程序碼庫所特制的一編譯器。此編譯器在每次建構(gòu)完成后,都會得到比較好的最佳化效果,而且也能繼續(xù)保持有效率的編碼時(shí)間。當(dāng)然的,重新建構(gòu)與產(chǎn)出此編譯器的流程,需要定期地、周期性地執(zhí)行,如此,才能夠隨著此程序碼庫的改變或演變,有機(jī)會來定期地更新此程序碼庫的總體資訊。
      [0050]圖1顯示已知一編譯程序100的流程圖。編譯一個(gè)軟件程序時(shí),傳統(tǒng)上是讓軟件程序的每個(gè)原始碼檔案110,或是每個(gè)用原始碼格式所撰寫的物件,個(gè)別地經(jīng)過編譯器120編譯成相對應(yīng)的一個(gè)處理器可執(zhí)行的原生或是機(jī)械碼檔案,也就是一個(gè)目的碼檔案130。接著,連結(jié)器150可以運(yùn)用連結(jié)時(shí)間最佳化160,來接手處理這些目的碼檔案130與140,把他們連結(jié)在一起以成為一可執(zhí)行程序170。然而,這樣傳統(tǒng)的編譯器并無法宏觀地知道或是運(yùn)用整體程序的全域特性(global property),因?yàn)槊總€(gè)目的碼檔案都是個(gè)別地被編譯器編譯而產(chǎn)生。盡管連結(jié)器能夠看到整個(gè)程序在編譯后的全域特性,要運(yùn)用這樣全域特性來最佳化程序碼的話,可能需要重新編譯,讓最佳化動(dòng)作變得非常多且復(fù)雜。
      [0051]圖2顯示依據(jù)本發(fā)明所實(shí)施的一編譯程序流程200,其中有采用整體程序分析的編譯程序以及對編譯器重新建構(gòu)。整體程序分析用來產(chǎn)生一的特制的編譯器,特別適用于當(dāng)下的穩(wěn)定程序庫碼。而這個(gè)編譯器可以當(dāng)作下一次程序碼開發(fā)程序循環(huán)中所使用的最佳化編譯器。
      [0052]在每一次程序碼開發(fā)程序循環(huán)中,最佳化編譯器220編譯原始碼檔案210,而且最佳化編譯器220也會收集關(guān)于原始碼檔案的一些可以在之后用來最佳化目的碼檔案的資訊,像是語意、結(jié)構(gòu)、流程等等資訊。編譯器產(chǎn)生編譯后的目的碼檔案280,也產(chǎn)生了對應(yīng)目的碼檔案280的,被編譯后編碼的中介表示230。中介表示230是原本的原始碼檔案的一種編譯結(jié)果,只是其所使用的程序語言與適用的硬件,跟原本的原始碼檔案所使用的不一樣。
      [0053]在本發(fā)明的一實(shí)施例中,中介表示230使用的程序語言是GCC暫存器轉(zhuǎn)換語言(Register Transfer Language, RTL)。以 GCC RTL 實(shí)現(xiàn)較高階程序語言指令時(shí),GCC RTL詳細(xì)說明了所需要的操作、暫存器之間的通訊以及相關(guān)步驟發(fā)生的時(shí)間點(diǎn)。這種以RTL表示,經(jīng)由整個(gè)程序庫碼編譯后所產(chǎn)生的中介表示,將會作為整個(gè)程序的靜態(tài)分析240的輸入。在其他實(shí)施例中,中介表示所采用的程序語言,將會視原始碼檔案的程序語言,以及所要特制的編譯器的需求而決定。
      [0054]整體碼庫的全部程序的靜態(tài)分析240是在編譯器具有全域視野的時(shí)候執(zhí)行。這個(gè)自動(dòng)化分析從中介表示230中找出一些共用序列(common code sequences),決定用來代表每個(gè)共用序列的”辭庫”,或是一組最有效率的組合,以使整個(gè)程序的大小最佳化。全部程序的靜態(tài)分析240接著產(chǎn)生組合源碼(assembler source code)以及程序碼轉(zhuǎn)換規(guī)則(code transformation specifications)。組合源碼用在特制化的函數(shù)程序庫250中,以運(yùn)用共用子序列。程序碼轉(zhuǎn)換規(guī)則是以特制化編譯組件260的形式所構(gòu)成。特制化函數(shù)程序庫250跟編譯組件260中都有程序序列的外顯資訊(explicit knowledge)。這些外顯資訊為被預(yù)期存在于程序碼庫中。特制化函數(shù)程序庫250會用來擴(kuò)增連結(jié)器程序庫(linkerlibraries)。之后,在下次的編譯循環(huán),當(dāng)連結(jié)器285連結(jié)編譯后的目的碼檔案280時(shí)來產(chǎn)生一完整的可執(zhí)行程序290時(shí),連結(jié)器285將使用這更新過的連結(jié)器程序庫。
      [0055]特制化編譯組件260具有區(qū)間程序碼轉(zhuǎn)換規(guī)則(pe印hole code)以及指令樣式(instruction patterns)。這些特制化編譯組件260用來重建特制化的編譯器(步驟270),使此最佳化編譯器220可以立即的辨識出、并置換程序碼庫中所出現(xiàn)的共用子序列。所以,在之后對于程序碼庫的原始碼檔案210的編譯循環(huán)過程中,此被重建的特制化編譯器220被當(dāng)作最佳化的編譯器對程序碼庫中的原始碼檔案210進(jìn)行編譯。
      [0056]圖3為整個(gè)程序的靜態(tài)分析240的流程圖,用來產(chǎn)生特制化編譯組件。語法分析器(parser)310會將編譯器的中介表示230重整,以符合之后可以運(yùn)用的一種格式。共用子序列320可以采用既有的演算法來辨識出來,以便縮小容納整個(gè)可執(zhí)行程序所需要的存儲器大小。舉例來說,演算法可以采用S.Liao and Kurt Keutzler在1998年所發(fā)表的〃Code Density Optimization for Embedded DSP Processors Using Data CompressionTechniques”。另外,子序列庫程序(subsequence library routines)以及具有呼叫那些程序的程序內(nèi)文,也可用一樣的技術(shù)辨識出來。如此,就可以產(chǎn)生由共用子序列320所構(gòu)成的集合或是”辭庫”,而且以中介表示的程序語言來表示。因?yàn)檫@個(gè)過程只有在要重新建構(gòu)特制化編譯器的當(dāng)下才會執(zhí)行,所以可以采用比較積極,甚至比較耗時(shí)的最佳化技巧,來找出最理想辭庫。
      [0057]如同"CodeDensity Optimization for Embedded DSP Processors Using DataCompression Techniques”中所提及的,選擇最理想辭庫這樣的問題,可以視為集合涵蓋程度的問題(set cover problem)的一種。盡管這樣的問題之前已經(jīng)有在程序壓縮的文獻(xiàn)中采用線性規(guī)劃放松模型(linear programming relaxation)來解決,也可能可以用其他比較耗損處理器時(shí)間的方法,來找出最理想辭庫。
      [0058]本發(fā)明的實(shí)施例可以采用基因演算法(Genetic algorithm)的技巧,來找出最理想的辭庫。舉例來說,Wen-Chih Huang, Cheng-Yan Kao and Jorn-Tzong Horng 所發(fā)表的"A Genetic Algorithm Approach for Set Covering Problems"。對一些程序庫碼而言,本發(fā)明的一實(shí)施例也可以采用分支界定法(branch-and-bound)的技巧,來作為找出最理想辭庫的一種解法。
      [0059]對于每一個(gè)共用子序列,實(shí)現(xiàn)這共用子序列的組合語言碼被產(chǎn)生出來,然后放置在子序列庫(subsequence library) 330 中。這子序列庫(subsequence library)330 之后會加到連結(jié)器所使用的連結(jié)器程序庫(linker libraries)中,用來擴(kuò)增連結(jié)器程序庫(linker libraries)。程序石馬轉(zhuǎn)換規(guī)則(code transformation specifications)與編譯程序庫請求(library call)也產(chǎn)生出來。程序碼轉(zhuǎn)換規(guī)則(code transformationspecifications) 340指出在甚么樣的條件下,程序樣式符合了共用子序列的樣式。編譯程序庫請求則是用來取代共用子序列。
      [0060]任何出現(xiàn)在連結(jié)器程序庫(linker libraries)中,但是最后可能因?yàn)槌绦驇齑a的變更等原因,而沒有被用到的子序列,將在連結(jié)時(shí)間(link time)終了時(shí),用一般的連結(jié)器函數(shù)刪除(linker function elimination)方法,從連結(jié)器程序庫中移除。
      [0061]程序碼轉(zhuǎn)換規(guī)則有兩個(gè)主要部分:樣式部分(pattern component)以及取代樣式部分(replacement pattern component)?!皹邮讲糠帧笔菂?shù)化后的片段中介表示碼,與部分程序碼的中介表示表示碼相匹配(match)。當(dāng)碰到樣式毋須完全吻合的情況(舉例來說,在指令中對于暫存器的選擇是否相同),則沒有吻合的部分以語意等同的“中介表示匹配表示”取代。“取代樣式部分”也是參數(shù)化后的片段中介表示,其詳細(xì)描述用來取代上述符合樣式匹配條件的程序碼的指令;每當(dāng)樣式毋須完全吻合的情況發(fā)生于程序碼庫被編譯的過程中,此“取代樣式部分”則被使用。參數(shù)化的用意在于,在取代的過程中,使得程序碼中符合該“匹配表示”的元件在替換的程序碼中被提及。
      [0062]以下顯示以簡化的RTL表示的程序碼轉(zhuǎn)換樣式的一個(gè)例子。
      [0063]
      【權(quán)利要求】
      1.一種編譯系統(tǒng),用以編譯在一程序碼庫中的一原始碼檔案,該編譯系統(tǒng)包含有: 一最佳化編譯器,為該程序碼庫而特制,編譯該原始碼檔案,以輸出多個(gè)目的碼檔案以及據(jù)以產(chǎn)生一中介表示;以及 一程序分析器,用以分析該中介表示,以獲得并儲存該程序碼庫的多個(gè)特性以用于該程序碼庫的一后續(xù)編譯程序中。
      2.如權(quán)利要求1所述的編譯系統(tǒng),其特征在于,該程序碼庫的這些特性包含有關(guān)于多個(gè)共用子序列的資訊,這些共用子序列于該程序碼庫中出現(xiàn)了許多次。
      3.如權(quán)利要求2所述的編譯系統(tǒng),其特征在于,另包含有: 一連結(jié)器,將這些目的碼檔案連結(jié),而產(chǎn)生一可執(zhí)行程序,且該連結(jié)器包含有多個(gè)連結(jié)器程序庫。
      4.如權(quán)利要求3所述的編譯系統(tǒng),其特征在于,由該程序分析器所產(chǎn)生有關(guān)于這些共用子序列的該資訊另用以產(chǎn)生一特制化函數(shù)程序庫,其實(shí)行這些共用子序列,以及,于該后續(xù)編譯程序中,該連結(jié)器采用該特制化函數(shù)程序庫以及這些連結(jié)器程序庫,以連結(jié)這些目的碼檔案。
      5.如權(quán)利要求4所述的編譯系統(tǒng),其特征在于,另包含有由該程序分析器所產(chǎn)生的多個(gè)特制化編譯組件,用來找出該原始碼檔案中的這些共用子序列,其中,這些特制化編譯組件被用來更新該最佳化編譯器,以便于該程序碼庫的該后續(xù)編譯程序中使用。
      6.如權(quán)利要求1所述的編譯系統(tǒng),其特征在于,該程序碼庫的這些特性包含有關(guān)于多個(gè)最佳化動(dòng)作的歷史記錄,該歷史記錄被該程序分析器所分析供決定每一個(gè)最佳化動(dòng)作是否對該程序碼庫中的多個(gè)函數(shù)中的任何一個(gè)具有影響。
      7.如權(quán)利要求6所述的編譯系統(tǒng),其特征在于,依據(jù)每一個(gè)最佳化動(dòng)作是否對該程序碼庫中的至少一個(gè)函數(shù)具有影響,該最佳化編譯器決定是否跳過任何一個(gè)最佳化動(dòng)作。
      8.如權(quán)利要求1所述的編譯系統(tǒng),其特征在于,這些特性包含有多個(gè)函數(shù)呼叫行所在位置的資訊,這些函數(shù)呼叫行呼叫該程序庫碼中數(shù)個(gè)函數(shù)的至少其中之
      9.如權(quán)利要求8所述的編譯系統(tǒng),其特征在于,在該最佳化編譯器編譯該程序碼庫中的這些函數(shù)時(shí),該最佳化編譯器使用該多個(gè)函數(shù)呼叫行所在位置的該資訊,來決定是否將至少一函數(shù)采用行內(nèi)化方式編譯。
      10.一種編譯方法,用以編譯在一程序碼庫中的一原始碼檔案,該編譯方法包含有: 利用為該程序碼庫而特制的一最佳化編譯器,來編譯該原始碼檔案,并據(jù)以產(chǎn)生一中介表示;以及 分析該中介表示,以獲得并儲存該程序碼庫的多個(gè)特性 以用于該程序碼庫的一后續(xù)編譯程序。
      11.如權(quán)利要求10所述的編譯方法,其特征在于,另包含有: 從這些特性中獲得多筆可重復(fù)使用的資源;以及 以這些可重復(fù)使用的資源,在一后續(xù)編譯程序中,最佳化被編譯后產(chǎn)生的一目的碼。
      12.如權(quán)利要求11所述的編譯方法,其特征在于,另包含有: 依據(jù)這些可重復(fù)使用的資源,重建該最佳化編譯器,以用于該后續(xù)編譯程序。
      13.如權(quán)利要求11所述的編譯方法,其特征在于,這些可重復(fù)使用的資源包含有關(guān)于多個(gè)共用子序列的資訊,這些共用子序列于該程序碼庫中被發(fā)現(xiàn)了許多次。
      14.如權(quán)利要求13所述的編譯方法,其特征在于,該最佳化步驟包含有: 找出該程序碼庫中的這些共用子序列;以及 最佳化被編譯后產(chǎn)生的該目的碼的大小。
      15.如權(quán)利要求13所述的編譯方法,其特征在于,另包含有: 從編譯該原始碼檔案的過程中,輸出多個(gè)目的碼檔案;以及 連結(jié)這些目的碼檔案,以產(chǎn)生一可執(zhí)行程序。
      16.如權(quán)利要求15所述的編譯方法,其特征在于,該連結(jié)步驟另包含有: 采用一特制化函數(shù)程序庫以及一連結(jié)器程序庫,來連結(jié)這些目的碼檔案; 其中,該特制化函數(shù)程序庫采用這些共用子序列。
      17.如權(quán)利要求10所述的編譯方法,其特征在于,另包含有: 產(chǎn)生關(guān)于多個(gè)最佳化動(dòng)作的歷史記錄;以及 分析該歷史記錄,來決定每一個(gè)最佳化動(dòng)作是否對該程序碼庫中的多個(gè)函數(shù)中的任何一個(gè)具有影響。
      18.如權(quán)利要求17所述的編譯方法,其特征在于,另包含有: 依據(jù)該分析步驟的結(jié)果,決定是否跳過這些最佳化動(dòng)作中的任何一個(gè)。
      19.如權(quán)利要求10所述的編譯方法,其特征在于,這些特性包含有多個(gè)函數(shù)呼叫行所在位置的資訊,這些函數(shù)呼叫行呼叫該程`序碼庫中多個(gè)函數(shù)的至少其中之一。
      20.如權(quán)利要求19所述的編譯方法,其特征在于,另包含有: 在該最佳化編譯器編譯該程序碼庫中的這些函數(shù)時(shí),使用該多個(gè)函數(shù)呼叫行所在位置的該資訊來決定是否將至少一函數(shù)以行內(nèi)化方式編譯。
      【文檔編號】G06F9/45GK103577241SQ201210342636
      【公開日】2014年2月12日 申請日期:2012年9月14日 優(yōu)先權(quán)日:2012年7月18日
      【發(fā)明者】柯林·A·麥克艾文 申請人:開曼晨星半導(dǎo)體公司, 晨星半導(dǎo)體股份有限公司, 晨星軟件研發(fā)(深圳)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1