JP2004302706A - プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム - Google Patents
プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム Download PDFInfo
- Publication number
- JP2004302706A JP2004302706A JP2003093076A JP2003093076A JP2004302706A JP 2004302706 A JP2004302706 A JP 2004302706A JP 2003093076 A JP2003093076 A JP 2003093076A JP 2003093076 A JP2003093076 A JP 2003093076A JP 2004302706 A JP2004302706 A JP 2004302706A
- Authority
- JP
- Japan
- Prior art keywords
- fork location
- fork
- candidate
- best combination
- candidates
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
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)
Abstract
【解決手段】制御・データフロー解析部21は、逐次処理プログラム13の制御フローおよびデータフローの解析を行い、それを参照してフォーク箇所候補決定部22がフォーク箇所候補を決定する。フォーク箇所候補最良組合せ決定部23は、並列実行性能評価部24によってフォーク箇所候補の試行組合せの並列実行性能を評価した結果を基準にフォーク箇所候補の最良組合せを決定し、並列化プログラム出力部25はフォーク箇所候補の最良組合せに基づいてフォーク命令を挿入して並列化プログラム14を生成し出力する。
【選択図】図1
Description
【発明の属する技術分野】
本発明は、複数のスレッドを複数のプロセッサにより並列に実行するマルチスレッド型プロセッサのためのプログラム変換技術に関し、特に実行効率の高い並列化プログラムを高速に生成するためのプログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム(コンパイラ)に関する。
【0002】
【従来の技術】
単一の逐次処理プログラムを並列プロセッサシステムで並列に処理する手法として、プログラムをスレッドと呼ぶ命令流に分割して複数のプロセッサで並列に実行するマルチスレッド実行方法がある(例えば、特許文献1〜3,非特許文献1参照)。以下、これらの従来のマルチスレッド実行方法について説明する。
【0003】
一般に、マルチスレッド実行方法において、他のプロセッサ上に新たなスレッドを生成することを、スレッドをフォーク(fork)するといい、フォーク動作を行った側のスレッドを親スレッド、生成された新しいスレッドを子スレッド、スレッドをフォークするプログラム位置をフォーク点、子スレッドの先頭のプログラム位置をフォーク先アドレスまたは子スレッドの開始点と呼ぶ。特許文献1〜3および非特許文献1では、スレッドのフォークを指示するためにフォーク点にフォーク命令が挿入される。フォーク命令にはフォーク先アドレスが指定され、フォーク命令の実行によりそのフォーク先アドレスから始まる子スレッドが他プロセッサ上に生成され、子スレッドの実行が開始される。また、スレッドの処理を終了させるプログラム位置をターム点と呼び、各プロセッサはスレッドの処理を終了する。
【0004】
図15は、マルチスレッド実行方法の処理の概要を示す図である。同図(a)は、3つのスレッドA,B,Cに分割された逐次処理プログラムを示す。このプログラムを単一のプロセッサで処理する場合、同図(b)に示すように1つのプロセッサPEがスレッドA,B,Cを順番に処理していく。これに対して、特許文献1〜3および非特許文献1のマルチスレッド実行方法では、同図(c)に示すように、1つのプロセッサPE1にスレッドAを実行させ、プロセッサPE1でスレッドAを実行している最中に、スレッドAに埋め込まれたフォーク命令によってスレッドBを他のプロセッサPE2に生成し、プロセッサPE2においてスレッドBを実行させる。また、プロセッサPE2は、スレッドBに埋め込まれたフォーク命令によってスレッドCをプロセッサPE3に生成する。プロセッサPE1,PE2は、それぞれスレッドB,Cの開始点の直前のターム点においてスレッドの処理を終了し、プロセッサPE3は、スレッドCの最後の命令を実行すると、その次の命令(一般にはシステムコール命令)を実行する。このように、複数のプロセッサでスレッドを同時に並行して実行することにより、逐次処理に比べて性能の向上が図られる。
【0005】
他のマルチスレッド実行方法として、図15(d)に示すように、スレッドAを実行しているプロセッサPE1からフォークを複数回行うことにより、プロセッサPE2にスレッドBを、またプロセッサPE3にスレッドCをそれぞれ生成するマルチスレッド実行方法も存在する。図15(d)のモデルに対して、同図(c)に示したように、スレッドはその生存中に高々1回に限って有効な子スレッドを生成することができるという制約を課したマルチスレッド実行方法を、フォーク1回モデルと呼ぶ。フォーク1回モデルでは、スレッド管理の大幅な簡略化が可能となり、現実的なハードウェア規模でスレッド管理部のハードウェア化が実現できる。また、個々のプロセッサは子スレッドを生成する他プロセッサが1プロセッサに限定されるため、隣接するプロセッサを単方向にリング状に接続した並列プロセッサシステムでマルチスレッド実行が可能となる。
【0006】
親スレッドが子スレッドを生成し、子スレッドに所定の処理を行わせるには、親スレッドのフォーク点におけるレジスタファイル中のレジスタのうち少なくとも子スレッドで必要なレジスタの値を親スレッドから子スレッドに引き渡す必要がある。このスレッド間のデータ引き渡しコストを削減するために、非特許文献1および特許文献2では、スレッド生成時のレジスタ値継承機構をハードウェア的に備えている。これは、スレッド生成時に親スレッドのレジスタファイルの内容を子スレッドに全てコピーするものである。子スレッドの生成後は、親スレッドと子スレッドとのレジスタ値の変更は独立となり、レジスタを用いたスレッド間のデータの引き渡しは行われない。スレッド間のデータ引き渡しに関する他の従来技術としては、レジスタの値を命令によりレジスタ単位で個別に転送する機構を備えた並列プロセッサシステムも提案されている。
【0007】
マルチスレッド実行方法では、実行の確定した先行スレッドを並列に実行することを基本とするが、実際のプログラムでは実行の確定するスレッドが充分に得られない場合も多い。また、動的に決定される依存やコンパイラ解析能力の限界等により並列化率が低く抑えられ、所望の性能が得られない可能性が生じる。このため、特許文献1では、制御投機を導入し、ハードウェア的にスレッドの投機実行をサポートしている。制御投機では、実行する可能性の高いスレッドを実行確定前に投機的に実行する。投機状態のスレッドは、実行の取り消しがハードウェア上可能である範囲内で仮実行を行う。子スレッドが仮実行を行っている状態を仮実行状態といい、子スレッドが仮実行状態にあるとき親スレッドはスレッド仮生成状態にあるという。仮実行状態の子スレッドでは共有メモリおよびキャッシュメモリへの書き込みは抑制され、別途設けた仮実行用バッファ(temporary
buffer)に対して書き込みが行われる。投機が正しいことが確定すると、親スレッドから子スレッドに対して投機成功通知が出され、子スレッドは仮実行用バッファの内容を共有メモリおよびキャッシュメモリに反映し、仮実行用バッファを用いない通常の状態となる。また、親スレッドは、スレッド仮生成状態からスレッド生成状態となる。他方、投機が失敗したことが確定すると、親スレッドでスレッド破棄命令(abort)が実行され、子スレッド以下の実行がキャンセルされる。また、親スレッドは、スレッド仮生成状態からスレッド未生成状態となり、再び子スレッドの生成が可能になる。つまり、フォーク1回モデルでは、スレッド生成は高々1回に限定されるが、制御投機を行い、投機が失敗した場合には再びフォークが可能となる。この場合においても、有効な子スレッドは高々1つである。
【0008】
スレッドはその生存中に高々1回に限って有効な子スレッドを生成するというフォーク1回モデルのマルチスレッド実行を実現するために、例えば非特許文献1等では、逐次処理プログラムから並列化プログラムを生成するコンパイルの段階で、全てのスレッドが有効なフォークを1回しか実行しない命令コードになるように制限している。すなわち、フォーク1回制限を並列化プログラム上において静的に保証している。
【0009】
一方、特許文献3では、親スレッド中に存在する複数のフォーク命令のうちから有効な子スレッドを生成する1つのフォーク命令を親スレッドの実行中に選択することにより、フォーク1回制限をプログラム実行時に保証している。
【0010】
次に、上述したマルチスレッド実行方法で実行される従来の並列化プログラム生成装置について説明する。
【0011】
図16を参照すると、従来のプログラム並列化装置10は、逐次処理プログラム13を入力し、制御・データフロー解析部11によって逐次処理プログラム13の制御フローおよびデータフローを解析し、次いでその結果に基づき、フォーク挿入部12において、基本ブロックあるいは複数の基本ブロックを並列化の単位、すなわちスレッドに分割し、次いで並列化のためのフォーク命令を挿入して、複数のスレッドに分割された並列化プログラム14を生成し出力する。
【0012】
フォーク命令の挿入箇所(フォーク箇所)は、制御フローおよびデータフローの解析結果を参照して、より並列実行性能が得られるように決定される。しかし、プログラム実行時にしか判明しないプログラム実行フローやメモリ依存関係などの影響により、静的な解析に基づいたフォーク命令の挿入方法では所望の並列実行性能を得られない場合がある。
【0013】
これに対し、逐次実行を行ったときの条件分岐確率やデータ依存発生頻度などのプロファイル情報を参照して、フォーク箇所を決定する方法が公知である(例えば、特許文献4参照)。この方法によれば、逐次実行時の動的な情報であるプロファイル情報を利用することで、より適切なフォーク命令の挿入が可能となり、並列実行性能の向上が期待できる。
【0014】
【特許文献1】
特開10―27108号公報(第5頁、図1)
【非特許文献1】
「On Chip Multiprocessor指向 制御並列アーキテクチャMUSCATの提案」(並列処理シンポジュウムJSPP97論文集、情報処理学会、pp.229−236、May 1997)
【特許文献2】
特開10―78880号公報(第7頁、図2)
【特許文献3】
特開2003−029985号公報(第13頁、図10)
【特許文献4】
特開2001−282549号公報(第11−12頁、図2)
【0015】
【発明が解決しようとする課題】
ところで、上記した従来の技術は、下記の問題点を有している。
【0016】
第1の問題点は、フォーク箇所を決定する基準にまだ多分に改良の余地があるため、従来の技術をもってしても、所望の並列実行性能を得られない場合があることである。その理由は、フォーク箇所を決定する基準は、望ましくはそのフォーク命令の並列実行性能への寄与度であるが、たとえ逐次実行時のプロファイル情報を利用したとしても、並列実行時の性能を解析的な方法で精度良く予測することは困難であるため、適切にフォーク命令を挿入できない場合があるからである。
【0017】
並列実行性能を解析的に高精度に予測することを困難にしている要因の一つに、並列実行性能に対するメモリ依存関係の影響がある。並列実行性能に対するメモリ依存関係の影響は、並列化の仕方に応じて複雑に変化するため、逐次実行時のプロファイル情報からメモリ依存関係の情報を得たとしても、その並列実行性能への影響を精度良く評価することは困難である。また、フォーク1回モデルなどの並列化方法上の制約や、プロセッサ間接続方式などのハードウェア構成等も並列実行性能に大きな影響を与える。しかし、同様に、これらの並列実行性能への影響は、並列化の仕方に応じて複雑に変化するため、逐次実行時のプロファイル情報から解析的な方法により精度良く評価することは困難である。
【0018】
すなわち、制御フローおよびデータフローの解析結果や逐次実行時に得られるプロファイル情報からでは、並列実行性能を精度良く予測することは困難であるため、適切にフォーク命令を挿入できず、所望の並列実行性能を得られない場合があるという問題がある。
【0019】
第2の問題点は、より良い並列実行性能のフォーク箇所を得ようとするにつれて、そのフォーク箇所の決定処理にますます時間がかかるということである。その理由は、フォーク箇所を決定する評価基準を高精度化するにつれて、その評価処理にますます時間がかかるのに加えて、フォーク箇所の数は、通常、例えばプログラムに含まれるループ数などと比較しても多く、従ってその組合せの数は膨大になるからである。
【0020】
本発明は、このような事情に鑑みて提案されたものであり、その目的は、フォーク箇所候補最良組合せ決定処理を高精度かつ高速に行い、並列実行性能のより高い並列化プログラムを高速に生成するプログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラムを提供することにある。
【0021】
【課題を解決するための手段】
前記目的を達成するため、本発明のプログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラムは、入力される逐次処理プログラムの制御フローおよびデータフローの解析結果や逐次実行時に得られるプロファイル情報に加えて、並列実行性能を直接評価した結果を基準に、フォーク箇所候補の最良組合せを決定することを特徴とする。
【0022】
具体的には、第1の発明は、逐次処理プログラムの制御フローおよびデータフローの解析を行う制御・データフロー解析部と、前記制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定するフォーク箇所候補決定部と、与えられたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する並列実行性能評価部と、前記フォーク箇所候補決定部により決定されたフォーク箇所候補の試行組合せを生成し、これを前記並列実行性能評価部に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部と、前記フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する並列化プログラム出力部とを有することを特徴とするプログラム並列化装置である。
【0023】
また、第2の発明は、逐次処理プログラムの制御フローおよびデータフローの解析を行う制御・データフロー解析部と、前記制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定するフォーク箇所候補決定部と、与えられたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する並列実行性能評価部と、前記フォーク箇所候補決定部により決定されたフォーク箇所候補からフォーク1回モデル上で互いに同時に実行可能なフォーク箇所候補の組合せのみからなる試行組合せを生成し、これを前記並列実行性能評価部に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部と、前記フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する並列化プログラム出力部とを有することを特徴とするプログラム並列化装置である。
【0024】
さらに、第3の発明は、前記並列実行性能評価部が、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成し、逐次実行トレースをすべてのターム点候補を分割点として分割し、各スレッド要素毎のスレッド要素情報を解析し、与えられたフォーク箇所候補の試行組合せに対して並列実行をスレッド要素の単位でシミュレートして並列実行性能を算出することを特徴とするプログラム並列化装置である。
【0025】
さらにまた、第4の発明は、前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部により決定されたフォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序に従ってその時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくことを特徴とするプログラム並列化装置である。
【0026】
また、第5の発明は、前記フォーク箇所候補最良組合せ決定部が、求められたフォーク箇所候補の順序で上位から一定数を含むフォーク箇所候補の組合せを初期組合せとし、その初期組合せの並列実行性能を前記並列実行性能評価部によって評価し、初期組合せをこの時点でのフォーク箇所候補の最良組合せとすることを特徴とするプログラム並列化装置である。
【0027】
さらに、第6の発明は、前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部により決定された全フォーク箇所候補の集合を互いになるべく影響を及ぼし合わないようにフォーク箇所候補のグループに分割し、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補の試行組合せを生成し、それによる並列実行性能を前記並列実行性能評価部によって評価した結果を参照してフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定処理を行い、各グループ毎の処理結果であるフォーク箇所候補の最良組合せの和を全体の処理結果として決定することを特徴とするプログラム並列化装置である。
【0028】
さらにまた、第7の発明は、前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部の処理が終了すると、前記フォーク箇所候補決定部により決定された全フォーク箇所候補を集合としてフォーク箇所候補のグループ分割処理を呼び出し、フォーク箇所候補のグループ分割処理が呼び出されると、与えられたフォーク箇所候補の集合に属するフォーク箇所候補の数が指定された分割下限数より大きければ、集合のグループ分割処理を開始し、小さければ、グループ分割処理を行わずにフォーク箇所候補のグループ分割処理を呼び出した元にリターンし、自身をキャンセルするフォーク箇所候補の数が指定数より大きいフォーク箇所候補の集合を集合から分割して新たにグループを生成し、集合をさらに2つのグループにグループ分割し、一方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して一方のグループのグループ分割を行い、他方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して他方のグループのグループ分割を行い、フォーク箇所候補のグループ分割処理を呼び出した元にリターンし、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補最良組合せ決定処理を行い、全グループの処理が完了したかどうかを判定し、未処理のグループがあるならば、未処理のグループに対するフォーク箇所候補最良組合せ決定処理を繰り返し、全グループの処理が完了した場合は、各グループ毎の処理結果であるフォーク箇所候補の組合せの和を全体の結果として出力することを特徴とするプログラム並列化装置である。
【0029】
また、第8の発明は、逐次処理プログラムを複数のスレッドに分割し複数のプロセッサで並列に実行するマルチスレッド実行方法のためのプログラム並列化方法において、逐次処理プログラムの制御フローおよびデータフローの解析を行う工程と、制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定する工程と、決定されたフォーク箇所候補からフォーク箇所候補の試行組合せを生成する工程と、生成されたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する工程と、評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定する工程と、決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する工程とを含むことを特徴とするプログラム並列化方法である。
【0030】
さらに、第9の発明は、逐次処理プログラムを複数のスレッドに分割し複数のプロセッサで並列に実行するマルチスレッド実行方法のためのプログラム並列化方法において、逐次処理プログラムの制御フローおよびデータフローの解析を行う工程と、制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定する工程と、決定されたフォーク箇所候補からフォーク1回モデル上で互いに同時に実行可能なフォーク箇所候補のみからなる試行組合せを生成する工程と、生成されたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する工程と、評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定する工程と、決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する工程とを含むことを特徴とするプログラム並列化方法である。
【0031】
さらにまた、第10の発明は、制御・データフロー解析部が、逐次処理プログラムの制御フローおよびデータフローを解析する工程と、フォーク箇所候補決定部が、制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照してフォーク箇所候補を生成する工程と、フォーク箇所候補最良組合せ決定部が、すべてのフォーク箇所候補のそれぞれの並列実行性能に対する効果を予測し、その効果順にフォーク箇所候補に順序を付ける工程と、フォーク箇所候補最良組合せ決定部が、最初に並列実行性能を評価するフォーク箇所候補の初期組合せを生成し、それをフォーク箇所候補の最良組合せとする工程と、並列実行性能評価部が、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成する工程と、並列実行性能評価部が、逐次実行トレースをすべてのターム点候補を分割点として分割する工程と、並列実行性能評価部が、各スレッド要素毎のスレッド要素情報を解析し、それらを各スレッド要素毎に記憶する工程と、フォーク箇所候補最良組合せ決定部が、未だ未選択のフォーク箇所候補の中で順序が一番上位のフォーク箇所候補を1つ選択する工程と、フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれているか否かを判定する工程と、フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていなければ、選択されたフォーク箇所候補をフォーク箇所候補の最良組合せに加え、そのフォーク箇所候補の組合せを試行組合せとする工程と、フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていれば、フォーク箇所候補の最良組合せから選択されたフォーク箇所候補を取り除き、そのフォーク箇所候補の組合せを試行組合せとする工程と、フォーク箇所候補最良組合せ決定部が、試行組合せによる並列化の並列実行性能を並列実行性能評価部によって評価する工程と、フォーク箇所候補最良組合せ決定部が、試行組合せの並列実行性能と最良組合せの並列実行性能とを比較する工程と、フォーク箇所候補最良組合せ決定部が、試行組合せの並列実行性能の方が良ければ、試行組合せを現時点でのフォーク箇所候補の最良組合せとする工程と、フォーク箇所候補最良組合せ決定部が、未選択のフォーク箇所候補があるかどうかを判定し、未選択のフォーク箇所候補があれば繰り返し実行する工程と、フォーク箇所候補最良組合せ決定部が、未選択のフォーク箇所候補がなければ、直前の繰り返し実行において、新たにフォーク箇所候補の最良組合せが見つかったかどうかを判定する工程と、フォーク箇所候補最良組合せ決定部が、新たにフォーク箇所候補の最良組合せが見つかった場合には、すべてのフォーク箇所候補を未選択の状態にして繰り返し実行する工程と、フォーク箇所候補最良組合せ決定部が、新たにフォーク箇所候補の最良組合せが見つからなかった場合には、決定されたフォーク箇所候補の最良組合せをフォーク箇所候補最良組合せ決定処理の結果として出力する工程と、並列化プログラム出力部が、フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する工程とを含むことを特徴とするプログラム並列化方法である。
【0032】
また、第11の発明は、制御・データフロー解析部が、逐次処理プログラムの制御フローおよびデータフローを解析する工程と、フォーク箇所候補決定部が、制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照してフォーク箇所候補を生成する工程と、フォーク箇所候補最良組合せ決定部が、すべてのフォーク箇所候補のそれぞれの並列実行性能に対する効果を予測し、その効果順にフォーク箇所候補に順序を付ける工程と、フォーク箇所候補最良組合せ決定部が、最初に並列実行性能を評価するフォーク箇所候補の初期組合せを生成し、それをフォーク箇所候補の最良組合せとする工程と、並列実行性能評価部が、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成する工程と、並列実行性能評価部が、逐次実行トレースをすべてのターム点候補を分割点として分割する工程と、並列実行性能評価部が、各スレッド要素毎のスレッド要素情報を解析し、それらを各スレッド要素毎に記憶する工程と、フォーク箇所候補最良組合せ決定部が、未だ未選択のフォーク箇所候補の中で順序が一番上位のフォーク箇所候補を1つ選択する工程と、フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれているか否かを判定する工程と、フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていなければ、選択されたフォーク箇所候補をフォーク箇所候補の最良組合せに加え、そのフォーク箇所候補の組合せを試行組合せとする工程と、フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補をキャンセルするフォーク箇所候補を試行組合せから取り除く工程と、フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていれば、フォーク箇所候補の最良組合せから選択されたフォーク箇所候補を取り除き、そのフォーク箇所候補の組合せを試行組合せとする工程と、フォーク箇所候補最良組合せ決定部が、試行組合せによる並列化の並列実行性能を並列実行性能評価部によって評価する工程と、フォーク箇所候補最良組合せ決定部が、試行組合せの並列実行性能と最良組合せの並列実行性能とを比較する工程と、フォーク箇所候補最良組合せ決定部が、試行組合せの並列実行性能の方が良ければ、選択されたフォーク箇所候補がキャンセルするフォーク箇所候補を試行組合せから取り除く工程と、フォーク箇所候補最良組合せ決定部が、試行組合せを現時点でのフォーク箇所候補の最良組合せとする工程と、フォーク箇所候補最良組合せ決定部が、未選択のフォーク箇所候補があるかどうかを判定し、未選択のフォーク箇所候補があれば繰り返し実行する工程と、フォーク箇所候補最良組合せ決定部が、未選択のフォーク箇所候補がなければ、直前の繰り返し実行において、新たにフォーク箇所候補の最良組合せが見つかったかどうかを判定する工程と、フォーク箇所候補最良組合せ決定部が、新たにフォーク箇所候補の最良組合せが見つかった場合には、すべてのフォーク箇所候補を未選択の状態にして繰り返し実行する工程と、フォーク箇所候補最良組合せ決定部が、新たにフォーク箇所候補の最良組合せが見つからなかった場合には、決定されたフォーク箇所候補の最良組合せをフォーク箇所候補最良組合せ決定処理の結果として並列化プログラム出力部に出力する工程と、並列化プログラム出力部が、フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する工程とを含むことを特徴とするプログラム並列化方法である。
【0033】
さらに、第12の発明は、前記並列実行性能を評価する工程で、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成し、逐次実行トレースをすべてのターム点候補を分割点として分割し、各スレッド要素毎のスレッド要素情報を解析し、与えられたフォーク箇所候補の試行組合せに対して並列実行をスレッド要素の単位でシミュレートして並列実行性能を算出することを特徴とするプログラム並列化方法である。
【0034】
さらにまた、第13の発明は、前記フォーク箇所候補の最良組合せを決定する工程で、前記フォーク箇所候補決定部により決定されたフォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序に従ってその時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくことを特徴とするプログラム並列化方法である。
【0035】
また、第14の発明は、前記フォーク箇所候補の最良組合せを決定する工程で、全フォーク箇所候補の集合を互いになるべく影響を及ぼし合わないようにフォーク箇所候補のグループに分割し、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補の試行組合せを生成し、それによる並列実行性能をある入力データに対して評価した結果を参照してフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定処理を行い、各グループ毎の処理結果であるフォーク箇所候補の最良組合せの和を全体の処理結果として決定することを特徴とするプログラム並列化方法である。
【0036】
さらに、第15の発明は、前記フォーク箇所候補の最良組合せを決定する工程で、前記フォーク箇所候補決定部の処理が終了すると、フォーク箇所候補決定部により決定された全フォーク箇所候補を集合としてフォーク箇所候補のグループ分割処理を呼び出し、フォーク箇所候補のグループ分割処理が呼び出されると、与えられたフォーク箇所候補の集合に属するフォーク箇所候補の数が指定された分割下限数より大きければ、集合のグループ分割処理を開始し、小さければ、グループ分割処理を行わずにフォーク箇所候補のグループ分割処理を呼び出した元にリターンし、自身をキャンセルするフォーク箇所候補の数が指定数より大きいフォーク箇所候補の集合を集合から分割して新たにグループを生成し、集合をさらに2つのグループにグループ分割し、一方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して一方のグループのグループ分割を行い、他方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して他方のグループのグループ分割を行い、フォーク箇所候補のグループ分割処理を呼び出した元にリターンし、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補最良組合せ決定処理を行い、全グループの処理が完了したかどうかを判定し、未処理のグループがあるならば、未処理のグループに対するフォーク箇所候補最良組合せ決定処理を繰り返し、全グループの処理が完了した場合は、各グループ毎の処理結果であるフォーク箇所候補の組合せの和を全体の結果として出力することを特徴とするプログラム並列化方法である。
【0037】
さらにまた、第16の発明は、コンピュータを、逐次処理プログラムの制御フローおよびデータフローの解析を行う制御・データフロー解析部,前記制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定するフォーク箇所候補決定部,与えられたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する並列実行性能評価部,前記フォーク箇所候補決定部により決定されたフォーク箇所候補の試行組合せを生成し、これを前記並列実行性能評価部に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部,ならびに前記フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する並列化プログラム出力部として動作させることを特徴とするプログラム並列化プログラムである。
【0038】
また、第17の発明は、コンピュータを、逐次処理プログラムの制御フローおよびデータフローの解析を行う制御・データフロー解析部,前記制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定するフォーク箇所候補決定部,与えられたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する並列実行性能評価部,前記フォーク箇所候補決定部により決定されたフォーク箇所候補からフォーク1回モデル上で互いに同時に実行可能なフォーク箇所候補の組合せのみからなる試行組合せを生成し、これを前記並列実行性能評価部に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部,ならびに前記フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する並列化プログラム出力部として動作させることを特徴とするプログラム並列化プログラムである。
【0039】
さらに、第18の発明は、前記並列実行性能評価部が、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成し、逐次実行トレースをすべてのターム点候補を分割点として分割し、各スレッド要素毎のスレッド要素情報を解析し、与えられたフォーク箇所候補の試行組合せに対して並列実行をスレッド要素の単位でシミュレートして並列実行性能を算出することを特徴とするプログラム並列化プログラムである。
【0040】
さらにまた、第19の発明は、前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部により決定されたフォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序に従ってその時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくことを特徴とするプログラム並列化プログラムである。
【0041】
また、第20の発明は、前記フォーク箇所候補最良組合せ決定部が、求められたフォーク箇所候補の順序で上位から一定数を含むフォーク箇所候補の組合せを初期組合せとし、その初期組合せの並列実行性能を前記並列実行性能評価部によって評価し、初期組合せをこの時点でのフォーク箇所候補の最良組合せとすることを特徴とするプログラム並列化プログラムである。
【0042】
さらに、第21の発明は、前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部により決定された全フォーク箇所候補の集合を互いになるべく影響を及ぼし合わないようにフォーク箇所候補のグループに分割し、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補の試行組合せを生成し、それによる並列実行性能を前記並列実行性能評価部によって評価した結果を参照してフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定処理を行い、各グループ毎の処理結果であるフォーク箇所候補の最良組合せの和を全体の処理結果として決定することを特徴とするプログラム並列化プログラムである。
【0043】
さらにまた、第22の発明は、前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部の処理が終了すると、前記フォーク箇所候補決定部により決定された全フォーク箇所候補を集合としてフォーク箇所候補のグループ分割処理を呼び出し、フォーク箇所候補のグループ分割処理が呼び出されると、与えられたフォーク箇所候補の集合に属するフォーク箇所候補の数が指定された分割下限数より大きければ、集合のグループ分割処理を開始し、小さければ、グループ分割処理を行わずにフォーク箇所候補のグループ分割処理を呼び出した元にリターンし、自身をキャンセルするフォーク箇所候補の数が指定数より大きいフォーク箇所候補の集合を集合から分割して新たにグループを生成し、集合をさらに2つのグループにグループ分割し、一方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して一方のグループのグループ分割を行い、他方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して他方のグループのグループ分割を行い、フォーク箇所候補のグループ分割処理を呼び出した元にリターンし、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補最良組合せ決定処理を行い、全グループの処理が完了したかどうかを判定し、未処理のグループがあるならば、未処理のグループに対するフォーク箇所候補最良組合せ決定処理を繰り返し、全グループの処理が完了した場合は、各グループ毎の処理結果であるフォーク箇所候補の組合せの和を全体の結果として出力することを特徴とするプログラム並列化プログラムである。
【0044】
本発明によれば、フォーク箇所候補の試行組合せに対して並列実行性能を直接評価し、それを基準にフォーク箇所候補の最良組合せを決定するので、フォーク命令を逐次処理プログラムにより適切に挿入することが可能であり、並列実行性能のより高い並列化プログラムを得ることができる。
【0045】
また、本発明によれば、フォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序に従ってその時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくため、フォーク箇所候補のすべての組合せを評価する場合に比べて大幅にフォーク箇所候補最良組合せ決定処理の処理時間を短縮することができるという効果がある。
【0046】
さらに、本発明によれば、マルチスレッド実行方法としてフォーク1回モデルを採用した場合に、互いに同時に実行可能なフォーク箇所候補の試行組合せのみを対象に並列実行性能を評価するので、フォーク箇所候補最良組合せ決定処理の処理時間を短縮することができるという効果がある。
【0047】
さらにまた、本発明によれば、フォーク箇所候補をグループ間では互いになるべく影響を及ぼし合わないように適当数のグループに分割して、各グループ毎に独立にフォーク箇所候補最良組合せ決定処理を行うので、フォーク箇所候補の組合せの総数を削減することができ、フォーク箇所候補の数が多い場合でもフォーク箇所候補最良組合せ決定処理を高速に行うことができるという効果がある。
【0048】
また、本発明によれば、ターム点候補で決定されるスレッド要素の単位で並列実行のシミュレーションを行うので、並列実行性能を高速に評価することが可能であり、従ってフォーク箇所候補最良組合せ決定処理を高速に行うことができるという効果がある。
【0049】
図3を参照して具体例を説明する。図3は、隣接するプロセッサを単方向にリング状に接続した並列プロセッサシステム上で、フォーク1回モデルによるマルチスレッド実行の概略を示す図である。同図(a)は、3つのスレッドAn,Bn,Cn(n=…,1,2,3,…)が繰り返し実行される逐次処理プログラムの逐次実行トレースを示す。ここで、フォーク箇所候補として、スレッドAnの先頭をフォーク点、スレッドAnの終端をフォーク先とするフォーク箇所候補f0と、スレッドBnの先頭をフォーク点、スレッドBnの終端をフォーク先とするフォーク箇所候補f1と、スレッドBnの先頭をフォーク点、スレッドCnの終端をフォーク先とするフォーク箇所候補f2とがあるとする。
【0050】
3つのフォーク箇所候補f0,f1,f2の組合せは、φ(フォークしない)、{f0},{f1},{f2},{f0,f1},{f0,f2},{f1,f2},{f0,f1,f2}の8通り存在する。フォーク箇所候補最良組合せ決定処理は、フォーク箇所候補の組合せの中からより良い並列実行性能を示す組合せを選択する処理に他ならない。仮にいずれのフォーク箇所候補の組合せを選択してもデータ依存関係を壊さないとすると、図3(b)は{f0}により並列実行した(フォーク箇所候補f0のみにフォーク命令を挿入した)ときの様子を示す図である。同様に、同図(c)は{f1}により、同図(d)は{f2}により、同図(e)は{f0,f1}により、同図(f)は{f0,f2}により、並列実行したときの様子を示す図である。
【0051】
いま、フォーク1回モデルを仮定しているので,フォーク箇所候補f1とフォーク箇所候補f2とは同時に実行することができず、{f1,f2}および{f0,f1,f2}はそのまま並列実行することができない。従って、非特許文献1等で示されているように並列化コードの生成時に高々どちらか一方のみが挿入されるように保証するか、または特許文献3で示されているように実行時にどちらか一方のみが選択されて実行されることになる。
【0052】
図3(a)に示した逐次実行した場合を基準にすると、同図(b)の{f0}による並列化は1.33倍の処理量を提供しているため、逐次実行性能の1.33倍の並列実行性能を達成している。すなわち、逐次実行に対して1.33倍プログラム実行が高速である。同様に、同図(c)の{f1}による並列化では2.67倍、同図(d)の{f2}による並列化では4倍、同図(e)の{f0,f1}による並列化では3.2倍、同図(f)の{f0,f2}による並列化では2.67倍の並列実行性能を達成している。すなわち、本具体例では、例えばフォーク箇所候補f0とフォーク箇所候補f1またはf2とを組み合わせるよりも、フォーク箇所候補f2単独とした方がより良い並列実行性能を示す。これは、フォーク1回制限やプロセッサが単方向にリング状に接続されているというハードウェア構成も大きく影響しており、さらにデータ依存関係に違反するような状況ではより複雑な様相を呈する。このため、逐次処理プログラムの制御フローおよびデータフローの解析結果や逐次実行時に得られるプロファイル情報のみからでは、このような並列実行性能を予測することは困難である。従って、従来の並列化方法では所望の並列実行性能を得られない場合があったのに対して、本発明によれば、並列実行性能を直接評価し、それを基準にしてフォーク箇所候補の最良組合せを決定するので、フォーク命令を逐次処理プログラムにより適切に挿入することが可能であり、並列実行性能のより高い並列化プログラムを得ることができる。
【0053】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【0054】
[第1の実施の形態]
図1を参照すると、本発明の第1の実施の形態に係るプログラム並列化装置20は、入力される逐次処理プログラム13の制御フローおよびデータフローの解析を行う制御・データフロー解析部21と、制御・データフロー解析部21による制御フローおよびデータフローの解析結果を参照して逐次処理プログラム13のフォーク箇所候補を決定するフォーク箇所候補決定部22と、フォーク箇所候補決定部22により決定されたフォーク箇所候補の試行組合せを生成し、それによる並列実行性能を並列実行性能評価部24によって評価した結果を参照してフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部23と、フォーク箇所候補最良組合せ決定部23より与えられるフォーク箇所候補の試行組合せにより逐次処理プログラム13を並列化したときの並列実行性能を、ある入力データ15に対して評価する並列実行性能評価部24と、フォーク箇所候補最良組合せ決定部23により決定されたフォーク箇所候補の最良組合せに基づいて並列化プログラム14を生成し出力する並列化プログラム出力部25とを備える。
【0055】
図2を参照すると、フォーク箇所候補決定部22,フォーク箇所候補最良組合せ決定部23,および並列実行性能評価部24によるフォーク箇所候補最良組合せ決定処理は、フォーク箇所候補生成ステップ100と、フォーク箇所候補順序付けステップ101と、フォーク箇所候補初期組合せ生成ステップ102と、逐次実行トレース生成ステップ103と、スレッド要素分割ステップ104と、スレッド要素情報解析・記憶ステップ105と、フォーク箇所候補選択ステップ106と、フォーク箇所候補最良組合せ判定ステップ107と、フォーク箇所候補加入・試行組合せ設定ステップ108と、フォーク箇所候補削除・試行組合せ設定ステップ109と、並列実行性能算出ステップ110と、並列実行性能比較ステップ111と、最良組合せ設定ステップ112と、全フォーク箇所候補選択判定ステップ113と、新最良組合せ発見判定ステップ114と、全フォーク箇所候補未選択設定ステップ115と、最良組合せ出力ステップ116とからなる。
【0056】
次に、このように構成された第1の実施の形態に係るプログラム並列化装置20の動作について説明する。
【0057】
特に、図2を参照して、フォーク箇所候補決定部22,フォーク箇所候補最良組合せ決定部23,および並列実行性能評価部24で処理されるフォーク箇所候補最良組合せ決定処理を詳細に説明する。
【0058】
まず、制御・データフロー解析部21は、逐次処理プログラム13の制御フローおよびデータフローを解析する。
【0059】
次に、フォーク箇所候補決定部22は、制御・データフロー解析部21による制御フローおよびデータフローの解析結果を参照して、フォーク箇所候補を生成する(ステップ100)。具体的には、制御フローを解析して逐次処理プログラム13の基本ブロックを抽出し、その基本ブロックあるいは複数の基本ブロックを単位として並列化を行うようにフォーク箇所候補を生成する。このとき、例えば、非特許文献1や特許文献2に開示されているスレッド生成時にレジスタ値を子スレッドに継承し、子スレッド生成後は親スレッドと子スレッド間でレジスタを用いたデータの引き渡しを行わないマルチスレッド実行方法では、データフロー上でレジスタの内容が同じである任意の箇所でフォークを行うことが可能であり、フォーク箇所候補となり得る。また、非特許文献1(4.1節)に開示されている方針などにより、制御フローおよびデータフローを参照して並列化性能に対して有効だと予測されるフォーク箇所候補をある程度あらかじめ絞り込んでもよい。
【0060】
次に、フォーク箇所候補最良組合せ決定部23は、すべてのフォーク箇所候補のそれぞれの並列実行性能に対する効果を予測し、その効果順にフォーク箇所候補に順序を付ける(ステップ101)。効果の予測は、例えば、逐次実行したときの逐次実行トレースの結果を参照して、予測対象のフォーク箇所候補のフォーク点からフォーク先までの実行サイクル数や該フォーク箇所候補の出現回数を参照して効果を予測してもよいし、フォーク箇所候補をそれぞれ単独で並列実行したときの並列実行性能を並列実行性能評価部24によって評価して効果を求めてもよい。
【0061】
続いて、フォーク箇所候補最良組合せ決定部23は、最初に並列実行性能を評価するフォーク箇所候補の組合せ(初期組合せ)を生成し、それをフォーク箇所候補の最良組合せとする(ステップ102)。これは、例えば、ステップ101で求めたフォーク箇所候補の順序で上位から一定数を含むフォーク箇所候補の組合せを初期組合せとし、その初期組合せの並列実行性能を並列実行性能評価部24によって評価し、初期組合せをこの時点でのフォーク箇所候補の最良組合せとする。
【0062】
次に、並列実行性能評価部24は、まず、逐次処理プログラム13を入力データ15で逐次実行したときの逐次実行トレースを生成する(ステップ103)。
【0063】
続いて、並列実行性能評価部24は、逐次実行トレースをすべてのターム点候補を分割点として分割する(ステップ104)。分割された各々の部分実行トレースを、スレッド要素と呼ぶ。ターム点候補は、フォーク箇所候補が与えられれば決定することができる。例えば、特許文献3に開示されている、有効な子スレッドを生成したプロセッサが有効な子スレッドの開始アドレスの直前のアドレスの命令まで実行を完了するマルチスレッド実行方法(特許文献3の請求項1,段落0013等参照)では、ターム点はフォーク命令のフォーク先に等しく、フォーク箇所候補を与えればターム点候補は一意に決定される。
【0064】
次に、並列実行性能評価部24は、各スレッド要素毎の実行サイクル数,スレッド要素内に出現するフォーク箇所候補とその出現位置,フォーク先のスレッド要素,スレッド要素間のメモリ依存関係等のスレッド要素情報を解析し、それらを各スレッド要素毎に記憶する(ステップ105)。
【0065】
例えば、図3(a)を参照すると、逐次実行トレースは、フォーク箇所候補f0,f1,f2によって、スレッド要素An,Bn,Cnに分割することができる。ここで、スレッド要素Anおよびスレッド要素Bnは、フォーク箇所候補f0のターム点により、スレッド要素Bnおよびスレッド要素Cnはフォーク箇所候補f1のターム点により、スレッド要素Cnおよびスレッド要素Anはフォーク箇所候補f2のターム点により決定される。
【0066】
フォーク箇所候補f0,f1,f2で生成可能なスレッドは、すべてスレッド要素An,Bn,Cnの組合せで構成される。例えば、図3(b)に示すフォーク箇所候補f0で生成されるスレッドは、スレッド要素Bn,Cn,Anの順序で構成されている。同様に、図3(c)〜(f)に示すフォーク箇所候補の他の組合せによる並列化におけるスレッドも、すべてスレッド要素An,Bn,Cnの組合せで構成される。これは、フォーク箇所候補が与えられたとき、そのフォーク箇所候補のターム点で決定されるスレッド要素の単位で、与えられたフォーク箇所候補による並列実行をシミュレートすることが可能であることを意味する。しかしながら、各スレッドの開始位置(スレッド内のフォークを実行する位置)の決定やデータ依存関係の検出のためには、逐次実行トレースを命令単位で解析する必要がある。本実施の形態では、与えられた逐次処理プログラム13および入力データ15に対して、各スレッド要素毎の実行サイクル数,スレッド要素内に出現するフォーク箇所候補とその出現位置,フォーク先のスレッド要素,スレッド要素間のメモリ依存度等のスレッド要素情報を一度だけ解析し、スレッド情報を各スレッド要素毎に記憶する。実際に並列実行をシミュレートする処理では、命令単位での解析を必要としないので、並列実行性能を繰り返し評価する場合に評価速度が高速であるという特徴がある。
【0067】
続いて、フォーク箇所候補最良組合せ決定部23は、ステップ106からステップ113までで構成されるループAを繰り返し実行中に、未だ未選択のフォーク箇所候補の中で順序が一番上位のフォーク箇所候補を1つ選択する(ステップ106)。
【0068】
次に、フォーク箇所候補最良組合せ決定部23は、ステップ106で選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれているか否かを判定する(ステップ107)。
【0069】
選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていなければ、フォーク箇所候補最良組合せ決定部23は、ステップ106で選択されたフォーク箇所候補をフォーク箇所候補の最良組合せに加え、そのフォーク箇所候補の組合せを試行組合せとする(ステップ108)。
【0070】
一方、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていれば、フォーク箇所候補最良組合せ決定部23は、フォーク箇所候補の最良組合せからステップ106で選択されたフォーク箇所候補を取り除き、そのフォーク箇所候補の組合せを試行組合せとする(ステップ109)。
【0071】
次に、フォーク箇所候補最良組合せ決定部23は、試行組合せによる並列化の並列実行性能を、並列実行性能評価部24によって評価する(ステップ110)。
【0072】
並列実行性能評価部24による並列実行性能の評価方法として、マルチプロセッサシステム上で実際に実行して評価する方法や、マルチプロセッサシステムのシミュレータ(図示せず)上で並列実行のシミュレーションを行って評価する方法、詳しくは、並列実行性能を評価するフォーク箇所候補の試行組合せで逐次処理プログラム13を並列化したとして、そのときの動作をシミュレータ上で仮想的に実行して性能を評価する方法がある。また、このとき、並列実行性能の指針としては、並列実行したときの実行サイクル数や実行時間が適当であるが、消費電力を考慮するためにプロセッサ稼働率などを評価結果算出に加味してもよい。第1の実施の形態では、並列実行性能評価部24は、与えられたフォーク箇所候補の試行組合せに対して、ステップ105で記憶されたスレッド要素情報を参照して、ターム点候補で決定されるスレッド要素の単位で並列実行のシミュレーションを行って並列実行性能を評価する。
【0073】
具体的には、並列実行性能評価部24は、まず、並列実行性能を評価したいフォーク箇所候補の試行組合せおよび各スレッド要素毎に記憶されているフォーク箇所候補のスレッド要素情報(スレッド要素内に出現するフォーク箇所候補,フォーク先のスレッド要素)を参照して自スレッドのターム点を決定し、スレッド要素を組み合わせて自スレッドを生成する。次に、並列実行性能評価部24は、フォーク箇所候補のスレッド要素情報(スレッド要素内に出現するフォーク箇所候補の出現位置)およびプロセッサ使用状況を参照して、そのフォーク箇所候補が生成する子スレッドの実行開始点を決定する。続いて、並列実行性能評価部24は、各スレッド要素毎に記憶されているフォーク箇所候補のスレッド要素情報(スレッド要素間のメモリ依存関係の情報)を参照してスレッド間のメモリ依存に対する投機実行の正否を判定し、実行の取消しがあればそれをスレッドの実行開始点に反映する。
【0074】
並列実行性能評価部24によれば、ステップ104およびステップ105は、ある逐次実行トレースおよびターム点候補に対してあらかじめ1回実行しておけばよく、フォーク箇所候補最良組合せ決定処理のように並列実行性能を評価したいフォーク箇所候補の試行組合せを繰り返し与えられる場合には、ステップ106以降を実行すれば十分である。従って、例えば命令単位で並列化やメモリ依存のシミュレーションを評価毎に行う従来の並列実行シミュレーションに比べて、評価速度が高速であるという特徴がある。また、実際にマルチプロセッサ上で並列実行を行って評価する方法にも、実働するマルチプロセッサがないと評価できない,評価したい試行組合せをマルチプロセッサで実行できる並列化プログラム14に変換して評価結果を取り出すのにオーバヘッドが存在する等の欠点があるため、本実施形態による並列実行性能の評価方法が評価処理の高速化に有効な場合が多い。
【0075】
続いて、フォーク箇所候補最良組合せ決定部23は、試行組合せの並列実行性能と最良組合せの並列実行性能とを比較する(ステップ111)。
【0076】
試行組合せの並列実行性能の方が良ければ、フォーク箇所候補最良組合せ決定部23は、試行組合せを現時点でのフォーク箇所候補の最良組合せとする(ステップ112)。試行組合せの並列実行性能の方が悪ければ、ステップ112をスキップする。
【0077】
次に、フォーク箇所候補最良組合せ決定部23は、ループAの繰り返し実行において、未選択のフォーク箇所候補があるかどうかを判定する(ステップ113)。未選択のフォーク箇所候補があれば、ステップ106に制御を戻し、ループAとして繰り返し実行する。
【0078】
未選択のフォーク箇所候補がなければ、すなわちすべてのフォーク箇所候補を選択したならば、フォーク箇所候補最良組合せ決定部23は、直前のループAの繰り返し実行において、新たにフォーク箇所候補の最良組合せが見つかったかどうかを判定する(ステップ114)。
【0079】
新たにフォーク箇所候補の最良組合せが見つかった場合には、フォーク箇所候補最良組合せ決定部23は、ループAの繰り返し実行に関して、すべてのフォーク箇所候補を未選択の状態にして(ステップ115)、ステップ106に制御を戻し、ループBとして繰り返し実行する。
【0080】
新たにフォーク箇所候補の最良組合せが見つからなかった場合には、フォーク箇所候補最良組合せ決定部23は、決定されたフォーク箇所候補の最良組合せをフォーク箇所候補最良組合せ決定処理の結果として並列化プログラム出力部25に出力する(ステップ116)。
【0081】
最後に、並列化プログラム出力部25は、フォーク箇所候補最良組合せ決定部23により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラム14を生成し出力する。
【0082】
以上説明したように、第1の実施の形態によれば、フォーク箇所候補の試行組合せに対して並列実行性能を直接評価し、それを基準にフォーク箇所候補の最良組合せを決定するので、フォーク命令を逐次処理プログラム13により適切に挿入することが可能であり、並列実行性能のより高い並列化プログラム14を得ることができる。
【0083】
また、フォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序によって、その時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくため、フォーク箇所候補のすべての組合せを評価する場合に比べて、フォーク箇所候補最良組合せ決定処理の処理時間を大幅に短縮できるという効果がある。
【0084】
[第1の実施の形態の具体例]
図4および図5を参照して、第1の実施の形態に係るプログラム並列化装置20におけるフォーク箇所候補最良組合せ決定処理の具体例を説明する。
【0085】
ここで、フォーク箇所候補としてf0,f1,f2,f3があるとする。このときのフォーク箇所候補の組合せの総数は、まったくフォークをせずに逐次実行した場合(φ)を含めて16通り存在する。
【0086】
並列実行によって、逐次実行したとき(φの場合)の性能の何倍の性能が達成されるかを並列実行性能の指標として採用する。ここで、16通りのフォーク箇所候補の組合せのそれぞれの並列実行性能を、図4に示すように仮定する。この場合、フォーク箇所候補としてf1およびf2を選択したときの並列実行性能が最も高く、逐次実行の3.8倍の性能である。
【0087】
フォーク箇所候補の組合せは16通りあるので、すべての組合せの並列実行性能を評価してフォーク箇所候補の最良組合せを決定する方法では、並列実行性能の評価は16回行う必要がある。
【0088】
次に、図4に示す具体例に対する第1の実施の形態によるフォーク箇所候補最良組合せ決定処理の動作の詳細を、図2のフローチャートも参照しつつ説明する。
【0089】
まず、ステップ100において、フォーク箇所候補としてf0,f1,f2,f3が得られているものとする。
【0090】
次に、ステップ101において、フォーク箇所候補に順序を付ける。ここで、フォーク箇所候補それぞれを単独で並列実行したときの並列実行性能を指標として、それぞれの並列実行性能が大きい順序に順序付けを行うとする。図4に示すそれぞれの並列実行性能を参照すると、f0,f2,f1,f3の順序になる。
【0091】
続いて、ステップ102において、初期組合せを生成する。ステップ101で求めたフォーク箇所候補の順序の上位から2つを初期組合せに採用すると、{f0,f2}が初期組合せになる。{f0,f2}の並列実行性能が評価され、その結果である3.2が得られる。また、{f0,f2}は、この時点でのフォーク箇所候補の最良組合せになる。
【0092】
次に、ステップ106からループAおよびループBが繰り返し実行される。各繰り返しにおける動作の様子を、図5に示す。
【0093】
・ループA実行1回目、ループB実行1回目(繰り返し1−1)
まず、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ106)。この時点では、すべてのフォーク箇所候補が未選択なので、フォーク箇所候補f0が選択される。フォーク箇所候補f0はフォーク箇所候補の最良組合せ{f0,f2}に含まれているので(ステップ107)、フォーク箇所候補の最良組合せ{f0,f2}からフォーク箇所候補f0を取り除き、試行組合せは{f2}となる(ステップ109)。次に、試行組合せの並列実行性能が評価されて、その結果である2.4が得られる(ステップ110)。試行組合せの並列実行性能(2.4)はフォーク箇所候補の最良組合せの並列実行性能(3.2)よりも悪いので(ステップ111)、フォーク箇所候補の最良組合せは{f0,f2}のままである。ループAにおいて未だ未選択のフォーク箇所候補が残っているので(ステップ113)、次にステップ106からループAの2回目の実行を開始する。
【0094】
・ループA実行2回目、ループB実行1回目(繰り返し1−2)
同様にして、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ106)。この時点で、フォーク箇所候補f0が選択済みなので、フォーク箇所候補f2が選択される。フォーク箇所候補f2はフォーク箇所候補の最良組合せ{f0,f2}に含まれているので(ステップ107)、フォーク箇所候補の最良組合せ{f0,f2}からフォーク箇所候補f2を取り除き、試行組合せは{f0}となる(ステップ109)。次に、試行組合せの並列実行性能が評価されて、その結果である2.5が得られる(ステップ110)。試行組合せの並列実行性能(2.5)はフォーク箇所候補の最良組合せの並列実行性能(3.2)よりも悪いので(ステップ111)、フォーク箇所候補の最良組合せは{f0,f2}のままである。ループAにおいて未だ未選択のフォーク箇所候補が残っているので(ステップ113)、次にステップ106からループAの3回目の実行を開始する。
【0095】
・ループA実行3回目、ループB実行1回目(繰り返し1−3)
同様にして、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ106)。この時点で、フォーク箇所候補f0およびf2が選択済みなので、フォーク箇所候補f1が選択される。フォーク箇所候補f1はフォーク箇所候補の最良組合せ{f0,f2}に含まれていないので(ステップ107)、フォーク箇所候補の最良組合せ{f0,f2}にフォーク箇所候補f1を加え、試行組合せは{f0,f1,f2}となる(ステップ108)。次に、試行組合せの並列実行性能が評価されて、その結果である3.5が得られる(ステップ110)。試行組合せの並列実行性能(3.5)はフォーク箇所候補の最良組合せの並列実行性能(3.2)よりも良いので(ステップ111)、フォーク箇所候補の最良組合せは{f0,f1,f2}となる(ステップ112)。ループAにおいて未だ未選択のフォーク箇所候補が残っているので(ステップ113)、次にステップ106からループAの4回目の実行を開始する。
【0096】
・ループA実行4回目、ループB実行1回目(繰り返し1−4)
同様にして、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ106)。この時点で、フォーク箇所候補f0,f1,f2が選択済みなので、フォーク箇所候補f3が選択される。フォーク箇所候補f3はフォーク箇所候補の最良組合せ{f0,f1,f2}に含まれていないので(ステップ107)、フォーク箇所候補の最良組合せ{f0,f1,f2}にフォーク箇所候補f3を加え、試行組合せは{f0,f1,f2,f3}となる(ステップ108)。次に、試行組合せの並列実行性能が評価されて、その結果である2.5が得られる(ステップ110)。試行組合せの並列実行性能(2.5)はフォーク箇所候補の最良組合せの並列実行性能(3.5)よりも悪いので(ステップ111)、フォーク箇所候補の最良組合せは{f0,f1,f2}のままである。ループAにおいてすべてのフォーク箇所候補を選択し(ステップ113)、またループA実行の3回目で新たにフォーク箇所候補の最良組合せが得られたので(ステップ114)、すべてのフォーク箇所候補を未選択の状態にして(ステップ115)、次にステップ106からループB実行の2回目を開始する。
【0097】
・ループA実行1回目、ループB実行2回目(繰り返し2−1)
まず、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ106)。この時点では、すべてのフォーク箇所候補が未選択なので、フォーク箇所候補f0が選択される。フォーク箇所候補f0はフォーク箇所候補の最良組合せ{f0,f1,f2}に含まれているので(ステップ107)、フォーク箇所候補の最良組合せ{f0,f1,f2}からフォーク箇所候補f0を取り除き、試行組合せは{f1,f2}となる(ステップ109)。次に、試行組合せの並列実行性能が評価されて、その結果である3.8が得られる(ステップ110)。試行組合せの並列実行性能(3.8)はフォーク箇所候補の最良組合せの並列実行性能(3.5)よりも良いので(ステップ111)、フォーク箇所候補の最良組合せは{f1,f2}となる(ステップ112)。ループAにおいて未だ未選択のフォーク箇所候補が残っているので(ステップ113)、次にステップ106からループAの2回目の実行を開始する。
【0098】
以下、詳細な説明は省略するが、図5に示すような同様な動作を行う。
【0099】
・ループA実行2回目、ループB実行2回目(繰り返し2−2)
フォーク箇所候補f2を選択して試行組合せは{f1}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。
【0100】
・ループA実行3回目、ループB実行2回目(繰り返し2−3)
フォーク箇所候補f1を選択して試行組合せは{f2}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。
【0101】
・ループA実行4回目、ループB実行2回目(繰り返し2−4)
フォーク箇所候補f3を選択して試行組合せは{f1,f2,f3}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。ループAにおいてすべてのフォーク箇所候補を選択し(ステップ113)、またループAの実行の1回目で新たにフォーク箇所候補の最良組合せ{f1,f2}を得られたので(ステップ114)、すべてのフォーク箇所候補を未選択の状態にして(ステップ115)、次にステップ106からループB実行の3回目を開始する。
【0102】
・ループA実行1回目、ループB実行3回目(繰り返し3−1)
フォーク箇所候補f0を選択して試行組合せは{f0,f1,f2}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。
【0103】
・ループA実行2回目、ループB実行3回目(繰り返し3−2)
フォーク箇所候補f2を選択して試行組合せは{f1}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。
【0104】
・ループA実行3回目、ループB実行3回目(繰り返し3−3)
フォーク箇所候補f1を選択して試行組合せは{f2}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。
【0105】
・ループA実行4回目、ループB実行3回目(繰り返し3−4)
フォーク箇所候補f3を選択して試行組合せは{f1,f2,f3}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。ループAにおいてすべてのフォーク箇所候補を選択し(ステップ113)、またループAの繰り返し実行において新たにフォーク箇所候補の最良組合せが得られなかったので(ステップ114)、フォーク箇所候補の最良組合せである{f1,f2}をフォーク箇所候補最良組合せ決定処理の処理結果として出力し(ステップ116)、終了する。
【0106】
以上説明したように、第1の実施の形態の具体例によれば、フォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序によって、その時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していく。フォーク箇所候補のすべての組合せについて並列実行性能を評価する方法では16回の評価が必要なのに比べて、第1の実施の形態による並列実行性能を評価する方法では12回の評価で済むことから明らかのように、フォーク箇所候補最良組合せ決定処理の処理時間を短縮することができるという効果がある。
【0107】
なお、第1の実施の形態では、マルチプロセッサシステムのシミュレータ上で並列実行のシミュレーションを行って評価するようにしたが、マルチプロセッサシステム上で実際に実行して評価するようにしてもよい。詳しくは、並列実行性能を評価するフォーク箇所候補の試行組合せに対して、実際にフォーク命令を挿入して並列化プログラムを生成し、それを実際にマルチプロセッサシステム上で実行して並列実行性能を評価する。
【0108】
[第2の実施の形態]
マルチスレッド実行方法としてフォーク1回モデルを採用した場合、スレッドはその生存中に高々1回に限って有効な子スレッドを生成することを保証する必要がある。これには、非特許文献1等で開示されているように、逐次処理プログラムから並列化プログラムを生成するコンパイルの段階で静的に制限する方法や、特許文献3で開示されているように、親スレッド実行中に選択することにより動的に保証する方法があるが、いずれの方式においても、フォーク1回モデル上で、同時に実行することのできないフォーク箇所候補の組合せが存在する。すなわち、フォーク1回モデルを仮定した場合、互いに同時に実行可能なフォーク箇所候補の試行組合せのみに対して並列実行性能の評価を行うことにすると、フォーク箇所候補最良組合せ決定処理の処理時間の短縮を期待することができる。
【0109】
図6を参照すると、本発明の第2の実施の形態に係るプログラム並列化装置20’は、入力される逐次処理プログラム13の制御フローおよびデータフローの解析を行う制御・データフロー解析部21と、制御・データフロー解析部21による制御フローおよびデータフローの解析結果を参照して逐次処理プログラム13のフォーク箇所候補を決定するフォーク箇所候補決定部22と、フォーク箇所候補決定部22により決定されたフォーク箇所候補からフォーク1回モデル上で互いに同時に実行可能なフォーク箇所候補の組合せのみからなる試行組合せを生成し、これを並列実行性能評価部24に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部23’と、フォーク箇所候補最良組合せ決定部23’より与えられるフォーク箇所候補の試行組合せにより逐次処理プログラム13を並列化したときの並列実行性能を、ある入力データ15に対して評価する並列実行性能評価部24と、フォーク箇所候補最良組合せ決定部23’により決定されたフォーク箇所候補の最良組合せに基づいて並列化プログラム14を生成し出力する並列化プログラム出力部25とを備える。
【0110】
図7を参照すると、フォーク箇所候補決定部22,フォーク箇所候補最良組合せ決定部23’,および並列実行性能評価部24によるフォーク箇所候補最良組合せ決定処理は、フォーク箇所候補生成ステップ120と、フォーク箇所候補順序付けステップ121と、フォーク箇所候補初期組合せ生成ステップ122と、逐次実行トレース生成ステップ123と、スレッド要素分割ステップ124と、スレッド要素情報解析・記憶ステップ125と、フォーク箇所候補選択ステップ126と、フォーク箇所候補最良組合せ判定ステップ127と、フォーク箇所候補加入・試行組合せ設定ステップ128と、キャンセルフォーク箇所候補削除ステップ137と、フォーク箇所候補削除・試行組合せ設定ステップ129と、並列実行性能評価ステップ130と、並列実行性能比較ステップ131と、キャンセルフォーク箇所候補除去ステップ138と、最良組合せ設定ステップ132と、全フォーク箇所候補選択判定ステップ133と、新最良組合せ発見判定ステップ134と、全フォーク箇所候補未選択設定ステップ135と、フォーク箇所候補最良組合せ出力ステップ136とからなる。
【0111】
図7のフォーク箇所候補最良組合せ決定処理は、フォーク1回制限の保証方法として、特許文献3に開示されている、親スレッドのフォーク命令毎に当該親スレッドから生成された子スレッドが既に存在する場合には、その子スレッドをキャンセルすることで、親スレッド中に存在する複数のフォーク命令のうちから有効な子スレッドを生成する1つのフォーク命令を親スレッド実行中に選択する方法(特許文献3の請求項2,段落0014等参照)を採用すると仮定した場合の動作である。
【0112】
フォーク1回モデルの実現方法には、既述したように、主に逐次処理プログラムから並列化プログラムを生成するコンパイル段階で静的に制限する方法と、親スレッド実行中に選択することにより動的に保証する方法がある。後者の具体的な方法には、親スレッドのフォーク命令毎に当該親スレッドから生成された子スレッドがすでに存在する場合には、その子スレッドをキャンセルすることで、親スレッド中に存在する複数のフォーク命令のうちから有効な子スレッドを生成する1つのフォーク命令を親スレッド実行中に選択する方法があり、第2の実施の形態では、この方法を仮定する。
【0113】
この方法によると、フォーク箇所候補f0とフォーク箇所候補f1とを同時に選択した場合、フォーク箇所候補f1は必ずフォーク箇所候補f0によりキャンセルされると仮定すると、第2の実施の形態のフローチャートのループAのある繰り返しにおいて、フォーク箇所候補f1を選択し、それをフォーク箇所候補f0を含む試行組合せに加える場合を考える。この場合、効果を評価したいフォーク箇所候補f1は並列実行時にフォーク箇所候補f0によりキャンセルされてしまう。ステップ137は、キャンセルの原因であるフォーク箇所候補f0を試行組合せからあらかじめ取り除いて、フォーク箇所候補f1が実行されるようにする処理に相当する。
【0114】
逆に、フローチャートのループAのある繰り返しにおいてフォーク箇所候補f0を選択し、それをフォーク箇所候補f1を含む試行組合せに加える場合を考える。この場合、効果を評価したいフォーク箇所候補f0はキャンセルされないが、フォーク箇所候補f1は必ずキャンセルされるため、フォーク箇所候補f1が試行組合せに入っている意味がない。ステップ138は、この必ずキャンセルされて意味をなさないフォーク箇所候補をあらかじめ取り除く処理に相当する。
【0115】
次に、このように構成された第2の実施の形態に係るプログラム並列化装置20’の動作について説明する。
【0116】
まず、制御・データフロー解析部21は、逐次処理プログラム13の制御フローおよびデータフローを解析する。
【0117】
次に、フォーク箇所候補決定部22は、制御・データフロー解析部21による制御フローおよびデータフローの解析結果を参照して、フォーク箇所候補を生成する(ステップ120)。
【0118】
次に、フォーク箇所候補最良組合せ決定部23’は、すべてのフォーク箇所候補のそれぞれの並列実行性能に対する効果を予測し、その効果順にフォーク箇所候補に順序を付ける(ステップ121)。効果の予測は、例えば、逐次実行したときの逐次実行トレースの結果を参照して、予測対象のフォーク箇所候補のフォーク元からフォーク先までの実行サイクル数および該フォーク箇所候補の出現回数を参照して効果を予測してもよいし、フォーク箇所候補をそれぞれ単独で並列実行したときの並列実行性能を並列実行性能評価部24によって評価して効果を求めてもよい。さらに、フォーク1回制限を保証するためのフォークのキャンセルを発生させるフォーク箇所候補間の関係を求める。これは、逐次実行トレースの結果や制御フローグラフを参照して求めることができる。例えば、逐次処理プログラム13の実行フロー上で、あるフォーク箇所候補faのフォーク点からフォーク先までの間に、あるフォーク箇所候補fbのフォーク点がある場合、実行時にフォーク箇所候補faはフォーク箇所候補fbによってキャンセルされる。
【0119】
続いて、フォーク箇所候補最良組合せ決定部23’は、最初に並列実行性能を評価するフォーク箇所候補の初期組合せを生成し、それをフォーク箇所候補の最良組合せとする(ステップ122)。これは、例えば、ステップ121で求められたフォーク箇所候補の順序で上位から一定数を含むフォーク箇所候補の組合せを初期組合せとし、その初期組合せの並列実行性能を並列実行性能評価部24によって評価し、初期組合せをこの時点でのフォーク箇所候補の最良組合せとする。
【0120】
並列実行性能評価部24は、まず、逐次処理プログラム13を入力データ15で逐次実行したときの逐次実行トレースを生成する(ステップ123)。
【0121】
次に、並列実行性能評価部24は、逐次実行トレースをすべてのターム点候補を分割点として分割する(ステップ124)。
【0122】
続いて、並列実行性能評価部24は、各スレッド要素毎の実行サイクル数,スレッド要素内に出現するフォーク箇所候補とその出現位置,フォーク先のスレッド要素,スレッド要素間のメモリ依存関係等のスレッド要素情報を解析し、それらを各スレッド要素毎に記憶する(ステップ125)。
【0123】
次に、フォーク箇所候補最良組合せ決定部23’は、ステップ126からステップ133までで構成されるループAを繰り返し実行中に、未だ未選択のフォーク箇所候補の中で順序が一番上位のフォーク箇所候補を1つ選択する(ステップ126)。
【0124】
続いて、フォーク箇所候補最良組合せ決定部23’は、ステップ126で選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれているか否かを判定する(ステップ127)。
【0125】
選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていなければ、フォーク箇所候補最良組合せ決定部23’は、フォーク箇所候補の最良組合せにステップ126で選択されたフォーク箇所候補を加え、そのフォーク箇所候補の組合せを試行組合せとする(ステップ128)。
【0126】
次に、フォーク箇所候補最良組合せ決定部23’は、ステップ126で選択されたフォーク箇所候補をキャンセルするフォーク箇所候補を試行組合せから取り除く(ステップ137)。
【0127】
一方、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていれば、フォーク箇所候補最良組合せ決定部23’は、フォーク箇所候補の最良組合せからステップ126で選択されたフォーク箇所候補を取り除き、そのフォーク箇所候補の組合せを試行組合せとする(ステップ129)。
【0128】
次に、フォーク箇所候補最良組合せ決定部23’は、試行組合せによる並列化の並列実行性能を、並列実行性能評価部24によって評価する(ステップ130)。
【0129】
続いて、フォーク箇所候補最良組合せ決定部23’は、試行組合せの並列実行性能と最良組合せの並列実行性能とを比較する(ステップ131)。試行組合せの並列実行性能の方が悪ければ、ステップ138およびステップ132をスキップする。
【0130】
試行組合せの並列実行性能の方が良ければ、フォーク箇所候補最良組合せ決定部23’は、ステップ126で選択されたフォーク箇所候補がキャンセルするフォーク箇所候補を試行組合せから取り除く(ステップ138)。
【0131】
次に、フォーク箇所候補最良組合せ決定部23’は、試行組合せを現時点でのフォーク箇所候補の最良組合せとする(ステップ132)。
【0132】
次に、フォーク箇所候補最良組合せ決定部23’は、ループAの繰り返し実行において、未選択のフォーク箇所候補があるかどうかを判定する(ステップ133)。未選択のフォーク箇所候補があれば、ステップ126に制御を戻し、ループAとして繰り返し実行する。
【0133】
未選択のフォーク箇所候補がなければ、すなわちすべてのフォーク箇所候補を選択したならば、フォーク箇所候補最良組合せ決定部23’は、直前のループAの繰り返し実行において、新たにフォーク箇所候補の最良組合せが見つかったかどうかを判定する(ステップ134)。
【0134】
新たにフォーク箇所候補の最良組合せが見つかった場合には、フォーク箇所候補最良組合せ決定部23’は、ループAの繰り返し実行に関して、すべてのフォーク箇所候補を未選択の状態にして(ステップ135)、ステップ126に制御を戻し、ループBとして繰り返し実行する。
【0135】
新たにフォーク箇所候補の最良組合せが見つからなかった場合には、フォーク箇所候補最良組合せ決定部23’は、決定されたフォーク箇所候補の最良組合せをフォーク箇所候補最良組合せ決定処理の結果として並列化プログラム出力部25に出力する(ステップ136)。
【0136】
最後に、並列化プログラム出力部25は、フォーク箇所候補最良組合せ決定部23’により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラム14を生成し出力する。
【0137】
以上説明したように、第2の実施の形態によれば、マルチスレッド実行方法としてフォーク1回モデルを採用した場合に、互いに同時に実行可能なフォーク箇所候補の試行組合せのみを対象に並列実行性能を評価するので、フォーク箇所候補最良組合せ決定処理の処理時間を、第1の実施の形態に比べてさらに短縮することができるという効果が得られる。
【0138】
[第2の実施の形態の具体例]
第2の実施の形態によるフォーク箇所候補最良組合せ決定処理の具体例を、図4および図8を参照して説明する。
【0139】
ここで、フォーク箇所候補としてf0,f1,f2,f3があるとする。このときのフォーク箇所候補の組合せの総数は、まったくフォークをせずに逐次実行した場合(φ)を含めて16通り存在する。
【0140】
並列実行によって、逐次実行したとき(φの場合)の性能の何倍の性能が達成されるかを並列実行性能の指標として採用する。ここで、16通りのフォーク箇所候補の組合せのそれぞれの並列実行性能を、図4に示すように仮定する。この場合、フォーク箇所候補としてf1およびf2を選択したときの並列実行性能が最も高く、逐次実行の3.8倍の性能である。
【0141】
次に、図4に示す具体例に対する第2の実施の形態によるフォーク箇所候補最良組合せ決定処理の動作の詳細を、図7のフローチャートも参照しつつ説明する。
【0142】
まず、ステップ120において、フォーク箇所候補としてf0,f1,f2,f3が得られているとする。
【0143】
次に、ステップ121において、フォーク箇所候補に順序を付ける。ここで、フォーク箇所候補それぞれを単独で並列実行したときの並列実行性能を指標として、それぞれの並列実行性能が大きい順序に順序付けを行うとする。図4に示すそれぞれの並列実行性能を参照すると、f0,f2,f1,f3の順序になる。次に、フォーク箇所候補間のキャンセル関係を求める。ここでは、フォーク箇所候補f0がフォーク箇所候補f1をキャンセルし、フォーク箇所候補f2がフォーク箇所候補f3をキャンセルする関係が存在すると仮定する。
【0144】
続いて、ステップ122において、初期組合せを生成する。ステップ121で求めたフォーク箇所候補の順序の上位から2つを初期組合せに採用すると、{f0,f2}が初期組合せになる。{f0,f2}の並列実行性能が評価され、その結果である3.2が得られる。また、{f0,f2}は、この時点でのフォーク箇所候補の最良組合せになる。
【0145】
次に、ステップ126からループAおよびループBを繰り返し実行される。各繰り返しにおける動作の様子を、図8に示す。
【0146】
・ループA実行1回目、ループB実行1回目(繰り返し1−1)
まず、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ126)。この時点では、すべてのフォーク箇所候補が未選択なので、フォーク箇所候補f0が選択される。フォーク箇所候補f0はフォーク箇所候補の最良組合せ{f0,f2}に含まれているので(ステップ127)、フォーク箇所候補の最良組合せ{f0,f2}からフォーク箇所候補f0を取り除き、試行組合せは{f2}となる(ステップ129)。次に、試行組合せの並列実行性能が評価されて、その結果である2.4が得られる(ステップ130)。試行組合せの並列実行性能(2.4)はフォーク箇所候補の最良組合せの並列実行性能(3.2)よりも悪いので(ステップ131)、フォーク箇所候補の最良組合せは{f0,f2}のままである。ループAにおいて未だ未選択のフォーク箇所候補が残っているので(ステップ133)、次にステップ126からループAの2回目の実行を開始する。
【0147】
・ループA実行2回目、ループB実行1回目(繰り返し1−2)
同様にして、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ126)。この時点で、フォーク箇所候補f0が選択済みなので、フォーク箇所候補f2が選択される。フォーク箇所候補f2はフォーク箇所候補の最良組合せ{f0,f2}に含まれているので(ステップ127)、フォーク箇所候補の最良組合せ{f0,f2}からフォーク箇所候補f2を取り除き、試行組合せは{f0}となる(ステップ129)。次に、試行組合せの並列実行性能が評価されて、その結果である2.5が得られる(ステップ130)。試行組合せの並列実行性能(2.5)はフォーク箇所候補の最良組合せの並列実行性能(3.2)よりも悪いので(ステップ131)、フォーク箇所候補の最良組合せは{f0,f2}のままである。ループAにおいて未だ未選択のフォーク箇所候補が残っているので(ステップ133)、次にステップ126からループAの3回目の実行を開始する。
【0148】
・ループA実行3回目、ループB実行1回目(繰り返し1−3)
同様にして、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ126)。この時点で、フォーク箇所候補f0およびf2が選択済みなので、フォーク箇所候補f1が選択される。フォーク箇所候補f1はフォーク箇所候補の最良組合せ{f0,f2}に含まれていないので(ステップ127)、フォーク箇所候補の最良組合せ{f0,f2}にフォーク箇所候補f1を加え、試行組合せは{f0,f1,f2}となる(ステップ128)。次に、選択されたフォーク箇所候補f1がフォーク箇所候補f0にキャンセルされるので、試行組合せ{f0,f1,f2}からフォーク箇所候補f0は取り除かれて、試行組合せが{f1,f2}となる(ステップ137)。次に、試行組合せの並列実行性能が評価されて、その結果である3.8が得られる(ステップ130)。試行組合せの並列実行性能(3.8)はフォーク箇所候補の最良組合せの並列実行性能(3.2)よりも良いので(ステップ131)、フォーク箇所候補の最良組合せは{f1,f2}となる(ステップ132)。ループAにおいて未だ未選択のフォーク箇所候補が残っているので(ステップ133)、次にステップ126からループAの4回目の実行を開始する。
【0149】
・ループA実行4回目、ループB実行1回目(繰り返し1−4)
同様にして、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ126)。この時点で、フォーク箇所候補f0,f1,f2が選択済みなので、フォーク箇所候補f3が選択される。フォーク箇所候補f3はフォーク箇所候補の最良組合せ{f1,f2}に含まれていないので(ステップ127)、フォーク箇所候補の最良組合せ{f1,f2}にフォーク箇所候補f3を加え、試行組合せは{f1,f2,f3}となる(ステップ128)。次に、選択されたフォーク箇所候補f3がフォーク箇所候補f2にキャンセルされるので、試行組合せ{f1,f2,f3}からフォーク箇所候補f2は取り除かれて、試行組合せが{f1,f3}となる(ステップ137)。次に、試行組合せの並列実行性能が評価されて、その結果である2.8が得られる(ステップ130)。試行組合せの並列実行性能(2.8)はフォーク箇所候補の最良組合せ{f1,f2}の並列実行性能(3.8)よりも悪いので(ステップ131)、フォーク箇所候補の最良組合せは{f1,f2}のままである。ループAにおいてすべてのフォーク箇所候補を選択し(ステップ133)、またループAの実行の3回目で新たにフォーク箇所候補の最良組合せを得られたので(ステップ134)、すべてのフォーク箇所候補を未選択の状態にして(ステップ135)、次にステップ126からループB実行の2回目を開始する。
【0150】
・ループA実行1回目、ループB実行2回目(繰り返し2−1)
まず、ループAの実行において未選択のフォーク箇所候補で順序が一番上位のフォーク箇所候補を選択する(ステップ126)。この時点ではすべてのフォーク箇所候補が未選択なので、フォーク箇所候補f0が選択される。フォーク箇所候補f0はフォーク箇所候補の最良組合せ{f1,f2}に含まれていないので(ステップ127)、フォーク箇所候補の最良組合せ{f1,f2}にフォーク箇所候補f0を加え、試行組合せは{f0,f1,f2}となる(ステップ128)。次に、試行組合せの並列実行性能が評価されて、その結果である3.5が得られる(ステップ130)。試行組合せの並列実行性能(3.5)はフォーク箇所候補の最良組合せ{f1,f2}の並列実行性能(3.8)よりも悪いので(ステップ131)、フォーク箇所候補の最良組合せは{f1,f2}のままである。ループAにおいて未だ未選択のフォーク箇所候補が残っているので(ステップ133)、次にステップ126からループAの2回目の実行を開始する。
【0151】
以下、詳細な説明は省略するが、図8に示すような同様な動作を行う。
【0152】
・ループA実行2回目、ループB実行2回目(繰り返し2−2)
フォーク箇所候補f2を選択して試行組合せは{f1}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。
【0153】
・ループA実行3回目、ループB実行2回目(繰り返し2−3)
フォーク箇所候補f1を選択して試行組合せは{f2}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。
【0154】
・ループA実行4回目、ループB実行2回目(繰り返し2−4)
フォーク箇所候補f3を選択して試行組合せは{f1,f3}となる。フォーク箇所候補の最良組合せは{f1,f2}のままである。ループAにおいてすべてのフォーク箇所候補を選択し(ステップ133)、またループAの繰り返し実行において新たにフォーク箇所候補の最良組合せが得られなかったので(ステップ134)、フォーク箇所候補の最良組合せである{f1,f2}をフォーク箇所候補最良組合せ決定処理の処理結果として出力し(ステップ136)、終了する。
【0155】
以上説明したように第2の実施の形態の具体例によれば、マルチスレッド実行方法としてフォーク1回モデルを採用した場合に、互いに同時に実行可能なフォーク箇所候補の試行組合せのみを対象に並列実行性能を評価するので、8回の評価でフォーク箇所候補最良組合せ決定処理が終了することから明らかのように、第1の実施の形態の具体例に比べて、さらにフォーク箇所候補最良組合せ決定処理の処理時間を短縮できるという効果が得られる。
【0156】
[第3の実施の形態]
フォーク箇所候補の組合せの総数はフォーク箇所候補の数に対して指数関数的に増加するため、通常、フォーク箇所候補の数が増加するにつれてフォーク箇所候補最良組合せ決定処理の処理時間も急速に増加してしまう。これに対し、フォーク箇所候補を適当数にグループ分割し、各グループ毎に独立にフォーク箇所候補最良組合せ決定処理を行うと、フォーク箇所候補の組合せの総数を削減することができるため、フォーク箇所候補の数が多い場合でもフォーク箇所候補最良組合せ決定処理を高速に行うことができる。このとき、並列実行性能のより高いフォーク箇所候補を得るためにはフォーク箇所候補のグループ分割が特に重要であり、独立なフォーク箇所候補最良組合せ決定処理を可能にするために、グループ間ではなるべく互いに影響を及ぼし合わないようにグループ分割することが必要である。第3の実施の形態では、フォーク箇所候補間のキャンセル関係を参照し、キャンセル関係があれば関係が強く、なければ弱いとしてグループ分割することでこれを達成する。
【0157】
図9を参照すると、本発明の第3の実施の形態に係るプログラム並列化装置20”は、入力される逐次処理プログラム13の制御フローおよびデータフローの解析を行う制御・データフロー解析部21と、制御・データフロー解析部21による制御フローおよびデータフローの解析結果を参照して逐次処理プログラム13のフォーク箇所候補を決定するフォーク箇所候補決定部22と、フォーク箇所候補決定部22により決定された全フォーク箇所候補の集合を互いになるべく影響を及ぼし合わないようにフォーク箇所候補のグループに分割し、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補の試行組合せを生成し、それによる並列実行性能を並列実行性能評価部24によって評価した結果を参照してフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定処理を行い、各グループ毎の処理結果であるフォーク箇所候補の最良組合せの和を全体の処理結果として決定するフォーク箇所候補最良組合せ決定部23”と、フォーク箇所候補最良組合せ決定部23”より与えられるフォーク箇所候補の試行組合せにより逐次処理プログラム13を並列化したときの並列実行性能を、ある入力データ15に対して評価する並列実行性能評価部24と、フォーク箇所候補最良組合せ決定部23”により決定されたフォーク箇所候補の試行組合せに基づいて並列化プログラム14を生成し出力する並列化プログラム出力部25とを備える。
【0158】
図10(a)を参照すると、フォーク箇所候補最良組合せ決定部23”によるフォーク箇所候補最良組合せ決定処理は、グループ分割処理呼び出しステップ140と、グループに対するフォーク箇所候補最良組合せ決定処理ステップ141と、全グループ処理判定ステップ142と、結果出力ステップ143とからなる。
【0159】
図10(b)を参照すると、フォーク箇所候補最良組合せ決定部23”によるフォーク箇所候補のグループ分割処理は、フォーク箇所候補数・分割下限数比較ステップ146と、フォーク箇所候補分割ステップ147と、集合のグループへの分割ステップ148と、グループ分割処理呼び出しステップ149と、グループ分割処理呼び出しステップ150とからなる。
【0160】
次に、このように構成された第3の実施の形態に係るプログラム並列化装置20”の動作について説明する。
【0161】
制御・データフロー解析部21およびフォーク箇所候補決定部22の処理は、第1および第2の実施の形態における動作と全く同様であるので、説明を省略する。
【0162】
フォーク箇所候補決定部22の処理が終了すると、フォーク箇所候補最良組合せ決定部23”は、フォーク箇所候補決定部22により決定された全フォーク箇所候補の集合をFとして、図4(b)のフローチャートに示すフォーク箇所候補のグループ分割処理を呼び出す(ステップ140)。
【0163】
フォーク箇所候補のグループ分割処理では、フォーク箇所候補最良組合せ決定部23”は、フォーク箇所候補間のキャンセル関係を参照して2分木状にフォーク箇所候補をグループに分割するものとする。なお、分割下限数Mおよび指定数Nは適切に与えられる数であり、例えばM=300、N=M/2とすることができる。
【0164】
ステップ140から同図(b)に示すフォーク箇所候補のグループ分割処理が呼び出されると、フォーク箇所候補最良組合せ決定部23”は、まず、与えられたフォーク箇所候補の集合Fに属するフォーク箇所候補の数が指定された分割下限数Mより大きければ(ステップ146)、ステップ147から集合Fのグループ分割処理を開始する。小さければ、フォーク箇所候補最良組合せ決定部23”は、グループ分割処理を行わずにフォーク箇所候補のグループ分割処理を呼び出した元(ステップ140,ステップ149またはステップ150)にリターンする。
【0165】
次に、フォーク箇所候補最良組合せ決定部23”は、自身をキャンセルするフォーク箇所候補の数が指定数Nより大きいフォーク箇所候補の集合を集合Fから分割して新たにグループを生成する(ステップ147)。
【0166】
続いて、フォーク箇所候補最良組合せ決定部23”は、集合Fをさらに2つのグループFaおよびFbにグループ分割する(ステップ148)。このとき、グループFaに属するフォーク箇所候補をキャンセルするフォーク箇所候補の中でグループFbに属するフォーク箇所候補の数、およびグループFbに属するフォーク箇所候補をキャンセルするフォーク箇所候補の中でグループFaに属するフォーク箇所候補の数の総和をなるべく少なくするようにグループ分割を行う。これは、互いになるべくフォーク箇所候補間で相関がないようにグループ分割するためである。このとき、2つのグループFaおよびFbにそれぞれ属するフォーク箇所候補の数は同等の数である必要はなく、上記総和が小さくなる限り差があってもよい。
【0167】
次に、フォーク箇所候補最良組合せ決定部23”は、グループFaを集合Fとしてフォーク箇所候補のグループ分割処理を再帰的に呼び出してグループFaのグループ分割を行う(ステップ149)。
【0168】
同様に、フォーク箇所候補最良組合せ決定部23”は、グループFbを集合Fとしてフォーク箇所候補のグループ分割処理を再帰的に呼び出してグループFbのグループ分割を行う(ステップ150)。
【0169】
この後、フォーク箇所候補最良組合せ決定部23”は、フォーク箇所候補のグループ分割処理を呼び出した元(ステップ140,ステップ149またはステップ150)にリターンする。
【0170】
次に、フォーク箇所候補最良組合せ決定部23”は、ステップ140で分割されたフォーク箇所候補のグループの中で、フォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補最良組合せ決定処理を行う(ステップ141)。このフォーク箇所候補最良組合せ決定処理は、第1の実施の形態あるいは第2の実施の形態におけるフォーク箇所候補最良組合せ決定処理を適用してもよいし、各グループ毎のフォーク箇所候補の数が十分少ない場合は、グループ内のフォーク箇所候補のすべての組合せについて並列実行性能の評価を行ってフォーク箇所候補の最良組合せを決定してもよい。第1の実施の形態または第2の実施の形態におけるフォーク箇所候補最良組合せ決定処理を適用する場合、フォーク箇所候補の初期組合せをグループ内のフォーク箇所候補のみから構成することもできる。
【0171】
続いて、フォーク箇所候補最良組合せ決定部23”は、全グループの処理が完了したかどうかを判定し(ステップ142)、未処理のグループがあるならば、ステップ141に制御を戻して、未処理のグループに対するフォーク箇所候補最良組合せ決定処理を繰り返す。
【0172】
全グループの処理が完了した場合は、フォーク箇所候補最良組合せ決定部23”は、各グループ毎の処理結果であるフォーク箇所候補の組合せの和を全体の結果として出力する(ステップ143)。
【0173】
[第3の実施の形態の具体例]
図11を参照して、第3の実施の形態に係るプログラム並列化装置20”におけるフォーク箇所候補のグループ分割処理の具体例を説明する。
【0174】
全フォーク箇所候補の集合を集合Fとし、集合Fのグループ分割を行うとする。集合Fのフォーク箇所候補の数が分割下限数M以上とすると(ステップ146)、まず集合Fから自身をキャンセルするフォーク箇所候補の数が指定数N以上のフォーク箇所候補を分離して、新たなグループF0とする(ステップ147)。次に、集合Fを2つのグループF0−aとF0−bとに分割する(ステップ148)。すなわち、集合Fは、3つのフォーク箇所候補のグループF0,F0−a,F0−bに分割される。次に、グループF0−aおよびグループF0−bに対して再びフォーク箇所候補のグループ分割処理を行う(ステップ149および150)。
【0175】
同様に、グループF0−aのフォーク箇所候補の数が分割下限数M以上とすると、グループF0−aは、グループF1,F1−a,F1−bに分割される。グループF1−aおよびF1−bに対して再びフォーク箇所候補のグループ分割処理を行う。
【0176】
同様に、グループF1−aのフォーク箇所候補の数が分割下限数M以上とすると、グループF1−aは、グループF2,F2−a,F2−bに分割される。グループF2−aおよびF2−bに対して再びフォーク箇所候補のグループ分割処理を行う。
【0177】
次に、グループF2−aのフォーク箇所候補の数が分割下限数M以下とすると、これ以上分割されずグループF2−aをグループF3とする。
【0178】
次に、グループF2−bのフォーク箇所候補の数が分割下限数M以下とすると、これ以上分割されずグループF2−bをグループF4とする。
【0179】
同様に、グループF1−bのフォーク箇所候補の数が分割下限数M以下とすると、これ以上分割されずグループF1−bをグループF5とする。
【0180】
次に、グループF0−bのフォーク箇所候補の数が分割下限数M以上とすると、グループF0−bは、グループF6,F6−a,F6−bに分割される。グループF6−aおよびグループF6−bに対して再びフォーク箇所候補のグループ分割処理を行う。
【0181】
次に、グループF6−aのフォーク箇所候補の数が分割下限数M以下とすると、これ以上分割されずグループF6−aをグループF7とする。
【0182】
次に、グループF6−bのフォーク箇所候補の数が分割下限数M以下とすると、これ以上分割されずグループF6−bをグループF8とする。
【0183】
以上により、全フォーク箇所候補の集合Faが、相互に及ぼす影響の少ないフォーク箇所候補のグループF0〜F8に分割された。
【0184】
以上に説明したように、第3の実施の形態によれば、フォーク箇所候補をグループ間では互いになるべく影響を及ぼし合わないように適当数のグループに分割して、各グループ毎に独立にフォーク箇所候補最良組合せ決定処理を行うので、フォーク箇所候補の組合せの総数を削減することができ、フォーク箇所候補の数が多い場合でもフォーク箇所候補最良組合せ決定処理を高速に行うことができる。
【0185】
[第4の実施の形態]
図12は、本発明の第4の実施の形態に係るプログラム並列化装置20の構成を示すブロック図である。本実施の形態に係るプログラム並列化装置20は、図1に示した第1の実施の形態に係るプログラム並列化装置20に対してプログラム並列化プログラム400を付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付して、それらの詳しい説明を省略する。
【0186】
プログラム並列化プログラム400は、コンピュータでなるプログラム並列化装置20に読み込まれ、プログラム並列化装置20の動作を、制御・データフロー解析部21,フォーク箇所候補決定部22,フォーク箇所候補最良組合せ決定部23,並列実行性能評価部24,および並列化プログラム出力部25として制御する。プログラム並列化プログラム400の制御によるプログラム並列化装置20の動作は、第1の実施の形態におけるプログラム並列化装置20の動作と全く同様になるので、その詳しい説明を割愛する。
【0187】
[第5の実施の形態]
図13は、本発明の第5の実施の形態に係るプログラム並列化装置20’の構成を示すブロック図である。本実施の形態に係るプログラム並列化装置20’は、図6に示した第2の実施の形態に係るプログラム並列化装置20’に対してプログラム並列化プログラム400’を付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付して、それらの詳しい説明を省略する。
【0188】
プログラム並列化プログラム400’は、コンピュータでなるプログラム並列化装置20’に読み込まれ、プログラム並列化装置20’の動作を、制御・データフロー解析部21,フォーク箇所候補決定部22,フォーク箇所候補最良組合せ決定部23’,並列実行性能評価部24,および並列化プログラム出力部25として制御する。プログラム並列化プログラム400’の制御によるプログラム並列化装置20’の動作は、第2の実施の形態におけるプログラム並列化装置20’の動作と全く同様になるので、その詳しい説明を割愛する。
【0189】
[第6の実施の形態]
図14は、本発明の第6の実施の形態に係るプログラム並列化装置20”の構成を示すブロック図である。本実施の形態に係るプログラム並列化装置20”は、図9に示した第3の実施の形態に係るプログラム並列化装置20”に対してプログラム並列化プログラム400”を付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付して、それらの詳しい説明を省略する。
【0190】
プログラム並列化プログラム400”は、コンピュータでなるプログラム並列化装置20”に読み込まれ、プログラム並列化装置20”の動作を、制御・データフロー解析部21,フォーク箇所候補決定部22,フォーク箇所候補最良組合せ決定部23”,並列実行性能評価部24,および並列化プログラム出力部25として制御する。プログラム並列化プログラム400”の制御によるプログラム並列化装置20”の動作は、第3の実施の形態におけるプログラム並列化装置20”の動作と全く同様になるので、その詳しい説明を割愛する。
【0191】
【発明の効果】
第1の効果は、フォーク命令を逐次処理プログラムにより適切に挿入することができ、並列実行性能のより高い並列化プログラムを得ることができることである。その理由は、フォーク箇所候補の試行組合せに対して並列実行性能を直接評価した結果を基準にフォーク箇所候補の最良組合せを決定するからである。
【0192】
第2の効果は、フォーク箇所候補のすべての組合せに対して並列実行性能を評価する場合に比べて、フォーク箇所候補最良組合せ決定処理の処理時間を大幅に短縮できるということである。その理由は、フォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序に従ってその時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくためである。
【0193】
第3の効果は、フォーク箇所候補最良組合せ決定処理の処理時間をさらに短縮できるということである。その理由は、マルチスレッド実行方法としてフォーク1回モデルを採用した場合に、互いに同時に実行可能なフォーク箇所候補の試行組合せのみを対象に並列実行性能を評価するからである。
【0194】
第4の効果は、フォーク箇所候補の組合せの総数を削減することができ、フォーク箇所候補の数が多い場合でもフォーク箇所候補最良組合せ決定処理を高速に行うことができることである。その理由は、フォーク箇所候補をグループ間では互いになるべく影響を及ぼし合わないように適当数のグループに分割して各グループ毎に独立にフォーク箇所候補最良組合せ決定処理を行うからである。
【0195】
第5の効果は、並列実行性能を高速に評価することが可能であり、従ってフォーク箇所候補最良組合せ決定処理を高速に行うことができることである。その理由は、ターム点候補で決定されるスレッド要素の単位で並列実行のシミュレーションを行うようにしたからである。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態に係るプログラム並列化装置の構成を示すブロック図である。
【図2】本発明の第1の実施の形態におけるフォーク箇所候補最良組合せ決定処理を示すフローチャートである。
【図3】フォーク1回モデルにおけるマルチスレッド実行方法の一例を示す図である。
【図4】第1の実施の形態によるフォーク箇所候補最良組合せ決定処理の具体例を説明する図である。
【図5】第1の本実施の形態によるフォーク箇所候補最良組合せ決定処理の具体例を説明する図である。
【図6】本発明の第2の実施の形態に係るプログラム並列化装置の構成を示すブロック図である。
【図7】本発明の第2の実施の形態におけるフォーク箇所候補最良組合せ決定処理を示すフローチャートである。
【図8】第2の実施の形態によるフォーク箇所候補最良組合せ決定処理の具体例を説明する図である。
【図9】本発明の第3の実施の形態に係るプログラム並列化装置の構成を示すブロック図である。
【図10】本発明の第3の実施の形態におけるフォーク箇所候補最良組合せ決定処理を示すフローチャートである。
【図11】本発明の第3の実施の形態におけるフォーク箇所候補のグループ分割の一例を示す図である。
【図12】本発明の第4の実施の形態に係るプログラム並列化装置の構成を示すブロック図である。
【図13】本発明の第5の実施の形態に係るプログラム並列化装置の構成を示すブロック図である。
【図14】本発明の第6の実施の形態に係るプログラム並列化装置の構成を示すブロック図である。
【図15】マルチスレッド実行方法の概要を説明する図である。
【図16】従来のプログラム並列化装置の構成例を示すブロック図である。
【符号の説明】
13 逐次処理プログラム
14 並列化プログラム
15 入力データ
20,20’,20” プログラム並列化装置
21 制御・データフロー解析部
22 フォーク箇所候補決定部
23,23’,23” フォーク箇所候補最良組合せ決定部
24 並列実行性能評価部
25 並列化プログラム出力部
100,120 フォーク箇所候補生成ステップ
101,121 フォーク箇所候補順序付けステップ
102,122 フォーク箇所候補初期組合せ生成ステップ
103,123 逐次実行トレース生成ステップ
104,124 スレッド要素分割ステップ
105,125 スレッド要素情報解析・記憶ステップ
106,126 フォーク箇所候補選択ステップ
107,127 フォーク箇所候補最良組合せ判定ステップ
108,128 フォーク箇所候補加入・試行組合せ設定ステップ
109,129 フォーク箇所候補削除・試行組合せ設定ステップ
110,130 並列実行性能評価ステップ
111,131 並列実行性能比較ステップ
112,132 最良組合せ設定ステップ
113,133 全フォーク箇所候補選択判定ステップ
114,134 新最良組合せ発見判定ステップ
115,135 全フォーク箇所候補未選択設定ステップ
116,136 最良組合せ出力ステップ
137 キャンセルフォーク箇所候補削除ステップ
138 キャンセルフォーク箇所候補削除ステップ
140 グループ分割処理呼び出しステップ
141 グループに対するフォーク箇所候補最良組合せ決定処理ステップ
142 全グループ処理判定ステップ
143 結果出力ステップ
146 フォーク箇所候補数・分割下限数比較ステップ
147 フォーク箇所候補分割ステップ
148 集合のグループへの分割ステップ
149 グループ分割処理呼び出しステップ
150 グループ分割処理呼び出しステップ
400,400’,400” プログラム並列化プログラム
Claims (22)
- 逐次処理プログラムの制御フローおよびデータフローの解析を行う制御・データフロー解析部と、
前記制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定するフォーク箇所候補決定部と、
与えられたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する並列実行性能評価部と、
前記フォーク箇所候補決定部により決定されたフォーク箇所候補の試行組合せを生成し、これを前記並列実行性能評価部に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部と、
前記フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する並列化プログラム出力部と
を有することを特徴とするプログラム並列化装置。 - 逐次処理プログラムの制御フローおよびデータフローの解析を行う制御・データフロー解析部と、
前記制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定するフォーク箇所候補決定部と、
与えられたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する並列実行性能評価部と、
前記フォーク箇所候補決定部により決定されたフォーク箇所候補からフォーク1回モデル上で互いに同時に実行可能なフォーク箇所候補の組合せのみからなる試行組合せを生成し、これを前記並列実行性能評価部に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部と、
前記フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する並列化プログラム出力部と
を有することを特徴とするプログラム並列化装置。 - 前記並列実行性能評価部が、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成し、逐次実行トレースをすべてのターム点候補を分割点として分割し、各スレッド要素毎のスレッド要素情報を解析し、与えられたフォーク箇所候補の試行組合せに対して並列実行をスレッド要素の単位でシミュレートして並列実行性能を算出することを特徴とする請求項1または請求項2記載のプログラム並列化装置。
- 前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部により決定されたフォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序に従ってその時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくことを特徴とする請求項1,請求項2または請求項3記載のプログラム並列化装置。
- 前記フォーク箇所候補最良組合せ決定部が、求められたフォーク箇所候補の順序で上位から一定数を含むフォーク箇所候補の組合せを初期組合せとし、その初期組合せの並列実行性能を前記並列実行性能評価部によって評価し、初期組合せをこの時点でのフォーク箇所候補の最良組合せとすることを特徴とする請求項4記載のプログラム並列化装置。
- 前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部により決定された全フォーク箇所候補の集合を互いになるべく影響を及ぼし合わないようにフォーク箇所候補のグループに分割し、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補の試行組合せを生成し、それによる並列実行性能を前記並列実行性能評価部によって評価した結果を参照してフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定処理を行い、各グループ毎の処理結果であるフォーク箇所候補の最良組合せの和を全体の処理結果として決定することを特徴とする請求項1,請求項2または請求項3記載のプログラム並列化装置。
- 前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部の処理が終了すると、前記フォーク箇所候補決定部により決定された全フォーク箇所候補を集合としてフォーク箇所候補のグループ分割処理を呼び出し、フォーク箇所候補のグループ分割処理が呼び出されると、与えられたフォーク箇所候補の集合に属するフォーク箇所候補の数が指定された分割下限数より大きければ、集合のグループ分割処理を開始し、小さければ、グループ分割処理を行わずにフォーク箇所候補のグループ分割処理を呼び出した元にリターンし、自身をキャンセルするフォーク箇所候補の数が指定数より大きいフォーク箇所候補の集合を集合から分割して新たにグループを生成し、集合をさらに2つのグループにグループ分割し、一方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して一方のグループのグループ分割を行い、他方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して他方のグループのグループ分割を行い、フォーク箇所候補のグループ分割処理を呼び出した元にリターンし、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補最良組合せ決定処理を行い、全グループの処理が完了したかどうかを判定し、未処理のグループがあるならば、未処理のグループに対するフォーク箇所候補最良組合せ決定処理を繰り返し、全グループの処理が完了した場合は、各グループ毎の処理結果であるフォーク箇所候補の組合せの和を全体の結果として出力することを特徴とする請求項6記載のプログラム並列化装置。
- 逐次処理プログラムを複数のスレッドに分割し複数のプロセッサで並列に実行するマルチスレッド実行方法のためのプログラム並列化方法において、
逐次処理プログラムの制御フローおよびデータフローの解析を行う工程と、
制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定する工程と、
決定されたフォーク箇所候補からフォーク箇所候補の試行組合せを生成する工程と、
生成されたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する工程と、
評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定する工程と、
決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する工程と
を含むことを特徴とするプログラム並列化方法。 - 逐次処理プログラムを複数のスレッドに分割し複数のプロセッサで並列に実行するマルチスレッド実行方法のためのプログラム並列化方法において、
逐次処理プログラムの制御フローおよびデータフローの解析を行う工程と、
制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定する工程と、
決定されたフォーク箇所候補からフォーク1回モデル上で互いに同時に実行可能なフォーク箇所候補のみからなる試行組合せを生成する工程と、
生成されたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する工程と、
評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定する工程と、
決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する工程と
を含むことを特徴とするプログラム並列化方法。 - 制御・データフロー解析部が、逐次処理プログラムの制御フローおよびデータフローを解析する工程と、
フォーク箇所候補決定部が、制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照してフォーク箇所候補を生成する工程と、
フォーク箇所候補最良組合せ決定部が、すべてのフォーク箇所候補のそれぞれの並列実行性能に対する効果を予測し、その効果順にフォーク箇所候補に順序を付ける工程と、
フォーク箇所候補最良組合せ決定部が、最初に並列実行性能を評価するフォーク箇所候補の初期組合せを生成し、それをフォーク箇所候補の最良組合せとする工程と、
並列実行性能評価部が、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成する工程と、
並列実行性能評価部が、逐次実行トレースをすべてのターム点候補を分割点として分割する工程と、
並列実行性能評価部が、各スレッド要素毎のスレッド要素情報を解析し、それらを各スレッド要素毎に記憶する工程と、
フォーク箇所候補最良組合せ決定部が、未だ未選択のフォーク箇所候補の中で順序が一番上位のフォーク箇所候補を1つ選択する工程と、
フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれているか否かを判定する工程と、
フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていなければ、選択されたフォーク箇所候補をフォーク箇所候補の最良組合せに加え、そのフォーク箇所候補の組合せを試行組合せとする工程と、
フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていれば、フォーク箇所候補の最良組合せから選択されたフォーク箇所候補を取り除き、そのフォーク箇所候補の組合せを試行組合せとする工程と、
フォーク箇所候補最良組合せ決定部が、試行組合せによる並列化の並列実行性能を並列実行性能評価部によって評価する工程と、
フォーク箇所候補最良組合せ決定部が、試行組合せの並列実行性能と最良組合せの並列実行性能とを比較する工程と、
フォーク箇所候補最良組合せ決定部が、試行組合せの並列実行性能の方が良ければ、試行組合せを現時点でのフォーク箇所候補の最良組合せとする工程と、
フォーク箇所候補最良組合せ決定部が、未選択のフォーク箇所候補があるかどうかを判定し、未選択のフォーク箇所候補があれば繰り返し実行する工程と、
フォーク箇所候補最良組合せ決定部が、未選択のフォーク箇所候補がなければ、直前の繰り返し実行において、新たにフォーク箇所候補の最良組合せが見つかったかどうかを判定する工程と、
フォーク箇所候補最良組合せ決定部が、新たにフォーク箇所候補の最良組合せが見つかった場合には、すべてのフォーク箇所候補を未選択の状態にして繰り返し実行する工程と、
フォーク箇所候補最良組合せ決定部が、新たにフォーク箇所候補の最良組合せが見つからなかった場合には、決定されたフォーク箇所候補の最良組合せをフォーク箇所候補最良組合せ決定処理の結果として出力する工程と、
並列化プログラム出力部が、フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する工程と
を含むことを特徴とするプログラム並列化方法。 - 制御・データフロー解析部が、逐次処理プログラムの制御フローおよびデータフローを解析する工程と、
フォーク箇所候補決定部が、制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照してフォーク箇所候補を生成する工程と、
フォーク箇所候補最良組合せ決定部が、すべてのフォーク箇所候補のそれぞれの並列実行性能に対する効果を予測し、その効果順にフォーク箇所候補に順序を付ける工程と、
フォーク箇所候補最良組合せ決定部が、最初に並列実行性能を評価するフォーク箇所候補の初期組合せを生成し、それをフォーク箇所候補の最良組合せとする工程と、
並列実行性能評価部が、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成する工程と、
並列実行性能評価部が、逐次実行トレースをすべてのターム点候補を分割点として分割する工程と、
並列実行性能評価部が、各スレッド要素毎のスレッド要素情報を解析し、それらを各スレッド要素毎に記憶する工程と、
フォーク箇所候補最良組合せ決定部が、未だ未選択のフォーク箇所候補の中で順序が一番上位のフォーク箇所候補を1つ選択する工程と、
フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれているか否かを判定する工程と、
フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていなければ、選択されたフォーク箇所候補をフォーク箇所候補の最良組合せに加え、そのフォーク箇所候補の組合せを試行組合せとする工程と、
フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補をキャンセルするフォーク箇所候補を試行組合せから取り除く工程と、
フォーク箇所候補最良組合せ決定部が、選択されたフォーク箇所候補がフォーク箇所候補の最良組合せに含まれていれば、フォーク箇所候補の最良組合せから選択されたフォーク箇所候補を取り除き、そのフォーク箇所候補の組合せを試行組合せとする工程と、
フォーク箇所候補最良組合せ決定部が、試行組合せによる並列化の並列実行性能を並列実行性能評価部によって評価する工程と、
フォーク箇所候補最良組合せ決定部が、試行組合せの並列実行性能と最良組合せの並列実行性能とを比較する工程と、
フォーク箇所候補最良組合せ決定部が、試行組合せの並列実行性能の方が良ければ、選択されたフォーク箇所候補がキャンセルするフォーク箇所候補を試行組合せから取り除く工程と、
フォーク箇所候補最良組合せ決定部が、試行組合せを現時点でのフォーク箇所候補の最良組合せとする工程と、
フォーク箇所候補最良組合せ決定部が、未選択のフォーク箇所候補があるかどうかを判定し、未選択のフォーク箇所候補があれば繰り返し実行する工程と、
フォーク箇所候補最良組合せ決定部が、未選択のフォーク箇所候補がなければ、直前の繰り返し実行において、新たにフォーク箇所候補の最良組合せが見つかったかどうかを判定する工程と、
フォーク箇所候補最良組合せ決定部が、新たにフォーク箇所候補の最良組合せが見つかった場合には、すべてのフォーク箇所候補を未選択の状態にして繰り返し実行する工程と、
フォーク箇所候補最良組合せ決定部が、新たにフォーク箇所候補の最良組合せが見つからなかった場合には、決定されたフォーク箇所候補の最良組合せをフォーク箇所候補最良組合せ決定処理の結果として並列化プログラム出力部に出力する工程と、
並列化プログラム出力部が、フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する工程と
を含むことを特徴とするプログラム並列化方法。 - 前記並列実行性能を評価する工程で、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成し、逐次実行トレースをすべてのターム点候補を分割点として分割し、各スレッド要素毎のスレッド要素情報を解析し、与えられたフォーク箇所候補の試行組合せに対して並列実行をスレッド要素の単位でシミュレートして並列実行性能を算出することを特徴とする請求項8,請求項9,請求項10または請求項11記載のプログラム並列化方法。
- 前記フォーク箇所候補の最良組合せを決定する工程で、前記フォーク箇所候補決定部により決定されたフォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序に従ってその時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくことを特徴とする請求項8,請求項9,請求項10または請求項11記載のプログラム並列化方法。
- 前記フォーク箇所候補の最良組合せを決定する工程で、全フォーク箇所候補の集合を互いになるべく影響を及ぼし合わないようにフォーク箇所候補のグループに分割し、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補の試行組合せを生成し、それによる並列実行性能をある入力データに対して評価した結果を参照してフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定処理を行い、各グループ毎の処理結果であるフォーク箇所候補の最良組合せの和を全体の処理結果として決定することを特徴とする請求項8,請求項9,請求項10または請求項11記載のプログラム並列化方法。
- 前記フォーク箇所候補の最良組合せを決定する工程で、前記フォーク箇所候補決定部の処理が終了すると、フォーク箇所候補決定部により決定された全フォーク箇所候補を集合としてフォーク箇所候補のグループ分割処理を呼び出し、フォーク箇所候補のグループ分割処理が呼び出されると、与えられたフォーク箇所候補の集合に属するフォーク箇所候補の数が指定された分割下限数より大きければ、集合のグループ分割処理を開始し、小さければ、グループ分割処理を行わずにフォーク箇所候補のグループ分割処理を呼び出した元にリターンし、自身をキャンセルするフォーク箇所候補の数が指定数より大きいフォーク箇所候補の集合を集合から分割して新たにグループを生成し、集合をさらに2つのグループにグループ分割し、一方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して一方のグループのグループ分割を行い、他方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して他方のグループのグループ分割を行い、フォーク箇所候補のグループ分割処理を呼び出した元にリターンし、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補最良組合せ決定処理を行い、全グループの処理が完了したかどうかを判定し、未処理のグループがあるならば、未処理のグループに対するフォーク箇所候補最良組合せ決定処理を繰り返し、全グループの処理が完了した場合は、各グループ毎の処理結果であるフォーク箇所候補の組合せの和を全体の結果として出力することを特徴とする請求項8,請求項9,請求項10または請求項11記載のプログラム並列化方法。
- コンピュータを、逐次処理プログラムの制御フローおよびデータフローの解析を行う制御・データフロー解析部,前記制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定するフォーク箇所候補決定部,与えられたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する並列実行性能評価部,前記フォーク箇所候補決定部により決定されたフォーク箇所候補の試行組合せを生成し、これを前記並列実行性能評価部に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部,ならびに前記フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する並列化プログラム出力部として動作させることを特徴とするプログラム並列化プログラム。
- コンピュータを、逐次処理プログラムの制御フローおよびデータフローの解析を行う制御・データフロー解析部,前記制御・データフロー解析部による制御フローおよびデータフローの解析結果を参照して逐次処理プログラムのフォーク箇所候補を決定するフォーク箇所候補決定部,与えられたフォーク箇所候補の試行組合せにより逐次処理プログラムを並列化したときの並列実行性能を、ある入力データに対して評価する並列実行性能評価部,前記フォーク箇所候補決定部により決定されたフォーク箇所候補からフォーク1回モデル上で互いに同時に実行可能なフォーク箇所候補の組合せのみからなる試行組合せを生成し、これを前記並列実行性能評価部に与えて評価されたフォーク箇所候補の試行組合せの並列実行性能を基準にフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定部,ならびに前記フォーク箇所候補最良組合せ決定部により決定された最良組合せの各フォーク箇所候補にフォーク命令を挿入して並列化プログラムを生成し出力する並列化プログラム出力部として動作させることを特徴とするプログラム並列化プログラム。
- 前記並列実行性能評価部が、逐次処理プログラムを入力データで逐次実行したときの逐次実行トレースを生成し、逐次実行トレースをすべてのターム点候補を分割点として分割し、各スレッド要素毎のスレッド要素情報を解析し、与えられたフォーク箇所候補の試行組合せに対して並列実行をスレッド要素の単位でシミュレートして並列実行性能を算出することを特徴とする請求項16または請求項17記載のプログラム並列化プログラム。
- 前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部により決定されたフォーク箇所候補を並列実行性能への効果があると予測される順序に順序付けし、その順序に従ってその時点のフォーク箇所候補の最良組合せを基準に並列実行性能を評価してより良い組合せを構成していくことを特徴とする請求項16,請求項17または請求項18記載のプログラム並列化プログラム。
- 前記フォーク箇所候補最良組合せ決定部が、求められたフォーク箇所候補の順序で上位から一定数を含むフォーク箇所候補の組合せを初期組合せとし、その初期組合せの並列実行性能を前記並列実行性能評価部によって評価し、初期組合せをこの時点でのフォーク箇所候補の最良組合せとすることを特徴とする請求項19記載のプログラム並列化プログラム。
- 前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部により決定された全フォーク箇所候補の集合を互いになるべく影響を及ぼし合わないようにフォーク箇所候補のグループに分割し、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補の試行組合せを生成し、それによる並列実行性能を前記並列実行性能評価部によって評価した結果を参照してフォーク箇所候補の最良組合せを決定するフォーク箇所候補最良組合せ決定処理を行い、各グループ毎の処理結果であるフォーク箇所候補の最良組合せの和を全体の処理結果として決定することを特徴とする請求項16,請求項17または請求項18記載のプログラム並列化プログラム。
- 前記フォーク箇所候補最良組合せ決定部が、前記フォーク箇所候補決定部の処理が終了すると、前記フォーク箇所候補決定部により決定された全フォーク箇所候補を集合としてフォーク箇所候補のグループ分割処理を呼び出し、フォーク箇所候補のグループ分割処理が呼び出されると、与えられたフォーク箇所候補の集合に属するフォーク箇所候補の数が指定された分割下限数より大きければ、集合のグループ分割処理を開始し、小さければ、グループ分割処理を行わずにフォーク箇所候補のグループ分割処理を呼び出した元にリターンし、自身をキャンセルするフォーク箇所候補の数が指定数より大きいフォーク箇所候補の集合を集合から分割して新たにグループを生成し、集合をさらに2つのグループにグループ分割し、一方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して一方のグループのグループ分割を行い、他方のグループを集合としてフォーク箇所候補のグループ分割処理を再帰的に呼び出して他方のグループのグループ分割を行い、フォーク箇所候補のグループ分割処理を呼び出した元にリターンし、分割されたフォーク箇所候補のグループの中でフォーク箇所候補最良組合せ決定処理を未だ行っていないグループに対してフォーク箇所候補最良組合せ決定処理を行い、全グループの処理が完了したかどうかを判定し、未処理のグループがあるならば、未処理のグループに対するフォーク箇所候補最良組合せ決定処理を繰り返し、全グループの処理が完了した場合は、各グループ毎の処理結果であるフォーク箇所候補の組合せの和を全体の結果として出力することを特徴とする請求項21記載のプログラム並列化プログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003093076A JP4042604B2 (ja) | 2003-03-31 | 2003-03-31 | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム |
US10/811,925 US7533375B2 (en) | 2003-03-31 | 2004-03-30 | Program parallelization device, program parallelization method, and program parallelization program |
GB0407379A GB2400215B (en) | 2003-03-31 | 2004-03-31 | Parallel-processing device, method and program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003093076A JP4042604B2 (ja) | 2003-03-31 | 2003-03-31 | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004302706A true JP2004302706A (ja) | 2004-10-28 |
JP4042604B2 JP4042604B2 (ja) | 2008-02-06 |
Family
ID=32290554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003093076A Expired - Fee Related JP4042604B2 (ja) | 2003-03-31 | 2003-03-31 | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US7533375B2 (ja) |
JP (1) | JP4042604B2 (ja) |
GB (1) | GB2400215B (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006022204A1 (ja) * | 2004-08-23 | 2006-03-02 | Pacific Design Inc. | ソースプログラムの分析装置および方法 |
JP2007264734A (ja) * | 2006-03-27 | 2007-10-11 | Fujitsu Ltd | チューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法 |
US7530069B2 (en) | 2004-06-30 | 2009-05-05 | Nec Corporation | Program parallelizing apparatus, program parallelizing method, and program parallelizing program |
WO2009101976A1 (ja) * | 2008-02-15 | 2009-08-20 | Nec Corporation | プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム |
JP2017134443A (ja) * | 2016-01-25 | 2017-08-03 | 株式会社ドワンゴ | プロセッサ |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144602A1 (en) * | 2003-12-12 | 2005-06-30 | Tin-Fook Ngai | Methods and apparatus to compile programs to use speculative parallel threads |
JP3901180B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
JP3901182B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
US7793269B2 (en) * | 2005-02-15 | 2010-09-07 | Ebay Inc. | Parallel software testing based on a normalized configuration |
US7627864B2 (en) * | 2005-06-27 | 2009-12-01 | Intel Corporation | Mechanism to optimize speculative parallel threading |
US7975059B2 (en) * | 2005-11-15 | 2011-07-05 | Microsoft Corporation | Generic application level protocol analyzer |
WO2007084700A2 (en) * | 2006-01-19 | 2007-07-26 | University Of Maryland Office Of Technology Commercialization | System and method for thread handling in multithreaded parallel computing of nested threads |
US8527971B2 (en) | 2006-03-30 | 2013-09-03 | Atostek Oy | Parallel program generation method |
US8032821B2 (en) * | 2006-05-08 | 2011-10-04 | Microsoft Corporation | Multi-thread spreadsheet processing with dependency levels |
US8595744B2 (en) * | 2006-05-18 | 2013-11-26 | Oracle America, Inc. | Anticipatory helper thread based code execution |
US8176470B2 (en) * | 2006-10-13 | 2012-05-08 | International Business Machines Corporation | Collaborative derivation of an interface and partial implementation of programming code |
US20080141268A1 (en) * | 2006-12-12 | 2008-06-12 | Tirumalai Partha P | Utility function execution using scout threads |
US8201184B2 (en) * | 2007-09-13 | 2012-06-12 | Sas Institute Inc. | Systems and methods for parallelizing grid computer environment tasks |
WO2010064260A1 (en) * | 2008-12-01 | 2010-06-10 | Kpit Cummins Infosystems Ltd. | Method and system for parallelization of sequencial computer program codes |
US8572359B2 (en) * | 2009-12-30 | 2013-10-29 | International Business Machines Corporation | Runtime extraction of data parallelism |
US9696995B2 (en) * | 2009-12-30 | 2017-07-04 | International Business Machines Corporation | Parallel execution unit that extracts data parallelism at runtime |
US8683185B2 (en) | 2010-07-26 | 2014-03-25 | International Business Machines Corporation | Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set |
JP5139486B2 (ja) * | 2010-08-30 | 2013-02-06 | 株式会社東芝 | トレース生成装置、システム、およびそのプログラム |
CN101989192A (zh) * | 2010-11-04 | 2011-03-23 | 浙江大学 | 一种程序自动并行化的方法 |
KR101694306B1 (ko) * | 2012-12-14 | 2017-01-09 | 한국전자통신연구원 | 하드웨어 가속 장치의 병렬화에 따른 성능 예측 장치 및 방법 |
US9075666B2 (en) * | 2013-08-20 | 2015-07-07 | Synopsys, Inc. | Deferred execution in a multi-thread safe system level modeling simulation |
US9201708B2 (en) | 2013-08-20 | 2015-12-01 | Synopsys, Inc. | Direct memory interface access in a multi-thread safe system level modeling simulation |
US9817771B2 (en) | 2013-08-20 | 2017-11-14 | Synopsys, Inc. | Guarded memory access in a multi-thread safe system level modeling simulation |
JP6427055B2 (ja) * | 2015-03-31 | 2018-11-21 | 株式会社デンソー | 並列化コンパイル方法、及び並列化コンパイラ |
US10133827B2 (en) | 2015-05-12 | 2018-11-20 | Oracle International Corporation | Automatic generation of multi-source breadth-first search from high-level graph language |
US10127025B2 (en) | 2015-07-22 | 2018-11-13 | Oracle International Corporation | Optimization techniques for high-level graph language compilers |
US10810257B2 (en) | 2015-08-27 | 2020-10-20 | Oracle International Corporation | Fast processing of path-finding queries in large graph databases |
US9971570B2 (en) * | 2015-12-15 | 2018-05-15 | Oracle International Corporation | Automated generation of memory consumption aware code |
DE102017209697A1 (de) * | 2016-06-13 | 2017-12-14 | Denso Corporation | Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung |
JP2017228029A (ja) * | 2016-06-21 | 2017-12-28 | 株式会社デンソー | 並列化方法、並列化ツール、車載装置 |
US10540398B2 (en) | 2017-04-24 | 2020-01-21 | Oracle International Corporation | Multi-source breadth-first search (MS-BFS) technique and graph processing system that applies it |
CN107168796A (zh) * | 2017-05-12 | 2017-09-15 | 郑州云海信息技术有限公司 | 一种数据合并方法、装置、存储器及存储控制器 |
US10585945B2 (en) | 2017-08-01 | 2020-03-10 | Oracle International Corporation | Methods of graph-type specialization and optimization in graph algorithm DSL compilation |
US10795672B2 (en) | 2018-10-31 | 2020-10-06 | Oracle International Corporation | Automatic generation of multi-source breadth-first search from high-level graph language for distributed graph processing systems |
US11886916B2 (en) | 2020-06-30 | 2024-01-30 | Microsoft Technology Licensing, Llc | System for adaptive multithreaded recalculation operations |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4977582A (en) * | 1988-03-31 | 1990-12-11 | At&T Bell Laboratories | Synchronization of non-continuous digital bit streams |
US5450554A (en) * | 1991-11-11 | 1995-09-12 | Matsushita Electric Industrial Co., Ltd. | Apparatus for detecting possibility of parallel processing and method thereof and a program translation apparatus utilized therein |
JP2882475B2 (ja) | 1996-07-12 | 1999-04-12 | 日本電気株式会社 | スレッド実行方法 |
JP2970553B2 (ja) * | 1996-08-30 | 1999-11-02 | 日本電気株式会社 | マルチスレッド実行方法 |
EP0992916A1 (en) * | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Digital signal processor |
JP2001117890A (ja) | 1999-10-22 | 2001-04-27 | Nec Corp | 並列化コンパイル装置、並列化コンパイル方法及び並列化コンパイル用プログラムを記録した記録媒体 |
JP3641997B2 (ja) | 2000-03-30 | 2005-04-27 | 日本電気株式会社 | プログラム変換装置及び方法並びに記録媒体 |
JP3702813B2 (ja) * | 2001-07-12 | 2005-10-05 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
JP3702814B2 (ja) * | 2001-07-12 | 2005-10-05 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
-
2003
- 2003-03-31 JP JP2003093076A patent/JP4042604B2/ja not_active Expired - Fee Related
-
2004
- 2004-03-30 US US10/811,925 patent/US7533375B2/en not_active Expired - Fee Related
- 2004-03-31 GB GB0407379A patent/GB2400215B/en not_active Expired - Fee Related
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7530069B2 (en) | 2004-06-30 | 2009-05-05 | Nec Corporation | Program parallelizing apparatus, program parallelizing method, and program parallelizing program |
WO2006022204A1 (ja) * | 2004-08-23 | 2006-03-02 | Pacific Design Inc. | ソースプログラムの分析装置および方法 |
JPWO2006022204A1 (ja) * | 2004-08-23 | 2008-05-08 | パシフィック・デザイン株式会社 | ソースプログラムの分析装置および方法 |
JP4866241B2 (ja) * | 2004-08-23 | 2012-02-01 | 株式会社ガイア・システム・ソリューション | ソースプログラムの分析装置 |
JP2007264734A (ja) * | 2006-03-27 | 2007-10-11 | Fujitsu Ltd | チューニング支援装置、チューニング支援プログラム、チューニング支援プログラムを記録したコンピュータ読み取り可能な記録媒体およびチューニング支援方法 |
WO2009101976A1 (ja) * | 2008-02-15 | 2009-08-20 | Nec Corporation | プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム |
JP5278336B2 (ja) * | 2008-02-15 | 2013-09-04 | 日本電気株式会社 | プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム |
JP2017134443A (ja) * | 2016-01-25 | 2017-08-03 | 株式会社ドワンゴ | プロセッサ |
Also Published As
Publication number | Publication date |
---|---|
GB2400215B (en) | 2005-09-28 |
US7533375B2 (en) | 2009-05-12 |
JP4042604B2 (ja) | 2008-02-06 |
GB0407379D0 (en) | 2004-05-05 |
GB2400215A (en) | 2004-10-06 |
US20040194074A1 (en) | 2004-09-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
JP4957729B2 (ja) | プログラム並列化方法、プログラム並列化装置及びプログラム | |
US6044222A (en) | System, method, and program product for loop instruction scheduling hardware lookahead | |
JP3664473B2 (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
US5828886A (en) | Compiling apparatus and method for promoting an optimization effect of a program | |
US6487715B1 (en) | Dynamic code motion optimization and path tracing | |
US20040154010A1 (en) | Control-quasi-independent-points guided speculative multithreading | |
US8893080B2 (en) | Parallelization of dataflow actors with local state | |
US20110119660A1 (en) | Program conversion apparatus and program conversion method | |
JP6141365B2 (ja) | 逐次コンピュータプログラムコードを並列処理する方法及びシステム | |
JP2001282549A (ja) | プログラム変換装置及び方法並びに記録媒体 | |
KR20080093108A (ko) | 프로그램 병렬 실행 시스템 및 방법 | |
US8250502B2 (en) | Automated synthesis apparatus and method | |
EP3908920B1 (en) | Optimizing hardware fifo instructions | |
Lakshminarayana et al. | Incorporating speculative execution into scheduling of control-flow-intensive designs | |
KR102161055B1 (ko) | 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 | |
JPH04293150A (ja) | コンパイル方法 | |
Koizumi et al. | Reduction of instruction increase overhead by STRAIGHT compiler | |
JP6776914B2 (ja) | 並列化方法、並列化ツール | |
Anantha et al. | Code compaction for parallel architectures | |
JPH03135630A (ja) | 命令スケジューリング方式 | |
Ying | Scaling sequential code with hardware-software co-design for fine-grain speculative parallelization | |
KR100924383B1 (ko) | 하드웨어/소프트웨어 통합 설계 기반의 스케줄링 시스템 및방법 | |
JP2002318689A (ja) | 資源使用サイクルの遅延指定付き命令を実行するvliwプロセッサおよび遅延指定命令の生成方法 | |
Avetisyan et al. | GCC instruction scheduler and software pipelining on the Itanium platform |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040618 |
|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20050128 |
|
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: 20061023 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20061226 |
|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20070125 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070216 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070125 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20070302 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070828 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070912 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070912 |
|
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: 20071023 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071105 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4042604 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: 20101122 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111122 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111122 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121122 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121122 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131122 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |