專(zhuān)利名稱(chēng):重疊指令存取單元和重疊指令存取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種重疊指令存取單元和重疊指令存取方法、以及用于對(duì)程 序進(jìn)行壓縮和存儲(chǔ)的裝置和方法。
背景技術(shù):
隨著片上系統(tǒng)(soc)的規(guī)模的增大和soc的應(yīng)用程序的發(fā)展,需要將嵌入式處理器集成到整個(gè)系統(tǒng)中,以便基于優(yōu)化的指令和結(jié)構(gòu)來(lái)提供高性能。這種通用架構(gòu)之一是將數(shù)字信號(hào)處理器(DSP)集成到系統(tǒng)中。在這種平臺(tái)上構(gòu) 建的應(yīng)用程序可以利用由DSP提供的高性能來(lái)對(duì)數(shù)字媒體進(jìn)行處理。將處理單元集成到系統(tǒng)中提高了 SOC的可編程性。然而,對(duì)于用于存儲(chǔ) 這些處理器單元執(zhí)行的指令的存儲(chǔ)器的需求也相應(yīng)地增大,這是因?yàn)槊總€(gè)處 理單元都需要單獨(dú)的指令存儲(chǔ)器來(lái)存儲(chǔ)用于執(zhí)行的指令。對(duì)于多核架構(gòu)下的 單程序多數(shù)據(jù)應(yīng)用(SPMD)而言,問(wèn)題更加嚴(yán)重。在這種情況下,由于多核處 理器的每個(gè)處理單元都需要讀取和執(zhí)行相同的程序,因此需要將所述程序復(fù) 制到用于每個(gè)處理單元的指令緩沖器中以供其執(zhí)行,這增大了對(duì)于指令存儲(chǔ) 器的需求。由于指令存儲(chǔ)器是系統(tǒng)成本的主要來(lái)源(特別是SPMD模型),因 此,將處理單元集成到系統(tǒng)中相應(yīng)地增大了系統(tǒng)的成本。因此,需要一種減小對(duì)于指令存儲(chǔ)器的需求的方法。發(fā)明內(nèi)容考慮到上述問(wèn)題而提出了本發(fā)明。本發(fā)明的一個(gè)目的是提供一種用于對(duì) 程序進(jìn)行壓縮和存儲(chǔ)的方法和系統(tǒng),其能夠以壓縮程序段的形式存儲(chǔ)要由處 理單元執(zhí)行的程序,從而減小了對(duì)用于存儲(chǔ)所述程序的存儲(chǔ)器的需求。本發(fā) 明的另一目的是提供一種重疊指令存取單元和重疊指令存取方法,其通過(guò)以 重疊的方式進(jìn)行對(duì)于當(dāng)前解壓縮的指令段的執(zhí)行和對(duì)于接下來(lái)要調(diào)用的壓縮 指令段的解壓縮而提高程序執(zhí)行的效率。具體地說(shuō),本發(fā)明利用了編譯器技術(shù)和重疊存取技術(shù)來(lái)解決上述問(wèn)題。 具體地說(shuō),本發(fā)明利用編譯器來(lái)將程序分為多個(gè)指令段,壓縮這些指令段, 并且將壓縮后的指令段存儲(chǔ)在存儲(chǔ)器中,而不是像原來(lái)那樣將程序直接存儲(chǔ) 在存儲(chǔ)器中。此外,由于程序被以壓縮指令段的形式存儲(chǔ),因此為了不降低 處理單元的執(zhí)行所述程序的效率,本發(fā)明使用了重疊存取技術(shù),即,在處理 單元執(zhí)行當(dāng)前指令段的同時(shí),解壓縮單元將接下來(lái)要調(diào)用的壓縮指令段預(yù)先 解壓縮和存儲(chǔ)在緩沖器中以供處理單元隨后使用。根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的方法,包括以下步驟編譯該程序;利用程序中的跳轉(zhuǎn)指令將編譯后的程序的指令 部分劃分為多個(gè)指令段;壓縮所述多個(gè)指令段以獲得多個(gè)壓縮指令段;以及 將所述多個(gè)壓縮指令段存儲(chǔ)在存儲(chǔ)器中。根據(jù)本發(fā)明的另 一方面,提供了 一種用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的裝置, 包括編譯器,用于編譯該程序,利用程序中的跳轉(zhuǎn)指令將編譯后的程序的 指令部分劃分為多個(gè)指令段,并且壓縮所述多個(gè)指令段以獲得多個(gè)壓縮指令 段;以及存儲(chǔ)器,用于存儲(chǔ)所述多個(gè)壓縮指令段。根據(jù)本發(fā)明的另一方面,提供了一種由包括處理單元、緩沖器和解壓縮 單元的重疊指令存取單元執(zhí)行的重疊指令存取方法,用于讀取和執(zhí)行以多個(gè) 壓縮程序段的形式存儲(chǔ)在存儲(chǔ)器中的程序,其中,每個(gè)壓縮程序段包括開(kāi)頭 處的首標(biāo)、壓縮指令段和末尾處的跳轉(zhuǎn)指令,所述首標(biāo)包含基于程序中的調(diào) 用關(guān)系預(yù)測(cè)的接下來(lái)要調(diào)用的壓縮程序段的存儲(chǔ)地址和所述壓縮指令段的存 儲(chǔ)地址,所述跳轉(zhuǎn)指令包含在編寫(xiě)所述程序時(shí)指定的接下來(lái)要調(diào)用的壓縮程 序段的存儲(chǔ)地址,所述重疊指令存取方法包括由處理單元發(fā)出指令讀取請(qǐng) 求;由解壓縮單元響應(yīng)于所述指令讀取請(qǐng)求而從存儲(chǔ)器中讀取所請(qǐng)求的壓縮 指令段,將其解壓縮,并且將解壓縮后的指令段存儲(chǔ)在緩沖器中以供處理單 元執(zhí)行;以及由處理單元從緩沖器中讀取和執(zhí)行所述指令段,同時(shí),由解壓 縮單元根據(jù)與該指令段對(duì)應(yīng)的首標(biāo)中的要調(diào)用的壓縮程序段的存儲(chǔ)地址,從 存儲(chǔ)器中讀取該壓縮程序段,將對(duì)應(yīng)的壓縮指令段解壓縮,并將解壓縮后的 指令段存儲(chǔ)在緩沖器中。根據(jù)本發(fā)明的另一方面,提供了一種重疊指令存取單元,用于讀取和執(zhí) 行以多個(gè)壓縮程序段的形式存儲(chǔ)在存儲(chǔ)器中的程序,其中,每個(gè)壓縮程序段 包括開(kāi)頭處的首標(biāo)、壓縮指令段和末尾處的跳轉(zhuǎn)指令,所述首標(biāo)包含基于程 序中的調(diào)用關(guān)系預(yù)測(cè)的接下來(lái)要調(diào)用的壓縮程序段的存儲(chǔ)地址和所述壓縮指
令段的存儲(chǔ)地址,所述跳轉(zhuǎn)指令包含在編寫(xiě)所述程序時(shí)指定的接下來(lái)要調(diào)用的壓縮程序段的存儲(chǔ)地址,所述重疊指令存取單元包括緩沖器;處理單元, 用于發(fā)送指令讀取請(qǐng)求,從緩沖器讀取指令,并且執(zhí)行該指令;解壓縮單元, 用于響應(yīng)于處理單元發(fā)送的指令讀取請(qǐng)求,從存儲(chǔ)器中讀取所請(qǐng)求的壓縮指 令段,將該壓縮指令段解壓縮,并且將解壓縮后的指令段存儲(chǔ)在緩沖器中以 供處理單元執(zhí)行,其中,在處理單元從緩沖器中讀取和執(zhí)行所述指令段的同 時(shí),解壓縮單元根據(jù)與該指令段對(duì)應(yīng)的首標(biāo)中的要調(diào)用的壓縮程序段的存儲(chǔ) 地址,從存儲(chǔ)器中讀取該壓縮程序段,將對(duì)應(yīng)的壓縮指令段解壓縮,并將解 壓縮后的指令段存儲(chǔ)在緩沖器中。通過(guò)利用根據(jù)本發(fā)明的程序壓縮方法和裝置來(lái)對(duì)程序進(jìn)行壓縮和存儲(chǔ), 減小了存儲(chǔ)程序所需的存儲(chǔ)空間,而且在某種程度上提高了程序的安全性。 此外,在根據(jù)本發(fā)明的重疊指令存取方法中,處理單元執(zhí)行指令段的過(guò)程和 解壓縮單元將要調(diào)用的下一指令段解壓縮的過(guò)程是重疊的,解壓縮單元可以 將處理單元將需要的指令段預(yù)先存儲(chǔ)在緩沖器中,因此減少了處理單元的等 待時(shí)間,提高了執(zhí)行效率。對(duì)于基于多核處理器的SPMD應(yīng)用,多個(gè)根據(jù)本 發(fā)明的重疊指令存取單元中的處理單元可以共同使用 一個(gè)存儲(chǔ)器來(lái)存儲(chǔ)要執(zhí) 行的程序,因此,避免了將該程序復(fù)制到用于每個(gè)處理單元的指令存儲(chǔ)器的 需要,從而進(jìn)一步減小了對(duì)于存儲(chǔ)器的需求。
通過(guò)結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)描述,本發(fā)明的上述和其它目 的、特征、優(yōu)點(diǎn)將會(huì)變得更加清楚,其中圖1是根據(jù)本發(fā)明的用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的裝置的框圖。圖2是根據(jù)本發(fā)明的、由圖1所示的裝置執(zhí)行的用于對(duì)程序進(jìn)行壓縮和 存儲(chǔ)的方法的流程圖。圖3示意性地示出了根據(jù)本發(fā)明的、當(dāng)利用圖1所示的裝置來(lái)處理程序 時(shí)的各個(gè)階段的處理結(jié)果。圖4是根據(jù)本發(fā)明的重疊指令存取單元的框圖。圖5是根據(jù)本發(fā)明的、由圖4所示的重疊指令存取單元執(zhí)行的重疊指令 存取方法的流程圖。圖6是根據(jù)本發(fā)明的重疊指令存取方法的數(shù)據(jù)流圖。
具體實(shí)施方式
下面,針對(duì)附圖來(lái)描述本發(fā)明的實(shí)施例。應(yīng)當(dāng)理解這里描述的實(shí)施例 僅僅是說(shuō)明性的,而不是限制本發(fā)明的范圍。本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到在 不背離本發(fā)明的范圍的情況下,可以對(duì)這些實(shí)施例做出各種修改和組合。通常,程序由若干個(gè)指令段組成,并且這些指令段通過(guò)跳轉(zhuǎn)指令而互相 鏈接。在處理單元執(zhí)行所述程序時(shí),由于各個(gè)指令段之間的數(shù)據(jù)獨(dú)立性,處 理單元依序獨(dú)立地執(zhí)行這些指令段,并且在執(zhí)行了一個(gè)指令段之后,根據(jù)所 遇到的跳轉(zhuǎn)指令而跳轉(zhuǎn)到下一指令段。所述跳轉(zhuǎn)指令包括jump、 call等,其 指示程序中各個(gè)指令段之間的調(diào)用關(guān)系。基于這一特性,如果從序列圖(sequence diagram)的角度來(lái)看,可以將各 個(gè)指令段之間的調(diào)用關(guān)系視為列表。例如,對(duì)于H.264解碼器,它的序列圖 由parsing(解沖斤)、idct、 intra/inter prediction(幀內(nèi)/幀間子貞測(cè))、reconstruction(重 建)和in-lo叩filtering(環(huán)內(nèi)濾波)等步驟組成;在處理數(shù)據(jù)流時(shí),H.264解碼器 對(duì)數(shù)據(jù)流依序執(zhí)行這些步驟,并且這些步驟中的每一個(gè)在被執(zhí)行時(shí)與其它步 驟是互相獨(dú)立的。在讀取程序之后,為了將該程序轉(zhuǎn)換成機(jī)器可讀的代碼,需要對(duì)該程序 進(jìn)行編譯。編譯后的程序由兩部分組成,即數(shù)據(jù)段聲明部分和指令部分。 本發(fā)明主要應(yīng)用于指令部分。如上所述,對(duì)于指令部分,可以將其看作由若 干個(gè)指令段組成,并且各個(gè)指令段通過(guò)跳轉(zhuǎn)指令而互相鏈接。根據(jù)本發(fā)明的、用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的裝置100基于上述事實(shí), 其將要由處理單元執(zhí)行的程序的指令部分劃分為多個(gè)獨(dú)立的指令段,并且壓 縮這些指令段,以便減'J、存儲(chǔ)所述程序所需的存儲(chǔ)空間。下面,將結(jié)合圖1來(lái)詳細(xì)描述根據(jù)本發(fā)明的、用于對(duì)程序進(jìn)行壓縮和存 儲(chǔ)的裝置100。圖1示出了根據(jù)本發(fā)明的、用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的裝置100的框 圖。如圖1所示,裝置100包括編譯器101和連接到編譯器101的中央指令 存儲(chǔ)器102。編譯器101可以由執(zhí)行本發(fā)明所述的功能的硬件的組合實(shí)現(xiàn),也可以由 現(xiàn)。編譯器101用于對(duì)要由處理單元執(zhí)行的程序進(jìn)行編譯,利用程序中的跳
轉(zhuǎn)指令將編譯后的程序的指令部分劃分為多個(gè)指令段,壓縮所述多個(gè)指令段, 并且將所獲得的壓縮指令段存儲(chǔ)在中央指令存儲(chǔ)器102中。中央指令存儲(chǔ)器102可以是諸如只讀存儲(chǔ)器(ROM)、快閃存儲(chǔ)器的非易 失性存儲(chǔ)器,并且用于存儲(chǔ)由編譯器101提供的壓縮指令段。下面,將結(jié)合圖1和圖2來(lái)詳細(xì)描述裝置100的操作。圖2示出了根據(jù) 本發(fā)明的、由圖1所示的裝置執(zhí)行的用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的方法的流 程圖。首先,在步驟S201中,編譯器IOI讀入該程序,并且以本領(lǐng)域公知的方 法對(duì)該程序進(jìn)行編譯。在編譯過(guò)程中,編譯器確定該程序中的跳轉(zhuǎn)指令的位 置,并且生成表示該程序中的各個(gè)函數(shù)(或指令段)之間的調(diào)用關(guān)系的調(diào)用圖。 編譯器用來(lái)生成調(diào)用圖的方法是公知的,為簡(jiǎn)單起見(jiàn),在此省略對(duì)該方法的 描述。接下來(lái),在步驟S202中,編譯器101利用程序中的跳轉(zhuǎn)指令作為劃分點(diǎn), 將編譯后的程序的指令部分劃分為多個(gè)指令段。具體地說(shuō),當(dāng)在程序中發(fā)現(xiàn) 第一個(gè)跳轉(zhuǎn)指令時(shí),編譯器101將位于該跳轉(zhuǎn)指令前面的指令劃分為一個(gè)指 令段,然后,當(dāng)編譯器101發(fā)現(xiàn)下一跳轉(zhuǎn)指令時(shí),它將該跳轉(zhuǎn)指令作為新的 劃分點(diǎn)而將位于前一跳轉(zhuǎn)指令和當(dāng)前跳轉(zhuǎn)指令之間的指令劃分為一個(gè)新的指 令段。以這一方式,編譯器101利用程序中的跳轉(zhuǎn)指令而將程序的指令部分 劃分為多個(gè)指令段。然而,在某些程序中,可能出現(xiàn)在該程序的某一區(qū)域中存在大量跳轉(zhuǎn)指 令的情況,盡管這種情況在媒體應(yīng)用的環(huán)境下比較少。此時(shí),如果編譯器利 用所發(fā)現(xiàn)的每個(gè)跳轉(zhuǎn)指令來(lái)劃分所述程序,則可能獲得大量指令段,并且其 中的很多指令段的長(zhǎng)度比較小,這將導(dǎo)致最終整個(gè)程序的壓縮率下降并且該 程序的執(zhí)行效率降低。為了解決這一問(wèn)題,最好使用以下方法來(lái)劃分所述程 序。在產(chǎn)生調(diào)用圖之后,編譯器101基于該調(diào)用圖確定程序中各個(gè)跳轉(zhuǎn)指令 的跳轉(zhuǎn)距離,該跳轉(zhuǎn)距離可以是當(dāng)前跳轉(zhuǎn)指令與下一跳轉(zhuǎn)指令的存儲(chǔ)器偏移 地址之間的差。然后,編譯器101將每個(gè)跳轉(zhuǎn)指令的跳轉(zhuǎn)距離與預(yù)定的閾值 進(jìn)行比較。當(dāng)跳轉(zhuǎn)指令的跳轉(zhuǎn)距離小于所述閾值時(shí),編譯器101不利用該指 令來(lái)劃分所述程序。當(dāng)跳轉(zhuǎn)指令的跳轉(zhuǎn)距離大于或等于所述閾值時(shí),編譯器 101將該跳轉(zhuǎn)指令作為劃分點(diǎn)來(lái)劃分所述程序。所述閾值可以由用戶根據(jù)實(shí)際需要來(lái)確定。例如,用戶可以根據(jù)所執(zhí)行的程序的總長(zhǎng)度、程序中的跳轉(zhuǎn) 指令的密度、可用于存儲(chǔ)所述程序的存儲(chǔ)器的容量、希望獲得的程序執(zhí)行效 率等因素來(lái)確定所述閾值,從而控制最終獲得的指令段的數(shù)目和長(zhǎng)度。除了使用以上方法來(lái)劃分程序以外,優(yōu)選地,還可以利用程序中的注釋(annotation)來(lái)劃分所述程序。通常,在編寫(xiě)程序時(shí),程序員會(huì)在每個(gè)函數(shù)的 開(kāi)頭添加相應(yīng)的注釋以便說(shuō)明該函數(shù)的功能等。所述注釋包括但不限于添加 在函數(shù)開(kāi)頭的特定提示(hint)。通過(guò)識(shí)別這些注釋?zhuān)幾g器101可以識(shí)別出各 個(gè)函數(shù),并且利用各個(gè)函數(shù)末尾處的跳轉(zhuǎn)指令將組成這些函數(shù)的指令劃分為 指令段。以這一方式,由于整個(gè)函數(shù)被劃分為一個(gè)指令段,因此可以增大指 令段的長(zhǎng)度并且減少跳轉(zhuǎn)次數(shù),從而提高整個(gè)程序的壓縮率。不過(guò),在利用 注釋來(lái)劃分程序時(shí),如果函數(shù)本身的長(zhǎng)度較長(zhǎng),則可能出現(xiàn)所獲得的對(duì)應(yīng)指 令段的長(zhǎng)度較長(zhǎng)的情況,此時(shí),編譯器101可以根據(jù)該函數(shù)內(nèi)部的跳轉(zhuǎn)指令 來(lái)將該指令段進(jìn)一步劃分為多個(gè)指令段,從而提高執(zhí)行效率。如本領(lǐng)域^^知的那樣,當(dāng)編-澤器101編-澤所述程序時(shí),該程序中的各個(gè) 指令的地址是從O開(kāi)始依序偏移的。因此,在編譯完成之后,編譯器101可 以確定程序中的指令相對(duì)于0偏移地址的偏移地址。相應(yīng)地,在如上所述將 程序的指令部分劃分為多個(gè)指令段之后,編譯器101可以確定各個(gè)指令段的 起始偏移地址和結(jié)束偏移地址。此時(shí),在所述程序中用于劃分所述程序的跳 轉(zhuǎn)指令所指示的跳轉(zhuǎn)地址(即,在執(zhí)行完該指令前面的指令段之后要調(diào)用的指令段的偏移地址)也是相對(duì)于0偏移地址的偏移地址。接下來(lái),在步驟S203中,編譯器101利用針對(duì)所使用的硬件平臺(tái)進(jìn)行了 優(yōu)化的壓縮算法來(lái)壓縮所述多個(gè)指令段,并且確定壓縮后的各個(gè)指令段的長(zhǎng) 度。這里所述的硬件平臺(tái)是指多核處理器的指令系統(tǒng),即,多核處理器的指 令集架構(gòu)。通常,不同的多核處理器可以具有不同的指令集架構(gòu)和不同的編 碼特點(diǎn)。因此,使用針對(duì)多核處理器的編碼特點(diǎn)而進(jìn)行了優(yōu)化的壓縮算法來(lái) 壓縮所述指令段,可以明顯提高每個(gè)指令段的壓縮率。針對(duì)不同的多核處理 器優(yōu)化壓縮算法的方法以及由此得到的優(yōu)化的壓縮算法是本領(lǐng)域技術(shù)人員公 知的,為簡(jiǎn)單起見(jiàn),在這里省略對(duì)它們的描述。應(yīng)當(dāng)注意的是在上述壓縮 過(guò)程中,為了便于進(jìn)行由于壓縮導(dǎo)致的后續(xù)偏移地址調(diào)整,不對(duì)用于劃分所 述程序的跳轉(zhuǎn)指令進(jìn)行壓縮。在壓縮了所述指令段之后,在步驟S204中,編譯器101將原程序中用于 劃分所述程序的各個(gè)跳轉(zhuǎn)指令添加到相應(yīng)壓縮指令段的末尾。具體地說(shuō),如 上所述,在壓縮各個(gè)指令段時(shí),用于劃分所述程序的各個(gè)跳轉(zhuǎn)指令并沒(méi)有被 壓縮;在壓縮完成之后,編譯器101將跟隨在某個(gè)指令段之后并被用來(lái)劃分 所述程序的跳轉(zhuǎn)指令添加到與該指令段相對(duì)應(yīng)的壓縮指令段的末尾。此時(shí), 該跳轉(zhuǎn)指令中的跳轉(zhuǎn)地址仍然是在執(zhí)行了所述指令段之后要調(diào)用的指令段在被壓縮之前的偏移地址。應(yīng)當(dāng)認(rèn)識(shí)到添加在壓縮指令段末尾的跳轉(zhuǎn)指令所指示的要跳轉(zhuǎn)的指令段是程序員在編寫(xiě)所述程序時(shí)利用該跳轉(zhuǎn)指令指定的指 令段。在添加了所述跳轉(zhuǎn)指令之后,編譯器101根據(jù)所產(chǎn)生的調(diào)用圖示出的各 個(gè)指令段之間的調(diào)用關(guān)系,預(yù)測(cè)在處理單元執(zhí)行了各個(gè)指令段之后可能調(diào)用 (跳轉(zhuǎn))的指令段,并且確定所預(yù)測(cè)的指令段在壓縮之前的偏移地址。編譯器 101用來(lái)預(yù)測(cè)在執(zhí)行了 一個(gè)指令段之后要調(diào)用的指令段的方法是本領(lǐng)域公知 的,因此為簡(jiǎn)單起見(jiàn),在這里不對(duì)所述預(yù)測(cè)方法進(jìn)行描述。然后,編譯器101 在每個(gè)壓縮指令段的開(kāi)頭處添加具有預(yù)定格式和大小的首標(biāo),所述首標(biāo)包括 指示所述每個(gè)(當(dāng)前)壓縮指令段的長(zhǎng)度的數(shù)據(jù)位、指示當(dāng)前指令段(在被壓縮 之前)的偏移地址的數(shù)據(jù)位、以及在執(zhí)行了當(dāng)前指令段之后要調(diào)用的指令段(在 被壓縮之前)的偏移地址的數(shù)據(jù)位,其中,所述當(dāng)前指令段(在被壓縮之前)的 偏移地址是指與當(dāng)前壓縮指令段相對(duì)應(yīng)的原始指令段在被壓縮之前相對(duì)于0 偏移地址的偏移地址,所述當(dāng)前指令段之后要調(diào)用的指令段是如上所述由編 譯器101根據(jù)調(diào)用圖預(yù)測(cè)的要調(diào)用的指令段。應(yīng)當(dāng)認(rèn)識(shí)到本領(lǐng)域技術(shù)人員 可以根據(jù)實(shí)際需要來(lái)選擇首標(biāo)的格式和大小。在經(jīng)過(guò)上述處理之后,形成了多個(gè)壓縮程序段,每個(gè)壓縮程序段包括 壓縮指令段、位于該壓縮指令段開(kāi)頭的首標(biāo)、以及位于該壓縮指令段末尾的 跳轉(zhuǎn)指令。應(yīng)當(dāng)認(rèn)識(shí)到上述添加跳轉(zhuǎn)指令的步驟和添加首標(biāo)的步驟的順序 僅僅是說(shuō)明性的,也可以先添加首標(biāo),然后再添加跳轉(zhuǎn)指令。由于各個(gè)指令段在被壓縮之后在長(zhǎng)度上發(fā)生變化,因此,為了實(shí)現(xiàn)正確 的跳轉(zhuǎn)和調(diào)用,接下來(lái)必須根據(jù)壓縮前后指令段長(zhǎng)度的變化量來(lái)調(diào)整所述首 標(biāo)和跳轉(zhuǎn)指令中的相關(guān)偏移地址。為此,編譯器101將第一壓縮程序段的起 始偏移地址設(shè)置為0,然后根據(jù)各個(gè)壓縮程序段(包括開(kāi)頭處的首標(biāo)和末尾處 的跳轉(zhuǎn)指令)的長(zhǎng)度來(lái)依次計(jì)算各個(gè)壓縮程序段的起始偏移地址。由于壓縮程 序段中的首標(biāo)、跳轉(zhuǎn)指令和壓縮指令段的長(zhǎng)度是已知的,因此壓縮程序段的 長(zhǎng)度也是已知的。作為示例,如果按照從低地址到高地址的順序來(lái)存儲(chǔ)所述
壓縮程序段,則由于第一壓縮程序段的起始偏移地址為0,因此第二壓縮程 序段的起始偏移地址為0+第一壓縮程序段的長(zhǎng)度。同樣,第三壓縮程序段的 起始偏移地址為第二壓縮程序段的起始偏移地址+第三壓縮程序段的長(zhǎng)度。以 這一方式,編譯器101可以依次計(jì)算出各個(gè)壓縮程序段相對(duì)于0偏移地址的 起始偏移地址。繼而,編譯器101可以依次計(jì)算出各個(gè)壓縮程序段中的壓縮指令段相對(duì)于0偏移地址的起始偏移地址。隨后,編譯器101根據(jù)各個(gè)壓縮指令段在壓縮之前的偏移地址、以及所計(jì)算的各個(gè)壓縮指令段的偏移地址,計(jì)算各個(gè)指令段在被壓縮前后的偏移地址的變化量。然后,利用該變化量,編譯器101將添加在壓縮程序段末尾的跳轉(zhuǎn)指令中的跳轉(zhuǎn)地址(即,要跳轉(zhuǎn)的指令段的偏移地址)修改為所計(jì)算的、與 該指令段相對(duì)應(yīng)的壓縮程序段在壓縮之后的偏移地址,并且將首標(biāo)中的當(dāng)前 指令段的偏移地址和要跳轉(zhuǎn)的指令段的偏移地址分別修改為所計(jì)算的當(dāng)前壓 縮指令段的偏移地址和所計(jì)算的與要跳轉(zhuǎn)的指令段相對(duì)應(yīng)的壓縮程序段的偏 移地址。接下來(lái),在步驟S205中,編譯器101將所述多個(gè)壓縮程序段依序存儲(chǔ)在 中央指令存儲(chǔ)器102中。然后,在步驟S206中,編譯器101確定第一壓縮程 序段在中央指令存儲(chǔ)器102中的實(shí)際偏移地址,計(jì)算第一壓縮程序段在存儲(chǔ) 前后的偏移地址變化量,并且根據(jù)該變化量而來(lái)相應(yīng)地修改各個(gè)壓縮程序段 開(kāi)頭處的首標(biāo)以及末尾處的跳轉(zhuǎn)指令中的各個(gè)偏移地址,以使得所述各個(gè)偏 移地址表示在中央指令存儲(chǔ)器102中的真實(shí)存儲(chǔ)地址。至此,用于對(duì)程序進(jìn) 行壓縮和存儲(chǔ)的過(guò)程結(jié)束。經(jīng)過(guò)上述處理之后,所述程序被以壓縮程序段的形式存儲(chǔ)在中央指令存 儲(chǔ)器102中,其中,在每個(gè)壓縮程序段的末尾具有跳轉(zhuǎn)指令,該跳轉(zhuǎn)指令包 含由程序員在編寫(xiě)所述程序時(shí)利用該跳轉(zhuǎn)指令指定的指令段所對(duì)應(yīng)的壓縮程 序段在中央指令存儲(chǔ)器102中的存儲(chǔ)地址,此外,在每個(gè)壓縮程序段的開(kāi)頭 還具有首標(biāo),該首標(biāo)包含所述每個(gè)壓縮程序段中的壓縮指令段(即,當(dāng)前壓縮 指令段)的長(zhǎng)度、當(dāng)前壓縮指令段在中央指令存儲(chǔ)器102中的存儲(chǔ)地址、以及 由編譯器基于程序中的調(diào)用關(guān)系預(yù)測(cè)的要調(diào)用的指令段所對(duì)應(yīng)的壓縮程序段 在中央指令存儲(chǔ)器102中的存儲(chǔ)地址。圖3示意性地示出了根據(jù)本發(fā)明的、當(dāng)利用圖l所示的裝置來(lái)處理程序 時(shí)的各個(gè)階段的處理結(jié)果。如圖3所示,才艮據(jù)本發(fā)明的用于對(duì)程序進(jìn)行壓縮
和存儲(chǔ)的裝置和方法有效地減'J、 了存儲(chǔ)所述程序所需的存儲(chǔ)空間。此外,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解盡管在上文中使用單個(gè)部件(即,編譯 器)來(lái)對(duì)程序進(jìn)行分段、壓縮和存儲(chǔ),但這僅僅是出于說(shuō)明的目的,而不是限 制性的。實(shí)際上,除了使用單獨(dú)的編譯器以外,也可以使用多個(gè)模塊來(lái)實(shí)現(xiàn) 上述功能。例如,可以使用包括編譯部件、劃分部件和壓縮部件的裝置按照 與上面所述相似的方式來(lái)實(shí)現(xiàn)相同的功能,其中,編譯部件編譯程序,產(chǎn)生 調(diào)用圖,并且記錄劃分該程序所需的信息。劃分部件根據(jù)編譯部件提供的信息來(lái)將該程序劃分為多個(gè)指令段,然后壓縮部件壓縮各個(gè)指令段;接下來(lái), 類(lèi)似地,編譯部件在每個(gè)指令段的開(kāi)頭和末尾添加上述首標(biāo)和跳轉(zhuǎn)指令。當(dāng) 然,本領(lǐng)域技術(shù)人員也可以根據(jù)實(shí)際需要采用具有上述各個(gè)功能的其它部件 和/或這些部件的組合,只要這些部件和/或組合能夠?qū)崿F(xiàn)上述功能即可。接下來(lái),將參照附圖來(lái)描述根據(jù)本發(fā)明的重疊指令存取單元和重疊指令 存耳又方法。圖4示出了根據(jù)本發(fā)明實(shí)施例的、用于讀取和執(zhí)行如上所述存儲(chǔ)的壓縮 程序段的重疊指令存取單元的框圖。如圖4所示,重疊指令存取單元400包括處理單元401、用于處理單元 401的指令高速緩沖存儲(chǔ)器402、指令解壓縮單元403以及用于指令解壓縮單 元403的壓縮指令緩沖器404。重疊指令存取單元400中的指令解壓縮單元 403通過(guò)中央指令管理單元20而連接到中央指令存儲(chǔ)器10。中央指令存儲(chǔ)器10可以是諸如只讀存儲(chǔ)器(ROM)、快閃存儲(chǔ)器的非易失 性存儲(chǔ)器,并且與在上文中針對(duì)圖1所述的中央指令存儲(chǔ)器102相似,在中 央指令存儲(chǔ)器10中存儲(chǔ)了要由處理單元401執(zhí)行的程序。所述程序是以壓縮 程序段的形式存儲(chǔ)的,并且,通過(guò)由圖1所示的裝置按照?qǐng)D2所示的方法對(duì) 所述程序進(jìn)行分段和壓縮而獲得所述壓縮程序段。如上文所述,每個(gè)壓縮程 序段包括位于開(kāi)頭的首標(biāo)、壓縮指令段、以及位于末尾的跳轉(zhuǎn)指令。所述首 標(biāo)包含所述每個(gè)壓縮程序段中的壓縮指令段(即,當(dāng)前壓縮指令段)的長(zhǎng)度、該 當(dāng)前壓縮指令段在中央指令存儲(chǔ)器10中的存儲(chǔ)地址、由編譯器基于程序中的 調(diào)用關(guān)系預(yù)測(cè)的要調(diào)用的指令段所對(duì)應(yīng)的壓縮程序段在中央指令存儲(chǔ)器10 中的存儲(chǔ)地址。此外,位于末尾的跳轉(zhuǎn)指令指示由程序員在編寫(xiě)所述程序時(shí) 利用該跳轉(zhuǎn)指令指定的要跳轉(zhuǎn)的指令段所對(duì)應(yīng)的壓縮程序段在中央指令存儲(chǔ) 器10中的存儲(chǔ)地址。
處理單元401可以是多核處理器的一個(gè)處理單元,也可以是獨(dú)立的處理 器,其執(zhí)行用于例如媒體應(yīng)用的程序。指令高速緩沖存儲(chǔ)器402用于存儲(chǔ)處理單元要執(zhí)行的指令,其可以由諸 如靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)的易失性存儲(chǔ)器構(gòu)成。指令解壓縮單元403用于響應(yīng)于處理單元執(zhí)行程序時(shí)發(fā)出的指令讀取請(qǐng) 求,從中央指令存儲(chǔ)器IO讀出所請(qǐng)求的壓縮程序段的首標(biāo)并且由此讀取該壓 縮程序段中的壓縮指令段,將該壓縮指令段解壓縮,并且將解壓縮后的指令 段存儲(chǔ)到指令高速緩沖存儲(chǔ)器402中以供處理單元401使用。為了提高執(zhí)行 效率,指令解壓縮單元403還在處理單元401執(zhí)行當(dāng)前指令段的同時(shí),根據(jù) 所述首標(biāo)而從中央指令存儲(chǔ)器10中預(yù)先讀取在執(zhí)行了當(dāng)前指令段之后要調(diào) 用的下一壓縮指令段,將該壓縮指令段解壓縮,然后將解壓縮后的指令段存 儲(chǔ)到指令高速緩沖存儲(chǔ)器402中以供處理單元401后續(xù)使用。壓縮指令緩沖器404用于暫時(shí)存儲(chǔ)指令解壓縮單元403從中央指令存儲(chǔ) 器IO讀取的首標(biāo)和壓縮指令段、以及指令解壓縮單元403在將所述壓縮指令 段解壓縮期間的臨時(shí)數(shù)據(jù)。中央指令管理單元20用于響應(yīng)于指令解壓縮單元403的請(qǐng)求而從中央指 令存儲(chǔ)器IO讀取所請(qǐng)求的首標(biāo)或壓縮指令段,并且將所讀取的首標(biāo)或壓縮指 令段傳送給壓縮指令緩沖器404。在基于多核架構(gòu)的單程序多應(yīng)用(SPMD)的情況下,中央指令存儲(chǔ)器10 以及中央指令管理單元20可以由同時(shí)執(zhí)行一個(gè)程序的多個(gè)重疊指令存取單 元中的多個(gè)處理單元共享。也就是說(shuō),由多個(gè)處理單元同時(shí)執(zhí)行的程序被以 上述壓縮程序段的形式存儲(chǔ)在中央指令存儲(chǔ)器10中,這些處理單元可以在執(zhí) 行時(shí)獨(dú)立地讀取各個(gè)壓縮程序段。由于各個(gè)處理單元所屬的各個(gè)重疊指令存 取單元的結(jié)構(gòu)和操作相似,因此,在下文中將僅對(duì)一個(gè)重疊指令存取單元的 操作進(jìn)行描述。當(dāng)系統(tǒng)啟動(dòng)時(shí),處理單元401向指令高速緩沖存儲(chǔ)器402發(fā)出指令讀取 請(qǐng)求,該指令讀取請(qǐng)求包含所述程序的第一壓縮程序段的首標(biāo)地址。然后, 處理單元401進(jìn)入暫停(stall)狀態(tài)以等待所請(qǐng)求的指令。指令解壓縮單元403截獲該請(qǐng)求,暫停當(dāng)前正在執(zhí)行的操作(如果有的話) 并且保存與該操作有關(guān)的上下文。然后,指令解壓縮單元403根據(jù)該請(qǐng)求中 的首標(biāo)地址而向中央指令管理單元20發(fā)出讀取該首標(biāo)的請(qǐng)求。中央指令管理 單元20響應(yīng)于該請(qǐng)求而從中央指令存儲(chǔ)器10中讀取所述首標(biāo),并且將該首標(biāo)發(fā)送到壓縮指令緩沖器404中。指令解壓縮單元403從壓縮指令緩沖器404 中讀取該首標(biāo),并且根據(jù)該首標(biāo)中包含的當(dāng)前壓縮指令段的存儲(chǔ)地址而判斷 所請(qǐng)求的壓縮指令段是否已經(jīng)存在于指令高速緩沖存儲(chǔ)器402中以及是否已 經(jīng)被完全解壓縮。如果指令解壓縮單元403確定所請(qǐng)求的壓縮指令段已經(jīng)存在于指令高速 緩沖存儲(chǔ)器402中并且已被解壓縮,則指令解壓縮單元403將指令就緒(ready) 信號(hào)發(fā)送給處理單元401。處理單元401接收這一信號(hào),并且從指令高速緩 沖存儲(chǔ)器402中讀取所述指令段以便執(zhí)行。如果指令解壓縮單元403確定所請(qǐng)求的壓縮指令段已經(jīng)存在于指令高速 緩沖存儲(chǔ)器402中但是正在被該單元解壓縮,則指令解壓縮單元403重新開(kāi) 始對(duì)所述指令段的解壓縮,并且在完成解壓縮之后將指令就緒信號(hào)發(fā)送給處 理單元401。處理單元401接收這一信號(hào),并且從指令高速緩沖存儲(chǔ)器402 中讀取解壓縮后的指令段以便執(zhí)行。由于此時(shí)系統(tǒng)剛剛啟動(dòng),并且第一壓縮指令段還沒(méi)有被讀取到指令高速 緩沖存儲(chǔ)器402中,因此,作為第三種情況,指令解壓縮單元403發(fā)現(xiàn)所請(qǐng) 求的壓縮指令段不在指令高速緩沖存儲(chǔ)器402中。于是,指令解壓縮單元403 向中央指令管理單元20發(fā)出讀取該壓縮指令段的請(qǐng)求,并且在所述請(qǐng)求中將 所述首標(biāo)中包含的第一壓縮指令段的存儲(chǔ)地址發(fā)送給中央指令管理單元20。 中央指令管理單元20響應(yīng)于該請(qǐng)求而從中央指令存儲(chǔ)器10讀取所述存儲(chǔ)地 址上的壓縮指令段及其末尾的跳轉(zhuǎn)指令,并且將所讀取的壓縮指令段及其末 尾的跳轉(zhuǎn)指令發(fā)送到壓縮指令緩沖器404中。接下來(lái),指令解壓縮單元403從壓縮指令緩沖器404中讀取該壓縮指令 段,將該壓縮指令段解壓縮,并且將解壓縮后的指令段以及位于其末尾的跳 轉(zhuǎn)指令存儲(chǔ)在指令高速緩沖存儲(chǔ)器402中。然后,指令解壓縮單元403向處 理單元401發(fā)送指令就緒信號(hào)。處理單元401接收該信號(hào),跳出暫停狀態(tài), 并且從指令高速緩沖存儲(chǔ)器402中讀取和執(zhí)行其中存儲(chǔ)的指令。在處理單元401執(zhí)行指令段的同時(shí),解壓縮單元403讀取與該指令段相 對(duì)應(yīng)的首標(biāo)中包含的要跳轉(zhuǎn)的下一壓縮程序段的存儲(chǔ)地址,然后按照與上面 所述相同的方式通過(guò)中央指令管理單元404讀取所述下一壓縮程序段的首 標(biāo)。接下來(lái),解壓縮單元403根據(jù)該首標(biāo)中包含的所述下一壓縮程序段中的
壓縮指令段的存儲(chǔ)地址,通過(guò)中央指令管理單元20而將該壓縮指令段及其末尾的跳轉(zhuǎn)指令從中央指令存儲(chǔ)器10讀取到壓縮指令緩沖器404中,將該壓縮 指令段解壓縮,并且將解壓縮后的指令段及跳轉(zhuǎn)指令存儲(chǔ)到指令高速緩沖存 儲(chǔ)器402中以供處理單元隨后使用。當(dāng)結(jié)束對(duì)于第一指令段的執(zhí)行時(shí),處理單元401根據(jù)所執(zhí)行的指令段末 尾的跳轉(zhuǎn)指令而再次向指令高速緩沖存儲(chǔ)器402發(fā)出指令讀取請(qǐng)求,以便請(qǐng) 求讀取后續(xù)的指令。然后,處理單元401再次進(jìn)入暫停狀態(tài)以等待所請(qǐng)求的 指令。指令解壓縮單元403攔截該請(qǐng)求,暫停當(dāng)前正在執(zhí)行的操作(如果有的話) 并且保存與該操作相關(guān)的上下文。然后,按照與上面所述相似的方式,指令 解壓縮單元403檢查所請(qǐng)求的壓縮指令段是否已經(jīng)存在于指令高速緩沖存儲(chǔ) 器402中。當(dāng)編譯器根據(jù)調(diào)用圖預(yù)測(cè)的要調(diào)用的指令段與處理單元401接下 來(lái)要執(zhí)行的指令段相同時(shí),所請(qǐng)求的指令段就是解壓縮單元403根據(jù)首標(biāo)預(yù) 先解壓縮的指令段,這意味著解壓縮單元403已經(jīng)讀取了所請(qǐng)求的壓縮指令 段。此時(shí),解壓縮單元403確定所請(qǐng)求的壓縮指令段是否已經(jīng)被完全解壓縮。 如果所請(qǐng)求的壓縮指令段已經(jīng)被完全解壓縮從而被存儲(chǔ)在指令高速緩沖存儲(chǔ) 器402中,則指令解壓縮單元403向處理單元401發(fā)出指令就緒的信號(hào)以重 新啟動(dòng)處理單元401,處理單元401接收該信號(hào),跳出暫停狀態(tài),并且從指 令高速緩沖存儲(chǔ)器402中讀出所請(qǐng)求的指令段以便執(zhí)行。反之,如果所請(qǐng)求 的壓縮指令段尚未被完全解壓縮而是正處于解壓縮的過(guò)程中,則指令解壓縮 單元403重新開(kāi)始對(duì)所述指令段的解壓縮操作以便繼續(xù)將該程序段解壓縮, 并且在完成解壓縮時(shí)向處理單元401發(fā)送指令就緒信號(hào)以重新啟動(dòng)處理單元 401。另一方面,如果編譯器根據(jù)調(diào)用圖預(yù)測(cè)的要調(diào)用的指令段與處理單元 401接下來(lái)要執(zhí)行的指令段不同,那么這意味著被指令解壓縮單元403預(yù)先 讀取和解壓縮的指令段不是處理單元401所請(qǐng)求的指令段。因此,指令解壓 縮單元403發(fā)現(xiàn)所請(qǐng)求的指令段不在指令高速緩沖存儲(chǔ)器402中。于是,指 令解壓縮單元403按照與上面所述相同的方式,根據(jù)處理單元401發(fā)出的請(qǐng) 求中包含的要調(diào)用的壓縮程序段的存儲(chǔ)地址而通過(guò)中央指令管理單元20從 中央指令存儲(chǔ)器IO讀取所請(qǐng)求的壓縮程序段的首標(biāo)和對(duì)應(yīng)的壓縮指令段,將 該壓縮指令段解壓縮并存儲(chǔ)在指令高速緩沖存儲(chǔ)器402中以供處理單元使 用。然后,同樣,指令解壓縮單元403向處理單元401發(fā)出指令就緒信號(hào)以 啟動(dòng)處理單元401。處理單元401接收所述信號(hào),跳出暫停狀態(tài),并且從指 令高速緩沖存儲(chǔ)器402讀取和執(zhí)行該程序段。對(duì)于要執(zhí)行的程序的所有壓縮指令段,根據(jù)本發(fā)明的重疊指令存取單元 重復(fù)上述過(guò)程,直到所有指令都被處理為止。應(yīng)當(dāng)注意在處理單元執(zhí)行了存儲(chǔ)在指令高速緩沖存儲(chǔ)器中的指令之后, 其可以從指令高速緩沖存儲(chǔ)器中刪除該指令,以便為后續(xù)的指令預(yù)留出存儲(chǔ) 空間,從而提高指令高速緩沖存儲(chǔ)器的利用效率。下面,將結(jié)合圖4和圖5來(lái)描述根據(jù)本發(fā)明的重疊指令存取方法。圖5示出了根據(jù)本發(fā)明的、由圖4所示的重疊指令存取單元執(zhí)行的重疊 指令存取方法的流程圖。如圖5所示,在步驟S501中,系統(tǒng)啟動(dòng),處理單元401向指令高速緩沖 存儲(chǔ)器402發(fā)出指令讀取請(qǐng)求,該指令讀取請(qǐng)求包含所述程序的第一壓縮程 序段的首標(biāo)地址。然后,處理單元401進(jìn)入暫停(stall)狀態(tài)以等待所請(qǐng)求的指 令。在步驟S502中,指令解壓縮單元403截獲該請(qǐng)求,暫停當(dāng)前正在執(zhí)行的 操作(如果有的話)并且保存與該操作有關(guān)的上下文,并且根據(jù)該請(qǐng)求中的首標(biāo) 地址而向中央指令管理單元20發(fā)出讀取該首標(biāo)的請(qǐng)求。中央指令管理單元 20響應(yīng)于該請(qǐng)求而從中央指令存儲(chǔ)器10中讀取所述首標(biāo),并且將該首標(biāo)發(fā) 送給壓縮指令緩沖器404中。然后,在步驟S503中,指令解壓縮單元403從 壓縮指令緩沖器404中讀取該首標(biāo),并且在步驟S504中根據(jù)該首標(biāo)中包含的 當(dāng)前壓縮指令段的存儲(chǔ)地址而判斷所請(qǐng)求的壓縮指令段是否已經(jīng)存在于指令 高速緩沖存儲(chǔ)器402中。如果在步驟S504中確定所請(qǐng)求的壓縮指令段已經(jīng)在指令高速緩沖存儲(chǔ) 器402中,則該過(guò)程進(jìn)行到步驟S505,在該步驟中,指令解壓縮單元403確 定該壓縮指令段是否已經(jīng)被完全解壓縮。如果在步驟S505中確定該壓縮指令 段已經(jīng)被解壓縮,則該過(guò)程進(jìn)行到步驟S509,并且指令解壓縮單元403將指 令就緒信號(hào)發(fā)送給處理單元401以重新啟動(dòng)處理單元。反之,如果在步驟S505 中確定所述壓縮指令段沒(méi)有被完全解壓縮而是正在被解壓縮,則指令解壓縮 單元403在步驟S506中重新開(kāi)始先前暫停的操作,即,繼續(xù)將所述壓縮指令 段解壓縮,并且在完成解壓縮之后,在步驟S509中將指令就緒信號(hào)發(fā)送給處 理單元401。另一方面,如果在步驟S504中指令解壓縮單元403發(fā)現(xiàn)所請(qǐng)求的壓縮指 令段不在指令高速緩沖存儲(chǔ)器402中(這適用于上述系統(tǒng)剛剛啟動(dòng)的情況,因 為第一壓縮指令段此時(shí)還沒(méi)有被讀取到指令高速緩沖存儲(chǔ)器402中),則在步 驟S507中,指令解壓縮單元403向中央指令管理單元20發(fā)出讀取該壓縮指 令段的請(qǐng)求,并且在所述請(qǐng)求中將所述首標(biāo)中包含的壓縮指令段的存儲(chǔ)地址 發(fā)送給中央指令管理單元20。中央指令管理單元20響應(yīng)于該請(qǐng)求而從中央 指令存儲(chǔ)器IO讀取所述存儲(chǔ)地址上的壓縮指令段及其末尾的跳轉(zhuǎn)指令,并且 將所讀取的壓縮指令段及跳轉(zhuǎn)指令發(fā)送到壓縮指令緩沖器404中。接下來(lái),在步驟S508中,指令解壓縮單元403從壓縮指令緩沖器404 中讀取該壓縮指令段,將該壓縮指令段解壓縮,并且將解壓縮后的指令段以 及位于其末尾的跳轉(zhuǎn)指令存儲(chǔ)到指令高速緩沖存儲(chǔ)器402中。然后,在步驟 S509中,指令解壓縮單元403向處理單元401發(fā)送指令就緒信號(hào)。在步驟S510 中,處理單元401接收該信號(hào),跳出暫停狀態(tài),并且從指令高速緩沖存儲(chǔ)器 402中讀取和執(zhí)行其中存儲(chǔ)的指令。在處理單元401執(zhí)行指令段的同時(shí),在步驟S511中,解壓縮單元403 讀取與該指令段相對(duì)應(yīng)的首標(biāo)中包含的接下來(lái)要調(diào)用的壓縮程序段的存儲(chǔ)地 址,然后按照與上面所述相同的方式通過(guò)中央指令管理單元404讀取所述接 下來(lái)要調(diào)用的壓縮程序段的首標(biāo)。接下來(lái),在步驟S512中,解壓縮單元403 根據(jù)該首標(biāo)中包含的對(duì)應(yīng)壓縮指令段的存儲(chǔ)地址,通過(guò)中夾指令管理單元20 而將該壓縮指令段及其末尾的跳轉(zhuǎn)指令從中央指令存儲(chǔ)器10讀取到壓縮指 令緩沖器404中。然后,在步驟S513中,解壓縮單元將該壓縮指令段解壓縮, 并且將解壓縮后的指令段及跳轉(zhuǎn)指令存儲(chǔ)到指令高速緩沖存儲(chǔ)器402中以供 處理單元隨后使用。當(dāng)處理單元401結(jié)束對(duì)于指令段的執(zhí)行時(shí),處理單元401將根據(jù)所執(zhí)行 的指令段末尾的跳轉(zhuǎn)指令而再次向指令高速緩沖存儲(chǔ)器402發(fā)出指令讀取請(qǐng) 求,以便請(qǐng)求讀取后續(xù)的指令。當(dāng)接收到所述指令讀取請(qǐng)求時(shí),處理單元401 將再次執(zhí)行上述操作。具體地說(shuō),當(dāng)接收到所述指令讀取請(qǐng)求時(shí),指令解壓縮單元403暫停當(dāng) 前正在執(zhí)行的操作(如果有的話)并且保存與該操作相關(guān)的上下文。然后,指令 解壓縮單元403檢查所請(qǐng)求的壓縮指令段是否已經(jīng)存在于指令高速緩沖存儲(chǔ)
器402中。當(dāng)先前編譯器根據(jù)調(diào)用圖預(yù)測(cè)的要調(diào)用的指令段與處理單元401 接下來(lái)要執(zhí)行的指令段相同時(shí),所請(qǐng)求的指令段就是解壓縮單元403根據(jù)首 標(biāo)預(yù)先解壓縮的指令段,這意味著解壓縮單元403已經(jīng)讀取了所請(qǐng)求的壓縮 指令段。此時(shí),解壓縮單元403確定所請(qǐng)求的壓縮指令段是否已經(jīng)被完全解 壓縮。如果所請(qǐng)求的指令段已經(jīng)被完全解壓縮,則指令解壓縮單元403向處 理單元401發(fā)出指令就緒的信號(hào),處理單元401接收該信號(hào),跳出暫停狀態(tài), 并且從指令高速緩沖存儲(chǔ)器402中讀出和執(zhí)行所請(qǐng)求的指令段。反之,如果 所請(qǐng)求的指令段正在被解壓縮,則指令解壓縮單元403繼續(xù)將該指令段解壓 縮,并且在完成解壓縮時(shí)向處理單元401發(fā)送指令就緒信號(hào)以重新啟動(dòng)處理 單元401。另一方面,如果先前編譯器根據(jù)調(diào)用圖預(yù)測(cè)的要調(diào)用的指令段與處理單 元401接下來(lái)要執(zhí)行的指令段不同,那么這意味著被指令解壓縮單元403預(yù) 先讀取和解壓縮的指令段不是處理單元401所請(qǐng)求的指令段,即,所請(qǐng)求的 指令段不在指令高速緩沖存儲(chǔ)器402中。因此,如上所述,指令解壓縮單元 403根據(jù)處理單元401發(fā)出的請(qǐng)求中包含的要調(diào)用的壓縮程序段的存儲(chǔ)地址 而通過(guò)中央指令管理單元20從中央指令存儲(chǔ)器10讀取所請(qǐng)求的壓縮程序段 的首標(biāo)和對(duì)應(yīng)的壓縮指令段,將該壓縮指令段解壓縮并存儲(chǔ)在指令高速緩沖 存儲(chǔ)器402中。然后,指令解壓縮單元403向處理單元401發(fā)出指令就緒信 號(hào)以啟動(dòng)處理單元401。處理單元401接收所述信號(hào),跳出暫停狀態(tài),并且 從指令高速緩沖存儲(chǔ)器402讀取和執(zhí)行該程序段。對(duì)于要執(zhí)行的程序的所有壓縮指令段,重復(fù)上述過(guò)程,直到處理了所有 指令為止。如上所述,在根據(jù)本發(fā)明的重疊指令存取方法中,處理單元執(zhí)行程序的 過(guò)程與解壓縮單元將接下來(lái)要調(diào)用的指令段解壓縮的過(guò)程是重疊的,這樣, 提高了執(zhí)行效率。圖6是根據(jù)本發(fā)明的重疊指令存取單元時(shí)的示意數(shù)據(jù)流圖, 其清楚地示出了本發(fā)明的這一重疊特征。對(duì)于基于多核架構(gòu)的單程序多應(yīng)用(SPMD),多核處理器的多個(gè)處理單元 可以共享所述中央指令存儲(chǔ)器。在這種情況下,不必為每個(gè)處理單元提供一 個(gè)單獨(dú)的指令存儲(chǔ)器,而是只需為每個(gè)處理單元提供一個(gè)小得多的指令緩沖 器,因此,顯著減小了整個(gè)多個(gè)處理器所需的存儲(chǔ)器的容量。例如,對(duì)于具 有4個(gè)處理單元的多核處理器,通常,其需要4個(gè)32KB(總共128KB)的指令 存儲(chǔ)器;相比之下,在應(yīng)用了本發(fā)明之后,只需要1個(gè)32KB的指令存儲(chǔ)器 和4個(gè)1KB的指令緩沖器(總共36KB),從而減少了 96KB的存儲(chǔ)器需求,降 低了系統(tǒng)成本。而且,由于程序是被分段壓縮存儲(chǔ)的,因此根據(jù)本發(fā)明的方 法和裝置可以支持更長(zhǎng)的程序。盡管已經(jīng)示出和描述了本發(fā)明的 一些示例性實(shí)施例,本領(lǐng)域技術(shù)人員應(yīng) 當(dāng)理解,在不背離權(quán)利要求及其等價(jià)物中限定的本發(fā)明的范圍和精神的情況 下,可以對(duì)這些示例性實(shí)施例做出各種形式和細(xì)節(jié)上的變化。
權(quán)利要求
1. 一種用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的方法,包括以下步驟編譯該程序;利用程序中的跳轉(zhuǎn)指令將編譯后的程序的指令部分劃分為多個(gè)指令段;壓縮所述多個(gè)指令段以獲得多個(gè)壓縮指令段;以及將所述多個(gè)壓縮指令段存儲(chǔ)在存儲(chǔ)器中。
2. 如權(quán)利要求l所述的方法,其中,在所述劃分步驟中,通過(guò)識(shí)別程序 中的函數(shù)開(kāi)頭處的注釋而識(shí)別出所述函數(shù),并且利用所述函數(shù)末尾的跳轉(zhuǎn)指 令來(lái)劃分所述指令部分。
3. 如權(quán)利要求l所述的方法,其中,在所述劃分步驟中,利用編譯后的 程序中的每個(gè)跳轉(zhuǎn)指令來(lái)劃分所述指令部分。
4. 如權(quán)利要求l所述的方法,其中,在所述劃分步驟中,判斷編譯后的 程序中的每個(gè)跳轉(zhuǎn)指令的跳轉(zhuǎn)距離,并且當(dāng)該跳轉(zhuǎn)指令的跳轉(zhuǎn)距離超過(guò)預(yù)定 閾值時(shí),利用該跳轉(zhuǎn)指令來(lái)劃分所述指令部分。
5. 如權(quán)利要求l-4之一所述的方法,其中,在所述壓縮步驟中,利用針 對(duì)所使用的硬件平臺(tái)進(jìn)行了優(yōu)化的壓縮算法來(lái)壓縮所述多個(gè)指令段。
6. 如權(quán)利要求1-5之一所述的方法,還包括分別在所述多個(gè)壓縮指令段中的每一個(gè)的開(kāi)頭和末尾處添加首標(biāo)和所述 跳轉(zhuǎn)指令以形成多個(gè)對(duì)應(yīng)的壓縮程序段,所述首標(biāo)包含基于程序中的調(diào)用關(guān) 系預(yù)測(cè)的接下來(lái)要調(diào)用的壓縮程序段在存儲(chǔ)器中的存儲(chǔ)地址、所述每個(gè)壓縮 指令段的長(zhǎng)度、以及所述每個(gè)壓縮指令段在存儲(chǔ)器中的存儲(chǔ)地址,所述跳轉(zhuǎn) 指令包含與在編寫(xiě)所述程序時(shí)利用該跳轉(zhuǎn)指令指定的接下來(lái)要調(diào)用的指令段 相對(duì)應(yīng)的壓縮程序段在存儲(chǔ)器中的存儲(chǔ)地址。
7. 如權(quán)利要求6所述的方法,其中,在所述編譯步驟中生成所述函數(shù)的 調(diào)用圖,并且其中,利用由所述調(diào)用圖表示的調(diào)用關(guān)系來(lái)預(yù)測(cè)在所述首標(biāo)中指示的接下來(lái)要 調(diào)用的壓縮程序段。
8. —種用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的裝置,包括編譯器,用于編譯該程序,利用程序中的跳轉(zhuǎn)指令將編譯后的程序的指 令部分劃分為多個(gè)指令段,并且壓縮所述多個(gè)指令段以獲得多個(gè)壓縮指令段;以及存儲(chǔ)器,用于存儲(chǔ)所述多個(gè)壓縮指令段。
9. 如權(quán)利要求8所述的裝置,其中,編譯器通過(guò)識(shí)別程序中的函數(shù)開(kāi)頭 處的注釋而識(shí)別出所述函數(shù),并且利用所述函數(shù)末尾的跳轉(zhuǎn)指令來(lái)劃分所述 指令部分。
10. 如權(quán)利要求8所述的裝置,其中,編譯器利用編譯后的程序中的每 個(gè)跳轉(zhuǎn)指令來(lái)劃分所述指令部分。
11. 如權(quán)利要求8所述的裝置,其中,編譯器判斷編譯后的程序中的每 個(gè)跳轉(zhuǎn)指令的跳轉(zhuǎn)距離,并且當(dāng)該跳轉(zhuǎn)指令的跳轉(zhuǎn)距離超過(guò)預(yù)定閾值時(shí),編譯器利用該跳轉(zhuǎn)指令來(lái)劃分所述指令部分。
12. 如權(quán)利要求8-11之一所述的裝置,其中,編譯器利用針對(duì)所使用的 硬件平臺(tái)進(jìn)行了優(yōu)化的壓縮算法來(lái)壓縮所述多個(gè)指令段。
13. 如權(quán)利要求8-12之一所述的裝置,其中,編i斧器分別在所述多個(gè)壓 縮指令段中的每一個(gè)的開(kāi)頭和末尾處添加首標(biāo)和所述跳轉(zhuǎn)指令以形成多個(gè)對(duì) 應(yīng)的壓縮程序段,所述首標(biāo)包含由該編譯器基于程序中的調(diào)用關(guān)系預(yù)測(cè)的接 下來(lái)要調(diào)用的壓縮程序段在存儲(chǔ)器中的存儲(chǔ)地址、所述每個(gè)壓縮指令段的長(zhǎng) 度、以及所述每個(gè)壓縮指令段在存儲(chǔ)器中的存儲(chǔ)地址,所述跳轉(zhuǎn)指令包含與 在編寫(xiě)所述程序時(shí)利用該跳轉(zhuǎn)指令指定的接下來(lái)要調(diào)用的指令段相對(duì)應(yīng)的壓 縮程序段在存儲(chǔ)器中的存儲(chǔ)地址。
14. 如權(quán)利要求13所述的裝置,其中,編譯器在編譯程序時(shí)生成所述函 數(shù)的調(diào)用圖,并且利用由所述調(diào)用圖表示的調(diào)用關(guān)系來(lái)預(yù)測(cè)在首標(biāo)中指示的 接下來(lái)要調(diào)用的壓縮程序段。
15. —種由包括處理單元、緩沖器和解壓縮單元的重疊指令存取單元執(zhí) 行的重疊指令存取方法,用于讀取和執(zhí)行以多個(gè)壓縮程序段的形式存儲(chǔ)在存 儲(chǔ)器中的程序,其中,每個(gè)壓縮程序段包括開(kāi)頭處的首標(biāo)、壓縮指令段和末 尾處的跳轉(zhuǎn)指令,所述首標(biāo)包含基于程序中的調(diào)用關(guān)系預(yù)測(cè)的接下來(lái)要調(diào)用 的壓縮程序段的存儲(chǔ)地址和所述壓縮指令段的存儲(chǔ)地址,所述跳轉(zhuǎn)指令包含 在編寫(xiě)所述程序時(shí)指定的接下來(lái)要調(diào)用的壓縮程序段的存儲(chǔ)地址,所述重疊 指令存取方法包括由處理單元發(fā)出指令讀取請(qǐng)求;由解壓縮單元響應(yīng)于所述指令讀取請(qǐng)求而從存儲(chǔ)器中讀取所請(qǐng)求的壓縮 指令段,將其解壓縮,并且將解壓縮后的指令段存儲(chǔ)在緩沖器中;以及 由處理單元從緩沖器中讀取和執(zhí)行所述指令段,其中,在處理單元執(zhí)行所述指令段的同時(shí),由解壓縮單元根據(jù)與該指令段對(duì)應(yīng) 的首標(biāo)中的要調(diào)用的壓縮程序段的存儲(chǔ)地址,從存儲(chǔ)器中讀取對(duì)應(yīng)的壓縮指 令段,將該壓縮指令段解壓縮,并將解壓縮后的指令段存儲(chǔ)在緩沖器中。
16. 如權(quán)利要求15所述的重疊指令存取方法,其中,所述指令讀取請(qǐng)求包含與要讀取的壓縮指令段相對(duì)應(yīng)的首標(biāo)的存儲(chǔ)地址,并且其中,該首標(biāo)包含的對(duì)應(yīng)的壓縮指令段的存儲(chǔ)地址而從存儲(chǔ)器中讀取該壓縮指令段。
17. 如權(quán)利要求15-16所述的重疊指令存取方法,還包括以下步驟當(dāng) 接收到指令讀取請(qǐng)求時(shí),解壓縮單元檢查所請(qǐng)求的壓縮指令段是否已經(jīng)在緩 沖器中以及是否已經(jīng)被完全解壓縮。
18. 如權(quán)利要求17所述的重疊指令存取方法,其中,當(dāng)所請(qǐng)求的壓縮指令段已經(jīng)在緩沖器中并且已經(jīng)完全被解壓縮時(shí),解壓 縮單元向處理單元發(fā)送信號(hào)以啟動(dòng)該處理單元;當(dāng)所請(qǐng)求的壓縮指令段已經(jīng)在緩沖器中但是尚未被完全解壓縮時(shí),解壓 縮單元繼續(xù)將該指令段解壓縮,并在解壓縮完成后向處理單元發(fā)送信號(hào)以啟 動(dòng)該處理單元;以及當(dāng)所請(qǐng)求的壓縮指令段不在緩沖器中時(shí),解壓縮單元根據(jù)所述指令讀取 請(qǐng)求而從存儲(chǔ)器讀取所請(qǐng)求的壓縮指令段,將其解壓縮并存儲(chǔ)在緩沖器中。
19. 如權(quán)利要求15-18所述的重疊指令存取方法,其中, 所述存儲(chǔ)器由多個(gè)重疊指令存取單元共享。
20. —種重疊指令存取單元,用于讀取和執(zhí)行以多個(gè)壓縮程序段的形式 存儲(chǔ)在存儲(chǔ)器中的程序,其中,每個(gè)壓縮程序段包括開(kāi)頭處的首標(biāo)、壓縮指 令段和末尾處的跳轉(zhuǎn)指令,所述首標(biāo)包含基于程序中的調(diào)用關(guān)系預(yù)測(cè)的接下 來(lái)要調(diào)用的壓縮程序段的存儲(chǔ)地址和所述壓縮指令段的存儲(chǔ)地址,所述跳轉(zhuǎn) 指令包含在編寫(xiě)所述程序時(shí)指定的接下來(lái)要調(diào)用的壓縮程序段的存儲(chǔ)地址, 所述重疊指令存取單元包括.緩沖器;處理單元,用于發(fā)送指令讀取請(qǐng)求,從緩沖器讀取指令,并且執(zhí)行該指令;解壓縮單元,用于響應(yīng)于處理單元發(fā)送的指令讀取請(qǐng)求,從存儲(chǔ)器中讀 取所請(qǐng)求的壓縮指令段,將該壓縮指令段解壓縮,并且將解壓縮后的指令段 存儲(chǔ)在緩沖器中以供處理單元執(zhí)行,其中,在處理單元執(zhí)行所述指令段的同時(shí),解壓縮單元根據(jù)與該指令段對(duì)應(yīng)的 首標(biāo)中的要調(diào)用的壓縮程序段的存儲(chǔ)地址,從存儲(chǔ)器中讀取對(duì)應(yīng)的壓縮指令段,將該壓縮指令^a解壓縮,并將解壓縮后的指令段存儲(chǔ)在緩沖器中。
21. 如權(quán)利要求20所述的重疊指令存取單元,其中,所述指令讀取請(qǐng)求包含與要讀取的壓縮指令段相對(duì)應(yīng)的首標(biāo)的存儲(chǔ)地址,解壓縮單元根據(jù)該首標(biāo)的存儲(chǔ)地址而從存儲(chǔ)器中讀取所述首標(biāo),并且根據(jù)該首標(biāo)包含的對(duì)應(yīng)的壓 縮指令段的存儲(chǔ)地址而從存儲(chǔ)器中讀取該壓縮指令段。
22. 如權(quán)利要求20-21所述的重疊指令存取單元,其中,當(dāng)接收到所述 指令讀取請(qǐng)求時(shí),解壓縮單元檢查所請(qǐng)求的指令段是否已經(jīng)在緩沖器中以及 是否已經(jīng)被完全解壓縮。
23. 如權(quán)利要求22所述的重疊指令存取單元,其中, 當(dāng)所請(qǐng)求的壓縮指令段已經(jīng)在緩沖器中并且已經(jīng)完全被解壓縮時(shí),解壓縮單元向處理單元發(fā)送信號(hào)以啟動(dòng)該處理單元;當(dāng)所請(qǐng)求的壓縮指令段已經(jīng)在緩沖器中但是尚未被完全解壓縮時(shí),解壓縮單元繼續(xù)將該指令段解壓縮,并在解壓縮完成后向處理單元發(fā)送信號(hào)以啟 動(dòng)該處理單元;以及當(dāng)所請(qǐng)求的壓縮指令段不在緩沖器中時(shí),解壓縮單元根據(jù)所述指令讀取 請(qǐng)求而從存儲(chǔ)器讀取所請(qǐng)求的壓縮指令段,將其解壓縮并存儲(chǔ)在緩沖器中。
24. 如權(quán)利要求20-23所述的重疊指令存取單元,其中, 所述存儲(chǔ)器由多個(gè)重疊指令存取單元共享。
全文摘要
本發(fā)明提供了一種重疊指令存取單元和方法以及用于對(duì)程序進(jìn)行壓縮和存儲(chǔ)的方法和裝置。所述重疊指令存取單元用于執(zhí)行以多個(gè)壓縮程序段的形式存儲(chǔ)在存儲(chǔ)器中的程序,并且包括緩沖器;處理單元,發(fā)送指令讀取請(qǐng)求,從緩沖器讀取指令并執(zhí)行該指令;解壓縮單元,響應(yīng)于處理單元的指令讀取請(qǐng)求而從存儲(chǔ)器中讀取所請(qǐng)求的壓縮指令段,將該壓縮指令段解壓縮,并且將解壓縮后的指令段存儲(chǔ)在緩沖器中,其中在處理單元執(zhí)行所述指令段的同時(shí),解壓縮單元根據(jù)與該指令段對(duì)應(yīng)的首標(biāo)中的要調(diào)用的壓縮程序段的存儲(chǔ)地址,從存儲(chǔ)器中讀取對(duì)應(yīng)的壓縮指令段,將該壓縮指令段解壓縮,并將解壓縮后的指令段存儲(chǔ)在緩沖器中以供處理單元隨后使用。
文檔編號(hào)G06F9/45GK101398752SQ20071015320
公開(kāi)日2009年4月1日 申請(qǐng)日期2007年9月29日 優(yōu)先權(quán)日2007年9月29日
發(fā)明者寬 馮, 敏 朱, 崢 王, 亮 陳 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司