(57)【要約】【課題】  キャッシュコヒーレンシ制御に対応した演算処理装置の回路規模を削減し、消費電力を小さくする。【解決手段】  演算処理装置は、複数の記憶装置の各々がそれぞれ割り当てられる複数の演算部を有する。各演算部は、自演算部の記憶装置が記憶するデータと複数の演算部のうちの他の演算部の記憶装置から持ち出される持ち出しデータとを保持するキャッシュメモリを有する。キャッシュメモリは、持ち出しデータのアクセス要求を持ち出しデータの持ち出し元の演算部から受けた場合、持ち出し元の演算部の記憶装置への持ち出しデータの書き戻しを指示する書き戻し情報を出力した後に持ち出しデータのアクセス要求を受けるすれ違いが発生したかを判定する判定部と、すれ違いが発生した場合、すれ違いが発生したことを示すすれ違い情報を、アクセス要求に対する応答として持ち出し元の演算部に出力する応答情報生成部とを有する。【選択図】  図１
2018195183.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶装置の各々がそれぞれ割り当てられる複数の演算部を有する演算処理装置において、
前記複数の演算部の各々は、
演算を実行する演算実行部と、
自演算部に割り当てられる記憶装置が記憶するデータと、前記複数の演算部のうちの他の演算部に割り当てられる記憶装置から持ち出される持ち出しデータと、を保持するキャッシュメモリとを有し、
前記キャッシュメモリは、
前記持ち出しデータに対するアクセス要求を前記持ち出しデータの持ち出し元の演算部から受けた場合、前記持ち出し元の演算部に割り当てられる記憶装置への前記持ち出しデータの書き戻しを指示する書き戻し情報を出力した後に前記持ち出しデータに対する前記アクセス要求を受けるすれ違いが発生したかを判定する判定部と、
前記すれ違いが発生した場合、前記すれ違いが発生したことを示すすれ違い情報を、前記アクセス要求に対する応答として前記持ち出し元の演算部に出力する応答情報生成部とを有する
ことを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記判定部は、前記持ち出し元の演算部からの前記アクセス要求で要求される前記持ち出しデータを自キャッシュメモリが保持していない場合、前記すれ違いが発生したと判定する
ことを特徴とする演算処理装置。
【請求項３】
請求項１または請求項２に記載の演算処理装置において、
前記持ち出し元の演算部が有する前記キャッシュメモリは、前記アクセス要求に対する応答として、前記すれ違い情報を受けた場合、自演算部に割り当てられる記憶装置に書き戻された前記持ち出しデータを読み出す
ことを特徴とする演算処理装置。
【請求項４】
請求項１ないし請求項３のいずれか１項に記載の演算処理装置において、
前記複数の演算部の各々が有する前記キャッシュメモリに接続されるバスと、
前記持ち出し元の演算部に出力される前記書き戻し情報および前記すれ違い情報を出力順と同じ順番で前記持ち出し元の演算部に到達させる制御を前記バスに対して実行するバス制御部とをさらに有する
ことを特徴とする演算処理装置。
【請求項５】
複数の記憶装置の各々がそれぞれ割り当てられる複数の演算部を有する演算処理装置の制御方法において、
前記複数の演算部の各々が有する演算実行部が、演算を実行し、
前記複数の演算部の各々が有するキャッシュメモリが、自演算部に割り当てられる記憶装置が記憶するデータと、前記複数の演算部のうちの他の演算部に割り当てられる記憶装置から持ち出される持ち出しデータと、を保持し、
前記持ち出しデータに対するアクセス要求を前記持ち出しデータの持ち出し元の演算部から受けた場合、前記キャッシュメモリが有する判定部が、前記持ち出し元の演算部に割り当てられる記憶装置への前記持ち出しデータの書き戻しを指示する書き戻し情報を出力した後に前記持ち出しデータに対する前記アクセス要求を受けるすれ違いが発生したかを判定し、
前記すれ違いが発生した場合、前記キャッシュメモリが有する応答情報生成部が、前記すれ違いが発生したことを示すすれ違い情報を、前記アクセス要求に対する応答として前記持ち出し元の演算部に出力する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算を実行する演算部としてのプロセッサコアとデータを記憶する主記憶装置に比べて高速にアクセス可能なキャッシュメモリとを含む複数の演算ノードを有する演算処理装置が普及している。キャッシュメモリは、プロセッサコアと主記憶装置との間に配置され、主記憶装置に記憶されるデータの一部を保持する。複数の演算ノードの各々は、各キャッシュメモリに保持されたデータの一貫性であるキャッシュコヒーレンシを維持するキャッシュコヒーレンシ制御を実行する。
【０００３】
例えば、キャッシュメモリを内蔵した複数のプロセッサと複数の主記憶装置とを有するマルチプロセッサシステムでは、主記憶装置のタグ情報を参照してキャッシュコヒーレンシ制御を実行する方法が提案されている（例えば、特許文献１参照）。主記憶装置のタグ情報は、例えば、主記憶装置に対応するプロセッサ以外のプロセッサにダーティなキャッシュラインが有るか否かをキャッシュラインに対応するデータ群毎に示す情報であり、主記憶装置毎に設けられたタグメモリに格納される。「ダーティ」とは、キャッシュメモリに保持されたデータを更新して、主記憶装置に記憶されたデータを更新していないキャッシュメモリの状態である。例えば、主記憶装置のタグ情報がダーティを示しているデータに対して読み出しが実行される場合、ダーティなキャッシュラインを主記憶装置に書き戻すライトバックが実行され、ライトバックの完了を待って、正しいデータが要求元のプロセッサに送られる。
【０００４】
また、複数のプロセッサが主記憶装置を共有するマルチプロセッサシステムでは、実行中のライトバックの対象データに対する読み出し要求が発行された場合でも、正しいデータを読み出すキャッシュコヒーレンシ制御が提案されている（例えば、特許文献２参照）。この種のキャッシュコヒーレンシ制御では、例えば、実行中のライトバックの対象データに対する読み出し要求が発行された場合、ライトバックの完了を示す完了通知が主記憶装置から返されたことを契機に、読み出し要求が主記憶装置に改めて発行される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−１８５３５９号公報
【特許文献２】特開平１０−１６１９３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
演算処理装置の消費電力を小さくするために、演算処理性能に対する影響が小さいプロセッサコア以外の回路の面積を小さくすることが考えられる。例えば、キャッシュコヒーレンシ制御を実現する回路の面積を小さくすることで、演算処理装置の消費電力を小さくすることができる。
【０００７】
１つの側面では、本発明は、キャッシュコヒーレンシ制御に対応した演算処理装置の回路規模を削減し、消費電力を小さくすることを目的とする。
【課題を解決するための手段】
【０００８】
１つの実施態様では、演算処理装置は、複数の記憶装置の各々がそれぞれ割り当てられる複数の演算部を有する。複数の演算部の各々は、演算を実行する演算実行部と、自演算部に割り当てられる記憶装置が記憶するデータと、複数の演算部のうちの他の演算部に割り当てられる記憶装置から持ち出される持ち出しデータと、を保持するキャッシュメモリとを有する。キャッシュメモリは、判定部および応答情報生成部を有する。判定部は、持ち出しデータに対するアクセス要求を持ち出しデータの持ち出し元の演算部から受けた場合、持ち出し元の演算部に割り当てられる記憶装置への持ち出しデータの書き戻しを指示する書き戻し情報を出力した後に持ち出しデータに対するアクセス要求を受けるすれ違いが発生したかを判定する。応答情報生成部は、すれ違いが発生した場合、すれ違いが発生したことを示すすれ違い情報を、アクセス要求に対する応答として持ち出し元の演算部に出力する。
【発明の効果】
【０００９】
１つの側面では、本発明は、キャッシュコヒーレンシ制御に対応した演算処理装置の回路規模を削減するとともに、消費電力を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】図１に示した演算処理装置の動作の一例を示す図である。
【図３】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図４】図３に示した２次キャッシュの一例を示す図である。
【図５】図３に示した演算処理装置の動作の一例を示す図である。
【図６】要求のすれ違いが発生した場合の演算処理装置の動作の一例を示す図である。
【図７】図４に示した２次キャッシュの比較例を示す図である。
【図８】図７に示した２次キャッシュを有する演算処理装置の動作の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、実施形態について、図面を用いて説明する。
【００１２】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。図１に示す演算処理装置１０は、ＣＰＵ（Central Processing Unit）等のプロセッサである。演算処理装置１０は、複数の記憶装置４００（４００ａ、４００ｂ、４００ｃ）の各々がそれぞれ割り当てられる複数の演算ノード１００（１００ａ、１００ｂ、１００ｃ）と、複数の演算ノード１００に接続されるバス１２０とを有する。以下、演算ノード１００に割り当てられる記憶装置４００は、演算ノード１００の記憶装置４００とも称される。複数の演算ノード１００は、複数の記憶装置４００がそれぞれ割り当てられる複数の演算部の一例である。なお、演算ノード１００の数は、３つに限定されない。
【００１３】
図１では、演算処理装置１０の説明等において複数の演算ノード１００を区別するために、符号の末尾にアルファベットの小文字（ａ、ｂ、ｃ）を付している。また、演算ノード１００が有する各要素についても、演算ノード１００に付したアルファベットと同じアルファベットを符号の末尾に付している。
【００１４】
各演算ノード１００は、例えば、演算を実行するＣＰＵコア等のプロセッサコア２００と、キャッシュメモリ３００と、プロセッサコア２００が使用するデータ等を記憶する記憶装置４００とを有する。プロセッサコア２００は、演算を実行する演算実行部の一例である。
【００１５】
キャッシュメモリ３００は、記憶装置４００に比べて高速にアクセス可能であり、自演算ノード１００のプロセッサコア２００が使用するデータを保持する。また、複数の演算ノード１００の各々がそれぞれ有する複数のキャッシュメモリ３００は、バス１２０に接続され、互いに通信可能である。例えば、各演算ノード１００の記憶装置４００に記憶されたデータは、キャッシュメモリ３００およびバス１２０を介して、他の演算ノード１００に持ち出される。このため、各演算ノード１００のキャッシュメモリ３００は、自演算ノード１００の記憶装置４００に記憶されるデータの状態を管理する。記憶装置４００に記憶されるデータの状態は、他の演算ノード１００の１つのみに持ち出された排他状態、他の演算ノード１００の１つ以上に持ち出され、データが更新されていない共有状態、他の演算ノード１００に持ち出されていない無効状態等に分類される。なお、排他状態では、データが更新されていない保証はない。
【００１６】
このように、キャッシュメモリ３００は、自演算ノード１００の記憶装置４００に記憶されるデータと複数の演算ノード１００のうちの他の演算ノード１００の記憶装置４００から持ち出される持ち出しデータとを記憶する。すなわち、キャッシュメモリ３００は、複数の記憶装置４００のいずれかに記憶されるデータを記憶する。
【００１７】
キャッシュメモリ３００は、例えば、データを読み出すための読み出し要求をプロセッサコア２００から受けた場合、読み出し要求で要求されたデータをプロセッサコア２００に転送する。なお、キャッシュメモリ３００は、読み出し要求で要求されたデータを保持していない場合（キャッシュメモリ３００がキャッシュミスした場合）、記憶装置４００等に読み出し要求を出力する。
【００１８】
例えば、キャッシュメモリ３００ａは、読み出し要求で要求されたデータが他の演算ノード１００ｂの記憶装置４００ｂに記憶されたデータである場合、演算ノード１００ｂのキャッシュメモリ３００ｂにバス１２０を介して読み出し要求を出力する。そして、演算ノード１００ｂのキャッシュメモリ３００ｂは、演算ノード１００ａからの読み出し要求で要求されたデータを保持していない場合、演算ノード１００ｂの記憶装置４００ｂに読み出し要求を出力する。このように、演算ノード１００ａのプロセッサコア２００ａは、演算ノード１００ａのキャッシュメモリ３００ａ、バス１２０および演算ノード１００ｂのキャッシュメモリ３００ｂを介して、演算ノード１００ｂの記憶装置４００ｂにアクセスする。この場合、演算ノード１００ｂの記憶装置４００ｂに記憶されたデータは、演算ノード１００ｂのキャッシュメモリ３００ｂ、バス１２０および演算ノード１００ａのキャッシュメモリ３００ａを介して、演算ノード１００ａのプロセッサコア２００ａに転送される。
【００１９】
また、例えば、キャッシュメモリ３００ａは、読み出し要求で要求されたデータが自演算ノード１００ａの記憶装置４００ａから他の演算ノード１００ｃのみに持ち出されたデータである場合、データの持ち出し先の演算ノード１００ｃに読み出し要求を出力する。例えば、キャッシュメモリ３００ａは、演算ノード１００ｃのキャッシュメモリ３００ｃにバス１２０を介して読み出し要求を出力する。この場合、演算ノード１００ｃのキャッシュメモリ３００ｃに保持されたデータは、バス１２０および演算ノード１００ａのキャッシュメモリ３００ａを介して、演算ノード１００ａの記憶装置４００ａに書き戻される。そして、演算ノード１００ａの記憶装置４００ａに書き戻されたデータは、演算ノード１００ａのキャッシュメモリ３００ａを介して、演算ノード１００ａのプロセッサコア２００ａに転送される。
【００２０】
なお、キャッシュメモリ３００は、読み出し要求で要求されたデータが自演算ノード１００の記憶装置４００から他の演算ノード１００に持ち出されてない場合、自演算ノード１００の記憶装置４００に読み出し要求を出力する。
【００２１】
このように、複数の演算ノード１００間の通信は、キャッシュメモリ３００およびバス１２０を介して実行される。そして、複数の記憶装置４００のいずれかに記憶されるデータは、複数のキャッシュメモリ３００のいずれにも記憶可能である。このため、各演算ノード１００は、各キャッシュメモリ３００に保持されたデータの一貫性（キャッシュコヒーレンシ）を維持するキャッシュコヒーレンシ制御を実行する。
【００２２】
例えば、キャッシュメモリ３００は、持ち出しデータに対する要求のすれ違いが発生したか否かを判定する判定部３１０と、すれ違い情報を判定部３１０の判定結果に基づいて生成する応答情報生成部３２０とを有する。要求のすれ違いは、例えば、キャッシュメモリ３００が持ち出しデータの持ち出し元の演算ノード１００の記憶装置４００への持ち出しデータの書き戻しを指示する書き戻し情報を出力した後に持ち出しデータに対するアクセス要求を受けるすれ違いである。アクセス要求は、データを記憶装置４００に書き込むための書き込み要求や読み出し要求等である。
【００２３】
例えば、キャッシュメモリ３００ａの判定部３１０ａは、演算ノード１００ｂの記憶装置４００ｂから持ち出した持ち出しデータに対するアクセス要求を演算ノード１００ｂから受けた場合、要求のすれ違いが発生したか否かを判定する。この場合、判定部３１０ａは、演算ノード１００ｂの記憶装置４００ｂに持ち出しデータを書き戻す指示である書き戻し情報を演算ノード１００ｂに出力した後に持ち出しデータに対するアクセス要求を演算ノード１００ｂから受けたか否かを判定する。例えば、判定部３１０ａは、アクセス要求で要求された持ち出しデータをキャッシュメモリ３００ａが保持していない場合、要求のすれ違いが発生したと判定する。
【００２４】
このように、判定部３１０は、持ち出しデータに対するアクセス要求を持ち出しデータの持ち出し元の演算ノード１００から受けた場合に、持ち出しデータに対する要求のすれ違いが発生したか否かを判定する。
【００２５】
応答情報生成部３２０は、持ち出しデータに対する要求のすれ違いが発生した場合に、すれ違いが発生したことを示すすれ違い情報を、アクセス要求に対する応答として持ち出し元の演算ノード１００に出力する。
【００２６】
例えば、キャッシュメモリ３００ｂは、演算ノード１００ａに持ち出された持ち出しデータに対するアクセス要求の応答として、すれ違い情報を演算ノード１００ａのキャッシュメモリ３００ａから受けた場合、要求のすれ違いが発生したと認識する。すなわち、演算ノード１００ｂのキャッシュメモリ３００ｂは、アクセス要求で要求した最新のデータが自演算ノード１００ｂの記憶装置４００ｂに書き戻されたことを認識する。例えば、記憶装置４００ｂから演算ノード１００ａに持ち出された持ち出しデータがプロセッサコア２００ａにより更新された場合、記憶装置４００ｂが記憶している持ち出しデータは、キャッシュメモリ３００ａが保持する最新の持ち出しデータと一致しない。この場合、プロセッサコア２００ａにより更新された最新の持ち出しデータが記憶装置４００ｂに書き戻されることにより、記憶装置４００ｂは、プロセッサコア２００ａにより更新された最新のデータを記憶する。このため、演算ノード１００ｂのキャッシュメモリ３００ｂは、演算ノード１００ａから書き戻された最新のデータ（アクセス要求で要求したデータ）を自演算ノード１００ｂの記憶装置４００ｂから読み出す。
【００２７】
このように、すれ違い情報を受けた演算ノード１００は、自演算ノード１００の記憶装置４００に書き戻された持ち出しデータ（アクセス要求で要求したデータ）を読み出す。これにより、要求のすれ違いが発生した場合でも、キャッシュコヒーレンシを維持することができる。
【００２８】
ここで、すれ違い情報を用いずにキャッシュコヒーレンシを維持する演算処理装置として、各キャッシュメモリにリプレースバッファを追加する構成が考えられる。リプレースバッファは、持ち出しデータが持ち出し元の演算ノード１００の記憶装置４００に書き戻される際に、キャッシュメモリから追い出される書き戻し対象の持ち出しデータを、記憶装置４００への書き戻しが終了するまで保持する。そして、キャッシュメモリは、書き戻し対象の持ち出しデータに対する要求のすれ違いが発生した場合、リプレースバッファが保持する持ち出しデータを、アクセス要求の要求元の演算ノード１００に転送する。これにより、要求のすれ違いが発生した場合でも、キャッシュコヒーレンシが維持される。なお、各キャッシュメモリにリプレースバッファを追加する構成では、リプレースバッファを用いずにキャッシュコヒーレンシ制御を実現する演算処理装置１０に比べて、演算処理装置の回路規模が増加する。換言すれば、すれ違い情報を用いてキャッシュコヒーレンシ制御を実現する演算処理装置１０は、キャッシュメモリにリプレースバッファを追加する構成に比べて、回路規模の増加を抑制することができる。このように、演算処理装置１０では、回路規模を削減することができる。
【００２９】
なお、演算処理装置１０の構成は、図１に示す例に限定されない。例えば、演算ノード１００（演算部）は、記憶装置４００を除いて定義されてもよい。すなわち、複数の演算ノード１００にそれぞれ割り当てられる複数の記憶装置４００は、演算ノード１００の外部または演算処理装置１０の外部に配置されてもよい。また、各演算ノード１００において、キャッシュメモリ３００とは別のキャッシュメモリがプロセッサコア２００とキャッシュメモリ３００との間に追加されてもよい。
【００３０】
図２は、図１に示した演算処理装置１０の動作の一例を示す。図２に示す動作は、演算処理装置の制御方法の一態様である。なお、図２に示す動作は、他の演算ノード１００に持ち出された持ち出しデータにアクセスする際の演算ノード１００の動作の一例である。図２では、演算ノード１００ｂから演算ノード１００ａに持ち出された持ち出しデータに対するアクセス要求を演算ノード１００ｂが演算ノード１００ａに発行する場合を例にして、演算ノード１００ａ、１００ｂの動作を説明する。この場合、アクセス要求の受信側の演算ノード１００は演算ノード１００ａであり、アクセス要求の発行側の演算ノード１００は演算ノード１００ｂである。先ず、アクセス要求の受信側の演算ノード１００ａの動作を説明する。
【００３１】
ステップＳ１０では、演算ノード１００ａのキャッシュメモリ３００ａは、演算ノード１００ｂから持ち出した持ち出しデータに対するアクセス要求を、持ち出しデータの持ち出し元の演算ノード１００ｂのキャッシュメモリ３００ｂから受ける。
【００３２】
次に、ステップＳ１２では、キャッシュメモリ３００ａの判定部３１０ａは、要求のすれ違いが発生したか否かを判定する。例えば、判定部３１０ａは、持ち出しデータに対するアクセス要求を演算ノード１００ｂから受ける前に、持ち出しデータを記憶装置４００ｂに書き戻すことを指示する書き戻し情報を演算ノード１００ｂに出力した場合、要求のすれ違いが発生したと判定する。
【００３３】
このように、判定部３１０ａは、持ち出しデータに対するアクセス要求を持ち出しデータの持ち出し元の演算ノード１００ｂから受けた場合、要求のすれ違いが発生したか判定する。要求のすれ違いが発生した場合、すなわち、持ち出しデータがキャッシュメモリ３００ａから既に追い出されている場合、演算ノード１００ａの動作は、ステップＳ１６に移る。一方、要求のすれ違いが発生していない場合、すなわち、キャッシュメモリ３００ａが持ち出しデータを保持している場合、演算ノード１００ａの動作は、ステップＳ１４に移る。
【００３４】
ステップＳ１４では、キャッシュメモリ３００ａは、保持している持ち出しデータ（アクセス要求で要求された要求データ）を、持ち出しデータのアクセス要求に対する応答として、持ち出し元の演算ノード１００ｂに出力する。そして、キャッシュメモリ３００ａは、演算ノード１００ｂに転送した持ち出しデータを、自キャッシュメモリ３００ａから削除する。これにより、持ち出しデータに対するアクセス要求を演算ノード１００ｂから受けた演算ノード１００ａの動作は終了する。ステップＳ１４では、要求のすれ違いが発生していないため、キャッシュコヒーレンシは維持される。
【００３５】
ステップＳ１６では、キャッシュメモリ３００ａの応答情報生成部３２０ａは、持ち出しデータのアクセス要求に対する応答として、要求のすれ違いが発生したことを示すすれ違い情報を、持ち出し元の演算ノード１００ｂに出力する。これにより、持ち出しデータに対するアクセス要求を演算ノード１００ｂから受けた演算ノード１００ａの動作は終了する。次に、アクセス要求の発行側の演算ノード１００ｂの動作を説明する。
【００３６】
ステップＳ２０では、演算ノード１００ｂのキャッシュメモリ３００ｂは、自演算ノード１００ｂから持ち出された持ち出しデータに対するアクセス要求を、持ち出しデータの持ち出し先の演算ノード１００ａに出力する。
【００３７】
次に、ステップＳ２２では、キャッシュメモリ３００ｂは、持ち出しデータのアクセス要求に対する応答を、アクセス要求の出力先の演算ノード１００ａから受ける。
【００３８】
次に、ステップＳ２４では、キャッシュメモリ３００ｂは、アクセス要求に対する応答がすれ違い情報か否かを判定する。アクセス要求に対する応答がすれ違い情報である場合、演算ノード１００ｂの動作は、ステップＳ２６に移る。一方、アクセス要求に対する応答がすれ違い情報でない場合、すなわち、アクセス要求に対する応答として演算ノード１００ｂが持ち出しデータ（要求データ）を受信した場合、演算ノード１００ｂによるアクセス要求に対する処理は終了する。
【００３９】
ステップＳ２６では、キャッシュメモリ３００ｂは、演算ノード１００ａから自演算ノード１００ｂの記憶装置４００ｂに書き戻された持ち出しデータ（最新の要求データ）を、自演算ノード１００ｂの記憶装置４００ｂから読み出す。このように、要求のすれ違いが発生した場合でも、演算ノード１００ｂのキャッシュメモリ３００ｂが正しい要求データにアクセスできるため、キャッシュコヒーレンシを維持することができる。なお、演算処理装置１０の動作は、図２に示す例に限定されない。
【００４０】
以上、図１および図２に示す実施形態では、キャッシュメモリ３００の判定部３１０は、持ち出しデータに対する要求のすれ違いが発生したか否かを判定する。また、キャッシュメモリ３００の応答情報生成部３２０は、要求のすれ違いが発生した場合に、要求のすれ違いが発生したことを示すすれ違い情報を、アクセス要求の要求元の演算ノード１００（すなわち、持ち出し元の演算ノード１００）に出力する。これにより、アクセス要求の要求元の演算ノード１００は、アクセス要求で要求したデータに対する要求のすれ違いが発生したことを認識でき、自演算ノード１００の記憶装置４００から最新のデータ（正しいデータ）を読み出すことができる。この結果、要求のすれ違いが発生した場合でも、キャッシュコヒーレンシを維持することができる。
【００４１】
また、すれ違い情報を用いてキャッシュコヒーレンシ制御を実行することにより、リプレースバッファを用いてキャッシュコヒーレンシ制御を実行する場合に比べて、キャッシュコヒーレンシ制御を実現する回路の規模を削減できる。すなわち、キャッシュコヒーレンシ制御に対応した演算処理装置１０の回路規模を削減することができる。また、キャッシュコヒーレンシ制御を実現する回路の規模を削減したことにより、演算処理装置１０の消費電力を削減することができる。また、キャッシュコヒーレンシ制御を実現する回路の規模を削減したことにより、演算処理装置１０の製造コストを削減することができる。
【００４２】
図３は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図３に示す演算処理装置１２は、ＣＰＵ等のプロセッサである。演算処理装置１２は、複数の記憶装置４００（４００ａ、４００ｂ、４００ｃ）の各々がそれぞれ割り当てられる複数の演算ノード１０２（１０２ａ、１０２ｂ、１０２ｃ）と、複数の演算ノード１０２に接続されるバス１２０と、バス制御部１２２とを有する。以下、演算ノード１０２に割り当てられる記憶装置４００は、演算ノード１０２の記憶装置４００とも称される。複数の演算ノード１０２は、複数の記憶装置４００がそれぞれ割り当てられる複数の演算部の一例である。なお、演算ノード１０２の数は、３つに限定されない。
【００４３】
図３においても、図１と同様に、演算処理装置１２の説明等において複数の演算ノード１０２を区別するために、符号の末尾にアルファベットの小文字（ａ、ｂ、ｃ）を付している。また、演算ノード１０２が有する各要素についても、演算ノード１０２に付したアルファベットと同じアルファベットを符号の末尾に付している。
【００４４】
各演算ノード１０２は、例えば、演算を実行するＣＰＵコア等のプロセッサコア２１０と１次キャッシュ２２０とを含むコア２０１と、２次キャッシュ３０２と、プロセッサコア２１０が使用するデータ等を記憶する記憶装置４００とを有する。プロセッサコア２１０は、演算を実行する演算実行部の一例である。２次キャッシュ３０２は、自演算ノード１０２の記憶装置４００に記憶されるデータと複数の演算ノード１０２のうちの他の演算ノード１０２の記憶装置４００から持ち出される持ち出しデータとを保持するキャッシュメモリの一例である。
【００４５】
１次キャッシュ２２０および２次キャッシュ３０２は、記憶装置４００に比べて高速にアクセス可能なキャッシュメモリであり、自演算ノード１０２のプロセッサコア２１０が使用するデータを保持する。例えば、１次キャッシュ２２０は、２次キャッシュ３０２に比べて高速にアクセス可能なキャッシュメモリであり、プロセッサコア２１０と２次キャッシュ３０２との間に配置される。１次キャッシュ２２０は、２次キャッシュ３０２に保持されるデータの一部を保持し、プロセッサコア２１０から受けるアクセス要求で要求されたデータをプロセッサコア２１０に転送する。なお、１次キャッシュ２２０は、アクセス要求で要求されたデータを保持していない場合（１次キャッシュ２２０がキャッシュミスした場合）、２次キャッシュ３０２にアクセス要求を転送する。
【００４６】
２次キャッシュ３０２は、例えば、１次キャッシュ２２０に比べて大容量のキャッシュメモリであり、１次キャッシュ２２０と記憶装置４００との間に配置される。また、複数の演算ノード１０２の各々がそれぞれ有する複数の２次キャッシュ３０２は、バス１２０に接続され、互いに通信可能である。例えば、各演算ノード１０２の記憶装置４００に記憶されたデータは、２次キャッシュ３０２およびバス１２０を介して、他の演算ノード１０２に持ち出される。このため、各演算ノード１０２の２次キャッシュ３０２は、自演算ノード１０２の記憶装置４００に記憶されるデータの状態（例えば、排他状態、共有状態、無効状態等）を管理する。
【００４７】
このように、２次キャッシュ３０２は、複数の記憶装置４００のいずれかに記憶されるデータを保持する。なお、２次キャッシュ３０２の動作は、図１に示したキャッシュメモリ３００と同一または同様である。例えば、２次キャッシュ３０２の動作の概要は、図１のキャッシュメモリ３００の説明で、演算ノード１００、キャッシュメモリ３００、プロセッサコア２００をそれぞれ演算ノード１０２、２次キャッシュ３０２、コア２０２に読み替えることにより説明される。なお、２次キャッシュ３０２の詳細は、図４で説明する。
【００４８】
バス制御部１２２は、バス１２０を制御して、各２次キャッシュ３０２から他の２次キャッシュ３０２への情報等のバス１２０を介した転送を制御する。例えば、バス制御部１２２は、持ち出しデータの持ち出し元の演算ノード１０２に出力される書き戻し情報およびすれ違い情報を出力順と同じ順番で持ち出し元の演算ノード１０２に到達させる制御をバス１２０に対して実行する。書き戻し情報は、図１で説明したように、持ち出しデータの持ち出し元の演算ノード１０２の記憶装置４００への持ち出しデータの書き戻しを指示する情報である。また、すれ違い情報は、２次キャッシュ３０２が書き戻し情報を出力した後に持ち出しデータに対するアクセス要求を受けるすれ違いが発生したことを示す情報である。
【００４９】
なお、演算処理装置１２の構成は、図３に示す例に限定されない。例えば、演算ノード１０２（演算部）は、記憶装置４００を除いて定義されてもよい。すなわち、複数の演算ノード１０２にそれぞれ割り当てられる複数の記憶装置４００は、演算ノード１０２の外部または演算処理装置１２の外部に配置されてもよい。また、各演算ノード１０２において、１次キャッシュ２２０および２次キャッシュ３０２とは別のキャッシュメモリが１次キャッシュ２２０と２次キャッシュ３０２との間に追加されてもよい。あるいは、１次キャッシュ２２０は省かれてもよい。
【００５０】
図４は、図３に示した２次キャッシュ３０２の一例を示す。また、図４の括弧内に、２次キャッシュ３０２が送受信するパケットの一例を示す。２次キャッシュ３０２は、ローカルポート３３０、リモートポート３４０、選択部３５０、パイプライン部３６０、データ保持部３７０およびタグ部３８０、３９０を有する。
【００５１】
ローカルポート３３０は、自演算ノード１０２からのアクセス要求等の要求を受ける。リモートポート３４０は、他の演算ノード１０２からのアクセス要求等の要求を受ける。選択部３５０は、ローカルポート３３０から受ける要求およびリモートポート３４０から受ける要求のいずれかを選択し、選択した要求をパイプライン部３６０に投入する。
【００５２】
パイプライン部３６０は、パイプライン処理を実行するパイプライン処理部３６２と、パイプライン処理部３６２の動作を制御するパイプライン制御部３６４とを有する。パイプライン処理部３６２は、選択部３５０から受ける要求に基づく処理を複数のステージで順次実行する。
【００５３】
パイプライン制御部３６４は、判定部３１０および応答情報生成部３２０を有する。判定部３１０および応答情報生成部３２０は、図１に示した判定部３１０および応答情報生成部３２０と同一または同様である。例えば、判定部３１０は、持ち出しデータに対するアクセス要求を持ち出しデータの持ち出し元の演算ノード１０２から受けた場合に、持ち出しデータに対する要求のすれ違いが発生したか否かを判定する。応答情報生成部３２０は、アクセス要求等の要求に対する応答を示す情報を要求元の演算ノード１０２等に出力する。例えば、応答情報生成部３２０は、持ち出しデータに対する要求のすれ違いが発生した場合に、すれ違いが発生したことを示すすれ違い情報を、アクセス要求に対する応答として持ち出し元の演算ノード１０２に出力する。図４に示す符号ＲＥＱＩＤは、アクセス要求等の要求や要求に対する応答等の情報（すれ違い情報、要求に対する処理の完了を示す完了情報等）を示し、符号ＡＰは、要求の対象となる対象アドレス（要求データのアドレス等）を示す。
【００５４】
データ保持部３７０は、自演算ノード１０２のプロセッサコア２１０が使用するデータを保持する。例えば、データ保持部３７０は、複数の記憶装置４００のいずれかに記憶されるデータを保持する。図４に示す符号ＤＡＴＡは、例えば、アクセス要求で要求された要求データ等のデータである。２次キャッシュ３０２は、図４の括弧内に示すように、情報ＲＥＱＩＤと対象アドレスＡＰとデータＤＡＴＡとを含むパケットを送受信する。なお、データＤＡＴＡを転送する必要がない応答等では、データＤＡＴＡはパケットから省かれてもよい。以下、２次キャッシュ３０２が送受信するパケットは、情報ＲＥＱＩＤで示される情報（アクセス要求、すれ違い情報、完了情報等）と同じ名称で称される場合もある。
【００５５】
タグ部３８０は、データ保持部３７０に保持されるデータの状態を示す情報を保持する。ＭＥＳＩプロトコルでは、データの状態は、”変更（Modified）”、”排他（Exclusive）”、”共有（Shared）”、”無効（Invalid）”のいずれかに分類される。例えば、自演算ノード１０２のプロセッサコア２１０等により書き換えられたダーティなデータの状態は、”変更”に分類される。また、複数の２次キャッシュ３０２のうちの該当する１つの２次キャッシュ３０２のみに保持され、更新されていないクリーンなデータの状態は、”排他”に分類される。そして、複数の２次キャッシュ３０２に保持されているクリーンなデータの状態は、”共有”に分類される。
【００５６】
タグ部３９０は、自演算ノード１０２の記憶装置４００に記憶されるデータの状態（例えば、排他状態、共有状態、無効状態等）を示す情報を保持する。記憶装置４００に記憶されるデータの状態のうち、排他状態は、図１で説明したように、データが更新されていない保証はない。すなわち、記憶装置４００に記憶されるデータの状態では、排他状態は、ＭＥＳＩプロトコルにおける”変更”で保持されている状態を含む。
【００５７】
図５は、図３に示した演算処理装置１２の動作の一例を示す。図５に示す動作は、演算処理装置の制御方法の一態様である。なお、図５に示す動作は、自演算ノード１０２および他の演算ノード１０２のいずれかからアクセス要求を受けた２次キャッシュ３０２の動作の一例である。２次キャッシュ３０２は、アクセス要求を受ける度に、ステップＳ１００の処理を実行する。
【００５８】
ステップＳ１００では、パイプライン部３６０は、タグ部３８０を検索して、アクセス要求で要求された要求データをデータ保持部３７０が保持しているかを検索する。
【００５９】
次に、ステップＳ２００では、パイプライン部３６０は、２次キャッシュ３０２がキャッシュヒットしたか否かを判定する。２次キャッシュ３０２がキャッシュヒットした場合、すなわち、要求データをデータ保持部３７０が保持している場合、２次キャッシュ３０２の動作は、ステップＳ２１０に移る。一方、２次キャッシュ３０２がキャッシュミスした場合、すなわち、要求データをデータ保持部３７０が保持していない場合、２次キャッシュ３０２の動作は、ステップＳ３００に移る。
【００６０】
ステップＳ２１０では、パイプライン部３６０は、処理対象のアクセス要求がローカルポート３３０で受信したアクセス要求か否かを判定する。処理対象のアクセス要求がローカルポート３３０で受信したアクセス要求である場合、すなわち、処理対象のアクセス要求が自演算ノード１０２からのアクセス要求である場合、２次キャッシュ３０２の動作は、ステップＳ２２０に移る。一方、処理対象のアクセス要求がリモートポート３４０で受信したアクセス要求である場合、すなわち、処理対象のアクセス要求が他の演算ノード１０２からのアクセス要求である場合、２次キャッシュ３０２の動作は、ステップＳ２３０に移る。
【００６１】
ステップＳ２２０では、２次キャッシュ３０２は、データ保持部３７０から読み出した要求データを含む完了情報を、自演算ノード１０２（アクセス要求の要求元の演算ノード１０２）に発行する。なお、完了情報は、アクセス要求に対する応答であり、アクセス要求に基づく処理の完了を示す。
【００６２】
このように、２次キャッシュ３０２は、自演算ノード１０２からのアクセス要求で要求された要求データをデータ保持部３７０が保持している場合、データ保持部３７０に保持されている要求データを自演算ノード１０２のコア２０２に出力して、動作を終了する。
【００６３】
ステップＳ２３０では、２次キャッシュ３０２は、データ保持部３７０から読み出した要求データを含む完了情報を、アクセス要求の要求元の演算ノード１０２（他の演算ノード１０２）に発行する。これにより、要求データが要求元の演算ノード１０２に転送される。なお、アクセス要求が排他的にデータを読み出す読み出し要求等である場合、２次キャッシュ３０２は、要求元の演算ノード１０２に転送した要求データを、データ保持部３７０から削除する。
【００６４】
ステップＳ２３０の処理の終了により、他の演算ノード１０２からのアクセス要求で要求された要求データをデータ保持部３７０が保持している場合の２次キャッシュ３０２の動作は終了する。一方、要求データをデータ保持部３７０が保持していない場合は、上述したように、ステップＳ３００の処理が実行される。
【００６５】
ステップＳ３００では、パイプライン部３６０は、処理対象のアクセス要求がローカルポート３３０で受信したアクセス要求か否かを判定する。処理対象のアクセス要求がローカルポート３３０で受信したアクセス要求である場合、すなわち、処理対象のアクセス要求が自演算ノード１０２からのアクセス要求である場合、２次キャッシュ３０２の動作は、ステップＳ３１０に移る。一方、処理対象のアクセス要求がリモートポート３４０で受信したアクセス要求である場合、すなわち、処理対象のアクセス要求が他の演算ノード１０２からのアクセス要求である場合、２次キャッシュ３０２の動作は、ステップＳ４００に移る。
【００６６】
ステップＳ３１０では、２次キャッシュ３０２は、アクセス要求で要求された要求データを読み出す読み出し要求を、自演算ノード１０２の記憶装置４００、または、他の演算ノード１０２に発行する。例えば、２次キャッシュ３０２は、要求データが自演算ノード１０２の記憶装置４００に記憶されるデータである場合、要求データの読み出し要求を、自演算ノード１０２の記憶装置４００に出力する。なお、２次キャッシュ３０２は、要求データが自演算ノード１０２の記憶装置４００から他の演算ノード１０２に持ち出されている場合、要求データの読み出し要求を、要求データの持ち出し先の演算ノード１０２に出力する。また、２次キャッシュ３０２は、例えば、要求データが他の演算ノード１０２の記憶装置４００に記憶されるデータである場合、要求データの読み出し要求を、要求データを管理する演算ノード１０２（他の演算ノード１０２）に出力する。
【００６７】
２次キャッシュ３０２は、ステップＳ３１０の処理を実行することにより、要求データを取得する。そして、２次キャッシュ３０２は、取得した要求データを自演算ノード１０２のコア２０２に出力して、動作を終了する。
【００６８】
ステップＳ４００では、２次キャッシュ３０２（より詳細には、判定部３１０）は、要求のすれ違いが発生したか否かを判定する。例えば、要求データが他の演算ノード１０２の記憶装置４００に記憶されるデータである場合、要求データは、他の演算ノード１０２の記憶装置４００から持ち出された持ち出しデータである。そして、要求データが持ち出しデータであるにも拘わらず、要求データをデータ保持部３７０が保持していない状態は、アクセス要求を２次キャッシュ３０２が受ける前に要求データが２次キャッシュ３０２から追い出された状態である。すなわち、要求データが持ち出しデータであるにも拘わらず、要求データをデータ保持部３７０が保持していない状態は、要求のすれ違いが発生した状態である。このため、判定部３１０は、例えば、要求データが他の演算ノード１０２の記憶装置４００に記憶されるデータである場合、要求のすれ違いが発生したと判定する。
【００６９】
要求のすれ違いが発生した場合、演算ノード１０２の動作は、ステップＳ４２０に移る。一方、要求のすれ違いが発生していない場合、演算ノード１０２の動作は、ステップＳ４１０に移る。
【００７０】
ステップＳ４１０では、２次キャッシュ３０２は、アクセス要求で要求された要求データを読み出す読み出し要求を、自演算ノード１０２の記憶装置４００に発行する。すなわち、２次キャッシュ３０２は、要求データを自演算ノード１０２の記憶装置４００から読み出す。そして、２次キャッシュ３０２は、自演算ノード１０２の記憶装置４００から読み出した要求データを要求元の演算ノード１０２に出力して、動作を終了する。
【００７１】
ステップＳ４２０では、２次キャッシュ３０２（より詳細には、応答情報生成部３２０）は、要求のすれ違いが発生したことを示すすれ違い情報を、要求元の演算ノード１０２に発行して、動作を終了する。なお、要求のすれ違いが発生する場合、要求データが持ち出しデータであるため、要求元の演算ノード１０２は、要求データ（持ち出しデータ）の持ち出し元の演算ノード１０２である。
【００７２】
すれ違い情報を受けた演算ノード１０２は、図６に示すように、自演算ノード１０２の記憶装置４００に書き戻された持ち出しデータ（アクセス要求で要求したデータ）を読み出す。これにより、要求のすれ違いが発生した場合でも、キャッシュコヒーレンシを維持することができる。なお、演算処理装置１２の動作は、図５に示す例に限定されない。
【００７３】
図６は、要求のすれ違いが発生した場合の演算処理装置１２の動作の一例を示す。図６に示す例では、アクセス対象である要求データは、演算ノード１０２ａの記憶装置４００ａのアドレスＡに記憶されるデータと演算ノード１０２ａの記憶装置４００ａのアドレスＢに記憶されるデータである。要求データを記憶する記憶装置４００を含む演算ノード１０２ａは、要求データのアドレスＡ、Ｂのメモリ管理ノードであり、ホームとも称される。なお、アクセス要求等の要求の発行元の２次キャッシュ３０２を含む演算ノード１０２は、ローカルとも称される。さらに、ローカルでない演算ノード１０２は、リモートとも称される。ローカルの演算ノード１０２は、ホームの演算ノード１０２を兼ねる場合もある。また、リモートの演算ノード１０２は、ホームの演算ノード１０２を兼ねる場合もある。
【００７４】
先ず、演算ノード１０２ｂ（ローカル）のパイプライン部３６０は、アドレスＢのデータを読み出す読み出し要求ＲＥＡＤ［Ｂ］を、自演算ノード１０２ｂから受ける。そして、演算ノード１０２ｂのパイプライン部３６０は、自演算ノード１０２ｂのタグ部３８０にアドレスＢのデータの読み出しを要求する（図６（Ｐ１０））。
【００７５】
演算ノード１０２ｂのデータ保持部３７０がアドレスＢのデータを保持していないため、演算ノード１０２ｂの２次キャッシュ３０２ｂはキャッシュミスする（図６（Ｐ１１））。このため、演算ノード１０２ｂ（ローカル）の２次キャッシュ３０２ｂは、演算ノード１０２ａ（ホーム）に、読み出し要求ＲＥＡＤ［Ｂ］を出力する。
【００７６】
演算ノード１０２ａ（ホーム）のパイプライン部３６０は、演算ノード１０２ｂ（ローカル）から読み出し要求ＲＥＡＤ［Ｂ］を受ける（図６（Ｐ１２））。そして、演算ノード１０２ａのパイプライン部３６０は、アドレスＢのデータの読み出しを実行して、アドレスＢのデータを含む読み出し完了情報ＲＣＰＬＴ［Ｂ］を演算ノード１０２ｂに出力する。
【００７７】
読み出し完了情報ＲＣＰＬＴ［Ｂ］を受けた演算ノード１０２ｂのパイプライン部３６０は、読み出し完了情報ＲＣＰＬＴ［Ｂ］に含まれるアドレスＢのデータを、自演算ノード１０２ｂのデータ保持部３７０に格納する（図６（Ｐ１３））。
【００７８】
なお、演算ノード１０２ｂのパイプライン部３６０は、データを格納する空き領域がデータ保持部３７０にない場合、空き領域を確保するために、データを記憶装置４００に書き戻すライトバックを、読み出し完了情報ＲＣＰＬＴ［Ｂ］受ける前に実行する。図６に示す例では、演算ノード１０２ｂのパイプライン部３６０は、アドレスＡのデータを演算ノード１０２ａ（ホーム）の記憶装置４００ａに書き戻すライトバックを指示する書き戻し情報ＷＲＫＢ［Ａ］を発行する（図６（Ｐ２０））。
【００７９】
これにより、演算ノード１０２ｂのタグ部３８０は、アドレスＡのデータに対して、ライトバックを実行する（図６（Ｐ２１））。この結果、アドレスＡのデータは、演算ノード１０２ｂ（ローカル）のデータ保持部３７０から追い出され、演算ノード１０２ａ（ホーム）の記憶装置４００ａに書き戻される（図６（Ｐ２２））。例えば、アドレスＡのデータがダーティの場合、アドレスＡのデータを含む書き戻し情報ＷＲＫＢ［Ａ］が演算ノード１０２ｂから演算ノード１０２ａに出力される。アドレスＡのデータがクリーンの場合、アドレスＡのデータを含まない書き戻し情報ＷＲＫＢ［Ａ］が演算ノード１０２ｂから演算ノード１０２ａに出力されてもよい。
【００８０】
また、図６に示す例では、演算ノード１０２ａのパイプライン部３６０は、演算ノード１０２ｂから書き戻し情報ＷＲＫＢ［Ａ］を受ける前に、アドレスＡのデータを排他的に読み出す読み出し要求ＲＥＡＤ［Ａ］を自演算ノード１０２ａのコア２０２ａから受ける。アドレスＡのデータは、演算ノード１０２ｂの２次キャッシュ３０２ｂから追い出されているが、書き戻し情報ＷＲＫＢ［Ａ］は、演算ノード１０２ａに到着していない。このため、演算ノード１０２ａは、アドレスＡのデータを演算ノード１０２ｂの２次キャッシュ３０２ｂが保持していると認識する。したがって、演算ノード１０２ａのパイプライン部３６０は、アドレスＡのデータを排他的に読み出す読み出し要求ＲＥＡＤ［Ａ］を演算ノード１０２ｂに出力する（図６（Ｐ３０））。
【００８１】
演算ノード１０２ａ（ホーム）のパイプライン部３６０は、他の演算ノード１０２ｂに持ち出されたアドレスＡのデータにアクセスする場合、矛盾の発生を防ぐために、アドレスＡのデータの状態の更新を、応答が返ってくるまでロックする（図６（Ｐ３１））。なお、書き戻し情報ＷＲＫＢ［Ａ］によるデータの状態の更新は、ロック対象から除外される。このため、上述したように、演算ノード１０２ｂ（ローカル）のデータ保持部３７０から追い出されたアドレスＡのデータは、演算ノード１０２ａ（ホーム）の記憶装置４００ａに書き戻される（図６（Ｐ２２））。
【００８２】
演算ノード１０２ａからの読み出し要求ＲＥＡＤ［Ａ］を受けた演算ノード１０２ｂのパイプライン部３６０は、自演算ノード１０２ｂのタグ部３８０にアドレスＡのデータの読み出しを要求する（図６（Ｐ３２））。アドレスＡのデータは、アドレスＡのデータに対するライトバックにより、演算ノード１０２ｂのデータ保持部３７０から既に追い出されている。このため、演算ノード１０２ｂの２次キャッシュ３０２ｂは、キャッシュミスする（図６（Ｐ３２））。
【００８３】
演算ノード１０２ｂの２次キャッシュ３０２ｂは、読み出し要求ＲＥＡＤ［Ａ］で要求された要求データが演算ノード１０２ａの記憶装置４００ａから持ち出した持ち出しデータであるにも拘わらず、キャッシュミスしたため、要求のすれ違いが発生したと判定する。このため、演算ノード１０２ｂの２次キャッシュ３０２ｂは、要求のすれ違いが発生したことを示すすれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］を、読み出し要求ＲＥＡＤ［Ａ］の応答として、演算ノード１０２ａに出力する。
【００８４】
このように、２次キャッシュ３０２ｂは、書き戻し情報ＷＲＫＢ［Ａ］を演算ノード１０２ａに出力した後に読み出し要求ＲＥＡＤ［Ａ］を演算ノード１０２ａから受けた場合、すれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］を演算ノード１０２ａに出力する。演算ノード１０２ａ（ホーム）のパイプライン部３６０は、演算ノード１０２ｂからすれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］を受ける（図６（Ｐ３３））。これにより、アドレスＡのデータの状態の更新に対するロックは、解除される。
【００８５】
また、すれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］を受けた演算ノード１０２ａのパイプライン部３６０は、読み出し要求ＲＥＡＤ［Ａ］で要求したアドレスＡの最新のデータが自演算ノード１００ａの記憶装置４００ａに書き戻されたことを認識する。このため、演算ノード１０２ａのパイプライン部３６０は、自演算ノード１０２ａの記憶装置４００ａに書き戻されたアドレスＡのデータを読み出す。例えば、演算ノード１０２ａのパイプライン部３６０は、読み出し要求ＲＥＡＤ［Ａ］を自演算ノード１００ａの記憶装置４００ａに出力する（図６（Ｐ３４））。そして、演算ノード１０２ａのパイプライン部３６０は、アドレスＡのデータを含む読み出し完了情報ＲＣＰＬＴ［Ａ］を受ける（図６（Ｐ３５））。これにより、アドレスＡのデータは、演算ノード１０２ａの２次キャッシュ３０２ａに保持される。そして、演算ノード１０２ａの２次キャッシュ３０２ａは、自演算ノード１０２ａのコア２０２ａにアドレスＡのデータを転送して、一連の動作を終了する。
【００８６】
このように、２次キャッシュ３０２ｂが書き戻し情報ＷＲＫＢ［Ａ］を演算ノード１０２ａに出力した後に読み出し要求ＲＥＡＤ［Ａ］を演算ノード１０２ａから受けるすれ違いが発生した場合でも、キャッシュコヒーレンシを維持することができる。すなわち、要求のすれ違いが発生した場合でも、すれ違い情報ＲＣＰＬＴｃｒｓを用いることにより、図７に示すリプレースバッファ３７２ＥＸ等を用いることなく、キャッシュコヒーレンシを維持することができる。
【００８７】
ここで、例えば、書き戻し情報ＷＲＫＢ［Ａ］がすれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］に追い越された場合、記憶装置４００ａから古いデータが読み出された後に、演算ノード１０２ｂで更新された最新のデータが記憶装置４００ａに書き戻される。この場合、キャッシュコヒーレンシが維持されない。このため、バス制御部１２２は、書き戻し情報ＷＲＫＢ［Ａ］とすれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］との転送の制御をバス１２０に対して実行し、書き戻し情報ＷＲＫＢ［Ａ］がすれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］に追い越されることを防止する。これにより、アドレスＡのデータが記憶装置４００ａに書き戻される前に、アドレスＡの古いデータが記憶装置４００ａから読み出されることを防止することができる。すなわち、キャッシュコヒーレンシを維持することができる。
【００８８】
例えば、読み出し完了情報ＲＣＰＬＴ、すれ違い情報ＲＣＰＬＴｃｒｓ等は、読み出し要求ＲＥＡＤ等の要求に対する処理の完了を要求元に通知する種類の情報である。書き戻し情報ＷＲＫＢは、書き戻しを命令する類いの情報であるが、応答情報生成部３２０は、書き戻し情報ＷＲＫＢを、すれ違い情報ＲＣＰＬＴｃｒｓと同じ種類の情報として生成する。バス制御部１２２は、書き戻し情報ＷＲＫＢとすれ違い情報ＲＣＰＬＴｃｒｓとが互いに同じ種類に属するため、書き戻し情報ＷＲＫＢ［Ａ］とすれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］とを出力順と同じ順番で演算ノード１０２ａに到達させる制御を実行する。これにより、書き戻し情報ＷＲＫＢ［Ａ］がすれ違い情報ＲＣＰＬＴｃｒｓ［Ａ］に追い越されることを防止でき、キャッシュコヒーレンシを維持することができる。
【００８９】
図７は、図４に示した２次キャッシュ３０２の比較例を示す。比較例の２次キャッシュ３０２ＥＸでは、リプレースバッファ３７２ＥＸが図４に示した２次キャッシュ３０２に追加される。また、２次キャッシュ３０２ＥＸは、図４に示したパイプライン部３６０、データ保持部３７０およびタグ部３８０の代わりに、パイプライン部３６０ＥＸ、データ保持部３７０ＥＸおよびタグ部３８０ＥＸを有する。２次キャッシュ３０２ＥＸのその他の構成は、図４に示した２次キャッシュ３０２と同一または同様である。図４で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。
【００９０】
２次キャッシュ３０２ＥＸは、ローカルポート３３０、リモートポート３４０、選択部３５０、パイプライン部３６０ＥＸ、データ保持部３７０ＥＸ、リプレースバッファ３７２ＥＸおよびタグ部３８０ＥＸ、３９０を有する。ローカルポート３３０は、自演算ノード１０２からのアクセス要求等の要求を受ける。リモートポート３４０は、他の演算ノード１０２からのアクセス要求等の要求を受ける。選択部３５０は、ローカルポート３３０から受ける要求およびリモートポート３４０から受ける要求のいずれかを選択し、選択した要求をパイプライン部３６０ＥＸに投入する。
【００９１】
パイプライン部３６０ＥＸは、パイプライン処理を実行するパイプライン処理部３６２ＥＸと、パイプライン処理部３６２ＥＸの動作を制御するパイプライン制御部３６４ＥＸと、ライトバックをキャンセルするか否かを示すキャンセルフラグＦＬＧとを有する。パイプライン処理部３６２ＥＸは、選択部３５０から受ける要求に基づく処理を複数のステージで順次実行する。
【００９２】
パイプライン制御部３６４ＥＸでは、図４に示した判定部３１０が２次キャッシュ３０２から省かれる。そして、パイプライン制御部３６４ＥＸは、アクセス要求等の要求に対する応答を示す情報（ＲＥＱＩＤ、ＰＡ）を要求元の演算ノード１０２等に出力する応答情報生成部３２０ＥＸを、図４に示した応答情報生成部３２０の代わりに有する。
【００９３】
データ保持部３７０ＥＸは、自演算ノード１０２のプロセッサコア２１０が使用するデータを記憶し、アクセス要求等で要求されるデータＤＡＴＡを出力する。
【００９４】
リプレースバッファ３７２ＥＸは、持ち出しデータが持ち出し元の演算ノード１０２の記憶装置４００に書き戻される際に、データ保持部３７０ＥＸから追い出される書き戻し対象の持ち出しデータを、記憶装置４００への書き戻しが終了するまで保持する。
【００９５】
タグ部３８０ＥＸは、データ保持部３７０ＥＸに保持されるデータの状態を示す情報を保持する。タグ部３９０は、自演算ノード１０２の記憶装置４００に記憶されるデータの状態を示す情報を保持する。
【００９６】
２次キャッシュ３０２ＥＸは、持ち出しデータのライトバックと持ち出しデータに対するアクセス要求とのすれ違いが発生した場合、リプレースバッファ３７２ＥＸが保持する持ち出しデータを、アクセス要求の要求元の演算ノード１０２に転送する。これにより、要求のすれ違いが発生した場合でも、キャッシュコヒーレンシが維持される。
【００９７】
図８は、図７に示した２次キャッシュ３０２ＥＸを有する演算処理装置の動作の一例を示す。図８に示す例では、図６と同様に、アクセス対象であるアドレスＡのデータおよびアドレスＢのデータは、演算ノード１０２ａの記憶装置４００ａに記憶されるデータである。
【００９８】
アドレスＢのデータを読み出す読み出し要求ＲＥＡＤ［Ｂ］に基づく動作は、図６に示した動作と同一または同様である（図８（Ｐ１０）、（Ｐ１１）、Ｐ（１２）、Ｐ１３））。
【００９９】
演算ノード１０２ｂのパイプライン部３６０ＥＸは、空き領域を確保するために、アドレスＡのデータを演算ノード１０２ａ（ホーム）の記憶装置４００ａに書き戻すライトバックを指示する書き戻し情報ＷＲＫＢ［Ａ］を発行する（図８（Ｐ４０））。これにより、演算ノード１０２ｂのタグ部３８０ＥＸは、アドレスＡのデータに対して、ライトバックを実行する（図８（Ｐ４１））。この結果、アドレスＡのデータは、演算ノード１０２ｂ（ローカル）のデータ保持部３７０ＥＸから追い出され、演算ノード１０２ｂのリプレースバッファ３７２ＥＸに書き込まれる（図８（Ｐ４２））。
【０１００】
また、演算ノード１０２ａは、例えば、アドレスＡのデータがダーティの場合、アドレスＡのデータを含む書き戻し情報ＷＲＫＢ［Ａ］を演算ノード１０２ｂから受ける（図８（Ｐ４３））。アドレスＡのデータがクリーンの場合、アドレスＡのデータを含まない書き戻し情報ＷＲＫＢ［Ａ］が演算ノード１０２ｂから演算ノード１０２ａに出力されてもよい。なお、図８に示す例では、書き戻し情報ＷＲＫＢ［Ａ］は、書き戻しを命令する種類の情報として生成され、要求に対する処理の完了を要求元に通知する読み出し完了情報ＲＣＰＬＴ［Ａ］等とは異なる種類に属する。
【０１０１】
また、図６と同様に、演算ノード１０２ａのパイプライン部３６０ＥＸは、演算ノード１０２ｂから書き戻し情報ＷＲＫＢ［Ａ］を受ける前に、アドレスＡのデータを排他的に読み出す読み出し要求ＲＥＡＤ［Ａ］を自演算ノード１０２ａのコア２０２ａから受ける。アドレスＡのデータは、演算ノード１０２ｂの２次キャッシュ３０２ＥＸから追い出されているが、書き戻し情報ＷＲＫＢ［Ａ］は、演算ノード１０２ａに到着していない。このため、演算ノード１０２ａは、アドレスＡのデータを演算ノード１０２ｂの２次キャッシュ３０２ＥＸが保持していると認識する。
【０１０２】
したがって、演算ノード１０２ａのパイプライン部３６０ＥＸは、アドレスＡのデータを排他的に読み出す読み出し要求ＲＥＡＤ［Ａ］を演算ノード１０２ｂに出力する（図８（Ｐ５０））。そして、演算ノード１０２ａのパイプライン部３６０ＥＸは、図６と同様に、アドレスＡのデータの状態の更新を、応答が返ってくるまでロックする（図８（Ｐ５１））。また、演算ノード１０２ａのパイプライン部３６０ＥＸは、処理を命令する種類の情報として生成された書き戻し情報ＷＲＫＢ［Ａ］を、アドレスＡのデータの状態の更新をロックした状態で受ける（図８（Ｐ４３））。このため、演算ノード１０２ａのパイプライン部３６０ＥＸは、アドレスＡのデータのライトバックを実行せずに、ロックが解除されるまで待機する。
【０１０３】
演算ノード１０２ａからの読み出し要求ＲＥＡＤ［Ａ］を受けた演算ノード１０２ｂのパイプライン部３６０ＥＸは、自演算ノード１０２ｂのタグ部３８０ＥＸにアドレスＡのデータの読み出しを要求する。アドレスＡのデータは、アドレスＡのデータに対するライトバックにより、演算ノード１０２ｂのデータ保持部３７０ＥＸから既に追い出されている。このため、演算ノード１０２ｂの２次キャッシュ３０２ＥＸは、キャッシュミスする（図８（Ｐ５２））。
【０１０４】
なお、上述したように、アドレスＡのデータは、演算ノード１０２ｂのリプレースバッファ３７２ＥＸに書き込まれている（図８（Ｐ４２））。このため、演算ノード１０２ｂの２次キャッシュ３０２ＥＸは、自演算ノード１０２ｂのリプレースバッファ３７２ＥＸに書き込んだアドレスＡのデータを、読み出し完了情報ＲＣＰＬＴ［Ａ］として、演算ノード１０２ａに出力する（図８（Ｐ５３））。
【０１０５】
演算ノード１０２ｂからの読み出し完了情報ＲＣＰＬＴ［Ａ］を受けた演算ノード１０２ａのパイプライン部３６０ＥＸは、アドレスＡのデータの状態の更新に対するロックを解除する（図８（Ｐ５４））。さらに、演算ノード１０２ａのパイプライン部３６０ＥＸは、キャンセルフラグＦＬＧを“１”にセットする。（図８（Ｐ５５））。
【０１０６】
演算ノード１０２ａのパイプライン部３６０ＥＸは、キャンセルフラグＦＬＧが“１”であるため、ロックを解除しても、アドレスＡのデータに対するライトバックを実行せずにキャンセルする（図８（Ｐ４４））。そして、演算ノード１０２ａのパイプライン部３６０ＥＸは、ライトバックをキャンセルしたため、キャンセルフラグＦＬＧを“０”にセットする（図８（Ｐ５６））。また、演算ノード１０２ａのパイプライン部３６０ＥＸは、アドレスＡのデータに対するライトバックキャンセルしたことを示す書き戻し完了情報ＷＢＣＰＬＴ［Ａ］を、書き戻し情報ＷＲＫＢ［Ａ］の応答として、演算ノード１０２ｂに出力する。
【０１０７】
演算ノード１０２ａからの書き戻し完了情報ＷＢＣＰＬＴ［Ａ］を受けた演算ノード１０２ｂのリプレースバッファ３７２ＥＸは、アドレスＡのデータを削除する。これにより、演算ノード１０２ａ、１０２ｂは、一連の動作を終了する。
【０１０８】
このように、要求のすれ違いが発生した場合でも、リプレースバッファ３７２ＥＸから要求データを要求元に転送することにより、キャッシュコヒーレンシが維持される。なお、２次キャッシュ３０２ＥＸからリプレースバッファ３７２ＥＸが単純に省かれた２次キャッシュでは、読み出し要求ＲＥＡＤ［Ａ］を受けた演算ノード１０２ｂの２次キャッシュがキャッシュミスした場合、演算ノード１０２ａにデータを返す方法がない。このため、読み出し要求ＲＥＡＤ［Ａ］に対する一連のフローが停止し、キャッシュコヒーレンシを維持することができなくなる。また、２次キャッシュ３０２ＥＸからキャンセルフラグＦＬＧが省かれた２次キャッシュでは、アドレスＡの最新のデータを含む読み出し完了情報ＲＣＰＬＴ［Ａ］を受けた後に、アドレスＡの古いデータをライトバックする場合がある。
【０１０９】
リプレースバッファ３７２ＥＸおよびキャンセルフラグＦＬＧを有する２次キャッシュ３０２ＥＸでは、要求のすれ違いが発生した場合でもキャッシュコヒーレンシが維持されるが、図４に示した２次キャッシュ３０２に比べて、回路規模が増加する。換言すれば、すれ違い情報ＲＣＰＬＴｃｒｓを用いてキャッシュコヒーレンシ制御を実現する演算処理装置１２は、リプレースバッファ３７２ＥＸ等を用いる場合に比べて、回路規模の増加を抑制することができる。このように、演算処理装置１２では、回路規模を削減することができる。
【０１１０】
以上、図３から図６に示す実施形態においても、図１および図２に示した実施形態と同様の効果を得ることができる。例えば、２次キャッシュ３０２の判定部３１０は、持ち出しデータに対する要求のすれ違いが発生したか否かを判定する。また、２次キャッシュ３０２の応答情報生成部３２０は、要求のすれ違いが発生した場合に、要求のすれ違いが発生したことを示すすれ違い情報ＲＣＰＬＴｃｒｓを、アクセス要求の要求元（すなわち、持ち出しデータの持ち出し元）の演算ノード１０２に出力する。これにより、アクセス要求の要求元の演算ノード１０２は、アクセス要求で要求したデータに対する要求のすれ違いが発生したことを認識でき、自演算ノード１０２の記憶装置４００に書き戻された最新のデータ（正しいデータ）を読み出すことができる。この結果、要求のすれ違いが発生した場合でも、キャッシュコヒーレンシを維持することができる。
【０１１１】
また、すれ違い情報ＲＣＰＬＴｃｒｓを用いてキャッシュコヒーレンシ制御を実行することにより、リプレースバッファ３７２ＥＸ等を用いてキャッシュコヒーレンシ制御を実行する場合に比べて、キャッシュコヒーレンシ制御を実現する回路の規模を削減できる。すなわち、キャッシュコヒーレンシ制御に対応した演算処理装置１２の回路規模を削減することができる。また、キャッシュコヒーレンシ制御を実現する回路の規模を削減したことにより、演算処理装置１２の消費電力を削減することができる。また、キャッシュコヒーレンシ制御を実現する回路の規模を削減したことにより、演算処理装置１２の製造コストを削減することができる。
【０１１２】
また、バス制御部１２２は、持ち出し元の演算ノード１０２に出力される書き戻し情報ＷＲＫＢおよびすれ違い情報ＲＣＰＬＴｃｒｓを出力順と同じ順番で持ち出し元の演算ノード１０２に到達させる制御をバス１２０に対して実行する。これにより、更新された持ち出しデータが記憶装置４００に書き戻される前に古い持ち出しデータが記憶装置４００から読み出されることを防止することができ、キャッシュコヒーレンシを維持することができる。
【０１１３】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１１４】
１０、１２‥演算処理装置；１００、１０２‥演算ノード；２００、２１０‥プロセッサコア；３００‥キャッシュメモリ；３０２、３０２ＥＸ‥２次キャッシュ；３１０‥判定部；３２０、３２０ＥＸ‥応答情報生成部；３３０‥ローカルポート；３４０‥リモートポート；３５０‥選択部；３６０、３６０ＥＸ‥パイプライン部；３７０、３７０ＥＸ‥データ保持部；３８０、３８０ＥＸ、３９０‥タグ部；３６２、３６２ＥＸ‥パイプライン処理部；３６４、３６４ＥＸ‥パイプライン制御部；４００‥記憶装置；ＦＬＧ‥キャンセルフラグ
【図１】
2018195183.tif 000003
【図２】
2018195183.tif 000004
【図３】
2018195183.tif 000005
【図４】
2018195183.tif 000006
【図５】
2018195183.tif 000007
【図６】
2018195183.tif 000008
【図７】
2018195183.tif 000009
【図８】
2018195183.tif 000010