專利名稱:基于最大完全子圖的嵌入式系統(tǒng)寄存器分配方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,涉及嵌入式系統(tǒng),特別是一種基于最大完全子圖的嵌入式系統(tǒng)寄存器分配方法,該方法用于嵌入式系統(tǒng)寄存器分配中,能夠高效的將程序編譯過(guò)程中產(chǎn)生的中間變量,盡可能多的存到寄存器中,從而減少溢出代價(jià)和溢出變量個(gè)數(shù), 提高寄存器的利用率,進(jìn)而提高嵌入式系統(tǒng)中程序的編譯效率。
背景技術(shù):
在嵌入式系統(tǒng)中,程序通常是為實(shí)現(xiàn)某個(gè)固定的功能而編寫的,所以要求編寫的程序在編譯后能夠產(chǎn)生高質(zhì)量的代碼,具有較高的執(zhí)行效率。存儲(chǔ)器和寄存器都被用于儲(chǔ)存程序編譯過(guò)程中產(chǎn)生的中間變量。相對(duì)于存儲(chǔ)器,寄存器的訪問(wèn)速度要快的多,但是數(shù)量很少。在程序編譯過(guò)程中,如果寄存器不能存儲(chǔ)所有的中間變量,那么就會(huì)有一部分中間變量被保存到存儲(chǔ)器中,這種情況稱為溢出。嵌入式系統(tǒng)從存儲(chǔ)器中存取中間變量所花費(fèi)的時(shí)間稱之為該中間變量的溢出代價(jià)。因此,程序經(jīng)過(guò)編譯后能否得到高質(zhì)量的代碼很大程度上取決于能否將更多的中間變量保存到寄存器中,以減少溢出中間變量的個(gè)數(shù),這就是嵌入式系統(tǒng)寄存器的分配問(wèn)題。到目前為止,大多數(shù)寄存器分配問(wèn)題都是建模成為圖著色模型來(lái)描述的,較早的基于圖著色模型的嵌入式系統(tǒng)寄存器分配算法是由Briggs等人提出的優(yōu)化圖著色啟發(fā)式算法0CH,設(shè)計(jì)相對(duì)簡(jiǎn)單,是對(duì)chaitin提出的圖著色啟發(fā)式算法的一種改進(jìn),分配效果較差。后來(lái)很多學(xué)者致力于用混合進(jìn)化算法HEA來(lái)解決嵌入式系統(tǒng)寄存器分配問(wèn)題,充分利用遺傳算法的思想,首先對(duì)種群進(jìn)行初始化,然后利用交叉算子從兩個(gè)父代中產(chǎn)生出一個(gè)新的寄存器分配方案,將其遺傳到子代,常用的交叉算子有貪婪分割交叉算子GPX和免沖突交叉算子CFPX,最后通過(guò)局部搜索LSP讓變量在單一個(gè)體中的寄存器之間進(jìn)行調(diào)整從而降低該個(gè)體總的溢出代價(jià)Spill Cost。記錄每一次迭代過(guò)程中產(chǎn)生的最優(yōu)個(gè)體,進(jìn)而得到最終的最優(yōu)個(gè)體,也就得到了寄存器分配辦法。在上面提到的兩個(gè)交叉算子中,GPX只是簡(jiǎn)單的從父代中選擇包含中間變量最多的寄存器遺傳到子代中,并沒(méi)有考慮該寄存器所存儲(chǔ)的中間變量之間的沖突關(guān)系,也沒(méi)有做出相應(yīng)的調(diào)整。CFPX雖然設(shè)計(jì)上優(yōu)于GPX,充分考慮了被繼承的寄存器所存儲(chǔ)的中間變量之間的沖突關(guān)系,但是它僅僅考慮了中間變量的個(gè)數(shù),并沒(méi)有考慮每個(gè)變量的溢出代價(jià),所以也不能稱為一個(gè)完美的交叉算子,得到的寄存器分配方案仍然有較多的中間變量被溢出到存儲(chǔ)器中,降低了寄存器分配的效率。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述已有技術(shù)的不足,提出了一種基于最大完全子圖的嵌入式系統(tǒng)寄存器分配方法,以將程序編譯過(guò)程中產(chǎn)生的中間變量,盡可能多的存到寄存器中,減少溢出代價(jià)和溢出變量個(gè)數(shù),提高寄存器分配效率。為實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案包括如下步驟(1)初始化種群步驟
la)繪制程序編譯過(guò)程中產(chǎn)生的中間變量的相互干擾圖H,在干擾圖H中,每一個(gè)結(jié)點(diǎn)代表一個(gè)中間變量,每一條邊所連接的兩個(gè)結(jié)點(diǎn)相互干擾,并且給出每個(gè)中間變量的溢出代價(jià),溢出代價(jià)即嵌入式系統(tǒng)從存儲(chǔ)器中存取中間變量所花費(fèi)的時(shí)間;lb)取出相互干擾圖H的補(bǔ)圖G= {N,S,V,E},其中,N代表中間變量總數(shù),S代表寄存器數(shù)量,每個(gè)寄存器用Ri, i = 1…S表示,V代表所有中間變量的結(jié)點(diǎn)集,結(jié)點(diǎn)分別標(biāo)記為0,1,2,. . .,N-I, E代表所有的無(wú)向邊的集合,在補(bǔ)圖G中,每一條邊所連接的兩個(gè)結(jié)點(diǎn)放在同一個(gè)寄存器中,使得溢出代價(jià)和溢出變量個(gè)數(shù)盡可能的小;Ic)將中間變量的結(jié)點(diǎn)集V中的N個(gè)結(jié)點(diǎn)隨機(jī)的分成兩類,分別用A和B來(lái)表示;Id)根據(jù)補(bǔ)圖G繪制集合A中所有結(jié)點(diǎn)之間的鄰接關(guān)系Ga= (VajEa)其中Va = A, Ea^E,對(duì)于Va中任意的兩個(gè)結(jié)點(diǎn)Vi,Vj,當(dāng)Vi和\能放在同一個(gè)寄存器中時(shí),將Vi與Vj 相連;Ie)尋找鄰接圖Ga的一個(gè)最大完全子圖,將該最大完全子圖中包含的結(jié)點(diǎn)Vk放入下標(biāo)最小的空寄存器中;If) WGa中刪除步驟Ie)已經(jīng)放入寄存器中的結(jié)點(diǎn)vk,得到Ga更新后的子圖G/ ;Ig)對(duì)子圖G/重復(fù)步驟le)_lf)直到S個(gè)寄存器均被使用為止,然后將子圖G/ 中剩余結(jié)點(diǎn)和集合B中的結(jié)點(diǎn)按照沖突最小原則放入到寄存器中;Ih)給定種群規(guī)模為M,M設(shè)定為任意偶數(shù),將步驟lc)_lg)重復(fù)執(zhí)行M次產(chǎn)生M個(gè)個(gè)體,分別用Indi, i = 1. . .M表示每個(gè)個(gè)體,完成種群的初始化;(2)使用交叉算子產(chǎn)生一個(gè)新的子代個(gè)體步驟2a)使用基于溢出代價(jià)的最大完全子圖交叉算子SC-MCX對(duì)種群中的個(gè)體Indp和 Indp+1進(jìn)行交叉產(chǎn)生一個(gè)新的子代個(gè)體,用Offspringp表示,其中?=1,3,5,...且?<1;2b)根據(jù)補(bǔ)圖G繪制兩個(gè)父代個(gè)體=·(<,…,對(duì)丨和/ +1 =|對(duì)+1,...,對(duì)+1}中每個(gè)寄存器所包含的結(jié)點(diǎn)構(gòu)成的鄰接關(guān)系圖,分別用Gf,...,Gf和Gf+1,...,Gf1表示;2c)找出每個(gè)鄰接關(guān)系圖的一個(gè)最大完全子圖,分別用和 MCf+1,..ICf1表示,從中選出溢出代價(jià)最大的最大完全子圖MCI,其中t e {ρ, p+l},
1 e {1,...,S},將MC丨包含的結(jié)點(diǎn)率先放入子代個(gè)體咖^= ΡΓν.Λ 的第一個(gè)寄
存器Wf5中;2d)從所有結(jié)點(diǎn)中選取與MCI中結(jié)點(diǎn)不相沖突的結(jié)點(diǎn)放入寄存器中,完成對(duì)子代個(gè)體Offspringp第一個(gè)寄存器iT的構(gòu)造,并將已經(jīng)放入寄存器中的結(jié)點(diǎn)從兩個(gè)父代所包含的所有寄存器中刪除;2e)重復(fù)步驟2b) -2c)依次構(gòu)造子代Offspringp中剩余的寄存器;2f)將父代個(gè)體中剩余的結(jié)點(diǎn),按照沖突最小原則依次放入子代相應(yīng)的寄存器中, 完成對(duì)父代個(gè)體Indp和Indp+1的交叉,產(chǎn)生出子代個(gè)體offSpringp。(3)用局部搜索算子LSP優(yōu)化子代個(gè)體步驟3a)對(duì)步驟2f)中產(chǎn)生的每一個(gè)子代個(gè)體offSpringp,采用局部搜索算子LSP進(jìn)行優(yōu)化,用優(yōu)化后的個(gè)體替換掉種群中個(gè)體Inddn Indp+1適應(yīng)度函數(shù)值最大的一個(gè),繼續(xù)參與種群進(jìn)化;3b)設(shè)定迭代次數(shù)為K,對(duì)步驟2a) -3a)重復(fù)執(zhí)行K次,就能將所有的結(jié)點(diǎn)高效的分配到寄存器中,達(dá)到溢出代價(jià)和溢出變量個(gè)數(shù)最小。本發(fā)明具有以下優(yōu)點(diǎn)1)本發(fā)明由于在種群初始化過(guò)程中,引入了補(bǔ)圖和最大完全子圖的思想,使得產(chǎn)生的每一個(gè)個(gè)體已經(jīng)初步的得到了一個(gè)比較好的寄存器分配方案,加快了種群進(jìn)化速度, 提高了寄存器分配效率。2)本發(fā)明的交叉算子由于采用了基于溢出代價(jià)的最大完全子圖交叉算子,在兩個(gè)父代交叉過(guò)程中充分的考慮了溢出代價(jià)因素,降低了子代個(gè)體總的溢出代價(jià)和溢出變量個(gè)數(shù)。
圖1是本發(fā)明的流程圖;圖2是本發(fā)明具體實(shí)例中間變量的相互干擾圖;圖3是本發(fā)明具體實(shí)例中間變量相互干擾圖的補(bǔ)圖G ;圖4是根據(jù)補(bǔ)圖G得到集合A中所有結(jié)點(diǎn)之間的鄰接關(guān)系圖Ga ;圖5是鄰接關(guān)系圖GaW更新圖G/ ;圖6是根據(jù)補(bǔ)圖G繪制兩個(gè)父代個(gè)體Indp和Indp+1中每個(gè)寄存器所包含的結(jié)點(diǎn)構(gòu)成的鄰接關(guān)系圖;圖7是兩個(gè)父代個(gè)體Indp和Indp+1交叉產(chǎn)生子代Offspringp第一個(gè)寄存器結(jié)點(diǎn)的操作示意圖。
具體實(shí)施例方式參照附圖1,本發(fā)明具體實(shí)現(xiàn)步驟描述如下步驟1.對(duì)進(jìn)化種群進(jìn)行初始化。該實(shí)例中間變量的相互干擾圖如圖2所示,圖中結(jié)點(diǎn)0-9代表十個(gè)中間變量,并且每一條邊連接的兩個(gè)結(jié)點(diǎn)所代表的中間變量不能放在同一個(gè)寄存器中。表1給出了每個(gè)結(jié)點(diǎn)所代表的中間變量被溢出到存儲(chǔ)器時(shí),所消耗的溢出代價(jià)。對(duì)圖2所示的中間變量相互干擾圖取補(bǔ)圖,得到補(bǔ)圖G,如圖3所示。圖3中G的任意兩個(gè)有邊相連的結(jié)點(diǎn)所代表的中間變量可以被放在同一個(gè)寄存器中。設(shè)定寄存器數(shù)量S為4,初始化產(chǎn)生一個(gè)種群個(gè)體 Indl表1每個(gè)節(jié)點(diǎn)溢出到存儲(chǔ)器時(shí)所消耗的溢出代價(jià)表
權(quán)利要求
1. 一種基于最大完全子圖操作的嵌入式系統(tǒng)寄存器分配方法,包括(1)初始化種群步驟la)繪制程序編譯過(guò)程中產(chǎn)生的中間變量的相互干擾圖H,在干擾圖H中,每一個(gè)結(jié)點(diǎn)代表一個(gè)中間變量,每一條邊所連接的兩個(gè)結(jié)點(diǎn)相互干擾,并且給出每個(gè)中間變量的溢出代價(jià),溢出代價(jià)即嵌入式系統(tǒng)從存儲(chǔ)器中存取中間變量所花費(fèi)的時(shí)間;lb)取出相互干擾圖H的補(bǔ)圖G = {N,S,V,E},其中,N代表中間變量總數(shù),S代表寄存器數(shù)量,每個(gè)寄存器用Ri, i = 1…S表示,V代表所有中間變量的結(jié)點(diǎn)集,結(jié)點(diǎn)分別標(biāo)記為 0,1,2,...,N-1,E代表所有的無(wú)向邊的集合,在補(bǔ)圖G中,每一條邊所連接的兩個(gè)結(jié)點(diǎn)放在同一個(gè)寄存器中,使得溢出代價(jià)和溢出變量個(gè)數(shù)盡可能的??;Ic)將中間變量的結(jié)點(diǎn)集V中的N個(gè)結(jié)點(diǎn)隨機(jī)的分成兩類,分別用A和B來(lái)表示; Id)根據(jù)補(bǔ)圖G繪制集合A中所有結(jié)點(diǎn)之間的鄰接關(guān)系圖Ga= (Va, Ea),其中Va = A, Ea^E,對(duì)于Va中任意的兩個(gè)結(jié)點(diǎn)Vi,Vj,當(dāng)Vi和\能放在同一個(gè)寄存器中時(shí),將Vi與Vj 相連;Ie)尋找鄰接圖Ga的一個(gè)最大完全子圖,將該最大完全子圖中包含的結(jié)點(diǎn)Vk放入下標(biāo)最小的空寄存器中;If) WGa中刪除步驟Ie)已經(jīng)放入寄存器中的結(jié)點(diǎn)vk,得到Ga更新后的子圖G/ ; Ig)對(duì)子圖Ga'重復(fù)步驟le)_lf)直到S個(gè)寄存器均被使用為止,然后將子圖G/中剩余結(jié)點(diǎn)和集合B中的結(jié)點(diǎn)按照沖突最小原則放入到寄存器中;Ih)給定種群規(guī)模為M,M設(shè)定為任意偶數(shù),將步驟lc)-Ig)重復(fù)執(zhí)行M次產(chǎn)生M個(gè)個(gè)體,分別用Indi, i = 1. . .M表示每個(gè)個(gè)體,完成種群的初始化;(2)使用交叉算子產(chǎn)生一個(gè)新的子代個(gè)體步驟2a)使用基于溢出代價(jià)的最大完全子圖交叉算子SC-MCX對(duì)種群中的個(gè)體Ind1^n Indp+1 進(jìn)行交叉產(chǎn)生一個(gè)新的子代個(gè)體,用Offspringp表示,其中ρ = 1,3,5,...且?<皿;2b)根據(jù)補(bǔ)圖G繪制兩個(gè)父代個(gè)體=·(<,…,對(duì)丨和/ +1 =Pf+1,...,對(duì)I中每個(gè)寄存器所包含的結(jié)點(diǎn)構(gòu)成的鄰接關(guān)系圖,分別用Gf,...,Gf和Gf+1,...,Gf1表示;2c)找出每個(gè)鄰接關(guān)系圖的一個(gè)最大完全子圖,分別用MCf,..和MCf+1,..ICf1 表示,從中選出溢出代價(jià)最大的最大完全子圖MC丨,其中te {p,p+l},le {1,...,S},將 MC丨包含的結(jié)點(diǎn)率先放入子代個(gè)體的第一個(gè)寄存器『中;2d)從所有結(jié)點(diǎn)中選取與中結(jié)點(diǎn)不相沖突的結(jié)點(diǎn)放入寄存器中,完成對(duì)子代個(gè)體Offspringp第一個(gè)寄存器的構(gòu)造,并將已經(jīng)放入寄存器中的結(jié)點(diǎn)從兩個(gè)父代所包含的所有寄存器中刪除;2e)重復(fù)步驟2b)-2c)依次構(gòu)造子代Offspringp中剩余的寄存器; 2f)將父代個(gè)體中剩余的結(jié)點(diǎn),按照沖突最小原則依次放入子代相應(yīng)的寄存器中,完成對(duì)父代個(gè)體Indp和Indp+1的交叉,產(chǎn)生出子代個(gè)體offspringp。(3)用局部搜索算子LSP優(yōu)化子代個(gè)體步驟3a)對(duì)步驟2f)中產(chǎn)生的每一個(gè)子代個(gè)體Offspringp,采用局部搜索算子LSP進(jìn)行優(yōu)化,用優(yōu)化后的個(gè)體替換掉種群中個(gè)體Ind1^n Indp+1適應(yīng)度函數(shù)值最大的一個(gè),繼續(xù)參與種群進(jìn)化;3b)設(shè)定迭代次數(shù)為K,對(duì)步驟2a) _3a)重復(fù)執(zhí)行K次,就能將所有的結(jié)點(diǎn)高效的分配到寄存器中,達(dá)到溢出代價(jià)和溢出變量個(gè)數(shù)最小。
2.根據(jù)權(quán)利要求書1中所述的寄存器分配方法,其中步驟lb)所述的取出相互干擾圖 H的補(bǔ)圖,是指保持相互干擾圖H中結(jié)點(diǎn)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)不變,將干擾圖H中每對(duì)結(jié)點(diǎn)間原有的連接邊刪除,添加干擾圖H中不存在的連接邊,就得到干擾圖H的補(bǔ)圖。
3.根據(jù)權(quán)利要求書1中所述的寄存器分配方法,其中步驟Ig)中所述的將子圖Ga' 中剩余結(jié)點(diǎn)和集合B中的結(jié)點(diǎn)按照沖突最小原則放入到寄存器中,是指對(duì)于任意的結(jié)點(diǎn) we B,找到一個(gè)寄存器、其中j e {1··· S},使得寄存器民中與結(jié)點(diǎn)w在干擾圖H中有邊相連接的結(jié)點(diǎn)的個(gè)數(shù)最少。
4.根據(jù)權(quán)利要求書1中所述的寄存器分配方法,其中步驟3a)中所述的局部搜索算子 LSP,采用Topcuoglu在混合進(jìn)化算法中提供的算子。
全文摘要
本發(fā)明提出了一種基于最大完全子圖的嵌入式系統(tǒng)寄存器分配方法,主要解決現(xiàn)有啟發(fā)式算法分配效果較差,進(jìn)化算法在交叉算子部分由于沒(méi)有考慮溢出代價(jià)而造成溢出代價(jià)太大的問(wèn)題。其實(shí)現(xiàn)步驟是(1)對(duì)中間變量相互干擾圖取補(bǔ)圖,得到補(bǔ)圖G;(2)將所有結(jié)點(diǎn)隨機(jī)分成兩類,分別放入集合A或者集合B,并完成對(duì)種群的初始化;(3)運(yùn)用基于溢出代價(jià)的最大完全子圖交叉算子SC-MCX對(duì)種群中的個(gè)體進(jìn)行交叉,產(chǎn)生子代個(gè)體;(4)對(duì)子代個(gè)體利用局部搜索算子LSP進(jìn)行優(yōu)化后替換掉父代個(gè)體中適應(yīng)度函數(shù)值最大的一個(gè)個(gè)體,繼續(xù)參與種群進(jìn)化。本發(fā)明加快了種群進(jìn)化速度,降低了個(gè)體的溢出代價(jià)和溢出變量個(gè)數(shù),可用于嵌入式系統(tǒng)寄存器分配中。
文檔編號(hào)G06F9/30GK102331919SQ20111026806
公開日2012年1月25日 申請(qǐng)日期2011年9月9日 優(yōu)先權(quán)日2011年9月9日
發(fā)明者侯彪, 公茂果, 吳家驥, 吳建設(shè), 焦李成, 王爽, 暢志艷, 鐘樺, 陳為勝 申請(qǐng)人:西安電子科技大學(xué)