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

優(yōu)化編碼自動生成系統(tǒng)的制作方法

文檔序號:6654888閱讀:206來源:國知局
專利名稱:優(yōu)化編碼自動生成系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種優(yōu)化編碼自動生成系統(tǒng),該優(yōu)化代碼適用于在包括至少一個處理器的預(yù)定硬件平臺上運行,,并且適用于一預(yù)定的應(yīng)用領(lǐng)域和來自用戶提交的源代碼(這里,用戶應(yīng)當(dāng)被理解為一個廣義的概念,不僅包括終端用戶,也包括應(yīng)用程序員和系統(tǒng)程序員)。
背景技術(shù)
在計算初始,編譯器做了大量工作。
編譯器的工作是分析用高級語言撰寫的源代碼,然后生成適用于目標機的相應(yīng)的二進制代碼??偟膩碚f,該過程固定在操作前進行。還有解釋程序(interpreter)能夠?qū)崿F(xiàn)動態(tài)編譯技術(shù),該動態(tài)編譯技術(shù)使得在操作執(zhí)行時生成代碼,從而消除了固有的局限。
編譯器是程序準備鏈中的一個要素。編譯的結(jié)果可與已經(jīng)編譯并生成的程序(獨立編譯或者庫中調(diào)用的程序)相關(guān)聯(lián),它們在裝載時靜態(tài)連接或者在執(zhí)行中動態(tài)連接。
編譯器通常按以下三個步驟工作1)生成中間代碼始于源代碼,所述編譯器匹配模式并生成一抽象形式,其獨立于所述源代碼的語言,通常稱為中間語言。這種語言獨立于目標機。
2)高級優(yōu)化該步驟將獨立于目標結(jié)構(gòu)的不同種類的優(yōu)化方法加以組合傳送常數(shù),強制簡化,通用表達等等。這些優(yōu)化方法總體上對應(yīng)于簡化機制減少指令數(shù),簡化編碼結(jié)構(gòu)。
3)生成編碼和低級優(yōu)化在本步驟中,將進行所有專用于目標機的操作和優(yōu)化生成并選擇指令,分配寄存器,指令排序等等。
編譯器的質(zhì)量不僅與所述目標結(jié)構(gòu)有關(guān)(生成代碼的性能),而且與源語言(是否易于編譯)及其作為軟件的特性(魯棒性,選擇多樣性,執(zhí)行速度等)有關(guān)。
除了所述動態(tài)編譯的特殊情況之外,在執(zhí)行操作前必須執(zhí)行上述三個步驟,而且必須在合適的時機執(zhí)行,從而相應(yīng)地限制了可應(yīng)用于編譯器上的最優(yōu)化算法的復(fù)雜性。
因此很大一部分關(guān)于編譯器的研究都是關(guān)于選擇及確定高級源代碼語言的。
編譯器的發(fā)展也與處理器結(jié)構(gòu)的發(fā)展有關(guān),確切地說是與描述該結(jié)構(gòu)表現(xiàn)的執(zhí)行模塊的發(fā)展有關(guān)。在所有的最優(yōu)化問題中,一個主要的困難在于定義一個表示執(zhí)行時間的成本函數(shù)。
最初的指令集操作很簡單一個指令序列的執(zhí)行時間可以通過將序列中的每個指令的執(zhí)行時間相加而簡單地獲得。這樣,最優(yōu)化的過程也很簡單,主要的優(yōu)化策略包括降低生成指令的數(shù)量和復(fù)雜程度。
第一臺復(fù)雜指令集計算機(CISCs)的出現(xiàn)使得情況有了一些改變,從而使得處理非常復(fù)雜的指令變得可行。這樣,最優(yōu)化的問題實質(zhì)上就變?yōu)榱四J狡ヅ洹_@類計算機還可以包含矢量指令集和矢量分析器,它能夠識別循環(huán)從而直接生成矢量編碼。當(dāng)需要的時候,源代碼也可以被轉(zhuǎn)化為矢量代碼結(jié)構(gòu)。
當(dāng)出現(xiàn)流水線的時候,最優(yōu)化策略出現(xiàn)了飛躍,該結(jié)構(gòu)的進步性在于將指令的執(zhí)行分解為若干順序執(zhí)行的操作,就像工廠里的流水線一樣。這項技術(shù)使得在一個給定的瞬間并行執(zhí)行多個指令成為可能,從而極大地提高了系統(tǒng)的性能,但是這也導(dǎo)致了在出現(xiàn)流水線“中斷”的情況下的嚴重偏差,例如出現(xiàn)了一個分支指令。它也使得預(yù)測一給定碼段的表現(xiàn)變得不再可能。另一個突破源自于對分級存儲結(jié)構(gòu)的應(yīng)用這樣最優(yōu)化就需要依賴于對于一個精確計算量的準確評估局部(在時間和空間上)。然而,由于處理器和存儲系統(tǒng)之間的交互很簡單,所述最優(yōu)化過程的一個主要目標就是盡可能地減少錯誤的數(shù)量,因為每個錯誤都會增加補償執(zhí)行時間。
然而,應(yīng)該明白使得數(shù)量最小化是困難的,并且實質(zhì)上僅能應(yīng)用于簡單的循環(huán)型碼結(jié)構(gòu)。局部特性的靜態(tài)評估的困難導(dǎo)致了通過控制曲線來進行最優(yōu)化的方法的應(yīng)用通過第一次執(zhí)行代碼來準確地確定其局部特性曲線(建立曲線)。接下來,所述曲線被應(yīng)用于第二階段來執(zhí)行與對所述局部的應(yīng)用有關(guān)的最優(yōu)化。在這樣的結(jié)構(gòu)復(fù)雜程度上,已經(jīng)很難以一種簡單的方式來確定一個有效的最優(yōu)化策略了。具體的說,要知道如何將不同的最優(yōu)化方法相結(jié)合是很困難的,即便是在很簡單的環(huán)境下不再有適合于模塊執(zhí)行的機構(gòu)或?qū)⑵湟杂行У姆绞郊右钥紤]的機構(gòu)。在這樣的背景下,迭代編譯技術(shù)得以發(fā)展,將執(zhí)行與最優(yōu)化相結(jié)合從而生成可能的最優(yōu)化代碼。確切的說,迭代編譯在于執(zhí)行一個循環(huán)(loop),該循環(huán)用于轉(zhuǎn)換代碼并且評估其性能(靜態(tài)或者動態(tài))。那些技術(shù)主要用于探究最低成本代碼變換空間,用于保持那些提供最佳解決方案的方案。上述迭代方法在計算時間和開發(fā)時間的高成本,將它們的應(yīng)用領(lǐng)域限制為優(yōu)化程序庫。
使用簡單且統(tǒng)一指令集(相對于CISC)的精簡指令集計算機結(jié)構(gòu)(RISC)出現(xiàn)于80年代中期。第一代RISC處理器的功能很有限,其所生成的代碼的質(zhì)量就成為性能競爭中的關(guān)鍵因素。相似的,超長指令字(VLIW)結(jié)構(gòu)所使用的編譯技術(shù)與對硬件的最佳利用很相似。RISC和VLIW結(jié)構(gòu)總是有一個簡單的執(zhí)行模式,該執(zhí)行模式是確定的,因為所有的指令作為生成的程序碼時都以同樣的順序執(zhí)行,這樣,極大地簡化了上述結(jié)構(gòu)的工作,并且簡化了最優(yōu)化的過程。然而,上述結(jié)構(gòu)很快普及了對流水線和高速緩沖存儲系統(tǒng)的應(yīng)用,以獲得更好的性能(更確切的說,促使了可預(yù)見性虧損的平均水平的提高)。
超標量體系結(jié)構(gòu)(能夠在一個循環(huán)內(nèi)執(zhí)行若干指令)的出現(xiàn),及上述所有用于處理指令的無序處理機構(gòu)使得最優(yōu)化操作的性能更加困難。不僅如此,存儲器分級結(jié)構(gòu)也得到了快速發(fā)展分級的數(shù)量增加了,并且各種以更加直接或者不直接的方式管理各個高速緩存(預(yù)加載,優(yōu)先權(quán)管理等)的機構(gòu)也出現(xiàn)了。總之,上述機構(gòu)使得碼段的性能即使在非常簡單的情況下(如,能夠訪問兩個或三個數(shù)據(jù)表的循環(huán)),也非常難于預(yù)測,這樣就使得在簡單執(zhí)行模式的基礎(chǔ)上進行最優(yōu)化無法實現(xiàn)。由于處理器的性能和存儲器的性能差距越來越大,這種情況變得更糟了。
總之,在過去的20年中,處理器結(jié)構(gòu)在性能上極大豐富了。這樣,寄存器的數(shù)量也相應(yīng)提高了從標準CISC結(jié)構(gòu)中的八個寄存器,RISC結(jié)構(gòu)增至32個,超標量體系結(jié)構(gòu)進而達到了80個寄存器。一開始,可能會認為寄存器數(shù)量的增加會簡化最優(yōu)化過程。而實際上,存儲器的發(fā)展使得寄存器的使用更加困難,在寄存器分配問題上,有效寄存器分配算法的成本也提高了,因為其復(fù)雜程度是現(xiàn)有寄存器數(shù)量的指數(shù)函數(shù)。
響應(yīng)于最新的發(fā)展,編譯技術(shù)沒怎么變化所執(zhí)行的最優(yōu)化操作數(shù)量增加了,但是確定整體最優(yōu)化策略的能力并沒有提高,甚至有所下降。
最后,最近的發(fā)展趨勢是“動態(tài)”編譯。該原則簡單而富有吸引力動態(tài)編譯(或者專業(yè)化操作)是在最后時刻,即在操作中,優(yōu)化代碼。一代碼序列被轉(zhuǎn)化(專業(yè)化)為程序的輸入數(shù)據(jù)(執(zhí)行背景)的函數(shù)。在執(zhí)行中,一個機構(gòu)按照該指令序列被執(zhí)行的頻率檢驗程序的性能,并確定是否實施為一特定執(zhí)行背景而優(yōu)化的版本。這種實質(zhì)上的動態(tài)機構(gòu)被限制于最優(yōu)化技術(shù)中,它在執(zhí)行自身操作時耗時不長,因為他們無需補償其所優(yōu)化的代碼的操作時間。
需要重申的是,程序庫是代表一個領(lǐng)域或者部分該領(lǐng)域的一系列程序的集合程序庫的組成部分需要對應(yīng)于標準的并且常用的程序。程序庫的概念由來已久,比編譯器的概念還老,它是軟件工程的一個主要支柱(重復(fù)使用的部分)。具體的說,例如,Java就是一種非常系統(tǒng)地使用了程序庫概念的語言。
程序庫可以對應(yīng)于不同的抽象層(abstraction),從最簡單到最復(fù)雜BLAS1(“基礎(chǔ)線性代數(shù)子程序第一級”)是一組與矢量有關(guān)的非常簡單的操作集合,但是它能夠表達大量的常規(guī)線性代數(shù)算法。另一個極端的例子,LINPACK和EISPACK是分別用于解決線性系統(tǒng)和特征向量和/或特征值的完整程序集。在下述的特定領(lǐng)域中開發(fā)并廣泛應(yīng)用了大量的程序庫●科學(xué)計算BLAS1,BLAS2,BLAS3,BLAST,SPARSE BLAS,LINPACK,LAPPACK,BLACS,PVM.MPI等等;●信號處理FFTPACK,VSIPI,等;和●圖像Directx,OpenGL。
在某一給定應(yīng)用領(lǐng)域定義并確定一些程序庫也表明了該領(lǐng)域能夠被“整合”。
程序庫的最大的缺點是,其能力是非常有限的,并且需要人工應(yīng)用(即,它們需要明確地調(diào)用需要插入源程序中的子程序)。
第一代程序庫(對應(yīng)于簡單的小程序)總的來說是用匯編語言手動開發(fā)的。當(dāng)性能是一個主要指標(自然的,倘若所述程序保持一個合理的大小)時,其總是保持這種情況。
然而,不象編譯操作,其通常是一個“在線”過程(編譯次數(shù)必須保持適中),優(yōu)化程序庫本質(zhì)上是一個“脫線”操作,并且可以應(yīng)用一些耗費計算時間的方法。因此,迭代編譯是用于開發(fā)程序庫的優(yōu)秀的最優(yōu)化工具,但是不幸的是,考慮到其應(yīng)用成本,它只能用于最簡單的代碼。
自動調(diào)整型線性代數(shù)軟件技術(shù)使得某些最優(yōu)化操作得以實現(xiàn)(選擇好的參數(shù),如塊大小)。不幸的是,這項技術(shù)在應(yīng)用中非常受限,因為它很大程度上取決于所要應(yīng)用的類型(稠密矩陣的計算,對時間有著高度需求的計算)。
現(xiàn)有的性能分析工具種類很多(特別是作為所追求目標的函數(shù))●性能測試(標準檢測程序)它們是一些代碼段,其或多或少的代表了一個應(yīng)用領(lǐng)域,并且可以將不同機器的性能加以比較。
●仿真器它們能夠在最終的層次了解一個結(jié)構(gòu)的性能。但是不幸的是,仿真器價格昂貴,難以開發(fā),很慢,并且不一定能夠精確的表現(xiàn)目標處理器的性能。
●數(shù)學(xué)模型該方法是將目標機的性能轉(zhuǎn)換為方程的形式??傮w來說,其應(yīng)用是非常局限的,僅在研究一段非常簡單的代碼的不同簡單變量時有效。
●檢測和/或管理曲線的工具這些工具用于回收與程序執(zhí)行相關(guān)的信息(通過使用有特定硬件的計算機),其中所述信息與循環(huán)數(shù),錯誤數(shù)等有關(guān)。
下面的評述可以簡單的闡述為●性能測試幾乎沒有進步,并且總體上說它已經(jīng)成為了相當(dāng)巨大的商業(yè)支柱的一個主題。通常,供應(yīng)商最優(yōu)化編碼在基準測試中表現(xiàn)良好,這就導(dǎo)致了所獲得誤導(dǎo)結(jié)果的指示性和有效性。
●仿真器由于目標機結(jié)構(gòu)變得很復(fù)雜,因此要應(yīng)用仿真器提供結(jié)果(以最優(yōu)化編碼)就變得越來越困難。
●數(shù)學(xué)模型它們沒有什么進展,并且除了上述提到的局部應(yīng)用,它們幾乎沒有應(yīng)用場合。其中的一個原因是良好的數(shù)學(xué)模型依賴于操作的“平均一致”,這與實踐相去甚遠。
●檢測和/或管理曲線的工具它們主要受三個缺點的影響它們所提供的信息是整體的,而與一個操作在時域上的分布無關(guān);它們不能使編碼和性能在最終階段相關(guān)聯(lián);最后,由于目標結(jié)構(gòu)的復(fù)雜性,有效應(yīng)用非常困難(如同仿真器)。

