TWI455028B - 用於產生建議訊息的臆測編譯 - Google Patents
用於產生建議訊息的臆測編譯 Download PDFInfo
- Publication number
- TWI455028B TWI455028B TW100138303A TW100138303A TWI455028B TW I455028 B TWI455028 B TW I455028B TW 100138303 A TW100138303 A TW 100138303A TW 100138303 A TW100138303 A TW 100138303A TW I455028 B TWI455028 B TW I455028B
- Authority
- TW
- Taiwan
- Prior art keywords
- optimization
- code
- speculation
- compiler
- suggestion
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
本發明之實施例係有關程式碼編譯之領域,尤係有關編譯器最佳化。
多執行緒應用程式之開發仍然是一種具有挑戰性的工作。
編譯器可提供一種讓程式設計師撰寫循序程式碼(serial code)且因而避免平行程式設計(parallel programming)的複雜性之模型。編譯器能夠轉換程式碼,而以一種平行化及向量化之方式執行。例如,編譯器自該程式碼中擷取出平行/向量語意,且轉換該程式碼。
然而,編譯器只有在其能夠驗證該平行執行將得到與循序執行相同的結果時,才轉換該程式碼。在許多情形中,程式設計師對程式設計語言構造的選擇將增添非必要的循序限制,且將導致可能無法被最佳化的迴圈。
本發明提供了改善編譯的最佳化之方法。在一實施例中,一方法包含:識別與一程式碼區有關的一或更多個最佳化臆測;以及根據一最佳化臆測而對該程式碼區的一中間表示法臆測地執行轉換。該方法包含:如果該最佳化臆測導致一較佳的編譯結果,則產生對應於該最佳化臆測之一建議訊息,且顯示該建議訊息。
在下文的說明中,述及了許多特定細節,以便提供對本發明之實施例的更徹底解說。然而,熟悉此項技術者應可了解:可在沒有這些特定細節的情形下實施本發明之實施例。在其他的情形中,係以方塊圖之形式示出一些習知的結構及裝置,而並未詳述該等習知的結構及裝置,以避免模糊了本發明之實施例。
下文中詳細說明的某些部分被以演算法及對電腦記憶體內各資料位元運算的符號表示法之方式呈現。這些演算法描述及表示法是熟悉資料處理技術的人士用來將其工作之內涵最有效地傳遞給熟悉這門技術的其他人士之工具。在本說明書及一般性的認知中,演算法被視為一系列有條理並可得到所需結果之步驟。該等步驟是需要對物理量作物理操作的步驟。雖非必然,但在一般的情況中,這些物理量之形式為可被儲存、傳輸、結合、比較、及以他種方式操作之電氣信號或磁性信號。將這些信號稱為位元、數值、元素、符號、字元、項、或數字等的術語時,已證明經常是較便利的,主要也是為了普遍使用之故。
然而,我們當謹記於心,所有這些術語及其他類似的術語都與適當的物理量相關聯,而且只是適用於這些物理量的便利性標記而已。在下文說明中除非有其他特別的陳述,否則我們當了解:在整個本說明中,使用諸如"處理"、"運算"、"計算"、"決定"、或"顯示"等術語之討論,皆係論及電腦系統或類似電子運算裝置之動作及處理,且此種電腦系統係將該電腦系統的暫存器及記憶體內表現為物理(電子)量之資料操作並變換成該電腦系統的記憶體、暫存器、或者其他此種資訊儲存裝置、傳輸裝置、或顯示裝置內同樣表現為物理量之其他資料。
本發明之實施例也有關用來執行本發明的操作之設備。可能為了必要之目的而特別建構某些設備,或者該設備可包含一般用途電腦,且係以該電腦中儲存之電腦程式選擇性地啟動或重新配置該電腦。此種電腦程式可被儲存在諸如(但不限於)其中包括軟碟、光碟、唯讀光碟(CD-ROM)、唯讀數位多功能光碟(DVD-ROM)、及磁光碟之任何類型的碟片、唯讀記憶體(Read Only Memory;簡稱ROM)、隨機存取記憶體(Random Access Memory;簡稱RAM)、可抹除可程式唯讀記憶體(EPROM)、電氣可抹除可程式唯讀記憶體(EEPROM)、非揮發性隨機存取記憶體(NVRAM)、磁卡或光學卡、或適於儲存電子指令之任何類型的媒體等的電腦可讀取的儲存媒體,且每一電腦可讀取的儲存媒體被耦合到一電腦系統匯流排。
本發明提出之演算法及顯示並非固有地與任何特定電腦或其他設備有關。可配合根據本發明所揭示之程式而使用各種一般用途系統,或者建構用來執行必要的方法步驟之更專用的設備可證明是便利的。若參照下文中之說明,將可了解各種這些系統之必要結構。此外,將不參照任何特定程式設計語言而說明本發明之實施例。應可了解到:可將各種程式設計語言用來實施本說明書中述及的本發明之揭示。
機器可讀取的媒體包括以機器(例如,電腦)可讀取的形式儲存或傳輸資訊之任何機構。例如,機器可讀取的媒體包括唯讀記憶體(ROM)、隨機存取記憶體(RAM)、磁碟儲存媒體、光學儲存媒體、及快閃記憶體裝置等的媒體。
本發明所述之方法及設備係用於編譯之最佳化。主要係參照多核心處理器電腦系統而說明該方法及設備。然而,用於編譯最佳化之該等方法及設備不受此限制,這是因為可在諸如行動電話、個人數位助理、嵌入式控制器、行動平台、桌上型平台、及伺服器平台等的任何積體電路裝置或系統上實施或以與該等任何積體電路裝置或系統相關聯之方式實施該等方法及設備,且可以配合諸如硬體/軟體執行緒等的其他資源之方式實施該等方法及設備。
本發明提供了改善編譯的最佳化之方法。在一實施例中,一方法包含:識別與一程式碼區有關的一或更多個最佳化臆測;以及根據一最佳化臆測而對該程式碼區的一中間表示法臆測地執行轉換。該方法包含:如果該最佳化臆測導致一較佳的編譯結果,則產生對應於該最佳化臆測之一建議訊息,且顯示該建議訊息。
第1圖是根據所述實施例之一電腦系統。並未示出諸如匯流排及週邊裝置等的許多相關組件,以避免模糊了本發明。請參閱第1圖,電腦系統102包含處理器106、記憶體108、原始碼104、編譯器110、程式碼最佳化器112、及目標碼114。
在一實施例中,程式設計師或軟體開發人員使用電腦系統102以產生原始碼104。在一實施例中,原始碼104包含以其中包括諸如FORTRAN、Java、或C++等的物件導向或其他語言之高階電腦語言撰寫的程式敘述。電腦系統102包含一或更多個處理器106及記憶體108,而程式被載入記憶體108中且被處理器106執行。記憶體108包含編譯器110,用以將原始碼104轉換為可執行的目標碼114。編譯器110包含被處理器106執行之程式碼最佳化器112。
在一實施例中,開發人員調用程式碼最佳化器112,以便將原始碼104中之指令的位置及布局最佳化,其中包括所產生的目標碼114中用來以陣列索引有關之方式執行迭代之各迴圈的最佳化,且其中係以與諸如多維陣列有關之方式將該所產生的目標碼114最佳化。目標碼114包含自原始碼104編譯的二進位可執行碼。
在一實施例中,程式碼最佳化器112被包含在第1圖所示的編譯器110中,或者是一獨立的模組之一部分。程式碼最佳化器112意圖重新安排巢套迴圈(nested loop)執行的順序,以便將迴圈向量化,且將迴圈巢套平行化。
在一實施例中,電腦系統102包括電腦工作站、膝上型電腦、桌上型電腦、伺服器、大型電腦、或適於開發原始碼104的任何其他運算裝置。在一實施例中,處理器106包含一或更多個中央處理單元。記憶體108包含被載入程式之一或更多個記憶體裝置。
在一實施例中,一編譯器(例如,編譯器110)執行建議模式編譯、臆測編譯、或以上兩者。編譯程序包括數個階段,其中包括階段1(臆測點),此時編譯器決定是否有將導致較佳最佳化之臆測執行的任何機會。
在一實施例中,編譯器使用一程式碼區的中間表示法執行最佳化臆測。該編譯器將該最佳化臆測轉換為有用的建議(例如,建議訊息),且將該建議訊息附加到該程式碼區。然後,該編譯器利用(先前被執行的)該最佳化臆測而繼續執行其他的編譯階段。請注意,係在程式設計師執行實際的程式碼修改之前,先實施該最佳化臆測。在一實施例中,該編譯器於該編譯程序期間加入更多的新最佳化臆測。
在一實施例中,編譯器到達該編譯器已執行了一組高階最佳化的一階段。對於被附加了建議訊息的每一程式碼區而言,該編譯器決定該程式碼區是否已被最佳化,例如,決定是否已觸發了較多的轉換(例如,向量化及平行化等)。如果確係如此,則該編譯器採取該最佳化臆測,且向使用者顯示對應的建議訊息。否則,該編譯器決定是否執行一先前臆測點之回溯。該編譯器回到該先前臆測點,且繼續執行不同的最佳化臆測。
在一實施例中,編譯器可操作而追蹤已被執行過臆測轉換的一程式碼區(例如,一特定的迴圈巢套)。於該編譯終止時(或在一最佳化階段後的一中間點上),編譯器為每一程式碼區決定任何高階最佳化是否已被執行。如果確係如此,則該編譯器顯示/輸出被附加到該程式碼區之建議訊息。如果並非如此,則該編譯器決定該編譯器是否能夠回溯到一先前臆測點。該編譯器嘗試一不同的最佳化臆測。
在一實施例中,此類高階最佳化的例子包括:迴圈巢套之平行化、迴圈之向量化、迴圈之軟體管線操作、以及記憶體最佳化(例如,迴圈阻絕(loop blocking)及迴圈巢套上的展開堵塞(unroll-jam))。
在一實施例中,編譯器內之臆測編譯將選擇性建議提供給使用者,以便改善應用程式的效能。執行建議模式編譯的編譯器之輸出包括使用者能夠遵循而改善其應用程式的效能之一組建議訊息。
在一實施例中,編譯器工作流程包括多個階段。每一階段對使用者程式碼的中間表示法執行不同的分析及轉換。當該編譯器執行建議模式編譯時,該編譯器可操作而分析且執行具有導致更好的最佳化的高機率之一臆測轉換。
在一實施例中,編譯器可操作而將一最佳化臆測轉換為將被提供給程式設計師之一"有用的"建議訊息。係以原始碼的形式表達該建議訊息(使用來源變數名稱及行編號等)。該建議訊息將與如何得到"臆測"程式碼路徑的效益有關之細節傳遞給程式設計師。
在一實施例中,臆測編譯將一旦與每一程式碼區有關的建議訊息被採用之後將實現最佳化的效益之一高度保證提供給程式設計師。當有將會影響到單一程式碼區的(對應於多個建議訊息之)多個議題時,臆測編譯導致在單一編譯中產生所有的建議訊息。程式設計師能夠在單一步驟中執行一完整的分析,且能夠決定將採用哪些建議訊息。
在一實施例中,編譯器找出用來解決某一議題的(對應於不同的建議訊息之)多種方式,例如:將限制關鍵字用於函式上的指標引數;以及將編譯器引數用來啟動迴圈不變程式碼移動(loop-invariant code-motion)。該前一建議屬於常式層級的範圍(因為限制關鍵字被應用於常式的指標參數),且後一建議屬於編譯層級的範圍(因為該選項被應用於整個編譯)。在一實施例中,編譯器將一建議層級用來解決這些議題,且(根據訊息識別碼)將抑制特定建議訊息的一選項提供給程式設計師。
在一實施例中,編譯器合併其目標為相同原始碼區的兩個或更多個建議訊息,例如,避免針對相同迴圈巢套的重複訊息。可能因該編譯器對一迴圈編譯的版本或相同的迴圈由於函式內嵌(function in-lining)而出現在中間表示法的多個實例,而產生該等重複訊息。
在一實施例中,一建議模式編譯器可讓使用者指定一檔案或一或多個常式中被視為具有關鍵性的一些區域。使用者可根據其對應用程式的知識,或利用基於效能分析工具的先前分析,而得知該資訊。
在一實施例中,於遭遇第一最佳化機會時,編譯器進入前文所述之臆測模式,且繼續分析後續的迴圈。在該臆測模式中,該編譯器驗證:如果程式設計師應用了適當的程式碼修改,則最佳化事實上將是可能的。只有在此種狀況下,該編譯器才將建議訊息提供給該程式設計師。
在一實施例中,有不同類型的最佳化臆測。例如,(與一最佳化臆測及程式碼區相關聯的)一建議訊息是下列建議:將一局部變數(local variable)用於一迴圈的上界(而不是用於一類別成員(class member));在迴圈主體的頂部上無條件地設定一局部變數的初始值;或將限制關鍵字加入一函式定義的指標引數。
在一實施例中,如果滿足一新的編譯指示(pragma)之語意(當被程式設計師證實時),則一建議訊息建議將該新的編譯指示應用於某一迴圈層級。在一實施例中,一建議訊息建議加入可確立新特性(例如,-Qansi-alias或-Qno-alias-args)的新命令行編譯器選項。
在一實施例中,一建議訊息係關於一使用者程式碼區而為特定的,因而程式設計師在對該程式碼/程式執行了某些分析之後,將採用或拒絕該建議訊息。編譯器描述使用者採用建議訊息時將作出的判定。該建議訊息指導使用者如何決定一被提議的修改在被檢查的特定程式碼部分(例如,一程式碼區)中是否為正確的。
在一實施例中,編譯器對局部最佳化臆測的偏好大於編譯器層級的最佳化。該編譯器將與會影響到單一迴圈的原始碼改變有關之建議提供給程式設計師,而不將影響範圍寬廣許多的增添/移除某一編譯器選項之建議提供給程式設計師。
諸如將導致迴圈巢套的平行化及向量化之高階最佳化臆測之例子包括下文所述的建議訊息的一些例子。
在一實施例中,建議訊息是增添將確立新特性的一新編譯器選項之一特性。例如,此類編譯器選項之例子包括C程式中之"Qansi-alias"及"Qno-alias-args"。"Qansi-alias"是程式設計師所作出的該應用程式碼遵循美國國家標準學會(ANSI)語意之一判定。"Qno-alias-args"係程式設計師所作出的對為一函式的輸入引數的各指標之間沒有別名問題之一判定。在這兩種情形中,臆測點是執行用來將迴圈不變量(loop invariant)計算移出一迴圈的部分冗餘消除(Partial Redundancy Elimination;簡稱PRE)的一早期階段。在一實施例中,在DO迴圈辨識及諸如迴圈巢套的平行化及向量化等的迴圈最佳化轉換之前,先執行一PRE階段。在該建議模式編譯中,編譯器嘗試找到利用來自這些選項的一些額外選項對特定的迴圈巢套臆測地執行額外的迴圈不變程式碼移動之機會。如果該嘗試是成功的,則編譯器在(被附加到該迴圈巢套的)一建議訊息中記錄該最佳化臆測,且執行該迴圈不變程式碼移動,使後續的轉換可受益於該程式碼移動。
在一實施例中,建議訊息是移動會導致(自現行函式)早期轉回到迴圈之外的一函式呼叫之一建議。例如,程式碼檢查一迴圈內之某一錯誤條件(使用一函式呼叫時),且根據該錯誤條件而早期轉回。在一實施例中,如果有自一迴圈的"早期轉回",則可停用該迴圈之最佳化(例如,平行化及向量化)。此種構造的臆測點是該早期PRE階段。在一實施例中,編譯器決定是否要移動該函式呼叫以及到迴圈之外的該"早期轉回"。在被附加到該迴圈的一建議訊息中記錄該最佳化臆測。該編譯器繼續執行該移動操作,且然後在一臆測模式中將該迴圈標示為一被計數之DO迴圈,因而能夠稍後對該迴圈執行高階最佳化。有執行純量(scalar)最佳化的數個階段,例如,在迴圈最佳化之前被執行的常數傳播(constant-propagation)及複製傳播(copy-propagation)。臆測函式運算外提(function-hoisting)可啟用通常將導致較好的迴圈最佳化之更多的常數傳播。
在一實施例中,建議訊息是使用一局部變數作為一迴圈的上界之一建議。臆測點是在該編譯器內執行DO迴圈辨識之階段。該階段是編譯器將各迴圈分類為具有一固定跳脫計數(trip count)(在進入點上)或不具有一固定跳脫計數之階段。編譯器假定上界在該迴圈的執行期間將改變。當遭遇到此種情況時,該編譯器將上界計算臆測地移到該迴圈之外。該編譯器假定該上界在該迴圈的執行期間將不改變。在被附加到該迴圈的一建議訊息中捕獲該最佳化臆測。該編譯器繼續在一臆測模式中將該迴圈標示為一被計數之DO迴圈,因而能夠稍後對該迴圈執行高階最佳化。
在一實施例中,建議訊息是將一特定編譯指示用於一迴圈巢套之一建議。該建議的一臆測點之一例子是編譯器內的迴圈平行化階段。為了將一迴圈巢套成功地平行化,編譯器必須確定作為被平行化的一候選程式碼區的該迴圈內之記憶體存取沒有跨迴圈的資料相依性(loop-carried data dependences)。如果該編譯器無法確定兩個記憶體存取之間是否存在此種跨迴圈的相依性,則該編譯器(在一正常模式中)將中斷執行對該迴圈的平行化。相反地,在該建議模式中,編譯器將一"#pragma parallel"指引臆測地用於該迴圈,且進一步繼續執行。於此同時,該編譯器記錄具有相依性問題的記憶體參考位址,作為提供給使用者的建議訊息之一部分。在一實施例中,建議訊息建議具有額外的子句之該指引"#pragma parallel private(W)"可解決該編譯器內之相依性問題,且讓編譯進一步繼續執行。該最佳化臆測的另一例子是編譯器檢查迴圈內之各記憶體參考位址間之某些種類的跨迴圈相依性(不存在)時之一迴圈向量化階段。建議訊息使用具有所涉及的特定記憶體參考位址的細節之一"#pragma ivdep"指引。
在一實施例中,建議訊息是將一常式標示為elemental/const或並行安全(concurrency-safe)之一建議。當對一使用者常式的一呼叫阻止一迴圈的平行化時,將適用該建議訊息。如果程式設計師知道常式不會造成副作用且該常式的結果必然是確定的時(亦即,轉回值(return value)唯一地取決於輸入引數,且不取決於任何全域狀態),則該程式設計師可將該常式標示為"基本的"("elemental")(在Fortran中)或"const"(在C/C++中),以便將這些呼叫不會影響到平行化之訊息通知該編譯器。此外,程式設計師想要容許並行執行的具有副作用之常式(例如,列印訊息至stderr)可被標示為並行安全,以便能夠執行高階最佳化。
下文中示出了臆測最佳化及建議訊息產生的兩個例子。表1中示出第一程式碼例子,且表2示出以與該程式碼有關之方式產生的建議訊息之一例子。
表1:程式碼例子1
在一實施例中,當在建議模式下編譯該程式碼時,編譯器產生與該迴圈巢套有關的三個建議訊息(請參閱行29):
表2:與程式碼例子1的有關的建議訊息之例子
如上述例子中例示的,產生了與單一迴圈之平行化有關的建議訊息。在一實施例中,編譯器能夠繼續臆測地解決該編譯器遭遇的每一問題,因而最終結果是該迴圈的完全平行化。
表3中示出第二程式碼例子,且表4示出以與該程式碼有關之方式產生的建議訊息之一例子。
表3:程式碼例子2
在一實施例中,當在建議模式下編譯該程式碼時,編譯器產生與該迴圈巢套有關的兩個建議訊息(請參閱行25):
表4:與程式碼例子2的有關的建議訊息之例子
如該例子所例示的,產生了與外迴圈的平行化有關之建議訊息。在一實施例中,編譯器能夠臆測地繼續解決該編譯器遭遇的任何問題。最終結果是外迴圈的平行化以及內迴圈的向量化。global_m的複製傳播導致內迴圈的成功向量化。在不使用臆測編譯的情況下,內迴圈將有向量化的相依性問題。
第2圖是用來執行臆測編譯的一程序的一實施例之一流程圖。係以處理邏輯執行該程序,該處理邏輯可包含硬體(電路或專用邏輯等)、軟體(諸如在一般用途電腦系統或專用機器上執行之軟體)、或以上兩者的組合。在一實施例中,係配合一編譯器(例如,與第1圖有關之編譯器110)而執行該程序。在一實施例中,係以與第4圖有關之一電腦系統執行該程序。
請參閱第2圖,在一實施例中,處理邏輯開始時係在程序區塊601中編譯程式碼。一程式碼被分割成一些程式碼區(程式碼部分)。一程式碼區可包含一些其他的程式碼區,且可被巢套在其他的程式碼區內。
在一實施例中,處理邏輯於編譯該程式碼時在程序區塊602中識別與一程式碼區有關的一或更多個最佳化臆測。最佳化臆測可能導致迴圈巢套的平行化及迴圈的向量化。在一實施例中,處理邏輯在程序區塊603中根據一最佳化臆測而對該程式碼區的一中間表示法臆測地執行轉換。在修改該程式碼區之前臆測地執行該轉換。
在一實施例中,處理邏輯在程序區塊604中分析其他程式碼區。處理邏輯使用該被轉換的中間表示法而編譯及分析與該程式碼區有關的其他程式碼區。在一實施例中,該程式碼區是被巢套在另一較大的程式碼區內之一迴圈。
在一實施例中,處理邏輯在程序區塊605中根據該轉換之後的編譯結果而決定是否採取該臆測最佳化,例如,決定配合該最佳化臆測而對該等其他程式碼區執行之編譯是否成功。處理邏輯決定是否接受該最佳化臆測。
在一實施例中,處理邏輯在程序區塊610中使一或更多個最佳化臆測與該程式碼區相關聯。在一實施例中,處理邏輯在程序區塊611中產生對應於該最佳化臆測之一建議訊息。在一實施例中,處理邏輯在程序區塊612中使該建議訊息與該程式碼區相關聯。
在一實施例中,處理邏輯在程序區塊613中決定是否向使用者顯示該建議訊息。如果採取、證實、或接受了該對應的最佳化臆測,則處理邏輯導致顯示該建議訊息。該建議訊息包含與該程式碼區有關的特定資訊。在一實施例中,處理邏輯合併與該程式碼區有關的兩個或更多個建議訊息。處理邏輯根據每一最佳化臆測的局部化範圍而安排數個最佳化臆測當中的優先順序。
在一實施例中,如果該最佳化不被接受,則處理邏輯在程序區塊606中決定是否回溯而應用一不同的最佳化臆測。
在一實施例中,處理邏輯提供是否要啟用建議模式編譯之一選項。在一實施例中,處理邏輯參考一儲存的設定檔、一作業系統、一使用者組態設定、或以上各項的組合,而決定是否要啟用該建議模式編譯。
在一實施例中,建議訊息是諸如使用一局部變數作為一迴圈的上界、將一編譯指示用於一迴圈巢套、將一常式標示為基本的或並行安全的、若一函式呼叫導致一早期轉回則將該函式呼叫移到一迴圈之外、或使用一編譯器選項確立新特性之一建議。
可以各種電子裝置及邏輯電路實施本發明之實施例。此外,包含本發明的實施例之裝置或電路可被包含在各種電腦系統內。本發明之實施例亦可被包含在其他的電腦系統拓撲及架構中。
例如,第3圖示出配合本發明的一實施例之一電腦系統。處理器705自第1階(L1)快取記憶體706、第2階(L2)快取記憶體710、及主記憶體715存取資料。在本發明的其他實施例中,快取記憶體706可以是由一L1快取記憶體以及電腦系統記憶體階層內之諸如一L2快取記憶體等的其他記憶體構成之一多階快取記憶體,且快取記憶體710是諸如L3快取記憶體等的後續較低階快取記憶體、或更多的多階快取記憶體。此外,在其他實施例中,該電腦系統可具有作為被一個以上的處理器核心共享的快取記憶體之快取記憶體710。
處理器705可具有任何數目的處理核心。然而,可以硬體、軟體、或以上兩者的某一組合而在該系統內之其他裝置或分散在該系統內之其他裝置實施本發明之其他實施例。
可以諸如動態隨機存取記憶體(Dynamic Random Access Memory;簡稱DRAM)、硬碟機(Hard Disk Drive;簡稱HDD)720、基於非揮發性隨機存取記憶體(NVRAM)技術之固態硬碟725、或位於遠離該電腦系統且係經由網路介面730或經由無線介面740而連接的含有各種儲存裝置及技術之一記憶體來源等的各種記憶體來源實施主記憶體715。該快取記憶體可被設置在該處理器之內,或可被設置在接近該處理器之處,例如,被設置在該處理器的區域匯流排707上。此外,該快取記憶體可包含諸如六電晶體(6T)單元等的較快速之記憶單元或具有大約相等的或較快速的存取速度之其他記憶單元。
然而,本發明之其他實施例可能存在配合第3圖所示的系統內之其他電路、邏輯單元、或裝置。此外,本發明之其他實施例可能被分佈於第3圖所示之數個電路、邏輯單元、或裝置。
同樣地,可在一點對點電腦系統內實施至少一實施例。例如,第4圖示示出被配置成一點對點(Point-to-Point;簡稱PtP)組態之一電腦系統。第4圖尤其示出以一些點對點介面將各處理器、記憶體、及各輸入/輸出裝置互連之一系統。
第4圖所示之系統亦可包含數個處理器,而為了清晰只示出兩個處理器870、880。處理器870、880可分別包含連接到記憶體850、851之一本地記憶體控制中心(Memory Controller Hub;簡稱MCH)811、821。處理器870、880可使用PtP介面電路812、822而經由一點對點(PtP)介面853交換資料。處理器870、880可分別使用點對點介面電路813、823、860、861而經由個別的點對點(PtP)介面830、831與一晶片組890交換資料。晶片組890亦可經由一高性能圖形介面862而與一高性能圖形電路852交換資料。本發明之各實施例可被耦合到電腦匯流排(834或835),或被耦合到晶片組890內,或被耦合到資料儲存裝置875內,或被耦合到第4圖所示之記憶體850內。
然而,本發明之其他實施例亦可在第4圖所示之系統內存在其他的電路、邏輯單元、或裝置。此外,本發明之其他實施例可能被分佈於第4圖所示之數個電路、邏輯單元、或裝置。
本發明不限於所述之該等實施例,而是可以最後的申請專利範圍之精神及範圍內之修改及改變實施本發明。例如,我們應可了解:本發明可適用於所有類型的半導體積體電路(Integrated Circuit;簡稱IC)晶片。這些IC晶片的例子包括(但不限於)處理器、控制器、晶片組組件、可程式邏輯陣列(Programmable Logic Array;簡稱PLA)、記憶體晶片、或網路晶片等的晶片。此外,我們應可了解:可能提供了一些例示的尺寸/模型/值/範圍,但是本發明之實施例不限於此。當一些製造技術(例如,微影)隨著時間的經過而成熟時,預期可製造出尺寸較小的裝置。
鑑於對此項技術具有一般知識者在參閱前文的說明之後將無疑地易於了解本發明的實施例之許多改變及修改,我們應可了解:所舉例示出及說明的任何特定實施例將決不被視為限制。因此,對各實施例的細節之參照將不限制申請專利範圍之範圍,而申請專利範圍本質上只陳述被視為對本發明是必要的那些特徵。
102...電腦系統
106,705,870,880...處理器
108,850,851...記憶體
104...原始碼
110...編譯器
112...程式碼最佳化器
114...目標碼
706...第1階快取記憶體
710...第2階快取記憶體
715...主記憶體
720...硬碟機
725...固態硬碟
730...網路介面
740...無線介面
707...區域匯流排
811,821...記憶體控制中心
812,813,822,823,860,861...點對點介面電路
830,831,853...點對點介面
890...晶片組
852...高性能圖形電路
862...高性能圖形介面
834,835...匯流排
875...資料儲存裝置
若參閱前文中之詳細說明以及本發明的各實施例之附圖,將可對本發明的實施例有更完整的了解,然而,不應理解為將本發明限制於特定實施例,而是該等特定實施例只是用於解說及了解。
第1圖示出根據所述的實施例之一電腦系統。
第2圖是用來執行臆測編譯的一程序的一實施例之一流程圖。
第3圖示出配合本發明的一實施例而使用之一電腦系統。
第4圖示出配合本發明的一實施例而使用之一點對點電腦系統。
Claims (20)
- 一種產生建議的方法,包含:執行編譯程式碼的至少一第一臆測點階段,以獲取該編譯程式碼的一中間表示法,其中編譯器決定是否有臆測執行的任何機會;識別該編譯程式碼的該中間表示法之一第一程式碼區;識別與該第一程式碼區有關的一或更多個最佳化臆測;根據一第一最佳化臆測而對該第一程式碼區臆測地執行轉換;決定是否接受該第一最佳化臆測;以及僅僅如果接受該第一最佳化臆測,則根據該轉換,產生對應於該第一最佳化臆測之一建議訊息,該建議訊息係相關聯於該第一程式碼區,且用來源變數名稱及來源行編號來表達該建議訊息。
- 如申請專利範圍第1項之方法,其中該一或更多個最佳化臆測導致一迴圈巢套之平行化及一迴圈之向量化。
- 如申請專利範圍第1項之方法,其中在修改該第一程式碼區之前臆測地執行該執行轉換。
- 如申請專利範圍第1項之方法,進一步包含:至少根據該轉換之後的編譯結果而驗證是否採取該臆測最佳化。
- 如申請專利範圍第1項之方法,進一步包含:配合該第一程式碼區的一被轉換之中間表示法而編譯一第二程式碼區,其中該第二程式碼區係與該第一程式碼區有關。
- 如申請專利範圍第5項之方法,其中該第一程式碼區是被巢套在該第二程式碼區內之一迴圈。
- 如申請專利範圍第1項之方法,進一步包含:使該第一最佳化臆測與該第一程式碼區相關聯;以及產生對應於該第一最佳化臆測之一第一建議訊息。
- 如申請專利範圍第7項之方法,進一步包含:如果不接受該第一最佳化臆測,則決定是否回溯而應用一第二最佳化臆測;根據該第二最佳化臆測而對該第一程式碼區臆測地執行一第二轉換;決定是否接受該第二最佳化臆測;以及如果接受該第二最佳化臆測,則根據該轉換,產生對應於該第二最佳化臆測之一建議訊息。
- 如申請專利範圍第7項之方法,進一步包含:合併與該第一程式碼區有關的兩個或更多個建議訊息;以及顯示與該第一程式碼區相關聯的一建議訊息。
- 如申請專利範圍第7項之方法,進一步包含:至少根據該等最佳化臆測中之每一最佳化臆測的局部化範圍而安排該一或更多個最佳化臆測當中的優先順序。
- 如申請專利範圍第7項之方法,進一步包含:將啟用一建議模式編譯的一選項提供給使用者。
- 如申請專利範圍第7項之方法,其中該第一建議訊息是如果一函式呼叫導致一早期轉回則將該函式呼叫移到一迴圈之外的一建議。
- 如申請專利範圍第7項之方法,其中該第一建議訊息是使用一局部變數作為一迴圈的上界之一建議。
- 如申請專利範圍第7項之方法,其中該第一建議訊息是將一編譯指示用於一迴圈巢套之一建議。
- 如申請專利範圍第7項之方法,其中該第一建議訊息是將一常式標示為基本的或並行安全的一建議。
- 如申請專利範圍第7項之方法,其中該第一建議訊息是使用一編譯器選項而確立新特性之一建議。
- 一種包含電腦可讀取的儲存媒體之製造物品,該電腦可讀取的儲存媒體包含在其上儲存指令之資料,於該等指令被一機器存取時,將使該機器執行一方法,該方法包含:執行編譯程式碼的至少一第一臆測點階段,以獲取該編譯程式碼的一中間表示法,其中編譯器決定是否有臆測執行的任何機會;識別該編譯程式碼的該中間表示法之一第一程式碼區;識別與一第一程式碼區有關的一或更多個最佳化臆測; 根據一第一最佳化臆測而對該第一程式碼區臆測地執行轉換;決定是否接受該第一最佳化臆測;以及僅僅如果接受該第一最佳化臆測,則根據該轉換,產生對應於該第一最佳化臆測之一建議訊息,該建議訊息係相關聯於該第一程式碼區,且用來源變數名稱及來源行編號來表達該建議訊息。
- 如申請專利範圍第17項之物品,其中該方法進一步包含:如果不接受該第一最佳化臆測,則決定是否回溯而應用一第二最佳化臆測;根據該第二最佳化臆測而對該第一程式碼區臆測地執行一第二轉換;決定是否接受該第二最佳化臆測;以及如果接受該第二最佳化臆測,則根據該轉換,產生對應於該第二最佳化臆測之一建議訊息。
- 一種用來編譯程式碼之系統,包含:用來儲存編譯器程式碼之記憶體;以及被耦合到該記憶體之一處理器,用以執行該編譯器程式碼,其中該編譯器程式碼被執行時將執行操作,該等操作包含:執行編譯程式碼的至少一第一臆測點階段,以獲取該編譯程式碼的一中間表示法,其中編譯器決定是否有臆測執行的任何機會; 識別該編譯程式碼的該中間表示法之一第一程式碼區;識別與一第一程式碼區有關的一或更多個最佳化臆測;根據一第一最佳化臆測而對該第一程式碼區臆測地執行轉換;決定是否接受該第一最佳化臆測;以及僅僅如果接受該第一最佳化臆測,則根據該轉換,產生對應於該第一最佳化臆測之一建議訊息,該建議訊息係相關聯於該第一程式碼區,且用來源變數名稱及來源行編號來表達該建議訊息。
- 如申請專利範圍第19項之系統,其中該等操作進一步包含:如果不接受該第一最佳化臆測,則決定是否回溯而應用一第二最佳化臆測;根據該第二最佳化臆測而對該第一程式碼區臆測地執行一第二轉換;決定是否接受該第二最佳化臆測;以及如果接受該第二最佳化臆測,則根據該轉換,產生對應於該第二最佳化臆測之一建議訊息。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/942,543 US9009689B2 (en) | 2010-11-09 | 2010-11-09 | Speculative compilation to generate advice messages |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201232405A TW201232405A (en) | 2012-08-01 |
TWI455028B true TWI455028B (zh) | 2014-10-01 |
Family
ID=46020875
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW100138303A TWI455028B (zh) | 2010-11-09 | 2011-10-21 | 用於產生建議訊息的臆測編譯 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9009689B2 (zh) |
TW (1) | TWI455028B (zh) |
WO (1) | WO2012064690A2 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8589901B2 (en) | 2010-12-22 | 2013-11-19 | Edmund P. Pfleger | Speculative region-level loop optimizations |
US8793675B2 (en) * | 2010-12-24 | 2014-07-29 | Intel Corporation | Loop parallelization based on loop splitting or index array |
KR102013582B1 (ko) * | 2012-09-07 | 2019-08-23 | 삼성전자 주식회사 | 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법 |
US9262139B2 (en) * | 2013-01-07 | 2016-02-16 | Advanced Micro Devices, Inc. | Layered programming for heterogeneous devices |
US9015685B2 (en) * | 2013-03-01 | 2015-04-21 | International Business Machines Corporation | Code analysis for simulation efficiency improvement |
US9213531B2 (en) * | 2014-05-01 | 2015-12-15 | Google Inc. | Methods to eliminate extra memory loads while accessing global variables in position independent code |
US9830134B2 (en) * | 2015-06-15 | 2017-11-28 | Qualcomm Incorporated | Generating object code from intermediate code that includes hierarchical sub-routine information |
US9720691B2 (en) * | 2015-09-23 | 2017-08-01 | Qualcomm Incorporated | Speculative scalarization in vector processing |
US10180829B2 (en) * | 2015-12-15 | 2019-01-15 | Nxp Usa, Inc. | System and method for modulo addressing vectorization with invariant code motion |
US10216496B2 (en) | 2016-09-27 | 2019-02-26 | International Business Machines Corporation | Dynamic alias checking with transactional memory |
CN108255721A (zh) * | 2018-01-12 | 2018-07-06 | 深圳市海派通讯科技有限公司 | 智能终端编译脚本预插值结果分析的方法、系统及存储介质 |
US10698668B1 (en) * | 2018-05-29 | 2020-06-30 | Amazon Technologies, Inc. | Custom code transformations during compilation process |
EP3931685A4 (en) * | 2019-02-26 | 2022-10-12 | INTEL Corporation | CONSTANT PROPAGATION, WORKLOAD ORIENTED, FOR A COMPILER |
US20230161572A1 (en) * | 2021-11-24 | 2023-05-25 | International Business Machines Corporation | Tuning optimization to reduce compilation delays |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5966538A (en) * | 1997-10-31 | 1999-10-12 | Hewlett-Packard Company | Method and apparatus for automatically determining which compiler options should be used when compiling a computer program |
US20030023961A1 (en) * | 2001-07-30 | 2003-01-30 | International Business Machines Corporation | Method and apparatus for displaying compiler-optimizated code |
US20030140334A1 (en) * | 2001-12-13 | 2003-07-24 | Granston Elana D. | Method for selective solicitation of user assistance in the performance tuning process |
US20050144602A1 (en) * | 2003-12-12 | 2005-06-30 | Tin-Fook Ngai | Methods and apparatus to compile programs to use speculative parallel threads |
TW201030606A (en) * | 2008-11-05 | 2010-08-16 | Intel Corp | Optimizing performance of instructions based on sequence detection or information associated with the instructions |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6959435B2 (en) * | 2001-09-28 | 2005-10-25 | Intel Corporation | Compiler-directed speculative approach to resolve performance-degrading long latency events in an application |
US7039909B2 (en) * | 2001-09-29 | 2006-05-02 | Intel Corporation | Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization |
US6964043B2 (en) | 2001-10-30 | 2005-11-08 | Intel Corporation | Method, apparatus, and system to optimize frequently executed code and to use compiler transformation and hardware support to handle infrequently executed code |
US7257810B2 (en) * | 2001-11-02 | 2007-08-14 | Sun Microsystems, Inc. | Method and apparatus for inserting prefetch instructions in an optimizing compiler |
US7493607B2 (en) * | 2002-07-09 | 2009-02-17 | Bluerisc Inc. | Statically speculative compilation and execution |
US7877738B2 (en) * | 2003-06-20 | 2011-01-25 | Apple Inc. | Speculative compilation |
US7627864B2 (en) * | 2005-06-27 | 2009-12-01 | Intel Corporation | Mechanism to optimize speculative parallel threading |
US7954094B2 (en) * | 2006-03-27 | 2011-05-31 | International Business Machines Corporation | Method for improving performance of executable code |
US8136102B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
US7908256B2 (en) | 2007-11-30 | 2011-03-15 | International Business Machines Corporation | Speculative computation lock coarsening through the use of localized lock reservation |
US8214814B2 (en) * | 2008-06-24 | 2012-07-03 | International Business Machines Corporation | Sharing compiler optimizations in a multi-node system |
US8539464B2 (en) * | 2008-10-30 | 2013-09-17 | International Business Machines Corporation | Distributed just-in-time compilation |
US8621446B2 (en) * | 2010-04-29 | 2013-12-31 | International Business Machines Corporation | Compiling software for a hierarchical distributed processing system |
US8949808B2 (en) * | 2010-09-23 | 2015-02-03 | Apple Inc. | Systems and methods for compiler-based full-function vectorization |
-
2010
- 2010-11-09 US US12/942,543 patent/US9009689B2/en active Active
-
2011
- 2011-10-21 TW TW100138303A patent/TWI455028B/zh not_active IP Right Cessation
- 2011-11-08 WO PCT/US2011/059701 patent/WO2012064690A2/en active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5966538A (en) * | 1997-10-31 | 1999-10-12 | Hewlett-Packard Company | Method and apparatus for automatically determining which compiler options should be used when compiling a computer program |
US20030023961A1 (en) * | 2001-07-30 | 2003-01-30 | International Business Machines Corporation | Method and apparatus for displaying compiler-optimizated code |
US20030140334A1 (en) * | 2001-12-13 | 2003-07-24 | Granston Elana D. | Method for selective solicitation of user assistance in the performance tuning process |
US20050144602A1 (en) * | 2003-12-12 | 2005-06-30 | Tin-Fook Ngai | Methods and apparatus to compile programs to use speculative parallel threads |
TW201030606A (en) * | 2008-11-05 | 2010-08-16 | Intel Corp | Optimizing performance of instructions based on sequence detection or information associated with the instructions |
Also Published As
Publication number | Publication date |
---|---|
TW201232405A (en) | 2012-08-01 |
WO2012064690A3 (en) | 2012-07-26 |
WO2012064690A2 (en) | 2012-05-18 |
US9009689B2 (en) | 2015-04-14 |
US20120117552A1 (en) | 2012-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI455028B (zh) | 用於產生建議訊息的臆測編譯 | |
Verdoolaege et al. | Equivalence checking of static affine programs using widening to handle recurrences | |
US8364938B2 (en) | Running-AND, running-OR, running-XOR, and running-multiply instructions for processing vectors using a base value from a key element of an input vector | |
US8417921B2 (en) | Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector | |
US8447956B2 (en) | Running subtract and running divide instructions for processing vectors | |
US8959316B2 (en) | Actual instruction and actual-fault instructions for processing vectors | |
US8984262B2 (en) | Generate predicates instruction for processing vectors | |
US8650383B2 (en) | Vector processing with predicate vector for setting element values based on key element position by executing remaining instruction | |
US9430203B2 (en) | Information processing apparatus and compilation method | |
US20100325399A1 (en) | Vector test instruction for processing vectors | |
US20110283092A1 (en) | Getfirst and assignlast instructions for processing vectors | |
US20060200796A1 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
CN107003885B (zh) | 用于低级别可组合高性能计算库的技术 | |
Bouajjani et al. | Analysis of recursively parallel programs | |
JP2015201119A (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
Hague et al. | Collapsible pushdown automata and recursion schemes | |
US11262989B2 (en) | Automatic generation of efficient vector code with low overhead in a time-efficient manner independent of vector width | |
Bi et al. | Heron: Automatically constrained high-performance library generation for deep learning accelerators | |
CN107748716A (zh) | 一种程序漏洞的查找方法及终端设备 | |
Katel et al. | High performance gpu code generation for matrix-matrix multiplication using mlir: some early results | |
US10108405B2 (en) | Compiling apparatus and compiling method | |
Kim et al. | Irregular register allocation for translation of test-pattern programs | |
Singh | An Empirical Study of Programming Languages from the Point of View of Scientific Computing | |
Zhang et al. | OrdinalFix: Fixing Compilation Errors via Shortest-Path CFL Reachability | |
Nobre | Efficient target and application specific selection and ordering of compiler passes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |