JPH04352036A - コンパイラにおける並列化処理装置 - Google Patents

コンパイラにおける並列化処理装置

Info

Publication number
JPH04352036A
JPH04352036A JP12586991A JP12586991A JPH04352036A JP H04352036 A JPH04352036 A JP H04352036A JP 12586991 A JP12586991 A JP 12586991A JP 12586991 A JP12586991 A JP 12586991A JP H04352036 A JPH04352036 A JP H04352036A
Authority
JP
Japan
Prior art keywords
loop
control
compiler
detects
induced
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.)
Pending
Application number
JP12586991A
Other languages
English (en)
Inventor
Kenzo Suzuki
鈴木 賢三
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP12586991A priority Critical patent/JPH04352036A/ja
Publication of JPH04352036A publication Critical patent/JPH04352036A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】この発明は、密結合マルチプロセ
ッサシステムに係り、特に並列実行を意図せずに設計さ
れた高級言語で書かれたソースコードを解析して、並列
実行可能なオブジェクトコードを生成する処理装置に関
するものである。
【0002】
【従来の技術】コンパイラの最適化において、ループの
繰り返しごとに必ず一定の値が増加又は減少する変数を
誘導変数と呼んでいる。FORTRAN(フォートラン
−科学技術計算用の高水準プログラム言語)のDOルー
プを並列に実行するには、ループ中の誘導変数を検出し
、それらの参照を全てループ制御変数の多項式で置き換
えた後、誘導変数の定義式を削除して個々の繰り返しを
独立に実行することができるようにする必要がある。
【0003】図8は従来のコンパイラにおいて誘導変数
の検出と削除の処理を説明するための説明図、図9は従
来のコンパイラにおいて誘導変数の検出ができない場合
の処理を説明するための説明図である。例えば図8(a
)に示されるサンプルプログラムのループでは、誘導変
数JはI*2と、誘導変数KはI+2と等しいので、実
行文46における誘導変数J,Kの参照をそれぞれI*
2,I+2で置き換え、誘導変数J,Kの定義式の実行
文43,44,45を削除することにより図8(b)に
示される変換結果が得られる。
【0004】上記のような誘導変数の検出と削除につい
ては、ALFRED  V.AHO他2名共著の「Co
mprilers(コンパイラ)−Principle
s,Techniques,and Tools(原理
・技法・ツール)」のP.643“Eliminati
on of Induction Variables
(誘導変数の削除)”として述べられている。誘導変数
は帰納的な定義式の実行文44あるいは他の誘導変数を
参照する定義式の実行文45がループ中に少なくとも1
つ存在する。従ってこのような形式の定義式の実行文を
検出することにより誘導変数を検出することができるが
、逆にこのようにして検出される変数が全て誘導変数に
なるとは限らない。例えば、図9に示されるようにルー
プ中に誘導変数Jの帰納的な定義式の実行文が存在して
いるが、誘導変数JについてIを使用して定式化するこ
とはできない。そのために、従来ではループ中の制御フ
ローグラフを考慮して誘導変数を検出するための有効的
な手法は知られていない。
【0005】
【発明が解決しようとする課題】上記した従来のコンパ
イラにおいて誘導変数を検出す手法は以上のようにして
処理されるものであり、誘導変数の検出手法の適用範囲
はループの内部が単一の基本ブロックで構成されている
場合に限定されるために、内部に分岐や非構造的なルー
プを含んでいる場合には、誘導変数を検出することがで
きないという問題点があった。
【0006】この発明は上記のような問題点を解決する
ためになされたもので、内部に複雑な制御構造を持つル
ープにおいても確実に誘導変数を検出する機能を有する
コンパイラにおける並列化処理装置を得ることを目的と
する。
【0007】
【課題を解決するための手段】この発明に係るコンパイ
ラにおける並列化処理装置は、制御フローグラフをもと
に、支配木生成部で解析対象ループの支配木を生成し、
バックエッジ検出部で解析対象ループ中の非構造的なル
ープを検出し、非制御依存ブロック検出部でループの繰
り返しの都度確実に1回だけ実行される基本ブロックで
ある非制御依存ブロックを検出し、誘導変数定義文検出
部で非制御依存ブロックを対象として誘導変数の定義文
を検出するようにしたものである。
【0008】
【作用】この発明におけるコンパイラにおける並列化処
理装置は、ループ中の基本ブロック間の制御フローグラ
フをもとに、ループの繰り返しにおいて制御に依存しな
い基本ブロックを検出し、このような基本ブロックに含
まれ、かつループ内で単一の代入文を持つ変数を検出す
ることにより、複数の基本ブロックによって構成される
ループにおいても確実に誘導変数を検出することが可能
となる。
【0009】
【実施例】この発明に係るコンパイラにおける並列化処
理装置は、以下に述べるような機能を有する誘導変数検
出部を設けることにより達成される。なお、この発明で
は検出する誘導変数は次のような形式のもの、すなわち
「並列化対象ループ中にただ1つの定義文を持ち、その
定義文が必ずループの繰り返しの都度1回だけ実行され
る変数」に限定する。実際のプログラムでは、ほとんど
全ての誘導変数がこのような形式で定義されている。 (1)先立つ処理によって求められている制御フローグ
ラフをもとに、解析対象ループの支配木を生成する。2
つの基本ブロックB1とB2において、「制御がB2に
到達する時には必ずB1を通っている」場合に「B1は
B2を支配する」と云い、“B1 dom  B2”と
記述する。このような支配関係を木構造で表現したもの
が支配木である。ループの出口を支配する基本ブロック
はループ内を実行するたびに必ず1回実行されるが、こ
のような基本ブロックの集合は支配木において、ループ
の入口となる基本ブロックから出口となる基本ブロック
に至る経路上のノードの集合として求めることができる
。この集合をAとする。 (2)解析対象ループ中の非構造的なループを検出する
。このようなループに含まれる基本ブロックは、解析対
象としているループの1回の繰り返しにつき複数回実行
される可能性があるため、上述した集合Aから除外しな
ければならない。そのために制御フローグラフ中のバッ
クエッジを検出する。このバックエッジによって作られ
るループ内で、制御に依存することなく必ず実行される
基本ブロックは、バックエッジの両端の基本ブロックに
よって形成される支配木の経路上の集合として求められ
る。この集合をBとする。 (3)ループの繰り返しの都度確実に1回だけ実行され
る基本ブロックを検出する。このような基本ブロックを
非制御依存ブロックと呼ぶ。このような基本ブロックの
集合は上述した2つの集合を用いて“A−B”として求
められる。 (4)このようにして求められた非制御依存ブロックを
対象として誘導変数の定義文を検出する。
【0010】図1はこの発明の実施例であるコンパイラ
における並列化処理装置が適用するコンパイラの全体構
成を示すブロック図である。図において、ソースコード
11はソースコード解釈部14により中間コード12に
変換される。中間コード12は最適化処理部15により
並列化の容易な形式に変換され、並列化処理部16では
並列実行可能な部分を検出したりあるいは必要に応じて
コードを変更する。このように解析された情報をもとに
、コード生成部17は並列化オブジェクトコード13を
出力する。この発明におけるコンパイラにおける並列化
処理装置では、誘導変数を検出する処理を特徴としてい
るが、この処理を行うのが誘導変数検出部であり、これ
は最適化処理部15の一部分として実現される。
【0011】図2は図1の誘導変数検出部の構成を示す
ブロック図である。図において、1は誘導変数検出部、
2は支配木生成部、3はバックエッジ検出部、4は非制
御依存ブロック検出部、5は誘導変数定義文検出部、7
は解析情報、12は中間コードである。
【0012】上記のように構成された誘導変数検出部1
において、制御フローグラフをもとに、支配木生成部2
で解析対象ループの支配木を生成する。バックエッジ検
出部3で解析対象ループ中の非構造的なループを検出す
る。非制御依存ブロック検出部4でループの繰り返しの
都度確実に1回だけ実行される基本ブロックを検出する
。このような基本ブロックは支配木においてループの出
口を支配し、かつ内部の非構造的なループに含まれない
基本ブロックである非制御依存ブロックとして求まる。 誘導変数定義文検出部5で非制御依存ブロックを対象と
して誘導変数の定義文を検出する。
【0013】図3は図1の誘導変数検出部の動作を説明
するためのフローチャート、図4はこの発明の実施例で
あるコンパイラにおける並列化処理装置の処理を説明す
るための説明図であり、図4(a)は入力となるソース
コード、図4(b)はループ内部の制御フローグラフ、
図4(c)は支配木、図4(d)は誘導変数の除去後の
コードをそれぞれ示す。図5はこの発明の実施例である
コンパイラにおける並列化処理装置の処理を説明するた
めの説明図であり、図5(a)は入力となるソースコー
ド、図5(b)はループ内部の制御フローグラフ、図5
(c)は支配木をそれぞれ示す。図6はこの発明の実施
例であるコンパイラにおける並列化処理装置の処理を説
明するための説明図であり、図6(a)はループ内部の
制御フローグラフ、図6(b)は支配木をそれぞれ示す
。図7はこの発明の実施例であるコンパイラにおける並
列化処理装置の処理を説明するための説明図であり、図
7(a)はループ内部の制御フローグラフ、図7(b)
は支配木をそれぞれ示す。図において、31〜42は処
理ステップ、51〜59,61〜66は実行文、101
〜104は制御フローグラフのエッジ、105,107
,109,110は制御フローグラフのバックエッジ、
106,108,112,113は非構造ループに含ま
れる基本ブロックである。
【0014】次に、この発明の実施例であるコンパイラ
における並列化処理装置を適用し、2つのサンプルプロ
グラムに対して誘導変数を検出する処理について説明す
る。図4(a)に示されるプログラム中のDOループが
並列化処理対象の時に、ループ中のコードはB1からB
4の4つの基本ブロックに分割でき、図4(b)に示さ
れる制御フローグラフが得られる(処理ステップ31)
。ここで、説明の便宜上ループの処理の入口となる基本
ブロックをH、ループの処理の出口となる基本ブロック
をTとし、制御フローグラフに含めておく(処理ステッ
プ32)。この制御フローグラフをもとに、図4(c)
に示される支配木が生成される(処理ステップ33)。 次に制御フローグラフの各エッジ101〜104に対応
するフラグを用意してすべてをoffに初期化する(処
理ステップ34,35)。これはバックエッジ検出の前
処理であるが(処理ステップ36)、この制御フローグ
ラフにはバックエッジが存在しないため(処理ステップ
37)、処理ステップ36でフラグがonになるエッジ
は存在しない。そのために処理ステップ38〜41に至
る部分は実行されることなく処理ステップ42に移り、
図4(c)に示される支配木において基本ブロックのH
からTに至る経路上でフラグがoffの基本ブロック、
すなわちB1,B4がループの繰り返しにおいて制御に
依存しない部分として検出される。その結果を図4(a
)に示されるソースコードと比べて確認して見る。基本
ブロックB1,B4はループの繰り返しの都度必ず実行
されるのに対し、基本ブロックB2,B3は条件文であ
る実行文53によっていずれか一方だけが実行される。 誘導変数Jはループ中で制御に依存しない基本ブロック
B1においてのみ値が定義される実行文52、及びその
代入文の形式から、ループの繰り返しの都度1づつ増加
する誘導変数であり、ループの実行前の初期化による実
行文51より、ループ中の誘導変数JをIで置き換えて
誘導変数Jの定義式の実行文51,52を除去して図4
(d)に示されるコードを得る。
【0015】次に、図5のプログラムをもとに、ループ
中にバックエッジを含む場合の処理について説明する。 上述した前例と同様に、処理ステップ31〜35の処理
において図5(b)に示される制御フローグラフと図5
(c)に示される支配木が得られる。制御フローグラフ
より基本ブロックB2の末尾から先頭に至るバックエッ
ジ105が検出される(処理ステップ36)。そこで、
このバックエッジ105によって形成される内部の非構
造的なループを検出するために、処理ステップ38〜4
1の処理を行う。バックエッジ105は同一の基本ブロ
ックB2を起点と終点にしているために、処理ステップ
38では基本ブロックがBS=BE=B2となる。処理
ステップ39において、BEがBSを支配していること
(BE dom BS)を確認する。支配関係を考える
場合に、通常各ノードは自分自身を支配しているものと
解釈するので、ここでは“B2  domB2”が成立
して処理ステップ40に分岐する。処理ステップ40で
は「B2からB2に至る全ての基本ブロック」、すなわ
ちB2のフラグをonにする。処理ステップ41ではバ
ックエッジ105のフラグをoffにする。これでフラ
グがonのエッジがなくなるために、処理ステップ37
から処理ステップ42に分岐する。図5(c)に示され
る支配木では基本ブロックHからTに至る経路ではB1
,B2,B3の3つの基本ブロックがあるが、このうち
フラグがonのものB2(基本ブロック106)を取り
除きループ中の制御に依存しない基本ブロックB1,B
3を得る。その結果を図5(c)に示されるソースコー
ドと比較すると、基本ブロックB1中の実行文63で定
義される変数Jは誘導変数であるが、基本ブロックB2
中の実行文64で定義される変数Kは、DOループの1
回以上の繰り返しにつき2回以上実行される可能性があ
るために、変数Kは誘導変数にならないことが分かる。
【0016】上述した2つの実施例では、ソースコード
から制御フローグラフと支配木を使用して、ループ中で
変数を定義している誘導変数を検出する仮定を示してい
る。この出願の発明では、基本ブロックを単位として並
列化対象ループを解析し、ループの繰り返しの都度ルー
プ内の制御構造に依存することなく確実に1回だけ実行
される基本ブロックを検出する機能を特徴としている。 そこでさらに、2つの制御フローグラフを例として制御
に依存しない基本ブロックを検出する過程について説明
する。
【0017】図6(a)に示されるループ中の制御フロ
ーグラフの場合に、図3に示される処理ステップ33で
図6(b)に示される支配木が生成され、処理ステップ
35でバックエッジ107が検出される。処理ステップ
38では基本ブロックがBS=B5,BE=B2となり
、図6(b)に示される支配木でB2からB5に至る経
路上の基本ブロック108、すなわちB2とB5のフラ
グをonにする。処理ステップ42では支配木でHから
Tに至る基本ブロックのうちでフラグがoffのもの、
すなわちB1とB6が制御に依存することがない基本ブ
ロックとして検出される。図6(a)を見ると、基本ブ
ロックHからTまでの制御フローグラフで制御に依存し
ない基本ブロックがB1とB6の2つであることが容易
に確認することができる。
【0018】次に、図7(a)に示されるループ中の制
御フローグラフの場合について考える。図3で示される
処理ステップ33で図7(b)に示される支配木が生成
され、処理ステップ36で109及び110の2つのバ
ックエッジが検出される。バックエッジ109は基本ブ
ロックB4を終点、B2を起点としているため、図7(
b)に示される支配木では、B2からB4に至る経路、
すなわち基本ブロック112で示したB2,B3,B4
の3つの基本ブロックのフラグをonにする。さらにバ
ックエッジ110はB5を終点、B3を起点としている
ため、同様に図7(b)に示されるB3からB5に至る
経路、すなわち基本ブロック113で示したB3,B4
,B5の3つの基本ブロックのフラグをonにする。以
上の処理のうち、処理ステップ42において図7(b)
に示されるHからTに至る基本ブロックの経路上で、フ
ラグがoffの基本ブロックB1,B6,B8が制御に
依存しないものとして検出される。この解析により制御
に依存しない基本ブロックが正しく検出されていること
は、図7(a)に示される制御フローグラフにより確認
することができる。
【0019】
【発明の効果】以上説明したように、この発明のコンパ
イラにおける並列化処理装置によれば、制御フローグラ
フをもとに、支配木生成部で解析対象ループの支配木を
生成し、バックエッジ検出部で解析対象ループ中の非構
造的なループを検出し、非制御依存ブロック検出部でル
ープの繰り返しの都度確実に1回だけ実行される基本ブ
ロックである非制御依存ブロックを検出し、誘導変数定
義文検出部で非制御依存ブロックを対象として誘導変数
の定義文を検出するようにしたので、ループにおける制
御構造に依存することなく、1回のループの繰り返しの
都度1回だけ実行される実行文を検出することができ、
その結果ループ中の任意の制御構造に対する誘導変数を
容易に、かつ確実に検出することができるという優れた
効果を奏する。
【図面の簡単な説明】
【図1】この発明の実施例であるコンパイラにおける並
列化処理装置が適用するコンパイラの全体構成を示すブ
ロック図である。
【図2】図1の誘導変数検出部の構成を示すブロック図
である。
【図3】図1の誘導変数検出部の動作を説明するための
フローチャートである。
【図4】この発明の実施例であるコンパイラにおける並
列化処理装置の処理を説明するための説明図である。
【図5】この発明の実施例であるコンパイラにおける並
列化処理装置の処理を説明するための説明図である。
【図6】この発明の実施例であるコンパイラにおける並
列化処理装置の処理を説明するための説明図である。
【図7】この発明の実施例であるコンパイラにおける並
列化処理装置の処理を説明するための説明図である。
【図8】従来のコンパイラにおいて誘導変数の検出と削
除の処理を説明するための説明図である。
【図9】従来のコンパイラにおいて誘導変数の検出がで
きない場合の処理を説明するための説明図である。
【符号の説明】
1    誘導変数検出部 2    支配木生成部 3    バックエッジ検出部 4    非制御依存ブロック検出部 5    誘導変数定義文検出部 7    解析情報 11    ソースコード 12    中間コード 13    並列化オブジェクトコード14    ソ
ースコード解釈部 15    最適化処理部 16    並列化処理部 17    コード生成部 31〜42    処理ステップ 43〜46,51〜59,61〜66    実行文1
01〜104    制御フローグラフのエッジ105
,107,109,110    制御フローグラフの
バックエッジ 106,108,112,113    非構造ループ
に含まれる基本ブロック

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】  ソースコードを入力として並列実行可
    能な箇所を検出するか、あるいは等価性を損うことなく
    ソースコードを書き換えることにより並列実行可能な部
    分を生成し、密結合マルチプロセッサ上で実行可能なオ
    ブジェクトコードを出力するコンパイラにおいて、制御
    フローグラフをもとに、解析対象ループの支配木を生成
    する支配木生成部と、上記解析対象ループ中の非構造的
    なループを検出するバックエッジ検出部と、ループの繰
    り返しの都度確実に1回だけ実行される基本ブロックで
    ある非制御依存ブロックを検出する非制御依存ブロック
    検出部と、上記非制御依存ブロックを対象として誘導変
    数の定義文を検出する誘導変数定義文検出部とから構成
    される誘導変数検出部を備えたことを特徴とするコンパ
    イラにおける並列化処理装置。
