(57)【要約】【課題】一つのノード内にキャッシュ状態を管理するディレクトリを複数設けると共に、コヒーレンシを保障することである。【解決手段】第一のプロセッサと、メモリと、第一のディレクトリと、第二のディレクトリと、第一のディレクトリ制御部と、第二のディレクトリ制御部とを具備するレイテンシ短縮方式によって解決することができる。メモリは、自ノードに所属する第一のプロセッサと、他ノードに所属する第二のプロセッサとに共有される。第一のディレクトリは、自ノードのキャッシュ状態を管理する。第二のディレクトリは、他ノードのキャッシュ状態を管理する。第一のディレクトリ制御部は、自ノード内で発行されるリクエストを処理し、第一のディレクトリを索引する。第二のディレクトリ制御部は、他ノードから発行されるリクエストを処理し、第二のディレクトリを索引すると共に、コヒーレンシを保障するための所定の制御を行う。【選択図】図４
2009245323.tif 000002
【特許請求の範囲】
【請求項１】
自ノードに所属する第一のプロセッサと、
前記第一のプロセッサと、他ノードに所属する第二のプロセッサとに共有されるメモリと、
前記自ノードのキャッシュ状態を管理する第一のディレクトリと、
前記他ノードのキャッシュ状態を管理する第二のディレクトリと、
前記自ノード内で発行されるリクエストを処理し、前記メモリのアドレスを指定する第一のリクエストを受信した場合には、前記第一のディレクトリを索引する第一のディレクトリ制御部と、
前記他ノードから発行されるリクエストを処理し、前記メモリのアドレスを指定する第二のリクエストを受信した場合には、前記第二のディレクトリを索引すると共に、前記第二のリクエストを処理する場合に、他のリクエスト又はスヌープを受信したときには、アドレスが競合するか否かを調べることによって、コヒーレンシを保障するための所定の制御を行う第二のディレクトリ制御部とを具備する
レイテンシ短縮方式。
【請求項２】
前記第二のディレクトリ制御部は、
前記自ノードに所属し、
前記第一のディレクトリは、
前記自ノードのキャッシュ状態の一つとして、前記第二のディレクトリ制御部のキャッシュ状態を管理する
請求項１記載のレイテンシ短縮方式。
【請求項３】
前記第一のディレクトリ制御部は、
前記第一のリクエストを処理する場合において、前記第一のディレクトリを索引し、前記第二のディレクトリ制御部のキャッシュが有効な場合には、前記第二のディレクトリ制御部へ第一のスヌープを発行し、
前記第二のディレクトリ制御部は、
前記第二のリクエストを処理するときに、前記第一のディレクトリ制御部へ第三のリクエストを発行し、かつ、前記第三のリクエストを発行した後に、前記第一のスヌープを受信した場合において、前記第三のリクエストのアドレスと、前記第一のスヌープのアドレスとが競合しているときには、前記第三のリクエストに対するリプライを受信する前に、前記第一のスヌープの処理を開始し、終了させる
請求項２記載のレイテンシ短縮方式。
【請求項４】
前記第二のディレクトリ制御部は、
前記第一のスヌープの処理を開始する場合において、前記第二のディレクトリを索引し、キャッシュが有効であり、前記他ノードへ第二のスヌープを発行していた場合には、前記第三のリクエストをキャンセルするキャンセル通知を前記第一のディレクトリ制御部へ発行する
請求項３記載のレイテンシ短縮方式。
【請求項５】
前記第二のディレクトリ制御部は、
前記第一のスヌープの処理を開始する場合において、前記第二のスヌープを発行していた場合には、前記第二のスヌープに対するレスポンスを受信するのを待ってから、前記第一のスヌープの処理を開始すると共に、前記第二のスヌープに対するレスポンスが、キャッシュデータが実際に転送されたことを示していた場合に限り、前記キャンセル通知を発行する
請求項４記載のレイテンシ短縮方式。
【請求項６】
前記第二のディレクトリ制御部は、
発行元を自分として、前記第三のリクエストを発行する
請求項５記載のレイテンシ短縮方式。
【請求項７】
前記第二のディレクトリ制御部は、
前記第二のリクエストを処理しているときに、アドレスが競合する他のリクエストを受信した場合には、前記他のリクエストを処理することなく、前記他のリクエストの発行元へ、リクエストの再送指示を行う
請求項６記載のレイテンシ短縮方式。
【請求項８】
前記第一のディレクトリ制御部は、
前記メモリに対するアクセスを制御するメモリ制御部を含み、
前記第二のディレクトリ制御部は、
前記他ノードとの間で、リクエスト、リプライ、スヌープ、及び、レスポンスを含むメッセージを送受信するグローバルスイッチを含む
請求項７記載のレイテンシ短縮方式。
【請求項９】
自ノードのキャッシュ状態を管理する第一のディレクトリを設けることと、
他ノードのキャッシュ状態を管理する第二のディレクトリを設けることと、
前記第一のディレクトリを索引する第一のディレクトリ制御部を設けることと、
前記第二のディレクトリを索引する第二のディレクトリ制御部を設けることと、
前記自ノードに所属する第一のプロセッサと、前記他ノードに所属する第二のプロセッサとに共有されるメモリのアドレスを指定する第一のリクエストが前記自ノード内で発行されたときに、前記第一のディレクトリ制御部により、前記メモリへ第二のリクエストを発行し、前記第一のディレクトリを索引し、前記第一のリクエストを処理することと、
前記メモリのアドレスを指定する第三のリクエストが前記他ノードから発行されたときに、前記第二のディレクトリ制御部により、前記メモリへ第四のリクエストを発行し、前記第二のディレクトリを索引すると共に、他のリクエスト又はスヌープを受信した場合には、アドレスが競合するか否かを調べることによって、コヒーレンシを保障するための所定の制御を行い、前記第三のリクエストを処理することとを具備する
レイテンシ短縮方法。
【請求項１０】
第一のディレクトリを設けることは、
前記自ノードのキャッシュ状態の一つとして、前記第二のディレクトリ制御部のキャッシュ状態を管理する第一のディレクトリを設けることを含む
請求項９記載のレイテンシ短縮方法。
【請求項１１】
前記第一のリクエストを処理することは、
前記第一のディレクトリを索引し、前記第二のディレクトリ制御部のキャッシュが有効な場合には、前記第二のディレクトリ制御部へ第一のスヌープを発行することを含み、
前記第三のリクエストを処理することは、
前記第四のリクエストを発行した後に、前記第二のディレクトリ制御部により、前記第一のスヌープを受信した場合において、前記第四のリクエストのアドレスと、前記第一のスヌープのアドレスとが競合しているときには、前記第四のリクエストに対するリプライを受信する前に、前記第一のスヌープの処理を開始し、終了させることを含む
請求項１０記載のレイテンシ短縮方法。
【請求項１２】
前記第三のリクエストを処理することは、
前記第一のスヌープの処理を開始する場合において、前記第三のリクエストについて、前記第二のディレクトリを索引し、キャッシュが有効で、前記他ノードへ第二のスヌープを発行していた場合には、前記第四のリクエストをキャンセルするキャンセル通知を発行することを含む
請求項１１記載のレイテンシ短縮方法。
【請求項１３】
前記第三のリクエストを処理することは、
前記第一のスヌープの処理を開始する場合において、前記第二のスヌープを発行していた場合には、前記第二のスヌープに対するレスポンスを受信するのを待ってから、前記第一のスヌープの処理を開始すると共に、前記第二のスヌープに対するレスポンスが、キャッシュデータが実際に転送されたことを示していた場合に限り、前記キャンセル通知を発行することを含む
請求項１２記載のレイテンシ短縮方法。
【請求項１４】
前記第三のリクエストを処理することは、
発行元を他ノードから自ノードへ書き換えて、前記第四のリクエストを発行することを含む
請求項１３記載のレイテンシ短縮方法。
【請求項１５】
前記第三のリクエストを処理することは、
アドレスが競合する他のリクエストを受信した場合には、前記他のリクエストを処理することなく、前記他のリクエストの発行元へ、リクエストの再送指示を行うことを含む
請求項１４記載のレイテンシ短縮方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レイテンシ短縮方式及び方法に関する。
【背景技術】
【０００２】
ある関連技術においては、コヒーレンシを保障する制御を簡単化するために、メモリアドレスに関するキャッシュの管理を１個のディレクトリで行い、受信順にリクエストを処理する。しかしながら、この関連技術のように、１個のディレクトリでキャッシュの管理を行うようにすると次のような問題がある。すなわち、ディレクトリをメモリコントローラのところに置くと、他ノードからの距離が遠くなり、グローバルスイッチのところに置くと、自ノード内のプロセッサからの距離が遠くなる。よって、ディレクトリの位置により、自ノード又は他ノードからのリクエスト処理のレイテンシが悪化するという問題である。
【０００３】
関連技術１の説明図である図１Ａ及び図１Ｂと、関連技術２の説明図である図２Ａ及び図２Ｂとを用いて、リクエスト処理の経路を説明する。関連技術１は、ディレクトリがメモリコントローラの所にのみ接続されている構成である。関連技術２は、ディレクトリがグローバルスイッチの所にのみ接続されている構成である。
【０００４】
図１Ａ，図２Ａは、プロセッサ２０２からメモリ１４０へ向けてリクエストが発行された場合において、プロセッサ３０２のキャッシュに有効なデータがあるケースの説明図である。図１Ａは、関連技術１におけるリクエスト発行からデータ受信までの経路を示し、図２Ａは、関連技術２におけるリクエスト発行からデータ受信までの経路を示している。
【０００５】
図１Ａの関連技術１における経路を説明する。プロセッサ２０２からリクエストが発行されると、このリクエストは、ノード２００ａ内のローカルスイッチ２１０からグローバルスイッチ２７０を通り、メモリ１４０が存在するノード１００ａのグローバルスイッチ１７０を経由して、ローカルスイッチ１１０を通りメモリ・ディレクトリ制御部１２０に入る。メモリ・ディレクトリ制御部１２０は、メモリ１４０にリクエストを出すのと同時にディレクトリ１３０を索引し、キャッシュに有効なデータを持っているプロセッサ３０２に対してスヌープ（ＳＮＯＯＰ：キャッシュ制御用のリクエスト）を発行する。このスヌープは、ローカルスイッチ１１０、グローバルスイッチ１７０を通り、プロセッサ３０２が存在するノード３００ａのグローバルスイッチ３７０、ローカルスイッチ３１０を通りプロセッサ３０２に入る。
【０００６】
スヌープを受信するプロセッサ３０２が実際に有効なキャッシュデータを保持している場合には、キャッシュデータを発行元のプロセッサ２０２へ転送し、さらにスヌープに対するレスポンスをメモリ・ディレクトリ制御部１２０へ返却する。キャッシュデータは、ローカルスイッチ３１０、グローバルスイッチ３７０、リクエスト元のグローバルスイッチ２７０、ローカルスイッチ２１０を通りプロセッサ２０２へ転送される。レイテンシはリクエスト発行からデータ受信までであり、メモリ１４０に対するリクエストおよびプロセッサ３０２からのレスポンスに関してはレイテンシに見えてこないため経路には表示していない。
【０００７】
図２Ａの関連技術２における経路の説明をする。プロセッサ２０２からリクエストが発行されると、このリクエストは、ノード２００ｂ内のローカルスイッチ２１０からグローバルスイッチ・ディレクトリ制御部２９０を通り、メモリ１４０が存在するノード１００ａのグローバルスイッチ・ディレクトリ制御部１９０に入る。グローバルスイッチ・ディレクトリ制御部１９０は、メモリ１４０にリクエストを発行するのと同時にディレクトリ１６０を索引し、キャッシュに有効なデータを保持しているプロセッサ３０２に対してスヌープを発行する。このスヌープは、プロセッサ３０２が所属するノード３００ｂのグローバルスイッチ・ディレクトリ制御部３９０、ローカルスイッチ３１０を通りプロセッサ３０２に入る。
【０００８】
スヌープを受信するプロセッサ３０２が実際に有効なキャッシュデータを保持している場合には、キャッシュデータを発行元のプロセッサ２０２へ転送し、さらにスヌープに対するレスポンスをグローバルスイッチ・ディレクトリ制御部１９０へ返却する。キャッシュデータは、ローカルスイッチ３１０、グローバルスイッチ・ディレクトリ制御部３９０、リクエスト元のグローバルスイッチ・ディレクトリ制御部２９０、ローカルスイッチ２１０を通りプロセッサ２０２へ転送される。レイテンシは、リクエスト発行からデータ受信までであり、メモリ１４０に対するリクエストおよびプロセッサ３０２からのレスポンスに関してはレイテンシに見えてこないため経路には表示していない。
【０００９】
図１Ｂ，図２Ｂは、プロセッサ１０２からメモリ１４０へ向けてリクエストが発行された場合において、プロセッサ１０１のキャッシュに有効なデータがあるケースの説明図である。図１Ｂは、関連技術１におけるリクエスト発行からデータ受信までの経路を示し、図２Ｂは、関連技術２におけるリクエスト発行からデータ受信までの経路を示している。
【００１０】
図１Ｂの関連技術１における経路の説明をする。プロセッサ１０２からリクエストが発行されると、このリクエストは、ノード１００ａ内のローカルスイッチ１１０からメモリ・ディレクトリ制御部１２０へ入る。メモリ・ディレクトリ制御部１２０は、メモリ１４０にリクエストを発行するのと同時にディレクトリ１３０を索引し、キャッシュに有効なデータを保持しているプロセッサ１０１に対してスヌープを発行する。このスヌープは、ローカルスイッチ１１０を通りプロセッサ１０１に入る。スヌープを受信するプロセッサ１０１が実際に有効なキャッシュデータを保持していた場合には、キャッシュデータを発行元のプロセッサ１０２へ転送し、さらにスフープに対するレスポンスをメモリ・ディレクトリ制御部１２０に対して返却する。キャッシュデータは、ローカルスイッチ１１０を通りプロセッサ１０２へ転送される。レイテンシはリクエスト発行からデータの受信までであり、メモリ１４０対するリクエストおよびプロセッサ１０１からのレスポンスに関してはレイテンシに見えてこないため経路には表示していない。
【００１１】
図２Ｂの関連技術２における経路の説明をする。プロセッサ１０２からリクエストが発行されると、このリクエストは、ノード１００ａ内のローカルスイッチ１１０からメモリ制御部１８０に入る。メモリ制御部１８０は、メモリ１４０にリクエストを発行するのと同時に、ディレクトリ１６０を制御しているグローバルスイッチ・ディレクトリ制御部１９０にスヌープを発行する。スヌープは、ローカルスイッチ１１０を通り、グローバルスイッチ・ディレクトリ制御部１９０に入る。スヌープを受信すると、グローバルスイッチ・ディレクトリ制御部１９０は、ディレクトリ１６０を索引し、キャッシュに有効なデータを保持しているプロセッサ１０１に対してスヌープを発行する。このスヌープは、ローカルスイッチ１１０を通りプロセッサ１０１に入る。スヌープを受信するプロセッサ１０１が実際に有効なキャッシュデータを保持していた場合には、キャッシュデータを発行元のプロセッサ１０２へ転送し、さらにスヌープに対するレスポンスをグローバルスイッチ・ディレクトリ制御部１９０に返却する。キャッシュデータは、ローカルスイッチ１１０を通りプロセッサ１０２へ転送される。レイテンシはリクエスト発行からデータ受信までであり、メモリ１４０に対するリクエストおよびプロセッサ１０１からのレスポンスに関してはレイテンシに見えてこないため経路には表示していない。
【００１２】
図１Ａと図２Ａとを対比すると明らかなように、他ノードからのリクエストに関しては、関連技術２の方がディレクトリまでの距離が近い分、関連技術１に比べてレイテンシが短縮される。反面、図１Ｂと図２Ｂとを対比すると明らかなように、自ノード内のリクエストに関しては、関連技術２は、関連技術１に比べてディレクトリまでの距離が遠くなるため、レイテンシが悪化する。
【００１３】
そこで、ディレクトリを２箇所に設けて、自ノード内におけるリクエスト処理又は他ノードからのリクエスト処理のいずれか一方に生じ得るレイテンシの悪化を防ぐことが考え得る。
【００１４】
図３に、ディレクトリを２箇所に置いた関連技術３におけるリクエスト処理とスヌープ処理との説明図を示す。図３では、一つのノード１００ｃのみを示しているが、このノード１００ｃは、グローバルスイッチ・ディレクトリ制御部１９０を介して、同様の構成を有する他のノードと接続されている。図３において、ノード１００ｃは、複数のプロセッサ１０１，１０２と、自ノード内のキャッシュ状態を管理するディレクトリ１３０と、メモリ１４０と、ディレクトリ１３０及びメモリ１４０の制御を行うメモリ・ディレクトリ制御部１２０と、他ノードのキャッシュ状態を管理するディレクトリ１６０と、ノード間のルーティングとディレクトリ１６０の制御を行うグローバルスイッチ・ディレクトリ制御部１９０と、これらをノード内で繋ぐローカルスイッチ１１０とを有している。
【００１５】
プロセッサ１０２からメモリ１４０へ向けてリクエストが発行された場合において、他ノードに存在するプロセッサのキャッシュに有効なデータがあるケースを考える。自ノード内のプロセッサ１０２から発行されるリクエスト（実線矢印）は、ローカルスイッチ１１０を介して、メモリ・ディレクトリ制御部１２０へ到達する。メモリ・ディレクトリ制御部１２０は、メモリ１４０へリクエストを発行するのと同時に、ディレクトリ１３０を索引し、キャッシュ状態が有効な他ノードのプロセッサに対してスヌープを発行する（実線丸印）。
【００１６】
一方、他ノードに所属するプロセッサからメモリ１４０へ向けてリクエストが発行された場合において、別のノードに所属するプロセッサのキャッシュに有効なデータがあるケースを考える。他ノードからのリクエスト（点線矢印）は、自ノード以外のキャッシュを制御するグローバルスイッチ・ディレクトリ制御部１９０によって受信される。グローバルスイッチ・ディレクトリ制御部１９０は、メモリ１４０へリクエストを発行するのと同時に、ディレクトリ１６０を索引し、キャッシュ状態が有効な別のノードに所属するプロセッサに対してスヌープを発行する（点線丸印）。
【００１７】
図３を用いて、関連技術３の問題点を説明する。別のノードに存在するプロセッサのキャッシュに有効なデータがある場合を考える。このデータに対して、自ノード１００ｃ内のプロセッサ１０２からのリクエスト発行（実線矢印）と、他ノードからのリクエスト受信（点線矢印）とが同じようなタイミングで起こるとする。
【００１８】
このとき、メモリ・ディレクトリ制御部１２０は、プロセッサ１０２のリクエスト（実線矢印）、他ノードからのリクエスト（点線矢印）の順でリクエストを受信し、処理する。メモリ・ディレクトリ制御部１２０は、まず、プロセッサ１０２からのリクエスト（実線矢印）の処理を開始し、プロセッサ１０２からのリクエストに対するスヌープ（実線丸印）の返答を待つ。この間、他ノードからのリクエスト（点線矢印）の処理は待たされる。
【００１９】
一方、グローバルスイッチ・ディレクトリ制御部１９０は、他ノードからのリクエストに対するスヌープ（点線丸印）、自ノード内のリクエストに対するスヌープ（実線丸印）の順でスヌープを受信し、処理する。グローバルスイッチ・ディレクトリ制御部１９０は、まず、他ノードからのリクエストに対するスヌープ（点線丸印）の処理を開始し、別のノードへスヌープ（点線丸印）を発行する。その後、別のノードからスヌープ（点線丸印）に対するレスポンスを受信することになるが、メモリ１４０へ発行したリクエスト（点線矢印）の返答を待って、スヌープ（点線丸印）の処理を終了する。この間、自ノード内のリクエストに対するスヌープ（実線丸印）の処理は待たされる。
【００２０】
以上説明したように、メモリ・ディレクトリ制御部１２０は、グローバルスイッチ・ディレクトリ制御部１９０のところで待ち状態になるスヌープ（実線丸印）の返答を受け取ることができず、また、グローバルスイッチ・ディレクトリ制御部１９０は、メモリ・ディレクトリ制御部１２０のところで待ち状態になるリクエスト（点線矢印）の返答を受け取ることができない。
【００２１】
階層メモリのコヒーレンシに関連する技術が特許文献に記載されている。特開平８−１６４７４号公報（特許文献１参照）には、マルチプロセッサシステムの発明が記載されている。マルチプロセッサシステムは、それぞれキャッシュメモリを有する複数のプロセッサと、複数のプロセッサのそれぞれに接続されたローカルメモリと、複数のプロセッサ及びローカルメモリに接続された通信制御装置とを含むクラスタを複数具備する。複数のクラスタは、互いに通信制御装置を介して接続される。通信制御装置は、記憶手段と、キャッシュメモリ内容一致化範囲判定手段とを有する。記憶手段は、自クラスタのローカルメモリのデータのうち、他クラスタのキャッシュメモリに登録されたデータに関する情報を記憶する。キャッシュメモリ内容一致化範囲判定手段は、記憶手段に基づきキャッシュメモリ内容を一致化すべき範囲を判定する。
【００２２】
特開平１１−１３４３１２号公報（特許文献２参照）には、分散共有メモリ多重プロセッサシステムの発明が記載されている。分散共有メモリ多重プロセッサシステムは、複数のプロセッサノードと、リングバスとを具備する。複数のプロセッサノードは、リング形態に配列され、複数のプロセッサノードのうちの何れか一つが１つのデータブロックに対する要求信号を発生し、残余プロセッサノードが自分の内部要素をスヌーピングし、残余プロセッサノードのうちの何れか一つがデータブロックを発生する。リングバスは、複数のプロセッサノードをリング形態に結び、要求信号を他のプロセッサノードの各々に同報通信し、要求信号を発生したプロセッサノードへデータブロックを単一通信する経路を提供する。
【００２３】
特開２００６−２７７７６２号公報（特許文献３参照）には、データ処理システムの発明が記載されている。データ処理システムは、複数のプロセッサと、複数のキャッシュと、ディレクトリと、制御装置とを備える。複数のキャッシュは、複数のプロセッサのそれぞれに対応して設けられ、各々複数のキャッシュ・ライン・エントリを保存するように構築される。ディレクトリは、複数のキャッシュ中のキャッシュ・ライン・エントリ状態を把握するための状態情報を保持する。制御装置は、ディレクトリに含まれる状態情報の読み出し及び書き込みを行う。ディレクトリの第１の部分は、複数のキャッシュ・ライン・エントリの第１サブセットに関する一時的状態情報を保持する。ディレクトリの第２部分が。複数のキャッシュ・ライン・エントリの第２サブセットに関する非一次的状態を保持する。
【００２４】
【特許文献１】特開平８−１６４７４号公報
【特許文献２】特開平１１−１３４３１２号公報
【特許文献３】特開２００６−２７７７６２号公報
【発明の開示】
【発明が解決しようとする課題】
【００２５】
本発明の課題は、一つのノード内にキャッシュ状態を管理するディレクトリを複数設けると共に、リクエストの処理順とスヌープの処理順とが異なる場合でも、コヒーレンシを保障できるレイテンシ短縮方式、及び、レイテンシ短縮方法を提供することである。
【課題を解決するための手段】
【００２６】
本発明の一つ目のアスペクトによるレイテンシ短縮方式は、第一のプロセッサと、メモリと、第一のディレクトリと、第二のディレクトリと、第一のディレクトリ制御部と、第二のディレクトリ制御部とを具備する。第一のプロセッサは、自ノードに所属する。メモリは、第一のプロセッサと、他ノードに所属する第二のプロセッサとに共有される。第一のディレクトリは、自ノードのキャッシュ状態を管理する。第二のディレクトリは、他ノードのキャッシュ状態を管理する。第一のディレクトリ制御部は、自ノード内で発行されるリクエストを処理し、メモリのアドレスを指定する第一のリクエストを受信した場合には、第一のディレクトリを索引する。第二のディレクトリ制御部は、他ノードから発行されるリクエストを処理し、メモリのアドレスを指定する第二のリクエストを受信した場合には、第二のディレクトリを索引すると共に、第二のリクエストを処理する場合に、他のリクエスト又はスヌープを受信したときには、アドレスが競合するか否かを調べることによって、コヒーレンシを保障するための所定の制御を行う。
【００２７】
本発明の二つ目のアスペクトによるレイテンシ短縮方法は、第一のディレクトリを設けることと、第二のディレクトリを設けることと、第一のディレクトリ制御部を設けることと、第二のディレクトリ制御部を設けることと、第一のリクエストを処理することと、第三のリクエストを処理することとを具備する。第一のディレクトリを設けることにおいては、自ノードのキャッシュ状態を管理する第一のディレクトリを設ける。第二のディレクトリを設けることにおいては、他ノードのキャッシュ状態を管理する第二のディレクトリを設ける。第一のディレクトリ制御部を設けることにおいては、第一のディレクトリを索引する第一のディレクトリ制御部を設ける。第二のディレクトリ制御部を設けることにおいては、第二のディレクトリを索引する第二のディレクトリ制御部を設ける。第一のリクエストを処理することにおいては、自ノードに所属する第一のプロセッサと、他ノードに所属する第二のプロセッサとに共有されるメモリのアドレスを指定する第一のリクエストが自ノード内で発行されたときに、第一のディレクトリ制御部により、メモリへ第二のリクエストを発行し、第一のディレクトリを索引し、第一のリクエストを処理する。第三のリクエストを処理することにおいては、メモリのアドレスを指定する第三のリクエストが他ノードから発行されたときに、第二のディレクトリ制御部により、メモリへ第四のリクエストを発行し、第二のディレクトリを索引すると共に、他のリクエスト又はスヌープを受信した場合には、アドレスが競合するか否かを調べることによって、コヒーレンシを保障するための所定の制御を行い、第三のリクエストを処理する。
【発明の効果】
【００２８】
本発明によれば、一つのノード内にキャッシュ状態を管理するディレクトリを複数設けると共に、リクエストの処理順とスヌープの処理順とが異なる場合でも、コヒーレンシを保障できるレイテンシ短縮方式、及び、レイテンシ短縮方法を提供することができる。
【発明を実施するための最良の形態】
【００２９】
本発明を実施するための最良の形態の一つについて、図面を参照して詳細に説明する。図４の構成図を参照すると、本発明による一つの実施の形態では、共有メモリを含む多数のマルチプロセッサノード１００，２００，３００が、グローバルスイッチ１５０，２５０，３５０を介して接続されている。各ノード１００，２００，３００は、プロセッサ１０１，１０２，２０１，２０２，３０１，３０２と、ローカルスイッチ１１０，２１０，３１０と、メモリ・ディレクトリ制御部１２０，２２０，３２０と、メモリ１４０，２４０，３４０と、ディレクトリ１３０，１６０，２３０，２６０，３３０，３６０と、グローバルスイッチ・ディレクトリ制御部１５０，２５０，３５０とをそれぞれ含んでいる。
【００３０】
図４において、３つのノード１００，２００，３００内の構成は同様であるため、１つのノード１００に関して各ブロックの機能説明を行うことにする。ノード１００において、ローカルスイッチ１１０は、プロセッサ１０１，１０２と、メモリ・ディレクトリ制御部１２０と、グローバルスイッチ・ディレクトリ制御部１５０とに接続されている。ローカルスイッチ１１０は、リクエスト、スヌープ、スヌープに対する応答（本願において、レスポンスという。）、リクエストに対する応答（本願において、リプライという。）を、これらに含まれる宛て先データに従ってルーティングする。
【００３１】
メモリ・ディレクトリ制御部１２０は、メモリ１４０に対する全てのリクエストを受信する。リクエストを受信すると、メモリ・ディレクトリ制御部１２０は、メモリ１４０へリクエストを発行すると共に、ディレクトリ１３０を索引して、有効なキャッシュがある場合には、対象となる自ノード内のプロセッサ１０１，１０２又は自ノード内のグローバルスイッチ・ディレクトリ制御部１５０へスヌープを発行する。その後、メモリ・ディレクトリ制御部１２０は、スヌープに対するレスポンスと、メモリ１４０に発行したリクエストに対するリプライとが揃ったところで、リクエストを発行したプロセッサに対して、そのリクエストに対するリプライを返却する。リプライの返却によって、リクエストの処理を終了する。
【００３２】
また、メモリ・ディレクトリ制御部１２０は、コヒーレンシを保障する為の制御として、グローバルスイッチ・ディレクトリ制御部１５０からキャンセル通知を受信する。キャンセル通知を受信すると、メモリ・ディレクトリ制御部１２０は、一緒に送られてくるキャンセル対象リクエストの識別子ＩＤで、バッファ内に格納されているリクエストと一致比較を行う。一致した場合、そのリクエストをキャンセルする。
【００３３】
ディレクトリ１３０，１６０は、キャッシュ状態を管理している。メモリ・ディレクトリ制御部１２０に接続されているディレクトリ１３０は、ノード１００内のキャッシュ状態を管理している。グローバルスイッチ・ディレクトリ制御部１５０に接続されているディレクトリ１６０は、他ノード２００，３００のキャッシュ状態を、すなわち、他ノード２００，３００に所属するプロセッサ２０１，２０２，３０１，３０２のキャッシュ状態を管理している。ノード１００内のキャッシュ状態には、ノード１００内のプロセッサ１０１，１０２のキャッシュ状態と、ノード１００内のグローバルスイッチ・ディレクトリ制御部１５０のキャッシュ状態、すなわち、他ノード２００，３００のプロセッサ２０１，２０２，３０１，３０２のキャッシュ状態とがある。
【００３４】
グローバルスイッチ・ディレクトリ制御部１５０は、他ノード２００，３００のグローバルスイッチ・ディレクトリ制御部２５０，３５０と接続され、リクエスト、スヌープ、レスポンス、リプライを、これらに含まれる宛て先データに従ってルーティングする。グローバルスイッチ・ディレクトリ制御部１５０は、メモリ・ディレクトリ制御部１２０からスヌープを受信したら、ディレクトリ１６０を索引する。ディレクトリ１６０の索引により、有効なキャッシュがある場合には、対象となるプロセッサに対してスヌープを発行する。その後、キャッシュデータが対象となるプロセッサに転送されると、メモリ・ディレクトリ制御部１２０へスヌープに対するレスポンスを返却する。
【００３５】
同様に、グローバルスイッチ・ディレクトリ制御部１５０は、他ノード２００，３００のグローバルスイッチ・ディレクトリ制御部２５０，３５０からリクエストを受信したら、ディレクトリ１６０を索引する。ディレクトリ１６０の索引により、有効なキャッシュがある場合には、対象となるプロセッサに対してスヌープを発行する。その後、スヌープに対するレスポンスと、メモリ１４０に発行したリクエストに対するリプライが揃ったところで、リクエストを発行した他ノードのプロセッサに対して、リクエストに対するリプライを返却する。更に、グローバルスイッチ・ディレクトリ制御部１５０は、発明の背景の欄で挙げたリクエストの処理順とスヌープの処理順が異なるケースのコヒーレンシ保障を実現している。
【００３６】
次に、グローバルスイッチ・ディレクトリ制御部１５０のコヒーレンシを保障する為の制御を行っている部分に関する詳細な構成について説明する。図５は、本実施の形態におけるグローバルスイッチ・ディレクトリ制御部１５０の構成説明図である。図５において、グローバルスイッチ・ディレクトリ制御部１５０は、調停回路１５１，１５８と、アドレス一致回路１５２と、キャンセル判定回路１５３と、制御レジスタ１５４と、メッセージ格納バッファ１５５と、再送バッファ１５６と、メッセージ発行・生成回路１５７とを有している。
【００３７】
調停回路１５１は、ローカルスイッチ１１０からのメッセージと他ノード２００，３００からのメッセージとを調停し、１つに絞っている。ここで、メッセージは、リクエスト、リプライ、スヌープ、及び、レスポンスを総称した用語である。なお、リクエストに対するリプライは、対応するリクエストと同一のエントリに格納され、スヌープに対するレスポンスは、対応するスヌープと同一のエントリに格納される。
【００３８】
アドレス一致回路１５２は、調停回路１５１で１つに絞られたメッセージに対して、メッセージ格納バッファ１５５に格納されている先行処理中のリクエスト又はスヌープとアドレス一致比較を行う。アドレス一致回路１５２は、一致比較の結果をキャンセル判定回路１５３に通知する。アドレスは、共有されるメモリ１４０のアドレスであり、アドレスが一致するリクエスト又はスヌープが発見された場合には、コヒーレンシーを保障するための制御を行う。
【００３９】
キャンセル判定回路１５３は、アドレス一致回路１５２からアドレスの比較結果を受信する。一致無しの場合、制御レジスタ１５４の更新及びメッセージ格納バッファ１５５への格納を行う。一致有りの場合であって、メッセージがレスポンスやリプライの場合には、同様に、制御レジスタ１５４の更新及びメッセージ格納バッファ１５５への格納を行う。
【００４０】
一致有りの場合であって、メッセージがリクエストの場合には、そのリクエストを再送バッファ１５６へ格納する。これは、アドレスが一致した後続のリクエストをメッセージ格納バッファ１５５に登録しても、コヒーレンシを維持するために、先行するリクエストと並列に処理を始めることができないためである。それならば、アドレス一致のリクエストをメッセージ格納バッファ１５５に登録せずに、アドレス一致のリクエストの後に続くアドレス不一致のリクエストを優先的にメッセージ格納バッファ１５５に登録するようにし、先行するリクエストの処理が完了するまで待つことなく、アドレス不一致のリクエストの処理を開始したほうが性能上良くなるためである。再送バッファ１５６は、アドレス一致のリクエストを格納すると、リクエスト発行元へ、リクエストを出し直すように通知する。
【００４１】
一致有りの場合であって、メッセージがスヌープの場合には、制御レジスタ１５４を更新し、そのスヌープをメッセージ格納バッファ１５５へ格納する。スヌープとアドレスが一致する先行リクエストのエントリについて、制御レジスタ１５４の競合フラグをオンにし、かつ、アドレス一致エントリに、後続スヌープのエントリ番号を登録する。このケースは、発明の背景の欄で説明したように、メモリ・ディレクトリ制御部１２０におけるリクエストの処理順と、グローバルスイッチ・ディレクトリ制御部１９０におけるスヌープの処理順とが異なるケースである。メモリ・ディレクトリ制御部１２０は、現在処理中のリクエストに対するスヌープを発行した後、そのスヌープに対するレスポンスを返却されないと、レスポンス返却待ちとなり、デットロックしてしまう。そのため、本実施の形態におけるグローバルスイッチ・ディレクトリ制御部１５０では、後続スヌープが先行リクエストとアドレス一致になった場合であっても、その後続スヌープをメッセージ格納バッファ１５５へ登録する。そして、先行リクエストのスヌープに対するレスポンスが届いた後に、後続スヌープの処理を開始するようにする。
【００４２】
制御レジスタ１５４は、メッセージ格納バッファ１５５に格納された各リクエスト又はスヌープを処理する際に必要となるフラグ情報等がエントリ分用意されている。フラグ情報等には、エントリ有効フラグ、発行要求フラグ、メッセージ発行済フラグ、レスポンス受信フラグ、リプライ受信フラグ、データ転送フラグ、競合フラグ、アドレス一致エントリが含まれる。
【００４３】
メッセージ格納バッファ１５５は、多数のエントリに区分されたバッファである。各エントリに、リクエスト及びスヌープを格納すると共に、スヌープを格納したエントリにそのスヌープに対するレスポンスを格納し、リクエストを格納したエントリにそのリクエストに対するリプライを格納する。
【００４４】
再送バッファ１５６は、アドレス一致有りの場合であって、メッセージがリクエストの場合に、そのリクエストが格納される。再送バッファ１５６は、リクエスト発行元に対して、リクエストの再送指示を行う機能も有している。
【００４５】
メッセージ発行・生成回路１５７は、制御レジスタ１５４の発行要求フラグを参照し、発行要求フラグがオンになっているエントリを検索する。そして、発行要求フラグがオンになっているエントリについて、制御レジスタ１５４のフラグ情報等、及び、メッセージ格納バッファ１５５のエントリデータを読み出す。また、ディレクトリ１６０を索引し、及び更新すると共に、制御レジスタ１５４のフラグ情報等に基づいて、次に発行するメッセージがリクエスト、スヌープ、レスポンス、リプライのどれかを特定し、そのメッセージを生成する。
【００４６】
調停回路１５８は、メッセージ発行・生成回路１５７から送出される他ノード２００，３００行きの通常のメッセージと、再送バッファ１５６から送出される再送指示のメッセージとを調停し、１つに絞っている。
【００４７】
次に、図５のグローバルスイッチ・ディレクトリ制御部の動作について、図６、図７のフローチャートを参照して説明する。図６は、他ノード２００，３００からリクエストを受信した時の動作説明図である。図６において、グローバルスイッチ・ディレクトリ制御部１５０が、他ノード２００，３００からリクエストを受信すると、アドレス一致回路１５２は、アドレス比較を行う（図６のＳ１）。アドレス一致無しの場合は、メッセージ格納バッファ１５５へリクエストを登録し、制御レジスタ１５４のエントリ有効フラグと発行要求フラグとをオンにする（図６のＳ２）。
【００４８】
メッセージ発行・生成回路１５７は、制御レジスタ１５４を参照し、発行要求フラグがオンになっているエントリを検索する。発行要求フラグがオンになっているエントリについて、制御レジスタ１５４から各フラグ情報等を読み出し、また、メッセージ格納バッファ１５５からエントリデータを読み出し、リクエストの生成と発行、更にはディレクトリ１６０の索引を行う（図６のＳ３）。ここで、メモリ１４０へのリクエスト生成時に、リクエスト発行元をグローバルスイッチ・ディレクトリ制御部１５０とする。メッセージ発行・生成回路１５７は、メモリ・ディレクトリ制御部１２０に対して、他ノード２００，３００から発行されたリクエストを、全てグローバルスイッチ・ディレクトリ制御部１５０から発行されたリクエストと見せる。このようにして、他ノード２００，３００から発行されたリクエストに対するスヌープが、グローバルスイッチ・ディレクトリ制御部１５０に戻ってこないようにする。
【００４９】
メッセージ発行・生成回路１５７は、ディレクトリ１６０の索引結果を参照し（図６のＳ４）、有効なキャッシュがあった場合には、そのキャッシュデータを保持する他ノードのプロセッサに対してスヌープを発行する（図６のＳ５）。スヌープを発行すると、制御レジスタ１５４の発行要求フラグをオフ、メッセージ発行済フラグをオンにする。メモリ１４０へ発行したリクエストに対するリプライと、他ノード２００，３００へ発行したスヌープに対するレスポンスとは非同期で返却される。グローバルスイッチ・ディレクトリ制御部１５０は、メモリ１４０へ発行したリクエストに対するリプライを受信したら、ディレクトリ１６０の更新を指示し、制御レジスタ１５４のリプライ受信フラグをオンにする。同様に、他ノードへ発行したスヌープに対するレスポンスを受信したら、ディレクトリ１６０の更新を指示し、制御レジスタ１５４のレスポンス受信フラグをオンにする。
【００５０】
スヌープ発行後、メッセージ発行・生成回路１５７は、制御レジスタ１５４のレスポンス受信フラグを参照し、オフの間はオンになるまで待つ（図６のＳ６）。暫く待つと、他ノード２００，３００のプロセッサからグローバルスイッチ・ディレクトリ制御部１５０へ、スヌープに対するレスポンスが送出され、レスポンス受信フラグがオンになる。レスポンス受信フラグがオンになったら、制御レジスタ１５４の競合フラグを参照し（図６のＳ７）、かつ、リプライ受信フラグを参照する（図６のＳ８）。図６で説明しているリクエストの処理と並行して、図３の実線丸印に示すように、自ノード１００内のメモリ・ディレクトリ制御部１２０からグローバルスイッチ・ディレクトリ制御部１５０へスヌープが届いていた場合には、競合フラグがオンになっている。
【００５１】
競合フラグがオフであって（図６のＳ７：ノー）、リプライ受信フラグがオンの時は、発行要求フラグをオンにする。メッセージ発行・生成回路１５７は、発行要求フラグがオンになっているエントリについて、制御レジスタ１５４のフラグ情報等と、メッセージ格納バッファ１５５のエントリデータとを読み出し、リクエストに対するリプライの生成と発行、さらにはディレクトリ１６０の更新を行う。一連のリクエスト処理が完了したら、制御レジスタ１５４のエントリ有効フラグをオフにする（図６のＳ９）。
【００５２】
競合有りの場合は（図６のＳ７：イエス）、制御レジスタ１５４にあるデータ転送フラグを参照する（図６のＳ１０）。レスポンスを受信した場合（図６のＳ６：イエス）、このレスポンスには、有効なキャッシュデータが実際に有ったか（データ転送有り）無かったか（データ転送無し）の情報が含まれている。データ転送有りの場合は（図６のＳ１０：イエス）、競合しているスヌープの処理よりも先に、図６の流れ図に示すリクエストの処理を完了させる必要があるため、グローバルスイッチ・ディレクトリ制御部１５０がメモリ１４０へ発行したリクエストをキャンセルし、レスポンスとリプライとが揃うことを待つことなく、図６の流れ図に示すリクエストの処理を終了させる。このキャンセルによって、メモリ・ディレクトリ制御部１２０に登録されている処理待ちのリクエストがキャンセルされる。
【００５３】
そのため、グローバルスイッチ・ディレクトリ制御部１５０は、制御レジスタ１５４の発行要求フラグをオンにする。メッセージ発行・生成回路１５７は、発行要求フラグがオンになっているエントリについて、制御レジスタ１５４のフラグ情報等とメッセージ格納バッファ１５５のエントリデータとを読み出し、リクエストのキャンセル通知をメモリ・ディレクトリ制御部１２０へ発行し、ディレクトリ１６０も更新する（図６のＳ１１）。キャンセル通知を送ったら、競合していたスヌープが格納されている他のエントリに対して開始指示を行う。競合スヌープの処理については、図７の流れ図を用いて説明する。一連のリクエスト処理が完了したら、制御レジスタ１５４のエントリ有効フラグをオフにする（図６のＳ１２）。
【００５４】
データ転送無しの場合は（図６のＳ１０：ノー）、競合していたスヌープが格納されている別のエントリに対して開始指示を行う（図６のＳ１３）。グローバルスイッチ・ディレクトリ制御部１５０は、図３の実線丸印に示すようなスヌープの処理を優先して実行し、終了させて、メモリ・ディレクトリ制御部１２０へレスポンスを返し、競合を解消する。この間、グローバルスイッチ・ディレクトリ制御部１５０が発行したメモリ１４０へのリクエストは、メモリ・ディレクトリ制御部１２０で待ち状態になる。
【００５５】
ディレクトリ１６０を索引した結果、有効なキャッシュが無かった場合（図６のＳ４：ノー）、制御レジスタ１５４の競合フラグを参照し（図６のＳ１４）、かつ、リプライ受信フラグ（図６のＳ１５）を参照する。競合フラグがオフでリプライ受信フラグがオンの時は、発行要求フラグをオンにする。メッセージ発行・生成回路１５７は、発行要求フラグがオンになっているエントリについて、制御レジスタ１５４のフラグ情報等と、メッセージ格納バッファ１５５のエントリデータとを読み出し、リプライの返却とディレクトリ１６０の更新とを行う。一連のリクエスト処理が完了したら、制御レジスタ１５４のエントリ有効フラグをオフにする（図６のＳ１６）。
【００５６】
競合フラグがオンの場合は（図６のＳ１４：イエス）、競合していたスヌープが格納されている別のエントリに対して開始指示を行う（図６のＳ１７）。グローバルスイッチ・ディレクトリ制御部１５０は、図３の実線丸印に示すようなスヌープの処理を優先して実行し、終了させて、メモリ・ディレクトリ制御部１２０へレスポンスを返し、競合を解消する。この間、グローバルスイッチ・ディレクトリ制御部１５０が発行したメモリ１４０へのリクエストは、メモリ・ディレクトリ制御部１２０で待ち状態になる。
【００５７】
アドレス一致有りの場合は（図６のＳ１：イエス）、リクエストを再送バッファ１５６へ登録し（図６のＳ１８）、リクエストの発行元に対して、再送指示を行う（図６のＳ１９）。
【００５８】
図７は、自ノード１００のメモリ・ディレクトリ制御部１２０からスヌープを受信した時の動作説明図である。グローバルスイッチ・ディレクトリ制御部１５０が、自ノード１００のメモリ・ディレクトリ制御部１２０からスヌープを受信すると、アドレス一致回路１５２はアドレス比較を行う（図７のＳ３１）。
【００５９】
アドレス一致無しの場合は（図７のＳ３１：ノー）、メッセージ格納バッファ１５５へ登録し、制御レジスタ１５４のエントリ有効フラグ及び発行要求フラグをオンにする（図７のＳ３２）。メッセージ発行・生成回路１５７は、発行要求フラグがオンになっているエントリについて、制御レジスタ１５４のフラグ情報等と、メッセージ格納バッファ１５５のエントリデータとを読み出し、また、ディレクトリ１６０を索引する（図７のＳ３３）。
【００６０】
ディレクトリ１６０を索引した結果、有効なキャッシュデータがあった場合（図７のＳ３４：イエス）、そのキャッシュデータを保持する他ノード２００，３００のプロセッサに対して、スヌープを発行する（図７のＳ３５）。その時に、制御レジスタ１５４の発行要求フラグをオフにし、メッセージ発行済フラグをオンにする。他ノード２００，３００のプロセッサからレスポンスを受信したら、制御レジスタ１５４の発行要求フラグ及びレスポンス受信フラグをオンにする（図７のＳ３６）。メッセージ発行・生成回路１５７は、発行要求フラグがオンになっているエントリについて、制御レジスタ１５４のフラグ情報等と、メッセージ格納バッファ１５５のエントリデータとを読み出し、自ノード１００のメモリ・ディレクトリ制御部１２０に対するレスポンスを生成し、発行し、更にはディレクトリ１６０の更新を行う（図７のＳ３７）。一連のスヌープ処理が完了したら、制御レジスタ１５４のエントリ有効フラグをオフにする。
【００６１】
有効なキャッシュが無い場合には（図７のＳ３４：ノー）、自ノード１００のメモリ・ディレクトリ制御部１２０に対するレスポンスの生成と発行を行う（図７のＳ３８）。一連のスヌープ処理が完了したら、制御レジスタ１５４のエントリ有効フラグをオフにする。
【００６２】
アドレス一致有りの場合でも（図７のＳ３１：イエス）、グローバルスイッチ・ディレクトリ制御部１５０は、メモリ・ディレクトリ制御部１２０から受信したスヌープを、メッセージ格納バッファ１５５へ登録する。そして、グローバルスイッチ・ディレクトリ制御部１５０は、制御レジスタ１５４のエントリ有効フラグをオンにし、アドレス一致のリクエストが格納されている別のエントリについて、制御レジスタ１５４の競合フラグをオンにし、かつ、アドレス一致エントリに、アドレス一致有りのスヌープを格納したエントリ番号を登録する（図７のＳ３９）。
【００６３】
グローバルスイッチ・ディレクトリ制御部１５０は、図６の流れ図で説明したように、先行のリクエストを処理している。図６に示したように、先行のリクエストから発行指示がきたら（図６のＳ１２，Ｓ１３，Ｓ１７）、アドレス一致有りのスヌープの発行要求フラグをオンにする（図７のＳ４０）。以降の動作（図７のＳ３３〜Ｓ３８）は、アドレス一致無しの場合（図７のＳ３１：ノー）と同様の動作になる。
【００６４】
本実施の形態では、共有メモリを含む多数のマルチプロセッサノードがグローバルスイッチを経て互いに接続されるような大規模システム（ＳＭＰ）において、メモリコントローラ付近に置く自ノード内のキャッシュ状態を管理するディレクトリと、グローバルスイッチ付近に置く他ノードのキャッシュ状態を管理するディレクトリとにより、キャッシュのコヒーレンシを保障し、レイテンシを短縮している。
【００６５】
本実施の形態では、グローバルスイッチ・ディレクトリ制御部１５０に、同一アドレスの先行リクエスト又はスヌープが存在するかどうかを確認するためのアドレス一致回路１５２と、アドレスが一致した場合にキャンセルするかどうかを判定するキャンセル判定回路１５３と、メッセージの発行要求や競合したスヌープの開始指示などを行うためのフラグ情報等を記憶する制御レジスタ１５４と、制御レジスタ１５４やメッセージ格納バッファ１５５からデータを読み出して、メッセージを発行し、生成するメッセージ発行・生成回路１５７とを設けている。これらにより、２箇所のディレクトリのコヒーレンシを維持している。
【００６６】
以上説明したように、本実施の形態においては、以下に記載するような効果を奏する。第１の効果は、ディレクトリをメモリ・ディレクトリ制御部付近の１箇所のみで管理する時に比べ、リクエストを発行するプロセッサ及び有効なキャッシュデータを保持するプロセッサが、それぞれ別々のノードにある場合のレイテンシを短縮できることである。これは、ディレクトリをグローバルスイッチの所にも設けることにより、他ノードからのリクエストに対するスヌープを、グローバルスイッチ・ディレクトリ制御部から発行できるようにしているためである。
【００６７】
第１の効果の一例として、図８Ａに、プロセッサ２０２からメモリ１４０に対するリクエストが発行され、プロセッサ３０２のキャッシュに有効なデータがあるケースにおいて、リクエスト発行からデータを受信するまでの経路を示す。本実施の形態においては、プロセッサ２０２からリクエストが発行されると、このリクエストは、ノード２００内のローカルスイッチ２１０からグローバルスイッチ・ディレクトリ制御部２５０を通り、メモリ１４０が存在するノード１００のグローバル・ディレクトリ制御部１５０に入る。グローバルスイッチ・ディレクトリ制御部１５０は、メモリ１４０にリクエストを出すのと同時に（このリクエストは、一定条件下、キャンセルされる（図６のＳ１１））ディレクトリ１６０を索引し、キャッシュに有効なデータを保持しているプロセッサ３０２に対してスヌープを発行する。スヌープは、プロセッサ３０２が所属するノード３００のグローバルスイッチ・ディレクトリ制御部３５０、ローカルスイッチ３１０を通り、プロセッサ３０２に入る。
【００６８】
スヌープを受信するプロセッサ３０２が、実際に有効なキャッシュデータを保持していた場合には、キャッシュデータが発行元のプロセッサ２０２へ転送され、更にレスポンスがグローバルスイッチ・ディレクトリ制御部１５０に返却される。キャッシュデータは、ローカルスイッチ３１０、グローバルスイッチ・ディレクトリ制御部３５０、リクエスト元のグローバルスイッチ・ディレクトリ制御部２５０、ローカルスイッチ２１０を通りプロセッサ２０２へ返却される。レイテンシはリクエスト発行からデータの受信までであり、メモリ１４０に対するリクエストおよびプロセッサ３０２からのレスポンスに関してはレイテンシに見えてこないため経路には表示していない。
【００６９】
図１Ａに示した関連技術１における経路と比較すると、本実施の形態では、グローバルスイッチ・ディレクトリ制御部１５０からメモリ・ディレクトリ制御部１２０までの往復分のレイテンシが短縮される。
【００７０】
第２の効果は、ディレクトリをグローバルスイッチ・ディレクトリ制御部の１箇所のみで管理する時に比べ、リクエストを発行するプロセッサが自ノード内にあって、かつ、有効なキャッシュデータを保持するプロセッサがいずれのノードにも無い場合、若しくは自ノード内にある場合のレイテンシを短縮できることである。これは、ディレクトリをメモリの所にも設けることにより、自ノード内のプロセッサから発行されたリクエストに対するスヌープ処理を、グローバルスイッチ・ディレクトリ制御部を介さずに行えるようにしたためである。
【００７１】
第２の効果の一例として、図８Ｂに、プロセッサ１０２からメモリ１４０に対するリクエストが発行され、プロセッサ１０１のキャッシュに有効なデータがあるケースにおいて、リクエスト発行からデータを受信するまでの経路を示す。プロセッサ１０２からリクエストが発行されると、このリクエストは、ノード１００内のローカルスイッチ１１０からメモリ・ディレクトリ制御部１２０に入る。メモリ・ディレクトリ制御部１２０は、メモリ１４０にリクエストを発行するのと同時にディレクトリ１３０を索引し、キャッシュに有効なデータを保持しているプロセッサ１０１に対してスヌープを発行する。スヌープは、ローカルスイッチ１１０を通りプロセッサ１０１に入る。
【００７２】
スヌープを受信するプロセッサ１０１が、実際に有効なキャッシュデータを保持していた場合には、キャッシュデータが、リクエスト発行元のプロセッサ１０２へ転送され、更にレスポンスがメモリ・ディレクトリ制御部１２０へ返却される。キャッシュデータは、ローカルスイッチ１１０を通りプロセッサ１０２へ転送される。レイテンシは、リクエスト発行からデータの受信までであり、メモリ１４０に対するリクエスト及びプロセッサ１０１からのレスポンスに関してはレイテンシに見えてこないため経路には表示していない。
【００７３】
図２Ｂに示した関連技術２における経路と比較すると、本実施の形態では、ローカルスイッチ１１０から、グローバルスイッチ・ディレクトリ制御部１５０までの往復分のレイテンシが短縮される。
【図面の簡単な説明】
【００７４】
【図１Ａ】関連技術１における他ノードからのリクエスト処理の経路を説明する図である。
【図１Ｂ】関連技術１における自ノード内のリクエスト処理の経路を説明する図である。
【図２Ａ】関連技術２における他ノードからのリクエスト処理の経路を説明する図である。
【図２Ｂ】関連技術２における自ノード内のリクエスト処理の経路を説明する図である。
【図３】関連技術３における問題点の説明図である。
【図４】本発明の一つの実施の形態によるマルチプロセッサシステムの構成図である。
【図５】本実施の形態におけるグローバルスイッチ・ディレクトリ制御部の構成図である。
【図６】本実施の形態におけるグローバルスイッチ・ディレクトリ制御部の動作を説明する第一のフローチャートである。
【図７】本実施の形態におけるグローバルスイッチ・ディレクトリ制御部の動作を説明する第二のフローチャートである。
【図８Ａ】本実施の形態における他ノードからのリクエスト処理の経路を説明する図である。
【図８Ｂ】本実施の形態における自ノード内のリクエスト処理の経路を説明する図である。
【符号の説明】
【００７５】
１００，１００ａ，１００ｂ，１００ｃ，２００，２００ａ，２００ｂ，３００，３００ａ，３００ｂ  ノード
１０１，１０２，２０１，２０２，３０１，３０２  プロセッサ
１１０，２１０，３１０  ローカルスイッチ
１２０，２２０，３２０  メモリ・ディレクトリ制御部
１３０，１６０，２３０，２６０，３３０，３６０  ディレクトリ
１４０，２４０，３４０  メモリ
１５０，１９０，２５０，２９０，３５０，３９０  グローバルスイッチ・ディレクトリ制御部
１５１，１５８  調停回路
１５２  アドレス一致回路
１５３  キャンセル判定回路
１５４  制御レジスタ
１５５  メッセージ格納バッファ
１５６  再送バッファ
１５７  メッセージ発行・生成回路
１７０，２７０，３７０  グローバルスイッチ
１８０，２８０，３８０  メモリ制御部
【図１Ａ】
2009245323.tif 000003
【図１Ｂ】
2009245323.tif 000004
【図２Ａ】
2009245323.tif 000005
【図２Ｂ】
2009245323.tif 000006
【図３】
2009245323.tif 000007
【図４】
2009245323.tif 000008
【図５】
2009245323.tif 000009
【図６】
2009245323.tif 000010
【図７】
2009245323.tif 000011
【図８Ａ】
2009245323.tif 000012
【図８Ｂ】
2009245323.tif 000013