JPS63304325A - 並列化コンパイル方法 - Google Patents
並列化コンパイル方法Info
- Publication number
- JPS63304325A JPS63304325A JP62139729A JP13972987A JPS63304325A JP S63304325 A JPS63304325 A JP S63304325A JP 62139729 A JP62139729 A JP 62139729A JP 13972987 A JP13972987 A JP 13972987A JP S63304325 A JPS63304325 A JP S63304325A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- induction
- tolerance
- induction variable
- variable
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
本発明は、並列計算機システムに係り、特に遂行実行型
の高級言語から、並列に実行するのに好適なオブジェク
トプログラムを生成する方式に関する。
の高級言語から、並列に実行するのに好適なオブジェク
トプログラムを生成する方式に関する。
コンパイラの最適化の対象としてのループ基本インダク
シヨン変数とは次のように定義することができる。ルー
プにおいて、各繰り返し回数で再帰的に定義され、ルー
プの繰り返し回数工の関数である。
シヨン変数とは次のように定義することができる。ルー
プにおいて、各繰り返し回数で再帰的に定義され、ルー
プの繰り返し回数工の関数である。
典型的な例では、次のようなプログラムが書ける。Do
10 I=1.v K=に十A (1) J=J+1 1 0 CONTINUE ループ制御変数工をはじめとして、FORTRANのソ
ースプログラムには、このような形で定義される計算の
出現頻度は非常に高い、しかも、ループの回数に同期し
て変化する。このような性質を利用して、従来の逐次型
計算機のためには種々の最適化手法が研究されており、
A、V、Aho J、D。
10 I=1.v K=に十A (1) J=J+1 1 0 CONTINUE ループ制御変数工をはじめとして、FORTRANのソ
ースプログラムには、このような形で定義される計算の
出現頻度は非常に高い、しかも、ループの回数に同期し
て変化する。このような性質を利用して、従来の逐次型
計算機のためには種々の最適化手法が研究されており、
A、V、Aho J、D。
Llllmanの“Pr1nciples of Co
mpiler Design”にもP2S5−P471
に1nduction variablaelemin
ationとして論じられている。
mpiler Design”にもP2S5−P471
に1nduction variablaelemin
ationとして論じられている。
これらの手法は、逐次的に実行する計算機に付しては、
有効であるが、並列処理に対する最適化と言うことはで
きず、並列処理向上にインダクシヨン変数の最適化につ
いて論じているものはない。
有効であるが、並列処理に対する最適化と言うことはで
きず、並列処理向上にインダクシヨン変数の最適化につ
いて論じているものはない。
本発明の適用対象は、以下のような条件を満たす基本イ
ンダクシヨン変数に限る。
ンダクシヨン変数に限る。
(2)aはループが繰り返されても値が変わらない、ル
ープ不変変数である。
ープ不変変数である。
このような基本インダクシヨン変数を以下イオダクショ
ン変数と呼ぶ。
ン変数と呼ぶ。
従来技術では、再帰的に定義されるインダクシヨン変数
の計算は、逐次的に実行されるか又は、プロセッサ間の
ネットワーク通信を利用して行なわれてきた。しかし、
数値計算の分野で用いられるFORTRAN言語は、D
Oループの制御変数をはじめとして、配列の添字など、
再帰的な定義されるインダクシヨン変数がしばしば現れ
、これらについて最適化を施すことが、オブジェクト性
能の向上にもつながる。しかし、DOループの繰り返し
を並列に実行する並列計算機システムにおいては、これ
らのインダクシヨン変数の最適化について配慮されてい
ない。
の計算は、逐次的に実行されるか又は、プロセッサ間の
ネットワーク通信を利用して行なわれてきた。しかし、
数値計算の分野で用いられるFORTRAN言語は、D
Oループの制御変数をはじめとして、配列の添字など、
再帰的な定義されるインダクシヨン変数がしばしば現れ
、これらについて最適化を施すことが、オブジェクト性
能の向上にもつながる。しかし、DOループの繰り返し
を並列に実行する並列計算機システムにおいては、これ
らのインダクシヨン変数の最適化について配慮されてい
ない。
たとえば、第3図のようなプログラムで、D。
10ループやDo30ループについて、ループの繰り返
し回数ごとに並列に行なうと次のような障害が起こる0
文17がJの定義式であるが、ループの1回目の実行を
行うためには、ループのI −1回目に計算したJの値
を使う、第12図のように並列に実行するためには、I
−1回目の計算を実行するプロセッサから1回目の計算
を実行するプロセッサへ、Jの値を転送しなければなら
ない。
し回数ごとに並列に行なうと次のような障害が起こる0
文17がJの定義式であるが、ループの1回目の実行を
行うためには、ループのI −1回目に計算したJの値
を使う、第12図のように並列に実行するためには、I
−1回目の計算を実行するプロセッサから1回目の計算
を実行するプロセッサへ、Jの値を転送しなければなら
ない。
従って、各プロセッサ間の通信手段の無い並列機では並
列実行することができず1通信手段があっても、1回前
の計算が終われるのを待つため並列性は損われ、さらに
、データの通信のために時間がかかる。これは、文18
のRや、文24のIAにも同様である。1回目に計算し
た値を用いて、新たな値を定義する。再帰的な定義は、
このように、並列処理にとっては、逐次処理に比べ、実
行効率劣化の大きな要因となる。
列実行することができず1通信手段があっても、1回前
の計算が終われるのを待つため並列性は損われ、さらに
、データの通信のために時間がかかる。これは、文18
のRや、文24のIAにも同様である。1回目に計算し
た値を用いて、新たな値を定義する。再帰的な定義は、
このように、並列処理にとっては、逐次処理に比べ、実
行効率劣化の大きな要因となる。
本発明の目的は、これらFORTRANプログラムにし
ばしば出現する再帰的なインダクシヨン変数の計算を、
再帰性が無くなるよう、ループ回数を用いた式に変換し
、プロセッサ間の通信を行うことなく並列に実行するオ
ブジェクトを生成することである。
ばしば出現する再帰的なインダクシヨン変数の計算を、
再帰性が無くなるよう、ループ回数を用いた式に変換し
、プロセッサ間の通信を行うことなく並列に実行するオ
ブジェクトを生成することである。
上記目的は、コンパイラの並列処理部において、インダ
クシヨン変数検出部と、初期値生成部と。
クシヨン変数検出部と、初期値生成部と。
公差・公比生成部と、式変換部を設けることにより達成
される。
される。
インダクシヨン変数検出部は、先立つ処理により検出し
た並列化の対象とするループについて、再帰的に定義さ
れているインダクシヨン変数を検出し、該インダクシヨ
ン変数の値がループ繰り返し回数と、ループ実行中値が
変わらないループ不変変数のみによって計算できるか否
かを判定する。
た並列化の対象とするループについて、再帰的に定義さ
れているインダクシヨン変数を検出し、該インダクシヨ
ン変数の値がループ繰り返し回数と、ループ実行中値が
変わらないループ不変変数のみによって計算できるか否
かを判定する。
初期値生成部は、前記条件を満足したインダクシヨン変
数の初期値を設定するコードを生成する。
数の初期値を設定するコードを生成する。
公差・公比生成部は、前記条件を満足したインダクシヨ
ン変数の公差値か又は公比値を設定するコードを生成す
る。
ン変数の公差値か又は公比値を設定するコードを生成す
る。
式変換部は、再帰的に定義されていたインダクシヨン変
数の定義式を、ループ不変な初期値と、公差値または公
比値を用いた定義式に変換する。
数の定義式を、ループ不変な初期値と、公差値または公
比値を用いた定義式に変換する。
以上のようにして、再帰的な定義式を、再帰的ではない
定義式に変換することができ、その結果この計算を通信
を使うことなく、並列に実行できるようになる。
定義式に変換することができ、その結果この計算を通信
を使うことなく、並列に実行できるようになる。
インダクシヨン変数の検出部、初期値生成部、公差・公
比生成部、定義式変換部は、ループ中にあるインダクシ
ヨン変数に対して、以下のように作用する。
比生成部、定義式変換部は、ループ中にあるインダクシ
ヨン変数に対して、以下のように作用する。
インダクシヨン変数の検出部は、第3図の並列化対象ル
ープDolOについては、インダクシヨン変数JとRを
検出する。もう1つの並列化対象ループD030につい
ては、インダクシヨン変数IAを検出する。
ープDolOについては、インダクシヨン変数JとRを
検出する。もう1つの並列化対象ループD030につい
ては、インダクシヨン変数IAを検出する。
初期値生成部は、第3図のDolOループのJとRに対
しては、ループに入る前のJとRの値を保持する新しい
変数JφおよびRφを用いて、初期値を定義する式を生
成する。もう1つの並列化対象ループD o 30につ
いては、IAの初期値1を検出する。
しては、ループに入る前のJとRの値を保持する新しい
変数JφおよびRφを用いて、初期値を定義する式を生
成する。もう1つの並列化対象ループD o 30につ
いては、IAの初期値1を検出する。
公差・公比生成部は、第3図のD010ループのJにつ
いては公差5を、Rについては公比Aを検出する。Do
30ループのIAについては公差■−(I+1)/2を
生成する。
いては公差5を、Rについては公比Aを検出する。Do
30ループのIAについては公差■−(I+1)/2を
生成する。
大変換部は、ループ繰り返し回数とループで値の変わら
ない不変式を用いた式に変換する。第3図のDolOル
ープのJについては、J=J+5をJ=Jφ+5傘工で
置換し、Rについては、R=Rφ拳A傘傘工で置換する
。Do30ル−プのIAについては、IA=1+I傘(
I−1)/2を挿入する。
ない不変式を用いた式に変換する。第3図のDolOル
ープのJについては、J=J+5をJ=Jφ+5傘工で
置換し、Rについては、R=Rφ拳A傘傘工で置換する
。Do30ル−プのIAについては、IA=1+I傘(
I−1)/2を挿入する。
上記のようにして、インダクシヨン変数の再帰性を除き
、プロセッサ間でデータの通信を行なうことなく並列に
実行することができる。
、プロセッサ間でデータの通信を行なうことなく並列に
実行することができる。
以下、本発明のFORTRANコンパイラにおける実施
例を図表を参照しつつ説明する。
例を図表を参照しつつ説明する。
第2図に、本発明を適用するコンパイラ全体の構造を示
す、第2図の構文解析部9がFORTRANのソースプ
ログラム12を入力し、これを中間語6に変換する。中
間部10はこれを入力として、最適化や並列化を行い、
中間語6を変形する。コード生成部11は、中間部10
が変形した中間語からオブジェクトコード13を生成す
る0本発明は中間部10に係り、オブジェクトコード7
の並列実行できる部分をふやすことにより実行効率を上
げるものである。
す、第2図の構文解析部9がFORTRANのソースプ
ログラム12を入力し、これを中間語6に変換する。中
間部10はこれを入力として、最適化や並列化を行い、
中間語6を変形する。コード生成部11は、中間部10
が変形した中間語からオブジェクトコード13を生成す
る0本発明は中間部10に係り、オブジェクトコード7
の並列実行できる部分をふやすことにより実行効率を上
げるものである。
第2図の中間部10のうち、並列化のための式変換に係
わる部分の構成を第1図に示す、第2図の入力するソー
スプログラム12の例として、第3図にFORTRAN
プログラムをあげ、説明する。第3図のFORTRAN
プログラムから、DolOのループとDo30のループ
を並列に実行するプログラムを生成する。
わる部分の構成を第1図に示す、第2図の入力するソー
スプログラム12の例として、第3図にFORTRAN
プログラムをあげ、説明する。第3図のFORTRAN
プログラムから、DolOのループとDo30のループ
を並列に実行するプログラムを生成する。
第1図において、インダクシヨン変数検出部2は、ソー
スプログラムを構文解析した中間語6を入力として、第
4図のフローチャートのように動作し、第5図に示すイ
ンダクシヨンテーブル7を作る。
スプログラムを構文解析した中間語6を入力として、第
4図のフローチャートのように動作し、第5図に示すイ
ンダクシヨンテーブル7を作る。
インダクシヨン変数検出処理は並列処理対象のループの
中の最内側ループから、並列処理対象ループに至るまで
順次、行なう、まず処理28が。
中の最内側ループから、並列処理対象ループに至るまで
順次、行なう、まず処理28が。
D o 10のループを処理対象とする。処理29が基
本インダクシヨン変数として、ループ制御変数Iを検出
し、処理30がIのレコード39を作る。
本インダクシヨン変数として、ループ制御変数Iを検出
し、処理30がIのレコード39を作る。
処理31の判定を経て、処理29が基本インダクシヨン
変数Jの定義文17を検出し、処理30がJのレコード
40を作る。同様に、処理30が、Rのレコード41を
作る。
変数Jの定義文17を検出し、処理30がJのレコード
40を作る。同様に、処理30が、Rのレコード41を
作る。
D o 30のループについては、処理28が、まずD
o 20を処理対象ループとして、Jのレコード44
.IBのレコード45、IAのレコード46を作る。さ
らに、処理32の判定から処理34に進み、処理35が
、処理対象ループをD020とする。処理29と30が
ループ制御変数工のレコード42を作り、処理31と3
2の判定を経て、処理33がIAのレコード43を作る
。
o 20を処理対象ループとして、Jのレコード44
.IBのレコード45、IAのレコード46を作る。さ
らに、処理32の判定から処理34に進み、処理35が
、処理対象ループをD020とする。処理29と30が
ループ制御変数工のレコード42を作り、処理31と3
2の判定を経て、処理33がIAのレコード43を作る
。
次に、第5図のインダクシヨンテーブルを入力として、
初期値生成部2が、登録された各基本インダクシヨン変
数に対して、ループ内で値が変わらないループ不変変数
である初期値を検出し、第7図のようにインダクシヨン
テーブルを更新する。
初期値生成部2が、登録された各基本インダクシヨン変
数に対して、ループ内で値が変わらないループ不変変数
である初期値を検出し、第7図のようにインダクシヨン
テーブルを更新する。
必要ならばこれを計算するコードを生成する。
処理の概要を第6図にフローチャートで示す。
まず、第5図のDolOループのレコード36より、D
010ループのインダクシヨン変数について処理を行う
、第6図の処理60が、制御変数Iについて初期値1を
検出し、処理63が、1を第7図に示すインダクシヨン
テーブルのレコード39のフィールド70に登録する。
010ループのインダクシヨン変数について処理を行う
、第6図の処理60が、制御変数Iについて初期値1を
検出し、処理63が、1を第7図に示すインダクシヨン
テーブルのレコード39のフィールド70に登録する。
第5図のインダクシヨンテーブルのレコード40のJつ
いては、ループの外側からの依存が検出できないため、
処理61の判定から処理64が、第8図に示す代入文1
4を生成、挿入し、新たに導入した左辺の変数Jφをイ
ンダクシヨンテーブルのレコード40のフィールド70
に登録すし、第7図のレコード40のようにする。第5
図のレコード41のRについても同様に、処理64が第
8図に示す代入文15を生成、挿入し、新たに導入した
変数Rφをインダクシヨンテーブルのレコード41のフ
ィールド70に登録し、第7図のレコード41のように
する。
いては、ループの外側からの依存が検出できないため、
処理61の判定から処理64が、第8図に示す代入文1
4を生成、挿入し、新たに導入した左辺の変数Jφをイ
ンダクシヨンテーブルのレコード40のフィールド70
に登録すし、第7図のレコード40のようにする。第5
図のレコード41のRについても同様に、処理64が第
8図に示す代入文15を生成、挿入し、新たに導入した
変数Rφをインダクシヨンテーブルのレコード41のフ
ィールド70に登録し、第7図のレコード41のように
する。
この後、処理65による判定を経て、D o 30ルー
プの処理に移る。
プの処理に移る。
ループ制御変数■について、初期値1を検出し処理63
がレコード42のフィールド71に登録し、第7図の4
2のようにする。同様に、IAについても、処理60が
、文20の定義を検出し、処理63がレコード43のフ
ィールド71に登録し、第7図の43のようにする。
がレコード42のフィールド71に登録し、第7図の4
2のようにする。同様に、IAについても、処理60が
、文20の定義を検出し、処理63がレコード43のフ
ィールド71に登録し、第7図の43のようにする。
更新されたインダクシヨンテーブル7を入力として、公
差・公比生成部4が、インダクシヨン変数に対して公差
か公比のいずれかを検出する。
差・公比生成部4が、インダクシヨン変数に対して公差
か公比のいずれかを検出する。
処理の概要を第9図に示す。
まず、DolOループについて処理を施す。
DolOループは、内側にループを持たないため、処理
85の判定から処理93に進む、Jは右辺を統括する演
算子が加算であるため、処理94が公差5を検出し、イ
ンダクシヨンテーブルのレコード40のフィールド76
に5を登録し、79にはnilを登録する。Rは右辺を
統括する演算子が乗算であるため、処理95が公比Aを
検出し、インダクシヨンテーブルのレコード4,1のフ
ィールド76にnilを79にAを登録する。
85の判定から処理93に進む、Jは右辺を統括する演
算子が加算であるため、処理94が公差5を検出し、イ
ンダクシヨンテーブルのレコード40のフィールド76
に5を登録し、79にはnilを登録する。Rは右辺を
統括する演算子が乗算であるため、処理95が公比Aを
検出し、インダクシヨンテーブルのレコード4,1のフ
ィールド76にnilを79にAを登録する。
この後、処理92による判定を経て、Do30ループの
処理に移る。
処理に移る。
IAについては、内側ループ(Do20)についてもイ
ンダクシヨン変数であるため、処理85の判定から処理
86に進む。処理86がD020ループ内の文25を検
出した後、処理86により、この公差・公比生成部が再
帰的に呼ばれる。この時は、Do20は内側ループを持
たないため、DolOループのJと同様公差1を検出し
、インダクシヨンテーブルのレコード46のフィールド
78に1を81にnilを登録し、呼び出し元へもどる
。フィールド78の1に公差であるため、処理89へ進
む、処理89は、内側ループのループ長が、レコード4
4より工であるため、公差1の内側ループ1回1回る時
の総和を求める。この例だと、工は当該ループ(Do3
0ループ)の制御変数であるため、ループ1回目から工
回目まで1を加えた総和はl5(I−1)/2となり、
これがIAの公差である。これをインダクシヨンテーブ
ル43のフィールド77に登録し、フィールド80には
nilを登録する。上記のようにして、並列化対象ルー
プのインダクシヨン変数、J、R。
ンダクシヨン変数であるため、処理85の判定から処理
86に進む。処理86がD020ループ内の文25を検
出した後、処理86により、この公差・公比生成部が再
帰的に呼ばれる。この時は、Do20は内側ループを持
たないため、DolOループのJと同様公差1を検出し
、インダクシヨンテーブルのレコード46のフィールド
78に1を81にnilを登録し、呼び出し元へもどる
。フィールド78の1に公差であるため、処理89へ進
む、処理89は、内側ループのループ長が、レコード4
4より工であるため、公差1の内側ループ1回1回る時
の総和を求める。この例だと、工は当該ループ(Do3
0ループ)の制御変数であるため、ループ1回目から工
回目まで1を加えた総和はl5(I−1)/2となり、
これがIAの公差である。これをインダクシヨンテーブ
ル43のフィールド77に登録し、フィールド80には
nilを登録する。上記のようにして、並列化対象ルー
プのインダクシヨン変数、J、R。
IAの公差又は公比を得ることができた。第7図のイン
ダクシヨンテーブルで空白のフィールドは必要ないため
、値を設定する処理は行わない。
ダクシヨンテーブルで空白のフィールドは必要ないため
、値を設定する処理は行わない。
最後に、定義式を公比・公差及びループ回数を用いた式
に変換し、インダクシヨン変数における複数のループ回
数にまたがる依存を削除する。
に変換し、インダクシヨン変数における複数のループ回
数にまたがる依存を削除する。
第7図のインダクシヨンテーブルを入力として、大変換
部5の処理フローを第10図に示す、これにより、第8
図のソースプログラムは第11図のようになる。
部5の処理フローを第10図に示す、これにより、第8
図のソースプログラムは第11図のようになる。
まず、D o 10ループについて処理を施す、内側に
ループを持たないため、処理100の判定から処理10
2に進み、インダクシヨン変数Jの時は、処理103が
、第8図の文17を第11図の文107に置換し、イン
ダクシヨン変数Rの時は。
ループを持たないため、処理100の判定から処理10
2に進み、インダクシヨン変数Jの時は、処理103が
、第8図の文17を第11図の文107に置換し、イン
ダクシヨン変数Rの時は。
処理104が第8図の文18を第11図の文108に置
換する。
換する。
この後、処理105の判定を経て、Do30ループの処
理に進む、インダクシヨン変数IAは、内側ループでも
インダクシヨン変数であるため、処理100の判定から
、処理101に進む。処理101は、第8図の文22と
文23の間に、第11図に示す様に文110を挿入する
。
理に進む、インダクシヨン変数IAは、内側ループでも
インダクシヨン変数であるため、処理100の判定から
、処理101に進む。処理101は、第8図の文22と
文23の間に、第11図に示す様に文110を挿入する
。
以上のようにして、第3図のプログラムを第11図に変
換すると、DolOループ、Do30ループの各繰り返
し回数ごとに全く独立に並列実行することが可能となる
。ループの繰り返し回数をまたがる依存は無いため、プ
ロセッサ間に通信が無い並列機でも並列処理可能でなる
。第12図にその様子を示す。
換すると、DolOループ、Do30ループの各繰り返
し回数ごとに全く独立に並列実行することが可能となる
。ループの繰り返し回数をまたがる依存は無いため、プ
ロセッサ間に通信が無い並列機でも並列処理可能でなる
。第12図にその様子を示す。
本発明によれば、FORTRAN ateのプログラム
によく現われる、再帰的に定義されるインダクシヨン変
数の再帰性を解消することができる。
によく現われる、再帰的に定義されるインダクシヨン変
数の再帰性を解消することができる。
この結果、並列に実行するプロセッサの間に通信手段が
無いマシンでも並列に実行することができ、また、通信
する手段があるマシンについても通信によるオーバヘッ
ドを削減することができる。
無いマシンでも並列に実行することができ、また、通信
する手段があるマシンについても通信によるオーバヘッ
ドを削減することができる。
このようにして、並列マシン向きの実効性能の高いオブ
ジェクトコードを生成することができる。
ジェクトコードを生成することができる。
第1図は並列化処理部の一部、第2図はコンパイラの全
体図、第3図は実施例説明のためのソースプログラム例
、第4図はインダクシヨン変数検出部の処理概要、第5
図はインダクシヨンテーブル、第6図は初期値生成部の
処理概要、第7図はインダクシヨンテーブル、第8図は
初期値生成部の変換例、第9図は公差・公比生成部の処
理概要、第10図は定義式変換部の処理概要、第11図
は並列化処理部の出力であるプログラムの変換例、第1
2図はプログラムの並列実行列である。 1・・・自動並列化部、2・・・インダクシヨン変数検
出部、3・・・初期値生成部、4・・・公差・公比生成
部、5・・・大変換部、6・・・中間語、7・・・イン
ダクシヨンテーブル、8・・・FORTRANコンパイ
ラ、9・・・構文解析部、10・・・中間部、11・・
・コード生成部、12・・・FORTRANソースプロ
グラム、13・・・オブジェクトコード、14〜27・
・・FORTRANプログラム、28〜35・・・処理
部、36〜38・・・ループテーブル、39〜46・・
・インダクシヨンテーブル、60〜65・・・処理部、
70〜81・・・インダクシヨンテーブル、85〜95
・・・処理部、100〜105・・・処理部、107〜
109・・・FORTRAN実行文、110〜112・
・・Ho5t計算機の実行、113〜118・・・プロ
セッサエレメントによる並列実行。
体図、第3図は実施例説明のためのソースプログラム例
、第4図はインダクシヨン変数検出部の処理概要、第5
図はインダクシヨンテーブル、第6図は初期値生成部の
処理概要、第7図はインダクシヨンテーブル、第8図は
初期値生成部の変換例、第9図は公差・公比生成部の処
理概要、第10図は定義式変換部の処理概要、第11図
は並列化処理部の出力であるプログラムの変換例、第1
2図はプログラムの並列実行列である。 1・・・自動並列化部、2・・・インダクシヨン変数検
出部、3・・・初期値生成部、4・・・公差・公比生成
部、5・・・大変換部、6・・・中間語、7・・・イン
ダクシヨンテーブル、8・・・FORTRANコンパイ
ラ、9・・・構文解析部、10・・・中間部、11・・
・コード生成部、12・・・FORTRANソースプロ
グラム、13・・・オブジェクトコード、14〜27・
・・FORTRANプログラム、28〜35・・・処理
部、36〜38・・・ループテーブル、39〜46・・
・インダクシヨンテーブル、60〜65・・・処理部、
70〜81・・・インダクシヨンテーブル、85〜95
・・・処理部、100〜105・・・処理部、107〜
109・・・FORTRAN実行文、110〜112・
・・Ho5t計算機の実行、113〜118・・・プロ
セッサエレメントによる並列実行。
Claims (1)
- 1、高級言語で記述されたソースプログラムを並列計算
機による並列実行のための命令列を含むオブジェクトコ
ードを生成するコンパイラにおいて、遂次実行型のプロ
グラムを並列実行型のプログラムに変換する並列化部を
備え、該並列化部は、並列化の対象とするループの中の
再帰的に定義されるインダクシヨン変数を検出するイン
ダクシヨン変数検出部と、検出したインダクシヨン変数
の初期値を計算するコードを生成する初期化生成部と、
インダクシヨン変数の公差や公比を計算するコードを生
成する公差・公比生成部と、インダクシヨン変数の定義
式を、計算した初期値や公差又は公比と、ループ回数を
用いて定義する式に変換する式変換部を備えてなり、該
並列化部が、再帰的に定義されるインダクシヨン変数を
ループの繰り返し画数と、ループの実行中値が変わらな
いループ不変変数によつて定義されるように変換する並
列化コンパイル方式。
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 true JPS63304325A (ja) | 1988-12-12 |
| JP3053092B2 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 (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0470931A (ja) * | 1990-07-05 | 1992-03-05 | Agency Of Ind Science & Technol | 論理合成の演算割り当て方法 |
| WO2012004972A1 (ja) * | 2010-07-05 | 2012-01-12 | パナソニック株式会社 | プログラム生成装置、プログラム生産方法及びプログラム |
Families Citing this family (16)
| 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 |
| 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 | Analyzing inductive expressions in a multilanguage optimizing compiler |
| 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 |
Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS5856152A (ja) * | 1981-09-30 | 1983-04-02 | Fujitsu Ltd | プログラム変換装置 |
Family Cites Families (22)
| 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 |
| 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
Patent Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS5856152A (ja) * | 1981-09-30 | 1983-04-02 | Fujitsu Ltd | プログラム変換装置 |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0470931A (ja) * | 1990-07-05 | 1992-03-05 | Agency Of Ind Science & Technol | 論理合成の演算割り当て方法 |
| WO2012004972A1 (ja) * | 2010-07-05 | 2012-01-12 | パナソニック株式会社 | プログラム生成装置、プログラム生産方法及びプログラム |
| US8806466B2 (en) | 2010-07-05 | 2014-08-12 | Panasonic Corporation | Program generation device, program production method, and program |
| JP5580416B2 (ja) * | 2010-07-05 | 2014-08-27 | パナソニック株式会社 | プログラム生成装置、プログラム生産方法及びプログラム |
Also Published As
| Publication number | Publication date |
|---|---|
| JP3053092B2 (ja) | 2000-06-19 |
| US5067068A (en) | 1991-11-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3053092B2 (ja) | 並列化コンパイル方法 | |
| Ammarguellat | A control-flow normalization algorithm and its complexity | |
| US5293631A (en) | Analysis and optimization of array variables in compiler for instruction level parallel processor | |
| Ramamoorthy et al. | A high-level language for horizontal microprogramming | |
| US6553362B2 (en) | Case-reduced verification condition generation system and method using weakest precondition operator expressed using strongest postcondition operators | |
| NZ241693A (en) | Compiling computer code: elements of intermediate language flow graph include indications of effects and dependencies on other elements | |
| JPH0814817B2 (ja) | 自動ベクトル化方法 | |
| JP2001166949A (ja) | シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 | |
| EP0532731A1 (en) | Method of constructing a constant-folding mechanism in a multilanguage optimizing compiler | |
| JPS61241837A (ja) | 範囲検査の最適化方法 | |
| JP2001125792A (ja) | 最適化促進装置 | |
| Rocha et al. | An algebraic framework for parallelizing recurrence in functional programming | |
| JPH04307624A (ja) | ループ最適化方法及び装置 | |
| JPS63155264A (ja) | ベクトル計算機用言語チユ−ニング処理方式 | |
| JPH09282173A (ja) | プログラムの静的解析方法 | |
| JPS62204374A (ja) | 2倍演算最適化処理方式 | |
| JP2723020B2 (ja) | トレースデータ生成システム | |
| JP3311775B2 (ja) | ポインタベクトル化方式 | |
| JP3233467B2 (ja) | プログラム変換方法および装置 | |
| JP3726992B2 (ja) | 一括関数呼出化方法 | |
| JPH0795273B2 (ja) | コンパイラにおける和計算の部分展開処理方式 | |
| JPH01128136A (ja) | コンパイル処理装置 | |
| JPH04163631A (ja) | コンパイラ | |
| JPH0512752B2 (ja) | ||
| JP4327533B2 (ja) | 演算処理プログラム、演算処理方法、および演算処理装置 |