亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

編譯設(shè)備和編譯方法

文檔序號:6384985閱讀:166來源:國知局
專利名稱:編譯設(shè)備和編譯方法
技術(shù)領(lǐng)域
本發(fā)明涉及將以高級語言(如C/C++語言)描述的源程序轉(zhuǎn)換為機(jī)器語言程序的編譯器,尤其是能夠輸出機(jī)器語言程序的編譯器,該機(jī)器語言程序可以以低功耗執(zhí)行。
背景技術(shù)
在最近幾年廣泛使用的移動信息處理設(shè)備,例如,移動電話和個(gè)人數(shù)字助理(PDA),需要降低功耗。因此,逐漸需要開發(fā)能夠有效利用這些信息處理設(shè)備中使用的處理器的高級功能的編譯器,并且產(chǎn)生機(jī)器級指令,這些指令可以由處理器以低功耗執(zhí)行。
如傳統(tǒng)的編譯器,通過改變指令的執(zhí)行順序,用于降低處理器功耗的指令序列優(yōu)化設(shè)備,在日本未決專利申請No.8-101777中予以公開。
該指令序列優(yōu)化設(shè)備置換這些指令,從而減小指令的位模式之間的漢明距離,而不改變指令之間的相關(guān)性。因此,它可以實(shí)現(xiàn)指令序列的優(yōu)化,從而導(dǎo)致處理器功耗的降低。
然而,傳統(tǒng)的指令序列優(yōu)化設(shè)備并不能認(rèn)定能執(zhí)行并行處理的處理器。因此,存在一個(gè)問題,即,即使將傳統(tǒng)的優(yōu)化處理應(yīng)用在具有并行處理能力的處理器中,也不能獲得最佳指令序列。

發(fā)明內(nèi)容
本發(fā)明基于上述背景構(gòu)思,目的在于提供一種編譯器,它能夠產(chǎn)生可由具有并行處理能力的處理器以低功耗執(zhí)行的指令序列。
為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的編譯設(shè)備,是一種將源程序翻譯為用于處理器的機(jī)器語言程序的編譯設(shè)備該處理器包括多個(gè)執(zhí)行單元,它們能夠并行執(zhí)行指令,以及多個(gè)指令發(fā)出單元,它們發(fā)出由多個(gè)執(zhí)行單元分別執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,用于優(yōu)化中間碼,從而減小在連續(xù)的指令周期中被安排在與同樣的指令發(fā)出單元對應(yīng)位置的指令之間的漢明距離,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。優(yōu)選地,該優(yōu)化單元通過將具有較高的優(yōu)先級的指令安排在對應(yīng)于多個(gè)指令發(fā)出單元中每一個(gè)的位置上來優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性,所述具有較高優(yōu)先級的指令與在一個(gè)緊接先前的周期中被安排在與同一指令發(fā)出單元對應(yīng)的位置上的指令間,具有較小的漢明距離。
因此,由于可以抑制由每一個(gè)執(zhí)行單元執(zhí)行的指令的位模式的改變,保存在處理器的指令寄存器中值的位改變保持較小,從而產(chǎn)生可以由該處理器以低功耗執(zhí)行的指令序列。
根據(jù)本發(fā)明另一方面的編譯設(shè)備是一種將源程序翻譯為用于處理器的機(jī)器語言程序的編譯設(shè)備,該處理器包括多個(gè)執(zhí)行單元,它們能夠并行執(zhí)行指令,以及多個(gè)指令發(fā)出單元,發(fā)出由多個(gè)執(zhí)行單元分別執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,用于優(yōu)化中間碼,從而在連續(xù)的指令周期中訪問同一寄存器,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。優(yōu)選地,該優(yōu)化單元通過將具有較高優(yōu)先級的指令安排在對應(yīng)于多個(gè)指令發(fā)出單元中的每一個(gè)的位置,優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性,所述具有較高優(yōu)先級的指令用于訪問在緊接先前指令周期中被安排與同一指令發(fā)出單元對應(yīng)位置的指令的寄存器。
因此,重復(fù)對一個(gè)寄存器的訪問,并使用于選擇寄存器的控制信號的變化變小,從而產(chǎn)生可以由處理器以低功耗執(zhí)行的指令序列。
根據(jù)本發(fā)明的又一方面的編譯設(shè)備是一種將源程序翻譯為用于處理器的機(jī)器語言程序的編譯設(shè)備,該處理器包括多個(gè)執(zhí)行單元,它們能夠并行執(zhí)行指令,以及多個(gè)指令發(fā)出單元,其發(fā)出由多個(gè)執(zhí)行單元分別執(zhí)行的指令,其中所發(fā)出的具有較高優(yōu)先級的指令是預(yù)定用于所述多個(gè)指令發(fā)出單元的每一個(gè),以及該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,通過將所述具有較高優(yōu)先級的預(yù)定指令放在與多個(gè)指令發(fā)出單元的每一個(gè)對應(yīng)的位置上,優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
因此,如果利用處理器的同一組成部分的指令被分配為將由同一指令發(fā)出單元按優(yōu)先級發(fā)出的指令,使用同一組成部分的指令在同一執(zhí)行單元中被連續(xù)執(zhí)行。因此,產(chǎn)生能夠由處理器以低功耗執(zhí)行的指令序列。
根據(jù)本發(fā)明的又一方面的編譯設(shè)備是一種將源程序翻譯為用于處理器的機(jī)器語言程序的編譯設(shè)備,該處理器包括多個(gè)執(zhí)行單元,它們能夠并行執(zhí)行指令,以及多個(gè)指令發(fā)出單元,發(fā)出由多個(gè)執(zhí)行單元分別執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;間隔檢測單元,用于連續(xù)檢測在預(yù)定數(shù)量的指令周期中,檢測在分別對應(yīng)于其中將安排指令的多個(gè)指令發(fā)出單元的多個(gè)位置當(dāng)中、預(yù)定數(shù)量的位置中沒有安排指令的間隔;第一指令插入單元,用于在緊接該間隔之前插入一條指令,以停止對應(yīng)于沒有被安排指令的位置的指令發(fā)出單元的操作;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
因此,當(dāng)指令沒有在某個(gè)間隔被安排在對應(yīng)于指令發(fā)出單元的位置上時(shí),在該間隔期間可以停止提供給該指令發(fā)出單元的電源。因此,產(chǎn)生能夠由處理器以低功耗執(zhí)行的指令序列。
根據(jù)本發(fā)明的又一方面的編譯設(shè)備是一種將源程序翻譯為用于處理器的機(jī)器語言程序的編譯設(shè)備,該處理器包括多個(gè)執(zhí)行單元,它們能夠并行執(zhí)行指令,以及多個(gè)指令發(fā)出單元,它們發(fā)出由多個(gè)執(zhí)行單元分別執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,通過安排指令優(yōu)化中間碼,從而僅使指定數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。優(yōu)選地,源程序包括單元數(shù)量指定信息,其指定處理器使用的指令發(fā)出單元的數(shù)量,以及優(yōu)化單元,通過安排指令優(yōu)化中間碼,從而僅使由單元數(shù)量指定信息所指定數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
因此,根據(jù)由數(shù)量指定信息指定的指令,該優(yōu)化單元能夠產(chǎn)生不發(fā)出指令的指令發(fā)出單元,并且停止向該指令發(fā)出單元提供電源。因此,產(chǎn)生能夠由處理器以低功耗執(zhí)行的指令序列。
更優(yōu)選地,上述編譯設(shè)備進(jìn)一步包括接受單元,用于接受處理器使用的指令發(fā)出單元的數(shù)量,其中優(yōu)化單元通過安排指令優(yōu)化中間碼,從而僅使由接受單元接受的數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
因此,可以僅使由接受單元接受的數(shù)量的指令發(fā)出單元工作,并且停止對其它指令發(fā)出單元提供電源。因此,產(chǎn)生能夠由處理器以低功耗執(zhí)行的指令序列。
應(yīng)當(dāng)注意,本發(fā)明不僅可以被實(shí)現(xiàn)為如上所述的編譯器,也可以被實(shí)現(xiàn)為在該編譯設(shè)備中包括的單元執(zhí)行的步驟的編譯方法,以及實(shí)現(xiàn)為用于該特性編譯器的程序或者計(jì)算機(jī)可讀記錄介質(zhì)。無須說明,該程序和數(shù)據(jù)文件能夠通過記錄介質(zhì)(如CD-ROM)、以及傳輸介質(zhì)(如因特網(wǎng))廣泛分發(fā)。
從以上說明中顯而易見,根據(jù)本發(fā)明的編譯設(shè)備抑制在處理器的指令寄存器中保存的值的位變化,從而產(chǎn)生能夠由處理器以低功耗執(zhí)行的指令序列。
同樣,對一個(gè)寄存器進(jìn)行重復(fù)訪問,并使用于選擇寄存器的控制信號的改變變小,從而產(chǎn)生能夠由處理器以低功耗執(zhí)行的指令序列。
同樣,由于使用同樣組成部分的指令能夠連續(xù)在某些周期的同一時(shí)段中被執(zhí)行,產(chǎn)生能夠由處理器以低功耗執(zhí)行的指令序列。
此外,由于可以停止向空閑時(shí)段提供電源,產(chǎn)生能夠由處理器以低功耗執(zhí)行的指令序列。
如上所述,根據(jù)本發(fā)明的編譯設(shè)備允許具有并行處理能力的處理器以低功耗運(yùn)行。尤其是,可以產(chǎn)生適合于需要低功耗運(yùn)行的設(shè)備使用的處理器的指令序列(機(jī)器語言程序),諸如移動信息處理設(shè)備(如移動電話、PDA或者類似設(shè)備),因此本發(fā)明的實(shí)際價(jià)值非常高。
關(guān)于本申請的技術(shù)背景的進(jìn)一步信息,參見2003年1月28日提出的日本專利申請No.2003-019365,將其結(jié)合在此以供參考。
附圖簡述從下面結(jié)合示出本發(fā)明的具體實(shí)施例的附圖進(jìn)行描述,使本發(fā)明的這些和其它目的、優(yōu)點(diǎn)和特征將變得明顯。在圖中

