JP3233467B2 - プログラム変換方法および装置 - Google Patents

プログラム変換方法および装置

Info

Publication number
JP3233467B2
JP3233467B2 JP33346092A JP33346092A JP3233467B2 JP 3233467 B2 JP3233467 B2 JP 3233467B2 JP 33346092 A JP33346092 A JP 33346092A JP 33346092 A JP33346092 A JP 33346092A JP 3233467 B2 JP3233467 B2 JP 3233467B2
Authority
JP
Japan
Prior art keywords
program
data
variable
parallel computer
memory type
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
JP33346092A
Other languages
English (en)
Other versions
JPH06161776A (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.)
Hitachi Ltd
Hitachi Solutions Technology Ltd
Original Assignee
Hitachi Ltd
Hitachi ULSI Systems Co Ltd
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 Hitachi Ltd, Hitachi ULSI Systems Co Ltd filed Critical Hitachi Ltd
Priority to JP33346092A priority Critical patent/JP3233467B2/ja
Publication of JPH06161776A publication Critical patent/JPH06161776A/ja
Application granted granted Critical
Publication of JP3233467B2 publication Critical patent/JP3233467B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、逐次処理計算機または
共有メモリ型並列計算機用に記述されたプログラムを、
分散メモリ型の並列計算機上で実行可能なプログラムに
変換するプログラム変換方法および装置に関し、特に並
列化コンパイラや並列化トランスレータに適用して好適
なプログラム変換方法および装置に関する。
【0002】
【従来の技術】複数のプロセッサから構成される計算機
システムで、各プロセッサごとにメモリが備えられてい
るものがある。これは、分散メモリ型並列計算機などと
呼ばれている。また、各プロセッサに備えられたメモリ
は、ローカルメモリなどと呼ばれている。
【0003】分散メモリ型並列計算機で処理を実行する
には、使用するデータを各プロセッサのローカルメモリ
に分割して割り付け、それらのデータに対する処理を各
プロセッサで並列に実行する。例えば、科学技術計算な
どに現れる大規模配列の処理方式としては、配列の各要
素を各プロセッサに分割して配置し、要素ごとの処理を
並列に行うものが、考えられている。
【0004】このとき、あるプロセッサから他のプロセ
ッサに配置された配列要素を参照するには、プロセッサ
間通信によって、配列要素の値を転送しなければならな
い。また、転送のタイミングを合わせるため、プロセッ
サ間で同期をとることも必要になる。
【0005】分散メモリ型並列計算機用のプログラム
は、このようなデータの分割配置、プロセッサ間の通信
および同期などの処理を含んだ複雑なものとなるため、
これを人手で作成するのは非常に困難である。そこで、
逐次処理計算機用に記述されたプログラムを自動的に変
換して並列計算機用のプログラムを生成するという研究
が、多数行なわれている。
【0006】これらの研究の多くにおいては、プロセッ
サ間通信や同期に関する処理プログラムは自動的に生成
するが、データ分割配置については完全に自動化されて
おらず、人手による指示を必要としていた。一方、最近
では、人手による指示がなくても、元のプログラムを解
析してデータ分割配置を自動的に決定しようという研究
も現れている。
【0007】例えば、Gupta and Banerjee, "Demonstra
tion of Automatic Data Partitioning Techniques for
Parallelizing Compilers on Multicomputers", IEEE
Transactions on Parallel and Distributed Systems,
Vol.3, No.2, pp.179-193, March 1992 では、元のプロ
グラムの各ループごとにデータ分割についての望ましい
条件を求め、プログラム全体としてそれらの条件ができ
るだけ満たされるように、データ分割を決定する方法が
提案されている。以下、この方法の概要を説明する。
【0008】例えば、次のプログラムがあったとする。 do 10 i = 1,1000 10 a(i,c1) = a(i,c1) + m*b(c2,i) do 20 i = 1,1000 do 20 j = 1,i 20 s = s + a(i,j)
【0009】このプログラムは2つのループを含んでい
る。最初のループは、変数i を1から1000まで変化させ
ながら、番号10の式a(i,c1) = a(i,c1) + m*b(c2,i) を
1000回実行するループである。2番目のループは、二重
ループになっており、外側のループで変数i を1から10
00まで変化させ、内側のループで変数j を1から変数i
の値まで変化させて、番号20の式s = s + a(i,j)を繰返
し実行するループである。ここで、c1,c2,m は定数であ
る。
【0010】上記のプログラムを並列計算機用のプログ
ラムとする際に、配列a,b の各要素をどのように各プロ
セッサのローカルメモリに分割して割り付けるかについ
ては下記のような条件を考慮するとよい。
【0011】まず、最初のループについての望ましい条
件は、プロセッサ間通信が不要となるように、変数i の
値のそれぞれについてa(i,c1) とb(c2,i) が同一プロセ
ッサに配置されることである。例えば、a(1,c1) とb(c
2,1) とが同一プロセッサに配置され、a(2,c1) とb(c2,
2) とが同一プロセッサに配置され、…というようにす
るとよい。
【0012】また2番目の二重ループについての望まし
い条件は、内側ループのインデックスj の範囲が外側ル
ープのインデックスi に依存していることを考慮して、
各プロセッサで負荷が均等になるように、配列a の要素
を1 個ずつ巡回的に各プロセッサに配置することであ
る。例えば、プロセッサが4つあったとすると、a(1,c
1) を第1番目のプロセッサに、a(2,c1) を第2番目の
プロセッサに、a(3,c1) を第3番目のプロセッサに、a
(4,c1) を第4番目のプロセッサに、a(5,c1) を再び第
1番目のプロセッサに、…というように巡回的に分割し
て配置する。
【0013】これらの条件を合わせると、全体として
は、配列a を行方向(1次元目) で巡回的に分割し、配列
b を列方向で巡回的に分割するのが良いという結果にな
る。
【0014】上の例では各ループについての条件を両方
とも満たすことができたが、一般には必ずしも全ての条
件を満たすことができるとは限らない。上記文献では,
その場合には、条件が満たされなかった場合のプログラ
ム全体の実行時間の増加を見積り、その見積りができる
だけ小さくなるように分割を決定するという方法が提案
されている。
【0015】
【発明が解決しようとする課題】ところで、上記のデー
タ分割決定方法では、元のプログラムが複数のファイル
に分かれている場合に、以下のような問題が生じる。す
なわち、並列化コンパイラがプログラムを変換するとき
は、通常、ファイルごとに変換するが、あるファイルの
プログラムと別のファイルのプログラムとで、決定され
たデータ分割パターンが異なる可能性がある。この場
合、異なるデータ分割に基づいて変換されたプログラム
を結合すると、データ分割のつじつまが合わず、誤った
プログラムになってしまう。
【0016】また、これを防ぐために、全部のファイル
をまとめて変換する方式を取ると、ファイル間にまたが
る解析の量が増大し、全プログラムのサイズが非常に大
きい場合には、変換に要する時間が膨大になってしまう
という欠点が生じる。さらにこの場合、1 個のファイル
だけを修正したときも、全部のファイルを再変換しなけ
ればならないという欠点も生じる。
【0017】本発明の目的は、元のプログラムが複数の
ファイルに分かれている場合でも、データ分割を自動的
に決定し、かつ、各ファイルを別々に変換してもそれら
を結合したプログラムが正しく動作するような、プログ
ラム変換方法および装置を提供することにある。
【0018】
【課題を解決するための手段】上記目的を達成するた
め、本発明は、逐次処理プログラムまたは共有メモリ型
並列計算機用プログラムを分散メモリ型並列計算機用プ
ログラムに変換するプログラム変換方法において、下位
手続き呼び出しの実引数となっているデータに対して、
該データの分割配置情報を格納する変数を生成するステ
ップと、該下位手続き呼び出しの実引数として該変数を
追加するステップとを設けたことを特徴とする。
【0019】また、逐次処理プログラムまたは共有メモ
リ型並列計算機用プログラムを分散メモリ型並列計算機
用プログラムに変換するプログラム変換方法において、
自手続きの仮引数となっているデータに対して、該デー
タの分割配置情報を格納する変数を生成するステップ
と、自手続きの仮引数として該変数を追加するステップ
とを設けたことを特徴とする。
【0020】さらに、本発明は、逐次処理プログラムま
たは共有メモリ型並列計算機用プログラムを分散メモリ
型並列計算機用プログラムに変換するプログラム変換方
法において、変換対象のプログラム内のデータ参照パタ
ーンを解析してデータの分割配置を決定するステップ
と、下位手続き呼び出しの実引数となっているデータに
対して、該データの分割配置情報を格納する変数を生成
するステップと、下位手続き呼び出しの実引数として該
変数を追加するステップと、該手続き呼び出しの後に、
該変数を調べて該データを再配置する文を挿入するステ
ップと、自手続きの仮引数となっているデータに対し
て、該データの分割配置情報を格納する変数を生成する
ステップと、自手続きの仮引数として該変数を追加する
ステップと、自手続きの先頭に該変数を調べて該データ
を再配置する文を挿入するステップとを設けたことを特
徴とする。
【0021】外部変数であるデータに対して、該データ
の分割配置情報を格納する変数を生成するようにしても
よい。また、分割配置情報用変数は、外部変数として宣
言文に追加するようにしてもよい。分割配置用変数は、
外部変数または手続きの引数となっている配列データの
サイズを拡大することによって生成してもよい。
【0022】さらに、本発明は、逐次処理プログラムま
たは共有メモリ型並列計算機用プログラムを分散メモリ
型並列計算機用プログラムに変換するプログラム変換方
法において、変換対象のプログラム内のデータ参照パタ
ーンを解析してデータの分割配置を決定するステップ
と、下位手続き呼び出しの位置を検出するステップと、
該下位手続き呼び出しの直前に、該データを予め決めら
れた分割配置に再配置する文を挿入するステップと、上
位手続きへのリターン位置を検出するステップと、該リ
ターン位置の直前に、該データを予め決められた分割配
置に再配置する文を挿入するステップとを設けたことを
特徴とする。
【0023】データを再配置する文は、データを送信す
る文とデータを受信する文から成り、かつそれらの文を
プログラム内の別々の位置に挿入するようにしてもよ
い。この場合、変換前プログラム内の該データを参照し
ない区間を検出して、該区間の先頭に該データを送信す
る文を挿入し、該区間の最後に該データを受信する文を
挿入するようにするとよい。
【0024】また、本発明は、逐次処理プログラムまた
は共有メモリ型並列計算機用プログラムを分散メモリ型
並列計算機用プログラムに変換するプログラム変換装置
において、下位手続き呼び出しの実引数となっているデ
ータに対して、該データの分割配置情報を格納する変数
を生成する手段と、該下位手続き呼び出しの実引数とし
て該変数を追加する手段とを備えたことを特徴とする。
【0025】さらに、逐次処理プログラムまたは共有メ
モリ型並列計算機用プログラムを分散メモリ型並列計算
機用プログラムに変換するプログラム変換装置におい
て、自手続きの仮引数となっているデータに対して、該
データの分割配置情報を格納する変数を生成する手段
と、自手続きの仮引数として該変数を追加する手段とを
備えたことを特徴とする。
【0026】
【作用】手続きの引数となっているデータに対して分割
配置情報を付随させれば、各手続き内において引き渡さ
れたデータの配置を知ることができるから、それを元に
手続き内でデータを適切に再配置することができる。し
たがって、複数のファイルに分かれた手続きを別々に変
換したときでも、それらの手続きを結合したプログラム
は正しく動作する。
【0027】また、下位手続き呼び出し位置、および手
続きから戻る直前に、データの分割配置を予め決められ
た分割配置に再配置すれば、手続き間でのデータ分割配
置の整合性は保証される。したがって、この場合も、そ
れらの手続きを結合したプログラムは正しく動作する。
【0028】
【実施例】以下、図面を用いて本発明の実施例を説明す
る。
【0029】図1 は、本発明の一実施例に係るプログラ
ム変換方法の手順を示すフローチャートである。また図
2 は、図1 のプログラム変換方法の手順を実行する並列
化コンパイラの構成を表す。
【0030】図1,2 を参照してプログラム変換について
説明する前に、本実施例のプログラム変換方法の適用対
象について説明する。
【0031】図3 は、本実施例の適用対象である分散メ
モリ型並列計算機の構成の一例である。この並列計算機
は、本実施例のプログラム変換方法によって変換された
プログラムを実行する。この並列計算機は、複数のプロ
セッサ200 から20n 、各プロセッサに付随するローカル
メモリ210 から21n 、そしてそれらを結合する相互結合
ネットワーク22から構成される。各ローカルメモリ上の
データは、それが付随するプロセッサからは直接参照で
きるが、他のプロセッサからは直接参照することができ
ない。あるプロセッサから他プロセッサに付随するデー
タを参照するためには、相互結合ネットワーク22を通じ
て、参照したいデータを転送(送信および受信)する必
要がある。
【0032】各プロセッサには、0 から始まる番号が付
けられているものとする。すなわち、プロセッサ200 は
0 番、プロセッサ201 は1 番、・・・のように番号付け
られているものとする。
【0033】図4 および図5 は、本実施例のプログラム
変換方法によって変換されるプログラムの例300 および
301 を示す。これらのプログラム300 および301 は、そ
れぞれ上位手続きと下位手続きになっている。すなわ
ち、図4 の上位手続きプログラム300 内の文、 call sub(a,b,c) によって、図5 の下位手続きプログラム301 が呼び出さ
れている。
【0034】手続き呼び出しの引数となっているデータ
a,b,c は、各プログラム300 および301 内の宣言文、 real a(100,100),b(100,100),c(100,100) によって、各次元について100 個の要素を持つ2 次元の
配列データであることが宣言されている。
【0035】本実施例および以後の実施例において、上
位手続きプログラム300 と下位手続きプログラム301
は、異なるファイルに格納されているものとする。すな
わち、本実施例のプログラム変換方法による変換(およ
びコンパイル)はファイル毎に別々に行われるものとす
る。各ファイルのプログラムを独立に変換した後、これ
らを結合して実行モジュールを作成し、それを図3 の並
列計算機で実行させることとなる。なお、本発明のプロ
グラム変換方法は、両方のプログラム300 および301 が
同じファイル内に格納されている場合にも、同様に適用
可能である。
【0036】また、本実施例および以後の実施例では、
変換前プログラムの例として図4,5のような逐次処理プ
ログラムを用いるが、変換前プログラムが共有メモリ型
並列計算機用プログラムである場合でも本発明は同様に
適用することができる。
【0037】図6 は、配列の分割配置パターンの例であ
る。2 次元配列を長方形で表し、その上で各プロセッサ
に割り付けられる領域を示している。2 次元配列の第1
次元を行方向、第2 次元を列方向にとっている。ここで
はプロセッサ数を4 台としている。P0,P1,... は、それ
ぞれ、プロセッサ0 番、プロセッサ1 番、・・・に割り
付けられた配列の領域を示す。
【0038】図6(a)の分割配置は、配列要素の1 次元目
のインデックスの値によって分割したものである。例え
ば、図4,5 の配列a,b,c のように各次元について100 個
の要素を持つ2 次元の配列データであれば、1 次元目の
インデックスの値が1 から25までの要素はプロセッサ0
番、26から50までの要素はプロセッサ1 番、・・・のよ
うに割り付ける。このような分割配置を行分割と呼ぶ。
【0039】図6(b)の分割配置は、配列要素の2 次元目
のインデックスの値によって分割している。例えば、図
4,5 の配列データであれば、2 次元目のインデックスの
値が1 から25までの要素はプロセッサ0 番、26から50ま
での要素はプロセッサ1 番、・・・のように割り付け
る。このような分割配置を列分割と呼ぶ。
【0040】本実施例および以後の実施例では、簡単の
ために、分割配置の対象とするデータは2 次元配列のみ
とし、分割配置パターンは行分割と列分割のみとする。
ただし、本発明のプログラム変換方法は、これ以外の様
々な分割配置パターンを許す場合についても、同様に適
用可能である。
【0041】次に、図1 のフローチャートを参照して、
本実施例のプログラム変換方法の手順について詳しく説
明する。ここでは、図4,5 に示したプログラム300,301
を変換する例を説明する。
【0042】まず、図4 のプログラム300 を変換する手
順を説明する。ステップ100 で、変換前のプログラム30
0 を読み込む。次に、ステップ101 でプログラム300 内
のループにおける配列データの参照パターンを解析し
て、参照パターン表を生成する。
【0043】図7(a)は、ステップ101 でプログラム300
を解析して得た参照パターン表400を示す。参照パター
ン表には、プログラム中のループ内で参照される配列要
素の添字のパターンが登録される。参照パターン表は、
ループ番号フィールド4000、配列名フィールド4001、第
1 次元添字フィールド4002、および第2 次元添字フィー
ルド4003の各フィールドから構成される。図7(a)から分
かるように、参照パターン表400 には、図4 のプログラ
ム300 のループ10に現れる配列要素a(i,j),b(j,i+1),b
(j,i),c(j,i) 、およびループ20に現れる配列要素a(i,
j),b(j,i+1),c(j,i-1),c(j,i) が登録されている。
【0044】再び図1を参照して、ステップ102 では、
参照パターン表400 に基づいて、各ループに適した配列
の分割パターンを決定し配列分割表を作成する。
【0045】参照パターン表に基づいて配列の分割パタ
ーンを決定する方法は、従来より用いられている方法を
用いればよい。プログラム300 の例では、ループ10で配
列要素b(j,i+1)とb(j,i)が同じプロセッサに配置される
ように、配列b を行分割にする。また、a(i,j)がb(j,i)
と同じプロセッサに配置されるように、配列a を列分割
にする。さらに、c(j,i)がb(j,i)と同じプロセッサに配
置されるように、配列c を行分割にする。ループ20につ
いても同様にして分割パターンが決定される。このよう
なルールに基づいて、配列の分割パターンを決定する。
【0046】図8(a)は、図7(a)の参照パターン表400 に
基づいて、上述したように決定された分割パターンを表
す配列分割表410 である。配列分割表には、プログラム
の各ループにおける配列の分割パターンが登録される。
配列分割表は、ループ番号フィールド4100、配列名フィ
ールド4101、および分割パターンフィールド4102から構
成される。図8(a)から分かるように、配列分割表410 に
は、図4 のプログラム300 のループ10およびループ20に
おける配列a,b,c の分割パターンが登録されている。い
ずれのループについても、配列a は列分割、b,c は行分
割とすることが登録されている。
【0047】再び図1を参照して、ステップ103 では、
プログラムを走査して下位手続き呼び出しがあるかどう
かを検出する。下位手続き呼び出しがある場合はステッ
プ104 に進み、ない場合はステップ108 に進む。プログ
ラム300 では下位手続き呼び出しがあるから、ステップ
104 に進むこととなる。
【0048】ステップ104 で、検出された下位手続き呼
び出しの実引数の中に配列データがあるかどうかを判定
する。もしあればステップ105 に進み、なければステッ
プ108 に進む。ステップ105 で、下位手続き呼び出しの
実引数となっている配列データに対して、その配列の分
割パターン情報を格納する変数を新たに生成して、その
変数の宣言文をプログラムに挿入する。変数名は、配列
名に _dist という文字列を付け加えたものとし、変数
の型は整数型とする。
【0049】図3 のプログラム300 では、配列a,b,c が
下位手続き呼び出し call sub(a,b,c) の実引数になっているので、ステップ104 からステップ
105 に進み、変数 a_dist,b_dist,c_dist を生成して、
これらの変数の宣言文 integer a_dist,b_dist,c_dist をプログラム中に挿入する。この変数は、定数値row ま
たはcolmのいずれかの値を取り、それぞれの値は対応す
る配列の分割パターンが行分割か列分割かを表す。row
およびcolmの具体的な値は、それぞれ、0 および1 とす
る。
【0050】図9 は、図3 のプログラム300 を変換した
結果である変換後上位手続きプログラム310 を示す。配
列a,b,c の宣言文 real a(100,100),b(100,100),c(100,100) の後に、新たに生成した変数の宣言文 integer a_dist,b_dist,c_dist が挿入されている。
【0051】ステップ105 の後、ステップ106 で、生成
した分割情報用変数を、下位手続き呼び出しの実引数と
して追加する。追加する位置は、それぞれ対応する配列
引数の直後とする。プログラム300 では、上記の下位手
続き呼び出し call sub(a,b,c) に対してこの処理が行なわれ、図9 の変換後上位手続き
プログラム310 内に示されているように、 call sub(a,a_dist,b,b_dist,c,c_dist) と変換される。
【0052】次に、ステップ107 で、下位手続き呼び出
しの直後に、分割情報用変数の値を調べてそれが次のル
ープの分割パターンと一致しなければ配列データを再配
置する文を挿入する。例えば図4 のプログラム300 内の
ループ20における配列a の分割パターンは、図8(a)の配
列分割表410 に示されるように、列分割と決定されてい
る。そこで、図9 の変換後上位手続きプログラム310 内
に示されるように、下位手続き呼び出しの直後に、 if(a_dist ≠colm) then call _transpose(a) a_dist = colm endif という文を挿入する。ここで_transpose(a) は、配列a
の分割パターンの行と列を転置して再配置するライブラ
リルーチンである。
【0053】ここで挿入した上記の文は、配列a が列分
割になっているかどうかを判定して、もしなっていなけ
れば列分割に再配置し、また分割情報用変数a_distの値
を列分割を表す定数colmに設定するという意味を持って
いる。すなわち、プログラム300 内のループ10では配列
a は列分割で処理されるが、その配列a を引数として下
位手続きを呼び出すと、その下位手続きの中で配列a の
分割パターンが変更になる可能性がある。そのため、ル
ープ20を実行する際に、配列の分割パターンが望ましい
形になっていることが保証されなくなってしまう。そこ
で、上記のような文を挿入して、配列が当該ファイルの
プログラム内で望ましい分割パターンになっているかど
うかをチェックし、そうでなければ分割パターンを望ま
しい形に合わせるようにしている。
【0054】図9 に示すように、配列b,c についても同
様の文を挿入する。
【0055】再び図1を参照して、ステップ108 では、
自手続きがメインプログラムすなわち最上位手続きかど
うか判別する。メインプログラムである場合はステップ
113に進み、そうでない場合はステップ109 に進む。現
在処理しているプログラム300 はメインプログラムであ
るから、ステップ113 に進むこととなる。
【0056】ステップ113 では、プログラム並列化のた
めのその他の変換処理を実行する。その他の変換処理に
は、プロセッサ間の同期文の挿入、およびループのイン
デックス範囲の変換などが含まれる。これらの処理の詳
細は通常の並列化変換方法と同様なので、ここでは特に
述べない。次に、ステップ114 で変換後のプログラム31
0 を外部記憶に出力し、処理を終了する。
【0057】以上により、図4 のプログラム300 の変換
が終了した。図9 が、外部記憶に出力された変換結果で
ある変換後上位プログラム310 である。
【0058】次に、再び図1を参照して、図5 のプログ
ラム301 を変換する手順を説明する。まず、ステップ10
0 で、変換前のプログラム301 を読み込む。次に、ステ
ップ101 でプログラム301 内のループにおける配列デー
タの参照パターンを解析して、参照パターン表を生成す
る。
【0059】図7(b)は、プログラム301 を解析して得た
参照パターン表401 を示す。参照パターン表の構成は既
に図7(a)で説明した。図7(b)から分かるように、参照パ
ターン表401 には、図5 のプログラム301 のループ30に
現れる配列要素a(i,j),b(i,j),c(i,j)が登録されてい
る。
【0060】再び図1を参照して、ステップ102 では、
参照パターン表401 に基づいて、各ループに適した配列
の分割パターンを決定し配列分割表を作成する。分割パ
ターンを決定する方法は、上述したように従来より用い
られている方法を用いればよい。ここでは、ループ30で
配列要素b(i,j)とa(i,j)とが同じプロセッサに配置され
るように、配列a とb を同じ分割パターンにすることが
望ましいが、その他の制限はない。
【0061】図8(b)は、図7(b)の参照パターン表401 に
基づいて、上述したように決定された分割パターンを表
す配列分割表411 である。配列分割表の構成は既に図8
(a)で説明した。図8(b)から分かるように、配列分割表4
11 には、図5 のプログラム301 のループ30における配
列a,b,c の分割パターンが登録されている。配列a,c の
分割パターンは行分割、列分割のいずれでも良く、配列
b の分割パターンは配列a の分割パターンと一致させる
ことが登録されている。
【0062】再び図1を参照して、ステップ103 では、
プログラムを走査して下位手続き呼び出しがあるかどう
かを検出する。プログラム301 では下位手続き呼び出し
がないから、ステップ108 に進むこととなる。
【0063】ステップ108 では、自手続きがメインプロ
グラムかどうかを判定する。プログラム301 はメインプ
ログラムではないから、ステップ109 に進むこととな
る。次に、ステップ109 で、自手続きの仮引数の中に配
列データがあるかどうかを判定する。もしあればステッ
プ110 に進み、なければステップ113 に進む。ステップ
110 で、自手続きの仮引数となっている配列データに対
して、ステップ105と同様に、その配列の分割パターン
情報を格納する変数を生成して、その変数の宣言文をプ
ログラムに挿入する。ステップ105 に合わせて、変数名
は配列名に _dist という文字列を付け加えたものと
し、変数の型は整数型とする。
【0064】図5 のプログラム301 では、仮引数の中に
配列a,b,c があるから、ステップ109 からステップ110
に進み、変数 a_dist,b_dist,c_dist を生成して、これ
らの変数の宣言文 integer a_dist,b_dist,c_dist をプログラム中に挿入する。
【0065】図10は、図4 のプログラム301 を変換した
結果である変換後下位手続きプログラム311 を示す。配
列a,b,c の宣言文 real a(100,100),b(100,100),c(100,100) の後に、新たに生成した変数の宣言文 integer a_dist,b_dist,c_dist が挿入されている。
【0066】次に、ステップ111 で、生成した分割情報
用変数を、自手続き呼び出しの仮引数として追加する。
これは、上述のステップ106 と同様の処理である。例え
ば、下位手続きプログラム301 に対しては、図10の変換
後下位手続きプログラム311内に示されているように、 subroutine sub(a,a_dist,b,b_dist,c,c_dist) のように追加される。
【0067】次に、ステップ112 で、自手続きの先頭
に、分割情報用変数の値を調べてそれが次のループの分
割パターンと一致しなければ配列データを再配置する文
を挿入する。例えば図5 のプログラム301 内のループ30
における配列b の分割パターンは、図8(b)の配列分割表
411 に示されるように、配列a と同じであると決定され
ている。そこで、図10の変換後下位手続きプログラム31
1 内に示されるように、手続きの先頭に、 if(a_dist ≠b_dist) then call _transpose(b) b_dist = a_dist endif という文を挿入する。ここで挿入した上記の文は、配列
a とb の分割パターンが一致しているかどうかを判定し
て、もし一致していなければ配列b を再配置し、また分
割情報用変数b_distの値をa_distと同じ値に設定すると
いう意味を持っている。
【0068】次に、ステップ113 でその他の変換処理を
実行し、ステップ114 で変換後のプログラム311 を外部
記憶に出力して、処理を終了する。
【0069】以上により、図5 のプログラム301 の変換
が終了した。図10が、外部記憶に出力された変換結果で
ある。
【0070】上述したように、プログラム300 および30
1 の変換を独立に行なった後、変換結果(図9,10)を結
合して実行モジュールを得る。その実行モジュールを図
3 の並列計算機で実行させる。
【0071】図9 および図10の変換後プログラム310 お
よび311 の動作は、次のようになる。まず、上位手続き
プログラム310 のループ10は、a を列分割、b,c を行分
割として実行される。このとき、分割情報用変数a_dis
t,b_dist,c_distには、各配列の分割パターンを表す定
数値が設定されているものとする。この例では、図7(a)
に示すように、a が列分割、b が行分割、c が行分割で
あるから、これらに対応してa_dist=1(colm)、b_dist=0
(row) 、c_dist=0(row) となっている。
【0072】その後で、下位手続きsub が呼び出され
る。下位手続きプログラム311 の先頭では、引数として
渡された分割情報用変数a_dist,b_dist,c_distに基づい
て、配列の再配置が行なわれる。具体的には、配列b を
再配置して、その分割パターンを配列a と同じ列分割に
する。このとき、分割情報用変数b_distの値もb_dist=1
(colm)に変更される。ループ30は、配列a,b を列分割、
配列c を行分割として実行される。
【0073】下位手続きsub からリターンした後、上位
手続きプログラムでは、a_dist,b_dist,c_distの値を判
定して、ループ20の実行に適するように配列を再配置す
る。この例では、配列a,c はそのままの配置でよい。配
列b は、下位手続きsub により列分割に変更されている
から、ループ20の実行に適するように配列b を列分割か
ら行分割へ再配置する。ループ20は、配列a を列分割、
配列b,c を行分割として実行される。
【0074】なお、本実施例および以後の実施例では、
変換後プログラムをソースプログラムの形式で示すが、
本発明は変換後プログラムがオブジェクトプログラムの
形式である場合でも、同様に適用できる。
【0075】図2 は、図1 のプログラム変換方法10を実
行する並列化コンパイラの構成を表す。コンパイラ5
は、構文解析部50、分割決定部51、変換部52、およびコ
ード生成部53を備えている。変換部52には、手続き呼び
出し検出部520 、分割情報用変数生成部521 、および再
配置文挿入部523 が含まれる。
【0076】構文解析部50は、図1 のステップ100 の処
理を行う。すなわち、変換前プログラム30を読み込ん
で、中間語60を生成する。中間語60は、コンパイラ内部
でのプログラムの表現であり、その形式は通常のコンパ
イラの場合と特に変わらないので、ここでは詳細に述べ
ない。分割決定部51は、図1 のステップ101 および102
の処理を行う。すなわち、データ参照パターンを解析し
て参照パターン表40に登録し、またそれに基づいて配列
の分割パターンを決定し配列分割表41に登録する。
【0077】手続き呼び出し検出部521 は、図1 のステ
ップ103,104,108 および109 の処理を行う。すなわち、
下位手続き呼び出しの位置を検出したり、自手続きがメ
インプログラムかどうかを判定したり、引数に配列デー
タがあるかどうかを調べたりする。分割情報用変数生成
部520 は、図1 のステップ105,106,110 および111 の処
理を行う。すなわち、分割情報用変数を生成して、その
変数の宣言文を中間語60に挿入し、またその変数を引数
として中間語60に追加する。再配置文挿入部522 は、図
1 のステップ107 および112 の処理を行う。すなわち、
データを再配置する文を中間語60に挿入する。図1 のス
テップ113 の処理は、変換部52のその他の部分で行われ
る。コード生成部53では、中間語60を読み込んで変換後
プログラム31を生成する。
【0078】次に、本発明の別の実施例について説明す
る。本実施例は、配列が引数として下位手続きに渡され
る代わりに、外部変数として引き渡される場合に関す
る。
【0079】図12および図13は、本実施例のプログラム
変換方法によって変換されるプログラムの例302 および
303 である。図12および図13のプログラムは、それぞれ
上位手続きと下位手続きになっている。これらのプログ
ラムは、図4 および図5 のプログラム300 および301 と
ほとんど同じであるが、配列a,b,c が宣言文 common /abc/ a,b,c によって、外部変数として宣言されている点が異なる。
【0080】図11は、本実施例のプログラム変換方法を
表すフローチャートである。ステップ120 からステップ
122 までの処理は、図1 のステップ100 から102 までの
処理と同じである。ステップ123 で、外部変数として宣
言されている配列データに対して、その配列の分割パタ
ーン情報を格納する変数を生成して、その変数の宣言文
をプログラムに挿入する。例えば、図12のプログラム30
2 では、配列a,b,c が外部変数として宣言されているの
で、変数 a_dist,b_dist,c_dist を生成し、図14(a) の
変換後プログラム312 内に示されているように、宣言文 integer a_dist,b_dist,c_dist を挿入する。図13のプログラム303 についても、図14
(b) の変換後プログラム312 内に示されているように、
同様の宣言文が挿入される。
【0081】次に、ステップ124 で、それらの分割情報
用変数 a_dist,b_dist,c_dist を外部変数の宣言文に追
加する。例えば、図14の変換後プログラム312 および31
3 に示されているように、 common /abc/ a,a_dist,b,b_dist,c,c_dist のように追加する。
【0082】ステップ125 およびステップ126 の処理
は、それぞれ、図1 のステップ103 およびステップ107
の処理と同じである。すなわち、下位手続き呼び出しの
位置を検出して、その後に配列を再配置する文を挿入す
る。ステップ127 およびステップ128 の処理は、それぞ
れ、図1 のステップ108 およびステップ112 の処理と同
じである。すなわち、自手続きがメインプログラムであ
るかどうかを判定して、メインプログラムでなければ、
自手続きの先頭に配列を再配置する文を挿入する。ステ
ップ129 およびステップ130 の処理は、それぞれ、図1
のステップ113 およびステップ114 の処理と同じであ
る。
【0083】図12および図13の変換前プログラム302 お
よび303 に対して、本実施例のプログラム変換方法を適
用した結果のプログラムは、図9 および図10のプログラ
ム310 および311 とほとんど同じである。ただし、本実
施例の変換結果のプログラムは、図14(a),(b) に示され
る宣言部312 および313 を有する。また、分割情報用変
数 a_dist,b_dist,c_dist は外部変数として宣言される
ので、下位手続きの呼出しの引数の変更はない。
【0084】図11の変換方法12は、前の実施例で述べた
図2 の並列化コンパイラによって同様に実現できる。前
実施例との相違点は、分割情報用変数生成部520 が、図
11のステップ123 の処理、すなわち外部変数に対する分
割情報用変数の生成処理を実行することである。
【0085】次に、本発明のさらに別の実施例として、
データ再配置文を挿入する手順の変形について説明す
る。
【0086】データを再配置するときには、プロセッサ
間でデータを送受信する必要があるが、一般に送信した
データが受信プロセッサに到着するまでには、ネットワ
ークを経由するための時間の遅延がある。したがって、
各プロセッサが送信の直後に受信を行なおうとすると、
データの到着まで待たされることになる。この待ち時間
を少なくするには、送信をできるだけ早めに、また受信
をできるだけ遅めに行ない、送信から受信までの間に他
の処理を行なうようにすればよい。
【0087】図15は、上述のようにデータ再配置の際に
送信を早めにし受信を遅めにするためのデータ再配置文
挿入手順を示す。図15は、図1 のステップ112 の変形で
あるが、その他の再配置文挿入ステップ、例えば図1 の
ステップ107 や図11のステップ126,128 についても同様
の変形が可能である。また、図16は、本手順の対象とな
るプログラムの例304 であり、図17は、図16のプログラ
ム304 に対する変換後プログラム314 である。
【0088】図15において、まずステップ1400では、自
手続きの先頭に、分割情報用変数の値を調べて配列デー
タを再配置するために送信する文を挿入する。例えば、
図16の変換前プログラム304 に対しては、図17の変換後
プログラム内に示されているように、手続きの先頭に、 if(a_dist ≠b_dist) call _transposesend(b) という文を挿入する。ここで、_transposesend(b) は、
配列b を再配置するための送信処理を表す。すなわちこ
の文は、配列a とb の分割パターンが一致しているかど
うかを判定して、もし一致していなければ配列b を再配
置するための送信処理を行うという意味を持っている。
【0089】ステップ1401では、再配置される配列が最
初に参照される位置を検出する。例えば、変換前プログ
ラム304 に対しては、配列b が最初に参照される位置は
ループ30であることを検出する。この検出方法は、通常
のコンパイラのデータフロー解析技術と同様の方法を用
いればよい。
【0090】ステップ1402では、ステップ1401で検出さ
れた参照位置の直前に、分割情報用変数の値を調べて配
列データを再配置するために受信する文を挿入する。例
えば、図16の変換前プログラム304 に対しては、図17の
変換後プログラム内に示されているように、ループ30の
直前に、 if(a_dist ≠b_dist) then call _transposerecv(b) b_dist = a_dist endif という文を挿入する。ここで、_transposerecv(b) は、
配列b を再配置するための受信処理を表す。すなわちこ
の文は、配列a とb の分割パターンが一致しているかど
うかを判定して、もし一致していなければ配列b を再配
置するための受信処理を行い、また分割情報用変数b_di
stの値をa_distと同じ値に設定するという意味を持って
いる。
【0091】結果として、図17のような変換後プログラ
ム314 が得られる。これによれば、配列b を列分割に直
すための送信処理は手続きの先頭で行なわれ、それに対
応する受信処理は配列b が最初に参照される位置の直前
で行なわれる。したがって、データ再配置における各プ
ロセッサの待ち時間は少ない。
【0092】次に、本発明のさらに別の実施例について
述べる。本実施例は、分割情報用変数を新たに生成する
代わりに、元の配列のサイズを拡大して、拡大された領
域を分割情報の格納用に用いるというものである。以
下、図4 および図5 の変換前プログラムを変換対象例と
して、本実施例の方法について説明する。
【0093】図18は、本実施例のプログラム変換方法を
表すフローチャートである。ステップ160 からステップ
164 までの処理は、図1 のステップ100 から104 までの
処理と同じである。
【0094】次に、ステップ165 で、下位手続き呼び出
しの実引数となっている配列に対して、その最終次元の
サイズを1 増やす。例えば、図4 のプログラム300 内の
配列a,b,c に対して、第2 次元のサイズを100 から101
に変更して、配列宣言文を図19の変換後プログラム316
に示されているように、 real a(100,101),b(100,101),c(100,101) とする。拡大された配列の最後の要素を、それぞれの配
列の分割情報を格納する変数の代わりに使用する。すな
わち、配列要素a(100,101),b(100,101),c(100,101)を、
それぞれ、図9 の変換後プログラム310 内の分割情報用
変数a_dist,b_dist,c_distの代わりとする。
【0095】ステップ166 では、下位手続き呼び出しの
直後に、配列の最後の要素の値を調べて、それが次のル
ープの分割パターンと一致しなければ配列データを再配
置する文を挿入する。例えば、配列a に対しては、図19
の変換後上位手続きプログラム316 内に示されているよ
うに、下位手続き呼び出しの直後に、 if(a(100,101) ≠colm) then call _transpose(a) a_dist = colm endif という文を挿入する。これは、図9 の変換後プログラム
310 内の変数a_distを、配列要素a(100,101)に置き換え
たものである。配列b,c に対しても同様の文を挿入す
る。なお、本実施例では、分割パターンを表す定数row,
colmは実数型としている。
【0096】ステップ167 およびステップ168 の処理
は、図1 のステップ108 および109 の処理と同じであ
る。ステップ169 で、自手続きの仮引数となっている配
列に対して、ステップ165 と同様にその最終次元のサイ
ズを1 増やす。ただし、既にステップ165 で増やされて
いる場合は、そのままとする。
【0097】ステップ170 では、自手続きの先頭に、配
列の最後の要素の値を調べて、それが次のループの分割
パターンと一致しなければ配列データを再配置する文を
挿入する。これは、ステップ166 と同様の処理である。
例えば、図20の変換後下位手続きプログラム317 内に示
されているように、手続きの先頭に、 if(a(100,101) ≠b(100.101)) then call _transpose(b) b(100,101) = a(100,101) endif という文を挿入する。これは、図10の変換後プログラム
311 内の変数a_dist,b_dist を、それぞれ配列要素a(10
0,101),b(100,101) に置き換えたものである。
【0098】ステップ171 およびステップ172 の処理
は、図1 のステップ113 および114 の処理と同じであ
る。本実施例の方法によって変換されたプログラム316
および317 の動作は、前述の図9 および図10のプログラ
ム310 および311 の動作と同じなので、ここでは特に述
べない。
【0099】図18の変換方法16は、前述の実施例で述べ
た図2 の並列化コンパイラによって同様に実現できる。
前述の実施例との相違点は、分割情報用変数生成部520
が、図16のステップ165 および169 の処理、すなわち分
割情報格納用に配列のサイズを増やす処理を実行するこ
とである。もう1 つの相違点は、再配置文挿入部522が
再配置文を挿入するときに、分割情報用変数の代わりに
配列の最後の要素を調べる文を挿入することである。
【0100】次に、本発明のさらに別の実施例について
説明する。本実施例は、手続き間で配列データを引き渡
すときに、そのデータを標準分割パターン、すなわち予
め決められた分割パターンに再配置しておくというもの
である。本実施例では、標準分割パターンは行分割とす
ることに、予め決めておく。もちろん、列分割を標準分
割パターンとすることも可能である。
【0101】図21は、本実施例のプログラム変換方法を
表すフローチャートである。ステップ180 からステップ
182 までの処理は、図1 のステップ100 から102 までの
処理と同じである。すなわち、変換前プログラムを読み
込み、各ループでのデータ参照パターンを解析して、そ
れに基づいて各ループでのデータ分割パターンを決定す
る。分割パターンは、前の実施例と同様に、配列分割表
41に登録する。例えば、図22および図23の変換前プログ
ラム308 および309 に対しては、それぞれ、図24の配列
分割表412 および413 に示すように分割が決定される。
【0102】次に、ステップ183 で、プログラムを走査
して下位手続き呼び出しがあるかどうかを検出する。下
位手続き呼び出しがある場合はステップ184 に進み、な
い場合はステップ186 に進む。ステップ184 では、下位
手続き呼び出しの前のループでの分割パターンが標準分
割パターンでなく、かつ下位手続き呼び出しの実引数と
なっている配列があるかどうかを判定する。もしあれば
ステップ185 に進み、なければステップ186 に進む。
【0103】例えば、図22のプログラム308 内のループ
10における配列a の分割パターンは、図24の列分割表41
2 に示されるように、列分割と決定されており、かつ配
列aはループ10の後の手続き呼び出しの引数になってい
る。したがって、配列a に対してステップ185 の処理を
行う。
【0104】ステップ185 では、下位手続き呼び出しの
直前に、その配列を標準分割パターンになるように再配
置する文を挿入する。例えば、図25の変換後上位手続き
プログラム318 内に示されているように、ループ10の
後、下位手続き呼び出しsub(a,b)の直前に、 call _transpose(a) という文を挿入する。
【0105】ステップ186 で、プログラムを走査して上
位手続きへのリターンを検出する。ステップ187 で、リ
ターンの前のループでの分割パターンが標準分割パター
ンでなく、かつ自手続きの仮引数となっている配列があ
るかどうかを判定する。もしあればステップ188 に進
み、なければステップ189 に進む。
【0106】例えば、図23のプログラム309 内のループ
30における配列b の分割パターンは、図24の配列分割表
413 に示されるように、列分割と決定されており、かつ
配列b は自手続きの仮引数となっている。したがって、
配列b に対してステップ188の処理を行う。
【0107】ステップ188 では、上位手続きへのリター
ンの直前に、その配列を標準分割パターンになるように
再配置する文を挿入する。例えば、図26の変換後下位手
続きプログラム319 内に示されるように、ループ30の
後、リターンの直前に、 call _transpose(b) という文を挿入する。
【0108】ステップ189 およびステップ190 の処理
は、それぞれ、図1 のステップ113 およびステップ114
の処理と同じである。
【0109】図25および図26の変換後プログラム318 お
よび319 の動作は、次のようになる。まず、上位手続き
プログラム318 のループ10は、a を列分割かつb を行分
割として実行される。その後で、下位手続きsub が呼び
出される直前で、a の分割パターンを標準分割パター
ン、すなわち行分割に戻す。下位手続きプログラム319
の先頭では、配列a,b が行分割になっていることが分か
っている。そこで、ループ30の直前でb を列分割に再配
置する。ループ30は、a を行分割かつb を列分割として
実行されることとなる。ループ30の終了後、b を行分割
に戻してから上位手続きにリターンする。上位手続きプ
ログラム318 のループ20は、a,b 共に行分割として実行
される。
【0110】図21の変換方法18は、やはり、前述の実施
例で述べた図2 の並列化コンパイラによって同様に実現
できる。ただしこの場合は、分割情報用変数生成部520
は処理を行わない。また、再配置文挿入部522 は、図21
のステップ185 および188 の処理を実行する。これらの
ステップの処理は、図21の説明で述べたように、前述の
実施例とはやや異なっている。
【0111】次に、本発明のさらに別の実施例について
説明する。上述の実施例では、上位手続きおよび下位手
続きが、共に逐次処理用プログラムであり、それらの逐
次処理用プログラムを分散メモリ型並列計算機用に変換
する場合について述べた。しかし、一方が初めから分散
メモリ型並列計算機用プログラムとして作成された場合
でも、本発明の方法は適用可能である。
【0112】本実施例では、下位手続きが行列加算のラ
イブラリプログラムである場合について述べる。このラ
イブラリプログラムは、初めから並列処理用として作成
され用意されているものとする。このライブラリプログ
ラムは、仮引数として3 個の2 次元配列および各配列に
対する分割情報用変数を、上位手続きから受けとるもの
ものとする。3 個の配列のうち2 個は加算する行列を表
し、残りの1 個は加算結果を格納するための行列を表
す。
【0113】図27は、この行列加算ライブラリ内の処理
を表すフローチャートである。ステップ700 で引数とし
て渡された分割情報用変数の値を調べて、各配列の分割
パターンが3 つとも一致しているかどうかを判定する。
もし一致していればステップ703 に進み、一致していな
ければステップ701 に進む。なお、配列の分割パターン
は、本実施例においても、行分割と列分割の2 種類のみ
とする。したがって、配列の分割パターンは3 つとも一
致しているか、2 つが一致していて他の1 つが一致して
いないかのいずれかである。
【0114】次に、ステップ701 では、分割パターンが
他と一致していない配列を再配置して、分割パターンを
他の2 つと一致させる。これに伴い、ステップ702 で、
再配置した配列に対する分割情報用変数を更新して、新
しい分割パターンを表すようにする。以上の処理によ
り、全ての配列の分割パターンが一致し、加算に適する
ようになる。
【0115】ステップ703 で、実際に行列の加算を行
う。すなわち、第1 、第2 の配列の各要素を加算し、そ
の結果を第3 の配列の対応する要素に格納する。その
後、処理を終了する。
【0116】図28は、上述の行列加算ライブラリを呼び
出す上位プログラムの例320 である。配列a,b,c はいず
れも、100 行100 列の行列を表す2 次元配列である。整
数型変数a_dist,b_dist,c_distは、それぞれ、配列a,b,
c に対する分割情報用変数である。ループ10は、a を列
分割かつb,c を行分割として実行する。各配列は、初期
化時にこの分割パターンに設定されているものとする。
また、各分割情報用変数a_dist,b_dist,c_distには、各
配列の分割パターンを示す値が、初期化時に設定されて
いるものとする。
【0117】このプログラム320 において、ループ10の
後で、 call _matrixadd(a,a_dist,b,b_dist,c,c_dist) という文によって、行列加算ライブラリ手続きを呼び出
す。このライブラリ手続きの中では、図27に示した処理
が行われ、配列a が行分割に再配置されて、配列b と加
算され、結果が配列c に格納される。
【0118】図29は、図27の行列加算方法を実施する装
置の例である。行列加算装置80は、配列811 から813 、
および分割情報用変数821 から823 に対して、図27の行
列加算方法の処理を行う。配列811 から813 、および分
割情報用変数821 から823 は、行列加算装置に付随する
記憶装置に格納されている。行列加算装置80は、分割情
報用変数判定部800 、配列再配置部801 、分割情報用変
数更新部802 、および配列要素加算部803 から構成され
る。
【0119】分割情報用変数判定部800 は、図27のステ
ップ700 の処理を実行する。配列再配置部801 は、ステ
ップ701 の処理を実行する。分割情報用変数更新部802
は、ステップ702 の処理を実行する。配列要素加算部80
3 は、ステップ703 の処理を実行する。
【0120】
【発明の効果】本発明のプログラム変換方法および装置
によれば、複数のファイルに分かれている逐次処理計算
機用プログラムを分散メモリ型の並列計算機上で実行可
能なプログラムに変換する際に、データ分割を自動的に
決定して、かつ、各ファイルを別々に変換することがで
きる。
【0121】これにより、元のプログラムが非常に大き
な場合に、変換に要する時間が膨大になってしまうとい
う欠点を克服できる。また、1 個のファイルだけを修正
したときにも、全部のファイルを再変換しなければなら
ないという欠点を克服できる。
【図面の簡単な説明】
【図1】本発明の一実施例に係るプログラム変換方法の
フローチャートである。
【図2】本発明のプログラム変換方法を実行する並列化
コンパイラの例である。
【図3】本発明の変換方法によって変換されたプログラ
ムが動作する並列計算機の例である。
【図4】変換前の上位手続きプログラムの例である。
【図5】変換前の下位手続きプログラムの例である。
【図6】配列データの分割配置パターンの例である。
【図7】図4 、図5 の変換前プログラムに対する参照パ
ターン表を示す図である。
【図8】図4 、図5 の変換前プログラムに対する配列分
割表を示す図である。
【図9】図4 の上位手続きプログラムに対して図1 の変
換方法を適用した結果である変換後プログラムである。
【図10】図5 の下位手続きプログラムに対して図1 の
変換方法を適用した結果である変換後プログラムであ
る。
【図11】本発明のプログラム変換方法の別の実施例の
フローチャートである。
【図12】図11の変換方法の対象となる変換前の上位手
続きプログラムの例である。
【図13】図11の変換方法の対象となる変換前の下位手
続きプログラムの例である。
【図14】図12、図13の変換前プログラムに対して図11
の変換方法を適用した結果である変換後プログラムの宣
言部である。
【図15】データ再配置文挿入処理の別手順のフローチ
ャートである。
【図16】図15の変換方法の対象となる変換前プログラ
ムの例である。
【図17】図16のプログラムに対して図15の変換方法を
適用した結果である変換後プログラムである。
【図18】本発明のプログラム変換方法のさらに別の実
施例のフローチャートである。
【図19】図4 の上位手続きプログラムに対して図18の
変換方法を適用した結果である変換後プログラムであ
る。
【図20】図5 の下位手続きプログラムに対して図18の
変換方法を適用した結果である変換後プログラムであ
る。
【図21】本発明のプログラム変換方法のさらに別の実
施例のフローチャートである。
【図22】変換前の上位手続きプログラムの別の例であ
る。
【図23】変換前の下位手続きプログラムの別の例であ
る。
【図24】図22、図23の変換前プログラムに対する配列
分割表を示す図である。
【図25】図22の上位手続きプログラムに対して図21の
変換方法を適用した結果である変換後プログラムであ
る。
【図26】図23の下位手続きプログラムに対して図21の
変換方法を適用した結果である変換後プログラムであ
る。
【図27】本発明を利用した行列加算方法のフローチャ
ートである。
【図28】図27の行列加算方法のライブラリ手続きを呼
び出すプログラムの例である。
【図29】本発明を利用した行列加算装置である。
【符号の説明】
10…本発明のプログラム変換方法、12…本発明の別のプ
ログラム変換方法、16…本発明のまた別のプログラム変
換方法、18…本発明のまた別のプログラム変換方法、20
0 〜20n …プロセッサ、210 〜21n …ローカルメモリ、
30…変換前プログラム、31…変換後プログラム、40…参
照パターン表、41…配列分割表、5 …本発明の並列化コ
ンパイラ、70…本発明の行列加算方法、80…本発明の行
列加算装置。
フロントページの続き (72)発明者 斉藤 鉄郎 東京都小平市上水本町5丁目22番1号 株式会社日立マイコンシステム内 (72)発明者 中川 智仁 神奈川県川崎市麻生区王禅寺1099番地 株式会社日立製作所 システム開発研究 所内 (72)発明者 小野 裕幸 神奈川県川崎市麻生区王禅寺1099番地 株式会社日立製作所 システム開発研究 所内 (72)発明者 海永 正博 神奈川県川崎市麻生区王禅寺1099番地 株式会社日立製作所 システム開発研究 所内 (72)発明者 小松 啓子 神奈川県川崎市麻生区王禅寺1099番地 株式会社日立製作所 システム開発研究 所内 (56)参考文献 Hiranandni,S.et a l,”Evaluation of C ompiler Optimizati ons for Fortran D on MIMD Distribute d Memory Machine s”,Proc.of the 1992 Int.Conf.on Superc omputing”(1992−7) (58)調査した分野(Int.Cl.7,DB名) G06F 9/45,15/16

