在支持事務(wù)的計(jì)算機(jī)體系結(jié)構(gòu)中使用異常進(jìn)行代碼專業(yè)化的方法和系統(tǒng)的制作方法
【專利摘要】在支持事務(wù)的系統(tǒng)中使用異常進(jìn)行代碼專業(yè)化的方法和系統(tǒng)。該方法和系統(tǒng)包括在計(jì)算機(jī)指令序列中插入一個(gè)或多個(gè)無分支指令。所述無分支指令包括如果滿足普遍發(fā)生的條件則可執(zhí)行的一個(gè)或多個(gè)指令,以及包括如果不滿足該普遍發(fā)生的條件則被配置以引發(fā)異常的一個(gè)或多個(gè)指令。
【專利說明】在支持事務(wù)的計(jì)算機(jī)體系結(jié)構(gòu)中使用異常進(jìn)行代碼專業(yè)化的方法和系統(tǒng)
【背景技術(shù)】
[0001]一些計(jì)算機(jī)體系結(jié)構(gòu)可以支持硬件和/或軟件事務(wù)性存儲(chǔ)器系統(tǒng),例如限制事務(wù)性存儲(chǔ)器(RTM)系統(tǒng)和軟件事務(wù)性存儲(chǔ)器(STM)系統(tǒng)。在事務(wù)性存儲(chǔ)器系統(tǒng)中,允許并行地執(zhí)行計(jì)算機(jī)指令,例如作為多線程應(yīng)用的單線程操作。要做到這一點(diǎn),在計(jì)算機(jī)程序中的指令序列被定義為事務(wù),其可以獨(dú)立于在其他線程上運(yùn)行的指令對(duì)共享存儲(chǔ)器執(zhí)行讀取和寫入指令。例如,事務(wù)可以根據(jù)事務(wù)性系統(tǒng)的類型,由解釋器、翻譯器、程序編譯器、優(yōu)化器、或應(yīng)用編程接口(API)來定義。
[0002]事務(wù)性存儲(chǔ)器系統(tǒng)包括控制機(jī)制,以防止并行執(zhí)行的指令在同一時(shí)間或以錯(cuò)誤的順序訪問共享存儲(chǔ)器。例如,驗(yàn)證機(jī)制驗(yàn)證事務(wù)已經(jīng)順利完成,例如,在事務(wù)完成之前,沒有其他程序線程對(duì)該事務(wù)訪問的存儲(chǔ)器做出更改。如果驗(yàn)證成功,則使得該事務(wù)的結(jié)果是永久性的(例如,通過“提交”操作)。
[0003]如果該事務(wù)不能被提交,可能會(huì)引發(fā)異?;蚴聞?wù)可能被中止。如果引發(fā)異?;蚴聞?wù)被中止,該事務(wù)的執(zhí)行可以回滾到程序代碼中較早的點(diǎn)(例如“檢查點(diǎn)”)。如果事務(wù)被中止,它可以從開始重新執(zhí)行,直到它成功地完成或簡單地終止。
[0004]計(jì)算機(jī)程序代碼可以包含許多專業(yè)化的指令,其中每一條可以被設(shè)計(jì)為處理在程序執(zhí)行期間可能滿足的特定條件。代碼專業(yè)化是在運(yùn)行時(shí)試圖對(duì)于普遍發(fā)生的條件優(yōu)化計(jì)算機(jī)程序或其中一部分的程序優(yōu)化技術(shù)。然而,代碼專業(yè)化通常會(huì)添加可能影響性能的分支指令。
【專利附圖】
【附圖說明】
[0005]在附圖中,通過示例的方式而不是限制的方式示出在這里描述的本發(fā)明。為了簡單和清楚地說明,附圖中示出的元件不一定是按照比例繪制的。例如為了清楚起見,一些元件的尺寸相對(duì)于其他元件被夸大了。此外,在認(rèn)為合適的情況下,附圖中重復(fù)參考標(biāo)記以指示相應(yīng)的或類似的元件。
[0006]圖1是計(jì)算設(shè)備的至少一個(gè)實(shí)施例的簡化框圖;
[0007]圖2是圖1的計(jì)算設(shè)備的處理器核的至少一個(gè)實(shí)施例的簡化框圖;
[0008]圖3是用于代碼專業(yè)化的方法的至少一個(gè)實(shí)施例的簡化模塊圖;
[0009]圖4是用于代碼專業(yè)化的方法的至少一個(gè)實(shí)施例的簡化流程圖;
[0010]圖5是包括比較和分支指令的經(jīng)過專業(yè)化的計(jì)算機(jī)指令的至少一個(gè)實(shí)施例的簡化的偽代碼說明。
[0011]圖6是不包括任何比較和分支指令的經(jīng)過專業(yè)化的計(jì)算機(jī)指令的至少一個(gè)實(shí)施例的簡化偽代碼說明。
【具體實(shí)施方式】
[0012]盡管本公開的概念容易有各種修改和替代形式,但其中的具體示例性的實(shí)施例在附圖中以示例方式示出,并且將在本文詳細(xì)描述。然而,應(yīng)當(dāng)理解的是,不是想將本公開的概念局限在所公開的特定形式,而是相反,目的是要涵蓋落在如隨附權(quán)利要求所定義的本發(fā)明的精神和范圍內(nèi)的所有修改、等價(jià)物、以及替代物。
[0013]在下面的描述中,闡述了許多的具體細(xì)節(jié),例如邏輯實(shí)現(xiàn)、操作碼、用于指定操作數(shù)的方法、資源分區(qū)/共享/復(fù)制實(shí)現(xiàn)、系統(tǒng)部件的類型和相互關(guān)系、以及邏輯分區(qū)/集成選擇,以便更充分地理解本公開。然而,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)領(lǐng)會(huì),沒有這些具體細(xì)節(jié)也可實(shí)現(xiàn)本公開的實(shí)施例。在其他實(shí)例中,沒有詳細(xì)示出控制結(jié)構(gòu)、門級(jí)電路、以及全軟件指令序列,以免模糊本發(fā)明。利用所包括的描述,本領(lǐng)域技術(shù)人員將能實(shí)現(xiàn)合適的功能性而無需過多的實(shí)驗(yàn)。
[0014]本說明書中參考的“一個(gè)實(shí)施例”、“實(shí)施例”、“示例實(shí)施例”等時(shí)表示,所描述的實(shí)施例可以包含特定特征、結(jié)構(gòu)、或特性,但不是每一個(gè)實(shí)施例都需要包括該特定特征、結(jié)構(gòu)、或特性。而且,這些短語不一定指相同的實(shí)施例。此外,當(dāng)結(jié)合一個(gè)實(shí)施例描述特定特征、結(jié)構(gòu)、或特性時(shí),認(rèn)為,不管是否明確描述,本領(lǐng)域技術(shù)人員都知道如何結(jié)合其他實(shí)施例實(shí)現(xiàn)該特征、結(jié)構(gòu)、或特性。
[0015]本發(fā)明的實(shí)施例可以以硬件、固件、軟件、或其任意組合來實(shí)現(xiàn)。在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)的本發(fā)明的實(shí)施例可以包括部件之間的一個(gè)或多個(gè)基于總線的互連和/或部件之間的一個(gè)或多個(gè)點(diǎn)對(duì)點(diǎn)互連。本發(fā)明的實(shí)施例還可以作為承載于或存儲(chǔ)在可以由一個(gè)或多個(gè)處理器讀取和執(zhí)行的暫時(shí)性或非暫時(shí)性的機(jī)器可讀介質(zhì)上的指令來實(shí)現(xiàn)。機(jī)器可讀介質(zhì)可以體現(xiàn)為用于以機(jī)器(例如,計(jì)算設(shè)備)可讀的形式存儲(chǔ)或傳輸信息的任何設(shè)備、機(jī)制、或物理結(jié)構(gòu)。例如,機(jī)器可讀介質(zhì)可以體現(xiàn)為只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、磁盤存儲(chǔ)介質(zhì)、光存儲(chǔ)介質(zhì)、閃存存儲(chǔ)器設(shè)備、小型或微型SD卡、記憶棒、電信號(hào)、以及其他。
[0016]在附圖中,為便于描述,可以顯示示意性的元件(例如那些代表了設(shè)備、模塊、指令塊、以及數(shù)據(jù)元件的元件)的具體布置或排序。然而,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是,在附圖中示意性元件的具體順序或布置并不意味著需要處理或分離過程的特定順序或序列。此外,在附圖中包含的示意性元件并不意味著在所有的實(shí)施例中需要這樣的元件,或由這樣的元件所代表的特征可能不被包括在或結(jié)合一些實(shí)施例中的其他元件。
[0017]通常,用于代表指令塊的示意性元件可以使用機(jī)器可讀指令的任何合適的形式來實(shí)現(xiàn),例如軟件或固件應(yīng)用、程序、函數(shù)、模塊、例程、進(jìn)程、過程、插件、小程序、窗口小部件、代碼片段、和/或其他,并且每條這樣的指令可以使用任何合適的編程語言、庫、應(yīng)用編程接口(API)、和/或其他軟件開發(fā)工具來實(shí)現(xiàn)。例如,一些實(shí)施例可以使用Java、C++、和/或其他編程語言來實(shí)現(xiàn)。
[0018]同樣地,用于代表數(shù)據(jù)或信息的示意性元件可以使用任何合適的電子布置或結(jié)構(gòu)來實(shí)現(xiàn),例如寄存器、數(shù)據(jù)存儲(chǔ)、表、記錄、數(shù)組、索引、散列、映射、樹、列表、圖形、文件(任何文件類型的)、文件夾、目錄、數(shù)據(jù)庫、和/或其他。
[0019]此外,在附圖中使用連接元件(例如實(shí)線或虛線或箭頭)說明兩個(gè)或多個(gè)其他示意性元件之間或者之中的連接、關(guān)系、或關(guān)聯(lián),沒有任何這樣的連接元件并不意味著不可以存在連接、關(guān)系、或關(guān)聯(lián)。換言之,元件之間的一些連接、關(guān)系、或關(guān)聯(lián)可以不被顯示在附圖中,以便不模糊本公開。另外,為了便于說明,單個(gè)連接元件可以被用來代表元件之間的多個(gè)連接、關(guān)系、或關(guān)聯(lián)。例如,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解的是,在連接元件代表信號(hào)、數(shù)據(jù)、或指令的通信之處,這些元件可以視其需要代表一個(gè)或多個(gè)信號(hào)路徑(例如,總線)以實(shí)現(xiàn)通信。
[0020]現(xiàn)在參考圖1,說明性計(jì)算設(shè)備100包括至少一個(gè)處理器110、存儲(chǔ)器120、輸入/輸出(I/o)子系統(tǒng)122、存儲(chǔ)設(shè)備124、以及一個(gè)或多個(gè)外圍設(shè)備140。處理器110支持在如圖2中顯示的事務(wù)性存儲(chǔ)器系統(tǒng)222。如下面更詳細(xì)描述的,在執(zhí)行過程中分析計(jì)算機(jī)程序代碼。專業(yè)化器228連接事務(wù)性存儲(chǔ)器系統(tǒng)222以對(duì)一個(gè)或多個(gè)普遍發(fā)生的條件的代碼區(qū)域或事務(wù)進(jìn)行專業(yè)化。不同于如當(dāng)采用傳統(tǒng)代碼專業(yè)化技術(shù)經(jīng)常做的那樣,添加分支指令到程序代碼,專業(yè)化器228在代碼區(qū)域或事務(wù)中插入一條或多條無分支指令,其被配置以便利用事務(wù)性存儲(chǔ)器系統(tǒng)222的異常處理特征。更具體地,如果普遍發(fā)生的條件未得到滿足,由專業(yè)化器228插入的指令被配置以便引發(fā)異常。以這種方式,響應(yīng)于滿足普遍發(fā)生的條件,正常程序流被允許繼續(xù)不被中斷,并且沒有分支。
[0021]計(jì)算設(shè)備100可以體現(xiàn)在或作為任何類型的計(jì)算設(shè)備,例如,臺(tái)式計(jì)算機(jī)系統(tǒng)、膝上或平板計(jì)算機(jī)系統(tǒng)、服務(wù)器、企業(yè)計(jì)算機(jī)系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、手持式計(jì)算設(shè)備、或依賴特定應(yīng)用的其他電子設(shè)備。
[0022]說明性處理器110包括多個(gè)處理器核或單核的邏輯段112、114、116,為了便于描述,本文簡稱為“核”。一個(gè)或多個(gè)核112、114、116可以被配置以便處理多線程的計(jì)算機(jī)程序。核112、114、116包括或通信地耦合到一個(gè)或多個(gè)緩存存儲(chǔ)器118。在專業(yè)化器228和/或計(jì)算設(shè)備100的其他部件的操作過程中,可以利用緩存118來暫時(shí)地存儲(chǔ)數(shù)據(jù)和/或指令。
[0023]除了緩存存儲(chǔ)器118,處理器110和/或它的核112、114、116包括或通信地耦合到存儲(chǔ)器120。存儲(chǔ)器120的一部分可以被體現(xiàn)為任何類型的合適的存儲(chǔ)器設(shè)備,例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器設(shè)備(DRAM)、同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器設(shè)備(SDRAM)、雙數(shù)據(jù)速率動(dòng)態(tài)隨機(jī)存取存儲(chǔ)設(shè)備(DDRSDRAM)、和/或其他易失性存儲(chǔ)器設(shè)備。
[0024]處理器110也通信地耦合到I/O子系統(tǒng)122。雖然沒有具體地顯示,但I(xiàn)/O子系統(tǒng)122通常包括存儲(chǔ)器控制器(例如,存儲(chǔ)器控制器中心(MCH)或北橋)、輸入/輸出控制器(例如,輸入/輸出控制器中心(ICH)或南橋)、以及固件設(shè)備。當(dāng)然,在其他實(shí)施例中,可以使用具有其他配置的I/O子系統(tǒng)。例如,在一些實(shí)施例中,I/O子系統(tǒng)122可以連同處理器110和計(jì)算設(shè)備100的其他部件一起形成片上系統(tǒng)(SoC)的一部分并且被合并到單個(gè)集成電路芯片上。因此,應(yīng)當(dāng)領(lǐng)會(huì)的是,在一些實(shí)施例中,I/O子系統(tǒng)122的每個(gè)部件可以位于共同的集成電路芯片上。
[0025]I/O子系統(tǒng)122通信地耦合到一個(gè)或多個(gè)存儲(chǔ)設(shè)備124。存儲(chǔ)設(shè)備124的一部分可以被體現(xiàn)為用于存儲(chǔ)數(shù)據(jù)和/或指令的任何合適的設(shè)備,例如磁盤存儲(chǔ)設(shè)備(例如硬盤)、記憶卡、記憶棒、和/或其他。在一些實(shí)施例中,操作系統(tǒng)(0/S)126、程序代碼(例如,應(yīng)用代碼)128的一個(gè)或多個(gè)序列、程序編譯器130、和/或數(shù)據(jù)庫管理系統(tǒng)(DBMS) 132可以體現(xiàn)在存儲(chǔ)設(shè)備124中。在執(zhí)行過程中,0/S126的一部分、代碼128、編譯器130、和/或DBMS 132可以被加載到存儲(chǔ)器120和/或緩存118中,用于更快的處理或其他原因。
[0026]I/O子系統(tǒng)122可以通信地耦合到一個(gè)或多個(gè)外圍設(shè)備140。外圍設(shè)備140可以包括一個(gè)或多個(gè)網(wǎng)絡(luò)接口、圖形和/或視頻適配器、鍵盤、觸摸屏、顯示器、打印機(jī)、數(shù)據(jù)存儲(chǔ)設(shè)備、和/或其他外圍設(shè)備,這例如取決于計(jì)算設(shè)備100的預(yù)期用途。此外,應(yīng)當(dāng)理解的是,計(jì)算設(shè)備100可以包括其他部件、子部件、以及為了描述清晰起見而未在圖1中示出的設(shè)備。
[0027]通常,如圖1中顯示的,計(jì)算設(shè)備100的部件由一個(gè)或多個(gè)信號(hào)路徑(被示意性地代表為雙箭頭)通信地耦合。這樣的信號(hào)路徑可以被體現(xiàn)為能夠促進(jìn)各自設(shè)備之間通信的任何類型的有線或無線信號(hào)路徑。例如,信號(hào)路徑可以體現(xiàn)為任意數(shù)量的線材、印刷電路板布線、導(dǎo)通孔、總線、點(diǎn)到點(diǎn)的互連、居間設(shè)備、和/或類似物。
[0028]現(xiàn)在參考圖2,說明性處理器核112包括提取單元210、邏輯單元212、一個(gè)或多個(gè)寄存器214、執(zhí)行單元216、以及引退單元218。雖然沒有具體地示出,但是應(yīng)當(dāng)理解的是,一個(gè)或多個(gè)核114、116可以具有與核112相同或相似的配置。每個(gè)提取單元210、邏輯單元212、寄存器214、執(zhí)行單元216、以及引退單元218可以體現(xiàn)為計(jì)算機(jī)電路,例如作為核112的中央處理單元的電子部件。
[0029]在計(jì)算設(shè)備100的操作過程中,提取單元210從緩存118、存儲(chǔ)器120、和/或存儲(chǔ)設(shè)備124中獲取將由核112執(zhí)行的指令。邏輯單元212處理指令并且將它們轉(zhuǎn)換成能夠被執(zhí)行單元216執(zhí)行的形式(例如,機(jī)器級(jí)指令)。按照事務(wù)性存儲(chǔ)器系統(tǒng)222的設(shè)計(jì),在由執(zhí)行單元216成功執(zhí)行指令之后,引退單元218可以提交并隨后引退該指令(例如,通過釋放寄存器或更新處理器狀態(tài))。寄存器214可以被用于存儲(chǔ)在指令的處理和/或執(zhí)行中涉及的值,例如數(shù)據(jù)值、指針地址、和/或行程計(jì)數(shù)。
[0030]通常,翻譯器220被配置以便將程序員可訪問的計(jì)算機(jī)指令翻譯成與處理器體系結(jié)構(gòu)兼容的可執(zhí)行形式。在說明性實(shí)施例中,翻譯器220改編程序代碼以在支持事務(wù)性存儲(chǔ)器系統(tǒng)222的計(jì)算機(jī)體系結(jié)構(gòu)上運(yùn)行。在其他實(shí)施例中,其可以包括,例如,軟件事務(wù)性存儲(chǔ)器系統(tǒng),翻譯器220可以根據(jù)具體的實(shí)現(xiàn)而體現(xiàn)為編譯器、應(yīng)用編程接口(API)、數(shù)據(jù)庫管理系統(tǒng)、或類似物。
[0031]翻譯器220包括優(yōu)化器226。一般來說,優(yōu)化器226被配置以便在程序的執(zhí)行過程中最小化或最大化計(jì)算機(jī)程序的一個(gè)或多個(gè)屬性。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是,根據(jù)特定應(yīng)用或系統(tǒng)設(shè)計(jì)的要求,可以使用多種類型的優(yōu)化。例如,一些優(yōu)化器檢查程序代碼以查看有沒有任何計(jì)算機(jī)指令序列(尤其是經(jīng)常執(zhí)行的序列)可以用更少的代碼替換。
[0032]在說明性實(shí)施例中,優(yōu)化器226識(shí)別需要訪問共享存儲(chǔ)器的代碼區(qū)域(例如,包括加載或存儲(chǔ)指令的代碼區(qū)域),并且將該代碼區(qū)域定義為事務(wù)。優(yōu)化器226插入檢查點(diǎn),并且根據(jù)需要來提交指令到代碼區(qū)域以便定義事務(wù)。在一些實(shí)施例中,可以使用二進(jìn)制翻譯動(dòng)態(tài)優(yōu)化器、或配置以便優(yōu)化遇到的指令序列并隨后緩存經(jīng)過優(yōu)化的指令的類似設(shè)備。在其他實(shí)施例中,可以使用靜態(tài)優(yōu)化器。
[0033]優(yōu)化器226可以包括專業(yè)化器228作為子部件,或?qū)I(yè)化器228可被體現(xiàn)為如顯示的與翻譯器220獨(dú)立的部件。專業(yè)化器228被配置以便優(yōu)化計(jì)算機(jī)指令序列用于普遍發(fā)生的條件??梢灶A(yù)先(例如,由程序員)或“立即(on the fly)”(例如,作為計(jì)算機(jī)指令先前執(zhí)行的結(jié)果)判定特定條件是否被認(rèn)為是普遍發(fā)生的??赡芟胍M(jìn)行計(jì)算機(jī)指令專業(yè)化的普遍發(fā)生的條件的一些示例包括:運(yùn)行時(shí)消除歧義檢查(例如,其中對(duì)出現(xiàn)具體別名或沒有別名進(jìn)行代碼專業(yè)化)、值專業(yè)化(例如,其中對(duì)出現(xiàn)變量的頻繁出現(xiàn)的值(例如NULL)進(jìn)行代碼專業(yè)化)、以及循環(huán)多版本(例如,其中對(duì)出現(xiàn)特定循環(huán)行程計(jì)數(shù)進(jìn)行代碼專業(yè)化)。[0034]如結(jié)合圖3-6的如下描述,說明性專業(yè)化器228被配置以便使用事務(wù)性存儲(chǔ)器系統(tǒng)222的特征來優(yōu)化計(jì)算機(jī)指令的序列用于普遍發(fā)生的條件,而不會(huì)引入任何新的分支指令。
[0035]說明性事務(wù)性存儲(chǔ)器系統(tǒng)222體現(xiàn)為支持事務(wù)的硬件系統(tǒng),例如限制事務(wù)性存儲(chǔ)器(RTM)系統(tǒng)。然而,應(yīng)當(dāng)理解的是,在其他實(shí)施例中,可以使用軟件事務(wù)性存儲(chǔ)器系統(tǒng)(STM)或其他隱式地轉(zhuǎn)移異??刂频南到y(tǒng)。事務(wù)性存儲(chǔ)器系統(tǒng)222包括檢查點(diǎn)邏輯230、事務(wù)執(zhí)行語義232、溢出邏輯234、以及異常處理程序236。
[0036]檢查點(diǎn)邏輯230包括配置以便與優(yōu)化器226連接而建立檢查點(diǎn)并且在計(jì)算機(jī)指令序列中定義代碼區(qū)域或事務(wù)的計(jì)算機(jī)指令。此外,響應(yīng)于檢查點(diǎn)指令,檢查點(diǎn)邏輯230可以指定將要采取的動(dòng)作。例如,響應(yīng)于檢查點(diǎn)指令,檢查點(diǎn)邏輯222可以啟動(dòng)存儲(chǔ)與核112或計(jì)算設(shè)備100的其他部件的特定狀態(tài)相關(guān)的數(shù)據(jù)。
[0037]事務(wù)執(zhí)行語義232包括可被用于在程序代碼中調(diào)用并利用事務(wù)性存儲(chǔ)器系統(tǒng)222的特征的語義(例如指令或者代碼庫)。例如,事務(wù)執(zhí)行語義232啟用對(duì)異常控制的隱式轉(zhuǎn)移(例如根據(jù)系統(tǒng)設(shè)計(jì),對(duì)解釋器或?qū)Ρ镜貓?zhí)行)。在說明性實(shí)施例中,事務(wù)執(zhí)行語義232包括檢查點(diǎn)、回滾、以及提交語義,還有布爾或按位邏輯、算術(shù)的語義,并且調(diào)用異常處理程序 236。
[0038]溢出邏輯234包括被配置以便在發(fā)生溢出時(shí)(例如,值超過能夠被存儲(chǔ)在緩存118或存儲(chǔ)器120中的最大尺寸)指定將要采取的動(dòng)作的邏輯。例如,響應(yīng)于溢出事件,溢出邏輯234可以存儲(chǔ)與計(jì)算設(shè)備100或其中部件的狀態(tài)相關(guān)的數(shù)據(jù)。
[0039]異常處理程序236包括被配置以便判定如果由提取單元210獲取的指令引發(fā)異常則將要采取的動(dòng)作的邏輯。例如,異常處理程序236可以包括被配置以便將程序執(zhí)行回滾到在指令序列中先前的檢查點(diǎn)并且從該檢查點(diǎn)處繼續(xù)執(zhí)行或中止事務(wù)的邏輯。
[0040]算術(shù)和邏輯單元(ALU) 224包括算術(shù)單元240和邏輯單元242。算術(shù)單元240被配置以便處理例如加、減、除、乘、和/或其他的算術(shù)運(yùn)算。邏輯單元242被配置以便處理布爾和/或按位邏輯操作,例如與、或、以及異或操作。
[0041]現(xiàn)在參考圖3,在操作中,計(jì)算機(jī)指令322的序列被輸入到翻譯器220中。指令322被稱為“非專業(yè)化”的代碼,因?yàn)樗鼈冞€沒有由優(yōu)化器226和/或?qū)I(yè)化器228處理。如本文中所描述的,由翻譯器220 (包括優(yōu)化器226和專業(yè)化器228)處理之后,生產(chǎn)出指令322的優(yōu)化的和/或?qū)I(yè)化的版本330。優(yōu)化的和/或?qū)I(yè)化的指令330可以被存儲(chǔ)在緩存118中,直到由執(zhí)行單元216執(zhí)行。
[0042]現(xiàn)在參考圖4,顯示了可由代碼專業(yè)化器228執(zhí)行的說明性方法400。在方框410處,方法400獲取(例如,從緩存118或存儲(chǔ)器120)已經(jīng)由優(yōu)化器226定義為代碼區(qū)域或事務(wù)的一條或多條指令。為了本公開的目的,“代碼區(qū)域”可以包括由翻譯器220(例如,優(yōu)化器226)判定出的計(jì)算機(jī)指令序列以包括至少一個(gè)事務(wù)。換言之,在一些實(shí)施例中,代碼區(qū)域可以包括一個(gè)或多個(gè)事務(wù),而在其他實(shí)施例中,代碼區(qū)域可以包括單個(gè)事務(wù)。
[0043]在說明性實(shí)施例中,事務(wù)是由跟隨有提交指令的檢查點(diǎn)指令定義的。在方框412處,方法400分析代碼區(qū)域中的每個(gè)事務(wù),以便判定響應(yīng)于普遍發(fā)生的條件,在事務(wù)中的一條或多條指令中的哪條指令被期望是可執(zhí)行的。為了做出這個(gè)判定,方法400可以考慮是否有只有在普遍發(fā)生的條件被滿足時(shí)才執(zhí)行的某些指令。替代地或此外,方法400可以判定:雖然可以響應(yīng)于普遍發(fā)生的條件執(zhí)行事務(wù)中的所有或多條指令,但是可能期望僅僅響應(yīng)于普遍發(fā)生的條件執(zhí)行這些指令中的某些。例如,當(dāng)代碼的各部分針對(duì)不同的條件被優(yōu)化時(shí)可能是這種情況。
[0044]在方框414處,方法400在代碼區(qū)域中插入一條或多條無分支指令。該無分支指令被配置以便保持針對(duì)普遍發(fā)生的條件的正常的程序流(例如,沒有分支)。在說明性實(shí)施例中,響應(yīng)于沒有滿足普遍發(fā)生的條件,無分支指令包括被配置以便引發(fā)異常(從而調(diào)用異常處理程序236)的至少一條指令。無分支指令可以包括可以由ALU224支持的任何形式的非分支邏輯和/或算術(shù)操作。換言之,作為方框414的結(jié)果,沒有比較和分支指令被插入到代碼區(qū)域。
[0045]在方框416處,方法400識(shí)別出在代碼區(qū)域中響應(yīng)于普遍發(fā)生的條件不被期望成為可執(zhí)行的任何指令,并且連接異常處理程序236以將那些指令與異常處理機(jī)制(例如,回滾或中止指令)相關(guān)聯(lián),這可以適用于特定應(yīng)用或設(shè)計(jì)。在事務(wù)性存儲(chǔ)器系統(tǒng)和其他隱式地轉(zhuǎn)移異??刂频南到y(tǒng)中,由異常處理程序236隱式地處理控制的轉(zhuǎn)移和響應(yīng)于普遍發(fā)生的條件而不可執(zhí)行的指令的執(zhí)行。
[0046]在方框418處,方法400將響應(yīng)于普遍發(fā)生的條件而不被期望成為可執(zhí)行的指令(例如,在方框416處與異常相關(guān)聯(lián)的指令)從代碼區(qū)域中移除。例如,這可以通過在指令周圍插入注釋括號(hào)而做到。該指令可以被完全移除(例如,以便如果遇到非普遍發(fā)生的條件則程序中止)或可以被移動(dòng)到程序代碼的順序列表中的另一個(gè)位置。以這種方式,代碼區(qū)域或事務(wù)可以被專業(yè)化,以使得它僅包含被定向到普遍發(fā)生的條件的代碼。此外,如果響應(yīng)于普遍發(fā)生的條件的被期望成為可執(zhí)行的代碼已經(jīng)被優(yōu)化,則代碼區(qū)域可以只包含經(jīng)過優(yōu)化的代碼。被定向到處理非普遍發(fā)生的條件、或響應(yīng)于普遍發(fā)生的條件而不被期望成為可執(zhí)行的任何代碼,可能保持為未優(yōu)化的,或可以由優(yōu)化器226單獨(dú)處理。
[0047]現(xiàn)在參考圖5,顯示了已經(jīng)使用傳統(tǒng)代碼專業(yè)化技術(shù)進(jìn)行專業(yè)化的計(jì)算機(jī)指令522的序列的示例。指令522包括代碼區(qū)域532。雖然未示出,但是應(yīng)當(dāng)理解的是,代碼522還可以包括其他的計(jì)算機(jī)指令和/或代碼區(qū)域。
[0048]使用傳統(tǒng)代碼專業(yè)化技術(shù)處理后,由后面順序地跟有提交指令550的檢查點(diǎn)指令540定義代碼區(qū)域532。在檢查點(diǎn)指令540和提交指令550之間,已經(jīng)將比較和分支指令542添加到代碼區(qū)域532。比較和分支指令542比較存儲(chǔ)在兩個(gè)寄存器rI和r2中的數(shù)據(jù)。如果存儲(chǔ)在rl和r2中的值相等,則程序執(zhí)行跳過指令544,其被配置以便當(dāng)普遍發(fā)生的條件沒有被滿足時(shí)執(zhí)行,如由標(biāo)簽“未優(yōu)化的版本”所指示的。
[0049]程序流跳轉(zhuǎn)到“優(yōu)化的版本”標(biāo)簽并從那里繼續(xù)執(zhí)行指令546,其被配置以便當(dāng)普遍發(fā)生的條件被滿足時(shí)執(zhí)行。一旦指令546完成執(zhí)行,程序流進(jìn)行到提交指令550。
[0050]如果比較和分支指令542的結(jié)果指示存儲(chǔ)在rl和r2中的數(shù)據(jù)不相等,則程序流繼續(xù)進(jìn)行以執(zhí)行指令544。當(dāng)指令544完成執(zhí)行時(shí),程序流跳轉(zhuǎn)到通過標(biāo)簽548。如從上面的示例可以看出的,當(dāng)普遍發(fā)生的條件(例如,rl等于r2)被滿足和當(dāng)非普遍發(fā)生的條件(例如,rl不等于r2)被滿足時(shí),兩種情況都產(chǎn)生分支。
[0051]現(xiàn)在參考圖6,顯示了如本文所公開的在經(jīng)過專業(yè)化器228處理后,包括代碼區(qū)域632的計(jì)算機(jī)指令622的序列。指令序列的其余部分(例如,在代碼區(qū)域632外部的指令622的序列的一部分)可以保持不受代碼區(qū)域632的處理的影響,或可以通過處理代碼區(qū)域632而改變。例如,配置成響應(yīng)于非普遍條件的發(fā)生而被執(zhí)行的指令可以從代碼區(qū)域632中被移除,并且放置在指令序列622的其他地方。
[0052]經(jīng)過專業(yè)化的代碼區(qū)域632不包括任何比較和分支指令。經(jīng)過專業(yè)化的代碼區(qū)域632是由檢查點(diǎn)指令640和提交指令650來定義的。在檢查點(diǎn)指令640和提交指令650之間,在代碼區(qū)域632中插入異常生成指令642、644、646的序列。在說明性示例中,異常生成指令642、644、646包括布爾或按位邏輯指令(642)、算術(shù)函數(shù)(644)、以及異常引發(fā)指令646。
[0053]更具體地,在說明性示例中,使用異或(XOR)函數(shù)以比較存儲(chǔ)在寄存器rl和r2中的數(shù)據(jù)。如果存儲(chǔ)在rl和r2中的數(shù)據(jù)相等,則XOR函數(shù)的結(jié)果將是零并且數(shù)值零將被存儲(chǔ)在rl中。相加函數(shù)(例如,ADD)將rl的值加到最大允許整數(shù)(例如,$INT_MAX)。如果rl的值是非零的任意值,將設(shè)置溢出標(biāo)志,因?yàn)閞l和$INT_MAX的總和將大于最大允許整 數(shù)。
[0054]異常引發(fā)指令(例如,INTO)引發(fā)異常,如果設(shè)置了溢出標(biāo)志,則調(diào)用異常處理程序236。如果沒有設(shè)置溢出標(biāo)志,則存儲(chǔ)在寄存器rl和r2中的數(shù)據(jù)相等,程序流無中斷地并且沒有分支地繼續(xù)至被優(yōu)化用于普遍發(fā)生的條件(在這個(gè)示例中,即rl和r2相等)的指令序列。例如,在一些實(shí)施例中,如果沒有設(shè)置溢出標(biāo)志,可以發(fā)布NOP (沒有操作被執(zhí)行)指令。跟隨用于普遍發(fā)生的條件的指令的執(zhí)行,程序流進(jìn)行到提交指令650。
[0055]如果設(shè)置了溢出標(biāo)志,從而表明已經(jīng)滿足了非普遍發(fā)生的條件,則異常處理器236可以被配置以便回滾事務(wù)和/或?qū)⒊绦蛄髦囟ㄏ虻皆诜瞧毡榘l(fā)生的條件的情況下將被執(zhí)行的指令的位置,或者中止該事務(wù)。
[0056]盡管在附圖和以上描述中示出和詳細(xì)描述了本公開,但這些示出和描述在性質(zhì)上應(yīng)視為是示例性而不是限制性的,應(yīng)當(dāng)理解的是,只是顯示和描述了說明性實(shí)施例,并且期望在本公開的精神內(nèi)的所有改變和修改都受到保護(hù)。此外,雖然本公開的各方面已經(jīng)在基于硬件的事務(wù)性存儲(chǔ)器系統(tǒng)的上下文中進(jìn)行了描述,但是可以理解的是,各種方面有其他的應(yīng)用,例如,任何在其中期望針對(duì)一個(gè)或多個(gè)普遍發(fā)生的條件對(duì)程序代碼進(jìn)行專業(yè)化的應(yīng)用,其中事務(wù)性存儲(chǔ)器系統(tǒng)的特征或其他隱式地轉(zhuǎn)移異??刂频钠渌到y(tǒng)是可用的(例如,基于硬件和/或軟件的事務(wù)系統(tǒng))。這樣的應(yīng)用可以包括,例如編譯器、系統(tǒng)或應(yīng)用軟件、和/或數(shù)據(jù)庫系統(tǒng)。
【權(quán)利要求】
1.一種方法,包括: 在執(zhí)行過程中分析計(jì)算機(jī)指令序列,所述計(jì)算機(jī)指令序列包括響應(yīng)于滿足普遍發(fā)生的條件而由事務(wù)性存儲(chǔ)器系統(tǒng)可執(zhí)行的至少一條第一指令;以及 在所述計(jì)算機(jī)指令序列中插入至少一條無分支指令,所述無分支指令被配置以便判定所述普遍發(fā)生的條件是否被滿足,以及響應(yīng)于沒有滿足所述普遍發(fā)生的條件而連接所述事務(wù)性存儲(chǔ)器系統(tǒng)的異常處理特征。
2.如權(quán)利要求1所述的方法,包括在所述計(jì)算機(jī)指令序列中識(shí)別出至少一條第二指令,響應(yīng)于沒有滿足所述普遍發(fā)生的條件,所述至少一條第二指令是可執(zhí)行的,以及將所述至少一條第二指令與至少一條異常生成指令相關(guān)聯(lián),所述異常生成指令被配置以便響應(yīng)于沒有滿足所述普遍發(fā)生的條件而調(diào)用所述事務(wù)性存儲(chǔ)器系統(tǒng)的所述異常處理特征。
3.如權(quán)利要求1所述的方法,包括從所述計(jì)算機(jī)指令序列中移除所述至少一條第二指令。
4.如權(quán)利要求1所述的方法,包括針對(duì)所述普遍發(fā)生的條件優(yōu)化所述至少一條第一指令。
5.如權(quán)利要求1所述的方法,包括在所述計(jì)算機(jī)指令序列中插入所述至少一條無分支指令來代替比較和分支指令。
6.如權(quán)利要求1所述 的方法,包括在所述至少一條無分支指令中判定存儲(chǔ)器寄存器是否保存具體值。
7.如權(quán)利要求6所述的方法,包括判定所述具體值是否被標(biāo)記,以及如果所述具體值被標(biāo)記,則屏蔽與所述具體值相關(guān)聯(lián)的標(biāo)記位。
8.如權(quán)利要求1所述的方法,包括在所述至少一條無分支指令中判定指針是否與具體存儲(chǔ)器地址相關(guān)聯(lián)。
9.如權(quán)利要求1所述的方法,包括在所述至少一條無分支指令中判定一段數(shù)據(jù)是否具有具體值。
10.如權(quán)利要求1所述的方法,包括在所述至少一條無分支指令中判定行程計(jì)數(shù)是否具有具體值。
11.如權(quán)利要求1所述的方法,包括在所述至少一條無分支指令中調(diào)用至少一條異常處理指令,以將所述計(jì)算機(jī)指令序列的執(zhí)行回滾到檢查點(diǎn)或中止指令序列的執(zhí)行。
12.如權(quán)利要求1所述的方法,包括響應(yīng)于沒有滿足所述普遍發(fā)生的條件而調(diào)用至少一條異常處理指令,以及響應(yīng)于調(diào)用所述至少一條異常處理指令而執(zhí)行未優(yōu)化過的指令。
13.如權(quán)利要求1所述的方法,包括在所述計(jì)算機(jī)指令序列中的所述至少一條第一指令之前插入所述至少一條無分支指令。
14.如權(quán)利要求1所述的方法,包括定義所述計(jì)算機(jī)指令序列的至少一條指令作為事務(wù),所述事務(wù)被配置用于由所述事務(wù)性存儲(chǔ)器系統(tǒng)通過在所述計(jì)算機(jī)指令序列中插入檢查點(diǎn)指令和提交指令來執(zhí)行。
15.如權(quán)利要求1所述的方法,包括響應(yīng)于沒有滿足所述普遍發(fā)生的條件,連接基于硬件的事務(wù)性存儲(chǔ)器系統(tǒng)和基于軟件的事務(wù)性存儲(chǔ)器系統(tǒng)中的至少一個(gè)。
16.一種計(jì)算設(shè)備,包括: 至少一個(gè)處理器;以及耦合到所述至少一個(gè)處理器的計(jì)算機(jī)電路,所述計(jì)算機(jī)電路被布置以使得所述至少一個(gè)處理器執(zhí)行權(quán)利要求1-15所述的方法。
17.至少一種計(jì)算機(jī)可訪問介質(zhì),其包括多條指令,所述多條指令響應(yīng)于被執(zhí)行而導(dǎo)致計(jì)算設(shè)備執(zhí)行權(quán)利要求1-15所述的方法。
18.—種方法,包括: 識(shí)別計(jì)算機(jī)指令序列作為事務(wù),所述事務(wù)被配置用于由計(jì)算設(shè)備的事務(wù)性存儲(chǔ)器系統(tǒng)來執(zhí)行,所述事務(wù)由檢查點(diǎn)指令和提交指令定義,所述事務(wù)包括:響應(yīng)于滿足普遍發(fā)生的條件而能夠執(zhí)行的至少一條第一指令,以及響應(yīng)于沒有滿足普遍發(fā)生的條件而能夠執(zhí)行的至少一條第二指令; 在指令序列中插入至少一條異常生成指令,所述至少一條異常生成指令被布置以允許所述至少一條第一指令不帶任何分支地執(zhí)行,以及被配置以便響應(yīng)于沒有滿足所述普遍發(fā)生的條件而調(diào)用所述事務(wù)性存儲(chǔ)器系統(tǒng)的異常處理特征;以及 從所述事務(wù)中移除所述至少一條第二指令。
19.如權(quán)利要求18所述的方法,被配置以響應(yīng)于滿足所述普遍發(fā)生的條件而執(zhí)行至少一條經(jīng)過優(yōu)化的指令,以及響應(yīng)于沒有滿足所述普遍發(fā)生的條件而將所述事務(wù)的執(zhí)行回滾到所述檢查點(diǎn)以及 執(zhí)行至少一條未經(jīng)過優(yōu)化的指令。
20.一種計(jì)算設(shè)備,包括: 至少一個(gè)處理器;以及 耦合到所述至少一個(gè)處理器的計(jì)算機(jī)電路,所述計(jì)算機(jī)電路被布置以使得所述至少一個(gè)處理器執(zhí)行權(quán)利要求18-19所述的方法。
21.至少一種計(jì)算機(jī)可訪問介質(zhì),其包括多條指令,所述多條指令響應(yīng)于被執(zhí)行而導(dǎo)致計(jì)算設(shè)備執(zhí)行權(quán)利要求18-19所述的方法。
22.—種方法,包括: 分析計(jì)算機(jī)指令序列; 執(zhí)行代碼專業(yè)化例程,所述代碼專業(yè)化例程被配置以便識(shí)別所述計(jì)算機(jī)指令序列的至少一個(gè)代碼區(qū)域,所述至少一個(gè)代碼區(qū)域作為事務(wù)由所述計(jì)算設(shè)備的事務(wù)性存儲(chǔ)器系統(tǒng)執(zhí)行,以及,對(duì)一個(gè)或多個(gè)所述代碼區(qū)域: 在所述代碼區(qū)域中插入至少一條無分支指令,所述無分支指令被配置以判定是否滿足普遍發(fā)生的條件;以及 在所述代碼區(qū)域中插入至少一條異常生成指令,所述異常生成指令被配置以響應(yīng)于沒有滿足所述普遍發(fā)生的條件而引發(fā)異常。
23.如權(quán)利要求22所述的方法,其中所述至少一條無分支指令包括按位邏輯操作和算術(shù)操作。
24.如權(quán)利要求23所述的方法,其中所述按位邏輯操作是異或(XOR)指令以及所述至少一條異常生成指令包括設(shè)定溢出標(biāo)志。
25.一種計(jì)算設(shè)備,包括: 至少一個(gè)處理器;以及 耦合到所述至少一個(gè)處理器的計(jì)算機(jī)電路,所述計(jì)算機(jī)電路被布置以使得所述至少一個(gè)處理器執(zhí)行權(quán)利要求22-24所述的方法。
26.至少一種計(jì)算機(jī)可訪問介質(zhì),其包括多條指令,所述多條指令響應(yīng)于被執(zhí)行而導(dǎo)致計(jì)算設(shè)備執(zhí)行權(quán)利要求 22-24所述的方法。
【文檔編號(hào)】G06F9/305GK103999036SQ201180075572
【公開日】2014年8月20日 申請(qǐng)日期:2011年12月16日 優(yōu)先權(quán)日:2011年12月16日
【發(fā)明者】A·克里希納斯瓦米, D·M·萊弗里 申請(qǐng)人:英特爾公司