JP3901180B2 - プログラム並列化装置及びその方法並びにプログラム - Google Patents

プログラム並列化装置及びその方法並びにプログラム Download PDF

Info

Publication number
JP3901180B2
JP3901180B2 JP2004194051A JP2004194051A JP3901180B2 JP 3901180 B2 JP3901180 B2 JP 3901180B2 JP 2004194051 A JP2004194051 A JP 2004194051A JP 2004194051 A JP2004194051 A JP 2004194051A JP 3901180 B2 JP3901180 B2 JP 3901180B2
Authority
JP
Japan
Prior art keywords
fork
program
combination
unit
sequential processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004194051A
Other languages
English (en)
Other versions
JP2006018445A (ja
Inventor
章二 河原
拓 大澤
智 松下
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2004194051A priority Critical patent/JP3901180B2/ja
Priority to US11/169,113 priority patent/US20060005179A1/en
Priority to GB0513301A priority patent/GB2415811A/en
Publication of JP2006018445A publication Critical patent/JP2006018445A/ja
Application granted granted Critical
Publication of JP3901180B2 publication Critical patent/JP3901180B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、逐次処理プログラムからマルチスレッド型並列プロセッサ向けの並列化プログラムを生成するプログラム並列化装置及びその方法に関する。
単一の逐次処理プログラムを並列プロセッサシステムで並列に処理する手法として、プログラムをスレッドと呼ぶ命令流に分割して複数のプロセッサで並列に実行するマルチスレッド実行方法がある(例えば、特許文献1〜4、非特許文献1参照)。マルチスレッド実行を行う並列プロセッサを、マルチスレッド型並列プロセッサと呼ぶ。以下、これらの従来のマルチスレッド実行方法及びマルチスレッド型並列プロセッサについて説明する。
一般にマルチスレッド実行方法及びマルチスレッド型並列プロセッサにおいて、他のプロセッサ上に新たなスレッドを生成することを、スレッドをフォーク(fork)すると言い、フォーク動作を行った側のスレッドを親スレッド、生成された新しいスレッドを子スレッド、スレッドをフォークするプログラム位置をフォーク元アドレスまたはフォーク元ポイント、子スレッドの先頭のプログラム位置をフォーク先アドレスまたはフォーク先ポイントまたは子スレッドの開始点と呼ぶ。特許文献1〜4および非特許文献1では、スレッドのフォークを指示するためにフォーク元ポイントにフォーク命令が挿入される。フォーク命令にはフォーク先アドレスが指定され、フォーク命令の実行によりそのフォーク先アドレスから始まる子スレッドが他プロセッサ上に生成され、子スレッドの実行が開始される。また、スレッドの処理を終了させるプログラム位置をターム(term)点と呼び、各プロセッサはスレッドの処理を終了する。
図21に、マルチスレッド型並列プロセッサにおけるマルチスレッド実行方法の処理の概要を示す。同図(a)は3つのスレッドA、B、Cに分割された単一の逐次処理プログラムを示す。このプログラムを単一のプロセッサで処理する場合、同図(b)に示すように1つのプロセッサPEがスレッドA、B、Cを順番に処理していく。これに対して、特許文献1〜4および非特許文献1のマルチスレッド型並列プロセッサにおけるマルチスレッド実行方法では、同図(c)に示すように、1つのプロセッサPE1にスレッドAを実行させ、プロセッサPE1でスレッドAを実行している最中に、スレッドAに埋め込まれたフォーク命令によってスレッドBを他のプロセッサPE2に生成し、プロセッサPE2においてスレッドBを実行させる。また、プロセッサPE2は、スレッドBに埋め込まれたフォーク命令によってスレッドCをプロセッサPE3に生成する。プロセッサPE1、PE2は、それぞれスレッドB、Cの開始点の直前のターム点においてスレッドの処理を終了し、プロセッサPE3は、スレッドCの最後の命令を実行すると、その次の命令(一般にはシステムコール命令)を実行する。このように、複数のプロセッサでスレッドを同時に並行して実行することにより、逐次処理に比べて性能の向上が図られる。
他のマルチスレッド実行方法として、図21(d)に示すように、スレッドAを実行しているプロセッサPE1からフォークを複数回行うことにより、プロセッサPE2にスレッドBを、またプロセッサPE3にスレッドCをそれぞれ生成するマルチスレッド実行方法も存在する。この図21(d)のモデルに対して、同図(c)に示したように、スレッドはその生存中に高々1回に限って有効な子スレッドを生成することができるという制約を課したマルチスレッド実行方法をフォーク1回モデルと呼ぶ。フォーク1回モデルでは、スレッド管理の大幅な簡略化が可能となり、現実的なハードウェア規模でスレッド管理部のハードウェア化が実現できる。また、個々のプロセッサは子スレッドを生成する他プロセッサが1プロセッサに限定されるため、隣接するプロセッサを単方向にリング状に接続した並列プロセッサシステムでマルチスレッド実行が可能となる。
ここで、フォーク命令時、子スレッドを生成できる空きのプロセッサが存在しない場合の対処方法としては、親スレッドを実行しているプロセッサにおいて、子スレッドを生成できる空きのプロセッサが生じるまで、フォーク命令の実行をウエイトする典型的な方法以外に、特許文献4に示されるように、フォーク命令を無効化してフォーク命令以降の後続命令を引き続き実行した後、子スレッドの命令群を自ら実行する方法がある。
親スレッドが子スレッドを生成し、子スレッドに所定の処理を行わせるには、親スレッドのフォーク点におけるレジスタファイル中のレジスタのうち少なくとも子スレッドで必要なレジスタの値を親スレッドから子スレッドに引き渡す必要がある。このスレッド間のデータ引き渡しコストを削減するために、特許文献2及び非特許文献1では、スレッド生成時のレジスタ値継承機構をハードウェア的に備えている。これは、スレッド生成時に親スレッドのレジスタファイルの内容を子スレッドに全てコピーするものである。子スレッド生成後は、親スレッドと子スレッドのレジスタ値の変更は独立となり、レジスタを用いたスレッド間のデータの引き渡しは行われない。スレッド間のデータ引き渡しに関する他の従来技術としては、レジスタの値を命令によりレジスタ単位で個別に転送する機構を備えた並列プロセッサシステムも提案されている。
マルチスレッド実行方法では、実行の確定した先行スレッドを並列に実行することを基本とするが、実際のプログラムでは実行の確定するスレッドが充分に得られない場合も多い。また、動的に決定される依存やコンパイラ解析能力の限界等により並列化率が低く抑えられ、所望の性能が得られない可能性が生じる。このため、特許文献1では、制御投機を導入し、ハードウェア的にスレッドの投機実行をサポートしている。制御投機では、実行する可能性の高いスレッドを実行確定前に投機的に実行する。投機状態のスレッドは、実行の取り消しがハードウェア上可能である範囲内で仮実行を行う。子スレッドが仮実行を行っている状態を仮実行状態と言い、子スレッドが仮実行状態にあるとき親スレッドはスレッド仮生成状態にあると言う。仮実行状態の子スレッドでは共有メモリ及びキャッシュメモリへの書き込みは抑制され、別途設けた仮実行用バッファ(temporary buffer)に対して書き込みが行われる。投機が正しいことが確定すると、親スレッドから子スレッドに対して投機成功通知が出され、子スレッドは仮実行用バッファの内容を共有メモリ及びキャッシュメモリに反映し、仮実行用バッファを用いない通常の状態となる。また親スレッドは、スレッド仮生成状態からスレッド生成状態となる。他方、投機が失敗したことが確定すると、親スレッドでスレッド破棄命令(abort)が実行され、子スレッド以下の実行がキャンセルされる。また、親スレッドは、スレッド仮生成状態からスレッド未生成状態となり、再び子スレッドの生成が可能になる。つまり、フォーク1回モデルでは、スレッド生成は高々1回に限定されるが、制御投機を行い、投機が失敗した場合には再びフォークが可能となる。この場合においても、有効な子スレッドは高々1つである。
スレッドはその生存中に高々1回に限って有効な子スレッドを生成するというフォーク1回モデルのマルチスレッド実行を実現するために、例えば非特許文献1等では、逐次処理プログラムから並列化プログラムを生成するコンパイルの段階で、全てのスレッドが有効なフォークを1回しか実行しない命令コードになるように制限している。即ち、フォーク1回制限を並列化プログラム上において静的に保証している。一方、特許文献3では、親スレッド中に存在する複数のフォーク命令のうちから有効な子スレッドを生成する1つのフォーク命令を親スレッドの実行中に選択することにより、フォーク1回制限をプログラム実行時に保証している。
次に、マルチスレッド実行を行う並列プロセッサ向けの並列プログラムを生成する従来技術について説明する。
図22を参照すると、従来のプログラム並列化装置10は、逐次処理プログラム13を入力し、制御・データフロー解析部11によって逐次処理プログラム13の制御フローおよびデータフローを解析し、次いでその結果に基づき、フォーク挿入部12において、基本ブロックあるいは複数の基本ブロックを並列化の単位、つまり各条件分岐命令の箇所をフォーク箇所の候補とし、制御フローおよびデータフローの解析結果を参照して、より並列実行性能が得られるフォーク箇所にフォーク命令を挿入して、複数のスレッドに分割された並列化プログラム14を生成し出力する。
図22では、逐次コンパイラが生成した逐次処理プログラム13から並列化プログラム14を生成するプログラム並列化装置10を示したが、特許文献5に示されるように高級言語で記述されたプログラムからマルチスレッド型並列プロセッサ向けの目的プログラムを生成することも行われている。また、プログラム実行時にしか判明しないプログラム実行フローやメモリ依存関係などの影響により、静的な解析に基づいたフォーク命令の挿入方法では所望の並列実行性能を得られない場合がある。このため、特許文献5に見られるように、逐次実行を行ったときの条件分岐確率やデータ依存発生頻度などのプロファイル情報を参照して、フォーク箇所を選択することも行われている。ただし、この場合であっても、フォーク箇所の候補は条件分岐命令の箇所としている。
特開10−27108号公報 特開10−78880号公報 特開2003−029985号公報 特開2003−029984号公報 特開2001−282549号公報 「On Chip Multiprocessor指向 制御並列アーキテクチャMUSCATの提案」(並列処理シンポジュウムJSPP97論文集、情報処理学会、pp.229−236、May 1997)
従来の第1の問題点は、よりよい並列実行性能のフォーク箇所を得られない場合があることである。その理由は、入力となる逐次処理プログラムそのものだけを対象としており、それと等価な他の逐次処理プログラムを全く考慮していないためである。
従来の第2の問題点は、よりよい並列実行性能のフォーク箇所を得ようとするにつれて、そのフォーク箇所の決定処理にますます時間がかかることである。その理由は、よりよい並列実行性能のフォーク箇所を得るために、候補となるフォーク箇所の数そのものを増やせば増やすほど、最適なフォーク箇所の組合せを決定する処理に多くの時間がかかるためである。
本発明はこのような事情に鑑みて提案されたものであり、第1の目的は、並列実行性能のよりよい並列化プログラムを生成することのできるプログラム並列化装置及びその方法を提供することにある。
本発明の第2の目的は、並列実行性能のよりよい並列化プログラムを高速に生成することのできるプログラム並列化装置及びその方法を提供することにある。
本発明の第1のプログラム並列化装置は、逐次処理プログラムを入力し、マルチスレッド型並列プロセッサ向けの並列化プログラムを出力するプログラム並列化装置において、前記入力した逐次処理プログラムを解析して、並列化の対象とする逐次処理プログラムおよびフォーク箇所の集合を決定するフォーク箇所決定部と、前記フォーク箇所決定部により決定されたフォーク箇所の集合に含まれるフォーク箇所の最適な組合せを決定するフォーク箇所組合せ決定部と、前記フォーク箇所組合せ決定部により決定されたフォーク箇所の最適な組合せに基づいて前記並列化の対象とする逐次処理プログラムからマルチスレッド型並列プロセッサ向けの並列化プログラムを生成する並列化プログラム出力部とを備え、前記フォーク箇所決定部は、前記入力した逐次処理プログラムの一部の命令列を他の命令列に変換した少なくとも1つの等価な逐次処理プログラムおよび前記入力した逐次処理プログラム毎にフォーク箇所の集合および並列実行性能の指標値を求め、並列実行性能の指標値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択するものであることを特徴とする。
本発明の第2のプログラム並列化装置は、第1のプログラム並列化装置において、前記フォーク箇所決定部は、前記入力した逐次処理プログラムを記憶する記憶部と、前記入力した逐次処理プログラムの一部の命令列を等価な他の命令列に変換するプログラム変換部と、該変換されて生成された逐次処理プログラムを記憶する記憶部と、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎にフォーク箇所の集合を求めるフォーク箇所抽出部と、該抽出されたフォーク箇所の集合を記憶する記憶部と、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎に前記求められたフォーク箇所の集合の並列実行性能の指標値を求める算出部と、前記算出された並列実行性能の指標値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択する選択部とを有することを特徴とする。
本発明の第3のプログラム並列化装置は、第1または第2のプログラム並列化装置において、フォーク箇所のフォーク元ポイントからフォーク先ポイントまでの全命令の重みの合計値を当該フォーク箇所の静的ブースト値と定義するとき、前記並列実行性能の指標値として、フォーク箇所の集合に含まれる各フォーク箇所の静的ブースト値の合計値を用いることを特徴とする。
本発明の第4のプログラム並列化装置は、第1または第2のプログラム並列化装置において、前記並列実行性能の指標値として、フォーク箇所の集合に含まれるフォーク箇所の総数を用いることを特徴とする。
本発明の第5のプログラム並列化装置は、第2のプログラム並列化装置において、前記プログラム変換部は、変数の生存区間が狭まるように逐次処理プログラムの命令の並べ替えを行うものであることを特徴とする。
本発明の第6のプログラム並列化装置は、第2のプログラム並列化装置において、前記プログラム変換部は、変数の割り当てられるレジスタができるだけ変わらないように逐次処理プログラムのレジスタ割当の変更を行うものであることを特徴とする。
本発明の第7のプログラム並列化装置は、第5のプログラム並列化装置において、前記並列化プログラム出力部は、前記フォーク箇所組合せ決定部により決定された最適な組合せ中のフォーク箇所のフォーク元ポイントおよびフォーク先ポイントをまたいだ命令の入れ替えは行わないという制限の下に、変数の生存区間が拡がるように命令の並べ替えを行う後処理部を含むことを特徴とする。
本発明の第8のプログラム並列化装置は、第1または第2のプログラム並列化装置において、前記フォーク箇所決定部は、フォーク箇所のフォーク元ポイントからフォーク先ポイントまでの全命令の重みの合計値を当該フォーク箇所の静的ブースト値と定義するとき、前記選択されたフォーク箇所の集合に含まれる各フォーク箇所毎に前記静的ブースト値を求め、該求めた静的ブースト値が予め定められた静的足切り条件を満たすフォーク箇所を取り除く静的足切り部を含むことを特徴とする。
本発明の第9のプログラム並列化装置は、第8のプログラム並列化装置において、前記静的足切り条件は上限閾値を含み、前記静的足切り部は静的ブースト値が上限閾値より大きなフォーク箇所を取り除くことを特徴とする。
本発明の第10のプログラム並列化装置は、第8のプログラム並列化装置において、前記静的足切り条件は下限閾値を含み、前記静的足切り部は静的ブースト値が下限閾値より小さなフォーク箇所を取り除くことを特徴とする。
本発明の第11のプログラム並列化装置は、第1または第2のプログラム並列化装置において、前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、そのうちの最小のものを当該フォーク箇所の最小実行サイクル数と定義するとき、前記フォーク箇所決定部により決定されたフォーク箇所の集合に含まれる各フォーク箇所毎に、前記最小実行サイクル数を求め、該求めた最小実行サイクル数が予め定められた動的足切り条件の上限閾値より大きいフォーク箇所を前記集合から取り除く動的足切り部を含むことを特徴とする。
本発明の第12のプログラム並列化装置は、第1または第2のプログラム並列化装置において、前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、その合計値を当該フォーク箇所の動的ブースト値と定義するとき、前記フォーク箇所決定部により決定されたフォーク箇所の集合に含まれる各フォーク箇所毎に、前記動的ブースト値を求め、該求めた動的ブースト値が予め定められた動的足切り条件の下限閾値より小さなフォーク箇所を前記集合から取り除く動的足切り部を含むことを特徴とする。
本発明の第13のプログラム並列化装置は、第1または第2のプログラム並列化装置において、前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、その合計値を当該フォーク箇所の動的ブースト値と定義し、或るフォーク箇所と同時に実行できない他のフォーク箇所の集合を当該フォーク箇所の排他フォーク集合と定義するとき、前記フォーク箇所決定部で決定された最適な逐次処理プログラムを或る入力データの下で実行したときの各フォーク箇所毎の動的ブースト値および排他フォーク集合を求める動的フォーク情報取得部と、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる組合せを生成する組合せ決定部とを含むことを特徴とする。
本発明の第14のプログラム並列化装置は、第13のプログラム並列化装置において、前記組合せ決定部は、フォーク箇所の集合に含まれる各フォーク箇所をノードとし、排他関係にあるフォーク箇所どうしをエッジで結んだグラフであって、各ノードにそのノードに対応するフォーク箇所の動的ブースト値を重みとして付与した重み付きグラフを生成する手段と、前記重み付きグラフの重み最大独立集合を求める手段と、求められた重み最大独立集合に含まれるノードに対応するフォーク箇所の集合を、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる組合せとして出力する手段とを含むことを特徴とする。
本発明の第15のプログラム並列化装置は、第14のプログラム並列化装置において、前記フォーク箇所組合せ決定部は、前記組合せ決定部が決定した組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する組合せ改善部を含むことを特徴とする。
本発明の第16のプログラム並列化装置は、第1または第2のプログラム並列化装置において、前記フォーク箇所組合せ決定部は、前記フォーク箇所決定部が決定した逐次処理プログラムを或る入力データの下で実行したときの逐次実行トレース情報を複数の区間に分割し、各分割区間毎に、前記フォーク箇所決定部が決定したフォーク箇所の集合に含まれるフォーク箇所のうち当該分割区間において出現するフォーク箇所の集合からフォーク箇所の最適な組合せを求め、該求めた各分割区間でのフォーク箇所の最適な組合せを統合するものであることを特徴とする。
本発明の第17のプログラム並列化装置は、第16のプログラム並列化装置において、前記フォーク箇所組合せ決定部は、前記各分割区間毎にその分割区間において出現するフォーク箇所の集合からフォーク箇所の初期組合せを決定する初期組合せ決定部と、該初期組合せ決定部により前記各分割区間毎に決定された初期組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する組合せ改善部と、該組合せ改善部により前記各分割区間毎に決定されたフォーク箇所の最適な組合せを統合する統合部とを含むことを特徴とする。
本発明の第18のプログラム並列化装置は、第16のプログラム並列化装置において、前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、その合計値を当該フォーク箇所の動的ブースト値と定義し、或るフォーク箇所と同時に実行できない他のフォーク箇所の集合を当該フォーク箇所の排他フォーク集合と定義するとき、前記各分割区間毎に各フォーク箇所毎の動的ブースト値および排他フォーク集合を求める動的フォーク情報取得部と、前記各分割区間毎にその分割区間において出現するフォーク箇所の集合から、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる初期組合せを決定する初期組合せ決定部と、該初期組合せ決定部により前記各分割区間毎に決定された初期組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する組合せ改善部と、該組合せ改善部により前記各分割区間毎に決定されたフォーク箇所の最適な組合せを統合する統合部とを含むことを特徴とする。
本発明の第19のプログラム並列化装置は、第16のプログラム並列化装置において、前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、そのうちの最小のものを当該フォーク箇所の最小実行サイクル数と定義し、その合計値を当該フォーク箇所の動的ブースト値と定義し、或るフォーク箇所と同時に実行できない他のフォーク箇所の集合を当該フォーク箇所の排他フォーク集合と定義するとき、前記各分割区間毎に各フォーク箇所毎の最小実行サイクル数、動的ブースト値および排他フォーク集合を求める動的フォーク情報取得部と、前記フォーク箇所決定部により決定されたフォーク箇所の集合から、前記各分割区間毎に前記最小実行サイクル数および前記動的ブースト値が予め定められた足切り条件を満たすフォーク箇所を取り除いた集合を決定する動的足切り部と、前記動的足切り部により前記各分割区間毎に求められたフォーク箇所の集合から、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる初期組合せを決定する初期組合せ決定部と、該初期組合せ決定部により前記各分割区間毎に決定された初期組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する組合せ改善部と、該組合せ改善部により前記各分割区間毎に決定されたフォーク箇所の最適な組合せを統合する統合部とを含むことを特徴とする。
本発明の第1のプログラム並列化方法は、a)フォーク箇所決定部が、逐次処理プログラムを入力して解析し、並列化の対象とする逐次処理プログラムおよびフォーク箇所の集合を決定するステップ、b)フォーク箇所組合せ決定部が、前記フォーク箇所決定部により決定されたフォーク箇所の集合に含まれるフォーク箇所の最適な組合せを決定するステップ、c)並列化プログラム出力部が、前記フォーク箇所組合せ決定部により決定されたフォーク箇所の最適な組合せに基づいて前記並列化の対象とする逐次処理プログラムからマルチスレッド型並列プロセッサ向けの並列化プログラムを生成するステップ、を含み、かつ、前記ステップaは、前記入力した逐次処理プログラムの一部の命令列を他の命令列に変換した少なくとも1つの等価な逐次処理プログラムおよび前記入力した逐次処理プログラム毎にフォーク箇所の集合および並列実行性能の指標値を求め、並列実行性能の指標値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択することを特徴とする。
本発明の第2のプログラム並列化方法は、第1のプログラム並列化方法において、前記ステップaは、a−1)前記入力した逐次処理プログラムを記憶部に記憶するステップ、a−2)プログラム変換部が、前記入力した逐次処理プログラムの一部の命令列を等価な他の命令列に変換するステップ、a−3)前記変換されて生成された逐次処理プログラムを記憶部に記憶するステップ、a−4)フォーク箇所抽出部が、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎にフォーク箇所の集合を求めるステップ、a−5)前記抽出されたフォーク箇所の集合を記憶部に記憶するステップ、a−6)算出部が、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎に前記求められたフォーク箇所の集合の並列実行性能の指標値を求めるステップ、a−7)選択部が、前記算出された並列実行性能の指標値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択するステップ、を含むことを特徴とする。
本発明の第3のプログラム並列化方法は、第1または第2のプログラム並列化方法において、フォーク箇所のフォーク元ポイントからフォーク先ポイントまでの全命令の重みの合計値を当該フォーク箇所の静的ブースト値と定義するとき、前記並列実行性能の指標値として、フォーク箇所の集合に含まれる各フォーク箇所の静的ブースト値の合計値を用いることを特徴とする。
本発明の第4のプログラム並列化方法は、第1または第2のプログラム並列化方法において、前記並列実行性能の指標値として、フォーク箇所の集合に含まれるフォーク箇所の総数を用いることを特徴とする。
本発明の第5のプログラム並列化方法は、第2のプログラム並列化方法において、前記プログラム変換部は、変数の生存区間が狭まるように逐次処理プログラムの命令の並べ替えを行うことを特徴とする。
本発明の第6のプログラム並列化方法は、第2のプログラム並列化方法において、前記プログラム変換部は、変数の割り当てられるレジスタができるだけ変わらないように逐次処理プログラムのレジスタ割当の変更を行うものであることを特徴とする。
本発明の第7のプログラム並列化方法は、第5のプログラム並列化方法において、前記並列化プログラム出力部は、前記フォーク箇所組合せ決定部により決定された最適な組合せ中のフォーク箇所のフォーク元ポイントおよびフォーク先ポイントをまたいだ命令の入れ替えは行わないという制限の下に、変数の生存区間が拡がるように命令の並べ替えを行うことを特徴とする。
本発明によれば、並列実行性能のよりよい並列化プログラムを生成することができる。
その理由は、入力となる逐次処理プログラムそのものだけでなく、それをプログラム変換した等価な逐次処理プログラムも考慮に入れ、入力となる逐次処理プログラムよりも並列実行性能の指標値の良い等価な逐次処理プログラムが見つかれば、その逐次処理プログラムから並列化プログラムを生成するようにしているためである。
本発明によれば、並列実行性能のよりよい並列化プログラムを高速に生成することができる。
その第1の理由は、足切り処理により、並列実行性能への寄与が少ないフォーク箇所を処理の早い段階で切り捨てているため、最適なフォーク箇所の組合せ決定処理などの後続の処理の時間が短縮されるためである。
その第2の理由は、フォーク箇所組合せ決定部において、フォーク箇所の集合に含まれるフォーク箇所のうち、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる組合せを生成しており、この生成される組合せが最適な組合せに近くなるためである。また、反復改善法により並列実行性能のよりよい組合せをさらに探索する場合でも、初期解が最適な組合せに近いため、反復改善法によって並列実行性能のよりよい組合せを探索する際の処理時間が大幅に短縮できるからである。
その第3の理由は、逐次処理プログラムを或る入力データの下で実行したときの逐次実行トレース情報を複数の区間に分割し、各分割区間毎に、フォーク箇所決定部が決定したフォーク箇所の集合に含まれるフォーク箇所のうち当該分割区間において出現するフォーク箇所の集合からフォーク箇所の最適な組合せを求め、最後に各分割区間でのフォーク箇所の最適な組合せを1つに統合しているためである。
次に、本発明の実施の形態について図面を参照して詳細に説明する。
《第1の実施の形態》
図1−1を参照すると、本発明の第1の実施の形態にかかるプログラム並列化装置100は、図示しない逐次コンパイラによって生成された機械語命令形式の逐次処理プログラム101を入力し、マルチスレッド型並列プロセッサ向けの並列化プログラム103を生成し出力する装置であり、入力となる逐次処理プログラム101を記憶する磁気ディスク等の記憶装置102と、出力となる並列化プログラム103を記憶する磁気ディスク等の記憶装置104と、逐次処理プログラム101を並列化プログラム103に変換する過程で生成される各種のデータを記憶する磁気ディスク等の記憶装置105と、逐次処理プログラム101を並列化プログラム103に変換する過程で使用する予め定められた各種のデータを記憶する磁気ディスク等の記憶装置106と、これらの記憶装置102、104、105および106に接続された中央処理装置等の処理装置107とで構成されている。また処理装置107は、フォーク箇所決定部110と、フォーク箇所組合せ決定部120と、並列化プログラム出力部130とを備えている。
このようなプログラム並列化装置100は、パーソナルコンピュータやワークステーションなどのコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスクなどのコンピュータ可読記録媒体に記録され、コンピュータの立ち上げ時などにコンピュータに読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にフォーク箇所決定部110、フォーク箇所組合せ決定部120および並列化プログラム出力部130といった機能手段を実現する。
フォーク箇所決定部110は、記憶装置102の記憶部101Mから逐次処理プログラム101を入力して解析し、並列化により適した逐次処理プログラムおよびフォーク箇所の集合を決定し、処理結果を中間データ141として記憶装置105の記憶部141Mに書き出す。好ましくは、フォーク箇所決定部110は、逐次処理プログラム101の一部の命令列をその命令列と等価な他の命令列にプログラム変換した少なくとも1つの逐次処理プログラムを生成し、逐次処理プログラム101およびプログラム変換によって生成した逐次処理プログラム毎に、予め定められたフォーク箇所条件を満たすフォーク箇所の集合及びそのフォーク箇所集合の並列実行性能の指標となる値を求め、並列実行性能の指標となる値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択する。さらに好ましくは、この選択したフォーク箇所の集合に含まれるフォーク箇所のうち、記憶装置106の記憶部151Mに予め記憶された静的足切り条件151を満たす静的ブースト値を持つものを集合中から取り除く。このフォーク箇所決定部110で決定されるフォーク箇所の集合には、互いに同時に実行できない排他関係にあるフォーク箇所が含まれる。
上記のプログラム変換の例として、逐次処理プログラムの命令の並べ替え、レジスタ割当の変更、或いはそれらの組合せがある。
上記のフォーク箇所条件として、「プログラム中のある区間をBとすると、Bの出口で生存するレジスタに対して、B内で書き込みを行っていない場合、その区間の入口をフォーク元ポイント、出口をフォーク先ポイントとする」なる条件(以下、フォーク箇所条件1と称す)を採用することができる。また、フォーク箇所条件1より条件を緩和し、「プログラム中のある区間Bにおいて、Bの入口で生存(alive)するレジスタをAh、出口で生存するレジスタをAtとするとき、Ah⊇Atで、出口で生存するレジスタと、対応する入口のレジスタの値が一致するとき、入口をフォーク元ポイント、出口をフォーク先ポイントとする」なる条件(以下、フォーク箇所条件2と称す)を採用するようにしてもよい。
上記の並列実行性能の指標となる値としては、フォーク箇所の集合に含まれる各フォーク箇所の静的ブースト値の合計値、或いは、フォーク箇所の集合に含まれるフォーク箇所の総数を用いることができる。フォーク箇所の静的ブースト値は、フォーク箇所のフォーク元ポイントからフォーク先ポイントまでの全命令の重みの合計値を意味する。命令の重みは、実行サイクル数が多い命令ほど大きな値とされる。
フォーク箇所組合せ決定部120は、中間データ141を入力し、フォーク箇所決定部110により決定されたフォーク箇所の集合に含まれるフォーク箇所の最適な組合せを決定し、処理結果を中間データ142として記憶装置105の記憶部142Mに書き出す。好ましくは、フォーク箇所組合せ決定部120は、フォーク箇所決定部110で決定された並列化により適した逐次処理プログラムを記憶装置106の記憶部152Mに予め記憶された入力データ152の下で実行したときの逐次実行トレース情報を複数の区間に分割し、各分割区間毎に以下の処理a〜cを実行することにより、フォーク箇所決定部110が決定したフォーク箇所の集合に含まれるフォーク箇所のうち当該分割区間において出現するフォーク箇所の集合からフォーク箇所の最適な組合せを求め、最後に各分割区間でのフォーク箇所の最適な組合せを1つに統合する。
a)フォーク箇所決定部110により決定されたフォーク箇所の集合に含まれるフォーク箇所毎に、当該分割区間の逐次実行トレース情報から、動的フォーク情報として、動的ブースト値、最小実行サイクル数および排他フォーク集合を求める。
動的ブースト値は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、その合計の実行サイクル数のことを意味する。
最小実行サイクル数は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、そのn個中での最小の実行サイクル数を意味する。
或るフォーク箇所の排他フォーク集合とは、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所と同時に実行できない他のフォーク箇所の集合を意味する。
b)フォーク箇所決定部110により決定されたフォーク箇所の集合に含まれるフォーク箇所のうち、その動的ブースト値が記憶装置106の記憶部153Mに予め記憶された動的足切り条件153を満たすフォーク箇所を取り除く。
c)上記bの動的足切り処理後のフォーク箇所の集合に含まれるフォーク箇所のうち、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる組合せを生成する。また好ましくは、この生成した組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する。
並列化プログラム出力部130は、中間データ141および中間データ142を入力し、フォーク箇所組合せ決定部120が決定したフォーク箇所の最適組合せに含まれる各フォーク箇所にフォーク命令を挿入することにより、フォーク箇所決定部110が決定した並列化により適した逐次処理プログラムから並列化プログラム103を生成し、後処理として、記憶装置104の記憶部103Mに書き出す。また好ましくは、並列化プログラム出力部130は、フォーク箇所組合せ決定部120により決定された最適な組合せ中のフォーク箇所のフォーク元ポイントおよびフォーク先ポイントをまたいだ命令の入れ替えは行わないという制限の下に、命令スケジューリングを行う。
次に本実施の形態にかかるプログラム並列化装置100の概略動作を説明する。
図1−2を参照すると、本実施の形態にかかるプログラム並列化装置100は、起動されると、処理装置107のフォーク箇所決定部110により、逐次処理プログラム101及びその一部の命令列をそれと等価な他の命令列に変換した少なくとも1つの逐次処理プログラムを解析し、それら複数の逐次処理プログラムのうち、より並列化に適した逐次処理プログラムを選択する(ステップS11)。また、フォーク箇所決定部110により、前記選択した逐次処理プログラムからフォーク箇所を網羅的に抽出し(ステップS12)、その抽出したフォーク箇所のうち、静的ブースト値が静的足切り条件151を満たすものを取り除く(ステップS13)。
次に、処理装置107のフォーク箇所組合せ決定部120により、フォーク箇所決定部110で決定された並列化により適した逐次処理プログラムを入力データ152の下で実行したときの逐次実行トレース情報を生成し、それを複数の区間に分割する(ステップS14)。そして、フォーク箇所組合せ決定部120により、逐次実行トレース情報の各分割区間毎にステップS15〜S18の処理を繰り返す。ステップS15では、フォーク箇所決定部110により決定されたフォーク箇所の集合に含まれるフォーク箇所毎に、当該分割区間の逐次実行トレース情報から、動的フォーク情報として、動的ブースト値、最小実行サイクル数および排他フォーク集合を求める。ステップS16では、求められた動的ブースト値および最小実行サイクル数と動的足切り条件153とを比較し、動的足切り条件153を満たすフォーク箇所を取り除く。ステップS17では、動的足切り後のフォーク箇所から、並列実行性能のよいフォーク箇所の初期組合せを生成し、この初期組合せを初期解としてステップS18で反復改善法により最適な組合せを探索する。次に、フォーク箇所組合せ決定部120により、各分割区間での最適な組合せを適当な基準で統合して、1つの最適なフォーク箇所の組合せを生成する(ステップS19)。
最後に、並列化プログラム出力部130により、必要に応じて後処理を行った後(ステップS20)、フォーク箇所組合せ決定部120で決定された最適なフォーク箇所の組合せに基づいて、フォーク箇所決定部110が決定した並列化により適した逐次処理プログラムにフォーク命令を挿入して並列化プログラム103を生成する(ステップS21)。
次に、本実施の形態の効果を説明する。
本実施の形態によれば、並列実行性能のよりよい並列化プログラムを生成することができる。
その理由は、入力となる逐次処理プログラムそのものだけでなく、それをプログラム変換した等価な逐次処理プログラムも考慮に入れ、入力となる逐次処理プログラムよりも並列実行性能の指標値の良い等価な逐次処理プログラムが見つかれば、その逐次処理プログラムから並列化プログラムを生成するようにしているためである。なお、入力の逐次処理プログラムと等価な逐次処理プログラムを命令の並べ替えによって生成する場合、変換後の逐次処理プログラムの逐次性能が入力の逐次処理プログラムより低下している可能性があるが、その影響は、後処理において実施する命令スケジューリングによって緩和することができる。
また本実施の形態によれば、並列実行性能のよりよい並列化プログラムを高速に生成することができる。
その第1の理由は、静的足切りおよび動的足切りの少なくとも一方により、並列実行性能への寄与が少ないフォーク箇所を処理の早い段階で切り捨てているため、動的フォーク情報の収集処理、最適なフォーク箇所の組合せ決定処理などの後続の処理の時間が短縮されるためである。
また第2の理由は、逐次処理プログラムを或る入力データの下で実行したときの逐次実行トレース情報を複数の区間に分割し、各分割区間毎に、フォーク箇所決定部が決定したフォーク箇所の集合に含まれるフォーク箇所のうち当該分割区間において出現するフォーク箇所の集合からフォーク箇所の最適な組合せを求め、最後に各分割区間でのフォーク箇所の最適な組合せを1つに統合しているためである。つまり、フォーク箇所の最適な組合せを決定するのに要する処理時間は候補となるフォーク箇所の数に応じて指数関数的に増加するが、各分割区間において出現するフォーク箇所の集合は、フォーク箇所決定部が決定したフォーク箇所の集合の部分集合になるため、全フォーク箇所の集合から一度に最適なフォーク箇所の組合せを求める場合に比べて、フォーク箇所の最適な組合せを求める処理に要する時間が大幅に短くなり、後の統合時間を加味しても全体的な時間が短縮されるからである。
また第3の理由は、フォーク箇所組合せ決定部において、フォーク箇所の集合に含まれるフォーク箇所のうち、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる組合せを生成しており、この生成される組合せは最適な組合せに近いため、その組合せを初期解として反復改善法によって並列実行性能のよりよい組合せをさらに探索する際の処理時間が大幅に短縮できるからである。
次に、本実施の形態にかかるプログラム並列化装置100の各部の詳細を説明する。
まず、フォーク箇所決定部110について詳細に説明する。
図2を参照すると、フォーク箇所決定部110は、フォーク箇所網羅部111、静的足切り部112、例えば記憶装置105上のワーク領域113〜115で構成される。
フォーク箇所網羅部111は、逐次処理プログラム101およびその一部の命令列を他の命令列に変換した少なくとも1つの逐次処理プログラムのうち、並列実行性能のよりよい並列化プログラムを生成するのに適した逐次処理プログラムを決定し、この決定した逐次処理プログラムのフォーク箇所の集合を網羅的に求める部分である。このフォーク箇所網羅部111は、制御・データフロー解析部1111、プログラム変換部1112、フォーク箇所抽出部1113、並列実行性能の指標値算出部1114および選択部1115から構成される。
図3にフォーク箇所網羅部111の処理例を示す。図3を参照すると、フォーク箇所網羅部111は、まず、入力の逐次処理プログラム101をワーク領域113の記憶部1131Mに格納し、制御・データフロー解析部1111により逐次処理プログラム101を解析して、制御フローグラフ(control flow graph)およびデータ依存グラフ(data dependence graph)を含む制御・データフロー解析結果1132を記憶部1132Mに格納する(ステップS101)。
制御フローグラフは、プログラムの分岐や合流の様子をグラフで表現したもので、分岐も合流もない部分(これは基本ブロック(Basic Block)と呼ばれる)をノード(node)とし、それらの間を分岐や合流を表すエッジ(edge)で結んだ有向グラフである。制御フローグラフに関する詳しい解説は、『コンパイラの構成と最適化』(2004年3月20日、朝倉書店発行。以下、参考文献1と称す)の第268頁〜第270に記載されている。また、データ依存グラフは、プログラム内のデータ依存関係(定義と使用の関係)をグラフで表現したものである。データ依存グラフに関する詳しい解説は、参考文献1の第336頁、第365頁に記載されている。
次にフォーク箇所網羅部111は、フォーク箇所抽出部1113により、制御・データフロー解析結果1132を参照して、入力の逐次処理プログラム101のフォーク箇所をすべて抽出し、フォーク箇所の集合1133として記憶部1133Mに格納する(ステップS102)。ここで、フォーク箇所は、フォーク元ポイント(フォーク元アドレス)とフォーク先ポイント(フォーク先アドレス)の組で構成され、本明細書ではfと表記する。また、フォーク元ポイントとフォーク先ポイントを明示する場合は、フォーク元ポイントをi、フォーク先ポイントをjとした場合、f(i,j)と表記する。
フォーク箇所抽出部1113の処理例を図4に示す。この処理例は、フォーク箇所条件1に適合するフォーク箇所を抽出する場合のものである。
図4を参照すると、フォーク箇所抽出部1113は、対象とする逐次処理プログラム中の全命令において、その命令の地点で生存している(alive)レジスタを、その逐次処理プログラムの制御・データフロー解析結果を参照して調査し、メモリ等に記録する(ステップS111)。次に、対象とする逐次処理プログラム中の全命令の組合せの中から、フォーク元ポイントとみなす命令とフォーク先ポイントとみなす命令の組を決定し(ステップS112)、フォーク先ポイントの命令からフォーク元ポイントの命令まで、制御フローをたどることができるかどうかを調査する(ステップS113)。もし、たどれなければ、その組はフォーク箇所でないので、ステップS117へ進む。もし、たどることができれば、フォーク先ポイントで生存しているレジスタの値が、たどる途中で替えられていたかどうかを調べ(ステップS115)、変えられていれば、その組はフォーク箇所でないので、ステップS117へ進む。もし、変えられていなければ、その組をフォーク箇所としてフォーク箇所集合に出力し(ステップS116)、ステップS117へ進む。ステップS117では、対象とする逐次処理プログラム中の全命令の組合せに関してフォーク箇所の可能性を調査し終えたかどうかを判定し、未調査の命令の組合せが残っていれば、ステップS112に戻って上述した処理と同様の処理を繰り返す。全組合せについて調査し終えていれば、フォーク箇所の抽出処理を終了する。
次にフォーク箇所網羅部111は、並列実行性能の指標値算出部1114により、フォーク箇所の集合1133の並列実行性能の指標値1134を算出し、記憶部1134Mに格納する(ステップS103)。本例では、並列実行性能の指標値として、フォーク箇所の静的ブースト値の合計値を用いる。また、静的足切り部112の便宜のために合計値だけでなく個々のフォーク箇所の静的ブースト値もあわせて格納する。
或るフォーク箇所の静的ブースト値は、そのフォーク箇所のフォーク元ポイントの命令からフォーク先ポイントの命令までの全命令の重みの総和であり、逐次処理プログラムとその制御・データフロー解析結果から機械的に計算できる。例えば、制御・データフロー解析結果に基づいて逐次処理プログラムの重み付きデータフローグラフ(エッジに重みを付与したデータフローグラフ)を作成し、各フォーク箇所毎に、そのフォーク箇所のフォーク元ポイントからフォーク先ポイントに至る前記グラフ上の重みを累積すれば、各フォーク箇所毎の静的ブースト値が得られる。本明細書では、或るフォーク箇所fの静的ブースト値をstatic_boost(f)と表記する。命令の重みとしては、例えば、その命令の実行に要するサイクル数が使用される。フォーク箇所の静的ブースト値の具体例を図5(a)に示すプログラムを用いて以下に示す。
図5(a)に示すプログラムの1行目と3行目は、レジスタr0、r2に値10、1000を入れるmov命令、2行目は、レジスタr0の値と値100とを加算し、結果をレジスタr1に置くadd命令、4行目は、レジスタr2の値と値10とで定まるメモリアドレスに格納されている値をレジスタr3にロードするldr命令である。このプログラムでの1つのフォーク箇所を、フォーク元ポイントが1行目、フォーク先ポイントが3行目であるf(1,3)=f1とすると、命令の重みがmovとaddで1の場合、当該フォーク箇所の静的ブースト値static_boost(f1)は2となる。
このような静的ブースト値およびその合計値が、並列実行性能の1つの指標にすることができる理由を図5(b)の概念図を参照して説明する。図5(b)の左側に示す単一のスレッドに、命令aをフォーク元ポイント、命令bをフォーク先ポイントとするフォーク箇所を設定し、同図の右側に示すように2つのスレッドに分割して並列実行した場合を考える。このとき、同図のΔだけ実行時間が短縮されるが、このΔは、当該フォーク箇所のフォーク元ポイントaからフォーク先ポイントbまでの命令の重みを加算した静的ブースト値に相当する。
次にフォーク箇所網羅部111は、プログラム変換部1112により、入力の逐次処理プログラム101の一部の命令列をそれと等価な他の命令列に変換した逐次処理プログラム1141を生成し、ワーク領域114の記憶部1141Mに格納する(ステップS104)。そして、入力の逐次処理プログラム101について求めた場合と同様に、プログラム変換して生成した逐次処理プログラム1141の制御・データフロー解析結果1142を制御・データフロー解析部1111により、その逐次処理プログラムのフォーク箇所の集合1143をフォーク箇所抽出部1113により、そのフォーク箇所の集合の並列実行性能の指標値1144を並列実行性能の指標値算出部1114により、それぞれ求めて、記憶部1142M、1143M、1144Mに格納する(ステップS105〜S107)。
入力の逐次処理プログラム101と等価かつそれぞれ互いに異なる複数の逐次処理プログラムを生成し、それらの制御・データフロー解析結果、フォーク箇所集合、並列実行性能の指標値を求めるようにしてもよい。この場合、ステップS104〜S107が複数回繰り返される。
最後に、フォーク箇所網羅部111は、選択部1115により、逐次処理プログラム101および1以上の逐次処理プログラム1141の中から、並列実行性能の指標値が最もよい、つまり静的ブースト値の合計値が最も大きい逐次処理プログラムを選択し、ワーク領域115の記憶部1151に逐次処理プログラム1151として格納する(ステップS108)。同時に、その逐次処理プログラム1151の制御・データフロー解析結果1152、フォーク箇所の集合1153、並列実行性能の指標値1154をワーク領域115の記憶部1152M、1153M、1154Mに格納する。
静的足切り部112は、フォーク箇所の集合1153に含まれるフォーク箇所のうち、その静的ブースト値が静的足切り条件151を満たすものを並列化性能への寄与が少ないものとして取り除き、残りのフォーク箇所だけをフォーク箇所の集合1413として記憶装置105の記憶部141Mにおける記憶部1413Mに書き出す。また、逐次処理プログラム1151とその制御・データフロー解析結果1152を記憶部141Mの記憶部1411M、1412Mに書き出す。
フォーク箇所の集合1153に含まれるフォーク箇所の静的ブースト値は、並列実行性能の指標値1154の中に記録されているので、静的足切り部112は、記録されている静的ブースト値と静的足切り条件151とを比較することにより、各フォーク箇所毎に、採用するか、捨て去るかを判断する。
静的足切り条件151の例を以下に示す。
静的足切り条件1:静的ブースト値<Ms
静的足切り条件2:静的ブースト値>Ns
静的ブースト値が下限閾値Msより小さなフォーク箇所を取り除く静的足切り条件1の根拠は、静的ブースト値が小さ過ぎる場合、並列化に伴うオーバヘッドに比べて当該フォーク箇所の寄与する並列効果が小さく、結果として当該フォーク箇所が並列化の性能に寄与しないからである。Msの値を幾らに設定するかは、ターゲットとなるマルチスレッド型並列プロセッサのアーキテクチャに依存し、事前の実験などによって決定される。
静的ブースト値が上限閾値Nsより大きなフォーク箇所を取り除く静的足切り条件2の根拠は、静的ブースト値が大き過ぎる場合、真依存関係(RAW:Read After Write)の違反が発生し易くなり、結果として当該フォーク箇所が並列化の性能に寄与しないからである。図6−1(a)に真依存関係の簡単なイメージを示す。真依存関係とは、或るサイクルで書き込んだデータを、後で読み出すことである。図6−1(a)では、白丸の箇所でメモリの100番地にストアしたデータを黒丸の箇所で再び読み出している。ここではメモリのデータを例に挙げているが、レジスタのデータなどでも同じである。逐次実行の場合、この依存関係においては問題は発生しないが、並列実行では、状況によって問題が発生する。今、図6−1(a)の単一のスレッドに、図示するフォーク元ポイントとフォーク先ポイントのフォーク箇所を設定し、図6−1(b)に示すように複数のスレッドに分割して並列実行することを考える。本来ならば、白丸の箇所でストアされたデータを黒丸の箇所で読み出すはずが、図6−1(b)では、黒丸のロード命令が白丸のストア命令を時間的に追い越して実行されている。つまり、真依存関係の違反が発生している。このような真依存関係の違反は、フォーク元ポイントからフォーク先ポイントまでのスレッド長が長ければ長いほど、つまり静的ブースト値が大きいほど発生し易くなる。真依存関係の違反が発生すると、子スレッドの再実行が行われるマルチスレッド型並列プロセッサでは、並列実行性能が低下する。
静的ブースト値が上限閾値Nsより大きなフォーク箇所を取り除く他の理由は、子スレッドをフォークするプロセッサを自プロセッサの一方の隣接プロセッサに限定したリング型フォークモデルのマルチスレッド型並列プロセッサにおいては、静的ブースト値が大き過ぎると、各プロセッサが長時間にわたりビジー状態になるため、フォークの連鎖が途絶え、処理効率が低下するためである。図6−2(a)にその様子を示す。プロセッサ#0からその隣接プロセッサ#1に、プロセッサ#1からその隣接プロセッサ#2に、プロセッサ#2からその隣接プロセッサ#3にそれぞれ子スレッドをフォークし、プロセッサ#3のフォーク点でプロセッサ#0がフリー状態になっているため、プロセッサ#3からプロセッサ#0への子スレッドのフォークも成功しているが、このプロセッサ#0に新たに生成されたスレッドのフォーク点では、隣接プロセッサ#1がビジー状態であるためフォークが不可能になっている。このような場合、図6−2(b)に示すように、プロセッサ#0においてフォークをスキップ(無効化)し、本来隣接プロセッサ#1で行うべき子スレッドを自身で実行するマルチスレッド型並列プロセッサでは、隣接プロセッサ#1がフリー状態になるまで処理を待ち合わせるマルチスレッド型並列プロセッサ方法に比べて処理の効率が高まるとは言え、並列実行の性能は低下する。
上限閾値Nsの値を幾らに設定するかは、ターゲットとなるマルチスレッド型並列プロセッサのアーキテクチャに依存し、事前の実験などによって決定される。
次に、プログラム変換部1112の詳細を説明する。
プログラム変換部1112は、命令並べ替えおよびレジスタ割当変更の少なくとも一方を実施することにより、入力の逐次処理プログラム101と等価な逐次処理プログラム1141を少なくとも1つ生成する。以下、命令並べ替えとレジスタ割当変更について個別に説明する。
○命令並べ替え
通常、スーパスカラマシンなど命令レベル並列実行可能なプロセッサ向けの目的プログラムを生成する逐次コンパイラは、パイプラインストールを回避するためや命令レベル並列性を高めるため等を目的として、データ依存関係のある命令が互いになるべく離れる、つまり変数が利用されている期間である生存(alive)区間が拡がるように命令を配置する最適化を行っている。この最適化は一般に命令スケジューリングと呼ばれるが、このような最適化がスレッド並列性の抽出を阻害する要因となり得る。なぜなら、命令スケジューリングによって変数の生存区間が拡がると、抽出できるフォーク箇所の候補数が減って静的ブースト値の合計である並列実行性能の指標値も減る場合があるためである。そこで、命令スケジューリングとは逆に、データ依存関係のある命令が互いになるべく近づく、つまり変数の生存区間が狭まるように命令を並べ替えた逐次処理プログラム1141を生成し、若し、元の逐次処理プログラム101より並列実行性能の指標値が改善されたならば、命令並べ替えした逐次処理プログラム1141を採用することで、よりよい並列実行性能の並列化プログラムが得られるようにする。
命令並べ替え処理では、任意のレジスタに書き込みを行う命令がある場合、当該レジスタを最終的に読み出す命令を、その書き込み命令に近づけるように命令を再配置する。ただし、データの依存関係を崩してはならない。レジスタのリネーミングを行う(命令追加、削除も行う)場合、命令間の真依存関係(RAW)を満たす必要がある。レジスタのリネーミングを行わない場合、命令間の真依存関係(RAW)、逆依存関係(WAR)、出力依存関係(WAW)を満たす必要がある。再配置する順序は、例えばブロックの上端から出現した命令から順に移動させても良い。基本ブロック内での命令並べ替えに限定し且つレジスタのリネーミングを行わずに命令の再配置を行う処理の一例を図7に示す。図7の処理は1つの基本ブロックに対する処理であり、制御フローを解析して逐次処理プログラムから抽出される各基本ブロックに対して同様の処理が繰り返される。
図7を参照すると、プログラム変換部1112は、まず、基本ブロックBB内の各命令をノードとし、RAW関係をエッジとするDAG(Directed Acyclic Graph:有向非循環グラフ)のグラフGrと、各命令をノードとし、RAWだけでなく全てのデータ依存関係(RAW、WAR、WAW)をエッジとするDAGのグラフGaとを、図示しないメモリ上に作成する(ステップS201)。
次にプログラム変換部1112は、データ依存関係のあるノード集合のうち、基本ブロックの上端で生存中の変数からパスのあるノード集合を順次に抽出して、基本ブロック再配置用に確保した再配置ブロックの上端に近い空きエリアから順に配置していく(ステップS202〜S205)。具体的には、Grに、基本ブロックBB上端で生存中の変数からGrでリーフノードへのパスがあるノード集合が存在するかどうかを判定し(ステップS202)、そのようなノード集合が存在すれば、そのうちコスト最小のノード集合NrをGrから抜き出し(ステップS203)、Ga中で当該Nrへパスのあるノード集合NaをGaから抜き出してNrとマージし(ステップS204)、再配置ブロックの上端に近い空きエリアからマージ後のNrを配置する(ステップS205)。ここで、コストとしては、例えば命令の実行サイクル数が使用される。
次にプログラム変換部1112は、データ依存関係のある残りのノード集合のうち、入力数(Indegree)0のノード(レジスタに定数を設定する命令など、初期WRITEのノード)から当該基本ブロックの下端で生存する変数につながるパスのあるノード集合を順次に抽出して、再配置ブロックの下端に近い空きエリアから順に配置していく(ステップS206〜S209)。具体的には、Grに、入力数0のノードから基本ブロックBB下端で生存する変数につながるパスがあるノード集合が存在するかどうかを判定し(ステップS206)、そのようなノード集合が存在すれば、そのうちコスト最小のノード集合NrをGrから抜き出し(ステップS207)、Ga中で当該Nrへパスのあるノード集合NaをGaから抜き出してNrとマージし(ステップS208)、再配置ブロックの下端に近い空きエリアからマージ後のNrを配置する(ステップS209)。
最後にプログラム変換部1112は、データ依存関係のある残りのノード集合を順次に抽出して、再配置ブロックの上端に近い空きエリアから順に配置していく(ステップS210〜S213)。具体的には、Grにノード集合が残っているかどうかを判定し(ステップS210)、ノード集合が残っていれば、そのうちの任意のノード集合NrをGrから抜き出し(ステップS211)、Ga中で当該Nrへパスのあるノード集合NaをGaから抜き出してNrとマージし(ステップS212)、再配置ブロックの上端に近い空きエリアからマージ後のNrを配置する(ステップS213)。
次にプログラム変換部1112による命令並べ替え処理の具体例を説明する。
命令並べ替え前のプログラム例を図8−1に、このプログラムの制御の流れ(制御フロー)を図8−2に、それぞれ示す。このプログラムにおいて、基本ブロックBB1から基本ブロックBB2へ伝搬されるレジスタ(つまり基本ブロックBB2の上端で生存するレジスタ)はレジスタr0、r4である。また、基本ブロックBB2から以降へ伝搬されるレジスタ(つまり基本ブロックBB2の下端で生存するレジスタ)は、レジスタr2、r3である。このプログラムのRAWのみに注目したDAGは図8−3に示すようになり、全てのデータ依存関係(RAW、WAR、WAW)に注目したDAGは図8−4に示すようになる。図中、実線の矢印がRAW、破線の矢印がWARまたはWAWを示している。
今、基本ブロックBB2内の命令の並べ替えを行うことを考える。RAWのDAGで、基本ブロックBB2の上端で生存する変数につながるパスを持つノード集合は、図8−3の(a)、(c)であるが、この2つのうち、コストの小さい方は(c)であるため、まず(c)のノード集合の命令を基本ブロックの上端から配置していく。(c)を配置し終わったら、続いて(a)のノード集合の命令を配置していく。しかし、(a)のノード集合を図8−4から参照すると、当該ノード集合につながるノード集合(図8−4(a)中の楕円で囲まれたノード集合、図8−3では(b)がそれにあたる)が存在する。このため、この接続されたノード集合も加えて命令を配置する。ここまでの処理を終えた命令列が図8−5である。なお、図8−5には、基本ブロックBB2以外の命令列は示していない。
次に、基本ブロックBB2の下端で生存する変数につながるパスを持つノード集合に注目する。図8−3内では(a)と(d)がそれにあたるが、既に(a)は配置済なので、残る(d)の配置を行う。図8−4の(a)では、当該ノード集合につながる他のノード集合が存在するが、それらの命令は既に配置済なので、これは気にしなくてよい。
最後に、基本ブロックBBの上端および下端に生存する変数に依存しないノード集合に着目する(つまり、残りのノード集合)。残ったノード集合は図8−3の(e)である。これを基本ブロックのできるだけ上の方から配置する。
上記の手順で並べ替えた結果が図8−6である。
図8−7は命令並べ替え前の命令列におけるレジスタの生存区間と書き込みの様子を示し、図8−8は命令並べ替え後の同様の様子を示す。図中、r0などのレジスタの下に延びる縦の線がそのレジスタの生存区間を表している。また、縦線上の黒丸は当該レジスタへの書き込みが発生していることを示す。バツ印はその箇所の命令をもって、当該レジスタの生存区間が終了したことを表す。
フォーク箇所条件として、前述したフォーク箇所条件1および2のうち、より厳しいフォーク箇所条件1を使用するものとして、命令並べ替え前のフォーク箇所を求めると、f(P05,P06)、f(P09,P10)の2箇所である。これに対して命令並べ替え後のフォーク箇所は、f(P01,P03)、f(P02,P03)、f(P07,P08)、f(P11,P12)の4箇所になる。
○レジスタ割当変更
一般的に、変数がレジスタに割り付けられていれば、メモリに入っている場合よりもアクセスが速く、且つ取り出しや格納(load、store)の命令が不要になるため、逐次処理プログラムを生成する逐次コンパイラは、基本的にそのようなレジスタ割当を実施する。しかし、レジスタの数には限度があるため、新たな変数を割り付けるレジスタが不足した場合、既にレジスタに割り付けられている変数のどれかをメモリに退避することによりレジスタを確保し、メモリに退避した変数に対し、後刻にレジスタを再度割り当てる場合がある。このとき、前回と同じレジスタが割り当てられる保証がないため、若し、逐次処理プログラム101において、別のレジスタが割り当てられていると、退避した時点と復帰した時点とでレジスタが一致しないために、退避した時点をフォーク元ポイント、復帰した時点をフォーク先ポイントとするようなフォーク箇所を抽出できない。そこで、プログラム変換部1112は、このような場合にレジスタ割当を退避と復帰時で一致させることにより、つまり変数の割り当てられるレジスタをできるだけ変えないようにレジスタ割当を変更した逐次処理プログラム1141を生成し、若し、元の逐次処理プログラム101より並列実行性能の指標値が改善されたならば、レジスタ割当変更した逐次処理プログラム1141を採用することで、よりよい並列実行性能の並列化プログラムが得られるようにする。
レジスタ割当変更の処理例について、具体的な命令列を例に以下説明する。なお、説明を簡単にするために、プロセッサの使用できるレジスタは、レジスタr0、r1の高々2つとする。
図9−1はレジスタ割当変更前のプログラムの一例を示し、左側が言語Cのような高級言語による記述、右側がその高級言語を低級言語(擬似的なアセンブラ)に落とし込んだ記述を示し、入力の逐次処理プログラム101に相当する。特に表記がなければ、左側のプログラムのことをソースプログラムと呼び、右側のプログラムをターゲットプログラムと呼ぶことにする。
図9−2は、ソースプログラムで用いられている変数(a〜d)が、ターゲットプログラムでのレジスタに割り当てられてから必要なくなるまでの期間を表したものである。縦線の上のP01などは、ターゲットプログラムの命令の横に表記してある識別子と一致している。横線の黒丸部分は該当する命令に含まれる期間、白丸は含まれないことを表す。例えば、変数aの生存区間1(横線に割り振られている番号を参照)は、P03の命令(st r0,40)まではレジスタに割り当てられているが、P04の命令(ld r0,44)ではすでに変数としては必要としていない、ということを表している。
図9−3は、図9−2をもとに作成されたレジスタ干渉グラフである。レジスタ干渉グラフとは、ノードが任意のレジスタに任意の値もしくは変数が割り当てられている区間(つまり任意のレジスタの生存区間)で、生存区間の重なり合う2つの生存区間をエッジで結んだグラフである。ノードの番号は、図9−2の期間の横線の番号に対応している。ノードで、白いものと灰色のものとがあるが、これは割り付けられているレジスタの種類に対応する。白はターゲットプログラムでのレジスタr0、灰色はターゲットプログラムでのレジスタr1を表す。例えば、変数aの生存区間1は、レジスタr0(白)に割り当てられているが、同じく変数aの生存区間4はレジスタr1(灰色)に割り当てられているのがわかる。
今、ターゲットプログラムの命令P01から命令P09までの命令列の中で、レジスタ割当の変更を考える。
まず、図9−2を参照すると、生存区間1と生存区間4は同一変数(a)のものだということがわかる。そこで、まず図9−3のノード1とノード4を一緒にする。その結果が図9−4である。このとき、まだ各ノードへの色づけ(つまりレジスタ割当)は行っていない。そして、このグラフに対してk−彩色問題を解く。k−彩色問題とは、グラフ上で、隣接するどのノードも同じ色にならないようにして、すべてのノードをk色で塗ることは可能か、という問題であり、本例においては、プロセッサで使用できるレジスタ数が2つなので、kは2になる。k−彩色問題を解いた結果、判定がYES(つまり、2色で彩色可能)ならば、実際にレジスタの割当を行い直す。一例として、彩色後のグラフを図9−5に示す。
図9−5に従ってレジスタの割当を変更したターゲットプログラムを図9−6に示す。変更されている点は、P07以降の変数aと変数dの割り当てられるレジスタである。フォーク箇所条件として前述したフォーク箇所条件2を使った場合、レジスタ割当変更前の図9−1のターゲットプログラムでは、f(P03,P04)、f(P06,P07)の2つであるのに対し、レジスタ割当変更後の図9−6のターゲットプログラムでは、さらにf(P02,P07)、f(P02,P08)、f(P03,P07)、f(P03,P08)、f(P04,P07)、f(P04,P08)が加わり、合計8個になる。
次にフォーク箇所組合せ決定部120の詳細を説明する。
図10を参照すると、フォーク箇所組合せ決定部120は、逐次実行トレース情報取得部121、分割部122、繰り返し部123、統合部124、例えば記憶装置105上のワーク領域125で構成される。
逐次実行トレース情報取得部121は、記憶部141の中間データ141に含まれる逐次処理プログラム(図2の1151)を、プロセッサあるいはシミュレータを使って、記憶部152Mに予め記憶された入力データ152の下に実行することにより、逐次実行トレース情報1251を生成し、ワーク領域125の記憶部1251Mに保存する。逐次実行トレース情報1251には、1マシンサイクル毎に、そのマシンサイクルで実行された逐次処理プログラム1151の命令文を特定するアドレスなどの識別情報が記録されている。また、逐次実行時の総サイクル数SNも記録されている。
分割部122は、記憶部1251Mに保存された逐次実行トレース情報を、予め定められた逐次実行サイクル数Nで分割し、得られた個々の逐次実行トレース部分情報1252を記憶部1252Mに保存する。逐次実行トレース情報1251の総実行サイクル数SNがNの整数倍でないとき、最後の1つの逐次実行トレース部分情報はサイズが小さくなる。若し、Nより十分に小さくなる場合には、1つ前の逐次実行トレース部分情報に合体させるようにしてもよい。逐次実行サイクル数Nの値にもよるが、1つの逐次実行トレース部分情報1252には、フォーク箇所決定部110により決定されたフォーク箇所の集合(図2の1413)に含まれるフォーク箇所の一部のみが現れる。
繰り返し部123は、動的フォーク情報取得部1231、動的足切り部1232、初期組合せ決定部1233および組合せ改善部1234を備えており、分割部122が生成した個々の逐次実行トレース部分情報1252毎に、動的フォーク情報の取得、動的足切り、フォーク箇所の初期組合せの生成およびその改善を行う。以下、動的フォーク情報取得部1231、動的足切り部1232、初期組合せ決定部1233および組合せ改善部1234について説明する。
動的フォーク情報取得部1231は、各逐次実行トレース部分情報1252毎に、フォーク箇所決定部110により決定されたフォーク箇所集合1413に含まれる各フォーク箇所毎の動的ブースト値、最小実行サイクル数および排他フォーク集合を求め、動的フォーク情報1253として記憶部1253Mに格納する。動的フォーク情報取得部1231の処理例を図11に示す。
図11を参照すると、動的フォーク情報取得部1231は、まず、フォーク箇所集合1413に含まれる各フォーク箇所毎に、そのフォーク箇所の動的ブースト値、最小実行サイクル数および排他フォーク集合をそれぞれ保存するための構造体を記憶部1253Mに確保し、それらの値を初期値に設定する(ステップS301)。例えば、動的ブースト値は最小値に、最小実行サイクル数は最大値に、排他フォーク集合は空にそれぞれ初期設定する。ここで、排他集合を保存する構造体として、各ビットがフォーク箇所と1対1に対応し排他関係にあれば1が立つビット列を使用すれば、メモリ使用量を削減することができる。
次に動的フォーク情報取得部1231は、フォーク箇所集合1413中の1つのフォーク箇所に注目し(ステップS302)、そのフォーク箇所のフォーク先ポイントが現れる箇所を逐次実行トレース部分情報1252の先頭から順に検索する(ステップS303)。該当する1つのフォーク先ポイントが見つかると(ステップS304でNo)、見つかったフォーク先ポイントとペアになるフォーク先ポイントを逐次実行トレース部分情報1252から検索し(ステップS305)、逐次実行トレース部分情報1252上で前記フォーク元ポイントと前記フォーク先ポイントとの間の実行サイクル数をカウントする(ステップS306)。そして、構造体に保存されている注目中フォーク箇所の最小実行サイクル数と比較し(ステップS307)、今回の実行サイクル数の方が少なければ、最小実行サイクル数を今回の実行サイクル数に置き換える(ステップS308)。次に、構造体に保存されている注目中フォーク箇所の動的ブースト値に今回の実行サイクル数を加算する(ステップS309)。次に、フォーク箇所集合1413中の注目中フォーク箇所以外の他のフォーク箇所であって、注目中フォーク箇所の前記フォーク元ポイントとフォーク先ポイントの間にフォーク元ポイントおよびフォーク先ポイントの少なくとも一方が存在するフォーク箇所を調べ、それらを注目中のフォーク箇所の排他フォーク集合に入れる(ステップS310)。なお、ステップS303で検索したフォーク元ポイントとペアになるフォーク先ポイントが処理対象とする逐次実行トレース部分情報1252に存在しない場合もあり、そのときはステップS305の検索に失敗するが、その場合には、他の逐次実行トレース部分情報1252を検索するようにしてもよいし、或いはステップS306〜S310をスキップしてもよい。
注目中のフォーク箇所に関する逐次実行トレース部分情報1252上の1つのフォーク元ポイントとフォーク先ポイントのペアについて上述した処理を終えると、ステップS303に戻り、当該注目中のフォーク箇所の別のフォーク元ポイントを逐次実行トレース部分情報1252から検索し、あれば前述の処理と同様の処理を繰り返す(ステップS305〜S310)。
逐次実行トレース部分情報1252上に現れる注目中フォーク箇所のすべてについて上述した処理を終えると(ステップS304でYes)、フォーク箇所集合1413中の次の1つのフォーク箇所に注目を移し(ステップS311)、前述の処理と同様の処理を繰り返す。フォーク箇所集合1413中の全てのフォーク箇所について前述した処理を終えると(ステップS312)、当該逐次実行トレース部分情報1252からの動的ブースト値、最小実行サイクル数および排他フォーク集合の取得処理を終える。なお、当該逐次実行トレース部分情報1252に現れないフォーク箇所の動的ブースト値、最小実行サイクル数および排他フォーク集合は、初期値のままになる。
次に動的足切り部1232について説明する。
動的足切り部1232は、フォーク箇所決定部110により決定されたフォーク箇所集合1413に含まれるフォーク箇所のうち、動的フォーク情報1253中の動的ブースト値および最小実行サイクル数が動的足切り条件153を満たすものを、並列化性能への寄与が少ないものとして取り除き、残りのフォーク箇所を動的足切り後のフォーク箇所集合1254として記憶部1254Mに格納する。動的足切り部1232の処理例を図12に示す。
図12を参照すると、動的足切り部1232は、まず、フォーク箇所集合1413中の1つのフォーク箇所に注目し(ステップS321)、動的フォーク情報1253中の注目中フォーク箇所の動的ブースト値および最小実行サイクル数と動的足切り条件153とを比較する(ステップS322)。注目中のフォーク箇所の動的ブースト値および最小実行サイクル数の少なくとも一方が動的足切り条件153を満たす場合(ステップS323でYes)、当該フォーク箇所は動的足切り後のフォーク箇所集合1254に記録せず、動的ブースト値および最小実行サイクル数の双方が動的足切り条件153を満たしていれば、当該フォーク箇所を動的足切り後のフォーク箇所集合1254に記録する(ステップ324)。
動的足切り部1232は、フォーク箇所集合1413中の1つのフォーク箇所に注目して上述した処理を終えると、フォーク箇所集合1413中の次の1つのフォーク箇所に注目を移し(ステップS325)、前述の処理と同様の処理を繰り返す(ステップS322〜S324)。以上と同様の処理をフォーク箇所集合1413中の残りの全てのフォーク箇所について繰り返し終えると(ステップS326でYes)、1つの動的フォーク情報1253に基づく動的足切り処理を終える。
動的足切り条件153の例を以下に示す。
動的足切り条件1:(動的ブースト値/逐次実行サイクル)<Md
動的足切り条件2:最小サイクル数>Nd
動的足切り条件1における逐次実行サイクルは、動的ブースト値を取得した逐次実行トレース部分情報1252の総実行サイクル数、つまり分割に使用した逐次実行サイクル数Nを意味する。従って、動的ブースト値/逐次実行サイクルは、総実行サイクル数に対する当該フォーク箇所によって短縮される実行サイクル数の割合を意味する。この割合が下限閾値Mdより小さなフォーク箇所を取り除く理由は、静的足切り条件1と同じである。Mdの値を幾らに設定するかは、ターゲットとなるマルチスレッド型並列プロセッサのアーキテクチャに依存し、事前の実験などによって決定される。
動的足切り条件2を満たすフォーク箇所を取り除く理由は、静的足切り条件2の場合と同じである。Ndの値を幾らに設定するかは、ターゲットとなるマルチスレッド型並列プロセッサのアーキテクチャに依存し、事前の実験などによって決定される。
次に初期組合せ決定部1233について説明する。
初期組合せ決定部1233は、動的足切り後のフォーク箇所集合1254と、動的フォーク情報1253中の排他フォーク集合および動的ブースト値とを入力し、キャンセルの発生しないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる組合せを初期組合せ1255として生成し、記憶部1255Mに格納する。初期組合せ決定部1233の処理例を図13に示す。
図13を参照すると、初期組合せ決定部1233は、まず、フォーク箇所集合1254中の各フォーク箇所をノードとし、排他関係にあるフォーク箇所どうしをエッジで結んだグラフであって、各ノードにそのノードに対応するフォーク箇所の動的ブースト値を重みとして付与した重み付きグラフを生成する(ステップS401)。フォーク箇所どうしが排他関係にあるかどうかは、動的フォーク情報1253の各フォーク箇所毎の排他集合を参照して判断する。また、各フォーク箇所の動的ブースト値も動的フォーク情報1253から参照する。
例えば図14(a)の左側に示すような5つのフォーク箇所f1[15]、f2[7]、f3[10]、f4[5]、f5[8]から構成されるフォーク箇所集合を考えてみる。[]内の数値は動的ブースト値を示し、図14(a)において破線で結ばれたフォーク箇所どうしは排他関係にあることを示す。このようなフォーク箇所集合の場合、重み付きグラフは図14(b)の左側に示すようなグラフになる。
次に初期組合せ決定部1233は、重み付きグラフの重み付き最大独立集合(Maximum Weight Independent Set)を求める(ステップS402)。重み付き最大独立集合とは、隣り合わない(つまり独立)頂点の集合であって、重みの和が最大となる集合のことである。重み付き最大独立集合を求める解法の例については後述するが、図14(b)の重み付き最大独立集合の解は、右側のグラフにおける黒丸の2つの頂点を含む集合になる。
次に初期組合せ決定部1233は、求めた重み付き最大独立集合に含まれるノードに対応するフォーク箇所の集合を初期組合せ1255として記憶部1255Mに格納する(ステップS403)。図14(b)の場合、図14(a)の右側に示すように、フォーク箇所f1[15]とフォーク箇所f5[8]とを含む集合が初期組合せ1255となる。
次に重み付き最大独立集合の解法例について説明する。
今、図15−1に示すような重み付きグラフを考える。グラフ中の各ノードがフォーク箇所を表し、ノードの横の数字がそのノードの重み(つまり動的ブースト値)を表す。また、ノードを接続するエッジが排他関係を表している。
重み付き最大独立集合の近似アルゴリズムの一例を以下に示す。
1.選択されていない、もしくは削除されていないノードの中で最も重みの大きいノードを選ぶ。
2.上記の1で選んだノードと接続しているノードをグラフから削除する。
3.選択できるノードがなくなるまで、上記の1と2を繰り返す。
以上のアルゴリズムによる重み付き最大独立集合の解法例を、図15−1のグラフを用いて以下に示す。
まず最も重みの大きいフォーク箇所f7を選択する。そして、フォーク箇所f7に隣接するノードを削除する。その様子を図15−2に示す。黒いノードが選択されたノード、灰色のノードは削除されたノードを表す。
同様にして、選択および削除されていないノードの中で重み最大のノードであるフォーク箇所f3を次に選択する。選択後の様子を図15−3に示す。
最後に残ったフォーク箇所f1を選択し、処理を終了する。終了時点の様子を図15−4に示す。結果として、選択されたフォーク箇所は、f1、f3、f7の3つになる。
次に組合せ改善部1234について説明する。
組合せ改善部1234は、初期組合せ決定部1233が決定した初期組合せ1255、動的足切り後のフォーク箇所集合1254、中間データ141中の逐次処理プログラム1151およびその制御・データフロー解析結果1152を入力し、初期組合せ1255を初期解として、並列実行性能のよりよいフォーク箇所の組合せである最適組合せ1256を探索し、記憶部1256Mに書き出す。つまり、初期組合せ1255に対して僅かな変更を加えて得られる試行組合せを探索し、並列実行性能のよりよい試行組合せが得られれば、改めてこの試行組合せを初期解として探索を続ける、いわゆる反復改善法によって最適解を探索する。組合せ改善部1234の処理例を図16に示す。
組合せ改善部1234は、まず、動的足切り後のフォーク箇所集合1254に含まれるフォーク箇所を動的ブースト値の昇順にソートする(ステップS411)。次に、初期組合せ1255による並列実行をシミュレートし、初期組合せ1255による並列実行性能(例えば実行サイクル数)を取得する(ステップS412)。初期組合せ1255による並列実行は、逐次実行トレース部分情報1252を使って行うことができる。つまり、逐次実行トレース部分情報1252を初期組合せ1255に含まれるフォーク箇所で並列化したときの動作を、中間データ141に記録されている逐次処理プログラム1151の制御・データフロー解析結果、ターゲットとなるマルチスレッド型並列プロセッサのプロセッサ数などを参照して、シミュレートし、総実行サイクル数を求める。勿論、他の方法、例えば、初期組合せ1255に含まれるフォーク箇所に基づいて逐次処理プログラム1151から生成される並列化プログラムの動作を、ターゲットとなるマルチスレッド型並列プロセッサあるいはシミュレータで或る入力データの下に実行して総実行サイクルを求めるようにしてもよい。
次に、組合せ改善部1234は、初期組合せ1255を現時点の最適な組合せである最適組合せに設定し(ステップS413)、以下のようにして反復改善法によって最適解を探索する。
まず、最適組合せに含まれず且つ動的ブースト値の最も大きいフォーク箇所を前記ソート後のフォーク箇所集合1254から選択し、この選択したフォーク箇所を最適組合せに追加したものを試行組合せとする(ステップS414)。また、前記追加したフォーク箇所と排他関係にあるフォーク箇所が試行組合せに存在するかどうかを調べ、存在すればそれらを試行組合せから除去する(ステップS415)。そして、試行組合せによる並列実行をシミュレートし、試行組合せによる並列実行性能を取得する(ステップS416)。
次に、試行組合せによる並列実行性能と最適組合せによる並列実行性能とを比較し、試行組合せの方が並列実行性能が良いかどうか、つまり並列実行性能が改善したかどうかを判定する(ステップS417)。若し、改善していれば、試行組合せを新たな最適組合せに設定し(ステップS418)、ステップS419の処理へ進む。他方、改善していなければ、最適組合せを現状のままにしてステップS419の処理へ進む。
ステップS419において、組合せ改善部146は、現在の試行組合せに含まれるフォーク箇所と排他関係にないフォーク箇所であって且つ動的ブースト値が最も大きいフォーク箇所を前記ソート後のフォーク箇所集合1254から1つ選択し、この選択したフォーク箇所を現在の最適組合せに追加したものを、新たな試行組合せに設定する。そして、この試行組合せによる並列実行をシミュレートし、試行組合せによる並列実行性能を取得する(ステップS420)。
次に、試行組合せによる並列実行性能と最適組合せによる並列実行性能とを比較し、試行組合せの方が並列実行性能が良いかどうか、つまり並列実行性能が改善したかどうかを判定する(ステップS421)。若し、改善していれば、試行組合せを新たな最適組合せに設定し(ステップS422)、ステップS423の処理へ進む。他方、改善していなければ、最適組合せを現状のままにしてステップS423の処理へ進む。
ステップS423において、組合せ改善部146は、直前の2つの試行組合せの少なくとも一方で並列実行性能の改善があったかどうかを判定する。何れか一方でも並列実行性能の改善があった場合には、改善後の最適組合せから、よりよい組合せをさらに探索すべく、ステップS414の処理に戻って探索を続ける。
他方、直前の2つの試行組合せの何れも並列実行性能が改善されていなかった場合、組合せ改善部146は、まだ選択していないフォーク箇所がフォーク箇所集合1254に残っているかどうかを判定し(ステップS424)、残っていれば、現在の最適組合せに含まれず且つ動的ブースト値が次に大きいフォーク箇所を前記ソート後のフォーク箇所集合1254から選択し、この選択したフォーク箇所を最適組合せに追加したものを試行組合せとし(ステップS425)、ステップS415に戻って上述した処理と同様の処理を繰り返す。一方、フォーク箇所集合1254に未選択のフォーク箇所が残っていなければ、もはや改善の余地がないとみなして、現在の最適組合せを最適組合せ1256として記憶部1256Mに書き出す(ステップS426)。
次に、統合部124について説明する。
統合部124は、繰り返し部123の組合せ改善部1234によって求められた各分割区間毎での最適組合せ1256を適当な基準を用いて1つに統合し、統合された最適組合せ1421として記憶部142に出力する。統合部124の処理例を図17−1〜図17−3に示す。
図17−1に示す方法では、まず、最適組合せ1256に含まれるフォーク箇所毎に、その動的ブースト値の合計を計算する(ステップS501)。例えば、最適組合せ1256が、A0、A1、A2の3つとし、或るフォーク箇所f1がA0とA1だけに含まれ、A0の生成に使われた動的フォーク情報中でのフォーク箇所f1の動的ブースト値が20、A1の生成に使われた動的フォーク情報中でのフォーク箇所f1の動的ブースト値が30とすると、フォーク箇所f1の動的ブースト値の合計値は50になる。
次に、動的ブースト値の合計値が一定値以上のフォーク箇所の集合を、統合された最適組合せとする(ステップS502)。一定値としては、全フォーク箇所の動的ブースト値の合計値の平均などが考えられる。
図17−2に示す方法は、図17−1に示した方法に、排他フォーク集合を考慮に入れて統合するようにしたものである。具体的には、図17−1に示す方法と同様に、最適組合せ1256に含まれるフォーク箇所毎に、その動的ブースト値の合計を計算する(ステップS511)。次に、最適組合せに含まれるフォーク箇所毎に、その排他フォーク集合に含まれる各フォーク箇所の動的ブースト値の合計値を算出し、そのフォーク箇所の動的ブースト値の合計値から減算する(ステップS512)。例えば、前述した例において、フォーク箇所f1と排他関係にあるフォーク箇所としてf2、f3が例えばA2などに存在し、フォーク箇所f2、f3についてステップS511で算出された動的ブースト値の合計値をそれぞれ10、15とすると、その合計値25がフォーク箇所f1の動的ブースト値の合計値50から減算される。
次に、動的ブースト値の合計値が一定値以上のフォーク箇所の集合を、統合された最適組合せとする(ステップS513)。ここでの一定値としては、例えば0などの値が考えられる。
図17−3は、より高精度な方法で統合する例を示す。まず、図17−1に示す方法と同様に、最適組合せ1256に含まれるフォーク箇所毎に、その動的ブースト値の合計を計算する(ステップS521)。次に、最適組合せに含まれるフォーク箇所毎に、その排他フォーク集合を求める。例えば、前述した例において、フォーク箇所f1と排他関係にあるフォーク箇所が、全ての最適組合せを通じて、f2とf3の2つであった場合、フォーク箇所f1の排他フォーク集合は、f2とf3を含む集合となる。
次に、全ての最適組合せ1256中のフォーク箇所から、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計値が最大になる組合せを生成し、これを統合された最適組合せ1421とする(ステップS523〜S525)。具体的には、重み付き最大独立集合問題に置き換えて扱う。すなわち、まず、最適組合せ1256に含まれる各フォーク箇所をノードとし、排他関係にあるフォーク箇所どうしをエッジで結んだグラフであって、各ノードにそのノードに対応するフォーク箇所の動的ブースト値の合計値を重みとして付与した重み付きグラフを生成する(ステップS523)。次に、重み付きグラフの重み付き最大独立集合を求める(ステップS524)。そして、求めた重み付き最大独立集合に含まれるノードに対応するフォーク箇所の集合を、統合された最適組合せとする(ステップS525)。
次に並列化プログラム出力部130の詳細を説明する。
図18を参照すると、並列化プログラム出力部130は、後処理部131、フォーク命令挿入部132、例えば記憶装置105上のワーク領域132で構成される。
後処理部131は、中間データ141に含まれる逐次処理プログラム1151、その制御・データフロー解析結果1152、中間データ142に含まれる統合された最適組合せ1421を入力し、フォーク箇所決定部110におけるプログラム変換部1112において実施された命令並べ替えによる各スレッドの逐次性能に対する悪影響を緩和するための後処理を実施し、後処理を施した逐次処理プログラム1331をワーク領域133の記憶部1331Mに書き出す。
具体的には、後処理部131は、統合された最適組合せ1421に含まれるフォーク箇所のフォーク元ポイントおよびフォーク先ポイントをまたいだ命令の入れ替えはしないという制限の下に、データ依存関係のある命令が互いになるべく離れる、つまり変数の生存区間が拡がるように命令の並べ替えを行う。これは、データ依存関係を壊さない範囲で、同じレジスタへのライトからリードまでの期間をできるだけ長くする既存のコンパイラにおける命令スケジューリング機能に、フォーク元ポイントとフォーク先ポイントをまたいだ命令の入れ替えは行わないという制限を持たせたものに相当する。
プログラム変換部1112において、データ依存関係のある命令が互いになるべく近づく、つまり変数の生存区間が狭まるような命令の並べ替えが実施されていると、逐次処理性能が低下する可能性があるため、後処理部131で上述した処理を行うことにより、影響を緩和することができる。
フォーク命令挿入部132は、後処理後の逐次処理プログラム1331と、中間データ142に含まれる統合された最適組合せ1421を入力し、最適組合せ1421に含まれる各フォーク箇所にフォーク命令を挿入することにより、逐次処理プログラム1331から並列化プログラム103を生成し、記憶部103Mに書き出す。
《第2の実施の形態》
図19−1を参照すると、本実施の形態にかかるプログラム並列化装置100Aは、第1の実施の形態にかかるプログラム並列化装置100と比較して、フォーク箇所組合せ決定部120の代わりにフォーク箇所組合せ決定部120Aを備えている点で相違する。
フォーク箇所組合せ決定部120Aは、図10に示したフォーク箇所組合せ決定部120の構成要素から分割部122および統合部124を省略したもので、逐次実行トレース情報を分割せず一括して処理する。
図19−2を参照すると、本実施の形態にかかるプログラム並列化装置100Aは、起動されると、処理装置107のフォーク箇所決定部110により第1の実施の形態と同様の処理を行う(ステップS11〜S13)。
次に、フォーク箇所組合せ決定部120Aにより、次の処理を行う。まず、フォーク箇所決定部110で決定された並列化により適した逐次処理プログラムを入力データ152の下で実行したときの逐次実行トレース情報を生成する(ステップS14A)。次に、フォーク箇所決定部110により決定されたフォーク箇所の集合に含まれるフォーク箇所毎に、逐次実行トレース情報から、動的フォーク情報として、動的ブースト値、最小実行サイクル数および排他フォーク集合を求める(ステップS15A)。次に、求められた動的ブースト値および最小実行サイクル数と動的足切り条件153とを比較し、動的足切り条件153を満たすフォーク箇所を取り除く(ステップS16A)。次に、動的足切り後のフォーク箇所から、並列実行性能のよいフォーク箇所の初期組合せを生成する(ステップS17A)。次に、この初期組合せを初期解として、反復改善法により最適な組合せを探索する(ステップS18A)。
最後に、並列化プログラム出力部130により、第1の実施の形態と同様の処理を行う(ステップS20、S21)。
《第3の実施の形態》
図20−1を参照すると、本実施の形態にかかるプログラム並列化装置100Bは、第1の実施の形態にかかるプログラム並列化装置100と比較して、フォーク箇所決定部110およびフォーク箇所組合せ決定部120の代わりにフォーク箇所決定部110Bおよびフォーク箇所組合せ決定部120Bを備えている点で相違する。
フォーク箇所決定部110Bは、図2に示したフォーク箇所決定部110の構成要素から静的足切り部112を省略した構成を持つ。
フォーク箇所組合せ決定部120Bは、図10に示したフォーク箇所組合せ決定部120の構成要素から動的足切り部1232を省略した構成を持つ。
図20−2を参照すると、本実施の形態にかかるプログラム並列化装置100Bは、起動されると、処理装置107のフォーク箇所決定部110Bにより、逐次処理プログラム101及びその一部の命令列をそれと等価な他の命令列に変換した少なくとも1つの逐次処理プログラムを解析し、それら複数の逐次処理プログラムのうち、より並列化に適した逐次処理プログラムを選択し(ステップS11)、また、前記選択した逐次処理プログラムからフォーク箇所を網羅的に抽出する(ステップS12)。
次に、処理装置107のフォーク箇所組合せ決定部120Bにより、フォーク箇所決定部110で決定された並列化により適した逐次処理プログラムを入力データ152の下で実行したときの逐次実行トレース情報を生成し、それを複数の区間に分割する(ステップS14)。そして、フォーク箇所組合せ決定部120Bにより、逐次実行トレース情報の各分割区間毎にステップS15、S17B、S18の処理を繰り返す。ステップS15では、フォーク箇所決定部110により決定されたフォーク箇所の集合に含まれるフォーク箇所毎に、当該分割区間の逐次実行トレース情報から、動的フォーク情報として、動的ブースト値、最小実行サイクル数および排他フォーク集合を求める。ステップS17Bでは、フォーク箇所決定部110により決定されたフォーク箇所の集合に含まれるフォーク箇所のうち、当該分割区間の逐次実行トレース情報に現れるトレース箇所から、並列実行性能のよいフォーク箇所の初期組合せを生成する。ステップS18では、この初期組合せを初期解として、反復改善法により最適な組合せを探索する。次に、フォーク箇所組合せ決定部120Bにより、各分割区間での最適な組合せを適当な基準で統合して、1つの最適なフォーク箇所の組合せを生成する(ステップS19)。
最後に、並列化プログラム出力部130により、第1の実施の形態と同様の処理を行う(ステップS20、S21)。
本実施の形態では、第1の実施の形態から静的足切りおよび動的足切り双方の構成部分を省略したが、何れか一方だけを省略した実施の形態も考えられる。また、第2の実施の形態から静的足切りおよび動的足切り双方の構成部分あるいは何れか一方を省略した実施の形態も考えられる。
《その他の実施の形態》
以上、本発明の実施の形態について説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。例えば、前記各実施の形態において、初期組合せ決定部1233が動的ブースト値の大きい上位幾つかのフォーク箇所の組合せを初期組合せとして生成する構成や、組合せ改善部1234を省略した構成にすることも可能である。
本発明の第1の実施の形態のプログラム並列化装置のブロック図である。 本発明の第1の実施の形態のプログラム並列化装置の処理の流れを示すフローチャートである。 本発明の第1の実施の形態のプログラム並列化装置におけるフォーク箇所決定部のブロック図である。 本発明の第1の実施の形態のプログラム並列化装置におけるフォーク箇所網羅部の処理例を示すフローチャートである。 本発明の第1の実施の形態のプログラム並列化装置におけるフォーク箇所抽出部の処理例を示すフローチャートである。 フォーク箇所の静的ブースト値の説明図である。 静的ブースト値が上限閾値Nsより大きなフォーク箇所を取り除く静的足切り条件2を説明するための図である。 静的ブースト値が上限閾値Nsより大きなフォーク箇所を取り除く静的足切り条件2を説明するための別の図である。。 本発明の第1の実施の形態のプログラム並列化装置におけるプログラム変換部が行う命令並べ替え処理の一例を示すフローチャートである。 命令並べ替え前のプログラム例を示す図である。 命令並べ替え前のプログラムの制御の流れを示す図である。 命令並べ替え前のプログラムのRAWのみに注目した有向非循環グラフを示す図である。 命令並べ替え前のプログラムの全てのデータ依存関係(RAW、WAR、WAW)に注目した有向非循環グラフを示す図である。 命令並べ替え途中のプログラムを示す図である。 命令並べ替え後のプログラムを示す図である。 命令並べ替え前の命令列におけるレジスタの生存区間と書き込みの様子を示す図である。 命令並べ替え後の命令列におけるレジスタの生存区間と書き込みの様子を示す図である。 レジスタ割当変更前のプログラムの一例を示す図である。 ソースプログラムで用いられている変数(a〜d)が、ターゲットプログラムでのレジスタに割り当てられてから必要なくなるまでの期間を表した図である。 レジスタ干渉グラフの一例を示す図である。 複数のノードをマージしたレジスタ干渉グラフを示す図である。 レジスタ干渉グラフに対してk−彩色問題を解いた結果に基づき彩色したグラフを示す図である。 レジスタの割当を変更したターゲットプログラムを示す図である。 本発明の第1の実施の形態のプログラム並列化装置におけるフォーク箇所組合せ決定部のブロック図である。 本発明の第1の実施の形態のプログラム並列化装置における動的フォーク情報取得部の処理例を示すフローチャートである。 本発明の第1の実施の形態のプログラム並列化装置における動的足切り部の処理例を示すフローチャートである。 本発明の第1の実施の形態のプログラム並列化装置における初期組合せ決定部の処理例を示すフローチャートである。 フォーク箇所集合から最適なフォーク箇所の組合せを求める問題が、重み付き最大独立集合問題に置き換えられる様子を示す図である。 重み付きグラフの例を示す図である。 重み付きグラフの重み付き最大独立集合を求める様子を示す図である。 重み付きグラフの重み付き最大独立集合を求める様子を示す図である。 重み付きグラフの重み付き最大独立集合を求める様子を示す図である。 本発明の第1の実施の形態のプログラム並列化装置における組合せ改善部の処理例を示すフローチャートである。 本発明の第1の実施の形態のプログラム並列化装置における統合部の処理例を示すフローチャートである。 本発明の第1の実施の形態のプログラム並列化装置における統合部の別の処理例を示すフローチャートである。 本発明の第1の実施の形態のプログラム並列化装置における統合部のさらに別の処理例を示すフローチャートである。 本発明の第1の実施の形態のプログラム並列化装置における並列化プログラム出力部のブロック図である。 本発明の第2の実施の形態のプログラム並列化装置のブロック図である。 本発明の第2の実施の形態のプログラム並列化装置の処理の流れを示すフローチャートである。 本発明の第3の実施の形態のプログラム並列化装置のブロック図である。 本発明の第3の実施の形態のプログラム並列化装置の処理の流れを示すフローチャートである。 マルチスレッド実行方法の概要を説明する図である。 従来のプログラム並列化装置の構成例を示すブロック図である。
符号の説明
100…プログラム並列化装置
101…逐次処理プログラム
102、104〜106…記憶装置
103…並列化プログラム
110…フォーク箇所決定部
120…フォーク箇所組合せ決定部
130…並列化プログラム出力部

