JPH0612525B2 - コンピュータプログラムの最適化方法 - Google Patents

コンピュータプログラムの最適化方法

Info

Publication number
JPH0612525B2
JPH0612525B2 JP2240183A JP24018390A JPH0612525B2 JP H0612525 B2 JPH0612525 B2 JP H0612525B2 JP 2240183 A JP2240183 A JP 2240183A JP 24018390 A JP24018390 A JP 24018390A JP H0612525 B2 JPH0612525 B2 JP H0612525B2
Authority
JP
Japan
Prior art keywords
instruction
loop
conditional
branch
conditional branch
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
JP2240183A
Other languages
English (en)
Other versions
JPH03127127A (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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH03127127A publication Critical patent/JPH03127127A/ja
Publication of JPH0612525B2 publication Critical patent/JPH0612525B2/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/44Encoding
    • G06F8/443Optimisation

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

【発明の詳細な説明】 A.産業上の利用分野 この発明はコンピュータプログラムのコンパイルに係
り、より具体的には、コンピュータプログラムの最適化
に関するものである。特に、コンピュータプログラムの
命令ループからの不変分岐の除去方法を提案する。
B.従来技術及びその課題 コンピュータプログラムを高水準言語(Fortrand,pasca
l,C)で書いた後、このプログラムを、コンピュータで実
行される一連の機械語命令に変換するために、通常は、
コンパイラプログラムを使用している。これらの機械語
命令は目的コードとも呼ばれる。高水準言語で書かれた
プログラムを目的コードで表現するには種々の方法があ
る。特に、高水準言語プログラムの目的コード翻訳方法
のうち、幾つかのものは、他のものより高速で動作す
る。そのために、コンパイルシステムは、コード最適化
と呼ばれる手続きを行うように構成されていることが多
い。コード最適化とは、プログラムをより少ない時間で
実行できるように目的コードを改良する技術である。
コード最適化は多くの方法で達成できる。反復計算は削
除することができる。変化する事のない変数は、定数に
置き換えることができる。ループ反復の如何にかかわら
ず、常に同一に評価されるループ内の表現はループの外
へ移動させることができる。
コード最適化の分野において特に関心のもたれる分野
は、プログラムループ、すなわちプログラム中の反復部
分の動作時間を短縮することである。コンピュータプロ
グラムは比較的多くの時間をループ内の命令の実行に費
やしているので、ループの実行時間を短縮できるコード
最適化方法があれば、コンピュータプログラム全体の実
行時間の改善に極めて有効である。
ループ実行を改善するための共通の方法は、ループを回
っている間は、常に同一結果を生じさせる計算を、ルー
プの実行直前のコンピュータプログラム内の或る点に再
配置することである。このようにすれば、ループに入っ
た時に一度だけ計算を行えば良く、ループの反復の度に
行う必要はない。この様な計算がループ不変と呼ばれ
る。
米国特許第4,567,574号(Saade他)はP
ERFORMステートメントを含むCOBCLソースプ
ログラムを最適化するための方法に関するもので、手続
き用コードまたは簡略化リンケージコードをPERFO
RMステートメントに代えて用いている。
米国特許第4,656,582号(Chaitin他)
は「コードモーション」及び「共通部分表現除去」を利
用する最適化方法に関するもので、メモリ内の値または
テンポラリレジスタの値を利用しうる命令のために、そ
の最適化方法によって、命令が属する文脈にとって最善
の命令形態を選択するようにしている。
米国特許第4,773,007号(Kasada他)は
アレイエメントの相互依存をプログラムコード最適化に
先立つものとして決定するための、データフロー分析方
法に関するものである。
C.発明の概要及び解決課題 この発明は、ループ不変の条件付分岐命令を含むコンピ
ュータプログラムを最適化する事によって作用する。一
旦、最適化されれば、コンピュータプログラムは、それ
が最適化される前よりも短時間で実行される。
この発明では、命令が入っているコンピュータプログラ
ムからループ不変の条件付分岐命令を除去する方法につ
いて述べられている。
この発明の作用は下記の一連のステップでなされる。第
1に、プログラムの各ループが調べられ、内側ループを
その外側ループの前に、ループ不変である条件付分岐命
令を位置決めするために検査される。条件がループ不変
計算のみから成る各条件付分岐命令は、この分岐が不変
である最も外側のループの外側に書換えられる。この移
動された分岐は、その条件が第1の所定の論理的に値と
評価される場合、それを初めに含んでいたループの周囲
の分岐に変更される。不変分岐が無条件分岐として書き
換えられるループの新たなコピーが作成される。この分
岐とコピーされたループ内の他の全ての分岐コピーされ
たループの先頭に関連して変更される。ループのオリジ
ナルコピー中、不変分岐が削除され、オリジナルコピー
が実行されたとき、新たなコピーを飛び越すために、別
の分岐が変更されたオリジナルループの後に挿入され
る。最後に選択的ステップとして、上述の変換の結果と
して実行されることのないプログラムの部分が削除され
る。
D.実施例 後述のこの発明の説明に用いられる用語について次に定
義する。
強連結領域(SCR-Strongly Connected Region) 有向グラフであって、グラフ中の2つの点(A)、
(B)ごとに、(A)から(B)へのパスと(B)から
(A)へのパスとがあるものを言う。第1図は、強連結
グラフを示す。このグラフは、グラフ中の秋点から他の
各点へのパスがあるので、強く連結されている。第2図
は強連結されていないグラフの例である。このグラフ
は、例えば、点dから点aへのパスが無いので、強連結
されていない。
単エントリー強連結領域(SESCR-Single Entry Strongly
Connected Region) 強連結領域外に先行部を有する点が一つだけある強連結
領域を言う。単エントリー強連結領域はループの共通プ
ログラミング概念に相当する。第3図は単エントリー強
連結領域を含むグラフの例である。このグラフは、点e
から強連結サブグラフa,g,,c,dへの唯一のパス
が点aを通っているのでSESCRを示している。第4図は
単エントリー強連結でないグラフの例である。このグラ
フは、強連結領域外に先行部をもつ分岐点が2つあるか
ら(即ち、点fは点bの先行部であり、分岐点eは点a
の先行部である)、SESCRは示していない。
領域定数(RC Region Constant) SESCRに関して、SESCRで計算されない値を言う。第3図
で、点eは領域定数を示している。
間接点(AN-Articulation Node) サブグラフの各探索ごとに立ち寄るべきサブグラフの点
を言う。第1図では、点aとdとが関節点である。
述語(Predicate) 条件付命令の行動を決定する数学的関係を言う。
条件コード(Condition Code) ある値が、負、ゼロ、正のいずれであるかの表示であ
る。
コンピュータプログラム最適化過程では、条件付分岐命
令を、これを初めに含んでいたループ外の点に再配置す
ることが望ましい。これは例えば、条件付分岐命令がル
ープ不変性を示しているとき、すなわち、ループの反復
にかかわらずそれが同一の評価を受けるときに生じる。
この様なループ実行直前の点へのステートメントの再配
置は、反復性を有し、不要な強化を低減する。例えば、
高性能な分岐予測ハードウェアを持たないパイプライン
コンピュータプログラムでは、条件付分岐命令がプロセ
ッサの実相性を大いに減殺する。従って、プログラムの
実行中に遭遇する条件付分岐命令の数を減少させること
により、プログラム実行時間に対する主要な改善方向の
インパクトを達成することできる。
後述するこの発明の実施例では、不変な条件付分岐命令
を有する1つのループが2つのループに変換される。第
1のループはオリジナルループであり、第2のループは
このオリジナルループの正確なコピーである。しかし、
第2のループでの分岐の分岐先は、第2のループの先頭
部のアドレスとの関連で修正される。第1のループで
は、条件付分岐命令が削除され、その位置には何も入れ
ない。第2のループでは、条件付分岐命令が無条件分岐
命令に置き換えられる。元の条件付分岐命令の条件はい
ずれかのループにエントリーされる前に評価することが
できる。この条件が偽であると評価された場合は、第1
の新たに作成されたループが実行される。そうでない場
合は、第2の新たに作成されたループが実行される。こ
のように、条件は、ループの反復ごとに評価する方法と
な異なり、一度だけ評価される。この方法は、非スイッ
チングと称される。
この発明の動作を第5図に示す。最適化のためのコンピ
ュータプログラム分析を行う前に、プログラムをフロー
グラフとして表すことが望ましい(ステップ100)。
この発明の一実施例は、このタスク行うためにTarjanア
ルゴリズムを用いているが、どのフローグラフ構築方法
でも採用できる。TarjanアルゴリズムはSIAM J.Computi
ng 1:2の第146-160頁に喝載された「Depth first search
and linear graph flgorithms(深さ優先探索と線形グ
ラフアルゴリズム)」と題するR.E.Tarjanの論文に記載
されている。
フローグラフをいったん作成してしまえば、プログラム
中の最適化の目的とされるループを識別することができ
る。これは、フローグラフのSESCRを位置決めすること
により(ステップ200)、達成される。この発明の実施
例では、上記Tarjanの論文に述べられたアルゴリズムを
用いることによりSESCRを識別しているが、他のいかな
るSESCR識別アルゴリズムでも利用できる。
ステップ300では、SESCR中の各計算値が、それが属
するループに関して計算が不変であるかどうかを決定す
るために評価される。この特製を有する計算には、その
意味のマークが付される。計算は、もしそれがプログラ
ムの有向グラフ表現内の領域定数として特徴付けられれ
ば、不変である。
領域定数の識別方法は公知である。この発明の実施例
は、下記アルゴリズムを用いている。第1のステップで
は、ここで、参考としてとりいれたAddison Wesley 197
9号第454-471頁に記載されたA.Aho他による「Principles
of Complier Design(コンパイラ設計の原理)」第13
章に記載された不変なコードの移動を行う。次に、フロ
ーグラフ各SESCRごとに、プログラムによって計算され
たすべての結果を検討中の領域用ワーキングセットに挿
入する。そして、その領域内の各基本ブロック(フロー
グラフの点)が検索し、そのブロックで行われた各計算
を作業セットから除去する。その領域のすべてのブロッ
クを検査したら、そのワーキングセットに残った計算が
領域定数である。
領域定数を識別した後、この最適化過程の次のステップ
は、不変な述語に依存する分岐が決定される。各領域の
点の数が決定される(ステップ400)。第5図A及び
第5図Bのフローチャートは簡略化のため、一つのSESC
Rについて実行される動作のみを示しているが、この発
明の典型的な実施例は、有向の最も内側のSESCRから外
側に向かって、全SESCRが検討されるものである。SESCR
内の各点を検討するに当たり(ステップ500)、単一
点領域は内側分岐を持たないから無視しても良い。ラッ
チ点(ループヘッダの先行部に位置するループ中の点)
も無視しても良い。
どの分岐が不変性であるかを決定するには、少なくとも
2つの方法がある。ここで用いる方法は、条件コード値
が他のコード最適化処理によってコンピュータプログラ
ム内に前もって移動されていたがどうかに依存している
(ステップ600)。
最適化処理によって条件コード計算をループ外に移動さ
せた場合、領域定数であるかどうかを決定するために、
分岐の条件部が検討される(ステップ800)。もしそ
の分岐(ブランチ)の条件部が領域定数(RC)である
ならば、条件付分岐命令はそれが属するループに関して
不変である。(頁接続記号Aを介してステップ90
0)。そうでない場合は、その点が無視され、次の点が
評価される(ステップ810)。
条件コード計算が移動されてなかった場合は、分岐の条
件オペランドを計算する各命令への各入力値が検討され
る(ステップ850)。もし各入力値が分析中のループ
に関して不変であれば、この条件部はこのループに対し
て不変である(頁接続記号Aを介してステップ90
0)。
そうでない場合は、そのループの次の点が検討される
(ステップ860)。ある分岐命令が、これが属するル
ープに関して不変であれば、その位置が記録され(ステ
ップ920)、不変性が成り立つ最も外側のループを決
定するためのサーチが行われる(ステップ940)。こ
れは、ステップ920で記録されたものに隣接する点に
領域定数アルゴリズム(上述してある)を適用するとに
よって行われる(頁接続記号Aを介してステップ105
0)。このようにして、その分岐が、それが不変である
ループ外の点に移動され、もって、上述したようにプロ
グラム実行時間を短縮する。この最外端ループの位置は
記録される(ステップ1000)。
この発明の一実施例では、コンピュータプログラムの命
令ループの関節点である場合にのみその点が評価され
る。しかし、この制限は省いても良いと考えられる。関
節点を見出すためのアルゴリズムはグラフ論の分野では
公知である。
最適化用のループが識別された後、最適化を達成するた
めに、コンピュータプログラムを書き換えてもよい。各
ループはその識別の順序と反対の順序で処理される。
ステップ1100では、最適化を要すると識別されたル
ープがコピーされ、そのループの二つのコピーが生じ
る。不変な条件分岐が虚偽であると評価された場合、こ
のループの第1のコピーが実行される。この不変な条件
分岐が真実であると評価された場合は、上記ループの第
2コピーが実行される。第2コピーの作成に当たり、そ
のコピー内の分岐の分岐先がこのループの先頭に関連し
て修正される。
ステップ1200では、条件付分岐命令がプログラム中
のループのオリジナルコピーの前に挿入される。この条
件付分岐命令の分岐策は、ループの第2コピーのスター
トアドレスとなるように修正される(ステップ130
0)。
ステップ1400では、複製のループの第1コピー内に
配置された条件付分岐命令が除去され、その個所には何
も挿入されない。
ステップ1500では、複数のループのうちのループの
実行の完了時に、プログラム実行が第2ループを飛び越
して、非修正プログラム中のオリジナルループに続く命
令に移動する。
ステップ1600では、ループの第2コピーに位置する
条件付分岐命令が無条件分岐に置き換えられる。この分
岐の分岐先は、元の条件付分岐命令の目標である。
最後にステップ1700で、最適化の結果、適正なプロ
グラム動作に不要となったコード(到達できないコー
ド)が削除される。この目的を達成するためには種々の
適宜のアルゴリズムを使用できるが、その一つがここで
参考としたところのAddison Wesley 1979,第549-550頁
に掲載された、A.Aho他による「Principles of Compiler
Design(コンパイラセ設計の原理)」第15章に記載
されている。
以下に第5図A及び第5図Bに関連して上述のアルゴリ
ズムの動作を示す。
Aに示したプログラム例が第6図Aにグラフとして示さ
れている。このプログラムは、自身が属するループに対
して不変である分岐命令を含んでいる。
A中の第100-400行に示したループは複製されてB中の
第100-400行及び第450-680行に現れることがわかる。ル
ープの複製に当たっては、複製ループ内の分岐の分岐先
がこのループの先頭に関連して修正される。B中の第50
行で、条件付分岐命令がコンピュータプログラム中でい
ずれかのループのコードの前に置かれる。B中の第150
行で、条件付分岐命令が削除され、第500行で、前のA
の分岐命令がループの第2コピー内の無条件分岐に置き
換えられる。この分岐の分岐先は、これが属するループ
の先頭に関連して同一である。
Dは、到達できないコードが除去された後の最適化され
たプログラムを例示している。このDのプログラムは、
グラフ的には、第6図Bに示される。第250行の命令
は、第200行の命令がこれを飛び越すので、到達できな
いとされる。同様に、第600行の命令は、第550行の命令
がこれを飛び越すので、到達できないとされる。
この発明は、例示的実施例をもって説明したが、特許請
求の範囲に照らして適宜変更可能であることは言うまで
もない。
E.発明の効果 上述の如く、この発明によればループ不変の条件付分岐
命令の除去によって効率のよいプログラムの実行を達成
する。
【図面の簡単な説明】
第1図、第2図、第3図及び第4図はこの発明の動作説
明のためのグラフを示す図、第5図A及び第5図Bはこ
の発明の一実施例の動作説明に用いるフローチャート、
第6図A及び第6図Bはコンピュータプログラムの一例
を表すグラフを示す図である。

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】少なくとも1個の命令ループを含むコンピ
    ュータプログラムであって、命令ループが条件部と分岐
    アドレスを含む分岐部とを有する第1の条件付分岐命令
    を含み、上記条件部が上部命令ループに関して不変であ
    ることを内容とするコンピュータプログラムの最適化方
    法であって、 (a)上記コンピュータプログラムにおいて命令ループを
    特定し、 (b)特定された上記命令ループ内で上記第1の条件付分
    岐命令を識別し、 (c)上記第1の条件付分岐命令を、上記命令ループの直
    前の位置に複写して、第2の条件付分岐命令のコピーを
    生成し、 (d)上記命令ループを複写して、第3の条件付分岐命令
    のコピーを含む命令ループ・コピーを生成し、該命令ル
    ープの直後の位置に該命令ループ・コピーを挿入し、 (e)第2の条件付分岐命令のコピーの分岐部を修正し
    て、上記命令ループ・コピーに向けて分岐させ、 (f)無条件分岐命令を上記命令ループ・コピーの直前の
    位置に挿入して、該命令ループ・コピーの直後に分岐さ
    せ、 (g)第1条件付分岐命令を削除し、 (h)第3の条件付分岐命令を無条件分岐命令に変更する
    ステップを含む、最適化方法。
  2. 【請求項2】上記命令ループがネスト構造を有してお
    り、上記ステップ(c)が、第1の条件付分岐命令の条件
    部が不変となる最も外側のループの直前の位置に、該第
    1の条件付分岐命令を複写するステップを含む、請求項
    (1)記載の方法。
  3. 【請求項3】ステップ(a)ないし(h)が命令ループに対し
    て不変である条件部を有する命令ループ内の各条件付分
    岐命令毎に反復される、請求項(1)記載の方法。
  4. 【請求項4】コンピュータプログラムが複数の命令ルー
    プから成り、ステップ(b)が、 (b1)上記第1条件付分岐命令の識別のため、上記命令ル
    ープ中の一つを選択し、 (b2)上記第1の条件付分岐命令が選択された命令ループ
    内に識別されないときに、別の命令ループを評価する各
    ステップからなる、請求項(1)記載の方法。
  5. 【請求項5】上記条件付分岐命令の削除及び変更により
    不要となったコンピュータプログラム中の部分を削除す
    るステップを含む、請求項(1)記載の方法。
JP2240183A 1989-10-12 1990-09-12 コンピュータプログラムの最適化方法 Expired - Lifetime JPH0612525B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US42078989A 1989-10-12 1989-10-12
US420789 1989-10-12

Publications (2)

Publication Number Publication Date
JPH03127127A JPH03127127A (ja) 1991-05-30
JPH0612525B2 true JPH0612525B2 (ja) 1994-02-16

Family

ID=23667850

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2240183A Expired - Lifetime JPH0612525B2 (ja) 1989-10-12 1990-09-12 コンピュータプログラムの最適化方法

Country Status (2)

Country Link
EP (1) EP0422398A3 (ja)
JP (1) JPH0612525B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001265606A (ja) * 2000-01-13 2001-09-28 Fujitsu Ltd 情報処理装置

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ID28658A (id) 1998-04-16 2001-06-21 Texas Biotechnology Corp Senyawa yang menghambat pengikatan integrin pada reseptornya

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2708405B2 (ja) * 1986-03-03 1998-02-04 株式会社日立製作所 コンパイラにおけるループ展開方法
JPH07104789B2 (ja) * 1986-09-05 1995-11-13 富士通株式会社 共通アセンブラ命令列の削除装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001265606A (ja) * 2000-01-13 2001-09-28 Fujitsu Ltd 情報処理装置
JP4579425B2 (ja) * 2000-01-13 2010-11-10 富士通株式会社 情報処理装置

Also Published As

Publication number Publication date
EP0422398A2 (en) 1991-04-17
EP0422398A3 (en) 1992-07-08
JPH03127127A (ja) 1991-05-30

Similar Documents

Publication Publication Date Title
US5202995A (en) Method for removing invariant branches from instruction loops of a computer program
EP0461786B1 (en) Methods and apparatus for transforming machine language program constructs into high-level language constructs by manipulating graphical program representations
US5966539A (en) Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
Aiken et al. Perfect pipelining: A new loop parallelization technique
EP0533813B1 (en) Method for representing scalar data dependencies for an optimizing compiler
US6286135B1 (en) Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
JP3311462B2 (ja) コンパイル処理装置
JPH0695311B2 (ja) コード最適化方法
JPH06103463B2 (ja) コード生成方法
JP4181326B2 (ja) コード最適化のための方法、装置及びプログラム
Kleir et al. Optimization strategies for microprograms
EP0428560A4 (en) Machine process for translating programs in binary machine language into another binary machine language
JPH0552971B2 (ja)
US5790859A (en) Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler
US5923883A (en) Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
US8332833B2 (en) Procedure control descriptor-based code specialization for context sensitive memory disambiguation
US20060048122A1 (en) Method, system and computer program product for hierarchical loop optimization of machine executable code
JPH0883185A (ja) コンパイラ
Ebcioglu et al. VLIW compilation techniques in a superscalar environment
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
JPH0656582B2 (ja) 範囲検査の最適化方法
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JPH0612525B2 (ja) コンピュータプログラムの最適化方法
Smith et al. Incremental dependence analysis for interactive parallelization
JP2002527816A (ja) プログラム最適化装置および方法