JP2002527816A - プログラム最適化装置および方法 - Google Patents

プログラム最適化装置および方法

Info

Publication number
JP2002527816A
JP2002527816A JP2000576362A JP2000576362A JP2002527816A JP 2002527816 A JP2002527816 A JP 2002527816A JP 2000576362 A JP2000576362 A JP 2000576362A JP 2000576362 A JP2000576362 A JP 2000576362A JP 2002527816 A JP2002527816 A JP 2002527816A
Authority
JP
Japan
Prior art keywords
vector
sese
program
instruction
global
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
JP2000576362A
Other languages
English (en)
Other versions
JP2002527816A5 (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.)
Motorola Solutions Inc
Original Assignee
Motorola Inc
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 Motorola Inc filed Critical Motorola Inc
Publication of JP2002527816A publication Critical patent/JP2002527816A/ja
Publication of JP2002527816A5 publication Critical patent/JP2002527816A5/ja
Pending 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
    • 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

Abstract

(57)【要約】 オプティマイザ(100)は、メモリ(110)およびプロセッサ(130)によって構成される。メモリは、最低化されるプログラム(200)と、最適化ソフトウェア(301)とを格納する。プロセッサは、(a)最適化ソフトウェアによって制御され、(a)命令(use-vector, exh-vector)によるリソースの使用を示す、プログラム(200)の命令におけるローカル・ベクトル("local")を判定し;(b)SESE(Single-Entry-Single-Exit)構造(U,T,V,S)についてプログラム(200)をスキャンし;(c)ローカル・ベクトルからSESEベクトルを判定する。SESEベクトルは、SESE構造によるリソースの使用を示し、オプティマイザによって合成され、プログラム・ベクトルを取得する。いくつかの命令が修正されると、オプティマイザ(100)は対応するSESEのSESEベクトルのみを再計算し、旧SESEベクトルを修正SESEベクトルと再合成して、新たなプログラム・ベクトルを判定する。

Description

