專(zhuān)利名稱(chēng):一種復(fù)位向量的代碼實(shí)現(xiàn)方法、系統(tǒng)及設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子技術(shù)領(lǐng)域,特別涉及一種復(fù)位向量的代碼實(shí)現(xiàn)方法、系統(tǒng)及設(shè)備。
背景技術(shù):
一般在處理系統(tǒng)中都包括處理器比如數(shù)字信號(hào)處理器(Digital Signal Processor,DSP),或中央處理器(Central Processing Unit, CPU)等,和內(nèi)存,其中處理器可以是單核處理器,也可以是多核處理器。處理系統(tǒng)在進(jìn)入業(yè)務(wù)層進(jìn)行業(yè)務(wù)處理的過(guò)程中, 都需要先通過(guò)底層操作來(lái)啟動(dòng),即將可執(zhí)行文件(Image文件)中的代碼加載到內(nèi)存中,由處理器調(diào)用執(zhí)行內(nèi)存中加載的代碼逐步完成內(nèi)核硬件資源、BSS(Bl0Ck Started by Symbol 段、libc庫(kù)等的初始化,并最終調(diào)用Image文件中的主(main)函數(shù)從而進(jìn)入業(yè)務(wù)層進(jìn)行業(yè)務(wù)處理。其中在Image文件中包括實(shí)現(xiàn)某些功能的代碼,處理器調(diào)用執(zhí)行內(nèi)存中的代碼即為代碼的實(shí)現(xiàn)過(guò)程。對(duì)于包括單個(gè)核的處理器,內(nèi)存中包括一個(gè)用于上電或復(fù)位啟動(dòng)的復(fù)位向量 (reset vector),在該處理器進(jìn)入業(yè)務(wù)層前,需要將Image文件的部分代碼加載到復(fù)位向量,該單核處理器調(diào)用執(zhí)行復(fù)位向量中加載的代碼從而進(jìn)入業(yè)務(wù)層。而對(duì)于包括多個(gè)核的處理器,其內(nèi)存分為兩種類(lèi)型,即各個(gè)核(core)的片外共享內(nèi)存,比如二級(jí)內(nèi)存(L2),和每個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存,比如一級(jí)內(nèi)存(Li)。一種情況下,在每個(gè)核的片內(nèi)私有內(nèi)存中可以包括一個(gè)對(duì)應(yīng)的復(fù)位向量,可以加載每個(gè)核對(duì)應(yīng)的 Image文件中的特定代碼,則每個(gè)核可以分別從對(duì)應(yīng)片內(nèi)私有內(nèi)存中的復(fù)位向量啟動(dòng)從而進(jìn)入業(yè)務(wù)層;另一種情況下,在片外共享內(nèi)存中可以包括至少一個(gè)復(fù)位向量,加載多個(gè)核對(duì)應(yīng)的Image文件中的共享代碼,則各個(gè)核都可以從片外共享內(nèi)存中的復(fù)位向量啟動(dòng)從而進(jìn)入業(yè)務(wù)層,且各個(gè)核需要通過(guò)調(diào)用復(fù)位向量的代碼,來(lái)進(jìn)入各自的處理分支,現(xiàn)有一種方案是在各個(gè)核調(diào)用執(zhí)行共享的復(fù)位向量代碼的過(guò)程中,如果當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),核(即處理器中的一個(gè)處理單元)會(huì)從硬件寄存器中讀取當(dāng)前核的標(biāo)識(shí)(ID),調(diào)用復(fù)位向量中跳轉(zhuǎn)指令即jmp(當(dāng)前核的標(biāo)識(shí)對(duì)應(yīng)的Image文件分支入口名),并跳轉(zhuǎn)到對(duì)應(yīng)的Image文件分支入口地址,這樣就實(shí)現(xiàn)了當(dāng)前核跳轉(zhuǎn)到對(duì)應(yīng)的處理分支。而現(xiàn)有技術(shù)中復(fù)位向量中代碼的實(shí)現(xiàn)是與業(yè)務(wù)布局直接綁定的,比如在業(yè)務(wù)場(chǎng)景1中,CPUl對(duì)應(yīng)執(zhí)行Image 1,而在業(yè)務(wù)場(chǎng)景2中CPUl對(duì)應(yīng)執(zhí)行ImageO,如果發(fā)生業(yè)務(wù)場(chǎng)景的切換時(shí),需要對(duì)復(fù)位向量中跳轉(zhuǎn)指令進(jìn)行修改,即由原來(lái)的jmp(Image 1)修改為 jmp (Image 0),這樣各個(gè)核在對(duì)共享的復(fù)位向量處理后,才能跳轉(zhuǎn)到正確的處理分支;且底層還需要發(fā)布新的Lib庫(kù)給業(yè)務(wù)層。這樣在業(yè)務(wù)場(chǎng)景發(fā)生變化時(shí),需要對(duì)復(fù)位向量中代碼進(jìn)行修改,并重新加載到處理系統(tǒng)的內(nèi)存中進(jìn)入業(yè)務(wù)層,操作比較復(fù)雜。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種復(fù)位向量的代碼實(shí)現(xiàn)方法、系統(tǒng)及設(shè)備,實(shí)現(xiàn)了多核處理器的多個(gè)核共享的復(fù)位向量中代碼的實(shí)現(xiàn)與業(yè)務(wù)布局的無(wú)關(guān),從而簡(jiǎn)化業(yè)務(wù)場(chǎng)景發(fā)生變化時(shí)復(fù)位向量中代碼的實(shí)現(xiàn)過(guò)程。本發(fā)明實(shí)施例提供一種復(fù)位向量的代碼實(shí)現(xiàn)方法,包括當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令, 所述跳轉(zhuǎn)指令包括jmp (處理分支入口),用于指示跳轉(zhuǎn)的寄存器為處理分支入口,所述多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,所述全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;將所述讀取的全局變量值作為所述跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口本發(fā)明實(shí)施例提供一種處理器核,其特征在于,包括函數(shù)調(diào)用單元,用于當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令包括jmp (處理分支入口),用于指示跳轉(zhuǎn)的寄存器為處理分支入口,所述多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;變量讀取單元,用于讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,所述全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;跳轉(zhuǎn)單元,用于將所述變量讀取單元讀取的全局變量值作為所述跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口。本發(fā)明實(shí)施例提供一種多核處理器,包括多個(gè)核,各個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存, 和片外共享內(nèi)存;所述核,用于當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令包括jmp(處理分支入口),用于指示跳轉(zhuǎn)的寄存器為處理分支入口,所述多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,所述全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;將所述讀取的全局變量值作為所述跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口;所述片內(nèi)私有內(nèi)存,用于儲(chǔ)存對(duì)應(yīng)核的全局變量值;所述片外共享內(nèi)存,用于加載所述多個(gè)核共享的復(fù)位向量,及各個(gè)核的處理分支。本發(fā)明實(shí)施例還提供一種處理系統(tǒng),包括上述多核處理器。本發(fā)明實(shí)施例提供一種計(jì)算機(jī)系統(tǒng),包括外部接口、芯片共享內(nèi)存和總線,其特征在于,所述計(jì)算機(jī)系統(tǒng)還包括上述多核處理器。本發(fā)明實(shí)施例中對(duì)于多核處理器中多個(gè)核共享復(fù)位向量時(shí),在復(fù)位向量的代碼實(shí)現(xiàn)過(guò)程中,各個(gè)核調(diào)用復(fù)位向量中的跳轉(zhuǎn)指令,且讀取對(duì)應(yīng)片內(nèi)私有內(nèi)存中的全局變量值, 將讀取的全局變量值作為跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器中的內(nèi)容,從而實(shí)現(xiàn)當(dāng)前核跳轉(zhuǎn)到對(duì)應(yīng)的處理分支入口。由于多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同,則復(fù)位向量中讀取全局變量值的代碼是不會(huì)隨著各個(gè)核對(duì)應(yīng)處理分支入口地址的改變而發(fā)生改變;且對(duì)于多個(gè)核來(lái)說(shuō)跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器相同,則復(fù)位向量中跳轉(zhuǎn)到各個(gè)核的處理分支入口的代碼也不會(huì)隨著核的改變而改變。因此,如果業(yè)務(wù)場(chǎng)景發(fā)生改變時(shí),就不需要對(duì)復(fù)位向量的代碼進(jìn)行修改,但是需要更新相應(yīng)核的片內(nèi)私有內(nèi)存中儲(chǔ)存的全局變量值。實(shí)現(xiàn)了多核處理器中多個(gè)核中共享的復(fù)位向量中代碼的實(shí)現(xiàn)與業(yè)務(wù)布局的無(wú)關(guān),從而簡(jiǎn)化業(yè)務(wù)場(chǎng)景發(fā)生變化時(shí)復(fù)位向量中代碼的實(shí)現(xiàn)過(guò)程。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實(shí)施例提供的多核處理器的結(jié)構(gòu)示意圖;圖2是本發(fā)明方法實(shí)施例提供的一種復(fù)位向量的代碼實(shí)現(xiàn)方法的流程圖;圖3是本發(fā)明實(shí)施例提供的可執(zhí)行文件加載到內(nèi)存中的結(jié)構(gòu)示意圖;圖4是本發(fā)明實(shí)施例提供的兩個(gè)核共享一個(gè)復(fù)位向量時(shí),在各個(gè)核從片外共享內(nèi)存啟動(dòng)的過(guò)程中,復(fù)位向量的代碼實(shí)現(xiàn)示意圖;圖5是本發(fā)明實(shí)施例提供的一種處理器核的結(jié)構(gòu)示意圖;圖6是本發(fā)明實(shí)施例提供的另一種處理器核的結(jié)構(gòu)示意圖;圖7是本發(fā)明實(shí)施例提供的一種多核處理器的結(jié)構(gòu)示意圖;圖8是本發(fā)明一個(gè)具體實(shí)施例中處理系統(tǒng)的芯片的結(jié)構(gòu)示意圖;圖9是本發(fā)明實(shí)施例提供的一種計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實(shí)施例提供的一種復(fù)位向量的代碼實(shí)現(xiàn)方法,適用于多核處理器中,多個(gè)核共享一個(gè)復(fù)位向量的情況。參考圖1所示,對(duì)于一個(gè)多核處理器來(lái)說(shuō),包括內(nèi)存和多個(gè)核即多個(gè)處理單元,其中處理器中的核可以是CPU,也可以是DSP,還可以是CPU和DSP,還可以其它的核,圖1中以兩個(gè)CPU和兩個(gè)DSP為例說(shuō)明;而內(nèi)存可以分為兩種類(lèi)型,即各個(gè)核分別對(duì)應(yīng)的片內(nèi)私有內(nèi)存(比如Li),及各個(gè)核共享的片外共享內(nèi)存(比如L2)。在本發(fā)明實(shí)施例中,在片外共享內(nèi)存中包括至少一個(gè)復(fù)位向量,圖1中以兩個(gè)復(fù)位向量為例說(shuō)明,即兩個(gè)CPU共享的第一復(fù)位向量和兩個(gè)DSP共享的第二復(fù)位向量。在這些共享的復(fù)位向量中,可以加載多個(gè)核對(duì)應(yīng)的Image文件中的共享代碼,則各個(gè)核都可以從片外共享內(nèi)存中的復(fù)位向量啟動(dòng)從而進(jìn)入業(yè)務(wù)層,且各個(gè)核需要通過(guò)調(diào)用復(fù)位向量的代碼,來(lái)進(jìn)入各自的處理分支,具體地各個(gè)核可以通過(guò)本發(fā)明的復(fù)位向量的代碼實(shí)現(xiàn)方法,從而進(jìn)入各自的處理分支, 方法流程圖如圖2所示,包括步驟101,當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,該跳轉(zhuǎn)指令包括jmp (處理分支入口 )??梢岳斫猓瑓⒖紙D3所示,在處理系統(tǒng)上電啟動(dòng)前,各個(gè)核需要先將對(duì)應(yīng)的Image 文件的代碼分別加載到片內(nèi)私有內(nèi)存和片外共享內(nèi)存中,具體地,將Image文件中的片內(nèi)私有內(nèi)存(以Ll為例)的內(nèi)容加載(即儲(chǔ)存)到對(duì)應(yīng)核的片內(nèi)私有內(nèi)存中(如圖3中用黑點(diǎn)填充的部分),包括全局變量的值,其中全局變量可以記為Image文件進(jìn)程(Image Dispatch),而該全局變量的值用來(lái)指示對(duì)應(yīng)核對(duì)應(yīng)的處理分支入口地址;將Image文件中片外共享內(nèi)存的內(nèi)容加載到片外共享內(nèi)存中,包括各個(gè)核對(duì)應(yīng)處理分支的代碼和數(shù)據(jù);將 Image文件中復(fù)位向量的代碼(如圖3中斜線填充的部分)加載到片外共享內(nèi)存中的復(fù)位向量處。在加載完Image文件的代碼后,各個(gè)核都從片外共享內(nèi)存中的復(fù)位向量處啟動(dòng) (即復(fù)位向量的代碼實(shí)現(xiàn)過(guò)程),具體地,每個(gè)核會(huì)調(diào)用執(zhí)行復(fù)位向量中加載的代碼逐步完成內(nèi)核硬件資源、BSS段、Iibc庫(kù)等的初始化,并最終調(diào)用main函數(shù)從而進(jìn)入業(yè)務(wù)層進(jìn)行業(yè)務(wù)處理。在上述進(jìn)入業(yè)務(wù)層的過(guò)程中,各個(gè)核需要通過(guò)調(diào)用復(fù)位向量的代碼來(lái)進(jìn)入各自的處理分支。對(duì)于其中一個(gè)核來(lái)說(shuō),如果當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),需要通過(guò)調(diào)用復(fù)位向量中的跳轉(zhuǎn)指令,并執(zhí)行該跳轉(zhuǎn)指令從而進(jìn)入處理分支。該跳轉(zhuǎn)指令包括jmp (χ),其中 χ表示跳轉(zhuǎn)的寄存器,在本發(fā)明實(shí)施例中跳轉(zhuǎn)的寄存器為處理分支入口,可以記為Image文件進(jìn)程的入口(Image Dispatch Entry),則本實(shí)施例中跳轉(zhuǎn)指令用來(lái)指示跳轉(zhuǎn)的寄存器為處理分支入口。對(duì)于共享復(fù)位向量的多個(gè)核來(lái)說(shuō),跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器χ是相同的,則多個(gè)核跳轉(zhuǎn)到對(duì)應(yīng)處理分支的跳轉(zhuǎn)指令的二進(jìn)制編碼相同。步驟102,讀取當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,該全局變量值用來(lái)指示當(dāng)前核對(duì)應(yīng)的處理分支入口地址??梢岳斫?,本發(fā)明實(shí)施例中,各個(gè)核的片內(nèi)私有內(nèi)存中加載的全局變量的邏輯地址是相同的,但是全局變量值卻是不同的。各個(gè)核在進(jìn)行上述的加載過(guò)程前,對(duì)片內(nèi)私有內(nèi)存和L2的訪問(wèn)都是采用鏈接技術(shù),通過(guò)鏈接腳本直接鏈接到相應(yīng)的空間,而多個(gè)核在訪問(wèn)對(duì)應(yīng)的片內(nèi)私有內(nèi)存時(shí)采用邏輯地址是相同的。則對(duì)于多個(gè)核來(lái)說(shuō),在實(shí)現(xiàn)讀取全局變量值的過(guò)程中,復(fù)位向量的代碼段是相同的。步驟103,將步驟102中讀取的全局變量值作為跳轉(zhuǎn)指令中處理分支入口的內(nèi)容, 跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口。核在執(zhí)行跳轉(zhuǎn)指令時(shí),會(huì)將讀取的全局變量值作為跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器即處理分支入口的內(nèi)容,具體地,核會(huì)將步驟102中讀取的全局變量值讀到跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器即處理分支入口中,即jmp(x)的χ中,并根據(jù)該跳轉(zhuǎn)的寄存器χ中的具體內(nèi)容實(shí)施跳轉(zhuǎn),從而實(shí)現(xiàn)當(dāng)前核跳轉(zhuǎn)到對(duì)應(yīng)的處理分支入口??梢?jiàn),本發(fā)明實(shí)施例中在多核處理器中多個(gè)核共享復(fù)位向量時(shí),在復(fù)位向量的代碼實(shí)現(xiàn)過(guò)程中,各個(gè)核調(diào)用復(fù)位向量中的跳轉(zhuǎn)指令,且讀取對(duì)應(yīng)片內(nèi)私有內(nèi)存中的全局變量值,將讀取的全局變量值作為跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器中的內(nèi)容,從而實(shí)現(xiàn)各個(gè)核跳轉(zhuǎn)到對(duì)應(yīng)的處理分支入口。由于多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同,則復(fù)位向量中讀取全局變量值的代碼是不會(huì)隨著各個(gè)核對(duì)應(yīng)處理分支入口地址的改變而發(fā)生改變;且對(duì)于多個(gè)核來(lái)說(shuō)跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器相同,則復(fù)位向量中跳轉(zhuǎn)到各個(gè)核的處理分支入口的代碼也不會(huì)隨著核的改變而改變。因此,如果業(yè)務(wù)場(chǎng)景發(fā)生改變時(shí),比如在業(yè)務(wù)場(chǎng)景1中,CPUl對(duì)應(yīng)執(zhí)行 Image 1,而在業(yè)務(wù)場(chǎng)景2中CPU2對(duì)應(yīng)執(zhí)行Image 1,當(dāng)從業(yè)務(wù)場(chǎng)景1切換到業(yè)務(wù)場(chǎng)景2時(shí), 在復(fù)位向量中讀取全局變量值和跳轉(zhuǎn)的代碼段都不會(huì)變化,就不需要對(duì)復(fù)位向量的代碼進(jìn)行修改,但是需要更新相應(yīng)核的片內(nèi)私有內(nèi)存中儲(chǔ)存的全局變量值。實(shí)現(xiàn)了多核處理器中多個(gè)核共享的復(fù)位向量中代碼的實(shí)現(xiàn)與業(yè)務(wù)布局的無(wú)關(guān),從而簡(jiǎn)化業(yè)務(wù)場(chǎng)景發(fā)生變化時(shí)復(fù)位向量中代碼的實(shí)現(xiàn)過(guò)程。需要說(shuō)明的是,多個(gè)核從片外共享內(nèi)存中復(fù)位向量處的啟動(dòng)可以同時(shí)執(zhí)行,也可以順序執(zhí)行,上述步驟101到103只是其中一個(gè)核啟動(dòng)的過(guò)程中,復(fù)位向量的代碼實(shí)現(xiàn)方法。且在執(zhí)行上述步驟之前,需要將各個(gè)核對(duì)應(yīng)的處理分支入口地址分別儲(chǔ)存為各個(gè)核的片內(nèi)私有內(nèi)存中的全局變量值。參考圖4所示為兩個(gè)核0和1共享一個(gè)復(fù)位向量時(shí),在各個(gè)核從L2層啟動(dòng)的過(guò)程中,復(fù)位向量的代碼實(shí)現(xiàn)示意圖,其中各個(gè)核都分別從各自的片內(nèi)私有內(nèi)存中讀取全局變量值,以該值作為各個(gè)核的處理分支入口地址并跳轉(zhuǎn)到處理分支入口。且在復(fù)位向量中,這兩個(gè)核0和1對(duì)于讀取各自片內(nèi)私有內(nèi)存中全局變量值,及跳轉(zhuǎn)到處理分支入口的代碼段是相同的。本發(fā)明實(shí)施例提供一種處理器核,該處理器核可以是CPU,也可以是DSP,其結(jié)構(gòu)示意圖如圖5所示,包括函數(shù)調(diào)用單元10,用于當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令包括jmp (處理分支入口),用于指示跳轉(zhuǎn)的寄存器為處理分支入口,所述多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;變量讀取單元11,用于讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,所述全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;跳轉(zhuǎn)單元12,用于將所述變量讀取單元10讀取的全局變量值作為所述函數(shù)調(diào)用單元11調(diào)用的跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口。具體地,跳轉(zhuǎn)單元12會(huì)將變量讀取單元11讀取的全局變量值讀到跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器中,即處理分支入口中,并根據(jù)該跳轉(zhuǎn)的寄存器中的具體內(nèi)容實(shí)施跳轉(zhuǎn),從而實(shí)現(xiàn)當(dāng)前核跳轉(zhuǎn)到對(duì)應(yīng)的處理分支入口。需要說(shuō)明的是,共享復(fù)位向量的多個(gè)核對(duì)應(yīng)片內(nèi)私有內(nèi)存中儲(chǔ)存的全局變量邏輯地址相同,不同的是該全局變量的具體取值;且多個(gè)核在執(zhí)行復(fù)位向量的跳轉(zhuǎn)指令時(shí),調(diào)用的跳轉(zhuǎn)指令的二進(jìn)制編碼相同??梢?jiàn),本發(fā)明實(shí)施例的處理器核與其它處理器核共享復(fù)位向量時(shí),在復(fù)位向量的代碼實(shí)現(xiàn)過(guò)程中,各個(gè)核的函數(shù)調(diào)用單元10調(diào)用復(fù)位向量中的跳轉(zhuǎn)指令,且變量讀取單元 11讀取對(duì)應(yīng)片內(nèi)私有內(nèi)存中的全局變量值,跳轉(zhuǎn)單元12將讀取的全局變量值作為跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器中的內(nèi)容,從而實(shí)現(xiàn)核跳轉(zhuǎn)到對(duì)應(yīng)的處理分支入口。由于多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同,則復(fù)位向量中讀取全局變量值的代碼是不會(huì)隨著各個(gè)核的處理分支入口的改變而發(fā)生改變;且對(duì)于多個(gè)核來(lái)說(shuō)跳轉(zhuǎn)指令中跳轉(zhuǎn)的寄存器是相同的,則復(fù)位向量中跳轉(zhuǎn)到各個(gè)核的處理分支入口的代碼也不會(huì)隨著核的改變而改變。因此,如果業(yè)務(wù)場(chǎng)景發(fā)生改變時(shí),復(fù)位向量中讀取全局變量值和跳轉(zhuǎn)的代碼段都不會(huì)變化,就不需要對(duì)復(fù)位向量的代碼進(jìn)行修改。實(shí)現(xiàn)了多核處理器的多個(gè)核共享的復(fù)位向量中代碼的實(shí)現(xiàn)與業(yè)務(wù)布局的無(wú)關(guān),從而簡(jiǎn)化業(yè)務(wù)場(chǎng)景發(fā)生變化時(shí)復(fù)位向量中代碼的實(shí)現(xiàn)過(guò)程。參考如圖6所示,在其他具體的處理器核實(shí)施例中,處理器核除了包括如圖5所示的結(jié)構(gòu)外,還可以包括地址儲(chǔ)存單元13和變量值更新單元14,其中地址儲(chǔ)存單元13,用于將所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址儲(chǔ)存為所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值;變量值更新單元14,用于更新所述當(dāng)前核的片內(nèi)私有內(nèi)存中儲(chǔ)存的全局變量值。本實(shí)施例中的地址儲(chǔ)存單元13可以將該核的片內(nèi)私有內(nèi)存中的全局變量值儲(chǔ)存為該核對(duì)應(yīng)的處理分支入口地址;如果業(yè)務(wù)場(chǎng)景發(fā)生改變,比如在業(yè)務(wù)場(chǎng)景1中,CPUl對(duì)應(yīng)執(zhí)行Image 1,而在業(yè)務(wù)場(chǎng)景2中CPU2對(duì)應(yīng)執(zhí)行Image 1,當(dāng)從業(yè)務(wù)場(chǎng)景1切換到業(yè)務(wù)場(chǎng)景 2時(shí),可以由變量值更新單元14更新該核的片內(nèi)私有內(nèi)存中儲(chǔ)存的全局變量值。本實(shí)施例提供一種多核處理器,可以為CPU或DSP,結(jié)構(gòu)示意圖如圖7所示,包括多個(gè)核20、各個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存21,和片外共享內(nèi)存22。其中所述核20,用于當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令包括jmp(處理分支入口),用于指示跳轉(zhuǎn)的寄存器為處理分支入口,所述多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;;讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,所述全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;將所述讀取的全局變量值作為所述跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口;所述片內(nèi)私有內(nèi)存21 (圖7中以Ll為例說(shuō)明),用于儲(chǔ)存對(duì)應(yīng)核的全局變量值;所述片外共享內(nèi)存22(圖7中以L2為例說(shuō)明),用于加載所述多個(gè)核共享的復(fù)位向量代碼,及各個(gè)核的處理分支??梢岳斫猓緦?shí)施例中核20的結(jié)構(gòu)與圖5或6所示的處理器核結(jié)構(gòu)類(lèi)似,且核20 在從片外共享內(nèi)存中啟動(dòng)的過(guò)程中,復(fù)位向量的代碼實(shí)現(xiàn)方法如圖2所示的流程圖,在此不進(jìn)行贅述。需要說(shuō)明的是,本實(shí)施例的多核處理器中,多個(gè)核20、各個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存 21和片外共享內(nèi)存22可以集成到一個(gè)芯片上。本發(fā)明實(shí)施例還提供一種處理系統(tǒng),該處理系統(tǒng)中可以包括至少一個(gè)如圖7所示的多核處理器。本實(shí)施例的處理系統(tǒng)中的多核處理器可以為CPU,也可以為DSP ;還可以包括CPU 和數(shù)字信號(hào)處理器DSP,在這種情況下,多個(gè)CPU可以共享第一復(fù)位向量,多個(gè)DSP可以共享第二復(fù)位向量。這里所說(shuō)的第一復(fù)位向量和第二復(fù)位向量并不代表順序關(guān)系,而是說(shuō)明復(fù)位向量的不同。則多個(gè)中央處理器CPU共享第一復(fù)位向量,和/或多個(gè)數(shù)字信號(hào)處理器 DSP共享第二復(fù)位向量。參考圖8所示,在一個(gè)具體的實(shí)施例中,在一個(gè)處理系統(tǒng)的芯片中包括2個(gè)簇 (Cluster)即CPU簇和DSP簇,其中對(duì)于每個(gè)簇即為一個(gè)多核處理器,包括4個(gè)核,每個(gè)核有對(duì)應(yīng)的片內(nèi)私有內(nèi)存如Li,且4個(gè)核共享一個(gè)片外共享內(nèi)存即L2。在該芯片中還可以包括芯片上所有多核處理器的片外共享內(nèi)存即三級(jí)內(nèi)存(U)和雙倍速率存儲(chǔ)器(Double Data Rate, DDR)。在該芯片中DSP和CPU的結(jié)構(gòu)都可以如圖5或圖6所示,在此不進(jìn)行贅述。本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)系統(tǒng),是一種具體應(yīng)用中的處理系統(tǒng),結(jié)構(gòu)示意圖如圖9所示,包括外部接口(interfaces) 30、芯片共享內(nèi)存(memory) 32比如DDR、總線 (bus) 31和多核處理器33。其中總線31是用來(lái)連接計(jì)算機(jī)系統(tǒng)中的所有硬件;而外部接口 30連接在總線31 上,用來(lái)連接計(jì)算機(jī)系統(tǒng)的外部設(shè)備;芯片共享內(nèi)存32連接在總線31上,是計(jì)算機(jī)系統(tǒng)中所有處理器核的共享內(nèi)存;多核處理器的結(jié)構(gòu)可以如圖5或6所示,在此不進(jìn)行贅述。本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括ROM、RAM、磁盤(pán)或光盤(pán)等。以上對(duì)本發(fā)明實(shí)施例所提供的復(fù)位向量的代碼實(shí)現(xiàn)方法、系統(tǒng)及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.一種復(fù)位向量的代碼實(shí)現(xiàn)方法,其特征在于,包括當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令包括jmp(處理分支入口),用于指示跳轉(zhuǎn)的寄存器為處理分支入口 ;所述多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,所述全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;將所述讀取的全局變量值作為所述跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口。
2.如權(quán)利要求1所述的方法,其特征在于,所述讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值之前包括將所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址儲(chǔ)存為所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值。
3.如權(quán)利要求1或2所述的方法,其特征在于,還包括更新所述當(dāng)前核的片內(nèi)私有內(nèi)存中儲(chǔ)存的全局變量值。
4.如權(quán)利要求1至3任一項(xiàng)所述的方法,其特征在于,所述核包括中央處理器CPU,和 /或數(shù)字信號(hào)處理器DSP ;所述復(fù)位向量包括第一復(fù)位向量,和/或第二復(fù)位向量;則多個(gè)中央處理器CPU共享第一復(fù)位向量,和/或多個(gè)數(shù)字信號(hào)處理器DSP共享第二復(fù)位向量。
5.一種處理器核,其特征在于,包括函數(shù)調(diào)用單元,用于當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令包括jmp(處理分支入口),用于指示跳轉(zhuǎn)的寄存器為處理分支入口,所述多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;變量讀取單元,用于讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,所述全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;跳轉(zhuǎn)單元,用于將所述變量讀取單元讀取的全局變量值作為所述跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口。
6.如權(quán)利要求5所述的處理器核,其特征在于,還包括地址儲(chǔ)存單元,用于將所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址儲(chǔ)存為所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值。
7.如權(quán)利要求5或6所述的處理器核,其特征在于,還包括變量值更新單元,用于更新所述當(dāng)前核的片內(nèi)私有內(nèi)存中儲(chǔ)存的全局變量值。
8.一種多核處理器,其特征在于,包括多個(gè)核,各個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存,和片外共享內(nèi)存;所述核,用于當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,所述跳轉(zhuǎn)指令包括jmp(處理分支入口),用于指示跳轉(zhuǎn)的寄存器為處理分支入口, 所述多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;讀取所述當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,所述全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;將所述讀取的全局變量值作為所述跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口 ;所述片內(nèi)私有內(nèi)存,用于儲(chǔ)存對(duì)應(yīng)核的全局變量值;所述片外共享內(nèi)存,用于加載所述多個(gè)核共享的復(fù)位向量,及各個(gè)核的處理分支。
9.如權(quán)利要求8所述的多核處理器,其特征在于,所述核如權(quán)利要求5到7任一項(xiàng)所述的處理器核。
10.如權(quán)利要求8或9所述的多核處理器,其特征在于,所述核為中央處理器CPU,或數(shù)字信號(hào)處理器DSP。
11.一種處理系統(tǒng),其特征在于,包括至少一個(gè)如權(quán)利要求8或9所述的多核處理器。
12.如權(quán)利要求11所述的處理系統(tǒng),其特征在于,所述多核處理器為中央處理器CPU, 和/或數(shù)字信號(hào)處理器DSP ;所述復(fù)位向量包括第一復(fù)位向量,和/或第二復(fù)位向量;則多個(gè)中央處理器CPU共享第一復(fù)位向量,和/或多個(gè)數(shù)字信號(hào)處理器DSP共享第二復(fù)位向量。
13.一種計(jì)算機(jī)系統(tǒng),包括外部接口、芯片共享內(nèi)存和總線,其特征在于,所述計(jì)算機(jī)系統(tǒng)還包括如權(quán)利要求8或9所述的多核處理器。
全文摘要
一種復(fù)位向量的代碼實(shí)現(xiàn)方法、系統(tǒng)和裝置,應(yīng)用電子技術(shù)領(lǐng)域。該復(fù)位向量的代碼實(shí)現(xiàn)方法包括當(dāng)前核需要進(jìn)入對(duì)應(yīng)的處理分支時(shí),調(diào)用多個(gè)核共享的復(fù)位向量中的跳轉(zhuǎn)指令,該跳轉(zhuǎn)指令包括jmp(處理分支入口)用于指示跳轉(zhuǎn)的寄存器為處理分支入口,多個(gè)核對(duì)應(yīng)的片內(nèi)私有內(nèi)存的邏輯地址相同;讀取當(dāng)前核的片內(nèi)私有內(nèi)存中的全局變量值,該全局變量值用來(lái)指示所述當(dāng)前核對(duì)應(yīng)的處理分支入口地址;將讀取的全局變量值作為跳轉(zhuǎn)指令中處理分支入口的內(nèi)容,跳轉(zhuǎn)到片外共享內(nèi)存中對(duì)應(yīng)的處理分支入口。從而進(jìn)行復(fù)位向量的代碼實(shí)現(xiàn)過(guò)程。
文檔編號(hào)G06F9/34GK102326145SQ201180001478
公開(kāi)日2012年1月18日 申請(qǐng)日期2011年8月10日 優(yōu)先權(quán)日2011年8月10日
發(fā)明者雷鎮(zhèn) 申請(qǐng)人:華為技術(shù)有限公司