使用處理器的轉(zhuǎn)換后備緩沖器的基于客戶指令到本機(jī)指令范圍的映射的制作方法
【專利摘要】一種用于轉(zhuǎn)譯用于處理器的指令的方法。該方法包括訪問包括多個(gè)客戶分支指令的多個(gè)客戶指令以及將多個(gè)客戶指令匯編成客戶指令塊。將客戶指令塊轉(zhuǎn)譯成對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊。在本機(jī)高速緩存中存儲(chǔ)本機(jī)轉(zhuǎn)換塊。在轉(zhuǎn)換后備緩沖器中存儲(chǔ)客戶指令塊到對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的映射。響應(yīng)于對(duì)于客戶指令的后續(xù)請(qǐng)求,對(duì)轉(zhuǎn)換后備緩沖器編索引以確定命中是否發(fā)生,其中映射指示客戶指令是否在本機(jī)高速緩存中具有對(duì)應(yīng)的轉(zhuǎn)換的本機(jī)指令。響應(yīng)于命中來轉(zhuǎn)發(fā)轉(zhuǎn)換的本機(jī)指令用于執(zhí)行。
【專利說明】使用處理器的轉(zhuǎn)換后備緩沖器的基于客戶指令到本機(jī)指令范圍的映射
[0001]本申請(qǐng)要求對(duì)Mohammad A.Abdallah于2011年I月27日提交的名稱為“GUESTINSTRUCTION TO NATIVE INSTRUCTION RANGE BASED MAPPING USING A CONVERSION LOOKASIDE BUFFER OF A PROCESSOR”的共同未決、共同轉(zhuǎn)讓的第61/436962號(hào)美國(guó)臨時(shí)專利申請(qǐng)的優(yōu)先權(quán),將該專利申請(qǐng)的全部并入于此。
【技術(shù)領(lǐng)域】
[0002]本發(fā)明總體上涉及數(shù)字計(jì)算機(jī)系統(tǒng)、更具體地涉及一種用于轉(zhuǎn)譯包括指令序列的指令的系統(tǒng)和方法。
【背景技術(shù)】
[0003]許多類型的數(shù)字計(jì)算機(jī)系統(tǒng)利用代碼變換/轉(zhuǎn)譯或者仿真以實(shí)現(xiàn)基于軟件的功能。通常,轉(zhuǎn)譯和仿真均涉及到檢查軟件指令的程序并且執(zhí)行軟件指令規(guī)定的功能和動(dòng)作,即使指令對(duì)計(jì)算機(jī)系統(tǒng)而言不是“本機(jī)”的。在轉(zhuǎn)譯的情況下,將非本機(jī)指令轉(zhuǎn)譯成被設(shè)計(jì)用于在計(jì)算機(jī)系統(tǒng)的硬件上執(zhí)行的本機(jī)指令的形式。示例包括現(xiàn)有技術(shù)的轉(zhuǎn)譯軟件和/或硬件與工業(yè)標(biāo)準(zhǔn)x86應(yīng)用一起操作以使應(yīng)用程序能夠在非x86或者備選計(jì)算機(jī)架構(gòu)上執(zhí)行的轉(zhuǎn)譯軟件和/或硬件。一般而言,轉(zhuǎn)譯過程利用大量處理器周期,因此帶來大量開銷。通過該開銷帶來的性能代償可明顯侵蝕由轉(zhuǎn)譯過程提供的任何好處。
[0004]對(duì)解決這一問題的一個(gè)嘗試涉及到實(shí)時(shí)編譯的使用。也稱為動(dòng)態(tài)轉(zhuǎn)譯的實(shí)時(shí)編譯(Just-1n-TimejJIT)是一種用于提高計(jì)算機(jī)程序的運(yùn)行期性能的方法。傳統(tǒng)上,計(jì)算機(jī)程序具有解譯模式或者JIT(實(shí)時(shí))編譯/轉(zhuǎn)譯模式兩個(gè)運(yùn)行期變換。解譯是涉及對(duì)逐個(gè)指令進(jìn)行解碼以用比JIT編譯更低的開銷將來自客戶的代碼變換成本機(jī),但是它產(chǎn)生更低性能的變換的代碼。此外,解譯用每個(gè)指令來調(diào)用。JIT編譯器或者轉(zhuǎn)譯器代表一種與解譯形成對(duì)比的方式。就JIT轉(zhuǎn)換而言,它通常具有比解譯器更高的開銷,但是它產(chǎn)生更優(yōu)化的轉(zhuǎn)譯的代碼和具有更高執(zhí)行性能的轉(zhuǎn)譯的代碼。在多數(shù)仿真實(shí)現(xiàn)中,在第一次需要轉(zhuǎn)譯時(shí),將它作為解譯來完成以減少開銷,在多次看見(執(zhí)行)代碼之后,調(diào)用JIT轉(zhuǎn)譯以創(chuàng)建更優(yōu)化的轉(zhuǎn)譯。
[0005]然而代碼變換過程仍然存在許多問題。JIT編譯過程本身對(duì)處理器帶來大量開銷。這可能引起在應(yīng)用程序的啟動(dòng)中的大延遲。此外,在系統(tǒng)存儲(chǔ)器中管理變換的代碼的存儲(chǔ)引起往返系統(tǒng)存儲(chǔ)器的多次行程并且包括存儲(chǔ)器映射和分配管理開銷,這帶來明顯延時(shí)懲罰。另外,對(duì)應(yīng)用程序中的執(zhí)行區(qū)域的變化涉及到在系統(tǒng)存儲(chǔ)器和代碼高速緩存中對(duì)變換的代碼重定位并且從暫存區(qū)開始該過程。解譯過程涉及到比JIT轉(zhuǎn)譯更少的開銷,但是它的開銷對(duì)每個(gè)指令都被重復(fù),因此仍然相對(duì)顯著。代碼即使不是完全未被優(yōu)化也是優(yōu)化不夠的。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的實(shí)施例實(shí)現(xiàn)一種使客戶指令到本機(jī)指令轉(zhuǎn)換過程的基于硬件的加速成為可能的算法和裝置。
[0007]在一個(gè)實(shí)施例中,實(shí)現(xiàn)本發(fā)明為一種用于轉(zhuǎn)譯用于處理器的指令的方法。該方法包括訪問包括多個(gè)客戶分支指令的多個(gè)客戶指令以及將多個(gè)客戶指令匯編成客戶指令塊。將客戶指令塊轉(zhuǎn)換成對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊。在本機(jī)高速緩存中存儲(chǔ)本機(jī)轉(zhuǎn)換塊。在轉(zhuǎn)換后備緩沖器(look aside buffer)中存儲(chǔ)客戶指令塊到對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的映射。響應(yīng)于對(duì)于客戶指令的后續(xù)請(qǐng)求,對(duì)轉(zhuǎn)換后備緩沖器編索引以確定命中是否發(fā)生,其中映射指示客戶指令是否在本機(jī)高速緩存中具有對(duì)應(yīng)的轉(zhuǎn)換的本機(jī)指令。響應(yīng)于命中來轉(zhuǎn)發(fā)轉(zhuǎn)換的本機(jī)指令用于執(zhí)行。
[0008]前文是
【發(fā)明內(nèi)容】
并且因此必然地包含細(xì)節(jié)的簡(jiǎn)化、概括和省略;因而,本領(lǐng)域技術(shù)人員將理解,該
【發(fā)明內(nèi)容】
僅為說明性而未旨在于以任何方式進(jìn)行限制。如僅由權(quán)利要求限定的、本發(fā)明的其它方面、發(fā)明特征和優(yōu)點(diǎn)將在以下闡述的非限制具體描述中變得顯而易見。
【專利附圖】
【附圖說明】
[0009]本發(fā)明在附圖的示圖中通過示例而不是限制來圖示,并且在附圖中,相似標(biāo)號(hào)指代相似要素。
[0010]圖1示出由本發(fā)明的一個(gè)實(shí)施例進(jìn)行操作的示例指令序列。
[0011]圖2示出描繪根據(jù)本發(fā)明的一個(gè)實(shí)施例的基于塊的轉(zhuǎn)譯過程的圖,其中將客戶指令塊轉(zhuǎn)換成本機(jī)轉(zhuǎn)換塊。
[0012]圖3示出圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的將客戶指令塊的每個(gè)指令轉(zhuǎn)換成本機(jī)轉(zhuǎn)換塊的對(duì)應(yīng)的本機(jī)指令的方式的圖。
[0013]圖4示出圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的與本機(jī)轉(zhuǎn)換塊的處置一起處理遠(yuǎn)分支的方式的圖。
[0014]圖5示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例硬件加速轉(zhuǎn)換系統(tǒng)的圖,該圖圖示在高速緩存內(nèi)存儲(chǔ)客戶指令塊及其對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的方式。
[0015]圖6示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的硬件加速轉(zhuǎn)換系統(tǒng)的更具體示例。
[0016]圖7示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的具有輔助基于軟件的加速轉(zhuǎn)換流水線的硬件加速轉(zhuǎn)換系統(tǒng)的示例。
[0017]圖8示出圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的CLB與代碼高速緩存和在存儲(chǔ)器內(nèi)存儲(chǔ)的客戶指令到本機(jī)指令映射結(jié)合工作的方式的示例流程圖。
[0018]圖9示出圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的物理存儲(chǔ)棧代碼高速緩存實(shí)現(xiàn)方式和客戶指令到本機(jī)指令映射的示例流程圖。
[0019]圖10示出描繪根據(jù)本發(fā)明的一個(gè)實(shí)施例的硬件加速轉(zhuǎn)換系統(tǒng)的附加示例細(xì)節(jié)的圖。
[0020]圖1lA示出通過本發(fā)明的實(shí)施例實(shí)現(xiàn)的示例模式匹配過程的圖。
[0021]圖1lB示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的基于SMD寄存器的模式匹配過程的圖。
[0022]圖12示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的統(tǒng)一寄存器文件的圖。
[0023]圖13示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的支持推測(cè)架構(gòu)狀態(tài)和瞬態(tài)架構(gòu)狀態(tài)的統(tǒng)一陰影寄存器文件和流水線架構(gòu)1300的圖。
[0024]圖14示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括雙范圍使用的第二使用模型的圖。
[0025]圖15示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的第三使用模型的圖,該第三使用模型包括瞬態(tài)上下文切換而無需在從瞬態(tài)上下文返回時(shí)保存和恢復(fù)先前上下文。
[0026]圖16示出描繪根據(jù)本發(fā)明的一個(gè)實(shí)施例的指令序列中的異常是因?yàn)樾枰糜诤罄m(xù)代碼的轉(zhuǎn)譯的情況的圖。
[0027]圖17示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的第四使用模型的圖,該第四使用模型包括瞬態(tài)上下文切換而無需在從瞬態(tài)上下文返回時(shí)保存和恢復(fù)先前上下文。
[0028]圖18示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例微處理器流水線的圖。
【具體實(shí)施方式】
[0029]雖然已經(jīng)與一個(gè)實(shí)施例結(jié)合描述本發(fā)明,但是本發(fā)明未旨在局限于這里闡述的具體形式。與之相反,它旨在覆蓋諸如能夠合理包含于如由所附權(quán)利要求限定的本發(fā)明的范圍內(nèi)的備選、修改和等同形式。
[0030]在以下具體描述中,已經(jīng)闡述許多具體細(xì)節(jié)、諸如具體方法順序、結(jié)構(gòu)、單元和連接。然而將理解,無需利用這些和其它具體細(xì)節(jié)以實(shí)現(xiàn)本發(fā)明的實(shí)施例。在其它境況中,已經(jīng)省略或者尚未具體描述公知結(jié)構(gòu)、單元或者連接以免不必要地使本描述混淆。
[0031]在說明書內(nèi)對(duì)“一個(gè)實(shí)施例”或者“實(shí)施例”的引用旨在于指示與該實(shí)施例結(jié)合描述的特定特征、結(jié)構(gòu)或者特性包含于本發(fā)明的至少一個(gè)實(shí)施例中。在說明書內(nèi)的各處出現(xiàn)的短語“在一個(gè)實(shí)施例中”未必都指代相同實(shí)施例,也并非是與其它實(shí)施例互斥的單獨(dú)或者備選實(shí)施例。另外,描述可以被一些實(shí)施例而未被其它實(shí)施例表現(xiàn)的各種特征。類似地,描述可以是對(duì)于一些實(shí)施例、但是并非其它實(shí)施例的各種要求。
[0032]以過程、步驟、邏輯塊、處理和對(duì)計(jì)算機(jī)存儲(chǔ)器內(nèi)的數(shù)據(jù)位的操作的其它符號(hào)表示形式呈現(xiàn)以下具體描述的一些部分。這些描述和表示形式是在數(shù)據(jù)處理領(lǐng)域中的技術(shù)人員用來最為有效地向本領(lǐng)域中的其他技術(shù)人員傳達(dá)他們的工作的實(shí)質(zhì)的手段。過程、計(jì)算機(jī)執(zhí)行的步驟、邏輯塊、處理等在這里以及總體上被理解為是導(dǎo)致所期望結(jié)果的步驟或者指令的自一致序列。步驟是需要對(duì)物理量進(jìn)行物理操控的那些步驟。這些量盡管未必但是通常采用計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的電信號(hào)或者磁信號(hào)的形式,并且能夠在計(jì)算機(jī)系統(tǒng)中進(jìn)行存儲(chǔ)、傳送、組合、比較和以其他方式進(jìn)行操控。有時(shí)主要出于普遍使用的原因而將這些信號(hào)稱為位、數(shù)值、單元、符號(hào)、字符、術(shù)語、數(shù)字等已經(jīng)證實(shí)是便利的。
[0033]然而應(yīng)當(dāng)謹(jǐn)記,所有這些和相似術(shù)語將與適當(dāng)物理量關(guān)聯(lián)并且僅為應(yīng)用于這些量的方便標(biāo)簽。除非被另外特別指出為從以下討論是顯而易見的,否則要意識(shí)到,貫穿本發(fā)明利用諸如“處理”或者“訪問”或者“寫入”或者“存儲(chǔ)”或者“重復(fù)”等術(shù)語的討論指代計(jì)算機(jī)系統(tǒng)或者相似電子計(jì)算設(shè)備的動(dòng)作和處理,該電子計(jì)算設(shè)備對(duì)計(jì)算機(jī)系統(tǒng)的寄存器和存儲(chǔ)器以及其它計(jì)算機(jī)可讀介質(zhì)內(nèi)的表示為物理(電子)量的數(shù)據(jù)進(jìn)行操控和變換成計(jì)算機(jī)系統(tǒng)存儲(chǔ)器或者寄存器或者其它這樣的信息存儲(chǔ)、傳輸或者顯示設(shè)備內(nèi)的相似地表示為物理量的其它數(shù)據(jù)。
[0034]本發(fā)明的實(shí)施例通過大量加速將來自客戶指令架構(gòu)的客戶指令變換成本機(jī)指令架構(gòu)的本機(jī)指令用于在本機(jī)處理器上執(zhí)行的過程來工作。本發(fā)明的實(shí)施例利用基于硬件的單元以實(shí)現(xiàn)用于轉(zhuǎn)換過程的硬件加速??蛻糁噶羁梢詠碜远鄠€(gè)不同指令架構(gòu)。示例架構(gòu)包括Java或者JavaScript、x86、MIPS、SPARC等。將這些客戶指令迅速轉(zhuǎn)換成本機(jī)指令并且流水線地傳到本機(jī)處理器硬件用于迅速執(zhí)行。這與傳統(tǒng)的由軟件控制的轉(zhuǎn)換過程比較提供高得多的性能水平。
[0035]在一個(gè)實(shí)施例中,本發(fā)明實(shí)現(xiàn)可以使用多個(gè)不同指令架構(gòu)作為輸入的靈活轉(zhuǎn)換過程。在這樣的實(shí)施例中,實(shí)現(xiàn)處理器的前端使得它可以由軟件控制而又利用硬件加速的轉(zhuǎn)換處理以提供高得多的性能水平。這樣的實(shí)現(xiàn)提供多個(gè)方面的好處。可以處理和轉(zhuǎn)換不同客戶架構(gòu)而又各自接收硬件加速的好處以享受高得多的性能水平。軟件控制的前端可以針對(duì)在處理器上執(zhí)行的應(yīng)用程序提供大程度的靈活性。硬件加速可以達(dá)到接近本機(jī)硬件速度的目的用于執(zhí)行客戶應(yīng)用程序的客戶指令。在以下描述中,圖1至圖4示出本發(fā)明的實(shí)施例處置客戶指令序列并且處置在那些客戶指令序列內(nèi)的近分支和遠(yuǎn)分支的方式。圖5示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例硬件加速轉(zhuǎn)換處理系統(tǒng)的概況。
[0036]圖1示出由本發(fā)明的一個(gè)實(shí)施例進(jìn)行操作的示例指令序列。如圖1中所描繪的,指令序列100包括從圖1的頂部開始進(jìn)行到底部的16個(gè)指令。如圖1中可見,序列100包括四個(gè)分支指令101-104。
[0037]本發(fā)明的實(shí)施例的一個(gè)目標(biāo)是將整組指令作為單個(gè)原子單位來處理。這一原子單位稱為塊。指令塊可以跨越圖1中所示16個(gè)指令良好延伸。在一個(gè)實(shí)施例中,塊將包括足夠指令以填充固定大小(例如64字節(jié)、128字節(jié)、256字節(jié)等)或者直至遇到退出條件。在一個(gè)實(shí)施例中,用于結(jié)束指令塊的退出條件是遇到遠(yuǎn)分支指令。如這里在實(shí)施例的描述中所用,遠(yuǎn)分支是指目標(biāo)地址駐留于當(dāng)前指令塊以外的分支指令。換言之,在給定的客戶指令塊內(nèi),遠(yuǎn)分支具有駐留在某一其它塊中或者在給定的指令塊以外的某一其它指令序列中的目標(biāo)。類似地,近分支是指目標(biāo)地址駐留于當(dāng)前指令塊以內(nèi)的分支指令。此外,應(yīng)當(dāng)注意,本機(jī)指令塊可以包含多個(gè)客戶遠(yuǎn)分支。在以下討論中進(jìn)一步描述這些術(shù)語。
[0038]圖2示出描繪根據(jù)本發(fā)明的一個(gè)實(shí)施例的基于塊的轉(zhuǎn)換過程的圖,其中將客戶指令塊轉(zhuǎn)換成本機(jī)轉(zhuǎn)換塊。如圖2中所圖示,示出將多個(gè)客戶指令塊201轉(zhuǎn)換成對(duì)應(yīng)的多個(gè)本機(jī)轉(zhuǎn)換塊202。
[0039]本發(fā)明的實(shí)施例通過將客戶指令塊的指令轉(zhuǎn)換成本機(jī)轉(zhuǎn)換塊的對(duì)應(yīng)的指令來工作。塊201中的每個(gè)塊由客戶指令組成。如以上描述的那樣,這些客戶指令可以來自多個(gè)不同客戶指令架構(gòu)(例如Java或者JavaScript、x86、MIPS、SPARC等)??梢詫⒍鄠€(gè)客戶指令塊轉(zhuǎn)換成一個(gè)或者多個(gè)對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊。這一轉(zhuǎn)換在每指令基礎(chǔ)上發(fā)生。
[0040]圖2也圖示基于分支預(yù)測(cè)將客戶指令塊匯編成序列的方式。這一屬性使本發(fā)明的實(shí)施例能夠基于遠(yuǎn)分支的預(yù)測(cè)結(jié)果來匯編客戶指令序列。基于遠(yuǎn)分支預(yù)測(cè),從多個(gè)客戶指令塊匯編客戶指令序列并且轉(zhuǎn)換成對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊。以下在圖3和圖4中進(jìn)一步描述這一方面。
[0041]圖3示出圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的將客戶指令塊的每個(gè)指令轉(zhuǎn)換成本機(jī)轉(zhuǎn)換塊的對(duì)應(yīng)的本機(jī)指令的方式的圖。如圖3中所示,客戶指令塊駐留于客戶指令緩沖器301內(nèi)。類似地,本機(jī)轉(zhuǎn)換塊駐留于本機(jī)指令緩沖器302內(nèi)。
[0042]圖3示出本發(fā)明的實(shí)施例的屬性,其中將客戶分支指令的目標(biāo)地址轉(zhuǎn)換成本機(jī)分支指令的目標(biāo)地址。例如客戶指令分支各自包括標(biāo)識(shí)特定分支的目標(biāo)地址的偏移。在圖3中示出這一偏移為客戶偏移或者G_偏移。在轉(zhuǎn)換客戶指令時(shí),這一偏移經(jīng)常由于本機(jī)指令為了產(chǎn)生對(duì)應(yīng)的客戶指令的功能而需要的不同長(zhǎng)度或者序列而不同。例如客戶指令與它們的對(duì)應(yīng)的本機(jī)指令比較可以是不同長(zhǎng)度。因此,轉(zhuǎn)換過程通過計(jì)算對(duì)應(yīng)的本機(jī)偏移來補(bǔ)償這一差異。在圖3中不出這一偏移為本機(jī)偏移或者N_偏移。
[0043]應(yīng)當(dāng)注意,對(duì)稱為近分支的、具有在客戶指令塊內(nèi)的目標(biāo)的分支不進(jìn)行預(yù)測(cè)、因此對(duì)指令序列的流程不進(jìn)行改變。
[0044]圖4示出圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的與本機(jī)轉(zhuǎn)換塊的處置一起處理遠(yuǎn)分支的方式的圖。如圖4中所圖示,描繪客戶指令為存儲(chǔ)器401中的客戶指令序列。類似地,描繪本機(jī)指令為存儲(chǔ)器402中的本機(jī)指令序列。
[0045]在一個(gè)實(shí)施例中,客戶指令塊和本機(jī)指令塊二者的每個(gè)指令塊以遠(yuǎn)分支作為結(jié)束(即使本機(jī)塊可以包含多個(gè)客戶遠(yuǎn)分支)。如以上描述的那樣,塊將包括足夠指令以填充固定大小(例如64字節(jié)、128字節(jié)、256字節(jié)等)或者直至退出條件(諸如例如遇到上個(gè)客戶遠(yuǎn)分支指令)。如果已經(jīng)處理多個(gè)客戶指令以匯編客戶指令塊并且尚未遇到遠(yuǎn)分支,則插入客戶遠(yuǎn)分支以結(jié)束塊。這一遠(yuǎn)分支僅為向下一后續(xù)塊的跳轉(zhuǎn)。這保證指令塊以如下分支作為結(jié)束,該分支通向另一本機(jī)指令塊或者在存儲(chǔ)器中的另一客戶指令序列。此外,如圖4中所示,塊可以在它的指令序列內(nèi)包括未駐留于塊的末端的客戶遠(yuǎn)分支。這由客戶指令遠(yuǎn)分支411和對(duì)應(yīng)的本機(jī)指令客戶遠(yuǎn)分支412示出。
[0046]在圖4的實(shí)施例中,預(yù)測(cè)遠(yuǎn)分支411為取得。因此,指令序列向遠(yuǎn)分支411的目標(biāo)跳轉(zhuǎn),該目標(biāo)是客戶指令F。類似地,在對(duì)應(yīng)的本機(jī)指令中,遠(yuǎn)分支412跟隨有本機(jī)指令F。對(duì)近分支不預(yù)測(cè)。因此,它們不以與遠(yuǎn)分支相同的方式改變指令序列。
[0047]以這一方式,本發(fā)明的實(shí)施例生成轉(zhuǎn)換塊的蹤跡,其中每個(gè)塊包括多個(gè)(例如3-4個(gè))遠(yuǎn)分支。這一蹤跡基于客戶遠(yuǎn)分支預(yù)測(cè)。
[0048]在一個(gè)實(shí)施例中,在本機(jī)轉(zhuǎn)換塊內(nèi)的遠(yuǎn)分支包括客戶地址,該客戶地址是用于反向分支路徑的相反地址。如以上描述的那樣,基于遠(yuǎn)分支的預(yù)測(cè)來生成指令序列。直至執(zhí)行對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊才知道預(yù)測(cè)的真結(jié)果。因此,一旦檢測(cè)到假預(yù)測(cè),就檢查假遠(yuǎn)分支以獲得用于反向分支路徑的相反客戶地址。轉(zhuǎn)換過程然后從相反客戶地址繼續(xù),這現(xiàn)在是真分支路徑。以這一方式,本發(fā)明的實(shí)施例將包括的相反客戶地址用于反向分支路徑以從遠(yuǎn)分支的預(yù)測(cè)結(jié)果為假的場(chǎng)合來恢復(fù)。因此,如果遠(yuǎn)分支預(yù)測(cè)結(jié)果為假,則過程知道去往何處以發(fā)現(xiàn)正確客戶指令。類似地,如果遠(yuǎn)分支預(yù)測(cè)結(jié)果為真,則忽略相反客戶地址。應(yīng)當(dāng)注意,如果正確地預(yù)測(cè)在本機(jī)指令塊內(nèi)的遠(yuǎn)分支,則無需用于它們的目標(biāo)塊的CLB中的條目點(diǎn)。然而,一旦發(fā)生錯(cuò)失預(yù)測(cè),就需要在CLB中插入用于目標(biāo)塊的新條目。執(zhí)行這一功能以保存CLB容量為目標(biāo)。
[0049]圖5示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例硬件加速轉(zhuǎn)換系統(tǒng)500的圖,該圖圖示在高速緩存內(nèi)存儲(chǔ)客戶指令塊及其對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的方式。如圖5中圖示,轉(zhuǎn)換后備緩沖器506用來高速緩存在客戶與本機(jī)塊之間映射的地址;從而通過可用于處理器508的低延時(shí)訪問最頻繁遇到的本機(jī)轉(zhuǎn)換塊。
[0050]圖5的圖圖示在轉(zhuǎn)換后備緩沖器506這一高速低延時(shí)高速緩存內(nèi)維持頻繁遇到的本機(jī)轉(zhuǎn)換塊的方式。圖5中所描述的部件實(shí)現(xiàn)硬件加速轉(zhuǎn)換處理以提供高得多的性能水平。[0051]客戶提取邏輯單元502作為從系統(tǒng)存儲(chǔ)器501提取客戶指令的基于硬件的客戶指令提取單元來工作。給定的應(yīng)用程序的客戶指令駐留于系統(tǒng)存儲(chǔ)器501內(nèi)。在啟動(dòng)程序時(shí),基于硬件的客戶提取邏輯單元502開始將客戶指令預(yù)提取到客戶提取緩沖器503中。客戶提取緩沖器507積累客戶指令并且將它們匯編成客戶指令塊。通過使用轉(zhuǎn)換表504將這些客戶指令決轉(zhuǎn)換成對(duì)應(yīng)的本機(jī)轉(zhuǎn)換決。在本機(jī)轉(zhuǎn)換緩沖器505內(nèi)積累轉(zhuǎn)換的本機(jī)指令直至本機(jī)轉(zhuǎn)換塊完成。然后向本機(jī)高速緩存507傳送本機(jī)轉(zhuǎn)換塊,并且在轉(zhuǎn)換后備緩沖器506中存儲(chǔ)該映射。本機(jī)高速緩存507然后用來向處理器508饋送本機(jī)指令用于執(zhí)行。在一個(gè)實(shí)施例中,客戶提取邏輯單元502實(shí)現(xiàn)的功能由客戶提取邏輯狀態(tài)機(jī)產(chǎn)生。
[0052]隨著這一過程繼續(xù),用客戶塊到本機(jī)塊的地址映射填充轉(zhuǎn)換后備緩沖器506。轉(zhuǎn)換后備緩沖器506使用一個(gè)或者多個(gè)算法(例如最近最少使用等)以保證在緩沖器內(nèi)保持更頻繁遇到的塊映射而又從緩沖器驅(qū)逐很少遇到的塊映射。以這一方式,在轉(zhuǎn)換后備緩沖器506內(nèi)存儲(chǔ)熱門的本機(jī)轉(zhuǎn)換塊映射。此外,應(yīng)當(dāng)注意,在本機(jī)塊內(nèi)良好預(yù)測(cè)的遠(yuǎn)客戶分支無需在CLB中插入新映射,因?yàn)樗鼈兊哪繕?biāo)塊在單個(gè)映射的本機(jī)塊內(nèi)拼接、因此保存用于CLB結(jié)構(gòu)的小容量效率。另外,在一個(gè)實(shí)施例中,CLB被構(gòu)造用于僅存儲(chǔ)末端客戶到本機(jī)地址映射。這一方面也保存CLB的小容量效率。
[0053]客戶提取邏輯502查看轉(zhuǎn)換后備緩沖器506以確定是否已經(jīng)將來自客戶指令塊的地址轉(zhuǎn)換成本機(jī)轉(zhuǎn)換塊。如以上描述的那樣,本發(fā)明的實(shí)施例對(duì)于轉(zhuǎn)換處理提供硬件加速。因此,客戶提取邏輯502將在從系統(tǒng)存儲(chǔ)器501提取客戶地址用于新轉(zhuǎn)換之前查看轉(zhuǎn)換后備緩沖器506尋找預(yù)先存在的本機(jī)轉(zhuǎn)換塊映射。
[0054]在一個(gè)實(shí)施例中,轉(zhuǎn)換后備緩沖器由客戶地址范圍或者由個(gè)別客戶地址來編索弓I。客戶地址范圍是已經(jīng)轉(zhuǎn)換成本機(jī)轉(zhuǎn)換塊的客戶指令塊的地址范圍。轉(zhuǎn)換后備緩沖器存儲(chǔ)的本機(jī)轉(zhuǎn)換塊映射經(jīng)由其對(duì)應(yīng)的客戶指令塊的對(duì)應(yīng)的客戶地址范圍來編索引。因此,客戶提取邏輯可以將客戶地址與轉(zhuǎn)換的塊(這些塊的映射在轉(zhuǎn)換后備緩沖器506中保持)的客戶地址范圍或者個(gè)別客戶地址進(jìn)行比較以確定預(yù)先存在的本機(jī)轉(zhuǎn)換塊是否駐留在本機(jī)高速緩存507中或者在圖6的代碼高速緩存中存儲(chǔ)的內(nèi)容內(nèi)。如果預(yù)先存在的本機(jī)轉(zhuǎn)換塊在本機(jī)高速緩存中或者在代碼高速緩存中,則從那些高速緩存向處理器直接轉(zhuǎn)發(fā)對(duì)應(yīng)的本機(jī)轉(zhuǎn)換指令。
[0055]以這一方式,熱門客戶指令塊(例如頻繁執(zhí)行的客戶指令塊)具有它們的在高速低延時(shí)轉(zhuǎn)換后備緩沖器506內(nèi)維持的對(duì)應(yīng)的熱門本機(jī)轉(zhuǎn)換塊映射。在觸及塊時(shí),適當(dāng)替換策略保證熱門塊映射保持于轉(zhuǎn)換后備緩沖器內(nèi)。因此,客戶提取邏輯502可以快速標(biāo)識(shí)先前是否已經(jīng)轉(zhuǎn)換請(qǐng)求的客戶地址并且可以向本機(jī)高速緩存507直接轉(zhuǎn)發(fā)先前轉(zhuǎn)換的本機(jī)指令用于由處理器508執(zhí)行。這些方面節(jié)省大量周期,因?yàn)槿ネ到y(tǒng)存儲(chǔ)器的行程可能需要40至50個(gè)周期或者更多個(gè)周期。這些屬性(例如CLB、客戶分支序列預(yù)測(cè)、客戶和本機(jī)分支緩沖器、先前的本機(jī)高速緩存)允許本發(fā)明的實(shí)施例的硬件加速功能達(dá)到客戶應(yīng)用程序的應(yīng)用性能在可比較本機(jī)應(yīng)用程序的應(yīng)用性能的80%至100%內(nèi)的目的。
[0056]在一個(gè)實(shí)施例中,客戶提取邏輯502獨(dú)立于來自處理器508的客戶指令請(qǐng)求來連續(xù)地預(yù)讀取客戶指令用于轉(zhuǎn)換??梢栽谙到y(tǒng)存儲(chǔ)器501中的轉(zhuǎn)換緩沖器“代碼高速緩存”內(nèi)為那些更少頻繁使用的塊積累本機(jī)轉(zhuǎn)換塊。轉(zhuǎn)換后備緩沖器506也保持最頻繁使用的映射。因此,如果請(qǐng)求的客戶地址沒有映射到轉(zhuǎn)換后備緩沖器中的客戶地址,則客戶提取邏輯可以檢查系統(tǒng)存儲(chǔ)器501以確定客戶地址是否對(duì)應(yīng)于其中存儲(chǔ)的本機(jī)轉(zhuǎn)換塊。
[0057]在一個(gè)實(shí)施例中,轉(zhuǎn)換后備緩沖器506被實(shí)現(xiàn)為高速緩存并且利用高速緩存相干性協(xié)議以維持與在更高級(jí)的高速緩存和系統(tǒng)存儲(chǔ)器501中存儲(chǔ)的大得多的轉(zhuǎn)換緩沖器的相干性。在轉(zhuǎn)換后備緩沖器506內(nèi)存儲(chǔ)的本機(jī)指令映射也向更高級(jí)的高速緩存和系統(tǒng)存儲(chǔ)器501回寫。向系統(tǒng)存儲(chǔ)器的回寫維持相干性。因此,高速緩存管理協(xié)議可以用來保證在轉(zhuǎn)換后備緩沖器506內(nèi)存儲(chǔ)熱門本機(jī)轉(zhuǎn)換塊映射并且在系統(tǒng)存儲(chǔ)器501中存儲(chǔ)冷門本機(jī)轉(zhuǎn)換映射塊。因此,在系統(tǒng)存儲(chǔ)器501中駐留大得多的形式的轉(zhuǎn)換緩沖器506。
[0058]應(yīng)當(dāng)注意,在一個(gè)實(shí)施例中,示例硬件加速轉(zhuǎn)換系統(tǒng)500可以用來實(shí)現(xiàn)多個(gè)不同虛擬存儲(chǔ)方案。例如在高速緩存內(nèi)存儲(chǔ)客戶指令塊及其對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的方式可以用來支持虛擬存儲(chǔ)方案。類似地,用來對(duì)在客戶與本機(jī)塊之間的地址映射進(jìn)行高速緩存的轉(zhuǎn)換后備緩沖器506可以用來支持虛擬存儲(chǔ)方案(例如虛擬到物理存儲(chǔ)器映射的管理)。
[0059]在一個(gè)實(shí)施例中,圖5的架構(gòu)實(shí)現(xiàn)使用如下靈活轉(zhuǎn)換過程的虛擬指令集處理器/計(jì)算機(jī),該轉(zhuǎn)換過程可以接收多個(gè)不同指令架構(gòu)作為輸入。在這樣的虛擬指令集處理器中,實(shí)現(xiàn)處理器的前端使得它可以由軟件控制而又利用硬件加速轉(zhuǎn)換處理以提供高得多的性能水平。使用這樣的實(shí)現(xiàn)方式,可以處理和轉(zhuǎn)換不同客戶架構(gòu)而又各自接收硬件加速的好處以享受高得多的性能水平。示例客戶架構(gòu)包括Java或者JavaScript、x86、MIPS、SPARC等。在一個(gè)實(shí)施例中,“客戶架構(gòu)”可以是本機(jī)指令(例如來自本機(jī)應(yīng)用程序/宏操作),并且轉(zhuǎn)換過程產(chǎn)生優(yōu)化的本機(jī)指令(例如優(yōu)化的本機(jī)指令/微操作)。軟件控制的前端可以針對(duì)在處理器上執(zhí)行的應(yīng)用程序提供大程度的靈活性。如以上描述的那樣,硬件技術(shù)對(duì)于執(zhí)行客戶應(yīng)用程序的客戶指令可以達(dá)到接近本機(jī)硬件速度的目的。
[0060]圖6示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的硬件加速轉(zhuǎn)換系統(tǒng)600的更具體示例。系統(tǒng)600以與以上描述的系統(tǒng)500基本上相同的方式執(zhí)行。然而系統(tǒng)600示出附加細(xì)節(jié),這些細(xì)節(jié)描述示例硬件加速過程的功能。
[0061]系統(tǒng)存儲(chǔ)器601包括如下數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)包括客戶代碼602、轉(zhuǎn)換后備緩沖器603、優(yōu)化器代碼604、轉(zhuǎn)換器代碼605和本機(jī)代碼高速緩存606。系統(tǒng)600也示出共享硬件高速緩存607,其中可以交織和共享客戶指令和本機(jī)指令。客戶硬件高速緩存610對(duì)從共享硬件高速緩存607最頻繁觸及的那些客戶指令進(jìn)行高速緩存。
[0062]客戶提取邏輯620從客戶代碼602預(yù)提取客戶指令。客戶提取邏輯620與作為將虛擬客戶地址轉(zhuǎn)譯成對(duì)應(yīng)的物理客戶地址的轉(zhuǎn)換后備緩沖器來工作的TLB609對(duì)接。TLB609可以向客戶硬件高速緩存610直接轉(zhuǎn)發(fā)命中。由客戶提取邏輯620提取的客戶指令存儲(chǔ)在客戶提取緩沖器611中。
[0063]轉(zhuǎn)換表612和613包括替代字段和控制字段并且作為用于將從客戶提取緩沖器611接收的客戶指令轉(zhuǎn)譯成本機(jī)指令的多級(jí)轉(zhuǎn)換表來工作。
[0064]復(fù)用器614和615向本機(jī)轉(zhuǎn)換緩沖器616傳送轉(zhuǎn)換的本機(jī)指令。本機(jī)轉(zhuǎn)換緩沖器616積累轉(zhuǎn)換的本機(jī)指令以匯編本機(jī)轉(zhuǎn)換塊。然后向本機(jī)硬件高速緩存600傳送這些本機(jī)轉(zhuǎn)換塊,并且在轉(zhuǎn)換后備緩沖器630中保持映射。
[0065]轉(zhuǎn)換后備緩沖器630包括用于轉(zhuǎn)換的塊條目點(diǎn)地址631、本機(jī)地址632、轉(zhuǎn)換的地址范圍633、代碼高速緩存和轉(zhuǎn)換后備緩沖器管理位634以及動(dòng)態(tài)分支偏置位635的數(shù)據(jù)結(jié)構(gòu)??蛻舴种У刂?31和本機(jī)地址632包括指示哪些對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊駐留于轉(zhuǎn)換的塊范圍633內(nèi)的客戶地址范圍。高速緩存管理協(xié)議和替換策略保證熱門本機(jī)轉(zhuǎn)換塊映射駐留于轉(zhuǎn)換后備緩沖器630內(nèi)而冷門本機(jī)轉(zhuǎn)換塊映射駐留于系統(tǒng)存儲(chǔ)器601中的轉(zhuǎn)換后備緩沖器數(shù)據(jù)結(jié)構(gòu)603內(nèi)。
[0066]與系統(tǒng)500 —樣,系統(tǒng)600尋求保證熱門塊映射駐留于高速低延時(shí)轉(zhuǎn)換后備緩沖器630內(nèi)。因此,在提取邏輯640或者客戶提取邏輯620查看以提取客戶地址時(shí),在一個(gè)實(shí)施例中,提取邏輯640可以首先檢查客戶地址以確定對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊是否駐留于代碼高速緩存606內(nèi)。這允許關(guān)于請(qǐng)求的客戶地址是否在代碼高速緩存606中具有對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的確定。如果請(qǐng)求的客戶地址未駐留于緩沖器603或者608或者緩沖器630內(nèi),則從客戶代碼602提取客戶地址和多個(gè)后續(xù)客戶指令并且經(jīng)由轉(zhuǎn)換表612和613實(shí)現(xiàn)轉(zhuǎn)換過程。
[0067]圖7示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的具有輔助基于軟件的加速轉(zhuǎn)換流水線的硬件加速轉(zhuǎn)換系統(tǒng)700的示例。
[0068]部件711-716包括在專門的高速存儲(chǔ)器760內(nèi)實(shí)例化的由軟件實(shí)現(xiàn)的加載存儲(chǔ)路徑。如圖7中所描述的,客戶提取緩沖器711、轉(zhuǎn)換表712-713和本機(jī)轉(zhuǎn)換緩沖器716包括專門的高速存儲(chǔ)器760的分配的部分。就許多方面而言,專門的高速存儲(chǔ)器760作為很低級(jí)快速高速緩存(例如LO高速緩存)來工作。
[0069]箭頭761圖示如下屬性,其中如與指令提取路徑(例如來自提取的解碼邏輯)相反的那樣經(jīng)由加載存儲(chǔ)路徑使轉(zhuǎn)換加速。
[0070]在圖7的實(shí)施例中,高速存儲(chǔ)器760包括用于進(jìn)行比較的特殊邏輯。因?yàn)槿绱?,可以在軟件中?shí)現(xiàn)轉(zhuǎn)換加速。例如在另一實(shí)施例中,存儲(chǔ)部件711-716的標(biāo)準(zhǔn)存儲(chǔ)器760由使用處理器執(zhí)行流水線的軟件來操控,其中它從所述部件711-716向一個(gè)或者多個(gè)SMD寄存器中加載值并且實(shí)現(xiàn)在SMD寄存器中的字段之間執(zhí)行比較的比較指令,以及如需要的那樣執(zhí)行掩碼操作和結(jié)果掃描操作??梢允褂猛ㄓ梦⑻幚砥饔布⒅T如例如使用比較一個(gè)與多個(gè)的比較指令來實(shí)現(xiàn)加載存儲(chǔ)路徑。
[0071]應(yīng)當(dāng)注意,存儲(chǔ)器760由具有特殊屬性或者地址范圍的指令訪問。例如在一個(gè)實(shí)施例中,客戶提取緩沖器具有用于每個(gè)客戶指令條目的ID。該ID對(duì)于每個(gè)客戶指令而創(chuàng)建。這一 ID允許易于從客戶緩沖器映射到本機(jī)轉(zhuǎn)換緩沖器。該ID允許易于將客戶偏移計(jì)算成本機(jī)偏移而不考慮客戶指令與對(duì)應(yīng)的本機(jī)指令比較的不同長(zhǎng)度。這一方面在以上在圖3中圖示。
[0072]在一個(gè)實(shí)施例中,由硬件使用如下長(zhǎng)度解碼器來計(jì)算該ID,該長(zhǎng)度解碼器計(jì)算提取的客戶指令的長(zhǎng)度。然而應(yīng)當(dāng)注意,可以在硬件或者軟件中執(zhí)行這一功能。
[0073]一旦已經(jīng)指派ID,就可以經(jīng)由ID訪問本機(jī)指令緩沖器。ID允許從客戶偏移向本機(jī)偏移的偏移的轉(zhuǎn)換。
[0074]圖8示出圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的CLB與代碼高速緩存和在存儲(chǔ)器內(nèi)存儲(chǔ)的客戶指令到本機(jī)指令映射結(jié)合工作的方式的示例流程圖。
[0075]如以上描述的那樣,CLB用來存儲(chǔ)具有在代碼高速緩存存儲(chǔ)器內(nèi)存儲(chǔ)的對(duì)應(yīng)的轉(zhuǎn)換的本機(jī)地址的客戶地址的映射(例如客戶到本機(jī)地址映射)。在一個(gè)實(shí)施例中,用客戶地址的部分對(duì)CLB編索引。將客戶地址分割成索引、標(biāo)簽和偏移(例如組塊大小)。這一客戶地址包括用來標(biāo)識(shí)在與索引對(duì)應(yīng)的CLB條目中的匹配的標(biāo)簽。如果在標(biāo)簽上有命中,則對(duì)應(yīng)的條目將存儲(chǔ)如下指針,該指針指示在代碼高速緩存存儲(chǔ)器806中何處可以發(fā)現(xiàn)對(duì)應(yīng)的轉(zhuǎn)換的本機(jī)指令組塊(例如對(duì)應(yīng)的轉(zhuǎn)換的本機(jī)指令塊)。
[0076]應(yīng)當(dāng)注意,如這里所用術(shù)語“組塊”是指轉(zhuǎn)換的本機(jī)指令塊的對(duì)應(yīng)的存儲(chǔ)器大小。例如組塊可以根據(jù)轉(zhuǎn)換的本機(jī)指令塊的不同大小而大小不同。
[0077]關(guān)于代碼高速緩存存儲(chǔ)器806,在一個(gè)實(shí)施例中,以固定大小的組塊(例如對(duì)于每個(gè)組塊類型用不同大小)的集合的方式分配代碼高速緩存。可以在系統(tǒng)存儲(chǔ)器和所有更低級(jí)HW高速緩存(例如本機(jī)硬件高速緩存608、共享硬件高速緩存607)中在邏輯上將代碼高速緩存分割成集合和途徑。CLB針對(duì)代碼高速緩存組塊可以使用客戶地址以編索引和標(biāo)簽比較途徑標(biāo)簽。
[0078]圖8描繪在描繪為途徑X和途徑y(tǒng)的2個(gè)途徑中存儲(chǔ)客戶地址標(biāo)簽的CLB硬件高速緩存804。應(yīng)當(dāng)注意,在一個(gè)實(shí)施例中,可以以結(jié)構(gòu)化方式通過存儲(chǔ)指向本機(jī)代碼組塊的指針(例如從客戶到本機(jī)地址映射)來完成使用CLB結(jié)構(gòu)的客戶地址到本機(jī)地址的映射。每個(gè)途徑與標(biāo)簽關(guān)聯(lián)。用客戶地址802 (包括標(biāo)簽)對(duì)CLB編索引。在CLB中命中時(shí),返回與標(biāo)簽對(duì)應(yīng)的指針。這一指針用來對(duì)代碼高速緩存存儲(chǔ)器編索引。這在圖8中由行“代碼組塊的本機(jī)地址=段#+F(pt) ”示出,這代表代碼組塊的本機(jī)地址是指針和段號(hào)的函數(shù)。在本實(shí)施例中,段是指用于存儲(chǔ)器中的虛擬地映射(例如允許指針陣列映射到物理存儲(chǔ)器中的任何區(qū)域)的指針范圍的點(diǎn)的基址。
[0079]備選地,在一個(gè)實(shí)施例中,可以如在圖8中由行“代碼組塊的本機(jī)地址=段#+索引*(組塊大小)+途徑#*(組塊大小)”所示,經(jīng)由第二方法對(duì)代碼高速緩存存儲(chǔ)器編索引。在這樣的實(shí)施例中,組織代碼高速緩存使得它的途徑結(jié)構(gòu)與CLB途徑構(gòu)造匹配,從而1:1映射存在于CLB的途徑與代碼高速緩存組塊的途徑之間。當(dāng)在特定CLB途徑中有命中時(shí),在代碼高速緩存的對(duì)應(yīng)途徑中的對(duì)應(yīng)代碼組塊然后具有本機(jī)代碼。
[0080]仍然參照?qǐng)D8,如果CLB的索引未命中,則可以檢查存儲(chǔ)器的更高分級(jí)尋找命中(例如LI高速緩存、L2高速緩存等)。如果在這些更高高速緩存級(jí)中無命中,則檢查系統(tǒng)存儲(chǔ)器801中的地址。在一個(gè)實(shí)施例中,客戶索引指向例如包括64個(gè)組塊的條目。讀出64個(gè)組塊中的每個(gè)組塊的標(biāo)簽并且與客戶標(biāo)簽比較以確定是否有命中。這一過程在圖8中由虛線框805示出。如果在與標(biāo)簽比較之后在系統(tǒng)存儲(chǔ)器中無命中,則在任何分級(jí)存儲(chǔ)器級(jí)不存在轉(zhuǎn)換并且必須轉(zhuǎn)換客戶指令。
[0081]應(yīng)當(dāng)注意,本發(fā)明的實(shí)施例以類似于高速緩存的方式管理存儲(chǔ)客戶到本機(jī)指令映射的分級(jí)存儲(chǔ)器級(jí)中的每個(gè)分級(jí)存儲(chǔ)器級(jí)。這固有地來自基于高速緩存的存儲(chǔ)器(例如CLB硬件高速緩存、本機(jī)高速緩存、LI和L2高速緩存等)。然而CLB也包括“代碼高速緩存+CLB管理位”,其用來為系統(tǒng)存儲(chǔ)器801內(nèi)的客戶到本機(jī)指令映射實(shí)現(xiàn)最近最少使用(LRU)替換管理策略。在一個(gè)實(shí)施例中,CLB管理位(例如LRU位)由軟件管理。以這一方式,所有分級(jí)存儲(chǔ)器級(jí)用來存儲(chǔ)最近最多使用、最頻繁遇到的客戶到本機(jī)指令映射。對(duì)應(yīng)地,這導(dǎo)致所有分級(jí)存儲(chǔ)器級(jí)相似地存儲(chǔ)最頻繁遇到的轉(zhuǎn)換的本機(jī)指令。
[0082]圖8也示出CLB中存儲(chǔ)的動(dòng)態(tài)分支偏置位和/或分支歷史位。這些動(dòng)態(tài)分支位用來跟蹤在匯編客戶指令序列中使用的分支預(yù)測(cè)的行為。這些位用來跟蹤哪些分支預(yù)測(cè)最經(jīng)常被正確預(yù)測(cè)并且哪些分支預(yù)測(cè)最經(jīng)常被不正確預(yù)測(cè)。CLB也存儲(chǔ)用于轉(zhuǎn)換的塊范圍的數(shù)據(jù)。這一數(shù)據(jù)使過程能夠無效代碼高速緩存存儲(chǔ)器中的其中(例如如在自修改代碼中那樣)已經(jīng)修改的對(duì)應(yīng)的客戶指令的轉(zhuǎn)換塊范圍。[0083]圖9示出圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的物理存儲(chǔ)棧高速緩存實(shí)現(xiàn)方式和客戶地址到本機(jī)地址映射的示例流程圖。如圖9中所描述,高速緩存可以實(shí)現(xiàn)為物理存儲(chǔ)棧901。
[0084]圖9的實(shí)施例圖示代碼高速緩存可以實(shí)現(xiàn)為可變結(jié)構(gòu)高速緩存的方式。根據(jù)不同實(shí)施例的要求,可變結(jié)構(gòu)高速緩存可以是完全硬件實(shí)現(xiàn)和控制的、完全軟件實(shí)現(xiàn)和控制的或者是軟件支配和控制以及下層硬件實(shí)現(xiàn)的某些混合。
[0085]圖9的實(shí)施例涉及達(dá)到用于在實(shí)際物理存儲(chǔ)裝置中管理客戶到本機(jī)地址映射的分配和替換及其對(duì)應(yīng)的轉(zhuǎn)譯的任務(wù)的最優(yōu)平衡。在本實(shí)施例中,這通過使用將指針與可變大小的組塊進(jìn)行組合的結(jié)構(gòu)來實(shí)現(xiàn)。
[0086]多途徑標(biāo)簽陣列用來存儲(chǔ)用于不同大小的物理存儲(chǔ)裝置組的指針。每當(dāng)需要分配特定存儲(chǔ)裝置大小(例如其中對(duì)應(yīng)于地址的存儲(chǔ)裝置大小)時(shí),然后相應(yīng)地,分配各自與該大小對(duì)應(yīng)的一組存儲(chǔ)塊。這允許本發(fā)明的一個(gè)實(shí)施例精確地分配存儲(chǔ)裝置以存儲(chǔ)可變大小的指令蹤跡。圖9示出組如何可以是不同大小。示出“用于組大小4的替換候選”和“用于組大小2的替換候選”這兩個(gè)示例組大小。(除了與地址對(duì)應(yīng)的標(biāo)簽之外還)在將地址映射到物理存儲(chǔ)地址的TAG陣列中存儲(chǔ)指針。標(biāo)簽可以包括兩個(gè)或者更多子標(biāo)簽。例如在標(biāo)簽結(jié)構(gòu)902中的上3個(gè)標(biāo)簽包括子標(biāo)簽分別如圖所示的A1B1、A2B2C2D2和A3B3。因此,標(biāo)簽A2B2C2D2包括組大小4,而標(biāo)簽AlBl包括組大小2。組大小掩碼也指示組大小。
[0087]然后可以如同棧一樣管理物理存儲(chǔ)裝置,從而每當(dāng)有分配的新組時(shí),可以在物理存儲(chǔ)棧頂部放置它。條目通過改寫它們的標(biāo)簽來無效,由此恢復(fù)分配的空間。
[0088]圖9也示出擴(kuò)展的途徑標(biāo)簽結(jié)構(gòu)903。在一些境況中,在標(biāo)簽結(jié)構(gòu)902中的條目將在擴(kuò)展的途徑標(biāo)簽結(jié)構(gòu)903中具有對(duì)應(yīng)條目。這依賴于條目和標(biāo)簽結(jié)構(gòu)是否具有擴(kuò)展的途徑位設(shè)置(例如設(shè)置成一)。例如,設(shè)置成一的擴(kuò)展的途徑位指示在擴(kuò)展的途徑標(biāo)簽結(jié)構(gòu)中有對(duì)應(yīng)條目。擴(kuò)展的途徑標(biāo)簽結(jié)構(gòu)允許處理器以與標(biāo)準(zhǔn)標(biāo)簽結(jié)構(gòu)不同的方式來擴(kuò)展引用的局部性。因此,雖然以一種方式(例如索引(j))對(duì)標(biāo)簽結(jié)構(gòu)902編索引,但是以不同方式(例如索引(k))對(duì)擴(kuò)展的途徑標(biāo)簽結(jié)構(gòu)編索引。
[0089]在典型實(shí)現(xiàn)方式中,索引(J)可以有數(shù)目比索引(k)內(nèi)大得多的條目。這是因?yàn)樵诙鄶?shù)限制中,主標(biāo)簽結(jié)構(gòu)902比擴(kuò)展的途徑標(biāo)簽結(jié)構(gòu)903大得多,其中例如(j)可以覆蓋1024個(gè)條目(例如10位)而(k)可以覆蓋256個(gè)(例如8位)。
[0090]這使本發(fā)明的實(shí)施例能夠?qū)τ谝呀?jīng)變成非常熱門(例如很頻繁遇到)的蹤跡匹配并入附加途徑。例如,如果在標(biāo)簽結(jié)構(gòu)902內(nèi)沒有發(fā)現(xiàn)熱門集合內(nèi)的匹配,則通過設(shè)置擴(kuò)展的途徑位,擴(kuò)展的途徑標(biāo)簽結(jié)構(gòu)可以用來存儲(chǔ)用于熱門蹤跡的附加途徑。應(yīng)當(dāng)注意,這一可變高速緩存結(jié)構(gòu)僅使用如我們?cè)跅I洗鎯?chǔ)的高速緩存的代碼/數(shù)據(jù)所需要的存儲(chǔ)裝置,例如如果在程序的特定階段期間從未訪問高速緩存集合中的任何(索引位指示的條目),則將在棧上沒有用于該集合的存儲(chǔ)裝置分配。這與對(duì)于每一個(gè)集合具有固定物理數(shù)據(jù)存儲(chǔ)裝置于其中的集合的典型高速緩存比較而提供高效的有效存儲(chǔ)容量蹭加。
[0091]也可以有用于指示集合或者集合組為冷門(例如意味著已經(jīng)長(zhǎng)時(shí)間未訪問它們)的位。在這一情況下,用于那些集合的棧存儲(chǔ)裝置看似在分配的棧存儲(chǔ)裝置內(nèi)的冒泡。這時(shí),可以索取它們的分配指針用于其它熱門集合。這一過程是存儲(chǔ)裝置收回過程,其中在已經(jīng)在棧內(nèi)分配組塊之后,該組塊屬于的整個(gè)集合然后變成冷門??梢杂兄谶@一收回的所需機(jī)制和結(jié)構(gòu)(在圖9中未示出以免混淆或者模糊所示方面)是:用于每個(gè)集合(條目索引)的冷門集合指示符和回收過程,其中將用于那些冷門集合的途徑的指針重用于其它熱門集合的途徑。這允許回收那些棧存儲(chǔ)冒泡(組塊)。在未在回收模式中時(shí),在棧頂部分配新組塊,在棧具有冷門集合(例如長(zhǎng)時(shí)間未訪問集合途徑/組塊)時(shí),回收動(dòng)作允許需要在另一集合中分配的新組塊以重用回收的指針和在棧內(nèi)的(屬于冷門集合)它的關(guān)聯(lián)組塊存儲(chǔ)裝置。
[0092]應(yīng)當(dāng)注意,如與專門的高速緩存存儲(chǔ)器相反的那樣,圖9的實(shí)施例良好地適用于在它的實(shí)現(xiàn)方式中使用標(biāo)準(zhǔn)存儲(chǔ)器。這一屬性歸因于通過讀取指針、讀取索引和分配地址范圍來管理物理存儲(chǔ)棧的事實(shí)。在這樣的實(shí)現(xiàn)方式中無需專門的基于高速緩存的電路結(jié)構(gòu)。
[0093]應(yīng)當(dāng)注意,在一個(gè)實(shí)施例中,圖9的架構(gòu)可以用來實(shí)現(xiàn)未涉及到轉(zhuǎn)換或者代碼變換的數(shù)據(jù)高速緩存和高速緩存方案。因而,圖9的架構(gòu)可以用來實(shí)現(xiàn)更標(biāo)準(zhǔn)化的高速緩存(例如L2數(shù)據(jù)高速緩存等)。這樣做與常規(guī)固定結(jié)構(gòu)高速緩存等比較將提供更大有效容量。
[0094]圖10示出描繪根據(jù)本發(fā)明的一個(gè)實(shí)施例的硬件加速轉(zhuǎn)換系統(tǒng)1000的附加示例細(xì)節(jié)的圖。行1001圖示將傳入客戶指令與多個(gè)組掩碼和標(biāo)簽進(jìn)行比較的方式。目的是快速標(biāo)識(shí)客戶指令的類型并且向?qū)?yīng)組指派它。組掩碼和標(biāo)簽通過匹配客戶指令的子字段以便標(biāo)識(shí)客戶指令屬于的特定組來工作。掩碼遮蔽客戶指令模式的無關(guān)位以具體關(guān)注相關(guān)位。如例如表1002的表以優(yōu)先化方式存儲(chǔ)掩碼-標(biāo)簽對(duì)。
[0095]通過在優(yōu)先級(jí)方向中向表中讀取模式來匹配模式,該優(yōu)先級(jí)方向在這一情況下描繪為從上至下。以這一方式,通過在掩碼-標(biāo)簽存儲(chǔ)裝置的優(yōu)先級(jí)方向中讀取模式來匹配模式。以不同掩碼的優(yōu)先級(jí)為順序來檢查它們,并且對(duì)應(yīng)地以它們的優(yōu)先級(jí)為順序應(yīng)用模式匹配功能。在發(fā)現(xiàn)命中時(shí),然后從存儲(chǔ)映射的對(duì)應(yīng)表(例如表1003)讀取模式的對(duì)應(yīng)映射。第2級(jí)表1004圖示可以用級(jí)聯(lián)依次方式訪問多個(gè)轉(zhuǎn)換表直至達(dá)到客戶指令的全轉(zhuǎn)換的目的的分級(jí)方式。如以上描述的那樣,轉(zhuǎn)換表包括替代字段和控制字段并且作為用于將從客戶提取緩沖器接收的客戶指令轉(zhuǎn)譯成本機(jī)指令的多級(jí)轉(zhuǎn)換表來工作。
[0096]以這一方式,向轉(zhuǎn)換表發(fā)送緩沖器中的每個(gè)字節(jié)流,其中每級(jí)轉(zhuǎn)換表串行地檢測(cè)位字段。在檢測(cè)到相關(guān)位字段時(shí),該表替代場(chǎng)的本機(jī)等價(jià)。
[0097]該表也產(chǎn)生如下控制字段,該控制字段有助于用于這一級(jí)以及下一級(jí)表(例如第2級(jí)表1004)的替代過程。下一個(gè)表使用先前表控制字段以標(biāo)識(shí)用本機(jī)等價(jià)替代的下一相關(guān)位字段。第二級(jí)表然后可以產(chǎn)生用于幫助第一級(jí)表的控制字段,以此類推。一旦用本機(jī)位字段替代所有客戶位字段,該指令就完全被轉(zhuǎn)譯并且向本機(jī)轉(zhuǎn)換緩沖器進(jìn)行傳輸。如以上描述的那樣,然后向代碼高速緩存中寫入本機(jī)轉(zhuǎn)換緩沖器,并且在CLB中記錄它的客戶到本機(jī)地址映射。
[0098]圖1IA示出通過本發(fā)明的實(shí)施例實(shí)現(xiàn)的示例模式匹配過程的圖。如圖1lA中描述的,由標(biāo)簽、模式和掩碼確定目的地。模式解碼的功能包括執(zhí)行位比較(例如按位X0R)、執(zhí)行位AND (例如按位AND)以及隨后檢查所有零位(N0R所有位)。
[0099]圖1lB示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的基于SMD寄存器的模式匹配過程的圖1100。如圖1100中所描述,示出四個(gè)SMD寄存器1102-1105。這些寄存器如圖所示實(shí)現(xiàn)模式解碼過程的功能。傳入模式1101用來對(duì)標(biāo)簽中的每個(gè)標(biāo)簽執(zhí)行并行位比較(例如按位XOR),并且該結(jié)果用掩碼執(zhí)行位AND (例如按位AND)。匹配指示符結(jié)果如圖所示各自存儲(chǔ)于它們的相應(yīng)SMD位置。然后如圖所示執(zhí)行掃描,并且在掃描遇到的SMD元素之中的第一個(gè)真是如下元素,其中用于所有i位的等式(Pi XOR Ti)AND Mi = O為真,其中Pi是相應(yīng)模式,Ti是相應(yīng)標(biāo)簽,并且Mi是相應(yīng)掩碼。
[0100]圖12示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的統(tǒng)一寄存器文件1201的圖。如圖12中所描述,統(tǒng)一寄存器文件1201包括2個(gè)部分1202-1203和條目選擇器1205。統(tǒng)一寄存器文件1201實(shí)現(xiàn)對(duì)于用于硬件狀態(tài)更新的架構(gòu)推測(cè)的支持。
[0101]統(tǒng)一寄存器文件1201使得優(yōu)化的陰影寄存器和提交的寄存器狀態(tài)管理過程的實(shí)現(xiàn)方式成為可能。這一過程支持用于硬件狀態(tài)更新的架構(gòu)推測(cè)。在這一過程下,本發(fā)明的實(shí)施例可以支持陰影寄存器功能和提交的寄存器功能而無需在寄存器存儲(chǔ)器之間的任何交叉復(fù)制。例如在一個(gè)實(shí)施例中,統(tǒng)一寄存器文件1201的功能主要由條目選擇器1205提供。在圖12的實(shí)施例中,每個(gè)寄存器文件條目由分別來自部分I和部分2的2對(duì)寄存器R和R’組成。在任何給定的時(shí)間,從每個(gè)條目讀取的寄存器是來自部分I或者部分2的R或者R’?;谟蓷l目選擇器105為寄存器文件的每個(gè)條目存儲(chǔ)的X和y位的值而有用于每個(gè)條目的4個(gè)不同組合。
[0102]用于X和y位的值如下:
[0103]00:R無效;R’提交(在讀取請(qǐng)求時(shí)讀取R’ )
[0104]01:R推測(cè);R’提交(在讀取請(qǐng)求時(shí)讀取R)
[0105]10:R提交;R’推測(cè)(在讀取請(qǐng)求時(shí)讀取R’ )
[0106]11:R提交;R’無效(在讀取請(qǐng)求時(shí)讀取R)
[0107]以下是每個(gè)指令/事件的影響。在指令回寫時(shí),00變成01并且11變成10。在指令提交時(shí),01變成11并且10變成00。在發(fā)生回退事件時(shí),01變成00并且10變成11。
[0108]這些改變主要是對(duì)在寄存器文件條目選擇器1205中存儲(chǔ)的狀態(tài)的改變并且基于在它們發(fā)生時(shí)的事件而發(fā)生。應(yīng)當(dāng)注意,提交指令和回退事件需要達(dá)到提交階段以便引起條目選擇器1205中的位轉(zhuǎn)變。
[0109]以這一方式,指令能夠在陰影寄存器狀態(tài)內(nèi)繼續(xù)而未破壞提交的寄存器狀態(tài)。在陰影寄存器狀態(tài)準(zhǔn)備用于提交時(shí),更新寄存器文件條目選擇器,從而用以上描述的方式從哪個(gè)部分讀取有效結(jié)果。以這一方式,通過如需要的那樣簡(jiǎn)單地更新寄存器文件條目,推測(cè)執(zhí)行結(jié)果可以在異常的情況下回退到最近提交點(diǎn)。類似地,提交點(diǎn)可以通過簡(jiǎn)單地更新寄存器文件條目選擇來提前、由此提交推測(cè)執(zhí)行結(jié)果。提供這一功能而無需在寄存器存儲(chǔ)器之間的任何交叉復(fù)制。
[0110]以這一方式,統(tǒng)一寄存器文件可以經(jīng)由寄存器文件條目選擇器1205實(shí)現(xiàn)多個(gè)推測(cè)暫存區(qū)陰影寄存器(SSSR)和多個(gè)提交的寄存器(CR)。例如在提交時(shí),SSSR寄存器變成CR寄存器。在回退時(shí),SSSR狀態(tài)回退到CR寄存器。
[0111]圖13示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的支持推測(cè)架構(gòu)狀態(tài)和瞬態(tài)架構(gòu)狀態(tài)的統(tǒng)一陰影寄存器文件和流水線架構(gòu)1300的圖。
[0112]圖13的實(shí)施例描繪組成架構(gòu)1300的部件,該架構(gòu)支持包括架構(gòu)推測(cè)狀態(tài)的指令和結(jié)果并且支持包括瞬態(tài)狀態(tài)的指令和結(jié)果。如這里所用,提交的架構(gòu)狀態(tài)包括可以由在處理器上執(zhí)行的程序訪問(例如讀取和寫入)的可見寄存器和可見存儲(chǔ)器。對(duì)照而言,推測(cè)架構(gòu)狀態(tài)包括未提交、因此未全局可見的寄存器和/或存儲(chǔ)器。
[0113]在一個(gè)實(shí)施例中,有架構(gòu)1300啟用的四個(gè)使用模型。第一使用模型包括如以上在圖12的討論中描述的用于硬件狀態(tài)更新的架構(gòu)推測(cè)。
[0114]第二使用模型包括雙范圍使用。這一使用模型適用于向處理器中提取2個(gè)線程,其中一個(gè)線程在推測(cè)狀態(tài)中執(zhí)行而另一線程在非推測(cè)狀態(tài)中執(zhí)行。在這一使用模型中,兩個(gè)范圍被提取到機(jī)器中并且同時(shí)存在于機(jī)器中。
[0115]第三使用模型包括從一個(gè)形式到另一形式的JIT(實(shí)時(shí))指令轉(zhuǎn)譯或者編譯。在這一使用模型中,經(jīng)由軟件、例如JIT實(shí)現(xiàn)架構(gòu)狀態(tài)重排序。第三使用模型可以例如適用于客戶到本機(jī)指令轉(zhuǎn)譯、虛擬機(jī)到本機(jī)指令轉(zhuǎn)譯或者將本機(jī)微指令重映射/轉(zhuǎn)譯成更優(yōu)化的本機(jī)微指令。
[0116]第四使用模型包括瞬態(tài)上下文切換而無需在從瞬態(tài)上下文返回時(shí)保存和恢復(fù)先前上下文。這一使用模型適用于可以出于許多原因而發(fā)生的上下文切換。一個(gè)這樣的原因可以例如是經(jīng)由異常處置上下文而精確處置異常。以下在圖14-17的討論中進(jìn)一步描述第二、第三和第四使用模型。
[0117]再次參照?qǐng)D13,架構(gòu)1300包括用于實(shí)現(xiàn)以上描述的4個(gè)使用模型的多個(gè)部件。統(tǒng)一陰影寄存器文件1301包括第一部分(提交的寄存器文件1302)、第二部分(陰影寄存器文件1303)和第三部分(最新指示符陣列1304)。包括推測(cè)引退存儲(chǔ)器緩沖器1342和最新指示符陣列1340。架構(gòu)1300包括無序架構(gòu),因此架構(gòu)1300還包括重排序緩沖器和引退窗口 1332。重排序和引退窗口 1332還包括機(jī)器引退指針1331、就緒位陣列1334和每指令最新指示符、諸如指示符1333。
[0118]根據(jù)本發(fā)明的一個(gè)實(shí)施例進(jìn)一步具體描述用于硬件狀態(tài)更新的架構(gòu)推測(cè)這一第一使用模型。如以上描述的那樣,架構(gòu)1300包括無序架構(gòu)。架構(gòu)1300的硬件能夠提交無序指令結(jié)果(即無需加載和無序存儲(chǔ)以及無序寄存器更新)。架構(gòu)1300用以上在圖12的討論中描述的方式利用統(tǒng)一陰影寄存器文件以支持在提交的寄存器與陰影寄存器之間的推測(cè)執(zhí)行。此外,架構(gòu)1300利用推測(cè)記載存儲(chǔ)緩沖器1320和推測(cè)引退存儲(chǔ)器緩沖器1342以支持推測(cè)執(zhí)行。
[0119]架構(gòu)1300將與重排序緩沖器和引退窗口 1332結(jié)合使用這些部件以允許它的狀態(tài)正確引退到提交的寄存器文件1302和可見存儲(chǔ)器1350,即使將在內(nèi)部以無序方式使這些引退到統(tǒng)一陰影寄存器文件和引退存儲(chǔ)器緩沖器。例如架構(gòu)將使用統(tǒng)一陰影寄存器文件1301和推測(cè)存儲(chǔ)器1342以基于異常是否發(fā)生或者未發(fā)生來實(shí)現(xiàn)回退和提交事件。這一功能使寄存器狀態(tài)能夠無序引退到統(tǒng)一陰影寄存器文件1301并且使推測(cè)引退存儲(chǔ)器緩沖器1342無序引退到可見存儲(chǔ)器1350。隨著推測(cè)執(zhí)行繼續(xù)和無序指令執(zhí)行繼續(xù),如果沒有分支已經(jīng)被預(yù)測(cè)未命中并且沒有發(fā)生的異常,則機(jī)器引退指針1331推進(jìn)直至觸發(fā)提交事件。提交事件使統(tǒng)一陰影寄存器文件通過推進(jìn)它的提交點(diǎn)來提交它的內(nèi)容并且使推測(cè)引退存儲(chǔ)器緩沖器根據(jù)機(jī)器引退指針1331向存儲(chǔ)器1350提交它的內(nèi)容。
[0120]例如,考慮在重排序緩沖器和引退窗口 1332內(nèi)示出的指令1-7,就緒位陣列1334示出在準(zhǔn)備好執(zhí)行的指令旁邊的“X”和在未準(zhǔn)備好執(zhí)行的指令旁邊的“/”。因而允許指令
1、2、4和6無序繼續(xù)。隨后,如果異常發(fā)生,諸如指令6分支被錯(cuò)失預(yù)測(cè),則在指令6之后發(fā)生的指令可以回退。備選地,如果沒有異常發(fā)生,則可以通過相應(yīng)地移動(dòng)機(jī)器引退指針1331來提交指令1-7中的所有指令。
[0121]最新指不符陣列1341、最新指不符陣列1304和最新指不符1333用來允許無序執(zhí)行。例如即使指令2在指令5之前加載寄存器R4,則一旦指令5準(zhǔn)備好發(fā)生則將忽略來自指令2的加載。最新加載將根據(jù)最新指示符超越更早的加載。
[0122]在分支預(yù)測(cè)或者異常發(fā)生于重排序緩沖器和引退窗口 1332內(nèi)的情況下,觸發(fā)回退事件。如以上描述的那樣,在回退的情況下,統(tǒng)一引用寄存器文件1301將回退到它的上個(gè)提交點(diǎn),并且將刷新推測(cè)引退存儲(chǔ)器緩沖器1342。
[0123]圖14示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括雙范圍使用的第二使用模型的圖1400。如以上描述的那樣,這一使用模型適用于向處理器中提取2個(gè)線程,其中一個(gè)線程在推測(cè)狀態(tài)中執(zhí)行而另一線程在非推測(cè)狀態(tài)中執(zhí)行。在這一使用模型中,兩個(gè)范圍被提取到機(jī)器中并且同時(shí)存在于機(jī)器中。
[0124]如圖1400中所示,已經(jīng)向機(jī)器中提取2個(gè)范圍/蹤跡1401和1402。在這一示例中,范圍/蹤跡1401是當(dāng)前非推測(cè)范圍/蹤跡。范圍/蹤跡1402是新推測(cè)范圍/蹤跡。架構(gòu)1300實(shí)現(xiàn)如下推測(cè)和暫存區(qū)狀態(tài),該狀態(tài)允許2個(gè)線程將那些狀態(tài)用于執(zhí)行。一個(gè)線程(例如1401)在非推測(cè)范圍中執(zhí)行而另一線程(例如1402)使用推測(cè)范圍。兩個(gè)范圍可以被提取到機(jī)器中并且同時(shí)存在而每個(gè)范圍被不同地設(shè)置它相應(yīng)的模式。第一個(gè)為非推測(cè)而另一個(gè)為推測(cè)。因此第一個(gè)在CR/CM模式中執(zhí)行而另一個(gè)在SR/SM模式中執(zhí)行。在CR/CM模式中,向提交的寄存器讀取和寫入,并且存儲(chǔ)器寫入去往存儲(chǔ)器。在SR/SM模式中,寄存器寫入去往SSSR,并且寄存器讀取來自最新寫入,而存儲(chǔ)器寫入引退存儲(chǔ)器緩沖器(SMB)。
[0125]一個(gè)示例將是排序的當(dāng)前范圍(例如1401)和推測(cè)的下一范圍(1402)。因?yàn)樵诋?dāng)前范圍之后提取下一范圍,所以將重視依賴性,可以在機(jī)器中執(zhí)行二者。例如在范圍1401中,在“向CR提交SSSR”時(shí),直至這一點(diǎn)的寄存器和存儲(chǔ)器在CR模式中,而代碼在CR/CM模式中執(zhí)行。在范圍1402中,代碼在SR和SM模式中執(zhí)行并且如果異常發(fā)生則回退。以這一方式,兩個(gè)范圍在機(jī)器中同時(shí)執(zhí)行,但是各自在不同模式中執(zhí)行并且相應(yīng)地讀取和寫入寄存器。
[0126]圖15示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的第三使用模型的圖1500,該第三使用模型包括瞬態(tài)上下文切換而無需在從瞬態(tài)上下文返回時(shí)保存和恢復(fù)先前上下文。如以上描述的那樣,這一使用模型適用于可以出于許多原因而發(fā)生的上下文切換。一個(gè)這樣的原因例如是經(jīng)由異常處置上下文來精確處置異常。
[0127]第3使用模型發(fā)生于機(jī)器正在執(zhí)行轉(zhuǎn)譯的代碼并且它遇到上下文切換(例如在轉(zhuǎn)譯的代碼以內(nèi)的異?;蛘呷绻枰糜诤罄m(xù)代碼的轉(zhuǎn)譯)時(shí)。在當(dāng)前范圍中(例如在異常之前時(shí)),SSSR和SMB尚未向客戶架構(gòu)狀態(tài)提交它們的推測(cè)狀態(tài)。當(dāng)前狀態(tài)正在SR/SM中運(yùn)行。在異常發(fā)生時(shí),機(jī)器向異常處置器(例如轉(zhuǎn)換器)切換以精確處理異常。插入回退,這使注冊(cè)器狀態(tài)回退到CR并且刷新SMB。轉(zhuǎn)換器代碼將在SR/CM模式中運(yùn)行。在轉(zhuǎn)換器代碼的執(zhí)行期間,SMB將它的內(nèi)容引退到存儲(chǔ)器而未等待提交事件。向SSSR寫入寄存器而未更新CR。隨后,在完成轉(zhuǎn)換器時(shí)并且在切換回到執(zhí)行轉(zhuǎn)換的代碼之前,它使SSSR回退(例如SSSR回退到CR)。在這一過程期間,最后提交的寄存器狀態(tài)在CR中。
[0128]在圖1500中示出這一點(diǎn),其中先前范圍/蹤跡1501已經(jīng)從SSSR向CR中提交。當(dāng)前范圍/蹤跡1502為推測(cè)。寄存器和存儲(chǔ)器以及這一范圍為推測(cè),并且執(zhí)行在SR/SM模式下發(fā)生。在這一示例中,在范圍1502中發(fā)生異常,并且需要按照在轉(zhuǎn)譯之前的原有順序重新執(zhí)行代碼。在這一點(diǎn),SSSR回退并且刷新SMB。然后JIT代碼1503執(zhí)行。JIT代碼使SSSR回退到范圍1501的末端并且刷新SMB。JIT的執(zhí)行是在SC/CM模式之下。在完成JIT時(shí),SSSR回退到CR,并且當(dāng)前范圍/蹤跡1504然后在CR/CM模式中按照原有轉(zhuǎn)譯順序重新執(zhí)行。以這一方式,在準(zhǔn)確當(dāng)前順序精確處置異常。
[0129]圖16示出描繪根據(jù)本發(fā)明的一個(gè)實(shí)施例的指令序列中的異常是因?yàn)樾枰糜诤罄m(xù)代碼的轉(zhuǎn)譯的情況的圖1600。如圖1600中所示,先前范圍/蹤跡1601以向未轉(zhuǎn)譯的目的地的遠(yuǎn)跳轉(zhuǎn)作為結(jié)束。在向遠(yuǎn)跳轉(zhuǎn)目的地跳轉(zhuǎn)之前,向CR提交SSSR。JIT代碼1602然后執(zhí)行以轉(zhuǎn)譯在遠(yuǎn)跳轉(zhuǎn)目的地的猜測(cè)指令(例如構(gòu)建新本機(jī)指令蹤跡)。JIT的執(zhí)行是在SR/CM模式之下。在JIT執(zhí)行結(jié)束時(shí),寄存器狀態(tài)從SSSR回退到CR,并且由JIT轉(zhuǎn)譯的新范圍/蹤跡1603開始執(zhí)行。新范圍/蹤跡在SR/SM模式中從先前范圍/蹤跡1601的上個(gè)提交點(diǎn)執(zhí)行。
[0130]圖17示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的第四使用模型1700的圖,該第四使用模型包括瞬態(tài)上下文切換而無需在從瞬態(tài)上下文返回時(shí)保存和恢復(fù)先前上下文。如以上描述的那樣,這一使用模型適用于可以出于許多原因而發(fā)生的上下文切換。一個(gè)這樣的原因可以例如是經(jīng)由異常處置上下文的處理輸入或者輸出。
[0131]圖1700示出在CR/CM模式之下執(zhí)行的先前范圍/蹤跡1701以調(diào)用函數(shù)Fl作為結(jié)束的情況。上至該點(diǎn)的寄存器狀態(tài)從SSSR提交到CR。函數(shù)Fl范圍/蹤跡1702然后開始在SR/CM模式之下推測(cè)地執(zhí)行。函數(shù)Fl然后以返回到主范圍/蹤跡1703作為結(jié)束。在這一點(diǎn),寄存器狀態(tài)從SSSR回退到CR。主范圍/蹤跡1703恢復(fù)在CR/CM模式中執(zhí)行。
[0132]圖18示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例微處理器流水線1800的圖。微處理器流水線1800包括實(shí)現(xiàn)如以上描述的硬件加速轉(zhuǎn)換過程的功能的硬件轉(zhuǎn)換加速器1810。在圖18的實(shí)施例中,硬件轉(zhuǎn)換計(jì)數(shù)器1810耦合到提取模塊1801,該提取模塊跟隨有解碼模塊1802、分配模塊1803、調(diào)度模塊1804、執(zhí)行模塊1805和引退模塊1806。應(yīng)當(dāng)注意,微處理器流水線1800僅為實(shí)現(xiàn)以上描述的本發(fā)明的實(shí)施例的功能的流水線的一個(gè)示例。本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到可以實(shí)現(xiàn)包括以上描述的解碼模塊的功能的其它微處理器流水線。
[0133]已經(jīng)出于說明的目的參照具體實(shí)施例對(duì)前文描述進(jìn)行了描述。然而以上文所示討論并非意在是詳盡的或者使本發(fā)明限于公開的精確形式。鑒于上述教導(dǎo)的許多修改和變化是可能的。選擇和描述實(shí)施例以便最好地說明本發(fā)明的原理及其實(shí)際應(yīng)用,以由此使本領(lǐng)域其他技術(shù)人員能夠借助如可以與設(shè)想的特定使用相適的各種修改最好地利用本發(fā)明和各種實(shí)施例。
【權(quán)利要求】
1.一種用于轉(zhuǎn)譯用于處理器的指令的方法,包括: 訪問包括多個(gè)客戶分支指令的多個(gè)客戶指令; 將所述多個(gè)客戶指令匯編成客戶指令塊; 將所述客戶指令塊轉(zhuǎn)譯成對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊; 在本機(jī)高速緩存中存儲(chǔ)所述本機(jī)轉(zhuǎn)換塊; 在轉(zhuǎn)換后備緩沖器中存儲(chǔ)所述客戶指令塊到對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的映射; 響應(yīng)于對(duì)于客戶指令的后續(xù)請(qǐng)求,對(duì)所述轉(zhuǎn)換后備緩沖器編索引以確定命中是否發(fā)生,其中所述映射指示所述客戶指令在所述本機(jī)高速緩存中具有對(duì)應(yīng)的轉(zhuǎn)換的本機(jī)指令;以及 響應(yīng)于所述命中來轉(zhuǎn)發(fā)所述轉(zhuǎn)換的本機(jī)指令以用于執(zhí)行。
2.根據(jù)權(quán)利要求1所述的方法,其中硬件提取邏輯部件與所述處理器獨(dú)立地提取所述多個(gè)客戶指令。
3.根據(jù)權(quán)利要求1所述的方法,其中所述轉(zhuǎn)換后備緩沖器包括高速緩存,所述高速緩存使用替換策略以維持所述轉(zhuǎn)換后備緩沖器中存儲(chǔ)的客戶指令塊到對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的最頻繁遇到的映射。
4.根據(jù)權(quán)利要求1所述的方法,其中在系統(tǒng)存儲(chǔ)器內(nèi)維持轉(zhuǎn)換緩沖器,并且在所述轉(zhuǎn)換后備緩沖器與所述轉(zhuǎn)換緩沖器之間維持高速緩存相干性。
5.根據(jù)權(quán)利要求4所述的方法,其中所述轉(zhuǎn)換緩沖器大于所述轉(zhuǎn)換后備緩沖器,并且回寫策略用來在所述轉(zhuǎn)換緩沖器與所述`轉(zhuǎn)換后備緩沖器之間維持相干性。
6.根據(jù)權(quán)利要求1所述的方法,其中實(shí)現(xiàn)所述轉(zhuǎn)換后備緩沖器為耦合到所述處理器的流水線的高速低延時(shí)高速緩存存儲(chǔ)器。 6.根據(jù)權(quán)利要求1所述的方法,其中實(shí)現(xiàn)所述轉(zhuǎn)換后備緩沖器為耦合到所述處理器的流水線的高速低延時(shí)高速緩存存儲(chǔ)器。
7.一種用于轉(zhuǎn)譯用于處理器的指令的系統(tǒng),包括: 客戶提取邏輯部件,用于訪問包括多個(gè)客戶分支指令的多個(gè)客戶指令; 客戶提取緩沖器,用于將所述多個(gè)客戶指令匯編成客戶指令塊; 多個(gè)轉(zhuǎn)換表,用于將所述客戶指令塊轉(zhuǎn)譯成對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊; 本機(jī)高速緩存,用于存儲(chǔ)所述本機(jī)轉(zhuǎn)換塊; 轉(zhuǎn)換后備緩沖器,用于在轉(zhuǎn)換后備緩沖器中存儲(chǔ)所述客戶指令塊到對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的映射; 其中響應(yīng)于對(duì)于客戶指令的后續(xù)請(qǐng)求,對(duì)所述轉(zhuǎn)換后備緩沖器編索引以確定命中是否發(fā)生,其中所述映射指示所述客戶指令在所述本機(jī)高速緩存中具有對(duì)應(yīng)的轉(zhuǎn)換的本機(jī)指令,以及其中響應(yīng)于所述命中來轉(zhuǎn)發(fā)所述轉(zhuǎn)換的本機(jī)指令以用于執(zhí)行。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其中硬件提取邏輯部件與所述處理器獨(dú)立地提取所述多個(gè)客戶指令。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其中所述轉(zhuǎn)換后備緩沖器包括高速緩存,所述高速緩存使用替換策略以維持所述轉(zhuǎn)換后備緩沖器中存儲(chǔ)的最頻繁遇到的映射。
10.根據(jù)權(quán)利要求7所述的系統(tǒng),其中在系統(tǒng)存儲(chǔ)器內(nèi)維持轉(zhuǎn)換緩沖器,并且在所述轉(zhuǎn)換后備緩沖器與所述轉(zhuǎn)換緩沖器之間維持高速緩存相干性。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中所述轉(zhuǎn)換緩沖器大于所述轉(zhuǎn)換后備緩沖器,并且回寫策略用來在所述轉(zhuǎn)換緩沖器與所述轉(zhuǎn)換后備緩沖器之間維持相干性。
12.根據(jù)權(quán)利要求7所述的系統(tǒng),其中實(shí)現(xiàn)所述轉(zhuǎn)換后備緩沖器為耦合到所述處理器的流水線的高速低延時(shí)高速緩存存儲(chǔ)器。
13.一種實(shí)現(xiàn)轉(zhuǎn)譯指令的方法的微處理器,所述微處理器包括: 微處理器流水線; 耦合到所述微處理器流水線的硬件加速器模塊,其中所述硬件加速器模塊進(jìn)一步包括: 客戶提取邏輯部件,用于訪問包括多個(gè)客戶分支指令的多個(gè)客戶指令; 客戶提取緩沖器,用于將所述多個(gè)客戶指令匯編成客戶指令塊; 多個(gè)轉(zhuǎn)換表,用于將所述客戶指令塊轉(zhuǎn)譯成對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊; 本機(jī)高速緩存,用于存儲(chǔ)所述本機(jī)轉(zhuǎn)換塊; 轉(zhuǎn)換后備緩沖器,用于在轉(zhuǎn)換后備緩沖器中存儲(chǔ)所述客戶指令塊到對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊的映射; 其中響應(yīng)于對(duì)于客戶指 令的后續(xù)請(qǐng)求,對(duì)所述轉(zhuǎn)換后備緩沖器編索引以確定命中是否發(fā)生,其中所述映射指示所述客戶指令在所述本機(jī)高速緩存中具有對(duì)應(yīng)的轉(zhuǎn)換的本機(jī)指令,以及其中響應(yīng)于所述命中來轉(zhuǎn)發(fā)所述轉(zhuǎn)換的本機(jī)指令以用于執(zhí)行。
14.根據(jù)權(quán)利要求13所述的微處理器,其中硬件提取邏輯部件與所述處理器獨(dú)立地提取所述多個(gè)客戶指令。
15.根據(jù)權(quán)利要求13所述的微處理器,其中所述轉(zhuǎn)換后備緩沖器包括高速緩存,所述高速緩存使用替換策略以維持所述轉(zhuǎn)換后備緩沖器中存儲(chǔ)的最頻繁遇到的本機(jī)轉(zhuǎn)換塊。
16.根據(jù)權(quán)利要求13所述的微處理器,其中在系統(tǒng)存儲(chǔ)器內(nèi)維持轉(zhuǎn)換緩沖器,并且在所述轉(zhuǎn)換后備緩沖器與所述轉(zhuǎn)換緩沖器之間維持高速緩存相干性。
17.根據(jù)權(quán)利要求16所述的微處理器,其中所述轉(zhuǎn)換緩沖器大于所述轉(zhuǎn)換后備緩沖器,并且回寫策略用來在所述轉(zhuǎn)換緩沖器與所述轉(zhuǎn)換后備緩沖器之間維持相干性。
18.根據(jù)權(quán)利要求13所述的微處理器,其中實(shí)現(xiàn)所述轉(zhuǎn)換后備緩沖器為耦合到所述處理器的流水線的高速低延時(shí)高速緩存存儲(chǔ)器。
19.根據(jù)權(quán)利要求13所述的方法,其中所述多個(gè)客戶指令包括Java、JavaScript、x86、MIPS 或者 SPARC。
20.根據(jù)權(quán)利要求19所述的方法,其中所述微處理器虛擬指令集處理器能用包括Java、JavaScript、x86、MIPS或者SPARC的所述客戶指令中的一種客戶指令工作并且隨后用包括Java、JavaScript、x86、MIPS或者SPARC的所述客戶指令中的不同的一種客戶指令工作。
【文檔編號(hào)】G06F9/06GK103620547SQ201280012962
【公開日】2014年3月5日 申請(qǐng)日期:2012年1月25日 優(yōu)先權(quán)日:2011年1月27日
【發(fā)明者】M·阿布達(dá)拉 申請(qǐng)人:索夫特機(jī)械公司