(57)【特許請求の範囲】
【請求項１】
ターゲット命令セットからホスト命令セットに命令を変換するコンピュータ内において動作条件を変更する方法であって、
前記コンピュータの構成要素内で発生するイベントを監視するステップと、
前記監視されているイベントを生ずる、変換されたホスト命令のシーケンスを実行するステップと、
選択した間隔内で発生するイベントをカウントするステップと、
前記選択した間隔内におけるイベントの合計が、既定の限度を超過した場合、例外を発生するステップと、
前記例外に応答して、変換したホスト命令シーケンスを変更するステップと、
から成る方法。
【請求項２】
請求項１記載の方法において、前記イベントはロールバックであり、前記変換したシーケンスを変更するステップは、前記シーケンスを破棄することである方法。
【請求項３】
請求項１記載の方法において、
前記イベントは、最小限の最適化の効果が用いられる変換中に挿入されたｎｏｐの実行を示し、最初の変換したホスト命令シーケンスを変更するステップは、より大きな最適化効果を用いる再変換である方法。
【請求項４】
請求項１記載の方法において、前記イベントは、被保護メモリに対する書き込みの試行から生ずる例外を示す方法。
【請求項５】
請求項１記載の方法において、前記イベントは、変換を最適化する際におけるスケジューリング・エラーから生ずる例外を示す方法。
【請求項６】
請求項１記載の方法において、前記選択した間隔は、時間間隔である方法。
【請求項７】
請求項１記載の方法において、前記選択した間隔は、命令の数である方法。
【請求項８】
請求項１記載の方法において、前記イベントはプログラム可能である方法。
【請求項９】
請求項１記載の方法において、前記イベントは、複数のイベントの組み合わせである方法。
【発明の詳細な説明】
【０００１】
（発明の背景）
発明の分野
本発明は、コンピュータ・システムに関し、更に特定すれば、ターゲット命令セットからホスト命令セットに命令を動的に変換し、変換した動作について推定を行うマイクロプロセッサの動作効率を高める方法に関する。
従来技術の説明
最近、単純であるが非常に高速のホスト・プロセッサ（「モーフ・ホスト」と呼ぶ）とソフトウエア（「コード・モーフィング・ソフトウエア」と呼ぶ）とを組み合わせ、モーフ・ホスト・プロセッサの命令セットとは異なる命令セットを有する「ターゲット・プロセッサ」用に設計したアプリケーション・プログラムを実行する新たなマイクロプロセッサが開発された。モーフ・ホスト・プロセッサは、コード・モーフィング・ソフトウエアを実行し、アプリケーション・プログラムを、元のターゲット・ソフトウエアの目的を達成することの出来るモーフ・ホスト・プロセッサ命令に動的に変換する。ターゲット命令を変換する際、新たなホスト命令を実行しつつ、変換バッファにも格納する。変換バッファ内に格納されたホスト命令は、更に変換を行わずにアクセスすることができる。プログラムの初期変換は低速であるが、一旦変換されれば、プログラムを実行するためにハードウエアで通常必要となるステップの多くは不要となる。新たなマイクロプロセッサは、単純で高速な低消費電力設計のプロセッサが、変換した「ターゲット」命令を、プログラムを設計した対象である「ターゲット」プロセッサと同等の速度で実行可能であることを実証した。
【０００２】
他のプロセッサのために設計されたプログラムを高速に実行可能とするために、モーフ・ホスト・プロセッサは、多数のハードウエア強化を含む。これらの強化の１つに、ホスト・プロセッサと変換バッファとの間に有るゲート付きストア・バッファ(gated store buffer)がある。第２の強化は、変換されているターゲット命令の任意のシーケンスの先頭におけるターゲット・プロセッサの既知の状態を格納する、（通常のワーキング・レジスタに追加された）１組のホスト・レジスタである。モーフ・ホスト命令のシーケンスを実行する際に発生するメモリ・ストアは、ゲート付きストア・バッファ内に置かれる。モーフ・ホスト命令が、例外を生成することなく実行した場合、命令シーケンスの先頭におけるターゲット状態を、変換された命令シーケンスが完了した時点におけるターゲット状態に更新し、メモリ・ストアはメモリに記憶される。
【０００３】
ホスト命令シーケンスの実行中に例外が発生した場合は、処理を停止し、ターゲット・プロセッサの状態がわかっている、命令シーケンスの先頭に、動作全体を戻す。これによって、非常に高速で精度の高い例外処理が可能となり、この結果は従来の技術では全く達成されなかった。
【０００４】
変換の実行が成功裏に完了するまで一時記憶ユニットに実行によって生成された結果を置いておくことによって、新たなマイクロプロセッサが変換の実行を処理する際に用いる方法は、実際上非常に高速な推定方法であることが注目される。実際に、新たなマイクロプロセッサは、他の動作の成果(outcome)を推定するのと同じ回路を用いる。例えば、単純に変換された命令から、ソフトウエア・スケジューラによって並び替えられた命令シーケンスの実行結果を一時的に保持することによって、従来技術が企図したものよりも一層強力な並び替えを行うことができる。このように並び替えられた命令シーケンスを実行して正しい結果を得た時、並び替えたシーケンスの実行によって生じたメモリ・ストアをメモリに記憶することができ、ターゲット状態を更新することができる。並び替えたシーケンスが、実行中に、例外を発生した場合、プロセッサの状態は、シーケンスの先頭におけるターゲット状態にロールバックし、より保守的な手法を採用してシーケンスの変換を行う。
【０００５】
新たなマイクロプロセッサの最も有効な特徴の１つは、変換された命令の長いシーケンスを共にリンクできることにある。一度短いターゲット命令シーケンスが変換され、例外を発生することなく実行できることが見出されると、命令の長いシーケンスを形成するために、多数のこれらの短いシーケンスを共にリンクすることが可能である。これによって、変換されたプログラムを非常に高速で実行することが可能となる。何故なら、マイクロプロセッサは、ハードウエア・プロセッサが命令を実行するために通常行う（より短い変換されたシーケンスの各々を調べるような）ステップの全てを経る必要がないからである。予測したよりも更に高い速度を達成する場合もある。何故なら、一旦長いシーケンスをリンクすれば、多くの場合、最適化器は、生成される結果を変更することなく、長いシーケンスからステップの多くを排除することが可能となるからである。ハードウエアの最適化器は、際だった最適化を可能にするパターンを顕在化させることができるほど長い命令シーケンスをこれまで全く扱えなかった。
【０００６】
この新たなプロセッサに伴って、わずかな回数しか実行されない命令シーケンスに関する問題が発生した。例えば、特定のアプリケーション・プログラムの動作を開始するために必要な命令は、多くの場合、そのアプリケーションが最初にコールされるときにのみ実行される。また、アプリケーションの動作を終了させるために必要な命令は、多くの場合、そのプログラムを実際に終了させるときにのみ実行される。新たなプロセッサの元の実施形態では、全ての命令を同様に扱うのが通例であった。ターゲット命令をデコードし、ターゲット命令を設計した対象である機能を実行する原始ホスト命令を生成し、ホスト命令のシーケンスを最適化し、次いで変換し最適化した命令を変換バッファに格納する。新たなプロセッサの動作が進むに連れて、変換された命令のシーケンスを互いにリンクし合い、更に最適化する。リンクされた命令の更に長いシーケンスが変換バッファに格納される。最終的には、変換された命令の大きなブロックが、ホスト命令のスーパーブロックとして格納される。特定のホスト命令またはリンクされた命令セットの実行中に例外が発生した場合、新たなプロセッサは、ターゲット・プロセッサの最後の正しい状態にロールバックするプロセスを遂行し、次いで最後の正しい状態の時点から、例外が再度発生する時点まで、ターゲット命令のステップ毎の変換を行う。これらの変換も変換バッファに格納される。新たなプロセッサのこの実施態様は、１９９８年１１月３日に発行され、本発明の譲受人に譲渡された、Kelly等の米国特許第５，８３２，２０５号に詳しく記載されている。
【０００７】
このプロセスは、迅速に実行するコードを作成するが、このプロセスは達成可能な総合的な高速化を制限し、その上別の望ましくない効果の原因となり得る多数の効果を有する。第１に、このプロセスは、変換した命令のためにかなりの量の記憶容量を必要とする。多くの場合、多数の異なる変換が同じ１組のターゲット命令に対して存在する。何故なら、シーケンスには異なる分岐から入るからである。一旦格納されると、変換された命令は、何か積極的な理由のために除去されるまで、この変換バッファを占有する。第２に、ある命令シーケンスの実行がほんの数回だけの場合、変換および最適化に要する時間は、最初のターゲット命令のステップ毎の変換を実行するために必要な時間よりも大幅に長い場合がある。ほとんど使わない変換された命令のシーケンスの最適化は、新たなプロセッサの平均速度を低下させる。
【０００８】
これらの理由のために、説明された新たなプロセッサの実施態様を変更して、コード・モーフィング・ソフトウエアの一部として、ターゲット命令の各々のステップ毎の変換を行うインタープリタ(interpreter)を含ませるようにした。インタープリタは本質的にターゲット命令をフェッチし、命令をデコードし、ターゲット命令の目的を達成するホスト・プロセスを与え、このホスト・プロセスを実行する。１つのターゲット命令のインタープリット(interpret)および実行を終了すると、ターゲット・プロセッサの状態が更新され、インタープリタは次のターゲット命令に進む。このプロセスは、本質的に、ターゲット命令のインタープリットおよび実行による単一ステップである。インタープリタによって生成されたホスト命令は、変換バッファには格納されないのが通例であるので、最適化、リンクおよびリンク後に得られる更なる最適化は行われない。インタープリタは、ターゲット命令シーケンスの残りについて、このプロセスを継続する。
【０００９】
一般に、いずれの命令シーケンスでも、ある回数の実行に至らない内に、以前のインタープリットおよび実行の全てに必要な時間が、当該シーケンスを変換し最適化するために必要な時間と等しくなることがわかった。結果的に、アプリケーションの実行中ほとんど用いられない命令シーケンスは、単にインタープリットする方が、変換するよりも高速に実行する場合が多い。
【００１０】
この利点を活用するために、改良型プロセッサを変更し、ターゲット命令シーケンスに最初に遭遇したときにはいつでもインタープリタを利用するようにした。インタープリタ・ソフトウエアは、ターゲット命令シーケンスを実行する回数を追跡するカウンタと連動する。インタープリタの実行は、シーケンスに遭遇する毎に、これが例外を発生することなくある回数実行され終わるまで、行うことができる。ある選択された回数だけターゲット命令のシーケンスをインタープリットし実行し終えると、コード・モーフィング・ソフトウエアは、インタープリタからトランスレータに、そしてそれに伴う最適化および格納プロセスに切り替える。これを行うときは、十分な回数の実行が既に行われており、命令シーケンスの更なる実行が行われ、格納されている最適化変換によって、全体的にアプリケーションの実行を著しく高速化できることがほぼ確実である。
【００１１】
コード・モーフィング・ソフトウエアが通常の変換プロセスに切り替わると、変換は最適化され変換バッファに格納される。その後、この変換は更に最適化され、他の変換とリンクすることができるので、このようなプロセスから、非常に高速化した実行を得ることが可能となる。
【００１２】
特定の命令シーケンスが実行された回数に加えて、統計を収集するためにインタープリタを利用する場合、追加の大きな利点を得ることができる。例えば、シーケンスが分岐を含む場合、この命令の分岐する先のアドレスを、分岐が実行された回数と共に記録するとよい。次いで、インタープリタがある回数シーケンシャル命令を実行したとき、分岐動作および分岐アドレスの履歴を構築することができる。これらの統計は、特定の命令シーケンスが、変換済み命令のスーパーブロックになる確率が高いか否かについて推定する際に利用することができる。選択した回数だけインタープリットした後、シーケンスを変換し、最適化し、別個のリンク動作を全て実行する必要なく、種々の分岐を通じてリンクし、そして変換バッファに格納することができる。推定が真となった場合、命令の処理において大幅な時間節約となる。真ではない場合、単にこの動作は例外を発生し、コード・モーフィング・ソフトウエアをインタープリタに戻す。
【００１３】
インタープリタは、頻繁に用いないシーケンスに対してホスト・コードを生成する際に有用なだけでなく、例外を処理する際にも利用される。変更したプロセッサが、いずれかの変換されたターゲット・アプリケーションを実行している間に、ターゲット例外に遭遇したときはいつでも、コード・モーフィング・ソフトウエアは、ターゲット・プロセッサの最後のわかっている正しい状態まで、ロールバックさせる。次いで、コード・モーフィング・ソフトウエアはトランスレータではなくインタープリタを利用して、新たな１組のホスト命令を与える。インタープリタは、ターゲット命令の生成および実行を通じて単一のステップを実行し、各命令をインタープリットするに連れて、ターゲットの状態を更新していく。
【００１４】
インタープリタは、例外が再度発生するまで、ターゲット命令のシーケンスを通してこのプロセスを継続する。例外が発生した時点では、ターゲット・プロセッサの状態は、インタープリットの状態に対して正しいので、例外を正しく能率的に処理することができる。インタープリット・プロセスは非常に単純なので、ターゲット例外の発生点を判定するプロセスは、前述の変換および最適化プロセスを全て実行し次いで変換バッファに格納する変換プロセスによって実行したときにかかる点を判定するよりもはるかに速い。更に、インタープリットは、変換バッファに格納されこのバッファを溢れさせる原因となる、余分なホスト命令シーケンスを発生しない。
【００１５】
インタープリタを、変換された命令シーケンスのダイナミック・コンパイラとして機能する最適化トランスレータと結合することにより、コード・モーフィング・ソフトウエアは、新たなプロセッサによるターゲット・アプリケーションの実効速度向上に対する制約の多くを排除する。インタープリタを用いて命令シーケンスの早期実行を処理することによって、アプリケーションの実行中ほとんど用いられない命令シーケンスを最適化する必要性をなくし、これによって動作速度を向上させる。これらほとんど用いられない命令シーケンスを変換バッファに格納する必要性の排除により、ストレージの必要量が減少し、変換された多くの命令を破棄する必要性もなくなる。インタープリタを用いて例外を処理することによって、トランスレータを用いる場合と同じ有用な効果を得ることができ、しかも動作を高速化し、ストレージの要求量が減少する。
【００１６】
前述の新たなプロセッサの改良された実施態様は、R. Bedichek等の"Method For Integration Of Interpretation And Translation In A Microprocessor"（マイクロプロセッサにおけるインタープリットおよび変換の統合方法）と題し、本願と同日に出願され、本発明の譲受人に譲渡された米国特許出願第 号に詳しく記載されている。
【００１７】
最近になって、前述のプロセッサを更に変更し、インタープリタおよびトランスレータの利用度を高めるようにした。これは、２つよりも多い動作モードを設けることによって達成した。一旦完了し最適化された変換は、変換の前にシーケンスが頻繁に用いられていても、広く用いられることはないということは多くの場合真であるので、追加の動作モードは、単なるインタープリットと最適化された変換との間に設けられる。例えば、ターゲット命令シーケンスは、最初に、ある回数だけインタープリタによって実行し、次いで最小の最適化で変換され、変換バッファに格納することができる。変換されたシーケンスは動作可能であり、インタープリットが行うよりも高速に実行する。しかしながら、十分な時間が割り振られている場合、それは、より広い範囲に対して最適化出来る可能性がある。とりわけ、他のシーケンスにリンクすることによって、シーケンスを更に最適化するか否か判断するために、第２の検査を走らせることができる。この検査は、システムが効率的に走っていることを判定するために、本質的に、インタープリットまたは変換プロセスにおいて費やした時間量を観察する。
【００１８】
このように多数の変換レベル、およびレベル間で移動するための異なる検査を備えることによって、改良型プロセッサの動作を大幅に強化する。新たなプロセッサのこの改良実施形態は、本願と同日に出願され、本発明の譲受人に譲渡された、Torvalds等のMethod Of Changing Modes Of Code Generation（コード発生モード変更方法）と題する米国特許出願第 号に詳しく記載されている。
【００１９】
インタープリタとトランスレータの種々の組み合わせによって、前述の独特なプロセッサの動作を著しく改善するものの、動作においていくつかの問題点が残っている。これらの問題は、一般的に種々の利用可能な機能を最適に利用することができないことと言うことができる。この一例は、内部分岐を含む命令のシーケンスを、特定の分岐が生ずるという推定に基づいて変換するときに発生する。シーケンスを変換すると、他の可能な分岐よりもはるかに多くの場合、この分岐を一貫して選択(take)することができる。しかしながら、状況が変化して、変換を最適化した分岐よりも、別の分岐の方がより多くの場合選択される場合もある。これが起こり得るのは、分岐を制御するデータが変化する場合があるため、あるいは起動または遮断機能中に用いられるプロセスが、プログラムの通常動作中に用いられる場合とは異なって機能するためである。このような場合、元の変換はなおも完全に動作するが、間違った分岐を優先するように最適化されている。シーケンスを最適化した分岐以外の分岐を選択すると、変換がロールバックし、インタープリタを利用してホスト命令のシーケンス・セットを与えることになる。変換を実行するよりも多くこれが発生すると、全体的なプロセッサ速度が著しく低下する。
【００２０】
しかしながら、変換は変換バッファ内に留まっている。変換はなおも完全に動作し、後にアプリケーションを走らせる際に用いることができる。変換バッファは、正しく実行する新たな変換各々を格納し続ける。ある数の新しい変換を与えた後、変換バッファは満杯となり、格納できる新たな変換を制限することになる。このため、改良型プロセッサの動作が遅くなる。
【００２１】
コード・モーフィング・ソフトウエアのインタープリタ・ソフトウエアおよびトランスレータ・ソフトウエアの使用を制御するプロセスを変更してこれらのプロセスが改良型プロセッサの動作中にに経験する状態変化に応答するようにすることにより、改良型マイクロプロセッサの動作速度を向上させ、より迅速に実行するようにすることが望ましい。
（発明の概要）
したがって、本発明の目的は、他のマイクロプロセッサのために設計されたアプリケーション・プログラムおよびオペレーティング・システムと互換性があり、これらをより高速に走らせることができ、しかも一層高速なマイクロプロセッサを提供することである。
【００２２】
本発明のこの目的およびその他の目的は、ターゲット命令セットからホスト命令セットに命令を変換するコンピュータ内において動作条件を変更する方法であって、コンピュータの構成要素内で発生するイベントを監視するステップと、選択した間隔内で発生するイベントをカウントするステップと、選択した間隔内におけるイベントの合計が既定の限度を超過した場合、例外を発生するステップと、例外に応答して、変換したホスト命令シーケンスを変更するステップとから成る方法によって達成される。
【００２３】
本発明のこれらおよびその他の目的ならびに特徴は、図面と共に以下に続く詳細な説明を参照することによって、一層良く理解されよう。図面においては、いくつかの図を通じて同様の要素を同様の符号で示すこととする。
（詳細な説明）
先に説明したように、変換は、少なくとも２種類の異なる挙動を呈する場合があり、全体的な処理速度を向上させるためにはこれらの挙動を改善することが望ましい。命令シーケンスが下手に変換されるとすれば、それは変換の時点において、より高度に最適化すべきであると判定するのに十分な経験がなかったからである。このような変換は、単に遅いだけでなく、多数のロールバックを発生するので、恐らく変換を破棄し、やり直す必要がある。一方、変換が初期段階では完全に変換され、良好に最適化されていたとしても、状況が変化し、最適化条件がもはや存在しないということも考えられる。したがって、このような変換も、処理速度を維持するために望ましいよりも遥かに多くのロールバックを誘発している。
【００２４】
本発明によれば、コンピュータの動作条件を動作中に評価し、得られた結果を用いて、実行している変換を修正する。一実施形態では、変換がコンピュータの動作を著しく遅くしている場合、この変換を破棄し、プロセッサおよびそのコード・モーフィング・ソフトウエアがより効率的なホスト命令シーケンスを発生できるようにする。
【００２５】
一般的な提案として、選択する分岐を決定するために変換の個々のシーケンスをカウントし、かかる統計から、特定の変換に過度に多いロールバックが発生するときを判定することが出来る。例えば、図１のフロー・チャートに示すように、変換バッファ内のシーケンスのメモリ・アドレスを用いて、変換された命令の全シーケンスの実行を追跡することによって、ロールバックや分岐を生ずることなくシーケンスが実行する回数を判定することができる。選択されると予測した分岐を、変換が実行された回数と比較することによって、ロールバックのシーケンス実行に対する比率が得られる。この結果を用いて、過度に多いロールバックを発生させ、そのために全体的なシステム動作を遅くしている変換のシーケンスを破棄することができる。
【００２６】
しかしながら、この方法によってロールバックの影響を判定するには、大量のシステム資源が必要となる。各命令シーケンスにカウンタを割り当てるか、あるいはシーケンス間でカウンタを共有しなければならず、シーケンス毎、および分岐アドレスのために、そしてその分岐が行われる回数だけ、ストレージを用意しなければならず、比率を計算して、所望の値と突き合わせて検査しなければならない。いずれの現実的なサイズのプログラムでも、この手間はシステムにとって法外な負担となる。
【００２７】
このため、システム資源を殆ど全く必要とせず、しかも所望の結果を迅速且つ能率的に達成する、より良い方法を見出した。更に高度化したこの方法は、変換によって望ましくない結果が得られるこれらの問題双方を克服し、他の望ましい変更を変換において行わせる。本質的に、図２に示す方法は、ロールバックのような一部のシステム・イベントを直接追跡する。このイベントが、ある間隔の間にある既定回数よりも多く発生した場合、一層効率的に処理するように変換を修正する。ロールバック・イベントの場合、これは、変換された命令の第１のシーケンスを破棄し、その時点から常にインタープリットすることを意味する。何故なら、このシーケンスは実行される頻度が非常に低いからである。あるいは、これは、プロセスの実行中に出現する動作の新たな条件を満たすように、シーケンスを直ちに再変換し最適化することを意味することもある。
【００２８】
概して、本発明は、最小の資源を用いて獲得可能なシステム・イベントを利用する。容易に獲得可能なシステム・イベントを用いることによって、ハードウエアや処理時間のオーバーヘッドが殆どなく、本発明の望ましい結果を達成することができた。一例として、ロールバックが発生する回数は、実行される各ロールバック命令をカウントすることによって判定することができる。実行中の命令がロールバック命令であると判定するには、図３に示すように、各命令を、ロールバックを示す登録値と単純に比較するだけでよい。２つが同じであれば、イベント・カウントを発生する。他の多くのイベントも、同様に発生しカウントすることができる。
【００２９】
一部のイベントは、検査または他の目的のためのハードウエアにおいて既に利用できるのが通例である。例えば、タイミング・イベントは、システム・クロックをカウント・ダウンすることによって発生するのが通例である。
【００３０】
この高度化した方法は、既に監視されているイベントと共に用いるときが最も効率的であるが、本発明は、他のシステム・イベントにも容易に拡張することができる。その際、単に、他のイベント・カウンタを追加し、本発明において教示するように、カウンタによって生成された結果を利用すればよい。この目的のためのハードウエアは、追加のオーバーヘッドを殆ど要さない。
【００３１】
本発明によれば、ある間隔の間に発生する、特に選択したイベントの数をカウントし、選択したいずれのイベントであっても最大よりも多い場合、この事実を用いて、当該イベントの原因となった変換に変更を実施する。例えば、ロールバック・イベントの場合、ある選択した間隔内においてロールバックの数をカウントする。この間隔内で過度に多いロールバックがある場合、一実施形態では、限度を超える数のロールバックの原因となった変換シーケンスを破棄する。
【００３２】
ロールバックの制限数は、ロールバック毎に破棄される命令数を判定し、ロールバック毎の実行時間の平均損失を求めることによって、確定することができる。この平均値から、ロールバックが占める時間の、実行に費やされる全時間に対する所望の百分率を計算することができる。ある場合では、全実行時間の２パーセント未満の百分率を選択した。この値は、ロールバック・イベントの数を合計し、その和が前述の値を超過したか否か判定する間隔を単に延長または短縮することによって、いずれの望ましい値にも設定することができる。間隔が許容出来る値にセットされた時、合計がこの値を上回ると、限度を超えてこの値を増分させた、変換されたシーケンスを破棄する。
【００３３】
本発明の一実施形態では、破棄は、実行中の変換シーケンスを破棄する例外ハンドラを選択する例外を発生することによって実行される。尚、破棄される、変換された命令シーケンスは、実際には、多数のロールバックを発生させたシーケンスではない場合もあることを注記しておく。これは、単に、時々ロールバックを発生させるだけであるが、選択した間隔中に、ある数の他のロールバックに続いて偶然ロールバックを発生させたシーケンスである場合もある。しかしながら、有効な変換された命令シーケンスを破棄しても、実行速度の低下は殆どない。何故なら、シーケンスが非常に頻繁に用いられている場合、元の変換を同様に有効な変換で直ちに置換するからである。一方、ロールバック・カウントの蓄積の原因となった、機能が低い変換シーケンスは、同じプロセスによって間もなく破棄される。何故なら、このようなシーケンスは、いずれも、ロールバック・カウントの限度を超過させ、例外を発生し、変換を破棄させることになるシーケンスである可能性が非常に高いからである。一旦劣った変換を破棄したなら、まずインタープリットし、次いで新たな変換を発生し、後に新たな変換を広範に最適化して新たな動作条件を満たすプロセスが開始する。
【００３４】
イベント、特に、ロールバック・イベントのカウントを評価するために、本発明にしたがって利用可能な間隔には、少なくとも２種類ある。これらの間隔の１つは、時間間隔である。かかる間隔は、イベント・カウンタによって決定することができる。イベント・カウンタは、ある数のプロセッサ・サイクルがあったときにはいつでも出力を発生する。例えば、間隔は、最新のプロセッサによって、１秒の千分の１に選択することができる。ロールバックのようなイベントによって消費される全実行時間の百分率を測定するときに、いくらかより精度の高い結果を与える傾向がある別の種類の間隔は、選択した数の命令の実行に基づく間隔である。つまり、命令の実行を１つのイベントと見なすことができ、実行した命令数をある最大値までカウントし、間隔を決定する。間隔にこの尺度を用いると、ロールバック時間の百分率を判定する際に、各命令の実際の効果が考慮される。
【００３５】
本発明の方法を利用すると、多数の利点が得られる。第１に、ある間隔中に全てのロールバックをカウントし、変換シーケンスを破棄するか否か判定を行い、カウントが最大値を超える原因となったシーケンスを破棄すると、実際に実行しているシーケンスのみを破棄することができる。この方法は、走っていない変換に対しては、それが良くても悪くても、何の効果ももたらさない。この方法は、最大値を超過させた変換を単に破棄するに過ぎない。シーケンスをインタープリットし、変換し最適化する判定をする総合的な方法が、一旦シーケンスが破棄されたなら、それらの処理を制御する。シーケンスが破棄された後頻繁に実行されない場合、再変換する可能性は低く、広範に最適化する可能性は非常に低い。一方、最初の変換が破棄された後あるシーケンスが頻繁に実行される場合、新たな状況に合わせるために再変換し、かつ広範に最適化する可能性が非常に高い。
【００３６】
変換シーケンスに関する動的フィードバックを与えるために利用可能な他の種類のイベントは、並び替え誤り（reordering fault）によって発生する例外である。改良型プロセッサは、保護されているメモリ位置に対して書き込みを行おうとした場合に例外を発生する手段を含む回路を利用している。
【００３７】
保護されているメモリ位置に対する書き込みに対して例外を発生する回路は、改良型プロセッサの能力を高め、更に迅速に実行するコードを発生するために用いられる。この回路は、スケジューラに、障害を発生する確率が低いシーケンスの投機的変換を構成させる。これを行うには、スケジューラによって並び替えられた命令を、保護されているメモリ位置に格納し、被保護位置に書き込みを行おうとすると、例外を発生するようにする。被保護位置に書き込もうとして、変換が例外を発生した場合、ロールバックを行う。この技法は、１９９９年６月１４日に出願され、本発明の譲受人に譲渡された、G. Rozas等のMethod and Apparatus For Enhancing Scheduling In An Advanced Microprocessor（高度マイクロプロセッサにおいてスケジューリングを強化する方法および装置）と題する、米国特許出願第０９／３３２，３３８号に詳しく記載されている。
【００３８】
この種のメモリ保護例外の発生は、本発明にしたがって、正しい結果を得ることができないことが余りに多い変換を判定するために利用することができるイベントが与える。この種の例外は、変換が多くの場合成功するために、変換が間違っていることを必ずしも指示しないので、システムは、ある間隔でこれらの例外をカウントし、最大数よりも多くの例外が１０回発生する毎に、変換を破棄することもできる。変換が実際に非常に劣っており、この形式の例外を常時発生している場合、この変換は殆ど直ちに破棄される。そうでない場合、変換は同じ場所に留まり、希に例外を発生し続ける。この不適切な動作が多数回発生したときにのみ変換を破棄するという同じ方法を、本発明にしたがって、他のイベントと共に利用することもできる。
【００３９】
変換を修正可能な動的フィードバックを与えるために利用可能なイベントを与える別の動作に、「Ｔビット例外」と呼ばれるものがある。Ｔビットは、エントリと共に新たなプロセッサの変換ルックアサイド・バッファに置かれ、アドレスされたメモリ・ページが変換された命令を含むことを知らせる。Ｔビット例外が発生するのは、既にホスト命令に変換されたターゲット命令を保持するメモリ・ページに書き込みを行おうとしたときである。
【００４０】
Ｔビットの目的は、変換が発生されたターゲット命令が変化したときに、当該変換を削除することである。しかしながら、一部のターゲット・プロセッサ（特に、Intel X86ファミリ）では、メモリ・ページは変換された命令およびデータ双方を含むことができ、このページにデータを書き込むことは許されて当然である。このため、コード・モーフィング・ソフトウエアが、書き込みを行おうとしたメモリ・ページが、変換されたターゲット命令を格納するエリアか、またはデータ・エリアかについて判定を行うことができる、新たなプロセスを考案した。このプロセスを実行するには、メモリ・ページを小エリアに分割し、これら小エリアの各々が、変換された命令を含むか否かについての指示を格納する。Ｔビット例外が発生したときにはいつでもこれらの指示をチェックすることによって、書き込みがデータ・エリアに対する場合、ソフトウエアはＴビット例外を無効とし(override)、例外を無視することが出来る。しかしながら、特定のページがこれら例外を多数発生しており、その全てが抑えられると、十分なオーバーヘッドがその動作に対して生じるので、ページ全体を単に破棄し、構成を改善するために変換をし直す方が望ましい場合が多い。これを行うには、システムはＴビット例外をカウントし、ある数の障害（例えば、１００）が特定の間隔内で発生したときに、メモリ・ページ全体を破棄する。
【００４１】
本発明の使用によって、別の特に難しい問題を軽減することも可能となる。多くの場合、変換の最適化は最小限に抑えられる。何故なら、変換が行われる時点では、変換されるシーケンスの経験が殆どないからである。シーケンスが余り頻繁に用いられない場合、広範な最適化はコストがかかりすぎる。このような変換は、ロールバックが発生しないという意味では、完全に機能することができる。しかしながら、変換をより良く最適化すれば、大量の処理時間が節約できよう。
【００４２】
変換を最小限に最適化した場合、大抵の場合、変換されたシーケンスには、依存性を扱う等種々の目的のための異なる命令間で正しいタイミングを与えるために、「無動作」命令（「nop」）が挿入される場所が多くある。変換（例えば、命令シーケンスの最初の変換）に対して最小の最適化を採用すると決定した場合、通常のnop命令は、実際上最適化における最小の手間を示す「特殊なnop」に置換される。「特殊nop」の数をカウントし、ロールバック命令をカウントするのと同様に実行間隔中に合計すると、かかる特殊nopの選択した数よりも多い場合、変換したシーケンスを広範に最適化して、より良い実行時間を与えるべきであることが示される。
【００４３】
システム・イベントを利用して、改良型プロセッサが発生した変換を修正するか否か動的に判定する回路４０の一実施例を図４に示す。算術および論理ユニット（ＡＬＵ）４１、浮動小数点ユニット（ＦＰＵ）４２、バス・ユニット４３、およびメモリ・ユニット４４のように、本発明にしたがって利用するイベントを発生する、多数のシステム機能ユニットが示されている。特定的な実施形態では、カウンタ・ユニット４５まで４系統の個別信号経路（この数は、システムによっては大幅に変化することがある）が、これら機能ユニットの各々から設けられている。例えば、ＡＬＵ４１は、多くの異なる種類の命令に応じて、イベントを発生することができる。カウントするイベントを構成する命令（例えば、ロールバック命令または特殊nop命令）毎に、コマンドを示す命令の一部を、見つけようとする命令である値と比較する。例えば、ロールバック命令は、特定の値を有するある一意のビット・シーケンスを含む。命令の値は、数値レジスタに保持され、命令およびレジスタのビットが一致したとき、ロールバック・イベントを発生する（図３参照）。このイベントは、中央カウンタ・ユニット４５に送られる。中央カウンタ・ユニット４５は、異なるイベントに割り当てられた多数のカウンタ４７を含む。イベント自体がある種のカウントの結果である場合、別のこのようなカウンタ（図示せず）の方が、種々の機能ユニット内に配置するのに便利なこともある。また、カウンタ・ユニット４５は、選択ロジック４６によって定義された規則のネットワークも含み、これによって、カウントに対して異なる判断基準を用いることができる。例えば、ある他のイベント中に発生したロールバック・イベントをカウントすることもできる。ロールバックの問題については、イベント自体のみをカウントすることが必要なので、イベントを直接カウンタに送る。選択ロジックによって、システム・ソフトウエアは、変換の修正の原因となるイベントまたはイベントの組み合わせをプログラムすることが可能となる。別の実施形態では、イベントの他の組み合わせの結果の組み合わせを作成することもできる。例えば、２つのイベントが双方共存在し、２つの他のイベントが存在しない場合、結果を発生する。
【００４４】
本願と同日付けで出願され、本発明の譲受人に譲渡された、B.Coon等の米国特許出願第 号、Programmable Event Counter（プログラマブル・イベント・カウンタ）に詳細に記載されている回路の一実施形態では、選択ロジックは、以下の条件を入力イベントが満たすか否かについて判定するために検査を行うことができる回路を含む。
【００４５】
Ｘ，
Ｙ，
！Ｘ，
！Ｙ，
Ｘ＆Ｙ，
Ｘ｜Ｙ，
Ｘ＾Ｙ，
！（Ｘ＆Ｙ），
！（Ｘ＾Ｙ），
！（Ｘ）｜Ｙ，
Ｘ｜（！Ｙ），
Ｘ＆（！Ｙ），
！（Ｘ｜Ｙ），
ここで、使用したシンボルは、典型的なＣ言語のビット単位の操作子である。
【００４６】
特定の例外のようなその他のイベントも、同様にカウントすることができる。
同時に、プロセッサのサイクル数をカウントし、時間間隔を発生するタイミング・イベントを与える。あるいは、プロセッサが処理する命令数をカウントし、プロセッサの時間カウントを与えてもよい。これらのイベントは、いずれも、ロールバックまたは他のイベント・カウンタをリセットするために用いることができる。したがって、ロールバック・カウンタが、タイマまたはプロセッサ命令カウンタのいずれかによって設定された期間内にカウントしたロールバック・イベントが、ある選択した値未満である場合、ロールバック・カウンタをリセットし、何も行わない。しかしながら、タイマまたはプロセッサ命令カウンタがリセットを行う前に、ロールバック・カウンタが最大値までカウントした場合、例外を発生し、変換を破棄する。本発明を実施する他の回路も、当業者には自明であろう。
【００４７】
以上、好適な実施形態に関して本発明を説明したが、本発明の精神および範囲から逸脱することなく、種々の変更や変形も当業者によって可能であることが認められよう。したがって、本発明は、特許請求の範囲に関して判断すべきである。
【図面の簡単な説明】
【図１】  図１は、本発明による方法を示すフロー・チャートである。
【図２】  図２は、本発明による方法を示す別のフロー・チャートである。
【図３】  図３は、イベントの一種の検出を示す図である。
【図４】  図４は、本発明にしたがって設計された回路を示すブロック図である。
【図１】
0003844692.tif 000002
【図２】
0003844692.tif 000003
【図３】
0003844692.tif 000004
【図４】
0003844692.tif 000005