(57)【要約】第１プロセッサと第２プロセッサを含む装置が提供される。複数のメモリ装置が第１プロセッサ及び第２プロセッサに接続される。レジスタバッファが第１プロセッサ及び第２プロセッサに接続される。トレースバッファが第１プロセッサ及び第２プロセッサに接続される。複数のメモリ命令バッファが第１プロセッサ及び第２プロセッサに接続される。第１プロセッサと第２プロセッサは、マルチスレッドリソースを利用したシングルスレッドアプリケーションを実行する。また、第１スレッドが第２プロセッサから実行される方法が提供される。第１スレッドはまた、第１プロセッサによる指示に従って第２プロセッサから実行される。第２プロセッサは、第１プロセッサに先行して命令を実行する。
2005521924.tif 000002
【特許請求の範囲】
【請求項１】
第１プロセッサ及び第２プロセッサ；
前記第１プロセッサ及び前記第２プロセッサに接続される複数のメモリ装置；
前記第１プロセッサ及び前記第２プロセッサに接続されるレジスタバッファ；
前記第１プロセッサ及び前記第２プロセッサに接続されるトレースバッファ；及び
前記第１プロセッサ及び前記第２プロセッサに接続される複数のメモリ命令バッファ；
からなる装置であって、前記第１プロセッサ及び前記第２プロセッサは、マルチスレッドリソースを利用したシングルスレッドアプリケーションを実行することを特徴とする装置。
【請求項２】
請求項１記載の装置であって、前記複数のメモリ装置は、複数のキャッシュ装置から構成されることを特徴とする装置。
【請求項３】
請求項１記載の装置であって、前記第１プロセッサは、複数のゼロレベル（L0）データキャッシュ装置の少なくとも１つと複数のL0命令キャッシュ装置の少なくとも１つに接続され、前記第２プロセッサは、前記複数のL0データキャッシュ装置の少なくとも１つと前記複数のL0命令キャッシュ装置の少なくとも１つに接続されることを特徴とする装置。
【請求項４】
請求項３記載の装置であって、前記複数のL0データキャッシュ装置の各々はデータキャッシュ命令の正確なコピーを有し、前記複数のL0命令キャッシュ装置の各々は命令キャッシュ命令の正確なコピーを有することを特徴とする装置。
【請求項５】
請求項１記載の装置であって、前記複数のメモリ命令バッファは、少なくとも１つのストアフォワーディングバッファと少なくとも１つのロードオーダリングバッファを含むことを特徴とする装置。
【請求項６】
請求項５記載の装置であって、前記少なくとも１つのストアフォワーディングバッファは複数の入力を有する構成を備え、前記複数の入力の各々はタグ部、有効部、データ部、ストア命令ID部、及びスレッドID部を有することを特徴とする装置。
【請求項７】
請求項６記載の装置であって、前記少なくとも１つのロードオーダリングバッファは複数の入力を有する構成を備え、前記複数の入力の各々はタグ部、入力有効部、ロードID部、及びロードスレッドID部を有することを特徴とする装置。
【請求項８】
請求項７記載の装置であって、前記複数の入力の各々は、さらに、ストアスレッドID部、ストア命令ID部、及びストア命令有効部を有することを特徴とする装置。
【請求項９】
請求項１記載の装置であって、前記トレースバッファは、ヘッド及びテールポインタを有する配列を備える循環バッファであり、前記ヘッド及びテールポインタはラップアラウンドビットを有することを特徴とする装置。
【請求項１０】
請求項１記載の装置であって、前記レジスタバッファは、整数レジスタバッファと述語レジスタバッファから構成されることを特徴とする装置。
【請求項１１】
第１プロセッサによる第１スレッドにおいて複数の命令を実行するステップ；及び
前記第１プロセッサにより指示されるように第２プロセッサによる前記第１スレッドにおいて前記複数の命令を実行するステップ；
からなる方法であって、前記第２プロセッサは、前記第１プロセッサに先行して前記複数の命令を実行することを特徴とする方法。
【請求項１２】
請求項１１記載の方法であって、さらに：
制御フロー情報を受信することにより前記第１プロセッサが分岐予測を回避できるように、前記第２プロセッサから前記第１プロセッサに前記制御フロー情報を送信するステップ；及び
命令の一部の結果をトレースバッファからのレジスタファイルにコミットすることにより前記第１プロセッサが前記命令の一部の実行を回避できるように、前記第２プロセッサから前記第１プロセッサに前記結果を送信するステップ；
を備えることを特徴とする方法。
【請求項１３】
請求項１２記載の方法であって、さらに：
前記第１プロセッサと前記第２プロセッサによる独立なアクセスのため、メモリ情報を異なるメモリ装置に複製するステップ；
を備えることを特徴とする方法。
【請求項１４】
請求項１２記載の方法であって、さらに：
再生されるストア命令が一致したストアID部を有する場合、ストア有効ビットをクリアし、前記トレースバッファのロード入力に予想ミスしたビットを設定するステップ；
を備えることを特徴とする方法。
【請求項１５】
請求項１２記載の方法であって、さらに：
再生されないストア命令がストアID部に一致する場合、ストア有効ビットを設定するステップ；
を備えることを特徴とする方法。
【請求項１６】
請求項１２記載の方法であって、さらに：
前記ロードの１つが再生されず、かつロードバッファのタグ部に一致しない場合、パイプラインをフラッシュし、前記トレースバッファのロード入力に予想ミスしたビットを設定し、ロード命令を再スタートするステップ；
を備え、前記ロード命令は、ストア有効ビットが設定されていない間、前記ロードバッファの前記タグ部に一致することを特徴とする方法。
【請求項１７】
請求項１２記載の方法であって、さらに：
投機的スレッドの第１命令において再生モードを実行するステップ；及び
前記トレースバッファの一部が空状態に近づく場合、前記再生モードと前記投機的スレッドの前記実行を終了するステップ；
を備えることを特徴とする方法。
【請求項１８】
請求項１２記載の方法であって、さらに：
レジスタ改名を防ぐために、前記トレースバッファから名前を供給するステップ；
依存命令を含む次に再生される命令までのすべての命令を発行するステップ；
ノー・オペレーション（NOP）命令として再生されない命令を発行するステップ；
すべてのロード命令とストア命令をメモリに発行するステップ；及び
前記トレースバッファから前記レジスタファイルに再生されない命令をコミットするステップ；
を備えることを特徴とする方法。
【請求項１９】
請求項１２記載の方法であって、さらに：
前記ロード入力が退けられる場合、ロードバッファの有効ビットをクリアするステップ；
を備えることを特徴とする方法。
【請求項２０】
マシーンによる実行時、前記マシーンに処理を実行させる命令を含むマシーン読み出し可能な媒体からなる装置であって、前記処理は：
第１プロセッサからの第１スレッドを実行するステップ；及び
前記第１プロセッサにより指示されるように、前記第１プロセッサに先行して命令を実行する第２プロセッサからの前記第１スレッドを実行するステップ；
からなることを特徴とする装置。
【請求項２１】
請求項２０記載の装置であって、マシーン実行時、前記マシーンに処理を実行させる命令を含み、前記処理はさらに：
制御フロー情報を受信することにより前記第１プロセッサが分岐予測を回避できるように、前記第２プロセッサから前記第１プロセッサに前記制御フロー情報を送信するステップ；
を備えることを特徴とする装置。
【請求項２２】
請求項２１記載の装置であって、マシーン実行時、前記マシーンに処理を実行させる命令を含み、前記処理はさらに：
前記第１プロセッサと前記第２プロセッサによる独立なアクセスのため、メモリ情報を異なるメモリ装置に複製するステップ；
を備えることを特徴とする装置。
【請求項２３】
請求項２１記載の装置であって、マシーン実行時、前記マシーンに処理を実行させる命令を含み、前記処理はさらに：
再生されるストア命令が一致したストアID部を有する場合、ストア有効ビットをクリアし、前記トレースバッファのロード入力に予想ミスしたビットを設定するステップ；
を備えることを特徴とする装置。
【請求項２４】
請求項２１記載の装置であって、マシーン実行時、前記マシーンに処理を実行させる命令を含み、前記処理はさらに：
再生されないストア命令がストアID部に一致する場合、ストア有効ビットを設定するステップ；
を備えることを特徴とする装置。
【請求項２５】
請求項２１記載の装置であって、マシーン実行時、前記マシーンに処理を実行させる命令を含み、前記処理はさらに：
前記ロードの１つが再生されず、かつロードバッファのタグ部に一致しない場合、パイプラインをフラッシュし、前記トレースバッファのロード入力に予想ミスしたビットを設定し、ロード命令を再スタートするステップ；
を備え、前記ロード命令は、ストア有効ビットが設定されていない間、前記ロードバッファの前記タグ部に一致することを特徴とする装置。
【請求項２６】
請求項２１記載の装置であって、マシーン実行時、前記マシーンに処理を実行させる命令を含み、前記処理はさらに：
投機的スレッドの第１命令において再生モードを実行するステップ；及び
前記トレースバッファの一部が空状態に近づく場合、前記再生モードと前記投機的スレッドの前記実行を終了するステップ；
を備えることを特徴とする装置。
【請求項２７】
請求項２１記載の装置であって、マシーン実行時、前記マシーンに処理を実行させる命令を含み、前記処理はさらに：
レジスタ改名を防ぐために、前記トレースバッファから名前を供給するステップ；
依存命令を含む次に再生される命令までのすべての命令を発行するステップ；
ノー・オペレーション（NOP）命令として再生されない命令を発行するステップ；
すべてのロード命令とストア命令をメモリに発行するステップ；及び
前記トレースバッファから前記レジスタファイルに再生されない命令をコミットするステップ；
を備えることを特徴とする装置。
【請求項２８】
請求項２１記載の装置であって、マシーン実行時、前記マシーンに処理を実行させる命令を含み、前記処理はさらに：
前記ロード入力が退けられる場合、ロードバッファの有効ビットをクリアするステップ；
を備えることを特徴とする装置。
【請求項２９】
第１プロセッサ；
第２プロセッサ；
前記第１プロセッサ及び前記第２プロセッサに接続されるバス；
前記バスに接続されるメインメモリ；
前記第１プロセッサ及び前記第２プロセッサに接続される複数のローカルメモリ装置；
前記第１プロセッサ及び前記第２プロセッサに接続されるレジスタバッファ；
前記第１プロセッサ及び前記第２プロセッサに接続されるトレースバッファ；及び
前記第１プロセッサ及び前記第２プロセッサに接続される複数のメモリ命令バッファ；
からなるシステムであって、前記第１プロセッサ及び前記第２プロセッサは、マルチスレッドリソースを利用したシングルスレッドアプリケーションを実行することを特徴とするシステム。
【請求項３０】
請求項２９記載のシステムであって、前記複数のローカルメモリ装置は、複数のキャッシュ装置から構成されることを特徴とするシステム。
【請求項３１】
請求項３０記載のシステムであって、前記第１プロセッサは、複数のゼロレベル（L0）データキャッシュ装置の少なくとも１つと複数のL0命令キャッシュ装置の少なくとも１つに接続され、前記第２プロセッサは、前記複数のL0データキャッシュ装置の少なくとも１つと前記複数のL0命令キャッシュ装置の少なくとも１つに接続されることを特徴とするシステム。
【請求項３２】
請求項３１記載のシステムであって、前記複数のL0データキャッシュ装置の各々はデータキャッシュ命令の正確なコピーを有し、前記複数のL0命令キャッシュ装置の各々は命令キャッシュ命令の正確なコピーを有することを特徴とするシステム。
【請求項３３】
請求項３１記載のシステムであって、前記第１プロセッサ及び前記第２プロセッサの各々は、第１レベル（L1）キャッシュ装置と第２レベル（L2）キャッシュ装置を共有することを特徴とするシステム。
【請求項３４】
請求項２９記載のシステムであって、前記複数のメモリ命令バッファは、少なくとも１つのストアフォワーディングバッファと少なくとも１つのロードオーダリングバッファを含むことを特徴とするシステム。
【請求項３５】
請求項３４記載のシステムであって、前記少なくとも１つのストアフォワーディングバッファは複数の入力を有する構成を備え、前記複数の入力の各々はタグ部、有効部、データ部、ストア命令ID部、及びスレッドID部を有することを特徴とするシステム。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
［発明の背景］
発明の技術分野
本発明は、マルチプロセッサに関し、より詳細には、シングルスレッドプログラムをマルチスレッドにより実行するための方法及び装置に関する。
従来技術の説明
今日、パーソナルコンピュータ（PC）のような多くの処理システムでは、シングルチップマルチプロセッサ（CMP）がマルチスレッドプログラムの実行において重要な役割を担っている。これらのプロセッサが処理及び実行するスレッドは互いに独立している。例えば、スレッドは相異なるプログラムからのものであるかもしれないし、同一のプログラムからのものであるかもしれない。あるスレッドは、互いに依存性を持たないスレッドを生成するようコンパイルされる。しかしながら、あるマルチスレッド環境では、明示的に（explicitly）複数のスレッドに変換することが困難なシングルスレッドアプリケーションが存在する。また、既存のシングルスレッドバイナリのマルチスレッドプロセッサによる実行では、チップのマルチスレッド機能は活用されていない。
【０００２】
本発明は、実施例を用いて説明されるが、添付される図面に限定されるものではない。また、同一の参照記号は同一の要素を表している。本開示における「ある（an）」または「１つの（one）」実施例という参照は必ずしも同一の実施例を指すものでなく、そのような参照は少なくとも１つということを意味していることに注意されるべきである。
［発明の詳細な説明］
本発明は、一般に、シングルスレッドプログラムのマルチスレッドによる実行のための装置及び方法に関する。図面を参照することにより、本発明の実施例が説明される。これらの実施例は発明の例示のために与えられるものであり、発明の範囲を限定するものとして解釈されるべきものではない。
【０００３】
図１は、マルチプロセッサ１００からなる本発明の一実施例を示す。本発明の一実施例において、マルチプロセッサ１００は、デュアルコアシングルチップマルチプロセッサ（CMP）である。マルチプロセッサ１００は、さらに、コミット（commit）中央演算ユニット（CPU）１１０、投機的（speculative）CPU１２０、レジスタファイルバッファ１３０、トレースバッファ１４０、ロードバッファ１５０（または、ロードオーダリングバッファとして知られる）、ストアバッファ１６０（または、ストアフォワーディングバッファとして知られる）、L1キャッシュ１７５、L2キャッシュ１７０、L0命令キャッシュ（Iキャッシュ）１８０、及びL0データキャッシュ（Dキャッシュ）１９０から構成される。本発明の一実施例では、L0 Iキャッシュ１８０は、２つのL0 Iキャッシュ要素から構成されている。一方のL0 Iキャッシュ１８０要素は、コミットプロセッサ１１０に接続され、もう一方のL0 Iキャッシュ１８０要素は、投機的プロセッサ１２０に接続されている。本実施例では、これら２つのIキャッシュ要素は重複した情報を維持している。本発明の一実施例では、フェッチあるいは取り込みリクエストがL0 Iキャッシュ１８０要素の何れかからL1キャッシュ１７５に与えられる。L1キャッシュ１７５から取り込まれたラインが、投機的プロセッサ１２０とコミットプロセッサ１１０に接続されたL0 Iキャッシュ１８０に書き込まれる。
【０００４】
本発明の一実施例では、L0 Dキャッシュ１９０は、２つのL0 Dキャッシュ要素から構成される。一方のL0 Dキャッシュ１９０要素はコミットプロセッサ１１０に接続され、もう一方のL0 Dキャッシュ１９０要素は投機的プロセッサ１２０に接続される。本実施例では、これら２つのL0 Dキャッシュ要素は重複した情報を維持する。本実施例では、投機的プロセッサ１２０に関するストア命令/コマンド（ストア）は、L0 Dキャッシュ１９０には書き込まれない。本実施例では、ライン読み込み及び書き込みリクエストは、L0 Dキャッシュ要素の何れかからL1キャッシュ１７５に与えられる。L1キャッシュ１７５から取り込まれたラインは、コミットプロセッサ１１０と投機的プロセッサ１２０に接続されたL0 Dキャッシュ１９０要素に書き込まれる。コミットプロセッサ１１０からのストアは、投機的プロセッサ１２０に接続されたL0 Dキャッシュ要素に書き込まれる。各L0 Dキャッシュ要素のデータの正確な複製を有することによって、内部検索が不要になる。
【０００５】
本発明の一実施例では、レジスタファイルバッファ１３０は、整数レジスタファイルバッファと述語レジスタファイルバッファから構成される。本発明の一実施例では、整数レジスタファイルバッファは、複数の書き込みポート、複数のチェックポイント、及び少なくとも１つの読み込みポートから構成される。整数レジスタファイルバッファは、コミットプロセッサ１１０から投機的プロセッサ１２０へのレジスタ値の通信に利用される。本発明の一実施例では、整数レジスタファイルバッファは、レジスタ配列幅が８列で、１６行からなる。本発明の一実施例では、述語レジスタファイルバッファは、複数の書き込みポート、複数のチェックポイント、及び少なくとも１つの読み込みポートから構成される。述語レジスタファイルバッファは、コミットプロセッサ１１０から投機的プロセッサ１２０及び投機的プロセッサ１２０に接続された第２レベルレジスタファイルへのレジスタ値の通信に利用される。本発明の一実施例では、述語レジスタファイルバッファは、８つの書き込みポート、４つのチェックポイント、及びチェックポイントされたコンテクストの何れかにアクセスするための１つの読み込みポートから構成される。本発明の一実施例では、述語レジスタファイルバッファは、レジスタ配列幅が８列で、１６行からなる。
【０００６】
図２は、コミットCPU１１０を示す。本発明の一実施例では、コミットCPU１１０は、デコーダ２１１、スコアボード２１４、レジスタファイル２１２、及び実行ユニット２１３から構成される。同様に、図３は、投機的CPU１２０を示す。本発明の一実施例では、投機的CPU１２０は、デコーダ３２１、スコアボード３２４、レジスタファイル３２２、及び実行ユニット３２３から構成される。L2キャッシュ１７０とL1キャッシュ１７５が、コミットCPU１１０と投機的CPU１２０により共有されている。本発明の一実施例では、マルチプロセッサ１００は、マルチスレッドプログラムを明示的に実行することができる。他の実施例では、マルチプロセッサ１００は、マルチスレッド環境を利用する一方で、シングルスレッドアプリケーションを明示的な複数のスレッドに変換することなくシングルスレッドアプリケーションを実行することができる。
【０００７】
本発明の一実施例では、プログラムの実行は、コミットCPU１１０と投機的CPU１２０の何れかにおいてシングルスレッドとして開始される。本発明の一実施例では、コミットCPU１１０は、プログラムによる指示に従い、ロード命令/コマンド（ロード）及びメモリへのストアを発すると共に、レジスタファイル２１２を取り込み、復号化、実行及び更新を行う。命令が復号化されているとき、コミットCPU１１０は、投機的CPU１２０にあるプログラムカウンタ値での投機的スレッドの実行の開始を指示するようにしてもよい。このプログラムカウンタ値は、メモリ内の次の命令のアドレスであってもよいし、あるいはコンパイラによる手引きとして提供されてもよい。例えば、次の命令のアドレスでのフォーク（fork）は、コール（call）命令でスレッドフォークであってもよい。投機的CPU１２０は、コミットCPU１１０のプログラムカウンタが投機的スレッドプログラムカウンタが指し示すプログラム実行における同一の地点に到達するまで、スレッドの実行を継続する。したがって、コミットCPU１１０は、命令が投機的スレッドに属している場合でも、プログラムにおけるすべての命令を取り込み、発行、コミットする。
【０００８】
本発明の一実施例では、マルチプロセッサ１００のデュアル実行アーキテクチャは、投機的CPU１２０がプログラムの実行において命令やデータの効率的な先取りを行うという効果を有する。また、投機的CPU１２０は、コミットCPU１１０の制御フローが分岐に到達する前に、分岐の方向を判断する。本発明の一実施例では、コミットCPU１１０は、投機的CPU１２０から制御フローの方向に関する情報を受け取るので、多くの分岐における分岐予想と、それに関連する予想ミスによるペナルティーを回避することができる。本発明の一実施例では、投機的スレッドにより正確に実行された互いに依存性のある隣接する命令は、コミットCPU１１０により１つのコミットサイクルにおいて同時にコミットされる結果を有し、それにより、互いに依存する命令間の結果を逐次的に実行及び伝達するのに通常要する時間を節約することが可能になる。
【０００９】
本発明の一実施例では、投機的スレッドへの入力レジスタ値は、レジスタバッファ１３０を介し通信される。コミットCPU１１０のレジスタファイル２１２に書き込まれるすべての値が、レジスタファイルバッファ１３０に書き込まれる。本発明の一実施例では、投機的スレッドが生成されるとき、レジスタファイル２１２のスナップショットが、コミットCPU１１０と投機的CPU１２０との間にあるレジスタファイルバッファ１３０において利用可能である。初期的には、投機的スレッドが開始されるとき、投機的CPU１２０のレジスタの何れにも入力値は格納されていない。必要とされる入力レジスタは、レジスタファイルバッファ１３０からの要求に応じて読み込まれてもよい。本発明の一実施例では、投機的CPU１２０の復号化段階でのスコアボード３２４が、どのレジスタがレジスタファイルバッファ１３０からロードされるか、あるいは投機的スレッドにより書き込まれるかを追跡するために利用される。これらのレジスタはレジスタファイル３２２において有効である。他のすべてのレジスタは、レジスタファイルバッファ１３０からの要求に応じて読み込まれる。
【００１０】
本発明の一実施例では、投機的スレッドへの入力メモリ値は、整合性を備えたキャッシュ階層から読み込まれ、投機的スレッドによるコミットスレッドにより変更されたメモリへのアクセスが可能になる。本発明の一実施例では、MESI（M：modified；E：exclusive；S：shared；I：invalid）キャッシュコヒーレンシ（cache coherency）プロトコルを利用することにより、Dキャッシュ１９０がライト・スルー・キャッシュ（write through cache）、L2キャッシュ１７０がライト・バック・キャッシュ（write back cache）であるキャッシュ・コヒーレンシ方式が採用される。しかしながら、本発明の他の実施例では、他のキャッシュコヒーレンシプロトコルが利用されてもよい。
【００１１】
特定のプログラムのデータフローに依存して、コミットCPU１１０は、レジスタまたはメモリ入力値が投機的スレッドにより読み込まれた後、これら入力値を生成するようにしてもよい。本発明の一実施例では、レジスタ及びメモリデータフローにより課される制約を緩和するため、値予測を利用することにより、初期入力値が投機的スレッドに与えられる。本発明の一実施例では、受動的予測を有するシンプルな値予測方法が利用される。本実施例では、投機的スレッドが生成された時点で、コミットCPU１１０によりレジスタ及びメモリ入力値がすでに生成されたと考えられる。
【００１２】
本発明の一実施例では、投機的結果がトレースバッファ１４０だけでなくCPU１２０のレジスタファイル３２２にも書き込まれる。本発明の一実施例では、トレースバッファ１４０は、ヘッドとテールポインタを有する配列として実現される循環的バッファである。本発明の一実施例では、ヘッド及びテールポインタは、ラップアラウンドビットを有する。本発明の一実施例では、トレースバッファ１４０は、１つの読み込みポートと１つの書き込みポートを備えた配列を有する。本実施例では、各入力は、コミットCPU１１０の命令発行幅に少なくとも等しい数の命令の結果を格納するのに十分なバイトを有する。本実施例では、各入力は、予測ミスしたロードをマークするのに利用される第２書き込みポートと共に、命令あたり１ビットを有する。
【００１３】
本発明の一実施例では、トレースバッファ１４０は、各々が６つの命令の結果を格納することができる１２８の入力を有する。本発明の一実施例では、トレースバッファ１４０は、４つのスレッドをサポートする４つの区画を有する。本発明の一実施例では、トレースバッファ１４０は、命令あたり２つの出力を格納するための１６バイト、改名されたレジスタを格納するための４バイト、及び命令が予測ミスロードである場合、それを記録するための１ビットを収容する。本発明の一実施例では、予測ミスロードビットは、ロードバッファ１５０からの６つの書き込みポートにより設定することが可能である。本発明の一実施例では、スレッド区画がフルであるとき、L0 Iキャッシュ１８０とL0 Dキャッシュ１９０に先取りするための投機的実行が継続されるが、結果はトレースバッファには書き込まれない。
【００１４】
本発明の一実施例では、コミットCPU１１０は、レジスタあたり１ビットからなるスコアボード２１４を有する。本実施例では、投機的スレッドの分岐点と結合点との間でのコミットCPU１１０によるレジスタの変更により、レジスタスコアボードビットが設定される。コミットCPU１１０が投機的スレッド結果を退けると、スコアボード２１４において予測ミスされたすべてのレジスタの追跡が継続される。本実施例では、ソースレジスタスコアボードビットが明らかな命令が確実にレジスタファイル２１２にコミットされる。そのような命令は、たとえ依存性があったとしても、実行される必要はない。しかしながら、例えば、ロードやストアのようないくつかの例外処理がある。ロード及びストア例外処理は、サービスキャッシュミスやメモリ順序付け違反のチェックのため、メモリ実行ユニット２１３に発行される必要がある。分岐の実行結果がまた、投機的CPU１２０からコミットCPU１１０に送られる。コミットCPU１１０における分岐予測は、投機的CPU１２０により実行される分岐の一部あるいはすべてに対し、省かれてもよい。
【００１５】
本発明の一実施例では、コミットプロセッサ１１０に関するロード及びストアは、ロードバッファ１５０をモニタする。本発明の一実施例では、命令が再生されるとき、あるいは命令が予想ミスロードである場合、命令に関する目的レジスタビットが、スコアボード２１４において設定される。当該命令がクリーン（clean）である場合、目的レジスタビットはスコアボード２１４においてクリアされる。ここで、命令がクリーンであるのは、そのソースがクリーンである場合である。スコアボード２１４がクリアされるのは、すべての投機的スレッド命令がコミットされるときである。
【００１６】
本発明の一実施例では、投機的CPU１２０は、ストア命令をメモリに与えない。本実施例では、ストア命令はストアバッファ１６０に書き込まれ、ロード命令はロードバッファ１５０に書き込まれる。本発明の一実施例では、ストアバッファ１６０は、フルに関連したストアフォワーディングバッファである。図４は、本発明の一実施例によるストアバッファ１６０の構成を示す。（図４に示される）ストアバッファ１６０では、各入力４１０は、タグ部４２０、有効部４３０、データ部４４０、ストアID４５０、及びスレッドID部４６０から構成される。本発明の一実施例では、データ部４４０は８バイトのデータを収容する。本発明の一実施例では、有効部４３０は８ビットを収容する。ストアID４５０は、入力４１０への書き込みを行うための最新のストア命令の一意的なストア命令IDである。本発明の一実施例では、投機的ロードは、L0 Dキャッシュ１９０のアクセスと同時にストアバッファ１６０へアクセスする。当該ロードがストアバッファ１６０のストア命令にヒットすれば、L0 Dキャッシュ１９０は省略され、あるロードがストアバッファ１６０から読み込まれる。この場合、ストアID４５０もまた当該データと共に読み出される。
【００１７】
本発明の一実施例では、ロードデータは投機的プロセッサ１２０に関するストアバッファ１６０またはL0 Dキャッシュ１９０から投機的プロセッサ１２０により取得されうる。本発明の一実施例では、ロードはロードバッファ１５０に書き込まれる。本実施例では、ロードが書き込まれるとき、ロードバッファ１５０がオーバーフローする場合、予想ミスロードビットはトレースバッファ１４０において設定される。
【００１８】
本発明の一実施例では、ストアバッファ１６０は、４通りの設定関連の１２８の入力を有する。本発明の一実施例では、ストアバッファ１６０は、２つのストアポートと、２つのロードポートを有する。本発明の一実施例では、ストアバッファ１６０は、フォワーディングのための仮想アドレスを使った部分タグマッチと、ストアIDのフォワーディングを有効にするフル物理タグマッチを可能にする。本発明の一実施例では、ストアバッファ１６０は、配置遅延を回避するため、第１バイトから始まるデータ部４４０に書き込まれたデータを格納する。本発明の一実施例では、ストアバッファ１６０は、ヒットした入力と取り替えられなければ、ストアミスに応じて最も古いストアを取り替える置換方針を有する。本発明の一実施例では、スレッドID４６０はトレースバッファ１４０のある区画へのインデックスであり、ラップアラウンドビットを有する。本発明の一実施例では、スレッド入力の全体的なリセットが、スレッドID内容アドレスメモリ（CAM）ポート（図示せず）を利用することにより実行される。
【００１９】
本発明の一実施例では、投機的ロードはロードバッファ１５０に書き込まれる。本発明の一実施例では、ロードバッファ１５０はコミットCPU１１０に接続された設定関連ロードバッファである。図５は、ロードバッファ１５０の構成を示す。（図５に示される）ロードバッファ１５０では、各入力５１０は、タグ部５２０、入力有効ビット部５３０、ロードID５４０、及びロードスレッドID５５０から構成される。本発明の一実施例では、タグ部５２０は部分アドレスタグから構成される。他の実施例では、各入力５１０は、さらに、ストアスレッドID、ストアID、及びストア有効ビット（図示せず）を有する。ストアIDは、ロード命令がストアバッファ１６０にヒットした場合、フォワーディングストア命令のIDである。
【００２０】
本発明の一実施例では、ストアID及び/あるいはロードID５５０は、命令毎に一意的なトレースバッファ１４０への入力のインデックスである。本発明の一実施例では、ロードがストアバッファ１６０にヒットする場合、ストア有効ビットは０に設定される。本実施例では、ロードがストアバッファ１６０をミスした場合、ストア有効ビットは１に設定される。マッチしたストアIDを有する再生されたストアは、ストア有効ビットをクリアし（０に設定し）、トレースバッファ１４０のロード入力における予想ミスビットを設定する。本発明の一実施例では、タグ部５２０にマッチするプログラムの後のストアが、ストア有効ビットをクリアし（０に設定し）、トレースバッファ１４０のロード入力の予想ミスビットを設定する。本発明の一実施例では、ストアIDにマッチしたクリーンな（再生されていない）ストアは、ストア有効ビットを１に設定する。本発明の一実施例では、タグ５２０にマッチしないクリーンな（再生されていない）ロード、あるいはストア有効ビットクリア（０に設定された）とタグ５２０とマッチしたロードに応じて、パイプラインはフラッシュされ、トレースバッファ１４０のロード入力における予想ミスビットが１に設定され、ロード命令が再スタートされる。本発明の一実施例では、ロード入力が退けられるとき、入力有効ビット部５３０がクリアされる。
【００２１】
本発明の一実施例では、ロードバッファ１５０は、４通りの設定関係の６４の入力を有する。本発明の一実施例では、ロードバッファ１５０は、最も古いロードを取り替える方針を有する。本発明の一実施例では、スレッド入力の全体的リセットが、スレッドID CAMポート（図示せず）を利用することにより実行される。
【００２２】
本発明の一実施例では、コミットCPU１１０は、投機的プロセッサ１２０により正確に実行されたロードを含むすべてのロードとストアをメモリ実行ユニット２１３（アドレス生成ユニット、ロードバッファ、データキャッシュ）に発行する。たとえコミットプロセッサ１１０により発せられたロード命令がL0 Dキャッシュ１９０をミスしたとしても、潜在的に依存性のある命令による有効ロードデータはコミットされうる。本発明の一実施例では、ラインに書き込むため、ロードミスリクエストはL2キャッシュ１７０に送られるが、リターンデータのレジスタファイル２１２への書き込みは許可されない。ロードバッファ１５０のロードミスにより、パイプラインのフラッシュが実行され、ロード命令とそれに続くすべての命令が再スタートされる。
【００２３】
本発明の一実施例では、ストアはまた、ロードバッファ１５０にアクセスする。本発明の一実施例では、アドレスがストアID５４０にマッチするストアにマッチする場合、有効ビット５３０は入力５１０に設定される。本実施例では、入力５１０にヒットする後のストアは入力５１０を無効にする。本実施例では、ストアが入力５１０を無効にする場合、ロードID５５０を利用して、予想ミスされたロードビットを設定するためトレースバッファ１４０のインデックスを作成する。本実施例では、ロードがフェッチされ、トレースバッファ１４０における予想ミスされたロードビットが設定されていると検出されると、レジスタビットがスコアボード２１４において設定される。このレジスタスコアボードはまた、ロード先スコアボードビットと呼ばれる。本実施例では、この最適化により、ロードバッファ１５０におけるロードミスの結果として起こるフラッシュ数を減らすことができる。ここで、コミットCPU１１０は、トレースバッファ１４０とL0 Iキャッシュ１８０を同時に読み込む。本実施例では、トレースバッファ１４０とL0 Iキャッシュ１８０のこの同時読み込みにより、実行パイプラインを遅延させる必要なく、時間通りに予想ミスされたロード命令に対し、スコアボード２１４においてスコアボードレジスタビットの設定を可能にする。
【００２４】
本発明の一実施例では、投機的スレッドの第１命令において「再生モード」の実行が開始される。トレースバッファ１４０のある区画が空になると、投機的スレッドの実行だけでなく再生モードもまた終了される。本発明の一実施例では、命令発行・登録改名処理が以下のように変更される。トレースバッファ１４０から改名する名前を提供する登録はない。依存性のある命令を含む次の再生される命令までのすべての命令が発行される。クリーン（再生されない）命令はノーオペレーション（NOP）として発行される。すべてのロード及びストアがメモリに発行され、クリーン命令による結果がトレースバッファ１４０からレジスタファイル１３０にコミットされる。
【００２５】
図６は、本発明の一実施例を有するシステムを示す。システム６００は、マルチプロセッサ１００、メインメモリ６１０、ノースブリッジ６２０、ハブリンク６３０、及びサウスブリッジ６４０から構成される。典型的には、ノースブリッジの主たる機能は、マルチプロセッサのインタフェースである。さらに、ノースブリッジ６２０はまた、特に、アクセラレイティッドグラフィックスポート（AGP）、メモリ６１０、及びハブリンク６３０のためのコントローラを備えてもよい。サウスブリッジ６４０は、典型的には特に、ハードドライブコントローラ、ユニバーサルシリアルバス（USB）ホストコントローラ、入出力（I/O）コントローラ、及び任意の統合された音声装置のため機能する。
【００２６】
図７は、本発明の一実施例のための処理を示す。処理７００は、コミットプロセッサ１１０のような第１プロセッサによるプログラムスレッドの実行を開始するためのブロック１７０から開始される。ブロック７２０では、第１プロセッサによるコマンドの取り込みが実行される。ブロック７３０では、第１プロセッサによるコマンドの復号化が実行される。ブロック７４０では、投機的プロセッサ１２０のような第２プロセッサにより第１プロセッサと同じスレッドのプログラムの実行が、プログラムストリームとは離れた場所で開始されるよう指示される。ブロック７５０では、第２プロセッサによりプログラムスレッドの実行が開始される。ブロック７５１において第２プロセッサはコマンドを取り込む。ブロック７５２において、第２プロセッサは復号化を実行する。ブロック７５３において、第２プロセッサは、レジスタファイルを更新する。ブロック７５４において、第２プロセッサは、制御フロー情報を第１プロセッサに送信する。ブロック７６０において、第１プロセッサはレジスタファイルを更新する。ブロック７７０では、第１プロセッサが第２プロセッサと同じ実行ポイントに到達したかどうかチェックされる。ブロック７７０において、第１プロセッサがプログラムの同一ポイントにまだ到達していなければ、処理７００において処理の実行を継続するためブロック７８０に続く。ブロック７７０において、第１プロセッサがプログラムの同一ポイントに到達していれば、ブロック７９０においてプログラムが完了したかどうかチェックされる。ブロック７９０において、プログラムが完了したと判断されると、処理７００は停止され、そうでない場合、処理７００はAにおいて継続される。
【００２７】
上述の本発明の実施例の利用と共に、投機的な長期マルチスレッド先行取り込み及び先行実行の結果としてシングルスレッドアプリケーションが実行されるとき、パフォーマンスの向上が可能となる。本発明の実施例は、イン・オーダ（in-order）及びアウト・オブ・オーダ（out-of-order）マルチスレッドプロセッサにより実現可能である。
【００２８】
上記実施例は、装置あるいはマシーン読み出し可能な媒体に格納され、命令を実行するマシーンにより読み出されてもよい。マシーン読み出し可能な媒体には、マシーン（例えば、コンピュータ）による読み出し可能な形態での情報の提供（すなわち、格納及び/または送信）が可能な任意の機構が含まれる。例えば、マシーン読み出し可能な媒体には、ROM（Read Only Memory）、RAM（Random Access Memory）、磁気ディスク記録媒体、光記録媒体、フラッシュメモリ装置、電気的、光学的、音響的、あるいは他の形態の伝搬信号（例えば、キャリア波、赤外線信号、デジタル信号など）が含まれる。装置またはマシーン読み出し可能な媒体には、固体メモリ装置及び/あるいは回転式磁気または光学ディスクが含まれうる。コンピュータ間の相互接続のように、命令の各部分が異なるマシーンに分けられている場合、装置またはマシーン読み出し可能な媒体は分散されていてもよい。
【００２９】
いくつかの実施例が添付された図面と共に説明及び示されたが、これらの実施例は単なる例示のためのものであり、発明の範囲を制限するものではない。また、本発明は例示及び説明された特定の構成及び配置に制限されるものでなく、他の様々な変更が当業者には考え付くであろう。
【図面の簡単な説明】
【００３０】
【図１】図１は、本発明の一実施例を示す。
【図２】図２は、本発明の一実施例によるコミットプロセッサを示す。
【図３】図３は、本発明の一実施例による投機的プロセッサを示す。
【図４】図４は、本発明の一実施例によるストアフォワーディングバッファを示す。
【図５】図５は、本発明の一実施例によるロードオーダリングバッファを示す。
【図６】図６は、システムを有する本発明の一実施例を示す。
【図７】図７は、本発明の一実施例のブロック図を示す。
【図１】
2005521924.tif 000003
【図２】
2005521924.tif 000004
【図３】
2005521924.tif 000005
【図４】
2005521924.tif 000006
【図５】
2005521924.tif 000007
【図６】
2005521924.tif 000008
【図７】
2005521924.tif 000009
【国際調査報告】
2005521924.tif 000010
2005521924.tif 000011
2005521924.tif 000012
2005521924.tif 000013
2005521924.tif 000014