(57)【特許請求の範囲】
【請求項１】
キャッシュメモリを有する１以上のプロセッサと、１以上のメモリとを有するセルを複数備えるマルチプロセッサシステムであって、
前記各セルは、
他セル内のキャッシュメモリに記録されている自セル内のメモリのデータに関するステータス情報を保持するスパースディレクトリと、
コピー元セルとコピー先セルが異なるメモリ間でデータコピーを行う場合、コピー元メモリからコピー先メモリへデータをコピーし、前記コピー元セル内のスパースディレクトリが保持するステータス情報に基づいて、前記コピー先セルのスパースディレクトリを更新するセルコントローラと、を備えるマルチプロセッサシステム。
【請求項２】
前記セルコントローラは、前記コピー元セルのスパースディレクトリが保持するステータス情報に基づいて、前記コピー先セルのセルコントローラを返信先とするスヌープを発行することを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項３】
前記メモリは接続されたプロセッサを介してアクセスされ、
前記セルは、複数のプロセッサを有し、前記データコピーを行う場合、前記接続されたプロセッサが前記セルコントローラを介して自セル内の他のプロセッサへアクセスするようにプロセッサ間を接続し、
前記セルコントローラは、前記コピー元メモリへのアクセスによって、前記自セル内の他のプロセッサがキャッシュメモリに保持する前記コピー元メモリのデータに関するステータス情報を、前記コピー元のスパースディレクトリが保持するステータス情報へ追加することを特徴とする請求項２記載のマルチプロセッサシステム。
【請求項４】
前記セルコントローラは、前記コピー元セルである場合、前記コピー元メモリに関するステータス情報に基づいて、前記コピー元メモリのデータを前記キャッシュメモリに保持するプロセッサを特定し、前記コピー先セルのセルコントローラを返信先とするスヌープを生成し、生成したスヌープを前記特定したプロセッサへ送信することを特徴とする請求項１乃至３のいずれか一項に記載のマルチプロセッサシステム。
【請求項５】
前記セルコントローラは、前記コピー先セルである場合、前記特定したプロセッサから送信されたスヌープレスポンスを受信し、受信したスヌープレスポンスに基づいて、スパースディレクトリのステータス情報を更新することを特徴とする請求項４記載のマルチプロセッサシステム。
【請求項６】
前記セルコントローラは、前記コピー先セルである場合、前記スパースディレクトリのステータス情報を更新中に、前記コピー先メモリへアクセスするリクエストを受け付け、受け付けたリクエストがアクセスするメモリラインが前記スパースディレクトリのステータス情報に含まれていないと判断した場合、全プロセッサにスヌープを送信し、返信されるスヌープレスポンスに基づいて前記スパースディレクトリを更新することを特徴とする請求項５記載のマルチプロセッサシステム。
【請求項７】
前記セルコントローラは、前記メモリ間のデータコピー終了後、前記コピー元メモリへのアクセス先をコピー先メモリへ変更し、前記スパースディレクトリのステータス情報を更新することを特徴とする請求項４乃至６記載のいずれか一項に記載のマルチプロセッサシステム。
【請求項８】
前記セルコントローラは、
前記セルが、通常状態、コピー元セル、及びコピー先セルのいずれであるかを示す状態フラグと、
セル内へのアクセスのリクエストを格納するリクエスト格納バッファと、
前記コピー元セルのセルコントローラが発行したスヌープの返信を更新用スヌープレスポンスとして格納するスヌープレスポンス格納バッファと、
前記リクエスト、及び前記更新用スヌープレスポンスを受信し、状態フラグに基づいて、前記リクエスト格納バッファと前記更新用スヌープレスポンスとのいずれかへ格納する調停回路と、
前記状態フラグがコピー先セルであり、かつ、前記リクエストが前記スパースディレクトリにステータス情報を保持していないメモリラインへのアクセスである場合、スヌープを生成し、全プロセッサへ発行する生成部と、を備え、
前記スパースディレクトリは、前記更新用スヌープレスポンス、及び、前記生成部によって発行されたスヌープについて返信されるスヌープレスポンスに基づいて更新されることを特徴とする請求項２乃至７のいずれか一項に記載のマルチプロセッサシステム。
【請求項９】
キャッシュメモリを有する１以上のプロセッサと、１以上のメモリとを有するセルを複数備えるマルチプロセッサシステムのメモリリプレース方法であって、
他セル内のキャッシュメモリに保持された自セル内のメモリのデータに関するステータス情報を保持し、
セルが異なるメモリ間でコピー元メモリからコピー先メモリへデータをコピーし、
コピー終了後、前記コピー元メモリへのアクセス先をコピー先メモリへ変更し、
前記コピー元セル内のスパースディレクトリが保持するステータス情報に基づいて、前記コピー先セルのスパースディレクトリが保持するステータス情報を更新するメモリリプレース方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、本発明は、スパースディレクトリ方式を採用するマルチプロセッサシステムにおけるメモリの動的リプレース方式に関する。
【背景技術】
【０００２】
スパースディレクトリ方式を採用するマルチプロセッサシステムにおけるメモリの動的リプレースでは、リプレース前のメモリからリプレース後のメモリへデータのコピーが行われる。フルディレクトリ方式が、全メモリについてステータスとキャッシュしているプロセッサを管理するのに対し、スパースディレクトリ方式はメモリの一部についてのみ管理を行う方式である。スパースディレクトリ方式を採用するマルチプロセッサシステムにおける、関連するメモリの動的リプレースの方式について、図２を参照して説明する。図２は、複数のセルから構成されるマルチプロセッサシステムの一例を示す図である。図２において、セル１００に備えるメモリ１１１からセル２００に備えるメモリ２１４へ動的リプレースを行う場合を説明する。セル１００、２００は、１以上のプロセッサ、１以上のメモリ、及びセルコントローラを備える。
【０００３】
関連する方式では、メモリ間のデータコピー後にコピー先セルコントローラ２２０のスパースディレクトリを更新する。このため、メモリ間のデータコピー後に一度もアクセスされていないラインに対するアクセスの場合、全プロセッサにスヌープのブロードキャストを行う必要があった。さらに、スパースディレクトリでは全メモリのステータスを管理することができないので、コヒーレンシを保証するために、メモリのデータコピー後にコピー先の全メモリ２１４を一度リードし、スパースディレクトリを更新する必要があった。
【０００４】
スパースディレクトリ方式を採用するマルチプロセッサシステムにおけるメモリのデータコピー及びその終了後の動作を図９のフローチャートを使って説明する。
【０００５】
まず、コピー元プロセッサ１０１のメモリ１１１からコピー先プロセッサ２０１のメモリ２１１へのメモリのデータコピーを行う（Ｓ１００１）。具体的には、次のような動作を行う。プロセッサ１０２は、システムＦＷから指示を受け、コピー元プロセッサ１０１に接続するメモリ１１１の全ラインを、キャッシュライン毎にリードし、コピー元プロセッサ１０１のメモリに対してライトを行う。コピー元プロセッサ１０１は、ライト要求を受けるたびにメモリ１１１に対して、ライトを行うとともに、コピー先プロセッサ２０４に接続するメモリ２１４に対しライトを転送する（ライト要求を行う）。このようにして、メモリのデータコピーを行う。
【０００６】
メモリ１１１の全ラインのリードおよびライトが完了した後に、システムＦＷはシステム内のアドレスとメモリの対応を示すレジスタをコピー元のメモリ１１１からコピー先のメモリ２１４に変更し、コピー元プロセッサ１０１とメモリ１１１をシステムから切り離す（Ｓ１００２）。次に、システムＦＷから指示により、システム内の任意のプロセッサは、コピー先プロセッサ２０４に接続するメモリ２１４をキャッシュライン毎にリードする（Ｓ１００３）。コピー先プロセッサ２０４は、接続する全てのプロセッサ２０１、２０２、２０３とセルコンローラ２０６に、スヌープを送信する（Ｓ１００４）。スヌープを受けとったセルコントローラ２２０は、スパースディレクトリ２２１にスヌープを受けたラインのステータス情報を保持しているかの判断を行う（Ｓ１００５）。
【０００７】
スパースディレクトリ２２１でラインのステータス情報を保持している場合（Ｓ１００６でＹｅｓ）、セルコントローラ２２０は、管理しているステータス情報に基づいてラインをキャッシュしている特定のプロセッサにスヌープを送信し（Ｓ１００７）、該プロセッサよりスヌープレスポンスを受け取る（Ｓ１００８）。一方、スパースディレクトリ２２１でラインのステータス情報を保持していない場合（Ｓ１００６でＮｏ）、セルコントローラ２２０は、セル２００外の全てのプロセッサに対しスヌープのブロードキャストを行い（Ｓ１００９）、そのスヌープレスポンスを全て受信する（Ｓ１０１０）。
【０００８】
次に、セルコントローラ２２０は、スヌープレスポンスに基づいて、スパースディレクトリ２２１の更新を行い（Ｓ１０１１）、コピー先プロセッサ２０４に対し、スヌープレスポンスを送信する（Ｓ１０１２）。コピー先プロセッサ２０４は、スヌープレスポンスを全て受信し、リクエストを送信したプロセッサにデータを送信する（Ｓ１０１３）。
【０００９】
任意のプロセッサは、コピー先メモリ２１４の全ラインのリードが終了したかを確認し、終了した場合（Ｓ１０１４でＹｅｓ）、通常の動作に移行し（Ｓ１０１５）、リードしていないラインが残っている場合（Ｓ１０１４でＮｏ）、コピー先メモリ２１４のキャッシュラインで、リードされていないラインにリードポイントをあわせ、リードを行い（Ｓ１０１６）、ステップＳ１００４からの処理を繰り返す。このようにして、一連の動作をコピー先プロセッサ２０４のメモリの全キャッシュライン数分行う。
【００１０】
これにより、セルコントローラ２２０内のスパースディレクトリ２２１でセル２００外のプロセッサのキャッシュ情報を全て管理する状態になり、プロセッサキャッシュ間コヒーレンシが保証される。また、特許文献１には、分散メモリマルチプロセッサシステムにおけるメモリ移行のためのシステムが開示されている。この技術はメモリの１ラインをコピーする毎に、アクセス先のラインを旧ラインから新ラインへ変更し、変更後のラインのアクセスを旧ラインから新ラインへ転送している。
【特許文献１】特開２００４−０５４９３１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、この関連する方式では、プロセッサキャッシュ間コヒーレンシを保証するため、コピー先メモリの全キャッシュラインをリードし、コピー先セル（上記例ではセル２００）外に含まれる全プロセッサにスヌープのブロードキャストを行う必要があった。このため、メモリの動的リプレースの処理時間が長く、またメモリのデータコピー後のリードの間は、他のリクエストのスループットが落ち、性能が低下する問題があった。近年、システムあたりのメモリの容量は増加する傾向にあり、この問題を解決する必要があった。
【００１２】
本発明は、このような事情に鑑みてなされたものであり、スパースディレクトリ方式を採用するマルチプロセッサシステムにおいて、コピー元のスパースディレクトリを用いてコピー先のスパースディレクトリを更新することによって、メモリの動的リプレースの処理を高速化させることを目的とする。
【課題を解決するための手段】
【００１３】
本発明に係るマルチプロセッサの一態様は、キャッシュメモリを有する１以上のプロセッサと、１以上のメモリとを有するセルを複数備えるマルチプロセッサシステムであって、前記各セルは、他セル内のキャッシュメモリに記録されている自セル内のメモリのデータに関するステータス情報を保持するスパースディレクトリと、コピー元セルとコピー先セルが異なるメモリ間でデータコピーを行う場合、コピー元メモリからコピー先メモリへデータをコピーし、前記コピー元セル内のスパースディレクトリが保持するステータス情報に基づいて、前記コピー先セルのスパースディレクトリを更新するセルコントローラと、を備える。
【００１４】
また、本発明に係るメモリのリプレース方法の一態様は、キャッシュメモリを有する１以上のプロセッサと、１以上のメモリとを有するセルを複数備えるマルチプロセッサシステムのメモリリプレース方法であって、他セル内のキャッシュメモリに保持された自セル内のメモリのデータに関するステータス情報を保持し、セルが異なるメモリ間でコピー元メモリからコピー先メモリへデータをコピーし、コピー終了後、前記コピー元メモリへのアクセス先をコピー先メモリへ変更し、前記コピー元セル内のスパースディレクトリが保持するステータス情報に基づいて、前記コピー先セルのスパースディレクトリが保持するステータス情報を更新する。
【発明の効果】
【００１５】
本発明によれば、スパースディレクトリ方式を採用するマルチプロセッサシステムにおいて、コピー元のスパースディレクトリを用いてコピー先のスパースディレクトリを更新することによって、メモリの動的リプレースの処理を高速化させることが可能となる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。各図面において同一の構成または機能を有する構成要素および相当部分には、同一の符号を付し、その説明を省略する。
【００１７】
（実施形態１）
本実施形態では、コピー元のスパースディレクトリにコピー元のメモリのキャッシュ状況を反映させ、メモリ間のデータコピー後にコピー元のスパースディレクトリの情報をコピー先のスパースディレクトリへ反映させる一態様を説明する。
【００１８】
図１は、本発明の実施形態に係るマルチプロセッサシステムが備えるセルの構成例を示すブロック図である。セル１００はマルチプロセッサシステムの一つの単位であり、プロセッサ１０１、１０２、１０３、１０４、メモリ１１１、１１２、１１３、１１４、セルコントローラ１２０を備える。
【００１９】
キャッシュ（キャッシュメモリ）１３１、１３２、１３３、１３４は、プロセッサ１０１、１０２、１０３、１０４の内部にメモリのデータを一時的に格納するＭＥＳＩ（Modified Exclusive Shared Invalid）などの一般的なキャッシュプロトコルを採用するキャッシュメモリである。
【００２０】
プロセッサ１０１、１０２、１０３、１０４はメモリ１１１、１１２、１１３、１１４それぞれと接続され、各メモリのデータの管理を行っている。プロセッサ１０１〜１０４とセルコントローラ１２０は、インタフェース１５１〜１６０により、１対１で接続される。
【００２１】
メモリ１１１〜１１４は各プロセッサからキャッシュライン単位でアクセスされる。１キャッシュラインのビット幅は例えば６４バイトで一定であり、メモリアクセスの際に指定されるアドレス（後述する図３のアドレス３０３）で、キャッシュラインの位置が決定される。
【００２２】
セルコントローラ１２０は、セル１００内のメモリ１１１〜１１４とセル１００外との間のアクセスを制御する。セルコントローラ１２０は、セル１００の外部からのアクセスを受けたときに、メモリ１１１〜１１４が任意のプロセッサにキャッシュされているかどうかの情報と、キャッシュされている場合は、そのプロセッサ番号の情報を保持するスパースディレクトリ１２１を設ける。
【００２３】
スパースディレクトリ１２１は、セル内のメモリ１１１〜１１４に関して他セルのプロセッサが保持するキャッシュのステータスを全て管理する。ここで、スパースディレクトリ１２１は、セル１００内のメモリ１１１〜１１４の全キャッシュラインより少ないエントリしか持たず、管理可能なエントリ数を越えた時には、他セル内のプロセッサからデータの掃き出しを行わせる機構を有する。
システムＦＷ（Firmware）１２２は、セルコントローラ１２０内に設けられ、ＨＷ（hardware）の基本的な制御を行うソフトのことである。例えば、今回のメモリ間のデータコピーも、システムＦＷで制御可能なものの１つということができる。。
【００２４】
なお、図１に示すプロセッサ及びメモリの数は一例を示したものであり、１つのセルに１以上のプロセッサ及びメモリが備えられていればよい。
【００２５】
図２に、図１で示したセル間の接続を示す。図２は、複数のセルから構成されるマルチプロセッサシステムの一例を示す図である。図２では、セル１００の他に、セル２００、５００、５５０を設けた例を示す。セル２００、５００、５５０は、セル１００と同様の構成を有するが、図２中では一部省略している。セルコントローラ１２０、２２０、５２０、５７０はインタフェース２５１〜２５６で１対１接続され、セル１００、２００、５００、５５０間のアクセスを転送する。セル２００は、プロセッサ２０１、２０２、２０３、２０４とメモリ２１４、セルコントローラ２２０、セルコントローラ２２０に設置するスパースディレクトリ２２１を備える。セル５００はプロセッサ５０１、５０２、５０３、５０４とセルコントローラ５２０を、セル５５０はプロセッサ５５１、５５２、５５３、５５４とセルコントローラ５７０を備えている。各セル２００、５００、５５０は、図１で示したキャッシュ１０５〜１０８とメモリ１１１〜１１４、スパースディレクトリ１２１、及びシステムＦＷ１２２に対応する構成要素が存在するが、説明で使用しないため省略する。
【００２６】
図３は、本発明の実施形態におけるセル間の通信で使用されるパケットのフォーマットを示す図である。パケット３００は、フラグ３０１、リクエストの種類３０２、アドレス３０３、キャッシュステータス３０４、送信先プロセッサ番号３０５、返信先プロセッサ番号３０６、及びデータ３０７から構成される。
【００２７】
フラグ３０１は、ディレクトリ更新中を示すフラグであり、コピー元セルコントローラまたは、コピー先セルコントローラで使用される。フラグ３０１は、"０"で通常のパケットであることを示し、"１"でディレクトリ更新するための専用パケットであることを示す。コピー元でもコピー先でもないセルコントローラでは、フラグ３０１の値を持ちまわる。フラグ３０１は、図４を用いて後述する、コピー元セルコントローラのリクエスト／スヌープ生成回路４１０で"１"にセットされ、コピー先セルコントローラの第１調停回路４０２とライトデータ生成回路４０６でチェックされる。
【００２８】
リクエストの種類３０２は、パケットが要求するリクエストの種類を示すフィールドであり、リード、リードリプライ、ライト、スヌープ、スヌープレスポンスに対応する値が格納される。リードはメモリからデータを読み出し、データを送信することを要求する。リードリプライは、リードに対する返信であり、読み出したデータをリード要求したプロセッサに送信する。スヌープは、リードされたアドレスのステータス情報をもとに、キャッシュしているプロセッサにキャッシュステータス３０４で示したステータスに変更することを要求する。スヌープレスポンスはスヌープに対する返信であり、スヌープを受信したプロセッサは、アドレスで示されるキャッシュラインのステータスをスヌープで要求されたステータスに変更した後に、スヌープレスポンスを送信する。
【００２９】
アドレス３０３は、メモリのアドレスを示すフィールドであり、どのメモリのどのキャッシュラインへのアクセスかが示される。また、アドレス３０３は、スパースディレクトリのエントリを決定するためにも使用される。
【００３０】
キャッシュステータス３０４は、アドレス３０３で特定されたラインのＭＥＳＩステータスを示すフィールドである。パケットのリクエストの種類３０２がリードリプライの場合、キャッシュステータス３０４は、データ３０７のステータスを示す。リクエストの種類３０２がスヌープレスポンス、ライトの場合、キャッシュステータス３０４は、リクエストの送信元のプロセッサが保持する、アドレス３０３で特定されたキャッシュラインに対するステータスを示す。リクエストの種類３０２がリードの場合、キャッシュステータス３０４は、送信元のプロセッサがアドレス３０３で特定されたラインに要求するステータスを示す。リクエストの種類３０２がスヌープの場合は送信先のプロセッサにそのラインに対する変更するステータスを示す。
【００３１】
送信先プロセッサ番号３０５は、起因となるリクエスト（スヌープ、リード、ライト）を送信した先の（受信する）プロセッサ番号を示す。つまり、送信先プロセッサ番号３０５は、リクエストの種類３０２がスヌープとスヌープレスポンスの場合、アドレス３０３で特定されたラインをキャッシュしているプロセッサ番号を示し、リードとリードリプライ、ライトの場合、アクセスしたいメモリが接続しているプロセッサ番号を示す。
【００３２】
送信先プロセッサ番号３０５は、起因となるリクエスト（スヌープ、リード、ライト）を送信するプロセッサ番号を示す。つまり、返信先プロセッサ番号３０６は、リクエストの種類３０２がスヌープとスヌープレスポンスの場合、アドレスによって示されるメモリが接続するプロセッサ番号を示し、リードとリードリプライ、ライトの場合、リクエストを送信したプロセッサ番号を示す。コピー元セルコントローラ１２０から発振するスヌープにおける、返信先プロセッサ番号３０６値については、図４のリクエスト／スヌープ生成回路４１０後述する。
【００３３】
データ３０７は、データを格納する部分であり、リードリプライとライト、スヌープレスポンスで使用される。
【００３４】
図４に、本発明の実施形態に係るセルコントローラの構成例を示す。図４では、セル１００内のセルコントローラ１２０を一例として示しているが、他のセル内に備えられるセルコントローラも同様の構成・機能を有する。セルコントローラ１２０は、図１に示したスパースディレクトリ１２１、システムＦＷ１２２に加え、状態フラグ４０１、第１調停回路４０２、リクエスト格納バッファ４０３、スヌープレスポンス格納バッファ４０４、アドレス生成回路４０５、ライトデータ生成回路（スパースディレクトリライトデータ生成回路）４０６、ライトコマンド生成回路４０７、リードポインタ４０８、セレクタ４０９、４１３、リクエスト／スヌープ生成回路（生成部）４１０、合成回路４１１、及び第２調停回路４１２を備える。
【００３５】
状態フラグ４０１は、セルコントローラ１２０が、通常状態であるか、メモリのデータコピー後のコピー元セルコントローラとして動作している状態であるか、あるいは、メモリのデータコピー後のコピー先セルコントローラとして動作している状態であるかを示すフラグである。状態フラグ４０１は、システムＦＷ１２２によって設定される。状態フラグ４０１のビット数は例えば２ビットであり、［００］で通常状態で動作することを示し、［０１］でコピー元セルコントローラとして動作することを示し、［１０］でコピー先セルコントローラとして動作することを示し、［１１］は使用しない。２ビットの情報を第１調停回路４０２とライトデータ生成回路４０６、リクエスト／スヌープ生成回路４１０に出力する。また、アドレス生成回路４０５とリードポインタ４０８のセレクタ条件として出力される。
【００３６】
第１調停回路４０２は、セル１００内のプロセッサ１０１〜１０４からのアクセス、及び、セル１００外のセルコントローラ２２０、５２０、５７０からのアクセスを調停し、リクエスト格納バッファ４０３またはスヌープレスポンス格納バッファに出力する。第１調停回路４０２は、パケット３００を入力し、状態フラグ４０１が［００］、［０１］の場合は、リクエスト格納バッファ４０３へ出力を行う。第１調停回路４０２は、状態フラグ４０１が［１０］の場合、パケット内のスパースディレクトリ１２１更新中を示すフラグ３０１のチェックを行い、フラグ３０１が"１"だった場合は、受信したパケットをスヌープレスポンス格納バッファ４０４に出力し、フラグ３０１が"１"でない場合は、リクエスト格納バッファ４０３に出力する。
【００３７】
リクエスト格納バッファ４０３は、現在セルコントローラ１２０で実行されているリクエストを全て保持している。また、保持しているリクエストに起因して、リクエスト／スヌープ生成回路４１０からスヌープが送信された場合、該リクエストと同一のエントリでスヌープの情報を保持し、該スヌープのレスポンスを受信する。
【００３８】
セルコントローラ１２０は、スパースディレクトリ１２１のエントリの読み出しを行う場合、保持したリクエストのアドレス３０３をアドレス生成回路４０５に送信し、エントリの特定を行う。スパースディレクトリ１２１のエントリの更新を行う場合、保持したリクエストのアドレス３０３をアドレス生成回路４０５に送信し、ライトデータ生成回路４０６へアドレスに対応するメモリラインのステータス（キャッシュステータス３０４とキャッシュするプロセッサ番号）を送信する。プロセッサに接続するメモリの更新が必要な場合、ライトコマンド生成回路４０７へリクエストの種類３０２とデータ３０７を送信する。メモリの更新が必要ない場合、リクエスト／スヌープ生成回路４１０へパケット内のリクエストの種類３０２を出力する。
【００３９】
スヌープレスポンス格納バッファ４０４は、コピー先セルコントローラである時に使用される。スヌープレスポンス格納バッファ４０４で受信するパケットのリクエストの種類は、スヌープレスポンスのみである。スヌープレスポンス格納バッファ４０４は、状態フラグ４０１が［１０］のとき、すなわち、セルコントローラ１２０がメモリのデータコピー後のコピー先セルコントローラとなる場合、かつ、パケット３００のフラグ３０１が"１"のとき、すなわち、スパースディレクトリ更新中の場合、第１調停回路４０２よりパケットを受信する。このため、スヌープレスポンス格納バッファ４０４に格納される、スパースディレクトリを更新するスヌープレスポンスを「更新用スヌープレスポンス」ともいう。セルコントローラ１２０は、受信したスヌープレスポンスの情報を基にして、スパースディレクトリ１２１の更新を行う。つまり、該スパースディレクトリのエントリを決定するために、アドレス生成回路４０５にアドレス３０３を送信し、更新するステータス情報（キャッシュステータス情報）を生成するためにライトデータ生成回路４０６にアドレスに対応するメモリラインのステータス情報（キャッシュステータス３０４とキャッシュするプロセッサ番号）を送信する。また、プロセッサに接続するメモリの更新が必要な場合は、ライトコマンド生成回路４０７へリクエストの種類３０２とデータ３０７を送信する。
【００４０】
アドレス生成回路４０５は、リクエスト格納バッファ４０３またはスヌープレスポンス格納バッファ４０４より送信されるアドレス３０３からキーアドレスを作成し、アクセスするスパースディレクトリ１２１のエントリを決定する。アドレス生成回路４０５は、状態フラグが［００］、［１０］の時に、セレクタ４０９で選択され、スパースディレクトリをアクセスすることが可能になる。アドレスからキーアドレスを作成する方法はスパースディレクトリの構成に依存して決定する。ここではその方法の詳細には言及しない。決定したエントリのキーアドレスを基に、スパースディレクトリ１２１にアクセスを行う。
【００４１】
ライトデータ生成回路４０６は、リクエスト格納バッファ４０３またはスヌープレスポンス格納バッファ４０４から送られる情報からスパースディレクトリ１２１へ書き込むデータを生成する。書き込むデータは、ラインをキャッシュするプロセッサ番号、及び、該ラインのキャッシュステータス値、具体的には、ＭＥ（Modified Exclusive）、Ｓ（Shared）、Ｉ（Invalid）のいずれかの値である。本実施形態では、パケット３００において、フラグ３０１が"１"（ディレクトリ更新中を示す）であるかを常時チェックし、"１"でない場合は、常にスパースディレクトリ１２１のステータス情報を更新する。フラグ３０１が"１"であり、スパースディレクトリ１２１にステータス情報が登録されていない場合は、該スパースディレクトリのステータス情報を更新し、ステータス情報が登録されている場合には、ステータス情報の更新は行わない。
【００４２】
ライトコマンド生成回路４０７は、セル１００内のプロセッサ１０１〜１０４に接続するメモリ１１１〜１１４にデータを書き込む場合、または、他セル２００、５００、５５０のプロセッサからのリード要求に対応するデータを送信する場合に、リクエスト格納バッファ４０３またはスヌープレスポンス格納バッファ４０４から出力されるパケット３００に含まれるリクエストの種類３０２及びデータ３０７に基づいてリードリプライ、ライトのコマンドを生成し、合成回路４１１へ出力する。
【００４３】
リードポインタ４０８は、スパースディレクトリ１２１のエントリ数の閾値を示すレジスタと、コピー元セルとして、スパースディレクトリ１２１を読み出すときのエントリを示すリードカウンタとを備える。リードカウンタの初期値は"０"である。リードポインタ４０８は、セルコントローラ１２０の状態フラグ４０１が［０１］にアサートされている（すなわち、メモリのデータコピー後のコピー元セルコントローラである）時に、セレクタ４０９で選択され、リードカウンタに基づいてスパースディレクトリ１２１のエントリにアクセスする。また、リードポインタ４０８は、リクエスト／スヌープ生成回路４１０からストローブ信号を受信すると、リクエストカウンタを＋１（"１"インクリメント）し、スパースディレクトリの次エントリの読み込みを開始する。セルコントローラ１２０は、エントリ数の閾値（レジスタの値）を超えるまで、スパースディレクトリのエントリにアクセスを行う機能を有する。
【００４４】
セレクタ４０９は、状態フラグ４０１の値によって、セレクトを変更する。状態フラグ４０１が［００］、［１０］のときは、アドレス生成回路４０５をセレクトし、状態フラグ４０１が［０１］の時はリードポインタ４０８をセレクトする。ただし、状態フラグ４０１が［０１］の場合でも、メモリ間のデータコピーに関与しないセル１００内の他のプロセッサが存在するので、リクエスト格納バッファ４０３にリクエストが格納されている（セル１００内の他のプロセッサからのリクエストか、または、セル１００内の他のプロセッサに接続するメモリへのリクエストか、を受信している）場合は、優先してアドレス生成回路４０５をセレクトすることになる。
【００４５】
スパースディレクトリ１２１は、セル１００内のメモリ１１１〜１１４に関してライン毎のステータス情報を管理する。ステータス情報は、ラインが他セル内のプロセッサにキャッシュされているかどうかの情報、及び、ラインが他セル内のプロセッサにキャッシュされている場合、キャッシュしているプロセッサ番号を含んだ情報を保持している。また、セル１００外のプロセッサがキャッシュするセル内のメモリ１１１〜１１４のラインの管理を全て行う。メモリとプロセッサのキャッシュのアドレス・マッピングの方式として、例えばセット・アソシアティブ方式などがあるが、本発明では、アドレスとエントリの対応が取れればどのような方式でもよい。また、スパースディレクトリ１２１は、アドレス生成回路４０５より指示されたキーアドレスに対応するエントリへライトデータ生成回路４０６で生成されたステータス情報を書き込む機能を有する。また、アドレス生成回路４０５より指示されたキーアドレスに対応するエントリの読み出しを行い、読み出されたアドレスのステータス情報をリクエスト／スヌープ生成回路４１０と合成回路４１１とへ出力する機能を有する。また、リードポインタ４０８のリードカウンタにより指示されたエントリの読み出しを行い、読み出されたアドレス、及び、該アドレスのステータス情報をリクエスト／スヌープ生成回路４１０に出力する機能を有する。
【００４６】
リクエスト／スヌープ生成回路４１０は、スパースディレクトリ１２１から受け取るアドレス、該アドレスのステータス情報、及び、リクエスト格納バッファ４０３またはスヌープレスポンス格納バッファ４０４から受け取るリクエストの種類３０２に基づいて、スヌープの必要性を検証する。リクエスト／スヌープ生成回路４１０は、リクエストの種類３０２がスヌープ、リードであり、ステータス情報より他セルのプロセッサがキャッシュしていると判明した場合、スヌープリクエストの生成を行い、第２調停回路４１２に送信する。それと同時に、リクエスト格納バッファ４０３にスヌープの情報を通知する。リクエストの種類３０２がスヌープレスポンスの場合、スパースディレクトリ１２１から受け取る、アドレスに対応するラインのステータス情報（ＭＥＳＩ）を付け、プロセッサに送信する。
【００４７】
また、リクエスト／スヌープ生成回路４１０は、セルコントローラ１２０がメモリのデータコピー後のコピー先セルコントローラである時、具体的には、状態フラグ４０１が［１０］にアサートされている時に、スパースディレクトリ１２１に該リクエストのアドレスに対応するステータス情報を保持していないリクエストやスヌープを受信した場合、セル１００外の全プロセッサにスヌープのブロードキャストを行う機構を有し、第２調停回路４１２に出力する。
【００４８】
さらに、リクエスト／スヌープ生成回路４１０は、セルコントローラ１２０がメモリのデータコピー後のコピー元セルコントローラである時、具体的には、状態フラグ４０１が［０１］にアサートされている時に、スパースディレクトリ１２１からスヌープ指示があった場合、スヌープパケットの返信先プロセッサ番号３０６をコピー先セルコントローラに設定し、ディレクトリ更新中を示すフラグ３０１を"１"にセットしたスヌープを生成する機構を有する。生成したスヌープを第２調停回路４１２に出力すると同時に、リードポインタ４０８が保持するリードポインタを＋１（"１"インクリメント）するために、ストローブ信号をリードポインタ４０８に送信する。
【００４９】
合成回路４１１は、ライトコマンド生成回路４０７で生成されたリードリプライやライトと、スパースディレクトリ１２１から受け取る、アドレスに対応するラインのステータス情報（ＭＥＳＩ）とを合成し、第２調停回路４１２に出力する。
【００５０】
第２調停回路４１２は、リクエスト／スヌープ生成回路４１０から出力されるスヌープ、リード、スヌープレスポンスの送信と、合成回路４１１から出力されるリードリプライやライトの送信を調停し、セル１００のプロセッサ１０２、１０３、１０４（コピー元メモリと対応するプロセッサを除く）やセル１００外のセルコントローラ２２０、５２０、５５０に送信する。
セレクタ４１３は、リクエスト格納バッファ４０３とスヌープレスポンス格納バッファ４０４との出力を選択する。セレクタ４１３は、状態フラグ４０１の値を入力し、状態フラグ４０１が［１０］を示すとき、すなわち、コピー先セルのときに、スヌープレスポンス格納バッファ４０４の出力を優先して選択する構成にしてもよい。
【００５１】
続いて、図１、図２、及び図５を用いてメモリのデータコピーの動作を説明する。図５は、本実施形態のメモリ間のデータコピーの動作例を示すフローチャートである。ここでは、セル１００のメモリ１１１のデータをセル２００のメモリ２１４へデータコピーする場合の動作を一例として説明する。
【００５２】
メモリ間のデータコピーを行う前に、セルコントローラ１２０のスパースディレクトリ１２１で、プロセッサ１０１に接続するメモリ１１１のキャッシュ状況をコピー元セル１００内のプロセッサ１０２〜１０４のキャッシュも含めて管理するために、セル１００でプロセッサ１０１と接続するプロセッサ１０２、１０３，１０４との経路１５５、１５６、１５７をセルコントローラ１２０経由になるように経路変更する。具体的には、１５５は１５２と１５１、１５６は１５３と１５１、１５７は１５４と１５１へと変更する（Ｓ６０１）。これにより、通常は他セルのプロセッサのキャッシュ情報しか持たないスパースディレクトリ１２１に、セル内のプロセッサ１０２、１０３、１０４の、メモリ１１１に関するキャッシュ状況を反映させる。
【００５３】
次に、システムＦＷ１２２などの指示によって、プロセッサ１０２（セル１００内外のどのプロセッサでもよい）は、コピー元プロセッサ１０１に接続するメモリ１１１の全ラインを、キャッシュライン毎にリードし、コピー元プロセッサ１０１のメモリ１１１に対してライト（ライト要求）を行う。コピー元プロセッサ１０１は、ライト要求を受けるたびにメモリ１１１に対して、ライトを行うとともに、コピー先プロセッサ２０４に接続するメモリ２１４に対しライトを転送する（ライト要求を行う）ことによって、メモリのデータコピーをライン毎に全ラインについて行う（Ｓ６０２）。
【００５４】
システムＦＷ１２２は、アクセス先の変更と状態フラグ４０１の設定を行う（Ｓ６０３）。具体的には、システムＦＷ１２２は、アクセスするメモリが接続するプロセッサをコピー元プロセッサ１０１からコピー先プロセッサ２０４に変更し、コピー元プロセッサ１０１はシステムから切り離す。アクセスを行うプロセッサの変更や、コピー元プロセッサの切り離し方については、本実施形態では、一般的な方式を採用するため、その詳細説明を省略する。コピー完了後にシステムＦＷ１２２は、セルコントローラ内の状態フラグ４０１を、コピー元セルコントローラ１２０について［０１］に、コピー先セルコントローラ２２０について［１０］にセットする。
【００５５】
コピー元セルコントローラ１２０は、セルコントローラ１２０内のスパースディレクトリ１２１が保持するエントリ毎のステータス情報を確認する（Ｓ６０４）。具体的には、リードポインタ４０８が保持するリードカウンタが示すエントリのステータス情報を確認する。ステータス情報を基に、コピー元セルコントローラ１２０のリクエスト／スヌープ生成回路４１０は、スパースディレクトリのステータス情報を基にメモリ１１１のデータをキャッシュしているプロセッサを決定し、スヌープパケットの返信先プロセッサ番号３０６をコピー先セルコントローラ２２０に変更し、ディレクトリ更新中を示すフラグ３０１を"１"にセットしたスヌープをキャッシュしている特定のプロセッサに送信する（６０５）。コピー元セルコントローラ１２０の詳しい内部動作については後述する。
【００５６】
スヌープを受信した特定のプロセッサは、自プロセッサ内のキャッシュにスヌープパケットのアドレス３０３で示されるラインがあるかを確認し、データが最新である場合は、ライトデータつきのスヌープレスポンスを、それ以外の場合は、データなしのスヌープレスポンスを、ディレクトリ更新中を示すフラグ３０１を持ちまわったまま、コピー先セルコントローラ２２０に送信する。
【００５７】
コピー先セルコントローラ２２０は、該特定のプロセッサよりディレクトリ更新中を示すフラグ３０１が"１"であるスヌープレスポンスを受け取り（Ｓ６０６）、スヌープレスポンスパケットのアドレス３０３が示すラインのステータス情報をスパースディレクトリ２２１で保持しているか判断する（Ｓ６０７）。保持している場合（Ｓ６０７でＹｅｓ）、スパースディレクトリ２２１の更新を行うことなくスヌープレスポンスを破棄する（Ｓ６０８）。一方、ステータス情報を保持していない場合（Ｓ６０７でＮｏ）、スパースディレクトリ２２１の情報を更新する（６０９）。コピー先セルコントローラ２２０の詳しい内部動作については後述する。
【００５８】
コピー元セルコントローラ１２０は、リードポインタ４０８のリードカウンタを  "１"インクリメントする（Ｓ６１０）。コピー元セルコントローラ１２０は、リードポインタ４０８のリードカウンタの値がスパースディレクトリ１２１のエントリ数を超えているかを判断する（Ｓ６１１）。セルコントローラ１２０は、エントリ数（リードポインタ４０８のスパースディレクトリのエントリの閾値を示すレジスタの値）を超えている場合（Ｓ６１１でＹｅｓ）、状態フラグ４０１を通常時の動作に移行させる（Ｓ６１２）。エントリ数以下の場合（Ｓ６１１でＮｏ）、セルコントローラ１２０は、リードポインタ４０８のリードカウンタが示すスパースディレクトリ１２１のキャッシュラインのステータス情報を確認し（Ｓ６１３）、ステップＳ６０５以降の処理を繰り返す。一連の動作をコピー元セルコントローラ１２０のスパースディレクトリ１２１のエントリ数分行う。
【００５９】
このようにして、経路変更によってコピー元セルコントローラ１２０は、プロセッサ１０１に接続するメモリ１１１にアクセスする全プロセッサのステータス情報をスパースディレクトリ１２１で保持することになり、スパースディレクトリ１２１のステータス情報を基にスヌープを送信する。また、コピー先セルのセルコントローラ２２０は、コピー元セルコントローラ１２０から送信されたスヌープに対するスヌープレスポンスに基づいて、コピー先セルコントローラ２２０のスパースディレクトリ２２１を更新する。これにより、プロセッサキャッシュ間コヒーレンシを保証することができる。
【００６０】
ここで、コピー元セルコントローラとコピー先セルコントローラの詳しい内部の動作について、図４、５を用いて説明する。
【００６１】
コピー元セルコントローラ１２０は、状態フラグ４０１が［０１］にセットされている場合、セレクタ４０９は、リードポインタ４０８を選択する。ＨＷ（Hardware）によってリクエスト／スヌープ生成回路４１０は、リードポインタ４０８のリードカウンタが示すスパースディレクトリ１２１のエントリをリードする。リードされたエントリのステータス情報を基に、リクエスト／スヌープ生成回路４１０は、宛先をキャッシュしているプロセッサに、返信先がコピー先セルコントローラ２２０になるように、パケットの送信先プロセッサ番号３０５設定し、パケット内のディレクトリ更新中を示す"１"をフラグ３０１へセットする。生成したパケット３００を第２調停回路４１２に送信する。
【００６２】
第２調停回路４１２は、その他のスヌープや、リクエストとで調停を行い、調停で選択されたならばキャッシュしているプロセッサにスヌープを送信する。リクエスト／スヌープ生成回路４１０は、第２調停回路４１２に送信すると同時に、リードポインタ４０８のリードカウンタを"１"インクリメントするために、ストローブ信号を送信し、該ストローブ信号を受け取ったリードポインタ４０８は、リードカウンタを"１"インクリメントし（Ｓ６１０）、リードポインタ４０８の値とスパースディレクトリ１２１のエントリ数を比較し（Ｓ６１１）、リードポインタ４０８の値が超えている場合（Ｓ６１１でＹｅｓ）、エントリのリードを終了し、状態フラグを［００］に変更する（Ｓ６１２）。超えていない場合（Ｓ６１２でＮｏ）、スパースディレクトリ１２１をアクセスする（Ｓ６１３）。
【００６３】
コピー先セルコントローラ２２０は、状態フラグ４０１が［１０］にセットされている場合、第１調停回路４０２は、パケット内のディレクトリ更新中を示すフラグ３０１が"１"であるかを確認し、"１"にセットされたパケットをスヌープレスポンス格納バッファ４０４に格納する。スヌープレスポンス格納バッファ４０４は格納したパケットについて、アドレス生成回路４０５にアドレス３０３を、ライトデータ生成回路４０６にアドレスに対応するメモリ２１４のラインのステータス情報（キャッシュステータス３０４とキャッシュを行うプロセッサ）を出力する。アドレス生成回路４０５は、アドレス３０３よりスパースディレクトリ１２１のエントリ番号を特定するためのキーアドレスを生成する。また、ライトデータ生成回路４０６は、ステータス情報よりスパースディレクトリ２２１を更新するためのデータを生成する。
【００６４】
セルコントローラ２２０は、アドレス生成回路４０５で生成したキーアドレスでスパースディレクトリ２２１を引いた（参照した）結果、エントリに登録されている場合（Ｓ６０７でＹｅｓ）、ライトデータ生成回路４０６で生成したデータを破棄する。エントリに登録されていない場合（Ｓ６０７でＮｏ）、スパースディレクトリ２２１を更新する。システムＦＷ１２２は、コピー元セルコントローラの状態フラグが［００］に落とされたのを確認したら、コピー先セルコントローラの状態フラグも［００］に落として、通常動作に戻る。
【００６５】
次に、セルコントローラ２２０がコピー先セルコントローラとして動作している時、具体的には状態フラグ４０１が［１０］にアサートされている時に、コピー先プロセッサ２０４に接続するメモリ２１４へのアクセスされた場合、あるいは、コピー先プロセッサ２０４からのスヌープを受信した場合の動作について図６を用いて説明する。図６は、セルコントローラがコピー先セルコントローラとして動作している場合の動作例を示すフローチャートである。
【００６６】
コピー先セルコントローラ２２０は、セル２００外より、コピー先プロセッサ２０４に接続するメモリ２１４へのリクエストを受信する（Ｓ７０１）。あるいは、コピー先セルコントローラ２２０は、コピー先プロセッサ２０４より、スヌープを受信する（７０２）。ステップＳ７０１またはＳ７０２のいずれかが生じると、セルコントローラ２２０は、アクセスを受けたラインのステータス情報をスパースディレクトリ２２１で管理を行っているかを確認する（Ｓ７０３）。
【００６７】
管理している場合（Ｓ７０３でＹｅｓ）、セルコントローラ２２０は、ステータス情報に基づいてキャッシュを行っている特定のプロセッサに対し、スヌープを送信し（Ｓ７０４）、その後レスポンスを受信して（Ｓ７０５）、スパースディレクトリの更新を行う（７０８）。スパースディレクトリ２２１で管理していない場合（Ｓ７０３でＮｏ）、セル内外の全プロセッサに対し、スヌープのブロードキャストを行い（Ｓ７０６）、スヌープのレスポンスを全て受け取り（Ｓ７０７）、スパースディレクトリ２２１のステータス情報を更新する（Ｓ７０８）。スパースディレクトリ２２１の更新が終了したら、セルコントローラ２２０は、コピー先プロセッサ２０４に対し、ステップＳ７０１でリクエストを受信した場合リクエストを送信し、ステップＳ７０２でスヌープを受信した場合スヌープのレスポンスを行う（Ｓ７０９）。
【００６８】
この動作は、通常状態、すなわち状態フラグ４０１が［００］にアサートされている時の動作のように、スパースディレクトリ２２１にステータス情報が管理されていない場合、すぐにスヌープレスポンスやリード要求をアドレスで決定されるメモリが接続されているプロセッサに送信できるのと違い、プロセッサ間キャッシュコヒーレンシを保証するためにスヌープのブロードキャスト（Ｓ７０６）が必要となる。
【００６９】
次に、通常時の動作として、セル１００内のプロセッサのリクエストからの動作とセル１００外のプロセッサのリクエストからの動作について説明する。図７は、本実施形態のセルコントローラが通常状態において、セル内のプロセッサからリクエストを受けた場合の動作例を示すフローチャートである。図８は、本実施形態のセルコントローラが通常状態において、セル外のプロセッサからリクエストを受けた場合の動作例を示すフローチャートである。
【００７０】
図７を参照して、セル１００内のプロセッサ１０２よりメモリ１１１へリードのリクエストが発行された場合を一例として説明する。プロセッサ１０２は、プロセッサ１０１に接続するメモリ１１１に対し、リクエストを発行する（Ｓ８０１）。リクエストを受信したプロセッサ１０１は、セル１００内のプロセッサとセルコントローラ１２０に対し、スヌープのブロードキャストを行う（Ｓ８０２）。スヌープを受信したセルコントローラ１２０は、スパースディレクトリ１２１のステータス情報を管理しているかを確認する（Ｓ８０４）。
【００７１】
スパースディレクトリ１２１でステータス情報を保持している場合（Ｓ８０４でＹｅｓ）、管理しているステータス情報を基にラインをキャッシュしているプロセッサに対し、スヌープを送信し（Ｓ８０５）、該プロセッサより、スヌープレスポンスを受け取る（Ｓ８０６）。受け取った情報を基にセルコントローラ１２０は、スパースディレクトリ２２１の書き換えを行い（Ｓ８０７）、リクエストが要求されたプロセッサ１０１に対してスヌープのレスポンスを行う（Ｓ８０８）。一方、スパースディレクトリ１２１でステータス情報を保持していない場合（Ｓ８０４でＮｏ）、セルコントローラ１２０はスヌープレスポンスをすぐにプロセッサ１０１に返信する（Ｓ８０８）。
【００７２】
プロセッサ１０１は、セルコントローラ１２０からスヌープレスポンスを全て受け取った後、リードのリクエストを発行したプロセッサ１０２に対して、データを送信する（８０９）。このようにして、一連のセル内のプロセッサのリクエストからの動作を終了する。
【００７３】
次に、図８を参照して、セル１００外のプロセッサ２０１よりメモリ１１１へリードリクエストが発行された場合を一例として説明する。プロセッサ２０１は、セルコントローラ２２０を介して、セルコントローラ１２０へプロセッサ１０１と接続するメモリ１１１へのリクエストを発行する（Ｓ９０１）。リクエストを受信したセルコントローラ１２０は、スパースディレクトリ１２１のステータス情報の確認をする（Ｓ９０２）。スパースディレクトリ１２１でステータス情報を管理しているかを確認する（Ｓ９０３）。
【００７４】
スパースディレクトリ１２１でステータス情報を保持している場合（Ｓ９０３でＹｅｓ）、管理している情報を基にラインをキャッシュしているプロセッサに対し、スヌープを送信し（Ｓ９０４）、該プロセッサより、スヌープレスポンスを受け取る（Ｓ９０５）。セルコントローラ１２０は、受け取った情報を基にスパースディレクトリ１２１の書き換えを行い（Ｓ９０６）、リクエストが発行されたプロセッサ１０１に対しリクエストを送信する（Ｓ９０７）。一方、スパースディレクトリ１２１でステータス情報を保持していない場合（Ｓ９０３でＮｏ）、リクエストをすぐにプロセッサ１０１に送信する（Ｓ９０７）。
【００７５】
リクエストを受信したプロセッサ１０１は、セル１００内のプロセッサ１０２〜１０４に対し、スヌープのブロードキャストを行う（Ｓ９０８）。プロセッサ１０１は、プロセッサ１０２〜１０４からスヌープレスポンスを全て受け取った後、セルコントローラ１２０に対して、データを送信する（Ｓ９０９）。セルコントローラ１２０は、プロセッサ２０１にデータを送信する（Ｓ９１０）。このようにして、一連の他セルのプロセッサのリクエストからの動作を終了する。
【００７６】
上記ではコピー元セルをセル１００とし、コピー先セルをセル２００として説明したが、他のメモリ間のデータコピーでも同様に機能することはいうまでもない。
【００７７】
（その他の実施形態）
上記実施形態では、セルに複数のプロセッサを有する場合を説明したが、セル内に一つのプロセッサとメモリの組み合わせを備える場合であっても本発明を適用することができる。このような場合、図５のステップＳ６０１では、セル内のプロセッサがシステムＦＷの指示を受けてメモリ１１１へのリードを要求したが、システムＦＷは、セル外のプロセッサにリード要求の指示を行ってもよい。また、コピー元セル内のプロセッサのキャッシュメモリに保持されるコピー元メモリに関する情報はないため、コピー元セル内のスパースディレクトリへステータス情報を収集する処理は不要となる。
【００７８】
以上、説明したように、本発明の好適な実施形態によれば、メモリのデータコピーを行う前に、セル内のローカルプロセッサ間のインタフェースを切断して、コピー元のメモリをリードすることで、コピー元のスパースディレクトリにローカルプロセッサのステータス情報も反映させ、メモリのデータコピー後に、コピー元のスパースディレクトリの情報を使って、コピー先のスパースディレクトリを更新することで、メモリの動的リプレースの処理を高速化することができる。具体的には、コピー元プロセッサが接続するセルコントローラ（例えば、図２のセルコントローラ１２０）には、該セルコントローラのスパースディレクトリ（例えば図２のスパースディレクトリ１２１）をエントリ毎にリードをし、スヌープを送信する機構をリクエスト／スヌープ生成回路（例えば、図４のリクエスト／スヌープ生成回路４１０）に設ける。
【００７９】
また、コピー先プロセッサ（例えば、図２のプロセッサ２０４）の接続するセルコントローラ（例えば図２のセルコントローラ２２０）には、自身が送信していない（コピー元のセルコントローラが送信した）スヌープに対するスヌープレスポンスをスヌープレスポンス格納バッファ（例えば、図４のスヌープレスポンス格納バッファ４０４）に送信する機構を第１調停回路（例えば、図４の第１調停回路４０２）に設ける。コピー元セルコントローラが保持するスパースディレクトリのステータス情報に基づき、全プロセッサのキャッシュからデータを掃き出させ、コピー先のスパースディレクトリを更新することによって、コヒーレンシを保証し、かつメモリのラインの一部を管理するスパースディレクトリ（例えば、図２のスパースディレクトリ１２１）のエントリ数分のスヌープを発行するのみなので、メモリのデータコピー後にスパースディレクトリ（例えば、図２のスパースディレクトリ２２１）を高速に更新できる。さらに、１ラインのスヌープ数もキャッシュを行っているプロセッサへのスヌープのみに抑えられるので、スヌープによるトラフィックの増加を抑えられる。このようにして、スヌープのブロードキャストの発行数を抑え、メモリの動的リプレースの際に、従来よりも他のリクエストのスループットを低下させることなく処理する。
【００８０】
また、本発明の好適な実施形態によれば、以下に記載する効果が得られる。
第１の効果は、プロセッサ間キャッシュコヒーレンシの保証をするために、従来はメモリのデータコピー完了後にメモリのキャッシュライン数分を全てリードする必要があった。しかし、本発明では、メモリのキャッシュラインの一部のキャッシュラインを管理するスパースディレクトリの全エントリをリードすればよい。エントリ数がメモリのライン数より格段に少ないために、キャッシュコヒーレンシを保証するためにかかる時間を短縮することができる。
【００８１】
第２の効果は、従来は、メモリのデータコピー完了後に行うメモリのリードの際にメモリの１キャッシュラインに対し、全プロセッサにスヌープの送信をしていた。しかし本発明では、コピー元セルコントローラのスパースディレクトリを使用することで、１キャッシュラインに対し、特定のプロセッサにのみスヌープを送信すればよいので、トラフィックを減少させることができ、性能低下を抑えることができる。
【００８２】
なお、本発明は上記に示す実施形態に限定されるものではない。本発明の範囲において、上記実施形態の各要素を、当業者であれば容易に考えうる内容に変更、追加、変換することが可能である。
【図面の簡単な説明】
【００８３】
【図１】本発明の実施形態に係るマルチプロセッサシステムが備えるセルの構成例を示すブロック図である。
【図２】複数のセルから構成されるマルチプロセッサシステムの一例を示す図である。
【図３】本実施形態におけるセル間の通信で使用されるパケットのフォーマットを示す図である。
【図４】本実施形態に係るセルコントローラ内の構成例を示すブロック図である。
【図５】本実施形態のメモリ間のデータコピーの動作例を示すフローチャートである。
【図６】本実施形態のセルコントローラがコピー先セルコントローラとして動作している場合の動作例を示すフローチャートである。
【図７】本実施形態のセルコントローラが通常状態において、セル内のプロセッサからリクエストを受けた場合の動作例を示すフローチャートである。
【図８】本実施形態のセルコントローラが通常状態において、セル外のプロセッサからリクエストを受けた場合の動作例を示すフローチャートである。
【図９】関連する技術のメモリ間のデータコピーの動作例を示すフローチャートである。
【符号の説明】
【００８４】
１００、２００、５００、５５０  セル
１０１、１０２、１０３、１０４  プロセッサ
１１１、１１２、１１３、１１４  メモリ
１２０  セルコントローラ
１２１  スパースディレクトリ
１２２  システムＦＷ
１３１、１３２、１３３、１３４  キャッシュ
３００  パケット
３０１  フラグ
３０２  リクエストの種類
３０３  アドレス
３０４  キャッシュステータス
３０５  送信先プロセッサ番号
３０６  返信先プロセッサ番号
３０７  データ
４０１  状態フラグ
４０２  第１調停回路
４０３  リクエスト格納バッファ
４０４  スヌープレスポンス格納バッファ
４０５  アドレス生成回路
４０６  ライトデータ生成回路
４０７  ライトコマンド生成回路
４０８  リードポインタ
４０９、４１３  セレクタ
４１０  リクエスト／スヌープ生成回路
４１１  合成回路
４１２  第２調停回路
【図１】
0004868246.tif 000002
【図２】
0004868246.tif 000003
【図３】
0004868246.tif 000004
【図４】
0004868246.tif 000005
【図５】
0004868246.tif 000006
【図６】
0004868246.tif 000007
【図７】
0004868246.tif 000008
【図８】
0004868246.tif 000009
【図９】
0004868246.tif 000010