(57)【特許請求の範囲】
【請求項１】
それぞれキャッシュメモリを備えた複数の演算処理装置のうち、主記憶装置に接続された演算処理装置において、
前記複数の演算処理装置を前記複数の演算処理装置の総数に基づいて起動時に設定された設定数毎にグループ化して得られる複数の演算処理装置グループの各演算処理装置グループについて、対応する演算処理装置グループに属するいずれかの演算処理装置が備えるキャッシュメモリに前記主記憶装置に格納されたデータと同一のデータが保持されているか否かを示す存在情報を、前記主記憶装置に書き込む制御部
を有することを特徴とする演算処理装置。
【請求項２】
前記制御部はさらに、
前記複数の演算処理装置のうち、前記主記憶装置に格納されたデータと同一のデータを自装置のキャッシュメモリに保持する演算処理装置の数を表示する計数情報を、前記主記憶装置に書込むことを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記制御部はさらに、
前記複数の他の演算処理装置のいずれかから排他的にデータを保持する旨の要求を受けた場合、前記複数の他の演算処理装置のうち、前記要求に対応するデータと同一のデータを自装置のキャッシュメモリに保持する演算処理装置に対し、前記同一のデータの無効化と前記同一のデータを保持していた旨の応答とを要求し、受信した応答の数と前記主記憶装置に書き込んだ計数情報とが一致しないとき、前記主記憶装置に書き込んだ存在情報と計数情報が異常であると判定することを特徴とする請求項２記載の演算処理装置。
【請求項４】
それぞれキャッシュメモリを備えた複数の演算処理装置のうち、主記憶装置に接続された演算処理装置の制御方法において、
前記複数の演算処理装置を前記複数の演算処理装置の総数に基づいて起動時に設定された設定数毎にグループ化して得られる複数の演算処理装置グループの各演算処理装置グループについて、対応する演算処理装置グループに属するいずれかの演算処理装置が備えるキャッシュメモリに前記主記憶装置に格納されたデータと同一のデータが保持されているか否かを示す存在情報を、前記主記憶装置に書き込むことを特徴とする演算処理装置の制御方法。
【請求項５】
データを記憶する主記憶装置と、それぞれキャッシュメモリを備えた複数の演算処理装置とを備える情報処理装置において、
前記複数の演算処理装置のうち前記主記憶装置に接続された演算処理装置は、
前記複数の演算処理装置を前記複数の演算処理装置の総数に基づいて起動時に設定された設定数毎にグループ化して得られる複数の演算処理装置グループの各演算処理装置グループについて、対応する演算処理装置グループに属するいずれかの演算処理装置が備えるキャッシュメモリに前記主記憶装置に格納されたデータと同一のデータが保持されているか否かを示す存在情報を、前記主記憶装置に書き込む制御部
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、演算処理装置の制御方法及び情報処理装置に関する。
【背景技術】
【０００２】
従来、ＮＵＭＡ（Non-Uniform  Memory  Access）の技術を用いたサーバ等の情報処理装置が知られている。ＮＵＭＡの技術を用いた情報処理装置では、例えば、複数の演算処理装置（以下、ＣＰＵ（Central  Processing  Unit）と記す）それぞれに主記憶装置としてのメインメモリが接続され、各メインメモリは、複数のＣＰＵ間で共有される。
【０００３】
このＮＵＭＡの技術を用いた情報処理装置では、各ＣＰＵは、例えば、ディレクトリ方式で各ＣＰＵに内蔵されるキャッシュメモリ間の整合性を維持するように、キャッシュコヒーレンスを制御する。ディレクトリ方式では、各ＣＰＵは、自身と接続するメインメモリであるローカルメモリ上のデータブロック毎に、各データブロックの所在を示すディレクトリの状態を示すディレクトリステートを管理する。
【０００４】
例えば、各ディレクトリの状態を示すディレクトリステートには、ＩＮＶ（Invalid）、ＳＨ（Shared）、ＥＸ（Exclusive）がある。ここで、ＩＮＶは、他のＣＰＵが有するキャッシュメモリに保持されていないことを示し、ＳＨは、他のＣＰＵのキャッシュメモリにクリーンな状態で保持されていることを示し、ＥＸは、単一のＣＰＵのキャッシュメモリに保持され、ダーティな可能性があることを示す。
【０００５】
そして、あるＣＰＵがキャッシュミスを起こした場合、キャッシュミスが発生したデータを所有するメインメモリに接続されたＣＰＵにデータを要求する。なお、以下の説明では、データ要求元のＣＰＵをＬ（Local）−ＣＰＵと記載し、キャッシュミスの発生により要求されたデータを所有するメインメモリに接続されたＣＰＵをＨ（Home）−ＣＰＵと記載し、メインメモリを単に「メモリ」と記載する。
【０００６】
Ｈ−ＣＰＵは、Ｌ−ＣＰＵから要求されたアドレスのデータがどのプロセサのキャッシュメモリにも保持されていない場合は、自身に接続するメモリからデータを読出して要求元に転送する。また、Ｈ−ＣＰＵは、この処理と同時に、このアドレスのキャッシュラインがＬ−ＣＰＵに保持されていることを示すディレクトリステートを自身に接続するメモリに記憶する。
【０００７】
ところで、上記のディレクトリステートのみを管理するキャッシュプロトコルでは、Ｈ−ＣＰＵは、共有型で持ち出されたデータに対して無効化処理が発生した場合、システム内の全ＣＰＵのキャッシュメモリに対して無効化要求をブロードキャストする。このような場合、無駄なデータ通信が発生するので、通信量が増加する。
【０００８】
このようなことから、Ｈ−ＣＰＵは、ディレクトリステート以外に共有型で持ち出されたデータ、すなわち他のＣＰＵと共有されているデータを内蔵するキャッシュメモリに保持する他ＣＰＵの位置を示すプレゼンスビットを管理する場合がある。そして、Ｈ−ＣＰＵは、あるデータブロックへの無効化処理が発生した場合に、プレゼンスビットを用いて他のＣＰＵとの共有データをキャッシュメモリ上に保持するＣＰＵにのみ無効化要求を発行する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００２−３０４３２８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述した従来の技術では、演算処理装置数の増加に応じてディレクトリ情報量が増加するという課題がある。
【００１１】
近年、情報処理装置に対する性能要件からＣＰＵノード数を、例えば１２８に拡張した場合、ＣＰＵノード数に対応するビット数をプレゼンスビットに使用するため、プレゼンスビットが１２８ビットになり、ディレクトリ情報量が増加する。
【００１２】
１つの側面では、本発明は、演算処理装置数が増加してもディレクトリ情報量の増加を抑制することができる演算処理装置、演算処理装置の制御方法及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
第１の案では、それぞれキャシュメモリを備えた複数の演算処理装置のうち、主記憶装置に接続された演算処理装置は、複数の演算処理装置を複数の演算処理装置の総数に基づいて起動時に設定された設定数毎にグループ化して得られる複数の演算処理装置グループの各演算処理装置グループについて、対応する演算処理装置グループに属するいずれかの演算処理装置が備えるキャシュメモリに主記憶装置に格納されたデータと同一のデータが保持されているか否かを示す存在情報を、主記憶装置に書き込む。
【発明の効果】
【００１４】
演算処理装置数が増加してもディレクトリ情報量の増加を抑制することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施例１に係る情報処理システムの構成の一例を示す図である。
【図２】図２は、実施例１に係るＳＢの構成の一例を示す図である。
【図３】図３は、実施例１に係るＣＰＵの構成の一例を示す図である。
【図４】図４は、実施例１に係るコヒーレント制御部の構成の一例を示す図である。
【図５】図５は、実施例１に係るディレクトリ検査部の構成の一例を示す図である。
【図６】図６は、実施例１に係る動作判定部の構成の一例を示す図である。
【図７】図７は、メモリ上におけるディレクトリ情報のマッピングの一例を示す図である。
【図８】図８は、ディレクトリ情報のフォーマットの一例を示す図である。
【図９】図９は、動作判定部による命令フェッチリクエスト受信時のディレクトリ情報の更新処理の一例を示す図である。
【図１０】図１０は、動作判定部による排他型フェッチリクエスト受信時のディレクトリ情報の更新処理の一例を示す図である。
【図１１】図１１は、命令フェッチアクセス時の処理動作の一例を示す図である。
【図１２】図１２は、命令フェッチアクセス時の処理動作の一例を示す図である。
【図１３】図１３は、命令フェッチアクセス時の処理動作の一例を示す図である。
【図１４】図１４は、排他型フェッチアクセス時の処理動作の一例を示す図である。
【図１５】図１５は、排他型フェッチアクセス時の処理動作の一例を示す図である。
【図１６】図１６は、排他型フェッチアクセス時の処理動作の一例を示す図である。
【図１７】図１７は、ディレクトリ情報が失われた場合の復旧処理の処理動作の一例を示す図である。
【図１８】図１８は、ディレクトリ情報が失われた場合の復旧処理の処理動作の一例を示す図である。
【図１９】図１９は、実施例１に係る動作判定部による排他型フェッチアクセスのディレクトリ検査処理の処理手順を説明するフローチャートである。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する演算処理装置、演算処理装置の制御方法及び情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１７】
［実施例１に係る情報処理システムの構成］
図１を用いて実施例１に係る情報処理システムの構成について説明する。図１は、実施例１に係る情報処理システムの構成の一例を示す図である。図１に示すように、実施例１に係る情報処理システム１は、データ転送装置としてのＸＢ（クロスバスイッチ）２ａとＸＢ２ｂと、処理装置としてのＳＢ（システムボード）３ａ〜ＳＢ３ｈとを有する。なお、図１に示すクロスバスイッチおよびシステムボードの数はあくまで例示であり、これに限定されるものではない。
【００１８】
ＸＢ２ａは、各ＳＢ３ａ〜３ｈ間で転送されるデータの経路を動的に選択するデータ転送装置としてのスイッチである。ここで、データには、プログラムや演算処理結果などが含まれる。なお、ＸＢ２ｂの構成は、ＸＢ２ａと同様であるので、詳細な説明は省略する。また、以下の説明では、ＸＢ２ａ〜ＸＢ２ｂを一般化してＸＢ２と称して適宜説明する。
【００１９】
ＳＢ３ａは、ＣＰＵとメモリとを有し、各種演算処理を実行する。なお、ＳＢ３ｂからＳＢ３ｈの構成は、ＳＢ３ａと同様であるので、詳細な説明は省略する。また、以下の説明では、ＳＢ３ａ〜ＳＢ３ｈを一般化してＳＢ３と称して説明する。
【００２０】
［実施例１に係るＳＢの構成］
次に、図２を用いて、ＳＢの構成例について説明する。図２は、実施例１に係るＳＢの構成の一例を示す図である。図２に示す例では、ＳＢ３は、メモリ１０ａ〜メモリ１０ｄと、ＣＰＵ２０ａ〜ＣＰＵ２０ｄとを有する。各ＣＰＵ２０ａ〜ＣＰＵ２０ｄは、相互に接続されており、本実施の形態で開示する演算処理装置である。また、ＣＰＵ２０ａ〜ＣＰＵ２０ｄは、それぞれメモリ１０ａ〜メモリ１０ｄと接続される。
【００２１】
メモリ１０ａは、例えば、データを記憶するＲＡＭ（Random  Access  Memory）である。また、メモリ１０ａ上には、要求されたアドレスのデータがどのＣＰＵのキャッシュメモリに保持されているかを示すディレクトリ情報がマッピングされる。
【００２２】
ディレクトリ情報には、「Ｒ−ＩＮＶ（Invalid）」、「Ｒ−ＳＨ（Shared）」、「Ｒ−ＥＸ（Exclusive）」がある。ここで、「Ｒ−ＩＮＶ」は、データが他のＣＰＵのキャッシュメモリに保持されていないことを示す。また、「Ｒ−ＳＨ」は、データが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す。そして、「Ｒ−ＥＸ」は、データが単一のＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性があることを示す。
【００２３】
また、ディレクトリ情報は、このディレクトリ情報を有するメモリに接続するＣＰＵにより管理される。なお、ディレクトリ情報については、図８を用いて後述する。なお、メモリ１０ａ〜メモリ１０ｄは、同様の構成を有するので、以下の説明では、メモリ１０ａ〜メモリ１０ｄを一般化してメモリ１０と称して適宜説明する。
【００２４】
ＣＰＵ２０ａは、メインメモリであるメモリ１０ａに格納されたデータを取得し、また、他のＣＰＵ２０ｂ〜ＣＰＵ２０ｄを介して、各メモリ１０ｂ〜１０ｄに格納されたデータを取得する。また、ＣＰＵ２０ａ〜ＣＰＵ２０ｄは、ＸＢ２ａと接続されており、ＸＢ２ａに接続された図示しないＸＢ２ｂと接続されたＳＢ３が有するメモリに格納されたデータを取得する。そして、ＣＰＵ２０ａは、メモリから読出したデータを用いて、演算処理を実行する。なお、ＣＰＵ２０ａ〜ＣＰＵ２０ｄは、同様の構成を有するので、以下の説明では、ＣＰＵ２０ａ〜ＣＰＵ２０ｄを一般化してＣＰＵ２０と称して適宜説明する。また、ＣＰＵ２０の詳細な構成については、図３を用いて後述する。
【００２５】
また、以下の説明では、データの要求元であるＣＰＵのことをＬ（Local）−ＣＰＵと称し、Ｌ−ＣＰＵが要求するデータをメモリに有するＣＰＵのことをＨ（Home）−ＣＰＵと称する。また、Ｌ−ＣＰＵが要求するデータをキャッシュに所有するＣＰＵのことをＲ（Remote）−ＣＰＵと称する。また、以下の説明では、Ｌ−ＣＰＵがＨ−ＣＰＵに対して発行する要求のことを「リクエスト」と適宜記載する。
【００２６】
このような、データを記憶するメモリ１０に接続されたＣＰＵ２０は、データの一部を自身が内蔵するキャッシュメモリに保持する。そして、ＣＰＵ２０は、メモリ１０が記憶するデータと同一のデータブロックを保持するキャッシュメモリに対応するＣＰＵの有無を所定数のＣＰＵ毎に表示する存在情報を含むディレクトリ情報を、メモリ１０に書込む。
【００２７】
［実施例１に係るＣＰＵの構成］
次に、図３を用いて、ＣＰＵの構成例について説明する。図３は、実施例１に係るＣＰＵの構成の一例を示す図である。図３に示す例では、ＣＰＵ２０は、通信制御部２１、コア２２ａ〜コア２２ｆ、Ｌ２キャッシュ制御部２３、メモリ制御部２４、及びコヒーレント制御部２５を有する。なお、ＣＰＵ２０が有するコアの数は、図示された数に限定されるものではない。
【００２８】
通信制御部２１は、ＣＰＵ２０と他のＣＰＵ２０およびＸＢ２との間の通信を制御する。例えば、通信制御部２１は、データのフェッチアクセスを要求するコマンドをＬ２キャッシュ制御部２３から受付け、受付けたコマンドをＨ−ＣＰＵに送信する。また、通信制御部２１は、Ｈ−ＣＰＵやＲ−ＣＰＵからデータやコマンドを受信し、受信したデータやコマンドをＬ２キャッシュ制御部２３に出力する。
【００２９】
また、通信制御部２１は、Ｌ−ＣＰＵからメモリ１０に格納されたデータに対するリードを要求するコマンドを受信し、受信したコマンドをコヒーレント制御部２５に出力する。また、通信制御部２１は、コヒーレント制御部２５から取得したデータやコマンドを他のＣＰＵへ送信する。
【００３０】
コア２２ａは、Ｌ１キャッシュ２２０ａを有し、Ｌ１キャッシュ２２０ａが保持するＬ１データを用いて、各種演算処理を実行するＣＰＵ２０のプロセッサコアである。また、Ｌ１キャッシュ２２０ａに保持されるデータには、データの状態を示すＬ１タグが付加される。なお、Ｌ１キャッシュ２２０ａに保持されるデータのことをＬ１データと称する。また、Ｌ１キャッシュ２２０ａに保持されるデータの状態には、データが無効であることを示す「Ｉｎｖａｌｉｄ（Ｉ）」、データが他のＣＰＵのキャッシュメモリと共有される共有型であり、かつ保持されるデータがクリーンな状態であることを示す「Ｓｈａｒｅｄ（Ｓ）」が含まれる。また、キャッシュデータの状態には、データが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがクリーンな状態であることを示す「Ｅｘｃｌｕｓｉｖｅ（Ｅ）」、データが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがダーティな状態であることを示す「Ｍｏｄｉｆｉｅｄ（Ｍ）」が含まれる。なお、以下の説明では、キャッシュデータの状態を「キャッシュステート」と適宜記載する。
【００３１】
また、コア２２ａは、Ｌ１キャッシュにデータが保持されていないことによりキャッシュミスが発生した場合には、キャッシュミスが発生したデータをＬ２キャッシュ制御部２３に要求する。なお、コア２２ａ〜コア２２ｆの構成は、同様であるので、詳細な説明は省略する。また、以下の説明では、コア２２ａ〜コア２２ｆを一般化してコア２２と称して適宜説明する。また、同様に、各コア２２ｂ〜２２ｆが有するＬ１キャッシュ２２０ｂ〜２２０ｆの構成は、Ｌ１キャッシュ２２０ａと同様であるので、詳細な説明は省略する。また、以下の説明では、Ｌ１キャッシュ２２０ａ〜２２０ｆを一般化してＬ１キャッシュ２２０と称して適宜説明する。
【００３２】
Ｌ２キャッシュ制御部２３は、Ｌ２キャッシュ２３ａを有し、Ｌ２キャッシュ２３ａの制御と、各コア間のＬ１キャッシュ２２０のコヒーレント制御を実行する。ここで、Ｌ２キャッシュ２３ａに保持されるデータには、各キャッシュデータの状態を示すＬ２タグが付加される。なお、Ｌ２キャッシュ２３ａに保持されるデータのことをＬ２データと称する。また、Ｌ２キャッシュ２３ａに保持されるデータの状態は、Ｌ１キャッシュ２２０に保持されるデータと同様に、「Ｉ」、「Ｓ」、「Ｅ」、「Ｍ」のいずれかである。
【００３３】
例えば、Ｌ２キャッシュ制御部２３は、コア２２からデータを要求された場合、Ｌ２キャッシュを検索し、要求されたデータが保持されているか否かを判定する。ここで、Ｌ２キャッシュ制御部２３は、要求されたデータがＬ２キャッシュに保持されていると判定した場合、要求されたデータをコア２２に出力する。
【００３４】
また、Ｌ２キャッシュ制御部２３は、要求されたデータがＬ２キャッシュに保持されていないと判定した場合、いずれのＣＰＵがキャッシュミスの発生により要求されたデータを記憶するメモリに接続されたＨ−ＣＰＵであるか否かを判定する。なお、Ｌ２キャッシュ制御部２３は、ＣＰＵ２０が有するアドレスマップを参照し、要求されたデータのメモリアドレスに対応付けられたＣＰＵを識別する。このアドレスマップは、アクセス対象となるデータのメモリアドレスと、メモリアドレスが示す記憶領域にアクセスするＣＰＵを一意に示す情報とを対応付けて記憶する。
【００３５】
ここで、Ｌ２キャッシュ制御部２３は、自装置がＨ−ＣＰＵであると判定した場合、コヒーレント制御部２５にキャッシュミスの発生により要求されたデータの読出しを要求する。そして、Ｌ２キャッシュ制御部２３は、コヒーレント制御部２５を介してキャッシュミスの発生により要求されたデータを有するメモリから、要求されたデータを読み出してＬ２キャッシュに保持する。
【００３６】
また、Ｌ２キャッシュ制御部２３は、自身を内蔵するＣＰＵ以外の他のＣＰＵがＨ−ＣＰＵであると判定した場合、通信制御部２１を介してＨ−ＣＰＵにデータの転送を要求する。そして、Ｌ２キャッシュ制御部２３は、通信制御部２１を介してＨ−ＣＰＵまたはＲ−ＣＰＵからデータを受信し、受信したデータをＬ２キャッシュに保持する。例えば、Ｌ２キャッシュ制御部２３は、コア２２からフェッチアクセス対象の命令であるデータを要求された場合、キャッシュステートを「Ｉ」から「Ｓ」に変更する。
【００３７】
また、例えば、Ｌ２キャッシュ制御部２３は、通信制御部２１を介してＨ−ＣＰＵからデータの転送要求を受信した場合、転送要求対象のデータをＬ２キャッシュから読出し、通信制御部２１を介してＬ−ＣＰＵに読出したデータを転送する。
【００３８】
メモリ制御部２４は、自身を内蔵するＣＰＵと接続するメモリ１０とのデータの読み書きを制御する。例えば、メモリ制御部２４は、コヒーレント制御部２５からデータの読出しを指示された場合、対象のデータとディレクトリ情報とを自装置と接続するメモリ１０から読出してコヒーレント制御部２５に出力する。また、メモリ制御部２４は、コヒーレント制御部２５から受付けたデータやディレクトリ情報を自装置と接続するメモリ１０に書込む。
【００３９】
コヒーレント制御部２５は、他のＣＰＵとの間のＬ２キャッシュのコヒーレント制御を実行する。例えば、コヒーレント制御部２５は、通信制御部２１を介してＬ−ＣＰＵからメモリ１０に格納されたデータを要求された場合、あるいはＬ２キャッシュ制御部２３からデータを要求された場合、以下の処理を実行する。すなわち、コヒーレント制御部２５は、メモリ制御部２４を介して要求されたデータと要求されたデータに対応するディレクトリ情報とをメモリ１０から取得し、取得したディレクトリ情報を解析する。そして、コヒーレント制御部２５は、解析結果に基づいて、Ｌ２キャッシュ制御部２３または通信制御部２１に指示を出力する。
【００４０】
［実施例１に係るコヒーレント制御部の構成］
次に、図４を用いて、コヒーレント制御部２５の構成例について説明する。図４は、実施例１に係るコヒーレント制御部の構成の一例を示す図である。図４に示す例では、コヒーレント制御部２５は、コマンド受信部３１とディレクトリ検査部３２と、コマンド発行／応答部３３と、データ応答部３４とを有する。
【００４１】
コマンド受信部３１は、Ｌ２キャッシュ制御部２３あるいは、通信制御部２１を介して他のＣＰＵからデータの読み出し要求等のコマンドを受信する。そして、コマンド受信部３１は、受信したコマンドをディレクトリ検査部３２に出力する。
【００４２】
ディレクトリ検査部３２は、コマンド受信部３１から他のＣＰＵからのデータの読み出し要求等のコマンドを受付けた場合、要求されたデータと要求されたデータに対応するディレクトリ情報とを、メモリ制御部２４を介して接続するメモリから読出す。そして、ディレクトリ検査部３２は、読出したディレクトリ情報を検査する。また、ディレクトリ検査部３２は、検査結果に基づいて、データ応答部３４またはコマンド発行／応答部３３にデータやコマンドを出力する。なお、ディレクトリ検査部３２の詳細については、図５を用いて後述する。
【００４３】
コマンド発行／応答部３３は、ディレクトリ検査部３２から受付けたデータやコマンドを通信制御部２１に出力する。データ応答部３４は、ディレクトリ検査部３２から受付けたデータを自身を含むＣＰＵのＬ２キャッシュ制御部２３に出力する。
【００４４】
［実施例１に係るディレクトリ検査部の構成］
次に、図５を用いて、ディレクトリ検査部３２の構成例について説明する。図５は、実施例１に係るディレクトリ検査部の構成の一例を示す図である。図５に示す例では、ディレクトリ検査部３２は、データバッファ４１と、コマンド受信部４２と、メモリアクセス発行部４３と、リードデータ受信部４４と、動作判定部４５とを有する。
【００４５】
データバッファ４１は、リードデータ受信部４４によりメモリ制御部２４から受信したデータを保持する。コマンド受信部４２は、コマンド受信部３１から他のＣＰＵからのデータの読み出し要求等のコマンドを受信し、受信した他のＣＰＵからのデータの読み出し要求等のコマンドをメモリアクセス発行部４３に出力する。メモリアクセス発行部４３は、受信した他のＣＰＵからのデータの読み出し要求等のコマンドに基づいて、メモリ制御部２４に要求されたデータと要求されたデータに対応するディレクトリ情報の読出しを要求するコマンドを発行する。リードデータ受信部４４は、メモリ制御部２４から要求されたデータと要求されたデータに対応するディレクトリ情報とを受信する。
【００４６】
動作判定部４５は、リードデータ受信部４４によりメモリ制御部２４から受信したディレクトリ情報を解析して、どのような動作を実行すべきかを判定する。なお、動作判定部４５についての詳細は、図６を用いて後述する。
【００４７】
［実施例１に係る動作判定部の構成］
次に、図６を用いて、動作判定部４５の構成例について説明する。図６は、実施例１に係る動作判定部の構成の一例を示す図である。図６に示す例では、動作判定部４５は、モードレジスタ５１と、ディレクトリ解析部５２と、データ応答起動部５３と、コマンド発行起動部５４と、コマンド宛先判定部５５とを有する。
【００４８】
モードレジスタ５１は、プレゼンスビットをどのようなＣＰＵ数の単位で管理するかについての管理単位を記憶する。例えば、モードレジスタ５１は、プレゼンスビットの管理単位が１ＣＰＵ単位であることを示す「１」、プレゼンスビットの管理単位が４ＣＰＵ単位であることを示す「４」、プレゼンスビットの管理単位が８ＣＰＵ単位であることを示す「８」などの値を記憶する。
【００４９】
また、モードレジスタ５１は、例えば、情報処理システムが有するＣＰＵの数が１６ノード以下である場合、ＣＰＵ単位で設定されることを示す「１」の値を記憶する。また、モードレジスタ５１は、例えば、情報処理システムが有するＣＰＵの数が１７ノード以上６４ノード以下である場合、４ＣＰＵ単位で設定されることを示す「４」の値を記憶する。また、モードレジスタ５１は、例えば、情報処理システムが有するＣＰＵの数が６５ノード以上１２８ノード以下である場合、８ＣＰＵ単位で設定されることを示す「８」の値を記憶する。
【００５０】
なお、このモードレジスタ５１が記憶する値は、情報処理システムの起動時に、情報処理システム１が有するＣＰＵ数に基づいて設定される。そして、情報処理システム１が有するＣＰＵ数に増減があった場合、モードレジスタ５１が記憶する値は、情報処理システム１がリブートされた後、再設定される。
【００５１】
ディレクトリ解析部５２は、ディレクトリ情報のディレクトリステートの状態を判定し、ディレクトリステートの判定結果と、要求されたリクエスト種別とに基づいて、Ｌ−ＣＰＵやＲ−ＣＰＵに対する応答を決定する。
【００５２】
また、ディレクトリ解析部５２は、ディレクトリステート、プレゼンスビット、ＣＰＵカウント、ＣＰＵ−ＩＤなどのディレクトリ情報を更新する。ここで、ディレクトリステートは、要求されたアドレスのデータがどのＣＰＵのキャッシュメモリに保持されているかを示す情報である。また、プレゼンスビットは、要求されたアドレスのデータを共有するＣＰＵの位置を示す情報である。ＣＰＵカウントは、要求されたアドレスのデータを共有するＣＰＵの数を示す情報である。ＣＰＵ−ＩＤは、データを排他的に所有するＣＰＵの番号を示す情報である。なお、ディレクトリ情報の詳細については図８を用いて後述する。
【００５３】
また、ディレクトリ解析部５２は、更新したディレクトリ情報をメモリ制御部２４に出力する。この結果、更新したディレクトリ情報は、メモリ制御部２４により、メモリ１０に格納される。
【００５４】
また、ディレクトリ解析部５２は、排他型フェッチアクセスを受付けた際に、データと同一のデータブロックを保持するキャッシュメモリに対応するＣＰＵにデータの無効化とデータを保持していた旨の応答とを要求する。そして、ディレクトリ解析部５２は、受信した応答の数とＣＰＵカウントとが一致しない場合にディレクトリ情報が異常であると判定する。
【００５５】
また、ディレクトリ解析部５２は、読出したディレクトリ情報が失われていた場合には、ディレクトリ情報を復旧させる処理を実行する。例えば、Ｈ−ＣＰＵのディレクトリ解析部５２は、情報処理システム内の全てのＣＰＵにキャッシュフラッシュを要求する。そして、Ｈ−ＣＰＵのディレクトリ解析部５２は、情報処理システム内の全てのＣＰＵから応答を受信後、ディレクトリステートを他のＣＰＵのキャッシュメモリに保持されていない旨を示す「Ｒ−ＩＮＶ」に設定する。
【００５６】
データ応答起動部５３は、ディレクトリ解析部５２により、他のＣＰＵからの読み出し要求に応じて、メモリ１０から読出したデータを応答すると判定された場合、データをデータバッファ４１から読出し、読出したデータをデータ応答部３４に出力する。
【００５７】
コマンド発行起動部５４は、ディレクトリ解析部５２による解析結果に基づいて、Ｌ−ＣＰＵからの読み出し要求を処理するコマンドをＬ−ＣＰＵまたはＲ−ＣＰＵに対して発行する。なお、以下の説明では、Ｈ−ＣＰＵがＬ−ＣＰＵから要求された読み出し要求を処理するためにＬ−ＣＰＵやＲ−ＣＰＵに対して発行する要求のことを「オーダ」と適宜記載する。
【００５８】
コマンド宛先判定部５５は、ディレクトリ解析部５２によるディレクトリ情報の解析に基づいて、オーダの宛先を判定する。
【００５９】
次に、図７を用いて、メモリ上におけるディレクトリ情報のマッピングについて説明する。図７は、メモリ１０上におけるディレクトリ情報のマッピングの一例を示す図である。図７に示すように、メモリ１０は、ＤＩＭＭ（Dual  Inline  Memory  Module）＃０とＤＩＭＭ＃１とを有する。
【００６０】
例えば、図７のＣｙｃｌｅ１のディレクトリラインとして、ＤＩＭＭ＃０の０バイトから７バイトの領域には、ＢＹＴＥ＃０００−００７の８倍と分のデータやプログラムがそれぞれ格納される。また、ＤＩＭＭ＃１の０バイトから７バイトの領域には、ＢＹＴＥ＃００８−０１５の８バイト分のデータやプログラムがそれぞれ格納される。そして、ＤＩＭＭ＃０の８バイト目の領域には、データが正しいか否かのチェックに用いられるＥＣＣ(Error  Check  and  Correct)としてＥＣＣ＃０［７：０］の８ビットのＥＣＣが格納される。また、ＤＩＭＭ＃１の８バイト目の領域には、ＥＣＣ＃０「１１：８」の４ビットのＥＣＣと、ＤＩＲ［３：０］の４ビットのディレクトリ情報が格納される。
【００６１】
次に、図８を用いて、ディレクトリ情報のフォーマットについて説明する。図８は、ディレクトリ情報のフォーマットの一例を示す図である。図８に示すように、ディレクトリ情報は、各ディレクトリの状態に対応付けて、ビット３１からビット００までの３２ビットの情報を記憶する。ここで、図８において、一段目はＲ−ＩＮＶ、二段目はＲ−ＳＨ、三段目はＲ−ＥＸの各ディレクトリの状態に対応する。
【００６２】
ディレクトリの状態がＲ−ＩＮＶである場合、データブロックが、他のＣＰＵのキャッシュメモリに保持されていないことを示す。また、ディレクトリの状態がＲ−ＳＨである場合、データブロックが、他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す。また、ディレクトリの状態がＲ−ＥＸである場合、データブロックが、単一のＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性があることを示す。
【００６３】
ここで、ディレクトリ情報のビット３１−３０のフィールドは、データブロックの状態を示す２ビットのステータスビットである。例えば、ビット３１−３０には、ディレクトリの状態がＲ−ＩＮＶであることを示す「００」、ディレクトリの状態がＲ−ＳＨであることを示す「１０」、ディレクトリの状態がＲ−ＥＸであることを示す「１１」などが格納される。
【００６４】
また、ディレクトリ情報のビット２９−２３のフィールドは、ディレクトリの状態に応じて用いられる。例えば、ディレクトリの状態がＲ−ＳＨである場合、ビット２９−２３は、ディレクトリ情報に対応するデータを共有するＣＰＵの数を示すＣＰＵカウントとして用いられる。また、例えば、ディレクトリの状態がＲ−ＥＸである場合、ビット２９−２３は、ディレクトリ情報に対応するデータを排他的に所有するＣＰＵの番号を示すＣＰＵ−ＩＤとして用いられる。
【００６５】
また、ディレクトリ情報のビット２２−０７は、ディレクトリの状態に応じて用いられる。例えば、ディレクトリの状態がＲ−ＳＨである場合、ビット２２−０７は、ディレクトリ情報に対応するデータを共有するＣＰＵの位置を示すプレゼンスビットとして用いられる。
【００６６】
プレゼンスビットは、要求されたアドレスのデータを共有するＣＰＵの位置を示す情報である。このプレゼンスビットは、例えば、情報処理システムが有するＣＰＵの数が１６ノード以下である場合、ＣＰＵ単位すなわち、１つのＣＰＵに対して１ビットが割り当てられる。また、プレゼンスビットは、例えば、情報処理システムが有するＣＰＵの数が１７ノード以上６４ノード以下である場合、４ＣＰＵ単位で設定される。また、プレゼンスビットは、例えば、情報処理システムが有するＣＰＵの数が６５ノード以上１２８ノード以下である場合、８ＣＰＵ単位すなわち、８つのＣＰＵに対して１ビットが割り当てられる。
【００６７】
また、ディレクトリ情報のビット０６−００は、メモリに記憶されている対応するデータが正しいか否かを示すＥＣＣである。
【００６８】
なお、ディレクトリの状態がＲ−ＩＮＶである場合、ビット２９−０７は使用されず、ドントケア（Don’t  care）として扱われる。また、ディレクトリの状態がＲ−ＥＸである場合、ビット２２−０７は使用されず、ドントケア（Don’t  care）として扱われる。
【００６９】
［動作判定部によるディレクトリ情報の更新規則］
次に図９及び図１０を用いて、動作判定部４５によるディレクトリ情報の更新規則について説明する。ここでは一例として、図９を用いて命令フェッチリクエスト受信時のディレクトリ情報の更新規則を説明し、図１０を用いて排他型フェッチアクセスリクエスト受信時のディレクトリ情報の更新規則を説明する。
【００７０】
（命令フェッチ）
図９は、動作判定部による命令フェッチリクエスト受信時のディレクトリ情報の更新処理の一例を示す図である。図９は、「状態遷移前のディレクトリ情報及びキャッシュステート（ＣＡＣＨＥ−ＳＴ）」と、「状態遷移後のディレクトリ情報及びキャッシュステート（ＣＡＣＨＥ−ＳＴ）」と、「オーダ発行種」と、「リクエスト応答種」とを対応付けた更新規則を示す。
【００７１】
ここで、「状態遷移前のディレクトリ情報及びキャッシュステート」は、動作判定部４５が命令フェッチアクセスを受信した時点のフェッチアクセス対象の命令であるデータのディレクトリ情報と、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、及びＲ−ＣＰＵそれぞれのキャッシュステートとを示す。ここで、「状態遷移前のディレクトリ情報」には、ディレクトリステート（ＤＩＲ−ＳＴ）が含まれる。
【００７２】
また、「状態遷移後のディレクトリ情報及びキャッシュステート」は、動作判定部４５が、命令フェッチアクセスに対して応答した場合、状態遷移前のディレクトリ情報及びキャッシュステートに応じ、ディレクトリ情報と、キャッシュステートとをどのように遷移させるかを解析した結果を示す。ここで、「状態遷移後のディレクトリ情報」には、ディレクトリステート（ＤＩＲ−ＳＴ）に加えて、プレゼンスビット（ＰＲＣ−ＢＩＴ）とＣＰＵカウント（ＣＮＴ）が含まれる。
【００７３】
また、「オーダ発行種」とは、Ｈ−ＣＰＵがＬ−ＣＰＵから要求されたリクエストを処理するためにＬ−ＣＰＵやＲ−ＣＰＵに対して発行する要求を示す。また、「リクエスト応答種」とは、Ｈ−ＣＰＵがＬ−ＣＰＵから要求されたリクエストに対する応答と、Ｒ−ＣＰＵからＬ−ＣＰＵに対して発行する応答とを示す。なお、図９中の「Ｈ→ＬＲ」は、Ｈ−ＣＰＵからＬ−ＣＰＵまたはＲ−ＣＰＵへのデータ転送を示す。また、図９中の「Ｈ→Ｌ」は、Ｈ−ＣＰＵからＬ−ＣＰＵへのデータ転送を示し、「Ｒ→Ｌ」は、Ｒ−ＣＰＵからＬ−ＣＰＵへのデータ転送を示す。
【００７４】
図９において、ディレクトリステートが他のＣＰＵのキャッシュメモリに保持されていない旨を示す「Ｒ−ＩＮＶ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、及びＲ−ＣＰＵいずれもキャッシュステートがＬ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」である場合を具体例として説明する。
【００７５】
例えば、動作判定部４５では、ディレクトリ解析部５２が、命令フェッチアクセスを受信した場合、「ディレクトリステート」が他のＣＰＵのキャッシュメモリに保持されていない旨を示す「Ｒ−ＩＮＶ」であるので、自身を内蔵するＣＰＵのＬ２キャッシュ制御部２３からキャッシュステートを読出す。そして、ディレクトリ解析部５２は、キャッシュステートがＬ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であることから、メモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。ディレクトリ解析部５２は、解析結果をデータ応答起動部５３とコマンド発行起動部５４とに通知する。
【００７６】
そして、データ応答起動部５３は、データバッファ４１が保持するデータをＬ−ＣＰＵに応答する旨をデータ応答部３４に通知する。また、コマンド発行起動部５４は、完了応答をコマンド宛先判定部５５に発行する。そして、コマンド宛先判定部５５は、完了応答を転送する宛先であるＬ−ＣＰＵを判定し、完了応答を通信制御部２１に出力する。そして、通信制御部２１は、データバッファ４１に保持されたデータと完了応答とをＬ−ＣＰＵに転送する。
【００７７】
また、ディレクトリ解析部５２は、「ディレクトリステート」を「Ｒ−ＳＨ」、Ｌ−ＣＰＵに対応する「プレゼンスビット」を「１」、「ＣＰＵカウント」を「１」にそれぞれ設定する。
【００７８】
次に、図９において、ディレクトリステートが他のＣＰＵのキャッシュメモリにクリーンな状態でデータ共有されている旨を示す「Ｒ−ＳＨ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵのキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵのキャッシュステートが他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」である場合を具体例として説明する。
【００７９】
この場合、ディレクトリ解析部５２は、命令フェッチアクセスを受信した場合、「ディレクトリステート」が他のＣＰＵのキャッシュメモリにクリーンな状態でデータ共有されている旨を示す「Ｒ−ＳＨ」であるので、メモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。また、ディレクトリ解析部５２は、「ディレクトリステート」を他のＣＰＵのキャッシュメモリにクリーンな状態でデータ共有されている旨を示す「Ｒ−ＳＨ」のまま、Ｌ−ＣＰＵに対応する「プレゼンスビット」を「１」に設定し、「ＣＰＵカウント」を１インクリメントする。
【００８０】
また、図９において、ディレクトリステートが、データが単一のＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵのキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵのキャッシュステートが、データが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがクリーンな状態であることを示す「Ｅ」である場合を具体例として説明する。
【００８１】
この場合、ディレクトリ解析部５２は、命令フェッチアクセスを受信した場合、「ディレクトリステート」が、データがＲ−ＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」であるので、Ｒ−ＣＰＵからＬ−ＣＰＵにデータを転送させると判定する。また、コマンド発行起動部５４は、データ転送要求を発行し、コマンド宛先判定部５５に出力する。そして、コマンド宛先判定部５５は、宛先であるＲ−ＣＰＵを判定し、フェッチアクセスの対象の命令であるデータを転送する要求であるデータ転送要求を通信制御部２１に出力する。また、ディレクトリ解析部５２は、「ディレクトリステート」を「Ｒ−ＳＨ」、Ｌ−ＣＰＵに対応する「プレゼンスビット」を「１」、「ＣＰＵカウント」を２にそれぞれ設定する。
【００８２】
（排他型フェッチ）
図１０は、動作判定部による排他型フェッチリクエスト受信時のディレクトリ情報の更新処理の一例を示す図である。図９と同様に、図１０は、「状態遷移前のディレクトリ情報及びキャッシュステート」と、「状態遷移後のディレクトリ情報及びキャッシュステート」と、「オーダ発行種」と、「リクエスト応答種」とを対応付けた更新規則を示す。
【００８３】
図１０において、ディレクトリステートが他のＣＰＵのキャッシュメモリに保持されていない旨を示す「Ｒ−ＩＮＶ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、及びＲ−ＣＰＵいずれもキャッシュステートがＬ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」である場合を具体例として説明する。
【００８４】
例えば、動作判定部４５では、ディレクトリ解析部５２が、排他型フェッチアクセスを受信した場合、「ディレクトリステート」が他のＣＰＵのキャッシュメモリに保持されていない旨を示す「Ｒ−ＩＮＶ」であるので、自身を内蔵するＣＰＵのＬ２キャッシュ制御部２３からキャッシュステートを読出す。そして、ディレクトリ解析部５２は、キャッシュステートがＬ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であることから、メモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。ディレクトリ解析部５２は、解析結果をデータ応答起動部５３とコマンド発行起動部５４とに通知する。
【００８５】
そして、データ応答起動部５３は、データバッファ４１が保持するデータをＬ−ＣＰＵに応答する旨をデータ応答部３４に通知する。また、コマンド発行起動部５４は、完了応答をコマンド宛先判定部５５に発行する。そして、コマンド宛先判定部５５は、完了応答を転送する宛先であるＬ−ＣＰＵを判定し、完了応答を通信制御部２１に出力する。そして、通信制御部２１は、データバッファ４１に保持されたデータと完了応答とをＬ−ＣＰＵに転送する。
【００８６】
また、ディレクトリ解析部５２は、「ディレクトリステート」をデータが単一のＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」に設定する。なお、この場合、Ｌ−ＣＰＵに対応する「ＣＰＵ−ＩＤ」が設定され、「プレゼンスビット」や「ＣＰＵカウント」は設定されない。
【００８７】
次に、図１０において、ディレクトリステートが他のＣＰＵのキャッシュメモリにクリーンな状態でデータ共有されている旨を示す「Ｒ−ＳＨ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵのキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵのキャッシュステートが他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」である場合を具体例として説明する。
【００８８】
この場合、ディレクトリ解析部５２は、排他型フェッチアクセスを受信した場合、「ディレクトリステート」が他のＣＰＵのキャッシュメモリにクリーンな状態でデータ共有されている旨を示す「Ｒ−ＳＨ」であるので、メモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。また、この場合、ディレクトリ解析部５２は、要求されたデータに対するキャッシュステートの無効化を要求されたデータを所有するＲ−ＣＰＵに指示する。
【００８９】
また、ディレクトリ解析部５２は、「ディレクトリステート」をデータが単一のＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」に設定する。なお、この場合、Ｌ−ＣＰＵに対応する「ＣＰＵ−ＩＤ」が設定され、「プレゼンスビット」や「ＣＰＵカウント」は設定されない。
【００９０】
また、図１０において、ディレクトリステートが、データが単一のＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵのキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵのキャッシュステートが、データが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがクリーンな状態であることを示す「Ｅ」である場合を具体例として説明する。
【００９１】
この場合、ディレクトリ解析部５２は、排他型フェッチアクセスを受信した場合、「ディレクトリステート」が、データがＲ−ＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」であるので、Ｒ−ＣＰＵにデータを排他的にＬ−ＣＰＵに転送させると判定する。また、コマンド発行起動部５４は、データ転送要求を発行し、コマンド宛先判定部５５に出力する。そして、コマンド宛先判定部５５は、宛先であるＲ−ＣＰＵを判定し、排他型フェッチアクセスの対象データを転送する要求であるデータ転送要求を通信制御部２１に出力する。
【００９２】
また、ディレクトリ解析部５２は、「ディレクトリステート」をデータが単一のＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」に設定する。なお、この場合、Ｌ−ＣＰＵに対応する「ＣＰＵ−ＩＤ」が設定され、「プレゼンスビット」や「ＣＰＵカウント」は設定されない。
【００９３】
［ディレクトリ情報更新処理動作］
次に図１１から図１８を用いて、情報処理装置による処理動作について説明する。ここでは、図１１から図１３を用いて命令フェッチアクセス時の処理動作について説明し、図１４から図１６を用いて排他型フェッチアクセス時の処理動作について説明する。また、図１７及び図１８を用いてディレクトリ情報が失われた場合の復旧処理の処理動作について説明する。
【００９４】
（Ｒ−ＩＮＶの場合の命令フェッチアクセス）
図１１は、命令フェッチアクセス時の処理動作の一例を示す図である。図１１では、ディレクトリステート（ＤＩＲ−ＳＴ）が、他のＣＰＵのキャッシュメモリにデータが保持されていない旨を示す「Ｒ−ＩＮＶ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、及びＲ−ＣＰＵいずれもキャッシュステート（Ｃａｃｈｅ−ＳＴ）がＬ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」である場合を具体例として説明する。
【００９５】
図１１に示す例では、Ｌ−ＣＰＵのキャッシュステートは、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、有効なデータを保持していない。このため、Ｌ−ＣＰＵのコア２２及びＬ２キャッシュ制御部２３は、Ｌ２キャッシュ２３ａのキャッシュミスを検出する。そして、Ｌ−ＣＰＵのＬ２キャッシュ制御部２３は、命令フェッチアクセスをＨ−ＣＰＵに要求する（ステップＳ１）。
【００９６】
続いて、Ｈ−ＣＰＵは、ディレクトリ解析部５２が、命令フェッチアクセスをＬ−ＣＰＵから受信した場合、「ディレクトリステート」が、他のＣＰＵのキャッシュメモリにデータが保持されていない旨を示す「Ｒ−ＩＮＶ」であるので、Ｌ２キャッシュ制御部２３からキャッシュステートを読出す。そして、ディレクトリ解析部５２は、キャッシュステートがＬ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であることから、メモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。
【００９７】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、「ディレクトリステート」をデータが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す「Ｒ−ＳＨ」に設定する（ステップＳ２）。
【００９８】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、フェッチアクセスの対象の命令であるデータをＬ−ＣＰＵが保持することを示すように、「プレゼンスビット（ＰＲＳＣ）」を設定する（ステップＳ３）。例えば、ディレクトリ解析部５２は、ＰＲＳＣの各ビットを「Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵ」に対応付けた場合、Ｌ−ＣＰＵがフェッチアクセスの対象の命令であるデータを保持することを示すように、ＰＲＳＣを「１００」に設定する。
【００９９】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、「ＣＰＵカウント（ＣＮＴ）」を「１」に設定する（ステップＳ４）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、フェッチアクセスの対象の命令であるデータを１つのＣＰＵが有することを示す。
【０１００】
そして、Ｈ−ＣＰＵは、データをＬ−ＣＰＵに応答する（ステップＳ５）。また、Ｌ−ＣＰＵは、データを受信し、キャッシュステートを他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」に更新する（ステップＳ６）。
【０１０１】
（Ｒ−ＳＨの場合の命令フェッチアクセス）
図１２は、命令フェッチアクセス時の処理動作の一例を示す図である。図１２では、ディレクトリステートが、データが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す「Ｒ−ＳＨ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵのキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵのキャッシュステートが他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」である場合を具体例として説明する。
【０１０２】
図１１と同様に、Ｌ−ＣＰＵは、命令フェッチアクセスをＨ−ＣＰＵに要求する（ステップＳ７）。続いて、Ｈ−ＣＰＵは、ディレクトリ解析部５２が、命令フェッチアクセスをＬ−ＣＰＵから受信した場合、「ディレクトリステート」が、他のＣＰＵのキャッシュメモリにクリーンな状態でデータ共有されていることを示す「Ｒ−ＳＨ」であるので、メモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。
【０１０３】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、フェッチアクセスの対象の命令であるデータをＬ−ＣＰＵが保持することを示すように、「プレゼンスビット（ＰＲＳＣ）」を設定する（ステップＳ８）。例えば、ディレクトリ解析部５２は、ＰＲＳＣの各ビットを「Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵ」に対応付けた場合、ＰＲＳＣを「００１」から「１０１」に変更する。これにより、「プレゼンスビット（ＰＲＳＣ）」は、Ｒ−ＣＰＵに加えてＬ−ＣＰＵもフェッチアクセスの対象の命令であるデータを保持することを示す。
【０１０４】
また、ディレクトリ解析部５２は、「ＣＰＵカウント（ＣＮＴ）」を「２」に設定する（ステップＳ９）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、フェッチアクセスの対象の命令であるデータを、Ｒ−ＣＰＵとＬ−ＣＰＵの２つのＣＰＵが共有することを示す。
【０１０５】
そして、Ｈ−ＣＰＵは、データをＬ−ＣＰＵに応答する（ステップＳ１０）。また、Ｌ−ＣＰＵは、データを受信し、キャッシュステートを他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」に更新する（ステップＳ１１）。
【０１０６】
（Ｒ−ＥＸの場合の命令フェッチアクセス）
図１３は、命令フェッチアクセス時の処理動作の一例を示す図である。図１３では、ディレクトリステートが、データがＲ−ＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵのキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵのキャッシュステートが、データが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがクリーンな状態であることを示す「Ｅ」である場合を具体例として説明する。
【０１０７】
図１１と同様に、Ｌ−ＣＰＵは、命令フェッチアクセスをＨ−ＣＰＵに要求する（ステップＳ１２）。Ｈ−ＣＰＵは、ディレクトリ解析部５２が、命令フェッチアクセスをＬ−ＣＰＵから受信した場合、「ディレクトリステート」が、データがＲ−ＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」であるので、Ｒ−ＣＰＵからＬ−ＣＰＵにデータを転送させると判定し、データ転送要求をＲ−ＣＰＵに送信する（ステップＳ１３）。
【０１０８】
Ｒ−ＣＰＵは、フェッチアクセスの対象の命令であるデータをキャッシュメモリから読出してＬ−ＣＰＵに転送する（ステップＳ１４）。Ｒ−ＣＰＵは、キャッシュステートをデータが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがクリーンな状態であることを示す「Ｅ」から他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」に更新する（ステップＳ１５）。また、Ｒ−ＣＰＵは、Ｈ−ＣＰＵに完了応答を送信する（ステップＳ１６）。
【０１０９】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、「ディレクトリステート」をデータが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す「Ｒ−ＳＨ」に更新する（ステップＳ１７）。
【０１１０】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、フェッチアクセスの対象の命令であるデータをＲ−ＣＰＵに加えてＬ−ＣＰＵが保持することを示すように、「プレゼンスビット（ＰＲＳＣ）」を設定する（ステップＳ１８）。例えば、ディレクトリ解析部５２は、ＰＲＳＣの各ビットを「Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵ」に対応付けた場合、Ｒ−ＣＰＵとＬ−ＣＰＵとがフェッチアクセスの対象の命令であるデータを保持することを示すように、ＰＲＳＣを「１０１」に設定する。
【０１１１】
また、ディレクトリ解析部５２は、「ＣＰＵカウント（ＣＮＴ）」を「２」に設定する（ステップＳ１９）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、フェッチアクセスの対象の命令であるデータを、Ｒ−ＣＰＵとＬ−ＣＰＵの２つのＣＰＵが共有することを示す。
【０１１２】
そして、Ｌ−ＣＰＵは、フェッチアクセスの対象の命令であるデータをＲ−ＣＰＵから受信し、キャッシュステートを他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」に更新する（ステップＳ２０）。
【０１１３】
（Ｒ−ＳＨの場合の排他型フェッチアクセス）
図１４は、排他型フェッチアクセス時の処理動作の一例を示す図である。図１４では、ディレクトリステートが、データが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す「Ｒ−ＳＨ」であり、Ｌ−ＣＰＵ、及びＨ−ＣＰＵのキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵ＃０、及びＲ−ＣＰＵ＃１のキャッシュステートがそれぞれ、他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」である場合を具体例として説明する。なお、ここでは、プレゼンスビットが４ＣＰＵ単位で管理されており、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１がプレゼンスビットの管理単位として同一グループに属する場合を例にする。また、ここでは説明の便宜上、同一グループに属するＣＰＵのうち、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１のみを示し、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１以外のＣＰＵについては記載を省略する。また、ここでは、Ｌ−ＣＰＵとＨ−ＣＰＵとＲ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１とは、プレゼンスビットの管理単位としてそれぞれ別のグループに属するものとする。
【０１１４】
Ｌ−ＣＰＵは、排他型フェッチアクセスをＨ−ＣＰＵに要求する（ステップＳ２１）。続いて、Ｈ−ＣＰＵは、ディレクトリ解析部５２が、排他型フェッチアクセスを受信した場合、「ディレクトリステート」が、データが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す「Ｒ−ＳＨ」であるので、メモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。また、この場合、ディレクトリ解析部５２は、データを所有するＲ−ＣＰＵ＃０、Ｒ−ＣＰＵ＃１に排他型フェッチアクセスの対象データに対するキャッシュステートの無効化を指示する（ステップＳ２２、２３）。
【０１１５】
Ｒ−ＣＰＵ＃０は、キャッシュステートを、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」に更新し（ステップＳ２４）、無効化完了をＨ−ＣＰＵに応答する（ステップＳ２５）。また、Ｒ−ＣＰＵ＃１は、キャッシュステートを、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」に更新し（ステップＳ２６）、無効化完了をＨ−ＣＰＵに応答する（ステップＳ２７）。
【０１１６】
また、ディレクトリ解析部５２は、Ｒ−ＣＰＵ＃０から無効化完了応答を受信し、「ＣＰＵカウント（ＣＮＴ）」を「２」から「１」に設定する（ステップＳ２８）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、排他型フェッチアクセスの対象データを、１つのＣＰＵが有することを示す。
【０１１７】
また、ディレクトリ解析部５２は、Ｒ−ＣＰＵ＃１から無効化完了応答を受信し、「ＣＰＵカウント（ＣＮＴ）」を「１」から「０」に設定する（ステップＳ２９）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、排他型フェッチアクセスの対象データを、どのＣＰＵも有さないことを示す。
【０１１８】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１から無効化完了応答を受信後、「プレゼンスビット（ＰＲＳＣ）」を設定する（ステップＳ３０）。例えば、ディレクトリ解析部５２は、ＰＲＳＣの各ビットを「Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１が属するグループ」に対応付けた場合、「プレゼンスビット」を「００１」から「０００」に変更する。これにより、「プレゼンスビット」は、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１が属するグループが排他型フェッチアクセスの対象データを保持しないことを示す。
【０１１９】
そして、Ｈ−ＣＰＵは、「ディレクトリステート」をデータがＬ−ＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」に設定する（ステップＳ３１）。また、Ｈ−ＣＰＵは、「プレゼンスビット」と、「ＣＰＵカウント」とを無効化する（ステップＳ３２、Ｓ３３）。続いて、Ｈ−ＣＰＵは、Ｌ−ＣＰＵに排他型フェッチアクセスの対象データを応答する（ステップＳ３４）。
【０１２０】
Ｌ−ＣＰＵは、排他型フェッチアクセスの対象データを受信する。そして、Ｌ−ＣＰＵは、キャッシュステートをデータが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがクリーンな状態であることを示す「Ｅ」に更新する（ステップＳ３５）。
【０１２１】
（Ｒ−ＳＨの場合の排他型フェッチアクセス）
図１５は、排他型フェッチアクセス時の処理動作の一例を示す図である。図１５では、ディレクトリステートが、データが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す「Ｒ−ＳＨ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、及びＲ−ＣＰＵ＃０のキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵ＃１のキャッシュステートが他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」である場合を具体例として説明する。なお、ここでは、プレゼンスビットが４ＣＰＵ単位で管理されており、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１がプレゼンスビットの管理単位として同一グループに属する場合を例にする。また、ここでは説明の便宜上、同一グループに属するＣＰＵのうち、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１のみを示し、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１以外のＣＰＵについては記載を省略する。また、ここでは、Ｌ−ＣＰＵとＨ−ＣＰＵとＲ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１とは、プレゼンスビットの管理単位としてそれぞれ別のグループに属するものとする。
【０１２２】
Ｌ−ＣＰＵは、排他型フェッチアクセスをＨ−ＣＰＵに要求する（ステップＳ３７）。続いて、Ｈ−ＣＰＵでは、図１４と同様にメモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。また、この場合、ディレクトリ解析部５２は、データを所有する同一グループに属するＲ−ＣＰＵ＃０、Ｒ−ＣＰＵ＃１に排他型フェッチアクセスの対象データに対するキャッシュステートの無効化を指示する（ステップＳ３８、３９）。
【０１２３】
Ｒ−ＣＰＵ＃０は、キャッシュミスし、排他型フェッチアクセスの対象データの未所持をＨ−ＣＰＵに応答する（ステップＳ４０）。また、Ｒ−ＣＰＵ＃１は、キャッシュステートを、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」に更新し（ステップＳ４１）、無効化完了をＨ−ＣＰＵに応答する（ステップＳ４２）。
【０１２４】
そして、Ｈ−ＣＰＵは、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１から応答を受信する。Ｈ−ＣＰＵは、Ｒ−ＣＰＵ＃１から無効化完了応答を受信した場合、ディレクトリ情報を更新する。
【０１２５】
例えば、ディレクトリ解析部５２は、Ｒ−ＣＰＵ＃１から無効化完了応答を受信し、「ＣＰＵカウント（ＣＮＴ）」を「１」から「０」に設定する（ステップＳ４３）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、排他型フェッチアクセスの対象データを、どのＣＰＵも有さないことを示す。
【０１２６】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１から応答を受信後、「プレゼンスビット（ＰＲＳＣ）」を設定する（ステップＳ４４）。例えば、ディレクトリ解析部５２は、ＰＲＳＣの各ビットを「Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１が属するグループ」に対応付けた場合、「プレゼンスビット」を「００１」から「０００」に変更する。これにより、「プレゼンスビット」は、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１が属するグループが排他型フェッチアクセスの対象データを保持しないことを示す。ここで、無効化完了応答を受信した数「１」と、無効化処理前のＣＰＵカウントの数「１」とが一致しているため、無効化完了応答を受信した後の「ＣＰＵカウント」が「０」になる。この場合、Ｈ−ＣＰＵのディレクトリ解析部５２は、無効化処理を正常に終了する。
【０１２７】
そして、Ｈ−ＣＰＵは、「ディレクトリステート」をデータがＬ−ＣＰＵのキャッシュメモリにのみ排他的に保持され、ダーティな可能性がある旨を示す「Ｒ−ＥＸ」に設定する（ステップＳ４５）。また、Ｈ−ＣＰＵは、「プレゼンスビット」と、「ＣＰＵカウント」とを無効化する（ステップＳ４６、Ｓ４７）。続いて、Ｈ−ＣＰＵは、Ｌ−ＣＰＵに排他型フェッチアクセスの対象データを応答する（ステップＳ４８）。
【０１２８】
Ｌ−ＣＰＵは、排他型フェッチアクセスの対象データを受信する。そして、Ｌ−ＣＰＵは、キャッシュステートを、データが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがクリーンな状態であることを示す「Ｅ」に更新する（ステップＳ４９）。
【０１２９】
（Ｒ−ＳＨの場合の排他型フェッチアクセスにおける異常検出）
図１６は、排他型フェッチアクセス時の処理動作の一例を示す図である。図１６では、ディレクトリステートが、データが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されていることを示す「Ｒ−ＳＨ」であり、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、及びＲ−ＣＰＵ＃０のキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵ＃１のキャッシュステートが他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」である場合を具体例として説明する。また、ここでは、排他型フェッチアクセスの対象データを、１つのＣＰＵが有するにもかかわらず、ＣＰＵカウントが誤って「２」に設定されている場合を例にする。なお、ここでは、プレゼンスビットが４ＣＰＵ単位で管理されており、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１がプレゼンスビットの管理単位として同一グループに属する場合を例にする。また、ここでは説明の便宜上、同一グループに属するＣＰＵのうち、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１のみを示し、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１以外のＣＰＵについては記載を省略する。また、ここでは、Ｌ−ＣＰＵとＨ−ＣＰＵとＲ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１とは、プレゼンスビットの管理単位としてそれぞれ別のグループに属するものとする。
【０１３０】
図１４と同様に、Ｈ−ＣＰＵは、Ｌ−ＣＰＵから排他型フェッチアクセスを受信し（ステップＳ５０）、メモリ１０から読出したデータをＬ−ＣＰＵに応答すると判定する。また、この場合、Ｈ−ＣＰＵのディレクトリ解析部５２は、データを所有する同一グループに属するＲ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１に排他型フェッチアクセスの対象データに対するキャッシュステートの無効化を指示する（ステップＳ５１、５２）。
【０１３１】
Ｒ−ＣＰＵ＃０は、キャッシュミスし、排他型フェッチアクセスの対象データの未所持をＨ−ＣＰＵに応答する（ステップＳ５３）。また、Ｒ−ＣＰＵ＃１は、キャッシュステートの無効化し（ステップＳ５４）、無効化完了をＨ−ＣＰＵに応答する（ステップＳ５５）。
【０１３２】
Ｈ−ＣＰＵは、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１から応答を受信する。Ｈ−ＣＰＵは、Ｒ−ＣＰＵ＃１から応答を受信した場合、ディレクトリ情報を更新する。例えば、Ｈ−ＣＰＵのディレクトリ解析部５２は、Ｒ−ＣＰＵ＃１から無効化完了応答を受信し、「ＣＰＵカウント（ＣＮＴ）」を「２」から「１」に設定する（ステップＳ５６）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、排他型フェッチアクセスの対象データを、１つのＣＰＵが有することを示す。
【０１３３】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１から応答を受信後、「プレゼンスビット（ＰＲＳＣ）」を設定する（ステップＳ５７）。例えば、ディレクトリ解析部５２は、ＰＲＳＣの各ビットを「Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１が属するグループ」に対応付けた場合、「プレゼンスビット」を「００１」から「０００」に変更する。これにより、「プレゼンスビット」は、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１が属するグループが排他型フェッチアクセスの対象データを保持しないことを示す。
【０１３４】
ここで、無効化完了応答を受信した数「１」と、無効化処理前のＣＰＵカウントの数「２」とが一致していない。このため、無効化応答を受信した後のＣＰＵカウントが「１」になる。この場合、Ｈ−ＣＰＵのディレクトリ解析部５２は、無効化処理後のＣＰＵカウントに矛盾が生じたことを検出する（ステップＳ５８）。この結果、Ｈ−ＣＰＵでは、プロトコルチェックが実行され、Ｌ−ＣＰＵはアクセス異常で終了する。
【０１３５】
（Ｒ−ＳＨの場合の復旧処理）
図１７は、ディレクトリ情報が失われた場合の復旧処理の処理動作の一例を示す図である。図１７では、ディレクトリ情報が失われた場合の復旧処理の処理動作について説明する。ここでは、Ｌ−ＣＰＵ、及びＨ−ＣＰＵのキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵ＃０、及びＲ−ＣＰＵ＃１のキャッシュステートがそれぞれ、他のＣＰＵのキャッシュメモリとデータが共有される共有型でありかつ保持されるデータがクリーンな状態であることを示す「Ｓ」である場合を具体例として説明する。なお、ここでは、プレゼンスビットが４ＣＰＵ単位で管理されており、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１がプレゼンスビットの管理単位として同一グループに属する場合を例にする。また、ここでは説明の便宜上、同一グループに属するＣＰＵのうち、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１のみを示し、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１以外のＣＰＵについては記載を省略する。また、ここでは、Ｌ−ＣＰＵとＨ−ＣＰＵとＲ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１とは、プレゼンスビットの管理単位としてそれぞれ別のグループに属するものとする。
【０１３６】
Ｈ−ＣＰＵは、Ｌ−ＣＰＵから命令フェッチアクセスを受信する（ステップＳ５９）。ここで、Ｈ−ＣＰＵは、ディレクトリ検査の結果、ディレクトリ情報が失われていると判定し、復旧フローを開始する。そして、Ｈ−ＣＰＵは、情報処理システム内の全てのＣＰＵに対してキャッシュフラッシュを要求する。ここでは、情報処理システム内の全てのＣＰＵとして、例えば、命令フェッチアクセスを要求するＬ−ＣＰＵ以外のＲ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１にキャッシュフラッシュを要求する（ステップＳ６０、６１）。
【０１３７】
Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１は、クリーンな状態で保持しているキャッシュステートを無効化し（ステップＳ６２、６３）、無効化完了を応答する（ステップＳ６４、６５）。続いて、Ｈ−ＣＰＵは、全応答を受信後、ディレクトリ情報を復旧する。例えば、ディレクトリ解析部５２は、ディレクトリステートを他のＣＰＵのキャッシュメモリに保持されていない旨を示す「Ｒ−ＩＮＶ」に設定する（ステップＳ６６）。
【０１３８】
続いて、Ｈ−ＣＰＵは、Ｌ−ＣＰＵによる命令フェッチアクセスを再開する。例えば、ディレクトリ解析部５２は、「ディレクトリステート」を他のＣＰＵのキャッシュメモリにクリーンな状態でデータ共有されている旨を示す「Ｒ−ＳＨ」に設定する（ステップＳ６７）。
【０１３９】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、「プレゼンスビット（ＰＲＳＣ）」を設定する（ステップＳ６８）。例えば、ディレクトリ解析部５２は、ＰＲＳＣの各ビットを「Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１が属するグループ」に対応付けた場合、「プレゼンスビット」を「１００」に設定する。これにより、「プレゼンスビット」は、Ｌ−ＣＰＵが属するグループがフェッチアクセスの対象データを保持することを示す。
【０１４０】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、「ＣＰＵカウント（ＣＮＴ）」を「１」に設定する（ステップＳ６９）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、フェッチアクセスの対象データを、１つのＣＰＵが有することを示す。そして、Ｈ−ＣＰＵは、メモリ１０から命令フェッチアクセスの対象データを応答する（ステップＳ７０）。
【０１４１】
（Ｒ−ＥＸの場合の復旧処理）
図１８は、ディレクトリ情報が失われた場合の復旧処理の処理動作の一例を示す図である。図１８では、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、及びＲ−ＣＰＵ＃０のキャッシュステートがそれぞれ、Ｌ２キャッシュ２３ａに保持されているデータが無効である旨を示す「Ｉ」であり、Ｒ−ＣＰＵ＃１のキャッシュステートが、データが他のＣＰＵのキャッシュメモリに保持されていない排他状態を表す排他型であり、かつ保持されるデータがダーティな状態である旨を示す「Ｍ」である場合を具体例として説明する。なお、ここでは、プレゼンスビットが４ＣＰＵ単位で管理されており、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１がプレゼンスビットの管理単位として同一グループに属する場合を例にする。また、ここでは説明の便宜上、同一グループに属するＣＰＵのうち、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１のみを示し、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１以外のＣＰＵについては記載を省略する。また、ここでは、Ｌ−ＣＰＵとＨ−ＣＰＵとＲ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１とは、プレゼンスビットの管理単位としてそれぞれ別のグループに属するものとする。
【０１４２】
図１７と同様に、Ｈ−ＣＰＵは、Ｌ−ＣＰＵから命令フェッチアクセスを受信し（ステップＳ７１）、ディレクトリ検査の結果、ディレクトリ情報が失われていると判定して、復旧フローを開始する。例えば、Ｈ−ＣＰＵは、図１７と同様に情報処理システム内の全てのＣＰＵとして、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１にキャッシュフラッシュを要求する（ステップＳ７２、７３）。
【０１４３】
また、Ｒ−ＣＰＵ＃０は、クリーンな状態で保持しているキャッシュステートを無効化し、無効化完了を応答する（ステップＳ７４）。また、Ｒ−ＣＰＵ＃１は、ダーティな状態で保持しているキャッシュステートを無効化し（ステップＳ７５）、データをＨ−ＣＰＵに転送する（ステップＳ７６）。続いて、Ｈ−ＣＰＵは、全応答を受信後、ディレクトリ情報を復旧する。例えば、ディレクトリ解析部５２は、ディレクトリステートを他のＣＰＵのキャッシュメモリに保持されていない旨を示す「Ｒ−ＩＮＶ」に設定する（ステップＳ７７）。
【０１４４】
続いて、Ｈ−ＣＰＵは、Ｌ−ＣＰＵによる命令フェッチアクセスを再開する。例えば、ディレクトリ解析部５２は、「ディレクトリステート」を「Ｒ−ＳＨ」に設定する（ステップＳ７８）。
【０１４５】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、「プレゼンスビット（ＰＲＳＣ）」を設定する（ステップＳ７９）。例えば、ディレクトリ解析部５２は、ＰＲＳＣの各ビットを「Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵ＃０及びＲ−ＣＰＵ＃１が属するグループ」に対応付けた場合、「プレゼンスビット」を「１００」に設定する。これにより、「プレゼンスビット」は、Ｌ−ＣＰＵが属するグループがフェッチアクセスの対象データを保持することを示す。
【０１４６】
また、Ｈ−ＣＰＵのディレクトリ解析部５２は、「ＣＰＵカウント（ＣＮＴ）」を「１」に設定する（ステップＳ８０）。これにより、「ＣＰＵカウント（ＣＮＴ）」は、フェッチアクセスの対象データを、１つのＣＰＵが有することを示す。そして、Ｈ−ＣＰＵは、メモリ１０から命令フェッチアクセスの対象データを応答する（ステップＳ８１）。
【０１４７】
［実施例１に係る動作判定部による処理の処理手順］
次に図１９を用いて、実施例１に係る動作判定部４５による排他型フェッチアクセスのディレクトリ検査処理の処理手順を説明する。図１９は、実施例１に係る動作判定部による排他型フェッチアクセスのディレクトリ検査処理の処理手順を説明するフローチャートである。図１９に示すように、動作判定部４５は、リードデータ受信部４４からディレクトリ情報を受付けたことを契機に、排他型フェッチアクセスのディレクトリ検査を開始する。
【０１４８】
動作判定部４５において、ディレクトリ解析部５２は、ディレクトリの状態を示すディレクトリステートが他のＣＰＵが有するキャッシュメモリに保持されていないことを示すＩＮＶであるか否かを判定する（ステップＳ１０１）。ここで、ディレクトリ解析部５２により、ディレクトリステートが他のＣＰＵが有するキャッシュメモリに保持されていないことを示すＩＮＶであると判定された場合（ステップＳ１０１、Ｙｅｓ）、データ応答起動部５３は、以下の処理を実行する。すなわち、データ応答起動部５３は、リードデータをデータバッファ４１から読出し（ステップＳ１０２）、読出したリードデータをデータ応答部３４に応答する（ステップＳ１０３）。
【０１４９】
また、ディレクトリ解析部５２は、ディレクトリの状態を示すディレクトリステートがＩＮＶ以外のディレクトリステートを示していると判定した場合（ステップＳ１０１、Ｎｏ）、ディレクトリステートが単一のＣＰＵのキャッシュメモリに保持され、ダーティな可能性があることを示すＥＸであるか否かを判定する（ステップＳ１０４）。ここで、ディレクトリ解析部５２により、ディレクトリステートが、単一のＣＰＵのキャッシュメモリに保持され、ダーティな可能性があることを示すＥＸであると判定された場合（ステップＳ１０４、Ｙｅｓ）、コマンド発行起動部５４は、以下の処理を実行する。すなわち、コマンド発行起動部５４は、キャッシュアクセスコマンドをダーティな可能性があるデータを保持するＣＰＵに発行する（ステップＳ１０５）。ここで、コマンド発行起動部５４は、ＣＰＵ−ＩＤからデータを保持するＣＰＵを特定する。
【０１５０】
また、ディレクトリ解析部５２により、ディレクトリステートがＥＸ以外のディレクトリステートを示していると判定された場合（ステップＳ１０４、Ｎｏ）、コマンド発行起動部５４は、以下の処理を実行する。すなわち、コマンド発行起動部５４は、モードレジスタを読出してプレゼンスビットの管理単位が１ＣＰＵ単位であるか否かを判定する（ステップＳ１０６）。
【０１５１】
ここで、コマンド発行起動部５４は、プレゼンスビットの管理単位が１ＣＰＵ単位である場合（ステップＳ１０６、Ｙｅｓ）、プレゼンスビットからデータを保持するＣＰＵを特定し、保持するデータを無効にする無効化コマンドを、ダーティな可能性があるデータを保持するＣＰＵに発行する（ステップＳ１０７）。一方、コマンド発行起動部５４は、プレゼンスビットの管理単位が１ＣＰＵ単位ではない場合（ステップＳ１０６、Ｎｏ）、プレゼンスビットからダーティな可能性があるデータを保持するＣＰＵを含むＣＰＵグループを特定し、無効化コマンドを特定したＣＰＵグループに発行する（ステップＳ１０８）。
【０１５２】
［実施例１の効果］
上述してきたように、実施例１に係るＣＰＵ２０は、メモリが記憶するデータと同一のデータブロックをキャッシュメモリに保持するＣＰＵの有無を所定数のＣＰＵ毎にディレクトリ情報としてメモリに書込む。この結果、実施例１に係るＣＰＵ２０は、ＣＰＵ数の増加に応じたディレクトリ情報量の増加を抑制することができる。
【０１５３】
また、実施例１に係るＣＰＵ２０は、例えば、管理単位が変更可能なプレゼンスビットにより、一定の情報量で大規模構成に対応できるので、情報処理装置の規模を拡張できる。
【０１５４】
また、実施例１に係るＣＰＵ２０は、大規模構成時に任意のデータブロックのアクセスが発生した場合でも、プレゼンスビットを参照することで、アクセスされたデータを所有しないＣＰＵグループを特定可能であり、無関係なＣＰＵへの無駄なデータ通信を抑えることができる。
【０１５５】
また、実施例１に係るＣＰＵ２０は、ＣＰＵカウントを管理する。このため、実施例１に係るＣＰＵ２０は、大規模構成時のＣＰＵグループ単位のプレゼンスビットの管理において、システム内の全ＣＰＵが任意のデータブロックを破棄した場合に、ディレクトリステートが他のＣＰＵのキャッシュメモリにデータが保持されていない旨を示すＲ−ＩＮＶに戻ったことを検知できる。このため、実施例１に係るＣＰＵ２０は、どのＣＰＵのキャッシュにも所有されていないのにも関わらず、キャッシュステートをデータが他のＣＰＵのキャッシュメモリにクリーンな状態で共有されている旨を示すＲ−ＳＨのままにしておくことと比較すると、ＣＰＵがキャッシュメモリに保持するデータへの再アクセスが発生した場合に無駄なデータ通信を抑えることができる。
【０１５６】
また、実施例１に係るＣＰＵ２０は、大規模構成時にＣＰＵグループ単位でプレゼンスビットを管理する。このため、実施例１に係るＣＰＵ２０は、任意のデータブロックを所有する全ＣＰＵへのアクセスが発生した場合、故障などから発生するＣＰＵ内のキャッシュへの登録状態の矛盾をＣＰＵカウントから検査できる。この結果、実施例１に係るＣＰＵ２０は、信頼性の確保と性能向上との両方を実現することが可能である。さらに、実施例１に係るＣＰＵ２０は、ディレクトリ情報を喪失した場合でも復旧フローを装備するため、信頼性を確保できる。
【実施例２】
【０１５７】
ところで、本発明は、上述した実施例以外にも、種々の異なる形態にて実施されてよい。そこで、実施例２では、本発明に含まれる他の実施例について説明する。
【０１５８】
（システム構成等）
本実施例において説明した各処理のうち自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、制御手順、具体的名称については、特記する場合を除いて任意に変更することができる。
【０１５９】
また、ディレクトリ情報は、メモリ上にマッピングするものとして説明したが、ＣＰＵの中にディレクトリ情報専用のメモリを設けるようにしてもよい。また、ディレクトリ情報は、プレゼンスビットの管理単位が、ＣＰＵ単位すなわち、１つのＣＰＵに対して１ビットを割り当てられる場合には、「ＣＰＵカウント」を管理しないようにしてもよい。
【０１６０】
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。例えば、ＣＰＵ２０では、コマンド発行起動部５４とコマンド宛先判定部５５とが統合されてもよい。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【符号の説明】
【０１６１】
１  情報処理システム
２、２ａ、２ｂ  ＸＢ
３、３ａ〜３ｈ  ＳＢ
１０、１０ａ〜１０ｄ  メモリ
２０、２０ａ〜２０ｄ  ＣＰＵ
２１  通信制御部
２２、２２ａ〜２２ｆ  コア
２３  Ｌ２キャッシュ制御部
２３ａ  Ｌ２キャッシュ
２４  メモリ制御部
２５  コヒーレント制御部
３１  コマンド受信部
３２  ディレクトリ検査部
３３  コマンド発行／応答部
３４  データ応答部
４１  データバッファ
４２  コマンド受信部
４３  メモリアクセス発行部
４４  リードデータ受信部
４５  動作判定部
５１  モードレジスタ
５２  ディレクトリ解析部
５３  データ応答起動部
５４  コマンド発行起動部
５５  コマンド宛先判定部
２２０、２２０ａ〜２２０ｆ  Ｌ１キャッシュ
【図１】
0005929420.tif 000002
【図２】
0005929420.tif 000003
【図３】
0005929420.tif 000004
【図４】
0005929420.tif 000005
【図５】
0005929420.tif 000006
【図６】
0005929420.tif 000007
【図７】
0005929420.tif 000008
【図８】
0005929420.tif 000009
【図９】
0005929420.tif 000010
【図１０】
0005929420.tif 000011
【図１１】
0005929420.tif 000012
【図１２】
0005929420.tif 000013
【図１３】
0005929420.tif 000014
【図１４】
0005929420.tif 000015
【図１５】
0005929420.tif 000016
【図１６】
0005929420.tif 000017
【図１７】
0005929420.tif 000018
【図１８】
0005929420.tif 000019
【図１９】
0005929420.tif 000020