亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

使用雙字節(jié)序編譯器優(yōu)化代碼的制作方法

文檔序號:6596490閱讀:123來源:國知局
專利名稱:使用雙字節(jié)序編譯器優(yōu)化代碼的制作方法
使用雙字節(jié)序編譯器優(yōu)化代碼
背景技術(shù)
字節(jié)的排列順序是數(shù)據(jù)存儲和檢索的屬性,其中存儲和檢索支持多種訪問大小(例如,8比特、16比特、32比特、64比特)。更細(xì)粒度的訪問允許程序員看到在存儲器中更大的訪問存儲字節(jié)的順序。將大字節(jié)序變量以與小字節(jié)序變量相反的字節(jié)順序存儲在存儲器中。以最低有效字節(jié)位于最低存儲器字節(jié)地址的方式來存儲小字節(jié)序變量。當(dāng)存在于處理器寄存器中時,包含相同值的大字節(jié)序和小字節(jié)序變量是相同的 。僅在存儲器中的順序是不同的。16比特、32比特和64比特數(shù)據(jù)中的字節(jié)的順序?qū)Τ绦騿T而言是可見的。在C編程語言中,程序員能夠通過使用共用體(一種覆蓋數(shù)據(jù)結(jié)構(gòu)的類型)或者通過將指向多個字節(jié)的數(shù)據(jù)的指針轉(zhuǎn)換為指向單個字節(jié)的指針,來訪問字節(jié)。歷史上,使用這些技術(shù)來提高性能。因此,在不同字節(jié)序的架構(gòu)上運(yùn)行的相同C/C++代碼可能產(chǎn)生不同的結(jié)果。例如,對于C代碼int i = 0x12345678 ;以及char c = * ((char*) &i),如果代碼在大字節(jié)序架構(gòu)上編譯和運(yùn)行,則‘c’的值將是0x12,而如果代碼在小字節(jié)序架構(gòu)上編譯和運(yùn)行,其將是0x78。使用雙字節(jié)序(bi-endian)技術(shù)的編譯器允許對初始針對大字節(jié)序架構(gòu)開發(fā)的源代碼進(jìn)行編譯,以在小字節(jié)序架構(gòu)上運(yùn)行。如果以特殊模式來編譯代碼,則在大多數(shù)情況下,該代碼以與其在大字節(jié)序架構(gòu)上編譯和運(yùn)行情況下其將工作的方式相同的方式來工作,即,在上面的示例中‘c’等于0x12。通過在將被指定為大字節(jié)序的數(shù)據(jù)加載和存儲到存儲器中之前添加“字節(jié)交換”操作來實現(xiàn)該行為。使用雙字節(jié)序技術(shù)的編譯器通常用于編譯遺留代碼以在現(xiàn)代的小字節(jié)序架構(gòu)上運(yùn)行。程序員通常將所有的遺留代碼標(biāo)記為大字節(jié)序,而并非確定每個特定的數(shù)據(jù)塊必須是大字節(jié)序還是小字節(jié)序。因此,編譯器在數(shù)據(jù)的加載和存儲之前添加字節(jié)交換,即使在其字節(jié)序?qū)Τ绦騿T而言并不重要的情況下。這不利地影響了性能。


