发明名称 基于最大完全子图的嵌入式系统寄存器分配方法
摘要 本发明提出了一种基于最大完全子图的嵌入式系统寄存器分配方法,主要解决现有启发式算法分配效果较差,进化算法在交叉算子部分由于没有考虑溢出代价而造成溢出代价太大的问题。其实现步骤是:(1)对中间变量相互干扰图取补图,得到补图G;(2)将所有结点随机分成两类,分别放入集合A或者集合B,并完成对种群的初始化;(3)运用基于溢出代价的最大完全子图交叉算子SC-MCX对种群中的个体进行交叉,产生子代个体;(4)对子代个体利用局部搜索算子LSP进行优化后替换掉父代个体中适应度函数值最大的一个个体,继续参与种群进化。本发明加快了种群进化速度,降低了个体的溢出代价和溢出变量个数,可用于嵌入式系统寄存器分配中。
申请公布号 CN102331919A 申请公布日期 2012.01.25
申请号 CN201110268061.2 申请日期 2011.09.09
申请人 西安电子科技大学 发明人 吴建设;焦李成;畅志艳;陈为胜;钟桦;王爽;侯彪;吴家骥;公茂果
分类号 G06F9/30(2006.01)I;G06F9/45(2006.01)I;G06N3/12(2006.01)I 主分类号 G06F9/30(2006.01)I
代理机构 陕西电子工业专利中心 61205 代理人 王品华;朱红星
主权项 1.一种基于最大完全子图操作的嵌入式系统寄存器分配方法,包括:(1)初始化种群步骤1a)绘制程序编译过程中产生的中间变量的相互干扰图H,在干扰图H中,每一个结点代表一个中间变量,每一条边所连接的两个结点相互干扰,并且给出每个中间变量的溢出代价,溢出代价即嵌入式系统从存储器中存取中间变量所花费的时间;1b)取出相互干扰图H的补图G={N,S,V,E},其中,N代表中间变量总数,S代表寄存器数量,每个寄存器用R<sub>i</sub>,i=1…S表示,V代表所有中间变量的结点集,结点分别标记为0,1,2,...,N-1,E代表所有的无向边的集合,在补图G中,每一条边所连接的两个结点放在同一个寄存器中,使得溢出代价和溢出变量个数尽可能的小;1c)将中间变量的结点集V中的N个结点随机的分成两类,分别用A和B来表示;1d)根据补图G绘制集合A中所有结点之间的邻接关系图G<sub>A</sub>=(V<sub>A</sub>,E<sub>A</sub>),其中V<sub>A</sub>=A,<img file="FDA0000090474390000011.GIF" wi="183" he="52" />对于V<sub>A</sub>中任意的两个结点v<sub>i</sub>,v<sub>j</sub>,当v<sub>i</sub>和v<sub>j</sub>能放在同一个寄存器中时,将v<sub>i</sub>与v<sub>j</sub>相连;1e)寻找邻接图G<sub>A</sub>的一个最大完全子图,将该最大完全子图中包含的结点v<sub>k</sub>放入下标最小的空寄存器中;1f)从G<sub>A</sub>中删除步骤1e)已经放入寄存器中的结点v<sub>k</sub>,得到G<sub>A</sub>更新后的子图G<sub>A</sub>′;1g)对子图G<sub>A</sub>′重复步骤1e)-1f)直到S个寄存器均被使用为止,然后将子图G<sub>A</sub>′中剩余结点和集合B中的结点按照冲突最小原则放入到寄存器中;1h)给定种群规模为M,M设定为任意偶数,将步骤1c)-1g)重复执行M次产生M个个体,分别用Ind<sub>i</sub>,i=1...M表示每个个体,完成种群的初始化;(2)使用交叉算子产生一个新的子代个体步骤2a)使用基于溢出代价的最大完全子图交叉算子SC-MCX对种群中的个体Ind<sub>p</sub>和Ind<sub>p+1</sub>进行交叉产生一个新的子代个体,用offspring<sub>p</sub>表示,其中p=1,3,5,...且p<M;2b)根据补图G绘制两个父代个体<maths num="0001"><![CDATA[<math><mrow><msub><mi>Ind</mi><mi>p</mi></msub><mo>=</mo><mo>{</mo><msubsup><mi>R</mi><mn>1</mn><mi>p</mi></msubsup><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><msubsup><mi>R</mi><mi>S</mi><mi>p</mi></msubsup><mo>}</mo></mrow></math>]]></maths>和<maths num="0002"><![CDATA[<math><mrow><msub><mi>Ind</mi><mrow><mi>p</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><mo>{</mo><msubsup><mi>R</mi><mn>1</mn><mrow><mi>p</mi><mo>+</mo><mn>1</mn></mrow></msubsup><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><msubsup><mi>R</mi><mi>S</mi><mrow><mi>p</mi><mo>+</mo><mn>1</mn></mrow></msubsup><mo>}</mo></mrow></math>]]></maths>中每个寄存器所包含的结点构成的邻接关系图,分别用<img file="FDA0000090474390000023.GIF" wi="205" he="53" />和<img file="FDA0000090474390000024.GIF" wi="269" he="60" />表示;2c)找出每个邻接关系图的一个最大完全子图,分别用<img file="FDA0000090474390000025.GIF" wi="279" he="53" />和<img file="FDA0000090474390000026.GIF" wi="343" he="60" />表示,从中选出溢出代价最大的最大完全子图<img file="FDA0000090474390000027.GIF" wi="134" he="57" />其中t∈{p,p+1},l∈{1,...,S},将<img file="FDA0000090474390000028.GIF" wi="101" he="57" />包含的结点率先放入子代个体<maths num="0003"><![CDATA[<math><mrow><msub><mi>offspring</mi><mi>p</mi></msub><mo>=</mo><mo>{</mo><msubsup><mi>R</mi><mn>1</mn><mi>os</mi></msubsup><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><msubsup><mi>R</mi><mi>S</mi><mi>os</mi></msubsup><mo>}</mo></mrow></math>]]></maths>的第一个寄存器<img file="FDA00000904743900000210.GIF" wi="67" he="53" />中;2d)从所有结点中选取与<img file="FDA00000904743900000211.GIF" wi="101" he="57" />中结点不相冲突的结点放入寄存器<img file="FDA00000904743900000212.GIF" wi="67" he="53" />中,完成对子代个体offspring<sub>p</sub>第一个寄存器<img file="FDA00000904743900000213.GIF" wi="67" he="53" />的构造,并将已经放入寄存器<img file="FDA00000904743900000214.GIF" wi="67" he="53" />中的结点从两个父代所包含的所有寄存器中删除;2e)重复步骤2b)-2c)依次构造子代offspring<sub>p</sub>中剩余的寄存器;2f)将父代个体中剩余的结点,按照冲突最小原则依次放入子代相应的寄存器中,完成对父代个体Ind<sub>p</sub>和Ind<sub>p+1</sub>的交叉,产生出子代个体offspring<sub>p</sub>。(3)用局部搜索算子LSP优化子代个体步骤3a)对步骤2f)中产生的每一个子代个体offspring<sub>p</sub>,采用局部搜索算子LSP进行优化,用优化后的个体替换掉种群中个体Ind<sub>p</sub>和Ind<sub>p+1</sub>适应度函数值最大的一个,继续参与种群进化;3b)设定迭代次数为K,对步骤2a)-3a)重复执行K次,就能将所有的结点高效的分配到寄存器中,达到溢出代价和溢出变量个数最小。
地址 710071 陕西省西安市西安市太白南路2号