JP3317825B2 - ループ最適化翻訳処理方法 - Google Patents

ループ最適化翻訳処理方法

Info

Publication number
JP3317825B2
JP3317825B2 JP25026495A JP25026495A JP3317825B2 JP 3317825 B2 JP3317825 B2 JP 3317825B2 JP 25026495 A JP25026495 A JP 25026495A JP 25026495 A JP25026495 A JP 25026495A JP 3317825 B2 JP3317825 B2 JP 3317825B2
Authority
JP
Japan
Prior art keywords
loop
dependency
array element
array
optimization
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 - Fee Related
Application number
JP25026495A
Other languages
English (en)
Other versions
JPH0991148A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP25026495A priority Critical patent/JP3317825B2/ja
Priority to US08/722,945 priority patent/US5842022A/en
Publication of JPH0991148A publication Critical patent/JPH0991148A/ja
Application granted granted Critical
Publication of JP3317825B2 publication Critical patent/JP3317825B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related 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/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops

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

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は,最適化機能を持つ
翻訳処理装置の命令レベルの並列化を促進させるループ
最適化翻訳処理方法に関するものである。
【0002】近年のRISCプロセッサでは,スーパス
カラに代表されるプロセッサが主流を占め,1クロック
1命令以上の命令の発行を可能にしている。このような
特色を持ったRISCプロセッサの性能を引き出すため
には,命令ごとの依存関係を詳細に解析し,プログラム
の並列度を高める高性能な翻訳処理装置(以下,コンパ
イラと呼ぶ)が必要となる。並列RISCプロセッサの
命令レベルの最適化の能力を高めるために,従来スーパ
ーコンピュータで実装されていた最適化技術が,RIS
C向けコンパイラに採用されつつあることも,近年のR
ISCコンパイラの特徴である。スーパーコンピュータ
では,実行回数が多いループをベクトル化し,全体のス
ループットを高めることを目的としている。そのために
は,ループがベクトル化可能かどうかを判断するため
に,ループ内の配列要素の依存関係の解析に重点がおか
れている。
【0003】本発明の狙いは,この技術を並列RISC
へ適用し,メモリアクセスデータ間の依存関係を解析
し,その解析結果を利用して実行性能を向上させる最適
化を適用することにある。本発明の方法を用いることに
より,従来は解析できなかったループ内データの依存関
係が解析可能になる。また,この解析結果を利用するこ
とで,コンパイラで実施する各種の最適化が促進され
る。さらに,命令スケジューリングによる命令移動の際
の阻害要因を解消することができ,命令レベルの並列度
を高めることができる。
【0004】
【従来の技術】従来のRISCコンパイラでは,実行頻
度の高いループに対する依存関係の解析は,ループ1回
転の依存関係を解析する方法を用いるものや,翻訳オプ
ションでメモリアクセスの依存関係の条件(制約条件)
を与えているものが多い。命令の依存関係の解析は,主
に命令スケジューリングのために行われ,スケジューリ
ングによる命令の並び換えを容易に行うための判断材料
として提供される。スケジューリングの対象が単純なル
ープの場合には,この方法は有効な手段である。
【0005】図18は,単純ループのソースプログラム
に対するループ展開とループリダクションの適用例を説
明する図である。例えば,図18(A)に示すソースプ
ログラムの〔プログラム1〕では,ループ内の任意の1
回転の依存関係を解析することで,実行性能に効果が大
きい最適化を適用することができる。すなわち,従来の
技術でも以下の2点は実現されている。
【0006】(1)図18(A)のソースプログラム
〔プログラム1〕において,A(I,J)とB(I,
J)は異なる配列要素であり,このメモリアクセスに対
する依存関係はない。このため,命令スケジューリング
による命令の移動を阻害する要因はない。また,図18
(B)の〔プログラム2〕に示すように,ループを多重
に展開(ループアンローリング)しても,展開において
生成されるA(I+1,J),A(I+2,J)は,A
(I,J)と同一のベースアドレス,インデックスを共
有しているので同一ループ内にあっても,重なり関係を
解析し,重ならないと判断することは容易である。
【0007】(2)このループにおける最適化について
は,最内ループの形式が,S=S+V(S:Scala
r,V:Vector)の形式のため,さらに図18
(C)の〔プログラム3〕に示すようなループリダクシ
ョンと呼ばれる最適化を適用することができる。この最
適化により各命令の依存関係を解消することができ,命
令レベルの並列度を高めることが可能である。
【0008】なお,従来より,ベクトル化コンパイラで
は,ループ全空間に対する配列要素の依存関係を求める
必要があったため,例えば特開昭62−206637号
公報(配列データフロー解析装置)に示されているよう
に,インデックスの全空間上の配列要素の依存関係(デ
ータフロー)を求める方式があった。
【0009】しかし,スーパスカラに代表されるRIS
Cプロセッサにおける最適化翻訳処理方法としては,従
来,任意のループ1回転の依存関係を求めて最適化を適
用する方法はあったが,配列要素に対するループのイン
デックス全空間の依存関係と最適化技術との連係による
最適化の適用は行われていなかった。
【0010】
【発明が解決しようとする課題】図18(A)に示す
〔プログラム1〕のような単純ループのプログラムに対
しては,従来技術でも最適化が実現されていたが,図1
9に示すプログラムのように,最内ループのインデック
ス空間上(Index:K)の全ての配列要素の重なり
の関係を解析しなければ,最適化ができない場合があ
り,プログラムによっては最適化が促進されないことが
多くあった。
【0011】図19のプログラムにおいて,配列BB
(INDX,I)は,最内ループでは不変(Rc:Re
gion constant)であり,これは従来の方
法でも識別可能である。しかし,最内ループのインデッ
クスKの全空間に対してのBB(K,I)との重なりを
解析しないと,配列要素BB(INDX,I)が真にル
ープ内で不変か否かを識別できないという問題が残る。
すなわち,従来の技術には以下の問題点がある。
【0012】(a)図19のプログラムの配列要素BB
(INDX,I)とBB(K,I)は,最内ループKの
インデックス空間上で図20(A)に示す軌跡を描く。
最内ループKのインデックス空間上での重なりを解析す
れば,この軌跡により配列要素BB(INDX,I)
は,ループ内不変(Rc)と判定できる。一方,例えば
図20(B)で示す軌跡を描く場合には,ループ内の任
意の1点で交差する(重なる)ため,ループ内不変とは
判定できない。
【0013】(b)図19のプログラムの配列要素BB
(INDX,I)がループ内不変かどうかを識別できな
いため,命令レベルの並列度を高める最適化(例えばル
ープリダクション等)が適用できない。あるいは,適用
しても最内ループの配列要素のメモリアクセスの依存関
係が障壁となり,その効果が発揮できない。ここで,ル
ープ内不変(Rc)と識別できれば,最内ループの命令
をS=S+Vの形式に変更でき,その結果,図18
(C)のようなループリダクションも適用可能となる。
【0014】(c)図19のプログラムの配列要素BB
(INDX,I)とBB(K,J)のインデックス空間
K上での重なりが認識できないため,命令スケジューリ
ングにより,BB(K,J)のメモリロードが,BB
(INDX,I)のメモリストアを追い抜くことができ
ない。スケジューリングの際に命令を移動する自由度が
阻害される要因になり,ループ展開を実施してもループ
の命令レベルの並列度が上がらないという原因になる。
【0015】本発明は,これらの問題点を解決し,下記
(1)〜(4)により,種々の最適化の促進を可能にす
ることを目的とするものである。 (1)配列要素のメモリアクセスに対して,ループの全
インデックス空間の依存関係を詳細に解析する。
【0016】(2)上記(1)の解析結果を基にして,
命令レベルの並列度を高める最適化を適用する。 (3)上記(1)の結果を命令スケジューリングに反映
し,命令の移動の自由度を高める。
【0017】(4)上記(1)の解析結果と,ループの
ある任意の回転数での依存関係の解析を併用して,最適
化の適用で問題となりうる依存関係を解消する。
【0018】
【課題を解決するための手段】図1は,本発明の原理説
明図であり,1は構文・意味解析部(FE:Front-En
d),2は最適化処理部(OBE:Optimize Back-End),
3は依存関係解析部,4は最適化部,5は命令スケジュ
ーリング部,10はソースプログラムが記述されたソー
ステキスト,20はCPUおよびメモリ等からなる処理
装置,30は翻訳結果のオブジェクトコードを表す。
【0019】構文・意味解析部1は,ソーステキスト1
0が入力されると,そのソーステキスト10について構
文解析等を行い,中間言語を生成する手段である。最適
化処理部2は,構文・意味解析部1で生成された中間言
語に対して,各種の最適化を行い,オブジェクトコード
を出力する手段であり,依存関係解析部3,最適化部
4,命令スケジューリング部5を備える。
【0020】本発明は,上記課題を解決するため,図1
に示すような以下の処理過程によって最適化を促進す
る。 〔ステップS1〕ループの重なり解析 ステップS1では,ループの全空間における配列要素同
士の依存関係(重なり)を解析する。
【0021】〔ステップS2〕依存関係IDの設定 ステップS2では,ステップS1の処理による解析結果
にもとづき,依存関係を識別する情報として依存関係I
Dを設定する。
【0022】〔ステップS3〕依存関係IDを利用する
最適化 ステップS3では,ステップS2で設定された依存関係
IDをもとに,ループ内不変(Rc)である配列要素を
検出し,対象となる配列要素に対し,後述するステップ
S6で行うループ最適化(ループリダクション等)が可
能となるように変形する最適化を行う。例えばループリ
ダクションを可能にする変形を,ここでは「ループリダ
クション誘導」という。ループリダクション誘導のルー
プ変形としては,不変式の移動,共通式の移動等があ
る。
【0023】〔ステップS4〕ループ展開後の依存関係
IDの伝搬 ステップS4では,ループ展開を行った配列要素のコピ
ーに依存関係IDを設定する。
【0024】〔ステップS5〕依存関係IDの再設定 ステップS5では,ループ内の依存関係の解析を行わな
かったループ,およびインデックス空間のプラス,マイ
ナス方向で依存関係が発生する配列要素に対してのみ,
任意の1回転のみの依存関係を解析し,依存関係IDを
再設定する。
【0025】〔ステップS6〕ループ展開後のループ最
適化 ステップS6では,ステップS5で再設定された依存関
係IDをもとに,さらにループリダクション,リネーミ
ング,ソフトウェアパイプライニング等の最適化を行
う。
【0026】〔ステップS7〕命令スケジューリング ステップS7では,依存関係IDをもとに,命令スケジ
ューリングとして,メモリアクセス(load,sto
re)等の命令の移動を行う。
【0027】以下に,上記各ステップで行う処理の技術
的な意味を説明する。 (A)インデックス空間上の配列要素の重なり解析と最
適化 今,ループ全体(最内ループのインデックス空間上)の
配列要素の依存関係を解析し,図2(A)に示すプログ
ラムの最内ループの依存関係を求めることができたと仮
定する。図2(A)は,図19に示すソースプログラム
と同一であり,全ての配列要素の重なりの関係の解析が
必要なプログラムである。この依存関係の解析結果によ
り,BB(INDX,I)はインデックス空間KでBB
(K,I)と重ならないことがわかる。
【0028】BB(INDX,I)がBB(K,I)と
重ならないという保証が得られたので,BB(IND
X,I)を変数Sに置き換えることができ,図2(A)
のプログラムの最内ループは,図2(B)に示すループ
へと変形できる。また,この変形の結果,最内ループが
S=S+Vの形式となることによりループリダクション
が適用できる。図3は,図2(B)のソースプログラム
にループリダクションを適用したプログラムの変形例を
示す図である。
【0029】(B)依存関係の解析と命令スケジューリ
ングの関係 命令スケジューリングの効果を高めるためには,命令を
移動する自由度を高める必要がある。特に,メモリアク
セスデータ間の競合関係を把握し,その情報を命令スケ
ジューリングに伝達することが重要である。以下,ルー
プ全体の配列要素の依存関係を求めた結果を命令スケジ
ューリングに伝達し,命令の移動の自由度を高める最適
化について説明する。
【0030】まず,図4に示すソースプログラムの最内
ループ(DO 6)の配列要素の依存関係について考え
る。この最内ループでは,特にB(I,K,L−J
J),B(I,K,L)の依存関係を求めることが重要
である。現状のループ1回転だけの依存関係の解析で
は,この依存関係を正確に求めることができず,両者に
重なりがあると解析され,スケジューリング時の命令の
移動の阻害要因となる。
【0031】ここで,ループ全体の依存関係を求めた場
合,最内ループのインデックス空間(L)では,図5に
示すような軌跡を描くことになり,B(I,K,L−J
J),B(I,K,L)の同一インデックス空間上での
依存関係がないことが判明する。
【0032】この解析結果を用いることにより,ループ
を多重に展開した場合,その展開したループに対して依
存関係の情報を提供して,命令スケジューリングでの命
令の移動の自由度を高めることが可能になる。
【0033】本発明の作用により,従来は解決できなか
ったループ内の配列要素の依存関係が解析可能になり,
その解析結果を利用することで,種々の最適化をより広
範囲に適用することができる。従って,プログラムのオ
ブジェクト性能を向上させることができるようになる。
【0034】
【発明の実施の形態】始めに,本発明の実施の形態の説
明において用いる語句の説明をする。 (1)LOOP CARRIED DEPENDENC
Y ループの異なる回転で依存関係が発生することをLOO
P CARRIEDDEPENDENCYと呼ぶ。例え
ば,図6(A)のプログラムの場合,A(I)の定義と
A(I)の参照は,同一ループの回転で発生する。しか
し,図6(B)のプログラムの場合には,A(I)の定
義は次の回転でのA(I−1)で参照される。このよう
な依存関係をループの回転を跨いだ依存関係であること
から,LOOP CARRIED DEPENDENC
Yと呼ぶ。
【0035】(2)共通式の移動 図7は,共通式の移動の例を示す図である。例えば図7
(A),(B)に示すように,共通式の移動では,共通
式をとる最適化と不変式の移動が連動して実現される。
【0036】以下,本発明の実施の形態について説明す
る。 〔1〕ループ内配列データの重なり解析 ループ内配列データの重なり解析は,ループのインデッ
クス空間上での配列要素の依存関係を解析する機能であ
る。
【0037】図8に示すソースプログラムの場合,左辺
のA(I,J)と右辺のA(I,J),および左辺のA
(I,J)と右辺のA(I−1,J)の2つの依存関係
を求めることが必要である。図8の例では, {A(I,J),A(I,J)}=0:ループの0
回転毎に依存関係が発生(複数回転にまたがらない単一
回転内で依存関係が発生), {A(I,J),A(I−1,J)}=1:ループ
の次の回転で依存関係が発生,という配列要素間の重な
りの解析結果が求められる。なお,この依存関係の解析
は,解析対象となる最内ループの全ての配列要素間に対
して行われる。
【0038】〔2〕依存関係IDの設定 上記〔1〕のループ内の配列要素間のデータの重なり解
析の結果を基に,各配列要素に対しての依存関係ID
(0から255までの任意の番号)を設定する。以下
に,依存関係IDの設定の手順について述べる。図9は
依存関係IDの番号の持つ意味の例を示す図である。
【0039】 まず,最内ループに出現した全ての配
列要素に対して“重なりなし”を設定する。 最内ループの配列要素に対して,最内ループのイン
デックス空間に依存しない配列要素が存在するかを調べ
る。発見した場合には,2〜49までの任意の依存関係
IDを設定する。
【0040】 LOOP CARRIED DEPE
NDENCY(ループ全体での依存関係)がある配列要
素が存在するかを調べる。発見した場合には,50〜1
49までの任意の番号を設定する。
【0041】 ループの任意の1点のみで依存関係が
発生する配列要素が存在するかを調べる。発見した場合
には,150〜250までの任意の番号を設定する。 〔3〕依存関係IDを利用する最適化 依存関係IDを利用する最適化は以下の手順で行う。
【0042】図10は,依存関係IDを用いた最適化の
処理フローチャートである。ステップS11で,処理の
対象となる配列要素を検索する。次に,ステップS12
で,ループ内不変である配列要素の認識を行う。
【0043】依存関係IDを利用した最適化では,検索
した配列要素に対して,以下の2つの解析を行い,配列
要素がループ内で不変(Rc)かどうかを認識する。 (1)検索対象の配列要素がLOOP CARRIED
DEPENDENCYを考慮に入れない状態で,Rc
であることを認識する。この認識をするためには,以下
の条件を満足する必要がある。
【0044】(a)配列のベースアドレス(配列の先頭
アドレス)とインデックスの再定義がない。 (b)ベースアドレスとインデックスがコンパイラ生成
変数でない(これらがコンパイラ生成変数である場合,
定義は必ず同一ループ内に存在するため,ループ内不変
とはならない)。
【0045】(c)ベースアドレスとインデックスであ
る変数の定義が同一ループ内に存在しない(データフロ
ー情報より判定)。 (2)検索対象の配列要素がLOOP CARRIED
DEPENDENCYを考慮に入れても,ループ内不
変(Rc)であることを判定し,その配列要素が対象ル
ープに対して,真にRcであることを認識する。この判
定は以下のように行う。
【0046】(a)検索対象の配列要素の依存関係ID
が0の場合には,無条件に“重なりあり”と判断する。 (b)検索対象の配列要素の依存関係IDが1の場合に
は,無条件に“重なりなし(Rc)”と判断する。
【0047】(c)検索対象の配列要素の依存関係ID
が2〜250の場合には,その依存関係IDとループ内
の他のすべての配列要素の依存関係IDが等しくなけれ
ば,“重なりなし(Rc)”と判断する。
【0048】(d)また,検索対象の配列要素の依存関
係IDが2〜250の番号を持ち,ループ内に依存関係
IDが等しい配列要素があった場合でも,それらが同じ
形状(次元・添字)の配列要素でなければ,“重なりな
し”と判断する。
【0049】次に,ステップS13で,ループ内不変
(Rc)であることを利用した最適化を行う。ここで
は,最適化として不変式または共通式の移動を行う。続
いて,検索対象である配列要素に対して行われる不変式
の移動,共通式の移動,また,その共通式の移動の特殊
なケースでソースプログラムをループリダクションでき
る形に変形する最適化(ループリダクション誘導)等を
行う。
【0050】不変式の移動 不変式の移動は,検索対象である配列要素A[K]がR
cと判定された場合,図11に示すように行う。図11
(A),(B)は,それぞれ,検索対象である配列要素
A[K]のload/storeの不変式の移動例を示
している。
【0051】共通式の移動 共通式の移動は,検索対象である配列要素A[K]がR
cと判定され,その命令を含めたループ内の他の箇所で
参照のみである場合,図12に示すように動作する。
【0052】そして,Rcである配列要素A[K]がル
ープ内の他の箇所で定義される場合の共通式の移動は,
図13のように動作する。以下,共通式の移動の特殊な
ケースであるループリダクション誘導について説明す
る。図14(A)に示すソースプログラムでは,図13
で示したような共通式の移動が実施されると,図14
(B)に示すようなループリダクションが動作できるパ
ターンに変形される。これにより,ループリダクション
が適用され,図14(C)の最終形のように変形され,
ループ内の並列度が上がり実行性能が向上する。
【0053】〔4〕ループ展開後の依存関係IDの伝搬 依存関係IDを利用する最適化が終了し,ループ展開を
行った後,展開したループの配列要素のコピーに対して
依存関係IDを設定する。ループ展開後の依存関係ID
の設定の手順を以下に示す。
【0054】(1)図9での依存関係ID=0,依存関
係ID=1,依存関係ID=2〜149の配列要素をル
ープ展開で複製する場合,複製の依存関係IDはオリジ
ナルと同じ番号を割り当てる。
【0055】(2)図9での依存関係ID=150〜2
50のデータをループ展開で複製する場合,複製の依存
関係IDは,オリジナル番号+1きざみで番号を割り当
てる。
【0056】図15にループ展開前後の依存関係IDを
示す。 〔5〕依存関係IDの再設定 ループ内の依存関係解析が行われなかったループ,およ
び依存関係IDが50〜149の要素に対してのみ,ル
ープ任意の1回転のみの依存関係を解析し,その結果を
依存関係IDに反映する。インデックス空間上の重なり
解析により得られた依存関係IDが50〜149の番号
に対して,再度,依存関係IDを振り直す理由を以下の
例で説明する。
【0057】重なり解析を利用して依存関係IDを振っ
た際,50〜149の番号(インデックス空間上で負の
依存関係/正の依存関係)が割り振られたデータは,ル
ープ展開により多重に展開した際の複製に対しても同じ
番号を複写することになる。これは,重なり解析を利用
して振った依存関係IDはループの全ての回転を意識し
ているからである。図15(A)では,A(I)とA
(I+1)の重なり関係は,A(I)を基準に見ると,
ループの次の回転で依存関係が発生する。従って,依存
関係IDには50が割り当てられ,これらの実行文をル
ープ展開で複写しても,その複製に対しては,同様の依
存関係ID“50”が割り当てられる。
【0058】このような依存関係IDが割り当てられる
と,命令スケジューリングの際,命令の移動の自由度
は,極端に制限される。命令スケジューリングでは,ル
ープの全ての回転を意識した依存関係は必要ではなく,
ループ1回転の依存関係でよい。図15(B)の例だと
A(I)とA(I+1)は,命令スケジューリングの観
点からは別の依存関係IDが割り当てられた方がよい。
これらの問題を解決するために,依存関係IDを二つ用
意する。一つは,ループ全回転に対する依存関係IDで
あり,もう一つはループ1回転に対する依存関係IDで
ある。ループ1回転に対する依存関係IDをこの例に当
てはめれば,図16に示すようになる。
【0059】図16で,s1は,ループ全回転に対する
依存関係IDを示し,s2は,ループ1回転に対する依
存関係IDを示す。図16のプログラムのA(I+1)
については,2つの依存関係IDが同一なので重なりが
ありと判断され,この部分の依存関係は解消できない
が,少なくとも,A(I+2)のロードと,A(I)と
のストアには重なりがないので,A(I+2)のロード
はA(I)のストアを追い越すこと,すなわち命令レベ
ルでは,A(I+2)のロード命令をA(I)のストア
命令の前に移動させることが可能である。
【0060】〔6〕ループ展開後有効であるループ最適
化 前述したループ展開の前に依存関係IDを利用した最適
化を行うことにより,ループ展開後有効である最適化
(ループリダクション,リネーミング,ソフトウェアパ
イプラインニング等の最適化)が促進される。特に,顕
著な例が,図14で示したループリダクション誘導であ
る。ループリダクションは並列性を上げ,実行性能を著
しく向上させる最適化であるため,それが誘導される効
果は大きい。
【0061】〔7〕命令スケジューリング 命令スケジューリングにおけるメモリアクセス(loa
d/store)命令の移動では,原則として依存関係
を基にして命令を並び換える。命令スケジューリングで
依存関係IDを用いた重なりの判定手順は,以下のとお
りである。
【0062】(1)命令スケジューリングの対象となる
メモリアクセス(load/store)命令が別のメ
モリアクセス(load/store)命令を追い抜け
るかどうかを判定する。
【0063】(2)同じ形状の配列要素でないなら,別
名関係を調べ,別名がないなら,重なりなしと判断す
る。この場合,メモリアクセスを追い抜くことができ
る。別名関係とは,同じ領域を異なる名前でアクセスで
きるように定義した場合の名前の関係をいう。
【0064】(3)同一形状の場合には,依存関係ID
が異なっていれば,重なりなしと判断する。 (4)上記(3)で依存関係IDが同一でも,依存関係
IDが50〜149であるなら,ループ1回転の依存関
係IDを比較し,異なるなら重なりなしと判断する。
【0065】図17は,命令スケジューリング時の依存
関係IDを用いた重なり解析の処理フローチャートであ
る。ステップS21で,配列要素が同一形状か否かを判
定する。同一形状であれば,ステップS22へ進み,同
一形状でなければステップS24へ進む。
【0066】ステップS22では,配列要素の依存関係
IDが異なるかどうかを判定する。依存関係IDが異な
る場合には“重なりなし”と判定し,依存関係IDが同
じ場合には,ステップS23へ進む。
【0067】ステップS23では,依存関係IDが50
〜149であるかどうかを判定する。依存関係IDが5
0〜149の範囲でなければ“重なりあり”と判定し,
依存関係IDが50〜149の範囲であればステップS
25の処理を行う。
【0068】ステップS24では,ステップS21で配
列要素が同一形状でなかった場合に,別名関係があるか
どうかを判定する。別名関係があれば“重なりあり”と
判定し,別名関係がなければ“重なりなし”と判定す
る。
【0069】ステップS25では,ループ1回転の依存
関係が異なるかどうかを判定する。ループ1回転の依存
関係が異なる場合には“重なりなし”と判定し,依存関
係が異ならない場合には“重なりあり”と判定する。
【0070】
【発明の効果】以上説明したように,本発明によれば,
ループ内の配列要素に対する最適化,特に,1クロック
で1命令以上の命令が発行できるプロセッサに対して有
効となる最適化が促進され,プログラムを高速に実行さ
せることが可能になる。
【図面の簡単な説明】
【図1】本発明の原理説明図である。
【図2】全ての配列要素の重なりの関係の解析が必要な
ソースプログラムに最適化を適用した場合の説明図であ
る。
【図3】図2に示すソースプログラムにループリダクシ
ョンを適用した場合の説明図である。
【図4】命令スケジューリングが効果的に実施できるソ
ースプログラムの例を示す図である。
【図5】インデックス空間Lの各配列要素の軌跡を示す
図である。
【図6】Loop Carried Dependen
cyを説明する図である。
【図7】共通式の移動の例を示す図である。
【図8】依存関係を解析する対象プログラムの例を示す
図である。
【図9】依存関係IDの意味の例を示す図である。
【図10】依存関係IDを利用する最適化の処理フロー
チャートである。
【図11】依存関係IDを利用した不変式の移動の例を
示す図である。
【図12】依存関係IDを利用した共通式の移動の例を
示す図である。
【図13】依存関係IDを利用した共通式の移動の例を
示す図である。
【図14】ループリダクション誘導の例を示す図であ
る。
【図15】ループ展開後の依存関係IDの再設定を説明
する図である。
【図16】命令スケジューリングのための依存関係ID
の設定例を示す図である。
【図17】依存関係IDを利用した重なり関係の判定の
処理フローチャートである。
【図18】単純ループに対するループ展開とループリダ
クションの適用例を示す図である。
【図19】全ての配列要素の重なりの関係の解析が必要
なソースプログラム例を示す図である。
【図20】インデックス空間Kでの各配列要素の軌跡を
示す図である。
【符号の説明】
1 構文・意味解析部 2 最適化処理部 3 依存関係解析部 4 最適化部 5 命令スケジューリング部 10 ソーステキスト 20 処理装置 30 オブジェクトコード
フロントページの続き (56)参考文献 特開 平5−257706(JP,A) 特開 昭62−206637(JP,A) S.A.Mahlke他,Compi ler Code Transform ations for Supersc alar−Based High−Pe rformance Systems, Proceedings,Superc omputing’92,p.808−817 日経エレクトロニクス,1986年,6月 16日号(no.397),p.225−227 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】 最適化機能を持つ計算機プログラムの翻
    訳処理装置におけるループ最適化翻訳処理方法であっ
    最内ループに出現した全ての配列要素に対して依存関係
    IDとして“重なりなし”を示す値を設定するステップ
    と, 最内ループの配列要素に対して,最内ループのインデッ
    クス空間に依存しない配列要素が存在するか否かを調
    べ,発見した配列要素に対して依存関係IDとしてその
    旨を示す値を設定するステップと, ループ全体での依存関係がある配列要素が存在するか否
    かを調べ,発見した配列要素に対して依存関係IDとし
    てその旨を示す値を設定するステップと, ループの任意の1点でのみ依存関係が発生する配列要素
    が存在するか否かを調べ,発見した配列要素に対して依
    存関係としてその旨を示す値を設定するステップと, ループ内不変であるか否かを判断する対象となる配列要
    素について,依存関係IDとして“重なりなし”を示す
    値が設定されている場合,または依存関係IDとして最
    内ループのインデックス空間に依存しない配列要素であ
    ることを示す値もしくはループ全体での依存関係がある
    配列要素であることを示す値もしくはループの1点での
    み依存関係が発生する配列要素であることを示す値が設
    定されている場合であってその依存関係IDとループ内
    のほかの全ての配列要素の依存関係IDが等しくないか
    ループ内に依存関係IDが等しい配列要素があった場合
    であっても同じ次元・添字の配列要素でない場合に判断
    の対象となる配列要素がループ内不変であると判定する
    ステップと, ループ内不変と判定された配列要素に対して有効となる
    不変式の移動または共通式の移動を行うステップと を有
    する ことを特徴とするループ最適化翻訳処理方法。
  2. 【請求項2】 請求項1記載のループ最適化翻訳処理方
    であって,さらに, 配列要素を複製してループの展開を行うステップと, 複製した配列要素に対してオリジナルの依存関係を伝搬
    させるステップと, 依存関係IDの再設定を行うステップと, ループ展開後に有効な最適化処理を行うステップと を有
    する ことを特徴とするループ最適化翻訳処理方法。