Claims (17)

    (57)【特許請求の範囲】
  1. 【請求項1】逐次処理プログラムまたは共有メモリ型並
    列計算機用プログラムを分散メモリ型並列計算機用プロ
    グラムに変換するプログラム変換方法において、 下位手続き呼び出しの実引数となっているデータに対し
    て、該データの分割配置情報を格納する変数を生成する
    ステップと、 該下位手続き呼び出しの実引数として該変数を追加する
    ステップとを含むことを特徴とするプログラム変換方
    法。
  2. 【請求項2】逐次処理プログラムまたは共有メモリ型並
    列計算機用プログラムを分散メモリ型並列計算機用プロ
    グラムに変換するプログラム変換方法において、 自手続きの仮引数となっているデータに対して、該デー
    タの分割配置情報を格納する変数を生成するステップ
    と、 自手続きの仮引数として該変数を追加するステップとを
    含むことを特徴とするプログラム変換方法。
  3. 【請求項3】逐次処理プログラムまたは共有メモリ型並
    列計算機用プログラムを分散メモリ型並列計算機用プロ
    グラムに変換するプログラム変換方法において、 変換対象のプログラム内のデータ参照パターンを解析し
    てデータの分割配置を決定するステップと、 下位手続き呼び出しの実引数となっているデータに対し
    て、該データの分割配置情報を格納する変数を生成する
    ステップと、 下位手続き呼び出しの実引数として該変数を追加するス
    テップと、 該手続き呼び出しの後に、該変数を調べて該データを再
    配置する文を挿入するステップと、 自手続きの仮引数となっているデータに対して、該デー
    タの分割配置情報を格納する変数を生成するステップ
    と、 自手続きの仮引数として該変数を追加するステップと、 自手続きの先頭に該変数を調べて該データを再配置する
    文を挿入するステップとを含むことを特徴とするプログ
    ラム変換方法。
  4. 【請求項4】逐次処理プログラムまたは共有メモリ型並
    列計算機用プログラムを分散メモリ型並列計算機用プロ
    グラムに変換するプログラム変換方法において、 外部変数であるデータに対して、該データの分割配置情
    報を格納する変数を生成するステップと、 該変数の宣言を外部変数の宣言文に追加するステップと
    を含むことを特徴とするプログラム変換方法。
  5. 【請求項5】逐次処理プログラムまたは共有メモリ型並
    列計算機用プログラムを分散メモリ型並列計算機用プロ
    グラムに変換するプログラム変換方法において、 変換対象のプログラム内のデータ参照パターンを解析し
    てデータの分割配置を決定するステップと、 外部変数であるデータに対して、該データの分割配置情
    報を格納する変数を生成するステップと、 該変数の宣言を外部変数の宣言文に追加するステップ
    と、 下位手続き呼び出しの位置を検出するステップと、 該下位手続き呼び出しの後に、該生成変数を調べて該デ
    ータを再配置する文を挿入するステップと、 自手続きの先頭に、該生成変数を調べて該データを再配
    置する文を挿入するステップとを含むことを特徴とする
    プログラム変換方法。
  6. 【請求項6】逐次処理プログラムまたは共有メモリ型並
    列計算機用プログラムを分散メモリ型並列計算機用プロ
    グラムに変換するプログラム変換方法において、 外部変数または手続きの引数となっている配列データに
    対して、該配列のサイズを拡大するステップと、 該拡大された配列の要素に該配列の分割配置情報を代入
    する文を、プログラムに挿入するステップとを含むこと
    を特徴とするプログラム変換方法。
  7. 【請求項7】逐次処理プログラムまたは共有メモリ型並
    列計算機用プログラムを分散メモリ型並列計算機用プロ
    グラムに変換するプログラム変換方法において、 変換対象のプログラム内のデータ参照パターンを解析し
    てデータの分割配置を決定するステップと、 下位手続き呼び出しの位置を検出するステップと、 該下位手続き呼び出しの直前に、該データを予め決めら
    れた分割配置に再配置する文を挿入するステップと、 上位手続きへのリターン位置を検出するステップと、 該リターン位置の直前に、該データを予め決められた分
    割配置に再配置する文を挿入するステップとを含むこと
    を特徴とするプログラム変換方法。
  8. 【請求項8】前記データを再配置する文は、データを送
    信する文とデータを受信する文から成り、かつそれらの
    文をプログラム内の別々の位置に挿入することを特徴と
    する請求項3、5、または7に記載のプログラム変換方
    法。
  9. 【請求項9】前記データを再配置する文を挿入するステ
    ップは、変換前プログラム内の該データを参照しない区
    間を検出するステップと、該区間の先頭に該データを送
    信する文を挿入するステップと、該区間の最後に該デー
    タを受信する文を挿入するステップとからなることを特
    徴とする請求項8に記載のプログラム変換方法。
  10. 【請求項10】逐次処理プログラムまたは共有メモリ型
    並列計算機用プログラムを分散メモリ型並列計算機用プ
    ログラムに変換するプログラム変換装置において、下位
    手続き呼び出しの実引数となっているデータに対して、
    該データの分割配置情報を格納する変数を生成する手段
    と、該下位手続き呼び出しの実引数として該変数を追加
    する手段とを備えたことを特徴とするプログラム変換装
    置。
  11. 【請求項11】逐次処理プログラムまたは共有メモリ型
    並列計算機用プログラムを分散メモリ型並列計算機用プ
    ログラムに変換するプログラム変換装置において、自手
    続きの仮引数となっているデータに対して、該データの
    分割配置情報を格納する変数を生成する手段と、自手続
    きの仮引数として該変数を追加する手段とを備えたこと
    を特徴とするプログラム変換装置。
  12. 【請求項12】逐次処理プログラムまたは共有メモリ型
    並列計算機用プログラムを分散メモリ型並列計算機用プ
    ログラムに変換するプログラム変換装置において、外部
    変数であるデータに対して、該データの分割配置情報を
    格納する変数を生成する手段と、該変数の宣言を外部変
    数の宣言文に追加する手段とを備えたことを特徴とする
    プログラム変換装置。
  13. 【請求項13】逐次処理プログラムまたは共有メモリ型
    並列計算機用プログラムを分散メモリ型並列計算機用プ
    ログラムに変換するプログラム変換装置において、外部
    変数または手続きの引数となっている配列データに対し
    て、該配列のサイズを拡大する手段と、該拡大された配
    列の要素に該配列の分割配置情報を代入する文を、プロ
    グラムに挿入する手段とを備えたことを特徴とするプロ
    グラム変換装置。
  14. 【請求項14】逐次処理プログラムまたは共有メモリ型
    並列計算機用プログラムを分散メモリ型並列計算機用プ
    ログラムに変換するプログラム変換装置において、変換
    対象のプログラム内のデータ参照パターンを解析してデ
    ータの分割配置を決定する手段と、下位手続き呼び出し
    の位置を検出する手段と、該下位手続き呼び出しの直前
    に該データを予め決められた分割配置に再配置する文を
    挿入する手段と、上位手続きへのリターン位置を検出す
    る手段と、該リターン位置の直前に該データを予め決め
    られた分割配置に再配置する文を挿入する手段とを備え
    たことを特徴とするプログラム変換装置。
  15. 【請求項15】分散メモリ型並列計算機の各メモリに分
    散配置されたデータの処理方法において、データの分割
    配置情報を格納した分割配置情報用変数が実引数並びに
    あるか、仮引数並びにあるか、または、外部変数として
    宣言されている場合、該変数の値を判定して、判定結果
    によって異なる処理を行うことを特徴とするデータ処理
    方法。
  16. 【請求項16】分散メモリ型並列計算機の各メモリに分
    散配置されたデータを処理する装置において、データの
    分割配置情報を、実引数並びにあるか、仮引数並びにあ
    るか、または、外部変数として宣言されている変数に
    納する手段と、該分割配置情報の内容を判定する手段と
    を備えたことを特徴とするデータ処理装置。
  17. 【請求項17】逐次処理プログラムまたは共有メモリ型
    並列計算機用プログラムを分散メモリ型並列計算機用プ
    ログラムに変換するプログラム変換方法において、 下位手続き呼び出しの実引数または自手続きの仮引数と
    なっているデータに対して、該データの分割配置情報を
    格納する変数を生成するステップと、 該変数の宣言を外部変数の宣言文に追加するステップと
    を含むことを特徴とするプログラム変換方法。
