專利名稱:用于x86中動態(tài)二進(jìn)制優(yōu)化的兩階段提交區(qū)域的制作方法
技術(shù)領(lǐng)域:
本公開涉及動態(tài)二進(jìn)制優(yōu)化,更具體來說,涉及用于χ86中的動態(tài)二進(jìn)制優(yōu)化的 兩階段提交區(qū)域。
背景技術(shù):
硬件/軟件(SW/HW)協(xié)同設(shè)計(jì)架構(gòu)是用于現(xiàn)代架構(gòu)創(chuàng)新的前景光明的技術(shù),并且 動態(tài)二進(jìn)制優(yōu)化是用于HW/SW協(xié)同設(shè)計(jì)架構(gòu)的重要組成部分。隨著事務(wù)存儲(TM)或硬件 鎖省略(HLE)技術(shù)的進(jìn)步,建議為動態(tài)二進(jìn)制優(yōu)化利用TM/HLE所支持的原子區(qū)域。由于保 證原子區(qū)域以原子方式、一致地并且隔離地執(zhí)行,所以原子區(qū)域中的代碼可重排序,而不涉 及不同線程之間的交互。但是,由于在鎖定段上的嚴(yán)格存儲器順序,以鎖省略為目標(biāo)的TM/ HLE所支持的原子區(qū)域不一定施加比Χ86中的動態(tài)二進(jìn)制優(yōu)化技術(shù)所需的更強(qiáng)的存儲器順 序,并且更強(qiáng)的存儲器順序通常導(dǎo)致低效架構(gòu)實(shí)現(xiàn)。在Χ86中,存儲器指令按照其程序順序從CPU退出(S卩,有序退出)。但是,退出的 存儲數(shù)據(jù)(即,已用(senior)存儲)可按其程序順序在內(nèi)部存儲緩沖器中緩沖,并且稍后 寫到高速緩存/存儲器。因此,X86中的存儲器指令的執(zhí)行可被看作具有兩個階段。在第 一階段,存儲器指令從CPU退出,并且按照其原始程序順序。在第一階段之后,存儲數(shù)據(jù)保 持在存儲緩沖器中,等待第二階段。在第二階段,加載指令沒有動作,但是存儲指令需要按 照其原始程序順序?qū)?shù)據(jù)從存儲緩沖器回寫到高速緩存(即,有序回寫)。因此,在x86中, 兩個階段都有序地執(zhí)行。在邏輯上,我們可看出,加載指令在第一階段結(jié)束時立即訪問存儲 器,而存儲指令在第二階段結(jié)束時立即訪問存儲器。因此,如果它們訪問不同的存儲器,則 X86允許先前的存儲與稍后的加載之間的存儲器訪問的重排序。但是,由于兩個階段中都有 序退出和有序退出-返回,x86不允許兩個加載指令或者兩個存儲指令之間的存儲器訪問 的任何重排序。在動態(tài)二進(jìn)制優(yōu)化中,X86還禁止先前的加載與稍后的存儲指令之間的存 儲器訪問的重排序。兩個階段使X86比實(shí)現(xiàn)順序一致性的架構(gòu)高效得多。存儲指令可退出,而無需等 待其數(shù)據(jù)回寫到高速緩存。這消除了因存儲未命中引起的對退出的昂貴延遲。為了在必要 時支持關(guān)于存儲器指令的存儲器訪問的嚴(yán)格順序,X86允許使用昂貴的防護(hù)指令(包括鎖 定指令,因?yàn)樵赬86中,鎖定指令還充當(dāng)對于跨過鎖定指令的存儲器指令的防護(hù))來強(qiáng)制實(shí) 施存儲器指令之間的存儲器訪問的嚴(yán)格順序。防護(hù)指令的實(shí)現(xiàn)通過將兩個階段合并成一個 單階段來使兩個階段同步。因此,防護(hù)指令不能退出,直到所有已用存儲被寫到高速緩存。 這樣,可對跨過防護(hù)的存儲器指令強(qiáng)制實(shí)施存儲器訪問的嚴(yán)格順序。當(dāng)然,在防護(hù)指令等待 已用的存儲的排出的過程中存在開銷。在事務(wù)存儲(TM)和硬件鎖省略(HLE)技術(shù)中已經(jīng)有了許多進(jìn)展。術(shù)語“事務(wù)存 儲”指的是通過允許一組加載和存儲指令以原子方式執(zhí)行來簡化并行編程的嘗試。這個上 下文中的事務(wù)是對共享存儲器執(zhí)行一系列讀和寫的一段代碼。這些讀和寫在邏輯上在單一 時刻發(fā)生,因而中間狀態(tài)是其它(成功的)事務(wù)不可見的。術(shù)語“鎖省略”設(shè)法從包含鎖的
5程序代碼中消除鎖。鎖只能從原子區(qū)域內(nèi)部去除?,F(xiàn)有TM/HLE技術(shù)實(shí)現(xiàn)原子區(qū)域(或事務(wù))。除了從CPU的指令退出之外,原子區(qū) 域中的各存儲器指令還需要從推測高速緩存提交。原子區(qū)域中的所有指令具有原子提交的 單一階段或者完全撤回。雖然原子區(qū)域可實(shí)現(xiàn)許多二進(jìn)制優(yōu)化,但是原子區(qū)域的實(shí)現(xiàn)具有 某種固有的低效。當(dāng)采用x86中的原子區(qū)域的實(shí)現(xiàn)時遇到的一個問題在于,原子提交要求 在該區(qū)域中的所有存儲器指令可提交之前,該區(qū)域中的所有存儲從存儲緩沖器排出到高速 緩存。等待存儲的排出可延遲在原子區(qū)域之后發(fā)生的任何指令的退出。由于原子區(qū)域一定 會以原子方式一致并且隔離地執(zhí)行,所以原子區(qū)域中的代碼可重排序,而不涉及不同線程 之間的交互。但是,由于關(guān)于跨過鎖定段邊界的存儲器指令的存儲器訪問的嚴(yán)格順序,以鎖 省略為目標(biāo)的TM/HLE所支持的原子區(qū)域不一定施加比x86中的動態(tài)二進(jìn)制優(yōu)化所需的更 嚴(yán)格的存儲器訪問順序。更嚴(yán)格的順序通常導(dǎo)致效率較低的架構(gòu)實(shí)現(xiàn)。至今,即使有,也是存在極少涉及以動態(tài)二進(jìn)制優(yōu)化為目標(biāo)的區(qū)域的兩個提交階 段的開發(fā)的研究和工作。以推測鎖省略為目標(biāo)的現(xiàn)有TM/HLE技術(shù)實(shí)現(xiàn)采用單一階段原子 提交的原子區(qū)域。
發(fā)明內(nèi)容
按照本發(fā)明的一個方面,提供一種方法,包括加載源二進(jìn)制代碼供計(jì)算機(jī)系統(tǒng)執(zhí)行,所述計(jì)算機(jī)系統(tǒng)包括存儲器和處理單元, 所述處理單元包括多個寄存器和至少一個存儲緩沖器;在所述源二進(jìn)制代碼的運(yùn)行時間期間,識別所述源二進(jìn)制代碼中的多個頻繁執(zhí)行 的存儲器指令,所述頻繁執(zhí)行的存儲器指令包括多個存儲指令和多個加載指令;定義包括所述頻繁執(zhí)行的存儲器指令的兩階段提交(TSC)區(qū)域,并且對所述TSC 區(qū)域中的所述多個存儲器指令執(zhí)行二進(jìn)制優(yōu)化操作;定義所述兩階段提交(TSC)區(qū)域的第一階段,其中,當(dāng)由所述處理單元執(zhí)行時,所 述多個加載指令在所述第一階段中以原子方式提交,并且所述多個存儲指令在所述第一階 段中退出;定義用于頻繁執(zhí)行的代碼塊的所述TSC區(qū)域的第二階段,其中,所述多個存儲指 令在所述第二階段中以原子方式提交;以及允許來自所述TSC區(qū)域外部的至少一個附加的加載或存儲存儲器指令在所述TSC 區(qū)域的所述第二階段中退出。按照本發(fā)明的另一方面,提供一種包括上面存儲了指令的有形存儲介質(zhì)的產(chǎn)品, 所述指令在由處理器執(zhí)行時引起下列操作,其中包括加載源二進(jìn)制代碼以供執(zhí)行;在所述源二進(jìn)制代碼的運(yùn)行時間期間,識別所述源二進(jìn)制代碼中的多個頻繁執(zhí)行 的存儲器指令,所述頻繁執(zhí)行的存儲器指令包括多個存儲指令和多個加載指令;定義包括所述頻繁執(zhí)行的存儲器指令的兩階段提交區(qū)域,并且對所述區(qū)域中的所 述多個存儲器指令執(zhí)行二進(jìn)制優(yōu)化操作;定義用于頻繁執(zhí)行的代碼塊的兩階段提交(TSC)區(qū)域的第一階段,其中,所述多 個加載指令在所述第一階段中以原子方式提交,并且所述多個存儲指令在所述第一階段中退出;定義用于所述頻繁執(zhí)行的代碼塊的所述TSC區(qū)域的第二階段,其中,所述多個存 儲指令在所述第二階段中以原子方式提交;以及允許來自所述TSC區(qū)域外部的至少一個附加的存儲器指令在所述第二階段中退
出ο按照本發(fā)明的又一方面,提供一種系統(tǒng),包括處理單元,所述處理單元包括多個寄存器和至少一個存儲緩沖器;以及存儲器,所述存儲器配置成容納將在所述處理器上執(zhí)行的兩階段提交(TSC)優(yōu)化 器代碼和源二進(jìn)制代碼,其中,當(dāng)在所述處理器上執(zhí)行所述TSC優(yōu)化器代碼時,所述TSC優(yōu) 化器代碼使所述處理器執(zhí)行下列步驟在所述源二進(jìn)制代碼的運(yùn)行時間期間,識別所述源二進(jìn)制代碼中的多個頻繁執(zhí)行 的存儲器指令,所述頻繁執(zhí)行的存儲器指令包括多個存儲指令和多個加載指令;定義包括所述頻繁執(zhí)行的存儲器指令的兩階段提交區(qū)域,并且對所述區(qū)域中的所 述多個存儲器指令執(zhí)行二進(jìn)制優(yōu)化操作;定義用于頻繁執(zhí)行的代碼塊的TSC區(qū)域的第一階段,其中,所述多個加載指令在 所述第一階段中以原子方式提交,并且所述多個存儲指令在所述第一階段中退出;定義用于所述頻繁執(zhí)行的代碼塊的所述TSC區(qū)域的第二階段,其中,所述多個存 儲指令在所述第二階段中以原子方式提交;以及允許來自所述TSC區(qū)域外部的至少一個附加的存儲器指令在所述第二階段中退
出ο
要求保護(hù)的主題的特征和優(yōu)點(diǎn)將通過以下與之相符的實(shí)施例的詳細(xì)描述變得顯 而易見,所述描述應(yīng)當(dāng)參照附圖來考慮,其中圖1示出符合本公開的存儲器系統(tǒng);圖2示出說明符合本公開的兩階段提交(TSC)區(qū)域中的優(yōu)化代碼的示范執(zhí)行的簡 圖;圖3示出說明在這個代碼應(yīng)用于常規(guī)原子區(qū)域時的圖2的代碼序列的執(zhí)行的一個 示例的簡圖;圖4示出說明符合本公開的兩階段提交區(qū)域中的代碼的示范多線程執(zhí)行的簡圖; 以及圖5示出符合本公開的示范操作的流程圖。
具體實(shí)施例方式原子區(qū)域的實(shí)現(xiàn)具有固有的低效。與X86中實(shí)現(xiàn)的常規(guī)原子區(qū)域關(guān)聯(lián)的一個重要 開銷在于,原子提交要求在該區(qū)域可提交之前,該區(qū)域中的所有存儲從存儲緩沖器排出到 高速緩存。這可引起原子區(qū)域之后的指令等待該區(qū)域中的存儲指令的排出的延遲。原子提 交的單一階段不一定施加比二進(jìn)制優(yōu)化需要更嚴(yán)格的存儲器訪問順序,并且更嚴(yán)格的順序 通常導(dǎo)致效率較低的實(shí)現(xiàn)。
本公開提供定義具有提交的兩個獨(dú)立階段以取代提交的單一原子階段的兩階段 提交(TSC)區(qū)域的系統(tǒng)和方法。在第一階段,區(qū)域中的加載操作在區(qū)域中的指令退出之后 以原子方式來提交,以及在第二階段,區(qū)域中的存儲操作在所有存儲從存儲緩沖器回寫到 高速緩存之后以原子方式提交。因此,無需如同常規(guī)原子區(qū)域方式中那樣,通過等待存儲的 排出以提交整個區(qū)域而使退出之后的指令延遲。相反,允許原本在整個區(qū)域提交之后退出 的指令在TSC區(qū)域的第二階段的執(zhí)行期間(即,在第一階段中提交該區(qū)域之后)退出,而無 需等待存儲的排出。TSC區(qū)域還在第一階段(較早)提交加載指令,這可減少因存儲器沖突 引起的區(qū)域中止。圖1示出符合本公開的存儲器系統(tǒng)100。系統(tǒng)100包括CPU 102和系統(tǒng)存儲器 104。系統(tǒng)還可包括高速緩存/存儲器105 (它可包含在系統(tǒng)存儲器104中)。CPU 102可 包括處理器寄存器106、108和至少一個CPU存儲緩沖器110。CPU 102可包括多個核心處 理單元(以下稱作復(fù)數(shù)“核心”或者單數(shù)“核心”),并且各核心可配置成執(zhí)行多個線程。系 統(tǒng)存儲器104可容納TSC優(yōu)化器模塊代碼112、源二進(jìn)制代碼118和目標(biāo)二進(jìn)制代碼120。 TSC優(yōu)化器模塊代碼112可包括兩階段提交(TSC)區(qū)域標(biāo)記器代碼116和二進(jìn)制優(yōu)化器代 碼122。TSC優(yōu)化器模塊代碼112可由一個或多個核心來執(zhí)行以對源二進(jìn)制代碼118進(jìn)行操 作,以便將代碼118變換成目標(biāo)二進(jìn)制代碼120,下面更詳細(xì)地說明。整體或部分地將源二 進(jìn)制代碼118變換成目標(biāo)二進(jìn)制代碼120可包括定義一個或多個兩階段提交(TSC)區(qū)域, 并且在TSC區(qū)域中執(zhí)行二進(jìn)制優(yōu)化操作,下面詳細(xì)描述。在操作中,包括加載(Ld)和存儲(St)的存儲器指令可由CPU 102執(zhí)行。當(dāng)加載 指令由CPU 102執(zhí)行時,加載指令(Ld)可讀取存儲器,以及在與加載指令關(guān)聯(lián)的數(shù)據(jù)離開 高速緩存/存儲器105并且加載到CPU寄存器108之后退出,如圖1中的箭頭107所示并 且表示為Ld(I)。存儲指令(St)可當(dāng)與存儲指令關(guān)聯(lián)的數(shù)據(jù)從CPU寄存器106傳遞給存儲 緩沖器110時退出,如圖1中的箭頭109所示并且表示為M(I)。退出的存儲指令在本文中 將稱作“已用存儲(senior store)”。本文所使用的術(shù)語“退出”表示指令被CPU執(zhí)行并且 離開CPU隊(duì)列。術(shù)語“訪問/讀/寫”指的是使存儲器事務(wù)成為永久的。因此,例如,當(dāng)數(shù) 據(jù)被加載到CPU寄存器中時,加載指令讀,而當(dāng)數(shù)據(jù)從CPU存儲緩沖器移入存儲器時,存儲 指令寫。存儲指令(St)可當(dāng)與存儲指令關(guān)聯(lián)的數(shù)據(jù)從存儲緩沖器110傳遞并且寫到高速 緩存/存儲器105時對存儲器進(jìn)行寫入,如圖1中的箭頭111所示并且表示為M0)。因 此,根據(jù)慣例,在本公開全文中,加載或存儲指令之后的括號中的標(biāo)號分別表示第一和第二 階段。在兩個階段中,存儲器指令可按照其原始的程序順序(即,有序退出/有序回寫)。TSC優(yōu)化器模塊代碼112可配置成在運(yùn)行時間期間監(jiān)測源二進(jìn)制代碼118,并且確 定頻繁運(yùn)行的代碼行和/或代碼段118。頻繁運(yùn)行的代碼行和/或代碼段可識別為定義動 態(tài)二進(jìn)制優(yōu)化技術(shù)的兩階段提交區(qū)域的可能目標(biāo)。在這里,術(shù)語“頻繁”定義為每單位時間 預(yù)定數(shù)量的執(zhí)行和/或發(fā)生,或者在給定代碼段中的預(yù)定數(shù)量的執(zhí)行和/或發(fā)生。當(dāng)然,本 領(lǐng)域的技術(shù)人員會知道,某些應(yīng)用通過二進(jìn)制優(yōu)化技術(shù)的更大應(yīng)用可比其它應(yīng)用更好地執(zhí) 行,并且因此,本領(lǐng)域的技術(shù)人員可基于逐個情況來定義術(shù)語“頻繁”,以便使給定應(yīng)用/源 二進(jìn)制代碼118的效率最大化。為此,TSC優(yōu)化器模塊代碼112可包括計(jì)數(shù)器或其它邏輯機(jī) 制,以便保持源二進(jìn)制代碼118中的一個或多個代碼序列(和/或執(zhí)行)的運(yùn)行計(jì)數(shù)。TSC 優(yōu)化器模塊代碼112可比較該計(jì)數(shù)與預(yù)定和/或可編程的閾值,高于該閾值,TSC優(yōu)化器模塊代碼112可識別為可形成TSC區(qū)域的代碼行和/或代碼段。一旦源二進(jìn)制代碼118的段和/或行被識別為TSC區(qū)域和二進(jìn)制優(yōu)化操作的應(yīng)用 的可能目標(biāo),則TSC優(yōu)化器模塊代碼112可將各個代碼行和/或代碼段連接在一起,以便形 成TSC區(qū)域。如果代碼序列可修改成TSC區(qū)域,則TSC區(qū)域標(biāo)記器116可生成將該區(qū)域標(biāo) 記為TSC區(qū)域的指令,這可包括生成指示TSC區(qū)域開始的指令,并且將該指令插入?yún)^(qū)域的開 始處,和/或生成指示TSC區(qū)域結(jié)束的指令,并且將該指令插入TSC區(qū)域的結(jié)束處。TSC優(yōu)化器模塊122配置成對TSC區(qū)域執(zhí)行二進(jìn)制優(yōu)化操作。本文所使用的“二 進(jìn)制優(yōu)化”被定義為一個或多個操作,這些操作被設(shè)計(jì)成提高源二進(jìn)制代碼的性能。本文檔 全文中引用的術(shù)語“優(yōu)化”具體指的是對代碼執(zhí)行修改。通常執(zhí)行這些優(yōu)化的目的是改進(jìn) 代碼的性能吞吐量,但是存在具有其它目的或其它結(jié)果的某些優(yōu)化。在某些情況下,優(yōu)化可 對代碼執(zhí)行,以便修改在執(zhí)行代碼時所收集的所得輸出數(shù)據(jù),而不是嘗試改進(jìn)代碼的任何 性能吞吐量。另外,也可執(zhí)行優(yōu)化以修改性能監(jiān)測代碼的數(shù)據(jù)收集能力以及其它目的。在 其它可能的情況下,代碼優(yōu)化可被引入代碼中,目的是實(shí)現(xiàn)代碼的性能吞吐量的增益,只是 為了取得無論什么增益,并且可能因無法預(yù)料的情況而引起不希望的性能降級。因此,術(shù)語 “優(yōu)化”不是特定地指將實(shí)現(xiàn)理想性能的代碼的最佳配置。不一定是如下情況對代碼段執(zhí) 行的如本文檔中所提到的任何“優(yōu)化”能夠有可能產(chǎn)生真正最佳的性能(即,最佳理論性能 吞吐量)。相反,本文檔中提到“優(yōu)化”意味著嘗試重構(gòu)代碼,以便可能獲得對于原始代碼的 某種程度的性能提高,或者為了用戶的利益而修改代碼的某個其它方面(例如,修改如上 所述的所得輸出)。如果“優(yōu)化”打算實(shí)現(xiàn)性能提高,則是否實(shí)現(xiàn)實(shí)際性能提高完全取決于 所執(zhí)行的修改的類型、原始代碼的具體結(jié)構(gòu)和行為、以及執(zhí)行代碼所處的環(huán)境。示范二進(jìn)制 優(yōu)化操作包括存儲器操作,例如重排序加載和/或存儲指令,以及非存儲器操作,諸如消除 “死的”或未使用的代碼,或者以其它方式使源二進(jìn)制代碼流線化。一旦為所識別代碼生成TSC區(qū)域,并且使用二進(jìn)制優(yōu)化操作來優(yōu)化該代碼,則該 代碼可被分成這時為給定操作環(huán)境優(yōu)化的目標(biāo)二進(jìn)制代碼120。如果TSC區(qū)域中止,則TSC 區(qū)域可被撤回,并且可無需二進(jìn)制優(yōu)化而執(zhí)行原始的二進(jìn)制源代碼118。圖2示出說明符合本公開的兩階段提交(TSC)區(qū)域中的優(yōu)化代碼的示范執(zhí)行的 簡圖200。如圖2所示,包括存儲和加載指令的二進(jìn)制代碼序列201可包括M[ml],rl和 Ld2[m2], r2,其中與存儲指令(Stl)關(guān)聯(lián)的數(shù)據(jù)可從處理器寄存器(rl)傳遞并且寫到高 速緩存/存儲器位置(ml),以及與加載指令仏業(yè))關(guān)聯(lián)的數(shù)據(jù)可從高速緩存/存儲器位 置[m2]讀取并且加載到處理器寄存器(rf)中。二進(jìn)制代碼序列還可包括M3[m3],r3和 Ld4[m4],r4,其中與存儲指令(M3)關(guān)聯(lián)的數(shù)據(jù)可從處理器寄存器(r3)傳遞并且寫到高 速緩存/存儲器位置Ο ),以及與加載指令(Ld4)關(guān)聯(lián)的數(shù)據(jù)可從高速緩存/存儲器位置 [m4]讀取并且加載到處理器寄存器(r4)中。在這個示例中,假定使用二進(jìn)制優(yōu)化操作對二 進(jìn)制代碼序列201進(jìn)行了優(yōu)化,如上所述。圖2提供經(jīng)過優(yōu)化的二進(jìn)制代碼序列(St[ml], rl ;Ld2[m2], r2 ;St3[m3], r3 ; Ld4[m4], r4)的TSC區(qū)域執(zhí)行的一個示例。一般來說,可退出存儲指令(Stl*M3),并且 加載指令(Ld2和Ld4)可讀取并且在TSC區(qū)域205的第一階段202中退出。存儲指令Stl 和St3可在第二階段204寫。標(biāo)記器220可插入該區(qū)域的開始處以表示TSC區(qū)域205的開 始,并且標(biāo)記器222可插入該區(qū)域的結(jié)束處以表示TSC區(qū)域205的結(jié)束。標(biāo)記器220和222可用來指示執(zhí)行代碼201的CPU按在兩階段提交方式中那樣來執(zhí)行。第一階段202中的指令可按照其程序順序、即二進(jìn)制代碼序列201的順序發(fā)生。具 體來說,第一階段(Stl (1))206中的存儲指令(Ml)在第一階段(Ld2 (1))208中的加載指 令(Ld2)之前發(fā)生。Ld2 (1)208在第一階段(St3 (1))210中的存儲指令(St3)之前發(fā)生。 M3(l)210在第一階段(Ld4(1))212中的加載指令(Ld4)之前發(fā)生。存儲指令可在第二階 段中按照其程序順序發(fā)生。具體來說,第二階段(Stl O))中的存儲指令(Ml)可在第二階 段(St3Q))208中的存儲指令( 之前發(fā)生。TSC區(qū)域第一階段提交在第一階段中退出 指令之后發(fā)生。具體來說,第一階段(T(I))中的TSC區(qū)域(T)在第一階段(Stl(I)) 206、 (Ld2 (1))208, (M3 (1)) 210和(Ld4 (1)) 212中的指令退出之后發(fā)生。TSC區(qū)域第二階段提 交可在第二階段中回寫存儲之后發(fā)生。具體來說,第二階段(T O) )220中的TSC區(qū)域(T)在 第二階段(StK2))214和(St3Q))216中的存儲之后發(fā)生。在這個示例中,假定Ml、Ld2、 St3和Ld4是兩階段提交區(qū)域205中的優(yōu)化代碼序列(使用二進(jìn)制優(yōu)化操作),并且指令 Ld5跟隨在區(qū)域205之后。本文所述的TSC區(qū)域205的一個優(yōu)點(diǎn)在于,可在第一階段202之后提交存儲操作, 并且因此該區(qū)域之后的存儲器操作無需等待排出存儲。這可使例如優(yōu)化代碼序列之后的附 加存儲器指令能夠在TSC區(qū)域205的第二階段204中執(zhí)行。例如,可準(zhǔn)許加載指令Ld5在第 二階段204中退出218,即使指令Ld5不是優(yōu)化代碼序列201的一部分。存儲指令Stl (2) 和乂3(3)可在第二階段204中(分別)回寫214、216,而與第二階段204中插入Ld5(l)無 關(guān)。與原子區(qū)域中的代碼的執(zhí)行不同,在第一階段202之后,可退出TSC區(qū)域之后的存儲器 指令,而沒有延遲的風(fēng)險,因?yàn)闊o需等待排出已用存儲指令(例如,Stl(I)和M3(l))。因此,在TSC區(qū)域205中的第一提交階段202中,可以原子方式提交該區(qū)域中的加 載指令,以及在第二提交階段204,可以原子方式提交該區(qū)域中的存儲指令。當(dāng)然,推測高速 緩存(未示出)可用于緩沖與TSC區(qū)域205中的存儲器指令(即,加載/存儲指令)關(guān)聯(lián) 的數(shù)據(jù)。高速緩存一致性協(xié)議還可用于在TSC區(qū)域205執(zhí)行期間窺探其它線程中可能沖突 的存儲器指令。IA高速緩存一致性協(xié)議可確保各核心的高速緩存中的數(shù)據(jù)與共享存儲器是 一致的。TSC區(qū)域可利用高速緩存一致性來確保存儲器操作以原子方式提交或者撤回而沒 有影響。TSC區(qū)域205的第一提交階段202可在加載指令和存儲指令從CPU退出之后發(fā)生。 在第一提交階段中,與加載指令關(guān)聯(lián)的數(shù)據(jù)可從高速緩存/存儲器中的適當(dāng)位置讀取,然 后加載到寄存器中,以及退出加載指令。與存儲指令關(guān)聯(lián)的數(shù)據(jù)可從寄存器中移出并且寫 到存儲緩沖器,以及退出存儲指令。但是,在第一提交階段之后,與退出的存儲指令(已用 存儲)關(guān)聯(lián)的數(shù)據(jù)可保持在存儲緩沖器中,等待在第二提交階段中寫到高速緩存/存儲器。 在第一提交階段之后,窺探可以不再是TSC區(qū)域205中的加載指令所必需的,因?yàn)樵搮^(qū)域中 的所有加載指令都已經(jīng)提交。但是,窺探可用于TSC區(qū)域205中的存儲指令,直到TSC區(qū)域 的第二提交階段發(fā)生。窺探可用于例如確定任何其它核心是否正對第二提交階段中相同的 高速緩存/存儲器位置進(jìn)行寫入(執(zhí)行存儲指令)。由于兩個獨(dú)立的提交階段202、204 (第一和第二提交階段),整個TSC區(qū)域205可 不再是原子的,因?yàn)槠渌€程可對相同存儲器位置進(jìn)行寫入,并且在提交的兩個階段之間 與TSC區(qū)域中的加載沖突沒有使該區(qū)域撤回。但是,加載指令在第一區(qū)域202中以原子方式提交,并且存儲指令在第二區(qū)域204中以原子方式提交。圖3示出說明以上參照圖2所述的優(yōu)化代碼序列在這個代碼應(yīng)用于常規(guī)原子區(qū) 域時的執(zhí)行的一個示例的簡圖300。具體來說,圖3提供二進(jìn)制代碼序列(St[ml],rl; Ld2[m2],r2 ;St3[m3],r3 ;Ld4[m4],r4)的原子區(qū)域執(zhí)行的一個示例。一般來說,存儲指令 (Stl和Μ; )和加載指令(Ld2和Ld4)可在原子區(qū)域302的單一階段中被退出和/或被提 交,其中標(biāo)記器A標(biāo)記單一階段302的結(jié)束區(qū)域。但是,與上述TSC區(qū)域中的代碼的執(zhí)行不 同,Ld5(l)(在原子區(qū)域302之后的指令)的退出必須被延遲,直到原子區(qū)域302的單一階 段中的所有存儲器指令退出和/或提交。因此,Ld5(l)只能在原子區(qū)域A 302整個提交之 后退出。比較圖2的TSC區(qū)域與圖3的原子區(qū)域的提交整個TSC區(qū)域205的操作,有利的 是,無需將TSC區(qū)域之后的存儲器指令的退出延遲,直到TSC區(qū)域中的所有存儲指令被寫到 推測高速緩存(如果整個區(qū)域?yàn)樵拥?,則會需要這樣)。而是,TSC區(qū)域之后的存儲器指 令能夠在TSC區(qū)域205的第一提交階段202之后退出。TSC區(qū)域之后的存儲器指令可在TSC 區(qū)域的第二提交階段執(zhí)行期間發(fā)生。本文所述的TSC區(qū)域還可具有如下優(yōu)點(diǎn)按照存儲器 順序較早地提交加載指令,有可能減少因可能的存儲器沖突引起的任何區(qū)域中止。具體來 說,如果其它線程中與Ld2或Ld4沖突的存儲器訪問在T(I)與TO)之間或者在A中發(fā)生, 則原子區(qū)域A將中止,但TSC區(qū)域205可能不會中止。雖然本文所述的TSC區(qū)域可具有比常規(guī)原子區(qū)域更弱的存儲器順序,但是本文所 述的TSC區(qū)域還可允許TSC區(qū)域中的存儲器指令的重排序,而不涉及不同線程之間的交互。 因此,本公開的用于TSC區(qū)域的二進(jìn)制優(yōu)化操作可準(zhǔn)許較早的存儲指令與稍后的加載指令 之間重排序。與X86中的常規(guī)存儲器模型不同,TSC區(qū)域的第一階段中的加載指令之間的 原子性可允許加載指令之間的任意重排序,并且TSC區(qū)域的第二階段中的存儲指令之間的 原子性可允許存儲指令之間的任意重排序。本文所述的TSC區(qū)域還可允許較早的加載指令 與稍后的存儲指令之間重排序,因?yàn)門SC區(qū)域中的兩個提交階段可確保加載指令早于存儲 指令提交。在將二進(jìn)制優(yōu)化操作應(yīng)用于本公開的TSC區(qū)域時,可存在防護(hù)指令。在一個實(shí)施 例中,TSC區(qū)域內(nèi)部的防護(hù)指令可在(該區(qū)域中的)存儲指令被寫到推測高速緩存之后退 出。這可幫助強(qiáng)制實(shí)施跨過防護(hù)指令的嚴(yán)格存儲器順序。因此,TSC區(qū)域內(nèi)的防護(hù)指令可 限制較早的存儲指令與稍后的加載指令之間的重排序跨過防護(hù)指令。在本申請人進(jìn)行的 實(shí)驗(yàn)中,對TSC區(qū)域中的防護(hù)指令的限制對于該區(qū)域中的動態(tài)二進(jìn)制優(yōu)化操作具有極小影 響,因?yàn)榉雷o(hù)和鎖在X86應(yīng)用中很少使用。TSC區(qū)域可與用于鎖省略技術(shù)的原子區(qū)域并存。例如,TSC優(yōu)化器112(圖1)可配 置成分析區(qū)域代碼,并且確定該區(qū)域是否具有防護(hù)。如果該區(qū)域中不存在防護(hù),則該區(qū)域可 有效地作為TSC區(qū)域來優(yōu)化和執(zhí)行。如果該區(qū)域中存在防護(hù),則TSC優(yōu)化器112可能會權(quán)衡 將該區(qū)域當(dāng)作原子區(qū)域以利用鎖省略或者將它當(dāng)作TSC區(qū)域以利用有效區(qū)域提交的益處。 如果提交益處高于防護(hù)開銷,則該區(qū)域可標(biāo)記為TSC區(qū)域。如果鎖省略增益優(yōu)于提交益處, 則該區(qū)域可標(biāo)記為原子區(qū)域,并且該區(qū)域可經(jīng)過優(yōu)化(包括例如通過忽略防護(hù)語義)。此 外,本文所述的TSC區(qū)域可比常規(guī)原子區(qū)域更有效地實(shí)現(xiàn)。這可歸因于如下事實(shí)無需使 TSC區(qū)域之后的存儲器指令的退出和/或提交延遲直到TSC區(qū)域中的所有存儲指令被寫到
11推測高速緩存。而是,TSC區(qū)域之后的存儲器指令能夠在TSC區(qū)域的第一提交階段之后退 出和/或提交。而且,無需為區(qū)域的第一提交階段之后的加載指令窺探,本文所述的TSC區(qū) 域可減少因可能的存儲器沖突引起的不必要的區(qū)域中止。當(dāng)數(shù)據(jù)競爭或者因高速緩存行粒 度沖突檢測引起的假數(shù)據(jù)競爭發(fā)生時,這具有提高多線程應(yīng)用中的性能的可能性。圖4示出說明符合本公開的兩階段提交區(qū)域中的代碼的示范多線程執(zhí)行的簡圖 400。為了這個示例,假定存儲器位置[m]在代碼402和404執(zhí)行之前具有初始值0。代碼 402可在第一線程(線程1)中執(zhí)行,而代碼404可在第二線程(線程2)中執(zhí)行,其中各 線程在存儲器位置[m]操作。在這個示例中,代碼402可包括下列存儲器指令Ld[m],rl ; Π -rl+1 ;St[m], rl ;表示與加載指令(Ld)關(guān)聯(lián)的數(shù)據(jù)可從高速緩存/存儲器位置[m] 讀取并且加載到處理器寄存器(rl)中,處理器寄存器(rl)可遞增值1,并且數(shù)據(jù)可從寄存 器rl存儲到高速緩存/存儲器位置[m]中。在這個示例中,代碼404可包括下列存儲器指 令Ld[m],r2 ;r2 - r2+l ;St [m],r2 ;表示與加載指令(Ld)關(guān)聯(lián)的數(shù)據(jù)可從高速緩存/存 儲器位置[m]讀取并且加載到處理器寄存器(rf)中,處理器寄存器(rf)可遞增值1,并且 數(shù)據(jù)可從處理器寄存器(rf)存儲到存儲器位置[m]中。由于兩個線程(線程1和2)中的代碼402和404的執(zhí)行,數(shù)據(jù)被寫到存儲器[m]。 與本公開一致,如果線程(線程1和2)如本文所述在TSC區(qū)域中交織,則在線程1中的代 碼402和線程2中的代碼404執(zhí)行時,存儲器(m)將具有所產(chǎn)生值1。如果線程1和2被 交織并且加載指令在線程2中發(fā)生(在存儲指令在線程1中退出之前,與加載指令關(guān)聯(lián)的 數(shù)據(jù)從存儲器(m)讀取并且加載到處理器寄存器(rf)中),則存儲器指令(加載/存儲指 令)能夠重疊并且組合值,因而存儲器(m)可具有所產(chǎn)生值1。存儲器(m)的所產(chǎn)生值1可 對于代碼序列的鎖定段內(nèi)部不存在的代碼區(qū)域發(fā)生。相比之下,如果代碼402和404在相應(yīng)常規(guī)原子區(qū)域中的兩個線程(線程1和2) 中執(zhí)行,則存儲器位置[m]不會具有所產(chǎn)生值1。而是,存儲器[m]會具有所產(chǎn)生值2。這 是因?yàn)榇a402和404如果是原子的,必須以原子方式執(zhí)行(全部或沒有),在原子區(qū)域中 執(zhí)行時,在線程1與2之間不存在重疊的可能性。在原子線程1中的代碼402的執(zhí)行將產(chǎn)生 值1,在原子線程2中的代碼404的執(zhí)行也是一樣。因此,存儲器[m]的所產(chǎn)生值為2。這個 示例證明,原子區(qū)域?qū)討B(tài)優(yōu)化施加更強(qiáng)的存儲器順序要求,因?yàn)槲恢肹m]中的兩個結(jié)果1 和2都是正確的,并且原子區(qū)域僅允許2作為結(jié)果。圖5示出根據(jù)本公開的一個實(shí)施例的示范操作的流程圖500。這個實(shí)施例的操作 可包括在運(yùn)行時間分析源二進(jìn)制代碼的分布,以便識別代碼中的“熱點(diǎn)”(50 。在這里,“熱 點(diǎn)”是頻繁執(zhí)行的指令或代碼塊,如上所述。操作還可包括連接源代碼的“熱點(diǎn)”以形成目 標(biāo)二進(jìn)制代碼的區(qū)域(504),并且形成包括目標(biāo)二進(jìn)制代碼的TSC區(qū)域(506)。操作還可包 括對TSC區(qū)域執(zhí)行二進(jìn)制優(yōu)化操作(例如對存儲器指令重排序)(508)。關(guān)于TSC區(qū)域形 成,根據(jù)這個實(shí)施例的操作還可包括定義其中加載指令以原子方式提交的TSC區(qū)域的第一 階段(510)以及其中存儲指令以原子方式提交的TSC區(qū)域的第二階段(512)。這個實(shí)施例 還可包括生成代碼以標(biāo)記TSC區(qū)域的開始和/或結(jié)束(514)。TSC區(qū)域的執(zhí)行可通過區(qū)域 入口處的標(biāo)記器來觸發(fā)(516)。附加的加載指令(來自TSC區(qū)域外部)可插入TSC區(qū)域的 第二階段,并且允許在第二階段中提交(518)。在執(zhí)行期間,如果TSC區(qū)域中止(520),則這 個實(shí)施例的操作還可包括撤回到原始的源二進(jìn)制代碼供執(zhí)行(522)。如果TSC區(qū)域成功地執(zhí)行,則這個實(shí)施例的操作還可包括繼續(xù)進(jìn)行如本文從操作502開始所述的源二進(jìn)制代碼 的運(yùn)行時間分析。當(dāng)然,雖然圖5示出根據(jù)一個實(shí)施例的示范操作,但是要理解,在其它實(shí)施例中, 圖5所示的操作可能并非全部是必要的。實(shí)際上,本文中完全預(yù)期,本公開的其它實(shí)施例可 包括圖5所示操作的子組合,和/或本文中完全預(yù)期的附加操作。因此,針對一個附圖中沒 有完全示出的特征和/或操作的權(quán)利要求被認(rèn)為落入本公開的范圍和內(nèi)容之內(nèi)。存儲器104、高速緩存/存儲器105和存儲緩沖器110可包括下列類型的存儲器中 的一個或多個半導(dǎo)體固件存儲器、可編程存儲器、非易失性存儲器、只讀存儲器、電可編程 存儲器、隨機(jī)存取存儲器、閃速存儲器、磁盤存儲器和/或光盤存儲器。作為補(bǔ)充或替代,存 儲器104、高速緩存/存儲器105和存儲緩沖器110可包括其它和/或?qū)黹_發(fā)的類型的計(jì) 算機(jī)可讀存儲器。本文所述方法的實(shí)施例可使用處理器和/或其它可編程裝置來實(shí)現(xiàn)。為此,本文 所述的方法可在其上存儲了指令的有形計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn),指令在由一個或多個處理 器執(zhí)行時執(zhí)行這些方法。存儲介質(zhì)可包括任何類型的有形介質(zhì),例如任何類型的盤,包括 軟盤、光盤、壓縮盤只讀存儲器(⑶-ROM)、可重寫壓縮盤(⑶-RW)和磁光盤;半導(dǎo)體器件,諸 如只讀存儲器(ROM)、例如動態(tài)隨機(jī)存取存儲器(RAM)和靜態(tài)RAM等RAM、可擦可編程只讀 存儲器(EPROM)、電可擦可編程只讀存儲器(EEPROM)、閃速存儲器、磁卡或光卡;或者適合 于存儲電子指令的任何類型的介質(zhì)。除非以其它方式具體說明,否則,從前面的論述中可清楚地理解,在說明書全文 中,采用諸如“操作”、“處理”、“計(jì)算”、“運(yùn)算”、“確定”等術(shù)語的論述表示計(jì)算機(jī)或計(jì)算系統(tǒng) 或者類似的電子計(jì)算裝置或設(shè)備的動作和/或過程,所述計(jì)算機(jī)或計(jì)算系統(tǒng)或者類似的電 子計(jì)算裝置或設(shè)備處理表示為計(jì)算系統(tǒng)的寄存器和/或存儲器中的物理(如電子)量的數(shù) 據(jù)和/或?qū)⑵滢D(zhuǎn)換為類似地表示為計(jì)算系統(tǒng)的存儲器、寄存器或者其它這種信息存儲、傳 送或顯示裝置中的物理量的其它數(shù)據(jù)。
權(quán)利要求
1.一種方法,包括加載源二進(jìn)制代碼供計(jì)算機(jī)系統(tǒng)執(zhí)行,所述計(jì)算機(jī)系統(tǒng)包括存儲器和處理單元,所述 處理單元包括多個寄存器和至少一個存儲緩沖器;在所述源二進(jìn)制代碼的運(yùn)行時間期間,識別所述源二進(jìn)制代碼中的多個頻繁執(zhí)行的存 儲器指令,所述頻繁執(zhí)行的存儲器指令包括多個存儲指令和多個加載指令;定義包括所述頻繁執(zhí)行的存儲器指令的兩階段提交(TSC)區(qū)域,并且對所述TSC區(qū)域 中的所述多個存儲器指令執(zhí)行二進(jìn)制優(yōu)化操作;定義所述兩階段提交(TSC)區(qū)域的第一階段,其中,當(dāng)由所述處理單元執(zhí)行時,所述多 個加載指令在所述第一階段中以原子方式提交,并且所述多個存儲指令在所述第一階段中 退出;定義用于頻繁執(zhí)行的代碼塊的所述TSC區(qū)域的第二階段,其中,所述多個存儲指令在 所述第二階段中以原子方式提交;以及允許來自所述TSC區(qū)域外部的至少一個附加的加載或存儲存儲器指令在所述TSC區(qū)域 的所述第二階段中退出。
2.如權(quán)利要求1所述的方法,其中,所述二進(jìn)制優(yōu)化操作包括在所述多個頻繁執(zhí)行的 指令中的加載和存儲指令的重排序。
3.如權(quán)利要求1所述的方法,還包括識別所述多個頻繁執(zhí)行的指令中的防護(hù)指令,并且其中所述二進(jìn)制優(yōu)化操作還包括限 制加載指令和/或存儲指令跨過所述防護(hù)指令的重排序。
4.如權(quán)利要求1所述的方法,還包括生成入口標(biāo)記器代碼,并且將所述入口標(biāo)記器代碼插入所述TSC區(qū)域的開始處,所述 入口標(biāo)記器代碼使所述處理單元開始在TSC模式中的處理;以及生成結(jié)束標(biāo)記器代碼,并且將所述結(jié)束標(biāo)記器代碼插入所述TSC區(qū)域的結(jié)束處,所述 結(jié)束標(biāo)記器代碼使所述處理單元停止在TSC模式中的處理。
5.如權(quán)利要求1所述的方法,還包括由所述處理單元來執(zhí)行所述TSC區(qū)域,并且如果中止在所述TSC區(qū)域的執(zhí)行期間發(fā)生, 則所述方法還包括返回到原始的源二進(jìn)制代碼。
6.如權(quán)利要求1所述的方法,其中,所述處理單元還包括多個核心,并且所述方法還包 括對于所述TSC區(qū)域的所述第一階段期間的所述加載指令中的至少一個,確定正在由所述 加載指令訪問的存儲器位置是否正在由所述核心中的不止一個核心在執(zhí)行期間訪問。
7.如權(quán)利要求1所述的方法,其中,所述處理單元還包括多個核心,并且所述方法還包 括對于所述TSC區(qū)域的所述第二階段期間的所述存儲指令中的至少一個,確定正在由所述 存儲指令訪問的存儲器位置是否正在由所述核心中的不止一個核心在執(zhí)行期間訪問。
8.如權(quán)利要求1所述的方法,還包括為所述加載和存儲指令建立執(zhí)行閾值;在運(yùn)行時間期間監(jiān)測所述加載和存儲指令,并且對其執(zhí)行次數(shù)進(jìn)行計(jì)數(shù),并且其中,所 述頻繁執(zhí)行的加載和存儲指令是超過所述執(zhí)行閾值的指令。
9.如權(quán)利要求1所述的方法,其中,當(dāng)與所述加載指令關(guān)聯(lián)的數(shù)據(jù)從存儲器位置移入 一個或多個寄存器時,所述多個加載指令在所述第一階段中以原子方式提交;其中,當(dāng)與所述存儲指令關(guān)聯(lián)的數(shù)據(jù)從一個或多個寄存器移到所述存儲緩沖器中的一個或多個位置時, 所述多個存儲指令在所述第一階段中退出;以及其中,當(dāng)與所述存儲指令關(guān)聯(lián)的數(shù)據(jù)從所 述存儲緩沖器移到存儲器時,所述多個存儲指令在所述第二階段中以原子方式提交。
10.一種包括上面存儲了指令的有形存儲介質(zhì)的產(chǎn)品,所述指令在由處理器執(zhí)行時引 起下列操作,其中包括加載源二進(jìn)制代碼以供執(zhí)行;在所述源二進(jìn)制代碼的運(yùn)行時間期間,識別所述源二進(jìn)制代碼中的多個頻繁執(zhí)行的存 儲器指令,所述頻繁執(zhí)行的存儲器指令包括多個存儲指令和多個加載指令;定義包括所述頻繁執(zhí)行的存儲器指令的兩階段提交區(qū)域,并且對所述區(qū)域中的所述多 個存儲器指令執(zhí)行二進(jìn)制優(yōu)化操作;定義用于頻繁執(zhí)行的代碼塊的兩階段提交(TSC)區(qū)域的第一階段,其中,所述多個加 載指令在所述第一階段中以原子方式提交,并且所述多個存儲指令在所述第一階段中退 出;定義用于所述頻繁執(zhí)行的代碼塊的所述TSC區(qū)域的第二階段,其中,所述多個存儲指 令在所述第二階段中以原子方式提交;以及允許來自所述TSC區(qū)域外部的至少一個附加的存儲器指令在所述第二階段中退出。
11.如權(quán)利要求10所述的產(chǎn)品,其中,所述二進(jìn)制優(yōu)化操作包括在所述多個頻繁執(zhí)行 的指令中的加載和存儲指令的重排序。
12.如權(quán)利要求10所述的產(chǎn)品,其中,所述指令在由所述處理器執(zhí)行時引起下列附加 操作,其中包括識別所述多個頻繁執(zhí)行的指令中的防護(hù)指令,并且其中所述二進(jìn)制優(yōu)化操作還包括限 制加載指令和/或存儲指令跨過所述防護(hù)指令的重排序。
13.如權(quán)利要求10所述的產(chǎn)品,其中,所述指令在由所述處理器執(zhí)行時引起下列附加 操作,其中包括生成入口標(biāo)記器代碼,并且將所述入口標(biāo)記器代碼插入所述TSC區(qū)域的開始處,所述 入口標(biāo)記器代碼使所述處理器開始在TSC模式中的處理;以及生成結(jié)束標(biāo)記器代碼,并且將所述結(jié)束標(biāo)記器代碼插入所述TSC區(qū)域的結(jié)束處,所述 結(jié)束標(biāo)記器代碼使所述處理器停止在TSC模式中的處理。
14.如權(quán)利要求10所述的產(chǎn)品,其中,所述指令在由所述處理器執(zhí)行時引起下列附加 操作,其中包括由所述處理單元來執(zhí)行所述TSC區(qū)域,并且如果中止在所述TSC區(qū)域的執(zhí)行期間發(fā)生, 則所述方法還包括返回到原始的源二進(jìn)制代碼。
15.如權(quán)利要求10所述的產(chǎn)品,其中,所述處理器包括多個核心,并且其中所述指令在 由所述處理器執(zhí)行時引起下列附加操作,其中包括對于所述TSC區(qū)域的所述第一階段期 間的所述加載指令中的至少一個,確定正在由所述加載指令訪問的存儲器位置是否正在由 所述核心中的不止一個核心在執(zhí)行期間訪問。
16.如權(quán)利要求10所述的產(chǎn)品,其中,所述處理器包括多個核心,并且其中所述指令在 由所述處理器執(zhí)行時引起下列附加操作,其中包括對于所述TSC區(qū)域的所述第二階段期 間的所述存儲指令中的至少一個,確定正在由所述存儲指令訪問的存儲器位置是否正在由所述核心中的不止一個核心在執(zhí)行期間訪問。
17.如權(quán)利要求10所述的產(chǎn)品,其中,所述指令在由所述處理器執(zhí)行時引起下列附加 操作,其中包括為所述加載和存儲指令建立執(zhí)行閾值;以及在運(yùn)行時間期間監(jiān)測所述加載和存儲指令,并且對其執(zhí)行次數(shù)進(jìn)行計(jì)數(shù),并且其中,所 述頻繁執(zhí)行的加載和存儲指令是超過所述執(zhí)行閾值的指令。
18.一種系統(tǒng),包括處理單元,所述處理單元包括多個寄存器和至少一個存儲緩沖器;以及 存儲器,所述存儲器配置成容納將在所述處理器上執(zhí)行的兩階段提交(TSC)優(yōu)化器代 碼和源二進(jìn)制代碼,其中,當(dāng)在所述處理器上執(zhí)行所述TSC優(yōu)化器代碼時,所述TSC優(yōu)化器 代碼使所述處理器執(zhí)行下列步驟在所述源二進(jìn)制代碼的運(yùn)行時間期間,識別所述源二進(jìn)制代碼中的多個頻繁執(zhí)行的存 儲器指令,所述頻繁執(zhí)行的存儲器指令包括多個存儲指令和多個加載指令;定義包括所述頻繁執(zhí)行的存儲器指令的兩階段提交區(qū)域,并且對所述區(qū)域中的所述多 個存儲器指令執(zhí)行二進(jìn)制優(yōu)化操作;定義用于頻繁執(zhí)行的代碼塊的TSC區(qū)域的第一階段,其中,所述多個加載指令在所述 第一階段中以原子方式提交,并且所述多個存儲指令在所述第一階段中退出;定義用于所述頻繁執(zhí)行的代碼塊的所述TSC區(qū)域的第二階段,其中,所述多個存儲指 令在所述第二階段中以原子方式提交;以及允許來自所述TSC區(qū)域外部的至少一個附加的存儲器指令在所述第二階段中退出。
19.如權(quán)利要求18所述的系統(tǒng),其中,所述二進(jìn)制優(yōu)化操作包括在所述多個頻繁執(zhí)行 的指令中的加載和存儲指令的重排序。
20.如權(quán)利要求18所述的系統(tǒng),其中,所述TSC優(yōu)化器代碼還使所述處理器執(zhí)行下列步驟為所述加載和存儲指令建立執(zhí)行閾值;在運(yùn)行時間期間,監(jiān)測所述加載和存儲指令,并且對其執(zhí)行次數(shù)進(jìn)行計(jì)數(shù),并且其中, 所述頻繁執(zhí)行的加載和存儲指令是超過所述執(zhí)行閾值的指令。
全文摘要
一般來說,本公開提供生成具有兩個獨(dú)立提交階段的兩階段提交(TSC)區(qū)域的系統(tǒng)和方法??蔀門SC區(qū)域識別和組合頻繁執(zhí)行的代碼。通過例如對加載和存儲指令重排序,二進(jìn)制優(yōu)化操作可對TSC區(qū)域執(zhí)行,以便使代碼能夠更有效地運(yùn)行。在第一階段,區(qū)域中的加載操作可以原子方式提交,以及在第二階段,區(qū)域中的存儲操作可以原子方式提交。
文檔編號G06F9/30GK102103485SQ20101061558
公開日2011年6月22日 申請日期2010年12月16日 優(yōu)先權(quán)日2009年12月16日
發(fā)明者C·王, Y·吳 申請人:英特爾公司