(57)【特許請求の範囲】
【請求項１】
ホスト・マイクロプロセッサによって用いられ、ターゲット・プロセッサのためのターゲット命令セットから、前記ホスト・マイクロプロセッサのための命令シーケンスに命令シーケンスを変換する方法であって、
前記ターゲット・プロセッサの状態がわかっている命令実行時点において、前記ターゲット・プロセッサの状態をコミットし、既に実行された命令シーケンスによって発生したメモリ・ストアを格納することによって、ターゲット命令の第１のシーケンスの実行を開始するステップと、
直ちに状態をコミットし、メモリ・ストアを格納することによって、前記ターゲット命令の第１のシーケンスからの分岐に続く、ホスト命令の投機的シーケンスの実行を開始するステップと、
前記ターゲット・プロセッサの状態がわかっている前記ターゲット命令の実行における別の時点まで、前記ホスト命令の投機的シーケンスの実行を試みるステップと、
実行に失敗した場合、前記ターゲット・プロセッサの最後にコミットされた状態にロールバックし、前記ホスト命令の投機的シーケンスによって発生したメモリ・ストアを破棄するステップと、
実行が成功した場合、ターゲット命令の次のシーケンスの実行を開始するステップと、
から成る方法。
【請求項２】
請求項１記載の方法であって、前記ターゲット・プロセッサの状態をコミットし、既に実行された変換シーケンスによって発生したメモリ・ストアを格納した直後に、ロック状態で実行しているいずれのホスト命令シーケンスのロックも解除する追加ステップを含む方法。
【請求項３】
ホスト・マイクロプロセッサによって用いられ、ターゲット・プロセッサのためのターゲット命令セットから、前記ホスト・マイクロプロセッサのための命令シーケンスに命令シーケンスを変換する方法であって、
前記ターゲット・プロセッサの状態がわかっている命令実行時点において、前記ターゲット・プロセッサの状態をコミットし、既に実行された命令シーケンスによって発生したメモリ・ストアを格納することによって、ターゲット命令の第１のシーケンスの実行を開始するステップと、
前記ターゲット・プロセッサの状態をコミットし、前記ターゲット・プロセッサの状態がわかっている前記ターゲット命令の変換における別の時点までに実行によって既に発生したメモリ・ストアを格納した直後に開始する、前記ターゲット命令の第１のシーケンスからのホスト命令シーケンスを実行するステップと、
前記ターゲット命令の実行において状態がわかっている時点において、前記ターゲット・プロセッサの状態をコミットし、前記ターゲット命令の第１のシーケンスの実行によって発生するメモリ・ストアを格納することによって、ターゲット命令の次のシーケンスの実行を開始するステップと、
前記ターゲット・プロセッサの状態をコミットし、前記ターゲット命令の実行において前記ターゲット・プロセッサの状態がわかっている別の時点までに前記ターゲット命令の第１のシーケンスの実行によって発生したメモリ・ストアを格納した直後に開始する、ターゲット命令の次のシーケンスからのホスト命令シーケンスを実行するステップと、
から成る方法。
【請求項４】
ホスト・マイクロプロセッサによって用いられ、ターゲット・プロセッサのためのターゲット命令セットから、前記ホスト・マイクロプロセッサのための命令シーケンスに命令シーケンスを変換する方法であって、
ターゲット命令の変換において前記ターゲット・プロセッサの状態がわかっている点から、ターゲット命令の第１のシーケンスからのホスト命令の第１の投機シーケンスを変換するステップと、
ターゲット命令の分岐シーケンスに分岐し、
前記ターゲット・プロセッサの状態をコミットし、ホスト命令の分岐シーケンスを実行する前に行われた分岐後に前記第１の変換シーケンスによって発生したメモリ・ストアを格納する、
ことによって、前記ターゲット・プログラムにおける第１シーケンスからの分岐に遭遇したことに応答して、前記ターゲット命令の第１のシーケンスを終了するステップと、
実行に失敗した場合、前記ターゲット・プロセッサの最後にコミットした状態にロールバックし、前記ホスト命令の投機シーケンスによって発生したメモリ・ストアを破棄することによって、
分岐が前記第１シーケンスから行われない場合、前記ターゲット命令の第１のシーケンスの実行を終了するステップと、
前記ターゲット・プロセッサの状態がわかっている前記ターゲット命令シーケンスの終点において、前記ターゲット・プロセッサの状態をコミットし、前記第１シーケンスによって発生したメモリ・ストアを格納するステップと、
から成る方法。
【発明の詳細な説明】
【０００１】
（発明の背景）
発明の分野
本発明は、コンピュータ・システムに関し、更に特定すれば、ターゲット命令セットからホスト命令セットに命令を動的に変換し、変換した分岐動作にて投機を行うマイクロプロセッサの動作効率を高める方法に関する。
（従来技術の説明）
最近、単純であるが高速のホスト・プロセッサ（「モーフ・ホスト」と呼ぶ）とソフトウエア（「コード・モーフィング・ソフトウエア」と呼ぶ）とを組み合わせ、モーフ・ホスト・プロセッサとは異なる命令セットを有するプロセッサ（「ターゲット・プロセッサ」）用に設計したアプリケーション・プログラムを実行する新たなマイクロプロセッサが開発された。モーフ・ホスト・プロセッサは、コード・モーフィング・ソフトウエアを実行し、ターゲット・プログラムを、元のターゲット・ソフトウエアの目的を達成することができるモーフ・ホスト・プロセッサ命令に動的に変換する。ターゲット命令を変換する際、新たなホスト命令を実行しつつ、変換バッファにも格納する。変換バッファ内に格納されたホスト命令は、更に変換を行わずにアクセスすることができる。プログラムの初期変換は低速であるが、一旦変換されれば、プログラムを実行するために従来技術のハードウエアで通常必要となるステップの多くは不要となる。新たなマイクロプロセッサは、単純で高速な低電力プロセッサが、変換した「ターゲット」命令を、プログラムを設計した対象である「ターゲット」プロセッサと同等の速度で実行可能であることを実証した。
【０００２】
他のプロセッサのために設計されたプログラムを高速に実行可能とするために、モーフ・ホスト・プロセッサは、多数のハードウエア強化を含む。これらの強化の１つに、ゲート付きストア・バッファ（ｇａｔｅｄ ｓｔｏｒｅ ｂｕｆｆｅｒ）があり、ここに一連のモーフ・ホスト命令を実行する際に発生するメモリ・ストアを保持する。第２の強化は、変換されているターゲット命令のどのシーケンスでも、その先頭においてターゲット・プロセッサの状態を格納する、１組のホスト・レジスタである。変換されたモーフ・ホスト命令が、例外を発生することなく実行した場合、命令シーケンスの先頭におけるターゲット状態を、シーケンスが完了した時点におけるターゲット状態に更新し、メモリ・ストアはメモリに記憶される。
【０００３】
変換されたホスト命令シーケンスの実行中に例外が発生した場合は、処理を停止し、ターゲット・プロセッサの状態がわかっている、ターゲット命令シーケンスの先頭に、動作全体を戻す、即ち、ロールバックすればよい。これによって、命令を動的に変換および実行しつつ、非常に高速で精度の高い例外処理が可能となる。
【０００４】
実行が成功裏に完了するまで一時記憶ユニットに結果を置いておくことによって、新たなマイクロプロセッサが変換の実行を処理する際に用いる方法は、実際上高速な推定方法であることが注目される。実際に、新たなマイクロプロセッサは、他の動作の成果（ｏｕｔｃｏｍｅ）を推定するのと同じ回路を用いる。例えば、単純に変換された命令シーケンスから、ソフトウエア・スケジューラによって並び替えられた命令シーケンスの実行結果を一時的に保持することによって、従来技術が企図したものよりも一層強力な並び替えを行うことができる。このように並び替えられた命令シーケンスを実行して正しい結果を得た時、並び替えたシーケンスの実行によって生じたメモリ・ストアをメモリに記憶することができ、ターゲット状態を更新することができる。並び替えたシーケンスが、実行中に、例外を発生した場合、プロセッサの状態は、シーケンスの先頭におけるターゲット状態にロールバックし、より保守的な手法を採用してシーケンスの変換を行う。
【０００５】
新たなマイクロプロセッサの最も有効な特徴の１つは、変換され、例外を発生することなく実行できることが見出された短いターゲット命令シーケンスをより長い命令シーケンスを形成するために共にリンクできることにある。これによって、変換されたプログラムを非常に高速で実行することが可能となる。何故なら、マイクロプロセッサは、より短い変換されたシーケンスの各々を調べる必要もなければ、ハードウエア・プロセッサが命令を実行するために通常行うステップの全てを経る必要もないからである。予測したよりも更に高い速度を達成する場合もある。何故なら、一旦長いシーケンスをリンクすれば、多くの場合、最適化器は、生成される結果を変更することなく、ステップの多くを排除することが可能となるからである。ハードウエアの最適化器は、（ループのように）際だった最適化を可能にするパターンを顕在化させることができるほど長い命令シーケンスの最適化をこれまで全くできなかった。
【０００６】
新たなプロセッサによって用いられていた元の投機方法は、正しく実行された命令シーケンスの終了時、そして次のターゲット命令シーケンスを変換する前にはいつでも、ゲート付きストア・バッファからストアをメモリに記憶し、新たな状態をターゲット・レジスタに転送することによって、常にターゲット・プロセッサの状態を更新していた。この状態更新方法は、多くの状況で効果的である。
【０００７】
しかしながら、この方法には、ある状況では有用性が低下するという、ある特性がある。先ず、大抵の場合できるだけ長いシーケンスを実行することが望ましい。コミットの間に長い命令シーケンスを得るためには、コミット命令が直後にない、１つ以上の分岐命令を含むことが必要となる場合が多い。これが生ずるのは、コード・モーフィング・ソフトウエアが、殆ど常時分岐が行われると判断し、大抵の場合実行時の通常のパスとして選択されるものとして分岐を扱うことを決定した場合である。コード・モーフィング・ソフトウエアは、これが、選択されるパスであると推定し、一層の最適化を行うことができる、より長いシーケンスを得るために、分岐命令後のコミット命令を省略する。しかしながら、分岐が行われる前に、ターゲット・プロセッサの状態がコミットされる各内部分岐命令直後のコミット命令がないので、内部分岐が発生した後、シーケンスの実行中のある時点において例外が発生した場合、ターゲット・プロセッサの正しい状態が存在する最後の時点である、当該分岐命令に先立つ最初のシーケンスの開始まで、機械の動作をロールバックさせなければならない。これは、非常に時間がかかる可能性がある。
【０００８】
第２に、ホスト命令シーケンスについて投機を行いつつストアをメモリに記憶する元の命令が有用なのは、実行を加速するためには、できるだけ長い変換を行うことが望ましいからである。しかしながら、命令シーケンスは、コミット命令が続かないシーケンス内部において分岐が生じた結果であることもあり得る。この場合、命令シーケンスは非常に長くなり、投機を行うために用いられるゲート付きストア・バッファの有限の長さでは、メモリ・ストアの数が多過ぎてしまう。このため、実行が中断し、ロールバックが起こり、より短い命令シーケンスが発生し、プロセスの実行が遅くなる。
【０００９】
変換したシーケンスの終了時にストアをメモリに記憶する、この元の方法によって生じる別の問題が、望ましい結果を生成するためにシーケンスのある部分のステップ全てを、割込なく、順次実行しなければならない場合に発生する。入出力動作は、このようなシーケンスの一例となる場合が多い。このような場合、シーケンスが終了するまで、割込をロックアウトするのが通例である。しかしながら、最適化の効果を全て実現するためには、シーケンスの終了時にロックアウトを解除しなければならない。しかしながら、コミットを行わずにロックを解除することはできない。何故なら、シーケンスのロック段階において試みられ、ロックによって遅れる非同期割込が生ずる場合が有り、わかっている最後の正しい状態まで実行をロールバックさせることになるからである。このために、入出力のような動作を繰り返すことになり、システムのシマンティックス（ｓｙｍａｎｔｉｃｓ）を犯す恐れがある。
【００１０】
命令シーケンスを変換することによって、新たなマイクロプロセッサの速度を維持または向上させる新たな方法を改善、提供することが望ましい。
（発明の概要）
したがって、本発明の目的は、他のマイクロプロセッサのために設計されたアプリケーション・プログラムを実行可能なマイクロプロセッサによる実行を加速することである。
【００１１】
本発明のこの目的およびその他の目的は、ホスト・マイクロプロセッサによって用いられ、ターゲット・プロセッサのためのターゲット命令セットから、ホスト・マイクロプロセッサのための命令シーケンスに命令シーケンスを変換する方法によって実現される。この方法は、ターゲット・プロセッサの状態をコミットし、ターゲット・プロセッサの状態がわかっているターゲット命令実行時点において、実行によって既に発生しているメモリ・ストアを格納することによって、ターゲット命令の第１のシーケンスの実行を開始するステップと、ターゲット・プロセッサの状態がわかっているターゲット命令の実行における別の時点まで、ホスト命令の投機的シーケンスを実行するステップと、実行に失敗した場合、ターゲット・プロセッサの最後にコミットされた状態にロールバックし、ホスト命令の投機的シーケンスによって発生したメモリ・ストアを破棄するステップと、実行が成功した場合、ターゲット・プロセッサの状態をコミットし、以前に発生したメモリ・ストアを格納することによって、ターゲット命令の次のシーケンスの実行を開始するステップとから成る。
【００１２】
本発明のこれらおよびその他の目的ならびに特徴は、以下に続く詳細な説明を、図面と併せて参照することによってよりよく理解されよう。図面においては、いくつかの図を通じて同様の要素を同様の符号で示すこととする。
（詳細な説明）
これより図１を参照すると、命令シーケンスの実行を記載した図が示されている。図の左下にあるキーが、図の記号に対する定義を与えている。矢印で終わる直線は、実行中である、変換された命令の単一シーケンスを表す。円はコミット動作を表す。本発明以前では、新たなマイクロプロセッサを用いて命令シーケンスを実行する際、点１０における命令シーケンスの先頭から実行し、点１１におけるその終点まで続け、この時点でコミット動作が行われるというのが通例であった。これを、「開始」から始まり、「コミット」まで直線的に下方向に続く、左最上部のシーケンスで表す。このような短いシーケンスを実行する際、（ターゲット動作の状態がわかる最後の点である）「開始」点直前に存在する動作の様々な状態が記録される。シーケンスの実行が、点１１を超えたコミット動作で完結すると、コミット点における必要とされる動作の状態がセーブされる。
【００１３】
分岐動作を含む短い命令シーケンスにおいて、シーケンスの終点で分岐が発生した場合、ターゲット・プロセッサの適正な状態は、分岐シーケンスの実行が行われる直前にコミットされる。その結果、いずれの分岐において発生した例外でも、分岐シーケンスの実行が開始する直前の正しい状態が存在するコミット点まで動作をロールバックさせるという効果を有する。
【００１４】
しかしながら、ターゲット命令のシーケンスにおいて、コミット動作を行わずに、分岐動作の実行を開始することが可能である。例えば、変換および最適化ソフトウエアは、１つの分岐が殆ど常に受け入れられると推定し、その方向を、命令シーケンスの通常の方向と見なす。このような場合、ソフトウエアは、出口点（ｅｘｉｔ ｐｏｉｎｔ）において存在する状態がコミットされないシーケンスを作成する場合がある。点１０において開始し、点１２において第２シーケンスへの分岐を行う、図の左上にあるシーケンスが、このようなシーケンスである。このようなシーケンスでは、分岐以前にコミット動作が行われない。何故なら、変換ソフトウエアは、点１０から点１１へのシーケンスが恐らく大抵の場合実行されると判断し、実行を加速するためにコミットを省略するからである。
【００１５】
シーケンスが分岐動作を含み、このような場合に分岐動作が行われた場合、実行は、分岐においてコミット動作を行わずに、第２シーケンスに分岐し、分岐シーケンスは、その先頭の命令（例えば、点１３）において実行を開始する。コミットが生ずる可能性がある最も早い点は、分岐シーケンスの終結である点１４である。しかし、この分岐シーケンスもその終了前に分岐動作を含み、（図１のはるか右側にある第３シーケンスにおけるように）この分岐が行われる場合、このコミットさえも行われない。このため、コミットが行われる前に、変換シーケンスが無限の長さとなる可能性があることが認められよう。
【００１６】
実行シーケンスにおける中間点において分岐が行われると、変換パスがこのようにコミット点間で過度に長くなる可能性があるので、最終的にコミット点に到達したときには、未だコミットが行われていないメモリ・ストアの数が過大となっている場合もある。実際、実行されるストア命令の数が、ゲート付きストア・バッファ内の格納余裕よりも大きい場合もある。これが発生すると、データを欠落させないことを保証するための対策を行わなければならない。したがって、変換器および最適化器は、変換シーケンスの中間において分岐を置く際に、より保守的とならざるを得なかった。このために、実際に生成された最適化コードの実行が、更に遅くなった。
【００１７】
旧プロセスによって生じた第２の問題は、ターゲット状態がコミットされていない点において実行されている命令シーケンスに多数の分岐があり、多数の命令が実行された後のある点において、実行中に障害が発生した場合、コミットが行われた最終点にロールバックする以前の命令の実行と、その点から再度変換を行うのに、大量の時間が浪費されることである。
【００１８】
変換されたシーケンスの終点においてストアをメモリに記憶するというこの元の方法によって生ずる別の問題が、シーケンスのある部分のステップ全てを、割込なく、順次完了し、望ましい結果を生成しなけらればならないという場合に発生する。入出力動作は、このようなシーケンスの一例となる場合が多い。このような場合、シーケンスが終了するまで、割込をロックアウトするのが通例である。しかしながら、最適化の効果を全て実現するためには、シーケンスの終了時にロックアウトを解除しなければならない。しかしながら、コミットを行わずにロックを解除することはできない。何故なら、シーケンスのロック段階において企図された非同期割込は、ロックによって遅れた場合には常に、わかっている最後の正しい状態まで実行をロールバックさせることになるからである。このために、入出力のような動作を繰り返すことになり、システムのシマンティックス（ｓｙｍａｎｔｉｃｓ）を犯す恐れがある。
【００１９】
本発明は、元のプロセスのこれらの問題を未然に防ぐ。図２は、本発明のプロセスを利用した、１組のリンクした変換シーケンスを示す。この新たなプロセスでは、新たなシーケンスの先頭において、いずれかのターゲット命令の実行が行われる前に、コミット命令が、以前に正しく実行された変換済み命令シーケンスによって発生したあらゆるメモリ・ストアを含む、動作の現状態を格納する。したがって、以前のシーケンスが分岐命令を含むとき、この分岐が行われて新たな命令シーケンスに至る場合、新たな命令シーケンスは、コミット動作から開始する。分岐が行われない場合、シーケンスがその終点まで継続し、終了時点においてターゲット・プロセッサの状態がわかる。この時点で、新たなシーケンスの実行が開始されて、まずコミット命令が行われ、既知の状態をコミットし、直前のシーケンスの実行によって発生したメモリ・ストアを格納する。
【００２０】
新たなプロセスは、正しい結果を生成する。分岐点において終了した命令シーケンスの後に存在するターゲット・プロセッサの状態が、分岐を行う決定の後で、次の変換済み命令シーケンスの実行開始直前に、コミットされる。分岐に続いて変換される新たな命令シーケンスに到達しているためには、直前の命令シーケンスをエラーなく新たなマイクロプロセッサによって実行していなければならない。直前の命令シーケンスが正しく実行されなかった場合、実行しようとすると割込が発生し、ロールバックの原因となる。更に、ホストは分岐シーケンスの命令を変換し始める分岐にはいない。その結果、変換済み命令が正しく実行され、実行によって発生する新たなターゲット状態およびメモリ・ストアをコミットすることができる。
【００２１】
新たなプロセスは多数の利点を有する。第１に、コミット点間で発生するいずれのストア・シーケンスの長さでも、最後のコミットが行われた最初の点からの単一の変換における最も長い個々の命令シーケンスと同じ長さに抑えることができる（例えば、図２において点２０から点２１）。したがって、ストア・シーケンスは有限である。これによって、ゲート付きストア・バッファ内に位置し得る、コミットされていないストア数を厳密に制御することが可能となり、ストア・バッファのオーバーフローは殆ど起こらない。
【００２２】
第２に、分岐が行われるときにはいつでも分岐に続く次の命令シーケンスの実行開始時にコミットが行われるので、コミットされない分岐動作はなくなる。したがって、例外が発生し、分岐が行われた後にロールバック動作が必要となる場合、プロセッサが行った作業量は破棄される。破棄しなければならないストアの数は、制限される。このため、ロールバックに伴う遅延が大幅に低減する。
【００２３】
また、新たなプロセスは、望ましくないロールバック動作を発生せずに、またロック下における処理モードを無限期間に延長することなく、ロック動作を開始し、解除することができる。図３は、正しく実行するためには１組の命令をロックの下で実行しなければならない部分を含む、いくつかの変換済み命令のシーケンスを示す。ロックを開始するために、変換器はロック命令を発生する。この時点からシーケンスが分岐命令に到達するまで、プロセスは、並び替えや最適化を行わずに、順番に命令を変換する（ロックが開始される前に検査され得るもの以外）。プロセスをロックから解放しなければならない分岐において、分岐の１つを行う。分岐を行った後、いずれのパスに従っても、新たなシーケンスが実行を開始するときにコミットが行われる。コミット動作は、当該コミットの時点においてわかっている状態をセーブするので、ロールバックによって正しい変換が破棄されることはない。次いで、選択した分岐がロック解除命令を実行し、命令を順次実行する必要性からシーケンスを解放する。命令の分岐シーケンスの残り部分の実行は、この時点から継続する。
【００２４】
ロックを必要とするシーケンスが完了し次第ロック解除を確実に行うために、動作のロック状態の指示を、各コミット毎に、状態と共に格納する。一実施形態では、この指示は、単一ビットであり、ホスト・プロセッサのコンテキスト・レジスタに格納される。このロック指示は、シーケンスの開始時に決定され、シーケンス中存在する状態を示す。このロック指示は、他の動作状態（ターゲット状態を含む）と共に利用され、次のコミット点において、次に続く命令シーケンスを決定する。即ち、次のシーケンスは、ロック状態を終了させるためにロック解除命令を与え、順番に次に行うことができるシーケンスとしての適格性を得なければならない。実行を次に実行可能な分岐のいずれもが、この形態でなければならない。
【００２５】
前述のプロセスおよび好適な実施形態の態様を組み合わせることによって、好適な方法以外の処理方法を利用することが可能である。例えば、図４は、２つのプロセスの特徴を組み合わせ、ある利点を得るプロセスを示す。図示のプロセスは、命令シーケンスの終了時に行われるコミットを、ロック動作を含む命令シーケンスのために利用する。他の命令シーケンスは全て、本発明のように、動作の開始時にコミットする。割込不可能な部分を含む命令シーケンスは、大抵の場合、シーケンスの命令を順番に実行しなければならないため、殆どの最適化が妨げられる。したがって、シーケンスの順序を変更することはできないが、追加のコミットをシーケンスに付加することはできる。何故なら、これらはロックされたシーケンスを変化させないからである。シーケンスの終点にコミットを置き、次いでロックを除去することによって、ロックに関係する状態を単一の命令シーケンス内に収容することができる。これは、変換のシーケンスに対する状態を、割込不可能な動作に対して局在的に扱うことを可能にするという利点がある。他の変換された動作シーケンスは、前述のように実行され、前述の効果が得られる。
【００２６】
以上、好適な実施形態に関して本発明を説明したが、本発明の精神および範囲から逸脱することなく、種々の変更や変形も当業者によって可能であることが認められよう。したがって、本発明は、特許請求の範囲に関して判断されるべきである。
【図面の簡単な説明】
【図１】図１は、新たなプロセッサの以前のバージョンにおいて実施されていた命令変換方法を示す図である。
【図２】図２は、本発明にしたがって、新たなマイクロプロセッサにおいて実施した命令変換方法を示す図である。
【図３】図３は、本発明にしたがって、新たなマイクロプロセッサにおいて実施した命令変換方法を示す別の図である。
【図４】図４は、本発明にしたがって、新たなマイクロプロセッサにおいて実施した別の命令変換方法を示す別の図である。
【図１】
0003626139.tif 000002
【図２】
0003626139.tif 000003
【図３】
0003626139.tif 000004
【図４】
0003626139.tif 000005