JP2956591B2 - ループ外への条件付き飛び出しがあるループの並列化方法及び装置 - Google Patents

ループ外への条件付き飛び出しがあるループの並列化方法及び装置

Info

Publication number
JP2956591B2
JP2956591B2 JP8159077A JP15907796A JP2956591B2 JP 2956591 B2 JP2956591 B2 JP 2956591B2 JP 8159077 A JP8159077 A JP 8159077A JP 15907796 A JP15907796 A JP 15907796A JP 2956591 B2 JP2956591 B2 JP 2956591B2
Authority
JP
Japan
Prior art keywords
loop
conditional
variable
program
statement
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
Application number
JP8159077A
Other languages
English (en)
Other versions
JPH09319591A (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
Nippon Electric 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 Nippon Electric Co Ltd filed Critical Nippon Electric Co Ltd
Priority to JP8159077A priority Critical patent/JP2956591B2/ja
Publication of JPH09319591A publication Critical patent/JPH09319591A/ja
Application granted granted Critical
Publication of JP2956591B2 publication Critical patent/JP2956591B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

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

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソースプログラム
をオブジェクトコードに変換するコンパイル技法に関
し、特に条件付き飛び出しがあるループを並列化するコ
ンパイル方法及び装置に関する。
【0002】
【従来の技術】従来のコンパイラ技術を図12に示した
C言語によるプログラム例を参照して以下に説明する。
図12には、従来のコンパイラ技術によって並列化可能
性が判定可能なループを含むプログラム例を示す。
【0003】従来のプログラム変換技術として例えば特
開平5−250341号公報には、並列計算機で図12
に示されるようなループを含むソースプログラムを並列
に実行するために、ソースプログラムを変換して、並列
実行可能なオブジェクトプログラムを生成する。
【0004】図13は、上記特開平5−250341号
公報に記載される並列化コンパイラ装置のブロック図で
ある。図13を参照して、入力手段102はソースプロ
グラムを外部から入力しメモリ103に格納する。メモ
リ103は、コンパイルを実現するプログラム、入力手
段102から入力されたソースプログラム、コンパイル
結果であるオブジェクトプログラム等を記憶保持する。
プロセッサ101は、メモリ103に保持されているプ
ログラムに従ってコンパイル処理を実行する。出力手段
104は、プロセッサ101により生成されメモリ10
3に保持されたオブジェクトプログラムを出力装置に出
力する。
【0005】図14及び図15は、上記従来の並列化コ
ンパイラ装置の機能ブロックを示した図であり、メモリ
103のプログラムに従ってプロセッサ101が実行す
るコンパイル処理を機能別に示したものである。なお、
図14及び図15は図面作成の都合で分図されたもので
ある。
【0006】図14及び図15を参照して、入力手段1
0は、外部から入力されるソースプログラムを読み込
む。中間コード生成手段11は、高級言語(例えばC言
語など)で記述されたソースプログラムを変換して、中
間コードで記述されたプログラムを生成する。この中間
コードのプログラムは記憶手段15に記憶される。ルー
プ検出手段12は、ソースプログラムに含まれるループ
処理を検出する。
【0007】配列検出手段13は、ソースプログラムに
含まれる配列を検出する。変数抽出手段14は、ソース
プログラムに含まれる変数(スカラ変数)を検出する。
記憶手段15は、ループ検出手段12および配列検出手
段13によって検出されたループ及び配列を記憶する。
【0008】シミュレート手段16は、記憶手段15に
格納されたループ、配列に関する情報を参照して中間コ
ードのプログラムをシミュレートする。判定手段17
は、シミュレーション結果及び記憶手段15の記憶内容
に基づいてループの並列化が可能か否かを判定する。オ
ブジェクト生成手段18は、判定手段17が並列化可能
と判定した時、並列実行用のオブジェクトプログラムを
生成し、並列不可と判定した時、通常のオブジェクトプ
ログラムを生成する。
【0009】出力手段19は、オブジェクトプログラム
を出力するもので、例えばプログラムをファイルとして
記憶するファイル装置などである。
【0010】以上のように構成された従来の並列化コン
パイラ装置について、図16及び図17に示す流れ図を
参照して、その処理動作を説明する。なお、図16及び
図17は図面作成の都合で分図されたものである。
【0011】まず、コンパイルされる前のソースプログ
ラムは、入力手段10に入力される(ステップ21)。
なお、ソースプログラムとしては例えば図12に示した
ようなプログラムの例である。
【0012】入力手段10によって入力されたソースプ
ログラムは、中間コード生成手段11によって中間コー
ドに変換され、記憶手段15に格納される(ステップ2
2)。中間コードが生成されるとループ検出手段12
は、中間コードに含まれるループ処理を検出する。具体
的には、図12に示したC言語プログラムにおいてはル
ープ検出手段12は、ソースプログラム中の「for
文」をループ処理として検出する(ステップ23)。ル
ープ処理の検出結果は、記憶手段15に記憶される。そ
して、ループ処理の有無に従って、ループ処理が存在す
る場合にはステップ25に進み、一方、ループ処理が存
在しない場合には、ステップ31(図17参照)に分岐
する(ステップ24)。
【0013】次にループ処理が存在する場合、配列検出
手段13は、抽出されたループ処理における配列式を判
別し、これを検出する。図12に示す例では、配列検出
手段13は、左辺にある配列a[i]と、右辺に存在す
る配列b[i]とを検出する(ステップ25)。これら
の配列の検出結果は、記憶手段15に格納される。
【0014】さらに、変数抽出手段14は、ループに含
まれる変数を検出する。図1に示した例における「fo
r文」のループにおいては、条件分岐で用いられている
配列b[i]を検出し、記憶手段15に格納する(ステ
ップ26)。
【0015】この後、シミュレート手段16は、記憶手
段15を参照して、配列が格納されているか否かを判定
し、配列が格納されていればステップ28に進み、配列
が格納されていなければステップ29に進む(ステップ
27)。
【0016】配列がある場合、シミュレート手段16
は、記憶手段15を参照して中間コードのプログラムを
シミュレートし、右辺の配列を記憶手段15の中の配列
変数定義表に登録する。このシミュレーションに際し
て、データ参照関係の判定も行われる。すなわち、シミ
ュレート手段16及び判定手段17とが中間コードの一
文ずつを同時に取り込まれ、各文に対してシミュレーシ
ョンとデータ参照関係の判定とを交互に行われる。
【0017】例えば、図12に示す例では、for文
を、i=0から100までシミュレートし、配列のデー
タ参照関係を配列変数定義表に登録する。
【0018】i=0の時は条件式(i==0)が成り立
つので、k=1が記憶され、左辺の配列a[1]と右辺
の配列b[0]が配列変数定義表に記憶される。
【0019】i=1の時は条件式(i==0)が不成立
であるので、k=2が記憶され、左辺の配列a[2]と
右辺の配列b[1]が配列変数定義表に記憶される。こ
のようにして、for文をi=0から100まで繰り返
して、シミュレーション及びデータ参照関係の判定が行
われる。
【0020】この結果を受けて、判定手段17は並列化
の可否を判断する。上記データ参照関係の判定の際に、
データ参照関係があると判定された場合、判定手段17
で並列化不可となる。
【0021】図12に示すプログラム例では、データ参
照関係がないので、並列化可能と判定する。
【0022】この判定結果に従って、オブジェクト生成
手段18は、中間コードに基づいてオブジェクトプログ
ラムを生成する。このプログラム例では、変数iに関す
るfor文のループを並列実行するオブジェクトプログ
ラムを生成する。生成されたプログラムは、出力手段1
9から出力される。
【0023】
【発明が解決しようとする課題】しかしながら、上記し
た従来技術においては、並列化の際に並列化可能である
と判定できるのは、コンパイル時に条件文の条件が制御
変数の値によって真偽が判定できる場合に限られるとい
う、問題点を有している。
【0024】すなわち、例えば図18に示すプログラム
例のように、条件文の条件式(b[i]==0)が、制
御変数の値によって要素が変わる配列を含む式の時は、
配列の要求の値をコンパイル時には知ることはできない
ため、コンパイル時においてシミュレートによって条件
文の真偽を判定することはできない。このため上記技術
ではデータ参照関係が存在するかどうか判定できず、結
果として並列化不可能と判定される。なお、図18に示
すプログラム例では、配列b[i]の値が0の時、演算
a[i]=1/b[i]における、ゼロによる除算(ze
ro divide)を回避するため、break文の実行によ
りループから外部への飛び出し制御が行われる。
【0025】本発明は、上記事情に鑑みてなされたもの
であって、その目的は、従来の技術で並列化できなかっ
たループの並列化を可能とし、プログラムの実行性能の
向上を図るようにしたコンパイル方法及びコンパイラ装
を提供することにある。
【0026】ここで、ループとは、ループ内に条件分岐
があり、その条件分岐成立によってループ外への飛び出
しがあり、条件の成立の有無は実行時に初めて判定する
ことができるようなループをいう。
【0027】
【課題を解決するための手段】上記目的を達成するた
め、本発明の並列化コンパイル方法は、条件成立の有無
に応じてループ外への飛び出し命令が実行されるように
プログラムされた条件分岐文をループ内に含むループを
検出した際に、該ループを、前記条件分岐文を含むルー
プと、前記条件分岐文を含まないループと、に分割し、
前記条件分岐文を含むループが先に実行されるように配
置すると共に、前記条件分岐文を含むループの終了時の
ループ制御変数の値から前記条件分岐文を含まないルー
プの終値を得、前記終値を前記条件分岐を含まないルー
プの終値とすることによって該ループについて並列実行
可能としたことを特徴とする。
【0028】本発明の原理を以下に説明する。本発明に
おいては、従来の方式と同様にしてソースプログラム中
にループを検出して解析した後に、ループ変換手段によ
り、ループを条件付き飛び出しの部分と飛び出しを含ま
ない部分とに分割し、前者のループは、実行時に実際に
飛び出しを実行することによって元のループの制御変数
の終値を調べるようなループに変換され、後者のループ
は前者のループを実行した結果を制御変数の終値とする
ようなループに変換される。
【0029】上記構成のもと、本発明によれば、ループ
外への条件飛び出しがあるループを、飛び出しがある部
分とそれ以外の部分に分割して、二つのループに変換
し、前者のループは飛び出す時点の制御変数の値を実行
時に調べ、これを後者のループの制御変数の終値とする
ことによって、後者のループは並列実行判定可能とな
る。
【0030】
【発明の実施の形態】本発明の実施の形態について図面
を参照して以下に説明する。
【0031】図1は、本発明の実施の形態に係るコンパ
イラ装置を説明するための図である。図1を参照して、
入力手段2は、ソースプログラムを外部から入力しメモ
リ3に格納する。メモリ3は、コンパイルを実現するプ
ログラム、入力手段2から入力されたソースプログラ
ム、コンパイル結果であるオブジェクトプログラム等を
記憶保持する。プロセッサ1は、メモリ3に保持されて
いるプログラムに従って、コンパイルを実行する。出力
手段4は、プロセッサ1により生成されメモリ3に保持
されたオブジェクトプログラムを出力装置に出力する。
【0032】図2及び図3は、本発明の実施の形態にお
けるコンパイラ装置の機能をブロック図にて示したもの
であり、メモリ3に格納されたプログラムに従ってプロ
セッサ1が実行するコンパイル処理を機能別に構成した
ものである。なお、図2及び図3は図面作成の都合で分
図されたものである。
【0033】図2及び図3を参照して、入力手段50
は、外部から入力されるソースプログラムを読み込む。
中間コード生成手段51で、高級言語(例えばC言語な
ど)で記述されたソースプログラムを変換して、中間コ
ードで記述されたプログラムを生成する。この中間コー
ドのプログラムは、記憶手段55に記憶される。ループ
検出手段52で、ソースプログラムに含まれるループ処
理を検出する。
【0034】配列検出手段53は、ソースプログラムに
含まれる配列を検出する。変数抽出手段54は、ソース
プログラムに含まれる変数(スカラ変数)を検出する。
記憶手段55は、ループ検出手段52および配列検出手
段53によって検出されたループ及び配列を記憶する。
【0035】ループ変換手段56は、記憶手段55に格
納されている、ループ、および配列に関する情報を参照
して、中間コードのプログラムからループ変換できるか
否かを判定し、ループの変換を行う。判定手段57は、
ループ変換の結果及び記憶手段55の記憶内容に基づい
て、ループの並列化が可能であるか否かを判定する。オ
ブジェクト生成手段58は、判定手段57により並列化
可能と判定された時には、並列実行用のオブジェクトプ
ログラムを生成し、一方、並列不可と判定された時に
は、通常のオブジェクトプログラムを生成する。
【0036】出力手段59は、オブジェクトプログラム
を出力するものであり、例えばプログラムをファイルと
して記憶するファイル装置などからなる。
【0037】図4に、本発明の実施の形態におけるルー
プ変換手段56の構成をブロック図にて示す。
【0038】図4を参照して、ループ変換手段56は、
条件文検出手段56a、ループ外分岐検出手段56b、
変数定義検出手段56c、一時変数導入手段56d、条
件文抽出手段56e、ループ分割手段56f、及びルー
プ補正手段56gを備えて構成される。
【0039】条件文検出手段56aは、中間コード生成
手段から51から中間コードを一文ずつ入力し、その中
間コードから条件文を検出する。
【0040】ループ外分岐検出手段56bは、条件文検
出手段56aで検出された条件文に対して、ループ外分
岐が存在するかどうか判定する。
【0041】変数定義検出手段56cは、ループ外分岐
検出手段56bでループ外分岐があると判定された条件
文に対して、変数に対する定義があるか否かを配列検出
手段53および変数抽出手段54で生成された配列/変
数情報を用いて判定する。
【0042】一時変数導入手段56dは、変数定義検出
手段56cの検出結果から、条件文中で変数に対する定
義がなかった場合には、ループ分割のための一時変数を
導入して、中間コードに反映する。条件文抽出手段56
eはループ中の条件文に対して範囲を記憶しておく。
【0043】ループ分割手段56fは、条件文抽出手段
56eで特定した条件文をループの外に出して、現在の
ループと同じループで条件文のみのループを現在のルー
プの直前に挿入する。
【0044】ループ補正手段56gは、ループ分割手段
56fで分割されたループの間に、制御変数の値を一時
変数に代入する中間コードを挿入し、その直後のループ
の終値を一時変数に変更する。
【0045】以上のように構成された本発明の実施の形
態に係るコンパイラについて、図5及び図6の流れ図を
参照して、その処理動作を以下に説明する。なお、図5
及び図6は図面作成の都合で分図されたものである。
【0046】まず、コンパイルされる前のソースプログ
ラムは、入力手段50に入力される(ステップ61)。
入力手段50から入力されたソースプログラムは、中間
コード生成手段51によって中間コードに変換され、記
憶手段55に格納される(ステップ62)。中間コード
が生成されると、ループ検出手段52は、中間コードに
含まれるループ処理を検出し(ステップ63)、ループ
処理の検出結果は、記憶手段55に記憶される。そし
て、ループ処理の有無に従い、ループ処理が存在する場
合にはステップ65に進み、一方、存在しない場合には
ステップ71に進む(ステップ64)。
【0047】ループ処理が存在する場合、ステップ65
において、配列検出手段53は抽出されたループ処理に
おける配列式を判別し、これを検出する。これらの配列
の検出結果は、記憶手段55に格納される。さらに、変
数抽出手段54は、ループに含まれる変数を検出する
(ステップ66)。
【0048】この後、ループ変換手段56は、中間コー
ドを参照して、条件文があるか否かを判定し、条件文が
あればステップ68に、条件分がなければステップ69
に進む(ステップ67)。
【0049】すなわち、条件文がある場合、ステップ6
8にて、ループ変換手段56は、記憶手段55を参照し
てループの変換を行う。
【0050】判定手段57は、並列化の可否を判定する
(ステップ69)。この判定結果に従って、オブジェク
ト生成手段58は、中間コードに基づいてオブジェクト
プログラムを生成する(ステップ70、71)。生成さ
れたプログラムは、出力手段59から出力される(ステ
ップ72)。
【0051】図7に、本発明の実施の形態におけるルー
プ変換手段56の処理フローを流れ図にて示す。
【0052】図7を参照すると、まず中間コードが条件
文検出手段56aに入力される(ステップ81)。条件
文検出手段56aは、中間コードを調べて、条件文かど
うかを判定する。条件文であればステップ83に進み、
条件文でなければステップ81に進む(ステップ8
2)。
【0053】ループ外分岐検出手段56bで、上記条件
文の中間コードに対して、ループ外分岐があるか否かを
調べ、ループ外分岐がある場合にはステップ84に進
み、条件文でなければ終了に進む(ステップ83)。
【0054】変数定義検出手段56cにて、ループ外分
岐検出手段56bでループ外分岐があると判定された条
件文に対して、変数に対する定義があるか否かを配列検
出手段53および変数抽出手段54で生成された配列/
変数情報を用いて判定し、変数に対する定義がある場合
は終了し、なければステップ85に進む(ステップ8
4)。
【0055】一時変数導入手段56dは、ループ分割の
ための一時変数を導入して、中間コードに反映する(ス
テップ85)。
【0056】条件文抽出手段56eは、ループ中の条件
文に対して範囲を記憶し、ループ分割手段56fで、そ
の条件文をループの外に出して、現在のループと同じル
ープで条件文のみのループを現在のループの直前に挿入
する(ステップ86)。
【0057】ループ補正手段56gは、ループ分割手段
56fで、分割されたループの間に、制御変数の値を一
時変数に代入する中間コードを挿入し、その直後のルー
プの終値を一時変数に変更する(ステップ87)。
【0058】
【実施例】上記した本発明の実施の形態を更に詳細に説
明すべく、本発明の実施例を以下に説明する。
【0059】本発明の実施例として、C言語のループを
含み条件分岐によりループ外部へ飛び出す(b[i]=
=0が成立した場合のbreak命令)ソースプログラ
ムの例を図8に示す。
【0060】また、図9に、本発明の実施例により、図
8に示したプログラムのループに一時変数を導入した結
果のプログラムを示す。
【0061】図10に、本発明の実施例により、ループ
を分割した結果のプログラムを示す。
【0062】図11に、本発明の実施例により、図10
のプログラムのループの終値を補正した結果のプログラ
ムを示す。
【0063】まず、コンパイルされる前のソースプログ
ラムは、入力手段50に入力される(図5及び図6のス
テップ61)。
【0064】入力手段50から入力されたソースプログ
ラムは、中間コード生成手段51によって中間コードに
変換され、記憶手段55に格納される(ステップ6
2)。中間コードが生成されるとループ検出手段52
は、中間コードに含まれるループ処理を検出する。
【0065】具体的には、図8に示すようなC言語にお
いてはループ検出手段52は、ソースプログラム中の
「for文」をループ処理として検出する(ステップ6
3)。ループ処理の検出結果は、記憶手段55に記憶さ
れる。そして、ループ処理の有無に従って、存在する場
合にはステップ65に進み、存在しない場合にはステッ
プ71に進む(ステップ64)。
【0066】次に、ループ処理が存在する場合、配列検
出手段53は抽出されたループ処理における配列式を判
別し、これを検出する。図8では、配列検出手段53は
左辺にある配列a[i]と右辺に存在する配列b[i]
とを検出する(ステップ65)。これらの配列の検出結
果は、記憶手段55に格納される。さらに、変数抽出手
段54は、ループに含まれる変数を検出する。図8に示
すプログラムおける「for文」のループにおいては、
条件分岐で用いられている配列b[i]を検出し、記憶
手段に格納する(ステップ66)。
【0067】この後、ループ変換手段56は、中間コー
ドを参照して条件文があるか否かを判定し、条件文があ
ればステップ68に、なければステップ69に進む(ス
テップ67)。図8に示すプログラムでは、「if文」
が存在するので、ステップ68に進む。条件文がある場
合、ループ変換手段56は、記憶手段55を参照してル
ープの変換を行う(ステップ68)。実施例1ではルー
プ変換手段56で、図16に示すようなプログラムに変
換される。
【0068】判定手段57は、並列化の可否を判断する
(ステップ69)。ループ変換手段56で図16に示す
ように、変換されるので、このBのループはa[i]お
よびb[i]の配列の参照関係に依存がないので、並列
化可能と判定される。
【0069】この判定結果に従って、オブジェクト生成
手段58は、中間コードに基づいてオブジェクトプログ
ラムを生成する(ステップ70,71)。生成されたプ
ログラムは、出力手段59から出力される(ステップ7
2)。
【0070】図7の流れ図を参照して、ループ変換の詳
細な処理動作を以下に説明する。まず中間コードが条件
文検出手段56aに入力される。
【0071】図8に示すプログラム例では、「for
文」全体の中間コードが入力される(ステップ81)。
条件文検出手段56aは中間コードを調べて、条件文で
あるか否かを判定し、条件文であればステップ83に進
み、条件文でなければステップ81に進む。
【0072】図8に示すプログラム例では、「for
文」によるループ中に、条件文(「if文」)が存在す
るので、条件文があると判定される(ステップ82)。
【0073】ループ外分岐検出手段56bで、上記の条
件文の中間コードに対して、ループ外分岐があるか否か
を調べ、ループ外分岐がある場合は、ステップ84に進
み、条件文でなければ終了に進む。
【0074】図8に示すプログラム例では、ループ外分
岐文(break文)が存在するので、ループ外分岐が
あると判定される(ステップ83)。
【0075】変数定義検出手段56cにて、ループ外分
岐検出手段56bでループ外分岐が存在すると判定され
た条件文に対して、変数に対する定義があるか否かを配
列検出手段53および変数抽出手段54で生成された配
列/変数情報を用いて判定し、変数に対する定義がある
場合は終了し、なければステップ85に進む。
【0076】図8に示す例では、条件文に含まれる文は
すべて右辺値であるので、変数に対する定義はないもの
と判定される(ステップ84)。
【0077】一時変数導入手段56dは、ループ分割の
ための一時変数を導入して、中間コードに反映する。一
時変数は当該原始プログラム中の他の変数と名前が衝突
しないような任意の識別子を付加する。
【0078】図8に示すプログラム例では、図9に示す
ように、一時変数nを導入する(ステップ85)。
【0079】条件文抽出手段56eはループ中の条件文
に対して範囲を記憶し、ループ分割手段56fで、その
条件文をループの外に出して、現在のループと同じルー
プで条件文のみのループを現在のループの直前に挿入す
る。
【0080】図9に示す例においては、図10に示すよ
うに、「if文」を、元の「for文」から取り出し
て、「if文」のみの「for文」と、それ以外の「f
or文」に分割する(ステップ86)。
【0081】ループ補正手段56gは、ループ分割手段
56fで、分割されたループの間に、制御変数の値を一
時変数に代入する中間コードを挿入し、その直後のルー
プの終値を一時変数に変更する。
【0082】これによって元のループと結果が同じにな
るように保証される。
【0083】そして、図10に示す例では、図11に示
すように、分割したループの間に、一時変数nに「if
文」のみの「for文」を実行した後の制御変数の終値
が入るように代入文を挿入し、「if文」のみの「fo
r文」の終値を一時変数nと置き換える(ステップ8
7)。
【0084】なお、上記実施例ではC言語によるプログ
ラム例を基に説明したが、本発明はC言語に限定される
ものでなく、他の各種高水準言語に対して適用可能であ
ることは勿論である。
【0085】
【発明の効果】以上説明したように、本発明によれば、
従来技術では並列化して並列実行させることのできなか
った、条件付き飛び出しのあるループに対して、ループ
を条件分岐の部分とそれ以外の部分に分割するように構
成したことにより、条件分岐を含まないループについて
正しくループを並列実行させることを可能とするという
効果を有する。
【0086】これは、本発明においては、条件分岐の部
分を先に実行させることによって、条件分岐を含まない
ループの終値を得ることができ、正しく並列実行させる
ようにしたことによる。
【図面の簡単な説明】
【図1】本発明の実施の形態に係る並列化コンパイル装
置のブロック図である。
【図2】本発明の実施の形態に係る並列化コンパイル装
置の機能手段をブロック図にて示したものである。
【図3】本発明の実施の形態に係る並列化コンパイル装
置の機能手段をブロック図にて示したものである。
【図4】本発明の実施の形態に係る並列化コンパイル装
置の機能手段をブロック図にて示したものである。
【図5】本発明の実施の形態に係る並列化コンパイル装
置の処理動作を説明するための流れ図である。
【図6】本発明の実施の形態に係る並列化コンパイル装
置の処理動作を説明するための流れ図である。
【図7】本発明の実施の形態におけるループ変換手段の
処理動作を説明するための流れ図である。
【図8】本発明の実施例を説明するための図であり、プ
ログラム例を示す図である。
【図9】本発明の実施例を説明するための図であり、一
時変数が導入されたプログラム例を示す図である。
【図10】本発明の実施例を説明するための図であり、
ループを分割したプログラム例を示す図である。
【図11】本発明の実施例を説明するための図であり、
条件分岐を含まないループの経過を補正したプログラム
例を示す図である。
【図12】従来技術を説明するための図であり、従来技
術で並列化可能なループを含むプログラム例を示す図で
ある。
【図13】従来の並列化コンパイル装置の構成を示すブ
ロック図である。
【図14】従来の並列化コンパイル装置の機能手段をブ
ロック図にて示した図である。
【図15】従来の並列化コンパイル装置の機能手段をブ
ロック図にて示した図である。
【図16】従来の並列化コンパイル装置の処理動作を説
明するための図である。
【図17】従来の並列化コンパイル装置の処理動作を説
明するための図である。
【図18】従来技術を説明するための図であり、従来技
術で並列化不可能なループを含むプログラム例を示す図
である。
【符号の説明】
1 プロセッサ 2 入力手段 3 メモリ 4 出力手段 50 入力手段 51 中間コード生成手段 52 ループ検出手段 53 配列検出手段 54 変数抽出手段 55 記憶手段 56 ループ変換手段 57 判定手段 58 オブジェクト生成手段 59 出力手段
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 「Software Practic e and Experience」V ol.21,No.9(1991−9)P. 891−905 H.Zima,B.Chapman 著、村岡訳「スーパーコンパイラ」 (1995−4−25)オーム社、P.253− 254 (58)調査した分野(Int.Cl.6,DB名) G06F 9/45,15/16

Claims (4)

    (57)【特許請求の範囲】
  1. 【請求項1】ソースプログラムを入力する入力手段と、
    入力したソースプログラムを記憶する記憶手段と、生成
    されたオブジェクトコードを出力する出力手段と、を含
    むデータ処理装置における並列化コンパイル方法であっ
    (a)前記記憶手段からソースプログラムを読み出して
    解析しループ処理を検出するステップと、 (b)前記ループ処理検出の結果、 条件成立の有無に応
    じてループ外への飛び出し命令が実行されるようにプロ
    グラムされた条件分岐文をループ内に含むループを検出
    した際に、該ループを、前記条件分岐文を含むループ
    と、前記条件分岐文を含まないループと、に分割するス
    テップと(c) 前記条件分岐文を含むループが先に実行されるよ
    うに配置すると共に、前記条件分岐文を含むループの終
    了時のループ制御変数の値から前記条件分岐文を含まな
    いループの終値を得、前記終値を前記条件分岐を含まな
    いループの終値とすることによって該ループについて並
    列実行可能とするステップと、 を含む、 ことを特徴とする並列化コンパイル方法。
  2. 【請求項2】ソースプログラムを入力する入力手段と、
    入力したソースプログラムを記憶する記憶手段と、生成
    されたオブジェクトコードを出力する出力手段と、を含
    むデータ処理装置における並列化コンパイル方法であっ
    (a)前記記憶手段から ソースプログラムを入力して中
    間コードを生成して前記記憶手段に格納するステップ
    (b)前記記憶手段に格納された中間コードを 走査し、
    ループ内から該ループ外への条件付き飛び出しが存在
    するループを検出するステップと(c)該検出されたループについて、条件を判定してル
    ープ外へ飛び出す部分のループと、これ以外の部分であ
    る他のループと、に分割するステップと(d) 前記ループ外へ飛び出す部分のループに対して、
    該ループを実行した後の制御変数の値を、前記他のルー
    プの制御変数の終値として設定し、前記他のループを並
    列に実行するように変換し、該変換されたループの中間
    コードを前記記 憶手段に出力するステップと、を含む ことを特徴とする並列化コンパイル方法。
  3. 【請求項3】(e)ループ外への分岐があると判定され
    前記条件文分岐文中に変数の定義が含まれているか否
    かを判定するステップと(f) 変数の定義が含まれていない場合には、ループ分
    割のための一時変数を導入し、分割されたループの間に
    おいて前記ループ外へ飛び出す部分のループの制御変数
    の値を前記一時変数に代入するステップと(g) 前記ループ外へ飛び出す部分のループの直後のル
    ープの終値を前記一時変数に変更するように自動で設定
    するステップと、を含むことを特徴とする請求項1記載
    の並列化コンパイル方法。
  4. 【請求項4】ソースプログラムを入力し記憶手段に記憶
    する入力手段と、 前記ソースプログラムを変換して中間コードで記述され
    たプログラムを生成し、前記中間コードのプログラムを
    記憶手段に記憶する中間コード生成手段と前記ソースプログラムに含まれるループ処理を検出する
    ループ検出手段と、 前記ソースプログラムに含まれる配列を検出する配列検
    出手段と、 前記ソースプログラムに含まれる変数を検出する変数抽
    出手段と、 前記記憶手段に格納されている、ループ、および配列に
    関する情報を参照して、中間コードのプログラムからル
    ープ変換できるか否かを判定し、ループの変換を行うル
    ープ変換手段と、 ループ変換の結果及び前記記憶手段の記憶内容に基づい
    てループの並列化が可能であるか否かを判定する判定手
    段と、 前記判定手段により並列化可能と判定された時には、並
    列実行用のオブジェクトプログラムを生成し、一方、並
    列不可と判定された時には、通常のオブジェクトプログ
    ラムを生成するオブジェクト生成手段、 生成されたオブジェクトプログラムを出力する出力手段
    と、 を備え、 前記ループ変換手段が、前記中間コードから条件文を検
    出する条件文検出手段 と、 前記条件文検出手段で検出された条件文に対して、ルー
    プ外分岐が存在するかどうか判定するループ外分岐検出
    手段と、 前記ループ外分岐検出手段でループ外分岐があると判定
    された条件文に対して、変数に対する定義があるか否か
    を前記配列検出手段および前記変数抽出手段で生成され
    た配列/変数情報を用いて判定する変数定義検出手段
    と、 前記変数定義検出手段の検出結果から、条件文中で変数
    に対する定義がなかった場合には、ループ分割のための
    一時変数を導入して、中間コードに反映する一時変数導
    入手段と、 ループ中の条件文に対して範囲を記憶しておく条件文抽
    出手段と、 前記条件文抽出手段で指定された条件文をループの外に
    出して、現在のループと同じループで条件文のみのルー
    プを該現在のループの直前に挿入するループ分割手段
    と、 前記ループ分割手段で分割されたループの間に、制御変
    数の値を一時変数に代入する中間コードを挿入し、その
    直後のループの終値を一時変数に変更するループ補正手
    段と、 を備えたことを特徴とするコンパイラ装置
JP8159077A 1996-05-30 1996-05-30 ループ外への条件付き飛び出しがあるループの並列化方法及び装置 Expired - Lifetime JP2956591B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8159077A JP2956591B2 (ja) 1996-05-30 1996-05-30 ループ外への条件付き飛び出しがあるループの並列化方法及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8159077A JP2956591B2 (ja) 1996-05-30 1996-05-30 ループ外への条件付き飛び出しがあるループの並列化方法及び装置

Publications (2)

Publication Number Publication Date
JPH09319591A JPH09319591A (ja) 1997-12-12
JP2956591B2 true JP2956591B2 (ja) 1999-10-04

Family

ID=15685724

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8159077A Expired - Lifetime JP2956591B2 (ja) 1996-05-30 1996-05-30 ループ外への条件付き飛び出しがあるループの並列化方法及び装置

Country Status (1)

Country Link
JP (1) JP2956591B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7487497B2 (en) 2004-08-26 2009-02-03 International Business Machines Corporation Method and system for auto parallelization of zero-trip loops through induction variable substitution
JP2018067167A (ja) * 2016-10-20 2018-04-26 富士通株式会社 コード生成装置、コード生成方法及びコード生成プログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
「Software Practice and Experience」Vol.21,No.9(1991−9)P.891−905
H.Zima,B.Chapman著、村岡訳「スーパーコンパイラ」(1995−4−25)オーム社、P.253−254

Also Published As

Publication number Publication date
JPH09319591A (ja) 1997-12-12

Similar Documents

Publication Publication Date Title
JP3190773B2 (ja) 言語処理プログラムのコンパイル処理方法
JP3664473B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP2921190B2 (ja) 並列実行方式
JPH11212797A (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
EP0428560A4 (en) Machine process for translating programs in binary machine language into another binary machine language
JPH1097430A (ja) 最適化のためにアセンブリコードルーチンをソースコードルーチンに挿入する方法およびそのシステム
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
EP1164477A2 (en) A loop optimization method and a compiler
JP2956591B2 (ja) ループ外への条件付き飛び出しがあるループの並列化方法及び装置
KR0125605B1 (ko) 프로그램의 아키덱쳐 변환방법 및 장치와 그 방법 및 장치를 사용하여 프로그램의 동작을 검증하는 방법 및 장치
US7487496B2 (en) Computer program functional partitioning method for heterogeneous multi-processing systems
JP2001125792A (ja) 最適化促進装置
JPH10187461A (ja) 言語処理方式
JPH10320212A (ja) キャッシュ向け最適化方法
JPH09282173A (ja) プログラムの静的解析方法
JP3757825B2 (ja) プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
JP3018783B2 (ja) コンパイル方式
JPH1083311A (ja) シミュレータ
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
JP3141945B2 (ja) コンパイル装置
JPH07192034A (ja) インタプリタ型シミュレーション方法

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: 19990622