【国等の委託研究の成果に係る記載事項】(出願人による申告)平成23年度、独立行政法人科学技術振興機構、戦略的創造研究推進事業チーム型研究(CREST)・ディペンダブルVLSIシステムの基盤技術、産業技術力強化法第19条の適用を受ける特許出願
【文献】
吉田浩章 外1名,インクリメンタル高位合成に向けた設計記述間差分の計算手法,情報処理学会研究報告 2011 April [DVD-ROM],一般社団法人情報処理学会,2011年 4月15日
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0015】
以下図面に基づいて本発明の実施の形態を詳述する。
(1)本発明の概略
【0016】
図1において、1は本発明による設計記述間差分解析装置を示し、設計記述間差分解析装置1は、C言語やC++言語などの高位言語で記述されたECO(Engineering Change Order)前の高位記述10aと、この高位記述10aのECO後の高位記述(以下、単にECO後高位記述と呼ぶ)10bとを取得すると、中間言語を用いた内部表現にこれらを一旦変換し、中間命令列11aおよびECO後中間命令列11bを生成し得るようになされている。ここで一例として挙げる設計記述間差分解析装置1は、2段階で異なる差分解析処理を実行し得るようになされており、先ず第1段階として、単純な方法で中間命令列11aおよびECO後中間命令列11b間の大部分の表現一致を効率の良いアルゴリズムで求めておき、次に第2段階として、このアルゴリズムで求められた差分となる可能性のある部分(不一致命令)に関して厳密な手法によって差分を特定し、これを中間命令列11aおよびECO後中間命令列11bの最小差分として算出し得るようになされている。
【0017】
実際上、この設計記述間差分解析装置1は、中間言語変換手段2と、中間言語解析手段3と、最小差分解析手段4とを備えており、中間言語変換手段2および中間言語解析手段3によって上述した第1段階目の差分解析処理を実行し、最小差分解析手段4によって第2段階目の差分解析処理を実行し得るようになされている。本発明では、特に最小差分解析手段4によって実行される差分解析処理(以下、最小差分解析処理と呼ぶ)に特徴を有しており、この最小差分解析処理によって厳密な最小差分を特定し得るようになされている。
【0018】
先ず初めに中間言語変換手段2について説明する。ここで、中間言語変換手段2は、例えばC言語で記述された高位記述10aおよびECO後高位記述10bを、中間言語を用いた内部表現に一旦変換し得るようになされている。すなわち、中間言語変換手段2は、高位記述10aの内容を中間言語にて表した中間命令列11aと、ECO後高位記述10bを中間言語にて表したECO後中間命令列11bとを生成し得るようになされている。
【0019】
なお、ここで用いる中間言語としてはコンパイラの分野で広く利用されているLLVM(Low Level Virtual Machine:ローレベル仮想マシン)の表現を使用するが、高位言語で記述された内容を時系列的な命令列に変換できれば、その他種々の中間言語を利用してもよい。
図2Aの上段には、C言語にて記述されたECO前の高位記述10aの一例を示し、
図2Bの上段には、この高位記述10aのECO後高位記述10bの一例を示しており、ECO後高位記述10bでは、高位記述10a内の「i=2」が「i=3」に修正され、かつ高位記述10aに「f[i-3]」が追加されている。以下、これら
図2Aに示す高位記述10aと、
図2Bに示すECO後高位記述10bとを用いて説明してゆく。
【0020】
実際上、中間言語変換手段2は、外部から高位記述10aおよびECO後高位記述10bのデータを取得すると、これらをLLVMの中間言語にそれぞれ変換し、高位記述10aから
図2Aの下段に示すような中間命令列11aを生成し、ECO後高位記述10bから
図2Bの下段に示すようなECO後中間命令列11bを生成する。
【0021】
中間命令列11aの内部表現は、複数の命令p(pは、中間命令列11aを構成する命令の行番号であり、この場合、上から順に1,2,3…となる)が行方向に並んでおり、行番号に沿って先頭から命令1,2,…が逐次的に実行されてゆく。また、ECO後中間命令列11bの内部表現も、複数の命令q(qは、ECO後中間命令列11bを構成する命令の行番号であり、この場合、上から順に1´,2´,3´…となる)が行方向に並んでおり、行番号に沿って先頭から命令1´,2´,…が逐次的に実行されてゆく。ここで、中間命令列11aおよびECO後中間命令列11bの各内部表現の形式は同じであることから、以下、中間命令列11aに着目して中間言語の内部表現について説明する。
【0022】
図3は、
図2Aの下段に示した中間命令列11aの一部拡大図である。各命令pは同じ形式でなり、「n1」や「n2」などの固有の名前(変数とも呼ぶ)N
pと、命令種類T
pと、オペランドO
pとを持っている。命令種類T
pは、「(lbl)label」や「(nil)jimp n3」などのように表記され、( )は命令の結果の型を表しており、例えば32ビット整数型(i32)や、ブール型(i1)、ラベル型(lbl)などがある。また、メモリ書き出しやジャンプ命令などのように実際には結果に型がない命令の型は(nil)となる。
【0023】
命令種類T
pの( )後には、例えば加減算(add,sub)や、乗算(mul)、メモリ読み書き(load,store)、比較(lte,eq,…)などの演算種類が表記される。また、制御構造も一貫した方法で表現するため命令種類T
pの( )後の表記には、その他、ラベル(label)や、ジャンプ(jmp)、ブランチ(br)といった演算種類も存在する。上述の通り名前N
pが固有であるため、演算種類の表現は各名前N
pへの代入が多くとも一回となる静的単一代入(Static Single Assignment form:SSA)形式となる。そのためφ関数を表現するphi命令を持っている。中間命令列11aは、各命令pが「名前N
p=命令種類T
p,オペランドO
p」の形式で内容表現され、各命令p毎にそれぞれ所定の文字列表現になっている。また同様に、ECO後中間命令列11bも、各命令qが「名前N
q=命令種類T
q,オペランドO
q」の形式で内容表現され、各命令q毎にそれぞれ所定の文字列表現になっている。
【0024】
図1に示したように、中間言語変換手段2は、先ずステップ1として、高位記述10aから中間命令列11aを生成するとともに、ECO後高位記述10bからECO後中間命令列11bを生成し、これら中間命令列11aおよびECO後中間命令列11bを中間言語解析手段3に送出する。中間言語解析手段3は、次のステップ2として、文字比較に基づく差分計算処理を実行し、これら中間命令列11aおよびECO後中間命令列11b間の各命令p,qの一致・不一致を特定する。
【0025】
ところで、これら中間命令列11aおよびECO後中間命令列11bについて着目してみると、いくつかの命令p,qは名前N
pの不一致の理由のみによって不一致命令となってしまう。例えば、
図2Aおよび
図2Bに示すように、中間命令列11aの命令16(16行目)では名前N
pが「n16」となっており、一方、ECO後中間命令列11bの命令19´(19行目)では名前N
qが「n19」となっている。
【0026】
しかしながら、命令16の名前N
p(n16)と、命令19´の名前N
q(n19)とを同じにするだけで一致命令となる。また、そのようにすることで、中間命令列11aの命令6(6行目の「n6」)と、ECO後中間命令列11bの命令6´(6行目の「n6」)も、オペランドO
6内にある引数の名前N
r(n16)と、名前N
s(n19)とが同じになり一致命令となることがわかる。このように名前N
p,N
qを適切に割り当てることで差分を最小化することができる。
【0027】
そこで、ここでは、命令p,q間の差分が最小となるような名前N
p,N
qの割り当てを求めることが目的である。この問題は、後述する最小差分解析手段4による最小差分解析処理によって解くことが可能であるが、NP困難であることから、最小差分解析手段4による最小差分解析処理を大規模な命令列に適用することは難しい。但し、ECではECOによる設計変更部分が局所的かつ小規模であることから、この部分のみを最小差分解析手段4によって解くことで大規模な命令列にも適用可能となる。
【0028】
そこで、この実施の形態の場合、中間言語解析手段3は、表現一致について容易に判別可能な部分に関して一致命令を先ずは求める。そして、中間言語解析手段3によって特定した残りの不一致命令に対して最小差分解析手段4による最小差分解析処理を実行することで、中間命令列11aおよびECO後中間命令列11bの全体の差分を最終的に特定する。このようにすることで、本発明の設計記述間差分解析装置1では、大規模な設計記述に対しても差分が小規模であれば、最小差分解析手段4によって最小差分を求めることが可能となる。
【0029】
実際上、この中間言語解析手段3は、多くの命令p,qが名前N
p,N
qを入れ替えるだけで表現一致することから、先ず名前N
p,N
qに依存しない方法で共通部分列(Longest Common Sequence:LCS)を求め、その後、差分を最小にするように名前N
p,N
qを再度割り当てるようになされている。
【0030】
この中間言語解析手段3は、先ず始めに、各命令p(q)において命令種類T
p(T
q)の結果の型に、例えば「$」を付してこれを名前N
p(N
q)と置き換え、名前N
p(N
q)を命令名$N
p($N
q)とする(以下、この変形を命令名の正規化と呼ぶ)。これにより、同じ型を持つ名前N
p(N
q)はすべて同じ命令名$N
p($N
q)を持つことになる。ここで、
図4Aは、
図2Aの中間命令列11aに対して命令名の正規化を行った内部表現を示し、
図4bは、
図2BのECO後中間命令列11bに対して命令名の正規化を行った内部表現を示す。
【0031】
例えば、
図2A下段に示すように、命令名の正規化を行う前、名前N
pが「n1」、命令T
pが「(lbl)」である「n1=(lbl)label」という命令1(1行目)は、命令名の正規化を行うことで、
図4Aに示すように、名前N
pが命令名「$lbl」となり、「$lbl=(lbl)label」という内部表現となる。
【0032】
また、この際、中間言語解析手段3は、命令pの先頭にある名前N
pだけでなく、オペランドO
p内にある引数の名前N
rについても、当該名前N
rに対応する命令rの命令種類T
r(結果の型に「$」を付したもの)に置き換えるようになされている。例えば、
図2A下段に示すように、命令名の正規化を行う前、「n4=(i32)phi 2,n1,n14,n7」という内部表現の命令4(4行目)は、命令名の正規化を行うことで、
図4Aに示すように、名前N
pが命令名「$i32」となり、さらにオペランドO
p内にある引数の名前N
rもそれぞれ対応する命令種類T
rに「$」を付したものに置き換えられ、オペランドO
p内の「n1」が「$lbl」、「n14」が「$i32」、「n7」が「$lbl」となり、「$i32=(i32)phi 2,$lbl,$i32,$lbl」という内部表現となる。
【0033】
このように中間言語解析手段3は、命令名の正規化を行うことによって、最長共通部分列を求めるようになされている。なお、このとき、全ての命令種類T
p(T
q)が固有な名称を持っていないため、命令名の正規化を行った正規化命令列12aと、ECO後正規化命令列12bとで命令p,qの文字列表現が一致していても、必ずしも最終的な一致命令とはならないことになる。
【0034】
次に、中間言語解析手段3は、この命令名の正規化を行った正規化命令列12aおよびECO後正規化命令列12b間で文字列表現が一致した命令p,qの各組に対して順番に共通した名前N
p(N
q)の再割り当てを行う。この際、中間言語解析手段3は、不一致命令に関してはそれぞれ別の名前N
p(N
q)を割り当てる。このようにして中間言語解析手段3は、名前N
p(N
q)の再割り当てを行うことで、
図5Aおよび
図5Bに示すように、全ての命令p,qが固有な名前N
p(N
q)を持った内部表現でなる再割当命令列13aおよびECO後再割当命令列13bを新たに生成し得るようになされている。この段階で、再割当命令列13aおよびECO後再割当命令列13bでの命令p,q間の一致関係は正しいものとなっている。
【0035】
実際上、中間言語解析手段3は、命令p,qに対する再割当処理を実行する際、例えばUNIX(登録商標)で広く使われているdiffコマンド(diffコマンドは、2つの文書ファイルの差分を表示するコマンド)を用い、
図4Aおよび
図4Bに示す命令名の正規化を行った正規化命令列12aとECO後正規化命令列12bとを対比して、文字列表現が一致する一致命令と、文字列表現が不一致の不一致命令とを識別し得るようになされている。
【0036】
なお、この際、中間言語解析手段3は、命令名の正規化を行う前の中間命令列11aおよびECO後中間命令列11bを記憶しており、オペランドO
p,O
q内の名前N
r(N
s)も含めて文字列表現の一致・不一致を識別し得る。
【0037】
ここで、名前の再割り当ての手法としてその一例を説明すると、中間言語解析手段3は、命令名の正規化を行った正規化命令列12aと、ECO後正規化命令列12bとを対比し、
図5Aおよび
図5Bに示すように、文字列表記が一致している例えば1〜3行目までの命令p,qに対し一致命令として共通の名前N
p(N
q)(この場合、「n1」、「n2」、「n3」)を新たに割り当てる。
【0038】
一方、正規化命令列12aとECO後正規化命令列12bの4行目の命令p,qは、文字列表記が不一致となるため、例えば正規化命令列12a側の4行目の命令pに「n4」の名前N
pを割り当てる。また、この正規化命令列12a側における次の5行目の命令pは、オペランドO
pの引数が、ECO後正規化命令列12bの5行目の命令qにおけるオペランドO
qの引数と異なるため、diffコマンドを用いた際、文字列表記が不一致となり、続けて「n5」の名前N
pを割り当てる。
【0039】
中間言語解析手段3は、正規化命令列12aとECO後正規化命令列12bの文字列表現が一致する7行目の命令p(「$lbl=(lbl)label)までいくと、ECO後正規化命令列12bの不一致となった4行目〜6行目の命令qに、「n7」、「n8」、「n9」の異なる名前N
qを割り当て、文字列表現が一致する7行目の命令p,q(「$lbl=(lbl)label)に、「n10」の名前N
p,N
qを割り当てる。
【0040】
なお、中間言語解析手段3は、正規化が行われたオペランドO
p(O
q)内の命令種類T
r(T
s)を、新たに再割り当てされた対応する名前N
r(N
s)に置き換え得るようになされている。
【0041】
例えば、
図4Aに示す正規化命令列12aの命令4(4行目の「$i32=(i32)phi 2,$lbl,$i32,$lbl」)を用いて説明すると、正規化前の中間命令列11aではオペランドO
p内にある引数の名前N
rが「n1,n14,n7」であったことから(
図2A)、これらに対応して新たに再割り当てされた名前N
r「n1,n19,n9」に、命令種類T
r「$lbl,$i32,$lbl」を置き換える。その結果、再割当命令列13aの命令4は「n4=(i32)phi 2,n1,n19,n9」となる(
図5A)。
【0042】
このようにして、中間言語解析手段3は、名前N
p,N
q(オペランドO
p,O
q内の名前N
r,N
sも含む)の再割当処理を実行し、
図5Aおよび
図5Bに示すように、文字列表現が一致する命令p,qに対して同じ名前N
r,N
sを割り当てた再割当命令列13aおよびECO後再割当命令列13bを生成し得るようになされている。
【0043】
なお、ここでは、正規化命令列12aとECO後正規化命令列12bの文字列表現が一致する命令p,qに対して同じ名前N
r,N
sを割り当てることが重要であり、文字列表現が一致しない命令p,qにどのような名前N
r,N
sを割り当ててもよい。
【0044】
ところで、
図2Aおよび
図2Bに示す中間命令列11aおよびECO後中間命令列11bでは、いくつかの一致命令内のオペランドO
p(O
q)に不一致の名前N
r(N
s)が含まれているため、そのまま使用すると、以降の処理で仮に当該名前N
p(N
q)が変更されてしまうと、不一致命令となってしまう可能性がある。
【0045】
これに対して、上述した再割当命令列13aおよびECO後再割当命令列13bには、不一致命令に対して異なる名前N
p(N
q)を割り当てているため、一致命令内にはオペランドO
p(O
q)内に不一致の名前N
r(N
s)が含まれておらず、以降の処理で一致命令が後から不一致命令となることはない。
【0046】
このようにして中間言語解析手段3によって求めた一致命令は絶対的なものとなり、この段階で確定され、以降の最小差分解析手段4による最小差分解析処理で用いられることがない。これにより、大規模な設計記述で小規模な設計変更が行われた際には、中間言語解析手段3による処理によって大部分の一致命令列を求めることが可能となり、これら一致命令を排除して不一致命令のみを用いて最小差分解析手段4に対し最小差分解析処理を行わせることで、当該最小差分解析手段4の処理負担を格段的に軽減し得るようになされている。
【0047】
中間言語解析手段3は、これら生成された再割当命令列13aおよびECO後再割当命令列13bにおいて不一致命令および一致命令を特定した後、これら再割当命令列13aおよびECO後再割当命令列13bを最小差分解析手段4に送出し得るようになされている。最小差分解析手段4は、ステップ3として、0-1線形計画法に基づく厳密手法を用いて、再割当命令列13aおよびECO後再割当命令列13b間の不一致命令に対してのみ、さらに差分を絞り込む最小差分解析処理を実行し得るようになされている。すなわち、最小差分解析手段4は、中間言語解析手段3によって得られた、差分がない可能性もある命令も含んだ不一致命令の中から、厳密に差分のある最小の不一致命令を最終的に特定し得るようになされている。
【0048】
ここで、最小差分解析手段4は、中間言語解析手段3によって不一致命令として識別した命令p,qに対してのみ再び命令名の正規化を行うようになされている。
図5Aおよび
図5Bでは、図中下線を引いた列が、文字列表現が不一致の不一致命令であり、例えば、再割当命令列13aの4行目、5行目の命令pや、ECO後再割当命令列13bの4行目、5行目の命令qなどが不一致命令であり、この不一致命令に対してのみ命令名の正規化が行われ、その結果、
図6Aおよび
図6Bに示すような正規化命令列14aおよびECO後正規化命令列14bが生成され得る。
【0049】
最小差分解析手段4は、不一致命令に対してのみ命令名の正規化を行った正規化命令列14aおよびECO後正規化命令列14bから、正規化命令列14aおよびECO後正規化命令列14b間の文字列表現が一致する組み合わせを全て求めるようになされている。最小差分解析手段4は、これら組み合わせの命令組(後述する)に対して、一致命令の数を最大化する目的関数と制約条件とを用いて0-1線形計画法問題に帰着して最小差分を解析し得る。因みに、0-1線形計画法は変数と制約条件と目的関数が与えられ、制約条件を満足し、かつ目的関数が最大となる変数を求める。
【0050】
この実施の形態の場合、最小差分解析手段4での0-1線形計画問題は以下のように定式化される。0-1線形計画法に用いる変数は、全て0か1かの2値変数であり、N
p,
qとI
p,
qとがある。N
p,
qは、命令pの名前N
pと、命令qの名前N
qとの一致を表現しており、この場合、名前N
pと名前N
qとが同じとき(文字列表現が全て一致するとき)のみ1とする。
【0051】
また、I
p,
qは、命令pの文字列表現と、命令qの文字列表現との一致を表現しており、この場合、命令pと命令qとが同じとき(文字列表現が全て一致するとき)のみ1とする。ここで、命令pと命令qとが同じとは、名前N
p,N
qが同じであり、かつ命令種類T
p,T
qが同じであり、さらにオペランドO
p,O
qが同じ(すなわちオペランドO
p,O
q内にある引数の名前N
r,N
sが全て一致する)であるという3つの条件を全て満たすことをいい、このときI
p,
qは1となる。
【0052】
また、0-1線形計画法に用いる目的関数は、一致命令の数を最大化するI
p,
qを求め、最小差分解を算出する。具体的には、下記数1のような目的関数を用いる。
【0054】
なお、Sは一致する可能性のある命令組の集合であり、命令p,qが同じ命令種類の場合に(p,q)∈Sとなる。すなわち、
図6を用いて説明すると、正規化命令列14aの命令9(図中9行目)の「$132=(i32)load $i32」が、ECO後正規化命令列14bの命令9´(図中9行目)、命令11´(図中11行目)、命令13´(図中13行目)にある「$132=(i32)load $i32」と命令種類が同じであることから、命令が一致する可能性がある。この場合、一致する可能性がある命令組の集合Sは(9,9´)、(9,11´)、(9,13´)となる。このようにして、正規化命令列14aにおいて正規化された他の命令pについても、ECO後正規化命令列14bにおいて正規化された各命令qと比較してゆき、同様に集合Sを求めてゆき、この集合Sから目的関数(例えばI
9,9´+I
9,11´+I
9,13´+…)を求める。
【0055】
これに加えて、最小差分解析手段4は、この目的関数に対して、下記の2つの制約条件を設定する(但し、実際には、2つ目の制約条件が2つの制約を持っているため、合計だと3つの制約条件となる)。先ず1つ目の制約条件1として命令一致の制約を設定する。命令一致の制約は、命令p,qの名前N
p,N
qが一致し、かつオペランドO
p,O
q内の全ての引数の組(名前N
r,
sの組)が一致している場合にのみ1となる。ここで、名前N
p,N
qが一致しているときは、I
p,q≦N
p,
q、∀(p,q)∈Sの条件を満たし、また、オペランドO
p,O
q内の全ての引数の組が一致しているときは、I
p,q≦N
r,
s、∀(r,s)∈O
p,q、∀(p,q)∈Sの条件を満たす。なお、O
p,qはオペランドの組の集合である。r,sが、p,qの対応するオペランドの組である場合にのみ(r,s)∈O
p,qとなる。このような命令一致の制約条件を集合Sの全ての組み合わせに対して求める。
【0056】
また、2つ目の制約条件2として複数一致間の矛盾について設定する。この複数一致間の矛盾は、2つの名前一致(p,q)と、オペランド内の引数の名前一致(r,s)が矛盾するとき、それらの変数は同時に1になることはできない。すなわち、N
p,
q+N
r,s≦1、∀(p,q),(r,s)∈Tの条件を満たす(Tは、矛盾する2つの命令ペアの組の集合を示す(すなわち、2つの命令ペア(p,q),(r,s)が互いに矛盾するとき、((p,q),(r,s))がTの要素となる))。
【0057】
さらに、この制約条件2における複数一致間の矛盾は、一致の唯一性保証の制約と、順序(依存性)違反の制約の2つの制約に分類される。先ず1つ目の一致の唯一性保証の制約とは、各命令列が高々1つの命令列としか一致できないため、
図7に示す2つの矢印のように、正規化命令列14aの命令11(11行目)が、ECO後正規化命令列14bの命令9´(9行目)および命令11´(11行目)の2つに一致するときは矛盾するというものである。
【0058】
この場合、正規化命令列14aの命令11と、ECO後正規化命令列14bの命令9´との名前N
11,
9´が一致するとき、正規化命令列14aの命令11と、ECO後正規化命令列14bの命令11´の名前N
11,
11´は一致しない。すなわち、N
11,
9´+N
11,11´≦1の条件を満たす必要がある。そして、このような一致の唯一性保証の制約は、N
p,
q+N
p,q´´≦1(q´´は、ECO後正規化命令列14bの命令の行番号のうちq以外の命令の行番号)、∀(p,q)∈S、∀(p,q´´)∈Sと表すことができ、全ての組み合わせに対してこのような一致の唯一性保証の制約を求める。
【0059】
また、2つ目の順序違反の制約とは、一致した命令列は元の命令順に従わなければならないため、
図8に示す2つの矢印のように、順番が入れ替わる一致は矛盾するというものである。この場合、正規化命令列14aの命令10と、ECO後正規化命令列14bの命令10´との名前N
10,
10´が一致するとき、正規化命令列14aの命令11と、ECO後正規化命令列14bの命令9´の名前N
11,
9´は一致しない。すなわち、N
10,
10´+N
11,9´≦1の条件を満たす必要がある。そして、このような順序違反の制約は、N
p,
q+N
v,w≦1(vは、正規化命令列14aの命令の行番号のうちpよりも後の命令(行番号)を示しv≧p+1、Wは、ECO後正規化命令列14bの命令の行番号のうちqよりも前の命令(行番号)を示しw≦q−1)、∀(p,q)∈S、∀(v,w)∈Sと表すことができ、全ての組み合わせに対してこのような順序違反の制約を求める。
【0060】
なお、この順序違反の制約は、上述したような名前一致に替えて、命令一致に対して上記制約を適用する定式化も可能であり、この場合、より解空間が広がるものとなる。上記の例で命令一致を用いた順序違反の制約を表すと、I
10,
10´+I
11,9´≦1の条件を満たす必要がある。また、このような順序違反の制約でも、I
p,
q+I
v,w≦1と表すことができ、全ての組み合わせに対してこのような順序違反の制約を求める。
【0061】
最小差分解析手段4は、例えばGurobi Optimizerなどのソルバーを格納しており、目標関数と制約条件とから定式化された線形計画問題Dを、当該ソルバーを用いて解くことにより上記数1の目的関数の値が最大となる解を算出し得るようになされている。この実施の形態の場合、ソルバーにより得られる解は、上記数1の目的関数の値が最大になるI
p,
q、N
p,
qおよびN
r,
sの関係を0および1の値で表し、これら対応関係から最小差分解として、
図9Aおよび
図9Bに示すような中間命令列15aおよびECO後中間命令列15bを生成し得るようになされている。
【0062】
なお、このようにして求めた最小差分を示すECO後中間命令列15bは、
図1に示したように、データフローグラフ生成手段(図示せず)によってノードN間が繋がれたコントロールデータフローグラフCFに変換され、以後の処理に用いられ得る。
(2)例題を用いた最小差分解析処理の説明
【0063】
次に、より具体的な例題を用いて上述した最小差分解析処理手順について以下説明する。この場合、命令1,2,3,4,5,6,7の7命令からなるプログラム1と、命令1´,2´,3´,4´,5´,6´,7´の7命令からなるプログラム2を用意し、プログラム1の各命令pの名前は、n1,n2,n3,n4,n5,n6,n7とし、プログラム2の各命令qの名前はn1´,n2´,n3´,n4´,n5´,n6´,n7´とした。ここで、
図10Aには、文字列表現が同じでオペランドに引数を含まない命令1〜4を省略し、命令5〜7のみを表記したプログラム1を示し、
図10Bには、文字列表現が同じでオペランドに引数を含まない命令1´〜4´を省略し、命令5´〜7´のみを表記したプログラム2を示す。
【0064】
このようなプログラム1およびプログラム2は、先ず命令名の正規化が行われ、
図10Cおよび
図10Dに示すように、各命令p,qの名前を、命令種類「i32」に置き換えて全て「$i32」とする。次に、プログラム1およびプログラム2で文字列表現が一致する行の組み合わせの集合Sを求める。この場合、(p,q)∈Sは、(6,5´)、(6,6´)、(6,7´)、(7,5´)、(7,6´)、(7,7´)となる。この集合Sから目的関数を求めると、I
6,
5´+I
6,
6´+I
6,
7´+I
7,
5´+I
7,
6´+I
7,
7´となる。
【0065】
次に制約条件について説明する。先ず命令一致の制約条件について説明する。
図10Eおよび
図10Fに示すように、例えば、命令6と命令5´とが一致するときの制約条件として、命令6と命令5´の名前が一致するという制約(すなわち、I
6,
5´≦N
6,
5´)、第1引数である命令5と命令1´の名前が一致するという制約(すなわち、I
6,
5´≦N
6,
5´)、第2引数である命令3と命令2´の名前が一致するという制約(すなわち、I
6,
5´≦N
6,
5´)が適用される。つまり、命令6および命令5´同士の名前が一致(N
6,
5´=1)し、引数同士の名前が一致(N
5,
1´=1、N
3,
2´=1)するときのみ、命令6および命令5´同士が一致する(I
6,
5´=1)。このような命令一致の制約条件を集合Sの全ての組み合わせに対して求める。
【0066】
次に一致の唯一性保証の制約条件について説明する。この一致の唯一性保証の制約は、例えば命令6の名前は命令5´,6´,7´の高々1つとしか一致できないという制約である。この場合、プログラム1およびプログラム2内の命令は異なる名前を持つため、
図11Aおよび
図11Bに示すように、命令6と命令5´の名前が一致するときには、命令6と命令6´の名前は一致できないという制約(すなわち、N
6,
5´+N
6,
6´≦1)と、命令6と命令7´の名前は一致できないという制約(すなわち、N
6,
5´+N
6,
7´≦1)が適用される。そして、このような一致の唯一性保証の制約条件を集合Sの全ての組み合わせに対して求める。
【0067】
次に順序違反の制約条件について説明する。この順序違反の制約として、
図11Cおよび
図11Dに示すように、例えば命令6と命令6´の名前が一致しているとき、命令7と命令5´の名前は一致できないという制約(すなわち、N
6,
6´+N
7,
5´≦1)が適用される。そして、このような順序違反の制約条件を集合Sの全ての組み合わせに対して求める。なお、この順序違反の制約条件として、名前一致に替えて、命令一致に対して制約を適用する場合には、I
6,
6´+I
7,
5´≦1という制約条件となり得る。
【0068】
そして、これら目的関数と制約条件とを定式化した0-1線形計画問題についてソルバーで解を求めると、I
6,
5´=1、I
7,
7´=1、N
6,
5´=1、N
7,
7´=1、N
5,
5´=1、N
4,
6´=1となる(他の変数は0)。プログラム1の命令pは元と同じとし、プログラム2の命令qを、命令1´:n5、命令2´:n3、命令3´:n1、命令4´:n2、命令5´:n6、命令6´:n4、命令7´:n7(なお、命令3´、命令4´はここでは省略したため任意とした)と変更すると、
図11Eおよび
図11Fに示すように、命令6と命令5´、命令7と命令7´とが一致することが分かる。このようにして一致命令を増やし、不一致命令が少ない最小差分解を求めることができる。
(3)作用および効果
【0069】
以上の構成において、最小差分解析手段4では、中間言語解析手段3から一致命令および不一致命令が特定された再割当命令列13a(第1命令列)とECO後再割当命令列13b(第2命令列)とを受け取ると、その中で不一致命令とした各命令p,qの名前N
p,N
qを、当該命令p,q内の命令種類T
p,T
qに置き換えて正規化する。また、最小差分解析手段4では、正規化した正規化命令列14aとECO後正規化命令列14bとの間で文字列表現が同じで、一致する可能性のある全ての命令の組み合わせ候補を抽出する。
【0070】
さらに、最小差分解析手段4では、名前N
p,N
q同士が一致し、かつ命令p,q内のオペランドO
p,O
q同士が一致するとき、命令p,q同士が一致するという制約(命令一致の制約)と、正規化命令列14a内の1つの命令pは、ECO後正規化命令列14bの1つの命令qとしか一致できないという制約(一致の唯一性保証の制約)と、正規化命令列14aの命令pの順序に、ECO後正規化命令列14bの命令qも従うという制約(順序違反の制約)の下、命令p,qの組み合わせ候補について内部表現が一致する命令組数が最大になるように各命令p,q間の対応関係を目的関数から特定する。
【0071】
本発明では、このような手法を適用することにより特定された対応関係を、正規化命令列14aおよびECO後正規化命令列14bに適用することで、中間命令列15aおよびECO後中間命令列15b間の最小差分を解析し得る設計記述間差分解析装置1、設計記述間差分解析プログラムおよび設計記述間差分解析方法を実現できる。
【0072】
また、この設計記述間差分解析装置1では、一般的に設計記述の変更が局所的かつ小規模であることに着目し、先ず中間言語解析手段3によって単純な方法で大部分の一致命令を求めておき、残りの不一致命令だけを用いて最小差分解析手段4にて厳密手法による最小差分解を求めるようにしたことで、最小差分解析手段4の処理負担を軽減し得る。
【0073】
このように、設計記述間差分解析装置1では、最小差分解析手段4の処理負担を軽減し得ることで、最小差分解析手段4にて0-1線形計画問題を確実にソルバーで解くことができ、かくして最小差分解を求めることができる。
(4)他の実施の形態による等価性ルールを利用した設計記述間差分解析装置
【0074】
図12は、他の実施の形態である等価性ルールを利用した設計記述間差分解析装置41を示し、上述した実施の形態とは等価性判定手段43が設けられている点で相違している。等価性判定手段43は、最小差分解析手段4から出力された現時点で最小差分解である中間命令列15aおよびECO後中間命令列15bを受け取り、所定のルールによる部分等価性判定処理を行うことで、中間命令列15aおよびECO後中間命令列15b間で等価とみなすことができる新たな命令組を特定し得るようになされている。
【0075】
この実施の形態の場合、等価性判定手段43は、例えば所定の等価性ルールを予め記憶しており、この等価性ルールを用いて中間命令列15aおよびECO後中間命令列15b間で等価とみなすことができる命令組を特定し得るようになされている。等価性ルールは、例えば「add X,Y」および「add Y,X」のように、文字列表現が異なるものの、オペラント内の引数が単に配置変換されたもので、両者ともに「X」と「Y」を加算することを示し、実質上同じ命令内容であるものを等価とみなすものである。
【0076】
実際上、等価性判定手段43は、例えば「add X,Y」および「add Y,X」が等価であるという等価性ルールを、中間命令列15aおよびECO後中間命令列15b間の不一致命令に照らし合わせてゆき、この等価性ルールに該当する不一致命令組を検出する。等価性判定手段43は、等価性ルールに該当する命令組を強制的に一致命令とした新たな中間命令列およびECO後中間命令列を中間言語解析手段3に送出する。
【0077】
中間言語解析手段3は、文字比較に基づく差分計算処理を再び実行し、等価性ルールを基に不一致命令組であったものを一致命令としつつ、これら中間命令列11aおよびECO後中間命令列11b間の各命令p,qの一致・不一致を特定し、これを最小差分解析手段4に送出する。最小差分解析手段4は、再び最小差分解析処理を行い、等価とみなすことができる命令組を一致命令とした最小差分でなる中間命令列およびECO後中間命令列を生成し得るようになされている。
【0078】
なお、上述した実施の形態においては、等価性ルールとして、1つの命令pと、1つの命令qとの間で等価性を判断する等価性ルールについて述べたが、本発明はこれに限らず、複数の命令p,q間で等価性を判断する等価性ルールを適用してもよい。具体的には、
図13Cに示すようなプログラム1と、
図13Dに示すようなプログラム2とでは、文字列表現が全くことなるものの、プログラム1の命令10〜12から得られる算出結果と、プログラム2の命令11´から得られる算出結果とは同じ結果となり、実質的に等価とみなすことができる(プログラム1では命令10にて一旦「n3」を加えているが、命令12にて「n3」を引いており、結局、プログラム2と等価となる)。
【0079】
そこで、等価性判定手段43は、このような複数命令間で等価となり得る等価性ルールを予め記憶しておき、中間命令列15aおよびECO後中間命令列15b間の不一致命令のうち、この等価性ルールに該当する複数命令組を検出し、これら複数命令組を強制的に一致命令とした新たな中間命令列およびECO後中間命令列を中間言語解析手段3に送出する。そして、上述と同様にして以後の処理を繰り返すことで、等価とみなすことができる命令組を一致命令とした最小差分でなる中間命令列およびECO後中間命令列を生成し得る。
【0080】
また、他の実施の形態としては、等価性ルールの集合を単に記憶しておくだけではなく、等価性ルールを順次適用しながら、計算の意味を推測して命令組の等価性を判断する、等価性検証ツールと連携するようにしてもよい。この等価性検証ツールは特開2007-233648号公報の「回路記述言語の等価性検証方法」の技術を利用するものであり、この場合、中間言語解析手段3や最小差分解析手段4とは別に等価性判定ツールを起動させながら、必要に応じて、部分プログラムの等価性判定を並行して行いながら全体の処理を実行することもできる。
【0081】
このような設計記述間差分解析装置41では、中間命令列およびECO後中間命令列が得られた際、等価な命令組と非等価な命令組とを形式的に(数学的な証明を伴って)分離でき、さらに一段と最小差分解を得ることができる。
【0082】
因みに、
図13Aに示すプログラム1と、
図13Bに示すプログラム2とを用いて、等価性ルールについて説明する。この場合、命令6と命令5´が等価であるとみなし、両者が一致命令であるとすると、命令6と命令5´の名前が一致し(すなわち、I
6,
5´≦N
6,
5´)、第1引数である命令5と命令2´の名前が一致し(すなわち、I
6,
5´≦N
5,
2´)、第2引数である命令3と命令1´の名前が一致する(すなわち、I
6,
5´≦N
3,
1´)というように表せる。
(5)その他の実施の形態
【0083】
なお、上述した実施の形態においては、2段階で異なる差分解析処理を実行し得るようにした場合について述べたが、本発明はこれに限らず、種々の差分解析処理を複数段階得た後、最小差分解析手段4による最小差分解析処理を実行するようにしてもよい。