JP2009129179A - プログラム並列化支援装置およびプログラム並列化支援方法 - Google Patents
プログラム並列化支援装置およびプログラム並列化支援方法 Download PDFInfo
- Publication number
- JP2009129179A JP2009129179A JP2007303331A JP2007303331A JP2009129179A JP 2009129179 A JP2009129179 A JP 2009129179A JP 2007303331 A JP2007303331 A JP 2007303331A JP 2007303331 A JP2007303331 A JP 2007303331A JP 2009129179 A JP2009129179 A JP 2009129179A
- Authority
- JP
- Japan
- Prior art keywords
- dependency
- parallelization
- program
- information
- deterministic
- 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.)
- Abandoned
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)
- Stored Programmes (AREA)
Abstract
【課題】プログラムの並列化を効率的に行える処理命令の依存関係情報を出力することができるプログラム並列化支援装置を提供する。
【解決手段】プログラム並列化支援装置1は、プログラム12a中のデータ依存、制御依存及びポインタ依存の少なくとも1つの依存関係における決定性を判定し、プログラム12aのクリティカルパスを抽出し、クリティカルパス上に存在し、かつ依存関係における決定性が非決定的である処理命令を抽出する。さらに、プログラム並列化支援装置1は、抽出された非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する。
【選択図】図3
【解決手段】プログラム並列化支援装置1は、プログラム12a中のデータ依存、制御依存及びポインタ依存の少なくとも1つの依存関係における決定性を判定し、プログラム12aのクリティカルパスを抽出し、クリティカルパス上に存在し、かつ依存関係における決定性が非決定的である処理命令を抽出する。さらに、プログラム並列化支援装置1は、抽出された非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する。
【選択図】図3
Description
本発明は、プログラム並列化支援装置およびプログラム並列化支援方法に関し、特に、 プログラムの並列化を効率的に行えるように支援するプログラム並列化支援装置およびプログラム並列化支援方法に関する。
従来より、プログラムの自動並列化手法が提案されているが、並列化可能な部分を抽出する依存関係解析を全自動で詳細に行なうために、並列化対象の逐次実行プログラムに対して、プログラムを開発する者には、種々の制限が強いられる。制限としては、例えば、関数ポインタの使用禁止、動的なメモリ確保の禁止、必要な情報を付加するための拡張記述の強制、などがある。
一方、人手によりプログラムの並列化を行なう場合、例えば、プログラム中の関数と関数の依存関係をコールグラフを用いて表現する手法、文と文の依存関係をコントロールデータフローグラフ(CDFG)を用いて表現する手法、システム依存グラフを作成し頂点探索を行なうことでプログラムの特定の文との間に依存関係のある文を抜き出すプログラムスライシング手法、などを併用することにより、並列化可能な部分、並列化を阻害している依存関係を効果的に把握する手法が、ある。
しかし、これらの手法を大規模な逐次実行プログラムの解析に適用した場合、例えば、関数間の関係には種々の関係があるため、その種々の関係が混在して、表示あるいはリストアップされるため、解析者にとっては、解析作業が膨大でかつ繁雑なものとなる。例えば、2つの関数の関係としては、常に互いに依存する関係、パラメータなどの条件によっては互いに依存する関係、解析が十分に出来ず安全のために依存すると表示される関係、などがある。
従って、大規模なプログラムの場合、表示画面上に種々の関係が混在して表示されるため、プログラム開発者にとっては、並列度向上のために精査すべき依存関係の数が多過ぎ、かつ並列度向上のための作業が膨大となり、プログラムの並列化の作業は現実的に不可能となるという問題があった。
また、例えば、特開2005−267024号公報及び特開平7−36680号公報には、プログラムの並列化処理を行うに際し、プログラムブロックの単位で処理の並列化を行うことによって、プログラムブロックの単位での処理の高速化を図る技術が開示されている。
しかし、これらの提案にかかる技術を用いても、上述したような大規模なプログラムの場合、出力される情報量が多いため、やはり開発者にとっては、並列度向上のための解析作業が膨大でかつ繁雑なものとなるという問題がある。
特開2005−267024号公報
特開平7−36680号公報
そこで、本発明は、プログラムの並列化を効率的に行える処理命令の依存関係情報を出力することができるプログラム並列化支援装置及びプログラム並列化支援方法を提供することを目的とする。
本発明の一態様によれば、プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも1つの依存関係における決定性を判定する決定性判定部と、プログラムのクリティカルパスを抽出するクリティカルパス抽出部と、前記クリティカルパス上に存在し、かつ前記決定性判定部において前記依存関係における決定性が非決定的である処理命令を抽出する処理命令抽出部と、抽出された前記非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する並列化情報出力部と、を有するプログラム並列化支援装置を提供することができる。
本発明の一態様によれば、プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも1つの依存関係における決定性を判定し、プログラムのクリティカルパスを抽出し、前記クリティカルパス上に存在し、かつ前記依存関係における決定性が非決定的である処理命令を抽出し、抽出された前記非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力するプログラム並列化支援方法を提供することができる。
本発明のプログラム並列化支援装置及びプログラム並列化支援方法によれば、プログラムの並列化を効率的に行える処理命令の依存関係情報を出力することができる。
以下、図面を参照して本発明の実施の形態を説明する。
(第1の実施の形態)
1.全体構成
まず、本発明の第1の実施の形態に係わるプログラム並列化支援装置の構成を説明する。図1は、本実施の形態に係わるプログラム並列化支援装置の構成を示す構成図である。
(第1の実施の形態)
1.全体構成
まず、本発明の第1の実施の形態に係わるプログラム並列化支援装置の構成を説明する。図1は、本実施の形態に係わるプログラム並列化支援装置の構成を示す構成図である。
プログラム並列化支援装置(以下、単に並列化支援装置という)1は、パーソナルコンピュータ(PC)等のコンピュータ本体11と、後述する各種のプログラム及びデータを記憶する記憶装置12と、グラフィカルユーザインターフェース(GUI)を構成する表示装置13とを含んで構成されている。
記憶装置12には、並列化の対象プログラム12aと、後述する文間依存関係情報データベース12bと、本実施の形態にかかる並列化支援処理プログラム12cとが記憶されている。
記憶装置12には、並列化の対象プログラム12aと、後述する文間依存関係情報データベース12bと、本実施の形態にかかる並列化支援処理プログラム12cとが記憶されている。
プログラムの並列化を行う開発者(以下、ユーザともいう)は、並列化支援装置1を用いて、キーボード、マウス等の図示しない入力装置を操作して、並列化の対称となるプログラムに対して各種処理の指示を出すことによって、後述するような解析処理等を行うことができる。
なお、図1の並列化支援装置1は、PC等のコンピュータ装置であるが、ネットワークに接続され、サーバ等のセンタ装置に以下に説明する機能を実行させて、PC等のクライアントからユーザが各種処理の指示をさせるような構成のシステムでもよい。
2.プログラム例
以下、例を用いて説明するが、説明を簡単にするために、簡単なプログラムの例を挙げて、プログラムをマルチプロセッサ向けに並列化を行う場合について説明する。
図2は、複数のデータを読み出して、所定の処理を施したデータを出力するプログラムの例を示す図である。ここでは、図2の逐次記述プログラムが、1つのホストプロセッサと複数の並列演算プロセッサによって構成されるマルチプロセッサシステム向けに並列化される。プログラムを実行するマルチプロセッサは、ヘテロジニアスマルチプロセッサでもよいし、ホモジニアスマルチプロセッサでもよい。
以下、例を用いて説明するが、説明を簡単にするために、簡単なプログラムの例を挙げて、プログラムをマルチプロセッサ向けに並列化を行う場合について説明する。
図2は、複数のデータを読み出して、所定の処理を施したデータを出力するプログラムの例を示す図である。ここでは、図2の逐次記述プログラムが、1つのホストプロセッサと複数の並列演算プロセッサによって構成されるマルチプロセッサシステム向けに並列化される。プログラムを実行するマルチプロセッサは、ヘテロジニアスマルチプロセッサでもよいし、ホモジニアスマルチプロセッサでもよい。
プログラム21は、所定のメモリ領域から4つの入力データを読み出して、所定の演算処理を施して、出力データを所定のメモリ領域に書き込む処理を行うプログラムである。図2に示すように、プログラム21が実行されると、4つの入力データは、4つの記憶領域p,q,r,sから読み出されて、出力データは、記憶領域wに書き込まれる。
プログラム21は、大きくは、mainのプログラム部分22と、int testの関数のプログラム部分23に分けられる。さらに、プログラム部分23は、for文のプログラムの部分24を含んでいる。
mainのプログラム部分22において、if文があり、所定の条件が成立したとき(ケース22a)は、所定の入力データを用いた、int testの関数の処理命令22a1が実行される。所定の条件が成立しないとき(ケース22b)は、処理命令22a1の入力データとは異なる所定の入力データを用いた、int testの関数の処理命令22b1が実行される。
このプログラム21中には、いくつかの依存関係がある。例えば、このmainのプログラム部分22において、処理命令22b1では、配列データx[]については、入力データの一つとして配列データx[0]を読み出して、配列データx[1]に書き込み、以下同様にして、配列データx[1]を読み出して、配列データx[2]に書き込む、というようにして、256回の演算処理は行われる。
従って、処理命令22b1では、配列データx[]は、前の演算処理が終わらないと、次の配列データx[]を用いた演算処理を実行することができない、というデータの依存関係がある。逆にいうと、依存関係があるため、処理命令22b1については、並列化を行えないことになる。プログラム21中の他の依存関係については、後述する。
従って、処理命令22b1では、配列データx[]は、前の演算処理が終わらないと、次の配列データx[]を用いた演算処理を実行することができない、というデータの依存関係がある。逆にいうと、依存関係があるため、処理命令22b1については、並列化を行えないことになる。プログラム21中の他の依存関係については、後述する。
3.並列化支援処理の全体の流れ
並列化支援装置1は、プログラム21中の文を解析して、文間の依存関係を抽出する機能を有する。
次に、並列化支援装置1の処理の流れについて説明する。並列化支援装置1の処理は、PC等の中央処理装置(CPU)によって実行される。
図3は、本実施の形態に係わる並列化支援装置1の並列化支援処理プログラム12cの処理の流れの例を示すフローチャートである。図4は、文間依存関係情報データベースの例を示す図である。
並列化支援装置1は、プログラム21中の文を解析して、文間の依存関係を抽出する機能を有する。
次に、並列化支援装置1の処理の流れについて説明する。並列化支援装置1の処理は、PC等の中央処理装置(CPU)によって実行される。
図3は、本実施の形態に係わる並列化支援装置1の並列化支援処理プログラム12cの処理の流れの例を示すフローチャートである。図4は、文間依存関係情報データベースの例を示す図である。
図3に示すように、並列化支援装置1では、まず、解析対称であるマルチプロセッサ向けのプログラムコード(以下、単にプログラムともいう)12aが読み込まれ、静的依存関係解析部31が、入力されたプログラム12aに対する静的な解析を行うことによって、プログラムの文と文の間の依存関係(以下、文間依存関係という)を解析する静的依存関係解析の処理を行う。以下、プログラム12aが上述したプログラム21である場合の例で説明する。
3.1 静的依存関係解析
静的依存関係解析部31は、静的依存関係解析の結果を、図4の文間依存関係情報データベース12bに依存関係情報31aとして登録する。
静的依存関係解析部31は、静的依存関係解析の結果を、図4の文間依存関係情報データベース12bに依存関係情報31aとして登録する。
ここで、静的依存関係解析部31の処理内容について説明する。
静的依存関係解析部31は、プログラムコードを一行ずつ解析してき、依存関係のある文、すなわち処理命令、を抽出する。例えば、プログラム21の15行目の文「a=p[i];」と、19行目の文「e=a-b;」との間には、データの依存関係(Data)があることが検出される。このような依存関係の解析を全行、すなわち全ての文に対して行い、依存関係のあった文についてのみ、依存関係情報を抽出して文間依存関係情報データベース12bに登録される。
静的依存関係解析部31は、プログラムコードを一行ずつ解析してき、依存関係のある文、すなわち処理命令、を抽出する。例えば、プログラム21の15行目の文「a=p[i];」と、19行目の文「e=a-b;」との間には、データの依存関係(Data)があることが検出される。このような依存関係の解析を全行、すなわち全ての文に対して行い、依存関係のあった文についてのみ、依存関係情報を抽出して文間依存関係情報データベース12bに登録される。
(文間依存関係情報データベースの構成)
文間依存関係が検出されると、その情報は、図4に示す文間依存関係情報データベース12bに登録される。図4の文間依存関係情報データベース12bは、表形式のデータである。文間依存関係情報データベース12bは、依存元の文の場所、依存元の文の関数名、依存元の文の基本ブロック番号、依存先の文の場所、依存先の文の関数名、依存先の文の基本ブロック番号、キャリー性、依存の種類、決定性、クリティカルパス、並列化効果、並列化工数、有効の各欄41aから41mを有する。文間依存関係情報データベース12bに登録される各依存関係情報は、各項目の情報を有する。
文間依存関係が検出されると、その情報は、図4に示す文間依存関係情報データベース12bに登録される。図4の文間依存関係情報データベース12bは、表形式のデータである。文間依存関係情報データベース12bは、依存元の文の場所、依存元の文の関数名、依存元の文の基本ブロック番号、依存先の文の場所、依存先の文の関数名、依存先の文の基本ブロック番号、キャリー性、依存の種類、決定性、クリティカルパス、並列化効果、並列化工数、有効の各欄41aから41mを有する。文間依存関係情報データベース12bに登録される各依存関係情報は、各項目の情報を有する。
関数名の項目の欄41b,41eには文が所属する関数名が記録される。基本ブロック番号の項目の欄41c,41fには文が所属する基本ブロック番号が記録される。
なお、ブロック番号は、ここでは、プログラム21中に、for文などがあれば、そのfor文の部分は1つのブロックとするようなルールで決定される。例えば、ここでは、プログラム21中、6行目から9行目まで(for文)が第1のブロック、10行目から12行目までが第2のブロック、13行目から25行目まで(for文)が、第3のブロックというように決定される。
なお、ブロック番号は、ここでは、プログラム21中に、for文などがあれば、そのfor文の部分は1つのブロックとするようなルールで決定される。例えば、ここでは、プログラム21中、6行目から9行目まで(for文)が第1のブロック、10行目から12行目までが第2のブロック、13行目から25行目まで(for文)が、第3のブロックというように決定される。
キャリー性の項目の欄41gには、関数出口付近で定義され、その次以降の関数の呼び出し時に使用されるstatic変数のデータ依存関係や、ループ出口付近で定義され、その次以降のループイタレーションで使用される変数のデータ依存関係などがある場合に記録される。従って、キャリー性の項目は、ループ内の文間依存関係の場合は、キュリー性は無し、すなわち「F」で、ループ間の文間依存関係の場合は、キャリー性は有り、すなわち「T」となる。
依存の種類の項目の欄41hには、if文やwhile文などの制御文から制御される文への依存関係である制御依存(Ctrl)、変数への値の定義を行なう文から値を使用する文への依存関係を示すデータ依存(Data)、ポインタ変数などメモリ上の位置を示す変数の先値の定義から同じポインタ変数または別名となっている別のポインタ変数の示す先の値を示す文への依存関係を示すポインタ依存(Ptr)のいずれかの依存関係の種類が記録される。決定性の項目の欄41iには、依存関係が常に成立する決定的な依存関係なのか、依存しないこともある非決定的な依存関係なのかが記録される。
クリティカルパスの項目の欄41jには、注目する文が、プログラムの開始点から終了点までのクリティカルパス(CP)上にあるか否かが記録される。
並列化効果の項目の欄41kには、クリティカルパス(CP)上でかつ非決定的な依存関係の場合に、その依存関係と並行する他のクリティカルパス(CP)上の依存関係のうち非決定的な依存関係がすべて無効化できた場合に、再スケジューリングを行なって短縮されるクリティカルパス(CP)の長さあるいは段数が記録される。
並列化工数の項目の欄41lの項には、注目する依存関係に関連した並列化を実現するために無効化する必要のある依存関係のパスの数が記録される。具体的には、注目する依存関係のパスがクリティカルパス(CP)上のものでさらに非決定的な場合に、並行する他のクリティカルパス(CP)のパスの数に1を足した値が記録される。なお、ここでは、決定的なクリティカルパス(CP)が並行している場合、工数は無限大となる。有効の項目の欄41mについては、後述する。
図5は、図3の静的依存関係解析部31の静的依存関係解析の処理内容を説明するための図である。
まず、プログラムコード12aが読み込まれると、コントロールフローグラフ構築部51が、コントロールデータフローグラフとコールグラフを構築する処理を実行する。よって、コントールフローグラフ構築部51は、コールグラフ構築部も含んでいる。
コントロールフローグラフ構築部51の処理によって、コントロールフローグラフ(CFG)とコールグラフ(CG)の情報51aが生成される。
まず、プログラムコード12aが読み込まれると、コントロールフローグラフ構築部51が、コントロールデータフローグラフとコールグラフを構築する処理を実行する。よって、コントールフローグラフ構築部51は、コールグラフ構築部も含んでいる。
コントロールフローグラフ構築部51の処理によって、コントロールフローグラフ(CFG)とコールグラフ(CG)の情報51aが生成される。
次に、生成されたコントロールフローグラフ(CFG)の情報に基づいて、3つの依存関係の解析が実行される。
3つの依存関係の解析処理は、それぞれ、変数定義/使用解析部52と、コントロール依存関係解析部53と、ポインタ解析部54によって実行される。変数定義/使用解析部52と、コントロール依存関係解析部53と、ポインタ解析部54は、それぞれ、コントロールフローグラフ(CFG)の情報を用いて依存関係の解析を行い、解析の結果得られた依存関係情報を文間依存関係情報データベース12bに登録していく。
3つの依存関係の解析処理は、それぞれ、変数定義/使用解析部52と、コントロール依存関係解析部53と、ポインタ解析部54によって実行される。変数定義/使用解析部52と、コントロール依存関係解析部53と、ポインタ解析部54は、それぞれ、コントロールフローグラフ(CFG)の情報を用いて依存関係の解析を行い、解析の結果得られた依存関係情報を文間依存関係情報データベース12bに登録していく。
3.1.1 データ依存関係の解析
変数定義/使用解析部52は、コントロールフローグラフ(CFG)の情報から、変数の情報に基づいて、データの依存関係(Data)があるか否かを、解析して判定する。例えば、図2のプログラム21のfor文中、15行目の文「a=p[i];」と、19行目の文「e=a-b;」との間にデータの依存関係(Data)があると判定される。
変数定義/使用解析部52は、コントロールフローグラフ(CFG)の情報から、変数の情報に基づいて、データの依存関係(Data)があるか否かを、解析して判定する。例えば、図2のプログラム21のfor文中、15行目の文「a=p[i];」と、19行目の文「e=a-b;」との間にデータの依存関係(Data)があると判定される。
例えば、上述したプログラム21の15行目の文「a=p[i];」と、19行目の文「e=a-b;」との間にデータの依存関係(Data)があることは、文間依存関係情報データベース12bの1行目に、依存関係情報として登録されている。
すなわち、図4の1行目には、依存元の文の場所欄41aには、ファイル名が「a.c」で、プログラムの15行目で、その15行目の左から17文字目からの文であることが示されている。依存元の文の関数名欄41bには、関数名が「test」であることが示されている。依存元の文の基本ブロック番号欄41cには、基本ブロック番号が「3」であることが示されている。依存先の文の場所欄41dには、ファイル名が「a.c」で、プログラムの19行目で、その19行目の左から17文字目からの文であることが示されている。依存先の文の関数名欄41eには、関数名が「test」であることが示されている。依存先の文の基本ブロック番号欄41fには、基本ブロック番号が「3」であることが示されている。
さらに、キャリー性は、無し「F」であり、依存の種類は、データ依存「Data」であり、決定性は、有り「T」があることが記録されている。決定性の解析については後述する。
3.1.2 コントロール依存関係の解析
コントロール依存関係解析部53は、コントロールフローグラフ(CFG)の情報から、if文等の所定の命令の有無に基づいて、コントロールの依存関係(Ctrl)があるか否かを、解析して判定する。図2のプログラム部分22bでは、if文があり、そのif文に続く文において、他の基本ブロックに処理が飛んでいるため、コントロールの依存関係(Ctrl)があると判定される。具体的には、図2のプログラム21の34行目の17文字目から始まる処理命令の文「test(&v[0],&w[0],&x[0],&y[0],&z[0]」と、1行目の1文字目から始まる処理命令の文「int test (int *p_in,int *q_in,int *r_in,int *s_in,int *w_out) {」との間で、コントロールの依存関係(Ctrl)があると判定される。
コントロール依存関係解析部53は、コントロールフローグラフ(CFG)の情報から、if文等の所定の命令の有無に基づいて、コントロールの依存関係(Ctrl)があるか否かを、解析して判定する。図2のプログラム部分22bでは、if文があり、そのif文に続く文において、他の基本ブロックに処理が飛んでいるため、コントロールの依存関係(Ctrl)があると判定される。具体的には、図2のプログラム21の34行目の17文字目から始まる処理命令の文「test(&v[0],&w[0],&x[0],&y[0],&z[0]」と、1行目の1文字目から始まる処理命令の文「int test (int *p_in,int *q_in,int *r_in,int *s_in,int *w_out) {」との間で、コントロールの依存関係(Ctrl)があると判定される。
3.1.3 コントロール依存関係の解析
ポインタ解析部54は、コントロールフローグラフ(CFG)の情報から、ポインタの情報に基づいて、ポインタの依存関係(Ptr)があるか否かを、解析して判定する。例えば、図2のプログラム21のfor文中、24行目の文「w[i]=k;」と、15行目の文「a=p[i];」との間にポインタの依存関係(Ptr)があると判定される。すなわち、「w[i]」と「p[i]」のそれぞれのポインタが、メモリ上で同じ位置を指しているかは不明であるので、ポインタの依存関係(Ptr)が有る、あるいは有る可能性があると判定される。
ポインタ解析部54は、コントロールフローグラフ(CFG)の情報から、ポインタの情報に基づいて、ポインタの依存関係(Ptr)があるか否かを、解析して判定する。例えば、図2のプログラム21のfor文中、24行目の文「w[i]=k;」と、15行目の文「a=p[i];」との間にポインタの依存関係(Ptr)があると判定される。すなわち、「w[i]」と「p[i]」のそれぞれのポインタが、メモリ上で同じ位置を指しているかは不明であるので、ポインタの依存関係(Ptr)が有る、あるいは有る可能性があると判定される。
コントール依存関係情報解析部53の処理の結果情報は、コントロール依存関係情報53aとして、文間依存関係情報データベース12bに出力され、登録される。
さらに、コントロール依存関係解析部53の結果情報は、2つの決定性解析部55,56に供給される。
さらに、コントロール依存関係解析部53の結果情報は、2つの決定性解析部55,56に供給される。
3.1.4 決定性の解析
変数定義/使用解析部52からの情報と、決定性解析部55からの決定性の情報とから、データ依存の依存関係情報(以下、データ依存関係情報ともいう)52aが生成される。また、ポインタ解析部54からの情報と、決定性解析部56からの決定性の情報とから、ポインタ依存の依存関係情報(以下、ポインタ依存関係情報ともいう)54aが生成される。データ依存関係情報52aとポインタ依存関係情報54aも、文間依存関係情報データベース12bに出力され、登録される。
変数定義/使用解析部52からの情報と、決定性解析部55からの決定性の情報とから、データ依存の依存関係情報(以下、データ依存関係情報ともいう)52aが生成される。また、ポインタ解析部54からの情報と、決定性解析部56からの決定性の情報とから、ポインタ依存の依存関係情報(以下、ポインタ依存関係情報ともいう)54aが生成される。データ依存関係情報52aとポインタ依存関係情報54aも、文間依存関係情報データベース12bに出力され、登録される。
ここで、決定性の解析について説明する。決定性の解析は、決定性解析部55、56及びコントロール依存関係解析部53において実行される。決定性解析部55、56及びコントロール依存関係解析部53は、それぞれ、プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも1つの依存関係における決定性を判定する決定性判定部を構成する。
図6は、決定性解析部55における決定性の判定に関する処理の流れの例を示すフローチャートである。
まず、コントロールフローグラフ(CFG)を用いて、到達する定義のデータフロー方程式を解く処理が実行される(ステップS11)。その方程式を解いた結果、ポインタの唯一の到達する定義があるか否かが判定される(ステップS12)。ステップS12では、簡単に言えば、変数のポインタが指すメモリのデータは、確定的なデータであるか否かが判定される。
ステップS12でYESの場合は、決定性は「真」すなわちT(True)となる(ステップS13)。ステップS12でNOの場合は、決定性は「偽」すなわちF(False)となる(ステップS14)。上述した図2の場合、w[i]とp[i]のそれぞれのポインタが、メモリ上で同じ位置を指しているかは不明であるので、データの依存関係(Data)が有る可能性がある、すなわちデータの依存関係(Data)が有りとなる。この決定性の情報は、文間依存関係情報データベース12bに登録される。例えば、図4の1行目では、依存の種類が「Data」とされ、決定性が「T」となっている。
図7は、コントロール依存関係解析部53における決定性の判定に関する処理の流れの例を示すフローチャートである。
図7において、作成されたコントロールフローグラフ(CFG)とコールグラフ(CG)の情報から、コントロールの依存関係(Ctrl)の情報が、文間依存関係情報データベース12bに登録される。例えば、図4の2行目では、依存の種類が「Ctrl」とされ、決定性が「T」となっている。
図7において、作成されたコントロールフローグラフ(CFG)とコールグラフ(CG)の情報から、コントロールの依存関係(Ctrl)の情報が、文間依存関係情報データベース12bに登録される。例えば、図4の2行目では、依存の種類が「Ctrl」とされ、決定性が「T」となっている。
図8は、決定性解析部56における決定性の判定に関する処理の流れの例を示すフローチャートである。
図8において、ステップS11とS12は、図6における処理と同じ内容であるので、説明は省略する。
図8において、ステップS11とS12は、図6における処理と同じ内容であるので、説明は省略する。
ステップS12でYESの場合、文が静的なメモリ領域のアドレス代入文か否かが判定される(ステップS15)。
ステップS15でNOの場合、決定性は「無し」すなわちF(False)となる(ステップS16)。
ステップS15でNOの場合、決定性は「無し」すなわちF(False)となる(ステップS16)。
ステップS15でYESの場合、定義が同じアドレスであるかが判定される(ステップS17)。
ステップS17でNOの場合、決定性は「有り」すなわちT(True)となる(ステップS18)。しかし、この場合は、ポインタの依存関係(Ptr)が「無し」となるので、文間依存関係情報データベース12bには登録されない。
ステップS17でYESの場合、ポインタの依存関係(Ptr)が「有り」で、決定性は「有り」すなわちT(True)となる(ステップS19)。例えば、図4の3行目では、依存の種類が「Ptr」とされ、決定性が「F」となっている。
ステップS17でNOの場合、決定性は「有り」すなわちT(True)となる(ステップS18)。しかし、この場合は、ポインタの依存関係(Ptr)が「無し」となるので、文間依存関係情報データベース12bには登録されない。
ステップS17でYESの場合、ポインタの依存関係(Ptr)が「有り」で、決定性は「有り」すなわちT(True)となる(ステップS19)。例えば、図4の3行目では、依存の種類が「Ptr」とされ、決定性が「F」となっている。
以上のようにして、図4の文間依存関係情報データベース12bにおける欄41aから41iまでの項目のデータが記録される。
ここで、図3に戻り、処理は、クリティカルパス解析処理に移行する。
ここで、図3に戻り、処理は、クリティカルパス解析処理に移行する。
3.2 クリティカルパスの解析
クリティカルパス解析処理は、クリティカルパス解析抽出部32により行われる。
クリティカルパス解析抽出部32では、プログラム21を解析して、プログラムの先頭から最後までの複数のパスの中で、処理単位の数の最も多いパス、すなわちクリティカルパス(CP)を抽出して、その抽出されたクリティカルパス(CP)上に、図4の文間依存関係情報データベース12bに登録された各依存関係情報の文が、存在するか否かが判定される。
クリティカルパス解析処理は、クリティカルパス解析抽出部32により行われる。
クリティカルパス解析抽出部32では、プログラム21を解析して、プログラムの先頭から最後までの複数のパスの中で、処理単位の数の最も多いパス、すなわちクリティカルパス(CP)を抽出して、その抽出されたクリティカルパス(CP)上に、図4の文間依存関係情報データベース12bに登録された各依存関係情報の文が、存在するか否かが判定される。
そして、クリティカルパスの欄41jは、文が抽出されたクリティカルパス上に存在する場合は、「真」すなわちT(True)として、文が抽出されたクリティカルパス上に存在しない場合は、「偽」すなわちF(False)として、データが文間依存関係情報データベース12bに登録される。
次に、処理は、並列化可能性解析に移行する。
次に、処理は、並列化可能性解析に移行する。
3.3 並列化可能性の解析
並列化可能性解析は、並列化可能性解析部33により行われる。図9は、並列化可能性解析部33の処理内容を説明するための図である。
図9は、クリティカルパス解析抽出部32と並列化可能性解析部33の2つの処理の内容を含む。クリティカルパス解析抽出部32は、上述したように、依存関係情報31aの依存関係情報から、クリティカルパス(CP)を算出して求める。
並列化可能性解析は、並列化可能性解析部33により行われる。図9は、並列化可能性解析部33の処理内容を説明するための図である。
図9は、クリティカルパス解析抽出部32と並列化可能性解析部33の2つの処理の内容を含む。クリティカルパス解析抽出部32は、上述したように、依存関係情報31aの依存関係情報から、クリティカルパス(CP)を算出して求める。
並列化可能性解析部33は、依存関係仮削除部71と比較部72とを含む。依存関係仮削除部71は、クリティカルパス(CP)の情報(以下、クリティカルパス情報という)32aと依存関係情報31aから、クリティカルパス(CP)上にあって決定性が「F」の依存関係情報を抽出する。すなわち、依存関係仮削除部71は、クリティカルパス(CP)上に存在し、かつ依存関係における決定性が非決定的である処理命令を抽出する処理命令抽出部を構成する。
そして、依存関係仮削除部71は、抽出した各依存関係情報について、その依存関係を仮に削除して、その仮の削除がされた場合の仮のクリティカルパス(PCP)を算出して、仮クリティカルパス情報71aとして出力する。従って、依存関係仮削除部71は、抽出された非決定的である処理命令のパス部分を並列化して仮に削除した場合におけるプログラム12aの仮のクリティカルパスを抽出する仮クリティカルパス抽出部を構成する。
比較部72は、クリティカルパス情報32aと仮クリティカルパス情報71aとを比較し、比較した結果の情報を、並列化効果情報として、文間依存関係情報データベース12bに出力する。並列化効果情報の欄41kに、並列化効果情報72aが記録される。
並列化効果情報72aは、その依存関係が有るとされた文、すなわち処理命令、を並列化処理にした場合に、どれくらいの処理単位が削減されるか、を示す量の情報である。すなわち、並列化効果情報72aは、非決定的である処理命令の削除の前後において、クリティカルパス解析抽出部32と依存関係仮削除部71においてそれぞれ抽出されたクリティカルパスの差の情報である。並列化効果情報72aについては、後で具体的に説明する。
さらに、並列化工数情報71bが、依存関係仮削除部71において算出され、文間依存関係情報データベース12bに出力される。
並列化工数情報71bは、その依存関係が非決定的であるとされた文、すなわち処理命令、を並列化するに伴い、併せて依存関係を無くして並列化処理を行うようにしなければならない他のパスがあれば、その他のパスの数も含めた並列化の工数を示す情報である。すなわち、並列化工数情報71bは、非決定的である処理命令を並列化する場合に、同時に並列化を実現する必要のある依存関係のパスの数の情報である。並列化工数情報71bについても、後で具体的に説明する。
比較部72は、抽出された非決定的である処理命令のパスに関わる処理を並列化して、非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する並列化情報出力部を構成する。
なお、図10は、図9に示した並列化可能性解析部33の処理プログラム81の例を示す図である。
以上のようにして、プログラム12aが入力され、上述したような処理がされると、本実施の形態にかかる並列化支援装置1は、並列化工数情報71bと並列化効果情報72aとを出力する。並列化工数情報71bと並列化効果情報72aの出力は、例えば、表示装置13の画面上に出力される。よって、ユーザは、並列化工数情報71bと並列化効果情報72aを認識することができる。その結果、ユーザは、並列化作業の負荷量と並列化の効果を考慮しながら、並列化処理作業を行うことができる。
3.4 並列化支援装置の利用形態例
次に、並列化支援装置1の表示装置13の画面の例を説明する。図11は、並列化支援装置1の表示装置13の画面の表示例を示す図である。
図3のクリティカルパス解析抽出部32と並列化可能性解析部33の処理の結果、文間依存関係データベース12bの項目の欄41jから41lまでの情報が、並列化支援向け依存関係情報33aとして追加される。並列化支援装置1は、追加された並列化支援向け依存関係情報33aも含む依存関係情報に基づいて、表示部34によって、表示装置13に種々の依存関係グラフの表示、すなわち並列化支援向け依存関係図表示34aをすることができる。よって、表示部34は、プログラムの依存関係を依存関係グラフとして表示装置13に表示する依存関係グラフ表示部を構成する。
次に、並列化支援装置1の表示装置13の画面の例を説明する。図11は、並列化支援装置1の表示装置13の画面の表示例を示す図である。
図3のクリティカルパス解析抽出部32と並列化可能性解析部33の処理の結果、文間依存関係データベース12bの項目の欄41jから41lまでの情報が、並列化支援向け依存関係情報33aとして追加される。並列化支援装置1は、追加された並列化支援向け依存関係情報33aも含む依存関係情報に基づいて、表示部34によって、表示装置13に種々の依存関係グラフの表示、すなわち並列化支援向け依存関係図表示34aをすることができる。よって、表示部34は、プログラムの依存関係を依存関係グラフとして表示装置13に表示する依存関係グラフ表示部を構成する。
並列化支援装置1は、依存関係の編集機能を有する。例えば、ユーザは、図3の依存関係図表示34である種々の依存関係グラフの表示を見ながら、編集部35を利用して依存関係を無効化する編集作業を行うことによって、どのように依存関係及びクリティカルパスが変化するかを画面上で把握し確認することもできる。図3において、ユーザが依存関係を無効化する作業は、依存関係無効化35aとして示されている。
例えば、図11に示すように、表示装置13の画面101上には、並列化支援向け依存関係図表示34aである依存関係を示す依存関係グラフを表示する依存関係グラフ表示部102と、各種表示モードを選択するための複数の表示モードボタン部103とを有する。複数の表示モードボタン部103は、表示装置13に表示する依存関係グラフの種類を選択できるグラフ種類選択部を構成する。
ユーザは、並列化支援装置1の入力装置を操作することにより、図10の画面を表示させることができる。依存関係グラフ表示部102には、表示モードボタン部103の各ボタンに応じた依存関係グラフが表示される。
以下、依存関係グラフ表示部102に表示される依存関係グラフの表示例を説明する。図12から図16は、それぞれ、並列化支援向け依存関係図表示34aの一つとしての依存関係グラフの例を示す。
図12は、表示装置13の依存関係グラフ表示部102に表示される依存関係グラフの表示例を示す図である。図2のプログラム21を解析して得られた依存関係情報に基づいて、並列化支援装置1の表示機能を用いて依存関係グラフとして表示すると、図12の依存関係グラフが、表示装置13の画面101上に表示される。
図12は、表示装置13の依存関係グラフ表示部102に表示される依存関係グラフの表示例を示す図である。図2のプログラム21を解析して得られた依存関係情報に基づいて、並列化支援装置1の表示機能を用いて依存関係グラフとして表示すると、図12の依存関係グラフが、表示装置13の画面101上に表示される。
図12の依存関係グラフにおいて、楕円及び長方形で描かれた各要素が文を表し、文と文を結ぶ矢印がそれぞれ依存関係を表す。図12において、例えば、符号111で示す楕円及び長方形は、文を表す。1または複数の文を囲む枠線は、基本ブロック及び関数のまとまりを表す。図12において、例えば、符号112で示す枠線は、基本ブロックまたは関数のまとまりを表す。
依存関係を表すパスすなわち矢印はその種類と決定性に応じ、制御依存(Ctrl)は太線で、データ依存(Data)や決定的なポインタ依存(Ptr)は実線で、ポインタ依存(Ptr)のうち非決定的なものは破線で示される。図12において、例えば、符号113で示す太線は、制御依存(Ctrl)を表し、符号114で示す実線は、データ依存(Data)あるいは決定的なポインタ依存(Ptr)を表し、符号115で示す破線は、非決定的なポインタ依存(Ptr)を表す。文間依存関係情報データベース12bにおける決定性の情報を用いて、表示における実線と破線の区別が決定される。決定性の情報が「F」ならば、破線表示となる。
また、キャリー性の依存を表す矢印には「+n」などのようにキャリー性の依存であることを示すラベルが付加される。図12において、例えば、符号116で示す部分に、ラベル「+n」が、付加されている。
ユーザは、図12の依存関係グラフをみて、プログラムの構造と依存関係を把握することができる。
ユーザは、図12の依存関係グラフをみて、プログラムの構造と依存関係を把握することができる。
さらに、並列化支援装置1の表示機能を用いて、画面上に、依存関係グラフ上の任意のブロックに対して、ブロック内の文の依存関係表示を省略して描画させることが出来る。図10におけるブロック表示ボタン103aをクリック、すなわち指定することによって、図13の画面が表示される。図13は、依存関係グラフのブロックレベル表示の表示例を示す図である。
また、図10における関数表示ボタン103bをクリック、すなわち指定することによって、図14の画面が表示される。図14は、依存関係グラフ上の任意の関数に対して、関数内のブロックの依存関係表示を省略した依存関係グラフの表示例を示す図である。
また、図10における展開表示ボタン103cをクリック、すなわち指定することによって、図15の画面が表示される。図15は、依存関係グラフループ2段階ループ展開表示の表示例を示す図である。図15に示すように、キャリー性の依存関係がある場合に指定したキャリー性依存関係を含む基本ブロックをコピーすることにより、キャリー性依存関係が、基本ブロックからコピーされた基本ブロックへの依存関係として表示される。この際、図4の依存関係データベース12bも自動的に更新される。
さらにまた、図10におけるクリティカルパス(CP)強調表示ボタン103dをクリック、すなわち指定することによって、図16の画面が表示される。図16は、クリティカルパス強調表示の表示例を示す図である。図16に示すように、プログラム中の2点間の処理の実行におけるクリティカルパス上の依存関係のパスを強調表示することが出来る。ここでは、クリティカルパスは、実線で示されている。この際、クリティカルパス上の依存関係で非決定的な依存関係のパスは、依存関係を無効化することでプログラムの並列性を上げられる可能性があるため、符号117で示すように、特に強調して表示される。これは、図4におけるクリティカルパスの欄41jと決定性の欄41iを参照して、クリティカルパス(CP)が「T」で、決定性が「F」の文に関するパスを抽出することによって、強調表示が行われる。
ユーザは、図16に示すように、一つの基本ブロック(Func_test_Block_3_0)と他の基本ブロック(Func_test_Block_3_1)との間に依存関係があるが、その依存関係のパスを無くことができれば、基本ブロック(Func_test_Block_3_1)中の単位処理の数、すなわち5段、の分だけクリティカルパスが短くなることを、容易に理解できる。ユーザは、図16を見ると、基本ブロック(Func_test_Block_3_1)中の単位処理の段数が5であるので、並列化効果は5であり、強調表示されたクリティカルパスの数が2であるので、並列化工数は、2とわかる。
なお、このように依存関係グラフ上に、並列化効果の値と並列化工数の値を、パスに並べて表示するようにしてもよいし、別途、ポップアップウインドウのような別の部分に、数値で表示するようにしてもよい。
また、並列化支援装置1は、クリティカルパス(CP)上の依存関係において非決定的な依存関係の情報を、並列化効果を並列化工数で除算した値の降順で、すなわち大きい値の順で、ソートして列挙する機能、すなわち手段を有する。このソートされてリスト表示されることによって、少ない工数の依存関係無効化で、大きな並列化効果を期待できる依存関係を容易に見つけることが可能となる。例えば、図4の文間依存関係情報データベース12bの依存関係情報を、表示装置13の画面上に表示する際に、並列化効果を並列化工数で除した値の降順でソートして、依存関係情報を表示するようにすることもできる。図18における表示部34が、依存関係における決定性が非決定的である処理命令の情報を、並列化効果情報の値を並列化工数情報の値で除算した値の大きな順に出力する処理命令情報出力部を構成する。
並列化支援装置1は編集機能を有し、その編集機能は、編集部35によって、依存関係グラフ上の依存関係のうち、任意の非決定的な依存関係を選んで無効化することが出来る。例えば、画面上で、マウス等の入力装置を用いて所望の依存関係の線を選択して、所定の操作をするようにして、その無効化を行うことができる。無効化された依存関係は依存関係情報データベース12bにおいて有効の項目の欄41mに無効を示す値あるいは情報が記録される。本実施の形態の編集機能では無効化された依存関係のみ抽出し、任意の依存関係を再び有効化することが出来る。なお、決定的な依存関係の無効化は、本実施の形態の編集機能によって禁止される。よって、編集部35は、表示された依存関係グラフの線を選択して所定の編集を行うことができる依存関係グラフ編集部を構成する。
本実施の形態の表示機能では、例えば、ユーザが画面上で依存関係の有効/無効を変更すると、クリティカルパス(CP)を再計算し、文間依存関係情報データベース12bを仮に更新して、依存関係グラフの再描画を行なう。依存関係の仮の無効化が並列性の向上に有効であったか否かが図17の様に即座に分かる。図17は、依存関係を無効化後の依存関係グラフの表示例を示す図である。
従って、プログラム21を入力すると、並列化支援装置1は、静的依存関係解析、クリティカルパス解析、及び並列化可能性解析を実行する。その結果、図4の文間依存関係情報データベース12bが仮に更新され、ユーザは、並列化効果と並列化工数の情報をみることによって、プログラム21中の、並列化を効果的に行うことができる箇所を容易に把握することができる。特に、上述したようなソート機能を利用すれば、より効果的でかつ効率的に、並列化作業を行うことができる。
さらに、図4の文間依存関係情報データベース12bに基づいて、画面上に種々の形態で依存関係グラフを表示することができ、かつ編集も容易にできるので、ユーザは、効率的な並列化作業を簡単に行うことができる。
(第2の実施の形態)
次に、本発明の第2の実施の形態について説明する。
第1の実施の形態では、依存関係が決定的でない場合には、依存関係情報の決定性の欄は、非決定的としていた。すなわち、依存関係が非決定的な場合は、「F」を登録している。しかし、実行時のみ依存関係が確定するプログラムもある。そこで、本第2の実施の形態では、実際にプログラムをターゲットのマルチプロセッサ上で実行させて、その実行の結果、決定的な依存関係を抽出する。そして、静的依存関係解析部31において非決定的とされた依存関係の依存関係情報の中で、決定的な依存関係とすることができる依存関係情報を、並列化対象から取り除くことによって、ユーザに、並列化対象の依存関係情報を減らすことができるようにしたものである。対象プログラムの規模が大きいときに、並列化可能性の検討対象が減ることは、並列化作業の効率アップに繋がる。
次に、本発明の第2の実施の形態について説明する。
第1の実施の形態では、依存関係が決定的でない場合には、依存関係情報の決定性の欄は、非決定的としていた。すなわち、依存関係が非決定的な場合は、「F」を登録している。しかし、実行時のみ依存関係が確定するプログラムもある。そこで、本第2の実施の形態では、実際にプログラムをターゲットのマルチプロセッサ上で実行させて、その実行の結果、決定的な依存関係を抽出する。そして、静的依存関係解析部31において非決定的とされた依存関係の依存関係情報の中で、決定的な依存関係とすることができる依存関係情報を、並列化対象から取り除くことによって、ユーザに、並列化対象の依存関係情報を減らすことができるようにしたものである。対象プログラムの規模が大きいときに、並列化可能性の検討対象が減ることは、並列化作業の効率アップに繋がる。
図18は、本実施の形態に係わる並列化支援装置1の処理の流れの例を示すフローチャートである。図18において、図3と同じ処理内容については、同じ符号を付して説明は省略する。
プログラムコード12aは、コンパイラ91によってコンパイルされて、実行ファイル91aが生成される。そして、シミュレータ及びプロファイラ部92によって、プロファイル情報92aが生成される。シミュレータ及びプロファイラ部92は、シミュレータとプロファイラを含む処理部である。
コンパイラ91は、図4と同じ構成の文間依存関係情報データベース12bを生成し、依存の種類がポインタ依存(Ptr)の依存関係情報において、依存元の文と依存先の文に対応するアセンブラコードに対して、プロファイラが認識できる所定のラベルを付加する。プロファイラは、そのラベルが付加されたメモリアクセス命令について、実行時にアクセスしたアドレスの範囲をプロファイル情報として出力する。そして、動的依存関係解析部93は、そのプロファイル情報に基づいて、決定性のある依存関係情報を抽出する。
例を挙げて説明する。図19は、並列化したいプログラムの例を示す図である。図19のプログラム94は、配列データa[]を4つの領域に分けてデータを書き込むプログラムである。具体的には、プログラム94は、mainのプログラムに、引数「100 200 100 150 500 600 700 800」が与えられ、変数s0からs3、及びe0からe3を用いて、配列データa[]の4つの領域にデータを書き込むプログラムである。
プログラム94が実行ファイル91aは、シミュレータ及びプロファイラ部92において実行されて、各文のプロファイル情報92aが得られるので、そのプロファイル情報92aから、動的依存関係情報として、依存関係情報が得られる。
図20は、プログラム94が実行されて、そのプログラムの実行における依存関係がプロファイル情報92aから生成された依存関係情報を説明するための図である。図20に示すように、4つのfor文中、第1のfor文94aと第2のfor文94bとの間の依存関係は、決定的であるが、他の文94aから94d間の依存関係は、非決定的であるとする。
そして、静的依存関係解析部31によって得られた依存関係情報と動的依存関係解析部93によって得られたい依存関係情報とは対応がとれている。よって、静的依存関係解析部31によって得られた、決定性が非決定的とされた依存関係情報の中で、動的依存関係解析部93の解析結果、決定性が決定的であるとされた依存関係情報があれば、静的依存関係解析部31の解析結果、決定性が非決定的とされた依存関係情報の決定性の項目が「決定的」すなわち「T」に変更される。
以上説明したように、本実施の形態によれば、静的依存関係解析部31によって得られた依存関係情報の中で、ポインタ依存について、動的依存関係解析部93によって得られた決定性が決定的な依存関係情報を用いて、修正することにより、文間依存関係情報データベース12b中の並列化対象の数を減らすことができるので、並列化作業の効率が向上する。
以上のように、上述した各実施の形態のプログラム並列化支援装置によれば、プログラムの並列化を効率的に行える処理命令の依存関係の箇所を抽出することができる。
なお、上述した依存関係は、処理命令間、すなわち文間の依存関係であるが、上述したブロック間の依存関係についても同様であり、その場合、上述した依存関係データベースは、ブロック間依存関係データベースとなる。
なお、本明細書における各「部」は、実施の形態の各機能に対応する概念的なもので、必ずしも特定のハードウエアやソフトウエア・ルーチンに1対1には対応しない。従って、本明細書では、以下、実施の形態の各機能を有する仮想的回路ブロック(部)を想定して実施の形態を説明した。また、本実施の形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、あるいは実行毎に異なった順序で実行してもよい。
さらになお、以上説明した動作を実行する並列化支援処理プログラムコードは、コンピュータプログラム製品として、フレキシブルディスク、CD−ROM等の可搬媒体や、ハードディスク等の記憶媒体に、その全体あるいは一部が記録され、あるいは記憶される。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明の並列化支援装置を実現することができる。
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
1 並列化支援装置、11 コンピュータ本体、12 記憶装置、12a 対象プログラム、12b 文間依存関係情報データベース、12c 並列化支援処理プログラム、13 表示装置
Claims (5)
- プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも1つの依存関係における決定性を判定する決定性判定部と、
プログラムのクリティカルパスを抽出するクリティカルパス抽出部と、
前記クリティカルパス上に存在し、かつ前記決定性判定部において前記依存関係における決定性が非決定的である処理命令を抽出する処理命令抽出部と、
抽出された前記非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する並列化情報出力部と、
を有することを特徴とするプログラム並列化支援装置。 - 前記決定性判定部は、静的依存関係解析による前記決定性の判定に加えて、前記プログラムの実行時にアクセスしたアドレスの範囲のプロファイル情報に基づく動的依存関係解析によって前記決定性を判定することを特徴とする請求項1に記載のプログラム並列化支援装置。
- 前記依存関係における決定性が非決定的である処理命令の情報を、前記並列化効果情報の値を前記並列化工数情報の値で除算した値の大きな順に出力する処理命令情報出力部を有することを特徴とする請求項1に記載のプログラム並列化支援装置。
- 前記プログラムの依存関係を依存関係グラフとして表示装置に表示する依存関係グラフ表示部と、
表示された前記依存関係グラフの線を選択して所定の編集を行うことができる依存関係グラフ編集部と、
前記表示装置に表示する前記依存関係グラフの種類を選択できるグラフ種類選択部とを有することを特徴とする請求項1に記載のプログラム並列化支援装置。 - プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも1つの依存関係における決定性を判定し、
プログラムのクリティカルパスを抽出し、
前記クリティカルパス上に存在し、かつ前記依存関係における決定性が非決定的である処理命令を抽出し、
抽出された前記非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力することを特徴とするプログラム並列化支援方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007303331A JP2009129179A (ja) | 2007-11-22 | 2007-11-22 | プログラム並列化支援装置およびプログラム並列化支援方法 |
US12/211,420 US20090138862A1 (en) | 2007-11-22 | 2008-09-16 | Program parallelization supporting apparatus and program parallelization supporting method |
GB0817522A GB2454968A (en) | 2007-11-22 | 2008-09-24 | Program Parallelization Support Tool |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007303331A JP2009129179A (ja) | 2007-11-22 | 2007-11-22 | プログラム並列化支援装置およびプログラム並列化支援方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009129179A true JP2009129179A (ja) | 2009-06-11 |
Family
ID=39952157
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007303331A Abandoned JP2009129179A (ja) | 2007-11-22 | 2007-11-22 | プログラム並列化支援装置およびプログラム並列化支援方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20090138862A1 (ja) |
JP (1) | JP2009129179A (ja) |
GB (1) | GB2454968A (ja) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010047174A1 (ja) * | 2008-10-24 | 2010-04-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ソース・コード処理方法、システム、及びプログラム |
JP2012146137A (ja) * | 2011-01-12 | 2012-08-02 | Toshiba Corp | 情報処理装置およびプログラム |
US8949808B2 (en) | 2010-09-23 | 2015-02-03 | Apple Inc. | Systems and methods for compiler-based full-function vectorization |
US9109286B2 (en) | 2010-06-18 | 2015-08-18 | Semiconductor Energy Laboratory Co., Ltd. | Method of manufacturing power storage device |
KR101573586B1 (ko) * | 2010-09-23 | 2015-12-01 | 애플 인크. | 논-리프 코드의 컴파일러 기반 벡터화를 위한 시스템들 및 방법들 |
JP2016045893A (ja) * | 2014-08-26 | 2016-04-04 | 株式会社東芝 | プログラム情報生成システム、方法、及びプログラム |
JP2016192153A (ja) * | 2015-03-31 | 2016-11-10 | 株式会社デンソー | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 |
US9529574B2 (en) | 2010-09-23 | 2016-12-27 | Apple Inc. | Auto multi-threading in macroscalar compilers |
JP2017224046A (ja) * | 2016-06-13 | 2017-12-21 | 株式会社デンソー | 並列化方法、並列化ツール、車載装置 |
WO2020174581A1 (ja) * | 2019-02-26 | 2020-09-03 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010064260A1 (en) * | 2008-12-01 | 2010-06-10 | Kpit Cummins Infosystems Ltd. | Method and system for parallelization of sequencial computer program codes |
JP5329983B2 (ja) * | 2009-01-08 | 2013-10-30 | 株式会社東芝 | デバッグ支援装置 |
US8214831B2 (en) * | 2009-05-05 | 2012-07-03 | International Business Machines Corporation | Runtime dependence-aware scheduling using assist thread |
US8448155B2 (en) * | 2009-06-01 | 2013-05-21 | National Instruments Corporation | Automatically creating parallel iterative program code in a graphical data flow program |
US8667260B2 (en) * | 2010-03-05 | 2014-03-04 | International Business Machines Corporation | Building approximate data dependences with a moving window |
WO2011118350A1 (en) * | 2010-03-26 | 2011-09-29 | Semiconductor Energy Laboratory Co., Ltd. | Power storage device |
JP5917027B2 (ja) | 2010-06-30 | 2016-05-11 | 株式会社半導体エネルギー研究所 | 電極用材料の作製方法 |
US8621448B2 (en) * | 2010-09-23 | 2013-12-31 | Apple Inc. | Systems and methods for compiler-based vectorization of non-leaf code |
US20130232471A1 (en) * | 2010-11-11 | 2013-09-05 | Thomas Henties | Method and Apparatus for Assessing Software Parallelization |
US9449405B2 (en) * | 2010-11-30 | 2016-09-20 | Sap Se | Systems and methods to display dependencies within a graph of grouped elements |
US9069893B2 (en) * | 2011-03-23 | 2015-06-30 | International Business Machines Corporation | Automatic verification of determinism for parallel programs |
US9032376B2 (en) * | 2012-09-28 | 2015-05-12 | Synopsys, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
US9396097B2 (en) * | 2013-03-17 | 2016-07-19 | Typemock Ltd. | Methods, circuits, devices, systems and associated computer executable code for testing software code |
US10409560B1 (en) | 2015-11-18 | 2019-09-10 | Amazon Technologies, Inc. | Acceleration techniques for graph analysis programs |
JP2017107448A (ja) * | 2015-12-10 | 2017-06-15 | 株式会社デンソー | 並列化方法、並列化ツール、車載装置 |
US10671361B2 (en) * | 2016-10-25 | 2020-06-02 | Paypal, Inc. | Automatically determining data dependencies to facilitate code execution |
DE102017200161A1 (de) * | 2017-01-09 | 2018-07-12 | Robert Bosch Gmbh | Verfahren zum Erfassen von Signalen |
CN108536606B (zh) * | 2018-04-22 | 2021-01-19 | 北京化工大学 | 一种基于复合依赖关系覆盖准则的efsm测试方法 |
CN110737395B (zh) * | 2018-07-20 | 2023-09-29 | 伊姆西Ip控股有限责任公司 | I/o管理方法、电子设备和计算机可读存储介质 |
CN114995898A (zh) * | 2022-05-13 | 2022-09-02 | Oppo广东移动通信有限公司 | 目标对象处理方法、装置以及电子设备 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US331990A (en) * | 1885-12-08 | Bread-cutter | ||
US348133A (en) * | 1886-08-24 | Josiah a | ||
JPH05257709A (ja) * | 1992-03-16 | 1993-10-08 | Hitachi Ltd | 並列化判別方法およびそれを用いた並列化支援方法 |
US6490673B1 (en) * | 1998-11-27 | 2002-12-03 | Matsushita Electric Industrial Co., Ltd | Processor, compiling apparatus, and compile program recorded on a recording medium |
JP3664473B2 (ja) * | 2000-10-04 | 2005-06-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムの最適化方法及びこれを用いたコンパイラ |
JP3870112B2 (ja) * | 2002-03-13 | 2007-01-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、コンパイル装置、及びコンパイル用プログラム |
US7581215B1 (en) * | 2003-06-30 | 2009-08-25 | Sun Microsystems, Inc. | Dependency analysis system and method |
JP3901180B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
JP3901181B2 (ja) * | 2004-06-30 | 2007-04-04 | 日本電気株式会社 | プログラム並列化装置及びその方法並びにプログラム |
US7882498B2 (en) * | 2006-03-31 | 2011-02-01 | Intel Corporation | Method, system, and program of a compiler to parallelize source code |
-
2007
- 2007-11-22 JP JP2007303331A patent/JP2009129179A/ja not_active Abandoned
-
2008
- 2008-09-16 US US12/211,420 patent/US20090138862A1/en not_active Abandoned
- 2008-09-24 GB GB0817522A patent/GB2454968A/en not_active Withdrawn
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8595712B2 (en) | 2008-10-24 | 2013-11-26 | International Business Machines Corporation | Source code processing method, system and program |
WO2010047174A1 (ja) * | 2008-10-24 | 2010-04-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ソース・コード処理方法、システム、及びプログラム |
US8407679B2 (en) | 2008-10-24 | 2013-03-26 | International Business Machines Corporation | Source code processing method, system and program |
JP5209059B2 (ja) * | 2008-10-24 | 2013-06-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ソース・コード処理方法、システム、及びプログラム |
US9109286B2 (en) | 2010-06-18 | 2015-08-18 | Semiconductor Energy Laboratory Co., Ltd. | Method of manufacturing power storage device |
US8949808B2 (en) | 2010-09-23 | 2015-02-03 | Apple Inc. | Systems and methods for compiler-based full-function vectorization |
KR101573586B1 (ko) * | 2010-09-23 | 2015-12-01 | 애플 인크. | 논-리프 코드의 컴파일러 기반 벡터화를 위한 시스템들 및 방법들 |
US9529574B2 (en) | 2010-09-23 | 2016-12-27 | Apple Inc. | Auto multi-threading in macroscalar compilers |
JP2012146137A (ja) * | 2011-01-12 | 2012-08-02 | Toshiba Corp | 情報処理装置およびプログラム |
JP2016045893A (ja) * | 2014-08-26 | 2016-04-04 | 株式会社東芝 | プログラム情報生成システム、方法、及びプログラム |
JP2016192153A (ja) * | 2015-03-31 | 2016-11-10 | 株式会社デンソー | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 |
JP2017224046A (ja) * | 2016-06-13 | 2017-12-21 | 株式会社デンソー | 並列化方法、並列化ツール、車載装置 |
WO2020174581A1 (ja) * | 2019-02-26 | 2020-09-03 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
JPWO2020174581A1 (ja) * | 2019-02-26 | 2021-09-13 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
Also Published As
Publication number | Publication date |
---|---|
US20090138862A1 (en) | 2009-05-28 |
GB0817522D0 (en) | 2008-10-29 |
GB2454968A (en) | 2009-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2009129179A (ja) | プログラム並列化支援装置およびプログラム並列化支援方法 | |
US8516452B2 (en) | Feedback-directed call graph expansion | |
JP4395761B2 (ja) | プログラムテスト支援装置およびその方法 | |
JP5613547B2 (ja) | タスクベースの並列プログラミング言語 | |
CN109313547B (zh) | 用于cpu利用率和代码重构的查询优化器 | |
US8918756B2 (en) | Generating constraints in a class model | |
US8495560B2 (en) | Converting an activity diagram into code | |
Jacobs et al. | Interactive visual debugging with UML | |
Martinez et al. | Feature location benchmark for software families using eclipse community releases | |
US8819626B2 (en) | Sharable development environment bookmarks for functional/data flow | |
Luckow et al. | Symbolic pathfinder v7 | |
Poetzl et al. | Formalizing and checking thread refinement for data-race-free execution models | |
Salihu et al. | Comparative analysis of GUI reverse engineering techniques | |
Gabrijelčič | Mastering Delphi Programming: A Complete Reference Guide: Learn all about building fast, scalable, and high performing applications with Delphi | |
Gabrijelčič | Delphi High Performance: Build fast Delphi applications using concurrency, parallel programming and memory management | |
Rayside et al. | Integrating SHriMP with the IBM websphere studio workbench | |
Malyshkin et al. | Automated Debugging of Fragmented Programs in LuNA System | |
US20150082443A1 (en) | System to automate compliance with licenses of software third-party content | |
Mouzarani et al. | A unit-based symbolic execution method for detecting heap overflow vulnerability in executable codes | |
McGrath | C# Programming in easy steps: Updated for Visual Studio 2019 | |
JP2019139675A (ja) | ソースコード最適化装置、プログラムおよび方法 | |
García-Díaz et al. | MCTest: towards an improvement of match algorithms for models | |
Kasyanov et al. | A System for Big Attributed Hierarchical Graph Visualization | |
Fesefeldt et al. | Automated checking and completion of backward confluence for hyperedge replacement grammars | |
Kostomarov et al. | The ScopeShell graphic interface: Support for computational experiments and data visualization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20100216 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20120315 |
|
A762 | Written abandonment of application |
Free format text: JAPANESE INTERMEDIATE CODE: A762 Effective date: 20120620 |