Claims (28)

  1. 逐次処理プログラムを入力し、マルチスレッド型並列プロセッサ向けの並列化プログラムを出力するプログラム並列化装置において、
    前記入力した逐次処理プログラムを解析して、並列化の対象とする逐次処理プログラムおよびフォーク箇所の集合を決定するフォーク箇所決定部と、
    前記フォーク箇所決定部により決定されたフォーク箇所の集合に含まれるフォーク箇所の最適な組合せを決定するフォーク箇所組合せ決定部と、
    前記フォーク箇所組合せ決定部により決定されたフォーク箇所の最適な組合せに基づいて前記並列化の対象とする逐次処理プログラムからマルチスレッド型並列プロセッサ向けの並列化プログラムを生成する並列化プログラム出力部とを備え、
    前記フォーク箇所決定部は、前記入力した逐次処理プログラムの一部の命令列を他の命令列に変換した少なくとも1つの等価な逐次処理プログラムおよび前記入力した逐次処理プログラム毎にフォーク箇所の集合および並列実行性能の指標値を求め、並列実行性能の指標値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択するものであることを特徴とするプログラム並列化装置。
  2. 前記フォーク箇所決定部は、前記入力した逐次処理プログラムを記憶する記憶部と、前記入力した逐次処理プログラムの一部の命令列を等価な他の命令列に変換するプログラム変換部と、該変換されて生成された逐次処理プログラムを記憶する記憶部と、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎にフォーク箇所の集合を求めるフォーク箇所抽出部と、該抽出されたフォーク箇所の集合を記憶する記憶部と、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎に前記求められたフォーク箇所の集合の並列実行性能の指標値を求める算出部と、前記算出された並列実行性能の指標値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択する選択部とを有することを特徴とする請求項1記載のプログラム並列化装置。
  3. フォーク箇所のフォーク元ポイントからフォーク先ポイントまでの全命令の重みの合計値を当該フォーク箇所の静的ブースト値と定義するとき、前記並列実行性能の指標値として、フォーク箇所の集合に含まれる各フォーク箇所の静的ブースト値の合計値を用いることを特徴とする請求項1または2記載のプログラム並列化装置。
  4. 前記並列実行性能の指標値として、フォーク箇所の集合に含まれるフォーク箇所の総数を用いることを特徴とする請求項1または2記載のプログラム並列化装置。
  5. 前記プログラム変換部は、変数の生存区間が狭まるように逐次処理プログラムの命令の並べ替えを行うものであることを特徴とする請求項2記載のプログラム並列化装置。
  6. 前記プログラム変換部は、変数の割り当てられるレジスタができるだけ変わらないように逐次処理プログラムのレジスタ割当の変更を行うものであることを特徴とする請求項2記載のプログラム並列化装置。
  7. 前記並列化プログラム出力部は、前記フォーク箇所組合せ決定部により決定された最適な組合せ中のフォーク箇所のフォーク元ポイントおよびフォーク先ポイントをまたいだ命令の入れ替えは行わないという制限の下に、変数の生存区間が拡がるように命令の並べ替えを行う後処理部を含むことを特徴とする請求項5記載のプログラム並列化装置。
  8. 前記フォーク箇所決定部は、フォーク箇所のフォーク元ポイントからフォーク先ポイントまでの全命令の重みの合計値を当該フォーク箇所の静的ブースト値と定義するとき、前記選択されたフォーク箇所の集合に含まれる各フォーク箇所毎に前記静的ブースト値を求め、該求めた静的ブースト値が予め定められた静的足切り条件を満たすフォーク箇所を取り除く静的足切り部を含むことを特徴とする請求項1または2記載のプログラム並列化装置。
  9. 前記静的足切り条件は上限閾値を含み、前記静的足切り部は静的ブースト値が上限閾値より大きなフォーク箇所を取り除くことを特徴とする請求項8記載のプログラム並列化装置。
  10. 前記静的足切り条件は下限閾値を含み、前記静的足切り部は静的ブースト値が下限閾値より小さなフォーク箇所を取り除くことを特徴とする請求項8記載のプログラム並列化装置。
  11. 前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、そのうちの最小のものを当該フォーク箇所の最小実行サイクル数と定義するとき、前記フォーク箇所決定部により決定されたフォーク箇所の集合に含まれる各フォーク箇所毎に、前記最小実行サイクル数を求め、該求めた最小実行サイクル数が予め定められた動的足切り条件の上限閾値より大きいフォーク箇所を前記集合から取り除く動的足切り部を含むことを特徴とする請求項1または2記載のプログラム並列化装置。
  12. 前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、その合計値を当該フォーク箇所の動的ブースト値と定義するとき、前記フォーク箇所決定部により決定されたフォーク箇所の集合に含まれる各フォーク箇所毎に、前記動的ブースト値を求め、該求めた動的ブースト値が予め定められた動的足切り条件の下限閾値より小さなフォーク箇所を前記集合から取り除く動的足切り部を含むことを特徴とする請求項1または2記載のプログラム並列化装置。
  13. 前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、その合計値を当該フォーク箇所の動的ブースト値と定義し、或るフォーク箇所と同時に実行できない他のフォーク箇所の集合を当該フォーク箇所の排他フォーク集合と定義するとき、前記フォーク箇所決定部で決定された最適な逐次処理プログラムを或る入力データの下で実行したときの各フォーク箇所毎の動的ブースト値および排他フォーク集合を求める動的フォーク情報取得部と、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる組合せを生成する組合せ決定部とを含むことを特徴とする請求項1または2記載のプログラム並列化装置。
  14. 前記組合せ決定部は、フォーク箇所の集合に含まれる各フォーク箇所をノードとし、排他関係にあるフォーク箇所どうしをエッジで結んだグラフであって、各ノードにそのノードに対応するフォーク箇所の動的ブースト値を重みとして付与した重み付きグラフを生成する手段と、前記重み付きグラフの重み最大独立集合を求める手段と、求められた重み最大独立集合に含まれるノードに対応するフォーク箇所の集合を、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる組合せとして出力する手段とを含むことを特徴とする請求項13記載のプログラム並列化装置。
  15. 前記フォーク箇所組合せ決定部は、前記組合せ決定部が決定した組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する組合せ改善部を含むことを特徴とする請求項14記載のプログラム並列化装置。
  16. 前記フォーク箇所組合せ決定部は、前記フォーク箇所決定部が決定した逐次処理プログラムを或る入力データの下で実行したときの逐次実行トレース情報を複数の区間に分割し、各分割区間毎に、前記フォーク箇所決定部が決定したフォーク箇所の集合に含まれるフォーク箇所のうち当該分割区間において出現するフォーク箇所の集合からフォーク箇所の最適な組合せを求め、該求めた各分割区間でのフォーク箇所の最適な組合せを統合するものであることを特徴とする請求項1または2記載のプログラム並列化装置。
  17. 前記フォーク箇所組合せ決定部は、前記各分割区間毎にその分割区間において出現するフォーク箇所の集合からフォーク箇所の初期組合せを決定する初期組合せ決定部と、該初期組合せ決定部により前記各分割区間毎に決定された初期組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する組合せ改善部と、該組合せ改善部により前記各分割区間毎に決定されたフォーク箇所の最適な組合せを統合する統合部とを含むことを特徴とする請求項16記載のプログラム並列化装置。
  18. 前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、その合計値を当該フォーク箇所の動的ブースト値と定義し、或るフォーク箇所と同時に実行できない他のフォーク箇所の集合を当該フォーク箇所の排他フォーク集合と定義するとき、前記各分割区間毎に各フォーク箇所毎の動的ブースト値および排他フォーク集合を求める動的フォーク情報取得部と、前記各分割区間毎にその分割区間において出現するフォーク箇所の集合から、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる初期組合せを決定する初期組合せ決定部と、該初期組合せ決定部により前記各分割区間毎に決定された初期組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する組合せ改善部と、該組合せ改善部により前記各分割区間毎に決定されたフォーク箇所の最適な組合せを統合する統合部とを含むことを特徴とする請求項16記載のプログラム並列化装置。
  19. 前記フォーク箇所組合せ決定部は、逐次処理プログラムを或る入力データの下で実行した場合に或るフォーク箇所がn回出現し、各回におけるフォーク元ポイントからフォーク先ポイントまでの実行サイクル数がC1、C2、…、CNであった場合、そのうちの最小のものを当該フォーク箇所の最小実行サイクル数と定義し、その合計値を当該フォーク箇所の動的ブースト値と定義し、或るフォーク箇所と同時に実行できない他のフォーク箇所の集合を当該フォーク箇所の排他フォーク集合と定義するとき、前記各分割区間毎に各フォーク箇所毎の最小実行サイクル数、動的ブースト値および排他フォーク集合を求める動的フォーク情報取得部と、前記フォーク箇所決定部により決定されたフォーク箇所の集合から、前記各分割区間毎に前記最小実行サイクル数および前記動的ブースト値が予め定められた足切り条件を満たすフォーク箇所を取り除いた集合を決定する動的足切り部と、前記動的足切り部により前記各分割区間毎に求められたフォーク箇所の集合から、排他関係のないフォーク箇所の組合せであって、動的ブースト値の合計が最大になる初期組合せを決定する初期組合せ決定部と、該初期組合せ決定部により前記各分割区間毎に決定された初期組合せを初期解として、反復改善法によって、並列実行性能のよりよい組合せを探索する組合せ改善部と、該組合せ改善部により前記各分割区間毎に決定されたフォーク箇所の最適な組合せを統合する統合部とを含むことを特徴とする請求項16記載のプログラム並列化装置。
  20. a)フォーク箇所決定部が、逐次処理プログラムを入力して解析し、並列化の対象とする逐次処理プログラムおよびフォーク箇所の集合を決定するステップ、
    b)フォーク箇所組合せ決定部が、前記フォーク箇所決定部により決定されたフォーク箇所の集合に含まれるフォーク箇所の最適な組合せを決定するステップ、
    c)並列化プログラム出力部が、前記フォーク箇所組合せ決定部により決定されたフォーク箇所の最適な組合せに基づいて前記並列化の対象とする逐次処理プログラムからマルチスレッド型並列プロセッサ向けの並列化プログラムを生成するステップ、
    を含み、かつ、前記ステップaは、前記入力した逐次処理プログラムの一部の命令列を他の命令列に変換した少なくとも1つの等価な逐次処理プログラムおよび前記入力した逐次処理プログラム毎にフォーク箇所の集合および並列実行性能の指標値を求め、並列実行性能の指標値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択することを特徴とするプログラム並列化方法。
  21. 前記ステップaは、
    a−1)前記入力した逐次処理プログラムを記憶部に記憶するステップ、
    a−2)プログラム変換部が、前記入力した逐次処理プログラムの一部の命令列を等価な他の命令列に変換するステップ、
    a−3)前記変換されて生成された逐次処理プログラムを記憶部に記憶するステップ、
    a−4)フォーク箇所抽出部が、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎にフォーク箇所の集合を求めるステップ、
    a−5)前記抽出されたフォーク箇所の集合を記憶部に記憶するステップ、
    a−6)算出部が、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎に前記求められたフォーク箇所の集合の並列実行性能の指標値を求めるステップ、
    a−7)選択部が、前記算出された並列実行性能の指標値が最も優れているフォーク箇所の集合および逐次処理プログラムを選択するステップ、
    を含むことを特徴とする請求項20記載のプログラム並列化方法。
  22. フォーク箇所のフォーク元ポイントからフォーク先ポイントまでの全命令の重みの合計値を当該フォーク箇所の静的ブースト値と定義するとき、前記並列実行性能の指標値として、フォーク箇所の集合に含まれる各フォーク箇所の静的ブースト値の合計値を用いることを特徴とする請求項20または21記載のプログラム並列化方法。
  23. 前記並列実行性能の指標値として、フォーク箇所の集合に含まれるフォーク箇所の総数を用いることを特徴とする請求項20または21記載のプログラム並列化方法。
  24. 前記プログラム変換部は、変数の生存区間が狭まるように逐次処理プログラムの命令の並べ替えを行うことを特徴とする請求項21記載のプログラム並列化方法。
  25. 前記プログラム変換部は、変数の割り当てられるレジスタができるだけ変わらないように逐次処理プログラムのレジスタ割当の変更を行うものであることを特徴とする請求項21記載のプログラム並列化方法。
  26. 前記並列化プログラム出力部は、前記フォーク箇所組合せ決定部により決定された最適な組合せ中のフォーク箇所のフォーク元ポイントおよびフォーク先ポイントをまたいだ命令の入れ替えは行わないという制限の下に、変数の生存区間が拡がるように命令の並べ替えを行うことを特徴とする請求項24記載のプログラム並列化方法。
  27. 逐次処理プログラムを入力し、マルチスレッド型並列プロセッサ向けの並列化プログラムを出力するプログラム並列化装置を構成するコンピュータを、
    前記入力した逐次処理プログラムの一部の命令列を他の命令列に変換した少なくとも1つの等価な逐次処理プログラムおよび前記入力した逐次処理プログラム毎にフォーク箇所の集合および並列実行性能の指標値を求め、並列実行性能の指標値が最も優れているフォーク箇所の集合を選択すると共に、そのフォーク箇所の集合を抽出した逐次処理プログラムを並列化の対象とするフォーク箇所決定手段、
    前記フォーク箇所決定手段により決定されたフォーク箇所の集合に含まれるフォーク箇所の最適な組合せを決定するフォーク箇所組合せ決定手段、
    前記フォーク箇所組合せ決定手段により決定されたフォーク箇所の最適な組合せに基づいて前記並列化の対象とする逐次処理プログラムからマルチスレッド型並列プロセッサ向けの並列化プログラムを生成する並列化プログラム出力手段、
    として機能させることを特徴とするプログラム。
  28. 前記フォーク箇所決定手段は、前記入力した逐次処理プログラムを記憶部から読み出してその一部の命令列を等価な他の命令列に変換し、記憶部に書き出すプログラム変換手段と、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラムを記憶部から読み出して、それぞれ毎にフォーク箇所の集合を求め、記憶部に書き出すフォーク箇所抽出手段と、前記入力した逐次処理プログラムおよび前記プログラム変換部によって生成された少なくとも1つの変換後の逐次処理プログラム毎に前記求められたフォーク箇所の集合を記憶部から読み出して、それぞれ毎に並列実行性能の指標値を求め、記憶部に書き出す算出手段と、前記算出された並列実行性能の指標値を記憶部から読み出して比較し、最も優れているフォーク箇所の集合および逐次処理プログラムを選択する選択手段とを有することを特徴とする請求項27記載のプログラム。