JP25026495A 1995-09-28 1995-09-28 ループ最適化翻訳処理方法 Expired - Fee Related JP3317825B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP25026495A JP3317825B2 (ja) 1995-09-28 1995-09-28 ループ最適化翻訳処理方法
US08/722,945 US5842022A (en) 1995-09-28 1996-09-27 Loop optimization compile processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP25026495A JP3317825B2 (ja) 1995-09-28 1995-09-28 ループ最適化翻訳処理方法

Publications (2)

Publication Number Publication Date
JPH0991148A JPH0991148A (ja) 1997-04-04
JP3317825B2 true JP3317825B2 (ja) 2002-08-26

Family

ID=17205310

Family Applications (1)

Application Number Title Priority Date Filing Date
JP25026495A Expired - Fee Related JP3317825B2 (ja) 1995-09-28 1995-09-28 ループ最適化翻訳処理方法

Country Status (2)

Country Link
US (1) US5842022A (ja)
JP (1) JP3317825B2 (ja)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226790B1 (en) * 1997-02-28 2001-05-01 Silicon Graphics, Inc. Method for selecting optimal parameters for compiling source code
US6567976B1 (en) 1997-03-20 2003-05-20 Silicon Graphics, Inc. Method for unrolling two-deep loops with convex bounds and imperfectly nested code, and for unrolling arbitrarily deep nests with constant bounds and imperfectly nested code
US6230317B1 (en) * 1997-07-11 2001-05-08 Intel Corporation Method and apparatus for software pipelining of nested loops
US6035125A (en) * 1997-07-25 2000-03-07 International Business Machines Corporation Method and system for generating compact code for the loop unrolling transformation
US6247173B1 (en) * 1997-09-24 2001-06-12 Hewlett-Packard Company Computer compiler optimizer for reducing computer resource consumption during dependence analysis after loop unrolling
US6820250B2 (en) * 1999-06-07 2004-11-16 Intel Corporation Mechanism for software pipelining loop nests
US6539541B1 (en) * 1999-08-20 2003-03-25 Intel Corporation Method of constructing and unrolling speculatively counted loops
US6550059B1 (en) * 1999-10-04 2003-04-15 Advanced Micro Devices, Inc. Method for generating optimized vector instructions from high level programming languages
US6539543B1 (en) * 1999-11-29 2003-03-25 Adelante Technologies, Nv Method and apparatus for compiling source code by flattening hierarchies
US6588009B1 (en) * 1999-11-29 2003-07-01 Adelante Technologies Nv Method and apparatus for compiling source code using symbolic execution
US7337437B2 (en) * 1999-12-01 2008-02-26 International Business Machines Corporation Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code
JP3477137B2 (ja) * 2000-03-03 2003-12-10 松下電器産業株式会社 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
US8176108B2 (en) * 2000-06-20 2012-05-08 International Business Machines Corporation Method, apparatus and computer program product for network design and analysis
US7013460B2 (en) * 2001-05-15 2006-03-14 Hewlett-Packard Development Company, L.P. Specifying an invariant property (range of addresses) in the annotation in source code of the computer program
KR20030042319A (ko) * 2001-11-22 2003-05-28 한국전자통신연구원 병렬 프로그램 수행중 경합 탐지를 위한 병렬 루프 변형방법
JP4077252B2 (ja) * 2002-06-28 2008-04-16 富士通株式会社 コンパイラプログラムおよびコンパイル処理方法
US7827017B2 (en) * 2002-12-17 2010-11-02 Cadence Design Systems, Inc. Method and system for implementing circuit simulators
US7680818B1 (en) * 2002-12-18 2010-03-16 Oracle International Corporation Analyzing the dependencies between objects in a system
US7624387B2 (en) * 2003-04-10 2009-11-24 Panasonic Corporation Compiler, program product, compilation device, communication terminal device, and compilation method
US7581215B1 (en) * 2003-06-30 2009-08-25 Sun Microsystems, Inc. Dependency analysis system and method
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US7823141B1 (en) * 2005-09-30 2010-10-26 Oracle America, Inc. Using a concurrent partial inspector loop with speculative parallelism
US8745360B2 (en) * 2008-09-24 2014-06-03 Apple Inc. Generating predicate values based on conditional data dependency in vector processors
US8589901B2 (en) * 2010-12-22 2013-11-19 Edmund P. Pfleger Speculative region-level loop optimizations
US8793675B2 (en) 2010-12-24 2014-07-29 Intel Corporation Loop parallelization based on loop splitting or index array
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
IN2014DN05723A (ja) 2011-12-23 2015-04-10 Univ Arizona State
US9361079B2 (en) * 2012-01-30 2016-06-07 Nvidia Corporation Method for compiling a parallel thread execution program for general execution
US9424011B2 (en) * 2014-04-01 2016-08-23 International Business Machines Corporation Recursive expression simplification
JP6554959B2 (ja) * 2015-07-14 2019-08-07 富士通株式会社 情報処理装置、コンパイル方法、およびコンパイルプログラム
US10310826B2 (en) * 2015-11-19 2019-06-04 Intel Corporation Technologies for automatic reordering of sparse matrices
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
CN112000370B (zh) * 2020-08-27 2022-04-15 北京百度网讯科技有限公司 循环指令的处理方法、装置、设备和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0795274B2 (ja) * 1986-09-19 1995-10-11 株式会社日立製作所 配列添字解析方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
S.A.Mahlke他,Compiler Code Transformations for Superscalar−Based High−Performance Systems,Proceedings,Supercomputing’92,p.808−817
日経エレクトロニクス,1986年,6月16日号(no.397),p.225−227

