(57)【要約】【課題】キャッシュコヒーレンシを保ちながら処理能力を向上させることができる処理装置を提供することを課題とする。【解決手段】キャッシュコントローラ（２１）は、他の処理装置から無効化要求が入力されると、無効化履歴テーブル（４１）に無効化要求が持つ無効化要求アドレス及び無効化要求を出力した他の処理装置の識別子の組みを登録する。中央処理単位（１１）がキャッシュメモリ（３１）に記憶されていない第１のアドレスのデータをリードしようとすると、キャッシュコントローラは、第１のアドレスが無効化履歴テーブルに登録されている場合には、第１のアドレスに対応する無効化要求を出力した他の処理装置の識別子が示す他の処理装置に第１のアドレスを含むコヒーレントリード要求を出力し、第１のアドレスが無効化履歴テーブルに登録されていない場合には、すべての他の処理装置に第１のアドレスを含むコヒーレントリード要求を出力する。【選択図】図１
2014191622.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリのデータの一部のコピーを記憶するキャッシュメモリと、
前記キャッシュメモリに対してデータをアクセスする中央処理単位と、
前記キャッシュメモリを制御するキャッシュコントローラと、
無効化履歴テーブルとを有し、
前記キャッシュコントローラは、他の処理装置から無効化要求が入力されると、前記無効化履歴テーブルに前記無効化要求が持つ無効化要求アドレス及び前記無効化要求を出力した前記他の処理装置の識別子の組みを登録し、
前記中央処理単位が前記キャッシュメモリに記憶されていない第１のアドレスのデータをリードしようとすると、前記キャッシュコントローラは、前記第１のアドレスが前記無効化履歴テーブルに登録されている場合には、前記第１のアドレスに対応する前記無効化要求を出力した前記他の処理装置の識別子が示す前記他の処理装置に前記第１のアドレスを含むコヒーレントリード要求を出力し、前記第１のアドレスが前記無効化履歴テーブルに登録されていない場合には、すべての他の処理装置に前記第１のアドレスを含むコヒーレントリード要求を出力することを特徴とする処理装置。
【請求項２】
前記キャッシュコントローラは、前記無効化履歴テーブルに登録されている前記第１のアドレスに対応する前記無効化要求を出力した前記他の処理装置の識別子が示す前記他の処理装置に前記第１のアドレスを含むコヒーレントリード要求を出力した結果、前記他の処理装置から前記第１のアドレスのデータが無効状態である旨を入力した場合には、すべての他の処理装置に対し前記第１のアドレスを含むコヒーレントリード要求を出力することを特徴とする請求項１記載の処理装置。
【請求項３】
メインメモリのデータの一部のコピーを記憶するキャッシュメモリと、
前記キャッシュメモリに対してデータをアクセスする中央処理単位と、
前記キャッシュメモリを制御するキャッシュコントローラと、
コヒーレントリード履歴テーブルとを有し、
前記キャッシュコントローラは、他の処理装置からコヒーレントリード要求が入力されると、前記コヒーレントリード履歴テーブルに前記コヒーレントリード要求が持つコヒーレントリード要求アドレス及び前記コヒーレントリード要求を出力した前記他の処理装置の識別子の組みを登録し、
前記中央処理単位が前記キャッシュメモリの第２のアドレスのデータを書き換えようとすると、前記キャッシュコントローラは、前記第２のアドレスが前記コヒーレントリード履歴テーブルに登録されている場合には、前記コヒーレントリード履歴テーブルに登録されている前記第２のアドレスに対応する前記他の処理装置の識別子が示す前記他の処理装置に前記第２のアドレスを含む無効化要求を出力し、前記第２のアドレスが前記コヒーレントリード履歴テーブルに登録されていない場合には、すべての他の処理装置に前記第２のアドレスを含む無効化要求を出力することを特徴とする処理装置。
【請求項４】
前記コヒーレントリード履歴テーブルに既にコヒーレントリード要求アドレス及び前記他の処理装置の識別子の組みを登録済であり、さらに他の処理装置より同一アドレスで前記コヒーレントリード履歴テーブルに対し登録要求があった場合、前記コヒーレントリード履歴テーブルの前記同一アドレスのデータ登録を無効にすることを特徴とする請求項３記載の処理装置。
【請求項５】
メインメモリのデータの一部のコピーを記憶するキャッシュメモリと、
前記キャッシュメモリに対してデータをアクセスする中央処理単位と、
前記キャッシュメモリを制御するキャッシュコントローラと、
コヒーレントリード履歴テーブルとを有し、
前記キャッシュコントローラは、他の処理装置からコヒーレントリード要求が入力されると、前記コヒーレントリード履歴テーブルに前記コヒーレントリード要求が持つコヒーレントリード要求アドレス及び前記コヒーレントリード要求を出力した前記他の処理装置に相当するビットに対し、コヒーレントリード要求があったことを示すように変更し、
前記キャッシュコントローラは、前記中央処理単位が前記キャッシュメモリの第３のアドレスのデータを書き換える要求を入力すると、前記第３のアドレスが前記コヒーレントリード履歴テーブルに登録されている場合には、前記コヒーレントリード履歴テーブルにコヒーレントリード要求があったことを示すビット位置に相当する他の処理装置に対し、前記第３のアドレスを含む無効化要求を出力し、前記第３のアドレスが前記コヒーレントリード履歴テーブルに登録されていない場合には、すべての他の処理装置に前記第３のアドレスを含む無効化要求を出力することを特徴とする処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理装置に関し、特にキャッシュメモリのコヒーレンス技術に関する。
【背景技術】
【０００２】
コンピュータを用いた情報処理システムの性能を向上する手段として複数のプロセシングユニット（ＣＰＵ）を用いた並列処理システムが知られている。並列処理システムでは、各ＣＰＵが備えるキャッシュメモリの内容の同一性を保つ必要がある。このことをキャッシュコヒーレンシと呼ぶが、キャッシュコヒーレンシを効率的に保つ手法をいくつか説明する。
【０００３】
共通バスを流れるアクセス要求に含まれるアドレスを格納するヒストリーテーブルと、ヒストリーテーブル制御回路とを備えるキャッシュシステムが知られている（例えば、特許文献１参照）。ヒストリーテーブル制御回路は、受け取ったアクセス要求のアドレスがテーブルに格納されているか否かを判定し、該アドレスがテーブルに格納されている場合には、該アクセス要求に関するキャッシュ制御回路の動作を抑止し、該アドレスがテーブルに格納されていない場合には、キャッシュ制御回路に、該アクセス要求に関する動作を行わせる。
【０００４】
また、キャッシュライン以上の大きさを有する、主記憶の複数の領域の各々について、それぞれに属するデータを各プロセッサユニットがキャッシングしているか否かを示す情報が記憶されるマルチキャストテーブルが知られている（例えば、特許文献２参照）。他のプロセッサユニットに送付すべきコヒーレント処理要求の送付先をこのテーブルに記憶された情報に基づいて制限し、相互結合網によりこの要求を制限された送付先に部分放送する。送付先のプロセッサユニットは、その要求が指定するデータのキャッシュ状態を返送するときにそのプロセッサユニットでのそのデータが含まれる特定のメモリ領域に関するそのプロセッサユニットでのキャッシング状況を併せて返送する。要求元プロセッサユニットは、この返送に基づいてマルチキャストテーブルを更新する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−２９３０６０号公報
【特許文献２】特開平９−３１１８２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プロセシング・ユニット(ＣＰＵ)とＣＰＵに付随するキャッシュメモリからなる処理装置(ノード)が複数相互に接続された並列処理システムにおいて、各ノードで共有されるデータは各キャッシュメモリ上で同一である必要がある。キャッシュメモリの同一性のことをキャッシュコヒーレンシという。キャッシュコヒーレンシを保つためのアルゴリズムとしてスヌープ方式がある。スヌープ方式では、キャッシュコヒーレンシを保つために、１つのノードが他の全てのノードに種々のスヌープ要求を出力する。しかし、ノードが無条件にすべての他のノードに要求を出力すると、ノード間を接続する相互結合網上のデータが輻輳し、処理システムの処理能力が低下してしまう。これはノードの数が増えれば増えるほど顕著である。また、スヌープ要求を受けた他のキャッシュはその応答の動作のため、本来のＣＰＵからの要求に遅延を来し、処理性能の低下を招いていた。
【０００７】
１つの側面では、本発明の目的は、キャッシュコヒーレンシを保ちながら処理能力を向上させることができる処理装置を提供することである。
【課題を解決するための手段】
【０００８】
処理装置は、メインメモリのデータの一部のコピーを記憶するキャッシュメモリと、前記キャッシュメモリに対してデータをアクセスする中央処理単位と、前記キャッシュメモリを制御するキャッシュコントローラと、無効化履歴テーブルとを有し、前記キャッシュコントローラは、他の処理装置から無効化要求が入力されると、前記無効化履歴テーブルに前記無効化要求が持つ無効化要求アドレス及び前記無効化要求を出力した前記他の処理装置の識別子の組みを登録し、前記中央処理単位が前記キャッシュメモリに記憶されていない第１のアドレスのデータをリードしようとすると、前記キャッシュコントローラは、前記第１のアドレスが前記無効化履歴テーブルに登録されている場合には、前記第１のアドレスに対応する前記無効化要求を出力した前記他の処理装置の識別子が示す前記他の処理装置に前記第１のアドレスを含むコヒーレントリード要求を出力し、前記第１のアドレスが前記無効化履歴テーブルに登録されていない場合には、すべての他の処理装置に前記第１のアドレスを含むコヒーレントリード要求を出力する。
【０００９】
また、処理装置は、メインメモリのデータの一部のコピーを記憶するキャッシュメモリと、前記キャッシュメモリに対してデータをアクセスする中央処理単位と、前記キャッシュメモリを制御するキャッシュコントローラと、コヒーレントリード履歴テーブルとを有し、前記キャッシュコントローラは、他の処理装置からコヒーレントリード要求が入力されると、前記コヒーレントリード履歴テーブルに前記コヒーレントリード要求が持つコヒーレントリード要求アドレス及び前記コヒーレントリード要求を出力した前記他の処理装置の識別子の組みを登録し、前記中央処理単位が前記キャッシュメモリの第２のアドレスのデータを書き換えようとすると、前記キャッシュコントローラは、前記第２のアドレスが前記コヒーレントリード履歴テーブルに登録されている場合には、前記コヒーレントリード履歴テーブルに登録されている前記第２のアドレスに対応する前記他の処理装置の識別子が示す前記他の処理装置に前記第２のアドレスを含む無効化要求を出力し、前記第２のアドレスが前記コヒーレントリード履歴テーブルに登録されていない場合には、すべての他の処理装置に前記第２のアドレスを含む無効化要求を出力する。
【発明の効果】
【００１０】
無効化履歴テーブルに登録されている他の処理装置にのみコヒーレントリード要求を出力すること、又はコヒーレントリード履歴テーブルに登録されている他の処理装置のみに無効化要求を出力することにより、複数の処理装置が無条件にすべての他の処理装置にコヒーレントリード要求又は無効化要求を出力することが少なくなり、相互結合網上のデータ輻輳が低下し性能が向上する。また、キャッシュメモリは、コヒーレントリード要求又は無効化要求を受ける回数が減り、本来の中央処理単位からのリード・ライト要求に専念することができ、処理性能向上に寄与する。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の実施形態による処理システムの構成例を示す図である。
【図２】図２は、本発明の実施形態による処理システムのスイッチ制御部の構成例を示す図である。
【図３】図３は、図１のキャシュメモリ及びキャッシュコントローラの一部の構成例を示す図である。
【図４】図４は、図１の履歴テーブル内の無効化履歴テーブル、比較器及び論理積（ＡＮＤ）回路の構成例を示す図である。
【図５】図５は、図１の履歴テーブル内のコヒーレントリード履歴テーブル、比較器及び論理積回路の構成例を示す図である。
【図６】図６は、ノードのリード処理を示すフローチャートである。
【図７】図７は、ノードのライト処理を示すフローチャートである。
【図８】図８は、本実施形態においてスヌープ要求を実行する前と後で各キャッシュメモリの状態がどう変化するかを表す図である。
【図９】図９は、本実施形態においてスヌープ要求を実行する前と後で各キャッシュメモリの状態がどう変化するかを表す図である。
【図１０】図１０は、図１の履歴テーブル内のコヒーレントリード履歴テーブルの他の例を示す図である。
【発明を実施するための形態】
【００１２】
図１及び図２は、実施形態による処理システムの構成例を示す図である。処理システムは、第１〜第６のノード１〜６と、スイッチＳＷ１２〜ＳＷ６７と、メインメモリ５１と、メインメモリコントローラ５２と、スイッチ制御部５３と、レジスタＲ１２〜Ｒ６７とを有する。図２のノード１〜６及びスイッチＳＷ１２〜ＳＷ６７は、図１のノード１〜６及びスイッチＳＷ１２〜ＳＷ６７と同じものである。
【００１３】
第１のノード１は、第１の処理装置であり、第１の中央演算処理装置（ＣＰＵ：Central Processing Unit）１１と、第１のキャッシュコントローラ２１と、第１のキャッシュメモリ３１と、第１の履歴テーブル４１とを有する。
【００１４】
第２のノード２は、第２の処理装置であり、第２のＣＰＵ１２と、第２のキャッシュコントローラ２２と、第２のキャッシュメモリ３２と、第２の履歴テーブル４２とを有する。
【００１５】
第３のノード３は、第３の処理装置であり、第３のＣＰＵ１３と、第３のキャッシュコントローラ２３と、第３のキャッシュメモリ３３と、第３の履歴テーブル４３とを有する。
【００１６】
第４のノード４は、第４の処理装置であり、第４のＣＰＵ１４と、第４のキャッシュコントローラ２４と、第４のキャッシュメモリ３４と、第４の履歴テーブル４４とを有する。
【００１７】
第５のノード５は、第５の処理装置であり、第５のＣＰＵ１５と、第５のキャッシュコントローラ２５と、第５のキャッシュメモリ３５と、第５の履歴テーブル４５とを有する。
【００１８】
第６のノード６は、第６の処理装置であり、第６のＣＰＵ１６と、第６のキャッシュコントローラ２６と、第６のキャッシュメモリ３６と、第６の履歴テーブル４６とを有する。
【００１９】
メインメモリ５１は、各ＣＰＵが処理を実施するための命令及び各ＣＰＵが処理するためのデータあるいは処理した結果のデータを記憶する。メインメモリコントローラ５２は、各ノードから要求に応じてメインメモリ５１の制御を行う。キャッシュメモリ３１〜３６は、それぞれ、メインメモリ５１に記憶されている一部のアドレスのデータのコピーを記憶する。ＣＰＵ１１〜１６は、中央処理単位（プロセッサ）であり、それぞれ、メインメモリ５１又はキャッシュメモリ３１〜３６に対してデータをアクセスする。キャッシュコントローラ２１〜２６は、それぞれ、キャッシュメモリ３１〜３６を制御する。
【００２０】
スイッチＳＷ１２〜ＳＷ６７は、第１〜第６のノード１〜６を相互に接続する相互結合網を形成するためのスイッチである。スイッチＳＷ１２は、第１のノード１及び第２のノード２を相互に接続可能である。スイッチＳＷ１３は、第１のノード１及び第３のノード３を相互に接続可能である。スイッチＳＷ１４は、第１のノード１及び第４のノード４を相互に接続可能である。スイッチＳＷ１５は、第１のノード１及び第５のノード５を相互に接続可能である。スイッチＳＷ１６は、第１のノード１及び第６のノード６を相互に接続可能である。スイッチＳＷ１７は、第１のノード１及びメインメモリコントローラ５２を相互に接続可能である。
【００２１】
スイッチＳＷ２３は、第２のノード２及び第３のノード３を相互に接続可能である。スイッチＳＷ２４は、第２のノード２及び第４のノード４を相互に接続可能である。スイッチＳＷ２５は、第２のノード２及び第５のノード５を相互に接続可能である。スイッチＳＷ２６は、第２のノード２及び第６のノード６を相互に接続可能である。スイッチＳＷ２７は、第２のノード２及びメインメモリコントローラ５２を相互に接続可能である。
【００２２】
スイッチＳＷ３４は、第３のノード３及び第４のノード４を相互に接続可能である。スイッチＳＷ３５は、第３のノード３及び第５のノード５を相互に接続可能である。スイッチＳＷ３６は、第３のノード３及び第６のノード６を相互に接続可能である。スイッチＳＷ３７は、第３のノード３及びメインメモリコントローラ５２を相互に接続可能である。
【００２３】
スイッチＳＷ４５は、第４のノード４及び第５のノード５を相互に接続可能である。スイッチＳＷ４６は、第４のノード４及び第６のノード６を相互に接続可能である。スイッチＳＷ４７は、第４のノード４及びメインメモリコントローラ５２を相互に接続可能である。
【００２４】
スイッチＳＷ５６は、第５のノード５及び第６のノード６を相互に接続可能である。スイッチＳＷ５７は、第５のノード５及びメインメモリコントローラ５２を相互に接続可能である。
【００２５】
スイッチＳＷ６７は、第６のノード６及びメインメモリコントローラ５２を相互に接続可能である。
【００２６】
スイッチ制御部５３は、第１〜第６のノード１〜６の要求に応じて、レジスタＲ１２〜Ｒ６７に対して、クロック信号ＣＫに同期して、データＤｉｎを書き込む。スイッチＳＷ１２〜ＳＷ６７は、それぞれ、レジスタＲ１２〜Ｒ６７に書き込まれたデータに応じて、オン又はオフする。
【００２７】
図２はスイッチ制御のブロック図である。各ノード１〜６から発せられたスイッチ制御信号をスイッチ制御部５３は受けて、各スイッチＳＷ１２〜６７と対にあるレジスタＲ１２〜Ｒ６７へ各スイッチの制御情報のオン／オフを書き込む。各スイッチは例えば“１”を書き込めばオンであり、“０”を書き込めばオフとなる。
【００２８】
図３は、図１の各キャシュメモリ３１〜３６の構成例を示す図である。キャッシュメモリ３１〜３６は、メインメモリ５１に対して高速小容量のメモリであり、通常メインメモリの１部のコピーがキャッシュメモリに記憶されている。キャッシュメモリ３１〜３６を設けることにより、ＣＰＵ１１〜１６はデータに対して高速にアクセスすることができる。図３ではダイレクトマップ方式、ＭＥＳＩプロトコルのキャッシュメモリを図示している。各キャシュメモリ３１〜３６は、タグ３０４及びデータ３０３の一つ又は複数の組みを記憶する。タグ３０４は、アドレス３０１及びステータス３０２を有する。データ３０３の１ラインには通常、メインメモリ５１の数ワード分のデータが記憶できる。タグ３０４とデータ３０３の１ライン分を１エントリと呼称する。キャッシュメモリのアドレス入力はＣＰＵの下位アドレスＡＤＤ１に接続され、ＣＰＵの下位アドレスＡＤＤ１が決定するとキャッシュメモリの１エントリ分のデータが読み出される。ステータス３０２は、無効状態Ｉ、共有状態Ｓ、排他状態Ｅ及び変更済み状態Ｍのうちのいずれか１つの状態を示す。
【００２９】
無効状態Ｉは、それに対応するアドレス３０１のデータ３０３が無効であることを示す。第１のキャッシュメモリ３１及び第２のキャッシュメモリ３２が同一のアドレス３０１の同一のデータ３０３を記憶している場合に、第１のキャッシュメモリ３１のそのアドレス３０１のデータ３０３が変更されたときには、キャッシュコヒーレンシを保つ必要がある。その場合、第２のキャッシュメモリ３２のそのアドレス３０１のデータ３０３は古いデータであることを示すために、第２のキャッシュメモリ３２のそのアドレス３０１のデータ３０３に対応するステータス３０２を無効状態Ｉにする。
【００３０】
共有状態Ｓは、複数のキャッシュメモリが同一のアドレス３０１の同一のデータ３０３を共有している状態を示す。例えば、キャッシュメモリ３１〜３６の中で複数のキャッシュメモリが同一のアドレス３０１の同一のデータ３０３を記憶している場合には、その同一のアドレス３０１の同一のデータ３０３を記憶している複数のキャッシュメモリのステータス３０２はすべて共有状態Ｓになる。
【００３１】
排他状態Ｅは、１個のキャッシュメモリだけがそのアドレス３０１のデータ３０３を記憶している状態を示す。例えば、キャッシュメモリ３１〜３６の中で１個のキャッシュメモリだけがそのアドレス３０１のデータ３０３を記憶している場合には、そのキャッシュメモリのステータス３０２は排他状態Ｅになる。
【００３２】
変更済み状態Ｍは、中央演算処理装置がキャッシュメモリ内のそのアドレス３０１のデータ３０３を変更した状態であることを示す。例えば、ＣＰＵ１１がキャッシュメモリ３１内のアドレス３０１のデータ３０３を書き換えた場合には、キャッシュメモリ３１内のそのアドレス３０１のデータ３０３に対応するステータス３０２を変更済み状態Ｍになる。この状態では、キャッシュメモリ３１内のデータ３０２とメインメモリ５１内のデータとは、異なるデータになっている。
【００３３】
まず、無効化要求について説明する。上記のように、例えば、第１のキャッシュメモリ３１及び第２のキャッシュメモリ３２が同一のアドレス３０１の同一のデータ３０３を記憶している場合に、第１のキャッシュメモリ３１及び第２のキャッシュメモリ３２のそのアドレス３０１のデータ３０３に対応するステータス３０２は共に共有状態Ｓである。この状態で、第１のＣＰＵ１１が第１のキャッシュメモリ３１内のそのアドレス３０１のデータ３０３を書き換えようとすると、キャッシュコヒーレンシを保つため、すべての他のノード２〜６に、そのアドレス情報を含む無効化要求を出力する。第２のノード２では、その入力した無効化要求のアドレス情報でキャッシュメモリ３２を読み出すと、同じアドレスがアドレス３０１に、同じデータがデータ３０３に存在し、ステータスは共有状態Ｓを出力しキャッシュヒットとなる、この場合第１のノード１からの無効化要求に従い、第２のキャッシュメモリ３２内のそのアドレス３０１のデータ３０３に対応するステータス３０２を無効状態Ｉにする。また、ノード３〜６は、その入力した無効化要求のアドレス情報でキャッシュメモリ３２を読み出すが、無効化要求のアドレス３０１のデータ３０３がキャッシュメモリ３３〜３６に存在しないため無効化の処理は行わないが、各キャッシュメモリへのアクセスが生じその期間はＣＰＵからのアクセスが待たされる。また上記のように、第１のノード１は、すべての他のノード２〜６に対して、オン状態のスイッチＳＷ１２〜ＳＷ１６を介して、同一の無効化要求を出力する。この場合、全てのスイッチパスが占有されるため、他のノード間のあるいはメインメモリとの通信が阻害され、バスがスイッチファブリック型であることの利点が半減し、処理システムの性能が低下してしまう。
【００３４】
本実施形態では、図１の履歴テーブル４１〜４６を設けることにより、第１のノード１は、すべての他のノード２〜６に無効化要求を出力するのではなく、スイッチＳＷ１２のみオンにし、必要な１個の他のノード２に対してのみ無効化要求を出力することにより、スイッチＳＷ３４〜ＳＷ６７はフリーとなり、他のノード間のあるいはメインメモリとの通信が確保できること、またキャッシュメモリ３３〜３６に対しても全くアクセスしないため、各ＣＰＵからキャッシュメモリへのアクセスを阻害することがないことによって、処理システムの性能を向上させる。
【００３５】
次に、コヒーレントリード要求について説明する。例えば、第１のＣＰＵ１１があるアドレスのデータのリード要求をした場合に、そのアドレスのデータが第１のキャッシュメモリ３１に存在せずにミスヒットした場合を考える。その場合、メインメモリ５１内のそのアドレスのデータが最新のデータとは限らない。すなわち、第２のノード２がメインメイン５１のあるアドレスのデータを読み出し、そのデータを第２のキャッシュメモリ３２に書き込み、その後、ＣＰＵ１２がキャッシュメモリ３２内のそのデータを書き換える場合がある。その場合、第２のキャッシュメモリ３２内のそのアドレスのデータに対応するステータス３２は変更済み状態Ｍになる。この場合、第２のキャッシュメモリ３２内のデータが最新であり、メインメモリ５１内のデータとは一致しない。そこで、第１のノード１は、キャッシュコヒーレンシを保つため、一般的には全ての他のノード２〜６に、そのアドレスに対しコヒーレントリード要求を出力する。その場合、第２のノード２は、その入力したコヒーレントリード要求のアドレスのデータに対応するステータス３０２が変更済み状態Ｍであるので、第２のキャッシュメモリ３２内のそのアドレスの最新のデータをメインメモリ５１に書き戻し、第１のノード１は、メインメモリ５１内のそのアドレスの最新のデータを読み出し、キャッシュメモリ３１に書き込む。また、ノード３〜６は、その入力したコヒーレントリード要求のアドレスのデータがキャッシュメモリ３３〜３６に存在しないが、コヒーレントリード要求により各キャッシュメモリへのアクセスが生じ、その期間はＣＰＵからのアクセスが待たされる。上記のように、第１のノード１は、すべての他のノード２〜６に対して、オン状態のスイッチＳＷ１２〜ＳＷ１６を介して、同一のコヒーレントリード要求を出力する。この場合、全てのスイッチパスが占有されるため、他のＣＰＵ間のあるいはメインメモリとの通信が阻害され、バスがスイッチファブリック型であることの利点が半減し、処理システムの性能が低下してしまう。
【００３６】
本実施形態では、図１の履歴テーブル４１〜４６を設けることにより、第１のノード１は、すべての他のノード２〜６にコヒーレントリード要求を出力するのではなく、スイッチＳＷ１２のみオンにし、必要な１個の他のノード２に対してのみ出力することにより、スイッチＳＷ３４〜ＳＷ６７はフリーとなり、他のノード間、あるいはメインメモリとの通信が確保できること、またキャッシュメモリ３３〜３６に対しても全くアクセスしないため各ＣＰＵからキャッシュメモリへのアクセスを阻害することがないことによって、処理システムの性能を向上させる。
【００３７】
本実施形態での例を以下詳述する。図１の各履歴テーブル４１〜４６は図４の無効化履歴部と図５のコヒーレントリード履歴部よりなる。図４の無効化履歴部は、無効化履歴テーブルＩＨＴ、比較器４０４及び論理積（ＡＮＤ）回路４０５で構成される。タグ部４０１は図３のキャッシュメモリのアドレス３０１と同様に上位アドレスＡＤＤ２を記憶し、無効ビット４０２は“０”の時はこの無効化履歴テーブルＩＨＴのラインは無効であることを示し、“１”の時は有効であることを示す。ノード番号４０３はどのノードから無効化要求を受けたかを示し、ノード番号を記憶している。図５のコヒーレントリード履歴部は、コヒーレントリード履歴テーブルＲＨＴ、比較器５０４及び論理積（ＡＮＤ）回路５０５で構成される。タグ部５０１は図３のキャッシュメモリのアドレス３０１と同様に上位アドレスＡＤＤ２を記憶し、リードビット５０２は“０”の時はこのコヒーレントリード履歴テーブルＲＨＴのラインは無効であることを示し、“１”の時は有効であることを示す。ノード番号５０３はどのノードからコヒーレントリード要求を受けたかを示し、ノード番号を記憶している。各履歴テーブルは初期化時には無効、つまり無効ビット４０２及びリードビット５０２が“０”となっている。比較器５０４は、無効化履歴テーブルＲＨＴにより出力されたタグ５０１と上位アドレスＡＤＤ２とを比較し、両者が一致すれば「１」を出力し、両者が一致しなければ「０」を出力する。論理積回路５０５は、比較器５０４の出力値と、コヒーレントリード履歴テーブルＲＨＴにより出力されるリードビット５０２との論理積値を、リードステートＲＳとして出力する。
【００３８】
図１０は、コヒーレントリード履歴部の他の実施形態を示す図である。コヒーレントリード履歴部はタグ部９０１、ノードマップ部９０２、コヒーレントリード履歴テーブル、比較器９０４及び論理積（ＡＮＤ）回路９０５、論理和（ＯＲ）回路９０６で構成される。タグ部９０１は図３のキャッシュメモリのアドレス３０１と同様に上位アドレスＡＤＤ２を記憶し、ノードマップ部９０２は“０”の時はこのビット位置に相当するノードからコヒーレントリード要求は来ていないことを示し、“１”の時はこのビット位置に相当するノードからコヒーレントリード要求があったことを示す。論理和回路９０６はノードマップ部９０２の各有効ノードビットＲＮの論理和を出力し、どれかのノードビットが“１”であればその出力は“１”になる。タグ部９０１の出力と上位アドレスＡＤＤ２が比較器９０４で比較され、一致すれば、その出力は“１”となる。論理積回路９０５は、論理和回路９０６の出力と比較器９０４の出力との論理積値を、リードステートＲＳとして出力する。リードステートＲＳが“１”である時は、ノードマップ部９０２からの出力ノードビットが有効であることを示している。
【００３９】
図８及び図９は、動作前の各キャッシュメモリのステータス、無効化履歴テーブルＩＨＴ、コヒーレントリード履歴テーブルＲＨＴの状態から、読み出し／書き込み動作を行った場合のスヌーピング、データの流れを示すとともに、動作後の状態を表している。以下、本実施形態における重要な部分について、図１〜図５を参照しながら説明する。なお、下記のかっこ付き番号の説明は、図８及び図９の“説明”で示す番号に対応する。
【００４０】
（１）他ノードからインバリデート要求を受けた場合
第１のノード１において、ＣＰＵ１１から書き込み命令が実施されキャッシュメモリ３１のステータスが共有（Shared）であり、履歴テーブル４１内のＲＨＴ＝“０”の無効である場合、第１のノード１は各ノードへ無効化要求をブロードキャストする。もし第２のノード２内のキャッシュメモリ３２がデータを共有しており、Status=Sharedであると、キャッシュメモリ３２内のStatusを無効化（Invalidate）するとともに、履歴テーブル４２内の無効化履歴テーブルＩＨＴに対して、下位アドレスＡＤＤ１で選択したラインに上位アドレスＡＤＤ２をタグ部４０１へ、値「１」を無効ビット４０２へ、ノード番号４０３へノード番号“１”を含む無効化履歴情報を登録する。また、この例の場合、他のノード３〜６へ無効化要求はミスヒットとなるので、履歴テーブル４３〜４６内の無効化履歴テーブルへの書き込みは行わない。そして、キャッシュコントローラ２１はキャッシュメモリ３１のデータが書き換えるとともに、キャッシュメモリ３１内のStatusをModifiedに変更する。
【００４１】
（２）他ノードからコヒーレントリード要求を受けた場合
第１のＣＰＵ１１があるアドレスのデータのリード要求をした場合に、そのアドレスのデータが第１のキャッシュメモリ３１に存在せずにミスヒットし、履歴テーブル４１内の無効化履歴テーブルも無効ＩＳ＝０であった場合、コヒーレントリード要求を各ノードに発する。
【００４２】
(２−１)コヒーレントリード要求を受けた各ノード内のキャッシュメモリ３２〜３６のうちヒットしないものは、ミスヒットであり、コヒーレントリード履歴テーブルへのアクセスはしない。
【００４３】
（２−２）コヒーレントリード要求を受けた各キャッシュメモリ３２〜３６のうちどれかがヒットしたとき、例えばキャッシュメモリ３２がStatus＝Exclusiveでヒットすれば、キャッシュメモリ３２のStatusをSharedに変更し、履歴テーブル４２内のコヒーレントリード履歴テーブルに下位アドレスＡＤＤ１で以下の情報を書き込む。［１］タグ部５０１へ上位アドレスＡＤＤ２を、［２］リードビット部５０２に“１”を、［３］ノード番号部５０３にコヒーレントリード要求を発したノードの番号を書き込む。次に、要求ノードに対しヒットした旨を報告し、リードデータはメインメモリ５１より読み出され、要求ノードに送られる。要求側ノード内のキャッシュメモリのStatusはSharedになる。
【００４４】
（２−３）コヒーレントリード要求を受けた各キャッシュメモリ３２〜３６のうちどれかがヒットしたとき、例えばキャッシュメモリ３２がStatus＝Modifiedでヒットすれば、キャッシュメモリ３２のStatusをSharedに変更し、履歴テーブル４２内のコヒーレントリード履歴テーブルに下位アドレスＡＤＤ１で以下の情報を書き込む。［１］タグ部５０１へ上位アドレスＡＤＤ２を、［２］リードビット部５０２に“１”を、［３］ノード番号部５０３にコヒーレントリード要求を発したノードの番号を書き込む。次に、要求ノードに対しヒットした旨を報告し、キャッシュメモリ３２より読み出したデータはメインメモリ５１に書き戻すと共に、要求元ノードに送られる。要求元ノード内のキャッシュメモリのStatusもSharedになる。
【００４５】
（２−４）コヒーレントリード要求を受けた各キャッシュメモリ３２〜３６のうちどれかがヒットしたとき、例えばキャッシュメモリ３２及び３３がデータを共有していれば、両キャッシュメモリでStatus＝Sharedでヒットする。この場合、両履歴テーブル４２内のコヒーレントリード履歴テーブルに下位アドレスＡＤＤ１でリードヒット部５０２に対し“０”を書き込み無効に変更する。これは、図５では履歴テーブル内のコヒーレントリード履歴テーブル５０３には１つのノード番号しか記憶することができない、つまり、コヒーレントリード履歴テーブルが有効なときはコヒーレントリード要求は要求元のノードから他の１つノードにのみ発することなる。よって、３つ以上のノードでデータを共有し、共有しているどれか１つのノードより他のノードへ無効化要求を出す場合は、２つのノードへ要求を発しなければならないが、図５ではその機能はないので、ブロードキャストつまり全ノードに向けて発するようにしなければならない。よって、コヒーレントリード履歴テーブルを無効化するように書き込みを行う。勿論、コヒーレントリード履歴テーブルを拡張し、２つのノード番号を記憶できるようにすれば、３つのノードでデータを共有する場合でも、本実施形態の効力を発揮することができる。さらに、それを拡張したのが図１０の実施形態である。図１０の例では、コヒーレントリード要求を発した全てのノードを記憶するため、コヒーレントリード履歴テーブルＲＨＴにノードマップ部９０２を設け、この各ビットが各ノードと一対一で対応しており、２つ以上のノードからコヒーレントリード要求を受けてもどのノードから要求をうけたか全て記憶することができる。次に、要求ノードに対しヒットした旨を報告し、リードデータはメインメモリ５１より読み出され、要求ノードに送られる。要求側ノード内のキャッシュメモリのStatusはSharedになる。
【００４６】
（３）ノードがコヒーレントリード要求を発する場合
ノード１内のＣＰＵ１１がキャッシュメモリ３１を読み出したとき、キャッシュメモリ３１内に必要なデータが無い、つまりキャッシュメモリのStatusが無効あるいはミスヒットであるとき、キャッシュコントローラ２１は履歴テーブル内の無効化テーブルＩＨＴを、キャッシュメモリ３１をアクセスしたのと同じアドレスで読み出しを行う。無効化履歴テーブルＩＨＴは、下位アドレスＡＤＤ１に対応する上位アドレスを示すタグ部４０１、無効ビット４０２及びノード番号４０３を出力する。無効化履歴テーブルＩＨＴに無効化履歴情報が登録されていれば、無効ビット４０２は値「１」である。ノード番号４０３は、例えば第２のノード２の番号がノード番号ＩＮとして出力される。比較器４０４は、無効化履歴テーブルＩＨＴにより出力されたタグ部４０１と上位アドレスＡＤＤ２とを比較し、両者が一致すれば「１」を出力し、両者が一致しなければ「０」を出力する。論理積回路４０５は、比較器４０４の出力値と、無効化履歴テーブルＩＨＴにより出力される無効ビット４０２との論理積値を、無効ステートＩＳとして出力する。
【００４７】
無効化履歴テーブルＩＨＴにそのアドレスの無効化履歴情報が登録されている場合には、無効ステートＩＳが「１」になり、登録されているノード番号ＩＮが有効と判断される。これに対し、無効化履歴テーブルＩＨＴにそのアドレスの無効化履歴情報が登録されていない場合には、無効ステートＩＳが「０」になる。
【００４８】
キャッシュコントローラ２１は、履歴テーブルの出力、無効ステートＩＳが“１”であった場合、ノード番号ＩＮが示す番号、例えば“２”であれば２番のノードに対してのみ、そのアドレスを含むコヒーレントリード要求を出力するべく、スイッチＳＷ１２のみオンにし、コヒーレントリードを実行する。よって、全てのスイッチパスがこのコヒーレントリードのみに占有されなくなり、処理システムの性能を向上させることができる。また、必要なデータを有していないノード内のキャッシュメモリに対するコヒーレントリードが発生しなくなり、ＣＰＵのアクセスを遅延させる原因を減少させることができる。
【００４９】
なぜノード２のみにコヒーレントリード要求を出せば良いのかを説明する。ノード１及び２がデータを共有していた場合、ノード２がこのデータを書き換えようとすると、他のノード１、３〜６へ無効化要求を発する。ノード１内ではこの無効化要求がヒットするので、（１）で述べたように、当該キャッシュラインを無効化するとともに、無効化履歴テーブルにこの情報の無効化アドレス及びノード番号を書き込んでおく。その後、ノード１内で当該キャッシュラインを読み出そうとすると、既に無効化されているのでキャッシュミスとなるが、このキャッシュラインを無効化したノードは、無効化履歴テーブルを読み出せば、１番のノードであることがわかる。つまり過去にデータを共有していたノード１が、今必要としているデータを有している可能性が高いことがわかる。よって１番のノードにのみコヒーレントリード要求を発するだけでよいことがわかる。もしノード１にデータが無い場合は、他の全てのノードへコヒーレントリード要求を発する。
【００５０】
キャッシュコントローラ２１は、履歴テーブルの出力の無効ステートＩＳが“０”であった場合には、すべての他のノード２〜６にそのアドレスを含むコヒーレントリード要求を出力する。
【００５１】
（４）ノードが無効化要求を出す場合
例えば、ノード１とノード２があるアドレスのデータを共有していて、ノード１内のＣＰＵ１１が当該アドレスにデータの書き込みを実行しようとすると、キャッシュメモリ３１を読み出し、Sharedでヒットする。その場合、キャッシュコントローラ２１は履歴テーブル４１内のコヒーレントリード履歴テーブルを、キャッシュメモリをアクセスした同じアドレスで読み出す。コヒーレントリード履歴テーブルの出力であるリードビット５０２が“１”の有効であり、タグ部５０１のデータと入力された上位アドレスＡＤＤ２が一致するとヒット（ＲＳ＝“１”）となり、ノード番号部５０３のデータＲＮが有効であることを示す。ＲＳ＝“１”の有効であるときは、キャッシュコントローラ２１は、データＲＮで示す番号＝２のノードにのみ無効化要求を発すべく、スイッチＳＷ１２のみオンにし、無効化要求を発行する。よって、全てのスイッチパスがこの無効化要求のみに占有されなくなり、処理システムの性能を向上させることができる。無効化要求を受けたノード２内では当該キャッシュラインを無効化すると共に無効化履歴テーブルに対してその情報を書き込む。また、データを共有していないノード内のキャッシュメモリに対する無効化のためのアクセスが発生しなくなり、ＣＰＵのアクセスを遅延させる原因を減少させることができる。無効化を実施後、ノード１内でキャッシュメモリ３１のデータを書き換え、StatusをModifiedに変更する。
【００５２】
なぜノード２のみに無効化要求を発すれば良いかを説明する。この例の前提として、ノード１とノード２がデータを共有と書いたが、共有する前では、例えばまずノード１内のキャッシュメモリ３１があるアドレスのデータを既にメインメモリ５１から読み込んできており、その後、ノード２で同一アドレスのデータが必要になると、ノード２はコヒーレントリード要求でデータを取り込むが、その時、ノード１はこのコヒーレントリードに応答して、キャッシュメモリ３１のStatusをSharedにするとともに、履歴テーブル４１内のコヒーレントリード履歴テーブルに対し、（２）で説明したように当該アドレス及びノード番号“２”の情報を書き込む。つまり、ノード１内では当該アドレスのデータを、どのノード２と共有しているのがわかっている。よって、ノード１が当該アドレスに対し無効化要求発する場合、ノード２に対してのみ発すれば良いことがわかる。
【００５３】
コヒーレントリード履歴テーブルの例として図１０を用いて説明すると、例えば、ノード１、２、３があるアドレスのデータを共有していて、ノード１内のＣＰＵ１１が当該アドレスにデータの書き込みを実行しようとすると、キャッシュメモリ３１を読み出し、Sharedでヒットする。その場合、キャッシュコントローラ２１は履歴テーブル４１内のコヒーレントリード履歴テーブルを、キャッシュメモリをアクセスした同じアドレスで読み出す。コヒーレントリード履歴テーブルの出力であるタグ部５０１のデータと入力された上位アドレスＡＤＤ２が一致し、ノードビット部のどれかが“１”であればヒット（ＲＳ＝“１”）となり、ノードビット部５０２のデータＲＮが有効であることを示す。ＲＳ＝“１”の有効であるときは、キャッシュコントローラ２１は、データＲＮで示すビット＝２と３のノードにのみ無効化要求を発すべく、スイッチＳＷ１２及びＳＷ１３のみオンにし、無効化要求を発行する。
【００５４】
キャッシュコントローラ２１は履歴テーブル４１の出力ＲＳ＝“０”である時はコヒーレントリード要求を全てのノードへ発する。
【００５５】
図６は、ＣＰＵがキャッシュリード・ミスヒット時の処理を示すフローチャートである。キャッシュヒットすればキャッシュメモリの内容をＣＰＵが読み込んで終了である。キャッシュミスヒット時、第２のノード２の処理を例に説明するが、他のノード１，３〜６も第２のノード２と同様の処理を行う。第２のＣＰＵ１２があるアドレスのデータのリード要求をした場合に、そのアドレスのデータが第２のキャッシュメモリ３２に存在せずにミスヒットした場合、図６の処理を行う。
【００５６】
ステップＳ６０１では、第２のキャッシュコントローラ２２は、上記のリード要求のアドレスのうちの下位アドレスＡＤＤ１を入力アドレスとして自己の無効化履歴テーブルＩＨＴを読み出す。また上位アドレスＡＤＤ２は自己の比較器４０４の片側の入力となる。無効化履歴テーブルＩＨＴは、下位アドレスＡＤＤ１を入力アドレスとして、タグ部４０１、無効ビット４０２及びノード番号４０３を出力する。無効化履歴テーブルＩＨＴにそのアドレスの無効化履歴情報が登録されている場合には、無効ステートＩＳが「１」になり、登録されているノード番号ＩＮが有効となる。ステップＳ６０２に進む。これに対し、無効化履歴テーブルＩＨＴにそのアドレスの無効化履歴情報が登録されていない場合には、無効ステートＩＳが「０」になり、ステップＳ６０４に進む。
【００５７】
ステップＳ６０２では、第２のキャッシュコントローラ２２は、ノード番号ＩＮが示す例えば第１のノード１にのみ、ユニキャストで、コヒーレントリード要求を出力する。
【００５８】
次に、ステップＳ６０３では、コヒーレントリード要求を受けたノード１１においてキャッシュメモリがミスヒットである場合には、ノード２内のキャッシュコントローラ２２はノード１内に必要とするデータあろうと判断したが、そこにはデータが無かったことになる。このようなことは、キャッシュメモリ３１の容量が小さいため他のアドレスのデータが必要となり、書き換えられてしまった場合に発生する。この場合、ステップＳ６０４に進む。また、キャッシュコントローラ２２は、ノード１からの回答がキャッシュヒットであった場合には、ステップＳ６０８に進む。
【００５９】
ステップＳ６０４では、キャッシュコントローラ２２は、すべての他のノード１，３〜６に含むコヒーレントリード要求を、ブロードキャストで出力する。なお、上記のステップＳ６０２を通過した場合には、ステップＳ６０２で、既にコヒーレントリード要求を出力したノードについては、再度、コヒーレントリード要求を出力しなくてよい。
【００６０】
次に、ステップＳ６０５では、キャッシュコントローラ２２が発したコヒーレントリード要求に対し、他のノード１，３〜６全てがキャッシュミスヒットである場合には、ステップＳ６０６に進む。他のノード１，３〜６の内１つでもキャッシュヒットがあれば、ステップＳ６０８に進む。
【００６１】
ステップＳ６０６では、ノード２が必要とするデータは他のノード内に無いことわかったので、要求元のキャッシュコントローラ２２は、そのアドレスのデータをメインメモリコントローラ５２を通じてメインメモリ５１から読み出す。
【００６２】
次に、ステップＳ６０７では、要求元のキャッシュコントローラ２２は、メインメモリから読み出したデータをそのアドレスに対応するキャッシュメモリ３２にデータを書き込むとともにＣＰＵ１２はそのデータを取り込む。キャッシュメモリ３２のステータスを排他状態Ｅする。以上で、リード処理が終了する。
【００６３】
ステップＳ６０８以下では、ノード２よりのコヒーレントリード要求に対し、キャッシュヒットしたノードのみが対象となる。ヒットしなったノードは終了となる。
【００６４】
ステップＳ６０８では、キャッシュコントローラ２１，２３〜２６は、それぞれ、そのステータス３０２が排他状態Ｅである場合にはステップＳ６０９に進み、そのステータス３０２が共有状態Ｓである場合にはステップＳ６１１に進み、そのステータス３０２が変更済み状態Ｍである場合にはステップＳ６１４に進む。
【００６５】
ステップＳ６０９では、ノード１，３〜６のキャッシュコントローラ２１，２３〜２６は、キャッシュメモリ３１，３３〜３６内のコヒーレントリード要求のあったアドレスに対応するキャッシュラインのステータス３０２を共有状態Ｓに変更する。
【００６６】
次に、ステップＳ６１０では、ノード１，３〜６のキャッシュコントローラ２１，２３〜２６は、コヒーレントリード履歴テーブルＲＨＴに対して、コヒーレントリード要求を発したノード２のアドレスの下位アドレスＡＤＤ１を入力アドレスとして、上位アドレス（タグ）５０１、値「１」のリードビット５０２、及び要求元のノード２のノード番号５０３を登録する。その後、ステップＳ６１２に進む。
【００６７】
ステップＳ６１１では、ノード１，３〜６のキャッシュコントローラ２１，２３〜２６は、コヒーレントリード履歴テーブルＲＨＴに対して、コヒーレントリード要求を発したノード２のアドレスの下位アドレスＡＤＤ１を入力アドレスとしてリードビット５０２を「０」にして無効にする。その後、ステップＳ６１２に進む。
【００６８】
ステップＳ６１２では、要求元のキャッシュコントローラ２２は、リードしようとする最新のデータがメインメモリにあると判断し、必要とするアドレスのデータをメインメモリ５１から読み出す。その後、ステップＳ６１３に進む。
【００６９】
ステップＳ６１４では、ノード１，３〜６のキャッシュコントローラ２１，２３〜２６は、キャッシュメモリ３１，３３〜３６内のコヒーレントリード要求のあったアドレスに対応するキャッシュラインのステータス３０２を共有状態Ｓに変更する。
【００７０】
次に、ステップＳ６１５では、ノード１，３〜６のキャッシュコントローラ２１，２３〜２６は、コヒーレントリード履歴テーブルＲＨＴに対して、コヒーレントリード要求を発したノード２のアドレスの下位アドレスＡＤＤ１を入力アドレスとして、上位アドレス（タグ）５０１、値「１」のリードビット５０２、及び要求元のノード２のノード番号５０３を登録する。
【００７１】
次に、ステップＳ６１６では、コヒーレントリードされたキャッシュメモリのステータスがＭ、つまり最新のデータがキャッシュメモリ３１，３３〜３６のいずれかに存在することを意味するので、そのデータが存在するノード１，３〜６のキャッシュコントローラ２１，２３〜２６は、キャッシュメモリ３１，３３〜３６か読み出したデータを、メインメモリ５１に書き戻す。それとともに、そのデータを要求元のノード２に返送する。その後、ステップＳ６１３に進む。
【００７２】
ステップＳ６１３では、要求元のキャッシュコントローラ２２は、取得した最新のデータを、キャッシュメモリ３２に書き込む。それと同時に、ＣＰＵ１２は、そのデータを取り込む。そして当該のキャッシュラインのステータス３０２は共有状態Ｓになる。以上で、リード処理が終了する。
【００７３】
図７は、第１のノード１の書き込み処理を示すフローチャートである。なお、このフローチャートはＣＰＵがライトしようとしたアドレスに対しキャッシュヒットした時のみの図である。以下、ノード１の処理を例に説明するが、他のノード２〜６も第１のノード１と同様の処理を行う。第１のＣＰＵ１１が自己のキャッシュメモリ３１内のあるアドレスのデータのライト要求をした場合、図７の処理を行う。
【００７４】
ステップＳ７０１では、キャッシュコントローラ２１は、自己のキャッシュメモリ３１内の書き込みしようとしたアドレスがキャッシュラインにヒットし対応するステータス３０２が変更済み状態Ｍ又は排他状態Ｅである場合にはステップＳ７０５に進み、共有状態Ｓである場合にはステップＳ７０２に進む。なお、そのステータス３０２が無効状態Ｉである、あるいはミスヒットの場合には、図６で示すリードミスの処理を行い、その後図７の処理を行う。
【００７５】
ステップＳ７０２では、キャッシュコントローラ２１は、上記のライト要求のアドレスのうちの下位アドレスＡＤＤ１をアドレス入力としてコヒーレントリード履歴テーブルＲＨＴに読み出し、リードビット５０２が“１”の有効であり、上位アドレスＡＤＤ２とタグ部５０１を比較器５０４で比較し、一致すればＲＳ＝１となり、ノード番号５０３の出力ＲＮが有効であることを示す。つまり、コヒーレントリード履歴テーブルＲＨＴにそのアドレスのコヒーレントリード履歴情報が登録されている場合には、リードステートＲＳが「１」になり、登録されているノード番号ＲＮが有効となり、ステップＳ７０３に進む。これに対し、コヒーレントリード履歴テーブルＲＨＴにそのアドレスのコヒーレントリード履歴情報が登録されていない場合には、リードステートＲＳが「０」になり、ステップＳ７０６に進む。
【００７６】
ステップＳ７０３では、キャッシュコントローラ２１は、ノード番号ＲＮが示す例えば第２のノード２にのみに対し、ユニキャストで、無効化要求を出力する。その後、ステップＳ７０４に進む。
【００７７】
ステップＳ７０６では、キャッシュコントローラ２１は、すべての他のノード２〜６に無効化要求を、ブロードキャストで出力する。その後、ステップＳ７０４に進む。
【００７８】
ステップＳ７０４では、無効化要求を出したキャッシュコントローラ２１に対しキャッシュヒットしなかったノードでは何もせず、ステップＳ７０５に進み、ヒットしたノード、例えば第２のキャッシュコントローラ２２では、ステップＳ７０７に進む。
【００７９】
ステップＳ７０７では、ノード２〜６のキャッシュコントローラ２２〜２６は、自己のキャッシュメモリ３２〜３６内の無効化要求のあったキャッシュラインに対応するステータス３０２を無効状態Ｉに変更する。
【００８０】
次に、ステップＳ７０８では、ノード２〜６のキャッシュコントローラ２２〜２６は、自己の無効化履歴テーブルＩＨＴに対して、上記の無効化要求のアドレスの下位アドレスＡＤＤ１をアドレス入力として、上位アドレス（タグ）４０１、値「１」の無効ビット４０２及び要求元の第１のノード１をノード番号部４０３に登録する。その後、ステップＳ７０５に進む。
【００８１】
ステップＳ７０５では、要求元の第１のＣＰＵ１１は、自己のキャシュメモリ３１に対して、上記のライト要求に従い、そのデータをデータ部３０３に書き込むとともに、変更済み状態Ｍにステータス３０２を変更する。以上で、ライト処理が終了する。
【００８２】
なお、図１では、スイッチＳＷ１２〜ＳＷ６７を用いた相互結合網を例に説明したが、リングバスや共通バスといった他の相互結合網でもよい。また、本実施形態ではキャッシュメモリの構成がダイレクトマップ方式としたがセットアソシアティブ方式とした場合は、そのウェイ数に応じた履歴テーブルを用意すれば対応できる。また、書き込みはライトバック方式としたがライトスルー方式でも問題ない。また、本実施形態での図３のステータス３０２は、無効状態Ｉ、共有状態Ｓ、排他状態Ｅ及び変更済み状態Ｍのうちのいずれを示す、いわゆるＭＥＳＩ型の例で説明したが、ＭＯＥＳＩといった他の方式ものでもよい。
【００８３】
本実施形態では、複数のＣＰＵが相互に関連して情報処理を行う処理システムにおいて、スヌープ要求を受けるべきＣＰＵを特定化することにより、複数のＣＰＵが無条件にすべての他のＣＰＵにスヌープ要求を出力することが少なくなり、相互結合網上のデータ輻輳が低下することで見かけ上相互結合網の性能が向上する。また、キャッシュメモリは、スヌープ要求を受ける回数が減り、本来のＣＰＵからの要求に専念することができ、処理性能向上に寄与する。
【００８４】
上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００８５】
１〜６  ノード
１１〜１６  中央演算処理装置
２１〜２６  キャッシュコントローラ
３１〜３６  キャッシュメモリ
４１〜４６  履歴テーブル
５１  メインメモリ
５２  メインメモリコントローラ
【図１】
2014191622.tif 000003
【図２】
2014191622.tif 000004
【図３】
2014191622.tif 000005
【図４】
2014191622.tif 000006
【図５】
2014191622.tif 000007
【図６】
2014191622.tif 000008
【図７】
2014191622.tif 000009
【図８】
2014191622.tif 000010
【図９】
2014191622.tif 000011
【図１０】
2014191622.tif 000012