(57)【要約】【課題】分散共有メモリ型並列計算機システムのキャッシュコヒーレンス制御を高速化すること。【解決手段】各ノードのコヒーレンスコントローラ１００が全てのノードの全ての共有キャッシュに１対１に対応するディレクトリ１１０を有し、また、必要に応じて新規要求の要求パケットにディレクトリ特定情報パケットを含めるよう構成する。さらに、ＳＭＰ１０はコヒーレンスコントローラ１００を介することなく他のＳＭＰ１０と通信することができるように構成する。【選択図】        図１
2006293550.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサ、複数の共有キャッシュおよび一つ以上のメモリから構成されるノードが複数個接続されて構成される分散共有メモリ型並列計算機システムのキャッシュコヒーレンスをノード単位で管理するキャッシュコヒーレンス管理装置であって、
各ノードの各共有キャッシュに１対１に対応するディレクトリを共有キャッシュの数分記憶するディレクトリ記憶手段と、
前記ディレクトリ記憶手段に記憶された複数のディレクトリを用いてキャッシュコヒーレンスの制御を行うコヒーレンス制御手段と、
を備えたことを特徴とするキャッシュコヒーレンス管理装置。
【請求項２】
前記コヒーレンス制御手段は、他のノードのキャッシュコヒーレンスを管理するキャッシュコヒーレンス管理装置にメモリデータを新規に要求する要求パケットに前記複数のディレクトリのうちの該メモリデータに対応するディレクトリと該ディレクトリの中でメモリデータの情報を持つ箇所とを特定する情報を含めることを特徴とする請求項１に記載のキャッシュコヒーレンス管理装置。
【請求項３】
前記ノード内の複数の共有キャッシュを接続するノード内共有キャッシュ接続手段を介して該複数の共有キャッシュと接続されることを特徴とする請求項１または２に記載のキャッシュコヒーレンス管理装置。
【請求項４】
前記コヒーレンス制御手段は、共有キャッシュのミスヒットによって要求されたメモリデータが自ノード内の他の共有キャッシュにある場合には、該メモリデータの先読みを他の共有キャッシュに指示し、該メモリデータを記憶するメモリを備えたノードを管理するキャッシュコヒーレンス管理装置に対して自ノード内の他の共有キャッシュが先読みしたメモリデータの利用可否の問い合わせを行って利用可の応答を受けると、先読みした共有キャッシュに対して先読みしたメモリデータをミスヒットが発生した共有キャッシュにノード内共有キャッシュ接続手段を介して転送することを指示することを特徴とする請求項３に記載のキャッシュコヒーレンス管理装置。
【請求項５】
前記ディレクトリ記憶手段が記憶するディレクトリのエントリのキャッシュラインの状態を示すキャッシュ状態に該キャッシュラインが更新中であることを示す更新中状態を有し、
前記コヒーレンス制御手段は、前記キャッシュ状態を用いてキャッシュラインのロック制御を行うことを特徴とする請求項１〜４のいずれか一つに記載のキャッシュコヒーレンス管理装置。
【請求項６】
他のキャッシュコヒーレンス管理装置からメモリデータを要求された場合に、転送元の共有キャッシュの状態を変更せずに、転送元共有キャッシュにあるデータを転送する処理の場合は、メモリデータを要求したキャッシュコヒーレンス装置からのメモリデータ受信通知を待たずに、メモリデータを記憶するメモリを備えたノードのキャッシュコヒーレンス管理装置のメモリデータを要求した共有キャッシュに対応するディレクトリの該メモリデータに対応するエントリで管理する該当データブロックのキャッシュ状態をデータが書き込まれた後に移行する最終状態に、あらかじめ変更することを特徴とする請求項５に記載のキャッシュコヒーレンス管理装置。
【請求項７】
前記コヒーレンス制御手段は、前記ディレクトリのエントリを決めるメモリアドレスでインターリーブされた要求をそれぞれ扱う複数のパイプラインによってキャッシュコヒーレンスの制御を行うことを特徴とする請求項１〜６のいずれか一つに記載のキャッシュコヒーレンス管理装置。
【請求項８】
複数のプロセッサ、複数の共有キャッシュおよび一つ以上のメモリから構成されるノードが複数個接続されて構成される分散共有メモリ型並列計算機システムのキャッシュコヒーレンスをノード単位で管理するキャッシュコヒーレンス管理方法であって、
共有キャッシュに関する要求を受信し、該受信した要求が共有キャッシュへのストア要求であるか否かを判定する要求判定工程と、
前記要求判定工程によりストア要求であると判定された場合に、各ノードの各共有キャッシュに１対１に対応するディレクトリを共有キャッシュの数分記憶するディレクトリ記憶装置を用いて該ストア要求に対するキャッシュコヒーレンスの制御を行うコヒーレンス制御工程と、
を含んだことを特徴とするキャッシュコヒーレンス管理方法。
【請求項９】
前記コヒーレンス制御工程は、他のノードのキャッシュコヒーレンスを管理するキャッシュコヒーレンス管理装置にメモリデータを新規に要求する要求パケットに、前記ディレクトリ記憶装置に記憶する複数のディレクトリのうちの該メモリデータに対応するディレクトリと該ディレクトリの中でメモリデータの情報を持つ箇所とを特定する情報を含めることを特徴とする請求項８に記載のキャッシュコヒーレンス管理方法。
【請求項１０】
前記ノード内の複数の共有キャッシュを接続するノード内共有キャッシュ接続手段を介して前記ストア要求を受信するストア要求受信工程をさらに含んだことを特徴とする請求項８または９に記載のキャッシュコヒーレンス管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のプロセッサ、複数の共有キャッシュおよび一つ以上のメモリから構成されるノードが複数個接続されて構成される分散共有メモリ型並列計算機システムのキャッシュコヒーレンスをノード単位で管理するキャッシュコヒーレンス管理装置およびキャッシュコヒーレンス管理方法に関し、特に、コヒーレンス制御を高速化し、分散共有メモリ型並列計算機システムの性能を向上することができるキャッシュコヒーレンス管理装置およびキャッシュコヒーレンス管理方法に関するものである。ここで、コヒーレンス制御とは、共有キャッシュにあるメモリデータのコピーが、処理の結果に影響を与えないように更新・参照されるように、システム内の全共有キャッシュ（複数）間で、更新・参照の順序を制御する処理である。
【背景技術】
【０００２】
小規模の分散共有メモリ型並列計算機システムでは、通常、スヌープ方式(snoopy coherence protocol)で、キャッシュコヒーレンス制御を行う。この制御方式は、システムの規模が小さいときには、有効に機能するが、大きな規模のシステムでは、バスがボトルネックとなることが知られている。規模の大きなシステムでは、ディレクトリ方式（directory-based coherence protocol）でキャッシュのコヒーレンス制御が行われる。
【０００３】
ディレクトリ方式では、ディレクトリを、メインメモリをベースに作る方式が一般的によく使われる。図１４は、メインメモリベースのディレクトリを示す図である。同図に示すように、メインメモリベースのディレクトリの場合、キャッシュのブロックのサイズを単位に、メモリデータの状態管理を行うので、メモリディレクトリ３２０が備えるエントリの総数は、メインメモリ３１０の総容量をキャッシュブロックのサイズで分割した数となり、膨大である。
【０００４】
このため、全情報のサブセットでディレクトリを構成する方式や、ディレクトリを階層化する方式が開発され利用されている。しかし、かかる方式では、本来不要な制御が発生したり、ディレクトリアクセスに時間が掛かったりというデメリットがある。
【０００５】
メモリベースの一般的な方式に対し、メインメモリではなく、キャッシュをベースに使ってディレクトリを構成するスパースディレクトリ(Sparse Directory)方式がある（例えば、非特許文献１参照。）。
【０００６】
図１５は、スパースディレクトリを示す図である。同図に示すように、スパースディレクトリ３３０では、キャッシュのサイズはメインメモリ３１０の総容量に比較して小さいので、ディレクトリを小さくすることができる。しかし、ノードごとにプロセッサとキャッシュがあり、２つ以上のノードのあるシステムで、システム内全キャッシュのエントリ総数より小さいエントリ数のディレクトリ、（例えば、ディレクトリのエントリ数が、キャッシュ（１つ）のエントリ数と等しい）でコヒーレンスを管理する場合には、ディレクトリのエントリに競合が起こり、必要な情報をすべて保持できない。
【０００７】
そこで、スパースディレクトリのアイディアを発展させたものとして、ＣＣＲディレクトリ（Complete and Concise Remote Directory）がある（例えば、特許文献１参照。）。ＣＣＲディレクトリは、各ノードが、全ノード数マイナス１のディレクトリを持つ方式である。ノードごとに共有キャッシュが一つある構成のシステムに用いて、各々のディレクトリが自分以外のノードに存在する共有キャッシュと１対１に対応する構成を作る。
【０００８】
図１６は、ＣＣＲディレクトリを示す図である。また、図１７は、ＣＣＲディレクトリを備えた分散共有メモリ型並列計算機システムを示す図である。図１６は、８ノード構成の分散共有メモリ型並列計算機システム（ノードＡからノードＨがある。）のＣＣＲディレクトリのうち、ノードＡのディレクトリを示している。ノードＡには、七つのディレクトリがあり、それらはノードＢからノードＨにある共有キャッシュに対応する。ＣＣＲディレクトリでは、スパースディレクトリで問題となるエントリの競合をなくすことができる。
【０００９】
【特許文献１】米国特許第６３３８１２３号明細書
【非特許文献１】A. Gupta and W.-D. Weber. “Reducing Memory and Traffic Requirements for Scalable Directory-Based Cache Coherence Schemes,” In Proceedings of the 1990 ICPP, pages 312-322, Aug. 1990.
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、ＣＣＲディレクトリには、ノード内に複数の共有キャッシュがある場合に、複数の共有キャッシュを一つのディレクトリで管理するので、ディレクトリのエントリに競合が起こり、必要な情報をすべて保持できないという問題がある。したがって、ノード内に複数の共有キャッシュがある場合には、ディレクトリの有効なエントリの追い出しが必要であり、コヒーレンス制御の性能が低下するという問題がある。
【００１１】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、コヒーレンス制御を高速化し、分散共有メモリ型並列計算機システムの性能を向上することができるキャッシュコヒーレンス管理装置およびキャッシュコヒーレンス管理方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、請求項１の発明に係るキャッシュコヒーレンス管理装置は、複数のプロセッサ、複数の共有キャッシュおよび一つ以上のメモリから構成されるノードが複数個接続されて構成される分散共有メモリ型並列計算機システムのキャッシュコヒーレンスをノード単位で管理するキャッシュコヒーレンス管理装置であって、各ノードの各共有キャッシュに１対１に対応するディレクトリを共有キャッシュの数分記憶するディレクトリ記憶手段と、前記ディレクトリ記憶手段に記憶された複数のディレクトリを用いてキャッシュコヒーレンスの制御を行うコヒーレンス制御手段と、を備えたことを特徴とする。
【００１３】
この請求項１の発明によれば、各ノードの各共有キャッシュに１対１に対応するディレクトリをシステム内に存在する共有キャッシュの数分記憶し、記憶した複数のディレクトリを用いてキャッシュコヒーレンスの制御を行うよう構成したので、ディレクトリの検索を高速化し、コヒーレンス制御を高速化することができる。
【００１４】
また、請求項２の発明に係るキャッシュコヒーレンス管理装置は、請求項１の発明において、前記コヒーレンス制御手段は、他のノードのキャッシュコヒーレンスを管理するキャッシュコヒーレンス管理装置にメモリデータを新規に要求する要求パケットに前記複数のディレクトリのうちの該メモリデータに対応するディレクトリとその中で該当データブロックの情報をもつ箇所を特定する情報を含めることを特徴とする。
【００１５】
この請求項２の発明によれば、他のノードのキャッシュコヒーレンスを管理するキャッシュコヒーレンス管理装置にメモリデータを新規に要求する要求パケットに複数のディレクトリのうちのメモリデータに対応するディレクトリと該当データブロックの情報をもつ箇所を特定する情報を含めるよう構成したので、１つの要求の開始から終了までにおこなわれるディレクトリの検索に掛かるトータルの時間を短縮し、コヒーレンス制御を高速化することができる。
【００１６】
また、請求項３の発明に係るキャッシュコヒーレンス管理装置は、請求項１または２の発明において、前記ノード内の複数の共有キャッシュを接続するノード内共有キャッシュ接続手段を介して該複数の共有キャッシュと接続されることを特徴とする。
【００１７】
この請求項３の発明によれば、ノード内の複数の共有キャッシュを接続するノード内共有キャッシュ接続手段を介して複数の共有キャッシュと接続されるよう構成したので、ノード内の共有キャッシュ間の通信を高速化することができる。
【００１８】
また、請求項４の発明に係るキャッシュコヒーレンス管理装置は、請求項３の発明において、前記コヒーレンス制御手段は、共有キャッシュのミスヒットによって要求されたメモリデータが自ノード内の他の共有キャッシュにある場合には、該メモリデータの先読みを他の共有キャッシュに指示し、該メモリデータを記憶するメモリを備えたノードを管理するキャッシュコヒーレンス管理装置に対して自ノード内の他の共有キャッシュが先読みしたメモリデータの利用可否の問い合わせを行って利用可の応答を受けると、先読みした共有キャッシュに対して先読みしたメモリデータをミスヒットが発生した共有キャッシュにノード内共有キャッシュ接続手段を介して転送することを指示することを特徴とする。
【００１９】
この請求項４の発明によれば、共有キャッシュのミスヒットによって要求されたメモリデータが自ノード内の他の共有キャッシュにある場合には、メモリデータの先読みを他の共有キャッシュに指示し、メモリデータを記憶するメモリを備えたノードを管理するキャッシュコヒーレンス管理装置に対して自ノード内の他の共有キャッシュが先読みしたメモリデータの利用可否の問い合わせを行って利用可の応答を受けると、先読みした共有キャッシュに対して先読みしたメモリデータをミスヒットが発生した共有キャッシュにノード内共有キャッシュ接続手段を介して転送するよう構成したので、要求されたメモリデータが自ノード内の他の共有キャッシュにある場合には、メモリデータを高速に要求元の共有キャッシュに転送することができる。
【００２０】
また、請求項５の発明に係るキャッシュコヒーレンス管理装置は、請求項１〜４の発明において、前記ディレクトリ記憶手段が記憶するディレクトリのエントリのキャッシュラインの状態を示すキャッシュ状態に該キャッシュラインが更新中であることを示す更新中状態を有し、前記コヒーレンス制御手段は、前記キャッシュ状態を用いてキャッシュラインのロック制御を行うことを特徴とする。
【００２１】
この請求項５の発明によれば、ディレクトリのエントリのキャッシュラインの状態を示すキャッシュ状態にキャッシュラインが更新中であることを示す更新中状態を有し、キャッシュ状態を用いてキャッシュラインのロック制御を行うよう構成したので、ロック制御のためにキャッシュラインの更新状態を管理するテーブルを別に持つことを不要とすることができる。
【００２２】
また、請求項６の発明に係るキャッシュコヒーレンス管理装置は、請求項５の発明において、他のキャッシュコヒーレンス管理装置からメモリデータを要求された場合に、該メモリデータのノード間ネットワークへの送出を完了すると、メモリデータを要求したキャッシュコヒーレンス装置からのメモリデータ受信通知を待たずに自装置のディレクトリの該メモリデータに対応するエントリのキャッシュ状態を更新中状態から他の状態に変更することを特徴とする。
【００２３】
この請求項６の発明によれば、他のキャッシュコヒーレンス管理装置からメモリデータを要求された場合に、メモリデータをキャッシュから転送する際に転送元のキャッシュの該当データブロックを保持するキャッシュラインの状態を変更しないときは、メモリデータを要求したキャッシュコヒーレンス装置からのメモリデータ受信通知を待たずに自装置のディレクトリのメモリデータに対応するエントリのキャッシュ状態を更新中状態から、キャッシュミスヒットを起こしたキャッシュがメモリデータを受け取ってから移行する状態に、に予め設定するよう構成したので、メモリデータ受信通知を不要とし、コヒーレンス制御を高速化することができる。
【００２４】
また、請求項７の発明に係るキャッシュコヒーレンス管理装置は、請求項１〜６の発明において、前記コヒーレンス制御手段は、前記ディレクトリのエントリを決めるメモリアドレスでインターリーブされた要求をそれぞれ扱う複数のパイプラインによってキャッシュコヒーレンスの制御を行うことを特徴とする。
【００２５】
この請求項７の発明によれば、ディレクトリのエントリを決めるメモリアドレスでインターリーブされた要求をそれぞれ扱う複数のパイプラインによってキャッシュコヒーレンスの制御を行うよう構成したので、ディレクトリの検索を並列化(高速化)し、コヒーレンス制御を高速化することができる。
【００２６】
また、請求項８の発明に係るキャッシュコヒーレンス管理方法は、複数のプロセッサ、複数の共有キャッシュおよび一つ以上のメモリから構成されるノードが複数個接続されて構成される分散共有メモリ型並列計算機システムのキャッシュコヒーレンスをノード単位で管理するキャッシュコヒーレンス管理方法であって、共有キャッシュに関する要求を受信し、該受信した要求が共有キャッシュへのストア要求であるか否かを判定する要求判定工程と、前記要求判定工程によりストア要求であると判定された場合に、各ノードの各共有キャッシュに１対１に対応するディレクトリを共有キャッシュの数分記憶するディレクトリ記憶装置を用いて該ストア要求に対するキャッシュコヒーレンスの制御を行うコヒーレンス制御工程と、を含んだことを特徴とする。
【００２７】
この請求項８の発明によれば、共有キャッシュに関する要求を受信し、受信した要求が共有キャッシュへのストア要求であるか否かを判定し、ストア要求であると判定した場合に、各ノードの各共有キャッシュに１対１に対応し必要な情報をすべて含むディレクトリを共有キャッシュの数分記憶するディレクトリ記憶装置を用いてストア要求に対するキャッシュコヒーレンスの制御を行うよう構成したので、ディレクトリの検索を高速化し、コヒーレンス制御を高速化することができる。
【００２８】
また、請求項９の発明に係るキャッシュコヒーレンス管理方法は、請求項８の発明において、前記コヒーレンス制御工程は、他のノードのキャッシュコヒーレンスを管理するキャッシュコヒーレンス管理装置にメモリデータを新規に要求する要求パケットに、前記ディレクトリ記憶装置に記憶する複数のディレクトリのうちの該メモリデータに対応するディレクトリとディレクトリ内の該当データブロックの情報の記録箇所を特定する情報を含めることを特徴とする。
【００２９】
この請求項９の発明によれば、他のノードのキャッシュコヒーレンスを管理するキャッシュコヒーレンス管理装置にメモリデータを新規に要求する要求パケットに、ディレクトリ記憶装置に記憶する複数のディレクトリのうちのメモリデータに対応するディレクトリとディレクトリ内の該当データブロックの情報の記録箇所を特定する情報を含めるよう構成したので、ディレクトリの検索を高速化し、コヒーレンス制御を高速化することができる。
【００３０】
また、請求項１０の発明に係るキャッシュコヒーレンス管理方法は、請求項８または９の発明において、前記ノード内の複数の共有キャッシュを接続するノード内共有キャッシュ接続手段を介して前記ストア要求を受信するストア要求受信工程をさらに含んだことを特徴とする。
【００３１】
この請求項１０の発明によれば、ノード内の複数の共有キャッシュをノード内共有キャッシュ接続手段で接続するよう構成したので、ノード内の共有キャッシュ間の通信を高速化することができる。
【発明の効果】
【００３２】
請求項１、２、７、８および９の発明によれば、コヒーレンス制御を高速化するので、分散共有メモリ型並列計算機システムの性能を向上することができるという効果を奏する。
【００３３】
また、請求項３および１０の発明によれば、ノード内の共有キャッシュ間の通信を高速化するので、分散共有メモリ型並列計算機システムの性能を向上することができるという効果を奏する。
【００３４】
また、請求項４の発明によれば、要求されたメモリデータが自ノード内の他の共有キャッシュにある場合には、メモリデータを高速に要求元の共有キャッシュに転送するので、分散共有メモリ型並列計算機システムの性能を向上することができるという効果を奏する。
【００３５】
また、請求項５の発明によれば、ロック制御のためにキャッシュラインの更新状態を管理するテーブルを別に持つことを不要とするので、そのテーブルに必要なメモリを不要とすることができるという効果を奏する。さらにそのテーブルを検索するコストを不要とする効果を奏する。
【００３６】
また、請求項６の発明によれば、メモリデータ受信通知を不要とし、コヒーレンス制御を高速化するので、分散共有メモリ型並列計算機システムの性能を向上することができるという効果を奏する。
【発明を実施するための最良の形態】
【００３７】
以下に添付図面を参照して、この発明に係るキャッシュコヒーレンス管理装置およびキャッシュコヒーレンス管理方法の好適な実施例を詳細に説明する。
【実施例】
【００３８】
まず、本実施例に係る分散共有メモリ型並列計算機システムの構成について説明する。図１は、本実施例に係る分散共有メモリ型並列計算機システムの構成を示す機能ブロック図である。
【００３９】
同図に示すように、この分散共有メモリ型並列計算機システムは、ノードＡ、ノードＢ、ノードＣおよびノードＤがノード間ネットワーク３０に接続されて構成される。各ノードは、４台のＳＭＰ(shared multiprocessor)１０と、ＳＭＰ１０を接続するノード内ネットワーク２０と、ノード内ネットワーク２０を介してＳＭＰ１０に接続され、ノード単位でキャッシュのコヒーレンスを管理するコヒーレンスコントローラ１００とを有する。なお、ノード内ネットワーク２０の代わりにバスを用いてＳＭＰ１０およびコヒーレンスコントローラ１００を接続することもできる。
【００４０】
各ＳＭＰ１０は、一つ以上のプロセッサを有するＣＰＵ部１１と、共有キャッシュ１２と、インターリーブされたメモリ１３とを有する。ここで、共有キャッシュ１２は、階層化されたキャッシュの最下層、すなわちメモリ１３に最も近いキャッシュであり、キャッシュコヒーレンスの対象となるキャッシュである。
【００４１】
なお、ここでは説明の便宜上、各ノードは４台のＳＭＰ１０から構成され、分散共有メモリ型並列計算機システムは４台のノードから構成される場合について説明するが、各ノードをより多くのＳＭＰ１０から構成し、分散共有メモリ型並列計算機システムをより多くのノードから構成することもできる。
【００４２】
コヒーレンスコントローラ１００は、各ノードのそれぞれの共有キャッシュ１２に１対１に対応するディレクトリ１１０を有する。すなわち、このコヒーレンスコントローラ１００は、４（ノード数）×４（共有キャッシュ数）＝１６個のディレクトリ１１０を有する。
【００４３】
そして、これらのディレクトリ１１０には、自ノードにあるメモリ１３のコピーであるメモリデータと、他ノードのメモリ１３のコピーであるメモリデータとについての情報が含まれる。なお、他ノードの共有キャッシュ１２に対応する各ディレクトリ１１０には、自ノードのメモリのメモリデータのコピーに関する情報だけが含まれる。すなわち、対応する共有キャッシュ１２のタグテーブルのサブセットとなる。
【００４４】
このように、本実施例に係る分散共有メモリ型並列計算機システムでは、各ノードのコヒーレンスコントローラ１００が全てのノードの全ての共有キャッシュ１２に１対１に対応するディレクトリ１１０を有することによって、ディレクトリ１１０のエントリの競合の発生を防ぎ、コヒーレンス制御を容易にするとともに高速化することができる。
【００４５】
このようなディレクトリの構成は、最新のテクノロジにより、微細化の技術が進み、ノードのディレクトリ全体を、高速ＲＡＭに搭載することが可能になっているので、実現可能であり、今後はさらに実現が容易になる。
【００４６】
また、本実施例に係る分散共有メモリ型並列計算機システムでは、ＳＭＰ１０をノード内ネットワーク２０で接続することによって、ＳＭＰ１０はコヒーレンスコントローラ１００を介することなく同じノードに属する他のＳＭＰ１０と通信することができ、ノード内のＳＭＰ１０間の通信を高速化することができる。
【００４７】
なお、本実施例では、あるメモリデータに対し、そのメモリアドレスで特定されるメモリデータを、ノード内のメモリ１３に含むノードをホームノードと呼び、共有キャッシュ１２のヒット／ミスヒットにより、ノード間に何らかの要求を出した要求元のノードをローカルノードと呼び、ホームノードでもローカルノードでもなく、要求されたメモリデータのコピーをキャッシュに持つ第３のノード（群）をリモートノードと呼ぶこととする。
【００４８】
次に、本実施例に係るコヒーレンスコントローラ１００の構成について説明する。図２は、本実施例に係るコヒーレンスコントローラ１００の構成を示す機能ブロック図である。同図に示すように、このコヒーレンスコントローラ１００は、１６個のディレクトリ１１０と、ノード内ネットワークインタフェース１２０と、ノード間ネットワークインタフェース１３０と、入力要求バッファ１４０と、コヒーレンス制御部１５０ａ〜１５０ｄと、出力要求バッファ１６０と、データ転送制御部１７０とを有する。
【００４９】
ディレクトリ１１０は、各ノードの各共有キャッシュ１２に対応してキャッシュの情報を記憶する記憶部である。図３は、ディレクトリ１１０の構成を示す図である。同図は、サイズが４メガバイト、ラインサイズが２５６バイト、サブラインサイズが６４バイトの４ウェイ・セットアソシアティブの共有キャッシュ１２に対応するディレクトリ１１０を示し、エントリ数は４Ｋ個である。
【００５０】
各エントリは、エントリの有効／無効を示すビット、キャッシュタグテーブルに格納されているタグと一致し、キャッシュに含まれるデータを特定するのに使うｔａｇ、サブラインごとのキャッシュの状態を示すｓｕｂ０〜ｓｕｂ３から構成される。
【００５１】
ここで、エントリに含まれるキャッシュの状態を示す情報には、キャッシュの内容が無効であることを示すInvalid、キャッシュにあるデータコピーを他のキャッシュが同時に持ちうることを示すShare、キャッシュの内容が修正されており同じデータコピーを他のキャッシュが同時に持つことがない状態を示すModifyの他に、そのエントリが管理しているメモリアドレスにあるデータブロックについて更新中であることを示すUpdating（”更新中”）がある。
【００５２】
この”更新中”の状態は、複数の独立した処理があるエントリに同時にアクセスすることをロックするなどの制御のために従来はディレクトリ１１０以外のテーブルなどで管理されていた情報であり、この”更新中”の状態をディレクトリ１１０のキャッシュの状態に含めることによって、ディレクトリ１１０だけでロック制御などを行うことができる。
【００５３】
また、この”更新中”をディレクトリ１１０内のキャッシュの状態として新たに設けることによって、状態責任をホームノードだけで持つ、あるいは状態責任をローカルノードだけで持つ、という規則を緩め、ホームノードとローカルノードに特定の条件にしたがって状態更新の責任を付け替えることができ、コヒーレンス制御を高速化することができる。
【００５４】
図４は、ディレクトリ１１０内のキャッシュの状態として”更新中”を設けることによるコヒーレンス制御の高速化を説明するための説明図である。同図は、キャッシュミスによってローカルノードがキャッシュへのデータのストアをホームノードに要求した場合に、ホームノードが状態更新の責任を持つ従来の方式におけるシーケンスを示している。
【００５５】
同図に示すように、ローカルノードでキャッシュミスが発生すると、ローカルノードのコヒーレンスコントローラ（ＣＣ−Ａ）は、ノード間ネットワークを介してホームノードのコヒーレンスコントローラ（ＣＣ−Ｂ）にデータを要求する。すると、コヒーレンスコントローラ（ＣＣ−Ｂ）は、要求されたデータに対応するディレクトリのエントリに対する他の操作をロックするために、該当メモリデータの状態を”更新中”に設定し、データの転送元を自コヒーレンスコントローラの全ディレクトリ情報を参照して決め、この例の場合はホームノードのキャッシュからデータを転送することを決め、データを転送元に指定されたキャッシュから読み出して、ノード間ネットワークを介してコヒーレンスコントローラ（ＣＣ−Ａ）に送信する。ただし、従来の方式では、コヒーレンスコントローラ（ＣＣ−Ｂ）は、データ転送をした時点では、メモリデータのキャッシュへのコピーが完了するまで、更新中のステート（状態）を保持している。また、従来の方式では、ロック制御のための該当メモリの状態は、ディレクトリ内のキャッシュの状態とは別に管理する。
【００５６】
そして、ローカルノードのコヒーレンスコントローラ（ＣＣ−Ａ）は、コヒーレンスコントローラ（ＣＣ−Ｂ）からのデータの受信を完了し、要求元のキャッシュへデータを書き込むと、ノード間ネットワークを経由してホームノードのコヒーレンスコントローラ（ＣＣ−Ｂ）にデータの受信完了を通知する。そして、ホームノードのコヒーレンスコントローラ（ＣＣ−Ｂ）は、受信完了通知を受け取ると、該当メモリデータの状態を”更新中”から”更新中でない”へ変更する。
【００５７】
これに対して、本実施例に係るコヒーレンスコントローラ１００は、ディレクトリ１１０内のキャッシュの状態としてエントリが”更新中”であることを管理し、ノード間のデータ転送処理中は、ローカルノードでエントリの状態を管理する。ホームノードのコヒーレンスコントローラ（ＣＣ−Ｂ）は、データの要求を受け取ったときに、キャッシュミス元のキャッシュの該当データブロックを“更新中”に設定しても、コヒーレンスコントローラ（ＣＣ−Ａ）へのデータの送信を完了した時点で、ディレクトリ１１０内のキャッシュの状態を”更新中”から”更新中でない”に変更することができる。その理由は、ローカルノードのディレクトリ１１０には、対応するキャッシュの状態が”更新中”に設定されているので、状態更新の責任をローカルノードに持たせることができるためである。
【００５８】
具体的には、ホームノードのコヒーレンスコントローラ（ＣＣ−Ｂ）は、ローカルノードがデータのストアを要求しているケースでは、その要求に関する一連の処理で、メモリ１３の更新が発生するか、ローカルノードのキャッシュでラインの追い出しが行われるか、または、リモートノードの対応するディレクトリ１１０に状態の変更を伴うものがある場合には、ライトバックが終了するまで、ラインの追い出しが終了まで、または、リモートノードに必要な要求を出して処理確定通知がくるまで、ディレクトリ１１０のライトバック／状態更新に対応するキャッシュの状態を”更新中”とし、ライトバックが終了、ラインの追い出しが終了、または、リモートノードから処理確定通知がくると、状態を”共有”に変更する。
【００５９】
一方、メモリ１３の更新も発生せず、かつ、ラインの追い出しも発生せず、リモートノードの対応するディレクトリ１１０に状態の変更を伴うものもない場合には、データの送信元のキャッシュからデータを読み出して、ローカルノードのコヒーレンスコントローラ（ＣＣ−Ａ）へのデータの送信を完了した時点で、データ読み出し元のキャッシュをもつノード（例の場合はホームノード）のディレクトリ１１０の対応するキャッシュの状態を”更新中”から”共有”に変更する。
【００６０】
この結果、ローカルノードのコヒーレンスコントローラ（ＣＣ−Ａ）は、ノード間ネットワーク３０を経由してホームノードのコヒーレンスコントローラ（ＣＣ−Ｂ）にデータの受信完了を通知する必要がなくなる。
【００６１】
このように、本実施例に係るコヒーレンスコントローラ１００は、ディレクトリ１１０内のキャッシュの状態として”更新中”を設けることによって、ノード間の通信を減らすとともに、キャッシュの状態確定を早くすることができ、分散共有メモリ型並列計算機システム全体として、性能を向上することができる。
【００６２】
図２に戻って、ノード内ネットワークインタフェース１２０は、ノード内ネットワーク２０とのインタフェースであり、ノード間ネットワークインタフェース１３０は、ノード間ネットワーク３０とのインタフェースである。
【００６３】
入力要求バッファ１４０は、ノード内ネットワークインタフェース１２０を介してＳＭＰ１０から送られてくる要求およびノード間ネットワークインタフェース１３０を介して他のノードから送られてくる要求を格納するバッファである。
【００６４】
コヒーレンス制御部１５０ａ〜１５０ｄは、ディレクトリ１１０を用いてコヒーレンス制御に関する処理を行うパイプラインである。すなわち、コヒーレンス制御部１５０ａ〜１５０ｄは、入力要求バッファ１４０から要求を取り出して処理を行い、ＳＭＰ１０や他のノードに対する要求を作成し、出力要求バッファ１６０へ出力する。また、このコヒーレンス制御部１５０ａ〜１５０ｄは、必要に応じて、ディレクトリ１１０に対する操作を行う。
【００６５】
パイプラインの本数、段数、一つのパイプラインがアクセスするディレクトリ１１０の数、ディレクトリ検索の仕組みは、適宜選択することができる。例えば、ここでは、コヒーレンス制御部１５０ａ〜１５０ｄは、それぞれ、ノードＡ〜ノードＤの共有キャッシュ１２に対する操作を行う。
【００６６】
また、図５に示すように、ディレクトリ１１０のエントリをメモリアドレスでインターリーブし、ディレクトリアクセスを並列化することによって、ディレクトリ検索を高速化している。また、ディレクトリを特定できる情報を含む要求パケットに関しては、関連するパイプラインだけを使い、必要な処理だけを行う。なお、ディレクトリを特定できる情報を含む要求パケットの詳細については後述する。
【００６７】
出力要求バッファ１６０は、ノード内ネットワークインタフェース１２０を介してＳＭＰ１０へ送信する要求およびノード間ネットワークインタフェース１３０を介して他のノードへ送信する要求を格納するバッファである。
【００６８】
データ転送制御部１７０は、他のノードとの間でのキャッシュデータの転送を制御する処理部であり、転送中のデータを蓄えるバッファを有する。
【００６９】
次に、ノード内のキャッシュデータの転送について図６を用いて説明する。図６は、ＳＭＰ１０が有する共有キャッシュ１２の構成を示す機能ブロック図である。同図に示すように、この共有キャッシュ１２は、キャッシュメモリ部１２ａと、キャッシュタグ部１２ｂと、一時バッファ１２ｃと、制御部１２ｄとを有する。
【００７０】
キャッシュメモリ部１２ａは、メモリデータコピーを格納する記憶部であり、キャッシュタグ部１２ｂは、キャッシュメモリ部１２ａに格納されたデータに対応するタグとメモリデータコピーの状態を記憶する記憶部である。一時バッファ１２ｃは、キャッシュメモリ部１２ａから読み出されたデータを一時的に記憶するバッファである。
【００７１】
制御部１２ｄは、共有キャッシュ１２を制御する処理部であり、一時バッファ１２ｃおよびノード内ネットワーク２０を用いてノード内の他の共有キャッシュ１２に高速にデータを転送する。
【００７２】
具体的には、共有キャッシュ１２でミスヒットが発生すると、ミスヒットを起こしたキャッシュの制御部１２ｄは、自ノード内の共有キャッシュ１２に、該当するメモリデータが存在するかどうかを確認するようにブロードキャストすると同時に、コヒーレンスコントローラ１００に、データのストア要求を出す。ＳＭＰ１０から共有キャッシュ１２へのデータコピーのストア要求を受け取ると、コヒーレンスコントローラ１００は、ホームノードのコヒーレンスコントローラ１００にストア要求を出し、並行して自ノード内の共有キャッシュ１２に該当するデータコピーが存在するかどうかを確認し、複数存在する場合はその中の１つを選び、１つのみ存在する場合はその共有キャッシュ１２に対して、データを一時バッファ１２ｃからミスヒットを起こした共有キャッシュ１２に転送するように指示を出し、それ以外にデータコピーを持っていた共有キャッシュ１２に対して、読み出しのキャンセルか読み出したデータの廃棄を指示する。
【００７３】
すると、制御部１２ｄは、該当するメモリデータが存在するかどうかを確認し、存在する場合には、キャッシュメモリ部１２ａからデータを読み出して一時バッファ１２ｃに仮置きする。また、コヒーレンスコントローラ１００は、自ノードの共有キャッシュ１２に対応するディレクトリ１１０を検索し、該当するメモリデータが自ノード内の共有キャッシュ１２に存在する場合には、該当するメモリデータを有するいずれかの共有キャッシュ１２に対してデータの転送を指示し、他の共有キャッシュ１２に対しては仮置き解除を指示するのは、上述したとおりである。
【００７４】
すると、コヒーレンスコントローラ１００から転送指示を受けた共有キャッシュ１２の制御部１２ｄは、一時バッファ１２ｃからデータを読み出してノード内ネットワーク２０を用いて他の共有キャッシュ１２にデータを転送する。また、他の共有キャッシュ１２は、コヒーレンスコントローラ１００から仮置き解除指示を受けて、一時バッファ１２ｃの仮置きを解除する。
【００７５】
このように、コヒーレンスコントローラ１００が、ホームノードのコヒーレンスコントローラ１００にストア要求を出す処理と並行して、自ノード内の共有キャッシュ１２に、該当するデータがあるか否かの確認を指示し、確認の指示を受けた共有キャッシュ１２が、該当するデータがある場合にはそのデータを先読みして一時バッファに格納し、コヒーレンスコントローラ１００から転送指示があるとノード内ネットワーク２０を用いて他の共有キャッシュ１２にデータを転送することによって、共有キャッシュ１２でミスヒットが発生し、同一ノード内の他の共有キャッシュ１２に該当するデータがある場合に、ストア要求元の共有キャッシュ１２へのデータの転送を高速に行うことができる。
【００７６】
なお、ここでは、自ノード内の共有キャッシュ１２に、該当するメモリデータが存在するかどうかを確認するようにブロードキャストする場合について説明したが、コヒーレンスコントローラ１００は、自ノードのディレクトリ１１０を検索して特定の共有キャッシュ１２を選択し、選択した共有キャッシュ１２にだけ該当データの先読みを指示することもできる。
【００７７】
次に、コヒーレンスコントローラ１００の処理手順について図７〜図１０を用いて説明する。なお、ここでは、共有キャッシュ１２でミスヒットが発生し、ＳＭＰ１０からメモリデータの共有キャッシュ１２へのストア要求を受けた場合のコヒーレンスコントローラ１００の処理を中心に説明する。
【００７８】
図７は、コヒーレンスコントローラ１００によるＳＭＰ１０からの要求に対する処理の処理手順を示すフローチャートである。同図に示すように、コヒーレンスコントローラ１００は、ノード内ネットワーク２０を介してＳＭＰ１０から要求を受け取ると（ステップＳ１０１）、受け取った要求がデータ転送であるか否かを判定する（ステップＳ１０２）。
【００７９】
その結果、受け取った要求がデータ転送である場合には、データの転送処理を行い（ステップＳ１０３）、ノード間ネットワーク３０へデータを送出する（ステップＳ１１１）。
【００８０】
一方、受け取った要求がデータ転送でない場合には、要求を入力要求バッファ１４０へ格納する（ステップＳ１０４）。そして、入力要求バッファ１４０から要求を取り出して新規要求系であるか否かを判定し（ステップＳ１０５）、新規要求系でない場合には、応答処理を行い（ステップＳ１０６）、ステップＳ１１０へ進む。
【００８１】
また、入力要求バッファ１４０から取り出した要求が新規要求系である場合には、要求がフェッチミスヒットによるストア要求であるか否かを判定し（ステップＳ１０７）、フェッチミスヒットによるストア要求である場合には、共有キャッシュ１２から該当データのプリフェッチを行う処理のため、自ノードディレクトリを検索し、該当するメモリデータコピーが、自ノード内にみつかった場合は、そのデータをつかったプリフェッチを指示する（ステップＳ１０８）。また、メモリデータ要求を作成するメモリデータ要求作成処理を行い（ステップＳ１０９）、作成した要求を出力要求バッファ１６０へ格納する（ステップＳ１１０）。
【００８２】
そして、出力要求バッファ１６０から要求を取り出してノード間ネットワーク３０へ送出し、要求したメモリデータのコピーをもつキャッシュが存在した場合は、出力要求バッファ１６０から要求を取り出してノード内ネットワーク２０へ送出する（ステップＳ１１１）。
【００８３】
また、入力要求バッファ１４０から取り出した要求がフェッチミスヒットによるストア要求でない場合には、データストアミスヒットに基づく要求であるか否かを判定し（ステップＳ１１２）、データストアミスヒットに基づく要求である場合には、要求元キャッシュラインの状態解析と、状態別データ要求を作成し（ステップＳ１１３）、ステップＳ１１０へ進む。
【００８４】
また、入力要求バッファ１４０から取り出した要求がデータストアミスヒットに基づく要求でない場合には、ラインのリプレース要求であるか否かを判定し（ステップＳ１１４）、ラインのリプレース要求である場合には、リプレース要求を作成し（ステップＳ１１５）、ラインのリプレース要求でない場合には、特殊処理を行う（ステップＳ１１６）。そして、ステップＳ１１０へ進む。
【００８５】
次に、ステップＳ１０９のメモリデータ要求作成処理について説明する。図８は、メモリデータ要求作成処理の処理手順を示すフローチャートである。同図に示すように、このメモリデータ要求作成処理では、コヒーレンスコントローラ１００は、ＳＭＰ１０が要求しているメモリデータは、他のノード内のメモリ１３のものであるか否かを判定する（ステップＳ２０１）。
【００８６】
その結果、他のノード内のメモリ１３のものである場合には、自ノードのディレクトリ１１０を検索し（ステップＳ２０２）、ＳＭＰ１０が要求したメモリデータを持つキャッシュラインが自ノード内にあるか否かを判定する（ステップＳ２０３）。
【００８７】
その結果、自ノード内にない場合には、ホームノードへのデータの転送要求を作成し（ステップＳ２０４）、自ノード内にある場合には、該当するラインの状態が”更新中”のものがあるか否かを判定し（ステップＳ２０５）、”更新中”のものがない場合には、自ノード内の他の共有キャッシュ１２のデータを利用できるので、自ノード内の共有キャッシュ１２間でデータを供給できる条件付のホームノードへのデータの転送要求を作成し（ステップＳ２０６）、”更新中”のものがある場合には、更新処理が完了するのを待つ必要があるので、所定の時間経過後に再試行するアボート処理を行う（ステップＳ２０７）。
【００８８】
一方、ＳＭＰ１０が要求しているメモリデータが他のノード内のメモリ１３のものでない場合には、全ディレクトリ１１０を検索し（ステップＳ２０８）、ＳＭＰ１０が要求したメモリデータのコピーを持つキャッシュラインがあるか否かを判定する（ステップＳ２０９）。
【００８９】
その結果、ＳＭＰ１０が要求したメモリデータのコピーを持つキャッシュラインがある場合には、該当するラインの状態が”更新中”のものがあるか否かを判定し（ステップＳ２１０）、”更新中”のものがある場合には、更新処理が完了するのを待つ必要があるので、所定の時間経過後に再試行するアボート処理を行い（ステップＳ２０７）、”更新中”のものがない場合には、Dirtyのライン（メモリにあるデータと一致しない最新のデータをもつキャッシュ）があるか否かを判定する（ステップＳ２１１）。
【００９０】
そして、Dirtyのラインがない場合には、アクセスレイテンシを基準に、共有キャッシュ１２間転送かメモリ読み出しかを判定し、判定結果に基づいていずれかの要求を作成し（ステップＳ２１２）、Dirtyのラインがある場合には、Dirtyデータ転送要求を作成し、必要に応じて書き戻し要求を作成する（ステップＳ２１３）。
【００９１】
また、ＳＭＰ１０が要求したメモリデータのコピーを持つキャッシュラインがない場合には、メモリ１３からの読み出し要求を作成する（ステップＳ２１４）。
【００９２】
このように、コヒーレンスコントローラ１００は、自ノード内の共有キャッシュ１２間でＳＭＰ１０が要求したメモリデータを供給できる場合には、その条件付でホームノードへのデータ転送要求を作成することによって、ホームノードのコヒーレンスコントローラ１００にローカルノード内の共有キャッシュ１２間での転送が可能であることを知らせることができる。
【００９３】
なお、ステップＳ２０７では、アボート処理として、所定の時間経過後に再試行する場合について説明したが、更新状態解除待ちバッファを設けてＳＭＰ１０からのストア要求を格納することもできる。図９は、更新状態解除待ちバッファを備えたコヒーレンスコントローラの構成を示す機能ブロック図である。同図に示すように、このコヒーレンスコントローラ２００には、図２に示したコヒーレンスコントローラ１００に更新状態解除待ちバッファ２８０が追加されている。“更新中”のステートが“更新中でない”ステートに変わったときに、そのディレクトリを保持するコヒーレンスコントローラ内の更新状態解除待ちバッファ２８０に、状態待ちリクエストがあれば、状態待ちリクエストを入力要求バッファに入れる。
【００９４】
次に、図８に示したメモリデータ要求作成処理で作成されたデータ転送要求に対する処理を中心にホームノードのコヒーレンスコントローラ１００の処理手順について説明する。図１０は、図８に示したメモリデータ要求作成処理で作成されたデータ転送要求に対する処理を中心とするホームノードのコヒーレンスコントローラ１００の処理手順を示すフローチャートである。
【００９５】
図１０に示すように、ホームノードのコヒーレンスコントローラ１００は、ノード間ネットワーク３０から要求を受け取ると（ステップＳ３０１）、受け取った要求がデータ転送であるか否かを判定する（ステップＳ３０２）。
【００９６】
その結果、受け取った要求がデータ転送である場合には、データの転送処理を行い（ステップＳ３０３）、ノード内ネットワーク２０を介してＳＭＰ１０へデータを送信する（ステップＳ３１０）。
【００９７】
一方、受け取った要求がデータ転送でない場合には、要求を入力要求バッファ１４０へ格納する（ステップＳ３０４）。そして、入力要求バッファ１４０から要求を取り出し、ローカルノード内の共有キャッシュ１２間でデータを供給できる条件付のデータ転送であるか否かを判定し（ステップＳ３０５）、条件付である場合には、全ノードのディレクトリ１１０を検索し、該当するメモリアドレスのエントリの状態を読み出し（ステップＳ３０６）、ヒットした全てのエントリの状態が”更新中”以外であるか否かを判定する（ステップＳ３０７）。
【００９８】
その結果、ヒットした全てのエントリの状態が”更新中”以外である場合には、ローカルノードへ返す応答として”先読みデータ利用可”を作成し（ステップＳ３０８）、出力要求バッファ１６０へ格納し（ステップＳ３０９）、ノード間ネットワーク３０へ送出する（ステップＳ３１０）。
【００９９】
一方、ヒットしたエントリの中に状態が”更新中”であるエントリがある場合には、先読みデータ利用不可と判定して、要求をメモリデータのストアに変更し（ステップＳ３１１）、アボート処理を行う（ステップＳ３１２）。ここで、アボート処理としては、図９に示したように更新状態解除待ちバッファ２８０に格納する、あるいは、入力要求バッファ１４０に滞留して所定の条件が満たされた場合に再試行するなどの処理がある。
【０１００】
また、ローカルノード内の共有キャッシュ１２間でデータを供給できる条件付のデータ転送でない場合には、全ノードのディレクトリ１１０を検索して該当するメモリアドレスのエントリの状態を読み出し（ステップＳ３１３）、ヒットした全てのエントリの状態が”更新中”以外であるか否かを判定する（ステップＳ３１４）。
【０１０１】
その結果、ヒットした全てのエントリの状態が”更新中”以外である場合には、要求の種別を判定し、必要な処理を決定し、ＳＭＰ１０などへの要求を作成するとともに、必要であればディレクトリ１１０の状態を操作し（ステップＳ３１５）、作成した要求を出力要求バッファ１６０へ格納し（ステップＳ３０９）、ノード内ネットワーク２０またはノード間ネットワーク３０へ送出する（ステップＳ３１０）。一方、ヒットしたエントリの中に状態が”更新中”であるエントリがある場合には、アボート処理を行う（ステップＳ３１２）。
【０１０２】
このように、ホームディレクトリのコヒーレンスコントローラ１００が、ローカルノード内の共有キャッシュ１２間でデータを供給できる条件付のデータ転送要求を受け取った場合に、全ノードのディレクトリ１１０を検索し、該当するメモリアドレスの全てのエントリの状態が”更新中”以外である場合に、ローカルノードへ”先読みデータ利用可能”を応答することによって、ローカルノード内で、先読みしたデータを用いて共有キャッシュ１２間でデータ転送を行うことができ、ストア要求に対するデータ転送を高速化することができる。
【０１０３】
次に、ノード間で転送される要求パケットについて図１１〜図１３を用いて説明する。図１１は、要求パケットのフォーマットを示す図である。同図に示すように、要求パケットには、基本情報を送るための基本情報パケットとディレクトリエントリ特定のための情報を送るためのディレクトリ特定情報パケットがある。ここで、ディレクトリ特定情報パケットは、基本情報に依存して基本情報パケットに付加される。また、ここでは、パケットが固定長である場合について説明するが、パケットを可変長とすることもできる。
【０１０４】
基本情報パケットは、タグと、オペコードと、送信元ノードＩＤと、送信先ノードＩＤと、関連ディレクトリ数と、物理アドレスとから構成される。ここで、タグは、パケットに含まれる情報の種別と、情報の位置を特定するのに利用するコードである。オペコードは、要求内容を特定するための情報である。送信元ノードＩＤは、パケットの送信元ノードを識別するための識別子であり、送信先ノードＩＤは、パケットの送信先ノードを識別するための識別子である。
【０１０５】
関連ディレクトリ数は、ディレクト特定情報パケットで送られるディレクトリ情報の数であり、ディレクトリ特定情報パケットの数は、この関連ディレクトリ数に依存する。この関連ディレクトリ数が「０」のときは、物理アドレスを使ってディレクトリ１１０の検索を行う。物理アドレスは、要求データのアドレスである。なお、これらの情報には、オペコードに依存して、存在する情報と存在しない情報がある。例えば、完了通知の場合は、物理アドレスを含まないことも可能である。
【０１０６】
ディレクトリ特定情報パケットには、タグのほかに、ノードを識別するノードＩＤと、共有キャッシュ１２を識別するキャッシュＩＤと、ウェイを識別するウェイＩＤとのセットが基本情報の関連ディレクトリ数の個数分含まれる。
【０１０７】
例えば、ローカルノードからホームノードに要求を送るときは、先読みデータの利用可否を問い合わせるときを除いて、関連ディレクトリは付かない。また、ホームノードからリモートノードに要求を送るときは、要求送出のときにすでに相手方ノードを特定しているため、ディレクトリ特定情報のノードＩＤは、空白でもよい。
【０１０８】
また、ホームノードから複数リモートノードに要求を出す場合で、ノード別に要求の特定が不要のときは、つぎの二つの要求の作り方（出し方）がある。その一つは、ホームノードが、相手先のノードごとにパケットを作成して送付する。他の一つは、相手先のノードは、ディレクトリ特定の情報で識別するものとする。ホームノードは、基本情報の送り先ノードに特殊なマークをたてて、ディレクトリ特定情報を付加した要求を一つ送り出す。関連ディレクトリ数が、関連ディレクトリ数の表示ビットで表現できないために、一つの要求に収められなければ、関連ディレクトリ数を表示可能数で割った数の要求にわけて送る。すなわち、送った要求をまとめれば、関連ディレクトリがカバーされるように要求を作る。そして、ノード間ネットワーク３０の中に、送り先の判定処理部をおき、ホームノードから出された、特殊マークつきのパケットを複数個に分割して、ディレクトリ特定情報で指定された、全てのノードに送付する。
【０１０９】
図１２は、基本情報パケットの一例を示す図であり、図１３は、ディレクトリ特定情報パケットの一例を示す図である。これらのパケットは、ホームノードＸ（ＩＤ‘００１‘）がリモートノードＹ（ＩＤ‘０１０‘）へ要求を送る場合の例を示し、要求内容は、「リモートノードＹのキャッシュ（ＩＤ‘１１‘）から、ローカルノードＺ（ＩＤ‘１００‘）にデータを転送し、ノードＹのキャッシュの状態変更はなしで、ノードＹからノードＸへ、データ送信済を知らせる情報転送は不要」である。
【０１１０】
このように、コヒーレンスコントローラ１００は、ディレクトリ１１０のエントリがどのノードのディレクトリ１１０であっても一意の情報で特定できる構造であるため、必要に応じて新規の要求パケットにディレクトリ特定情報パケットを含めることによって、新規要求に対するディレクトリ検索の頻度を減らし、処理を高速化することができる。
【０１１１】
上述してきたように、本実施例では、各ノードのコヒーレンスコントローラ１００が全てのノードの全ての共有キャッシュ１２に１対１に対応するディレクトリ１１０を有することによって、ディレクトリ１１０のエントリの競合の発生を防ぎ、コヒーレンス制御を容易にするとともに高速化することができる。
【０１１２】
また、本実施例では、ＳＭＰ１０をノード内ネットワーク２０で接続することによって、ＳＭＰ１０はコヒーレンスコントローラ１００を介することなく他のＳＭＰ１０と通信することができ、ＳＭＰ１０間の通信を高速化することができる。
【０１１３】
また、本実施例では、ディレクトリ１１０のエントリのキャッシュの状態にエントリが更新中であることを示す”更新中”の状態を設けることによって、ディレクトリ１１０だけを用いてロック制御を行うことができる。
【０１１４】
また、この”更新中”の状態をディレクトリ１１０に設けることによって、条件にあうノードに状態更新の責任を持たせることができ、従来のように、ホームノードで責任を持つ、ローカルノードで責任を持つなどの責任をもつノードを固定しないで制御でき、コヒーレンス制御を高速化することができる。
【０１１５】
また、本実施例では、コヒーレンスコントローラ１００が、ホームノードのコヒーレンスコントローラ１００にストア要求を出す処理と並行して、自ノード内の共有キャッシュ１２に、該当するデータがあるか否かの確認をし、キャッシュミスヒットを起こした共有キャッシュ１２の制御部１２ｄからブロードキャストされた要求にもとづき先読みして一時バッファ１２ｃに格納していたデータを、共有キャッシュ１２が、コヒーレンスコントローラ１００から転送指示があるとノード内ネットワーク２０を用いて、ミスヒットが発生した共有キャッシュ１２にデータを転送することによって、共有キャッシュ１２でミスヒットが発生し、同一ノード内の他の共有キャッシュ１２に該当するデータがある場合に、ストア要求元の共有キャッシュ１２へのデータの転送を高速に行うことができる。
【０１１６】
また、本実施例では、ディレクトリ１１０のエントリがどのノードのディレクトリ１１０であっても一意の情報で特定できる構造であるため、必要に応じて新規要求の要求パケットにディレクトリ特定情報パケットを含めることによって、新規要求に対するディレクトリ検索の頻度を減らし、処理を高速化することができる。
【０１１７】
なお、従来、ディレクトリ方式は、大規模の並列システムに適応されていたので、全ての共有キャッシュ１２に１対１で対応するディレクトリを各ノードに配することは、現実味がなかった。また、ビジネス系では、規模から考えてディレクトリ方式よりもスヌープ方式のほうが性能で有利といわれていたために、スヌープ方式で制御されていた。しかし、上述した構成により、ディレクトリ方式のデメリットがへり、コヒーレンス制御の性能を向上することができる。
【０１１８】
（付記１）複数のプロセッサ、複数の共有キャッシュおよび一つ以上のメモリから構成されるノードが複数個接続されて構成される分散共有メモリ型並列計算機システムのキャッシュコヒーレンスをノード単位で管理するキャッシュコヒーレンス管理装置であって、
各ノードの各共有キャッシュに１対１に対応するディレクトリを共有キャッシュの数分記憶するディレクトリ記憶手段と、
前記ディレクトリ記憶手段に記憶された複数のディレクトリを用いてキャッシュコヒーレンスの制御を行うコヒーレンス制御手段と、
を備えたことを特徴とするキャッシュコヒーレンス管理装置。
【０１１９】
（付記２）前記コヒーレンス制御手段は、他のノードのキャッシュコヒーレンスを管理するキャッシュコヒーレンス管理装置にメモリデータを新規に要求する要求パケットに前記複数のディレクトリのうちの該メモリデータに対応するディレクトリと該ディレクトリの中でメモリデータの情報を持つ箇所とを特定する情報を含めることを特徴とする付記１に記載のキャッシュコヒーレンス管理装置。
【０１２０】
（付記３）前記ノード内の複数の共有キャッシュを接続するノード内共有キャッシュ接続手段を介して該複数の共有キャッシュと接続されることを特徴とする付記１または２に記載のキャッシュコヒーレンス管理装置。
【０１２１】
（付記４）前記ノード内共有キャッシュ接続手段は、ネットワーク構成であることを特徴とする付記３に記載のキャッシュコヒーレンス管理装置。
【０１２２】
（付記５）前記ノード内共有キャッシュ接続手段は、バス接続であることを特徴とする付記３に記載のキャッシュコヒーレンス管理装置。
【０１２３】
（付記６）前記コヒーレンス制御手段は、共有キャッシュのミスヒットによって要求されたメモリデータが自ノード内の他の共有キャッシュにある場合には、該メモリデータの先読みを他の共有キャッシュに指示し、該メモリデータを記憶するメモリを備えたノードを管理するキャッシュコヒーレンス管理装置に対して自ノード内の他の共有キャッシュが先読みしたメモリデータの利用可否の問い合わせを行って利用可の応答を受けると、先読みした共有キャッシュに対して先読みしたメモリデータをミスヒットが発生した共有キャッシュにノード内共有キャッシュ接続手段を介して転送することを指示することを特徴とする付記３、４または５に記載のキャッシュコヒーレンス管理装置。
【０１２４】
（付記７）前記コヒーレンス制御手段は、前記利用可否の問い合わせを、前記メモリデータの転送要求とともに行うことを特徴とする付記６に記載のキャッシュコヒーレンス管理装置。
【０１２５】
（付記８）前記ディレクトリ記憶手段が記憶するディレクトリのエントリのキャッシュラインが管理するデータブロックの状態を示すキャッシュ状態に該キャッシュラインが更新中であることを示す更新中状態を有し、
前記コヒーレンス制御手段は、前記キャッシュ状態を用いてキャッシュラインのロック制御を行うことを特徴とする付記１〜７のいずれか一つに記載のキャッシュコヒーレンス管理装置。
【０１２６】
（付記９）他のキャッシュコヒーレンス管理装置からメモリデータを要求された場合に、データを共有キャッシュから転送する際に、転送元の共有キャッシュの該当キャッシュラインの状態に変更が生じないときは、メモリデータを要求したキャッシュコヒーレンス装置からのメモリデータ受信通知を待たずに、要求されたデータをノードの中にあるメインメモリに持つノードのディレクトリのキャッシュミスヒットを起こした共有キャッシュに対応するディレクトリの対応するエントリのキャッシュ状態を更新中状態から、キャッシュミスヒットを起こした共有ｃキャッシュがデータ格納後に移行する状態に、予め設定することを特徴とする付記８に記載のキャッシュコヒーレンス管理装置。
【０１２７】
（付記１０）前記コヒーレンス制御手段は、前記ディレクトリのエントリを決めるメモリアドレスでインターリーブされた要求をそれぞれ扱う複数のパイプラインによってキャッシュコヒーレンスの制御を行うことを特徴とする付記１〜９のいずれか一つに記載のキャッシュコヒーレンス管理装置。
【０１２８】
（付記１１）複数のプロセッサ、複数の共有キャッシュおよび一つ以上のメモリを有し、かつ、ネットワークによって複数個が接続されることによって分散共有メモリ型並列計算機システムを構成するマルチプロセッサ装置であって、
前記複数の共有キャッシュを接続する共有キャッシュ接続手段と、
前記共有キャッシュ接続手段を介して前記複数の共有キャッシュと接続するコヒーレンス管理手段と、
を備えたことを特徴とするマルチプロセッサ装置。
【０１２９】
（付記１２）複数のプロセッサ、複数の共有キャッシュおよび一つ以上のメモリから構成されるノードが複数個接続されて構成される分散共有メモリ型並列計算機システムのキャッシュコヒーレンスをノード単位で管理するキャッシュコヒーレンス管理方法であって、
共有キャッシュに関する要求を受信し、該受信した要求が共有キャッシュへのストア要求であるか否かを判定する要求判定工程と、
前記要求判定工程によりストア要求であると判定された場合に、各ノードの各共有キャッシュに１対１に対応するディレクトリを共有キャッシュの数分記憶するディレクトリ記憶装置を用いて該ストア要求に対するキャッシュコヒーレンスの制御を行うコヒーレンス制御工程と、
を含んだことを特徴とするキャッシュコヒーレンス管理方法。
【０１３０】
（付記１３）前記コヒーレンス制御工程は、他のノードのキャッシュコヒーレンスを管理するキャッシュコヒーレンス管理装置にメモリデータを新規に要求する要求パケットに、前記ディレクトリ記憶装置に記憶する複数のディレクトリのうちの該メモリデータに対応するディレクトリと該ディレクトリの中でメモリデータの情報を持つ箇所とを特定する情報を含めることを特徴とする付記１２に記載のキャッシュコヒーレンス管理方法。
【０１３１】
（付記１４）前記ノード内の複数の共有キャッシュを接続するノード内共有キャッシュ接続手段を介して前記ストア要求を受信するストア要求受信工程をさらに含んだことを特徴とする付記１２または１３に記載のキャッシュコヒーレンス管理方法。
【０１３２】
（付記１５）前記ノード内共有キャッシュ接続手段は、ネットワーク構成であることを特徴とする付記１４に記載のキャッシュコヒーレンス管理方法。
【０１３３】
（付記１６）前記ノード内共有キャッシュ接続手段は、バス接続であることを特徴とする付記１４に記載のキャッシュコヒーレンス管理方法。
【０１３４】
（付記１７）前記コヒーレンス制御工程は、共有キャッシュのミスヒットによって要求されたメモリデータが自ノード内の他の共有キャッシュにある場合には、該メモリデータの先読みを他の共有キャッシュに指示し、該メモリデータを記憶するメモリを備えたノードを管理するキャッシュコヒーレンス管理装置に対して自ノード内の他の共有キャッシュが先読みしたメモリデータの利用可否の問い合わせを行って利用可の応答を受けると、先読みした共有キャッシュに対して先読みしたメモリデータをミスヒットが発生した共有キャッシュにノード内共有キャッシュ接続手段を介して転送することを指示することを特徴とする付記１４、１５または１６に記載のキャッシュコヒーレンス管理方法。
【０１３５】
（付記１８）前記コヒーレンス制御工程は、前記利用可否の問い合わせを、前記メモリデータの転送要求とともに行うことを特徴とする付記１７に記載のキャッシュコヒーレンス管理方法。
【０１３６】
（付記１９）前記ディレクトリ記憶装置が記憶するディレクトリのエントリのキャッシュラインの状態を示すキャッシュ状態に該キャッシュラインが更新中であることを示す更新中状態を有し、
前記コヒーレンス制御工程は、前記キャッシュ状態を用いてキャッシュラインのロック制御を行うことを特徴とする付記１２〜１８のいずれか一つに記載のキャッシュコヒーレンス管理方法。
【０１３７】
（付記２０）前記コヒーレンス制御工程は、前記ディレクトリのエントリを決めるメモリアドレスでインターリーブされた要求をそれぞれ扱う複数のパイプラインによってキャッシュコヒーレンスの制御を行うことを特徴とする付記１２〜１９のいずれか一つに記載のキャッシュコヒーレンス管理方法。
【産業上の利用可能性】
【０１３８】
以上のように、本発明に係るキャッシュコヒーレンス管理装置およびキャッシュコヒーレンス管理方法は、分散共有メモリ型並列計算機システムに有用であり、特に、ビジネス系の分散共有メモリ型並列計算機システムに適している。
【図面の簡単な説明】
【０１３９】
【図１】本実施例に係る分散共有メモリ型並列計算機システムの構成を示す機能ブロック図である。
【図２】本実施例に係るコヒーレンスコントローラ１００の構成を示す機能ブロック図である。
【図３】ディレクトリ１１０の構成を示す図である。
【図４】ディレクトリ１１０内のキャッシュの状態として”更新中”を設けることによるコヒーレンス制御の高速化を説明するための説明図である。
【図５】ディレクトリ１１０のエントリをメモリアドレスでインターリーブすることによるディレクトリアクセスの並列化を説明するための説明図である。
【図６】ＳＭＰ１０が有する共有キャッシュ１２の構成を示す機能ブロック図である。
【図７】コヒーレンスコントローラ１００によるＳＭＰ１０からの要求に対する処理の処理手順を示すフローチャートである。
【図８】メモリデータ要求作成処理の処理手順を示すフローチャートである。
【図９】更新状態解除待ちバッファを備えたコヒーレンスコントローラの構成を示す機能ブロック図である。
【図１０】図８に示したメモリデータ要求作成処理で作成されたデータ転送要求に対する処理を中心とするホームノードのコヒーレンスコントローラ１００の処理手順を示すフローチャートである。
【図１１】要求パケットのフォーマットを示す図である。
【図１２】基本情報パケットの一例を示す図である。
【図１３】ディレクトリ特定情報パケットの一例を示す図である。
【図１４】メインメモリベースのディレクトリを示す図である。
【図１５】スパースディレクトリを示す図である。
【図１６】ＣＣＲディレクトリを示す図である。
【図１７】ＣＣＲディレクトリを備えた分散共有メモリ型並列計算機システムを示す図である。
【符号の説明】
【０１４０】
１０    ＳＭＰ
１１    ＣＰＵ部
１２    共有キャッシュ
１２ａ    キャッシュメモリ部
１２ｂ    キャッシュタグ部
１２ｃ    一時バッファ
１２ｄ    制御部
１３    メモリ
２０    ノード内ネットワーク
３０    ノード間ネットワーク
１００，２００    コヒーレンスコントローラ
１１０    ディレクトリ
１２０    ノード内ネットワークインタフェース
１３０    ノード間ネットワークインタフェース
１４０    入力要求バッファ
１５０ａ〜１５０ｄ    コヒーレンス制御部
１６０    出力要求バッファ
１７０    データ転送制御部
２８０    更新状態解除待ちバッファ
３１０    メインメモリ
３２０    メモリディレクトリ
３３０    スパースディレクトリ
【図１】
2006293550.tif 000003
【図２】
2006293550.tif 000004
【図３】
2006293550.tif 000005
【図４】
2006293550.tif 000006
【図５】
2006293550.tif 000007
【図６】
2006293550.tif 000008
【図７】
2006293550.tif 000009
【図８】
2006293550.tif 000010
【図９】
2006293550.tif 000011
【図１０】
2006293550.tif 000012
【図１１】
2006293550.tif 000013
【図１２】
2006293550.tif 000014
【図１３】
2006293550.tif 000015
【図１４】
2006293550.tif 000016
【図１５】
2006293550.tif 000017
【図１６】
2006293550.tif 000018
【図１７】
2006293550.tif 000019