本開示は、キャッシュメモリの一部(たとえばキャッシュライン)のための、データを伴わない所有権の投機的要求(SRFOWD:Speculative Request For Ownership Without Data)を含む高度なキャッシュコヒーレンシープロトコルの実施形態の一例に関する。現在のRFOと異なり、SRFOWDでは、受領確認メッセージのみが返答として提供される。影響をうけるキャッシュラインの内容は、返答の一部として必須ではない。こうすることで、上書きされてしまうデータを転送するリソースの無駄を省くことができるようになるので、マルチコアプロセッサの相互接続ネットワーク上のトラフィックの競合を減らすことができる。
本文献の様々な実施形態で開示されるように、マルチコアプロセッサのコアは、一式の格納処理がキャッシュの全部分(たとえばキャッシュライン)を上書きすることを検知する場合には(たとえば投機する場合)、SRFOWDを送信することができる。しかし、要求の投機的な性質から、現在のキャッシュラインのコピーを無効化する代わりに、高度なキャッシュコヒーレンシープロトコルが、現在のキャッシュラインの有効なコピーが、要求を出しているコアの投機間違いの場合にも確実に存在するようにすることができる。したがって、キャッシュラインの現在のコピーの所有者は、キャッシュラインの古い内容のコピーを維持することができる。キャッシュラインの古い内容は、要求を発しているコアの投機が正確であることがわかると、破棄されてよい。要求を発しているコアの投機が間違いであった場合には、キャッシュラインの古い内容を、有効状態に戻す。
<システムアーキテクチャの例>
図1は、高度なキャッシュコヒーレンシープロトコルを実行するために利用可能なマルチコアプロセッサの環境100の一例を示す。プロセッサ102は、それぞれコアが高度なキャッシュコヒーレンシープロトコルの少なくとも一部を実装する論理を有している1以上のプロセッサコア104(1)から104(N)を有するマルチコアプロセッサ(たとえば、1つの集積回路ダイ上のマルチコアプロセッサ)を含んでよい。
コア104(1)は、関連するコアキャッシュ106(1)を有してよい。キャッシュ106(1)は、たとえば、レベル1(L1))キャッシュ等のプロセッサコア104(1)が直接アクセスすることができるキャッシュメモリを含んでよい。一実施形態では、キャッシュ106(1)を、コア104(1)の一部と捉えてもよい。図1を説明する便宜上、キャッシュ106(1)は1つのキャッシュとして示されているが、コア104(1)内には複数のキャッシュが含まれていてもよい。
コア104(1)同様に、コア104(N)が、関連するコアキャッシュ106(N)を有してよい。キャッシュ106(1)同様に、キャッシュ106(N)は、たとえば、レベル1(L1)キャッシュ等のコア104(N)が直接アクセスすることができるキャッシュメモリを含んでよい。一実施形態では、キャッシュ106(N)は、コア104(N)の一部と考えてよい。図1を説明する便宜上、キャッシュ106(N)は、1つのキャッシュとして示されているが、コア104(N)内には複数のキャッシュが含まれていてもよい。
プロセッサ102は、さらに、非コア108を含んでよい。非コア108は、コアにないが、コア104(1)から104(N)の機能を実行するために本質的であってよいハードウェアコンポーネントを含んでよい。一実施形態では、非コア108は、これもコア104(1)から104(N)を含む1つの集積回路ダイの上のマルチコアチップの一部であってよい。
一例として、非コア108は、コア相互接続ネットワーク110、非コアキャッシュ112、メモリコントローラ114(プロセッサ102の外部にあってよいメモリ116に対するアクセスを制御するためのもの)、およびその他の非コアデバイス118を含んでよいが、これらに限定はされない。キャッシュ112は、たとえば、L2キャッシュ、L3キャッシュ等の、コア104(1)から104(N)の少なくとも1つがアクセス可能なキャッシュメモリを含んでよい。図1を説明する便宜上、キャッシュ112は、非コア108内の1つのキャッシュとして示されている。しかし、キャッシュ112は、非コア108内に分散されている複数のキャッシュ、非コア108の外部の1以上のキャッシュ、プロセッサ102の外部の1以上のキャッシュ等を含んでもよい。
プロセッサ102内の各キャッシュメモリは、システムの他のエージェントと通信して、たとえばコア104(1)から104(N)によって相互接続ネットワーク110を介してキャッシュメモリアクセスおよび、キャッシュコヒーレンシープロトコル126の実装を促すための関連する相互接続インタフェースコントローラを有してよい。たとえば、相互接続インタフェースコントローラ120(1)は、キャッシュ106(1)の相互接続ネットワーク110への接続を促すためにキャッシュ106(1)に取り付けられる。同様に、相互接続インタフェースコントローラ120(N)がキャッシュ106(N)に取り付けられ、相互接続インタフェースコントローラ124が、キャッシュ112に取り付けられて、これらに関連するキャッシュの、相互接続ネットワーク110への接続を促す。一例としては、相互接続インタフェースコントローラ120(1)は、コア104(1)と非コア108との間でメッセージ交換およびメッセージの変換を行い、キャッシュコヒーレンシープロトコル126を促すことができる。同様に、相互接続インタフェースコントローラ120(N)が、コア104(N)と非コア108との間でメッセージ交換およびメッセージの変換を行い、キャッシュコヒーレンシープロトコル126を促すことができる。このようにして、相互接続インタフェースコントローラ120(1)から120(N)および124は、コア104(1)から104(N)および非コア108の間の活動および処理の観察および応答の両方または片方ができてよい。
相互接続ネットワーク110は、コア104(1)から104(N)および非コア108、並びに、非コア108のコンポーネント(たとえばキャッシュ112)の間のメッセージ交換およびデータ転送を行うバス状の相互接続ネットワーク機能を実装することができる。
ここで記載したように、複数のコアが、キャッシュメモリの様々なブロックおよびラインの所有権またはアクセス権を求める場合があるので、データに一貫性がなくなる、という問題が生じる場合がある。したがってプロセッサ102は、キャッシュコヒーレンシープロトコル126等の高度なキャッシュコヒーレンシープロトコルを実装して、キャッシュメモリの部分(たとえば特定のキャッシュライン)の有効性および利用可能性を保証する。
一例として、キャッシュコヒーレンシープロトコル126の一実施形態では、コア104(1)が、キャッシュメモリの一部(たとえば特定のアドレスまたはインデックスを有するキャッシュライン)のための、データを伴わない所有権の投機的要求(SRFOWD)を実行することができる。このSRFOWD処理は、次に、相互接続インタフェースコントローラ120(1)により、相互接続インタフェースコントローラ120(1)によって、コア104のうちの他のものに、相互接続ネットワーク110経由で送られた非コアメッセージに変換されてもよい。要求されているキャッシュラインは、たとえば、現在たとえばコア104(N)により所有されており、修正された状態(修正状態)のコア104(N)のキャッシュメモリ106(N)に常駐していてよい。コア104(N)は、要求されているキャッシュラインの所有権をコア104(1)に許可して、一方では、異なる状態(たとえば遠隔ログされた等)としてタグ付されている現在のキャッシュラインのコピーまたはバージョンを維持してよい。コア104(N)は、次に、キャッシュラインのデータ内容をコア104(1)に提供することなく、コア104(1)に現在のキャッシュラインの所有権を許可することができる。次にコア104(1)は、たとえばキャッシュ106(1)の、要求されているキャッシュラインの所有権を取得することができる。一実施形態では、コア104(1)は、コア104(1)が、キャッシュライン全体の完全な書き込みを投機的にコア104(1)が実行するように、SRFOWD処理を実行することができる。一実施形態では、コア104(1)が、キャッシュライン全体の完全な書き込みが投機ミスであった場合、コア104(N)は、現在のキャッシュラインのコピーまたはバージョンを有効状態に遷移させることができる。一実施形態では、コア104(1)がキャッシュライン全体の書き込みを無事に完了した場合、コア104(N)が、現在のキャッシュラインのコピーまたはバージョンを、無効状態に遷移させることができる。
別の例として、キャッシュコヒーレンシープロトコル126の一実施形態では、コア104(1)が、共有状態にあるキャッシュ112に常駐しているキャッシュラインの所有権要求(RFO)またはSRFOWDを行うことを想定する。コア104の他のものが、共有状態のこれらに関連するキャッシュ106に、要求されているキャッシュラインを保持することができる。この例では、相互接続インタフェースコントローラ120(1)が、RFOまたはSRFOWD処理を、コア104(1)から、相互接続ネットワーク110経由で送られた関連する非コアメッセージに変換して、コア104の他のものに、キャッシュラインの命名のコピーを破棄または無効化させることができる。一実施形態では、コア104(1)が、次に所有権を得て、キャッシュラインを別の状態(たとえば投機状態)としてタグ付することができる。
別の例として、キャッシュコヒーレンシープロトコル126の一実施形態では、コア104(1)が、修正された状態にあるキャッシュ106(1)に常駐しているキャッシュラインの所有権要求(RFO)またはSRFOWDを行ってよい。この例では、処理によって、コア104(1)は、キャッシュラインを、別の(ログされた)状態としてタグ付して、別の状態(たとえば投機状態)の要求されたキャッシュラインの新たなコピーまたはバージョンを作成する。
図1を説明する便宜上、キャッシュコヒーレンシープロトコル126は、非コア108およびコア104(1)から104(N)の外部に描かれている。しかし様々な実施形態では、キャッシュコヒーレンシープロトコル126は、その全体または一部が、非コア108、コア104(1)から104(N)およびプロセッサ102のその他の任意の部分の少なくともいずれかの中に実装されていてもよい。
一例として、キャッシュコヒーレンシープロトコル126を利用して、キャッシュライン(たとえば64バイトのキャッシュブロック)の内容および状態の制御または修正を促すことができる。キャッシュコヒーレンシープロトコル126を利用して、コア104(1)から104(N)、非コア108、相互接続インタフェースコントローラ120(1)から120(N)および124等に関連した様々なメッセージまたは要求(たとえば処理)に応答することができる。キャッシュコヒーレンシープロトコル126はさらに、コア104(1)から104(N)、非コア108のうちの少なくとも1つに関連付けられる処理に対応したキャッシュの現在の状態(たとえばキャッシュラインの状態)に関連する様々な遷移を制御することもできる。一実施形態では、コアプロセッサ104(1)から104(N)のうちの1以上が、キャッシュコヒーレンシープロトコル126に影響を与えうる処理を実行する場合がある。これら処理は、キャッシュコヒーレンシープロトコル126によって、たとえば相互接続インタフェースコントローラ経由で、非コア108を介してトランザクション、要求、およびメッセージの少なくとも1つに変換され、これにより、キャッシュの一部(たとえばキャッシュライン)の状態遷移がなされてもよい。相互接続インタフェースコントローラ120は、関連するコア104からのメッセージまたは処理を変換して、同時に、同期させて、または非同期で、コア104のうちの少なくとも1つに非コアメッセージを提供することができる。別の実施形態では、キャッシュコヒーレンシープロトコル126が、非コアメッセージをコア104のうちの1以上に対して提供しない、という判断を行ったり、そのように検知したり、構成されていたりしてもよい。
加えて、一実施形態では、コアプロセッサ104(1)から104(N)のうちの1以上が、キャッシュラインの状態遷移を非コア108と相互作用せずに生じさせることが可能な処理を、キャッシュコヒーレンシープロトコル126と協働して実行してもよい(たとえば、相互接続インタフェースコントローラは、コア104のいずれにも非コアメッセージを送信しなくてもよい)。
共通のキャッシュコヒーレンシープロトコルの一例には、MSI(Modified, Shared and Invalid)、MESI(Modified, Exclusive, Shared and Invalid)、MOSI(Modified, Owned, Shared and Invalid)、MOESI(Modified, Owned, Exclusive, Shared and Invalid)、MERSI(Modified, Exclusive, Read Only or Recent, Shared and Invalid)、MESIF(Modified, Exclusive, Shared, Invalid and Forward)、Synapse、Berkeley,Firefly,Dragon等が含まれる。
説明するように、キャッシュコヒーレンシープロトコル126の実施形態は、共通のキャッシュコヒーレンシープロトコルを拡張したり、より高度にしたり、変更または修正を加えたりすることができる。これらの、拡張したり、より高度にしたり、変更または修正したりといった処理のほんの数例の利点を挙げると、キャッシュミスが減ること、マルチコアプロセッサの相互接続ネットワーク上でのトラフィックおよびトラフィックの競合が減ること、および、失敗したトランザクションの効率的なロールバックが可能となること、などである。これらの利点およびその他の利点によって、マルチコアプロセッサの速度、パフォーマンス、および効率のうち少なくとも1つを向上させることができる。
<キャッシュライン状態の例>
図2は、高度なキャッシュコヒーレンシープロトコル(たとえばキャッシュコヒーレンシープロトコル126など)のキャッシュ状態202の一例を示す。簡単な説明をめざして、図2は、MSIキャッシュコヒーレンシープロトコルの延長を表すキャッシュ状態202を示している。しかし、図2に示す状態は、単独で、または他の特徴といずれの形式で組み合わせて、他のキャッシュコヒーレンシープトロコル(たとえば、MESI、MOSI、MOESI,MERSI、MESIF、write-once、Synapse、Berkeley、Firefly、Dragon等)に拡張するように応用することが容易である。
キャッシュ状態202は、キャッシュの一部の状態の様々な例に関している。一実施形態では、キャッシュの一部は、整数個のバイトを含むキャッシュの1つのラインまたは1つのブロックを含んでよい。別の実施形態では、キャッシュの一部が、整数個ではないバイト、または、整数個のビットを含むキャッシュの1つのラインまたは1つのブロックを含んでもよい。
簡単な説明をめざして、特にキャッシュ状態202を有することができるキャッシュの一部を、キャッシュラインと称することにする。一例として、このキャッシュの一部は、キャッシュ106(1)から106(N)またはキャッシュ112のいずれかのキャッシュラインであってよい。
図2は、共有(SH)204、修正(M)206、無効(I)208、観察(O)210、投機的(S)212、ログ(L)214、および、遠隔ログ(RL)216を含んだ、キャッシュ状態202の1つにおけるキャッシュラインの例を示す。
SH204は、共有状態の一例である。状態SH204のキャッシュラインは、共有および無修正の状態で存在していてよい(たとえば有効状態)。状態SH204は、キャッシュが、キャッシュラインの最新のバージョンを含み、キャッシュラインが、共有状態にある他のコアのキャッシュメモリに存在していてもよいことを示していてよい。状態SH204のキャッシュラインは、このキャッシュラインが、複数のキャッシュに格納されており、「クリーン」であることを示していてよく、これは、メインメモリ(たとえばメモリ116)のキャッシュラインのコピーに合致することを示唆している。状態SH204のキャッシュラインは、いつでも破棄することができる。一例として、コア104は、状態SH204のキャッシュラインには、まずキャッシュラインの所有権を要求しなくては、書き込みができない。
M206は、修正状態の一例である。状態M206のキャッシュラインは、修正状態で存在することができる(つまり、キャッシュラインの古いバージョンを含んでいてよい)。たとえば、状態M206のキャッシュラインは、ダーティであると考えることができ、これは、メインメモリにおける自身の関連値から修正されていることを示唆している。状態M206のキャッシュラインを含むキャッシュは、メインメモリの状態(もはや有効ではない)の他の呼び出しを許可する前に、将来のいつかの時点において、キャッシュラインのデータをメインメモリに書き戻す必要があるようなものである。一例としては、コア104が、キャッシュラインの所有権を要求することができ、所有権要求が許可されると、次にコア104がキャッシュラインを更新することができる。ひとたびコア104がキャッシュラインの更新を行うと、キャッシュラインは状態M206となる。他のコア104は、このキャッシュラインが、キャッシュメモリ106のいずれかにおいて修正状態M206である場合、クリーンまたはダーティなコピーを有していてよい。
I208は、キャッシュラインが無効であると考えられる無効状態の一例である。状態I208のキャッシュラインは、有効ではなく、もはやキャッシュには存在していないキャッシュラインと考えられる。
O210は、観察状態の一例である。たとえば状態O210は、コア104によって、キャッシュラインが投機的に読み出されていることを示唆してよい。メインメモリ(または他のコアが共有しているキャッシュメモリ)は、状態O210のキャッシュラインの最新バージョンを含んでよい。たとえば、キャッシュラインは、投機的読み出し処理によりコア104が読み出し、またはロードを行った後に、状態O210としてマークされてよい。一実施形態では、状態O210のキャッシュラインに対してコミットまたはロールバックが行われると、当該キャッシュラインは、共有状態SH204に遷移してよい。
S212は、投機状態の一例である。たとえば状態S212は、特定のキャッシュにあるキャッシュラインが存在しており(たとえば有効である)、且つ、既に投機的に修正されている(または今後、投機的に修正される)ことを示唆していてよい。メインメモリは、キャッシュラインの古くなったバージョンを含んでいてよい。他方で、他のキャッシュメモリ106は、キャッシュラインの有効なコピーを有していない。これに対する例外は、唯一存在している他のキャッシュ106が、遠隔ログ状態にあるキャッシュラインの古い内容をもつコピーを含んでいるような場合であり、これに関しては後述する。一例としては、状態S212が、投機的ロード(たとえば読み出し)ではなく投機的格納(たとえば書き込み)に関している点を除いては、状態O210と同等であってもよい。一実施形態では、投機状態S212のキャッシュラインは、コミットを実行すると修正状態M206に遷移してよく、一方でロールバックの際には無効状態I208に遷移する。
L214は、ログ状態の一例である。一実施形態では、状態L214のキャッシュラインは、状態S212のキャッシュラインの古いコピーまたは対応する投機的バージョンであってよい。
一実施形態では、ログ状態L214は、修正状態M206がトランザクション内に、たとえば修正状態M206のラインを所有しているものと同じコアによって書き込まれる場合に利用されてよい。この場合、影響を受けるキャッシュラインは、ログ状態L214にされ、キャッシュラインのコピーが作成されて、投機状態S212にタグ付される。キャッシュラインの投機コピーは、次に、トランザクション内の書き込み処理によって更新されてよい。トランザクションコミットの場合(つまり、トランザクションが成功した場合)、投機状態S212のラインが修正状態M206にされ、ログ状態L214のラインを破棄することができる(無効状態208にする)。他方で、トランザクションがロールバックした場合には(トランザクションが成功しなかった場合)、投機状態S212のラインを破棄して(無効状態I208にする)、ログ状態L214のキャッシュラインを修正状態M206に戻して、キャッシュラインの古い内容を復帰させる。一実施形態では、投機状態S212のキャッシュラインは常にシステムのどこかに古い内容をもつクリーンコピーをもつことで、ロールバックの場合には状態復帰をすることができる。たとえば、古い内容は、同じキャッシュ106にログ状態L214であってもよいし、別のキャッシュ106に遠隔ログされていてもよいし、キャッシュ112またはメインメモリにコピーを有していてもよい。
RL216は、遠隔ログ状態の一例である。一実施形態では、状態RL216のキャッシュラインは、別のコアが完全な更新を要求してきているキャッシュラインの古いコピーバージョンである。
一実施形態では、コア104(1)が、たとえばトランザクション実行の一部として、キャッシュライン全体を上書きするとして検知(たとえば投機)することができる。コア104(1)は、SRFOWDを実行して、たとえば、修正状態M206のラインを有していたコア104(N)からキャッシュラインの所有権を取得してよい。コア104(N)は、次に、遠隔ログ状態216にキャッシュラインの現在のコピーを維持することができる。コア104(1)がトランザクションを完了することができない場合には、コア104(N)は、遠隔ログ状態216にマークされているキャッシュラインを、有効状態(たとえば修正状態M206)に復元することができる。コア104(1)がトランザクションを成功裏に完了した場合には、コア104(N)が、無効状態208に移動させることで、遠隔ログ状態216のキャッシュラインを破棄することができる。
したがい、上述した状態の例を利用すると、例である環境100が、違反を検知するメカニズムを持つことができ、キャッシュラインの古い内容を復帰させるサポートを行うことができるようになる。
<プロセッサ処理の例>
図3は、キャッシュコヒーレンシープロトコル126をサポートするよう実行可能なプロセッサ処理302をもつ環境300の一例を示す。たとえば、プロセッサ処理302は、プロセッサコア104(1)から104(N)の1以上により実行されて、キャッシュコヒーレンシープロトコル126に影響を与える。
プロセッサ処理302の例には、プロセッサ読み出し(PRd)304、プロセッサ書き込み(PWr)306、プロセッサコミット(PCo)308、プロセッサロールバック(PRo)310、および、プロセッサ投機的完全書き込み(PSCWr)312が含まれてよい。一実施形態では、プロセッサ処理302の一例が、1以上のプロセッサコア104により実行されてよい。一実施形態では、プロセッサ処理302が、たとえば、プロセッサコアによるトランザクションの実行中に実行されてもよい。しかし別の実施形態では、プロセッサ処理302が、たとえば、トランザクション内で、トランザクションの外部で、またはトランザクションの内外両方において、実行されてもよい。今後の記載では、明瞭を期すために、これらの処理をトランザクション内で実行する、として説明を行う。したがって、一実施形態では、プロセッサ読み出し(PRd)304、プロセッサ書き込み(PWr)306、および、プロセッサ投機的完全書き込み(PSCWr)312が、トランザクションの投機的な性質から、投機的処理である。当業者であれば、トランザクションの外部で実行されるプロセッサの処理を説明するために必要な拡張を用意に想到することができる。
プロセッサ読み出し処理(PRd)304は、プロセッサコアが、メモリ位置を読み出すロード命令を実行したことを示す。関連するキャッシュラインの状態に応じて、キャッシュコヒーレンシープロトコル126に知らせる必要がある場合がある。PRd304は、プロセッサコアが読み出し命令を実行したことをキャッシュコヒーレンシープロトコル126に知らせるために利用されてよい。
プロセッサ書き込み処理(PWr)306は、プロセッサコアが、メモリ位置に書き込む格納命令を実行したことを示す。関連するキャッシュラインの状態に応じて、キャッシュコヒーレンシープロトコル126に情報を知らせる必要がある。PWr306は、プロセッサコアが書き込み命令を実行したことをキャッシュコヒーレンシープロトコル126に知らせるために利用されてよい。
プロセッサコミット処理(PCo)308は、プロセッサコアが現在実行されているトランザクションにコミットすることを示す。PCo308は、プロセッサコアがコミット命令を実行したことをキャッシュコヒーレンシープロトコル126に知らせるために利用されてよい。
プロセッサロールバック処理(PRo)310は、プロセッサが、現在実行されているトランザクションにロールバックしてよいことを示している。PRo310は、プロセッサコアがロールバック命令を実行したことをキャッシュコヒーレンシープロトコル126に知らせるために利用されてよい。一例としては、割り込み、メモリ違反、または、その他のイベントが、プロセッサコアが、トランザクションの実行を完了させないようにすることができる。この場合には、プロセッサが、他のコアに、トランザクションが成功しなかったことを通知する必要がある場合がある。これら他のコアの1以上は、トランザクションに関連付けられるキャッシュラインの古いコピーを保持している場合があるので、そのように動作して、これらが古いキャッシュラインコピーをロールバックする必要がある場合がある。
プロセッサ投機的完全書き込み処理(PSCWr)312は、プロセッサコアが、キャッシュの一部(キャッシュライン全体)を上書きする旨を投機することを示す(つまり、キャッシュラインに対して投機的に書き込むこと)。したがって、他のコアは、この処理に関して知らされる必要がある場合がある。PSCWr312は、キャッシュコヒーレンシープロトコル126に対して、プロセッサコアが、投機的な完了書き込み命令を実行したことを通知するために利用されてよい。一実施形態では、PSCWr312処理が、データなしの所有権投機的要求(SRFOWD)と等しい。
一例としては、プロセッサコアは、完全なキャッシュラインを書きこむことを投機実行してよい。この場合には、プロセッサコアは、たとえばPSCWr312処理のような形式で、キャッシュラインのためにデータなしで投機的な所有権要求を送ることができる。一実施形態では、必要な場合には次に、キャッシュコヒーレンシープロトコル126が、非コア108の関連するメッセージの生成を促して、この処理をコア104に知らせてもよい。
<非コアトランザクションの例>
図4は、キャッシュコヒーレンシープロトコル126をサポートするために実行されてよい非コアトランザクション402を持つ環境400の一例を示す。一例として、プロセッサ処理302は、非コア108で生じる非コアトランザクション402に変換されてよい。
非コアトランザクション402の例には、非コア読み出し(PRd)404、非コア書き込み(PWr)406、非コアコミット(PCo)408、非コアロールバック(PRo)410、および、非コア投機的完全書き込み(USCWr)412、および、データ(data)414が含まれてよい。
非コア読み出し(PRd)404は、他のコアに、キャッシュラインが読み出された、または読み出されようとしていることを知らせる。キャッシュラインの状態によって、プロセッサが実行するPRd304処理は、URd404メッセージを非コア108で生成することができる。
非コア書き込み(UWr)406は、他のコアに、キャッシュラインが書き込まれた、または書き込まれようとしていることを知らせる。キャッシュラインの状態によって、PWr306処理は、非コアでUWrメッセージを生成することができる。
非コアコミット(UCo)408は、他のコアに、たとえば、コアがそのトランザクションにコミットしていることを知らせる。UCo408のメッセージには、コミットを実行しているコアの識別子(ID)が含まれてよい。
非コアロールバック(URo)410は、他のコアに、たとえば、コアが、そのトランザクションをロールバックしていることを知らせる。このメッセージには、ロールバックを実行しているコアのIDが含まれてよい。
非コア投機的完全書き込み(USCWr)412は、他のコアに、たとえば、プロセッサが、投機的にデータなしに所有権要求をキャッシュラインに対して行っていることを知らせる。キャッシュラインの状態によって、コアが実行するPSCWr312処理は、非コアでUSCWr412を送信することを示唆してよい。このメッセージには、SRFOWD処理を実行しているコアのIDが含まれてよい。
データ(data)414は、コア(またはメインメモリ)のいずれかが、たとえばキャッシュラインの内容で応答する非コアトランザクションである。
<キャッシュコヒーレンシー状態遷移の例>
図5は、たとえば非コア108の相互接続インタフェースコントローラ120から見たキャッシュコヒーレンシープロトコル126のキャッシュ状態の状態遷移502−538を示す環境500の例を示す。各状態遷移502−538は、非コア108で観察されるメッセージ(メッセージ/応答の対の第1のコンポ―ネント)、および、もしあれば、対応する状態遷移が生成した応答(つまりメッセージ/応答の対の第2のコンポーネント)として特定されてよい。
表1は、図5の状態遷移502−538と、関連する非コアメッセージ/応答の対の間の関連付けの例を示す。
図5では、各状態遷移502−538は、非コア108で観察されるメッセージ(たとえばメッセージ/応答の対のメッセージ部分)および関連する応答(たとえばメッセージ/応答の対の応答部分)で特定することができる。
この例としては、図5の状態遷移530(つまり、状態M206から状態RL216への遷移)は、表1の以下に示す非コアメッセージ/outの対に関連付けられる。
・USCWr412/−
この非コアメッセージ/応答の対では、USCWr412(つまり、非コア投機的完全書き込み)が、非コアで観察されるメッセージであり、一方では、状態遷移530が生成する非コアメッセージ/応答の対の応答部分が、「−」で示されており、これは、非コア108で「ほかに何もしない」ことを示唆している。
一例としては、状態遷移530で、USCWr412が、1以上のコアプロセッサ104によって非コア108内に観察されるメッセージであってよい。このUSCWr412メッセージは、PSCWr312(プロセッサ投機的完全書き込み)処理を実行するコアプロセッサ104の1つであってよく、これは、コアプロセッサが、完全なキャッシュラインに、たとえばトランザクションの実行の一部として書き込むことができることを「投機する」ことを示唆している。キャッシュラインが、書き込みを実行しているものとは異なるコアのキャッシュに修正状態M206で現在あると想定すると、キャッシュラインの状態は、遠隔ログ状態RL216に遷移する。この状態遷移530に対する応答は、表1に、「−」として示されており、これは、状態遷移530への応答が他のものとは関係がないことを示唆している。
一実施形態では、状態遷移530に関して、キャッシュラインの所有権を有する第1のプロセッサコアが、第2のプロセッサコアに関連付けられるメッセージUSCWr412を観察すると、キャッシュラインのコピーを作成して、そのキャッシュラインを、状態RL216としてタグ付することができる。第1のプロセッサコアは、第2のプロセッサコアの識別子(ID)を、RL216のキャッシュラインと関連付けることができる。第1のコアは、さらに、キャッシュラインコピーのデータなしに受領確認を提供することで、第2のコアにキャッシュラインの所有権を手放して、状態RL216にキャッシュラインコピーを維持することができる。
別の例としては、図5の状態遷移512が(つまり状態RL216から状態M RL216への遷移)が、表1で、次に示す非コアメッセージ/応答の対と関連付けられる。
・URo410/−
この非コアメッセージ/応答の対では、URo410(つまり非コアロールバック)が、非コアで観察されるメッセージであり、一方では、状態遷移512が生成する非コアメッセージ/応答の対の応答部分が、「−」で示されており、これは、非コア108で「ほかに何もしない」ことを示唆している。したがって、状態遷移512は、キャッシュラインに関連付けられ、非コア108により観察される非コアメッセージURo410を受けて、状態RL216のキャッシュラインが、状態M206に遷移することを示唆していてよい。
したがって一実施形態では、第2のコアのIDに関連付けられる状態RL216にキャッシュラインのコピーを維持する第1のコアが、非コア108で第2のコアと関連付けられるURo410(つまり非コアロールバック)メッセージを観察すると、キャッシュラインのコピーを状態M206に戻すことができる。
図5に示す別の例では、状態遷移524が、共有状態SH204から無効状態I208に遷移することを示す。表1では、状態遷移524が、以下の非コアメッセージ/応答の対に関連付けられる。
・UWr406/−
・USCWr412/−
したがって、図5の状態遷移524は、表1では、UWr406(つまり非コア書き込み)トランザクションと関連付けられて、応答としてはほかには何もしない(「−」で表す)か、または、USCWr412(つまり非コア投機的完全書き込み)トランザクションと関連付けられて、応答としてほかには何もしない。
したがってこの例では、非コア108で遷移UWr406またはUSCWr412を観察する共有状態S212にキャッシュラインを保持するコアプロセッサが、キャッシュラインを、無効状態I208にして、この状態遷移524に応じてなんら他の処理を行わなくてよい。
図5に示す別の例として、状態遷移504は、ログ状態L214から遠隔ログ状態RL216への遷移を示している。表1では、状態遷移504が、以下の非コアメッセージ/応答の対に関連付けられる。
・USCWr412/URo410
図5の状態遷移504は、表1で、USCWr412(つまり非コア投機的完全書き込み)トランザクション、および、状態遷移504に応じて生成されたURo410(つまり非コアロールバック)応答に関連付けられる。
状態遷移504に関する一実施形態では、第1のコアが、ログ状態L214のキャッシュライン、および、第1のコアによる更新に利用できる投機状態S212の関連する新たなキャッシュラインを保持していてよい。第2のコアは、ログ状態L214のキャッシュラインのためのデータ(たとえば実行処理PSCWr312)なしの所有権の投機的要求を実行することができる。第1のコアは、第2のコアの要求に関連付けられるUSCWr412メッセージを検知して、ログ状態L214のキャッシュラインを、遠隔ログ状態RL216にして、投機状態S212のキャッシュラインの新たなバージョンを無効状態I208にすることができる。ロールバックメッセージURo410は、状態遷移504に対する応答として生成されてよく、両方のコアで実行されるトランザクションにおけるコンフリクトが検知されたことにより、第1のコアがロールバックを実行したことを他のコアに通信してよい。
図5に示す別の例では、状態遷移514が、ログ状態L214から共有状態SH204への遷移を示している。表1では、状態遷移514が、以下の非コアメッセージ/応答の対に関連付けられる。
・URd404/URo410+data414
図5の状態遷移514は、表1では、URd404(つまり非コア読み出し)トランザクション、および、URo410(つまり非コアロールバック)に状態遷移514に応じて生成されたデータ414応答をプラスしたものに関連付けられる。
状態遷移514に関する一実施形態では、第1のコアが、ログ状態L214のキャッシュライン、および、第1のコアの更新のために利用される投機状態S212の関連する新たなキャッシュラインを保持していてよい。第2のコアは、ログ状態L214のキャッシュラインの読み出し(たとえば実行処理PRd304)を実行してよい。第1のコアは、第2のコアの読み出しに関連付けられるURd404メッセージを検知して、ログ状態L214のキャッシュラインを共有状態SH204にして、投機状態S212のキャッシュラインの新たなバージョンを、無効状態I208にしてよい。ロールバックメッセージURo410は、データ(つまり読み出しが要求するデータ414)とともに、状態遷移514に対する応答として生成されてよく、実行されたトランザクションのコンフリクトが検知されたことにより、第1のコアがロールバックを実行したことを他のコアに通信してよい。
図5に示す別の例では、状態遷移508が、ログ状態L214から無効状態I208への遷移を示している。表1では、状態遷移508が、以下の非コアメッセージ/応答の対に関連付けられる。
・UWr406/URo410+data414
図5の状態遷移508は、表1では、UWr406(つまり非コア書き込み)トランザクション、および、URo410(つまり非コアロールバック)に状態遷移508に応じて生成されたデータ414応答をプラスしたものに関連付けられる。
状態遷移508に関する一実施形態では、第1のコアが、ログ状態L214のキャッシュライン、および、第1のコアの更新のために利用される投機状態S212の関連する新たなキャッシュラインを保持していてよい。第2のコアは、ログ状態L214のキャッシュラインの書き込み(たとえば実行処理PWr306)を実行してよい。第1のコアは、第2のコアの書き込みに関連付けられるUWr406メッセージを検知して、ログ状態L214のキャッシュラインを無効状態I208にして、投機状態S212のキャッシュラインの新たなバージョンを、無効状態I208にしてよい。ロールバックメッセージURo410は、データ(つまり書き込みが要求するデータ414)とともに、状態遷移508に対する応答として生成されてよく、実行されたトランザクションのコンフリクトが検知されたことにより、第1のコアがロールバックを実行したことを他のコアに通信してよい。
図5に示す別の例では、状態遷移526が、観察状態O210から無効状態I208への遷移を示している。表1では、状態遷移526が、以下の非コアメッセージ/応答の対に関連付けられる。
・UWr406/URo410
・USCWr412/URo410
状態遷移526に関する一実施形態では、第1のコアが、観察状態O210のキャッシュラインを保持していてよい。第2のコアは、観察状態O210のキャッシュラインのために、書き込み(たとえば実行処理PWr306)または投機的書き込み(たとえば実行処理PSCWr312 306)を実行してよい。第1のコアは、第2のコアの書き込みに関連付けられるUWr406またはUSCWr412メッセージを検知して、観察状態O210のキャッシュラインを無効状態I208にしてよい。ロールバックメッセージURo410は、状態遷移526に対する応答として生成されてよく、実行されたトランザクションのコンフリクトが検知されたことにより、第1のコアがロールバックを実行したことを他のコアに通信してよい。
状態遷移502−538のうち上述しなかったものは、上述した例と同様の方法で解釈されてよい。
図6は、一例として、1以上のプロセッサコア104などのコアプロセッサから見たキャッシュコヒーレンシープロトコル126のキャッシュ状態202の状態遷移602−640を示す環境600の例を示す。各状態遷移602−640は、コアプロセッサが実行するコアプロセッサ処理(つまりプロセッサ処理/応答の対の第1のコンポーネント)、および、もしあれば、対応する状態遷移に応じて非コアに生成された応答メッセージ(つまりプロセッサ処理/応答の第2のコンポーネント)として特定されてよい。
表2は、図6の状態遷移602−640と、関連する非コアメッセージ/応答の対の間の関連付けの例を示す。
図6では、各状態遷移602−640が、プロセッサ処理(プロセッサ処理/応答の対の処理部分など)および、もしあれば非コア内に生成されている応答メッセージ(プロセッサ処理/応答の対の応答部分など)で特定されてよい。
一例として、図6の状態遷移620(つまり、状態M206から状態L214への遷移)が、表2の以下のプロセッサ処理/応答の対に関連付けられる。
・PSCWr312/−
・PWr306/−
これらプロセッサ処理/応答の対では、PSCWr312(つまり、プロセッサ投機完全書き込み)およびPWr306(つまりプロセッサ書き込み)が、コアプロセッサが実行可能なプロセッサ処理/応答の対の処理であり、状態遷移620が生成するプロセッサ処理/応答の各対の応答部分が、「ほかに何もしない」ことを意味する「−」で表される。
図6の状態遷移620の実施形態では、コアプロセッサ104が、キャッシュラインに関連付けられるPSCWr312処理を実行してよい。この処理は、コアプロセッサが、たとえばトランザクションの完了に成功することで、キャッシュライン全体に書き込みを行うことができると投機的に判断することを示していてよい。
図6の状態遷移620に示すように、キャッシュラインが、書き込みを実行しているコア104のキャッシュ106で修正状態M206にあると想定して、キャッシュラインがログ状態L214に遷移する。この状態遷移620に対する応答は、表2では、「ほかに何もしない」ことを意味する「−」で表されている。これは、メッセージを非コアで送り他のエージェントに処理に対する応答として通知する必要がないことを示している(というのも、処理は、書き込みを実行しているコア内でローカルに解決されているからである)。
一実施形態では、コアプロセッサが、キャッシュラインを状態L214にして、さらに、投機状態S212にタグ付されるキャッシュラインのコピーを生成する。コアプロセッサは次に、投機状態S212のキャッシュラインのコピーに書き込みを実行して、かつ、状態L214にログされている元のキャッシュラインを維持することができる。別の実施形態では、コアプロセッサは、投機状態S212のキャッシュラインのコピーに、コアプロセッサが、キャッシュライン全体に投機的に書き込むトランザクションの一環として書き込むことができる。
図6の別の例では、状態遷移610が、ログ状態L214から修正状態M206に遷移することを意味している。表2では、状態遷移610が以下のプロセッサ処理/応答の対に関連付けられる。
・PRo310/−
したがい、図6の状態遷移610は、表2では、Pro310(つまりプロセッサロールバック)処理、および、ほかには何もしない(「−」で表される)応答に関連付けられる。一実施形態では、コアプロセッサは、ログ状態L214のキャッシュラインを生成した遷移を完了できないことを検知して、PRo310処理を実行することもできる。次に、これが状態遷移610を生じさせ、状態L214のキャッシュラインが修正状態M206にロールバックする。
図6に示す別の例として、遷移状態630が、投機状態S212から修正状態M206への遷移を示している。表2では、状態遷移630が以下のプロセッサ処理/応答の対に関連付けられる。
・PCo308/UCo408
したがい、図6の状態遷移630は、表2ではPCo308(つまりプロセッサコミット)処理および非コアで生成されたUCo408(つまり非コアコミット)応答メッセージに関連付けられる。
一実施形態では、コアプロセッサは、状態S212にタグ付されているキャッシュラインに関するコミット処理PCo308を実行することができ、これにより、キャッシュラインが状態S212から状態M206に、状態遷移630の一環として移動する。別の実施形態では、コアプロセッサが、トランザクションの完了に成功したことを検知すると、状態S212にタグ付されているキャッシュラインに影響を与えるコミット処理PCo308を実行することができ、これにより、キャッシュラインが状態S212から状態M206に、状態遷移630の一環として移動する。また別の実施形態では、コアプロセッサユニットが、状態S212にタグ付されているキャッシュラインの元のコピーをログ状態L214に維持してもよい。
別の例として、図6では、状態遷移616が、投機状態S212から無効状態I208に遷移することを示している。表2では、状態遷移616が、以下のプロセッサ処理/応答の対に関連付けられる。
・PRo310/URo410
したがって、図6の状態遷移616が、表2では、PRo310(つまりプロセッサロールバック)処理、および、非コア108等の非コアで生成されたURo410(つまり非コアロールバック)応答メッセージに関連付けられる。
一実施形態では、コアプロセッサは、状態S212にタグ付されているキャッシュラインに関するコミット処理PRo310を実行することができ、これにより、キャッシュラインが状態S212から状態I208に、状態遷移616の一環として移動する。別の実施形態では、コアプロセッサが、トランザクションの完了に成功しないことを検知すると、状態S212にタグ付されているキャッシュラインに影響を与えるコミット処理PRo310を実行することができ、これにより、キャッシュラインが状態S212から状態I208に、状態遷移616の一環として移動する。また別の実施形態では、コアプロセッサが、状態S212にタグ付されているキャッシュラインの元のコピーをログ状態L214に維持して、状態S212にタグ付されているキャッシュラインが破棄されたときに、キャッシュラインの元のコピーがログ状態L214に残っているようにすることもできる。ログ状態L214のこのようなコピーは、この場合には、上述したように修正状態M206に遷移する。
別の例として、図6では、状態遷移608が、ログ状態L214から無効状態I208に遷移することを示している。表2では、状態遷移608が、以下のプロセッサ処理/応答の対に関連付けられる。
・PCo308−
したがって、図6の状態遷移608が、表2では、PCo308(つまりプロセッサコミット)処理、および、ほかには何もしない(「−」で表される)応答に関連付けられる。
一実施形態では、コアプロセッサは、状態L214にタグ付されているキャッシュラインに関するコミット処理PCo308を実行して、これにより、キャッシュラインが、状態L214から状態I208に状態遷移608の一環として遷移してよい。別の実施形態では、コアプロセッサは、トランザクションの完了に成功したことを検知すると、状態L214にタグ付されているキャッシュラインに影響を与えるコミット処理PCo308を実行することができ、これにより、キャッシュラインが状態L214から状態I208に、状態遷移608の一環として遷移してよい。
別の例として、図6では、状態遷移624が、共有状態SH204から投機状態S212に遷移することを示している。表2では、状態遷移624が、以下のプロセッサ処理/応答の対に関連付けられる。
・PWr306/UWr406
・PSCWr312/USCWr412
したがい、図6の状態遷移624は、表2において、PWr306(つまりプロセッサ書き込み)処理、および、UWr406(つまり非コア書き込み)応答、または、PSCWr312(つまりプロセッサ投機的完全書き込み)処理、および、USCWr412(つまり非コア投機的完全書き込み)応答に関連付けられる。
一実施形態では、コアプロセッサが、状態SH204にタグ付されているキャッシュラインに関する投機的書き込み(たとえば投機的に書き込むこと)を実行して、これにより、キャッシュラインが、状態SH204から投機状態S212に状態遷移624の一環として遷移してよい。
状態遷移602−640のうち上述しなかったものは、上述した例と同様の方法で解釈されてよい。
図5および図6は、同じ図に描くこともできる(プロセッサ処理(図6)を実線にして、非コアトランザクション(図5)を点線にすることで)。ここでは明瞭に説明する観点から、図5と図6とを分けた。
図1から図6は、ここでキャッシュコヒーレンシープロトコル126の様々な実施形態を説明するために利用された。しかし、これらの実施形態がキャッシュコヒーレンシープロトコル126の範囲を限定することを意図しているわけではなく、さらなる別の実施形態も存在する。
別の実施形態の一例として、コアは、現在のトランザクションがコミットまたはロールバックするかを他のコアに伝える必要は必ずしもない。一例として、第1のコアは、他のコアに対して、自身がコミットまたはロールバックを行った旨を伝え、他のコアに、状態RL216のキャッシュラインを無効にして第1のコアのコアIDにタグ付させる必要がある場合もある。したがい、PCo308またはPRo310処理を実行するコアは、前にUSCWr412メッセージをたとえばキャッシュラインに関する現在の遷移中に非コアで送信させた場合に限ってUCo408またはURo410メッセージを生成する必要があるだろう。したがって、コミットメッセージおよびロールバックメッセージを選択的にフィルタリングすることで、コミットトランザクションおよびロールバックトランザクションを非コアで回避することができる。
加えて、キャッシュラインに関する、データを伴わない所有者の投機的要求(SRFOWD)トランザクションの投機的な性質によって、プロセッサコアは、トランザクションがコミットされるか否かを知ることはできないことが示唆される。一例として、プロセッサコアは、トランザクションが成功裏に完了する場合に、キャッシュライン全体が更新されると確実に知ることができてよい。しかし一実施形態では、キャッシュコヒーレンシープロトコル126は、さもなくば成功したトランザクションがキャッシュライン全体の更新に失敗したときには、ロールバック(URo410)を強制執行するように拡張することができてよい。言い換えると、ロールバックは、関連するトランザクションが成功裏に完了して、プロセッサコアがコミットを実行した場合であっても、USCWr412により要求されたキャッシュラインに部分的に書き込む場合に生成することができる。別の実施形態では、キャッシュコヒーレンシープロトコル126が、さもなくば成功したトランザクションが、プロセッサコアがデータなしに所有権を投機的に要求した(たとえばトランザクションの一環として)すべてのキャッシュライン全体の更新に失敗した場合であってもロールバックを強制執行するように拡張することができる。
別の実施形態の例として、図5に示す状態遷移518に示すように、共有状態SH204のキャッシュラインを、別のコアがUSCWr412トランザクションを非コア108で発行したときに、状態遷移524の無効状態I208に移す。しかし別の実施形態では、そのキャッシュラインは、共有ログ状態(不図示)と称される新たな状態にしてもよい。他のコアは次に、関連するトランザクションにコミットして、共有時ログ状態の関連するキャッシュラインを、無効状態I208にしてよい。他のコアがトランザクションにロールバックする場合には、共有ログ状態のラインを、共有状態SH204に戻す。こうすることで、共有ログ状態のキャッシュラインを所有しているコアが、ロールバック時にほかの非コアトランザクションを必要とせずに、キャッシュラインにアクセスすることができるようになる。
別の例として、コア104が非コア108で非コアトランザクション402を生成させる場合、他のコア104は、すぐにトランザクションを観察してサービス提供する。たとえば、PRd304処理を遠隔ログ状態RL216のキャッシュラインで実行しているコア104は(図6の状態遷移614参照)、キャッシュラインを、即座に修正状態M206に遷移させることができる。しかし別の実施形態では、この遷移は即座に行われなくてもよい。コア104は、「自己スヌープ」されてよい(たとえば、コアが、非コアで同じ関連するメッセージを受信してよい)。一例として、第1のプロセッサコア104が、状態RL216のキャッシュラインでPRd304処理を実行する場合、URd404メッセージを、非コア108で送信することができるが、このメッセージは、状態RL216のキャッシュラインを退出することができる。自身のURd404メッセージを受信すると(図5の状態遷移522に示す)、第1のプロセッサコア104は、非コアで対応するキャッシュラインデータを送信して(たとえばすべてのコアで共有されているキャッシュメモリまたはメインメモリ116を更新する)、キャッシュラインを共有状態SH204に遷移させることで、処理を続行することができる。
別の例として、コア104は、プロセッサ処理302等の処理を、上述したトランザクション内で実行することができる。しかし別のある実施形態では、コア104が、トランザクション内で実行された読み出しとトランザクション外で実行された読み出しとを区別することができる。したがい、新たなプロセッサ処理は、たとえば、トランザクション内の読み出しが、PRd(プロセッサの投機的読み出し)処理として定義され、トランザクション外の読み出しは、PURd(プロセッサのトランザクショナルではない読み出し)処理と定義されてよく、後者は、非投機的な読み出しに相当する。同じことが書き込みおよび完全なライン書き込みにも当てはまるだろう。したがい、新たなプロセッサ処理は、たとえば、トランザクション内の書き込みが、PWr(プロセッサの投機的書き込み)処理として定義され、トランザクション外の書き込みは、PUWr(プロセッサのトランザクショナルではない書き込み)処理と定義されてよく、後者は、非投機的な書き込みに相当し、トランザクション内の完全な投機的書き込みが、PUCWr(プロセッサの投機的な完全な書き込み)処理として定義され、トランザクション外のプロセッサの書き込みは、PUCWr(プロセッサの完全なトランザクショナルではない書き込み)処理と定義されてよく、PCWrは、「データの内所有権要求」を生成する動作と類似していてよい。この場合の様々な状態間の遷移の拡張は簡単である。
<プロトコル処理の例>
図7から図9は、ここで説明する拡張されたキャッシュコヒーレンシープロトコルの様々な態様を示すフローチャートの例を示す。
図7は、コアプロセッサユニットがキャッシュメモリの一部分(たとえばキャッシュライン)に投機的に書き込みを行うキャッシュコヒーレンシープロトコルの態様を含む方法700の一例を示す。
702で、コア104の1つ等のプロセッサコアが、キャッシュメモリに投機的な書き込みを行う。一実施形態では、プロセッサコアは、キャッシュライン全体に投機的に書き込む。別の実施形態では、プロセッサコアは、トランザクション実行の一環として、修正状態M206のキャッシュライン全体に投機的に書き込みを行う。一例としては、プロセッサコアは現在のトランザクションがコミットするか否かを保証することができないので、キャッシュライン全体に投機的に書き込みを行う。
704で、プロセッサコアは、キャッシュラインをログ状態(たとえばログ状態L214)に遷移させる。一例としては、プロセッサコアが修正状態M206のラインを有しており、PWr306またはPSCWr312処理を実行する場合、キャッシュラインをログ状態L214にして、ローカルなトランザクションにとってキャッシュラインの古いコピーであることを示す。
706で、プロセッサコアは新たなキャッシュラインを作成して、新たなキャッシュラインを投機状態であるとしてタグ付する。一実施形態では、プロセッサコアがPWr306処理を実行する場合には、新たなキャッシュラインは、投機状態S212で作成され、トランザクション内の格納命令により更新されたキャッシュラインの新たなコピーであってよい。プロセッサコアがPSCWr312処理を実行する場合には、新たなキャッシュラインは、投機状態S212で作成され、トランザクション内の格納命令により更新されたキャッシュラインの新たなバージョンであってよい。一実施形態では、プロセッサコアは、更新を新たな部分に行うことができる(たとえば、投機状態S212のキャッシュライン)。この場合のPWr306およびPSCWr312処理の間の差は、プロセッサコアがPSCWr312処理を実行する場合、新たなキャッシュラインがキャッシュラインのコピーである必要がないことである。しかし別の実施形態では、キャッシュラインの新たなバージョンがキャッシュラインのコピーであってよく、新たなキャッシュラインが、キャッシュラインのコピーであってよい。
例えば、プロセッサコアが、共有状態S212のキャッシュラインにPWr306またはPSCWr312処理を実行する場合には、UWr406またはUSCWr412トランザクションがそれぞれ非コアで送信され、キャッシュラインが小槻状態S212に遷移させられる。
708で、プロセッサコアはコミット処理を実行してよい(たとえばPCo308)。一実施形態では、プロセッサコアは、トランザクションが成功する場合、PCo308を実行することができる。これにより、プロセッサコアの識別子(つまりID)をもつUCo408トランザクションが、非コア108で送信されてよい。710で、キャッシュラインを別の有効な状態にする(たとえばM206)。一例としては、コミット処理に呼応して、キャッシュラインが、投機状態S212から修正状態M206に遷移されてよい。この結果、ログ状態にタグ付されているキャッシュラインをこれ以上維持する必要がなくなる。したがい712で、プロセッサコアは、ログ状態にタグ付されているキャッシュラインを、無効状態I208にすることで破棄することができる。
プロセッサコアが708でコミット処理を行わない場合、714で、プロセッサコアはPRo310等のロールバック処理を実行してよい。一実施形態では、トランザクションが成功しない場合に、プロセッサコアがロールバック処理を実行してよい。ロールバック処理によって、ロールバックメッセージ(URo410など)が、プロセッサコアのIDとともに、非コア108で送信されてよい。ロールバック処理の結果、716で、プロセッサコアは、ログ状態にタグ付されているキャッシュラインを、別の有効な状態に変更することができる。一例では、プロセッサコアが、ログ状態L214にタグ付されているキャッシュラインの状態を修正状態M206に変更することができる。718で、ロールバック処理の結果、プロセッサコアが、投機的な状態にタグ付されている新たなキャッシュラインを、たとえば無効状態I208にタグ付することで破棄してよい。
図8は、プロセッサコアがキャッシュラインのデータを伴わない所有権の投機的要求を行う、キャッシュコヒーレンシープロトコルの態様を含む方法800の例を示すフローチャートである。
802で、一実施形態では、プロセッサコアが、キャッシュラインのデータを伴わない所有権要求を行うPSCWr312処理を実行してよい。PSCWr312処理によって、プロセッサコアのIDを含むUSCWr412メッセージが、非コア108で送られてよい。一例としては、プロセッサコアが、キャッシュライン全体等のキャッシュメモリの一部を投機的に書き込むことができる。プロセッサは、キャッシュライン全体の上書きを投機的に行うことができるので、プロセッサは、キャッシュラインに関連付けられていているデータを受信する必要がない。したがい、要求されているキャッシュラインを所有する実体はいずれも(たとえば所有者コア)、キャッシュラインに関連付けられるデータをプロセッサコアに送信する必要がない。一実施形態では、PSCWr312処理を実行しているプロセッサコアが、提供されているキャッシュラインに含まれているデータなしにキャッシュラインの所有権を要求する。
804で、プロセッサコアは、キャッシュラインの所有権に対する受領確認を検知するが、この受領確認には、所有者コア(OC)からのキャッシュラインからのデータが含まれていない。加えて、OCは、遠隔ログ状態RL216にタグ付されたキャッシュラインのコピーを作成する。一例として、現在キャッシュラインを所有しているOC(たとえば異なるプロセッサコア104)は、プロセッサコアが実行するPSCWr312処理に応答して、単に、所有権要求に対してキャッシュラインの所有権をプロセッサコアに許可する受領確認のみを返す。別の言い方をすると、非コア108で検知したUSCWr412メッセージに対して、キャッシュラインを現在所有しているOCは、単に、プロセッサコアに対して、USCWr412メッセージにIDを含んだ受領確認のみ返し、要求されているキャッシュラインのプロセッサコアの所有権の許可を行う。受領確認には、キャッシュラインのデータ内容は含めない。
806で、プロセッサコアは、投機状態(たとえば状態S212)をタグ付した新たなキャッシュラインを作成することができる。新たなキャッシュラインは、キャッシュラインの新たなコピーまたは新たなバージョンであってよい。
808で、プロセッサコアがコミットまたはロールバックのいずれを実行するかを判断する。一実施形態では、プロセッサコアが、PCo308を実行することによってトランザクションにコミットしたり、Pro310を実行することでトランザクションをロールバックしたりする。
808で、もしもプロセッサコアがコミットを実行する場合には、810で、プロセッサコアは、新たなキャッシュラインを別の有効な状態にタグ付することができる。一例としては、プロセッサコアは、新たなキャッシュラインを投機状態S212から修正状態M206へと変更することができる。812で、プロセッサコアは、関連するコアIDを持つコミットメッセージを、相互接続ネットワーク110で送る。814で、OCは、たとえばキャッシュラインの状態をI208に変更することで、遠隔ログ状態にタグ付されたキャッシュラインを破棄する。
他方で、808でプロセッサコアがロールバックを実行する場合には、816で、プロセッサコアは、前に投機状態にタグ付されていた新たなキャッシュラインを、無効状態にタグ付し直すことができる。818で、プロセッサコアは、コアIDが関連付けられたロールバックメッセージを相互接続ネットワーク110経由で送信する。820で、OCタグは、状態RL216に保持されているキャッシュラインを有効状態(M206)にタグ付する。
図9は、プロセッサコアが、キャッシュラインのデータを伴わない所有権の投機的要求を検知する、キャッシュコヒーレンシープロトコルの態様を含む方法900の例を示すフローチャートである。
902で、一実施形態で、第1のプロセッサコアは、非コア108でキャッシュラインのデータを伴わない所有権要求をしている第2のプロセッサコアのIDを含むメッセージUSCWr412を検知してよい。一例として、要求を発している第2のプロセッサコアは、キャッシュライン全体のデータを伴わない所有権要求をしているPSCWr312処理を実行したものであってよい。要求をしている第2のプロセッサコアは、キャッシュライン全体の上書きを投機的に実行するので、第1のプロセッサコアが、キャッシュラインに関連するデータを送信する必要がない。
904で、要求されているキャッシュラインを(修正状態M206で)所有している実体が(たとえば第1のプロセッサコア104)、要求されているキャッシュラインのバックアップコピーを作成して、要求している第2のプロセッサコアのIDとともに、遠隔ログ状態(たとえば状態RL216)にタグ付する。
906で、第1のプロセッサコアが、第2のプロセッサコアにキャッシュラインの所有権の受領確認を提供する。一実施形態では、受領確認は、第1のプロセッサコアから第2のプロセッサコアに対して、キャッシュラインにデータを含ませずに提供される。この時点では、キャッシュラインの所有権が、要求している実体に渡される。一例としては、受領確認が、キャッシュラインにデータを含まない非コア108で検知されたメッセージUSCWr412のIDで、第2のプロセッサコアに提供される。
908では、第1のプロセッサコアが、第2のプロセッサコアが、要求されているキャッシュラインに関連するコミットまたはロールバックを実行したかを検知する。908でもしも第1のプロセッサコアが第2のプロセッサコアがコミットを実行したと検知した場合には、910で第1のプロセッサコアが、たとえばその状態をRL216から無効状態I208に変更することでバックアップコピーを破棄する。
他方で、もしも908で第1のプロセッサコアが、第2のプロセッサコアが、要求されているキャッシュラインに関連するロールバックを実行したことを検知した場合には、912で、第1のプロセッサコアが、キャッシュラインのバックアップコピーを、別の有効な状態にタグ付する。一例としては、第1のプロセッサコアが、キャッシュラインのバックアップコピーの状態をRL216から状態M206または任意の他の有効な状態に変更させることができる。
別の実施形態(図9で示していないもの)の一例として、第1のプロセッサコアは、たとえば投機的にキャッシュラインのデータを伴わない所有権を要求している第3のプロセッサコアのIDを含む第2のUSCWr412メッセージを検知することができる。この例では、第1のプロセッサコアが、遠隔のログ状態RL216にキャッシュラインを保持して、第3のプロセッサコアのIDを記録する。第2のプロセッサコアは、第2のUSCWr412メッセージを非コア108で観察し、そのトランザクションを、その関連するキャッシュラインを投機状態S212にすることで、図5に示す状態遷移518に示す無効状態I208に移すことで、ロールバックして、関連するURo410メッセージを非コア108で送る。
図10は、複数のマルチコアプロセッサを含む高度な、または拡張されたキャッシュコヒーレンシープロトコルを実行するために利用可能な環境1000の一例を示す。環境1000では、ここで説明したキャッシュコヒーレンシープロトコル126が、拡張されて、複数のプロセッサ102(1)から102(N)でキャッシュコヒーレンシーを提供することができる(Nは、1を超える整数である)。
主題を、構造における特徴および方法における動作の両方または片方に特化した言語で記載してきたが、添付請求項に定義されている主題は、必ずしもこれら記載してきた特定の特徴または動作に限定されない点を理解されたい。そうではなくて、記載してきた特定の特徴または動作は、請求項を実装する形態の例として開示されている。
たとえば上述した装置またはプロセッサのすべての任意的な特徴を、ここで説明した方法またはプロセスに関して実装可能である。例における具体例は、1以上の実施形態のいずれにおいても利用可能である。