(57)【要約】プロセッサは、投機的スレッド化をサポートするためにアドレス監視テーブル及びアトミック更新テーブルを含み得る。プロセッサは、投機的スレッドの実行に関連した状態を維持するために１つ又は複数のレジスタを含むこともできる。プロセッサは、プリミティブ（状態のレジスタに書き込むための命令、バッファリングされたメモリ更新のコミットをトリガするための命令、状態のステータス・レジスタを読み出すための命令、及び／又は、トラップ／例外／割り込み処理に関連した状態ビットの１つをクリアするための命令）の１つ又は複数をサポートすることができる。その他の実施例も本明細書及び特許請求の範囲で記載する。
2009501366.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
複数のスレッドを同時に実行するための複数のスレッド・ユニットと、
前記複数のスレッドのうちの特定の一スレッドのアトミック命令ブロックの実行中に受けるメモリ書き込み命令のデータを記憶するためのメモリ・バッファ記憶領域とを備え、
前記メモリ・バッファ記憶領域は、前記アトミック命令ブロックそれぞれの確定境界において、厳密なアーキテクチャ状態が定義されるような持続状態の一部である装置。
【請求項２】
請求項1記載の装置であって、
前記特定のスレッドにおけるユーザレベル・プログラミング命令に応じて内容を更新することができる制御記憶領域を更に備える装置。
【請求項３】
請求項２記載の装置であって、
前記メモリ・アドレス記憶領域に前記メモリ書き込みデータを記憶するか否かを前記制御記憶領域の前記内容が制御する装置。
【請求項４】
請求項2記載の装置であって、
前記制御記憶領域は、状態値を保持するための１つ又は複数のフィールドを含むレジスタであり、
前記状態値は、(a)前記メモリ・バッファ記憶領域に前記メモリ書き込みデータを記憶するか否か、(b)前記メモリ・バッファ記憶領域をリセットするか否か、及び(c)前記メモリ・バッファ記憶領域をバイパスし、代わりにメモリに直接書き込むか否か
の状態の１つ又は複数を示す装置。
【請求項５】
請求項1記載の装置であって、
前記アトミック・ブロックの実行中に受けるメモリ読み出し命令のアドレスを維持するためのメモリ・アドレス記憶領域を更に備える装置。
【請求項６】
請求項1記載の装置であって、
前記メモリ・バッファ記憶領域からメモリにアトミック更新を行うためのロジックを更に備える装置。
【請求項７】
請求項６記載の装置であって、アトミック更新を行うための前記ロジックは更に、
前記アトミック・ブロックが実行を首尾良く完了した場合にのみアトミック更新を行う装置。
【請求項８】
請求項1記載の装置であって、
首尾良い実行を前記アトミック・ブロックができなかったか否かを内容が反映するユーザ可視ステータス記憶領域を更に備える装置。
【請求項９】
方法であって、
投機的スレッドにおけるトランザクション命令ブロックのうちの選択された命令をプロセッサによる実行中に実行する工程と、
前記選択された命令の実行境界において前記プロセッサの厳密なアーキテクチャ状態を維持する工程とを備える方法。
【請求項１０】
請求項9記載の方法であって、
前記トランザクション・ブロックの厳密なアーキテクチャ状態を維持しながらトラップ又は例外を処理する工程を更に備える方法。
【請求項１１】
請求項9記載の方法であって、
前記トランザクション・ブロックの厳密なアーキテクチャ状態を維持しながらトランザクション・ブロック命令の単一ステップを行う工程を更に備える方法。
【請求項１２】
方法であって、
アトミック・ブロックの実行中に局所メモリ書き込みをバッファリングする工程であって、前記バッファリングが、第１のユーザレベル・プログラミング命令に応じて行われる工程と、
前記アトミック・ブロックの実行中の障害を求めて監視する工程と、 
前記アトミック・ブロックの実行中に非障害状態としてトラップ又は例外を行う工程と、前記トラップ又は例外の処理中に持続状態として前記バッファリングされた局所メモリ書き込みを維持する工程と、
前記例外又は割り込みを処理した後に前記アトミック・ブロックの実行を再開する工程と、
前記障害が生じたか否かに基づいて、前記バッファリングされたメモリ書き込みのアトミック・メモリ更新を選択的に行う工程とを備える方法。
【請求項１３】
請求項12記載の方法であって、
割り込みのトリガ・シナリオ及びハンドラ・アドレスを示すユーザレベル・プログラミング命令に応じて前記監視が行われる方法。
【請求項１４】
請求項13記載の方法であって、
前記トリガ・シナリオは、１つ又は複数のステータス・ビットの値における変更を更に備える方法。
【請求項１５】
請求項14記載の方法であって、前記１つ又は複数のステータス・ビットは、前記ユーザレベル・プログラミング命令に関連したマスクによって規定される方法。
【請求項１６】
方法であって、
複数の協調型スレッドを同時に実行する工程と、
前記協調型スレッドのうちの第１のスレッド以外の全ての実行を、命令ブロックをアトミックに前記第１のスレッドが実行することを可能にするために停止する工程であって、ハードウェア機構を呼び出すための前記第１のスレッドの動作によってトリガされる工程と、
前記命令ブロックのアトミック実行を前記第１のスレッドが完了した後に他の協調型スレッドを再開する工程とを備える方法。
【請求項１７】
請求項16記載の方法であって、
ハードウェア機構を呼び出すための第１のスレッドの前記動作は、所定の値を特定のメモリ位置に書き込む工程を更に備える方法。
【請求項１８】
請求項17記載の方法であって、
前記他の協調型スレッドによる、前記特定のメモリ位置のポーリングなしで前記停止する工程が達成されるように前記第１のスレッドの前記動作の結果として生成される割り込みによって更にトリガされる方法。
【請求項１９】
請求項16記載の方法であって、
トランザクション実行をサポートするためのハードウェアを含むマルチスレッド・プロセッサによって行われる方法。
【請求項２０】
請求項19記載の方法であって、
前記ハードウェアは、アトミック・ブロックのメモリ書き込みをバッファリングするための記憶領域を含む方法。
【請求項２１】
請求項19記載の方法であって、
前記ハードウェアは、アトミック・ブロックのメモリ読み出しのアドレスを維持するための記憶領域を含む方法。
【請求項２２】
請求項1記載の装置であって、
前記スレッド・ユニットそれぞれは、ユーザレベル・トランザクション実行命令を受け取り、デコードするためのデコード・ロジックを更に備える装置。
【請求項２３】
請求項22記載の装置であって、
前記デコード・ロジックは、ユーザ・レベルのアトミック区分命令を更に受け取り、デコードする装置。
【請求項２４】
請求項22記載の装置であって、
前記デコード・ロジックは、トランザクション・ステータスを読み出す旨のユーザ・レベル命令を更に受け取り、デコードする装置。
【請求項２５】
請求項22記載の装置であって、
前記デコード・ロジックは、トランザクション実行中のトラップをイネーブルする旨のユーザ・レベル命令を更に受け取り、デコードする装置。
【請求項２６】
請求項22記載の装置であって、
前記デコード・ロジックは、アトミック・メモリ更新を行う旨のユーザ・レベル命令を更に受け取り、デコードする装置。
【請求項２７】
請求項5記載の装置であって、
前記アトミック・ブロックの特定のスレッドの実行中に前記メモリ読み出し命令の前記アドレスに前記複数のスレッドのうちの別のスレッドが書き込んだか否かを判定するためのロジックを更に備える装置。
【請求項２８】
請求項5記載の装置であって、
第２の記憶領域にメモリ読み出しアドレスを記憶するか否かを制御するためのユーザ可視機構を更に備える装置。
【請求項２９】
請求項２８記載の装置であって、前記ユーザ可視機構は、
ユーザレベル・プログラミング命令に応じて内容を更新することができる記憶領域を更に備える装置。
【請求項３０】
請求項１記載の装置であって、前記複数のスレッド・ユニットは、
複数のプロセッサ・コアを更に備える装置。
【請求項３１】
請求項１記載の装置であって、前記複数のスレッド・ユニットは、
単一のプロセッサ・コアに関連した複数の論理プロセッサを更に備える装置。
【請求項３２】
請求項16記載の方法であって、
前記停止する工程は、ユーザレベル・ソフトウェア命令に応じて起動される方法。
【請求項３３】
システムであって、
複数のスレッドのソフトウェア命令を記憶するためのメモリと、
前記複数のスレッドを同時に実行するための複数のスレッド・ユニットと、
前記複数のスレッドのうちの特定のスレッドのアトミック命令ブロックの実行中に受けるメモリ書き込み命令のデータを記憶するためのメモリ・バッファ記憶領域とを備え、
前記メモリ・バッファ記憶領域は、前記アトミック・ブロックの各命令の確定境界において、厳密なアーキテクチャ状態が定義されるような持続状態の一部であるシステム。
【請求項３４】
請求項33記載のシステムであって、
前記メモリがＤＲＡＭであるシステム。
【請求項３５】
請求項33記載のシステムであって、
前記アトミック・ブロックの実行中に受けるメモリ読み出し命令のアドレスを維持するためのメモリ・アドレス記憶領域を更に備えるシステム。
【請求項３６】
請求項33記載のシステムであって、
特定のスレッドにおけるユーザレベル・プログラミング命令に応じて内容を更新することができる制御記憶領域を更に備えるシステム。
【請求項３７】
請求項33記載のシステムであって、
前記制御記憶領域の前記内容は、前記アトミック・ブロックの実行中に非障害状態としてトラップを行うことができるか否かを制御するシステム。
【請求項３８】
請求項33記載のシステムであって、
前記スレッド・ユニットそれぞれは、ユーザレベル・トランザクション実行命令を受け取り、デコードするためのデコード・ロジックを更に備えるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願の開示は、一般に情報処理システムに関し、特にスレッドレベルの投機実行のサポートに関する。
【背景技術】
【０００２】
ハードウェアにおけるマルチスレッド化のサポートが一層増えてきている。例えば、一手法では、マルチプロセッサ・システム（チップ・マルチプロセッサ（「CMP」システムなど））におけるプロセッサはそれぞれ、複数のソフトウェア・スレッドの１つを同時に処理することができる。同時マルチスレッド化（「SMT」）と呼ばれている別の手法では、単一の物理プロセッサは、オペレーティング・システム及びユーザ・プログラムには複数の論理プロセッサとしてみえるようにされる。SMTの場合、複数のソフトウェア・スレッドが、スイッチングなしで単一のプロセッサ上でアクティブであり、同時に実行することが可能である。すなわち、各論理プロセッサは完全なアーキテクチャ状態組を維持するが、物理プロセッサのその他の多くの資源（キャッシュ、実行ユニット、分岐予測器、制御ロジックやバスなど）は共有される。SMTの場合、複数のソフトウェア・スレッドからの命令がよって、各論理プロセッサに対して同時に実行する。
【０００３】
ソフトウェア・スレッドの同時の実行をサポートするシステム（SMT及び／又はSMPシステムなど）の場合、アプリケーションをマルチスレッド・コードに並列化して、システムの同時実行の潜在性を利用することができる。マルチスレッド・アプリケーションのスレッドは、通信し、同期化する必要があり得る。これは、共有メモリを介して行われることが多い。さもなければ、単一スレッド・プログラムは、プログラムを複数のスレッドに編成し、別個のスレッド・ユニット上にそれぞれがあるスレッドを同時に実行することによってマルチスレッド・コードに並列化することもできる。さもなければ単一のスレッド・プログラムの並列化処理中に、依存性に関する特定の前提が設けられる場合、この手法は時には、投機的マルチスレッド化と呼ばれる。
【０００４】
マルチスレッド・プログラムの性能を向上させ、かつ／又は、マルチスレッド・プログラムの書き込みを容易にするため、スレッドレベルの投機実行を用いることが可能である。スレッドレベル投機実行は、投機命令のブロックのスレッドの実行を表す。すなわち、スレッドは命令を実行するが、その他のスレッドは、投機的に実行された作業をコミットするか又は廃棄（アボートとしても知られている）する決定をスレッドが行うまで命令の結果をみることが可能でない。
【０００５】
プロセッサは、投機命令ブロックの一部として行われるメモリ更新をバッファリングし、含めるための機能を提供することによって、より効率的なスレッドレベル投機実行を行うことが可能である。投機的メモリ更新を実行又は廃棄するよう命令されるまでメモリ更新をバッファリングすることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
プログラムが投機実行したいことがあり得る対象の１つには、コード・ブロックが、その他のスレッド上で同時に実行しているその他のコードに依存するか否かということがある。プロセッサは、依存性の検出のサポートを提供するために、これをより効率的に行うことが可能である。例えば、プロセッサは、別の同時スレッドによって後に修正されるメモリ位置をコードの投機的ブロックが読み出すか否かを検出するためのサポートを提供することができる。
【課題を解決するための手段】
【０００７】
本発明の実施例は、以下の図面（同じ構成要素は同じ参照符号で示す）を参照して分かり得る。前述の図面は、限定的であることを意図するものでなく、その代わりに、トラザクション実行サポートを備えた投機的マルチスレッド化を提供するためのシステム、方法及び機構の、選択された実施例を示すよう備えている。
【発明を実施するための最良の形態】
【０００８】
以下の説明では、スレッドレベルの同期実行に対するハードウェア・サポートを提供するための方法、システム及び機構の選択された実施例を表す。本明細書及び特許請求の範囲記載の装置、システム及び方法の実施例は、単一コア又はマルチコアのマルチスレッド化システムに利用することができる。以下の説明では、具体的な多くの詳細（プロセッサ・タイプ、マルチスレッド化環境、システム構成、データ構造や、命令のニーモニック及びセマンティックなど）を記載して、本発明の実施例のより徹底的な理解を提供する。しかし、前述の具体的な詳細なしで本発明を実施することができるということは当業者によって認識されるであろう。更に、本発明を不必要に分かりにくくすることがないよう、周知の特定の構造、回路及び同様なものは詳細に示していない。
【０００９】
スレッドレベルの投機実行を利用するマルチスレッド作業負荷の場合、同時に実行するスレッドの少なくとも一部は（全部でなくても）同じメモリ空間を共有することができる。本明細書及び特許請求の範囲使用の語「協調型スレッド」は、同じメモリ空間を共有するスレッド群を表す。協調型スレッドはメモリ空間を共有するので、同じメモリ項目との間で読み出し及び／又は書き込みを行うことができる。よって、正確で有意義な作業を行うために、同時実行される協調型スレッドは互いに同期化されるべきである。
【実施例】
【００１０】
図１は、メモリの共通の論理ビューを共有する２つの協調型スレッド１２５、１２６を図で示すブロック図である。前述の共有メモリ・マルチプロセッシングのパラダイムを、並列プログラミングと呼ばれる手法に用いることができる。この手法によれば、アプリケーション・プログラマは、「アプリケーション」又は「処理」と場合によっては呼ばれるソフトウェア・プログラムを、ソフトウェア・プログラムの並行処理を表すために同時に実行する対象の複数のスレッドに分割することができる。すなわち、さもなければ単一スレッド化されたプログラム又は「処理」１２０は、同時に実行することができる２つのスレッド１２６、１２５に分割することができる。
【００１１】
図１は、各スレッド１２５、１２６がそれ自身のアプリケーション及びシステム状態202a、202bそれぞれを有することを示す。メモリの特定のロジカル・ビュー２０４が、特定の処理１２０に関連した協調型スレッド１２５、１２６によって共有される。よって、少なくとも１つの実施例の場合、協調型スレッド１２５、１５６はそれぞれ、処理１２０のオペレーティング・システムによって構成される仮想メモリの同じビューを供給することができ、互いの仮想アドレス空間に対する可視度を有し得る。
【００１２】
図１は、記載を単純にするために、処理１２０の２つのスレッド１２５、１２６のみを示す。しかし、前述の例の例証は、限定するものと解されるべきでない。処理１２０に関連した協調型スレッドの数は、３以上であり得る。処理１２０に関連したスレッドの数の上限は、OSプログラム（図示せず）によって制限され得る。
【００１３】
協調型スレッドのメモリ・アクセスの同期化を扱うための種々の手法が考え出されている。協調型スレッドの同期化を扱う一般的な手法には、メモリ・ロックの使用がある。特定のコード部分の共有データに対する排他的なアクセスを特定のスレッドが有することを保証するためにメモリ・ロックを用いることができる。従来のマルチスレッド・アルゴリズムでは、クリティカルな部分を複数のスレッドが同時に実行した場合に誤った挙動を生じ得る何れかのクリティカルなコード部分近くでロックを用い得る。前述の手法の場合、スレッドはロックを獲得し、そのクリティカルな部分を実行し、次いで、ロックを解除することができる。複数のスレッドが同時に実行することを阻止し得るので、性能がロックによって劣化し得る。必要以上に「念のために」、ロックが保有されている場合、性能が更に劣化し得る。すなわち、多くの場合、ロックは幾分悲観的に用いられ得る。
【００１４】
ロックの性能の影響を最小にするために、別々のコード部分に関連するか、又は別々のコード・ブロックに関連した細かい粒度でロックが行われるように別々の複数のロックをアプリケーションによって用いることが可能である。細粒度ロックはコードで実現するのが面倒であり得るものであり、複数のロックのオーナシップを単一スレッドが獲得しなければならない場合、デッドロックを起こしやすいことがあり得る。
【００１５】
種々の理由で、クリティカルな部分内の複数のスレッドによる共有データ構造組への同時アクセスは実際に、如何なる特定の生起の場合にも競合しないことがあり得る。前述の場合、ロックによって提供される直列化は、正確な実行を確実にするうえで必要でない。一スレッドが、開放されたロックを待ち、次いで、直列的にロックを、正確なメモリ値を維持するためにそうした直列化が必要でない場合であっても、獲得するので、前述の場合におけるロックの悲観的な使用によって、並列処理の利点の完全な実現が阻止され得る。
【００１６】
よって、不必要な直列化を回避するための一手法は、投機的ロック回避（「SPE」）として知られている。SPE手法はロックのコストを削減することができる。前述の手法は、「Speculative  Lock  Elision:  Enabling  Highly  Concurrent  Multithreaded  Execution,  Rajwar  et  al.,  Proc.  30th  ACM/IEEE  Int'l.  Symp.  On  Microarchitecture,  2001」に開示されている。前述の手法の場合、特定の同期化命令は悲観的に使用されており、必要でない。SPEの場合、特定の同期化命令は、必要でないとして予測され、回避される。同時に実行される２つのクリティカルな部分が同じメモリ位置の何れにも接触しない場合、ロックの人工的な直列化は回避される。
【００１７】
前述のロッキング手法及びSPE手法とは別の手法として、トランザクション実行が登場している。トランザクション実行手法の下では、命令ブロックをアトミック・ブロックとして区分することができ、ロックの必要なくアトミックに実行することができる。（本明細書及び特許請求の範囲使用の「アトミック・ブロック」及び「トランザクション・ブロック」は同義で用いることができる。）区分された命令それぞれの正味の影響全てがみられ、プロセッサ状態にコミットされるか、又は、区分された命令の何れかの影響が何らみられないか、若しくはコミットされないように意味論を備えることができる。これは、同時処理の点で、かつ、プログラム・ライタによって行われることが必要な推論の点でもいくつかの利点を有する、共有メモリのアクセスのための同期化の別の形態を提供する。
【００１８】
投機的ロック回避、及びトラザクション実行は何れも、スレッドレベルの投機的サポートによって達成することが可能である。何れの場合にも、意味論は、データ依存性の監視中にコード・ブロックを投機的に実行することを必要とする。必要なサポートは、投機的な領域内で行われるメモリ更新をバッファリングし、次いで、更新をコミット又は廃棄するための特定のやり方を含む。必要なサポートは、投機実行の期間中に別のスレッドによって修正された値が投機的領域内で読み出されたメモリに存在していることを検出する特定のやり方も含む。これは、投機的領域内で読み出されるメモリ・アドレス全てを記憶し、他のスレッドによる更新を求めてそれらを監視するための特定のやり方を必要とする。
【００１９】
投機的マルチスレッド化は、プログラムをマルチスレッド化し、スレッドレベルの投機実行を用いるための別の手法である。投機的マルチスレッド化の場合、シーケンシャル・プログラムがシーケンシャル・タスク（又は、次いで並列に実行されるコード・ブロック）に分割される。元のシーケンシャルな意味論を維持するためにタスクはその更新をコミットすることが確実にされる。タスクは更に、観察した値を先行タスクによる更新が変えたかを求めて監視される。その場合、投機的更新を廃棄し、作業をやり直すことが必要である。これに対するハードウェア・サポートは、前述と基本的に同様のスレッドレベル投機実行サポートである。
【００２０】
スレッドレベル投機実行に対するハードウェア・サポートをどのようにして構築するか、及び、ソフトウェア・インタフェースをどのようにして設けるかについて種々の多くの提案がされている。前述の手法の大半は、種々のインタフェースを介して、同様の基本機能を提供している。事実上、それらは、アーキテクチャ状態の一部をチェックポイントする。次いで、メモリ更新をバッファリングし、外部書き込みのために読み出されるメモリ位置を監視して、実行し続ける。
【００２１】
協調型スレッドのアトミック・ブロックの実行中に、少なくとも１つの既知のトランザクション実行手法の場合、スレッドによって生成されるメモリ状態は投機的である。アトミック命令ブロックが、実行を首尾良く完了するか否かは分からないからである。すなわち、第２の協調型スレッドは同じデータを求めて競合し得るものであり、その場合、第１の協調型スレッドはアトミックに実行することが可能でないことが分かる。すなわち、第１の協調型スレッド及び／第２の協調型スレッドに関する誤投機実行が存在している。誤投機実行をもたらすために、少なくとも特定の本願提案のトラザクション実行手法によってアトミック・ブロックの命令の実行中に、プロセッサ状態は更新されない。その代わりに、プロセッサ状態は、アトミック・ブロックが実行を完了するまで、未定義の中間状態として維持される。
【００２２】
前述の手法の場合、アトミック・ブロックの各命令におけるプロセッサの状態は、アトミック・ブロックの状態が最終的にコミットされるか否かに依存する。よって、アトミック・ブロックの実行中に、中間状態は、１）状態が最終的にコミットされる場合（前述の投機的メモリ・バッファにおいて維持される状態と同等である場合）、第１の状態であり、２）状態が最終的にコミットされない場合、第２の状態である。
【００２３】
よって、特定の一般的なトランザクション実行手法の場合、アトミック・ブロックの中間状態は未定義である。これは、アトミック・ブロック内の命令に対する特定の処理（高精度のトラップ処理や単一ステップのデバッグなど）を実行不能にする。しかし、図２は、投機的スレッド化及びトランザクション実行をサポートし、アトミック・ブロック内の各命令の境界（確定など）における厳密なアーキテクチャ状態も提供する。
【００２４】
図２は、トランザクション・ブロック内の命令を含む各命令の境界において、厳密なアーキテクチャ状態を提供する一方でトランザクション実行を実現する機能を提供するマルチスレッド・プロセッサ２００を示すブロック図である。プロセッサ２００は、一度に2つ以上のスレッドの同時実行をサポートする。本明細書及び特許請求の範囲使用の「スレッド」の語は、少なくとも、処理のその他のスレッドと同時に実行することができる命令ストリームの独立した実行の概念を含む。したがって、「スレッド」の語は、関連したプロセッサ状態とともにソフトウェア命令ストリームを実行するという考えを包含する。
【００２５】
少なくとも一実施例の場合、プロセッサ２００は、協調型スレッドの使用によって並列化されているアプリケーション・コードの一部分を実行することができる。例えば、スポーニー・スレッドと呼ばれる投機的スレッドは、スポーンを実行したスレッドによってプロセッサ２００上で実行されるコードに、プログラム順序において先の命令を実行するようプロセッサ２００上で実行することができる。スポーンを実行したスレッドは、スポーナ・スレッドと呼ばれる。
【００２６】
図２は少なくとも１つのCMP実施例を示す。複数スレッド・ユニット１０４それぞれはプロセッサ・コアであり、複数のコア104a乃至104nが単一チップ・パッケージ１０３に存在している。各コア１０４は、単一スレッド・プロセッサ又はマルチスレッド・プロセッサである。少なくとも１つの実施例の場合、スポーナー・スレッド（例えば、104cなど）を実行するコアとは別個のCMPコア（例えば、104aなど）がスポーニー・スレッドを実行する。
【００２７】
少なくとも１つの別の実施例の場合、プロセッサ２００は、同時マルチスレッド化をサポートする単一コア・プロセッサであり得る。前述の実施例の場合、各スレッド・ユニット１０４は、それ自身の次命令ポインタ及びフェッチ・ロジックを有する論理プロセッサであるが、同じプロセッサ・コアが全スレッド命令を実行する。（「スレッド・ユニット」及び「シーケンサ」の語は本明細書及び特許請求の範囲では同義に用いている場合がある。）前述の実施例の場合、論理プロセッサ１０４はその自身のアーキテクチャ状態のバージョンを維持するが、単一のプロセッサ・コアの実行資源が全スレッド間で共有される。
【００２８】
前述の別の実施例の場合、スポーニー・スレッドは、投機的マルチスレッド化をサポートする単一コア同時マルチスレッド化システムにおいて実行される。前述の実施例の場合、スポーニー・スレッドが、スポーナ・スレッドと同じ物理プロセッサ２００上の第２のSMT論理プロセッサ（例えば、104aなど）によって実行される一方、スポーナ・スレッドは、別のSMT論理プロセッサ（例えば、104nなど）によって実行される。本明細書及び特許請求の範囲記載のトランザクション実行の実施例は何れかのマルチスレッド化手法（SMT、CMPマルチスレッド化やその他のマルチプロセッサ・マルチスレッド化や何れかのその他の既知のマルチスレッド化手法を含む）において利用することができる。
【００２９】
本明細書及び特許請求の範囲記載のプロセッサ２００のＣＭＰの実施例は、プロセッサ・コア毎の単一スレッド１０４を表すが、本明細書及び特許請求の範囲記載の開示が、単一スレッド・プロセッサに限定されるとみなすべきでない。本明細書及び特許請求の範囲記載の手法は、何れのCMPシステム（単一チップ・パッケージ１０３内に複数のマルチスレッド・プロセッサ・コアを含むものを含む）においても利用することができる。
【００３０】
よって、図２は、２つ以上のスレッド・ユニット104a乃至104nをプロセッサ２００が含むことを示す。説明の目的で、スレッド・ユニットの数は「N」として表す。前述のスレッド・ユニット１０４が２つを超えることが任意の特性であることは、図２において点線及び省略で表す。すなわち、図２はN＞２を示す。記載を単純にするために、CMP実施例を本明細書及び特許請求の範囲において更に詳細に記載する。すなわち、各スレッド・ユニット１０４は、３２ビット・プロセッサ及び／又は６４ビット・プロセッサ（ペンティアム（登録商標）、ペンティアム（登録商標）プロ、ペンティアム（登録商標）II、ペンティアム（登録商標）III、ペンティアム（登録商標）4、並びにアイテニアム（登録商標）及びアイテニアム（登録商標）２マイクロプロセッサなど）を表し得る。しかし、前述の部分的なリストは限定的に解されないものとする。
【００３１】
図２に示すプロセッサ２００の実施例は、投機的マルチスレッド化をサポートする特定の意味論を備えるよう構成される。（それぞれは、以下に更に詳細に説明する。）前述の構成の特定の具体的な実現形態を以下に説明するが、前述の実現形態の詳細は、例示の目的でのみ備えるものであり、限定的に解されないものとする。
【００３２】
まず、プロセッサ２００は、共有データのメモリ処理を含む命令組の最初及び最後を区分する特定のやり方（本明細書及び特許請求の範囲では「アトミック・ブロック」又は「トランザクション・ブロック」として同義で表す）を提供する。
【００３３】
第２に、プロセッサ２００は、協調型スレッド間の競合を検出するためにロード（メモリ・ロード）アドレスを監視するハードウェアを含む。
【００３４】
第３に、プロセッサ２００は、演算をバッファ記憶（メモリ書き込み）するためのハードウェア（「記憶バッファ」）を含む。
【００３５】
第４に、プロセッサ２００は、（アトミック・ブロックの実行中に競合が認識されない場合、記憶バッファからメモリのアトミック更新を行うよう構成される。
【００３６】
最後に、プロセッサ２００は、アトミック・ブロックの実行中に競合が検出された場合、記憶バッファのメモリ更新を廃棄し、障害を通知する。前述の一般的な機能は、プロセッサ２００の少なくとも１つの実施例によって提供される。
【００３７】
アトミック・ブロックの区分に関しては、プロセッサ２００は、いくつかのやり方の何れかで前述のサポートを提供することができる。少なくとも１つの実施例の場合、プログラマは、命令演算コード自体に特定のビットをセットすることによって読み出し命令又は書き込み命令がアトミック・ブロックの一部である旨を示すことができる。例えば、「アトミック」インディケータは、命令演算コードの一部であり得るか、又は、ロード命令若しくは記憶命令の特定のプリフィックスによって示し得る。
【００３８】
少なくとも１つの別の実施例の場合、プロセッサ２００によってサポートされる命令セットは、明示的なアーキテクチャ区分命令を含み得る。すなわち、プロセッサ２００の命令セットは、プログラマによってアトミック・ブロックの最初に配置し得る「監視開始」命令を含み得る。同様に、プロセッサ２００の命令セットは、プログラマによってアトミック・ブロックの最後の命令の後に配置し得る「監視停止」命令も含み得る。少なくとも１つの実施例の場合、「監視開始」命令及び「監視停止」命令を行うよう制御レジスタを操作するために単一の命令を用いることができる。前述の命令及び制御レジスタの少なくとも１つの実施例の更なる説明は、図７に関して以下に記載する。
【００３９】
前述の通り、投機的マルチスレッド化及びトランザクション実行をサポートするプロセッサ２００の実施例は、協調型スレッド間の競合を検出するためにロード（メモリ読み取り）アドレスのハードウェアベースの監視を提供することができる。図２は、外部更新を求めて監視する対象の１つ又は複数のアドレスを記憶するためのテーブル１０６を含み得る。前述のテーブル１０６は、アドレス監視テーブル（「ＡＭＴ」）と呼び得る。ＡＭＴ１０６の論理コンセプトは、スレッド・ユニット１０４についてアーキテクチャ的に定義することができるが、必ずしも、別個のハードウェア・テーブル構造として実現されなくてよい。
【００４０】
前述の通り、アトミック・ブロック内の潜在的な依存関係及び／又は共有データ競合があいまいであり得るので、ＡＭＴ１０６は有用であり得る。プログラマは、アトミック・ブロックの実行中にアトミック・ブロックにおいて用いるアドレスに別のスレッドが書き込もうとすることを知っていた場合、同時実行中にその位置を読み出そうとしなかったであろうと思われる。すなわち、元のプログラムに競合／依存関係が存在していたことをプログラマが知っていた場合、前述のコード並列化は試行されなかったであろう。コードは、元々書き込まれていたように、順次に競合命令を実行することが可能であったであろう。よって、ＡＭＴ１０６は、誤投機実行の識別に有用であり得る。
【００４１】
更に、図２は、更新を行うスレッドが誤投機実行していないことが判定された場合、その後に行い得るメモリ更新をバッファリングするためのテーブル１０８も含むことができる。前述のテーブル108は、アトミック更新テーブル（「ＡＵＴ」）と呼び得る。（ＳＭＴ実施例の場合、テーブルの別々の部分を各論理プロセッサに割り当てて、単一のＡＭＴ１０６及びＡＵＴ１０８を論理プロセッサ間で共有することができる。）ＡＵＴ１０８は、アトミック・ブロック中に行われるメモリ書き込みをバッファリングすることができる。前述の手法は、アトミック・ブロックの中間状態を利用するその他のスレッドを行うことを回避する。
【００４２】
別のスレッドとの未解決の依存関係又は競合なしでアトミック・ブロックが実行を完了することができたか否かが最終的に判定されると、ＡＵＴ１０８にバッファリングされたメモリ更新をアトミックに行うことができる。しかし、トランザクション・ファイルに障害が生じた場合（すなわち、競合、又は未解決のデータ依存関係が理由で、完全な実行をアトミック・ブロックが完了することができない場合）、ＡＵＴ１０８はクリアリングすることができ、バッファリングされた更新は行われない。このようにして、誤投機実行が行われた旨の判定に応じて、既に行われたメモリ書き込みはアンロールしなくてよい。
【００４３】
図２に示すプロセッサ２００の少なくとも１つの実施例は、アトミック・ブロックにおける各命令の境界（確定など）における厳密なアーキテクチャ状態を以下のように提供する。プロセッサ２００における特定のユーザ制御可能な状態は、アトミック・ブロックの命令の実行中にトラップ又は例外が生じた場合にトランザクション障害が生じるべきでない旨を示すよう設定することができる。その代わりに、例外／トラップが処理されている間、ＡＭＴ１０６及びＡＵＴ１０８の内容は維持される。前述の処理後、アトミック・ブロックの実行は続行し得る。このようにして、トラップ又は例外が処理された後にアトミック・ブロックの実行を再開することができるように厳密な状態が維持される。
【００４４】
図２にはＡＭＴ１０６及びＡＵＴ１０８を別個のブロックとして示しているが、前述の例証は、前述のテーブルが論理的に別個の構造であることを伝えることを意味している。前述のテーブル１０６、１０８はアーキテクチャ的に明示的であり得るが、その特定の編成及び物理構造は、設計上の選択であり、物理的な実現の厳密なやり方は、何れかの特定の構造又は編成に限定されると解されないものとする。一般に、AMT１０６及びAUT１０８の情報は、何れの記憶領域にも維持することができる。例えば、論理「テーブル」１０６、１０８は、ビットの収集物であり得るか、又はその他の既存のハードウェア構造の拡張であり得る。
【００４５】
AMT１０６及びAUT１０８を実現する特定のやり方に関し、テーブル１０６、１０８は一般に、１つ又は複数の物理的な記憶領域に有限論理構成として実現することができる。テーブル１０６、１０８の有限性は必然的に、トランザクションとして首尾良く実行可能な命令の数を制限する。よって、バックストア１６０における１つ又は複数のメモリ・テーブルを用いて、AMT１０６及び／又はAUT１０８のサイズを拡張することができる。
【００４６】
図２は、プロセッサ２００の少なくとも１つの実施例がメモリ１５０に結合し得ることを示す。メモリ１５０の一部分をソフトウェアによって利用して、AMT１０６及び／又はAUT１０８のバックストア１６０を維持することができる。ソフトウェアは、オーバフロー・エントリのテーブル１０６、１０８からバックストア１６０への流出を制御することができる。
【００４７】
少なくとも１つの実施例の場合、AMT１０６は、ロード・バッファと並列の構造として実現することができる。同様に、AUT１０８は、記憶バッファに並列の構造として実現することができる。前述の実施例の考えられる１つの構成を図８に示す。
【００４８】
図８は、AMT１０６及びAUT１０８、並びに、ロード要求バッファ４４０及び記憶要求バッファ４５０を含むプロセッサ１００４の少なくとも１つの実施例を更に詳細に示すブロック図である。AMT１０６、AUT１０８、記憶要求バッファ４４０及び／又はロード要求バッファ４５０のうちの１つ又は複数は、メモリ配列バッファ（MOB）２２３の一部であり得る。プロセッサ１００４は、命令セットの命令を受け取り、デコードするためのデコーダ1022も含み得る。デコーダ１０２２は、命令を受け取り、デコードすることができることがあり得る。デコーダ１０２２によってデコードされる対象の命令は、表１に関し説明する動作の実行のための１つ又は複数の命令を含み得る。
【００４９】
図８は、非ブロック化キャッシュ・メモリ・サブシステムを実現するプロセッサ１００４を示す（キャッシュ・メモリ・サブシステムは時には、本明細書及び特許請求の範囲では略称「キャッシュ・システム」として呼ぶものとする）。キャッシュ・システムは、L0キャッシュ４６０及びL1キャッシュ４１０を含む。少なくとも一実施例の場合、L0キャッシュ４６０及びL1キャッシュ４１０はダイ上キャッシュである。プロセッサ１００４は、主メモリ１０２からもデータを取り出すことができる。主メモリ１０２、Ｌ１キャッシュ４１０、及びL0キャッシュ４６０は併せてメモリ階層２４０を形成する。
【００５０】
メモリ配列バッファ（「MOB」）２２３は、ディスパッチから完了までの未処理ロード及び記憶命令を一時的に保持することができる。少なくとも１つの実施例の場合、記憶命令のためのこの状態情報を記憶要求バッファ４５０に維持することができ、ロード命令のこの状態情報をロード要求バッファ４４０に維持することができる。
【００５１】
少なくとも１つの実施例の場合、ロード命令のトラッキングは任意に、AMT１０６によって処理することができる。AMT１０６は、トランザクション実行中のロード要求バッファ４４０と共に利用することができる。
【００５２】
少なくとも１つの実施例の場合、未処理記憶命令の状態情報は、通常の処理の場合に記憶要求バッファ４５０に維持することができるか、又は、代わりに、トランザクション実行中にAUT１０８において維持することができる。
【００５３】
図８は、制御部分５１５を各記憶バッファ・エントリ450a乃至450nが含み得ることを示す。図８に示すように互いに論理的に関連しているが、必ずしも、記憶装置の連続した記憶領域に、記憶要求バッファ・エントリ450a乃至450nの制御部分515及びデータ部分480が物理的に存在していなくてもよく、同じ記憶装置に存在していなくてもよいことを当業者は認識するであろう。例えば、図８は、記憶バッファ４５０の制御部分５１５がMOB２２３に含まれ得る一方、データ部分４８０がダイ上キャッシュ４１０に存在し得ることを示す。
【００５４】
少なくとも１つの実施例の場合、MOB２２３は制御ロジック４７５を含む。制御ロジック４７５は、記憶データをバッファリングすべき所が記憶要求バッファ４５０であるか、AUT１０８であるかを判定するための選択ロジック２３６を含む。少なくとも１つの実施例の場合、選択ロジック２３６は、記憶要求バッファ４５０及びAUT１０８の一方のみに記憶を記録すべきである旨を指示することができる。すなわち、記憶データを保持する所の判定は、「排他的論理和」演算であり得る。選択ロジック２３６は、アトミック実行が行われていない場合に、記憶状態を記憶要求バッファ４５０にバッファリングすることができる旨を示し得る。しかし、アトミック実行中、その代わりに、選択ロジック２３６は記憶状態をAUT１０８にバッファリングさせることができる。
【００５５】
少なくとも１つの実施例の場合、選択ロジック２３６は、メモリから読み出された、ロード・データのメモリ・アドレスをAMT１０６に入力すべきか否かも判定するものとする。前述の入力は、アトミック実行中に、メモリ読み出しデータをロード要求バッファ４４０にプルする通常の処理とともに行うことができる。すなわち、AMT１０６におけるロード・アドレスを監視するか否かについての判定は、通常のロード要求バッファ４４０処理に加えて監視が行われるような選択的な処理であり得る。
【００５６】
AMT１０６及びAUT１０８の利用によって、あいまいなデータ依存関係又はデータ競合が理由で並列化がさもなければ困難なコードの投機的マルチスレッド化が可能になる。論理アドレス監視テーブル１０６及び論理アドレス更新テーブル１０８の使用によって、プロセッサ２００は、実行前にあいまいにみえる特定の潜在的なデータ依存関係又はデータ競合が実行中にスレッド間に存在し得ることを検出することができる。前述のように、テーブル１０６、１０８はよって、ロード（メモリ読み出し）処理の監視、及び記憶（メモリ書き込み）処理のバッファリングそれぞれをサポートする。
【００５７】
図３は、AMT１０６及びAUT１０８を用いたトランザクション実行サポートによって投機的マルチスレッド化を行う方法３００の少なくとも１つの実施例のデータ及び制御フローを示すフロー図である。一般に、方法３００は、アトミック・ブロックの命令を実行するが、更新をメモリにバッファリングする。更に、方法３００は一般に、同じアドレスへの書き込みを別のスレッドが行おうとしたかを判定するために、アトミック・ブロックの実行中に読み出されるメモリ・アドレスを監視するようにする。肯定の場合、アトミック・ブロックの実行中にそのメモリ・アドレスに対する競合が存在しており、ブロックのトランザクション実行は、メモリ・アドレスに対する競合が理由で障害が生じる。
【００５８】
図３は、ブロック３０２で方法３００が始まることを示す。トランザクション・ブロックとして区分されたブロック上で方法３００が行われるものとする。したがって、少なくとも１つの実施例の場合、前述のように、方法３００を開始する前に「監視開始」命令が実行されているものとする。更に、前述の実施例の場合、「監視停止」命令の実行によって、ブロック３１４での判定が偽の値に評価されるものとする。
【００５９】
あるいは、アトミック・ブロックの一部として命令を実行するものとするプレフィックス、命令コード・フィールドやその他の個別化されたインディケータとともにアトミック・ブロック内の各ロード及び記憶命令をマーキングすることによって区分を表すことができる。前述の実施例の場合、任意のブロック３０８及び３１２（破線を用いることによって任意的として表す）を行って、命令がアトミック・ブロックの一部であるか否かを判定する。
【００６０】
少なくとも一実施例の場合、方法３００は、AMT１０６及びAUT１０８（図２参照）を含むプロセッサのスレッド実行ユニット（例えば、図２の１０４参照）によって行われるものとする。よって、命令がアトミック・ブロックの一部であるか否かの判定は、区分された命令の通常の実行中に行われたメモリ書き込みは何れも１０８にバッファリングされるべきであり、区分された命令の通常の実行中に行われた何れのメモリ読み出しのアドレスもAMT１０６に維持されるべきであることも示す。
【００６１】
図３は、図示した方法３００によるアトミック・ブロックの実行中のどの時点でも、トラップ、例外又は割り込みを行うことができることを示す。前述のイベントが行われた場合、厳密なアーキテクチャ状態を維持することができる。すなわち、ＡＭＴ１０６及びＡＵＴの内容を例外／割り込み／トラップ・イベントの処理中に維持することができる。前述のイベントは、障害をもたらす条件として扱われない。その代わりに、図３に示す方法３００によるアトミック・ブロックの実行は、イベントの処理後に再開することができる。図３は、ブロック３９０において、前述のイベントが方法３００の少なくとも１つの実施例の場合の障害条件でないことを示す。
【００６２】
図３は、方法３００の処理がブロック３０２からブロック３０４に進むことを示す。ブロック３０４では、スレッドの次命令がフェッチされ、デコードされる。処理は次いでブロック３０６に進む。ブロック３０６では、ブロック３０４でフェッチされ、デコードされた命令がメモリ読み出し命令（例えば、ロード命令など）であるか否かについて判定される。肯定の場合、処理は任意ブロック３０８に進む。さもなければ、処理はブロック３１０に進む。
【００６３】
任意ブロック３０８は、命令がアトミック・ブロックの一部であるか否かを判定する。前述の判定のやり方は、種々の実現形態間で変わり得る。前述の情報をメモリ書き込み命令自体に埋め込まないが、その代わりに「監視開始」命令を用いる実現形態の場合、前述の判定３０８は、メモリ読み出し命令毎に行わなくてよい。その代わりに、ブロック３０２で、方法３００の実行の開始の前に「監視開始」が実行されており、実行中に方法３００がこのことを知っているものとする。例えば、少なくとも１つの実施例の場合、前述の情報は、制御レジスタ（後述するトランザクション制御レジスタ（「ＴＣＲ」）など）に維持することができる。前述の実施例の場合、処理はブロック３０６からコネクタ「Ａ」に進み、任意ブロック３０８は行わない。コネクタ「Ａ」に関連した処理は、図４に関して更に詳細に説明する。
【００６４】
ブロック３１０では、ブロック３０４でフェッチされ、デコードされる命令がメモリ書き込み命令（例えば、記憶命令など）か否かが判定される。肯定の場合、処理は任意ブロック３１２に進む。さもなければ、処理はブロック３１１に進む。
【００６５】
任意ブロック３１２は、メモリ書き込み命令がアトミック・ブロックの一部であるか否かを判定する。やはり、前述の判定のやり方は、種々の実現形態の実施例間で異なり得る。メモリ書き込み命令自体に前述の情報を埋め込まないが、「監視開始」命令を用いる実現形態の場合、前述の判定３１２はメモリ書き込み命令毎に行わなくてよい。その代わりに、前述のように、方法３００の実行の開始に先行して「監視開始」命令が実行されているものとする。やはり、前述の情報を制御レジスタに記憶することができる。前述の実施例の場合、処理はブロック３１０からコネクタ「Ｂ」に進み、任意ブロック３１２を行わない。コネクタ「Ｂ」に関連した処理は、図５に関連して更に詳細に説明する。
【００６６】
ブロック３０４においてフェッチされた現在の命令がメモリ読み出し命令でもメモリ書き込み命令でもない場合、処理はブロック３１１に進む。命令はブロック３１１において実行される。処理は次いでブロック３１４に進む。
【００６７】
「監視開始」及び「監視停止」命令を利用した実施例の場合、ブロック３１４が行われる。前述の実施例の場合、ブロック３１４における判定は、「監視停止」命令を受けなかった場合に「偽」と評価される。
【００６８】
ブロック３１４は、「監視開始」区分命令を利用せず、その代わりに、個々のメモリ命令とアトミック・ブロック・インディケータを関連付ける実施例の場合にも行われる。前述の実施例の場合、ブロック３１４における判定は、特定の種類の終結インディケータに達したか否かを判定する。少なくとも１つの実施例の場合、終結インディケータは、AUT（１０８、図２）においてバッファリングされた更新をメモリにコミットすべきである、命令、又は、命令の演算コード若しくはプリフィックスであり得る。前述の実施例の場合、ブロック３１４における判定は、終結インディケータを受けなかった場合に「真」に評価される。
【００６９】
ブロック３１４における判定が「真」に評価された場合、次命令をフェッチするために処理はブロック３０４にループ・バックする。さもなければ、処理はブロック３１８において終了し得るか、又は、任意的にブロック３１６に進み得る。
【００７０】
トランザクション障害割り込みを受けることなく方法３００がブロック３１６に達した場合、アトミック・ブロックは、競合なく実行を首尾良く完了している。よって、アトミック・ブロックの実行中にバッファリングされたメモリ更新はメモリにコミット（３１６）することができる。ブロック３１６では、AUT１０８からのバッファリングされたメモリ更新はよって、メモリにアトミックにコミットされる。AUT１０８のエントリは次いでクリアすることができる。ブロック３１６においてメモリにAUT１０８のエントリをコミットするアトミック更新は、命令（アトミック・ブロックの最後の命令後にプログラマによって入力される）に応じて行うことができる。前述の命令（すなわち、投機実行コミット命令）の例示的な実施例は、表１に関して以下に更に詳細に説明する。
【００７１】
少なくとも１つの実施例の場合、他の動作もブロック３１６で行うことができる。例えば、アトミック・ブロックが実行を完了すると、後のメモリ読み出しのためにＡＭＴ１０６の更新をディセーブルするための動作を行うことができる。ＡＵＴテーブル１０８における後続メモリ書き込みのバッファリングもブロック３１６でディセーブルすることができる。方法３００の処理は次いで、ブロック３１８で終了する。
【００７２】
図４は、現在の命令がアトミック・ブロックのメモリ読み出し命令であることを図３のブロック３０６（及び、適宜、任意のブロック３０）における判定が示す場合に行われる処理「Ａ」の少なくとも１つの実施例を示すブロック図である。前述の場合、処理はブロック４０２に進む。ブロック４０２では、示されたメモリ・アドレスを読み出すために命令が実行される。処理は次いでブロック４０４に進む。
【００７３】
ブロック４０４で、示されたメモリ・アドレスがアドレス・モニタ・テーブル（「AMT」）１０６に追加される。やはり、AMT１０６は論理的構成である。例えば、ブロック４０４では、指定されたメモリ・アドレスを含めるようAMTテーブルのエントリを実際に修正する代わりに、ブロック４０４の処理は別々の実施例についで違ったふうに処理することができる。一例に過ぎないが、チップ上のデータ・キャッシュに関連したステータス・ビットをトグリングして、キャッシュ・ラインにおけるメモリ・アドレスを、外部書き込みを求めて監視する旨を示すことができる。AMT１０６がブロック４０４で更新された後、処理は図３のブロック３１４に戻る。
【００７４】
図５は、現在の命令がアトミック・ブロックのメモリ書き込み命令であることを図３のブロック３１０（及び、適宜、任意のブロック３１２）における判定が示す場合に行われる「B」を処理する少なくとも１つの実施例を示すブロック図である。前述の場合、処理はブロック５０２に進む。ブロック５０２では、メモリ書き込み命令が実行される。しかし、メモリ書き込み命令は、メモリを更新するのではなく、AUT１０８のエントリを更新する。このようにして、アトミック・ブロック中に行われるメモリ書き込みは、AUT１０８にバッファリングされる。
【００７５】
やはり、AUT１０８は、論理的構成であり、種々のやり方でハードウェアにおいて実現することができる。例えば、少なくとも１つの例示的な実施例の場合、AUT１０８をゲーティングされた記憶キューとして実現することができる。AUT１０８がブロック５０２で更新された後、処理は次いで図３のブロック３１４に進む。
【００７６】
アトミック・ブロックの区分の特定の形態とともにAMT１０６及びAUT１０８を用いることによってハードウェア・スレッド投機実行がサポートされることを前述した。更に、特定の命令及び状態も前述の手法に統合することができる。併せて、前述の構成要素は、広範囲に亘る投機的スレッド化モデルを可能にするための投機的スレッドの効率的な実行を可能にすることができる。
【００７７】
図７は、論理ＡＭＴ106テーブル及び論理ＡＵＴ108テーブル、並びに特定のトランザクション実行状態９５０を含むスレッド・ユニット９０４の少なくとも１つの実施例を示すブロック図である。更に、スレッド・ユニット９０４は、アトミック・ブロックの各命令の境界における厳密な状態を提供するやり方でアトミック・ブロックのトランザクション実行をサポートすることができる特定の命令を実行することができ得る。
【００７８】
図７に示すトランザクション状態９５０は破線で示すように任意である。すなわち、実行コア９３０におけるハードウェア状態として維持される代わりに、特定されたメモリ・アドレスによるメッセージ・パスを介してメモリにおいて維持することができる。しかし、少なくとも１つの実施例の場合、トランザクション状態９５０は１つ又は複数のハードウェア・レジスタに維持される。
【００７９】
少なくとも１つの実施例の場合、トランザクション状態９５０を維持するためのレジスタは、トランザクション制御レジスタ９５１（本明細書及び特許請求の範囲では「ＴＣＲ」
として表す）及びトランザクション・スタータス・レジスタ９５２（本明細書及び特許請求の範囲では「ＴＳＲ」として表す）を含む。トランザクション制御レジスタは、ＡＭＴ１０６及びＡＵＴ１０８に対する更新を制御する。トランザクション・ステータス・レジスタはＡＭＴ及びＡＵＴの状態を通知することができ、トランザクション障害を示すこともできる。
【００８０】
トランザクション制御レジスタ９５１は、セットされると、ＡＭＴテーブル１０６、ＡＵＴテーブル１０８に関連した各種の挙動をもたらす種々のビットを含み得る。トランザクション制御レジスタ９５１は、メモリ更新がバッファリングされているか否か、及び、依存関係検査についてメモリ参照が監視されるか否かを制御することができる。例えば、トランザクション制御レジスタは、以下の挙動それぞれを表すための１つ又は複数のビットを含み得る。
【００８１】
ＡＵＴのリセットの強制
ＡＭＴのリセットの強制
ＡＭＴの直接更新
メモリ書き込みの直接バッファリング（ＡＵＴへの更新）
少なくとも１つの実施例の場合、複数の挙動を単一ビットによって示すことができる。例えば、トランザクション制御レジスタ９５１における単一ビットは、ＡＵＴ及びＡＭＴをリセットすべきである旨を表すことができる。
【００８２】
特定の一実施例の場合、トランザクション制御レジスタ９５１（「TCR」）は、何れかの特定の時点においてフィールドに記憶された値に応じてAMT及びAUTの挙動を判定し得るものであり、かつ／又は各命令の実行に影響を及ぼし得るフィールドを含む。当然、その他の実施例はより多いか、又はより少ないビットを利用することができる。トランザクション制御レジスタ９５１の実施例の場合、フィールドは以下のように定義することができる。特定のビット数を例証的な目的でのみ記載しており、限定的に解されないものとする。何れかの任意の長さのレジスタにおいて、以下に記載したビット・フィールドを実現する実施例の場合、以下に記載していない更なるフィールドは「予約済」であり得る。前述の予約済ビットは、書き込み無視、読み出しゼロとして実現することができる。
【００８３】
TCRリセット・ビット  ＴＣＲ９５１の２つの1ビット・フィールドは、ＡＭＴ及びＡＵＴをリセットし、クリアするために用いられる書き込みのみのビットであり得る。
【００８４】
ＡＭＴクリア・ビット（ＴＣＲビット0、書き込みのみ）は、ＡＭＴのリセットを制御する。「１」がこのビット位置に書き込まれた場合、有効なエントリが存在しないようにＡＭＴがクリアされる。ＡＭＴクリア・ビットは0を示す。
【００８５】
ＡＵＴクリア・ビット（ＴＲＣビット1、書き込みのみ）は、ＡＵＴのリセットを制御する。「１」がこのビット位置に書き込まれた場合、バッファリングされた投機的メモリ更新は廃棄される。AUTクリア・ビットは0を示す。
【００８６】
TCR更新ビット  TCR951の２つの1ビット・フィールドを用いて、AMT又はAUTの更新に関する命令実行の挙動を制御することができる。
【００８７】
AMT更新ビット（TRCビット２）は、AMTの更新を制御する。AMT更新ビットがセットされた場合（「1」の値）、AMTは、命令によって読み出されるメモリ位置毎に更新される。セットされない場合（「0」の値）、AMTは、命令が実行された際に更新されない。ソフトウェアは、監視されたメモリ参照及び監視されないメモリ参照を混ぜることを可能にするようこのビットの状態をトグリングすることが可能である。AMT更新ビットがセットされ、トランザクションに障害が生じた場合（ステータス・ビット参照）、AMTは更新しなくてよい。
【００８８】
AUT更新ビット（TRCビット３）は、リングレベル３（ユーザ・モード）においてメモリ更新のバッファリングを制御する。AUT更新ビットがセットされた場合（「１」の値）、命令によってリングレベル３において行われたメモリ更新はバッファリングされ、トランザクション・コミット処理までメモリに対して行われない。ビットがセットされない場合（「0」の値）、命令によるメモリ更新はバッファリングされず、通常と同様に、メモリに対して直接行われる。AUT更新ビットがセットされ、トランザクションに障害が生じた場合（スタータス・ビット参照）、リングレベル３において行われたメモリ更新はバッファリングしなくてよく、単に廃棄することができる。
【００８９】
任意のTCRビット  別の実現形態は、TCRにおいて定義される対象の以下のフィールドの１つ又は複数を提供することができる。
【００９０】
AUT非バイパス・ビット（TCRビット６）は、AUTがイネーブルされた場合に通常行われるような書き込み後読み出しバイパスについてAUTを検査することなくそのメモリ位置の値を命令が確かめることによってメモリ読み出しを引き起こす。上記ビットが実現形態においてサポートされない場合、ビットのセット（値「１」の書き込み）の試行によって、モードがサポートされないビットが、トランザクション・スタータス・レジスタにおいてセットされる。これは、アクティブなトランザクションの障害を強いる。
【００９１】
ハンドラにおけるAUT更新（TCRビット７）は、３より低いリングレベルにおいてメモリ更新を実施する。AUTイネーブル・ビットとこのビットが両方セットされた場合（「１」の値）、何れのリングレベルにおけるメモリ更新もAUTにバッファリングされる。リングレベル３におけるこのビットに対する更新は無視される（値は変わらない）。このビットは、（トラップ／例外／割り込みで）リングレベル３から、より低いリングレベルへの遷移でゼロに自動的にクリアされ得る。このビットが実現されない場合、３よりも低いリングレベルにおける更新の試行は、トランザクション・ステータス・レジスタにおいてトラップ・フォース障害ビットをセットさせ得る。これは、アクティブなトランザクションの障害を強いることがあり得る。
【００９２】
トランザクション・ステータス・レジスタ952は、アトミック・ブロックの実行に関する特定のステータス状態を反映するための１つ又は複数のビットを含み得る。トランザクション・ステータス・レジスタ952の内容は、トランザクションのステータスを示し得るものであり、トランザクション障害を示し得る。例えば、トランザクション・ステータス・レジスタ952は、以下のステータス状態を表すための１つ又は複数のビットを含み得る。
【００９３】
トランザクション障害が生じたか否か
トランザクション障害の理由（障害が生じた場合）  このフィールドの値はオーバフロー、衝突等を含み得る。
【００９４】
AMT状態  このフィールドの値は、フル、フルでない、空き、空きでない等を含み得る。
【００９５】
AUT状態  このフィールドの値は、フル、フルでない、空き、空きでない等を含み得る。
【００９６】
アトミック・ブロックの実行中にトラップが行われたか否か
トラップがトランザクション障害を引き起こしたか否か
特定の一実施例の場合、トランザクション・ステータス・レジスタ952（「TSR」）は、AMT、AUT及び現在のトランザクションの一般的な状態についてのステータス情報を、何れかの特定の時点においてフィールドに記憶されている値に応じて提供し得るフィールドを含む読み出し専用レジスタである。当然、その他の実施例は、より多くの、又はより少ないビットを利用することができる。トランザクション・ステータス・レジスタ952の実施例の場合、フィールドは以下のように定義することができる。特定のビット番号は例証の目的でのみ記載しており、限定的に解されないものとする。任意の容量のレジスタにおいて、後述のビット・フィールドを実現する実施例の場合、以下に記載されていない更なるフィールドは「予約済」であることがあり得る。前述の予約済ビットは、書き込み無視、読み出しゼロとして実現することができる。
【００９７】
少なくとも一実施例の場合、TSR952の最初のビットは、現在のトランザクションに障害が生じているかを示す。次の4ビットは、AMT及びAUTの状態についての情報ビットである。第６のビットは、アクティブなトランザクションが存在していた（AMT及び／又はAUTが空きでない）間に生じたトラップ／例外／割り込みを示す。最後のビット組は、現在のトランザクションに障害が生じていることを示し、その理由についての情報を提供するために用いることができる。
【００９８】
TSRのビットそれぞれは、特定の状況においてハードウェアによってセットすることができる。各ビットは１つ又は複数のイベントによって影響され得る。複数のイベントが同時に生じた場合、ビットをクリアするイベントは、ビットをセットするイベントよりも高い優先度を有し得る。
【００９９】
トランザクション障害ビット  現在のトランザクションに障害が生じた場合、トランザクション・ステータス・レジスタの第１のビットがセットされる）最後の8個のステータス・ビット（ビット6乃至ビット13）がセットされる。
【０１００】
トランザクション障害ビット（TSRビット0）は、現在のトランザクションに障害が生じたことを示す。このビットがセットされている場合、障害の原因を示すようビット6乃至ビット13のうちの少なくとも１つもセットされる。
【０１０１】
情報ビット  TSRの次の4ビットは、AMT及びAUTのステータスについての情報ビットである。AUT若しくはAMT、又は両方が空きでない場合、トランザクションはアクティブであるとみなされる。これは、以下に定義する空きでないビットによって示す。上記ビットは以下の通りである。
【０１０２】
空きでないAMTビット（TSRビット1）は、少なくとも１つの有効エントリをAMTが有していることを示す。
【０１０３】
AMTフル・ビット（TSRビット2）は、AMTがフルであるか又はほとんどフルであることを示す（厳密な定義は、実現形態に依存する）。AMTへのその後の更新によって、構造がオーバフローする可能性が高くなることをこのビットは示す。
【０１０４】
空きでないAUTビット（TSRビット3）少なくとも１つのバファリングされたメモリ更新をAMTが有していることを示す。
【０１０５】
AUTフル・ビット（TSRビット4）は、AUTがフルであるか又はほとんどフルであることを示す（厳密な定義は、実現形態に依存する）。AMTへのその後の更新によって、（既にオーバフローしていない場合）構造がオーバフローする可能性が高くなることをこのビットは示す（まだオーバフローしていない場合）。
【０１０６】
トラップ・ビット  ＡＭＴ１０６又はＡＵＴ１０８が空きでない場合にトラップ／例外／割り込みが生じたことを示すためにＴＳＲ952の第5のビットをトラップ・ビットとして用いることができる。このビットは、トランザクション・クリア・トラップ・ビット命令（例えば、以下の表1におけるTRNXOK命令）によってクリアすることが可能である。トラップ・ハンドラが戻った場合、又は、その後のトラップ／例外／割り込みが生じた場合にこのビットがなおセットされている場合、トラップ・フォース障害ビットがセットされ、トランザクションに障害が生じ得る。
【０１０７】
トラップ・ビット（TSRビット5）は、AMT又はAUTが空きでない場合に、トラップ・ビット（TSRビット5）は、ハードウェアによってトラップ／例外／割り込みの際に自動的にセットすることができる。ユーザレベル・ハンドラに対してビットをセットすることはできない。トランザクションセーフであることを知っているトランザクションアウェア・ハンドラは、トランザクション・クリア・トラップ・ビット命令によってハンドラに入る際にこのビットをクリアし得る(例えば、以下の表1のTRNXOK命令参照)。このようにして、トラップ／例外／割り込みが行われた際に行われたアトミック・ブロックの実行をイベントの処理後に再開することができるようにトラップ又は例外を非障害状態として処理することができる。
【０１０８】
トランザクション障害ビット  トランザクションに障害が生じたことを示すフィールドとしてTSR108の次の8ビットを用いることができる。アクティブなトランザクションが存在しており（AUT106及びAMT108の一方又は両方が空きでなく）、以下の8ビットの何れかがセットされた場合、トランザクションに障害が生じたとみなされる。
【０１０９】
AMTオーバフロー・ビット（TSRビット6）は、AMTがオーバフローし、トランザクションによって読み出される少なくとも１つのメモリ位置が、監視のためにAMTにおいてログインされていないことを示す。
【０１１０】
AMTコヒーレンシ衝突ビット（TSRビット7）は、ＡＭＴに、エントリと、メモリへの外部更新との間で衝突、又は衝突の可能性（保守的な近似は許容される）があった旨を示す。
【０１１１】
AMTオーバフロー・ビット（TSRビット8）は、AUTがオーバフローしており、バッファリングされるはずであった少なくとも１つのメモリ更新が廃棄されていることを示す。
【０１１２】
AUTコヒーレンシ衝突ビット（TSRビット9）は、AUTがコヒーレンシ・イベントをみた（バッファリングされた更新を完了することを可能にしない）ことを示す。
【０１１３】
AUTバッファ・バイパス不可ビット（TSRビット10）AUT内の更新バッファリングをバイパスした直接メモリ更新をプロセッサがサポートしない場合に、AUTがイネーブルされ、空でない間にAUT更新ビットがクリアされた場合、このビットはハードウェアでセットすることができる。
【０１１４】
AUT障害RAWビット（TSRビット11）は、正しい書き込み後読み出しの意味論を提供するためにAUTからバイパスされた値を得ることができなかったか、又は、AUTにおける更新に関してあいまいさがあり、ロードの正しい値を求めることができなかったので、実行されるロードが、不整合の値をみたことがあり得ることを示す。あいまいさがある場合、ロードについて戻される値は、メモリからの値であり、AUTからの値でない。
【０１１５】
トラップ強制障害ビット（TSRビット12）は、AMT又はAUTが空きでなかった状態にある間にトラップ／例外／割り込みによって障害が強制されたことを示す。これは、より下位のリングレベルへの遷移の動作による特定の動作、又はより下位のリングレベル内の動作によって、アクティブなトランザクションに障害をもたらすことを示す。AUTが空きでなく、プロセッサは、バッファリングされた更新をバイパスするメモリ更新をサポートしないのでこのビットをセットすることが可能である。このビットは、トラップ／例外／割り込みが生じた場合、又はトラップ／例外／割り込みからの戻りが生じ、トラップ・ビット（TSRビット5）が現在セットされている場合、このビットもハードウェアによってセットすることができる。
【０１１６】
サポートされないモード・ビット（TSRビット13）は、トランザクション制御レジスタへの書き込みが、サポートされないモードにプロセッサを入れようとする場合、ハードウェアによって自動的にセットされる。
【０１１７】
AMT１０６に関連したTSR９５２ステータス・ビット全ては、AMT１０６がクリアされた場合にゼロに自動的にクリアすることができる。前述のクリアは例えば、TCR951のAMTクリア・ビットへの「1」の書き込みに応じて、又はトランザクション・コミット命令に応じて行うことができる。
【０１１８】
同様に、AUT108に関連したTSR９５２ステータス・ビット全ては、AUT108がクリアされた場合にゼロに自動的にクリアすることができる。前述のクリアは例えば、TCR951のAUTクリア・ビットへの「1」の書き込みに応じて、又はトランザクション・コミット命令によって行うことができる。
【０１１９】
AMT106及びAUT108が同時にクリアされるか、又はAMT106又はAUT108がクリアされ、他方の構造が空きの場合に、TSR951の残りのビット全て（すなわち、AMT106又はAUT108に直接関連していないもの）を自動的にゼロにクリアすることができる。クリアは、TCR９５１のAMT１０６クリア・ビット及び／又はAUT１０８クリア・ビットに対する書き込みによって、又はトランザクション・コミット命令によって行うことが可能である。
【０１２０】
図７は、メモリ・システム９０２に記憶されたユーザ・プログラム９６０が、いくつかのマルチスレッド・パラダイムの何れかの実現に有用な命令を含み得ることを示す。前述の命令を用いれば、例えば、プログラマは、トランザクション実行、SPE、ロック回避、及び／又はその他のマルチスレッド・プログラミング・パラダイムを実現することができる。
【０１２１】
図７は、何れか又は全ての前述の命令の使用が任意であることを破線によって示す。本発明の少なくとも一実施例によるスレッド・ユニット904は、以下に表１に表す命令又は「プリミティブ」の１つ又は複数のデコードし、実行することができる。一般に、命令は以下のうちの１つ又は複数を含み得る。トランザクション制御レジスタに書き込むための命令、バッファリングされたメモリ更新のコミットをトリガするための命令、トランザクション・ステータス・レジスタを読み出すための命令、及び／又は、トラップ／例外／割り込み処理に関連したトランザクション・ステータス・レジスタ・ビットの１つをクリアするための命令。当然、別の実施例は、上記機能を実現するために、表１に示すものよりも多いか、又は少ない命令を用いることができる。
【０１２２】
【表１】
2009501366.tif 000003
TRNXSET命令は、少なくとも一実施例の場合、トランザクション制御レジスタ（TCR）951に値を書き込む。TRNXSET命令の実行は、トランザクションの開始又は障害ももたらし得る。命令を用いて、メモリ読み出し（ロード）アドレスの監視を一時的にディセーブルすることもできる。
【０１２３】
AMT106及びAUT108がクリアされるようTCR９５１にビットをセットすることにより、かつ、アトミック・ブロックにおけるメモリ命令に基づいてテーブル106、108の更新及び検査をもたらすようTCR951にビットをセットすることにより、トランザクションの最初を区分するためにTRNXSETを用いることが可能である。TRNXSET命令の実行の結果としてTCR９５１に書き込まれる値は、ソース・レジスタにおける値に基づき得る。ソース・レジスタのビットの一部分を、TCRに書き込む対象の値として用いることができる。ソース・レジスタのビットの別の部分を保存マスク（更新マスクの逆）として用いることができる。保存マスクにおいてゼロを値を備えた各ビットは、更新値からの値によって更新された、TCRにおける値を有する一方、保存マスクにおいて１の値を備えた各ビットは、その先行値として保存されたTCRにおける値を有する。TRNXSET命令は、何れの特権レベルでも実行することが可能である（しかし、通常、CPL3において、又は、トランザクションアウェアな特定のトラップ・ハンドラにおいてのみ用いられるものとする）。
【０１２４】
トランザクション内のアドレス監視をオフにし（AMT更新をオフにし）、その後、監視をオンにして、特定のメモリ・アドレスをAMTに監視させることなく特定のメモリ・アドレスのアクセスを可能にするために、TRNXSET命令を用いることも可能である。ブロックの障害につながることなくヘッド・トークンの概念を投機的ブロックに渡すことが可能であるように投機的マルチスレッド（マルチスカラ）実行を実現するためにこのことは重要である。
【０１２５】
AMT及びAUTをクリアし、TCR９５１を「ディセーブル」及び「更新なし」にセットすることによって、トランザクションの障害を強制するために、TRNXSET命令を用いることも可能である。
【０１２６】
少なくとも一実施例の場合、TRNXCMT命令の実行によって、プロセッサ904にトランザクション・ステータス・レジスタ952（TSR)の値を検査させることができる。トランザクション障害ビットがセットされていない場合、TRNXCMT命令の実行によって、アトミックに実行されているようにみえるようにメモリ９０２に対して、AUT108からのバッファリングされたメモリ更新をプロセッサ904に行おうとさせることができる。
【０１２７】
TRNXCMT命令の実行は、AMT106及びAUT108をプロセッサ904にクリアさせることができる。前述の実行は、トランザクション制御レジスタTCR951を全てゼロの値にクリアすることもできる。AUT１０８からのバッファリングされた更新を首尾良く行ったかを示すための値をＴＲＮＸＣＭＴ命令は、ソース・レジスタに戻すことができる。更新を行うことが可能でなく、その代わりに、更新が廃棄された場合、プロセッサ９０４は、ゼロの値でソース・レジスタを更新することができる。更新が行われた場合、プロセッサ９０４は、ソース・レジスタを非ゼロ値で更新することができる。ＡＵＴ１０８が空きの場合、少なくとも１つの実施例の場合、コミットは首尾良く行われたとみなすことができ、非ゼロ値をソース・レジスタに戻すことができる。
【０１２８】
ＴＲＮＸＲＤ命令の実行は、トランザクション制御レジスタ（ＴＣＲ）９５１及びトランザクション・ステータス・レジスタ（ＴＳＲ）９５２の値をデスティネーション・レジスタに、プロセッサ９０４に読み出させることができる。少なくとも１つの実施例の場合、トランザクション制御レジスタ951の値を、特定の固定量だけ左シフトさせ、トランザクション・ステータス・レジスタ951の値とのＯＲをとって、デスティネーション・レジスタに書き込まれる値を生成する。
【０１２９】
少なくとも１つの実施例の場合、ＴＲＮＸＯＫ命令の実行は、トランザクション・ステータス・レジスタのトランザクション・トラップ・ビット（ビット5）にゼロの値を、プロセッサ904に書き込ませる。トランザクション・トラップ・ビットがセットされると、アトミック・ブロックの実行中にトラップが行われた場合に、トラップ・ハンドラは、誤差の強制を回避することができる。
【０１３０】
すなわち、ＴＲＮＸＯＫ命令を用いることにより、かつ、ＴＣＲ951に特定のビットをセットすることにより、プログラマは、トラップ・ハンドリング中にAUT／AMTを更新するか否かを明示的に制御する。デフォールトによって、オフの間、トラップを行うことによってAMT106テーブル及びAUT108テーブルが更新されるようにプロセッサ904を構成することができる。前述のデフォールト動作の場合、アトミック・ブロック中に行われるトラップによってトランザクションが終結し、AMT106及びAUT108が静止する。トラップが戻ると、トランザクションには障害が生じ、中間状態を廃棄させる。しかし、前述のデフォールト動作は、TRNXOK命令によって無効にされ得る。それによって、アトミック・ブロックの実行中にトラップが行われた場合にトランザクション障害を強制することをトラップ・ハンドラが回避することが可能になり、アトミック・ブロックの実行中に生じるトラップ又は例外の処理にわたってAMT106及びAUT108の状態が持続することが可能になる。前述の実施例では、トラップが戻った場合、トランザクションに障害は生じず、アトミック・ブロックの実行は、トラップ又は例外が生じた時点に存在した厳密なプロセッサ状態から再開し得る。
【０１３１】
少なくとも１つの実施例の場合、TRNXOK命令の動作は、トラップ・ハンドラが作業をトランザクションの一部として実行することを可能にする。TCR951の現在値によって示された場合、AMT106及びAUT108のテーブルをトラップ処理中に更新することができる。よって、少なくとも１つの実施例の場合、少なくとも一部の種類のトラップ及び例外は、アトミック・ブロック内から処理することができる。
【０１３２】
プロセッサ904の少なくとも１つの実施例は、アトミック・ブロックにわたる単一ステッピングを可能にし得る。このことは、AMT106及びAUT108の値を維持しながら、アトミック・ブロック外部から単一ステップ・デバッガを実行することを可能にする。この効果として、プログラマは、本発明の少なくとも１つの実施例によれば、アトミック・ブロックにわたってシングルステップし、各命令の最後におけるアークテクチャ状態をみることができる。前述の手法は、ソフトウェア・デバッグの従来の手法をアトミック・ブロック内で用いることを可能にする。
【０１３３】
この特徴は、アトミック・ブロックの命令の実行中に中間状態が未定義である他の手法と対照的である。前述の手法の場合、中間状態は、トラップを処理することができるか、又はシングルステップを行うことができる前にコミット若しくは廃棄される。
【０１３４】
少なくとも１つの他の実施例の場合、TRNXOK命令は、トラップ・ハンドラが作業をトランザクションの一部として行うことを可能にし得るが、トラップ・ハンドラは、アトミック・ブロック外部から、AMT106テーブル及びAUT108テーブルをバイパスして、メモリとの間で直接、読み出し、書き込むことができる。AMT106及びAUT108をバイパスするか否かは、TCR951の値によって示すことができる。前述の手法は、トラップ・ハンドラがアトミック・ブロック外部にある間に実行することを可能にする。
【０１３５】
要約すれば、投機的スレッドにおける命令ブロックをトランザクション・ブロックとして区分し、更新がバッファリングされ、後に廃棄されるか、又は後にアトミックに実行されるようにハードウェアに実行させることを可能にする命令セット拡張組として実現することができる。上記拡張は、外部更新を検出してメモリ依存関係を検出するようメモリ・アドレス読み出しを監視するようにすることもできる。前述の拡張はよって、ソフトウェアが投機的スレッド実行を試行することを可能にすることができる。このハードウェアは、投機的スレッドの効率的な実行が、広範囲の投機的スレッド化モデルを可能にするためのサポートを提供する。
【０１３６】
前述の命令をサポートするプロセッサ（図７に示すプロセッサ904など）には、投機的トランザクションが首尾良く行われることの何らかの保証を備えることが必ずしも要求されない。その代わりに、ハードウェアは、障害をソフトウェアに正しく通知する限り、トランザクションを処理できなくてもよい。
【０１３７】
図６は、トランザクション・ブロックの実行に障害が生じたと判定するための機構の少なくとも１つの実施例を示すデータフロー図である。図６は、２つの協調型スレッド（スレッドA１２５及びスレッドB１２６）を示す。当然、図６に示す機構は、何れかの数（Y）の協調型スレッド（Y＞２）に用いることができることを当業者は認識するであろう。
【０１３８】
図６は、第１の時間t1（第１の協調型スレッド１２５が、アトミック・ブロック６０２の実行を開始する）を示す。時間t2での、アトミック・ブロック602の実行中に、第１のスレッド１２５は、特定のアドレスのメモリ読み出し命令を実行する。メモリ・アドレス「000A」として図６に示すアドレスが、命令が実行される時間(t2)においてAMT１０６に入力される。
【０１３９】
図６は、時間t3で、第２のスレッド（スレッドB１２６）が、第１のスレッドによって読み出されたメモリ・アドレスに対する書き込みを実行する。第２のスレッドによる更新は、第１のスレッドがメモリ・アドレスを読み出した後に、かつ、第１のスレッド（スレッドA１２５）が実行を完了する前に生じる。前述の、アトミック・ブロックの実行中に第１のスレッドによって既に読み出されているアドレスへの第２の協調型スレッドによる書き込みの試行は、ハードウェアによって認識される。AMT１０６におけるアドレスの１つに対する「外部」書き込みとして認識されるからである。前述のイベントは、アトミック・ブロック６０２の実行に障害が生じたことを示すよう非同期イベントを引き起こし得る。
【０１４０】
図６に示すデータフロー図は、アトミック・ブロックの実行中の障害の一インスタンスのみを示す。先行して読み出されたメモリ・アドレスに対する外部書き込み以外の他のイベントによって、アトミック・ブロックの実行に障害が生じることがあり得る。前述のイベントの１つとして、例えば、「テーブル・フル」、又はAMT１０６若しくはAUT１０８のオーバフローがある。前述の別のイベントとして、例えば、AUT１０８における書き込み後読み出し（「RAW」）違反がある。コヒーレンシ衝突等などの他の障害状態も実現することができる。
【０１４１】
アトミック・ブロックの実行に障害が生じたことをソフトウェアに通知するための種々の機構を利用することができる。アトミック・ブロックの障害を生じさせ得る何れかのイベントの場合、前述のイベントは、割り込みなどの非同期イールド・イベント（yield  event）としてスレッド・ユニット（例えば、図２のスレッド・ユニット１０４など）によって通知することができる。少なくとも１つの実施例の場合、障害イベントはユーザ・レベル割り込みを引き起こすことができる。
【０１４２】
トランザクション実行の障害を示すためのユーザ・レベル割り込みを実現する１つのやり方は、本明細書及び特許請求の範囲では、ユーザ・レベル・フライ級割り込み処理として表す。前述の機構は、特定のトリガ・イベントを示すことができるチャネルを含み得る。トリガ・イベントは「シナリオ」として表すことができる。トリガ・シナリオは、アーキテクチャ的に定義された１つ又は複数のイベント組であり得る。あるいは、トリガ・シナリオは、ユーザ定義された１つ又は複数のイベント組であり得る。チャネルに規定されたトリガ・シナリオを検出すると、制御をユーザレベル・ハンドラ・ルーチンに移すことができる。前述のユーザ・レベル・フライ級割り込み処理機構の少なくとも１つの実施例の更なる説明は、「Ａ  programmable  event  driven  yield  mechanism  which  may  activate  service  threads」と題する同時係属中の特許出願（代理人整理番号P14912X）で見つけることができる。
【０１４３】
図７に示すプロセッサ実施例904の場合、本明細書及び特許請求の範囲記載のトランザクション実行手法の１つ又は複数の実施例をサポートするための１つ又は複数のシナリオを定義することができる。少なくとも１つの実施例の場合、TSR９５２の内容が変わると割り込みが生成されるようなシナリオ（「ステータス更新シナリオ」）を定義することができる。すなわち、TSR952の内容が、特定のやり方で更新されると、割り込みを生成することができる。
【０１４４】
ステータス更新シナリオは、トランザクション・ステータス・レジスタ（TSR）をマスクによって監視することによって実現することができる。ステータス更新シナリオはよって、TSRに施されるマスクに関連付けることができる。マスクのAND演算、及びTSRが非ゼロ値をもたらし、プロセッサがリングレベル３にある場合、シナリオは、ユーザ・レベルのイベント・ハンドラをトリガし得る。トランザクションに障害が生じた旨をＴＣＲ952が示す場合に、ステータス更新シナリオに基づいた割り込みを生成することができるようにマスクを定義することができる。
【０１４５】
よって、障害をソフトウェアに正しく通知する限り、図７に示すプロセッサ９０４などのプロセッサがトランザクションを処理できなくてもよいことを上記説明は示す。すなわち、前述のハードウェア手法に基づいて、アトミック・ブロックが首尾良く実行されることをプログラマは保証されない。少なくとも１つの実施例の場合、他の協調型スレッドからの競合なしでアトミック・ブロックが実行を完了することを確実にするために、必要な場合、１つ又は複数のユーザレベル・ソフトウェア命令をプログラマが用いることができるように更なる機能がプロセッサ９０４によって提供される。前述の更なる機能は、本明細書及び特許請求の範囲では、「ストップザワールド」機能として表す。
【０１４６】
多数のメモリ命令（例えば、ロード及び／記憶命令）をアトミック・ブロックが含んでいてもアトミック・ブロック実行を確実にするためにストップザワールド機能を利用することができる。他のトランザクションとアトミック・ブロックが常に衝突してもアトミック・ブロック実行を確実にするためにストップザワールド機能を利用することもできる。一般に、そのソフトウェアが前述の命令（表１参照）を用いて投機的コード・ブロックを実行しようとし、有限の資源限度の理由で、又は、反復的メモリ相互関係違反の理由で、首尾良い実行の可能性が低いと判定した場合にストップザワールドをソフトウェアで利用することができる。ソフトウェアは、投機的スレッド化ハードウェアを用いることなくストップザワールド・プログラミング抽象化を起動させることができる。
【０１４７】
ＡＭＴ１０６やＡＵＴ１０８などの論理構造に依存するのでなく、アトミック・ブロックの実行中に他の協調型スレッド全てを停止することによってアトミック性を保証するようユーザ・レベル割り込みを利用するソフトウェア層（ライブラリやランタイム・ルーチンなど）によってストップザワールドを提供することができる。ストップザワールド機能は、プロセッサ９０４によってサポートされる２つの割り込みシナリオを利用することができる。
【０１４８】
ストップザワールドを実現するよう利用することができる第１のシナリオは、外部更新シナリオである。すなわち、上記シナリオは、外部更新を求めて、特定のメモリ・アドレスを監視し、前述の更新が生じた場合に割り込みを生成するための機能を提供する。「外部」更新は、メモリ・アドレスにおける値が別の協調型スレッドによって書き込まれたことを意味するものと理解し得る。よって、下にあるプログラミング・モデルの実現における同期化のために他の協調型スレッド全てを一スレッドが割り込む機構を外部更新シナリオは提供することができる。より早い投機的タスクが完了しており、投機的タスクが非投機的になるよう移行することが可能である状態になった時点で投機的タスクが通知されることが可能であるようにこの同じシナリオを用いることもできる。
【０１４９】
ストップザワールドを実現するよう利用することができる第２のシナリオは、「特権から復帰」のシナリオである。第２のシナリオは、トラップ／例外／割り込みハンドラからユーザ・コードに制御が戻った時点でユーザハンドラを呼び出すというものである。上記シナリオは、リングレベル３への移行が生じた時点を検出し、ユーザレベル・ハンドラを呼び出す。前述のシナリオは基本的には、トラップ／例外／割り込みハンドラからリングレベル３に制御が戻る都度、ユーザレベル・ハンドラが呼び出されることを可能にする。このスレッドが同期化されるべきソフトウェアをその協調型スレッドが現在実行しているかをスレッドが検査することをこのシナリオは可能にする。スレッドがハンドラにあったか、又は、アクティブにスケジューリングされていなかった状態で協調型スレッドが同期化されていた場合にこのことは生じ得る。
【０１５０】
前述の２つのシナリオを利用して、停止協調型スレッドからの衝突なしで特定の協調型スレッドがアトミック・ブロックを実行することができるようにプログラムは他の協調型スレッド全てを停止することができる。
【０１５１】
ストップザワールドは、前述の更なるハードウェア構造１０６、１０８、状態９５１、９５２、及び命令（表１参照）（本明細書及び特許請求の範囲では、「ハードウェア」実施例として表す）なしでトランザクション実行を実現する別のやり方である。前述の手法は併せて用いることができる。アトミックであるという意味論によって実行するコード・ブロックが存在しているという概念をソフトウェア・プログラムが可能にするプログラミング・モデルが非常に望ましいことがあり得る。前述のハードウェア手法の実施例によってトランザクション実行に障害が生じた場合にプログラミング意味論を維持するためにストップザワールドを用いることができる。
【０１５２】
前述の、外部更新シナリオ、及びハンドラからの復帰のシナリオを用いて、ストップザワールド挙動を実現することが可能である。そうするために、アトミック・ブロックを実行したいスレッドは、同期化に用いる所定のメモリ位置との交換を行うことができる。交換によって、メモリ位置に「ビジー」値を書き込むことができ、先行値が「アイドル」値であったことを確認することができる。先行値が「アイドル」でなかった場合、「アイドル」値が検出されるまでスレッドを繰り返すことができる。
【０１５３】
協調型スレッドは全て、この同期化位置を監視するための手法を有し得る。少なくとも１つの実施例の場合、各協調型スレッドは、アクティブな「外部更新」シナリオをチャネル内に有し得るので、自分であるシナリオの状態に応答して割り込みが生成される。少なくとも１つの実施例の場合、「ビジー」値が同期化位置に書き込まれた場合、シナリオは充足され、ユーザ・レベル割り込みは、適宜、他の協調型スレッド全てについて生成される（別の実施例の場合、ユーザ・レベル割り込み機構ではなく、メモリ・インタフェースを通るメッセージを介して、同様な機能を実現することが可能である。）協調型スレッド毎の関連したイベント・ハンドラは、同期化位置における値が「アイドル」値に戻されるまで、スピン・ロックやその他の待ちモードに協調型スレッドを移させることができる。
【０１５４】
全協調型スレッドは更に、アクティブな「リングレベル３への復帰」シナリオをチャネルにおいて有し得る。トラップ／例外／割り込みハンドラからユーザ特権レベルに制御が戻ると、協調型スレッドはよって、中断することができ、割り込みハンドラを呼び出すことができる。シナリオを充足すると、割り込みを生成することができる。関連した割り込みハンドラは、協調型スレッドに、同期化位置及びスピン・ロックを確認させるか、又は他の待ちモードによって待たせることができる（同期化位置における値が「アイドル」でない場合）。
【０１５５】
有限時間の間待った後、他の協調型スレッド全てが同期化イベントを観察し、実行をストールする時間を与えるために、ストップザワールドを起動させたスレッドは次いで、アトミック・ブロックを実行することが可能である。アトミック・ブロックの最後に、スレッドは、協調型スレッド全てが実行し続けることが可能であるようにアイドル値を同期化位置に書き込むことができる。
【０１５６】
本明細書及び特許請求の範囲記載の機構の実施例は、ハードウェア、ソフトウェア、ファームウェア、又は前述の実現機構の組み合わせで実現することができる。本発明の実施例は、少なくとも１つのプロセッサ、データ記憶システム（揮発性及び不揮発性のメモリ及び／又は記憶素子を含む）、少なくとも１つの入力装置、及び少なくとも１つの出力装置を備えるプログラム可能なシステム上で実行するコンピュータ・プログラムとして実現することができる。プログラム・コードを入力データに施して、本明細書及び特許請求の範囲記載の機能を行い、出力情報を生成することができる。出力情報は、既知のやり方で１つ又は複数の装置に入力することができる。本出願の目的で、処理システムは、プロセッサ（例えば、ディジタル信号プロセッサ（DSP）、マイクロコントローラ、特定用途向集積回路（ASIC）やマイクロプロセッサなど）を有する何れかのシステムを含む。
【０１５７】
プログラムをハイレベルの手続型プログラミング言語又はオブジェクト指向型プログラミング言語で実現して処理システムと通信することができる。プログラムは、所望の場合、アセンブラ言語又はマシン言語で実現することもできる。実際に、本明細書及び特許請求の範囲記載の機構の範囲は、何れかの特定のプログラミング言語に限定されるものでない。いずれにせよ、言語はコンパイラ言語又はインタープリタ言語であり得る。
【０１５８】
プログラムは、汎用又は専用のプログラム可能な処理システムによって読み取り可能な記憶媒体上又は装置上（例えば、ハード・ディスク・ドライブ上、リードオンリメモリ（ROM）上、CD-ROM装置上、フラッシュ・メモリ装置上、ディジタル多用途ディスク（DVD）上やその他の記憶装置上）に記憶することができる。処理システムにおけるプロセッサにアクセス可能な命令は、本明細書及び特許請求の範囲記載の手順を行うために記憶媒体又は記憶装置が処理システムによって読み出されると処理システムを構成し、動作させるようにする。本発明の実施例は、処理システムに用いるよう構成されたマシン読み取り可能記憶媒体として実現するものとすることもできる。そうして構成された記憶媒体は、本明細書及び特許請求の範囲記載の機能を行うために特定かつ所定のやり方で処理システムが動作するようにする。
【０１５９】
前述のタイプの処理システムの例は図７に示す。システム900は、インテル社から入手可能なペンティアム（登録商標）、ペンティアム（登録商標）プロ、ペンティアム（登録商標）II、ペンティアム（登録商標）III、ペンティアム（登録商標）4、並びにアイテニアム（登録商標）及びアイテニアム（登録商標）IIのマイクロプロセッサに基づいた処理システムを表すが、他のシステム（他のマイクロプロセッサ、エンジニアリング・ワークステーション、セットトップ・ボックス等を有するパソコン（PC）を含む）も用いることができる。一実施例では、サンプル・システム９００は、マイクロソフト社から入手可能なウィンドウズ（登録商標）オペレーティング・システムのバージョンを実行することができるが、例えば、他のオペレーティング・システム及びグラフィカル・ユーザ・インタフェースも用いることができる。
【０１６０】
図７は、本願開示の手法を行うことができる処理システム９００がメモリ・システム９４０及びプロセッサ９０４を含み得ることを示す。メモリ・システム９４０は、メモリ９０２、並びに１つ又は複数のオンチップ・キャッシュ又はオフチップ・キャッシュを含み得る。例えば、メモリ・システム９４０は、データ・キャッシュ９４２及び／又は命令キャッシュ９４４を含み得る。
【０１６１】
メモリ・システム９４０は、プロセッサ９０４の動作を制御するための命令９１０及び／又はデータ９１２を記憶することができる。命令９１０及び／データ９１２は、本明細書及び特許請求の範囲記載の手法の何れか又は全てを行うコードを含み得る。メモリ・システム９４０は、メモリの一般化された表現として意図されており、各種のメモリ形態（ハード・ドライブ、CD-ROM、ランダム・アクセス・メモリ（RAM）、ダイナミック・ランダム・アクセス・メモリ（DRAM）、スタティック・ランダム・アクセス・メモリ（SRAM）等、並びに、関連した回路）を含み得る。
【０１６２】
図７は、プロセッサ９０４がフロントエンド９２０を含み得ることを示す。フロントエンド９２０はフェッチ及びデコード・ロジックを含み得る。例えば、複数の論理シーケンスを単一の物理フェッチ／デコード・ユニット３２２において実現することができるが、スレッド・コンテキスト毎に命令をフェッチするための論理的に別個の次命令ポインタ及びフェッチ・ロジック320を含み得る。フェッチ／デコード・ユニット３２２は、前述のTRNXSET、TRNXCMT、TRNXRD及び／TRNXOK命令などの命令をデコードするためのデコーダ・ロジックを含み得る。命令のうちの１つの受け取りに応答して、デコード・ロジックは、１つ又は複数の信号を実行コア930に送出することができる。これによって、実行コア930は所望の動作を行うことができる。（前述の命令それぞれの少なくとも１つの実施例に関連した動作は、表１の記載に関して前述している。）
図７に示すマルチシーケンサ・システム９００のSMT実施例の場合、「シーケンサ」の語は、スレッド・コンテキストの少なくとも次命令ポインタ及びフェッチ・ロジック３２０、及び、そのスレッド・コンテキストの関連したアーキテクチャ状態の少なくとも一部を包含する。SMTシステム９００のシーケンサは対称でなくてよい。例えば、同じ物理コア904の２つのSMTシーケンサは、それぞれが維持するアーキテクチャ状態情報の量において異なり得る。
【０１６３】
よって、少なくとも一実施例の場合、マルチシーケンサ・システム900は、同時マルチスレッド化をサポートする単一コア・プロセッサ904である。前述の実施例の場合、各シーケンサは、それ自身の命令次命令ポインタ及びフェッチ・ロジック３２０、並びに、それ自身のアーキテクチャ状態情報を有するロジカル・プロセッサであるが、同じ物理プロセッサ・コア３０４はスレッド命令全てを実行する。前述の実施例の場合、論理プロセッサはそれ自身のアーキテクチャ状態バージョンを維持するが、単一のプロセッサ・コアの実行資源は、同時に実行するスレッド間で共有することができる。
【０１６４】
図７に示すシステム９００の少なくとも１つの別の実施例は、マルチコア・プロセッサ（例えば、図２に示すプロセッサ２００参照）に基づく。別々のスレッドの少なくとも一部分の実行が同時に進み得るようにそれぞれが別々のスレッドを実行することができる２つ以上の別個の物理プロセッサ（例えば、図２の104-104n参照）を前述のシステムは含み得る。各プロセッサは、そのそれぞれのスレッド毎に命令情報をフェッチするための物理的に別個のフェッチ・ユニット３２２を含む。単一のスレッドを各プロセッサが実行する実施例では、フェッチ／デコード・ユニット３２２は、単一の次命令ポインタ及びフェッチ・ロジック３２０を実現する。しかし、複数のスレッド・コンテキストを各プロセッサがサポートする実施例では、フェッチ／デコード・ユニット３２２は、別個の次命令ポインタ及びフェッチ・ロジック３２０を、サポートされるスレッド・コンテキスト毎に実現する。プロセッサ９０４における更なる次命令ポインタ及びフェッチ・ロジック３２０の任意性は図７の破線で表す。
【０１６５】
本発明の特定の実施例を示し、説明したが、特許請求の範囲記載の範囲から逸脱しない限り、変更及び修正を行うことが可能であることが当業者には分かる。よって、本発明のそのより広い局面から逸脱しない限り、変更及び修正を行うことが可能であることを当業者は認識するであろう。特許請求の範囲は、本発明の真の範囲内に収まる前述の変更及び修正全てをその範囲内に包含するものとする。
【図面の簡単な説明】
【０１６６】
【図１】一般的な並列プログラミング手法を図で表すブロック図である。
【図２】本発明の少なくとも１つの実施例によるプロセッサの選択された特徴を示すブロック図である。
【図３】トランザクション実行サポートを備えた投機的マルチスレッド化を行う方法の少なくとも一実施例のデータ及び制御フローを示すフロー図である。
【図４】トランザクション実行サポートを備えた投機的マルチスレッド化を行う方法の少なくとも一実施例のデータ及び制御フローを示すフロー図である。
【図５】トランザクション実行サポートを備えた投機的マルチスレッド化を行う方法の少なくとも一実施例のデータ及び制御フローを示すフロー図である。
【図６】トランザクション・ブロックの実行に障害が生じた旨を判定するための機構の少なくとも１つの実施例を示すデータフロー図である。
【図７】本願開示の手法を行うことができるシステムの少なくとも１つの実施例を示すブロック図である。
【図８】トランザクション実行をサポートするためにアドレス・モニタ・テーブル及びアトミック更新テーブルを含むプロセッサの少なくとも１つの実施例を示すブロック図である。
【図１】
2009501366.tif 000004
【図２】
2009501366.tif 000005
【図３】
2009501366.tif 000006
【図４】
2009501366.tif 000007
【図５】
2009501366.tif 000008
【図６】
2009501366.tif 000009
【図７】
2009501366.tif 000010
【図８】
2009501366.tif 000011
【国際調査報告】
2009501366.tif 000012
2009501366.tif 000013
2009501366.tif 000014