(57)【特許請求の範囲】
【請求項１】
キャッシュメモリの一部に投機的に書き込み、前記キャッシュメモリの前記一部のコピーを作成し、前記キャッシュメモリの前記一部のコピーを更新する論理、
キャッシュラインへのデータ及び前記キャッシュラインの無効化を伴わない所有権の投機的要求を実行し、前記キャッシュラインからのデータがない前記キャッシュラインの所有権の受領確認を検知する論理、
データを伴わない前記所有権の投機的要求が検知されると、前記キャッシュラインの有効なコピーのバックアップコピーを作成する論理、及び、
キャッシュラインのデータを伴わない所有権の投機的要求を検知して、
前記キャッシュラインのコピーを作成し、
前記コピーを遠隔ログ状態にタグ付する論理
を有するプロセッサコアを備えるプロセッサ。
【請求項２】
前記プロセッサコアは、前記キャッシュメモリの前記一部のコピーを投機状態としてタグ付する論理を有する、請求項１に記載のプロセッサ。
【請求項３】
前記プロセッサコアは、前記キャッシュメモリの前記一部のコピーに関連付けられたコミットを実行する論理を有する、請求項１または２に記載のプロセッサ。
【請求項４】
前記プロセッサコアは、前記コミットに一部基づいて前記キャッシュメモリの前記一部のコピーを異なる有効な状態にタグ付する論理を有する、請求項３に記載のプロセッサ。
【請求項５】
前記プロセッサコアは、前記コミットに一部基づいて前記キャッシュメモリの前記一部を破棄する論理を有する、請求項４に記載のプロセッサ。
【請求項６】
前記プロセッサコアは、前記キャッシュメモリの前記一部をログ状態にタグ付する論理を有する、請求項１に記載のプロセッサ。
【請求項７】
前記プロセッサコアは、
前記キャッシュラインをログ状態にタグ付して、
前記キャッシュラインの新たなバージョンを作成して、
前記新たなバージョンを投機状態にタグ付する論理を有する、請求項５又は６に記載のプロセッサ。
【請求項８】
前記プロセッサコアは、前記新たなバージョンに書き込みを実行する論理を有する、請求項７に記載のプロセッサ。
【請求項９】
前記プロセッサコアは、
前記新たなバージョンに関連付けられるコミットを実行して、
前記新たなバージョンの前記投機状態を有効状態に変更して、
前記キャッシュラインの前記ログ状態を無効状態に変更する論理を有する、請求項７に記載のプロセッサ。
【請求項１０】
前記プロセッサコアは、
前記ログ状態の前記キャッシュラインに関連付けられるロールバックを実行して、
前記新たなバージョンの状態を無効状態に変更して、
前記ログ状態の前記キャッシュラインの前記状態を有効状態に変更する論理を有する、請求項７または８に記載のプロセッサ。
【請求項１１】
前記１以上の他のプロセッサコアは、前記プロセッサのアンコアで、データを伴わない前記所有権の投機的要求を検知する論理を有する、請求項１０に記載のプロセッサ。
【請求項１２】
前記１以上の他のプロセッサコアは、
前記バックアップコピーを遠隔ログ状態にタグ付して、
前記バックアップコピーを前記プロセッサコアの識別子にタグ付する論理を有する、請求項１０または１１に記載のプロセッサ。
【請求項１３】
前記１以上の他のプロセッサコアは、
前記プロセッサコアの識別子および前記キャッシュラインと関連付けられるコミットを検知し、
前記コミットに一部基づいて前記バックアップコピーを破棄する論理を有する、請求項１０から１２のいずれか一項に記載のプロセッサ。
【請求項１４】
前記プロセッサコアは、
前記キャッシュラインに関連付けられるロールバック処理を検知して、
前記コピーを異なる有効な状態にタグ付する論理を有する、請求項１から１３のいずれか１項に記載のプロセッサ。
【請求項１５】
前記プロセッサコアは、
前記キャッシュラインに関連付けられるコミット処理を検知して、
前記コピーを無効状態にタグ付する論理を有する、請求項１から１３のいずれか１項に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
ここに記載する実施形態は、概して、プロセッサの処理に関する。より詳しくは、一部の実施形態は、マルチコアプロセッサのメモリ階層のキャッシュコヒーレンシーに関する。
【背景技術】
【０００２】
マルチコアプロセッサでは、キャッシュコヒーレンシーはキャッシュメモリに格納されているデータの一貫性に関する。マルチコアプロセッサシステムのプロセッサコア等の実体がキャッシュを維持している場合には、データに一貫性がなくなる、という問題が生じる場合がある。たとえば第１の処理コアが、前の読み出しからのキャッシュラインのコピーを有しており、第２のプロセッサコアが、そのキャッシュラインを変更して、変更通知を行わなかったような場合、第１のプロセッサコアには、無効なキャッシュラインが残ってしまう。キャッシュのコヒーレンスは、このようなコンフリクトを管理して、キャッシュメモリの一貫性を管理することが意図されている。
【０００３】
マルチコアプロセッサシステムでは、基本キャッシュコヒーレンシープロトコル（ＭＳＩ（Modified Shared Invalid）プロトコル等）が、キャッシュコヒーレンシーを維持するために利用される。他のキャッシュコヒーレンシープロトコル同様、プロトコル名の文字は、キャッシュラインがおかれている可能性のある状態を特定している。ＭＳＩプロトコルについては、キャッシュ内の各ブロック（たとえばライン）が、（１）修正された状態：ブロックがキャッシュで修正されている。次いでキャッシュのデータがバッキングストア（たとえばメモリ）と一致しなくなる。修正された状態のブロックをもつキャッシュは、そのブロックを、退去時にバッキングストアに書き込む役目をもつ。（２）共有状態：このブロックは、未修整であり、少なくとも１つのキャッシュに存在している。キャッシュは、バッキングストアに書き込むことなくデータを退去させることができる。（３）無効状態：このブロックは無効であるので、ブロックをこのキャッシュに格納する場合には、メモリまたは別のキャッシュからフェッチされる必要がある、という３つの可能性のある状態のいずれかをとることができる。
【０００４】
これらのコヒーレンシー状態は、プロセッサコア、キャッシュ、および、バッキングストアの間の通信により維持される。たとえばあるコアが、書き込み処理を実行するためにキャッシュの一部（たとえばキャッシュライン）を必要とする場合、コアは、キャッシュラインの所有権要求（ＲＦＯ：Request For Ownership）を行う。これに応えて、キャッシュラインを現在所有している実体は、要求されているキャッシュライン内に含まれているデータを含む受領確認を返して応答して、自身のコピーを無効化する。
【０００５】
しかしコアが、そのキャッシュライン全体に対して書き込む場合には、コアは、上書きを予定している、このキャッシュラインの現在の内容を受信する必要がない。このような場合にキャッシュラインの内容を受信すると、リソースが無駄になり、マルチコアプロセッサのプロセッサコア間を接続する相互接続ネットワーク上のトラフィックの競合を増させる。
【０００６】
コアがキャッシュライン全体に書き込みを行うことを保証することは、潜在的な例外、割り込み、またはその他の、キャッシュライン全体が書き込まれる前に生じうる動的なイベントのために難しい。したがって、現在のプロセッサは、データなしに所有権をキャッシュラインに要求する場合に非常に保守的になり、この最適化をあまり利用することがない。しかし、投機的なサポートをいくらか含んでいるプロセッサ（たとえばトランザクショナルメモリ）は、この最適化をより積極的に利用するのに非常に適している。加えて、分析／最適化論理の類を含んでいるプロセッサ（たとえば動的バイナリ変換／最適化のサポート）であればさらに、この最適化を利用することができる。
【図面の簡単な説明】
【０００７】
【図１】高度なキャッシュコヒーレンシープロトコルを実行するために利用可能なマルチコアプロセッサの環境１００の一例を示す。
【０００８】
【図２】高度なキャッシュコヒーレンシープロトコルのキャッシュ状態の一例を示す。
【０００９】
【図３】高度なキャッシュコヒーレンシープロトコルのプロセッサ処理の一例を示す。
【００１０】
【図４】高度なキャッシュコヒーレンシープロトコルの非コアトランザクションの一例を示す。
【００１１】
【図５】マルチコアプロセッサの非コアから見た状態遷移の一例を示す。
【００１２】
【図６】マルチコアプロセッサのコアプロセッサから見た状態遷移の一例を示す。
【００１３】
【図７】高度なキャッシュコヒーレンシープロトコルの方法の一例を示すフローチャートである。
【００１４】
【図８】高度なキャッシュコヒーレンシープロトコルの方法の一例を示すフローチャートである。
【００１５】
【図９】高度なキャッシュコヒーレンシープロトコルの方法の一例を示すフローチャートである。
【００１６】
【図１０】複数のマルチコアプロセッサに高度なキャッシュコヒーレンシープロトコルを実行するために利用可能な環境１０００の一例を示す。
【発明を実施するための形態】
【００１７】
本開示は、キャッシュメモリの一部（たとえばキャッシュライン）のための、データを伴わない所有権の投機的要求（ＳＲＦＯＷＤ：Speculative Request For Ownership Without Data）を含む高度なキャッシュコヒーレンシープロトコルの実施形態の一例に関する。現在のＲＦＯと異なり、ＳＲＦＯＷＤでは、受領確認メッセージのみが返答として提供される。影響をうけるキャッシュラインの内容は、返答の一部として必須ではない。こうすることで、上書きされてしまうデータを転送するリソースの無駄を省くことができるようになるので、マルチコアプロセッサの相互接続ネットワーク上のトラフィックの競合を減らすことができる。
【００１８】
本文献の様々な実施形態で開示されるように、マルチコアプロセッサのコアは、一式の格納処理がキャッシュの全部分（たとえばキャッシュライン）を上書きすることを検知する場合には（たとえば投機する場合）、ＳＲＦＯＷＤを送信することができる。しかし、要求の投機的な性質から、現在のキャッシュラインのコピーを無効化する代わりに、高度なキャッシュコヒーレンシープロトコルが、現在のキャッシュラインの有効なコピーが、要求を出しているコアの投機間違いの場合にも確実に存在するようにすることができる。したがって、キャッシュラインの現在のコピーの所有者は、キャッシュラインの古い内容のコピーを維持することができる。キャッシュラインの古い内容は、要求を発しているコアの投機が正確であることがわかると、破棄されてよい。要求を発しているコアの投機が間違いであった場合には、キャッシュラインの古い内容を、有効状態に戻す。
【００１９】
＜システムアーキテクチャの例＞
図１は、高度なキャッシュコヒーレンシープロトコルを実行するために利用可能なマルチコアプロセッサの環境１００の一例を示す。プロセッサ１０２は、それぞれコアが高度なキャッシュコヒーレンシープロトコルの少なくとも一部を実装する論理を有している１以上のプロセッサコア１０４（１）から１０４（Ｎ）を有するマルチコアプロセッサ（たとえば、１つの集積回路ダイ上のマルチコアプロセッサ）を含んでよい。
【００２０】
コア１０４（１）は、関連するコアキャッシュ１０６（１）を有してよい。キャッシュ１０６（１）は、たとえば、レベル１（Ｌ１））キャッシュ等のプロセッサコア１０４（１）が直接アクセスすることができるキャッシュメモリを含んでよい。一実施形態では、キャッシュ１０６（１）を、コア１０４（１）の一部と捉えてもよい。図１を説明する便宜上、キャッシュ１０６（１）は１つのキャッシュとして示されているが、コア１０４（１）内には複数のキャッシュが含まれていてもよい。
【００２１】
コア１０４（１）同様に、コア１０４（Ｎ）が、関連するコアキャッシュ１０６（Ｎ）を有してよい。キャッシュ１０６（１）同様に、キャッシュ１０６（Ｎ）は、たとえば、レベル１（Ｌ１）キャッシュ等のコア１０４（Ｎ）が直接アクセスすることができるキャッシュメモリを含んでよい。一実施形態では、キャッシュ１０６（Ｎ）は、コア１０４（Ｎ）の一部と考えてよい。図１を説明する便宜上、キャッシュ１０６（Ｎ）は、１つのキャッシュとして示されているが、コア１０４（Ｎ）内には複数のキャッシュが含まれていてもよい。
【００２２】
プロセッサ１０２は、さらに、非コア１０８を含んでよい。非コア１０８は、コアにないが、コア１０４（１）から１０４（Ｎ）の機能を実行するために本質的であってよいハードウェアコンポーネントを含んでよい。一実施形態では、非コア１０８は、これもコア１０４（１）から１０４（Ｎ）を含む１つの集積回路ダイの上のマルチコアチップの一部であってよい。
【００２３】
一例として、非コア１０８は、コア相互接続ネットワーク１１０、非コアキャッシュ１１２、メモリコントローラ１１４（プロセッサ１０２の外部にあってよいメモリ１１６に対するアクセスを制御するためのもの）、およびその他の非コアデバイス１１８を含んでよいが、これらに限定はされない。キャッシュ１１２は、たとえば、Ｌ２キャッシュ、Ｌ３キャッシュ等の、コア１０４（１）から１０４（Ｎ）の少なくとも１つがアクセス可能なキャッシュメモリを含んでよい。図１を説明する便宜上、キャッシュ１１２は、非コア１０８内の１つのキャッシュとして示されている。しかし、キャッシュ１１２は、非コア１０８内に分散されている複数のキャッシュ、非コア１０８の外部の１以上のキャッシュ、プロセッサ１０２の外部の１以上のキャッシュ等を含んでもよい。
【００２４】
プロセッサ１０２内の各キャッシュメモリは、システムの他のエージェントと通信して、たとえばコア１０４（１）から１０４（Ｎ）によって相互接続ネットワーク１１０を介してキャッシュメモリアクセスおよび、キャッシュコヒーレンシープロトコル１２６の実装を促すための関連する相互接続インタフェースコントローラを有してよい。たとえば、相互接続インタフェースコントローラ１２０（１）は、キャッシュ１０６（１）の相互接続ネットワーク１１０への接続を促すためにキャッシュ１０６（１）に取り付けられる。同様に、相互接続インタフェースコントローラ１２０（Ｎ）がキャッシュ１０６（Ｎ）に取り付けられ、相互接続インタフェースコントローラ１２４が、キャッシュ１１２に取り付けられて、これらに関連するキャッシュの、相互接続ネットワーク１１０への接続を促す。一例としては、相互接続インタフェースコントローラ１２０（１）は、コア１０４（１）と非コア１０８との間でメッセージ交換およびメッセージの変換を行い、キャッシュコヒーレンシープロトコル１２６を促すことができる。同様に、相互接続インタフェースコントローラ１２０（Ｎ）が、コア１０４（Ｎ）と非コア１０８との間でメッセージ交換およびメッセージの変換を行い、キャッシュコヒーレンシープロトコル１２６を促すことができる。このようにして、相互接続インタフェースコントローラ１２０（１）から１２０（Ｎ）および１２４は、コア１０４（１）から１０４（Ｎ）および非コア１０８の間の活動および処理の観察および応答の両方または片方ができてよい。
【００２５】
相互接続ネットワーク１１０は、コア１０４（１）から１０４（Ｎ）および非コア１０８、並びに、非コア１０８のコンポーネント（たとえばキャッシュ１１２）の間のメッセージ交換およびデータ転送を行うバス状の相互接続ネットワーク機能を実装することができる。
【００２６】
ここで記載したように、複数のコアが、キャッシュメモリの様々なブロックおよびラインの所有権またはアクセス権を求める場合があるので、データに一貫性がなくなる、という問題が生じる場合がある。したがってプロセッサ１０２は、キャッシュコヒーレンシープロトコル１２６等の高度なキャッシュコヒーレンシープロトコルを実装して、キャッシュメモリの部分（たとえば特定のキャッシュライン）の有効性および利用可能性を保証する。
【００２７】
一例として、キャッシュコヒーレンシープロトコル１２６の一実施形態では、コア１０４（１）が、キャッシュメモリの一部（たとえば特定のアドレスまたはインデックスを有するキャッシュライン）のための、データを伴わない所有権の投機的要求（ＳＲＦＯＷＤ）を実行することができる。このＳＲＦＯＷＤ処理は、次に、相互接続インタフェースコントローラ１２０（１）により、相互接続インタフェースコントローラ１２０（１）によって、コア１０４のうちの他のものに、相互接続ネットワーク１１０経由で送られた非コアメッセージに変換されてもよい。要求されているキャッシュラインは、たとえば、現在たとえばコア１０４（Ｎ）により所有されており、修正された状態（修正状態）のコア１０４（Ｎ）のキャッシュメモリ１０６（Ｎ）に常駐していてよい。コア１０４（Ｎ）は、要求されているキャッシュラインの所有権をコア１０４（１）に許可して、一方では、異なる状態（たとえば遠隔ログされた等）としてタグ付されている現在のキャッシュラインのコピーまたはバージョンを維持してよい。コア１０４（Ｎ）は、次に、キャッシュラインのデータ内容をコア１０４（１）に提供することなく、コア１０４（１）に現在のキャッシュラインの所有権を許可することができる。次にコア１０４（１）は、たとえばキャッシュ１０６（１）の、要求されているキャッシュラインの所有権を取得することができる。一実施形態では、コア１０４（１）は、コア１０４（１）が、キャッシュライン全体の完全な書き込みを投機的にコア１０４（１）が実行するように、ＳＲＦＯＷＤ処理を実行することができる。一実施形態では、コア１０４（１）が、キャッシュライン全体の完全な書き込みが投機ミスであった場合、コア１０４（Ｎ）は、現在のキャッシュラインのコピーまたはバージョンを有効状態に遷移させることができる。一実施形態では、コア１０４（１）がキャッシュライン全体の書き込みを無事に完了した場合、コア１０４（Ｎ）が、現在のキャッシュラインのコピーまたはバージョンを、無効状態に遷移させることができる。
【００２８】
別の例として、キャッシュコヒーレンシープロトコル１２６の一実施形態では、コア１０４（１）が、共有状態にあるキャッシュ１１２に常駐しているキャッシュラインの所有権要求（ＲＦＯ）またはＳＲＦＯＷＤを行うことを想定する。コア１０４の他のものが、共有状態のこれらに関連するキャッシュ１０６に、要求されているキャッシュラインを保持することができる。この例では、相互接続インタフェースコントローラ１２０（１）が、ＲＦＯまたはＳＲＦＯＷＤ処理を、コア１０４（１）から、相互接続ネットワーク１１０経由で送られた関連する非コアメッセージに変換して、コア１０４の他のものに、キャッシュラインの命名のコピーを破棄または無効化させることができる。一実施形態では、コア１０４（１）が、次に所有権を得て、キャッシュラインを別の状態（たとえば投機状態）としてタグ付することができる。
【００２９】
別の例として、キャッシュコヒーレンシープロトコル１２６の一実施形態では、コア１０４（１）が、修正された状態にあるキャッシュ１０６（１）に常駐しているキャッシュラインの所有権要求（ＲＦＯ）またはＳＲＦＯＷＤを行ってよい。この例では、処理によって、コア１０４（１）は、キャッシュラインを、別の（ログされた）状態としてタグ付して、別の状態（たとえば投機状態）の要求されたキャッシュラインの新たなコピーまたはバージョンを作成する。
【００３０】
図１を説明する便宜上、キャッシュコヒーレンシープロトコル１２６は、非コア１０８およびコア１０４（１）から１０４（Ｎ）の外部に描かれている。しかし様々な実施形態では、キャッシュコヒーレンシープロトコル１２６は、その全体または一部が、非コア１０８、コア１０４（１）から１０４（Ｎ）およびプロセッサ１０２のその他の任意の部分の少なくともいずれかの中に実装されていてもよい。
【００３１】
一例として、キャッシュコヒーレンシープロトコル１２６を利用して、キャッシュライン（たとえば６４バイトのキャッシュブロック）の内容および状態の制御または修正を促すことができる。キャッシュコヒーレンシープロトコル１２６を利用して、コア１０４（１）から１０４（Ｎ）、非コア１０８、相互接続インタフェースコントローラ１２０（１）から１２０（Ｎ）および１２４等に関連した様々なメッセージまたは要求（たとえば処理）に応答することができる。キャッシュコヒーレンシープロトコル１２６はさらに、コア１０４（１）から１０４（Ｎ）、非コア１０８のうちの少なくとも１つに関連付けられる処理に対応したキャッシュの現在の状態（たとえばキャッシュラインの状態）に関連する様々な遷移を制御することもできる。一実施形態では、コアプロセッサ１０４（１）から１０４（Ｎ）のうちの１以上が、キャッシュコヒーレンシープロトコル１２６に影響を与えうる処理を実行する場合がある。これら処理は、キャッシュコヒーレンシープロトコル１２６によって、たとえば相互接続インタフェースコントローラ経由で、非コア１０８を介してトランザクション、要求、およびメッセージの少なくとも１つに変換され、これにより、キャッシュの一部（たとえばキャッシュライン）の状態遷移がなされてもよい。相互接続インタフェースコントローラ１２０は、関連するコア１０４からのメッセージまたは処理を変換して、同時に、同期させて、または非同期で、コア１０４のうちの少なくとも１つに非コアメッセージを提供することができる。別の実施形態では、キャッシュコヒーレンシープロトコル１２６が、非コアメッセージをコア１０４のうちの１以上に対して提供しない、という判断を行ったり、そのように検知したり、構成されていたりしてもよい。
【００３２】
加えて、一実施形態では、コアプロセッサ１０４（１）から１０４（Ｎ）のうちの１以上が、キャッシュラインの状態遷移を非コア１０８と相互作用せずに生じさせることが可能な処理を、キャッシュコヒーレンシープロトコル１２６と協働して実行してもよい（たとえば、相互接続インタフェースコントローラは、コア１０４のいずれにも非コアメッセージを送信しなくてもよい）。
【００３３】
共通のキャッシュコヒーレンシープロトコルの一例には、ＭＳＩ（Modified, Shared and Invalid）、ＭＥＳＩ（Modified, Exclusive, Shared and Invalid）、ＭＯＳＩ（Modified, Owned, Shared and Invalid）、ＭＯＥＳＩ（Modified, Owned, Exclusive, Shared and Invalid）、ＭＥＲＳＩ（Modified, Exclusive, Read Only or Recent, Shared and Invalid）、ＭＥＳＩＦ（Modified, Exclusive, Shared, Invalid and Forward）、Ｓｙｎａｐｓｅ、Ｂｅｒｋｅｌｅｙ，Ｆｉｒｅｆｌｙ，Ｄｒａｇｏｎ等が含まれる。
【００３４】
説明するように、キャッシュコヒーレンシープロトコル１２６の実施形態は、共通のキャッシュコヒーレンシープロトコルを拡張したり、より高度にしたり、変更または修正を加えたりすることができる。これらの、拡張したり、より高度にしたり、変更または修正したりといった処理のほんの数例の利点を挙げると、キャッシュミスが減ること、マルチコアプロセッサの相互接続ネットワーク上でのトラフィックおよびトラフィックの競合が減ること、および、失敗したトランザクションの効率的なロールバックが可能となること、などである。これらの利点およびその他の利点によって、マルチコアプロセッサの速度、パフォーマンス、および効率のうち少なくとも１つを向上させることができる。
【００３５】
＜キャッシュライン状態の例＞
図２は、高度なキャッシュコヒーレンシープロトコル（たとえばキャッシュコヒーレンシープロトコル１２６など）のキャッシュ状態２０２の一例を示す。簡単な説明をめざして、図２は、ＭＳＩキャッシュコヒーレンシープロトコルの延長を表すキャッシュ状態２０２を示している。しかし、図２に示す状態は、単独で、または他の特徴といずれの形式で組み合わせて、他のキャッシュコヒーレンシープトロコル（たとえば、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ，ＭＥＲＳＩ、ＭＥＳＩＦ、write-once、Ｓｙｎａｐｓｅ、Ｂｅｒｋｅｌｅｙ、Ｆｉｒｅｆｌｙ、Ｄｒａｇｏｎ等）に拡張するように応用することが容易である。
【００３６】
キャッシュ状態２０２は、キャッシュの一部の状態の様々な例に関している。一実施形態では、キャッシュの一部は、整数個のバイトを含むキャッシュの１つのラインまたは１つのブロックを含んでよい。別の実施形態では、キャッシュの一部が、整数個ではないバイト、または、整数個のビットを含むキャッシュの１つのラインまたは１つのブロックを含んでもよい。
【００３７】
簡単な説明をめざして、特にキャッシュ状態２０２を有することができるキャッシュの一部を、キャッシュラインと称することにする。一例として、このキャッシュの一部は、キャッシュ１０６（１）から１０６（Ｎ）またはキャッシュ１１２のいずれかのキャッシュラインであってよい。
【００３８】
図２は、共有（ＳＨ）２０４、修正（Ｍ）２０６、無効（Ｉ）２０８、観察（Ｏ）２１０、投機的（Ｓ）２１２、ログ（Ｌ）２１４、および、遠隔ログ（ＲＬ）２１６を含んだ、キャッシュ状態２０２の１つにおけるキャッシュラインの例を示す。
【００３９】
ＳＨ２０４は、共有状態の一例である。状態ＳＨ２０４のキャッシュラインは、共有および無修正の状態で存在していてよい（たとえば有効状態）。状態ＳＨ２０４は、キャッシュが、キャッシュラインの最新のバージョンを含み、キャッシュラインが、共有状態にある他のコアのキャッシュメモリに存在していてもよいことを示していてよい。状態ＳＨ２０４のキャッシュラインは、このキャッシュラインが、複数のキャッシュに格納されており、「クリーン」であることを示していてよく、これは、メインメモリ（たとえばメモリ１１６）のキャッシュラインのコピーに合致することを示唆している。状態ＳＨ２０４のキャッシュラインは、いつでも破棄することができる。一例として、コア１０４は、状態ＳＨ２０４のキャッシュラインには、まずキャッシュラインの所有権を要求しなくては、書き込みができない。
【００４０】
Ｍ２０６は、修正状態の一例である。状態Ｍ２０６のキャッシュラインは、修正状態で存在することができる（つまり、キャッシュラインの古いバージョンを含んでいてよい）。たとえば、状態Ｍ２０６のキャッシュラインは、ダーティであると考えることができ、これは、メインメモリにおける自身の関連値から修正されていることを示唆している。状態Ｍ２０６のキャッシュラインを含むキャッシュは、メインメモリの状態（もはや有効ではない）の他の呼び出しを許可する前に、将来のいつかの時点において、キャッシュラインのデータをメインメモリに書き戻す必要があるようなものである。一例としては、コア１０４が、キャッシュラインの所有権を要求することができ、所有権要求が許可されると、次にコア１０４がキャッシュラインを更新することができる。ひとたびコア１０４がキャッシュラインの更新を行うと、キャッシュラインは状態Ｍ２０６となる。他のコア１０４は、このキャッシュラインが、キャッシュメモリ１０６のいずれかにおいて修正状態Ｍ２０６である場合、クリーンまたはダーティなコピーを有していてよい。
【００４１】
Ｉ２０８は、キャッシュラインが無効であると考えられる無効状態の一例である。状態Ｉ２０８のキャッシュラインは、有効ではなく、もはやキャッシュには存在していないキャッシュラインと考えられる。
【００４２】
Ｏ２１０は、観察状態の一例である。たとえば状態Ｏ２１０は、コア１０４によって、キャッシュラインが投機的に読み出されていることを示唆してよい。メインメモリ（または他のコアが共有しているキャッシュメモリ）は、状態Ｏ２１０のキャッシュラインの最新バージョンを含んでよい。たとえば、キャッシュラインは、投機的読み出し処理によりコア１０４が読み出し、またはロードを行った後に、状態Ｏ２１０としてマークされてよい。一実施形態では、状態Ｏ２１０のキャッシュラインに対してコミットまたはロールバックが行われると、当該キャッシュラインは、共有状態ＳＨ２０４に遷移してよい。
【００４３】
Ｓ２１２は、投機状態の一例である。たとえば状態Ｓ２１２は、特定のキャッシュにあるキャッシュラインが存在しており（たとえば有効である）、且つ、既に投機的に修正されている（または今後、投機的に修正される）ことを示唆していてよい。メインメモリは、キャッシュラインの古くなったバージョンを含んでいてよい。他方で、他のキャッシュメモリ１０６は、キャッシュラインの有効なコピーを有していない。これに対する例外は、唯一存在している他のキャッシュ１０６が、遠隔ログ状態にあるキャッシュラインの古い内容をもつコピーを含んでいるような場合であり、これに関しては後述する。一例としては、状態Ｓ２１２が、投機的ロード（たとえば読み出し）ではなく投機的格納（たとえば書き込み）に関している点を除いては、状態Ｏ２１０と同等であってもよい。一実施形態では、投機状態Ｓ２１２のキャッシュラインは、コミットを実行すると修正状態Ｍ２０６に遷移してよく、一方でロールバックの際には無効状態Ｉ２０８に遷移する。
【００４４】
Ｌ２１４は、ログ状態の一例である。一実施形態では、状態Ｌ２１４のキャッシュラインは、状態Ｓ２１２のキャッシュラインの古いコピーまたは対応する投機的バージョンであってよい。
【００４５】
一実施形態では、ログ状態Ｌ２１４は、修正状態Ｍ２０６がトランザクション内に、たとえば修正状態Ｍ２０６のラインを所有しているものと同じコアによって書き込まれる場合に利用されてよい。この場合、影響を受けるキャッシュラインは、ログ状態Ｌ２１４にされ、キャッシュラインのコピーが作成されて、投機状態Ｓ２１２にタグ付される。キャッシュラインの投機コピーは、次に、トランザクション内の書き込み処理によって更新されてよい。トランザクションコミットの場合（つまり、トランザクションが成功した場合）、投機状態Ｓ２１２のラインが修正状態Ｍ２０６にされ、ログ状態Ｌ２１４のラインを破棄することができる（無効状態２０８にする）。他方で、トランザクションがロールバックした場合には（トランザクションが成功しなかった場合）、投機状態Ｓ２１２のラインを破棄して（無効状態Ｉ２０８にする）、ログ状態Ｌ２１４のキャッシュラインを修正状態Ｍ２０６に戻して、キャッシュラインの古い内容を復帰させる。一実施形態では、投機状態Ｓ２１２のキャッシュラインは常にシステムのどこかに古い内容をもつクリーンコピーをもつことで、ロールバックの場合には状態復帰をすることができる。たとえば、古い内容は、同じキャッシュ１０６にログ状態Ｌ２１４であってもよいし、別のキャッシュ１０６に遠隔ログされていてもよいし、キャッシュ１１２またはメインメモリにコピーを有していてもよい。
【００４６】
ＲＬ２１６は、遠隔ログ状態の一例である。一実施形態では、状態ＲＬ２１６のキャッシュラインは、別のコアが完全な更新を要求してきているキャッシュラインの古いコピーバージョンである。
【００４７】
一実施形態では、コア１０４（１）が、たとえばトランザクション実行の一部として、キャッシュライン全体を上書きするとして検知（たとえば投機）することができる。コア１０４（１）は、ＳＲＦＯＷＤを実行して、たとえば、修正状態Ｍ２０６のラインを有していたコア１０４（Ｎ）からキャッシュラインの所有権を取得してよい。コア１０４（Ｎ）は、次に、遠隔ログ状態２１６にキャッシュラインの現在のコピーを維持することができる。コア１０４（１）がトランザクションを完了することができない場合には、コア１０４（Ｎ）は、遠隔ログ状態２１６にマークされているキャッシュラインを、有効状態（たとえば修正状態Ｍ２０６）に復元することができる。コア１０４（１）がトランザクションを成功裏に完了した場合には、コア１０４（Ｎ）が、無効状態２０８に移動させることで、遠隔ログ状態２１６のキャッシュラインを破棄することができる。
【００４８】
したがい、上述した状態の例を利用すると、例である環境１００が、違反を検知するメカニズムを持つことができ、キャッシュラインの古い内容を復帰させるサポートを行うことができるようになる。
【００４９】
＜プロセッサ処理の例＞
図３は、キャッシュコヒーレンシープロトコル１２６をサポートするよう実行可能なプロセッサ処理３０２をもつ環境３００の一例を示す。たとえば、プロセッサ処理３０２は、プロセッサコア１０４（１）から１０４（Ｎ）の１以上により実行されて、キャッシュコヒーレンシープロトコル１２６に影響を与える。
【００５０】
プロセッサ処理３０２の例には、プロセッサ読み出し（ＰＲｄ）３０４、プロセッサ書き込み（ＰＷｒ）３０６、プロセッサコミット（ＰＣｏ）３０８、プロセッサロールバック（ＰＲｏ）３１０、および、プロセッサ投機的完全書き込み（ＰＳＣＷｒ）３１２が含まれてよい。一実施形態では、プロセッサ処理３０２の一例が、１以上のプロセッサコア１０４により実行されてよい。一実施形態では、プロセッサ処理３０２が、たとえば、プロセッサコアによるトランザクションの実行中に実行されてもよい。しかし別の実施形態では、プロセッサ処理３０２が、たとえば、トランザクション内で、トランザクションの外部で、またはトランザクションの内外両方において、実行されてもよい。今後の記載では、明瞭を期すために、これらの処理をトランザクション内で実行する、として説明を行う。したがって、一実施形態では、プロセッサ読み出し（ＰＲｄ）３０４、プロセッサ書き込み（ＰＷｒ）３０６、および、プロセッサ投機的完全書き込み（ＰＳＣＷｒ）３１２が、トランザクションの投機的な性質から、投機的処理である。当業者であれば、トランザクションの外部で実行されるプロセッサの処理を説明するために必要な拡張を用意に想到することができる。
【００５１】
プロセッサ読み出し処理（ＰＲｄ）３０４は、プロセッサコアが、メモリ位置を読み出すロード命令を実行したことを示す。関連するキャッシュラインの状態に応じて、キャッシュコヒーレンシープロトコル１２６に知らせる必要がある場合がある。ＰＲｄ３０４は、プロセッサコアが読み出し命令を実行したことをキャッシュコヒーレンシープロトコル１２６に知らせるために利用されてよい。
【００５２】
プロセッサ書き込み処理（ＰＷｒ）３０６は、プロセッサコアが、メモリ位置に書き込む格納命令を実行したことを示す。関連するキャッシュラインの状態に応じて、キャッシュコヒーレンシープロトコル１２６に情報を知らせる必要がある。ＰＷｒ３０６は、プロセッサコアが書き込み命令を実行したことをキャッシュコヒーレンシープロトコル１２６に知らせるために利用されてよい。
【００５３】
プロセッサコミット処理（ＰＣｏ）３０８は、プロセッサコアが現在実行されているトランザクションにコミットすることを示す。ＰＣｏ３０８は、プロセッサコアがコミット命令を実行したことをキャッシュコヒーレンシープロトコル１２６に知らせるために利用されてよい。
【００５４】
プロセッサロールバック処理（ＰＲｏ）３１０は、プロセッサが、現在実行されているトランザクションにロールバックしてよいことを示している。ＰＲｏ３１０は、プロセッサコアがロールバック命令を実行したことをキャッシュコヒーレンシープロトコル１２６に知らせるために利用されてよい。一例としては、割り込み、メモリ違反、または、その他のイベントが、プロセッサコアが、トランザクションの実行を完了させないようにすることができる。この場合には、プロセッサが、他のコアに、トランザクションが成功しなかったことを通知する必要がある場合がある。これら他のコアの１以上は、トランザクションに関連付けられるキャッシュラインの古いコピーを保持している場合があるので、そのように動作して、これらが古いキャッシュラインコピーをロールバックする必要がある場合がある。
【００５５】
プロセッサ投機的完全書き込み処理（ＰＳＣＷｒ）３１２は、プロセッサコアが、キャッシュの一部（キャッシュライン全体）を上書きする旨を投機することを示す（つまり、キャッシュラインに対して投機的に書き込むこと）。したがって、他のコアは、この処理に関して知らされる必要がある場合がある。ＰＳＣＷｒ３１２は、キャッシュコヒーレンシープロトコル１２６に対して、プロセッサコアが、投機的な完了書き込み命令を実行したことを通知するために利用されてよい。一実施形態では、ＰＳＣＷｒ３１２処理が、データなしの所有権投機的要求（ＳＲＦＯＷＤ）と等しい。
【００５６】
一例としては、プロセッサコアは、完全なキャッシュラインを書きこむことを投機実行してよい。この場合には、プロセッサコアは、たとえばＰＳＣＷｒ３１２処理のような形式で、キャッシュラインのためにデータなしで投機的な所有権要求を送ることができる。一実施形態では、必要な場合には次に、キャッシュコヒーレンシープロトコル１２６が、非コア１０８の関連するメッセージの生成を促して、この処理をコア１０４に知らせてもよい。
【００５７】
＜非コアトランザクションの例＞
図４は、キャッシュコヒーレンシープロトコル１２６をサポートするために実行されてよい非コアトランザクション４０２を持つ環境４００の一例を示す。一例として、プロセッサ処理３０２は、非コア１０８で生じる非コアトランザクション４０２に変換されてよい。
【００５８】
非コアトランザクション４０２の例には、非コア読み出し（ＰＲｄ）４０４、非コア書き込み（ＰＷｒ）４０６、非コアコミット（ＰＣｏ）４０８、非コアロールバック（ＰＲｏ）４１０、および、非コア投機的完全書き込み（ＵＳＣＷｒ）４１２、および、データ（data）４１４が含まれてよい。
【００５９】
非コア読み出し（ＰＲｄ）４０４は、他のコアに、キャッシュラインが読み出された、または読み出されようとしていることを知らせる。キャッシュラインの状態によって、プロセッサが実行するＰＲｄ３０４処理は、ＵＲｄ４０４メッセージを非コア１０８で生成することができる。
【００６０】
非コア書き込み（ＵＷｒ）４０６は、他のコアに、キャッシュラインが書き込まれた、または書き込まれようとしていることを知らせる。キャッシュラインの状態によって、ＰＷｒ３０６処理は、非コアでＵＷｒメッセージを生成することができる。
【００６１】
非コアコミット（ＵＣｏ）４０８は、他のコアに、たとえば、コアがそのトランザクションにコミットしていることを知らせる。ＵＣｏ４０８のメッセージには、コミットを実行しているコアの識別子（ＩＤ）が含まれてよい。
【００６２】
非コアロールバック（ＵＲｏ）４１０は、他のコアに、たとえば、コアが、そのトランザクションをロールバックしていることを知らせる。このメッセージには、ロールバックを実行しているコアのＩＤが含まれてよい。
【００６３】
非コア投機的完全書き込み（ＵＳＣＷｒ）４１２は、他のコアに、たとえば、プロセッサが、投機的にデータなしに所有権要求をキャッシュラインに対して行っていることを知らせる。キャッシュラインの状態によって、コアが実行するＰＳＣＷｒ３１２処理は、非コアでＵＳＣＷｒ４１２を送信することを示唆してよい。このメッセージには、ＳＲＦＯＷＤ処理を実行しているコアのＩＤが含まれてよい。
【００６４】
データ（data）４１４は、コア（またはメインメモリ）のいずれかが、たとえばキャッシュラインの内容で応答する非コアトランザクションである。
【００６５】
＜キャッシュコヒーレンシー状態遷移の例＞
図５は、たとえば非コア１０８の相互接続インタフェースコントローラ１２０から見たキャッシュコヒーレンシープロトコル１２６のキャッシュ状態の状態遷移５０２−５３８を示す環境５００の例を示す。各状態遷移５０２−５３８は、非コア１０８で観察されるメッセージ（メッセージ／応答の対の第１のコンポ―ネント）、および、もしあれば、対応する状態遷移が生成した応答（つまりメッセージ／応答の対の第２のコンポーネント）として特定されてよい。
【００６６】
表１は、図５の状態遷移５０２−５３８と、関連する非コアメッセージ／応答の対の間の関連付けの例を示す。
【表１】
0005771289.tif 000002
【００６７】
図５では、各状態遷移５０２−５３８は、非コア１０８で観察されるメッセージ（たとえばメッセージ／応答の対のメッセージ部分）および関連する応答（たとえばメッセージ／応答の対の応答部分）で特定することができる。
【００６８】
この例としては、図５の状態遷移５３０（つまり、状態Ｍ２０６から状態ＲＬ２１６への遷移）は、表１の以下に示す非コアメッセージ／ｏｕｔの対に関連付けられる。
・ＵＳＣＷｒ４１２／−
【００６９】
この非コアメッセージ／応答の対では、ＵＳＣＷｒ４１２（つまり、非コア投機的完全書き込み）が、非コアで観察されるメッセージであり、一方では、状態遷移５３０が生成する非コアメッセージ／応答の対の応答部分が、「−」で示されており、これは、非コア１０８で「ほかに何もしない」ことを示唆している。
【００７０】
一例としては、状態遷移５３０で、ＵＳＣＷｒ４１２が、１以上のコアプロセッサ１０４によって非コア１０８内に観察されるメッセージであってよい。このＵＳＣＷｒ４１２メッセージは、ＰＳＣＷｒ３１２（プロセッサ投機的完全書き込み）処理を実行するコアプロセッサ１０４の１つであってよく、これは、コアプロセッサが、完全なキャッシュラインに、たとえばトランザクションの実行の一部として書き込むことができることを「投機する」ことを示唆している。キャッシュラインが、書き込みを実行しているものとは異なるコアのキャッシュに修正状態Ｍ２０６で現在あると想定すると、キャッシュラインの状態は、遠隔ログ状態ＲＬ２１６に遷移する。この状態遷移５３０に対する応答は、表１に、「−」として示されており、これは、状態遷移５３０への応答が他のものとは関係がないことを示唆している。
【００７１】
一実施形態では、状態遷移５３０に関して、キャッシュラインの所有権を有する第１のプロセッサコアが、第２のプロセッサコアに関連付けられるメッセージＵＳＣＷｒ４１２を観察すると、キャッシュラインのコピーを作成して、そのキャッシュラインを、状態ＲＬ２１６としてタグ付することができる。第１のプロセッサコアは、第２のプロセッサコアの識別子（ＩＤ）を、ＲＬ２１６のキャッシュラインと関連付けることができる。第１のコアは、さらに、キャッシュラインコピーのデータなしに受領確認を提供することで、第２のコアにキャッシュラインの所有権を手放して、状態ＲＬ２１６にキャッシュラインコピーを維持することができる。
【００７２】
別の例としては、図５の状態遷移５１２が（つまり状態ＲＬ２１６から状態Ｍ  ＲＬ２１６への遷移）が、表１で、次に示す非コアメッセージ／応答の対と関連付けられる。
・ＵＲｏ４１０／−
【００７３】
この非コアメッセージ／応答の対では、ＵＲｏ４１０（つまり非コアロールバック）が、非コアで観察されるメッセージであり、一方では、状態遷移５１２が生成する非コアメッセージ／応答の対の応答部分が、「−」で示されており、これは、非コア１０８で「ほかに何もしない」ことを示唆している。したがって、状態遷移５１２は、キャッシュラインに関連付けられ、非コア１０８により観察される非コアメッセージＵＲｏ４１０を受けて、状態ＲＬ２１６のキャッシュラインが、状態Ｍ２０６に遷移することを示唆していてよい。
【００７４】
したがって一実施形態では、第２のコアのＩＤに関連付けられる状態ＲＬ２１６にキャッシュラインのコピーを維持する第１のコアが、非コア１０８で第２のコアと関連付けられるＵＲｏ４１０（つまり非コアロールバック）メッセージを観察すると、キャッシュラインのコピーを状態Ｍ２０６に戻すことができる。
【００７５】
図５に示す別の例では、状態遷移５２４が、共有状態ＳＨ２０４から無効状態Ｉ２０８に遷移することを示す。表１では、状態遷移５２４が、以下の非コアメッセージ／応答の対に関連付けられる。
・ＵＷｒ４０６／−
・ＵＳＣＷｒ４１２／−
【００７６】
したがって、図５の状態遷移５２４は、表１では、ＵＷｒ４０６（つまり非コア書き込み）トランザクションと関連付けられて、応答としてはほかには何もしない（「−」で表す）か、または、ＵＳＣＷｒ４１２（つまり非コア投機的完全書き込み）トランザクションと関連付けられて、応答としてほかには何もしない。
【００７７】
したがってこの例では、非コア１０８で遷移ＵＷｒ４０６またはＵＳＣＷｒ４１２を観察する共有状態Ｓ２１２にキャッシュラインを保持するコアプロセッサが、キャッシュラインを、無効状態Ｉ２０８にして、この状態遷移５２４に応じてなんら他の処理を行わなくてよい。
【００７８】
図５に示す別の例として、状態遷移５０４は、ログ状態Ｌ２１４から遠隔ログ状態ＲＬ２１６への遷移を示している。表１では、状態遷移５０４が、以下の非コアメッセージ／応答の対に関連付けられる。
・ＵＳＣＷｒ４１２／ＵＲｏ４１０
【００７９】
図５の状態遷移５０４は、表１で、ＵＳＣＷｒ４１２（つまり非コア投機的完全書き込み）トランザクション、および、状態遷移５０４に応じて生成されたＵＲｏ４１０（つまり非コアロールバック）応答に関連付けられる。
【００８０】
状態遷移５０４に関する一実施形態では、第１のコアが、ログ状態Ｌ２１４のキャッシュライン、および、第１のコアによる更新に利用できる投機状態Ｓ２１２の関連する新たなキャッシュラインを保持していてよい。第２のコアは、ログ状態Ｌ２１４のキャッシュラインのためのデータ（たとえば実行処理ＰＳＣＷｒ３１２）なしの所有権の投機的要求を実行することができる。第１のコアは、第２のコアの要求に関連付けられるＵＳＣＷｒ４１２メッセージを検知して、ログ状態Ｌ２１４のキャッシュラインを、遠隔ログ状態ＲＬ２１６にして、投機状態Ｓ２１２のキャッシュラインの新たなバージョンを無効状態Ｉ２０８にすることができる。ロールバックメッセージＵＲｏ４１０は、状態遷移５０４に対する応答として生成されてよく、両方のコアで実行されるトランザクションにおけるコンフリクトが検知されたことにより、第１のコアがロールバックを実行したことを他のコアに通信してよい。
【００８１】
図５に示す別の例では、状態遷移５１４が、ログ状態Ｌ２１４から共有状態ＳＨ２０４への遷移を示している。表１では、状態遷移５１４が、以下の非コアメッセージ／応答の対に関連付けられる。
・ＵＲｄ４０４／ＵＲｏ４１０＋ｄａｔａ４１４
【００８２】
図５の状態遷移５１４は、表１では、ＵＲｄ４０４（つまり非コア読み出し）トランザクション、および、ＵＲｏ４１０（つまり非コアロールバック）に状態遷移５１４に応じて生成されたデータ４１４応答をプラスしたものに関連付けられる。
【００８３】
状態遷移５１４に関する一実施形態では、第１のコアが、ログ状態Ｌ２１４のキャッシュライン、および、第１のコアの更新のために利用される投機状態Ｓ２１２の関連する新たなキャッシュラインを保持していてよい。第２のコアは、ログ状態Ｌ２１４のキャッシュラインの読み出し（たとえば実行処理ＰＲｄ３０４）を実行してよい。第１のコアは、第２のコアの読み出しに関連付けられるＵＲｄ４０４メッセージを検知して、ログ状態Ｌ２１４のキャッシュラインを共有状態ＳＨ２０４にして、投機状態Ｓ２１２のキャッシュラインの新たなバージョンを、無効状態Ｉ２０８にしてよい。ロールバックメッセージＵＲｏ４１０は、データ（つまり読み出しが要求するデータ４１４）とともに、状態遷移５１４に対する応答として生成されてよく、実行されたトランザクションのコンフリクトが検知されたことにより、第１のコアがロールバックを実行したことを他のコアに通信してよい。
【００８４】
図５に示す別の例では、状態遷移５０８が、ログ状態Ｌ２１４から無効状態Ｉ２０８への遷移を示している。表１では、状態遷移５０８が、以下の非コアメッセージ／応答の対に関連付けられる。
・ＵＷｒ４０６／ＵＲｏ４１０＋ｄａｔａ４１４
【００８５】
図５の状態遷移５０８は、表１では、ＵＷｒ４０６（つまり非コア書き込み）トランザクション、および、ＵＲｏ４１０（つまり非コアロールバック）に状態遷移５０８に応じて生成されたデータ４１４応答をプラスしたものに関連付けられる。
【００８６】
状態遷移５０８に関する一実施形態では、第１のコアが、ログ状態Ｌ２１４のキャッシュライン、および、第１のコアの更新のために利用される投機状態Ｓ２１２の関連する新たなキャッシュラインを保持していてよい。第２のコアは、ログ状態Ｌ２１４のキャッシュラインの書き込み（たとえば実行処理ＰＷｒ３０６）を実行してよい。第１のコアは、第２のコアの書き込みに関連付けられるＵＷｒ４０６メッセージを検知して、ログ状態Ｌ２１４のキャッシュラインを無効状態Ｉ２０８にして、投機状態Ｓ２１２のキャッシュラインの新たなバージョンを、無効状態Ｉ２０８にしてよい。ロールバックメッセージＵＲｏ４１０は、データ（つまり書き込みが要求するデータ４１４）とともに、状態遷移５０８に対する応答として生成されてよく、実行されたトランザクションのコンフリクトが検知されたことにより、第１のコアがロールバックを実行したことを他のコアに通信してよい。
【００８７】
図５に示す別の例では、状態遷移５２６が、観察状態Ｏ２１０から無効状態Ｉ２０８への遷移を示している。表１では、状態遷移５２６が、以下の非コアメッセージ／応答の対に関連付けられる。
・ＵＷｒ４０６／ＵＲｏ４１０
・ＵＳＣＷｒ４１２／ＵＲｏ４１０
【００８８】
状態遷移５２６に関する一実施形態では、第１のコアが、観察状態Ｏ２１０のキャッシュラインを保持していてよい。第２のコアは、観察状態Ｏ２１０のキャッシュラインのために、書き込み（たとえば実行処理ＰＷｒ３０６）または投機的書き込み（たとえば実行処理ＰＳＣＷｒ３１２  ３０６）を実行してよい。第１のコアは、第２のコアの書き込みに関連付けられるＵＷｒ４０６またはＵＳＣＷｒ４１２メッセージを検知して、観察状態Ｏ２１０のキャッシュラインを無効状態Ｉ２０８にしてよい。ロールバックメッセージＵＲｏ４１０は、状態遷移５２６に対する応答として生成されてよく、実行されたトランザクションのコンフリクトが検知されたことにより、第１のコアがロールバックを実行したことを他のコアに通信してよい。
【００８９】
状態遷移５０２−５３８のうち上述しなかったものは、上述した例と同様の方法で解釈されてよい。
【００９０】
図６は、一例として、１以上のプロセッサコア１０４などのコアプロセッサから見たキャッシュコヒーレンシープロトコル１２６のキャッシュ状態２０２の状態遷移６０２−６４０を示す環境６００の例を示す。各状態遷移６０２−６４０は、コアプロセッサが実行するコアプロセッサ処理（つまりプロセッサ処理／応答の対の第１のコンポーネント）、および、もしあれば、対応する状態遷移に応じて非コアに生成された応答メッセージ（つまりプロセッサ処理／応答の第２のコンポーネント）として特定されてよい。
【００９１】
表２は、図６の状態遷移６０２−６４０と、関連する非コアメッセージ／応答の対の間の関連付けの例を示す。
【表２】
0005771289.tif 000003
【００９２】
図６では、各状態遷移６０２−６４０が、プロセッサ処理（プロセッサ処理／応答の対の処理部分など）および、もしあれば非コア内に生成されている応答メッセージ（プロセッサ処理／応答の対の応答部分など）で特定されてよい。
【００９３】
一例として、図６の状態遷移６２０（つまり、状態Ｍ２０６から状態Ｌ２１４への遷移）が、表２の以下のプロセッサ処理／応答の対に関連付けられる。
・ＰＳＣＷｒ３１２／−
・ＰＷｒ３０６／−
【００９４】
これらプロセッサ処理／応答の対では、ＰＳＣＷｒ３１２（つまり、プロセッサ投機完全書き込み）およびＰＷｒ３０６（つまりプロセッサ書き込み）が、コアプロセッサが実行可能なプロセッサ処理／応答の対の処理であり、状態遷移６２０が生成するプロセッサ処理／応答の各対の応答部分が、「ほかに何もしない」ことを意味する「−」で表される。
【００９５】
図６の状態遷移６２０の実施形態では、コアプロセッサ１０４が、キャッシュラインに関連付けられるＰＳＣＷｒ３１２処理を実行してよい。この処理は、コアプロセッサが、たとえばトランザクションの完了に成功することで、キャッシュライン全体に書き込みを行うことができると投機的に判断することを示していてよい。
【００９６】
図６の状態遷移６２０に示すように、キャッシュラインが、書き込みを実行しているコア１０４のキャッシュ１０６で修正状態Ｍ２０６にあると想定して、キャッシュラインがログ状態Ｌ２１４に遷移する。この状態遷移６２０に対する応答は、表２では、「ほかに何もしない」ことを意味する「−」で表されている。これは、メッセージを非コアで送り他のエージェントに処理に対する応答として通知する必要がないことを示している（というのも、処理は、書き込みを実行しているコア内でローカルに解決されているからである）。
【００９７】
一実施形態では、コアプロセッサが、キャッシュラインを状態Ｌ２１４にして、さらに、投機状態Ｓ２１２にタグ付されるキャッシュラインのコピーを生成する。コアプロセッサは次に、投機状態Ｓ２１２のキャッシュラインのコピーに書き込みを実行して、かつ、状態Ｌ２１４にログされている元のキャッシュラインを維持することができる。別の実施形態では、コアプロセッサは、投機状態Ｓ２１２のキャッシュラインのコピーに、コアプロセッサが、キャッシュライン全体に投機的に書き込むトランザクションの一環として書き込むことができる。
【００９８】
図６の別の例では、状態遷移６１０が、ログ状態Ｌ２１４から修正状態Ｍ２０６に遷移することを意味している。表２では、状態遷移６１０が以下のプロセッサ処理／応答の対に関連付けられる。
・ＰＲｏ３１０／−
【００９９】
したがい、図６の状態遷移６１０は、表２では、Ｐｒｏ３１０（つまりプロセッサロールバック）処理、および、ほかには何もしない（「−」で表される）応答に関連付けられる。一実施形態では、コアプロセッサは、ログ状態Ｌ２１４のキャッシュラインを生成した遷移を完了できないことを検知して、ＰＲｏ３１０処理を実行することもできる。次に、これが状態遷移６１０を生じさせ、状態Ｌ２１４のキャッシュラインが修正状態Ｍ２０６にロールバックする。
【０１００】
図６に示す別の例として、遷移状態６３０が、投機状態Ｓ２１２から修正状態Ｍ２０６への遷移を示している。表２では、状態遷移６３０が以下のプロセッサ処理／応答の対に関連付けられる。
・ＰＣｏ３０８／ＵＣｏ４０８
【０１０１】
したがい、図６の状態遷移６３０は、表２ではＰＣｏ３０８（つまりプロセッサコミット）処理および非コアで生成されたＵＣｏ４０８（つまり非コアコミット）応答メッセージに関連付けられる。
【０１０２】
一実施形態では、コアプロセッサは、状態Ｓ２１２にタグ付されているキャッシュラインに関するコミット処理ＰＣｏ３０８を実行することができ、これにより、キャッシュラインが状態Ｓ２１２から状態Ｍ２０６に、状態遷移６３０の一環として移動する。別の実施形態では、コアプロセッサが、トランザクションの完了に成功したことを検知すると、状態Ｓ２１２にタグ付されているキャッシュラインに影響を与えるコミット処理ＰＣｏ３０８を実行することができ、これにより、キャッシュラインが状態Ｓ２１２から状態Ｍ２０６に、状態遷移６３０の一環として移動する。また別の実施形態では、コアプロセッサユニットが、状態Ｓ２１２にタグ付されているキャッシュラインの元のコピーをログ状態Ｌ２１４に維持してもよい。
【０１０３】
別の例として、図６では、状態遷移６１６が、投機状態Ｓ２１２から無効状態Ｉ２０８に遷移することを示している。表２では、状態遷移６１６が、以下のプロセッサ処理／応答の対に関連付けられる。
・ＰＲｏ３１０／ＵＲｏ４１０
【０１０４】
したがって、図６の状態遷移６１６が、表２では、ＰＲｏ３１０（つまりプロセッサロールバック）処理、および、非コア１０８等の非コアで生成されたＵＲｏ４１０（つまり非コアロールバック）応答メッセージに関連付けられる。
【０１０５】
一実施形態では、コアプロセッサは、状態Ｓ２１２にタグ付されているキャッシュラインに関するコミット処理ＰＲｏ３１０を実行することができ、これにより、キャッシュラインが状態Ｓ２１２から状態Ｉ２０８に、状態遷移６１６の一環として移動する。別の実施形態では、コアプロセッサが、トランザクションの完了に成功しないことを検知すると、状態Ｓ２１２にタグ付されているキャッシュラインに影響を与えるコミット処理ＰＲｏ３１０を実行することができ、これにより、キャッシュラインが状態Ｓ２１２から状態Ｉ２０８に、状態遷移６１６の一環として移動する。また別の実施形態では、コアプロセッサが、状態Ｓ２１２にタグ付されているキャッシュラインの元のコピーをログ状態Ｌ２１４に維持して、状態Ｓ２１２にタグ付されているキャッシュラインが破棄されたときに、キャッシュラインの元のコピーがログ状態Ｌ２１４に残っているようにすることもできる。ログ状態Ｌ２１４のこのようなコピーは、この場合には、上述したように修正状態Ｍ２０６に遷移する。
【０１０６】
別の例として、図６では、状態遷移６０８が、ログ状態Ｌ２１４から無効状態Ｉ２０８に遷移することを示している。表２では、状態遷移６０８が、以下のプロセッサ処理／応答の対に関連付けられる。
・ＰＣｏ３０８−
【０１０７】
したがって、図６の状態遷移６０８が、表２では、ＰＣｏ３０８（つまりプロセッサコミット）処理、および、ほかには何もしない（「−」で表される）応答に関連付けられる。
【０１０８】
一実施形態では、コアプロセッサは、状態Ｌ２１４にタグ付されているキャッシュラインに関するコミット処理ＰＣｏ３０８を実行して、これにより、キャッシュラインが、状態Ｌ２１４から状態Ｉ２０８に状態遷移６０８の一環として遷移してよい。別の実施形態では、コアプロセッサは、トランザクションの完了に成功したことを検知すると、状態Ｌ２１４にタグ付されているキャッシュラインに影響を与えるコミット処理ＰＣｏ３０８を実行することができ、これにより、キャッシュラインが状態Ｌ２１４から状態Ｉ２０８に、状態遷移６０８の一環として遷移してよい。
【０１０９】
別の例として、図６では、状態遷移６２４が、共有状態ＳＨ２０４から投機状態Ｓ２１２に遷移することを示している。表２では、状態遷移６２４が、以下のプロセッサ処理／応答の対に関連付けられる。
・ＰＷｒ３０６／ＵＷｒ４０６
・ＰＳＣＷｒ３１２／ＵＳＣＷｒ４１２
【０１１０】
したがい、図６の状態遷移６２４は、表２において、ＰＷｒ３０６（つまりプロセッサ書き込み）処理、および、ＵＷｒ４０６（つまり非コア書き込み）応答、または、ＰＳＣＷｒ３１２（つまりプロセッサ投機的完全書き込み）処理、および、ＵＳＣＷｒ４１２（つまり非コア投機的完全書き込み）応答に関連付けられる。
【０１１１】
一実施形態では、コアプロセッサが、状態ＳＨ２０４にタグ付されているキャッシュラインに関する投機的書き込み（たとえば投機的に書き込むこと）を実行して、これにより、キャッシュラインが、状態ＳＨ２０４から投機状態Ｓ２１２に状態遷移６２４の一環として遷移してよい。
【０１１２】
状態遷移６０２−６４０のうち上述しなかったものは、上述した例と同様の方法で解釈されてよい。
【０１１３】
図５および図６は、同じ図に描くこともできる（プロセッサ処理（図６）を実線にして、非コアトランザクション（図５）を点線にすることで）。ここでは明瞭に説明する観点から、図５と図６とを分けた。
【０１１４】
図１から図６は、ここでキャッシュコヒーレンシープロトコル１２６の様々な実施形態を説明するために利用された。しかし、これらの実施形態がキャッシュコヒーレンシープロトコル１２６の範囲を限定することを意図しているわけではなく、さらなる別の実施形態も存在する。
【０１１５】
別の実施形態の一例として、コアは、現在のトランザクションがコミットまたはロールバックするかを他のコアに伝える必要は必ずしもない。一例として、第１のコアは、他のコアに対して、自身がコミットまたはロールバックを行った旨を伝え、他のコアに、状態ＲＬ２１６のキャッシュラインを無効にして第１のコアのコアＩＤにタグ付させる必要がある場合もある。したがい、ＰＣｏ３０８またはＰＲｏ３１０処理を実行するコアは、前にＵＳＣＷｒ４１２メッセージをたとえばキャッシュラインに関する現在の遷移中に非コアで送信させた場合に限ってＵＣｏ４０８またはＵＲｏ４１０メッセージを生成する必要があるだろう。したがって、コミットメッセージおよびロールバックメッセージを選択的にフィルタリングすることで、コミットトランザクションおよびロールバックトランザクションを非コアで回避することができる。
【０１１６】
加えて、キャッシュラインに関する、データを伴わない所有者の投機的要求（ＳＲＦＯＷＤ）トランザクションの投機的な性質によって、プロセッサコアは、トランザクションがコミットされるか否かを知ることはできないことが示唆される。一例として、プロセッサコアは、トランザクションが成功裏に完了する場合に、キャッシュライン全体が更新されると確実に知ることができてよい。しかし一実施形態では、キャッシュコヒーレンシープロトコル１２６は、さもなくば成功したトランザクションがキャッシュライン全体の更新に失敗したときには、ロールバック（ＵＲｏ４１０）を強制執行するように拡張することができてよい。言い換えると、ロールバックは、関連するトランザクションが成功裏に完了して、プロセッサコアがコミットを実行した場合であっても、ＵＳＣＷｒ４１２により要求されたキャッシュラインに部分的に書き込む場合に生成することができる。別の実施形態では、キャッシュコヒーレンシープロトコル１２６が、さもなくば成功したトランザクションが、プロセッサコアがデータなしに所有権を投機的に要求した（たとえばトランザクションの一環として）すべてのキャッシュライン全体の更新に失敗した場合であってもロールバックを強制執行するように拡張することができる。
【０１１７】
別の実施形態の例として、図５に示す状態遷移５１８に示すように、共有状態ＳＨ２０４のキャッシュラインを、別のコアがＵＳＣＷｒ４１２トランザクションを非コア１０８で発行したときに、状態遷移５２４の無効状態Ｉ２０８に移す。しかし別の実施形態では、そのキャッシュラインは、共有ログ状態（不図示）と称される新たな状態にしてもよい。他のコアは次に、関連するトランザクションにコミットして、共有時ログ状態の関連するキャッシュラインを、無効状態Ｉ２０８にしてよい。他のコアがトランザクションにロールバックする場合には、共有ログ状態のラインを、共有状態ＳＨ２０４に戻す。こうすることで、共有ログ状態のキャッシュラインを所有しているコアが、ロールバック時にほかの非コアトランザクションを必要とせずに、キャッシュラインにアクセスすることができるようになる。
【０１１８】
別の例として、コア１０４が非コア１０８で非コアトランザクション４０２を生成させる場合、他のコア１０４は、すぐにトランザクションを観察してサービス提供する。たとえば、ＰＲｄ３０４処理を遠隔ログ状態ＲＬ２１６のキャッシュラインで実行しているコア１０４は（図６の状態遷移６１４参照）、キャッシュラインを、即座に修正状態Ｍ２０６に遷移させることができる。しかし別の実施形態では、この遷移は即座に行われなくてもよい。コア１０４は、「自己スヌープ」されてよい（たとえば、コアが、非コアで同じ関連するメッセージを受信してよい）。一例として、第１のプロセッサコア１０４が、状態ＲＬ２１６のキャッシュラインでＰＲｄ３０４処理を実行する場合、ＵＲｄ４０４メッセージを、非コア１０８で送信することができるが、このメッセージは、状態ＲＬ２１６のキャッシュラインを退出することができる。自身のＵＲｄ４０４メッセージを受信すると（図５の状態遷移５２２に示す）、第１のプロセッサコア１０４は、非コアで対応するキャッシュラインデータを送信して（たとえばすべてのコアで共有されているキャッシュメモリまたはメインメモリ１１６を更新する）、キャッシュラインを共有状態ＳＨ２０４に遷移させることで、処理を続行することができる。
【０１１９】
別の例として、コア１０４は、プロセッサ処理３０２等の処理を、上述したトランザクション内で実行することができる。しかし別のある実施形態では、コア１０４が、トランザクション内で実行された読み出しとトランザクション外で実行された読み出しとを区別することができる。したがい、新たなプロセッサ処理は、たとえば、トランザクション内の読み出しが、ＰＲｄ（プロセッサの投機的読み出し）処理として定義され、トランザクション外の読み出しは、ＰＵＲｄ（プロセッサのトランザクショナルではない読み出し）処理と定義されてよく、後者は、非投機的な読み出しに相当する。同じことが書き込みおよび完全なライン書き込みにも当てはまるだろう。したがい、新たなプロセッサ処理は、たとえば、トランザクション内の書き込みが、ＰＷｒ（プロセッサの投機的書き込み）処理として定義され、トランザクション外の書き込みは、ＰＵＷｒ（プロセッサのトランザクショナルではない書き込み）処理と定義されてよく、後者は、非投機的な書き込みに相当し、トランザクション内の完全な投機的書き込みが、ＰＵＣＷｒ（プロセッサの投機的な完全な書き込み）処理として定義され、トランザクション外のプロセッサの書き込みは、ＰＵＣＷｒ（プロセッサの完全なトランザクショナルではない書き込み）処理と定義されてよく、ＰＣＷｒは、「データの内所有権要求」を生成する動作と類似していてよい。この場合の様々な状態間の遷移の拡張は簡単である。
【０１２０】
＜プロトコル処理の例＞
図７から図９は、ここで説明する拡張されたキャッシュコヒーレンシープロトコルの様々な態様を示すフローチャートの例を示す。
【０１２１】
図７は、コアプロセッサユニットがキャッシュメモリの一部分（たとえばキャッシュライン）に投機的に書き込みを行うキャッシュコヒーレンシープロトコルの態様を含む方法７００の一例を示す。
【０１２２】
７０２で、コア１０４の１つ等のプロセッサコアが、キャッシュメモリに投機的な書き込みを行う。一実施形態では、プロセッサコアは、キャッシュライン全体に投機的に書き込む。別の実施形態では、プロセッサコアは、トランザクション実行の一環として、修正状態Ｍ２０６のキャッシュライン全体に投機的に書き込みを行う。一例としては、プロセッサコアは現在のトランザクションがコミットするか否かを保証することができないので、キャッシュライン全体に投機的に書き込みを行う。
【０１２３】
７０４で、プロセッサコアは、キャッシュラインをログ状態（たとえばログ状態Ｌ２１４）に遷移させる。一例としては、プロセッサコアが修正状態Ｍ２０６のラインを有しており、ＰＷｒ３０６またはＰＳＣＷｒ３１２処理を実行する場合、キャッシュラインをログ状態Ｌ２１４にして、ローカルなトランザクションにとってキャッシュラインの古いコピーであることを示す。
【０１２４】
７０６で、プロセッサコアは新たなキャッシュラインを作成して、新たなキャッシュラインを投機状態であるとしてタグ付する。一実施形態では、プロセッサコアがＰＷｒ３０６処理を実行する場合には、新たなキャッシュラインは、投機状態Ｓ２１２で作成され、トランザクション内の格納命令により更新されたキャッシュラインの新たなコピーであってよい。プロセッサコアがＰＳＣＷｒ３１２処理を実行する場合には、新たなキャッシュラインは、投機状態Ｓ２１２で作成され、トランザクション内の格納命令により更新されたキャッシュラインの新たなバージョンであってよい。一実施形態では、プロセッサコアは、更新を新たな部分に行うことができる（たとえば、投機状態Ｓ２１２のキャッシュライン）。この場合のＰＷｒ３０６およびＰＳＣＷｒ３１２処理の間の差は、プロセッサコアがＰＳＣＷｒ３１２処理を実行する場合、新たなキャッシュラインがキャッシュラインのコピーである必要がないことである。しかし別の実施形態では、キャッシュラインの新たなバージョンがキャッシュラインのコピーであってよく、新たなキャッシュラインが、キャッシュラインのコピーであってよい。
【０１２５】
例えば、プロセッサコアが、共有状態Ｓ２１２のキャッシュラインにＰＷｒ３０６またはＰＳＣＷｒ３１２処理を実行する場合には、ＵＷｒ４０６またはＵＳＣＷｒ４１２トランザクションがそれぞれ非コアで送信され、キャッシュラインが小槻状態Ｓ２１２に遷移させられる。
【０１２６】
７０８で、プロセッサコアはコミット処理を実行してよい（たとえばＰＣｏ３０８）。一実施形態では、プロセッサコアは、トランザクションが成功する場合、ＰＣｏ３０８を実行することができる。これにより、プロセッサコアの識別子（つまりＩＤ）をもつＵＣｏ４０８トランザクションが、非コア１０８で送信されてよい。７１０で、キャッシュラインを別の有効な状態にする（たとえばＭ２０６）。一例としては、コミット処理に呼応して、キャッシュラインが、投機状態Ｓ２１２から修正状態Ｍ２０６に遷移されてよい。この結果、ログ状態にタグ付されているキャッシュラインをこれ以上維持する必要がなくなる。したがい７１２で、プロセッサコアは、ログ状態にタグ付されているキャッシュラインを、無効状態Ｉ２０８にすることで破棄することができる。
【０１２７】
プロセッサコアが７０８でコミット処理を行わない場合、７１４で、プロセッサコアはＰＲｏ３１０等のロールバック処理を実行してよい。一実施形態では、トランザクションが成功しない場合に、プロセッサコアがロールバック処理を実行してよい。ロールバック処理によって、ロールバックメッセージ（ＵＲｏ４１０など）が、プロセッサコアのＩＤとともに、非コア１０８で送信されてよい。ロールバック処理の結果、７１６で、プロセッサコアは、ログ状態にタグ付されているキャッシュラインを、別の有効な状態に変更することができる。一例では、プロセッサコアが、ログ状態Ｌ２１４にタグ付されているキャッシュラインの状態を修正状態Ｍ２０６に変更することができる。７１８で、ロールバック処理の結果、プロセッサコアが、投機的な状態にタグ付されている新たなキャッシュラインを、たとえば無効状態Ｉ２０８にタグ付することで破棄してよい。
【０１２８】
図８は、プロセッサコアがキャッシュラインのデータを伴わない所有権の投機的要求を行う、キャッシュコヒーレンシープロトコルの態様を含む方法８００の例を示すフローチャートである。
【０１２９】
８０２で、一実施形態では、プロセッサコアが、キャッシュラインのデータを伴わない所有権要求を行うＰＳＣＷｒ３１２処理を実行してよい。ＰＳＣＷｒ３１２処理によって、プロセッサコアのＩＤを含むＵＳＣＷｒ４１２メッセージが、非コア１０８で送られてよい。一例としては、プロセッサコアが、キャッシュライン全体等のキャッシュメモリの一部を投機的に書き込むことができる。プロセッサは、キャッシュライン全体の上書きを投機的に行うことができるので、プロセッサは、キャッシュラインに関連付けられていているデータを受信する必要がない。したがい、要求されているキャッシュラインを所有する実体はいずれも（たとえば所有者コア）、キャッシュラインに関連付けられるデータをプロセッサコアに送信する必要がない。一実施形態では、ＰＳＣＷｒ３１２処理を実行しているプロセッサコアが、提供されているキャッシュラインに含まれているデータなしにキャッシュラインの所有権を要求する。
【０１３０】
８０４で、プロセッサコアは、キャッシュラインの所有権に対する受領確認を検知するが、この受領確認には、所有者コア（ＯＣ）からのキャッシュラインからのデータが含まれていない。加えて、ＯＣは、遠隔ログ状態ＲＬ２１６にタグ付されたキャッシュラインのコピーを作成する。一例として、現在キャッシュラインを所有しているＯＣ（たとえば異なるプロセッサコア１０４）は、プロセッサコアが実行するＰＳＣＷｒ３１２処理に応答して、単に、所有権要求に対してキャッシュラインの所有権をプロセッサコアに許可する受領確認のみを返す。別の言い方をすると、非コア１０８で検知したＵＳＣＷｒ４１２メッセージに対して、キャッシュラインを現在所有しているＯＣは、単に、プロセッサコアに対して、ＵＳＣＷｒ４１２メッセージにＩＤを含んだ受領確認のみ返し、要求されているキャッシュラインのプロセッサコアの所有権の許可を行う。受領確認には、キャッシュラインのデータ内容は含めない。
【０１３１】
８０６で、プロセッサコアは、投機状態（たとえば状態Ｓ２１２）をタグ付した新たなキャッシュラインを作成することができる。新たなキャッシュラインは、キャッシュラインの新たなコピーまたは新たなバージョンであってよい。
【０１３２】
８０８で、プロセッサコアがコミットまたはロールバックのいずれを実行するかを判断する。一実施形態では、プロセッサコアが、ＰＣｏ３０８を実行することによってトランザクションにコミットしたり、Ｐｒｏ３１０を実行することでトランザクションをロールバックしたりする。
【０１３３】
８０８で、もしもプロセッサコアがコミットを実行する場合には、８１０で、プロセッサコアは、新たなキャッシュラインを別の有効な状態にタグ付することができる。一例としては、プロセッサコアは、新たなキャッシュラインを投機状態Ｓ２１２から修正状態Ｍ２０６へと変更することができる。８１２で、プロセッサコアは、関連するコアＩＤを持つコミットメッセージを、相互接続ネットワーク１１０で送る。８１４で、ＯＣは、たとえばキャッシュラインの状態をＩ２０８に変更することで、遠隔ログ状態にタグ付されたキャッシュラインを破棄する。
【０１３４】
他方で、８０８でプロセッサコアがロールバックを実行する場合には、８１６で、プロセッサコアは、前に投機状態にタグ付されていた新たなキャッシュラインを、無効状態にタグ付し直すことができる。８１８で、プロセッサコアは、コアＩＤが関連付けられたロールバックメッセージを相互接続ネットワーク１１０経由で送信する。８２０で、ＯＣタグは、状態ＲＬ２１６に保持されているキャッシュラインを有効状態（Ｍ２０６）にタグ付する。
【０１３５】
図９は、プロセッサコアが、キャッシュラインのデータを伴わない所有権の投機的要求を検知する、キャッシュコヒーレンシープロトコルの態様を含む方法９００の例を示すフローチャートである。
【０１３６】
９０２で、一実施形態で、第１のプロセッサコアは、非コア１０８でキャッシュラインのデータを伴わない所有権要求をしている第２のプロセッサコアのＩＤを含むメッセージＵＳＣＷｒ４１２を検知してよい。一例として、要求を発している第２のプロセッサコアは、キャッシュライン全体のデータを伴わない所有権要求をしているＰＳＣＷｒ３１２処理を実行したものであってよい。要求をしている第２のプロセッサコアは、キャッシュライン全体の上書きを投機的に実行するので、第１のプロセッサコアが、キャッシュラインに関連するデータを送信する必要がない。
【０１３７】
９０４で、要求されているキャッシュラインを（修正状態Ｍ２０６で）所有している実体が（たとえば第１のプロセッサコア１０４）、要求されているキャッシュラインのバックアップコピーを作成して、要求している第２のプロセッサコアのＩＤとともに、遠隔ログ状態（たとえば状態ＲＬ２１６）にタグ付する。
【０１３８】
９０６で、第１のプロセッサコアが、第２のプロセッサコアにキャッシュラインの所有権の受領確認を提供する。一実施形態では、受領確認は、第１のプロセッサコアから第２のプロセッサコアに対して、キャッシュラインにデータを含ませずに提供される。この時点では、キャッシュラインの所有権が、要求している実体に渡される。一例としては、受領確認が、キャッシュラインにデータを含まない非コア１０８で検知されたメッセージＵＳＣＷｒ４１２のＩＤで、第２のプロセッサコアに提供される。
【０１３９】
９０８では、第１のプロセッサコアが、第２のプロセッサコアが、要求されているキャッシュラインに関連するコミットまたはロールバックを実行したかを検知する。９０８でもしも第１のプロセッサコアが第２のプロセッサコアがコミットを実行したと検知した場合には、９１０で第１のプロセッサコアが、たとえばその状態をＲＬ２１６から無効状態Ｉ２０８に変更することでバックアップコピーを破棄する。
【０１４０】
他方で、もしも９０８で第１のプロセッサコアが、第２のプロセッサコアが、要求されているキャッシュラインに関連するロールバックを実行したことを検知した場合には、９１２で、第１のプロセッサコアが、キャッシュラインのバックアップコピーを、別の有効な状態にタグ付する。一例としては、第１のプロセッサコアが、キャッシュラインのバックアップコピーの状態をＲＬ２１６から状態Ｍ２０６または任意の他の有効な状態に変更させることができる。
【０１４１】
別の実施形態（図９で示していないもの）の一例として、第１のプロセッサコアは、たとえば投機的にキャッシュラインのデータを伴わない所有権を要求している第３のプロセッサコアのＩＤを含む第２のＵＳＣＷｒ４１２メッセージを検知することができる。この例では、第１のプロセッサコアが、遠隔のログ状態ＲＬ２１６にキャッシュラインを保持して、第３のプロセッサコアのＩＤを記録する。第２のプロセッサコアは、第２のＵＳＣＷｒ４１２メッセージを非コア１０８で観察し、そのトランザクションを、その関連するキャッシュラインを投機状態Ｓ２１２にすることで、図５に示す状態遷移５１８に示す無効状態Ｉ２０８に移すことで、ロールバックして、関連するＵＲｏ４１０メッセージを非コア１０８で送る。
【０１４２】
図１０は、複数のマルチコアプロセッサを含む高度な、または拡張されたキャッシュコヒーレンシープロトコルを実行するために利用可能な環境１０００の一例を示す。環境１０００では、ここで説明したキャッシュコヒーレンシープロトコル１２６が、拡張されて、複数のプロセッサ１０２（１）から１０２（Ｎ）でキャッシュコヒーレンシーを提供することができる（Ｎは、１を超える整数である）。
【０１４３】
主題を、構造における特徴および方法における動作の両方または片方に特化した言語で記載してきたが、添付請求項に定義されている主題は、必ずしもこれら記載してきた特定の特徴または動作に限定されない点を理解されたい。そうではなくて、記載してきた特定の特徴または動作は、請求項を実装する形態の例として開示されている。
【０１４４】
たとえば上述した装置またはプロセッサのすべての任意的な特徴を、ここで説明した方法またはプロセスに関して実装可能である。例における具体例は、１以上の実施形態のいずれにおいても利用可能である。
【図１】
0005771289.tif 000004
【図２】
0005771289.tif 000005
【図３】
0005771289.tif 000006
【図４】
0005771289.tif 000007
【図５】
0005771289.tif 000008
【図６】
0005771289.tif 000009
【図７】
0005771289.tif 000010
【図８】
0005771289.tif 000011
【図９】
0005771289.tif 000012
【図１０】
0005771289.tif 000013