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

資源分配裝置的制作方法

文檔序號(hào):6410127閱讀:129來(lái)源:國(guó)知局
專利名稱:資源分配裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明是關(guān)于在用高級(jí)語(yǔ)言編寫的程序翻譯成機(jī)器語(yǔ)言程序的編譯程序中將程序中的變量分配到寄存器、存貯器等資源的資源分配裝置。
近年來(lái),采用面向機(jī)內(nèi)用途的微處理器以適應(yīng)各種各樣要求的信息設(shè)備正在蓬勃發(fā)展。在這樣的信息設(shè)備開(kāi)發(fā)中,在軟件方面,也要求處理的高速化和徹底降低硬件成本(縮小存貯器尺寸)。因此,在上述信息設(shè)備的開(kāi)發(fā)中,應(yīng)徹底去掉冗長(zhǎng)的傳輸命令、最大限度地發(fā)揮尋址方式等微處理器所具有的功能,采用匯編語(yǔ)言進(jìn)行軟件的開(kāi)發(fā)。但是,由于匯編語(yǔ)言的語(yǔ)法是微處理器的命令體系,所以,開(kāi)發(fā)效率低,在源文件的移植性方面有問(wèn)題。因而采用高級(jí)編程語(yǔ)言來(lái)完成面向機(jī)內(nèi)用途的微處理器的軟件來(lái)提高開(kāi)發(fā)效率,近年引起了很大的關(guān)注。
如采用高級(jí)編程語(yǔ)言,程序員可以用將變量作為操作算符的運(yùn)算來(lái)表現(xiàn)程序中的數(shù)值的保持、運(yùn)算、傳送等處理。此變量可以利用程序任意地定義,而且,可以只采用必要的個(gè)數(shù),所以,程序員可以自由地描述程序。另外,所描述的程序(稱為源程序)經(jīng)過(guò)編譯就成為計(jì)算機(jī)可以理解的機(jī)器語(yǔ)言程序。該機(jī)器語(yǔ)言程序中的運(yùn)算由機(jī)器語(yǔ)言命令表示,而由于該機(jī)器語(yǔ)言命令將寄存器或存貯器作為操作算符,因而必須給上述變量分配寄存器或存貯器。這種分配處理被稱為資源分配處理。此資源分配處理在最大限度發(fā)揮微處理器的能力的軟件開(kāi)發(fā)中受到特別的重視。
在對(duì)現(xiàn)有的資源分配裝置加以描述以前,對(duì)下面的說(shuō)明中使用的術(shù)語(yǔ)進(jìn)行說(shuō)明。
變量的定義、引用、使用設(shè)定變量值稱為“定義”;使用設(shè)定的值稱為“引用”。另外,在程序中定義或引用變量,稱為“使用”。
中間命令為易于處理,編譯程序?qū)⒃闯绦虼a變換成為中間的代碼稱為中間碼,中間代碼的一步叫做中間命令。在中間命令中存在4組或3組等,將它們變換后就生成最終的目標(biāo)碼。另外,將源程序變換成中間命令串的程序叫做中間程序。
生存區(qū)間所謂生存區(qū)間,廣義地說(shuō)就是各變量所保持的值為有效的區(qū)間,狹義地說(shuō)就是指從定義變量值的中間命令到最后引用該被定義的值的中間命令為止的程序中的區(qū)間,生存區(qū)間即以其區(qū)間由所包含的中間命令的集合來(lái)表示。這里,定義變量值的中間命令相當(dāng)于生存區(qū)間的開(kāi)始點(diǎn),在引用在生存區(qū)間中定義的值的中間命令中,最后引用的中間命令相當(dāng)于生存區(qū)間的結(jié)束點(diǎn)。另外,由于以中間命令的集合積來(lái)判斷生存區(qū)間的重復(fù)、非重復(fù),所以,在生存區(qū)間的終始一致的中間命令中,設(shè)定生存區(qū)間不重疊。
中間命令程序(將圖3A所示的源程序變換后的程序)和與該生存區(qū)間的對(duì)應(yīng)的例子示于

