JP3757825B2 - プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム - Google Patents

プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム Download PDF

Info

Publication number
JP3757825B2
JP3757825B2 JP2001199321A JP2001199321A JP3757825B2 JP 3757825 B2 JP3757825 B2 JP 3757825B2 JP 2001199321 A JP2001199321 A JP 2001199321A JP 2001199321 A JP2001199321 A JP 2001199321A JP 3757825 B2 JP3757825 B2 JP 3757825B2
Authority
JP
Japan
Prior art keywords
array
processor
communication
information table
template
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.)
Expired - Fee Related
Application number
JP2001199321A
Other languages
English (en)
Other versions
JP2003015883A (ja
Inventor
大輔 坂田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2001199321A priority Critical patent/JP3757825B2/ja
Publication of JP2003015883A publication Critical patent/JP2003015883A/ja
Application granted granted Critical
Publication of JP3757825B2 publication Critical patent/JP3757825B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Multi Processors (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、コンパイラ技術に関し、特に分散メモリ並列マシンの並列化コンパイラ技術に関する。
【0002】
【従来の技術】
複数のプロセッサがそれぞれローカルなメモリを分散して備える分散メモリ構成の並列マシンにおける並列化では、データの分散メモリ上への配置と、演算処理を、どのプロセッサへ分配するかという項目が重要となる。
【0003】
データアクセスの局所性(locality)が高く、プロセッサ間通信量が少なくなる程、並列性が向上するといえる。よく知られているように、HPF(High Performance Fortran)等の並列プログラミング言語では、いくつかの指示文などが定義されており、プログラマは、これらの指示文を用いて、データの分散メモリへの分配と、演算処理のプロセッサへの分配を指示し、それ以外の仕事を並列化コンパイラに任せることになる。
【0004】
しかしながら、真に高い並列性を得るためには、プログラマがそのプログラムに応じて、いくつもの指示文を選択し追加する箇所を吟味しなければならない、というのが現状である。
【0005】
【発明が解決しようとする課題】
したがって、本発明が解決しようとする課題は、この問題点をいくらか軽減、もしくは解消させるために、並列化コンパイラに実装され得るものであって、並列化コンパイラが、プログラマからの指示文による支援がない場合でも、適切な演算処理のプロセッサへの分配を行い、実行時のプロセッサ間通信量を削減することができる、方法と装置ならびにプログラム製品を提供することである。
【0006】
【課題を解決するための手段】
上記課題を解決するための手段を提供する本発明は、その一つのアスペクトにおいて、並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、少なくとも前記配列の形状、及び前記配列の添え字の形式に基づき、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、前記配列に合うテンプレートが存在しない場合には、前記配列の形状に合うテンプレートを作成し、前記配列を前記テンプレートに整列することで、前記情報テーブルの該当するブロックに前記配列を登録し、作成された前記情報テーブルに、該処理対象ループ内の文に含まれる前記配列が登録されている場合、前記情報テーブルの分割されたブロック毎の通信量を計算し、前記情報テーブルの通信量から、計算実行プロセッサを決定し、分散メモリ型並列マシンを構成するプロセッサ間通信を削減するものである。
【0007】
【発明の実施の形態】
発明の実施の形態について説明する。はじめに発明の原理・作用について説明しておく。本発明は、分散メモリ並列システム上で高性能を得ることを目的とした並列化コンパイラに対して、最適な計算マッピングの促進を図るための方法と装置並びプログラムを提供するものである。
【0008】
図1に示すような、Fortran言語で書かれたDOループ((A(i)=B(i+1)+C(i+1)+D(i+1)をiが1〜99まで繰り返すループ処理)を例に説明すると、このループのある繰り返しにおいて定義され、別の繰り返しにおいて参照されるようなデータが存在しないため、並列化コンパイラによって並列化可能であると判定される。
【0009】
続いて、実際にループを並列化するにあたり、各繰り返しにおける計算を、どのプロセッサに担当させるかを、並列化コンパイラは、決定しなければならない。
【0010】
例えば、並列プログラミング言語HPF(High Performance Fortran)のコンパイラによって、図1のループは並列化され、その計算は、オーナーコンピュートルールに従って、更新データである配列Aの要素A(i)を所有するプロセッサ(このように計算等を実行するプロセッサを「活動プロセッサ」と呼ぶ)によって行われる。
【0011】
しかしながら、図1の配列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)を所有するプロセッサ上に存在しない。
【0012】
このため、図2に模式的に示すように、B(i+1)等を所有するプロセッサ2から、プロセッサ1への通信が、合計3回発生することになる。
【0013】
ここで、B(i+1)、C(i+1)、D(i+1)を所有するプロセッサ2を活動プロセッサとし、その上で計算を行った結果をプロセッサ2上のテンポラリ配列 A' に結果を格納するようにした場合、必要な通信は、A'(i+1) からプロセッサ1上の A(i)への通信1回のみとなり、実行時の性能劣化の大きな原因となるプロセッサ間通信の回数を減らすことが可能である。
【0014】
本発明は、このような、分散メモリ型並列マシンの実行時のプロセッサ間通信の削減させるため、プログラム中の並列化可能なループ中の計算を実行する時の最適な計算実行プロセッサを選択するにあたり、ループ中の計算式に含まれる各配列の形状、添え字の形式、分散メモリ上への分散状態を、並列化コンパイラにより、コンパイル時に、解析して計算実行プロセッサを選択することで、最適な計算マッピングの促進し、目的コードを生成する。
【0015】
本発明は、その一実施の形態において、並列化コンパイラの最適化部(34)は、並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、配列の形状、配列の添え字の形式、分散メモリ上への分散状態から、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、配列に合うテンプレートが存在しない場合には、配列の形状、添え字を形式に従い定義されるブロック構成のテンプレートを作成し、配列を、当該配列に合うテンプレートに整列することで、情報テーブルの適切な部分(ブロック)に配列を登録する配列選別手段(342)と、作成された情報テーブルを基に、配列が登録されている場合、情報テーブルの分割されたブロック毎の通信量を計算し、情報テーブルのブロック毎の通信量から、計算実行プロセッサを決定するプロセッサ選択手段(341)とを備えている。
【0016】
本発明の一実施の形態において、プロセッサ選択手段(341)において、処理対象のループが別のループを含む場合、内側ループを処理対象とし、計算実行プロセッサを外側の並列化可能ループで求めたものに限定する。
【0017】
本発明の一実施の形態において、配列選別手段(342)において、選別処理対象の配列を、前記情報テーブルの対応する整列先のテンプレートである行と、配列の添え字形式に対応する列のブロックに登録する。
【0018】
本発明の一実施の形態において、プロセッサ選択手段(341)において、情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小のブロック中の配列を有するプロセッサを計算実行プロセッサとして選択する。また、ブロック間の通信量が最小値をとるブロックが複数存在する場合、該複数のブロックの中の一のブロック中の配列を有するプロセッサを計算実行プロセッサとして選択する。
【0019】
本発明の他の実施の形態において、配列整列(ALIGN)指示文等で指定されている場合には、配列選別手段(342)において、配列に合うテンプレートが存在しない場合において、前記配列とは異なる形状のテンプレートに整列するようにしてもよい。
【0020】
【実施例】
上記した本発明の実施の形態についてさらに詳細に説明すべく、本発明の実施例について図面を参照して説明する。
【0021】
図4は、本発明の一実施例の構成を示す図である。図4(a)を参照すると、本発明の一実施例は、入力となる原始プログラム1と、プログラム制御により動作するデータ処理装置2と、並列化コンパイラ3と、情報テーブル4と、を備えて構成されている。
【0022】
より詳細には、図4(a)を参照すると、並列化コンパイラ3は、概要として、字句解析部(lexical analysis)31と、構文解析部(syntax analysis;parser)32と、意味解析部(semantic analysis)33と、最適化部34と、通信生成部35と、目的コード生成部36と、を含む。
【0023】
字句解析部31は、原始プログラム1を入力して走査し、プログラミング言語(文、式等)を構成する最小単位であるトークンデータを作成し構文解析部32に渡す。
【0024】
構文解析部32はトークンデータを受け取り構文解析を行い、構文木(parse tree)などの内部データを作成する。
【0025】
意味解析部33は構文解析部32で作成された内部データから、プログラムの意味的誤りの検出等を行う。
【0026】
最適化部34は、並列化処理を行い目的コード実行効率の向上を目的としたその他の処理を行う。図4(b)を参照すると、最適化部34は、本発明を実現させるためのプロセッサ選択手段341を備え、さらにプロセッサ選択手段341は配列選別手段342を備える。
【0027】
通信生成部35は、最適化部34で行われた並列化処理を基に、実行時に必要となる通信を生成する。
【0028】
目的コード生成部36は、目的言語による目的コードを生成する。
【0029】
コンパイラにおける最適化部34の処理は、データ処理装置2(コンピュータ)で実行されるプログラムによりその処理・機能が実現される。同様にして、字句解析部31、構文解析部32、意味解析部33、通信生成部35と、目的コード生成部36は、データ処理装置2(コンピュータ)で実行されるプログラムによりその処理・機能が実現される。
【0030】
図5は、最適化部34のプロセッサ選択手段341の処理手順を示す流れ図、図6は、配列選別手段342の処理手順を示す流れ図である。図5、図6を参照して、本実施例の動作について説明する。
【0031】
プロセッサ選択手段341は、最適化部34内で並列化が可能であると判定されたDOループを処理対象とする。
【0032】
プロセッサ選択手段341は、処理対象ループに対して、配列選別手段342を実行し、当該ループに含まれる配列に関する情報テーブル4を作成する(ステップS1)。
【0033】
次に、作成された情報テーブル4を基に、最適な計算実行プロセッサを選択し、最適化部34の後続の最適化処理過程に渡す。
【0034】
情報テーブル4に配列が登録されている場合(ステップS14のYES)、情報テーブルの分割されたブロック毎の通信量を計算し(ステップS15)、情報テーブルの通信量から計算実行プロセッサを決定し(ステップS16)、処理対象のループが別のループを含む場合(ステップS17のYES)、内側ループを処理対象とし、計算実行プロセッサをステップS16で求めたものに限定する(ステップS18)。
【0035】
図6を参照すると、配列選別手段342は、処理対象ループ内の文を一文ずつ拾上げ、その文に含まれる配列の選別を行い、情報テーブル4の適切な部分に配列を登録する。配列の選別は、処理対象ループ内における配列の形状、添え字の形式、分散メモリ上への分散状態から行う。
【0036】
まず、プログラマによって作成された原始プログラム1を基に、並列化コンパイラの構文解析部32で作成され、意味解析部33及び最適化部34内のプロセッサ選択手段341の前の処理段階までに変更・追加等を加えられた並列化可能なループに関する内部データが、プロセッサ選択手段341に入力される。
【0037】
並列化可能なループ内の同一のネストレベルに複数の並列化可能なループが存在する場合、本実施例に係る並列化コンパイラは、最適化部34内のプロセッサ選択手段341の前の処理段階までに、それらのループの分割を試みるものとする。
【0038】
ループ分割が行えない場合には、並列化コンパイラは、そのループブロックを、プロセッサ選択手段341の処理対象外として、本発明は適用されないものとする。
【0039】
本発明をHPFコンパイラに実装し、図7に示したHPFプログラムを処理対象とする場合を例に、図5及び図6の処理手順について説明する。
【0040】
まずプロセッサ選択手段341に到達する前のコンパイル過程において、図7の文126で参照されるDOループが並列化可能であると判定されている。
【0041】
プロセッサ選択手段341には、この文126に対応する内部データが入力される。
【0042】
図5を参照すると、プロセッサ選択手段341は、まず並列化可能なループを処理対象ループとして、その開始文の内部データを、配列選別手段342に渡す(ステップS1)。
【0043】
図6を参照すると、プロセッサ選択手段341から呼び出された配列選別手段342は、処理対象ループ内の次の文の内部データを拾上げ、入力としてステップ3に渡す(ステップS2)。
【0044】
配列選別手段342は、入力として渡された文の内部データを参照し、その文が処理対象ループの終了文であるか否かを判定する(ステップS3)。
【0045】
処理対象ループ終了文である場合(ステップS3のYes)、配列選別手段342の処理は終了となり、情報テーブル4を入力としてステップS14(図5)に移る。
【0046】
処理対象ループ終了文でない場合には(ステップS3のNo)、その文の内部データを入力としてステップS4に渡す。
【0047】
ステップS4では、入力として渡された内部データに対応する文中の配列のうち、未選別のものがあるか否かを判定する。文中に未選別の配列が存在しない場合、ステップS2に戻り、存在する場合、ステップS5に進む。
【0048】
ステップS5では、未選別の配列を選別処理対象として文から拾上げ、次のステップS6に渡す。具体例を挙げると、図7に示されるHPFプログラムの文127の内部データが入力である場合、最初に選別処理対象となるのは、配列A(i,j)であり、最後に選別処理対象となるのは、配列D(2*i+2,j)である。
【0049】
次のステップS6で、選別処理対象の配列に、添え字に、処理対象ループのDO変数を含む次元があるか否かを判定する。
【0050】
ステップS6の判定の結果、該当する次元がない場合、ステップS2に戻る。
【0051】
ステップS6の判定の結果、該当する次元がある場合、ステップS7で、その次元に、処理対象外ループのDO変数が含まれているか否かを判定する。
【0052】
ステップS7の判定の結果、含まれている場合、情報テーブル4に既に登録されている全ての配列を抹消し、空の情報テーブル4を入力として、ステップS14に移る。
【0053】
ステップS7の判定の結果、含まれていない場合、ステップS8で、その次元が間接参照されているか否かを判定する。
【0054】
ステップS8の判定の結果、間接参照されている場合、情報テーブル4に既に登録されている全ての配列を抹消し、空の情報テーブル4を入力としてステップS14に移る。
【0055】
ステップS8の判定の結果、間接参照されていない場合、ステップS9において、選別処理対象の配列が、その次元で、分散メモリ上にどのように配置されているかを特定する。選別処理対象の配列が分散メモリ上に分散されていない、または、実行時でなければ確定できない分散形式をもつ場合、ステップS5に戻る。
【0056】
ステップS9において、選別処理対象の配列の分散形式が特定できた場合、ステップS10に移る。
【0057】
一例として、並列プログラミング言語の一つであるHPF(High Performance Fortran)の場合、その分散形式には、
BLOCK分散形式、
CYCLIC分散形式、
GEN_BLOCK分散形式、
INDIRECT分散形式、
*分散形式
の5種類があり、これらはプログラマによってHPFプログラムにおいて指定される。この5種類の分散形式のうち、「*分散形式」はデータを分散メモリ上に分割しないことを示す。
【0058】
本発明が、HPFコンパイラに実装され、ある配列の次元の分散形式としてこの「*分散形式」が特定された場合は、ステップS9において、その配列の次元は分散されていないとみなし、ステップS5に戻る。
【0059】
図6のステップS6からステップS9までの処理を、本発明がHPFコンパイラに実装されている場合を例に、具体的に即して説明する。
【0060】
図7に示したHPFプログラムの文127に含まれる配列A(i,j)を選別処理対象とする場合、図6のステップS6の処理により、添え字に処理対象ループのDO変数iを含む次元が存在すると判定され、ステップS7に移る。
【0061】
次に、ステップS7で、配列A(i,j)の1次元目に、解析対象外のループのDO変数jが含まれていないと判定され、ステップS8に移る。
【0062】
次にステップ8で、その1次元目は、間接参照されていないと判定され、ステップ9に移る。
【0063】
次にステップ9で、配列Aがその1次元目においてBLOCK分散形式で分散メモリ上に分割されていると判定され、ステップS10に移る。
【0064】
ステップS10では、選別処理対象の配列に対し、その整列対象として適合するテンプレートが既に作成されているか否かを判定する。
【0065】
テンプレートとは、基本的には、選別処理対象の配列と同じ形状と、同じ分散形式を持つ(選別処理対象と全く同じように分散メモリ上に配置されている)仮想的なコンパイラ作成による配列を意味する。具体例を挙げると、図7に示したHPFプログラム中の配列Aに対して、その整列対象として適合するテンプレートは、配列Aと同じ形状(100,100)を持ち、(BLOCK,BLOCK)分散形式をもつコンパイラ生成の配列である。
【0066】
ステップS10で、テンプレートが既に作成されていないと判定された場合、ステップS11に進む。
【0067】
ステップS11では、選別処理対象の配列に対して、整列対象として適合するテンプレートを作成する。具体例を挙げると、図7に示したHPFプログラム中の配列Aに対しては、配列Aと同じ形状(100,100)を持ち、(BLOCK,BLOCK)分散形式をもつテンプレートが作成される。図7に示したHPFプログラム中の配列Cに対しては、配列Cと同じ形状(200,200)を持ち、(BLOCK,BLOCK)分散形式を持つテンプレートが作成される。
【0068】
ステップS12では、選別処理対象の配列を既存のテンプレートの中から、その配列に整列対象として適合するものを選択し、それに整列させる。
【0069】
具体例を挙げると、図7に示したHPFプログラム中の配列Aと配列Bには、これらの配列と同じ形状(100,100)を持ち、同じ分散形式(BLOCK,BLOCK)を持つテンプレートが整列対象として適合し、図8に示すように、整列される。
【0070】
図7に示したHPFプログラム中の配列Cと配列Dには、これらの配列と同じ形状(200,200)を持ち、同じ分散形式(BLOCK,BLOCK)を持つテンプレートが整列対象として適合し、図9に示すように、整列される。
【0071】
図7に示したHPFプログラム中の全ての配列がテンプレートに整列された場合、図10に示すような状態となる。
【0072】
再び図6を参照すると、次のステップS13で、選別処理対象配列を情報テーブル4の対応する整列先テンプレート(行)、配列の添え字形式(列)の部分に登録する。具体例を挙げると、図7に示したHPFプログラム中の文127中の配列A(i,j)を選別処理対象とした場合、そのテンプレートはT1であり、情報テーブル4中の(テンプレートT1,添え字形式(i,j))の部分に配列A(i,j)を登録する。
【0073】
図7に示したHPFプログラムの文125のループ中の式に現れる全ての配列に対して、このステップS13の処理を行った場合、図11で示されるような情報テーブルが完成する。
【0074】
図5を参照すると、プロセッサ選択手段341は、ステップS14において、情報テーブル4を参照する。情報テーブル4に配列が全く登録されてない場合(配列選別手段342において、並列可能なループ内の文に選別対象外の配列が含まれていた場合)、本発明による処理の対象外として処理を終了する。情報テーブル4に配列が登録されている場合はステップS15に移る。
【0075】
ステップS15において、情報テーブル4の整列先テンプレート(行)と、添え字形式(列)によって分割されたブロック毎に、そのブロックの配列を所有するプロセッサを計算実行プロセッサに選択した場合に生じるプロセッサ間通信量を計算する。
【0076】
このとき、本発明が実装される並列化コンパイラは、情報テーブル4上の情報からはオーバラップシフト通信とコピーセクション通信の2種類の通信のみ発生させるものと仮定する。
【0077】
オーバラップシフト通信は、プロセスが一列に並んでいると想定し、その各プロセスが一斉に同一方向に一定距離だけ離れたプロセスにデータを送信する形式の通信を意味する。
【0078】
コピーセクション通信は、ある分散メモリ上に分散されているデータから、計算に必要な部分のデータ(データが配列である場合、部分配列)をコピーし送信する形式の通信を意味する。コピーセクション通信は、オーバラップシフト通信よりも通信時間がかかるものとする。
【0079】
また、並列化コンパイラは、同一テンプレートに整列するデータを所有するプロセッサ間では、まずオーバラップシフト通信が適用できるか否かを判定する。この判定に際し、並列化コンパイラは、最初に、通信対象となる配列データが、その全ての次元において各プロセッサ上にその要素の並びを保ったまま分散されているか否かを判定する。要素の並びが保たれていない場合(例えば、HPFのCYCLIC分散形式、INDIRECT分散形式などは、配列データをその要素の並びを保ったままプロセッサ上に配置しない)は、オーバラップシフト通信の適用外となり、並列化コンパイラは、コピーセクション通信を発生させる。
【0080】
配列がその全次元において要素の並びを保ったままプロセッサ上に配置されている場合、
処理対象ループのDO変数がiであり、
一方のプロセッサ上にあるデータの添え字の形式がn*i+m1(n:自然数、m1:整数)であり、
他方のプロセッサ上にあるデータの添え字の形式がn*i+m2(n:自然数、m2:整数)であるならば、その2つのプロセッサ間の通信にはオーバラップシフト通信が適用できる。
【0081】
添え字の形式が、前述の関係を満たさない場合は、コピーセクション通信を発生させるものとする。
【0082】
異なるテンプレートに整列する配列を所有するプロセッサ間では、オーバラップシフト通信は、一切使用せず、コピーセクション通信のみ発生させるものとする。
【0083】
本発明が、上記の仕様を満たすHPFコンパイラに実装された場合を例にとって、このステップS15の動作を具体的に示す。
【0084】
図7に示したHPFプログラムの文126で示される並列化可能なループを処理対象ループとした場合、このステップS15に到達した時点で、図11に示すような、情報テーブルが作成されている。
【0085】
図11を参照すると、情報テーブルには、ブロック1〜6の6つのブロックにそれぞれ1個ずつ配列が登録されている。
【0086】
それぞれのブロックに登録されている配列を所有するプロセッサを、計算実行プロセッサに選択した場合の、各プロセッサ間通信量の計算は、図12に示すとおりである。
【0087】
ブロック1の通信量は、[ブロック1−2間の通信量 1]+[ブロック1−3間の通信量 1]+[ブロック1−4間の通信量 5]+[ブロック1−5間の通信量 5]+[ブロック1−6間の通信量 5]=17
【0088】
ブロック2の通信量は、[ブロック2−1間の通信量 1]+[ブロック2−3間の通信量 1]+[ブロック2−4間の通信量 5]+[ブロック2−5間の通信量 5]+[ブロック2−6間の通信量 5]=17
【0089】
ブロック3の通信量は、[ブロック3−1間の通信量 1]+[ブロック3−2間の通信量 1]+[ブロック3−4間の通信量 5]+[ブロック3−5間の通信量 5]+[ブロック3−6間の通信量 5]=17
【0090】
ブロック4の通信量は、[ブロック4−1間の通信量 5]+[ブロック4−2間の通信量 5]+[ブロック4−3間の通信量 5]+[ブロック4−5間の通信量 1]+[ブロック4−6間の通信量 5]=21
【0091】
ブロック5の通信量は、[ブロック5−1間の通信量 5]+[ブロック5−2間の通信量 5]+[ブロック5−3間の通信量 5]+[ブロック5−4間の通信量 1]+[ブロック5−6間の通信量 5]=21
【0092】
ブロック6の通信量は、[ブロック6−1間の通信量 5]+[ブロック6−2間の通信量 5]+[ブロック6−3間の通信量 5]+[ブロック6−4間の通信量 5]+[ブロック6−5間の通信量 5]=25
【0093】
配列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の形に揃っているので、オーバラップシフト通信が適用できる。
【0094】
しかしながら、配列A(i,j)のデータを配列E(i,j)を所有するプロセッサに送信するような場合には、それぞれの配列が異なるテンプレートに整列しているので、コピーセクション通信が必要となる。
【0095】
図12に示した計算においては、その通信量に関わらず、コピーセクション通信がオーバラップシフト通信の5倍の通信時間を要するという仮定が適用されている。
【0096】
次に、図5のステップS16において、ステップS15で求めた情報テーブル4のブロック毎のプロセッサ間通信量を比較し、最も通信量が低くなるブロック中の配列を所有するプロセッサを、計算を実行するプロセッサとして選択する。
【0097】
情報テーブル4において、最小の通信量をもつブロックが複数存在する場合、それらのブロックの中から、例えばランダムで、1個のブロックを選択し、そのブロック中の配列を所有するプロセッサを計算実行プロセッサとして選択する。
【0098】
計算実行プロセッサを選択した後、情報テーブル4に登録された配列を消去し、図5のステップS17に移る。
【0099】
図11に示す情報テーブルを例にした場合、図12に示した計算結果から、最も他プロセッサとの通信量が少なくなるのは、配列A(i,j)、または配列B(i+1,j)、または配列A(i+1、j+1)を所有するプロセッサのうちのいずれかを計算実行プロセッサとして選択した場合である。
【0100】
次に、図5のステップS17において、処理の対象としていた並列化可能なループが、その内側にさらに並列化可能なループを含んでいるか(ループが入れ子になっているか)を判定する。
【0101】
内側に並列化可能なループが含まれている場合、その内側ループを、処理対象ループとして、図5のステップS18に移る。内側にループが含まれていない場合は、本発明による処理を終了する。
【0102】
図5のステップS18では、ステップS16で最終的に決定された計算実行プロセッサ(現在の処理対象ループの外側にある並列化可能ループの計算実行プロセッサ)を、現在の処理対象ループ内の計算を実行するプロセッサとしても選択する。選択後、ステップS17に戻る。このステップS18により、全ての入れ子(nest)になっている並列化可能なループの計算実行プロセッサは、ステップS16で求めたものとなる。
【0103】
次に本発明の他の実施例について詳細に説明する。図6を参照すると、本発明の他の実施例では、配列選別手段342のステップS10〜S12において、配列をテンプレートに整列させる処理が行われる。この実施例の動作では、常に、別処理対象の配列と同じ形状と、同じ分散形式をもつ(選別処理対象と全く同じように分散メモリ上に配置されている)仮想的なコンパイラ作成による配列をテンプレートとする。
【0104】
しかしながら、並列プログラミング言語の一つであるHPF(High Performance Fortran)には、ALIGN指示文が存在する。
【0105】
このALIGN指示文は、あるデータ実体から基準となるデータ実体への整列をプログラマが指定するためのものである。
【0106】
以下では、本発明がHPFコンパイラに実装された場合の、プログラマ指定による配列同士の整列関係を含んだテンプレートへの整列処理、計算実行プロセッサ選択を、図13に示されるHPFプログラム13を例に詳細に説明する。
【0107】
図13を参照すると、HPFプログラム13の文133において、HPFのALIGN指示文(文133)により、配列Aが配列Bに整列されている。
【0108】
HPFコンパイラにおいて、図6のステップS10に、HPFプログラム13中の配列Aが、選別処理対象配列として入力された場合、HPFプログラムの文133の情報から、この実施例では、配列Aを、形状(100)ではなく、形状(200)のテンプレートに、図14に示すように整列させる。
【0109】
図14に示すように、テンプレートTは、配列Bの形状、分散形式と同じものを持つものであり、配列BもこのテンプレートTに整列される。
【0110】
従って、配列A、BのテンプレートTへの整列は、図13に示すHPFプログラムの文133の配列Aから配列Bへの整列関係を満たすものとなる。
【0111】
図6のステップS13において、選別処理対象配列を情報テーブル4の対応する整列先テンプレート(行)、配列の添え字形式(列)の部分に登録する処理が行われるが、本発明がHPFコンパイラに実装された場合、図14に示すように、配列からテンプレートへの整列関係があるため、配列とテンプレートの添え字は必ずしも一致しない。
【0112】
例えば図14では、配列A(i)は、テンプレートT(2*i)に整列しており、添え字はiと2*iで形式が一致していない。
【0113】
このような場合、選別処理対象配列の情報テーブル4への登録は、整列先テンプレート(行)と、その整列先テンプレートの添え字形式(列)を参照して行う。具体例を挙げると、HPFプログラムの文136で開始されるループが処理対象であり、文137中の配列A(i)が選別処理対象の配列として配列選別手段342のステップS13に入力された場合、配列A(i)は、情報テーブル4の(テンプレートT,添え字形式(i))のブロックではなく、(テンプレートT,添え字形式(2*i))のブロックに登録される。
【0114】
このようにして登録された情報テーブル4を基に、プロセッサ選択手段341のステップS15(図5)を実行することで、プログラマ指定による配列同士の整列関係も含んだ上での、プロセッサ間通信量が最も低い計算実行プロセッサを選択できる。
【0115】
【発明の効果】
以上説明したように、本発明によれば、コンパイル時に、最適な計算実行プロセッサを選択することにより、実行時のプロセッサ間通信量を削減することができる、という効果を奏する。プロセッサ間通信は、並列プログラムの実行性能を劣化させる大きな要因のうちの1つであり、これを減少させることは並列プログラムの実行性能向上につながる。さらに、並列化コンパイラが自動的に実行時のプロセッサ間通信を削減する本発明を実施することで、プログラマの並列プログラミングの負担を軽減することができる、という利点、効果も有する。
【図面の簡単な説明】
【図1】本発明の原理を説明するための図であり、DOループのプログラムの一例を示す図である。
【図2】本発明の原理を説明するための図であり、プロセッサ間通信を説明するための図である。
【図3】本発明の原理を説明するための図であり、プロセッサ間通信を説明するための図である。
【図4】本発明の一実施例の構成を示す図である。
【図5】本発明の一実施例のプロセッサ選択手段の処理手順を示す流れ図である。
【図6】本発明の一実施例の配列選別手段の処理手順を示す流れ図である。
【図7】本発明の一実施例を説明するためのHPFプログラムの例を示す図である。
【図8】本発明の一実施例における配列とテンプレートを説明するための図である。
【図9】本発明の一実施例における配列とテンプレートを説明するための図である。
【図10】本発明の一実施例における配列とテンプレートの対応を説明するための図である。
【図11】本発明の一実施例における情報テーブルの一例を説明するための図である。
【図12】本発明の一実施例における情報テーブル(図11)のブロック1〜6の各通信量を説明するための図である。
【図13】本発明の一実施例を説明するためのHPFプログラムの例を示す図である。
【図14】本発明の一実施例における配列とテンプレートを説明するための図である。
【符号の説明】
1 原始プログラム
2 データ処理装置
3 並列化コンパイラ
4 情報テーブル
31 字句解析部
32 構文解析部
33 意味解析部
34 最適化部
35 通信生成部
36 目的コード生成部
341 プロセッサ選択手段
342 配列選別手段

Claims (26)

  1. 並列化コンパイラの最適化処理が、
    並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、少なくとも前記配列の形状、及び前記配列の添え字の形式に基づき、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、前記配列に合うテンプレートが存在しない場合には、前記配列の形状に合うテンプレートを作成し、前記配列を前記テンプレートに整列することで、前記情報テーブルの該当するブロックに前記配列を登録するステップと、
    作成された前記情報テーブルに、該処理対象ループ内の文に含まれる前記配列が登録されている場合、前記情報テーブルの分割されたブロック毎の通信量を計算するステップと、
    前記情報テーブルのブロック毎の通信量に基づき、計算実行プロセッサを決定するステップと、
    を含み、
    分散メモリ型並列マシンを構成する複数のプロセッサの実行時のプロセッサ間通信を削減する、ことを特徴とする、並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  2. 前記処理対象のループが内側ループを含む場合、該内側ループを処理対象とし、その計算実行プロセッサを、処理対象の内側ループの外側にある並列化可能ループの計算実行プロセッサに限定する、ことを特徴とする請求項1記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  3. 前記ループに含まれる配列に関する情報テーブルを作成するにあたり、前記配列の形状、前記配列の添え字の形式、及び、分散メモリ上への分散状態から前記配列に関する情報テーブルを作成し、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状と同じ分散形式をもつテンプレートを作成する、ことを特徴とする請求項1記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  4. 選別処理対象の配列を、前記情報テーブルの対応する整列先のテンプレートである行と、配列の添え字形式に対応する列のブロックに登録する、ことを特徴とする請求項1に記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  5. 前記並列化コンパイラは、同一テンプレートに整列するデータを所有するプロセッサ間では、オーバラップシフト通信が適用できるか否かを判定し、その際、通信対象となる配列のデータが全ての次元において各プロセッサ上にその要素の並びを保ったまま分散されているか否かを判定し、
    要素の並びが保たれていない場合には、プロセスが一列に並んでいるものと想定して、各プロセスが一斉に同一方向に一定距離だけ離れたプロセスにデータを送信する形式の通信である前記オーバラップシフト通信の適用外とし、分散メモリ上に分散されているデータから、計算に必要な部分のデータをコピーし送信する形式の通信であるコピーセクション通信を発生させる、ことを特徴とする請求項1記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  6. 前記配列がその全次元において要素の並びを保ったままプロセッサ上に配置されている場合、処理対象ループのDO変数をiとして、
    一方のプロセッサ上にあるデータの添え字の形式がn*i+m1(n:自然数、m1:整数)であり、
    他方のプロセッサ上にあるデータの添え字の形式がn*i+m2(n:自然数、m2:整数)である関係がある場合、これら2つのプロセッサ間の通信にはオーバラップシフト通信が適用され、
    前記配列の添え字の形式が、前記関係を満たさない場合は、コピーセクション通信を発生させる、ことを特徴とする請求項5記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  7. 異なるテンプレートに整列する配列を所有するプロセッサ間では、オーバラップシフト通信は使用せず、コピーセクション通信のみ発生させる、ことを特徴とする請求項5記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  8. 前記配列の整列指示文で指定されている場合、前記配列に対応するテンプレートが存在しない場合、前記配列とは異なる形状のテンプレートに整列する、ことを特徴とする請求項1記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  9. 前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する、ことを特徴とする請求項1記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  10. 前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小値をとるブロックが複数存在する場合、該複数のブロックの中の一のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する、ことを特徴とする請求項1記載の並列化コンパイラの最適化処理のプロセッサ間通信削減方法。
  11. 原始プログラムを読み込み字句解析を行う字句解析部と、構文解析を行う構文解析部と、最適化処理を行う最適化部と、を少なくとも備えた並列化コンパイラ装置において、
    前記最適化部が、並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、少なくとも前記配列の形状、及び前記配列の添え字の形式に基づき、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状をもつテンプレートを作成し、前記配列を前記テンプレートに整列することで、前記情報テーブルの該当するブロックに前記配列を登録する配列選別手段と、
    前記情報テーブルに基づき計算実行プロセッサを選択する手段であって、作成された前記情報テーブルに、該処理対象ループ内の文に含まれる前記配列が登録されている場合、前記情報テーブルの分割されたブロック毎の通信量を計算する第1の手段と、
    前記情報テーブルのブロック毎の通信量に基づき、計算実行プロセッサを決定する第2の手段と、を含むプロセッサ選択手段と、
    を備えている、ことを特徴とする並列化コンパイラ装置。
  12. 前記プロセッサ選択手段において、前記処理対象のループが内側ループを含む場合、該内側ループを処理対象とし、その計算実行プロセッサを、処理対象の内側ループの外側にある並列化可能ループの計算実行プロセッサに限定する、ことを特徴とする請求項11記載の並列化コンパイラ装置。
  13. 前記並列化コンパイラ装置が、分散メモリ構成の並列マシンを構成するプロセッサ用の目的コードを生成し、
    前記配列選別手段において、前記ループに含まれる配列に関する情報テーブルを作成するにあたり、前記配列の形状、前記配列の添え字の形式、及び、分散メモリ上への分散状態から前記配列に関する情報テーブルを作成し、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状と、同じ分散形式をもつテンプレートを作成する、ことを特徴とする請求項11記載の並列化コンパイラ装置。
  14. 前記配列選別手段において、選別処理対象の配列を、前記情報テーブルの対応する整列先のテンプレートである行と、配列の添え字形式に対応する列の部分に登録する、ことを特徴とする請求項11記載の並列化コンパイラ装置。
  15. 同一テンプレートに整列するデータを所有するプロセッサ間では、オーバラップシフト通信が適用できるか否かを判定し、通信対象となる配列のデータが全ての次元において各プロセッサ上にその要素の並びを保ったまま分散されているか否かを判定し、要素の並びが保たれていない場合には、プロセスが一列に並んでいるものと想定し、各プロセスが一斉に同一方向に一定距離だけ離れたプロセスにデータを送信する形式の通信である前記オーバラップシフト通信の適用外とし、分散メモリ上に分散されているデータから、計算に必要な部分のデータをコピーし送信する形式の通信であるコピーセクション通信を発生させる手段を備えている、ことを特徴とする請求項11記載の並列化コンパイラ装置。
  16. 配列がその全次元において要素の並びを保ったままプロセッサ上に配置されている場合、処理対象ループのDO変数をiとし、一方のプロセッサ上にあるデータの添え字の形式がn*i+m1(n:自然数、m1:整数)であり、他方のプロセッサ上にあるデータの添え字の形式がn*i+m2(n:自然数、m2:整数)の関係がある場合、2つのプロセッサ間の通信にはオーバラップシフト通信が適用され、前記配列の添え字の形式が、前記関係を満たさない場合は、コピーセクション通信を発生させる、ことを特徴とする請求項15記載の並列化コンパイラ装置。
  17. 異なるテンプレートに整列する配列を所有するプロセッサ間では、オーバラップシフト通信は使用せず、コピーセクション通信のみ発生させる、ことを特徴とする請求項15記載の並列化コンパイラ装置。
  18. 配列整列指示文によってプログラム中で指定されている場合、前記配列に合うテンプレートが存在しない場合において、前記配列選別手段において、前記配列とは異なる形状のテンプレートに整列する、ことを特徴とする請求項11記載の並列化コンパイラ装置。
  19. 前記プロセッサ選択手段は、前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する、ことを特徴とする請求項11記載の並列化コンパイラ装置。
  20. 前記プロセッサ選択手段は、前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小値をとるブロックが複数存在する場合、該複数のブロックの中の一のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する、ことを特徴とする請求項11記載の並列化コンパイラ装置。
  21. 並列化コンパイラの最適化処理を実行するコンピュータのプログラムにおいて、
    (a)並列化が可能であると判定されたループを処理対象とし、該処理対象ループ内の文に含まれる配列の選別を行い、少なくとも前記配列の形状、及び前記配列の添え字の形式に基づき、該ループに含まれる配列に関する情報テーブルを作成し、その際、該配列に合うテンプレートがあるか否かチェックし、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状をもつテンプレートを作成し、前記配列を前記テンプレートに整列することで、前記情報テーブルの該当するブロックに前記配列を登録する処理と、
    (b)作成された前記情報テーブルに、該処理対象ループ内の文に含まれる前記配列が登録されている場合、前記情報テーブルの分割されたブロック毎の通信量を計算する処理と、
    (c)前記情報テーブルのブロック毎の通信量から、計算実行プロセッサを決定する処理と、
    の前記(a)乃至(c)の各処理を、前記コンピュータに実行させるためのプログラム。
  22. 請求項21記載のプログラムにおいて、
    前記処理対象のループが内側ループを含む場合、該内側ループを処理対象とし、その計算実行プロセッサを、処理対象の内側ループの外側にある並列化可能ループの計算実行プロセッサに限定する処理を、前記コンピュータに実行させるためのプログラム。
  23. 請求項21記載のプログラムにおいて、
    前記並列化コンパイラが、分散メモリ構成の並列マシンを構成するプロセッサ用の目的コードを生成し、
    前記ループに含まれる配列に関する情報テーブルを作成するにあたり、前記配列の形状、前記配列の添え字の形式、及び、分散メモリ上への分散状態から前記配列に関する情報テーブルを作成し、前記配列に合うテンプレートが存在しない場合には、前記配列と同じ形状と、同じ分散形式をもつテンプレートを作成する処理を、前記コンピュータに実行させるためのプログラム。
  24. 請求項21記載のプログラムにおいて、
    選別処理対象の配列を、前記情報テーブルの対応する整列先のテンプレートである行と、配列の添え字形式に対応する列の部分に登録する処理を、前記コンピュータに実行させるためのプログラム。
  25. 請求項21記載のプログラムにおいて、
    前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する処理を、前記コンピュータに実行させるためのプログラム。
  26. 請求項21記載のプログラムにおいて、
    前記情報テーブルのブロック毎の通信量の計算結果より、ブロック間の通信量が最小値をとるブロックが複数存在する場合、該複数のブロックの中の一のブロック中の配列を有するプロセッサを前記計算実行プロセッサとして選択する処理を、前記コンピュータに実行させるためのプログラム。
JP2001199321A 2001-06-29 2001-06-29 プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム Expired - Fee Related JP3757825B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001199321A JP3757825B2 (ja) 2001-06-29 2001-06-29 プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001199321A JP3757825B2 (ja) 2001-06-29 2001-06-29 プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム

Publications (2)

Publication Number Publication Date
JP2003015883A JP2003015883A (ja) 2003-01-17
JP3757825B2 true JP3757825B2 (ja) 2006-03-22

Family

ID=19036627

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001199321A Expired - Fee Related JP3757825B2 (ja) 2001-06-29 2001-06-29 プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム

Country Status (1)

Country Link
JP (1) JP3757825B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5224498B2 (ja) * 2007-02-28 2013-07-03 学校法人早稲田大学 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
JP5531420B2 (ja) 2009-02-27 2014-06-25 日本電気株式会社 プロセス割当システム、プロセス割当方法、プロセス割当プログラム
JP2014137732A (ja) * 2013-01-17 2014-07-28 Fujitsu Ltd 情報処理システム及び情報処理システムの制御方法

Also Published As

Publication number Publication date
JP2003015883A (ja) 2003-01-17

Similar Documents

Publication Publication Date Title
US5802375A (en) Outer loop vectorization
US8527971B2 (en) Parallel program generation method
JP2921190B2 (ja) 並列実行方式
EP2687981B1 (en) Automated compiler specialisation for global optimisation
Mendis et al. goSLP: globally optimized superword level parallelism framework
JPH0814817B2 (ja) 自動ベクトル化方法
JPH06507990A (ja) コンピュータのための最適化コンパイラ
CN112269581B (zh) 一种可重构芯片的内存耦合编译方法及系统
Kessler Pattern‐Driven Automatic Parallelization
US12039305B2 (en) Method for compilation, electronic device and storage medium
Nelson et al. Reliable generation of high-performance matrix algebra
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
Lueh et al. C-for-metal: High performance simd programming on intel gpus
Kennedy et al. Analysis and transformation in an interactive parallel programming tool
JP3757825B2 (ja) プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム
Silber-Chaussumier et al. Generating data transfers for distributed GPU parallel programs
Gupta et al. PTRAN II-a compiler for High Performance Fortran
Zhao et al. AutoGraph: Optimizing DNN computation graph for parallel GPU kernel execution
Foley et al. Efficient partitioning of fragment shaders for multiple-output hardware
JPH04293150A (ja) コンパイル方法
RAS GRAPHITE-OpenCL: Generate OpenCL code from parallel loops
Ngo Parallel loop transformation techniques for vector-based multiprocessor systems
Bozkus et al. Compiling hpf for distributed memory mimd computers
Haine et al. Exploring and evaluating array layout restructuring for SIMDization
JP2956591B2 (ja) ループ外への条件付き飛び出しがあるループの並列化方法及び装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050725

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050802

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051003

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20051206

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051219

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees