專利名稱:字節(jié)碼分支處理器及方法
技術(shù)領(lǐng)域:
以下描述涉及一種計算系統(tǒng)中的字節(jié)碼解釋器(interpreter),更具體地講,涉及一種用于通過有效地去除在驅(qū)動虛擬機的字節(jié)碼解釋器中可能發(fā)生的分支誤預(yù)測或流水線阻塞(stall)懲罰,來提高字節(jié)碼解釋器的性能的分支處理器和方法。
背景技術(shù):
已經(jīng)進(jìn)行了大量的研究來提高虛擬機的性能,以處理Java字節(jié)碼。尤其是通過即時編譯(JITC,Just-in-time compilation)顯著地增強了虛擬機的性能。然而,因為資源限制以及對用戶敏感的延遲(latency),嵌入式系統(tǒng)難以有效地引入JITC,因此嵌入式系統(tǒng)以有限的方式利用JITC。此外,由于應(yīng)用程序的所有代碼不按 JITC格式被編譯,因此解釋器的性能仍舊至關(guān)重要。直接線程(direct-thread)方法是用于改善解釋器的性能的普遍方法之一。在該方法中,在字節(jié)碼處理機(bytecode handler)的末尾提取下一虛擬指令并直接進(jìn)行分支。 該方法最近已被用于Android Dalvik虛擬機。作為另一方法,ARM Jazelle DBX(直接字節(jié)碼執(zhí)行)在硬件中對字節(jié)碼進(jìn)行完全地處理。直接線程方法具有以下缺點作為間接分支指令的分支指令使得實際的處理器 (例如,x86或ARM)的分支預(yù)測器迷惑,導(dǎo)致大量的分支誤預(yù)測以及性能方面的惡化。也就是說,在具有普通流水線結(jié)構(gòu)的處理器中,如果發(fā)生分支誤預(yù)測,則已被預(yù)測性地(speculatively)執(zhí)行的所有指令被丟棄,并且處理器需要返回到分支開始的狀態(tài)。具體地講,隨著高端超標(biāo)量處理器(例如,ARM cortex A9)被引進(jìn)到嵌入式裝置中,由于分支誤預(yù)測引起的性能惡化會被加劇。即使在相同的程序計數(shù)器(PC)中,在直接線程方法中使用的間接分支指令根據(jù)下一虛擬指令也跳轉(zhuǎn)到不同的處理機的地址,因此基于PC的一般分支預(yù)測器可能不會正確地工作。為了解決這樣的缺點,包括選擇性的內(nèi)聯(lián)和關(guān)聯(lián)線程技術(shù)(context threading) 的各種方法被引進(jìn),但是引起了代碼量增加以及發(fā)生調(diào)用/返回的開銷的缺點。此外,諸如Jazelle DBX的硬件實施方案(一些較不頻繁使用的指令被實現(xiàn)為軟件處理機)具有高性能,但是需要大量的硬件資源,并且不能處理新型的字節(jié)碼(例如, Dalvik)。
發(fā)明內(nèi)容
在一總體方面,提供了一種計算系統(tǒng)中的字節(jié)碼分支處理器,包括解釋器,配置為在虛擬機中以字節(jié)碼格式運行程序;分支信息產(chǎn)生器,配置為從分支的預(yù)測路徑提前獲得分支信息,其中,所述分支存在于在由解釋器當(dāng)前處理的字節(jié)碼之前的字節(jié)碼中 ’分支目標(biāo)緩沖器(BTB)更新器,配置為基于獲得的分支信息更新計算系統(tǒng)中的分支目標(biāo)緩沖器 (BTB)。所述解釋器還可配置為以具有可變長度的字節(jié)碼的格式運行程序。所述解釋器還可配置為使用具有用于運行程序的可調(diào)用的操作碼的處理機來處理字節(jié)碼。所述處理機還可配置為包括用于跳轉(zhuǎn)到根據(jù)字節(jié)碼處理的順序處理字節(jié)碼的操作碼的代碼信息。分支信息產(chǎn)生器還可配置為包括映射操作碼、字節(jié)碼的長度以及具有操作碼的處理機中的分支代碼的地址的表。分支信息產(chǎn)生器還可配置為通過將分支地址和目標(biāo)地址進(jìn)行映射來從所述表中產(chǎn)生分支信息,其中,所述分支地址與在由解釋器當(dāng)前處理的字節(jié)碼之前的字節(jié)碼的地址對應(yīng),所述目標(biāo)地址與具有處理所述之前的字節(jié)碼的操作碼的處理機中的分支代碼的地址對應(yīng)。分支信息產(chǎn)生器還可配置為通過將從所述表獲得的所述之前的字節(jié)碼的長度與由解釋器當(dāng)前處理的字節(jié)碼相加來產(chǎn)生分支地址,并基于具有處理所述之前的字節(jié)碼的操作碼的處理機中的分支代碼來產(chǎn)生目標(biāo)地址,其中,從所述表中獲得所述分支代碼。BTB和BTB更新器可配置為在不同的核上運行,并且存儲在BTB中的分支信息通過 BTB更新器是可更新的。字節(jié)碼分支處理器還可包括分支預(yù)測器,配置為預(yù)測字節(jié)碼中存在的條件分支的路徑。在另一總體方面,提供了一種在計算系統(tǒng)中處理字節(jié)碼分支的方法,所述方法包括響應(yīng)于存在于由虛擬機處理的字節(jié)碼中的分支的預(yù)測路徑的存在,使用計算系統(tǒng)的分支預(yù)測器更新所述路徑;響應(yīng)于分支預(yù)測器預(yù)測在由虛擬機當(dāng)前處理的字節(jié)碼之前的字節(jié)碼是分支,確定所述之前的字節(jié)碼是否是條件分支;響應(yīng)于確定所述之前的字節(jié)碼不是條件分支,搜索在保留操作碼的計算系統(tǒng)中映射處理所述之前的字節(jié)碼的操作碼和分支地址的表;獲得通過將與所述之前的字節(jié)碼的地址對應(yīng)的分支地址和與具有處理所述之前的字節(jié)碼的操作碼的處理機中的分支代碼的地址對應(yīng)的目標(biāo)地址進(jìn)行映射而產(chǎn)生的分支信息; 基于獲得的分支信息更新計算系統(tǒng)的分支目標(biāo)緩沖器(BTB)。映射操作碼、字節(jié)碼的長度以及具有操作碼的處理機中的分支代碼的地址的表可被預(yù)先存儲在計算系統(tǒng)中。獲得分支信息的步驟可包括通過將從所述表獲得的所述之前的字節(jié)碼的長度與由虛擬機當(dāng)前處理的字節(jié)碼相加來產(chǎn)生分支地址,并基于具有處理所述之前的字節(jié)碼的操作碼的處理機中的分支代碼來產(chǎn)生目標(biāo)地址,其中,從所述表獲得分支代碼。所述方法還可包括響應(yīng)于確定所述之前的字節(jié)碼是條件分支,預(yù)測存在于所述字節(jié)碼中的條件分支的路徑;基于與預(yù)測路徑對應(yīng)的操作碼來搜索映射由計算系統(tǒng)保留的操作碼以及分支地址的表。如果計算系統(tǒng)是多核系統(tǒng),則正在運行BTB的核可與更新所述BTB的核被不同地分配。在另一總體方面,提供了一種用于多核處理器的分支預(yù)測方法,所述方法包括產(chǎn)生指示用于進(jìn)行處理的當(dāng)前字節(jié)碼的虛擬程序計數(shù)器(vPC)值;以字節(jié)碼解釋器來處理當(dāng)前字節(jié)碼;產(chǎn)生指示在當(dāng)前正被處理的字節(jié)碼之前的字節(jié)碼的預(yù)加載vPC值;在所述vPC 達(dá)到預(yù)加載vPC的值之前,對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼提前預(yù)測分支信息;以當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼的預(yù)測的分支信息來更新分支目標(biāo)緩沖器(BTB)??稍诙嗪颂幚砥鞯牡谝缓松蠄?zhí)行當(dāng)前字節(jié)碼的處理,并在多核處理器的第二核上執(zhí)行對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼預(yù)測分支信息。第一核和第二核可同時地分別處理當(dāng)前字節(jié)碼以及對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼預(yù)測分支信息。僅僅添加了用于精確分支預(yù)測和快速分支解決方案的硬件,直接線程解釋器性能可被改善。此外,添加的硬件可有助于字節(jié)碼處理機的精確分支。分支處理器可實現(xiàn)為軟件-硬件混合形式,或僅實現(xiàn)為硬件。即使在硬件實施方案中,也能夠以少于硬件解釋器(例如,Jazelle)的成本實現(xiàn)分支處理器。此外,分支處理器可支持不同的解釋器(例如,Java和Dalvik),并能夠處理以多種類型(例如,Dalvik)編寫的字節(jié)碼。分支處理器通過處理虛擬機(例如,Java和Dalvik)的主處理器來幫助進(jìn)行分支預(yù)測,從而防止分支誤預(yù)測并實現(xiàn)高解釋器性能。此外,通過將簡單邏輯添加到主機處理器來將分支目標(biāo)緩沖器(BTB)更新至軟件,可防止在直接線程解釋器中發(fā)生大量的分支誤預(yù)測。分支目標(biāo)緩沖器填寫機制可實現(xiàn)為除BTB修改邏輯以外的軟件或硬件。此外,在軟件實施方案中,可利用雙核,從而實際的解釋器的負(fù)荷可被最小化并且分支性能可被增強。從以下詳細(xì)的描述、附圖和權(quán)利要求中,其他特點和方面會是清楚的。
圖1是示出虛擬機字節(jié)碼和直接線程處理機的示例的示圖。圖2A和圖2B是示出操作碼-分支地址表和可編程的BTB結(jié)構(gòu)的示例的示圖。圖3示出字節(jié)碼分支處理器的示例。 圖4示出處理字節(jié)碼分支的示例的流程圖。圖5示出用于多核處理器的分支預(yù)測方法的示例的流程圖。貫穿附圖和詳細(xì)的描述,除非另有描述,否則相同的附圖標(biāo)號將被理解為是指相同的部件、特點和結(jié)構(gòu)。為了清楚、例證和方便,可夸大這些部件的相對大小和描繪。
具體實施例方式提供以下描述以幫助讀者獲得對在此描述的方法、設(shè)備和/或系統(tǒng)的全面理解。 因此,在此描述的方法、設(shè)備和/或系統(tǒng)的各種改變、修改和等同物將被建議給本領(lǐng)域的普通技術(shù)人員。此外,為了更加清楚和簡明,可省略已知功能和構(gòu)造的描述。圖1示出虛擬機字節(jié)碼和直接線程處理機的示例。
示例中示出的處理機(handler)用于在該處理機實現(xiàn)為虛擬機(例如,Java或 Android Dalvik虛擬機)中的解釋器時有利于處理器有效地處理分支。在圖1示出的示例中,提供了具有可變長度的Dalvik字節(jié)碼。具有固定長度的字節(jié)碼(例如,Java)可被應(yīng)用,但是因為可變長度的處理更加復(fù)雜,所以采用可變長度字節(jié)碼Dalvik作為示例。圖1示出的示例顯示使用直接線程方法在匯編級(assembly level)處理字節(jié)碼的解釋器。圖1中示出的示例中顯示的解釋器包括具有固定最大長度(在本示例中,最大長度為64字節(jié))的字節(jié)碼處理機。如果具有固定長度的處理機的大小不足以處理函數(shù),則處理機可跳轉(zhuǎn)到處于不同位置的另外的處理例程,并處理剩余的函數(shù)。這樣,使用直接線程方法在匯編級處理字節(jié)碼的處理機利用標(biāo)準(zhǔn)分支預(yù)測機制。 也就是說,分支預(yù)測機制包括分支目標(biāo)緩沖器和分支預(yù)測器。 然而,可容易地應(yīng)用不同類型的分支預(yù)測機制。圖1中示出的示例用于通過實際系統(tǒng)的程序計數(shù)器(PC)與字節(jié)碼的虛擬PC(vPC) 之間的交互,來最大限度地使用一般硬件系統(tǒng)的分支預(yù)測。首先,調(diào)整之前的解釋器使用處理機處理字節(jié)碼。例如,在按照“COnSt/4vA”、 "move vA”和“if-ge vA”的順序提供字節(jié)碼的情況下,用于“const/4”的處理機被首先調(diào)用 (100),虛擬PC在處理機中增加,隨后檢測到字節(jié)碼是“move vA”,因此解釋器跳轉(zhuǎn)到move 處理例程(G0T0_0PC0DE)。調(diào)用用于“move”的處理機(110),隨后,解釋器轉(zhuǎn)到“ if-ge”處理例程,調(diào)用用于 “if-ge” 的處理機(120)。有一般解釋器在其中運行的處理器會不可避免地具有多個分支誤預(yù)測,這是因為所述處理器僅使用G0T0_0PC0DE的PC來確定目標(biāo)地址。圖1示出的示例中顯示的解釋器在分支目標(biāo)緩沖器(BTB)填寫操作的過程中提前加載關(guān)于BTB的精確目標(biāo)地址。然后,實際的硬件預(yù)測器被允許參照所述精確目標(biāo)地址在對應(yīng)時間來執(zhí)行精確分支預(yù)測??砂凑哲浖绞交蛴布绞教幚鞡TB填寫。在軟件方式的處理中,如果提供多核, 則通過使用不同的處理器可減小延遲。詳細(xì)地,在BTB填寫線程(或函數(shù))中,維持單獨的虛擬PC值(被稱為預(yù)加載 vPC(preload-vPC)) ο所述預(yù)加載vPC指示在當(dāng)前處理的vPC之前的字節(jié)碼,其中,所指示的字節(jié)碼的分支信息被反映在硬件中。如果vPC值接近預(yù)加載vPC,則重新開始BTB填寫操作以獲取額外的分支信息。圖2A和圖2B示出操作碼-分支地址表和可編程的BTB結(jié)構(gòu)的示例。在建立用于BTB填寫操作的解釋器的步驟中,操作碼-分支地址表必須被提前制作。該表顯示在每個操作碼處理機中分支的實際位置。如果“move”代碼的處理機起始位置是01x64 (字節(jié)),則用于跳轉(zhuǎn)到下一實際指令的“move”處理機中的G0T0_0PC0DE ()的地址被寫入到表的“分支地址”欄中。此外,為了處理可變長度字節(jié)碼(例如,Dalvik),每個操作碼的長度被寫入到“字節(jié)碼長度”欄中。
在BTB填寫操作中,從當(dāng)前vPC或先前掃描的vPC位置開始提前順序地讀取預(yù)定義數(shù)量的字節(jié)碼,并且在表中搜索每個讀取的字節(jié)碼。由于在實際的vPC之前執(zhí)行BTB填寫操作,因此BTB填寫操作被稱為“在前 vPC(pre-vPC)"0為了讀取繼在前vPC之后的字節(jié)碼,應(yīng)該讀取“字節(jié)碼長度”。然后,下一字節(jié)碼地址變?yōu)?在前vPC+當(dāng)前字節(jié)碼長度)。此外,通過讀取表的 “分支地址”欄,可獲得用于對應(yīng)字節(jié)碼處理機執(zhí)行分支的地址。用于BTB的分支信息由[分支地址,目標(biāo)地址]對(pair)組成。例如,用于(vPC+第一字節(jié)碼)的分支信息是[分支地址(vPC+第一字節(jié)碼),處理機位置(VPC+第二字節(jié)碼)]。通過執(zhí)行k次BTB填寫操作,產(chǎn)生k段分支信息。為了實際地反映分支信息,硬件分支預(yù)測器應(yīng)該允許更新分支信息。在軟件BTB 填寫操作的情況下,分支信息可被映射到特定I/O地址或存儲器空間,以更新軟件中的BTB 記錄。上述BTB被稱為“可編程BTB”。圖2B示出的示例中顯示的BTB與一般BTB結(jié)構(gòu)幾乎相同,但是可以將條目 (entry)更新到軟件或單獨的硬件。圖3示出字節(jié)碼分支處理器的示例。分支處理器可包括字節(jié)碼解釋器300、分支預(yù)測器310和;340、分支信息產(chǎn)生器320和BTB更新器330。字節(jié)碼解釋器300在虛擬機中按字節(jié)碼格式運行程序。 此外,字節(jié)碼解釋器300可按具有可變長度的字節(jié)碼的格式運行程序。為了運行程序,使用具有可調(diào)用的操作碼的處理機來處理字節(jié)碼。所述處理機可包括用于跳轉(zhuǎn)到操作碼的代碼的位置信息,其中,所述操作碼根據(jù)字節(jié)碼處理的順序處理所述字節(jié)碼。分支預(yù)測器310可預(yù)測在字節(jié)碼中存在的條件分支的路徑。分支信息產(chǎn)生器320可從在由字節(jié)碼解釋器300當(dāng)前處理的字節(jié)碼之前的字節(jié)碼上的分支的預(yù)測路徑來提前獲得分支信息。此外,分支信息產(chǎn)生器320可包括根據(jù)字節(jié)碼處理的順序映射操作碼、字節(jié)碼長度以及操作碼中分支代碼的地址的表。此外,分支信息產(chǎn)生器320可通過將當(dāng)前處理的字節(jié)碼與從表獲得的在前字節(jié)碼的長度相加來計算下一字節(jié)碼的地址,并可連續(xù)產(chǎn)生分支地址與目標(biāo)地址的對。BTB更新器330可使用獲得的分支信息來更新計算系統(tǒng)的分支目標(biāo)緩沖器 (BTB)341。圖4示出處理字節(jié)碼分支的示例的流程圖。BTB填寫機制可具有可以以軟件或硬件實現(xiàn)的用于vPC本身的單獨的分支預(yù)測機制。使用相同的軟件邏輯來執(zhí)行硬件實施方案,因此所述邏輯將被描述為軟件。在BTB填寫機制中,執(zhí)行填寫直到遇到初始分支,并且當(dāng)在遇到分支的時刻不存在分支預(yù)測時停止填寫。當(dāng)已經(jīng)經(jīng)過合適數(shù)量(通常,一個或兩個)的分支時停止填寫。響應(yīng)于更新分支結(jié)果隊列,分支預(yù)測器被更新,并且在分支誤預(yù)測的情況下,針對在前的BTB填寫操作而已被執(zhí)行的vPC指針返回到分支誤預(yù)測點,并從該點繼續(xù)進(jìn)行BTB填寫。
當(dāng)在分支結(jié)果隊列中找到分支時,分支預(yù)測器被更新G01),并且執(zhí)行用于下一字節(jié)碼的BTB填寫操作。BTB填寫可在單個處理器中通過函數(shù)調(diào)用而被執(zhí)行,或者可在雙核處理器或多核處理器中被實現(xiàn)為不同線程,或者BTB填寫可被實現(xiàn)為硬件邏輯。確定字節(jié)碼是否是分支結(jié)果隊列中的分支(402)。如果字節(jié)碼不是分支,則使用處于在前vPC位置的操作碼來搜索操作碼-分支地址表(403)。此外,通過讀取表的“分支地址”欄,可獲得字節(jié)碼處理機實際分支的地址?;讷@得的地址,產(chǎn)生[分支地址,處理機地址]對(404)。為了讀取繼在前vPC之后的字節(jié)碼,讀取字節(jié)碼長度。下一字節(jié)碼的地址為(在前VPC+當(dāng)前字節(jié)碼的長度)(405)。將要包括在BTB中的分支信息產(chǎn)生為[分支地址,目標(biāo)地址]對006)。為了實際反映產(chǎn)生的分支信息,需要硬件分支預(yù)測器來允許分支信息更新。響應(yīng)于硬件分支預(yù)測器允許分支信息更新,在BTB中更新分支信息(406)。此外,在BTB填寫操作中,當(dāng)vPC遇到非條件分支、條件分支、調(diào)用-直接 (invoke-direct)或調(diào)用-虛擬(invoke-virtual)時,查尋用于vPC的軟件實現(xiàn)的BTB。 BTB可簡單實現(xiàn)為2路集關(guān)聯(lián)BTB。如果找到BTB并且分支是條件分支,則可應(yīng)用一般分支預(yù)測器(例如,gSiare) (408)。結(jié)果,即使在落空(fall-through)或跳轉(zhuǎn)(taken)的情況下,也可獲得目標(biāo)地址, 并因此能夠獲得上述地址對。然而,在vPC分支預(yù)測實施方案中,需要檢查地址對在字節(jié)碼的實際分支中是否適當(dāng)009)。為此,需要在解釋器的字節(jié)碼處理機中更新實際分支地址。為了防止與vPC預(yù)測器的操作(大多,與BTB填寫線程相同的線程)沖突,提供共享的原始隊列,使得解釋器用作產(chǎn)生器,vPC分支預(yù)測用作消耗器。也就是說,當(dāng)判定分支時,解釋器將[vPC,目標(biāo)地址]對放置在共享隊列中,vPC分支預(yù)測通過檢查共享隊列來確認(rèn)預(yù)測的分支,并更新分支信息。這與傳統(tǒng)的硬件分支預(yù)測的更新邏輯相同。這樣,通過迭代地更新G06)BTB中的分支信息,做出遠(yuǎn)先于當(dāng)先處理的字節(jié)碼的字節(jié)碼的分支預(yù)測,并完成BTB的更新007),分支預(yù)測進(jìn)入睡眠/退讓(yield)狀態(tài),并且如果在執(zhí)行字節(jié)碼時用于在前的字節(jié)碼的分支預(yù)測結(jié)果不足,則再次執(zhí)行從402起的操作。圖5示出用于多核處理器的分支預(yù)測方法的示例的流程圖。參照圖5,處理器可產(chǎn)生虛擬程序計數(shù)器(vPC)值(501)。所述虛擬程序計數(shù)器 (vPC)值可指示用于進(jìn)行處理的當(dāng)前字節(jié)碼。如果虛擬程序計數(shù)器(vPC)值被產(chǎn)生,則隨后處理器可以以字節(jié)碼解釋器來處理當(dāng)前字節(jié)碼(502)。在步驟502,可由步驟501的虛擬程序計數(shù)器(vPC)指示當(dāng)前字節(jié)碼。另外,處理器可產(chǎn)生預(yù)加載的虛擬程序計數(shù)器(預(yù)加載vPC)值(503)。預(yù)加載的虛擬程序計數(shù)器(預(yù)加載VPC)值可指示在步驟502中當(dāng)前正被處理的字節(jié)碼之前的字節(jié)碼。如果預(yù)加載的虛擬程序計數(shù)器(預(yù)加載vPC)值被產(chǎn)生,則隨后在虛擬程序計數(shù)器 (VPC)達(dá)到預(yù)加載的虛擬程序計數(shù)器(預(yù)加載VPC)之前,處理器可對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼提前預(yù)測分支信息(504)。另外,處理器可使用當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼的預(yù)測的分支信息來更新分支目標(biāo)緩沖器(BTB) (505)。在多核處理器上執(zhí)行圖5中示出的示例中顯示的方法。例如,可在多核處理器的第一核上執(zhí)行當(dāng)前字節(jié)碼的處理,并可在多核處理器的第二核上執(zhí)行對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼預(yù)測分支信息。此外,所述第一核和第二核可同時地分別處理當(dāng)前字節(jié)碼以及對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼預(yù)測分支信息。上述方法和/或操作可被記錄、存儲或固定在一個或多個計算機可讀存儲介質(zhì)中,所述計算機可讀存儲介質(zhì)包括將由計算機實施的程序指令,以使處理器運行或執(zhí)行所述程序指令。所述介質(zhì)還可單獨地包括程序指令、數(shù)據(jù)文件、數(shù)據(jù)結(jié)構(gòu)等或數(shù)據(jù)文件、數(shù)據(jù)結(jié)構(gòu)等與程序指令的組合。計算機可讀存儲介質(zhì)的示例包括磁介質(zhì)(例如,硬盤、軟盤和磁帶);光介質(zhì)(例如,CDROM盤和DVD);磁光介質(zhì)(例如,光盤)以及專門配置用于存儲和執(zhí)行程序指令的硬件裝置(例如,只讀存儲器(ROM)、隨機存取存儲器(RAM)、閃存等)。程序指令的示例包括(例如,由編譯器產(chǎn)生的)機器代碼以及包含可由計算機使用解釋器執(zhí)行的更高級代碼的文件兩者。描述的硬件裝置可配置用作一個或多個軟件模塊以執(zhí)行上述操作和方法,反之亦然。此外,計算機可讀存儲介質(zhì)可分布在通過網(wǎng)絡(luò)連接的計算機系統(tǒng)中,并且計算機可讀代碼或程序指令可以以分散方式被存儲和執(zhí)行。以上已描述了多個示例。然而,應(yīng)該理解,可進(jìn)行各種修改。例如,如果按不同的順序執(zhí)行描述的技術(shù),和/或如果描述的系統(tǒng)、體系結(jié)構(gòu)、裝置或電路中的組件按不同的方式組合和/或被其他組件或其等同物代替或補充,則可能實現(xiàn)合適的結(jié)果。因此,其他實施方案在權(quán)利要求的范圍之內(nèi)。
9
權(quán)利要求
1.一種計算系統(tǒng)中的字節(jié)碼分支處理器,包括解釋器,配置為在虛擬機中以字節(jié)碼格式運行程序;分支信息產(chǎn)生器,配置為從分支的預(yù)測路徑提前獲得分支信息,其中,所述分支存在于在由解釋器當(dāng)前處理的字節(jié)碼之前的字節(jié)碼中;以及分支目標(biāo)緩沖器BTB更新器,配置為基于獲得的分支信息更新計算系統(tǒng)中的分支目標(biāo)緩沖器BTB。
2.如權(quán)利要求1所述的字節(jié)碼分支處理器,其中,所述解釋器還配置為以具有可變長度的字節(jié)碼的格式運行程序。
3.如權(quán)利要求1所述的字節(jié)碼分支處理器,其中,所述解釋器還配置為使用具有用于運行程序的可調(diào)用的操作碼的處理機來處理字節(jié)碼。
4.如權(quán)利要求3所述的字節(jié)碼分支處理器,其中,所述處理機還配置為包括用于跳轉(zhuǎn)到根據(jù)字節(jié)碼處理的順序處理字節(jié)碼的操作碼的代碼信息。
5.如權(quán)利要求4所述的字節(jié)碼分支處理器,其中,所述分支信息產(chǎn)生器還配置為包括映射操作碼、字節(jié)碼的長度以及具有操作碼的處理機中的分支代碼的地址的表。
6.如權(quán)利要求5所述的字節(jié)碼分支處理器,其中,所述分支信息產(chǎn)生器還配置為通過將分支地址與目標(biāo)地址進(jìn)行映射來從所述表中產(chǎn)生分支信息,其中,所述分支地址與在由解釋器當(dāng)前處理的字節(jié)碼之前的字節(jié)碼的地址對應(yīng),所述目標(biāo)地址與具有處理所述之前的字節(jié)碼的操作碼的處理機中的分支代碼的地址對應(yīng)。
7.如權(quán)利要求6所述的字節(jié)碼分支處理器,其中,所述分支信息產(chǎn)生器還配置為通過將從所述表獲得的所述之前的字節(jié)碼的長度與由解釋器當(dāng)前處理的字節(jié)碼相加來產(chǎn)生分支地址,并基于具有處理所述之前的字節(jié)碼的操作碼的處理機中的分支代碼來產(chǎn)生目標(biāo)地址,其中,從所述表獲得所述分支代碼。
8.如權(quán)利要求1所述的字節(jié)碼分支處理器,其中,BTB和BTB更新器配置為在不同的核上運行,并且存儲在BTB中的分支信息通過BTB更新器被更新。
9.如權(quán)利要求1所述的字節(jié)碼分支處理器,還包括分支預(yù)測器,配置為預(yù)測字節(jié)碼中存在的條件分支的路徑。
10.一種用于多核處理器的分支預(yù)測方法,所述方法包括產(chǎn)生指示用于進(jìn)行處理的當(dāng)前字節(jié)碼的虛擬程序計數(shù)器VPC值;以字節(jié)碼解釋器來處理當(dāng)前字節(jié)碼;產(chǎn)生指示在當(dāng)前正被處理的字節(jié)碼之前的字節(jié)碼的預(yù)加載VPC值;在所述VPC達(dá)到預(yù)加載VPC的值之前,對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼提前預(yù)測分支信息;以當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼的預(yù)測的分支信息來更新分支目標(biāo)緩沖器BTB。
11.如權(quán)利要求10所述的方法,其中,在多核處理器的第一核上執(zhí)行當(dāng)前字節(jié)碼的處理,并在多核處理器的第二核上執(zhí)行對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼預(yù)測分支信肩、ο
12.如權(quán)利要求11所述的方法,其中,第一核和第二核同時地分別處理當(dāng)前字節(jié)碼以及對當(dāng)前正被執(zhí)行的字節(jié)碼之前的字節(jié)碼預(yù)測分支信息。
全文摘要
提供了一種字節(jié)碼分支處理器及方法。提供了一種計算系統(tǒng)中的字節(jié)碼解釋器。所述解釋器通過處理虛擬機(例如,Java和Dalvik)的主處理器來幫助進(jìn)行分支預(yù)測,從而防止分支誤預(yù)測并實現(xiàn)高性能。
文檔編號G06F9/38GK102566977SQ20111022009
公開日2012年7月11日 申請日期2011年7月28日 優(yōu)先權(quán)日2010年12月9日
發(fā)明者曹承模, 辛圭桓 申請人:三星電子株式會社