(57)【要約】      （修正有）【課題】先進のプロセッサのスケジューラが、加速した速度で実行するコードを発生することを可能にする回路およびソフトウェアを提供する。【解決手段】スケジューリング動作に対して規定された通常の制約を一部無視し、できるだけ速く実行するようにある命令を単純にスケジューリングし、スケジューリングがスケジューリング制約に違反した場合例外を発生し、例外を発生した各命令セットを正しく実行するために講ずる処置を決定することによって、より迅速に実行するコードをスケジューラ・ソフトウエアに生成させる装置および方法。【選択図】図６
2006099800.tif 000002
【特許請求の範囲】
【請求項１】
命令のスケジューリング及び実行の方法であって、
ａ）第１のアドレス範囲を含む第１のメモリ操作と、前記第１のアドレス範囲の少なくとも一部を含む第２のメモリ操作と、前記第１及び第２のメモリ操作に介入する第３のメモリ操作と、から成る命令のシーケンスをアクセスするステップであって、
前記第３のメモリ操作が前記第１のアドレス範囲内のアドレスを含むか否か知られておらず、前記第１乃至第３のメモリ操作の内の少なくとも１つがストア操作を含む、
アクセス・ステップと、
ｂ）前記命令のシーケンスから前記第２のメモリ操作を除去するステップと、
ｃ）前記第１のアドレス範囲を確定するために前記第３のメモリ操作に情報を付加するステップであって、
当該情報が複数のレジスタの内のどれが保護されたアドレスを保持しているかを確定するためのマスクから成る、
付加ステップと、
ｄ）前記第２のメモリ操作を除去して、前記命令のシーケンスを実行するステップと、
ｅ）前記実行中に、前記第３のメモリ操作が前記第１のアドレス範囲内のアドレスに影響を与えるか否かを決定し、もし影響を与えるなら、例外を発生して前記第２のメモリ操作を含む命令のシーケンスを再実行するステップと、
から成る方法。
【請求項２】
請求項１に記載の方法において、前記ステップｅ）が更に、前記実行中に、前記第３のメモリ操作が前記保護された任意のアドレスの範囲内のアドレスに影響を与えたか否かを決定するステップを含むことを特徴とする方法。
【請求項３】
請求項１に記載の方法において、更に、前記第１のアドレス範囲に関連するメモリ・アドレスを、前記命令シーケンスの実行前に、前記複数のレジスタの１つにストアするステップを含むことを特徴とする方法。
【請求項４】
請求項１に記載の方法において、更に、前記第１のアドレス範囲に関連するメモリ・アドレスを、前記命令シーケンスの実行前に、レジスタにストアするステップを含むことを特徴とする方法。
【請求項５】
請求項４に記載の方法において、前記命令のシーケンスが、前記第１の命令シーケンス以降の前記命令のシーケンス内にある第４のメモリ操作を含み、
更に、前記第４のメモリ操作が前記第１のアドレス範囲に影響を与えても例外の発生無しに当該第４のメモリ操作を実行することを許す第２の情報を、前記第４のメモリ操作に付加するステップを含む、
ことを特徴とする方法。
【請求項６】
請求項１に記載の方法において、前記第３のメモリ操作が介入しない場合、前記第１及び第２のメモリ操作を単一のメモリ操作に安全に縮小できることを特徴とする方法。
【請求項７】
命令のスケジューリング及び実行の方法であって、
ａ）第１のアドレス範囲からロードする第１のロード命令と、前記第１のアドレス範囲からロードする第２のロード命令と、前記第１及び第２のロード命令に介入するストア命令と、から成る命令のシーケンスをアクセスするステップであって、
前記ストア命令が前記第１のアドレス範囲内のアドレスにストアするか否か知られていない、
アクセス・ステップと、
ｂ）前記命令のシーケンスから前記第２のロード命令を除去するステップと、
ｃ）前記第２のロード命令無しに前記命令のシーケンスを実行する、前記第１のアドレス範囲に関するメモリ・アドレスを保護レジスタにストアすることを含むステップと、
ｄ）前記実行中に、前記ストア命令が前記第１のアドレス範囲内のアドレスにストアするか否かを決定し、もしストアするなら、例外を発生して前記第２のロード命令を含む命令のシーケンスを再実行するステップと、
から成る方法。
【請求項８】
請求項７に記載の方法において、前記ステップｂ）が更に、前記保護レジスタを示すために、前記ストア命令にフラグを付加するステップを含むことを特徴とする方法。
【請求項９】
請求項７に記載の方法において、前記ステップｂ）が更に、前記第１のロード命令をロード・アンド・プロテクト命令に変更するステップを含むことを特徴とする方法。
【請求項１０】
命令のスケジューリング及び実行の方法であって、
ａ）第１のアドレス範囲への第１のストア命令と、前記第１のアドレス範囲への第２のストア命令と、前記第１及び第２のストア命令に介入するロード命令と、から成る命令のシーケンスをアクセスするステップであって、
前記ロード命令が前記第１のアドレス範囲に影響を与えるか否か知られていない、
アクセス・ステップと、
ｂ）前記命令のシーケンスから前記第１のストア命令を除去するステップであって、前記ロード命令に関連するメモリ・アドレスを保護レジスタにストアするステップを含むステップと、
ｃ）前記第１のストア命令無しに前記命令のシーケンスを実行するステップと、
ｄ）前記実行中に、前記ロード命令が前記第１のアドレス範囲内のアドレスに影響を与えたか否かを決定し、もし与えたなら、例外を発生して前記第１のストア命令を含む命令のシーケンスを再実行するステップと、
から成る方法。
【請求項１１】
請求項１０に記載の方法において、前記ステップｂ）が更に、前記保護レジスタを示すために、前記第２のストア命令にフラグを付加するステップを含むことを特徴とする方法。
【請求項１２】
請求項１０に記載の方法において、前記ステップｂ）が更に、前記ロード命令をロード・アンド・プロテクト命令に変更するステップを含むことを特徴とする方法。
【請求項１３】
命令のスケジューリング及び実行の方法であって、
ａ）第１のアドレス範囲へストアする第１のストア命令と、前記第１のアドレス範囲からロードするロード命令と、前記第１のストア命令及び前記ロード命令に介入する第２のストア命令と、から成る命令のシーケンスをアクセスするステップであって、
前記第２のストア命令が前記第１のアドレス範囲内のアドレスにストアするか否か知られていない、
アクセス・ステップと、
ｂ）前記命令のシーケンスから前記ロード命令を除去するステップであって、前記第１のアドレス範囲に関連するメモリ・アドレスを保護レジスタにストアするステップを含むステップと、
ｃ）前記ロード命令無しに前記命令のシーケンスを実行するステップと、
ｄ）前記実行中に、前記第２のストア命令が前記第１のアドレス範囲内のアドレスにストアするか否かを決定し、もしストアするなら、例外を発生して前記ロード命令を含む命令のシーケンスを再実行するステップと、
から成る方法。
【請求項１４】
請求項１３に記載の方法において、前記ステップｂ）が更に、前記保護レジスタを示すために、前記第２のストア命令にフラグを付加するステップを含むことを特徴とする方法。
【請求項１５】
請求項１３に記載の方法において、前記ステップｂ）が更に、前記第１のストア命令をストア・アンド・プロテクト命令に変更するステップを含むことを特徴とする方法。
【請求項１６】
命令のスケジューリング及び実行の方法であって、
ａ）第１のアドレス範囲からロードするロード命令と、前記第１のアドレス範囲内のアドレスにストアするか否か知られていない第１のストア命令と、前記第１のアドレス範囲にストアする第２のストア命令とから成る、命令のシーケンスをアクセスするステップであって、
前記第１のストア命令が前記ロード命令及び前記第２のストア命令に介入する、
アクセス・ステップと、
ｂ）前記命令のシーケンスから前記第２のストア命令を除去するステップであって、前記第１のアドレス範囲に関連するメモリ・アドレスを保護レジスタにストアするステップを含むステップと、
ｃ）前記第２のストア命令無しに前記命令のシーケンスを実行するステップと、
ｄ）前記実行中に、前記第１のストア命令が前記第１のアドレス範囲内のアドレスにストアするか否かを決定し、もしストアするなら、例外を発生して前記第２のストア命令を含む命令のシーケンスを再実行するステップと、
から成る方法。
【請求項１７】
請求項１６に記載の方法において、前記ステップｂ）が更に、前記保護レジスタを示すために、前記第１のストア命令にフラグを付加するステップを含むことを特徴とする方法。
【請求項１８】
請求項１６に記載の方法において、前記ステップｂ）が更に、前記ロード命令をロード・アンド・プロテクト命令に変更するステップを含むことを特徴とする方法。
【請求項１９】
請求項１６に記載の方法において、前記第２のストア命令が、前記ロード命令が前記第１のアドレス範囲からロードしたのと同じ値を前記第１のアドレス範囲にストア・バックすることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・システムに関し、更に特定すれば、改良されたマイクロプロセッサにおける命令の並び替え（reordering）を加速化する方法および装置に関する。
【背景技術】
【０００２】
近年、単純であるが非常に高速なホスト・プロセッサ（「モーフ・ホスト」と称する）およびソフトウエア（「コード・モーフィング・ソフトウエア（code morphing software）」と称する）を組み合わせ、このモーフ・ホスト・プロセッサとは異なるプロセッサのために設計されたアプリケーション・プログラムを、しかも当該プログラムが設計されたプロセッサ（ターゲット・プロセッサ）では達成できない速度で実行する、新たなマイクロプロセッサが開発された。モーフ・ホスト・プロセッサは、コード・モーフィング・ソフトウエアを実行して、アプリケーション・プログラムをモーフ・ホスト・プロセッサの命令に変換し、本来のターゲット・ソフトウエアの目的を達成する。ターゲット命令を変換しつつ、これらを実行すると同時に変換バッファに格納して、更に変換することなく、これらにアクセスすることができる。プログラムの初期的変換および実行は低速であるが、一旦変換すれば、ハードウエアにおいてプログラムを実行する際に通常必要とされるステップの多くは不要となる。
【０００３】
迅速なレートで、他のプロセッサ用に設計されたプログラムを実行可能とするために、モーフ・プロセッサは多数のハードウエア強化を含む。これらの強化の１つは、ホスト・プロセッサと変換バッファとの間に存在するゲート格納バッファ（gated store buffer）である。第２の強化は、変換対象のターゲット命令のいずれのシーケンスにおいても、その開始時におけるターゲット・マシンの状態を格納する１組のホスト・レジスタである。ターゲット・プロセッサの状態がわかっている範囲にあるターゲット命令のシーケンスを、モーフ・ホスト命令に変換し、変換バッファ内に置き、実行を待つ。例外が発生することなく、変換された命令が実行された場合、命令シーケンスの開始時におけるターゲット状態を、シーケンスが完了した時点におけるターゲット状態に更新する。
【０００４】
変換されたホスト命令シーケンスの実行中に例外が発生すると、処理は停止し、ターゲット・マシンの既知状態が存在する、ターゲット命令シーケンスの先頭に動作全体が戻る、即ち、ロールバックすることができる。これによって、命令を動的に変換および実行しつつ、非常に迅速かつ精確な例外処理が可能となり、従来技術では決して達成されなかった成果が得られる。
【０００５】
コード・モーフィング・ソフトウエアの一部であるスケジューラによって新たなマイクロプロセッサを走らせる際、一層の高速化が達成される。スケジューラは、命令が変換されていく際に、生の変換によって生ずるそのままの順序から、同じ結果が得られるが実行の高速化を可能にする順序に、命令を並び替え、再スケジューリングする。スケジューラは、ある種の命令を他の命令の前に置くか、または命令を一緒に走らせて、再スケジューリングしたソフトウエアの実行にかかる時間を短縮しようとする。スケジューラの機能には多数の制約が伴い、最も基本的な制約は、再スケジューリングしたプログラムが、なおも元のプログラムと同じ最終結果を生成しなければならないということである。
【０００６】
一例として、プログラムの中には、正しい結果を得るためには中断なく実行しなければならない命令シーケンスがある。スケジューラは、得られる結果に干渉することなく、かかるシーケンスに干渉することはできない。多くのプロセッサは、ハードウエア・インターロックを備え、かかるシーケンスを実際に中断なく走らせることを保証している。かかる命令シーケンスを保護する必要性のために、ここで論じている先進のモーフ・ホスト・プロセッサのようなハードウエア・インターロックのないプロセッサには、特殊な制約がかけられる。ソフトウエアは、何らかの方法で、かかるシーケンスを把握し、中断なくこれらを走らせることを保証しなければならない。
【０００７】
制御依存性は、スケジューラが直面する、並び替えに対する従来からの制約の別の１つである。制御依存性は、分岐命令に関係する。スケジューラは、分岐の前および後に現れる命令を並び替えても、プログラムが正しく実行することを保証しなければならない。
【０００８】
格納に関して、ロードの並び替えに影響を及ぼす別の依存性がある。例えば、更新したデータをあるメモリ・アドレスに格納し、次いでレジスタ動作において操作する場合、格納を行う時点では、当該アドレスのデータをレジスタ内に保持していてはならない。さもなければ、レジスタ内のデータは古くなっている可能性がある。
【０００９】
これらの制約全てにより、典型的なスケジューラの機能は非常に保守的となり、その結果、生成するコードが低速化する。
従来のスケジューラは、並び替えを行うために、互いに依存しあう命令を決定する際に最善を尽くす。通常のスケジューラは、ある動作が何らかの形で他の動作に依存すること、およびある動作は他の動作に全く依存しないことを判定できるが、他の動作に関しては何も判定することはできない。かかるスケジューラは、他の動作に依存する動作の場合、これらが発生した正常な生来の順序に並べることによって、保守的にこれらを扱う。かかるスケジューラは、他の動作に全く依存しない動作を、それが望むように、並び替える。最終的に、スケジューラは、依存性に関して判断することができない全ての動作を、これらが互いに依存するかのように扱い、したがってこれらの扱いは保守的でしかも緩慢となる。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
先進のプロセッサのスケジューラが、加速した速度で実行するコードを発生することを可能にする回路およびソフトウエアを提供することが望ましい。
【課題を解決するための手段】
【００１１】
本発明は、スケジューリング動作に対して規定された通常の制約を一部無視し、できるだけ速く実行するようにある命令を単純にスケジューリングし、このスケジューリングがスケジューリング制約に違反した場合例外を発生し、例外を発生した各命令セットを正しく実行するために講ずる処置を決定することによって、スケジューラ・ソフトウエアに、より迅速に実行するコードを生成させる装置および方法によって実現する。
【００１２】
本発明のこれらおよびその他の目的ならびに特徴は、以下の詳細な説明を、図面と共に参照することによって、より良く理解されよう。図面では、いくつかの図にわたって同様のエレメントは同様の符号で引用することとする。
【発明を実施するための最良の形態】
【００１３】
図１は、技術的現状のマイクロプロセッサよりもはるかに単純な、強化ハードウエア処理部（「モーフ・ホスト」と呼ぶ）、およびエミュレート・ソフトウエア部（「コード・モーフィング・ソフトウエア」と呼ぶ）を組み合わせた新規マイクロプロセッサ１０を示す。２つの部分は、一緒に機能して、通常ではハードウエアのみで行う動作を、先進のマイクロプロセッサにおいて実行する。新規マイクロプロセッサ１０は、従来技術のマイクロプロセッサよりも高速であり、多数の従来技術のマイクロプロセッサ系列によって走らせることができるあらゆるオペレーティング・システムのためのあらゆるソフトウエアを走らせることができ、しかも従来技術のマイクロプロセッサよりも安価である。
【００１４】
マイクロプロセッサ１０は、異なるターゲット・プロセッサ用に設計されたアプリケーション・プログラムを実行するために、コード・モーフィング・ソフトウエア１２を実行するように設計されたモーフ・ホスト・プロセッサ１１を含む。モーフ・ホスト１１は、コード・モーフィング・ソフトウエア１２によって提供される加速技法の効率的な利用を可能とするように、特別に適合化したハードウエア強化を含む。モーフ・ホスト・プロセッサは、動作の加速化を支援し、および例外またはエラーが発生した場合に直ちにターゲット・コンピュータの状態を与えるハードウエア強化を含む。コード・モーフィング・ソフトウエアは、とりわけ、ターゲット・プログラムの命令をモーフ・ホスト命令に変換し、ホスト命令のスケジューリングおよび最適化を行い、必要な場合には例外およびエラーに応答して、実行が正しかったことがわかっている最後の時点に実行をロールバックし、その時点における正しいターゲット状態と作業状態を置換することによって正しいターゲット・コードの再変換が行われるようにするソフトウエアを含む。また、コード・モーフィング・ソフトウエアは、処理速度を高める種々のプロセスも含む。図２のブロック図は、ここで論ずる特徴を実現する、モーフ・ホスト１１のハードウエア例を詳細に示す。
【００１５】
図３の図（コード・モーフィング・ソフトウエア１２の主ループの動作を示す）に示すように、コード・モーフィング・ソフトウエアは、強化モーフ・ホストとの組み合わせにより、実行中にターゲット命令をモーフ・ホスト用命令に変換し、これらのホスト命令をメモリ・データ構造（「変換バッファ」と呼ぶ）内にキャッシュする。一旦ターゲット命令を変換したなら、変換バッファからリコールし、実行することができる。その際、各ターゲット命令を実施するためにはどの原始命令が必要か判定を行い、各原始命令をアドレスし、各原始命令をフェッチし、原始命令のシーケンスを最適化し、各原始命令にアセットを割り当て、原始命令を並び替え、各ターゲット命令を実行する毎に、関係する原始命令の各シーケンスの各ステップを実行するというような、従来技術のハードウエア・マイクロプロセッサでは必要であった多数のステップのいずれも必要としない。
【００１６】
従来技術のエミュレーション技法の主な問題の１つは、ターゲット・プログラムの実行中に発生する例外を巧みに処理できないことであった。ターゲット・アプリケーションの実行中に発生した例外の中は、ターゲット・オペレーティング・システムに送出されるものがあり、例外およびそれに続く命令の適正な実行のためには、いずれのこのような例外の時点においても正しいターゲット状態が得られなければならない。また、他にも、エミュレータが、ある特定のホスト機能によって置換された特定のターゲット動作を検出するために、例外を発生する可能性がある。更に、ホスト・プロセッサも、ターゲット命令から派生したホスト命令を実行する際に、例外を発生する可能性がある。これらの例外は全て、エミュレータによってターゲット命令をホスト命令に変化させようとする試行の間、またはエミュレート・ホスト命令をホスト・プロセッサによって実行するときに、発生する可能性がある。ターゲット・オペレーティング・システムに送出される例外は、常にターゲット・プロセッサの状態に関する知識が必要であるので、特に困難である。
【００１７】
これらの例外から効率的に回復するために、強化モーフ・ホストは多数のハードウエアの改良を含む。これらの改良に、ゲート格納バッファ（図５参照）が含まれる。ゲート格納バッファは、ハードウエア「ゲート」の「アンコミット」側（uncommited side）にワーキング・メモリ状態の変化、およびハードウエア・ゲートの「コミット」側（commited side）にオフィシャル・メモリ状態の変化を格納する。ハードウエア・ゲートにおいて、これらコミットした記憶が主メモリに「流れ出す」。「コミット」動作が、ゲートのアンコミット側から、ゲートのコミット側にメモリの記憶を移転させる。例外が発生すると、「ロールバック」動作によって、ゲート格納バッファ内のアンコミットの記憶は破棄される。
【００１８】
また、ハードウエア強化は、多数の追加プロセッサ・レジスタ（図４参照）も含む。追加のレジスタは、レジスタ名称変更（register renaming）によって、同じハードウエア資源を利用しようとする命令の問題軽減を可能にすることに加えて、ホスト命令を処理するための１組のホスト即ちワーキング・レジスタを維持すること、更に元来ターゲット・アプリケーションを作成した対象であるターゲット・プロセッサのオフィシャル状態を保持する１組のターゲット・レジスタを維持することが可能となる。ターゲット・レジスタは、専用インターフェースを介して、それらのワーキング・レジスタ同等物に接続されており、これによって、コミット動作が全てのワーキング・レジスタの内容をオフィシャル・ターゲット・レジスタに迅速に転送することを可能とし、更に「ロールバック」と呼ぶ動作によって、全てのオフィシャル・ターゲット・レジスタの内容をそれらのワーキング・レジスタ同等物に迅速に転送することを可能にする。
【００１９】
一旦ターゲット命令の１つまたは１群が変換されエラーなく実行し終えると、追加のオフィシャル・レジスタおよびゲート格納バッファによって、メモリの状態およびターゲット・レジスタの状態を更新することができる。更新は、一体のターゲット命令の境界において行われるように、コード・モーフィング・ソフトウエアによって選択される。一連のターゲット命令の変換によって発生した原始ホスト命令を、ホスト・プロセッサが、例外を生ずることなく走らせた場合、これらの命令によって生じたワーキング・メモリ・ストアおよびワーキング・レジスタの状態は、オフィシャル・メモリおよびオフィシャル・ターゲット・レジスタに転送される。
【００２０】
一方、ターゲット命令の境界ではない時点でホスト命令を処理しているときに例外が発生した場合、最後の更新（またはコミット）時におけるターゲット・レジスタ内の元の状態を、ワーキング・レジスタに呼び戻すことができ、ゲート格納バッファ内のアンコミット・メモリ記憶を破棄することができる。そして、発生した例外がターゲット例外である場合、このターゲット例外の原因となったターゲット命令を一度に１つずつ再変換し、ターゲット・マイクロプロセッサによって実行されるかのように、逐次的なシーケンスで実行することができる。各ターゲット命令をエラーなく正しく実行する毎に、ターゲット・レジスタの状態を更新し、格納バッファ内のデータをメモリに通過させる（ｇａｔｅ）ことができる。そして、ホスト命令を走らせている際に再度例外が発生した場合、モーフ・ホストおよびメモリのターゲット・レジスタによって、ターゲット・プロセッサの正しい状態を保持し、動作は遅延なく正しく処理することができる。この調整的変換によって行われる新たな変換の各々は、変換される毎に、今後の使用のためにキャッシュすることができ、あるいはページ・フォールトのように一度だけまたは希にしか起こらない場合には、破棄してもよい。これらの特徴を組み合わせ、コード・モーフィング・ソフトウエアおよびモーフ・ホストの組み合わせによって作り出されるマイクロプロセッサが、元来ソフトウエアが書かれた対象であるプロセッサよりも迅速に命令を実行するのを支援する。
【００２１】
単純に命令を変換し、変換した命令をキャッシュし、その命令セットを実行する必要があるときはいつでも各変換を実行することに加えて、コード・モーフィング・ソフトウエアは、異なる変換の並び替え、最適化、および再スケジューリングも行う。最適化プロセスの１つは、実行中に分岐を行う可能性が明白になると、変換したホスト命令の種々のシーケンスを互いにリンクし合う。最終的に、主ループがホスト命令の分岐命令を参照することは、ほぼ完全に不要となる。この条件に達すると、いずれのホスト命令を走らせる前にも、ターゲット命令をフェッチし、ターゲット命令をデコードし、ターゲット命令を構成する原始命令をフェッチし、これら原始動作を最適化し、原始動作を並び替え、これら原始動作を再スケジューリングするために要する時間は不要となる。したがって、改良したマイクロプロセッサを用いていずれのターゲット命令セットを実行するために必要な作業も劇的に減少する。
【００２２】
先に指摘したように、命令の順序が正しいが元のままである場合、並び替えの動作は、スケジューラを利用して、より良い命令の実行順序を選択しようとする。スケジューラに伴う問題の１つに、これらの機能には制約が多いことがあげられる。最も基本的な制約は、プログラムを実行したときに、命令の元のシーケンスで得られるのと同じ最終結果をなおも生成しなければならないことである。これらの制約全てのために、典型的なスケジューラは非常に保守的に機能することを余儀なくされ、その結果生成するコードは、実行が遅くなる。
【００２３】
例えば、正しい結果が生成されることを保証するために、典型的なスケジューラは、決定論に基づいて動作し、依存性を有さない命令、依存性を有する命令、および依存性の存在が未知の命令を選択する。依存性を有する命令、および依存性の存在が未知の命令は全て、依存性が存在するかのように扱われ、並び替えられない。依存性がないことがわかっている命令のみを並び替える。これらの指針にしたがって、スケジューラはコードを生成するので、その実行は遅くなる。
【００２４】
別の制約には、モーフ・ホスト・プロセッサの特定的な実施形態に関するものがある。モーフ・ホスト・プロセッサの一実施形態は、動作を遅くする特殊回路をなくすことによって、機能を迅速化するように設計されたプロセッサである。モーフ・ホスト・プロセッサのこの実施形態は、ハードウエア・ロッキング機構を全く用いずに設計される。ハードウエア・ロッキング機構とは、特定の命令シーケンスにおけるステップ全てが、中断されることなく実行されることを保証することを目的とする回路である。ロッキング機構がない場合、スケジューラは、かかるシーケンス内のステップ全てを並び替えずに、元の変換された順序で処理し、プロセッサがシーケンスから正しい結果を生成することを保証するように、厳密に機能することが要求される。
【００２５】
本発明のスケジューラは、コード・モーフィング・ソフトウエアのソフトウエア部である。従来技術のハードウエアによるスケジューラとは異なり、ソフトウエアのスケジューラは、命令を並び替える際に推測的技法を用いる。スケジューラは、ある動作について、できるだけ高速な動作が望まれると推測し、この結果を達成するように命令を並び替える。モーフ・ホストには、選択した推測が正しくない場合に例外を発生させるハードウエアが設けられている。殆どの場合、推測は正しいので、結果全体は遥かに速い動作となる。しかしながら、推測が正しくない場合、例外が、ソフトウエアにゲート格納バッファおよびターゲット・レジスタを利用させ、正しい状態がわかっている推測的シーケンスの先頭に動作をロールバックさせるのが通例である。
【００２６】
従来技術のスケジューラによって使用されている決定論的戦略とは対照的に、本発明のスケジューラは、並び替えのために命令のカテゴリを選択する際、確率論的指針を利用する。改良されたスケジューラは、変換によってターゲット命令セットから生成される命令のシーケンスから、４つのカテゴリの命令シーケンスを選択する（図６参照）。これらのカテゴリは、依存性のない命令シーケンス、既知の依存性を有する命令シーケンス、依存性を有さない確率が高い命令シーケンス、および依存性を有する確率が高い命令シーケンスを含む。従来技術の場合と同様、依存性がないことがわかっている命令シーケンスは、スケジューラによって任意に並び替えることができる。既知の依存性を有する命令シーケンスは、変換器によって与えられた逐次順序で処理される。
【００２７】
しかしながら、依存性を有さない確率が高い命令は、実際に依存性がないものとして扱われ、実行を可能な限り高速化するように並び替えられる。モーフ・ホストには、正しくない並び替えを検出し、依存性が実際に存在する場合に例外を発生させるハードウエア手段が設けられている。スケジューラはこのハードウエア手段と協働してチェックを行い、並び替えた各命令が正しく実行できない場合を見つけ出し、動作シーケンスが正しく実行しない場合に例外を発生することができる。かかる例外によって、スケジューラは、それが以前に行った並び替えで、例外を発生したものを無視し、保守的にまたはより適切な他の何らかの態様でそのシーケンスを扱うことが可能となる。
【００２８】
一方、依存性を有する確率が高い命令の処理は、積極的な場合または保守的な場合のいずれかが可能である。積極的に処理する場合、これらは、依存性を有さない確率が高い命令として扱われる。これらを並び替え、出来るだけ実行を高速化し、モーフ・ホスト内に設けられているハードウエア手段を用いて、正しくない並び替えが行われた場合を検出し例外を発生させる。保守的に処理する場合、変換器によって与えられる逐次順序でこれらを処理する。通常では、保守的な扱いの方が処理が速い。何故なら、多数の例外を発生することが、実行速度を著しく低下させるからである。
【００２９】
本発明の一実施形態では、図７に示すような回路をホスト・プロセッサに追加する。この回路は、特別の「ロード・アンド・プロテクト」または「ストア・アンド・プロテクト」動作を用いて、スケジューラによって並び替えられた命令がアクセスするメモリ・アドレスを格納するために利用される。かかる「ロード・アンド・プロテクト」または「ストア・アンド・プロテクト」動作は、命令が並び替えられた場合にはいつでも用いることができ、並び替えられた命令がアクセスするメモリ・アドレスを、保護レジスタとして用いるために設計されたモーフ・ホストの複数のレジスタ７１の内１つに置く効果を有する。一実施形態では、８つの保護レジスタ７１が設けられている。「ロード・アンド・プロテクト」または「ストア・アンド・プロテクト」命令は、その動作に用いられる特定の保護レジスタを指示する。
【００３０】
この明細書全体を通じて、ロード・アンド・プロテクト命令ならびにストア・アンド・プロテクト命令を説明する際「メモリ・アドレス」という用語を用いるが、この用語は、保護されるメモリ領域を決定するために可能な多数の構成に対する参照として用いている。メモリ・アドレスという用語は、保護対象のメモリ・アドレスの記述子を意味するために用いている。例えば、メモリがバイト・アドレス可能なシステムでは、本発明の一実施形態は、開始メモリ・アドレスと、アドレス領域内のバイト数に等しい数のビットとを用いて、これらのバイト各々の保護状態を示す。同様なアドレシングを行う別の実施形態では、開始メモリ・アドレスおよび長さを利用し、一方第３の実施形態では、個々のバイト・アドレスと、バイト・アドレス毎の個々の比較器を利用する。
【００３１】
動作の一例では、命令シーケンスは、第１ストア命令ＳＴＯＲＥ１、第２ストア命令ＳＴＯＲＥ２、およびロード命令ＬＯＡＤ１を順に含む。スケジューラは、並び替えによって正しくない動作が行われる確率は低いと想定して、これらの命令を並び替え、並び替えたシーケンスでは、ロード命令を最初に、第２ストア命令を２番目に、そして第１ストア命令を３番目に置く。これを行うために、スケジューラは、ロード・データを汎用レジスタ７２の１つに置き、更にロード・データが得られたメモリ位置のアドレスを、命令によって指定された保護レジスタ７１に置くために「ロード・アンド・プロテクト」動作を用いる。ソフトウエア・スケジューラは、並び替えによってエラーが生じたか否か判定するためにはどの命令をチェックすべきかわかっているので、スケジューラは、並び替えによって影響を受ける可能性がある次の命令（この場合、ＳＴＯＲＥ１およびＳＴＯＲＥ２命令であり、その前にロードが置かれた）に指示（例えば、ビットマスク内のビット）を置き、保護対象メモリ・アドレスを保持する特定の保護レジスタを示す。この指示が特定の位置（トラッピング機能のために８つの保護レジスタを用いる場合、８つのビットの内１つ）にあることによって、ストア命令によって各記憶が置かれるアドレスが、指示された保護レジスタ７１内に保持されているメモリ・アドレスと重複するか否かによって、命令の実行が左右されることを示す。
【００３２】
同様に、スケジューラは「ストア・アンド・プロテクト」動作を用いてＳＴＯＲＥ２命令のデータをメモリに格納し、データを格納したメモリ位置のアドレスを、ストア・アンド・プロテクト命令が指定する保護レジスタ７１内に置く。また、スケジューラは、並び替えによって影響を受ける可能性がある命令（この場合、ＳＴＯＲＥ１命令のみ）の各々のビットマスク内に指示を置き、この保護対象メモリ・アドレスを保持する特定の保護レジスタを示す。最後に、スケジューラは、最後のＳＴＯＲＥ１命令に対して通常のストア命令を用いる。
【００３３】
命令シーケンスが実行されると、ホスト・ハードウエアは比較回路７３を用いて、これら３つの命令の各々について、命令のメモリ・アドレスが、保護レジスタ７１内の１つに格納されているメモリ・アドレスにおけるデータのいずれかの部分と重複しないか否か判定を行い、重複する場合、例外を発生する。このように、ＬＯＡＤ１動作（ロード・アンド・プロテクトとなっている）はそのメモリを保護レジスタ７１に書き込むが、いずれの保護レジスタもチェックしない。何故なら、セットされたインディケータはいずれの保護レジスタも指定していないからである。ＳＴＯＲＥ２動作（ストア・アンド・プロテクトになっている）は、そのメモリ位置を異なる保護レジスタ７１に書き込み、ＬＯＡＤ１命令に用いられている保護レジスタ７１をチェックして、それらのメモリ位置間の重複を判定する。最後に、ＳＴＯＲＥ１動作（保護レジスタ・インディケータによって増大したが、単なるストアのままである）が、ＬＯＡＤ１およびＳＴＯＲＥ２命令の各々に対する保護レジスタをチェックし、そのメモリ・アドレスとＬＯＡＤ１およびＳＴＯＲＥ２命令のメモリ・アドレスとの間の重複を調べる。前述の第１および第３実施形態の場合、比較によって、保護をバイト・レベルに正確に適用することが可能となる。
【００３４】
いずれの例外も、コード・モーフィング・ソフトウエアに、当該例外に応答して講ずる処置を決定させる。通例では、コード・モーフィング・ソフトウエアは、並び替えた命令シーケンスの実行を中断させ、ホストに、命令シーケンスの先頭におけるターゲット・プロセッサの状態に戻させることにより、命令シーケンスを保守的に再処理できるようにする。アドレスが同一でない場合（この例では、ストア命令が保護対象メモリ・アドレスをアクセスしないことを示す）、並び替えた命令シーケンスの実行は、並び替えによって得られる加速ペースで進められる。
【００３５】
ホスト・プロセッサとスケジューラとの間で通信を実現するために、モーフ・ホストが利用するロードおよびストア命令を修正する。一実施形態では、これらの命令は、「ロード・アンド・プロテクト」および「ストア・アンド・プロテクト」命令と完全に置換される。各「ロード・アンド・プロテクト」ならびに各「ストア・アンド・プロテクト」命令は、ビットマスク（例えば、８つの保護レジスタに対応する８つのビット）を含み、これらのビットをフラグとして用いて、並び替えた命令またはエイリアスした命令のメモリ・アドレスを探す、特定の保護レジスタを示す。これらのビットの各々は、チェックすべきハードウエアのためにメモリ・アドレスを格納する、使用可能な保護レジスタの１つを指定する。このビットマスクによって、命令を並び替えたときのメモリ・アドレスを格納するように指定された具体的な保護レジスタをチェックした後、並び替えによって影響を受け得る後続の命令を実行する。「ロード・アンド・プロテクト」ならびに「ストア・アンド・プロテクト」命令は、それぞれ、通常のロードおよびストア命令の代わりに用いることも可能である。何故なら、ビットマスクのいずれのビットもセットされていない場合、チェックは行われないからである。このような場合、「ロード・アンド・プロテクト」ならびに「ストア・アンド・プロテクト」命令は、ロードおよびストア動作と同一である。また、注意すべきこととして、保護レジスタは、メモリ・データを保持する特定の汎用レジスタと関連させることができるので、少数の保護レジスタの効率的な使用が可能となるということがあげられる。
【００３６】
また、本発明のホスト・プロセッサは、並び替えた命令に関係する有効なメモリ・アドレスを収容する保護レジスタの位置を格納する「イネーブル保護レジスタ」７４と呼ぶ追加のレジスタも含む。「ロード・アンド・プロテクト」または「ストア・アンド・プロテクト」命令によって与えられる指示を用いて、特定の保護レジスタを示すビットをセットして、当該保護レジスタを示す。一実施形態では、イネーブル保護レジスタのビットは、コミット動作が行われ、変換され並び替えられた命令シーケンスが並び替え例外が生じずに実行されたことを示す場合にはいつでも、クリアされる。並び替えは、全て２つのコミット点間に現れる命令のシーケンスにおいてのみ行われるので、並び替え動作では、新たに変換された命令シーケンス毎に、並び替えに割り当てられる保護レジスタの全てを利用することできる。
【００３７】
この新発明の追加の利点として、「ストア・アンド・プロテクト」動作によって、互いに対するストアの並び替えが可能となることがあげられる。本発明では、データをメモリ位置に格納し、このメモリ位置のアドレスを保護レジスタ内に保護することによって、これを達成することができる。並び替えによって影響を受け得る後続のストアが現れたとき、そのビットマスクは、ハードウエアがメモリ・アドレスに対してチェックすべき保護レジスタを示し、例外を発生すべきか否か、またはストアの並び替えが正しく行われたか否か判定を行う。
【００３８】
新規マイクロプロセッサの一実施形態では、動作の実行において頻繁に用いられるメモリ・データを実行ユニット・レジスタ内に複製し（または「エイリアスし」）、データをメモリからフェッチするために要する時間またはデータをメモリに格納するために要する時間をなくすことを可能にする回路構成が設けられている。例えば、メモリ内のデータが１つ以上のコード・シーケンスの実行中に頻繁に再使用される場合、データを用いる毎に、このデータをメモリから読み出し、実行ユニット内のレジスタにロードしなければならないのが通例である。かかる頻繁なメモリ・アクセスによって必要となる時間を短縮するために、代わりに、コード・シーケンスの開始時にデータをメモリから実行ユニット・レジスタに一旦ロードし、コード・シーケンスが継続する期間中、メモリ空間の代わりとして機能するこのレジスタを指定する。一旦これを行うと、通常では指定されたメモリ・アドレスからレジスタにデータをロードする際に関与するロード動作の各々は、代わりに、単なるレジスタ間コピー動作となり、遥かに速いペースで進み、更にこれらのコピー動作でさえも、更なる最適化によってなくせる場合が多い。
【００３９】
同様に、コード・シーケンスの実行は、当該コード・シーケンスの実行中データを頻繁に１つのメモリ・アドレスに書き込むことを必要とする場合が多い。かかる頻繁な同一アドレスに対するメモリ・ストアに要する時間を短縮するために、データをメモリ・アドレスに書き込む毎に、コード・シーケンスが続いている期間中メモリ空間の代わりとして機能するように指定されている実行ユニット・レジスタにこれを転送することができる。一旦実行ユニット・レジスタを指定すれば、データを変更する毎に必要となるのは、単純なレジスタ間転送動作のみであり、これはメモリ・アドレスへのストアよりも遥かに速く進む。
【００４０】
エリアシング回路の動作は、１９９６年９月２６日に出願され、Method and Apparatus for Aliasing Memory Data in an Advanced Microprocessor（先進のマイクロプロセッサにおいてメモリ・データをエイリアスする方法および装置）と題するＭ．Ｗｉｎｇ等の米国特許出願第０８／７２１，６９８号に記載されている。この特許出願は、本発明の譲受人に譲渡されている。
【００４１】
本発明の並び替え動作を加速するための第２実施形態は、ある追加ハードウエアを利用し、前述の特許出願に記載されているように、並び替えとメモリ・アドレスのエイリアシング双方に同じハードウエアを使用できるようにするものである。尚、並び替えた命令は隣接するコミットした動作の間に現れるのが通例であるのに対して、実行ユニット・レジスタ内にエイリアスしたメモリ・データは、実際には、遥かに長い期間存続するのが通例である。この第２実施形態では、第２「永続」レジスタ７６を追加し、イネーブル保護レジスタ７４による並び替えのために設けられた短期保護と共に、長期保護即ち永続的保護を利用可能とすることを注記しておく。第２永続レジスタ７６はレジスタ７４と同様に用いられるが、隣接するコミット動作間よりも長い期間にわたってメモリ・アドレスを維持すべき保護レジスタのみを記録する。
【００４２】
例えば、ある長い期間（例えば、ループの間）使用するために、メモリ・アドレスをエイリアスしデータをホスト・レジスタに格納することが望まれる場合、どの保護レジスタが長期エイリアシング動作のアドレスを保持しているかという指示を命令からコピーし、イネーブル保護レジスタ７４および第２永続レジスタ７６双方に置く。並び替えた命令シーケンスが例外を発生することなく実行することにより、第１コミット動作を行うことができたと仮定すると、イネーブル保護レジスタがクリアされる。このように、チェックすべき並び替えられた命令のアドレスを保持する保護レジスタを示す短期フラグは、コミット毎に消去される。イネーブル保護レジスタをコミットの時点でクリアした後、第２永続レジスタの内容をイネーブル保護レジスタに書き込む。どの保護レジスタが長期エリアシングのために用いられているかを示す永続レジスタ内のデータは、イネーブル保護レジスタに書き込まれるので、長期エイリアシングに用いられる保護レジスタの指示は、コミット動作による影響を受けない。コミット毎に永続レジスタの内容をイネーブル保護レジスタに書き込むことによって、次の命令シーケンスに対して、そして究極的には、エイリアシング動作のためにデータがもはや不要となって第２レジスタを最終的にクリアするまで、保護を効果的に継続させる。
【００４３】
第２永続レジスタ７６に加えて、シャドウ・レジスタ７８を保持し、永続レジスタ内に保持されている情報も格納しておく。シャドウ・レジスタは、コミットおよびロールバック動作中に用いられる。コミットが発生すると、永続レジスタ７６内のデータは、前述のように、イネーブル保護レジスタ７４にコピーされる。また、コミット時に、永続レジスタをシャドウ（保護）するレジスタ７８に同じデータがコピーされるので、並び替えられる次の命令シーケンスの開始時には、シャドウ・レジスタに永続レジスタの設定が収容されている。次の命令シーケンスの実行中に例外が発生し、ロールバック動作が必要となった場合、シャドウ・レジスタの内容を、イネーブル保護レジスタおよび永続レジスタの双方にコピーする。これは、命令シーケンスの実行開始前にイネーブル保護レジスタおよび永続レジスタにあったのと同じ指示をこれらのレジスタに置くことになり、これによって、更に保守的に実行を続けるための正しい状態を確保する。
【００４４】
本発明の構成によって、付加的な利点が得られる。永続レジスタ７６の追加によって、短期間（コミット間）における並び替え能力、および実行ユニット・レジスタ内に長期間エイリアス・メモリ・データを保持する能力双方を増強するために、同じハードウエアの使用が可能となり、これによってメモリ・アクセスの冗長性を排除することができ、更にコミット動作間に生ずる他の種類の冗長性を排除するためにもこれを用いることができる。例えば、１つの命令シーケンス内で同じメモリ・アドレスから２つのロードが行われる可能性がある。これが発生し、このメモリ・アドレスに対するストアが中間で生じない場合、２番目のロードは単に無視すればよく、最初のメモリ・アクセスによってレジスタ内に置かれたデータを、２番目のロード動作の代わりに、変更することなく用いればよい。しかしながら、これらのロード間にストアが入る場合、このストアが、２番目のアクセスを行うメモリ・アドレスに対して行われたのか否か判定する必要がある。つまり、従来技術の最適化技法では、ロード間にストアが入る場合、２番目のロードを削除することができなかった。
【００４５】
本発明は、動作を短縮するために有効に利用することができる。最初のロードを「ロード・アンド・プロテクト」動作に変更し、メモリ・アドレスを保護レジスタに格納し、ストア命令がチェックすべき特定の保護レジスタを示すフラグを受け取るようにすれば、２番目のロードを削除することができ、「ロード・アンド・プロテクト」動作によって格納したデータを２番目のロードのために用いることができる。ストア命令が保護対象メモリ・アドレスにアクセスしようとする場合、ストアのアクセスが行われる前に、チェックすべき保護レジスタを示すフラグが比較を行わせる。これによって例外を発生し、正しいターゲット状態が存在する最後のコミット点までのロールバックが行われる。こうして、スケジューラは、２番目のロード動作を含む適切な命令シーケンスを与えることができ、シーケンスを再度実行することができる。
【００４６】
同様に、２つのコミット動作間にある命令シーケンスが、同じメモリ・アドレスへの２回のストアを含む場合、このメモリ・アドレスからのロードがストアの間にない場合、最初のストアを削除することができる。しかしながら、このメモリ・アドレスからのデータが中間のロードのために用いられる場合、最初のストアを削除することはできない。本発明を用いて、ロード命令を「ロード・アンド・プロテクト」にすれば、このメモリ・アドレスに対する最初のストアを削除することができる。次いで、２番目のストアが「ロード・アンド・プロテクト」から保護レジスタ指示を受け取り、アクセスのメモリ・アドレスをチェックする。ロードが異なるアドレスからの場合、２番目のストアは正しく続行ことができる。ロードが同じアドレスからの場合、２番目のストアのためにメモリにアクセスしようとすると、例外が発生し、最後のコミット点に動作をロールバックすることになる。この地点から、スケジューラは、双方のストア動作を含むように命令を再スケジューリングし、シーケンスを再実行すればよい。
【００４７】
以上、好適な実施形態に関して本発明を説明したが、本発明の精神および範囲から逸脱することなく、種々の変更や変形も当業者には可能であることは認められよう。例えば、特定のプロセッサ系列と共に機能するように設計された実施形態について本発明を説明したが、本発明は、他のプロセッサ・アーキテクチャのために設計されたプログラムや、プログラムにも同様に適用されることは理解して当然である。したがって、本発明は、添付した特許請求の範囲に基づいて解釈すべきものとする。
【図面の簡単な説明】
【００４８】
【図１】図１は、本発明を利用可能な、新規マイクロプロセッサを示す図である。
【図２】図２は、図１の新規マイクロプロセッサを実現するハードウエアのブロック図である。
【図３】図３は、図１の新規プロセッサの主処理ループを示すフロー・チャートである。
【図４】図４は、新規プロセッサの一部を示すブロック図である。
【図５】図５は、新規プロセッサの別の一部を示すブロック図である。
【図６】図６は、本発明にしたがって設計したスケジューラ・ソフトウエアの動作を示すフロー・チャートである。
【図７】図７は、本発明を実施する回路の一実施形態を示すブロック図である。
【図１】
2006099800.tif 000003
【図２】
2006099800.tif 000004
【図３】
2006099800.tif 000005
【図４】
2006099800.tif 000006
【図５】
2006099800.tif 000007
【図６】
2006099800.tif 000008
【図７】
2006099800.tif 000009