圖I是根據(jù)本發(fā)明的一個實施例的用于執(zhí)行字節(jié)交換消除的方法的流程圖。圖2是根據(jù)本發(fā)明的一個實施例的用于通過控制數(shù)據(jù)字節(jié)順序來優(yōu)化代碼的方法的流程圖。圖3是根據(jù)本發(fā)明的一個實施例的用于存儲性能統(tǒng)計的各種數(shù)據(jù)存儲設(shè)備的框圖。圖4是根據(jù)本發(fā)明的實施例的系統(tǒng)的框圖。
具體實施例方式實施例可以基于域交換的概念通過消除字節(jié)交換操作/將字節(jié)交換操作移動到更冷的路徑來提高所生成的代碼的性能。此外,在可能時,實施例可以不考慮數(shù)據(jù)字節(jié)順序類型的選擇以提高性能。如本文中所使用的,交換容忍(swap-tolerant)表達(dá)式是能夠利用相對表達(dá)式來替代的正在被編譯的代碼的表達(dá)式,其中所述相對表達(dá)式對不同字節(jié)順序的一些(或全部)參數(shù)進(jìn)行操作并且產(chǎn)生相同或不同字節(jié)順序的有效結(jié)果。作為某些示例,與常量(例如,X= = 0x12345678)的比較是交換容忍的,這是因為它具有相對部(y ==0x78563412),如果對該相對部給予交換參數(shù)SWAP(x),則該相對部將產(chǎn)生與原始表達(dá)式相同的結(jié)果,其中,SWAP是執(zhí)行字節(jié)交換操作的表達(dá)式。比特AND操作是交換容忍的,這是因為存在操作(相同的比特AND)使得采用交換參數(shù)將產(chǎn)生正確但不同字節(jié)順序的結(jié)果。然而,算數(shù)(例如,+、_、*、/)操作不是交換容忍的,這是因為它們嚴(yán)格地要求特定字節(jié)順序的數(shù)據(jù)并且在采用交換參數(shù)的情況下會產(chǎn)生錯誤的結(jié)果。域是正在被編譯的代碼的一組表達(dá)式,而域入口是域外部的表達(dá)式,其結(jié)果用作屬于該域的表達(dá)式的參數(shù)。域出口是采用屬于該域的表達(dá)式的結(jié)果作為參數(shù)的域外部的表達(dá)式。交換容忍域是一組交換容忍表達(dá)式,其能夠由其相對表達(dá)式替代,以使得如果一些(或所有)域入口被不同字節(jié)順序的數(shù)據(jù)替代,則所有的域出口將是相同或不同字節(jié)順序的有效結(jié)果。
域交換是正在被編譯的代碼的變換,其(I)通過在必要的域入口和出口處放置或移除字節(jié)交換操作來改變一些或所有域入口和出口的字節(jié)順序;以及(2)利用以不同字節(jié)順序操作的相對表達(dá)式來替換域中的所有表達(dá)式,以使得保持代碼語義。對于與入口和出口有關(guān)的域交換,如果該入口或出口表達(dá)式是字節(jié)交換的,則可以移除字節(jié)交換,否則可以插入字節(jié)交換。作為示例,Tl = SffAP(A)T2 = SWAP ⑶RES = Tl == T2表達(dá)式“Tl == T2”是交換容忍的域,表達(dá)式“SWAP(A) ”和“SWAP⑶”是域入口,賦值“RES =”是域出口。針對該代碼的域交換可以如下Tl = A//移除字節(jié)交換T2 = B//移除字節(jié)交換RES = Tl == T2//結(jié)果的字節(jié)順序是相同的沒有任何增加或移除。因此,對于每個交換容忍表達(dá)式,如果執(zhí)行域交換,則知道入口(即,參數(shù))和出口(即,結(jié)果)中的哪個將改變字節(jié)順序。例如,在表達(dá)式X ¥:2(如果乂,則¥,否則2)中,Y和Z的字節(jié)順序?qū)⒏淖兌鳻的字節(jié)順序?qū)⒈3諼 Yf -V0因此,知道域的入口和出口中的哪些改變它們的字節(jié)順序并且僅針對這些來插入/移除字節(jié)交換操作(SWAP)。域交換益處是來自域交換的性能益處,以使得插入的代碼量減去移除的代碼量(考慮放置/移除的特定指令的加權(quán)以及估計的執(zhí)行計數(shù)器)得到正數(shù)。作為示例,Tl = AT2 = SWAP (B)RES = Tl == T2域交換可以如下Tl = SWAP (A) //放置字節(jié)交換
T2 = B//移除字節(jié)交換RES = Tl == T2//沒有任何增加或移除。如果原始代碼中的“Tl = A”比“T2 = SffAP(B) ”冷,則域交換益處是正的。注意,術(shù)語“冷”和“熱”指的是給定代碼段的相對頻率或使用。“冷”代碼段相對于另一代碼段而言使用得更不頻繁或者以更長的時間間隔使用。因此,如該示例所示,域交換可能導(dǎo)致在代碼中移動SWAP。現(xiàn)在參考圖1,示出的是根據(jù)本發(fā)明的一個實施例,用于執(zhí)行字節(jié)交換消除的方法的流程圖??梢杂稍谟嬎銠C(jī)系統(tǒng)的一個或多個處理器上執(zhí)行的編譯器來執(zhí)行方法10。雖然本發(fā)明的范圍不限于這一點,但是可以執(zhí)行一些實施例來優(yōu)化針對大字節(jié)序架構(gòu)寫入的代碼以用于小字節(jié)序架構(gòu)。即,編譯器可以在小字節(jié)序架構(gòu)的處理器上執(zhí)行。如圖I中所見,可以通過確定要優(yōu)化的代碼的表達(dá)式是否包括字節(jié)交換操作來開 始方法10(菱形20)。如果沒有,則控制可以循環(huán)到下一個表達(dá)式(框30)。當(dāng)遇到字節(jié)交換表達(dá)式時,控制進(jìn)行到框40,在框40中可以構(gòu)建包括該表達(dá)式的域。雖然本發(fā)明的范圍不限于這一點,但是實施例可以尋求擴(kuò)展域的范圍從而能夠在單遍中優(yōu)化多個表達(dá)式。下面進(jìn)一步論述構(gòu)建域的細(xì)節(jié)。在構(gòu)建域的期間,如果可能的話,可以利用額外的表達(dá)式來擴(kuò)展域(框50)。下面還將論述擴(kuò)展域的進(jìn)一步的細(xì)節(jié)。當(dāng)構(gòu)建域結(jié)束時,可以識別改變字節(jié)順序的域的各個入口和出口(框60)。如上所論述的,域入口可以是輸入到域的各個參數(shù),而出口可以是用作域的外部的參數(shù)的各個結(jié)果。仍然參考圖1,在菱形70處,可以確定移除字節(jié)交換是否提供益處(菱形70)。如上所論述的,可以由編譯器基于各種簡檔信息來執(zhí)行該確定,其中簡檔信息包括插入到代碼中的表達(dá)式的量與從代碼中移除的表達(dá)式的量之間的差的確定,以及與和這些表達(dá)式相關(guān)聯(lián)的各種執(zhí)行計數(shù)有關(guān)的簡檔信息。還可以確定該益處是否大于閾值。在一個實施例中,用于指示提供了益處的該閾值可以是0,以使得如果益處確定產(chǎn)生正數(shù),則將提供益處。注意,如果通過移除字節(jié)交換不能提供益處,則不執(zhí)行字節(jié)交換消除并且編譯器可以循環(huán)到下一個表達(dá)式(關(guān)于上面所論述的框30)。相反,如果確定移除提供益處,則控制進(jìn)行到框80。在框80處,可以移除字節(jié)交換表達(dá)式,從而利用相對表達(dá)式來替代該表達(dá)式。此外,可以在域內(nèi)的其它位置處插入/移除一個或多個額外的字節(jié)交換(框80)。此外,可以在一個或多個域入口和/或出口中類似地插入或移除這些字節(jié)交換表達(dá)式。然后,所修改的代碼可以存儲在諸如系統(tǒng)存儲器或非電壓存儲設(shè)備等的適當(dāng)?shù)拇鎯υO(shè)備中,以用于隨后在調(diào)用包含該修改代碼的程序時執(zhí)行。雖然在圖I的實施例中示出了該特定的實現(xiàn),但是應(yīng)理解,本發(fā)明的范圍不限于這一點并且其它的實現(xiàn)也是可能的。為了構(gòu)建交換容忍域,可以以任何交換容忍表達(dá)式或者從期望被移除的字節(jié)交換開始,并且利用連接的交換容忍表達(dá)式來擴(kuò)展該域。如果進(jìn)一步的域擴(kuò)展是不可能的或者不會產(chǎn)生性能意義,則可以執(zhí)行域交換并且可以構(gòu)建其它的域。當(dāng)存在相鄰的交換容忍表達(dá)式時,域擴(kuò)展是可能的。還可以構(gòu)建多個域,這是因為針對每個相鄰的交換容忍表達(dá)式,可以確定不將其添加到當(dāng)前域,并且多個域?qū)⒕哂胁煌挠蚪粨Q益處。因此,可以執(zhí)行完全搜索以尋找最佳構(gòu)建域,或者可以應(yīng)用某些試探法。某些實施例可以基于試探法的使用。因此,字節(jié)交換消除可以識別和交換提供如上所述的正交換益處的所有的交換容忍域。
因此,在各實施例中,對某字節(jié)順序的數(shù)據(jù)的操作利用對不同字節(jié)順序的相同數(shù)據(jù)的等價操作來替代。此外,可以在單遍中同時優(yōu)化多個連接的表達(dá)式和多個連接的數(shù)據(jù)。作為優(yōu)化的結(jié)果,不僅消除了一些字節(jié)交換,而且還將其它的字節(jié)交換移動到更冷的路徑。因此,可以利用對不同字節(jié)順序的數(shù)據(jù)進(jìn)行操作的相對表達(dá)式來替代表達(dá)式,可以在代碼中移動交換,并且多個連接的數(shù)據(jù)可以改變其字節(jié)順序。以這種方式,可以通過將對某一字節(jié)順序的數(shù)據(jù)進(jìn)行操作的代碼塊利用對不同字節(jié)順序的數(shù)據(jù)進(jìn)行操作的等價代碼塊替代,來消除字節(jié)交換?,F(xiàn)在參考表1,示出的是根據(jù)本發(fā)明的一個實施例,表示算法的可能實現(xiàn)的偽代碼。如在表I中所見,可以提供多個函數(shù)以用于字節(jié)交換消除和構(gòu)建域。如所見,字節(jié)交換函數(shù)調(diào)用域構(gòu)建函數(shù)。此外,在確定移除字節(jié)交換表達(dá)式是否具有益處時,可以執(zhí)行稱為BENEFIT的另一函數(shù)。如上面所論述的,該函數(shù)可以確定在計算產(chǎn)生正值時存在益處。如果發(fā)現(xiàn)了該正值,則可以執(zhí)行稱為SWAP_D0MAIN的另一函數(shù)以在域內(nèi)的適當(dāng)位置以及域入口和出口處實現(xiàn)字節(jié)交換操作的實際移除和插入。注意,該偽代碼是示例性的,并且其它的實 現(xiàn)也是可能的。表I
權(quán)利要求
1.一種方法,包括 使用在計算機(jī)系統(tǒng)的處理器上執(zhí)行的編譯器來識別字節(jié)交換操作; 使用所述編譯器來構(gòu)建包括所述字節(jié)交換操作和其它表達(dá)式的域,其中所述其它表達(dá)式是交換容忍的,以及識別與所述域相關(guān)聯(lián)的域入口和域出口 ; 使用所述編譯器來確定通過執(zhí)行所述域的交換將獲得益處,并且響應(yīng)于所述確定執(zhí)行所述域的所述交換;以及 將所交換的域存儲在所述計算機(jī)系統(tǒng)的存儲介質(zhì)中。
2.根據(jù)權(quán)利要求I所述的方法,其中,執(zhí)行所述域的所述交換包括改變所述相關(guān)聯(lián)的域入口和域出口中的至少一些的字節(jié)順序,并且利用以不同字節(jié)順序操作的相對操作來替換所述域中的表達(dá)式。
3.根據(jù)權(quán)利要求2所述的方法,其中,改變所述域的域入口的字節(jié)順序包括如果所述域入口包括字節(jié)交換操作,則移除所述字節(jié)交換操作,否則如果所述域入口不包括字節(jié)交換操作,則插入所述字節(jié)交換操作。
4.根據(jù)權(quán)利要求2所述的方法,其中,改變所述域的域出口的字節(jié)順序包括如果所述域出口包括字節(jié)交換操作,則移除所述字節(jié)交換操作,否則如果所述域出口不包括字節(jié)交換操作,則插入所述字節(jié)交換操作。
5.根據(jù)權(quán)利要求2所述的方法,還包括從第一表達(dá)式中移除字節(jié)交換操作以及將字節(jié)交換操作插入到第二表達(dá)式中,其中所述第一表達(dá)式具有比所述第二表達(dá)式的路徑更熱的路徑。
6.根據(jù)權(quán)利要求I所述的方法,還包括通過確定從所述域中移除的代碼量減去插入到所述域中的代碼量大于閾值來計算所述益處。
7.根據(jù)權(quán)利要求6所述的方法,其中,計算所述益處包括對所插入的代碼和所移除的代碼進(jìn)行加權(quán),并且分析與所插入的代碼和所移除的代碼相關(guān)聯(lián)的執(zhí)行計數(shù)器。
8.根據(jù)權(quán)利要求I所述的方法,其中,執(zhí)行所述域的交換包括在單遍中優(yōu)化所述域的多個連接的表達(dá)式。
9.一種制品,包括機(jī)器可訪問存儲介質(zhì),所述機(jī)器可訪問存儲介質(zhì)包括當(dāng)執(zhí)行時使計算機(jī)系統(tǒng)進(jìn)行下列操作的指令 獲得與在計算機(jī)系統(tǒng)的處理器上的代碼的執(zhí)行有關(guān)的統(tǒng)計信息,其中,所述統(tǒng)計信息存儲在所述計算機(jī)系統(tǒng)的統(tǒng)計存儲設(shè)備中; 在所述處理器上執(zhí)行的編譯器中將所述代碼操作的數(shù)據(jù)解析為多個組,其中,每個所述組中的所述數(shù)據(jù)具有用于所述代碼的適當(dāng)執(zhí)行的相同的字節(jié)順序; 針對所述多個組中的每一個,在所述編譯器中確定組的所述數(shù)據(jù)的字節(jié)順序?qū)τ诔绦騿T而目是否是可見的; 針對所述字節(jié)順序不可見的每個組,在所述編譯器中確定改變所述字節(jié)順序是否將提供性能益處; 針對所述字節(jié)順序改變將提供所述性能益處的每個組,改變相應(yīng)組的字節(jié)順序以獲得修改的組;以及 將每個所述修改的組存儲在所述計算機(jī)系統(tǒng)的存儲介質(zhì)中。
10.根據(jù)權(quán)利要求9所述的制品,還包括當(dāng)執(zhí)行時使所述計算機(jī)系統(tǒng)進(jìn)行下列操作的指令當(dāng)?shù)谝恢羔樖堑诙羔樀脑磿r更新所述第一指針的目的列表,以及當(dāng)另一指針是所述第一指針的源時更新所述第一指針的源列表。
11.根據(jù)權(quán)利要求10所述的制品,還包括當(dāng)執(zhí)行時使所述計算機(jī)系統(tǒng)進(jìn)行下列操作的指令當(dāng)遇到與第三指針相關(guān)聯(lián)的存儲器訪問時利用訪問的大小來更新針對所述第三指針的訪問列表。
12.根據(jù)權(quán)利要求11所述的制品,還包括當(dāng)執(zhí)行時使所述計算機(jī)系統(tǒng)進(jìn)行下列操作的指令基于由于對所述代碼的表達(dá)式的字節(jié)順序改變引起的性能益處改變,來更新所述表達(dá)式的益處計數(shù)器。
13.根據(jù)權(quán)利要求10所述的制品,還包括當(dāng)執(zhí)行時使所述計算機(jī)系統(tǒng)進(jìn)行下列操作的指令構(gòu)建通過所述源列表和所述目的列表傳遞地可達(dá)的指針的列表。
14.根據(jù)權(quán)利要求13所述的制品,還包括當(dāng)執(zhí)行時使所述系統(tǒng)進(jìn)行下列操作的指令如果通過所述源列表和所述目的列表傳遞地可達(dá)的所述指針的所述列表的共用體包含不多于一個的非0元素并且對于傳遞地可訪問的所有指針的益處計算的總和是正的,則確定所述字節(jié)順序改變將提供所述性能益處。
15.—種系統(tǒng),包括 用于執(zhí)行指令的處理器,所述處理器用于執(zhí)行編譯器,以獲得與在所述處理器上的代碼的執(zhí)行有關(guān)的統(tǒng)計信息,將所述代碼操作的數(shù)據(jù)解析為多個組,其中每個所述組中的所述數(shù)據(jù)具有用于所述代碼的適當(dāng)執(zhí)行的相同的字節(jié)順序,針對所述字節(jié)順序?qū)Τ绦騿T而言不可見的每個組,確定改變所述字節(jié)順序是否將提供性能益處,并且如果是的話則改變相應(yīng)組的字節(jié)順序以獲得修改的組,并且將每個所述修改的組存儲在所述系統(tǒng)的第一存儲介質(zhì)中;以及 存儲設(shè)備,用于存儲針對所述代碼的每個指針的源列表、目的列表和訪問列表。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其中,所述編譯器用于在第一指針是第二指針的源時更新所述第一指針的所述目的列表,在另一指針是所述第一指針的源時更新所述第一指針的所述源列表,并且在遇到與第三指針相關(guān)聯(lián)的存儲器訪問時利用訪問的大小來更新針對所述第三指針的所述訪問列表。
17.根據(jù)權(quán)利要求16所述的系統(tǒng),其中,所述存儲設(shè)備還包括益處計數(shù)器,所述益處計數(shù)器基于由于對表達(dá)式的字節(jié)順序改變引起的性能益處改變是可更新的。
18.根據(jù)權(quán)利要求15所述的系統(tǒng),其中,所述編譯器用于識別字節(jié)交換操作,構(gòu)建包括所述字節(jié)交換操作和其它表達(dá)式的域,其中所述其它表達(dá)式是交換容忍的,識別與所述域相關(guān)聯(lián)的域入口和域出口,并且確定通過執(zhí)行所述域的交換將獲得益處。
19.根據(jù)權(quán)利要求18所述的系統(tǒng),其中,所述編譯器用于響應(yīng)于所述確定,執(zhí)行所述域的所述交換并且將所交換的域存儲在所述第一存儲介質(zhì)中。
全文摘要
在一個實施例中,一種方法包括識別字節(jié)交換操作,構(gòu)建包括字節(jié)交換操作和其它表達(dá)式的域,識別與所述域相關(guān)聯(lián)的域入口和域出口,確定通過執(zhí)行所述域的交換將獲得益處,并且響應(yīng)于所述確定執(zhí)行所述域的交換,并且將所交換的域存儲在存儲介質(zhì)中。還描述并要求了其它實施例。
文檔編號G06F9/45GK102804142SQ200980160069
公開日2012年11月28日 申請日期2009年6月25日 優(yōu)先權(quán)日2009年6月25日
發(fā)明者M·Y·萊奧克 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1