"方法であって、アトミックブロックの実行中に局所メモリ書き込みをバッファリングする工程であって、前記バッファリングが、第1のユーザレベルプログラミング命令に応じて行われる工程と、前記アトミックブロックの実行中の割り込みに応じてステータスレジスタのトラップフィールドをトラップ値に更新する工程と、前記割り込みの処理中に持続状態として前記バッファリングされた局所メモリ書き込みを維持する工程と、前記割り込みの処理中にトランザクションセーフハンドラにより、前記ステータスレジスタの前記トラップフィールドがデフォールト値にクリアされていないことに応じて、前記割り込みを処理した後に前記ステータスレジスタの障害フィールドを障害値に更新する工程と、前記ステータスレジスタの前記障害フィールドが前記障害値を保持していないことに応じて前記割り込みを処理した後に前記アトミックブロックの実行を再開する工程とを備える方法。請求項1記載の方法であって、非トラップ障害状態に応じて前記障害フィールドを前記障害値に更新する工程を更に含み、前記非トラップ障害状態は、ユーザレベルプログラミング命令によって示されるトリガシナリオを含む方法。請求項2記載の方法であって、前記トリガシナリオは、前記スタータスレジスタの1つ又は複数のステータスビットの値における変更を備え、前記1つ又は複数のステータスビットは、前記ユーザレベルプログラミング命令に関連付けられたマスクによって規定される方法。請求項3記載の方法であって、前記割り込みを処理した後に、前記ステータスレジスタの前記トラップフィールドがデフォールト値にクリアされていないことに応じて、前記ステータスレジスタの障害フィールドを障害値に更新する工程、及び、非トラップ障害状態に応じて前記障害フィールドを前記障害値に更新する工程は、前記割り込みを処理した後に、前記ステータスレジスタの前記トラップフィールドが前記デフォールト値にクリアされていないことに応じて、前記ステータスレジスタのトラップフォース障害ビットを前記障害値に更新する工程と、前記非トラップ障害状態に応じて前記ステータスレジスタの非トラップ障害状態ビットを前記障害値に更新する工程と、前記トラップフォース障害ビット又は前記非トラップ障害状態ビットが前記障害値に更新されていることに応じて前記ステータスレジスタの前記障害フィールドを前記障害値に更新する工程とを含む方法。方法であって、メモリの共通の論理ビューを共有する複数のスレッドを同時に実行する工程と、第1のスレッドが命令のブロックをアトミックに実行することを可能にするために前記スレッドのうちの第1のスレッド以外の全ての実行を停止する工程であって、ハードウェア機構を呼び出すための前記第1のスレッドの動作によってトリガされる工程と、前記命令のブロックのアトミック実行を前記第1のスレッドが完了した後にその他のスレッドを再開する工程とを備える方法。請求項5記載の方法であって、ハードウェア機構を呼び出すための第1のスレッドの前記動作は、所定の値を特定のメモリ位置に書き込む工程を更に備える方法。請求項6記載の方法であって、前記停止する工程は、前記その他のスレッドによる、前記特定のメモリ位置のポーリングなしで前記停止する工程が達成されるように前記第1のスレッドの前記動作の結果として生成される割り込みによって更にトリガされる方法。請求項5記載の方法であって、トランザクション実行をサポートするためのハードウェアを含むマルチスレッドプロセッサによって行われる方法。請求項8記載の方法であって、前記ハードウェアは、アトミックブロックのメモリ書き込みをバッファリングするための記憶領域を含む方法。請求項8記載の方法であって、前記ハードウェアは、アトミックブロックのメモリ読み出しのアドレスを維持するための記憶領域を含む方法。請求項5記載の方法であって、前記停止する工程は、ユーザレベルソフトウェア命令に応じて起動される方法。装置であって、アトミックブロックを実行するための実行リソースと、トラップフィールドを保持するためのステータスレジスタであって、前記トラップフィールドは、前記アトミックブロックの実行中に生じる割り込みに応じて前記トラップフィールドがトラップ値に更新され、前記トラップフィールドは、前記割り込みを処理すると、トランザクションセーフハンドラによってクリアされるよう適合されるステータスレジスタと、前記アトミックブロックの実行中にロードされたアドレスを監視するための監視ハードウェアと、前記アトミックブロックの実行中に書き込み動作をバッファリングするためのバッファリングハードウェアとを備え、前記監視ハードウェア及び前記バッファリングハードウェアは前記アトミックブロックの実行中に生じる前記割り込みの処理中に持続状態を維持し、前記実行リソースは、前記割り込みの前記処理後に前記ステータスレジスタの前記トラップフィールドがクリアされていることに応じてトランザクションを落とすことなしで前記アトミックブロックの実行を再開する装置。請求項12記載の装置であって、トランザクションセーフハンドラソフトウェアは、前記割り込みを処理するために前記実行リソースによって実行されると、前記割り込みの処理中に前記トラップ値を保持しないよう前記トラップフィールドをクリアする装置。請求項13記載の装置であって、前記実行リソースは、前記ステータスレジスタの障害フィールドが障害値を保持していることに応じて前記割り込みの前記処理後に前記アトミックブロックをアボートする装置。請求項13記載の装置であって、前記トラップフィールドは前記障害フィールドであり、前記障害値は前記トラップ値である装置。請求項14記載の装置であって、前記ステータスレジスタの前記障害フィールドが前記障害値を保持していることに応じて前記割り込みの前記処理後に前記アトミックブロックをアボートするための前記実行リソースは、前記割り込みの前記処理後に前記トラップ値を前記トラップフィールドが保持していることに応じて前記障害値に更新される対象の前記ステータスレジスタのフォーストラップ障害フィールドを備え、前記ステータスレジスタの前記障害フィールドは、前記ステータスレジスタの前記フォーストラップ障害フィールドが前記障害値に更新されることに応じて前記障害値に更新される装置。請求項12記載の装置であって、前記監視ハードウェアはアドレス監視テーブルAMTを含み、前記バッファリングハードウェアはアドレス更新テーブルAUTを含む装置。請求項12記載の装置であって、前記トラップフィールドは、、前記割り込みを処理するためにハンドラに入るとクリアトラップビット命令を前記実行リソースが実行することに応じて前記トラップ値を保持しないようクリアリングされることができる装置。プログラムが投機実行したいことがあり得る対象の1つには、コードブロックが、その他のスレッド上で同時に実行しているその他のコードに依存するか否かということがある。プロセッサは、依存性の検出のサポートを提供するために、これをより効率的に行うことが可能である。例えば、プロセッサは、別の同時スレッドによって後に修正されるメモリ位置をコードの投機的ブロックが読み出すか否かを検出するためのサポートを提供することができる。本発明の実施例は、以下の図面同じ構成要素は同じ参照符号で示すを参照して分かり得る。前述の図面は、限定的であることを意図するものでなく、その代わりに、トラザクション実行サポートを備えた投機的マルチスレッド化を提供するためのシステム、方法及び機構の、選択された実施例を示すよう備えている。以下の説明では、スレッドレベルの同期実行に対するハードウェアサポートを提供するための方法、システム及び機構の選択された実施例を表す。本明細書及び特許請求の範囲記載の装置、システム及び方法の実施例は、単一コア又はマルチコアのマルチスレッド化システムに利用することができる。以下の説明では、具体的な多くの詳細プロセッサタイプ、マルチスレッド化環境、システム構成、データ構造や、命令のニーモニック及びセマンティックなどを記載して、本発明の実施例のより徹底的な理解を提供する。しかし、前述の具体的な詳細なしで本発明を実施することができるということは当業者によって認識されるであろう。更に、本発明を不必要に分かりにくくすることがないよう、周知の特定の構造、回路及び同様なものは詳細に示していない。スレッドレベルの投機実行を利用するマルチスレッド作業負荷の場合、同時に実行するスレッドの少なくとも一部は全部でなくても同じメモリ空間を共有することができる。本明細書及び特許請求の範囲使用の語協調型スレッドは、同じメモリ空間を共有するスレッド群を表す。協調型スレッドはメモリ空間を共有するので、同じメモリ項目との間で読み出し及び/又は書き込みを行うことができる。よって、正確で有意義な作業を行うために、同時実行される協調型スレッドは互いに同期化されるべきである。図1は、メモリの共通の論理ビューを共有する2つの協調型スレッド125、126を図で示すブロック図である。前述の共有メモリマルチプロセッシングのパラダイムを、並列プログラミングと呼ばれる手法に用いることができる。この手法によれば、アプリケーションプログラマは、アプリケーション又は処理と場合によっては呼ばれるソフトウェアプログラムを、ソフトウェアプログラムの並行処理を表すために同時に実行する対象の複数のスレッドに分割することができる。すなわち、さもなければ単一スレッド化されたプログラム又は処理120は、同時に実行することができる2つのスレッド126、125に分割することができる。図1は、各スレッド125、126がそれ自身のアプリケーション及びシステム状態202a、202bそれぞれを有することを示す。メモリの特定のロジカルビュー204が、特定の処理120に関連した協調型スレッド125、126によって共有される。よって、少なくとも1つの実施例の場合、協調型スレッド125、156はそれぞれ、処理120のオペレーティングシステムによって構成される仮想メモリの同じビューを供給することができ、互いの仮想アドレス空間に対する可視度を有し得る。図1は、記載を単純にするために、処理120の2つのスレッド125、126のみを示す。しかし、前述の例の例証は、限定するものと解されるべきでない。処理120に関連した協調型スレッドの数は、3以上であり得る。処理120に関連したスレッドの数の上限は、OSプログラム図示せずによって制限され得る。協調型スレッドのメモリアクセスの同期化を扱うための種々の手法が考え出されている。協調型スレッドの同期化を扱う一般的な手法には、メモリロックの使用がある。特定のコード部分の共有データに対する排他的なアクセスを特定のスレッドが有することを保証するためにメモリロックを用いることができる。従来のマルチスレッドアルゴリズムでは、クリティカルな部分を複数のスレッドが同時に実行した場合に誤った挙動を生じ得る何れかのクリティカルなコード部分近くでロックを用い得る。前述の手法の場合、スレッドはロックを獲得し、そのクリティカルな部分を実行し、次いで、ロックを解除することができる。複数のスレッドが同時に実行することを阻止し得るので、性能がロックによって劣化し得る。必要以上に念のために、ロックが保有されている場合、性能が更に劣化し得る。すなわち、多くの場合、ロックは幾分悲観的に用いられ得る。ロックの性能の影響を最小にするために、別々のコード部分に関連するか、又は別々のコードブロックに関連した細かい粒度でロックが行われるように別々の複数のロックをアプリケーションによって用いることが可能である。細粒度ロックはコードで実現するのが面倒であり得るものであり、複数のロックのオーナシップを単一スレッドが獲得しなければならない場合、デッドロックを起こしやすいことがあり得る。種々の理由で、クリティカルな部分内の複数のスレッドによる共有データ構造組への同時アクセスは実際に、如何なる特定の生起の場合にも競合しないことがあり得る。前述の場合、ロックによって提供される直列化は、正確な実行を確実にするうえで必要でない。一スレッドが、開放されたロックを待ち、次いで、直列的にロックを、正確なメモリ値を維持するためにそうした直列化が必要でない場合であっても、獲得するので、前述の場合におけるロックの悲観的な使用によって、並列処理の利点の完全な実現が阻止され得る。よって、不必要な直列化を回避するための一手法は、投機的ロック回避SPEとして知られている。SPE手法はロックのコストを削減することができる。前述の手法は、SpeculativeLockElision:EnablingHighlyConcurrentMultithreadedExecution,Rajwaretal.,Proc.30thACM/IEEEInt’l.Symp.OnMicroarchitecture,2001に開示されている。前述の手法の場合、特定の同期化命令は悲観的に使用されており、必要でない。SPEの場合、特定の同期化命令は、必要でないとして予測され、回避される。同時に実行される2つのクリティカルな部分が同じメモリ位置の何れにも接触しない場合、ロックの人工的な直列化は回避される。前述のロッキング手法及びSPE手法とは別の手法として、トランザクション実行が登場している。トランザクション実行手法の下では、命令ブロックをアトミックブロックとして区分することができ、ロックの必要なくアトミックに実行することができる。本明細書及び特許請求の範囲使用のアトミックブロック及びトランザクションブロックは同義で用いることができる。区分された命令それぞれの正味の影響全てがみられ、プロセッサ状態にコミットされるか、又は、区分された命令の何れかの影響が何らみられないか、若しくはコミットされないように意味論を備えることができる。これは、同時処理の点で、かつ、プログラムライタによって行われることが必要な推論の点でもいくつかの利点を有する、共有メモリのアクセスのための同期化の別の形態を提供する。投機的ロック回避、及びトラザクション実行は何れも、スレッドレベルの投機的サポートによって達成することが可能である。何れの場合にも、意味論は、データ依存性の監視中にコードブロックを投機的に実行することを必要とする。必要なサポートは、投機的な領域内で行われるメモリ更新をバッファリングし、次いで、更新をコミット又は廃棄するための特定のやり方を含む。必要なサポートは、投機実行の期間中に別のスレッドによって修正された値が投機的領域内で読み出されたメモリに存在していることを検出する特定のやり方も含む。これは、投機的領域内で読み出されるメモリアドレス全てを記憶し、他のスレッドによる更新を求めてそれらを監視するための特定のやり方を必要とする。投機的マルチスレッド化は、プログラムをマルチスレッド化し、スレッドレベルの投機実行を用いるための別の手法である。投機的マルチスレッド化の場合、シーケンシャルプログラムがシーケンシャルタスク又は、次いで並列に実行されるコードブロックに分割される。元のシーケンシャルな意味論を維持するためにタスクはその更新をコミットすることが確実にされる。タスクは更に、観察した値を先行タスクによる更新が変えたかを求めて監視される。その場合、投機的更新を廃棄し、作業をやり直すことが必要である。これに対するハードウェアサポートは、前述と基本的に同様のスレッドレベル投機実行サポートである。スレッドレベル投機実行に対するハードウェアサポートをどのようにして構築するか、及び、ソフトウェアインタフェースをどのようにして設けるかについて種々の多くの提案がされている。前述の手法の大半は、種々のインタフェースを介して、同様の基本機能を提供している。事実上、それらは、アーキテクチャ状態の一部をチェックポイントする。次いで、メモリ更新をバッファリングし、外部書き込みのために読み出されるメモリ位置を監視して、実行し続ける。協調型スレッドのアトミックブロックの実行中に、少なくとも1つの既知のトランザクション実行手法の場合、スレッドによって生成されるメモリ状態は投機的である。アトミック命令ブロックが、実行を首尾良く完了するか否かは分からないからである。すなわち、第2の協調型スレッドは同じデータを求めて競合し得るものであり、その場合、第1の協調型スレッドはアトミックに実行することが可能でないことが分かる。すなわち、第1の協調型スレッド及び/第2の協調型スレッドに関する誤投機実行が存在している。誤投機実行をもたらすために、少なくとも特定の本願提案のトラザクション実行手法によってアトミックブロックの命令の実行中に、プロセッサ状態は更新されない。その代わりに、プロセッサ状態は、アトミックブロックが実行を完了するまで、未定義の中間状態として維持される。前述の手法の場合、アトミックブロックの各命令におけるプロセッサの状態は、アトミックブロックの状態が最終的にコミットされるか否かに依存する。よって、アトミックブロックの実行中に、中間状態は、1状態が最終的にコミットされる場合前述の投機的メモリバッファにおいて維持される状態と同等である場合、第1の状態であり、2状態が最終的にコミットされない場合、第2の状態である。よって、特定の一般的なトランザクション実行手法の場合、アトミックブロックの中間状態は未定義である。これは、アトミックブロック内の命令に対する特定の処理高精度のトラップ処理や単一ステップのデバッグなどを実行不能にする。しかし、図2は、投機的スレッド化及びトランザクション実行をサポートし、アトミックブロック内の各命令の境界確定などにおける厳密なアーキテクチャ状態も提供する。図2は、トランザクションブロック内の命令を含む各命令の境界において、厳密なアーキテクチャ状態を提供する一方でトランザクション実行を実現する機能を提供するマルチスレッドプロセッサ200を示すブロック図である。プロセッサ200は、一度に2つ以上のスレッドの同時実行をサポートする。本明細書及び特許請求の範囲使用のスレッドの語は、少なくとも、処理のその他のスレッドと同時に実行することができる命令ストリームの独立した実行の概念を含む。したがって、スレッドの語は、関連したプロセッサ状態とともにソフトウェア命令ストリームを実行するという考えを包含する。少なくとも一実施例の場合、プロセッサ200は、協調型スレッドの使用によって並列化されているアプリケーションコードの一部分を実行することができる。例えば、スポーニースレッドと呼ばれる投機的スレッドは、スポーンを実行したスレッドによってプロセッサ200上で実行されるコードに、プログラム順序において先の命令を実行するようプロセッサ200上で実行することができる。スポーンを実行したスレッドは、スポーナスレッドと呼ばれる。図2は少なくとも1つのCMP実施例を示す。複数スレッドユニット104それぞれはプロセッサコアであり、複数のコア104a乃至104nが単一チップパッケージ103に存在している。各コア104は、単一スレッドプロセッサ又はマルチスレッドプロセッサである。少なくとも1つの実施例の場合、スポーナースレッド例えば、104cなどを実行するコアとは別個のCMPコア例えば、104aなどがスポーニースレッドを実行する。少なくとも1つの別の実施例の場合、プロセッサ200は、同時マルチスレッド化をサポートする単一コアプロセッサであり得る。前述の実施例の場合、各スレッドユニット104は、それ自身の次命令ポインタ及びフェッチロジックを有する論理プロセッサであるが、同じプロセッサコアが全スレッド命令を実行する。スレッドユニット及びシーケンサの語は本明細書及び特許請求の範囲では同義に用いている場合がある。前述の実施例の場合、論理プロセッサ104はその自身のアーキテクチャ状態のバージョンを維持するが、単一のプロセッサコアの実行資源が全スレッド間で共有される。前述の別の実施例の場合、スポーニースレッドは、投機的マルチスレッド化をサポートする単一コア同時マルチスレッド化システムにおいて実行される。前述の実施例の場合、スポーニースレッドが、スポーナスレッドと同じ物理プロセッサ200上の第2のSMT論理プロセッサ例えば、104aなどによって実行される一方、スポーナスレッドは、別のSMT論理プロセッサ例えば、104nなどによって実行される。本明細書及び特許請求の範囲記載のトランザクション実行の実施例は何れかのマルチスレッド化手法SMT、CMPマルチスレッド化やその他のマルチプロセッサマルチスレッド化や何れかのその他の既知のマルチスレッド化手法を含むにおいて利用することができる。本明細書及び特許請求の範囲記載のプロセッサ200のCMPの実施例は、プロセッサコア毎の単一スレッド104を表すが、本明細書及び特許請求の範囲記載の開示が、単一スレッドプロセッサに限定されるとみなすべきでない。本明細書及び特許請求の範囲記載の手法は、何れのCMPシステム単一チップパッケージ103内に複数のマルチスレッドプロセッサコアを含むものを含むにおいても利用することができる。よって、図2は、2つ以上のスレッドユニット104a乃至104nをプロセッサ200が含むことを示す。説明の目的で、スレッドユニットの数はNとして表す。前述のスレッドユニット104が2つを超えることが任意の特性であることは、図2において点線及び省略で表す。すなわち、図2はN>2を示す。記載を単純にするために、CMP実施例を本明細書及び特許請求の範囲において更に詳細に記載する。すなわち、各スレッドユニット104は、32ビットプロセッサ及び/又は64ビットプロセッサペンティアム登録商標、ペンティアム登録商標プロ、ペンティアム登録商標II、ペンティアム登録商標III、ペンティアム登録商標4、並びにアイテニアム登録商標及びアイテニアム登録商標2マイクロプロセッサなどを表し得る。しかし、前述の部分的なリストは限定的に解されないものとする。図2に示すプロセッサ200の実施例は、投機的マルチスレッド化をサポートする特定の意味論を備えるよう構成される。それぞれは、以下に更に詳細に説明する。前述の構成の特定の具体的な実現形態を以下に説明するが、前述の実現形態の詳細は、例示の目的でのみ備えるものであり、限定的に解されないものとする。まず、プロセッサ200は、共有データのメモリ処理を含む命令組の最初及び最後を区分する特定のやり方本明細書及び特許請求の範囲ではアトミックブロック又はトランザクションブロックとして同義で表すを提供する。第2に、プロセッサ200は、協調型スレッド間の競合を検出するためにロードメモリロードアドレスを監視するハードウェアを含む。第3に、プロセッサ200は、演算をバッファ記憶メモリ書き込みするためのハードウェア記憶バッファを含む。第4に、プロセッサ200は、アトミックブロックの実行中に競合が認識されない場合、記憶バッファからメモリのアトミック更新を行うよう構成される。最後に、プロセッサ200は、アトミックブロックの実行中に競合が検出された場合、記憶バッファのメモリ更新を廃棄し、障害を通知する。前述の一般的な機能は、プロセッサ200の少なくとも1つの実施例によって提供される。アトミックブロックの区分に関しては、プロセッサ200は、いくつかのやり方の何れかで前述のサポートを提供することができる。少なくとも1つの実施例の場合、プログラマは、命令演算コード自体に特定のビットをセットすることによって読み出し命令又は書き込み命令がアトミックブロックの一部である旨を示すことができる。例えば、アトミックインディケータは、命令演算コードの一部であり得るか、又は、ロード命令若しくは記憶命令の特定のプリフィックスによって示し得る。少なくとも1つの別の実施例の場合、プロセッサ200によってサポートされる命令セットは、明示的なアーキテクチャ区分命令を含み得る。すなわち、プロセッサ200の命令セットは、プログラマによってアトミックブロックの最初に配置し得る監視開始命令を含み得る。同様に、プロセッサ200の命令セットは、プログラマによってアトミックブロックの最後の命令の後に配置し得る監視停止命令も含み得る。少なくとも1つの実施例の場合、監視開始命令及び監視停止命令を行うよう制御レジスタを操作するために単一の命令を用いることができる。前述の命令及び制御レジスタの少なくとも1つの実施例の更なる説明は、図7に関して以下に記載する。前述の通り、投機的マルチスレッド化及びトランザクション実行をサポートするプロセッサ200の実施例は、協調型スレッド間の競合を検出するためにロードメモリ読み取りアドレスのハードウェアベースの監視を提供することができる。図2は、外部更新を求めて監視する対象の1つ又は複数のアドレスを記憶するためのテーブル106を含み得る。前述のテーブル106は、アドレス監視テーブルAMTと呼び得る。AMT106の論理コンセプトは、スレッドユニット104についてアーキテクチャ的に定義することができるが、必ずしも、別個のハードウェアテーブル構造として実現されなくてよい。前述の通り、アトミックブロック内の潜在的な依存関係及び/又は共有データ競合があいまいであり得るので、AMT106は有用であり得る。プログラマは、アトミックブロックの実行中にアトミックブロックにおいて用いるアドレスに別のスレッドが書き込もうとすることを知っていた場合、同時実行中にその位置を読み出そうとしなかったであろうと思われる。すなわち、元のプログラムに競合/依存関係が存在していたことをプログラマが知っていた場合、前述のコード並列化は試行されなかったであろう。コードは、元々書き込まれていたように、順次に競合命令を実行することが可能であったであろう。よって、AMT106は、誤投機実行の識別に有用であり得る。更に、図2は、更新を行うスレッドが誤投機実行していないことが判定された場合、その後に行い得るメモリ更新をバッファリングするためのテーブル108も含むことができる。前述のテーブル108は、アトミック更新テーブルAUTと呼び得る。SMT実施例の場合、テーブルの別々の部分を各論理プロセッサに割り当てて、単一のAMT106及びAUT108を論理プロセッサ間で共有することができる。AUT108は、アトミックブロック中に行われるメモリ書き込みをバッファリングすることができる。前述の手法は、アトミックブロックの中間状態を利用するその他のスレッドを行うことを回避する。別のスレッドとの未解決の依存関係又は競合なしでアトミックブロックが実行を完了することができたか否かが最終的に判定されると、AUT108にバッファリングされたメモリ更新をアトミックに行うことができる。しかし、トランザクションファイルに障害が生じた場合すなわち、競合、又は未解決のデータ依存関係が理由で、完全な実行をアトミックブロックが完了することができない場合、AUT108はクリアリングすることができ、バッファリングされた更新は行われない。このようにして、誤投機実行が行われた旨の判定に応じて、既に行われたメモリ書き込みはアンロールしなくてよい。図2に示すプロセッサ200の少なくとも1つの実施例は、アトミックブロックにおける各命令の境界確定などにおける厳密なアーキテクチャ状態を以下のように提供する。プロセッサ200における特定のユーザ制御可能な状態は、アトミックブロックの命令の実行中にトラップ又は例外が生じた場合にトランザクション障害が生じるべきでない旨を示すよう設定することができる。その代わりに、例外/トラップが処理されている間、AMT106及びAUT108の内容は維持される。前述の処理後、アトミックブロックの実行は続行し得る。このようにして、トラップ又は例外が処理された後にアトミックブロックの実行を再開することができるように厳密な状態が維持される。図2にはAMT106及びAUT108を別個のブロックとして示しているが、前述の例証は、前述のテーブルが論理的に別個の構造であることを伝えることを意味している。前述のテーブル106、108はアーキテクチャ的に明示的であり得るが、その特定の編成及び物理構造は、設計上の選択であり、物理的な実現の厳密なやり方は、何れかの特定の構造又は編成に限定されると解されないものとする。一般に、AMT106及びAUT108の情報は、何れの記憶領域にも維持することができる。例えば、論理テーブル106、108は、ビットの収集物であり得るか、又はその他の既存のハードウェア構造の拡張であり得る。AMT106及びAUT108を実現する特定のやり方に関し、テーブル106、108は一般に、1つ又は複数の物理的な記憶領域に有限論理構成として実現することができる。テーブル106、108の有限性は必然的に、トランザクションとして首尾良く実行可能な命令の数を制限する。よって、バックストア160における1つ又は複数のメモリテーブルを用いて、AMT106及び/又はAUT108のサイズを拡張することができる。図2は、プロセッサ200の少なくとも1つの実施例がメモリ150に結合し得ることを示す。メモリ150の一部分をソフトウェアによって利用して、AMT106及び/又はAUT108のバックストア160を維持することができる。ソフトウェアは、オーバフローエントリのテーブル106、108からバックストア160への流出を制御することができる。少なくとも1つの実施例の場合、AMT106は、ロードバッファと並列の構造として実現することができる。同様に、AUT108は、記憶バッファに並列の構造として実現することができる。前述の実施例の考えられる1つの構成を図8に示す。図8は、AMT106及びAUT108、並びに、ロード要求バッファ440及び記憶要求バッファ450を含むプロセッサ1004の少なくとも1つの実施例を更に詳細に示すブロック図である。AMT106、AUT108、記憶要求バッファ440及び/又はロード要求バッファ450のうちの1つ又は複数は、メモリ配列バッファMOB223の一部であり得る。プロセッサ1004は、命令セットの命令を受け取り、デコードするためのデコーダ1022も含み得る。デコーダ1022は、命令を受け取り、デコードすることができることがあり得る。デコーダ1022によってデコードされる対象の命令は、表1に関し説明する動作の実行のための1つ又は複数の命令を含み得る。図8は、非ブロック化キャッシュメモリサブシステムを実現するプロセッサ1004を示すキャッシュメモリサブシステムは時には、本明細書及び特許請求の範囲では略称キャッシュシステムとして呼ぶものとする。キャッシュシステムは、L0キャッシュ460及びL1キャッシュ410を含む。少なくとも一実施例の場合、L0キャッシュ460及びL1キャッシュ410はダイ上キャッシュである。プロセッサ1004は、主メモリ102からもデータを取り出すことができる。主メモリ102、L1キャッシュ410、及びL0キャッシュ460は併せてメモリ階層240を形成する。メモリ配列バッファMOB223は、ディスパッチから完了までの未処理ロード及び記憶命令を一時的に保持することができる。少なくとも1つの実施例の場合、記憶命令のためのこの状態情報を記憶要求バッファ450に維持することができ、ロード命令のこの状態情報をロード要求バッファ440に維持することができる。少なくとも1つの実施例の場合、ロード命令のトラッキングは任意に、AMT106によって処理することができる。AMT106は、トランザクション実行中のロード要求バッファ440と共に利用することができる。少なくとも1つの実施例の場合、未処理記憶命令の状態情報は、通常の処理の場合に記憶要求バッファ450に維持することができるか、又は、代わりに、トランザクション実行中にAUT108において維持することができる。図8は、制御部分515を各記憶バッファエントリ450a乃至450nが含み得ることを示す。図8に示すように互いに論理的に関連しているが、必ずしも、記憶装置の連続した記憶領域に、記憶要求バッファエントリ450a乃至450nの制御部分515及びデータ部分480が物理的に存在していなくてもよく、同じ記憶装置に存在していなくてもよいことを当業者は認識するであろう。例えば、図8は、記憶バッファ450の制御部分515がMOB223に含まれ得る一方、データ部分480がダイ上キャッシュ410に存在し得ることを示す。少なくとも1つの実施例の場合、MOB223は制御ロジック475を含む。制御ロジック475は、記憶データをバッファリングすべき所が記憶要求バッファ450であるか、AUT108であるかを判定するための選択ロジック236を含む。少なくとも1つの実施例の場合、選択ロジック236は、記憶要求バッファ450及びAUT108の一方のみに記憶を記録すべきである旨を指示することができる。すなわち、記憶データを保持する所の判定は、排他的論理和演算であり得る。選択ロジック236は、アトミック実行が行われていない場合に、記憶状態を記憶要求バッファ450にバッファリングすることができる旨を示し得る。しかし、アトミック実行中、その代わりに、選択ロジック236は記憶状態をAUT108にバッファリングさせることができる。少なくとも1つの実施例の場合、選択ロジック236は、メモリから読み出された、ロードデータのメモリアドレスをAMT106に入力すべきか否かも判定するものとする。前述の入力は、アトミック実行中に、メモリ読み出しデータをロード要求バッファ440にプルする通常の処理とともに行うことができる。すなわち、AMT106におけるロードアドレスを監視するか否かについての判定は、通常のロード要求バッファ440処理に加えて監視が行われるような選択的な処理であり得る。AMT106及びAUT108の利用によって、あいまいなデータ依存関係又はデータ競合が理由で並列化がさもなければ困難なコードの投機的マルチスレッド化が可能になる。論理アドレス監視テーブル106及び論理アドレス更新テーブル108の使用によって、プロセッサ200は、実行前にあいまいにみえる特定の潜在的なデータ依存関係又はデータ競合が実行中にスレッド間に存在し得ることを検出することができる。前述のように、テーブル106、108はよって、ロードメモリ読み出し処理の監視、及び記憶メモリ書き込み処理のバッファリングそれぞれをサポートする。図3は、AMT106及びAUT108を用いたトランザクション実行サポートによって投機的マルチスレッド化を行う方法300の少なくとも1つの実施例のデータ及び制御フローを示すフロー図である。一般に、方法300は、アトミックブロックの命令を実行するが、更新をメモリにバッファリングする。更に、方法300は一般に、同じアドレスへの書き込みを別のスレッドが行おうとしたかを判定するために、アトミックブロックの実行中に読み出されるメモリアドレスを監視するようにする。肯定の場合、アトミックブロックの実行中にそのメモリアドレスに対する競合が存在しており、ブロックのトランザクション実行は、メモリアドレスに対する競合が理由で障害が生じる。図3は、ブロック302で方法300が始まることを示す。トランザクションブロックとして区分されたブロック上で方法300が行われるものとする。したがって、少なくとも1つの実施例の場合、前述のように、方法300を開始する前に監視開始命令が実行されているものとする。更に、前述の実施例の場合、監視停止命令の実行によって、ブロック314での判定が偽の値に評価されるものとする。あるいは、アトミックブロックの一部として命令を実行するものとするプレフィックス、命令コードフィールドやその他の個別化されたインディケータとともにアトミックブロック内の各ロード及び記憶命令をマーキングすることによって区分を表すことができる。前述の実施例の場合、任意のブロック308及び312破線を用いることによって任意的として表すを行って、命令がアトミックブロックの一部であるか否かを判定する。少なくとも一実施例の場合、方法300は、AMT106及びAUT108図2参照を含むプロセッサのスレッド実行ユニット例えば、図2の104参照によって行われるものとする。よって、命令がアトミックブロックの一部であるか否かの判定は、区分された命令の通常の実行中に行われたメモリ書き込みは何れも108にバッファリングされるべきであり、区分された命令の通常の実行中に行われた何れのメモリ読み出しのアドレスもAMT106に維持されるべきであることも示す。図3は、図示した方法300によるアトミックブロックの実行中のどの時点でも、トラップ、例外又は割り込みを行うことができることを示す。前述のイベントが行われた場合、厳密なアーキテクチャ状態を維持することができる。すなわち、AMT106及びAUTの内容を例外/割り込み/トラップイベントの処理中に維持することができる。前述のイベントは、障害をもたらす条件として扱われない。その代わりに、図3に示す方法300によるアトミックブロックの実行は、イベントの処理後に再開することができる。図3は、ブロック390において、前述のイベントが方法300の少なくとも1つの実施例の場合の障害条件でないことを示す。図3は、方法300の処理がブロック302からブロック304に進むことを示す。ブロック304では、スレッドの次命令がフェッチされ、デコードされる。処理は次いでブロック306に進む。ブロック306では、ブロック304でフェッチされ、デコードされた命令がメモリ読み出し命令例えば、ロード命令などであるか否かについて判定される。肯定の場合、処理は任意ブロック308に進む。さもなければ、処理はブロック310に進む。任意ブロック308は、命令がアトミックブロックの一部であるか否かを判定する。前述の判定のやり方は、種々の実現形態間で変わり得る。前述の情報をメモリ書き込み命令自体に埋め込まないが、その代わりに監視開始命令を用いる実現形態の場合、前述の判定308は、メモリ読み出し命令毎に行わなくてよい。その代わりに、ブロック302で、方法300の実行の開始の前に監視開始が実行されており、実行中に方法300がこのことを知っているものとする。例えば、少なくとも1つの実施例の場合、前述の情報は、制御レジスタ後述するトランザクション制御レジスタTCRなどに維持することができる。前述の実施例の場合、処理はブロック306からコネクタAに進み、任意ブロック308は行わない。コネクタAに関連した処理は、図4に関して更に詳細に説明する。ブロック310では、ブロック304でフェッチされ、デコードされる命令がメモリ書き込み命令例えば、記憶命令などか否かが判定される。肯定の場合、処理は任意ブロック312に進む。さもなければ、処理はブロック311に進む。任意ブロック312は、メモリ書き込み命令がアトミックブロックの一部であるか否かを判定する。やはり、前述の判定のやり方は、種々の実現形態の実施例間で異なり得る。メモリ書き込み命令自体に前述の情報を埋め込まないが、監視開始命令を用いる実現形態の場合、前述の判定312はメモリ書き込み命令毎に行わなくてよい。その代わりに、前述のように、方法300の実行の開始に先行して監視開始命令が実行されているものとする。やはり、前述の情報を制御レジスタに記憶することができる。前述の実施例の場合、処理はブロック310からコネクタBに進み、任意ブロック312を行わない。コネクタBに関連した処理は、図5に関連して更に詳細に説明する。ブロック304においてフェッチされた現在の命令がメモリ読み出し命令でもメモリ書き込み命令でもない場合、処理はブロック311に進む。命令はブロック311において実行される。処理は次いでブロック314に進む。監視開始及び監視停止命令を利用した実施例の場合、ブロック314が行われる。前述の実施例の場合、ブロック314における判定は、監視停止命令を受けなかった場合に偽と評価される。ブロック314は、監視開始区分命令を利用せず、その代わりに、個々のメモリ命令とアトミックブロックインディケータを関連付ける実施例の場合にも行われる。前述の実施例の場合、ブロック314における判定は、特定の種類の終結インディケータに達したか否かを判定する。少なくとも1つの実施例の場合、終結インディケータは、AUT108、図2においてバッファリングされた更新をメモリにコミットすべきである、命令、又は、命令の演算コード若しくはプリフィックスであり得る。前述の実施例の場合、ブロック314における判定は、終結インディケータを受けなかった場合に真に評価される。ブロック314における判定が真に評価された場合、次命令をフェッチするために処理はブロック304にループバックする。さもなければ、処理はブロック318において終了し得るか、又は、任意的にブロック316に進み得る。トランザクション障害割り込みを受けることなく方法300がブロック316に達した場合、アトミックブロックは、競合なく実行を首尾良く完了している。よって、アトミックブロックの実行中にバッファリングされたメモリ更新はメモリにコミット316することができる。ブロック316では、AUT108からのバッファリングされたメモリ更新はよって、メモリにアトミックにコミットされる。AUT108のエントリは次いでクリアすることができる。ブロック316においてメモリにAUT108のエントリをコミットするアトミック更新は、命令アトミックブロックの最後の命令後にプログラマによって入力されるに応じて行うことができる。前述の命令すなわち、投機実行コミット命令の例示的な実施例は、表1に関して以下に更に詳細に説明する。少なくとも1つの実施例の場合、他の動作もブロック316で行うことができる。例えば、アトミックブロックが実行を完了すると、後のメモリ読み出しのためにAMT106の更新をディセーブルするための動作を行うことができる。AUTテーブル108における後続メモリ書き込みのバッファリングもブロック316でディセーブルすることができる。方法300の処理は次いで、ブロック318で終了する。図4は、現在の命令がアトミックブロックのメモリ読み出し命令であることを図3のブロック306及び、適宜、任意のブロック30における判定が示す場合に行われる処理Aの少なくとも1つの実施例を示すブロック図である。前述の場合、処理はブロック402に進む。ブロック402では、示されたメモリアドレスを読み出すために命令が実行される。処理は次いでブロック404に進む。ブロック404で、示されたメモリアドレスがアドレスモニタテーブルAMT106に追加される。やはり、AMT106は論理的構成である。例えば、ブロック404では、指定されたメモリアドレスを含めるようAMTテーブルのエントリを実際に修正する代わりに、ブロック404の処理は別々の実施例についで違ったふうに処理することができる。一例に過ぎないが、チップ上のデータキャッシュに関連したステータスビットをトグリングして、キャッシュラインにおけるメモリアドレスを、外部書き込みを求めて監視する旨を示すことができる。AMT106がブロック404で更新された後、処理は図3のブロック314に戻る。図5は、現在の命令がアトミックブロックのメモリ書き込み命令であることを図3のブロック310及び、適宜、任意のブロック312における判定が示す場合に行われるBを処理する少なくとも1つの実施例を示すブロック図である。前述の場合、処理はブロック502に進む。ブロック502では、メモリ書き込み命令が実行される。しかし、メモリ書き込み命令は、メモリを更新するのではなく、AUT108のエントリを更新する。このようにして、アトミックブロック中に行われるメモリ書き込みは、AUT108にバッファリングされる。やはり、AUT108は、論理的構成であり、種々のやり方でハードウェアにおいて実現することができる。例えば、少なくとも1つの例示的な実施例の場合、AUT108をゲーティングされた記憶キューとして実現することができる。AUT108がブロック502で更新された後、処理は次いで図3のブロック314に進む。アトミックブロックの区分の特定の形態とともにAMT106及びAUT108を用いることによってハードウェアスレッド投機実行がサポートされることを前述した。更に、特定の命令及び状態も前述の手法に統合することができる。併せて、前述の構成要素は、広範囲に亘る投機的スレッド化モデルを可能にするための投機的スレッドの効率的な実行を可能にすることができる。図7は、論理AMT106テーブル及び論理AUT108テーブル、並びに特定のトランザクション実行状態950を含むスレッドユニット904の少なくとも1つの実施例を示すブロック図である。更に、スレッドユニット904は、アトミックブロックの各命令の境界における厳密な状態を提供するやり方でアトミックブロックのトランザクション実行をサポートすることができる特定の命令を実行することができ得る。図7に示すトランザクション状態950は破線で示すように任意である。すなわち、実行コア930におけるハードウェア状態として維持される代わりに、特定されたメモリアドレスによるメッセージパスを介してメモリにおいて維持することができる。しかし、少なくとも1つの実施例の場合、トランザクション状態950は1つ又は複数のハードウェアレジスタに維持される。少なくとも1つの実施例の場合、トランザクション状態950を維持するためのレジスタは、トランザクション制御レジスタ951本明細書及び特許請求の範囲ではTCRとして表す及びトランザクションスタータスレジスタ952本明細書及び特許請求の範囲ではTSRとして表すを含む。トランザクション制御レジスタは、AMT106及びAUT108に対する更新を制御する。トランザクションステータスレジスタはAMT及びAUTの状態を通知することができ、トランザクション障害を示すこともできる。トランザクション制御レジスタ951は、セットされると、AMTテーブル106、AUTテーブル108に関連した各種の挙動をもたらす種々のビットを含み得る。トランザクション制御レジスタ951は、メモリ更新がバッファリングされているか否か、及び、依存関係検査についてメモリ参照が監視されるか否かを制御することができる。例えば、トランザクション制御レジスタは、以下の挙動それぞれを表すための1つ又は複数のビットを含み得る。AUTのリセットの強制AMTのリセットの強制AMTの直接更新メモリ書き込みの直接バッファリングAUTへの更新少なくとも1つの実施例の場合、複数の挙動を単一ビットによって示すことができる。例えば、トランザクション制御レジスタ951における単一ビットは、AUT及びAMTをリセットすべきである旨を表すことができる。特定の一実施例の場合、トランザクション制御レジスタ951TCRは、何れかの特定の時点においてフィールドに記憶された値に応じてAMT及びAUTの挙動を判定し得るものであり、かつ/又は各命令の実行に影響を及ぼし得るフィールドを含む。当然、その他の実施例はより多いか、又はより少ないビットを利用することができる。トランザクション制御レジスタ951の実施例の場合、フィールドは以下のように定義することができる。特定のビット数を例証的な目的でのみ記載しており、限定的に解されないものとする。何れかの任意の長さのレジスタにおいて、以下に記載したビットフィールドを実現する実施例の場合、以下に記載していない更なるフィールドは予約済であり得る。前述の予約済ビットは、書き込み無視、読み出しゼロとして実現することができる。TCRリセットビットTCR951の2つの1ビットフィールドは、AMT及びAUTをリセットし、クリアするために用いられる書き込みのみのビットであり得る。AMTクリアビットTCRビット0、書き込みのみは、AMTのリセットを制御する。1がこのビット位置に書き込まれた場合、有効なエントリが存在しないようにAMTがクリアされる。AMTクリアビットは0を示す。AUTクリアビットTRCビット1、書き込みのみは、AUTのリセットを制御する。1がこのビット位置に書き込まれた場合、バッファリングされた投機的メモリ更新は廃棄される。AUTクリアビットは0を示す。TCR更新ビットTCR951の2つの1ビットフィールドを用いて、AMT又はAUTの更新に関する命令実行の挙動を制御することができる。AMT更新ビットTRCビット2は、AMTの更新を制御する。AMT更新ビットがセットされた場合1の値、AMTは、命令によって読み出されるメモリ位置毎に更新される。セットされない場合0の値、AMTは、命令が実行された際に更新されない。ソフトウェアは、監視されたメモリ参照及び監視されないメモリ参照を混ぜることを可能にするようこのビットの状態をトグリングすることが可能である。AMT更新ビットがセットされ、トランザクションに障害が生じた場合ステータスビット参照、AMTは更新しなくてよい。AUT更新ビットTRCビット3は、リングレベル3ユーザモードにおいてメモリ更新のバッファリングを制御する。AUT更新ビットがセットされた場合1の値、命令によってリングレベル3において行われたメモリ更新はバッファリングされ、トランザクションコミット処理までメモリに対して行われない。ビットがセットされない場合0の値、命令によるメモリ更新はバッファリングされず、通常と同様に、メモリに対して直接行われる。AUT更新ビットがセットされ、トランザクションに障害が生じた場合スタータスビット参照、リングレベル3において行われたメモリ更新はバッファリングしなくてよく、単に廃棄することができる。任意のTCRビット別の実現形態は、TCRにおいて定義される対象の以下のフィールドの1つ又は複数を提供することができる。AUT非バイパスビットTCRビット6は、AUTがイネーブルされた場合に通常行われるような書き込み後読み出しバイパスについてAUTを検査することなくそのメモリ位置の値を命令が確かめることによってメモリ読み出しを引き起こす。上記ビットが実現形態においてサポートされない場合、ビットのセット値1の書き込みの試行によって、モードがサポートされないビットが、トランザクションスタータスレジスタにおいてセットされる。これは、アクティブなトランザクションの障害を強いる。ハンドラにおけるAUT更新TCRビット7は、3より低いリングレベルにおいてメモリ更新を実施する。AUTイネーブルビットとこのビットが両方セットされた場合1の値、何れのリングレベルにおけるメモリ更新もAUTにバッファリングされる。リングレベル3におけるこのビットに対する更新は無視される値は変わらない。このビットは、トラップ/例外/割り込みでリングレベル3から、より低いリングレベルへの遷移でゼロに自動的にクリアされ得る。このビットが実現されない場合、3よりも低いリングレベルにおける更新の試行は、トランザクションステータスレジスタにおいてトラップフォース障害ビットをセットさせ得る。これは、アクティブなトランザクションの障害を強いることがあり得る。トランザクションステータスレジスタ952は、アトミックブロックの実行に関する特定のステータス状態を反映するための1つ又は複数のビットを含み得る。トランザクションステータスレジスタ952の内容は、トランザクションのステータスを示し得るものであり、トランザクション障害を示し得る。例えば、トランザクションステータスレジスタ952は、以下のステータス状態を表すための1つ又は複数のビットを含み得る。トランザクション障害が生じたか否かトランザクション障害の理由障害が生じた場合このフィールドの値はオーバフロー、衝突等を含み得る。AMT状態このフィールドの値は、フル、フルでない、空き、空きでない等を含み得る。AUT状態このフィールドの値は、フル、フルでない、空き、空きでない等を含み得る。アトミックブロックの実行中にトラップが行われたか否かトラップがトランザクション障害を引き起こしたか否か特定の一実施例の場合、トランザクションステータスレジスタ952TSRは、AMT、AUT及び現在のトランザクションの一般的な状態についてのステータス情報を、何れかの特定の時点においてフィールドに記憶されている値に応じて提供し得るフィールドを含む読み出し専用レジスタである。当然、その他の実施例は、より多くの、又はより少ないビットを利用することができる。トランザクションステータスレジスタ952の実施例の場合、フィールドは以下のように定義することができる。特定のビット番号は例証の目的でのみ記載しており、限定的に解されないものとする。任意の容量のレジスタにおいて、後述のビットフィールドを実現する実施例の場合、以下に記載されていない更なるフィールドは予約済であることがあり得る。前述の予約済ビットは、書き込み無視、読み出しゼロとして実現することができる。少なくとも一実施例の場合、TSR952の最初のビットは、現在のトランザクションに障害が生じているかを示す。次の4ビットは、AMT及びAUTの状態についての情報ビットである。第6のビットは、アクティブなトランザクションが存在していたAMT及び/又はAUTが空きでない間に生じたトラップ/例外/割り込みを示す。最後のビット組は、現在のトランザクションに障害が生じていることを示し、その理由についての情報を提供するために用いることができる。TSRのビットそれぞれは、特定の状況においてハードウェアによってセットすることができる。各ビットは1つ又は複数のイベントによって影響され得る。複数のイベントが同時に生じた場合、ビットをクリアするイベントは、ビットをセットするイベントよりも高い優先度を有し得る。トランザクション障害ビット現在のトランザクションに障害が生じた場合、トランザクションステータスレジスタの第1のビットがセットされる最後の8個のステータスビットビット6乃至ビット13がセットされる。トランザクション障害ビットTSRビット0は、現在のトランザクションに障害が生じたことを示す。このビットがセットされている場合、障害の原因を示すようビット6乃至ビット13のうちの少なくとも1つもセットされる。情報ビットTSRの次の4ビットは、AMT及びAUTのステータスについての情報ビットである。AUT若しくはAMT、又は両方が空きでない場合、トランザクションはアクティブであるとみなされる。これは、以下に定義する空きでないビットによって示す。上記ビットは以下の通りである。空きでないAMTビットTSRビット1は、少なくとも1つの有効エントリをAMTが有していることを示す。AMTフルビットTSRビット2は、AMTがフルであるか又はほとんどフルであることを示す厳密な定義は、実現形態に依存する。AMTへのその後の更新によって、構造がオーバフローする可能性が高くなることをこのビットは示す。空きでないAUTビットTSRビット3少なくとも1つのバファリングされたメモリ更新をAMTが有していることを示す。AUTフルビットTSRビット4は、AUTがフルであるか又はほとんどフルであることを示す厳密な定義は、実現形態に依存する。AMTへのその後の更新によって、既にオーバフローしていない場合構造がオーバフローする可能性が高くなることをこのビットは示すまだオーバフローしていない場合。トラップビットAMT106又はAUT108が空きでない場合にトラップ/例外/割り込みが生じたことを示すためにTSR952の第5のビットをトラップビットとして用いることができる。このビットは、トランザクションクリアトラップビット命令例えば、以下の表1におけるTRNXOK命令によってクリアすることが可能である。トラップハンドラが戻った場合、又は、その後のトラップ/例外/割り込みが生じた場合にこのビットがなおセットされている場合、トラップフォース障害ビットがセットされ、トランザクションに障害が生じ得る。トラップビットTSRビット5は、AMT又はAUTが空きでない場合に、トラップビットTSRビット5は、ハードウェアによってトラップ/例外/割り込みの際に自動的にセットすることができる。ユーザレベルハンドラに対してビットをセットすることはできない。トランザクションセーフであることを知っているトランザクションアウェアハンドラは、トランザクションクリアトラップビット命令によってハンドラに入る際にこのビットをクリアし得る例えば、以下の表1のTRNXOK命令参照。このようにして、トラップ/例外/割り込みが行われた際に行われたアトミックブロックの実行をイベントの処理後に再開することができるようにトラップ又は例外を非障害状態として処理することができる。トランザクション障害ビットトランザクションに障害が生じたことを示すフィールドとしてTSR108の次の8ビットを用いることができる。アクティブなトランザクションが存在しておりAUT106及びAMT108の一方又は両方が空きでなく、以下の8ビットの何れかがセットされた場合、トランザクションに障害が生じたとみなされる。AMTオーバフロービットTSRビット6は、AMTがオーバフローし、トランザクションによって読み出される少なくとも1つのメモリ位置が、監視のためにAMTにおいてログインされていないことを示す。AMTコヒーレンシ衝突ビットTSRビット7は、AMTに、エントリと、メモリへの外部更新との間で衝突、又は衝突の可能性保守的な近似は許容されるがあった旨を示す。AMTオーバフロービットTSRビット8は、AUTがオーバフローしており、バッファリングされるはずであった少なくとも1つのメモリ更新が廃棄されていることを示す。AUTコヒーレンシ衝突ビットTSRビット9は、AUTがコヒーレンシイベントをみたバッファリングされた更新を完了することを可能にしないことを示す。AUTバッファバイパス不可ビットTSRビット10AUT内の更新バッファリングをバイパスした直接メモリ更新をプロセッサがサポートしない場合に、AUTがイネーブルされ、空でない間にAUT更新ビットがクリアされた場合、このビットはハードウェアでセットすることができる。AUT障害RAWビットTSRビット11は、正しい書き込み後読み出しの意味論を提供するためにAUTからバイパスされた値を得ることができなかったか、又は、AUTにおける更新に関してあいまいさがあり、ロードの正しい値を求めることができなかったので、実行されるロードが、不整合の値をみたことがあり得ることを示す。あいまいさがある場合、ロードについて戻される値は、メモリからの値であり、AUTからの値でない。トラップ強制障害ビットTSRビット12は、AMT又はAUTが空きでなかった状態にある間にトラップ/例外/割り込みによって障害が強制されたことを示す。これは、より下位のリングレベルへの遷移の動作による特定の動作、又はより下位のリングレベル内の動作によって、アクティブなトランザクションに障害をもたらすことを示す。AUTが空きでなく、プロセッサは、バッファリングされた更新をバイパスするメモリ更新をサポートしないのでこのビットをセットすることが可能である。このビットは、トラップ/例外/割り込みが生じた場合、又はトラップ/例外/割り込みからの戻りが生じ、トラップビットTSRビット5が現在セットされている場合、このビットもハードウェアによってセットすることができる。サポートされないモードビットTSRビット13は、トランザクション制御レジスタへの書き込みが、サポートされないモードにプロセッサを入れようとする場合、ハードウェアによって自動的にセットされる。AMT106に関連したTSR952ステータスビット全ては、AMT106がクリアされた場合にゼロに自動的にクリアすることができる。前述のクリアは例えば、TCR951のAMTクリアビットへの1の書き込みに応じて、又はトランザクションコミット命令に応じて行うことができる。同様に、AUT108に関連したTSR952ステータスビット全ては、AUT108がクリアされた場合にゼロに自動的にクリアすることができる。前述のクリアは例えば、TCR951のAUTクリアビットへの1の書き込みに応じて、又はトランザクションコミット命令によって行うことができる。AMT106及びAUT108が同時にクリアされるか、又はAMT106又はAUT108がクリアされ、他方の構造が空きの場合に、TSR951の残りのビット全てすなわち、AMT106又はAUT108に直接関連していないものを自動的にゼロにクリアすることができる。クリアは、TCR951のAMT106クリアビット及び/又はAUT108クリアビットに対する書き込みによって、又はトランザクションコミット命令によって行うことが可能である。図7は、メモリシステム902に記憶されたユーザプログラム960が、いくつかのマルチスレッドパラダイムの何れかの実現に有用な命令を含み得ることを示す。前述の命令を用いれば、例えば、プログラマは、トランザクション実行、SPE、ロック回避、及び/又はその他のマルチスレッドプログラミングパラダイムを実現することができる。図7は、何れか又は全ての前述の命令の使用が任意であることを破線によって示す。本発明の少なくとも一実施例によるスレッドユニット904は、以下に表1に表す命令又はプリミティブの1つ又は複数のデコードし、実行することができる。一般に、命令は以下のうちの1つ又は複数を含み得る。トランザクション制御レジスタに書き込むための命令、バッファリングされたメモリ更新のコミットをトリガするための命令、トランザクションステータスレジスタを読み出すための命令、及び/又は、トラップ/例外/割り込み処理に関連したトランザクションステータスレジスタビットの1つをクリアするための命令。当然、別の実施例は、上記機能を実現するために、表1に示すものよりも多いか、又は少ない命令を用いることができる。TRNXSET命令は、少なくとも一実施例の場合、トランザクション制御レジスタTCR951に値を書き込む。TRNXSET命令の実行は、トランザクションの開始又は障害ももたらし得る。命令を用いて、メモリ読み出しロードアドレスの監視を一時的にディセーブルすることもできる。AMT106及びAUT108がクリアされるようTCR951にビットをセットすることにより、かつ、アトミックブロックにおけるメモリ命令に基づいてテーブル106、108の更新及び検査をもたらすようTCR951にビットをセットすることにより、トランザクションの最初を区分するためにTRNXSETを用いることが可能である。TRNXSET命令の実行の結果としてTCR951に書き込まれる値は、ソースレジスタにおける値に基づき得る。ソースレジスタのビットの一部分を、TCRに書き込む対象の値として用いることができる。ソースレジスタのビットの別の部分を保存マスク更新マスクの逆として用いることができる。保存マスクにおいてゼロを値を備えた各ビットは、更新値からの値によって更新された、TCRにおける値を有する一方、保存マスクにおいて1の値を備えた各ビットは、その先行値として保存されたTCRにおける値を有する。TRNXSET命令は、何れの特権レベルでも実行することが可能であるしかし、通常、CPL3において、又は、トランザクションアウェアな特定のトラップハンドラにおいてのみ用いられるものとする。トランザクション内のアドレス監視をオフにしAMT更新をオフにし、その後、監視をオンにして、特定のメモリアドレスをAMTに監視させることなく特定のメモリアドレスのアクセスを可能にするために、TRNXSET命令を用いることも可能である。ブロックの障害につながることなくヘッドトークンの概念を投機的ブロックに渡すことが可能であるように投機的マルチスレッドマルチスカラ実行を実現するためにこのことは重要である。AMT及びAUTをクリアし、TCR951をディセーブル及び更新なしにセットすることによって、トランザクションの障害を強制するために、TRNXSET命令を用いることも可能である。少なくとも一実施例の場合、TRNXCMT命令の実行によって、プロセッサ904にトランザクションステータスレジスタ952TSRの値を検査させることができる。トランザクション障害ビットがセットされていない場合、TRNXCMT命令の実行によって、アトミックに実行されているようにみえるようにメモリ902に対して、AUT108からのバッファリングされたメモリ更新をプロセッサ904に行おうとさせることができる。TRNXCMT命令の実行は、AMT106及びAUT108をプロセッサ904にクリアさせることができる。前述の実行は、トランザクション制御レジスタTCR951を全てゼロの値にクリアすることもできる。AUT108からのバッファリングされた更新を首尾良く行ったかを示すための値をTRNXCMT命令は、ソースレジスタに戻すことができる。更新を行うことが可能でなく、その代わりに、更新が廃棄された場合、プロセッサ904は、ゼロの値でソースレジスタを更新することができる。更新が行われた場合、プロセッサ904は、ソースレジスタを非ゼロ値で更新することができる。AUT108が空きの場合、少なくとも1つの実施例の場合、コミットは首尾良く行われたとみなすことができ、非ゼロ値をソースレジスタに戻すことができる。TRNXRD命令の実行は、トランザクション制御レジスタTCR951及びトランザクションステータスレジスタTSR952の値をデスティネーションレジスタに、プロセッサ904に読み出させることができる。少なくとも1つの実施例の場合、トランザクション制御レジスタ951の値を、特定の固定量だけ左シフトさせ、トランザクションステータスレジスタ951の値とのORをとって、デスティネーションレジスタに書き込まれる値を生成する。少なくとも1つの実施例の場合、TRNXOK命令の実行は、トランザクションステータスレジスタのトランザクショントラップビットビット5にゼロの値を、プロセッサ904に書き込ませる。トランザクショントラップビットがセットされると、アトミックブロックの実行中にトラップが行われた場合に、トラップハンドラは、誤差の強制を回避することができる。すなわち、TRNXOK命令を用いることにより、かつ、TCR951に特定のビットをセットすることにより、プログラマは、トラップハンドリング中にAUT/AMTを更新するか否かを明示的に制御する。デフォールトによって、オフの間、トラップを行うことによってAMT106テーブル及びAUT108テーブルが更新されるようにプロセッサ904を構成することができる。前述のデフォールト動作の場合、アトミックブロック中に行われるトラップによってトランザクションが終結し、AMT106及びAUT108が静止する。トラップが戻ると、トランザクションには障害が生じ、中間状態を廃棄させる。しかし、前述のデフォールト動作は、TRNXOK命令によって無効にされ得る。それによって、アトミックブロックの実行中にトラップが行われた場合にトランザクション障害を強制することをトラップハンドラが回避することが可能になり、アトミックブロックの実行中に生じるトラップ又は例外の処理にわたってAMT106及びAUT108の状態が持続することが可能になる。前述の実施例では、トラップが戻った場合、トランザクションに障害は生じず、アトミックブロックの実行は、トラップ又は例外が生じた時点に存在した厳密なプロセッサ状態から再開し得る。少なくとも1つの実施例の場合、TRNXOK命令の動作は、トラップハンドラが作業をトランザクションの一部として実行することを可能にする。TCR951の現在値によって示された場合、AMT106及びAUT108のテーブルをトラップ処理中に更新することができる。よって、少なくとも1つの実施例の場合、少なくとも一部の種類のトラップ及び例外は、アトミックブロック内から処理することができる。プロセッサ904の少なくとも1つの実施例は、アトミックブロックにわたる単一ステッピングを可能にし得る。このことは、AMT106及びAUT108の値を維持しながら、アトミックブロック外部から単一ステップデバッガを実行することを可能にする。この効果として、プログラマは、本発明の少なくとも1つの実施例によれば、アトミックブロックにわたってシングルステップし、各命令の最後におけるアークテクチャ状態をみることができる。前述の手法は、ソフトウェアデバッグの従来の手法をアトミックブロック内で用いることを可能にする。この特徴は、アトミックブロックの命令の実行中に中間状態が未定義である他の手法と対照的である。前述の手法の場合、中間状態は、トラップを処理することができるか、又はシングルステップを行うことができる前にコミット若しくは廃棄される。少なくとも1つの他の実施例の場合、TRNXOK命令は、トラップハンドラが作業をトランザクションの一部として行うことを可能にし得るが、トラップハンドラは、アトミックブロック外部から、AMT106テーブル及びAUT108テーブルをバイパスして、メモリとの間で直接、読み出し、書き込むことができる。AMT106及びAUT108をバイパスするか否かは、TCR951の値によって示すことができる。前述の手法は、トラップハンドラがアトミックブロック外部にある間に実行することを可能にする。要約すれば、投機的スレッドにおける命令ブロックをトランザクションブロックとして区分し、更新がバッファリングされ、後に廃棄されるか、又は後にアトミックに実行されるようにハードウェアに実行させることを可能にする命令セット拡張組として実現することができる。上記拡張は、外部更新を検出してメモリ依存関係を検出するようメモリアドレス読み出しを監視するようにすることもできる。前述の拡張はよって、ソフトウェアが投機的スレッド実行を試行することを可能にすることができる。このハードウェアは、投機的スレッドの効率的な実行が、広範囲の投機的スレッド化モデルを可能にするためのサポートを提供する。前述の命令をサポートするプロセッサ図7に示すプロセッサ904などには、投機的トランザクションが首尾良く行われることの何らかの保証を備えることが必ずしも要求されない。その代わりに、ハードウェアは、障害をソフトウェアに正しく通知する限り、トランザクションを処理できなくてもよい。図6は、トランザクションブロックの実行に障害が生じたと判定するための機構の少なくとも1つの実施例を示すデータフロー図である。図6は、2つの協調型スレッドスレッドA125及びスレッドB126を示す。当然、図6に示す機構は、何れかの数Yの協調型スレッドY>2に用いることができることを当業者は認識するであろう。図6は、第1の時間t1第1の協調型スレッド125が、アトミックブロック602の実行を開始するを示す。時間t2での、アトミックブロック602の実行中に、第1のスレッド125は、特定のアドレスのメモリ読み出し命令を実行する。メモリアドレス000Aとして図6に示すアドレスが、命令が実行される時間t2においてAMT106に入力される。図6は、時間t3で、第2のスレッドスレッドB126が、第1のスレッドによって読み出されたメモリアドレスに対する書き込みを実行する。第2のスレッドによる更新は、第1のスレッドがメモリアドレスを読み出した後に、かつ、第1のスレッドスレッドA125が実行を完了する前に生じる。前述の、アトミックブロックの実行中に第1のスレッドによって既に読み出されているアドレスへの第2の協調型スレッドによる書き込みの試行は、ハードウェアによって認識される。AMT106におけるアドレスの1つに対する外部書き込みとして認識されるからである。前述のイベントは、アトミックブロック602の実行に障害が生じたことを示すよう非同期イベントを引き起こし得る。図6に示すデータフロー図は、アトミックブロックの実行中の障害の一インスタンスのみを示す。先行して読み出されたメモリアドレスに対する外部書き込み以外の他のイベントによって、アトミックブロックの実行に障害が生じることがあり得る。前述のイベントの1つとして、例えば、テーブルフル、又はAMT106若しくはAUT108のオーバフローがある。前述の別のイベントとして、例えば、AUT108における書き込み後読み出しRAW違反がある。コヒーレンシ衝突等などの他の障害状態も実現することができる。アトミックブロックの実行に障害が生じたことをソフトウェアに通知するための種々の機構を利用することができる。アトミックブロックの障害を生じさせ得る何れかのイベントの場合、前述のイベントは、割り込みなどの非同期イールドイベントyieldeventとしてスレッドユニット例えば、図2のスレッドユニット104などによって通知することができる。少なくとも1つの実施例の場合、障害イベントはユーザレベル割り込みを引き起こすことができる。トランザクション実行の障害を示すためのユーザレベル割り込みを実現する1つのやり方は、本明細書及び特許請求の範囲では、ユーザレベルフライ級割り込み処理として表す。前述の機構は、特定のトリガイベントを示すことができるチャネルを含み得る。トリガイベントはシナリオとして表すことができる。トリガシナリオは、アーキテクチャ的に定義された1つ又は複数のイベント組であり得る。あるいは、トリガシナリオは、ユーザ定義された1つ又は複数のイベント組であり得る。チャネルに規定されたトリガシナリオを検出すると、制御をユーザレベルハンドラルーチンに移すことができる。前述のユーザレベルフライ級割り込み処理機構の少なくとも1つの実施例の更なる説明は、Aprogrammableeventdrivenyieldmechanismwhichmayactivateservicethreadsと題する同時係属中の特許出願代理人整理番号P14912Xで見つけることができる。図7に示すプロセッサ実施例904の場合、本明細書及び特許請求の範囲記載のトランザクション実行手法の1つ又は複数の実施例をサポートするための1つ又は複数のシナリオを定義することができる。少なくとも1つの実施例の場合、TSR952の内容が変わると割り込みが生成されるようなシナリオステータス更新シナリオを定義することができる。すなわち、TSR952の内容が、特定のやり方で更新されると、割り込みを生成することができる。ステータス更新シナリオは、トランザクションステータスレジスタTSRをマスクによって監視することによって実現することができる。ステータス更新シナリオはよって、TSRに施されるマスクに関連付けることができる。マスクのAND演算、及びTSRが非ゼロ値をもたらし、プロセッサがリングレベル3にある場合、シナリオは、ユーザレベルのイベントハンドラをトリガし得る。トランザクションに障害が生じた旨をTCR952が示す場合に、ステータス更新シナリオに基づいた割り込みを生成することができるようにマスクを定義することができる。よって、障害をソフトウェアに正しく通知する限り、図7に示すプロセッサ904などのプロセッサがトランザクションを処理できなくてもよいことを上記説明は示す。すなわち、前述のハードウェア手法に基づいて、アトミックブロックが首尾良く実行されることをプログラマは保証されない。少なくとも1つの実施例の場合、他の協調型スレッドからの競合なしでアトミックブロックが実行を完了することを確実にするために、必要な場合、1つ又は複数のユーザレベルソフトウェア命令をプログラマが用いることができるように更なる機能がプロセッサ904によって提供される。前述の更なる機能は、本明細書及び特許請求の範囲では、ストップザワールド機能として表す。多数のメモリ命令例えば、ロード及び/記憶命令をアトミックブロックが含んでいてもアトミックブロック実行を確実にするためにストップザワールド機能を利用することができる。他のトランザクションとアトミックブロックが常に衝突してもアトミックブロック実行を確実にするためにストップザワールド機能を利用することもできる。一般に、そのソフトウェアが前述の命令表1参照を用いて投機的コードブロックを実行しようとし、有限の資源限度の理由で、又は、反復的メモリ相互関係違反の理由で、首尾良い実行の可能性が低いと判定した場合にストップザワールドをソフトウェアで利用することができる。ソフトウェアは、投機的スレッド化ハードウェアを用いることなくストップザワールドプログラミング抽象化を起動させることができる。AMT106やAUT108などの論理構造に依存するのでなく、アトミックブロックの実行中に他の協調型スレッド全てを停止することによってアトミック性を保証するようユーザレベル割り込みを利用するソフトウェア層ライブラリやランタイムルーチンなどによってストップザワールドを提供することができる。ストップザワールド機能は、プロセッサ904によってサポートされる2つの割り込みシナリオを利用することができる。ストップザワールドを実現するよう利用することができる第1のシナリオは、外部更新シナリオである。すなわち、上記シナリオは、外部更新を求めて、特定のメモリアドレスを監視し、前述の更新が生じた場合に割り込みを生成するための機能を提供する。外部更新は、メモリアドレスにおける値が別の協調型スレッドによって書き込まれたことを意味するものと理解し得る。よって、下にあるプログラミングモデルの実現における同期化のために他の協調型スレッド全てを一スレッドが割り込む機構を外部更新シナリオは提供することができる。より早い投機的タスクが完了しており、投機的タスクが非投機的になるよう移行することが可能である状態になった時点で投機的タスクが通知されることが可能であるようにこの同じシナリオを用いることもできる。ストップザワールドを実現するよう利用することができる第2のシナリオは、特権から復帰のシナリオである。第2のシナリオは、トラップ/例外/割り込みハンドラからユーザコードに制御が戻った時点でユーザハンドラを呼び出すというものである。上記シナリオは、リングレベル3への移行が生じた時点を検出し、ユーザレベルハンドラを呼び出す。前述のシナリオは基本的には、トラップ/例外/割り込みハンドラからリングレベル3に制御が戻る都度、ユーザレベルハンドラが呼び出されることを可能にする。このスレッドが同期化されるべきソフトウェアをその協調型スレッドが現在実行しているかをスレッドが検査することをこのシナリオは可能にする。スレッドがハンドラにあったか、又は、アクティブにスケジューリングされていなかった状態で協調型スレッドが同期化されていた場合にこのことは生じ得る。前述の2つのシナリオを利用して、停止協調型スレッドからの衝突なしで特定の協調型スレッドがアトミックブロックを実行することができるようにプログラムは他の協調型スレッド全てを停止することができる。ストップザワールドは、前述の更なるハードウェア構造106、108、状態951、952、及び命令表1参照本明細書及び特許請求の範囲では、ハードウェア実施例として表すなしでトランザクション実行を実現する別のやり方である。前述の手法は併せて用いることができる。アトミックであるという意味論によって実行するコードブロックが存在しているという概念をソフトウェアプログラムが可能にするプログラミングモデルが非常に望ましいことがあり得る。前述のハードウェア手法の実施例によってトランザクション実行に障害が生じた場合にプログラミング意味論を維持するためにストップザワールドを用いることができる。前述の、外部更新シナリオ、及びハンドラからの復帰のシナリオを用いて、ストップザワールド挙動を実現することが可能である。そうするために、アトミックブロックを実行したいスレッドは、同期化に用いる所定のメモリ位置との交換を行うことができる。交換によって、メモリ位置にビジー値を書き込むことができ、先行値がアイドル値であったことを確認することができる。先行値がアイドルでなかった場合、アイドル値が検出されるまでスレッドを繰り返すことができる。協調型スレッドは全て、この同期化位置を監視するための手法を有し得る。少なくとも1つの実施例の場合、各協調型スレッドは、アクティブな外部更新シナリオをチャネル内に有し得るので、自分であるシナリオの状態に応答して割り込みが生成される。少なくとも1つの実施例の場合、ビジー値が同期化位置に書き込まれた場合、シナリオは充足され、ユーザレベル割り込みは、適宜、他の協調型スレッド全てについて生成される別の実施例の場合、ユーザレベル割り込み機構ではなく、メモリインタフェースを通るメッセージを介して、同様な機能を実現することが可能である。協調型スレッド毎の関連したイベントハンドラは、同期化位置における値がアイドル値に戻されるまで、スピンロックやその他の待ちモードに協調型スレッドを移させることができる。全協調型スレッドは更に、アクティブなリングレベル3への復帰シナリオをチャネルにおいて有し得る。トラップ/例外/割り込みハンドラからユーザ特権レベルに制御が戻ると、協調型スレッドはよって、中断することができ、割り込みハンドラを呼び出すことができる。シナリオを充足すると、割り込みを生成することができる。関連した割り込みハンドラは、協調型スレッドに、同期化位置及びスピンロックを確認させるか、又は他の待ちモードによって待たせることができる同期化位置における値がアイドルでない場合。有限時間の間待った後、他の協調型スレッド全てが同期化イベントを観察し、実行をストールする時間を与えるために、ストップザワールドを起動させたスレッドは次いで、アトミックブロックを実行することが可能である。アトミックブロックの最後に、スレッドは、協調型スレッド全てが実行し続けることが可能であるようにアイドル値を同期化位置に書き込むことができる。本明細書及び特許請求の範囲記載の機構の実施例は、ハードウェア、ソフトウェア、ファームウェア、又は前述の実現機構の組み合わせで実現することができる。本発明の実施例は、少なくとも1つのプロセッサ、データ記憶システム揮発性及び不揮発性のメモリ及び/又は記憶素子を含む、少なくとも1つの入力装置、及び少なくとも1つの出力装置を備えるプログラム可能なシステム上で実行するコンピュータプログラムとして実現することができる。プログラムコードを入力データに施して、本明細書及び特許請求の範囲記載の機能を行い、出力情報を生成することができる。出力情報は、既知のやり方で1つ又は複数の装置に入力することができる。本出願の目的で、処理システムは、プロセッサ例えば、ディジタル信号プロセッサDSP、マイクロコントローラ、特定用途向集積回路ASICやマイクロプロセッサなどを有する何れかのシステムを含む。プログラムをハイレベルの手続型プログラミング言語又はオブジェクト指向型プログラミング言語で実現して処理システムと通信することができる。プログラムは、所望の場合、アセンブラ言語又はマシン言語で実現することもできる。実際に、本明細書及び特許請求の範囲記載の機構の範囲は、何れかの特定のプログラミング言語に限定されるものでない。いずれにせよ、言語はコンパイラ言語又はインタープリタ言語であり得る。プログラムは、汎用又は専用のプログラム可能な処理システムによって読み取り可能な記憶媒体上又は装置上例えば、ハードディスクドライブ上、リードオンリメモリROM上、CD-ROM装置上、フラッシュメモリ装置上、ディジタル多用途ディスクDVD上やその他の記憶装置上に記憶することができる。処理システムにおけるプロセッサにアクセス可能な命令は、本明細書及び特許請求の範囲記載の手順を行うために記憶媒体又は記憶装置が処理システムによって読み出されると処理システムを構成し、動作させるようにする。本発明の実施例は、処理システムに用いるよう構成されたマシン読み取り可能記憶媒体として実現するものとすることもできる。そうして構成された記憶媒体は、本明細書及び特許請求の範囲記載の機能を行うために特定かつ所定のやり方で処理システムが動作するようにする。前述のタイプの処理システムの例は図7に示す。システム900は、インテル社から入手可能なペンティアム登録商標、ペンティアム登録商標プロ、ペンティアム登録商標II、ペンティアム登録商標III、ペンティアム登録商標4、並びにアイテニアム登録商標及びアイテニアム登録商標IIのマイクロプロセッサに基づいた処理システムを表すが、他のシステム他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するパソコンPCを含むも用いることができる。一実施例では、サンプルシステム900は、マイクロソフト社から入手可能なウィンドウズ登録商標オペレーティングシステムのバージョンを実行することができるが、例えば、他のオペレーティングシステム及びグラフィカルユーザインタフェースも用いることができる。図7は、本願開示の手法を行うことができる処理システム900がメモリシステム940及びプロセッサ904を含み得ることを示す。メモリシステム940は、メモリ902、並びに1つ又は複数のオンチップキャッシュ又はオフチップキャッシュを含み得る。例えば、メモリシステム940は、データキャッシュ942及び/又は命令キャッシュ944を含み得る。メモリシステム940は、プロセッサ904の動作を制御するための命令910及び/又はデータ912を記憶することができる。命令910及び/データ912は、本明細書及び特許請求の範囲記載の手法の何れか又は全てを行うコードを含み得る。メモリシステム940は、メモリの一般化された表現として意図されており、各種のメモリ形態ハードドライブ、CD-ROM、ランダムアクセスメモリRAM、ダイナミックランダムアクセスメモリDRAM、スタティックランダムアクセスメモリSRAM等、並びに、関連した回路を含み得る。図7は、プロセッサ904がフロントエンド920を含み得ることを示す。フロントエンド920はフェッチ及びデコードロジックを含み得る。例えば、複数の論理シーケンスを単一の物理フェッチ/デコードユニット322において実現することができるが、スレッドコンテキスト毎に命令をフェッチするための論理的に別個の次命令ポインタ及びフェッチロジック320を含み得る。フェッチ/デコードユニット322は、前述のTRNXSET、TRNXCMT、TRNXRD及び/TRNXOK命令などの命令をデコードするためのデコーダロジックを含み得る。命令のうちの1つの受け取りに応答して、デコードロジックは、1つ又は複数の信号を実行コア930に送出することができる。これによって、実行コア930は所望の動作を行うことができる。前述の命令それぞれの少なくとも1つの実施例に関連した動作は、表1の記載に関して前述している。図7に示すマルチシーケンサシステム900のSMT実施例の場合、シーケンサの語は、スレッドコンテキストの少なくとも次命令ポインタ及びフェッチロジック320、及び、そのスレッドコンテキストの関連したアーキテクチャ状態の少なくとも一部を包含する。SMTシステム900のシーケンサは対称でなくてよい。例えば、同じ物理コア904の2つのSMTシーケンサは、それぞれが維持するアーキテクチャ状態情報の量において異なり得る。よって、少なくとも一実施例の場合、マルチシーケンサシステム900は、同時マルチスレッド化をサポートする単一コアプロセッサ904である。前述の実施例の場合、各シーケンサは、それ自身の命令次命令ポインタ及びフェッチロジック320、並びに、それ自身のアーキテクチャ状態情報を有するロジカルプロセッサであるが、同じ物理プロセッサコア304はスレッド命令全てを実行する。前述の実施例の場合、論理プロセッサはそれ自身のアーキテクチャ状態バージョンを維持するが、単一のプロセッサコアの実行資源は、同時に実行するスレッド間で共有することができる。図7に示すシステム900の少なくとも1つの別の実施例は、マルチコアプロセッサ例えば、図2に示すプロセッサ200参照に基づく。別々のスレッドの少なくとも一部分の実行が同時に進み得るようにそれぞれが別々のスレッドを実行することができる2つ以上の別個の物理プロセッサ例えば、図2の104-104n参照を前述のシステムは含み得る。各プロセッサは、そのそれぞれのスレッド毎に命令情報をフェッチするための物理的に別個のフェッチユニット322を含む。単一のスレッドを各プロセッサが実行する実施例では、フェッチ/デコードユニット322は、単一の次命令ポインタ及びフェッチロジック320を実現する。しかし、複数のスレッドコンテキストを各プロセッサがサポートする実施例では、フェッチ/デコードユニット322は、別個の次命令ポインタ及びフェッチロジック320を、サポートされるスレッドコンテキスト毎に実現する。プロセッサ904における更なる次命令ポインタ及びフェッチロジック320の任意性は図7の破線で表す。本発明の特定の実施例を示し、説明したが、特許請求の範囲記載の範囲から逸脱しない限り、変更及び修正を行うことが可能であることが当業者には分かる。よって、本発明のそのより広い局面から逸脱しない限り、変更及び修正を行うことが可能であることを当業者は認識するであろう。特許請求の範囲は、本発明の真の範囲内に収まる前述の変更及び修正全てをその範囲内に包含するものとする。"