專利名稱::一種雙寬度指令系統(tǒng)的性能無損切換方法及其應(yīng)用系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于雙寬度指令系統(tǒng)設(shè)計(jì)領(lǐng)域,特別涉及一種雙寬度指令系統(tǒng)的性能無損切換方法及其應(yīng)用系統(tǒng)。
背景技術(shù):
:為了提高代碼密度,人們提出了雙寬度指令系統(tǒng)的概念,并成功應(yīng)用于現(xiàn)代處理器設(shè)計(jì)中。具有雙寬度指令系統(tǒng)的處理器,如ARM和MIPS,—般同時(shí)支持兩套不同長度的定長指令系統(tǒng),一個(gè)普通長度(一般為32位),一個(gè)較窄(一般為16位)。盡管較窄的指令系統(tǒng)可以減小代碼大小,從而帶來存儲(chǔ)體系性能和能耗等方面的好處,但是由于它可以提供的編碼空間更有限,因而限制了操作碼、寄存器操作數(shù)及立即數(shù)域的長度,從而在很多情況下,可以用一條普通長度指令表達(dá)的操作,需要用兩條甚至更多條較窄的指令表示,因而引起了性能方面的額外開銷。在這種情況下,提出了混合編碼的思想,以充分利用兩套指令系統(tǒng)的特點(diǎn)。雙寬度指令系統(tǒng)及混合編碼技術(shù)已經(jīng)成功應(yīng)用于現(xiàn)代處理器設(shè)計(jì)中。目前雙寬度指令系統(tǒng)的狀態(tài)切換機(jī)制有三大類1)使用跳轉(zhuǎn)切換指令進(jìn)行狀態(tài)切換。請(qǐng)參考L.Goudge,S.Segars.Thumb:ReducingtheCostof32-bitRISCPerformanceinPortableandConsumerApplications.Proceedingsofthe41stIEEEInternationalComputerConference,pp.l76,1996,該文獻(xiàn)公開了一種使用跳轉(zhuǎn)切換指令進(jìn)行狀態(tài)切換的機(jī)制,這種方法被采用在MIPS與MlPS16e、Arm和Thumb中。例如在ARM處理器中,處理器根據(jù)CPSR中的T位來確定指令類型當(dāng)T-O時(shí)為ARM指令;當(dāng)丁=1時(shí)為Thumb指令。處理器復(fù)位后,ARM啟動(dòng)并執(zhí)行ARM指令;通過執(zhí)行一條交換轉(zhuǎn)移指令BX可以轉(zhuǎn)換到Thumb指令;在Thumb狀態(tài)時(shí),執(zhí)行ThumbBX指令則可以轉(zhuǎn)換到ARM狀態(tài)。進(jìn)入異常中斷總是進(jìn)入ARM狀態(tài),且異常中斷總是返回到異常發(fā)生前的狀態(tài)。效果:在流水線計(jì)算機(jī)中,跳轉(zhuǎn)指令往往會(huì)帶來較大的開銷,因此帶來較大的使用跳轉(zhuǎn)指令進(jìn)行狀態(tài)切換的開銷。因此該方法比較適用于粗粒度的狀態(tài)切換,如函數(shù)級(jí)別的狀態(tài)切換。但粗粒度混合編碼的缺點(diǎn)在于,對(duì)于一個(gè)函數(shù),它只能全部編譯為16位,或全部編譯為32位。但一個(gè)函數(shù)內(nèi)部,從使用的指令功能上看,存在適合編譯為16位或不適合編譯為16位的區(qū)域;從代碼執(zhí)行頻率上看,也通常存在冷、熱代碼的區(qū)別。粗粒度混合編碼限制了編譯工具鏈進(jìn)一步根據(jù)不同性質(zhì)代碼選擇編碼方案的程度。2)使用特定的狀態(tài)切換指令進(jìn)行狀態(tài)切換。請(qǐng)參考S.Lee,J.Lee,S.Min,J.Hiserand丄W.Davidson,CodeGenerationforaDualInstructionSetProcessorbasedonSelectiveCodeTransformation.Proceedingsofthe7thInternationalWorkshoponSoftwareandCompilersforEmbeddedSystems,pp.33-48,Sep.2003,該文獻(xiàn)中公開了一禾中4吏用特定的狀態(tài)切換指令進(jìn)行狀態(tài)切換的機(jī)制。這類方法添加額外的顯式狀態(tài)切換指令,該指令的作用是將CPU狀態(tài)在32位和16位之間切換。盡管這條指令只需要1個(gè)額外的周期,與類似BX的狀態(tài)切換指令相比大大減少了對(duì)性能的損失,但由于細(xì)粒度混合編碼中,狀態(tài)切換頻繁發(fā)生,還是會(huì)帶來較大的性能開銷。3)將兩種寬度的指令系統(tǒng)在同一編碼空間中編碼。請(qǐng)參考A.Halambi,A.Shrivastava,P,Biswas,N.Dutt,A.Nicolau.AnEfficientCompilerTechniqueforCodeSizeReductionusingReducedBit-wid也ISAs.DesignAutomationandTestinEurope,March2002,該文獻(xiàn)提供了一種將兩種寬度的指令系統(tǒng)在同一編碼空間中編碼的方法,這種方法不需要顯式的狀態(tài)切換,相當(dāng)于重新設(shè)計(jì)新的指令系統(tǒng)。例如Halambi等人提出的方法,指令系統(tǒng)最高位為l,則表示32位,最高位為0,則表示16位。這種方法的缺點(diǎn)是將32位指令空間分了一半給16位,限制了32位指令系統(tǒng)的表達(dá)能力,同時(shí)不能與原指令系統(tǒng)兼容。Thumb2的方法也屬于這一類。綜上所述,已有的雙寬度指令系統(tǒng)切換存在著不能與原指令系統(tǒng)兼容或降低程序運(yùn)行性能的問題。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題在于,提供一種雙寬度指令系統(tǒng)的性能無損切換方法及其應(yīng)用系統(tǒng),使其可以在減小代碼大小的同時(shí)不會(huì)降低代碼性能。為達(dá)到上述目的,本發(fā)明提供的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,該方法是在雙寬度指令系統(tǒng)中引入兩個(gè)狀態(tài)切換指令集合,該兩個(gè)狀態(tài)切換指令集合分別"寬-窄"狀態(tài)切換指令集合和"窄-寬"狀態(tài)切換指令集合,所述狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器運(yùn)行狀態(tài)的功能。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述"寬-窄"狀態(tài)切換指令集合中的指令是在32位指令的程序中頻繁出現(xiàn),該指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;所述"窄-寬"狀態(tài)切換指令集合是在可用16位指令表示的程序片段最后頻繁出現(xiàn),在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,進(jìn)一步包括以下步驟狀態(tài)切換指令的選取步驟,用于由代碼分析工具依據(jù)設(shè)定的算法選擇符合設(shè)定條件的指令加入到狀態(tài)切換指令集中,微體系結(jié)構(gòu)的設(shè)計(jì)步驟,用于在體系結(jié)構(gòu)中引入狀態(tài)切換指令集合以及雙寬度指令系統(tǒng)混合編碼的結(jié)構(gòu)設(shè)計(jì);混合編碼生成步驟,用在不破壞原有指令語義序列的基礎(chǔ)上,將所有可以轉(zhuǎn)換的指令序列用狀態(tài)切換指令和窄指令表示,生成最終的可執(zhí)行目f示文件。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述狀態(tài)切換指令的選取步驟進(jìn)一步包括步驟S101,分析工具維護(hù)兩塊存儲(chǔ)空間來記錄每個(gè)指令的權(quán)重;步驟S102,選擇出現(xiàn)頻率最高的候選指令加入到相應(yīng)狀態(tài)切換指令集合中;步驟S103,對(duì)于程序中的每條候選指令,如果該候選指令與目前狀態(tài)切換集合中的一條指令有"可轉(zhuǎn)換"關(guān)系,則存儲(chǔ)空間中的相應(yīng)項(xiàng)的值加一;步驟S104,選擇數(shù)組中值最大的項(xiàng),并將它加入狀態(tài)切換指令集合中,如果狀態(tài)切換指令集合中指令數(shù)少于給定總指令數(shù),則轉(zhuǎn)到步驟S103;否則,結(jié)束。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述微體系結(jié)構(gòu)的設(shè)計(jì)主要是對(duì)譯碼結(jié)構(gòu)的設(shè)計(jì),該譯碼結(jié)構(gòu)的設(shè)計(jì)包括統(tǒng)一譯碼和分離譯碼兩種方式。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述統(tǒng)一譯碼方式是將從內(nèi)存取到的32位指令首先通過16位解碼器和狀態(tài)切換指令預(yù)解碼器轉(zhuǎn)換為相應(yīng)的32位指令和狀態(tài)設(shè)置信號(hào),之后和原32位指令一起通過多路選擇器選擇出當(dāng)前指令,最后統(tǒng)一由32位譯碼器進(jìn)行最終的譯碼;所述分離譯碼方式,是將指令首先由16位、狀態(tài)切換指令和32位指令譯碼器分別譯碼,最后由多選器選擇最終的譯碼結(jié)果。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述微體系結(jié)構(gòu)的設(shè)計(jì)步驟中,混合編碼指令序列是一條"寬-窄"狀態(tài)切換指令開始,中間有若干條16位指令,最后以一條"窄-寬"狀態(tài)切換指令作為結(jié)束。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述混合編碼生成步驟進(jìn)一步包括步驟S301,標(biāo)記可以轉(zhuǎn)換的指令;步驟S302,將所述可以被轉(zhuǎn)換的指令相鄰排列,標(biāo)記確定要被轉(zhuǎn)換的指令;步驟S303,重新計(jì)算裝載或跳轉(zhuǎn)目標(biāo)地址,輸出最終的可執(zhí)行目^^文件。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述步驟S103中,所述"可轉(zhuǎn)換"關(guān)系的定義如下當(dāng)A是"寬-窄"狀態(tài)切換"候選指令"且B是"窄-寬"狀態(tài)切換"候選指令",且在程序二進(jìn)制代碼中二者之間的所有指令都是"可被窄指令(例如16位指令)表示的",則指令A(yù)與指令B構(gòu)成所述"可轉(zhuǎn)換"關(guān)系。進(jìn)一步的,本發(fā)明還提供了一種實(shí)現(xiàn)上述方法的應(yīng)用系統(tǒng),其特征在于,包括一狀態(tài)切換裝置,該狀態(tài)切換裝置進(jìn)一步包括一"寬-窄"狀態(tài)切換模塊,用于控制一"寬-窄"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;及一"窄-寬"狀態(tài)切換模塊,用于控制一"窄-寬"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。與現(xiàn)有技術(shù)相比,本發(fā)明提供的雙寬度指令系統(tǒng)的性能無損切換^l制,通過在原指令系統(tǒng)中引入兩個(gè)精簡的狀態(tài)切換指令集合,分別為"寬-窄"狀態(tài)切換指令集合和"窄-寬"狀態(tài)切換指令集合。"寬-窄"狀態(tài)切換指令集合中的指令在寬指令(如32位指令)的程序中頻繁出現(xiàn),在執(zhí)行如加法、瑕^轉(zhuǎn)等普通操作的同時(shí),還能起到將處理器狀態(tài)切換至窄指令狀態(tài)的作用;"窄-寬"狀態(tài)切換指令集合則在可用窄指令(如16位指令)表示的程序片段最后頻繁出現(xiàn),同樣在執(zhí)行加法等普通操作的同時(shí),可將處理器狀態(tài)切換至寬指令狀態(tài)。該機(jī)制可以很好的支持細(xì)粒度混合編碼,能夠在不降低程序運(yùn)行性能的同時(shí),有效減小代碼的大小。圖1為本發(fā)明雙寬度指令系統(tǒng)的性能無損切換機(jī)制的主要實(shí)施流程;圖2為本發(fā)明中狀態(tài)切換指令的選取流程;圖3為本發(fā)明中混合編碼的生成流程;圖4為本發(fā)明中微體系結(jié)構(gòu)設(shè)計(jì)中統(tǒng)一譯碼結(jié)構(gòu)示意圖5為本發(fā)明中微體系結(jié)構(gòu)設(shè)計(jì)中分離譯碼結(jié)構(gòu)示意圖。具體實(shí)施例方式下面結(jié)合實(shí)施例對(duì)本發(fā)明做詳細(xì)的描述,以進(jìn)一步說明本發(fā)明的目的、方案及功效。本發(fā)明基于不降低程序運(yùn)行性能的考慮,提出了一種新的細(xì)粒度混合編碼的方法。以5級(jí)流水的32位單發(fā)射處理器為例,給定32位和16位指令系統(tǒng),不增加程序執(zhí)行周期,最好的保證就是不要增加動(dòng)態(tài)執(zhí)行的指令數(shù)。在不增加動(dòng)態(tài)執(zhí)行的指令數(shù)的前提下,混合編碼能夠達(dá)到的最佳效果是,在最終的目標(biāo)程序中,一條指令所表示的操作如果在16位中也可以由一條指令來表示,則該指令使用16位編碼;否則,仍然使用32位編碼。因此,需要提供一種不需要耗費(fèi)處理器周期的方法,在需要狀態(tài)切換的時(shí)候通知CPU。本發(fā)明提出一種無損切換機(jī)制,在寬指令系統(tǒng)(原指令系統(tǒng))中引入兩個(gè)精簡的狀態(tài)切換指令集合,分別為"寬-窄"狀態(tài)切換指令集合和"窄-寬"狀態(tài)切換指令集合。該狀態(tài)切換指令集合里的指令在程序中頻繁出現(xiàn),其在執(zhí)行普通操作(例如加法、跳轉(zhuǎn)等)的同時(shí),還能起到切換處理器狀態(tài)的作用。其中,"寬-窄"狀態(tài)切換指令集合中的指令在32位指令的程序中頻繁出現(xiàn),在執(zhí)行如加:^去、跳轉(zhuǎn)等普通操作的同時(shí),還能起到將處理器狀態(tài)切換至窄指令狀態(tài)的作用;"窄-寬"狀態(tài)切換指令集合則在可用16位指令表示的程序片段最后頻繁出現(xiàn),同樣在執(zhí)行加法等普通操作的同時(shí),可將處理器狀態(tài)切換至寬指令狀態(tài)。"寬-窄"狀態(tài)切換指令集合和"窄-寬"狀態(tài)切換指令集合中包含的指令的普通操作功能可以有交集,甚至完全一致。本發(fā)明以UniCore體系結(jié)構(gòu)為例設(shè)計(jì)并實(shí)現(xiàn)了這樣一個(gè)平臺(tái),取得了不錯(cuò)的效果,但本發(fā)明的機(jī)制并不限于UniCore體系結(jié)構(gòu),其同樣適用于其它體系結(jié)構(gòu)。參考圖1圖3,具體方法如下。步驟S10:狀態(tài)切換指令的選取狀態(tài)切換指令可以由代碼分析工具來選擇。由于狀態(tài)切換指令的選擇依賴于產(chǎn)生代碼的編譯器,尤其需要考慮在用來表示寄存器號(hào)的位域不足以表示全部寄存器時(shí),一條指令要表示哪組寄存器,因此所分析的二進(jìn)制代碼和最終在系統(tǒng)上運(yùn)行的代碼最好是使用相同的編譯器和編譯優(yōu)化選項(xiàng)??梢赃x擇的狀態(tài)切換指令總數(shù)確定下之后,及確定下了狀態(tài)切換指令需要多少位表示操作碼和操作數(shù)。設(shè)狀態(tài)切換指令可用的操作數(shù)類型編碼空間為m位。參考圖2,描述了狀態(tài)切換指令的選取流程圖,本發(fā)明使用如下的方法選擇狀態(tài)切換指令。步驟S10h代碼分析工具維護(hù)兩塊存儲(chǔ)空間WNINST[OP][ARGTYPE]和NWINST[OP][ARGTYPE]來分別記錄"寬-窄"狀態(tài)切換的候選指令和"窄-寬"狀態(tài)切換的候選指令的權(quán)重。指令被根據(jù)操作碼和操作數(shù)類型進(jìn)行分類。對(duì)于每個(gè)操作碼,本發(fā)明根據(jù)它可以帶有的操作數(shù)組合的不同進(jìn)一步分為若干類,如下表1所示為常見精簡指令系統(tǒng)計(jì)算機(jī)(RISC)指令格式分類<table>tableseeoriginaldocumentpage9</column></row><table>表1指令格式分類該表以常見RISC體系結(jié)構(gòu)為例,列出了可以被m位編碼的操作數(shù)類型(ARGTYPEs)。如果一條指令的操作數(shù)屬于某一個(gè)類型,稱之為一個(gè)"候選指令",WNINST[OP][ARGTYPE]數(shù)組和NWINST[OP][ARGTYPE]數(shù)組中會(huì)分別存在對(duì)應(yīng)的一項(xiàng)。如果一條指令的操作數(shù)不屬于表中所列任何類型,則忽略該條指令。如果一條指令可以被一條16位指令表示,則稱之為"可被16位表示的"。步驟S102:在指令選擇階段的開始,狀態(tài)切換指令集合為空。通過將所有可以用m位表示的"候選指令"出現(xiàn)次數(shù)排序,選擇出現(xiàn)次數(shù)最多的"候選指令"將其加入到"寬-窄"狀態(tài)切換指令集合中。其中候選指令為可用狀態(tài)切換指令所有比特位數(shù)編碼表示的指令。步驟S103:對(duì)于程序中的每條候選指令,如果它與目前狀態(tài)切換集合中的一條指令有"可轉(zhuǎn)換"關(guān)系,則WNINST[OP][ARGTYPE]或NWINST[OP][ARGTYPE]數(shù)組中的相應(yīng)項(xiàng)的值加一。"可轉(zhuǎn)換"關(guān)系定義如下如果指令A(yù)與指令B構(gòu)成"可轉(zhuǎn)換"關(guān)系,當(dāng)且僅當(dāng)A是"寬-窄"狀態(tài)切換"候選指令"且B是"窄-寬"狀態(tài)切換"候選指令",且在程序二進(jìn)制代碼中二者之間的所有指令都是"可被16位表示的"。S卩,如果指令A(yù)和指令B之間存在任何指令,則從A到B的指令序列可以完全一一由16位指令表示。一些指令可能屬于多于一種指令格式類型。如果這樣,所有相關(guān)項(xiàng)的值均被加步驟S104:算法選擇WNINST[OP][ARGTYPE]數(shù)組和NWINST[OP][ARGTYPE]數(shù)組中具有最大值的項(xiàng),并將它加入相應(yīng)的狀態(tài)切換指令集合中,即WNINST[OP][ARGTYPE]數(shù)組中選出的項(xiàng)加入"寬-窄"狀態(tài)切換指令集合中,NWINST[OP][ARGTYPE]數(shù)組中選出的項(xiàng)加入"窄-寬"狀態(tài)切換指令集合中。如果狀態(tài)切換指令集合中指令數(shù)少于總狀態(tài)切換指令數(shù),則轉(zhuǎn)到步驟S103;否則,算法結(jié)束。步驟S20:微體系結(jié)構(gòu)的設(shè)計(jì)在描述處理器的微體系結(jié)構(gòu)的設(shè)計(jì)之前,首先對(duì)處理器流水線各階段的簡要稱謂進(jìn)行概要介紹。以常見的五級(jí)流水按序執(zhí)行的處理器為例,其流水線可以分為五個(gè)階段IF(取指)、DEC(譯碼及讀寄存器堆)、EXE(執(zhí)行或抵制運(yùn)算)、MEM(訪問數(shù)據(jù)存儲(chǔ))和WB(寫回)。本發(fā)明只需要修改其中的譯碼階段和相應(yīng)的信號(hào)。當(dāng)譯碼器遇到"寬-窄"狀態(tài)切換指令時(shí),將指10令編碼中第16-31位譯碼為狀態(tài)切換指令,同時(shí)在這一周期的末尾將CPU狀態(tài)置為"16位-準(zhǔn)備"狀態(tài)。下一周期開始,CPU不會(huì)取新的指令,而將已經(jīng)取到的這條指令的第0-15位作為一條16位指令來進(jìn)行譯碼。如果這條16位的指令是"窄-寬"狀態(tài)切換指令,CPU狀態(tài)在這一周期末被設(shè)置為"32位"狀態(tài);否則,CPU狀態(tài)被設(shè)置為"16位"狀態(tài),流水線像普通流水線中執(zhí)行16位指令一樣執(zhí)行下去,直到遇到一條"窄-寬"狀態(tài)切換指令,將CPU狀態(tài)切換回"32位"狀態(tài)。由于代碼變換在每個(gè)基本塊之內(nèi)進(jìn)行,編譯工具鏈可以確定在兩條狀態(tài)切換指令之間的16位指令中沒有跳轉(zhuǎn)指令或者其它修改PC的指令。譯碼部分結(jié)構(gòu)設(shè)計(jì)可以有兩種,一種為統(tǒng)一譯碼,參考圖4,描述了統(tǒng)一譯碼的具體方式,將從內(nèi)存取到的32位指令首先通過16位解碼器和狀態(tài)切換指令預(yù)解碼器轉(zhuǎn)換為相應(yīng)的32位指令和狀態(tài)設(shè)置信號(hào),之后和原32位指令一起通過多路選擇器選擇出當(dāng)前指令,最后統(tǒng)一由32位譯碼器進(jìn)行最終的譯碼;另一種為分離譯碼,參考圖5,描述了分離譯碼的具體方式,即指令首先由16位、狀態(tài)切換指令和32位指令譯碼器分別譯碼,最后由多選器選擇最終的譯碼結(jié)果。一個(gè)典型的混合編碼指令序列以一條"寬-窄"狀態(tài)切換指令開始(這條指令在執(zhí)行自己的計(jì)算功能的同時(shí),通知處理器將狀態(tài)切換到16位),中間有若干條"16位"指令,最后以一條"窄-寬"狀態(tài)切換指令作為結(jié)束(這條指令在執(zhí)行自己的計(jì)算功能的同時(shí),通知處理器將狀態(tài)切換到32位)。代碼在存儲(chǔ)空間中的布局情況如表2所示。<table>tableseeoriginaldocumentpage11</column></row><table>32位指令表2混合編碼在存儲(chǔ)中的布局混合編碼指令序列在流水線中的情況如下表3所示。<table>tableseeoriginaldocumentpage12</column></row><table>表3改進(jìn)的混合編碼序列在5級(jí)流水線中的執(zhí)行情況步驟S30:混合編碼生成機(jī)制在以上的處理器設(shè)計(jì)的基礎(chǔ)上,本發(fā)明給出在鏈接時(shí)刻進(jìn)行細(xì)粒度混合編碼的方法。在鏈接時(shí)刻,指令和數(shù)據(jù)的地址己經(jīng)確定,因此一條帶有相對(duì)偏移做操作數(shù)的32位指令(例如條件跳轉(zhuǎn)或load/store)是否可以被16位指令表示已經(jīng)可以知道(由于代碼密度增大,經(jīng)過混合編碼后還可能出現(xiàn)新的可以被16位表示的指令,這里本發(fā)明忽略這些指令)。同時(shí),在編譯工具鏈基于32位指令系統(tǒng)體系結(jié)構(gòu)產(chǎn)生匯編代碼之后進(jìn)行指令編碼的選擇,可以保證靜態(tài)代碼和動(dòng)態(tài)代碼指令數(shù)語與單純用32位指令的代碼相同,這樣可以保證在提高代碼密度的同時(shí),不會(huì)降低性能。本發(fā)明中混合編碼生成算法的基本思想是在代碼中識(shí)別可以轉(zhuǎn)換的指令,重新調(diào)度代碼,在保證不破壞原依賴關(guān)系的基礎(chǔ)上使得這些可以轉(zhuǎn)換的指令被連續(xù)放置,以增加可以轉(zhuǎn)換的指令,最后將所有可以轉(zhuǎn)換的指令序列用狀態(tài)轉(zhuǎn)換指令和"16位"指令表示。它包括在基本塊內(nèi)進(jìn)行的兩個(gè)主要部分。參考圖3示出了混合編碼生成步驟的具體流程步驟S30h標(biāo)記可以轉(zhuǎn)換的指令。優(yōu)化器依次掃描每條指令,將所有可以轉(zhuǎn)換為狀態(tài)轉(zhuǎn)換指令或"16位"指令的指令進(jìn)行標(biāo)記。如果是跳轉(zhuǎn)指令或load/store指令,則計(jì)算當(dāng)前的相對(duì)偏移,以判斷該指令是否可以被狀態(tài)轉(zhuǎn)換指令或"16位"指令表示。在許多指令被轉(zhuǎn)換為16位指令后,實(shí)際的相對(duì)偏移可能會(huì)變小,但不會(huì)增大。因此如果當(dāng)前可以用16位表示,在轉(zhuǎn)換以后也必然可以被表示。步驟S302:將可以被轉(zhuǎn)換的指令盡可能相鄰排列,標(biāo)記確定要被轉(zhuǎn)換的指令。這一過程步驟如下i分析基本塊內(nèi)指令間的數(shù)據(jù)相關(guān)。如果兩條指令間存在讀后寫、寫后讀或?qū)懞髮懴嚓P(guān),后者必須在前者后執(zhí)行。ii初始的CSR(代碼大小減小:CodeSizeReduction)被設(shè)置為0。對(duì)于任意符合依賴關(guān)系的線性指令順序,即對(duì)于任意符合拓?fù)渑判蝽樞虻闹噶铐樞?,?yōu)化器通過計(jì)算可以被轉(zhuǎn)換為16位指令序列的指令數(shù),計(jì)算可以減少的代碼大小。如果減少量比當(dāng)前CSR大,CSR被設(shè)置為該減少量,并記錄當(dāng)前的指令排列順序??赊D(zhuǎn)換的指令數(shù)計(jì)算方法如下優(yōu)化器從基本塊第一條指令開始逐條掃描指令。遇到一條可以被轉(zhuǎn)換為"寬-窄"狀態(tài)切換指令的指令時(shí),標(biāo)記16位指令序列開始。優(yōu)化器掃描最長的可轉(zhuǎn)換的指令序列,標(biāo)記其中的每條指令為"窄-寬"狀態(tài)切換指令或"16位"指令。然后繼續(xù)掃描,尋找新的可轉(zhuǎn)換指令序列,直到基本塊末尾。由于一個(gè)典型基本塊中指令數(shù)一般不超過10,同時(shí)滿足依賴關(guān)系的可能的拓?fù)渑判驍?shù)有限,因此這一過程可以看做O(N)量級(jí),N為指令數(shù),不會(huì)導(dǎo)致巨大時(shí)間浪費(fèi)。步驟S303:重新計(jì)算程序中l(wèi)oad/store指令涉及的地址或跳轉(zhuǎn)指令的目標(biāo)地址,輸出最終的可執(zhí)行目標(biāo)文件。下面以UniCore處理器為例,在UniCore平臺(tái)上實(shí)踐本發(fā)明所述的雙寬度指令系統(tǒng)狀態(tài)切換方法。運(yùn)用本發(fā)明方法中狀態(tài)切換指令選取方法,為UniCore平臺(tái)選取的切換指令集合如下表4所示<table>tableseeoriginaldocumentpage13</column></row><table>表4:"寬-窄"狀態(tài)切換指令集合<table>tableseeoriginaldocumentpage14</column></row><table>表5:"窄-寬"狀態(tài)切換指令集合其中signedimme表示有符號(hào)立即數(shù),rd,rm,m,rs表示寄存器,其中rd為目標(biāo)寄存器。這些狀態(tài)切換指令除執(zhí)行數(shù)據(jù)移動(dòng)、比較、裝載和跳轉(zhuǎn)等功能外,還會(huì)切換處理器的運(yùn)行狀態(tài)。在選定狀態(tài)切換指令后,根據(jù)該指令集合,修改了編譯工具鏈,生成混合編碼的程序。本發(fā)明還提供了一種實(shí)現(xiàn)上述方法的應(yīng)用系統(tǒng),包括一狀態(tài)切換裝置,該狀態(tài)切換裝置進(jìn)一步包括一"寬-窄"狀態(tài)切換模塊,用于控制一"寬-窄"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;及一"窄-寬"狀態(tài)切換模塊,用于控制一"窄-寬"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。對(duì)于其他體系結(jié)構(gòu)和其它應(yīng)用,同樣可以采用本發(fā)明中所述狀態(tài)切換機(jī)制,通過在本發(fā)明中所述的狀態(tài)切換指令選取方法、微體系結(jié)構(gòu)的設(shè)計(jì)和混合編碼生成方法,完成從硬件到軟件的整體設(shè)計(jì)和實(shí)現(xiàn)。下面給出對(duì)本發(fā)明進(jìn)行測(cè)評(píng)的效果1)實(shí)驗(yàn)環(huán)境使用GNU工具鏈(gcc3.2.1)和newlibC庫。Newlib是一個(gè)輕量級(jí)的C庫,主要應(yīng)用于嵌入式平臺(tái)。本發(fā)明在mediabench中選擇了一些程序作為評(píng)測(cè)程序。GCC編譯優(yōu)化選項(xiàng)為"-02"。所有的程序都被編譯為三個(gè)可執(zhí)行文件UniCore32、UniCore16和本發(fā)明32/16位混合編碼。本發(fā)明對(duì)每種可執(zhí)行文件的代碼大小進(jìn)行了統(tǒng)計(jì),并用sim-pipeline進(jìn)行了模擬評(píng)測(cè)。Sim-pipeline是一個(gè)周期級(jí)模擬器,由simplescalar中的sim-outorder模擬器修改而成,模擬UniCore的五級(jí)流水。主要的模擬配置參數(shù)見表6。評(píng)測(cè)程序見表7。轉(zhuǎn)移預(yù)測(cè)策略預(yù)測(cè)不發(fā)生一級(jí)指令Cache容量8K相連度…塊大小32Bytes替換策略先進(jìn)先出一級(jí)數(shù)據(jù)Cache容量8K相連度4塊大小32Bytes策略先進(jìn)先出,寫回,寫分配表6模擬配置參數(shù)評(píng)測(cè)程序描述adpcm自適應(yīng)差分脈沖編碼調(diào)制的編碼與解碼epic一種有損圖像壓縮算法的壓縮與解壓縮pegwit一種公鑰加密認(rèn)證方法的加密和解密jpeg一種標(biāo)準(zhǔn)圖像壓縮格式的編碼與解碼mesaOpenGL的一個(gè)3D圖形庫核心(mipmap/osdemo/texgen)mpeg2一種高質(zhì)量數(shù)字視頻標(biāo)準(zhǔn)的編解碼表7評(píng)測(cè)程序2)實(shí)驗(yàn)結(jié)果本實(shí)驗(yàn)從代碼大小、動(dòng)態(tài)執(zhí)行的指令數(shù)、程序運(yùn)行的周期數(shù)三個(gè)方面對(duì)本發(fā)明所述的方法進(jìn)行了評(píng)估。對(duì)于每一項(xiàng)指標(biāo),都對(duì)比了UniCore32和采用本文提出的切換機(jī)制的混合編碼方法。對(duì)于代碼大小,本文的方法可以降低11%到41%。對(duì)于所有的動(dòng)態(tài)執(zhí)行指令數(shù),本文的方法與UniCore32相同。對(duì)于程序運(yùn)行的周期數(shù),本文的方法均不會(huì)低于UniCore32,范圍從99%到100%。這是由于本發(fā)明的方法可以保證運(yùn)行的指令數(shù)與UniCore32相同,而由于降低了代碼大小,在一些情況下會(huì)減緩Cache的壓力,因而取得比UniCore32略好的性能。實(shí)驗(yàn)結(jié)果表明,本文提出的雙寬度指令系統(tǒng)狀態(tài)切換機(jī)制可以很好地支持細(xì)粒度混合編碼,能夠在不降低程序運(yùn)行性能的同時(shí),有效降低代碼的大小。雖然本發(fā)明己以較佳實(shí)施例揭露如上,然其并非用以限定本發(fā)明,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。權(quán)利要求1、一種雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,該方法是在雙寬度指令系統(tǒng)中引入兩個(gè)狀態(tài)切換指令集合,該兩個(gè)狀態(tài)切換指令集合分別“寬-窄”狀態(tài)切換指令集合和“窄-寬”狀態(tài)切換指令集合,所述狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器運(yùn)行狀態(tài)的功能。2、根據(jù)權(quán)利要求1所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述"寬-窄"狀態(tài)切換指令集合中的指令是在32位指令的程序中頻繁出現(xiàn),該指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;所述"窄-寬"狀態(tài)切換指令集合是在可用16位指令表示的程序片段最后頻繁出現(xiàn),在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。3、根據(jù)權(quán)利要求1或2所述的雙寬度指令系統(tǒng)的性能無損切換方纟去,其特征在于,進(jìn)一步包括以下步驟.-狀態(tài)切換指令的選取步驟,用于由代碼分析工具依據(jù)設(shè)定的算法選擇符合設(shè)定條件的指令加入到狀態(tài)切換指令集中;微體系結(jié)構(gòu)的設(shè)計(jì)步驟,用于在體系結(jié)構(gòu)中引入狀態(tài)切換指令集合以及雙寬度指令系統(tǒng)混合編碼的結(jié)構(gòu)設(shè)計(jì);混合編碼生成步驟,用在不破壞原有指令語義序列的基礎(chǔ)上,將所有可以轉(zhuǎn)換的指令序列用狀態(tài)切換指令和窄指令表示,生成最終的可執(zhí)行目標(biāo)文件。4、根據(jù)權(quán)利要求3所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述狀態(tài)切換指令的選取步驟進(jìn)一步包括步驟S101,分析工具維護(hù)兩塊存儲(chǔ)空間來記錄每個(gè)指令的權(quán)重;歩驟S102,選擇出現(xiàn)頻率最高的候選指令加入到相應(yīng)狀態(tài)切換指令集合中;步驟S103,對(duì)于程序中的每條候選指令,如果該候選指令與目前狀態(tài)切換集合中的一條指令有"可轉(zhuǎn)換"關(guān)系,則存儲(chǔ)空間中的相應(yīng)項(xiàng)的值加一;步驟S104,選擇數(shù)組中值最大的項(xiàng),并將它加入狀態(tài)切換指令集合中,如果狀態(tài)切換指令集合中指令數(shù)少于給定總指令數(shù),則轉(zhuǎn)到步驟S103;否則,結(jié)束。5、根據(jù)權(quán)利要求3所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述微體系結(jié)構(gòu)的設(shè)計(jì)主要是對(duì)譯碼結(jié)構(gòu)的設(shè)計(jì),該譯碼結(jié)構(gòu)的設(shè)計(jì)方式包括統(tǒng)一譯碼和分離譯碼兩種方式。6、根據(jù)權(quán)利要求5所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述統(tǒng)一譯碼方式是將從內(nèi)存取到的32位指令首先通過16位解5馬器和狀態(tài)切換指令預(yù)解碼器轉(zhuǎn)換為相應(yīng)的32位指令和狀態(tài)設(shè)置信號(hào),之后和原32位指令一起通過多路選擇器選擇出當(dāng)前指令,最后統(tǒng)一由32位譯碼器進(jìn)行最終的譯碼;所述分離譯碼方式,是將指令首先由16位、狀態(tài)切換指令和32位指令譯碼器分別譯碼,最后由多選器選擇最終的譯碼結(jié)果。7、根據(jù)權(quán)利要求3所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述微體系結(jié)構(gòu)的設(shè)計(jì)步驟中,混合編碼指令序列是一條"寬-窄"狀態(tài)切換指令開始,中間有若干條16位指令,最后以一條"窄-寬"狀態(tài)切換指令作為結(jié)束。8、根據(jù)權(quán)利要求3所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述混合編碼生成步驟進(jìn)一步包括步驟S301,標(biāo)記可以轉(zhuǎn)換的指令;步驟S302,將所述可以被轉(zhuǎn)換的指令相鄰排列,標(biāo)記確定要被轉(zhuǎn)換的指令;步驟S303,重新計(jì)算裝載或跳轉(zhuǎn)目標(biāo)地址,輸出最終的可執(zhí)行目標(biāo)文件。9、根據(jù)權(quán)利要求4所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述步驟S103中,所述"可轉(zhuǎn)換"關(guān)系的定義如下當(dāng)A是"寬-窄"狀態(tài)切換"候選指令"且B是"窄-寬"狀態(tài)切換"候選指令",且在程序二進(jìn)制代碼中二者之間的所有指令都是"可被16位表示的",則指令A(yù)與指令B構(gòu)成所述"可轉(zhuǎn)換"關(guān)系。10、一種實(shí)現(xiàn)上述權(quán)利要求19中任一項(xiàng)所述方法的應(yīng)用系統(tǒng),其特征在于,包括一狀態(tài)切換裝置,該狀態(tài)切換裝置進(jìn)一步包括-一"寬-窄"狀態(tài)切換模塊,用于控制一"寬-窄"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;及一"窄-寬"狀態(tài)切換模塊,用于控制一"窄-寬"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。全文摘要本發(fā)明公開了一種雙寬度指令系統(tǒng)的性能無損切換方法及其應(yīng)用系統(tǒng),該方法是在雙寬度指令系統(tǒng)中引入兩個(gè)狀態(tài)切換指令集合,該兩個(gè)狀態(tài)切換指令集合分別“寬-窄”狀態(tài)切換指令集合和“窄-寬”狀態(tài)切換指令集合,所述狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器運(yùn)行狀態(tài)的功能。文檔編號(hào)G06F9/38GK101676863SQ20091016370公開日2010年3月24日申請(qǐng)日期2009年8月14日優(yōu)先權(quán)日2008年8月15日發(fā)明者劉先華,張吉豫,旭程申請(qǐng)人:北京北大眾志微系統(tǒng)科技有限責(zé)任公司