發(fā)明內(nèi)容
本發(fā)明致力于克服上述缺陷,從而實現(xiàn)在一個特定應(yīng)用領(lǐng)域,在包括至少一個處理器的一預(yù)定硬件平臺上,自動將用戶提供的源代碼生成運行于其上的最優(yōu)化代碼。
更具體的說,本發(fā)明致力于提高計算機系統(tǒng)的性能,使其獨立于所選擇的源語言,該系統(tǒng)所使用的處理器可以使用簡單或者復(fù)雜的指令,可以有數(shù)量多或者少的寄存器、功能單元和高速緩存級別。
本發(fā)明的另一個目的是避免局限特定程序庫的功能范圍,并致力于開發(fā)一個自動生成代碼的系統(tǒng),所述系統(tǒng)是針對大量的類似碼結(jié)構(gòu)進行優(yōu)化的,它可能呈現(xiàn)出不同的復(fù)雜程度。
根據(jù)本發(fā)明,上述目標通過下述系統(tǒng)得以實現(xiàn),所述系統(tǒng)根據(jù)用戶提供的源代碼自動生成適合運行于預(yù)定硬件平臺的優(yōu)化代碼,該硬件平臺包括至少一個處理器,并且適用于一預(yù)定的應(yīng)用領(lǐng)域,該系統(tǒng)的特征在于它包括接收符號代碼序列的裝置,該符號代碼序列也記為基準序列,代表了所述處理器在預(yù)定應(yīng)用領(lǐng)域的性能表現(xiàn);還包括接收第一靜態(tài)參數(shù)的裝置,該第一靜態(tài)參數(shù)是基于預(yù)定的硬件平臺、其處理器及基準序列定義的;還包括接收動態(tài)參數(shù)的裝置,該動態(tài)參數(shù)也是基于預(yù)定的硬件平臺、其處理器及基準序列定義的;包括一個分析裝置,其通過使用基準序列,所述靜態(tài)參數(shù)和動態(tài)參數(shù)而展開的性能測試和評估來設(shè)定優(yōu)化規(guī)則;包括一個代碼生成及優(yōu)化裝置,它首先接收基準序列,然后接收檢測用戶源代碼的優(yōu)化規(guī)則,檢測可優(yōu)化循環(huán),將其分解為內(nèi)核(kemel),組裝并生成代碼以傳輸最優(yōu)化代碼;再次生成來自于代碼生成和優(yōu)化裝置的信息,并使之與基準序列中的內(nèi)核相聯(lián)系的裝置。
更具體的,所述分析裝置包括一個測試發(fā)生器,其首先與接收基準序列的裝置相連,而后與接收靜態(tài)參數(shù)的裝置相連,從而自動生成大量的測試變量,這些變量由傳輸裝置傳輸以存儲于變量數(shù)據(jù)庫中;一個執(zhí)行器,它首先與傳輸裝置相連,以接收存儲于變量數(shù)據(jù)庫中的測試變量,然后連接于接收動態(tài)變量的裝置以在所述動態(tài)參數(shù)的變化范圍內(nèi)操作所述測試變量,并通過傳輸裝置將結(jié)果傳輸至存儲結(jié)果的數(shù)據(jù)庫;一分析器,連接于所述傳輸裝置以獲得存儲于結(jié)果數(shù)據(jù)庫中的結(jié)果,加以分析,從而推導(dǎo)出優(yōu)化規(guī)則,該規(guī)則通過傳輸裝置傳輸?shù)絻?yōu)化規(guī)則數(shù)據(jù)庫。
有利地,所述分析器包括濾波裝置,其有一個隨機門限值來優(yōu)化性能,從而如果一個結(jié)果數(shù)據(jù)庫中的變量符合濾波原則,就可以將其視為參數(shù)空間中的最佳。
在優(yōu)選實施例中,所述分析器進一步包括修正靜態(tài)參數(shù)的裝置和修改動態(tài)參數(shù)的裝置。
所述代碼生成及優(yōu)化裝置包括一個生成最優(yōu)化代碼的裝置和一個優(yōu)化器,所述優(yōu)化器包括一個策略選擇模塊,其首先與在接收初始源代碼中識別出內(nèi)核的裝置相連,而后與接收基準序列的裝置相連,再與接收最優(yōu)化規(guī)則的裝置相連,這樣根據(jù)每一個對應(yīng)于被測試的基準序列的內(nèi)核生成一些版本,每一個版本在特定的參數(shù)組合下都是最優(yōu)的,一個組合與匯編模塊連接于所述接收最優(yōu)化規(guī)則的裝置,還連接于接收來自于策略選擇模塊的信息的裝置,還連接于接收所述若干版本的裝置,從而通過傳輸裝置發(fā)送信息,該信息包含相應(yīng)的優(yōu)化版本,其使用區(qū)域,及在何處執(zhí)行適當(dāng)?shù)臋z測,從而動態(tài)地確定哪個版本是最合適的。
在另一個優(yōu)選實施例中,所述系統(tǒng)包括一個優(yōu)化內(nèi)核數(shù)據(jù)庫,所述組合及匯編(assemble)模塊通過傳輸裝置連接于所述優(yōu)化內(nèi)核數(shù)據(jù)庫,從而將信息存儲到所述優(yōu)選內(nèi)核數(shù)據(jù)庫,所述信息包括優(yōu)選版本及應(yīng)用區(qū)域,為了動態(tài)地確定哪個版本是最合適的而執(zhí)行適當(dāng)?shù)臏y試。
所述代碼生成及優(yōu)化裝置包括一個優(yōu)化器和一個優(yōu)化代碼生成裝置,該裝置包括一個檢測可優(yōu)化循環(huán)模塊,該模塊連接于用戶源代碼接收裝置,連接于一個將其分解為內(nèi)核的模塊,及一個情況分析、匯編、代碼注入(inject)模塊,該模塊通過傳輸裝置連接于優(yōu)化器以傳輸檢測到的內(nèi)核的識別信息,所述傳輸裝置用以接收描述相應(yīng)優(yōu)化內(nèi)核的信息,同時情況分析、匯編、代碼注入模塊與優(yōu)化代碼提供裝置相連。
情況分析、匯編、代碼注入模塊也與所述優(yōu)化內(nèi)核數(shù)據(jù)庫相連,如果查找的內(nèi)核已經(jīng)存貯于其中,則無需調(diào)用所述優(yōu)化器即可獲得描述優(yōu)化內(nèi)核的信息。
根據(jù)本發(fā)明的一個優(yōu)選實施例,所述用于情況分析、匯編及代碼注入模塊進一步包括一基準序列增加裝置,以向基準序列中增加在該模塊中發(fā)現(xiàn)的內(nèi)核,該內(nèi)核在所述優(yōu)化內(nèi)核數(shù)據(jù)庫或所述基準序列中沒有相應(yīng)的識別信息。
在一個具體實施例中,所述系統(tǒng)包括一個編譯器和一個連接編輯器,用于接收來自于代碼生成及優(yōu)化裝置的重新組織的源代碼,及用于產(chǎn)生適用于所述硬件平臺的優(yōu)化二進制碼。
所述系統(tǒng)可以包括一個源代碼傳輸裝置,用于將所述優(yōu)化內(nèi)核的源代碼從所述優(yōu)化內(nèi)核數(shù)據(jù)庫傳輸至所述編譯器。
根據(jù)本發(fā)明的另一個實施例,所述系統(tǒng)可以包括一個編譯器和一個安裝模塊,用于在硬件平臺上設(shè)置一個動態(tài)庫,該庫包含所述優(yōu)化內(nèi)核的所有性能。
本發(fā)明可以應(yīng)用于不同的領(lǐng)域,特別是科學(xué)計算、信號處理及圖像處理。
根據(jù)本發(fā)明的一個實施例,所述基準序列包括一組簡單通用循環(huán)型碼段,它用一種源語言撰寫,按照循環(huán)體代碼的復(fù)雜性漸增的順序組織于一分級層次結(jié)構(gòu)中。
其中,所述基準序列包括0級基準序列,其中僅測試一個單獨的操作,并且對應(yīng)于一個循環(huán)體,該循環(huán)體由單個用0高度樹所表示的算術(shù)表達式組成。
此外,所述基準序列可以包含1級基準序列,這里需要考量并測試兩個0級操作的組合;1級基準序列操作對應(yīng)于一個循環(huán)體,該循環(huán)體或者由單個用1高度樹所表示的算術(shù)表達式組成;或者由兩個用0高度樹所表示的算術(shù)表達式構(gòu)成。
在一個可能的實施例中,所述基準序列包括2級基準序列,這里需要考量和測試兩個1級操作或者三個0級操作的組合。
所述靜態(tài)參數(shù)具體包括每個基準序列的循環(huán)迭代數(shù)、數(shù)據(jù)表訪問步長、操作數(shù)類型、所使用指令的類型、所述預(yù)加載策略,和指令及迭代的排序策略。
所述動態(tài)參數(shù)包括位于分級存儲結(jié)構(gòu)的不同級的數(shù)據(jù)表操作數(shù)的位置、所述數(shù)據(jù)表起始地址的相對位置,及分支歷史。
有益地,所述優(yōu)化內(nèi)核數(shù)據(jù)庫包括循環(huán)型源代碼序列,其對應(yīng)于真實而有用的碼段,并且以復(fù)雜性漸增的順序組織排列。
所述預(yù)定的硬件平臺可以包括,例如,至少一個處理器,該處理器可以使用Intel提供的Itanium型處理器,或者至少一個由IBM提供的Power或Power PC型處理器。
在一個可能的實施例中,該系統(tǒng)更適用于一個包含一Itanium型處理器的系統(tǒng),所述優(yōu)化規(guī)則至少包括下述規(guī)則中的一部分a)在寫操作的性能不如讀操作的情況下,盡量減少寫操作的數(shù)量;b)在浮點操作中,使用成對裝載很重要;c)將循環(huán)的展開度調(diào)整為循環(huán)體的復(fù)雜程度的函數(shù);d)利用運算操作的操作等待時間;e)對短向量應(yīng)用屏蔽技術(shù);f)對存儲器的操作使用區(qū)域后綴(讀,寫,預(yù)加載);g)確定預(yù)加載間隔;h)執(zhí)行第4級向量化,從而避免某些L2存儲沖突;i)考慮多個變量以避免在讀/寫序列中的其他L2存儲沖突及讀寫序列中的沖突;j)考慮與不同的優(yōu)化法相關(guān)的性能改善;k)使用能夠盡量減少錯誤預(yù)測(短向量)的分支鏈;
l)合并存儲器入口(將象素集合起來);和m)將象素的處理向量化。
另一個可能的實施例特別適合于一包含有一個Power或Power PC型的處理器的系統(tǒng),所述優(yōu)化規(guī)則至少包括下述規(guī)則的一部分a)重新排序讀操作從而將高速緩沖存儲器的錯誤集合起來;b)只對寫操作進行預(yù)加載;c)將循環(huán)的展開度調(diào)整為循環(huán)體的復(fù)雜程度的函數(shù);d)在運算操作中使用可操作的等待時間;e)對存儲器的操作使用區(qū)域后綴(讀,寫,預(yù)加載);f)確定預(yù)加載間隔;g)考慮多個變量以避免在讀/寫序列中的沖突;h)考慮與不同的優(yōu)化法相關(guān)的性能的改善;


