JP2005504390A - ジャバハードウェアアクセラレータ用の投機的実行 - Google Patents
ジャバハードウェアアクセラレータ用の投機的実行 Download PDFInfo
- Publication number
- JP2005504390A JP2005504390A JP2003533105A JP2003533105A JP2005504390A JP 2005504390 A JP2005504390 A JP 2005504390A JP 2003533105 A JP2003533105 A JP 2003533105A JP 2003533105 A JP2003533105 A JP 2003533105A JP 2005504390 A JP2005504390 A JP 2005504390A
- Authority
- JP
- Japan
- Prior art keywords
- virtual machine
- value
- control variable
- instruction
- condition control
- 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 claims abstract description 112
- 238000012545 processing Methods 0.000 claims abstract description 58
- 238000006073 displacement reaction Methods 0.000 claims 4
- 230000003111 delayed effect Effects 0.000 claims 2
- 230000001419 dependent effect Effects 0.000 claims 1
- 230000002441 reversible effect Effects 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 241000761456 Nops Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 108010020615 nociceptin receptor Proteins 0.000 description 1
- 238000010972 statistical evaluation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3846—Speculative instruction execution using static prediction, e.g. branch taken strategy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
条件付き分岐バイトコードは仮想マシンインタープリタ(VMI)ハードウェアアクセラレータにより処理され、該アクセラレータは分岐予測方法を使用して、CPUが条件制御変数を戻すのを待つ間にバイトコードを投機的に処理すべきかを決定する。或る分岐予測方法においては、上記VMIは、条件付き分岐バイトコードが後方ジャンプを求める場合は分岐条件が満たされると仮定し、条件付き分岐バイトコードが前方ジャンプを求める場合は分岐条件が満たされないと仮定する。他の分岐予測方法においては、上記VMIは条件付き分岐バイトコードが後方ジャンプを求める場合にのみ仮定を行う。更に他の投機的実行方法において、上記VMIは、条件付き分岐バイトコードを処理する場合は常に分岐条件が満たされると仮定する。該VMIは、容易に元に戻すことが可能なバイトコード(例えば、単純なスタック操作を表すバイトコード)のみを投機的に処理し、容易に元に戻すことができないバイトコードに出会うと、バイトコードの投機的処理を保留する。該VMIによりなされた仮定は、上記条件制御変数が入力された際に確認又は無効化される。仮定が無効化された場合は、如何なる投機的に処理されたバイトコードも元に戻される。
Description
【技術分野】
【0001】
本発明は、広くはコンピュータプログラミング言語に係り、更に詳細には仮想マシン言語の翻訳及び実行に関する。
【背景技術】
【0002】
コンピュータプログラミング言語は、コンピュータが実行する命令を表すような人が読むことが可能なソースコードからなるアプリケーションを作成するために使用される。しかしながら、コンピュータが理解することができる前に、上記ソースコードはコンピュータが読み取り可能な二進マシンコードに翻訳されねばならない。
【0003】
C、C++又はコボルのようなプログラミング言語は、典型的には、上記ソースコードからアセンブリ言語を発生し、次いで該アセンブリ言語をマシンコードに変換されるマシン言語に変換するためにコンパイラを使用している。このように、ソースコードの最終的翻訳は実行時の前に行われる。異なるコンピュータは異なるマシン言語を必要とするので、例えばC++で書かれたプログラムは、該プログラムが書かれた特定のハードウェアプラットフォーム上のみで実行することができる。
【0004】
解釈(interpreted)プログラミング言語は、複数のハードウェアプラットフォーム上で実行するソースコードでアプリケーションを作成するように設計されている。ジャバ(登録商標)は、実行時前に"バイトコード"又は"仮想マシン言語"として知られている中間言語に変換されるようなソースコードを発生することにより、プラットフォームからの独立性を達成する解釈プログラミング言語である。実行時において、上記バイトコードは、米国特許第4,443,865号に開示されているように、インタープリタソフトウェアを介してプラットフォームに適したマシンコードに変換される。各バイトコードを解釈するために、インタープリタソフトウェアは"取り込み、デコード及びディスパッチ"(FDD)なる一連の処理を実行する。各バイトコード命令に対して、上記インタープリタソフトウェアは、ネイティブ中央処理装置(CPU)命令で表された対応する実行プログラムを含んでいる。該インタープリタソフトウェアはCPUにメモリから仮想マシン命令を取り込み又は読み取らせ、当該バイトコード命令に関して実行プログラムのCPUアドレスをデコードさせ、CPUの制御を該実行プログラムに移行させることによりディスパッチさせる。斯かる解釈処理は時間の掛かるものであり得る。
【0005】
国際特許出願公開第WO9918484号に開示されているように、メモリとCPUとの間にプリプロセッサ(仮想マシンインタープリタ(VMI))を付加することにより、仮想マシン命令の処理が改善される。本質的に、仮想マシンは物理的構造ではなく、むしろ、VM内又はCPU内に記憶された対応するネイティブマシン言語命令を選択することにより当該ハードウェアプラットフォーム用にバイトコードを解釈する自立型動作環境である。この場合、上記ネイティブ命令は当該ハードウェアプラットフォームのCPUに供給され、次いで該CPUにおいて実行される。典型的な仮想マシンは、FDD系列の処理を実行するのに、バイトコード当たり20ないし60サイクルの処理時間を必要とする(当該バイトコードの質及び複雑さに依存する)。先ず、VMIはメモリからバイトコードを読み取る(取り込む)。次に、VMIは該取り込まれたバイトコードの複数のプロパティをルックアップする(デコードする)。VMIによりアクセスされたプロパティは、当該CPUにおいて実行するために、該バイトコードがどの様にネイティブ命令に処理されるかを決定する。CPUが命令を実行している間に、VMIは次のバイトコードを取り込み、該次のバイトコードをCPU命令に処理する。VMIは単純なバイトコードを1ないし4サイクルで処理することができる。
【0006】
一連のバイトコードを解釈している間に、仮想マシンは、条件付き分岐命令(以下、CBIと呼ぶ)を表すバイトコードに出会う可能性がある。CBIに出会うと、VMIは、CPUに当該条件が満たされているかを判定させる一連のネイティブ命令を発生する。従って、当該分岐を実行するとの決定は以前の計算に依存し、斯かる計算はVMIの概念ではCPUレジスタに残存している結果によりCPUで実行されたものである。例えば、ジャバ(登録商標)のバイトコード"ifeq n"はバイトコードカウンタを"n"だけオフセットするが、これは当該スタックの最上部が零である(即ち、前の計算が該スタックに値零を残した)場合のみである。分岐条件(ここでは、スタックの最上部)の値は取り出され、VMIの制御レジスタ(分岐条件のために特別に確保される)に書き込まれなければならない。条件が満たされている場合は、該CBIはVMIバイトカウンタに対する更新を生じさせ(ジャンプ)、該カウンタが実行されるべきバイトコードのシーケンスを変更させる。典型的には、1つの命令がVMIで処理されつつある場合、処理されるべき次の命令は既にVMIパイプライン内にあるので、或る命令が分岐となる場合、VMIパイプライン内に既にあるバイトコードは流されねばならない。更に、プロセッサハードウェアの"パイプライン化"構造は、命令及び/又はデータがプロセッサにディスパッチされる時点と、プロセッサが実効的に斯かる命令を実行し及び/又は斯かるデータを処理する時点との間で斯かる命令及びデータを移送する固有の遅延を生じる。詳細には、典型的なCPUは多段(典型的には、3ないし8段)のパイプラインを有しているので、書込命令は該命令が送出された直後には実行されないであろう。CBIの場合、CPUが条件が満たされるかを判定し、この判定の結果をVMIに転送する間に付加的な遅延を生じる。分岐条件の値(制御値)が当該分岐条件が満たされていることを示す場合、幾つかの(CPUパイプラインの大きさに依存する)命令が既にCPUパイプラインに入っているであろう。CPU及び命令キャッシュをビジーに維持するために、当該条件が満たされるかを示す制御値を待つ間に、一連の"ノーオペレーション"(NOP)コマンドを発生させることができる。制御値は、CPUが最後より1つ前のNOPを実行し、VMIが最後のNOPを発生する間に入力される。上記判定を行った後、VMIパイプラインは、VMIが次の命令を表すバイトコードをVMIキャッシュから取り出すのに数サイクルを要する。
【0007】
他の方法は、命令が結果として他のロケーションへの分岐となるかを予測することにより、可能性のある分岐命令を投機的に実行する。この方法の一例はRISC(縮小命令セット計算)マイクロプロセッサに関するもので、どの条件付き分岐が予測するのが"容易"であるかを判断するために分岐命令ビットを設け、これらの分岐に対してはジャンプを実行すべきかを判断するためにソフトウェア分岐予測を使用する。ソフトウェア分岐予測は、ソフトウェア制御された予測ビットを用いて分岐を予測する。分岐が予測するのが"困難"であると判断されたら、該分岐はハードウェア分岐予測(分岐予測アレイのような)を用いて予測される。この方法は、オフセットが零より小さい(後方分岐)なら分岐がとられ、オフセットが零より大きければ(前方分岐)分岐がとられないと予測するような分岐予測方法を用いることを開示している。この方法の問題点は、とられた分岐の履歴的処理が該分岐がとられるかを判断する場合に重要であるか否かに基づくような、前記予測の容易さの判断を行い且つ更新するためにプロセッサの資源を消費する点にある。
【0008】
他の分岐予測方法においては、可能性のある分岐命令のアドレスからのビットが、ローカル分岐履歴テーブル及び全体履歴レジスタから連結されたビットと比較される。該比較の結果は分岐予測テーブルを読み取るために使用される。この方法の問題点は、上記連結及び比較処理を実行し、上記分岐予測テーブルを記憶及びアクセスするために要する資源の消費である。更に、該方法は予測誤りを補正する手段を開示していない。同様の方法論が米国特許第5,136,696号に開示されており、該方法において分岐予測は分岐キャッシュにより可能性のある分岐命令のアドレスに基づいて実行される。該開示によれば、予測が誤っている場合、対応する命令は無効化されるが、いずれにせよ実行されるので、分岐キャッシュは同一の命令に再び出会う場合に正しい予測により更新することができる。CPUパイプラインは、上記分岐キャッシュ更新と同一のサイクルの間において、当該パイプラインの最初の7段の命令の全てを無効化し、プログラムカウンタレジスタの内容をロードすることにより流される。
【発明の開示】
【発明が解決しようとする課題】
【0009】
条件付き分岐は頻繁に発生し(全仮想マシン命令のうちの約10%)、高い精度は達成するがプロセッサ資源を消費するような既存の方法により処理される場合に処理が大変であるので、条件付き分岐命令バイトコードにより意図される命令を正確且つ効率的に実行し、それでいて処理速度を向上させるような、プログラミング言語を解釈するシステムへの要求が存在する。
【課題を解決するための手段】
【0010】
本発明は、仮想マシンハードウェアアクセラレータ(VMIのような)を、条件付きバイトコード(CBI)に出会った場合に該VMIが分岐予測を実行すると共に投機的実行処理を開始すべきかを決定するように構成することにより、上述した要求を満たす。決定された場合、投機的実行は、投機的に実行されたバイトコードが容易に元に戻し得る(reversible)限り、又は予測が確認されるまで、継続する。殆どの場合予測は正しく、これにより、予測が確認された後VMI及びCPUが投機的に選択されたバイトコードのシーケンスに沿って動作し続けるのを可能にする。予測が正しくない場合(従って無効化される)、VMI及びCPUで実行された投機的処理は流され、VMIは当該分岐の直前の状態に戻される。効率性は、仮想マシンハードウェア加速技術の性能利得と分岐予測方法及び可能性のある投機的実行とを組み合わせることにより、及び影響を容易に元に戻すことができる限りにおいてのみ命令を投機的に実行することにより実現される。正確さは、如何なる予測誤りも補正することにより達成される。従って、平均すると、条件付き分岐(CBI)は比較的少ない遅延しか生じない。
【0011】
本発明は、より複雑な分岐予測方法論(オブジェクト指向技術及びシステムに関する第5回USENIX会議(1999)の原稿集、第217〜228頁の"ジャバにおける仮想方法呼出をサポートするための分岐予測器のチューニング"で推奨されているハッシング方法及び経路履歴方法論のような)及び出会った各潜在的分岐命令のタイプに基づいて簡単な(しかし確かな)予測を行う方法に匹敵する。
【0012】
簡単に述べると、本発明は条件付き分岐仮想マシン命令を処理するシステム及び方法を含むもので、斯かる命令は本発明の実施例においてはジャバ(登録商標)プログラミング言語により発生される。プログラミングレベルにおいては、ジャバ(登録商標)ソースコードは、バイトコードと呼ばれる中間言語にコンパイルされる。バイトコードは、プロセッサにより実行することができるように仮想マシンによって解釈することができるような仮想マシン命令からなる。本発明の実施例によれば、ランタイム時において、仮想マシン(実施例では、VMI)は初期化される。各バイトコードの特定のプロパティの識別を可能にするパラメータが初期化される。例えば、バイトコードは単純又は複雑なものとして特徴付けることができ、更に条件付き又は再帰的として特徴付けることができる。条件付きバイトコードは、実行されるべきバイトコードのシーケンスを、分岐条件が満たされる場合にのみ、変更する仮想マシン命令である。
【0013】
VMIは、一連のバイトコードの各々を1以上のネイティブ命令に処理するよう進行する。VMIは、各バイトコードが命令メモリから取り出される毎にインクリメントされるバイトコードカウンタを維持する。CBIに出会うと、VMIはCPUに分岐条件制御値を取り出すことにより分岐条件が満たされているかを判断させるようなネイティブ命令のシーケンスを発生する。本発明の実施例のシステム及び方法によれば、制御値の取り出しが完了するまで処理を一次中止するというよりは、VMIは分岐予測を実行し、投機的実行を実行すべきか、即ち分岐条件が満たされるであろうかについて仮定を行うべきか、を決定する。仮定が行われた場合、該仮定が確認若しくは無効化されるまで、又は容易に元に戻すのができないバイトコードに出会うまで、バイトコード系列は投機的に実行される。
【0014】
本発明の最初の3つの実施例においては、上記判断はCBIにより指定された分岐のタイプに基づくものである。第1の実施例によれば、VMIはCBIが後方分岐を指定しているなら分岐条件は真であると仮定し、該分岐により目標とされる次のバイトコードにジャンプするようバイトカウンタを更新する。当該CBIが前方分岐を指定する場合、VMIは分岐条件が満たされないであろうと仮定し、該分岐を実行しない。代替実施例は、CBIが後方分岐を求める場合、当該分岐条件は満たされると仮定するが、該CBIが前方分岐を求める場合は仮定を行わない。他の代替実施例においては、VMIは分岐条件が常に満たされると仮定し、投機的分岐に沿うバイトコードが容易に元に戻せるものである限り、及び当該仮定が確認又は無効化されるまで、該投機的分岐に沿ってバイトコードを処理する。
【0015】
更に他の実施例においては、分岐を投機的に実行すべきかを判断するのに既知の分岐予測方法を使用するが、VMIは容易に元に戻すことが可能なバイトコードを、当該仮定が確認又は無効化されるまでしか、投機的に処理しない。この方法論は、VMIを用いた実施化に関して後に詳細に説明されるが、より多くの分岐予測又は投機的実行方法を用いて実施化することができる。
【0016】
本発明の実施例によれば、仮定がなされた場合、VMIは投機的に実行される分岐に沿うか又はバイトコードの元のシーケンスに沿うかの何れかの順次のバイトコードの翻訳であるネイティブ命令を、これらのネイティブ命令が、例えばスタック操作に関わる命令(スタックプッシュのような)のような、容易に元に戻すことができるものである限り、CPUに対してディスパッチし続ける。容易に元に戻すことができないような命令に出会うと、制御値が入力されるまでCPUをビジーに維持するために、VMIにより一連の"ノーオペレーション"(NOP)コマンドが発生され、ディスパッチされる。続いて入力された制御値が仮定は正しいことを示すなら、VMIはVMIパイプラインに存在するバイトコードを処理し続け、CPUはCPUパイプライン内のネイティブ命令を処理し続ける。続いて入力された制御値が当該仮定は正しくない(即ち、予測誤りがあった)ことを示している場合は、CPUは当該分岐の直前の状態に戻され、これにより、当該投機的に実行された容易に元に戻すことが可能な(逆転可能な)バイトコードを元に戻す。この様に、正しくない仮定による予測誤りの逆転は、VMI及びCPUの両者を当該分岐の直前の各状態に戻すことを必要とし、投機的に実行されたバイトコードの特徴により容易に達成される。例えば、本発明の一実施例においては、"容易に元に戻すことが可能なバイトコード"とは、スタック操作のみを実行するか又はVMI外の如何なる状態も変更しないようなバイトコードと定義され、従って斯様なバイトコードのシーケンスの実行は、VMIにおけるバイトコードカウンタ及びレジスタスタックポインタをリセットすることにより逆転することができる。本発明によれば"容易に元に戻すことが可能な"の他の定義を実施することもでき、これらの定義の幾つかは、投機的に実行されたバイトコードを元に戻すためにVMI及びCPUのパイプラインが流されることを必要とし得る。
【0017】
本発明の他の態様は、ジャバ(登録商標)のような解釈言語からの仮想マシン命令を実行するシステムである。該システムは、プロセッサ(CPU)及びプリプロセッサ(VMI)、命令メモリ、並びにトランスレータ(JVM)を含む。上記プロセッサは、ハードウェアに固有の命令(以下、ネイティブ命令と呼ぶ)を含み且つ斯かる命令を実行するように構成される。上記プリプロセッサは、上記命令メモリからバイトコードを取り込むと共に該バイトコードをネイティブCPU命令に翻訳するように構成された仮想マシン(例えば、VMI)である。該VMIは制御レジスタ、バイトコードカウンタBCC、仮定変数レジスタ及び投機的モードスイッチ履歴を含む。本発明の実施例においては、上記VMIは、各バイトコードにより呼ばれるネイティブ命令を処理のためにCPUにディスパッチするように構成されている。処理されるバイトコードがCBIである場合、VMIによりディスパッチされたネイティブ命令は、CPUに分岐が実行されるべきかを示す制御値を送出させる。また、VMIは、分岐条件が満たされると推測又は確認された場合に、CBIにより呼ばれたジャンプを実行すべくBCCを更新するように構成される。制御値を待つ間、VMIは、上記において実施例として掲げられた方法による分岐予測方法に基づいて、分岐を投機的に処理し又は処理をやめるように構成される。VMIは、仮定された制御値ACVを記憶することにより、仮定を行い又は仮定をするのをやめる際に仮定変数の値を更新するように構成される。また、VMIは投機的モードスイッチ履歴を維持するように構成され、該履歴はシーケンスが投機的に実行される場合又は投機的実行が終了する場合に更新され、制御値が入力される場合に除去される。分岐が投機的に実行されるべきであるとの仮定をした後、VMIは逆転可能なバイトコードを識別すると共に処理し、制御値を入力し、該VMIが前の仮定は誤っていたことを示すような制御値を後に入力した場合に投機的に実行されたバイトコードを逆転させる(元に戻す)ように構成される。
【0018】
本発明の方法を種々のタイプの条件付き分岐命令を処理するように実施化することは可能であるが、本発明の実施例は、ジャバ(登録商標)の条件付き分岐バイトコードの処理に向けられている。
【0019】
本発明は、ジャバ(登録商標)バイトコードをサンマイクロシステムズにより作成されたJVMのような仮想マシンを用いて実行するようなシステムにおいて実施化することができる。しかしながら、本発明は、マイクロソフト仮想マシンのような他のジャバ(登録商標)仮想マシンを使用しても実施化することができ、ビジュアルベーシック、dBASE、ベーシック及び.NET等の他の解釈言語を実行するシステムにも適用可能である。
【0020】
本発明の更なる目的、利点及び新規な特徴は、下記の記載に一部述べられ、当業者にとっては下記の説明を調べることにより一部明らかとなり、又は本発明の実施により知ることができるであろう。
【0021】
明細書に組み込まれると共にその一部を形成する添付図面は、下記の説明を参照して見ることにより本発明を解説するものである。
【発明を実施するための最良の形態】
【0022】
ここでは、必要に応じて、本発明の実施例が開示されるが、開示された斯かる実施例は種々の且つ代わりの形態で実施化することができるような本発明の単なる例示に過ぎないことに注意すべきである。また、各図は必ずしも寸法通りではなく、特定の構成要素の細部を示すために幾つかの特徴は誇張され又は極小化されている。従って、ここに開示された特定の構造的及び機能的詳細は、制限するものとしてではなく、単なる請求項の基礎として及び当業者に本発明を多様に使用することを教示するための代表的基礎として解釈されるべきものである。
【0023】
添付図面(これら図面において、同様の符号は同様の構成要素を示す)に示された本発明の実施例を詳細に参照すると、図1は本発明の環境の実施例のブロック図である。該環境の基本的構成要素はハードウェアプラットフォーム100であり、該プラットフォームはプロセッサ110、プリプロセッサ120及び命令メモリ150を含み、これらは全てシステムバス160に接続されている。プリプロセッサ120は制御レジスタ130とトランスレータ140とを含んでいる。ハードウェアプラットフォーム100は、典型的には、中央処理装置(CPU)、基本周辺機器及びオペレーティングシステム(OS)を含んでいる。本発明のプロセッサ110は、MIPS、ARM、インテルx86、パワーPC又はSPARC型マイクロプロセッサであり、ハードウェア固有の命令(以下、ネイティブ命令と称す)を含むと共に、斯かる命令を実行するように構成されている。本発明の実施例において、トランスレータ140は例えばサンマイクロシステムズによるKVM等のジャバ(登録商標)仮想マシン(JVM)である。命令メモリ150は例えばジャバ(登録商標)バイトコードのような仮想マシン命令を含んでいる。当該実施例におけるプリプロセッサ120は国際特許出願公開第WO9918486号に開示された仮想マシンインタープリタ(VMI)であり、仮想マシン命令(例えば、バイトコード170)を命令メモリ150から取り込むと共に、該仮想マシン命令をネイティブCPU命令のシーケンスに変換するよう構成されている。VMI120は、バス160上の周辺機器であって、メモリマップ型周辺機器として動作することができ、そこでは、所定の範囲のCPUアドレスがVMI120に割り当てられる。VMI120は、命令メモリ150における現在の(又は次の)仮想マシン命令を示す独立の仮想マシン命令ポインタ180を管理する。また、該VMIは投機的モードスイッチ履歴及び仮定変数(図示略)も管理する。
【0024】
ここで図2を参照すると、本発明の実施例によれば、プロセッサ110はマシン命令の実行が連続したクロックサイクルの間において並列且つ密集行進的に行われるように多段パイプライン200を含んでいる。言い換えると、第1命令I1が当該パイプラインの段2に入る時、後続の命令I2は段1に入り、等々となる。理想的には、各命令は連続するサイクルにおいて当該パイプラインに入り続け、これにより、8つの命令の同時的処理を可能にし、ここで、1つの命令はクロックサイクル毎に完全に実行される。しかしながら、典型的には、平均的命令の実行は実際には2クロックサイクル以上を必要とする。
【0025】
本発明の動作の一例として、VMI120は第1系列310のバイトコードの各々を1以上のネイティブ命令に翻訳して進む。ここで図3を参照すると、バイトコードB0ないしB2は非条件付きであるので、VMI120は命令メモリ150からB0ないしB2を単に取り込み、各バイト170に対して定義されたネイティブ命令又は複数の命令を選択し、斯かる命令(又は複数の命令)を実行のためにプロセッサ110に供給する。Bnは条件付き分岐命令(CBI330)であるので、分岐条件が満たされるならBnは当該VMIを第1系列310から系列320におけるバイトコードBrへジャンプさせる。分岐条件が評価されている(即ち、VMI20がCPU110から返送されるべき制御値を待つ)間に、分岐予測方法に従い当該分岐条件が満たされるかについて予測がなされ、VMI120は該予測を検証することができるまで命令を投機的に実行すべきかを決定する。分岐予測方法は、分岐条件が満たされるかについての予測を与えるような多様な複雑さの発見的処理及び、多分、予測の精度の統計的評価である。本発明の一実施例によれば、VMI120は、CBI330(Bn)が後方分岐(即ち、バイトコードカウンタBCCに対して負のオフセット)を求める場合は分岐条件が満たされると仮定するような分岐予測方法を実施し、VMI120はバイトコードBrへのジャンプを実行する。VMI120は、同時的に、CPU110に当該分岐条件が満たされているかを示す制御値を取り出させるようなネイティブ命令のシーケンスをディスパッチする。他の実施例の分岐予測方法によれば、CBI330(Bn)が前方分岐(即ち、BCCに対して正のオフセット)を求める場合、VMI120は当該分岐条件が満たされないと仮定し、ジャンプを実行しない。更に他の実施例の分岐予測方法によれば、CBI330が分岐を求める場合、VMI120は当該分岐条件が満たされると仮定し、ジャンプを実行する。
【0026】
本発明の一実施例によれば、当該分岐予測方法が結果としてバイトコードのシーケンス320を投機的に実行することになる場合、不正確な予測の影響は、容易に元に戻す(逆転する)ことが可能なバイトコード170のみを投機的に実行することにより最小化される。逆転の容易さは、バイトコード170がデコードされる(即ち、該コードのプロパティがアクセスされる)際にVMI120により判断される。CPU110は、ディスパッチされる各命令を投機的に実行する。例えば、多くの場合、分岐にはスタックプッシュ処理(即ち、定数又は変数がスタックにプッシュされる)が後続し、該処理はスタックポインタ値(VMI120内に保持される)を当該分岐前の状態に再設定することにより容易に逆転させることができる。斯様なネイティブ命令(通常、"スタックプッシュ"と呼ばれる)は、制御値が入力されるまで、投機的に実行することができる。何故なら、該投機的実行の逆転は単にレジスタを再設定することにより達成され、従って、予測誤りの悪い影響は無視することができるからである。
【0027】
このように、VMI120が分岐条件は満足されると仮定する場合、バイトコードBrないしBzの処理(投機的分岐)が、VMI120が該投機的分岐に沿って容易に逆転することができないネイティブ命令のシーケンスを表すようなバイトコードに出会うまで、引き続いて第2のシーケンス320において継続する。該投機的分岐に沿うバイトコード170が容易に逆転することができないものである場合、投機的実行は一時中止される。次いで、VMI120が当該分岐条件は満たされなかったことを示すような制御値を入力すると、VMI120は当該ジャンプを逆転するためにBCC及びレジスタスタックポインタを再設定する(もし必要なら、CPU110に対してCPUパイプライン200を浄化するネイティブ命令を送出する)。VMI120が分岐条件は満たされないと仮定する場合は、BCCはインクリメントされ、分岐が投機的に処理されることはない。非分岐バイトコードを投機的に処理している間に、VMI120は入力された制御値が制御レジスタ130に書き込まれたかを継続的にチェックする。
【0028】
図4のブロック410に示すように、VMI120は、ブロック420において命令メモリ150から各バイトコード170を取り込む前に、仮想マシンカウンタBCCをインクリメントする。ブロック430において、VMI120は各バイトコード170を当該バイトコード170に関するプロパティにアクセスすることによりデコードする。シーケンスの最初のバイトコード170がデコードされた時に、投機モードスイッチSMSはオフであるから、VMI120は(ブロック435において)当該バイトコード170に対応するネイティブ命令のシーケンスをディスパッチする。ブロック445において、当該バイトコード170がCBI330でないと判断された場合は、当該方法はブロック410に戻り、ここで仮想マシンカウンタ(BCC)180がインクリメントされ、取り込み処理に戻る(ブロック420)。しかしながら、ブロック445において当該バイトコード170が条件付きであると判断されたなら、ブロック435でディスパッチされたネイティブ命令はブロック450内で制御値取込処理を表すようになる。該制御値取込処理を構成するネイティブ命令は、CPU110に、CBI330により求められた分岐が実行されるべきであるか(即ち、現在実行されているバイトコードのシーケンス外にある目標バイトコード170にジャンプすべきか)を示すような制御値を送出させ、且つ、該制御値を制御レジスタ130に書き込ませる。上記制御値取込処理と同時的に、VMI120は当該分岐条件が満たされるか又は満たされないかの仮定をなすべきかを決定する(ブロック470)。該決定は、使用されている特定の分岐予測又は投機実行方法に基づくものである。
【0029】
VMI120が当該分岐条件の満足に関する仮定を行うと決定すると、投機モードスイッチ(SMS)がオンされ、仮定された制御値(AVC)がVMIレジスタに記憶される(仮定変数195)。ブロック475において、当該分岐が投機的にとられた場合、BCCが更新される(CBI330により求められたジャンプを反映するために)。分岐が投機的になされるかに関係なく、当該方法はブロック410に進み、ここでBCCはインクリメントされる。投機的に決定されたバイトコードのシーケンスに沿う次のバイトコード170は、該バイトコードが逆転可能(例えば、該次のバイトコード170に対応するネイティブ命令が、単純なスタック操作を構成する)ならば、処理される。逆転の容易性の判断は、当該バイトコード170のプロパティに基づくものである。容易に逆転可能なバイトコードは、典型的には、CBI330の翻訳の直後のスタック最上部より上のスタック位置上で生じる処理であって、当該システム(特に、VMI120の外側)の状態を変更するものではないような処理を表す。バイトコード170はブロック420において取り込まれ、ブロック430においてデコードされる。SMSはオンである。何故なら、VMI120は仮定を行うように決定したからである(当該シーケンスは投機的に実行されている)。従って、制御値が未だ返送されておらず(ブロック485)、且つ、デコードされたプロパティが取り込まれたバイトコード170は容易に逆転可能であることを示している場合は、該取り込まれたバイトコードに対応するネイティブ命令がブロック435においてディスパッチされる。次いで、取り込まれるバイトコード170が他のCBI330でない限り(ブロック445)、BCCがインクリメントされ(ブロック410)、投機的シーケンスに沿う次のバイトコードが取り込まれ、デコードされる(ブロック420及び430)。このように、投機的シーケンスの処理は、次の各バイトコード170が容易に逆転可能なものである限り、且つ、分岐条件が入力されていない限り、ブロック410、420、430、432、485、486、460及び435を経てループする。
【0030】
ブロック460において、投機的シーケンスの処理の間において容易に逆転可能でないバイトコード170に出会うと、ブロック461においてSMSをオフに切り換えることにより投機が中止され、VMI120はブロック485において制御値の入力を待たされる。入力された制御値RCVはVMI120の制御レジスタ130に記憶される。ブロック487において、当該分岐条件が評価される。ブロック494においてRCVが当該分岐条件は満たされたことを示し、且つ、SMS履歴が現シーケンスは投機的に処理されていたことを示す(SMS履歴190が、当該SMSが現シーケンスの間における何処かでオンであったことを示す)場合、仮定変数195として記憶された仮定制御値ACVが、制御レジスタ130に記憶された入力制御値RCVと比較され、VMI120によりなされた仮定が正しかったか(即ち、上記投機的シーケンスが処理されるべきであったか)を判断する。仮定が正しかった場合(即ち、ACV=RCV)、現分岐シーケンスの投機的実行は確認されたことになる。言い換えると、VMI120は、当該分岐がなされるべきと正しく仮定した。そして、BCCがブロック410においてインクリメントされ、取り込みに戻る。仮定が正しくなかった場合は、VMI120は当該分岐を処理し損ない、VMI120及びCPU110は、投機的に処理された非分岐シーケンスのバイトコードを逆転するために浄化される。そして、当該方法はブロック495においてジャンプを反映するためにBCCを更新し、次いでブロック410に戻ってBCCをインクリメントし、当該分岐シーケンスに沿う次のバイトコードを処理する。
【0031】
ブロック494において、上記RCVが当該分岐条件は満足されなかったことを示し、且つ、上記SMS履歴190が現シーケンスは投機的に処理されていたことを示す場合、仮定制御値ACVは入力制御値RCVと比較され、VMI120によりなされた仮定が正しかったかを判断する。仮定が正しかった場合は、現非分岐シーケンスの投機的実行は確認されたことになる。言い換えると、VMI120は分岐がされるべきでないことを正しく仮定した。そして、BCCがブロック410においてインクリメントされ、取り込みに戻る。上記仮定が正しくなかった場合は、当該分岐はなされるべきでなかったことになり、投機的に処理された分岐に沿う全てのバイトコードは、ブロック495においてBCC及びスタックレジスタポインタを再設定することにより逆転される。もし必要なら、VMI120及びCPU110のパイプラインがブロック495において浄化される。
【0032】
SMS履歴190は制御値が入力される際に常にリセットされる。何故なら、分岐条件が解明され、かくして如何なる投機的処理も確認又は除去するからである。
【0033】
ブロック470において、VMI120が分岐条件の満足に関して仮定を行わないと決定する場合、VMI120は、ブロック485において制御値の入力をチェックすることにより、実際の制御値が入力されるまで待つ。SMSはオフのままなので、ブロック486はブロック485に戻り、制御値が入力されるまでチェックを継続する。制御値が入力されると、当該方法はブロック487に進み、そこにおいて、当該分岐条件が評価される。該制御値が分岐条件は満たされたことを示す場合、当該バイトコードシーケンスの実行の間において何の投機も生じていないので、当該方法はブロック495に進み、そこでは、CBI330により求められたジャンプを反映するためにBCCが更新され、次いでブロック410においてバイトコードの取り込みに戻る。上記制御値が分岐条件は満たされなかったことを示す場合、当該方法はブロック410に戻り、バイトコードの取り込みに復帰する。このようにして、VMI120が仮定を行わないと決定すると、VMI120はCBI330を通常のように処理する(分岐条件が満たされる場合にのみ、分岐を行う)。
【0034】
上述したように、分岐条件の満足に関して仮定を行うべきかの判断は、下記に示すように、実施される分岐予測方法に基づくものとなる。
【表1】
【0035】
本発明の第1実施例において、VMI120は、後方分岐はなされ、前方分岐はなされないと仮定するような投機的実行方法を使用する。第2の代替実施例において、VMI120は、後方分岐のみを投機的に実行し、前方分岐に関しては仮定を行わない。第3の代替実施例において、VMI120は、全ての分岐がなされると仮定するような一層単純な投機的実行方法を使用する。更に、第4の代替実施例によれば、VMI120は、分岐予測方法を使用して、分岐がなされるべきかを決定する。上述した実施例の何れによっても、投機的実行は容易に逆転が可能なバイトコードに対してのみ進行する。
【0036】
本発明の第1実施例によれば、VMI120はCBI330により示される分岐条件の結果に関する仮定を常に行うが、投機はCBI330により求められる分岐のタイプに基づかせる。CBI330が前方分岐を求める(BCCオフセット>0)場合、VMI120は分岐条件が満足されないと仮定し、容易に反転可能である限り、非分岐バイトコードシーケンスの処理を投機的に継続する。CBI330が後方分岐を求める(BCCオフセット<0)場合、VMI120は分岐条件が満足されると仮定し、容易に逆転可能である限りにおいて、分岐バイトコードシーケンスを投機的に処理する。
【0037】
本発明の第2実施例によれば、VMI120は、CBI330が後方分岐を求める場合にのみ、CBI330により示される分岐条件の結果に関する仮定を行う。CBI330が前方分岐を求める場合、VMI120は分岐条件を通常のように処理する。即ち、VMI120は制御値の入力を待ち、それに従ってバイトコードの適切なシーケンスを処理する。
【0038】
本発明の第3実施例においては、CBIに出会った場合に常に分岐がなされるように投機する。RISCコードを処理する場合、この投機的実行方法は時間の約70%となる。何故なら、分岐は通常はループの最下部で生じ、ループは典型的には繰り返して実行されるからである。該分岐予測は、VMIの全体としてのRISCコード処理性能を約35%改善する。アムダールの法則によれば、ジャバコードを処理する場合、この簡単な予測はバイトコード処理速度を7〜20%上昇させるであろう。分岐予測及び投機的処理を使用して、分岐のオーバーヘッドは、ネイティブに実行するCPUと比較して10〜20サイクルから約2〜4サイクルに減少させることができる。第3実施例の態様によれば、VMI120が分岐条件は満足されたと仮定する場合、VMI120は分岐オフセットを反映するためにバイトコードカウンタBCCを更新し、該オフセットアドレスからの取り込みを開始し、該VMIのパイプラインを回復する。仮定が正しい場合、当該分岐を処理するために要する時間は約5サイクルに低減される。しかしながら、本発明のこの実施例による分岐予測が処理時間を全ての分岐に関して約3なるファクタにより低減する(14又は15サイクルから)と結論することはできない。何故なら、全ての分岐のうちの約10%はキャッシュミスに終わるからである。
【0039】
第4実施例においては、各CBI330を処理するために、何れかの既知の分岐予測方法がVMI120との組み合わせで使用される。
【0040】
本発明のシステム及び方法の利点の多くを述べたが、当業者であれば他の利点もあることを認識するであろう。例えば、最適なバス利用のために、CPU110はネイティブ命令をバースト(典型的には、少なくとも4サイクルからなる)で読み取る。従って、CPU110は、制御値をVMI120に戻す前に、全バーストを読み取らねばならない。VMI120は、制御値取出コマンドを含むバーストを充填するために幾つかのNOPを発生して、該VMI120が投機的分岐を処理する間にCPU110が該取出コマンドを処理することを保証しなければならない。本発明の利点は、VMI120が、CPUバーストを満たすためにプロセッサ時間をNOPにより占有しなければならないというよりは、各命令の効果を逆転することができる限りにおいて投機的シーケンス320から次の命令を投機的にディスパッチすることによりCPU110及びVMI120のパイプラインを意味のある命令で満たし続ける点にある。
【0041】
上記の点から、本発明が条件付き分岐仮想マシン命令を正確且つ効率的に処理するシステム及び方法を提供することが理解されるだろう。しかしながら、上記は本発明の実施例にのみ関するものであって、添付請求項に記載された本発明の趣旨及び範囲から逸脱すること無しに種々の変更をなすことができると理解されるべきである。
【図面の簡単な説明】
【0042】
【図1】図1は、本発明の環境の実施例の機能的エレメントを示すブロック図である。
【図2】図2は、典型的なCPUパイプラインにおける命令の処理を示す概念図である。
【図3】図3は、一例としてのバイトコード処理シーケンスを示す。
【図4】図4は、本発明の一実施例による方法のフローチャートである。
【0001】
本発明は、広くはコンピュータプログラミング言語に係り、更に詳細には仮想マシン言語の翻訳及び実行に関する。
【背景技術】
【0002】
コンピュータプログラミング言語は、コンピュータが実行する命令を表すような人が読むことが可能なソースコードからなるアプリケーションを作成するために使用される。しかしながら、コンピュータが理解することができる前に、上記ソースコードはコンピュータが読み取り可能な二進マシンコードに翻訳されねばならない。
【0003】
C、C++又はコボルのようなプログラミング言語は、典型的には、上記ソースコードからアセンブリ言語を発生し、次いで該アセンブリ言語をマシンコードに変換されるマシン言語に変換するためにコンパイラを使用している。このように、ソースコードの最終的翻訳は実行時の前に行われる。異なるコンピュータは異なるマシン言語を必要とするので、例えばC++で書かれたプログラムは、該プログラムが書かれた特定のハードウェアプラットフォーム上のみで実行することができる。
【0004】
解釈(interpreted)プログラミング言語は、複数のハードウェアプラットフォーム上で実行するソースコードでアプリケーションを作成するように設計されている。ジャバ(登録商標)は、実行時前に"バイトコード"又は"仮想マシン言語"として知られている中間言語に変換されるようなソースコードを発生することにより、プラットフォームからの独立性を達成する解釈プログラミング言語である。実行時において、上記バイトコードは、米国特許第4,443,865号に開示されているように、インタープリタソフトウェアを介してプラットフォームに適したマシンコードに変換される。各バイトコードを解釈するために、インタープリタソフトウェアは"取り込み、デコード及びディスパッチ"(FDD)なる一連の処理を実行する。各バイトコード命令に対して、上記インタープリタソフトウェアは、ネイティブ中央処理装置(CPU)命令で表された対応する実行プログラムを含んでいる。該インタープリタソフトウェアはCPUにメモリから仮想マシン命令を取り込み又は読み取らせ、当該バイトコード命令に関して実行プログラムのCPUアドレスをデコードさせ、CPUの制御を該実行プログラムに移行させることによりディスパッチさせる。斯かる解釈処理は時間の掛かるものであり得る。
【0005】
国際特許出願公開第WO9918484号に開示されているように、メモリとCPUとの間にプリプロセッサ(仮想マシンインタープリタ(VMI))を付加することにより、仮想マシン命令の処理が改善される。本質的に、仮想マシンは物理的構造ではなく、むしろ、VM内又はCPU内に記憶された対応するネイティブマシン言語命令を選択することにより当該ハードウェアプラットフォーム用にバイトコードを解釈する自立型動作環境である。この場合、上記ネイティブ命令は当該ハードウェアプラットフォームのCPUに供給され、次いで該CPUにおいて実行される。典型的な仮想マシンは、FDD系列の処理を実行するのに、バイトコード当たり20ないし60サイクルの処理時間を必要とする(当該バイトコードの質及び複雑さに依存する)。先ず、VMIはメモリからバイトコードを読み取る(取り込む)。次に、VMIは該取り込まれたバイトコードの複数のプロパティをルックアップする(デコードする)。VMIによりアクセスされたプロパティは、当該CPUにおいて実行するために、該バイトコードがどの様にネイティブ命令に処理されるかを決定する。CPUが命令を実行している間に、VMIは次のバイトコードを取り込み、該次のバイトコードをCPU命令に処理する。VMIは単純なバイトコードを1ないし4サイクルで処理することができる。
【0006】
一連のバイトコードを解釈している間に、仮想マシンは、条件付き分岐命令(以下、CBIと呼ぶ)を表すバイトコードに出会う可能性がある。CBIに出会うと、VMIは、CPUに当該条件が満たされているかを判定させる一連のネイティブ命令を発生する。従って、当該分岐を実行するとの決定は以前の計算に依存し、斯かる計算はVMIの概念ではCPUレジスタに残存している結果によりCPUで実行されたものである。例えば、ジャバ(登録商標)のバイトコード"ifeq n"はバイトコードカウンタを"n"だけオフセットするが、これは当該スタックの最上部が零である(即ち、前の計算が該スタックに値零を残した)場合のみである。分岐条件(ここでは、スタックの最上部)の値は取り出され、VMIの制御レジスタ(分岐条件のために特別に確保される)に書き込まれなければならない。条件が満たされている場合は、該CBIはVMIバイトカウンタに対する更新を生じさせ(ジャンプ)、該カウンタが実行されるべきバイトコードのシーケンスを変更させる。典型的には、1つの命令がVMIで処理されつつある場合、処理されるべき次の命令は既にVMIパイプライン内にあるので、或る命令が分岐となる場合、VMIパイプライン内に既にあるバイトコードは流されねばならない。更に、プロセッサハードウェアの"パイプライン化"構造は、命令及び/又はデータがプロセッサにディスパッチされる時点と、プロセッサが実効的に斯かる命令を実行し及び/又は斯かるデータを処理する時点との間で斯かる命令及びデータを移送する固有の遅延を生じる。詳細には、典型的なCPUは多段(典型的には、3ないし8段)のパイプラインを有しているので、書込命令は該命令が送出された直後には実行されないであろう。CBIの場合、CPUが条件が満たされるかを判定し、この判定の結果をVMIに転送する間に付加的な遅延を生じる。分岐条件の値(制御値)が当該分岐条件が満たされていることを示す場合、幾つかの(CPUパイプラインの大きさに依存する)命令が既にCPUパイプラインに入っているであろう。CPU及び命令キャッシュをビジーに維持するために、当該条件が満たされるかを示す制御値を待つ間に、一連の"ノーオペレーション"(NOP)コマンドを発生させることができる。制御値は、CPUが最後より1つ前のNOPを実行し、VMIが最後のNOPを発生する間に入力される。上記判定を行った後、VMIパイプラインは、VMIが次の命令を表すバイトコードをVMIキャッシュから取り出すのに数サイクルを要する。
【0007】
他の方法は、命令が結果として他のロケーションへの分岐となるかを予測することにより、可能性のある分岐命令を投機的に実行する。この方法の一例はRISC(縮小命令セット計算)マイクロプロセッサに関するもので、どの条件付き分岐が予測するのが"容易"であるかを判断するために分岐命令ビットを設け、これらの分岐に対してはジャンプを実行すべきかを判断するためにソフトウェア分岐予測を使用する。ソフトウェア分岐予測は、ソフトウェア制御された予測ビットを用いて分岐を予測する。分岐が予測するのが"困難"であると判断されたら、該分岐はハードウェア分岐予測(分岐予測アレイのような)を用いて予測される。この方法は、オフセットが零より小さい(後方分岐)なら分岐がとられ、オフセットが零より大きければ(前方分岐)分岐がとられないと予測するような分岐予測方法を用いることを開示している。この方法の問題点は、とられた分岐の履歴的処理が該分岐がとられるかを判断する場合に重要であるか否かに基づくような、前記予測の容易さの判断を行い且つ更新するためにプロセッサの資源を消費する点にある。
【0008】
他の分岐予測方法においては、可能性のある分岐命令のアドレスからのビットが、ローカル分岐履歴テーブル及び全体履歴レジスタから連結されたビットと比較される。該比較の結果は分岐予測テーブルを読み取るために使用される。この方法の問題点は、上記連結及び比較処理を実行し、上記分岐予測テーブルを記憶及びアクセスするために要する資源の消費である。更に、該方法は予測誤りを補正する手段を開示していない。同様の方法論が米国特許第5,136,696号に開示されており、該方法において分岐予測は分岐キャッシュにより可能性のある分岐命令のアドレスに基づいて実行される。該開示によれば、予測が誤っている場合、対応する命令は無効化されるが、いずれにせよ実行されるので、分岐キャッシュは同一の命令に再び出会う場合に正しい予測により更新することができる。CPUパイプラインは、上記分岐キャッシュ更新と同一のサイクルの間において、当該パイプラインの最初の7段の命令の全てを無効化し、プログラムカウンタレジスタの内容をロードすることにより流される。
【発明の開示】
【発明が解決しようとする課題】
【0009】
条件付き分岐は頻繁に発生し(全仮想マシン命令のうちの約10%)、高い精度は達成するがプロセッサ資源を消費するような既存の方法により処理される場合に処理が大変であるので、条件付き分岐命令バイトコードにより意図される命令を正確且つ効率的に実行し、それでいて処理速度を向上させるような、プログラミング言語を解釈するシステムへの要求が存在する。
【課題を解決するための手段】
【0010】
本発明は、仮想マシンハードウェアアクセラレータ(VMIのような)を、条件付きバイトコード(CBI)に出会った場合に該VMIが分岐予測を実行すると共に投機的実行処理を開始すべきかを決定するように構成することにより、上述した要求を満たす。決定された場合、投機的実行は、投機的に実行されたバイトコードが容易に元に戻し得る(reversible)限り、又は予測が確認されるまで、継続する。殆どの場合予測は正しく、これにより、予測が確認された後VMI及びCPUが投機的に選択されたバイトコードのシーケンスに沿って動作し続けるのを可能にする。予測が正しくない場合(従って無効化される)、VMI及びCPUで実行された投機的処理は流され、VMIは当該分岐の直前の状態に戻される。効率性は、仮想マシンハードウェア加速技術の性能利得と分岐予測方法及び可能性のある投機的実行とを組み合わせることにより、及び影響を容易に元に戻すことができる限りにおいてのみ命令を投機的に実行することにより実現される。正確さは、如何なる予測誤りも補正することにより達成される。従って、平均すると、条件付き分岐(CBI)は比較的少ない遅延しか生じない。
【0011】
本発明は、より複雑な分岐予測方法論(オブジェクト指向技術及びシステムに関する第5回USENIX会議(1999)の原稿集、第217〜228頁の"ジャバにおける仮想方法呼出をサポートするための分岐予測器のチューニング"で推奨されているハッシング方法及び経路履歴方法論のような)及び出会った各潜在的分岐命令のタイプに基づいて簡単な(しかし確かな)予測を行う方法に匹敵する。
【0012】
簡単に述べると、本発明は条件付き分岐仮想マシン命令を処理するシステム及び方法を含むもので、斯かる命令は本発明の実施例においてはジャバ(登録商標)プログラミング言語により発生される。プログラミングレベルにおいては、ジャバ(登録商標)ソースコードは、バイトコードと呼ばれる中間言語にコンパイルされる。バイトコードは、プロセッサにより実行することができるように仮想マシンによって解釈することができるような仮想マシン命令からなる。本発明の実施例によれば、ランタイム時において、仮想マシン(実施例では、VMI)は初期化される。各バイトコードの特定のプロパティの識別を可能にするパラメータが初期化される。例えば、バイトコードは単純又は複雑なものとして特徴付けることができ、更に条件付き又は再帰的として特徴付けることができる。条件付きバイトコードは、実行されるべきバイトコードのシーケンスを、分岐条件が満たされる場合にのみ、変更する仮想マシン命令である。
【0013】
VMIは、一連のバイトコードの各々を1以上のネイティブ命令に処理するよう進行する。VMIは、各バイトコードが命令メモリから取り出される毎にインクリメントされるバイトコードカウンタを維持する。CBIに出会うと、VMIはCPUに分岐条件制御値を取り出すことにより分岐条件が満たされているかを判断させるようなネイティブ命令のシーケンスを発生する。本発明の実施例のシステム及び方法によれば、制御値の取り出しが完了するまで処理を一次中止するというよりは、VMIは分岐予測を実行し、投機的実行を実行すべきか、即ち分岐条件が満たされるであろうかについて仮定を行うべきか、を決定する。仮定が行われた場合、該仮定が確認若しくは無効化されるまで、又は容易に元に戻すのができないバイトコードに出会うまで、バイトコード系列は投機的に実行される。
【0014】
本発明の最初の3つの実施例においては、上記判断はCBIにより指定された分岐のタイプに基づくものである。第1の実施例によれば、VMIはCBIが後方分岐を指定しているなら分岐条件は真であると仮定し、該分岐により目標とされる次のバイトコードにジャンプするようバイトカウンタを更新する。当該CBIが前方分岐を指定する場合、VMIは分岐条件が満たされないであろうと仮定し、該分岐を実行しない。代替実施例は、CBIが後方分岐を求める場合、当該分岐条件は満たされると仮定するが、該CBIが前方分岐を求める場合は仮定を行わない。他の代替実施例においては、VMIは分岐条件が常に満たされると仮定し、投機的分岐に沿うバイトコードが容易に元に戻せるものである限り、及び当該仮定が確認又は無効化されるまで、該投機的分岐に沿ってバイトコードを処理する。
【0015】
更に他の実施例においては、分岐を投機的に実行すべきかを判断するのに既知の分岐予測方法を使用するが、VMIは容易に元に戻すことが可能なバイトコードを、当該仮定が確認又は無効化されるまでしか、投機的に処理しない。この方法論は、VMIを用いた実施化に関して後に詳細に説明されるが、より多くの分岐予測又は投機的実行方法を用いて実施化することができる。
【0016】
本発明の実施例によれば、仮定がなされた場合、VMIは投機的に実行される分岐に沿うか又はバイトコードの元のシーケンスに沿うかの何れかの順次のバイトコードの翻訳であるネイティブ命令を、これらのネイティブ命令が、例えばスタック操作に関わる命令(スタックプッシュのような)のような、容易に元に戻すことができるものである限り、CPUに対してディスパッチし続ける。容易に元に戻すことができないような命令に出会うと、制御値が入力されるまでCPUをビジーに維持するために、VMIにより一連の"ノーオペレーション"(NOP)コマンドが発生され、ディスパッチされる。続いて入力された制御値が仮定は正しいことを示すなら、VMIはVMIパイプラインに存在するバイトコードを処理し続け、CPUはCPUパイプライン内のネイティブ命令を処理し続ける。続いて入力された制御値が当該仮定は正しくない(即ち、予測誤りがあった)ことを示している場合は、CPUは当該分岐の直前の状態に戻され、これにより、当該投機的に実行された容易に元に戻すことが可能な(逆転可能な)バイトコードを元に戻す。この様に、正しくない仮定による予測誤りの逆転は、VMI及びCPUの両者を当該分岐の直前の各状態に戻すことを必要とし、投機的に実行されたバイトコードの特徴により容易に達成される。例えば、本発明の一実施例においては、"容易に元に戻すことが可能なバイトコード"とは、スタック操作のみを実行するか又はVMI外の如何なる状態も変更しないようなバイトコードと定義され、従って斯様なバイトコードのシーケンスの実行は、VMIにおけるバイトコードカウンタ及びレジスタスタックポインタをリセットすることにより逆転することができる。本発明によれば"容易に元に戻すことが可能な"の他の定義を実施することもでき、これらの定義の幾つかは、投機的に実行されたバイトコードを元に戻すためにVMI及びCPUのパイプラインが流されることを必要とし得る。
【0017】
本発明の他の態様は、ジャバ(登録商標)のような解釈言語からの仮想マシン命令を実行するシステムである。該システムは、プロセッサ(CPU)及びプリプロセッサ(VMI)、命令メモリ、並びにトランスレータ(JVM)を含む。上記プロセッサは、ハードウェアに固有の命令(以下、ネイティブ命令と呼ぶ)を含み且つ斯かる命令を実行するように構成される。上記プリプロセッサは、上記命令メモリからバイトコードを取り込むと共に該バイトコードをネイティブCPU命令に翻訳するように構成された仮想マシン(例えば、VMI)である。該VMIは制御レジスタ、バイトコードカウンタBCC、仮定変数レジスタ及び投機的モードスイッチ履歴を含む。本発明の実施例においては、上記VMIは、各バイトコードにより呼ばれるネイティブ命令を処理のためにCPUにディスパッチするように構成されている。処理されるバイトコードがCBIである場合、VMIによりディスパッチされたネイティブ命令は、CPUに分岐が実行されるべきかを示す制御値を送出させる。また、VMIは、分岐条件が満たされると推測又は確認された場合に、CBIにより呼ばれたジャンプを実行すべくBCCを更新するように構成される。制御値を待つ間、VMIは、上記において実施例として掲げられた方法による分岐予測方法に基づいて、分岐を投機的に処理し又は処理をやめるように構成される。VMIは、仮定された制御値ACVを記憶することにより、仮定を行い又は仮定をするのをやめる際に仮定変数の値を更新するように構成される。また、VMIは投機的モードスイッチ履歴を維持するように構成され、該履歴はシーケンスが投機的に実行される場合又は投機的実行が終了する場合に更新され、制御値が入力される場合に除去される。分岐が投機的に実行されるべきであるとの仮定をした後、VMIは逆転可能なバイトコードを識別すると共に処理し、制御値を入力し、該VMIが前の仮定は誤っていたことを示すような制御値を後に入力した場合に投機的に実行されたバイトコードを逆転させる(元に戻す)ように構成される。
【0018】
本発明の方法を種々のタイプの条件付き分岐命令を処理するように実施化することは可能であるが、本発明の実施例は、ジャバ(登録商標)の条件付き分岐バイトコードの処理に向けられている。
【0019】
本発明は、ジャバ(登録商標)バイトコードをサンマイクロシステムズにより作成されたJVMのような仮想マシンを用いて実行するようなシステムにおいて実施化することができる。しかしながら、本発明は、マイクロソフト仮想マシンのような他のジャバ(登録商標)仮想マシンを使用しても実施化することができ、ビジュアルベーシック、dBASE、ベーシック及び.NET等の他の解釈言語を実行するシステムにも適用可能である。
【0020】
本発明の更なる目的、利点及び新規な特徴は、下記の記載に一部述べられ、当業者にとっては下記の説明を調べることにより一部明らかとなり、又は本発明の実施により知ることができるであろう。
【0021】
明細書に組み込まれると共にその一部を形成する添付図面は、下記の説明を参照して見ることにより本発明を解説するものである。
【発明を実施するための最良の形態】
【0022】
ここでは、必要に応じて、本発明の実施例が開示されるが、開示された斯かる実施例は種々の且つ代わりの形態で実施化することができるような本発明の単なる例示に過ぎないことに注意すべきである。また、各図は必ずしも寸法通りではなく、特定の構成要素の細部を示すために幾つかの特徴は誇張され又は極小化されている。従って、ここに開示された特定の構造的及び機能的詳細は、制限するものとしてではなく、単なる請求項の基礎として及び当業者に本発明を多様に使用することを教示するための代表的基礎として解釈されるべきものである。
【0023】
添付図面(これら図面において、同様の符号は同様の構成要素を示す)に示された本発明の実施例を詳細に参照すると、図1は本発明の環境の実施例のブロック図である。該環境の基本的構成要素はハードウェアプラットフォーム100であり、該プラットフォームはプロセッサ110、プリプロセッサ120及び命令メモリ150を含み、これらは全てシステムバス160に接続されている。プリプロセッサ120は制御レジスタ130とトランスレータ140とを含んでいる。ハードウェアプラットフォーム100は、典型的には、中央処理装置(CPU)、基本周辺機器及びオペレーティングシステム(OS)を含んでいる。本発明のプロセッサ110は、MIPS、ARM、インテルx86、パワーPC又はSPARC型マイクロプロセッサであり、ハードウェア固有の命令(以下、ネイティブ命令と称す)を含むと共に、斯かる命令を実行するように構成されている。本発明の実施例において、トランスレータ140は例えばサンマイクロシステムズによるKVM等のジャバ(登録商標)仮想マシン(JVM)である。命令メモリ150は例えばジャバ(登録商標)バイトコードのような仮想マシン命令を含んでいる。当該実施例におけるプリプロセッサ120は国際特許出願公開第WO9918486号に開示された仮想マシンインタープリタ(VMI)であり、仮想マシン命令(例えば、バイトコード170)を命令メモリ150から取り込むと共に、該仮想マシン命令をネイティブCPU命令のシーケンスに変換するよう構成されている。VMI120は、バス160上の周辺機器であって、メモリマップ型周辺機器として動作することができ、そこでは、所定の範囲のCPUアドレスがVMI120に割り当てられる。VMI120は、命令メモリ150における現在の(又は次の)仮想マシン命令を示す独立の仮想マシン命令ポインタ180を管理する。また、該VMIは投機的モードスイッチ履歴及び仮定変数(図示略)も管理する。
【0024】
ここで図2を参照すると、本発明の実施例によれば、プロセッサ110はマシン命令の実行が連続したクロックサイクルの間において並列且つ密集行進的に行われるように多段パイプライン200を含んでいる。言い換えると、第1命令I1が当該パイプラインの段2に入る時、後続の命令I2は段1に入り、等々となる。理想的には、各命令は連続するサイクルにおいて当該パイプラインに入り続け、これにより、8つの命令の同時的処理を可能にし、ここで、1つの命令はクロックサイクル毎に完全に実行される。しかしながら、典型的には、平均的命令の実行は実際には2クロックサイクル以上を必要とする。
【0025】
本発明の動作の一例として、VMI120は第1系列310のバイトコードの各々を1以上のネイティブ命令に翻訳して進む。ここで図3を参照すると、バイトコードB0ないしB2は非条件付きであるので、VMI120は命令メモリ150からB0ないしB2を単に取り込み、各バイト170に対して定義されたネイティブ命令又は複数の命令を選択し、斯かる命令(又は複数の命令)を実行のためにプロセッサ110に供給する。Bnは条件付き分岐命令(CBI330)であるので、分岐条件が満たされるならBnは当該VMIを第1系列310から系列320におけるバイトコードBrへジャンプさせる。分岐条件が評価されている(即ち、VMI20がCPU110から返送されるべき制御値を待つ)間に、分岐予測方法に従い当該分岐条件が満たされるかについて予測がなされ、VMI120は該予測を検証することができるまで命令を投機的に実行すべきかを決定する。分岐予測方法は、分岐条件が満たされるかについての予測を与えるような多様な複雑さの発見的処理及び、多分、予測の精度の統計的評価である。本発明の一実施例によれば、VMI120は、CBI330(Bn)が後方分岐(即ち、バイトコードカウンタBCCに対して負のオフセット)を求める場合は分岐条件が満たされると仮定するような分岐予測方法を実施し、VMI120はバイトコードBrへのジャンプを実行する。VMI120は、同時的に、CPU110に当該分岐条件が満たされているかを示す制御値を取り出させるようなネイティブ命令のシーケンスをディスパッチする。他の実施例の分岐予測方法によれば、CBI330(Bn)が前方分岐(即ち、BCCに対して正のオフセット)を求める場合、VMI120は当該分岐条件が満たされないと仮定し、ジャンプを実行しない。更に他の実施例の分岐予測方法によれば、CBI330が分岐を求める場合、VMI120は当該分岐条件が満たされると仮定し、ジャンプを実行する。
【0026】
本発明の一実施例によれば、当該分岐予測方法が結果としてバイトコードのシーケンス320を投機的に実行することになる場合、不正確な予測の影響は、容易に元に戻す(逆転する)ことが可能なバイトコード170のみを投機的に実行することにより最小化される。逆転の容易さは、バイトコード170がデコードされる(即ち、該コードのプロパティがアクセスされる)際にVMI120により判断される。CPU110は、ディスパッチされる各命令を投機的に実行する。例えば、多くの場合、分岐にはスタックプッシュ処理(即ち、定数又は変数がスタックにプッシュされる)が後続し、該処理はスタックポインタ値(VMI120内に保持される)を当該分岐前の状態に再設定することにより容易に逆転させることができる。斯様なネイティブ命令(通常、"スタックプッシュ"と呼ばれる)は、制御値が入力されるまで、投機的に実行することができる。何故なら、該投機的実行の逆転は単にレジスタを再設定することにより達成され、従って、予測誤りの悪い影響は無視することができるからである。
【0027】
このように、VMI120が分岐条件は満足されると仮定する場合、バイトコードBrないしBzの処理(投機的分岐)が、VMI120が該投機的分岐に沿って容易に逆転することができないネイティブ命令のシーケンスを表すようなバイトコードに出会うまで、引き続いて第2のシーケンス320において継続する。該投機的分岐に沿うバイトコード170が容易に逆転することができないものである場合、投機的実行は一時中止される。次いで、VMI120が当該分岐条件は満たされなかったことを示すような制御値を入力すると、VMI120は当該ジャンプを逆転するためにBCC及びレジスタスタックポインタを再設定する(もし必要なら、CPU110に対してCPUパイプライン200を浄化するネイティブ命令を送出する)。VMI120が分岐条件は満たされないと仮定する場合は、BCCはインクリメントされ、分岐が投機的に処理されることはない。非分岐バイトコードを投機的に処理している間に、VMI120は入力された制御値が制御レジスタ130に書き込まれたかを継続的にチェックする。
【0028】
図4のブロック410に示すように、VMI120は、ブロック420において命令メモリ150から各バイトコード170を取り込む前に、仮想マシンカウンタBCCをインクリメントする。ブロック430において、VMI120は各バイトコード170を当該バイトコード170に関するプロパティにアクセスすることによりデコードする。シーケンスの最初のバイトコード170がデコードされた時に、投機モードスイッチSMSはオフであるから、VMI120は(ブロック435において)当該バイトコード170に対応するネイティブ命令のシーケンスをディスパッチする。ブロック445において、当該バイトコード170がCBI330でないと判断された場合は、当該方法はブロック410に戻り、ここで仮想マシンカウンタ(BCC)180がインクリメントされ、取り込み処理に戻る(ブロック420)。しかしながら、ブロック445において当該バイトコード170が条件付きであると判断されたなら、ブロック435でディスパッチされたネイティブ命令はブロック450内で制御値取込処理を表すようになる。該制御値取込処理を構成するネイティブ命令は、CPU110に、CBI330により求められた分岐が実行されるべきであるか(即ち、現在実行されているバイトコードのシーケンス外にある目標バイトコード170にジャンプすべきか)を示すような制御値を送出させ、且つ、該制御値を制御レジスタ130に書き込ませる。上記制御値取込処理と同時的に、VMI120は当該分岐条件が満たされるか又は満たされないかの仮定をなすべきかを決定する(ブロック470)。該決定は、使用されている特定の分岐予測又は投機実行方法に基づくものである。
【0029】
VMI120が当該分岐条件の満足に関する仮定を行うと決定すると、投機モードスイッチ(SMS)がオンされ、仮定された制御値(AVC)がVMIレジスタに記憶される(仮定変数195)。ブロック475において、当該分岐が投機的にとられた場合、BCCが更新される(CBI330により求められたジャンプを反映するために)。分岐が投機的になされるかに関係なく、当該方法はブロック410に進み、ここでBCCはインクリメントされる。投機的に決定されたバイトコードのシーケンスに沿う次のバイトコード170は、該バイトコードが逆転可能(例えば、該次のバイトコード170に対応するネイティブ命令が、単純なスタック操作を構成する)ならば、処理される。逆転の容易性の判断は、当該バイトコード170のプロパティに基づくものである。容易に逆転可能なバイトコードは、典型的には、CBI330の翻訳の直後のスタック最上部より上のスタック位置上で生じる処理であって、当該システム(特に、VMI120の外側)の状態を変更するものではないような処理を表す。バイトコード170はブロック420において取り込まれ、ブロック430においてデコードされる。SMSはオンである。何故なら、VMI120は仮定を行うように決定したからである(当該シーケンスは投機的に実行されている)。従って、制御値が未だ返送されておらず(ブロック485)、且つ、デコードされたプロパティが取り込まれたバイトコード170は容易に逆転可能であることを示している場合は、該取り込まれたバイトコードに対応するネイティブ命令がブロック435においてディスパッチされる。次いで、取り込まれるバイトコード170が他のCBI330でない限り(ブロック445)、BCCがインクリメントされ(ブロック410)、投機的シーケンスに沿う次のバイトコードが取り込まれ、デコードされる(ブロック420及び430)。このように、投機的シーケンスの処理は、次の各バイトコード170が容易に逆転可能なものである限り、且つ、分岐条件が入力されていない限り、ブロック410、420、430、432、485、486、460及び435を経てループする。
【0030】
ブロック460において、投機的シーケンスの処理の間において容易に逆転可能でないバイトコード170に出会うと、ブロック461においてSMSをオフに切り換えることにより投機が中止され、VMI120はブロック485において制御値の入力を待たされる。入力された制御値RCVはVMI120の制御レジスタ130に記憶される。ブロック487において、当該分岐条件が評価される。ブロック494においてRCVが当該分岐条件は満たされたことを示し、且つ、SMS履歴が現シーケンスは投機的に処理されていたことを示す(SMS履歴190が、当該SMSが現シーケンスの間における何処かでオンであったことを示す)場合、仮定変数195として記憶された仮定制御値ACVが、制御レジスタ130に記憶された入力制御値RCVと比較され、VMI120によりなされた仮定が正しかったか(即ち、上記投機的シーケンスが処理されるべきであったか)を判断する。仮定が正しかった場合(即ち、ACV=RCV)、現分岐シーケンスの投機的実行は確認されたことになる。言い換えると、VMI120は、当該分岐がなされるべきと正しく仮定した。そして、BCCがブロック410においてインクリメントされ、取り込みに戻る。仮定が正しくなかった場合は、VMI120は当該分岐を処理し損ない、VMI120及びCPU110は、投機的に処理された非分岐シーケンスのバイトコードを逆転するために浄化される。そして、当該方法はブロック495においてジャンプを反映するためにBCCを更新し、次いでブロック410に戻ってBCCをインクリメントし、当該分岐シーケンスに沿う次のバイトコードを処理する。
【0031】
ブロック494において、上記RCVが当該分岐条件は満足されなかったことを示し、且つ、上記SMS履歴190が現シーケンスは投機的に処理されていたことを示す場合、仮定制御値ACVは入力制御値RCVと比較され、VMI120によりなされた仮定が正しかったかを判断する。仮定が正しかった場合は、現非分岐シーケンスの投機的実行は確認されたことになる。言い換えると、VMI120は分岐がされるべきでないことを正しく仮定した。そして、BCCがブロック410においてインクリメントされ、取り込みに戻る。上記仮定が正しくなかった場合は、当該分岐はなされるべきでなかったことになり、投機的に処理された分岐に沿う全てのバイトコードは、ブロック495においてBCC及びスタックレジスタポインタを再設定することにより逆転される。もし必要なら、VMI120及びCPU110のパイプラインがブロック495において浄化される。
【0032】
SMS履歴190は制御値が入力される際に常にリセットされる。何故なら、分岐条件が解明され、かくして如何なる投機的処理も確認又は除去するからである。
【0033】
ブロック470において、VMI120が分岐条件の満足に関して仮定を行わないと決定する場合、VMI120は、ブロック485において制御値の入力をチェックすることにより、実際の制御値が入力されるまで待つ。SMSはオフのままなので、ブロック486はブロック485に戻り、制御値が入力されるまでチェックを継続する。制御値が入力されると、当該方法はブロック487に進み、そこにおいて、当該分岐条件が評価される。該制御値が分岐条件は満たされたことを示す場合、当該バイトコードシーケンスの実行の間において何の投機も生じていないので、当該方法はブロック495に進み、そこでは、CBI330により求められたジャンプを反映するためにBCCが更新され、次いでブロック410においてバイトコードの取り込みに戻る。上記制御値が分岐条件は満たされなかったことを示す場合、当該方法はブロック410に戻り、バイトコードの取り込みに復帰する。このようにして、VMI120が仮定を行わないと決定すると、VMI120はCBI330を通常のように処理する(分岐条件が満たされる場合にのみ、分岐を行う)。
【0034】
上述したように、分岐条件の満足に関して仮定を行うべきかの判断は、下記に示すように、実施される分岐予測方法に基づくものとなる。
【表1】
【0035】
本発明の第1実施例において、VMI120は、後方分岐はなされ、前方分岐はなされないと仮定するような投機的実行方法を使用する。第2の代替実施例において、VMI120は、後方分岐のみを投機的に実行し、前方分岐に関しては仮定を行わない。第3の代替実施例において、VMI120は、全ての分岐がなされると仮定するような一層単純な投機的実行方法を使用する。更に、第4の代替実施例によれば、VMI120は、分岐予測方法を使用して、分岐がなされるべきかを決定する。上述した実施例の何れによっても、投機的実行は容易に逆転が可能なバイトコードに対してのみ進行する。
【0036】
本発明の第1実施例によれば、VMI120はCBI330により示される分岐条件の結果に関する仮定を常に行うが、投機はCBI330により求められる分岐のタイプに基づかせる。CBI330が前方分岐を求める(BCCオフセット>0)場合、VMI120は分岐条件が満足されないと仮定し、容易に反転可能である限り、非分岐バイトコードシーケンスの処理を投機的に継続する。CBI330が後方分岐を求める(BCCオフセット<0)場合、VMI120は分岐条件が満足されると仮定し、容易に逆転可能である限りにおいて、分岐バイトコードシーケンスを投機的に処理する。
【0037】
本発明の第2実施例によれば、VMI120は、CBI330が後方分岐を求める場合にのみ、CBI330により示される分岐条件の結果に関する仮定を行う。CBI330が前方分岐を求める場合、VMI120は分岐条件を通常のように処理する。即ち、VMI120は制御値の入力を待ち、それに従ってバイトコードの適切なシーケンスを処理する。
【0038】
本発明の第3実施例においては、CBIに出会った場合に常に分岐がなされるように投機する。RISCコードを処理する場合、この投機的実行方法は時間の約70%となる。何故なら、分岐は通常はループの最下部で生じ、ループは典型的には繰り返して実行されるからである。該分岐予測は、VMIの全体としてのRISCコード処理性能を約35%改善する。アムダールの法則によれば、ジャバコードを処理する場合、この簡単な予測はバイトコード処理速度を7〜20%上昇させるであろう。分岐予測及び投機的処理を使用して、分岐のオーバーヘッドは、ネイティブに実行するCPUと比較して10〜20サイクルから約2〜4サイクルに減少させることができる。第3実施例の態様によれば、VMI120が分岐条件は満足されたと仮定する場合、VMI120は分岐オフセットを反映するためにバイトコードカウンタBCCを更新し、該オフセットアドレスからの取り込みを開始し、該VMIのパイプラインを回復する。仮定が正しい場合、当該分岐を処理するために要する時間は約5サイクルに低減される。しかしながら、本発明のこの実施例による分岐予測が処理時間を全ての分岐に関して約3なるファクタにより低減する(14又は15サイクルから)と結論することはできない。何故なら、全ての分岐のうちの約10%はキャッシュミスに終わるからである。
【0039】
第4実施例においては、各CBI330を処理するために、何れかの既知の分岐予測方法がVMI120との組み合わせで使用される。
【0040】
本発明のシステム及び方法の利点の多くを述べたが、当業者であれば他の利点もあることを認識するであろう。例えば、最適なバス利用のために、CPU110はネイティブ命令をバースト(典型的には、少なくとも4サイクルからなる)で読み取る。従って、CPU110は、制御値をVMI120に戻す前に、全バーストを読み取らねばならない。VMI120は、制御値取出コマンドを含むバーストを充填するために幾つかのNOPを発生して、該VMI120が投機的分岐を処理する間にCPU110が該取出コマンドを処理することを保証しなければならない。本発明の利点は、VMI120が、CPUバーストを満たすためにプロセッサ時間をNOPにより占有しなければならないというよりは、各命令の効果を逆転することができる限りにおいて投機的シーケンス320から次の命令を投機的にディスパッチすることによりCPU110及びVMI120のパイプラインを意味のある命令で満たし続ける点にある。
【0041】
上記の点から、本発明が条件付き分岐仮想マシン命令を正確且つ効率的に処理するシステム及び方法を提供することが理解されるだろう。しかしながら、上記は本発明の実施例にのみ関するものであって、添付請求項に記載された本発明の趣旨及び範囲から逸脱すること無しに種々の変更をなすことができると理解されるべきである。
【図面の簡単な説明】
【0042】
【図1】図1は、本発明の環境の実施例の機能的エレメントを示すブロック図である。
【図2】図2は、典型的なCPUパイプラインにおける命令の処理を示す概念図である。
【図3】図3は、一例としてのバイトコード処理シーケンスを示す。
【図4】図4は、本発明の一実施例による方法のフローチャートである。
Claims (18)
- 仮想マシン命令を処理する方法において、該方法が、
処理が条件制御変数の値に条件的に依存するような仮想マシン命令の部分集合を識別するステップと、
一連の仮想マシン命令を取り込むと共に、これら仮想マシン命令をプロセッサにより実行可能なネイティブ命令へと処理するステップであって、前記一連の仮想マシン命令における仮想マシン命令を処理し、実行のために前記プロセッサにディスパッチした後に仮想マシン命令カウンタがインクリメントされ、当該ステップを前記仮想マシン命令の部分集合のメンバに出会うまで継続するようなステップと、
前記メンバに出会うと、該メンバにより表されるネイティブ命令を実行のために前記プロセッサにディスパッチすることにより制御値取出処理を開始するステップと、
前記条件制御変数の実際値の仮定値に関して仮定がなされた場合に仮想マシン命令の投機的シーケンスを処理するステップであって、該投機的シーケンスを、
投機モードスイッチをオンに切り換え、
前記条件制御変数の前記実際値が入力されるまで、前記仮想マシン命令の投機的シーケンスにおける各仮想マシン命令をネイティブ命令へと処理するために前記仮定値に従って前記仮想マシン命令カウンタを更新し、前記各仮想マシン命令が処理された後に前記仮想マシン命令カウンタをインクリメントすると共に前記ネイティブ命令をディスパッチし、
前記実際値を前記仮定値と比較し、
前記実際値が前記仮定値と等しくない場合に、前記仮想マシン命令の投機的シーケンスの処理を元に戻し、投機モード履歴を除去し、前記仮想マシン命令カウンタの前記更新を元に戻すか、又は
前記実際値が前記仮定値に等しい場合に、前記投機モードスイッチをオフに切り換えると共に、前記投機モード履歴を除去する、
ことにより処理するようなステップと、
前記条件制御変数の実際値の仮定値に関して仮定がなされない場合に、前記一連の仮想マシン命令の更なる取り込み及び処理を前記条件制御変数の前記実際値が入力されるまで遅らせ、次いで次の仮想マシン命令を該実際値に従って処理するステップと、
を有することを特徴とする方法。 - 請求項1に記載の方法において、前記一連の仮想マシン命令を取り込み及びプロセッサにより実行可能なネイティブ命令へと処理するステップが、仮想マシンインタプリタ(VMI)の仮想マシンハードウェアアクセラレータによりなされることを特徴とする方法。
- 請求項1に記載の方法において、前記仮想マシン命令の投機的シーケンスを処理するステップが、
前記投機的シーケンスの各仮想マシン命令を、該仮想マシン命令が容易に元に戻すことができるものである場合にのみ処理するステップと、
次の仮想マシン命令がスタック操作を表していない場合は、前記仮想マシン命令の投機的シーケンスの処理を、前記条件制御変数の実際値が入力されるまで保留するステップと、
を有していることを特徴とする方法。 - 請求項3に記載の方法において、前記投機的シーケンスの処理を保留するステップが、前記条件制御変数の実際値が入力されるまで、前記プロセッサに対して一連の"ノーオペレーション"命令をディスパッチするステップを有していることを特徴とする方法。
- 請求項2に記載の方法において、前記条件制御変数の実際値の仮定値に関して仮定を行うべきかを決定するステップが、
識別された前記仮想マシン命令の部分集合の前記メンバにより求められる前記仮想マシン命令カウンタに対する変位を決定するステップと、
前記識別された仮想マシン命令の部分集合の前記メンバが前記仮想マシン命令カウンタの負の変位(オフセット<0)を求める場合に、前記条件制御変数の前記仮定値を分岐条件が満たされることを示すように設定するステップと、
を有していることを特徴とする方法。 - 請求項5に記載の方法において、前記識別された仮想マシン命令の部分集合の前記メンバが前記仮想マシン命令カウンタの正の変位(オフセット>0)を求める場合に、前記条件制御変数の前記仮定値を前記分岐条件が満たされないことを示すように設定するステップを更に有していることを特徴とする方法。
- 請求項5に記載の方法において、前記識別された仮想マシン命令の部分集合の前記メンバが前記仮想マシン命令カウンタの正の変位(オフセット>0)を求める場合に、前記条件制御変数の前記実際値に関して仮定を行わないステップを更に有していることを特徴とする方法。
- 請求項2に記載の方法において、前記条件制御変数の実際値の仮定値に関して仮定を行うべきかを決定するステップが、前記条件制御変数の前記仮定値を分岐条件が満たされることを示すように設定するステップを更に有していることを特徴とする方法。
- 請求項2に記載の方法において、前記条件制御変数の実際値の仮定値に関して仮定を行うべきかを決定するステップが、前記条件制御変数の前記仮定値を分岐予測方法に従って設定するステップを更に有していることを特徴とする方法。
- 請求項2に記載の方法において、前記条件制御変数の実際値の仮定値に関して仮定を行うべきかを決定するステップが、前記条件制御変数の前記仮定値を投機的実行方法に従って設定するステップを更に有していることを特徴とする方法。
- 仮想マシン命令を処理する方法において、該方法が、
一連の仮想マシン命令を取り込むと共に、これら仮想マシン命令をプロセッサにより実行可能なネイティブ命令へと処理するステップであって、当該ステップを条件付き分岐命令に出会うまで継続するようなステップと、
前記条件付き分岐命令に出会うと、該条件付き分岐命令により表されるネイティブ命令を前記プロセッサに実行のためにディスパッチすることにより制御値取出処理を開始するステップと、
条件制御変数の値に関して仮定を行うかを決定するステップと、
前記条件制御変数の値に関して仮定が行われた場合に、仮想マシン命令の投機的シーケンスを処理するステップであって、該投機的シーケンスを、
前記仮想マシン命令の投機的シーケンスにおける仮想マシン命令を、該仮想マシン命令が容易に元に戻すことが可能である場合にのみ、予備的ネイティブ命令へと処理し、
該仮想マシン命令がスタック操作を表さない場合に、前記仮想マシン命令の投機的シーケンスの処理を前記条件制御変数の値が入力されるまで保留する、
ことによって処理するステップと、
前記条件制御変数の値に関して仮定がなされない場合に、前記一連の仮想マシン命令の更なる取り込み及び処理を前記条件制御変数の値が入力されるまで遅らせ、次いで次の仮想マシン命令を該入力された値に従って処理するステップと、
を有することを特徴とする方法。 - 請求項11に記載の方法において、前記仮想マシン命令の投機的シーケンスを処理するステップが、
前記入力された条件制御変数の値を仮定値と比較するステップと、
前記条件制御変数の値が前記仮定値と等しくない場合に、前記仮想マシン命令の投機的シーケンスの処理を元に戻すと共に、投機モード履歴を除去するステップと、
前記条件制御変数の値が前記仮定値と等しい場合に、投機モードスイッチをオフに切り換えると共に、前記投機モード履歴を除去するステップと、
を更に有することを特徴とする方法。 - 仮想マシン命令を処理する装置において、
ネイティブ命令セットを有すると共にネイティブ命令を実行するように構成されたプロセッサと、
仮想マシン命令を記憶するように構成された命令メモリと、
前記命令メモリから仮想マシン命令を取り込むと共に該取り込まれた仮想マシン命令を前記プロセッサにより実行可能なネイティブ命令へと処理し、条件付き仮想マシン命令を識別し、前記プロセッサにより条件制御変数の値が送られつつある間に仮想マシン命令を投機的に処理すべきかを決定し、これら投機的に処理された仮想マシン命令を前記条件制御変数が入力された際に確認するか又は元に戻すように構成されたプリプロセッサと、
を有し、前記プリプロセッサが、更に、
前記プロセッサから入力された前記条件制御変数の値を記憶するように構成された制御レジスタと、
処理されるべき次の仮想マシン命令を示すように構成された仮想マシン命令カウンタと、
仮定された制御変数の値を記憶するように構成された仮定変数レジスタと、
当該プリプロセッサが前記条件制御変数の値に関して仮定を行ったかを示すように構成された投機モードビットと、
前記条件制御変数の値が送られつつある間に投機モードビットを記憶するように構成された投機モード履歴と、
を有していることを特徴とする装置。 - 請求項13に記載の装置において、前記プリプロセッサが仮想マシンインタープリタ(VMI)の仮想マシンハードウェアアクセラレータであることを特徴とする装置。
- 請求項13に記載の装置において、前記プリプロセッサは、容易に元に戻すことができる仮想マシン命令のみを投機的に処理し、容易に元に戻すことができない仮想マシン命令に出会った場合は仮想マシン命令の投機的シーケンスの処理を前記条件制御変数の値が入力されるまで保留するように更に構成されていることを特徴とする装置。
- 請求項15に記載の装置において、前記プリプロセッサは、投機的処理が保留されている間において、且つ、前記条件制御変数の値が入力されるまで、一連の"ノーオペレーション"命令をディスパッチするように更に構成されていることを特徴とする装置。
- 請求項15に記載の装置において、前記プリプロセッサは、スタック操作を表すような仮想マシン命令のみを投機的に処理し、スタック操作でない仮想マシン命令に出会った場合は仮想マシン命令の投機的シーケンスの処理を前記条件制御変数の値が入力されるまで保留するように更に構成されていることを特徴とする装置。
- 請求項17に記載の装置において、前記プリプロセッサは、投機的処理が保留されている間において、且つ、前記条件制御変数の値が入力されるまで、一連の"ノーオペレーション"命令をディスパッチするように更に構成されていることを特徴とする装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP01402545 | 2001-10-02 | ||
PCT/IB2002/003646 WO2003029961A1 (en) | 2001-10-02 | 2002-09-09 | Speculative execution for java hardware accelerator |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005504390A true JP2005504390A (ja) | 2005-02-10 |
Family
ID=8182907
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003533105A Pending JP2005504390A (ja) | 2001-10-02 | 2002-09-09 | ジャバハードウェアアクセラレータ用の投機的実行 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7243350B2 (ja) |
EP (1) | EP1442363A1 (ja) |
JP (1) | JP2005504390A (ja) |
KR (1) | KR20040045467A (ja) |
CN (1) | CN1266591C (ja) |
WO (1) | WO2003029961A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009069960A (ja) * | 2007-09-11 | 2009-04-02 | Nec Electronics Corp | 分岐予測装置、分岐予測方法、及びマイクロプロセッサ |
JP2021509743A (ja) * | 2018-01-03 | 2021-04-01 | エイアールエム リミテッド | 推測バリア命令 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7747989B1 (en) | 2002-08-12 | 2010-06-29 | Mips Technologies, Inc. | Virtual machine coprocessor facilitating dynamic compilation |
US7380242B2 (en) * | 2003-05-14 | 2008-05-27 | Mainsoft Israel Ltd. | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes |
US7401202B1 (en) | 2004-09-14 | 2008-07-15 | Azul Systems, Inc. | Memory addressing |
US9928071B1 (en) | 2008-05-02 | 2018-03-27 | Azul Systems, Inc. | Enhanced managed runtime environments that support deterministic record and replay |
US10698708B2 (en) * | 2009-08-04 | 2020-06-30 | International Business Machines Corporation | Optimizing just-in-time compilation in a network of nodes |
US9152437B2 (en) * | 2010-10-28 | 2015-10-06 | Hewlett-Packard Development Company, L.P. | Dynamically installing image processing |
US9342432B2 (en) | 2011-04-04 | 2016-05-17 | International Business Machines Corporation | Hardware performance-monitoring facility usage after context swaps |
US8868886B2 (en) | 2011-04-04 | 2014-10-21 | International Business Machines Corporation | Task switch immunized performance monitoring |
CN102902581B (zh) | 2011-07-29 | 2016-05-11 | 国际商业机器公司 | 硬件加速器及方法、中央处理单元、计算设备 |
US20130055033A1 (en) | 2011-08-22 | 2013-02-28 | International Business Machines Corporation | Hardware-assisted program trace collection with selectable call-signature capture |
US9836316B2 (en) * | 2012-09-28 | 2017-12-05 | Intel Corporation | Flexible acceleration of code execution |
CN103294518B (zh) * | 2012-12-31 | 2016-04-27 | 北京北大众志微系统科技有限责任公司 | 一种解释器中间接跳转预测方法及系统 |
US9934041B2 (en) | 2015-07-01 | 2018-04-03 | International Business Machines Corporation | Pattern based branch prediction |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4477872A (en) * | 1982-01-15 | 1984-10-16 | International Business Machines Corporation | Decode history table for conditional branch instructions |
EP0150177A1 (en) * | 1983-07-11 | 1985-08-07 | Prime Computer, Inc. | Data processing system |
US4764861A (en) * | 1984-02-08 | 1988-08-16 | Nec Corporation | Instruction fpefetching device with prediction of a branch destination for each branch count instruction |
JPH0769818B2 (ja) * | 1984-10-31 | 1995-07-31 | 株式会社日立製作所 | デ−タ処理装置 |
JPH0789319B2 (ja) * | 1985-04-22 | 1995-09-27 | 株式会社日立製作所 | デ−タ処理装置における先行制御装置 |
US4853840A (en) * | 1986-01-07 | 1989-08-01 | Nec Corporation | Instruction prefetching device including a circuit for checking prediction of a branch instruction before the instruction is executed |
JP2603626B2 (ja) * | 1987-01-16 | 1997-04-23 | 三菱電機株式会社 | データ処理装置 |
US5228131A (en) * | 1988-02-24 | 1993-07-13 | Mitsubishi Denki Kabushiki Kaisha | Data processor with selectively enabled and disabled branch prediction operation |
US5136696A (en) * | 1988-06-27 | 1992-08-04 | Prime Computer, Inc. | High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions |
CA2045791A1 (en) * | 1990-06-29 | 1991-12-30 | Richard Lee Sites | Branch performance in high speed processor |
US5450560A (en) * | 1992-12-21 | 1995-09-12 | Motorola, Inc. | Pointer for use with a buffer and method of operation |
US5454117A (en) * | 1993-08-25 | 1995-09-26 | Nexgen, Inc. | Configurable branch prediction for a processor performing speculative execution |
US6093213A (en) * | 1995-10-06 | 2000-07-25 | Advanced Micro Devices, Inc. | Flexible implementation of a system management mode (SMM) in a processor |
US6341348B1 (en) * | 1998-12-03 | 2002-01-22 | Sun Microsystems, Inc. | Software branch prediction filtering for a microprocessor |
US6332215B1 (en) * | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
JP3513038B2 (ja) * | 1998-12-10 | 2004-03-31 | 富士通株式会社 | 命令フェッチ制御装置 |
US6338133B1 (en) * | 1999-03-12 | 2002-01-08 | International Business Machines Corporation | Measured, allocation of speculative branch instructions to processor execution units |
US6990658B1 (en) * | 1999-10-13 | 2006-01-24 | Transmeta Corporation | Method for translating instructions in a speculative microprocessor featuring committing state |
US6854048B1 (en) * | 2001-08-08 | 2005-02-08 | Sun Microsystems | Speculative execution control with programmable indicator and deactivation of multiaccess recovery mechanism |
-
2002
- 2002-09-09 KR KR10-2004-7004874A patent/KR20040045467A/ko not_active Application Discontinuation
- 2002-09-09 CN CNB028194012A patent/CN1266591C/zh not_active Expired - Fee Related
- 2002-09-09 WO PCT/IB2002/003646 patent/WO2003029961A1/en not_active Application Discontinuation
- 2002-09-09 EP EP02762700A patent/EP1442363A1/en not_active Withdrawn
- 2002-09-09 JP JP2003533105A patent/JP2005504390A/ja active Pending
- 2002-09-27 US US10/259,704 patent/US7243350B2/en not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009069960A (ja) * | 2007-09-11 | 2009-04-02 | Nec Electronics Corp | 分岐予測装置、分岐予測方法、及びマイクロプロセッサ |
JP2021509743A (ja) * | 2018-01-03 | 2021-04-01 | エイアールエム リミテッド | 推測バリア命令 |
JP7406489B2 (ja) | 2018-01-03 | 2023-12-27 | アーム・リミテッド | 推測バリア命令 |
Also Published As
Publication number | Publication date |
---|---|
WO2003029961A1 (en) | 2003-04-10 |
US7243350B2 (en) | 2007-07-10 |
CN1561481A (zh) | 2005-01-05 |
EP1442363A1 (en) | 2004-08-04 |
KR20040045467A (ko) | 2004-06-01 |
US20030084271A1 (en) | 2003-05-01 |
CN1266591C (zh) | 2006-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5917616B2 (ja) | 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置 | |
US8935515B2 (en) | Method and apparatus for vector execution on a scalar machine | |
JP3615770B2 (ja) | アドレスされた構成部分の思索の失敗を検出するメモリ・コントローラ | |
JP2744890B2 (ja) | ブランチ予測式データ処理装置および動作方法 | |
EP2864868B1 (en) | Methods and apparatus to extend software branch target hints | |
JP3776132B2 (ja) | マイクロプロセッサの改良 | |
JP2005504390A (ja) | ジャバハードウェアアクセラレータ用の投機的実行 | |
CN101884025B (zh) | 用于使过程返回序列加速的方法和系统 | |
EP1853995B1 (en) | Method and apparatus for managing a return stack | |
KR101048258B1 (ko) | 가변 길이 명령 세트의 브랜치 명령의 최종 입도와 캐싱된 브랜치 정보의 관련 | |
US8250344B2 (en) | Methods and apparatus for dynamic prediction by software | |
KR20120064446A (ko) | 컴퓨팅 시스템 상의 바이트코드의 분기 처리 장치 및 방법 | |
KR100571326B1 (ko) | 프로그램 루프를 병렬로 처리하기 위한 방법 및 장치 | |
CN110704108B (zh) | 解释执行字节码指令流的方法及装置 | |
Fog | How to optimize for the Pentium family of microprocessors | |
JP2005506630A (ja) | 低オーバヘッドの例外チェック |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050908 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080916 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090310 |