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