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
Links
- 238000000034 method Methods 0.000 title claims description 41
- 239000013598 vector Substances 0.000 claims abstract description 163
- 238000004458 analytical method Methods 0.000 claims description 15
- 238000012986 modification Methods 0.000 claims description 3
- 230000004048 modification Effects 0.000 claims description 3
- 230000001174 ascending effect Effects 0.000 claims 1
- 230000002194 synthesizing effect Effects 0.000 claims 1
- KDYFGRWQOYBRFD-UHFFFAOYSA-N succinic acid Chemical compound OC(=O)CCC(O)=O KDYFGRWQOYBRFD-UHFFFAOYSA-N 0.000 description 9
- 238000010586 diagram Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 2
- 102100023696 Histone-lysine N-methyltransferase SETDB1 Human genes 0.000 description 1
- 101710168120 Histone-lysine N-methyltransferase SETDB1 Proteins 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Abstract
Description
ィマイザおよび最適化方法に関する。
を高速化し、プログラム動作を検証するために重要である。例えば、プログラム
・ソースは、変数であったり、フラグ・レジスタ内のビットであったり、あるい
はメモリ・アレイに格納された情報である。プログラム・リソース(例えば、変
数)およびソース・コード・ワード(例えば、命令)の数を低減するタスクが存
在する。最適化のための役立つ資料として、[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)」を取得する。
が知られている。しかし、アセンブリ言語プログラムにおいてリソースを節約す
ることは、このようなプログラムにおける多くのグローバル変数のためにより複
雑になる。オプティマイザはプログラムを解析し、プログラムを修正して、再度
解析しなければならない。このような手法は、時間およびメモリを消費する作業
である。
プティマイザを提供することを目的とする。
00という)の簡略ブロック図を示す。例えば、オプティマイザ100は、メモ
リ110と、データ・バス120およびアドレス・バス121と、プロセッサ1
30とを有する汎用コンピュータによって実現できる。データ入力/出力用の周
辺装置などの他の構成要素は、簡略化のため図示しない。便宜上、オプティマイ
ザ100のメモリ110は、プログラム200(図2参照)と、本発明の方法を
実行する最適化ソフトウェア301(図3の方法300を参照)とを格納する。
力1出力(Single-Entry-Single-Exit)構造レベルで、また(ii)SESE解析
の結果を考慮するプログラム・レベルで、フリー・リソースとビジー・リソース
とを区別することにより、プログラム200を解析する。すなわち、オプティマ
イザ100はローカル・レベルおよびグローバル・レベルでプログラム200を
解析し、解析結果を合成する。あるSESEを修正した後、オプティマイザ10
0は修正されたSESEのみを再解析し、前回の解析の結果を最終解析のために
利用する。これは従来技術とは異なり、従来技術では、プログラム解析はプログ
ラム全体に対して行われ、いくつかの計算は二度実行される。本発明は、冗長な
再計算を省き、オプティマイザ100の動作時間をより効率的に利用する。
マイザ100は、(i)最適化されるプログラム200を格納し、かつ最適化ソ
フトウェア301を格納するメモリ110と、(ii)最適化ソフトウェア30
1から(方法300に従って)コマンドを受けて、(a)命令によるリソースの
使用を示すためにプログラム200の命令におけるローカル・ベクトルを判定し
;(b)SESE命令についてプログラム200をスキャンし;そして(c)ロ
ーカル・ベクトルから、SESE命令によるリソースの使用を示すSESEベク
トルを判定するプロセッサとによって構成される。
の特長により、本発明は組込み用アプリケーション(embedded applications)の
プログラム200として特に適する。好ましくは、オプティマイザ100はプロ
グラム200を実行する必要はない。プログラム200のリソースは、アプリケ
ーションによってプログラム200の実行中に便宜的にアクセスされる。
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を有する。
ム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プレデセサ) のいずれかである。
ープに属する一つの命令は、常に最初に実行される(シングル・エントリ);お
よび(b)プログラム・フローが直前の命令においてグループから抜ける(シン
グル・エグジット)とき、グループの外では実行されるのは一つの命令しかない
。これについては、図2の模式図において示されている。各点線枠(例えば、SE
SE T)について、枠内に進む(SESE entry)矢印は一つしかなく(例えば、AからB
)しかなく、また枠から抜ける(SESE ext)矢印は一つしかない(例えば、DからF
)。
、例えば、変数"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)」である。
:
場合には「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を実施できよう。また、バイナリ値の数値Ψは異な
ってもよい。
ッサ("succ")についてベクトルを関連付けることにより解析できる:
受けることを示す。好ましくは、式(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 ただし、このような計算は説明の便宜的な例に過ぎないものとする。
、総じて「グローバル・ベクトル」という。同様に、local_use-vectorおよびlo
cal_exh-vectorは、総じて「ローカル・ベクトル」という。一般に、以下の表記
:
クセッサsuccのグローバル・ベクトルとの間の任意のベクトル・オペレーション
(
ベクトル(例えば、global (inst)を取得する(「バックワード・トラバース(ba
ckward traverse)」ことは説明のため便利であるが、本発明にとって不可欠では
ない。任意で、反対の手法(「フォーワード・トラバース(forward traverse)」
については以下で説明する。
ッサのベクトルを指す。複数のサクセッサを有する分岐命令inst(例えば、命令
DのサクセッサFおよびC)について、"global (succ)"は、以下の(2.12
)の場合(a)を表して、global (inst)の"global_use"部分を計算し、また(
2.13)の場合(b)を表して、global (inst)の"global_exh"部分を計算す
る:
成(combination)
n)
、(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は以下のステップで解析できる:
度実行される。ただし、このような手法は、いくつかの冗長な計算が二度実行さ
れるという欠点を有する。本発明のオプティマイザ100は、必要なオペレーシ
ョンの数を低減する。
フローチャート図を示す。方法300は、ローカル・ベクトル判定ステップ31
0と、スキャン・ステップ315と、SESEベクトル判定ステップ320と、
ステップ320の条件付反復(ライン321,クエリー322)と、任意で、修
正ステップ340および320’とによって構成される。矢印およびラベルSTAR
TおよびSTOPは、好適な方法フローを示す。
命令(例えば、命令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)")を計算する。
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のチャイルド・ペアレント
・プログラム階層が確立される。
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))。反復の詳細については、以下で説明す
る。
SESEの外のプログラム挙動を考慮しないことである。例えば、SESU U
のローカル(U)の判定について、オプティマイザはSESE Uに属さない命令
Z,A,B,C,D,E,J,K,L,Mのローカル・ベクトルを考慮に入れな
い。
ば、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におけるいくつかの変数を冗長変数として特定する。
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)を判定する:
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)を計算する:
ゼロ)であると想定される。例えば、命令DのサクセッサFは、現在解析中のS
ESE Tに属さない。従って、サクセッサ・ベクトルはゼロであると想定され
る。オプティマイザは以下を続ける:
E Sを解析し、これはSESEベクトルになる:
て、フォーワード・トラバースにより、SESE Vの連続した命令J,K,L
,Mについてglobal (V)を任意で取得できる:
変数を利用できるか、あるいは利用できないかの質問は、第1SESEにおける
変数を評価することによって答えることができる。この答えは、以降のSESE
(例えば、SESE U,命令E)のベクトルに依存する。任意で、以下のサブ
ステップが実行される:(a)変数(例えば、global (T))を考慮する、第1S
ESE内のSESEベクトルが与えられる。(b)第1SESEに続くSESE
のSESEベクトルが与えられる(例えば、global (U),命令E)。(c)サブ
ステップ(b)にて取得した最後のSESEベクトルに変数がセットされている
かどうか調べる。
解析するための方法として説明できる:(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のライブ情報を取得するステップ。
ード・トラバース」)の好適な実行フロー(図2における矢印の方向)の順序で
実行され、ステップ(b)における解析は、反復付きの逆順序(「バックワード
・トラバース」)で実行される。
ソース・ベクトル(例えば、SESE Wのグローバル・ベクトル)を評価する
ための方法として説明できる:(a)反復(例えば、ステップ320)によりプ
ログラム200のSESEを解析し、SESEベクトルを与えるステップであっ
て、反復は基準ベクトル(例えば、ゼロ)から開始する、ステップ;および(b
)ステップ(a)のSESEを利用してプログラム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)に合成する段階。
ハードウェアおよびソフトウェアによってオプティマイザ100を提供できよう
。本発明について特定の構造,デバイスおよび方法の観点から説明してきたが、
当業者であれば、本発明はこのような例に制限されず、発明の全範囲は特許請求
の範囲によって適切に決定されることが、本明細における説明に基づいて理解さ
れよう。
ローチャート図を示す。
図を示す。
Claims (16)
- 【請求項1】 リソースにアクセスする命令を有するプログラムを最適化す
る方法であって: 前記命令による前記リソースの使用状態を示す、前記命令のローカル・ベクト
ルを調べる段階; チャイルド・ペアレント・プログラム階層におけるSESE (Single-Entry-S
ingle-Exit)構造に関する前記プログラムをスキャンする段階;および 反復的に、前記階層を昇り、前記ローカル・ベクトルからSESEベクトルを
調べる段階であって、前記SESEベクトルは前記SESE構造による前記リソ
ースの使用状態を示すところの段階; によって構成されることを特徴とする方法。 - 【請求項2】 請求項1記載の方法であって: 冗長リソースとして前記SESEベクトルによって特定されるリソースを削除
することにより、前記プログラムを修正する段階;および 修正されたSESE構造についてのみ、新規SESEベクトルを判定する段階
; をさらに含んで構成されることを特徴とする請求項1記載の方法。 - 【請求項3】 請求項1記載の方法であって: ローカル・ベクトルを判定する前記段階において、前記ローカル・ベクトルは
、第1部分ベクトルおよび第2部分ベクトルとして与えられ;および SESEベクトルを判定する前記段階において、前記SESEベクトルは、 (a)前記第1部分ベクトルを加算し、前記第2部分ベクトルを減算し、
第1グローバル・サクセッサ・ベクトルを加算することによって、第1グローバ
ル・ベクトルとして、および (b)前記第2部分ベクトルを加算し、前記第1部分ベクトルを減算し、
第2グローバル・サクセッサ・ベクトルを加算することにより、第2グローバル
・ベクトルとして、 反復的に与えられることを特徴とする請求項1記載の方法。 - 【請求項4】 複数のサクセッサとして生じるサクセッサについて、SES
Eベクトルを判定する前記段階は: (a)命令の前記第1グローバル・ベクトルは、前記複数のサクセッサの第1
グローバル・ベクトルの合成(combination)によって与えられ、および (b)命令の前記第2グローバル・ベクトルは、前記複数のサクセッサの第2
グローバル・ベクトルの交差(intersection)によって与えられる、 ことを特徴とする請求項3記載の方法。 - 【請求項5】 SESEベクトルを判定する前記段階において、SESE境
界におけるローカル・ベクトルは、最初に基準ベクトルと比較されることを特徴
とする請求項1記載の方法。 - 【請求項6】 前記基準ベクトルはゼロ・ベクトルであることを特徴とする
請求項5記載の方法。 - 【請求項7】 第1SESEにおいて変数を評価する段階であって: (a)前記変数を考慮する、前記第1SESEにおいてSESEベクトルを与
えるサブ段階; (b)前記第1SESEに続く、SESEのSESEベクトルを与えるサブ段
階;および (c)サブ段階(b)にて得られた最後のSESEベクトルにおいて変数がセ
ットされているかどうかを調べるサブ段階; を有する第1SESEにおいて変数を評価する段階をさらに含んで構成される
ことを特徴とする請求項1記載の方法。 - 【請求項8】 プログラムを解析する方法であって: (a)前記プログラムの基本ブロック内のライブ情報を計算する段階; (b)前記基本ブロックのライブ情報から、SESE (Single-Entry-Single-
Exit)構造内のライブ情報を評価する段階;および (c)前記SESE構造のライブ情報から、前記プログラムのライブ情報を取
得する段階; によって構成されることを特徴とする方法。 - 【請求項9】 段階(a)において、シングル・フォーワード・トラバース
が用いられ、段階(b)において、反復的なバックワード・トラバースが用いら
れることを特徴とする請求項8記載の方法。 - 【請求項10】 使用済みリソース用の第1ベクトルと、使用されなくなっ
たリソース用の第2ベクトルとにおいて、ライブ情報が与えられることを特徴と
する請求項8記載の方法。 - 【請求項11】 プログラムにおけるリソース・ベクトルを評価する方法で
あって: (a)SESE内で反復により前記プログラムのSESEを解析し、SESE
ベクトルを与える段階であって、反復は基準ベクトルから開始する、段階;およ
び (b)段階(a)のSESEベクトルを利用して、前記プログラムを解析して
、前記リソース・ベクトルを与える段階; によって、プログラムにおけるリソース・ベクトルを評価する方法。 - 【請求項12】 前記段階(a)において、反復は、SESEベクトルがも
う変化しないときに停止されることを特徴とする請求項11記載の方法。 - 【請求項13】 前記基準ベクトルは、ゼロ・ベクトルであることを特徴と
する請求項11記載の方法。 - 【請求項14】 プログラムのリソースをベクトル解析する方法であって、
プログラム・フローは: (a)分岐命令において分割し、 (b)マージ命令においてマージし、および (c)リニア命令において変化しない、 前記方法は: それぞれが一つのフロー・エントリおよび一つのフロー・エグジットを有する命
令のグループを確立する段階; 各グループにおいて、 (a)一時点において分岐命令の命令ベクトルを、サクセッサ命令の2つ
またはそれ以上のベクトルに関連付け、 (b)別の時点においてマージ命令の命令ベクトルをそのプレデセサ命令
のベクトルに関連付け、および (c)リニア命令のベクトルをそのサクセッサ命令のベクトルに関連付け
る、 ことを選択的に行うことによって、前記グループのベクトルを与える段階であ
って、サクセッサ命令およびプレデセサ命令の任意の前記ベクトルは、前記サク
セッサ命令またはプレデセサ命令が前記グループに属さない場合に、基準ベクト
ルに設定される、段階;および 前記グループ・ベクトルをプログラム・ベクトルに合成する段階; によって構成されることを特徴とする方法。 - 【請求項15】 グループ修正をさらに含んで構成される請求項14記載の
方法であって、ベクトルを与える前記段階は、修正されたグループについてのみ
反復されることを特徴とする請求項14記載の方法。 - 【請求項16】 プログラム・オプティマイザであって: 最適化されるプログラムを格納し、かつ最適化ソフトウェアを格納するメモリ
;および 前記最適化ソフトウェアからコマンドを受けるプロセッサであって: (a)前記プログラムの命令におけるベクトルを判定して、前記命令によるリ
ソースの使用を示し; (b)SESE(Single-Entry-Single-Exit)構造について前記プログラムをス
キャンし;および (c)前記ローカル・ベクトルから、前記SESE構造による前記リソースの
使用を示すSESEベクトルを判定する プロセッサ; によって構成されることを特徴とするプログラム・オプティマイザ。
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)
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)
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 |
-
1998
- 1998-10-13 EP EP98965900A patent/EP1121641A1/en not_active Withdrawn
- 1998-10-13 WO PCT/RU1998/000326 patent/WO2000022523A1/en active Application Filing
- 1998-10-13 US US09/508,558 patent/US6571386B1/en not_active Expired - Fee Related
- 1998-10-13 JP JP2000576362A patent/JP2002527816A/ja active Pending
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 |