Also Published As

Publication number Publication date
JPH0991148A (ja) 1997-04-04
US5842022A (en) 1998-11-24

Similar Documents

Publication Publication Date Title
JP3317825B2 (ja) ループ最適化翻訳処理方法
Wolfe More iteration space tiling
US6539541B1 (en) Method of constructing and unrolling speculatively counted loops
US6754893B2 (en) Method for collapsing the prolog and epilog of software pipelined loops
US5537620A (en) Redundant load elimination on optimizing compilers
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
US5664193A (en) Method and apparatus for automatic selection of the load latency to be used in modulo scheduling in an optimizing compiler
US7793278B2 (en) Systems and methods for affine-partitioning programs onto multiple processing units
US20040003381A1 (en) Compiler program and compilation processing method
US5809308A (en) Method and apparatus for efficient determination of an RMII vector for modulo scheduled loops in an optimizing compiler
Zhang et al. Using hammock graphs to structure programs
JP2921190B2 (ja) 並列実行方式
JP4751510B2 (ja) メモリアクセス最適化方法
JP6913693B2 (ja) ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法
Krishnamurthy et al. Optimizing parallel programs with explicit synchronization
JPH09282179A (ja) オーバーヘッド命令を最小限にする最適化コンパイラにおける命令スケジューリングの方法および装置
US5790859A (en) Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler
Baghsorkhi et al. FlexVec: Auto-vectorization for irregular loops
JPH0738158B2 (ja) コード最適化方法およびコンパイラ・システム
Muthukumar et al. Software pipelining of nested loops
JP2004303113A (ja) 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法
JP2001125792A (ja) 最適化促進装置
Lee et al. Software pipelining and superblock scheduling: compilation techniques for VLIW machines
Lewis et al. Pipelining wavefront computations: Experiences and performance
JP3196625B2 (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: 20020528

LAPS Cancellation because of no payment of annual fees