(57)【要約】  明示的ソフトウェア制御がデータスペキュレーションに使用される。明示的ソフトウェア制御(140)は、データスペキュレーションを実行するためのハードウェアの必要性を排除しながら、データスペキュレーションの利益を与えるために、コンピュータプログラムの選択された位置において適用される。コンピュータベースの方法は、第１に、明示的ソフトウェア制御により、アイテム、変数、ポインタ、アドレス、等に対するデータスペキュレーションが必要とされるかどうか判断する(310)。アイテムに対するデータスペキュレーションが必要とされると判断されると、明示的ソフトウェア制御のもとでデータスペキュレーションが実行される(320)。逆に、明示的ソフトウェア制御が、データスペキュレーションが必要でないと判断し、例えば、待ち時間の長い命令の実行により通常得られるアイテムの値が入手できる場合には、アイテムの実際の値を使用してオリジナルコードセグメントが実行される(330)。
2007531164.tif 000002
【特許請求の範囲】
【請求項１】
明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションが必要であるかどうか判断するステップと、
データスペキュレーションが必要であると判断されたときに、前記アイテムに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行するステップと、
を備えたコンピュータベースの方法。
【請求項２】
データスペキュレーションが必要でないと判断されたときに前記アイテムの実際の値を使用してオリジナルコードセグメントを実行するステップを更に備えた、請求項１に記載のコンピュータベースの方法。
【請求項３】
データスペキュレーションを実行する前記ステップは、状態をチェックポイント処理してスナップショット状態を得るようにハードウェアに指令する段階を含む、請求項１に記載のコンピュータベースの方法。
【請求項４】
前記状態は、プロセッサ状態を含む、請求項３に記載のコンピュータベースの方法。
【請求項５】
データスペキュレーションを実行する前記ステップは、前記アイテムの値を前記アイテムの予想値にセットする段階を更に含む、請求項３に記載のコンピュータベースの方法。
【請求項６】
データスペキュレーションを実行する前記ステップは、更に、前記アイテムの実際の値に代わって前記アイテムの予想値を使用してオリジナルコードセグメントを実行する段階を含む、請求項５に記載のコンピュータベースの方法。
【請求項７】
データスペキュレーションを実行する前記ステップは、更に、前記予想値を前記実際の値と比較する段階を含む、請求項６に記載のコンピュータベースの方法。
【請求項８】
データスペキュレーションを実行する前記ステップは、更に、前記予想値が前記実際の値に等しいときに前記予想値を使用して前記オリジナルコードセグメントを実行した結果をコミットする段階を含む、請求項７に記載のコンピュータベースの方法。
【請求項９】
データスペキュレーションを実行する前記ステップは、更に、前記状態を前記スナップショット状態へロールバックする段階を含む、請求項７に記載のコンピュータベースの方法。
【請求項１０】
前記実際の値を使用して前記オリジナルコードセグメントを実行するステップを更に備えた、請求項９に記載のコンピュータベースの方法。
【請求項１１】
データスペキュレーションが必要であるかどうか判断する前記ステップは、レジスタ状態で分岐するインストラクションを実行する段階を含む、請求項１に記載のコンピュータベースの方法。
【請求項１２】
レジスタ状態で分岐する前記インストラクションは、レディ時に分岐するインストラクションである、請求項１１に記載のコンピュータベースの方法。
【請求項１３】
明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションが必要であるかどうか判断する手段と、
前記アイテムに対してデータスペキュレーションが必要であると判断されたときに、明示的ソフトウェア制御のもとで、データスペキュレーションを実行する手段と、
を備えた構造体。
【請求項１４】
データスペキュレーションが必要でないと判断されたときに前記アイテムの実際の値を使用してオリジナルコードセグメントを実行する手段を更に備えた、請求項１３に記載の構造体。
【請求項１５】
データスペキュレーションを実行する前記手段は、状態をチェックポイント処理してスナップショット状態を得るようにハードウェアに指令する手段を更に備えた、請求項１３に記載の構造体。
【請求項１６】
前記状態は、プロセッサ状態を含む、請求項１５に記載の構造体。
【請求項１７】
データスペキュレーションを実行する前記手段は、更に、前記アイテムの値を前記アイテムの予想値にセットする手段を含む請求項１５に記載の構造体。
【請求項１８】
データスペキュレーションを実行する前記手段は、更に、実際の値に代わって予想値を使用してオリジナルコードセグメントを実行する手段を含む、請求項１７に記載の構造体。
【請求項１９】
データスペキュレーションを実行する前記手段は、更に、前記予想値を前記実際の値と比較する手段を含む、請求項１８に記載の構造体。
【請求項２０】
データスペキュレーションを実行する前記手段は、更に、前記予想値が前記実際の値に等しいときに前記予想値を使用して前記オリジナルコードセグメントを実行した結果をコミットする手段を含む、請求項１９に記載の構造体。
【請求項２１】
データスペキュレーションを実行する前記手段は、更に、前記状態を前記スナップショット状態へロールバックする手段を含む、請求項１９に記載の構造体。
【請求項２２】
前記実際の値を使用して前記オリジナルコードセグメントを実行する手段を更に備えた、請求項２１に記載の構造体。
【請求項２３】
データスペキュレーションが必要であるかどうか判断する前記手段は、更に、レジスタ状態で分岐するインストラクションを実行する手段を含む、請求項１３に記載の構造体。
【請求項２４】
プロセッサと、
前記プロセッサに結合され且つインストラクションが記憶されたメモリと、
を備えたコンピュータシステムにおいて、前記プロセッサでインストラクションが実行されるときに、
明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションが必要とされるかどうか判断するステップと、
データスペキュレーションが必要であると判断されたときに、明示的ソフトウェア制御のもとで、データスペキュレーションを実行するステップと、
を備えた方法。
【請求項２５】
明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションが必要とされるかどうか判断するステップと、
データスペキュレーションが必要であると判断されたときに、明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションを実行するステップと、
を備えた方法のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成された媒体を備えたコンピュータプログラム製品。
【請求項２６】
前記方法は、更に、データスペキュレーションが必要とされないと判断されたときに前記アイテムの実際の値を使用してオリジナルコードセグメントを実行するステップを備えた、請求項２５に記載のコンピュータプログラム製品。
【請求項２７】
レジスタ状態で分岐するインストラクションを実行するステップと、
レジスタ状態が第１状態であるときにレジスタの実際の値を使用してオリジナルコードセグメントを実行するステップと、
それとは別に、レジスタ状態が前記第１状態とは異なる第２状態であるときに、前記オリジナルコードセグメントに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行するステップと、
を備えたコンピュータベースの方法。
【請求項２８】
レジスタ状態で分岐するインストラクションを実行する手段と、
レジスタ状態が第１状態であるときにレジスタの実際の値を使用してオリジナルコードセグメントを実行する手段と、
それとは別に、レジスタ状態が前記第１状態とは異なる第２状態であるときに、前記オリジナルコードセグメントに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行する手段と、
を備えた構造体。
【請求項２９】
プロセッサと、
前記プロセッサに結合され且つインストラクションが記憶されたメモリと、
を備えたコンピュータシステムにおいて、前記プロセッサでインストラクションが実行されるときに、
レジスタ状態で分岐するインストラクションを実行するステップと、
レジスタ状態が第１状態であるときにレジスタの実際の値を使用してオリジナルコードセグメントを実行するステップと、
それとは別に、レジスタ状態が前記第１状態とは異なる第２状態であるときに、前記オリジナルコードセグメントに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行するステップと、
を備えた方法。
【請求項３０】
レジスタ状態で分岐するインストラクションを実行するステップと、
レジスタ状態が第１状態であるときにレジスタの実際の値を使用してオリジナルコードセグメントを実行するステップと、
それとは別に、レジスタ状態が前記第１状態とは異なる第２状態であるときに、前記オリジナルコードセグメントに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行するステップと、
を備えた方法のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成された媒体を備えたコンピュータプログラム製品。
【請求項３１】
データスペキュレーションがコンピュータソースプログラムに必要とされるかどうか判断するステップと、
実行時にデータスペキュレーションの明示的ソフトウェア制御を与えるコンピュータプログラムコードをコンピュータソースプログラムに挿入するステップと、
を備えた方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プロセッサの性能向上に係り、より詳細には、データスペキュレーションのための方法に係る。
【０００２】
関連出願：本出願は、クリストフ・ブラウン、クインＡ．ジャコブソン、シャイレンダー・コードリー及びマルク・トレンブレーを発明者として２００４年３月３１日に出願された「Method And Structure For Explicit Software Control Of Data Speculation」と題する米国プロビジョナル特許出願第６０／５５８，３７７号の利益を請求するもので、その全体を参考としてここに援用する。
【背景技術】
【０００３】
近代的なプロセッサの性能を向上させるために、所与の時間周期中に実行されるインストラクションの数を向上させる種々の技術が使用されている。これらの技術の１つがデータスペキュレーション(data speculation)である。
【０００４】
データスペキュレーションとは、一般に、データの依存性を断ち切るために、データの値をオペレーションの原因又は結果について予想するようなスペキュレーションの形式を指す。データの依存性を断ち切ることで、より多くのインストラクションを並列に発行することができる。あるチェックフォームを使用して、予想が正しかったことを保証すると共に、誤ったスペキュレーションの場合にバックアップを行うようにする。スペキュレーションが正しかった場合には、潜在的に依存するオペレーションが並列に実行され、絶対的な実行時間を減少させる。
【０００５】
インストラクションレベルの並列性（ＩＬＰ）を高めるためにデータスペキュレーションの多数の形式が提案され、又、データスペキュレーションをサポートするために多数のハードウェアメカニズムが提案されている。データスペキュレーションは、レイテンシの長いオペレーションにとって最も重要である。
【０００６】
ハードウェアに基づくデータスペキュレーションの応用例は、プロセッサに近いメモリキャッシュにおいてミスとなったロードインストラクションにより返送される値を予想することである。ロードにより返送される値を予想できる場合には、ロードがまだ実行されている間に、その値に依存する後続インストラクションを実行する。ロードが完了すると、スペキュレーションをチェックし、後続インストラクションに対して行われたワークを正しいとみなしてコミットするか、或いは行われたワークを破棄しなければならないかのいずれかである。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
データスペキュレーションワークを行うためには基本的に２つのことが必要になる。第１に、インストラクションが使用又は発生しようとするデータ値を予想する良好な方法がなければならない。予想は、以前の振舞いを観察し且つ以前の振舞いを利用して将来の振舞いを予想するハードウェアメカニズムから得ることができる。又、予想は、ソフトウェアアプリケーションそれ自体に合体させることもできる。
【０００８】
データ値スペキュレーションに必要な第２のものは、スペキュレーション実行のためのハードウェアサポートである。予想時点以後の全ての後続インストラクション（予想されたデータ値を使用する）は、それらインストラクションをアーキテクチャー状態に対して後でコミットできるか、又はアーキテクチャー状態に影響せずに破棄できるようにして、実行されねばならない。使用した予想データ値を覚えていて、その予想データ値を、インストラクションにより返送される実際のデータ値と比較し、後続インストラクションのコミット又は破棄のいずれかを開始するようにサポートしなければならない。
【課題を解決するための手段】
【０００９】
本発明の一実施形態によれば、データスペキュレーションに対して明示的ソフトウェア制御が使用される。明示的ソフトウェア制御は、データスペキュレーションを実行するためのハードウェアの必要性を排除しながら、データスペキュレーションの利益を与えるために、コンピュータプログラムの選択された位置において適用される。
【００１０】
従って、一実施形態では、コンピュータベースの方法は、第１に、明示的ソフトウェア制御により、アイテム、変数、ポインタ、アドレス、等に対するデータスペキュレーションが必要とされるかどうか判断する。アイテムに対するデータスペキュレーションが必要とされると判断されると、明示的ソフトウェア制御のもとでデータスペキュレーションが実行される。逆に、明示的ソフトウェア制御が、データスペキュレーションが必要でないと判断し、例えば、レイテンシの長い命令の実行により通常得られるアイテムの値が入手できる場合には、アイテムの実際の値を使用してオリジナルコードセグメントが実行される。
【００１１】
一実施例において、アイテムに対するデータスペキュレーションが必要とされるかどうかの判断は、レジスタ状態で分岐を行うインストラクションを実行することを含む。このインストラクションは、プロセッサスコアボードを露出させると共に、スコアボードにおけるアイテムの状態をソフトウェアが判断するのを許す。
【００１２】
一実施形態において、明示的ソフトウェア制御のもとでデータスペキュレーションを実行することは、状態をチェックポイント処理してスナップショット状態を得るようにハードウェアに指令することを含む。アイテムの値は、アイテムの予想値にセットされ、次いで、実際の値に代わって予想値を使用してオリジナルコードセグメントが実行される。オリジナルコードセグメントの実行が完了すると、アイテムの予想値がアイテムの実際の値と比較される。２つの値が等しい場合には、アイテムの予想値を使用してオリジナルコードセグメントを実行した結果がコミットされる。逆に、２つの値が等しくない場合には、状態がスナップショット状態へロールバックされ、実際の値を使用してオリジナルコードセグメントが実行される。
【００１３】
この実施形態については、構造体は、アイテムに対して明示的ソフトウェア制御のもとでのデータスペキュレーションが必要とされるかどうか判断するための手段と、データスペキュレーションが必要とされると判断されたときに明示的ソフトウェア制御のもとでデータスペキュレーションを実行するための手段とを備えている。又、構造体は、データスペキュレーションが必要とされないと判断されると、アイテムの実際の値を使用してオリジナルコードセグメントを実行するための手段も備えている。
【００１４】
一実施形態において、データスペキュレーションを実行するための手段は、状態をチェックポイント処理してスナップショット状態を得るようにハードウェアに指令する手段を備えている。又、データスペキュレーションを実行するための手段は、アイテムの値をアイテムの予想値にセットするための手段と、実際の値に代わって予想値を使用してオリジナルコードセグメントを実行するための手段とを備えている。データスペキュレーションを実行するための手段は、更に、予想値を実際の値と比較するための手段と、予想値が実際の値に等しいときに予想値を使用してオリジナルコードセグメントを実行した結果をコミットするための手段とを備えている。
【００１５】
これらの手段は、例えば、記憶されたコンピュータ実行可能なインストラクションと、これらインストラクションを実行するためのコンピュータシステムのプロセッサとを使用することにより実行できる。コンピュータシステムは、ワークステーション、ポータブルコンピュータ、クライアントサーバーシステム、或いはネットワーク編成のコンピュータ、記憶媒体、等の組合せでよい。
【００１６】
コンピュータシステムは、プロセッサと、このプロセッサに接続され且つインストラクションが記憶されたメモリとを備えている。プロセッサにおいてインストラクションが実行されるときに、方法は、
明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションが必要とされるかどうか判断するステップと、
データスペキュレーションが必要であると判断されたときに、明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションを実行するステップと、
を備えている。
【００１７】
コンピュータプログラム製品は、
明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションが必要とされるかどうか判断するステップと、
データスペキュレーションが必要であると判断されたときに、明示的ソフトウェア制御のもとで、アイテムに対するデータスペキュレーションを実行するステップと、
を備えた方法のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成された媒体を備えている。
【００１８】
別の実施形態において、コンピュータベースの方法は、レジスタ状態で分岐するインストラクションを実行するステップと、レジスタ状態が第１状態であるときにレジスタの実際の値を使用してオリジナルコードセグメントを実行するステップと、それとは別に、レジスタ状態が第１状態とは異なる第２状態であるときに、オリジナルコードセグメントに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行するステップとを備えている。
【００１９】
この実施形態に対して、構造体は、レジスタ状態で分岐するインストラクションを実行する手段と、レジスタ状態が第１状態であるときにレジスタの実際の値を使用してオリジナルコードセグメントを実行する手段と、それとは別に、レジスタ状態が第１状態とは異なる第２状態であるときに、オリジナルコードセグメントに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行する手段とを備えている。
【００２０】
これらの手段は、例えば、記憶されたコンピュータ実行可能なインストラクションと、これらインストラクションを実行するためのコンピュータシステムのプロセッサとを使用することにより実行できる。コンピュータシステムは、ワークステーション、ポータブルコンピュータ、クライアントサーバーシステム、或いはネットワーク編成のコンピュータ、記憶媒体、等の組合せでよい。
【００２１】
この実施形態について、コンピュータシステムは、プロセッサと、このプロセッサに結合され且つインストラクションが記憶されたメモリとを備えている。プロセッサにおいてインストラクションが実行されるときに、方法は、
レジスタ状態で分岐するインストラクションを実行するステップと、
レジスタ状態が第１状態であるときにレジスタの実際の値を使用してオリジナルコードセグメントを実行するステップと、
それとは別に、レジスタ状態が第１状態とは異なる第２状態であるときに、オリジナルコードセグメントに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行するステップと、
を備えている。
【００２２】
コンピュータプログラム製品は、
レジスタ状態で分岐するインストラクションを実行するステップと、
レジスタ状態が第１状態であるときにレジスタの実際の値を使用してオリジナルコードセグメントを実行するステップと、
それとは別に、レジスタ状態が第１状態とは異なる第２状態であるときに、オリジナルコードセグメントに対して、明示的ソフトウェア制御のもとで、データスペキュレーションを実行するステップと、
を備えた方法のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成された媒体を備えている。
【００２３】
更に別の実施形態において、方法は、
アイテムに対するデータスペキュレーションがコンピュータソースプログラムに必要とされるかどうか判断するステップと、
実行時にデータスペキュレーションの明示的ソフトウェア制御を与えるコンピュータプログラムコードをコンピュータソースプログラムに挿入するステップと、
を備えている。
【００２４】
この実施形態に対して、構造体は、アイテムに対するデータスペキュレーションがコンピュータソースプログラムに必要とされるかどうか判断する手段と、実行時にデータスペキュレーションの明示的ソフトウェア制御を与えるコンピュータプログラムコードをコンピュータソースプログラムに挿入する手段とを備えている。
【００２５】
これらの手段は、例えば、記憶されたコンピュータ実行可能なインストラクションと、これらインストラクションを実行するためのコンピュータシステムのプロセッサとを使用することにより実行できる。コンピュータシステムは、ワークステーション、ポータブルコンピュータ、クライアントサーバーシステム、或いはネットワーク編成のコンピュータ、記憶媒体、等の組合せでよい。
【００２６】
この実施形態に対して、コンピュータシステムは、プロセッサと、このプロセッサに結合され且つインストラクションが記憶されたメモリとを備えている。プロセッサにおいてインストラクションが実行されるときに、方法は、
アイテムに対するデータスペキュレーションがコンピュータソースプログラムに必要とされるかどうか判断するステップと、
実行時にデータスペキュレーションの明示的ソフトウェア制御を与えるコンピュータプログラムコードをコンピュータソースプログラムに挿入するステップと、
を備えている。
【００２７】
コンピュータプログラム製品は、
アイテムに対するデータスペキュレーションがコンピュータソースプログラムに必要とされるかどうか判断するステップと、
実行時にデータスペキュレーションの明示的ソフトウェア制御を与えるコンピュータプログラムコードをコンピュータソースプログラムに挿入するステップと、
を備えた方法のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成された媒体を備えている。
【００２８】
更に別の実施形態において、構造体は、状態のチェックポイント処理を遂行するようにインストラクションを実行する手段と、少なくとも１つのインストラクションのスペキュレーションの実行を開始する手段とを備えている。この構造体は、更に、スペキュレーションの実行が成功であったときにスペキュレーションの実行により行われたワークをコミットする手段と、スペキュレーションワークが不成功であるときにワークを破棄してその状態にロールバックする手段とを備えている。
【発明を実施するための最良の形態】
【００２９】
添付図面において、同じ参照番号をもつ要素は、同じ又は同様の要素である。又、参照番号の最初の数字は、その参照番号に関連した要素が最初に現われる図面番号を示す。
【００３０】
本発明の一実施形態によれば、アイテムに対するデータスペキュレーションは、明示的ソフトウェア制御のもとで実行される。単一スレッドデータスペキュレーションコードシーケンス１４０における一連のソフトウェアインストラクションがコンピュータシステム１００のプロセッサ１７０において実行される。
【００３１】
単一スレッドデータスペキュレーションコードシーケンス１４０における一連のソフトウェアインストラクションを実行すると、コンピュータシステム１００は、（ｉ）アイテムに対するデータスペキュレーションが必要とされるかどうか判断し、そしてデータスペキュレーションが必要とされるときには、コンピュータシステムは、（ii）コンピュータシステム１００の状態のスナップショットを撮って、そのスナップショットの状態へロールバックするための能力を維持し、（iii）アイテムに対してデータスペキュレーションを実行し、（iv）データスペキュレーションの結果を使用するコードセグメントを実行し、（ｖ）データスペキュレーションが有効かどうか判断し、（vi）データスペキュレーションが有効である場合にはスペキュレーションワークをコミットして、実行を継続し、又は（vii）データスペキュレーションが無効である場合にはスナップショット状態にロールバックして、実行を継続するようにさせる。
【００３２】
ユーザは、ソースプログラム１３０において明示的ソフトウェア制御を使用してアイテムに対するデータスペキュレーションの使用を制御することができる。或いは又、例えば、コンパイラー又は最適化インタープリターは、ソースプログラム１３０を処理する際に、レイテンシの長いインストラクションが予想されるポイントにおいてアイテムに対するデータスペキュレーションにわたって明示的ソフトウェア制御を与えるインストラクションを挿入することができる。
【００３３】
より詳細には、一実施形態において、プロセス２００は、明示的ソフトウェア制御を使用してデータスペキュレーションを制御するようにプログラムコードを変更するのに使用される。レイテンシの長いインストラクションのチェックオペレーション２０１において、インストラクションの実行が多数のプロセッササイクルを必要とすることが予想されるかどうかの判断がなされる。インストラクションが多数のプロセッササイクルを必要とすることが予想されない場合には、処理が通常に続けられ、レイテンシの長いインストラクションに関連したアイテムに対するデータスペキュレーションの明示的ソフトウェア制御を含むようにコードが変更されない。逆に、インストラクションが多数のプロセッササイクルを必要とすることが予想される場合には、処理がデータスペキュレーションオペレーション２０２の明示的ソフトウェア制御へ移行し、そこで、アイテムに対するデータスペキュレーションの明示的ソフトウェア制御のためのインストラクションがソースプログラム１３０に含まれる。
【００３４】
この実施形態では、実行時にデータスペキュレーションチェックオペレーション２１０を実行する命令（１つ又は複数）がソースプログラム１３０に追加される。以下により完全に説明するように、このインストラクションの実行は、データスペキュレーションが実行されるかどうかについての明示的制御をプログラムに与える。データスペキュレーションが必要とされず、即ちアイテムの値が入手できる場合には、処理が通常に続けられる。逆に、データスペキュレーションが必要な場合には、データスペキュレーションチェックオペレーション２１０は、処理をソフトウェア制御のデータスペキュレーションオペレーション２１１へ移行させる。
【００３５】
ソフトウェア制御のデータスペキュレーションオペレーション２１１において、この実施形態では、ソフトウェアコードのセグメントの実行に応答して上述したオペレーション（ii）から（vii）が遂行されるように、インストラクションが含まれる。より詳細には、ソフトウェアインストラクションは、状態のスナップショットを撮るようにプロセッサ１７０に指令し、そしてその後の全ての変更をその状態へと管理して、必要に応じて、プロセッサ１７０がスナップショットの時間にその状態に復帰できるようにする。
【００３６】
撮られるスナップショットは、捕えられる状態に依存する。一実施形態では、状態がシステム状態である。別の実施形態では、状態がマシン状態であり、そして更に別の実施形態では、状態がプロセッサ状態である。各々の場合、後続オペレーションが同等である。
【００３７】
スナップショットに続いて、データスペキュレーションが実行されるアイテムの値が、アイテムの予想値に等しくセットされる。次いで、アイテムの予想値を使用してオリジナルコードシーケンスが実行される。
【００３８】
コードシーケンスの実行が完了すると、アイテムの予想値が、アイテムの実際の値と比較される。２つの値が同じである場合には、計算の結果がコミットされるが、さもなければ、状態がスナップショット状態へロールバックされ、アイテムの実際の値で実行が続けられる。
【００３９】
データスペキュレーションの明示的ソフトウェア制御が有益である場合には、ソフトウェアアプリケーションは、３つの特性を有するのが理想的である。第１に、長いレイテンシの後に結果を入手できるオペレーションがなければならない。最も一般的な原因は、キャッシュを頻繁にミスするロードのようなレイテンシの長いオペレーションである。第２に、オペレーションの結果が、予想可能である。第３に、後続オペレーションが、レイテンシの長いオペレーションの結果に依存する。
【００４０】
一実施形態では、ソフトウェアを使用してプロセス２００を実施すると共に、ソフトウェアは、インストラクションの実行から生じる値に対してスペキュレーションすべきところの各インストラクションを識別する。これは、プログラマーの指令、コンパイラー分析、又はプロファイラーフィードバックから行うことができる。インストラクションを識別するのに使用されるプロセスとは独立して、オペレーションの結果の値でスペキュレーションすることによりデータ依存性を断ち切ることが潜在的に有益であることをプロセスが判断する。
【００４１】
ソースプログラム１３０においてデータスペキュレーションの明示的ソフトウェア制御をどこに挿入すべきか、例えば、挿入ポイントを判断するための他の実施形態が、クインＡ．ヤコブソン氏の「METHOD AND STRUCTURE FOR CINVERTING DATA SPECURATION TO CONTROL SPECULATION」と題する共通に譲渡された米国特許出願第１０／３４９，４２５号に開示されている。この米国特許出願第１０／３４９，４２５号の発明の概要、図面の簡単な説明、詳細な説明、添付図面、特許請求の範囲、及び要約書の全体を参考としてここに援用する。米国特許出願第１０／３４９，４２５号において挿入されるコードセグメントは、以下により完全に述べる明示的ソフトウェア制御と置き換えられる。又、米国特許出願第１０／３４９，４２５号の実施形態は、データスペキュレーションの明示的ソフトウェア制御の他の実施形態の例であることに注意されたい。
【００４２】
図３は、方法２００を使用して追加されるインストラクションの一実施形態に対して、アイテムのためのデータスペキュレーションの明示的ソフトウェア制御を与える方法３００を示すより詳細なプロセスフローチャートである。方法３００を更に説明するために、種々の例に対する擬似コードを以下に示す。データスペキュレーションに対して選択された擬似コードセグメントの一例をテーブル１に示す。
テーブル１
１  Ｐｒｏｄｕｃｅｒ＿ＯＰ  Ａ、Ｂ  −＞  ％ｒＺ
・・・
２  Ｃｏｎｓｕｍｅｒ＿ＯＰ  ％ｒＺ、Ｃ−＞  Ｄ
・・・
【００４３】
行１（行番号は、擬似コードの部分ではなく、参照として使用されるに過ぎない）は、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰで、これは、アイテムＡ及びＢを使用し、そしてオペレーションの結果をレジスタ％ｒｚに入れる。オペレーションＰｒｏｄｕｃｅｒ＿ＯＰは、インストラクションセットでサポートされる任意のオペレーションでよい。アイテムＡ及びＢは、この特定のオペレーションが２つの入力を要求することを指示するためのプレースホルダーとして単に使用される。本発明の種々の実施形態は、単一入力又は３つ以上の入力を有するオペレーションにも適用できる。レジスタ％ｒＺは、任意のレジスタでよい. オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの結果は、長いレイテンシの後まで得ることができず、そしてレジスタに得られる値又は絶対値のいずれかをＮとすれば、結果は値Ｎになることが予想される。
【００４４】
行２は、オペレーションＣｏｎｓｕｍｅｒ＿ＯＰである。このオペレーションＣｏｎｓｕｍｅｒ＿ＯＰは、レジスタ％ｒＺに記憶されたオペレーションＰｒｏｄｕｃｅｒ＿ＯＰの結果を使用する。アイテムＣ及びＤは、この特定のオペレーションが２つの入力％ＲＺ及びＣを必要とし且つ出力Ｄを有することを指示するためのプレースホルダーとして単に使用される。この実施形態では、オペレーションＣｏｎｓｕｍｅｒ＿ＯＰは、一行の擬似コードで表わされるが、オペレーションＣｏｎｓｕｍｅｒ＿ＯＰは、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの結果を使用するコードセグメントを表わす。コードセグメントは、一行以上のソフトウェアコードを含んでもよい。
【００４５】
テーブル１の擬似コードに対して方法２００を使用することにより発生される擬似コードが、テーブル２の行Ｉｎｓｅｒｔ＿２１からＩｎｓｅｒｔ＿３０に表わされている。
テーブル２
１  Ｐｒｏｄｕｃｅｒ＿ＯＰ  Ａ、Ｂ  −＞  ％ｒＺ
Ｉｎｓｅｒｔ＿２１  ｄａｔａ＿ｓｐｅｃｕｌａｔｉｏｎの場合、予想へ分岐
・・・
Ｉｎｓｅｒｔ＿２２  オリジナル：
２  Ｃｏｎｓｕｍｅｒ＿ＯＰ  ％ｒＺ、Ｃ  −＞  Ｄ
Ｉｎｓｅｒｔ＿２３  継続：
Ｉｎｓｅｒｔ＿２４  ＜Ｐｒｏｄｕｃｅｒ＿ＯＰの結果の予想を更新＞
・・・
Ｉｎｓｅｒｔ＿２５  予想；
Ｉｎｓｅｒｔ＿２６  チェックポイント、オリジナル
Ｉｎｓｅｒｔ＿２７  ＜Ｐｒｏｄｕｃｅｒ＿ＯＰの結果の予想を計算又は使用し、％ｒＺ１に記憶する＞
Ｉｎｓｅｒｔ＿２８  Ｃｏｎｓｕｍｅｒ＿ＯＰ  ％ｒＺ１、Ｃ  −＞  Ｄ
Ｉｎｓｅｒｔ＿２９  ％ｒＺ＝＝％ｒＺ１の場合には、コミット、さもなければ、フェイル
Ｉｎｓｅｒｔ＿３０  ｂａ  継続
この場合も、行番号は、擬似コードの部分ではなく、参照として使用されるに過ぎない。
【００４６】
この例では、行１は、挿入ポイントとして識別され、従って、行Ｉｎｓｅｒｔ＿２１、Ｉｎｓｅｒｔ＿２２、Ｉｎｓｅｒｔ＿２３、Ｉｎｓｅｒｔ＿２４、Ｉｎｓｅｒｔ＿２５、Ｉｎｓｅｒｔ＿２６、Ｉｎｓｅｒｔ＿２７、Ｉｎｓｅｒｔ＿２８、Ｉｎｓｅｒｔ＿２９、及びＩｎｓｅｒｔ＿３０は、方法２００を使用して挿入される。このシーケンスのインストラクションの特定の実施は、（ｉ）ソースプログラム１３０に使用されるコンピュータプログラミング言語、（ii）コンピュータシステム１００に使用されるオペレーティングシステム、及び（iii）プロセッサ１７０のインストラクションセット、の幾つか又は全部を含むファクタに依存する。この開示に鑑み、当業者であれば、いかなる当該システムにおける変換も実施することができよう。
【００４７】
挿入される行について最初に説明し、次いで、方法３００について詳細に考える。行Ｉｎｓｅｒｔ＿２１は、実行時に、データスペキュレーションが必要とされるかどうか、例えば、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの実際の結果が得られるかどうか判断する条件付きフロー制御ステートメントである。データスペキュレーションが必要とされ、例えば、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの結果が得られない場合には、処理が、行Ｉｎｓｅｒｔ＿２５であるラベル「予想」へと分岐する。さもなければ、処理は、行Ｉｎｓｅｒｔ＿２２であるラベル「オリジナル」を経て行２へ継続する。
【００４８】
行Ｉｎｓｅｒｔ＿２３は、ラベル「継続」である。処理は、データスペキュレーションの結果をコミットするのに続いてラベル「継続」へ移行する。又、処理は、データスペキュレーションが必要とされないとき、又はデータスペキュレーションがフェイルしたときにも、ラベル「継続」へ移行する。
【００４９】
行Ｉｎｓｅｒｔ＿２４は、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの値の予想を更新するコードセグメントである。ここに含まれるインストラクションは、値予想の形式に依存する。一定値予想が使用される場合には、このインストラクションは、ｎｏｐインストラクションである。他の実施形態では、最後の値又はストライディング(striding)予想装置を実施することができる。一般に、当業者であれば、適切な値予想機構をソフトウェアにおいて使用することができよう。
【００５０】
行Ｉｎｓｅｒｔ＿２６は、状態スナップショットを撮って、状態をそのスナップショットの状態にロールバックする能力を維持するようにプロセッサに指令するインストラクションである。この例では、チェックポイントインストラクションが使用される。
【００５１】
チェックポイントインストラクションに関連した方法及び構造の詳細な説明は、２００４年１月２３日に出願されたマーク・トレンブレイ、クインＡ．ヤコブソン、シャイレンダー・チャウドリー、マークＳ．モイア、及びマウライスＰ．ハーリー氏の「Selectively Unmarking Load-Marked Cache Lines During Transactional Program Execution」と題する共通に譲渡された米国特許出願第１０／７６４，４１２号に開示されている。この米国特許出願第１０／７６４，４１２号の発明の概要、図面の簡単な説明、詳細な説明、添付図面、特許請求の範囲、及び要約書の全体を参考としてここに援用する。
【００５２】
この実施形態では、チェックポイントインストラクションのシンタックスは、次の通りである。
ｃｈｅｃｋｐｏｉｎｔ、＜ｌａｂｅｌ＞
但し、インストラクション「チェックポイント」の実行は、プロセッサがこのスレッドの状態のスナップショットを撮るようにさせる。ラベル＜ｌａｂｅｌ＞は、チェックポイント処理がフェイルした場合に暗示的に又は明確に処理が移行するところの位置である。
【００５３】
プロセッサが状態のスナップショットを撮った後に、プロセッサは、例えば、スナップ状態における各位置の新たなデータをバッファする。又、プロセッサは、別のスレッドが、スペキュレーション実行の状態に影響するオペレーションを実行するかどうか、例えば、チェックポイント処理された状態における位置に書き込みするか、又はチェックポイント処理された状態における位置に値を記憶するかも監視する。このようなオペレーションが検出された場合には、スペキュレーションワークがフラッシュされ、スナップショット状態が回復され、そして処理がラベル＜ｌａｂｅｌ＞へ分岐する。これは、データスペキュレーションの暗示的フェイルである。
【００５４】
チェックポイント処理の明示的フェイルは、ステートメント「フェイル」の実行により生じる。ステートメント「フェイル」を実行すると、プロセッサは、スペキュレーションワークをドロップさせ、状態をスナップショット状態に復帰させ、そしてラベル＜ｌａｂｅｌ＞へ分岐させる。ステートメント「コミット」を実行すると、プロセッサが、最後のチェックポイント処理以来行われた全てのスペキュレーションワークをコミットするようにさせる。
【００５５】
行Ｉｎｓｅｒｔ＿２７は、実行時に、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの予想値を決定し、そしてその予想値をレジスタ％ｒＺ１に記憶するインストラクション又はコードセグメントである。例えば、一定値予想が使用される場合には、一定値がレジスタ％ｒＺ１へ移動される。
【００５６】
行Ｉｎｓｅｒｔ＿２８において、行２で表わされたコードセグメントは、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの実際の値に代わって予想値が使用される同様のコードセグメントに置き換えられ、即ちレジスタ％ｒｚがオリジナルコードセグメントにおいてレジスタ％ｒｚ１に置き換えられる。
【００５７】
行Ｉｎｓｅｒｔ＿２９において、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの予想値が、オペレーションＰｒｏｄｕｃｅｒ＿ＯＰの実際の値と比較される。２つの値が等しい場合には、インストラクション「コミット」の実行によりスペキュレーションワークがコミットされる。２つの値が等しくない場合には、スペキュレーションワークがフラッシュされ、状態がスナップショット状態に復帰され、そして処理がインストラクション「フェイル」の実行によりラベル「オリジナル」に移行する。従って、行Ｉｎｓｅｒｔ＿３０に到達すると、スペキュレーションワークがコミットされ、従って、処理は、常に、ラベル「継続」に分岐する。
【００５８】
テーブル２のコードセグメントがプロセッサ１７０において実行されるときに、方法３００が実行される。データスペキュレーションチェックオペレーション３１０において、レイテンシの長いインストラクションに対してデータスペキュレーションが必要とされるかどうか判断するためのチェックが行われる。例えば、レイテンシの長いインストラクションの結果が得られる場合には、データスペキュレーションが性能を向上させない。従って、レイテンシの長いインストラクションの結果が得られるときに、チェックオペレーション３１０は、実際値オペレーション３３０を使用してオリジナルコードセグメントを実行するように処理を移行させる。さもなければ、レイテンシの長いインストラクションの結果が得られないときには、チェックオペレーション３１０は、明示的ソフトウェア制御オペレーション３２０のもとでのデータスペキュレーションへ処理を移行させる。
【００５９】
明示的ソフトウェア制御オペレーション３２０のもとでのデータスペキュレーションの一実施形態では、状態をチェックポイント処理するようにハードウェアを指令するオペレーション３２１は、現在状態のスナップショット、即ちスナップショット状態をプロセッサ１７０により撮影するようにさせる。状態チェックポイント処理オペレーション３２１が完了すると、処理は、オペレーション３２１からデータスペキュレーション実行３２２へ移行する。
【００６０】
データスペキュレーション実行３２２は、レイテンシの長いインストラクションの実行により得たアイテムの値を予想値にセットする。オペレーション３２２が完了すると、処理は、オペレーション３２２から、予想値を使用してオリジナルコードセグメントを実行するオペレーション３２３へ移行する。
【００６１】
オペレーション３２３では、オリジナルコードセグメントにおいて実際の値に置き換わる予想値でオリジナルコードセグメントが実行される。実行中に暗示的チェックポイント処理フェイルがある場合は、データスペキュレーションが終了となり、処理は、オペレーション３２３から、状態をチェックポイント処理するようにロールバックするオペレーション３２５へ移行する。逆に、実行が首尾良く完了すると、処理は、オペレーション３２３から、予想と実際とが等しいかどうかチェックするオペレーション３２４へ移行する。
【００６２】
予想と実際とが等しいかどうかチェックするオペレーション３２４は、レイテンシの長いインストラクションの予想値を実際の値と比較する。２つの値が等しい場合には、オペレーション３２３の結果が有効であり、処理は、スペキュレーションコミットオペレーション３２６へ移行して、データスペキュレーションに基づく実行の結果をコミットする。２つの値が等しくない場合には、オペレーション３２３の結果が有効でなく、処理は、状態をチェックポイント処理するようにロールバックするオペレーション３２５移行する。
【００６３】
状態をチェックポイント処理するようにロールバックするオペレーション３２５では、スナップショット状態が実際の状態として復帰され、処理は、実際の値を使用してオリジナルコードを実行するオペレーション３３０へ移行する。実際の値を使用してオリジナルコードを実行するオペレーション３３０は、レイテンシの長いインストラクションの実際の値を使用してオリジナルコードセグメントを実行する。
【００６４】
方法４００は、明示的ソフトウェア制御のもとでデータスペキュレーションを行うプロセスフローの別の実施形態である。この実施形態では、新規なデータレディチェックオペレーション４１０が使用される。このチェックオペレーション４１０は、状態で分岐するインストラクションの実施形態、例えば、レジスタ状態で分岐するインストラクションを使用して実施される。レジスタ状態で分岐するインストラクションの実行は、このレジスタ状態で分岐するインストラクションがディスパッチされたときにプロセッサ１７０のスコアボード１７３をテストする。レジスタの状態がレディである場合には、実行が継続される。レジスタの状態がレディでない場合には、レジスタ状態で分岐するインストラクションで指定されたラベルへ実行が分岐する。レジスタ状態で分岐するインストラクションの一実施形態に対するフォーマットは、次の通りである。
Ｂｒａｎｃｈ＿ｉｆ＿ｎｏｔ＿ｒｅａｄｙ  ％ｒｅｇ  ｌａｂｅｌ
但し、
％ｒｅｇは、この実施形態ではハードウェアインストラクションスコアボードであるスコアボード１７３におけるレジスタであり、そして
ｌａｂｅｌは、データスペキュレーションコードセグメントにおけるラベルである。
【００６５】
このインストラクションでは、テーブル２の擬似コードは、次のようになる。
テーブル３
１  Ｐｒｏｄｕｃｅｒ＿ＯＰ  Ａ、Ｂ  −＞  ％ｒＺ
Ｉｎｓｅｒｔ＿３１  Ｂｒａｎｃｈ＿ｉｆ＿ｎｏｔ＿ｒｅａｄｙ  ％ｒＺ  予想
・・・
Ｉｎｓｅｒｔ＿２２  オリジナル：
２  Ｃｏｎｓｕｍｅｒ＿ＯＰ  ％ｒＺ、Ｃ  −＞  Ｄ
Ｉｎｓｅｒｔ＿２３  継続：
Ｉｎｓｅｒｔ＿２４  ＜Ｐｒｏｄｕｃｅｒ＿ＯＰの結果の予想を更新＞
・・・
Ｉｎｓｅｒｔ＿２５  予想；
Ｉｎｓｅｒｔ＿２６  チェックポイント、オリジナル
Ｉｎｓｅｒｔ＿２７  ＜Ｐｒｏｄｕｃｅｒ＿ＯＰの結果の予想を計算又は使用し、％ｒＺ１に記憶する＞
Ｉｎｓｅｒｔ＿２８  Ｃｏｎｓｕｍｅｒ＿ＯＰ  ％ｒＺ１、Ｃ  −＞  Ｄ
Ｉｎｓｅｒｔ＿２９  ％ｒＺ＝＝％ｒＺ１の場合には、コミット、さもなければ、フェイル
Ｉｎｓｅｒｔ＿３０  ｂａ  継続
【００６６】
レジスタ状態で分岐するインストラクションを使用するコードは、ディスパッチグループ分けルール及びオペレーションの予想レイテンシを理解するのが重要である。レディでない状態で分岐するインストラクションが、ロードインストラクションの直後に発行された場合には、このインストラクションは、通常、ロードをレディでないとして見る。というのは、例えば、ロードは、レベル１のデータキャッシュヒットの場合でも３サイクルの最小レイテンシがあるからである。
【００６７】
状態情報に基づく新規な分岐インストラクションの詳細な説明が、マーク・トレンブレイ、シャイレンダー・チャウドリー、及びクインＡ．ヤコブソン氏の「METHOD AND STRUCTURE FOR EXPLICIT SOFTWARE CONTROL USING SCOREBOARD STATUS INFORMATION」と題する共通に出願され且つ共通に譲渡された米国特許出願第１１／ｘｘｘ，ｘｘｘ号（代理人ドケットNo.ＳＵＮ０４００６２）に開示されている。この米国特許出願の発明の概要、詳細な説明、特許請求の範囲、要約書、それらのセクションで引用される図面、及び図面の簡単な説明を参考としてここに援用する。
【００６８】
従って、レジスタ状態で分岐するインストラクションの実行に伴い、データレディチェックオペレーション４１０は、スコアボード１７３におけるレジスタ％ｒＺの状態がレディである場合にはオペレーション３３０へ移行し、又、レジスタ％ｒＺの状態がレディでない場合にはオペレーション３２０へ移行する。オペレーション３１０及び３２０は、上述したものと同じであり、その説明を参考としてここに援用する。
【００６９】
当業者であれば、この実施形態において、方法３００及び４００に関連して上述した個々のオペレーションは、コンピュータシステム１００のプロセッサ１７０でコンピュータプログラムインストラクションを実行することにより遂行されることが容易に理解されよう。一実施形態では、記憶媒体は、方法５４０（図５）のためのコンピュータ読み取り可能なプログラムコードをインストールしており、ここで、方法５４０は、方法３００及び４００のいずれか又は両方であり、コンピュータ読み取り可能なプログラムコードを実行すると、プロセッサ１７０は、上述したオペレーションを遂行する。
【００７０】
一実施形態において、コンピュータシステム１００は、パーソナルコンピュータ又はワークステーションのようなハードウェアコンフィギュレーションである。しかしながら、別の実施形態では、コンピュータシステム１００は、クライアント−サーバーコンピュータシステム５００の一部分である。クライアント−サーバーコンピュータシステム５００又はスタンドアローンコンピュータシステム１００のいずれについても、メモリ１２０は、通常、メインメモリ５１０のような揮発性メモリと、ハードディスクドライブのような不揮発性メモリ５１１の両方を含む。
【００７１】
メモリ１２０は、図１には統合構造として示されているが、これは、メモリ１２０内の全てのメモリが同じ物理的位置にあることを要求するものとして解釈してはならない。メモリ１２０の全部又は一部分は、プロセッサ１７０とは異なる物理的位置にあってもよい。例えば、方法５４０は、プロセッサ１７０とは異なる位置に物理的に置かれたメモリに記憶されてもよい。
【００７２】
プロセッサ１７０は、方法５４０を含むメモリに結合されねばならない。これは、クライアント−サーバーシステムにおいて達成することもできるし、或いは又、モデム及びアナログライン、又はデジタルインターフェイス及びデジタルキャリアラインを経て別のコンピュータへ至る接続により達成することもできる。例えば、メモリ１２０の全部又は一部分がワールドワイドウェブポータルにあり、一方、プロセッサ１７０が、例えば、パーソナルコンピュータにあってもよい。
【００７３】
より詳細には、コンピュータシステム１００は、一実施形態において、ポータブルコンピュータ、ワークステーション、サーバーコンピュータ、又は方法５４０を実行できる他の装置でよい。同様に、別の実施形態では、コンピュータシステム１００は、多数の異なるコンピュータ、ワイヤレス装置、サーバーコンピュータ、或いは上述したように方法５４０を遂行するよう相互接続されるこれら装置の希望の組合せで構成することもできる。
【００７４】
ここでは、コンピュータプログラム製品は、方法５４０のためのコンピュータ読み取り可能なコードを記憶又は搬送するように構成されるか、又は方法５４０のためのコンピュータ読み取り可能なコードが記憶された媒体を備えている。コンピュータプログラム製品の幾つかの例は、ＣＤ−ＲＯＭディスク、ＲＯＭカード、フロッピー（登録商標）ディスク、磁気テープ、コンピュータハードディスク、ネットワーク上のサーバー、及びコンピュータ読み取り可能なプログラムコードを表わすネットワークを経て送信される信号である。
【００７５】
ここでは、コンピュータメモリは、揮発性メモリ、不揮発性メモリ、或いはその２つの組合せを指す。同様に、コンピュータ入力ユニット、例えば、キーボード５１５及び／又はマウス５１８、並びにディスプレイユニット５１６は、上述した装置又は同等の装置のいずれかに、各々、ここに述べる情報を入力し、又、ここに述べる情報を表示するのに必要な機能を与える特徴を指す。
【００７６】
この開示に鑑み、方法５４０は、ユーザにとって関心のあるオペレーティングシステム及びコンピュータプログラミング言語を使用する種々様々なコンピュータシステムコンフィギュレーションにおいて実施することができる。更に、方法５４０は、異なる装置のメモリに異なるモジュールとして記憶することができる。例えば、方法５４０は、最初に、サーバーコンピュータ５８０の記憶することができ、次いで、必要に応じて、方法５４０のモジュールをクライアント装置へ転送してクライアント装置で実行することができる。従って、方法５４０の一部分がサーバープロセッサで実行され、そして方法５４０の別の部分がクライアント装置のプロセッサで実行される。
【００７７】
更に別の実施形態では、方法５４０は、別のコンピュータシステムのメモリに記憶される。記憶された方法５４０は、ネットワーク５０４を経て、システム１００のメモリ１２０へ転送される。
【００７８】
方法５４０は、一実施形態では、コンピュータソースプログラム１３０を使用して実施される。コンピュータプログラムは、例えば、フロッピー（登録商標）ディスク又はコンパクトディスク（ＣＤ）のような任意の通常のデータキャリア、並びにハードディスクのような任意の通常のコンピュータシステムの記憶ファシリティに記憶されてもよい。それ故、本発明の一実施形態は、本発明の方法を実施するためのコンピュータソースプログラムを記憶するデータキャリアにも係る。又、本発明の別の実施形態は、コンピュータシステムを使用して方法５４０を実施する方法にも係る。本発明の更に別の実施形態は、方法５４０を実施するコンピュータプログラムが記憶された記憶媒体をもつコンピュータシステムにも係る。
【００７９】
方法５４０は、その一実施形態に関連して以上に説明したが、当業者であれば、本発明の精神及び範囲から逸脱せずにこの実施形態に対して変更をなし得ることが容易に理解されよう。
【００８０】
機能的ユニット、即ちレジスタファイル１７１及びスコアボード１７３は、例示に過ぎず、本発明を、図１に示す特定のレイアウトに限定するものではない。プロセッサ１７０は、単一チップ上に複数のプロセッサを含んでもよい。複数のプロセッサの各々は、独立したレジスタファイル及びスコアボードを有してもよいし、或いはレジスタファイル及びスコアボードが、あるやり方で、共有又は結合されてもよい。同様に、レジスタファイル１７１は、１つ以上のレジスタファイルで作られてもよい。又、スコアボード１７３の機能は、当業者に知られた種々様々なやり方で実施することができ、例えば、スコアボードに代わって、ハードウェア状態ビットをサンプリングすることができる。それ故、状態情報を得るためのスコアボードの使用は、例示に過ぎず、本発明を、スコアボードのみの使用に限定するものではない。
【図面の簡単な説明】
【００８１】
【図１】本発明の第１の実施形態に基づきデータスペキュレーションの明示的ソフトウェア制御を与える単一スレッドのデータスペキュレーションコードシーケンスを含むソースプログラムを備えたシステムを示すブロック図である。
【図２】本発明の一実施形態に基づきソースコンピュータプログラムの適切なポイントにデータスペキュレーションの明示的ソフトウェア制御のための単一スレッドデータスペキュレーションコードシーケンスを挿入する一実施形態を示すプロセスフローチャートである。
【図３】本発明の一実施形態に基づきデータスペキュレーションの明示的ソフトウェア制御のためのプロセスフローチャートである。
【図４】本発明の別の実施形態に基づきデータスペキュレーションの明示的ソフトウェア制御のためのプロセスフローチャートである。
【図５】データスペキュレーションの明示的ソフトウェア制御を与える単一スレッドのデータスペキュレーションコードシーケンスを含むソースプログラムを使用するための多数の別々の実施形態を示す高レベルネットワークシステム図である。
【図１】
2007531164.tif 000003
【図２】
2007531164.tif 000004
【図３】
2007531164.tif 000005
【図４】
2007531164.tif 000006
【図５】
2007531164.tif 000007
【国際調査報告】
2007531164.tif 000008