JP2002149416A - プログラムの最適化方法及びこれを用いたコンパイラ - Google Patents

プログラムの最適化方法及びこれを用いたコンパイラ

Info

Publication number
JP2002149416A
JP2002149416A JP2000331427A JP2000331427A JP2002149416A JP 2002149416 A JP2002149416 A JP 2002149416A JP 2000331427 A JP2000331427 A JP 2000331427A JP 2000331427 A JP2000331427 A JP 2000331427A JP 2002149416 A JP2002149416 A JP 2002149416A
Authority
JP
Japan
Prior art keywords
exception
instruction
program
instructions
condition
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
JP2000331427A
Other languages
English (en)
Other versions
JP3707727B2 (ja
Inventor
Tatsushi Inagaki
達氏 稲垣
Hideaki Komatsu
秀昭 小松
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
Priority to JP2000331427A priority Critical patent/JP3707727B2/ja
Priority to US10/020,656 priority patent/US6931635B2/en
Publication of JP2002149416A publication Critical patent/JP2002149416A/ja
Application granted granted Critical
Publication of JP3707727B2 publication Critical patent/JP3707727B2/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/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

Abstract

(57)【要約】 【課題】 例外発生可能命令の他の命令への先行制約を
ソフトウェア的に緩和し、例外発生可能命令を含むプロ
グラムの命令レベル並列性を効果的に得ることを可能と
する。 【解決手段】 コンパイラにおいて、処理対象のプログ
ラムの四つ組中間コードを解析し、DAGを生成するD
AG生成部21と、生成されたDAGを編集し、例外に
よる演算子の順序制約を緩和するDAG編集部22と、
編集後のDAGの構造を反映させた四つ組中間コードを
生成する四つ組中間コード再生部23とを備える。そし
て、DAG中から、例外発生可能命令と例外発生検出命
令とを検出し、検出された例外発生検出命令を、例外の
発生条件を検出する第1の命令と、例外処理へ処理を条
件分岐させる第2の命令とに分割し、第1の命令に対し
て、例外の発生条件を検出した場合に第2の命令に移行
し、例外発生条件を検出しなかった場合に例外発生可能
命令に移行するように依存関係を設定する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータプロ
グラムの最適化方法に関し、特に例外を起こす可能性の
ある命令(以下、例外発生可能命令と称す)を含むプロ
グラムに対して命令レベルでの並列性を得るための最適
化方法に関する。
【0002】
【従来の技術】通常、プログラミング言語で記述された
プログラムのソースコードをコンパイルする際、コンピ
ュータにおける実行速度の向上を図るために、当該プロ
グラムの最適化を行っている。最適化の手法には種々の
方法があるが、米国インテル社及び米国ヒューレット・
パッカード社によるIA−64のアーキテクチャに対応
したCPUのように、命令レベルの並列実行が可能なプ
ロセッサ上で実行されることを前提として、命令レベル
での並列性を抽出するためのコードスケジューリングに
おいて、できるだけ並行して発行可能な命令が多くなる
ように、命令の順番の入れ替えを行うという最適化があ
る。
【0003】ところがプログラム中には、順番の入れ替
えに対する様々な制約があり、コードスケジューリング
の働きは抑えられている。順番の入れ替えに対する制約
には、コントロールによる制約、メモリアクセスによる
制約、例外による制約がある。これらの制約のうち、コ
ントロールによる制約とメモリアクセスによる制約に対
しては、ハードウェアサポートによって緩和する機構が
実用化されている。しかし、例外による制約をハードウ
ェアサポートによって緩和する機構は実現されていな
い。
【0004】また、プログラムにおける命令レベルの並
列性を抽出した場合、先行的に発行された命令が起こし
た例外を処理することが必要である。従来のこの種の処
理の代表的な方法は、そのような命令が上げた例外を即
時には実行せず、最適化を行う前のプログラムにおいて
その命令がもともと置かれていた場所で例外発生の有無
を判定し、実際の例外処理を行う方法である。これによ
って、例外発生時にもオリジナルのコンテクストを保存
しながら、例外発生可能命令を先行的に実行できる。
【0005】ところで、例外が発生する可能性のある命
令を投機的に実行して並列性を抽出するため、従来の技
術は、投機的に実行される例外発生可能命令で起きる例
外(以下、このような例外を投機的例外と称す)を抑制
するハードウェアサポートを仮定していた。この種の従
来技術としては、例えば下記の文献1に開示された技術
がある。 文献1:Scott A. Mahlke, William Y. Chen, Roger A.
Bringmann, Richard E.Hank, Wen-Mei W. Hwu, B. Ram
akrishna Rau, and Michael S. Schlansker, "Sentinel Scheduling: A Model for Compiler-Control
led Speculative Execution",ACM Transactions on Com
puter Systems, Vol. 11, No. 4, November 1993, Page
s 376-408
【0006】文献1は、ハードウェアサポートの元に、
コンパイラが投機的な命令移動と例外発生時の補償コー
ドの生成を行う方法を提案している。ここで仮定してい
るハードウェアでは、投機的な命令に関しては例外を上
げる代わりに特別な演算結果を生成し、その値が後続の
投機的な命令によって推移的に伝搬される。そして、投
機的でない命令はこの特別な値を使用したときに例外を
発生する。実際に例外が起きたかどうかを確認する命令
はsentinel instructionと呼ばれる。
【0007】この従来技術では、以下の手順で例外発生
可能命令を投機的にスケジューリングする。 1.各例外発生可能命令について、生成される値を最後
に使用する命令(potential sentinel instruction)を求
める。 2.リストスケジューリングによって、各命令の最も早
い実行開始時刻を求める。例外発生可能命令が分岐、副
作用(メモリへの書き込み)、他の例外発生可能命令を
越えてスケジューリングされた場合、その命令は投機的
である。したがって、手順1で求めた情報を使って、必
要な場合は明示的なsentinel instructionを生成する。 3.例外状態からの回復をソフトウェアで行う場合は、
各sentinel instructionに対応した例がハンドラに対し
て例外発生時の補償コードを生成する。
【0008】また、この種の他の従来技術として、特開
平12−020320号公報に開示された技術がある。
同公報は、コンパイラおよびランタイムライブラリのサ
ポートによって例外発生可能命令の投機的な実行を実現
する手法を開示している。
【0009】この従来技術では、以下の手順で例外発生
可能命令の投機的実行を行う。 1.コンパイラが、最終的に生成されるオブジェクトコ
ード中で、例外発生可能命令の投機的実行によって実行
順序が元のプログラムと変わった部分を割り込み禁止区
間として登録する。 2.例外発生時に、例外ハンドラが割り込み禁止区間情
報を元にして、補償コードを動的に生成し実行する。
【0010】
【発明が解決しようとする課題】上述したように、プロ
グラムを命令レベルで並列実行させるためのコードスケ
ジューリングには種々の制約があり、特に例外による制
約ハードウェアサポートによって緩和する機構は実現さ
れていない。これに対し、Javaのような、例外の取
り扱いが厳密でなければならない言語においては、例外
発生可能命令間の制約が、プログラムにおける命令レベ
ルの並列性の抽出に及ぼす影響が大きい。このため、J
avaなどの例外の取り扱いが厳密でなければならない
言語で記述されたプログラムに対するコンパイラにおい
て、命令レベルの並列性を抽出することは困難であっ
た。
【0011】Java言語を例としてさらに詳細に説明
する。Java言語の仕様は、プログラムの実行中に発
生する例外条件の厳密な取り扱いを定めている。システ
ムで定められている例外状態(オブジェクトのポインタ
がnullである場合、配列の長さを超えた添字でアク
セスした場合、整数の0除算を行った場合など)及びユ
ーザーが定義した例外状態は、全て例外の発生を実行時
に検出して、ユーザーにより定義された例外ハンドラで
処理することができる。そして、例外ハンドラの実行が
終了すると制御は例外を検出した領域から脱出する。
【0012】ここで、例外の発生は制御フローを変更す
るので、プログラム中の副作用(配列の要素やクラス、
オブジェクトのフィールドへの書き込み)の発生と例外
の発生の間には全順序がある。すなわち、ユーザー定義
の例外ハンドラが実行される時点では、プログラム中で
次の二つの条件を満足しなければならない。 1.例外の発生より先に行われた副作用は全て観測され
なければならない。 2.例外の発生より後に行われる副作用は観測されては
ならない。
【0013】Javaでは、配列の要素やオブジェクト
のフィールドへの読み出し及び書き込みなどの基本的な
操作が実行時の例外を伴う。すなわち、Javaプログ
ラムが機械語命令にコンパイルされると、これらの操作
は実行時の例外を検出する命令と、実際の操作を行うメ
モリアクセスや演算に変換される。そして、メモリアク
セスや演算は例外を発生する可能性がある。ここで、発
生する例外は、アクセス違反やゼロで割る除算などを実
行することによってプロセッサ(ハードウェア)が取る
状態としての例外である。プログラムの実行に伴う例外
としては、この他、プログラム言語の仕様外の入力に対
するプログラムの実行状態としての例外がある。以下の
説明において、特に前者の例外を他の例外と区別する必
要がある場合は、ハードウェア例外と称する。ハードウ
ェア例外は、機械語プログラムの間違いによって、プロ
セッサが不正なメモリ領域に読み書きを行ったり、計算
できない演算を行ったりしたために、正しく実行を継続
できない場合に発生する。一方、その他の例外は、ユー
ザーの書いたプログラムの間違いにより、配列のサイズ
を超えた要素を読み書きしたり関数に正しくない入力値
を与えたりした場合のエラー処理として、言語及びプロ
グラムが定める例外である。
【0014】このハードウェア例外の発生を回避するた
め、コードスケジューリングにおいて、副作用を行う命
令、例外発生を検出する命令、例外発生可能命令の間に
実行順序の制約が生じる。Javaプログラムにおいて
は、この実行順序の制約を伴う配列要素のアクセスやフ
ィールド変数のアクセスが頻繁に現れるため、これらの
順序制約が、コードスケジューリングにおいて命令レベ
ルの並列性を抽出する処理の大きな妨げになっていた。
【0015】また、上述したように、プログラムにおけ
る命令レベルの並列性を抽出した場合、先行的に発行さ
れた命令が起こした例外を処理することが必要である
が、従来は、そのような命令が上げた例外を即時には実
行せず、最適化を行う前のプログラムにおいてその命令
がもともと置かれていた場所で例外発生の有無を判定
し、実際の例外処理を行うことにより対応していた。
【0016】しかしこの場合、先行的に上げられた例外
の発生の有無を判定する命令のコストを無視することは
できない。例えば上述したIA−64では、投機的例外
を検出するための特別な機械語が用意されているが、大
規模に命令の移動を行った場合、そのような例外の発生
を判定するための命令が実行速度に与える影響は大きく
なるものと考えられる。
【0017】文献1に記載された従来技術では、ハード
ウェア例外を発生する可能性のある命令を投機的に実行
することはできるが、副作用や例外発生を検出する命令
の間には順序制約が残る。副作用のある命令を投機的に
実行するためには、さらにメモリへの書き込みをキャン
セルするためのハードウェアコストが必要である。ま
た、この従来技術は、ハードウェアサポートを必要とす
るため、投機的実行を行うハードウェアを持たない一般
のプロセッサには直接適用できない。さらに、ソフトウ
ェアによりこの従来技術による方法をエミュレーション
する手法は付加的な命令によるコストが高く現実的では
ない。したがって、この従来技術は、単純なハードウェ
ア例外発生可能命令の投機実行と、例外状態の回復によ
るモデルではオーバーヘッドが高く、Java言語のコ
ンパイルにおける例外発生可能命令の順序制約を緩和す
るには十分ではないと言える。
【0018】また、特開平12−020320号公報に
記載された従来技術では、例外が発生しないときにはソ
フトウェアオーバーヘッドなしで実現できる。しかし、
補償コードを例外ハンドラで実行時に生成するため、機
械語命令列が全て決定された後の最適化、すなわちレジ
スタ割付後のコードスケジューリングにおける最適化に
しか適用できない。このため、コード変形を伴う最適化
で、例外発生可能命令の投機的な実行による並列性を利
用することができない。
【0019】そこで、本発明は、例外発生可能命令の他
の命令への先行制約をソフトウェア的に緩和することに
よって、例外発生可能命令を含むプログラムの命令レベ
ル並列性を効果的に得ることを目的とする。
【0020】
【課題を解決するための手段】かかる目的のもと、本発
明は、プログラミング言語で記述されたプログラムのソ
ースコードを機械語に変換し、プログラムの最適化を行
う最適化方法において、処理対象のプログラムを解析
し、例外発生可能命令と、例外発生検出命令とを検出す
るステップと、検出された例外発生検出命令を、例外の
発生条件を検出する第1の命令と、例外の発生条件が検
出された場合に処理を例外処理へ条件分岐させる第2の
命令とに分割するステップと、第1の命令に対して、例
外の発生条件を検出した場合に第2の命令に移行し、例
外発生条件を検出しなかった場合に例外発生可能命令に
移行するように依存関係を設定するステップとを含むこ
とを特徴とする。このようにプログラムを変形し、依存
関係を設定することによって、例外発生可能命令におけ
る順序制約を緩和することができる。
【0021】ここで、この最適化方法は、命令の依存関
係を設定するステップの後に、プログラムの所定の範囲
における複数の例外発生検出命令に基づいて得られた複
数の第2の命令をまとめるステップをさらに含む。これ
により、複数の例外発生検出命令に基づいて得られた複
数の第1の命令が例外の発生条件を検出したことを一括
して代表的な判断を行う。
【0022】さらに詳しくは、この最適化方法におい
て、命令を分割するステップは、第1の命令として、例
外の発生条件を検出した場合にフラグを立てる命令を生
成するステップを含み、第2の命令をまとめるステップ
は、複数の例外発生検出命令に基づいて得られた複数の
第1の命令において、少なくともいずれか一つがフラグ
を立てている場合に、例外が発生したことを検出し、第
2の命令に処理を移行させる命令を生成するステップを
含む。上述したプログラムの所定の範囲として基本ブロ
ックを用いることができる。そして、この基本ブロック
内における例外の発生の判定を一つのフラグを用いてま
とめて行うことにより、実際の例外発生を検出するソフ
トウェアオーバーヘッドを一つの分岐命令で済ませるこ
とができる。
【0023】また、この最適化方法は、例外発生可能命
令を検出するステップの後に、例外発生可能命令が副作
用を伴う場合、例外発生検出命令の分割前におけるこの
副作用に関する順序制約を保存する補償コードを生成す
るステップをさらに含む。ここで、副作用とは、命令の
実行に伴って行われる所定のデータのメモリへの書き込
みである。
【0024】さらに、この最適化方法は、コンパイル後
のプログラムを実行するコンピュータ装置のCPUがプ
レディケート付き命令を実行する機能を持つ場合、例外
発生可能命令をガードするため、命令の依存関係を設定
するステップの後に、第1の命令を条件分岐とし、この
条件分岐を反映するようにプレディケートの割付を行う
ステップをさらに含む。
【0025】これに対し、この最適化方法は、コンパイ
ル後のプログラムを実行するコンピュータ装置のCPU
がプレディケート付き命令を実行する機能を持たない場
合、例外発生可能命令をガードするため、命令の依存関
係を設定するステップの後に、第1の命令を条件分岐と
し、コードスケジューリングの結果に応じて、第1の命
令の分岐先に、第1、第2の命令に分割される前の例外
発生検出命令に関する順序制約を満足するように補償コ
ードを生成するステップをさらに含む。
【0026】また本発明は、上述した最適化方法を含む
コンパイルを、コンピュータ装置に実行させるコンピュ
ータプログラムとして作成し、このコンピュータプログ
ラムを格納した記憶媒体や、このコンピュータプログラ
ムを伝送する伝送装置として提供することができる。さ
らに本発明は、このコンピュータプログラムを実行する
コンパイラを備えたコンピュータ装置として提供するこ
とができる。
【0027】また、本発明は、プログラミング言語で記
述されたプログラムのソースコードを機械語に変換し、
プログラムの最適化を行うコンパイラにおいて、処理対
象のプログラムを解析し、このプログラム中の演算子の
依存関係を示すグラフを生成するグラフ生成部と、生成
されたこのグラフを編集し、例外による演算子の順序制
約を緩和するグラフ編集部と、編集されたこのグラフに
おける演算子の依存関係を反映させたプログラムコード
を生成するコード再生部とを備え、グラフ編集部は、こ
のグラフ中から、例外が発生する可能性のある例外発生
可能命令と、この例外の発生条件を検出し例外が発生し
た場合に例外処理への分岐を行う例外発生検出命令とを
検出し、検出された例外発生検出命令を、この例外の発
生条件を検出する第1の命令と、この例外の発生条件が
検出された場合に処理を例外処理へ条件分岐させる第2
の命令とに分割し、このグラフ上の第1の命令に対し
て、例外の発生条件を検出した場合に第2の命令に移行
し、例外発生条件を検出しなかった場合に例外発生可能
命令に移行するように依存関係を設定することを特徴と
する。
【0028】ここで、このグラフ編集部は、このグラフ
から、例外発生検出命令の分割前における例外発生可能
命令に関する順序制約と、例外発生検出命令の分割前に
おけるこの例外発生検出命令に先行する順序制約とを取
り除く。これにより、例外発生可能命令に対する順序制
約をプログラムの所定の領域(基本ブロックなど)にお
けるクリティカルパス上から除去することができる。
【0029】また、本発明は、プログラミング言語で記
述されたプログラムのソースコードを機械語に変換し、
プログラムの最適化を行うコンパイラにおいて、このソ
ースコードを編集可能な中間コードに変換する中間コー
ド生成部と、この中間コードに対して最適化を行う最適
化部と、最適化された中間コードから機械語コードを生
成する機械語コード生成部とを備え、この最適化部は、
処理対象であるプログラムの中間コードを解析し、プロ
グラムの所定の範囲において、例外が発生する可能性の
ある例外発生可能命令を他の命令に先んじて実行するよ
うに、このプログラムを変形し、この例外発生可能命令
において例外が発生した場合にこの例外発生可能命令以
降の命令が実行されないように、このプログラムにおけ
る命令間の依存関係を設定し、このプログラムの所定の
範囲において、複数存在する例外発生可能命令のうち少
なくとも一つが例外を発生する場合に、この例外の発生
を検出し、この例外に対応する例外処理へ移行するよう
に、このプログラムを変形することを特徴とする。
【0030】さらにここで、この最適化部は、この例外
発生可能命令が副作用を伴う場合に、このプログラムの
変形前におけるこの副作用に関する順序制約を保存する
ように、このグラフ上の例外発生可能命令に対して順序
制約を設定する。
【0031】
【発明の実施の形態】以下、添付図面に示す実施の形態
に基づいて、この発明を詳細に説明する。まず、本発明
の概要について説明する。本発明は、例外を起こす可能
性のある命令(例外発生可能命令)における他の命令に
対する先行制約をソフトウェア的に緩和することによっ
て、例外発生可能命令を含むプログラムの命令レベル並
列性を得る。
【0032】本発明において、コンパイラは、他の命令
に先んじて発行された例外発生可能命令がソフトウェア
によってガードされるようにコードの変形を行う。そし
て、投機的に実行される例外発生可能命令により例外
(投機的例外)が起きる場合、コンパイラが用意した例
外ハンドラに分岐し、必要な副作用(メモリへの書き込
み)及び例外の検出を行ってから例外の発生を表すフラ
グを立て、ガードされていない命令のコンテクストに復
帰して実行を再開する。このように、コンパイラにおい
て例外の発生をコントロールすることにより、より多く
の種類の命令を先行的に発行できる。その後、例外発生
可能命令が元々配置されていたコンテクストにおいて、
上記の例外の発生を表すフラグを判定し、フラグが立っ
ていれば、当該例外に対する固有の例外処理を行う。こ
のように、投機的例外の判定を条件分岐やプレディケー
トなどのソフトウェアで行うことにより、例外発生可能
命令は、理論的に、コントロールによる制約、メモリア
クセスによる制約、例外による制約の全てに制限されず
に先行的に発行できるようになる。
【0033】しかしながら、このような投機的例外を判
定するための命令を実行するコストは無視できるもので
はない。さらに、ハードウェアでサポートされていない
投機処理を行う場合は、この例外判定をソフトウェアに
よって行うこととなるため、そのコストは大きくなる。
【0034】そこで、本発明は、プログラムにおける基
本ブロックの先頭において、その基本ブロック内におけ
るフラグのいずれか一つでも立っていれば、これを一括
して検出する代表的な判定を用意する。この判定は、フ
ラグをビットワイズに表現することによって、機械語1
命令で高速に処理できる。この代表的な判定において、
基本ブロック内のいずれかのフラグが立っていると判明
した場合、まず、オリジナルのプログラムで記述されて
いるコンテクストを回復させるのに必要十分な命令を実
行する。そして、立っているフラグを検出し、当該フラ
グに対応する例外に対する処理を行う。なお、基本ブロ
ックとは、ストレートコード、すなわちコントロールフ
ローが途中に入ることもなく、途中から出ることもない
ようなコード列の範囲をブロックで示したものである。
【0035】図1は、本発明の実施の形態におけるコン
パイラの構成を説明する図である。本実施の形態では、
処理対象である、例外の取り扱いが厳密でなければなら
ない言語としてJavaを用いる例について説明する。
すなわち、最適化の対象であるプログラムをJavaプ
ログラムとし、コンパイラをJavaのJust In Time C
ompilerとする。したがって、図1に示す本実施の形態
のコンパイラ100は、Javaバイトコードの形式で
記述されたプログラムを入力してコンパイルし、当該プ
ログラムを実行する計算機に対応した機械語コード形式
に変換して出力する。ただし、本発明を、他の種々のプ
ログラム言語で記述されたプログラムに対するコンパイ
ラに適用できることは言うまでもない。また、コンパイ
ラ100として、JavaのJust In Time Compilerを
想定する場合、コンパイラ100は、当該プログラムを
実行するコンピュータ装置に搭載されることとなる。す
なわち、図示しないがこのコンピュータ装置は、プログ
ラムのソースコードを入力する入力装置と、コンパイラ
100を実現するコンピュータプログラムを格納したメ
モリと、メモリに格納されたコンピュータプログラムの
制御によりコンパイラ100としての処理を実行すると
共に、コンパイラ100により機械語コードに変換され
たプログラムを実行する計算機(CPU)とを備える。
また、このコンピュータ装置は、コンパイラ100を実
現するコンピュータプログラムを、上述したCD−RO
Mやフロッピー(登録商標)ディスクから読み出すディ
スクドライブや、ネットワークを介して受信する受信部
を備える。
【0036】図1を参照すると、本実施の形態のコンパ
イラ100は、四つ組中間コード生成部10と、四つ組
中間コード最適化部20と、機械語コード生成部30と
を備える。上記構成において、四つ組中間コード生成部
10は、Javaバイトコード形式で与えられたプログ
ラムを解析し、四つ組形式で表現された中間コード(以
下、四つ組中間コードと称す)に変換する。四つ組中間
コード最適化部20は、四つ組中間コード生成部10に
より生成された四つ組中間コードに対して、すなわち、
最終的に生成される機械語コードの実行時間が短くなる
ように、計算の冗長性を取り除いたり、中間コードを移
動したりする。この最適化の過程で、プログラム中の例
外発生可能命令を投機的に実行するように命令の順序の
入れ替えを行う。機械語コード生成部30は、最適化さ
れた四つ組中間コードを、当該プログラムを実行する計
算機に対応した機械語コード形式に変換し出力する。
【0037】本実施の形態は、Java言語の例外処理
をコンパイルする際の以下のような特徴に注目して、ソ
フトウェアによる例外発生可能命令の投機実行を効率的
に行う。 1.例外処理は必ず制御ブロックからの脱出である。ま
た、ユーザー定義の例外ハンドラで検出できるのは副作
用の結果だけであり、それ以外の中間結果は例外ハンド
ラ以降の実行では参照されない。したがって、投機的に
実行した例外発生可能命令が例外を起す場合は、正確に
全ての状態を回復する必要はなく、副作用の順序を保証
し、例外の種類と引数を特定できれば良い。 2.例外はプログラムにおける「例外的条件」を扱うの
で、プログラムの実行全体から見ると例外が発生する頻
度は比較的低いと仮定できる。したがって、例外が発生
した場合の処理のソフトウェアオーバーヘッドはある程
度許容できる。 3.本発明は、Javaチップなどではない通常のプロ
セッサを対象としてコンパイルを行う場合、例外の検出
のためにソフトウェアによる明示的な命令列によるオー
バーヘッドを伴っている。代表的かつ最も頻繁に現れる
例外は、配列の長さを超えたインデクスによるアクセス
を検出する例外(ArrayIndexOutOfBoundsException)で
ある。そこで、配列サイズとインデクス変数をチェック
する既存の命令を使って、投機的例外の発生を検出する
ことができる。
【0038】Java言語における以上の特徴を利用し
て、Java言語の例外発生可能命令をソフトウェアで
投機的に実行するために以下の基本方針を採用する。 1.Java言語における例外を検出する既存の命令列
を利用して、ハードウェア例外発生可能命令の実行を、
条件分岐やプレディケート付き命令によってソフトウェ
ア的にガードする。すなわち、ハードウェア例外が発生
する場合には当該例外発生可能命令は実行されない。こ
れによって、例外が発生しない場合の実行において付加
的な命令オーバーヘッドを導入しなくて済むこととな
る。ガードされた例外発生可能命令は、ガードに対して
制御依存を持つ代わりに副作用や他の例外発生可能命令
に対して順序制約を持たなくなるので、例外発生可能命
令による順序制約が緩和される。 2.Java言語の定める例外が発生したかどうかを検
出し、ユーザー定義の例外ハンドラに分岐する命令と例
外発生条件を検出する命令とを分離し、基本ブロック内
で例外が起ったことを表す代表のフラグを用いる。これ
によって、実際に例外ハンドラに条件分岐する処理を基
本ブロック内で一つにまとめることができるので、実際
の例外発生を検出するソフトウェアオーバーヘッドを一
つの分岐命令で済ませることができる。 3.例外発生検出時の補償コードを、例外発生検出命令
の分岐先(または、プレディケート付き命令における負
の条件のプレディケートによる分岐先)に生成する。こ
れによって補償コードのための余分な分岐命令を通常実
行されるパスに挿入することを回避することができる。
例外処理は必ず脱出であるため、補償コードは副作用及
び例外の検出によって構成される。補償コードを生成す
るために、副作用や例外発生可能命令の間にある順序制
約を利用する。
【0039】次に、本実施の形態における例外発生可能
命令の投機的実行、副作用の投機的実行、補償コードの
生成の手順を説明する。プログラムは、プログラム中の
演算子の依存関係を示す無閉路有向グラフ(Directed A
cyclic Graph;以下、DAGと略す)として表現され
る。DAGの頂点は演算子を表し、DAGの辺(有向
辺)は演算子間の依存関係を表す。依存関係は以下の3
種類である。 データ依存:先行する演算子が書き込んだ値を後継する
演算子が読み出すこと(フロー依存)、先行する演算子
が読み出した場所に後継する演算子が書き込みを行うこ
と(逆依存)、及び先行する演算子が書き込んだ場所に
後継する演算子が書き込みを行うこと(出力依存)を表
す。 順序制約:先行する演算子の副作用が終わった後に後継
する演算子の副作用が起きることを表す。 制御依存:先行する演算子による条件判定が真である場
合にのみ後継する演算子が実行されることを表す。
【0040】例外発生可能命令の投機的実行は、プログ
ラム中に存在する不要な順序制約をできるだけ緩和し、
DAGの演算子間の並列性を抽出することを目的として
いる。DAG上で、経路上の演算を全て実行し終わるま
での時間が最も長い経路のことをグラフのクリティカル
パス(critical path)と呼ぶ。したがって、DAGで
表された演算を全て実行し終わるまでの時間の下限は、
クリティカルパスの長さに対応することとなる。本実施
の形態では、DAGのクリティカルパス上にある頂点
で、例外発生検出命令への順序制約、例外発生可能命令
からの順序制約による辺を選び、例外発生可能命令の投
機的実行を行うようにグラフを変形する。各変換は順序
制約を除去するので、クリティカルパス長を短くするこ
とができる。この操作を、クリティカルパス上の例外発
生可能命令及び例外発生検出命令の順序制約がなくなる
まで繰り返すことにより、投機的実行のオーバーヘッド
を極小化し、効果を極大化することができる。
【0041】本実施の形態において、以上の処理を実現
する四つ組中間コード最適化部20について説明する。
図2は、四つ組中間コード最適化部20の構成を説明す
るブロック図である。図2を参照すると、四つ組中間コ
ード最適化部20は、四つ組中間コードをDAG(Dire
cted Acyclic Graph)に変換するDAG生成部21と、
DAG編集部22と、DAGを四つ組中間コードに戻す
四つ組中間コード再生部23とを備える。DAG生成部
21は、四つ組中間コード生成部10により生成された
四つ組中間コードを入力として受け取り、四つ組演算子
間のデータ依存と順序制約を解析して、この解析結果を
反映させたDAGを生成する。すなわち、DAGは、四
つ組中間コードで表現されたプログラム中の各命令を頂
点(ノード)とし、命令間の順序制約を有向辺(パス)
で表している。DAG編集部22は、DAG生成部21
により生成されたDAGを入力として受け取り、例外発
生可能命令を投機的に実行するようにDAGの編集を行
う。四つ組中間コード再生部23は、DAG編集部22
により編集されたDAGを入力として受け取り、四つ組
中間コード形式のプログラムに再度変換して出力する。
【0042】図3は、DAG編集部22による編集処理
の全体的な流れを説明するフローチャートである。図3
を参照すると、DAG編集部22は、まず、DAGで表
現されたプログラム中のクリティカルパス上に存在す
る、例外による順序制約の緩和処理を行う(ステップ3
01)。この例外による順序制約の緩和によって、元の
DAGに存在した例外発生可能命令は、例外の検出と例
外ハンドラへの条件分岐とに分割される。そして、例外
の検出から例外発生可能命令に対して新たに制御依存が
追加される。
【0043】次に、DAG編集部22は、例外による順
序制約の緩和処理の施されたDAGに対して、例外ハン
ドラへの条件分岐のマージ処理を行う(ステップ30
2)。この処理により、連続した例外ハンドラへの条件
分岐が、代表フラグを使用した一つの条件分岐にマージ
される。
【0044】次に、DAG編集部22は、プログラムを
実行する計算機(以下、対象アーキテクチャと称す)
が、プレディケート(predicate)付き命令が実行可能
でかつ命令レベルの並列実行が可能かどうかを判断する
(ステップ303)。そして、対象アーキテクチャがプ
レディケート付き命令を並列実行する機能を持たない場
合は、投機的に実行される例外に対する補償コードの生
成処理を行う(ステップ304)。一方、対象アーキテ
クチャがプレディケート付き命令を並列実行する機能を
持つ場合は、ステップ301の例外による順序制約の緩
和処理で生成された制御依存に対応してプレディケート
の割付を行う(ステップ305)。以上のようにして、
補償コードの生成(ステップ304)またはプレディケ
ートの割付(ステップ305)が終了した後、DAG編
集部22による処理を終了する。
【0045】図4は、図3のステップ301における例
外による順序制約の緩和処理の詳細を説明するフローチ
ャートである。図4を参照すると、例外による順序制約
の緩和処理において、DAG編集部22は、まず、処理
対象であるDAGの頂点の中から、同じ例外発生条件を
持つ例外発生可能命令vと例外発生検出命令tとの対を
探す(ステップ401)。そして、検出された例外発生
可能命令vと当該例外発生検出命令tとに対する順序制
約がクリティカルパスを形成しているかどうか判断する
(ステップ402)。
【0046】この順序制約がクリティカルパスを形成し
ている場合、すなわち、この順序制約がクリティカルパ
ス上にある場合、DAG編集部22は、元の、例外発生
条件を検出して例外ハンドラへの分岐を行う命令tを、
例外条件の検出だけを行う命令t’と、実際に例外ハン
ドラに条件分岐する命令cとに分割する(ステップ40
3)。
【0047】そして次に、DAGの頂点t’から頂点c
へデータ依存の有向辺を張る(ステップ404)。この
辺は、命令t’で検出された例外発生条件を利用して命
令cが分岐を行うことを示す。また、頂点t’から頂点
vへ制御依存の有向辺を張る(ステップ405)。この
辺は、命令t’において例外が発生しないことが確認さ
れた場合にのみ命令vが実行されることを示す。また、
順序制約で頂点tに先行している頂点pから頂点cへ順
序制約の有向辺を張る(ステップ406)。この辺は、
元のプログラムにおいて命令tに先行していた全ての副
作用が終了してから命令cの条件分岐が実行されること
を示す。
【0048】次に、DAG編集部22は、命令vが副作
用を持っているか、すなわちメモリに対して書き込みを
行うかどうかを判断する(ステップ407)。そして、
命令vが副作用を持っている場合、DAG編集部22
は、DAGの順序制約で頂点tに先行している頂点pか
ら頂点vへ順序制約の有向辺を張る(ステップ40
8)。この辺は、変換が元のプログラムにおける副作用
間の順序制約を保存することを示す。
【0049】命令vが副作用を持たない場合、及びステ
ップ408を終了した後、DAG編集部22は、DAG
の順序制約で頂点vに後継している頂点sへ、頂点cか
ら順序制約の有向辺を張る(ステップ409)。この辺
は、元の命令vに後継する順序制約は命令cが実行され
た場合に保証されることを示す。
【0050】次に、DAG編集部22は、DAGの順序
制約で頂点vに先行または後継している元々の辺(ステ
ップ408で導入された辺は除く)を取り除く(ステッ
プ410)。同様にして、順序制約で頂点tに先行して
いる辺を取り除く(ステップ411)。これらの処理に
より、例外発生可能命令に対する順序制約をクリティカ
ルパス上から除去することが可能になる。ステップ41
1の処理が終了すると、DAG編集部22は、ステップ
401に戻り、クリティカルパス上の次の例外発生可能
命令による順序制約を探す。そして、クリティカルパス
上に順序制約が存在しないならば、例外による順序制約
の緩和処理を終了する(ステップ402)。
【0051】図5は、図3のステップ302における例
外ハンドラへの条件分岐のマージ処理の詳細を説明する
フローチャートである。図5を参照すると、例外ハンド
ラへの条件分岐のマージ処理において、DAG編集部2
2は、まず、例外による順序制約の緩和処理の済んだD
AGのうち、順序制約の辺によって結ばれた例外ハンド
ラへの条件分岐の組c1、c2を探す(ステップ50
1)。そして、そのような条件分岐の組c1、c2が存在
するかどうかを判断する(ステップ502)。
【0052】条件分岐の組c1、c2が存在する場合、D
AG編集部22は、DAGの順序制約で条件分岐c1
後継している頂点sの制御依存に対して、条件分岐c1
のガード条件を論理積によって追加する(ステップ50
3)。追加された制御依存は、条件分岐c1がチェック
していた条件と元々命令sが実行される条件の両方が成
立した場合にのみ命令sが実行されることを示す。
【0053】次に、DAG編集部22は、DAGの条件
分岐c1から頂点sに対する順序制約を取り除き(ステ
ップ504)、条件分岐c1と条件分岐c2とをマージす
る(ステップ505)。マージされた条件分岐c2
は、元の条件分岐c1と条件分岐c2の条件の両方がテス
トされる。ステップ505の処理が終了すると、DAG
編集部22は、ステップ501に戻り、順序制約の辺に
よって結ばれた例外ハンドラへの条件分岐の組c1、c2
を探す。そして、そのような条件分岐の組c1、c2が存
在しないならば、例外ハンドラへの条件分岐のマージ処
理を終了する(ステップ502)。
【0054】図6は、図3のステップ304における投
機的に実行される例外に対する補償コードの生成処理の
詳細を説明するフローチャートである。図6を参照する
と、投機的に実行される例外に対する補償コードの生成
処理において、DAG編集部22は、まず、コードスケ
ジューリング最適化を行い、DAG上において例外発生
可能命令と副作用の間の順序を決定する(ステップ60
1)。このコードスケジューリング最適化では、演算子
の遅延時間と対象計算機の資源の使用状況を考慮して、
DAGの頂点に対して最適な順序付けを行う。
【0055】次に、DAG編集部22は、順序が決定し
たDAGの頂点のうち、例外による順序制約の緩和処理
(図3のステップ301及び図4参照)において投機的
実行の対象となった例外発生検出命令tに対して、元の
プログラム中で推移的に先行していた頂点pを探す(ス
テップ602)。
【0056】次に、DAG編集部22は、ステップ60
2により得られたDAGの頂点の組t、pのうち、ステ
ップ601のコードスケジューリング最適化によって与
えられた順序によって元々のプログラムの順序制約が守
られない組が存在するかどうかを調べる(ステップ60
3)。
【0057】元々のプログラムの順序制約が守られない
頂点tと頂点pの組が存在する場合、次にDAG編集部
22は、条件分岐として生成される命令tの分岐先に、
命令pを補償コードとして生成する(ステップ60
4)。DAGの頂点tに対して先行する頂点pが複数存
在する場合は、各頂点pについて、元のプログラムの順
序制約を満たす順に、命令tの分岐先に補償コードを生
成する。ステップ604の処理が終了すると、DAG編
集部22は、ステップ602に戻り、DAGにおいて次
の順序が満たされない頂点tと頂点pの組を探す。そし
て、順序が満たされない頂点tと頂点pの組が存在しな
いならば、投機的に実行される例外に対する補償コード
の生成を終了する(ステップ603)。
【0058】以上のようにしてDAG編集部22による
DAGの編集が終了した後、四つ組中間コード再生部2
3が編集の済んだDAGを四つ組中間コードに戻す。そ
して、機械語コード生成部30が、最適化の済んだ当該
四つ組中間コードを、対象アーキテクチャに対応した機
械語コードに変換してコンパイルを終了する。
【0059】次に、Javaプログラムの中間コードを
最適化する具体的な動作例について説明する。例とし
て、図7(A)に示すJavaプログラムの中間コード
を最適化する場合を考える。NullPointerExceptionのチ
ェックがソフトウェアによって行われるプラットフォー
ムを仮定すると、このプログラムに対応する四つ組中間
コードは図7(B)に示すように表される。図7におい
て、NULLは配列のNullPointerExceptionを検出する操
作、LENGTHは配列の長さを得る操作、SIZEはArrayIndex
OutOfBoundsExceptionを検出する操作を表す。四つ組中
間コード最適化部20のDAG生成部21により、この
プログラムの持つ制約をDAGで表現した様子を図8に
示す。
【0060】次に、四つ組中間コード最適化部20のD
AG編集部22が、図8に示すDAGを編集する。図8
に示すDAGにおいて、簡単のために全ての演算のコス
トを1とすると、このグラフのクリティカルパス長は8
サイクルである。SIZE命令とNULL命令は制御を変更する
ので、SIZE命令からNULL命令の間に順序制約がある。こ
のためNULL命令に依存するLENGTH、SIZE、LOADがSIZE命
令に依存を持ち、データ依存による本来のクリティカル
パス長を伸ばしている。
【0061】まず、例外による順序制約の緩和処理(図
3のステップ301及び図4参照)において、NULL命令
を投機的に実行することにより、制約を緩和する。元々
のNULL命令の動作は、例外発生の検出と例外ハンドラへ
の分岐からなる。これを、例外発生条件の検出(同じNU
LL命令で表す)と、例外処理ルーチンへの分岐(CHECK
命令)とに分割する。例外発生検出命令(NULL)は、例
外発生条件を検出すると、基本ブロック内で例外が発生
したことを示す代表フラグを設定する。例外処理ルーチ
ンへの分岐命令(CHECK)は、代表フラグを調べ、もし
例外が発生していれば、元のプログラムで最初に発生す
るはずの例外ハンドラへ分岐する。以上の処理で、代表
フラグを用いることにより、複数の例外の発生を1命令
で検出することができる。例外発生可能命令であるLENG
TH命令は、例外発生検出命令(NULL)によってガードさ
れる。すなわち、NULL命令が例外発生条件を検出する
と、LENGTH命令は実行されない。元のNULL命令から例外
ハンドラへの分岐を分離することにより、NULL命令に先
行するSIZE命令による順序制約を外すことができる。例
外発生可能命令の値を使用している他の演算について
は、例外発生可能命令や副作用でない限りガードする必
要はない。なぜなら、例外ハンドラで観測できるのは副
作用と例外の発生だけだからである。
【0062】以上の変形を、下のSIZE命令にも同様に適
用し、例外ハンドラへの条件分岐のマージ処理(図3の
ステップ302及び図5参照)を行うことによって得ら
れるDAGを図9に示す。図8と図9のDAGを比較す
ると、図8のDAGではクリティカルパス長が8サイク
ルであったが、上記の処理でCHECK命令を一つ追加する
ことにより、図9に示すように、クリティカルパス長が
5サイクルに短縮された。図8、図9において、データ
依存は実線矢印、順序制約は一点鎖線矢印、制御依存は
破線矢印で表す。後述の図11、図12においても同様
である。
【0063】次に、副作用を伴う例外発生可能命令の投
機的実行について具体例を挙げて説明する。副作用を伴
う例外発生可能命令の投機的実行を行う場合は、直前の
例外発生検出命令だけでなく、先行する全ての例外発生
検出命令の条件でガードする必要がある。例として、図
10に示すJavaプログラムの中間コードを最適化す
る場合について考える。NullPointerExceptionのチェッ
クがソフトウェアによって行われるプラットフォームを
仮定すると、このプログラムに対応する四つ組中間コー
ドは図10(B)に示すように表される。四つ組中間コ
ード最適化部20のDAG生成部21により、このプロ
グラムの持つ制約をDAGで表現した様子を図11に示
す。
【0064】次に、四つ組中間コード最適化部20のD
AG編集部22が、図11に示すDAGを編集する。図
11に示すDAGにおいて、全ての演算のコストを1と
すると、このグラフのクリティカルパス長は10サイク
ルである。3番目のSIZE命令を投機的に実行する場合、
STORE命令による副作用は、当該STORE命令に先行する全
ての例外発生検出命令における条件の積によってガード
されなければならない。
【0065】図11に示すDAGに対し、例外による順
序制約の緩和処理(図3のステップ301及び図4参
照)及び例外ハンドラへの条件分岐のマージ処理(図3
のステップ302及び図5参照)を行うことによって得
られるDAGを図12に示す。図11と図12のDAG
を比較すると、図11のDAGではクリティカルパス長
が10サイクルであったが、上記の処理でCHECK命令を
追加することにより、図12に示すように、クリティカ
ルパス長が6サイクルに短縮された。
【0066】次に、例外発生が検出された場合の補償コ
ードの生成について、具体的な動作例を挙げて説明す
る。上述したように、例外が発生した場合には、元のプ
ログラムで例外発生可能命令より前に実行されている副
作用と例外の検出を実行しなければならない。IA−6
4のようなプレディケート付き命令を実行可能なアーキ
テクチャでは、例外発生検出命令から例外発生可能命令
及び副作用への制御依存をプレディケートで実装すれ
ば、補償コードは不要である。この場合、代表フラグの
テストでは、基本ブロック内で起った複数の例外のう
ち、元のプログラム中の最初に存在する例外発生検出命
令の例外ハンドラに分岐すればよい。
【0067】一方、プレディケート付き命令を実行でき
ないアーキテクチャでは、条件分岐によって例外発生検
出命令によるガードが実装される。そのため、例外発生
を検出した場合の分岐先に、必要な副作用の実行と例外
検出を行うための補償コードが必要となる(図3のステ
ップ304及び図6参照)。補償コードは、コードスケ
ジューリング最適化が終了して、演算間の順序が決定し
た後に求める。
【0068】図13は、所定のコード(図13(a))
に対して、必要な補償コードを補った様子(図13
(b))を説明する図である。また、図14は、図13
に示すコードの順序制約を示す図である。図13におい
て、下図でtestは例外発生検出命令、testの間のアルフ
ァベットは副作用のある演算を表すとする。副作用と例
外発生検出命令の間には、上述した推移的な制御依存が
ある。すなわち、副作用AB1はtest(A)とtest
(B)の前に実行することはできない。
【0069】図13(a)に示す例外発生検出命令と副
作用の順番で命令が実行されるのであれば、補償コード
は不要である。すなわち、例外発生検出命令から、ガー
ドされている演算を全てスキップするように条件分岐を
生成すればよい。これに対し、コードスケジューリング
最適化によって、図13(b)に示すように例外発生検
出命令と副作用が配置された場合、例外発生検出命令及
び副作用の関係は図13(a)の場合のように単純では
ない。すなわち、例外発生が検出されたパスで必要な補
償コードは、図14(a)に示す元のコードにおける例
外及び副作用の順序制約を溯った場合には実行されてい
なければならない。しかし、かかる補償コードは、実際
には例外が検出されるまで実行されておらず、例外発生
検出命令の分岐から復帰した後も実行されない。
【0070】例えば、test(B)で例外が検出された場
合、この時点ではtest(A)、A0が実行されていな
い。図13(a)に示す元のコードではtest(A)で例
外が発生しなければ副作用A0が実行されているので、
図13(b)に示すように、test(A)でA0をガード
したコードを挿入する。同様に、test(C)で例外が検
出された場合、この時点では副作用AB1がまだ実行さ
れていないので、図13(b)に示すように、AB1
補償コードとして生成する。
【0071】もし、test(A)とtest(B)における例
外が例外ハンドラから見て区別できない場合は、補償コ
ードをさらに少なくすることができる。例えば、図13
(a)に示す元のコードにおいて、A0の位置に副作用
がなく、test(A)とtest(B)が同じ種類の例外であ
れば、順序制約は図14(b)のようになる。この場
合、図13(b)に示した順序でコードが配置されて
も、副作用A0が存在しないので、test(B)の補償コ
ードによりtest(A)における例外の発生を検出する必
要はない。
【0072】次に、本実施の形態を用いた、数種類の対
象アーキテクチャ(プログラムを実行する計算機)に対
応したコード生成の例について説明する。まず、x86
アーキテクチャ(米インテル社製のプロセッサにおける
8086、80286、386アーキテクチャ)を対象
としたコード生成例を説明する。X86アーキテクチャ
は、ユーザー定義のフラグレジスタ及びプレディケート
を持たない。X86アーキテクチャ上の主要なオペレー
ティングシステムであるWin32、OS/2、Lin
uxでは、仮想メモリ上の0番地から始まるページには
読み出し及び書き込み保護が設定されているので、Ja
va言語のNullPointerExceptionの判定にはハードウェ
アによるアクセス違反例外の例外ハンドラで検出するこ
とが可能である。したがって、例外発生可能命令を投機
実行しない場合は、NullPointerExceptionの検出命令に
対しては実際にコード生成をしなくてよい。
【0073】しかし、ソフトウェアによる投機的実行を
行う場合は、例外発生可能命令をガードする必要がある
ので、NullPointerExceptionの検出命令に対応する命令
を明示的に生成しなければならない。Win32プラッ
トフォームを対象とした場合には、Javaバイトコー
ドのiaload命令の投機的実行に必要な基本操作は、図1
5に示すように実装される。図15において、arrhは配
列オブジェクトのヘッダを格納するレジスタ、idxは配
列アクセスの添字の値を格納するレジスタである。eHan
dlerは元々の例外ハンドラの先頭を示す。flHandlerは
補償コードの実行及び代表フラグの設定を行うコードの
先頭を示す。また、selHandlerは最初に発生した例外を
調べて元のeHandlerに分岐するコードの先頭を示す。
【0074】iaload命令の投機的実行に必要な基本操作
が図15に示すように実装されることは、投機的に実行
されるメモリアクセス命令がデータ依存及び副作用だけ
を考慮したDAGのクリティカルパス上にあった場合
に、投機的実行によってクリティカルパスの長さを伸ば
してしまう可能性があることを意味している。
【0075】この問題を回避するため、以下のような手
法を取る。すなわち、データ依存と副作用だけを考慮し
て得られるDAGについて、各頂点の自由度(slacknes
s)を計算する。自由度とは、当該頂点を含む経路に対
して、全体のクリティカルパス長を伸ばすことなく、後
何サイクルの演算を挿入することができるかを表す数字
である。投機的実行を行う例外発生可能命令を選択する
場合に、自由度が条件分岐命令のコストよりも小さけれ
ば、その例外発生可能命令の投機的実行を行わない。な
お、各頂点の自由度は図16に示すようにして計算され
る。
【0076】次に、PowerPCアーキテクチャ(米
国IBM社、米国アップルコンピュータ社、米国モトロ
ーラ社が開発したCPUであるPowerPCにおける
アーキテクチャ)を対象としたコード生成例を説明す
る。PowerPCアーキテクチャは、分岐条件を記憶
する専用のコンディションレジスタを持つ。上述したX
86アーキテクチャのコード生成例と同様に、本手法を
適用することによって、コードスケジューラが例外発生
検出命令の比較演算と通常の演算における計算との並列
性を利用することが可能になる。PowerPCアーキ
テクチャでは、比較演算と分岐命令の間に3サイクル以
上のレイテンシを置けば、分岐命令は命令フェッチユニ
ットで処理される。このため見かけ上、分岐命令のオー
バーヘッドが0になる(0サイクル分岐)。したがっ
て、例外発生可能命令及び例外発生検出命令の並列性を
抽出することで、クリティカルパス長を伸ばすことなく
演算パイプラインの充填率を上げることが可能になる。
AIX(米国IBM社のUNIX)プラットフォームを
対象とした場合、Javaバイトコードのiaload命令の
投機的実行に必要な基本操作は図17に示すように実装
される。図17において、arrh、flHandler、selHandle
r、idxの意味は上述したx86アーキテクチャにおける
図15の場合と同様である。lenは、配列の長さを格納
するレジスタである。
【0077】次に、IA−64アーキテクチャを対象と
したコード生成例を説明する。IA−64アーキテクチ
ャは、プレディケート付き命令フォーマットを持つ。こ
れにより、命令がプレディケートでガードされており、
プレディケートの真偽値にしたがって命令が実行され
る。したがって、先に述べたようにガード付きで表現さ
れたDAGをプレディケートで実装することによって、
例外が発生した場合の補償コードを生成せずに済ませる
ことができる。プレディケートで実装されたコードに対
しては、コードスケジューリング及びコード生成を直接
適用することができる。WIN64プラットフォームを
対象とした場合、Javaバイトコードのiaload命令の
投機的実行に必要な基本操作は図18に示すように実装
される。図18において、arrh、idx、eHandler、selHa
ndlerの意味は上述したx86アーキテクチャにおける
図15の場合と、lenの意味は上述したPowerPC
アーキテクチャにおける図17の場合と、それぞれ同様
である。プレディケートの論理積は、並列比較を用いる
ことによって、余分な命令オーバーヘッドを伴わずに実
現できる。
【0078】以上のように、従来の技術ではハードウェ
アによるサポートが必要であった例外発生可能命令の投
機的実行が、本実施の形態によってソフトウェアで実装
可能となる。これにより、Javaのような例外発生可
能命令の順序制約が厳密である言語において、コードス
ケジューラによる命令レベルの並列性の抽出を妨げる順
序制約を解消することが可能になった。また上記のよう
に、本実施の形態は、プレディケートを持たないプロセ
ッサに実装した場合でも、例外ハンドラへの条件分岐命
令を基本ブロックあたり2命令追加するだけで、例外発
生検出命令の付加的なオーバーヘッド無しに例外発生可
能命令の投機的実行を実現できる。
【0079】
【発明の効果】以上説明したように、本発明によれば、
例外発生可能命令の他の命令への先行制約をソフトウェ
ア的に緩和することによって、例外発生可能命令の投機
的実行を実現でき、例外発生可能命令を含むプログラム
の命令レベル並列性を効果的に得ることが可能となる。
【図面の簡単な説明】
【図1】 本発明の実施の形態におけるコンパイラの構
成を説明する図である。
【図2】 本実施の形態における四つ組中間コード最適
化部の構成を説明するブロック図である。
【図3】 本実施の形態におけるDAG編集部による編
集処理の全体的な流れを説明するフローチャートであ
る。
【図4】 図3のステップ301における例外による順
序制約の緩和処理の詳細を説明するフローチャートであ
る。
【図5】 図3のステップ302における例外ハンドラ
への条件分岐のマージ処理の詳細を説明するフローチャ
ートである。
【図6】 図3のステップ304における投機的に実行
される例外に対する補償コードの生成処理の詳細を説明
するフローチャートである。
【図7】 本実施の形態の処理対象であるプログラムの
中間コード及びその四つ組中間コードの例を示す図であ
る。
【図8】 図7のプログラムの持つ制約をDAGで表現
した図である。
【図9】 図8のDAGに対して編集を行った状態を示
す図である。
【図10】 本実施の形態の処理対象であるプログラム
の中間コード及びその四つ組中間コードの他の例を示す
図である。
【図11】 図10のプログラムの持つ制約をDAGで
表現した図である。
【図12】 図11のDAGに対して編集を行った状態
を示す図である。
【図13】 所定のコードに対して、必要な補償コード
を補った様子を説明する図である。
【図14】 図13に示すコードの順序制約を示す図で
ある。
【図15】 x86アーキテクチャにおいて、Java
バイトコードのiaload命令の投機的実行を行うために必
要な基本操作図の実装例を示す図である。
【図16】 データ依存と副作用だけを考慮して得られ
るDAGについて、各頂点の自由度を計算する手法を説
明する図である。
【図17】 PowerPCアーキテクチャにおいて、
Javaバイトコードのiaload命令の投機的実行を行う
ために必要な基本操作図の実装例を示す図である。
【図18】 IA−64アーキテクチャにおいて、Ja
vaバイトコードのiaload命令の投機的実行を行うため
に必要な基本操作図の実装例を示す図である。
【符号の説明】
10…四つ組中間コード生成部、20…四つ組中間コー
ド最適化部、21…DAG生成部、22…DAG編集
部、23…四つ組中間コード再生部、30…機械語コー
ド生成部
───────────────────────────────────────────────────── フロントページの続き (72)発明者 稲垣 達氏 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 (72)発明者 小松 秀昭 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B013 BB18 5B081 CC32

Claims (19)

    【特許請求の範囲】
  1. 【請求項1】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語に変換し、プログラムの最
    適化を行う最適化方法において、 処理対象である前記プログラムを解析し、例外が発生す
    る可能性のある例外発生可能命令と、当該例外の発生条
    件を検出し例外が発生した場合に例外処理への分岐を行
    う例外発生検出命令とを検出するステップと、 検出された前記例外発生検出命令を、前記例外の発生条
    件を検出する第1の命令と、前記例外の発生条件が検出
    された場合に処理を前記例外処理へ条件分岐させる第2
    の命令とに分割するステップと、 前記第1の命令に対して、前記例外の発生条件を検出し
    た場合に前記第2の命令に移行し、前記例外発生条件を
    検出しなかった場合に前記例外発生可能命令に移行する
    ように依存関係を設定するステップとを含むことを特徴
    とするプログラムの最適化方法。
  2. 【請求項2】 前記命令の依存関係を設定するステップ
    の後に、 プログラムの所定の範囲における複数の前記例外発生検
    出命令に基づいて得られた複数の前記第2の命令をまと
    めるステップをさらに含み、 複数の前記例外発生検出命令に基づいて得られた複数の
    前記第1の命令が例外の発生条件を検出したことを一括
    して判断する、 請求項1に記載のプログラムの最適化方法。
  3. 【請求項3】 前記命令を分割するステップは、前記第
    1の命令として、前記例外の発生条件を検出した場合に
    フラグを立てる命令を生成するステップを含み、 前記第2の命令をまとめるステップは、複数の前記例外
    発生検出命令に基づいて得られた複数の前記第1の命令
    において、少なくともいずれか一つが前記フラグを立て
    ている場合に、例外が発生したことを検出し、前記第2
    の命令に処理を移行させる命令を生成するステップを含
    む、請求項2に記載のプログラムの最適化方法。
  4. 【請求項4】 前記例外発生可能命令を検出するステッ
    プの後に、 前記例外発生可能命令が副作用を伴う場合、前記例外発
    生検出命令の分割前における当該副作用に関する順序制
    約を保存する補償コードを生成するステップをさらに含
    む、請求項1に記載のプログラムの最適化方法。
  5. 【請求項5】 前記命令の依存関係を設定するステップ
    の後に、 前記第1の命令を条件分岐とし、当該条件分岐を反映す
    るようにプレディケートの割付を行うステップをさらに
    含む、請求項1に記載のプログラムの最適化方法。
  6. 【請求項6】 前記命令の依存関係を設定するステップ
    の後に、 前記第1の命令を条件分岐とし、コードスケジューリン
    グの結果に応じて、前記第1の命令の分岐先に、前記第
    1、第2の命令に分割される前の前記例外発生検出命令
    に関する順序制約を満足するように補償コードを生成す
    るステップをさらに含む、請求項1に記載のプログラム
    の最適化方法。
  7. 【請求項7】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語に変換し、プログラムの最
    適化を行うコンパイラにおいて、 処理対象である前記プログラムを解析し、当該プログラ
    ム中の演算子の依存関係を示すグラフを生成するグラフ
    生成部と、 生成された前記グラフを編集し、例外による前記演算子
    の順序制約を緩和するグラフ編集部と、 編集された前記グラフにおける前記演算子の依存関係を
    反映させたプログラムコードを生成するコード再生部と
    を備え、 前記グラフ編集部は、 前記グラフ中から、例外が発生する可能性のある例外発
    生可能命令と、当該例外の発生条件を検出し例外が発生
    した場合に例外処理への分岐を行う例外発生検出命令と
    を検出し、 検出された前記例外発生検出命令を、前記例外の発生条
    件を検出する第1の命令と、前記例外の発生条件が検出
    された場合に処理を前記例外処理へ条件分岐させる第2
    の命令とに分割し、 前記グラフ上の前記第1の命令に対して、前記例外の発
    生条件を検出した場合に前記第2の命令に移行し、前記
    例外発生条件を検出しなかった場合に前記例外発生可能
    命令に移行するように依存関係を設定することを特徴と
    するコンパイラ。
  8. 【請求項8】 前記グラフ編集部は、 前記グラフから、前記例外発生検出命令の分割前におけ
    る前記例外発生可能命令に関する順序制約と、前記例外
    発生検出命令の分割前における当該例外発生検出命令に
    先行する順序制約とを取り除く、請求項7に記載のコン
    パイラ。
  9. 【請求項9】 前記グラフ編集部は、 プログラムの所定の範囲における前記グラフ上の複数の
    前記例外発生検出命令に基づいて得られた複数の前記第
    2の命令を合成する、請求項7に記載のコンパイラ。
  10. 【請求項10】 前記グラフ編集部は、 前記例外発生可能命令が副作用を伴う場合に、前記例外
    発生検出命令の分割前における当該副作用に関する順序
    制約を保存するように、前記グラフ上の前記例外発生可
    能命令に対して順序制約を設定する、請求項7に記載の
    コンパイラ。
  11. 【請求項11】 前記グラフ編集部は、 前記第1の命令を条件分岐とし、コードスケジューリン
    グの結果に応じて、前記グラフにおける前記第1の命令
    の分岐先に、前記第1、第2の命令に分割される前の前
    記例外発生検出命令に関する順序制約を満足するように
    補償コードを生成する、請求項7に記載のコンパイラ。
  12. 【請求項12】 プログラミング言語で記述されたプロ
    グラムのソースコードを機械語に変換し、プログラムの
    最適化を行うコンパイラにおいて、 前記ソースコードを編集可能な中間コードに変換する中
    間コード生成部と、 前記中間コードに対して最適化を行う最適化部と、 最適化された前記中間コードから機械語コードを生成す
    る機械語コード生成部とを備え、 前記最適化部は、 処理対象である前記プログラムの中間コードを解析し、
    当該プログラムの所定の範囲において、例外が発生する
    可能性のある例外発生可能命令を他の命令に先んじて実
    行するように、当該プログラムを変形し、 前記例外発生可能命令において例外が発生した場合に当
    該例外発生可能命令以降の命令が実行されないように、
    前記プログラムにおける命令間の依存関係を設定し、 前記プログラムの所定の範囲において、複数存在する前
    記例外発生可能命令のうち少なくとも一つが例外を発生
    する場合に、当該例外の発生を検出し、当該例外に対応
    する例外処理へ移行するように、前記プログラムを変形
    することを特徴とするコンパイラ。
  13. 【請求項13】 前記最適化部は、 前記例外発生可能命令が副作用を伴う場合に、前記プロ
    グラムの変形前における当該副作用に関する順序制約を
    保存するように、前記グラフ上の前記例外発生可能命令
    に対して順序制約を設定する、請求項12に記載のコン
    パイラ。
  14. 【請求項14】 プログラムのソースコードを入力する
    入力装置と、 入力された前記プログラムをコンパイルして機械語コー
    ドに変換するコンパイラと、 機械語コードに変換された前記プログラムを実行する処
    理装置とを備えたコンピュータ装置において、 前記コンパイラは、 処理対象である前記プログラムを解析し、例外が発生す
    る可能性のある例外発生可能命令と、当該例外の発生条
    件を検出し例外が発生した場合に例外処理への分岐を行
    う例外発生検出命令とを検出し、 検出された前記例外発生検出命令を、前記例外の発生条
    件を検出する第1の命令と、前記例外の発生条件が検出
    された場合に処理を前記例外処理へ条件分岐させる第2
    の命令とに分割し、 前記第1の命令に対して、前記例外の発生条件を検出し
    た場合に前記第2の命令に移行し、前記例外発生条件を
    検出しなかった場合に前記例外発生可能命令に移行する
    ように依存関係を設定することを特徴とするコンピュー
    タ装置。
  15. 【請求項15】 前記コンパイラは、 プログラムの所定の範囲における複数の前記例外発生検
    出命令に基づいて得られた複数の前記第1の命令が例外
    の発生条件を検出したことを一括して判断するように、
    複数の当該例外発生検出命令に基づいて得られた複数の
    前記第2の命令をまとめる、請求項14に記載のコンピ
    ュータ装置。
  16. 【請求項16】 コンピュータに実行させるプログラム
    を当該コンピュータの入力手段が読取可能に記憶した記
    憶媒体において、 前記プログラムは、 処理対象であるプログラムを解析し、例外が発生する可
    能性のある例外発生可能命令と、当該例外の発生条件を
    検出し例外が発生した場合に例外処理への分岐を行う例
    外発生検出命令とを検出する処理と、 検出された前記例外発生検出命令を、前記例外の発生条
    件を検出する第1の命令と、前記例外の発生条件が検出
    された場合に処理を前記例外処理へ条件分岐させる第2
    の命令とに分割する処理と、 前記第1の命令に対して、前記例外の発生条件を検出し
    た場合に前記第2の命令に移行し、前記例外発生条件を
    検出しなかった場合に前記例外発生可能命令に移行する
    ように依存関係を設定する処理とを前記コンピュータに
    実行させる記憶媒体。
  17. 【請求項17】 前記記憶媒体に記憶される前記プログ
    ラムは、前記命令の依存関係を設定する処理の後に、 プログラムの所定の範囲における複数の前記例外発生検
    出命令に基づいて得られた複数の前記第2の命令をまと
    める処理をさらに含み、 複数の前記例外発生検出命令に基づいて得られた複数の
    前記第1の命令が例外の発生条件を検出したことを一括
    して判断する、請求項16に記載の記憶媒体。
  18. 【請求項18】 コンピュータに、 処理対象であるプログラムを解析し、例外が発生する可
    能性のある例外発生可能命令と、当該例外の発生条件を
    検出し例外が発生した場合に例外処理への分岐を行う例
    外発生検出命令とを検出する処理と、検出された前記例
    外発生検出命令を、前記例外の発生条件を検出する第1
    の命令と、前記例外の発生条件が検出された場合に処理
    を前記例外処理へ条件分岐させる第2の命令とに分割す
    る処理と、前記第1の命令に対して、前記例外の発生条
    件を検出した場合に前記第2の命令に移行し、前記例外
    発生条件を検出しなかった場合に前記例外発生可能命令
    に移行するように依存関係を設定する処理とを実行させ
    るプログラムを記憶する記憶手段と、 前記記憶手段から前記プログラムを読み出して当該プロ
    グラムを送信する送信手段とを備えたことを特徴とする
    プログラム伝送装置。
  19. 【請求項19】 前記記憶手段に記憶される前記プログ
    ラムは、前記命令の依存関係を設定する処理の後に、 プログラムの所定の範囲における複数の前記例外発生検
    出命令に基づいて得られた複数の前記第2の命令をまと
    める処理をさらに含み、 複数の前記例外発生検出命令に基づいて得られた複数の
    前記第1の命令が例外の発生条件を検出したことを一括
    して判断する、請求項18に記載のプログラム伝送装
    置。
JP2000331427A 2000-10-30 2000-10-30 プログラムの最適化方法及びこれを用いたコンパイラ Expired - Fee Related JP3707727B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2000331427A JP3707727B2 (ja) 2000-10-30 2000-10-30 プログラムの最適化方法及びこれを用いたコンパイラ
US10/020,656 US6931635B2 (en) 2000-10-30 2001-10-29 Program optimization

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000331427A JP3707727B2 (ja) 2000-10-30 2000-10-30 プログラムの最適化方法及びこれを用いたコンパイラ

Publications (2)

Publication Number Publication Date
JP2002149416A true JP2002149416A (ja) 2002-05-24
JP3707727B2 JP3707727B2 (ja) 2005-10-19

Family

ID=18807771

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000331427A Expired - Fee Related JP3707727B2 (ja) 2000-10-30 2000-10-30 プログラムの最適化方法及びこれを用いたコンパイラ

Country Status (2)

Country Link
US (1) US6931635B2 (ja)
JP (1) JP3707727B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7240343B2 (en) 2001-07-05 2007-07-03 International Business Machines Corporation System and method for handling an exception in a program
WO2010047174A1 (ja) * 2008-10-24 2010-04-29 インターナショナル・ビジネス・マシーンズ・コーポレーション ソース・コード処理方法、システム、及びプログラム
JP2016192153A (ja) * 2015-03-31 2016-11-10 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、及び車載装置

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7137111B2 (en) * 2001-11-28 2006-11-14 Sun Microsystems, Inc. Aggressive prefetch of address chains
US7143403B2 (en) * 2002-06-18 2006-11-28 Hewlett-Packard Development Company, L.P. System and method for merging control flow paths
US7065759B2 (en) * 2002-06-18 2006-06-20 Hewlett-Packard Development Company, L.P. System and method for assigning basic blocks to computer control flow paths
JP3900485B2 (ja) * 2002-07-29 2007-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US7299458B2 (en) * 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US7165246B2 (en) * 2003-01-16 2007-01-16 Sun Microsystems, Inc. Optimized representation of data type information in program verification
US8121955B2 (en) 2003-01-16 2012-02-21 Oracle America, Inc. Signing program data payload sequence in program loading
US7222331B2 (en) * 2003-01-16 2007-05-22 Sun Microsystems, Inc. Linking of virtual methods
US7484095B2 (en) * 2003-01-16 2009-01-27 Sun Microsystems, Inc. System for communicating program data between a first device and a second device
US7281244B2 (en) * 2003-01-16 2007-10-09 Sun Microsystems, Inc. Using a digital fingerprint to commit loaded data in a device
US20040143739A1 (en) * 2003-01-16 2004-07-22 Sun Mircosystems, Inc., A Delaware Corporation Run time code integrity checks
US7272830B2 (en) * 2003-01-16 2007-09-18 Sun Microsystems, Inc. Ordering program data for loading on a device
US7392512B2 (en) * 2003-09-08 2008-06-24 Microsoft Corporation System and method for automatic conversion from WAP client provisioning XML represented objects to OMA DM tree structure represented objects
US7735073B1 (en) 2004-02-28 2010-06-08 Oracle International Corporation Method and apparatus for data object profiling
US7827543B1 (en) 2004-02-28 2010-11-02 Oracle America, Inc. Method and apparatus for profiling data addresses
US8065665B1 (en) 2004-02-28 2011-11-22 Oracle America, Inc. Method and apparatus for correlating profile data
US7707554B1 (en) 2004-04-21 2010-04-27 Oracle America, Inc. Associating data source information with runtime events
US20060095896A1 (en) * 2004-09-28 2006-05-04 Jianhui Li Apparatus, system, and method of removing exception related dependencies
US7519944B2 (en) * 2004-11-05 2009-04-14 International Business Machines Corporation Computer method and system for executing post-processing logic depending on function exit type
US20060200811A1 (en) * 2005-03-07 2006-09-07 Cheng Stephen M Method of generating optimised stack code
US7330962B2 (en) * 2005-11-14 2008-02-12 Nvidia Corporation Dynamic instruction sequence selection during scheduling
JP5045666B2 (ja) * 2006-02-20 2012-10-10 富士通株式会社 プログラム解析方法、プログラム解析装置およびプログラム解析プログラム
US7769964B2 (en) * 2006-08-21 2010-08-03 Intel Corporation Technique to perform memory reference filtering
JP2008305337A (ja) * 2007-06-11 2008-12-18 Panasonic Corp プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
US8042100B2 (en) * 2007-08-27 2011-10-18 International Business Machines Corporation Methods, systems, and computer products for evaluating robustness of a list scheduling framework
US8108868B2 (en) * 2007-12-18 2012-01-31 Microsoft Corporation Workflow execution plans through completion condition critical path analysis
JP5059174B2 (ja) * 2010-08-10 2012-10-24 株式会社東芝 プログラム変換装置、およびそのプログラム
US9304749B2 (en) * 2013-09-12 2016-04-05 Marvell World Trade Ltd. Method and system for instruction scheduling
KR20160070965A (ko) 2014-12-11 2016-06-21 삼성전자주식회사 컴파일러
CN107168698B (zh) * 2017-04-24 2020-11-24 华南理工大学 图形化编程的自动编译方法
US10318306B1 (en) * 2017-05-03 2019-06-11 Ambarella, Inc. Multidimensional vectors in a coprocessor
US11436055B2 (en) * 2019-09-28 2022-09-06 Apple Inc. Execution graph acceleration
CN117093502B (zh) * 2023-10-13 2024-01-30 支付宝(杭州)信息技术有限公司 程序代码的并行性检测方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5854928A (en) 1996-10-10 1998-12-29 Hewlett-Packard Company Use of run-time code generation to create speculation recovery code in a computer system
US6505296B2 (en) * 1997-10-13 2003-01-07 Hewlett-Packard Company Emulated branch effected by trampoline mechanism

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7240343B2 (en) 2001-07-05 2007-07-03 International Business Machines Corporation System and method for handling an exception in a program
WO2010047174A1 (ja) * 2008-10-24 2010-04-29 インターナショナル・ビジネス・マシーンズ・コーポレーション ソース・コード処理方法、システム、及びプログラム
US8407679B2 (en) 2008-10-24 2013-03-26 International Business Machines Corporation Source code processing method, system and program
JP5209059B2 (ja) * 2008-10-24 2013-06-12 インターナショナル・ビジネス・マシーンズ・コーポレーション ソース・コード処理方法、システム、及びプログラム
US8595712B2 (en) 2008-10-24 2013-11-26 International Business Machines Corporation Source code processing method, system and program
KR101522444B1 (ko) * 2008-10-24 2015-05-21 인터내셔널 비지네스 머신즈 코포레이션 소스 코드 처리 방법, 시스템, 및 프로그램
JP2016192153A (ja) * 2015-03-31 2016-11-10 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、及び車載装置

Also Published As

Publication number Publication date
US20020056078A1 (en) 2002-05-09
JP3707727B2 (ja) 2005-10-19
US6931635B2 (en) 2005-08-16

Similar Documents

Publication Publication Date Title
JP3707727B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US5778233A (en) Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
US6539541B1 (en) Method of constructing and unrolling speculatively counted loops
JP4003830B2 (ja) マルチプロセッシング環境における透過動的最適化のための方法およびシステム
US6721944B2 (en) Marking memory elements based upon usage of accessed information during speculative execution
JP3602857B2 (ja) 多機種対応型情報処理システム、および、方法
US5901308A (en) Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US7725883B1 (en) Program interpreter
JP3790683B2 (ja) コンピュータ装置、その例外処理プログラム及びコンパイル方法
US7103882B2 (en) Optimization apparatus, complier program, optimization method and recording medium
US8291398B2 (en) Compiler for optimizing program
JPH10228382A (ja) コンパイル方式
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
JPH0792752B2 (ja) 命令スケジューラ及び入力命令シーケンスを再スケジュールする方法
JP5966509B2 (ja) プログラム、コード生成方法および情報処理装置
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
JP4129981B2 (ja) コンパイラ、コンパイラプログラム、記録媒体、制御方法、及び中央処理装置
KR20010040742A (ko) 인터프리터 프로그램을 실행하는 방법
JP3992102B2 (ja) コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
US6301652B1 (en) Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
JP2005529383A (ja) シングルスレッドアプリケーションを支援する時間多重化推論的マルチスレッディング
US7222337B2 (en) System and method for range check elimination via iteration splitting in a dynamic compiler
JPH10320212A (ja) キャッシュ向け最適化方法
Canedo et al. Compiling for reduced bit-width queue processors
JPH02176938A (ja) 機械語命令最適化方式

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041026

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050222

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050511

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050712

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20050714

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050729

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees