(57)【要約】      （修正有）【課題】実装のために必要なハードウェア量を少なくし、ソフトウェアによる情報のリセットが不要なディレクトリを持つマルチプロセッサシステムを実現する。【解決手段】データを格納する主記憶装置１４０と、主記憶装置内のデータのコピーを保持するキャッシュ１２０と、主記憶装置又はキャッシュをアクセスしてデータを処理するＣＰＵ１１０とを有する複数のノード（１００〜４００）がそれぞれ結合される主記憶共有型マルチプロセッサにおいて、各ノードは、自ノードの主記憶装置内にあるメモリのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごとに、該当するメモリ群の一部のコピーが他ノードのキャッシュ内に存在する可能性があることを示すディレクトリ・ビットが割り当てられる。【選択図】図１
2005234854.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する主記憶装置と、該主記憶装置内のデータのコピーを保持するキャッシュと、該主記憶装置又は該キャッシュをアクセスしてデータを処理するＣＰＵとを有する複数のノードがそれぞれ結合され、該ノード間でキャッシュのコヒーレンシ保証制御が行われる主記憶共有型マルチプロセッサにおいて、
該各ノードは、自ノードの主記憶装置内にあるメモリのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごとに、該当するメモリ群の一部のコピーが他ノードのキャッシュ内に存在する可能性があることを示すディレクトリ・ビットが割り当てられ、
該ノードが主記憶装置をアクセスする際に、アクセスするメモリに該当するディレクトリ・ビットを検査し、該ディレクトリ・ビットのうち既にセットされているものがある場合には他のノードに対してアクセス・アドレスをマルチキャスト又はブロードキャストすることによりコヒーレンシ保証制御を行い、ディレクトリ・ビットがセットされていない場合にはコヒーレンシ保証制御を行わず、
該キャッシュのコヒーレンシ保証制御が行われる場合、各ノード内の全てのキャッシュの状態を検査し、コヒーレンシ保証制御の対象となっているメモリが対応するのと同一のディレクトリ・ビットに対応するメモリ群のコピーが各ノード内のキャッシュ内に無いことを検出して、該ディレクトリ・ビットをリセットすることを特徴とする主記憶共有型マルチプロセッサ。
【請求項２】
前記ディレクトリ・ビットとして、１ビットが割り当てられることを特徴とする請求項１記載の主記憶共有型マルチプロセッサ。
【請求項３】
複数Ｎ個のノードから構成され、前記ディレクトリ・ビットとして、Ｎビットが割り当てられることを特徴とする請求項１記載の主記憶共有型マルチプロセッサ。
【請求項４】
データを格納する主記憶装置と、該主記憶装置内のデータのコピーを保持するキャッシュと、該主記憶装置又は該キャッシュをアクセスしてデータを処理するＣＰＵとを有する複数Ｎのノードがそれぞれ結合され、かつ全てのノードは複数Ｍのノード群に分けて定義され、該ノード間でキャッシュのコヒーレンシ保証制御が行われる主記憶共有型マルチプロセッサにおいて、
該各ノードは、自ノード群の主記憶装置内にあるメモリのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごとに、該当するメモリ群の一部のコピーが他のあるノード群のキャッシュ内に存在する可能性があることを示すディレクトリ・ビットがＭビット割り当てられ、
主記憶のコピーがあるノードのキャッシュ内に作られる場合に、コピーされたメモリに該当するＭビットのディレクトリ・ビットのうち、そのノードが属するノード群に対応する該ディレクトリ・ビットがセットされ、
ノードが主記憶をアクセスする際に、アクセスするメモリに該当するディレクトリ・ビットを検査し、既にセットされているビットがある場合にはアクセス・アドレスを他のノード群に対してブロードキャストし、又はディレクトリ・ビットが示すノード群に対してマルチキャストしてコヒーレンシ保証制御を行い、該ディレクトリ・ビットがセットされていない場合にはコヒーレンシ保証制御を行なわず、
該コヒーレンシ保証制御が行われる場合、関係するノード群内のキャッシュの状態を検査し、コヒーレンシ保証制御の対象となっているメモリが対応するのと同一のディレクトリ・エントリに対応するメモリ群のコピーがあるノード群内のキャッシュに無いことを検出して、該ディレクトリ・エントリの該ノード群に対応するビットをリセットすることを特徴とする主記憶共有型マルチプロセッサ。
【請求項５】
該ディレクトリ・ビットは、システムの初期化時にリセットされ、該主記憶装置の該当する部分のコピーがキャッシュ内に生成される時にセットされることを特徴とする請求項１乃至４のいずれかに記載の主記憶共有型マルチプロセッサ。
【請求項６】
請求項１乃至５のいずれかに記載の主記憶共有型マルチプロセッサにおける各ノードに実装されるディレクトリ。
【請求項７】
データを格納する主記憶装置と、該主記憶装置内のデータのコピーを保持するキャッシュと、該主記憶装置又は該キャッシュをアクセスしてデータを処理するＣＰＵとを有する複数のノードがそれぞれ結合されたマルチプロセッサシステムにおけるノード間のキャッシュ・コヒーレンシ保証制御方法であって、
各ノードは、自ノードの主記憶装置内にあるメモリのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごとに、該当するメモリ群の一部のコピーが他ノードのキャッシュ内に存在する可能性があることを示すディレクトリ・ビットを割り当てるステップと、
あるノードが主記憶装置をアクセスする際に、アクセスするメモリに該当するディレクトリ・ビットをセットする前にディレクトリ・ビットがセットされているか否かを検査するステップと、
該検査の結果、該ディレクトリ・ビットのうちセットされているビットがある場合には他のノードに対してアクセス・アドレスをマルチキャスト又はブロードキャストすることによりコヒーレンシ保証制御を行い、ディレクトリ・ビットがセットされていない場合にはコヒーレンシ保証制御を行わないステップと、
該キャッシュのコヒーレンシ保証制御を行う時、各ノード内の全てのキャッシュの状態を検査し、コヒーレンシ保証制御の対象となっているメモリが対応するのと同一のディレクトリ・ビットに対応するメモリ群のコピーが各ノード内のキャッシュ内に無いことを検出して、該ディレクトリ・ビットをリセットするステップと、
を有することを特徴とするコヒーレンシ保証制御方法。
【請求項８】
該主記憶装置の該当する部分のコピーがキャッシュ内に生成される時に該ディレクトリ・ビットをセットするステップを有することを特徴とする請求項７記載のコヒーレンシ保証制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチプロセッサシステムに係り、特に主記憶共有型の並列計算機システムに置ける主記憶のコヒーレンシ保証制御方法に関するものである。
【背景技術】
【０００２】
近年の計算機システム、特に上位機種においては主記憶共有型のマルチプロセッサ（ＳＭＰ）構成が一般化している。また、システム全体の性能を向上するために、主記憶装置を共有するプロセッサの数は増加する傾向にある。
【０００３】
計算機システムがキャッシュメモリ（以下単にキャッシュという）を有する場合、キャッシュから読んだデータの内容と主記憶装置から読んだデータの内容に一貫性が保証されるように計算機を制御する必要がある。特に、主記憶共有型の並列計算機において、あるプロセッサによって主記憶内データが書き換えられた場合、そのデータの書き換えを全プロセッサのキャッシュ内のコピー・データに反映させる必要がある。この制御を主記憶とキャッシュのコヒーレンシ保証制御という。
【０００４】
従来の計算機システムでは、MESIプロトコルなどを用いてコヒーレンシ保証制御を行っている。MESIプロトコルでは、キャッシュのデータ取り扱い単位であるキャッシュ・ラインと呼ばれる連続メモリ領域ごとに、その状態をM（Modified）、E（Exclusive）、S（Shared）、I(Invalid)の４つの状態で管理する。MESIプロトコルを採用する計算機では一般に、プロセッサは各キャッシュ・ラインのMESI状態によって、そのラインに関するキャッシュ・コヒーレンシ保証制御リクエスト発行の要・不要を判断する。
【０００５】
しかし、MESIプロトコルなどのキャッシュ・コヒーレンシ制御方法では、各プロセッサは自分のキャッシュ内に存在するラインの状態しか知らないため、キャッシュ・ミスしたラインを主記憶からフェッチする場合など、コヒーレンシ保証制御リクエストをシステム内の他プロセッサに対してブロードキャストする必要がある。
【０００６】
また、キャッシュ内にコピーが存在するラインに関しても、他にどのプロセッサがそのラインのコピーをそのキャッシュに持っているのかを示す情報を有しないため、他のプロセッサへのキャッシュ無効化リクエストなどのコヒーレンシ保証制御リクエストを、システム内の全プロセッサに対してブロードキャストする必要がある。
【０００７】
そのため、MESIなどの従来プロトコルのみでキャッシュ・コヒーレンシ保証を行う計算機システムでは、主記憶装置を共有するプロセッサ数の増加に伴い、キャッシュ・コヒーレンシ保証のためのトランザクションが増加するため、大規模SMP構成ではコヒーレンシ保証制御のスループットがボトルネックとなって性能が低下するという問題点がある。
【０００８】
この問題に対して、「SRECIAL ISSUE ISCA'21 PROCEEDINGS   April 18-21, 1994
PROCEEDINGS OF THE 21ST ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECUTRE
“The Stanford FLASH Multiprocessor” P.302-313」（非特許文献１）には、ディレクトリ方式によるコヒーレンシ保証トランザクションの削減が提案されている。この方式では、主記憶上のライン毎に、そのラインがどこのプロセッサのキャッシュにコピーされているかを示すディレクトリ情報を設ける。プロセッサはコヒーレンシ保証制御トランザクションをブロードキャストする前にこのディレクトリ情報を検査し、コヒーレンシ保証制御が必要なライン及びプロセッサのみにコヒーレンシ保証トランザクションを送出することで、トランザクションを大幅に削減する。
【０００９】
しかしこの方式では、ライン毎にコピーの有無を示すディレクトリ・エントリを持つため、機能実現のために必要となるハードウェア量が多く、コスト高となる欠点がある。たとえばライン・サイズが128B,主記憶メモリサイズが４GBである場合、ディレクトリ・サイズが1エントリ当たり１bitであるとしても、
４ＧＢ／１２８Ｂ＊１ｂｉｔ＝３２ＭＢ
と、大きなオーバヘッドを必要とする。
【００１０】
また、ディレクトリの実装に必要な記憶装置の規模が大きいため、一般に主記憶装置のＤＲＡＭ上にディレクトリを実装するケースが多い。そのため、プロセッサは、主記憶をアクセスするたびにまず主記憶装置内のディレクトリの読み出しを行うこととなり、ディレクトリの読み出しレイテンシ自体が長いため、主記憶のアクセス・レーテンシが大幅に増えるという欠点がある。この問題を解決するためにディレクトリ情報をキャッシュにコピーする方式も考えられるが、さらにハードウェア量が増加し、実装コストが上がるという問題点がある。
【００１１】
これらの問題を解決するために、特開平１０−２４０７０７号公報（特許文献１）には、ページ単位など、ラインよりも大きな連続メモリ領域に対してディレクトリ・エントリを割り当てる方法が提唱されている。
しかし、このようにラインよりも大きな連続メモリ領域に対してディレクトリ割り当てを行うと、キャッシュ内におけるディレクトリ・エントリが管理しているメモリのコピーの有無をハードウェアで検出することが困難となる。そのため、この方式ではディレクトリ情報のリセットのためにＯＳなどのソフトウェアのサポートが必要になる。
また、リセット機能をソフトウェアで実現するため一般にハードウェアで実現するよりも実行時間が増加し、それによる性能低下も問題となる。リセット機能をハードウェアで実現する場合も、コピーの有無を確認するためにキャッシュ・タグを複数回読み出す必要があり、高速なリセットの実現は難しい。
【００１２】
【特許文献１】特開平１０−２４０７０７号公報
【００１３】
【非特許文献１】SRECIAL ISSUE ISCA'21 PROCEEDINGS   April 18-21, 1994PROCEEDINGS OF THE 21ST ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECUTRE“The Stanford FLASH Multiprocessor” P.302-313
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明の目的は、ハードウェア量を少なくし、ハードウェアによるディレクトリ情報のリセットを容易にする主記憶共有型マルチプロセッサにおけるコヒーレンシ保証制御を実現することにある。
【課題を解決するための手段】
【００１５】
上記の目的を達成するために、本発明は、データを格納する主記憶装置と、主記憶装置内のデータのコピーを保持するキャッシュと、主記憶装置又はキャッシュをアクセスしてデータを処理するＣＰＵとを有する複数のノードがそれぞれ結合され、ノード間でキャッシュのコヒーレンシ保証制御が行われる主記憶共有型マルチプロセッサにおいて、各ノードは、自ノードの主記憶装置内にあるメモリのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごとに、該当するメモリ群の一部のコピーが他ノードのキャッシュ内に存在する可能性があることを示すディレクトリ・ビットが割り当てられ、
ノードが主記憶装置をアクセスする際に、アクセスするメモリに該当するディレクトリ・ビットを検査し、ディレクトリ・ビットのうち既にセットされているものがある場合には他のノードに対してアクセス・アドレスをマルチキャスト又はブロードキャストすることによりコヒーレンシ保証制御を行い、ディレクトリ・ビットがセットされていない場合にはコヒーレンシ保証制御を行わず、
キャッシュのコヒーレンシ保証制御が行われる場合、各ノード内の全てのキャッシュの状態を検査し、コヒーレンシ保証制御の対象となっているメモリが対応するのと同一のディレクトリ・ビットに対応するメモリ群のコピーが各ノード内のキャッシュ内に無いことを検出して、ディレクトリ・ビットをリセットする。
好ましい例において、前記ディレクトリ・ビットには１ビットが割り当てられる。また、複数Ｎ個のノードから構成され例においては、ディレクトリ・ビットとして、Ｎビットが割り当てられる。
好ましくは、このディレクトリ・ビットは、システムの初期化時にリセットされ、主記憶装置の該当する部分のコピーがキャッシュ内に生成される時にセットされる。
【００１６】
全てのノードＮが複数Ｍのノード群に分けて定義される主記憶共有型マルチプロセッサの例において、
各ノードは、自ノード群の主記憶装置内にあるメモリのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごとに、該当するメモリ群の一部のコピーが他のあるノード群のキャッシュ内に存在する可能性があることを示すディレクトリ・ビットがＭビット割り当てられ、
主記憶のコピーがあるノードのキャッシュ内に作られる場合に、コピーされたメモリに該当するＭビットのディレクトリ・ビットのうち、そのノードが属するノード群に対応するディレクトリ・ビットがセットされ、
ノードが主記憶をアクセスする際に、アクセスするメモリに該当するディレクトリ・ビットを検査し、既にセットされているビットがある場合にはアクセス・アドレスを他のノード群に対してブロードキャストし、又はディレクトリ・ビットが示すノード群に対してマルチキャストしてコヒーレンシ保証制御を行い、該ディレクトリ・ビットがセットされていない場合にはコヒーレンシ保証制御を行なわず、
コヒーレンシ保証制御が行われる場合、関係するノード群内のキャッシュの状態を検査し、コヒーレンシ保証制御の対象となっているメモリが対応するのと同一のディレクトリ・エントリに対応するメモリ群のコピーがあるノード群内のキャッシュに無いことを検出して、ディレクトリ・エントリのノード群に対応するビットをリセットする。
本発明はまた、上記動作を行うコヒーレンシ保証制御方法としても把握される。
【発明の効果】
【００１７】
本発明によれば、主記憶共有型のマルチプロセッサにおいて、ディレクトリ・エントリをライン単位にではなくアドレスのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごとに持つことにより、少ないハードウェア量でコヒーレンシ保証制御トランザクションの削減が可能となる。
コヒーレンシ保証制御のために必要とされるハードウェア量が少なくなるため、プロセッサチップ上や周辺チップ上での実装が可能となり、ディレクトリの読み出しレイテンシを短縮することで、主記憶アクセスレイテンシを削減できる。
また、ディレクトリ・エントリを割り当てるメモリ領域を、アドレスのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごととすることにより、ハードウェアによるディレクトリ情報のリセットが容易となり、ソフトウェアによるサポートが不要となる。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照して、本発明の実施例にかかる主記憶共有型マルチプロセッサにおけるコヒーレンス制御について、詳細に説明する。
【００１９】
図１は、一実施例による主記憶共有型マルチプロセッサのブロック図である。
４つのノード１００〜４００（ノード０〜３という）は、ノード間インタフェース９００〜９０５でお互いに接続されている。各ノードは同じ構成であり、例えばノード０を参照すると、ノード１００は、CPU１１０、キャッシュメモリ１２０、ディレクトリ１３０、主記憶制御装置１４０、主記憶装置１５０を有する。
【００２０】
キャッシュメモリ１２０は、主記憶装置１５０内のデータのコピーを保持する高速メモリであり、メモリアドレスの一部を用いて検索される。この検索に用いられるアドレスの部分をキャッシュ・インデックス部という。
なお、図１では４つのノードを持つシステムの例を示しているが、これに限定されない。本発明は複数のノードを持つシステムであればよい。
【００２１】
図２はキャッシュメモリ１２０の詳細を示す。
キャッシュメモリ１２０は、主にキャッシュ・タグ部１２１とキャッシュ・データ部１２２から構成される。キャッシュ・タグ部１２１には、キャッシュに格納されているデータのライン・アドレス、およびMESIなどの状態情報が記憶される。キャッシュ・データ部１２２にはライン・データが記憶される。
【００２２】
キャッシュメモリ１２０は、ロードおよびストア命令のターゲットアドレス１２３によってキャッシュ・タグ１２１およびキャッシュ・データ１２２をアドレス１２３のキャッシュ・インデックス部分により検索する。そしてキャッシュ・タグ１２１に保持されているライン・アドレス１２５とロード・ストア・アドレス１２３を比較器１２７で比較し、キャッシュ内に検索したアドレスが指すデータが格納されていることを示すキャッシュ・ヒット信号１２１１を出力すると共に、ロード・データ１２１０を読み出す。
【００２３】
また、キャッシュメモリ１２０は、自ノード１００および他ノード２００〜４００のCPU１１０から発行され転送されて来るコヒーレンシ保証制御リクエストを受けて、そのリクエストのアドレス１２４によってキャッシュ・タグ１２１および、キャッシュ・データ１２２を検索する。そしてキャッシュ・タグ１２１に保持されているライン・アドレス１２５とコヒーレンシ保証制御アドレス１２４を比較器１２９で比較することにより、キャッシュ内に、検索したアドレスが指すデータが格納されていることを示すキャッシュ・ヒット信号１２１４を出力すると共に、該当するキャッシュ・データ１２１３を読み出す。
【００２４】
また、キャッシュメモリ１２０では、コヒーレンシ保証制御アドレス１２４と、キャッシュ・タグ１２１に保持されているライン・アドレス１２５のノード・インデックス部分（これについては後述する。）とディレクトリ・インデックス部分を比較器１２８によって比較する。この比較の結果、コヒーレンシ保証制御アドレス１２４に対応するディレクトリ・エントリが管理するメモリ領域のコピーがキャッシュ内に存在することを示す信号１２１２を出力する。
【００２５】
ディレクトリ１３０は、主記憶装置１５０が保持する全メモリ領域に対応するディレクトリ情報の集合（テーブル）である。主記憶装置１５０が保持する全メモリ領域のうち、キャッシュ・インデックス部を含むアドレスの一部が同一であるメモリの集合ごとに１つのディレクトリ・エントリが割り当てられる。このキャッシュ・インデックス部を含むアドレスの一部を、ディレクトリ・インデックスという。
【００２６】
図３は、アドレスのフォーマットとキャッシュ及びディレクトリの関係を示す。
ディレクトリ・インデックス５３０は、キャッシュ・インデックス５２０と同一、又はそれを包含するため、あるディレクトリ・エントリに対応するアドレスのキャッシュ・インデックスは一意に決まる。これにより、1回のキャッシュタグの読み出しで、あるディレクトリ・エントリが管理するメモリのコピーがキャッシュ内に存在するか否かをチェックすることができる。
【００２７】
１つのディレクトリ・エントリは、Nビットのディレクトリ・ビットからなる。Ｎはシステム内のノード数以下の自然数である。各ディレクトリ・ビットはシステム内の各ノード、もしくは複数のノードから成るノード群に対応する。
ディレクトリ・ビットはそれぞれ、「そのディレクトリ・ビットに対応するメモリの一部のコピーが、そのビットが対応するノードのキャッシュ内に存在する可能性がある」ことを示す。ディレクトリ・ビットは初期状態ではすべて「０」にリセットされる。
【００２８】
図４は、ディレクトリ・インデックス部がnビットであり、各エントリが４ビットからなる場合（Ｎ=4）のディレクトリの例を示す。また、図５は、Ｍ個のノード群から構成されるシステムにおけるディレクトリの例を示す。システム内の全ノード数をＮとし、Ｎ個のノードをＭ群に分けると、各ノード群は、Ｎ／Ｍ個のノードを含むことになる。図５の例では、ディレクトリ・インデックス部がＭビットであり、各ディレクトリ・ビットをＭ個のノード群に対応させ、各ノード群に対応してコヒーレンシ保証制御を行うものである。図４の例は、Ｍ＝４の場合であり、各ノード群内には１個のノードを持つ例である。
【００２９】
図４を参照するに、各ディレクトリ・エントリの４ビットはそれぞれシステム内の各ノードに対応している。図示の例で、ディレクトリ・インデックス部の値が「０」であるメモリのコピーはシステムのキャッシュ内には存在せず、ディレクトリ・インデックス部の値が「１」であるメモリに関してはノード１のキャッシュ内にコピーが存在する可能性があることを示している。例えば、ディレクトリ・インデックス＝２であるメモリのコピーがノード２，３のキャッシュ内に存在している可能性があることを示している。
【００３０】
主記憶制御装置１４０は主記憶装置１５０の制御装置であり、主記憶装置１５０のデータの読み書きを制御する。また、主記憶制御装置１４０は他のノードの主記憶制御装置とノード間インタフェース９００〜９０５で接続されており、他のノードへのリクエストの転送、他ノードとのデータのやりとり、キャッシュ・コヒーレンシ保証制御を行う。
主記憶装置１５０は、主記憶共有型マルチプロセッサの持つ物理メモリの一部を保持する。ノード１００〜４００の主記憶装置はそれぞれ排他的なメモリ空間を保持している。図３に示したノード・インデックス５１０と呼ばれるアドレスの一部によって、そのアドレスの指すメモリ空間がどのノードに存在するかが一意に決まる。アドレス内のノード・インデックス部分５１０の位置は任意であり、アドレスの先頭にある必要は無い。主記憶制御装置１４０はノード・インデックス５１０を検査することで、そのアドレスが指すメモリがどのノードの主記憶装置に保持されているのかを判定することが出来る。
【００３１】
次に、メモリからのデータの読み出し動作について説明する。
CPU１１０がメモリからデータを読み出す場合、まず比較器１２７を用いてキャッシュメモリ１２０内にデータの有無を確認する。読み出しデータがキャッシュメモリ１２０内に存在する場合はキャッシュヒット信号１２１１が真となる。この場合、CPU１１０はキャッシュメモリ１２０からの読み出しデータ１２１０をロード・データとすることで処理を完了する。
【００３２】
読み出しデータが自ノード１００のキャッシュメモリ１２０に存在しない場合、つまりキャッシュヒット信号１２１１が偽であった場合、CPU１１０は主記憶装置１５０からの読み出しリクエストを主記憶制御装置１４０に対して発行する。主記憶制御装置１４０は、読み出しアドレスのノード・インデックス部５１０を検査し、読み出しアドレスがどのノードの主記憶制御装置内に保持されているかを判定する。読み出しアドレスが他ノードの主記憶装置内に保持されている場合、主記憶制御装置１４０はノード間インタフェース９００〜９０５を用いてそのノードの主記憶制御装置にリクエストを転送する。
【００３３】
読み出しリクエストが、自ノードの主記憶装置が保持するアドレスに対するものであった場合、またはノード間インタフェース９００〜９０５を用いて自ノードへの読み出しリクエストが転送されてきた場合、主記憶制御装置１４０はディレクトリ・インデックス部５３０を用いてディレクトリ１３０にアクセスし、その読み出しアドレスに対応するディレクトリ・ビットの状態を検査する。
該当するディレクトリ・エントリ内のディレクトリ・ビットが全て「０」である場合には、他のノードのキャッシュメモリ内に当該データのコピーは存在しないと判断し、キャッシュ・コヒーレンシ保証制御は行わず、当該ノード内のキャッシュメモリ１２０、又は主記憶装置１５０からデータを読み出す。
【００３４】
一方、該当するディレクトリ・エントリ内に「１」であるディレクトリ・ビットが存在する場合には、「１」であるビットに該当するノードのキャッシュ内に読み出しアドレスの最新データが存在する可能性があるため、ディレクトリ・ビットが「１」であるノードに対してコヒーレンシ保証制御リクエストをマルチキャストする。マルチキャストされたコヒーレンシ保証制御リクエストを受け取ったシステム内の各ノードは、それぞれのキャッシュ内に当該リクエストが指すデータが存在するか検査し、コヒーレンシ保証制御に必要な動作を行う。
【００３５】
なお、ディレクトリ・ビットが「１」のノードがあった場合、その「１」のノードに拘わらず、システム内の全てのノードに対してコヒーレンシ保証制御リクエストをブロードキャストすることも可能である。しかし、上述したようなディレクトリ・ビットが「１」のノードに対してのみコヒーレンシ保証制御リクエストをマルチキャストする方が、コヒーレンシ保証制御のためのトランザクションは少なくてすむ。
【００３６】
一般にコヒーレンシ保証は、キャッシュ内に主記憶装置上のデータよりも新しい情報が存在しているかを、比較器１２９およびMESI情報などの読み出しを行うことにより判定する。判定の結果、新しいデータが存在している場合には、この情報を主記憶に書き戻す、もしくはそのデータに対して読み出しリクエストを発行した.CPUにデータを転送することによって行われる。また、同時にMESI情報の更新も行われる。このとき、コヒーレンシ保証制御リクエストを受け取った各ノードは、そのキャッシュ内のコヒーレンシ保証制御リクエストが示すキャッシュ・インデックスが示すカラムにコヒーレンシ保証制御リクエストをマルチキャストしたノードの主記憶装置が保持するデータのうち、コヒーレンシ保証制御リクエストと同一のディレクトリ・インデックスを持つメモリ領域のコピーが存在するか否かを検査する。
【００３７】
具体的には、コヒーレンシ保証制御リクエストのアドレス１２４と、それによりキャッシュ・タグから読み出した、キャッシュ内に格納されているラインのアドレス１２６のノード・インデックス部５１０およびディレクトリ・インデックス部５３０を比較器１２８で比較する。比較の結果、一致する場合はコピーが存在すると判定する。
これに対して、コピーが存在しない場合には、各ノードはリクエスト発行元ノード１００に対してディレクトリ・ビットのリセット要求信号を発行する。リセット要求信号はノード間インタフェース９００〜９０５を経由して発行元ノード１００へ転送される。発行元ノード１００は、該当するディレクトリ・エントリの、リセット要求信号を発行したノードに対応するビットをリセットする。ディレクトリ・ビットが複数のノードに対応している場合は、対応する全てのノードからリセット要求信号が発行された場合のみ、ディレクトリ・ビットのリセットを行う。
また、主記憶制御装置１４０は主記憶装置１５０のコピーをキャッシュに作成するトランザクションを検出した場合、該当するディレクトリ・エントリの、コピーを作成したノードに対応するビットをセットする。
【００３８】
以上説明したように、本実施例によるディレクトリを各ノードに実装することにより、メモリ・アクセス・リクエストが発生した場合、対応するディレクトリ・エントリのディレクトリ・ビットの値が「０」であるノードに対してはキャッシュ・コヒーレンシ保証制御を行わないため、キャッシュ・コヒーレンシ保証制御トラフィックが削減され、そのスループット・ボトルネックによる性能低下を回避することが出来る。
【００３９】
また、キャッシュにコピーを作成したが、その後他のコピーにより上書きされて、そのディレクトリ・ビットに対応するメモリのコピーが既にキャッシュ内に存在しない場合には、コヒーレンシ保証制御の実行時にハードウェアがキャッシュ内にコピーが無いことを検出し、ディレクトリ・ビットをリセットするため、ソフトウェアによるリセットなどは不要である。
【００４０】
また、このディレクトリを実装するために必要なメモリ装置のサイズは、ノードあたりN×2nビットとなり、ディレクトリ・インデックスのビット数nを小さくすることで、従来のディレクトリ装置と比較して、非常にハードウェア規模の小さいディレクトリを実現可能である。
【００４１】
さて図５に示す例において、ディレクトリ・ビットの状態を検査の結果、該当するディレクトリ・エントリ内のディレクトリ・ビットが全て「０」の場合には、他のノード群のキャッシュメモリ内に当該データのコピーは存在しないと判断し、キャッシュ・コヒーレンシ保証制御は行わない。
【００４２】
一方、該当するディレクトリ・エントリ内に「１」のディレクトリ・ビットが存在する場合には、ビット「１」に該当するノード群のキャッシュ内に読み出しアドレスの最新データが存在する可能性があるため、ディレクトリ・ビットが「１」のノード群に対してコヒーレンシ保証制御リクエストをマルチキャストする。マルチキャストされたコヒーレンシ保証制御リクエストを受け取ったシステム内の各ノード群は、それぞれのキャッシュ内に当該リクエストが指すデータが存在するか検査し、コヒーレンシ保証制御に必要な動作を行う。
その他の動作については、上述した図４を参照した場合と同様であることが理解されるであろう。
【００４３】
次に、図６を参照して、更に他の実施例について説明する。
この例において、１つのディレクトリ・エントリは、１ビットのディレクトリ・ビットからなる。ディレクトリ・ビットは、それぞれそのディレクトリ・ビットに対応するメモリの一部のコピーが、他ノードのキャッシュ内に存在する可能性があることを示している。ディレクトリ・ビットは初期状態ではすべて０にリセットされる。
ディレクトリ・エントリ内のディレクトリ・ビットが「０」である場合は、他のノードのキャッシュメモリ内に当該データのコピーは存在しないと判断し、キャッシュ・コヒーレンシ保証制御は行わず、当該ノード内のキャッシュメモリ１２０、もしくは主記憶装置１５０からデータを読み出す。
【００４４】
一方、ディレクトリ・ビットが「１」である場合は、他ノードのキャッシュ内に読み出しアドレスの最新データが存在する可能性が有ることを示している。図示の例では、ディレクトリ・インデックス部の値が「１」に対応するディレクトリ・ビットが「１」である。しかし、いずれのノードかは特定できない。
そこで、コヒーレンシ保証制御リクエストを全てのノードに対してブロードキャストする。ブロードキャストされたコヒーレンシ保証制御リクエストを受け取った各ノードは、それぞれのキャッシュ内に当該リクエストが指すデータが存在するか検査し、コヒーレンシ保証制御に必要な動作を行う。
【００４５】
コヒーレンシ保証制御リクエストの発行元のノード、例えばノード１００は、該当するディレクトリ・ビットに対し、全てのノードからリセット要求信号を受け取った場合に、そのディレクトリ・ビットをリセットする。また、主記憶制御装置１４０は主記憶装置１５０のコピーを他ノードのキャッシュに作成するトランザクションを検出した場合、該当するディレクトリ・ビットをセットする。
【００４６】
この実施例によれば、このディレクトリを実装するために必要なメモリ装置のサイズは、ノードあたり2nビットであり、従来のディレクトリと比較して、ハードウェア規模の小さいディレクトリを実現できる。
【００４７】
上記した幾つかの実施例によれば、アドレスのキャッシュ・インデックス部分を含むアドレスの一部が一致するメモリ群ごとに、ディレクトリ・エントリを割り当てることにより、ラインごとにディレクトリ・エントリを割り当てる場合と比較して、大幅にディレクトリ情報の保持に必要なハードウェア量を削減することができる。また、通常のキャッシュ構成では、同一キャッシュ・インデックス値を持つラインを複数格納することが出来るセット・アソシアティブ・キャッシュであっても、一度のキャッシュ・タグの読み出しで同一キャッシュ・インデックスを持ったラインを全て並列にヒット・チェックを行える。そのため、１回のキャッシュ・タグの読み出しで、そのキャッシュ内に、あるディレクトリ・エントリが管理するメモリのコピーが皆無であるか否かを検査することが出来る。ゆえに、ハードウェアによるディレクトリ情報のリセットが容易になる。
これにより、ディレクトリの実装に必要なハードウェア量が削減され、ソフトウェア・サポート不要のディレクトリを実現可能となる。
【図面の簡単な説明】
【００４８】
【図１】一実施例による主記憶共有型マルチプロセッサシステムを示すブロック図である。
【図２】一実施例によるマルチプロセッサシステムのキャッシュメモリを示す図である。
【図３】一実施例におけるアドレス、キャッシュ及びディレクトリの関係を示す図である。
【図４】一実施例によるディレクトリの構成例を示す図である。
【図５】他の実施例によるディレクトリの構成例を示す図である。
【図６】他の実施例によるディレクトリの構成例を示す図である。
【符号の説明】
【００４９】
１００〜４００  ノード                    １１０  ＣＰＵ
１２０  キャッシュメモリ                １２１  キャッシュ・タグ
１２２  キャッシュ・データ                １２３  ロード・ストア・アドレス
１２４  コヒーレンシ保証制御リクエスト・アドレス
１２５、１２６  ライン・アドレス          １２７、１２８  比較器
１２１０、１２１３  読み出しデータ              
１２１１、１２１２、１２１４  キャッシュ・ヒット信号
１３０  ディレクトリ
１３１  ディレクトリ・エントリ            １３２  ディレクトリ・ビット
１４０  主記憶制御装置                    １５０  主記憶装置
５１０  ノード・インデックス              ５２０  キャッシュ・インデックス
５３０    ディレクトリ・インデックス
９００  ノード０―ノード１間インタフェース
９０１  ノード０―ノード３間インタフェース
９０２  ノード０―ノード２間インタフェース
９０３  ノード１―ノード２間インタフェース
９０４  ノード１―ノード３間インタフェース
９０５  ノード２―ノード３間インタフェース。
【図１】
2005234854.tif 000003
【図２】
2005234854.tif 000004
【図３】
2005234854.tif 000005
【図４】
2005234854.tif 000006
【図５】
2005234854.tif 000007
【図６】
2005234854.tif 000008