(57)【要約】本発明の一実施形態は、ストール中に“ハードウェア・スカウト・スレッディング”として知られる技法を通して投機的にコードを実行することによってプリフェッチを生成するシステムを提供する。このシステムは、プロセッサ内でコードを実行することによって立ち上がる。ストールが生じると、投機的実行の結果が生み出すプロセッサのアーキテクチャ状態への確定なしで、ストールした点からコードを投機的に実行する。もしシステムに、この投機的実行の間にメモリ参照が生じたら、システムは、ターゲット・アドレスがこのメモリ参照を決定することが可能かどうかを判定する。もし可能であると判定すれば、システムは、メモリ参照にプリフェッチを発行し、プロセッサ内のキャッシュにメモリ参照のためのキャッシュ・ラインをロードする。
2006518053.tif 000002
【特許請求の範囲】
【請求項１】
ストール中にコードを投機的に実行することによってプリフェッチを生成するための方法であって、
プロセッサ内でコードを実行すること；
前記コードの実行中にストールが生ずれば、前記ストール点から前記コードを投機的に実行するが、前記プロセッサのアーキテクチャ状態に対する前記投機的実行の結果の確定はしないこと；および
前記コードの投機的実行中にメモリ参照が生ずれば、
前記メモリ参照のためのターゲット・アドレスを決定することが可能かどうか判定すること、および
前記メモリ参照のための前記ターゲット・アドレスを決定することが可能ならば、前記メモリ参照に前記メモリ参照のためのキャッシュ・ラインを前記プロセッサ内のキャッシュにロードするためのプリフェッチを発行すること；
を含む方法。
【請求項２】
請求項１の方法であって、さらに前記レジスタ中の値が前記コードの投機的実行中に更新されたかどうかを示す状態情報を維持することを含む方法。
【請求項３】
請求項２の方法であって、前記コードの投機的実行中、前記方法は、アーキテクチャル・レジスタ・ファイルを更新する代わりに、シャドウ・レジスタ・ファイルを更新し、これによって前記投機的実行が前記プロセッサの前記アーキテクチャ状態に影響しないようにする方法。
【請求項４】
請求項３の方法であって、読み込みがシャドウ・レジスタ・ファイルにアクセスする場合投機的実行中に前記レジスタが更新されていないかぎり、前記コードの投機的実行中にレジスタから読み込むことによって前記アーキテクチュアル・レジスタ・ファイルへアクセスする方法。
【請求項５】
請求項２の方法であって、レジスタ中の値が投機的実行中に更新されたかどうかを示す状態情報の維持は、
前記レジスタが投機的実行中に書き込まれたかどうかを示す各レジスタの“書き込みビット”を維持すること；および
投機的実行中に更新された任意のレジスタの書き込みビットを設定すること
を含む方法。
【請求項６】
請求項１の方法であって、さらに前記レジスタ内の値を投機的実行中に決定することができるかどうかを示す状態情報を維持することを含む方法。
【請求項７】
請求項６の方法であって、前記レジスタ内の値が投機的実行中に決定することができるかどうかを示す状態情報の維持は、
前記レジスタ中の値が投機的実行中に決定することが可能かどうかを示す各レジスタの“不在ビット”を維持すること；
ロードがデスティネーション・レジスタに値を返していなければ、投機的実行中に前記ロードのために前記デスティネーション・レジスタの不在ビットを設定すること；および
任意のソース・レジスタの前記不在ビットが設定されていれば、投機的実行中に命令のデスティネーション・レジスタの前記不在ビットを設定すること
を含む方法。
【請求項８】
請求項７の方法であって、前記メモリ参照のためのアドレスを決定することが可能かどうかの判定は、前記メモリ参照のためのアドレスを含むレジスタの前記“不在ビット”を審査することを含み、設定された前記不在ビットが、前記メモリ参照のためのアドレスを決定することができないことを示す方法。
【請求項９】
請求項１の方法であって、ストールが終わったとき、前記ストール点から前記コードの非投機的実行を再開することを含む方法。
【請求項１０】
請求項９の方法であって、前記コードの非投機的実行の再開は、
前記レジスタと関連する“不在ビット”をクリアすること、
前記レジスタと関連する“書き込みビット”をクリアすること、
投機的ストア・バッファをクリアすること、および
ストール点から前記コードの実行を再開するためにブランチ誤予測動作を行うこと
を含む方法。
【請求項１１】
請求項１の方法であって、さらに、
投機的ストア動作によりメモリ・ロケーションに書き込まれたデータを含む投機的ストア・バッファを維持すること；および
後続の前記と同じメモリ・ロケーションへ向けられる投機的ロード動作が前記投機的ストア・バッファからのデータへアクセスすることを可能にすること
を含む方法。
【請求項１２】
請求項１の方法であって、前記ストールが、
ロード・ミスストール；
ストア・バッファ・フルストール；および
メモリ・バッファストール
を含みうる方法。
【請求項１３】
請求項１の方法であって、前記コードを投機的に実行することが、浮動点および長期レイテンシ・命令の実行をスキップすることを含む方法。
【請求項１４】
ストール中にコードを投機的に実行することによってプリフェッチを生成する装置であって、
プロセッサ；および
前記プロセッサ内の実行機構
を含み、コードの実行中にストールが生ずれば、前記実行機構がストール点から前記コードを、前記プロセッサのアーキテクチャ状態への投機的実行の結果の確定をすることなく投機的に実行するように構成されており、
前記コードの投機的実行中にメモリ参照が生ずれば、前記実行機構が、
前記メモリ参照のターゲット・アドレスを決定することが可能かどうかを判定するように、および
もし前記メモリ参照のための前記ターゲット・アドレスを決定することが可能ならば、前記メモリ参照のためのキャッシュ・ラインを前記プロセッサ内のキャッシュにロードするための前記メモリ参照のためのプリフェッチを発行するように
構成されている装置。
【請求項１５】
請求項１４の装置であって、前記実行機構が、前記レジスタ中の値が前記コードの投機的実行中に更新されているかどうかを示す状態情報を維持するように構成されている装置。
【請求項１６】
請求項１５の装置であって、前記プロセッサが、
アーキテクチャル・レジスタ・ファイル；および
シャドウ・レジスタ・ファイル；
を含み、前記コードの投機的実行中に、前記実行機構は命令が、前記アーキテクチュアル・レジスタ・ファイルを更新する代わりに、前記シャドウ・レジスタ・ファイルを更新することを確実にして、前記投機的実行が前記プロセッサの前記アーキテクチャ状態に影響を与えないようにするように構成される装置。
【請求項１７】
請求項１６の装置であって、前記読み込みが前記シャドウ・レジスタ・ファイルにアクセスする場合、前記レジスタが投機的実行中に更新されていない限り、前記実行機構が前記コードの投機的実行中のレジスタからの読み込みが、前記アーキテクチュアル・レジスタ・ファイルにアクセスすることを確実にするように構成されている装置。
【請求項１８】
請求項１５の装置であって、前記実行機構が、
投機的実行中に前記レジスタが書き込まれたかどうかを示す各レジスタのための“書き込みビット”を維持し、
投機的実行中に更新される任意のレジスタの書き込みビットを設定する
ように構成されている装置。
【請求項１９】
請求項１４の装置であって、前記実行機構が前記レジスタ内の前記値が投機的実行中に決定することができるかどうかを示す状態情報を維持するように構成されている装置。
【請求項２０】
請求項１９の装置であって、
前記実行機構が、
前記レジスタの値が投機的実行中に決定することが可能かどうかを示す、各レジスタのための“不在ビット”を維持するように；
ロードが値をデスティネーション・レジスタに返していなければ、投機的実行中前記ロードのために前記デスティネーション・レジスタの前記不在ビット設定し、
命令の任意のソース・レジスタの不在ビットが設定されているならば、投機的実行中に前記命令の前記デスティネーション・レジスタの前記不在ビットを設定する
ように構成される装置。
【請求項２１】
請求項２０の装置であって、前記メモリ参照のためのアドレスを決定することが可能かどうかを判定する間、前記実行機構が前記メモリ参照のための前記アドレスを含むレジスタの“不在ビット”審査するように構成され、設定される前記不在ビットが、前記メモリ参照のためのアドレスを決定することができないことを指示する装置。
【請求項２２】
請求項１４の装置であって、前記ストールが終了したとき、前記実行機構が前記ストール点から前記コードの非投機的実行を再開するように構成されている装置。
【請求項２３】
請求項２２の装置であって、前記コードの非投機的実行を再開する間、前記実行機構が、
前記レジスタと関連する“不在ビット”をクリアし、
前記レジスタと関連する“書き込みビット”をクリアし、
投機的ストア・バッファをクリアし、
前記ストール点から前記コードの実行を再開するためのブランチ誤予測動作を行うように構成された装置。
【請求項２４】
請求項１４の装置であって、前記プロセッサが
投機的ストア動作によってメモリ・ロケーションに書き込まれたデータを含む投機的ストア・バッファを含み；
前記実行機構が、前記同メモリ・ロケーションに向けられる後続の推測ロード動作が前記投機的ストア・バッファからデータにアクセスすることができるように構成されている装置。
【請求項２５】
請求項１４の装置であって、前記ストールが
ロード・ミスストール；
ストア・バッファ・フルストール；および
メモリ・バッファストール
を含みうる装置。
【請求項２６】
請求項１４の装置であって、前記コードを投機的に実行する間、前記実行機構が浮動点および他の長期レイテンシ・命令の実行をスキップするように構成されている装置。
【請求項２７】
ストール中にコードを投機的に実行することによってプリフェッチを生成するコンピュータ・システムであって、前記システムは、
メモリ；
プロセッサ；および
前記プロセッサ内の実行機構
を含み、前記実行機構はコードの実行中にストールが生じれば、前記ストール点から前記コードを投機的に実行するが、投機的実行の前記プロセッサのアーキテクチャ状態への結果の確定はしないするように構成され、
前記実行機構が、前記コードの前記投機的実行中にメモリ参照が生じれば、
前記メモリ参照のためのターゲット・アドレスを決定することが可能かどうか、および
前記メモリ参照のための前記ターゲット・アドレスが決定することが可能かどうかを
前記メモリ参照のためのキャッシュ・ラインを前記プロセッサ内のキャッシュにロードするための前記メモリ参照のためのプリフェッチを発行するために、
判定するように構成されるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（発明の分野）
本発明は、コンピュータ・システム内のプロセッサの設計に関する。さらに具体的には、本発明は、ハードウェア・スカウト・スレッディングを通してストール状態中にコードを推測で実行することによってプリフェッチを生成する方法および装置に関する。
【背景技術】
【０００２】
（関連技術）
最近のマイクロプロセッサ・クロック速度の増加は、対応するメモリ・アクセス速度の増加と整合がとれていない。このため、マイクロプロセッサ速度とメモリ・アクセス速度間の格差が拡大し続けている。高速マイクロプロセッサ・システムの実行プロファイルによれば、実行時間の大部分が、マイクロプロセッサ・コア中ではなく、マイクロプロセッサ・コアの外側のメモリ構造内で費やされていることがわかる。このことは、マイクロプロセッサが計算動作を行う代わりにメモリ参照を待って留まっている時間に大部分の時間を費やすことを意味する。
【０００３】
メモリ・アクセスを行うのにより多くのプロセッサ・サイクルが要求されれば、“アウト・オブ・オーダ実行”を指示するプロセッサでも、メモリ・レイテンシを効果的に隠すことはできない。設計者たちは、新たなメモリ・レイテンシを隠そうとして、アウト・オブ・オーダ・マシン中の命令・ウィンドウのサイズを増やし続けている。しかしながら、命令・ウィンドウ・サイズを増やすことは、チップ・エリアを消費し、新たな伝播遅延を導入し、マイクロプロセッサ性能を低下させうる。
【０００４】
プリフェッチされたデータ・アイテムが必要になる場合に先立って、明示的なプリフェッチ命令を実行可能なコードに挿入するために、多数のコンパイラ・ベース技法が開発されている。このようなプリフェッチ技法は、正規の“ストライド”を有するデータ・アクセス・パタンのためのプリフェッチを生成する上で効果的であり得、後続のデータ・アクセスを正確に予測することができる。しかしながら、既存のコンパイラ・ベース技法は、不規則なデータ・アクセス・パタンのためのプリフェッチを生成する上で効果的ではない。というのは、これらのデータ・アクセス・パタンのキャッシュ動作は、編集時に予測できないからである。
【０００５】
したがって、必要とされるのは、上述の問題なしにメモリ・レイテンシを隠す方法および装置である。
【発明の開示】
【課題を解決するための手段】
【０００６】
（要約）
本発明の一実施形態は、ストール中に“ハードウェア・スカウト・スレッディング”として知られる技法を通して投機的にコードを実行することによってプリフェッチを生成するシステムを提供する。このシステムは、プロセッサ内でコードを実行することによって立ち上がる。ストールが生じると、投機的実行の結果が生み出すプロセッサのアーキテクチャ状態への確定なしで、ストールした点からコードを投機的に実行する。もしシステムに、この投機的実行の間にメモリ参照が生じたら、システムは、ターゲット・アドレスがこのメモリ参照を決定することが可能かどうかを判定する。もし可能であると判定すれば、システムは、メモリ参照にプリフェッチを発行し、プロセッサ内のキャッシュにメモリ参照のためのキャッシュ・ラインをロードする。
【０００７】
この実施形態の一変形において、システムは、コードの投機的実行中にレジスタ中の値が更新されたかどうかを示す状態情報を維持する。
【０００８】
この実施形態の一変形において、コードの投機的実行の間に、命令は、アーキテクチャ的なレジスタ・ファイルを更新する代わりにシャドウ・レジスタ・ファイルを更新するので、投機的実行がプロセッサのアーキテクチャ状態に影響することがない。
【０００９】
さらなる実施形態において、投機的実行の間のレジスタからの読み取りは、そのレジスタが投機的実行の間に更新されていない限り、アーキテクチャル・レジスタ・ファイルにアクセス可能であり、この場合、読み取りはシャドウ・レジスタ・ファイルにアクセスする。
【００１０】
この実施形態上の変形において、システムは、各レジスタに対して“書き込みビット”を維持し、そのレジスタが投機的実行の間に書き込まれたかどうかを表示する。システムは、投機的実行の間に、任意のレジスタの書き込みビットを設定する。
【００１１】
この実施形態上の一変形において、システムは、レジスタ内の値が投機的実行の間に決定することが可能かどうかを表示する状態情報を維持する。
【００１２】
さらなる実施形態において、この状態情報は、各レジスタに対して“不在ビット”を含み、レジスタ中の値が投機的実行の間に決定することが可能かどうかを表示する。投機的実行の間、システムは、もしロードがデスティネーション・レジスタへの値を返していれば、不在ビットを設定する。システムはまた、もし任意の対応ソース・レジスタの不在ビットが設定されていれば、デスティネーション・レジスタの不在ビットを設定する。
【００１３】
さらなる実施形態において、メモリ参照のためのアドレスを決定することが可能かどうかを判定することは、メモリ参照のためのアドレスを含むレジスタの“不在ビット”を審査することを含む。設定される不在ビットは、メモリ参照のためのアドレスが決定することができないことを示す。
【００１４】
この実施形態上の一変形において、ストールが完了するとき、システムは、ストールの点からコードの非投機的実行を再開する。
【００１５】
さらなる実施形態において、コードの非投機的実行の再開は、次を含む：レジスタに関連の“不在ビット”をクリアすること；レジスタに関連の“書き込みビット”をクリアすること；投機的メモリ・バッファをクリアすること；およびストールの点からコードの非投機的実行を再開するためのブランチ誤予測動作を行うこと。
【００１６】
この実施形態上の一変形において、システムは、投機的記憶動作によりメモリ・ロケーションに書き込まれたデータを含む投機的メモリ・バッファを維持する。これによって、同じメモリ・ロケーションへ向けられた後続の推測負荷オペレーションに投機的メモリ・バッファからのデータへのアクセスを可能にする。
【００１７】
この実施形態上の一変形において、ストールは次を含むことができる：ロード・ミスストール、記憶バッファ・フルストール、またはメモリ・バッファストール。
【００１８】
この実施形態上の一変形において、コードを投機的実行することは、浮動点および他の長期レイテンシ・命令の実行をスキップすることを含む。
【００１９】
この実施形態上の一変形において、プロセッサは、同時マルチスレッディング（ＳＭＴ）を支援し、複数のスレッドに、単一プロセッサ・パイプラインにおける時間多重化インタリービングを通して同時に実行することを可能にする。この変形において、非投機的実行は第一スレッドによって行われ、投機的実行は第二スレッドによって行われる。ここで、第一スレッドおよび第二スレッドはプロセッサ上で同時に実行する。
【発明を実施するための最良の形態】
【００２０】
（詳細な説明）
次の説明は、当業者に本発明を利用できるように提示されたものであり、具体的な適用およびその必要条件に関して示されている。開示された実施形態への様々な修正は、当業者には容易に想起できるであろう。加えて、ここに規定される一般的な原理は本発明の精神と範囲から逸脱することなく他の実施形態および応用に適用可能である。したがって、本発明は、示された実施形態のみに限定しようとするものではなく、ここに開示された原理および特徴に相当する最大限の範囲に該当するものとする。
【００２１】
この詳細な記載中のデータ構造およびコードは、通常コンピュータ・システムによる使用のためのコードおよび／またはデータを記憶できる任意の装置または媒体でありうるコンピュータ読み取り可能記憶媒体上に、記憶される。それに含まれるものには、ディスク・ドライブ、磁気テープ、ＣＤ（コンパクト・ディスク）およびＤＶＤ（ディジタル多様ディスクまたはディジタル・ビデオ・ディスク）のような磁気および光記憶装置、ならびに送信媒体（信号が変調される搬送波を伴う、または伴わない）中に具体化されたコンピュータ・命令信号があるが、これらに限定されるものではない。例えば、送信媒体は、インターネットのような通信ネットワークを含みうる。
【００２２】
（プロセッサ）
図１は、本発明の一実施形態によるコンピュータ・システム内のプロセッサ１００を図示する。このコンピュータ・システムは、全体として、マイクロプロセッサをベースにしたコンピュータ・システム、メインフレーム・コンピュータ、ディジタル信号プロセッサ、携帯コンピュータ・デバイス、電子手帳、装置制御器、および装置中の計算エンジンなど任意のタイプのコンピュータ・システムを概して含むが、これらに限定されるものではない。
【００２３】
プロセッサ１００は、典型的なマイクロプロセッサ中に見られる多数のハードウェア構造を含む。さらに具体的には、プロセッサ１００は、アーキテクチャ・レジスタ・ファイル１０６を含み、これはプロセッサ１００により操作されるオペランドを含む。アーキテクチャ・レジスタ・ファイル１０６からのオペランドは機能的ユニット１１２を通過し、このユニットはオペランド上で計算動作を行う。これらの計算動作の結果は、アーキテクチャ・レジスタ・ファイル１０６中のデスティネーション・レジスタに返る。
【００２４】
プロセッサ１００はまた、命令・キャッシュ１１４を含み、このキャッシュはプロセッサ１００で実行されるべき命令、およびプロセッサ１００によって動作されるべきデータを含むデータ・キャッシュ１１６を含む。データ・キャッシュ１１６および命令・キャッシュ１１４は、レベル２キャッシュ（Ｌ２）キャッシュ１２４に接続され、これはメモリ制御器１１１に接続される。メモリ制御器１１１は、メイン・メモリに接続され、これはチップ外に位置する。プロセッサ１００は、追加的に、データ・キャッシュへのロード・リクエストをバッファするロード・バッファ１２０および、データ・キャッシュ１１６へのストア・リクエストをバッファするためのストア・バッファ１１８を含む。
【００２５】
プロセッサ１００は、追加的に、典型的なマイクロプロセッサには存在しないシャドウ・レジスタ・ファイル１０８、“不在ビット”１０２、“書き込みビット”１０４、マルチプレクサ（ＭＵＸ）１１０および投機的ストア・バッファを含む多数のハードウェア構造を含む。
【００２６】
シャドウ・レジスタ・ファイル１０８は、本発明の一実施形態による投機的実行中に更新されるオペランドを含む。これによって、投機的実行がアーキテクチャ・レジスタ・ファイル１０６に影響を与えることを防ぐ。（なおアウト・オブ・オーダ実行を支援するプロセッサは、投機的実行に先立って、そのネーム・テーブルの保存もそのアーキテクチャ・レジスタの保存もすることができる。）
重要であるのは、アーキテクチャ・レジスタ・ファイル１０６は、シャドウ・レジスタ・ファイル１０８中の対応するレジスタと関連する点である。対応するレジスタの各ペアは、“不在ビット”（不在ビット１０２からの）と関連している。もし不在ビットが設定されたら、これは、対応するレジスタのコンテンツが決定することができていないことを指示する。例えば、レジスタは、投機的実行の間、まだ返っていないロード・ミスからのデータ値を待っている場合もあるし、レジスタは、まだ返っていない動作（または行われていない動作）の結果を待っている場合もある。
【００２７】
対応するレジスタの各ペアはまた、“書き込みビット”（書き込みビット１０４からの）と関連している。書き込みビットが設定されるのは、レジスタが投機的実行中に更新されときであり、このとき、後続の投機的実行命令が更新値をレジスタのためにシャドウ・レジスタ・ファイル１０８から読み出す必要がある。
【００２８】
アーキテクチャ・レジスタ・ファイル１０６およびシャドウ・レジスタ・ファイル１０８から引き出されたオペランドは、ＭＵＸ１１０を通過する。ＭＵＸ１１０は、レジスタのための書き込みビットが設定されていれば、オペランドが投機的実行の間に修正されたことを指示し、オペランドをシャドウ・レジスタ・ファイル１０８から選択する。そうでない場合は、ＭＵＸ１１０は、修正されていないオペランドをアーキテクチャ・レジスタ・ファイル１０６から読み出す。
【００２９】
投機的ストア・バッファ１２２は、投機的実行中に起こるメモリへのストア動作のためのアドレスおよびデータを追跡する。投機的ストア・バッファ１２２では、投機的ストア・バッファ１２２内のデータは実際にメモリに書き込まれず、単に投機的ストア・バッファ１２２中に保存され、プリフェッチを生成する代わりに、後続の推測ロード動作が投機的ストア・バッファ１２２からのデータへアクセスすることが可能になり、これ以外の点は、ストア・バッファ１１８の動作を模擬する。
【００３０】
（投機的実行プロセス）
図２は、本発明の一実施形態による投機的実行プロセスを図示するフロー・チャートを示す。このシステムは、コードを非投機的に実行すること（ステップ２０２）によりスタートする。この非投機的実行の間にストールが生じると、システムは、ストール点（ステップ２０６）から投機的にコードを実行する。（ストール点はまた、“開始点”とも呼ばれることに注意されたい。）
ストール状態は、通常プロセッサに命令の実行を停止させる原因になるタイプのストールをも含みうる。例えば、ストール状態は、プロセッサがロード動作中に返ってくるデータ値を待つ“ロード・ミスストール”を含みうる。このストール状態はまた、ストア・バッファが一杯で新しいストア動作を受容れられない時ストア動作中に起きる“ストア・バッファ・フルストール”をも含みうる。ストール状態はまた、メモリ・バリアが張られると、プロセッサがロード・バッファおよび／またはストア・バッファが空になるのを待たねばならない“メモリ・バリアストール”をも含みうる。これらの例に加えて、他のストール状態は、投機的実行をトリガしうる。故障したマシンは、例えば“命令・ウィンドウ・フルストール”のような異なる一連のストール状態になることに注意されたい。
【００３１】
ステップ２０６の投機的実行の間、システムは、アーキテクチャ・レジスタ・ファイル１０６を更新する代わりに、シャドウ・レジスタ・ファイル１０８を更新する。シャドウ・レジスタ・ファイル１０８中のレジスタが更新されるときはいつも、対応するレジスタのための書き込みビットが設定される。
【００３２】
投機的実行の間にメモリ参照が生じたら、システムはそのメモリ・リファレンスのターゲット・アドレスを含むレジスタのための不在ビットを審査する。もし不在ビットが設定されていなかったなら、メモリ参照のためのアドレスを表示することが決定することがされ、システムはターゲット・アドレスのためのキャッシュ・ラインを読み出すためのプリフェッチを発行する。このやり方で、ターゲット・アドレスのためのキャッシュ・ラインは、正規の非投機的実行が究極的に再開し、メモリ参照を行う用意ができたとき、キャッシュにロードされる。本発明のこの実施形態は本質的に推測ストアをプリフェッチに変換し、推測ロードをシャドウ・レジスタ・ファイル１０８へのロードに変換する。
【００３３】
レジスタの不在ビットは、レジスタのコンテンツが決定することができないときはいつも設定される。例えば、上に説明したとおり、レジスタはロード・ミスから返るデータ値を待っている可能性があり、またはレジスタは、投機的実行の間、まだ返っていない動作の結果（または、まだ行われていない動作）を待っているかもしれない。また、投機的に実行される命令のデスティネーション・レジスタの間、命令のためのソース・レジスタのどれもがそれらの不在ビット  が設定されていないなら、不在ビットは設定される。なぜならば、もしソース・レジスタの一つが決定することができない値を含んでいれば、命令の結果が決定することがされえないからであることに注目されたい。投機的実行の間、もし対応するレジスタが決定することがされた値で更新されるならば、設定される不在ビットは、引き続いてクリアされうることに注目されたい。
【００３４】
本発明の一実施形態において、システムは、投機的実行の間、浮動点（および、おそらく他の長い待ち時間動作、例えば、ＭＵＬ、ＤＩＶおよびＳＱＲＴ）をスキップする。なぜならば、浮動点命令は、殆んどアドレス計算に影響しないからである。スキップされた命令のデスティネーション・レジスタのための不在ビットは、そのデスティネーション・レジスタ中の値が決定することがされていないことを指示するように設定されねばならないことに注目されたい。
【００３５】
ストール状態が完了したとき、システムは、開始点（ステップ２１０）から、正規の非投機的実行を再開する。これは、不在ビット１０２、書き込みビット１０４および投機的ストア・バッファ１２２をクリアするために、ハードウェア中で“フラッシュ・クリア”動作を行うことを含む。それはまた、開始点から正規の非投機的実行を再開するために、“ブランチ誤予測動作”を行うことも含みうる。ブランチ誤予測動作は、概して、ブランチ予測器を含むプロセッサ中で、利用可能であることに注目されたい。もしブランチがブランチ予測器によって誤予測されると、そのようなプロセッサは、コード中の正しいブランチ・ターゲットへ帰すためにそのブランチ誤予測動作を使う。
【００３６】
本発明の一実施形態において、投機的実行中に、もしブランチ・命令が生じれば、システムは、ブランチが決定することが可能かどうかを判定する。このことはブランチ状態が“存在する”ことを意味する。もしそうであれば、システムはブランチを行う。そうでなければ、システムは、ブランチ予測器にブランチがどこへ行くのかを予測することを延期する。
【００３７】
投機的実行中に行われるプリフェッチ動作は、非投機的実行中の、後続のシステム・パフォーマンスを改善する傾向になることに注目されたい。
【００３８】
また、上に説明のプロセスは、標準の実行可能コード・ファイル上で動作可能であり、したがって、コンパイラの介入なしで、ハードウェアを通して全て作動できることに注目されたい。
【００３９】
（ＳＭＴプロセッサ）
シャドウ・レジスタ・ファイル１０８および投機的なストア・バッファ１２２のような投機的実行のために使用される多くのハードウェアは、同時マルチスレッディング（ＳＭＴ）を支援するプロセッサ中に存在する構造に類似であることに注目されたい。したがって、ＳＭＴプロセッサにハードウェア・スカウト・スレッディングを行わせることを可能にするために、ＳＭＴプロセッサを修正することは、例えば、“不在ビット”および“書き込みビット”を加えること、および他の修正を行うことにより可能である。このやり方で、修正されたＳＭＴアーキテクチャは、一組の無関係なアプリケーションのためのスループットを増加させる代わりに、単一のアプリケーションをスピードアップするために使用されうる。
【００４０】
図３は、本発明の一実施形態による同時マルチスレッディングを支援するプロセッサを図示する。この実施例において、シリコン・ダイ３００は、一つ以上のプロセッサ３０２を含む。プロセッサ３０２は、概して、複数スレッドに同時実行を可能にする任意のタイプの計算装置を含む。
【００４１】
プロセッサ３０２は、プロセッサ３０２によって実行されるべき命令を含む命令・キャッシュ３１２、およびプロセッサ３０２によって操作されるべきデータを含むデータデータ・キャッシュ３０６を含む。データ・キャッシュ３０６および命令・キャッシュ３１２は、レベル２キャッシュ（Ｌ２）キャッシュに接続され、これはそれ自体メモリ制御器３１１に接続される。メモリ制御器３１１は、チップ外に位置する主メモリに接続される。
【００４２】
命令・キャッシュ３１２は、命令を四つの分離された命令・キュー３１４−３１７にフィードされる。命令・キュー３１４−３１７からの命令は、マルチプレクサ３０９を通じてフィードされ、マルチプレクサはラウンドロビン様式で実行パイプライン３０７にフィードされる前にインタリーブする。図３に示すとおり、所与の命令・キューは実行パイプライン３０７中の第四スロットを全て使用する。プロセッサ３０２の他のインプリメンテーションは、四キューを越える、または四未満のキューからの命令をおそらくインタリーブできる。
【００４３】
パイプライン・スロットは異なるスレッド間を回転するので、レイテンシは緩和されうる。例えば、キャッシュ３０６からのロードは、ストールを起こすことなく、四パイプライン・ステージまで取り上げることができるか、または算術的な動作が、四パイプラインまで取り上げられる。本発明の一実施形態においては、このインタリーブは、“静的”である。ということは、各命令・キューは、実行パイプライン３０７中の四命令・スロット毎と関連し、この関連は長い間動的に変化しないということを意味する。
【００４４】
命令・キュー３１４−３１７は、それぞれ、対応するレジスタ・ファイル３１８−３２１と関連しており、これらのファイルは、命令・キュー３１４−３１７からの命令によって操作されるオペランドを含んでいる。実行パイプライン３０７中の命令は、データがデータ・キャッシュ３０６およびレジスタ・ファイル３１８−３１９間で転移されるようにすることができる。（本発明の別の実施形態においては、レジスタ・ファイル３１８−３２１は、命令・キュー３１４−３１７と関連する分離スレッド間で区分けされた単一のマルチ・ポートのレジスタ・ファイルに合体される。）
命令・キュー３１４−３１７はまた、対応するストア・キュー（ＳＱ）３３１−３３４およびロード・キュー（ＬＱ）３４１−３４４と関連している。（本発明の別の実施形態では、ストア・キュー３３１−３３４は、命令・キュー３１４−３１７およびロード・キュー３４１−３４４は、単一ストア・キューに合体される。これは、命令・キュー３１４−３１７に関連する分離スレッド間で区分けされており、ロード・キュー３４１−３４４は、同様に単一の大ロード・キューに合体されている。）
スレッドが投機的に実行しているとき、関連ストア・キューは、図１に関連して上に説明した投機的ストア・バッファ１２２のように機能するように修正される。投機的ストア・バッファ１２２内のデータは、実際にはメモリに書き込まれず、プリフェッチを生成する代わりに、投機的ストア・バッファ１２２からデータにアクセスする同じメモリ・ロケーションに向けられる後続の投機的ロード・オペレーションを可能にするために単に保存されるだけであることを思い出していただきたい。
【００４５】
プロセッサ３０２はまた、２セットの“不在ビット”３５０−３５１、および２セットの“書き込みビット”３５２−３５３を含む。例えば、不在ビット３５０および書き込みビット３５２は、レジスタ・ファイル３１８−３１９と関連させうる。このことは、投機的実行を支援するために、レジスタ・ファイル３１８にアーキテクチュアル・レジスタ・ファイルとして機能することを可能にし、およびレジスタ・ファイル３１９に、対応するシャドウ・レジスタ・ファイルとして機能することを可能にする。同様にして、不在ビット３５１および書き込みビット３５３は、レジスタ・ファイル３２０−３２１と関連させることができ、このことはレジスタ・ファイル３２０にアーキテクチュアル・レジスタ・ファイルとして機能することを可能にし、およびレジスタ・ファイル３２１に対応するシャドウ・レジスタ・ファイルとして機能することを可能にする。２セットの不在ビットおよび書き込みビットはプロセッサ３０２に、二つの推測スレッドまでを支援することを可能にする。
【００４６】
本発明のＳＭＴバリアントは、概して、単一パイプライン中の複数のスレッドの同時インタリーブ実行を支援する任意のコンピュータ・システムに適用すること、および図示した計算システムに限定されるものではないことに注目されたい。
【００４７】
本発明の実施形態のこれまでの説明は、図解と説明の目的のためのみに提示されたものである。これらは、本発明を開示された形態に徹底して専念させるものでもなければ、限定するものでもない。したがって、多くの修正および変形が、この当業者には明白となろう。加えて、上述の開示は、本発明を限定しようとするものではない。本発明の範囲は、添付の請求の範囲によって規定されるものである。
【図面の簡単な説明】
【００４８】
【図１】図１は、本発明の一実施形態によるコンピュータ・システム中のプロセッサを図示する。
【図２】図２は、本発明の一実施形態による投機的実行プロセスを図示するフロー・チャートを示す。
【図３】図３は、本発明の一実施形態による同時マリチスレッディングを支援するプロセッサを図示する。
【図１】
2006518053.tif 000003
【図２】
2006518053.tif 000004
【図３】
2006518053.tif 000005