JP2004194051A 2004-06-30 2004-06-30 プログラム並列化装置及びその方法並びにプログラム Expired - Fee Related JP3901180B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2004194051A JP3901180B2 (ja) 2004-06-30 2004-06-30 プログラム並列化装置及びその方法並びにプログラム
US11/169,113 US20060005179A1 (en) 2004-06-30 2005-06-29 Program parallelizing apparatus, program parallelizing method, and program parallelizing program
GB0513301A GB2415811A (en) 2004-06-30 2005-06-29 Compiler for producing an optimised parallel program using execution performance index values

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004194051A JP3901180B2 (ja) 2004-06-30 2004-06-30 プログラム並列化装置及びその方法並びにプログラム

Publications (2)

Publication Number Publication Date
JP2006018445A JP2006018445A (ja) 2006-01-19
JP3901180B2 true JP3901180B2 (ja) 2007-04-04

Family

ID=34858550

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004194051A Expired - Fee Related JP3901180B2 (ja) 2004-06-30 2004-06-30 プログラム並列化装置及びその方法並びにプログラム

Country Status (3)

Country Link
US (1) US20060005179A1 (ja)
JP (1) JP3901180B2 (ja)
GB (1) GB2415811A (ja)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7590977B2 (en) * 2005-10-13 2009-09-15 International Business Machines Corporation Method and system for reducing memory reference overhead associated with threadprivate variables in parallel programs
GB2443277B (en) * 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
JP4957729B2 (ja) * 2007-01-25 2012-06-20 日本電気株式会社 プログラム並列化方法、プログラム並列化装置及びプログラム
JP2008305337A (ja) * 2007-06-11 2008-12-18 Panasonic Corp プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP2009129179A (ja) * 2007-11-22 2009-06-11 Toshiba Corp プログラム並列化支援装置およびプログラム並列化支援方法
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) * 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8495342B2 (en) * 2008-12-16 2013-07-23 International Business Machines Corporation Configuring plural cores to perform an instruction having a multi-core characteristic
GB0911099D0 (en) 2009-06-26 2009-08-12 Codeplay Software Ltd Processing method
US9141359B2 (en) * 2010-12-13 2015-09-22 Hewlett-Packard Development Company, L.P. Procedural concurrency graph generator
US8813054B2 (en) 2010-12-13 2014-08-19 Hewlett-Packard Development Company, L. P. Sequential-code optimization of parallel code based on identifying siloed program references
US9003383B2 (en) * 2011-09-15 2015-04-07 You Know Solutions, LLC Analytic engine to parallelize serial code
US9417855B2 (en) 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
JP6021342B2 (ja) * 2012-02-09 2016-11-09 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 並列化方法、システム、及びプログラム
US8789022B2 (en) 2012-03-31 2014-07-22 Bmc Software, Inc. Self-evolving computing service template translation
US8893080B2 (en) * 2012-08-15 2014-11-18 Telefonaktiebolaget L M Ericsson (Publ) Parallelization of dataflow actors with local state
US8954546B2 (en) 2013-01-25 2015-02-10 Concurix Corporation Tracing with a workload distributor
US8924941B2 (en) 2013-02-12 2014-12-30 Concurix Corporation Optimization analysis using similar frequencies
US20130283281A1 (en) 2013-02-12 2013-10-24 Concurix Corporation Deploying Trace Objectives using Cost Analyses
US8997063B2 (en) 2013-02-12 2015-03-31 Concurix Corporation Periodicity optimization in an automated tracing system
US9880842B2 (en) 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
US20130219372A1 (en) 2013-03-15 2013-08-22 Concurix Corporation Runtime Settings Derived from Relationships Identified in Tracer Data
US9575874B2 (en) 2013-04-20 2017-02-21 Microsoft Technology Licensing, Llc Error list and bug report analysis for configuring an application tracer
US9292415B2 (en) 2013-09-04 2016-03-22 Microsoft Technology Licensing, Llc Module specific tracing in a shared module environment
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
CN105765528B (zh) 2013-11-13 2019-09-24 微软技术许可有限责任公司 具有可配置原点定义的应用执行路径跟踪的方法、系统和介质
US9996354B2 (en) * 2015-01-09 2018-06-12 International Business Machines Corporation Instruction stream tracing of multi-threaded processors
CN110347400B (zh) * 2019-06-13 2023-03-14 西安科技大学 编译加速方法、路由单元和缓存
CN110795903B (zh) * 2019-09-12 2023-08-15 中科寒武纪科技股份有限公司 指令处理方法、装置及相关产品
CN113031522B (zh) * 2019-12-25 2022-05-31 沈阳高精数控智能技术股份有限公司 适用于开放式数控系统周期性依赖任务的低功耗调度方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5412799A (en) * 1990-02-27 1995-05-02 Massachusetts Institute Of Technology Efficient data processor instrumentation for systematic program debugging and development
JP2818016B2 (ja) * 1990-08-09 1998-10-30 株式会社日立製作所 プロセス並列実行方法および装置
US5812133A (en) * 1995-11-01 1998-09-22 Allen Bradley Company, Llc Industrial controller with display of rung execution
JP2882475B2 (ja) * 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
JP3641997B2 (ja) * 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体
JP2002116915A (ja) * 2000-10-10 2002-04-19 Fujitsu Ltd コンパイラ並列化スケジュール方法
JP3702813B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
JP3702814B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
JP4042604B2 (ja) * 2003-03-31 2008-02-06 日本電気株式会社 プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム

