JPH01121938A - オブジェクト生成方法 - Google Patents

オブジェクト生成方法

Info

Publication number
JPH01121938A
JPH01121938A JP62279214A JP27921487A JPH01121938A JP H01121938 A JPH01121938 A JP H01121938A JP 62279214 A JP62279214 A JP 62279214A JP 27921487 A JP27921487 A JP 27921487A JP H01121938 A JPH01121938 A JP H01121938A
Authority
JP
Japan
Prior art keywords
procedure
call
loop
information
program
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
Application number
JP62279214A
Other languages
English (en)
Other versions
JP2749039B2 (ja
Inventor
Takayoshi Iizuka
飯塚 孝好
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
Original Assignee
Hitachi 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 filed Critical Hitachi Ltd
Priority to JP62279214A priority Critical patent/JP2749039B2/ja
Priority to US07/266,479 priority patent/US5146594A/en
Publication of JPH01121938A publication Critical patent/JPH01121938A/ja
Priority to US07/938,758 priority patent/US5396627A/en
Application granted granted Critical
Publication of JP2749039B2 publication Critical patent/JP2749039B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

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

【発明の詳細な説明】 (産業上の利用分野〕 本発明はソースプログラムを解析してオブジェクトプロ
グラムを生成するコンパイラに係り、特に手続き呼び出
しを含むプログラム部分の最適化に好適なオブジェクト
生成方式に関する。
〔従来の技術〕
コンバライラにおいて、生成するオブジェクトプログラ
ムを高速化するための機能を最適化と呼ぶ。従来、最適
化の適用範囲は、サブループチン・関数などの1つの手
続き内に限られていたが。
近年、プロシーデイングズ オン ザ ジグプラン 1
986 シンポジウム オン コンパイラコンストラク
ション、ジグプラン ノーテイシズ、第21巻 第7号
、1986年 7月刊、第176頁から第185頁にお
いて論じられているように、手続き間にまたがった最適
化が行なわれるようになってきた。その論文においては
、手続き呼び出しを含んだループの並列実行性可否を判
定するために必要な、手続き間にまたがった配列の参照
解析の方法が述べられている。この方法では、手続き呼
び出しの効果を該手続き呼び出しで値が変更される可能
性のある配列部分領域(Rsgion)と、呼び出し手
続きの実行中に値が使用される可能性のある配列部分領
域の情報に要約し、手続き呼び出しを含むループの並列
化に際し、では、ループくり返しの別々の回のそれぞれ
で参照される可能性のある配列部分領域どうしの間に重
なりが無ければ該ループは並列実行可能と判定される。
より正確に言うと、ループくり返しのある回で値を変更
される可能性のある配列部分領域と、他の回で値を変更
又は使用される可能性のある配列部分領域の間に重なり
がないことを解析することにより、該ループはループく
り返しの各回の処理を並列に同時に実行できると判定す
る。
〔発明が解決しようとする問題点〕
上記従来技術は、同一の配列部分領域が複数回参照され
る場合に最適化機能が低下するという問題があった。例
えば、第20図の左側のプログラムにおいては、■がサ
ブルーチンSUB 1のISNが4の行と7の行で参照
されている。さて、 ISNが4の行のサブルーチン5
UB2の呼び出しでは配列Vの全要素が必ず再定義され
ることから、VはDOloの制御変数Jの各値ごとに独
立に使われていることが分る。そこで第20図右側のよ
うにVの次元を拡張することにより、DoloはJの各
値ごとに並列に実行できる。この並列化により、プログ
ラムの実行速度は最大100倍になる。
しかしながら、従来技術では、DOloのループくり返
しにおいて配列Vの値が5UB2で毎回変更・使用され
る可能性があることを解析するのみだったので、使用の
前に定義が必ず起ることは分らなかった。そのため、上
記のような最適化はできなかった。
本発明の目的は1手続き呼び出しを含むプログラムの解
析機能を拡張し、同一配列部分領域の参照が複数回起る
場合にも十分な最適化を可能とすることである。
〔問題点を解決するための手段〕
上記目的は、手続き呼び出し効果の要約情報において、
変数・配列部分領域の参照の可能性と必然性を区別して
扱かうことにより達成される。
参照には定義(値の変更)と使用の2種類あり、そのう
ち、使用の必然性はデータフローに影響しない、よって
、次のようにすれば良い。
手続き間データフロー解析を行なう際、冬毛続き呼び出
しにより値が変更(定義)される可能性のある変数・配
列部分領域と、呼び出し時の値が使用される可能性のあ
る変数・配列部分領域と、値が必ず定義される変数・配
列部分領域とを手続き呼び出し効果の要約情報として用
い、手続き呼び出しを含む部分のデータフロー解析にお
いては該要約情報で該手続き呼び出しのデータ参照を代
表させ、参照の可能性と必然性を区別したデータフロー
解析を行なう。
〔作用〕
手続き呼び出しにより値が変更される可能性のある変数
・配列部分領域と、呼び出し時の値が使用される可能性
のある変数・配列部分領域を求めることにより、手続き
呼び出しを含めた文と文の間で、配列部分領域を含めた
データの値がどこで設定され、どこで使用されるかが分
る。しかも、使用については呼び出し時Q値の使用につ
いての情報なので、手続き内で一度再定義された値の使
用は除外することができる。よって、複数回の手続き呼
び出しで同じ配列部分領域が参照されていても、該参照
が手続きの呼び出し時の値を使用せず該配列部分領域を
独立して使っていることが分るので、各呼び出しごとに
該配列部分領域を別の配列に変えることにより、該複数
の手続き呼び出しを並列に実行するなどの最適化を行な
える。
また、手続き呼び出しにより値が必ず定義される変数・
配列部分領域を求めることにより、該手続きの前で設定
されていた値が該手続き呼び出しの後まで届くかを判定
できるので1手続き呼び出しの前後の文の並列性を従来
より詳しく求めることができ、最適化の範囲を拡大する
。第21図を用いてこの作用を説明する。1は従来の技
術の解析による依存グラフであり、2は本発明の技術に
よる依存グラフである。
81〜S3は文であり、それらを結ぶ矢印は文と文の間
のデータ依存を表わす、2では、S2で必ず定義される
変数・配列部分領域の解析により、Slから83へのフ
ロー依存が無いことが分っているとする。配列名のネー
ムなどの処理によりこれらより81から82への逆依存
を削除すると、1は3のように、2は4のようになる。
3では。
Slと82が並列に実行できることが分るのみであるが
、4ではSlと83も並列に実行できることが分る。よ
って例えば、S2の実行時間がSL。
S3に比べて小さい場合は、3に比べて4の実行時間は
約半分となり、実行時間が大巾に減少する。
〔実施例〕
以下1本発明の一実施例を図面を用いて説明する0本実
施例では、手続き間データフロー解析結果を用いる最適
化の例として、新たな最適化であるCALL回数削減処
理を選んだ、しかし、本発明の実施効果は該最適化に限
定されるものではなく、既存のほとんどの最適化に対し
てその適用範囲拡大に有効である。
CALL回数削減処理は、プログラムの実行における手
続き呼び出しの実行回数(CALL回数)を削減する最
適化である0例えば、第2図のFORTRANプログラ
ムでは、手続きWWQにおいて、手続き○PRODの呼
び出しがDOIOのループで100回×2ヶ所=合計2
00回実行されることが分るが、CALL回数削減処理
により、第2図のプログラムを、第2図と同じ処理を行
ない手続き呼び出しが2回に削減された第3図のプログ
ラムに変換することができる。
CALL回数削減処理は、第2図のプログラムから第3
図のプログラムへの変換例で示されるように、ループ内
にある手続き呼び出しに“着目し。
該ループのくり返しを呼び出し先手続きに移動すること
により手続き呼び出しの実行回数(CALL回数)を削
減する。実際には、呼び出し先手続きが他の手続きから
も呼ばれていることを考慮して、呼び出し先手続きのコ
ピーにループくり返しを移動し、呼び出し先手続き自身
は残しておく、また。
呼び出し先手続きのコピーの数を削減するために、ルー
プくり返しが同一の場合は、該コピーを共用する処理、
ループくり返しの移動に際してループを分割する処理も
行なっている。
ループくり返しの前に行なわれるループ分割では、手続
き呼び出しを含むループを該手続き呼び出しの前後で分
割しているが、このループ分割によって手続き呼び出し
を含まないループが生じ、新たにベクトル化、並列化の
対象とすることができる。
第1図は、本発明を実施したコンパイラを機能ブロック
で示すものである。40はコンパイラを示している。コ
ンパイラ40はソースプログラム10を入力して、最後
にオブジェクトプログラム3oを出力する。本実施例で
は、更に最適なCALL削減点を決定するために、冬毛
続きからどの手続きが何回呼ばれたかを示す情報である
CALL回数情報15も入力している。CALL回数情
報15はプログラムの動的特性を解析する公知のコーテ
イリテイプログラムの出力として得ることが出来る。
手続き名情報700.CALL点情報500゜参照領域
情報600はCALL回数削減のために用いる内部デー
ゾであり、CALL回数削減後ソースプログラム20は
、ソースプログラム10に対してCALL回数削減を行
なった後のソースプログラムである。
コンパイラ40はCALL点解析点100.手続き間デ
ータフロー解析部200.CALL回数削減部300.
オブジェクトプログラム生成部400、とから構成され
る。
CALL点解析部100は、ソースプログラム10を入
力し、ソースプログラム10中に含まれる全手続き名の
一覧表である手続き名情報700、および、各手続きの
最内側ループ内の手続き呼び出し点CALL点での実引
数情報であるCALL点情報500を出力する部分であ
る。
CALL点情報500の収集対象を最内側ループに限定
しているのは、本発明の実施によって増加するメモリ量
を小さくするためであり、この制限は取り除いても良い
手続き間データフロー解析部200は、ソースプログラ
ム100を入力し、ソースプログラム100に含まれる
全手続きについて、該手続きの呼び出しにより値が変更
されめ可能性のある変数・配列部分領域(変更領域)と
、呼び出し時の値が使用される可能性のある変数・配列
部分領域(使用領域)と、値が必ず定義される変数・配
列部分領域(定義領域)とを解析し、結果として参照領
域情報600を出力する部分である。
CALL回数削減部は、ソースプログラム10゜手続き
名情報700.CALL点情報500.参照領域情報6
00.CALL回数情報15とを入力し、ソースプログ
ラム10に対してCALL点削減を行なった後のソース
プログラムであるCALL回数削減後ソースプログラム
20を生成出力する部分である。
オブジェクトプログラム生成部400は、CALL回数
削減後ソースプログラム20を入力し、該入力からオブ
ジェクトプログラム30を生成・出力する部分である。
オブジェクト生成部400は公知なので詳細は省く、オ
ブジェクト生成部400では、CALL回数削減後ソー
スプログラム200に対して既存の最適化も行なう、既
存の最適化でも参照領域情報600を利用することによ
り適用範囲を拡大することができるが、詳細は述べない
以下、コンパイラ40の各部分100〜400の動作を
詳細に説明する。
まず、第4図を用いて、CALL点解析部100の動作
を説明する。
105では、読み込むべきプログラム単位が残っている
かを判定し、これが真のときは110へ制御を移し、偽
のときは処理を終了する。110では、プログラム単位
を1つ読み込んで115に制御を移す、115では、読
み込んだプログラム単位の手続き名を手続き名表700
に登録し、120に制御を移す4第13図に手続き名表
の構造を示す、710はプログラム単位の手続き名を保
持するフィールド、720は該プログラム単位を呼び出
しているCALL点の情報700へのポインタを保持す
るフィールド、730は該プログラムの削減属性(後述
)を保持するフィールドであり、730のフィールドは
CALL点解析部100では値を設定しない、120で
は、読み込んだプログラム単位の先頭の文をSに設定し
、125に制御を移す、125では、SがDo文かを判
定し、これが真のときは130に制御を移し。
偽のときは165に制御を移す、130では文Sで始ま
るDoループが最内側かを判定し、これが真のときは1
35に制御を移し、偽のときは165に制御を移す、1
35では、該Doループの先頭の文をTに設定して、1
40に制御を移す、140では、TがCALL文かを判
定し、これが真のときには145に制御を移し、偽のと
きは155に制御を移す、145では該CALL文が該
Doループの中で必ず実行される文であるかを判定し、
これが真のときは150へ制御を移し、偽のときは15
5へ制御を移す6以上により、各プログラム単位の最内
側Doループ中の必らず実行されるCALL文のときの
み150↓こ到達する。150では、CALL先の手続
きのCALL点情報500に該CALL文の実引数情報
を追加する。第5図にCALL点情報の構造を示す、5
10は各手続き情報ごとに作られ、該手続きの各呼び出
し元のCALL文(CALL点)についての情報を保持
する。512は呼び出し元手続き名を保持するフイール
ド、514は該CALL点のISNを保持するフィール
ド、516は該CALL点のグループ番号(後述)を保
持するフィールド、517は該CALL点を囲む最内側
ループのループ長を保持するフィールド、518は該C
ALL点での実引数情報(520,530)へのポイン
タを保持するフィールドである。ISNとは各手続きの
何行めの文すかを示す番号である。520を用いて実引
数情報の構造を説明する。522は仮数リスト中での実
引数の位置、即ち、何番目の実引数であるかを示すフィ
ールド、524は実引数となる変数・配列の名前を保持
するフィールド、526は実引数の型を保持するフィー
ルド、528は実引数の寸法宣言を保持するフィールド
、529は最内側ループの実行に従かった実引数の添字
値の変化を示すものである。実引数が変数の場合には。
長さ1の配列とみなす。実引数が変数・配列以外のとき
は、名前のない変数とみなす、528゜529における
(r工、 rz、・・・、rや)という表現で、各r 
i (1< i < n )はi次元めの添字情報を示
す。また、a:bという表現は、添字の値の下限がa、
上限がbであることを示し、a:b:’cという表現は
、添字の値の初期値がa、終値がbで、Cが増分である
ことを示す。
第4図にもどって、CALL点解析部100の動作の説
明をつづける。150の処理を終えた後、155に制御
を移す、155ではTが該DOループの最後の文かを判
定し、これが真のときは165に制御を移し、偽のとき
は160に制御を移す。
160では、Tの次の文をTに設定し直し、140に制
御を移して該Doループ内の文についての処理をつづけ
る。165では、Sが該プログラム単位の最後の文かを
判定し、これが真のときには170に制御を移して、次
のプログラム単位の処理に移り、偽のときには125に
制御を移して。
該プログラム単位内の文についての処理をつづける。以
上で、CALL点解析部100の動作を説明した。
例えば、ソースプログラム10として第2図に示される
FORTRANが与えられたとき、CALL点解析部1
00は、第5図で示されるCALL点情報500(ただ
し、手続き0PRODのCALL点情報のみ示した)と
第13図で示される手続き多情報700(ただし、削減
属性は未設定とする)を出力する。
次に、手続き間ブーツフロー解析部200について説明
する。手続き間データフロー解析部200は、ソースプ
ログラム100に含まれる全手続きに対して参照領域情
報400を生成する部分である。まず、参照領域情報4
00の構造を第6図を用いて説明する。第6図で、4o
1は第2図で示されるFORTRANプログラムの手続
き0PRODについての参照領域情報である。参照領域
情報400は、各手続き内で参照される仮引数および入
城変数について作られ、各変数および配列ごとに、仮引
数位置又は入城変数アドレス4102名前420゜寸法
宣言440.変更領域450.使用領域460゜定義領
域470の情報を保持する。410は入城変数アドレス
の場合、(b、d)の形式であり、bはコモンブロック
名、dはコモンブロック内アドレスを示す、変更領域4
50.使用領域460゜定義領域470はそれぞれ、変
数・配列のうち手続き呼び出しにより値が変更される可
能性のある領域、呼び出し時の値が使、われる可能性の
ある領域、必ず定義される領域を、第5図の529のフ
ィールドと同じ形式で表現したものである。 450゜
470で0は該当する領域が無いことを示す。
さて、第22図を用いて手続き間データフロー解析部の
動作を説明しよう、210では手続き名表を逆実行順に
ソートする。逆実行順とは1手続き呼び出しにおける呼
び出し元手続きが呼び出し先手続きよりも必ず後にくる
ような順序である。
このようにソートすることにより、以下の処理において
呼び出し先手続は既に処理済であることを保持する1例
えば、第2図のプログラムでの逆実行順は0PROD、
WWQの順である1本実施例では、プログラムに再帰呼
び出しが含まれることがないFORTRAN言語を対象
とするので、必ず逆実行順が存在する。次に220では
5手続き名表の先頭にある手続きを読み込む。230で
は、参照領域情報を用いて、手続き呼び出しも含めて、
手続き内での最適化を行なう、該手続き内最適化230
は1手続き呼び出しの扱い方以外は公知である。しかし
、手続き呼び出しについては参照領域情報を用いること
ができるので、最適化の適用範囲は従来より広い0手続
き呼び出しは第23図のように処理する。まず、221
では、該手続き呼び出し点での実引数と呼び出し先手続
きの参照領域情報から、該呼び出し点で参照される領域
を呼び出し元手続き内の変数を使って表現する。
(210におけるソート処理により、呼び出し先手続き
は珊に230〜270の処理がされているので、参照領
域情報400が既に作られている)第24図の2000
は、そのように求めた呼び出し元での参照領域情報であ
り、第2図のプログラムの手続きWWQのl5N6の文
の手続き呼び出しで参照される領域を表現している。呼
び出し先手続きでの参照領域情報400との違いは、2
000の情報は呼び出し元手続き(WWQ)内の変数を
使って表現されている点である。2020〜2070の
各フィールドは、420〜470のフィールドに対応し
ている0手続き呼び出しがループ内に含まれるため複数
回実行される場合は、ループの何回めかによって該手続
き呼び出しで参照される領域が変化するので、各参照領
域を表わすフィールドのうち2050,2060.20
70はループ制御変数などの変数を含む表現とする。
さて、第23図の説明にもどって1次に、222では、
221で作られた呼び出し点での参照領域情報2000
を公知の手続き内データフロー解析で利用する。このと
き、手続き内データフロー解析では、番手続き呼び出し
が第25図の2220の制御構造を持った文の列と同等
であるとみなして手続き呼び出し点での参照領域情報2
000を利用する。2221は使用領域の全てが使用さ
れる文であり、2222は定義領域の全てに対して代入
が起る文であり、2223は変更領域の全てに対して代
入が起る文である。2223は2222よりの分岐下に
あり、必ず実行されるとは限らず、変数・配列の値が変
更領域上で必ず書き換えられるとは限らないことを示し
ている。また、 2221は分岐下にないので、使用領
域の使用が必ず起ることを示しているが、使用について
は必然性と可能性の区別は不要なのでこれでよい0以上
で第25図および第23図の説明を終える。
さて、第22図にもどって手賛き間データフロー解析部
の動作の説明をつづける。
240では、変更領域の解析を行なう、この解析法は公
知例で述べた文献に示されてい、るので、詳細は略す。
25ciでは、定義領域の解析を行なう0本解析では、
与えれた手続き内の全ての文を含むループ回数1の仮想
的なループLPを考える。そして、第26図の2500
に示される。引数として与えられるループLに対して該
ループで必ず定義される変数・配列部分領域(DEF(
LP)と名づける)を求める処理を、LPを引数として
呼び出すことによりDEF(LP)を求める。このDE
P(LP)が与えられた手続きの定義領域となる。
処理2500の対象は、特にことわりない限り。
入城変数および仮引数である。
2510では、Lに直接合まれる全てのループ2に対し
て、2500の処理を再帰的に呼び出すことによりDE
F(Q)を求める。Lに直接合まれるループとは、Lに
含まれるループのうち最外側のものである。以下では、
ループLに直接合まれるループは、ループL内の1つの
文とみなして処理する。2520では、ループL内の文
に付加されたDFN番号を示す変数nに1を設定する。
DFN番号とは、深さ優先番号付け(Depth Fi
rstNumbering)アルゴリズムによって各文
に付加された番号であり、ループ入力からの制御の流れ
において先に実行される文は、その文よりも後に実行さ
れる文よりもDFN番号が小さいという性質がある。D
FN番号が1の文は、ループ入口の文である。
次に2530および2540ではDEF−IN(n)と
DEF  0UT(n)を計算する。
DEF  IN(n)はループ入口からDFN番号がn
の文(以下、SIlで示すことにする)の直前まで、D
EF  0UT(n)はSrlの直後までの間で必ず定
義される変数・配列部分領域の集合であり、配列部分領
域の場合は該ループの制御変数および該ループ内で変化
する変数を含んだままで表現される1例えば第28図の
フローグラフで表わされるプログラムでは、 DEF  0UT(5)=(A(I、J)、A(I、J
+1))DEF  IN(6)=(A(I、J))DE
F−OUT(6)=(A(I、J)、 B(I、J))
となる。
DE F  I N(n)および、DEF  0UT(
n)は1次のように計算する。
DE F  I N(n)= ただし、nx(p)は、制御の流れにおいて。
Snの直前にあ全ての文のDFN番号pについてのx(
p)の積集合を表現する。
DEF−OU T (n ) = DEF   IN(n)UDEFO(n)ただし、DE
FO(n)は、文SI、での定義領域の集合であり、S
nが代入文、入力文などの場合は、S□で代入先又は入
力光となる変数・配列部分領域であり、Snが手続き呼
び出しの場合は、該呼び出し点での定義領域の集合であ
り、SnがループLに直接合まれるループ(Qとする)
の場合は、DEF(Q)である、また、aUbは、集合
aとbの和であり、集合a、bの要素のうち配列部分領
域については、同じ配列どうしの部分領域を加えたもの
を表現する。
次に2550では、nを1増し、2560ではnがルー
プL内の最大DFN番号(D F Nmaxと名づける
)以下なら2530に制御を移し、そうでないなら25
70に制御を移す。
上記において、DEF  0UT(P)(7)値は25
4の処理がDFN番号の昇順に行なわれることと先に述
べたDFN番号の性質により、DEF−OU T (n
 )の値を求める際に既に計算済であることが保証され
る。
257oでは、ループLの入口から最後までの間で必ず
定義される変数・配列部分領域の集合DEF−OU T
 (D F Nmax)を用いて、ループL定義領域D
EF(L)を次のように計算する。
DEF(L)=extend(DEF  OUT(DF
Nmax)、L)ただし、 extend(r 、 Q
 )は、rの要素のうち配列部分領域については、添字
に現われる変数がループLの実行に伴なった変化する分
を組み込れた表現に変換したものである。
例えば、第28図のフローグラフで表わされるプログラ
ムでは、 DE F  0UT(D FNmax)=DE F  
0UT(8)=(A(I、J)、B(I、J)) であり、ループLではIが1から100まで1きざみで
増えるので、 DEF(L)=(A(1:100:1.J)、B(1:
100:1.J))となる。
以上で、定義領域の解析250をするための第26図の
2500の処理の説明を終える。先に述べたように、こ
の2500の処理を手続き全体を含む仮想ループLPを
引数として呼び出すことにより、該手続きの定義領域(
DEF(LP)に等しい)が求められる。
さて、第22図の説明にもどって、260では、使用領
域の解析を行なう。本解析では、前記仮想ループLPを
引数として、与えられたループLに対して該ループの使
用領域(U S E (L)と呼ぶことにする)を求め
る第27図の2600の処理を呼び出すことによりUS
E(LP)を求める。このUSE(LP)を与えられた
手続きの使用領域とする。第27図の処理は特にことわ
りのない限り大域変数および仮引数のみを対象として行
なう。以下、第27図の2600の処理の説明をする。
2610では、ループLに直接合まれる全てのループΩ
に対して、2600の処理を再帰的に呼び出すことによ
りUSE(Q)を求める。2620では、iに2を設定
する。iは、ループ内の変数・配列部分領域の使用がル
ープ回数を単位として何回前までライブかを表わす変数
である6本実施例では、iの値が1の場合と2の場合し
か解析せず、2回前までライブな使用は、何回前までで
もライブな可能性があるとして扱かつている。
実用上は1本実施例のようにライブな使用を分類すれば
十分であるが、必要ならば、1回め、2回め、・・・2
m回とm+1回め以上という分は方にしてもよい。
2630では、DFN番号を保持する変数nにL内の最
大DFN番号を設定している。2635と2640では
、USE  OUT’(n)とUSEIN’(n)を計
算する。USE−OUT’(n)は、DFN番号nの文
(Sfl)の直後からi−1回のLのループくり返しを
終てLのループ出口までの間に使われる可能性のある変
数・配列部分領域の集合、USE  IN’(n)は、
Snの直前からi−1回のループくり返しを経てLのル
ープ出口までの間に使われる可能性のある変数・配列部
分領域の集合である。例えば、第29図のフローグラフ
に表わされるプログラムでは、 USE  IN工(5) =(A(I−1,J))US
E  IN”(1)=(A(I−1,J)、A(I、J
−1))USE  OUT”(1)=(A(I、J−1
))となる。
USE  OUT”(1) にA(I−1,J)が含ま
れないのは、A(I−LJ)の値はループ1回前の、S
6とS8におけるA(I、J)への代入により必ず再定
義されるため、ループ1回前の81の直後ではライブで
なくなるためである。USE−OUT’(n)およびU
SE  IN’(n)は次のように計算する。
USE−OUT’(、n)= ただし、tJx(s)は、制御の流れにおいて。
Snの直前にある文のDFN番号Sについてのx(s)
の和を表現する。
USE   IN’(n)= ただし、USEO(n)は、文SIlでの使用領域の集
合であり、Soが代入文、出力文などの場合は、Snで
使用、出力される変数・配列部分領域であり、Snが手
続き呼び出しの場合は、該呼び出し点での使用領域の集
合であり、SnがループLに直接合まれるループ(Q、
とする)の場合は、USE(Q)である。
また、a−bは、集合aから集合すを引いし たものであり、集合a、bの要素のうち配列部分領域に
ついては、aに含まれる配列部分領域(raと名づける
)から、bに含まれる同じ配列の部分領域(rbと名づ
ける)を引いたものである。ただし、r’aからrbに
引く場合、X’bはraよりもループLの実行がi−1
回前であるとして引く。例えば、第29図のフローグラ
フでは、USE− IN2(5)を計算するに際して、USF、−0UT(
5)−DEFO(5)を計算するが、この値は次のよう
になる。
USE  0UT(5)−DEFO(5)=(A(I−
1、J)、A(I 、J −1))−(A(I 、J)
)==(A(1,J−1)) なぜならば、A(I−1,J)はループLの1回前の実
行におけるA(I、J)と一致するからである。
上記において、USE  IN(s)は2640の処理
がDFNf!!r号の逆順に行なわれることとDFN番
号について先に述べた性質により既に計算済であること
が保証される。
次に、2645ではnを1減らし、265oではnが1
以上なら2620に制御を移し、そうでないなら266
0に制御を移す。266oでは、iを1増し、2670
ではiが2以下なら262oに制御を移し、そうでない
なら268oに制御を移す、2680では、USE(L
)を次のように計算する。
USE(L)= congt(USE  IN’(1)−USE  IN
”(1)、L、1)Uextend(USE  IN”
(1)、 L)ただし、const(r、Q、c)は、
r要素の配列部分領域の添字のうち、ループLの実行に
つれて値が変る変数を、ループ乙の0回めのときの該変
数の値で置きかえたものを表現する。
例えば、第29図のフローグラフで表わされるプログラ
ム中のループ(Lと名づける)に対して、USE(L)
は次のように計算される。
USE(L)= const(US E    I Nヱ(1)二USE
    IN”(1)、L、1)Uextend(US
E  lN2(1)、 L)=const((A(I−
1,J)、A(I、J−1))−(A(1,J  1)
)L、1)Uextend((A(I、J−1))、L
)=const((A(I−1、J )山、1))U(
A(I : 100 : 1.J−1))=(A(0,
J))LJ(A(I : 100 : 1.J−1))
=(A(0,J)、A(I : 100 : 1.J−
1))以上で、使用領域の解析260をするための第2
6図の2600の処理の説明を終える。先に述べたよう
に、この2600の処理を手続き全体を含む仮想ループ
LPに対して処することにより、該手続きの使用領域(
=USE(LP))が求められる。
さて、第22図にもどって1手続き間データフロー解析
部200の動作の説明をっづげる。
270では、240〜26oで求めた、変更領域情報、
定義領域情報、使用領域情報を参照領域情報400に設
定する。先に述べたように、例えば第2図のプログラム
の手続き0PRODの参照領域情報400は、第6図の
401のようになる。
次に、280では1手続き名表700に次の手続きがあ
るかを判定し、これが真なら290に制御を移して手続
き名表の次の手続きを読み込んで230に制御を移して
次の手続きの解析を始め。
これが偽なら処理を終える。
以上により、各手続きを1度ずつ、逆実行順に処理して
、各手続きの参照領域情報400を求めることによって
、手続き間データフロー解析部200の処理が行なわれ
る。
以上で1手続き間データフロー解析部200の動作の説
明を終える。
次に、第1図の300のCALL回数削減部の動作を第
7図を用いて説明する。
3100では、手続き呼び出し点(CALL点)の前後
でループ分割が出来ないためにCALL回数の削減が出
来ないCALL点を以下の処理から除外すため、該CA
LL点のCALL点情報を削除する。3200では、ル
ープ移動先となる呼び出し先手続きのコピーを共通して
使えるCALL点を1つのグループにまとめる。330
0では、CALL回数情報をもとに、CALL回数削減
を行なうCALL点を決定する。3400では、実際に
ソースプログラム10を書き換えてCAL L回数の削
減を行ない、CALL回数削減後ソースプログラム15
へ出力する。
以下、3100〜3400のそれぞれの動作について、
別の図を用いて説明する。
まず第8図を用いて、CALL回数削減不能なCALL
点のCALL点情報削減する部分3100の動作を説明
する。
3105〜3130及び3165〜317oは、第4図
の105〜130及び165〜170がらプログラム単
位の名前を手続き名表に登録する部分115を除いたも
のと同じである。即ち、以上により、各プログラム単位
の最内側ループのときのみ3140〜3160が実行さ
れる。3140では、参照領域情報400を用いて該ル
ープ内の文について依存グラフを作成する。3150で
は。
該依存なグラフより強連結成分を抽出する。依存グラフ
とは、データの参照についての依存関係から1文と文の
間での実行順序関係を求めた有向グラフであり、連結成
分とは該有グラフ中でサイクルを構成するサブグラフ部
分である。
依存グラフの作成3140で手続き間データフロー解析
200の出力結果である参照領域情報400を使う。依
存グラフの作成3140の方法は、参照領域情報400
の扱い方以外は公知であり、参照領域情報400の扱い
方は、第22図の手続き内データフロー解析230で述
べたのと同じである。
また、強連結成分の抽出法も公知であるので詳細は略す
例として、第2図のFORTRANソースプログラム5
00の手続きWWQのl5N5〜9についての依存グラ
フと強連結成分を第9図で説明する。
910は、ソースプログラム内の各データ参照点間の依
存関係を示し、ISNが6の文で手続き0PRODの呼
び出しにより値の設定された配列TMPの各要素がIS
Nが7の文で使用されているというフロー依存関係、I
SNが7の文で値が設定された変数SQが該文の中で使
用されているというフロー依存関係、ISNが8の文で
手続き0PRODの呼び出しにより値の設定された配列
TMPの各要素がISNが9の文で使用されているとい
うフロー依存関係、ISNが9の文で値が設定された変
数SAが該文の中で使用されているというフロー依存関
係とを示す。
920は、910をともに作られた文と文との間での依
存グラフおよび強連結成分を示す。
手続きで参照されるデータの要約情報として本発明での
可能性と必然性を区別した参照領域情報を用いているの
で1手続き○PRODでは第3番番めの引数であるTM
Pの全要素が必ず定義され。
定義の前に該配列の要素は使用されることが無いことが
分り、ISNが6の文とINSが8の文の間にはフロー
依存が生じないことが分る。しかし、従来は、ISNが
6の文からISNが8の文へのフロ□−依存と、ISN
が8の文からISNが6の文へのフロー依存があると解
析されていた。そのため、ISNが6の文と8の文も強
連結成分を構成するように解析され、強連結成分中に2
つの手続き呼び出しを含むので冬毛続き呼び出しでのル
ープ分割ができず、CALL回数削減ができないと判定
されていた。
さて、第8図にもどって、次に3160では、2つ以上
の文を含む強連結成分に含まれるCALL文のCALL
点情報を削減する。これを行なうのは、強連結成分はル
ープ分割によって2つに分けることが出来ないため、該
強連結成文に含まれる手続き呼び出しの前後ではループ
分割が行なえず、CALL回数の削減ができないためで
ある。
次に、第10図を用いて、CALL点のグループ化を行
なう部分3200の動作を説明する。
3205では、手続き角情報700の先頭に登録された
手続きPとし、PのCALL点情報をCとする。321
oでは、Cの全ての行のCAI、L点グループ番号51
6を0に設定し、CALL点グループ番号がまだ決って
ないことを示す。3215では、CALL点グループの
数を示す変数GをOに設定し、C中の何行めかを示す変
数0を1に設定する。3220では、Qが「Cの全行数
」より小さいかを判定し、これが真なら3225へ制御
を移し、偽なら3275に制御を移す、3275では、
Pが手続き名表700に登録された最後の手続きが判定
し、これが真ならば処理を終え、偽ならば、3280で
、手続き名表でPの次に登録されている手続きをPとし
、そのCALL点情報をCとして3210に制御を移し
て、次の手続きについての処理に移る。3225では、
Cの0行めのCALL点グループ番号がOかを判定し、
これが真なら3230に制御を移し、偽ならば、327
0に制御を移して、Qの値を1増して3220に制御を
移して、Cの次の行についての処理に移る。3230で
は、Gの値を1増して、Cの0行めのCALL点グルー
プ番号にGの値を設定する。
3235〜3260では、Cの0行めと同じCALL点
グループにできるCALL点のCALL点グル−プ番号
にGの値を設定する。3235では、Cの2行めより後
の行を指す変数mにQ+1を設定する。3240では、
mが「Cの全行数」以下かを判定し、これが真なら32
40に#御を移し、偽なら3265に制御を移す。32
65では、CALL回数情報15を用いて、CALL点
グループ番号がGであるCALL点のCALL回数の総
和を求め、選択表1200に設定する。第12図は選択
表1200の構造を示し、1210は呼び出し先手続き
名を、1220はCALL点グループ番号を、1230
は該CALL点グループ内のCALL点のCALL回数
総和をそれぞれ示すフィールドである。さて、第10図
の説明に戻って、3245では、Cのm行めのCALL
点グループ番号がOか(即ち、CALL点グループ番号
が未定か)を判定し、これが真なら3250に制御を移
し、偽なら3260に制御を移して、3260でmの値
を1増して3240に制御を移してmについての次の行
の処理に移る。3250では、CのQ行めとm行めの実
引数情報(520,530)が名前のフィールドを除い
て全て一致するかを判定し、これが真のときは、Cの8
行めとm行めが同じCALL点グループに属すると判断
し、3255においてCのm行めのCALL点グループ
番号にGの値を設定する。この実施例では3250で示
される判断基準でCALL点グループを決めたが、この
判定基準を変えることにより、CALL点グループの大
きさを大きく、数を少なくすることもできる。そうする
ことにより、ループを移動する先の手続きのコピーを減
し、メモリをより減少できる。
第2図のFORTRANプログラムでは、第5図に示さ
れるように、手続きWWQのl5N6とl5N8のCA
LL点が、CALL点グループ番号が1のグループとな
り1選択表は第12図のようになる。
次に、第14図を用いて、CALL削減点の決定を行な
う部分3300の動作を説明する。
3305では、選択表1200を、グループ内CALL
回数総和1230の大きい順にソートする。3310で
は、手続き名表700の全ての行の削減属性フィールド
730にNULLを設定する。削減属性フィールド73
0の値は、NULL。
CALLER,CA L E Eのどれかであり、冬毛
続きごとにどれか1つの値をとる。NULLは、削減属
性730がまだ決ってない、又は、対応する手続きがC
ALL回数削減に関与しないことを示し、CALLER
は対応する手続きが手続き呼び出し元として該手続き内
のCALL点がCALL回数削減対象となることを示し
、CALLEEはは対応する手続きが手続き呼び出し先
としてCALL回数削減の際のループ移動先となること
を示す。1つの手続きの削減属性730の値は、同時に
CALLERとCALLEEにはならないので、ループ
の移動先となる手続きおよびそのコピーからループを更
に移動することはない、よって、該コピーよりの呼び出
し先のコピーを更に作ることはない。これにより、本発
明の実施によって手続きのコピーの数およびメモリ量が
指数関数的に増加するのを防いでいる。
次のステップである3315では、選択表中の何行めか
を示す変数Qを1に設定する。3320では、aの値が
r選択表の行数」以下かを判定し、これが真ならば33
25に制御を移し、偽ならば処理を終える。3325で
は、選択表1200のQ行めで表わされるCALL点グ
ループの呼び出し先手続き名1210で示される手続き
をPと呼びことにし、CALL点グループ番号123o
をGに設定する。3330では、手続き名情報700を
参照してPの削減属性730がCALLEE又はNUL
Lかを判定し、これが真のときは3335に制御を移し
、偽のときには3355に制御を移す。
3335では、P(7)CALL点情報500を参照し
て、CALL点グループ番号516がGの値に一致する
全CALL点の呼び出した手続きの削減属性730がC
ALLER又はNULLになっているかを手続き名情報
700を用いて判定し、これが真ならば3340に制御
を移し、該CALL点グループが選択された場合の処理
をする。
偽ならば3355に制御を移し、該CALL点グループ
が選択されなかった場合の処理をする。
3340では1手続き名情報700における手続きPの
削減属性をCALLEEにする。
3345では、PのC:ALL点情報500を参照して
、CALL点グループ番号516がGの値に一致する全
CALL点の呼び出し元手続きの削減属性730 t&
CALLERにする。
3350ではQの値を1増して、次の手続きの処理に移
る。3355では、選択表のa行目及びグループを削除
した後、PのCALL点情報500のうちCALL点グ
ループ番号がGの値と一致する行を全て削除して、次の
手続きの処理に移る。
以上により、例えばソースプログラム10として第2図
のFORTRANプログラムが与えられた場合、手続き
名情報700中の削減属性730は第13図のように設
定される。
次に、第15図を用いて、ソース変換部3400の動作
を説明する。
3405では、読み込むべきプログラム単位が残ってい
るかを判定し、これが真なら3410に制御を移し、偽
ならば処理を終える。3410では、プログラム単位を
1つ読み込む、3415では、読み込まれた手続きの削
減属性730がNULLかを判定し、これが真ならば、
3420に制御を移して、読み込まれたプログラム単位
をそのままCALL回数削減後ソースプログラム20へ
出力する。3425では、読み込まれた手続きの削減属
性730がCALLERかを判定し、これが真なら34
30に制御を移し、偽なら3445に制御を移す、34
30〜3440は、手続き呼び出し元の側に対する処理
であり、3445〜3460は。
手続き呼び出し先の側に対する処理である。
3430では、CALL情報500が残っていることに
よりCALL回数削減対象が示されている各CALL文
の前と後で、該CALL点を囲む最内側ループを分割す
る。この方法は公知であるので詳細は述べない、第2図
のFORTRANプログラムの手続きWWQのl5N6
とl5N8がCALL回数削減対象のCALL点として
選択されたことによりループ分割された後のソースプロ
グラムを第16図に示す、この例のように、ループ分割
に伴なって、新しい配列(TMP#1)の導入1610
〜1619、新しく導入された該配列(TMP#1)か
ら既存の配列・変数(TMP)への値の複写1620な
どが行なわれる。
3435では、ループ分割によって出来たループのうち
、ループ分割を引き起したCALLのみを含むループを
、該CALT、文の呼び出し先手続きのコピーを呼び出
す1つのCALL文で置き換える。これに際して、該コ
ピーの手続き名は、該コピーの複写元の手続き名とCA
LL点グループ番号516より生成する。生成された名
前は、既存の手続きの名前と異なるものでなければなら
ず。
又、該コピーの他の呼び出し点でも同じ名前を用いるよ
うにしなければならない。このような名前の生成法は公
知であるので詳細は述べない。
また、実引数は、その添字式に表われる最内側ループの
制御変数を該制御変数の初期値で置きかえる。
3440では、3430〜3435で書き換えられたプ
ログラム単位をCALL点削減後ソースプログラムへ出
力する。
3445では、読み込んだプログラム単位をそのままC
ALL回数削減後ソースプログラム20に出力する。3
450では、読み込んだ手続きのCA L L点グルー
プのうち未処理のものがあるかを判定し、これが真のと
きは3455に制御を移し、偽のときは3405に制御
を移して次のプログラム単位の処理に移る。3455で
は、該CALL点グループに対する呼び出し先側手続き
を作成する。3460では、3450〜3455で作ら
れた呼び出し先側手続きをCALL点削減後ソースプロ
グラム20に出力する。
3455の動作については、第17図を用いて、より詳
しく説明する。34522では、読み込んだときのまま
のプログラム単位を複写して、凧下での変換の対象とす
る。34554では、呼び出し元の実引数の寸法宣言に
合わせて、仮引数の寸法宣言を変更して次元を拡張する
34556では、該コピーの実行文全体をDOループで
かこむ。該ループの制御変数は、初期値l、増分1で終
値は、該CALL点グループ内のCALL点と囲む最内
側ループのループ長517とする。これに際して、プロ
グラム中のRETURN文は、新しく追加した該Doル
ープの末端となるCoNTINUE文へのCoTO文で
置き換える。
34558では、34554で次元拡張された仮引数の
添字を書き換える。この書き換えでは、まず、次元拡張
されて新しく追加された次元の添字をOとおいた後、各
次元の添字に次の値を加える。
i傘n ただし、iは、新しく追加されたDOループの制御変数
、nは、該CALL点グループ内のCALL点の処理対
象の該仮引数に対応した実引数の、最内側ループによる
添字変化529の、対応する次元の添字の増分である。
34559では、該コピーの手続き名を変更する。新し
い手続き名は、3435で説明したのと同じ方法で生成
する。
以上で、第17図の説明を終り、第15図のソース変換
部3400の動作の説明を終える8第2図のFORTR
ANプログラムに対してソース変換3400を終えた後
の、CALL回数削減後ソースプログラム20を第3図
に示す。
第2図の手続きWWQのl5N5〜l5NIOのループ
内にあるCALL文(ISN6とl5N7の文)は、第
3図ではループくり返しの外にあるCALL文(ISN
5とl5N8の文)で置き換えられており、CALL回
数が200回から2回に減少している。
次に、第18図〜第19図を用いて、オブジェクトプロ
グラム生成部400で行なわれるベクトル化・並列化が
とはように促進されるかを説明する。
第18図は、CALL回数削減後ソースプログラム20
の手続きWWQと0PROD# 1をベクトル化したも
のを、ソースプログラムの形式で表わしたものである。
手続きWWQのl5N6と8の文と手続き0PROD#
1のl5N4〜l5N7の文がベクトル化された処理を
表わしている。添字に傘が使われている配列は、該添字
の値が該次元の寸法の下限から上限までの全ての値をと
ったときの、該配列の部分配列を表わしており、代入お
よび演算は部分配列の各要素ごとに行なわれる。またV
SUMは。
部分配列の全要素の和を計算するベクトル演算である。
これに対して、元のソースプログラム10である第2図
では、ベクトル化の対象となり得るのは手続@WWQの
l5N5〜l5NI(1)DO7L/−プのみであり、
該DOループは手続き呼び出しを含むためベクトル化さ
れない6 第18図の手続きWWQのl5N6と8の文と手続き0
PROD#1のl5N4〜l5N7の文は、第2図の手
続きWWQのI SN7と9の文と手続き0PROD+
711SN4〜l5N7の文に対応しており、第2図の
該対応する部分はそれぞれ100回および200回実行
きれるので、ベクトル化による高速化の効果は大きい。
このようにして、CALL回数削減部300の動作によ
り、ベクトル化が促進され、スーパーコンピュータの適
用によるプログラムの高速化が図れる。
第19図は、CALL回数削減後ソースプログラム20
の手続き0PROD# 1 をマルチプロセッサ向けに
並列化したものをソースプログラムの形式で表わしたも
のである。
l5N6〜l5N13の文が並列化された処理を表わし
ており、これらの文の中でI SN7〜l5NI2の部
分がNP個のプロセッサで並列に実行されることを表わ
している。l5N2は、NPとして8を選んだことを示
し、l5N5は■が各プロセッサに局所的な変数である
ことを示している。
l5N6〜I SNI 3の文は、第2図の手続き0P
RODのl5N4〜I SN7の文に対応しており、第
2図の該対応する部分は200回実行きれる。これに対
して、第19図のl5N6〜l5NI 2の部分は、l
5N7〜l5NI2の部分がNP個のプロセッサで20
0/NP回実行される。このとき、総実行回数は200
/NP 傘NP=NP回で、元のソースプログラムと同
じだが、それぞれのプロセッサの処理は1/NP倍とな
り、各プロセッサは並列に実行されるので、経過時間は
1/NPで済む。
このように、CALL回数削減部300の動作により、
並列化が促進され、マルチプロセッサの適用によるプロ
グラムの高速化が図れる。
本実施例によれば、特に次の効果がある。
(1)手続き間データフロー解析において、番手続きの
処理が1回で済むので、解析負荷を減すことができる。
(2)CALL回数削回数象限対象側ループ内に限定し
ているので、呼び出し先手続きのコピーに生成によるメ
モリ量の増加を抑止しながら、CALL回数を大巾に減
すことができる。
(3)呼び出し先手続きのコピーの共用化を図っている
ので、メモリ量の増加を抑止することができる。
(4)呼び出し先手続きのコピー内のCALL回数削除
のために、更に該コピーよりの呼び出し手続きのコピー
が作られることがないので、手続きのコピーの数が指数
関数的に増えるのを防止する。
(5)CALL回数削減点の決定でCALL回数情報を
用いているので、CALL回数削減効果の高いCALL
点から優先的にCALL回数削減が行なわれる。
〔発明の効果〕
本発明によれば、手続き呼び出しを含むプログラムにお
いて、手続き呼び出しで使われる配列が他の手続き呼び
出し又は文で使われている場合に、正確なデータ依存関
係が解析できるので、該手続き呼び出し部分の最適化を
促進することができる。
例えば、問題点の項で述べたように、第20図のプログ
ラムでは、並列化が新たに可能になることにより、実行
速度が最大100倍になる。また、作用の項で述べたよ
うに、第21図の依存グラフで示されるプログラムでは
、並列化の範囲が広がることにより、実行速度が最大2
倍になる。また。
実施例の項で述べたように、第2図のプログラムでは、
CALL回数削減が可能になり、手続き呼び出し回数が
1/100になる。
CALL回数削減自体は、ループ内に手続き呼び出しが
ある場合、該手続き呼び出しの実行回数が「1/ループ
のくり返し回数」になるので、手続き呼び出しを含むプ
ログラムの実行時間を大巾に短縮する。また、本来D○
ループを含まない手続きにDoループが追加されるので
、ベクトル化・並列化の対象が増化し、スーパーコンピ
ュータ・マルチプロセッサの適用によるプログラムの高
速化を図れる。
【図面の簡単な説明】
第1図は本発明の一実施例の構成図、第2図は入力例の
FORTRANソースプログラム、第3図は第2図のプ
ログラムのCALL回数削減後ソースプログラム、第4
図はCALL点解析部のフローチャート、第5図はCA
LL点情報の構造図、第6図は参照領域情報の構造図、
第7図はCALL回数削減部の概略フロー図、第8図は
CALL回数削減不能なCALL点情報削除のフローチ
ャート、第9図は依存グラフおよび強連結成分の説明図
、第10図はCALL点のグループ化のフローチャート
、第11図はCALL回数情報の構造図、第12図は選
択表の構造図、第13図は手続き名情報の構造図、第1
4図はCALL回数削減の決定のフローチャート、第1
5図はソース変換のフローチャート、第16図はループ
分割後のソースプログラム、第17図はCALEE手続
き作成のフローチャート、第18図はベクトル化促進後
のソースプログラム、第19図は並列化促進後のソース
プログラム、第20図は従来技術の問題点を説明するた
めの例題プログラム、第21図は従来技術の問題点を説
明するための依存グラフ、第22図は手続き間データフ
ロー解析部のフローチャート、第23図は手続き内最適
化のフローチャート、第24図は手続き呼び出し点での
参照領域情報の例、第25図は手続き内最適化における
参照領域情報の扱い方を説明するための図、第26図は
定義領域解析のフローチャート、第27図は使用領域解
析のフローチャート、第28図は定義領域解析の動作を
説明するための例題プログラムであり、フローグラフで
表現しである、爾堀図は使用領域解析の動作を説明する
ための例題プログラムであり、フローグラフで表現しで
ある。 10・・・ソースプログラム、15・・・CALL回数
情報、20・・・CALL回数削減後ソースプログラム
。 30・・・オブジェクトプログラム、40・・・コンパ
イラ、100・・・CALLALL点情報00・・・手
続き間データフロー解析部、300・・・CALL回数
削減部、400・・・オブジェクトプログラム生成部、
500・・・C:ALL点情報、600・・・参照領域
情報、700・・・手続き名表、3100・・・CAL
L回数削減不能なCALL点のCALL点情報削除部、
3200・・・CALL点のグルー化部、3300・・
・CALL回数削減点の決定部、3400・・・ソース
変換部、1200・・・選択表、3455・・・CAL
EE手続き作成ステップ、230・・・手続き内置適化
、240・・・変更領域解析、250・・・定義領域解
析、260・・・使用領域解析、2000・・・手続き
呼び出し点での参照領域情報、2500・・・定義領域
解析のための処理手続き、260o・・・使用領域解析
のL Z 図 1θ /−スフ’[77’ンム 不3図 不 4 図 too CALL戸M校¥F 篤 6 図 冨 7 図 3100〜 フO−ナヤート 340ρ 不 g ロ vq 口 1gl+“ぢ硅絆成奎黛わT     暮に強鼾轄今’
d  tt  図 7(10冨 13  図 第 74 m 嘉 15  図 34ρ5〜 34!ρ70−ナ朴斗 VJ/6I21 第 77 図 34鏡 フD−チせ−ト 纂 13  図 2f    εNυ 蔓/’/図 /4   END ■ 20図 1〜4.イ左117パう7 冨 23  図 石24図 冨 z6  困 第28図

Claims (1)

  1. 【特許請求の範囲】 1、ソースプログラムを入力しオブジェクトプログラム
    を生成するコンパイラにおいて、サブルーチン・関数・
    初期設定副プログラム等の手続間にまたがつて変数・配
    列のデータフロー解析を行ない、該手続き間データフロ
    ー解析では各手続き呼び出しにより値が変更される可能
    性のある変数・配列部分領域と、呼び出し時の値が使用
    される可能性のある変数・配列部分領域と、値が必ず定
    義される変数・配列部分領域とで手続き呼び出しの効果
    を要約するとともに、手続き呼び出しを含む部分のデー
    タフロー解析においては該要約情報で該手続き呼び出し
    によるデータ参照を代表させ、データ参照の可能性と必
    然性を区別したデータフロー解析をし、該手続き間デー
    タフロー解析結果に基づいて最適化処理を行なうことを
    特徴とするオブジェクト生成方式。 2、特許請求の範囲第1項において、手続き呼び出しを
    含むループがそのままでは最適化できない場合、該ルー
    プを該手続き呼び出しの前後でループ分割し、該ループ
    内の文のうち該手続き呼び出しの前の部分と後の部分と
    該手続き自身のそれぞれを含む3つのループを生成し、
    該手続き呼び出しの前と後の部分の最適化を可能とする
    オブジェクト生成方式。 3、特許請求の範囲第2項において、ループ分割により
    生成されたループのうち、分割を生じせしめた手続き呼
    び出しのみを含むループのループくり返し処理を該手続
    きの写しの内部に移動することを特徴とするオブジェク
    ト生成方式。
JP62279214A 1987-11-06 1987-11-06 オブジェクト生成方法 Expired - Lifetime JP2749039B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP62279214A JP2749039B2 (ja) 1987-11-06 1987-11-06 オブジェクト生成方法
US07/266,479 US5146594A (en) 1987-11-06 1988-11-02 Method of producing object program based on interprocedural dataflow analysis of a source program
US07/938,758 US5396627A (en) 1987-11-06 1992-09-01 Method of producing object program based on interprocedural dataflow analysis of a source program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP62279214A JP2749039B2 (ja) 1987-11-06 1987-11-06 オブジェクト生成方法

Publications (2)

Publication Number Publication Date
JPH01121938A true JPH01121938A (ja) 1989-05-15
JP2749039B2 JP2749039B2 (ja) 1998-05-13

Family

ID=17608019

Family Applications (1)

Application Number Title Priority Date Filing Date
JP62279214A Expired - Lifetime JP2749039B2 (ja) 1987-11-06 1987-11-06 オブジェクト生成方法

Country Status (2)

Country Link
US (1) US5146594A (ja)
JP (1) JP2749039B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5862384A (en) * 1996-01-17 1999-01-19 Nec Corporation Compiler optimizer that moves loop invariant expressions
JPWO2008090665A1 (ja) * 2007-01-25 2010-05-13 日本電気株式会社 プログラム並列化方法及び装置

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5396627A (en) * 1987-11-06 1995-03-07 Hitachi, Ltd. Method of producing object program based on interprocedural dataflow analysis of a source program
JPH03150636A (ja) * 1989-11-08 1991-06-27 Matsushita Electric Ind Co Ltd コンパイル方法
CA2010056C (en) * 1990-02-14 1998-05-12 Charles Brian Hall Method for improving the efficiency of arithmetic code generation in an optimizing compiler using machine independent update instruction generation
US5412799A (en) * 1990-02-27 1995-05-02 Massachusetts Institute Of Technology Efficient data processor instrumentation for systematic program debugging and development
EP0463732A3 (en) * 1990-06-28 1992-10-14 International Business Machines Corporation Method and system for animating the execution of a computer program
JP3062266B2 (ja) * 1991-03-20 2000-07-10 富士通株式会社 支援装置
JP3049814B2 (ja) * 1991-04-09 2000-06-05 日本電気株式会社 マイクロコンピュータの言語処理装置
JPH04343140A (ja) * 1991-05-21 1992-11-30 Hitachi Ltd コンパイラの最適化処理方法
US5278986A (en) * 1991-12-13 1994-01-11 Thinking Machines Corporation System and method for compiling a source code supporting data parallel variables
US5410701A (en) * 1992-01-29 1995-04-25 Devonrue Ltd. System and method for analyzing programmed equations
JPH05257709A (ja) * 1992-03-16 1993-10-08 Hitachi Ltd 並列化判別方法およびそれを用いた並列化支援方法
US5448737A (en) * 1992-03-17 1995-09-05 International Business Machines Corporation System and method for optimizing computer code using a compact data flow representation
US6044407A (en) * 1992-11-13 2000-03-28 British Telecommunications Public Limited Company Interface for translating an information message from one protocol to another
US5555412A (en) * 1992-12-09 1996-09-10 International Business Machines Corporation Complier and method for alias checking in a complier
JP3280449B2 (ja) * 1993-03-01 2002-05-13 富士通株式会社 コンパイル装置
US5548761A (en) * 1993-03-09 1996-08-20 International Business Machines Corporation Compiler for target machine independent optimization of data movement, ownership transfer and device control
SG49719A1 (en) * 1993-03-26 1998-06-15 British Telecomm Generic managed object model for LAN domain
WO1994025917A1 (en) * 1993-04-26 1994-11-10 Comdisco Systems, Inc. Method for scheduling synchronous data flow graphs
CA2123924A1 (en) * 1993-06-02 1994-12-03 Charles Douglas Blewett Specifying contexts in callback style programming
JPH07110800A (ja) * 1993-10-13 1995-04-25 Matsushita Electric Ind Co Ltd 最適化並列コンパイル装置及び最適化並列コンパイル方法
US5805894A (en) * 1995-02-13 1998-09-08 Kuck & Associates, Inc. Method inside an optimizing compiler for analyzing assertions and redirecting control flow in programs
GB2299422B (en) * 1995-03-30 2000-01-12 Sony Uk Ltd Object code allocation in multiple processor systems
US6041181A (en) * 1997-07-23 2000-03-21 International Business Machines Corporation Method of, system for, and computer program product for providing quick fusion in WHERE constructs
US6341368B1 (en) * 1997-08-22 2002-01-22 Cirrus Logic, Inc. Method and systems for creating multi-instanced software with a preprocessor
US6077313A (en) * 1997-10-22 2000-06-20 Microsoft Corporation Type partitioned dataflow analyses
JP3539613B2 (ja) * 1997-12-03 2004-07-07 株式会社日立製作所 ループ飛び出し文を含むループに対する配列サマリ解析方法
US6922830B1 (en) * 2000-03-10 2005-07-26 International Business Machines Corporation Skip list data storage during compilation
JP3933380B2 (ja) * 2000-10-05 2007-06-20 富士通株式会社 コンパイラ
US7353521B1 (en) 2002-10-19 2008-04-01 Borland Software Corporation Object oriented distributed software system with methodology for piggybacked reflective callbacks
US7624387B2 (en) * 2003-04-10 2009-11-24 Panasonic Corporation Compiler, program product, compilation device, communication terminal device, and compilation method
JP4559937B2 (ja) * 2005-09-01 2010-10-13 株式会社東芝 プログラム生成装置
JP4952317B2 (ja) * 2007-03-16 2012-06-13 富士通株式会社 退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置
US8799880B2 (en) * 2011-04-08 2014-08-05 Siemens Aktiengesellschaft Parallelization of PLC programs for operation in multi-processor environments
US11656797B2 (en) * 2021-07-28 2023-05-23 Western Digital Technologies, Inc. Data storage device executing runt write commands as free commands

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4710872A (en) * 1985-08-07 1987-12-01 International Business Machines Corporation Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops
US4847755A (en) * 1985-10-31 1989-07-11 Mcc Development, Ltd. Parallel processing method and apparatus for increasing processing throughout by parallel processing low level instructions having natural concurrencies
JPS62159274A (ja) * 1986-01-08 1987-07-15 Hitachi Ltd 条件分岐の分割・複写によるベクトル化方式
JPH0685148B2 (ja) * 1986-03-07 1994-10-26 株式会社日立製作所 配列デ−タフロ−解析装置
JPH0814817B2 (ja) * 1986-10-09 1996-02-14 株式会社日立製作所 自動ベクトル化方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ACM SIGPLAN NOTICE=1985 *
ACM SIGPLAN NOTICE=1986 *
COMPILIERS PRINCIPLES TECHNIQUES AND TOOLS=1986 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5862384A (en) * 1996-01-17 1999-01-19 Nec Corporation Compiler optimizer that moves loop invariant expressions
JPWO2008090665A1 (ja) * 2007-01-25 2010-05-13 日本電気株式会社 プログラム並列化方法及び装置

Also Published As

Publication number Publication date
JP2749039B2 (ja) 1998-05-13
US5146594A (en) 1992-09-08

Similar Documents

Publication Publication Date Title
JPH01121938A (ja) オブジェクト生成方法
JP3311462B2 (ja) コンパイル処理装置
Triolet et al. Direct parallelization of call statements
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JPH0814817B2 (ja) 自動ベクトル化方法
US5396627A (en) Method of producing object program based on interprocedural dataflow analysis of a source program
KR100188499B1 (ko) 인터프로시쥬어 데이타 흐름 분석 방법
US8336038B2 (en) System and method for parallel execution of a program
JP4346316B2 (ja) 複数の意味レベルによるアスペクト指向プログラミングのための方法
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
JP2015207318A (ja) 逐次コンピュータプログラムコードを並列処理する方法及びシステム
US5790859A (en) Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler
US6009273A (en) Method for conversion of a variable argument routine to a fixed argument routine
JP2004288163A (ja) 代入ステートメントのリダクション変数の検出方法、システムおよびプログラム製品
EP0442623A2 (en) Reducing pipeline delays in compilers by code hoisting
JPH11167492A (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
Bahmann et al. Perfect reconstructability of control flow from demand dependence graphs
RU2411569C2 (ru) Способ автоматического распараллеливания программ
Allen Interprocedural analysis and the information derived by it
JP2002527816A (ja) プログラム最適化装置および方法
Basso et al. Optimizing Parallel Java Streams
Bansal et al. Garbage collection using a finite liveness domain
Munera et al. Static analysis to enhance programmability and performance in OmpSs-2
Mohd-Saman et al. Inter-procedural analysis for parallel computing
JPH11161500A (ja) 実行時依存解析を行う目的プログラムの生成方法

Legal Events

Date Code Title Description
EXPY Cancellation because of completion of term
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080220

Year of fee payment: 10