本發(fā)明的其他特性和優(yōu)勢在下述結(jié)合附圖的具體實施例的描述中加以展現(xiàn),其中圖1是構(gòu)成本發(fā)明所述優(yōu)化代碼自動生成系統(tǒng)的模塊的方塊圖;圖2是可應(yīng)用于圖1所示的系統(tǒng)的性能分析模塊的詳細結(jié)構(gòu)方塊圖;圖3是可應(yīng)用于圖1所示的系統(tǒng)的代碼優(yōu)化與生成模塊的詳細結(jié)構(gòu)方塊圖;圖4是本發(fā)明第一實施例的重組源代碼生成模塊,及與之相關(guān)的為相應(yīng)的目標平臺生成優(yōu)化二進制代碼;圖5是本發(fā)明第二實施例的重組源代碼生成模塊,及與之相關(guān)的為相應(yīng)的目標平臺生成優(yōu)化二進制代碼。
具體實施例方式
首先參照顯示了整個系統(tǒng)的附圖1,該系統(tǒng)自動生成優(yōu)化代碼,通過代碼生成及優(yōu)化模塊80的輸出73提供優(yōu)化代碼,該優(yōu)化代碼適用于運行在一預(yù)定的包括至少一個處理器91的硬件平臺90上。
所述優(yōu)化代碼生成系統(tǒng)開發(fā)用于特定的應(yīng)用領(lǐng)域,它通過模塊80的輸入71接收用戶發(fā)送的源代碼17,其中用戶應(yīng)當(dāng)廣義地加以理解,它不僅包括終端用戶,還包括應(yīng)用程序員和系統(tǒng)程序員。
符號碼序列,被稱為基準序列1,其通過處理器在應(yīng)用領(lǐng)域來顯示處理器91的性能,其連接至模塊80的輸入52以優(yōu)化和生成代碼,并傳輸至分析模塊10的輸入51。
通過分析不同環(huán)境參數(shù)的影響和基準序列之間的相互作用,就可能確定出性能優(yōu)劣的區(qū)域,并且能夠清楚其優(yōu)劣的原因。所述基準序列無需表示由常規(guī)編程語言生成的實際代碼序列。僅有一部分被測試的基準序列對應(yīng)于優(yōu)化用戶代碼的內(nèi)核。
可優(yōu)化循環(huán)是一個程序結(jié)構(gòu),其將代表復(fù)雜程度較深或較淺的可變向量的操作的算術(shù)表達式進行編碼。
一個內(nèi)核或者基本循環(huán)就構(gòu)成了一個簡單的可優(yōu)化循環(huán)。本發(fā)明的模塊80能夠自動生成可優(yōu)化內(nèi)核,其數(shù)量比專用算術(shù)程序庫中函數(shù)的數(shù)量大得多??偟膩碚f,可以生成一給定內(nèi)核的若干版本,每個版本基于某些環(huán)境參數(shù)的組合進行優(yōu)化。
這樣,如圖3,由優(yōu)化器12完成的所述優(yōu)化步驟包括自動生成一組內(nèi)核或一個內(nèi)核庫,它們按照所述目標平臺90加以優(yōu)化,表現(xiàn)出所代表的應(yīng)用領(lǐng)域的性能。
所述優(yōu)化步驟與在代碼生成器18(圖3)中進行的代碼生成步驟相關(guān)聯(lián),該代碼生成器檢測來自于用戶的源代碼,以檢測其中可進行優(yōu)化的循環(huán),從而強制使用優(yōu)化內(nèi)核而非標準編譯器生成的代碼。
裝置74用于將來自模塊80的信息再次注入到基準序列1中。
所述代碼優(yōu)化和生成步驟之前執(zhí)行一在分析模塊10中進行的分析步驟,其中考慮了硬件平臺90和應(yīng)用領(lǐng)域,用于確定優(yōu)化規(guī)則以獲得優(yōu)化性能。所述分析模塊10的輸出57用于將優(yōu)化規(guī)則傳輸?shù)絻?yōu)化規(guī)則數(shù)據(jù)庫9中,其自身通過傳輸裝置59連接至所述模塊80的優(yōu)化器12。
所述分析模塊10將結(jié)合附圖2加以詳細描述。
所述分析模塊10通過裝置53和54接收靜態(tài)參數(shù)2和動態(tài)參數(shù)7,該動態(tài)參數(shù)7是所述處理器91的結(jié)構(gòu)的函數(shù),更廣義的說是所述系統(tǒng)的函數(shù),所述需要優(yōu)化的目標平臺90基于該系統(tǒng),同時也是所述基準序列的函數(shù)。
具體地,所述靜態(tài)參數(shù)2可以包括每個基準序列的循環(huán)迭代數(shù),所述數(shù)據(jù)表訪問步長和操作數(shù)類型,使用的指令類型,所述預(yù)加載策略,及指令及迭代的排序策略。
具體地,所述動態(tài)參數(shù)7可以包括數(shù)據(jù)表操作數(shù)在各級分層存儲機構(gòu)中的位置,所述數(shù)據(jù)表起始地址的相對位置和分支歷史。
在性能分析模塊10中,一測試生成器利用通過輸入53和55傳輸?shù)撵o態(tài)參數(shù)2和動態(tài)參數(shù)7相關(guān)的數(shù)據(jù),生成大量的變量,并通過傳輸裝置61輸送至變量數(shù)據(jù)庫4。
另一個自動工具5是執(zhí)行器,它通過傳輸裝置62接收變量數(shù)據(jù)和變量數(shù)據(jù)庫4,并進行如下的測試,使由傳輸裝置55提供的動態(tài)參數(shù)在整個變化范圍內(nèi)變化,并將有關(guān)的測量值通過傳輸裝置63輸送至結(jié)果數(shù)據(jù)庫。
存貯于所述結(jié)果數(shù)據(jù)庫6中的所述測量值通過傳輸裝置64自動傳輸至分析器8,分析器8通過識別所述參數(shù)的函數(shù)的優(yōu)劣性能區(qū)域來形成優(yōu)化規(guī)則9,所述優(yōu)化規(guī)則通過傳輸裝置57輸送至優(yōu)化規(guī)則數(shù)據(jù)庫9。
所述分析器8還包括用以調(diào)整靜態(tài)參數(shù)2的裝置54,及用以調(diào)整動態(tài)參數(shù)的裝置56,如,當(dāng)發(fā)現(xiàn)對于某個給定參數(shù)的變化靈敏度很低時。
所述分析器8可以包括一個產(chǎn)生優(yōu)化性能隨機門限值的濾波裝置。這樣,一個在結(jié)果數(shù)據(jù)庫中的變量,該變量并不對應(yīng)于優(yōu)化性能,如果滿足所述濾波原則,就可以因為在參數(shù)空間為最優(yōu)而得以保留。
下面結(jié)合附圖3詳細描述所述代碼生成及優(yōu)化模塊80。
所述優(yōu)化裝置12包括一個策略選擇模塊13,其通過裝置92連接于代碼生成裝置18,用以接收識別出的初始源代碼中的內(nèi)核。所述策略選擇模塊13還連接于裝置52以獲取基準序列1,以及連接于裝置58以獲取優(yōu)化規(guī)則9。所述策略選擇模塊13在其輸出口67,為每個對應(yīng)于一測試基準序列的內(nèi)核生成n個版本,每個版本對于某一特定參數(shù)組合的為最優(yōu)。
用于組合及匯編版本的模塊14,連接于所述裝置59以接收優(yōu)化規(guī)則9,連接于裝置66以獲取來自模塊13的策略選擇信息,連接于裝置68以獲取從1到n的若干個版本15。所述模塊14通過傳輸裝置93發(fā)出信息,所述信息包括相應(yīng)的優(yōu)化版本,其在應(yīng)用區(qū)域進行合適的測試,從而動態(tài)地確定哪個版本最合適。
所述優(yōu)化編碼生成模塊18包括一可優(yōu)化循環(huán)檢測模塊20,其連接于裝置71以獲取用戶源代碼17。所述模塊20的輸出口75連接至一模塊22,該模塊用于分解為內(nèi)核,它包含一輸出口77連接于一模塊23,模塊23用于情況分析、匯編及代碼注入,該模塊通過傳輸裝置92連接至優(yōu)化器12來傳輸識別出的內(nèi)核。所述模塊23通過所述傳輸裝置93還接收相應(yīng)優(yōu)化內(nèi)核的描述信息。模塊23還連接于裝置73以提供優(yōu)化代碼19。
在一個優(yōu)選實施例中,代碼生成及優(yōu)化模塊80包括一優(yōu)化內(nèi)核數(shù)據(jù)庫16。所述組合與匯編模塊14通過傳輸裝置79連接于所述優(yōu)化內(nèi)核數(shù)據(jù)庫16,從而向所述數(shù)據(jù)庫存儲優(yōu)化內(nèi)核,優(yōu)化版本信息,它們的應(yīng)用區(qū)域,及在何處進行適當(dāng)?shù)臏y試以動態(tài)確定哪個版本是最合適的。在本實施例中,用于情況分析、匯編及代碼注入的所述模塊23通過傳輸裝置72還連接于所述優(yōu)化內(nèi)核數(shù)據(jù)庫16,從而在不調(diào)用優(yōu)化器12的情況下就可以獲取優(yōu)化內(nèi)核表述信息,如果所查詢的內(nèi)核已經(jīng)存儲到所述數(shù)據(jù)庫16。
如圖3所示,用于情況分析、匯編及代碼注入的模塊23進一步包括裝置74,用于向基準序列1添加內(nèi)核,所添加的內(nèi)核在所述模塊23中被發(fā)現(xiàn),并且在所述優(yōu)化內(nèi)核數(shù)據(jù)庫16或者所述基準序列中沒有對應(yīng)項。
在圖4所示的實施例中,所述優(yōu)化器12沒有示出,因為其與圖3中所示優(yōu)化器結(jié)構(gòu)相同,其中有一個優(yōu)化內(nèi)核數(shù)據(jù)庫16。
在本實施例中,代碼生成模塊18在用于情況分析、匯編及代碼注入的所述模塊23的輸出口73生成一個重組源代碼19,其隨后由常規(guī)工具81和82加以處理進行程序準備,從而獲得對應(yīng)于所述目標平臺90的二進制編碼83。
圖4所示的實施例非常易于實施。所述初始用戶源代碼17在上述代碼生成及優(yōu)化模塊80中進行重組,于是其可優(yōu)化的循環(huán)被替換為子程序的調(diào)用,對應(yīng)于所述子程序的代碼從所述優(yōu)化內(nèi)核數(shù)據(jù)庫中添加入所述重組源代碼19。通過這種方式加以重組的所述源代碼19在經(jīng)過一個包含編譯器81和連接編輯器82的常規(guī)鏈后,就包含了生成適用于所述硬件平臺90的優(yōu)化二進制碼83所需的一切。
在另一個可能的實施例中,所述優(yōu)化內(nèi)核數(shù)據(jù)庫16中的優(yōu)化內(nèi)核的源代碼能夠在編譯步驟中,作為附加源程序庫直接使用。這在圖4中由連接所述優(yōu)化內(nèi)核數(shù)據(jù)庫16和所述編譯器81的點劃線箭頭85表示。該改動能夠避免將優(yōu)化內(nèi)核的源代碼直接加入所述重組源代碼,也使得在模塊18中的代碼生成步驟的執(zhí)行變得更簡單。
圖5所示的實施例包含了圖4所示實施例的改動。
圖5所示的變型中利用了某些操作系統(tǒng)的功能,其中程序庫能夠以可執(zhí)行二進制代碼的形式加以安裝,這樣程序可以在執(zhí)行時通過動態(tài)連接編譯對所述二進制代碼庫進行操作。
在圖5所示的變型中,無需將代碼從所述優(yōu)化內(nèi)核數(shù)據(jù)庫16注入至所述重組源代碼19。然而,必須通過一編譯器181和一安裝模塊182將一個包含所有優(yōu)化內(nèi)核功能的動態(tài)程序庫安裝于所述的目標平臺90。也可以使用一個編譯器來替代圖5中的編譯器81和181。在圖5所示的變體中,對于每個目標平臺僅需要進行一次安裝操作,這樣該變體在處理整個最優(yōu)化操作上就更加經(jīng)濟。
本發(fā)明的優(yōu)化代碼生成系統(tǒng)特別適合于以下三個領(lǐng)域的應(yīng)用科學(xué)計算,信號處理,和圖像處理。
在上述三個領(lǐng)域中的代碼有著CHAR1至CHAR4所示的不同的特性,這些特性在目標實現(xiàn)中有著重要的作用。
●CHAR1循環(huán)體型結(jié)構(gòu)(或者嵌套循環(huán))所包含的那些所需的執(zhí)行時間最長代碼部分。
●CHAR2所使用的數(shù)據(jù)結(jié)構(gòu)通常是多維的數(shù)據(jù)表,并且以很常規(guī)的方式加以訪問(行,列,塊等)●CHAR3所述循環(huán)體(或循環(huán)嵌套)通常由相互獨立的迭代組成,所述迭代可以并行運行。
●CHAR4所述循環(huán)體通常由一算術(shù)表達式序列組成,其對應(yīng)于基于大量數(shù)據(jù)的通用(或者準通用)計算。
自然的,雖然科學(xué)計算、信號處理和圖像處理這三個領(lǐng)域有相似之處,但是他們也表現(xiàn)出了某些主要區(qū)別。在信號處理領(lǐng)域,復(fù)數(shù)數(shù)據(jù)是一種非常重要的數(shù)據(jù),然而該數(shù)據(jù)在另外兩個領(lǐng)域就不那么重要了。在圖像處理領(lǐng)域,非常有代表性的是使用一種名為象素的數(shù)據(jù)以及特定的算法。此外,在圖像中,與二維數(shù)據(jù)流相關(guān)的數(shù)據(jù)結(jié)構(gòu)和算法是至關(guān)重要的。
上述的四個特性(CHAR1至CHAR4)對于最優(yōu)化代碼非常重要,并且它們促進了完整專用技術(shù)的開發(fā)。
●CHAR1=>最優(yōu)化操作致力于循環(huán)體結(jié)構(gòu),其帶來兩個重要的優(yōu)勢周期性(和可預(yù)測性)及代碼的簡潔。
●CHAR2=>對數(shù)據(jù)表的訪問因其常規(guī)性地能夠簡單得以分析和優(yōu)化,上述訪問操作占用了執(zhí)行時間的一大部分(考慮到對高速緩沖存儲器的應(yīng)用,甚至占據(jù)了執(zhí)行時間的主要部分)。
●CHAR3=>在循環(huán)體及嵌套循環(huán)體中迭代的相互獨立性使得使用(優(yōu)化)通過迭代空間的路徑作為數(shù)據(jù)表訪問的函數(shù)成為可能,這要根據(jù)目標結(jié)構(gòu)的特性??梢哉f訪問數(shù)據(jù)表中的N個元素可以以n的階乘種不同的方式(順序)實現(xiàn)。
●CHAR4=>根據(jù)數(shù)學(xué)表達式的循環(huán)體的簡單結(jié)構(gòu)使得,基于一代表數(shù)學(xué)表達式的樹使用一系統(tǒng)化及層次化的方法成為可能。所述的分析階段其本質(zhì)上仍然是實驗性的,在其尾聲需要●已經(jīng)確定了所述結(jié)構(gòu)的優(yōu)勢和劣勢;●知道如何將代碼結(jié)構(gòu)和其性能相聯(lián)系;●已經(jīng)找到了好的優(yōu)化策略,該策略可能是與所述代碼相關(guān)的各不同參數(shù)的函數(shù)。
如前所述,所述起點是一組源型代碼段,它們簡單而通用,并被稱為“基準序列”。這些代碼段為循環(huán)體結(jié)構(gòu),所述“源型”用于表示所述操作是由高級語言呈現(xiàn)而不是匯編語言。
這些代碼段以分級層次按照如下所述的循環(huán)體代碼復(fù)雜性漸增的順序加以組織●0級基準序列在本級,測試一單個獨立操作,即,所述循環(huán)體包含一單個操作從一數(shù)據(jù)表中讀取數(shù)據(jù),向數(shù)據(jù)表中寫數(shù)據(jù),進行浮點數(shù)加法,等。這些操作所對應(yīng)的循環(huán)體由一單個數(shù)學(xué)表達式構(gòu)成,由0高度樹表示。
●1級基準序列在本級,所考慮并測試的是兩個0級操作的組合一數(shù)據(jù)表的讀、寫操作,兩個不同數(shù)據(jù)表的讀操作,數(shù)據(jù)表中的讀取和添加操作,等。這些操做所對應(yīng)的循環(huán)體或由一個1高度樹所表示的數(shù)學(xué)表達式,或由兩個0高度樹所表示的數(shù)學(xué)表達式構(gòu)成。
●2級基準序列在本級,所考慮并測試的是兩個1級操作的組合或者是三個0級操作的組合從三個不同的數(shù)據(jù)表中讀取數(shù)據(jù),一個元素一個元素地讀取并添加入兩個不同的數(shù)據(jù)表,并將結(jié)果寫入第三個表,等。
●K級基準序列K級可以通過從前面各級進行簡單推論而加以定義。
所有的0級基準序列所對應(yīng)的碼段都是“人為”的,即,它們并不代表“真實”的循環(huán)。
這種按照復(fù)雜程度遞增的方式加以組織同樣應(yīng)用于優(yōu)化階段。
按上述方式定義的基準序列可以是無限的。
這些基準序列使用兩種不同的類別參數(shù)●靜態(tài)參數(shù)這些參數(shù)是靜止定義的(即,在執(zhí)行之前,并且獨立于執(zhí)行)。這些靜態(tài)參數(shù)本身可以分為兩個主要的子類高級靜態(tài)參數(shù)(循環(huán)迭代數(shù),數(shù)據(jù)表訪問步長,操作數(shù)類型,等),和低級靜態(tài)參數(shù)(使用特定指令,指令順序,等)。
●動態(tài)參數(shù)這些參數(shù)在執(zhí)行所述循環(huán)時加以定義。例如,它們包括在分級存儲器中數(shù)據(jù)表操作數(shù)的位置,數(shù)據(jù)表起始地址的相對位置,等。
這兩類不同的參數(shù)的使用方式也完全不同靜態(tài)參數(shù)結(jié)合下面將要描述的變量和/或優(yōu)化法用于生成不同的測試碼段,而動態(tài)參數(shù)僅僅在試驗臺操作中使用。
高級靜態(tài)參數(shù)相對有限,并且主要對應(yīng)于用高級語言(例如,F(xiàn)ortran或C)表達的循環(huán)和數(shù)據(jù)表的環(huán)境參數(shù),而沒有與所述目標處理器相關(guān)的特性。
低級靜態(tài)參數(shù)考慮了與處理器(結(jié)構(gòu))及指令順序(目標代碼生成器)有關(guān)的所有特性。所述基準序列是高度的抽象(以一種源語言定義,并且與所述目標處理器的結(jié)構(gòu)無關(guān))的源語言,并且特別的,它們不包含任何優(yōu)化。為了在一給定處理器上對其進行測試,必須生成并優(yōu)化所述對應(yīng)的匯編代碼段。在生成過程中,會自動生成若干變量(匯編指令序列)。所有與同樣的基準序列相關(guān)的變量都是與初始基準序列語意相同的碼段。所有這些變量進行執(zhí)行并評估。這些變量對應(yīng)于不同的代碼最優(yōu)化技術(shù)(即,低級靜態(tài)參數(shù))。這些優(yōu)化法能夠以一種抽象的方式加以定義,無需參照具體的基準序列結(jié)構(gòu),并且它們組成了所述低級靜態(tài)參數(shù)的主要部分。
所述低級靜態(tài)參數(shù)包括●使用匯編指令一源級的操作可通過不同的指令序列加以實現(xiàn),特別的,這里必須處理不同的策略,用于使用預(yù)加載數(shù)據(jù)及指令;●所述循環(huán)體的結(jié)構(gòu)展開(對于不同的級)循環(huán)體;●所述循環(huán)體的排序?qū)ρh(huán)體中的指令進行排序(預(yù)加載間隔,向量化,匯總高速緩存錯誤,處理序列間的沖突);并且●迭代排序軟件流水線(不同深度)。
在很多編譯器中,上述低級靜態(tài)參數(shù)對應(yīng)于編譯時的選項,該選項用于以明確的方式實現(xiàn)所需的優(yōu)化。
所述測試生成器3的作用是生成上述不同的變量,其首先對應(yīng)于高級靜態(tài)參數(shù)(例如,數(shù)據(jù)表訪問步長),同時也對應(yīng)于低級靜態(tài)參數(shù)。
值得注意的是,對于1級基準序列,所要生成及分析的變量的總數(shù)是非常巨大的,可能數(shù)以百萬計。盡管如此,所述生成與分析過程卻是簡單自動操作。
在執(zhí)行器5和分析器8中,希望的目標是測試不同變量的特性并且選擇可能的最佳變量和/或優(yōu)化法。
該步驟意味著生成大量的結(jié)果,其被存儲于結(jié)果數(shù)據(jù)庫6中。所述試驗以分級的方式與所述分析步驟交叉展開這樣,最初的實驗基于0級基準序列的變量展開。在該初始試驗的尾聲,可以對不同變量進行第一次分類,所述變量為所得試驗結(jié)果的函數(shù)。這樣就可以立刻將一些變量排除,并且在后續(xù)的各級中不再考慮。這樣就可以限制需要進行的試驗的組合數(shù)量。
最初會認為,所述結(jié)果分析步驟執(zhí)行起來很簡單,因為僅需要使用一個衡量標準(性能)。實際上,該過程的復(fù)雜度很大程度上源于下面的事實通常選擇最佳變量很大程度上取決于所述參數(shù)。
第一次分類可以通過基于所述結(jié)構(gòu)的特性計算每個基準序列的優(yōu)化性能而簡單的加以實施。不幸的是,當(dāng)涉及結(jié)構(gòu)和代碼(包括0級和1級基準序列這樣簡單的碼段)之間的復(fù)雜相互影響時,困難就產(chǎn)生了這就產(chǎn)生了作為參數(shù)的函數(shù)來描述變量性能的復(fù)雜的圖形。這種復(fù)雜的性能能夠通過使用圖像處理算法得以初始分析,然后通過將一給定變量限定為一特定參數(shù)范圍而加以綜合。這樣,所述分析步驟并不僅僅生成一為每個基準序列提供一個最佳(唯一)變量和優(yōu)化技術(shù)的列表還確定出每個基準序列的參數(shù)范圍列表,而且對于所述的每個范圍,給定最佳的變量和最優(yōu)化技術(shù)上述這種信息就是所謂的“優(yōu)化規(guī)則”。
進行測試的基準序列組僅僅是基準序列整體的一個很小的部分。后面用于優(yōu)化目的的所述組被稱為“參考基準序列組”。
在實踐中,設(shè)定一個“合理”的優(yōu)化目標是非常重要的不計代價的進行優(yōu)化會導(dǎo)致非常多的變量,然而放松優(yōu)化需求并且滿足于5%-10%的優(yōu)化性能,就可以在一個非常寬泛的參數(shù)范圍內(nèi)使用一個變量。為此,就要實施濾波,例如,以優(yōu)化性能的90%為門限值。
在實踐中,如果僅僅為獲取并確認主要優(yōu)化技術(shù),則測試并分析0,1,2級基準序列就足夠了。所述參考基準序列組將逐漸的不包含3級以上的基準序列。
要進行的試驗數(shù)量很快增加,特別是在2級以上。
所述試驗作為一個整體在理想狀況下可以并行操作所述測試可以在100或1000臺機器上并行操作。該并行化特性非常的有用,并且使得在可接受的時間長度內(nèi)承擔(dān)系統(tǒng)研究成為可能。
該過程能夠被完全的自動化,并且驗證結(jié)果的質(zhì)量和連續(xù)性也可以自動化。只有在識別來自于分析質(zhì)量和連續(xù)性驗證過程中自動產(chǎn)生的結(jié)果的錯誤和/或異常時,才需要人為介入。
在分析階段的尾聲,希望獲得的目標是有大量的簡單代碼段,稱為“內(nèi)核”,其特別針對目標結(jié)構(gòu)進行優(yōu)化,所述優(yōu)化過程主要依賴于在分析階段尾聲獲得的優(yōu)化技術(shù)。
嚴格的說,所述“內(nèi)核”是循環(huán)體源代碼序列,其構(gòu)成了通常稱為基準序列的一部分。與基準序列的不同之處在于,所述內(nèi)核對應(yīng)的代碼段是真實而有用的。與基準序列的相似之處在于,其以復(fù)雜度漸增的順序加以組織。
上述內(nèi)核的生成和/或優(yōu)化在下述四個階段執(zhí)行●與一個或者多個參考基準序列相關(guān)聯(lián)對于最簡單的內(nèi)核,所述內(nèi)核和基準序列之間存在直接對應(yīng),而對于更復(fù)雜的內(nèi)核,所述內(nèi)核需要被分解為多個參考基準序列。這種相關(guān)和/或分解在源級作為所述內(nèi)核循環(huán)體特性的函數(shù)得以實施數(shù)據(jù)表數(shù)量,數(shù)據(jù)表訪問步長,等。
●代碼生成和/或指令排序和/或指令優(yōu)化在所述分析階段獲得的優(yōu)化技術(shù)(作為相應(yīng)基準序列的函數(shù))現(xiàn)在得到了利用,其直接用于生成和/或優(yōu)化所述內(nèi)核的代碼。對于任意給定內(nèi)核,可以生成若干個可能的版本,這些版本是所述參數(shù)的函數(shù)。
●寄存器分配大量優(yōu)化技術(shù)的使用極大地增加了現(xiàn)有寄存器的壓力。在這種情況下,適合的組織方式是將所有現(xiàn)有的寄存器加以分配。
●試驗和/或驗證所述生成并優(yōu)化了的內(nèi)核在分析階段用試驗臺加以測試。在該階段的尾聲,建立一個所述內(nèi)核性能的簡單模型。
與傳統(tǒng)的應(yīng)用于編譯器中的優(yōu)化法相比,這里使用的優(yōu)化法非常的不同首先,它們是從一個具體的性能評估(在分析階段實施)過程中直接獲得的,其次,由于是脫線操作,即沒有時間的限制,它們更為復(fù)雜并且性能(特別是在寄存器分配中)更好。
對于參考基準序列及生成規(guī)則的應(yīng)用,就有可能首先考慮所述結(jié)構(gòu)的全部優(yōu)點(測試得到的操作特性而不是理論特性),其次可以選擇作為所述參數(shù)的函數(shù)的不同版本。
在該階段的尾聲,就建立了一個優(yōu)化內(nèi)核數(shù)據(jù)庫16,其不僅包括所生成的內(nèi)核,還包括所述內(nèi)核作為不同參數(shù)的函數(shù)的性能信息。每個內(nèi)核使用和所述基準序列同樣的步驟進行測試。
在實踐中,所述優(yōu)化內(nèi)核數(shù)據(jù)庫16以系統(tǒng)的,詳盡的方式包括所有1,2,3,4,5級內(nèi)核。建立該數(shù)據(jù)庫的計算量是巨大的,然而就像所述性能分析階段那樣,可以通過并行操作非常有效的執(zhí)行。
用戶碼優(yōu)化操作發(fā)生在以下三個步驟●檢測可優(yōu)化循環(huán)(模塊20)包括識別源代碼中可以分解為內(nèi)核的循環(huán)。該步驟所使用的技術(shù)與在自動并行化和/或矢量化中所使用的技術(shù)相似。當(dāng)需要的時候,所述源代碼被重構(gòu),使得循環(huán)以最便于優(yōu)化的形式呈現(xiàn)。
●分析可優(yōu)化循環(huán)并將其分解為內(nèi)核(模塊22)這需要使用結(jié)構(gòu)匹配和分解技術(shù),其與優(yōu)化所述內(nèi)核所使用的技術(shù)類似,將循環(huán)分解為一系列的內(nèi)核。
●匯編及發(fā)射代碼(模塊23)用于分解目的的各個內(nèi)核被匯編并加入源代碼。
所述分解過程通常確定為初始源循環(huán)的特性函數(shù)的參數(shù)。
上述提出的最優(yōu)化可以被綜合為●不論是現(xiàn)有編譯鏈中的處理器,其中上述執(zhí)行方式是顯然的,即無須操作編譯器中的代碼;或者●直接在編譯器中,很自然的就需要對于編譯器中的代碼進行修改。
參照圖3如上所述,在所述分析階段的尾聲,可以得到一定數(shù)量的優(yōu)化規(guī)則這些規(guī)則是所述基準序列和所述參數(shù)范圍的函數(shù)。一個可能的變量不是通過中間內(nèi)核步驟,而是將可優(yōu)化循環(huán)與所述基準序列直接相聯(lián)系,并且將所述優(yōu)化規(guī)則直接應(yīng)用于可優(yōu)化循環(huán)而不使用存貯于所述優(yōu)化內(nèi)核數(shù)據(jù)庫16中的內(nèi)核。
這個變量比使用內(nèi)核簡單并且使得可以使用的優(yōu)化規(guī)則更靈活。然而,因為它是完全的在線操作,因此所產(chǎn)生的變量數(shù)必然大為減少,這樣所獲得的性能將會先驗(a priori)欠佳。
在優(yōu)化階段的最后,所述系統(tǒng)為一定數(shù)量的可優(yōu)化循環(huán)生成了優(yōu)化代碼,由于需要一分解操作,因此先驗并不直接存在于所述的內(nèi)核數(shù)據(jù)庫。這些優(yōu)化了的代碼自身能夠存儲于所述的可優(yōu)化內(nèi)核數(shù)據(jù)庫16中,以后可以再利用。這樣,所述內(nèi)核數(shù)據(jù)庫16通過這種訓(xùn)練就可以自動地豐富。
權(quán)利要求
1.一種基于用戶源代碼(17)自動生成適合運行于一預(yù)定硬件平臺(90)的優(yōu)化代碼(19)的系統(tǒng)該硬件平臺至少包含一個處理器(91),并用于一預(yù)定的應(yīng)用領(lǐng)域,其特征在于包括接收被稱為基準序列(1)的符號碼的裝置(51,52),該基準序列表示了所述處理器(91)在預(yù)定應(yīng)用領(lǐng)域的性能表現(xiàn);接收基于所述預(yù)定硬件平臺(90),其處理器(91),及所述基準序列(1)定義的第一靜態(tài)參數(shù)(2)的裝置(53);接收同樣基于所述預(yù)定硬件平臺(90),其處理器(91),及所述基準序列(1)定義的動態(tài)參數(shù)(2)的裝置(55);一通過使用所述基準序列(1),靜態(tài)參數(shù)(2)及動態(tài)參數(shù)(7)所進行的性能測試及評估來設(shè)定優(yōu)化規(guī)則的分析裝置(10);一代碼優(yōu)化及生成裝置(80),其首先接收所述基準序列,然后接收所述優(yōu)化規(guī)則,用于檢查用戶源代碼(17),檢測可優(yōu)化循環(huán),將其分解為內(nèi)核,并對代碼進行匯編及注入以發(fā)送優(yōu)化代碼(19);和一裝置(74),用于再注入來自于所述裝置(80)的信息,并將其返回所述基準序列與內(nèi)核相聯(lián)系。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于所述分析裝置(10)包括一測試生成器(3),其首先與所述用于接收基準序列的裝置(51)相連,然后與所述用于接收靜態(tài)參數(shù)的裝置(53)相連,從而自動生成大量的測試變量,這些變量通過傳輸裝置(61)存貯于一變量數(shù)據(jù)庫(4)中;一個執(zhí)行器(5)首先與傳輸裝置(62)相連以接收存儲于所述變量數(shù)據(jù)庫(4)中的測試變量,然后與裝置(55)相連以接收動態(tài)變量,從而在所述動態(tài)變量的一寬泛的變化范圍內(nèi)對測試變量進行操作,將所產(chǎn)生的結(jié)果通過傳輸裝置(63)傳送至一結(jié)果數(shù)據(jù)庫(6)加以儲存;及一個分析器(8)連接于所述傳輸裝置(64)以接收存貯在結(jié)果數(shù)據(jù)庫(6)中的結(jié)果,并進行分析,從而推導(dǎo)出優(yōu)化規(guī)則,通過傳輸裝置(57)將其送入一優(yōu)化規(guī)則數(shù)據(jù)庫(9)。
3.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于所述分析器(8)包括濾波裝置,該裝置有一隨機門限值用于優(yōu)化性能,從而如果一個結(jié)果數(shù)據(jù)庫中的變量符合濾波原則,則認為其在所述參數(shù)空間是最優(yōu)的。
4.根據(jù)權(quán)利要求2或3所述的系統(tǒng),其特征在于所述分析器(8)進一步包括靜態(tài)參數(shù)(2)調(diào)整裝置(54)和動態(tài)參數(shù)(7)調(diào)整裝置(56)。
5.根據(jù)權(quán)利要求1至4中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述代碼優(yōu)化及生成裝置(80)包括一優(yōu)化代碼生成裝置(18)和一個優(yōu)化器(12),所述優(yōu)化器包括一策略選擇模塊(13),其首先與所述裝置(92)相連,以獲取從所述源代碼中識別的內(nèi)核,然后與裝置(52)相連,以接收基準序列(1),第三與裝置(58)相連以接收優(yōu)化規(guī)則(9),從而為每個與一被測試基準序列相應(yīng)的內(nèi)核生成若干版本(15),每個版本在一特定的參數(shù)組合下為最佳,一個組合及匯編模塊(14),其連接于裝置(59)以接收優(yōu)化規(guī)則(9),連接于裝置(66)以接收來自于策略選擇模塊(13)的信息,連接于裝置(68)以接收所述若干版本(15),從而通過傳輸裝置(93)發(fā)送包含有相應(yīng)優(yōu)化版本,其使用區(qū)域,及在何處執(zhí)行適當(dāng)?shù)臏y試的信息,從而能夠動態(tài)的確定哪個版本是最合適的。
6.根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于包括一優(yōu)化內(nèi)核數(shù)據(jù)庫(16),由于所述組合及匯編模塊(14)與所述優(yōu)化內(nèi)核數(shù)據(jù)庫(16)通過傳輸裝置(79)相連以向所述優(yōu)化內(nèi)核數(shù)據(jù)庫存儲數(shù)據(jù),所述信息包括所述優(yōu)化版本,其使用區(qū)域,及在何處執(zhí)行適當(dāng)?shù)臏y試,從而能夠動態(tài)的確定哪個版本是最合適的。
7.根據(jù)權(quán)利要求1至6中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述代碼優(yōu)化及生成裝置(80)包括一個優(yōu)化器(12)和一個優(yōu)化代碼生成裝置(18),該裝置包括一裝置(20)用于檢測可優(yōu)化循環(huán),其連接于裝置(71)以接收用戶源代碼(17),一模塊(22)用于將其分解為內(nèi)核,一模塊(23)用于情況分析,匯編及代碼注入,其通過傳輸裝置(92)與所述優(yōu)化器(12)相連以傳輸對所檢測內(nèi)核的識別信息,及傳輸裝置(93)用于接收相應(yīng)優(yōu)化內(nèi)核的描述信息,而模塊(23)用于情況分析,匯編及代碼注入同樣連接于裝置(73)以提供優(yōu)化代碼。
8.根據(jù)權(quán)利要求6和7中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述用于情況分析,匯編及代碼注入的模塊(23)還連接于所述優(yōu)化內(nèi)核數(shù)據(jù)庫(16)從而如果所查詢的內(nèi)核已經(jīng)存儲于其中,則無須調(diào)用所述優(yōu)化器(12)即可接收該內(nèi)核的描述信息。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于所述用于情況分析,匯編及代碼注入的模塊(23)進一步包括裝置(74)用于向所述基準序列(1)中添加內(nèi)核,所添加的內(nèi)核是在所述用于情況分析,匯編及代碼注入的模塊(23)中發(fā)現(xiàn)的,并且其在所述優(yōu)化內(nèi)核數(shù)據(jù)庫(16)及所述基準序列中都沒有相應(yīng)的識別信息。
10.根據(jù)權(quán)利要求6、8及9中任一項權(quán)利要求所述的系統(tǒng),其特征在于包括一編譯器(81)和一個連接編輯器(82)用于接收來自于所述代碼優(yōu)化及生成裝置(80)的重組源代碼(19),并產(chǎn)生適用于所述硬件平臺(90)的優(yōu)化二進制代碼。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其特征在于包括裝置(85)用于從所述優(yōu)化內(nèi)核數(shù)據(jù)庫(16)向所述編譯器(81)傳輸所述優(yōu)化內(nèi)核的源代碼。
12.根據(jù)權(quán)利要求10所述的系統(tǒng),其特征在于包括一個編譯器(181)和一個安裝模塊(182),用于在所述硬件平臺(90)上安裝一動態(tài)程序庫,該程序庫包括所述優(yōu)化內(nèi)核的全部性能。
13.根據(jù)權(quán)利要求1-12中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述預(yù)定應(yīng)用領(lǐng)域是科學(xué)計算。
14.根據(jù)權(quán)利要求1-12中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述預(yù)定應(yīng)用領(lǐng)域是信號處理。
15.根據(jù)權(quán)利要求1-12中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述預(yù)定應(yīng)用領(lǐng)域是圖像處理。
16.根據(jù)權(quán)利要求1-15中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述基準序列(1)包括一組簡單且通用的循環(huán)型代碼片斷,其以一種源程序語言書寫并且以所述循環(huán)體代碼復(fù)雜性漸增的順序分級別組織。
17.根據(jù)權(quán)利要求16所述的系統(tǒng),其特征在于所述基準序列包括0級基準序列,其中僅進行一個單獨操作的測試并且對應(yīng)于一由單個算數(shù)表達式組成的循環(huán)體,由0高度樹表示。
18.根據(jù)權(quán)利要求17所述的系統(tǒng),其特征在于所述基準序列包括1級基準序列,其中需要考慮并測試的是兩個0級操作的組合;1級基準序列操作所對應(yīng)的循環(huán)體或由一個1高度樹表示的數(shù)學(xué)表達式組成,或由兩個由0高度樹所表示的數(shù)學(xué)表達式構(gòu)成。
19.根據(jù)權(quán)利要求18所述的系統(tǒng),其特征在于所述基準序列(1)包括1級基準序列,這里需要考慮并測試的是兩個1級操作的組合或三個0級操作的組合。
20.根據(jù)權(quán)利要求16-19中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述靜態(tài)參數(shù)特別包括每個基準序列的循環(huán)迭代數(shù),數(shù)據(jù)表訪問步長及操作數(shù)類型,所使用的指令類型,預(yù)加載策略及指令及迭代排序策略。
21.根據(jù)權(quán)利要求16-20中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述動態(tài)參數(shù)特別包括所述數(shù)據(jù)表操作數(shù)在不同級分層存儲結(jié)構(gòu)中的位置,所述數(shù)據(jù)表起始地址的相對位置及所述分支歷史。
22.根據(jù)權(quán)利要求6、8及9中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述優(yōu)化內(nèi)核數(shù)據(jù)庫(16)包括循環(huán)型源代碼序列,其對應(yīng)于真實而有用的碼段并以復(fù)雜度漸增的順序加以組織。
23.根據(jù)權(quán)利要求1-12中任一項權(quán)利要求所述的系統(tǒng),其特征在于預(yù)定的硬件平臺至少包括一個Itanium型處理器。
24.根據(jù)權(quán)利要求1-12中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述預(yù)定硬件平臺包括至少一個Power或Power PC型處理器。
25.根據(jù)權(quán)利要求13-15及權(quán)利要求23中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述的優(yōu)化規(guī)則至少包括部分下列規(guī)則a)在寫操作的性能不如讀操作的情況下,盡量減少寫操作的數(shù)量;b)在浮點操作中,使用成對裝載很重要;c)將循環(huán)的展開度調(diào)整為循環(huán)體的復(fù)雜程度的函數(shù);d)利用運算操作的操作等待時間;e)對短向量應(yīng)用屏蔽技術(shù);f)在存儲器的操作(讀,寫,預(yù)加載)中使用區(qū)域后綴;g)確定預(yù)加載間隔;h)執(zhí)行4級向量化,從而避免某些L2存儲沖突;i)考慮多個變量以避免在讀/寫序列中的其他L2存儲沖突及讀寫序列中的沖突;j)考慮與不同的優(yōu)化法相關(guān)的性能改善;k)使用能夠盡量減少錯誤預(yù)測(短向量)的分支鏈;l)合并存儲器入口(將象素集合起來);m)將象素的處理向量化。
26.根據(jù)權(quán)利要求13-15及權(quán)利要求24中任一項權(quán)利要求所述的系統(tǒng),其特征在于所述的優(yōu)化規(guī)則(9)至少包括部分下列規(guī)則a)重新排序讀操作從而將高速緩沖存儲器錯誤集合起來;b)只對寫操作進行預(yù)加載;c)將循環(huán)的展開度調(diào)整為循環(huán)體的復(fù)雜程度的函數(shù);d)利用運算操作的操作等待時間;e)對存儲器的操作使用區(qū)域后綴(讀,寫,預(yù)加載);f)確定預(yù)加載間隔;g)考慮多個變量以避免在讀/寫序列中的沖突;h)考慮與不同的優(yōu)化法相關(guān)的性能的提高。
全文摘要
本發(fā)明涉及一種基于源碼(17)的優(yōu)化編碼(19)自動生成系統(tǒng),該優(yōu)化代碼在一預(yù)定的硬件平臺(90)上運行,該硬件平臺包括至少一個處理器,該處理器(91)基于用戶提供的碼源,并且包括接收符號代碼序列或者標準序列(1)的裝置(51,52),該標準序列代表了所述處理器在預(yù)定應(yīng)用領(lǐng)域的性能表現(xiàn),用于接收靜態(tài)參數(shù)(2)的裝置(53),用于接收動態(tài)參數(shù)(7)的裝置(55),一個根據(jù)狀態(tài)測試和評估確定出優(yōu)化規(guī)則(9)的分析裝置(10),該狀態(tài)測試和評估是基于所述標準序列(1)、靜態(tài)參數(shù)(2)和動態(tài)參數(shù)(7)參數(shù)來確定的,一代碼優(yōu)化和生成裝置(80),其接收標準序列(1)和優(yōu)化規(guī)則(9)以檢測用戶的碼源(17),檢測可優(yōu)化循環(huán),將其分解為內(nèi)核,并且將所述代碼進行匯編及將優(yōu)化編碼進行注入,一裝置(74)用于再次注入來自編碼優(yōu)化及生成裝置(80)的信息,并且并將其返回所述基準序列與內(nèi)核相聯(lián)系。
文檔編號G06F9/45GK1930552SQ200580002516
公開日2007年3月14日 申請日期2005年1月13日 優(yōu)先權(quán)日2004年1月14日
發(fā)明者F·博丹, W·雅爾比, X·勒巴斯德, C·勒米埃, E·庫爾圖瓦, J·帕帕佐普洛, P·勒卡 申請人:原子能源局, 凱普斯企業(yè)公司, 圣康丁昂伊夫利納-凡爾賽大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1