圖1A-圖1D表示本發(fā)明實(shí)施例中由處理器解碼和執(zhí)行的指令的結(jié)構(gòu)的示意圖;圖2表示本發(fā)明實(shí)施例中處理器的示意結(jié)構(gòu)框圖;圖3是表示分組的例子的圖;圖4(a)和圖4(b)是用于說明包括在分組中的并行執(zhí)邊界信息的示意圖;圖5A-5C是表示執(zhí)行指令的單元的實(shí)例的示意圖,這些指令基于分組的并行執(zhí)行邊界信息創(chuàng)建并且以并行方式執(zhí)行;圖6表示算術(shù)和邏輯/比較操作單元的示意結(jié)構(gòu)框圖;圖7表示桶形移位器的示意結(jié)構(gòu)框圖;圖8表示除法器的示意結(jié)構(gòu)框圖;
圖9表示乘法/乘積求和操作單元的示意結(jié)構(gòu)框圖;圖10是表示當(dāng)處理器執(zhí)行指令時(shí)執(zhí)行的每一個(gè)流水線操作的時(shí)序圖;圖11是表示由處理器執(zhí)行的指令、處理的細(xì)節(jié)和指令的位模式的示意圖;圖12是表示根據(jù)當(dāng)前實(shí)施例的編譯器結(jié)構(gòu)的功能框圖;圖13是表示指令調(diào)度單元操作的流程圖;圖14A和圖14B是表示相關(guān)性圖的實(shí)例的示意圖;圖15是表示指令調(diào)度結(jié)果的實(shí)例的示意圖;圖16是表示圖13中所示的最佳指令提取處理的操作的流程圖;圖17A和圖17B是用于說明如何計(jì)算操作碼中位模式之間漢明距離的示意圖;圖18A和圖18B是用于說明如何計(jì)算具有不同位長的操作碼之間的漢明距離的示意圖;圖19是表示周期內(nèi)置換處理單元的操作的流程圖;圖20A-圖20F是表示指令序列的六種模式的實(shí)例的示意圖;圖21是表示被安排指令的實(shí)例的圖;圖22A-圖22F是用于說明創(chuàng)建指令序列的處理的示意圖(圖19中的S61);圖23是說明計(jì)算操作碼之間漢明距離的處理的示意圖(圖19中的S64);圖24表示寄存器分配單元的操作的流程圖;圖25表示變量作為分配對象的生存期的示意圖;圖26表示基于圖25中的實(shí)例創(chuàng)建的變量的沖突圖的示意圖;圖27A-圖27C是表示在指令調(diào)度過程中獲得的結(jié)果的示意圖;圖28表示指令再調(diào)度單元的操作的流程圖;圖29表示圖28中最佳指令提取過程的操作的流程圖;圖30A和圖30B是用于說明指定安排候選指令的處理的示意圖(圖29中的S152);圖31A和圖31B是用于說明指定安排候選指令的處理的示意圖(圖29中的S156);圖32A和圖32B是用于說明指定安排候選指令的處理的示意圖(圖29中的S160);圖33是表示時(shí)段停止/恢復(fù)指令產(chǎn)生單元的操作的流程圖;圖34是表示其中安排指令的調(diào)度結(jié)果的實(shí)例的示意圖;圖35是表示調(diào)度結(jié)果的示例的示意圖,其中寫入指令作為僅連續(xù)使用一個(gè)指定時(shí)段的情況下的處理;圖36是表示調(diào)度結(jié)果的示例的示意圖,其中寫入指令作為僅連續(xù)使用兩個(gè)指定時(shí)段的情況下的處理;圖37(a)至圖37(d)是表示程序狀態(tài)寄存器的實(shí)例的示意圖;圖38(a)至圖38(h)是表示程序狀態(tài)寄存器的另一個(gè)實(shí)例的示意圖;圖39是表示圖28中所示的最佳指令提取過程的其它操作的流程圖;圖40A和圖40B是用于說明指定一個(gè)安排候選指令的處理的示意圖(圖39中的S212);圖41是表示周期內(nèi)置換處理單元237的操作的第一變型的流程圖;圖42是用于說明計(jì)算指令之間的漢明距離的處理的示意圖(圖41中的S222);圖43是表示周期內(nèi)置換處理單元237的操作的第二變型的流程圖;圖44是用于說明計(jì)算寄存器字段之間的漢明距離的處理的示意圖(圖43中的S232);圖45是表示周期內(nèi)置換處理單元237的操作的第三變型的流程圖;圖46表示被安排指令的實(shí)例的示意圖;圖47A-圖47F是用于說明創(chuàng)建指令序列的處理的示意圖(圖45中的S61);圖48是用于說明計(jì)算寄存器字段的數(shù)目的處理的示意圖(圖45中的S242);圖49是表示周期內(nèi)置換處理單元237的操作的第四變型的流程圖。
優(yōu)選實(shí)施例的描述以下將參考附圖詳細(xì)描述根據(jù)本發(fā)明的編譯器的實(shí)施例。
當(dāng)前實(shí)施例的編譯器為交叉編譯器,用于將用高級語言(如C/C++語言)描述的源程序翻譯為能夠由指定處理器(目標(biāo))執(zhí)行的機(jī)器語言,并且具有降低處理器功耗的特點(diǎn)。
(處理器)首先,將參考圖1A-圖11,說明由本發(fā)明實(shí)施例中的編譯器實(shí)現(xiàn)的處理器的實(shí)例。
具有的可執(zhí)行指令的并行性高于微計(jì)算機(jī)的流水線系統(tǒng)被用于由當(dāng)前實(shí)施例中的編譯器實(shí)現(xiàn)的處理器,從而并行執(zhí)行多個(gè)指令。
圖1A-圖1D是表示當(dāng)前實(shí)施例中由處理器解碼并且執(zhí)行的指令的結(jié)構(gòu)示意圖。如圖1A-圖1D所示,由處理器執(zhí)行的每一條指令具有32位的固定長度。每一條指令的第0位表示并行執(zhí)行邊界信息。當(dāng)并行執(zhí)行邊界信息為“1”時(shí),在指令和其后指令之間存在一個(gè)并行執(zhí)行的邊界。當(dāng)并行執(zhí)行邊界信息為“0”時(shí),則不存在并行執(zhí)行的邊界。下面將描述如何利用并行執(zhí)行邊界信息。
在從每一條指令的指令長度除去并執(zhí)行邊界信息之外的31位中確定操作。具體來說,在“OP1”,“OP2”,“OP3”和“OP4”字段中,指定表示操作類型的操作碼。在寄存器字段“Rs”,“Rs1”和“Rs2”中,指定了作為源操作數(shù)寄存器的寄存器序號。在寄存器字段“Rd”中,指定了作為目的操作數(shù)的寄存器的寄存器序號。在字段“Imm”中,指定了操作的恒定操作數(shù)。在字段“Disp”中,指定了位移。
操作碼的前2位(第30和31位)用于指定操作(一組操作)的類型。下面將描述這兩位的細(xì)節(jié)。
操作碼OP2-OP4是16位長度的數(shù)據(jù),而操作碼OP1是21位長度的數(shù)據(jù)。因此,為方便起見,操作碼OP1的前一半(第16-31位)被稱為操作碼OP1-1,而其第二半(第11-15位)被稱為操作碼OP1-2。
圖2是表示當(dāng)前實(shí)施例中處理器的示意結(jié)構(gòu)框圖。處理器30包括一個(gè)指令存儲器40,用于存儲根據(jù)VLIW(超長指令字)描述的指令組(下面稱做“分組”);指令提供/發(fā)出單元50;解碼單元60;執(zhí)行單元70和數(shù)據(jù)存儲器100。下面將詳細(xì)描述這些單元的每一個(gè)。
圖3是表示分組的一個(gè)實(shí)例的圖。定義一個(gè)分組是指令提取的單元,并且由四條指令組成。如上所述,一條指令為32位長。因此,一個(gè)分組為128(=32×4)位長。
再回到圖2,指令提供/發(fā)出單元50連接到指令存儲器40、解碼單元60和執(zhí)行單元70,并根據(jù)執(zhí)行單元70提供的PC(程序計(jì)數(shù)器)的數(shù)值從指令存儲器40接收分組,并且將3條或更少的指令并行發(fā)出至解碼單元60。
解碼單元60連接到指令提供/發(fā)出單元50和執(zhí)行單元70,并將由指令提供/發(fā)出單元50發(fā)出的指令解碼,且將解碼的指令發(fā)出至執(zhí)行單元70。
執(zhí)行單元70連接到指令提供/發(fā)出單元50、解碼單元60和數(shù)據(jù)存儲器100,并且如果必要,訪問存儲在數(shù)據(jù)存儲器100中的數(shù)據(jù),并且根據(jù)基于由解碼單元60提供的解碼結(jié)果的指令執(zhí)行處理。每次執(zhí)行處理時(shí),執(zhí)行單元70的PC數(shù)值逐一增加。
指令提供/發(fā)出單元50包括指令提取單元52,它連接到指令存儲器40和下面將描述的執(zhí)行單元70中的PC單元,訪問由存儲在PC單元的程序計(jì)數(shù)器表示的指令存儲器40中的地址,并從指令存儲器40接收分組;指令緩沖區(qū)54,連接到指令提取單元52,并且暫時(shí)保存分組;以及指令寄存器單元56,連接到指令緩沖區(qū)54,并且保存每一個(gè)分組中包括的3條或更少的指令。
指令提取單元52和指令存儲器40通過IA(指令地址)總線42和ID(指令數(shù)據(jù))總線44彼此連接。IA總線42為32位寬,而ID總線44為128位寬。通過IA總線42,地址從指令提取單元52提供給指令存儲器40。通過ID總線44,分組從指令存儲器40提供給指令提取單元52。
指令寄存器單元56包括指令寄存器56a-56c,這些指令寄存器分別連接到指令緩沖區(qū)54,并且分別容納一條指令。
解碼單元60包括指令發(fā)出控制單元62,控制指令的發(fā)出,所述指令保存在指令寄存器單元56中的三個(gè)指令寄存器56a-56c中;以及解碼子單元64,連接到指令發(fā)出控制單元62和指令寄存器單元56,在指令發(fā)出控制單元62的控制下,將由指令寄存器單元56提供的指令解碼。
解碼子單元64包括指令解碼器64a-64c,這些指令解碼器分別連接到指令寄存器56a-56c,在一個(gè)周期內(nèi)基本上解碼一條指令,從而輸出控制信號。
執(zhí)行單元70包括執(zhí)行控制單元72,連接到解碼子單元64,并且根據(jù)從解碼子單元64中的三個(gè)指令解碼器64a-64c輸出的控制信號,控制下面所要描述的執(zhí)行單元70的每一個(gè)組成部分;PC單元74,保存接下來將要執(zhí)行的分組的地址;寄存器文件76,該文件由32個(gè)包括R0~R31的32位寄存器構(gòu)成;算術(shù)和邏輯/比較操作單元(AL/C操作單元)78a-78c,執(zhí)行SIMD(單指令多數(shù)據(jù))類型指令的操作;乘法/乘積求和操作單元(M/PS操作單元)80a和80b,這些單元與算術(shù)和邏輯/比較操作單元78a-78c相類似,能夠執(zhí)行SIMD類型的指令,并且計(jì)算65位或更少長度的結(jié)果,而不降低位準(zhǔn)確性。
執(zhí)行單元70進(jìn)一步包括桶形移位器82a-82c,分別執(zhí)行數(shù)據(jù)的算術(shù)移位(求補(bǔ)系統(tǒng)的移位)或者邏輯移位(無符號移位);除法器84;操作數(shù)訪問單元88,連接到數(shù)據(jù)存儲器,并且向存儲器100發(fā)送數(shù)據(jù)和從存儲器100接收數(shù)據(jù);32位寬的數(shù)據(jù)總線90(一條L1總線,一條R1總線,一條L2總線,一條R2總線,一條L3總線和一條R3總線);以及32位寬的數(shù)據(jù)總線92(一條D1總線,一條D2總線和一條D3總線)。
寄存器文件76由32個(gè)包括R0-R31的32位寄存器構(gòu)成。用于向L1總線、R1總線、L2總線、R2總線、L3總線和R3總線輸出數(shù)據(jù)的寄存器文件76中的寄存器,是分別根據(jù)由執(zhí)行控制單元72提供給寄存器文件76的控制信號CL1、CR1、CL2、CR2、CL3和CR3選擇的。通過D1總線、D2總線和D3總線所傳輸?shù)臄?shù)據(jù)被寫入的寄存器,分別根據(jù)由執(zhí)行控制單元72向寄存器文件76提供的控制信號CD1、CD2和CD3進(jìn)行選擇。
算術(shù)和邏輯/比較操作單元78a的兩個(gè)輸入端口分別連接到L1總線和R1總線,它的輸出端口連接到D1總線。算術(shù)和邏輯/比較操作單元78b的兩個(gè)輸入端口分別連接到L2總線和R2總線,它的輸出端口連接到D2總線。算術(shù)和邏輯/比較操作單元78c的兩個(gè)輸入端口分別連接到L3總線和R3總線,它的輸出端口連接到D3總線。
所述乘法/乘積求和操作單元80a的四個(gè)輸入端,分別連接至L1總線、R1總線、L2總線和R2總線,且該單元的兩個(gè)輸出端分別連接至D1總線和D2總線。所述乘法/乘積求和操作單元80b的四個(gè)輸入端,分別連接至L2總線、R2總線、L3總線和R3總線,且該單元的兩個(gè)輸出端分別連接至D2總線和D3總線。
所述桶形移位器82a的兩個(gè)輸入端,分別連接至L1總線和R1總線,且其輸出端連接至D1總線。所述桶形移位器82b的兩個(gè)輸入端,分別連接至L2總線和R2總線,且其輸出端連接至D2總線。所述桶形移位器82c的兩個(gè)輸入端分別連接至L3總線和R3總線,且其輸出端連接至D3總線。
所述除法器84的兩個(gè)輸入端分別連接至L1總線和R1總線,且其輸出端連接至D1總線。
所述操作數(shù)訪問單元88和所述數(shù)據(jù)存儲器100,通過一OA(操作數(shù)地址)總線96和一OD(操作數(shù)數(shù)據(jù))總線94,彼此相互連接。所述OA總線96和OD總線94分別為32位寬。所述操作數(shù)訪問單元88進(jìn)一步通過OA總線96,指定所述數(shù)據(jù)存儲器100的地址,并通過OD總線94,在該地址進(jìn)行數(shù)據(jù)讀取和寫入。
所述操作數(shù)訪問單元88也連接至D1總線、D2總線、D3總線、L1總線和R1總線,并向這些總線中的任意一個(gè)發(fā)送數(shù)據(jù),和從這些總線中的任意一個(gè)接收數(shù)據(jù)。
處理器30能夠并行執(zhí)行三條指令。如下所述,一組電路能夠執(zhí)行包括并行執(zhí)行的指令分配級、解碼級、執(zhí)行級和寫入級的一組流水線處理,且在當(dāng)前描述中被定義為一個(gè)“時(shí)段”(slot)。因此,所述處理器30具有三個(gè)時(shí)段,第一、第二和第三時(shí)段。指令寄存器56a和指令解碼器64a執(zhí)行的一組處理屬于第一時(shí)段,指令寄存器56b和指令解碼器64b執(zhí)行的一組處理屬于第二時(shí)段,以及的指令寄存器56c和指令解碼器64c執(zhí)行的一組處理屬于第三時(shí)段。
稱為默認(rèn)邏輯的指令被分配給相應(yīng)的時(shí)段,且執(zhí)行指令調(diào)度,以便在可能時(shí)在同一時(shí)段執(zhí)行同一指令。例如,關(guān)于存儲器訪問的指令(默認(rèn)邏輯)被分配給第一時(shí)段,關(guān)于乘法的默認(rèn)邏輯被分配給第二時(shí)段,且其他默認(rèn)邏輯被分配給第三時(shí)段。應(yīng)注意的是,默認(rèn)邏輯與附圖1A-附圖1D所示的一組操作一一對應(yīng)。換句話說,具有前2位為“01”、“10”和“11”的指令,分別是用于第一、第二和第三時(shí)段的默認(rèn)邏輯。
用于第一時(shí)段的默認(rèn)邏輯包括“l(fā)d”(載入指令),“st”(存儲指令)等等。用于第二時(shí)段的默認(rèn)邏輯包括“mul1”,“mul2”(乘法指令)等等。用于第三時(shí)段的默認(rèn)邏輯包括“add1”,“add2”(加法指令),“sub1”,“sub2”(減法指令),“mov1”,“mov2”(寄存器之間傳輸?shù)闹噶?等等。
附圖4是說明一分組所包括的并行執(zhí)行邊界信息的示意圖。假定一個(gè)分組112和一個(gè)分組114以該順序存儲在指令存儲器40中。還假定分組112中的指令2和分組114中的指令5的并行執(zhí)行邊界信息為“1”,且其他指令的并行執(zhí)行邊界信息為“0”。
所述指令提取單元52基于PC單元74中的程序計(jì)數(shù)器的值,按順序讀取分組112和分組114,并將其順序發(fā)出至指令緩沖區(qū)54。所述執(zhí)行單元70并行執(zhí)行所述指令,直到其并行執(zhí)行邊界信息為1的指令。
附圖5A~5C示出了基于一個(gè)分組的并行執(zhí)行邊界信息產(chǎn)生且并行執(zhí)行的指令的執(zhí)行單元的實(shí)例。參見附圖4和附圖5A~5C,通過在其并行執(zhí)行邊界信息為“1”的指令的位置分離分組112和分組114,產(chǎn)生執(zhí)行122~126的單元。因此,從指令緩沖區(qū)54將指令按照執(zhí)行122~126的單元的順序,發(fā)送至指令寄存器單元56。指令發(fā)出控制單元62控制這些指令的發(fā)送。
指令解碼器64a~64c分別將指令寄存器56a~56c中保存的指令的操作碼解碼,并將控制信號輸出給執(zhí)行控制單元72。所述執(zhí)行控制單元72基于指令解碼器64a~64c中的分析結(jié)果,對所述執(zhí)行單元70的各組成部分進(jìn)行不同類型的控制。
以指令“add1 R3,R0”為例。該指令意味著將寄存器R3的值和寄存器R0的值相加,并將相加所得結(jié)果寫入寄存器R0。在此情況下,所述執(zhí)行控制單元72實(shí)行作為示例的以下控制。所述執(zhí)行控制單元72將一控制信號CL1提供給寄存器文件76,以便將寄存器R3中保存的值輸出給所述L1總線。同時(shí),所述執(zhí)行控制單元72將一控制信號CR1提供給所述寄存器文件76,以便將寄存器R0中保存的值輸出給所述R1總線。
執(zhí)行控制單元72進(jìn)一步將一控制信號CD1提供給所述寄存器文件76,以便將通過D1總線獲得的執(zhí)行結(jié)果寫入所述寄存器R0。所述執(zhí)行控制單元72進(jìn)一步控制所述算術(shù)和邏輯/比較操作單元78a,通過L1總線和L2總線接收寄存器R3和R0的值,將它們相加,并通過D1總線將相加的結(jié)果寫入寄存器R0。
附圖6是每一個(gè)算術(shù)和邏輯/比較操作單元78a~78c的示意結(jié)構(gòu)的框圖。參見附圖6和附圖2,算術(shù)和邏輯/比較操作單元78a~78c之每一個(gè)包括通過數(shù)據(jù)總線90連接至寄存器文件76的ALU(算術(shù)和邏輯單元)132;通過ALU 132和數(shù)據(jù)總線92連接至寄存器文件76的飽和處理單元134,并執(zhí)行諸如飽和、最大/最小值檢測和絕對值產(chǎn)生的處理;以及連接至ALU 132的標(biāo)記單元136,檢測溢出并產(chǎn)生狀態(tài)標(biāo)記。
附圖7是桶形移位器82a~82c之每一個(gè)的示意結(jié)構(gòu)的框圖。參見附圖7和附圖2,桶形移位器82a~82c之每一個(gè)包括累加器單元142,具有用于容納32位數(shù)據(jù)的累加器M0和M1;選擇器146,通過數(shù)據(jù)總線90連接至所述累加器M0和寄存器文件76,并接收累加器M0和寄存器的值;選擇器148,通過數(shù)據(jù)總線90連接至累加器M1和所述寄存器文件76,并接收累加器M1和寄存器的值;連接至所述選擇器146的輸出端的高位桶形移位器150;連接至所述選擇器148的輸出端的低位桶形移位器152;以及與所述高位桶形移位器150和所述低位桶形移位器152的輸出端相連接的飽和處理單元154。
所述飽和處理單元154的輸出端通過所述數(shù)據(jù)總線92,連接至所述累加器單元142和所述寄存器文件76。
桶形移位器82a~82c的每一個(gè)通過操作其自身的組成部件,執(zhí)行數(shù)據(jù)的算術(shù)移位(在2級補(bǔ)碼系統(tǒng)內(nèi)移位)或邏輯移位(無符號移位)。其通常接收或輸出32或64位數(shù)據(jù)。通過應(yīng)用存儲在另一寄存器中的移位量或一直接值,指定將要移位的數(shù)據(jù)的移位量,所述要移位的數(shù)據(jù)的移位量存儲在寄存器文件76的寄存器中、或累加器單元142的累加器中。在向左63位和向右63位的范圍之間,執(zhí)行數(shù)據(jù)的算術(shù)或邏輯移位,且數(shù)據(jù)以與輸入位長相同的位長輸出。
桶形移位器82a~82c的每一個(gè)能夠響應(yīng)一條SIMD指令,移位8、16、32、64位數(shù)據(jù)。例如,其能夠并行處理四個(gè)8位數(shù)據(jù)移位。
算術(shù)移位是在2級求補(bǔ)系統(tǒng)中的移位,它通過在加法和減法、2的冪的乘法(諸如2倍,2的2次冪,2的-1次冪,2的-2次冪)等等時(shí),按照十進(jìn)制的小數(shù)點(diǎn)的排列執(zhí)行。
附圖8是除法器84的示意結(jié)構(gòu)的框圖。根據(jù)附圖8和附圖2,所述除法器84包括具有容納32位數(shù)據(jù)的累加器M0和M1的累加器單元162;以及通過所述累加器單元162與數(shù)據(jù)總線90和92,連接至所述寄存器文件76的除法單元164。
由于被除數(shù)為64位且除數(shù)為32位,所述除法器84分別輸出一個(gè)32位的商和一個(gè)32位的余數(shù)。為獲得一個(gè)商和一個(gè)余數(shù),占用了34個(gè)周期。所述除法器84能夠處理所有有符號和無符號的數(shù)據(jù)。然而,為二者共同確定是否用符號標(biāo)記所述被除數(shù)和除數(shù)。所述除法器84進(jìn)一步具有輸出一溢出標(biāo)記和一0除法標(biāo)記的功能。
附圖9是乘法/乘積求和運(yùn)算單元80a和80b的每一個(gè)的示意結(jié)構(gòu)框圖。根據(jù)附圖9和附圖2,乘法/乘積求和運(yùn)算單元80a和80b的每一個(gè)包括具有分別容納64位數(shù)據(jù)的累加器M0和M1的累加器單元172;以及32位乘法器174a和174b,具有分別通過數(shù)據(jù)總線90連接至所述寄存器文件76的兩個(gè)輸入端。
乘法/乘積求和運(yùn)算單元80a和80b的每一個(gè)進(jìn)一步包括64位加法器176a,該加法器與所述乘法器174a的輸出和所述累加器單元172相連接;64位加法器176b,該加法器與所述乘法器174b的輸出和所述累加器單元172相連接;64位加法器176c,該加法器與所述64位加法器176a的輸出和64位加法器176b的輸出相連接;選擇器178,該選擇器與所述64位加法器176b的輸出和64位加法器1 76c的輸出相連接;以及飽和處理單元180,該單元通過數(shù)據(jù)總線92與所述加法器176a的輸出、所述選擇器178的輸出、所述累加器單元172和所述寄存器文件76相連接。
乘法/乘積求和運(yùn)算單元80a和80b的每一個(gè)執(zhí)行如下乘法和乘積求和運(yùn)算*32×32位有符號數(shù)據(jù)的乘法,乘積和以及乘積差運(yùn)算;*32×32位無符號數(shù)據(jù)的乘法;*并行執(zhí)行兩個(gè)16×16位有符號數(shù)據(jù)的乘法、乘積和以及乘積差運(yùn)算;及*并行執(zhí)行兩個(gè)32×16位有符號數(shù)據(jù)的乘法、乘積和以及乘積差運(yùn)算。
對整數(shù)和定點(diǎn)格式的數(shù)據(jù)執(zhí)行上述運(yùn)算。同時(shí),這些運(yùn)算的結(jié)果被四舍五入并達(dá)到飽和狀態(tài)。
附圖10是當(dāng)上述處理器30執(zhí)行指令時(shí),所執(zhí)行的每一個(gè)流水線操作的時(shí)序圖。根據(jù)附圖2和附圖10,在指令提取級,指令提取單元52在PC單元所容納的程序計(jì)數(shù)器指定的地址訪問所述指令存儲器40,并將分組發(fā)送至指令緩沖區(qū)54。在指令分配級,容納在所述指令緩沖區(qū)54中的指令被分配給指令寄存器56a~56c。在解碼級,在指令發(fā)出控制單元62的控制下,被分配給所述指令寄存器56a~56c的指令分別通過所述指令解碼器64a~64c進(jìn)行解碼。在操作級,所述執(zhí)行控制單元72操作所述執(zhí)行單元70的組成部分,從而基于在指令解碼器64a~64c中解碼的結(jié)果,執(zhí)行不同操作。在寫入級,所述操作結(jié)果被存儲在數(shù)據(jù)存儲器100或寄存器文件76中。根據(jù)這些處理,能夠并行執(zhí)行3個(gè)或更少的流水線處理。
附圖11是示出通過處理器30執(zhí)行的指令、處理的細(xì)節(jié)和指令的位模式的示圖。指令“Id Rs,Rd”表示將數(shù)據(jù)存儲器100中的數(shù)據(jù)載入至寄存器Rd中的處理,如附圖1A~附圖1D中所示,其中所述數(shù)據(jù)由在指令的Rs字段中指定的一寄存器(以下稱為“寄存器Rs”)尋址。所述位模式如附圖11中所示。
在附圖11中所示出的每一個(gè)位模式中,前2位(第30和第31位)用于指定一組操作,且第0位用于指定并行執(zhí)行邊界信息。前2位為“01”的操作涉及存儲器訪問。前2位為“10”的操作涉及乘法。前2位為“11”的操作涉及其他處理。
指令“st Rs,Rd”表示數(shù)據(jù)存儲器100中,將存儲器Rs的值存儲至一通過寄存器Rd尋址的位置中的處理。
指令“mul1 Rs,Rd”表示將寄存器Rs的值和寄存器Rd的值的乘積寫入寄存器Rd的處理。指令“mul2 Rs1,Rs2,Rd”表示將寄存器Rs1的值和寄存器Rs2的值的乘積寫入寄存器Rd的處理。
指令“add1 Rs,Rd”表示將寄存器Rs的值和寄存器Rd的值的和寫入寄存器Rd的處理。指令“add2 Rs1,Rs2,Rd”表示將寄存器Rs1的值和寄存器Rs2的值的和寫入寄存器Rd的處理。
指令“sub1 Rs,Rd”表示將寄存器Rs的值和寄存器Rd的值的差寫入寄存器Rd的處理。指令“sub2 Rs1,Rs2,Rd”表示將寄存器Rs1的值和寄存器Rs2的值的差寫入寄存器Rd的處理。
指令“mov1 Rs,Rd”表示將寄存器Rs的值寫入寄存器Rd的處理。指令“mov2 Imm,Rd”表示將Imm字段中的值寫入寄存器Rd的處理。
指令“div Rs,rd2”表示將以寄存器Rs的值除以寄存器Rd的值得到的商寫入寄存器Rd的處理。指令“mod Rs,Rd”表示將以寄存器Rs的值除以寄存器Rd的值得到的余數(shù)寫入寄存器Rd的處理。
(編譯器)接下來,將參照圖12-38,說明當(dāng)前實(shí)施例中以上述處理器30作為目標(biāo)的編譯器的實(shí)例。
(編譯器的整體結(jié)構(gòu))附圖12是當(dāng)前實(shí)施例中編譯器200的結(jié)構(gòu)的功能性框圖。該編譯器200是一交叉編譯器,所述編譯器將以高級語言(諸如C/C++語言)描述的源程序202翻譯為一機(jī)器語言程序204,其目標(biāo)處理器為上述處理器30。所述編譯器200通過在一計(jì)算機(jī)(諸如個(gè)人計(jì)算機(jī))上執(zhí)行的程序來實(shí)現(xiàn),且大致由一語法分析單元2 1 0、一中間碼轉(zhuǎn)換單元220、一優(yōu)化單元230和一代碼產(chǎn)生單元240構(gòu)成。
所述語法分析單元210是一預(yù)處理單元,該單元提取保留字(關(guān)鍵字)等,從而實(shí)現(xiàn)源程序202的詞法分析(包含將包括的頭文件),它是編譯的目標(biāo),具有普通編譯器的分析功能,所述中間碼轉(zhuǎn)換單元220是一處理單元,該單元連接至所述語法分析單元210,并根據(jù)一定的規(guī)則,將從語法分析單元210通過的源程序202中的每一語句轉(zhuǎn)換為中間碼。這里,中間碼一般是以函數(shù)調(diào)用的格式表現(xiàn)的編碼(例如,表示“+(int a,int b)”;表示“將一整數(shù)a與一整數(shù)b相加”的編碼)。
優(yōu)化單元230包括一指令調(diào)度單元232,該單元連接至所述中間碼轉(zhuǎn)換單元220,并把注意力集中在包括在由中間碼轉(zhuǎn)換單元220輸出的中間碼內(nèi)包括的指令的操作碼,安排這些指令以便降低處理器30的功耗,而不改變指令之間的相關(guān)性;以及一寄存器分配單元234,該單元連接至所述指令調(diào)度單元232,并把注意力集中在由指令調(diào)度單元232執(zhí)行的調(diào)度的結(jié)果中包括的指令的寄存器字段,分配寄存器以便降低所述處理器30的功耗。
所述優(yōu)化單元230進(jìn)一步包括一指令再調(diào)度單元236,該單元連接至寄存器分配單元234,并把注意力集中在分配寄存器的調(diào)度結(jié)果內(nèi)包括的指令的位模式,置換指令以便降低處理器30的功耗,而不改變指令之間的相關(guān)性;以及一時(shí)段停止/恢復(fù)指令產(chǎn)生單元238,該單元連接至所述指令再調(diào)度單元236,且基于指令再調(diào)度單元236中的調(diào)度結(jié)果,檢測停止某些周期或更多周期的間隔的一時(shí)段,并插入指令,以在所述間隔之前和之后停止和恢復(fù)所述時(shí)段。
所述優(yōu)化單元230進(jìn)一步包括一并行執(zhí)行邊界信息設(shè)置單元239,該單元與所述時(shí)段停止/恢復(fù)指令產(chǎn)生單元238相連接,且基于調(diào)度結(jié)果,設(shè)置關(guān)于所安排指令的并行執(zhí)行邊界信息;以及一周期內(nèi)置換處理單元237,該單元連接至所述指令調(diào)度單元232、所述寄存器分配單元234和所述指令再調(diào)度單元236,并置換每一周期的調(diào)度結(jié)果中的指令,以便降低功耗。
應(yīng)注意的是,下面所要描述的優(yōu)化單元230中的處理被執(zhí)行在每一個(gè)基本模塊的單元中。一基本模塊是一程序的單元,諸如一系列等式和賦值語句,其中在其中部并未出現(xiàn)向外的分支,也沒有從外部至其中部的分支。
一代碼產(chǎn)生單元240連接至優(yōu)化單元230中的并行執(zhí)行邊界信息設(shè)置單元239,并根據(jù)代碼產(chǎn)生單元240本身中保存的轉(zhuǎn)換表或其他類似的表格,將從所述并行執(zhí)行邊界信息設(shè)置單元239輸出的所有中間碼置換為機(jī)器語言指令,以便產(chǎn)生一機(jī)器語言程序204。
接下來,將使用具體實(shí)例,說明具有如上所述結(jié)構(gòu)的所述編譯器200的特有操作。
(指令調(diào)度單元)附圖13是指令調(diào)度單元232的操作的流程圖。所述指令調(diào)度單元232并不執(zhí)行寄存器的調(diào)度,而是執(zhí)行假定存在無窮多的寄存器時(shí)的處理。因此,在以下描述中假設(shè)“Vr”(虛擬寄存器),諸如“Vr0”和“Vr1”,被附加至將由指令調(diào)度單元232調(diào)度的寄存器的頭部。
所述指令調(diào)度單元232基于在中間碼轉(zhuǎn)換單元220中產(chǎn)生的中間碼創(chuàng)建一指令相關(guān)性圖(步驟S2)(“步驟”在以下被忽略)。相關(guān)性圖是表示指令之間的相關(guān)性的圖,即其中將一個(gè)節(jié)點(diǎn)分配給每一指令的、且相互相關(guān)的指令通過邊緣連接的有向圖。相關(guān)性圖是一個(gè)眾所周知的技術(shù),所以將不再重復(fù)對其的詳細(xì)說明。例如,在此創(chuàng)建了附圖14A中示出的包括三個(gè)有向圖的相關(guān)性圖。
所述指令調(diào)度單元232在相關(guān)性圖中選擇可執(zhí)行的指令(節(jié)點(diǎn)),并調(diào)度用于第一周期的指令,以便與每一時(shí)段的默認(rèn)邏輯相匹配(S4)。例如,在附圖14A的相關(guān)性圖中,假定相對應(yīng)于節(jié)點(diǎn)N1、N6、N7、N11和N12的指令能夠被調(diào)度,且其中,所述節(jié)點(diǎn)N1對應(yīng)于關(guān)于存儲器訪問的指令,所述節(jié)點(diǎn)N11對應(yīng)于乘法指令,且所述節(jié)點(diǎn)N對應(yīng)于移位指令。在這種情況下,所述節(jié)點(diǎn)N1、N11和N6分別位于第一周期的第一~第三時(shí)段。將標(biāo)記附加至已安排的節(jié)點(diǎn),因而,如附圖14B中所示更新相關(guān)性圖。在第一周期的指令調(diào)度之后(S4),獲得如附圖15所示的指令調(diào)度的結(jié)果。
所述指令調(diào)度單元232根據(jù)所述相關(guān)性圖,產(chǎn)生安排候選指令集(S8)。在附圖14B的實(shí)例中,對應(yīng)于所述節(jié)點(diǎn)N2、N7、N8和N12的指令是安排候選指令集。
所述指令調(diào)度單元232根據(jù)以下所要描述的算法,從所述安排候選指令集中提取一個(gè)最佳指令(S12)。
所述指令調(diào)度單元232判斷所提取的最佳指令實(shí)際上是否能夠被安排(S14)。其是否能夠被安排,基于包括為目標(biāo)周期安排的最佳指令的指令的數(shù)目,是否不多于為在前周期安排的指令的數(shù)目來進(jìn)行判斷。因此,相同數(shù)目的指令被連續(xù)安排用于隨后的周期。
當(dāng)判斷所述最佳指令能夠被安排時(shí)(在S14中為“是”),所述指令調(diào)度單元232臨時(shí)安排所述最佳指令,并將其從安排候選指令集中刪除(S16)。然后,所述指令調(diào)度單元232以與上述判斷相同的方式(S14),判斷是否能夠在時(shí)段內(nèi)安排另一指令(S18)。當(dāng)它判斷另一指令能夠被安排時(shí)(在S18中為“是”),所述指令調(diào)度單元232根據(jù)所述相關(guān)性圖,將一個(gè)新的安排候選指令(如果有的話)添加至所述安排候選指令集(S20)。重復(fù)用于臨時(shí)為一目標(biāo)周期安排指令的上述處理,直到所有的安排候選指令均已被安排(S10~S22)。
當(dāng)判斷在臨時(shí)安排最佳指令的處理(S16)之后、沒有更多的指令可在目標(biāo)周期內(nèi)安排時(shí)(在S18中為“否”),通過所述指令調(diào)度單元232執(zhí)行的處理,從臨時(shí)指令安排處理的循環(huán)中退出(S10~S22)。
在執(zhí)行所述臨時(shí)指令安排處理(S10~S22)之后,所述指令調(diào)度單元232明確安排所述臨時(shí)安排的指令,并結(jié)束所述安排候選指令集的調(diào)度(S24)。然后,將表示“已安排”的標(biāo)記添加給相關(guān)性圖中對應(yīng)于已安排指令的節(jié)點(diǎn),以更新所述相關(guān)性圖(S26)。
所述指令調(diào)度單元232判斷是否相同數(shù)目的指令在預(yù)定數(shù)目的周期內(nèi)被連續(xù)安排(S27)。當(dāng)判斷相同數(shù)目的指令被連續(xù)安排在預(yù)定數(shù)目的周期內(nèi)時(shí)(例如,當(dāng)兩個(gè)指令在20個(gè)或更多的周期內(nèi)被連續(xù)安排時(shí),或當(dāng)一個(gè)指令在10個(gè)或更多的周期內(nèi)被連續(xù)安排時(shí))(在S27中為“是”),所述指令調(diào)度單元232將能夠在一個(gè)周期內(nèi)被安排的指令的最大數(shù)目(以下稱為“可安排指令的最大數(shù)目)設(shè)置為“3”(S28),以使在之后的周期中,盡可能在一個(gè)周期中安排三個(gè)指令。重復(fù)上述處理,直到所有的指令都被安排(S6~S29)。
附圖16是附圖13中所述最佳指令提取處理(S12)的操作的流程圖。
所述指令調(diào)度單元232計(jì)算每一個(gè)安排候選指令和每一個(gè)在目標(biāo)周期之前的周期內(nèi)已被安排的指令的操作碼的位模式之間的漢明距離(S42)。
例如,在附圖14B中,對應(yīng)于節(jié)點(diǎn)N2、N7、N8和N12的指令,能夠被安排在第二周期的調(diào)度的開始。對應(yīng)于節(jié)點(diǎn)N1、N6和N11的指令在第一周期內(nèi)已被安排。因此,所述指令調(diào)度單元232計(jì)算對應(yīng)于節(jié)點(diǎn)N1、N6和N11的指令與對應(yīng)于節(jié)點(diǎn)N2、N7、N8和N12的指令的所有組合的操作碼的位模式之間的漢明距離。
附圖17A和附圖17B是說明如何計(jì)算操作碼的位模式之間的漢明距離的示意圖。假定指令“Id Vr11,Vr12”已安排在第N個(gè)周期,且第(N+1)個(gè)周期的安排候選指令為“st Vr13,Vr14”和“add1 Vr13,Vr14”。如果根據(jù)附圖17A,比較操作碼“l(fā)d”和“st”,則第12位、第16位、第17位、第24位和第25位的位模式均互不相同。因此,漢明距離為5。如果參見附圖17B以與附圖17A所示相同方式,比較操作碼“l(fā)d”和“add1”,則第16位、第17位、第18位、第20位、第25位、第26位、第28位和第31位的位模式均互不相同。因此,漢明距離為8。
附圖18A和附圖18B是說明如何計(jì)算具有不同位長的操作碼的位模式之間的漢明距離的示意圖。假定指令“l(fā)d Vr11,Vr12”已安排在第N個(gè)周期,且第(N+1)個(gè)周期的安排候選指令為“mul2 Vr13,Vr14,Vr15”和“stVr13,Vr14”。如果操作碼的位長與附圖18A中的操作碼“l(fā)d”和“mul2”一樣是不同的,則計(jì)算所述操作碼的重疊部分的位模式之間的漢明距離。因此,基于所述操作碼的第16~31位的值,計(jì)算漢明距離。在操作碼“l(fā)d”和“mul2”之間,第16位、第18位、第19位、第22位、第23位、第25位、第26位、第27位、第28位、第30位和第31位的位模式均互不相同。因此,漢明距離為11。對于其他安排候選指令“st Vr13,Vr14”的漢明距離是基于附圖18B中的操作碼的第16~31位的值來計(jì)算,以便確保與附圖18A中實(shí)例的一致性。在操作碼“l(fā)d”和“st”之間,第16位、第17位、第24位和第25位的位模式均互不相同。因此,漢明距離為4。
返回附圖16,所述指令調(diào)度單元232指定具有最小漢明距離的安排候選指令(S43)。在附圖17A~附圖18B的實(shí)例中,指定指令“st Vr13,Vr14”。
指令調(diào)度單元232判斷是否存在兩個(gè)或更多個(gè)具有最小漢明距離的安排候選指令(S44)。當(dāng)存在一個(gè)具有最小漢明距離的安排候選指令時(shí)(在S44中為“否”),則指定該指令作為最佳指令(S56)。
當(dāng)存在兩個(gè)或更多個(gè)具有最小漢明距離的安排候選指令時(shí)(在S44中為“是”),所述指令調(diào)度單元232判斷所述安排候選指令的任意一個(gè)是否與其中未安排指令的空閑時(shí)段的默認(rèn)邏輯相匹配(S46)。
如果沒有安排候選指令與所述默認(rèn)邏輯相匹配(在S46中為“否”),則選擇具有最小漢明距離的兩個(gè)或更多個(gè)安排候選指令中的任意一個(gè),作為一最佳指令(S54)。
如果任意一個(gè)安排候選指令與默認(rèn)邏輯相匹配,且這樣的指令的數(shù)目為1(S46中為“是”且S48中為“否”),則指定這個(gè)安排候選指令作為最佳指令(S52)。
如果任意一個(gè)安排候選指令與默認(rèn)邏輯相匹配,且這樣的指令的數(shù)目為2或更多(S46中為“是”且S48中為“是”),則選擇與所述默認(rèn)邏輯相匹配的兩個(gè)或更多個(gè)安排候選指令中的任意一4,作為最佳指令(S50)。
(周期內(nèi)置換處理單元)附圖19是周期內(nèi)置換處理單元237的操作的流程圖。所述周期內(nèi)置換處理單元237基于指令調(diào)度單元232中的調(diào)度結(jié)果,調(diào)整每一個(gè)周期內(nèi)的指令的安排。
所述周期內(nèi)置換處理單元237置換調(diào)度結(jié)果中從第二個(gè)到最后一個(gè)周期中的目標(biāo)周期的三個(gè)指令,以便產(chǎn)生指令序列的六個(gè)模式(S61)。附圖20A~附圖20F是如上所述產(chǎn)生的指令序列的六個(gè)模式的示例的示意圖。
所述周期內(nèi)置換處理單元237執(zhí)行計(jì)算漢明距離的和的處理,用于下面將描述的指令序列的六個(gè)模式中的每一個(gè)(S62-S67)。所述周期內(nèi)置換處理單元237從指令序列的六個(gè)模式所計(jì)算的漢明距離的和中,選擇具有漢明距離的最小和的指令序列,并置換這些指令,以便實(shí)現(xiàn)與所選擇指令序列相同的安排(S68)。對第二個(gè)到最后一個(gè)周期重復(fù)上述處理(S60~S69)。
接下來,將說明對于計(jì)算指令序列的六個(gè)模式中每一個(gè)的漢明距離的和的處理(S62~S67)。對于每一指令序列的每一時(shí)段,所述周期內(nèi)置換處理單元237計(jì)算目標(biāo)周期的指令和在前周期的指令的操作碼的位模式之間的漢明距離(S64)。所述周期內(nèi)置換處理單元237對三個(gè)時(shí)段內(nèi)的所有指令(S63~S65),執(zhí)行計(jì)算漢明距離的處理(S64),并計(jì)算在上述三個(gè)時(shí)段內(nèi)的指令之間的漢明距離的和(S66)。對所有指令序列的六個(gè)模式,執(zhí)行上述處理(S62~S67)。
附圖21是已安排指令的實(shí)例的示意圖。假定指令“l(fā)d Vr10,Vr11”,“sub1 Vr12,Vr13”和“add1 Vr14,Vr15”分別作為在第一、第二和第三時(shí)段中執(zhí)行的指令,安排給第N個(gè)周期。還假定指令“st Vr16,Vr17”,“mul Vr18,Vr19”和“mod Vr20,Vr21”分別作為將在第一、第二和第三時(shí)段中執(zhí)行的指令,安排給第N+1個(gè)周期。
附圖22A~附圖22F是說明指令序列產(chǎn)生處理的示意圖(S61)。例如,應(yīng)用附圖21中所示的安排給第N+1個(gè)周期的三個(gè)指令,產(chǎn)生在附圖22A~附圖22F中所示的六個(gè)指令序列。
附圖23是說明計(jì)算操作碼之間的漢明距離的處理的示意圖(S64)。例如,當(dāng)計(jì)算附圖21中第N個(gè)周期的指令序列和附圖22C中第N+1個(gè)周期的指令序列的操作碼之間的相應(yīng)時(shí)段的漢明距離時(shí),第一、第二和第三時(shí)段中的漢明距離分別為10、9和5。
因此,在附圖23的實(shí)例中,漢明距離的和為24。在計(jì)算漢明距離和的處理中(S66),以與上述方式相同的方式,計(jì)算附圖21中第N個(gè)周期的指令序列和附圖22A~附圖22F中第N+1個(gè)周期的指令序列之間的漢明距離的和,且這些值分別為14、16、24、22、24和20。在選擇一指令序列的處理中(S68),從指令序列的六個(gè)模式中,選擇如附圖22A所示的具有漢明距離的最小和的指令序列。
(寄存器分配單元)附圖24是寄存器分配單元234的操作的流程圖。所述寄存器分配單元234基于在指令調(diào)度單元232中和所述周期內(nèi)置換處理單元237的調(diào)度結(jié)果,實(shí)際分配寄存器。
所述寄存器分配單元234從源程序202中提取分配對象(變量),且計(jì)算每一分配對象的生存期和優(yōu)先級(S72)。一個(gè)生存期是從程序中一個(gè)變量的定義到參照該變量的結(jié)束的一個(gè)時(shí)間段。因此,一個(gè)變量可以具有多個(gè)生存期?;谝粋€(gè)分配對象的生存期長度以及參照該對象的頻率,確定其優(yōu)先級。其詳細(xì)說明在此將不再重復(fù),因?yàn)樗⒉皇潜景l(fā)明的必要部分。
所述寄存器分配單元234基于分配對象,產(chǎn)生一沖突圖(S74)。該沖突圖是表示在不能分配同樣的寄存器的分配對象的狀態(tài)的圖。接下來,將說明如何產(chǎn)生一沖突圖。
附圖25示出是分配對象的變量的生存期的示意圖。該例中,三個(gè)變量I,J和K是分配對象。
在步驟T1中定義變量I,且最終在步驟T5中涉及該變量I。在步驟T8中再次定義變量I,且最終在步驟T10中涉及該變量。因此,變量I具有再個(gè)生存期。該變量I在前一個(gè)生存期中,被定義為變量I1,且在后一個(gè)生存期中,被定義為變量I2。在步驟T2中定義變量J,且最終在步驟T4中涉及該變量。
在步驟T3中定義變量K,且最終在步驟T6中涉及該變量。在步驟T7中再次定義變量K,且最終在步驟T9中涉及該變量。因此,所述變量K具有與變量I類似的兩個(gè)生存期。該變量K在前一個(gè)生存期中被定義為變量K1,且在后一個(gè)生存期中被定義為變量K2。
所述變量I1、I2、J、K1和K2的生存期具有以下重疊區(qū)。所述變量I1和J的生存期在步驟T2~T4中重疊。變量J和K1的生存期在步驟T3~T4中重疊。變量I1和K1的生存期在步驟T3~T5中重疊。變量I2和K2的生存期在步驟T8~T9中重疊。如果變量的生存期重疊,則它們將不能分配給同一寄存器。因此,在沖突圖中,作為分配對象的變量是節(jié)點(diǎn),其生存期重疊的變量通過邊緣連接。
附圖26是基于附圖25中實(shí)例產(chǎn)生的變量的沖突圖的示意圖。節(jié)點(diǎn)I1、K1和J通過邊緣彼此連接。在變量I1、K1和J的生存期中存在重疊,因而發(fā)現(xiàn)同一寄存器不能分配給這三個(gè)變量。節(jié)點(diǎn)I2和K2以同樣的方式通過一條邊來連接。因而,發(fā)現(xiàn)同一寄存器不能分配給變量I2和K2。
然而,在未通過一條邊連接的節(jié)點(diǎn)之間不存在相關(guān)性。例如,節(jié)點(diǎn)J和K2未通過一條邊連接。因此,在變量J和K2之間不存在重疊區(qū),且因而發(fā)現(xiàn)不能將同一寄存器分配給它們。
返回附圖24,所述寄存器分配單元234在沒有給其分配寄存器的分配對象中,選擇具有最高優(yōu)先級的分配對象(S80)。所述指令調(diào)度單元232判斷一個(gè)寄存器是否能夠被分配給分配對象(S82),其中該寄存器在涉及分配對象的指令之前的同一時(shí)段內(nèi)將執(zhí)行的指令的同一字段中,具有與寄存器數(shù)目相同的數(shù)目。該判斷是參照上述沖突圖做出的。
附圖27A~附圖27C是表示在指令調(diào)度處理中獲得的結(jié)果的示意圖。例如,參照附圖27A,假定在N+1周期的第一時(shí)段中,當(dāng)前分配對象被分配給一源操作數(shù)(寄存器Vr5)。如上所述,寄存器Vr5是臨時(shí)設(shè)置的。因此,在判斷寄存器可分配性的處理中(S82),判斷一分配對象是否能夠在第N周期分配給同一字段中所使用的寄存器(在該例中為寄存器R0)。附圖27B示出了在將寄存器R0分配給Vr5的情況下指令的位模式。該圖也示出了由于在連續(xù)的周期中,通過訪問同一寄存器的寄存器特性,從而可以降低功耗。
當(dāng)判斷具有相同數(shù)目的寄存器能夠被分配時(shí)(在S82中為“是”),所述寄存器分配單元234將具有相同序號的上述寄存器分配給分配對象(S84)。當(dāng)判斷具有相同序號的寄存器不能被分配時(shí)(在S82中為“否”),所述寄存器分配單元234從可分配寄存器的寄存器序號(二進(jìn)制表示)中指定若干個(gè)寄存器,這些寄存器具有與在前周期中同一時(shí)段的相同字段中的寄存器序號之間有最小漢明距離的寄存器序號(S86)。附圖27C示出了一個(gè)示例,其中從可分配寄存器中選擇的寄存器R1,寄存器R1具有與寄存器R0的寄存器序號(00000)之間有最小漢明距離的寄存器序號(00001)。
其中當(dāng)僅存在一個(gè)具有最小漢明距離的可分配寄存器時(shí)(在S88中為“否”),該寄存器被分配給分配對象(S92)。當(dāng)存在兩個(gè)或更多個(gè)具有最小漢明距離的可分配寄存器時(shí)(在S88中為“是”),選擇兩個(gè)或更多個(gè)寄存器中的任意一個(gè)并將其分配給分配對象(S90)。重復(fù)上述處理,直到?jīng)]有更多的分配對象為止(S78~S94)。
在寄存器分配單元234中的處理之后,所述周期內(nèi)置換處理單元237基于通過寄存器分配單元234的調(diào)度結(jié)果,調(diào)整每一個(gè)周期中指令的安排。在周期內(nèi)置換處理單元237中所執(zhí)行的處理,與根據(jù)附圖19和附圖20A~附圖20F所說明的處理相同。因此,其詳細(xì)說明在此不再重復(fù)。
(指令再調(diào)度單元)附圖28示出了指令再調(diào)度單元236的操作的流程圖。所述指令再調(diào)度單元236執(zhí)行重新調(diào)度已被調(diào)度的指令的安排結(jié)果的處理,以便根據(jù)指令調(diào)度單元232、寄存器分配單元234和周期內(nèi)置換處理單元237所執(zhí)行的處理,在處理器30中可操作。換句話說,所述指令再調(diào)度單元236重新調(diào)度已由寄存器分配單元234確切分配給寄存器的指令序列。
指令再調(diào)度單元236從調(diào)度結(jié)果中刪除冗余指令。例如,由于指令“mov1R0,R0”是一條冗余指令,因?yàn)樗怯糜趯⒓拇嫫鱎0的內(nèi)容寫入寄存器R0的指令。當(dāng)同一周期第一時(shí)段中一指令為“mov2 4,R1”,且同一周期第二時(shí)段中一指令為“mov2 5,R1”時(shí),它們分別是將4和5寫入寄存器R1的指令。在當(dāng)前實(shí)施例中,在一時(shí)段中數(shù)目較大的指令以較高的優(yōu)先級執(zhí)行。因此,在第一時(shí)段中的指令“mov2 4,R1”是一條冗余指令。
如果刪除一個(gè)冗余指令,則指令之間的相關(guān)性也可改變。因此,所述指令再調(diào)度單元236重構(gòu)一相關(guān)性圖(S114)。所述指令再調(diào)度單元236在所述相關(guān)性圖中選擇可執(zhí)行的指令(節(jié)點(diǎn)),并在第一周期調(diào)度它們,以便匹配每一時(shí)段中的默認(rèn)邏輯(S115)。將表示“已安排”的標(biāo)記添加至所述相關(guān)性圖中對應(yīng)于第一周期的指令的節(jié)點(diǎn)。
指令再調(diào)度單元236參照所述相關(guān)性圖產(chǎn)生一安排候選指令集(S118)。所述指令再調(diào)度單元236根據(jù)下述算法從安排周期指令集中取一條最佳指令(S122)。
指令再調(diào)度單元236判斷所取的最佳指令是否能夠被實(shí)際安排(S124)。該判斷與附圖13的S14中的判斷相同。因此,其詳細(xì)說明在此將不再重復(fù)。
當(dāng)指令再調(diào)度單元236判斷能夠安最佳指令時(shí)(在S124中為“是”),則它臨時(shí)安排該指令,并將其從安排候選指令集中刪除(S126)。然后,所述指令再調(diào)度單元236判斷是否能夠以與安排的上述判斷相同的方式(S124)安排其他指令(S128)。當(dāng)其判斷能夠安排其他指令時(shí)(在S128中為“是”),則其根據(jù)所述相關(guān)性圖來判斷是否存在一條新的安排候選指令,將其添加至該安排候選指令集(如果有的話)(S130)。重復(fù)上述處理,直到不存在更多的安排候選指令為止(S120~S132)。
應(yīng)注意的是,當(dāng)在臨時(shí)安排最佳指令的處理(S126)之后,判斷沒有更多的指令能夠被安排給目標(biāo)周期時(shí)(在S128中為“否”),指令再調(diào)度單元236的處理從臨時(shí)安排最佳指令的處理的循環(huán)中退出(S120~S132)。
在臨時(shí)安排最佳指令的處理之后(S120~S132),所述指令再調(diào)度單元236確切安排所述臨時(shí)安排的指令,并結(jié)束安排候選指令集的調(diào)度(S134)。然后,將表示“已安排”的標(biāo)記添加至對應(yīng)于相關(guān)性圖中已安排指令的節(jié)點(diǎn),以便更新所述相關(guān)性圖(S136)。
指令再調(diào)度單元236判斷相同數(shù)目的指令是否連續(xù)安排給預(yù)定周期(S137)。當(dāng)判斷相同數(shù)目的指令被連續(xù)安排給預(yù)定數(shù)目的周期時(shí)(在S137中為“是”),所述指令再調(diào)度單元236將可安排指令的最大數(shù)目設(shè)置為3(S138),從而盡可能將三條指令安排給一個(gè)周期。重復(fù)上述處理,直到不再留下有未安排的指令(S116~S139)。
附圖29是附圖28中最佳指令提取處理(S122)的操作的流程圖。比較所述安排候選指令中目標(biāo)周期的指令和在前周期的同一時(shí)段中執(zhí)行的指令,所述指令再調(diào)度單元236取得具有相同寄存器數(shù)目的字段的數(shù)目,并指定一條具有同一寄存器數(shù)目的最大數(shù)目的字段的安排候選指令(S152)。
附圖30A和附圖30B是說明指定安排候選指令的處理(S152)的示意圖。假定安排指令“add1 R0,R2”作為第N周期內(nèi)第一時(shí)段中執(zhí)行的一條指令,且存在可被安排給第N+1周期的第一時(shí)段中的指令,如附圖30A中所示“sub1R0,R1”和附圖30B中所示“div R0,R2”。當(dāng)將指令“sub1 R0,R1”安排給附圖30A中所示的安排位置時(shí),具有相同寄存器序號的字段,僅是其中安排寄存器R0的字段(寄存器序號00000)。因此,具有同一寄存器數(shù)目的字段的數(shù)目為1。當(dāng)將指令“div R0,R2”安排給附圖30B中所示的安排位置時(shí),其中分別安排寄存器R0(寄存器序號為000000)和寄存器R2(寄存器序號00010)的兩個(gè)字段具有相同的寄存器數(shù)目。因此,具有相同寄存器序號的字段的數(shù)目為1。
當(dāng)僅存在具有最大數(shù)目的這樣的字段的一個(gè)安排候選指令時(shí)(在S154中為“否”),指定這個(gè)安排候選指令作為一條最佳指令(S174)。
當(dāng)不存在具有最大數(shù)目的這樣的字段的安排候選指令、或存在兩個(gè)或更多個(gè)這樣的指令時(shí)(在S154中為“是”),所述指令再調(diào)度單元236將在前周期同一時(shí)段中將要執(zhí)行的指令與每一條所述安排候選指令進(jìn)行比較,以便獲得上述兩指令的位模式之間具有最小漢明距離的指令(S156)。
附圖31A和附圖31B是說明指定安排候選指令的處理的示意圖(S156)。假定安排指令“mul1 R3,R10”作為第N周期第一時(shí)段中將執(zhí)行的一條指令,且存在可被安排給第N+1周期的第一時(shí)段中的指令,如附圖31A中所示“add1R2,R4”和附圖31B中所示“sub2 R11,R0,R2”。圖中還示出了這些指令的位模式。當(dāng)將指令“add1 R2,R4”安排在附圖31A中所示的安排位置中時(shí),與指令“mul1 R3,R10”的漢明距離為10。當(dāng)將指令“sub2 R11,R0,R2”安排在附圖31B中所示的安排位置中時(shí),與指令“mul1 R3,R10”的漢明距離為8。因此,將指令“sub2 R11,R0,R2”指定為一條安排候選指令。
當(dāng)僅存在一條具有最小漢明距離的安排候選指令時(shí)(在S158中為“否”),這個(gè)安排候選指令被指定為一條最佳指令(S172)。
當(dāng)存在兩個(gè)或更多個(gè)具有最小漢明距離的安排候選指令時(shí)(在S158中為“是”),兩個(gè)或更多個(gè)安排候選指令之一條指令與其中執(zhí)行該安排候選指令的時(shí)段的默認(rèn)邏輯相匹配(S160)。
圖32A和圖32B是說明指定安排候選指令的處理的示意圖(S160)。假定安排指令“st R1,R13”作為第N周期第一時(shí)段中將執(zhí)行的一條指令,且存在可被安排給第N+1周期的第一時(shí)段中的指令,如附圖32A中所示指令“l(fā)dR30,R18”和附圖32B中所示的指令“sub1 R8,R2”。圖中還示出了這些指令的位模式。如上所述,第一時(shí)段的默認(rèn)邏輯,是關(guān)于存儲器訪問的指令。這可以從所述指令的前2位“01”中得到。由于指令“l(fā)d R30,R18”的前2位為“01”,則其與第一時(shí)段的默認(rèn)邏輯相匹配,而由于指令“sub1 R8,R2”的前2位為“11”,則其不與第一時(shí)段的默認(rèn)邏輯相匹配。因此,將指令“l(fā)d R30,R18”指定為一條安排候選指令。
當(dāng)不存在與默認(rèn)邏輯相匹配的安排候選指令時(shí)(在S162中為“否”),選擇具有最小漢明距離的安排候選指令的任意一條作為一條最佳指令(S170)。
當(dāng)存在一個(gè)與默認(rèn)邏輯相匹配的安排候選指令,且這種指令的數(shù)目為1時(shí)(在S162中為“是”且S164中為“否”),指定與所述默認(rèn)邏輯相匹配的安排候選指令作為一條最佳指令(S168)。
當(dāng)存在與默認(rèn)邏輯相匹配的安排候選指令,且上述指令的數(shù)目為2或更多時(shí)(在S162中為“是”且S164中為“是”),選擇與所述默認(rèn)邏輯相匹配的這種指令中的任意一條,作為一條最佳指令(S166)。
在指令再調(diào)度單元236中的處理之后,所述周期內(nèi)置換處理單元237基于指令再調(diào)度單元236中的調(diào)度結(jié)果,調(diào)整每一周期中的指令的安排。在周期內(nèi)置換處理單元237中執(zhí)行的處理,與參照附圖19和附圖20A~附圖20F說明的處理相同。因此,其詳細(xì)說明將不在此重復(fù)。
這就是指令再調(diào)度單元236的操作的說明。根據(jù)源程序中描述的編譯或編譯指示的選項(xiàng),可以限定一個(gè)周期中使用的時(shí)段的數(shù)目。一個(gè)“編譯指示”給出一編譯器的最優(yōu)化而不改變程序意義的原則的描述。
例如,如以下第一實(shí)例中所示,“-para”被設(shè)置為以C語言描述的源程序的編譯的一個(gè)選項(xiàng),且通過如下數(shù)目定義時(shí)段的數(shù)目。在第一實(shí)例中,通過C編譯器編譯源程序“foo.c”,且在調(diào)度結(jié)果中,一直將兩個(gè)指令安排給每一個(gè)周期。
同時(shí),如同第二實(shí)例中所示,通過一編譯指示可以定義源程序中描述的用于每一個(gè)函數(shù)的時(shí)段的數(shù)目。在第二實(shí)例中,將用于執(zhí)行一函數(shù)func的時(shí)段的數(shù)目定義為1。因此,一直只將一條指令安排給調(diào)度結(jié)果中執(zhí)行函數(shù)func的每一個(gè)周期。
(第一實(shí)例)cc-para 2 foo.c(第二實(shí)例)#pragma para=1 funcint func(void){……
}應(yīng)注意的是,當(dāng)同時(shí)設(shè)置一個(gè)選項(xiàng)和一個(gè)編譯指示時(shí),通過優(yōu)先級選擇具有較小指定值的任一個(gè)。例如,當(dāng)?shù)诙?shí)施例中示出的函數(shù)func及其“編譯指示”被指定在第一實(shí)施例中所示的源程序“foo.c”中時(shí),通常并行執(zhí)行在兩個(gè)時(shí)段中的處理,但產(chǎn)生一個(gè)調(diào)度結(jié)果,以使在執(zhí)行所述函數(shù)func的周期中執(zhí)行在一時(shí)段中的處理。
此外,可以基于指令再調(diào)度單元236的操作和指令調(diào)度單元232或寄存器分配單元234的操作,考慮選項(xiàng)和編譯指示。
(時(shí)段停止/恢復(fù)指令產(chǎn)生單元)附圖33是時(shí)段停止/恢復(fù)指令產(chǎn)生單元238的操作的流程圖。所述時(shí)段停止/恢復(fù)指令產(chǎn)生單元238基于指令再調(diào)度單元236中的調(diào)度結(jié)果,檢測一間隔,該間隔中,只有一個(gè)指定時(shí)段在一個(gè)預(yù)定數(shù)目(例如4個(gè)周期)或更多個(gè)周期中連續(xù)使用(S182)。時(shí)段停止/恢復(fù)指令產(chǎn)生單元238插入一條指令,以在緊接上述間隔之前的周期中的一個(gè)空閑時(shí)段位置停止剩下的兩個(gè)時(shí)段(S184)。當(dāng)不存在在先前周期中插入指令的空閑時(shí)段位置時(shí),將添加一個(gè)周期,以插入上述指令。
接下來,所述時(shí)段停止/恢復(fù)指令產(chǎn)生單元238插入一條指令,從而恢復(fù)在緊接上述間隔之后的周期的空閑時(shí)段位置被停止的兩個(gè)時(shí)段(S186)。當(dāng)在隨后的周期中,不存在插入指令的空閑時(shí)段位置時(shí),將添加一個(gè)周期,以插入上述指令。
附圖34是其中安排指令的調(diào)度結(jié)果的實(shí)例的示意圖。在從第10周期到第18周期的9個(gè)周期中,只有第一時(shí)段被連續(xù)使用。因此,在第9周期的空閑時(shí)段中,寫入僅操作第一時(shí)段并停止剩下兩個(gè)時(shí)段的指令(“set1 1”)。且在第19周期的空閑時(shí)段中,寫入恢復(fù)剩下兩個(gè)時(shí)段的指令(“clearl 1”)。附圖35是其中基于附圖33中連續(xù)使用的指定的僅僅一個(gè)時(shí)段的情況的處理、寫入上述指令的調(diào)度結(jié)果(S182~S186)的實(shí)例的框圖。
返回附圖33,時(shí)段停止/恢復(fù)指令產(chǎn)生單元238基于調(diào)度結(jié)果,檢測一間隔,該間隔中,只有兩個(gè)指定時(shí)段在一個(gè)預(yù)定數(shù)目(例如4個(gè)周期)或更多個(gè)周期中被連續(xù)使用(S188)。所述時(shí)段停止/恢復(fù)指令產(chǎn)生單元238插入一條指令,從而在上述間隔之前的周期中的一個(gè)空閑時(shí)段位置停止剩下的一個(gè)時(shí)段(S190)。當(dāng)不存在在先前的周期中插入指令的空閑時(shí)段位置時(shí),將添加一個(gè)周期,以插入上述指令。
接下來,時(shí)段停止/恢復(fù)指令產(chǎn)生單元238在上述間隔之后的一個(gè)空閑時(shí)段位置插入一條指令,從而恢復(fù)被停止的一個(gè)時(shí)段(S192)。不存在當(dāng)在之后的周期中插入指令的空閑時(shí)段位置時(shí),將添加一個(gè)周期,以插入上述指令。
附圖35的調(diào)度結(jié)果中,在從第4周期到第8周期的5個(gè)周期中,僅使用了第一時(shí)段和第二時(shí)段,而并未使用第三時(shí)段。因此,分別在在前周期和之后的周期中,存在插入停止第三時(shí)段的指令(“set2 12”)以及將其恢復(fù)的指令(“clear2 12”)的需要。然而,在第3和第9周期的所有時(shí)段中已安排指令。因此,時(shí)段停止/恢復(fù)指令產(chǎn)生單元238在第4周期之前和第8周期之后插入新的周期,以便寫入上述兩個(gè)指令。附圖36是其中基于附圖33中僅僅指定連續(xù)使用的指定兩個(gè)時(shí)段的情況的處理(S188~S192)、寫入指令的調(diào)度結(jié)果的實(shí)例的框圖。
在當(dāng)前實(shí)施例中,假定以第一、第二和第三時(shí)段的順序安排指令。因此,當(dāng)兩個(gè)時(shí)段在操作中時(shí),第三時(shí)段并不在操作中,且當(dāng)只有一個(gè)時(shí)段在操作中時(shí),第二和第三時(shí)段并不在操作中。
在處理器30中提供一個(gè)32位程序狀態(tài)寄存器(附圖中未示出)。附圖37是程序狀態(tài)寄存器的實(shí)例的示意圖。例如,操作中的時(shí)段的數(shù)目能夠使用第15和第16位這2位來表示。該此情況中,附圖37((a)~(d))分別表示操作中的時(shí)段的數(shù)目為0~3。
附圖38是程序狀態(tài)寄存器的其他實(shí)例的示意圖。在該程序狀態(tài)寄存器中,第14、15和16位分別對應(yīng)于第一,第二和第三時(shí)段。位的值為“1”表示該時(shí)段在操作中,且所述位的值為“0”表示該時(shí)段被停止。例如,附圖38(b)中所示的程序狀態(tài)寄存器,示出了第一時(shí)段被停止,第二和第三時(shí)段在操作中。
根據(jù)指令“set1”或“set2”,程序狀態(tài)寄存器中保存的值被改寫。
這就是說當(dāng)前實(shí)施例中所述編譯器的說明,但編譯器200中的每一單元將做如下修改。接下來,將逐一描述其變體。
(在編譯器中的每一單元的變體)(指令再調(diào)度單元236的操作的變體)在當(dāng)前實(shí)施例中,將根據(jù)附圖28和附圖29,已描述指令再調(diào)度單元236的操作。然而,可以執(zhí)行附圖39中所示的提取一條最佳指令的處理,而不是通過附圖29中所示的提取一條最佳指令的處理(S122)。
附圖39是附圖28中取一條提取最佳指令的處理(S122)的其他操作的流程圖。
指令再調(diào)度單元236通過以下方法來計(jì)算最小漢明距離,以替代附圖29中計(jì)算最小漢明距離的處理(S156)。更具體的說,指令再調(diào)度單元236比較在前周期中同一時(shí)段執(zhí)行的一條指令和每一條安排候選指令之間的寄存器字段中的位模式,以便獲得具有最小漢明距離的指令(S212)。
附圖40A和附圖40B是說明指定安排候選指令的處理(S212)的示意圖。假定將指令“add1 R0,R2”安排為第N周期第一時(shí)段中執(zhí)行的指令,且將附圖40A中所示的指令“sub1 R3,R1”和附圖40B中所示的指令“div R7,R1”,安排為可被安排在第N+1周期第一時(shí)段中的指令。這些圖中還示出了這些指令的位模式。當(dāng)將指令“sub1 R3,R1”安排在附圖40A中示出的上述安排位置時(shí),該指令和指令“add1 R0,R2”的寄存器字段之間的漢明距離為4。當(dāng)將指令“div R7,R1”安排在附圖40B中示出的上述安排位置時(shí),該指令和指令“add1 R0,R2”的寄存器字段之間的漢明距離為5。因此,指定指令“add1 R0,R2”作為一條安排候選指令。
其他處理(S152~S154以及S158~S174)與根據(jù)附圖29說明的處理相同。因此,其詳細(xì)說明在此將不再重復(fù)。
(周期內(nèi)置換處理單元237的第一變體)周期內(nèi)置換處理單元237可以執(zhí)行附圖41中所示處理,以替代參照附圖19所說明的處理。
附圖41是周期內(nèi)置換處理單元237的操作的第一變體的流程圖。
所述周期內(nèi)置換處理單元237通過以下方法計(jì)算最小漢明距離,以替代附圖19中所示的計(jì)算漢明距離的處理(S64)。更具體地說,周期內(nèi)置換處理單元237計(jì)算一目標(biāo)指令和每一指令序列中每一時(shí)段的在前周期中的指令的位模式之間的漢明距離(S222)。其他處理(S60~S63以及S65~S69)與根據(jù)附圖19說明的處理相同。因此,其詳細(xì)說明在此將不再重復(fù)。
附圖42是說明計(jì)算指令間漢明距離的處理的示意圖(S222)。例如,當(dāng)計(jì)算附圖21所示第N周期中一4指令序列、與附圖22C所示第N+1周期中指令序列的每一時(shí)段中的指令之間的漢明距離時(shí),第一、第二和第三時(shí)段中的漢明距離分別為12、11和11。
因此,附圖42的實(shí)例中,漢明距離的和為34。在計(jì)算漢明距離和的處理(S66)中,以上述方式,計(jì)算附圖21中所示第N周期中指令序列中的指令,與附圖22A~附圖22F中所示的指令序列的6個(gè)模式間的漢明距離和,且所計(jì)算的和分別為28、26、34、28、34和30。在選擇一指令序列的處理(S68)中,從指令序列的6個(gè)模式中,選擇附圖22B所示、具有最小漢明距離和的指令序列。
還應(yīng)注意的是,假定在當(dāng)前變體中計(jì)算漢明距離的處理(S222)中,寄存器已被分配。因此,在其中尚未分配寄存器的指令調(diào)度單元232中的處理之后,不能執(zhí)行當(dāng)前變體中的周期內(nèi)置換處理單元237的處理,但在寄存器分配單元234中的處理或指令再調(diào)度單元236的處理之后執(zhí)行上述處理。
(周期內(nèi)置換處理單元237的第二變體)所述周期內(nèi)置換處理單元237可以執(zhí)行附圖43中所示處理,以替代根據(jù)附圖19所說明的處理。
附圖43是周期內(nèi)置換處理單元237的操作的第二變體的流程圖。
所述周期內(nèi)置換處理單元237通過以下方法計(jì)算最小漢明距離,以替代附圖19中所示的計(jì)算漢明距離的處理(S64)。更具體地說,周期內(nèi)置換處理單元237計(jì)算一目標(biāo)指令和每一指令序列中每一時(shí)段的在前周期中的指令的寄存器字段的位模式之間的漢明距離(S232)。其他處理(S60~S63以及S65~S69)與根據(jù)附圖19說明的處理相同。因此,在此將不再重復(fù)其詳細(xì)說明。
附圖44是說明計(jì)算寄存器字段之間漢明距離的處理的示意圖(S232)。例如,當(dāng)計(jì)算附圖2 1所示第N周期中一個(gè)指令序列、與附圖22C所示第N+1周期中指令序列中的每一時(shí)段中的指令之間的漢明距離時(shí),第一、第二和第三時(shí)段中的漢明距離分別為2、2和6。
因此,附圖44的實(shí)例中,漢明距離的和為10。在計(jì)算漢明距離之和的處理(S66)中,以上述方式,計(jì)算附圖21中所示第N周期中指令序列中的指令、與附圖22A~附圖22F中所示指令序列的6個(gè)模式間的漢明距離和,且所計(jì)算的和分別為14、10、10、6、10和10。在選擇一指令序列的處理(S68)中,從指令序列的6個(gè)模式中,選擇附圖22D所示的具有最小漢明距離和的指令序列。
還應(yīng)注意的是,假定在當(dāng)前變體中計(jì)算漢明距離的處理(S232)中,寄存器已被分配。因此,在其中仍未分配寄存器的指令調(diào)度單元232中的處理之后,不能執(zhí)行在當(dāng)前變體中周期內(nèi)置換處理單元237的處理,但在寄存器分配單元234中的處理或指令再調(diào)度單元236的處理之后執(zhí)行上述處理。
(周期內(nèi)置換處理單元237的第三變體)所述周期內(nèi)置換處理單元237可以執(zhí)行附圖45中所示處理,以替代根據(jù)附圖19所說明的處理。
附圖45是周期內(nèi)置換處理單元237的操作的第三變體的流程圖。
所述周期內(nèi)置換處理單元237執(zhí)行以下處理,以替代附圖19中所示的獲得漢明距離的處理(S64)。更具體地說,周期內(nèi)置換處理單元237獲得一用于每一指令序列中的每一時(shí)段的目標(biāo)指令的寄存器字段的數(shù)目,其具有與在前周期的一條指令相同的寄存器數(shù)目(S242)。
所述周期內(nèi)置換處理單元237執(zhí)行以下處理,以替代附圖19中所示的獲得漢明距離和的處理(S66)。更具體地說,周期內(nèi)置換處理單元237獲得三個(gè)時(shí)段的指令中,具有相同寄存器數(shù)目的寄存器字段的數(shù)目的和(S244)。
所述周期內(nèi)置換處理單元237進(jìn)一步執(zhí)行以下處理,以替代附圖19中所示的置換指令的處理(S68)。更具體地說,周期內(nèi)置換處理單元237從在六個(gè)指令序列的每一個(gè)中獲得的寄存器字段數(shù)目的和中,選擇具有最大數(shù)目的匹配寄存器字段的指令序列,且置換這些指令,以便成為與所選擇指令序列相同的安排(S246)。其他處理(S60~S63,S65和S67和S69)與根據(jù)附圖19說明的處理相同。因此,在此將不再重復(fù)其詳細(xì)說明。
附圖46是已安排指令的實(shí)例的示意圖。假定將指令“l(fā)d R0,R1”,“sub1R2,R3”和“add1 R4,R5”分別安排為在第N周期第一、第二和第三時(shí)段中執(zhí)行的指令。還假定將指令“st R5,R8”,“mul R2,R3”和“mod R0,R10”分別安排為在第N+1周期第一、第二和第三時(shí)段中執(zhí)行的指令。
附圖47A~附圖47F是說明產(chǎn)生指令序列的處理(S61)的示意圖。例如,從附圖46中示出的安排給第N+1周期的三個(gè)指令中,產(chǎn)生如附圖47A~附圖47F中所示的六個(gè)指令序列。
附圖48是用于說明計(jì)算寄存器字段的數(shù)目的處理(S242)的示意圖。例如,在每一時(shí)段內(nèi)獲得附圖47F中示出的第N+1周期中指令序列的寄存器字段的數(shù)目(具有與附圖46中示出的第N周期中指令序列相同的寄存器數(shù)目)。就第一時(shí)段而言,匹配寄存器字段的數(shù)目為1,因?yàn)閮蓚€(gè)周期的寄存器字段中寄存器R0相互匹配,但是其它寄存器字段中的寄存器不同。就第二時(shí)段而言,匹配寄存器字段的數(shù)目為2,因?yàn)閮蓚€(gè)周期的寄存器字段中寄存器R2和R3相互匹配。就第三時(shí)段而言,匹配寄存器字段的數(shù)目為0,因?yàn)闆]有兩個(gè)寄存器字段共用的寄存器。
因此,附圖48的實(shí)例中,具有相同寄存器數(shù)目的寄存器字段的數(shù)目之和為3。在計(jì)算寄存器字段的數(shù)目的和的處理(S244)中,獲得匹配寄存器字段的數(shù)目的和,用于附圖46中所示第N周期的指令序列和附圖47A~附圖47F中所示六個(gè)指令序列的每一個(gè)。所獲得的和為2、0、0、0、1和3。因此,在指令序列選擇處理(S246)中,從六個(gè)指令序列中,選擇附圖47F中所示的、具有與匹配寄存器字段的數(shù)目的最大和的指令序列。
在當(dāng)前變體中,在假定已進(jìn)行寄存器分配的基礎(chǔ)上,執(zhí)行獲得寄存器字段的數(shù)目的處理(S242)。因此,在其中仍未進(jìn)行寄存器分配的指令調(diào)度單元232中的處理之后,不能執(zhí)行在當(dāng)前變體中的周期內(nèi)置換處理單元237中的處理,但在寄存器分配單元234中的處理或指令再調(diào)度單元236中的處理之后執(zhí)行上述處理。
(周期內(nèi)置換處理單元237的第四變體)所述周期內(nèi)置換處理單元237可以執(zhí)行以下處理,以替代根據(jù)附圖19所說明的處理。
附圖49是周期內(nèi)置換處理單元237的操作的第四變體的流程圖。
所述周期內(nèi)置換處理單元237執(zhí)行以下處理,以替代附圖19中所示的獲得每一指令序列的漢明距離的和的處理(S63~S66)。更具體地說,周期內(nèi)置換處理單元237獲得匹配一目標(biāo)指令序列所包括的指令之外的一時(shí)段的默認(rèn)邏輯的指令的數(shù)目(S252)。
所述周期內(nèi)置換處理單元237執(zhí)行以下處理,以替代附圖19中所示的置換指令的處理(S68)。更具體地說,周期內(nèi)置換處理單元237從為六個(gè)指令序列的每一個(gè)獲得的上述指令數(shù)目的和中,選擇包括與默認(rèn)邏輯相匹配的最大數(shù)目的指令的指令序列,且置換這些指令,以便成為與所選擇指令序列相同(S254)。其他處理(S60~S62,S67和S69)與根據(jù)附圖19說明的處理相同。因此,在此將不再重復(fù)其詳細(xì)說明。
例如,假定在產(chǎn)生指令序列的處理(S61)中,產(chǎn)生附圖47A~附圖47F中示出的六個(gè)指令序列。如上所述,將通過根據(jù)一指令序列中的每一個(gè)指令的前2位,可以判斷該指令是否與被安排在其中的時(shí)段的默認(rèn)邏輯相匹配。例如,由于在附圖47B所示的指令序列中,安排在第一時(shí)段的指令的前2位為“01”,則其與上述時(shí)段的默認(rèn)邏輯相匹配。然而,安排在第二和第三時(shí)段中的指令的前2位分別為“11”和“10”,則它們與這些時(shí)段的默認(rèn)邏輯并不匹配。因此,一指令與對應(yīng)時(shí)段的默認(rèn)邏輯相匹配。以這種方式,在計(jì)算指令數(shù)目的處理中,分別在六個(gè)指令序列中獲得與默認(rèn)邏輯相匹配的指令的數(shù)目(S252),且所述數(shù)目分別為3、1、1、0、0和1。在選擇指令序列的處理(S254)中,從六個(gè)指令序列中,選擇附圖47A示出的、具有與默認(rèn)邏輯相匹配的最大數(shù)目的指令的指令序列。
如上所述,當(dāng)前實(shí)施例中的編譯器200允許指令安排的優(yōu)化,以使用于連續(xù)周期的同一時(shí)段的指令、操作碼和寄存器字段之間的漢明距離變小。因此,存儲在處理器的指令寄存器中的值的變化保持較小,并且可以產(chǎn)生一用于使處理器以低功耗運(yùn)行的機(jī)器語言程序。
當(dāng)前實(shí)施例中的編譯器200也允許指令安排的優(yōu)化,以使在同一時(shí)段內(nèi)的相同寄存器字段連續(xù)訪問同一寄存器。因此,由于連續(xù)訪問同一寄存器,使用于選擇寄存器的控制信號的變化保持較小,并且可以產(chǎn)生一用于使處理器以低功耗工作的機(jī)器語言程序。
同時(shí),當(dāng)前實(shí)施例中編譯器200允許將指令分配給若干個(gè)時(shí)段,以使這些指令與這些時(shí)段的默認(rèn)邏輯相匹配。因此,在同一時(shí)段內(nèi)連續(xù)執(zhí)行使用處理器的相同組成部分的指令。因此可以產(chǎn)生一用于使處理器以低功耗工作的機(jī)器語言程序。
此外,當(dāng)前實(shí)施例中的編譯器200允許停止向一個(gè)或若干個(gè)空閑時(shí)段供電,同時(shí)僅僅有一個(gè)或兩個(gè)時(shí)段在連續(xù)指令周期中在使用。因此可以產(chǎn)生一用于使處理器以低功耗工作的機(jī)器語言程序。
此外,當(dāng)前實(shí)施例中的編譯器200允許使用一編譯指示或作為編譯的一個(gè)選項(xiàng),指定所要用于執(zhí)行一程序的時(shí)段的數(shù)目。因此,可以產(chǎn)生空閑時(shí)段,并可以停止向空閑時(shí)段供電,并且可以產(chǎn)生一用于使處理器以低功耗工作的機(jī)器語言程序。
到現(xiàn)在為止,基于當(dāng)前實(shí)施例已說明依據(jù)本發(fā)明的編譯器,但本發(fā)明并不局限于該實(shí)施例。
例如,在提取通過指令再調(diào)度單元236執(zhí)行的一最佳指令的處理(S122)中,如參照附圖28和附圖29所述,根據(jù)具有相同寄存器數(shù)目的字段的數(shù)目、一目標(biāo)指令和在其之前執(zhí)行的指令之間的漢明距離(S156)、以及以該順序的優(yōu)先級的時(shí)段的默認(rèn)邏輯(S160),指定最佳指令(S152)。然而,本發(fā)明并不局限于該優(yōu)先級順序,且可以按照其他順序的優(yōu)先級順序來指定最佳指令。
同樣,指定最佳指令所應(yīng)考慮的各種條件,諸如漢明距離和時(shí)段的默認(rèn)邏輯,并不局限于當(dāng)前實(shí)施例中的條件??偠灾?,這樣的條件需要進(jìn)行組合或需要將優(yōu)先級分配給這些條件,使得當(dāng)根據(jù)本發(fā)明的編譯器使處理器工作時(shí)減少總功耗。不用說,對于由指令調(diào)度單元232、寄存器分配單元234、周期內(nèi)置換處理單元237以及指令再調(diào)度單元236執(zhí)行的處理也是一樣的。
同樣,可構(gòu)造本發(fā)明,以使這些條件或優(yōu)先級的參數(shù)化組合被集成為用于編譯的源程序202的頭文件,或可以指定這些參數(shù)作為編譯器的一個(gè)選項(xiàng)。
此外,在當(dāng)前實(shí)施例內(nèi)由優(yōu)化單元230執(zhí)行的處理中,可以從多個(gè)方法中,為每一基本塊選擇最佳調(diào)度方法。例如,可接受的是,獲得用于每一個(gè)基本單元的所有多個(gè)備用調(diào)度方法的調(diào)度結(jié)果,并選擇期望最顯著地降低功耗的調(diào)度方法,從而得到要降低的功耗。
可以使用諸如反向跟蹤之類的方法選擇最佳調(diào)度方法。例如,當(dāng)所估計(jì)的功耗大于作為寄存器分配單元234的寄存器分配的結(jié)果所期望的功耗時(shí),即使在指令調(diào)度單元232選擇期望最顯著降低功耗為的調(diào)度方法之后,作為試驗(yàn),指令調(diào)度單元232選擇期望其次降低功耗的另一調(diào)度方法。因此,如果所估計(jì)的功耗小于所期望的功耗,則指令再調(diào)度單元236可以執(zhí)行指令再調(diào)度處理。
此外,當(dāng)前實(shí)施例中已說明了以C語言描述的一源程序被轉(zhuǎn)換為一機(jī)器語言程序的實(shí)例,但該源程序可以以除C語言之外的其他高級語言來描述,或可以是一種已通過其他編譯器編譯的機(jī)器語言程序。當(dāng)源程序是一機(jī)器語言程序時(shí),構(gòu)造本發(fā)明,以便輸出通過機(jī)器語言程序的優(yōu)化獲得的機(jī)器語言程序。
權(quán)利要求
1.一種編譯設(shè)備,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,用于優(yōu)化所述中間碼,從而減小指令之間的漢明距離,這些指令在連續(xù)的指令周期中位于與同一指令發(fā)出單元對應(yīng)的位置,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
2.根據(jù)權(quán)利要求1的編譯設(shè)備,其中,優(yōu)化單元通過將具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性,所述具有較高優(yōu)先級的指令與在緊接先前的周期中被安排在對應(yīng)于同一指令發(fā)出單元的位置上的指令間,具有較小的漢明距離。
3.根據(jù)權(quán)利要求2的編譯設(shè)備,其中,優(yōu)化單元將具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,所述具有較高優(yōu)先級的指令與在緊接先前的周期中安排在對應(yīng)于同一指令發(fā)出單元的位置上的指令間,具有較小的操作碼的漢明距離。
4.根據(jù)權(quán)利要求2的編譯設(shè)備,其中,優(yōu)化單元將具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,所述具有較高優(yōu)先級的指令與在緊接先前的周期中被安排在對應(yīng)于同一指令發(fā)出單元的位置上的指令間,具有較小的寄存器序號的漢明距離。
5.根據(jù)權(quán)利要求1的編譯設(shè)備,其中,優(yōu)化單元通過置換在所述周期內(nèi)的一目標(biāo)指令周期中安排的指令,優(yōu)化中間碼,從而減小在緊接先前的周期中被安排在對應(yīng)于同一指令發(fā)出單元的位置上的指令間的漢明距離,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
6.根據(jù)權(quán)利要求5的編譯設(shè)備,其中,優(yōu)化單元置換在所述周期內(nèi)的目標(biāo)指令周期中安排的指令,從而減小在緊接先前的周期中被安排在與多個(gè)指令發(fā)出單元對應(yīng)的位置上的多個(gè)指令間的漢明距離之和。
7.根據(jù)權(quán)利要求5的編譯設(shè)備,其中,優(yōu)化單元置換在所述周期內(nèi)的目標(biāo)指令周期中安排的指令,從而減小在緊接先前的周期中被安排在與多個(gè)指令發(fā)出單元對應(yīng)的位置上的指令間的操作碼的漢明距離。
8.根據(jù)權(quán)利要求5的編譯設(shè)備,其中,優(yōu)化單元置換被安排在所述周期內(nèi)的目標(biāo)指令周期中的指令,從而減小與緊接先前周期中被安排在與相同指令發(fā)出單元對應(yīng)的位置上的指令間的寄存器序號的漢明距離。
9.一種編譯設(shè)備,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,用于優(yōu)化中間碼,使得在連續(xù)的指令周期中訪問同一寄存器,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
10.根據(jù)權(quán)利要求9的編譯設(shè)備,其中,優(yōu)化單元通過將具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,從而優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性,所述具有較高優(yōu)先級的指令用于在緊接先前的周期中訪問位于同一指令發(fā)出單元相對應(yīng)的位置上的指令的寄存器。
11.根據(jù)權(quán)利要求10的編譯設(shè)備,其中,優(yōu)化單元將具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,所述具有較高優(yōu)先級的指令用于在緊接先前的周期中訪問一寄存器,該寄存器具有的寄存器序號接近于位于同一指令發(fā)出單元對應(yīng)位置上安排的指令的寄存器的寄存器序號。
12.根據(jù)權(quán)利要求9的編譯設(shè)備,其中,優(yōu)化單元通過置換被安排在所述周期內(nèi)的目標(biāo)指令周期中的指令,優(yōu)化中間碼,從而以最大次數(shù)連續(xù)訪問在緊接先前的周期中安排的指令的寄存器,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
13.一種編譯設(shè)備,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,其中,所發(fā)出的具有較高優(yōu)先級的指令被預(yù)定用于所述多個(gè)指令發(fā)出單元中的每一個(gè),以及該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,通過將所述預(yù)定的具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元的每一個(gè)相對應(yīng)的位置上,優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
14.根據(jù)權(quán)利要求13的編譯設(shè)備,其中,優(yōu)化單元通過置換在所述周期內(nèi)的目標(biāo)指令周期中安排的指令,優(yōu)化中間碼,從而使被置換的指令與一組指令中的最大數(shù)量的指令相匹配,該組指令包括由多個(gè)指令發(fā)出單元中的每一個(gè)發(fā)出的具有較高優(yōu)先級的指令,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
15.一種編譯設(shè)備,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,通過將指令安排在與多個(gè)指令發(fā)出單元對應(yīng)的位置上,從而優(yōu)化中間碼,使得沒有指令被安排在與所述多個(gè)指令發(fā)出單元當(dāng)中的一指定指令發(fā)出單元對應(yīng)的位置上,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
16.一種編譯設(shè)備,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;間隔檢測單元,用于在分別對應(yīng)于其中將要安排指令的多個(gè)指令發(fā)出單元的多個(gè)位置中,連續(xù)地在預(yù)定數(shù)量的指令周期檢測其中在預(yù)定數(shù)量的位置中沒有安排指令的間隔;第一指令插入單元,用于在緊接該間隔之前插入一條指令,以停止對應(yīng)于沒有安排指令的位置的指令發(fā)出單元的操作;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
17.根據(jù)權(quán)利要求16的編譯設(shè)備,進(jìn)一步包括第二指令插入單元,用于在緊接該間隔之后插入一條指令,以恢復(fù)對應(yīng)于沒有安排指令的位置的指令發(fā)出單元的操作。
18.根據(jù)權(quán)利要求16的編譯設(shè)備,其中,該處理器包括一程序狀態(tài)寄存器,保存表示多個(gè)指令發(fā)出單元的操作狀態(tài)的值,以及由第一指令插入單元插入的指令將表示多個(gè)指令發(fā)出單元的操作狀態(tài)的值寫入該程序狀態(tài)寄存器。
19.一種編譯設(shè)備,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,通過安排指令優(yōu)化中間碼,從而僅使指定數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
20.根據(jù)權(quán)利要求19的編譯設(shè)備,其中,該源程序包括單元數(shù)量指定信息,其用于指定處理器所使用的指令發(fā)出單元的數(shù)量,以及該優(yōu)化單元通過安排指令優(yōu)化中間碼,從而僅使由單元數(shù)量指定信息指定的指定數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
21.根據(jù)權(quán)利要求19的編譯設(shè)備,進(jìn)一步包括一個(gè)接受單元,用于接受該處理器所使用的指令發(fā)出單元的數(shù)量,其中,該優(yōu)化單元通過安排指令優(yōu)化中間碼,從而僅使由該接受單元接受的數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
22.一種編譯設(shè)備,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;指令調(diào)度單元,用于將指令安排在與所述多個(gè)指令發(fā)出單元對應(yīng)的位置上,而不改變與中間碼對應(yīng)的指令之間的相關(guān)性;寄存器分配單元,用于將具有較高優(yōu)先級的寄存器分配給一個(gè)變量,所述寄存器具有的寄存器序號與緊接在前指令周期中位于同一指令發(fā)出單元相對應(yīng)的位置上的指令的寄存器的寄存器序號間,具有較小的漢明距離,而所述變量由該指令調(diào)度單元調(diào)度的每一個(gè)指令使用;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
23.根據(jù)權(quán)利要求22的編譯設(shè)備,其中,該寄存器分配單元將具有較高優(yōu)先級的寄存器分配給每一個(gè)被調(diào)度的指令所使用的變量,所述寄存器與在緊接先前的周期中被安排在同一指令發(fā)出單元相對應(yīng)的位置中的指令的寄存器相同。
24.一種編譯設(shè)備,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,根據(jù)多個(gè)預(yù)定安排方法中的每一方法,通過將指令安排在與所述多個(gè)指令發(fā)出單元相對應(yīng)的位置上,而不改變與中間碼對應(yīng)的指令之間的相關(guān)性,并且通過從多個(gè)被安排指令中選擇其中被期望能夠在程序執(zhí)行期間最顯著地減小功耗的一個(gè)被安排指令,從而優(yōu)化中間碼;以及代碼產(chǎn)生單元,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
25.根據(jù)權(quán)利要求24的編譯設(shè)備,其中,該優(yōu)化單元包括指令調(diào)度單元,用于根據(jù)多個(gè)預(yù)定安排方法中的每一方法,將指令安排在與所述多個(gè)指令發(fā)出單元相對應(yīng)的位置上,而不改變與中間碼對應(yīng)的指令之間的相關(guān)性;寄存器分配單元,用于根據(jù)多個(gè)預(yù)定分配方法中的每一方法,將若干個(gè)寄存器分配給若干個(gè)變量,所述變量分別由該指令調(diào)度單元所調(diào)度的指令使用,其中,利用反向跟蹤搜索由該指令調(diào)度單元所使用的多個(gè)預(yù)定安排方法、以及由該寄存器分配單元所使用的多個(gè)預(yù)定分配方法,從而得到被期望能夠在程序執(zhí)行期間最顯著地減小功耗的指令的安排。
26.根據(jù)權(quán)利要求25的編譯設(shè)備,其中,該優(yōu)化單元進(jìn)一步包括一指令再調(diào)度單元,用于根據(jù)多個(gè)預(yù)定置換方法中的每一方法,置換位于與所述多個(gè)指令發(fā)出單元相對應(yīng)的位置上的指令,所述指令使用分配給各寄存器的變量,以及使用反向跟蹤搜索由該指令調(diào)度單元所使用的多個(gè)預(yù)定安排方法、該寄存器分配單元所使用的多個(gè)預(yù)定分配方法、以及該指令再調(diào)度單元所使用的多個(gè)預(yù)定置換方法,從而獲得被期望能夠在程序執(zhí)行期間最顯著地減小功耗的指令的安排。
27.一種編譯方法,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由所述多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯方法包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,優(yōu)化中間碼,從而減小在連續(xù)指令周期中位于與同一指令發(fā)出單元相對應(yīng)的位置的指令之間的漢明距離,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
28.根據(jù)權(quán)利要求27的編譯方法,其中,在該優(yōu)化步驟中,通過將具有較高優(yōu)先級的指令安排在與所述多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性,所述具有較高優(yōu)先級的指令與在緊接先前的周期中被安排在與同一指令發(fā)出單元相對應(yīng)的位置上的指令間,具有較小的漢明距離。
29.根據(jù)權(quán)利要求27的編譯方法,其中,在該優(yōu)化步驟中,通過置換被安排在所述周期中的目標(biāo)指令周期中的指令,優(yōu)化所述中間碼,從而減小與緊接先前的周期中被安排在與同一指令發(fā)出單元相對應(yīng)的位置上的指令間的漢明距離,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
30.一種編譯方法,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯方法包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,優(yōu)化中間碼,從而在連續(xù)的指令周期中訪問同一寄存器,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
31.根據(jù)權(quán)利要求30的編譯方法,其中,在該優(yōu)化步驟中,通過將具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性,所述具有較高優(yōu)先級的指令用于訪問在緊接在前指令周期中被安排在與同一指令發(fā)出單元相對應(yīng)的位置上的指令的寄存器。
32.根據(jù)權(quán)利要求30的編譯方法,其中,在該優(yōu)化步驟中,通過置換被安排在所述周期中的目標(biāo)指令周期中的指令,優(yōu)化中間碼,使得以最大次數(shù)連續(xù)訪問在緊接先前的周期中被安排的指令的寄存器,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
33.一種編譯方法,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,其中,所發(fā)出的具有較高優(yōu)先級的指令被預(yù)定用于所述多個(gè)指令發(fā)出單元中的每一個(gè),以及該編譯方法包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,通過將所述預(yù)定的具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元的每一個(gè)相對應(yīng)的位置上,以優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
34.根據(jù)權(quán)利要求33的編譯方法,其中在該優(yōu)化步驟中,通過置換在所述周期中的目標(biāo)指令周期中安排的指令,優(yōu)化中間碼,從而使被置換的指令與一組指令中最大數(shù)量的指令相匹配,該組指令包括由多個(gè)指令發(fā)出單元中的每一個(gè)以較高優(yōu)先級發(fā)出的指令,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
35.一種編譯方法,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯方法包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,通過將指令安排在與多個(gè)指令發(fā)出單元對應(yīng)的位置上,優(yōu)化中間碼,使得沒有指令被安排在與所述多個(gè)指令發(fā)出單元當(dāng)中的一指定指令發(fā)出單元對應(yīng)的位置上,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
36.一種編譯方法,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯方法包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;間隔檢測步驟,在分別對應(yīng)于其中將要安排指令的多個(gè)指令發(fā)出單元的多個(gè)位置中,連續(xù)地在預(yù)定數(shù)量的指令周期檢測其中在預(yù)定數(shù)量的位置中沒有安排指令的間隔;第一指令插入步驟,用于在緊接該間隔之前插入一條指令,以停止對應(yīng)于沒有安排指令的位置的指令發(fā)出單元的操作;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
37.一種編譯方法,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,其中,該源程序包括單元數(shù)量指定信息,用于指定該處理器所使用的指令發(fā)出單元的數(shù)量,以及該編譯方法包括語法分析步驟,用于對該源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,用于通過安排指令以優(yōu)化中間碼,從而僅使指定數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,用于將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
38.根據(jù)權(quán)利要求37的編譯方法,其中在該優(yōu)化步驟中,通過安排指令以優(yōu)化中間碼,從而僅使由單元數(shù)量指定信息指定數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
39.根據(jù)權(quán)利要求37的編譯方法,進(jìn)一步包括一個(gè)接受步驟,接受該處理器所使用的指令發(fā)出單元的數(shù)量,其中在該優(yōu)化步驟中,通過安排指令以優(yōu)化中間碼,從而僅使由該接受單元接受的數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
40.一種編譯方法,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述多個(gè)指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯方法包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;指令調(diào)度步驟,用于將指令安排在與多個(gè)指令發(fā)出單元相對應(yīng)的位置上,而不改變與中間碼對應(yīng)的指令之間的相關(guān)性;寄存器分配步驟,將具有較高優(yōu)先級的寄存器分配給一個(gè)變量,所述寄存器具有的寄存器序號,與緊接先前指令周期中位于與同一指令發(fā)出單元相對應(yīng)的位置上的指令的寄存器的寄存器序號間,具有較小的漢明距離,而所述變量由該指令調(diào)度單元調(diào)度的每一個(gè)指令使用;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
41.一種編譯方法,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯方法包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,根據(jù)多個(gè)預(yù)定安排方法的每一方法,通過將指令安排在與多個(gè)指令發(fā)出單元相對應(yīng)的位置上,而不改變與中間碼對應(yīng)的指令之間的相關(guān)性,并且通過從多個(gè)被安排的指令中選擇被期望能夠在程序執(zhí)行期間最顯著地減小功耗的一個(gè)被安排的指令,從而優(yōu)化中間碼;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
42.一種編譯程序,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該程序包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,優(yōu)化中間碼,從而減小指令之間的漢明距離,這些指令在連續(xù)指令周期中被安排在與同一指令發(fā)出單元相對應(yīng)的位置,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
43.根據(jù)權(quán)利要求42的程序,其中在該優(yōu)化步驟中,通過將具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性,所述具有較高優(yōu)先級的指令與緊接先前的周期中被安排在與同一指令發(fā)出單元相對應(yīng)的位置上的指令間,具有較小的漢明距離。
44.根據(jù)權(quán)利要求42的程序,其中在該優(yōu)化步驟中,通過置換被安排在所述周期中的目標(biāo)指令周期中的指令,優(yōu)化中間碼,從而減小與緊接先前的周期中被安排在與同一指令發(fā)出單元相對應(yīng)的位置上的指令間的漢明距離,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
45.一種編譯程序,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該程序包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,優(yōu)化中間碼,從而在連續(xù)的指令周期中訪問同一寄存器,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
46.根據(jù)權(quán)利要求45的程序,其中在該優(yōu)化步驟中,通過將具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元中的每一個(gè)相對應(yīng)的位置上,優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性,所述具有較高優(yōu)先級的指令,用于在緊接先前指令周期中訪問被安排與同一指令發(fā)出單元相對應(yīng)的位置上的指令的寄存器。
47.根據(jù)權(quán)利要求45的程序,其中在該優(yōu)化步驟中,通過置換被安排在所述周期中的目標(biāo)指令周期中的指令,優(yōu)化中間碼,從而以最大次數(shù)連續(xù)訪問在緊接先前的周期中安排的指令的寄存器,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
48.一種編譯程序,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,其中將發(fā)出的具有較高優(yōu)先級的指令被預(yù)定用于所述多個(gè)指令發(fā)出單元中的每一個(gè),以及該程序包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,通過將所述預(yù)定的具有較高優(yōu)先級的指令安排在與多個(gè)指令發(fā)出單元的每一個(gè)相對應(yīng)的位置上,來優(yōu)化中間碼,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
49.根據(jù)權(quán)利要求48的程序,其中在該優(yōu)化步驟中,通過置換被安排于所述周期內(nèi)的目標(biāo)指令周期中的指令,優(yōu)化中間碼,從而使被置換的指令與一組指令中最大數(shù)量的指令相匹配,該組指令包括由多個(gè)指令發(fā)出單元中的每一個(gè)發(fā)出的具有較高優(yōu)先級的指令,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
50.一種編譯程序,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該程序包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,通過將指令安排在與多個(gè)指令發(fā)出單元相對應(yīng)的位置上,從而優(yōu)化中間碼,使得沒有指令被安排在與所述多個(gè)指令發(fā)出單元當(dāng)中的一指定指令發(fā)出單元對應(yīng)的位置上,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
51.一種編譯程序,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該程序包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;間隔檢測步驟,在分別對應(yīng)于其中將要安排指令的多個(gè)指令發(fā)出單元的多個(gè)位置中,連續(xù)地在預(yù)定數(shù)量的指令周期檢測其中在預(yù)定數(shù)量的位置中沒有安排指令的間隔;第一指令插入步驟,用于在緊接該間隔之前插入一條指令,以停止對應(yīng)于沒有安排指令的位置的指令發(fā)出單元的操作;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
52.一種編譯程序,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,其中,該源程序包括單元數(shù)量指定信息,其指定該處理器所使用的指令發(fā)出單元的數(shù)量,以及該程序包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,通過安排指令優(yōu)化中間碼,從而使得僅使指定數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
53.根據(jù)權(quán)利要求52的程序,其中在該優(yōu)化步驟中,通過安排指令優(yōu)化中間碼,使得僅使由單元數(shù)量指定信息指定數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
54.根據(jù)權(quán)利要求52的程序,進(jìn)一步包括一個(gè)接受步驟,接受被該處理器所使用的指令發(fā)出單元的數(shù)量,其中在該優(yōu)化步驟中,通過安排指令來優(yōu)化中間碼,以便僅使由接受單元接受的數(shù)量的指令發(fā)出單元工作,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性。
55.一種編譯程序,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該程序包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;指令調(diào)度步驟,用于將指令安排在與多個(gè)指令發(fā)出單元相對應(yīng)的位置上,而不改變與中間碼對應(yīng)的指令之間的相關(guān)性;寄存器分配步驟,將具有較高優(yōu)先級的寄存器分配給一個(gè)變量,所述寄存器具有的寄存器序號,與緊接先指令周期中位于與同一指令發(fā)出單元相對應(yīng)的位置上的指令的寄存器的寄存器序號間,具有較小的漢明距離,而所述變量由該指令調(diào)度單元調(diào)度的每一個(gè)指令使用;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
56.一種編譯程序,將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該程序包括語法分析步驟,對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換步驟,將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化步驟,根據(jù)多個(gè)預(yù)定安排方法的每一方法,通過將指令安排在與多個(gè)指令發(fā)出單元相對應(yīng)的位置上,而不改變與中間碼對應(yīng)的指令之間的相關(guān)性,并且通過從多個(gè)被安排的指令中選擇被期望在程序執(zhí)行期間最顯著地減小功耗的一個(gè)被安排的指令,從而優(yōu)化中間碼;以及代碼產(chǎn)生步驟,將被優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
57.一種計(jì)算機(jī)可讀記錄介質(zhì),用于記錄用于處理器的機(jī)器語言代碼,該處理器包括多個(gè)執(zhí)行單元以及多個(gè)指令發(fā)出單元,所述執(zhí)行單元能夠并行執(zhí)行指令,所述指令發(fā)出單元發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,其中,該機(jī)器語言代碼包括第一指令,用以在預(yù)定數(shù)量或更多的指令周期內(nèi)在所述指令發(fā)出單元的任一個(gè)中不執(zhí)行指令的一個(gè)間隔期間、停止任一個(gè)指令發(fā)出單元的操作。
58.根據(jù)權(quán)利要求57的計(jì)算機(jī)可讀記錄介質(zhì),其中,所述機(jī)器語言代碼進(jìn)一步包括第二指令,用以在該間隔過去之后就恢復(fù)所述任一個(gè)指令發(fā)出單元的操作。
59.根據(jù)權(quán)利要求57的計(jì)算機(jī)可讀記錄介質(zhì),其中,該處理器包括程序狀態(tài)寄存器,它保存表示多個(gè)指令發(fā)出單元的操作狀態(tài)的值,以及所述第一指令將表示多個(gè)指令發(fā)出單元的操作狀態(tài)的所述值寫入該程序狀態(tài)寄存器。
全文摘要
一種編譯設(shè)備,能夠產(chǎn)生指令序列、以使具有并行處理能力的處理器以低功耗工作,該編譯設(shè)備將源程序翻譯為用于處理器的機(jī)器語言程序,該處理器包括可并行執(zhí)行指令的多個(gè)執(zhí)行單元、以及多個(gè)指令發(fā)出單元,它們發(fā)出分別由多個(gè)執(zhí)行單元執(zhí)行的指令,該編譯設(shè)備包括語法分析單元,用于對源程序進(jìn)行語法分析;中間碼轉(zhuǎn)換單元,用于將經(jīng)過語法分析的源程序轉(zhuǎn)換為中間碼;優(yōu)化單元,用于優(yōu)化中間碼,從而減小在連續(xù)的指令周期中位于與同一指令發(fā)出單元相對應(yīng)位置的指令之間的漢明距離,而不改變對應(yīng)于中間碼的指令之間的相關(guān)性;以及代碼產(chǎn)生單元,用于將優(yōu)化的中間碼轉(zhuǎn)換為機(jī)器語言指令。
文檔編號G06F9/38GK1521623SQ20041000781
公開日2004年8月18日 申請日期2004年1月21日 優(yōu)先權(quán)日2003年1月28日
發(fā)明者瓶子岳人, 小川一, 谷丈暢, 笹川幸宏, 宏 申請人:松下電器產(chǎn)業(yè)株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1