專利名稱:用于網(wǎng)絡(luò)處理器的虛擬機(jī)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及網(wǎng)絡(luò)處理器,更具體地,本發(fā)明涉及用于網(wǎng)絡(luò)處理器的虛擬機(jī)。
背景技術(shù):
軟件一般用高級(jí)語(yǔ)言編寫(xiě),然后被編譯成機(jī)器可讀的語(yǔ)言,或者本機(jī)指令,以被處理器執(zhí)行。虛擬機(jī)可以幫助編譯高級(jí)語(yǔ)言。作為編譯過(guò)程的一部分,軟件的各種功能可以被映射到處理器的特定模塊來(lái)執(zhí)行。這種處理器編程方法對(duì)于單個(gè)處理器或者包含對(duì)稱多處理器平臺(tái)的設(shè)備的編程可能是足夠有效的,但是對(duì)于如網(wǎng)絡(luò)處理器的具有多個(gè)異構(gòu)處理單元的設(shè)備的編程,可能就不是特別有效的方法了。
對(duì)如網(wǎng)絡(luò)處理器的多核心處理器編程可能需要作出諸如哪個(gè)處理器將執(zhí)行特定的模塊的判斷,并且可能要求程序員作出關(guān)于功能劃分的決定,以及怎樣最好地利用每個(gè)處理核心。這可能導(dǎo)致對(duì)多核心處理器進(jìn)行編程變得繁重和復(fù)雜,還使得對(duì)可用的處理資源的使用不那么有效。因此,需要改進(jìn)的編寫(xiě)代碼的方法,以及包含更有效地使用處理資源的能力的虛擬機(jī)。
發(fā)明內(nèi)容
為了解決上述問(wèn)題,本發(fā)明的一個(gè)方面提供了一種編譯數(shù)據(jù)的方法,該方法包括由虛擬機(jī)接收第一代碼集;將第一代碼集的至少一部分提供給編譯器;將第一代碼集的至少一部分劃分為多個(gè)代碼分組;將代碼分組的至少一個(gè)編譯成多個(gè)第二代碼集;將至少兩個(gè)第二代碼集提供給不同的處理器資源。
本發(fā)明的另一個(gè)方面還提供了一種編譯數(shù)據(jù)的方法,該方法包括接收兩個(gè)或多個(gè)字節(jié)碼集;將兩個(gè)或多個(gè)字節(jié)碼集分組為兩個(gè)或多個(gè)任務(wù),其中兩個(gè)或多個(gè)任務(wù)的至少一個(gè)可以包括復(fù)合的任務(wù);將兩個(gè)或多個(gè)任務(wù)劃分為兩個(gè)或多個(gè)子任務(wù);將兩個(gè)或多個(gè)子任務(wù)的至少一部分提供給處理設(shè)備的不同資源。
本發(fā)明的另一個(gè)方面還提供了一種編譯數(shù)據(jù)的方法,該方法包括由設(shè)備接收軟件程序,其中程序包括用高級(jí)語(yǔ)言編寫(xiě)的多個(gè)指令;為多個(gè)指令的至少一部分確定關(guān)系結(jié)構(gòu);確定設(shè)備的可用資源;將程序劃分為多個(gè)任務(wù),并將多個(gè)任務(wù)的至少一部分分別提供給設(shè)備的多個(gè)資源,其中劃分至少部分地基于關(guān)系結(jié)構(gòu)和可用資源。
本發(fā)明的另一個(gè)方面還提供了一種編譯數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括網(wǎng)絡(luò)設(shè)備和編譯器,其中編譯器在操作中被配置來(lái)接收相關(guān)的字節(jié)碼集,將字節(jié)碼集劃分為多個(gè)被劃分的代碼,以及將多個(gè)被劃分的代碼的至少一部分分別提供給多個(gè)處理單元,其中劃分至少部分地基于網(wǎng)絡(luò)設(shè)備的可用資源,以及包含在字節(jié)碼集的至少一部分中的功能。
本發(fā)明的另一個(gè)方面還提供了一種制品,該制品包括存儲(chǔ)介質(zhì),存儲(chǔ)介質(zhì)包括所存儲(chǔ)的指令,當(dāng)這些指令被處理器執(zhí)行時(shí),導(dǎo)致接收兩個(gè)或多個(gè)代碼集,將兩個(gè)或多個(gè)代碼集分組為一個(gè)或多個(gè)任務(wù),將一個(gè)或多個(gè)任務(wù)劃分成兩個(gè)或多個(gè)子任務(wù),并將兩個(gè)或多個(gè)子任務(wù)提供給一個(gè)或多個(gè)處理器。
根據(jù)本發(fā)明的、用于網(wǎng)絡(luò)設(shè)備的虛擬機(jī)具有可以更有效地使用處理資源的能力。
在說(shuō)明書(shū)的結(jié)束部分具體指出并清楚地要求了被作為所要求保護(hù)主題的實(shí)施例的主題。但是,通過(guò)結(jié)合附圖參照下面更詳細(xì)的描述,可以更好地理解所要求保護(hù)主題的實(shí)施例,這關(guān)于組織和操作的方法,以及其目的、特征和優(yōu)點(diǎn),在附圖中圖1是適合于實(shí)施所要求保護(hù)主題的一個(gè)實(shí)施例的設(shè)備;圖2是根據(jù)所要求保護(hù)主題的一個(gè)實(shí)施例的虛擬機(jī)的框圖;
圖3是根據(jù)所要求保護(hù)主題的一個(gè)實(shí)施例的編譯器的框圖。
具體實(shí)施例方式
所要求保護(hù)主題的實(shí)施例可以包括用于網(wǎng)絡(luò)處理器的虛擬機(jī)。如網(wǎng)絡(luò)設(shè)備的計(jì)算設(shè)備通??梢园幚砥鳎缇W(wǎng)絡(luò)處理器,并且可以由一個(gè)或多個(gè)處理單元組成。網(wǎng)絡(luò)處理器可以執(zhí)行被稱為匯編語(yǔ)言的代碼,這種語(yǔ)言是為特定類型的處理器特別編寫(xiě)的低級(jí)語(yǔ)言。用于一種類型或類別的處理器的匯編語(yǔ)言代碼一般與另一類型的處理器是不兼容的。例如,特別為IntelXscale RISC處理器編寫(xiě)的低級(jí)匯編語(yǔ)言有可能不能在IntelPentiumTM處理器上執(zhí)行,因?yàn)檫@兩個(gè)處理器使用不同類型的指令集。這可能導(dǎo)致需要根據(jù)執(zhí)行軟件的處理器類型來(lái)編寫(xiě)同一軟件的幾個(gè)版本以實(shí)現(xiàn)相同的功能。為了幫助解決這個(gè)問(wèn)題,已經(jīng)開(kāi)發(fā)了也可以被稱為通用編程語(yǔ)言的更高級(jí)的編程語(yǔ)言,這在很大程度上使得底層處理器變得不為人知。例如,C、C++、BASIC以及FORTRAN語(yǔ)言都允許程序員編寫(xiě)非特定處理器專用的代碼。用于特定處理器的編譯器接收以這種語(yǔ)言所編寫(xiě)的源代碼,并且可以產(chǎn)生用于特定目標(biāo)處理器的指令。但是這些方法不包括以多個(gè)異構(gòu)處理單元為目標(biāo)的能力。
近來(lái),這些所謂的通用編程語(yǔ)言可以為程序員提供這樣的能力只編寫(xiě)一次用于特定功能的代碼,并通過(guò)抽象處理器指令集將代碼用于幾個(gè)不同的計(jì)算設(shè)備或處理器,使得在不同的平臺(tái)間計(jì)算功能是相似的。這些非處理器專用的、并且可能依賴一個(gè)或多個(gè)虛擬機(jī)來(lái)抽象用于底層處理器的指令的編程語(yǔ)言的另外的例子,例如可以包括Java和C#。這些類型的語(yǔ)言一般被編譯成固定而標(biāo)準(zhǔn)化的虛擬機(jī)指令集合,該集合可以保持恒定而與將接收代碼的目標(biāo)處理器無(wú)關(guān)。這些虛擬指令被統(tǒng)稱為字節(jié)碼。字節(jié)碼可以被分組成一個(gè)或多個(gè)字節(jié)碼模塊,并且一個(gè)或多個(gè)字節(jié)碼模塊可以構(gòu)成字節(jié)碼匯編。這些字節(jié)碼指令最終被編譯成特定設(shè)備原有的機(jī)器碼的形式,其中,接收字節(jié)碼的設(shè)備可以使用包含虛擬機(jī)的字節(jié)碼編譯器來(lái)進(jìn)行編譯。
網(wǎng)絡(luò)處理器在編譯代碼時(shí)可以利用一種或多種類型的虛擬機(jī)。虛擬機(jī)可以在高級(jí)指令集、編譯器和作為結(jié)果產(chǎn)生的編譯后的代碼之間提供某種級(jí)別的功能性。例如,虛擬機(jī)可以確定運(yùn)行時(shí)間聯(lián)接(linkage),或者將字節(jié)碼模塊映射到處理器的各模塊來(lái)執(zhí)行。但是,如在后面詳細(xì)示出的一樣,為了編程的目的,虛擬機(jī)不會(huì)將一個(gè)或多個(gè)異構(gòu)處理單元作為單個(gè)處理器。
此外,網(wǎng)絡(luò)處理器,如基于IntelIXP2800的網(wǎng)絡(luò)處理器,可以包含多個(gè)處理單元,這些處理單元例如可以包括處理器核心和多個(gè)微引擎。一般地,如字節(jié)碼的代碼是為單獨(dú)的處理單元編寫(xiě)的,并且虛擬機(jī)沒(méi)有將為一個(gè)特定處理單元指定的字節(jié)碼模塊映射到另一個(gè)處理單元來(lái)執(zhí)行的能力,或者作出任何關(guān)于在一個(gè)或多個(gè)處理單元之間對(duì)字節(jié)碼模塊或字節(jié)碼模塊的部分進(jìn)行劃分的決定的能力。此外,字節(jié)碼模塊一般被看作為是關(guān)系清楚的,這意味著,例如,當(dāng)一套模塊被提交給虛擬機(jī)時(shí),即使模塊可能需要使用相同的處理單元或者執(zhí)行補(bǔ)充或相關(guān)的功能,但當(dāng)確定如運(yùn)行時(shí)間聯(lián)接的性質(zhì)時(shí),也不考慮所有模塊的功能性。至少部分地由于這些限制,可能有必要為每個(gè)處理單元編寫(xiě)軟件,并且在軟件被提交給虛擬機(jī)時(shí)作出怎樣對(duì)每個(gè)任務(wù)進(jìn)行劃分、以及哪個(gè)處理單元將執(zhí)行每個(gè)任務(wù)的決定。這可能導(dǎo)致對(duì)網(wǎng)絡(luò)處理器的處理能力的低效率的使用,并給如網(wǎng)絡(luò)處理器的多核心處理器的編程增加了復(fù)雜性,就如在后面詳細(xì)示出的一樣。
所要求保護(hù)的主題的實(shí)施例可以包括虛擬機(jī),該虛擬機(jī)包含有接收一個(gè)或多個(gè)字節(jié)碼模塊、并將一個(gè)或多個(gè)字節(jié)碼模塊映射到多核心處理器的一個(gè)或多個(gè)處理單元的能力,其中多核心處理器可以由多個(gè)異構(gòu)處理器單元組成,例如由一個(gè)或多個(gè)微引擎和/或一個(gè)或多個(gè)處理器核心組成。所述的映射可以至少部分地基于處理器的可用資源、以及一個(gè)或多個(gè)字節(jié)碼模塊的一個(gè)或多個(gè)期望的功能來(lái)進(jìn)行。
值得注意的是,說(shuō)明書(shū)中引用的任何“一個(gè)實(shí)施例”或“實(shí)施例”是指結(jié)合實(shí)施例描述的具體的特征、結(jié)構(gòu)或特點(diǎn)被包含在所要求保護(hù)主題的至少一個(gè)實(shí)施例中。在說(shuō)明書(shū)的不同地方出現(xiàn)的短語(yǔ)“在一個(gè)實(shí)施例中”,不一定都指同一個(gè)實(shí)施例。
為了提供對(duì)所要求保護(hù)主題的實(shí)施例的完整的理解,這里可能闡述了大量的特定細(xì)節(jié)。但是,對(duì)于本領(lǐng)域的普通技術(shù)人員,所要求保護(hù)主題的實(shí)施例可以在沒(méi)有這些特定細(xì)節(jié)的情形被來(lái)實(shí)施。在其他情況下,為了不使所要求保護(hù)主題的實(shí)施例變得模糊,沒(méi)有對(duì)公知的方法、過(guò)程、元件和電路進(jìn)行描述??梢岳斫猓@里公開(kāi)的特定結(jié)構(gòu)或功能細(xì)節(jié)可以是代表性的,而不一定限制所要求保護(hù)主題的范圍。
現(xiàn)在具體地參照附圖,在附圖中,相似的部件全部用相似的標(biāo)號(hào)指定,圖1中圖示了適合于實(shí)施所要求保護(hù)主題的一個(gè)實(shí)施例的設(shè)備。圖1是設(shè)備100的框圖,設(shè)備100可以包含如網(wǎng)絡(luò)設(shè)備106的設(shè)備。網(wǎng)絡(luò)設(shè)備106例如可以包含多業(yè)務(wù)交換器、寬帶接入平臺(tái)、網(wǎng)絡(luò)交換機(jī)(Webswitch)或者網(wǎng)絡(luò)應(yīng)用設(shè)備。在這個(gè)實(shí)施例中,網(wǎng)絡(luò)設(shè)備106可以由如IntelIXP2800網(wǎng)絡(luò)處理器的網(wǎng)絡(luò)處理器104組成。網(wǎng)絡(luò)設(shè)備106還可以包含一種或多種類型的存儲(chǔ)器112,存儲(chǔ)器可以包含例如同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(SDRAM)和靜態(tài)隨機(jī)存儲(chǔ)器(SRAM),以及一個(gè)或多個(gè)接口120,接口具有與一個(gè)或多個(gè)其他設(shè)備通信的能力。網(wǎng)絡(luò)設(shè)備106的一個(gè)或多個(gè)元件可以通過(guò)例如PCI總線的一個(gè)或多個(gè)總線(未示出)通信。網(wǎng)絡(luò)處理器104可以由例如SRAM或SDRAM的一種或多種類型的內(nèi)部存儲(chǔ)器108,以及可以包含例如總線接口的一種或多種類型的接口116組成。網(wǎng)絡(luò)處理器104還可以包含如處理核心114的一個(gè)或多個(gè)處理單元,例如處理核心可以是IntelStrongARM核心(ARM是英國(guó)ARM有限公司的商標(biāo))。處理器核心114還可以包含中央控制器(未示出),例如,其幫助為網(wǎng)絡(luò)處理器的其他資源加載代碼,并執(zhí)行其他的通用目的計(jì)算類型功能,如處理協(xié)議、例外以及對(duì)包處理的額外支持。網(wǎng)絡(luò)處理器104還可以包含引擎124,引擎可以包含一個(gè)或多個(gè)硬件專用的加速功能,例如,例如加密引擎、CRC校驗(yàn)器或乘法引擎。引擎124可以包括執(zhí)行一個(gè)或多個(gè)專門(mén)功能的能力,這些功能例如可以從一個(gè)或多個(gè)處理單元卸載下來(lái),但是不可以被歸類為一個(gè)處理器單元。
網(wǎng)絡(luò)處理器104可以包括一個(gè)或多個(gè)額外的如微引擎118的處理單元,在操作中,額外的處理單元可以被配置來(lái)與處理器核心114相互作用。一個(gè)或多個(gè)微引擎118可以包括存儲(chǔ)器(未示出),例如存儲(chǔ)器具有存儲(chǔ)指令的能力。在一個(gè)實(shí)施例中,有十六個(gè)微引擎,并且每個(gè)微引擎都包括處理有八個(gè)程序線程的能力。十六個(gè)微引擎可以用例如包括存儲(chǔ)器系統(tǒng)108、引擎124和總線接口116的共享資源來(lái)操作,但是存在另外的構(gòu)造。所要求保護(hù)主題可以應(yīng)用于任何具有多于一個(gè)處理器核心和/或多于一個(gè)微引擎的處理器,注意到這點(diǎn)很重要。
圖2圖示了系統(tǒng)200,該系統(tǒng)并入了可以被實(shí)現(xiàn)為由處理器執(zhí)行的軟件的功能。執(zhí)行軟件的處理器可以是通用或者專用的處理器,如來(lái)自Intel公司制造的處理器家族的處理器,或者前面參照?qǐng)D1的網(wǎng)絡(luò)處理器104描述的一個(gè)或多個(gè)處理器。軟件可以包括編程邏輯、指令或數(shù)據(jù)以實(shí)現(xiàn)所要求保護(hù)主題的實(shí)施例的一定的功能。軟件可以被存儲(chǔ)在機(jī)器可訪問(wèn)介質(zhì)或計(jì)算機(jī)可讀的介質(zhì)中,這些介質(zhì)如只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、磁盤(pán)(例如軟盤(pán)和硬盤(pán))、光盤(pán)(例如CD-ROM)或者任何其他數(shù)據(jù)存儲(chǔ)介質(zhì)。在所要求保護(hù)主題的一個(gè)實(shí)施例中,介質(zhì)可以存儲(chǔ)壓縮和/或加密格式的編程指令,以及是在被處理器執(zhí)行前可能必須被編譯的或被安裝程序(installer)安裝的指令?;蛘撸蟊Wo(hù)主題的實(shí)施例可以被實(shí)現(xiàn)為特定的硬件元件,元件包含用于執(zhí)行所列舉的功能的硬布線邏輯,或者通過(guò)程序通用目的計(jì)算元件和常規(guī)硬件元件的任何組合來(lái)實(shí)現(xiàn)。
在所要求保護(hù)主題的一個(gè)實(shí)施例中,系統(tǒng)200可以包含虛擬機(jī)。如前所述,虛擬機(jī)可以被配置來(lái)接收可以是非專用于特定處理單元的一個(gè)或多個(gè)字節(jié)碼,解釋一個(gè)或多個(gè)字節(jié)碼,并將一個(gè)或多個(gè)字節(jié)碼進(jìn)行編譯和/或映射以由一個(gè)或多個(gè)處理單元使用。在操作中,如所述的虛擬機(jī)可以為程序員提供正被編程的處理器的統(tǒng)一視圖,并為程序員提供一個(gè)單片處理器的共用范式,而與組成正被編程的處理器的處理單元的數(shù)量無(wú)關(guān)。
在操作中,虛擬機(jī)202可以接收一個(gè)或多個(gè)字節(jié)碼模塊204。字節(jié)碼裝入程序206可以接收一個(gè)或多個(gè)模塊204,但是也可以使用多種接收一個(gè)或多個(gè)字節(jié)碼模塊的方法。在這種環(huán)境下,接收可能包括下述功能,該功能至少部分地包括解釋或讀取一個(gè)或多個(gè)字節(jié)碼模塊,并且接收不限于對(duì)模塊的物理接收。字節(jié)碼裝入程序206一般作為用于創(chuàng)建或匯編一個(gè)或多個(gè)字節(jié)碼的程序和虛擬機(jī)202之間的邏輯字節(jié)碼接收器接口。在接收一個(gè)或多個(gè)字節(jié)碼模塊204之后,模塊的至少一部分內(nèi)容可以被提供到如即時(shí)(JIT)編譯器208的編譯器。在接收一個(gè)或多個(gè)字節(jié)碼模塊204之后,JIT編譯器208可以執(zhí)行一個(gè)或多個(gè)編譯任務(wù),例如包括確定資源分配,如一個(gè)或多個(gè)字節(jié)代碼的運(yùn)行時(shí)間聯(lián)接。在一個(gè)實(shí)施例中,運(yùn)行時(shí)間聯(lián)接可以是一種類型的資源分配,其中,模塊204可以全部或部分地被分配給一個(gè)或多個(gè)處理單元來(lái)執(zhí)行。
例如,裝入程序206可以接收字節(jié)碼模塊。裝入程序206可以將這個(gè)模塊提供給JIT編譯器208。JIT編譯器208可以通過(guò)將模塊的一部分編譯成處理器214的本機(jī)指令,即這里示出的核心本機(jī)二進(jìn)制碼(core nativebinaries)210,來(lái)將模塊的一部分功能映射到網(wǎng)絡(luò)處理器的核心處理器214。此外,JIT編譯器208可以通過(guò)將模塊的另一部分編譯成微引擎218的本機(jī)指令,即這里示出的、也被稱為微塊的微引擎本機(jī)二進(jìn)制碼216,來(lái)將模塊的另一個(gè)部分映射到如引擎124或微引擎218的一個(gè)或多個(gè)其他的資源上。接收一個(gè)或多個(gè)微塊的核心處理器和一個(gè)或多個(gè)微引擎,然后可以執(zhí)行一個(gè)或多個(gè)微塊。JIT編譯器的特定功能可以參照?qǐng)D3被更好地理解。
圖3是JIT編譯器的框圖,其可以與圖2的JIT編譯器208在功能上是相似的。圖3中示出的是JIT編譯器300的框圖,說(shuō)明了由根據(jù)所要求保護(hù)主題的一個(gè)實(shí)施例的虛擬機(jī)執(zhí)行的編程邏輯。在這個(gè)實(shí)施例中,虛擬機(jī)可以指用來(lái)實(shí)現(xiàn)這里描述的一個(gè)或多個(gè)塊的功能的軟件和/或硬件。在所要求保護(hù)主題的這個(gè)實(shí)施例中,管理系統(tǒng)可以被實(shí)現(xiàn)為網(wǎng)絡(luò)設(shè)備106的一部分。但是,可以理解,這個(gè)功能可以被位于通信網(wǎng)絡(luò)中任何地方的任何設(shè)備或設(shè)備的組合實(shí)現(xiàn),這仍舊落在所要求保護(hù)主題的范圍內(nèi)。
在操作中,圖3中圖示的編程邏輯的實(shí)現(xiàn)可以執(zhí)行下面的功能,但是所給出的順序并不意味著在實(shí)現(xiàn)時(shí)進(jìn)行下面的功能的特定順序。字節(jié)碼分析器302可以被提供一個(gè)或多個(gè)字節(jié)碼模塊或者一個(gè)或多個(gè)字節(jié)碼匯編,并且一個(gè)或多個(gè)模塊或匯編可以從如裝入程序206的字節(jié)碼裝入程序被接收。分析器302可以解釋一個(gè)或多個(gè)字節(jié)碼,這種解釋包括讀一個(gè)或多個(gè)字節(jié)碼的至少一部分內(nèi)容,以至少部分地確定模塊中表示的一個(gè)或多個(gè)功能。分析器302可以包括用來(lái)確定一個(gè)或多個(gè)字節(jié)碼的一個(gè)或多個(gè)功能之間的關(guān)系結(jié)構(gòu)的功能,這將在后面更詳細(xì)地解釋,這種關(guān)系結(jié)構(gòu)也可以稱為抽象語(yǔ)法圖。在一個(gè)實(shí)施例中,分析器302可以將一個(gè)或多個(gè)字節(jié)碼匯編成一個(gè)或多個(gè)任務(wù),并且在這種情況下,例如,一個(gè)任務(wù)可以包括一個(gè)或多個(gè)字節(jié)碼的一部分。
代碼劃分啟發(fā)式引擎(Code Partitioning Heuristics Engine)304可以接收至少一部分語(yǔ)法圖,語(yǔ)法圖可以由一個(gè)或多個(gè)任務(wù)組成。至少部分地基于抽象語(yǔ)法圖、一個(gè)或多個(gè)任務(wù)和/或一個(gè)或多個(gè)與引擎相關(guān)的啟發(fā),引擎304可以確定例如執(zhí)行一個(gè)或多個(gè)任務(wù)的資源需要、一個(gè)或多個(gè)處理器順序或并行執(zhí)行任務(wù)的能力以及對(duì)任務(wù)進(jìn)行劃分的能力的這些因素?;谏厦嫣岬降囊蛩?,引擎304可以至少部分地將一個(gè)或多個(gè)任務(wù)劃分為一個(gè)或多個(gè)子任務(wù)。例如,一個(gè)或多個(gè)任務(wù)或子任務(wù)可以包括一個(gè)或多個(gè)字節(jié)碼。當(dāng)進(jìn)行劃分時(shí),引擎304可以考慮一個(gè)或多個(gè)字節(jié)碼中所包含的所有任務(wù),以及例如可以用來(lái)處理任務(wù)的資源。引擎304還可以包括產(chǎn)生一個(gè)或多個(gè)在被劃分的任務(wù)之間的一個(gè)或多個(gè)邏輯鏈接的能力,所述鏈接例如可以是一個(gè)或多個(gè)代碼集,這些代碼集提供在一個(gè)或多個(gè)任務(wù)之間的通信,這些任務(wù)可以互相依賴并且可以在不同的處理單元上被處理。例如,呼叫函數(shù)可以從一個(gè)處理單元被提供給另一個(gè)處理單元,并且用于提供呼叫函數(shù)的代碼例如可以由引擎304產(chǎn)生。
一旦一個(gè)或多個(gè)任務(wù)被劃分以被一個(gè)或多個(gè)處理單元處理,被劃分的任務(wù)就被發(fā)送到合成器310,其中,合成器可以是專用于一個(gè)處理單元或其他資源的,不過(guò)重要的是注意所要求保護(hù)的主題不限于此。例如,合成器可以進(jìn)行將非專用的字節(jié)碼譯為與其相關(guān)的處理單元或資源專用的本機(jī)指令。被劃分的任務(wù)被發(fā)送給與被指定來(lái)處理一個(gè)或多個(gè)任務(wù)的處理單元或資源相關(guān)的合成器310。例如,除將被劃分的任務(wù)提供給處理單元之外,合成器310可能能夠提供一個(gè)或多個(gè)任務(wù)或子任務(wù)到與其相關(guān)的處理單元的額外的映射。例如,合成器310可以改變由引擎304提出的映射方案,并提供額外的優(yōu)化,或者可以利用與微引擎相關(guān)的如硬件加速的特定硬件特征,例如圖1的引擎124。
所提出的映射信息然后可以被提供給評(píng)分模塊312,該模塊可以包括確定關(guān)于由一個(gè)或多個(gè)合成器310或代碼劃分引擎304確定的映射的效率的一個(gè)或多個(gè)量度(measure)或度量標(biāo)準(zhǔn)(metrics)的能力。評(píng)分模塊312可以接收一個(gè)或多個(gè)目標(biāo)(goal)314,目標(biāo)被用來(lái)確定一個(gè)或多個(gè)度量標(biāo)準(zhǔn)。
目標(biāo)可以以多種方式被引入,包括但不限于源代碼實(shí)現(xiàn)(instrumentation)或注釋、編輯元數(shù)據(jù)、配置文件或流、或者外部管理設(shè)備。評(píng)分模塊312可以將適宜度分?jǐn)?shù)作為適應(yīng)反饋316提供給代碼劃分引擎304。虛擬機(jī)的至少一部分功能可以至少部分地基于適宜度分?jǐn)?shù)被重復(fù)。例如,在一個(gè)實(shí)施例中,處理可以一直被重復(fù)直到達(dá)到閾值容許分?jǐn)?shù),或者可以被重復(fù)特定的次數(shù)。在本上下文中,分?jǐn)?shù)可以是任何可以被用來(lái)確定具體映射方案的期望度的量度或度量標(biāo)準(zhǔn)。度量標(biāo)準(zhǔn)的例子可以包括例如設(shè)備利用率、執(zhí)行路徑等待時(shí)間或者存儲(chǔ)器的利用。一旦適宜度分?jǐn)?shù)達(dá)到了使得對(duì)虛擬機(jī)的至少一部分功能的重復(fù)不再是所期望的,迭代就可以停止,并且可以使用接收最期望的結(jié)果如用于劃分的最高分?jǐn)?shù)的分區(qū)?;蛘?,如果一個(gè)或多個(gè)目標(biāo)沒(méi)有被滿足,則映射方案可以停止,并且這些結(jié)果例如可以通過(guò)虛擬機(jī)接口被作為通知提供。參照編譯器308描述的功能塊,在下面還可以進(jìn)行更詳細(xì)的描述。
在一個(gè)實(shí)施例中,字節(jié)代碼分析器302可以接收或讀取一個(gè)或多個(gè)字節(jié)碼,并將它們匯編成抽象語(yǔ)法圖。例如抽象語(yǔ)法圖可以包括字節(jié)碼如程序的關(guān)系結(jié)構(gòu)。在這種情況下,抽象語(yǔ)法圖可以包括一個(gè)或多個(gè)字節(jié)碼的兩個(gè)或多個(gè)功能之間的任何關(guān)系結(jié)構(gòu)。例如,抽象語(yǔ)法圖可以包括邊和頂點(diǎn)的集合,其中,頂點(diǎn)表示功能,邊代表功能的執(zhí)行路經(jīng)。當(dāng)然,應(yīng)該理解,這只是一個(gè)實(shí)施例,對(duì)多個(gè)任務(wù)的任何抽象都可以被用在所要求保護(hù)主題的至少一個(gè)實(shí)施例中,所述抽象提供將任務(wù)作為組的理解。在這個(gè)實(shí)施例中,字節(jié)碼被匯編成程序,這可以提供一個(gè)或多個(gè)其他模塊來(lái)確定一個(gè)或多個(gè)字節(jié)碼的一個(gè)或多個(gè)目的的能力,這可以作為等同的實(shí)施例。
在一個(gè)實(shí)施例中,代碼劃分啟發(fā)式引擎304可以從分析器302接收抽象語(yǔ)法圖,并且,可以作為該語(yǔ)法圖的一部分接收一個(gè)或多個(gè)任務(wù)。在這個(gè)實(shí)施例中,引擎304可以具有確定設(shè)備可用資源的能力,例如核心處理器和微引擎的數(shù)量和能力。此外,引擎304可能能夠確定設(shè)備的其他可以資源,例如加密引擎,其可能和處理單元不相關(guān),但是可能能夠?qū)υ谝粋€(gè)或多個(gè)任務(wù)中所公開(kāi)的相同功能進(jìn)行仿真。在這個(gè)可選的實(shí)施例中,語(yǔ)法圖公開(kāi)的一個(gè)或多個(gè)功能可以被映射到除一個(gè)或多個(gè)處理單元之外的資源,例如,網(wǎng)絡(luò)設(shè)備的一個(gè)或多個(gè)硬件元件,如同圖1的引擎124。
設(shè)備的可用資源可以至少部分地從資源描述符306提供,其例如可以包括關(guān)于例如網(wǎng)絡(luò)設(shè)備的處理單元的一個(gè)或多個(gè)資源,或者如硬件或軟件的其他可用資源的信息。資源描述符306還可以提供關(guān)于一個(gè)或多個(gè)資源的信息,如處理能力、限制或可用性。此外,引擎304可以確定任務(wù)的各種目的,并且可以確定如任務(wù)所期望的定時(shí)和優(yōu)先權(quán)的因素。引擎304可以確定一個(gè)或多個(gè)任務(wù)是否可以被劃分為一個(gè)或多個(gè)子任務(wù),或者例如如果一些任務(wù)是被串起來(lái)的或彼此依賴,它們是否可以與其他任務(wù)并行處理或它們是否必須被順序處理。引擎304可以基于一個(gè)或多個(gè)這些因素,來(lái)將字節(jié)碼或任務(wù)映射到設(shè)備的特定處理器。這個(gè)映射信息可以被提供給一個(gè)或多個(gè)合成器310。
在一個(gè)實(shí)施例中,一個(gè)或多個(gè)邏輯合成器310可以從代碼劃分啟發(fā)式引擎304接收一個(gè)或多個(gè)任務(wù)。合成器可以與運(yùn)行虛擬機(jī)的網(wǎng)絡(luò)設(shè)備的單獨(dú)的處理單元相關(guān)聯(lián)。例如,對(duì)于在例如具有十七個(gè)處理單元的IntelIXP1200網(wǎng)絡(luò)處理器上執(zhí)行的虛擬機(jī),JIT編譯器308可以由十七個(gè)邏輯合成器組成。或者,單個(gè)合成器可以與一類處理單元相關(guān)聯(lián),而不是與單個(gè)處理單元相關(guān)聯(lián)。一個(gè)或多個(gè)合成器310可以評(píng)估由引擎304提供的任務(wù)的映射結(jié)構(gòu),并且可以改進(jìn)或改變映射結(jié)構(gòu)。這種改進(jìn)或改變可以是因?yàn)槿魏螖?shù)量的原因,例如,如效率、資源的可用性、處理器的優(yōu)先權(quán)或者限制。在其他實(shí)施例中,一個(gè)或多個(gè)合成器310可以不對(duì)由代碼劃分引擎304執(zhí)行的映射進(jìn)行任何改變。但是,如果一個(gè)或多個(gè)合成器310不改變映射,那么一個(gè)或多個(gè)合成器310可以將一個(gè)或多個(gè)任務(wù)的映射度量標(biāo)準(zhǔn)提供給評(píng)分模塊312。這些映射度量標(biāo)準(zhǔn)可以被用來(lái)確定適宜度分?jǐn)?shù),該適宜度分?jǐn)?shù)可以包括對(duì)引擎304進(jìn)行劃分以及將一個(gè)或多個(gè)字節(jié)碼翻譯成本地二進(jìn)制碼的效率如何的度量。
在一個(gè)實(shí)施例中,適宜度分?jǐn)?shù)包括確定一些因素,如由引擎304執(zhí)行的映射的效率,基于映射成功處理任務(wù)的能力,或者與映射或任務(wù)分配相比,處理單元或其他資源的可用容量。評(píng)分可以是基于一個(gè)或多個(gè)目標(biāo)314,目標(biāo)可以包括這些因素,例如,如優(yōu)先權(quán)、所期望的功能或定時(shí),并且,在一個(gè)實(shí)施例中,可以由用戶提供?;蛘?,例如,目標(biāo)314可以被自動(dòng)產(chǎn)生,并且可以包括程序?qū)S脤傩?。此外,一個(gè)或多個(gè)度量標(biāo)準(zhǔn)可以從一個(gè)或多個(gè)合成器310被提供給評(píng)分模塊312,并且評(píng)分模塊312可以至少部分地基于從一個(gè)或多個(gè)合成器310提供的一個(gè)或多個(gè)度量標(biāo)準(zhǔn)來(lái)確定分?jǐn)?shù)。適宜度分?jǐn)?shù)可以將至少一部分?jǐn)?shù)據(jù)提供給適應(yīng)反饋模塊316。
在一個(gè)實(shí)施例中,適應(yīng)反饋模塊316可以從評(píng)分模塊312接收一個(gè)或多個(gè)值,如適宜度分?jǐn)?shù),并且可以具有對(duì)由引擎304產(chǎn)生的映射進(jìn)行改變的能力。例如至少部分地基于一個(gè)或多個(gè)值,映射可以被改變。例如,模塊316可以確定分?jǐn)?shù),或者塊流程圖300的一個(gè)或多個(gè)映射迭代上的分?jǐn)?shù)的改變,并且可以基于例如在一個(gè)或多個(gè)迭代上的分?jǐn)?shù)改變的趨勢(shì)來(lái)對(duì)代碼劃分引擎304提出一個(gè)或多個(gè)改變。在這個(gè)實(shí)施例中,閾值可以被用來(lái)確定對(duì)映射或劃分的改變是否是期望的。如果一個(gè)或多個(gè)改變是期望的,那么該信息被提供給引擎304,在那里一個(gè)或多個(gè)改變可以被實(shí)現(xiàn)。信息例如可以通過(guò)邏輯接口(未示出)被提供,該接口允許從適應(yīng)反饋模塊316的輸入。
可以理解,實(shí)施例可以被應(yīng)用于包含至少一個(gè)處理單元的任何設(shè)備。此外,這里已經(jīng)描述了所要求保護(hù)主題的實(shí)施例的特定特征,但是,對(duì)于本領(lǐng)域的技術(shù)人員,將可以想到很多修改、替換、改變和等效變化。此外,雖然這里已經(jīng)詳細(xì)描述了一個(gè)功能塊以及它們之間的關(guān)系,但是于本領(lǐng)域的技術(shù)人員可以考慮到,幾個(gè)操作可以不用使用其他的操作而被執(zhí)行,或者可以建立額外的功能或者功能之間的關(guān)系,而仍舊符合所要求保護(hù)的主題。因此,應(yīng)該理解,所附的權(quán)利要求意于覆蓋所有這種落在所要求保護(hù)主題的實(shí)施例的真正精神之內(nèi)的修改和變換。
權(quán)利要求
1.一種編譯數(shù)據(jù)的方法,包括由虛擬機(jī)接收第一代碼集;將所述第一代碼集的至少一部分提供給編譯器;將所述第一代碼集的所述至少一部分劃分為多個(gè)代碼分組;將所述代碼分組的至少一個(gè)編譯成多個(gè)第二代碼集;以及將至少兩個(gè)所述第二代碼集提供給不同的處理器資源。
2.如權(quán)利要求1所述的方法,其中,所述接收包括被提供一個(gè)或多個(gè)字節(jié)碼模塊,其中所述接收由所述虛擬機(jī)的邏輯字節(jié)碼接收器接口進(jìn)行。
3.如權(quán)利要求1所述的方法,其中,所述接收包括被提供軟件程序,其中,所述軟件程序被接收為一個(gè)或多個(gè)字節(jié)碼模塊。
4.如權(quán)利要求1所述的方法,其中,所述劃分基于執(zhí)行所述編譯器的設(shè)備可用的資源,以及所述第一代碼集的至少一個(gè)功能。
5.如權(quán)利要求4所述的方法,其中,所述資源包括實(shí)現(xiàn)在一個(gè)處理器設(shè)備中的一個(gè)或多個(gè)處理單元。
6.如權(quán)利要求1所述的方法,還包括產(chǎn)生一個(gè)或多個(gè)代碼集,以提供在不同處理單元上的所述兩個(gè)或多個(gè)代碼集之間的呼叫函數(shù)的邏輯鏈接。
7.一種編譯數(shù)據(jù)的方法,包括接收兩個(gè)或多個(gè)字節(jié)碼集;將所述兩個(gè)或多個(gè)字節(jié)碼集分組為兩個(gè)或多個(gè)任務(wù),其中所述兩個(gè)或多個(gè)任務(wù)的至少一個(gè)可以包括復(fù)合的任務(wù);將所述兩個(gè)或多個(gè)任務(wù)劃分為兩個(gè)或多個(gè)子任務(wù);以及將所述兩個(gè)或多個(gè)子任務(wù)的至少一部分提供給處理設(shè)備的不同資源。
8.如權(quán)利要求7所述的方法,其中所述復(fù)合任務(wù)包括語(yǔ)法圖。
9.如權(quán)利要求7所述的方法,其中所述分組包括定義所述兩個(gè)或多個(gè)代碼集的至少一部分之間的關(guān)系結(jié)構(gòu)。
10.如權(quán)利要求7所述的方法,其中所述劃分還包括為所述兩個(gè)或多個(gè)子任務(wù)的至少一部分確定處理器映射,并且至少部分地基于所述處理器映射提供邏輯分區(qū)。
11.如權(quán)利要求7所述的方法,其中所述接收包括被提供一個(gè)或多個(gè)字節(jié)碼模塊,其中所述接收由所述虛擬機(jī)的字節(jié)碼接口進(jìn)行,以及將所述一個(gè)或多個(gè)字節(jié)碼模塊提供給編譯器。
12.如權(quán)利要求7所述的方法,其中所述劃分基于執(zhí)行至少一部分所述劃分的資源可用的資源,以及所述第一代碼集的至少一個(gè)功能。
13.如權(quán)利要求7所述的方法,其中處理設(shè)備的所述一個(gè)或多個(gè)資源包括多核心處理器的一個(gè)或多個(gè)處理單元。
14.如權(quán)利要求7所述的方法,其中所述劃分至少部分地基于從前面的劃分獲得的反饋,其中,所述反饋從基于一個(gè)或多個(gè)度量標(biāo)準(zhǔn)來(lái)度量所述劃分的適宜度分?jǐn)?shù)獲得。
15.如權(quán)利要求7所述的方法,其中所述劃分至少部分地基于所述反饋,在所述提供之前被執(zhí)行一次或多次。
16.一種編譯數(shù)據(jù)的方法,包括由設(shè)備接收軟件程序,其中所述程序包括用高級(jí)語(yǔ)言編寫(xiě)的多個(gè)指令;為所述多個(gè)指令的至少一部分確定關(guān)系結(jié)構(gòu);確定設(shè)備的可用資源;將所述程序劃分為多個(gè)任務(wù),并將所述多個(gè)任務(wù)的至少一部分分別提供給設(shè)備的多個(gè)資源,其中所述劃分至少部分地基于所述關(guān)系結(jié)構(gòu)和可用資源。
17.如權(quán)利要求16所述的方法,其中,所述軟件程序包括多個(gè)字節(jié)碼。
18.如權(quán)利要求16所述的方法,其中,所述確定關(guān)系結(jié)構(gòu)和所述劃分由編譯器執(zhí)行。
19.如權(quán)利要求16所述的方法,其中,所述關(guān)系結(jié)構(gòu)包括抽象語(yǔ)法圖。
20.如權(quán)利要求16所述的方法,其中,所述可用資源包括實(shí)現(xiàn)在一個(gè)處理設(shè)備中的一個(gè)或多個(gè)處理單元。
21.如權(quán)利要求16所述的方法,其中,所述劃分還包括將所述兩個(gè)或多個(gè)任務(wù)中的兩個(gè)或多個(gè)提供給不同的可用資源。
22.如權(quán)利要求16所述的方法,被提供軟件程序,其中所述軟件程序被作為一個(gè)或多個(gè)字節(jié)碼模塊接收。
23.如權(quán)利要求16所述的方法,其中,所述劃分基于對(duì)進(jìn)行至少一部分所述劃分的資源可用的資源,以及所述第一代碼集的至少一個(gè)功能。
24.如權(quán)利要求16所述的方法,其中,所述處理設(shè)備的一個(gè)或多個(gè)資源包括多核心處理器的一個(gè)或多個(gè)處理單元。
25.如權(quán)利要求16所述的方法,其中,所述劃分至少部分地基于從前面的劃分獲得的反饋,其中所述反饋從基于一個(gè)或多個(gè)度量標(biāo)準(zhǔn)來(lái)度量所述劃分的適宜度分?jǐn)?shù)獲得。
26.一種編譯數(shù)據(jù)的系統(tǒng),包括網(wǎng)絡(luò)設(shè)備;以及編譯器,其中所述編譯器在操作中被配置來(lái)接收相關(guān)的字節(jié)碼集,將所述字節(jié)碼集劃分為多個(gè)被劃分的代碼,以及將所述多個(gè)被劃分的代碼的至少一部分分別提供給多個(gè)處理單元,其中所述劃分至少部分地基于網(wǎng)絡(luò)設(shè)備的可用資源,以及實(shí)現(xiàn)在所述字節(jié)碼集的至少一部分中的功能。
27.如權(quán)利要求26所述的系統(tǒng),其中所述接收包括被提供一個(gè)或多個(gè)字節(jié)碼模塊,其中所述接收被虛擬機(jī)的字節(jié)碼接口執(zhí)行。
28.如權(quán)利要求26所述的系統(tǒng),其中所述劃分基于所述虛擬機(jī)可用的資源和所述第一代碼集的至少一個(gè)功能。
29.如權(quán)利要求26所述的系統(tǒng),其中所述資源包括與網(wǎng)絡(luò)設(shè)備相關(guān)聯(lián)的一個(gè)或多個(gè)硬件元件。
30.如權(quán)利要求26所述的系統(tǒng),其中所述資源可以包括一個(gè)或多個(gè)專用硬件加速器,其中所述編譯器產(chǎn)生用于基于指令的處理資源的代碼,以使用所述一個(gè)或多個(gè)專用硬件加速器來(lái)執(zhí)行一個(gè)或多個(gè)字節(jié)碼,其中,所述一個(gè)或多個(gè)字節(jié)碼從一個(gè)或多個(gè)處理資源上被卸載。
31.如權(quán)利要求26所述的系統(tǒng),其中所述第二代碼集包括機(jī)器語(yǔ)言。
32.如權(quán)利要求26所述的系統(tǒng),其中處理器的所述一個(gè)或多個(gè)資源包括多核心處理器的一個(gè)或多個(gè)異構(gòu)處理單元。
33.如權(quán)利要求26所述的系統(tǒng),其中所述劃分至少部分地基于從前面的劃分獲得的反饋,其中所述反饋從基于一個(gè)或多個(gè)度量標(biāo)準(zhǔn)來(lái)度量所述劃分的適宜度分?jǐn)?shù)獲得。
34.如權(quán)利要求26所述的系統(tǒng),其中所述劃分至少部分地基于所述反饋,在所述提供之前被進(jìn)行一次或多次。
35.一種制品,包括存儲(chǔ)介質(zhì);所述存儲(chǔ)介質(zhì)包括所存儲(chǔ)的指令,當(dāng)這些指令被處理器執(zhí)行時(shí),導(dǎo)致接收兩個(gè)或多個(gè)代碼集,將所述兩個(gè)或多個(gè)代碼集分組為一個(gè)或多個(gè)任務(wù),將所述一個(gè)或多個(gè)任務(wù)劃分成兩個(gè)或多個(gè)子任務(wù),并將所述兩個(gè)或多個(gè)子任務(wù)提供給一個(gè)或多個(gè)處理器。
36.如權(quán)利要求35所述的制品,其中所述一個(gè)或多個(gè)任務(wù)包括抽象語(yǔ)法圖。
37.如權(quán)利要求35所述的制品,其中所述分組包括定義所述兩個(gè)或多個(gè)代碼集的至少一部分之間的關(guān)系結(jié)構(gòu)。
38.如權(quán)利要求35所述的制品,其中所述劃分還包括,為所述兩個(gè)或多個(gè)子任務(wù)的至少一部分確定處理器映射,并至少部分地基于所述處理器映射提供邏輯分區(qū)。
39.如權(quán)利要求35所述的制品,其中所述接收包括被提供一個(gè)或多個(gè)字節(jié)碼模塊,其中所述接收由虛擬機(jī)的字節(jié)碼接口執(zhí)行。
40.如權(quán)利要求35所述的制品,其中所述劃分基于虛擬機(jī)可用的資源和所述第一代碼集的至少一個(gè)功能。
41.如權(quán)利要求35所述的制品,其中所述資源包括一個(gè)或多個(gè)處理器。
全文摘要
本發(fā)明公開(kāi)了一種編譯數(shù)據(jù)的方法、系統(tǒng),以及存儲(chǔ)有實(shí)現(xiàn)所述方法的指令的制品。本發(fā)明公開(kāi)了用于網(wǎng)絡(luò)處理器的虛擬機(jī)的多個(gè)實(shí)施例。
文檔編號(hào)G06F9/45GK1506816SQ200310115738
公開(kāi)日2004年6月23日 申請(qǐng)日期2003年11月28日 優(yōu)先權(quán)日2002年12月10日
發(fā)明者艾倫·E·斯通, 艾倫 E 斯通 申請(qǐng)人:英特爾公司