(57)【特許請求の範囲】
【請求項１】
それぞれ演算器を有する複数のコアと、前記複数のコアに共有されるキャッシュメモリとをそれぞれ備える複数のコアユニットと、
前記複数のコアユニットがそれぞれ備えるキャッシュメモリに接続可能なホームエージェントと、
前記ホームエージェントに接続されメインメモリとのアクセスを制御するメモリアクセスコントローラとを有し、
前記キャッシュメモリは、複数のキャッシュブロックを有するデータメモリと、前記複数のキャッシュブロックそれぞれについて、ＭＥＳＩ状態を示す第１の状態を記憶する第１のタグを備え、
前記ホームエージェントは、前記複数のコアユニットがそれぞれ備えるキャッシュメモリ内の複数のキャッシュブロックそれぞれについて、少なくとも複数のキャッシュメモリがダーティなデータをシェアする共有モディファイ状態を含む第２の状態を記憶する第２のタグを備え、
前記第２の状態が前記共有モディファイ状態の場合、対応するキャッシュブロックについて、前記第１の状態が共有状態に制御され、
データが登録され前記第１のタグの第１の状態と前記第２のタグの第２の状態とが排他状態のキャッシュブロック内の前記データが、ストア要求に応答して変更されると、前記キャッシュブロックの前記第１のタグの第１の状態と前記第２のタグの第２の状態とが第１のモディファイ状態に変更され、
前記複数のコアユニットのいずれかの第１のコアユニット内の第１のキャッシュメモリから供給される第１のロード要求に応答して、前記第１のコアユニット以外の第２のコアユニット内の第２のキャッシュメモリが保持している前記第１のロード要求に対応する前記第１のモディファイ状態のデータが破棄されると共に前記第１のキャッシュメモリに転送された場合、前記第１のキャッシュメモリと前記ホームエージェントは、転送先キャッシュブロックの前記第１のタグの第１の状態と前記第２のタグの第２の状態とを第２のモディファイ状態に変更し、
さらに、前記第１のコアユニット以外の第３のコアユニット内の第３のキャッシュメモリから供給される第２のロード要求に応答して、前記第１のコアユニット内の前記第１のキャッシュメモリが保持している前記第２のロード要求に対応する前記第２のモディファイ状態のデータが前記第３のキャッシュメモリに転送された場合、前記第１及び第３のキャッシュメモリは転送元及び転送先キャッシュブロックの前記第１のタグの第１の状態を共有状態に変更し、前記ホームエージェントは前記第１及び第３のキャッシュメモリ内の前記転送元及び転送先キャッシュブロックの前記第２のタグの第２の状態を前記共有モディファイ状態に変更する演算処理装置。
【請求項２】
前記第２の状態は、さらに、複数の演算処理装置において１つの前記演算処理装置が単独でデータを所持し且つ前記単独でデータを所持する演算処理装置内の前記複数のキャッシュメモリが前記データをクリーンな状態でシェアする共有排他的状態を含み、
前記第２のタグが記憶する第２の状態が前記共有排他的状態の場合、対応するキャッシュブロックについて、前記第１のタグが記憶する第１の状態が前記共有状態に制御される、請求項１に記載の演算処理装置。
【請求項３】
第４のコアユニット内の第４のキャッシュメモリ内の及び第５のコアユニット内の第５のキャッシュメモリ内のあるキャッシュブロックの前記第１のタグの第１の状態が共有状態で、且つ前記あるキャッシュブロックに対応する２つのキャッシュブロックの前記第２のタグの第２の状態が前記共有モディファイ状態において、
前記第４のキャッシュメモリが、指定されたキャッシュブロックのデータをリプレースするリプレース要求に応答して、前記指定されたキャッシュブロックのデータを破棄し、前記ホームエージェントが前記第４のキャッシュメモリの前記指定されたキャッシュブロックに対応する前記第２のタグの第２の状態を無効状態に変更し、
前記第４のキャッシュメモリによる前記データの破棄の後、前記第５のキャッシュメモリが、指定されたキャッシュブロックのデータをリプレースするリプレース要求に応答して、前記指定されたキャッシュブロックのデータを破棄し、前記ホームエージェントが前記第５のキャッシュメモリの前記指定されたキャッシュブロックに対応する前記第２のタグの第２の状態を無効状態に変更すると共に、前記破棄したデータを前記メモリアクセスコントローラにライトバック要求する、請求項１に記載の演算処理装置。
【請求項４】
さらに、前記複数のコアユニットそれぞれが備えるキャッシュメモリの間と、前記キャッシュメモリと前記ホームエージェントとの間に、接続経路を提供するルータ回路を有する、請求項１に記載の演算処理装置。
【請求項５】
演算処理装置の制御方法であって、
前記演算処理装置は、
それぞれ演算器を有する複数のコアと、前記複数のコアに共有されるキャッシュメモリとをそれぞれ備える複数のコアユニットと、
前記複数のコアユニットがそれぞれ備えるキャッシュメモリに接続可能なホームエージェントと、
前記ホームエージェントに接続されメインメモリとのアクセスを制御するメモリアクセスコントローラとを有し、
前記キャッシュメモリは、複数のキャッシュブロックを有するデータメモリと、前記複数のキャッシュブロックそれぞれについて、ＭＥＳＩ状態を示す第１の状態を記憶する第１のタグを備え、
前記ホームエージェントは、前記複数のコアユニットがそれぞれ備えるキャッシュメモリ内の複数のキャッシュブロックそれぞれについて、少なくとも複数のキャッシュメモリがダーティなデータをシェアする共有モディファイ状態を含む第２の状態を記憶する第２のタグを備え、
前記第２の状態が前記共有モディファイ状態の場合、対応するキャッシュブロックについて、前記第１の状態が共有状態に制御され、
前記制御方法は、
データが登録され前記第１のタグの第１の状態と前記第２のタグの第２の状態とが排他状態のキャッシュブロック内の前記データが、ストア要求に応答して変更されると、前記キャッシュブロックの前記第１のタグの第１の状態と前記第２のタグの第２の状態とが第１のモディファイ状態に変更され、
前記複数のコアユニットのいずれかの第１のコアユニット内の第１のキャッシュメモリから供給される第１のロード要求に応答して、前記第１のコアユニット以外の第２のコアユニット内の第２のキャッシュメモリが保持している前記第１のロード要求に対応する前記第１のモディファイ状態のデータが破棄されると共に前記第１のキャッシュメモリに転送された場合、前記第１のキャッシュメモリと前記ホームエージェントは、転送先キャッシュブロックの前記第１のタグの第１の状態と前記第２のタグの第２の状態とを第２のモディファイ状態に変更し、
さらに、前記第１のコアユニット以外の第３のコアユニット内の第３のキャッシュメモリから供給される第２のロード要求に応答して、前記第１のコアユニット内の前記第１のキャッシュメモリが保持している前記第２のロード要求に対応する前記第２のモディファイ状態のデータが前記第３のキャッシュメモリに転送された場合、前記第１及び第３のキャッシュメモリは、転送元及び転送先キャッシュブロックの前記第１のタグの第１の状態を共有状態に変更し、前記ホームエージェントは、前記第１及び第３のキャッシュメモリ内の前記転送元及び転送先キャッシュブロックの前記第２のタグの第２の状態を前記共有モディファイ状態に変更する演算処理装置の制御方法。
【請求項６】
それぞれ演算器を有する複数のコアと、前記複数のコアに共有されるキャッシュメモリとをそれぞれ備える複数のコアユニットと、
前記複数のコアユニットがそれぞれ備えるキャッシュメモリに接続可能なホームエージェントと、
前記ホームエージェントに接続されメインメモリとのアクセスを制御するメモリアクセスコントローラとを有し、
前記キャッシュメモリは、複数のキャッシュブロックを有するデータメモリと、前記複数のキャッシュブロックそれぞれについて、ＭＥＳＩ状態を示す第１の状態を記憶する第１のタグを備え、
前記ホームエージェントは、前記複数のコアユニットがそれぞれ備えるキャッシュメモリ内の複数のキャッシュブロックそれぞれについて、第２の状態を記憶する第２のタグを備える演算処理装置であって、
前記第２の状態は、前記演算処理装置内の複数のキャッシュメモリがダーティなデータをシェアする共有モディファイ状態と、複数の演算処理装置において１つの前記演算処理装置が単独でデータを所持し且つ前記単独でデータを所持する演算処理装置内の前記複数のキャッシュメモリが前記データをクリーンな状態でシェアする共有排他的状態を有し、
前記第２の状態が前記共有モディファイ状態及び前記共有排他的状態の場合、対応するキャッシュブロックについて、前記第１の状態が共有状態に制御される、演算処理装置。
【請求項７】
前記ホームエージェントは、前記複数のコアユニットのいずれかの第１のコアユニット内の第１のキャッシュメモリから供給されるロード要求に応答して、前記第２のタグが前記複数のコアユニット内の前記第１のコアユニット以外の第２のコアユニット内の第２のキャッシュメモリが前記ロード要求に対応するデータを保持していることを示す場合、前記第２のキャッシュメモリに、前記保持しているデータを前記第１のキャッシュメモリに転送するよう要求し、
前記第２のキャッシュメモリは、前記第１のタグの第１の状態を変更し、
前記ホームエージェントは、前記第２のタグの第２の状態を変更する、請求項６に記載の演算処理装置。
【請求項８】
前記第１のキャッシュメモリから供給されるロード要求に応答して、前記第２のキャッシュメモリが保持している前記ロード要求に対応する排他的状態のデータが前記第１のキャッシュメモリに転送された場合、前記第１のキャッシュメモリは転送先キャッシュブロックの前記第１のタグの第１の状態を共有状態に変更し、前記ホームエージェントは前記転送先キャッシュブロックの前記第２のタグの第２の状態を共有排他的状態に変更する、請求項７に記載の演算処理装置。
【請求項９】
前記第２のキャッシュメモリ内の及び第３のキャッシュメモリ内のあるキャッシュブロックの前記第１のタグの第１の状態が共有状態で、且つ前記あるキャッシュブロックに対応する２つのキャッシュブロックの前記第２のタグの第２の状態が前記共有排他的状態において、
前記第１のキャッシュメモリから供給されるストア前提ロード要求に応答して、前記第
２のキャッシュメモリ及び前記第３のキャッシュメモリが保持している前記ロード要求に対応するデータが破棄されると共に前記第１のキャッシュメモリに転送された場合、前記第１のキャッシュメモリは転送先キャッシュブロックの前記第１のタグの第１の状態を排他的状態に変更し、前記ホームエージェントは前記転送先キャッシュブロックの前記第２のタグの第２の状態を排他的状態に変更する、請求項８に記載の演算処理装置。
【請求項１０】
演算処理装置の制御方法であって、
前記演算処理装置は、
それぞれ演算器を有する複数のコアと、前記複数のコアに共有されるキャッシュメモリとをそれぞれ備える複数のコアユニットと、
前記複数のコアユニットがそれぞれ備えるキャッシュメモリに接続可能なホームエージェントと、
前記ホームエージェントに接続されメインメモリとのアクセスを制御するメモリアクセスコントローラとを有し、
前記キャッシュメモリは、複数のキャッシュブロックを有するデータメモリと、前記複数のキャッシュブロックそれぞれについて、ＭＥＳＩ状態を示す第１の状態を記憶する第１のタグを備え、
前記ホームエージェントは、前記複数のコアユニットがそれぞれ備えるキャッシュメモリ内の複数のキャッシュブロックそれぞれについて、第２の状態を記憶する第２のタグを備え、
前記制御方法は、
前記ホームエージェントは、前記キャッシュメモリ内のいずれかのキャッシュブロックについて、前記第２のタグ内の前記第２の状態を、前記演算処理装置内の複数のキャッシュメモリがダーティなデータをシェアする共有モディファイ状態と、複数の演算処理装置において１つの前記演算処理装置が単独でデータを所持し且つ前記単独でデータを所持する演算処理装置内の前記複数のキャッシュメモリが前記データをクリーンな状態でシェアする共有排他的状態を含む状態のいずれかに制御し、
前記キャッシュメモリは、前記第２のタグ内の前記第２の状態が前記共有モディファイ状態及び前記共有排他的状態の場合、対応するキャッシュブロックについて、前記第１の状態を共有状態に制御する、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置（CPU: Central Processing Unit、またはプロセッサ）は、複数のコア（Core）と複数のコアが共有し、メモリ階層においてメインメモリに最も近いラストレベルキャッシュ（Last Level Cache: LLC、以下LLC）と、メモリコントローラとを有する。メモリ階層は、例えば、コア内に設けられたレベル１キャッシュ（L1キャッシュ）と、コアの外に設けられ複数のコアが共有し、プロセッサ外部のメインメモリに接続されるレベル２キャッシュ（L2キャッシュ）を有する。この場合、メインメモリに最も近いL2キャッシュはLLCに該当する。または、メモリ階層が、コア内にL1キャッシュとL2キャッシュを有し、コアの外に複数のコアが共有し、プロセッサ外部のメインメモリに接続されるレベル３キャッシュ（L3キャッシュ）を有する場合、メインメモリに最も近いL3キャッシュがLLCに該当する。
【０００３】
いずれの階層構造であっても、LLCでキャッシュミスが発生すると、LLCは、データを管理しているプロセッサのメモリコントローラにフェッチ要求を発行し、メモリコントローラはメインメモリにアクセスしデータを読み出し、要求元LLCにデータ応答する。要求元LLCは読み出されたデータをキャッシュ登録（キャッシュフィル：cache fill）すると共に、コアにデータ応答する。
【０００４】
キャッシュ容量は増加する傾向にある。すなわち、プロセスの微細化によりCPUチップ内に集積されるコア数が増加する。また、コア数（スレッド数）の増加によりセットアソシアティブキャッシュにおける連想度（ウエイ（Way）数）が増加する。それとともに、複数のコアが共有するLLCの容量も増大する。したがって、ハイエンドのプロセッサチップは、微細化による面積の削減にかかわらず、性能向上によりチップサイズが増大傾向にある。
【０００５】
このような背景から、メニーコア（多くのコア）を有するプロセッサが全コアから平等にアクセス可能なLLC構成を適用すると、大きなチップサイズと大容量のLLCにより、LLCへのデータアクセス経路が長くなり、LLCのヒットレイテンシが増大する。
【０００６】
そこで、全てのコアが共有する単一のLLC構成よりも、LLCを複数に分割し、複数のコアグループそれぞれが分割されたLLCを共有する構成が提案されている。このような構成では、各コアグループが共有するLLCは小容量になり、コアグループ内のコアから各LLCへの物理距離は短く制御も簡単になり、高速アクセスが可能になる。すなわち、全コアから平等にアクセス可能な大容量の単一のLLC構成よりも、限られたコアが小容量のLLCを共有するコアグループを複数有する構成のほうが、LLCのヒットレイテンシが高速になる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−３４５３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、単一の演算処理装置内に複数のLLCを設ける構成にすると、複数のLLC間のコヒーレンシ制御において、メインメモリ内のディレクトリへのアクセスや、MESIプロトコルに伴うメインメモリへのライトバックのアクセスなどが頻発する。このようなメインメモリへのアクセス頻度の増大は、メモリレイテンシを遅くする性能低下を招く。
【０００９】
そこで，本開示の目的は，メモリへのアクセス頻度を抑制した演算処理装置及び演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１０】
本開示の第１の側面は，それぞれ演算器を有する複数のコアと、前記複数のコアに共有されるキャッシュメモリとをそれぞれ備える複数のコアユニットと、
前記複数のコアユニットがそれぞれ備えるキャッシュメモリに接続可能なホームエージェントと、
前記ホームエージェントに接続されメインメモリとのアクセスを制御するメモリアクセスコントローラとを有し、
前記キャッシュメモリは、複数のキャッシュブロックを有するデータメモリと、前記複数のキャッシュブロックそれぞれについて、ＭＥＳＩ状態を示す第１の状態を記憶する第１のタグを備え、
前記ホームエージェントは、前記複数のコアユニットがそれぞれ備えるキャッシュメモリ内の複数のキャッシュブロックそれぞれについて、少なくとも複数のキャッシュメモリがダーティなデータをシェアする共有モディファイ状態を含む第２の状態を記憶する第２のタグを備える、演算処理装置である。
【発明の効果】
【００１１】
第１の側面によれば，メモリへのアクセス頻度を抑制できる。
【図面の簡単な説明】
【００１２】
【図１】各演算処理装置が単一のLLCを有する構成例を示す図である。
【図２】図１の演算処理装置におけるロード要求の処理例を示す図である。
【図３】本実施の形態における演算処理装置の構成を示す図である。
【図４】ラストレベルキャッシュLLCとホームエージェントHAの構成例を示す図である。
【図５】本実施の形態における第１の状態と第２の状態の組合せを示す図である。
【図６】本実施の形態におけるLLC内の第１のタグとホームエージェントHA内の第２のタグの構成例を示す図である。
【図７】本実施の形態におけるメモリアクセス処理のフローチャート図である。
【図８】図５の状態１〜８の遷移図である。
【図９】メインメモリに記憶されるディレクトリ例を示す図である。
【図１０】ローカルCPU（L-CPU）内のLCU0のコアがLCU3のLLCのE状態のデータをLCU0のLLCにロードするロード１の動作を示す図である。
【図１１】本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによるロード１の動作を示す図である。
【図１２】第１の状態LL_Sを使用するキャッシュプロトコルによるロード１の動作（比較例）を示す図である。
【図１３】ローカルCPU（L-CPU）内のLCU0のコアがLCU3のLLCのMのデータをLCU0のLLCにロードするロード２の動作を示す図である。
【図１４】本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによるロード２の動作を示す図である。
【図１５】第１の状態LL_Sを使用するキャッシュプロトコルによるロード２の動作(比較例)を示す図である。
【図１６】ローカルCPU（L-CPU）内のLCU0のコアがLCU3のLLCのE状態のデータをロードするロード３の動作を示す図である。
【図１７】本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによるロード３の動作を示す図である。
【図１８】第１の状態LL_Sを使用するキャッシュプロトコルによるロード３の動作(比較例)を示す図である。
【図１９】ローカルCPU（L-CPU）内のLCU0のコアがLCU2及びLCU3のLLCのS状態のデータをLCU0のLLCに排他的にロードするストア前提ロード４の動作を示す図である。
【図２０】本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによるストア前提ロード４の動作を示す図である。
【図２１】第１の状態LL_Sを使用するキャッシュプロトコルによるストア前提ロード４の動作（比較例）を示す図である。
【図２２】ローカルCPU（L-CPU）内のLCU0-LLC3のLLCの第１の状態がLL_S=Sの場合にLCU0-LLC3のLLCが順にリプレースされる動作を示す図である。
【図２３】本実施の形態による第１、第２の状態を使用するキャッシュプロトコルによるリプレース動作を示す図である。
【図２４】第１の状態LL_Sを使用するキャッシュプロトコルによるリプレース動作（比較例）を示す図である。
【図２５】状態５（E/E）から状態６（M/E）への状態遷移を説明する図である。
【図２６】状態７（E/M）から状態８（M/M）への状態遷移を説明する図である。
【図２７】状態８（M/M）から状態７（E/M）への状態遷移を説明する図である。
【図２８】状態４（S/Z）から状態７（E/M）への状態遷移を説明する図である。
【図２９】状態５（E/E）から状態２（S/S）への状態遷移を説明する図である。
【発明を実施するための形態】
【００１３】
図１は、各演算処理装置が単一のLLCを有する構成例を示す図である。図１には、４つの演算処理装置CPU0-CPU3が示されている。各演算処理装置CPUは、例えば１６個のコアCOREを有する。各コアCOREは図示しない演算器とL1キャッシュを有する。各演算処理装置CPUは、１６個のコアが共有する単一のラストレベルキャッシュLLC（以下LLC）を有し、さらに、ホームエージェントHAと、メモリアクセスコントローラMACと、演算処理装置間のデータ転送などを行うルータRTと、ノンキャッシュアクセス用インターフェースNA_IFと、PCIバスなどを有する。メモリアクセスコントローラMACは、それぞれ、図示しないメインメモリへのアクセスを制御する。各CPU内のルータRTは、CPU間バスBUSを介して他のCPUのルータRTと接続される。
【００１４】
ここで、ラストレベルキャッシュとは、メモリ階層において主記憶装置であるメインメモリに最も近いキャッシュメモリをいい、メモリアクセスコントローラMACを介してプロセッサ外部のメインメモリに接続されるキャッシュメモリをいう。
【００１５】
図２は、図１の演算処理装置におけるロード要求の処理例を示す図である。図２には、例えば演算処理装置CPU0がCPU1のメモリ領域のデータを要求（ロード要求またはリード要求）した場合の処理が示される。要求を出したCPUをローカルCPU（L-CPU）、要求されたデータのメモリを管理するCPUをホームCPU(H-CPU)、要求されたデータをホームH-CPUから持ち出しているCPUをリモートCPU(R-CPU)とそれぞれ称する。ホームCPUは自分が管理しているメモリのデータが他のCPUにより持ち出されているか否かをディレクトリDIRに記憶する。ディレクトリの状態は、例えば、どのCPUもデータを持ち出していない状態（L: Local）、１つのCPUがデータを持ち出している状態（R-EX: Remote Exclusive）、２つ以上のCPUがデータを持ち出している状態（R-SH: Remote SHare）である。ディレクトリはメモリ内に記憶される。
【００１６】
そして、LLCによるキャッシュプロトコルは、一般的に、MESIプロトコルによって行われる。MESIプロトコルによれば、キャッシュメモリ内の各キャッシュブロックのデータの状態（State）は、以下の４つの状態をとる。まず、M（Modify）状態は、メインメモリから読み出したデータが変更されているダーティな状態であり、他のCPUがM状態のキャッシュブロックのデータをリードする際にこのキャッシュブロックのデータをメインメモリにライトバックしなければならない。E（Exclusive）状態は、メインメモリから読み出したデータが変更されていない状態で、メインメモリの値と一致するクリーンな状態である。S（Share）状態は、他のキャッシュメモリにも同じデータが記憶されていて、メインメモリとも値が一致する状態である。そして、I(Invalid)状態は、キャッシュブロックが無効の状態である。２つのキャッシュメモリの対応するキャッシュブロックが取りうる状態の組合せは、M/I、E/I、S/S、S/I、I/Iである。
【００１７】
MESI状態は、キャッシュ内のキャッシュタグに状態コード（State）として記憶される。状態推移の一例は、I状態のキャッシュブロックは、リード要求でデータがフィル（登録）されるとE状態になり、ライト要求でそのデータが書き換えられるとM状態になる。E状態のキャッシュブロックのデータが他のキャッシュによりリードされると共にS状態になる。M状態のキャッシュブロックに対応するデータがリード要求されると、M状態のキャッシュブロックのデータをメインメモリにライトバックし、リード要求したキャッシュのキャッシュブロックはE状態になる。
【００１８】
図２に戻り、まず、ローカルCPU（L-CPU）のLLCは、キャッシュミスすると、ホームCPU(H-CPU)に対してデータの所在の確認要求MI-SHを送信する。この確認要求に応答して、ホームCPUのホームエージェントは、メインメモリへのメモリアクセスを実行し、メモリ内のディレクトリDIR情報をチェックする。ここでは、ディレクトリDIRは、リモートCPUがデータを持ち出している（R-EX）ことが判明する。
【００１９】
そこで、ホームCPUのホームエージェントHAは、リモートCPU(R-CPU)のLLCに、データを吐き出して転送する要求（MB-SH）を送信する。この例では、リモートCPU（R-CPU）のLLCがデータをM（Modify）状態で保持していたので、ホームCPUのホームエージェントは、受信したデータを要求元のローカルCPU(L-CPU)に転送し（DT）、同時にメインメモリにデータを書き戻す（WRBK）。処理後のLLCの状態とディレクトリは、ローカルCPU(L-CPU)のLLCではE(Exclusive)状態、リモートCPU（R-CPU）のLLCではI（Invalid）状態になり、ホームCPUのディレクトリDIRでは、再びR-EX（リモートCPUがデータを持ち出している状態）になる。
【００２０】
図２によれば、リモートR-CPUからホームH-CPUを介してローカルL-CPUへデータを転送する処理中に、２回のメモリアクセスが発生する。
【００２１】
図１の構成のCPUの場合、メモリアクセスのほとんどは自分のCPUが管理しているメモリに対して行われることを想定しているため、他のCPUが管理しているメモリへのアクセス頻度は低い。したがって、他のCPUのメモリへのアクセスにより発生する遅延が、平均的なメモリレイテンシに与える影響は限定的である。なお、自分のCPUが管理しているメモリへのアクセスは、他のCPUがデータを持ち出しているかをチェックするためのディレクトリへのアクセスを兼ねる。そのため、ディレクトリへのアクセスに要する工数は付加的な工数にはならない。
【００２２】
しかし、図１に示したCPUは、微細化とチップサイズの拡大によりコア数が増大し、LLCの容量が増大し、LLCの面積が拡大し、さらに動作周波数の高速化により、キャッシュレイテンシは長くなる傾向にある。それに伴い、CPUの処理性能を向上するために、キャッシュレイテンシを短くすることが要求される。
【００２３】
キャッシュレイテンシを短縮するためには、キャッシュの物理的な距離を短縮することが有効であり、以下のようにCPUチップ内のLLCを分割し、より少ない数のコアが分割したLLCを共有する構成が有効である。
【００２４】
［本実施の形態におけるCPUとLLCとHAの構成例］
図３は、本実施の形態における演算処理装置の構成を示す図である。図３には、一例として同じ構成を有する２つのCPUが示されている。例えば、CPU0は、複数のコアCOREと、複数のコアに共有されるラストレベルキャッシュLLCとをそれぞれ備える複数のコアユニットLCU0〜LCU3を有する。CPU0は、例えば４つのコアユニットを有する。また、各コアユニットLCUは、例えば６個のコアCOREを有する。コアユニットLCU0〜LCU3は、ノードnode0〜node3とも称される。各コアCOREは、それぞれ演算器（図示せず）とL1キャッシュ、L2キャッシュを有する。コアCOREはL1キャッシュのみを有するようにしてもよい。
【００２５】
さらに、CPU0は、複数のコアユニットLCU0〜LCU3に共通にホームエージェントHAを有し、各コアユニットLCU0〜LCU3内のLLCと、ルータ回路RTを介して接続される。また、CPU0は、メインメモリへのメモリアクセスを制御するメモリアクセスコントローラMACと、キャッシュ以外のアクセスインタフェースであるノンキャッシュアクセスインタフェースNA_IFと、PCIバススイッチを有する。CPU0とCPU1との間は、それぞれのルータRTを介してCPU間バスBUSにより接続される。CPU1も同じ構成である。
【００２６】
各コアユニットLCU内のLLCは、通常のキャッシュと同様にキャッシュタグ（図示せず）を有し、キャッシュタグ内にMESI状態を有する第１の状態を記憶する。そして、ホームエージェントHAは、４つのコアユニット内のLLCの第２の状態を記憶する第２のタグ（図中、HA state LCU#（＃は０乃至３）と表記）を有する。第２の状態は、HA状態（HA StateまたはHA_S）と称する。第２の状態については、後で詳述する。
【００２７】
図４は、ラストレベルキャッシュLLCとホームエージェントHAの構成例を示す図である。LLCは、L2キャッシュ、ホームエージェントHA、他のCPUなどからの要求を受け付ける要求受付部（リクエストポート）１０と、受け付けた要求を所定の優先度で選択する要求選択部１１とを有する。さらに、LLCは、要求選択部１１が選択した要求が投入（入力）され所定のキャッシュ制御を実行するパイプライン回路１２を有する。また、LLCは、LLCのキャッシュタグLL_TAG1と、L2キャッシュのタグのコピーL2TAG2と、データを格納するデータメモリ１３と、L2キャッシュやHA等に要求を出力する要求出力部１４と、HAや他のCPUからのデータを入力しデータメモリに登録（フィル）するデータ入力制御部１５を有する。
【００２８】
パイプライン回路１２は、投入された要求を処理する過程で、キャッシュタグLL_TAG1を参照してキャッシュヒットとミスの判定を行い、L2タグコピーL2TAG2を参照してその他の処理を行い、キャッシュタグLL_TAG1やデータメモリ１３を更新し、要求やデータをL2キャッシュやHAに出力する。
【００２９】
LLCのキャッシュタグLL_TAG1には、LLCのキャッシュブロック毎にタグアドレスとMESI状態の第１の状態とが記憶される。
【００３０】
一方、ホームエージェントHAは、同様に、LLCや他のCPUからの要求を受け付ける要求受付部２０と、所定の優先度で受け付けた要求を選択する要求選択部２１と、パイプライン回路２２と、LLC、MAC、他のCPUに要求を出力する要求出力部２４と、LLCやMAC、他のCPUからのデータを格納しLLCやMAC、他のCPUに出力するデータ制御部２５を有する。
【００３１】
そして、ホームエージェントHAは、前述したとおり、４つのコアユニット内のLLCの第２の状態HA_Sを記憶する第２のタグLL_TAG2を有する。パイプライン回路２２は、第２のタグLL_TAG2を参照しその状態に応じて投入された要求を処理し、要求やデータをLLC、MAC、他のCPUなどに出力する。
【００３２】
［第１の状態LL_Sと第２の状態HA_Sの組合せ］
図５は、本実施の形態における第１の状態と第２の状態の組合せを示す図である。図１の構成では、ホームエージェントHAは、LLCと一対一に対応する構成である。それに対して、図３の構成では、ホームエージェントHAは、ルータRTを介して複数のLLCと接続される。図１の場合、ホームエージェントHAは主にメモリ内のディレクトリ情報の管理を行う。一方、図３の場合、ホームエージェントHAは、ディレクトリ情報の管理に加えて、複数のLLCとHA間のキャッシュプロトコル制御のために、複数のLLCについての第２の状態（HA状態HA_S）を管理する。
【００３３】
図５に示されるとおり、LLCの第１のタグLL_TAG1が保持する第１の状態LL_Sは、MESI状態のいずれかをとる。一方、HAの第２のタグLL＿TAG2が保持する第２の状態HA_Sは、第１の状態LL_SがS状態をとる場合に、CPU内でE(Exclusive)なデータをLLC間で共有することを示すA状態と、CPU内でM(Modify)なデータをLLC間で共有することを示すZ状態を有する。図５の状態３，４に対応する。
【００３４】
つまり、第２の状態HA_SのA状態とは、複数のCPU間において一つのCPUが単独でそのデータを所持している状態であり、且つ、そのCPU内の複数のLLC間において任意の２つ以上のLLCがそのデータをシェア（共有）している状態を意味する。また、第２の状態HA_SのZ状態とは、複数のCPU間において一つのCPUが単独でそのデータを書き換えた状態（ダーティなデータ）で所持している状態であり、且つ、そのCPU内の複数のLLC間において任意の２つ以上のLLCがそのデータをシェア（共有）している状態を意味する。
【００３５】
さらに、第２の状態HA_Sは、第１の状態LL_Sとの組合せで、CPU内でM状態のデータを保持する３つの状態（LL_S/HA_S＝M/E、E/M、M/M）を取る。図５の状態６，７，８に対応する。これらの３つの状態は、後で詳述するが、例えば、あるコアユニットLCU内のLLCにデータがフィルされると状態５（LL_S/HA_S＝E/E）となり、自分のコアユニット内のコアがそのデータを書き換えると状態６（LL_S/HA_S＝M/E）に遷移し、さらに他のコアユニットのLLCにデータが転送されると状態７（LL_S/HA_S＝E/M）に遷移し、転送先のコアユニット内のコアがデータを書き換えると状態８（LL_S/HA_S＝M/M）に遷移する。
【００３６】
また、状態２（LL_S/HA_S＝S/S）は、他のCPUとデータを共有した状態を示し、１つのCPUのみが単独でデータを所持しかつ自分のCPU内の複数のLLC間で共有する場合は、状態３（S/A）のクリーンなデータの共有状態と、状態４（S/Z）ダーティなデータの共有状態をとる。
【００３７】
図５中の、「他のCPUから見える本CPUの状態」のカラムには、複数のLLCを有する本CPU内でのデータの状態がMESI状態で示されている。すなわち、複数のCPU間のMESIプロトコルにおけるMESI状態を示す。図５に示されるとおり、CPU間では、状態１（I/I）はI状態、状態２（S/S）はS状態、状態３（S/A）はE状態、状態４（S/Z）はM状態、状態５（E/E）はE状態、状態６，７，８はM状態を意味する。
【００３８】
ホームエージェントHAは、第１、第２のタグの第１、第２の状態の組合せから、上記の他のCPUから見える本CPUの状態を判断して、他のCPUとの関係では、通常のMESIプロトコルでキャッシュ制御する。これにより、図１のCPUと図３のCPUとが混在しても適切にキャッシュ制御を行うことができる。
【００３９】
［第１タグLL_TAG1と第２タグLL_TAG2の構成例］
図６は、本実施の形態におけるLLC内の第１のタグとホームエージェントHA内の第２のタグの構成例を示す図である。前提として、LLCのキャッシュメモリは２ウエイで、各ウエイはｎ個のキャッシュブロックを有する。
【００４０】
図６の左側には、一例として４つのコアユニットLCU0-LCU3それぞれのLLC内の第１のタグLL_TAG1が示されている。各第１のタグLL_TAG1において、第１のウエイway0は、インデックス０〜n-1のｎ個のキャッシュブロックがそれぞれタグアドレスと第１の状態LL_Sを記憶する。第２のウエイway1も同様の構成である。
【００４１】
一方、図６の右側には、ホームエージェントHA内の第２のタグLL_TAG2が示されている。第２のタグLL_TAG2は、４つのコアユニットLCU0-LCU3それぞれのLLCに対応して設けられる。第２のタグLL_TAG2内のコアユニットLCU0のLLCに対応する第２のタグは、第１のタグLL_TAG1と同様に、インデックス０〜n-1のｎ個のキャッシュブロックがそれぞれタグアドレスと第２の状態HA_Sを記憶する２つのウエイを有する。残りの３つのコアユニットLCU1-LCU3のLLCに対応する第２のタグも同様である。つまり、各コアユニットのLLCに対応する第１のタグLL_TAG1と第２のタグLL_TAG2は、同じウエイ数、同じキャッシュブロック数であり、それぞれに記憶されるタグアドレスは同じである。
【００４２】
［メモリアクセス処理の全体像］
図７は、本実施の形態におけるメモリアクセス処理のフローチャート図である。一例として、図３のCPU0内のコアユニットLCU0内のコアがロード要求（リード要求）を発行したと仮定して説明する。以下のメモリアクセス処理は、（１）要求元コアが同じコアユニットLCU0内のLLCからデータを受信するか（S12）、（２）異なるコアユニット内のLLCからデータを受信するか（S18）、（３）要求コアのCPU0が管理するメインメモリからデータを受信するか（S21）、（４）異なるCPUが管理するメインメモリからデータを受信するか（S23）である。また、メモリアクセス処理は、ライト前提ロード要求の場合、もしデータが複数のLLCにシェア（共有）されていれば、データをシェアしていたLLCにデータを転送させてデータを破棄させ第１の状態をI状態にし、要求元のLLCに第１の状態をE状態にしてL2キャッシュにデータを転送する処理（S14）を含む。
【００４３】
まず、CPU0のコアユニットLCU0内のコアがロード要求を発行すると、コアユニットLCU0内のL1キャッシュとL2キャッシュが共にキャッシュミスし、コアユニットLCU0内のLLCにアクセス要求が入力される。そのLLCが第１のタグLL_TAG1を検索してヒットすると（S10のY）、ライト前提且つ第１の状態LL_S=Sでなければ（S11のN）、LLCはヒットしたデータメモリ内のデータを要求元のL2キャッシュにデータを転送する（データ応答）（S12）。
【００４４】
もし、ヒットした要求が、ライト前提のロード要求且つ第１の状態LL_S=Sの場合（S11のY）、HAは第２のタグLL_TAG2を検索して第２の状態HA_Sをチェックし、ヒットしたキャッシュブロックのデータを他のCPUがシェアしているか（HA_S=S）または他のLLCがシェアしているか（HA_S=A,Z）をチェックする（S13）。そして、HAは、データを保持するLLCにデータを破棄させそのLLCの第１の状態LL_SをI状態に変更させるとともに、要求元のLCU0のLLCに要求元のL2キャッシュにデータを転送させそのLLCの第１の状態LL_SをE状態に変更させる。その後、LCU0内のコアがライト処理を実行する。書き込む前にキャッシュ内の状態をE状態にする必要があるので、ライト前提のロード要求が行われる。この処理は、後述するライト前提のロード要求（Eでロードする要求）に対応する。
【００４５】
工程S10にて、LCU0のLLCの第１のタグでキャッシュミスした場合（S10のN）、LLCは、HAに要求を送信し、HAに第２のタグLL_TAG2を検索して第２の状態HA_Sをチェックさせ、同じCPU0内の他のLLCがデータを所持しているか否か、または他のCPUがデータを所持しているか否かをチェックさせる（S15）。
【００４６】
工程S15のチェックの結果、同じCPU0内の他のLLCがデータを保持している場合（S16のY）、HAは、そのデータを保持している他のLLCに要求元LLCにデータを転送するよう要求する（S17）。これに応答して、そのデータを保持する他のLLCから要求元LLCにデータ転送が行われ、それに続いて要求元L2キャッシュにデータが転送され、要求元LLCの第１のタグの第１の状態LL_Sが更新されるとともに、HAの第２のタグの第２の状態HA_Sも更新される（S18）。
【００４７】
一方、工程S15のチェックの結果、同じCPU0内の他のLLCがデータを保持していない場合（S16のN）、メインメモリにアクセスが必要になる。
【００４８】
そこで、アクセス先がローカル領域（要求を出したCPU0が管理するメインメモリのアドレス領域）であれば（S19のY）、HAは、メモリアクセスコントローラMACにメモリアクセスを要求し（S20）、やがて、メインメモリから読み出したデータがメモリアクセスコントローラMACから要求元LLCに送信され、要求元LLCがデータを受信し、それに続いて要求元L2キャッシュにデータを転送する（S21）。そして、要求元LLCの第１の状態LL_SとHAの第２の状態HA_Sとが更新され、また、必要に応じてメインメモリ内のディレクトリDIRが更新される。
【００４９】
一方、アクセス先がローカル領域ではない場合（S19のN）、アクセス先のメインメモリを管理しているホームCPUにデータを要求する（S22）。やがて、ホームCPUからデータが転送されてくると、CPU0内の要求元LLCがそのデータを受信し、要求元L2キャッシュにデータを転送する（S23）。そして、要求元LLCの第１の状態LL_SとHAの第２の状態HA_Sとが更新され、また、ホームCPUのメインメモリ内のディレクトリDIRが更新される。
【００５０】
［状態遷移］
図８は、図５の状態１〜８の遷移図である。図中、四角形内の数字は状態１〜８のいずれかを、「S S」は第１の状態LL_Sと第２の状態HA_Sをそれぞれ示す。また、状態遷移の動作原因を示す省略語は、次の意味である。
LD：ロード（リード）
ST：ストア（ライト）
RPL：リプレース（キャッシュ内のデータを吐き出す処理）
LD_EX：ストア前提ロード（ライト前提リード、排他的ロード）
O_CPU：他のCPUによる処理
O_LCU：他のコアユニットLCUによる処理
CORE：同じコアユニットLCU内のコアによる処理
【００５１】
また、他のCPUによるストア前提ロードO_CPU_LD_EXは、リプレースRPLと同じ動作であり、I状態に遷移する。状態６，７，８からの別のCPUによるロードO_CPU_LDはリプレースRPLと同じ動作であり、I状態に遷移する。
【００５２】
状態１〜８のうち、初期状態は状態１（I/I）である。状態１でロード要求LDまたはストア前提ロードLD_EXが実行されて状態１（I/I）のキャッシュブロックにデータがフィルされると、状態１から状態５(E/E)に遷移する。状態５は他のコアユニットLCUによるストア前提ロードO_LCU_LD_EXが実行されても遷移しない。
【００５３】
次に、状態５（E/E）のキャッシュブロックにコアによるストアCORE_STが実行されると、データが書き換えられてダーティになり、状態６（M/E）に遷移する。状態６は、コアによるストアCORE_STが再度実行されても遷移しない。
【００５４】
状態６（M/E）で他のLCUによるロードO_LCD_LDまたはストア前提ロードO_LCU_LD_EXが実行されると、状態７（E/M）に遷移する。これは後述するロード２に対応する。状態７は、他のLCUによるストア前提ロードO_LCU_LD_EXが再度実行されても遷移しない。
【００５５】
状態７（E/M）でコアによるストアCORE＿STが実行されると、状態７は状態８（M/M）に遷移する。逆に、状態８（M/M）で他のLCUによるロード、ストア前提ロードが実行されると、状態７に戻る。状態８は、コアによるストアCORE_STが実行されても遷移しない。
【００５６】
状態７（E/M）で他のLCUによるロードが実行されると、状態４（S/Z）に遷移する。これは後述するロード３に対応する。状態４は、他のLCUによるロードO_LCU_LDが実行されると遷移しない。
【００５７】
状態５（E/E）で他のLCUによるロードO_LCU_LDが実行されると、状態３（S/A）に遷移する。これは後述するロード１に対応する。その後、状態３は他のLCUによるロードが実行されても遷移しない。
【００５８】
状態５（E/E）で他のCPUによるロードO_CPU_LDが実行されると、状態２（S/S）に遷移する。状態２はロードが繰り返されても維持される。逆に、状態２（S/S）でストア前提ロードLD_EXが実行されると、状態５（E/E）に遷移する。これは、後述するストア前提ロード４に対応する。
【００５９】
そして、状態２〜５で、他のCPUによるストア前提ロードO_CPU_LD_EXまたはリプレースRPLが実行されると、状態１に遷移する。また、状態６，７，８で他のCPUによるロードO_CPU_LDまたはストア前提ロードO_CPU_LD_EXまたはリプレースRPLが実行されると、状態１に遷移する。これらの遷移では、キャッシュブロック内のデータの吐き出しを伴い、キャッシュブロック内のデータは無くなるからI状態に遷移する。
【００６０】
［ディレクトリ例］
図９は、メインメモリに記憶されるディレクトリ例を示す図である。前述のとおり、ディレクトリは、キャッシュブロック単位のアドレスに対応して、どのCPUもデータを持ち出していない状態L(Local)と、１個のCPUだけがデータを持ち出している状態R-EX(Remote Exclusive)と、複数のCPUがデータを持ち出している状態R-SH(Remote SHare)のいずれかを記憶する。さらに、どのCPUが各状態に該当するかを示す対象CPUの情報も有する。図９に示した例では、１６個のCPUが互いに接続された情報処理システムの場合、対象CPU情報は、例えば、対象CPUを「１」、非対象CPUを「０」、自分のCPUを「−」で示す１６ビット列で表現される。
【００６１】
図９の例では、ホームCPU（H-CPU）がCPU[1]であり、ホームCPUが管理するメモリのデータを自分のCPUのキャッシュが持ち出しているか否かは、キャッシュのタグの状態を参照すれば分かるので、１６ビット列のCPU[1]は「−」になっている。図９の例では、アドレスADD1のキャッシュブロックのデータがCPU[15]により持ち出され、アドレスADD2のデータはどのCPUも持ち出しておらず、アドレスADD3のデータはCPU[14],CPU[2]により持ち出され、アドレスADD4のデータは他の全てのCPUにより持ち出されていることを示している。
【００６２】
［本実施の形態のロード要求の動作］
次に、図８の遷移図に示した４種類のロードとリプレースによる動作について詳述する。その後、２つのストアと３つのロードについて簡単に説明する。前程として、本実施の形態の演算処理装置CPUは、図３に示すとおり４つのコアユニットLCU0-LCU3を有する。また、少なくともローカルCPUとホームCPUとを含む複数のCPUがCPUバスを介して互いに接続されている。
【００６３】
［ロード１］
図１０は、ローカルCPU（L-CPU）内のLCU0のコアがLCU3のLLCのE状態のデータをLCU0のLLCにロードするロード１の動作を示す図である。図１０中、左側には、本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによる動作を示し、ローカルCPU（L-CPU）のLCU0-LCU3のLLCの第１の状態LL_SとHAの第２の状態HA_Sについて遷移前後の状態を示す。右側は、図３のCPU内のLLCが複数のコアグループLCU毎に分割された構成において、第１の状態LL_Sだけを使用するキャッシュプロトコルによる動作を示す。つまり、右側の例は、本実施の形態と比較するために示される。
【００６４】
図１１は、本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによるロード１の動作を示す図である。図１０の左側に示すとおり、ロード１は、ローカルL-CPUのLCU3のLLCがデータをE状態で記憶している場合、LCU0のコアがロード要求を発行し、LCU0のLLCにデータをフィルする動作である。つまり、ロード１により、LCU3のLLCのキャッシュブロックは状態５（E/E）から状態３（S/A）へ遷移する。
【００６５】
図１１において、LCU0のコアがロード要求を発行し、L2キャッシュからLLCにロード要求が発行される（S30）。LCU0のLLCが第１のタグLL_TAG1を検索しキャッシュミスする（S31）。LCU0のLLCがルータRT経由でHAにロード要求を発行し（S32）、HAは第２のタグLL_TAG2を検索する。その結果、HAは、４つのLCU0-LCU3内のアクセス先アドレスに対応するキャッシュブロックの第２の状態HA_SがI-I-I-E状態であることから、LCU3のLLCがEでデータを所持し、本CPUがEで所持していることを検出する（S33）。その結果、HAは、LCU3のLLCにデータ転送要求を発行し（S34）、LCU3のLLC内のデータをLCU0のLLCに転送することを要求する。
【００６６】
このデータ転送要求S34に応答して、LCU3のLLC（のパイプライン回路）は所持するデータをLCU0のLLCにルータRTを介して転送し、第１の状態LL_SをEからSに更新する（S35）。このデータ転送に応答して、LCU0のLLC（のパイプライン回路）は受信したデータをフィル（登録）し、そのデータをL2キャッシュにデータ応答し、第１の状態LL_SをIからSに更新する（S36）。そして、L2キャッシュはデータ応答のデータをフィルする。
【００６７】
一方、LCU3のLLC（のパイプライン回路）はデータ転送完了通知をHAに発行し（S37）、それに応答してHAは第２のタグLL_TAG2の第２の状態HA_Sを「A-I-I-A」に更新する（S38）。一連の処理において、ホームCPU(H-CPU)のメモリへのメモリアクセスは発生していない。
【００６８】
図１２は、第１の状態LL_Sを使用するキャッシュプロトコルによるロード１の動作（比較例）を示す図である。図１０の右側に示すとおり、ロード１では、ローカルL-CPUのLCU3のLLCがデータをE状態で記憶している場合、LCU0のコアがロード要求を発行し、LCU0のLLCにデータをフィルする。図１２には、図１１と同じ処理には同じ工程番号を付し、対応する処理には同じ工程番号＋Aを付している。
【００６９】
図１２において、リモートL-CPUであるCPU0のLCU0のL2キャッシュからLLCにロード要求が発行され（S30）、LCU0のLLCが第１のタグLL_TAG1を検索しキャッシュミスする（S31）。LCU0のLLCがホームCPUにフェッチ要求を発行し（S32_A）、ホームCPUのMACはメモリ内のディレクトリDIRを検索する（S33_A）。その結果、ホームCPUは、リモートCPU(ここでは、このリモートCPUはローカルL-CPUと同じとする。)がE状態でデータを所持し、LCU3が所持していることを検出する。ここで、図９のディレクトリの対象CPU情報には対象CPUと対象コアユニットLCU情報も記憶されているものとする。その結果、ホームCPUのHAは、リモートCPU（CPU0）のLCU3のLLCにデータ転送要求を発行し（S34）、LCU3のLLC内のデータをLCU0のLLCに転送することを要求する。
【００７０】
その後の処理は、図１１と同様であり（S35,S36）、ローカルL-CPUのLCU3がデータ転送完了通知をホームH-CPUに送信すると（S37）、ホームH-CPUはディレクトリをローカルL-CPUのLCU0,3がデータをシェアしているように更新する（S38_A）。
【００７１】
このように、第２の状態HA_Sを利用しない場合、ホームH-CPUが管理するメモリ内のディレクトリに２回アクセスすることが必要になる。それに対して、本実施の形態の図１１の第１の状態LL_Sに加えて第２の状態HA_Sを使用するキャッシュプロトコルでは、メモリアクセスが発生していない。つまり、本実施の形態によれば、ホームエージェントHAが複数のLLCの第２の状態HA_Sを管理しているので、できるだけローカルL-CPU内で処理を完結できる。
【００７２】
［ロード２］
図１３は、ローカルCPU（L-CPU）内のLCU0のコアがLCU3のLLCのMのデータをLCU0のLLCにロードするロード２の動作を示す図である。図１０と同様に、左側には、本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルの動作を示し、右側は、第１の状態LL_Sだけを使用するキャッシュプロトコルの動作を示す。
【００７３】
図１４は、本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによるロード２の動作を示す図である。図１３の左側に示すとおり、ロード２は、ローカルL-CPUのLCU3のLLCがデータをM状態で記憶している場合、LCU0のコアがロード要求を発行し、LCU0のLLCにそのデータをフィルする動作である。つまり、ロード２により、LCU3のLLCの状態６（M/E）からLCU0のLLCの状態７（E/M）へ遷移する。
【００７４】
図１４において、LCU0のコアがロード要求を発行し、L2キャッシュからLLCにロード要求が発行される（S40）。LCU0のLLCが第１のタグLL_TAG1を検索しキャッシュミスする（S41）。LCU0のLLCがHAにロード要求を発行し（S42）、HAは第２のタグLL_TAG2を検索する(S43)。その結果、HAは、４つのLCU0-3内のアクセス先アドレスに対応するキャッシュブロックの第２の状態HA_SがI-I-I-E状態であることから、LCU3のLLCがEでデータを所持し、本CPUがEで所持していることを検出する。その結果、HAは、LCU3のLLCにデータ転送要求を発行し（S44）、LCU3のLLC内のデータをLCU0のLLCに転送することを要求する。
【００７５】
このデータ転送要求S44に応答して、LCU3のLLCは所持するデータをLCU0のLLCにルータRTを介して転送し、第１の状態LL_SがM状態であるため、通常のMESIプロトコルによりデータを破棄し、第１の状態LL_SをMからIに更新する（S45）。このデータ転送に応答して、LCU0のLLCは受信したデータをフィル（登録）し、そのデータをL2キャッシュにデータ応答し、第１の状態LL_SをIからEに更新する（S46）。このデータ応答によりL2キャッシュはデータをフィルする。
【００７６】
一方、LCU3のLLCはデータ転送完了通知をHAに発行し（S47）、それに応答してHAは第２のタグLL_TAG2の第２の状態HA_Sを「M-I-I-I」に更新する（S48）。一連の処理において、ホームCPU(H-CPU)のメモリへのメモリアクセスは発生していない。特に、LCU3のLLCはM状態のデータをメモリにライトバックすることは行わない。
【００７７】
図１５は、第１の状態LL_Sを使用するキャッシュプロトコルによるロード２の動作(比較例)を示す図である。図１３の右側に示すとおり、ロード２では、ローカルL-CPUのLCU3のLLCがデータをM状態で記憶している場合、LCU0のコアがロード要求を発行し、LCU0のLLCにデータをフィルする。
【００７８】
図１５において、ローカルL-CPUのLCU0のL2キャッシュからLLCにロード要求が発行される（S40）。LCU0のLLCが第１のタグLL_TAG1を検索しキャッシュミスする（S41）。LCU0のLLCがホームCPUにフェッチ要求を発行し（S42_A）、ホームCPUのMACはメモリ内のディレクトリDIRを検索する(S43_A)。その結果、ホームCPUは、リモートCPU（ローカルL-CPUと同じ）のLCU3がE状態でデータを所持していることを検出する。その結果、ホームH-CPUのHAは、ローカルL-CPUのLCU3のLLCにデータ転送要求を発行し（S44）、LCU3のLLC内のデータをLCU0のLLCに転送することを要求する。
【００７９】
その後、図１４と同様の処理が行われ（S45,S46）、ローカルL-CPUのLCU3がホームH-CPUにデータ転送し（S47_A）、ホームH-CPUはディレクトリをローカルL-CPUのLCU0がデータをEで所持するように更新し、データをライトバックする（S48_A）。
【００８０】
このように、第２の状態HA_Sを利用しない場合、ホームH-CPUが管理するメモリに２回アクセスし、ディレクトリの参照と変更及びライトバックが必要になる。それに対して、図１４の第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルでは、メモリアクセスが発生していない。つまり、本実施の形態によれば、ホームエージェントHAが複数のLLCの第２の状態HA_Sを管理しているので、できるだけローカルL-CPU内で処理を完結できる。
【００８１】
［ロード３］
図１６は、ローカルCPU（L-CPU）内のLCU0のコアがLCU3のLLCのE状態のデータをロードするロード３の動作を示す図である。図１６中、左側は、本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルの動作を示し、右側は、第１の状態LL_Sだけを使用するキャッシュプロトコルの動作を示す。
【００８２】
図１７は、本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによるロード３の動作を示す図である。図１６の左側に示すとおり、ロード３は、ローカルL-CPUのLCU3のLLCがデータをE状態で記憶している場合、LCU0のコアがロード要求を発行し、LCU0のLLCにデータをフィルする動作である。つまり、ロード３により、LCU3のLLCのキャッシュブロックは状態７（E/M）から状態４（S/Z）へ遷移する。
【００８３】
図１７において、ローカルL-CPUのLCU0のコアがロード要求を発行し、L2キャッシュからLLCにロード要求が発行される（S50）。LCU0のLLCが第１のタグLL_TAG1を検索しキャッシュミスする（S51）。LCU0のLLCがHAにロード要求を発行し（S52）、HAは第２のタグLL_TAG2を検索する(S53)。その結果、HAは、４つのLCU0-LCU3のLLCの第２の状態HA_SがI-I-I-M状態であることに基づき、LCU3のLLCがダーティなデータを所持し、本CPUがMで所持していることを検出する。その結果、HAは、LCU3のLLCにデータ転送要求を発行し（S54）、LCU3のLLC内のデータをLCU0のLLCに転送することを要求する。
【００８４】
このデータ転送要求S54に応答して、LCU3のLLCはデータをLCU0のLLCにルータRTを介して転送し、第１の状態LL_SをEからSに更新する（S55）。このデータ転送に応答して、LCU0のLLCは受信したデータをフィルし、そのデータをL2キャッシュにデータ応答し、第１の状態LL_SをIからSに更新する（S56）。このデータ応答によりL2キャッシュはデータをフィルする。
【００８５】
一方、LCU3のLLCはデータ転送完了通知をHAに発行し（S57）、それに応答してHAは第２のタグLL_TAG2の第２の状態HA_Sを「Z-I-I-Z」に更新する。一連の処理において、ホームCPU(H-CPU)のメモリへのメモリアクセスは発生していない。
【００８６】
図１８は、第１の状態LL_Sを使用するキャッシュプロトコルによるロード３の動作(比較例）を示す図である。図１６の右側に示すとおり、ロード３では、ローカルL-CPUのLCU3のLLCがデータをM状態で記憶している場合、LCU0のコアがロード要求を発行し、LCU0のLLCにデータをフィルする。
【００８７】
図１８において、ローカルL-CPUのLCU0のL2キャッシュからLLCにロード要求が発行される（S50）。LCU0のLLCがキャッシュミスする（S51）。LCU0のLLCがホームCPUにフェッチ要求を発行し（S52_A）、ホームCPUのMACはメモリ内のディレクトリDIRを検索する(S53_A)。その結果、ホームCPUは、リモートCPU(ローカルL-CPUと同じ)がE状態でデータを所持し、LCU3が所持していることを検出する。その結果、ホームH-CPUのHAは、ローカルL-CPUのLCU3のLLCにデータ転送要求を発行し（S54）、LCU3のLLC内のデータをLCU0のLLCに転送することを要求する。
【００８８】
その後、LCU3のLLCはデータをLCU0のLLCに転送し、第１の状態LL_SがM状態であるためデータを吐き出し、第１の状態LL_SをMからIに更新する（S55＿A）。さらに、LCU0のLLCは転送されたデータをフィルし、第１の状態LL_SをIからEに更新し、L3キャッシュにデータ応答する（S56）。さらに、ローカルL-CPUのLCU3は、M状態だったため、MESIプロトコルにより吐き出したデータをホームH-CPUにデータ転送する（S57_A）。これに応答して、ホームH-CPUはディレクトリをローカルL-CPUのLCU0がデータを所持するように更新し、データをライトバックする（S58_A）。
【００８９】
このように、第２の状態HA_Sを利用しない場合、ホームH-CPUが管理するメモリに２回アクセスし、ディレクトリの参照と変更及びライトバックが必要になる。それに対して、図１７の第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルでは、メモリアクセスが発生していない。本実施の形態によれば、ホームエージェントHAが複数のLLCの第２の状態HA_Sを管理しているので、できるだけローカルL-CPU内で処理を完結できる。
【００９０】
［ストア前提ロード４（E状態でロードする）］
図１９は、ローカルCPU（L-CPU）内のLCU0のコアがLCU2及びLCU3のLLCのS状態のデータをLCU0のLLCに排他的にロードするストア前提ロード４の動作を示す図である。図１９中、左側は、第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルの動作を、右側は、第１の状態LL_Sだけを使用するキャッシュプロトコルの動作をそれぞれ示す。
【００９１】
図２０は、本実施の形態による第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルによるストア前提ロード４の動作を示す図である。図１９の左側に示すとおり、ストア前提ロード４は、ローカルL-CPUのLCU2,LCU3のLLCがデータをS状態で記憶している場合、LCU0のコアがストア前提ロード要求を発行し、LCU0のLLCにE状態でそのデータをフィルする動作である。つまり、ストア前提ロード要求は、データを所持していたLLCのS状態をI状態にし、データを新たに所持するLLCにそのデータをE状態で所持することを要求する。その結果、このロード後に、コアは必要なタイミングでそのLLC内のデータを書き換えることができる。ストア前提ロード４により、LCU2,LCU3のLLCの状態３（S/A）からLCU0のLLCの状態５（E/E）へ遷移する。
【００９２】
図２０において、ローカルL-CPUのLCU0のコアがロード要求を発行し、L2キャッシュがLLCにロード要求を発行する（S60）。LCU0のLLCが第１のタグLL_TAG1を検索しキャッシュミスする（S61）。LCU0のLLCがHAにロード要求を発行し（S62）、HAは第２のタグLL_TAG2を検索する(S63)。その結果、HAは、４つのLCU0-3のLLCの第２の状態HA_SがI-I-A-A状態であることから、LCU2,LCU3のLLCがクリーンなデータをシェアし、本CPUがEで所持していることを検出する。その結果、HAは、LCU2のLLCにデータ転送・破棄要求を、LCU3のLLCに破棄要求を発行し（S64）、LCU2のLLC内のデータをLCU0のLLCに転送することを要求する。
【００９３】
このデータ転送・破棄要求に応答して、LCU3のLLCはデータを破棄し第１の状態LL_SをSからIに更新し（S65）、LCU2のLLCはデータをLCU0のLLCにルータRTを介して転送し、破棄し、第１の状態LL_SをSからIに更新する（S66）。このデータ転送に応答して、LCU0のLLCは受信したデータをフィルし、そのデータをL2キャッシュにデータ応答し、第１の状態LL_SをIからEに更新する（S67）。このデータ応答によりL2キャッシュはデータをフィルする。
【００９４】
一方、LCU2,LCU3のLLCはデータ転送・破棄完了通知をHAに発行し（S68）、それに応答してHAは第２のタグLL_TAG2の第２の状態HA_Sを「E-I-I-I」に更新する。一連の処理において、ホームCPU(H-CPU)のメモリへのメモリアクセスは発生していない。
【００９５】
図２１は、第１の状態LL_Sを使用するキャッシュプロトコルによるストア前提ロード４の動作（比較例）を示す図である。図１９の右側に示すとおり、ストア前提ロード４では、ローカルL-CPUのLCU2,LCU3のLLCがデータをS状態で記憶している場合、LCU0のコアがストア前提ロード要求を発行し、LCU0のLLCにデータをE状態でフィルする。
【００９６】
図２１において、LCU0のL2キャッシュからLLCにロード要求が発行される（S60）。LCU0のLLCがキャッシュミスする（S61）。LCU0のLLCがホームCPUにフェッチ要求を発行し（S62_A）、ホームCPUのMACはメモリ内のディレクトリDIRを検索する(S63_A)。その結果、ホームCPUは、リモートCPU（本ローカルL-CPUと同じ）のLCU2,LCU3がS状態でデータを所持していることを検出する。その結果、ホームH-CPUのHAは、ローカルL-CPUのLCU2,LCU3のLLCにデータ転送・破棄要求を発行し（S64）、LCU2,LCU3のLLC内のデータをLCU0のLLCに転送し、破棄することを要求する。
【００９７】
その後、図２０と同じ処理S65, S66，S67, S68が実行され、ホームH-CPUはディレクトリをローカルL-CPUのLCU0がデータをEで所持するように更新する（S69_A）。
【００９８】
このように、第２の状態HA_Sを利用しない場合、ホームH-CPUが管理するメモリに２回アクセスし、ディレクトリの参照と更新が必要になる。それに対して、図２０の第１の状態LL_Sと第２の状態HA_Sを使用するキャッシュプロトコルでは、メモリアクセスが発生していない。本実施の形態によれば、ホームエージェントHAが複数のLLCの第２の状態HA_Sを管理しているので、できるだけローカルL-CPU内で処理を完結できる。
【００９９】
［リプレース］
図２２は、ローカルCPU（L-CPU）内のLCU0-LCU3のLLCの第１の状態がLL_S=Sの場合にLCU0-LCU3のLLCが順にリプレースされる動作を示す図である。図１６中、左側は、本実施の形態による第１、第２の状態LL_S、HA_Sを使用するキャッシュプロトコルの動作を示し、右側は、第１の状態LL_Sだけを使用するキャッシュプロトコルの動作を示す。
【０１００】
図２３は、本実施の形態による第１、第２の状態を使用するキャッシュプロトコルによるリプレース動作を示す図である。図１６の左側に示すとおり、HAの４つのLLCの第２の状態がHA_S=Zであるので、CPU間ではM状態、LLC間ではS状態である。リプレースとは,LLC内のあるキャッシュブロックを追い出す為にそのデータを吐き出させる動作であり、吐き出されたデータはメモリにライトバックされる。そして、データを吐き出したキャッシュブロックにはその後新しいデータがフィルされる。一般に、キャッシュミスするとヴィクティムラインのリプレースが実行される。
【０１０１】
図２３において、LCU0のLLCがリプレースを実行してデータを吐き出し第１の状態LL_SをS状態からI状態に変更し(S70)、吐き出したデータをHAに転送し（S71）、HAが第２の状態HA_Sを参照して他のLCUのLLCも同じデータを保持していることを検出し、LCU0に対する第２の状態をZ状態からI状態に変更する（S72）。
【０１０２】
次に、LCU2のLLCがリプレースを実行してデータを吐き出し第１の状態LL_SをS状態からI状態に変更し(S73)、吐き出したデータをHAに転送し（S74）、HAが第２の状態HA_Sを参照して他のLCUのLLCも同じデータを保持していることを検出し、LCU2に対する第２の状態をZ状態からI状態に変更する（S75）。
【０１０３】
さらに、LCU1のLLCがリプレースを実行してデータを吐き出し第１の状態LL_SをS状態からI状態に変更し(S76)、吐き出したデータをHAに転送し（S77）、HAが第２の状態HA_Sを参照して他のLCUのLLCも同じデータを保持していることを検出し、LCU1に対する第２の状態をZ状態からI状態に変更する（S78）。
【０１０４】
最後に、LCU3のLLCがリプレースを実行してデータを吐き出し第１の状態LL_SをS状態からI状態に変更し(S79)、吐き出したデータをHAに転送し（S80）、HAがLCU3に対する第２の状態をZ状態からI状態に変更し（S81）、第２の状態HA_Sによれば他のLCUのLLCは同じデータを保持していないことが判明するので、メモリにライトバックする（S82）。つまり、HA_S=Z-Z-Z-Zの場合、最後のダーティなデータが吐き出された時に初めてメモリにライトバックし、それまでのリプレース動作ではHAが第２の状態HA_SをZ状態からI状態に変更するだけで、メモリアクセスは発生しない。
【０１０５】
図２４は、第１の状態LL_Sを使用するキャッシュプロトコルによるリプレース動作（比較例）を示す図である。図２２の右側に示すとおり、ローカルL-CPUのLCU0-LCU3のLLCがデータをS状態で記憶している状態で、順番にデータをリプレースする。
【０１０６】
図２４において、ローカルL-CPUの各LCU0, LCU2, LCU1, LCU3が順番にデータをリプレースし（S70, S73, S76, S79）、データ転送し（S71, S74, S77, S80）する。そして、ホームH-CPUがメモリアクセスし、ディレクトリを順にR-SHで維持(S72_A)、R-SHで維持(S75_A)、R-EXに変更し(S78_A)、最後にINVに変更しメモリにライトバックする（S81_A）。つまり、ホームH-CPUが毎回メモリアクセスしてディレクトリの確認と変更を行い、最後にメモリへのライトバックを実行する。
【０１０７】
以上、本実施の形態のキャッシュプロトコルの特に有利な面がある５つの動作について詳述した。次に、本実施の形態のキャッシュプロトコルによる５つの状態遷移について簡単に説明する。
【０１０８】
［ストア（状態５（E/E）から状態６（M/E）へ状態遷移）］
図２５は、状態５（E/E）から状態６（M/E）への状態遷移を説明する図である。この例では、ローカルL-CPUのLCU3のLLC内のE状態のデータに、LCU3内のコアがライト動作を行う。LCU3のLLCのデータはE状態であるので、LCU3のコアはそのデータにライト動作を行うことができる。その結果、LCU3のLLCのパイプラインは、通常のMESIプロトコルにより、第１の状態LL_SをE状態からM状態に変更する。HAの第２の状態HA_SSはE状態のまま変更されない。
【０１０９】
［ストア（状態７（E/M）から状態８（M/M）への状態遷移）］
図２６は、状態７（E/M）から状態８（M/M）への状態遷移を説明する図である。状態６（M/E）から状態７（E/M）への状態遷移は、ロード２で説明したとおりである。図２６は、ロード２によりローカルL=CPUのLCU0のLLCがダーティなデータをフィルして第１の状態LL_Sと第２の状態HA_Sが状態７（E/M）になっている状態で、ローカルL-CPUのLCU0のコアがそのデータにライト動作を行った場合の状態遷移である。ライト動作が行われたため、LCU0のLLCの第１の状態LL_SがE状態からM状態に変更され、HAの第２の状態HA_SはM状態のまま変更されない。したがって、ホームH-CPUによるメモリアクセスは発生しない。
【０１１０】
［ロード（状態８（M/M）から状態７（E/M）への状態遷移）］
図２７は、状態８（M/M）から状態７（E/M）への状態遷移を説明する図である。この例では、ローカルL-CPUのLCU0のLLC内の状態８のデータをLCU3のコアがロード要求した場合の状態遷移である。LCU3のLLCのパイプラインは、ロード要求を処理してキャッシュミスし、HAにデータを要求する。HAは、第２の状態HA_Sを参照してLCU0のLLCがダーティなデータを保持していることを検出し、LCU0のLLCにデータのLCU3のLLCへの転送を要求する。この要求に応答して、LCU0のLLCが、LCU3のLLCにデータを転送し、データを破棄し第１の状態LL_SをM状態からI状態に変更する。この動作は図１２のロード２と同様である。
【０１１１】
そして、LCU3のLLCがデータ転送完了通知をHAに送信し、それに応答してHAは第２の状態をM-I-I-IからI-I-I-Mに変更する。この場合もホームH-CPUによるメモリアクセスは発生しない。
【０１１２】
［ストア前提ロード］
図２８は、状態４（S/Z）から状態７（E/M）への状態遷移を説明する図である。この例では、ローカルL-CPUのLCU2,3のLLCがダーティなデータをシェアしている状態で、LCU0のコアがそのデータにストア前提ロード要求を発行した場合の動作である。図２０のストア前提ロード４と同様に、LCU0のコアがシェア状態のLCU2またはLCU3のLLCのデータについてストア前提ロードを発行すると、LCU0のLLCがキャッシュミスし、HAにロード要求を発行する。HAは、第２の状態HA_Sを参照してLCU2,3がダーティなデータをシェアしていることを検出し、LCU2,3のLLCにデータの転送と破棄を要求する。LCU2またはLCU3のLLCはデータをLCU0のLLCに転送し、自分のデータを破棄し、第１の状態LL_SをS状態からI状態に変更し、HAにデータ転送・破棄完了通知を発行する。これに応答して、HAは第２の状態をI-I-Z-ZからM-I-I-Iに変更する。
【０１１３】
［ロード（状態５（E/E）から状態２（S/S）への状態遷移）］
図２９は、状態５（E/E）から状態２（S/S）への状態遷移を説明する図である。この例では、他のCPUのLCUのLLCが、ローカルL-CPUのLCU1のLLC内のE状態のデータをロード要求した場合の動作である。他のCPUのLCUのLLCからのデータ要求に応答してそのHAが、ホームCPUにディレクトリの参照を要求し、ローカルL-CPUがデータを持ち出していることを検出する。これに応答して、ホームCPUがローカルL-CPUのLCU1のLLCにデータを転送することをHAに依頼すると、それに応答してローカルL-CPUのLCU1のLLCがデータ転送し、第１の状態をE状態からS状態に変更し、そのHAも第２の状態をS状態に変更する。データ転送に応答して、ホームH-CPUはディレクトリをR-EXからR-SHに変更する。
【０１１４】
以上のとおり、本実施の形態の情報処理装置は、チップ内の複数のコアを複数に分割し、分割した各複数のコアとそれら複数のコアで共有されるLLCをそれぞれ有する複数のコアユニットと、複数のコアユニットのLLCに接続可能なHAを有し、各LLCはキャッシュブロックそれぞれについてMESI状態を示す第１の状態を記憶する第１のタグを有し、HAは各LLCのキャッシュブロックそれぞれについて少なくとも共有モディファイ状態（Z）を含む第２の状態を記憶する第２のタグを有する。そして、第１の状態と第２の状態の組合せでLLCのキャッシュブロックの状態を管理するので、ロード要求に対してメモリアクセスの頻度を抑制し、キャッシュメモリの性能低下を抑制することができる。
【０１１５】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１１６】
（付記１）
それぞれ演算器を有する複数のコアと、前記複数のコアに共有されるキャッシュメモリとをそれぞれ備える複数のコアユニットと、
前記複数のコアユニットがそれぞれ備えるキャッシュメモリに接続可能なホームエージェントと、
前記ホームエージェントに接続されメインメモリとのアクセスを制御するメモリアクセスコントローラとを有し、
前記キャッシュメモリは、複数のキャッシュブロックを有するデータメモリと、前記複数のキャッシュブロックそれぞれについて、ＭＥＳＩ状態を示す第１の状態を記憶する第１のタグを備え、
前記ホームエージェントは、前記複数のコアユニットがそれぞれ備えるキャッシュメモリ内の複数のキャッシュブロックそれぞれについて、少なくとも複数のキャッシュメモリがダーティなデータをシェアする共有モディファイ状態を含む第２の状態を記憶する第２のタグを備える、演算処理装置。
【０１１７】
（付記２）
前記第２のタグが記憶する第２の状態が前記共有モディファイ状態の場合、対応するキャッシュブロックについて、前記第１のタグが記憶する第１の状態が共有状態に制御される、付記１に記載の演算処理装置。
【０１１８】
（付記３）
前記第２の状態は、さらに、複数のキャッシュメモリがクリーンなデータをシェアする共有排他的状態を含み、
前記第２のタグが記憶する第２の状態が前記共有排他的状態の場合、対応するキャッシュブロックについて、前記第１のタグが記憶する第１の状態が前記共有状態に制御される、付記２に記載の演算処理装置。
【０１１９】
（付記４）
前記ホームエージェントは、前記複数のコアユニットのいずれかの第１のコアユニット内の第１のキャッシュメモリから供給されるロード要求に応答して、前記第２のタグが前記複数のコアユニット内の前記第１のコアユニット以外の第２のコアユニット内の第２のキャッシュメモリが前記ロード要求に対応するデータを保持していることを示す場合、前記第２のキャッシュメモリに、前記保持しているデータを前記第１のキャッシュメモリに転送するよう要求し、
前記第２のキャッシュメモリは、前記第１のタグの第１の状態を変更し、
前記ホームエージェントは、前記第２のタグの第２の状態を変更する、付記２に記載の演算処理装置。
【０１２０】
（付記５）
前記第１のキャッシュメモリから供給されるロード要求に応答して、前記第２のキャッシュメモリが保持している前記ロード要求に対応するモディファイ状態のデータが前記第１のキャッシュメモリに転送された場合、前記第１のキャッシュメモリは転送先キャッシュブロックの前記第１のタグの第１の状態を共有状態に変更し、前記ホームエージェントは前記転送先キャッシュブロックの前記第２のタグの第２の状態を前記共有モディファイ状態に変更する、付記４に記載の演算処理装置。
【０１２１】
（付記６）
前記ホームエージェントは、前記第２のキャッシュメモリが保持していた前記ロード要求に対応するデータを、前記メモリアクセスコントローラを介して前記メインメモリにライトバックしない、付記５に記載の演算処理装置。
【０１２２】
（付記７）
前記第２のキャッシュメモリ内のあるキャッシュブロックの前記第１のタグの第１の状態がモディファイ状態で、且つ前記あるキャッシュブロックに対応するキャッシュブロックの前記第２のタグの第２の状態が排他的状態において、
前記第１のキャッシュメモリから供給されるロード要求に応答して、前記第２のキャッシュメモリが保持している前記ロード要求に対応するデータが破棄されると共に前記第１のキャッシュメモリに転送された場合、前記第１のキャッシュメモリは転送先キャッシュブロックの前記第１のタグの第１の状態を排他的状態に変更し、前記ホームエージェントは前記転送先キャッシュブロックの前記第２のタグの第２の状態をモディファイ状態に変更する、付記４に記載の演算処理装置。
【０１２３】
（付記８）
前記ホームエージェントは、前記第２のキャッシュメモリが保持していた前記ロード要求に対応するデータを、前記メモリアクセスコントローラを介して前記メインメモリにライトバックしない、付記７に記載の演算処理装置。
【０１２４】
（付記９）
前記ホームエージェントは、前記複数のコアユニットのいずれかの第１のコアユニット内の第１のキャッシュメモリから供給されるロード要求に応答して、前記第２のタグが前記複数のコアユニット内の前記第１のコアユニット以外の第２のコアユニット内の第２のキャッシュメモリが前記ロード要求に対応するデータを保持していることを示す場合、前記第２のキャッシュメモリに、前記保持しているデータを前記第１のキャッシュメモリに転送するよう要求し、
前記第２のキャッシュメモリは、前記第１のタグの第１の状態を変更し、
前記ホームエージェントは、前記第２のタグの第２の状態を変更する、付記３に記載の演算処理装置。
【０１２５】
（付記１０）
前記第１のキャッシュメモリから供給されるロード要求に応答して、前記第２のキャッシュメモリが保持している前記ロード要求に対応する排他的状態のデータが前記第１のキャッシュメモリに転送された場合、前記第１のキャッシュメモリは転送先キャッシュブロックの前記第１のタグの第１の状態を共有状態に変更し、前記ホームエージェントは前記転送先キャッシュブロックの前記第２のタグの第２の状態を共有排他的状態に変更する、付記４に記載の演算処理装置。
【０１２６】
（付記１１）
前記第２のキャッシュメモリ内の及び第３のキャッシュメモリ内のあるキャッシュブロックの前記第１のタグの第１の状態が共有状態で、且つ前記あるキャッシュブロックに対応する２つのキャッシュブロックの前記第２のタグの第２の状態が前記共有排他的状態において、
前記第１のキャッシュメモリから供給されるストア前提ロード要求に応答して、前記第２のキャッシュメモリ及び前記第３のキャッシュメモリが保持している前記ロード要求に対応するデータが破棄されると共に前記第１のキャッシュメモリに転送された場合、前記第１のキャッシュメモリは転送先キャッシュブロックの前記第１のタグの第１の状態を排他的状態に変更し、前記ホームエージェントは前記転送先キャッシュブロックの前記第２のタグの第２の状態を排他的状態に変更する、付記１０に記載の演算処理装置。
【０１２７】
（付記１２）
前記第２のキャッシュメモリ内の及び第３のキャッシュメモリ内のあるキャッシュブロックの前記第１のタグの第１の状態が共有状態で、且つ前記あるキャッシュブロックに対応する２つのキャッシュブロックの前記第２のタグの第２の状態が前記共有排他的状態において、
前記第２のキャッシュメモリが、指定されたキャッシュブロックのデータをリプレースするリプレース要求に応答して、前記指定されたキャッシュブロックのデータを破棄し、前記ホームエージェントが前記第２のキャッシュメモリの前記指定されたキャッシュブロックに対応する前記第２のタグの第２の状態を無効状態に変更し、
前記第２のキャッシュメモリによる前記データの破棄の後、前記第３のキャッシュメモリが、指定されたキャッシュブロックのデータをリプレースするリプレース要求に応答して、前記指定されたキャッシュブロックのデータを破棄し、前記ホームエージェントが前記第３のキャッシュメモリの前記指定されたキャッシュブロックに対応する前記第２のタグの第２の状態を無効状態に変更すると共に、前記破棄したデータを前記メモリアクセスコントローラにライトバック要求する、付記４に記載の演算処理装置。
【０１２８】
（付記１３）
さらに、前記複数のコアユニットそれぞれが備えるキャッシュメモリの間と、前記キャッシュメモリと前記ホームエージェントとの間に、接続経路を提供するルータ回路を有する、付記１に記載の演算処理装置。
【０１２９】
（付記１４）
それぞれ演算器を有する複数のコアと、前記複数のコアに共有されるキャッシュメモリとをそれぞれ備える複数のコアユニットと、
前記複数のコアユニットがそれぞれ備えるキャッシュメモリに接続可能なホームエージェントと、
前記ホームエージェントに接続されメインメモリとのアクセスを制御するメモリアクセスコントローラとを有する演算処理装置において、
前記キャッシュメモリは、前記キャッシュメモリ内のデータメモリのデータの転送及び登録に応答して、前記データメモリが有する複数のキャッシュブロックそれぞれについてＭＥＳＩ状態を示す第１の状態を記憶する第１のタグの、前記第１の状態を変更し、
前記ホームエージェントは、前記データメモリのデータの転送及び登録に応答して、前記複数のコアユニットがそれぞれ備えるキャッシュメモリ内の複数のキャッシュブロックそれぞれについて、少なくとも共有モディファイ状態を含む第２の状態を記憶する第２のタグの、前記第２の状態を変更する、演算処理装置の制御方法。
【０１３０】
（付記１５）
前記ホームエージェントが、前記第２のタグが記憶する第２の状態を前記共有モディファイ状態に変更する場合、前記キャッシュメモリが、対応するキャッシュブロックについて、前記第１のタグが記憶する第１の状態を共有状態に変更する、付記１４に記載の演算処理装置の制御方法。
【符号の説明】
【０１３１】
ＣＯＲＥ：コア
ＬＣＵ：コアユニット
Ｌ１：Ｌ１キャッシュ
Ｌ２：Ｌ２キャッシュ
ＬＬＣ：ラストレベルキャッシュ
ＲＴ：ルータ
ＨＡ：ホームエージェント
ＬＬ＿ＴＡＧ１：第１のタグ
ＬＬ＿Ｓ：第１の状態
ＬＬ＿ＴＡＧ２：第２のタグ
ＨＡ＿Ｓ：第２の状態
ＭＡＣ：メモリアクセスコントローラ
【図１】
0006674085.tif 000002
【図２】
0006674085.tif 000003
【図３】
0006674085.tif 000004
【図４】
0006674085.tif 000005
【図５】
0006674085.tif 000006
【図６】
0006674085.tif 000007
【図７】
0006674085.tif 000008
【図８】
0006674085.tif 000009
【図９】
0006674085.tif 000010
【図１０】
0006674085.tif 000011
【図１１】
0006674085.tif 000012
【図１２】
0006674085.tif 000013
【図１３】
0006674085.tif 000014
【図１４】
0006674085.tif 000015
【図１５】
0006674085.tif 000016
【図１６】
0006674085.tif 000017
【図１７】
0006674085.tif 000018
【図１８】
0006674085.tif 000019
【図１９】
0006674085.tif 000020
【図２０】
0006674085.tif 000021
【図２１】
0006674085.tif 000022
【図２２】
0006674085.tif 000023
【図２３】
0006674085.tif 000024
【図２４】
0006674085.tif 000025
【図２５】
0006674085.tif 000026
【図２６】
0006674085.tif 000027
【図２７】
0006674085.tif 000028
【図２８】
0006674085.tif 000029
【図２９】
0006674085.tif 000030