(57)【要約】【課題】分散共有メモリ型並列計算機において、逐次プログラムを並列化する際、データローカリティを高めて、並列プログラムの処理速度を高速化する。【解決手段】ページ割付け決定部１１３は、逐次プログラム１５０に含まれる並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定する。ループスケジューリング決定部１１４は、自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定する。【選択図】図１
2004206314.tif 000002
【特許請求の範囲】
【請求項１】
逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、
並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定手段と、
前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定手段と
を備えることを特徴とする並列プログラム生成装置。
【請求項２】
逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、
逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出手段と、
前記並列化可能ループ検出手段により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出手段と、
前記データ分散対象配列検出手段により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定手段と、
前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定手段と
を備えることを特徴とする並列プログラム生成装置。
【請求項３】
逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、
逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析手段と、
前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出手段と、
前記並列化可能ループ検出手段により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出手段と、
前記データ分散対象配列検出手段により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定手段と、
前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定手段と、
前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成手段と
を備えることを特徴とする並列プログラム生成装置。
【請求項４】
前記ページ割付け決定手段が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、１ページまたは数ページずつのラウンドロビンで行うことを特徴とする請求項１，請求項２または請求項３記載の並列プログラム生成装置。
【請求項５】
前記ループスケジューリング決定手段が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする請求項１，請求項２，請求項３または請求項４記載の並列化プログラム生成装置。
【請求項６】
前記ページ割付け決定手段が、前記データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする請求項１，請求項２，請求項３，請求項４または請求項５記載の並列プログラム生成装置。
【請求項７】
前記コード生成手段が、ソースプログラム形式の並列プログラムを生成することを特徴とする請求項３，請求項４，請求項５または請求項６記載の並列プログラム生成装置。
【請求項８】
前記コード生成手段が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする請求項３，請求項４，請求項５または請求項６記載の並列プログラム生成装置。
【請求項９】
逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、
並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、
前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程と
を含むことを特徴とする並列プログラム生成方法。
【請求項１０】
逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、
逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出工程と、
前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、
前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、
前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程と
を含むことを特徴とする並列プログラム生成方法。
【請求項１１】
逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、
逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析工程と、
前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出工程と、
前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、
前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定工程と、
前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定工程と、
前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成工程と
を含むことを特徴とする並列プログラム生成方法。
【請求項１２】
前記ページ割付け決定工程が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、１ページまたは数ページずつのラウンドロビンで行うことを特徴とする請求項９，請求項１０または請求項１１記載の並列プログラム生成方法。
【請求項１３】
前記ループスケジューリング決定工程が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする請求項９，請求項１０，請求項１１または請求項１２記載の並列化プログラム生成方法。
【請求項１４】
前記ページ割付け決定工程が、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする請求項９，請求項１０，請求項１１，請求項１２または請求項１３記載の並列プログラム生成方法。
【請求項１５】
前記コード生成工程が、ソースプログラム形式の並列プログラムを生成することを特徴とする請求項１１，請求項１２，請求項１３または請求項１４記載の並列プログラム生成方法。
【請求項１６】
前記コード生成工程が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする請求項１１，請求項１２，請求項１３または請求項１４記載の並列プログラム生成方法。
【請求項１７】
コンピュータに、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを実行させるための並列プログラム生成プログラム。
【請求項１８】
コンピュータに、逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを実行させるための並列プログラム生成プログラム。
【請求項１９】
コンピュータに、逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析工程と、前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定工程と、前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定工程と、前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成工程とを実行させるための並列プログラム生成プログラム。
【請求項２０】
前記ページ割付け決定工程が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、１ページまたは数ページずつのラウンドロビンで行うことを特徴とする請求項１７，請求項１８または請求項１９記載の並列プログラム生成プログラム。
【請求項２１】
前記ループスケジューリング決定工程が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする請求項１７，請求項１８，請求項１９または請求項２０記載の並列化プログラム生成プログラム。
【請求項２２】
前記ページ割付け決定工程が、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする請求項１７，請求項１８，請求項１９，請求項２０または請求項２１記載の並列プログラム生成プログラム。
【請求項２３】
前記コード生成工程が、ソースプログラム形式の並列プログラムを生成することを特徴とする請求項１９，請求項２０，請求項２１または請求項２２記載の並列プログラム生成プログラム。
【請求項２４】
前記コード生成工程が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする請求項１９，請求項２０，請求項２１または請求項２２記載の並列プログラム生成プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は並列プログラム生成装置，並列プログラム生成方法および並列プログラム生成プログラムに関し、特に逐次実行用ソースプログラムである逐次プログラムから分散共有メモリ型並列計算機向けの並列実行用ソースプログラムまたは並列実行用オブジェクトプログラムである並列プログラムを生成する並列プログラム生成装置，並列プログラム生成方法および並列プログラム生成プログラムに関する。
【０００２】
【従来の技術】
複数のプロセッサのそれぞれにメモリを設けて構成される分散共有メモリ型並列計算機の論理共有物理分散メモリ（物理的に分散したメモリを論理的に１つのメモリとして扱う）技術の１つとして、論理共有の仮想メモリ空間をページと呼ばれる単位ごとに切り分け、物理的に分散されたメモリに割り付けるものがある。
【０００３】
この技術において、どのページをどのプロセッサに割り付けるかを決定する技術として、プログラムを解析して各ページをそのページへの参照回数が最も多いプロセッサへ割り付けるものがある。
【０００４】
このページ割付け技術を用いて並列プログラムを生成する従来技術の一例として、プログラム中で最も逐次実行時間の長いカーネルループを検出し、カーネルループと同じデータアクセスパターンを再現することにより、ファーストタッチ方式データ分離を制御するコードを生成し、ファーストタッチ制御コードを並列プログラムに挿入するようにした技術が知られている（例えば、特許文献１参照）。
【０００５】
この従来の並列プログラム生成方法は、図４に示す逐次プログラム１５０ａに適用する場合、以下のように動作する。ここで、逐次プログラム１５０ａは、４行１５列の２次元配列ａを参照（アクセス）する２重ループを含み、この２重ループの内側のループを並列実行するプログラムである。ただし、この例では、ターゲットマシンとする分散共有メモリ型並列計算機のプロセッサ台数は４台、ページサイズは２次元配列ａの配列要素４つ分、２次元配列ａは１次元目（添字ｊの次元）がメモリ上でデータが連続する次元（以下、データ連続次元と略記する）であり、その配列要素は行優先順序で仮想メモリ空間のページに配置され、各ページが割り付けられるプロセッサが決定されるものとする。
【０００６】
従来技術では、まず、逐次プログラム１５０ａの１１行目の指示文＃ｐｒａｇｍａ  ｐａｒａｌｌｅｌにより、１２行目のループ変数ｊのfｏrループ（以下、単にｊループと表記する）が並列化可能ループであることを検出する。次に、この並列化可能ループをプロセッサ４台で並列化するために、jループのループ繰返し範囲ｊ＝０〜１４を、プロセッサ０にはループ繰返し範囲ｊ＝０〜３、プロセッサ１にはループ繰返し範囲ｊ＝４〜７、プロセッサ２にはループ繰返し範囲ｊ＝８〜１１、プロセッサ３にはループ繰返し範囲ｊ＝１２〜１４というように分けて、並列化可能ループを複数の分割ループに分割する。図２６（ｂ）は、各プロセッサ０〜３が各分割ループのループ繰返し範囲で２次元配列ａのどの配列要素を参照するか表す配列要素参照範囲を示す。次に、各分割ループにおいて、２次元配列ａの配列要素を配置した各ページがどのプロセッサに何回参照されるかを調べ、各ページを最も参照回数が多いプロセッサにページ割付けするコードを生成する。図２６（ａ）は、このときのページ割付け状況を示す。
【０００７】
ここで注目すべきことは、２次元配列ａのデータ連続次元（添字ｊの次元）における配列要素数が１５であり、またページサイズは配列要素４つ分であるため、ページの途中で行の終端がきてしまうことである。すなわち、仮想アドレス空間における論理的なページ境界と各プロセッサのメモリにおける物理的なデータ分散境界とが異なって、行にまたがるページが出てくることである。このため、２次元配列ａの配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループを分割した各分割ループの実行割当て先のプロセッサとが一致せず、図２３（ｃ）に示すようにリモート参照となる領域が生じていた。リモート参照になると、プロセッサ間通信が発生し、並列プログラムの処理速度を著しく低下させる原因となっていた。
【０００８】
このような状況が起こるのは、並列化可能ループを並列化する際、各プロセッサのメモリにおける物理的なデータ分散境界の幅を、仮想アドレス空間における論理的なページ当たりの２次元配列ａのデータ連続次元の配列要素数に比べて大きくとることができない場合である。このような状況は、比較的起こりやすい。それは、分散共有メモリ型並列計算機上のメモリ容量は無限ではないため、多次元配列を扱う場合、次元数を増やすほど多次元配列の各次元の配列要素数は小さくなるため、多次元配列の配列要素をデータ連続次元で配置することができるページの数は小さくなるからである。また、計算時間を短縮するためにプロセッサ台数を増やすと、１プロセッサ当たりの扱うデータ量が小さくなるため、データ分散境界の幅は小さくなるからである。
【０００９】
また、別の従来技術として、このような２次元配列ａの行にまたがるページを避ける場合、図２７に示すように、２次元配列ａのデータ連続次元（添字ｊの次元）の配列要素数を擬似的に増やしてダミーデータを格納し、２次元配列ａの各行の終端と各行最後のページの終端とを一致させるものがあった（例えば、非特許文献１参照）。しかし、この方法は、２次元配列ａの配列要素を配置する各ページのページ割付け先のプロセッサと並列化可能ループを分割した各分割ループの実行割当て先のプロセッサとを一致させることができたが、２次元配列ａの配列要素のデータ連続性を破壊した。このため、プログラムのある部分で多次元配列を１次元配列とみなして操作するような配列の配列要素のデータ連続性を仮定するプログラムには、この方法を用いることができなかった。
【００１０】
さらに、他の従来技術では、並列化可能ループのループ繰返し範囲において変数の参照を有する配列，配列宣言寸法が変数の配列，あるいは引数配列がある場合であっても、データ分散対象配列の配列要素が配置された各ページの割り付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割り当て先のプロセッサとの不一致を削減するようにして、データローカリティを向上させるようにしたものがあった（例えば、特許文献２参照）。しかし、この方法は、並列化可能ループでデータ分散対象配列が参照されるが、配列要素のどこからどこまで参照されるのかが実行時までわからない（コンパイル時にはわからない）ことを前提としたものであり、データ分散対象配列の各次元の配列要素数が事前に分かっていることを前提とする本発明とは異なるものである。
【００１１】
【特許文献１】
特開２０００−２３１５４５号公報（第７〜８頁、図１〜図２）
【非特許文献１】
デビッド・エフ・ベイコン，ジーハング・コウ，ディズチェング・アール・ジュ，カルヤン・マスクマー，ヴィヴェク・サーカー著“ア  コンパイラ  フレームワーク  フォー  リストラクチャリング  データ  デクラレーションズ  トゥ  エンハンス  キャッシュ  アンド  ティーエルビー  エフェクティブネス”，キャスコン９４，第２７０頁〜第２８２頁，１９９４（David F. Bacon, Jyh-Herng Chow, Dz-ching R. Ju, Kalyan Muthukumar, Vivek Sarkar “A CompilerFramework for Restructuring Data Declarations to Enhance Cache and TLBEffectiveness”, CASCON’94, pp. 270-282, 1994）
【特許文献２】
特開２００１−２９７０６８号公報（第７〜８頁、図１〜図２）
【００１２】
【発明が解決しようとする課題】
第１の問題点は、従来技術によって生成される分散共有メモリ型並列計算機をターゲットマシンとする並列プログラムは、データ分散対象配列の配列要素をデータ連続次元で複数のプロセッサにデータ分散する場合、特にデータ分散対象配列が多次元配列である場合、データ分散対象配列の配列要素が配置された各ページの割り付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割り当て先のプロセッサとの不一致を多く生じ、プロセッサ間通信が多発して、並列プログラムの処理速度を著しく低下させることである。
【００１３】
その理由は、従来技術では、並列化可能ループを並列化する際、まず並列化可能ループを分割し、各ページを最も参照するプロセッサに割り付けるようにするために、仮想アドレス空間における論理的なページ境界を考慮していないからである。このため、データ分散対象配列の配列要素をデータ連続次元で複数のプロセッサにデータ分散する場合、データ分散対象配列の各次元の配列要素数，ページサイズ，またはプロセッサ台数によっては、ページ境界をまたぐ分割ループのループ繰返し範囲の数が多くなるからである。
【００１４】
第２の問題点は、従来技術では、仮想アドレス空間における論理的なページ境界を各プロセッサのメモリにおける物理的なデータ分散境界に一致させるためにダミーデータを挿入するようにしていたので、データ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させる際に、データ分散対象配列の配列要素のデータ連続性を破壊することである。
【００１５】
本発明の目的は、逐次実行用ソースプログラムでなる逐次プログラムに含まれる並列化可能ループを並列化する際、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させることで、データローカリティを高めて、並列プログラムの処理速度を高速化する並列プログラム生成装置，並列プログラム生成方法および並列プログラム生成プログラムを提供することにある。
【００１６】
また、本発明の他の目的は、上記の目的を、並列化可能ループ内で参照されるデータ分散対象配列の配列要素のデータ連続性を破壊することなく実現する並列プログラム生成装置，並列プログラム生成方法および並列プログラム生成プログラムを提供することにある。
【００１７】
【課題を解決するための手段】
本発明の並列プログラム生成装置は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定手段と、前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定手段とを備えることを特徴とする。
【００１８】
また、本発明の並列プログラム生成装置は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出手段と、前記並列化可能ループ検出手段により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出手段と、前記データ分散対象配列検出手段により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定手段と、前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定手段とを備えることを特徴とする。
【００１９】
さらに、本発明の並列プログラム生成装置は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析手段と、前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出手段と、前記並列化可能ループ検出手段により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出手段と、前記データ分散対象配列検出手段により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定手段と、前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定手段と、前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成手段とを備えることを特徴とする。
【００２０】
さらにまた、本発明の並列プログラム生成装置は、前記ページ割付け決定手段が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、１ページまたは数ページずつのラウンドロビンで行うことを特徴とする。
【００２１】
また、本発明の並列プログラム生成装置は、前記ループスケジューリング決定手段が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする。
【００２２】
さらに、本発明の並列化プログラム生成装置は、前記ページ割付け決定手段が、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする。
【００２３】
さらにまた、本発明の並列プログラム生成装置は、前記コード生成手段が、ソースプログラム形式の並列プログラムを生成することを特徴とする。
【００２４】
また、本発明の並列プログラム生成装置は、前記コード生成手段が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする。
【００２５】
一方、本発明の並列プログラム生成方法は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを含むことを特徴とする。
【００２６】
また、本発明の並列プログラム生成方法は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを含むことを特徴とする。
【００２７】
さらに、本発明の並列プログラム生成方法は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析工程と、前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定工程と、前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定工程と、前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成工程とを含むことを特徴とする。
【００２８】
さらにまた、本発明の並列プログラム生成方法は、前記ページ割付け決定工程が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、１ページまたは数ページずつのラウンドロビンで行うことを特徴とする。
【００２９】
また、本発明の並列プログラム生成方法は、前記ループスケジューリング決定工程が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする。
【００３０】
さらに、本発明の並列化プログラム生成方法は、前記ページ割付け決定工程が、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする。
【００３１】
さらにまた、本発明の並列プログラム生成方法は、前記コード生成工程が、ソースプログラム形式の並列プログラムを生成することを特徴とする。
【００３２】
また、本発明の並列プログラム生成方法は、前記コード生成工程が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする。
【００３３】
他方、本発明の並列プログラム生成プログラムは、コンピュータに、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを実行させることを特徴とする。
【００３４】
また、本発明の並列プログラム生成プログラムは、コンピュータに、逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを実行させることを特徴とする。
【００３５】
さらに、本発明の並列プログラム生成プログラムは、コンピュータに、逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析工程と、前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定工程と、前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定工程と、前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成工程とを実行させることを特徴とする。
【００３６】
さらにまた、本発明の並列プログラム生成プログラムは、前記ページ割付け決定工程が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、１ページまたは数ページずつのラウンドロビンで行うことを特徴とする。
【００３７】
また、本発明の並列プログラム生成プログラムは、前記ループスケジューリング決定工程が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする。
【００３８】
さらに、本発明の並列化プログラム生成プログラムは、前記ページ割付け決定工程が、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする。
【００３９】
さらにまた、本発明の並列プログラム生成プログラムは、前記コード生成工程が、ソースプログラム形式の並列プログラムを生成することを特徴とする。
【００４０】
また、本発明の並列プログラム生成プログラムは、前記コード生成工程が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする。
【００４１】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００４２】
［第１の実施の形態］
図１は、本発明の第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００の構成を表すブロック図である。この並列化コンパイル装置１００は、計算機システム（図３参照）上で実施され、高級言語で記述された逐次実行用ソースプログラムである逐次プログラム１５０を入力して、並列実行用オブジェクトプログラムである並列プログラム１５１を生成する並列化コンパイラの機能を実現するものである。図１において、並列化コンパイル装置１００は、逐次プログラム１５０を読み込んで構文解析し中間語を生成する構文解析部１０１と、中間語から並列化した中間語を生成する並列化部１０２と、並列化した中間語から並列プログラム１５１を生成するコード生成部１０３と、並列化部１０２において解析されたページ割付け情報を格納するページ割付け情報記憶部１０４と、並列化コンパイル装置１００内部で生成される中間語を記憶する中間語記憶部１０５とを備えている。
【００４３】
並列化部１０２は、中間語から並列化可能ループを検出する並列化可能ループ検出部１１１と、並列化可能ループ内で参照される配列で配列要素がデータ連続次元で複数のプロセッサにデータ分散される配列（データ分散対象配列）を検出するデータ分散対象配列検出部１１２と、データ分散対象配列検出部１１２により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定部１１３と、ページ割付け決定部１１３により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定部１１４とを備えている。
【００４４】
これらの各部は、それぞれ次のように動作する。
【００４５】
構文解析部１０１は、逐次プログラム１５０の構文解析を行い、並列化コンパイル装置１００の内部で使用する中間語を生成し、それを中間語記憶部１０５に格納する。
【００４６】
並列化可能ループ検出部１１１は、中間語記憶部１０５に格納されている中間語を解析し、並列化可能ループを検出する。
【００４７】
データ分散対象配列検出部１１２は、並列化可能ループ検出部１１１により検出された並列化可能ループ内で参照される配列を調べ、配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出する。
【００４８】
ページ割付け決定部１１３は、データ分散対象配列検出部１１２により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定する。このとき、ページ割付け決定部１１３は、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数からデータ分散対象配列の配列要素のページ割付け状況を決定し、ページ割付け情報としてページ割付け情報記憶部１０４に格納する。また、ページ割付け決定部１１３は、ページ割付け状況を実現する中間語を生成して中間語記憶部１０５に格納する。
【００４９】
ループスケジューリング決定部１１４は、ページ割付け情報記憶部１０４に格納されているデータ分散対象配列の配列要素のページ割付け情報から、ページ割付け決定部１１３により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループ検出部１１１により検出された並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定する。また、ループスケジューリング決定部１１４は、この結果を実現する中間語を生成して中間語記憶部１０５に格納する。
【００５０】
コード生成部１０３は、中間語記憶部１０５に格納されている中間語から並列プログラム１５１を生成する。
【００５１】
図２を参照すると、第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００の処理は、逐次プログラム構文解析ステップ２０１と、未解析ループ有無判定ステップ２０２と、並列化可能ループ検出ステップ２０３と、未解析配列有無判定ステップ２０４と、データ分散対象配列検出ステップ２０５と、ページ割付け決定ステップ２０６と、並列化可能ループ分割・分割ループ実行割当てプロセッサ決定ステップ２０７と、並列プログラム生成ステップ２０８とからなる。
【００５２】
次に、このように構成された第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００の動作について、図１および図２を参照しながら詳細に説明する。
【００５３】
まず、構文解析部１０１は、逐次プログラム１５０を読み込んで構文解析し、並列化コンパイル装置１００内で使用する中間語に変換して中間語記憶部１０５に格納する（ステップ２０１）。
【００５４】
次に、並列化可能ループ検出部１１１は、中間語記憶部１０２に格納されている中間語からまだ解析していないループを探す（ステップ２０２）。
【００５５】
まだ解析していないループが見つかれば、並列化可能ループ検出部１１１は、そのループが並列化可能ループであるかを検出する（ステップ２０３）。
【００５６】
並列化可能ループであれば、データ分散対象配列検出部１１２は、ステップ２０３により検出した並列化可能ループの本体を解析し、まだ解析していない配列があるかどうかを調べる（ステップ２０４）。
【００５７】
まだ解析していない配列が見つかれば、データ分散対象配列検出部１１２は、この配列が、配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列であるかを検出する（ステップ２０５）。
【００５８】
データ分散対象配列であれば、ページ割付け決定部１１３は、ステップ２０５により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定する（ステップ２０６）。また、ページ割付け決定部１１３は、このページ割付け状況をページ割付け情報としてページ割付け情報記憶部１０４に格納する。ここで、配列要素が配置された各ページを割り付けるプロセッサの決定は、例えば、データ分散対象配列の各次元の配列要素数，ページサイズおよびプロセッサ台数に応じて、１ページずつのラウンドロビンで決定してもよく、数ページずつのラウンドロビンで決定してもよい。また、ユーザからの指示によってページを割り付けるプロセッサを決定してもよいし、その他の決定基準によってページを割り付けるプロセッサを決定してもよい。
【００５９】
次に、ループスケジューリング決定部１１４は、ページ割付け情報記憶部１０４に格納されているデータ分散対象配列の配列要素のページ割付け情報を参照して、ページ割付け決定部１１３により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループ検出部１１１により検出された並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定する（ステップ２０７）。また、ループスケジューリング決定部１１４は、この結果を実現する中間語を生成して中間語記憶部１０５に格納する。
【００６０】
最後に、コード生成部１０３は、中間語記憶部１０５に格納されている中間語から並列プログラム１５１を生成する（ステップ２０８）。
【００６１】
次に、第１の実施の形態の効果について説明する。
【００６２】
第１の実施の形態では、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定してから、そのページ割付け状況に従って自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するように構成されているため、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させることができ、並列プログラムのデータローカリティを向上させ、プロセッサ間通信の発生を削減して、並列プログラムの処理速度を高速化することができる。
【００６３】
さらに、第１の実施の形態では、データ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定する際に、仮想アドレス空間における論理的なページ境界と各プロセッサのメモリにおける物理的なデータ分散境界とを一致させるためにダミーデータを挿入しないように構成されているため、データ分散対象配列の配列要素のデータ連続性を破壊せずに、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させることができ、並列プログラムのデータローカリティを向上させ、プロセッサ間通信の発生を削減して、並列プログラムの処理速度を高速化することができる。
【００６４】
図３は、図１に示した並列化コンパイル装置１００を実現する計算機システムの構成例を示したブロック図である。図３において、３００はプロセッサ３０１およびメモリ３０２から構成されるパーソナルコンピュータやワークステーション等からなる情報処理装置、３１１は液晶ディスプレイやＣＲＴ（ＣａｔｈｏｄｅＲａｙ  Ｔｕｂｅ）ディスプレイ等からなる表示装置、３１２はマウスやキーボード等からなる入力装置、３１３はハードディスクドライブ等からなる外部記憶装置、３１４はネットワークインタフェースカードやモデム等からなる通信装置、３１５はＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフレキシブルディスク等からなる記憶媒体、３１６は記憶媒体３１５に記録されたデータを読み出すための駆動装置である。
【００６５】
情報処理装置３００により記憶媒体３１５に格納されたプログラムおよびデータを、駆動装置３１６を介して外部記憶装置３１３にインストール、または通信装置３１４を介してネットワーク上からダウンロードすることにより外部記憶装置３１３にインストールした後、外部記憶装置３１３からメモリ３０２に読み込み、プロセッサ３０１で処理することで、図１に示す並列化コンパイル装置１００の各機能が構成される。
【００６６】
次に、具体的な実施例を用いて、第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００の動作をより詳細に説明する。
【００６７】
ここでは、図４に示すような逐次プログラム１５０ａが与えられた場合の、並列化部１０２の動作を説明する。
【００６８】
並列化可能ループ検出部１１１は、逐次プログラム１５０ａの１１行目のユーザによる指示文＃ｐｒａｇｍａ  ｐａｒａｌｌｅｌによって１２行目のループ変数ｊのｆｏｒループ（以下、ｊループと表記する）が並列化可能ループであることを検出する（ステップ２０３）。
【００６９】
次に、データ分散対象配列検出部１１２は、逐次プログラム１５０ａの１２行目以降の並列化可能ループの本体を調べ、逐次プログラム１５０ａの１３行目に２次元配列ａを見つける（ステップ２０４でイエス）。ここで、２次元配列ａの添字がループ変数ｊである次元がデータ連続次元だったとする。すると、逐次プログラム１５０ａの１２行目のループ変数ｊが１３行目の２次元配列ａでデータ連続次元の添字であることから、データ分散対象配列検出部１１２は、２次元配列ａはデータ連続次元で配列要素が複数のプロセッサにデータ分散されるデータ分散対象配列であることを検出する（ステップ２０５）。
【００７０】
続いて、ページ割付け決定部１１３は、２次元配列ａの配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサをラウンドロビンで決定する（ステップ２０６）。このようなページ割付けの決定は、例えば、図７に示す並列プログラム１５１ａの５行目のようなライブラリ関数round_robbin_allocate(a）を呼び出す文を生成することで実現できる。round_robbin_allocate(a）関数は、データ分散対象配列ａの配列要素が配置された各ページをラウンドロビンで各プロセッサに割り付ける関数である。
【００７１】
図５（ａ）は、この実施例におけるページサイズが２次元配列ａの配列要素４つ分であるとしたときの、２次元配列ａの配列要素が配置された各ページのプロセッサ０〜３へのページ割付け状況を示す。
【００７２】
次に、ページ割付け決定部１１３は、各プロセッサに２次元配列ａのどの配列要素が配置されているページが割り付けられているかを表すページ割り付け状況を、例えば図６のようなテーブル形式のページ割付け情報としてページ割付け情報記憶部１０４に格納する。
【００７３】
なお、この実施例では、データ分散対象配列ａの配列要素が配置された各ページを割り付けるプロセッサを１ページずつラウンドロビンで決定したが、データ分散対象配列の各次元の配列要素数に応じて数ページずつラウンドロビンで決定してもよい。このとき、round_robin_allocate関数は、引数で渡された配列の配列要素が配置された先頭のページから順にｎ番目のページまでを割り付けるプロセッサをプロセッサ台数Ｐを法とするページ番号ｎの剰余（ｎ
ｍｏｄ Ｐ）として決定する。すなわち、プロセッサ０には０番目，Ｐ番目，２＊Ｐ番目，…のページを、プロセッサ１には１番目，Ｐ＋１番目，２＊Ｐ＋１番目，…のページを、…割り付けることを決定する。
【００７４】
次に、ループスケジューリング決定部１１４は、逐次プログラム１５０ａの１２行目の並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定する（ステップ２０７）。この実施例では、図５（ａ）に示すように、プロセッサ０には、ｉ＝０の時にｊ＝０〜３の配列要素が配置されたページを、ｉ＝１の時にｊ＝１〜４の配列要素が配置されたページを、…割り付けることが決定される。
【００７５】
続いて、ループスケジューリング決定部１１４は、並列化可能ループ内で参照されるデータ分散対象配列ａの配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させるために、例えば、逐次プログラム１５０ａの１０行目のｉループにおいて、ｉ＝０の時にプロセッサ０に実行を割り当てられる分割ループのループ繰返し範囲をｊ＝０〜３とし、ｉ＝１の時にプロセッサ０に実行を割り当てられる分割ループのループ繰返し範囲をｊ＝１〜４とするように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割する。このようなループ分割は、例えば、図７の並列プログラム１５１ａの１１行目のように、各プロセッサが１２行目のｊループで実行を割り当てられたループ変数ｊの開始点および終了点を与えるライブラリ関数j_rangeをｊループの直前に入れることで実現できる。
【００７６】
j_range関数は、プロセッサ番号ｐｅおよび外側のｆｏｒループのループ変数ｉを受け取り、プロセッサ番号ｐｅのプロセッサが実行を割り当てられたｊループのループ繰返し範囲ｊ＝ｊｓ〜ｊｅを設定する関数である。j_range関数自身は、プロセッサ番号ｐｅのプロセッサがループ変数ｉについてｊループのループ繰り返し範囲がまだ残っている間は真を返し、ない場合は偽を返す。例えば、図４の逐次プログラム１５０ａで図５（ａ）ようにページ割付け状況が決定された場合、ｐｅ＝０，ｉ＝０ならば、j_range関数はｊｓに０、ｊｅに３を設定し、j_range関数自身は、ｉ＝０においてプロセッサ０が他に実行を割り当てるべき分割ループがないので偽を返す。また、ｐｅ＝３，ｉ＝１ならば、j_range関数はｊｓに０、ｊｅに０を設定し、j_range関数自身は、ｉ＝１においてプロセッサ３がループ繰返し範囲ｊ＝１３〜１４の実行が割り当てられているので真を返す。もう一度ｐｅ＝３，ｉ＝１でj_range関数を呼び出すと、ｊｓに１３、ｊｅに１４が設定され、j_range関数自身は偽を返す。
【００７７】
図５（ｂ）は、上記のようにループスケジューリングした場合の各プロセッサ０〜３の配列要素参照範囲を示し、図５（ｃ）は、各プロセッサ０〜３のリモート参照範囲を示す。図５（ｃ）からもわかるように、分散共有メモリ型並列計算機の各プロセッサ０〜３は、並列プログラム１５１ａ中の並列化可能ループをすべてローカル参照だけで並列実行することができる。
【００７８】
なお、２次元配列ａの配列要素が添字ｉの次元に関して依存関係がある場合、図８の並列プログラム１５１ａ１の１６行目に示すような、プロセッサ間の同期をとる同期コードsyncを挿入する必要がある。
【００７９】
ところで、第１の実施の形態では、並列プログラム生成装置を並列化コンパイル装置１００として説明したが、図７に示した並列プログラム１５１ａがソースプログラム形式で記述されていることからも分かるように、並列プログラム生成装置をコンパイル装置の前段に実行されるプレコンパイル装置として実現することもできる（以下の各実施の形態においても同様）。この場合には、並列プログラム生成装置は、逐次実行用ソースプログラムである逐次プログラム１５０を入力して、並列実行用ソースプログラムである並列プログラム１５１を出力することになる。
【００８０】
［第２の実施の形態］
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。
【００８１】
図９は、本発明の第２の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ａの構成を表すブロック図である。この並列化コンパイル装置１００ａは、図１に示した第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００におけるループスケジューリング決定部１１４を、並列化可能ループ内で参照されるデータ分散対象配列が多次元配列である場合にプロセッサ間の同期回数を削減するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定部１１４ａに置き換えた構成を有するものである。よって、その他の特に言及しない対応部分については、第１の実施の形態におけるのと同一の符号を付して、それらの詳しい説明を省略する。
【００８２】
第２の実施の形態における並列化コンパイル装置１００ａの動作の概要を示すフローチャートは、図２に示した第１の実施の形態における並列化コンパイル装置１００の動作の概要を示すフローチャートと同様である。
【００８３】
図１０は、第２の実施の形態におけるループスケジューリング決定部１１４ａの動作を示すフローチャートである。ループスケジューリング決定部１１４ａの動作は、依存関係次元抽出ステップ４００と、スケジューリングブロック構成ステップ４０１と、ループスケジューリングステップ４０２と、同期コード挿入ステップ４０３とからなる。
【００８４】
次に、このように構成された第２の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ａの動作について、第１の実施の形態における並列化コンパイル装置１００の動作との相違点を中心に説明する。
【００８５】
ここでは、第２の実施の形態におけるループスケジューリング決定部１１４ａの動作について、図９および図１０を用いて説明する。
【００８６】
ページ割付け決定部１１３によるページ割付けの決定が完了すると、ループスケジューリング決定部１１４ａは、並列化可能ループ内で参照されるデータ分散対象配列（多次元配列）の依存関係がある次元を抽出する（ステップ４００）。ここで、「依存関係」とは、実行順序を変更すると元の実行結果と異なってしまう２つの命令間の関係である。また、「依存関係がある次元」とは、その次元で並列化すると実行順序が変更され、並列化しないときと実行結果が異なってしまう次元である。依存関係がある次元を抽出する方法は、並列化可能ループ内で参照されるデータ分散対象配列の各配列要素の読み書きの順序を調べ、並列化する前と並列化した後とでその順序が変わるかどうかを調べる。
【００８７】
次に、ループスケジューリング決定部１１４ａは、ページ割付け情報記憶部１０４に格納されているデータ分散対象配列の配列要素のページ割付け情報を解析し、並列化可能ループ内で参照されるデータ分散対象配列が多次元配列である場合にプロセッサ間の同期回数を削減するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成する（ステップ４０１）。詳しくは、あるプロセッサが実行を割り当てられた分割ループすべてが未選択集合に入っているものとし、まず、未選択集合から分割ループを１つ取り出し、スケジューリングブロックに含める。次に、そのスケジューリングブロックに含まれる分割ループと依存関係がある次元方向に併合可能な分割ループを未選択集合から取り出し、そのスケジューリングブロックに含める。この操作ができなくなるまで繰り返す。まだ未選択集合に分割ループが残っているようならば、新たなスケジューリングブロックを構成する。未選択集合が空になれば終了する。
【００８８】
「依存関係がある次元方向に併合可能な」とは、２つの分割ループＸ，Ｙがあり、分割ループＸで参照される配列要素それぞれが分割ループＹで参照される配列要素のどれかに直接依存する、または分割ループＹで参照される配列要素それぞれに直接依存する配列要素すべてを分割ループＸで参照することをいう。ここで、配列要素Ａと配列要素Ｂとがあり、配列要素Ｂの値が配列要素Ａの値によって求められる時、配列要素Ｂは配列要素Ａに直接依存するという。
【００８９】
「スケジューリングブロック」とは、同一プロセッサが実行を割り当てられた分割ループのループ繰返し範囲の集合で、スケジューリングブロックに含まれる任意の分割ループのループ繰返し範囲は、少なくとも１つは依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲をそのスケジューリングブロック内にもつ。スケジューリングブロックは、分割ループを２つ以上含んでいる場合、あるスケジューリングブロックに含まれる任意の分割ループＸは、それと依存関係がある次元方向に併合可能な分割ループＹを必ず１つはそのスケジューリングブロックに含む。
【００９０】
続いて、ループスケジューリング決定部１１４ａは、構成された各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定し、並列化コードを生成する（ステップ４０２）。
【００９１】
最後に、ループスケジューリング決定部１１４ａは、スケジューリングブロック間にある依存関係がある場合、その計算順序を保証するように同期コードsyncを挿入する（ステップ４０３）。
【００９２】
次に、第２の実施の形態の効果について説明する。
【００９３】
第２の実施の形態では、ページ割付けの決定が完了すると、依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定するように構成されているため、並列化可能ループの外側のループにおいて依存関係がある場合、分割ループ単位でなく、スケジューリングブロック単位で同期をとることができ、これにより並列プログラム１５１における同期回数を削減でき、プロセッサ間通信の発生を削除することにより、並列プログラム１５１の処理速度の高速化を図ることができる。
【００９４】
次に、具体的な実施例を用いて、第２の実施の形態におけるループスケジューリング決定部１１４ａの動作をより詳しく説明する。
【００９５】
ここでは、図１１の逐次プログラム１５０ａ１の１０行目のループ変数ｉのｆｏｒループ（以下、単にｉループと表記する）がループ繰返し間で依存関係がある場合を逐次プログラム例とし、ページ割付け決定部１１３によって１３行目の２次元配列ａの配列要素が配置されたページが図５（ａ）のようにページ割付けされた時の、ループスケジューリング決定部１１４ａの動作について説明する。
【００９６】
ループスケジューリング決定部１１４ａは、図５（ａ）の２次元配列ａの配列要素が配置されたページのページ割付け状況を解析し、２次元配列ａのｉループにおけるループ繰返し範囲を決定する。
【００９７】
次に、ループスケジューリング決定部１１４ａは、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、逐次プログラム１５０ａの１０行目のiループの依存関係を保証する同期回数を減らすために、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成する（ステップ４０１）。このスケジューリングブロックは、例えば、次のようにして、構成することができる。
【００９８】
まず、ループスケジューリング決定部１１４は、図１２（ａ）に示すように、各分割ループのループ繰返し範囲をｉ＝０のときのページ境界に合わせて再分割する。この例では、プロセッサ０のｉ＝１のループ繰返し範囲はｊ＝１〜４であるが、これをループ繰返し範囲ｊ＝１〜３とループ繰返し範囲ｊ＝４だけとの２つに再分割している。
【００９９】
次に、ループスケジューリング決定部１１４は、各プロセッサに実行を割り当てられた分割ループのループ繰返し範囲を依存関係がある次元方向ｉに併合可能であれば併合してスケジューリングブロックを構成する。この例では、プロセッサ０に実行を割り当てられたｉ＝０の分割ループのループ繰返し範囲９０１とｉ＝１の分割ループのループ繰返し範囲９０２とは、ｊ＝１〜３において併合可能なので同一のスケジューリングブロックに入れる。一方、プロセッサ０に実行を割り当てられたｉ＝０の分割ループのループ繰返し範囲９０１とｉ＝１の分割ループのループ繰返し範囲９０３とは併合可能でないので、別のスケジューリングブロックに入れる。上記の操作を繰り返して、図１２（ａ）のすべての分割ループのループ繰返し範囲に対して、スケジューリングブロックを構成したものが、図１２（ｂ）である。図１３は、このようにして構成されたスケジューリングブロックのテーブルを示す。
【０１００】
続いて、ループスケジューリング決定部１１４は、上記で構成したスケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定する（ステップ４０２）。この実施例においては、まず、図１２（ｂ）に示すスケジューリングブロック間の依存関係を解析する。図１１の逐次プログラム１５０ａ１において、いま０行目のｉループに関して依存関係があることにしているから、スケジューリングブロック９１１とスケジューリングブロック９１５、スケジューリングブロック９１２とスケジューリングブロック９１６、スケジューリングブロック９１３とスケジューリングブロック９１７、スケジューリングブロック９１４とスケジューリングブロック９１８のそれぞれの間に依存関係がある。そこで、ループスケジューリング決定部１１４は、プロセッサ０がスケジューリングブロック９１６の実行を、プロセッサ１がスケジューリングブロック９１２の実行を終了してから実行するように、プロセッサおよびそのスケジュールを決定する。つまり、この実施例では、プロセッサ０は１回同期をとるだけでよい。もし、この実施例のようにスケジューリングブロックを構成しなかったならば、プロセッサ０はｉループのループ回数分、すなわち４回分の同期が必要だった。
【０１０１】
次に、ループスケジューリング決定部１１４は、並列化可能ループを複数の分割ループに分割してスケジューリングブロックを構成した中間語を生成し、結果を中間語記憶部１０５に格納する。
【０１０２】
最後に、ループスケジューリング決定部１１４ａは、スケジューリングブロック間にある依存関係がある場合、その計算順序を保証するように同期コードsyncを挿入する（ステップ４０３）。
【０１０３】
図１４は、図１１の逐次プログラム１５０ａ１に対する並列プログラム１５１ａ１の一例を示す。すなわち、図１２（ｂ）のようにスケジューリングブロックを構成して並列化した並列プログラム例である。
【０１０４】
図１４の並列プログラム１５１ａ１の１０行目中のライブラリ関数next_blockは、プロセッサ番号ｐｅのプロセッサが次に実行すべきスケジューリングブロックの範囲を与える関数である。引数にプロセッサ番号ｐｅを与えると、iループの開始値ｉｓおよび終了値ｉｅと、各iループの繰返し範囲におけるjループの開始値ｊｓおよび終了値ｊｅとを設定する。next_block関数自体は、次に実行すべきスケジューリングブロックがあるときは真を、ないときは偽を返す。
【０１０５】
なお、第２の実施の形態を用いない場合の逐次プログラム１５０ａ１に対する並列プログラム例は、図１５の並列プログラム１５１ａ２となる。
【０１０６】
この実施例では、分割ループのループ繰返し範囲をあらかじめ再分割しておくことで部分的に併合可能なループ繰返し範囲の組ができないようにした。スケジューリングブロックを構成する際に、部分的に併合可能なループ繰返し範囲の組があるたびに、ループ繰返し範囲の再分割を行ってもよい。ここで、あるプロセッサに実行を割り当てられた分割ループのループ繰返し範囲の中で２つのループ繰り返し範囲Ａ，Ｂがあり、ループ繰り返し範囲Ｂとループ繰り返し範囲Ａとは一部だけ直接依存している時、部分的に併合可能という。ループ繰り返し範囲Ａとループ繰り返し範囲Ｂとが部分的に併合可能な場合、ループ繰り返し範囲Ａ，Ｂどちらかを直接依存しているところと直接依存していないところとで再分割すると併合可能にすることができる。
【０１０７】
［第３の実施の形態］
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。
【０１０８】
図１６は、本発明の第３の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ｂの構成を表すブロック図である。この並列化コンパイル装置１００ｂは、図９に示した第２の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ａにおけるページ割付け決定部１１３を、より大きなスケジューリングブロックの構成を実現するためのページ割付けの決定を行うページ割付け決定部１１３ａに置き換えた構成を有するものである。よって、その他の特に言及しない対応部分については、第２の実施の形態におけるのと同一の符号を付して、それらの詳しい説明を省略する。
【０１０９】
第２の実施の形態における並列化コンパイル装置１００ｂの動作の概要を示すフローチャートは、図２に示した第１の実施の形態における並列化コンパイル装置１００の動作の概要を示すフローチャートと同様である。
【０１１０】
図１７は、本発明の第３の実施の形態におけるページ割付け決定部１１３ａの動作を示すフローチャートである。このページ割付け決定部１１３ａの動作は、ページ数設定ステップ５０１と、カウンタ初期化ステップ５０２と、ページ割付け系列作成ステップ５０３と、ページ割付け決定ステップ５０４と、ページ割付け済み判定ステップ５０５と、カウンタインクリメントステップ５０６とからなる。
【０１１１】
第３の実施の形態におけるループスケジューリング決定部１１４ａの動作を示すフローチャートは、図１０に示した第２の実施の形態におけるループスケジューリング決定部１１４ａの動作を示すフローチャートと同様である。
【０１１２】
次に、このように構成された第３の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ｂの動作について、第１および第２の実施の形態における並列化コンパイル装置１００および１００ａの動作との相違点を中心に説明する。
【０１１３】
ここでは、より大きなスケジューリングブロックの構成を実現するためのページ割付けの決定を行うページ割付け決定部１１３ａの動作について、図１６および図１７を用いて説明する。
【０１１４】
データ分散対象配列検出部１１２によりデータ分散対象配列が検出されると、ページ割付け決定部１１３ａは、データ分散対象配列のデータ連続次元における配列要素数Ｎと１ページ当たりの配列要素数Ｍとからデータ連続次元の１行に必要なページ数ｎ（ＮをＭで割って小数点第１位以下を四捨五入したもの）、すなわちｎ＝［Ｎ／Ｍ］（鉤括弧はガウス記号）を調べる（ステップ５０１）。また、第３の実施の形態では、ページ数ｎがプロセッサ台数Ｐで割り切れない場合に対応しているから、プロセッサ台数Ｐを調べる。図２１では、ｎ＝５，Ｐ＝４のケースを表している。ページ数ｎがプロセッサ台数Ｐで割り切れない場合、ページをラウンドロビンでプロセッサに割り付けると、図２１中の分割ループのループ繰返し範囲１３０１の直下（ｉ＝１におけるｊ＝０〜３）の配列要素は、分割ループのループ繰返し範囲１３０１の実行を割り当てられたのと同じプロセッサ０に割り当てられない。なお、ページ数ｎがプロセッサ台数Ｐで割り切れるケースとしては、例えば、図１２（ａ）に示すような、ページ数ｎが４，プロセッサ台数Ｐが４である場合がある。
【０１１５】
次に、ページ割付け決定部１１３ａは、カウンタｐを０に初期化し（ステップ５０２）、データ分散対象配列のデータ連続次元の１行に必要なページ数ｎとカウンタｐとからページ割付け系列Ｓを作成する（ステップ５０３）。「ページ割付け系列Ｓ」とは、ページ割付けを決定する際、各ページをどのようなプロセッサ順で割り付けるかを示したプロセッサ番号の並びである。例えば、ページ割付け系列Ｓ＝（ＰＥ０→ＰＥ１→ＰＥ２→ＰＥ３）ならば、０番目のページはプロセッサ０，１番目のページはプロセッサ１，…，３番目のページはプロセッサ３，４番目のページはプロセッサ０，…と割り付ける。ここで、「ページ割付け系列Ｓの長さ」についても定義する。「ページ割付け系列Ｓの長さ」とは、そのページ割付け系列Ｓに含まれるプロセッサ番号の数である。つまり、ページ割付け系列Ｓ＝（ＰＥ０→ＰＥ１→ ＰＥ２→ＰＥ３）ならば、その長さは４である。この実施例におけるページ割付け系列Ｓを作成するには、ページ割付け系列Ｓの先頭となるプロセッサ番号ｐｅとその長さｎとを与える必要がある。いま、プロセッサ台数をＰとする。まず、カウンタｐだけを含んだページ割付け系列Ｓを用意する。次に、そのページ割付け系列Ｓの最後のプロセッサ番号に１増やしてＰを法として剰余をとったプロセッサ番号をページ割付け系列Ｓの末尾に追加する。このとき、このページ割付け系列Ｓの長さがｎでないならば、この操作を繰り返す。もし、このページ割付け系列Ｓの長さがｎならば、このページ割付け系列Ｓが作成したいページ割付け系列である。例えば、Ｐ＝４，ｐ＝０，ｎ＝５→（ＰＥ０→ＰＥ１→ＰＥ２→ＰＥ３→ＰＥ０）、Ｐ＝４，ｐ＝１，ｎ＝５→（ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ０，ＰＥ１）。
【０１１６】
続いて、ページ割付け決定部１１３ａは、ステップ５０３で作成したページ割付け系列Ｓで、データ分散対象配列のデータ連続次元のＭ行分のページ割付けを決定する（ステップ５０４）。１ページ当たりの配列要素数がＭで、データ連続次元のＭ行分のページ割付けを決定すれば、ｉ＝（Ｍ―１）の行の終端とページ境界とが必ず一致するという数学的性質がある。例えば、図１９を参照すると、このとき１ページ当たりの配列要素数Ｍは４である。このとき、先頭（ｉ＝０，ｊ＝０）から４行分のページ割付けを決定すると、４行目の終端（ｉ＝３，ｊ＝２０）はページの終端と一致していることがわかる。
【０１１７】
この操作を、ページ割付け決定部１１３ａは、カウンタｐの再設定（ステップ５０６）をしながら、データ分散対象配列のすべての配列要素のページ割付けが決定されるまで繰り返す（ステップ５０５）。
【０１１８】
次に、第３実施の形態の効果について説明する。
【０１１９】
第３の実施の形態によるページ割付けの決定は、同期回数を削減する各分割ループのループスケジューリングをするループスケジューリング決定部１１４ａを適用する際、より大きなスケジューリングブロックを構成させることができる。それは、データ連続次元の１行に必要なページ数ｎとプロセッサ台数Ｐとが等しくない場合、第３の実施の形態を用いると、ループスケジューリング決定部１１４ａでスケジューリングブロックを構成する際、分割ループのループ繰返し範囲の併合がよりできるようになり、より大きなスケジューリングブロックを構成することができ、同期が必要となる箇所を減らすことができるからである。
【０１２０】
次に、具体的な実施例を用いて、第３の実施の形態の動作を説明する。
【０１２１】
図１８に示す逐次プログラム１５０ｂを与えられた場合を例にとって、ページ割付け決定部１１３ａの動作を説明する。ここで、プロセッサ台数は４台、１ページは配列要素４つ分とする。この実施例では、図１８の逐次プログラム１５０ｂ中の２次元配列ｂのデータ連続次元における配列要素数Ｎは２１、１ページ当たりの配列要素数Ｍは４、データ連続次元の１行に必要なページ数ｎは５になる。ｐ＝０（初期値），ｎ＝５より、ページ割付け系列Ｓ＝（ＰＥ０→ＰＥ１→ＰＥ２→ＰＥ３→ＰＥ０）となる。このページ割付け系列Ｓで２次元配列ｂの配列要素の４行分についてページ割り付けを決定したときのページ割付け状況が、図１９（ａ）である。次のページ割付け系列Ｓは、ｐ＝１，ｎ＝５より、（ＰＥ１→ＰＥ２→ＰＥ３→ＰＥ０→ＰＥ１）になる。このページ割付け系列Ｓで２次元配列ｂの配列要素をｉ＝４からページ割付けを決定した時のページ割付け状況が、図１９（ｂ）である。以下同様に、２次元配列ｂの配列要素の４行分についてページ割付けを決定するごとに新たなページ割付け系列Ｓを作り、２次元配列ｂの配列要素の最後までページ割付けを決定する。
【０１２２】
図２０は、図１８の逐次プログラム１５０ｂに対する並列プログラム１５１ｂ１の一例を示す。並列プログラム１５１ｂ１の５行目のライブラリ関数round_robin_ext_allocateは、第３の実施の形態におけるページ割付け決定部１１３ａのページ割付けを実現する関数である。round_robin_ext_allocate(np, b, 16, 21)は、round_robin_ext_allocate関数にプロセッサ台数ｎｐ，ページ割付けをしたい２次元配列ｂ，２次元配列ｂの各次元の配列要素数１６，２１を与えると、図１７のフローチャートに示した手順に従って、２次元配列ｂの配列要素のページ割付けを決定する。
【０１２３】
図２１は、第３の実施の形態を用いずに２次元配列ｂの配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページをラウンドロビンで割り付けるプロセッサを決定した時のページ割付け状況を表したものである。図２１のようにページがプロセッサに割り付けられた場合、分割ループのループ繰返し範囲１３０１に対して併合可能な分割ループのループ繰返し範囲はない。しかし、本実施例を用いた場合、図１９に示すように、分割ループのループ繰返し範囲を再分割してから併合して、スケジューリングブロック１２０１を構成することができる。
【０１２４】
図２２は、第３の実施の形態を用いない場合の逐次プログラム１５０ｂに対する並列プログラム１５１ｂ２の一例を示す。すなわち、図２１に示すようにページ割付けの決定が行われた場合の並列プログラム例である。
【０１２５】
［第４の実施の形態］
図２３は、本発明の第４の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００の構成を示すブロック図である。本実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００は、図１に示した第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００に対して並列プログラム生成プログラム（並列化コンパイラ）１０００を付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付してそれらの詳しい説明を省略する。
【０１２６】
並列プログラム生成プログラム（並列化コンパイラ）１０００は、コンピュータでなる並列化コンパイル装置１００に読み込まれ、並列化コンパイル装置１００の動作を構文解析部１０１，並列化部１０２（並列化可能ループ検出部１１１，データ分散対象配列検出部１１２，ページ割付け決定部１１３，ループスケジューリング決定部１１４），およびコード生成部１０３として制御する。並列プログラム生成プログラム（並列化コンパイラ）１０００の制御による並列化コンパイル装置１００の動作は、第１の実施の形態における並列化コンパイル装置１００の動作と全く同様になるので、その詳しい説明を割愛する。
【０１２７】
なお、第４の実施の形態では、並列プログラム生成プログラム１０００を並列化コンパイラとして説明したが、並列プログラム生成装置をコンパイル装置の前段に実行されるプレコンパイル装置として実現した場合には、プレコンパイラとすることもできる（以下の各実施の形態においても同様）。この場合には、並列プログラム生成装置は、逐次実行用ソースプログラムである逐次プログラム１５０を入力して、並列実行用ソースプログラムである並列プログラム１５１を出力することになる。
【０１２８】
［第５の実施の形態］
図２４は、本発明の第５の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ａの構成を示すブロック図である。本実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ａは、図９に示した第２の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ａに対して並列プログラム生成プログラム（並列化コンパイラ）１０００ａを付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付してそれらの詳しい説明を省略する。
【０１２９】
並列プログラム生成プログラム（並列化コンパイラ）１０００ａは、コンピュータでなる並列化コンパイル装置１００ａに読み込まれ、並列化コンパイル装置１００ａの動作を構文解析部１０１，並列化部１０２（並列化可能ループ検出部１１１，データ分散対象配列検出部１１２，ページ割付け決定部１１３，ループスケジューリング決定部１１４ａ），およびコード生成部１０３として制御する。並列プログラム生成プログラム（並列化コンパイラ）１０００ａの制御による並列化コンパイル装置１００ａの動作は、第２の実施の形態における並列化コンパイル装置１００ａの動作と全く同様になるので、その詳しい説明を割愛する。
【０１３０】
［第６の実施の形態］
図２５は、本発明の第６の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ｂの構成を示すブロック図である。本実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ｂは、図１６に示した第３の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置１００ｂに対して並列プログラム生成プログラム（並列化コンパイラ）１０００ｂを付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付してそれらの詳しい説明を省略する。
【０１３１】
並列プログラム生成プログラム（並列化コンパイラ）１０００ｂは、コンピュータでなる並列化コンパイル装置１００ｂに読み込まれ、並列化コンパイル装置１００ｂの動作を構文解析部１０１，並列化部１０２（並列化可能ループ検出部１１１，データ分散対象配列検出部１１２，ページ割付け決定部１１３ａ，ループスケジューリング決定部１１４ａ），およびコード生成部１０３として制御する。並列プログラム生成プログラム（並列化コンパイラ）１０００ｂの制御による並列化コンパイル装置１００ｂの動作は、第３の実施の形態における並列化コンパイル装置１００ｂの動作と全く同様になるので、その詳しい説明を割愛する。
【０１３２】
【発明の効果】
第１の効果は、逐次実行用ソースプログラムでなる逐次プログラムに含まれる並列化可能ループを並列化する際、データローカリティを高めて、プロセッサ間通信の発生を削減し、並列プログラムの処理速度を高速化できることにある。その理由は、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させるようにページ割付けの決定およびループスケジューリングの決定を行うようにしたからである。
【０１３３】
第２の効果は、並列化可能ループ内で参照されるデータ分散対象配列の配列要素のデータ連続性を破壊することなく、第１の効果を実現できることにある。その理由は、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとの相違を解消する方法として、配列を拡張してダミーデータを挿入する必要がないからである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図２】第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の動作を示すフローチャートである。
【図３】第１の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の具体例を示す図である。
【図４】図１中の逐次プログラムの具体例を示す説明図である。
【図５】第１の実施例におけるページ割付け状況，配列要素参照範囲およびリモート参照範囲を説明するための図である。
【図６】図１中のページ割付け情報記憶部に格納されるページ割付け情報の具体例を示す図である。
【図７】図１における並列プログラムの具体例を示す図である。
【図８】図１における並列プログラムの具体例を示す図である。
【図９】本発明の第２の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図１０】第２の実施の形態におけるループスケジューリング決定部の動作を示すフローチャートである。
【図１１】図９中の逐次プログラムの具体例を示す説明図である。
【図１２】第２の実施例におけるループ繰返し範囲の再分割およびスケジューリングブロックの構成を説明する図である。
【図１３】図１２に示したスケジューリングブロックのテーブルを示す図である。
【図１４】図９中の並列プログラムの具体例を示す図である。
【図１５】スケジューリングブロックなしの並列プログラムの具体例を示す図である。
【図１６】本発明の第３の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図１７】第３の実施の形態におけるページ割付け決定部の動作を示すフローチャートである。
【図１８】図１６中の逐次プログラムの具体例を示す図である。
【図１９】第３の実施例におけるページ割付け状況を説明するための図である。
【図２０】図１６中の並列プログラムの具体例を示す図である。
【図２１】第３の実施例を用いない場合のページ割付け状況を説明する図である。
【図２２】第３の実施例を用いない場合の並列プログラムの具体例を示す図である。
【図２３】本発明の第４の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図２４】本発明の第５の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図２５】本発明の第６の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図２６】従来技術におけるページ割付け状況，配列要素参照範囲およびリモート参照範囲を説明する図である。
【図２７】従来技術におけるページ割付け状況を説明する図である。
【符号の説明】
１００，１００ａ，１００ｂ  並列化コンパイル装置
１０１  構文解析部
１０２  並列化部
１０３  コード生成部
１０４  ページ割付け情報記憶部
１０５  中間語記憶部
１１１  並列化可能ループ検出部
１１２  データ分散対象配列検出部
１１３  ページ割付け決定部
１１４  ループスケジューリング決定部
１５０  逐次プログラム
１５１  並列プログラム
２０１  逐次プログラム構文解析ステップ
２０２  未解析ループ有無判定ステップ
２０３  並列化可能ループ検出ステップ
２０４  未解析配列有無判定ステップ
２０５  データ分散対象配列検出ステップ
２０６  ページ割付け決定ステップ
２０７  並列化可能ループ分割・分割ループ実行割当てプロセッサ決定ステップ
２０８  並列プログラム生成ステップ
３００  情報処理装置
３０１  プロセッサ
３０２  メモリ
３１１  表示装置
３１２  入力装置
３１３  外部記憶装置
３１４  通信装置
３１５  記憶媒体
３１６  駆動装置
４００  依存関係次元抽出ステップ
４０１  スケジューリングブロック構成ステップ
４０２  ループスケジューリングステップ
４０３  同期コード挿入ステップ
５０１  ページ数設定ステップ
５０２  カウンタ初期化ステップ
５０３  ページ割付け系列作成ステップ
５０４  ページ割付け決定ステップ
５０５  ページ割付け済み判定ステップ
５０６  カウンタインクリメントステップ
９０１〜９０３，９１１〜９１８，１２０１  スケジューリングブロック
１０００，１０００ａ，１０００ｂ  並列プログラム生成プログラム（並列化コンパイラ）
【図１】
2004206314.tif 000003
【図２】
2004206314.tif 000004
【図３】
2004206314.tif 000005
【図４】
2004206314.tif 000006
【図５】
2004206314.tif 000007
【図６】
2004206314.tif 000008
【図７】
2004206314.tif 000009
【図８】
2004206314.tif 000010
【図９】
2004206314.tif 000011
【図１０】
2004206314.tif 000012
【図１１】
2004206314.tif 000013
【図１２】
2004206314.tif 000014
【図１３】
2004206314.tif 000015
【図１４】
2004206314.tif 000016
【図１５】
2004206314.tif 000017
【図１６】
2004206314.tif 000018
【図１７】
2004206314.tif 000019
【図１８】
2004206314.tif 000020
【図１９】
2004206314.tif 000021
【図２０】
2004206314.tif 000022
【図２１】
2004206314.tif 000023
【図２２】
2004206314.tif 000024
【図２３】
2004206314.tif 000025
【図２４】
2004206314.tif 000026
【図２５】
2004206314.tif 000027
【図２６】
2004206314.tif 000028
【図２７】
2004206314.tif 000029