JP12586991A 1991-05-29 1991-05-29 コンパイラにおける並列化処理装置 Pending JPH04352036A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP12586991A JPH04352036A (ja) 1991-05-29 1991-05-29 コンパイラにおける並列化処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP12586991A JPH04352036A (ja) 1991-05-29 1991-05-29 コンパイラにおける並列化処理装置

Publications (1)

Publication Number Publication Date
JPH04352036A true JPH04352036A (ja) 1992-12-07

Family

ID=14920949

Family Applications (1)

Application Number Title Priority Date Filing Date
JP12586991A Pending JPH04352036A (ja) 1991-05-29 1991-05-29 コンパイラにおける並列化処理装置

Country Status (1)

Country Link
JP (1) JPH04352036A (ja)

Similar Documents

Publication Publication Date Title
JP7218793B2 (ja) プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法
JPH10228382A (ja) コンパイル方式
JP2002116916A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
CN104536898B (zh) C程序并行区域的检测方法
Cifuentes Structuring decompiled graphs
JPH06314203A (ja) コンパイラの最適化方法および装置
US7089545B2 (en) Detection of reduction variables in an assignment statement
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
US5790866A (en) Method of analyzing definitions and uses in programs with pointers and aggregates in an optimizing compiler
US5805894A (en) Method inside an optimizing compiler for analyzing assertions and redirecting control flow in programs
US5522074A (en) Vectorization system for vectorizing loop containing condition induction variables
EP3152658B1 (en) Data-dependent control flow reduction
JPS61241837A (ja) 範囲検査の最適化方法
JPS63304325A (ja) 並列化コンパイル方法
Hensel et al. AProVE: Proving and Disproving Termination of Memory-Manipulating C Programs: (Competition Contribution)
JPH04352036A (ja) コンパイラにおける並列化処理装置
JPH09282173A (ja) プログラムの静的解析方法
Lüdemann et al. From preprocessor-constrained parse graphs to preprocessor-constrained control flow
JP2674489B2 (ja) ベクトル化処理装置
JPH0795272B2 (ja) コンパイル方法
JPH11250035A (ja) 編集方式及び方法
JPH03260865A (ja) ベクトル化処理方式
JPH04163631A (ja) コンパイラ
Matos et al. Data flow analysis applied to optimize generic workflow problems
JPH08263298A (ja) コンパイラ装置