JP33346092A 1992-11-19 1992-11-19 プログラム変換方法および装置 Expired - Fee Related JP3233467B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP33346092A JP3233467B2 (ja) 1992-11-19 1992-11-19 プログラム変換方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP33346092A JP3233467B2 (ja) 1992-11-19 1992-11-19 プログラム変換方法および装置

Publications (2)

Publication Number Publication Date
JPH06161776A JPH06161776A (ja) 1994-06-10
JP3233467B2 true JP3233467B2 (ja) 2001-11-26

Family

ID=18266332

Family Applications (1)

Application Number Title Priority Date Filing Date
JP33346092A Expired - Fee Related JP3233467B2 (ja) 1992-11-19 1992-11-19 プログラム変換方法および装置

Country Status (1)

Country Link
JP (1) JP3233467B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013061361A1 (ja) * 2011-10-24 2013-05-02 株式会社日立製作所 並列計算機、プログラム生成方法及びコンパイルプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Hiranandni,S.et al,"Evaluation of Compiler Optimizations for Fortran D on MIMD Distributed Memory Machines",Proc.of the 1992 Int.Conf.on Supercomputing"(1992−7)

Also Published As

Publication number Publication date
JPH06161776A (ja) 1994-06-10

Similar Documents

Publication Publication Date Title
US5551039A (en) Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements
Ikudome et al. An automatic and symbolic parallelization system for distributed memory parallel computers
EP0735468B1 (en) Method and apparatus for an optimizing compiler
US7000213B2 (en) Method and apparatus for automatically generating hardware from algorithms described in MATLAB
US5822593A (en) High-level loop fusion
JP4014080B2 (ja) デジタル回路の設計装置および設計方法、並びに、プログラムおよび格納媒体
JP2634144B2 (ja) プログラムの並列化実行方法及び並列化実行コンパイラ
JP3047998B2 (ja) 並列計算機におけるプロセッサ割り当て方法、及び装置
GB2327786A (en) Strategic compilation of source programs into two or more languages
JP3053092B2 (ja) 並列化コンパイル方法
US7555745B2 (en) Program and apparatus for translating language, and program converting method
Das et al. Index array flattening through program transformation
Eles et al. Compiling VHDL into a high-level synthesis design representation.
US5404531A (en) Method and apparatus for compiler processing on program related to data transfer and calculation, and method of managing memory
JP3233467B2 (ja) プログラム変換方法および装置
Petersen Evaluation of programs and parallelizing compilers using dynamic analysis techniques
Veidenbaum Compiler optimizations and architecture design issues for multiprocessors (parallel)
Butler et al. A facility for simulating multiprocessors
JP3028821B2 (ja) 並列化コンパイル方法
Sahin A compilation tool for automated mapping of algorithms onto FPGA-based custom computing machines
JP2739836B2 (ja) 最適データ分散生成装置およびコンパイル処理装置
Bozkus et al. Compiling hpf for distributed memory mimd computers
Millstein et al. The Illiac IV Fortran Compiler
JPH07219909A (ja) プログラム変換方法
US20020143748A1 (en) Method and system for providing a generic scalar function

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20010910

LAPS Cancellation because of no payment of annual fees