【発明の詳細な説明】
(産業上の利用分野) 本発明は、一般に、データ処理に関し、さらに詳しくは、プログラム・オプテ
ィマイザおよび最適化方法に関する。
【0001】 (従来の技術) ソフトウェア・プログラムの最適化は、メモリ空間を節約し、プログラム実行
を高速化し、プログラム動作を検証するために重要である。例えば、プログラム
・ソースは、変数であったり、フラグ・レジスタ内のビットであったり、あるい
はメモリ・アレイに格納された情報である。プログラム・リソース(例えば、変
数)およびソース・コード・ワード(例えば、命令)の数を低減するタスクが存
在する。最適化のための役立つ資料として、[1]Cliff Rick: "Global Code M
otion, Global Value Numbering", ACM SIGPLAN 1995, La Jolla, CA USA, page
s 246-257がある。オプティマイザまたは最適化装置(optimizer)は、(a)命令
によってアクセスされるリソースがソフトウェア・プログラムにおいてさらに利
用されるかどうか(「USEリソース」)あるいは(b)リソースはさらに利用さ
れず(「EXHリソース」)、空であるとみなされるかどうかを区別することによ
って、リソースのいわゆる「ライブ情報 (live information)」を取得する。
【0002】 例えば、CやPASCALなどの高級プログラミング言語用のオプティマイザ
が知られている。しかし、アセンブリ言語プログラムにおいてリソースを節約す
ることは、このようなプログラムにおける多くのグローバル変数のためにより複
雑になる。オプティマイザはプログラムを解析し、プログラムを修正して、再度
解析しなければならない。このような手法は、時間およびメモリを消費する作業
である。
【0003】 本発明は、従来技術の欠点および制限を緩和あるいは回避するプログラム・オ
プティマイザを提供することを目的とする。
【0004】 (好適な実施例の説明) 図1は、本発明によるプログラム・オプティマイザ(以下、オプティマイザ1
00という)の簡略ブロック図を示す。例えば、オプティマイザ100は、メモ
リ110と、データ・バス120およびアドレス・バス121と、プロセッサ1
30とを有する汎用コンピュータによって実現できる。データ入力/出力用の周
辺装置などの他の構成要素は、簡略化のため図示しない。便宜上、オプティマイ
ザ100のメモリ110は、プログラム200(図2参照)と、本発明の方法を
実行する最適化ソフトウェア301(図3の方法300を参照)とを格納する。
【0005】 本発明の方法に従って、オプティマイザ100は、(i)SESEまたは1入
力1出力(Single-Entry-Single-Exit)構造レベルで、また(ii)SESE解析
の結果を考慮するプログラム・レベルで、フリー・リソースとビジー・リソース
とを区別することにより、プログラム200を解析する。すなわち、オプティマ
イザ100はローカル・レベルおよびグローバル・レベルでプログラム200を
解析し、解析結果を合成する。あるSESEを修正した後、オプティマイザ10
0は修正されたSESEのみを再解析し、前回の解析の結果を最終解析のために
利用する。これは従来技術とは異なり、従来技術では、プログラム解析はプログ
ラム全体に対して行われ、いくつかの計算は二度実行される。本発明は、冗長な
再計算を省き、オプティマイザ100の動作時間をより効率的に利用する。
【0006】 詳細については以下で説明するが(図2および図3参照)、本発明のオプティ
マイザ100は、(i)最適化されるプログラム200を格納し、かつ最適化ソ
フトウェア301を格納するメモリ110と、(ii)最適化ソフトウェア30
1から(方法300に従って)コマンドを受けて、(a)命令によるリソースの
使用を示すためにプログラム200の命令におけるローカル・ベクトルを判定し
;(b)SESE命令についてプログラム200をスキャンし;そして(c)ロ
ーカル・ベクトルから、SESE命令によるリソースの使用を示すSESEベク
トルを判定するプロセッサとによって構成される。
【0007】 本発明の利点は、プログラム200がアセンブリ言語で書けることである。こ
の特長により、本発明は組込み用アプリケーション(embedded applications)の
プログラム200として特に適する。好ましくは、オプティマイザ100はプロ
グラム200を実行する必要はない。プログラム200のリソースは、アプリケ
ーションによってプログラム200の実行中に便宜的にアクセスされる。
【0008】 図2は、オプティマイザ100によって最適化されることが可能なプログラム
200の簡略フローチャート図を示す。図2は、非制限的な例であることを意図
する。プログラム200は、命令A,B,C,D,E,F,G,H,I,J,K
,L,Mからなる。本明細書では、「ノード」という用語は「命令(instruction
)」の同義語として用いられる。命令Z,D,Fは、プログラム・フローを条件
付で変更する(「then」および「else」選択肢)ための分岐命令(branch instru
ctions)(丸印)である;また命令A,B,C,H,G,I,E,J,K,L,
Mはリニア命令(linear instructions)(四角印)であり、好ましくは、プログ
ラム・フローを変更しない。図2における矢印は、プログラム200の好適な実
行フローを示す。いくつかの命令の周りの点線枠は、SESE S,U,T,V
,W(以下で定義する)である。命令によるプログラム200の表現は、「begi
n」,「end」,「if」および「goto」という用語を用いるが、これらの用語は当
技術分野で周知である。 00: begin program 200 (at ENTRY point 210) (2.1) 02: if Z then begin J 06: K 08: L 10: M 12: end 14: else begin A 18: B 20: if D then begin C 22: goto line 18 24: end 26: if F then G 28: else H 30: I 32: E 34: end 36: end program 200 (at EXIT point 212) 左側の二桁の数字は、プログラム行を表す。説明の便宜上、「サクセッサまた
は後任者(successor)」(単数および複数)という用語は、プログラム200の
実行に適用される。命令Aは、サクセッサBを有し、命令BはサクセッサDを有
し、命令GはサクセッサIを有し、命令HはサクセッサIを有し、命令Iはサク
セッサEを有し、命令JはサクセッサKを有し、命令KはサクセッサLを有し、
命令LはサクセッサMを有する。分岐命令Z,D,Fは2つ以上のサクセッサを
有しており、命令ZはサクセッサJおよびAを有し、命令DはサクセッサCおよ
びFを有し、命令FはサクセッサGおよびHを有する。
【0009】 同様に、「プレデセサまたは前任者(predecessor)」という用語は、プログラ
ム200の実行に適用される。命令Zはプレデセサとしてエントリ・ポイント(
「ENTRY」)を有し、命令AはプレデセサZを有し、命令BはプレデセサAおよ
びCを有し、命令CはプレデセサDを有し、命令DはプレデセサBを有し、命令
FはプレデセサDを有し、命令GおよびHはプレデセサFを有し、命令Iはプレ
デセサGおよびHを有し、命令EはプレデセサIを有し、命令JはプレデセサZ
を有し、命令KはプレデセサJを有し、命令LはプレデセサKを有し、命令Mは
プレデセサLを有する。エグジット・ポイント212(「EXIT」)は、プレデセ
サMおよびEを有する。すなわち、プログラム・フローは: (a)分岐命令において分割する(例えば、Z,D,F;≧=2サクセッサ) (b)マージ命令においてマージする(例えば、B,E,EXI;≧=2サクセ
ッサ)、あるいは (c)リニア命令において変化しない(1サクセッサ,1プレデセサ) のいずれかである。
【0010】 本明細書では、SESEは以下に準拠する命令のグループである:(a)グル
ープに属する一つの命令は、常に最初に実行される(シングル・エントリ);お
よび(b)プログラム・フローが直前の命令においてグループから抜ける(シン
グル・エグジット)とき、グループの外では実行されるのは一つの命令しかない
。これについては、図2の模式図において示されている。各点線枠(例えば、SE
SE T)について、枠内に進む(SESE entry)矢印は一つしかなく(例えば、AからB
)しかなく、また枠から抜ける(SESE ext)矢印は一つしかない(例えば、DからF
)。
【0011】 命令はリソースを指すことができる。説明を簡単にするため、リソースは変数
、例えば、変数"a", "b", "c", "d", "e", "x"を有すると想定する。本明細書で
用いられる「変数」という用語は、例えば、レジスタ,フラグまたはメモリ・ア
レイなど、他のハードウェアおよびソフトウェア・リソースを含むことを意図す
る。 例えば、命令JからMは、以下のオペレーションを表すことができる: J: x: = a + e (2.1a) K: b: = x L: x: = c M: x: = d ("="シンボルの)左側の変数は結果(results)であり、右側の変数は引数(argum
ents)である。当技術分野では、変数ベクトルを導入することが知られている。
2つのベクトル分類が用いられる。すなわち、各命令のuse-vectorは、どの変数
が用いられ、どの変数が用いられないかを示すことができる。exhベクトル("ex
haust"を表す)は、どの変数が命令によって修正されるのかを示すことができる
。さらに、一つの命令を分類するベクトルは「ローカル・ベクトル(local vecto
rs)」であり、2つまたはそれ以上の命令を分類するベクトルは「グローバル・
ベクトル(global vectors)」である。
【0012】 一般に、use-vectorおよびexh-vectorはΨバイナリ値(「ビット」)を有する
【0013】
【数1】
【0014】 ビット値は、例えば、変数が存在する場合には「1」であり、変数が存在しない
場合には「0」である。ビット・インデクスΨ(例えば、1からΨ)は、従来の
ように上記のアルファベット順に従い、"a"がbit1,"b"がbit2,"c"がbit3,"d"
がbit4,"e"がbit5,"x"がbit6である。例えば、命令Jのベクトルは次の通り: local_use (J) = (1, 0, 0, 0, 1, 0) and (2.3) local_exh (J) = (0, 0, 0, 0, 0, 1); (2.4) また命令Kのベクトルはベクトルは次の通り: local_use (K) = (0, 0, 0, 0, 0, 1) and (2.5) local_exh (K) = (0, 1, 0, 0, 0, 0). (2.6) 基準ベクトル(reference vector)は次のように定義できる: reference = "zero" = (0, 0, 0, 0, 0, 0). (2.7a) あるいは次のように定義できる: reference = (1, 1, 1, 1, 1, 1) (2.7b) 便宜上、本発明について、定義(2.7a)の「ゼロ・ベクトル」に関連して説
明する。当業者であれば、本明細書の説明に基づいて、定義(2.7b)による
基準ベクトルでも方法300を実施できよう。また、バイナリ値の数値Ψは異な
ってもよい。
【0015】 プログラム200は、例えば次のようにして、命令("inst")およびそのサクセ
ッサ("succ")についてベクトルを関連付けることにより解析できる:
【0016】
【数2】
【0017】 周知の式":="は、左側の項が右側のオペレーションによって表される値を
受けることを示す。好ましくは、式(2.8)および(2.9)による計算は、
実質的に同時に行われる。 プラス+およびマイナス-シンボルは、以下のルールに従ってビットの加算および
減算を表すことができる。 1 + 1 = 1 (2.10) 1 + 0 = 1 0 + 1 = 1 1 - 1 = 0 1 - 0 = 1 0 - 1 = 0 0 + 0 = 0 ただし、このような計算は説明の便宜的な例に過ぎないものとする。
【0018】 更なる表記を簡単にするため、global_use-vectorおよびglobal_exh-vectorは
、総じて「グローバル・ベクトル」という。同様に、local_use-vectorおよびlo
cal_exh-vectorは、総じて「ローカル・ベクトル」という。一般に、以下の表記
【0019】
【数3】
【0020】 は、命令instを指すグローバル・ベクトルが命令instのローカル・ベクトルとサ
クセッサsuccのグローバル・ベクトルとの間の任意のベクトル・オペレーション
【0021】
【数4】
【0022】 シンボルによって表される)によって得られることを示す。サクセッサから命令
ベクトル(例えば、global (inst)を取得する(「バックワード・トラバース(ba
ckward traverse)」ことは説明のため便利であるが、本発明にとって不可欠では
ない。任意で、反対の手法(「フォーワード・トラバース(forward traverse)」
については以下で説明する。
【0023】 マージ命令およびリニア命令instについて、"global (succ)"は一つのサクセ
ッサのベクトルを指す。複数のサクセッサを有する分岐命令inst(例えば、命令
DのサクセッサFおよびC)について、"global (succ)"は、以下の(2.12
)の場合(a)を表して、global (inst)の"global_use"部分を計算し、また(
2.13)の場合(b)を表して、global (inst)の"global_exh"部分を計算す
る:
【0024】
【数5】
【0025】 図2の例では、N<=2である。ビット・オペレーションは、(2.12)の合
成(combination)
【0026】
【数6】
【0027】 の場合には論理和(or)オペレーションであり、(2.13)の交差(intersectio
n)
【0028】
【数7】
【0029】 の場合には論理積(and)オペレーションである。すなわち: 1 and 1 = 1 (2.14) 1 and 0 = 0 0 and 1 = 0 0 and 0 = 0 1 or 1 = 1 (2.15) 1 or 0 = 1 0 or 1 = 1 0 or 0 = 0 当技術分野で周知な深さ順序(depth ordering)に従って、プログラム200は
、(a)全ての命令のローカル・ベクトル(例えば、useおよびexh)を判定し;
(b)解析インデクス(analyzing indices)を各命令に割当て;(c)プログラ
ム200のENTRYからEXITまでグローバル・ベクトルを反復的に計算することに
よって、解析できる。例えば、解析インデクスは、Zの場合「1」であり、Jの
場合「2」であり、Kの場合「3」であり、Lの場合「4」であり、Mの場合「
5」であり、Aの場合「7」であり、Hの場合「15」である。便宜的に最も高
い解析インデクスから開始し、またグローバル・サクセッサ・ベクトルがゼロで
あると想定すると、プログラム200は以下のステップで解析できる:
【0030】
【数8】
【0031】 解析の最後に、ベクトル・グローバル(Z)は冗長な変数を表す。
【0032】 解析後、いくつかの命令は修正され、いくつかの変数は削除されて、解析は再
度実行される。ただし、このような手法は、いくつかの冗長な計算が二度実行さ
れるという欠点を有する。本発明のオプティマイザ100は、必要なオペレーシ
ョンの数を低減する。
【0033】 図3は、オプティマイザ100において適用される本発明の方法300の簡略
フローチャート図を示す。方法300は、ローカル・ベクトル判定ステップ31
0と、スキャン・ステップ315と、SESEベクトル判定ステップ320と、
ステップ320の条件付反復(ライン321,クエリー322)と、任意で、修
正ステップ340および320’とによって構成される。矢印およびラベルSTAR
TおよびSTOPは、好適な方法フローを示す。
【0034】 ローカル・ベクトル判定ステップ310において、オプティマイザ100は各
命令(例えば、命令AからZ)についてローカル・ベクトル(local_useおよびl
ocal_exh)を計算し、ローカル・ベクトルを格納する。好ましくは、ローカル・
ベクトルは第1部分ベクトル(例えば、local_use)および第2部分ベクトル(
例えば、local_exh)として与えられる。図2の例では、オプティマイザ100
は命令A,B,C,D,E,F,G,H,I,J,K,L,M,Zについてloca
l_useおよびlocal_exh(総じて、"local (inst)")を計算する。
【0035】 スキャン・ステップ315において、オプティマイザ100は、プログラム2
00における各SESEに属する命令を判定する。当業者であれば、このやり方
は理解できよう。図2の例では、オプティマイザは,(i)命令B,C,D(枠
203)付きSESE T;(ii)命令F,G,H,I(枠204)付きSE
SE U;(iii)命令A,「チャイルド(child)」SESE T,「チャイ
ルド」SESE Uおよび命令E付き「ペアレント(parent)」SESE S;お
よび(iv)命令J,K,L,M付きSESE V;ならびにプログラム200
のSESE Wを検出する。言い換えると、SESEのチャイルド・ペアレント
・プログラム階層が確立される。
【0036】 SESEベクトル判定ステップ320において、オプティマイザは、ステップ
310のローカル・ベクトルを利用して、SESEの一部または全てのSESE
ベクトルを計算する。図2の例では、オプティマイザ100は以下を計算する。 local (U) = global (F) by iteration within SESE U (3.1) local (T) = global (B) by iteration within SESE T (3.2) local (V) = global (J) by iteration within SESE V (3.3) 好ましくは、オプティマイザ100は、以下のようにSESE内でSESEベク
トルを反復的に与える(式(2.2)および(2.3)を参照):(a)第1部
分ベクトル(例えば、local_use (inst))を加算(+)し、第2部分ベクトル(
例えば、local_exh (inst))を減算(−)し、また第1グローバル・サクセッサ
・ベクトル(例えば、global_use (succ))を加算することによって、第1グロ
ーバル・ベクトル(例えば、global_use (inst)),および(b)第2部分ベク
トル(例えば、local_exh (inst))を加算(+)し、第1部分ベクトル(例えば
、local_use (inst))を減算(−)して、第2ローカル・サクセッサ・ベクトル
(例えば、global_exh (succ))を加算することによって、第2グローバル・ベ
クトル(例えば、global_exh (inst))。反復の詳細については、以下で説明す
る。
【0037】 本発明の重要な特長は、オプティマイザ100は、好ましくは、現在解析中の
SESEの外のプログラム挙動を考慮しないことである。例えば、SESU U
のローカル(U)の判定について、オプティマイザはSESE Uに属さない命令
Z,A,B,C,D,E,J,K,L,Mのローカル・ベクトルを考慮に入れな
い。
【0038】 オプティマイザ100は、全プログラム200のグローバル・ベクトル(例え
ば、global (W))を計算するまで、ステップ320を反復する。この反復では、
オプティマイザ100はSESE階層を上に昇る。図3は、クエリー322(「
最高レベル?」)の「no」ライン321によって、ステップ320の反復を示
す。それにより、オプティマイザ100はチャイルドSESEからペアレントS
ESEに進む。チャイルドSESEの意味で「グローバル」なベクトルは、より
高い位のペアレントSESEの意味では「ローカル」ベクトルになる。図2の例
において、第1反復では、オプティマイザ100はlocal (U)およびlocal (T)を
利用して、global (A)=local (S)を取得し、また第2反復では、オプティマイザ
100はlocal (S)およびlocal (V)を利用して、SESE W(プログラム20
0)のグローバル・ベクトルを取得する。ステップ320において取得したSE
SEベクトルは、SESEにおけるいくつかの変数を冗長変数として特定する。
【0039】 次のステップ340および320’は、オプティマイザ100がプログラム2
002を修正する際に、任意で実行される。修正ステップ340において、オプ
ティマイザ100はSESEにおける冗長変数("variables")を削除する。図
2の例では、オプティマイザ100は、SESE Vの命令Kを修正し、これは
命令K’(プライム記号)になる。次の選択SESEベクトル判定ステップ32
0’では、オプティマイザ100は、SESE T,U,Sではなく、修正SE
SE V’("selected SESE")の修正グローバル・ベクトルを判定する。ステ
ップ320’の反復では、オプティマイザ100はSESE Sのベクトル(ス
テップ320ですでに取得済み)と、SESE V’のベクトルとを利用する。
便宜上、ステップ320のベクトル解析について、図2の例でさらに詳しく説明
する。オプティマイザ100は、以下の計算により、SESE UについてSE
SEベクトルとしてglobal (F)を判定する:
【0040】
【数9】
【0041】 左側の括弧内のローマ数字は、好適な解析順序を示す。例えば、(i)における
global (H)は(v)におけるglobal (H)とは異なる。便宜上、オプティマイザ1
00はSESE Uに対して深さ順序(depth ordering)をローカルに適用し、命
令Fに解析インデクス「1」を割当て、Gに「2」を割当て、Iに「3」を割当
て、Hに「4」を割当てる。次に(i)では、オプティマイザ100は最高イン
デクス「4」を有する命令「H」のローカル・ベクトルをゼロ・ベクトル(式(
3.4))に合成する。最初にゼロ・ベクトルを利用するのが便利である。次に
(ii)では、オプティマイザ100は、命令E(命令のIのサクセッサである
)がSESE Uの外にあるので、local (I)をゼロ・ベクトルに合成する。こ
れは、本発明の重要な態様である。好ましくは、オプティマイザ100は、SE
SEの外にあるサクセッサ命令を、SESEベクトルの計算では存在しないもの
とみなす。従って、オプティマイザ100は、global_use (succ)およびglobal_
exh (succ) (global (succ))についてゼロ・ベクトルで式(2.8)および(2
.9)を適用する。好ましくは、オプティマイザ100は、SESE Uを反復
して移動する((i)から(iv)および(v)から(viii))。オプティ
マイザ100のメモリ空間を節約するために、予備結果(例えば、(i)から(
vii))は、好ましくは、一時的にしか格納されない。当業者であれば、この
反復をどのようにして停止させるか理解されよう。好ましくは、この反復は、割
当ての左側(例えば、(3.4)から(3.11))のグローバル値が変化しな
くなると停止される。例えば、これは、(v)におけるglobal (H)が(i)にお
けるglobal (H)に等しくなり、(vi)におけるglobal (I)が(ii)における
global (I)に等しくなり、(vii)におけるglobal (G)が(iii)における
global (G)に等しくなり、更なる割当てにおけるglobal (F)が(iv)における
global (F)に等しい場合である。 ステップ320において、オプティマイザ100は、SESE TのSESEベ
クトルとしてglobal (B)を計算する:
【0042】
【数10】
【0043】 successorがSESEの外である場合、このsuccessorは基準ベクトル(例えば、
ゼロ)であると想定される。例えば、命令DのサクセッサFは、現在解析中のS
ESE Tに属さない。従って、サクセッサ・ベクトルはゼロであると想定され
る。オプティマイザは以下を続ける:
【0044】
【数11】
【0045】 ステップ320において、オプティマイザ100は、global (A)についてSES
E Sを解析し、これはSESEベクトルになる:
【0046】
【数12】
【0047】 好ましくは、リニア・シーケンスは反復を必要としない。
【0048】 ステップ320において、オプティマイザ100は、以下の一般ルールに従っ
て、フォーワード・トラバースにより、SESE Vの連続した命令J,K,L
,Mについてglobal (V)を任意で取得できる:
【0049】
【数13】
【0050】 任意で、SESE(「第1SESE」、例えば、SESE T)において特定の
変数を利用できるか、あるいは利用できないかの質問は、第1SESEにおける
変数を評価することによって答えることができる。この答えは、以降のSESE
(例えば、SESE U,命令E)のベクトルに依存する。任意で、以下のサブ
ステップが実行される:(a)変数(例えば、global (T))を考慮する、第1S
ESE内のSESEベクトルが与えられる。(b)第1SESEに続くSESE
のSESEベクトルが与えられる(例えば、global (U),命令E)。(c)サブ
ステップ(b)にて取得した最後のSESEベクトルに変数がセットされている
かどうか調べる。
【0051】 また、本発明の方法300は、以下のステップを有する、プログラム200を
解析するための方法として説明できる:(a)プログラム200の基本ブロック
(例えば、分岐のない一つの命令または連続した命令)内のライブ情報(live in
formation)(例えば、local_use, local_exh)を計算するステップ;(b)基本
ブロックのライブ情報からSESE構造内のライブ情報(例えば、SESE T
,U,Vのglobal_use, global_exh)を評価するステップ;および(c)SES
E構造(SESE T,U,VからSESE SおよびSESE W)のライブ
情報からプログラム200のライブ情報を取得するステップ。
【0052】 好ましくは、ステップ(a)における解析は、プログラム200(「フォーワ
ード・トラバース」)の好適な実行フロー(図2における矢印の方向)の順序で
実行され、ステップ(b)における解析は、反復付きの逆順序(「バックワード
・トラバース」)で実行される。
【0053】 さらに、方法300は、以下のステップにより、プログラム200におけるリ
ソース・ベクトル(例えば、SESE Wのグローバル・ベクトル)を評価する
ための方法として説明できる:(a)反復(例えば、ステップ320)によりプ
ログラム200のSESEを解析し、SESEベクトルを与えるステップであっ
て、反復は基準ベクトル(例えば、ゼロ)から開始する、ステップ;および(b
)ステップ(a)のSESEを利用してプログラム200を解析し、リソース・
ベクトルを与えるステップ。
【0054】 さらに、本発明は、プログラム(例えば、プログラム200)のリソースをベ
クトル解析するための方法として説明でき、ここでプログラム・フローは、(a
)分岐命令(例えば、Z,F,D)において分割し、(b)マージ命令(例えば
、B,I,ポイント212)においてマージし、(c)リニア命令(例えば、J
,K,L,M,A,E)において変化しない。この方法は以下のステップによっ
て構成される: それぞれが一つのフロー・エントリおよび一つのフロー・エグジットを有する
命令のグループ(例えば、SESE U,T,V)を確立するステップ; 各グループにおいて、 (a)一時点において分岐命令の命令ベクトルを、サクセッサ命令の2つまたは
それ以上のベクトルに関連付け(例えば、式(3.7)においてF,G,Hを関
連付ける)、 (b)別の時点においてマージ命令の命令ベクトルをそのプレデセサ命令のベク
トル(例えば、global (I))に関連付け、および (c)リニア命令のベクトルをそのサクセッサ命令のベクトルに関連付ける、 ことを選択的に行うことによって、グループのベクトルを与える段階であって、
サクセッサ命令およびプレデセサ命令の任意のベクトルは、サクセッサ命令また
はプレデセサ命令がこのグループに属さない場合に、基準ベクトル(例えば、ゼ
ロ)に設定される、段階;および グループ・ベクトル(例えば、SESE U,T,V,ペアレントSESE
S)をプログラム・ベクトル(例えば、SESE W)に合成する段階。
【0055】 当業者であれば、本明細書における説明に基づいて、さらに説明しなくても、
ハードウェアおよびソフトウェアによってオプティマイザ100を提供できよう
。本発明について特定の構造,デバイスおよび方法の観点から説明してきたが、
当業者であれば、本発明はこのような例に制限されず、発明の全範囲は特許請求
の範囲によって適切に決定されることが、本明細における説明に基づいて理解さ
れよう。
【図面の簡単な説明】
【図1】 本発明によるプログラム・オプティマイザの簡略ブロック図を示す。
【図2】 一例として、図1のオプティマイザによって最適化されるプログラムの簡略フ
ローチャート図を示す。
【図3】 図1のオプティマイザにおいて適用される本発明の方法の簡略フローチャート
図を示す。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ドミトリー・バルメンコフ ロシア連邦、サンクト・ペテルスブルク 198156、ル・プルコフスカヤ26−27 Fターム(参考) 5B081 CC21 CC30

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】 リソースにアクセスする命令を有するプログラムを最適化す
    る方法であって: 前記命令による前記リソースの使用状態を示す、前記命令のローカル・ベクト
    ルを調べる段階; チャイルド・ペアレント・プログラム階層におけるSESE (Single-Entry-S
    ingle-Exit)構造に関する前記プログラムをスキャンする段階;および 反復的に、前記階層を昇り、前記ローカル・ベクトルからSESEベクトルを
    調べる段階であって、前記SESEベクトルは前記SESE構造による前記リソ
    ースの使用状態を示すところの段階; によって構成されることを特徴とする方法。
  2. 【請求項2】 請求項1記載の方法であって: 冗長リソースとして前記SESEベクトルによって特定されるリソースを削除
    することにより、前記プログラムを修正する段階;および 修正されたSESE構造についてのみ、新規SESEベクトルを判定する段階
    ; をさらに含んで構成されることを特徴とする請求項1記載の方法。
  3. 【請求項3】 請求項1記載の方法であって: ローカル・ベクトルを判定する前記段階において、前記ローカル・ベクトルは
    、第1部分ベクトルおよび第2部分ベクトルとして与えられ;および SESEベクトルを判定する前記段階において、前記SESEベクトルは、 (a)前記第1部分ベクトルを加算し、前記第2部分ベクトルを減算し、
    第1グローバル・サクセッサ・ベクトルを加算することによって、第1グローバ
    ル・ベクトルとして、および (b)前記第2部分ベクトルを加算し、前記第1部分ベクトルを減算し、
    第2グローバル・サクセッサ・ベクトルを加算することにより、第2グローバル
    ・ベクトルとして、 反復的に与えられることを特徴とする請求項1記載の方法。
  4. 【請求項4】 複数のサクセッサとして生じるサクセッサについて、SES
    Eベクトルを判定する前記段階は: (a)命令の前記第1グローバル・ベクトルは、前記複数のサクセッサの第1
    グローバル・ベクトルの合成(combination)によって与えられ、および (b)命令の前記第2グローバル・ベクトルは、前記複数のサクセッサの第2
    グローバル・ベクトルの交差(intersection)によって与えられる、 ことを特徴とする請求項3記載の方法。
  5. 【請求項5】 SESEベクトルを判定する前記段階において、SESE境
    界におけるローカル・ベクトルは、最初に基準ベクトルと比較されることを特徴
    とする請求項1記載の方法。
  6. 【請求項6】 前記基準ベクトルはゼロ・ベクトルであることを特徴とする
    請求項5記載の方法。
  7. 【請求項7】 第1SESEにおいて変数を評価する段階であって: (a)前記変数を考慮する、前記第1SESEにおいてSESEベクトルを与
    えるサブ段階; (b)前記第1SESEに続く、SESEのSESEベクトルを与えるサブ段
    階;および (c)サブ段階(b)にて得られた最後のSESEベクトルにおいて変数がセ
    ットされているかどうかを調べるサブ段階; を有する第1SESEにおいて変数を評価する段階をさらに含んで構成される
    ことを特徴とする請求項1記載の方法。
  8. 【請求項8】 プログラムを解析する方法であって: (a)前記プログラムの基本ブロック内のライブ情報を計算する段階; (b)前記基本ブロックのライブ情報から、SESE (Single-Entry-Single-
    Exit)構造内のライブ情報を評価する段階;および (c)前記SESE構造のライブ情報から、前記プログラムのライブ情報を取
    得する段階; によって構成されることを特徴とする方法。
  9. 【請求項9】 段階(a)において、シングル・フォーワード・トラバース
    が用いられ、段階(b)において、反復的なバックワード・トラバースが用いら
    れることを特徴とする請求項8記載の方法。
  10. 【請求項10】 使用済みリソース用の第1ベクトルと、使用されなくなっ
    たリソース用の第2ベクトルとにおいて、ライブ情報が与えられることを特徴と
    する請求項8記載の方法。
  11. 【請求項11】 プログラムにおけるリソース・ベクトルを評価する方法で
    あって: (a)SESE内で反復により前記プログラムのSESEを解析し、SESE
    ベクトルを与える段階であって、反復は基準ベクトルから開始する、段階;およ
    び (b)段階(a)のSESEベクトルを利用して、前記プログラムを解析して
    、前記リソース・ベクトルを与える段階; によって、プログラムにおけるリソース・ベクトルを評価する方法。
  12. 【請求項12】 前記段階(a)において、反復は、SESEベクトルがも
    う変化しないときに停止されることを特徴とする請求項11記載の方法。
  13. 【請求項13】 前記基準ベクトルは、ゼロ・ベクトルであることを特徴と
    する請求項11記載の方法。
  14. 【請求項14】 プログラムのリソースをベクトル解析する方法であって、
    プログラム・フローは: (a)分岐命令において分割し、 (b)マージ命令においてマージし、および (c)リニア命令において変化しない、 前記方法は: それぞれが一つのフロー・エントリおよび一つのフロー・エグジットを有する命
    令のグループを確立する段階; 各グループにおいて、 (a)一時点において分岐命令の命令ベクトルを、サクセッサ命令の2つ
    またはそれ以上のベクトルに関連付け、 (b)別の時点においてマージ命令の命令ベクトルをそのプレデセサ命令
    のベクトルに関連付け、および (c)リニア命令のベクトルをそのサクセッサ命令のベクトルに関連付け
    る、 ことを選択的に行うことによって、前記グループのベクトルを与える段階であ
    って、サクセッサ命令およびプレデセサ命令の任意の前記ベクトルは、前記サク
    セッサ命令またはプレデセサ命令が前記グループに属さない場合に、基準ベクト
    ルに設定される、段階;および 前記グループ・ベクトルをプログラム・ベクトルに合成する段階; によって構成されることを特徴とする方法。
  15. 【請求項15】 グループ修正をさらに含んで構成される請求項14記載の
    方法であって、ベクトルを与える前記段階は、修正されたグループについてのみ
    反復されることを特徴とする請求項14記載の方法。
  16. 【請求項16】 プログラム・オプティマイザであって: 最適化されるプログラムを格納し、かつ最適化ソフトウェアを格納するメモリ
    ;および 前記最適化ソフトウェアからコマンドを受けるプロセッサであって: (a)前記プログラムの命令におけるベクトルを判定して、前記命令によるリ
    ソースの使用を示し; (b)SESE(Single-Entry-Single-Exit)構造について前記プログラムをス
    キャンし;および (c)前記ローカル・ベクトルから、前記SESE構造による前記リソースの
    使用を示すSESEベクトルを判定する プロセッサ; によって構成されることを特徴とするプログラム・オプティマイザ。
JP2000576362A 1998-10-13 1998-10-13 プログラム最適化装置および方法 Pending JP2002527816A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/RU1998/000326 WO2000022523A1 (en) 1998-10-13 1998-10-13 Apparatus and method for program optimizing

Publications (2)

Publication Number Publication Date
JP2002527816A true JP2002527816A (ja) 2002-08-27
JP2002527816A5 JP2002527816A5 (ja) 2006-01-05

Family

ID=20130274

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000576362A Pending JP2002527816A (ja) 1998-10-13 1998-10-13 プログラム最適化装置および方法

Country Status (4)

Country Link
US (1) US6571386B1 (ja)
EP (1) EP1121641A1 (ja)
JP (1) JP2002527816A (ja)
WO (1) WO2000022523A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6754892B1 (en) * 1999-12-15 2004-06-22 Transmeta Corporation Instruction packing for an advanced microprocessor
US7562350B2 (en) * 2000-12-15 2009-07-14 Ricoh Company, Ltd. Processing system and method using recomposable software
US7698539B1 (en) * 2003-07-16 2010-04-13 Banning John P System and method of instruction modification
US7606997B1 (en) 2003-07-18 2009-10-20 Guillermo Rozas Method and system for using one or more address bits and an instruction to increase an instruction set
US8762949B2 (en) * 2005-05-31 2014-06-24 Alcatel Lucent Method and apparatus for incremental analysis of one or more properties of a program
US7571301B2 (en) * 2006-03-31 2009-08-04 Intel Corporation Fast lock-free post-wait synchronization for exploiting parallelism on multi-core processors
EP2071457A1 (en) * 2007-12-13 2009-06-17 Alcatel Lucent Device and method for automatically optimizing composite applications having orchestrated activities
US8181001B2 (en) * 2008-09-24 2012-05-15 Apple Inc. Conditional data-dependency resolution in vector processors
US8176299B2 (en) * 2008-09-24 2012-05-08 Apple Inc. Generating stop indicators based on conditional data dependency in vector processors
US9715386B2 (en) 2014-09-29 2017-07-25 Apple Inc. Conditional stop instruction with accurate dependency detection

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5107418A (en) * 1990-06-11 1992-04-21 Supercomputer Systems Limited Partnership Method for representing scalar data dependences for an optimizing compiler
US5854934A (en) * 1996-08-23 1998-12-29 Hewlett-Packard Company Optimizing compiler having data cache prefetch spreading
US5966537A (en) * 1997-05-28 1999-10-12 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing an executable computer program using input data
US6175957B1 (en) * 1997-12-09 2001-01-16 International Business Machines Corporation Method of, system for, and computer program product for providing efficient utilization of memory hierarchy through code restructuring

Also Published As

Publication number Publication date
EP1121641A1 (en) 2001-08-08
WO2000022523A1 (en) 2000-04-20
US6571386B1 (en) 2003-05-27

Similar Documents

Publication Publication Date Title
US6381739B1 (en) Method and apparatus for hierarchical restructuring of computer code
US5889999A (en) Method and apparatus for sequencing computer instruction execution in a data processing system
EP0735468B1 (en) Method and apparatus for an optimizing compiler
US5355494A (en) Compiler for performing incremental live variable analysis for data-parallel programs
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
US5822593A (en) High-level loop fusion
US6128775A (en) Method, system, and computer program product for performing register promotion via load and store placement optimization within an optimizing compiler
US20080178149A1 (en) Inferencing types of variables in a dynamically typed language
US8146070B2 (en) Method and apparatus for optimizing software program using inter-procedural strength reduction
US7496894B2 (en) Methods for enhancing pointer analyses
KR100188499B1 (ko) 인터프로시쥬어 데이타 흐름 분석 방법
JP2002116916A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
JPH06103463B2 (ja) コード生成方法
EP0428560A1 (en) Machine process for translating programs in binary machine language into another binary machine language
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
JP2002527816A (ja) プログラム最適化装置および方法
Ferrante et al. A program form based on data dependency in predicate regions
JP2001166946A (ja) 階層の平坦化によりソースコードをコンパイルする方法及び装置
JP2002527816A5 (ja)
CN112527304A (zh) 基于异构平台的自适应节点融合编译优化方法
Bowie Applications of graph theory in computer systems
JP2007122187A (ja) プログラム・コード生成装置
US20080282237A1 (en) Method and Apparatus For Generating Execution Equivalence Information
JP3196625B2 (ja) 並列化コンパイル方式
Gurd et al. Generation of dataflow graphical object code for the lapse programming language

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20040927

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051013

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051013

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081118

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090218

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090225

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090318

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090326

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090417

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090424

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090707