(57)【特許請求の範囲】
【請求項１】
並列化コンパイラの最適化処理が、
並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、少なくとも前記配列の形状、及び前記配列の添え字の形式に基づき、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、前記配列に合うテンプレートが存在しない場合には、前記配列の形状に合うテンプレートを作成し、前記配列を前記テンプレートに整列することで、前記情報テーブルの該当するブロックに前記配列を登録するステップと、
作成された前記情報テーブルに、該処理対象ループ内の文に含まれる前記配列が登録されている場合、前記情報テーブルの分割されたブロック毎の通信量を計算するステップと、
前記情報テーブルのブロック毎の通信量に基づき、計算実行プロセッサを決定するステップと、
を含み、
分散メモリ型並列マシンを構成する複数のプロセッサの実行時のプロセッサ間通信を削減する、ことを特徴とする、並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項２】
前記処理対象のループが内側ループを含む場合、該内側ループを処理対象とし、その計算実行プロセッサを、処理対象の内側ループの外側にある並列化可能ループの計算実行プロセッサに限定する、ことを特徴とする請求項１記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項３】
前記ループに含まれる配列に関する情報テーブルを作成するにあたり、前記配列の形状、前記配列の添え字の形式、及び、分散メモリ上への分散状態から前記配列に関する情報テーブルを作成し、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状と同じ分散形式をもつテンプレートを作成する、ことを特徴とする請求項１記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項４】
選別処理対象の配列を、前記情報テーブルの対応する整列先のテンプレートである行と、配列の添え字形式に対応する列のブロックに登録する、ことを特徴とする請求項１に記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項５】
前記並列化コンパイラは、同一テンプレートに整列するデータを所有するプロセッサ間では、オーバラップシフト通信が適用できるか否かを判定し、その際、通信対象となる配列のデータが全ての次元において各プロセッサ上にその要素の並びを保ったまま分散されているか否かを判定し、
要素の並びが保たれていない場合には、プロセスが一列に並んでいるものと想定して、各プロセスが一斉に同一方向に一定距離だけ離れたプロセスにデータを送信する形式の通信である前記オーバラップシフト通信の適用外とし、分散メモリ上に分散されているデータから、計算に必要な部分のデータをコピーし送信する形式の通信であるコピーセクション通信を発生させる、ことを特徴とする請求項１記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項６】
前記配列がその全次元において要素の並びを保ったままプロセッサ上に配置されている場合、処理対象ループのDO変数をiとして、
一方のプロセッサ上にあるデータの添え字の形式がn*i+m1(n：自然数、m1：整数)であり、
他方のプロセッサ上にあるデータの添え字の形式がn*i+m2(n：自然数、m2：整数)である関係がある場合、これら２つのプロセッサ間の通信にはオーバラップシフト通信が適用され、
前記配列の添え字の形式が、前記関係を満たさない場合は、コピーセクション通信を発生させる、ことを特徴とする請求項５記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項７】
異なるテンプレートに整列する配列を所有するプロセッサ間では、オーバラップシフト通信は使用せず、コピーセクション通信のみ発生させる、ことを特徴とする請求項５記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項８】
前記配列の整列指示文で指定されている場合、前記配列に対応するテンプレートが存在しない場合、前記配列とは異なる形状のテンプレートに整列する、ことを特徴とする請求項１記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項９】
前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する、ことを特徴とする請求項１記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項１０】
前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小値をとるブロックが複数存在する場合、該複数のブロックの中の一のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する、ことを特徴とする請求項１記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
【請求項１１】
原始プログラムを読み込み字句解析を行う字句解析部と、構文解析を行う構文解析部と、最適化処理を行う最適化部と、を少なくとも備えた並列化コンパイラ装置において、
前記最適化部が、並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、少なくとも前記配列の形状、及び前記配列の添え字の形式に基づき、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状をもつテンプレートを作成し、前記配列を前記テンプレートに整列することで、前記情報テーブルの該当するブロックに前記配列を登録する配列選別手段と、
前記情報テーブルに基づき計算実行プロセッサを選択する手段であって、作成された前記情報テーブルに、該処理対象ループ内の文に含まれる前記配列が登録されている場合、前記情報テーブルの分割されたブロック毎の通信量を計算する第１の手段と、
前記情報テーブルのブロック毎の通信量に基づき、計算実行プロセッサを決定する第２の手段と、を含むプロセッサ選択手段と、
を備えている、ことを特徴とする並列化コンパイラ装置。
【請求項１２】
前記プロセッサ選択手段において、前記処理対象のループが内側ループを含む場合、該内側ループを処理対象とし、その計算実行プロセッサを、処理対象の内側ループの外側にある並列化可能ループの計算実行プロセッサに限定する、ことを特徴とする請求項１１記載の並列化コンパイラ装置。
【請求項１３】
前記並列化コンパイラ装置が、分散メモリ構成の並列マシンを構成するプロセッサ用の目的コードを生成し、
前記配列選別手段において、前記ループに含まれる配列に関する情報テーブルを作成するにあたり、前記配列の形状、前記配列の添え字の形式、及び、分散メモリ上への分散状態から前記配列に関する情報テーブルを作成し、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状と、同じ分散形式をもつテンプレートを作成する、ことを特徴とする請求項１１記載の並列化コンパイラ装置。
【請求項１４】
前記配列選別手段において、選別処理対象の配列を、前記情報テーブルの対応する整列先のテンプレートである行と、配列の添え字形式に対応する列の部分に登録する、ことを特徴とする請求項１１記載の並列化コンパイラ装置。
【請求項１５】
同一テンプレートに整列するデータを所有するプロセッサ間では、オーバラップシフト通信が適用できるか否かを判定し、通信対象となる配列のデータが全ての次元において各プロセッサ上にその要素の並びを保ったまま分散されているか否かを判定し、要素の並びが保たれていない場合には、プロセスが一列に並んでいるものと想定し、各プロセスが一斉に同一方向に一定距離だけ離れたプロセスにデータを送信する形式の通信である前記オーバラップシフト通信の適用外とし、分散メモリ上に分散されているデータから、計算に必要な部分のデータをコピーし送信する形式の通信であるコピーセクション通信を発生させる手段を備えている、ことを特徴とする請求項１１記載の並列化コンパイラ装置。
【請求項１６】
配列がその全次元において要素の並びを保ったままプロセッサ上に配置されている場合、処理対象ループのDO変数をiとし、一方のプロセッサ上にあるデータの添え字の形式がn*i+m1(n：自然数、m1：整数)であり、他方のプロセッサ上にあるデータの添え字の形式がn*i+m2(n：自然数、m2：整数)の関係がある場合、２つのプロセッサ間の通信にはオーバラップシフト通信が適用され、前記配列の添え字の形式が、前記関係を満たさない場合は、コピーセクション通信を発生させる、ことを特徴とする請求項１５記載の並列化コンパイラ装置。
【請求項１７】
異なるテンプレートに整列する配列を所有するプロセッサ間では、オーバラップシフト通信は使用せず、コピーセクション通信のみ発生させる、ことを特徴とする請求項１５記載の並列化コンパイラ装置。
【請求項１８】
配列整列指示文によってプログラム中で指定されている場合、前記配列に合うテンプレートが存在しない場合において、前記配列選別手段において、前記配列とは異なる形状のテンプレートに整列する、ことを特徴とする請求項１１記載の並列化コンパイラ装置。
【請求項１９】
前記プロセッサ選択手段は、前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する、ことを特徴とする請求項１１記載の並列化コンパイラ装置。
【請求項２０】
前記プロセッサ選択手段は、前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小値をとるブロックが複数存在する場合、該複数のブロックの中の一のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する、ことを特徴とする請求項１１記載の並列化コンパイラ装置。
【請求項２１】
並列化コンパイラの最適化処理を実行するコンピュータのプログラムにおいて、
（ａ）並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、少なくとも前記配列の形状、及び前記配列の添え字の形式に基づき、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状をもつテンプレートを作成し、前記配列を前記テンプレートに整列することで、前記情報テーブルの該当するブロックに前記配列を登録する処理と、
（ｂ）作成された前記情報テーブルに、該処理対象ループ内の文に含まれる前記配列が登録されている場合、前記情報テーブルの分割されたブロック毎の通信量を計算する処理と、
（ｃ）前記情報テーブルのブロック毎の通信量から、計算実行プロセッサを決定する処理と、
の前記（ａ）乃至（ｃ）の各処理を、前記コンピュータに実行させるためのプログラム。
【請求項２２】
請求項２１記載のプログラムにおいて、
前記処理対象のループが内側ループを含む場合、該内側ループを処理対象とし、その計算実行プロセッサを、処理対象の内側ループの外側にある並列化可能ループの計算実行プロセッサに限定する処理を、前記コンピュータに実行させるためのプログラム。
【請求項２３】
請求項２１記載のプログラムにおいて、
前記並列化コンパイラが、分散メモリ構成の並列マシンを構成するプロセッサ用の目的コードを生成し、
前記ループに含まれる配列に関する情報テーブルを作成するにあたり、前記配列の形状、前記配列の添え字の形式、及び、分散メモリ上への分散状態から前記配列に関する情報テーブルを作成し、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状と、同じ分散形式をもつテンプレートを作成する処理を、前記コンピュータに実行させるためのプログラム。
【請求項２４】
請求項２１記載のプログラムにおいて、
選別処理対象の配列を、前記情報テーブルの対応する整列先のテンプレートである行と、配列の添え字形式に対応する列の部分に登録する処理を、前記コンピュータに実行させるためのプログラム。
【請求項２５】
請求項２１記載のプログラムにおいて、
前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する処理を、前記コンピュータに実行させるためのプログラム。
【請求項２６】
請求項２１記載のプログラムにおいて、
前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小値をとるブロックが複数存在する場合、該複数のブロックの中の一のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する処理を、前記コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンパイラ技術に関し、特に分散メモリ並列マシンの並列化コンパイラ技術に関する。
【０００２】
【従来の技術】
複数のプロセッサがそれぞれローカルなメモリを分散して備える分散メモリ構成の並列マシンにおける並列化では、データの分散メモリ上への配置と、演算処理を、どのプロセッサへ分配するかという項目が重要となる。
【０００３】
データアクセスの局所性（locality）が高く、プロセッサ間通信量が少なくなる程、並列性が向上するといえる。よく知られているように、HPF（High  Performance  Fortran）等の並列プログラミング言語では、いくつかの指示文などが定義されており、プログラマは、これらの指示文を用いて、データの分散メモリへの分配と、演算処理のプロセッサへの分配を指示し、それ以外の仕事を並列化コンパイラに任せることになる。
【０００４】
しかしながら、真に高い並列性を得るためには、プログラマがそのプログラムに応じて、いくつもの指示文を選択し追加する箇所を吟味しなければならない、というのが現状である。
【０００５】
【発明が解決しようとする課題】
したがって、本発明が解決しようとする課題は、この問題点をいくらか軽減、もしくは解消させるために、並列化コンパイラに実装され得るものであって、並列化コンパイラが、プログラマからの指示文による支援がない場合でも、適切な演算処理のプロセッサへの分配を行い、実行時のプロセッサ間通信量を削減することができる、方法と装置ならびにプログラム製品を提供することである。
【０００６】
【課題を解決するための手段】
上記課題を解決するための手段を提供する本発明は、その一つのアスペクトにおいて、並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、少なくとも前記配列の形状、及び前記配列の添え字の形式に基づき、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、前記配列に合うテンプレートが存在しない場合には、前記配列の形状に合うテンプレートを作成し、前記配列を前記テンプレートに整列することで、前記情報テーブルの該当するブロックに前記配列を登録し、作成された前記情報テーブルに、該処理対象ループ内の文に含まれる前記配列が登録されている場合、前記情報テーブルの分割されたブロック毎の通信量を計算し、前記情報テーブルの通信量から、計算実行プロセッサを決定し、分散メモリ型並列マシンを構成するプロセッサ間通信を削減するものである。
【０００７】
【発明の実施の形態】
発明の実施の形態について説明する。はじめに発明の原理・作用について説明しておく。本発明は、分散メモリ並列システム上で高性能を得ることを目的とした並列化コンパイラに対して、最適な計算マッピングの促進を図るための方法と装置並びプログラムを提供するものである。
【０００８】
図１に示すような、Fortran言語で書かれたDOループ（(A(i)=B(i+1)+C(i+1)+D(i+1)をiが１〜99まで繰り返すループ処理）を例に説明すると、このループのある繰り返しにおいて定義され、別の繰り返しにおいて参照されるようなデータが存在しないため、並列化コンパイラによって並列化可能であると判定される。
【０００９】
続いて、実際にループを並列化するにあたり、各繰り返しにおける計算を、どのプロセッサに担当させるかを、並列化コンパイラは、決定しなければならない。
【００１０】
例えば、並列プログラミング言語HPF(High Performance Fortran)のコンパイラによって、図１のループは並列化され、その計算は、オーナーコンピュートルールに従って、更新データである配列Aの要素A(i)を所有するプロセッサ(このように計算等を実行するプロセッサを「活動プロセッサ」と呼ぶ)によって行われる。
【００１１】
しかしながら、図１の配列A〜Dが全て同一のHPFの分散形式で、分散メモリ上に配置されている場合、式
A(i)=B(i+1)+C(i+1)+D(i+1)
の右辺の配列B、C、Dのそれぞれの要素B(i+1)、C(i+1)、D(i+1)は、A(i)を所有するプロセッサ上に存在しない。
【００１２】
このため、図２に模式的に示すように、B(i+1)等を所有するプロセッサ２から、プロセッサ１への通信が、合計３回発生することになる。
【００１３】
ここで、B(i+1)、C(i+1)、D(i+1)を所有するプロセッサ２を活動プロセッサとし、その上で計算を行った結果をプロセッサ２上のテンポラリ配列A'に結果を格納するようにした場合、必要な通信は、A'(i+1)からプロセッサ１上のA(i)への通信１回のみとなり、実行時の性能劣化の大きな原因となるプロセッサ間通信の回数を減らすことが可能である。
【００１４】
本発明は、このような、分散メモリ型並列マシンの実行時のプロセッサ間通信の削減させるため、プログラム中の並列化可能なループ中の計算を実行する時の最適な計算実行プロセッサを選択するにあたり、ループ中の計算式に含まれる各配列の形状、添え字の形式、分散メモリ上への分散状態を、並列化コンパイラにより、コンパイル時に、解析して計算実行プロセッサを選択することで、最適な計算マッピングの促進し、目的コードを生成する。
【００１５】
本発明は、その一実施の形態において、並列化コンパイラの最適化部（３４）は、並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、配列の形状、配列の添え字の形式、分散メモリ上への分散状態から、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、配列に合うテンプレートが存在しない場合には、配列の形状、添え字を形式に従い定義されるブロック構成のテンプレートを作成し、配列を、当該配列に合うテンプレートに整列することで、情報テーブルの適切な部分（ブロック）に配列を登録する配列選別手段（３４２）と、作成された情報テーブルを基に、配列が登録されている場合、情報テーブルの分割されたブロック毎の通信量を計算し、情報テーブルのブロック毎の通信量から、計算実行プロセッサを決定するプロセッサ選択手段（３４１）とを備えている。
【００１６】
本発明の一実施の形態において、プロセッサ選択手段（３４１）において、処理対象のループが別のループを含む場合、内側ループを処理対象とし、計算実行プロセッサを外側の並列化可能ループで求めたものに限定する。
【００１７】
本発明の一実施の形態において、配列選別手段（３４２）において、選別処理対象の配列を、前記情報テーブルの対応する整列先のテンプレートである行と、配列の添え字形式に対応する列のブロックに登録する。
【００１８】
本発明の一実施の形態において、プロセッサ選択手段（３４１）において、情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小のブロック中の配列を有するプロセッサを計算実行プロセッサとして選択する。また、ブロック間の通信量が最小値をとるブロックが複数存在する場合、該複数のブロックの中の一のブロック中の配列を有するプロセッサを計算実行プロセッサとして選択する。
【００１９】
本発明の他の実施の形態において、配列整列（ALIGN）指示文等で指定されている場合には、配列選別手段（３４２）において、配列に合うテンプレートが存在しない場合において、前記配列とは異なる形状のテンプレートに整列するようにしてもよい。
【００２０】
【実施例】
上記した本発明の実施の形態についてさらに詳細に説明すべく、本発明の実施例について図面を参照して説明する。
【００２１】
図４は、本発明の一実施例の構成を示す図である。図４（ａ）を参照すると、本発明の一実施例は、入力となる原始プログラム１と、プログラム制御により動作するデータ処理装置２と、並列化コンパイラ３と、情報テーブル４と、を備えて構成されている。
【００２２】
より詳細には、図４（ａ）を参照すると、並列化コンパイラ３は、概要として、字句解析部（lexical  analysis）３１と、構文解析部（syntax  analysis；parser）３２と、意味解析部（semantic  analysis）３３と、最適化部３４と、通信生成部３５と、目的コード生成部３６と、を含む。
【００２３】
字句解析部３１は、原始プログラム１を入力して走査し、プログラミング言語（文、式等）を構成する最小単位であるトークンデータを作成し構文解析部３２に渡す。
【００２４】
構文解析部３２はトークンデータを受け取り構文解析を行い、構文木（parse  tree）などの内部データを作成する。
【００２５】
意味解析部３３は構文解析部３２で作成された内部データから、プログラムの意味的誤りの検出等を行う。
【００２６】
最適化部３４は、並列化処理を行い目的コード実行効率の向上を目的としたその他の処理を行う。図４（ｂ）を参照すると、最適化部３４は、本発明を実現させるためのプロセッサ選択手段３４1を備え、さらにプロセッサ選択手段３４1は配列選別手段３４２を備える。
【００２７】
通信生成部３５は、最適化部３４で行われた並列化処理を基に、実行時に必要となる通信を生成する。
【００２８】
目的コード生成部３６は、目的言語による目的コードを生成する。
【００２９】
コンパイラにおける最適化部３４の処理は、データ処理装置２（コンピュータ）で実行されるプログラムによりその処理・機能が実現される。同様にして、字句解析部３１、構文解析部３２、意味解析部３３、通信生成部３５と、目的コード生成部３６は、データ処理装置２（コンピュータ）で実行されるプログラムによりその処理・機能が実現される。
【００３０】
図５は、最適化部３４のプロセッサ選択手段３４１の処理手順を示す流れ図、図６は、配列選別手段３４２の処理手順を示す流れ図である。図５、図６を参照して、本実施例の動作について説明する。
【００３１】
プロセッサ選択手段３４１は、最適化部３４内で並列化が可能であると判定されたDOループを処理対象とする。
【００３２】
プロセッサ選択手段３４１は、処理対象ループに対して、配列選別手段３４２を実行し、当該ループに含まれる配列に関する情報テーブル４を作成する(ステップＳ１)。
【００３３】
次に、作成された情報テーブル４を基に、最適な計算実行プロセッサを選択し、最適化部３４の後続の最適化処理過程に渡す。
【００３４】
情報テーブル４に配列が登録されている場合（ステップＳ１４のＹＥＳ）、情報テーブルの分割されたブロック毎の通信量を計算し（ステップＳ１５）、情報テーブルの通信量から計算実行プロセッサを決定し（ステップＳ１６）、処理対象のループが別のループを含む場合（ステップＳ１７のＹＥＳ）、内側ループを処理対象とし、計算実行プロセッサをステップＳ１６で求めたものに限定する（ステップＳ１８）。
【００３５】
図６を参照すると、配列選別手段３４２は、処理対象ループ内の文を一文ずつ拾上げ、その文に含まれる配列の選別を行い、情報テーブル４の適切な部分に配列を登録する。配列の選別は、処理対象ループ内における配列の形状、添え字の形式、分散メモリ上への分散状態から行う。
【００３６】
まず、プログラマによって作成された原始プログラム１を基に、並列化コンパイラの構文解析部３２で作成され、意味解析部３３及び最適化部３４内のプロセッサ選択手段３４１の前の処理段階までに変更・追加等を加えられた並列化可能なループに関する内部データが、プロセッサ選択手段３４１に入力される。
【００３７】
並列化可能なループ内の同一のネストレベルに複数の並列化可能なループが存在する場合、本実施例に係る並列化コンパイラは、最適化部３４内のプロセッサ選択手段３４１の前の処理段階までに、それらのループの分割を試みるものとする。
【００３８】
ループ分割が行えない場合には、並列化コンパイラは、そのループブロックを、プロセッサ選択手段３４１の処理対象外として、本発明は適用されないものとする。
【００３９】
本発明をHPFコンパイラに実装し、図７に示したHPFプログラムを処理対象とする場合を例に、図５及び図６の処理手順について説明する。
【００４０】
まずプロセッサ選択手段３４１に到達する前のコンパイル過程において、図７の文１２６で参照されるDOループが並列化可能であると判定されている。
【００４１】
プロセッサ選択手段３４１には、この文１２６に対応する内部データが入力される。
【００４２】
図５を参照すると、プロセッサ選択手段３４１は、まず並列化可能なループを処理対象ループとして、その開始文の内部データを、配列選別手段３４２に渡す(ステップＳ１)。
【００４３】
図６を参照すると、プロセッサ選択手段３４１から呼び出された配列選別手段３４２は、処理対象ループ内の次の文の内部データを拾上げ、入力としてステップ３に渡す(ステップＳ２)。
【００４４】
配列選別手段３４２は、入力として渡された文の内部データを参照し、その文が処理対象ループの終了文であるか否かを判定する（ステップＳ３）。
【００４５】
処理対象ループ終了文である場合（ステップＳ３のＹｅｓ）、配列選別手段３４２の処理は終了となり、情報テーブル４を入力としてステップＳ１４（図５）に移る。
【００４６】
処理対象ループ終了文でない場合には（ステップＳ３のＮｏ）、その文の内部データを入力としてステップＳ４に渡す。
【００４７】
ステップＳ４では、入力として渡された内部データに対応する文中の配列のうち、未選別のものがあるか否かを判定する。文中に未選別の配列が存在しない場合、ステップＳ２に戻り、存在する場合、ステップＳ５に進む。
【００４８】
ステップＳ５では、未選別の配列を選別処理対象として文から拾上げ、次のステップＳ６に渡す。具体例を挙げると、図７に示されるHPFプログラムの文１２７の内部データが入力である場合、最初に選別処理対象となるのは、配列A(i,j)であり、最後に選別処理対象となるのは、配列D(2*i+2,j)である。
【００４９】
次のステップＳ６で、選別処理対象の配列に、添え字に、処理対象ループのDO変数を含む次元があるか否かを判定する。
【００５０】
ステップＳ６の判定の結果、該当する次元がない場合、ステップＳ２に戻る。
【００５１】
ステップＳ６の判定の結果、該当する次元がある場合、ステップＳ７で、その次元に、処理対象外ループのDO変数が含まれているか否かを判定する。
【００５２】
ステップＳ７の判定の結果、含まれている場合、情報テーブル４に既に登録されている全ての配列を抹消し、空の情報テーブル４を入力として、ステップＳ１４に移る。
【００５３】
ステップＳ７の判定の結果、含まれていない場合、ステップＳ８で、その次元が間接参照されているか否かを判定する。
【００５４】
ステップＳ８の判定の結果、間接参照されている場合、情報テーブル４に既に登録されている全ての配列を抹消し、空の情報テーブル４を入力としてステップＳ１４に移る。
【００５５】
ステップＳ８の判定の結果、間接参照されていない場合、ステップＳ９において、選別処理対象の配列が、その次元で、分散メモリ上にどのように配置されているかを特定する。選別処理対象の配列が分散メモリ上に分散されていない、または、実行時でなければ確定できない分散形式をもつ場合、ステップＳ５に戻る。
【００５６】
ステップＳ９において、選別処理対象の配列の分散形式が特定できた場合、ステップＳ１０に移る。
【００５７】
一例として、並列プログラミング言語の一つであるHPF(High Performance Fortran)の場合、その分散形式には、
BLOCK分散形式、
CYCLIC分散形式、
GEN_BLOCK分散形式、
INDIRECT分散形式、
*分散形式
の５種類があり、これらはプログラマによってHPFプログラムにおいて指定される。この５種類の分散形式のうち、「*分散形式」はデータを分散メモリ上に分割しないことを示す。
【００５８】
本発明が、HPFコンパイラに実装され、ある配列の次元の分散形式としてこの「*分散形式」が特定された場合は、ステップＳ９において、その配列の次元は分散されていないとみなし、ステップＳ５に戻る。
【００５９】
図６のステップＳ６からステップＳ９までの処理を、本発明がHPFコンパイラに実装されている場合を例に、具体的に即して説明する。
【００６０】
図７に示したHPFプログラムの文１２７に含まれる配列A(i,j)を選別処理対象とする場合、図６のステップＳ６の処理により、添え字に処理対象ループのDO変数iを含む次元が存在すると判定され、ステップＳ７に移る。
【００６１】
次に、ステップＳ７で、配列A(i,j)の１次元目に、解析対象外のループのDO変数jが含まれていないと判定され、ステップＳ８に移る。
【００６２】
次にステップ８で、その１次元目は、間接参照されていないと判定され、ステップ９に移る。
【００６３】
次にステップ９で、配列Aがその１次元目においてBLOCK分散形式で分散メモリ上に分割されていると判定され、ステップＳ１０に移る。
【００６４】
ステップＳ１０では、選別処理対象の配列に対し、その整列対象として適合するテンプレートが既に作成されているか否かを判定する。
【００６５】
テンプレートとは、基本的には、選別処理対象の配列と同じ形状と、同じ分散形式を持つ(選別処理対象と全く同じように分散メモリ上に配置されている)仮想的なコンパイラ作成による配列を意味する。具体例を挙げると、図７に示したHPFプログラム中の配列Aに対して、その整列対象として適合するテンプレートは、配列Aと同じ形状(100,100)を持ち、(BLOCK,BLOCK)分散形式をもつコンパイラ生成の配列である。
【００６６】
ステップＳ１０で、テンプレートが既に作成されていないと判定された場合、ステップＳ１１に進む。
【００６７】
ステップＳ１１では、選別処理対象の配列に対して、整列対象として適合するテンプレートを作成する。具体例を挙げると、図７に示したHPFプログラム中の配列Aに対しては、配列Aと同じ形状(100,100)を持ち、(BLOCK,BLOCK)分散形式をもつテンプレートが作成される。図７に示したHPFプログラム中の配列Cに対しては、配列Cと同じ形状(200,200)を持ち、(BLOCK,BLOCK)分散形式を持つテンプレートが作成される。
【００６８】
ステップＳ１２では、選別処理対象の配列を既存のテンプレートの中から、その配列に整列対象として適合するものを選択し、それに整列させる。
【００６９】
具体例を挙げると、図７に示したHPFプログラム中の配列Aと配列Bには、これらの配列と同じ形状(100,100)を持ち、同じ分散形式(BLOCK,BLOCK)を持つテンプレートが整列対象として適合し、図８に示すように、整列される。
【００７０】
図７に示したHPFプログラム中の配列Cと配列Dには、これらの配列と同じ形状(200,200)を持ち、同じ分散形式(BLOCK,BLOCK)を持つテンプレートが整列対象として適合し、図９に示すように、整列される。
【００７１】
図７に示したHPFプログラム中の全ての配列がテンプレートに整列された場合、図１０に示すような状態となる。
【００７２】
再び図６を参照すると、次のステップＳ１３で、選別処理対象配列を情報テーブル４の対応する整列先テンプレート(行)、配列の添え字形式(列)の部分に登録する。具体例を挙げると、図７に示したHPFプログラム中の文１２７中の配列A(i,j)を選別処理対象とした場合、そのテンプレートはT1であり、情報テーブル４中の(テンプレートT1,添え字形式(i,j))の部分に配列A(i,j)を登録する。
【００７３】
図７に示したHPFプログラムの文１２５のループ中の式に現れる全ての配列に対して、このステップＳ１３の処理を行った場合、図１１で示されるような情報テーブルが完成する。
【００７４】
図５を参照すると、プロセッサ選択手段３４１は、ステップＳ１４において、情報テーブル４を参照する。情報テーブル４に配列が全く登録されてない場合(配列選別手段３４２において、並列可能なループ内の文に選別対象外の配列が含まれていた場合)、本発明による処理の対象外として処理を終了する。情報テーブル４に配列が登録されている場合はステップＳ１５に移る。
【００７５】
ステップＳ１５において、情報テーブル４の整列先テンプレート(行)と、添え字形式(列)によって分割されたブロック毎に、そのブロックの配列を所有するプロセッサを計算実行プロセッサに選択した場合に生じるプロセッサ間通信量を計算する。
【００７６】
このとき、本発明が実装される並列化コンパイラは、情報テーブル４上の情報からはオーバラップシフト通信とコピーセクション通信の２種類の通信のみ発生させるものと仮定する。
【００７７】
オーバラップシフト通信は、プロセスが一列に並んでいると想定し、その各プロセスが一斉に同一方向に一定距離だけ離れたプロセスにデータを送信する形式の通信を意味する。
【００７８】
コピーセクション通信は、ある分散メモリ上に分散されているデータから、計算に必要な部分のデータ(データが配列である場合、部分配列)をコピーし送信する形式の通信を意味する。コピーセクション通信は、オーバラップシフト通信よりも通信時間がかかるものとする。
【００７９】
また、並列化コンパイラは、同一テンプレートに整列するデータを所有するプロセッサ間では、まずオーバラップシフト通信が適用できるか否かを判定する。この判定に際し、並列化コンパイラは、最初に、通信対象となる配列データが、その全ての次元において各プロセッサ上にその要素の並びを保ったまま分散されているか否かを判定する。要素の並びが保たれていない場合(例えば、HPFのCYCLIC分散形式、INDIRECT分散形式などは、配列データをその要素の並びを保ったままプロセッサ上に配置しない)は、オーバラップシフト通信の適用外となり、並列化コンパイラは、コピーセクション通信を発生させる。
【００８０】
配列がその全次元において要素の並びを保ったままプロセッサ上に配置されている場合、
処理対象ループのDO変数がiであり、
一方のプロセッサ上にあるデータの添え字の形式がn*i+m1(n：自然数、m1：整数)であり、
他方のプロセッサ上にあるデータの添え字の形式がn*i+m2(n：自然数、m2：整数)であるならば、その２つのプロセッサ間の通信にはオーバラップシフト通信が適用できる。
【００８１】
添え字の形式が、前述の関係を満たさない場合は、コピーセクション通信を発生させるものとする。
【００８２】
異なるテンプレートに整列する配列を所有するプロセッサ間では、オーバラップシフト通信は、一切使用せず、コピーセクション通信のみ発生させるものとする。
【００８３】
本発明が、上記の仕様を満たすHPFコンパイラに実装された場合を例にとって、このステップＳ１５の動作を具体的に示す。
【００８４】
図７に示したHPFプログラムの文１２６で示される並列化可能なループを処理対象ループとした場合、このステップＳ１５に到達した時点で、図１１に示すような、情報テーブルが作成されている。
【００８５】
図１１を参照すると、情報テーブルには、ブロック１〜６の６つのブロックにそれぞれ１個ずつ配列が登録されている。
【００８６】
それぞれのブロックに登録されている配列を所有するプロセッサを、計算実行プロセッサに選択した場合の、各プロセッサ間通信量の計算は、図１２に示すとおりである。
【００８７】
ブロック１の通信量は、［ブロック１−２間の通信量  １］＋［ブロック１−３間の通信量  １］＋［ブロック１−４間の通信量  ５］＋［ブロック１−５間の通信量  ５］＋［ブロック１−６間の通信量  ５］＝１７
【００８８】
ブロック２の通信量は、［ブロック２−１間の通信量  １］＋［ブロック２−３間の通信量  １］＋［ブロック２−４間の通信量  ５］＋［ブロック２−５間の通信量  ５］＋［ブロック２−６間の通信量  ５］＝１７
【００８９】
ブロック３の通信量は、［ブロック３−１間の通信量  １］＋［ブロック３−２間の通信量  １］＋［ブロック３−４間の通信量  ５］＋［ブロック３−５間の通信量  ５］＋［ブロック３−６間の通信量  ５］＝１７
【００９０】
ブロック４の通信量は、［ブロック４−１間の通信量  ５］＋［ブロック４−２間の通信量  ５］＋［ブロック４−３間の通信量  ５］＋［ブロック４−５間の通信量  １］＋［ブロック４−６間の通信量  ５］＝２１
【００９１】
ブロック５の通信量は、［ブロック５−１間の通信量  ５］＋［ブロック５−２間の通信量  ５］＋［ブロック５−３間の通信量  ５］＋［ブロック５−４間の通信量  １］＋［ブロック５−６間の通信量  ５］＝２１
【００９２】
ブロック６の通信量は、［ブロック６−１間の通信量  ５］＋［ブロック６−２間の通信量  ５］＋［ブロック６−３間の通信量  ５］＋［ブロック６−４間の通信量  ５］＋［ブロック６−５間の通信量  ５］＝２５
【００９３】
配列A(i,j)のデータを配列A(i+1,j)を所有するプロセッサに送信する場合や、配列C(2*i+2,j+1)のデータを配列D(2*i+2,j)を所有するプロセッサに送信する場合は、それぞれの配列が同一のテンプレートに整列しており、それらのDO変数i,jを含む添え字の形式がn*i+m、あるいはn*j+mの形に揃っているので、オーバラップシフト通信が適用できる。
【００９４】
しかしながら、配列A(i,j)のデータを配列E(i,j)を所有するプロセッサに送信するような場合には、それぞれの配列が異なるテンプレートに整列しているので、コピーセクション通信が必要となる。
【００９５】
図１２に示した計算においては、その通信量に関わらず、コピーセクション通信がオーバラップシフト通信の５倍の通信時間を要するという仮定が適用されている。
【００９６】
次に、図５のステップＳ１６において、ステップＳ１５で求めた情報テーブル４のブロック毎のプロセッサ間通信量を比較し、最も通信量が低くなるブロック中の配列を所有するプロセッサを、計算を実行するプロセッサとして選択する。
【００９７】
情報テーブル４において、最小の通信量をもつブロックが複数存在する場合、それらのブロックの中から、例えばランダムで、１個のブロックを選択し、そのブロック中の配列を所有するプロセッサを計算実行プロセッサとして選択する。
【００９８】
計算実行プロセッサを選択した後、情報テーブル４に登録された配列を消去し、図５のステップＳ１７に移る。
【００９９】
図１１に示す情報テーブルを例にした場合、図１２に示した計算結果から、最も他プロセッサとの通信量が少なくなるのは、配列A(i,j)、または配列B(i+1,j)、または配列A(i+1、j+1)を所有するプロセッサのうちのいずれかを計算実行プロセッサとして選択した場合である。
【０１００】
次に、図５のステップＳ１７において、処理の対象としていた並列化可能なループが、その内側にさらに並列化可能なループを含んでいるか(ループが入れ子になっているか)を判定する。
【０１０１】
内側に並列化可能なループが含まれている場合、その内側ループを、処理対象ループとして、図５のステップＳ１８に移る。内側にループが含まれていない場合は、本発明による処理を終了する。
【０１０２】
図５のステップＳ１８では、ステップＳ１６で最終的に決定された計算実行プロセッサ(現在の処理対象ループの外側にある並列化可能ループの計算実行プロセッサ)を、現在の処理対象ループ内の計算を実行するプロセッサとしても選択する。選択後、ステップＳ１７に戻る。このステップＳ１８により、全ての入れ子（nest）になっている並列化可能なループの計算実行プロセッサは、ステップＳ１６で求めたものとなる。
【０１０３】
次に本発明の他の実施例について詳細に説明する。図６を参照すると、本発明の他の実施例では、配列選別手段３４２のステップＳ１０〜Ｓ１２において、配列をテンプレートに整列させる処理が行われる。この実施例の動作では、常に、別処理対象の配列と同じ形状と、同じ分散形式をもつ(選別処理対象と全く同じように分散メモリ上に配置されている)仮想的なコンパイラ作成による配列をテンプレートとする。
【０１０４】
しかしながら、並列プログラミング言語の一つであるHPF(High Performance Fortran)には、ALIGN指示文が存在する。
【０１０５】
このALIGN指示文は、あるデータ実体から基準となるデータ実体への整列をプログラマが指定するためのものである。
【０１０６】
以下では、本発明がHPFコンパイラに実装された場合の、プログラマ指定による配列同士の整列関係を含んだテンプレートへの整列処理、計算実行プロセッサ選択を、図１３に示されるHPFプログラム１３を例に詳細に説明する。
【０１０７】
図１３を参照すると、HPFプログラム１３の文１３３において、HPFのALIGN指示文（文１３３）により、配列Aが配列Bに整列されている。
【０１０８】
HPFコンパイラにおいて、図６のステップＳ１０に、HPFプログラム１３中の配列Aが、選別処理対象配列として入力された場合、HPFプログラムの文１３３の情報から、この実施例では、配列Aを、形状(100)ではなく、形状(200)のテンプレートに、図１４に示すように整列させる。
【０１０９】
図１４に示すように、テンプレートTは、配列Bの形状、分散形式と同じものを持つものであり、配列BもこのテンプレートTに整列される。
【０１１０】
従って、配列A、BのテンプレートTへの整列は、図１３に示すHPFプログラムの文１３３の配列Aから配列Bへの整列関係を満たすものとなる。
【０１１１】
図６のステップＳ１３において、選別処理対象配列を情報テーブル４の対応する整列先テンプレート(行)、配列の添え字形式(列)の部分に登録する処理が行われるが、本発明がHPFコンパイラに実装された場合、図１４に示すように、配列からテンプレートへの整列関係があるため、配列とテンプレートの添え字は必ずしも一致しない。
【０１１２】
例えば図１４では、配列A(i)は、テンプレートT(2*i)に整列しており、添え字はiと2*iで形式が一致していない。
【０１１３】
このような場合、選別処理対象配列の情報テーブル４への登録は、整列先テンプレート(行)と、その整列先テンプレートの添え字形式(列)を参照して行う。具体例を挙げると、HPFプログラムの文１３６で開始されるループが処理対象であり、文１３７中の配列A(i)が選別処理対象の配列として配列選別手段３４２のステップＳ１３に入力された場合、配列A(i)は、情報テーブル４の(テンプレートT,添え字形式(i))のブロックではなく、(テンプレートT,添え字形式(2*i))のブロックに登録される。
【０１１４】
このようにして登録された情報テーブル４を基に、プロセッサ選択手段３４１のステップＳ１５（図５）を実行することで、プログラマ指定による配列同士の整列関係も含んだ上での、プロセッサ間通信量が最も低い計算実行プロセッサを選択できる。
【０１１５】
【発明の効果】
以上説明したように、本発明によれば、コンパイル時に、最適な計算実行プロセッサを選択することにより、実行時のプロセッサ間通信量を削減することができる、という効果を奏する。プロセッサ間通信は、並列プログラムの実行性能を劣化させる大きな要因のうちの１つであり、これを減少させることは並列プログラムの実行性能向上につながる。さらに、並列化コンパイラが自動的に実行時のプロセッサ間通信を削減する本発明を実施することで、プログラマの並列プログラミングの負担を軽減することができる、という利点、効果も有する。
【図面の簡単な説明】
【図１】本発明の原理を説明するための図であり、DOループのプログラムの一例を示す図である。
【図２】本発明の原理を説明するための図であり、プロセッサ間通信を説明するための図である。
【図３】本発明の原理を説明するための図であり、プロセッサ間通信を説明するための図である。
【図４】本発明の一実施例の構成を示す図である。
【図５】本発明の一実施例のプロセッサ選択手段の処理手順を示す流れ図である。
【図６】本発明の一実施例の配列選別手段の処理手順を示す流れ図である。
【図７】本発明の一実施例を説明するためのHPFプログラムの例を示す図である。
【図８】本発明の一実施例における配列とテンプレートを説明するための図である。
【図９】本発明の一実施例における配列とテンプレートを説明するための図である。
【図１０】本発明の一実施例における配列とテンプレートの対応を説明するための図である。
【図１１】本発明の一実施例における情報テーブルの一例を説明するための図である。
【図１２】本発明の一実施例における情報テーブル（図１１）のブロック１〜６の各通信量を説明するための図である。
【図１３】本発明の一実施例を説明するためのHPFプログラムの例を示す図である。
【図１４】本発明の一実施例における配列とテンプレートを説明するための図である。
【符号の説明】
１  原始プログラム
２  データ処理装置
３  並列化コンパイラ
４  情報テーブル
３１  字句解析部
３２  構文解析部
３３  意味解析部
３４  最適化部
３５  通信生成部
３６  目的コード生成部
３４１  プロセッサ選択手段
３４２  配列選別手段
【図１】
0003757825.tif 000002
【図２】
0003757825.tif 000003
【図３】
0003757825.tif 000004
【図４】
0003757825.tif 000005
【図５】
0003757825.tif 000006
【図６】
0003757825.tif 000007
【図７】
0003757825.tif 000008
【図８】
0003757825.tif 000009
【図９】
0003757825.tif 000010
【図１０】
0003757825.tif 000011
【図１１】
0003757825.tif 000012
【図１２】
0003757825.tif 000013
【図１３】
0003757825.tif 000014
【図１４】
0003757825.tif 000015