(57)【要約】【課題】プログラムの並列化を効率的に行える処理命令の依存関係情報を出力することができるプログラム並列化支援装置を提供する。【解決手段】プログラム並列化支援装置１は、プログラム１２ａ中のデータ依存、制御依存及びポインタ依存の少なくとも１つの依存関係における決定性を判定し、プログラム１２ａのクリティカルパスを抽出し、クリティカルパス上に存在し、かつ依存関係における決定性が非決定的である処理命令を抽出する。さらに、プログラム並列化支援装置１は、抽出された非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する。【選択図】図３
2009129179.tif 000002
【特許請求の範囲】
【請求項１】
プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも１つの依存関係における決定性を判定する決定性判定部と、
プログラムのクリティカルパスを抽出するクリティカルパス抽出部と、
前記クリティカルパス上に存在し、かつ前記決定性判定部において前記依存関係における決定性が非決定的である処理命令を抽出する処理命令抽出部と、
抽出された前記非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する並列化情報出力部と、
を有することを特徴とするプログラム並列化支援装置。
【請求項２】
前記決定性判定部は、静的依存関係解析による前記決定性の判定に加えて、前記プログラムの実行時にアクセスしたアドレスの範囲のプロファイル情報に基づく動的依存関係解析によって前記決定性を判定することを特徴とする請求項１に記載のプログラム並列化支援装置。
【請求項３】
前記依存関係における決定性が非決定的である処理命令の情報を、前記並列化効果情報の値を前記並列化工数情報の値で除算した値の大きな順に出力する処理命令情報出力部を有することを特徴とする請求項１に記載のプログラム並列化支援装置。
【請求項４】
前記プログラムの依存関係を依存関係グラフとして表示装置に表示する依存関係グラフ表示部と、
表示された前記依存関係グラフの線を選択して所定の編集を行うことができる依存関係グラフ編集部と、
前記表示装置に表示する前記依存関係グラフの種類を選択できるグラフ種類選択部とを有することを特徴とする請求項１に記載のプログラム並列化支援装置。
【請求項５】
プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも１つの依存関係における決定性を判定し、
プログラムのクリティカルパスを抽出し、
前記クリティカルパス上に存在し、かつ前記依存関係における決定性が非決定的である処理命令を抽出し、
抽出された前記非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力することを特徴とするプログラム並列化支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム並列化支援装置およびプログラム並列化支援方法に関し、特に、        プログラムの並列化を効率的に行えるように支援するプログラム並列化支援装置およびプログラム並列化支援方法に関する。
【背景技術】
【０００２】
従来より、プログラムの自動並列化手法が提案されているが、並列化可能な部分を抽出する依存関係解析を全自動で詳細に行なうために、並列化対象の逐次実行プログラムに対して、プログラムを開発する者には、種々の制限が強いられる。制限としては、例えば、関数ポインタの使用禁止、動的なメモリ確保の禁止、必要な情報を付加するための拡張記述の強制、などがある。
【０００３】
一方、人手によりプログラムの並列化を行なう場合、例えば、プログラム中の関数と関数の依存関係をコールグラフを用いて表現する手法、文と文の依存関係をコントロールデータフローグラフ(CDFG)を用いて表現する手法、システム依存グラフを作成し頂点探索を行なうことでプログラムの特定の文との間に依存関係のある文を抜き出すプログラムスライシング手法、などを併用することにより、並列化可能な部分、並列化を阻害している依存関係を効果的に把握する手法が、ある。
【０００４】
しかし、これらの手法を大規模な逐次実行プログラムの解析に適用した場合、例えば、関数間の関係には種々の関係があるため、その種々の関係が混在して、表示あるいはリストアップされるため、解析者にとっては、解析作業が膨大でかつ繁雑なものとなる。例えば、２つの関数の関係としては、常に互いに依存する関係、パラメータなどの条件によっては互いに依存する関係、解析が十分に出来ず安全のために依存すると表示される関係、などがある。
【０００５】
従って、大規模なプログラムの場合、表示画面上に種々の関係が混在して表示されるため、プログラム開発者にとっては、並列度向上のために精査すべき依存関係の数が多過ぎ、かつ並列度向上のための作業が膨大となり、プログラムの並列化の作業は現実的に不可能となるという問題があった。
【０００６】
また、例えば、特開２００５−２６７０２４号公報及び特開平７−３６６８０号公報には、プログラムの並列化処理を行うに際し、プログラムブロックの単位で処理の並列化を行うことによって、プログラムブロックの単位での処理の高速化を図る技術が開示されている。
【０００７】
しかし、これらの提案にかかる技術を用いても、上述したような大規模なプログラムの場合、出力される情報量が多いため、やはり開発者にとっては、並列度向上のための解析作業が膨大でかつ繁雑なものとなるという問題がある。
【特許文献１】特開２００５−２６７０２４号公報
【特許文献２】特開平７−３６６８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
そこで、本発明は、プログラムの並列化を効率的に行える処理命令の依存関係情報を出力することができるプログラム並列化支援装置及びプログラム並列化支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも１つの依存関係における決定性を判定する決定性判定部と、プログラムのクリティカルパスを抽出するクリティカルパス抽出部と、前記クリティカルパス上に存在し、かつ前記決定性判定部において前記依存関係における決定性が非決定的である処理命令を抽出する処理命令抽出部と、抽出された前記非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する並列化情報出力部と、を有するプログラム並列化支援装置を提供することができる。
【００１０】
本発明の一態様によれば、プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも１つの依存関係における決定性を判定し、プログラムのクリティカルパスを抽出し、前記クリティカルパス上に存在し、かつ前記依存関係における決定性が非決定的である処理命令を抽出し、抽出された前記非決定的である処理命令のパスに関わる処理を並列化して、前記非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力するプログラム並列化支援方法を提供することができる。
【発明の効果】
【００１１】
本発明のプログラム並列化支援装置及びプログラム並列化支援方法によれば、プログラムの並列化を効率的に行える処理命令の依存関係情報を出力することができる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。  
（第１の実施の形態）
１．全体構成
まず、本発明の第１の実施の形態に係わるプログラム並列化支援装置の構成を説明する。図１は、本実施の形態に係わるプログラム並列化支援装置の構成を示す構成図である。
【００１３】
プログラム並列化支援装置（以下、単に並列化支援装置という）１は、パーソナルコンピュータ（PC）等のコンピュータ本体１１と、後述する各種のプログラム及びデータを記憶する記憶装置１２と、グラフィカルユーザインターフェース（GUI）を構成する表示装置１３とを含んで構成されている。  
記憶装置１２には、並列化の対象プログラム１２ａと、後述する文間依存関係情報データベース１２ｂと、本実施の形態にかかる並列化支援処理プログラム１２ｃとが記憶されている。
【００１４】
プログラムの並列化を行う開発者（以下、ユーザともいう）は、並列化支援装置１を用いて、キーボード、マウス等の図示しない入力装置を操作して、並列化の対称となるプログラムに対して各種処理の指示を出すことによって、後述するような解析処理等を行うことができる。
【００１５】
なお、図１の並列化支援装置１は、PC等のコンピュータ装置であるが、ネットワークに接続され、サーバ等のセンタ装置に以下に説明する機能を実行させて、PC等のクライアントからユーザが各種処理の指示をさせるような構成のシステムでもよい。
【００１６】
２．プログラム例
以下、例を用いて説明するが、説明を簡単にするために、簡単なプログラムの例を挙げて、プログラムをマルチプロセッサ向けに並列化を行う場合について説明する。  
図２は、複数のデータを読み出して、所定の処理を施したデータを出力するプログラムの例を示す図である。ここでは、図２の逐次記述プログラムが、１つのホストプロセッサと複数の並列演算プロセッサによって構成されるマルチプロセッサシステム向けに並列化される。プログラムを実行するマルチプロセッサは、ヘテロジニアスマルチプロセッサでもよいし、ホモジニアスマルチプロセッサでもよい。
【００１７】
プログラム２１は、所定のメモリ領域から４つの入力データを読み出して、所定の演算処理を施して、出力データを所定のメモリ領域に書き込む処理を行うプログラムである。図２に示すように、プログラム２１が実行されると、４つの入力データは、４つの記憶領域p,q,r,sから読み出されて、出力データは、記憶領域wに書き込まれる。
【００１８】
プログラム２１は、大きくは、mainのプログラム部分２２と、int testの関数のプログラム部分２３に分けられる。さらに、プログラム部分２３は、for文のプログラムの部分２４を含んでいる。
【００１９】
mainのプログラム部分２２において、if文があり、所定の条件が成立したとき（ケース２２ａ）は、所定の入力データを用いた、int testの関数の処理命令２２ａ１が実行される。所定の条件が成立しないとき（ケース２２ｂ）は、処理命令２２ａ１の入力データとは異なる所定の入力データを用いた、int testの関数の処理命令２２ｂ１が実行される。
【００２０】
このプログラム２１中には、いくつかの依存関係がある。例えば、このmainのプログラム部分２２において、処理命令２２ｂ１では、配列データx[]については、入力データの一つとして配列データx[0]を読み出して、配列データx[1]に書き込み、以下同様にして、配列データx[1]を読み出して、配列データx[2]に書き込む、というようにして、２５６回の演算処理は行われる。  
従って、処理命令２２ｂ１では、配列データx[]は、前の演算処理が終わらないと、次の配列データx[]を用いた演算処理を実行することができない、というデータの依存関係がある。逆にいうと、依存関係があるため、処理命令２２ｂ１については、並列化を行えないことになる。プログラム２１中の他の依存関係については、後述する。
【００２１】
３．並列化支援処理の全体の流れ
並列化支援装置１は、プログラム２１中の文を解析して、文間の依存関係を抽出する機能を有する。  
次に、並列化支援装置１の処理の流れについて説明する。並列化支援装置１の処理は、PC等の中央処理装置（CPU）によって実行される。  
図３は、本実施の形態に係わる並列化支援装置１の並列化支援処理プログラム１２ｃの処理の流れの例を示すフローチャートである。図４は、文間依存関係情報データベースの例を示す図である。
【００２２】
図３に示すように、並列化支援装置１では、まず、解析対称であるマルチプロセッサ向けのプログラムコード（以下、単にプログラムともいう）１２ａが読み込まれ、静的依存関係解析部３１が、入力されたプログラム１２ａに対する静的な解析を行うことによって、プログラムの文と文の間の依存関係（以下、文間依存関係という）を解析する静的依存関係解析の処理を行う。以下、プログラム１２ａが上述したプログラム２１である場合の例で説明する。
【００２３】
３．１  静的依存関係解析
静的依存関係解析部３１は、静的依存関係解析の結果を、図４の文間依存関係情報データベース１２ｂに依存関係情報３１ａとして登録する。
【００２４】
ここで、静的依存関係解析部３１の処理内容について説明する。  
静的依存関係解析部３１は、プログラムコードを一行ずつ解析してき、依存関係のある文、すなわち処理命令、を抽出する。例えば、プログラム２１の１５行目の文「a=p[i];」と、１９行目の文「e=a-b;」との間には、データの依存関係（Data）があることが検出される。このような依存関係の解析を全行、すなわち全ての文に対して行い、依存関係のあった文についてのみ、依存関係情報を抽出して文間依存関係情報データベース１２ｂに登録される。
【００２５】
（文間依存関係情報データベースの構成）
文間依存関係が検出されると、その情報は、図４に示す文間依存関係情報データベース１２ｂに登録される。図４の文間依存関係情報データベース１２ｂは、表形式のデータである。文間依存関係情報データベース１２ｂは、依存元の文の場所、依存元の文の関数名、依存元の文の基本ブロック番号、依存先の文の場所、依存先の文の関数名、依存先の文の基本ブロック番号、キャリー性、依存の種類、決定性、クリティカルパス、並列化効果、並列化工数、有効の各欄４１ａから４１ｍを有する。文間依存関係情報データベース１２ｂに登録される各依存関係情報は、各項目の情報を有する。
【００２６】
関数名の項目の欄４１ｂ，４１ｅには文が所属する関数名が記録される。基本ブロック番号の項目の欄４１ｃ，４１ｆには文が所属する基本ブロック番号が記録される。  
なお、ブロック番号は、ここでは、プログラム２１中に、for文などがあれば、そのfor文の部分は１つのブロックとするようなルールで決定される。例えば、ここでは、プログラム２１中、６行目から９行目まで（for文）が第１のブロック、１０行目から１２行目までが第２のブロック、１３行目から２５行目まで（for文）が、第３のブロックというように決定される。
【００２７】
キャリー性の項目の欄４１ｇには、関数出口付近で定義され、その次以降の関数の呼び出し時に使用されるstatic変数のデータ依存関係や、ループ出口付近で定義され、その次以降のループイタレーションで使用される変数のデータ依存関係などがある場合に記録される。従って、キャリー性の項目は、ループ内の文間依存関係の場合は、キュリー性は無し、すなわち「Ｆ」で、ループ間の文間依存関係の場合は、キャリー性は有り、すなわち「Ｔ」となる。
【００２８】
依存の種類の項目の欄４１ｈには、if文やwhile文などの制御文から制御される文への依存関係である制御依存（Ctrl）、変数への値の定義を行なう文から値を使用する文への依存関係を示すデータ依存（Data）、ポインタ変数などメモリ上の位置を示す変数の先値の定義から同じポインタ変数または別名となっている別のポインタ変数の示す先の値を示す文への依存関係を示すポインタ依存（Ptr）のいずれかの依存関係の種類が記録される。決定性の項目の欄４１ｉには、依存関係が常に成立する決定的な依存関係なのか、依存しないこともある非決定的な依存関係なのかが記録される。
【００２９】
クリティカルパスの項目の欄４１ｊには、注目する文が、プログラムの開始点から終了点までのクリティカルパス（CP）上にあるか否かが記録される。
【００３０】
並列化効果の項目の欄４１ｋには、クリティカルパス（CP）上でかつ非決定的な依存関係の場合に、その依存関係と並行する他のクリティカルパス（CP）上の依存関係のうち非決定的な依存関係がすべて無効化できた場合に、再スケジューリングを行なって短縮されるクリティカルパス（CP）の長さあるいは段数が記録される。
【００３１】
並列化工数の項目の欄４１ｌの項には、注目する依存関係に関連した並列化を実現するために無効化する必要のある依存関係のパスの数が記録される。具体的には、注目する依存関係のパスがクリティカルパス（CP）上のものでさらに非決定的な場合に、並行する他のクリティカルパス（CP）のパスの数に１を足した値が記録される。なお、ここでは、決定的なクリティカルパス（CP）が並行している場合、工数は無限大となる。有効の項目の欄４１ｍについては、後述する。
【００３２】
図５は、図３の静的依存関係解析部３１の静的依存関係解析の処理内容を説明するための図である。  
まず、プログラムコード１２ａが読み込まれると、コントロールフローグラフ構築部５１が、コントロールデータフローグラフとコールグラフを構築する処理を実行する。よって、コントールフローグラフ構築部５１は、コールグラフ構築部も含んでいる。  
コントロールフローグラフ構築部５１の処理によって、コントロールフローグラフ（CFG）とコールグラフ（CG）の情報５１ａが生成される。
【００３３】
次に、生成されたコントロールフローグラフ(CFG)の情報に基づいて、３つの依存関係の解析が実行される。  
３つの依存関係の解析処理は、それぞれ、変数定義／使用解析部５２と、コントロール依存関係解析部５３と、ポインタ解析部５４によって実行される。変数定義／使用解析部５２と、コントロール依存関係解析部５３と、ポインタ解析部５４は、それぞれ、コントロールフローグラフ(CFG)の情報を用いて依存関係の解析を行い、解析の結果得られた依存関係情報を文間依存関係情報データベース１２ｂに登録していく。
【００３４】
３．１．１  データ依存関係の解析
変数定義／使用解析部５２は、コントロールフローグラフ（CFG）の情報から、変数の情報に基づいて、データの依存関係（Data）があるか否かを、解析して判定する。例えば、図２のプログラム２１のfor文中、１５行目の文「a=p[i];」と、１９行目の文「e=a-b;」との間にデータの依存関係（Data）があると判定される。
【００３５】
例えば、上述したプログラム２１の１５行目の文「a=p[i];」と、１９行目の文「e=a-b;」との間にデータの依存関係（Data）があることは、文間依存関係情報データベース１２ｂの１行目に、依存関係情報として登録されている。
【００３６】
すなわち、図４の１行目には、依存元の文の場所欄４１ａには、ファイル名が「a.c」で、プログラムの１５行目で、その１５行目の左から１７文字目からの文であることが示されている。依存元の文の関数名欄４１ｂには、関数名が「test」であることが示されている。依存元の文の基本ブロック番号欄４１ｃには、基本ブロック番号が「3」であることが示されている。依存先の文の場所欄４１ｄには、ファイル名が「a.c」で、プログラムの１９行目で、その１９行目の左から１７文字目からの文であることが示されている。依存先の文の関数名欄４１ｅには、関数名が「test」であることが示されている。依存先の文の基本ブロック番号欄４１ｆには、基本ブロック番号が「3」であることが示されている。
【００３７】
さらに、キャリー性は、無し「Ｆ」であり、依存の種類は、データ依存「Data」であり、決定性は、有り「Ｔ」があることが記録されている。決定性の解析については後述する。
【００３８】
３．１．２  コントロール依存関係の解析
コントロール依存関係解析部５３は、コントロールフローグラフ（CFG）の情報から、if文等の所定の命令の有無に基づいて、コントロールの依存関係（Ctrl）があるか否かを、解析して判定する。図２のプログラム部分２２ｂでは、if文があり、そのif文に続く文において、他の基本ブロックに処理が飛んでいるため、コントロールの依存関係（Ctrl）があると判定される。具体的には、図２のプログラム２１の３４行目の１７文字目から始まる処理命令の文「test(&v[0],&w[0],&x[0],&y[0],&z[0]」と、１行目の１文字目から始まる処理命令の文「int test (int *p_in,int *q_in,int *r_in,int *s_in,int *w_out) {」との間で、コントロールの依存関係（Ctrl）があると判定される。
【００３９】
３．１．３  コントロール依存関係の解析
ポインタ解析部５４は、コントロールフローグラフ（CFG）の情報から、ポインタの情報に基づいて、ポインタの依存関係（Ptr）があるか否かを、解析して判定する。例えば、図２のプログラム２１のfor文中、２４行目の文「w[i]=k;」と、１５行目の文「a=p[i];」との間にポインタの依存関係（Ptr）があると判定される。すなわち、「w[i]」と「p[i]」のそれぞれのポインタが、メモリ上で同じ位置を指しているかは不明であるので、ポインタの依存関係（Ptr）が有る、あるいは有る可能性があると判定される。
【００４０】
コントール依存関係情報解析部５３の処理の結果情報は、コントロール依存関係情報５３ａとして、文間依存関係情報データベース１２ｂに出力され、登録される。  
さらに、コントロール依存関係解析部５３の結果情報は、２つの決定性解析部５５，５６に供給される。
【００４１】
３．１．４  決定性の解析
変数定義／使用解析部５２からの情報と、決定性解析部５５からの決定性の情報とから、データ依存の依存関係情報（以下、データ依存関係情報ともいう）５２ａが生成される。また、ポインタ解析部５４からの情報と、決定性解析部５６からの決定性の情報とから、ポインタ依存の依存関係情報（以下、ポインタ依存関係情報ともいう）５４ａが生成される。データ依存関係情報５２ａとポインタ依存関係情報５４ａも、文間依存関係情報データベース１２ｂに出力され、登録される。
【００４２】
ここで、決定性の解析について説明する。決定性の解析は、決定性解析部５５、５６及びコントロール依存関係解析部５３において実行される。決定性解析部５５、５６及びコントロール依存関係解析部５３は、それぞれ、プログラム中のデータ依存、制御依存及びポインタ依存の少なくとも１つの依存関係における決定性を判定する決定性判定部を構成する。
【００４３】
図６は、決定性解析部５５における決定性の判定に関する処理の流れの例を示すフローチャートである。
【００４４】
まず、コントロールフローグラフ(CFG)を用いて、到達する定義のデータフロー方程式を解く処理が実行される（ステップS11）。その方程式を解いた結果、ポインタの唯一の到達する定義があるか否かが判定される（ステップS12）。ステップS12では、簡単に言えば、変数のポインタが指すメモリのデータは、確定的なデータであるか否かが判定される。
【００４５】
ステップS12でYESの場合は、決定性は「真」すなわちT（True）となる（ステップS13）。ステップS12でNOの場合は、決定性は「偽」すなわちF（False）となる（ステップS14）。上述した図２の場合、w[i]とp[i]のそれぞれのポインタが、メモリ上で同じ位置を指しているかは不明であるので、データの依存関係（Data）が有る可能性がある、すなわちデータの依存関係（Data）が有りとなる。この決定性の情報は、文間依存関係情報データベース１２ｂに登録される。例えば、図４の１行目では、依存の種類が「Data」とされ、決定性が「T」となっている。
【００４６】
図７は、コントロール依存関係解析部５３における決定性の判定に関する処理の流れの例を示すフローチャートである。  
図７において、作成されたコントロールフローグラフ（CFG）とコールグラフ（CG）の情報から、コントロールの依存関係（Ctrl）の情報が、文間依存関係情報データベース１２ｂに登録される。例えば、図４の２行目では、依存の種類が「Ctrl」とされ、決定性が「T」となっている。
【００４７】
図８は、決定性解析部５６における決定性の判定に関する処理の流れの例を示すフローチャートである。  
図８において、ステップS11とS12は、図６における処理と同じ内容であるので、説明は省略する。
【００４８】
ステップS12でYESの場合、文が静的なメモリ領域のアドレス代入文か否かが判定される（ステップS15）。  
ステップS15でNOの場合、決定性は「無し」すなわちF（False）となる（ステップS16）。
【００４９】
ステップS15でYESの場合、定義が同じアドレスであるかが判定される（ステップS17）。  
ステップS17でNOの場合、決定性は「有り」すなわちT（True）となる（ステップS18）。しかし、この場合は、ポインタの依存関係（Ptr）が「無し」となるので、文間依存関係情報データベース１２ｂには登録されない。  
ステップS17でYESの場合、ポインタの依存関係（Ptr）が「有り」で、決定性は「有り」すなわちT（True）となる（ステップS19）。例えば、図４の３行目では、依存の種類が「Ptr」とされ、決定性が「F」となっている。
【００５０】
以上のようにして、図４の文間依存関係情報データベース１２ｂにおける欄４１ａから４１ｉまでの項目のデータが記録される。  
ここで、図３に戻り、処理は、クリティカルパス解析処理に移行する。
【００５１】
３．２  クリティカルパスの解析
クリティカルパス解析処理は、クリティカルパス解析抽出部３２により行われる。  
クリティカルパス解析抽出部３２では、プログラム２１を解析して、プログラムの先頭から最後までの複数のパスの中で、処理単位の数の最も多いパス、すなわちクリティカルパス（CP）を抽出して、その抽出されたクリティカルパス（CP）上に、図４の文間依存関係情報データベース１２ｂに登録された各依存関係情報の文が、存在するか否かが判定される。
【００５２】
そして、クリティカルパスの欄４１ｊは、文が抽出されたクリティカルパス上に存在する場合は、「真」すなわちT（True）として、文が抽出されたクリティカルパス上に存在しない場合は、「偽」すなわちF（False）として、データが文間依存関係情報データベース１２ｂに登録される。  
次に、処理は、並列化可能性解析に移行する。
【００５３】
３．３  並列化可能性の解析
並列化可能性解析は、並列化可能性解析部３３により行われる。図９は、並列化可能性解析部３３の処理内容を説明するための図である。  
図９は、クリティカルパス解析抽出部３２と並列化可能性解析部３３の２つの処理の内容を含む。クリティカルパス解析抽出部３２は、上述したように、依存関係情報３１ａの依存関係情報から、クリティカルパス（CP）を算出して求める。
【００５４】
並列化可能性解析部３３は、依存関係仮削除部７１と比較部７２とを含む。依存関係仮削除部７１は、クリティカルパス（CP）の情報（以下、クリティカルパス情報という）３２ａと依存関係情報３１ａから、クリティカルパス(CP)上にあって決定性が「Ｆ」の依存関係情報を抽出する。すなわち、依存関係仮削除部７１は、クリティカルパス（CP）上に存在し、かつ依存関係における決定性が非決定的である処理命令を抽出する処理命令抽出部を構成する。
【００５５】
そして、依存関係仮削除部７１は、抽出した各依存関係情報について、その依存関係を仮に削除して、その仮の削除がされた場合の仮のクリティカルパス（PCP）を算出して、仮クリティカルパス情報７１ａとして出力する。従って、依存関係仮削除部７１は、抽出された非決定的である処理命令のパス部分を並列化して仮に削除した場合におけるプログラム１２ａの仮のクリティカルパスを抽出する仮クリティカルパス抽出部を構成する。
【００５６】
比較部７２は、クリティカルパス情報３２ａと仮クリティカルパス情報７１ａとを比較し、比較した結果の情報を、並列化効果情報として、文間依存関係情報データベース１２ｂに出力する。並列化効果情報の欄４１ｋに、並列化効果情報７２ａが記録される。
【００５７】
並列化効果情報７２ａは、その依存関係が有るとされた文、すなわち処理命令、を並列化処理にした場合に、どれくらいの処理単位が削減されるか、を示す量の情報である。すなわち、並列化効果情報７２ａは、非決定的である処理命令の削除の前後において、クリティカルパス解析抽出部３２と依存関係仮削除部７１においてそれぞれ抽出されたクリティカルパスの差の情報である。並列化効果情報７２ａについては、後で具体的に説明する。
【００５８】
さらに、並列化工数情報７１ｂが、依存関係仮削除部７１において算出され、文間依存関係情報データベース１２ｂに出力される。
【００５９】
並列化工数情報７１ｂは、その依存関係が非決定的であるとされた文、すなわち処理命令、を並列化するに伴い、併せて依存関係を無くして並列化処理を行うようにしなければならない他のパスがあれば、その他のパスの数も含めた並列化の工数を示す情報である。すなわち、並列化工数情報７１ｂは、非決定的である処理命令を並列化する場合に、同時に並列化を実現する必要のある依存関係のパスの数の情報である。並列化工数情報７１ｂについても、後で具体的に説明する。
【００６０】
比較部７２は、抽出された非決定的である処理命令のパスに関わる処理を並列化して、非決定的である処理命令のパスを削除する場合に、並列化を阻害する依存関係の数に応じた並列化工数情報と、並列化により短縮される処理命令の数に応じた並列化効果情報とを出力する並列化情報出力部を構成する。
【００６１】
なお、図１０は、図９に示した並列化可能性解析部３３の処理プログラム８１の例を示す図である。
【００６２】
以上のようにして、プログラム１２ａが入力され、上述したような処理がされると、本実施の形態にかかる並列化支援装置１は、並列化工数情報７１ｂと並列化効果情報７２ａとを出力する。並列化工数情報７１ｂと並列化効果情報７２ａの出力は、例えば、表示装置１３の画面上に出力される。よって、ユーザは、並列化工数情報７１ｂと並列化効果情報７２ａを認識することができる。その結果、ユーザは、並列化作業の負荷量と並列化の効果を考慮しながら、並列化処理作業を行うことができる。
【００６３】
３．４  並列化支援装置の利用形態例
次に、並列化支援装置１の表示装置１３の画面の例を説明する。図１１は、並列化支援装置１の表示装置１３の画面の表示例を示す図である。  
図３のクリティカルパス解析抽出部３２と並列化可能性解析部３３の処理の結果、文間依存関係データベース１２ｂの項目の欄４１ｊから４１ｌまでの情報が、並列化支援向け依存関係情報３３ａとして追加される。並列化支援装置１は、追加された並列化支援向け依存関係情報３３ａも含む依存関係情報に基づいて、表示部３４によって、表示装置１３に種々の依存関係グラフの表示、すなわち並列化支援向け依存関係図表示３４ａをすることができる。よって、表示部３４は、プログラムの依存関係を依存関係グラフとして表示装置１３に表示する依存関係グラフ表示部を構成する。
【００６４】
並列化支援装置１は、依存関係の編集機能を有する。例えば、ユーザは、図３の依存関係図表示３４である種々の依存関係グラフの表示を見ながら、編集部３５を利用して依存関係を無効化する編集作業を行うことによって、どのように依存関係及びクリティカルパスが変化するかを画面上で把握し確認することもできる。図３において、ユーザが依存関係を無効化する作業は、依存関係無効化３５ａとして示されている。
【００６５】
例えば、図１１に示すように、表示装置１３の画面１０１上には、並列化支援向け依存関係図表示３４ａである依存関係を示す依存関係グラフを表示する依存関係グラフ表示部１０２と、各種表示モードを選択するための複数の表示モードボタン部１０３とを有する。複数の表示モードボタン部１０３は、表示装置１３に表示する依存関係グラフの種類を選択できるグラフ種類選択部を構成する。
【００６６】
ユーザは、並列化支援装置１の入力装置を操作することにより、図１０の画面を表示させることができる。依存関係グラフ表示部１０２には、表示モードボタン部１０３の各ボタンに応じた依存関係グラフが表示される。
【００６７】
以下、依存関係グラフ表示部１０２に表示される依存関係グラフの表示例を説明する。図１２から図１６は、それぞれ、並列化支援向け依存関係図表示３４ａの一つとしての依存関係グラフの例を示す。  
図１２は、表示装置１３の依存関係グラフ表示部１０２に表示される依存関係グラフの表示例を示す図である。図２のプログラム２１を解析して得られた依存関係情報に基づいて、並列化支援装置１の表示機能を用いて依存関係グラフとして表示すると、図１２の依存関係グラフが、表示装置１３の画面１０１上に表示される。
【００６８】
図１２の依存関係グラフにおいて、楕円及び長方形で描かれた各要素が文を表し、文と文を結ぶ矢印がそれぞれ依存関係を表す。図１２において、例えば、符号１１１で示す楕円及び長方形は、文を表す。１または複数の文を囲む枠線は、基本ブロック及び関数のまとまりを表す。図１２において、例えば、符号１１２で示す枠線は、基本ブロックまたは関数のまとまりを表す。
【００６９】
依存関係を表すパスすなわち矢印はその種類と決定性に応じ、制御依存（Ctrl）は太線で、データ依存（Data）や決定的なポインタ依存（Ptr）は実線で、ポインタ依存（Ptr）のうち非決定的なものは破線で示される。図１２において、例えば、符号１１３で示す太線は、制御依存（Ctrl）を表し、符号１１４で示す実線は、データ依存（Data）あるいは決定的なポインタ依存（Ptr）を表し、符号１１５で示す破線は、非決定的なポインタ依存（Ptr）を表す。文間依存関係情報データベース１２ｂにおける決定性の情報を用いて、表示における実線と破線の区別が決定される。決定性の情報が「Ｆ」ならば、破線表示となる。
【００７０】
また、キャリー性の依存を表す矢印には「+n」などのようにキャリー性の依存であることを示すラベルが付加される。図１２において、例えば、符号１１６で示す部分に、ラベル「+ｎ」が、付加されている。  
ユーザは、図１２の依存関係グラフをみて、プログラムの構造と依存関係を把握することができる。
【００７１】
さらに、並列化支援装置１の表示機能を用いて、画面上に、依存関係グラフ上の任意のブロックに対して、ブロック内の文の依存関係表示を省略して描画させることが出来る。図１０におけるブロック表示ボタン１０３ａをクリック、すなわち指定することによって、図１３の画面が表示される。図１３は、依存関係グラフのブロックレベル表示の表示例を示す図である。
【００７２】
また、図１０における関数表示ボタン１０３ｂをクリック、すなわち指定することによって、図１４の画面が表示される。図１４は、依存関係グラフ上の任意の関数に対して、関数内のブロックの依存関係表示を省略した依存関係グラフの表示例を示す図である。
【００７３】
また、図１０における展開表示ボタン１０３ｃをクリック、すなわち指定することによって、図１５の画面が表示される。図１５は、依存関係グラフループ２段階ループ展開表示の表示例を示す図である。図１５に示すように、キャリー性の依存関係がある場合に指定したキャリー性依存関係を含む基本ブロックをコピーすることにより、キャリー性依存関係が、基本ブロックからコピーされた基本ブロックへの依存関係として表示される。この際、図４の依存関係データベース１２ｂも自動的に更新される。
【００７４】
さらにまた、図１０におけるクリティカルパス（CP）強調表示ボタン１０３ｄをクリック、すなわち指定することによって、図１６の画面が表示される。図１６は、クリティカルパス強調表示の表示例を示す図である。図１６に示すように、プログラム中の２点間の処理の実行におけるクリティカルパス上の依存関係のパスを強調表示することが出来る。ここでは、クリティカルパスは、実線で示されている。この際、クリティカルパス上の依存関係で非決定的な依存関係のパスは、依存関係を無効化することでプログラムの並列性を上げられる可能性があるため、符号１１７で示すように、特に強調して表示される。これは、図４におけるクリティカルパスの欄４１ｊと決定性の欄４１ｉを参照して、クリティカルパス（CP）が「T」で、決定性が「F」の文に関するパスを抽出することによって、強調表示が行われる。
【００７５】
ユーザは、図１６に示すように、一つの基本ブロック（Func_test_Block_3_0）と他の基本ブロック（Func_test_Block_3_1）との間に依存関係があるが、その依存関係のパスを無くことができれば、基本ブロック（Func_test_Block_3_1）中の単位処理の数、すなわち５段、の分だけクリティカルパスが短くなることを、容易に理解できる。ユーザは、図１６を見ると、基本ブロック（Func_test_Block_3_1）中の単位処理の段数が５であるので、並列化効果は５であり、強調表示されたクリティカルパスの数が２であるので、並列化工数は、２とわかる。
【００７６】
なお、このように依存関係グラフ上に、並列化効果の値と並列化工数の値を、パスに並べて表示するようにしてもよいし、別途、ポップアップウインドウのような別の部分に、数値で表示するようにしてもよい。
【００７７】
また、並列化支援装置１は、クリティカルパス（CP）上の依存関係において非決定的な依存関係の情報を、並列化効果を並列化工数で除算した値の降順で、すなわち大きい値の順で、ソートして列挙する機能、すなわち手段を有する。このソートされてリスト表示されることによって、少ない工数の依存関係無効化で、大きな並列化効果を期待できる依存関係を容易に見つけることが可能となる。例えば、図４の文間依存関係情報データベース１２ｂの依存関係情報を、表示装置１３の画面上に表示する際に、並列化効果を並列化工数で除した値の降順でソートして、依存関係情報を表示するようにすることもできる。図１８における表示部３４が、依存関係における決定性が非決定的である処理命令の情報を、並列化効果情報の値を並列化工数情報の値で除算した値の大きな順に出力する処理命令情報出力部を構成する。
【００７８】
並列化支援装置１は編集機能を有し、その編集機能は、編集部３５によって、依存関係グラフ上の依存関係のうち、任意の非決定的な依存関係を選んで無効化することが出来る。例えば、画面上で、マウス等の入力装置を用いて所望の依存関係の線を選択して、所定の操作をするようにして、その無効化を行うことができる。無効化された依存関係は依存関係情報データベース１２ｂにおいて有効の項目の欄４１ｍに無効を示す値あるいは情報が記録される。本実施の形態の編集機能では無効化された依存関係のみ抽出し、任意の依存関係を再び有効化することが出来る。なお、決定的な依存関係の無効化は、本実施の形態の編集機能によって禁止される。よって、編集部３５は、表示された依存関係グラフの線を選択して所定の編集を行うことができる依存関係グラフ編集部を構成する。
【００７９】
本実施の形態の表示機能では、例えば、ユーザが画面上で依存関係の有効／無効を変更すると、クリティカルパス（CP）を再計算し、文間依存関係情報データベース１２ｂを仮に更新して、依存関係グラフの再描画を行なう。依存関係の仮の無効化が並列性の向上に有効であったか否かが図１７の様に即座に分かる。図１７は、依存関係を無効化後の依存関係グラフの表示例を示す図である。
【００８０】
従って、プログラム２１を入力すると、並列化支援装置１は、静的依存関係解析、クリティカルパス解析、及び並列化可能性解析を実行する。その結果、図４の文間依存関係情報データベース１２ｂが仮に更新され、ユーザは、並列化効果と並列化工数の情報をみることによって、プログラム２１中の、並列化を効果的に行うことができる箇所を容易に把握することができる。特に、上述したようなソート機能を利用すれば、より効果的でかつ効率的に、並列化作業を行うことができる。
【００８１】
さらに、図４の文間依存関係情報データベース１２ｂに基づいて、画面上に種々の形態で依存関係グラフを表示することができ、かつ編集も容易にできるので、ユーザは、効率的な並列化作業を簡単に行うことができる。
【００８２】
（第２の実施の形態）
次に、本発明の第２の実施の形態について説明する。  
第１の実施の形態では、依存関係が決定的でない場合には、依存関係情報の決定性の欄は、非決定的としていた。すなわち、依存関係が非決定的な場合は、「Ｆ」を登録している。しかし、実行時のみ依存関係が確定するプログラムもある。そこで、本第２の実施の形態では、実際にプログラムをターゲットのマルチプロセッサ上で実行させて、その実行の結果、決定的な依存関係を抽出する。そして、静的依存関係解析部３１において非決定的とされた依存関係の依存関係情報の中で、決定的な依存関係とすることができる依存関係情報を、並列化対象から取り除くことによって、ユーザに、並列化対象の依存関係情報を減らすことができるようにしたものである。対象プログラムの規模が大きいときに、並列化可能性の検討対象が減ることは、並列化作業の効率アップに繋がる。
【００８３】
図１８は、本実施の形態に係わる並列化支援装置１の処理の流れの例を示すフローチャートである。図１８において、図３と同じ処理内容については、同じ符号を付して説明は省略する。
【００８４】
プログラムコード１２ａは、コンパイラ９１によってコンパイルされて、実行ファイル９１ａが生成される。そして、シミュレータ及びプロファイラ部９２によって、プロファイル情報９２ａが生成される。シミュレータ及びプロファイラ部９２は、シミュレータとプロファイラを含む処理部である。
【００８５】
コンパイラ９１は、図４と同じ構成の文間依存関係情報データベース１２ｂを生成し、依存の種類がポインタ依存（Ptr）の依存関係情報において、依存元の文と依存先の文に対応するアセンブラコードに対して、プロファイラが認識できる所定のラベルを付加する。プロファイラは、そのラベルが付加されたメモリアクセス命令について、実行時にアクセスしたアドレスの範囲をプロファイル情報として出力する。そして、動的依存関係解析部９３は、そのプロファイル情報に基づいて、決定性のある依存関係情報を抽出する。
【００８６】
例を挙げて説明する。図１９は、並列化したいプログラムの例を示す図である。図１９のプログラム９４は、配列データａ[]を４つの領域に分けてデータを書き込むプログラムである。具体的には、プログラム９４は、mainのプログラムに、引数「100 200 100 150 500 600 700 800」が与えられ、変数s0からs3、及びe0からe3を用いて、配列データａ[]の４つの領域にデータを書き込むプログラムである。
【００８７】
プログラム９４が実行ファイル９１ａは、シミュレータ及びプロファイラ部９２において実行されて、各文のプロファイル情報９２ａが得られるので、そのプロファイル情報９２ａから、動的依存関係情報として、依存関係情報が得られる。
【００８８】
図２０は、プログラム９４が実行されて、そのプログラムの実行における依存関係がプロファイル情報９２ａから生成された依存関係情報を説明するための図である。図２０に示すように、４つのfor文中、第１のfor文９４ａと第２のfor文９４ｂとの間の依存関係は、決定的であるが、他の文９４ａから９４ｄ間の依存関係は、非決定的であるとする。
【００８９】
そして、静的依存関係解析部３１によって得られた依存関係情報と動的依存関係解析部９３によって得られたい依存関係情報とは対応がとれている。よって、静的依存関係解析部３１によって得られた、決定性が非決定的とされた依存関係情報の中で、動的依存関係解析部９３の解析結果、決定性が決定的であるとされた依存関係情報があれば、静的依存関係解析部３１の解析結果、決定性が非決定的とされた依存関係情報の決定性の項目が「決定的」すなわち「Ｔ」に変更される。
【００９０】
以上説明したように、本実施の形態によれば、静的依存関係解析部３１によって得られた依存関係情報の中で、ポインタ依存について、動的依存関係解析部９３によって得られた決定性が決定的な依存関係情報を用いて、修正することにより、文間依存関係情報データベース１２ｂ中の並列化対象の数を減らすことができるので、並列化作業の効率が向上する。
【００９１】
以上のように、上述した各実施の形態のプログラム並列化支援装置によれば、プログラムの並列化を効率的に行える処理命令の依存関係の箇所を抽出することができる。
【００９２】
なお、上述した依存関係は、処理命令間、すなわち文間の依存関係であるが、上述したブロック間の依存関係についても同様であり、その場合、上述した依存関係データベースは、ブロック間依存関係データベースとなる。
【００９３】
なお、本明細書における各「部」は、実施の形態の各機能に対応する概念的なもので、必ずしも特定のハードウエアやソフトウエア・ルーチンに１対１には対応しない。従って、本明細書では、以下、実施の形態の各機能を有する仮想的回路ブロック（部）を想定して実施の形態を説明した。また、本実施の形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、あるいは実行毎に異なった順序で実行してもよい。
【００９４】
さらになお、以上説明した動作を実行する並列化支援処理プログラムコードは、コンピュータプログラム製品として、フレキシブルディスク、ＣＤ−ＲＯＭ等の可搬媒体や、ハードディスク等の記憶媒体に、その全体あるいは一部が記録され、あるいは記憶される。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明の並列化支援装置を実現することができる。
【００９５】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００９６】
【図１】本発明の第１の実施の形態に係わるプログラム並列化支援装置の構成を示す構成図である。
【図２】本発明の第１の実施の形態に係わる、複数のデータを読み出して、所定の処理を施したデータを出力するプログラムの例を示す図である。
【図３】本発明の第１の実施の形態に係わる並列化支援装置の並列化支援処理プログラムの処理の流れの例を示すフローチャートである。
【図４】本発明の第１の実施の形態に係わる文間依存関係情報データベースの例を示す図である。
【図５】図３の静的依存関係解析部の静的依存関係解析の処理内容を説明するための図である。
【図６】本発明の第１の実施の形態に係わる、決定性解析部における決定性の判定に関する処理の流れの例を示すフローチャートである。
【図７】本発明の第１の実施の形態に係わる、コントロール依存関係解析部における決定性の判定に関する処理の流れの例を示すフローチャートである。
【図８】本発明の第１の実施の形態に係わる、決定性解析部における決定性の判定に関する処理の流れの例を示すフローチャートである。
【図９】本発明の第１の実施の形態に係わる、並列化可能性解析部の処理内容を説明するための図である。
【図１０】図９に示した並列化可能性解析部の処理プログラムの例を示す図である。
【図１１】本発明の第１の実施の形態に係わる、並列化支援装置の表示装置の画面の表示例を示す図である。
【図１２】本発明の第１の実施の形態に係わる、表示装置の依存関係グラフ表示部に表示される依存関係グラフの表示例を示す図である。
【図１３】本発明の第１の実施の形態に係わる、依存関係グラフのブロックレベル表示の表示例を示す図である。
【図１４】本発明の第１の実施の形態に係わる、依存関係グラフ上の任意の関数に対して、関数内のブロックの依存関係表示を省略した依存関係グラフの表示例を示す図である。
【図１５】本発明の第１の実施の形態に係わる、依存関係グラフループ２段階ループ展開表示の表示例を示す図である。
【図１６】本発明の第１の実施の形態に係わる、クリティカルパス強調表示の表示例を示す図である。
【図１７】本発明の第１の実施の形態に係わる、依存関係を無効化後の依存関係グラフの表示例を示す図である。
【図１８】本発明の第２の実施の形態に係わる、並列化支援装置の処理の流れの例を示すフローチャートである。
【図１９】本発明の第２の実施の形態に係わる、並列化したいプログラムの例を示す図である。
【図２０】本発明の第２の実施の形態に係わる、プログラムが実行されて、そのプログラムの実行における依存関係がプロファイル情報から生成された依存関係情報を説明するための図である。
【符号の説明】
【００９７】
１  並列化支援装置、１１  コンピュータ本体、１２  記憶装置、１２ａ  対象プログラム、１２ｂ  文間依存関係情報データベース、１２ｃ  並列化支援処理プログラム、１３  表示装置
【図１】
2009129179.tif 000003
【図２】
2009129179.tif 000004
【図３】
2009129179.tif 000005
【図４】
2009129179.tif 000006
【図５】
2009129179.tif 000007
【図６】
2009129179.tif 000008
【図７】
2009129179.tif 000009
【図８】
2009129179.tif 000010
【図９】
2009129179.tif 000011
【図１０】
2009129179.tif 000012
【図１１】
2009129179.tif 000013
【図１２】
2009129179.tif 000014
【図１３】
2009129179.tif 000015
【図１４】
2009129179.tif 000016
【図１５】
2009129179.tif 000017
【図１６】
2009129179.tif 000018
【図１７】
2009129179.tif 000019
【図１８】
2009129179.tif 000020
【図１９】
2009129179.tif 000021
【図２０】
2009129179.tif 000022