圖1中。在圖1中,生存區(qū)間以豎線條s1、s2、s3表示。生存區(qū)間的起始點(diǎn)和結(jié)束點(diǎn)以p1、p2、p3、p4……代表。在圖1中,變量c和d存在2個(gè)起始點(diǎn),這是因?yàn)樽兞縞、d是在判定語(yǔ)言“if(b<10){處理p1}else{處理p2}”的處理p1、p2中定義的緣故。
分配對(duì)象作為資源的分配對(duì)象,還有單純地取變量的情況,但是,對(duì)于一個(gè)變量存在多個(gè)生存區(qū)間時(shí),可以對(duì)各個(gè)生存區(qū)間分配各自的資源元素,所以,在本說(shuō)明書中分配對(duì)象是指變量和生存區(qū)間的組合,分配對(duì)象保持變量和生存區(qū)間。這里,當(dāng)如圖1的變量b那樣存在多個(gè)生存區(qū)間時(shí),為了相互區(qū)別起見(jiàn),對(duì)于分配對(duì)象b1、b2,作為獨(dú)立的分配對(duì)象表示。
而將“定義”、“引用”、“使用”分配對(duì)象保持的變量分別稱之為“定義”、“引用”、“使用”保持該變量的分配對(duì)象。并將分配對(duì)象定義的中間命令和引用的中間命令分別稱做該分配對(duì)象的定義中間命令、引用中間命令,而將定義和引用中間命令合并稱之為使用中間命令。
分配優(yōu)先級(jí)進(jìn)行分配時(shí)用于決定分配對(duì)象的分配順序的參數(shù)。
計(jì)算分配優(yōu)先級(jí)有各種各樣的方法。例如,下面{公式1}中所示即為以程序中的分配對(duì)象的使用率作為分配優(yōu)先級(jí)時(shí)的計(jì)算公式的例子。
{公式1}分配優(yōu)先級(jí)=使用率=分配對(duì)象使用的中間命令的個(gè)數(shù)/生存區(qū)間的長(zhǎng)度另外,在程序中的循環(huán)處理中存在分配對(duì)象使用的中間命令時(shí),亦可在分配優(yōu)先級(jí)中算入其循環(huán)層次。
例如分配優(yōu)先級(jí)=使用率=使用中間命令存在的循環(huán)層次總和/生存區(qū)間的長(zhǎng)度。
資源元素是計(jì)算機(jī)硬件的元素中可以對(duì)分配對(duì)象分配的最小單位。暫時(shí)保存值的緩存器和各個(gè)寄存器、存貯器中的單位地址的存貯器元素即為其例子。0號(hào)寄存器、1號(hào)寄存器、地址100的存貯器、地址101的存貯器即分別為別的資源元素。
資源表示完成相同功能的資源元素的集合。
例如,在資源中存在寄存器和存貯器。另外,寄存器能像地址寄存器(AR)、數(shù)據(jù)寄存器(DR)、全局寄存器、局部寄存器這樣按完成相同功能來(lái)加以分類。存貯器則能像高速存貯器、低速存貯器那樣以實(shí)現(xiàn)相同功能來(lái)分類。這樣,只要資源元素能按完成相同功能加以分類,則其分類就成為各個(gè)資源。
干涉圖形是用圖形來(lái)表示分配對(duì)象與分配對(duì)象之間的生存區(qū)間的重疊的圖象。
干涉圖形是以分配對(duì)象作為圖形的頂點(diǎn),以生存區(qū)間作為相互連結(jié)重疊的分配對(duì)象(頂點(diǎn))的邊來(lái)描繪的。
頂點(diǎn)的次數(shù)在干涉圖形中,是與頂點(diǎn)連接的邊數(shù)。
圖2是編譯程序的結(jié)構(gòu)圖。編譯程序由語(yǔ)法分析設(shè)備11、優(yōu)化設(shè)備12、資源分配設(shè)備63、代碼生成設(shè)備14組成。下面,利用圖1、圖2的結(jié)構(gòu)圖及圖3A、3B、3C的說(shuō)明圖說(shuō)明該編譯程序的各組成部分。
語(yǔ)法分析設(shè)備11對(duì)作為文件存貯在存貯裝置(圖外)中的源程序進(jìn)行句法分析、語(yǔ)法分析和語(yǔ)義分析,將源程序變換成中間程序。例如,將圖3A的源程序變換成圖1的中間程序。
優(yōu)化設(shè)備12為了改善最后生成的機(jī)器語(yǔ)言程序的程序大小及處理執(zhí)行時(shí)間對(duì)中間程序作優(yōu)化處理。由于優(yōu)化過(guò)程的細(xì)節(jié)不是本發(fā)明的主要著眼點(diǎn),所以,說(shuō)明從略,僅對(duì)與資源分配處理特別相關(guān)點(diǎn)加以說(shuō)明。優(yōu)化操作中包含有稱為基本分塊化、控制流分析、數(shù)據(jù)流分析的操作?;痉謮K化處理是將處理對(duì)象程序分割成基本程序塊。
現(xiàn)對(duì)這種分割處理作簡(jiǎn)單說(shuō)明。首先,優(yōu)化設(shè)備12檢測(cè)中間程序的最初的中間命令、無(wú)條件或條件轉(zhuǎn)移的目的中間命令、無(wú)條件或條件轉(zhuǎn)移之后的中間命令,將所檢測(cè)的這些作為引導(dǎo)。優(yōu)化設(shè)備12,由此引導(dǎo)開(kāi)始提取直至下一引導(dǎo)的前一個(gè)或直至程序的最后為止的一系列中間命令。利用該提取處理得到的命令串稱為基本程序塊,作為以后的處理單位。
控制流分析是指對(duì)各基本程序塊間的控制流程進(jìn)行分析。
數(shù)據(jù)流分析是指對(duì)各基本程序塊中各個(gè)的變量在何處定義,在何處被引用的情況進(jìn)行分析。參照這些分析結(jié)果可以獲得變量的生存區(qū)間的信息。
資源分配設(shè)備63采用作為資源分配用算法之一的利用圖形退化的圖形彩色法,將寄存器、存貯器分配給中間程序中的分配對(duì)象。利用圖形退化的圖形彩色法是指在進(jìn)行干涉圖形各頂點(diǎn)的分色時(shí)按照如果以邊連接就涂不同的顏色的規(guī)則近似地以最少的顏色數(shù)來(lái)進(jìn)行干涉圖形各頂點(diǎn)的分色的算法。圖3A的程序中的分配對(duì)象通過(guò)資源分配處理,如圖3B那樣分配資源元素。在本圖中,示出了對(duì)圖3A所示的分配對(duì)象分配資源元素R0,對(duì)分配對(duì)象b2分配資源元素R2。
代碼生成裝置14如圖3c所示的那樣使中間程序內(nèi)各中間命令實(shí)現(xiàn)機(jī)器語(yǔ)言命令化,將中間程序變換成目標(biāo)機(jī)器能識(shí)讀的機(jī)器語(yǔ)言程序。將這樣由代碼生成裝置14變換的機(jī)器語(yǔ)言程序稱為目標(biāo)程序。此目標(biāo)程序中的機(jī)器語(yǔ)言命令與圖1的源程序和中間程序的對(duì)應(yīng)用符號(hào)①②③④表示。在上述機(jī)器語(yǔ)言命令化中,對(duì)各機(jī)器語(yǔ)言命令的操作數(shù)使用圖3B中所示的資源分配結(jié)果。另外,圖中的傳輸命令t11、t12、t13、t14、t15……是為了圖1的中間程序的各中間命令的處理利用機(jī)器語(yǔ)言命令實(shí)現(xiàn)而由代碼生成設(shè)備14生成的。按照資源分配的結(jié)果,也有可能某幾個(gè)這種傳送命令是不用的。在圖3c中,由于分配對(duì)象b2和c分配給同一寄存器,所以,⑦是無(wú)需生成傳送命令的例子。
下面對(duì)資源分配設(shè)備63進(jìn)行說(shuō)明。上述采用圖形彩色法的資源分配處理的詳情在下列文獻(xiàn)中有記載。
作為現(xiàn)有的資源分配方式,特別是寄存器的分配方式的有[1]A.V.Aho,R.Sethi,J.D.Ullman“CompilersPrinciples,Techniques and Tools(編譯程序原理,技術(shù)及工具)”,Addison-wesley,1986[2]Chaitin“Register Allocation and Spilling via graphcoloring(通過(guò)圖形彩色進(jìn)行寄存器分配和散失)”US Patenr No.4 571 678,F(xiàn)eb.18,1986[3]Frederick Chow,John Hennessy“Register Allocation byPriority-based Coloring(利用優(yōu)先級(jí)的彩色進(jìn)行寄存器分配)”,Compnter Systems Laboratory,Stanford University[4]David Bornstein,…Ron Y.Pinter“Spill Codeminimization techniques of ontimizing compilers(優(yōu)化編譯程序的散失碼最小化技術(shù))”,SIGPLAN 1989,IBM Israel Science andTechonolugy Techniow City Haifa Israel[5]佐佐政孝“プロゲラミング言語(yǔ)處理系(編程語(yǔ)言處理系統(tǒng))”,巖波書店レヅスタ割付け(寄存器分配)p420~p423。森、他“復(fù)合バンク機(jī)構(gòu)み考慮レた系統(tǒng)的存レジスタ割當(dāng)て方式とその一般化(考慮復(fù)合存貯裝置的系統(tǒng)的寄存器分配方式及其通用化)”,情報(bào)處理學(xué)會(huì)Vol.30,No,6,Jun,1989(基本上是以基于寄存器彩色法為主流。)上述資源分配設(shè)備63的結(jié)構(gòu)示于圖4。如圖4所示,資源分配設(shè)備63具有根據(jù)優(yōu)化設(shè)備12的處理結(jié)果生成分配對(duì)象的分配對(duì)象生成部分71、保存由分配對(duì)象生成部71所生成的分配對(duì)象的分配對(duì)象保持部分72、應(yīng)用上述{公式1}所示的計(jì)算式計(jì)算并存儲(chǔ)該保持部所保持的各分配對(duì)象的優(yōu)先級(jí)的優(yōu)先級(jí)計(jì)算部73、存貯關(guān)于圖1所示的各分配對(duì)象的生存區(qū)間的信息和該生存區(qū)間如何重疊的信息的生存區(qū)間信息存貯部74、將保持部所保持的全部分配對(duì)象展開(kāi)成干涉圖形狀的展開(kāi)部75、用于展開(kāi)部進(jìn)行展開(kāi)用的緩存器76、用于裝載全部由展開(kāi)部暫時(shí)展開(kāi)的分配對(duì)象的堆棧77、以上述利用圖形退化的圖形彩色法進(jìn)行資源分配的控制部80和以圖3B的形式存貯資源分配結(jié)果的存貯部78。
圖5A、5B及圖6A~6I用來(lái)說(shuō)明利用圖形退化的圖形彩色法?,F(xiàn)在利用這些圖來(lái)說(shuō)明上述資源分配設(shè)備63的處理情況。這里,設(shè)能分配的寄存器為三個(gè),沒(méi)有分配給寄存器的即分配主存貯器。
上述展開(kāi)部75用圖5A所示的干涉圖形表示圖1所示的分配對(duì)象和該分配對(duì)象的生存區(qū)間的重疊。在這樣的干涉圖形中,各分配對(duì)象具有怎樣的分配對(duì)象和生存區(qū)間的重疊用由頂點(diǎn)發(fā)出的邊數(shù)(次數(shù))表示。另外,由于在圖5B所示的分配對(duì)象中生存區(qū)間的終點(diǎn)和始點(diǎn)在1中間命令中彼此相一致的(圖1的分配對(duì)象b2、c)可看作是一個(gè)分配對(duì)象,所以,圖5B所示的控制部80將各自相對(duì)應(yīng)的頂點(diǎn)加以結(jié)合來(lái)簡(jiǎn)化干涉圖形(圖5B分配對(duì)象b2、c)。這樣簡(jiǎn)化之后干涉圖形的頂點(diǎn)中出現(xiàn)高低不同的現(xiàn)象,頂點(diǎn)的次數(shù)在寄存器的數(shù)量小于3時(shí)的頂點(diǎn)稱為次數(shù)低的頂點(diǎn),次數(shù)大于寄存器的數(shù)量的頂點(diǎn)稱為次數(shù)高的頂點(diǎn)。這種次數(shù)的高低被用作為圖形退化的成立條件。所謂圖形退化是指,如圖6A的矢量y11、y12指示的那樣按由{公式1}求得優(yōu)先級(jí)低的順序消除次數(shù)低的頂點(diǎn),將對(duì)消除的頂點(diǎn)的分配對(duì)象裝載入后進(jìn)先出式的堆棧區(qū)內(nèi),消除e2和d的結(jié)果是圖5A和5B所示的干涉圖形向圖6B所示狀態(tài)變遷。
在此圖6B的狀態(tài)下,由于所有頂點(diǎn)的次數(shù)都高,所以,上述條件不成立。因此,在這些頂點(diǎn)中,如矢量y13所示的那樣,對(duì)優(yōu)先級(jí)最低的分配對(duì)象b1分配存貯器消除頂點(diǎn)b1。通過(guò)消除該頂點(diǎn)b1,干涉圖形向圖6c變遷,上述成立條件再次成立。在圖6c的狀態(tài)下再次反復(fù)進(jìn)行圖形退化處理,如圖6D所示的那樣將全部分配對(duì)象裝入堆棧。在這樣裝載處理結(jié)果之后,進(jìn)行資源分配處理。首先,如圖6E所示從堆棧頂點(diǎn)取出分配對(duì)象a,將寄存器R0分配給分配對(duì)象a,同樣,從堆棧頂點(diǎn)取出分配對(duì)象e1、b2c,如圖6F、6G所示,將寄存器R1、R2分配給分配對(duì)象e1、b2c。下一順序的分配對(duì)象e2、d與b2c的生存區(qū)間重疊,但與分配對(duì)象a、e1的生存區(qū)間不重疊,所以,如圖6H中所示,將能分配的寄存器中號(hào)碼最小的寄存器R0分配到分配對(duì)象e2,同樣,如圖6I所示,將寄存器R1分配給分配對(duì)象d。借助這樣的分配處理,可將不同的寄存器分配給生存區(qū)間相互重疊的分配對(duì)象。
上述分配對(duì)象a、b2、c、d、e1、e2、b1通過(guò)資源分配處理分配某個(gè)資源元素,在C語(yǔ)言等高級(jí)語(yǔ)言中存在預(yù)先設(shè)定與分配對(duì)象的組合的寄存器。這就是為了實(shí)現(xiàn)提高函數(shù)調(diào)用操作的效率所采用的寄存器,稱為自變量寄存器、返回值寄存器、破壞性寄存器。
自變量寄存器是指在調(diào)用函數(shù)時(shí)以寄存器引渡自變量所用的寄存器。中間程序中作為自變量使用的分配對(duì)象分配這種自變量寄存器。
返回值寄存器是用于送回函數(shù)調(diào)用的返回值的寄存器。中間程序中用于送回返回值的分配對(duì)象分配此返回值寄存器。
破壞性寄存器是分配給在函數(shù)調(diào)用開(kāi)始和結(jié)束時(shí)的存放值無(wú)需保留的寄存器。這種破壞性寄存器的目的是為減輕函數(shù)調(diào)用的總開(kāi)銷。在進(jìn)行上述函數(shù)調(diào)用時(shí),利用在所調(diào)用的函數(shù)內(nèi)的處理可以改寫各寄存器的內(nèi)容,在函數(shù)調(diào)用的前后必須進(jìn)行寄存器內(nèi)容的保存、復(fù)元。但是,由于對(duì)全部寄存器進(jìn)行這種保存、復(fù)元操作會(huì)使函數(shù)調(diào)用操作的總開(kāi)銷增大,因此,預(yù)先設(shè)定不必進(jìn)行寄存器內(nèi)容的保存、復(fù)元作業(yè)的破壞性寄存器,為了在生存區(qū)間不合有分配對(duì)象中的函數(shù)調(diào)用命令,還是分配破壞性寄存器,以使保存、復(fù)元操作減少到最低限度。
但是,按照上述現(xiàn)有技術(shù)的資源分配設(shè)備,則存在只能進(jìn)行使目標(biāo)程序的執(zhí)行時(shí)間、存貯器尺寸增大的資源分配的問(wèn)題?,F(xiàn)參照?qǐng)D7對(duì)此問(wèn)題進(jìn)行說(shuō)明。此圖中的豎線表示分配對(duì)象的生存區(qū)間,其中,空白部分表示未分配的分配對(duì)象,畫斜線的部分表示已經(jīng)分配的分配對(duì)象。另一方面,在此圖中,由于表示分配對(duì)象x0、x1、x5的豎線具有與表示分割對(duì)象z0、z1、z2的豎線平行的部分,可見(jiàn)它們生存區(qū)間相互重疊。
例如,如圖7所示,生存區(qū)間相互連接的那些分配對(duì)象之間(分配對(duì)象x0、x1、x2、x3、x4、x5)通過(guò)上述頂點(diǎn)結(jié)合而結(jié)合為一個(gè)分配對(duì)象y。結(jié)合的分配對(duì)象y與已經(jīng)分配了資源元素R0的分配對(duì)象z0、分配了資源元素R1的分配對(duì)象z1、分配了資源元素R2的分配對(duì)象z2的生存區(qū)間重疊。這樣,如果與已經(jīng)分配的分配對(duì)象的生存區(qū)間相重疊,則分配給已經(jīng)分配的分配對(duì)象的資源元素(資源元素R0、R1、R2)就不能分配給分配對(duì)象y。因此,組成分配對(duì)象y的分配對(duì)象x0、x1、x2、x3、x4、x5便全部分配了存貯器。如果將這些分配對(duì)象全都分配給存貯器,則將這些分配對(duì)象作為操作算符使用的中間命令就全部變換為將存貯器作為操作算符的機(jī)器語(yǔ)言命令。一般說(shuō)來(lái),操作算符在存貯器的機(jī)器語(yǔ)言命令的執(zhí)行速度慢、存貯器的尺寸大時(shí),將對(duì)目標(biāo)程序的執(zhí)行時(shí)間和存貯器的尺寸產(chǎn)生不良的影響。
另外,當(dāng)資源分為3種以上的功能時(shí),若不進(jìn)行與資源的功能對(duì)應(yīng)的分配對(duì)象的分配,就會(huì)對(duì)目標(biāo)程序的執(zhí)行時(shí)間和存貯器尺寸產(chǎn)生不良的影響。
在上述文獻(xiàn)中,[6]所記載的內(nèi)容是描述關(guān)于參照地址寄存器、數(shù)據(jù)寄存器等多種不同類的寄存器進(jìn)行訪問(wèn)所需要的成本的資源分配。在該文獻(xiàn)中,附加所謂的“保持C語(yǔ)言中的指針式那樣的地址型變量的分配對(duì)象全都分配至地址寄存器”的規(guī)則。但在地址型的分配對(duì)象中,也可以存在加法運(yùn)算和減法運(yùn)算中多次使用,并且,少量進(jìn)行存貯器作的間接引用的分配對(duì)象。關(guān)于數(shù)據(jù)寄存器,在具有高速加法運(yùn)算和減法運(yùn)算的目標(biāo)機(jī)器中,如果一律將這樣的分配對(duì)象分配到地址寄存器,在目標(biāo)程序中就會(huì)產(chǎn)生多個(gè)從地址寄存器向數(shù)據(jù)寄存器傳送的傳輸命令,結(jié)果,將使目標(biāo)程序的存貯器的尺寸和執(zhí)行時(shí)間增大。
這樣,只單純考慮在訪問(wèn)某種寄存器時(shí)所必須的成本,反而會(huì)招致生成很多傳輸命令。
另外,還存在有無(wú)法實(shí)現(xiàn)可能直接利用為了改善函數(shù)調(diào)用效率而設(shè)定的自變量寄存器、返回值寄存器、破壞性寄存器的存貯值進(jìn)行資源分配方面的問(wèn)題。
圖形彩色法是一種為了最適當(dāng)?shù)貐^(qū)別干涉圖形的頂點(diǎn)的近似算法。由于自變量寄存器、返回值寄存器、破壞性寄存器是在算法執(zhí)行前預(yù)先分配給分配對(duì)象的資源元素,所以,在干涉圖形中這些寄存器被看做是著色的頂點(diǎn)。為了實(shí)現(xiàn)能直接利用返回值寄存器、自變量寄存器的存放值的資源分配,如果將著色的頂點(diǎn)編入干涉圖形內(nèi)是有效的,就必須進(jìn)行將其他頂點(diǎn)著色成這種顏色的處理,這就超出了圖形彩色法的范圍。鑒于上述理由,通常作為圖形彩色法中分配的寄存器必須準(zhǔn)備用于各個(gè)獨(dú)立的自變量寄存器、返回值寄存器、破壞性寄存器的寄存器。并且,為了使用自變量寄存器、返回值寄存器的存放值,需要分配用寄存器的傳輸命令。這樣,如果需要傳輸命令,則必然增大與追加該命令對(duì)應(yīng)的目標(biāo)程序的存貯器大小和執(zhí)行時(shí)間。
上述問(wèn)題所造成的影響僅在寄存器的數(shù)量足夠充裕的情況下才可以不考慮。但是,如許多面向機(jī)內(nèi)用途的微處理器那樣限制寄存器的數(shù)量時(shí),或者在設(shè)置完成功能不同的寄存器數(shù)量少但品種多時(shí),這些問(wèn)題就顯得很突出了。
本發(fā)明的第一目的在于提供一種能按優(yōu)先級(jí)順序?qū)①Y源元素分配給分配對(duì)象、并且可以通過(guò)將傳送命令的生成數(shù)量限制到最低限度而將目標(biāo)程序的存貯器大小和執(zhí)行時(shí)間限制到最低限度的資源分配設(shè)備。
本發(fā)明的第二目的是提供能對(duì)嵌套級(jí)深的場(chǎng)所優(yōu)先分配寄存器并能獲得將這種已分配的寄存器不斷向嵌套級(jí)淺的場(chǎng)所擴(kuò)散的靈活的分配結(jié)果的資源分配設(shè)備。
本發(fā)明的第三目的在于提供能在使用頻度高的場(chǎng)所優(yōu)先分配寄存器并能獲得不斷地將這些已經(jīng)分配的寄存器擴(kuò)散到使用頻度低的場(chǎng)所的靈活的分配結(jié)果的資源分配設(shè)備。
本發(fā)明的第四目的是提供詳細(xì)地掌握生存區(qū)間的連接和已分配場(chǎng)所的遠(yuǎn)近及重疊而進(jìn)行資源分配的資源分配設(shè)備。
本發(fā)明的第五目的在于提供能夠確實(shí)地理解微處理器具有的資源的各個(gè)功能并適當(dāng)?shù)胤峙浣o分配對(duì)象的資源分配設(shè)備。
本發(fā)明的第六目的是提供自變量寄存器、返回值寄存器、破壞性寄存器等分配的對(duì)象預(yù)先確定的分配對(duì)象能夠?qū)崿F(xiàn)將其資源向周圍擴(kuò)展的那樣靈活的資源分配的資源分配設(shè)備。
本發(fā)明的第一、第四目的可以按如下方式達(dá)到,即在將以高級(jí)語(yǔ)言編寫的程序翻譯成為機(jī)器語(yǔ)言程序的編譯程序中使用的、生成多個(gè)作為以編程語(yǔ)言描述的程序中的變量與生存區(qū)間的組合的分配對(duì)象、順序?qū)⒕哂屑拇嫫鳌⒋尜A器等硬件資源的資源元素分配給所生成的分配對(duì)象的資源分配設(shè)備中,具有根據(jù)分配對(duì)象中已經(jīng)被分配的分配對(duì)象的生存區(qū)間與下一個(gè)應(yīng)分配的分配對(duì)象的生存區(qū)間之間在程序中具有怎樣的位置關(guān)系來(lái)對(duì)各資源元素計(jì)算出表示下一個(gè)應(yīng)分配的分配對(duì)象中哪個(gè)資源元素合適的得失值的得失值計(jì)算裝置、根據(jù)對(duì)各資源元素計(jì)算出的得失值的大小,將哪一資源元素分配給應(yīng)分配的分配對(duì)象的分配裝置和反復(fù)啟動(dòng)得失值計(jì)算裝置及分配裝置直至所有分配對(duì)象均被分配為止的控制裝置。
利用這種結(jié)構(gòu),生存區(qū)間具有互相連接的位置關(guān)系的多個(gè)分配對(duì)象群根據(jù)生存區(qū)間的長(zhǎng)短增加得失值,另外,因?yàn)樵谠撊褐械姆峙鋵?duì)象中盡管已分配的分配對(duì)象和生存區(qū)間重復(fù),分配不同的資源元素,所以,生存區(qū)間相互連接的多個(gè)分配對(duì)象不是一律地分配到同一資源元素,而是以對(duì)生存區(qū)間的遠(yuǎn)近發(fā)生影響來(lái)進(jìn)行資源分配。因而,周圍的分配狀態(tài)將影響下次的資源分配,從而可以進(jìn)一步減少傳輸命令。
這里,如所述的那樣,上述資源分配設(shè)備具有判定程序中各分配對(duì)象的位置關(guān)系的位置關(guān)系判定裝置。此位置關(guān)系判定裝置設(shè)置有判定已被分配資源元素的分配對(duì)象的生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間是否重復(fù)的重復(fù)關(guān)系判定裝置,和判定已被分配資源元素的分配對(duì)象的生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間是否連接的已分配—被分配間連續(xù)判定裝置。得失值計(jì)算裝置設(shè)置有在由已分配—被分配間連續(xù)判定裝置判定應(yīng)分配的分配對(duì)象與生存區(qū)間為連接時(shí),就根據(jù)從已被分配資源元素的分配對(duì)象到應(yīng)分配的分配對(duì)象的生存區(qū)間長(zhǎng)短,使判定為連接的已分配的分配對(duì)象增加被分配的資源元素的得失值的第一增加部。分配裝置不將分配給具有由重復(fù)關(guān)系判定裝置判定生存區(qū)間重復(fù)的已分配的分配對(duì)象的資源元素分配給應(yīng)分配的分配對(duì)象,而將判定為生存區(qū)間不重復(fù)的已分配的分配對(duì)象中得失值最大的資源元素分配給應(yīng)分配的分配對(duì)象。
如所述的那樣,位置關(guān)系判定裝置設(shè)置有檢測(cè)具有與已分配了資源元素的分配對(duì)象重疊的生存區(qū)間的未分配的分配對(duì)象的已分配一側(cè)的重疊分配對(duì)象檢測(cè)裝置和判定所檢測(cè)的未分配的分配對(duì)象的生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間是否連接的未分配—被分配間連續(xù)判定裝置。得失值計(jì)算裝置設(shè)置有當(dāng)判定為連接時(shí)根據(jù)從由已分配一側(cè)的重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象到應(yīng)分配的分配對(duì)象止的生存區(qū)間的長(zhǎng)短減少分配給該已分配的分配對(duì)象的資源元素的得失值的第一減小部。
另外,由于通過(guò)減小得失值從應(yīng)分配的分配對(duì)象角度看分配給發(fā)生損失的位置的分配對(duì)象的資源元素評(píng)估為較低級(jí)的,所以,周圍的分配狀態(tài)將影響下次的資源分配,從而可以大為減少傳輸命令。
如所述的那樣,當(dāng)利用分配畢側(cè)重疊分配檢測(cè)裝置判定有多個(gè)未分配的分配對(duì)象時(shí),未分配—被分配間連續(xù)判定裝置就判斷在被檢測(cè)出的多個(gè)未分配的分配對(duì)象中哪一個(gè)生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間連接。
按照上述就能夠防止通過(guò)檢測(cè)未分配的分配對(duì)象,多次減少已分配的分配對(duì)象所分配的資源元素的得失值,可以防止比其他情況評(píng)價(jià)為較低級(jí)的。
本發(fā)明的第二、三目的如所述的那樣,具有與各分配對(duì)象相對(duì)應(yīng)地存貯反映程序中分配對(duì)象的使用頻度和/或生存區(qū)間的嵌套級(jí)的分配對(duì)象優(yōu)先級(jí)的優(yōu)先級(jí)存貯裝置,得失值計(jì)算裝置和分配裝置按照優(yōu)先級(jí)存貯裝置存貯的優(yōu)先級(jí)順序確定應(yīng)分配的分配對(duì)象。
按照上述由于按照使用頻度或嵌套水平高的順序進(jìn)行資源元素分配,所以,可以實(shí)現(xiàn)計(jì)及生存區(qū)間的位置關(guān)系、使用頻度和嵌套級(jí)的資源分配,從而可以提高目標(biāo)程序的質(zhì)量。
如所述的那樣,位置關(guān)系判定裝置設(shè)置有當(dāng)由得失值計(jì)算裝置對(duì)各資源元素計(jì)算出的得失值在多個(gè)資源元素相互間具有相同大小時(shí),就檢測(cè)具有與應(yīng)分配的分配對(duì)象的生存區(qū)間重疊的生存區(qū)間的未分配的分配對(duì)象的被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置,和判定檢測(cè)的分配對(duì)象的生存區(qū)間與已分配了資源元素的分配對(duì)象的生存區(qū)間是否連接的未分配—已分配間連續(xù)判定裝置。得失值計(jì)算裝置設(shè)置有檢測(cè)由被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象的優(yōu)先級(jí)的優(yōu)先級(jí)檢測(cè)部計(jì)算從已分配的分配對(duì)象到被檢測(cè)得的未分配的分配對(duì)象的生存區(qū)間長(zhǎng)短的第一長(zhǎng)短計(jì)算部和將檢測(cè)的優(yōu)先級(jí)乘以所計(jì)算出的長(zhǎng)短值,并根據(jù)此計(jì)算結(jié)果減小該已分配的資源元素的得失值的第二減小部。
由此,按照上述,由于通過(guò)減小得失值,從應(yīng)分配對(duì)象方面看分配給發(fā)生損失的位置的分配對(duì)象的資源元素評(píng)價(jià)為較低級(jí)的,所以,周圍的分配狀態(tài)對(duì)下次的資源分割產(chǎn)生影響,從而可以大為減少傳輸命令。
如所述的那樣,位置關(guān)系判定裝置設(shè)置有,檢測(cè)具有與已分配了資源元素的分配對(duì)象的生存區(qū)間重疊的生存區(qū)間的未分配的分配對(duì)象的已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置和判定由被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的生存區(qū)間是否與由已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的生存區(qū)間相連接的未分配—未分配間連續(xù)判定裝置。得失值計(jì)算裝置設(shè)置有,計(jì)算從由被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象開(kāi)始到由已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的生存區(qū)間長(zhǎng)短的第二長(zhǎng)短計(jì)算部和將檢測(cè)的優(yōu)先級(jí)乘以計(jì)算出的減短值并根據(jù)此乘法結(jié)果使分配給已分配的分配對(duì)象的資源元素的得失值增大的第二增加部。
按照上述,由于通過(guò)增大得失值從應(yīng)分配的分配對(duì)象方面看分配給獲益的位置的分配對(duì)象的資源元素評(píng)價(jià)為較高級(jí)的,所以,周圍的分配狀態(tài)對(duì)下次的資源分配產(chǎn)生影響,從而可以大為減少傳輸命令。
如所示的那樣,當(dāng)由已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置判定為多個(gè)未分配的分配對(duì)象時(shí),未分配—未分配間連續(xù)判定裝置判斷所檢測(cè)的多個(gè)未分配的分配對(duì)象中哪一個(gè)生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間連接。
按照上述,通過(guò)檢測(cè)未分配的分配對(duì)象,多次減少分配給已分配的分配對(duì)象的資源元素的得失值,可以防止比其他情況評(píng)價(jià)為較低級(jí)的。
如所述的那樣,資源分配設(shè)備設(shè)置有對(duì)應(yīng)地存貯全部資源元素和各個(gè)別資源元素的得失值的初始值的得失值存貯部。第一及第二增加部使得失值存貯部存放的各資源元素的得失值增加,第一及第二減少部使失值存貯部存放的各資源元素的得失值減小。
按照上述,得失值存貯部所存放的各資源元素的得失值由第一及第二增加部增加,得失值存貯部中所存放的各資源元素的得失值由第一及第二減小部減小。因此,從應(yīng)分配的分配對(duì)象方面看,即使將同一資源元素分配給獲益的位置和發(fā)生損失的位置,也能客觀地評(píng)價(jià)該資源元素帶來(lái)何種程度的利益或損失,從而可以更周密進(jìn)行資源分配。或者,由于得失值存貯部對(duì)應(yīng)地存放全部資源元素和各資源元素的得失值的累計(jì)的初始值,所以,如果全部資源元素分配給發(fā)生損失的位置,則不論未分配給哪一個(gè)分配對(duì)象的資源元素的得失值都比較大。因此,可以將不論未分配給哪個(gè)分配對(duì)象的資源元素分配到應(yīng)分配的分配對(duì)象。
如所述的那樣,本發(fā)明的第五目的,可以按如下方式達(dá)到,即具有當(dāng)在程序中分配各資源的資源元素時(shí),通過(guò)對(duì)應(yīng)分配的分配對(duì)象與各資源元素的組合計(jì)算出其集合值的推斷值來(lái)估算應(yīng)分配的分配對(duì)象定義的全部定義命令和使用的全部使用命令的執(zhí)行周期和/或代碼大小的總和值達(dá)到何種程度的推斷裝置和比較各資源元素的推斷結(jié)果即推斷值并判斷推斷值為最小的資源元素是一個(gè)還是多個(gè)的資源元素單復(fù)判定裝置。當(dāng)判定為一個(gè)時(shí),前述分配裝置將推斷值最小的資源元素分配給應(yīng)分配的分配對(duì)象,當(dāng)判定為多個(gè)時(shí)將得失值為最大的資源元素分配給應(yīng)分配的分配對(duì)象。
按照上述,在切換使用推斷值還是使用得失值后而使用推斷值時(shí),由于能將代碼大小及執(zhí)行時(shí)間反映到資源分配中,所以,可以充分靈活運(yùn)用微處理器所具有的命令的詳細(xì)的成本信息,為了從分為三種以上的功能的資源分配給分配對(duì)象,所以選出合適的多個(gè)資源元素。在開(kāi)發(fā)面向具有多個(gè)功能不同的資源的機(jī)構(gòu)用途的微處理器的程序時(shí),如果使用本發(fā)明的編譯程序,就能作成充分發(fā)揮該微處理器具備的功能的目標(biāo)程序。
如所述的那樣,推斷裝置具有使用機(jī)器語(yǔ)言的命令格式對(duì)程序中的分配對(duì)象的全部定義命令及使用命令輸出表示程序中的分配對(duì)象的定義命令及使用命令的信息即命令模式的命令模式輸出部、與由命令模式輸出部輸出的命令模式分別對(duì)應(yīng)地存貯表示在機(jī)器語(yǔ)言命令的各操作數(shù)中應(yīng)用各資源的資源元素時(shí)的該定義命令及使用命令的執(zhí)行周期和/或代碼大小的成本的成本存貯部和由成本存貯部取出與所輸出的命令模式相對(duì)應(yīng)的成本并將所取出的成本按各資源元素求和后將求和所得的總和值作為推斷值的成本總和部。
按照上述,由于為了使分配對(duì)象的定義命令及使用命令實(shí)現(xiàn)機(jī)器語(yǔ)言化而精密地判斷哪種資源的資源元素合適,所以,可以作成充分發(fā)揮目標(biāo)機(jī)器的微處理器所備有的功能的目標(biāo)程序。
如上述所述的那樣,資源分配設(shè)備具有當(dāng)由得失值計(jì)算裝置對(duì)各資源元素計(jì)算出的得失值在多個(gè)不同資源的資源元素之間具有相同的大小時(shí),對(duì)優(yōu)先級(jí)比應(yīng)分配的分配對(duì)象低并在應(yīng)分配的分配對(duì)象之后分配的全部未分配的分配對(duì)象預(yù)測(cè)最適宜的資源元素的預(yù)測(cè)裝置,而上述分配裝置將由預(yù)測(cè)裝置預(yù)測(cè)的資源元素分配給應(yīng)分配的分配對(duì)象。
按照上述,當(dāng)對(duì)已分配的資源元素計(jì)算的得失值在多個(gè)不同的資源的資源元素之間成為同樣大小時(shí),由于分配裝置根據(jù)預(yù)測(cè)為與優(yōu)先級(jí)更低的所有的分配對(duì)象相適應(yīng)的資源元素,將資源元素分配給應(yīng)分配的分配對(duì)象,所以,根據(jù)利用得失值的比較難分優(yōu)劣時(shí),便可進(jìn)行更精密的資源元素的選擇。結(jié)果,便可進(jìn)行優(yōu)先級(jí)更低的全部分配對(duì)象的定義命令、使用命令的執(zhí)行時(shí)間和/或代碼尺度小的資源分配。進(jìn)而,如果這樣分配資源元素,由于在進(jìn)行下一個(gè)分配對(duì)象的分配時(shí)可以繼承該資源元素,所以,生存區(qū)間互相連接的分配對(duì)象能夠分配同一資源元素的可能性就提高了。
如上所述的那樣,預(yù)測(cè)裝置具有如下裝置的結(jié)構(gòu),即檢測(cè)所有具有與應(yīng)分配的分配對(duì)象所具有的生存區(qū)間連接的生存區(qū)間并且優(yōu)先級(jí)比該分配對(duì)象低的未分配的分配對(duì)象的第一后續(xù)分配對(duì)象檢測(cè)裝置,通過(guò)對(duì)由第一后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的全部分配對(duì)象與各資源元素的組合計(jì)算出該總和值的推斷值來(lái)推斷當(dāng)將各資源元素分配給所檢測(cè)的各分配對(duì)象時(shí)該分配對(duì)象定義的全部定義命令和使用的全部使用命令的執(zhí)行周期和/或代碼大小的總和值達(dá)到何種程度的第一推斷裝置、對(duì)由第一后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的每一分配對(duì)象計(jì)數(shù)介于第一后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的各分配對(duì)象與應(yīng)分配的分配對(duì)象之間的連續(xù)的生存區(qū)間的長(zhǎng)度的第一生存區(qū)間長(zhǎng)度計(jì)數(shù)裝置、將對(duì)所檢測(cè)的各分配對(duì)象計(jì)數(shù)的生存區(qū)間的長(zhǎng)短作為加權(quán)值,對(duì)由第一推斷裝置對(duì)檢測(cè)的分配對(duì)象與各資源元素的組合所計(jì)算的推斷值進(jìn)行加權(quán)的第一加權(quán)裝置、將由第一加權(quán)裝置加權(quán)的推斷值對(duì)每一資源元素進(jìn)行求和的第一求和裝置和將由第一求和裝置求和的總和結(jié)果為最小的資源元素判定為與優(yōu)先級(jí)比應(yīng)分配的分配對(duì)象低的未分配的分配對(duì)象最適合的第一最佳資源元素判定裝置。
按照上述,由于在優(yōu)先級(jí)更低、并在應(yīng)分配的分配對(duì)象之后進(jìn)行分配的分配對(duì)象中,根據(jù)生存區(qū)間相互連續(xù)的定義命令、使用命令的執(zhí)行時(shí)間和/或代碼大小的推斷值的大小和未分配的分配對(duì)象離應(yīng)分配的分配對(duì)象多遠(yuǎn)進(jìn)行預(yù)測(cè),所以,位于接近應(yīng)分配的分配對(duì)象的位置上的分配對(duì)象的定義命令、使用命令的執(zhí)行時(shí)間和/或代碼大小評(píng)估為大的,而將位于離應(yīng)分配的分配對(duì)象遠(yuǎn)的位置上的分配對(duì)象的定義命令、使用命令的執(zhí)行時(shí)間和/或代碼大小評(píng)估為小的。因此,只要將同一資源元素分配給生存區(qū)間相互連續(xù)的分配對(duì)象便可提高可能性。結(jié)果,對(duì)于后續(xù)的分配對(duì)象,可以可靠地進(jìn)行使執(zhí)行時(shí)間和/或代碼大小減小的資源元素的預(yù)測(cè)。
如上所述的那樣,預(yù)測(cè)裝置具有如下裝置的結(jié)構(gòu),即當(dāng)由第一最佳資源元素判定裝置判定多個(gè)資源元素最合適時(shí)檢測(cè)生存區(qū)間與應(yīng)分配的分配對(duì)象重疊的未分配的分配對(duì)象和具有與此未分配的分配對(duì)象的生存區(qū)間相連接的生存區(qū)間的未分配的分配對(duì)象的第二后續(xù)分配對(duì)象檢測(cè)裝置、通過(guò)對(duì)檢測(cè)的分配對(duì)象與各資源元素的組合計(jì)算出該總和值的推斷值來(lái)推斷當(dāng)對(duì)由第二后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象分配以各資源元素時(shí)被檢測(cè)的各分配對(duì)象定義的全部定義命令和使用的所有使用命令的執(zhí)行周期和/或代碼大小的總和值達(dá)到何種程度的第二推斷裝置、對(duì)由該第二后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的每一分配對(duì)象計(jì)數(shù)介于應(yīng)分配的分配對(duì)象具有的生存區(qū)間與生存區(qū)間重疊的未分配的分配對(duì)象和具有與此重疊一側(cè)的分配對(duì)象的生存區(qū)間連接的生存區(qū)間的分配對(duì)象之間而連續(xù)的生存區(qū)間長(zhǎng)度的第二生存區(qū)間長(zhǎng)度計(jì)數(shù)裝置、將對(duì)該分配對(duì)象計(jì)數(shù)的生存區(qū)間的長(zhǎng)短和各分配對(duì)象的優(yōu)先級(jí)作為加權(quán)值對(duì)于由第2推斷裝置對(duì)由第二后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象與各資源元素的組合推斷的推斷值進(jìn)行加權(quán)的第二加權(quán)裝置、將經(jīng)第二加權(quán)裝置加權(quán)后的各分配對(duì)象的推斷值對(duì)每一資源元素進(jìn)行求和的第二求和裝置和將由第二求和裝置求和的各資源元素的總和值為最大的資源元素判定為與在應(yīng)分配的分配對(duì)象之后進(jìn)行分配的全部未分配的分配對(duì)象最合適的資源元素的第二最佳資源元素判定裝置。
按照上述,由于在優(yōu)先級(jí)更低并在應(yīng)分配的分配對(duì)象之后進(jìn)行分配的分配對(duì)象中,根據(jù)生存區(qū)間重疊一側(cè)的分配對(duì)象的定義命令、使用命令的執(zhí)行時(shí)間和/或代碼大小的推斷值的比較和應(yīng)分配的分配對(duì)象離未分配的分配對(duì)象多遠(yuǎn)進(jìn)行預(yù)測(cè),所以,對(duì)于后續(xù)的分配對(duì)象,可以可靠地進(jìn)行使執(zhí)行時(shí)間和/或代碼尺度減小的資源元素的預(yù)測(cè)。
如上所述的那樣,第一和第二加權(quán)裝置在由第一和第二生存區(qū)間長(zhǎng)度計(jì)數(shù)裝置計(jì)數(shù)的分配對(duì)象的生存區(qū)間長(zhǎng)度為0時(shí),將1作為生存區(qū)間的長(zhǎng)短進(jìn)行加權(quán),當(dāng)計(jì)數(shù)的生存區(qū)間的長(zhǎng)度不是0時(shí),就計(jì)算該生存區(qū)間長(zhǎng)度的倒數(shù),并將算出的生存區(qū)間長(zhǎng)度的倒數(shù)作為生存區(qū)間的長(zhǎng)短進(jìn)行加權(quán)處理。
按照上述,由于計(jì)算應(yīng)分配的分配對(duì)象的生存區(qū)間長(zhǎng)度與由求和部求和的生存區(qū)間長(zhǎng)度之和的倒數(shù)、并由倒數(shù)計(jì)算部將計(jì)算結(jié)果作為生存區(qū)間的長(zhǎng)短,所以,可以將生存區(qū)間的長(zhǎng)度之和反映在資源分配中,從而可以更多地減少傳輸命令。
如上所述的那樣,資源分配設(shè)備中還具有存貯多個(gè)使用機(jī)器語(yǔ)言命令格式表示程序中的分配對(duì)象的定義命令和使用命令的信息即命令模式和與各命令模式對(duì)應(yīng)地存貯表示在機(jī)器語(yǔ)言命令的各操作數(shù)中使用各資源的資源元素時(shí)程序中的分配對(duì)象的定義命令及使用命令的執(zhí)行周期和/或代碼大小的成本的成本存貯裝置。第一推斷裝置具有讀取與由第一后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的所有定義命令及使用命令對(duì)應(yīng)的命令模式并將讀出的命令模式輸出的第一命令模式輸出部和從成本存貯裝置取出與輸出的命令模式對(duì)應(yīng)的成本并將取出的成本對(duì)每一資源元素求和從而將求和的總和值作為推斷值的第一成本求和部。第二推斷裝置具有讀出與由第二后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的全部定義命令及使用命令對(duì)應(yīng)的命令模式并將讀出的命令模式輸出的第二命令模式輸出部和從成本存貯裝置取出與輸出的命令模式對(duì)應(yīng)的成本并將取出的成本對(duì)各資源元素進(jìn)行求和從而將求和的總和值作為推斷值的第二成本求和部。
按照上述,由于為了使分配對(duì)象的定義命令及使用命令實(shí)現(xiàn)機(jī)器語(yǔ)言命令化而精密地判斷哪一資源的資源元素最適合,所以,對(duì)于后續(xù)的分配對(duì)象,可以更可靠地進(jìn)行使執(zhí)行時(shí)間和/或代碼大小減少的資源元素的預(yù)測(cè)。
本發(fā)明的第六目的,可以如所述的那樣,利用如下方式實(shí)現(xiàn),即資源分配設(shè)備進(jìn)而還具有從前述程序中檢測(cè)應(yīng)分配的資源元素預(yù)先確定的分配對(duì)象的預(yù)約分配對(duì)象檢測(cè)裝置和存貯應(yīng)分配給預(yù)約分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象的資源元素的預(yù)約資源元素存貯裝置。分配裝置將應(yīng)分配的資源元素分配給由預(yù)約分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象,并在分配之后將某個(gè)資源元素分配給優(yōu)先級(jí)最大的分配對(duì)象。
按照上述,可以將自變量寄存器、返回值寄存器、破壞性寄存器分配給其他分配對(duì)象,從而可以進(jìn)行能直接利用自變量寄存器、返回值寄存器、破壞性寄存器的存貯值的資源分配。因此,可以更多地減少傳輸命令。
如所述的那樣,分配對(duì)象的生存區(qū)間的起始點(diǎn)和結(jié)束點(diǎn)均用程序中的命令位置信息表示。資源分配設(shè)備進(jìn)而還具有分別對(duì)應(yīng)地存貯程序中的分配對(duì)象、與各分配對(duì)象的生存區(qū)間的起始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⒑团c各分配對(duì)象的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔⒌钠鹗冀Y(jié)束點(diǎn)存貯裝置、參照起始結(jié)束點(diǎn)存貯裝置查找出程序中與各分配對(duì)象的生存區(qū)間的起始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⒑团c結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔?、并將找出的分配?duì)象和程序中的分配對(duì)象作成同一生存區(qū)間繼承關(guān)系集合的第二集合化裝置、參照起始結(jié)束點(diǎn)存貯裝置查找出程序中與各分配對(duì)象的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔⒑团c結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔?,并將找出的分配?duì)象和程序中的分配對(duì)象作成同一生存區(qū)間繼承關(guān)系集合的第二集合化裝置和將程序中的分配對(duì)象與由第一及第二集合化裝置進(jìn)行集合化處理后的生存區(qū)間繼承集合對(duì)應(yīng)地寫入生存區(qū)間繼承關(guān)系集合存貯部的寫入裝置。
按照上述,由于利用寫入裝置將程序中的分配對(duì)象和由第一及第二集合化裝置進(jìn)行集合化處理后的生存區(qū)間繼承集合對(duì)應(yīng)地寫入生存區(qū)間繼承關(guān)系集合存貯部,所以,可以更有效地判斷生存區(qū)間的繼承和非繼承。
如所述的那樣,是一種將用高級(jí)語(yǔ)言編寫的程序翻譯成機(jī)器語(yǔ)言程序的編譯程序并將寄存器、存貯器等硬件即資源具有的資源元素分配給用編程語(yǔ)言描述的程序中的變量和生存區(qū)間的組合即分配對(duì)象的資源分配設(shè)備,該資源分配設(shè)備具有與優(yōu)先級(jí)對(duì)應(yīng)地保持程序中的分配對(duì)象的分配對(duì)象保持裝置、從前述分配對(duì)象保持裝置取出優(yōu)先級(jí)最高的分配對(duì)象將某個(gè)資源元素分給此優(yōu)先級(jí)最高的分配對(duì)象的第一資源元素分配裝置、從前述分配對(duì)象保持裝置中取出相對(duì)于此前分配的分配對(duì)象的優(yōu)先級(jí),具有下一位的優(yōu)先級(jí)的分配對(duì)象的分配對(duì)象取出裝置、對(duì)于前述分配對(duì)象取出裝置取出的分配對(duì)象,檢測(cè)生存區(qū)間重疊的分配對(duì)象的一次重疊分配對(duì)象檢測(cè)裝置、對(duì)于前述一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象檢測(cè)已分配的資源元素的資源元素檢測(cè)裝置、檢測(cè)已分配了與檢測(cè)的資源元素不同的資源元素的全部分配對(duì)象的分配對(duì)象—資源元素檢測(cè)裝置、在由分配對(duì)象—資源元素檢測(cè)裝置檢測(cè)的已分配的分配對(duì)象中判斷生存區(qū)間與由分配對(duì)象取出裝置取出的分配對(duì)象連接的全部分配對(duì)象的增益一側(cè)連續(xù)已分配的分配對(duì)象判斷裝置、根據(jù)從判定為連續(xù)的已分配的分配對(duì)象到由分配對(duì)象取出裝置取出的分配對(duì)象的生存區(qū)間長(zhǎng)短,對(duì)分配給判定為生存區(qū)間連續(xù)的分配對(duì)象的全部資源元素,計(jì)算出表示已分配給分配對(duì)象的資源元素對(duì)此后要分配的分配對(duì)象適合到何種程度數(shù)值即得失值的第一得失值計(jì)算裝置、將計(jì)算出的得失值對(duì)由分配對(duì)象—資源元素檢測(cè)裝置所判定的各資源元素進(jìn)行累計(jì)的累計(jì)裝置、將由累計(jì)裝置累計(jì)的累計(jì)值為最大的資源元素分配給由分配對(duì)象取出裝置取出的分配對(duì)象的第二分配裝置和反復(fù)起動(dòng)前述分配對(duì)象取出裝置直到全部分配對(duì)象分配完為止的控制裝置。
如所述的那樣,資源分配設(shè)備還具有在由分配對(duì)象—資源元素檢測(cè)裝置檢測(cè)的已分配的分配對(duì)象中判斷生存區(qū)間與由分配對(duì)象取出裝置取出的分配對(duì)象不連接而且生存區(qū)間不重疊的分配對(duì)象的第一非重疊非連續(xù)已分配的分配對(duì)象判斷裝置、對(duì)于生存區(qū)間與由第一非重疊非連續(xù)已分配的分配對(duì)象判斷裝置判斷的已分配的分配對(duì)象的生存區(qū)間重疊的未分配的分配對(duì)象,檢測(cè)生存區(qū)間與由分配對(duì)象取出裝置取出的分配對(duì)象連續(xù)的分配對(duì)象的增益一側(cè)連續(xù)未分配的分配對(duì)象檢測(cè)裝置、根據(jù)從由增益一側(cè)連續(xù)未分配的分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象到由分配對(duì)象取出裝置取出的分配對(duì)象的生存區(qū)間長(zhǎng)短,計(jì)算分配給由第一非重疊非連續(xù)已分配的分配對(duì)象判斷裝置判斷的已分配的分配對(duì)象的資源元素的得失值的第二得失值計(jì)算裝置和從關(guān)于由前述累計(jì)裝置累計(jì)的該資源元素的得失值減去由第二得失值計(jì)算裝置計(jì)算的得失值的第一減法裝置。第二分配裝置將由第一減法裝置對(duì)得失值進(jìn)行減法運(yùn)算后的得失值為最大的資源元素分配給分配對(duì)象取出裝置取出的分配對(duì)象。
按照上述,由于將已分配的分配對(duì)象中得失值大的分配給應(yīng)分配的分配對(duì)象,所以,在將資源元素分配給分配對(duì)象的過(guò)程中,可以精密地判斷向分配對(duì)象分配的資源元素的分配狀況。因此,存貯器與寄存器間、和寄存器與寄存器間的傳輸命令也減少,從而可以提高最后生成的機(jī)器語(yǔ)言程序的程序大小和執(zhí)行速度。尤其是在對(duì)寄存器數(shù)量少的目標(biāo)機(jī)器進(jìn)行資源分配時(shí),上述程序大小和執(zhí)行速度的提高特別明顯。
如所述的那樣,資源分配設(shè)備還具有在由分配對(duì)象—資源元素檢測(cè)裝置檢測(cè)的已分配的分配對(duì)象中判斷生存區(qū)間與由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象連續(xù)的重疊一側(cè)連續(xù)已分配的分配對(duì)象判斷裝置、根據(jù)從由重疊一側(cè)連續(xù)已分配的分配對(duì)象判斷裝置判斷的已分配的分配對(duì)象到由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象的生存區(qū)間的長(zhǎng)短,計(jì)算分配給由重疊一側(cè)連續(xù)已分配的分配對(duì)象判斷裝置判斷的已分配的分配對(duì)象的資源元素的得失值的第三得失值計(jì)算裝置和從由經(jīng)前述累計(jì)裝置累計(jì)的關(guān)于該資源元素的累計(jì)值中減去由第三得失值計(jì)算裝置計(jì)算的得失值的第二減法裝置。第二分配裝置將由第二減法裝置對(duì)得失值進(jìn)行減法運(yùn)算后的累計(jì)值為最大的資源元素分配給由分配對(duì)象取出裝置取出的分配對(duì)象。
按照上述,利用減小得失值,從應(yīng)分配的分配對(duì)象方面看,將分配給發(fā)生損失位置的分配對(duì)象的資源元素評(píng)價(jià)為低級(jí)的,所以,周邊的分配狀況將影響下次的資源分配,從而可以更多地減少傳輸命令。
如所述的那樣,資源分配設(shè)備還具有在由分配對(duì)象—資源元素檢測(cè)裝置檢測(cè)的已分配的分配對(duì)象中判斷生存區(qū)間與由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象不連接而且生存區(qū)間不重疊的分配對(duì)象的第二非重疊非連續(xù)已分配的分配對(duì)象判斷裝置、對(duì)于生存區(qū)間與由第二非重疊非連續(xù)已分配的分配對(duì)象判斷裝置判斷的已分配的分配對(duì)象的生存區(qū)間重疊的未分配的分配對(duì)象,判斷生存區(qū)間與由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象連續(xù)的重疊一側(cè)連續(xù)未分配的分配對(duì)象判斷裝置、根據(jù)從重疊一側(cè)未分配的分配對(duì)象判斷裝置判斷的分配對(duì)象到由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象的生存區(qū)間的長(zhǎng)短,計(jì)算分配給由第二非重疊非連續(xù)已分配的分配對(duì)象判斷裝置判斷的已分配的分配對(duì)象的資源元素的得失值的第四得失值計(jì)算裝置和將由前述累計(jì)裝置累計(jì)的關(guān)于該資源元素的累計(jì)值與由第四得失值計(jì)算裝置計(jì)算的得失值相加的第二加法裝置。第二分配裝置將由第二加法裝置對(duì)得失值進(jìn)行加法運(yùn)算后的累計(jì)值為最大的資源元素分配給分配對(duì)象取出裝置取出的分配對(duì)象。
按照上述,通過(guò)減少得失值,從應(yīng)分配的分配對(duì)象方面看,分配給發(fā)生損失的位置的分配對(duì)象的資源元素評(píng)價(jià)為低級(jí)的,因此周邊的分配狀況將影響下次的資源分配,從而可以更多地減少傳輸命令。
圖1為表示程序及該程序中分配對(duì)象的圖;圖2為編譯程序的結(jié)構(gòu)圖;圖3A~3C是編譯程序的處理過(guò)程的圖;圖4是先有的資源分配裝置63的結(jié)構(gòu)的圖;圖5A、5B是干涉圖形和通過(guò)將該干涉圖形頂點(diǎn)連接而干涉圖形如何變化的圖;圖6A~6F是干涉圖形發(fā)生圖形簡(jiǎn)并的圖;圖7是表示頂點(diǎn)連接引起的問(wèn)題的圖;圖8是實(shí)施例的資源分配設(shè)備13的結(jié)構(gòu)圖;圖9為分配資源元素確定部26的結(jié)構(gòu)圖;圖10為使用成本計(jì)算部34的結(jié)構(gòu)圖;圖11A為推斷增益計(jì)算部36的結(jié)構(gòu)圖;圖11B為資源類別成本計(jì)算部39的結(jié)構(gòu)圖;圖12為資源分配控制部27的流程圖;圖13為資源元素確定部38的流程圖;圖14是使用成本計(jì)算控制部14的控制內(nèi)容的流程圖;圖15是增益推斷控制部5 1的控制內(nèi)容的流程圖;圖16為得失計(jì)算的流程圖;圖17是資源類別成本計(jì)算控制部501的控制內(nèi)容的流程圖;圖18為后續(xù)成本計(jì)算子程序的流程圖;圖19是資源與成本的對(duì)應(yīng)的圖;圖20是通過(guò)將各資源的資源元素分配給分配對(duì)象,該分配對(duì)象定義、使用的中間命令的成本如何增減的圖;圖21是已分配的分配對(duì)象的得失值如何增減的說(shuō)明圖;圖22是已分配的分配對(duì)象的得失值如何增減的說(shuō)明圖;圖23是未分配的分配對(duì)象的后續(xù)成本值成為何值的說(shuō)明圖;圖24是分配對(duì)象保持部21的保持內(nèi)容的一例的圖;圖25是分配對(duì)象保持部21的保持內(nèi)容的一例的圖;圖26A是分配狀態(tài)表的保持內(nèi)容的變化的一例的圖;圖26B是分配候補(bǔ)資源元素保持部31的保持內(nèi)容的一例的圖;圖27A是運(yùn)算成本表的一例的圖;圖27B是使用成本保持部的變化的一例的圖;圖28A是增益保持部37的保持內(nèi)容變化的一例的圖;圖28B是得失保持部56的保持內(nèi)容變化的一例的圖;圖28C是追蹤對(duì)象保持部52的保持內(nèi)容變化的一例的圖;圖29A是已處理的分配對(duì)象保持部53的保持內(nèi)容變化的一例的圖;圖29B是已損失的分配對(duì)象保持部54的保持內(nèi)容變化的一例的圖;圖29C是重復(fù)分配對(duì)象保持部55的保持內(nèi)容變化的一例的圖;圖30A是資源類別成本保持部40的保持內(nèi)容變化的一例的圖;圖30B是資源類別總成本保持部505的保持內(nèi)容變化的一例的圖;圖30C是追蹤對(duì)象保持部504的保持內(nèi)容變化的一例的圖;圖31A是已處理分配對(duì)象保持部506的保持內(nèi)容變化的一例的圖;圖31B是資源成本模式保持部502的保持內(nèi)容變化的一例的圖;圖31C是評(píng)價(jià)資源保持部41的保持內(nèi)容變化的一例的圖;圖31D是重復(fù)分配對(duì)象保持部507的保持內(nèi)容變化的一例的圖;圖32是用高級(jí)語(yǔ)言編寫的程序的示例圖;圖33是程序例的中間代碼與分配對(duì)象的生存區(qū)間的圖;圖34是對(duì)圖33中的分配對(duì)象t265計(jì)算得失值時(shí)可尋求資源繼承關(guān)系的分配對(duì)象的圖。
下面,在對(duì)本發(fā)明實(shí)施例說(shuō)明之前先對(duì)所用的術(shù)語(yǔ)加以說(shuō)明。
循環(huán)層次所謂循環(huán)層次,是指循環(huán)的嵌套深度,中間命令的循環(huán)層次是指存在中間命令的循環(huán)的層次。例如,在圖33中,中間命令i1的循環(huán)層次為1。由于中間命令i8處在中間命令i31的轉(zhuǎn)移之前,所以循環(huán)層次為2。
多資源表示像存貯器等那樣具有較其他的裝置更豐富的資源元素,不論將哪個(gè)資源元素分配給分配對(duì)象也不會(huì)對(duì)生成代碼的質(zhì)量產(chǎn)生特別的影響的資源。
分配資源是指以分配給分配對(duì)象的資源元素或多資源作為基元的集合。通常,對(duì)一個(gè)分配對(duì)象分配一個(gè)分配資源,但是這里,如前所述,由于資源是指具有相同功能的資源元素的集合,所以,所謂將多資源R分配給分配對(duì)象,就是指將屬于R的某一資源元素分配給分配對(duì)象。
資源元素(廣義)表示分配資源的元素。下面,只要沒(méi)有特別申明,資源元素就是廣義的意義。
資源繼承關(guān)系所謂資源繼承關(guān)系是指可以繼承分配對(duì)象之間分配的資源元素的關(guān)系。另外,所謂資源元素的繼承,是指分配與已分配的資源元素相同的資源元素,通過(guò)分配這種相同的資源元素,可以省去在代碼生成設(shè)備中,生成傳輸命令。此外,還可以將已分配的資源元素向周圍擴(kuò)展。在程序中,這種資源繼承關(guān)系利用生存區(qū)間的連續(xù)來(lái)表示。亦即,如果程序中的某一中間命令s1是分配對(duì)象y的生存區(qū)間的結(jié)束點(diǎn),而且中間命令s1是分配對(duì)象x的起始點(diǎn),則分配對(duì)象x與分配對(duì)象y就存在資源元素繼承關(guān)系。但是,生存區(qū)間的終始點(diǎn)一致,當(dāng)即使分配同一資源元素也不能明顯地免除生成傳輸命令時(shí),就不存在資源繼承關(guān)系。
例如,在程序的中間命令s1∶x=y(tǒng);中,當(dāng)分配對(duì)象x的生存區(qū)間的起始點(diǎn)是中間命令s1、分配對(duì)象y的生存區(qū)間的結(jié)束點(diǎn)是中間命令s1時(shí),如果分配對(duì)象x和分配對(duì)象y分配相同的資源元素,就不需要從分配對(duì)象y向分配對(duì)象x傳送。因此,分配對(duì)象x與分配對(duì)象y具有資源繼承關(guān)系。
另外,當(dāng)目標(biāo)機(jī)器是=地址形式的微處理器、向運(yùn)算符存貯運(yùn)算結(jié)果時(shí)(目標(biāo)機(jī)器的減法命令的被減數(shù)一側(cè)的操作數(shù)存貯運(yùn)算結(jié)果時(shí)),在程序的中間命令s2∶z=x-w;中,當(dāng)分配對(duì)象z的生存區(qū)間的起始點(diǎn)是中間命令s2、分配對(duì)象x的生存區(qū)間的結(jié)束點(diǎn)是中間命令s2時(shí),分配對(duì)象x與分配對(duì)象z具有資源繼承關(guān)系。因此,如果對(duì)分配對(duì)象x與分配對(duì)象z分配相同的資源元素,就不用生成不需要的傳輸命令。但是,當(dāng)分配對(duì)象w也是中間命令s2為生存區(qū)間的結(jié)束點(diǎn)時(shí),如果對(duì)分配對(duì)象z分配資源元素,反而會(huì)增加傳輸命令,所以,分配對(duì)象z與分配對(duì)象w不存在資源繼承關(guān)系。
另外,通常當(dāng)分配對(duì)象A與分配對(duì)象A1、分配對(duì)象A2……分配對(duì)象An-2與分配對(duì)象An-1、分配對(duì)象An-1與分配對(duì)象An分別存在資源繼承關(guān)系時(shí),就說(shuō)分配對(duì)象A與分配對(duì)象An“間接地存在資源繼承關(guān)系”。例如,在上述的中間命令s1、s2中,分配對(duì)象y與分配對(duì)象z通過(guò)分配對(duì)象x間接地存在資源繼承關(guān)系。
使用成本值所謂使用成本值是指如果將各個(gè)資源的資源元素分配給現(xiàn)在想分配的分配對(duì)象x時(shí)表示分配對(duì)象x使用的中間命令的代碼大小和執(zhí)行時(shí)間達(dá)到何種程度的值。下面,照?qǐng)D19及20中所示的使用成本計(jì)算例的說(shuō)明圖說(shuō)明中間命令和使用成本值的關(guān)系。
圖19是通過(guò)將各資源的資源元素成為運(yùn)算符表示機(jī)器語(yǔ)言命令的代碼大小及執(zhí)行時(shí)間如何增減的圖。
圖中,示出了“C(X,AR,INDIRECT REFERENCE)=1”、“C(X,DR,INDIRECT REFERENCE)=2”、“C(X,Mem,INDIRECT REFERENCE)=3”數(shù)學(xué)表達(dá)式。它們表示為了用機(jī)器語(yǔ)言命令執(zhí)行稱為“間接引用”的命令可以使用哪個(gè)資源。
“C(X,AR,INIRECT REFERENCE)=1”表示用地址寄存器(AR)執(zhí)行稱為間接引用的命令時(shí)存貯器大小或執(zhí)行時(shí)間增加“1”。
“C(X,DR,INDIRECT REFERENCE)=2”表示用數(shù)據(jù)寄存器(DR)執(zhí)行稱為間接引用的命令時(shí)存貯器大小或執(zhí)行時(shí)間增加“2”。
“C(X,Mem,INDIRECT REFERENCE)=3”表示用存貯器(Mem)進(jìn)行稱為間接引用的命令時(shí)存貯器大小或執(zhí)行時(shí)間增加“3”。
另外,圖中的“C(X,Mem,ADDITION)=3”表示用存貯器進(jìn)行加法運(yùn)算時(shí)存貯器大小或執(zhí)行時(shí)間增加“3”。
“C(X,Mem,SUBTRACTION)=3”表示用存貯器進(jìn)行減法運(yùn)算時(shí)存貯器大小或執(zhí)行時(shí)間增加“3”。
在圖20中,左半部所示的是中間程序的例子。此中間程序內(nèi)的一部分分配對(duì)象用○符號(hào)包圍,從該○符號(hào)伸出箭頭線。箭頭線a11從圖中的分配對(duì)象“s”伸出,a11的末端分為三個(gè)箭頭。位于該末端的“C(S,AR,INDIRECT REFERENCE)”“C(S,DR,INDIRECT REFERENCE)”“C(S,Mem,INDIRECTREFEPENCE)”表示分配對(duì)象s由間接引用命令的使用。其下面的“Cost(AR,S)=1”“Cost(DR,S)=2”“Cost(Mem,S)=3”表示對(duì)分配對(duì)象s的使用成本值的總和。亦即,表示當(dāng)將資源AR的資源元素分配給分配對(duì)象s時(shí),其使用成本值為“1”,將資源DR的資源元素分配給分配對(duì)象s時(shí),使用成本值為“2”。另外,還表示當(dāng)將Mem分配給分配對(duì)象s時(shí),使用成本值為“3”。
另外,在此程序例中三個(gè)地點(diǎn)存在有分配對(duì)象r,這些分配對(duì)象也用○符號(hào)包圍。并由此分配對(duì)象伸出箭頭線a13、a14、a15。在這些箭頭線的末端各自存在三個(gè)“C(r,AR,INDIRECTREFERENCE)”、“C(r,DR,INDIRECT REFERENCE)”、“C(r,Mem,INDIRECT REFERENCE)”,它們表示由于在基本程序中三個(gè)地方使用分配對(duì)象r,所以,對(duì)三個(gè)地方進(jìn)行評(píng)價(jià)。這三個(gè)地方的使用成本值的總和為“Cost(AR,r)=3”“Cost(DR,r)=6”“Cost(Mem,r)=9”。
按照箭頭線a11、a12、a13……所示的那樣,計(jì)算上述這種使用成本值的總和值時(shí),如圖20下半部的表所示的那樣,可以得到全部分配對(duì)象的三種資源的使用成本值的總和。這一總和是對(duì)各分配對(duì)象合適、不合適的參數(shù),該值越小,表示資源對(duì)該分配對(duì)象越合適。但是,這種使用成本的缺點(diǎn)是以代碼大小和執(zhí)行時(shí)間為標(biāo)準(zhǔn)。所以,相同功能的數(shù)據(jù)寄存器D0~D2和地址寄存器A0~A2不論使用成本成為哪個(gè)相同的值,都只是一個(gè)大致的標(biāo)準(zhǔn)。
得失值得失值是指表示已分配給分配對(duì)象的資源元素對(duì)現(xiàn)在要分配的分配對(duì)象的影響有多大的值。因此,將得失值賦予已分配的各資源元素。將此得失值對(duì)每一資源元素累計(jì)的值稱為增益值。
下面,參照?qǐng)D21所示說(shuō)明圖說(shuō)明已分配的資源元素的得失值達(dá)到多大的值。圖21是表示將增益因素作為處理對(duì)象時(shí)的各資源元素的得失值的說(shuō)明圖。圖中的分配對(duì)象x按優(yōu)先級(jí)的優(yōu)先順序?yàn)榈诙?、分配的序?hào)巡回過(guò)來(lái)的分配對(duì)象(在以后的說(shuō)明中如未加特別申明,均在這種意義上使用分配對(duì)象x)。
圖中所示的豎線表示分配對(duì)象的生存區(qū)間,其中,空白的表示未分配的分配對(duì)象,畫黑斜線的表示已分配的分配對(duì)象。該分配對(duì)象的生存區(qū)間的起點(diǎn)和終點(diǎn)用黑點(diǎn)“·”表示。在圖中的黑點(diǎn)中間存在用橫向虛線連接的情況。這表示生存區(qū)間的終點(diǎn)與起點(diǎn)一致,這樣便可知道,起始點(diǎn)和結(jié)束點(diǎn)利用虛線連結(jié)的分配對(duì)象之間存在資源繼承關(guān)系。在表示生存區(qū)間的豎線上分別以“分配對(duì)象x1”“分配對(duì)象x2”“分配對(duì)象x11”附加上表示具有該生存區(qū)間的分配對(duì)象的名稱的字符串。
在相應(yīng)分配對(duì)象中,分配了資源元素的在該字符串正下方示出表示資源元素的名稱的字符串。從此表示該資源元素的名稱的字符串伸出箭頭線,在其箭頭端部有數(shù)學(xué)式“+1/L1”、“+1/(L1+L2)”、“+1/(L1+L3+L4)”,這些數(shù)式表示各資源元素的得失值。
在本圖中,由字符串“資源元素D2”伸出箭頭線,其箭頭端伸至數(shù)學(xué)式“+1/L1”,這表示分配給分配對(duì)象x3的資源元素D2的得失值為“+1/L1”。
由字符串“資源元素D3”伸出箭頭線,其箭頭端伸至數(shù)學(xué)式“+1/(L1+L2)”,這表示分配給分配對(duì)象x1的資源元素D3的得失值為“+1/(L1+L2)”。得失值成為這樣的值是因?yàn)樯鎱^(qū)間長(zhǎng)度L2,介于在分配對(duì)象x1的生存區(qū)間與分配對(duì)象x的生存區(qū)間之間,此生存區(qū)間長(zhǎng)度反映在得失值中的緣故。
由字符串“資源元素D1”伸出箭頭線,其箭頭端伸至數(shù)學(xué)式“+1/(L1+L3+L4)”,這表示分配給分配對(duì)象x2的資源元素D1的得失值為“+1/(L1+L3+L4)”。得失值成為這樣的值,是因?yàn)樯鎱^(qū)間長(zhǎng)L3及生存區(qū)間長(zhǎng)L4的生存區(qū)間介于分配對(duì)象x2的生存區(qū)間和分配對(duì)象x的生存區(qū)間之間,此生存區(qū)間的長(zhǎng)度反映在得失值中的緣故。
另一方面,在本圖中,由于表示分配對(duì)象x11有豎線具有與具有生存區(qū)間L3的分配對(duì)象相并行的部分,所以,判定分配對(duì)象x11與具有生存區(qū)間L3的分配對(duì)象x5的生存區(qū)間重疊。
在此豎線的左下部附加有字符串“-1/(L1+L3)”,它表示分配給分配對(duì)象x11的資源元素D0的得失值為“-1/(L1+L3)”。得失值之所以成為這樣的值,是因?yàn)樯鎱^(qū)間長(zhǎng)度L3的生存區(qū)間介于分配對(duì)象x11的生存區(qū)間和分配對(duì)象x的生存區(qū)間之間,反映此生存區(qū)間的長(zhǎng)度的緣故。
另外,在本圖中,得失值“-1/(L1+L3)”帶負(fù)號(hào),而“+1/(L1+L2)”、“+1/(L1+L3+L4)”帶正號(hào),其理由如下。
因?yàn)橘x予得失值“+1/(L1+L2)”的資源元素D3分配給分配對(duì)象x時(shí),分配給可以去掉傳輸命令的分配對(duì)象(分配對(duì)象x1),賦予得失值“+1/(L1+L3+L4)”的資源元素D1分配給分配對(duì)象x時(shí),分配給可以去掉傳輸命令的分配對(duì)象(分配對(duì)象x2),與之相反,賦予得失值“-1/(L1+L3)”的資源元素D0分配給分配對(duì)象x時(shí),分配給產(chǎn)生傳輸命令的分配對(duì)象(分配對(duì)象x11)。
另外,由于得失值的分母是以分配對(duì)象x作為基點(diǎn)的生存區(qū)間長(zhǎng)度之和,所以,簡(jiǎn)單地將生存區(qū)間長(zhǎng)度L1作為“1”亦可。
由以上說(shuō)明可知,分配給離分配對(duì)象x越近的分配對(duì)象的資源元素,得失值越大,分配給離分配對(duì)象x越遠(yuǎn)的分配對(duì)象的資源元素,得失值越小。分配的順序巡回過(guò)來(lái)的分配對(duì)象影響更近的已分配的資源元素。如前所述,在數(shù)據(jù)寄存器D0、D1、D2間和地址寄存器A0、A1、A2間等相同功能的資源間難于按使用成本決定優(yōu)劣。與此相反,在數(shù)據(jù)寄存器D0、D1、D2中,得失值則影響先分配的那一個(gè)處理。即使在已分配的情況下,在數(shù)據(jù)寄存器D0、D1、D2中,利用哪一個(gè)最接近分配對(duì)象x來(lái)決定優(yōu)劣。
另外,從已分配的分配對(duì)象方面來(lái)看,可以對(duì)本身臨近的后續(xù)分配對(duì)象發(fā)生影響。也就是說(shuō),已分配的分配對(duì)象可以將與自身相同的資源元素分配給周圍的分配對(duì)象。在本實(shí)施例中,也是按表征嵌套級(jí)和使用頻度的分配優(yōu)先級(jí)的順序?qū)①Y源元素分配給分配對(duì)象的,但是,利用此優(yōu)先級(jí)與得失值的組合,對(duì)嵌套級(jí)深的地點(diǎn)優(yōu)先地分配寄存器,便可獲得將此已分配的寄存器向嵌套級(jí)淺的地點(diǎn)擴(kuò)散的靈活的分配結(jié)果。同樣,對(duì)使用頻度高的地點(diǎn)優(yōu)先地分配寄存器,也可獲得將已分配的寄存器向嵌套級(jí)低的地點(diǎn)擴(kuò)散的靈活的分配結(jié)果。而且,還能實(shí)現(xiàn)自變量寄存器、返回值寄存器、破壞性寄存器等預(yù)先分配的對(duì)方已確定的分配對(duì)象將其資源向周圍擴(kuò)散的靈活的資源分配。
以上的說(shuō)明對(duì)生存區(qū)間與分配對(duì)象x連續(xù)的已分配的分配對(duì)象進(jìn)行了說(shuō)明,但是,如果只看到連續(xù)的情況,反而會(huì)產(chǎn)生損失。這就是與分配對(duì)象x重疊一側(cè)的延長(zhǎng)線上已分配了數(shù)個(gè)資源元素時(shí),應(yīng)避免對(duì)它們進(jìn)行任何分配。在不能避免時(shí),就必須從中選擇損失最輕的進(jìn)行分配。為了定量地評(píng)估這種損失,也可使用得失值。下面,參照?qǐng)D22的說(shuō)明圖說(shuō)明為了評(píng)估損失使用得失值的情況。在圖22中,豎線表示分配對(duì)象,其中,空白的表示未分配的分配對(duì)象,畫黑斜線的表示已分配的分配對(duì)象。該生存區(qū)間的起點(diǎn)和終點(diǎn)用黑點(diǎn)“·”表示。圖中的黑點(diǎn)間用橫向虛線連接的,表示其生存區(qū)間的終點(diǎn)與起點(diǎn)相一致,這樣,便可知道利用虛線連接終起點(diǎn)的分配對(duì)象之間存在資源繼承關(guān)系。在表示生存區(qū)間的豎線上分別用“分配對(duì)象x2”、“分配對(duì)象x3”、“分配對(duì)象x4”字樣標(biāo)上表示具有該生存區(qū)間的分配對(duì)象的名稱的字符串。
在該分配對(duì)象中,分配了資源元素在該字符串的正下方示出表示資源元素的名稱的字符串。在由這些表示資源元素名稱的字符串伸出的箭頭線的端部表示出數(shù)學(xué)式“+Px/(L2+L3)”、“-Px/(L2+L3)”,它們表示各資源元素的得失值。
在本圖中,由字符串“資源元素D1”伸出箭頭線,其箭頭端到達(dá)字符串“-Px/(L2+L3)”,這表示分配給分配對(duì)象x4的資源元素D1的帶負(fù)號(hào)的得失值,也就是說(shuō),表示損失的得失值是“-Px/(L2+L3)”。得失值之所以成為這樣的值,是因?yàn)樯鎱^(qū)間長(zhǎng)度L2和L3的生存區(qū)間介于分配對(duì)象x4的生存區(qū)間與和分配對(duì)象x生存區(qū)間重疊的分配對(duì)象x2的生存區(qū)間之間,這一生存區(qū)間的長(zhǎng)度反映在得失值中。
另一方面,在本圖中,由于表示分配對(duì)象x31的豎線具有與具有生存區(qū)間長(zhǎng)度L3的分配對(duì)象x3相并行的部分,所以,可知分配對(duì)象x31與分配對(duì)象x3的生存區(qū)間互相重疊。
此豎線的左下方標(biāo)有字符串“+Px(L2+L3)”,它表示分配給分配對(duì)象x31的資源元素D2的得失值為“+Px/(L2+L3)”。得失值之所以成為這一值,是因?yàn)榻橛谏鎱^(qū)間長(zhǎng)度L2和生存區(qū)間長(zhǎng)度L3的生存區(qū)間分配對(duì)象x31的生存區(qū)間與和分配對(duì)象x生存區(qū)間重疊的分配對(duì)象x2的生存區(qū)間之間,反映此生存區(qū)間的長(zhǎng)度的緣故。
在本圖中,得失值“-Px(L2+L3)”帶有負(fù)號(hào),“+Px(L2+L3)”帶有正號(hào),其理由如下。這是因?yàn)橘x予得失值“+Px/(L2+L3)”的資源元素D2分配給分配對(duì)象時(shí),分配到可以去掉傳輸命令的分配對(duì)象(分配對(duì)象x31)賦予得失值“-Px(L2+L3)”的資源元素D2分配給分配對(duì)象x時(shí),分配給產(chǎn)生傳輸命令的分配對(duì)象(分配對(duì)象x4)。另外,由于得失值的分母是以分配對(duì)象x2為基點(diǎn)的生存區(qū)間長(zhǎng)度之和,所以,將生存區(qū)間長(zhǎng)度L2簡(jiǎn)單地作為“1”亦可。
追蹤對(duì)象所謂追蹤對(duì)象,是指為追尋資源繼承關(guān)系而計(jì)算出各資源元素的得失值的信息。由此,追蹤對(duì)象包含表示在程序中追尋當(dāng)前資源繼承關(guān)系的地址的信息(它以分配對(duì)象名表示)和介于此地點(diǎn)的分配對(duì)象與分配對(duì)象x之間的生存區(qū)間的總和以及在當(dāng)前位置上成為可以分配的資源元素的集合。由于包含這些信息,所以,在本實(shí)施例中,將追蹤對(duì)象作為結(jié)構(gòu)體變量處理,將上述當(dāng)前位置信息、生存區(qū)間的總和和可以分配的資源元素的集合作為其結(jié)構(gòu)體的結(jié)構(gòu)要素來(lái)處理(在本實(shí)施例中,追蹤對(duì)象用A表示、當(dāng)前追蹤位置的分配對(duì)象用A.ASO表示、生存區(qū)間長(zhǎng)度的總和用A.LNS表示、資源元素集合用A.RES表示)。
后續(xù)成本值后續(xù)成本值是表示通過(guò)將各資源的資源元素分配給分配對(duì)象x而使用優(yōu)先級(jí)比分配對(duì)象x更低、在分配對(duì)象x之后進(jìn)行分配的分配對(duì)象的中間命令的代碼大小和實(shí)行時(shí)間如何增減的值。
下面,參照?qǐng)D23的說(shuō)明圖說(shuō)明優(yōu)先次序?yàn)橄挛坏奈捶峙涞姆峙鋵?duì)象的后續(xù)成本值成為多大的值。圖23是表示未分配的分配對(duì)象的后續(xù)成本的說(shuō)明圖。
圖中所示的空白的豎線表示分配對(duì)象的生存區(qū)間,該分配對(duì)象的生存區(qū)間的起點(diǎn)和終點(diǎn)用空白圓圈表示。圖中的空白圓圈中存在用橫虛線連接的情況,它表示生存區(qū)間的終點(diǎn)與起點(diǎn)一致,這樣,便可知道用虛線連接終始點(diǎn)的分配對(duì)象之間存在資源繼承關(guān)系。在表示生存區(qū)間的豎線上分標(biāo)用“分配對(duì)象x1”、“分配對(duì)象x2”、“分配對(duì)象x3”標(biāo)以表示分配對(duì)象的名稱的字符串。另外,在分配對(duì)象x1的左邊列有中間命令群“x1=u+v’‘y=x1+200’‘r=x1/40’‘t=30+x1’‘w=x1+3’”。這些表示在中間程序中使用分配對(duì)象x1的中間命令群。
在分配對(duì)象x2的左邊列有中間命令群“‘x2=u+v’‘y=x2+200’‘r=x2/40’‘t=30+x2’‘w=x2+3’”,它們表示在中間程序中使用分配對(duì)象x2的中間命令群。
另外,在分配對(duì)象x3的左邊列有中間命令群“‘x3=u+v’‘y=x3+200’‘r=x3/40’‘t=30+x3’‘w=x3+32’”,它們表示在中間程序中使用分配對(duì)象x3的中間命令群。
在本圖中,在字符串“分配對(duì)象1”的正下方存在字符串“DR的后續(xù)成本值”和“AR的后續(xù)成本值”,進(jìn)而在它的下面還有數(shù)學(xué)式“Cost(DR)/L”和“Cost(AR)/L”,這些數(shù)學(xué)式表示將資源即數(shù)據(jù)寄存器、地址寄存器的資源元素分配給分配對(duì)象x1時(shí)分配對(duì)象x1的后續(xù)成本值。另外,從位于分配對(duì)象x1左邊的中間命令群的各中間命令“‘x1=u+v’、‘y=x1+200’、‘r=x1/40’‘t=30+x1’、‘w=x1+3’”,伸出的箭頭到達(dá)該數(shù)學(xué)式中的“Cost(DR)”“Cost(AR)”,這表示后續(xù)成本值的算式中的使用成本的總和值“Cost(DR)”、“Cost(AR)”是分配數(shù)據(jù)寄存器DR、地址寄存器AR的資源元素時(shí)分配對(duì)象x1的使用成本值的總和值。
在本圖中,在字符串“分配對(duì)象x2”正下方存在字符串“DR的后續(xù)成本”和“AR的后續(xù)成本”,在其下面還有數(shù)學(xué)式“Cost(DR)/(L1+L)”和“Cost(AR)/(L1+L)”,這些數(shù)學(xué)式表示分配對(duì)象x2的后續(xù)成本。另外,從位于分配對(duì)象x2的左側(cè)的中間命令群的各中間命令“‘x2=u+v’‘y=x3+200’‘r=x2/40’‘t=30+x2’‘w=x2+3’”伸出的箭頭到達(dá)該后續(xù)成本值的算式中的“Cost(DR)”“Cost(AR)”,這表示后續(xù)成本值的算式中的使用成本的總和值“Cost(DR)”“Cost(AR)”是在分配數(shù)據(jù)寄存器DR、地址寄存器AR的資源元素時(shí)中間命令群中的分配對(duì)象x2的使用成本值的總和值。此使用成本總和值“Cost(DR)”、“Cost(AR)”在數(shù)學(xué)式中用生存區(qū)間長(zhǎng)度(L1+L)相除,這表示分配對(duì)象x1介于分配對(duì)象x2與分配對(duì)象x之間、其生存區(qū)間長(zhǎng)度(L1+L)反映在后續(xù)成本值中。
在字符串“分配對(duì)象x3”的正下方存在字符串“DR的后續(xù)成本值”和“AR的后續(xù)成本值”,在其下面還有數(shù)學(xué)式“Cost(DR)/(L1+L2+L)”和“Cost(AR)/(L1+L2+L)”,這些數(shù)學(xué)式表示分配對(duì)象x3的后續(xù)成本值。另外,從位于分配對(duì)象左側(cè)的中間命令群的各中間命令“‘x1=u+v’‘y=x3+200’‘r=x3/40’‘t=30+x3’‘w=x3+32’”伸出的箭頭到達(dá)該后續(xù)成本值式中的使用成本的總和值“Cost(DR)”、“Cost(AR)”,這表示后續(xù)成本式中的“Cost(DR”、“Cost(AR)”是分配數(shù)據(jù)寄存器DR、地址寄存器AR的資源元素對(duì)中間命令群中的分配對(duì)象x3的使用成本值的總和值。此使用成本值的總和值“Cost(DR)”、“Cost(AR)”在數(shù)學(xué)式中除以生存區(qū)間長(zhǎng)度(L1+L2+L),這表示分配對(duì)象x1、x2介于分配對(duì)象x3與分配對(duì)象x之間,其生存區(qū)間長(zhǎng)度的總和(L1+L2+L)反映在后續(xù)成本值中。而且,由于后續(xù)成本值的分母是以分配對(duì)象x作為基點(diǎn)的生存區(qū)間之和,所以,可以簡(jiǎn)單地將生存區(qū)間長(zhǎng)L作為“1”。
<資源分配設(shè)備13的結(jié)構(gòu)>
圖8是資源分配設(shè)備13的結(jié)構(gòu)圖。資源分配設(shè)備13由分配對(duì)象保持部21、分配對(duì)象生成部22、生存區(qū)間重復(fù)分配對(duì)象檢測(cè)部23、資源繼承分配對(duì)象檢測(cè)部24、分配優(yōu)先級(jí)計(jì)算部25、分配資源元素確定部26和資源分配控制部27構(gòu)成。
分配對(duì)象保持部21保存由分配對(duì)象生成部生成的分配對(duì)象和分配對(duì)象信息所組成的分配信息表,另外,還保存分配狀態(tài)表。
圖24和25是分配信息表的一個(gè)例子。圖24表示利用下面進(jìn)行的分配處理分配資源元素的分配對(duì)象的分配信息。圖中的這些內(nèi)容與圖33所示的中間程序例中存在的分配對(duì)象及生存區(qū)間對(duì)應(yīng)。
如圖24中所示,分配信息表由以中間命令集合表示分配對(duì)象n10及該分配對(duì)象的生存區(qū)間在程序中占多大范圍的分配對(duì)象的生存區(qū)間n11、以該集合的元素?cái)?shù)表示的該分配對(duì)象的生存區(qū)間長(zhǎng)度n12、表示該分配對(duì)象使用的中間命令的使用中間命令集合n13、成為該生存區(qū)間的起始點(diǎn)的中間命令的集合即起始點(diǎn)集合n14、成為該生存區(qū)間的結(jié)束點(diǎn)的中間命令的集合即結(jié)束點(diǎn)集合n15、具有與該分配對(duì)象的生存區(qū)間重復(fù)的生存區(qū)間的分配對(duì)象的集合即重復(fù)分配對(duì)象集合n16、表示與該分配對(duì)象具有資源繼承關(guān)系的分配對(duì)象的集合的資源繼承分配對(duì)象集合n17和該分配對(duì)象的分配優(yōu)先級(jí)n18組成。
在本圖中,分配對(duì)象“t35”的右側(cè)的“i2~i6”表示分配對(duì)象t35的生存區(qū)間由圖33中的i2到i6的中間命令描述。
其右側(cè)的“5”表示分配對(duì)象“t35”的生存區(qū)間長(zhǎng)度。其右側(cè)的“i1、i5、i6”表示使用分配對(duì)象“t35”的中間命令。其右側(cè)的“i1”表示分配對(duì)象“t35”的起始點(diǎn)集合為“i1”。其右側(cè)的“i6”表示分配對(duì)象“t35”的結(jié)束點(diǎn)集合為“i6”。其右側(cè)的“t34、t1、a1、p1”表示分配對(duì)象“t35”的重復(fù)分配對(duì)象集合為“t34、t1、a1、p1”。其右側(cè)的“t1、pr1”表示與分配對(duì)象“t35”具有資源繼承關(guān)系的分配對(duì)象為“Pr1”。其右側(cè)的“0.6”表示分配對(duì)象“t35”的優(yōu)先級(jí)。而且,起始點(diǎn)即“i1”之所以不包含在生存區(qū)間n11中,是因?yàn)榭梢愿鶕?jù)生存區(qū)間的集合積簡(jiǎn)單地判定生存區(qū)間的起始點(diǎn)一致的分配對(duì)象間的生存區(qū)間不重疊。因此,設(shè)定在所有的分配對(duì)象的生存區(qū)間中不包含起始點(diǎn)。
圖25是實(shí)變量(Ar)、函數(shù)的返回值(Fr)、破壞性寄存器(Br)等已分配了資源元素的分配對(duì)象的分配信息的示例。
圖25所示分配信息表由分配對(duì)象n20、以中間命令的集合表示該分配對(duì)象的生存區(qū)間在中間程序內(nèi)占多大范圍的分配對(duì)象的生存區(qū)間n21、以該集合的元素?cái)?shù)表示的該分配對(duì)象的生存區(qū)間長(zhǎng)度n22、表示使用該分配對(duì)象的中間命令的使用中間命令集合n23、成為該生存區(qū)間的起始點(diǎn)的中間命令的集合即起始點(diǎn)集合n24、成為該生存區(qū)間的結(jié)束點(diǎn)的中間命令的集合即結(jié)束點(diǎn)集合n25、具有與該分配對(duì)象的生存區(qū)間相重復(fù)的生存區(qū)間的分配對(duì)象的集合即重復(fù)分配對(duì)象集合n26、表示與該分配對(duì)象具有資源繼承關(guān)系的分配對(duì)象的資源繼承關(guān)系分配對(duì)象集合n27和分配給該分配對(duì)象的分配資源元素n28組成。
圖26A是分配狀態(tài)表的示例。分配狀態(tài)表由分配對(duì)象一覽和記入分配給各分配對(duì)象的資源元素的記入欄組成,反映分配是如何進(jìn)行的。此圖的內(nèi)容與圖33所示的中間程序例內(nèi)存在的分配對(duì)象和生存區(qū)間相對(duì)應(yīng)。
在此圖記入欄內(nèi),右端付加“(a)”的表示優(yōu)先級(jí)最高的分配對(duì)象“t262”在進(jìn)行分配時(shí)的分配狀態(tài)。右端付加“(b)”的表示優(yōu)先級(jí)為次一級(jí)的分配對(duì)象“t263”進(jìn)行分配時(shí)的分配狀態(tài)。在右端附加“(c)”的是優(yōu)先級(jí)再下一級(jí)分配對(duì)象“t264”進(jìn)行分配時(shí)的分配狀態(tài)。
分配對(duì)象生成部22根據(jù)數(shù)據(jù)流分析結(jié)果(下面稱為數(shù)據(jù)流信息)和控制流分析結(jié)果(下面稱為控制流信息)生成分配對(duì)象。另外,這時(shí)還檢測(cè)出生存區(qū)間、使用中間命令和生存區(qū)間的起始點(diǎn)及結(jié)束點(diǎn)。如圖25所示,在進(jìn)行分配處理之前,需要進(jìn)行分配的分配對(duì)象在此處分配資源元素。生成的分配對(duì)象存放到分配對(duì)象保持部21中。
生存區(qū)間重復(fù)分配對(duì)象檢測(cè)部23檢驗(yàn)分配對(duì)象彼此間的生存區(qū)間的重疊。亦即,尋求生存區(qū)間與任一分配對(duì)象x重疊的分配對(duì)象的集合即分配對(duì)象集合Ov(x)。Ov(x)的內(nèi)容保持在分配對(duì)象保持部21中。
資源繼承分配對(duì)象檢測(cè)部24對(duì)保持在分配對(duì)象保持部21中的分配對(duì)象檢測(cè)具有資源繼承關(guān)系的全部分配對(duì)象。亦即,尋求與任意的分配對(duì)象x具有繼承關(guān)系的分配對(duì)象的集合即分配對(duì)象集合Rs(x)。Rs(x)的內(nèi)容保持在分配對(duì)象保持部21中。
為了獲得Rs(x)的集合化,按如下過(guò)程進(jìn)行。
由于分配對(duì)象保持部21對(duì)應(yīng)地保持各分配對(duì)象、與各分配對(duì)象的生存區(qū)間的起始點(diǎn)相當(dāng)?shù)闹虚g命令和與各分配對(duì)象的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)闹虚g命令,所以,資源繼承分配對(duì)象檢測(cè)部24從保持的分配對(duì)象中檢測(cè)全部與分配對(duì)象x的生存區(qū)間的起始點(diǎn)相當(dāng)?shù)闹虚g命令與結(jié)束點(diǎn)相當(dāng)?shù)姆峙鋵?duì)象。并且,使檢測(cè)出的分配對(duì)象與分配對(duì)象x成為同一集合。
另外,檢測(cè)全部與分配對(duì)象x的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)闹虚g命令與起始點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象。并且,使探測(cè)出的分配對(duì)象與分配對(duì)象x成為同一集合。反復(fù)進(jìn)行上述處理,生成各分配對(duì)象的Rs(x)。但是,顯而易見(jiàn),即使將相同的資源元素分配給測(cè)得的分配對(duì)象與分配對(duì)象x,當(dāng)不能省掉傳輸命令時(shí),也不能使之成為同一集合。
分配優(yōu)先級(jí)計(jì)算部25對(duì)保持在分配對(duì)象保持部21中的分配對(duì)象x計(jì)算分配優(yōu)先級(jí)。所謂分配優(yōu)先級(jí),是指表示從哪一個(gè)分配對(duì)象開(kāi)始進(jìn)行對(duì)資源元素的分配的優(yōu)先次序。這里,使用下面的算式來(lái)進(jìn)行計(jì)算分配優(yōu)先級(jí)=(存在x的使用中間命令的循環(huán)層次的總和)/(x的生存區(qū)間的長(zhǎng)度)。
分配資源元素確定部26根據(jù)分配信息表的記載內(nèi)容將資源元素分配給分配對(duì)象。
資源分配控制部27控制全部分配處理。
圖12是資源分配控制部27的流程圖。
在步驟a1,資源分配控制部27啟動(dòng)分配對(duì)象生成部22。
在步驟a2,資源分配控制部27啟動(dòng)生存區(qū)間重復(fù)分配對(duì)象檢測(cè)部23。
在步驟a3,資源分配控制部27啟動(dòng)資源繼承分配對(duì)象檢測(cè)部24。
在步驟a4,資源分配控制部27啟動(dòng)分配優(yōu)先級(jí)計(jì)算部25。
在步驟a5,分配資源控制部27啟動(dòng)分配資源元素確定部26。
分配資源元素確定部26構(gòu)成為根據(jù)分配信息表保持的內(nèi)容確定分配給各分配對(duì)象的資源元素。
圖9為圖8中的分配資源元素確定部26的結(jié)構(gòu)圖。
分配資源元素確定部26由分配候補(bǔ)資源元素保持部31、可分配資源元素檢測(cè)部32、使用成本計(jì)算部34、使用成本保持部35、推斷增益計(jì)算部36、增益保持部37、資源元素確定控制部38、資源類別成本計(jì)算部39、資源類別成本保持部40和評(píng)價(jià)資源保持部41組成。
圖13為資源元素確定控制部38的流程圖。如圖13所示,此流程圖包括下列步驟求取可分配給分配對(duì)象x的資源元素(步b3);當(dāng)存在多個(gè)可分配資源元素時(shí),通過(guò)計(jì)算各資源元素的使用成本來(lái)選取應(yīng)分配的資源元素(步b4);如果選取的結(jié)果只剩下一個(gè)資源元素時(shí),就將該資源元素分配給分配對(duì)象x(步b16);如果選取結(jié)果剩下多個(gè)資源元素時(shí),就對(duì)它們篩選候補(bǔ)元素的(步b7);通過(guò)對(duì)篩選的候補(bǔ)元素計(jì)算得失值對(duì)分配給分配對(duì)象x的資源元素進(jìn)行再次選擇(步b8);當(dāng)再次選取的結(jié)果僅剩下單一資源的資源元素時(shí),就將此資源元素分配給分配對(duì)象x(步b14);當(dāng)再次選取的結(jié)果還有多個(gè)資源的資源元素時(shí),就計(jì)算各資源的后續(xù)成本值對(duì)各資源所具有的資源元素再一次進(jìn)行選擇(步b12)。從而,對(duì)于未分配的分配對(duì)象,便成為按照分配優(yōu)先級(jí)順序進(jìn)行上述處理(步b1~b14)循環(huán)結(jié)構(gòu)。
在在此流程圖中,集合R表示未分給生存區(qū)間與分配對(duì)象x重疊的分配對(duì)象的資源元素的集合。
下面,按照順序?qū)Υ肆鞒虉D的各個(gè)步驟作更詳細(xì)的說(shuō)明。
在步驟b1,資源元素確定控制部38當(dāng)存在保持在分配對(duì)象保持部21內(nèi)并且還未分配資源元素的分配對(duì)象時(shí),就執(zhí)行步驟b2,當(dāng)在分配對(duì)象保持部21中不存在時(shí),就結(jié)束分配資源元素確定部26的處理。
在步驟b2,資源元素確定控制部38從分配對(duì)象保持部21保持的未分配的分配對(duì)象中取出由分配優(yōu)先級(jí)計(jì)算部25求出的分配優(yōu)先級(jí)最高的分配對(duì)象x。
在步驟b3,啟動(dòng)可分配資源元素檢測(cè)部32,計(jì)算可分配給分配對(duì)象x的資源元素的集合。亦即,計(jì)算未分配給生存區(qū)間與分配對(duì)象x重疊的分配對(duì)象的資源元素(稱為可分配資源元素)的集合R,并保存到分配候補(bǔ)資源元素保持部31中。
在步驟b4,詳細(xì)地說(shuō),就是啟動(dòng)使用成本計(jì)算部34,對(duì)分配候補(bǔ)資源元素保持部31所保持的集合R的各資源元素,計(jì)算分配對(duì)象x的中間命令的使用成本,并將計(jì)算結(jié)果保存在使用成本保持部35中。
在步驟b5,在分配候補(bǔ)資源元素保持部31所保存的資源元素中,當(dāng)在由步驟b5所得到的使用成本為最小的資源元素中存在多資源rh時(shí),就執(zhí)行步驟b15,否則就執(zhí)行步驟b6。
在步驟b6,在分配候補(bǔ)資源元素保持部31所保存的資源元素中,當(dāng)由步驟b4得到的使用成本為最小的資源元素r只有一個(gè)時(shí),就執(zhí)行步驟b16,否則就執(zhí)行步驟b7。
在步驟b7,使分配候補(bǔ)資源元素保持部31暫時(shí)空出來(lái),只將在步驟b4得到的使用成本為最小的資源元素重新保存到分配候補(bǔ)資源元素保持部31中。
在步驟b8,更詳細(xì)地說(shuō),就是啟動(dòng)推斷增益計(jì)算部36,根據(jù)具有分配對(duì)象x的資源繼承關(guān)系的分配對(duì)象求各資源元素的增益值,并將求得的增益值保存到增益保持部37內(nèi)。
在步驟b9,在分配候補(bǔ)資源元素保持部31中保存的資源元素中,計(jì)算在步驟b8求得的保存在增益保持部37中的增益值為最大的資源元素的集合Rs,使分配候補(bǔ)資源元素保持部31的內(nèi)容暫時(shí)空出來(lái)保存屬于此集合Rs的資源元素。
在步驟b10,計(jì)算集合Rs內(nèi)的資源元素所屬的資源的集合RES,并保存到評(píng)價(jià)資源保持部41內(nèi)。
在步驟b11,當(dāng)在評(píng)價(jià)資源保持部41保持的集合RES中存在多個(gè)資源時(shí),就執(zhí)行步驟b12,否則就執(zhí)行步驟b14。
在步驟b12,更詳細(xì)地說(shuō),就是啟動(dòng)資源類別成本計(jì)算部39,計(jì)算后續(xù)成本值,并將對(duì)各資源的計(jì)算結(jié)果保存到資源類別成本保持部40內(nèi)。
在步驟b13,將屬于評(píng)價(jià)資源保持部41的是資源類別成本保持部40所存放的成本為最小的資源所具有的資源元素并且保存在分配候補(bǔ)資源元素保持部31中的資源元素分配給分配對(duì)象x;然后返回步驟b1。
在步驟b14,將分配候補(bǔ)資源元素保持部31中所保存的資源元素分配給分配對(duì)象x,然后返回步驟b1。
在步驟b15,當(dāng)將多資源rh的資源元素分配給生存區(qū)間與分配對(duì)象x重疊的分配對(duì)象時(shí),就將與其資源元素不同的多資源rh的資源元素分配給分配對(duì)象x,然后返回步驟b1。
在步驟b16,將資源元素r分配給分配對(duì)象x,然后返回步驟b1。
分配候補(bǔ)資源元素保持部31保持對(duì)分配對(duì)象x可分配的資源元素。分配候補(bǔ)資源元素保持部31的保存內(nèi)容及其保持內(nèi)容的變化如圖26B所示。在本圖中,標(biāo)在右端的(a)、(d)、(e)、(f)…與圖26A所示的(a)、(d)、(e)、(f)…對(duì)應(yīng)。從而與圖33所示的程序例內(nèi)的(a)、(e)、(f)、…對(duì)應(yīng)。這里,所謂可分配資源元素就是未分配給生存區(qū)間與分配對(duì)象x重疊的分配對(duì)象的資源元素。
由圖26B的(a)、(d)的狀態(tài)可知D0、D1、D2、D3、A0、A1、A2、Mm是可分配資源元素。另外,還可知道,當(dāng)從(f)的狀態(tài)變化為(f-1)的狀態(tài)時(shí),資源元素D1則作為可分配資源元素而被除外。
可分配資源元素檢測(cè)部32在步驟b3啟動(dòng),檢測(cè)可分配的資源元素。由可分配資源元素檢測(cè)部32求得的可分配資源元素的集合存儲(chǔ)到分配候補(bǔ)資源元素保持部31內(nèi)。
使用成本計(jì)算部34在步驟b4啟動(dòng),通過(guò)計(jì)算使用成本來(lái)評(píng)估在將保存在分配候補(bǔ)資源元素保持部31中的各資源元素分配給分配對(duì)象x時(shí),與分配對(duì)象x使用的中間命令對(duì)應(yīng)的機(jī)器語(yǔ)言命令占據(jù)多大的存貯器空間或需要多少執(zhí)行時(shí)間,并選擇各資源元素。另外,使用成本計(jì)算部34將作為評(píng)估結(jié)果而計(jì)算的成本值按各資源元素保存到使用成本保持部35中。
使用成本保持部35保存在步驟b4計(jì)算的使用成本計(jì)算部34的計(jì)算結(jié)果。
使用成本計(jì)算部34評(píng)估存貯器大小或執(zhí)行時(shí)間與此相反,通過(guò)計(jì)算得失值將各資源元素分配給分配對(duì)象x時(shí),推斷增益計(jì)算部36,估算能刪除多少傳輸命令,并選擇各資源元素。
增益保持部37在步驟b9保存由推斷增益計(jì)算部36計(jì)算得的得失值的累計(jì)即增益值。圖28A是增益保持部37的保持內(nèi)容的示例。在本圖中,各記入欄的右端標(biāo)以符號(hào)“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,它們表示推斷增益計(jì)算部36對(duì)于分配對(duì)象t265的各資源元素的增益值的保持內(nèi)容的變化。
資源元素確定控制部38控制所有確定資源分配的處理。
資源類別成本計(jì)算部39在步驟b12當(dāng)由推斷增益計(jì)算部36計(jì)算的增益值對(duì)多個(gè)資源為最大時(shí),進(jìn)行后續(xù)成本值的計(jì)算。
資源類別成本保持部40按每一資源保存資源類別成本計(jì)算部39的計(jì)算結(jié)果即后續(xù)成本值。
評(píng)價(jià)資源保持部41保存在步驟b12根據(jù)資源類別成本計(jì)算部39的計(jì)算判明為有效的資源。圖31c是評(píng)價(jià)資源保持部41的保存內(nèi)容的示例。圖中各記入欄右端標(biāo)以符號(hào)“(d)”、“(d-1)”,這些符號(hào)表示資源類別成本計(jì)算部39對(duì)于分配對(duì)象t265的評(píng)價(jià)資源保持部41的保持內(nèi)容的變化。
圖9所示的使用成本計(jì)算部34構(gòu)成為計(jì)算各分配對(duì)象的使用成本。圖10是使用成本計(jì)算部34的結(jié)構(gòu)。
使用成本計(jì)算部34由模式保持部43、運(yùn)算成本保持部44、總成本保持部46和使用成本計(jì)算控制部47組成。
圖14為使用成本計(jì)算控制部47的流程圖。
在此流程圖中,中間命令i表示分配對(duì)象使用的中間命令。資源元素r表示分配候補(bǔ)資源元素保持部31中保存的資源元素。成本模式p表示使用資源元素r對(duì)中間命令i生成的成本模式(關(guān)于成本模式下面說(shuō)明)。
此流程圖是對(duì)分配對(duì)象x的全部使用中間命令反復(fù)執(zhí)行生成將資源元素r用于分配對(duì)象x中的使用中間命令i的算符(操作數(shù))時(shí)的成本模式p的步驟c5、計(jì)算與生成的成本模式p匹配的成本項(xiàng)的步驟c6和將求得的成本項(xiàng)累加到總成本保持部46中的步驟c7的循環(huán)結(jié)構(gòu)(步驟c4~c9),此循環(huán)結(jié)構(gòu)還是對(duì)可分配的全部資源元素反復(fù)進(jìn)行的二重循環(huán)結(jié)構(gòu)(步驟c2~c10,關(guān)于成本項(xiàng)下面介紹)。
下面,對(duì)此流程圖的各個(gè)步驟按順序作更詳細(xì)說(shuō)明。
在步驟c1,將使用成本保持部35的保持區(qū)域中與分配候補(bǔ)資源元素保持部31保存的資源元素對(duì)應(yīng)的位置寫入零,否則就寫入“無(wú)效”。
在步驟c2,對(duì)分配候補(bǔ)資源元素保持部31保持的所有資源元素r反復(fù)執(zhí)行步驟c3到c10的處理。反復(fù)處理結(jié)束后,便結(jié)束使用成本計(jì)算部34的操作。
在步驟c3,使總成本保持部46保持為零。
在步驟c4,每次取出一個(gè)使用作為輸入所賦予的分配對(duì)象x的中間命令,并對(duì)取出的中間命令反復(fù)執(zhí)行從步驟c5到步驟c9的一系列處理。
在步驟c5,將資源元素r嵌套到在中間命令i中使用分配對(duì)象x的部分,生成中間命令i的成本模式p,并保存到模式保持部43中。
在步驟c6,使成本模式p與運(yùn)算成本保持部44保存的成本項(xiàng)進(jìn)行匹配,并取出匹配的成本項(xiàng)e1。
在步驟c7,取出成本項(xiàng)e1的成本,并將取出的成本累加到總成本保持部46中。
在步驟c8,判斷在成本項(xiàng)e1的WORK中是否已設(shè)定資源元素,已設(shè)定時(shí)就執(zhí)行步驟c9,否則就執(zhí)行步驟c4。所謂WORK,就是除了對(duì)機(jī)器指令的操作數(shù)及運(yùn)算結(jié)果設(shè)定的資源元素外,利用代碼生成部14變換中間命令i時(shí)所需要的資源元素。
在步驟c9,計(jì)算分配給在生存區(qū)間包含中間命令i的分配對(duì)象的資源元素的集合R1,當(dāng)在集合R1中存在由成本項(xiàng)e1的WORK指定的資源元素r1時(shí),就將溢出成本累加到總成本保持部46中。所謂溢出成本,是指一旦將資源元素r1的存貯值保存到堆積中,在中間命令i使用后返回時(shí)所需的成本。在溢出成本的相加運(yùn)算后執(zhí)行步驟c4(下面,將資源元素r1稱做中間命令i中的溢出資源元素)。
在步驟c10,將對(duì)分配對(duì)象x分配資源元素r時(shí)的使用成本作為總成本保持部46保存的值存放到使用成本保持部35中,然后執(zhí)行步驟c2。
模式保持部43保存在步驟c5生成的成本模式。所謂成本模式,是指按如下所示的四個(gè)項(xiàng)目的組合表示使用分配對(duì)象x的中間命令,是為了更具體更精確地計(jì)算使用成本中所必須的。四個(gè)項(xiàng)目的組合為(OP,OPR1,OPR2,RESULT)OP—在此項(xiàng)目?jī)?nèi)設(shè)定“乘法”、“加法”、“代入”等中間命令的運(yùn)算符的種類。
OPR1—此項(xiàng)目與中間命令的第一操作數(shù)(OP為二項(xiàng)運(yùn)算時(shí)與左邊的操作數(shù)相當(dāng))對(duì)應(yīng),描述此第一操作數(shù)是如何設(shè)定的。
如果第一操作數(shù)設(shè)定的即時(shí)值,就設(shè)定表示即時(shí)值的“IM”。如果第一操作數(shù)的分配對(duì)象已分配,就設(shè)定該資源元素。當(dāng)操作數(shù)不是即時(shí)值并且未分配資源元素時(shí),就設(shè)定表示未分配的“未”。另外,在此第一操作數(shù)的項(xiàng)目?jī)?nèi)還附加有表示此中間命令是否相當(dāng)于結(jié)束點(diǎn)的“K”或“N”的特征。
OPR2—在此項(xiàng)目?jī)?nèi)設(shè)定與中間命令的第二操作數(shù)相當(dāng)(為二項(xiàng)運(yùn)算時(shí)與右邊的操作數(shù)相當(dāng))的和OPR1相同的值。
RESULT—在此項(xiàng)目?jī)?nèi)設(shè)定表示用于保存運(yùn)算結(jié)果的資源元素與分配給哪個(gè)分配對(duì)象的資源元素相同的信息。
當(dāng)與左邊分配的資源元素相同時(shí),就在RESULT內(nèi)設(shè)定為“左同”、與右邊相同時(shí),就設(shè)定為“右同”,當(dāng)左右兩邊均不同時(shí),就設(shè)定為“異”。另外,在結(jié)果中未分配資源元素時(shí),就設(shè)定為“未”。但是,在進(jìn)行代入運(yùn)算和比較運(yùn)算時(shí),此項(xiàng)目就是未設(shè)定。
(下面稱此四組模式為成本模式)例如,在圖33的程序例中的中間命令i3“t1=t34+3”中,分配對(duì)象t34分配給D0、而分配對(duì)象t1未分配時(shí),就將運(yùn)算類型的項(xiàng)目設(shè)定為“加法”。另外,由于中間命令i3為分配對(duì)象t34的結(jié)束中間命令,而分配對(duì)象t34分配給分配對(duì)象D0,所以,OPR1設(shè)定為“D0.K”。由于第二操作數(shù)是即時(shí)值“3”,所以,OPR2設(shè)定為“IM”。由于運(yùn)算結(jié)果的t1是未分配,所以,RESULT的項(xiàng)目設(shè)定為“未”。
因此,中間命令i3“t1=t43+3”的成本模式為(加法,D0.K,IM,未)。
運(yùn)算成本保持部44保存以所有成本模式和與該成本模式對(duì)應(yīng)的成本為欄目的運(yùn)算成本表,是更具體、更精確地進(jìn)行使用成本計(jì)算所必須的。
圖27A是運(yùn)算成本表的示例。成本模式由前面所說(shuō)的四個(gè)項(xiàng)目OP,OPR1,OPR2,RESULT、表示除在該項(xiàng)目的組合中分配給操作數(shù)和結(jié)果的資源元素之外所需的資源元素的WORK和表示該組合的成本值的COST組成(下面構(gòu)成本表的元素稱為成本項(xiàng))。
例如,在圖27中,Dn,Dm表示資源DR的資源元素中不論D0~D3中的哪一個(gè)都匹配。另外,An、Am表示資源AR的資源元素中不論A0~A2中的哪一個(gè)都匹配。IM表示與即時(shí)值匹配。Dn與An由“1”分開(kāi),這表示不論資源DR或資源AD的哪一個(gè)資源元素都匹配。如圖27A(a)的成本項(xiàng)那樣,沒(méi)有“K”、“N”特征的表示不管成本模式中是否標(biāo)有“K”、“N”特征都與其匹配。前述的“t1=t34+3”的成本模式(加法D0.K,IM,未)與圖27A(b)的成本項(xiàng)匹配。因此,該成本模式的成本為3。
這樣,匹配的成本便在總成本保持部46中累加求總和。
使用成本計(jì)算控制部47輸入分配對(duì)象x,為了計(jì)算將分配候補(bǔ)資源元素保持部31保存的各資源元素分配給分配對(duì)象x時(shí)的使用成本,按照?qǐng)D14所示的流程圖進(jìn)行控制。
推斷增益計(jì)算部36構(gòu)成為通過(guò)計(jì)算增益值來(lái)估算傳輸命令的削減情況。圖11A為推斷增益計(jì)算部36的結(jié)構(gòu)圖。
推斷增益計(jì)算部36由增益推斷控制部5-1、追蹤對(duì)象保持部52、已處理的分配對(duì)象保持部53、已損失的分配對(duì)象保持部54、重復(fù)分配對(duì)象保持部55和得失保持部56組成。
增益推斷控制部51進(jìn)行用于計(jì)算分配對(duì)象x的增益值的處理控制。
圖15及圖16是增益推斷控制部15的處理內(nèi)容的流程圖。圖15是增益推斷控制部51的處理控制的主流程,圖16為得失計(jì)算處理的流程圖(由此流程圖表示的得失值計(jì)算處理稱為得失計(jì)算子程序)。
圖15的流程圖具有根據(jù)分配對(duì)象x生成用于追尋資源繼承關(guān)系的追蹤對(duì)象的步驟d3、利用追蹤對(duì)象順序追尋資源繼承關(guān)系并在計(jì)算出各資源元素的得失值后進(jìn)行資源元素的第一階段的再次選擇的步驟d4和當(dāng)?shù)谝浑A段的再次選擇的結(jié)果增益值為最大的資源元素是多個(gè)時(shí)追尋生存區(qū)間與分配對(duì)象x重疊并且未分配的分配對(duì)象的資源繼承關(guān)系并在計(jì)算各資源元素的得失值后進(jìn)行資源元素的第二階段的再次選擇的步驟d12~d17。
本流程圖的第二階段的再次選擇的部分由對(duì)分配對(duì)象y(生存區(qū)間與分配對(duì)象x重疊的并且未分配的分配對(duì)象)生成追蹤對(duì)象的步驟d15、對(duì)該追蹤對(duì)象計(jì)算得失值的步驟d16和從資源元素的增益值中減去將計(jì)算的得失值乘以分配對(duì)象y的優(yōu)先級(jí)所得值的步驟d17構(gòu)成對(duì)全部分配對(duì)象y反復(fù)進(jìn)行的循環(huán)結(jié)構(gòu)(步驟d12~d17)。
下面,對(duì)本流程圖的各個(gè)步驟按順序作更詳細(xì)說(shuō)明。
在圖15中步驟d1,增益推斷控制部51將與增益保持部37和得失保持部56的各資源元素對(duì)應(yīng)的內(nèi)容置為零。
在步驟d2,清除追蹤對(duì)象保持部52、處理畢分配對(duì)象保持部53、已損失分配對(duì)象保持部54。
在步驟d3,對(duì)分配對(duì)象x生成追蹤對(duì)象A(x),將A(x)的各字段項(xiàng)設(shè)定為追蹤對(duì)象A(x)的分配對(duì)象=A(X).ASO=X
追蹤對(duì)象A(x)的生存區(qū)間長(zhǎng)度之和=A(x).LNS=1追蹤對(duì)象A(x)的資源元素集合=A(x).RES=分配候補(bǔ)資源元素保持部31所保存的資源元素的集合并將生成的追蹤對(duì)象A(x)存貯到追蹤對(duì)象保持部52內(nèi)。
在步驟d4,調(diào)出后而所述的得失計(jì)算子程序進(jìn)行得失計(jì)算,并將各資源元素的計(jì)算結(jié)果保存在得失保持部56中。
在步驟d5,將按各資源元素保存在得失保持部56中的值存入增益保持部37。
在步驟d6,計(jì)算分配候補(bǔ)資源元素保持部31存放的資源元素并且存放于增益保持部37中的值為最大的資源元素的集合RS。
在步驟d7,當(dāng)集合RS的元素?cái)?shù)為多個(gè)時(shí)就執(zhí)行步驟d8。否則就結(jié)束推斷增益計(jì)算部36的處理。
在步驟d8,當(dāng)存在生存區(qū)間與分配對(duì)象x重疊并且未分配的分配對(duì)象時(shí),就執(zhí)行步驟d9。否則就結(jié)束推斷增益計(jì)算部36的處理。
在步驟d9,暫時(shí)清除分配候補(bǔ)資源元素保持部31,并重新全部存放集合RS的資源元素。
在步驟d10,將與增益保持部37的各資源元素對(duì)應(yīng)的內(nèi)容置為零,并清除追蹤對(duì)象保持部52。
在步驟d11,只將生存區(qū)間與分配對(duì)象x重疊并且未分配的分配對(duì)象存入重復(fù)分配對(duì)象保持部55。
在步驟d12,反復(fù)執(zhí)行步驟d13~d17直至將重復(fù)分配對(duì)象保持部55清除為止。
在步驟d13,從重復(fù)分配對(duì)象保持部55取出一個(gè)分配對(duì)象y,并從重復(fù)分配對(duì)象保持部55中將其去除。
在步驟d14,將與得失保持部56各資源元素相對(duì)應(yīng)的內(nèi)容置為零,并清除處理畢分配對(duì)象保持部53和已損失分配對(duì)象保持部54。
在步驟d15,對(duì)分配對(duì)象y生成追蹤對(duì)象B(y),將B(y)的各項(xiàng)設(shè)定為追蹤對(duì)象B(y)的分配對(duì)象=B(y).ASO=y(tǒng)追蹤對(duì)象B(y)的生存區(qū)間長(zhǎng)之和=B(y).LNS=1追蹤對(duì)象B(y)的資源元素集合=B(y).RES=分配候補(bǔ)資源元素保持部31中保存的資源元素的集合。
并將生成的追蹤對(duì)象B(y)存入追蹤對(duì)象保持部52。
在步驟d16,調(diào)出后而所述的得失計(jì)算子程序進(jìn)行得失計(jì)算,并將各資源元素的計(jì)算結(jié)果存入得失保持部56。
在步驟d17,將分配給按各資源元素保持在得失保持部56中的值乘以分配對(duì)象y的分配優(yōu)先級(jí)的值,從增益保持部37中減去,然后返回步驟d12。
如上所述,增益推斷控制部51根據(jù)與分配對(duì)象x具有資源繼承關(guān)系的分配對(duì)象計(jì)算出增益值(步驟d1~d5),當(dāng)計(jì)算的增益值為最大的資源元素有多個(gè)時(shí),還要考慮其中分配給生存區(qū)間重疊的其他分配對(duì)象y有可能削減傳輸命令的情況,然后才計(jì)算最后的增益值(步驟d9~d17)。
特別是對(duì)生存區(qū)間與分配對(duì)象x重疊的分配對(duì)象y計(jì)算的得失值,表示如果分配給分配對(duì)象y時(shí)是有多大益處的資源元素。益處越大的資源元素分配給分配對(duì)象x時(shí)表示傳輸命令越增加。而且由于在分配對(duì)象y中分配優(yōu)先級(jí)小的分配給寄存器等個(gè)數(shù)有限的資源元素的可能性也很小,所以,必須將其效果評(píng)估得較小。因此,在步驟d17中將對(duì)分配對(duì)象y計(jì)算的得失值乘以分配對(duì)象y的分配優(yōu)先級(jí)的值從增益保持部37中減除。<得失計(jì)算程序的詳細(xì)流程>
得失計(jì)算子程序是從圖15的步驟d4及步驟d16調(diào)出的一個(gè)子程序,在圖15的流程步驟d3及步驟d15對(duì)追蹤對(duì)象保持部52存放的所有追蹤對(duì)象反復(fù)執(zhí)行圖16的處理。
在得失計(jì)算子程序中,有判斷在連續(xù)生存群(生存區(qū)間相互連接的一系列分配對(duì)象的集合)中資源元素是否已分配給當(dāng)前正在尋求資源繼承關(guān)系的位置的分配對(duì)象A.ASO的步驟e3,并按照此步驟e3的判斷結(jié)果切換是執(zhí)行步驟e4還是執(zhí)行步驟e5~e10。
在步驟e4,當(dāng)判定已分配時(shí)就假定已追尋到已分配的分配對(duì)象,并計(jì)算其資源元素的得失值,資源元素的增益值只增加該得失值。與此相反,在步驟e3,當(dāng)未分配時(shí),就在步驟e5~e10將搜索范圍向生存區(qū)間與分配對(duì)象A.ASO重疊的一側(cè)擴(kuò)展。具體說(shuō),就是具有計(jì)算分配對(duì)象A.ASO的損失因素(成為增益值減少的因素的分配對(duì)象)的步驟e5~e8、計(jì)算分配給成為損失因素的分配對(duì)象的資源元素的得失值并將該資源元素的增益值只減少此得失值的步驟e9和在減少之后對(duì)與分配對(duì)象A.ASO具有資源繼承關(guān)系的分配對(duì)象重新生成追蹤對(duì)象的步驟10,反復(fù)執(zhí)行步驟e2~e10直至保存追蹤對(duì)象的追蹤對(duì)象保持部52中不存在追蹤對(duì)象為止,從而構(gòu)成順序追蹤具有資源繼承關(guān)系的分配對(duì)象的循環(huán)結(jié)構(gòu)。
下面,對(duì)此流程圖中的各個(gè)步驟按順序更詳細(xì)地說(shuō)明。
在步驟e1,反復(fù)執(zhí)行步驟e2至步驟e10直到追蹤對(duì)象保持部52空了為止。如果空了就結(jié)束得失計(jì)算子程序的處理。
在步驟e2,從追蹤對(duì)象保持部52中取出一個(gè)追蹤對(duì)象A,從追蹤對(duì)象保持部52中除去,并將追蹤對(duì)象A的分配對(duì)象項(xiàng)目即分配對(duì)象A.ASO存入已處理分配對(duì)象保持部53中。
在步驟e3,判斷資源元素r是否已分配給分配對(duì)象A.ASO,已分配時(shí)就執(zhí)行步驟e4,否則就執(zhí)行步驟e5。
在步驟e4,資源元素r屬于追蹤對(duì)象A的資源元素集合的項(xiàng)目即A.RES時(shí)計(jì)算得失值=1/追蹤對(duì)象A的生存區(qū)間長(zhǎng)度之和A.LNS,并將此值與得失保持部56的資源元素r的內(nèi)容相加。然后,返回步驟e1。
在步驟e5,計(jì)算生存區(qū)間與分配對(duì)象A.ASO重疊的并且已分配資源元素的分配對(duì)象的集合OSI。
在步驟e6,計(jì)算已分配給屬于集合OSI的分配對(duì)象的資源元素的集合RSI。
在步驟e7,計(jì)算屬于集合OS1并且未存入已損失分配對(duì)象保持部54的分配對(duì)象x的集合OS2,并將集合OS2的元素存入已損失分配對(duì)象保持部54。
在步驟e8,計(jì)算已分配給屬于集合OS2的分配對(duì)象的資源元素的集合RS2。
在步驟e9,計(jì)算得失值=1/追蹤對(duì)象A的生存區(qū)間長(zhǎng)度之和A.LNS,并從屬于得失保持部56內(nèi)的集合RS2的資源元素的內(nèi)容減去求得的得失值。
在步驟e10,對(duì)全部與分配對(duì)象A.ASO具有資源繼承關(guān)系的分配對(duì)象,并且未存放在已處理的分配對(duì)象保持部53中的分配對(duì)象y按每一個(gè)y生成追蹤對(duì)象B(y),將B(y)的各項(xiàng)設(shè)定為追蹤對(duì)象B(y)的分配對(duì)象=B(y).ASO=y(tǒng)追蹤對(duì)象B(y)的生存區(qū)間長(zhǎng)度之和=B(y).LNS=生存區(qū)間長(zhǎng)之和A.LNS+分配對(duì)象A.A.SO的生存區(qū)間長(zhǎng)追蹤對(duì)象B(y)的資源元素集合=B(y).RES=資源元素集合A.RES-集合RS1,并將生成的追蹤對(duì)象B(y)存入追蹤對(duì)象保持部52,在執(zhí)行步驟e10之后返回步驟e1。
如上所述,得失計(jì)算子程序通過(guò)利用步驟e10將具有資源繼承關(guān)系的分配對(duì)象重新追加到追蹤對(duì)象保持部52內(nèi),便可追循資源繼承關(guān)系。由于利用該設(shè)定可以增加追蹤對(duì)象,所以,還擴(kuò)大了得失值計(jì)算的搜索范圍。
追蹤對(duì)象保持部52保存在步驟d3、d15、e10作為得失計(jì)算子程序的處理對(duì)象而生成的多個(gè)追蹤對(duì)象。圖28C是追蹤對(duì)象保持部52保存的內(nèi)容示例。圖中各記入欄標(biāo)有符號(hào)“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,它們表示與分配對(duì)象t265對(duì)應(yīng)的由推斷增益計(jì)算部36的追蹤對(duì)象保持部52的保存內(nèi)容的變化。標(biāo)有這些符號(hào)“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……的追蹤對(duì)象的分配對(duì)象表示計(jì)算分配對(duì)象t265的得失值對(duì)尋求資源繼承關(guān)系的分配對(duì)象。尋求這種資源繼承關(guān)系的分配對(duì)象與分配對(duì)象t265的生存區(qū)間具有怎樣的位置關(guān)系如圖34所示。圖中用粗黑豎線表示成為得失值計(jì)算對(duì)象的分配對(duì)象t265,在進(jìn)行該得失計(jì)算時(shí)尋求資源繼承關(guān)系的分配對(duì)象空白豎線表示。
在圖28C記入欄內(nèi),右端標(biāo)有“(d-1)”的表示已生成將分配對(duì)象t265作為結(jié)構(gòu)體的結(jié)構(gòu)部件的追蹤對(duì)象。同樣,右端標(biāo)有“(d-4)”的表示已生成將具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象p1作為結(jié)構(gòu)體的結(jié)構(gòu)部件的追蹤對(duì)象。同樣,右端標(biāo)有“(d-6)”的表示已生成將具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象a3作為結(jié)構(gòu)體的結(jié)構(gòu)部件的追蹤對(duì)象。
另外,右端標(biāo)有“(d-8)”的表示已生成將與具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象a3存在資源繼承關(guān)系的分配對(duì)象t263、t264、x2、x3作為結(jié)構(gòu)體的結(jié)構(gòu)部件的追蹤對(duì)象。
利用圖28C中的“(d-4)”,將生存區(qū)間相互重疊的分配對(duì)象p1選擇為對(duì)分配對(duì)象t265的追蹤對(duì)象。利用圖28C中的“(d-6)”將生存區(qū)間相互重疊的分配對(duì)象a3選擇為對(duì)分配對(duì)象t265的追蹤對(duì)象。利用圖28C中的“(d-8)”將與分配對(duì)象a3具有資源繼承關(guān)系的分配對(duì)象t263、t264、x2、x3選擇為對(duì)分配對(duì)象t265的追蹤對(duì)象。
這樣,參照?qǐng)D28C可知,為了計(jì)算分配對(duì)象t265的得失值,將搜索范圍擴(kuò)展到了分配對(duì)象t263、t264、x2、x3。
已處理的分配對(duì)象保持部53保存在步驟e2結(jié)束得失計(jì)算子程序的處理的追蹤對(duì)象的分配對(duì)象。特別是已處理分配對(duì)象保持部53的作用是直接或間接地循環(huán)資源繼承關(guān)系時(shí),是為了防止得失計(jì)算子程序的處理發(fā)生無(wú)限反復(fù)的情況。
圖29A是已處理分配對(duì)象保持部53的保存內(nèi)容的示例。圖中,各記入欄標(biāo)有符號(hào)“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,這表示與分配對(duì)象t265對(duì)應(yīng)的推斷增益計(jì)算部36的已處理分配對(duì)象保持部53的保持內(nèi)容的變化。在本圖的記入欄內(nèi),右端標(biāo)有“(d-1)”的表示分配對(duì)象t265已成為已處理的分配對(duì)象。由此可知,隨著按“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……的順序進(jìn)入下一欄,預(yù)先將具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象P1、具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象a3及與分配對(duì)象a3存在資源繼承關(guān)系的分配對(duì)象t263、t264、x2、x3作為結(jié)構(gòu)部件的追蹤對(duì)象追加到已處理分配對(duì)象保持部53內(nèi)。
由于已損失分配對(duì)象保持部54在得失計(jì)算子程序的過(guò)程中對(duì)同一分配對(duì)象不進(jìn)行二次以上的減除得失值的處理。所以,在步驟e7作為損失因素暫時(shí)保存選擇的分配對(duì)象。這樣,設(shè)置已損失分配對(duì)象保持部54就是為了要避免過(guò)度地估量損失因素。例如,首先在步驟d3將保持圖21的分配對(duì)象x的追蹤對(duì)象存入追蹤對(duì)象保持部52中。然后,將得失計(jì)算子程序調(diào)出,在步驟e10將保持分配對(duì)象x3、x4、x5的追蹤對(duì)象存入追蹤對(duì)象保持部52。此時(shí)如果不經(jīng)過(guò)步驟e7、e8,而在步驟e9使用集合RS1代替集合RS2時(shí),在步驟e9處理保持分配對(duì)象x4、x5的追蹤對(duì)象時(shí),生存區(qū)間與分配對(duì)象x4、x5重疊的分配對(duì)象x11分配的資源元素D0的得失值便減除二次。此后,保持分配對(duì)象x6的追蹤對(duì)象在步驟e9進(jìn)行處理時(shí)同樣也減除分配對(duì)象x11分配的資源元素D0的得失值,從而有可能將資源元素D0的得失值計(jì)算得極小。為了防止出現(xiàn)這種情況,在步驟e7僅將已損失分配對(duì)象保持部54中未存放的分配對(duì)象作為得失值計(jì)算的對(duì)象。
圖29B是已損失分配對(duì)象保持部54的保持內(nèi)容的示例。圖中,各記入欄標(biāo)有符號(hào)“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,它表示與對(duì)對(duì)象t265對(duì)應(yīng)的推斷增益計(jì)算部36的已損失分配對(duì)象保持部54的保持內(nèi)容的變化。在該圖記入欄內(nèi),右端標(biāo)有“(d)”、“(d-1)”、“(d-2)”的表示在對(duì)分配對(duì)象t265的推斷增益計(jì)算的初期階段已成為損失因素的分配對(duì)象。由此可知,對(duì)在“(d-3)”欄中具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象p1調(diào)出得失計(jì)算子程序,預(yù)先將與分配對(duì)象p1生存區(qū)間重疊的分配對(duì)象Ar11、Fr1、Ar12等追加到已損失分配對(duì)象保持部54中。
重復(fù)分配對(duì)象保持部55保持生存區(qū)間與分配對(duì)象x重疊并未分配資源元素的分配對(duì)象。圖29C是重復(fù)對(duì)象保持部55的保持內(nèi)容的示例。圖中各記入欄內(nèi),右端標(biāo)有符號(hào)“(d)”、“(d-1)”、“(d-2)”,它表示與分配對(duì)象t265對(duì)應(yīng)的推斷增益計(jì)算部36的重復(fù)分配對(duì)象保持部55的保持內(nèi)容的變化。特別是右端標(biāo)有“(d)”的表示具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象p1、分配對(duì)象a3已存入重復(fù)分配對(duì)象保持部55。
得失保持部56按每一資源元素保持在步驟d4、d16通過(guò)執(zhí)行得失計(jì)算子程序計(jì)算的得失值。圖28B是得失保持部56的保持內(nèi)容的示例。圖中各記入欄內(nèi),右端標(biāo)有符號(hào)“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,這表示與分配對(duì)象t265對(duì)應(yīng)的推斷增益計(jì)算部36的得失保持部56的保持內(nèi)容的變化。
圖11B中所示的資源類別成本計(jì)算部39構(gòu)成為對(duì)分配順序在后的分配對(duì)象分配更合適的資源元素。
資源類別成本計(jì)算部39由資源類別成本計(jì)算控制部501、成本模式保持部502、資源運(yùn)算成本保持部503、追蹤對(duì)象保持部504、資源類別總成本保持部505、處理畢分配對(duì)象保持部506、和重復(fù)分配對(duì)象保持部507組成。
資源類別成本計(jì)算控制部501進(jìn)行用于計(jì)算分配對(duì)象x的資源類別的使用成本的處理進(jìn)行控制。
圖17和圖18是資源類別成本計(jì)算控制部501的處理內(nèi)容的流程圖。圖17是表示資源類別成本計(jì)算控制部的處理控制的主流程,圖18為后續(xù)成本值計(jì)算處理的主流程(將利用此流程圖表示的后續(xù)成本值計(jì)算處理稱為后續(xù)成本值計(jì)算子程序)。
圖17的流程圖具有,生成用于從分配對(duì)象x追循資源繼承關(guān)系的追蹤對(duì)象的步驟f3、按照追蹤對(duì)象順序追尋資源繼承關(guān)系及計(jì)算出各資源的后續(xù)成本值后進(jìn)行資源的第一階段又一次選擇的步驟f4、當(dāng)?shù)谝浑A段的又一次選擇的結(jié)果即后續(xù)成本值為最小的資源有多個(gè)時(shí)追尋生存區(qū)間與分配對(duì)象x重疊并且未分配的分配對(duì)象的資源繼承關(guān)系以及在計(jì)算出各資源的后續(xù)成本值后進(jìn)行資源元素的第二階段的又一次選擇的步驟f15。
此流程圖的第二階段的又一次選擇的部分,具有對(duì)分配對(duì)象y(生存區(qū)間與分配對(duì)象x重疊并且未分配的分配對(duì)象)生成追蹤對(duì)象的步驟f14、對(duì)該追蹤對(duì)象計(jì)算后續(xù)成本值的步驟f15和將計(jì)算的后續(xù)成本值乘以分配對(duì)象y的優(yōu)先級(jí)的乘積值從資源的后續(xù)成本值中減去的步驟f16,從而構(gòu)成的對(duì)所有的分配對(duì)象y反復(fù)進(jìn)行循環(huán)結(jié)構(gòu)(步驟f11~f16)。
下面,按照順序?qū)Υ肆鞒虉D的各個(gè)步驟作更詳細(xì)說(shuō)明。
在步驟f1,將與資源類別成本保持部40和資源類別總成本保持部505的各資源對(duì)應(yīng)的內(nèi)容置為零。
在步驟f2,清除追蹤對(duì)象保持部504、處理畢分配對(duì)象保持部506。
在步驟f3,對(duì)分配對(duì)象x生成追蹤對(duì)象rA(x),將rA(x)的各項(xiàng)目設(shè)定為追蹤對(duì)象rA(x)的分配對(duì)象 =rA(x).ASO=x追蹤對(duì)象rA(x)的生成區(qū)間長(zhǎng)之和=rA(x).LNS=1,并將生成的追蹤對(duì)象rA(x)存入追蹤對(duì)象保持部504。
在步驟f4,調(diào)出后面所述的后續(xù)成本值計(jì)算子程序,進(jìn)行成本計(jì)算,并將各資源的計(jì)算結(jié)果存入資源類別總成本保持部505。
在步驟f5,將按各資源存放在資源類別總成本保持部505中的值存進(jìn)資源類別成本保持部40。
在步驟f6,計(jì)算資源類別成本保持部40中存放的值為最小的資源的集合R,將評(píng)價(jià)資源保持部41清除存進(jìn)屬于集合R的資源。
在步驟f7,當(dāng)集合R的元素?cái)?shù)為多個(gè)時(shí)就執(zhí)行步驟f8。否則就結(jié)束資源類別成本計(jì)算部39的處理。
在步驟f8,當(dāng)存在生存區(qū)間與分配對(duì)象x重疊并且未分配的分配對(duì)象時(shí),就執(zhí)行步驟f9。否則就結(jié)束資源類別成本計(jì)算部39的處理。
在步驟f9,將與資源類別成本保持部40的各資源對(duì)應(yīng)的內(nèi)容置為零,清除追蹤對(duì)象保持部504。
在步驟f10,只將生存區(qū)間與分配對(duì)象x重疊并且未分配的分配對(duì)象存入重復(fù)分配對(duì)象保持部507。
在步驟f11,反復(fù)執(zhí)行步驟f12至步驟f16的處理直至將重復(fù)分配對(duì)象保持部507清除為止。清除后就結(jié)束資源類別成本計(jì)算部39的處理。
在步驟f12,從重復(fù)分配對(duì)象保持部507取出一個(gè)分配對(duì)象y,并從重復(fù)分配對(duì)象保持部507中除去。
在步驟f13,將與資源類別總成本保持部505的各資源對(duì)應(yīng)的內(nèi)容置為零,并清除處理畢分配對(duì)象保持部506。
在步驟f14,對(duì)分配對(duì)象y生成追蹤對(duì)象rB(y),將rB(y)的各項(xiàng)目設(shè)定為追蹤對(duì)象rB(y)的分配對(duì)象 =rB(y).ASO=y(tǒng)追蹤對(duì)象rB(y)的生存區(qū)間長(zhǎng)之和=rB(y).LNS=1,并將生成的追蹤對(duì)象rB(y)存入追蹤對(duì)象保持部504。
在步驟f15,調(diào)出后面所述的后續(xù)成本值計(jì)算子程序,進(jìn)行成本計(jì)算,并將各個(gè)資源的計(jì)算結(jié)果存入資源類別總成本保持部505。
在步驟f16,對(duì)評(píng)價(jià)資源保持部41存放的各資源,將控制資源類別總成本保持部505存放的值乘以分配對(duì)象y的分配優(yōu)先級(jí)的乘積值從資源類別成本保持部40中減去,然后返回步驟f11。
如上所述,資源類別成本計(jì)算控制部501根據(jù)與分配對(duì)象x具有資源繼承關(guān)系的分配對(duì)象計(jì)算出使用成本值(步驟f1~步驟f5),當(dāng)計(jì)算的成本值為最小的資源有多個(gè)時(shí),通過(guò)對(duì)其中生存區(qū)間重疊的其他分配對(duì)象y進(jìn)行成本計(jì)算,計(jì)算還考慮了分配對(duì)象y的分配對(duì)象x的成本(步驟f9~步驟f16),特別是,在步驟f15求出的使用成本大的資源對(duì)于生存區(qū)間與分配對(duì)象x重疊的分配對(duì)象y來(lái)說(shuō)是需要使用成本的資源并在分配對(duì)象x中除了包含該資源還存在其他可分配的資源時(shí),如果將該資源分配給分配對(duì)象x,則將不需要成本的資源分配給分配對(duì)象y的可能性就增大了。因此,在步驟f16中將求得的成本從資源類別成本保持部40中減去。另外,在步驟f16中將求得的成本乘以分配對(duì)象y的優(yōu)先級(jí),是因?yàn)樵诜峙鋵?duì)象y中優(yōu)先級(jí)低的分配給寄存器等的個(gè)數(shù)有限的資源的可能也小,所以,將其效果估算得小。
圖18為后續(xù)成本值計(jì)算子程序的流程圖。后續(xù)成本值計(jì)算子程序具有對(duì)分配對(duì)象rA.ASO中的使用中間命令生成成本模式的步驟g5、與成本項(xiàng)進(jìn)行匹配并取出成本項(xiàng)e1的成本c的步驟g6、根據(jù)該成本c和追蹤對(duì)象rA的生存區(qū)間長(zhǎng)度之和rA.LNS計(jì)算出后續(xù)成本值=成本c/rA.LNS的步驟g7和將計(jì)算的后續(xù)成本值加到資源r的后續(xù)成本值的步驟g8,從而構(gòu)成對(duì)分配對(duì)象rA.ASO中所含的全部使用中間命令反復(fù)進(jìn)行的循環(huán)結(jié)構(gòu)(步驟g4~g8)。
這一循環(huán)結(jié)構(gòu)還構(gòu)成為對(duì)資源元素又一次進(jìn)行選擇后剩余的資源反復(fù)進(jìn)行的二重循環(huán)結(jié)構(gòu)(步驟g3)。
另外,該二重循環(huán)結(jié)構(gòu)每當(dāng)從追蹤對(duì)象保持部504取出的追蹤對(duì)象rA時(shí)進(jìn)行起動(dòng),在追蹤對(duì)象保持部504中每執(zhí)行一次二重循環(huán)結(jié)構(gòu)時(shí)便構(gòu)成重新存入與追循當(dāng)前資源繼承關(guān)系的地點(diǎn)的分配對(duì)象rA.ASO存在資源繼承關(guān)系的分配對(duì)象(步驟g9)。因此,該二重循環(huán)結(jié)構(gòu)便構(gòu)成為直到連續(xù)地反復(fù)進(jìn)行到處理完具有資源繼承關(guān)系的全部分配對(duì)象為止的三重循環(huán)結(jié)構(gòu)(步驟g1)。
下面,按順序?qū)Ρ玖鞒虉D的各個(gè)步驟作更詳細(xì)地說(shuō)明。
在步驟g1,反復(fù)執(zhí)行步驟g2至步驟g9的處理直到將追蹤對(duì)象保持部504清除為止。清除之后就結(jié)束后續(xù)成本值計(jì)算子程序的處理。
在步驟g2,從追蹤對(duì)象保持部504取出一個(gè)追蹤對(duì)象rA,從追蹤對(duì)象保持部504中消除。并將追蹤對(duì)象rA的分配對(duì)象項(xiàng)目即分配對(duì)象rA.ASO存入處理畢分配對(duì)象保持部506。
在步驟g3,對(duì)保持在評(píng)價(jià)資源保持部41中的資源并且可分配給追蹤對(duì)象rA的分配對(duì)象項(xiàng)目即分配對(duì)象rA.ASO的資源r一個(gè)一個(gè)地反復(fù)執(zhí)行步驟g4~步驟g8的一連串的處理。在結(jié)束該反復(fù)處理之后就執(zhí)行步驟g9。這里,所謂可分配給分配對(duì)象rA.ASO的資源是指未分配給生存區(qū)間與分配對(duì)象rA.ASO重疊的分配對(duì)象的資源元素所屬的資源。亦即,生存區(qū)間與分配對(duì)象rA.ASO重疊的分配對(duì)象中的資源具有的資源元素已全部配完時(shí)該資源就成為不可分配的。
在步驟g4,逐次取出一個(gè)使用分配對(duì)象rA.ASO的中間命令,對(duì)取出的中間命令i反復(fù)執(zhí)行步驟g5~步驟g8的一連串處理。當(dāng)反復(fù)處理結(jié)束后,返回步驟g3。
在步驟g5,將資源r分配給在中間命令i中使用分配對(duì)象rA.ASO的部分,生成中間命令i的成本模式p,并保存到成本模式保持部502中。
在步驟g6,使成本模式保持部502中保存的成本模式p與資源運(yùn)算成本保持部503中保持的成本項(xiàng)間進(jìn)行匹配,并取出匹配的成本項(xiàng)e1。
在步驟g7,取出成本項(xiàng)e1的成本c,并根據(jù)該成本c和追蹤對(duì)象rA的生存區(qū)間長(zhǎng)度之和rA.LNS計(jì)算后續(xù)成本值=成本c/rA.LNS。
在步驟g8,將在步驟g7求得的后續(xù)成本值加進(jìn)資源類別總成本保持部505的資源r的內(nèi)容中。接著,返回步驟g4。
在步驟g9,對(duì)與分配對(duì)象rA.ASO存在資源繼承關(guān)系的未分配的分配對(duì)象并且未存進(jìn)已處理分配對(duì)象保持部506內(nèi)的所有分配對(duì)象y生成各個(gè)分配對(duì)象的追蹤對(duì)象rB(y),將rB(y)的各項(xiàng)目設(shè)定為追蹤對(duì)象rB(y)的分配對(duì)象=rB(y).ASO=y(tǒng)追蹤對(duì)象rB(y)的生存區(qū)間長(zhǎng)度之和=rB(y).LNS=生存區(qū)間長(zhǎng)度之和rA.LNS+分配對(duì)象rA.ASO的生存區(qū)間長(zhǎng),并將生成的追蹤對(duì)象rB(y)存入追蹤對(duì)象保持部504,然后返回步驟g1。
成本模式保持部502保存為了計(jì)算后續(xù)成本值而在圖18的步驟g5中生成的成本模式。由于此成本模式是由與模式保持部43所保持的相同的項(xiàng)目構(gòu)成的,所以,省略其說(shuō)明。圖31B是資源成本模式保持部502的保持內(nèi)容的示例。圖中各記入欄內(nèi),右端標(biāo)有符號(hào)“(d)”,它表示與分配對(duì)象t265對(duì)應(yīng)的資源類別成本計(jì)算部39的資源成本模式保持部502的變化。
資源運(yùn)算成本保持部503為了用于后續(xù)成本值計(jì)算而保存以全部成本模式和與該成本模式對(duì)應(yīng)的成本為欄目的運(yùn)算成本表。
資源運(yùn)算成本保持部503保持的運(yùn)算成本表由圖27A中的OP、OPR1、OPR2、RESULT構(gòu)成的四個(gè)項(xiàng)目和表示該項(xiàng)目的組合的成本值的成本組成。
追蹤對(duì)象保持部504保存成為后續(xù)成本值計(jì)算子程序的處理對(duì)象的多個(gè)追蹤對(duì)象。追蹤對(duì)象保持部504保持的追蹤對(duì)象與在推斷增益計(jì)算部36中使用的追蹤對(duì)象保持部52保持的追蹤對(duì)象不同,從組成部件中省去了可分配的資源元素的集合。因此,追蹤對(duì)象保持部504保持的追蹤對(duì)象由分配對(duì)象與生成區(qū)間長(zhǎng)度之和的二個(gè)項(xiàng)目的數(shù)據(jù)構(gòu)成。在本實(shí)施例中,為了與追蹤對(duì)象保持部52中保持的追蹤對(duì)象相區(qū)別,在追蹤對(duì)象中,用ASO表示追循當(dāng)前資源繼承關(guān)系的地點(diǎn)的分配對(duì)象,用LNS表示到其為止的生存區(qū)間長(zhǎng)度之和,在引用它們時(shí),在前面附加上“r”進(jìn)行表示,如分配對(duì)象rA.ASO和生存區(qū)間長(zhǎng)度之和rA.LNS那樣。
資源類別總成本保持部505保存在后續(xù)成本值計(jì)算子程序中計(jì)算的成本。
已處理分配對(duì)象保持部506與推斷增益計(jì)算部36的已處理分配對(duì)象保持部53一樣,保存完成后續(xù)成本值計(jì)算子程序的處理的分配對(duì)象。與處理畢分配對(duì)象保持部53一樣,已處理分配對(duì)象保持部506的作用也是當(dāng)資源繼承關(guān)系直接或間接地循環(huán)時(shí)用預(yù)防止后續(xù)成本值計(jì)算子程序的處理發(fā)生無(wú)限反復(fù)的情況。圖31A是已處理分配對(duì)象保持部506的保持內(nèi)容示例。圖中各記入欄內(nèi),右端標(biāo)有符號(hào)“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,這表示與分配對(duì)象t265對(duì)應(yīng)的資源類別成本計(jì)算部39的處理畢分配對(duì)象保持部506的變化。圖中記入欄內(nèi),右端標(biāo)以“(d-1)”的是表示資源類別成本計(jì)算部39對(duì)分配對(duì)象t265處理完的最初時(shí)刻的分配對(duì)象。由此可知,隨著按照“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……順序進(jìn)入下一欄,預(yù)先將具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象a3以及和分配對(duì)象a3存在資源繼承關(guān)系的分配對(duì)象x2、x3作為組成部件的追蹤對(duì)象被追加到處理畢分配對(duì)象保持部506內(nèi)。
重復(fù)分配對(duì)象保持部507保存生存區(qū)間與分配對(duì)象x重疊并且未分配資源元素的分配對(duì)象。圖31D是重復(fù)分配對(duì)象保持部507的保持內(nèi)容的示例。圖中各記入欄內(nèi),右端標(biāo)有符號(hào)“(d)”、“(d-1)”、“(d-2)”……,它們表示與分配對(duì)象t265對(duì)應(yīng)的資源類別成本計(jì)算部39的重復(fù)分配對(duì)象保持部507的變化。右端標(biāo)以“(d)”的表示重復(fù)分配對(duì)象保持部507已存進(jìn)具有與分配對(duì)象t265的生存區(qū)間重疊的生存區(qū)間的分配對(duì)象p1和分配對(duì)象a3。
下面,再次參照前所示的流程圖說(shuō)明上述那樣構(gòu)成的本實(shí)施例的資源分配裝置的具體處理內(nèi)容。
首先,作為前提,設(shè)這里進(jìn)行處理的資源為地址寄存器(AR)、數(shù)據(jù)寄存器(DR),設(shè)多資源為存貯器(Mm)。另外,設(shè)資源AR的資源元素為A0、A1、A2,資源DR的資源元素為D0、D1、D2,多資源Mm也作為資源元素。
另外,作為資源類別的功能限制資源AR具有間接引用存貯器的功能,但是,資源DR不具有。資源DR可以成為乘除法運(yùn)算的運(yùn)算符,資源AR則不能。另外,在函數(shù)的自變量傳送使用的自變量寄存器和函數(shù)調(diào)用中,設(shè)破壞性寄存器為D0、D1、A0,函數(shù)的返回值使用的返回值寄存器為D0、A0,并按照返回值的數(shù)據(jù)類進(jìn)行D0、A0的區(qū)別使用。
對(duì)圖32中的c語(yǔ)言編寫的程序利用現(xiàn)有語(yǔ)法分析裝置11和優(yōu)化裝置12輸出圖33(1)所示的3地址式中間程序。利用優(yōu)化裝置12從中間程序中抽出基本程序塊,得到控制流信息和數(shù)據(jù)流信息。在圖33(1)中,特別以箭頭↑表示間接引用運(yùn)算,圖中的變量Ar1、Ar2、Fr分別表示保存函數(shù)的實(shí)自變量和函數(shù)的返回值的變量。
在這種狀態(tài)下,將處理轉(zhuǎn)移到資源分配設(shè)備13中。資源分配控制部27起動(dòng)分配對(duì)象生成部22。分配對(duì)象生成部22根據(jù)控制流信息和數(shù)據(jù)流信息生成與變量對(duì)應(yīng)的分配對(duì)象(步驟a1)。結(jié)果,便得到從圖24的n10到n15的信息。圖24表示利用下面進(jìn)行的分配處理分配資源元素,圖25示出表示實(shí)自變量(Ar)、函數(shù)的返回值(Fr)、破壞性寄存器(Br)的分配對(duì)象。圖33(2)用實(shí)線表示生存區(qū)間的狀態(tài)。在圖33(2)和圖24中,如變量t26那樣生存區(qū)間存在多個(gè)的變量分別成為不同的分配對(duì)象,所以,區(qū)分為t261、t262。
圖24所示的分配對(duì)象的信息保存在圖8中的分配對(duì)象保持部21中。
接著,資源分配控制部27起動(dòng)生存區(qū)間重復(fù)分配對(duì)象檢測(cè)部23。生存區(qū)間重復(fù)分配對(duì)象檢測(cè)部23對(duì)分配對(duì)象保持部21保存的各個(gè)分配對(duì)象求生存區(qū)間重疊的分配對(duì)象(步驟a2)。結(jié)果,得到圖24的n16的信息。
然后,資源分配控制部27起動(dòng)資源繼承分配對(duì)象檢測(cè)部24。資源繼承分配對(duì)象檢測(cè)部24對(duì)分配對(duì)象保持部21中所保存的各個(gè)分配對(duì)象求存在資源繼承關(guān)系的分配對(duì)象(步驟a3)。結(jié)果,得到圖24的n17的信息。
而后,資源分配控制部27起動(dòng)分配優(yōu)先級(jí)計(jì)算部25。分配優(yōu)先級(jí)計(jì)算部25對(duì)各分配對(duì)象的按下式計(jì)算分配優(yōu)先級(jí)(步驟a4)分配優(yōu)先級(jí)=使用率=使用中間命令存在的循環(huán)層次總和/生存區(qū)間的長(zhǎng)。
再后,資源分配控制部27起動(dòng)分配資源元素決定部26。分配資源元素決定部26從分配優(yōu)先級(jí)高的分配對(duì)象開(kāi)始順序?qū)①Y源元素分配給分配對(duì)象(步驟a5)。
下面,參照?qǐng)D13所示的資源元素決定控制部38的流程圖說(shuō)明分配資源元素決定部26的處理。
首先,資源元素決定控制部38判斷是否存在未分配的分配對(duì)象,從未分配的分配對(duì)象中取出分配優(yōu)先級(jí)最高的分配對(duì)象t262(步驟b1、b2)。
接著,資源元素決定控制部38起動(dòng)可分配資源元素檢測(cè)部32(步驟b3)。可分配資源元素檢測(cè)部32將未分配給生存區(qū)間重疊的分配對(duì)象的資源元素即D0、D1、D2、D3、A1、A2和多資源元素的Mm保存到分配候補(bǔ)資源元素保持部31中(圖26B的(a))。然后,資源元素決定控制部38起動(dòng)使用成本計(jì)算部34(步驟b4)。
使用成本計(jì)算部34對(duì)各資源元素求在分配對(duì)象t262的使用地點(diǎn)使用保存在分配候補(bǔ)資源元素保持部31中的資源元素時(shí)的使用成本。
下面,參照?qǐng)D14所示的使用成本計(jì)算控制部的流程圖說(shuō)明使用成本計(jì)算部34的處理內(nèi)容。
首先,使用成本計(jì)算控制部47將使用成本保持部35的各資源元素的內(nèi)容置為零(步驟c1)。
接著,使用成本計(jì)算控制部47取出分配候補(bǔ)資源元素保持部31存放的尚未計(jì)算使用成本的資源元素D0(步驟c2)。
然后,使用成本計(jì)算控制部47將總成本保持部46清零(步驟c3)。
再后,使用成本計(jì)算控制部47在分配對(duì)象t262的使用中間命令中取出對(duì)D0進(jìn)行使用成本計(jì)算的中間命令i10(步驟c4)。
使用成本計(jì)算控制部47對(duì)使用中間命令i10生成成本模式(代入,D0.N,D0.K,-),并保存在模式保持部43中(步驟c5)。
接著,使用成本計(jì)算控制部47將運(yùn)算成本保持部44中保持的圖27A中的運(yùn)算成本表與模式保持部43中保持的成本模式進(jìn)行匹配。此時(shí)與圖27A(C)的成本項(xiàng)的匹配成立,得到成本0并將所得到的成本加到總成本保持部46中所保持的值上(步驟c6、c7)。
然后,使用成本計(jì)算控制部47判定匹配的成本項(xiàng)的WORK項(xiàng)目還沒(méi)有設(shè)定,并執(zhí)行步驟c4。
使用成本計(jì)算控制部47取出對(duì)分配對(duì)象t262的D0尚未計(jì)算使用成本的中間命令i11,生成成本模式(加法,D0,K,Im,未),并保存進(jìn)保持部43。使之與圖27A的運(yùn)算成本表的(b)成本項(xiàng)匹配成立,得到成本并加到總成本保持部46中。接著,判定匹配的成本項(xiàng)的WORK項(xiàng)目還未設(shè)定。并執(zhí)行步驟c4(步驟c4~c8)。
隨后,使用成本計(jì)算控制部47對(duì)資源元素D0檢測(cè)不存在尚未計(jì)算使用成本的分配對(duì)象t262的中間命令的資源元素,將總成本保持部46中保存的值作為將D0分配給t262時(shí)的使用成本保存為使用成本保持部35的D0的內(nèi)容(步驟c4、c10)。
使用成本計(jì)算控制部47從分配候補(bǔ)資源元素保持部31中取出尚未計(jì)算使用成本的資源元素D1,與資源元素D0時(shí)一樣,對(duì)分配對(duì)象t262的中間命令i10、i11分別生成成本模式(代入,D1.N,D0.K,-)(加法,D1.K,Im,未),使之與運(yùn)算成本表匹配,與圖27A(d)、(b)的成本項(xiàng)匹配后,分別得到成本1、2。并且,在總成本保持部46中得到其總和后,保存進(jìn)使用成本保持部35的D1欄中(步驟c2~c8)。
接著,使用成本計(jì)算控制部47對(duì)資源元素D2、D3、A0、A1、A2也與資源元素D1一樣進(jìn)行計(jì)算,得到使用成本值的結(jié)果。
然后,使用成本計(jì)算控制部47從分配候補(bǔ)資源元素保持部31中取出尚未計(jì)算使用成本的資源元素Mm,分別對(duì)分配對(duì)象t265的中間命令i10、i11生成成本模式(代入,Mm.N,D0.K,-),(加法,Mm.K,Im,未),使之與運(yùn)算成本表匹配,與圖27A的(e)、(f)的成本項(xiàng)匹配后,分別得到成本2、3。并且,在總成本保持部46得到其總和5后,保存進(jìn)使用成本保持部35的Mm欄內(nèi)(步驟c2~c7)。另外,圖27A(f)的成本項(xiàng)的WORK項(xiàng)目雖然已指定,但是,由于不存在中間命令i11的溢出資源元素,所以,總成本保持部46中不計(jì)算入溢出成本(步驟c8、c9)。
再后,使用成本計(jì)算控制部47判定不存在存放在分配候補(bǔ)資源元素保持部31中的尚未求使用成本的資源元素(步驟c2),結(jié)束使用成本計(jì)算部34的處理,并返回步驟b4。這一時(shí)刻的使用成本保持部35的內(nèi)容,可以如圖27B的(a)那樣得到。
資源元素決定控制部38參照使用成本保持部35判定多資源即Mm的成本并非最小后(步驟b5),就執(zhí)行步驟b6。
然后,資源元素決定控制部38參照成本保持部35判定存在使用成本為最小的資源元素D0,并將資源元素D0分配給分配對(duì)象t262(步驟b6、b16、圖26A的(a)、圖27B的(a))。
資源元素決定控制部38返回到步驟b1,對(duì)未分配的分配對(duì)象t263、t264也和分配對(duì)象t262一樣進(jìn)行分配處理,如圖26A的(b)、(c)那樣分配D0。
資源元素決定控制部38取出未分配的并且優(yōu)先級(jí)高的t265(步驟b1、b2)。
接著,資源元素決定控制部38起動(dòng)可分配資源元素檢測(cè)部32,得到可分配的資源元素D0、D1、D2、D3、A0、A1、A2、Mm后保存進(jìn)分配候補(bǔ)資源元素保持部31中(步驟b3,圖26B的(d))。
然后,資源元素決定控制部38起動(dòng)使用成本計(jì)算控制部34,如圖27B(d)所示的那樣對(duì)分配候補(bǔ)資源元素保持部31的各資源元素的計(jì)算使用成本(步驟b4)。
資源元素決定控制部38判斷多資源即存貯器的使用成本是否為最小,但是,由于不是最小,所以進(jìn)行步驟b6(步驟b5)。
然后,資源元素決定控制部38判斷使用成本最小的資源元素是否是唯一的,但是,由于不是唯一的,所以進(jìn)行步驟b7(步驟b6)。
資源元素決定控制部38將使用成本不是最小的資源元素從分配候補(bǔ)資源元素保持部31的分配候補(bǔ)集合中去除(步驟b7、圖26B的(d-1))。
而后,資源元素決定控制部38輸入t265,起動(dòng)推斷增益計(jì)算部36,對(duì)分配候補(bǔ)資源元素保持部31中保持的各資源元素進(jìn)行增益計(jì)算(步驟b8)。
這里,參照?qǐng)D15、圖16所示的增益推斷控制部51的流程圖說(shuō)明關(guān)于t265的推斷增益計(jì)算部36的處理內(nèi)容。
首先,增益推斷控制部51將與增益保持部37和得失保持部56各資源元素對(duì)應(yīng)的內(nèi)容置為零(步驟d1、圖28A(d)、圖28B(d))。
接著,增益推斷控制部51清除追蹤對(duì)象保持部52、已處理分配對(duì)象保持部53和已損失分配對(duì)象保持部54(步驟d2、圖28C(d)、圖29A(d)、圖29B(d))。
然后,增益推斷控制部51對(duì)分配對(duì)象t265生成追蹤對(duì)象A1,按圖24將A1的各項(xiàng)目設(shè)定為A1.ASO=t265A1.LNS=1A1.RES=D0、D1、D2、D3、A0、A1、A2。
如圖28C(d-1)所示的那樣,將A1存入追蹤對(duì)象保持部52(步驟d3)。在圖28C(d-1)中用(A1、t265、1(D0、D1、D2、D3、A0、A1、A2))表示追蹤對(duì)象,各項(xiàng)目表示(追蹤對(duì)象名、分配對(duì)象、生存區(qū)間長(zhǎng)度之和,資源元素集合)。
再后,增益推斷控制部51調(diào)出得失計(jì)算子程序。
這里,參照?qǐng)D16所示的流程圖進(jìn)一步說(shuō)明關(guān)于分配對(duì)象t265的增益推斷控制部51的處理內(nèi)容。
首先,在步驟e1、e2,從追蹤對(duì)象保持部52中取出追蹤對(duì)象A1,并從追蹤對(duì)象保持部52中消除。將追蹤對(duì)象A1的分配對(duì)象項(xiàng)目即分配對(duì)象t265存入已處理分配對(duì)象保持部53(圖28C(d-2),圖29A(d-1))。
接著,在步驟e3,因?yàn)樽粉檶?duì)象A1的分配對(duì)象項(xiàng)目即分配對(duì)象t265沒(méi)有分配資源元素,所以,進(jìn)入步驟e5。
在步驟e5~e9,因?yàn)榧螼S1是空的,所以,集合RS1、集合OS2、集合RS2也是空的,不計(jì)算得失值(圖29B(d-1))。
而后,在步驟e10,因?yàn)椴淮嬖谂c追蹤對(duì)象A1的分配對(duì)象項(xiàng)目即分配對(duì)象t265具有資源繼承關(guān)系的分配對(duì)象,所以,不生成新的追蹤對(duì)象,并返回步驟e1。
再后,在步驟e1,因?yàn)樽粉檶?duì)象保持部52如圖28C(d-2)所示的那樣是空的,所以,結(jié)束得失計(jì)算子程序的處理,并返回步驟d4。
現(xiàn)在,參照?qǐng)D15所示流程圖的步驟d5以下的步驟進(jìn)一步對(duì)關(guān)于分配對(duì)象t265的增益推斷控制部51的處理內(nèi)容加以說(shuō)明。
首先,增益推斷控制部51將圖28B(d)所示的得失保持部56的值存入增益保持部37(步驟d5,圖28A(d-1))。
接著,增益推斷控制部51計(jì)算存放在圖28A(d-1)所示的增益保持部37中的值為最大的資源元素的集合RS=(D0、D1、D2、D3、A0、A1、A2)(步驟d6)。
由于集合RS的元素為多個(gè),存在生存區(qū)間與分配對(duì)象t265重疊并且未分配的分配對(duì)象p1、p3,所以,增益推斷控制部51執(zhí)行步驟d9(步驟d7、d8)。
增益推斷控制部51將集合RS存入分配候補(bǔ)資源元素保持部31,將與增益保持部37的各資源元素對(duì)應(yīng)的內(nèi)容置為零,將追蹤對(duì)象保持部52清除,并將生存區(qū)間與分配對(duì)象t265重疊并且未分配的分配對(duì)象p1、a3存入重復(fù)分配對(duì)象保持部55(步驟d9、d10、d11,圖26B(d-2)、圖28C(d-3)、圖28A(d-2)、圖29C(d))。
接著,增益推斷控制部51從重復(fù)分配對(duì)象保持部55中取出分配對(duì)象p1,并從重復(fù)分配對(duì)象保持部55中消除(步驟d12、d13,圖29C(d-1))。
將與得失保持部56的各資源元素對(duì)應(yīng)的內(nèi)容置為零,增益推斷控制部51清除已處理分配對(duì)象保持部53和已損失分配對(duì)象保持部54(步驟d14、圖28B(d-1)、圖29A(d-2)、圖29B(d-2))。
然后,增益推斷控制部51對(duì)分配對(duì)象p1生成追蹤對(duì)象A2,根據(jù)圖24將A2的各項(xiàng)目設(shè)定為A2.ASO=P1A2.LNS=1A2.RES=D0、D1、D2、D3、A0、A1、A2。并如圖28C(d-4)所示的那樣將A2存入追蹤對(duì)象保持部52(步驟d15)。
再后,增益推斷控制部51調(diào)出得失計(jì)算子程序。
現(xiàn)在,參照?qǐng)D16所示的流程圖進(jìn)一步說(shuō)明關(guān)于分配對(duì)象t265的增益推斷控制部51的處理內(nèi)容。
首先,在步驟e1、e2從追蹤對(duì)象保持部52中取出追蹤對(duì)象A2,并從追蹤對(duì)象保持部52中消除。將追蹤對(duì)象A2的分配對(duì)象項(xiàng)目即分配對(duì)象p1存進(jìn)已處理分配對(duì)象保持部52(圖28C(D-5)、圖29A(d-3))。
然后,在步驟e3,因?yàn)樽粉檶?duì)象A2的分配對(duì)象項(xiàng)目即分配對(duì)象p1未分配資源元素,所以,進(jìn)入步驟e5。
在步驟e5、e6,計(jì)算集合OS1=(Ar11,F(xiàn)r1,Ar12,Ar22,F(xiàn)r2,Ar13,Ar23,F(xiàn)r3,Br1,Br2,Br3,t262,t263,t264)和集合RS1=(D0、D1、A0)。
在步驟e7、e8,因?yàn)槿鐖D29B(d-2)所示的那樣已損失分配對(duì)象保持部54為空的,所以,有集合OS2=CAr11,F(xiàn)r1,Ar12,Ar22,F(xiàn)r2,Ar13,Ar23,F(xiàn)r3,Br1,Br2,Br3,t262,t263,t264)、集合RS2=(D0、D1、A0),已損失分配對(duì)象保持部54成為圖29B的(d-3)。
在步驟e9,計(jì)算得失值=1/A2.LNS=1,并從圖28B(d-1)的得失保持部56的資源元素D0、D1、A0的內(nèi)容中減除(圖28B(d-2))。
在步驟e10,因?yàn)椴淮嬖谂c追蹤對(duì)象A2的分配對(duì)象項(xiàng)目即分配對(duì)象b2具有資源繼承關(guān)系的分配對(duì)象,所以,不生成新的追蹤對(duì)象。并返回步驟e1。
然后,在步驟e1,如圖28C(d-5)所示的那樣,由于追蹤對(duì)象保持部52為空的,所以,結(jié)束得失計(jì)算子程序的處理,并返回步驟d16。
現(xiàn)在,參照?qǐng)D15的流程圖的步驟d17以下的步驟說(shuō)明有關(guān)分配對(duì)象t265的增益推斷控制部51的處理內(nèi)容。
首先,增益推斷控制部51將存放在圖28B(d-2)所示的得失保持部56中的值乘以分配對(duì)象p1的分配優(yōu)先級(jí)0.27的值從增益保持部37中減去。亦即,如圖28B(d-2)所示的那樣,當(dāng)?shù)檬е禐樨?fù)值時(shí),最后就如圖28A(d-3)那樣將各值相加。并返回步驟d12(步驟d17)。
接著,增益推斷控制部51從重復(fù)分配對(duì)象保持部55中取出分配對(duì)象a3,并從重復(fù)對(duì)象保持部55中消除(步驟d12、d13,圖29C(d-2))。
再后,增益推斷控制部51將與得失保持部56的各資源元素對(duì)應(yīng)的內(nèi)容置為零,清除已處理分配對(duì)象保持部53和已損失分配對(duì)象保持部54(步驟d14,圖28B(d-3)、圖29A(d-4)、圖29B(d-4))。
增益推斷控制部51對(duì)分配對(duì)象a3生成追蹤對(duì)象A3,按圖24和圖26B的(d-2)將A3的各項(xiàng)目設(shè)定為A3.ASO=a3A3.LNS=1A3.RES=D0、D1、D2、D3、A0、A1、A2。如圖28C(d-6)所示的那樣,將A2存入追蹤對(duì)象保持部52(步驟d15)。
然后,增益推斷控制部51調(diào)出得失值計(jì)算子程序(步驟d16)。
這里,參照?qǐng)D16所示的流程圖說(shuō)明有關(guān)分配對(duì)象t265的增益推斷控制部51的處理內(nèi)容。
首先,在步驟e1、e2,從追蹤對(duì)象保持部52中取出追蹤對(duì)象A3,從追蹤對(duì)象保持部52中消除。并將追蹤對(duì)象A3的分配對(duì)象項(xiàng)目即分配對(duì)象a3存入已處理分配對(duì)象保持部53(圖28C(D-7),圖29A(d-5))。
在步驟e3,由于追蹤對(duì)象A3的分配對(duì)象項(xiàng)的分配對(duì)象a3未分配資源元素,所以,進(jìn)入步驟e5。
在步驟e5~e9,由于集合OS1為空的,所以,集合RS1、集合OS2、集合RS2也是空的,所以,不計(jì)算得失值(圖29B(d-5))。
然后,在步驟e10,對(duì)與追蹤對(duì)象A3的分配對(duì)象項(xiàng)目即分配對(duì)象a3具有資源繼承關(guān)系的分配對(duì)象t263、t264、x2、x3,如圖28C的(d-8)所示的那樣生成追蹤對(duì)象A4、A5、A6、A7。這里,各追蹤對(duì)象的生存區(qū)間長(zhǎng)度之和成為A3.LNS的1與分配對(duì)象a3的生存區(qū)間長(zhǎng)度3的和4,并返回步驟e1。
接著,在步驟e1、e2,從追蹤對(duì)象保持部52中取出追蹤對(duì)象A4,從追蹤對(duì)象保持部52中消除。并將追蹤對(duì)象A4的分配對(duì)象項(xiàng)目即分配對(duì)象t263存入已處理分配對(duì)象保持部53(圖28C(d-9)、圖29A(d-6))。
在步驟e3,由于追蹤對(duì)象A4的分配對(duì)象項(xiàng)目即分配對(duì)象t263已分配資源元素D0,故進(jìn)入步驟e4。
在步驟e4,計(jì)算得失值=1/A4.LNS=0.25,加到圖28B(d-3)的得失保持部56的資源元素D0的內(nèi)容中,并返回步驟e1(圖28B(d-4))。
接著,對(duì)追蹤對(duì)象A5也進(jìn)行與追蹤對(duì)象A4同樣的處理,追蹤對(duì)象保持部52轉(zhuǎn)移到圖28C的(d-10),得失保持部56轉(zhuǎn)移到圖28B的(d-5),已處理分配對(duì)象保持部53轉(zhuǎn)移到圖29A的(d-7)(步驟e1~e4、e11)。
然后,在步驟e1、e2,從追蹤對(duì)象保持部52中取出追蹤對(duì)象A6,從追蹤對(duì)象保持部52中去除。并將追蹤對(duì)象A6的分配對(duì)象項(xiàng)目即分配對(duì)象x2存入已處理分配對(duì)象保持部53中(圖28C(d-11),圖29A(d-8))。
在步驟e3,由于追蹤對(duì)象A6的分配對(duì)象項(xiàng)目即分配對(duì)象x2未分配資源元素,所以,進(jìn)入步驟e5。
在步驟e5、e6,計(jì)算集合OS1=(Ar12,Ar22,F(xiàn)r2,t263,Br2)和集合RS1=(D0、D1、A0)。
在步驟e7、e8,由于已損失分配對(duì)象保持部54如圖29B的(d-5)所示的那樣是空的,所以,成為集合OS2=(Ar12、Ar22、Fr2、t263、Br2),集合RS2=(D0、D1、A0),已損失分配對(duì)象保持部54成為圖29B的(d-6)。
在步驟e9,計(jì)算得失值=1/A6.LNS=0.25,從圖28B(d-5)的得失保持部56的資源元素D0、D1、A0的內(nèi)容中減除(圖28B(d-6))。
然后,在步驟e10,因?yàn)榕c追蹤對(duì)象A6的分配對(duì)象項(xiàng)目即分配對(duì)象x2具有資源繼承關(guān)系的分配對(duì)象a3已存進(jìn)圖29A(d-8)的已處理分配對(duì)象保持部53中,故不生成追蹤對(duì)象。返回步驟e1。
對(duì)追蹤對(duì)象A7也作與追蹤對(duì)象A6同樣的處理,追蹤對(duì)象保持部52轉(zhuǎn)移到圖28C的(d-12),得失保持部56轉(zhuǎn)移到圖28B的(d-7),已處理分配對(duì)象保持部轉(zhuǎn)移到圖29A的(d-9)(步驟e1~e4、e10)。
在步驟e1,由于追蹤對(duì)象保持部52如圖28C的(d-12)所示的那樣是空的,故結(jié)束得失計(jì)算子程序的處理,并返回步驟d16。
現(xiàn)在,參照?qǐng)D15所示的流程圖的步驟d17以下的步驟說(shuō)明有關(guān)分配對(duì)象t265的增益推斷控制部51的處理內(nèi)容。
首先,增益推斷控制部51將圖28B的(d-7)所示的得失保持部56中存放的值乘以分配對(duì)象a3的分配優(yōu)先級(jí)2.67的值從增益保持部37中減去。亦即,如圖28B的(d-7)所示的那樣,得失為負(fù)數(shù)時(shí),最后就如圖28A的(d-4)所示的那樣將各值相加,并返回步驟d12(步驟d17)。
然后,如圖29C的(d-2)所示的那樣,由于重復(fù)分配對(duì)象保持部55是空的,故增益推斷控制部51使推斷增益計(jì)算部36結(jié)束處理,并返回步驟b8。
現(xiàn)在,參照?qǐng)D14所示的流程圖的步驟b9以下的步驟再次說(shuō)明關(guān)于分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,資源元素決定控制部38計(jì)算存放在圖28A的(d-4)所示的增益保持部37中的值為最大的資源元素的集合RS=(D1、A0),并存進(jìn)分配候補(bǔ)資源元素保持部33中(圖26B(d-3))(步驟b9)。
然后,資源元素決定控制部38根據(jù)集合RS的內(nèi)容得到集合RES=(AR,DR),并存入評(píng)價(jià)資源41(步驟b10,圖31C(d))。
由于集合RES存在二個(gè)資源,故資源元素決定控制部38執(zhí)行步驟b12(步驟b11)。
然后,資源元素決定控制部38起動(dòng)資源類別成本計(jì)算部39,進(jìn)行成本計(jì)算(步驟b12)。
現(xiàn)在,參照?qǐng)D17所示的流程圖再次說(shuō)明關(guān)于分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,資源類別成本計(jì)算控制部501將與資源成本保持部40和資源類別總成本保持部505的各資源元素對(duì)應(yīng)的內(nèi)容置為零(步驟f1,圖30A(d),圖30B(d))。
資源類別成本計(jì)算控制部501清除追蹤對(duì)象保持部504和已處理分配對(duì)象保持部506(步驟f2,圖30C(d),圖31A(d))。
然后,資源類別成本計(jì)算控制部501對(duì)分配對(duì)象t265生成追蹤對(duì)象rA1,將rA1的各項(xiàng)目設(shè)定為rA1.ASO=t265rA1.LNS=1。然后,如圖30C的(d-1)所示的那樣,將rA1存入追蹤對(duì)象保持部504(步驟f3)。在圖30C(d-1)中如(rA1,t265,1)那樣表示追蹤對(duì)象,各項(xiàng)目表示(分配對(duì)象名、分配對(duì)象、生存區(qū)間長(zhǎng)之和)。
而后,資源類別成本計(jì)算控制部501調(diào)出后續(xù)成本值計(jì)算子程序(步驟f4)。
現(xiàn)在,參照?qǐng)D18所示的流程圖說(shuō)明有關(guān)分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,在步驟g1、g2,從追蹤對(duì)象保持部504中取出追蹤對(duì)象rA1,從追蹤對(duì)象保持部504中消除。并將追蹤對(duì)象rA1的分配對(duì)象項(xiàng)目即t265存入已處理分配對(duì)象保持部506中(圖30C(d-2),圖31A(d-1))。
然后,在步驟g3,由于存在存放在圖31C(d)的評(píng)價(jià)資源保持部41中的具有可分配給分配對(duì)象t265的資源AR、DR,所以,首先對(duì)資源AR執(zhí)行步驟g4以下的各步。
在步驟g4,首先取出分配對(duì)象t265的使用中間命令i27,在步驟g5生成成本模式(間接引用,An,未,一),并存入成本模式保持部502中(圖31B(d))。
在步驟g6,取出與成本模式(間接引用,An,未)相匹配的成本項(xiàng)即圖27A的(g)。
在步驟g7,根據(jù)取出的成本項(xiàng)的成本2與追蹤對(duì)象rA1的生存區(qū)間長(zhǎng)度之和即rA1.LSN計(jì)算后續(xù)成本值2/1=2。
然后,將在步驟g8求得的后續(xù)成本值與資源類別總成本保持部505的資源AR的內(nèi)容相加。(圖30B(d-1))。
然后,返回步驟g4,取出分配對(duì)象t265的中間命令i28,生成成本模式(加法,未,An,未),取出與該成本模式相匹配的圖27A的(f)的成本模式。根據(jù)該成本模式的成本3與追蹤對(duì)象rA1的生成區(qū)間長(zhǎng)度之和即rA1.LSN計(jì)算后續(xù)成本值3/1=3,并與資源類別總成本保持部505的資源AR的內(nèi)容相加,成為圖30B的(d-2)。
然后,返回到步驟g4,但是由于已取出全部分配對(duì)象t265的中間命令,所以,返回步驟g3。
對(duì)資源DR也進(jìn)行與資源AR同樣的成本計(jì)算時(shí),由于與圖27A的(g)、(f)的成本項(xiàng)匹配,結(jié)果資源類別總成本保持部505成為圖30B的(d-3)。
然后,返回步驟g3,由于對(duì)評(píng)價(jià)資源保持部41存放的全部資源AR、DR(圖31C(d))的成本計(jì)算已結(jié)束,所以,執(zhí)行步驟g9。
在步驟g9,由于不存在與分配對(duì)象t265具有資源繼承關(guān)系的分配對(duì)象,所以,不生成追蹤對(duì)象。
然后,返回步驟g1,但是,如圖30C的(d-2)所示的那樣,由于追蹤對(duì)象保持部504是空的,故結(jié)束后續(xù)成本值計(jì)算子程序的處理,返回步驟f4。
現(xiàn)在,參照?qǐng)D17的流程圖中步驟f5以下的步驟說(shuō)明關(guān)于分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,在步驟f5,將資源類別總成本保持部505存放的值存入資源類別成本保持部40中(圖30A(d-1))。
然后,在步驟f6,計(jì)算資源類別成本保持部40的值為最小的資源AR、DR,如圖31C的(d-1)所示的那樣存入評(píng)價(jià)資源保持部41。
在步驟f7,由于資源類別成本保持部40的值為最小的資源有多個(gè),故執(zhí)行步驟f8。
在步驟f8,由于存在生存區(qū)間與分配對(duì)象t265重疊的分配對(duì)象p1、a3,故執(zhí)行步驟f9。
在步驟f9、f10,將資源類別成本保持部40的內(nèi)容置為零,清除追蹤對(duì)象保持部504,將分配對(duì)象p1、a3存入重復(fù)分配對(duì)象保持部507(圖30A(d-2)、圖30C(d-3)、圖31D(d))。
在步驟f11、f12、f13,從重復(fù)分配對(duì)象保持部507中取出分配對(duì)象p1,將資源類別總成本保持部505的內(nèi)容置為零,清除已處理分配對(duì)象保持部505(圖31D(d-1)、圖30B(d-4)、圖31A(d-2))。
在步驟f14,對(duì)取出的分配對(duì)象p1生成追蹤對(duì)象rA2,將rA2的各項(xiàng)目設(shè)定為rA2.ASO=P1rA2.LNS=1。如圖30C的(d-4)所示的那樣,將rA2存入追蹤對(duì)象保持部504。
然后,資源類別成本計(jì)算部501調(diào)出后續(xù)成本值計(jì)算子程序(步驟f15)。
現(xiàn)在,參照?qǐng)D18所示的流程圖說(shuō)明關(guān)于分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,在步驟g1、g2,從追蹤對(duì)象保持部504中取出追蹤對(duì)象rA2,從追蹤對(duì)象504中消除。并將追蹤對(duì)象rA2的分配對(duì)象項(xiàng)目即分配對(duì)象p1存入已處理分配對(duì)象保持部506中(圖30C(d-5),圖31A(d-3))。
然后,在步驟g3,由于存在存放在圖31C(d-1)的評(píng)價(jià)資源保持部41中的可分配給分配對(duì)象p1的資源AR、DR,所以,首先對(duì)資源AR執(zhí)行步驟g4以下的步驟。
對(duì)分配對(duì)象p1的使用中間命令i5、i27、i29、i30分別生成成本模式(代入,An,未,一),(間接引用,未,An,一)、(加法、An,IM,左同)、(間接引用,未,An,一),使之分別與圖27A的成本項(xiàng)(h)(i)(a)(i)匹配,根據(jù)追蹤對(duì)象rA2的生存區(qū)間長(zhǎng)度之和rA2.LNS計(jì)算后續(xù)成本值時(shí),如圖30R的(d-5)所示的那樣更新資源類別總成本保持部505的資源AR的內(nèi)容(步驟g4~g8)。
然后,返回步驟g3,取出資源DR,對(duì)分配對(duì)象的使用中間命令i5、i27、i29、i30分別生成成本模式(代入,Dn,未,一)、(間接引用,未,Dn,一)、(加法,Dn,IM,左同)、(間接引用,未,Dn,一),使之分別與圖27A的成本項(xiàng)(h)(j)(a)(i)匹配,根據(jù)追蹤對(duì)象rA2的生存區(qū)間長(zhǎng)度之和即rA2.LNS計(jì)算后續(xù)成本值時(shí),如圖30B的(d-6)所示的那樣,更新資源類別總成本保持部505的資源DR的內(nèi)容(步驟g4~g8)。
然后,返回步驟g3,由于滿足條件的資源已全部取出,故執(zhí)行步驟g9。
在步驟g9,由于不存在與分配對(duì)象p1具有資源繼承關(guān)系的分配對(duì)象,故不重新生成追蹤對(duì)象,并返回步驟g1。
然后,在步驟g1,如圖30C的(d-5)所示的那樣,由于追蹤對(duì)象保持部504為空的,所以,結(jié)束后續(xù)成本值計(jì)算子程序,并返回步驟f15。
現(xiàn)在,參照?qǐng)D17的流程圖中步驟f16以下的步驟說(shuō)明關(guān)于分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,在步驟f16,按照得失保持部56中存放的值和分配對(duì)象p1的優(yōu)先級(jí)0.27,如圖30A的(d-3)所示的那樣,更新資源類別成本保持部40的資源AR、DR的內(nèi)容。
在步驟f11、f12、f13,從重復(fù)分配對(duì)象保持部507中取出分配對(duì)象a3,將資源類別總成本保持部505的內(nèi)容置為零,清除已處理分配對(duì)象保持部506(圖31D(d-2)、圖30B(d-7)、圖31A(d-4))。
在步驟f14,對(duì)取出的分配對(duì)象a3的生成追蹤對(duì)象rA3,將rA3的各項(xiàng)目設(shè)定為rA3.ASO=a3rA3.LNS=1。如圖30C的(d-6)所示的那樣,將rA3存入追蹤對(duì)象保持部504。
然后,在步驟f15,資源類別成本計(jì)算控制部501調(diào)出后續(xù)成本值計(jì)算子程序。
現(xiàn)在,參照?qǐng)D18所示的流程圖說(shuō)明有關(guān)分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,在步驟g1、g2,從追蹤對(duì)象保持部504中取出追蹤對(duì)象rA3,從追蹤對(duì)象保持部504中刪除。并將追蹤對(duì)象rA3的分配對(duì)象項(xiàng)目即分配對(duì)象a3存入處理畢分配對(duì)象保持部506(圖30C(d-7),圖31A(d-5))。
在步驟g3,由于存在存放在圖31C的(d-1)的評(píng)價(jià)資源保持部41中的可分配給分配對(duì)象a3的資源AR、DR,故執(zhí)行步驟g4以下各步。
對(duì)分配對(duì)象a3的中間命令i20、i26、i28分別生成成本模式(加法,未,未,不同)、(加法,未,未,不同)、(加法,An,未,未),使之與圖27的成本項(xiàng)(k)(k)(1)匹配,如圖30B的(d-8)所示的那樣,更新資源類別總成本保持部505的資源AR的內(nèi)容(步驟g4~g8)。
然后,返回步驟g3,取出資源DR,對(duì)資源DR進(jìn)行同樣的處理,如圖30B的(d-9)所示的那樣,更新資源類別總成本保持部505的資源DR的內(nèi)容(步驟g4~g8)。
然后,返回步驟g3,由于滿足條件的資源已全部取出,所以,執(zhí)行步驟g9。
在步驟g9,對(duì)與分配對(duì)象a3具有資源繼承關(guān)系的未分配的分配對(duì)象并且未存放到圖31A的(d-5)的已處理分配對(duì)象保持部506中的分配對(duì)象x2、x3,如圖30C的(d-8)所示的那樣,生成追蹤對(duì)象rA4、rA5。
接著,在步驟g1、g2,從追蹤對(duì)象保持部504中取出追蹤對(duì)象rA4,從追蹤對(duì)象保持部504中消除。并將追蹤對(duì)象rA4的分配對(duì)象項(xiàng)目即x2存入已處理分配對(duì)象保持部506中(圖30C(d-9),圖31A(d-6))。
在步驟g3,由于存在存放在圖31C(d-1)的評(píng)價(jià)資源保持部41中的可分配給分配對(duì)象x2的資源AR、DR,所以,執(zhí)行步驟g4以下的處理。
對(duì)分配對(duì)象x2的使用中間命令i12、i13、i20分別生成(加法,未,IM,不同)、(加法,An,IM,未)、(加法、未,An,未),使之與圖27A的成本項(xiàng)(m)(b)(f)匹配,計(jì)算成本值8,由于追蹤對(duì)象rA4的生存區(qū)間長(zhǎng)度之和項(xiàng)目即rA4.LNS為4,所以,后續(xù)成本值就成為8/4=2,如圖30B的(d-10)所示的那樣,更新資源類別總成本保持部505的資源AR的內(nèi)容(步驟g4~g8)。
然后,返回步驟g3,取出資源DR,對(duì)資源DR進(jìn)行同樣的處理,如圖30B(d-11)所示的那樣,更新資源類別總成本保持部505的資源DR的內(nèi)容(步驟g4~g8)。
然后,返回步驟g3,由于滿足條件的資源已全部取出,故執(zhí)行步驟g9。
在步驟g9,因?yàn)榕c分配對(duì)象x2具有資源繼承關(guān)系的唯一分配對(duì)象a3,如圖31A(d-6)所示的那樣未存入已處理分配對(duì)象保持部506中,故不重新生成追蹤對(duì)象,并返回步驟g1。
在步驟g1、g2,從追蹤對(duì)象保持部504中取出追蹤對(duì)象rA5,從追蹤對(duì)象保持部504中消除。并將追蹤對(duì)象rA5的分配對(duì)象項(xiàng)目即x3存入處理畢分配對(duì)象保持部506中(圖30C(d-10)、圖31A(d-7))。
接著,與前述追蹤對(duì)象rA4的分配對(duì)象x2一樣,對(duì)分配對(duì)象x3的使用中間命令i13、i26計(jì)算資源AR、DR的后續(xù)成本值如圖30B(d-12)所示的那樣,更新資源類別總成本保持部505的資源AR及資源DR的內(nèi)容(步驟g3~g8)。
在步驟g9,由于與分配對(duì)象x3具有資源繼承關(guān)系的唯一的分配對(duì)象a3如圖31A(d-7)所示的那樣未存入已處理分配對(duì)象保持部506,故不生成新的追蹤對(duì)象而返回步驟g1。
接著,在步驟g1,如圖30C(d-10)所示的那樣,由于追蹤對(duì)象保持部504為空的,故結(jié)束后續(xù)成本值計(jì)算子程序,并返回步驟f15。
現(xiàn)在,參照?qǐng)D17的流程圖中步驟f16以下步驟說(shuō)明關(guān)于分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,在步驟f16,根據(jù)得失保持部56中存放的值和分配對(duì)象a3的優(yōu)先級(jí)2.67,如圖30A(d-4)所示的那樣,更新資源成本保持部40的資源AR、DR的內(nèi)容。
接著,返回步驟f11,但是,如圖31D(d-2)所示的那樣,由于重復(fù)分配對(duì)象保持部507是空的,所以,終止資源類別成本計(jì)算部39的處理,并返回步驟b12。
現(xiàn)在,參照?qǐng)D14所示的流程圖的步驟b13以下各步說(shuō)明有關(guān)分配對(duì)象t265的資源類別成本計(jì)算部39的處理內(nèi)容。
首先,資源元素決定控制部38將屬于圖31C(d-1)的評(píng)價(jià)資源保持部41的、存放在圖30A(d-4)的資源類別成本保持部40中的成本為最小的資源、并且是存放在圖26B(d-3)的分配候補(bǔ)資源元素保持部31中的資源元素D1,分配給t265(步驟b13)。
對(duì)全部分配對(duì)象進(jìn)行這樣的處理,并將資源元素分配給各分配對(duì)象(對(duì)上述分配對(duì)象t265以后的分配對(duì)象的說(shuō)明省略)。
這樣,根據(jù)本發(fā)明,由于參照程序中的各分配對(duì)象的資源繼承關(guān)系達(dá)到多大范圍,所以,可以進(jìn)行更理想的資源分配。
向嵌套級(jí)深的地點(diǎn)優(yōu)先分配寄存器,再可以獲得預(yù)先將此已分配的寄存器向嵌套淺的場(chǎng)所擴(kuò)散的靈活的分配結(jié)果。另外,向使用頻率高的場(chǎng)所優(yōu)先分配寄存器,也可以獲得預(yù)先將此已分配的寄存器向嵌套級(jí)淺低的地點(diǎn)擴(kuò)散的靈活的分配結(jié)果。進(jìn)而,可以實(shí)現(xiàn)自變量寄存器、返回值寄存器、破壞性寄存器等預(yù)先分配的對(duì)象已確定的分配對(duì)象將其資源向周圍擴(kuò)展的靈活的資源分配。
由于分配結(jié)果極其簡(jiǎn)單,所以,可以進(jìn)一步改善最后生成的機(jī)器語(yǔ)言程序的程序大小和執(zhí)行速度。
上述實(shí)施例雖然是按順次進(jìn)行使用成本值計(jì)算、得失值計(jì)算、后續(xù)成本值計(jì)算的結(jié)構(gòu)將計(jì)算處理按層次細(xì)分的形式加以說(shuō)明的,但本實(shí)施例在不離開(kāi)其宗旨的范圍內(nèi)可以變更地實(shí)施。下面列舉出二個(gè)代表性的應(yīng)用示例。
應(yīng)用例1特別是當(dāng)對(duì)減少執(zhí)行時(shí)間比對(duì)縮小編譯程序生成的目的代碼的大小更重視時(shí),已知存在分配對(duì)象x的使用中間命令i的循環(huán)級(jí)或i的執(zhí)行次數(shù)時(shí),可以將其執(zhí)行次數(shù)與在步驟c7取出的成本項(xiàng)e1的成本相乘、并將乘積值加到總成本保持部中(在圖15的使用成本計(jì)算控制部47的流程圖的步驟c4檢測(cè)循環(huán)級(jí)次,并輸入使用成本計(jì)算部34)。
應(yīng)用例2在步驟b9求出的資源元素的集合RS中存在多個(gè)資源元素時(shí),在步驟b12的資源類別成本計(jì)算的后續(xù)成本值計(jì)算中,通過(guò)進(jìn)行與在步驟b4進(jìn)行的使用成本計(jì)算相同的處理,也可以從集合RS中選出更合適的資源元素分配給分配對(duì)象x。
這時(shí),首先將步驟g5~g8置換為與步驟c5~c9相同的處理,計(jì)算使用成本,然后,將如圖17、18中的總成本保持部46置換為資源類別總成本保持部505、將使用成本保持部35置換為資源類別成本保持部40、將使用成本置換為后續(xù)成本值。然后,在步驟b11判定集合RS的元素是否為多個(gè)。
在步驟b12和步驟f1~f6,計(jì)算將屬于資源RS的資源元素分配給與分配對(duì)象x具有資源繼承關(guān)系或者間接地具有資源繼承關(guān)系的未分配的分配對(duì)象x1時(shí)的使用成本,并將計(jì)算出的使用成本再除以從分配對(duì)象x到分配對(duì)象x1的生存區(qū)間的長(zhǎng)度,然后,將得到的值保存進(jìn)使用成本保持部35中。反之,在步驟f7,當(dāng)使用成本保持部35中所保存的最小成本的資源元素有多個(gè)時(shí),就執(zhí)行步驟f8,在步驟f8~f11,計(jì)算將屬于集合RS的資源元素分配給生存區(qū)間與分配對(duì)象x重疊并且未分配的分配對(duì)象x2存在資源繼承關(guān)系的或者間接地具有資源繼承關(guān)系的未分配的分配對(duì)象x3時(shí)的使用成本,并將計(jì)算出的值除以從分配對(duì)象x2到分配對(duì)象x3的生存區(qū)間的長(zhǎng)度,然后再乘以-1,最后將所得結(jié)果保存于使用成本保持部35中。
這樣,參照保持使用成本的使用成本保持部35的保持內(nèi)容,便可將保持內(nèi)容為最小的資源元素分配給分配對(duì)象x。
<應(yīng)用例3>
作為得失值雖然使用了生存區(qū)間之和,但也可將其作為分配對(duì)象的個(gè)數(shù)。例如,在圖21中,可用從分配對(duì)象x到分配對(duì)象x2存在的分配對(duì)象的個(gè)數(shù)3(分配對(duì)象x、x5、x6),使分配給分配對(duì)象x2的資源要素D1的得失值為1/3。
<應(yīng)用例4>
在本實(shí)施例中,求出正號(hào)得失值和負(fù)號(hào)得失值后,將它們的和作為最后的得失值,但也可以分別使用上述得失值,根據(jù)一方的得失值縮小分配寄存器的候補(bǔ),另外根據(jù)另一方的得失值決定分配寄存器。例如,在圖15中的分配對(duì)象x的寄存器決定中,可分配給分配對(duì)象x的資源要素為D1、D2、D3。這時(shí),可分配的資源要素中,首先將負(fù)得失值最小的資源要素作為分配對(duì)象x的分配候補(bǔ)。但是,關(guān)于負(fù)得失值不能設(shè)定的資源要素,將負(fù)得失值取為0。于是,資源要素D2、D3的負(fù)得失值變?yōu)?。這樣一來(lái),由于資源要素D1的負(fù)得失值為Px/(L2+L3),所以負(fù)得失值最大的資源要素變?yōu)镈2、D3,將其作為新的分配對(duì)象x的分配候補(bǔ)。
其次,將正得失值最大的資源要素分配給分配對(duì)象x。但是,關(guān)于正得失值設(shè)定的資源要素,正得失值取0。于是,資源要素D3的得失值變?yōu)?,將得失值最大的資源要素D2分配給分配對(duì)象。
權(quán)利要求
1.用于將高級(jí)語(yǔ)言編寫的程序翻譯成機(jī)器語(yǔ)言程序的編譯程序、生成多個(gè)以編程語(yǔ)言描述的程序中的變量與生存區(qū)間的組合即分配對(duì)象并將寄存器、存貯器等硬件資源所具有的資源元素順序分配給所生成的分配對(duì)象的資源分配設(shè)備,其特征是包含如下結(jié)構(gòu),即得失值計(jì)算裝置,根據(jù)分配對(duì)象中已分配的分配對(duì)象的生存區(qū)間和隨后應(yīng)分配的分配對(duì)象的生存區(qū)間在程序處于什么樣的位置關(guān)系,對(duì)各資源元素計(jì)算表示哪一資源元素對(duì)隨后應(yīng)分配的分配對(duì)象適宜的得失值;分配裝置,根據(jù)對(duì)各資源元素計(jì)算的得失值的大小將某個(gè)資源元素分配給應(yīng)分配的分配對(duì)象;和控制裝置,反復(fù)起動(dòng)得失值計(jì)算裝置和分配裝置,直至全部分配對(duì)象被分配為止。
2.權(quán)利要求1中所述資源分配設(shè)備,其特征是具有判斷程序中各分配對(duì)象的位置關(guān)系的位置關(guān)系判斷裝置,所述位置關(guān)系判斷裝置包含如下結(jié)構(gòu),即重復(fù)關(guān)系判斷裝置,判斷已分配資源元素的分配對(duì)象的生存區(qū)間是否與應(yīng)分配的分配對(duì)象的生存區(qū)間相重復(fù);已分配一被分配間連續(xù)判斷裝置,判斷已分配資源元素的分配對(duì)象的生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間是否連續(xù)。所述得失值計(jì)算裝置包含如下結(jié)構(gòu),即第一增加部,當(dāng)由已分配一被分配間連續(xù)判斷裝置判定生存區(qū)間與應(yīng)分配的分配對(duì)象連續(xù)時(shí),就根據(jù)從已分配資源元素的分配對(duì)象到應(yīng)分配的分配對(duì)象為止的生存區(qū)間的長(zhǎng)短,在判定為連續(xù)的已分配的分配對(duì)象中,使已分配的資源元素的得失值增加,上述分配裝置不將分配給具有由重復(fù)關(guān)系判斷裝置判定生存區(qū)間重復(fù)的已分配的分配對(duì)象的資源元素分配給應(yīng)分配的分配對(duì)象,而將判定生存區(qū)間不重復(fù)的已分配的分配對(duì)象中得失值為最大的資源元素分配給應(yīng)分配的分配對(duì)象。
3.權(quán)利要求2中所述資源分配設(shè)備,其特征是所述位置關(guān)系判斷裝置包含如下結(jié)構(gòu),即已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置,檢測(cè)具有與已分配資源元素的分配對(duì)象重疊的生存區(qū)間的未分配的分配對(duì)象;和未分配—被分配間連續(xù)判斷裝置,判斷所檢測(cè)的未分配的分配對(duì)象的生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間是否連續(xù),所述得失值計(jì)算裝置包含如下結(jié)構(gòu),即第一減少部,當(dāng)判斷為連續(xù)時(shí),根據(jù)從已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象到應(yīng)分配的分配對(duì)象的生存區(qū)間的長(zhǎng)短,減小分配給該已分配的分配對(duì)象的資源元素的得失值。
4.權(quán)利要求3中所述資源分配設(shè)備,其特征是當(dāng)由已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置判定有多個(gè)未分配的分配對(duì)象時(shí),所述未分配—被分配間連續(xù)判斷裝置判斷所檢測(cè)的多個(gè)未分配的分配對(duì)象中哪一個(gè)的生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間連續(xù)。
5.權(quán)利要求3中所述資源分配設(shè)備,其特征是還包含優(yōu)先級(jí)存貯裝置,用于與各分配對(duì)象相對(duì)應(yīng)地存貯反映程序中分配對(duì)象的使用頻度和/或生存區(qū)間的嵌套級(jí)的分配對(duì)象的優(yōu)先級(jí);所述得失值計(jì)算裝置和分配裝置按此優(yōu)先級(jí)存貯裝置存貯的優(yōu)先級(jí)順序確定應(yīng)分配的分配對(duì)象。
6.權(quán)利要求5中所述資源分配設(shè)備,其特征是所述位置關(guān)系判斷裝置包含如下結(jié)構(gòu),即被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置,在由得失值計(jì)算裝置對(duì)各資源元素計(jì)算出的得失值在多個(gè)資源元素相互大小相同時(shí),檢測(cè)具有與應(yīng)分配的分配對(duì)象的生存區(qū)間重疊的生存區(qū)間的未分配的分配對(duì)象;和未分配—已分配間連續(xù)判定裝置,判斷所檢測(cè)的分配對(duì)象的生存區(qū)間與已分配資源元素的分配對(duì)象的生存區(qū)間是否連續(xù),所述得失值計(jì)算裝置包含如下結(jié)構(gòu),即優(yōu)先級(jí)檢測(cè)部,檢測(cè)由被分配一側(cè)重疊分配對(duì)象檢測(cè)部檢測(cè)的分配對(duì)象的優(yōu)先級(jí);第一縮短計(jì)算部,計(jì)算從已分配的分配對(duì)象到所檢測(cè)的未分配的分配對(duì)象的生存區(qū)間的長(zhǎng)短;和第二減小部,將所檢測(cè)的優(yōu)先級(jí)乘以計(jì)算的長(zhǎng)短,根據(jù)此乘積結(jié)果減小該已分配資源元素的得失值。
7.權(quán)利要求6中所述資源分配設(shè)備,其特征是所述位置關(guān)系判斷裝置包含如下結(jié)構(gòu),即已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置,檢測(cè)具有與已分配資源元素的分配對(duì)象的生存區(qū)間重疊的生存區(qū)間的未分配的分配對(duì)象;未分配—未分配間連續(xù)判斷裝置,判斷由被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的生存區(qū)間是否與由已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的生存區(qū)間相連續(xù),所述得失值計(jì)算裝置包含如下結(jié)構(gòu),即第二縮短計(jì)算部,計(jì)算從被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置所檢測(cè)的未分配的分配對(duì)象到已分配側(cè)重疊分配對(duì)象檢測(cè)裝置所檢測(cè)的未分配的分配對(duì)象的生存區(qū)間長(zhǎng)短;第二增加部,將檢測(cè)的優(yōu)先級(jí)乘以計(jì)算長(zhǎng)短,根據(jù)此乘積結(jié)果增加分配給已分配的分配對(duì)象的資源元素的得失值。
8.權(quán)利要求7中所述資源分配設(shè)備,其特征是當(dāng)由已分配一側(cè)重疊分配對(duì)象檢測(cè)裝置判定有多個(gè)未分配的分配對(duì)象時(shí),所述未分配—未分配間連續(xù)判斷裝置判斷所檢測(cè)的多個(gè)未分配的分配對(duì)象中哪一個(gè)的生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間相連續(xù)。
9.權(quán)利要求7中所述資源分配設(shè)備,其特征是還包含有得失值存貯部,存放全部資源元素和各自對(duì)應(yīng)的各資源元素的得失值的初始值,第一和第二增加部使得失值存貯部中存放的各資源元素的得失值增加,而第一和第二減小部則使得失值存貯部中存放的各資源元素的得失值減少。
10.權(quán)利要求9中所述資源分配設(shè)備,其特征是還包含如下結(jié)構(gòu),即推斷裝置,在程序中分配各資源的資源元素時(shí),對(duì)于分配的分配對(duì)象與各資源元素的組合通過(guò)計(jì)算其總和值的推斷值,來(lái)推斷定義3應(yīng)分配的分配對(duì)象的全部定義命令和使用的全部使用命令的執(zhí)行周期和/或代碼大小的總和值達(dá)到什么程度;和資源元素單復(fù)判斷裝置,對(duì)各資源元素的推斷結(jié)果即推斷值進(jìn)行比較,判斷推斷值為最小的資源元素是一個(gè)還是多個(gè),當(dāng)判定為一個(gè)時(shí),所述分配裝置將推斷值為最小的資源元素分配給應(yīng)分配的分配對(duì)象,當(dāng)判定為多個(gè)時(shí),將得失值為最大的資源元素分配給應(yīng)分配的分配對(duì)象。
11.權(quán)利要求10中所述資源分配設(shè)備,其特征是所述推斷裝置包含如下結(jié)構(gòu),即命令模式輸出部,對(duì)在程序中分配對(duì)象的全部定義命令和使用命令,采用機(jī)器語(yǔ)言命令格式輸出表示程序中的該分配對(duì)象的定義命令和使用命令的信息即命令模式;成本存貯部,與由命令模式輸出部輸出的命令模式分別對(duì)應(yīng)地存貯表示機(jī)器語(yǔ)言命令的各操作數(shù)中應(yīng)用各資源的資源元素時(shí)該定義命令和使用命令的執(zhí)行周期和/或代碼大小的成本;和成本總和部,從成本存貯部中取出與所輸出的命令模式對(duì)應(yīng)的成本,將取出的成本對(duì)各資源元素累計(jì)求和,并將求和所得的總和值作為推斷值。
12.權(quán)利要求10中所述資源分配設(shè)備,其特征是還包含預(yù)測(cè)裝置,用于當(dāng)時(shí)各資源元素由得失值計(jì)算裝置計(jì)算的得失值在多個(gè)不同資源的資源元素之間具有相同大小時(shí),預(yù)測(cè)優(yōu)先級(jí)比應(yīng)分配的分配對(duì)象低、并且對(duì)于在此應(yīng)分配的分配對(duì)象之后進(jìn)行分配的全部未分配的分配對(duì)象最適合的資源元素。上述分配裝置將由預(yù)測(cè)裝置預(yù)測(cè)的資源元素分配給應(yīng)分配的分配對(duì)象。
13.權(quán)利要求12中所述資源分配設(shè)備,其特征是所述預(yù)測(cè)裝置包含如下結(jié)構(gòu),即第一后續(xù)分配對(duì)象檢測(cè)裝置,用于檢測(cè)全部具有與應(yīng)分配的分配對(duì)象的生存區(qū)間相連續(xù)的生存區(qū)間并且優(yōu)先級(jí)比該分配對(duì)象低的未分配的分配對(duì)象。第一推斷裝置,對(duì)于第一后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的全部分配對(duì)象和各資源元素的組合通過(guò)計(jì)算該總和值的推斷值,推斷當(dāng)向檢測(cè)的各分配對(duì)象分配各資源元素時(shí)定義該分配對(duì)象的全部定義命令和使用的全部使用命令的執(zhí)行周期和/或代碼大小的總和值達(dá)到什么程度;第一生存區(qū)間長(zhǎng)度計(jì)數(shù)裝置,對(duì)由第一后續(xù)分配對(duì)象檢測(cè)裝置所檢測(cè)的每一分配對(duì)象,計(jì)數(shù)介于由第一后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的各分配對(duì)象與應(yīng)分配的分配對(duì)象之間的連續(xù)的生存區(qū)間長(zhǎng)度;第一加權(quán)裝置,對(duì)于檢測(cè)的各分配對(duì)象與各資源元素的組合,將對(duì)該分配對(duì)象計(jì)數(shù)的生存區(qū)間的長(zhǎng)短作為權(quán)重對(duì)由第一推斷裝置計(jì)算的推斷值進(jìn)行加權(quán);第一總和裝置,對(duì)由第一加權(quán)裝置加權(quán)后的推斷值按各資源元素進(jìn)行求和計(jì)算;和第一優(yōu)化資源元素判斷裝置,將由第一總和裝置求和的總和結(jié)果為最小的資源元素判斷為最合適于優(yōu)先級(jí)比應(yīng)分配的分配對(duì)象低的未分配的分配對(duì)象的資源元素。
14.權(quán)利要求13中所述資源分配設(shè)備,其特征是所述預(yù)測(cè)裝置包含如下結(jié)構(gòu),即第二后續(xù)分配對(duì)象檢測(cè)裝置,當(dāng)判定由第一優(yōu)化資源元素判斷裝置是多個(gè)資源元素最合適時(shí),檢測(cè)生存區(qū)間與應(yīng)分配的分配對(duì)象重疊的未分配的分配對(duì)象和具有與該未分配的分配對(duì)象的生存區(qū)間連續(xù)的生存區(qū)間的未分配的分配對(duì)象;第二推斷裝置,當(dāng)將各資源元素分配給由第二后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象時(shí),對(duì)于檢測(cè)的分配對(duì)象與各資源元素的組合,通過(guò)計(jì)算該總和值的推斷值;來(lái)推斷定義所檢測(cè)的各分配對(duì)象的全部定義命令和使用的全部使用命令的執(zhí)行周期和/或代碼大小的總和值達(dá)到什么程度;第二生存區(qū)間長(zhǎng)計(jì)數(shù)裝置,對(duì)于由第二后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的每一分配對(duì)象,計(jì)數(shù)介于生存區(qū)間與應(yīng)分配的分配對(duì)象的生存區(qū)間重疊的未分配的分配對(duì)象和具有與該重疊一側(cè)的分配對(duì)象的生存區(qū)間連續(xù)的生存區(qū)間的分配對(duì)象之間的連續(xù)的生存區(qū)間的長(zhǎng)度;第二加權(quán)裝置,對(duì)于由第二后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象與各資源元素的組合,將對(duì)該分配對(duì)象計(jì)數(shù)的生存區(qū)間的長(zhǎng)短和各分配對(duì)象的優(yōu)先級(jí)作為權(quán)重對(duì)由第二推斷裝置推斷的推斷值進(jìn)行加權(quán);第二總和裝置,對(duì)由第二加權(quán)裝置加權(quán)后的各分配對(duì)象的推斷值按各資源元素進(jìn)行求和計(jì)算;和第二優(yōu)化資源元素判斷裝置,判定由第二總和裝置對(duì)各資源元素求和的總和值為最大的資源元素為最合適于在應(yīng)分配的分配對(duì)象之后進(jìn)行分配的全部未分配的分配對(duì)象的資源元素。
15.權(quán)利要求14中所述資源分配設(shè)備,其特征是所述第一和第二加權(quán)裝置,在第一和第二生存區(qū)間長(zhǎng)度計(jì)數(shù)裝置計(jì)數(shù)的分配對(duì)象間的生存區(qū)間長(zhǎng)度為0時(shí),將1作為生存區(qū)間的長(zhǎng)短進(jìn)行加權(quán),當(dāng)計(jì)數(shù)的生存區(qū)間長(zhǎng)度不是0時(shí),就計(jì)算該生存區(qū)間長(zhǎng)度的倒數(shù),并將計(jì)算的此生存區(qū)間長(zhǎng)的倒數(shù)作為生存區(qū)間長(zhǎng)短進(jìn)行加權(quán)。
16.權(quán)利要求15中所述資源分配設(shè)備,其特征是包含有成本存貯裝置,當(dāng)存貯多個(gè)使用機(jī)器語(yǔ)言命令格式表示程序中分配對(duì)象的定義命令和使用命令的信息即命令模式、并在機(jī)器語(yǔ)言命令中使用各資源的資源元素時(shí),與各命令模式對(duì)應(yīng)地存貯表示程序中的分配對(duì)象的定義命令和使用命令的執(zhí)行周期和/或代碼大小的成本,上述第一推斷裝置包含如下結(jié)構(gòu),即第一命令模式輸出部,讀出與由第一后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的全部定義命令和使用命令對(duì)應(yīng)的命令模式,并輸出讀出的命令模式;和第一成本總和部,從成本存貯裝置中取出與輸出的命令模式對(duì)應(yīng)的成本,按每一資源元素對(duì)取出的成本進(jìn)行求和計(jì)算,并將求和的總和值作為推斷值,所述第二推斷裝置包含如下結(jié)構(gòu),即第二命令模式輸出部,讀出與由第二后續(xù)分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的全部定義命令和使用命令對(duì)應(yīng)的命令模式,并輸出讀出的命令模式;和第二成本總和部,從成本存貯裝置中取出與輸出的命令模式對(duì)應(yīng)的成本,按每一資源元素對(duì)取出的成本進(jìn)行求和計(jì)算,并將求和的總和值作為推斷值。
17.權(quán)利要求16中所述資源分配設(shè)備,其特征是命令模式具有表示運(yùn)算結(jié)果的存貯目標(biāo)為哪一操作數(shù)或與任一操作數(shù)也不一致的信息,與存貯目標(biāo)為操作數(shù)的命令模式對(duì)應(yīng)的成本小于與非操作數(shù)命令模式對(duì)應(yīng)的成本。
18.權(quán)利要求16中所述資源分配設(shè)備,其特征是命令模式具有表示對(duì)應(yīng)的使用命令是生存區(qū)間的結(jié)束點(diǎn)或非結(jié)束點(diǎn)的信息,與是結(jié)束點(diǎn)的命令模式對(duì)應(yīng)的成本小于與非結(jié)束點(diǎn)對(duì)應(yīng)的命令模式的成本。
19.權(quán)利要求9中所述資源分配設(shè)備,其特征是還包含如下結(jié)構(gòu),即預(yù)約分配對(duì)象檢測(cè)裝置,根據(jù)上述程序檢測(cè)應(yīng)分配的資源元素預(yù)先確定的分配對(duì)象;和預(yù)約資源元素存貯裝置,存貯應(yīng)分配給預(yù)約分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象的資源元素,分配裝置將應(yīng)分配的資源元素分配給由預(yù)約分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象,在分配之后將某個(gè)資源元素分配給優(yōu)先級(jí)最大的分配對(duì)象。
20.權(quán)利要求19中所述資源分配設(shè)備,其特征是所述預(yù)約分配對(duì)象檢測(cè)裝置根據(jù)上述程序檢測(cè)保持調(diào)用函數(shù)的自變量的分配對(duì)象,上述預(yù)約資源元素存貯裝置存貯應(yīng)分配給該分配對(duì)象的自變量寄存器。
21.權(quán)利要求19中所述資源分配設(shè)備,其特征是所述預(yù)約分配對(duì)象檢測(cè)裝置根據(jù)上述程序檢測(cè)保持函數(shù)調(diào)用的返回值的分配對(duì)象,上述預(yù)約資源元素存貯裝置存貯應(yīng)分配給該分配對(duì)象的返回值寄存器。
22.權(quán)利要求19中所述資源分配設(shè)備,其特征是所述預(yù)約分配對(duì)象檢測(cè)裝置根據(jù)上述程序檢測(cè)數(shù)值可重置的分配對(duì)象,所述預(yù)約資源元素存貯裝置存貯應(yīng)分配給該分配對(duì)象的破壞寄存器。
23.權(quán)利要求9中所述資源分配設(shè)備,其特征是還包含如下結(jié)構(gòu),即生存區(qū)間繼承關(guān)系集合存貯裝置,與由生存區(qū)間在該分配對(duì)象的起始點(diǎn)結(jié)束的全部分配對(duì)象和生存區(qū)間在該分配對(duì)象的結(jié)束點(diǎn)開(kāi)始的全部分配對(duì)象組成的集合即生存區(qū)間繼承關(guān)系集合對(duì)應(yīng)地存貯程序中的各分配對(duì)象,上述已分配—被分配間連續(xù)判斷裝置包含如下結(jié)構(gòu),即第一判斷部,參照關(guān)于應(yīng)分配的分配對(duì)象的生存區(qū)間繼承關(guān)系集合,判斷在該生存區(qū)間繼承關(guān)系集合中是否存在已分配的分配對(duì)象;第二判定部,用于當(dāng)判定不存在已分配的分配對(duì)象時(shí),取出生存區(qū)間繼承關(guān)系集合內(nèi)的其他分配對(duì)象,并參照關(guān)于取出的分配對(duì)象的生存區(qū)間繼承關(guān)系集合,判斷該生存區(qū)間繼承關(guān)系集合中是否存在已分配的分配對(duì)象;控制部,用于反復(fù)起動(dòng)第二判定部直至判定存在已分配的分配對(duì)象時(shí)為止;總和部,用于對(duì)作為檢測(cè)結(jié)果的分配對(duì)象的生存區(qū)間長(zhǎng)度進(jìn)行求和計(jì)算;和倒數(shù)計(jì)算部,計(jì)算應(yīng)分配的分配對(duì)象的生存區(qū)間長(zhǎng)度與由總和部求和的生存區(qū)間長(zhǎng)度之和的倒數(shù),并將計(jì)算結(jié)果作為生存區(qū)間長(zhǎng)短。
24.權(quán)利要求23中所述資源分配設(shè)備,其特征是分配對(duì)象的生存區(qū)間利用從該生存區(qū)間所占據(jù)的程序中由開(kāi)始點(diǎn)到結(jié)束點(diǎn)的命令位置信息表示,所述總和部對(duì)此命令位置信息進(jìn)行求和計(jì)算,并將總和值作為生存區(qū)間長(zhǎng)度。
25.權(quán)利要求24中所述資源分配設(shè)備,其特征是分配對(duì)象的生存區(qū)間的開(kāi)始點(diǎn)和結(jié)束點(diǎn)用程序中的命令位置信息表示,所述資源分配設(shè)備還包含如下結(jié)構(gòu),即開(kāi)始結(jié)束點(diǎn)存貯裝置,對(duì)應(yīng)地存貯程序中的分配對(duì)象、與各分配對(duì)象的生存區(qū)間的開(kāi)始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⒑团c各分配對(duì)象的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔?;第一集合化裝置,參照開(kāi)始結(jié)束點(diǎn)存貯裝置,查找出與程序中各分配對(duì)象的以生存區(qū)間的開(kāi)始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⑴c結(jié)束點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象,并將查找出的分配對(duì)象和程序中的分配對(duì)象作為同一生存區(qū)間繼承關(guān)系集合;第二集合化裝置,參照開(kāi)始結(jié)束點(diǎn)存貯裝置,查找出與程序中各分配對(duì)象的于生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔⑴c開(kāi)始點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象,并將查找出的分配對(duì)象和程序中的分配對(duì)象作為同一生存區(qū)間繼承關(guān)系集合;和寫入裝置,將程序中的分配對(duì)象和由第一及第二集合化裝置進(jìn)行集合化處理后的生存區(qū)間繼承集合對(duì)應(yīng)地寫入生存區(qū)間繼承關(guān)系集合存貯部。
26.權(quán)利要求9中所述資源分配設(shè)備,其特征是還包含生存區(qū)間繼承關(guān)系集合存貯裝置,與由生存區(qū)間在分配對(duì)象的開(kāi)始點(diǎn)結(jié)束的全部分配對(duì)象和生存區(qū)間在該分配對(duì)象的結(jié)束點(diǎn)開(kāi)始的全部分配對(duì)象組成的集合即生存區(qū)間繼承關(guān)系集合對(duì)應(yīng)地存貯程序中的各分配對(duì)象;上述未分配—被分配間連續(xù)判斷裝置包含如下結(jié)構(gòu),即第一判斷部,參照關(guān)于應(yīng)分配的分配對(duì)象的生存區(qū)間繼承關(guān)系集合,判斷該生存區(qū)間繼承關(guān)系集合中是否存在由已分配一側(cè)重分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象;第二判斷部,用于當(dāng)判定不存在未分配的分配對(duì)象時(shí)就取出生存區(qū)間繼承關(guān)系集合內(nèi)的其他的分配對(duì)象,并參照關(guān)于取出的分配對(duì)象的生存區(qū)間繼承關(guān)系集合,判斷該生存區(qū)間繼承關(guān)系集合中是否存在由已分配一側(cè)重分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象;控制部,用于反復(fù)起動(dòng)第二判斷部直至判定存在有未分配的分配對(duì)象時(shí)為止,上述得失值計(jì)算裝置包含如下結(jié)構(gòu),即總和部,用于對(duì)作為檢測(cè)結(jié)果的分配對(duì)象的生存區(qū)間長(zhǎng)度進(jìn)行求總和;倒數(shù)計(jì)算部,計(jì)算應(yīng)分配的分配對(duì)象的生存區(qū)間長(zhǎng)度與由總和部求和的生存區(qū)間長(zhǎng)度之和的倒數(shù),并將計(jì)算結(jié)果作為生存區(qū)間長(zhǎng)短。
27.權(quán)利要求26中所述資源分配設(shè)備,其特征是分配對(duì)象的生存區(qū)間利用從該生存區(qū)間所占據(jù)的程序中開(kāi)始點(diǎn)到結(jié)束點(diǎn)的命令位置信息表示。
28.權(quán)利要求27中所述資源分配設(shè)備,其特征是分配對(duì)象的生存區(qū)間的開(kāi)始點(diǎn)和結(jié)束點(diǎn)用程序中的命令位置信息表示。上述資源分配設(shè)備還包含如下結(jié)構(gòu),即開(kāi)始結(jié)束點(diǎn)存貯裝置,對(duì)應(yīng)地存貯程序中的分配對(duì)象、與各分配對(duì)象的生存區(qū)間的開(kāi)始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⒑团c各分配對(duì)象的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔ⅲ坏谝患匣b置,參照開(kāi)始結(jié)束點(diǎn)存貯裝置查找出與程序中各分配對(duì)象的生存區(qū)間開(kāi)始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⑴c結(jié)束點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象,并將查找出的分配對(duì)象與程序中的分配對(duì)象作為同一生存區(qū)間繼承關(guān)系集合;第二集合化裝置,參照開(kāi)始結(jié)束點(diǎn)存貯裝置查找出與程序中各分配對(duì)象的生存區(qū)間結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔⑴c開(kāi)始點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象,并將查找出的分配對(duì)象與程序中的分配對(duì)象作為同一生存區(qū)間繼承關(guān)系集合;寫入裝置,將程序中的分配對(duì)象和由第一及第二集合化裝置進(jìn)行集合化處理后的生存區(qū)間繼承集合對(duì)應(yīng)地寫入生存區(qū)間繼承關(guān)系集合存貯部。
29.權(quán)利要求9中所述資源分配設(shè)備,其特征是還包含有生存區(qū)間繼承關(guān)系集合存貯裝置,用于與由生存區(qū)間在該分配對(duì)象的開(kāi)始點(diǎn)結(jié)束的全部分配對(duì)象和生存區(qū)間在該分配對(duì)象的結(jié)束點(diǎn)開(kāi)始的全部分配對(duì)象構(gòu)成的集合即生存區(qū)間繼承關(guān)系集合對(duì)應(yīng)地存貯程序中的各分配對(duì)象,上述未分配—分配畢間連續(xù)判斷裝置包含如下結(jié)構(gòu),即第一判斷部,參照關(guān)于由被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的生存區(qū)間繼承關(guān)系集合,判斷該生存區(qū)間繼承關(guān)系集合中是否存在已分配的分配對(duì)象;第二判斷部,用于當(dāng)不存在已分配的分配對(duì)象時(shí),取出生存區(qū)間繼承關(guān)系集合內(nèi)的其他的分配對(duì)象,并參照關(guān)于取出的分配對(duì)象的生存區(qū)間繼承關(guān)系集合,判斷該生存區(qū)間繼承關(guān)系集合中是否存在有已分配的分配對(duì)象;控制部,用于反復(fù)起動(dòng)第二判斷部直到判定存在已分配的分配對(duì)象時(shí)為止,上述得失值計(jì)算裝置包含如下結(jié)構(gòu),即總和部,對(duì)作為檢測(cè)結(jié)果的分配對(duì)象的生存區(qū)間長(zhǎng)度進(jìn)行求和計(jì)算;倒數(shù)計(jì)算部,計(jì)算應(yīng)分配的分配對(duì)象的生存區(qū)間長(zhǎng)度與由總和部求和的生存區(qū)間長(zhǎng)度之和的倒數(shù),并將計(jì)算結(jié)果作為生存區(qū)間長(zhǎng)短。
30.權(quán)利要求29中所述資源分配設(shè)備,其特征是分配對(duì)象的生存區(qū)間用該生存區(qū)間所占據(jù)的程序中的開(kāi)始點(diǎn)到結(jié)束點(diǎn)的命令位置信息表示,總和部對(duì)命令位置信息數(shù)進(jìn)行求和,并將總和值作為生存區(qū)間長(zhǎng)度。
31.權(quán)利要求30中所述資源分配設(shè)備,其特征是分配對(duì)象生存區(qū)間的開(kāi)始點(diǎn)和結(jié)束點(diǎn)用程序中的命令位置信息表示,上述資源分配設(shè)備還包含如下結(jié)構(gòu),即開(kāi)始結(jié)束點(diǎn)存貯裝置,對(duì)應(yīng)地存貯程序中的分配對(duì)象、與各分配對(duì)象的生存區(qū)間的開(kāi)始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⒑团c各分配對(duì)象的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔?;第一集合化裝置,參照開(kāi)始結(jié)束點(diǎn)存貯裝置,查找出與程序中各分配對(duì)象的生存區(qū)間的開(kāi)始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⑴c結(jié)束點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象,并將查找出的分配對(duì)象與程序中的分配對(duì)象作為同一生存區(qū)間繼承關(guān)系集合;第二集合化裝置,參照開(kāi)始結(jié)束點(diǎn)存貯裝置,查找出與程序中各分配對(duì)象的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔⑴c開(kāi)始點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象,并將查找出的分配對(duì)象與程序中的分配對(duì)象作為同一生存區(qū)間繼承關(guān)系集合;和寫入裝置,將程序中的分配對(duì)象和由第一及第二集合化裝置進(jìn)行集合化處理后的生存區(qū)間繼承集合對(duì)應(yīng)地寫入生存區(qū)間繼承關(guān)系集合存貯部。
32.權(quán)利要求9中所述資源分配設(shè)備,其特征是還包含生存區(qū)間繼承關(guān)系集合存貯裝置,對(duì)應(yīng)與由生存區(qū)間在該分配對(duì)象的開(kāi)始點(diǎn)結(jié)束的全部分配對(duì)象和生存區(qū)間在該分配對(duì)象的結(jié)束點(diǎn)開(kāi)始的全部分配對(duì)象構(gòu)成的集合即生存區(qū)間繼承關(guān)系集合對(duì)應(yīng)地存貯程序中的各分配對(duì)象,上述未分配—未分配間連續(xù)判斷裝置包含如下結(jié)構(gòu),即第一判斷部,參照關(guān)于由被分配一側(cè)重疊分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象的生存區(qū)間繼承關(guān)系集合,判斷在該生存區(qū)間繼承關(guān)系集合中是否存在由已分配一側(cè)重分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象;第二判斷部,用于當(dāng)判定不存在未分配的分配對(duì)象時(shí),取出生存區(qū)間繼承關(guān)系集合中的其他分配對(duì)象,并參照關(guān)于取出的分配對(duì)象的生存區(qū)間繼承關(guān)系集合,判斷該生存區(qū)間繼承關(guān)系集合中是否存在由已分配一側(cè)重分配對(duì)象檢測(cè)裝置所檢測(cè)的未分配的分配對(duì)象;控制部,用于反復(fù)起動(dòng)第二判斷部直到判定存在未分配的分配對(duì)象時(shí)為止;總和部,對(duì)作為檢測(cè)結(jié)果的分配對(duì)象的生存區(qū)間長(zhǎng)度進(jìn)行求和計(jì)算;和倒數(shù)計(jì)算部,計(jì)算應(yīng)分配的分配對(duì)象的生存區(qū)間長(zhǎng)度與由總和部求和的生存區(qū)間長(zhǎng)度之和的倒數(shù),并將計(jì)算結(jié)果作為生存區(qū)間長(zhǎng)短。
33.權(quán)利要求32中所述資源分配設(shè)備,其特征是分配對(duì)象的生存區(qū)間用該生存區(qū)間所占據(jù)的程序中的開(kāi)始點(diǎn)到結(jié)束點(diǎn)的命令位置信息表示,總和部對(duì)命令位置信息數(shù)求和,并將求和值作為生存區(qū)間長(zhǎng)度。
34.權(quán)利要求33中所述資源分配設(shè)備,其特征是分配對(duì)象的生存區(qū)間的開(kāi)始點(diǎn)和結(jié)束點(diǎn)用程序中的命令位置信息表示,上述資源分配設(shè)備還包含如下結(jié)構(gòu),即開(kāi)始結(jié)束點(diǎn)存貯裝置,對(duì)應(yīng)地存貯程序中的分配對(duì)象、與各分配對(duì)象生存區(qū)間的開(kāi)始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⒑团c各分配對(duì)象生存區(qū)間結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔?;第一集合化裝置,參照開(kāi)始結(jié)束點(diǎn)存貯裝置,查找出與程序中各分配對(duì)象的生存區(qū)間開(kāi)始點(diǎn)相當(dāng)?shù)拿钗恢眯畔⑴c結(jié)束點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象,并將查找出的分配對(duì)象與程序中的分配對(duì)象作為同一的生存區(qū)間繼承關(guān)系集合;第二集合化裝置,參照開(kāi)始結(jié)束點(diǎn)存貯裝置,查找出與程序中各分配對(duì)象的生存區(qū)間的結(jié)束點(diǎn)相當(dāng)?shù)拿钗恢眯畔⑴c起始點(diǎn)相當(dāng)?shù)娜糠峙鋵?duì)象,并將查找出的分配對(duì)象與程序中的分配對(duì)象作為同一的生存區(qū)間繼承關(guān)系集合;寫入裝置,將程序中的分配對(duì)象與由第一和第二集合化裝置進(jìn)行集合化處理后的生存區(qū)間繼承集合對(duì)應(yīng)地寫入生存區(qū)間繼承關(guān)系集合存貯部。
35.用于將高級(jí)語(yǔ)言編寫的程序翻譯成機(jī)器語(yǔ)言程序的編譯程序、生成多個(gè)以編程語(yǔ)言描述的程序中的變量與生存區(qū)間的組合即分配對(duì)象并將優(yōu)先級(jí)賦予生成的分配對(duì)象后,按優(yōu)先級(jí)順序?qū)⒓拇嫫鳌⒋尜A器等硬件即資源的資源元素分配給分配對(duì)象的資源分配設(shè)備,其特征是包含如下結(jié)構(gòu),即優(yōu)先級(jí)賦予裝置,從程序各部分檢測(cè)程序中的分配對(duì)象的使用頻度和/或生存區(qū)間的嵌套級(jí),并根據(jù)檢測(cè)結(jié)果將優(yōu)先級(jí)賦予分配對(duì)象;得失值計(jì)算裝置,根據(jù)分配對(duì)象中已分配的分配對(duì)象的生存區(qū)間與隨后應(yīng)分配的分配對(duì)象的生存區(qū)間在程序中處于什么樣的位置關(guān)系對(duì)各資源元素計(jì)算表示哪一資源元素合適于隨后應(yīng)分配的分配對(duì)象的得失值;分配裝置,根據(jù)對(duì)各資源元素計(jì)算出的得失值的大小將某個(gè)資源元素分配給應(yīng)分配的分配對(duì)象;控制裝置,用于反復(fù)起動(dòng)得失值計(jì)算裝置和分配裝置直至全部分配對(duì)象分配完為止。
36.權(quán)利要求35中所述資源分配設(shè)備,其特征是還包含如下結(jié)構(gòu),即推斷裝置,對(duì)應(yīng)分配的分配對(duì)象與各資源元素的組合,通過(guò)計(jì)算其總和值的推斷值,來(lái)推斷在程序中分配各資源的資源元素時(shí)應(yīng)分配的分配對(duì)象已定義的全部定義命令和使用的全部使用命令的執(zhí)行周期和/或代碼大小的總和值達(dá)到什么程度;資源元素單復(fù)判斷裝置,將每一資源元素的推斷結(jié)果即推斷值加以比較,判斷推斷值為最小的資源元素是一個(gè)還是多個(gè),所述分配裝置,當(dāng)判定為一個(gè)時(shí)就將推斷值為最小的資源元素分配給應(yīng)分配的分配對(duì)象,當(dāng)判定為多個(gè)時(shí)就將得失值為最大的資源元素分配給應(yīng)分配的分配對(duì)象。
37.權(quán)利要求36中所述資源分配設(shè)備,其特征是所述推斷裝置包含如下結(jié)構(gòu),即命令模式輸出部,對(duì)程序中的該分配對(duì)象的全部定義命令和使用命令輸出使用機(jī)器語(yǔ)言命令的命令格式表示程序中的分配對(duì)象的定義命令和使用命令的信息即命令模式;成本存貯部,與由命令模式輸出部輸出得的命令模式對(duì)應(yīng)地分別存貯表示當(dāng)在機(jī)器語(yǔ)言命令的各操作數(shù)中使用各資源的資源元素時(shí)的該定義命令和使用命令的執(zhí)行周期和/或代碼大小的成本;成本總和部,取出與由成本存貯部輸出的命令模式對(duì)應(yīng)的成本,對(duì)取出的成本按每一資源元素進(jìn)行求和計(jì)算,并將求和的總和值作為推斷值。
38.用于將高級(jí)語(yǔ)言編寫的程序翻譯成機(jī)器語(yǔ)言程序的編譯程序,將寄存器、存貯器等硬件即資源的資源元素分配給用編程語(yǔ)言描述的程序中的變量與生存區(qū)間的組合即分配對(duì)象的資源分配設(shè)備,其特征是包含如下結(jié)構(gòu),即分配對(duì)象保持裝置,與優(yōu)先級(jí)對(duì)應(yīng)地保持程序中的分配對(duì)象;第一資源元素分配裝置,從上述分配對(duì)象保持裝置中取出優(yōu)先級(jí)最高的分配對(duì)象,并將某個(gè)資源元素分配給優(yōu)先級(jí)最高的分配對(duì)象。分配對(duì)象取出裝置,從上述分配對(duì)象保持裝置中取出相對(duì)于此前分配的分配對(duì)象的優(yōu)先級(jí)具有下一級(jí)的優(yōu)先級(jí)的分配對(duì)象;一次重疊分配對(duì)象檢測(cè)裝置,檢測(cè)生存區(qū)間與所述分配對(duì)象取出裝置取出的分配對(duì)象重疊的分配對(duì)象;資源元素檢測(cè)裝置,檢測(cè)已分配給上述一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象的資源元素;分配對(duì)象—資源元素檢測(cè)裝置,檢測(cè)已分配了與檢測(cè)的資源元素不同的資源元素的全部分配對(duì)象;增益?zhèn)冗B續(xù)已分配分配對(duì)象判定裝置,判斷由分配對(duì)象—資源元素檢測(cè)裝置檢測(cè)的已分配的分配對(duì)象中生存區(qū)間與由分配對(duì)象取出裝置取出的分配對(duì)象連續(xù)的全部分配對(duì)象;第一得失值計(jì)算裝置,根據(jù)從判斷為連續(xù)的已分配的分配對(duì)象到由分配對(duì)象取出裝置取出的分配對(duì)象的生存區(qū)間的長(zhǎng)短,對(duì)分配給判定生存區(qū)間連續(xù)的分配對(duì)象的所有資源元素,計(jì)算表示已分配給分配對(duì)象的資源元素對(duì)現(xiàn)在要分配的分配對(duì)象適合到何種程度的值即得失值;累計(jì)裝置,對(duì)由分配對(duì)象—資源元素檢測(cè)裝置判定的各資源元素累計(jì)計(jì)算的得失值;第二資源分配裝置,將由累計(jì)裝置累計(jì)的累計(jì)值為最大的資源元素分配給由分配對(duì)象取出裝置取出的分配對(duì)象;控制裝置,反復(fù)起動(dòng)所述分配對(duì)象取出裝置直至全部分配對(duì)象分配完為止。
39.權(quán)利要求38中所述資源分配設(shè)備,其特征是還包含如下結(jié)構(gòu),即第一非重疊非連續(xù)已分配分配對(duì)象判定裝置,判斷由分配對(duì)象—資源元素檢測(cè)裝置檢測(cè)的已分配的分配對(duì)象中生存區(qū)間與分配對(duì)象取出裝置取出的分配對(duì)象不連續(xù)并且生存區(qū)間不重疊的分配對(duì)象;增益一側(cè)連續(xù)未分配分配對(duì)象檢測(cè)裝置,檢測(cè)生存區(qū)間與由第一非重疊非連續(xù)分配畢分配對(duì)象判定裝置判定的已分配的分配對(duì)象的生存區(qū)間重疊的未分配的分配對(duì)象,并且生存區(qū)間與由分配對(duì)象取出裝置取出的分配對(duì)象連續(xù)的分配對(duì)象;第二得失值計(jì)算裝置,根據(jù)從由增益一側(cè)連續(xù)未分配分配對(duì)象檢測(cè)裝置檢測(cè)的未分配的分配對(duì)象到分配對(duì)象取出裝置取出的分配對(duì)象的生存區(qū)間的長(zhǎng)短,計(jì)算分配給由第一非重疊非連續(xù)已分配分配對(duì)象判定裝置判定的已分配的分配對(duì)象的資源元素的得失值;第一減法裝置,從上述累計(jì)裝置累計(jì)的該資源元素的得失值中減去由第二得失值計(jì)算裝置計(jì)算出的得失值,上述第二分配裝置將由第一減法裝置減掉得失值后的得失值為最大的資源元素分配給分配對(duì)象取出裝置取出的分配對(duì)象。
40.權(quán)利要求39中所述資源分配設(shè)備,其特征是還包含如下結(jié)構(gòu),即重疊一側(cè)連續(xù)已分配分配對(duì)象判定裝置,判斷由分配對(duì)象—資源元素檢測(cè)裝置檢測(cè)的已分配的分配對(duì)象中,生存區(qū)間與由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象連續(xù)的分配對(duì)象;第三得失值計(jì)算裝置,根據(jù)從由重疊一側(cè)連續(xù)已分配分配對(duì)象判定裝置判定的已分配的分配對(duì)象到由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象的生存區(qū)間的長(zhǎng)短,計(jì)算分配給由重疊一側(cè)連續(xù)已分配的分配對(duì)象判定裝置判定的已分配的分配對(duì)象的資源元素的得失值;第二減法裝置,從由上述累計(jì)裝置累計(jì)的該資源元素的累計(jì)值中減去由第三得失值計(jì)算裝置計(jì)算的得失值,上述第二分配裝置將由第二減法裝置減去得失值后的累計(jì)值為最大的資源元素分配給分配對(duì)象取出裝置取出的分配對(duì)象。
41.權(quán)利要求40中所述資源分配設(shè)備,其特征是還包含如下結(jié)構(gòu),即第二非重疊非連續(xù)已分配的分配對(duì)象判定裝置,判斷由分配對(duì)象—資源元素檢測(cè)裝置檢測(cè)的已分配的分配對(duì)象中,生存區(qū)間與由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象不連續(xù)并且生存區(qū)間不重疊的分配對(duì)象;重疊一側(cè)連續(xù)未分配分配對(duì)象判定裝置,判定生存區(qū)間與由第二非重疊非連續(xù)已分配的分配對(duì)象判定裝置判定的已分配的分配對(duì)象的生存區(qū)間重疊的未分配的分配對(duì)象并且生存區(qū)間與由一次重疊分配對(duì)象檢測(cè)裝置檢測(cè)的分配對(duì)象連續(xù)的分配對(duì)象;第四得失值計(jì)算裝置,根據(jù)從由重疊一側(cè)連續(xù)未分配分配對(duì)象判定裝置判定的分配對(duì)象到由一次重疊分配對(duì)象檢測(cè)裝置所檢測(cè)的分配對(duì)象的生存區(qū)間的長(zhǎng)短,計(jì)算分配給由第二非重疊非連續(xù)已分配的分配對(duì)象判定裝置判定的已分配的分配對(duì)象的資源元素的得失值;加法裝置,將由上述累計(jì)裝置累計(jì)的關(guān)于該資源元素的累計(jì)值與由第四得失值計(jì)算裝置計(jì)算的得失值進(jìn)行加法運(yùn)算;上述第二分配裝置將由第二加法裝置將得失值加進(jìn)后的累計(jì)值為最大的資源元素分配給由分配對(duì)象取出裝置取出的分配對(duì)象。
全文摘要
資源分配設(shè)備生成變量和該變量的生存區(qū)間的組合即分配對(duì)象,對(duì)每一分配對(duì)象分別求生存區(qū)間重疊的分配對(duì)象和存在資源繼承關(guān)系的分配對(duì)象,并計(jì)算分配的優(yōu)先級(jí)。然后,分配資源元素確定部從優(yōu)先級(jí)高的分配對(duì)象起對(duì)各分配對(duì)象分配可分配的資源元素時(shí),計(jì)算在程序中分配對(duì)象的使用場(chǎng)所所花費(fèi)的成本和具有資源繼承關(guān)系的分配對(duì)象將目標(biāo)代碼中傳輸命令的減少程度定量化的增益值,將使用成本最少并且增益值最大的資源元素分配給分配對(duì)象。
文檔編號(hào)G06F9/45GK1138173SQ96101898
公開(kāi)日1996年12月18日 申請(qǐng)日期1996年3月13日 優(yōu)先權(quán)日1995年3月16日
發(fā)明者田中旭, 佐山旬子, 湯川博司, 小谷謙介 申請(qǐng)人:松下電器產(chǎn)業(yè)株式會(huì)社
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1