JP3053092B2 - 並列化コンパイル方法 - Google Patents
並列化コンパイル方法Info
- Publication number
- JP3053092B2 JP3053092B2 JP62139729A JP13972987A JP3053092B2 JP 3053092 B2 JP3053092 B2 JP 3053092B2 JP 62139729 A JP62139729 A JP 62139729A JP 13972987 A JP13972987 A JP 13972987A JP 3053092 B2 JP3053092 B2 JP 3053092B2
- Authority
- JP
- Japan
- Prior art keywords
- loop
- induction
- variable
- extended
- tolerance
- 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 - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の詳細な説明】
〔産業上の利用分野〕
本発明は、並列計算機システムに係り、特に遂行実行
型の高級言語から、並列に実行するのに好適なオブジエ
クトプログラムを生成する方式に関する。 〔従来の技術〕 コンパイラの最適化の対象としてのループ基本インダ
クシヨン変数とは次のように定義することができる。ル
ープにおいて、各繰り返し回数で再帰的に定義され、ル
ープの繰り返し回数Iの関数である。 典型的な例では、次のようなプログラムが書ける。 ループ制御変数Iをはじめとして、FORTRANのソース
プログラムには、このような形で定義される計算の出現
頻度は非常に高い。しかも、ループの回数に同期して変
化する。このような性質を利用して、従来の逐次型計算
機のためには種々の最適化手法が研究されており、A.V.
Aho J.D.Ullmanの“Principles of Compiler Design"に
もP466−471にInduction variable eleminationとして
論じられている。 これらの手法は、逐次的に実行する計算機に対して
は、有効であるが、並列処理に対する最適化と言うこと
はできず、並列処理向上にインダクシヨン変数の最適化
について論じているようなものはない。 本発明の適用対象は、以下のような条件を満たす基本
インダクシヨン変数に限る。 (2) aはループが繰り返されても値が変わらない、
ループ不変変数である。 このような基本インダクシヨン変数を以下インダクシ
ョン変数と呼ぶ。 〔発明が解決しようとする問題点〕 従来技術では、再帰的に定義されるインダクシヨン変
数の計算は、逐次的に実行されるか又は、プロセツサ間
のネツトワーク通信を利用して行なわれてきた。しか
し、数値計算の分野で用いられるFORTRAN言語は、Doル
ープの制御変数をはじめとして、配列の添字など、再帰
的に定義されるインダクシヨン変数がしばしば現れ、こ
れらについて最適化を施すことが、オブジエクト性能の
向上にもつながる。しかし、Doループの繰り返しを並列
に実行する並列計算機システムにおいては、これらのイ
ンダクシヨン変数の最適化について配慮されていない。 たとえば、第3図のようなプログラムで、Do10ループ
やDo30ループについて、ループの繰り返し回数ごとに並
列に行なうと次のような障害が起こる。文17がJの定義
式であるが、ループI回目の実行を行うためには、ルー
プのI−1回目に計算したJの値を使う。第12図のよう
に並列に実行するためには、I−1回目の計算を実行す
るプロセツサからI回目の計算を実行するプロセツサ
へ、Jの値を転送しなければならない。従つて、各プロ
セツサ間の通信手段の無い並列機では並列実行すること
ができず、通信手段があつても、1回前の計算が終われ
るのを待つため並列性は損われ、さらに、データの通信
のために時間がかかる。これは、文18のRや、文24のIA
にも同様である。1回目に計算した値を用いて、新たな
値を定義する。再帰的な定義は、このように、並列処理
にとつては、逐次処理に比べ、実行効率劣化の大きな要
因となる。 本発明の目的は、これらFORTRANプログラムにしばし
ば出現する再帰的なインダクシヨン変数の計算を、再帰
性が無くなるよう、ループ回数を用いた式に変換し、プ
ロセツサ間の通信を行うことなく並列に実行するオブジ
エクトを生成することである。 〔問題点を解決するための手段〕 上記目的は、コンパイラの並列処理部において、イン
ダクシヨン変数検出部と、初期値生成部と、公差・公比
生成部と、式変換部を設けることにより達成される。 インダクシヨン変数検出部は、先立つ処理により検出
した並列化の対象とするループについて、ループないし
ループの内側ループで再帰的に定義されているインダク
シヨン変数を検出し、該インダクシヨン変数の値がルー
プ繰り返し回数と、ループ実行中値が変わらないループ
不変変数のみによつて計算できるか否かを判定する。 初期値生成部は、上記条件を満足したインダクション
変数ないし、ループ繰り返し回数とループ実行中値が変
わらないループ不変変数を含む非線形式によって定義さ
れる拡張インダクション変数の初期値を設定するコード
を生成する。 公差・公比生成部は、前記条件を満足したインダクシ
ヨン変数の公差値か又は公比値ないし、隣り合うループ
制御変数に対する2つの拡張インダクション変数の差分
や比である拡張公差値か又は拡張公比値を設定するコー
ドを生成する。 式変換部は、再帰的に定義されていたインダクシヨン
変数ないし拡張インダクション変数の定義式を、ループ
不変な初期値と、公差値または公比値ないし拡張公差値
か又は拡張公比値を用いた定義式に変換する。 以上のようにして、再帰的な定義式を、再帰的ではな
い定義式に変換することができ、その結果この計算を通
信を使うことなく、並列に実行できるようになる。 〔作用〕 インダクシヨン変数の検出部、初期値生成部、公差・
公比生成部、定義式変換部は、ループ中にあるインダク
シヨン変数に対して、以下のように作用する。 インダクシヨン変数の検出部は、第3図の並列化対象
ループDo10については、インダクシヨン変数JとRを検
出する。もう1つの並列化対象ループDo30については、
拡張インダクシヨン変数IAを検出する。 初期値生成部は、第3図のDo10ループのJとRに対し
ては、ループに入る前のJとRの値を保持する新しい変
数JφおよびRφを用いて、初期値を定義する式を生成
する。もう1つの並列化対象ループDo30については、IA
の初期値1を検出する。 公差・公比生成部は、第3図のDo10ループのJについ
ては公差5を、Rについては公比Aを検出する。Do30ル
ープのIAについては拡張公差Iを生成する。 式変換部は、ループ繰り返し回数とループで値の変わ
らない不変式を用いた式に変換する。第3図のDo10ルー
プのJについては、J=J+5をJ=Jφ+5*Iで置
換し、Rについては、R=Rφ*A**Iで置換する。
Do30ループのIAについては、IA=1+I*(I−1)/2
を挿入する。 上記のようにして、インダクシヨン変数の再帰性を除
き、プロセツサ間でデータの通信を行なうことなく並列
に実行することができる。 〔実施例〕 以下、本発明のFORTRANコンパイラにおける実施例を
図表を参照しつつ説明する。 第2図に、本発明を適用するコンパイラ全体の構造を
示す。第2図の構文解析部9がFORTRANのソースプログ
ラム12を入力し、これを中間語6に変換する。中間部10
はこれを入力として、最適化や並列化を行い、中間語6
を変形する。コード生成部11は、中間部10が変形した中
間語からオブジエクトコード13を生成する。本発明は中
間部10に係り、オブジエクトコード7の並列実行できる
部分をふやすことにより実行効率を上げるものである。 第2図の中間部10のうち、並列化のための式変換に係
わる部分の構成を第1図に示す。第2図の入力するソー
スプログラム12の例として、第3図にFORTRANプログラ
ムをあげ、説明する。第3図のFORTRANプログラムか
ら、Do10のループとDo30のループを並列に実行するプロ
グラムを生成する。 第1図において、インダクシヨン変数検出部2は、ソ
ースプログラムを構文解析した中間語6を入力として、
第4図のフローチヤートのように動作し、第5図に示す
インダクシヨンテーブル7を作る。 インダクシヨン変数検出処理は並列処理対象のループ
の中の最内側ループから、並列処理対象ループに至るま
で順次、行なう。まず処理28が、Do10のループを処理対
象とする。処理29が基本インダクシヨン変数として、ル
ープ制御変数Iを検出し、処理30がIのレコード39を作
る。処理31の判定を経て、処理29が基本インダクシヨン
変数Jの定義文17を検出し、処理30がJのレコード40を
作る。同様に、処理30が、Rのレコード41を作る。 Do30のループについては、処理28が、まずDo20を処理
対象ループとして、Jのレコード44、IBのレコード45、
IAのレコード46を作る。さらに、処理32の判定から処理
34に進み、処理35が、処理対象ループをDo30とする。処
理29と30がループ制御変数のレコード42を作り、処理31
と32の判定を経て、処理33がIAのレコード43を作る。 次に、第5図のインダクシヨンテーブルを入力とし
て、初期値生成部3が、登録された各インダクション変
数ないし、ループ繰り返し回数とループ実行中値が変わ
らないループ不変変数を含む非線形式によって定義され
る拡張インダクション変数に対して、ループ内で値が変
わらないループ不変変数である初期値を検出し、第7図
のようにインダクシヨンテーブルを更新する。必要なら
ばこれを計算するコードを生成する。 処理の概要を第6図にフローチヤートで示す。 まず、第5図のDo10ループのレコード36より、Do10ル
ープのインダクシヨン変数について処理を行う。第6図
の処理60が、制御変数Iについて初期値1を検出し、処
理63が、1を第7図に示すインダクシヨンテーブルのレ
コード39のフイールド70に登録する。第5図のインダク
シヨンテーブルのレコード40のJついては、ループの外
側からの依存が検出できないため、処理61の判定から処
理64が、第8図に示す代入文14を生成、挿入し、新たに
導入した左辺の変数Jφをインダクシヨンテーブルのレ
コード40のフイールド70に登録し、第7図のレコード40
のようにする。第5図のレコード41のRについても同様
に、処理64が第8図に示す代入文15を生成、挿入し、新
たに導入した変数Rφをインダクシヨンテーブルのレコ
ード41のフイールド70に登録し、第7図のレコード41の
ようにする。 この後、処理65による判定を経て、Do30ループの処理
に移る。 ループ制御変数Iについて、初期値1を検出し処理63
がレコード42のフイールド71に登録し、第7図の42のよ
うにする。同様に、IAについても、処理60が、文20の定
義を検出し、処理63がレコード43のフイールド71に登録
し、第7図の43のようにする。 更新されたインダクシヨンテーブル7を入力として、
公差・公比生成部4が、インダクシヨン変数に対して公
差か公比ないし拡張公差か拡張公比のいずれかを検出す
る。 処理の概要を第9図に示す。 まず、Do10ループについて処理を施す。 Do10ループは、内側にループを持たないため、処理85
の判定から処理93に進む。Jは右辺を統括する演算子が
加算であるため、処理94が公差5を検出し、インダクシ
ヨンテーブルのレコード40のフイールド76に5を登録
し、79にはnilを登録する。Rは右辺を統括する演算子
が乗算であるため、処理95が公比Aを検出し、インダク
シヨンテーブル41のフイールド76にnilを79にAを登録
する。 この後、処理92による判定を経て、Do30ループの処理
に移る。 IAについては、内側ループ(Do20)についてインダク
シヨン変数であるため、処理85の判定から処理86に進
む。処理86がDo20ループ内の文25を検出した後、処理87
により、この公差・公比生成部が再帰的に呼ばれる。こ
の時は、Do20は内側ループを持たないため、Do10ループ
のJと同様公差1を検出し、インダクシヨンテーブルの
レコード46のフイールド78に1を81にnilを登録し、呼
び出し元へもどる。フイールド78の1が公差であるた
め、処理89へ進む。処理89は、内側ループのループ長
が、レコード44よりIであるため、公差1の内側ループ
I回、回る時の総和を求める。この例だと、Iは当該ル
ープ(Do30ループ)の制御変数であるため、ループ1回
目からI回目まで1を加えた総和はIとなり、これがIA
の拡張公差である。これをインダクシヨンテーブル43の
フイールド77に登録し、フイールド80にはnilを登録す
る。上記のようにして、並列化対象ループのインダクシ
ヨン変数、J,Rの公差又は公比、IAの拡張公差を得るこ
とができた。第7図のインダクシヨンテーブルで空白の
フイールドは必要ないため、値を設定する処理は行わな
い。 最後に、定義式を公比・公差ないし拡張公比か拡張公
差及びループ回数を用いた式に変換し、インダクシヨン
変数ないし拡張インダクション変数における複数のルー
プ回数にまたがる依存を削除する。 第7図のインダクシヨンテーブルを入力として、式変
換部5の処理フローを第10図に示す。これにより、第8
図のソースプログラムは第11図のようになる。 まず、Do10ループについて処理を施す。内側にループ
を持たないため、処理100の判定から処理102に進み、イ
ンダクシヨン変数Jの時は、処理103が、第8図の文17
を第11図の文107に置換し、インダクシヨン変数Rの時
は、処理104が第8図の文18を第11図の文108に置換す
る。 この後、処理105の判定を経て、Do30ループの処理に
進む。拡張インダクシヨン変数IAは、内側ループでイン
ダクシヨン変数であるため、処理100の判定から、処理1
01に進む。処理101は、第8図の文22と文23の間に、第1
1図に示す様に文109を挿入する。 以上のようにして、第3図のプログラムを第11図に変
換すると、Do10ループ、Do30ループの各繰り返し回数ご
とに全く独立に並列実行することが可能となる。ループ
の繰り返し回数をまたがる依存は無いため、プロセツサ
間に通信が無い並列機でも並列処理可能となる。第12図
にその様子を示す。 〔発明の効果〕 本発明によれば、FORTRAN etcのプログラムによく現
われる、再帰的に定義されるインダクシヨン変数の再帰
性を解消することができる。 この結果、並列に実行するプロセツサの間に通信手段
が無いマシンでも並列に実行することができ、また、通
信する手段があるマシンについても通信によるオーバヘ
ツドを削減することができる。このようにして、並列マ
シン向きの実行性能の高いオブジエクトコードを生成す
ることができる。
型の高級言語から、並列に実行するのに好適なオブジエ
クトプログラムを生成する方式に関する。 〔従来の技術〕 コンパイラの最適化の対象としてのループ基本インダ
クシヨン変数とは次のように定義することができる。ル
ープにおいて、各繰り返し回数で再帰的に定義され、ル
ープの繰り返し回数Iの関数である。 典型的な例では、次のようなプログラムが書ける。 ループ制御変数Iをはじめとして、FORTRANのソース
プログラムには、このような形で定義される計算の出現
頻度は非常に高い。しかも、ループの回数に同期して変
化する。このような性質を利用して、従来の逐次型計算
機のためには種々の最適化手法が研究されており、A.V.
Aho J.D.Ullmanの“Principles of Compiler Design"に
もP466−471にInduction variable eleminationとして
論じられている。 これらの手法は、逐次的に実行する計算機に対して
は、有効であるが、並列処理に対する最適化と言うこと
はできず、並列処理向上にインダクシヨン変数の最適化
について論じているようなものはない。 本発明の適用対象は、以下のような条件を満たす基本
インダクシヨン変数に限る。 (2) aはループが繰り返されても値が変わらない、
ループ不変変数である。 このような基本インダクシヨン変数を以下インダクシ
ョン変数と呼ぶ。 〔発明が解決しようとする問題点〕 従来技術では、再帰的に定義されるインダクシヨン変
数の計算は、逐次的に実行されるか又は、プロセツサ間
のネツトワーク通信を利用して行なわれてきた。しか
し、数値計算の分野で用いられるFORTRAN言語は、Doル
ープの制御変数をはじめとして、配列の添字など、再帰
的に定義されるインダクシヨン変数がしばしば現れ、こ
れらについて最適化を施すことが、オブジエクト性能の
向上にもつながる。しかし、Doループの繰り返しを並列
に実行する並列計算機システムにおいては、これらのイ
ンダクシヨン変数の最適化について配慮されていない。 たとえば、第3図のようなプログラムで、Do10ループ
やDo30ループについて、ループの繰り返し回数ごとに並
列に行なうと次のような障害が起こる。文17がJの定義
式であるが、ループI回目の実行を行うためには、ルー
プのI−1回目に計算したJの値を使う。第12図のよう
に並列に実行するためには、I−1回目の計算を実行す
るプロセツサからI回目の計算を実行するプロセツサ
へ、Jの値を転送しなければならない。従つて、各プロ
セツサ間の通信手段の無い並列機では並列実行すること
ができず、通信手段があつても、1回前の計算が終われ
るのを待つため並列性は損われ、さらに、データの通信
のために時間がかかる。これは、文18のRや、文24のIA
にも同様である。1回目に計算した値を用いて、新たな
値を定義する。再帰的な定義は、このように、並列処理
にとつては、逐次処理に比べ、実行効率劣化の大きな要
因となる。 本発明の目的は、これらFORTRANプログラムにしばし
ば出現する再帰的なインダクシヨン変数の計算を、再帰
性が無くなるよう、ループ回数を用いた式に変換し、プ
ロセツサ間の通信を行うことなく並列に実行するオブジ
エクトを生成することである。 〔問題点を解決するための手段〕 上記目的は、コンパイラの並列処理部において、イン
ダクシヨン変数検出部と、初期値生成部と、公差・公比
生成部と、式変換部を設けることにより達成される。 インダクシヨン変数検出部は、先立つ処理により検出
した並列化の対象とするループについて、ループないし
ループの内側ループで再帰的に定義されているインダク
シヨン変数を検出し、該インダクシヨン変数の値がルー
プ繰り返し回数と、ループ実行中値が変わらないループ
不変変数のみによつて計算できるか否かを判定する。 初期値生成部は、上記条件を満足したインダクション
変数ないし、ループ繰り返し回数とループ実行中値が変
わらないループ不変変数を含む非線形式によって定義さ
れる拡張インダクション変数の初期値を設定するコード
を生成する。 公差・公比生成部は、前記条件を満足したインダクシ
ヨン変数の公差値か又は公比値ないし、隣り合うループ
制御変数に対する2つの拡張インダクション変数の差分
や比である拡張公差値か又は拡張公比値を設定するコー
ドを生成する。 式変換部は、再帰的に定義されていたインダクシヨン
変数ないし拡張インダクション変数の定義式を、ループ
不変な初期値と、公差値または公比値ないし拡張公差値
か又は拡張公比値を用いた定義式に変換する。 以上のようにして、再帰的な定義式を、再帰的ではな
い定義式に変換することができ、その結果この計算を通
信を使うことなく、並列に実行できるようになる。 〔作用〕 インダクシヨン変数の検出部、初期値生成部、公差・
公比生成部、定義式変換部は、ループ中にあるインダク
シヨン変数に対して、以下のように作用する。 インダクシヨン変数の検出部は、第3図の並列化対象
ループDo10については、インダクシヨン変数JとRを検
出する。もう1つの並列化対象ループDo30については、
拡張インダクシヨン変数IAを検出する。 初期値生成部は、第3図のDo10ループのJとRに対し
ては、ループに入る前のJとRの値を保持する新しい変
数JφおよびRφを用いて、初期値を定義する式を生成
する。もう1つの並列化対象ループDo30については、IA
の初期値1を検出する。 公差・公比生成部は、第3図のDo10ループのJについ
ては公差5を、Rについては公比Aを検出する。Do30ル
ープのIAについては拡張公差Iを生成する。 式変換部は、ループ繰り返し回数とループで値の変わ
らない不変式を用いた式に変換する。第3図のDo10ルー
プのJについては、J=J+5をJ=Jφ+5*Iで置
換し、Rについては、R=Rφ*A**Iで置換する。
Do30ループのIAについては、IA=1+I*(I−1)/2
を挿入する。 上記のようにして、インダクシヨン変数の再帰性を除
き、プロセツサ間でデータの通信を行なうことなく並列
に実行することができる。 〔実施例〕 以下、本発明のFORTRANコンパイラにおける実施例を
図表を参照しつつ説明する。 第2図に、本発明を適用するコンパイラ全体の構造を
示す。第2図の構文解析部9がFORTRANのソースプログ
ラム12を入力し、これを中間語6に変換する。中間部10
はこれを入力として、最適化や並列化を行い、中間語6
を変形する。コード生成部11は、中間部10が変形した中
間語からオブジエクトコード13を生成する。本発明は中
間部10に係り、オブジエクトコード7の並列実行できる
部分をふやすことにより実行効率を上げるものである。 第2図の中間部10のうち、並列化のための式変換に係
わる部分の構成を第1図に示す。第2図の入力するソー
スプログラム12の例として、第3図にFORTRANプログラ
ムをあげ、説明する。第3図のFORTRANプログラムか
ら、Do10のループとDo30のループを並列に実行するプロ
グラムを生成する。 第1図において、インダクシヨン変数検出部2は、ソ
ースプログラムを構文解析した中間語6を入力として、
第4図のフローチヤートのように動作し、第5図に示す
インダクシヨンテーブル7を作る。 インダクシヨン変数検出処理は並列処理対象のループ
の中の最内側ループから、並列処理対象ループに至るま
で順次、行なう。まず処理28が、Do10のループを処理対
象とする。処理29が基本インダクシヨン変数として、ル
ープ制御変数Iを検出し、処理30がIのレコード39を作
る。処理31の判定を経て、処理29が基本インダクシヨン
変数Jの定義文17を検出し、処理30がJのレコード40を
作る。同様に、処理30が、Rのレコード41を作る。 Do30のループについては、処理28が、まずDo20を処理
対象ループとして、Jのレコード44、IBのレコード45、
IAのレコード46を作る。さらに、処理32の判定から処理
34に進み、処理35が、処理対象ループをDo30とする。処
理29と30がループ制御変数のレコード42を作り、処理31
と32の判定を経て、処理33がIAのレコード43を作る。 次に、第5図のインダクシヨンテーブルを入力とし
て、初期値生成部3が、登録された各インダクション変
数ないし、ループ繰り返し回数とループ実行中値が変わ
らないループ不変変数を含む非線形式によって定義され
る拡張インダクション変数に対して、ループ内で値が変
わらないループ不変変数である初期値を検出し、第7図
のようにインダクシヨンテーブルを更新する。必要なら
ばこれを計算するコードを生成する。 処理の概要を第6図にフローチヤートで示す。 まず、第5図のDo10ループのレコード36より、Do10ル
ープのインダクシヨン変数について処理を行う。第6図
の処理60が、制御変数Iについて初期値1を検出し、処
理63が、1を第7図に示すインダクシヨンテーブルのレ
コード39のフイールド70に登録する。第5図のインダク
シヨンテーブルのレコード40のJついては、ループの外
側からの依存が検出できないため、処理61の判定から処
理64が、第8図に示す代入文14を生成、挿入し、新たに
導入した左辺の変数Jφをインダクシヨンテーブルのレ
コード40のフイールド70に登録し、第7図のレコード40
のようにする。第5図のレコード41のRについても同様
に、処理64が第8図に示す代入文15を生成、挿入し、新
たに導入した変数Rφをインダクシヨンテーブルのレコ
ード41のフイールド70に登録し、第7図のレコード41の
ようにする。 この後、処理65による判定を経て、Do30ループの処理
に移る。 ループ制御変数Iについて、初期値1を検出し処理63
がレコード42のフイールド71に登録し、第7図の42のよ
うにする。同様に、IAについても、処理60が、文20の定
義を検出し、処理63がレコード43のフイールド71に登録
し、第7図の43のようにする。 更新されたインダクシヨンテーブル7を入力として、
公差・公比生成部4が、インダクシヨン変数に対して公
差か公比ないし拡張公差か拡張公比のいずれかを検出す
る。 処理の概要を第9図に示す。 まず、Do10ループについて処理を施す。 Do10ループは、内側にループを持たないため、処理85
の判定から処理93に進む。Jは右辺を統括する演算子が
加算であるため、処理94が公差5を検出し、インダクシ
ヨンテーブルのレコード40のフイールド76に5を登録
し、79にはnilを登録する。Rは右辺を統括する演算子
が乗算であるため、処理95が公比Aを検出し、インダク
シヨンテーブル41のフイールド76にnilを79にAを登録
する。 この後、処理92による判定を経て、Do30ループの処理
に移る。 IAについては、内側ループ(Do20)についてインダク
シヨン変数であるため、処理85の判定から処理86に進
む。処理86がDo20ループ内の文25を検出した後、処理87
により、この公差・公比生成部が再帰的に呼ばれる。こ
の時は、Do20は内側ループを持たないため、Do10ループ
のJと同様公差1を検出し、インダクシヨンテーブルの
レコード46のフイールド78に1を81にnilを登録し、呼
び出し元へもどる。フイールド78の1が公差であるた
め、処理89へ進む。処理89は、内側ループのループ長
が、レコード44よりIであるため、公差1の内側ループ
I回、回る時の総和を求める。この例だと、Iは当該ル
ープ(Do30ループ)の制御変数であるため、ループ1回
目からI回目まで1を加えた総和はIとなり、これがIA
の拡張公差である。これをインダクシヨンテーブル43の
フイールド77に登録し、フイールド80にはnilを登録す
る。上記のようにして、並列化対象ループのインダクシ
ヨン変数、J,Rの公差又は公比、IAの拡張公差を得るこ
とができた。第7図のインダクシヨンテーブルで空白の
フイールドは必要ないため、値を設定する処理は行わな
い。 最後に、定義式を公比・公差ないし拡張公比か拡張公
差及びループ回数を用いた式に変換し、インダクシヨン
変数ないし拡張インダクション変数における複数のルー
プ回数にまたがる依存を削除する。 第7図のインダクシヨンテーブルを入力として、式変
換部5の処理フローを第10図に示す。これにより、第8
図のソースプログラムは第11図のようになる。 まず、Do10ループについて処理を施す。内側にループ
を持たないため、処理100の判定から処理102に進み、イ
ンダクシヨン変数Jの時は、処理103が、第8図の文17
を第11図の文107に置換し、インダクシヨン変数Rの時
は、処理104が第8図の文18を第11図の文108に置換す
る。 この後、処理105の判定を経て、Do30ループの処理に
進む。拡張インダクシヨン変数IAは、内側ループでイン
ダクシヨン変数であるため、処理100の判定から、処理1
01に進む。処理101は、第8図の文22と文23の間に、第1
1図に示す様に文109を挿入する。 以上のようにして、第3図のプログラムを第11図に変
換すると、Do10ループ、Do30ループの各繰り返し回数ご
とに全く独立に並列実行することが可能となる。ループ
の繰り返し回数をまたがる依存は無いため、プロセツサ
間に通信が無い並列機でも並列処理可能となる。第12図
にその様子を示す。 〔発明の効果〕 本発明によれば、FORTRAN etcのプログラムによく現
われる、再帰的に定義されるインダクシヨン変数の再帰
性を解消することができる。 この結果、並列に実行するプロセツサの間に通信手段
が無いマシンでも並列に実行することができ、また、通
信する手段があるマシンについても通信によるオーバヘ
ツドを削減することができる。このようにして、並列マ
シン向きの実行性能の高いオブジエクトコードを生成す
ることができる。
【図面の簡単な説明】
第1図は並列化処理部の一部、第2部はコンパイラの全
体図、第3図は実施例説明のためのソースプログラム
例、第4図はインダクシヨン変数検出部の処理概要、第
5図はインダクシヨンテーブル、第6図は初期値生成部
の処理概要、第7図はインダクシヨンテーブル、第8図
は初期値生成部の変換例、第9図は公差・公比生成部の
処理概要、第10図は定義式変換部の処理概要、第11図は
並列化処理部の出力であるプログラムの変換例、第12図
はプログラムの並列実行列である。 1……自動並列化部、2……インダクシヨン変数検出
部、3……初期値生成部、4……公差・公比生成部、5
……式変換部、6……中間語、7……インダクシヨンテ
ーブル、8……FORTRANコンパイラ、9……構文解析
部、10……中間部、11……コード生成部、12……FORTRA
Nソースプログラム、13……オブジエクトコード、14〜2
7……FORTRANプログラム、28〜35……処理部、36〜38…
…ループテーブル、39〜46……インダクシヨンテーブ
ル、60〜65……処理部、70〜81……インダクシヨンテー
ブル、85〜95……処理部、100〜105……処理部、107〜1
09……FORTRAN実行文、110〜112……Host計算機の実
行、113〜118……プロセツサエレメントによる並列実
行。
体図、第3図は実施例説明のためのソースプログラム
例、第4図はインダクシヨン変数検出部の処理概要、第
5図はインダクシヨンテーブル、第6図は初期値生成部
の処理概要、第7図はインダクシヨンテーブル、第8図
は初期値生成部の変換例、第9図は公差・公比生成部の
処理概要、第10図は定義式変換部の処理概要、第11図は
並列化処理部の出力であるプログラムの変換例、第12図
はプログラムの並列実行列である。 1……自動並列化部、2……インダクシヨン変数検出
部、3……初期値生成部、4……公差・公比生成部、5
……式変換部、6……中間語、7……インダクシヨンテ
ーブル、8……FORTRANコンパイラ、9……構文解析
部、10……中間部、11……コード生成部、12……FORTRA
Nソースプログラム、13……オブジエクトコード、14〜2
7……FORTRANプログラム、28〜35……処理部、36〜38…
…ループテーブル、39〜46……インダクシヨンテーブ
ル、60〜65……処理部、70〜81……インダクシヨンテー
ブル、85〜95……処理部、100〜105……処理部、107〜1
09……FORTRAN実行文、110〜112……Host計算機の実
行、113〜118……プロセツサエレメントによる並列実
行。
フロントページの続き
(56)参考文献 特開 昭63−75935(JP,A)
後藤志津雄,金田泰,“Fortra
n最適化の強化 −インダクション条件
に着目したループ内条件文の削除方法
−”,情報処理学会第32回(昭和61年前
期)全国大会講演論文集(▲I▼),p
p.397−398,(1986年3月)
江良倫夫,田中義一,長堀正,“FO
RTRAN最適化の強化 −インダクシ
ョン変数の効率的なベクトル化方式
−”,情報処理学会第35回(昭和62年後
期)全国大会講演論文集(▲I▼),p
p.855−856,(1987年9月)
(58)調査した分野(Int.Cl.7,DB名)
G06F 15/16 630
G06F 9/45
JICSTファイル(JOIS)
Claims (1)
- (57)【特許請求の範囲】 1.ソースプログラムを並列計算機で並列実行するため
のオブジェクトを生成するコンパイル方法において、 前記ソースプログラムから、並列化の対象とするループ
の中の再帰的に定義されるインダクション変数、又は前
記ループの内側ループのインダクション変数のうち、前
記ループにとってループ繰り返し回数とループ実行中に
値が変わらないループ不変変数を含む非線形式によって
定義される拡張インダクション変数を検出し、 前記インダクション変数の公比や公差、あるいは隣り合
うループ制御変数に対する2つの拡張インダクション変
数の差分や比である拡張公差や拡張公比を計算するため
のコードを生成し、 前記インダクション変数あるいは拡張インダクション変
数を、ループの繰り返し回数と、ループの実行中に不変
な初期値、公比値又は公差値、あるいは拡張公比値又は
拡張公差値とを用いて定義する式に変換することを特徴
とする並列化コンパイル方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP62139729A JP3053092B2 (ja) | 1987-06-05 | 1987-06-05 | 並列化コンパイル方法 |
US07/201,772 US5067068A (en) | 1987-06-05 | 1988-06-02 | Method for converting an iterative loop of a source program into parellelly executable object program portions |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP62139729A JP3053092B2 (ja) | 1987-06-05 | 1987-06-05 | 並列化コンパイル方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPS63304325A JPS63304325A (ja) | 1988-12-12 |
JP3053092B2 true JP3053092B2 (ja) | 2000-06-19 |
Family
ID=15252029
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP62139729A Expired - Lifetime JP3053092B2 (ja) | 1987-06-05 | 1987-06-05 | 並列化コンパイル方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5067068A (ja) |
JP (1) | JP3053092B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101609122B1 (ko) | 2015-01-23 | 2016-04-20 | 전경배 | 신분증 케이스 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03150636A (ja) | 1989-11-08 | 1991-06-27 | Matsushita Electric Ind Co Ltd | コンパイル方法 |
US5255385A (en) * | 1990-02-26 | 1993-10-19 | Hitachi, Ltd. | Method of testing program, and compiler and program testing tool for the method |
JPH0782440B2 (ja) * | 1990-07-05 | 1995-09-06 | 工業技術院長 | 論理合成の演算割り当て方法 |
JPH0475139A (ja) * | 1990-07-18 | 1992-03-10 | Toshiba Corp | ループ並列化装置 |
JP2818016B2 (ja) * | 1990-08-09 | 1998-10-30 | 株式会社日立製作所 | プロセス並列実行方法および装置 |
IL100989A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Analysis of inductive expressions in multilingual mehadoptimization |
JPH04367033A (ja) * | 1991-06-14 | 1992-12-18 | Hitachi Ltd | コンパイル方法 |
US5293631A (en) * | 1991-08-06 | 1994-03-08 | Hewlett-Packard Company | Analysis and optimization of array variables in compiler for instruction level parallel processor |
US5450554A (en) * | 1991-11-11 | 1995-09-12 | Matsushita Electric Industrial Co., Ltd. | Apparatus for detecting possibility of parallel processing and method thereof and a program translation apparatus utilized therein |
US5551039A (en) * | 1992-02-03 | 1996-08-27 | Thinking Machines Corporation | Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements |
JPH05224711A (ja) * | 1992-02-13 | 1993-09-03 | Koyo Electron Ind Co Ltd | プログラマブルコントローラの制御方法 |
US6055627A (en) * | 1992-06-22 | 2000-04-25 | Hitachi, Ltd. | Compiling method of accessing a multi-dimensional array and system therefor |
JPH07110800A (ja) * | 1993-10-13 | 1995-04-25 | Matsushita Electric Ind Co Ltd | 最適化並列コンパイル装置及び最適化並列コンパイル方法 |
JP2669603B2 (ja) * | 1994-12-15 | 1997-10-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンパイラにおけるコード生成方法及びコンパイラ |
US6272676B1 (en) * | 1998-01-13 | 2001-08-07 | Intel Corporation | Method and apparatus for finding loop— lever parallelism in a pointer based application |
US7624387B2 (en) * | 2003-04-10 | 2009-11-24 | Panasonic Corporation | Compiler, program product, compilation device, communication terminal device, and compilation method |
GB0325553D0 (en) * | 2003-11-01 | 2003-12-03 | Ibm | Method and apparatus for activating/deactivating run-time determined software routines in Java compiled bytecode applications |
JP5580416B2 (ja) * | 2010-07-05 | 2014-08-27 | パナソニック株式会社 | プログラム生成装置、プログラム生産方法及びプログラム |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4309756A (en) * | 1971-02-17 | 1982-01-05 | Beckler Robert I | Method of automatically evaluating source language logic condition sets and of compiling machine executable instructions directly therefrom |
US4145733A (en) * | 1974-03-29 | 1979-03-20 | Massachusetts Institute Of Technology | Data processing apparatus for highly parallel execution of stored programs |
JPS5194734A (en) * | 1975-02-19 | 1976-08-19 | Tajushorisochino enzanseigyohoshiki | |
US4085450A (en) * | 1976-12-29 | 1978-04-18 | Burroughs Corporation | Performance invarient execution unit for non-communicative instructions |
JPS5440537A (en) * | 1977-09-07 | 1979-03-30 | Hitachi Ltd | Pipeline control system |
US4215416A (en) * | 1978-03-22 | 1980-07-29 | Trw Inc. | Integrated multiplier-accumulator circuit with preloadable accumulator register |
JPS5853368B2 (ja) * | 1978-08-30 | 1983-11-29 | 三菱電機株式会社 | シ−ケンスコントロ−ラ |
JPS6024985B2 (ja) * | 1978-08-31 | 1985-06-15 | 富士通株式会社 | デ−タ処理方式 |
US4430707A (en) * | 1981-03-05 | 1984-02-07 | Burroughs Corporation | Microprogrammed digital data processing system employing multi-phase subroutine control for concurrently executing tasks |
JPS5856152A (ja) * | 1981-09-30 | 1983-04-02 | Fujitsu Ltd | プログラム変換装置 |
US4468736A (en) * | 1982-06-08 | 1984-08-28 | Burroughs Corporation | Mechanism for creating dependency free code for multiple processing elements |
US4466061A (en) * | 1982-06-08 | 1984-08-14 | Burroughs Corporation | Concurrent processing elements for using dependency free code |
US4484272A (en) * | 1982-07-14 | 1984-11-20 | Burroughs Corporation | Digital computer for executing multiple instruction sets in a simultaneous-interleaved fashion |
US4594655A (en) * | 1983-03-14 | 1986-06-10 | International Business Machines Corporation | (k)-Instructions-at-a-time pipelined processor for parallel execution of inherently sequential instructions |
US4564901A (en) * | 1983-07-21 | 1986-01-14 | Burroughs Corporation | Method of performing a sequence of related activities via multiple asynchronously intercoupled digital processors |
US4642764A (en) * | 1984-08-13 | 1987-02-10 | International Business Machines Corporation | Method of developing formal identities and program bases in an optimizing compiler |
US4667290A (en) * | 1984-09-10 | 1987-05-19 | 501 Philon, Inc. | Compilers using a universal intermediate language |
US4763255A (en) * | 1984-10-31 | 1988-08-09 | International Business Machines Corporation | Method for generating short form instructions in an optimizing compiler |
US4825360A (en) * | 1986-07-30 | 1989-04-25 | Symbolics, Inc. | System and method for parallel processing with mostly functional languages |
JPH0814817B2 (ja) * | 1986-10-09 | 1996-02-14 | 株式会社日立製作所 | 自動ベクトル化方法 |
US4802091A (en) * | 1986-10-31 | 1989-01-31 | International Business Machines Corporation | Method for improving the efficiency of arithmetic code generation in an optimizing compiler using the technique of reassociation |
US4833599A (en) * | 1987-04-20 | 1989-05-23 | Multiflow Computer, Inc. | Hierarchical priority branch handling for parallel execution in a parallel processor |
US4943912A (en) * | 1987-10-13 | 1990-07-24 | Hitachi, Ltd. | Parallel processor system having control processor and array control apparatus for selectively activating different processors |
-
1987
- 1987-06-05 JP JP62139729A patent/JP3053092B2/ja not_active Expired - Lifetime
-
1988
- 1988-06-02 US US07/201,772 patent/US5067068A/en not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
後藤志津雄,金田泰,"Fortran最適化の強化 −インダクション条件に着目したループ内条件文の削除方法−",情報処理学会第32回(昭和61年前期)全国大会講演論文集(▲I▼),pp.397−398,(1986年3月) |
江良倫夫,田中義一,長堀正,"FORTRAN最適化の強化 −インダクション変数の効率的なベクトル化方式−",情報処理学会第35回(昭和62年後期)全国大会講演論文集(▲I▼),pp.855−856,(1987年9月) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101609122B1 (ko) | 2015-01-23 | 2016-04-20 | 전경배 | 신분증 케이스 |
Also Published As
Publication number | Publication date |
---|---|
JPS63304325A (ja) | 1988-12-12 |
US5067068A (en) | 1991-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3053092B2 (ja) | 並列化コンパイル方法 | |
US9645803B2 (en) | Methods and systems for forming an adjusted perform range | |
US4833606A (en) | Compiling method for vectorizing multiple do-loops in source program | |
JP3317825B2 (ja) | ループ最適化翻訳処理方法 | |
JPH0830561A (ja) | プログラムの並列化実行方法及び並列化実行コンパイラ | |
JP2921190B2 (ja) | 並列実行方式 | |
JPS62159274A (ja) | 条件分岐の分割・複写によるベクトル化方式 | |
Das et al. | Index array flattening through program transformation | |
US6059841A (en) | Updating data dependencies for loop strip mining | |
JPH07110800A (ja) | 最適化並列コンパイル装置及び最適化並列コンパイル方法 | |
JP2001125792A (ja) | 最適化促進装置 | |
JPH04307624A (ja) | ループ最適化方法及び装置 | |
JP3028821B2 (ja) | 並列化コンパイル方法 | |
WO2011090032A1 (ja) | 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置 | |
JPS63155264A (ja) | ベクトル計算機用言語チユ−ニング処理方式 | |
JP2956591B2 (ja) | ループ外への条件付き飛び出しがあるループの並列化方法及び装置 | |
JP3311775B2 (ja) | ポインタベクトル化方式 | |
JP2789977B2 (ja) | 実行情報採取用プログラム生成装置 | |
JPH09160784A (ja) | 並列化コンパイル方式 | |
McFarlin et al. | Library function selection in compiling Octave | |
JP3156688B2 (ja) | コンパイルシステム,コンパイル方法およびコンパイラを記憶した記録媒体 | |
JPH04343140A (ja) | コンパイラの最適化処理方法 | |
JPS62204374A (ja) | 2倍演算最適化処理方式 | |
JPH09319722A (ja) | 並列化コンパイル方法 | |
JP3233467B2 (ja) | プログラム変換方法および装置 |