(57)【特許請求の範囲】
【請求項１】
データアイテムに関連付けられているアドレスを参照するトランザクション内のトランザクション格納処理を実行する実行リソースと、
前記実行リソースに連結されて、前記実行リソースが前記トランザクション格納処理を実行することに呼応して前記データアイテムをバッファリングされたコヒーレンス状態に保持するキャッシュメモリを有するメモリと、
前記キャッシュメモリに関連付けられた制御ロジックと
を備え、
前記トランザクションは、アトミックグループとして実行される命令、処理、マイクロオペレーションのうちのいずれかの一群を含み、
前記キャッシュメモリは、前記データアイテムの少なくとも一部を、前記バッファリングされたコヒーレンス状態に関連付けて保持するキャッシュラインを含み、
前記制御ロジックは、前記制御ロジックが前記キャッシュラインを参照する外部アクセス要求を受信して、前記キャッシュラインが前記バッファリングされたコヒーレンス状態に関連付けられていることに呼応して、ミスレスポンスを提供し、前記バッファリングされたコヒーレンス状態に保持されている前記キャッシュラインを無効コヒーレンス状態に遷移させる
装置。
【請求項２】
前記データアイテムの少なくとも一部を前記バッファリングされたコヒーレンス状態に関連付けて保持する前記キャッシュメモリのキャッシュラインは、前記キャッシュラインが前記バッファリングされたコヒーレンス状態に維持されていることを示す、バッファリングされた状態の値を保持する、前記キャッシュラインと関連付けられた状態エントリを含む請求項１に記載の装置。
【請求項３】
前記キャッシュラインに関連付けられたハードウェアモニタがさらに、前記実行リソースが前記トランザクション格納処理を実行することに呼応して前記キャッシュラインがバッファリングされたことを示す請求項１または２に記載の装置。
【請求項４】
前記制御ロジックは、前記制御ロジックが外部アクセス要求を受信して、前記ハードウェアモニタが前記キャッシュラインのバッファリングを示すことに呼応して、前記外部アクセス要求時のコンフリクトを検出する請求項３に記載の装置。
【請求項５】
前記キャッシュラインに関連付けられたハードウェア読み出しモニタがさらに、前記実行リソースが前記トランザクション内のローカルトランザクション読み出し処理を実行することに呼応して前記キャッシュラインが読み出し監視されていることを示す請求項１から４のいずれか１項に記載の装置。
【請求項６】
前記制御ロジックは、前記制御ロジックが前記キャッシュラインを参照するローカルアクセス要求を受信して、前記キャッシュラインが前記バッファリングされたコヒーレンス状態に関連付けられることに呼応して、ヒットレスポンスを提供する請求項１から５のいずれか１項に記載の装置。
【請求項７】
前記制御ロジックは、前記トランザクションがコミットされたことに呼応して、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させる請求項１から６のいずれか１項に記載の装置。
【請求項８】
前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させることは、前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから前記修正されたコヒーレンス状態への関連付けに直接遷移させることを含む請求項７に記載の装置。
【請求項９】
前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させることは、前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから、中間の、バッファリングされ修正されたコヒーレンス状態へ遷移させて、その後で、前記バッファリングされた状態をクリアして、前記修正されたコヒーレンス状態と関連付けられた前記キャッシュラインを退出させることを含む請求項７に記載の装置。
【請求項１０】
前記制御ロジックは、ユーザレベルの命令に呼応して前記キャッシュラインと関連付けられるよう前記バッファリングされたコヒーレンス状態にアクセスして、
前記ユーザレベルの命令は、コヒーレンス状態設定命令、コヒーレンス状態クリア命令、およびコヒーレンス状態テスト命令からなる群から選択される請求項１から９のいずれか１項に記載の装置。
【請求項１１】
データアイテムに関連付けられているアドレスを参照するトランザクション内のトランザクション格納処理の実行に呼応して、前記データアイテムを参照してバッファリング用に選択される前記データアイテムの少なくとも一部を、キャッシュラインにおいてバッファリングされたコヒーレンス状態に保持するキャッシュメモリと、
前記キャッシュメモリに関連付けられて、前記キャッシュラインが前記バッファリングされたコヒーレンス状態に保持されている場合に、前記キャッシュラインと関連付けられている外部アクセス要求を受信することに呼応して、ミスレスポンスを提供し、前記バッファリングされたコヒーレンス状態に保持されている前記キャッシュラインを無効コヒーレンス状態に遷移させる制御ロジックと
を備えるプロセッサ。
【請求項１２】
前記格納処理に関連付けられる第１の処理エレメントと、前記格納処理に関連付けられていない第２の処理エレメントとさらに備え、
前記キャッシュラインに関連付けられている前記外部アクセス要求は、前記第２の処理エレメントに関連付けられている前記データアイテムにアクセスするアクセス要求を含む請求項１１に記載のプロセッサ。
【請求項１３】
デコーダロジックをさらに備え、
バッファリング用に選択される前記格納処理は、前記デコーダロジックが、前記格納処理を、バッファリング用に選択されるトランザクション格納処理を含むものとして認識することを含む請求項１１または１２に記載のプロセッサ。
【請求項１４】
バッファリングの選択モードを示す選択値と、バッファリングの非選択モードを示す非選択値とを保持するユーザアクセス可能制御レジスタをさらに備える請求項１１から１３のいずれか１項に記載のプロセッサ。
【請求項１５】
バッファリング用に選択される前記格納処理は、前記ユーザアクセス可能制御レジスタが、前記選択値と、選択基準に整合する前記格納処理に関連付けられた基準とを保持すること、または、前記ユーザアクセス可能制御レジスタが前記非選択値を保持することを含む請求項１４に記載のプロセッサ。
【請求項１６】
前記キャッシュラインに関連付けられているコヒーレンス状態エントリをさらに備え、
前記キャッシュラインが前記バッファリングされたコヒーレンス状態に保持されることは、前記状態エントリがバッファリングされたコヒーレンス値を保持することを含む請求項１１から１５のいずれか１項に記載のプロセッサ。
【請求項１７】
キャッシュライン内のデータアイテムの少なくとも一部を、前記データアイテムがトランザクション内でトランザクション的にアクセスされることに呼応して、バッファリングされたコヒーレンス状態に関連付けて保持する前記キャッシュメモリと、
前記キャッシュメモリに関連付けられて、前記キャッシュラインを、前記トランザクションがコミットされることに呼応して、前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させる前記制御ロジックと
を備える請求項１から１０のいずれか１項に記載の装置。
【請求項１８】
バッファリングされたコヒーレンス状態に関連付けられるキャッシュラインは、前記キャッシュラインに関連付けられてバッファリングされたコヒーレンス値を保持するコヒーレンスエントリを含む請求項１７に記載の装置。
【請求項１９】
前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させることは、前記バッファリングされたコヒーレンス値を保持することから、修正されたコヒーレンス値を保持するように前記コヒーレンスエントリを更新することを含む請求項１８に記載の装置。
【請求項２０】
前記バッファリングされたコヒーレンス値を保持することから、修正されたコヒーレンス値を保持するように前記コヒーレンスエントリを更新することは、前記コヒーレンスエントリを、前記バッファリングされたコヒーレンス値を保持することから、バッファリングされ修正された中間コヒーレンス値を保持することへと更新して、その後で、前記バッファリングされたコヒーレンス値を前記バッファリングされ修正された中間コヒーレンス値からクリアして、前記修正されたコヒーレンス値を形成することを含む請求項１９に記載の装置。
【請求項２１】
前記コヒーレンスエントリは、ビットベクトルを含み、
前記コヒーレンスエントリを、前記バッファリングされたコヒーレンス値を保持することから、バッファリングされ修正された中間コヒーレンス値を保持することへと更新して、その後で、前記バッファリングされたコヒーレンス値を前記バッファリングされ修正された中間コヒーレンス値からクリアして、前記修正されたコヒーレンス値を退出することは、前記コヒーレンスエントリの修正されたビットを設定することで、前記バッファリングされたコヒーレンス値を保持することから、前記バッファリングされ修正された中間コヒーレンス値を保持することへと前記コヒーレンスエントリを更新して、その後で、前記コヒーレンスエントリのバッファリングされたビットをクリアして、前記修正されたコヒーレンス値についての前記修正されたビットセットを退出することを含む請求項２０に記載の装置。
【請求項２２】
前記トランザクションのコミットは、ユーザレベルのトランザクションコミット命令が実行されることに呼応して行われる請求項１７から２１のいずれか１項に記載の装置。
【請求項２３】
前記トランザクションのコミットは、トランザクション関連のコンフリクトが検出されない間に、前記トランザクションの終了に達することに呼応して行われる請求項１７から２２のいずれか１項に記載の装置。
【請求項２４】
データアイテムに関連付けられているアドレスを参照するトランザクション内において、前記データアイテムの少なくとも一部を、前記データアイテムがトランザクション的に書き込まれることに呼応してバッファリングされた状態に保持するラインを含むメモリと、前記メモリに連結されて、前記バッファリングされた状態の前記ラインに対するローカルアクセス要求に呼応してヒットレスポンスを提供し、前記バッファリングされた状態の前記ラインに対する非ローカルのアクセス要求に呼応してミスレスポンスを提供する制御ロジックとを有するプロセッサと、
前記プロセッサに連結された入出力（Ｉ／Ｏ）デバイスと
を備え、
前記制御ロジックはさらに、前記バッファリングされた状態の前記ラインに対する前記非ローカルのアクセス要求に呼応して、前記ラインを前記バッファリングされた状態から無効状態に遷移させる
システム。
【請求項２５】
前記制御ロジックはさらに、前記ラインに対するコミット処理の実行に呼応して、前記ラインを前記バッファリングされた状態から修正された状態に遷移させる請求項２４に記載のシステム。
【請求項２６】
前記プロセッサはさらに、前記データアイテムがトランザクション的に書き込まれることに呼応して前記ラインが書き込み監視されていることを示すよう設定されるハードウェア書き込みモニタと、前記データアイテムがトランザクション的に読み出されることに呼応して前記ラインが読み出し監視されていることを示すハードウェア読み出しモニタとを有する請求項２４または２５に記載のシステム。
【請求項２７】
データアイテムに関連付けられているアドレスを参照するトランザクション内のトランザクション格納に遭遇する段階と、
前記トランザクション格納に遭遇することに呼応して、前記データアイテムと関連付けられている前記アドレスに関連付けられているキャッシュメモリ内のキャッシュラインに対して、前記データアイテムの少なくとも一部のバッファリングされた格納を実行し、前記キャッシュラインに対応するコヒーレンス状態エントリを、バッファリングされた状態の値に更新して、前記キャッシュラインに保持されている前記データアイテムの少なくとも前記一部を前記バッファリングされた状態に関連付ける段階と、
前記データアイテムが前記バッファリングされた状態に関連付けられることに呼応して、前記データアイテムへのローカルアクセスに対してヒットレスポンスを提供し、前記データアイテムへの外部アクセスに対してミスレスポンスを提供する段階と、
前記データアイテムが前記バッファリングされた状態に関連付けられ、前記データアイテムに対する前記外部アクセスに対してミスレスポンスを提供することに呼応して、前記コヒーレンス状態エントリを無効状態の値に更新して、前記キャッシュラインに保持されている前記データアイテムの少なくとも前記一部を無効状態に関連付ける段階と
を備え、
前記トランザクションは、アトミックグループとして実行される命令、処理、マイクロオペレーションのうちのいずれかの一群を含む
方法。
【請求項２８】
前記トランザクション格納が前記アドレスを参照することは、プロセッサのデコーダロジックにより認識可能なオペレーションコード（オペコード）が、前記トランザクション格納をバッファリングされた格納として実行するべきであることを示すことを含む請求項２７に記載の方法。
【請求項２９】
前記データアイテムの少なくとも前記一部の前記バッファリングされた格納を前記キャッシュラインに対して実行することに呼応して、前記キャッシュラインに関連付けられている書き込みモニタを監視されている状態に更新して前記キャッシュラインが書き込み監視されていることを示す段階をさらに備える請求項２７または２８に記載の方法。
【請求項３０】
前記データアイテムが前記バッファリングされた状態に関連付けられ、前記データアイテムに関するコミットを実行することに呼応して、前記コヒーレンス状態エントリを修正された状態の値に更新して、前記キャッシュラインに保持されている前記データアイテムの少なくとも前記一部を修正された状態に関連付ける段階をさらに備える請求項２７から２９のいずれか１項に記載の方法。
【請求項３１】
前記コヒーレンス状態エントリを修正された状態の値に更新して、前記キャッシュラインに保持されている前記データアイテムの少なくとも前記一部を修正された状態に関連付ける段階は、
前記コヒーレンス状態エントリを修正されたバッファリングされた状態の値に更新して、その後で、前記バッファリングされた状態の値を前記修正されバッファリングされた状態の値からクリアして、前記修正された状態の値を退出させる段階を有する請求項３０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ実行分野に係り、より詳しくは、一群の命令の実行に係る。
【背景技術】
【０００２】
半導体処理およびロジック設計が進化することにより、集積回路デバイスに設けられてよいロジックの量が増えてもよくなっている。この結果、コンピュータシステム構成は、システム内の単一の、または複数の集積回路から、個々の集積回路に設けられる複数のコアおよび複数の論理プロセッサへと進化した。プロセッサまたは集積回路は通常、単一のプロセッサダイを含み、ここでプロセッサダイは任意の数のコアまたは論理プロセッサを含むことができる。
【０００３】
集積回路上のコアおよび論理プロセッサの数が増加し続けていることにより、より多くのソフトウェアスレッドをコンカレントに実行することができるようになった。しかし、同時に実行可能なソフトウェアスレッドの数が増えたので、ソフトウェアスレッド間で共有されるデータの同期が難しくなってきている。マルチコアまたは複数の論理プロセッサシステムにおける共有データにアクセスするためによく利用されている解決法は、ロックを利用して、共有データに対する複数のアクセスに対して相互排除を保証する、というものである。しかし、複数のソフトウェアスレッドを実行する機能が増加の一途を辿っているために、誤ったコンテンションになったり、実行がシリアル化されてしまったりする可能性もある。
【０００４】
例えば、共有データを保持しているハッシュテーブルを例にとる。ロックシステムを利用することで、プログラマは、ハッシュテーブル全体をロックして、１つのスレッドがハッシュテーブル全体にアクセスできるようにする。しかしこうすると、他のスレッドは、ロックが解除されるまでハッシュテーブルのエントリいずれにもアクセスすることができないため、これら他のスレッドのスループットおよび実行に悪影響がでる可能性がある。この代わりに、ハッシュテーブルの各エントリをロックする、という方法もある。しかしいずれにしても、この単純な例から大きなスケーラブルプログラムのことを推定すると、ロックのコンテンションの複雑性、シリアル化、細かい粒度の同期、およびデッドロックの回避がプログラマにとっては非常に大きな負担となることは明らかである。
【０００５】
別の最近のデータ同期技術に、トランザクションメモリ（ＴＭ）の利用がある。多くの場合トランザクションの実行には、複数のマイクロオペレーション、処理、または命令のグループを実行することが含まれる。上述した例では、両方のスレッドがハッシュテーブル内で実行され、それらのメモリアクセスが監視／トレースされている。両方のスレッドが同じエントリに／を、アクセス／変更するときには、コンフリクトの解決を実行して、データを有効にしておく必要がある。あるタイプのトランザクションの実行には、ソフトウェアトランザクションメモリ（ＳＴＭ）が含まれ、この方法では、メモリアクセスのトレース、コンフリクトの解決、アボートタスク、およびその他のトランザクションタスクが、しばしばハードウェアの助けを借りずにソフトウェアで実行される。
【０００６】
別のタイプのトランザクションの実行には、ハードウェアトランザクションメモリ（ＨＴＭ）システムが含まれ、この方法では、ハードウェアを利用することにより、アクセストレース、コンフリクトの解決、その他のトランザクションタスクがサポートされている。今までのＨＴＭは、メモリの位置へのバッファトランザクション書き込みに別個の書き込みバッファ構造を利用していた。しかし、別個のバッファの追加により、潜在的にプロセッサのコストおよび複雑性が増すことが想定され、ひいてはトランザクションコミット処理が遅くなることが考えられる。
【０００７】
添付図面を参照しながら本発明を説明するが、添付図面は例示であって限定は意図しない。
【図面の簡単な説明】
【０００８】
【図１】複数のソフトウェアスレッドをコンカレントに実行可能な複数の処理エレメントを含むプロセッサの一実施形態を示す。
【図２】キャッシュメモリに保持されているデータアイテムにコヒーレンス状態を関連付ける一実施形態を示す。
【図３】バッファ状態を含む状態遷移ダイアグラムの一実施形態を示す。
【図４】アクセス処理をバッファリングするかを決定する方法を示すフローダイアグラムの一実施形態を示す。
【図５】バッファリングされたデータをサポートする方法を示すフローダイアグラムの一実施形態を示す。
【発明を実施するための形態】
【０００９】
以下の記載において、トランザクション実行の特定のハードウェア構造、アクセスモニタの特定のタイプおよび実装例、特定のキャッシュ実装、特定のタイプのキャッシュコヒーレンスモデル、特定のデータ粒度、および特定のタイプのメモリアクセスおよび位置等の複数の詳細を示すことで、本発明の完全な理解を提供している。しかし、当業者にはこれら特定の詳細が必ずしも本発明を実行に必要ではないことが明らかである。また、公知のコンポーネントまたは方法については（例えばソフトウェアのトランザクションの符号化、トランザクションのデマケーション、特定の、その他のマルチコアおよびマルチスレッドのプロセッサアーキテクチャ、特定のコンパイラ方法／実装、および、マイクロプロセッサの特定の処理に関する詳細等）、詳述しないことにより、本発明を不当に曖昧にしないようにしている箇所もある。
【００１０】
ここに記載する方法および装置は、キャッシュコヒーレンスを拡張してバッファリングされたデータをサポートするものである。具体的には、キャッシュコヒーレンスの拡張は、ハードウェアトランザクションメモリシステムに関した説明を行う。しかしこれに限られず、バッファリングされたデータをサポートする方法および装置は、バッファリングされたデータをサポートする任意の実行スタイルについて実装可能である。
【００１１】
図１は、複数のスレッドをコンカレントに実行可能なプロセッサの一実施形態を示す。プロセッサ１００は、ハードウェアトランザクション実行のハードウェアサポートを含みうる。ハードウェアトランザクション実行と組み合わせた実装あるいは別個の実装のいずれにおいても、プロセッサ１００は、ソフトウェアトランザクションメモリ（ＳＴＭ）のハードウェアアクセラレーション、ＳＴＭの別個の実行、またはこれらの組み合わせ（例えばハイブリッドトランザクションメモリ（ＴＭ）システム等）に対するハードウェアサポートを提供することができる。プロセッサ１００には、任意のプロセッサ（マイクロプロセッサ、エンべデッドプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサ、その他の、コードを実行するためのデバイス等）が含まれてよい。図示されているプロセッサ１００は、複数の処理エレメントを含む。
【００１２】
一実施形態では、処理エレメントとは、スレッドユニット、処理ユニット、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、および／または、プロセッサの状態（実行状態またはアーキテクチャ状態等）を保持することのできる任意の他のエレメントのことである。つまり、一実施形態における処理エレメントは、コード（例えばソフトウェアスレッド、オペレーティングシステム、アプリケーション、その他のコード）と独立して関連付けることのできる任意のハードウェアのことである。通常、物理プロセッサとは、任意の数の他の処理エレメント（例えばコアまたはハードウェアスレッド）を潜在的に含む集積回路のことである。
【００１３】
コアとは、しばしば、各々が独立して維持されるアーキテクチャ状態が少なくとも一部の専用実行リソースと関連付けられるような、独立したアーキテクチャ状態を維持することのできる集積回路上に配置されるロジックのことである。コアに対して、ハードウェアスレッドとは、通常、独立して維持されるアーキテクチャ状態が実行リソースに対するアクセスを共有するような、独立したアーキテクチャ状態を維持することのできる集積回路上に配置される任意のロジックのことを示す。ここから分かるように、一定のリソースが共有され、他のリソースをアーキテクチャ状態専用とする場合には、ハードウェアスレッドとコアとの間の名前における境界線が重なる。しかしオペレーティングシステムは、各論理プロセッサ上で個別に処理をスケジュールするために、コアおよびハードウェアスレッドをそれぞれ個別の論理プロセッサとしてみる場合が多い。
【００１４】
図１に示す物理プロセッサ１００は、コア１０１および１０２という２つのコアを含み、これらコアは、高レベルのキャッシュ１１０へのアクセスを共有している。プロセッサ１００は非対称コア（つまり、それぞれが異なる構成、機能ユニット、および／または、ロジックを有するコアのこと）を含むこともできるが、示されているのは対称コアである。この結果、コア１０１と同一であるとして示されているコア１０２については詳述を避けることで記載の繰り返しを避ける。加えて、コア１０１は、２つのハードウェアスレッド１０１ａおよび１０１ｂを含み、コア１０２も２つのハードウェアスレッド１０２ａおよび１０２ｂを含む。従って、オペレーティングシステム等のソフトウェア実体は、プロセッサ１００を、潜在的に４つの別個のプロセッサ（つまり、４つのソフトウェアスレッドをコンカレントに実行可能な４つの論理プロセッサまたは処理エレメント）としてみることができる。
【００１５】
ここで第１のスレッドは、アーキテクチャ状態レジスタ１０１ａと関連付けられており、第２のスレッドは、アーキテクチャ状態レジスタ１０１ｂと関連付けられており、第３のスレッドは、アーキテクチャ状態レジスタ１０２ａと関連付けられており、第４のスレッドは、アーキテクチャ状態レジスタ１０２ｂと関連付けられている。アーキテクチャ状態レジスタ１０１ａは、アーキテクチャ状態レジスタ１０１ｂに複製されており、個々のアーキテクチャ状態／コンテキストを論理プロセッサ１０１ａおよび論理プロセッサ１０１ｂに格納できるようになっている。他の、これより小さいリソース（リネーム割り当てロジック１３０の命令ポインタおよびリネームロジック等）も、スレッド１０１ａおよび１０１ｂに複製されてよい。一部のリソース（例えば、リオーダ／リタイヤユニット１３５のリオーダバッファ、ＩＬＴＢ１２０、ロード／格納バッファ、およびキュー）も、分割により共有可能である。他のリソース（例えば汎用内部レジスタ、ページテーブルベースレジスタ、低レベルデータキャッシュおよびデータＴＬＢ１１５、実行ユニット（１または複数）１４０、およびアウトオブオーダユニット１３５の部分等）も潜在的に完全に共有することができる。
【００１６】
プロセッサ１００は多くの場合、完全に共有される、分割により共有される、または処理エレメント専用であってよい、他のリソースを含む。図１では、プロセッサの例示的な機能ユニット／リソースを含む純粋に例示的なプロセッサの一実施形態が示されている。プロセッサは、これら機能ユニットの任意のものを含んでも含まなくてもよく、且つ、図示されていない任意の他の公知の機能ユニット、ロジック、またはファームウェアを含むこともできる。
【００１７】
図示されているように、プロセッサ１００は、システムメモリ１７５、チップセット、ノースブリッジ、その他の集積回路等の、プロセッサ１００の外部のデバイスと通信するためにバスインタフェースモジュール１０５を含む。メモリ１７５は、プロセッサ１００専用であっても、システム内の他のデバイスと共有されてもよい。より高レベルまたはさらに外のキャッシュ１１０は、高レベルのキャッシュ１１０から最近フェッチされたエレメントをキャッシュする。（より）高レベルのまたはさらに外の、という用語は、実行ユニット以上の、またはこれらから離れる方向のキャッシュレベルのことを意味する。一実施形態では、高レベルのキャッシュ１１０は、二次レベルのデータキャッシュである。しかし、高レベルのキャッシュ１１０はこれに限定はされず、命令キャッシュと関連付けられても、命令キャッシュを含んでもよい。最近復号したトレースを格納するためのトレースキャッシュ（命令キャッシュの一種）を、デコーダ１２５の後に連結することもできる。モジュール１２０はさらに、実行する／される分岐を予測する分岐対象バッファ、および、命令用のアドレス変換エントリを格納する命令変換バッファ（Ｉ−ＴＬＢ）をも潜在的に含む。
【００１８】
復号モジュール１２５は、フェッチされたエレメントを復号するフェッチユニット１２０に連結される。一実施形態では、プロセッサ１００は、プロセッサ１００上で実効可能な命令を定義／特定する命令セットアーキテクチャ（ＩＳＡ）と関連付けられている。ここで、ＩＳＡが認識する機械コード命令は、しばしば、実行する命令または処理を参照／特定する、オペコードと称される命令の一部を含む。
【００１９】
一例では、アロケータおよびリネームブロック１３０は、命令処理の結果を格納する、レジスタファイル等のリソースをリザーブするアロケータを含む。しかし、スレッド１０１ａおよび１０１ｂは、潜在的にアウトオブオーダ実行をする機能を有してよく、この場合、アロケータおよびリネームブロック１３０は、命令の結果をトラックするリオーダバッファ等の他のリソースもリザーブする。ユニット１３０は、さらに、プログラム／命令参照レジスタをプロセッサ１００の内部の他のレジスタへリネームするレジスタリネーム部を含んでよい。リオーダ／リタイヤユニット１３５は、上述したリオーダバッファ、ロードバッファ、および格納バッファ等のコンポーネントを含むことで、アウトオブオーダ実行、ひいては、後にアウトオブオーダで実行されるインオーダの命令のリタイヤをサポートする。
【００２０】
スケジューラおよび実行ユニットブロック１４０は、一実施形態では、実行ユニット上に命令／処理をスケジュールするスケジューラユニットを含む。例えば浮動小数点命令は、利用可能な浮動小数点実行ユニットを有する実行ユニットのポート上にスケジュールされる。実行ユニットに関連付けられるレジスタファイルもさらに含められて、情報命令処理の結果を格納する。実行ユニットの例としては、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、格納実行ユニット、およびその他の公知の実行ユニットが含まれる。
【００２１】
（より）低レベルのデータキャッシュおよびデータ変換バッファ（Ｄ−ＴＬＢ）１５０が実行ユニット（一または複数）１４０に連結されている。データキャッシュは、潜在的にメモリコヒーレンス状態に保持される、データオペランド等の、最近利用／処理されたエレメントを格納するものである。Ｄ−ＴＬＢは、最近の仮想／線形アドレスからの物理アドレスへの変換を格納する。具体例では、プロセッサは、物理メモリを複数の仮想ページに分割するページテーブル構造を含んでよい。
【００２２】
一実施形態では、プロセッサ１００は、ハードウェアによるトランザクション実行、ソフトウェアによるトランザクション実行、またはこれらの組み合わせまたはハイブリッドの実行機能を有してよい。ここではコードのクリティカルセクションまたはアトミックセクションとも称されうる「トランザクション」という概念には、アトミックグループとして実行される命令、処理、またはマイクロオペレーションの一群が含まれる。例えば命令または処理は、トランザクションまたはクリティカルセクションの境界を定めるときに利用することができる。一実施形態では、以下で詳述するように、これら命令を、上述したデコーダ等のプロセッサ１００のハードウェアにより認識可能な、命令セットアーキテクチャ（ＩＳＡ）等の一式の命令の一部としてよい。多くの場合、これらの命令は、高レベル言語からハードウェアにより認識可能なアセンブリ言語へとコンパイルされると、デコーダが復号段階において認識するオペレーションコード（オペコード）または命令のその他の部分等を含む。
【００２３】
通常、トランザクションの実行中は、メモリに対する更新は、トランザクションがコミットされるまではグローバルに可視状態とはならない。例えば、ある位置へのトランザクション書き込みは、潜在的にローカルスレッドにとって可視状態であるが、別のスレッドから読み出しされると、書き込みデータは、トランザクション書き込みを含むトランザクションがコミットされるまでは転送されない。トランザクションが未完了である間は、メモリからロードされたり、メモリへ書き込まれたりするデータアイテム／エレメントはトラックされるが、これに関して後述する。ひとたびトランザクションがコミット点に到達し、このトランザクションについてコンフリクトが検知されていない場合には、トランザクションにコミットして、トランザクション中に行われた更新をグローバルに可視状態とする。
【００２４】
しかし未完了である間にトランザクションが無効となった場合には、このトランザクションをアボートして、更新をグローバルに可視状態とすることなく、潜在的に再開する。従って本明細書においてトランザクションが未完了である、というコンセプトは、実行が開始されたが、コミットがまだである、またはアボートされた（つまり未完了状態）トランザクションのことを示す。
【００２５】
ソフトウェアトランザクションメモリ（ＳＴＭ）システムは、多くの場合、ソフトウェア内の、または部分的にソフトウェア内の、アクセスのトラック、コンフリクト解決、その他のトランザクションメモリタスクを行う。一実施形態では、プロセッサ１００は、プログラムコードをコンパイルしてトランザクション実行をサポートするコンパイラを実行することができる。ここでコンパイラは、トランザクションを実行させる処理、呼び出し、関数、その他のコードを挿入することができる。
【００２６】
しばしばコンパイラは、ソーステキスト／コードをターゲットテキスト／コードに変換する、１つのプログラムまたは一式のプログラムを含む。通常は、プログラム／アプリケーションコードのコンパイラによるコンパイルは、複数の段階またはパスで行われ、高レベルプログラミング言語コードから低レベルの機械またはアセンブリ言語コードに変換される。しかし単一のパスを利用するコンパイラも単純なコンパイルには利用することができる。コンパイラは任意の公知のコンパイル技術を利用して任意の公知のコンパイラ処理（語彙解析、前処理、パーズ、セマンティックス解析、コード生成、コード変換、およびコードの最適化）を実行することができる。
【００２７】
より大きなコンパイラは複数の段階を含むことが多く、特に、これらの段階は、２つの汎用段階（つまり、（１）シンタックス処理、セマンティックス処理、および一部の変換／最適化処理が行われるフロントエンド、（２）概して解析、変換、最適化、およびコード生成が行われるバックエンド）に含まれている場合が多い。一部のコンパイラにはミドルエンドと称されるものがあり、これはコンパイラにおいてフロントエンドとバックエンドとの間の境界が曖昧なもののことである。従って、コンパイラの挿入、関連付け、生成その他の処理は、上述した段階またはパスのいずれにおいても行うことができ、且つ、コンパイラの他の公知の段階またはパスにおいて行うこともできる。一例としては、コンパイラが潜在的に、１以上のコンパイル段階にトランザクション処理、呼び出し、関数等を挿入する（例えば、コンパイルのフロントエンド段階における呼び出し／処理の挿入等）ことができ、この後のトランザクションメモリ変換段階において、呼び出し／処理を、より低レベルのコードへ変換することができる。
【００２８】
しかしながら、コンパイラの実行環境および動的または静的な性質にも関らず、一実施形態ではコンパイラが、プログラムコードを、トランザクション実行を可能とようにコンパイルする場合もある。従って一実施形態においてプログラムコードの実行、といった場合には、（１）主要なプログラムコードをコンパイルするための、トランザクション構造を維持するための、または、他のトランザクション関連の処理を実行するためのコンパイラプログラム（１または複数）の動的または静的な実行、（２）トランザクション処理／呼び出しを含む主要なプログラムコードの実行、（３）主要なプログラムコードに関連付けられたライブラリ等の他のプログラムコードの実行、または（４）これらの組み合わせのことを示してよい。
【００２９】
一実施形態では、プロセッサ１００は、ハードウェアトランザクションメモリ（ＨＴＭ）システム内のハードウェア／ロジックを利用してトランザクションを実行することができる。ＨＴＭを実装する場合、アーキテクチャおよびマイクロアーキテクチャ両方の観点から複数の特定の実装の詳細が公知であるが、これら殆どに関しては記載しないことで、本発明を不当に曖昧にしないことにする。しかし、一部の構造および実装例については後述して例示を行う。また、これら構造および実装例は、必須ではなく、これに対して、異なる実装詳細を有する他の構造で増強を加えたり、これらで置き換えたりすることもできる点に留意されたい。
【００３０】
ローカル処理エレメントにより、および、潜在的に他の処理エレメントにより、データアイテムに対してアクセスおよび要求を行うことができる。トランザクションメモリシステムに安全機構がない場合、これらアクセスの一部が潜在的に無効なデータおよび実行となってしまうことがある（つまり、あるデータへの書き込みによって読み出しが無効となったり、無効なデータを読み出したりしてしまうことがある）。この結果、プロセッサ１００は、潜在的なコンフリクトを特定するために、データアイテムへの、またはデータアイテムからのメモリアクセスをトラックまたは監視するロジックを潜在的に含むことができる。
【００３１】
データアイテムまたはデータエレメントは、ハードウェア、ソフトウェア、またはこれらの組み合わせにより定義される任意の粒度のデータを含んでよい。データ、データエレメント、データアイテム、またはそれらへの参照のほんの数例を挙げると、メモリアドレス、データオブジェクト、クラス、動的言語コードの一タイプのフィールド、動的言語コードの一タイプ、変数、オペランド、データ構造、およびメモリアドレスへの間接的参照等がある。しかし、任意のデータグループを、データエレメントまたはデータアイテムと称することができる。動的言語コードのあるタイプのフィールド、動的言語コードのあるタイプ等について上述した例は、動的言語コードのデータ構造のことである。一例としては、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．から入手可能なＪａｖａ（登録商標）等の動的言語コードは、強く型付けされた（strongly typed）言語である。各変数が、コンパイルタイムで知られているタイプを有する。このタイプは、プリミティブタイプ（ｉｎｔ、ｆｌｏａｔといったブールおよび数値）および参照タイプ（クラス、インタフェースおよびアレイ）という２つのカテゴリに分類される。参照タイプの値は、オブジェクトへの参照である。Ｊａｖａ（登録商標）ではオブジェクトは、フィールドからなり、クラスのインスタンスまたはアレイであってよい。クラスＡのオブジェクトａが与えられると、通常は記述Ａ：：ｘでタイプＡのフィールドｘを示し、ａ．ｘでクラスＡのオブジェクトａのフィールドｘを示すことができる。例えば、ａ．ｘ＝ａ．ｙ＋ａ．ｚ．といった表現が可能である。ここでフィールドｙおよびフィールドｚをロードして追加して、この結果をフィールドｘに書き込むことができる。
【００３２】
従ってデータアイテムへのメモリアクセスの監視／バッファリングは、任意のデータレベル粒度で実行することができる。例えば一実施形態では、データへのメモリアクセスは、タイプレベルで監視される。ここでフィールドＡ：：ｘへのトランザクション書き込みおよびフィールドＡ：：ｙの非トランザクションロードは、同じデータアイテムへのアクセスとして監視してよい（タイプＡ）。別の実施形態では、メモリアクセスの監視／バッファリングは、フィールドレベルの粒度で実行される。ここでは、Ａ：：ｘへのトランザクション書き込み、および、Ａ：：ｙの非トランザクションロードは、それぞれ別個のフィールドへの参照であるので、同じデータアイテムへのアクセスとしての監視を行わない。なお、データアイテムへのメモリアクセスのトラックには、他のデータ構造またはプログラミングを考慮に入れていない。一例としては、クラスＡのオブジェクトのフィールドｘおよびｙ（Ａ：：ｘおよびＡ：：ｙ）、クラスＢのオブジェクトへのポイントを、新たに割り当てられたオブジェクトに対して初期化して、初期化後には書き込みを行わない。一実施形態では、Ａ：：ｘが指し示すオブジェクトのフィールドＢ：：ｚへのトランザクション書き込みは、Ａ：：ｙが指し示すオブジェクトのフィールドＢ：：ｚの非トランザクションロードに関して同じデータアイテムへのメモリアクセスとしては監視しない。モニタは、任意のデータ粒度レベルで監視／バッファリングを行うと決定することができることがこれらの例から推定されよう。
【００３３】
一実施形態では、モニタには、監視すると決定されるロードおよび格納をトラックする、読み出しモニタおよび書き込みモニタが含まれてよい。一例としては、ハードウェア読み出しモニタおよび書き込みモニタが、基礎にある格納構造の粒度に関らずデータアイテムの粒度でデータアイテムを監視することができる。一実施形態では、データアイテムは、格納構造の粒度で関連付けられて、少なくとも１つのデータアイテム全体が適切に監視されるようにされているトラックメカニズムにより境界付けされてよい。データアイテムの監視に読み出しモニタ／属性を利用する一例は、代理人整理番号Ｐ２９１３０としてＧａｄ  Ｓｈｅａｆｆｅｒ等を発明者とする同一出願人による「トランザクションメモリ（ＴＭ）システムの属性の読み出しおよび書き込み監視」なる名称の出願番号第ＸＸ／ＸＸＸ，ＸＸＸ号明細書に詳述されており、これをここに提出する。しかし、モニタ、属性、注釈、その他のトラックメカニズムも、任意のデータ粒度およびデータ保持構造を利用するトランザクション実行に関してコンフリクトを検出するために利用可能である。
【００３４】
従来のＭＥＳＩ状態は、監視されていないバッファリングされた状態、書き込み監視されたバッファリングされた状態、読み出し監視されたバッファリングされた状態、その他のバッファリングされた状態等のバッファリングされた状態で増強されたり、および／または、これらと置き換えたりすることもできる。この結果、既存の公知のコヒーレンスおよび通信／スヌーププロトコルは、ハードウェアモニタ／属性と組み合わせて利用することで、コンフリクトを検出することができる。従来のＭＥＳＩコヒーレンス状態を拡張してバッファリングデータを保持することを後述する。
【００３５】
設計に基づき、キャッシュラインのキャッシュコヒーレンス要求および監視されたコヒーレンス状態の異なる様々な組み合わせによって、データアイテムを保持するキャッシュラインが共有読み出し状態にある、および、スヌープがデータアイテムに対する書き込み要求を示している、等の潜在的なコンフリクトが生じる。逆に、データアイテムを保持するキャッシュラインがバッファリングされた書き込み状態にある、および、外部スヌープが、データアイテムに対する読み出し要求を示す、といった場合には、潜在的なコンフリクトと考えることができる。一実施形態では、アクセス要求および属性状態スヌープロジックのこのような組み合わせを検出することを、コンフリクト検出／報告のためのモニタおよび／またはロジック等のコンフリクト検出／報告ロジックに連結させることができる。
【００３６】
一実施形態では、キャッシュコヒーレンスプロトコルを拡張して、ローカルバッファリングされたデータをサポートするバッファリングされた状態を含んでよい。このようにすることでトランザクション格納を、複雑な外部書き込みバッファリング回路を利用するのではなく、既存のキャッシュ構造を利用してバッファリングされた様式で実行することができる。実装設計の選択肢の１例として、ＨＴＭはバッファリングされた置き換え更新（update-in-place）で動作することができる。更新が配置されたＨＴＭでは、トランザクション書き込みを、参照したメモリアドレスに行うことで、保持されている前のデータを修正することができる。しかしこの修正されるデータは、外部の要求スレッドには提供されない（つまり、データはグローバルに可視状態とはされず、ローカルメモリの順序付けのためにローカル読み出しに提供される）。加えて、前のデータの「ログをとる」場合が多く、トランザクションをアボートすると、前のデータが復元されて、トランザクションの実行が始まる前のスレッドの状態にすることができる。
【００３７】
一例を示すと、図１のプロセッサ１００のデータキャッシュ１５０が、キャッシュ１１０およびシステムメモリ１７５等の、より高レベルのメモリからのデータを保持する第１のレベルのデータキャッシュを含む。従って、データキャッシュ１５０へのトランザクション書き込みに遭遇すると、ライトバックキャッシュの一実施形態では、高レベルのキャッシュ１１０へと、前に修正されたデータアイテムのライトバックが行われる。または、プロセッサ１００内または外部の別のメモリで前のデータのログをとることもできる。ここでバッファリングされたラインは失われる場合もあるので、前の修正されたラインを維持しておく。ライトバックが行われると、一実施形態では、高レベルのキャッシュに対してデータアイテムがまだ利用されていることを通知して、より高レベルのメモリがキャッシュ１５０へスヌープ要求の転送をやめないようにする。前のデータアイテムのログをとった後で、トランザクション書き込みを「バッファリングされた」様式で行って、キャッシュ１５０のデータアイテムを更新する。この結果、データアイテムを保持している１つのキャッシュラインまたは複数のキャッシュラインがバッファリングされた状態に移動される。
【００３８】
従ってローカルスレッド（ローカルスレッド１０１ａ等であって、トランザクション書き込みと関連付けられたもののこと）は、キャッシュ１５０から、修正されたデータアイテムを読み出すことができる。言い換えると、バッファリングされた、プライベートなアイテムは、ローカルスレッド（つまりローカルスレッド１０１ａ）には内部的に可視状態とされて、順序の一貫性を保つことができる。しかし、別のスレッド（例えばスレッド１０２ｂ）にはバッファリングされたデータが提供されない。バッファリングされた書き込みが、トランザクションがコミットされるまでは他のスレッドに対して外部的に可視状態とならない、ということが重要である。トランザクションがコミットされると、ログがとられたデータが無効化または破棄されて、バッファリングされたデータを修正状態に遷移させる。この遷移によって、データアイテムは他のスレッドに対してグローバルに可視状態となり、データアイテムが修正されたコヒーレンス状態に保持されることによって、データアイテムに対する後続する外部アクセス要求には、ＨＩＴ修正された（ＨＩＴＭ）応答が与えられる。一方で、トランザクションがアボートされた場合には、前のデータが有効なデータとして復元され、バッファリングされたデータが無効化される。
【００３９】
データアイテムを、バッファリングされた状態においてキャッシュ１５０から追い出す場合には、プライベートに保持されているデータアイテムは潜在的に失われる。データアイテムをより高レベルのメモリにライトバックしないことが重要である。（例えば追い出されたことで失われた、または他のイベントによって）データが破損している場合には、上述したように潜在的なアクセスのコンフリクトの検出と類似した方法で潜在的なコンフリクトがトリガされる場合がある。
【００４０】
一実施形態では、ハードウェアにハンドラをレジスタして、コンフリクトまたは容量によるバッファリングされたデータの損失の効率的な処理をサポートすることができる。例えばレジスタは、トランザクションハンドラのアドレスを登録するために、トランザクションランタイムまたはアプリケーションコード等のソフトウェアにより修正可能であってよい。対象となるイベント（例えば上述した情報の損失）が検出されると、一実施形態では、制御フローをオペレーティングシステム（ＯＳ）等の特権を有するソフトウェアの介入なしにレジスタに登録されたトランザクションハンドラにベクタ化する。ハードウェアにハンドラを登録するケースは、代理人整理番号Ｐ２９１２９としてＧａｄ  Ｓｈｅａｆｆｅｒ等を発明者とする「トランザクションメモリイベント処理のためのユーザ−ハンドラのハードウェアへの登録」なる名称の関連出願に詳述されており、これをここに提出する。
【００４１】
図２は、キャッシュメモリに保持されているデータアイテムにコヒーレンス状態を関連付ける一実施形態を示す。プロセッサ２５０は、トランザクション実行可能な任意の数の処理エレメントを含む任意のタイプの公知のプロセッサを含む。図示されてはいないが、プロセッサ２０５は、チップセット（つまり、メモリコントローラハブおよび入出力（Ｉ／Ｏ）コントローラハブ）およびシステムメモリ等の他のシステムコンポーネントに連結されてよい。コンピュータシステムにおけるＩ／Ｏデバイスのよく利用される例としては、ネットワークコントローラ、ビデオ表示アダプタ、グラフィックスプロセッサ、オーディオコントローラ、または他の入出力デバイスが挙げられる。
【００４２】
一実施形態では、プロセッサ２５０がキャッシュメモリを含む。最も関連性の高いキャッシュの例としては、データキャッシュ（例えば図１に示す第１レベルのキャッシュまたは第２レベルのキャッシュ）が含まれる。しかし、キャッシュはさらに、命令キャッシュ、トレースキャッシュ、その他の公知のキャッシュを含む。キャッシュアーキテクチャについては詳述しないことで本記載が不当に曖昧になることを回避するが、キャッシュは複数の方法でオーガナイズすることができる。例えばキャッシュを完全に関連付けることができる（つまり、メモリアドレスを、一定の範囲のメモリアドレスが特定のキャッシュセットに制限されるような一式の関連キャッシュ、または、複数のアドレスをキャッシュ内の単一の位置に保持するような直接マッピングキャッシュ、といったキャッシュのなかの何処かに保持しておくことができる）。ここで記載する方法および装置は、任意のキャッシュオーガニゼーションで実装することができる。
【００４３】
図示されているように、キャッシュは、キャッシュメモリまたはデータアレイと称されることもあるデータの部分２０５、および、キャッシュメモリ２０５に関連付けられる制御ロジック２３０を含む。キャッシュメモリ２０５は、ライン２１０、２１５、２２０、および２２５を含む。制御ロジック２３０は、キャッシュライン２１０、２１５、２２０、および２２５にそれぞれ関連付けられた／対応しているエントリ２１１、２１６、２２１および２２６を有するアレイ２３５を含む。さらにハードウェア読み出しおよび書き込みモニタ２１１ｒ、２１１ｗ、２１６ｒ、２１６ｗ、２２１ｒ、２２１ｗ、２２６ｒ、および２２６ｗも同様に、キャッシュライン２１０、２１５、２２０、および２２５に関連付けられている。ハードウェアモニタおよびそれらの実施形態は、代理人整理番号Ｐ２９１３０としてＧａｄ  Ｓｈｅａｆｆｅｒ等を発明者とする同一出願人による「トランザクションメモリ（ＴＭ）システムの属性の読み出しおよび書き込み監視」なる名称の出願に詳述されており、これをここに提出するが、以下では、バッファリングされた状態をさらに説明するために、読み出しおよび書き込みモニタの実施形態について説明する。
【００４４】
一実施形態では、読み出しモニタおよび書き込みモニタが、データを保持する物理構造の粒度に関らず、データアイテム２０１等のデータの監視の境界を定める。上述した説明からは、データアイテムは任意の粒度を有することができ、開始アドレスは、このデータアイテムのサイズに整列されていなくてよい。実際、プログラマは、開始アドレスを提供して、その後、データアイテムを構成するさらなる複数のバイトを提供することでデータアイテムを定義することができる。この結果、データアイテムは、キャッシュ２０５のライン、キャッシュ２０５のキャッシュラインのサイズより小さく、または、キャッシュ２０５のキャッシュラインより大きくなる可能性があり、潜在的に、キャッシュ２０５のキャッシュラインの開始境界線および終了境界線とは配列しない可能性がある。
【００４５】
図２の例においては、データアイテム２０１は、２つのキャッシュラインにまたがっており、キャッシュライン２１０の全てと、キャッシュライン２１５の半分とに相当するデータを含んでいる。Ｐ２９１３０には、監視属性の潜在的な動的割り当てが説明されているが、属性２１１ｒ、２１１ｗ、２１６ｒ、２１６ｗ、２２１ｒ、２２１ｗ、２２６ｒ、および２２６ｗはキャッシュラインベースで提供される。従ってデータアイテム２０１が書き込みを監視される場合には、読み出しモニタ２１１ｒおよび２１６ｒの両方を、監視されている状態へと更新して、対応するキャッシュライン２１０および２１５の読み出しが監視されていることを示す。ライン２１５はデータアイテム２０１の一部のみを保持しているが、モニタ２１６ｒを更新してライン２１５のデータアイテム２０１のその一部を監視するのではなくて、２１６ｒを全てのライン２１５を監視するよう設定する（つまり、データアイテム２０１の一貫性を保証するべくより多くのデータを含める）。言い換えると、データアイテム２０１は、図２に示すモニタのキャッシュライン粒度に関らず監視による境界付けが行われる。
【００４６】
一実施形態では、アレイ２３５は、エントリ２１１、２１６、２２１、および２２６を含むコヒーレンス状態アレイを含む。示されているように、モニタ２１１ｒ、２１１ｗ、２１６ｒ、２１６ｗ、２２１ｒ、２２１ｗ、２２６ｒ、および２２６ｗは、状態アレイ２３５の一部であり、基本的にエントリ２１１、２１６、２２１、および２２６に保持されるコヒーレンス状態の拡張となって、読み出し監視状態、書き込み監視状態、および監視されない状態をそれぞれ含む。状態アレイ２３５に読み出しモニタおよび書き込みモニタを含める例が示されているが、以下の記載を簡略化する目的から、バッファリングされた状態を含めるコヒーレンス状態の拡張は、読み出し監視状態および書き込み監視状態とは別個に説明する。実際のところ別の例では、読み出しモニタおよび書き込みモニタが状態アレイ２３５に含まれておらず、各キャッシュライン内で例えば注釈を付けられる、別のアレイで保持される、またはデータアイテムに動的に割り当てられる等の別の方法によりデータと関連付けられている。
【００４７】
従って一実施形態では、エントリ２１１、２１６、２２１、および２２６を含むアレイ２３５は、キャッシュライン２１０、２１５、２２０、および２２５にそれぞれ対応するキャッシュコヒーレンス状態値を保持する。共通のキャッシュコヒーレンス状態には、ＭＥＳＩ（Modified Exclusive Shared and Invalid：イリノイ・プロトコル）キャッシュコヒーレンス状態を含む。ここで、バッファリングされた状態をＭＥＳＩ状態に追加することでＭＥＳＩＢプロトコルを形成する。状態を表す任意の公知の値を状態エントリ（例えばエントリ２１１および２１６）に保持することができる。例えばビットベクトルを各状態エントリに含め、各ビットがコヒーレンス状態に対応するようにする。別の例では、状態エントリが、コヒーレンス状態を表す符号化された値を保持する。
【００４８】
また別の例では、バッファリングモニタ／属性は、上述した読み出しモニタおよび書き込みモニタと同様の方法で追加することができ、これにより、基本的に新たなバッファリングされたコヒーレンス状態が生じる。さらに一実施形態では、バッファリングは、新たなバッファリングコヒーレンス規則を有する読み出し監視および書き込み監視とは独立してこれに直交していてよい。例えば、バッファリングは書き込み共有を許可しない（つまり、外部書き込みによりバッファリングされたラインが無効化されるが、バッファリングにより読み出し共有は行うことができる、つまり、１つのキャッシュでバッファリングされたラインが、異なるキャッシュの共有ラインと衝突しない）。読み出し共有を許可するこのケースでは、コミットされる前に読み出しが有効となることを保証するために何らかのコヒーレンス動作（例えば、他のキャッシュの全ての共有データコピーを無効化する、等）が必要となる。
【００４９】
トランザクションバッファリングされた格納動作、または、バッファリングについて特定される他の格納動作に遭遇した場合には、バッファリングされた格納処理を実行する。格納処理（例えばトランザクション格納処理）をバッファリングするかを判断することについては、図４を参照して後述する。しかし、格納に加えて、関連ラインのコヒーレンス状態を、バッファリングすると判断した格納についてバッファリングされた状態へと更新する。一実施形態では、データアイテムは、基礎となる格納構造の粒度に関らず、境界付けされた状態でバッファリングされる。
【００５０】
一例として、データエレメント２０１用のトランザクション格納に遭遇した場合を考える。ＭＥＳＩプロトコルに従って制御ロジック２３０が、通常の書き込み処理に類似した、所有権を得るための読み出し（read-for-ownership）要求を実行する。所有権が得られている場合には、データエレメント２０１を書き込み、バッファリングされたコヒーレンス状態と関連付ける。本例では、両方のライン２１０および２１５が、データエレメント２０１の少なくとも一部を保持して、これらラインをバッファリングされたコヒーレンス状態へ遷移させている。キャッシュライン２１５を特に例にとると、対応する状態エントリ２１６を、キャッシュライン２１５を示すように、バッファリングされた状態の値に更新して、保持されているデータアイテム２０１の部分を、バッファリングされたコヒーレンス状態とする。さらに、このデータアイテム２０１および／またはライン２１５を、バッファリングされたコヒーレンス状態に関連付ける。
【００５１】
上述したように、キャッシュライン２１５に関連付けられた書き込みモニタも、キャッシュラインが書き込みを監視されていることを示すように更新されてよい。一実施形態では、属性２１６ｗ等のハードウェア書き込み属性は、トランザクション格納処理に呼応して別途適用される。言い換えると、これら更新を、書き込みを監視されバッファリングされている更新（つまり、バッファリングされた様式で更新され、書き込み監視が適用されているアドレス／データ）と呼ぶことができる。多くの場合、外部エージェントが書き込みを監視されたバッファリングされたデータの更新を試みるのと同時に、コンフリクトを検出する。
【００５２】
同様に、キャッシュライン２１５のトランザクション読み出しに呼応して、ハードウェア読み出しモニタ２１６ｒを、キャッシュライン２１５が読み出しを監視されていることを示すよう設定することができる。ここでも、これら更新のことを読み出し監視されバッファリングされた更新（つまり、読み出し監視が適用されたバッファリング様式で更新されること）と呼ぶことができる。ここではアドレスはローカルに並列に更新され、もしあればコンフリクトの解決を、コミットが試みられるまで（つまり、アドレスのバッファリングが終わり、グローバルな可視状態になるよう試みられるまで）遅らせる。別の実施形態では、本例では定義によってキャッシュラインがバッファリングされた状態にあり、読み出しも書き込みも監視されていることが示唆されているので、明示的な属性（例えば属性２１６ｗおよび２１６ｒ）が設定されていない。
【００５３】
上述した例では監視されバッファリングされている状態について言及したが、バッファリングされ監視されない更新が行われてもよい。例えば、後にコミットされないトランザクションの一時的な、またはローカルの値は、それらの性質上グローバルに観察はされないので、監視せずにバッファリングされた様式で更新することができる。
【００５４】
通常、制御ロジック２３０は、スヌープロジック、置き換えロジック、状態ロジック、およびその他の、任意の公知のキャッシュ処理を行うためのキャッシュ関連ロジックを含む。例えば、制御ロジックは、バッファリングされたコヒーレンス状態をサポートするプロトコルを含むコヒーレンスプロトコルを実装して、これには、さらに、図３を参照して後述するＭＥＳＩＢ状態間の遷移が含まれうる。一実施形態では、制御ロジック２３０は、個々に、またはプロセッサ２５０内の他のロジックとの組み合わせにおいて、コンフリクトを検出する。一例では、コンフリクトにはアクセスコンフリクト（例えばバッファリングした状態におけるあるラインへの外部アクセス要求等）を含む。
【００５５】
外部アクセスまたは非ローカルアクセス要求は、バッファリングおよび／または監視するラインを生じたスレッドまたはトランザクションに関連付けられていない処理エレメントに関連付けられたアクセスを含む。例えば図１の処理エレメント１０１ａが、バッファリングされた状態の値に状態エントリ２１１を更新させたトランザクション格納を含むトランザクションの実行に関連付けられている、と仮定する。この結果、処理エレメント１０２ａからキャッシュライン２１０へのアクセス要求は、スレッド１０１ａの実行の外部からの観点からの外部アクセスを含む。この結果、この例では、外部アクセス要求が、別の物理プロセッサからのアクセス要求のみならず、同じプロセッサ上で実行されている異なるスレッドからのアクセスをも含みうることが重要な点である。加えて、モニタが共有キャッシュのスレッドベースで複製される場合には、共有キャッシュ内であってもスレッドレベルで外部アクセスを検出することができる。
【００５６】
逆に、外部アクセス要求がキャッシュラインのバッファリングされた、または監視された状態に関連付けられていない処理エレメントからのものではなくて、ローカルまたは内部アクセス要求が、キャッシュラインのバッファリングされた、または監視された状態に関連付けられた処理エレメントからのアクセス要求を含む。本例の説明を続けると、処理エレメント１０１ａと関連付けられたトランザクション内のトランザクション格納により、エントリ２１１がバッファリングされた値から更新された。次に、処理エレメント１０１ａと関連付けられた同じトランザクションからのロード処理は、ライン２１０からの読み出しである。このロードは、バッファリングされたデータを読み出すものであり、処理エレメント１０１ａおよびトランザクションの両方からの観点からみると、内部アクセスまたはローカルアクセスとみなされる。
【００５７】
コンフリクトの検出についてのさらなる考察には、外部アクセスタイプおよびハードウェアモニタの状態を比較することが含まれてよい。例えば、トランザクション内のトランザクション格納処理に呼応して、状態エントリ２１６を、バッファリングされた状態の値に設定して、キャッシュライン２１５がバッファリングされた状態およびハードウェア属性２１６ｗであることを示す場合を仮定する。Ｗは、キャッシュライン２１５が書き込み監視されていることを示すように設定される。ライン２１５への外部アクセス要求が制御ロジック２３０により受信／検出されると、外部アクセス要求の検出と同時にコンフリクトを検出する。ここでライン２１５へのバッファリングされた格納は、トランザクションがコミットされるまでグローバルに可視状態にはならず、これにより潜在的なコンフリクト状態が生じ、前に保持されているデータが、今潜在的に更新された、または共有されているグローバルデータと矛盾してしまいうる。言い換えると、キャッシュライン２１５が書き込みを監視されバッファリングされた状態にあり、この結果、ライン２１５が外部エージェント／処理エレメントにより並列に更新されなくなる。
【００５８】
これとは対照的に、一実施形態では、読み出しを監視されバッファリングされたラインを、複数のスレッド／処理エレメントにより並列に更新して、もしあればコンフリクトを、制御ロジック２３０によって、試みられるトランザクションのコミットにおける通常のコヒーレンスプロトコルにより検出する。一例としては、エントリ２１１が、バッファリングされた状態の値を保持して、そのライン２１０がバッファリングされたコヒーレンス状態と関連付けられていることを示す。次に、キャッシュライン２１０と関連付けられた外部アクセス要求を受信する。この例では、コンフリクトがこの時点では検出されていない。そうではなくて、トランザクションは通常処理を続けており、トランザクションがコミットされると、データをグローバルに観察される状態に遷移させる。一例では、後述するが、この遷移には、バッファリングされた状態から修正されたコヒーレンス状態へのライン２１０のコヒーレンス状態遷移が含まれる。ライン２１０のバッファリングされた状態から修正されたコヒーレンス状態への遷移には、ここで記載する２段階の遷移が含まれてよい。ただしこのようなタスクを実行する場合には、制御ロジック２３０は、ライン２１０をこのように遷移させる意向を示すスヌープメッセージを生成する。この時点では、並列である外部スレッド更新ライン２１５の別のキャッシュの他の制御ロジックは、そのキャッシュにおけるライン２１５のコヒーレンス状態遷移に基づきコンフリクトを検出することができる。言い換えると、読み出しを監視されるバッファリングされたラインのコンフリクトは、この例においては、コミット処理の準備として、書き込み監視の入手を試みるときに検知される。
【００５９】
制御ロジック２３０は、他の制御ロジックまたは報告ロジックとの組み合わせにおいて、または単独で、他のタイプのコンフリクトまたは潜在的なコンフリクトを検出することができる。例えば一実施形態では、制御ロジック２３０は、バッファリングされたデータまたはハードウェア属性情報の損失時にコンフリクトを検出する。データまたは属性情報の損失は、追い出しまたはその他の損失イベント時に発生する可能性がある。これは、バッファリングされたデータまたは属性情報がローカルであり、潜在的に、追い出されたときにより高レベルのメモリにライトバックされないからである。
【００６０】
制御ロジックも、他のプロトコルを実装して、データのバッファリングをサポートする他の処理を実行することができる。例えば制御ロジックは、バッファリングされたデータが、トランザクションの実行に内在する特性をサポートするようグローバルに観察される状態とされないように（つまり、更新されたデータが、コミットまではグローバルに観察される状態とならないように）することができる。ここで一実施形態では、制御ロジックが、キャッシュラインおよびバッファリングされたコヒーレンス状態と関連付けられたキャッシュラインを参照する外部スヌープ要求に対してミスレスポンスを提供する。
【００６１】
一例としては、ここでもまた、バッファリングされたコヒーレンス状態にあるライン２１５（つまり状態エントリ２１６）が、バッファリングされたコヒーレンス状態値を保持すると仮定する。データアイテム２０１およびキャッシュライン２１５に関連付けられたアドレスを参照する外部アクセス要求を受信する。制御ロジック２３０は、ライン２１５がバッファリングされたコヒーレンス状態に保持されていることに呼応して、要求を発行する外部エージェントに対してミスレスポンスを提供する。通常は、ミスレスポンスには、要求を発行してきたエージェントに対して、データがキャッシュに保持されていない、または無効状態にある旨を通知する応答が含まれる。しかしここで、キャッシュライン２１５は、データアイテム２０１用の更新値を保持するが、この更新値はバッファリングされた状態にあり、これにより、関連するトランザクションがコミットされていないことを示す。この結果、外部の要求を発行してきたエージェントに対してデータを転送せず、トランザクションのコミットまで適切なトランザクションの順序を適切に維持し、データをグローバルな非観察状態とする。スヌープ応答は、ＭＩＳＳ、または、ＨＩＴＭに類似しているが応答がラインのバッファリングされた状態（修正された状態ではなくて）を通信する新たなタイプの応答（ＨＩＴバッファリングされた（ＨＩＴＢ）応答）であってよい。
【００６２】
一実施形態では、制御ロジック２３０は、キャッシュライン２１５を、キャッシュラインがバッファリングされたコヒーレンス状態に保持されている場合キャッシュライン２１５に関連付けられた外部アクセス要求を受信することに呼応して、バッファリングされたコヒーレンス状態から無効のコヒーレンス状態へと遷移させてよい。上述したように、一実施形態では、バッファリングされたライン２１５が外部からアクセスされる場合、データが古くなってしまっている場合がある（つまり、外部の要求を発行してきたエージェントが更新している場合がある）。従ってデータの一貫性を保証するために、この例では、ミスレスポンスを提供することに加えて、ライン２１５が、もしバッファリングされており、読み出しを監視されている場合には、これを無効状態に遷移させる。一例では、状態エントリ２１６をバッファリングされた状態の値から無効状態の値に更新する。
【００６３】
プロトコル応答の別の例では、制御ロジック２３０が、内部的／ローカルにバッファリングされたデータがローカルエージェントから可視状態にあることを保証する。一例では、トランザクションを実行する第１のスレッドが、データアイテム２０１へのトランザクション格納処理および、後続するデータアイテム２０１の読み出し処理を含む。トランザクション格納処理に呼応して、エントリ２１１および２１６を、バッファリングされたコヒーレンス状態に更新して、データアイテム２０１がバッファリングされた状態に保持されていることを示す。内部で順序の連続を保証するために、後続する内部読み出し要求に呼応して、制御ロジック２３０は、ローカルな第１のスレッドに対して、修正されたデータアイテム２０１を提供する。言い換えると、ローカルにバッファリングされたデータをローカル読み出しに提供するが、外部アクセスには提供しない。
【００６４】
一実施形態では、制御ロジック２３０は、ハードウェアにおけるトランザクションを効率的にコミットする方法をサポートする。一例では、制御ロジック２３０は、修正された状態へ、トランザクションと関連付けられたバッファリングされたキャッシュラインを遷移させる。重要なことは、修正された状態への遷移が、ＭＥＳＩプロトコルの構成により、キャッシュラインに保持されるデータがプロセッサにより修正されていないこと、つまり、データがグローバルに観察される状態にあることを示すことである。一例としては、ひとたび修正された状態になると、キャッシュラインへの外部アクセス要求にＨＩＴＭ応答が提供される。一例として、トランザクション内のトランザクション格納の実行により、データアイテム２０１がライン２１０および２１５内にバッファリングされた状態で保持される、と仮定する。トランザクションに対する暗黙の終了または明示的な終了（ユーザレベルのコミットの命令の実行等）のいずれかに呼応して、ライン２１０および２１５を、バッファリングされたコヒーレンス状態から、修正されたコヒーレンス状態に遷移させる。
【００６５】
一実施形態では、バッファリングされたコヒーレンス状態から修正されたコヒーレンス状態への遷移には２段階の遷移が含まれる。ここで制御ロジック２３０は、キャッシュライン２１０および２１５を、バッファリングされたコヒーレンス状態に対する関連付けから、中間の、バッファリングされ修正されたコヒーレンス状態へと遷移させ（つまり、エントリ２１１および２１６を中間の、バッファリングされ修正されたコヒーレンス状態へと更新して）、バッファリングされた状態をクリアして、修正された状態に関連付けられているキャッシュラインを退出させる（つまり、バッファリングされた値を、エントリ２１１および２１６の中間の、バッファリングされ修正されたコヒーレンス値からクリアして、エントリ２１１および２１６の修正されたコヒーレンス値を退出させる）。
【００６６】
さらなる例としては、ＭＥＳＩＢ状態が、無効（００００）、共有（０００１）、排他的（００１０）、修正（０１００）、およびバッファリングされている（１０００）を表していると仮定する。これらの表現を上述した例に挿入することにより、（１）制御ロジック２３０がエントリ２１１よび２１６をバッファリングされた値１０００から、１１００の中間の、バッファリングされ修正された値に遷移させ、その後、バッファリングされたビット１０００をクリアして、エントリ２１１および２１６の修正されたコヒーレンス値０１００を退出する。ここで制御ロジック２３０は、コミットに呼応して２段階の遷移を実行する回路等のロジックを含む。
【００６７】
一実施形態では、制御ロジック２３０は、さらに、ユーザレベルの命令に呼応してコヒーレンス状態にアクセスすることができる。例えばプロセッサ２５０のハードウェア（例えばデコーダ）は、バッファリングされたコヒーレンス状態のアクセス、操作、または報告に関するユーザ命令を認識することができる。これら命令の例には、設定命令、クリア命令、またはテスト命令が含まれる。設定命令（例えばＳｅｔＢ．ｓｉｚｅＡｄｒｅｓｓ）は、Ａｄｒｅｓｓから始まりＡｄｒｅｓｓに終わり、ｓｉｚｅを含むデータを、バッファリングされた状態に遷移させる。一例では、データアイテム２０１およびデータエレメント２０１のサイズに関連付けられた開始アドレスを参照する類似した設定命令が、データアイテム２０１を保持するキャッシュライン２１０および２１５をバッファリングされた状態に遷移させる。同様に、テスト命令は、アドレスとサイズとに関連付けられたコヒーレンス状態を報告することができ、クリア命令は、バッファリングされたコヒーレンス状態をアドレスおよびサイズからクリアすることができる（つまり、無効状態に遷移させることができる）。
【００６８】
示されているプロセッサ２５０は、制御レジスタまたはモデル特定レジスタ（ＭＳＲ）等の任意の公知のレジスタを含みうるレジスタ２５０を含んでよい。レジスタ２５０は一実施形態では、ユーザが修正可能なデータを保持するようユーザによるアクセスが可能であってよい。一例としては、レジスタ２５０は、格納がバッファリングされるかを判断するために選択値情報を保持する。選択値情報は、選択または非選択値を選択基準とともに含んでよい。格納をバッファリングするかを判断することについては、図４を参照して後述する。
【００６９】
図３は、バッファリングされた状態を含むＭＥＳＩ状態の状態遷移ダイアグラムの一実施形態を示す。上述したように、制御ロジック（図２に示す制御ロジック２３０等）は、一実施形態では、ハードウェアロジック、ファームウェア、格納、および／または、回路を含み、記載された状態両方を表し、示されているイベントに対して定義されたプロトコル応答に基づいて、示されている遷移を実行する。また、図３に示す遷移ダイアグラムを修正することで、監視状態および非監視状態（例えば、読み出し監視されたバッファリングされた状態、書き込み監視されバッファリングされた状態、非監視のバッファリングされた状態、読み出し監視された共有状態、または、読み出しおよび書き込み属性を状態アレイで保持した実施形態における他の状態）を挿入することができる。バッファリングされた状態を含まない、監視ＭＥＳＩコヒーレンス状態および非監視ＭＥＳＩコヒーレンス状態の例については、代理人整理番号Ｐ２９１３０としてＧａｄ  Ｓｈｅａｆｆｅｒ等を発明者とする「トランザクションメモリ（ＴＭ）システムの属性の読み出しおよび書き込み監視」なる名称の出願に詳述されている。
【００７０】
バッファリングされた状態を、ＭＥＳＩプロトコルについてのレガシー遷移の一部（例えば、排他的３０５へのロックヒットを格納またはロードして、排他的コヒーレンス状態から修正されたコヒーレンス状態へ遷移すること、等）により説明する。説明を曖昧にしないために、バッファリングされた状態への、またはこの状態からの遷移に焦点をあてて説明する。無効状態、共有状態、または排他的状態から開始されて、メモリラインへの遷移格納２１０は、ラインをバッファリングされた状態へ遷移させる。別の実施形態では、バッファリングについて選択される任意の格納が、トランザクション格納と同等の概念であってよい（つまり、関連するラインをバッファリングされた状態に移動させることができる）。バッファリングする格納部の選択については図４を参照して後述する。同様に、修正されたコヒーレンス状態においては、修正されたラインへのトランザクション格納により、修正されたラインがバッファリングされた状態へ移動させられる。
【００７１】
ひとたびラインがバッファリングされた状態になると、破棄３１１により、ラインが無効状態に遷移させられる。一例では、破棄３１１は、バッファリングされた状態のラインに対する外部書き込み要求を受信することに呼応して生じる。外部要求エージェントに対してミスレスポンスを提供して、ラインを、破棄処理に呼応して無効状態に移動させる。別の例としては、破棄３１１が、第一にバッファリングされた状態にする責任のあったトランザクション格納を含むトランザクションのアボートに呼応して生じる。また、コミット３１２に呼応して、バッファリングされた状態のラインを修正された状態に遷移させる。上述したように、修正された状態への遷移には２段階遷移が含まれてよい。
【００７２】
図４は、アクセス処理をバッファリングするかを決定する方法を示すフローダイアグラムの一実施形態を示す。図４および図５のフローダイアグラムは、実質的にシリアル形式で示されている。しかし、これら図面に示されている方法はこの形式に限定はされず、任意の順序で行うことができ、さらには少なくとも一部を並列に実行することもできる。
【００７３】
フロー４０５においては、データエレメントを参照するメモリアクセスをバッファリングするかを判断する。殆どの基本アーキテクチャにおいては、一実施形態でトランザクション格納処理をバッファリングする。トランザクション格納処理をバッファリングするかを決定するためには任意の公知の方法を利用することができる。例えば、トランザクション格納は、プロセッサの復号ロジックにより認識されるオペコードにより特定することもできる。基本的にはユーザがトランザクション格納言語処理を利用する。コンパイルにおいてこの言語を、プロセッサのハードウェアがバッファリングするためのトランザクションの格納として認識するアセンブリコードに変換する。
【００７４】
別の例としては、プロセッサまたは処理エレメントのあるモードを設定して、格納をバッファリングするかを示すことができる。例えばトランザクションが開始されると、モードを更新して、トランザクション実行を示すようにする。ここで、実行する格納は、トランザクションとしてデコーダにより選出されるのではなくて、処理のトランザクションモードに基づいて、格納がバッファリングされる。同様に、ひとたびコミットされると、モードはデフォルトのモードに戻り、そこでは格納をバッファリングしない、または、選択基準に基づいて選択的にバッファリングしない。
【００７５】
一実施形態においては、複数のバッファリングモード（例えばバッファリングしない、非選択的なバッファリング、および選択的バッファリングといったモード）を提供する。一例として、ソフトウェアは、バッファリングモードを設定することができてよい。例えばユーザ命令は、例えば図２のレジスタ２５０等のレジスタをアドレスして、バッファリングモードを示すことができる。ソフトウェアはバッファリングする格納（例えばトランザクション格納または他の非トランザクション格納）を決定してよい。一例としては、この決定は、コンパイラ等のソフトウェアコードによって、静的に、またはランタイム中に、アプリケーションコードにより、または、トランザクションランタイムコードにより行うことができる。ここでコンパイラは潜在的に、トランザクション格納を、バッファリングする格納として、通常の格納をバッファリングされた格納へと変換するプレフィックスを特定すること等により、特定してもよい。
【００７６】
一実施形態では、ユーザアクセス可能制御レジスタ（図２のレジスタ２５０等）が、プロセッサが選択モードで動作するときに選択値および潜在的に選択基準を保持する。同様に、レジスタ２５０は、処理の非選択モードを示す非選択モードを保持する。非選択バッファリングモードにおいては、全てのメモリ更新処理をバッファリングされた形式で実行する。
【００７７】
選択バッファリングモードでは、一実施形態では、任意の方法で定義されてよい特定の基準に基づいてメモリ更新をバッファリングする。選択は２つの方法で実行可能な基準（つまり、肯定的な基準または否定的な基準）に基づいて行うことができる。一例としては、バッファリングの選択を否定的に行うことができる場合（つまり、バッファリングを、処理が一定のアドレス範囲にあるアドレスを参照してない場合には行わない、という意味で否定的選択、または、バッファリングを、一定のアドレス範囲に含まれるものを除く全ての処理について実行する、という意味で否定的選択）のアドレスの範囲を例にとる。基準は、ユーザによりユーザアクセス可能レジスタ（例えばレジスタ２５０）で、特権を有するレベルのソフトウェアアクセス可能レジスタにより、またはそれらの組み合わせにより特定されてよい。
【００７８】
バッファリングされなくてよいメモリアドレスへのメモリアクセスの選択基準のほんの一例には、ある範囲に含まれる、または、マスクに整合する仮想アドレス、ある範囲に含まれる、またはマスクに整合する物理アドレス、特定のメモリタイプに属するアドレス、入出力（Ｉ／Ｏ）スペース内のアドレス、別の保護ドメインの処理の代わりのある保護ドメインで実行されるアドレス、特定のオペコードまたはプレフィックス、および特定のデータタイプ（例えば浮動小数点またはベクトル演算）により特定される命令によりアクセスされるアドレスが含まれる。加えて、バッファリングは、特定の認識される命令に呼応して（例えば、ユーザにより特定され、プロセッサ２５０のハードウェアにより認識されるトランザクション格納処理のみに対して、または特殊なバッファリング命令（例えば図２を参照して上述した設定、テスト、およびクリア命令）に呼応して）実行されてよい。さらに他の処理（例えばローカルスタックへのアクセス）については、一部の実装例では非バッファリングとしてデフォルト化しておくこともできる。
【００７９】
フロー４０５でバッファリングを適用すると判断すると、バッファリングを利用する（つまり、フロー４１５で、通常の格納をバッファリングされたコヒーレンス状態に関連付けることによりバッファリングされた格納を実行する）、または、フロー４１０でバッファリングを行わず、格納を通常に行うこともできる。
【００８０】
図５は、バッファリングされたデータをサポートする方法を示すフローダイアグラムの一実施形態を示す。フロー５０５で、データアイテムに関連付けられたアドレスを参照するトランザクション格納に遭遇する。プロセッサ内の処理に遭遇することには、プロセッサの任意の段階（フェッチ、復号、実行、リタイヤ、その他の段階）の処理に遭遇することが含まれてよい。
【００８１】
フロー５１０で、トランザクション格納をバッファリングするかを判断する。格納をバッファリングするかの判断については図３を参照して上述した。しかしここでも、トランザクションの格納をバッファリングするかの判断の数例を提供する。第１の例では、デコーダロジックが、格納がトランザクションのものであると示す格納のオペコードを認識する。別の例としては、プロセッサが、非選択バッファリングモードで動作しており、全ての格納処理がバッファリングされた形式で行われる。また別の例としては、プロセッサが選択処理モードで動作しており、トランザクション格納が、実装に基づいて特定の選択基準に合致している、または合致していない場合である。格納をバッファリングしない場合には、フロー５１５で通常実行を行う。
【００８２】
格納をバッファリングする場合には、トランザクション格納をバッファリングされた形式で行う。一例としては、格納を１つのキャッシュラインに実行する、または複数のキャッシュラインに実行してよく、関連コヒーレンス状態を、フロー５２５でバッファリングされた状態に更新して、データアイテムがバッファリングされたコヒーレンス状態に関連付けられていることを示す。上述した例から、１つのラインがデータアイテムの一部のみを含みうることに留意されたい。一部分を更新する場合、境界付けられた監視によって、キャッシュライン全体に対するバッファリングが行われる。一実施形態では、バッファリングされた状態におけるラインの暗示的な指定を用いることで、コンフリクトを検出する。しかし別の実施形態では、フロー５２５で参照されたデータアイテムと関連付けられたモニタを、データアイテムをバッファリングすることを示すように設定する。
【００８３】
フロー５３０で、データアイテムに関連付けられたアドレスに対してローカルアクセスを行うかを判断する。上述したように、ローカルアクセスは、バッファリングされた状態へ遷移させた、またはトランザクション格納を含むトランザクションからの遷移を生じさせたトランザクション格納を実行したスレッドからのアクセスを含んでよい。ローカルアクセスを受信すると、フロー５３５で、ローカル要求エージェントに対してヒットレスポンスを提供する。言い換えると、ローカルエージェントの観点からは、最近修正されたデータを提供して、ローカル実行内で連続した順序を保つ。
【００８４】
フロー５４０において外部アクセスを検出した場合には、フロー５４５で外部要求エージェントにミスレスポンスを提供する。基本的に、バッファリングされたデータは、ローカルエージェントには可視状態であるが、外部のグローバルエージェントには可視状態とされないことで、バッファリングしたデータを利用する際の効率的なトランザクション実行を適切にサポートすることができる。さらに一実施形態では、バッファリングされたデータアイテムを、外部アクセス要求に呼応して無効状態に遷移させて、グローバルなデータの一貫性を保証する。
【００８５】
フロー５５５で、トランザクションをコミットするかを判断する。上述したように、読み出しを監視されバッファリングされたラインは、コミットが試みられる際に（つまり、コヒーレンスプロトコルに基づいて、バッファリングされた状態から修正された状態へ遷移を試みる際に）コンフリクトを検出することができる。従ってトランザクションをアボートする場合には、フロー５５０で、データアイテムを無効状態に遷移させてデータアイテムを破棄して、外部エージェントが現在無効であるデータアイテムを観察することがないようにする。しかし、トランザクションにコミットする場合には、フロー５６０で、データアイテムを修正された状態に遷移させる。一実施形態では、バッファリングされた状態から修正された状態への遷移は、２段階の遷移（バッファリングされた状態からバッファリングされ修正された状態への第１の遷移と、バッファリングされ修正された状態から修正された状態への第２の遷移）を含んでよい。
【００８６】
ここで利用される「モジュール」という用語は、任意のハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせのことであってよい。多くの場合、別個のものとして示されたモジュールの境界は、変化し、潜在的に重なることがある。例えば第１のモジュールおよび第２のモジュールは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせを共有することができ、潜在的には一部の独立したハードウェア、ソフトウェア、またはファームウェアを維持することができる。一実施形態では、ロジックという用語は、トランジスタ、レジスタ、または、その他のハードウェア（例えばプログラマブルロジックデバイス等）のハードウェアを含む。別の実施形態では、ロジックは、さらに、ハードウェアに集積されたソフトウェアまたはコード（例えばファームウェアまたはマイクロコード）を含むこともできる。
【００８７】
ここで利用する「値」という用語は、数、状態、論理状態、またはバイナリの論理状態等の任意の公知の表現を含んでよい。多くの場合、論理レベル、論理値、またはロジック値といった用語の利用は、１または０で表され、これは単にバイナリ値の論理状態を表している。例えば１は高論理レベルを表し、０は低論理レベルを表す。一実施形態では、格納セル（例えばトランジスタ、フラッシュセル等）は、単一の論理値または複数の論理値を保持することができてよい。しかしコンピュータシステムにおいては値の他の表現も利用されてきた。例えば十進法における１０も、バイナリ値の１０１０として表され、１６進法のＡで表すことができる。従って値には、コンピュータシステムで保持可能な任意の情報の表現法が含まれてよい。
【００８８】
さらに、状態は、値または値の一部で表されてよい。一例としては、第１の値（例えば論理値１）がデフォルトまたは初期状態を表し、第２の値（例えば論理値０）が非デフォルト状態を表してよい。加えて、リセットおよび設定／セットといった用語は、一実施形態では、デフォルトの値または状態、または、更新された値または状態をそれぞれ表してよい。例えばデフォルト値は潜在的に高論理値（リセット）を含み、更新された値は潜在的に低論理値（設定／セット）を含む。値を任意の組み合わせで利用して、任意の数の状態を表すこともできる。
【００８９】
上述した方法、ハードウェア、ソフトウェア、ファームウェア、またはコードの実施形態は、処理エレメントにより実行可能な機械アクセス可能、または機械可読媒体上に格納される命令またはコードにより実装可能である。機械アクセス可能／可読媒体には、コンピュータまたは電子システム等の機械が読み取ることのできる形態で情報を提供する（格納および／または送信する）任意のメカニズムが含まれてよい。例えば、機械アクセス可能媒体には、ランダムアクセスメモリ（ＲＡＭ）（静的ＲＡＭ（ＳＲＡＭ）または動的ＲＡＭ（ＤＲＡＭ））、ＲＯＭ、磁気または光学格納媒体、フラッシュメモリデバイス、電気格納デバイス、光学格納デバイス、音声格納デバイス、その他の形態の伝播信号（搬送波、赤外線信号、デジタル信号）の格納デバイス等が含まれてよい。例えば機械は、伝播信号（搬送波等）を搬送波信号に送信される情報を保持することのできる媒体から受信することで格納デバイスにアクセスすることができる。
【００９０】
本明細書における「一実施形態」「１つの実施形態」といった言い回しは、特定の実施形態との関連で示される特定の特徴、構造、または特性が、本発明の少なくとも１つの実施形態に含まれることを示している。従って「一実施形態」「１つの実施形態」といった言い回しは明細書の随所に登場するが、これらは必ずしも同じ実施形態のことを言及しているわけではない。さらに、特定の特徴、構造、または特性は、１以上の実施形態において任意の適切な方法で組み合わせることができる。
【００９１】
前述した明細書では、特定の例示的な実施形態を参照しながら詳しい記載を述べてきた。しかし、添付請求項に述べられた本発明の広義の精神および範囲を逸脱せずに様々な変更例および変形例が可能である。明細書および図面は、制限的ではなく例示的な意味で捉えられるべきである。さらに前述した実施形態その他の例示的な言語の利用は、必ずしも同じ実施形態または同じ例についてのことではなく、異なる、または別個の実施形態のことを言っている場合もあり、同じ実施形態のことを潜在的に示している場合もある。
【図１】
0005442765.tif 000002
【図２】
0005442765.tif 000003
【図３】
0005442765.tif 000004
【図４】
0005442765.tif 000005
【図５】
0005442765.tif 000006