Also Published As

Publication number Publication date
US20060005179A1 (en) 2006-01-05
GB2415811A (en) 2006-01-04
JP2006018445A (ja) 2006-01-19
GB0513301D0 (en) 2005-08-03

Similar Documents

Publication Publication Date Title
JP3901180B2 (ja) プログラム並列化装置及びその方法並びにプログラム
JP3901181B2 (ja) プログラム並列化装置及びその方法並びにプログラム
JP3901182B2 (ja) プログラム並列化装置及びその方法並びにプログラム
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JP4957729B2 (ja) プログラム並列化方法、プログラム並列化装置及びプログラム
US6539541B1 (en) Method of constructing and unrolling speculatively counted loops
JP3220055B2 (ja) 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。
JP3311462B2 (ja) コンパイル処理装置
US20110119660A1 (en) Program conversion apparatus and program conversion method
US10430191B2 (en) Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption
JPH0883185A (ja) コンパイラ
KR101962250B1 (ko) 재구성가능 아키텍처를 위한 스케줄러 및 스케줄링 방법
JPH04213118A (ja) プログラム翻訳装置およびプログラム翻訳方法
JP6488739B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
JP4293223B2 (ja) プログラム並列化装置及びその方法並びにプログラム
CN108027736B (zh) 使用通过对物理寄存器预分配的乱序重命名的运行时代码并行化
JP2012014526A (ja) プログラムコードの構造変換装置、並びにコード構造変換プログラム
JP6488738B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
US6637026B1 (en) Instruction reducing predicate copy
JP2022140995A (ja) 情報処理装置、コンパイルプログラムおよびコンパイル方法
JP6933001B2 (ja) 並列化方法、並列化ツール
KR100970758B1 (ko) 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치 및 그 코드 생성 방법
Ying Scaling sequential code with hardware-software co-design for fine-grain speculative parallelization
Waduge Taming Irregular Control-Flow with Targeted Compiler Transformations
JP3634712B2 (ja) コンパイラ装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060822

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061016

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20061212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20061225

R150 Certificate of patent or registration of utility model

Ref document number: 3901180

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110112

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110112

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120112

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130112

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130112

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees