本申請(qǐng)要求共同待審并且共同轉(zhuǎn)讓的由mohammada.abdallah于2014年7月25日提交的名稱為“aruntimearchitectureforefficientlyoptimizingandexecutingguestcodeandconvertingtonativecode(用于高效地優(yōu)化和執(zhí)行訪客代碼并將其轉(zhuǎn)換為本機(jī)代碼的運(yùn)行時(shí)架構(gòu))”的美國(guó)臨時(shí)專(zhuān)利申請(qǐng)序列號(hào)62/029383的權(quán)益,該申請(qǐng)通過(guò)引用整體結(jié)合于此。
發(fā)明領(lǐng)域
本發(fā)明總地涉及數(shù)字計(jì)算機(jī)系統(tǒng),更具體地涉及用于選擇包括指令序列的指令的系統(tǒng)和方法。
發(fā)明背景
處理器被要求處理多個(gè)從屬的或完全獨(dú)立的任務(wù)。這些處理器的內(nèi)部狀態(tài)通常由在程序執(zhí)行的每個(gè)特定瞬間可能保存不同的值的寄存器組成。在程序執(zhí)行的每個(gè)瞬間,內(nèi)部狀態(tài)鏡像被稱為處理器的架構(gòu)狀態(tài)。
當(dāng)將代碼執(zhí)行切換到運(yùn)行另一功能(例如,另一線程、進(jìn)程或程序)時(shí),則必須保存機(jī)器/處理器的狀態(tài),使得新功能可以利用內(nèi)部寄存器來(lái)建立新功能的新?tīng)顟B(tài)。當(dāng)終止新功能時(shí),則可以丟棄其狀態(tài),并且將恢復(fù)先前上下文的狀態(tài)并且執(zhí)行恢復(fù)。這種切換進(jìn)程被稱為上下文切換,并且通常包括10個(gè)或數(shù)百個(gè)循環(huán),尤其在采用大量寄存器(例如,64、128、256)和/或亂序執(zhí)行的現(xiàn)代架構(gòu)中。
在知曉線程的硬件架構(gòu)中,硬件支持用于有限數(shù)量的硬件支持的線程的多個(gè)上下文狀態(tài)是常見(jiàn)的。在這種情形下,硬件為每個(gè)支持的線程復(fù)制所有架構(gòu)狀態(tài)元素。這消除了當(dāng)執(zhí)行新線程時(shí)對(duì)上下文切換的需要。然而,這仍然有許多缺點(diǎn),即為在硬件中支持的每個(gè)附加的線程復(fù)制所有架構(gòu)狀態(tài)元素(即,寄存器)的面積、功率、以及復(fù)雜性。此外,如果軟件線程的數(shù)量超過(guò)被明確地支持的硬件線程的數(shù)量,則仍然必須執(zhí)行上下文切換。
隨著在要求大量線程的細(xì)粒度的基礎(chǔ)上需要并行性,這變得常見(jiàn)。具有復(fù)制上下文狀態(tài)硬件存儲(chǔ)的硬件知曉線程的架構(gòu)無(wú)助于非線程的軟件代碼,并且只為線程軟件減少上下文切換的數(shù)量。然而,這些線程通常為粗粒度的并行性構(gòu)建,并且導(dǎo)致啟動(dòng)和同步的繁重的軟件開(kāi)銷(xiāo),使得細(xì)粒度的并行性(例如功能調(diào)用和循環(huán)并行執(zhí)行)不具有高效的線程啟動(dòng)/自動(dòng)生成。描述的此類(lèi)開(kāi)銷(xiāo)伴隨著此類(lèi)代碼使用最新編譯器的自動(dòng)并行化或用于非顯示地/容易地并行的/線程化軟件代碼的用戶并行化技術(shù)的困難。
發(fā)明概述
在一個(gè)實(shí)施例中,本發(fā)明實(shí)現(xiàn)為用于不可知的運(yùn)行時(shí)架構(gòu)的系統(tǒng)。該系統(tǒng)包括系統(tǒng)仿真/虛擬化轉(zhuǎn)換器、應(yīng)用代碼轉(zhuǎn)換器、以及系統(tǒng)轉(zhuǎn)換器,其中系統(tǒng)仿真/虛擬化轉(zhuǎn)換器和應(yīng)用代碼轉(zhuǎn)換器實(shí)現(xiàn)系統(tǒng)仿真進(jìn)程,并且其中系統(tǒng)轉(zhuǎn)換器實(shí)現(xiàn)用于執(zhí)行來(lái)自訪客鏡像的代碼的系統(tǒng)轉(zhuǎn)換進(jìn)程。系統(tǒng)轉(zhuǎn)換器執(zhí)行jit優(yōu)化器,并且其中jit優(yōu)化器通過(guò)檢查來(lái)自相同線程的來(lái)自后續(xù)加載的相同地址來(lái)確保加載不在將要到相同地址的其他加載之前分派。
以上是概述并且因此必然地包括對(duì)細(xì)節(jié)的簡(jiǎn)化、概括和省略;因此,本領(lǐng)域技術(shù)人員將理解概述僅是說(shuō)明性的并且無(wú)論如何不旨在是限制性的。僅由權(quán)利要求書(shū)定義的本發(fā)明的其他方面、創(chuàng)造性特征、以及優(yōu)勢(shì)將在以下陳述的非限制性的詳細(xì)描述中變得顯而易見(jiàn)。
附圖說(shuō)明
本發(fā)明作為示例而非限制在所附附圖中示出,在附圖中,相似的附圖標(biāo)記指代相似的元件。
圖1示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的架構(gòu)不可知的運(yùn)行時(shí)系統(tǒng)的概覽示圖。
圖2示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了硬件加速的轉(zhuǎn)換/jit層的示圖。
圖3示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的硬件加速的運(yùn)行時(shí)轉(zhuǎn)換/jit層的更詳細(xì)的示圖。
圖4示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了用于實(shí)現(xiàn)系統(tǒng)仿真和系統(tǒng)轉(zhuǎn)換的組件的示圖。
圖5示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了訪客標(biāo)志架構(gòu)仿真的示圖。
圖6示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的統(tǒng)一寄存器組的示圖。
圖7示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的統(tǒng)一陰影寄存器組和支持推測(cè)架構(gòu)狀態(tài)和瞬態(tài)架構(gòu)狀態(tài)的流水線架構(gòu)1300的示圖。
圖8示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了運(yùn)行提前批處理/轉(zhuǎn)換進(jìn)程的示圖。
圖9示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出其中將訪客指令塊和它們的對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊存儲(chǔ)在高速緩存內(nèi)的方式的示例性硬件加速的轉(zhuǎn)換系統(tǒng)的圖示。
圖10示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的硬件加速的轉(zhuǎn)換系統(tǒng)的更詳細(xì)的示例。
圖11示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括雙范圍使用的第二使用模型的示圖。
圖12示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括不需要保存和在從瞬態(tài)上下文返回后不需要恢復(fù)先前上下文的瞬態(tài)上下文切換的第三使用模型的示圖。
圖13示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了其中指令序列中的異常是由于需要對(duì)后續(xù)代碼的變換的情形的示圖。
圖14示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括不需要保存和在從瞬態(tài)上下文返回后不需要恢復(fù)先前上下文的瞬態(tài)上下文切換的第四使用模型的示圖。
圖15示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出了優(yōu)化的在分支之前調(diào)度指令的示圖。
圖16示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出了優(yōu)化的在存儲(chǔ)之前調(diào)度加載的示圖。
圖17示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的存儲(chǔ)過(guò)濾算法的示圖。
圖18示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的在組成按順序從存儲(chǔ)器讀取的加載的存儲(chǔ)器一致性模型中的具有亂序加載的信號(hào)標(biāo)實(shí)現(xiàn)的示圖。
圖19示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的通過(guò)jit優(yōu)化的重排序過(guò)程的示圖。
圖20示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的通過(guò)jit優(yōu)化的重排序過(guò)程的示圖。
圖21示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的通過(guò)jit優(yōu)化的重排序過(guò)程的示圖。
圖22示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出通過(guò)jit優(yōu)化在存儲(chǔ)之前被重排序的加載的示圖。
圖23示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的加載和存儲(chǔ)指令分割的第一示圖。
圖24示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出其中在存儲(chǔ)器內(nèi)存儲(chǔ)clb功能結(jié)合代碼高速緩存和訪客指令到本機(jī)指令的映射的方式的示例性流程圖。
圖25示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的運(yùn)行提前運(yùn)行時(shí)訪客指令轉(zhuǎn)換/解碼過(guò)程的示圖。
圖26示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了具有訪客指令序列的轉(zhuǎn)換表和具有本機(jī)指令映射的本機(jī)映射表的示圖。
發(fā)明詳細(xì)描述
雖然結(jié)合一個(gè)實(shí)施例描述了本發(fā)明,發(fā)明不旨在被限制為本文中所陳述的特定形式。相反,旨在覆蓋如所附權(quán)利要求書(shū)定義的可被合理地包括在發(fā)明的范圍內(nèi)的此類(lèi)替代方案、修改以及等效方案。
在以下詳細(xì)描述中,陳述了諸如特定方法順序、結(jié)構(gòu)、元素和連接的多個(gè)具體細(xì)節(jié)。然而將理解不需要利用這些和其他具體細(xì)節(jié)以實(shí)踐本發(fā)明的實(shí)施例。在其他情形下,省略了公知的結(jié)構(gòu)、元素或連接,或者沒(méi)有以具體細(xì)節(jié)描述它們,以便避免不必要地模糊該描述。
本說(shuō)明書(shū)中對(duì)“一個(gè)實(shí)施例”或“一實(shí)施例”的引用意味著結(jié)合該實(shí)施例描述的特定特征、結(jié)構(gòu)或特性被包括在本發(fā)明的至少一個(gè)實(shí)施例中。出現(xiàn)在說(shuō)明書(shū)中的多個(gè)位置的短語(yǔ)“在一個(gè)實(shí)施例中”不必須全部指示同一實(shí)施例,也不是與其他實(shí)施例相互排斥的單獨(dú)的或替代的實(shí)施例。此外,描述了一些實(shí)施例可以呈現(xiàn)的并且其他實(shí)施例可以不呈現(xiàn)的各種特征。類(lèi)似地,描述了對(duì)于一些實(shí)施例可以是要求的并且對(duì)于其他實(shí)施例可以不是要求的各種要求。
接下來(lái)的詳細(xì)描述中的一些部分是按照對(duì)計(jì)算機(jī)存儲(chǔ)器內(nèi)的數(shù)據(jù)位的操作的程序、步驟、邏輯塊、處理和其他符號(hào)表示而給出的。這些描述和表示是數(shù)據(jù)處理領(lǐng)域內(nèi)技術(shù)人員使用的最有效地將其工作本質(zhì)傳達(dá)給本領(lǐng)域內(nèi)其它技術(shù)人員的手段。流程、計(jì)算機(jī)執(zhí)行步驟、邏輯塊、過(guò)程等等在本文中被一般地構(gòu)思成達(dá)到所要求結(jié)果的自洽步驟或指令序列。這些步驟需要對(duì)物理量進(jìn)行物理操控。通常但非必須,這些量采用計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的電信號(hào)或磁信號(hào)的形式,并且在計(jì)算機(jī)系統(tǒng)中能被存儲(chǔ)、傳輸、組合、比較、以及以其他方式操控。主要出于常見(jiàn)用途的考慮,將這些信號(hào)稱為位、值、要素、符號(hào)、字符、項(xiàng)、數(shù)字等被證明是方便的。
然而,應(yīng)當(dāng)記住,所有這些和類(lèi)似的術(shù)語(yǔ)用于與適當(dāng)?shù)奈锢砹筷P(guān)聯(lián),并且僅僅是應(yīng)用于這些量的方便的標(biāo)記。除非具體說(shuō)明否則,如從以下討論所顯而易見(jiàn)的,應(yīng)意識(shí)到,貫穿本發(fā)明使用諸如“處理”、“訪問(wèn)”、“寫(xiě)”、“存儲(chǔ)”、“復(fù)制”等術(shù)語(yǔ)的討論指的是計(jì)算機(jī)系統(tǒng)或類(lèi)似的電子計(jì)算設(shè)備的動(dòng)作和過(guò)程,它們將計(jì)算機(jī)系統(tǒng)寄存器和存儲(chǔ)器和其他計(jì)算機(jī)可讀介質(zhì)內(nèi)表示為物理(電子)量的數(shù)據(jù)處理和/或變換成計(jì)算機(jī)系統(tǒng)存儲(chǔ)器、寄存器或其他這種信息存儲(chǔ)、傳輸或顯示設(shè)備內(nèi)類(lèi)似地表示為物理量的其他數(shù)據(jù)。
本發(fā)明的實(shí)施例針對(duì)通用不可知的運(yùn)行時(shí)系統(tǒng)的實(shí)現(xiàn)方式。如本文中所使用的,本發(fā)明的實(shí)施例還被稱為“viscisa不可知的運(yùn)行時(shí)架構(gòu)”。以下詳細(xì)描述的圖1至30示出進(jìn)程和系統(tǒng)使用的用于實(shí)現(xiàn)通用不可知的運(yùn)行時(shí)系統(tǒng)的機(jī)制。
本發(fā)明的實(shí)施例針對(duì)利用軟件工業(yè)中的趨勢(shì)的優(yōu)勢(shì),即新的系統(tǒng)軟件愈發(fā)朝向運(yùn)行時(shí)編譯、優(yōu)化和執(zhí)行的趨勢(shì)。更傳統(tǒng)的更舊的軟件系統(tǒng)適于靜態(tài)編譯。
本發(fā)明的實(shí)施例有利地針對(duì)運(yùn)行時(shí)操縱的新的系統(tǒng)軟件。例如,最初流行的是java虛擬機(jī)運(yùn)行時(shí)實(shí)現(xiàn)方式。但是這些實(shí)現(xiàn)方式具有慢于本機(jī)執(zhí)行四到五倍之間的劣勢(shì)。最近,實(shí)現(xiàn)方式已經(jīng)更朝向java虛擬機(jī)實(shí)現(xiàn)方式加上本機(jī)代碼封裝(例如,慢于兩到三倍之間)。更近地,實(shí)現(xiàn)方式已經(jīng)朝向chrome和低級(jí)虛擬機(jī)運(yùn)行時(shí)實(shí)現(xiàn)方式(例如,比本機(jī)慢兩倍)。
本發(fā)明的實(shí)施例將實(shí)現(xiàn)具有擴(kuò)展運(yùn)行時(shí)支持并且將使用擴(kuò)展運(yùn)行時(shí)支持的架構(gòu)。本發(fā)明的實(shí)施例將具有高效地執(zhí)行訪客代碼(例如,包括運(yùn)行時(shí)訪客代碼)的能力。本發(fā)明的實(shí)施例能高效地將訪客/運(yùn)行時(shí)指令轉(zhuǎn)換為本機(jī)指令。本發(fā)明的實(shí)施例將能高效地將被轉(zhuǎn)換的訪客/運(yùn)行時(shí)代碼映射到本機(jī)代碼。此外,本發(fā)明的實(shí)施例將能高效地在運(yùn)行時(shí)優(yōu)化訪客代碼或本機(jī)代碼。
這些能力使本發(fā)明的實(shí)施例能非常適于架構(gòu)不可知的運(yùn)行時(shí)系統(tǒng)的時(shí)代。本發(fā)明的實(shí)施例將完整地便攜有運(yùn)行傳統(tǒng)應(yīng)用代碼的能力,并且這種代碼可以被優(yōu)化為如在其他架構(gòu)上運(yùn)行的兩倍快或比兩倍更快。
圖1示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的架構(gòu)不可知的運(yùn)行時(shí)系統(tǒng)的概覽示圖。圖1示出虛擬機(jī)運(yùn)行時(shí)jit(例如,及時(shí)編譯器)。虛擬機(jī)運(yùn)行時(shí)jit包括所示的如java的字節(jié)代碼、低級(jí)內(nèi)部表示代碼和虛擬機(jī)jit。虛擬機(jī)jit處理低級(jí)內(nèi)部表示代碼和如java的字節(jié)代碼。虛擬機(jī)jit的輸出是所示的isa特定代碼。
java代碼是獨(dú)立于機(jī)器的。編程者可以寫(xiě)一個(gè)程序,并且該程序應(yīng)在許多不同的機(jī)器上運(yùn)行。java虛擬機(jī)是isa特定的,每個(gè)機(jī)器架構(gòu)具有其自己的機(jī)器專(zhuān)用虛擬機(jī)。虛擬機(jī)的輸出是在運(yùn)行時(shí)動(dòng)態(tài)地生成的isa特定代碼。
圖1還示出緊密耦合到處理器的硬件加速的轉(zhuǎn)換/jit層。運(yùn)行時(shí)jit/轉(zhuǎn)換層允許處理器使用被預(yù)處理的java字節(jié)代碼,被預(yù)處理的java字節(jié)代碼不需要被虛擬機(jī)jit處理,從而顯著地加速代碼性能。運(yùn)行時(shí)jit/轉(zhuǎn)換層還允許處理器使用java字節(jié)代碼的低級(jí)內(nèi)部表示(例如,示出在虛擬機(jī)運(yùn)行時(shí)jit內(nèi)),低級(jí)內(nèi)部表示不需要被虛擬機(jī)/jit處理。
圖1還示出了由產(chǎn)生靜態(tài)二進(jìn)制執(zhí)行代碼的離線編譯器(例如,x86、arm等等)處理的c++代碼(例如,等等)。c++是一種獨(dú)立于機(jī)器的編程語(yǔ)言。編譯器是機(jī)器專(zhuān)用的(例如,x86、arm等等)。使用機(jī)器專(zhuān)用編譯器離線編譯程序,從而生成機(jī)器專(zhuān)用的靜態(tài)二進(jìn)制代碼。
圖1示出常規(guī)處理器上的常規(guī)操作系統(tǒng)怎樣執(zhí)行isa特定代碼,同時(shí)還示出能怎樣有利地經(jīng)由硬件加速的轉(zhuǎn)換/jit層和處理器來(lái)處理便攜代碼(例如,來(lái)自低級(jí)內(nèi)部表示)、被預(yù)處理的如java的字節(jié)代碼(例如,來(lái)自虛擬機(jī)運(yùn)行時(shí)jit)和靜態(tài)二進(jìn)制可執(zhí)行代碼(例如,來(lái)自編譯器)。
應(yīng)當(dāng)注意,硬件加速的轉(zhuǎn)換/jit層是用于實(shí)現(xiàn)本發(fā)明的實(shí)施例的優(yōu)勢(shì)的主機(jī)制。以下示圖示出操作硬件加速的轉(zhuǎn)換/jit層的方式。
圖2示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了硬件加速的轉(zhuǎn)換/jit層的示圖。圖2示圖示出虛擬機(jī)/高級(jí)運(yùn)行時(shí)/加載時(shí)間jit怎樣產(chǎn)生虛擬機(jī)高級(jí)指令表示、低級(jí)虛擬機(jī)指令表示以及訪客代碼應(yīng)用指令。這些都饋送到用于運(yùn)行時(shí)/加載時(shí)間訪客/虛擬機(jī)指令表示到本機(jī)指令表示的映射的進(jìn)程。這進(jìn)而被傳遞到所示的硬件加速的轉(zhuǎn)換/jit層,其中其被運(yùn)行時(shí)本機(jī)指令表示到指令組裝組件處理,并且然后被傳遞到用于代碼高速緩存分配和元數(shù)據(jù)創(chuàng)建的由硬件/軟件進(jìn)行的動(dòng)態(tài)的基于序列的塊構(gòu)建/映射組件。在圖2圖示中,硬件加速的轉(zhuǎn)換/jit層被示為耦合到具有序列高速緩存以存儲(chǔ)被動(dòng)態(tài)地轉(zhuǎn)換的序列的處理器。圖2示圖還示出運(yùn)行時(shí)本機(jī)指令序列形成組件可以怎樣直接地處理本機(jī)代碼,運(yùn)行時(shí)本機(jī)指令序列形成組件將產(chǎn)生的輸出發(fā)送到用于代碼高速緩存分配和元數(shù)據(jù)創(chuàng)建的由硬件/軟件進(jìn)行的動(dòng)態(tài)的基于序列的塊構(gòu)建/映射組件。
圖3示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的硬件加速的運(yùn)行時(shí)轉(zhuǎn)換/jit層的更詳細(xì)的示圖。圖3示出硬件加速的運(yùn)行時(shí)轉(zhuǎn)換/jit層怎樣包括促進(jìn)系統(tǒng)仿真和系統(tǒng)轉(zhuǎn)換的硬件組件。這些組件,諸如分散式標(biāo)志支持、clb/clbv等等,包括支持系統(tǒng)仿真和系統(tǒng)轉(zhuǎn)換工作的定制的硬件。它們使得運(yùn)行時(shí)軟件執(zhí)行以常規(guī)處理器的五倍或更多倍運(yùn)行。以下討論系統(tǒng)仿真和系統(tǒng)轉(zhuǎn)換。
圖4示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了用于實(shí)現(xiàn)系統(tǒng)仿真和系統(tǒng)轉(zhuǎn)換的組件的示圖。圖4還示出具有應(yīng)用代碼和os/系統(tǒng)特定代碼的鏡像。
本發(fā)明的實(shí)施例使用系統(tǒng)仿真和系統(tǒng)轉(zhuǎn)換以便于執(zhí)行應(yīng)用代碼和os/系統(tǒng)特定代碼。通過(guò)使用系統(tǒng)仿真,機(jī)器仿真/虛擬化與硬件支持的架構(gòu)不同的訪客系統(tǒng)架構(gòu)(包括系統(tǒng)和應(yīng)用代碼)。仿真由系統(tǒng)仿真/虛擬化轉(zhuǎn)換器(例如,其處理系統(tǒng)代碼)和應(yīng)用代碼轉(zhuǎn)換器(例如,其處理應(yīng)用代碼)提供。應(yīng)當(dāng)注意,應(yīng)用代碼轉(zhuǎn)換器示為描繪有裸金屬組件。
通過(guò)使用系統(tǒng)轉(zhuǎn)換,機(jī)器將具有訪客架構(gòu)和硬件支持的架構(gòu)之間的類(lèi)似的系統(tǒng)架構(gòu)特性的代碼進(jìn)行轉(zhuǎn)換,但架構(gòu)的非系統(tǒng)部分是不同的(即,應(yīng)用指令)。系統(tǒng)轉(zhuǎn)換器示為包括訪客應(yīng)用轉(zhuǎn)換器組件和裸金屬組件。系統(tǒng)轉(zhuǎn)換器還示為潛在地實(shí)現(xiàn)多次優(yōu)化過(guò)程。應(yīng)當(dāng)注意,通過(guò)提及術(shù)語(yǔ)系統(tǒng)轉(zhuǎn)換和仿真,本文中隨后的描述指的是可以使用圖4上所示的系統(tǒng)仿真路徑或系統(tǒng)轉(zhuǎn)換路徑的過(guò)程。
以下圖5到26圖示用于實(shí)現(xiàn)系統(tǒng)仿真和系統(tǒng)轉(zhuǎn)換以支持通用不可知的運(yùn)行時(shí)系統(tǒng)/viscisa不可知的運(yùn)行時(shí)架構(gòu)的各種進(jìn)程和系統(tǒng)。伴隨以下示圖中的進(jìn)程和系統(tǒng),硬件/軟件加速被提供給運(yùn)行時(shí)代碼,其進(jìn)而提供提高的架構(gòu)性能。這種硬件加速包括對(duì)分布式標(biāo)志的支持、clb、clbv、硬件訪客轉(zhuǎn)換表等等。
圖5示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了訪客標(biāo)志架構(gòu)仿真的示圖。圖5的左手側(cè)示出具有五個(gè)標(biāo)志的集中式標(biāo)志寄存器。圖5的右手側(cè)示出具有分布式標(biāo)志寄存器的分布式標(biāo)志架構(gòu),其中標(biāo)志分布在寄存器本身中。
在架構(gòu)仿真(例如,系統(tǒng)仿真或轉(zhuǎn)換)期間,分布式標(biāo)志架構(gòu)有必要仿真集中式訪客標(biāo)志架構(gòu)的行為。還可以通過(guò)使用不同于與數(shù)據(jù)寄存器相關(guān)聯(lián)的標(biāo)志字段的多個(gè)獨(dú)立的標(biāo)志寄存器來(lái)實(shí)現(xiàn)分布式標(biāo)志架構(gòu)。例如,數(shù)據(jù)寄存器可以被實(shí)現(xiàn)為r0到r15,而獨(dú)立的標(biāo)志寄存器可以被實(shí)現(xiàn)為f0到f15。該情形中的這些標(biāo)志寄存器不直接與數(shù)據(jù)寄存器相關(guān)聯(lián)。
圖6示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的統(tǒng)一寄存器組1201的示圖。如圖5所描繪的,統(tǒng)一寄存器組1201包括兩個(gè)部分1202-1203和條目選擇器1205。統(tǒng)一寄存器組1201實(shí)現(xiàn)對(duì)架構(gòu)推測(cè)的支持以用于硬件狀態(tài)更新。
統(tǒng)一寄存器組1201使能對(duì)優(yōu)化的陰影寄存器和提交的寄存器狀態(tài)管理進(jìn)程的實(shí)現(xiàn)。該進(jìn)程支持用于硬件狀態(tài)更新的架構(gòu)推測(cè)。在該進(jìn)程下,本發(fā)明的實(shí)施例可以支持陰影寄存器功能和提交的寄存器功能而不要求任何寄存器存儲(chǔ)器之間的交叉復(fù)制。例如,在一個(gè)實(shí)施例中,統(tǒng)一寄存器組1201的功能大部分由條目選擇器1205提供。在圖5的實(shí)施例中,每個(gè)寄存器組條目由兩組寄存器r&r’組成,r&r’分別來(lái)自部分1和部分2。在任意給定的時(shí)間,從每個(gè)條目讀取的寄存器是來(lái)自部分1的r或來(lái)自部分2的r’?;跅l目選擇器1205為每個(gè)條目存儲(chǔ)的x&y位的值,對(duì)于寄存器的每個(gè)條目存在4個(gè)不同的組合。
圖7示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的統(tǒng)一陰影寄存器組和支持推測(cè)架構(gòu)狀態(tài)和瞬態(tài)架構(gòu)狀態(tài)的流水線架構(gòu)1300的示圖。
圖7的實(shí)施例描繪包括架構(gòu)1300的組件,架構(gòu)1300支持包括架構(gòu)推測(cè)狀態(tài)的指令和結(jié)果并且支持包括瞬態(tài)狀態(tài)的指令和結(jié)果。如本文中所使用的,提交的架構(gòu)狀態(tài)包括可以被在處理器上執(zhí)行的程序訪問(wèn)(例如,讀和寫(xiě))的可見(jiàn)的寄存器和可見(jiàn)的存儲(chǔ)器。相反,推測(cè)的架構(gòu)狀態(tài)包括未被提交并且因此不是全局可見(jiàn)的寄存器和/或存儲(chǔ)器。
在一個(gè)實(shí)施例中,存在由架構(gòu)1300實(shí)現(xiàn)的四個(gè)使用模型。第一使用模型包括用于硬件狀態(tài)更新的架構(gòu)推測(cè)。
第二使用模型包括雙范圍使用。該使用模型應(yīng)用到取出2個(gè)線程到處理器中,其中一個(gè)線程在推測(cè)狀態(tài)中執(zhí)行,而另一線程在非推測(cè)狀態(tài)中執(zhí)行。在該使用模型中,兩個(gè)范圍被取出到機(jī)器中,并且同時(shí)存在于機(jī)器中。
第三使用模型包括jit(及時(shí))變換或?qū)χ噶顝囊环N形式到另一種形式的編譯。在該使用模型中,經(jīng)由軟件(例如,jit)完成對(duì)架構(gòu)狀態(tài)的重排序。第三使用模型可以應(yīng)用到例如訪客到本機(jī)指令變換、虛擬機(jī)到本機(jī)指令變換、或?qū)⒈緳C(jī)微指令重新映射/變換到更優(yōu)化的本機(jī)微指令。
第四使用模型包括不需要保存和在從瞬態(tài)上下文返回后不需要恢復(fù)先前上下文的瞬態(tài)上下文切換。該使用模型應(yīng)用到可以由于多種原因發(fā)生的上下文切換。一個(gè)此類(lèi)原因可以是例如經(jīng)由異常處理上下文對(duì)異常的精確處理。
重新參考圖7,架構(gòu)1300包括用于實(shí)現(xiàn)上文所述的四種使用模型的多個(gè)組件。統(tǒng)一陰影寄存器組1301包括:第一部分,提交的寄存器組1302;第二部分,陰影寄存器組1303;以及第三部分,最新指示符數(shù)組1304。包括推測(cè)引退存儲(chǔ)器緩沖器1342和最新指示符數(shù)組1340。架構(gòu)1300包括亂序架構(gòu),因此架構(gòu)1300進(jìn)一步包括重排序緩沖器和引退窗口1332。重排序和引退窗口1332進(jìn)一步包括機(jī)器引退指針1331、就緒位數(shù)組1334和每指令最新指示符(例如指示符1333)。
根據(jù)本發(fā)明的一個(gè)實(shí)施例進(jìn)一步詳細(xì)地描述第一使用模型,用于硬件狀態(tài)更新的架構(gòu)推測(cè)。如上所述,架構(gòu)1300包括亂序架構(gòu)。架構(gòu)1300的硬件能夠提交亂序指令結(jié)果(例如,亂序加載、亂序存儲(chǔ)和亂序寄存器更新)。架構(gòu)1300利用統(tǒng)一陰影寄存器組來(lái)支持提交的寄存器和陰影寄存器之間的推測(cè)執(zhí)行。此外,架構(gòu)1300利用推測(cè)加載存儲(chǔ)緩沖器1320和推測(cè)引退存儲(chǔ)器緩沖器1342來(lái)支持推測(cè)執(zhí)行。
架構(gòu)1300將使用這些組件結(jié)合重排序緩沖器和引退窗口1332來(lái)允許其狀態(tài)正確地引退到提交的寄存器1302和到可見(jiàn)存儲(chǔ)器1350,即使機(jī)器以亂序方式將那些狀態(tài)內(nèi)部地引退到了統(tǒng)一陰影寄存器組和引退存儲(chǔ)器緩沖器。例如,架構(gòu)將使用統(tǒng)一陰影寄存器組1301和推測(cè)存儲(chǔ)器1342基于異常發(fā)生或不發(fā)生來(lái)實(shí)現(xiàn)回滾和提交事件。該功能使寄存器狀態(tài)能亂序地引退到統(tǒng)一陰影寄存器組1301并且使推測(cè)引退存儲(chǔ)器緩沖器1342能亂序地引退到可見(jiàn)存儲(chǔ)器1350。隨著推測(cè)執(zhí)行繼續(xù)和亂序指令執(zhí)行繼續(xù),如果沒(méi)有誤預(yù)測(cè)分支并且沒(méi)有異常發(fā)生,則機(jī)器引退指針1331繼續(xù)直到觸發(fā)提交事件。提交事件通過(guò)使其提交點(diǎn)前進(jìn)而使得統(tǒng)一陰影寄存器組提交其內(nèi)容,并且使得推測(cè)引退存儲(chǔ)器緩沖器根據(jù)機(jī)器引退指針1331將其內(nèi)容提交到存儲(chǔ)器1350。
例如,考慮重排序緩沖器和引退窗口1332內(nèi)示出的指令1-7,就緒位數(shù)組1334在準(zhǔn)備好執(zhí)行的指令旁邊示出“x”并且在未準(zhǔn)備好執(zhí)行的指令旁邊示出“/”。因此,允許指令1、2、4和6亂序地繼續(xù)。隨后,如果異常發(fā)生,例如指令6分支被誤預(yù)測(cè),則可以回滾指令6之后發(fā)生的指令。替代地,如果沒(méi)有異常發(fā)生,可以通過(guò)相應(yīng)地移動(dòng)機(jī)器引退指針1331來(lái)提交所有指令1-7。
最新指示符數(shù)組1341、最新指示符數(shù)組1304和最新指示符1333用于允許亂序運(yùn)行。例如,即使指令2在指令5之前加載寄存器r4,一旦指令5準(zhǔn)備好發(fā)生,來(lái)自指令2的加載將被忽略。最新加載將根據(jù)最新指示符覆蓋更早的加載。
在重排序緩沖器和引退窗口1332內(nèi)發(fā)生分支預(yù)測(cè)或異常的事件中,觸發(fā)回滾事件。如上所述,在回滾的事件中,統(tǒng)一陰影寄存器組1301將回滾到其上一提交的點(diǎn),并且推測(cè)引退存儲(chǔ)器緩沖器1342將被轉(zhuǎn)儲(chǔ)清除。
圖8示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了運(yùn)行提前批處理/轉(zhuǎn)換過(guò)程的示圖。該圖圖示出其中訪客代碼經(jīng)歷轉(zhuǎn)換過(guò)程并且被變換到本機(jī)代碼的方式。該本機(jī)代碼進(jìn)而填充本機(jī)代碼高速緩存,其進(jìn)一步用于填充clb。該圖示出訪客代碼怎樣跳轉(zhuǎn)到先前未被轉(zhuǎn)換的地址(例如,5000)。轉(zhuǎn)換過(guò)程然后將該訪客代碼改變到所示的對(duì)應(yīng)的本機(jī)代碼(例如,包括訪客分支8000和訪客分支6000)。訪客分支被轉(zhuǎn)換到代碼高速緩存中的本機(jī)分支(例如,本機(jī)分支g8000和本機(jī)分支g6000)。機(jī)器知曉用于本機(jī)分支的程序計(jì)數(shù)器將與用于訪客分支的程序計(jì)數(shù)器不同。這通過(guò)本機(jī)代碼高速緩存中的記號(hào)(例如,x、y和z)示出。隨著這些變換完成,將所得的變換存儲(chǔ)在clb中以供未來(lái)使用。該功能極大地加速訪客代碼到本機(jī)代碼的變換。
圖9示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出其中將訪客指令塊和它們的對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊存儲(chǔ)在高速緩存內(nèi)的方式的示例性硬件加速的轉(zhuǎn)換系統(tǒng)500的圖示。如圖9所示,轉(zhuǎn)換后備緩沖器506用于緩存訪客和本機(jī)塊之間的地址映射;使得通過(guò)到處理器508的低等待時(shí)間可用性來(lái)訪問(wèn)最頻繁遇到的本機(jī)轉(zhuǎn)換塊。
圖9示圖示出其中將最頻繁遇到的本機(jī)轉(zhuǎn)換塊維持在高速低等待時(shí)間高速緩存即轉(zhuǎn)換后備緩沖器506內(nèi)的方式。圖9中描繪的組件實(shí)現(xiàn)硬件加速的轉(zhuǎn)換處理以實(shí)現(xiàn)高得多的水平的性能。
訪客取出邏輯單元502起到從系統(tǒng)存儲(chǔ)器501取出訪客指令的基于硬件的訪客指令取出單元的作用。給定應(yīng)用的訪客指令駐留在系統(tǒng)存儲(chǔ)器501內(nèi)。程序啟動(dòng)之后,基于硬件的訪客取出邏輯單元502開(kāi)始將訪客指令預(yù)取到訪客取出緩沖器503中。訪客取出緩沖器507累積訪客指令并且將它們組裝到訪客指令塊中。通過(guò)使用轉(zhuǎn)換表504將這些訪客指令塊轉(zhuǎn)換到對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊。將經(jīng)過(guò)轉(zhuǎn)換的本機(jī)指令累積在本機(jī)轉(zhuǎn)換緩沖器505內(nèi),直到本機(jī)轉(zhuǎn)換塊是完整的。然后將本機(jī)轉(zhuǎn)換塊傳送到本機(jī)高速緩存507并且將映射存儲(chǔ)在轉(zhuǎn)換后備緩沖器506中。本機(jī)高速緩存507然后用于將本機(jī)指令饋送到處理器508以供執(zhí)行。在一個(gè)實(shí)施例中,訪客取出邏輯單元502實(shí)現(xiàn)的功能由訪客取出邏輯狀態(tài)機(jī)產(chǎn)生。
隨著該過(guò)程繼續(xù),轉(zhuǎn)換后備緩沖器506由訪客塊到本機(jī)塊的地址映射填充。轉(zhuǎn)換后備緩沖器506使用一種或多種算法(例如,近期最少使用的,等等)來(lái)確保將更頻繁遇到的塊映射保持在緩沖器內(nèi),而將極少遇到的塊映射從緩沖器驅(qū)逐。以這種方式,將熱本機(jī)轉(zhuǎn)換塊映射存儲(chǔ)在轉(zhuǎn)換后備緩沖器506內(nèi)。此外,應(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ǔ)結(jié)尾訪客到本機(jī)地址的映射。該方面還保留clb的小的容量效率。
訪客取出邏輯502依賴于轉(zhuǎn)換后備緩沖器506來(lái)確定是否已經(jīng)將來(lái)自訪客指令塊的地址轉(zhuǎn)換到本機(jī)轉(zhuǎn)換塊。如上所述,本發(fā)明的實(shí)施例為轉(zhuǎn)換處理提供硬件加速。因此,在從系統(tǒng)存儲(chǔ)器501取出訪客地址用于新轉(zhuǎn)換之前,訪客取出邏輯502將依賴于轉(zhuǎn)換后備緩沖器506來(lái)確定預(yù)先存在的本機(jī)轉(zhuǎn)換塊映射。
在一個(gè)實(shí)施例中,通過(guò)訪客地址范圍或通過(guò)單獨(dú)訪客地址來(lái)索引轉(zhuǎn)換后備緩沖器。訪客地址范圍是已經(jīng)被轉(zhuǎn)換到本機(jī)轉(zhuǎn)換塊的訪客指令塊的地址的范圍。經(jīng)由本機(jī)轉(zhuǎn)換塊映射的對(duì)應(yīng)的訪客指令塊的對(duì)應(yīng)的訪客地址范圍來(lái)索引轉(zhuǎn)換后備緩沖器存儲(chǔ)的本機(jī)轉(zhuǎn)換塊映射。因此,訪客取出邏輯可以將訪客地址與訪客地址范圍或被轉(zhuǎn)換的塊的單獨(dú)的訪客地址比較,它們的映射被保持在轉(zhuǎn)換后備緩沖器506中以確定預(yù)先存在的本機(jī)轉(zhuǎn)換塊是否駐留在存儲(chǔ)在本機(jī)高速緩存507中的或圖6的代碼高速緩存中的內(nèi)容內(nèi)。如果預(yù)先存在的本機(jī)轉(zhuǎn)換塊是在本機(jī)高速緩存中或代碼高速緩存中,則將對(duì)應(yīng)的本機(jī)轉(zhuǎn)換指令從這些高速緩存直接轉(zhuǎn)發(fā)到處理器。
以此方式,熱訪客指令塊(例如,被頻繁地執(zhí)行的訪客指令塊)具有維持在高速低等待時(shí)間轉(zhuǎn)換后備緩沖器506內(nèi)的它們的對(duì)應(yīng)的熱本機(jī)轉(zhuǎn)換塊映射。隨著塊被觸及,合適的替換策略確保熱塊映射保持在轉(zhuǎn)換后備緩沖器內(nèi)。因此,訪客取出邏輯502可以快速地標(biāo)識(shí)先前是否已經(jīng)轉(zhuǎn)換了被請(qǐng)求的訪客地址,并且可以將先前被轉(zhuǎn)換的本機(jī)指令直接轉(zhuǎn)發(fā)到本機(jī)高速緩存507以供處理器508執(zhí)行。這些方面節(jié)省了大量循環(huán),因?yàn)榈较到y(tǒng)存儲(chǔ)器的行程可以耗費(fèi)40到50個(gè)循環(huán)或更多循環(huán)。這些屬性(例如,clb、訪客分支序列預(yù)測(cè)、訪客&本機(jī)分支緩沖器、先前的本機(jī)緩存)允許本發(fā)明的實(shí)施例的硬件加速功能實(shí)現(xiàn)訪客應(yīng)用的應(yīng)用性能達(dá)到可比的本機(jī)應(yīng)用的應(yīng)用性能的80%到100%內(nèi)。
在一個(gè)實(shí)施例中,獨(dú)立于來(lái)自處理器508的訪客指令請(qǐng)求,訪客取出邏輯502連續(xù)地預(yù)取訪客指令用于轉(zhuǎn)換??梢詫⒈緳C(jī)轉(zhuǎn)換塊累積在系統(tǒng)存儲(chǔ)器501中的轉(zhuǎn)換緩沖器“代碼高速緩存”內(nèi)以用于那些較不頻繁使用的塊。轉(zhuǎn)換后備緩沖器506還保持最頻繁使用的映射。因此,如果被請(qǐng)求的訪客地址不映射到轉(zhuǎn)換后備緩沖器中的訪客地址,則訪客取出邏輯可以檢查系統(tǒng)存儲(chǔ)器501以確定訪客地址是否對(duì)應(yīng)于其中存儲(chǔ)的本機(jī)轉(zhuǎn)換塊。
在一個(gè)實(shí)施例中,轉(zhuǎn)換后備緩沖器506實(shí)現(xiàn)為高速緩存并且利用高速緩存一致性協(xié)議來(lái)維持與存儲(chǔ)在更高級(jí)高速緩存和系統(tǒng)存儲(chǔ)器501中的大得多的轉(zhuǎn)換緩沖器的一致性。還將存儲(chǔ)在轉(zhuǎn)換后備緩沖器506內(nèi)的本機(jī)指令映射寫(xiě)回到更高級(jí)高速緩存和系統(tǒng)存儲(chǔ)器501。到系統(tǒng)存儲(chǔ)器的寫(xiě)回維持一致性。因此,高速緩存管理協(xié)議可以用于確保將熱本機(jī)轉(zhuǎn)換塊映射存儲(chǔ)在轉(zhuǎn)換后備緩沖器506內(nèi)并且將冷本機(jī)轉(zhuǎn)換映射塊存儲(chǔ)在系統(tǒng)存儲(chǔ)器501中。因此,大得多的形式的轉(zhuǎn)換緩沖器506駐留在系統(tǒng)存儲(chǔ)器501中。
應(yīng)當(dāng)注意,在一個(gè)實(shí)施例中,示例性硬件加速的轉(zhuǎn)換系統(tǒng)500可以用于實(shí)現(xiàn)多個(gè)不同的虛擬存儲(chǔ)方案。例如,其中將訪客指令塊和它們對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊存儲(chǔ)在高速緩存內(nèi)的方式可以用于支持虛擬存儲(chǔ)方案。類(lèi)似地,用于緩存訪客和本機(jī)塊之間的地址映射的轉(zhuǎn)換后備緩沖器506可以用于支持虛擬存儲(chǔ)方案(例如,對(duì)虛擬存儲(chǔ)器到物理存儲(chǔ)器映射的管理)。
在一個(gè)實(shí)施例中,圖9架構(gòu)實(shí)現(xiàn)使用可以接收多個(gè)不同的指令架構(gòu)作為輸入的靈活的轉(zhuǎn)換過(guò)程的虛擬指令集處理器/計(jì)算機(jī)。在這種虛擬指令集處理器中,將處理器的前端實(shí)現(xiàn)為使得其可以是軟件控制的,同時(shí)利用硬件加速的轉(zhuǎn)換處理的優(yōu)勢(shì)來(lái)傳遞高得多的水平的性能。使用這種實(shí)現(xiàn)方式,可以處理和轉(zhuǎn)換不同的訪客架構(gòu),同時(shí)每個(gè)訪客架構(gòu)接收硬件加速的益處以享有高得多的水平的性能。示例訪客架構(gòu)包括java或javascript、x86、mips、sparc等等。在一個(gè)實(shí)施例中,“訪客架構(gòu)”可以是本機(jī)指令(例如,來(lái)自本機(jī)應(yīng)用/宏操作)并且轉(zhuǎn)換過(guò)程產(chǎn)生優(yōu)化本機(jī)指令(例如,優(yōu)化的本機(jī)指令/微操作)。軟件控制的前端可以為在處理器上執(zhí)行的應(yīng)用提供大程度的靈活性。如上所述,硬件加速可以實(shí)現(xiàn)近本機(jī)硬件速度以供訪客應(yīng)用的訪客指令的執(zhí)行。
圖10示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的硬件加速的轉(zhuǎn)換系統(tǒng)600的更詳細(xì)的示例。系統(tǒng)600與如上所述的系統(tǒng)500以基本相同的方式執(zhí)行。然而,系統(tǒng)600示出描述示例性硬件加速過(guò)程的功能的附加細(xì)節(jié)。
系統(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捕捉來(lái)自共享硬件高速緩存607的那些最頻繁觸及的訪客指令。
訪客取出邏輯620從訪客代碼602中預(yù)取訪客指令。訪客取出邏輯620與tlb609對(duì)接,tlb609起到將虛擬訪客地址變換到對(duì)應(yīng)的物理訪客地址的轉(zhuǎn)換后備緩沖器的作用。tlb609可以將命中直接轉(zhuǎn)發(fā)到訪客硬件高速緩存610。將訪客取出邏輯620取出的訪客指令存儲(chǔ)在訪客取出緩沖器611中。
轉(zhuǎn)換表612和613包括替換字段和控制字段,并且起到用于將接收自訪客取出緩沖器611的訪客指令變換到本機(jī)指令的多級(jí)轉(zhuǎn)換表的作用。
復(fù)用器614和615將被轉(zhuǎn)換的本機(jī)指令傳送到本機(jī)轉(zhuǎn)換緩沖器616。本機(jī)轉(zhuǎn)換緩沖器616累積被轉(zhuǎn)換的本機(jī)指令以組裝本機(jī)轉(zhuǎn)換塊。然后將這些本機(jī)轉(zhuǎn)換塊傳送到本機(jī)硬件高速緩存600并且將映射保持在轉(zhuǎn)換后備緩沖器630中。
轉(zhuǎn)換后備緩沖器630包括數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)用于被轉(zhuǎn)換的塊進(jìn)入點(diǎn)地址631、本機(jī)地址632、被轉(zhuǎn)換的地址范圍633、代碼高速緩存和轉(zhuǎn)換后備緩沖器管理位634以及動(dòng)態(tài)分支偏移位635。訪客分支地址631和本機(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)。
如系統(tǒng)500,系統(tǒng)600試圖確保熱塊映射駐留在高速低等待時(shí)間轉(zhuǎn)換后備緩沖器630內(nèi)。因此,當(dāng)取出邏輯640或訪客取出邏輯620試圖取出訪客地址時(shí),在一個(gè)實(shí)施例中,取出邏輯640可以首先檢查訪客地址以確定對(duì)應(yīng)的本機(jī)轉(zhuǎn)換塊是否駐留在代碼高速緩存606內(nèi)。這允許確定被請(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)換過(guò)程。以此方式,本發(fā)明的實(shí)施例可以實(shí)現(xiàn)運(yùn)行提前訪客取出和解碼、表查找以及指令字段組裝。
圖11示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括雙范圍使用的第二使用模型的示圖1400。如上所述,該使用模型應(yīng)用到取出2個(gè)線程到處理器中,其中一個(gè)線程在推測(cè)狀態(tài)中執(zhí)行,而另一線程在非推測(cè)狀態(tài)中執(zhí)行。在該使用模型中,兩個(gè)范圍被取出到機(jī)器中并且同時(shí)存在于機(jī)器中。
如圖1400所示,已經(jīng)將2個(gè)范圍/跟蹤1401和1402取出到機(jī)器中。在該示例中,范圍/跟蹤1401是當(dāng)前的非推測(cè)范圍/跟蹤。范圍/跟蹤1402是新的推測(cè)范圍/跟蹤。架構(gòu)1300使推測(cè)和臨時(shí)狀態(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模式中,對(duì)提交的寄存器進(jìn)行讀和寫(xiě),并且存儲(chǔ)器寫(xiě)去往存儲(chǔ)器。在sr/sm模式中,寄存器寫(xiě)繼續(xù)到sssr,并且寄存器讀來(lái)自最新的寫(xiě),同時(shí)存儲(chǔ)器寫(xiě)入引退存儲(chǔ)器緩沖器(smb)。
一個(gè)示例將是被排序的當(dāng)前范圍(例如,1401)和推測(cè)的下一范圍(例如,1402)。當(dāng)依賴性將是重要的時(shí),兩個(gè)范圍都可以在機(jī)器中執(zhí)行,因?yàn)橄乱环秶诋?dāng)前范圍之后取出。例如,在范圍1401中,在“將sssr提交到cr”處,寄存器和存儲(chǔ)器直到該點(diǎn)是在cr模式中,而代碼在cr/cm模式中執(zhí)行。在范圍1402中,代碼在sr和sm模式中執(zhí)行,并且如果異常發(fā)生可以回滾。以此方式,兩個(gè)范圍在機(jī)器中同時(shí)執(zhí)行,但是每個(gè)范圍在不同的模式中執(zhí)行,并且相應(yīng)地讀和寫(xiě)寄存器。
圖12示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括不需要保存和在從瞬態(tài)上下文返回后不需要恢復(fù)先前上下文的瞬態(tài)上下文切換的第三使用模型的示圖。如上所述,該使用模型應(yīng)用到可以由于多種原因發(fā)生的上下文切換。一個(gè)此類(lèi)原因可以是例如經(jīng)由異常處理上下文對(duì)異常的精確處理。
當(dāng)機(jī)器正執(zhí)行被變換的代碼并且其遇到上下文切換(例如,被變換的代碼內(nèi)部的異?;蛉绻枰儞Q后續(xù)代碼)時(shí),第三使用模型發(fā)生。在當(dāng)前范圍中(例如,在異常之前),sssr和smb還未將它們的推測(cè)狀態(tài)提交到訪客架構(gòu)狀態(tài)。當(dāng)前狀態(tài)正在sr/sm模式中運(yùn)行。當(dāng)異常發(fā)生,機(jī)器切換到異常處理程序(例如,轉(zhuǎn)換器)以精確地處理異常。插入回滾,其使得寄存器狀態(tài)回滾到cr,并且轉(zhuǎn)儲(chǔ)清除smb。轉(zhuǎn)換器代碼將在sr/cm模式中運(yùn)行。在轉(zhuǎn)換器代碼的執(zhí)行期間,smb正將其內(nèi)容引退到存儲(chǔ)器而無(wú)需等待提交事件。將寄存器寫(xiě)入到sssr而無(wú)需更新cr。隨后,當(dāng)完成轉(zhuǎn)換器并且在切換回執(zhí)行被轉(zhuǎn)換的代碼之前,其回滾sssr(例如,將sssr回滾到cr)。在該過(guò)程期間,最后提交的寄存器狀態(tài)在cr中。
這在示圖1500中示出,其中先前范圍/跟蹤1501已經(jīng)從sssr提交到cr中。當(dāng)前范圍/跟蹤1502是推測(cè)的。寄存器和存儲(chǔ)器以及該范圍是推測(cè)的,并且執(zhí)行在sr/sm模式下發(fā)生。在該示例中,異常在范圍1502中發(fā)生,并且需要按變換之前的原始順序重新執(zhí)行代碼。在該點(diǎn)處,回滾sssr并且轉(zhuǎn)儲(chǔ)清除smb。然后jit代碼1503執(zhí)行。jit代碼將sssr回滾到范圍1501的末尾并且轉(zhuǎn)儲(chǔ)清除smb。jit的執(zhí)行在sc/cm模式下。當(dāng)完成jit時(shí),將sssr回滾到cr,并且當(dāng)前范圍/跟蹤1504然后在cr/cm模式中按原始變換順序重新執(zhí)行。以此方式,按準(zhǔn)確的當(dāng)前順序精確地處理異常。
圖13示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了其中指令序列中的異常是由于需要對(duì)后續(xù)代碼的變換的情形的示圖1600。如示圖1600所示,先前范圍/跟蹤1601以到未被變換的目的地的遠(yuǎn)跳轉(zhuǎn)結(jié)束。在跳轉(zhuǎn)到遠(yuǎn)跳轉(zhuǎn)目的地之前,將sssr提交到cr。jit代碼1602然后執(zhí)行以變換在遠(yuǎn)跳轉(zhuǎn)目的地的訪客指令(例如,以建立新的本機(jī)指令的跟蹤)。jit的執(zhí)行在sr/cm模式下。在jit執(zhí)行結(jié)束時(shí),將寄存器狀態(tài)從sssr回滾到cr,并且被jit變換了的新范圍/跟蹤1603開(kāi)始執(zhí)行。新范圍/跟蹤在sr/sm模式中從先前范圍/跟蹤1601的上一提交的點(diǎn)繼續(xù)執(zhí)行。
圖14示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的包括不需要保存和在從瞬態(tài)上下文返回后不需要恢復(fù)先前上下文的瞬態(tài)上下文切換的第四使用模型的示圖1700。如上所述,該使用模型應(yīng)用到可以由于多種原因發(fā)生的上下文切換。一個(gè)此類(lèi)原因可以是例如經(jīng)由異常處理上下文處理輸入或輸出。
示圖1700示出其中在cr/cm模式下執(zhí)行的先前范圍/跟蹤1701以功能f1的調(diào)用結(jié)束的情形。將直到該點(diǎn)的寄存器狀態(tài)從sssr提交到cr。功能f1范圍/跟蹤1702然后開(kāi)始在sr/cm模式下推測(cè)地執(zhí)行。功能f1然后以返回到主范圍/跟蹤1703結(jié)束。在該點(diǎn)處,將寄存器狀態(tài)從sssr回滾到cr。主范圍/跟蹤1703恢復(fù)在cr/cm模式中執(zhí)行。
圖15示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出了優(yōu)化的在分支之前調(diào)度指令的示圖。如圖15所示,在傳統(tǒng)及時(shí)編譯器示例旁邊描繪了硬件優(yōu)化的示例。圖15的左手側(cè)示出原始未優(yōu)化的代碼,包括未使用分支偏移,“分支c到l1”。圖15的中間欄示出傳統(tǒng)及時(shí)編譯器優(yōu)化,其中將寄存器重命名并且在分支之前移動(dòng)指令。在該示例中,及時(shí)編譯器插入補(bǔ)償代碼以解釋其中分支偏移決定是錯(cuò)誤的(例如,其中與未被使用相反,分支實(shí)際上被使用了)那些情況。相反,圖15的右欄示出硬件展開(kāi)的優(yōu)化。在該情形中,將寄存器重命名并且在分支之前移動(dòng)指令。然而,應(yīng)當(dāng)注意,未插入補(bǔ)償代碼。硬件保持對(duì)是分支偏移決定是真或假的跟蹤。在被錯(cuò)誤地預(yù)測(cè)的分支的情形下,硬件自動(dòng)回滾到其狀態(tài)以執(zhí)行正確的指令序列。硬件優(yōu)化器解決方案能夠避免對(duì)補(bǔ)償代碼的使用,因?yàn)樵谄渲蟹种П徽`預(yù)測(cè)的這些情形下,硬件跳轉(zhuǎn)到存儲(chǔ)器中的原始代碼并且執(zhí)行來(lái)自此處的正確序列,同時(shí)轉(zhuǎn)儲(chǔ)清除被誤預(yù)測(cè)的指令序列。
圖16示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出了優(yōu)化的在存儲(chǔ)之前調(diào)度加載的示圖。如圖16所示,在傳統(tǒng)及時(shí)編譯器示例旁邊描繪了硬件優(yōu)化的示例。圖16的左手側(cè)示出原始未優(yōu)化的代碼,包括存儲(chǔ),“r3<-ld[r5]”。圖16的中間欄示出傳統(tǒng)及時(shí)編譯器優(yōu)化,其中將寄存器重命名并且移動(dòng)加載使其在存儲(chǔ)之前。在該示例中,及時(shí)編譯器插入補(bǔ)償代碼以解釋其中加載指令的地址對(duì)存儲(chǔ)指令的地址設(shè)定別名(例如,其中使加載在存儲(chǔ)之前的移動(dòng)是不合適的)的那些情況。相反,圖16的右欄示出硬件展開(kāi)的優(yōu)化。在該情形中,將寄存器重命名并且也移動(dòng)加載使其在存儲(chǔ)之前。然而,應(yīng)當(dāng)注意,未插入補(bǔ)償代碼。在其中移動(dòng)加載使其在存儲(chǔ)之前是錯(cuò)誤的情形中,硬件自動(dòng)地回滾到其狀態(tài)以執(zhí)行正確的指令序列。硬件優(yōu)化器解決方案能夠避免對(duì)補(bǔ)償代碼的使用,因?yàn)樵谄渲械刂穭e名-檢查分支被誤預(yù)測(cè)的這些情形下,硬件跳轉(zhuǎn)到存儲(chǔ)器中的原始代碼并且執(zhí)行來(lái)自此處的正確序列,同時(shí)轉(zhuǎn)儲(chǔ)清除被誤預(yù)測(cè)的指令序列。在該情形下,序列假定沒(méi)有重命名。應(yīng)當(dāng)注意,在一個(gè)實(shí)施例中,圖16中圖示的功能可以由指令調(diào)度和優(yōu)化器組件實(shí)現(xiàn)。類(lèi)似地,應(yīng)當(dāng)注意,在一個(gè)實(shí)施例中,圖16中圖示的功能可以由軟件優(yōu)化器實(shí)現(xiàn)。
此外,對(duì)于動(dòng)態(tài)展開(kāi)的序列,應(yīng)當(dāng)注意指令可以通過(guò)使用重命名來(lái)經(jīng)過(guò)先前路徑預(yù)測(cè)的分支(例如,動(dòng)態(tài)構(gòu)建的分支)。在非動(dòng)態(tài)預(yù)測(cè)的分支的情形中,對(duì)指令的移動(dòng)應(yīng)當(dāng)考慮分支的范圍??梢詫⒀h(huán)展開(kāi)到要求的程度,并且可以跨整個(gè)序列應(yīng)用優(yōu)化。例如,這可以通過(guò)重命名跨分支移動(dòng)的指令的目的地寄存器來(lái)實(shí)現(xiàn)。該特征的一個(gè)益處是不需要補(bǔ)償代碼或?qū)Ψ种У姆秶膹V泛分析的事實(shí)。該特征因此極大地加速和簡(jiǎn)化優(yōu)化過(guò)程。
圖17示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的存儲(chǔ)過(guò)濾算法的示圖。圖17實(shí)施例的目標(biāo)是過(guò)濾存儲(chǔ)以防止所有存儲(chǔ)必須針對(duì)加載隊(duì)列中的所有條目進(jìn)行檢查。
存儲(chǔ)監(jiān)聽(tīng)用于地址匹配的高速緩存以維持一致性。如果線程/核x加載來(lái)自高速緩存行的讀,則其標(biāo)記其從中加載了數(shù)據(jù)的高速緩存行的部分。在另一線程/核y存儲(chǔ)監(jiān)聽(tīng)高速緩存之后,如果任何此類(lèi)存儲(chǔ)與該高速緩存行部分重疊,則為該線程/核x的加載引起誤預(yù)測(cè)。
用于過(guò)濾這些監(jiān)聽(tīng)的一個(gè)解決方案是跟蹤加載隊(duì)列條目的引用。在該情形中,存儲(chǔ)不需要監(jiān)聽(tīng)加載隊(duì)列。如果存儲(chǔ)與訪問(wèn)掩碼具有匹配,則獲得自引用跟蹤器的該加載隊(duì)列條目將使得該加載條目誤預(yù)測(cè)。
在另一解決方案(其中不存在引用跟蹤器)中,如果存儲(chǔ)與訪問(wèn)掩碼具有匹配,則該存儲(chǔ)地址將監(jiān)視加載隊(duì)列條目并且將使得匹配的加載條目誤預(yù)測(cè)。
在兩種解決方案中,一旦從高速緩存行讀取加載,其設(shè)定相應(yīng)的訪問(wèn)掩碼位。當(dāng)該加載引退時(shí),其重置該位。
圖18示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的在組成按順序從存儲(chǔ)器讀取的加載的存儲(chǔ)器一致性模型中的具有亂序加載的信號(hào)標(biāo)(semaphore)實(shí)現(xiàn)的示圖。如本文中所使用的,術(shù)語(yǔ)信號(hào)標(biāo)指代為多個(gè)線程/核到公共資源提供訪問(wèn)控制的數(shù)據(jù)構(gòu)造。
在圖18實(shí)施例中,訪問(wèn)掩碼用于控制多個(gè)線程/核對(duì)存儲(chǔ)器資源的訪問(wèn)。訪問(wèn)掩碼通過(guò)跟蹤高速緩存行的哪些字具有待決加載而起作用。當(dāng)訪問(wèn)高速緩存行的字時(shí)亂序加載設(shè)定掩碼位,并且當(dāng)該加載引退時(shí)清除掩碼位。如果當(dāng)掩碼位被設(shè)定時(shí)來(lái)自另一線程/核的存儲(chǔ)寫(xiě)入該字,則其將通知對(duì)應(yīng)于該加載(例如,經(jīng)由跟蹤器)的加載隊(duì)列條目成為誤預(yù)測(cè)的/轉(zhuǎn)儲(chǔ)清除的或與其從屬指令一起重試的。訪問(wèn)掩碼還跟蹤線程/核。
以此方式,訪問(wèn)掩碼確保存儲(chǔ)器一致性規(guī)則被正確地實(shí)現(xiàn)。存儲(chǔ)器一致性規(guī)則規(guī)定存儲(chǔ)按順序更新存儲(chǔ)器以及加載按順序從存儲(chǔ)器讀取以便于該信號(hào)標(biāo)跨兩個(gè)核/線程工作。因此,核1和核2執(zhí)行的代碼將被正確地執(zhí)行,其中它們都訪問(wèn)存儲(chǔ)器位置“標(biāo)志”和“數(shù)據(jù)”。
圖19示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的通過(guò)jit優(yōu)化的重排序過(guò)程的示圖。圖19描繪存儲(chǔ)器一致性排序(例如,加載排序之前的加載)。加載不能在將要到相同地址的其他加載之前分派。例如,加載將檢查來(lái)自相同線程的后續(xù)加載的相同地址。
在一個(gè)實(shí)施例中,檢查所有后續(xù)加載以找出地址匹配。為了使該解決方案起作用,加載c檢查在引退之后直到原始加載c位置的點(diǎn)停留在存儲(chǔ)隊(duì)列(例如,或其擴(kuò)展)中的需要。加載檢查擴(kuò)展尺寸可以由在被重排序的加載(例如,加載c)可以跳轉(zhuǎn)到其之前的加載的數(shù)量上設(shè)置限制來(lái)確定。應(yīng)當(dāng)注意,該解決方案只在部分存儲(chǔ)排序存儲(chǔ)器一致性模型(例如,arm一致性模型)下起作用。
圖20示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的通過(guò)jit優(yōu)化的重排序過(guò)程的示圖。加載不能在將要到相同地址的其他加載之前分派。例如,加載將檢查來(lái)自相同線程的后續(xù)加載的相同地址。圖20示出其他線程存儲(chǔ)怎樣針對(duì)整個(gè)加載隊(duì)列和監(jiān)視器擴(kuò)展進(jìn)行檢查。監(jiān)視器由原始加載設(shè)置,并且由跟隨原始加載位置的后續(xù)指令清除。應(yīng)當(dāng)注意,該解決方案在全部和部分存儲(chǔ)排序存儲(chǔ)器一致性模型(例如,x86和arm一致性模型)下均起作用。
圖21示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的通過(guò)jit優(yōu)化的重排序過(guò)程的示圖。加載不能在將要到相同地址的其他加載之前分派。本發(fā)明的一個(gè)實(shí)施例實(shí)現(xiàn)加載引退擴(kuò)展。在該實(shí)施例中,其他線程存儲(chǔ)針對(duì)整個(gè)加載/存儲(chǔ)隊(duì)列(例如,和擴(kuò)展)進(jìn)行檢查。
在實(shí)現(xiàn)該解決方案中,在引退之后直到原始加載c位置的點(diǎn),引退的所有加載需要停留在加載隊(duì)列(例如,或其擴(kuò)展)中。當(dāng)來(lái)自其他線程的存儲(chǔ)到來(lái)時(shí)(線程0),其將cam匹配整個(gè)加載隊(duì)列(例如,包括擴(kuò)展)。擴(kuò)展尺寸可以由在被重排序的加載(加載c)可以跳轉(zhuǎn)到其之前(例如,通過(guò)使用8個(gè)條目擴(kuò)展)的加載的數(shù)量上設(shè)置限制來(lái)確定。應(yīng)當(dāng)注意,該解決方案在全部和部分存儲(chǔ)排序存儲(chǔ)器一致性模型(例如,x86和arm一致性模型)下均起作用。
圖22示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出通過(guò)jit優(yōu)化在存儲(chǔ)之前被重排序的加載的示圖。圖22利用相同線程內(nèi)的存儲(chǔ)到加載的轉(zhuǎn)發(fā)排序(例如,從存儲(chǔ)到加載的數(shù)據(jù)依賴性)。
在存儲(chǔ)之前不能通過(guò)jit將到在相同線程內(nèi)的該存儲(chǔ)的相同地址的加載重排序。在一個(gè)實(shí)施例中,在引退之后直到原始加載c位置的點(diǎn),引退的所有加載需要停留在加載隊(duì)列(和/或其擴(kuò)展)中。每個(gè)被重排序的加載將包括偏移,偏移將按機(jī)器順序(例如,ip)指示該加載相對(duì)于跟隨的存儲(chǔ)的初始位置。
一個(gè)示例實(shí)現(xiàn)方式將包括偏移指示符中的初始指令位置。當(dāng)來(lái)自相同線程的存儲(chǔ)到來(lái)時(shí),其將cam匹配尋找指示該存儲(chǔ)將轉(zhuǎn)發(fā)到被匹配的加載的匹配的整個(gè)加載隊(duì)列(包括擴(kuò)展)。應(yīng)當(dāng)注意,在存儲(chǔ)在加載c之前被分派的情形中,該存儲(chǔ)將保留存儲(chǔ)隊(duì)列中的條目,并且當(dāng)加載之后被分派時(shí),加載將針對(duì)存儲(chǔ)的地址cam匹配,并且加載將使用其ip以確定結(jié)束將數(shù)據(jù)從存儲(chǔ)中的任意存儲(chǔ)轉(zhuǎn)發(fā)到該加載的機(jī)器順序。擴(kuò)展尺寸可以通過(guò)在被重排序的加載(加載c)可以跳轉(zhuǎn)到其之前(例如,通過(guò)使用8個(gè)條目擴(kuò)展)的加載的數(shù)量上設(shè)置限制來(lái)確定。
另一解決方案將在原始加載的位置中設(shè)置檢查存儲(chǔ)指令。當(dāng)檢查存儲(chǔ)指令分派時(shí),其針對(duì)加載隊(duì)列檢查地址匹配。類(lèi)似地,當(dāng)加載分派時(shí),它們針對(duì)存儲(chǔ)指令占用的存儲(chǔ)隊(duì)列條目來(lái)檢查地址匹配。
圖23示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的加載和存儲(chǔ)指令分割的第一示圖。本發(fā)明的一個(gè)特征是加載被分成兩個(gè)宏指令的事實(shí),第一宏指令進(jìn)行地址計(jì)算并且取出到臨時(shí)位置(加載存儲(chǔ)隊(duì)列),并且第二宏指令是將存儲(chǔ)器地址內(nèi)容(數(shù)據(jù))加載到寄存器或alu目的地中。應(yīng)當(dāng)注意,盡管在將加載和存儲(chǔ)指令分成兩個(gè)相應(yīng)的宏指令并且將它們重新排序的上下文中描述發(fā)明的實(shí)施例,可以通過(guò)在微代碼上下文內(nèi)將加載和存儲(chǔ)指令分成兩個(gè)相應(yīng)的微指令并且將它們重新排序來(lái)實(shí)現(xiàn)相同的方法和系統(tǒng)。
該功能對(duì)于存儲(chǔ)是相同的。存儲(chǔ)也被分成兩個(gè)宏指令。第一指令是存儲(chǔ)地址和取出,第二指令是對(duì)在該地址的數(shù)據(jù)的存儲(chǔ)。對(duì)存儲(chǔ)和兩個(gè)指令的分割遵循與下文所述的加載相同的規(guī)則。
將加載分成兩個(gè)指令允許運(yùn)行時(shí)優(yōu)化器在給定的指令序列內(nèi)早得多地調(diào)度地址計(jì)算和取出指令。這通過(guò)將數(shù)據(jù)預(yù)取到與高速緩存層級(jí)分開(kāi)的臨時(shí)緩沖器中而允許更容易的從存儲(chǔ)器未命中恢復(fù)。使用臨時(shí)緩沖器以保證在la/sa和ld/sd之間的一對(duì)一對(duì)應(yīng)上的被預(yù)取的數(shù)據(jù)的可用性。如果在加載地址和加載數(shù)據(jù)之間的窗口中的先前存儲(chǔ)中存在重命名(例如,如果從先前存儲(chǔ)中檢測(cè)到了轉(zhuǎn)發(fā)情形),或者如果地址計(jì)算中存在任何錯(cuò)誤問(wèn)題(例如,頁(yè)面錯(cuò)誤),則對(duì)應(yīng)的加載數(shù)據(jù)指令可以重新發(fā)出。此外,將加載分成兩個(gè)指令還可以包括將信息復(fù)制到兩個(gè)指令中。這種信息可以是地址信息、源信息、其他附加標(biāo)識(shí)符等等。該復(fù)制允許在la/sa不存在的情況下對(duì)兩個(gè)指令的ld/sd的獨(dú)立的分派。
加載地址和取出指令可以從實(shí)際的機(jī)器引退窗口引退而無(wú)需在加載數(shù)據(jù)上等待以返回,從而允許機(jī)器甚至在對(duì)該地址(例如,段落開(kāi)頭指示的加載地址)的高速緩存未命中的情形下取得進(jìn)展。例如,在對(duì)該地址(例如,地址x)的高速緩存未命中之后,機(jī)器可能可以停止數(shù)百循環(huán)以等待數(shù)據(jù)從存儲(chǔ)器層級(jí)中取出。通過(guò)從實(shí)際的機(jī)器引退窗口引退加載地址和取出指令而無(wú)需在加載數(shù)據(jù)上等待以返回,機(jī)器仍然可以取得進(jìn)展。
應(yīng)當(dāng)注意,對(duì)指令的分割實(shí)現(xiàn)本發(fā)明的實(shí)施例的關(guān)鍵優(yōu)勢(shì)為更早地重排序la/sa指令并且更遠(yuǎn)離ld/sd,指令序列實(shí)現(xiàn)對(duì)加載和存儲(chǔ)的更早的分派和執(zhí)行。
圖24示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示出其中在存儲(chǔ)器內(nèi)存儲(chǔ)clb功能結(jié)合代碼高速緩存和訪客指令到本機(jī)指令的映射的方式的示例性流程圖。
如上所述,clb用于存儲(chǔ)具有存儲(chǔ)在代碼高速緩存存儲(chǔ)器內(nèi)的對(duì)應(yīng)的被轉(zhuǎn)換的本機(jī)地址的訪客地址的映射(例如,訪客到本機(jī)地址的映射)。在一個(gè)實(shí)施例中,索引clb的一部分訪客地址。訪客地址被劃分為索引、標(biāo)簽和偏移(例如,區(qū)塊(chunk)尺寸)。該訪客地址包括用于標(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ī)指令區(qū)塊(例如,被轉(zhuǎn)換的本機(jī)指令的對(duì)應(yīng)的塊)的指針。
應(yīng)當(dāng)注意,本文中所使用的術(shù)語(yǔ)“區(qū)塊”指示被轉(zhuǎn)換的本機(jī)指令塊的對(duì)應(yīng)的存儲(chǔ)器尺寸。例如,取決于被轉(zhuǎn)換的本機(jī)指令塊的不同尺寸,區(qū)塊可以在尺寸上不同。
對(duì)于代碼高速緩存存儲(chǔ)器806,在一個(gè)實(shí)施例中,代碼高速緩存被分配到一組固定尺寸的區(qū)塊中(例如,對(duì)每種區(qū)塊類(lèi)型具有不同的尺寸)。可以將代碼高速緩存邏輯上劃分為系統(tǒng)存儲(chǔ)器中的組和路以及所有較低級(jí)硬件高速緩存(例如,本機(jī)硬件高速緩存608、共享硬件高速緩存607)。clb可以使用訪客地址來(lái)索引和作標(biāo)簽比較代碼高速緩存區(qū)塊的路標(biāo)簽。
圖24描繪clb硬件高速緩存804將訪客地址標(biāo)簽存儲(chǔ)在2路中,描繪為路x和路y。應(yīng)當(dāng)注意,在一個(gè)實(shí)施例中,可以通過(guò)將指針存儲(chǔ)到結(jié)構(gòu)化的路中的本機(jī)代碼區(qū)塊(例如,從訪客到本機(jī)地址的映射)來(lái)完成使用clb結(jié)構(gòu)的訪客地址到本機(jī)地址的映射。每路與標(biāo)簽相關(guān)聯(lián)。clb被訪客地址802(包括標(biāo)簽)索引。在clb中的命中上,返回對(duì)應(yīng)于標(biāo)簽的指針。該指針用于索引代碼高速緩存存儲(chǔ)器。這在圖24中由行“代碼區(qū)塊的本機(jī)地址=片段的數(shù)量+f(指針)”示出,其表示代碼區(qū)塊的本機(jī)地址是指針和片段數(shù)量的函數(shù)的事實(shí)。在本實(shí)施例中,片段指示存儲(chǔ)器中的點(diǎn)的基礎(chǔ),其中指針?lè)秶惶摂M地映射(例如,允許將指針數(shù)組映射到物理存儲(chǔ)器中的任意區(qū)域中)。
替代地,在一個(gè)實(shí)施例中,可以經(jīng)由第二種方法索引代碼高速緩存存儲(chǔ)器,如圖24中行“代碼區(qū)塊的本機(jī)地址=片段的數(shù)量+索引*(區(qū)塊尺寸)+路的數(shù)量*(區(qū)塊尺寸)”所示。在這種實(shí)施例中,代碼高速緩存被組織為使得其路結(jié)構(gòu)匹配clb路結(jié)構(gòu),從而在clb的路和代碼高速緩存區(qū)塊的路之間存在1:1映射。當(dāng)在特定的clb路中存在命中時(shí),然后代碼高速緩存的對(duì)應(yīng)的路中的對(duì)應(yīng)的代碼區(qū)塊具有本機(jī)代碼。
仍然參考圖24,如果clb的索引未命中,可以為命中檢查存儲(chǔ)器的更高層級(jí)(例如,l1高速緩存、l2高速緩存等等)。如果在這些更高的高速緩存級(jí)別中沒(méi)有命中,則檢查系統(tǒng)存儲(chǔ)器801中的地址。在一個(gè)實(shí)施例中,訪客索引指向包括例如64個(gè)區(qū)塊的條目。讀出64個(gè)區(qū)塊中的每一個(gè)的標(biāo)簽并且將其與訪客標(biāo)簽比較以確定是否有命中。在圖24中由虛線框805示出該過(guò)程。如果在與系統(tǒng)存儲(chǔ)器中的標(biāo)簽比較后沒(méi)有命中,則在存儲(chǔ)器的任何層級(jí)級(jí)別不存在轉(zhuǎn)換,并且必須轉(zhuǎn)換訪客指令。
應(yīng)當(dāng)注意,本發(fā)明的實(shí)施例管理以類(lèi)似高速緩存的方式存儲(chǔ)訪客到本機(jī)指令映射的存儲(chǔ)器的層級(jí)級(jí)別中的每一個(gè)。這內(nèi)在地來(lái)自于基于高速緩存的存儲(chǔ)器(例如,clb硬件高速緩存、本機(jī)高速緩存、l1和l2高速緩存等等)。然而,clb還包括“代碼高速緩存+clb管理位”,“代碼高速緩存+clb管理位”用于實(shí)現(xiàn)近期最少使用的(lru)替換管理策略以用于系統(tǒng)存儲(chǔ)器801內(nèi)的訪客到本機(jī)指令映射。在一個(gè)實(shí)施例中,clb管理位(例如,lru位)是軟件管理的。以此方式,存儲(chǔ)器的所有層級(jí)級(jí)別用于存儲(chǔ)最近使用的、最頻繁遇到的訪客到本機(jī)指令映射。相應(yīng)地,這導(dǎo)致存儲(chǔ)器的所有層級(jí)級(jí)別類(lèi)似地存儲(chǔ)最頻繁遇到的被轉(zhuǎn)換的本機(jī)指令。
圖24還示出存儲(chǔ)在clb中的動(dòng)態(tài)分支偏移位和/或分支歷史位。該動(dòng)態(tài)分支位用于跟蹤在組裝訪客指令序列中使用的分支預(yù)測(cè)的行為。該位用于跟蹤哪些分支預(yù)測(cè)是最常被正確地預(yù)測(cè)的以及哪些分支預(yù)測(cè)是最常被錯(cuò)誤地預(yù)測(cè)的。clb還存儲(chǔ)被轉(zhuǎn)換的塊范圍的數(shù)據(jù)。該數(shù)據(jù)使該過(guò)程能使代碼高速緩存存儲(chǔ)器中的其中對(duì)應(yīng)的訪客指令已經(jīng)被修改(例如,如在自身修改代碼中)的被轉(zhuǎn)換的塊范圍無(wú)效。
圖25示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的運(yùn)行提前運(yùn)行時(shí)訪客指令轉(zhuǎn)換/解碼過(guò)程的示圖。圖25示出顯示了當(dāng)需要對(duì)訪客代碼轉(zhuǎn)換/解碼時(shí),目的是避免從主存儲(chǔ)器攜帶訪客代碼(例如,其將是成本高的行程)的示圖。圖25示出預(yù)取過(guò)程,其中從指令序列中的訪客分支的目標(biāo)預(yù)取訪客代碼。例如,指令序列包括訪客分支x、y和z。這引起在地址x、y和z處的訪客代碼的預(yù)取指令的發(fā)出。
圖26示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的描繪了具有訪客指令序列的轉(zhuǎn)換表和具有本機(jī)指令映射的本機(jī)映射表的示圖。在一個(gè)實(shí)施例中,存儲(chǔ)器結(jié)構(gòu)/表可以實(shí)現(xiàn)為類(lèi)似于低級(jí)低等待時(shí)間高速緩存的高速緩存。
在一個(gè)實(shí)施例中,最頻繁遇到的訪客指令和它們的映射被存儲(chǔ)在低級(jí)高速緩存結(jié)構(gòu),低級(jí)高速緩存結(jié)構(gòu)允許運(yùn)行時(shí)快速地訪問(wèn)該結(jié)構(gòu)以為訪客指令獲得等效的本機(jī)指令。映射表將為查找到的訪客指令格式提供等效的指令格式。并且使用一些在該映射表中的存儲(chǔ)為控制字段的控制值以快速地允許將訪客指令中的某些字段替換為本機(jī)指令中的等效的字段。此處的想法是在低級(jí)(例如,高速緩存)只存儲(chǔ)最頻繁遇到的訪客指令以允許快速的轉(zhuǎn)換,而其他非頻繁的訪客指令可以花費(fèi)更長(zhǎng)的時(shí)間來(lái)轉(zhuǎn)換。
現(xiàn)在討論根據(jù)本發(fā)明的實(shí)施例的術(shù)語(yǔ)clb/clbv/clt。在一個(gè)實(shí)施例中,clb是被維持為存儲(chǔ)器結(jié)構(gòu)的轉(zhuǎn)換后備緩沖器,當(dāng)遇到本機(jī)訪客分支時(shí)其被查找,同時(shí)執(zhí)行本機(jī)代碼以獲得映射到訪客分支的目的地的代碼的地址。在一個(gè)實(shí)施例中,clbv是clb的受害高速緩存鏡像。隨著條目被從clb驅(qū)逐,它們被緩存到常規(guī)l1/l2高速緩存結(jié)構(gòu)中。當(dāng)clb遇到未命中時(shí),其將通過(guò)硬件訪問(wèn)自動(dòng)地查找l1/l2以搜索未命中的目標(biāo)。在一個(gè)實(shí)施例中,當(dāng)在clb或clbv中未發(fā)現(xiàn)未命中的目標(biāo)時(shí)使用clt,觸發(fā)軟件處理程序以在主存儲(chǔ)器中的clt表中查找條目。
現(xiàn)在討論根據(jù)本發(fā)明的實(shí)施例的clb計(jì)數(shù)器。在一個(gè)實(shí)施例中,clb計(jì)數(shù)器是在轉(zhuǎn)換時(shí)刻設(shè)定的值,并且存儲(chǔ)在關(guān)于被轉(zhuǎn)換的指令序列/跟蹤的元數(shù)據(jù)旁邊。每次執(zhí)行指令序列/跟蹤時(shí),該計(jì)數(shù)器減1并且用作對(duì)熱的觸發(fā)器。該值存儲(chǔ)在所有clb級(jí)別(例如,clb、clbv、clt)。當(dāng)其達(dá)到閾值,其觸發(fā)jit編譯器以優(yōu)化指令序列/跟蹤。該值由硬件維持和管理。在一個(gè)實(shí)施例中,指令序列/跟蹤可以具有clb計(jì)數(shù)器和軟件計(jì)數(shù)器的混合。
現(xiàn)在討論根據(jù)本發(fā)明的一個(gè)實(shí)施例的后臺(tái)線程。在一個(gè)實(shí)施例中,一旦觸發(fā)熱,則啟動(dòng)硬件后臺(tái)線程,其用作對(duì)軟件不可見(jiàn)的后臺(tái)硬件任務(wù)并且具有其自己的硬件資源,通常是最小資源(例如,小的寄存器組和系統(tǒng)狀態(tài))。其繼續(xù)作為在低優(yōu)先級(jí)上存儲(chǔ)執(zhí)行資源的后臺(tái)線程執(zhí)行并且當(dāng)執(zhí)行資源可用時(shí)繼續(xù)執(zhí)行。其具有硬件線程id,并且對(duì)于軟件不可見(jiàn),但是由低級(jí)硬件管理系統(tǒng)管理。
現(xiàn)在討論根據(jù)本發(fā)明的一個(gè)實(shí)施例的jit分析和運(yùn)行時(shí)模擬/動(dòng)態(tài)檢查。jit可以在時(shí)間間隔上開(kāi)始分析/模擬/掃描指令序列/跟蹤。其可以通過(guò)例如使用分支分析來(lái)維持與優(yōu)化相關(guān)的某些值。分支分析使用分支分析硬件指令和代碼檢測(cè)通過(guò)實(shí)現(xiàn)具有分支的語(yǔ)義的指令來(lái)為指令序列/跟蹤內(nèi)的分支發(fā)現(xiàn)分支預(yù)測(cè)值/偏移,使得其開(kāi)始從特定地址取出指令并且將該指令傳遞通過(guò)機(jī)器前端和查找硬件分支預(yù)測(cè)器而不執(zhí)行該指令。然后jit累積該硬件分支預(yù)測(cè)計(jì)數(shù)器的值以創(chuàng)建比硬件所提供的更大的計(jì)數(shù)器。這允許jit分析分支偏移。
恒定分析指代分析以檢測(cè)不改變的值并且使用該信息來(lái)優(yōu)化代碼。
由于通過(guò)動(dòng)態(tài)地檢查加載和存儲(chǔ)之間的地址重命名有時(shí)可能檢查到該存儲(chǔ)到加載轉(zhuǎn)發(fā)不發(fā)生,因此使用檢查加載存儲(chǔ)重命名。
在一個(gè)實(shí)施例中,jit可以編制代碼或使用特殊指令,例如分支分析指令、或檢查加載指令、或檢查存儲(chǔ)指令。
出于解釋的目的,以上描述指示不旨在窮舉或限制本發(fā)明的特定實(shí)施例。與以上教導(dǎo)一致的許多修改和變型是可能的。選擇和描述實(shí)施例以最好地解釋發(fā)明的原理和其實(shí)踐應(yīng)用,以使本領(lǐng)域其他技術(shù)人員能最好地利用該發(fā)明以及該發(fā)明的可能適于他們的特定使用的具有各種修改的各種實(shí)施例。