(57)【特許請求の範囲】
【請求項１】
それぞれプロセッサを有する複数のノード、を備え、
前記複数のノードのうちの自ノードは、
前記複数のノードで共有されるメモリと、
前記複数のノードのうち他ノードから発行されるリクエストを処理し、前記メモリのアドレスが指定された第１のリクエストの処理中に当該アドレスと一致するアドレスが指定された第２のリクエストを受信した場合、前記第１のリクエストの処理を完了するまで前記第２のリクエストを保持し、前記第１のリクエストの処理を完了した後に前記保持した前記第２のリクエストを続けて処理する制御部と、
を備え、
前記制御部は、
前記第２のリクエストの保持中に、前記アドレスと一致するアドレスが指定された第３のリクエストを受信した場合、前記第２のリクエストの処理を開始するまで前記第３のリクエストの発行元情報を保持し、前記第２のリクエストの処理を開始した後に、前記保持した発行元情報が示す発行元に対してリクエストの再発行指示を行う、
マルチプロセッサシステム。
【請求項２】
前記制御部は、
前記第２のリクエストの保持中に、前記アドレスと一致するアドレスが指定された複数のリクエストを受信した場合、前記第２のリクエストの処理を開始するまで前記複数のリクエストの発行元情報を受信した順に保持し、前記第２のリクエストの処理を開始した後に、前記保持した発行元情報のうち最初に保持した発行元情報が示す発行元に対してリクエストの再発行指示を行う
ことを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記制御部は、
前記第２のリクエストの保持中に、前記アドレスと一致するアドレスが指定された第３のリクエストを受信した場合、前記第２のリクエストの処理を開始するタイミングと、前記第３のリクエストを保持しようとするタイミングと、が、同じタイミングとなったときには前記第３のリクエストを保持し、それ以外のときには、前記第２のリクエストの処理を開始するまで前記第３のリクエストの発行元情報を保持する
ことを特徴とする請求項１又は２に記載のマルチプロセッサシステム。
【請求項４】
前記制御部は、
前記保持した発行元情報が示す発行元に対してリクエストの再発行指示を行う場合、当該再発行指示に応答して発行されるリクエストは前記第３のリクエストの次に保持対象となるリクエストである旨を含むリクエストの再発行指示を行い、前記再発行指示に応答して発行されたリクエストを受信した場合、当該受信したリクエストを受信する他のリクエストよりも優先して保持する
ことを特徴とする請求項１乃至３のいずれか１項に記載のマルチプロセッサシステム。
【請求項５】
それぞれプロセッサを有する複数のノードを備えたマルチプロセッサにおけるリクエスト処理方法であって、
前記複数のノードで共有されるメモリを有する自ノードが、他ノードから発行されるリクエストを処理するステップと、
前記自ノードが、前記メモリのアドレスが指定された第１のリクエストの処理中に当該アドレスと一致するアドレスが指定された第２のリクエストを受信した場合、前記第１のリクエストの処理を完了するまで前記第２のリクエストを保持するステップと、
前記自ノードが、前記第２のリクエストの保持中に前記アドレスと一致するアドレスが指定された第３のリクエストを受信した場合、前記第２のリクエストの処理を開始するまで前記第３のリクエストの発行元情報を保持するステップと、
前記自ノードが、前記第１のリクエストの処理を完了した後に前記保持した前記第２のリクエストを続けて処理するステップと、
前記自ノードが、前記第２のリクエストの処理を開始した後に、前記保持した発行元情報が示す発行元に対してリクエストの再発行指示を行うステップと、
を含むリクエスト処理方法。
【請求項６】
それぞれプロセッサを有する複数の他のノードと接続され、
自ノードと他ノードで共有されるメモリと、
前記他ノードから発行されるリクエストを処理する制御部と、を備え、
前記制御部は、
前記メモリのアドレスが指定された第１のリクエストの処理中に当該アドレスと一致するアドレスが指定された第２のリクエストを受信した場合、前記第１のリクエストの処理を完了するまで前記第２のリクエストを保持する次リクエスト格納レジスタを有するとともに、前記第２のリクエストの保持中に、前記アドレスと一致するアドレスが指定された複数のリクエストを受信した場合、前記第２のリクエストの処理を開始するまで前記複数のリクエストの発行元情報を受信した順に保持する発行元情報格納バッファを有し、前記第１のリクエストの処理を完了した後に前記保持した前記第２のリクエストを続けて処理し、前記第２のリクエストの処理を開始した後に、前記保持した発行元情報のうち最初に保持した発行元情報が示す発行元に対してリクエストの再発行指示を行う、
ノード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムにおけるアドレス競合処理時のリクエスト処理技術に関する。
【背景技術】
【０００２】
複数のプロセッサを備え、キャッシュのコヒーレンシ制御が必要となる情報処理装置では、同じアドレスのメモリに対して複数のプロセッサからリードリクエストが発行された場合には、制御の簡単化の観点から、最初に受信したリクエストの処理中は、同じアドレスに対する後続のリクエストについては、発行元に対して再発行指示（以下、リトライ指示と称する場合がある。）を出し、発行元からリクエストの出し直しをさせている。このようにしてリクエストを１個１個順番に処理することで、キャッシュ間のコヒーレンシを保っていた。
【０００３】
例えば特許文献１に、キャッシュのコヒーレンシ制御方式を採用し、リクエストのアドレスが一致した場合には、発行元に対してリクエストの再発行指示を行う、マルチプロセッサシステムが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２１８３５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、近年のマルチコア化により発行元の数が増えたことで、上述したようなアドレス競合処理においては、アドレスが競合する頻度が高まり、性能への影響が大きくなってきた。以下、図９乃至図１１を参照して、本発明に関連する技術の問題を説明する。
【０００６】
図９に、本発明に関連する技術の構成を示す。
ノード４００は、プロセッサ（４０１，４０２）と、自ノード内のキャシュの状態を管理するディレクトリ４３０と、メモリ４４０の制御を行うメモリ・ディレクトリ制御部４２０と、ノード間のルーティングと他ノードのキャッシュ状態を管理するディレクトリ４６０と、ディレクトリ４６０の制御を行うグローバルスイッチ・ディレクトリ制御部４５０と、これらをノード内で繋ぐローカルスイッチ４１０と、を備えて構成されている。
【０００７】
各ノード（４００，５００，６００）は、グローバルスイッチ・ディレクトリ制御部（４５０，５５０，６５０）を介して接続されている。
【０００８】
ノード５００のプロセッサ５０１からノード４００のメモリ４４０に対するリクエストが発行されると、グローバルスイッチ・ディレクトリ制御部５５０を介してグローバルスイッチ・ディレクトリ制御部４５０へとリクエストが送られる。
【０００９】
リクエストを受信したグローバルスイッチ・ディレクトリ制御部４５０は、メモリ４４０へのリクエストの発行を行うと同時にディレクトリ４６０を索引し、キャッシュ状態が有効なプロセッサがあれば、そのプロセッサに対してスヌープ（キャッシュ制御用のリクエスト）を発行してキャッシュの制御を行う。
【００１０】
図１０は、図９に示した構成の動作を説明するための図である。
ノード（５００，６００）のプロセッサ（５０１，５０２，６０１，６０２）から、ノード４００のメモリ４４０に対して同一アドレスのリクエストが発行された場合、グローバルスイッチ・ディレクトリ制御部（５５０，６５０）を介して、グローバルスイッチ・ディレクトリ制御部４５０へとリクエストが送られる。
【００１１】
グローバルスイッチ・ディレクトリ制御部４５０は、受信した４個のリクエストのうち、最初に受信したＣＰＵ５０１からのリクエストを受け付けて処理を行う。残りのＣＰＵ（５０２，６０１，６０２）からのリクエストは、最初のリクエストの処理が完了するまでの間、グローバルスイッチ・ディレクトリ制御部４５０とグローバルスイッチ・ディレクトリ制御部（５５０，６５０）との間でリトライし続ける。
【００１２】
図１１は、図１０で説明した動作を時間軸で示すシーケンス図である。
グローバルスイッチ・ディレクトリ制御部４５０は、最初に受け付けたＣＰＵ５０１からのリクエストを、メモリ４４０に対して発行する（Ｔ１１）。
【００１３】
そして、このリクエストの処理が完了するまでの間は、ＣＰＵ５０２、ＣＰＵ６０１、ＣＰＵ６０２から送られたリクエストに関しては、リトライし続ける（Ｔ１２）。図１１に示す例では、１個のリクエスト処理が行われている間に、計７回のリトライが発生している（ＣＰＵ５０２のリクエストに対して３回、ＣＰＵ６０１とＣＰＵ６０２のリクエストに対して各２回）。
【００１４】
その後、グローバルスイッチ・ディレクトリ制御部４５０がメモリ４４０からリプライを受信すると、ＣＰＵ５０１のリクエスト処理が完了（Ｔ１３）する。これにより、グローバルスイッチ・ディレクトリ制御部４５０は次のリクエストを受け付け可能な状態となり、図１１に示す例では、この状態の時にたまたま入ってきたＣＰＵ６０１のリクエストを受け付けて処理する（Ｔ１４）。ＣＰＵ６０１のリクエスト処理中は、ＣＰＵ５０２とＣＰＵ６０３からのリクエストは、再びリトライし続ける（Ｔ１５）。
【００１５】
図１１に例示した結果に見られるように、本発明に関連する技術には以下の課題があった。
第１に、リトライが大量に発生するため、ノード間のトラフィックが増大し、性能へと影響が生じてしまうことである。
第２に、リクエストが受け付け順に処理されないため、リクエスト発行元間で偏りが生じてしまい（あるＣＰＵからのリクエストは処理されやすい、処理されにくいなど）、一向に処理されないＣＰＵが出てくることで、性能低下につながることである。
【００１６】
そこで本発明の目的は、これらの課題を解決し、アドレス競合処理時の性能を向上させることが可能なマルチプロセッサシステム及びマルチプロセッサシステムにおけるリクエスト処理方法を提供することである。
【課題を解決するための手段】
【００１７】
本発明の第一の態様に係るマルチプロセッサシステムは、それぞれプロセッサを有する複数のノード、を備え、前記複数のノードのうちの自ノードは、前記複数のノードで共有されるメモリと、前記複数のノードのうち他ノードから発行されるリクエストを処理し、前記メモリのアドレスが指定された第１のリクエストの処理中に当該アドレスと一致するアドレスが指定された第２のリクエストを受信した場合、前記第１のリクエストの処理を完了するまで前記第２のリクエストを保持し、前記第１のリクエストの処理を完了した後に前記保持した前記第２のリクエストを続けて処理する制御部と、を備えるものである。
【００１８】
これにより、アドレス競合処理時の性能を向上させることができる。
【００１９】
本発明の第二の態様に係るリクエスト処理方法は、それぞれプロセッサを有する複数のノードを備えたマルチプロセッサにおけるリクエスト処理方法であって、前記複数のノードで共有されるメモリを有する自ノードが、他ノードから発行されるリクエストを処理するステップと、前記自ノードが、前記メモリのアドレスが指定された第１のリクエストの処理中に当該アドレスと一致するアドレスが指定された第２のリクエストを受信した場合、前記第１のリクエストの処理を完了するまで前記第２のリクエストを保持するステップと、前記自ノードが、前記第１のリクエストの処理を完了した後に前記保持した前記第２のリクエストを続けて処理するステップと、を含むものである。
【００２０】
これにより、アドレス競合処理時の性能を向上させることができる。
【００２１】
本発明の第三の態様に係るノードは、それぞれプロセッサを有する複数の他のノードと接続され、自ノードと他ノードで共有されるメモリと、前記他ノードから発行されるリクエストを処理する制御部と、を備え、前記制御部は、前記メモリのアドレスが指定された第１のリクエストの処理中に当該アドレスと一致するアドレスが指定された第２のリクエストを受信した場合、前記第１のリクエストの処理を完了するまで前記第２のリクエストを保持する次リクエスト格納レジスタを有し、前記第１のリクエストの処理を完了した後に前記保持した前記第２のリクエストを続けて処理することを特徴とするものである。
【００２２】
これにより、アドレス競合処理時の性能を向上させることができる。
【発明の効果】
【００２３】
本発明によれば、アドレス競合処理時の性能を向上させることが可能なマルチプロセッサシステム及びマルチプロセッサシステムにおけるリクエスト処理方法を提供することができる。
【図面の簡単な説明】
【００２４】
【図１】実施の形態１に係るマルチプロセッサシステムの構成図である。
【図２】実施の形態１に係るグローバルスイッチ・ディレクトリ制御部の詳細構成図である。
【図３】実施の形態１に係る競合制御回路の詳細構成図である。
【図４】実施の形態１に係るグローバルスイッチ・ディレクトリ制御部の動作を示すフローチャートである。
【図５】実施の形態１に係るグローバルスイッチ・ディレクトリ制御部の動作を示すフローチャートである。
【図６】実施の形態１に係るマルチプロセッサシステムにおける動作を説明するための図である。
【図７】実施の形態１に係るマルチプロセッサシステムにおける動作を説明するための図である。
【図８】実施の形態１に係るマルチプロセッサによる動作を、時間軸で示すシーケンス図である。
【図９】本発明に関連する技術の構成図である。
【図１０】図９に示した構成の動作を説明するための図である。
【図１１】図１０で説明した動作を時間軸で示すシーケンス図である。
【図１２】本発明の原理を説明するための図である。
【発明を実施するための形態】
【００２５】
本発明の実施の形態について説明するのに先立ち、図１２を参照して本発明の原理について説明する。
【００２６】
図に示すように、本発明に係るマルチプロセッサシステム２は、それぞれプロセッサ（７０１，７０２，８０１，８０２，９０１，９０２）を有する複数のノード（７００，８００，９００）、を備え、自ノード７００は、複数のノード（７００，８００，９００）で共有されるメモリ７４０と、複数のノード（７００，８００，９００）のうち他ノード（８００，９００）から発行されるリクエストを処理し、メモリ７４０のアドレスが指定された第１のリクエストの処理中に当該アドレスと一致するアドレスが指定された第２のリクエストを受信した場合、第１のリクエストの処理を完了するまで第２のリクエストを保持し、第１のリクエストの処理を完了した後に保持した第２のリクエストを続けて処理する制御部７５０（後述する実施の形態では、グローバルスイッチ・ディレクトリ制御部に相当する）と、を備えている。
【００２７】
これにより、第１及び第２のリクエストを連続で処理することができ、リトライの発生を抑制し、アドレス競合処理時の性能を向上させることができる。
【００２８】
実施の形態１．
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本実施の形態に係るマルチプロセッサシステム１の構成図である。
マルチプロセッサシステム１は、互いに接続された複数のノード（１００，２００，３００）を備えている。複数のノード（１００，２００，３００）は、共有メモリを含むマルチプロセッサノードである。これら複数のノード（１００，２００，３００）は、それぞれが有するグローバルスイッチ・ディレクトリ制御部（１５０，２５０，３５０）を介して、互いに接続されている。
【００２９】
本実施の形態では、複数のノード（１００，２００，３００）は全て同様の構成である。このため、以下では、ノード１００の構成を代表して説明し、ノード２００及びノード３００の構成についてはその詳細な説明を省略する。
【００３０】
ノード１００は、複数のプロセッサ（１０１，１０２）と、ローカルスイッチ１１０と、メモリ・ディレクトリ制御部１２０と、メモリ１４０と、複数のディレクトリ（１３０，１６０）と、グローバルスイッチ・ディレクトリ制御部１５０と、を備えて構成されている。
【００３１】
ローカルスイッチ１１０は、複数のプロセッサ（１０１，１０２）と、メモリ・ディレクトリ制御部１２０と、グローバルスイッチ・ディレクトリ制御部１５０と、接続されている。ローカルスイッチ１１０は、これら接続先のそれぞれから発行されるリクエスト、スヌープ、スヌープに対する応答（以下、レスポンスと称する場合がある。）、リクエストに対する応答（以下、リプライと称する場合がある。）、を、これらに含まれる宛先データに従ってルーティングする。
【００３２】
メモリ・ディレクトリ制御部１２０は、メモリ１４０にアクセスされる全リクエストを受信する。メモリ・ディレクトリ制御部１２０は、リクエストを受信すると、メモリ１４０へのアクセスを行うと共にディレクトリ１３０を索引して、有効なキャッシュが存在した場合には、対象となるプロセッサに対してスヌープ処理を行う。そして、メモリ・ディレクトリ制御部１２０は、レスポンスと、メモリ１４０からのデータと、が揃ったところで、それらをリプライとしてリクエスト発行元へと返却する。リプライを返却することで、リクエストの処理が終了する。
【００３３】
複数のディレクトリ（１３０，１６０）は、プロセッサのキャッシュの状態を管理する。メモリ・ディレクトリ制御部１２０と接続されているディレクトリ１３０は、ノード１００内の複数のプロセッサ（１０１，１０２）のキャッシュ状態と、他ノード（２００，３００）のプロセッサを示すグローバルスイッチ・ディレクトリ制御部１５０のキャッシュ状態と、を、管理対象とする。グローバルスイッチ・ディレクトリ制御部１５０と接続されているディレクトリ１６０は、他ノード（２００，３００）のプロセッサ（２０１，２０２，３０１，３０２）のキャッシュ状態を管理対象とする。
【００３４】
グローバルスイッチ・ディレクトリ制御部１５０は、他ノード（２００，３００）のグローバルスイッチ・ディレクトリ制御部（２５０，３５０）と接続されている。グローバルスイッチ・ディレクトリ制御部１５０は、リクエスト、スヌープ、レスポンス、リプライを、これらに含まれる宛先データに従ってルーティングする。
【００３５】
また、グローバルスイッチ・ディレクトリ制御部１５０は、他ノード（２００，３００）からのリクエスト又はローカルスイッチ１１０からのスヌープを受信した場合、受信したリクエストなどを処理すると共にディレクトリ１６０を索引して、有効なデータを持つキャッシュが存在した場合には、そのプロセッサに対してスヌープ処理を行う。
【００３６】
次に、図２を参照して、グローバルスイッチ・ディレクトリ制御部１５０の詳細な構成を説明する。本実施の形態では、図２に示した構成に基づいて、アドレス一致したリードリクエストを、受付順に連続で処理する制御を行う。
【００３７】
グローバルスイッチ・ディレクトリ制御部１５０は、次リクエスト登録判定回路１１と、複数の調停回路（１２，１８，２１）と、アドレス一致回路１３と、登録判定回路１４と、メッセージ制御レジスタ１５と、メッセージ格納バッファ１６と、メッセージ発行・・生成回路１７と、リトライ格納先判定回路１９と、競合制御回路２０と、リトライバッファ２２と、を備えて構成されている。
【００３８】
さらに、競合制御回路２０は、アドレスごとに管理・制御を行う、複数のモジュール（３１，３２）を備えている。なお、複数のモジュール（３１，３２）の詳細については後述する。
【００３９】
次リクエスト登録判定回路１１は、他ノード（２００，３００）からのリクエストを受信した場合に、リクエスト内に含まれる次メッセージ登録可否情報から、受信したリクエストが競合制御回路２０に登録するリクエストであるか否かを判定する。
【００４０】
次リクエスト登録判定回路１１は、競合制御回路２０に登録するリクエストであると判定した場合、リクエスト内に含まれるモジュール番号から、競合制御回路２０内の対応するモジュール（３１，３２）を特定する。そして、次リクエスト登録判定回路１１は、特定したモジュール（３１，３２）の次リクエスト格納レジスタ４４にリクエストの登録を行うため、そのモジュールに対して登録指示を行う。
【００４１】
また、次リクエスト登録判定回路１１は、次リクエスト格納レジスタ４４にリクエストの登録を行う場合、特定したモジュール（３１，３２）の競合リクエスト制御レジスタ４３の次リクエストValidを有効にし、リトライ待ちフラグを無効にする。なお、次リクエストValid及びリトライ待ちフラグの詳細については後述する。
【００４２】
次リクエスト登録判定回路１１は、競合制御回路２０に登録するリクエストでないと判定した場合、通常のリクエストとしてメッセージ格納バッファ１６へ登録するため、調停回路１２へと調停参加を行う。
【００４３】
調停回路１２は、ローカルスイッチ１１０からのメッセージと、次リクエスト登録判定回路１１からのメッセージと、さらに、競合制御回路２０内の各モジュール（３１，３２）の次リクエスト格納レジスタ４４から発行される次リクエストと、を受け取り、順不同で来るこれらメッセージを調停し、いずれのメッセージを処理するのか決定する。ここで、メッセージとは、リクエスト、リプライ、スヌープ、及びレスポンスを総称した用語である。
【００４４】
アドレス一致回路１３は、調停回路１２で選ばれたメッセージのアドレスと、メッセージ格納バッファ１６に登録されている有効なリクエスト又はスヌープのアドレスと、を比較する。アドレス一致回路１３は、アドレス一致比較の結果と、アドレスが一致していた場合にはその一致したアドレスのリクエストなどを格納しているエントリのエントリ番号と、リクエストが競合制御回路２０から発行されたものか否か、を、登録判定回路１４に通知する。ここで、アドレスは、共有されるメモリ１４０のアドレスである。
【００４５】
登録判定回路１４は、アドレス一致回路１３からの一致結果と、メッセージ格納バッファ１６の使用状況と、を確認し、アドレス一致がなくメッセージ格納バッファ１６に空いているエントリが存在した場合、メッセージ格納バッファ１６の該当エントリにリクエストを登録して処理する。
【００４６】
また、登録判定回路１４は、リクエストが競合制御回路２０から発行されたものか否かと、メッセージ格納バッファ１６の使用状況と、を確認し、競合制御回路２０から発行されたものである場合、メッセージ格納バッファ１６の該当エントリにリクエストを登録して処理する。後述するように、競合制御回路２０から送出されるリクエストについては、先行処理リクエストが使用したエントリを使用して処理されることになるため、必ず登録可能となるからである。
【００４７】
なお、登録判定回路１４は、それら以外の条件では、リクエストはリトライであると判定し、リトライと判定したリクエストと、アドレス一致結果と、一致したエントリのエントリ番号（アドレス一致していた場合のみ）と、を、リトライ格納先判定回路１９へ通知する。
【００４８】
メッセージ制御レジスタ１５は、制御フラグなどを含んでいる。制御フラグなどは、メッセージ格納バッファ１６に格納された各リクエスト又はスヌープを処理する際に用いる。制御フラグなどは、メッセージ格納バッファ１６に格納された各リクエスト又はスヌープのエントリの個数分が用意されている。
【００４９】
制御フラグなどには、エントリValid、次メッセージ待ちValid、発行要求フラグ、レスポンス受信フラグ、リプライデータ受信フラグ、リプライ発行済みフラグ、ライトバック受信フラグ、データ転送フラグなどの制御情報が含まれる。これら制御情報のうち、フラグ類は、リクエストの処理が完了する毎に全てクリアされるが、エントリValidだけは、次メッセージ待ちValidが無効で、かつ、リクエストの処理が完了した際にのみ、クリアされる。
【００５０】
メッセージ格納バッファ１６は、多数のエントリに区分されたバッファである。各エントリに、リクエスト及びスヌープを格納すると共に、スヌープを格納したエントリにそのスヌープに対応するレスポンスデータを格納し、リクエストを格納したエントリにそのリクエストに対するリプライデータを格納する。
【００５１】
メッセージ発行・生成回路１７は、メッセージ制御レジスタ１５の発行要求フラグを参照し、発行要求フラグがオンになっているエントリを検索する。そして、発行要求フラグがオンになっているエントリについて、メッセージ制御レジスタ１５の制御フラグなどと、メッセージ格納バッファ１６のエントリデータと、を読み出す。
【００５２】
また、メッセージ発行・生成回路１７は、ディレクトリ１６０の索引及び更新を行うと共に、メッセージ制御レジスタ１５の制御フラグなどに基づいて、次に発行するメッセージがリクエスト、スヌープ、レスポンス、リプライのいずれであるかを特定する。そして、メッセージ発行・生成回路１７は、メッセージを生成し、その種別に応じて、ローカルスイッチ１１０もしくは他ノード（２００，３００）へと発行する。
【００５３】
調停回路１８は、メッセージ発行・生成回路１７から送出される他ノード（２００，３００）行きのメッセージと、リトライバッファ２２から送出されるリトライ指示のメッセージと、を受取り、順不同で来るこれらメッセージを調停し、いずれのメッセージを処理するかを決定する。
【００５４】
リトライ格納先判定回路１９は、リトライと判定されたリクエストと、アドレス一致結果と、一致したエントリのエントリ番号（アドレス一致していた場合のみ）と、を登録判定回路１４から受け取る。
【００５５】
リトライ格納先判定回路１９は、アドレス一致がなかった場合には、受取ったリクエストに関してリトライバッファ２２へリトライ指示のメッセージを格納するため、調停回路２１に対してリトライ発行調停参加の要求を出す。
【００５６】
リトライ格納先判定回路１９は、アドレス一致した場合には、競合制御回路２０の各モジュール（３１，３２）のうちで使用中Valid４１が有効なモジュール（３１，３２）を確認し、そのモジュール（３１，３２）の競合エントリ４２と、アドレス一致したエントリのエントリ番号と、を比較する。なお、使用中Valid４１及び競合エントリ４２の詳細については後述する。
【００５７】
リトライ格納先判定回路１９は、アドレス一致したエントリのエントリ番号と競合エントリ４２とが一致した場合、リクエストの登録又はリクエストの発行元情報の登録を行うため、その一致した競合エントリ４２を有するモジュール（３１，３２）に対して登録指示を行う。
【００５８】
リトライ格納先判定回路１９は、アドレス一致したエントリのエントリ番号と競合エントリ４２とが一致しなかった場合、さらに、複数のモジュール（３１，３２）の空き状態を確認する。
【００５９】
リトライ格納先判定回路１９は、複数のモジュール（３１，３２）のいずれかに空きがあった場合（使用中Valid４１が無効なモジュール（３１，３２）が存在した場合）、リクエストの登録を行うため、空いているモジュール（３１，３２）に対して登録指示を行う。
【００６０】
リトライ格納先判定回路１９は、いずれのモジュール（３１，３２）にも空きがなかった場合、リトライバッファ２２へリトライ指示のメッセージを格納するため、調停回路２１に対してリトライ発行調停参加の要求を出す。
【００６１】
競合制御回路２０は、複数のモジュール（３１，３２）を束ねたものである。複数のモジュール（３１，３２）は、それぞれアドレス毎に独立に制御を行う。各モジュール（３１，３２）は、ある１つのアドレスに関して、次リクエストの保持や発行、次々以降のリクエストの発行元情報の登録や、次々以降のリクエストのリトライ指示の発行を行う。図４では２個のモジュール（３１，３２）を有しているため、本実施の形態に係るリクエスト制御は、２つの異なるアドレスに対して同時に使用することが可能である。なお、モジュールの個数は限定されず、任意の個数に拡張可能である。各モジュール（３１，３２）内の詳細な構成については後述する。
【００６２】
調停回路２１は、リトライ格納先判定回路１９からのリトライ発行調停参加要求と、競合制御回路内２０の各モジュール（３１，３２）からのリトライ指示と、を受け取り、順不同で来るこれらを調停し、いずれのリトライ指示を処理するかを決定する。なお、調停回路２１では、通常のリクエスト処理に影響を与えないようにするため、リトライ格納先判定回路１９から送出されるリトライ指示を優先的に選択する。
【００６３】
リトライバッファ２２は、調停回路２１で選ばれたリトライ指示のメッセージを格納する。また、リトライバッファ２２は、リクエストの発行元に対してリトライ指示を行う。
【００６４】
なお、リトライバッファ２２が発行するリトライ指示のメッセージには、再発行指示に応答して発行されるリクエストが次リクエスト格納レジスタ４４に現在格納されているリクエストの次に登録対象となるリクエストである旨（次メッセージ登録可否情報及びモジュール番号）を含ませるようにする。すなわち、後述するように、再発行させる特定のリクエストを、所望のモジュールの次リクエスト格納レジスタ４４に確実に登録させるため、リトライ指示のメッセージには、競合制御回路２０に登録するリクエストであるか否かを示す次メッセージ登録可否情報と、いずれのモジュールの次リクエスト格納レジスタ４４に次リクエストを登録するかを示すモジュール番号と、を含む。
【００６５】
次に、図３を参照して、競合制御回路内２０の詳細な構成を説明する。本実施の形態では、競合制御回路内２０の複数のモジュール（３１，３２）は全て同様の構成である。このため、図３では、１つのモジュール３１の構成を代表して説明し、モジュール３２の構成についてはその詳細な説明を省略する。
【００６６】
モジュール３１は、使用中Valid４１と、競合エントリ４２と、競合リクエスト制御レジスタ４３と、次リクエスト格納レジスタ４４と、発行元情報格納バッファ４５と、を備えて構成されている。
【００６７】
使用中Valid４１は、その使用中Valid４１を有するモジュール３１が現在使用中であることを示す。使用中Valid４１は、リトライ格納先判定回路１９からの登録指示に基づいて有効になり、競合リクエスト制御レジスタ４３内の情報が全てクリアされた場合（アドレス一致したリクエストのうちで、最後のリクエストを発行した場合）に、無効になる。
【００６８】
競合エントリ４２は、アドレス一致したメッセージ格納バッファ１６内のエントリのエントリ番号を保持する。競合エントリ４２が保持するエントリのエントリ番号は、リトライ格納先判定回路１９からの登録指示と一緒に渡される。
【００６９】
競合リクエスト制御レジスタ４３は、リクエスト発行可能Valid５１と、次リクエストValid５２と、リトライ待ちフラグ５３と、発行元格納バッファValid５４と、を備えて構成されている。
【００７０】
リクエスト発行可能Valid５１は、次のリクエストを次リクエスト格納レジスタ４４から発行可能か否かを示す。リクエスト発行可能Valid５１は、メッセージ格納バッファ１６のエントリに関して、競合エントリ４２の競合エントリ番号と同じエントリ番号のリクエストの処理が完了した場合、有効になる（次のリクエストが発行可能になる）。リクエスト発行可能Valid５１は、次に処理するリクエストを、モジュール３１の次リクエスト格納レジスタ４４から発行した場合、無効になる。
【００７１】
次リクエストValid５２は、次リクエスト格納レジスタ４４に、有効なリクエストが保持されているか否かを示す。次リクエストValid５２は、次リクエスト格納レジスタ４４に有効なリクエストが保持された場合に有効となり、次リクエスト格納レジスタ４４からリクエストが発行された場合、または有効なリクエストが何ら保持されていない場合に無効となる。
【００７２】
リトライ待ちフラグ５３は、モジュール３１の発行元情報格納バッファ４５からリトライ指示を発行してから、再発行されたリクエストが次リクエスト格納レジスタ４４に格納されるまでの間の、リトライの待ち状態にあるか否かを示す。リトライ待ちフラグ５３は、リトライの待ち状態にある場合、有効となり、リトライの待ち状態にない場合、無効となる。
【００７３】
発行元格納バッファValid５４は、リトライ指示が必要になる発行元の発行元情報が、発行元情報格納バッファ４５に存在するか否かを示す。発行元格納バッファValid５４は、発行元情報格納バッファ４５に発行元情報が存在する場合、有効となり、発行元情報格納バッファ４５に発行元情報が存在しない場合、無効となる。
【００７４】
なお、メッセージ格納バッファ１６には、現在処理中のメッセージが格納されており、この現在処理中のメッセージとアドレス競合するモジュールの次リクエスト格納レジスタ４４には、次に処理するリクエスト（次リクエスト）が格納され、また、発行元情報格納バッファ４５には、次々以降のリクエストの発行元情報が登録される。
【００７５】
すれ違い登録指示５５は、次リクエスト格納レジスタ４４に格納されている次リクエストを発行するタイミングと、次リクエスト格納レジスタ４４に次に登録されるべき新たなリクエスト（次々リクエスト）の登録指示を受けたタイミングと、が同じタイミングとなったことを通知する。つまり、すれ違い登録指示５５は、次リクエストと次々リクエストとがすれ違うケースであるか否かを通知する。すれ違い登録指示５５は、次に登録されるべきリクエストに含まれている。
【００７６】
次リクエスト格納レジスタ４４は、次に処理するリクエストを格納する。次リクエスト格納レジスタ４４には、次リクエスト登録判定回路１１、又は、リトライ格納先判定回路１９からの登録指示に基づいて、リクエストが登録される。
【００７７】
リクエストが、１番最初にアドレス一致したリクエストである場合、又は、すれ違ったリクエストである場合に、リトライ格納先判定回路１９が、次リクエスト格納レジスタ４４にリクエストを登録する。それ以外の場合、登録判定回路１１が、次リクエスト格納レジスタ４４にリクエストを登録する。
【００７８】
発行元情報格納バッファ４５は、リクエストの発行元情報を格納する。リクエストの発行元情報はリクエストの発行元を示しており、その発行元に対してリトライ指示が出される。発行元情報格納バッファ４５は、次に処理されるリクエストが先行にいた場合（既に、次リクエスト格納レジスタ４４に、次に処理するリクエストが格納されている場合）、リクエスト発行元に対してリトライ指示を出すために使用される。発行元情報格納バッファ４５は、受け付けた順に発行元情報を登録し、登録した順に発行元情報を読み出す。
【００７９】
モジュール３１は、リクエスト発行可能Valid５１が有効になり（リクエスト発行可能Valid５１＝１）、かつ、次リクエストValid５２が有効になった（次リクエストValid５２＝１）場合、調停回路１２に対して、リクエスト発行調停参加の要求を出す。つまり、モジュール３１は、次リクエスト格納レジスタ４４から次のリクエストを発行可能になり、かつ、次リクエスト格納レジスタ４４に有効なリクエストが保持された場合に、次リクエスト格納レジスタ４４に格納されているリクエストを発行する。
【００８０】
また、モジュール３１は、次リクエストValid５２が無効になり（次リクエストValid５２＝０）、かつ、リトライ待ちフラグ５３が無効になり（リトライ待ちフラグ５３＝０）、かつ、発行元格納バッファValid５４が有効になった（発行元格納バッファValid５４＝１）場合、調停回路２１に対して、リトライ指示の発行調停参加の要求を出す。つまり、モジュール３１は、次リクエスト格納レジスタ４４に有効なリクエストが保持されておらず、かつ、リトライの待ち状態でなく、かつ、発行元情報格納バッファ４５に発行元情報が存在する場合に、発行元情報格納バッファ４５に格納されている発行元情報に基づいて、リトライ指示を発行する。このリトライ指示には、発行元情報格納バッファ４５に登録された最古の発行元情報が含まれている。
【００８１】
また、モジュール３１は、次リクエストValid５２が無効になり（次リクエストValid５２＝０）、かつ、リトライ待ちフラグ５３が無効になり（リトライ待ちフラグ５３＝０）、かつ、発行元格納バッファValid５４が無効になり（発行元格納バッファValid５４＝０）、かつ、すれ違い登録がなかった（すれ違い登録指示５５＝０）場合、モジュール３１について、競合エントリ４２に保持したエントリについての使用を終了し、モジュール３１を解放する。つまり、モジュール３１は、次リクエスト格納レジスタ４４に有効なリクエストが保持されておらず、かつ、リトライの待ち状態でなく、かつ、発行元情報格納バッファ４５に発行元情報が存在しておらず、かつ、すれ違い登録指示がなかった場合に、使用中Valid４１を無効にすると共に、競合エントリ４２の登録内容をクリアする。
【００８２】
以上に、本実施の形態に係るマルチプロセッサシステム１の構成を説明したが、プロセッサ（１０１，１０２，２０１，２０２，３０１，３０２）、ローカルスイッチ（１１０，２１０，３１０）、メモリ・ディレクトリ制御部（１２０，２２０，３２０）、メモリ（１４０，２４０，３４０）、ディレクトリ（１３０，１６０，２３０.２６０，３３０，３６０）などの構成は、当業者にとって良く知られた機能を有する公知の技術を採用すればよい。このため、ここでは、その詳細な構成を省略する。
【００８３】
次に、図４及び図５を参照して、グローバルスイッチ・ディレクトリ制御部の動作を説明する。
図４は、グローバルスイッチ・ディレクトリ制御部１５０の動作を示している。図４を参照して、グローバルスイッチ・ディレクトリ制御部１５０がリクエストを受信した時に、リクエストの対象アドレスがメモリ１４０に存在する場合における動作を説明する。
【００８４】
グローバルスイッチ・ディレクトリ制御部１５０は、他ノード（２００，３００）から送出されたリクエストを受信した場合、リクエストが競合制御回路２０に登録するリクエストであるか否かを判定する（Ｓ１）。
【００８５】
登録するリクエストではなかった場合（Ｓ１でＮｏ）、グローバルスイッチ・ディレクトリ制御部１５０は、調停回路１２で選ばれたメッセージのアドレスと、メッセージ格納バッファ１６に格納されている現在処理中のメッセージのアドレスと、を比較する（Ｓ２）。
【００８６】
アドレス一致がなかった場合（Ｓ２でＮｏ）、グローバルスイッチ・ディレクトリ制御部１５０は、メッセージ格納バッファ１６の使用状況を確認して、全てのエントリが使用されているか否かを判定する（Ｓ３）。
【００８７】
メッセージ格納バッファ１６に空いているエントリ（使用されていないエントリ）が存在した場合（Ｓ３でＮｏ）、グローバルスイッチ・ディレクトリ制御部１５０は、メッセージ格納バッファ１６にリクエストを登録して処理する（Ｓ４）。
【００８８】
メッセージ格納バッファ１６の全てのエントリが使用されていた場合（Ｓ３でＹｅｓ）、グローバルスイッチ・ディレクトリ制御部１５０は、リトライ格納先判定回路１９及び調停回路２１を経てリクエストをリトライバッファ２２に登録し、リトライ指示を発行元に通知する（Ｓ５）。
【００８９】
また、現在処理中のメッセージとアドレス比較した結果、一致があった場合（Ｓ２でＹｅｓ）、グローバルスイッチ・ディレクトリ制御部１５０は、メッセージ格納バッファ１６のアドレス一致したエントリのエントリ番号と、競合制御回路２０の各モジュール（３１，３２）の競合エントリ４２と、を比較する（Ｓ６）。ここで、複数のモジュール（３１，３２）の競合エントリ４２のうちで、使用中Valid４１が有効である競合エントリ４２のみを比較の対象とする。
【００９０】
メッセージ格納バッファ１６のエントリのエントリ番号と、競合制御回路２０の競合エントリ４２と、が一致しなかった場合（Ｓ６でＮｏ）、グローバルスイッチ・ディレクトリ制御部１５０は、さらに、使用していないモジュール（３１，３２）が競合制御回路２０に存在するか否かを判定する（Ｓ７）。
【００９１】
空いているモジュール（使用中Valid４１が無効であるモジュール）が存在しなかった場合（Ｓ７でＮｏ）、グローバルスイッチ・ディレクトリ制御部１５０は、リトライ格納先判定回路１９及び調停回路２１を経てリクエストをリトライバッファ２２に登録し、リトライ指示を発行元に通知する（Ｓ８）。
【００９２】
空いているモジュールが存在した場合（Ｓ７でＹｅｓ）、グローバルスイッチ・ディレクトリ制御部１５０は、その空いているモジュール（３１，３２）の使用中Valid４１、競合エントリ４２、次リクエストValid５２、次リクエスト格納レジスタ４４、に対する処理を行うと共に、さらに、メッセージ制御レジスタ１５が保持する次メッセージ待ちValidに対する処理を行う（Ｓ９）。
【００９３】
Ｓ９の処理として、具体的には、グローバルスイッチ・ディレクトリ制御部１５０は、モジュール（３１，３２）の使用中Valid４１を有効にし、エントリが一致したメッセージ格納バッファ１６のエントリ番号を競合エントリ４２に登録し、次リクエストValid５２を有効にし、次リクエスト格納レジスタ４４へリクエストを登録する。さらに、グローバルスイッチ・ディレクトリ制御部１５０は、メッセージ制御レジスタ１５が保持する次メッセージ待ちValidを有効にする。
【００９４】
メッセージ格納バッファ１６のエントリのエントリ番号と、競合制御回路２０の競合エントリ４２と、が一致した場合（Ｓ６でＹｅｓ）、グローバルスイッチ・ディレクトリ制御部１５０は、すれ違い登録指示５５に基づいて、リクエストの登録要求がすれ違い登録であるか否かを判定する（Ｓ１０）。
【００９５】
すれ違い登録でなかった場合（Ｓ１０でＮｏ）、リクエストが発行されずに次リクエスト格納レジスタ４４に残されているため、グローバルスイッチ・ディレクトリ制御部１５０は、エントリが一致した競合制御回路２０のモジュール（３１，３２）について、その発行元情報格納バッファ４５へ、リクエストの発行元情報を登録する（Ｓ１１）。
【００９６】
すれ違い登録であった場合（Ｓ１０でＹｅｓ）、次リクエスト格納レジスタ４４からリクエストが発行されると共に次リクエスト格納レジスタ４４に新たなリクエストが登録されることになるため、グローバルスイッチ・ディレクトリ制御部１５０は、エントリが一致した競合制御回路２０のモジュール（３１，３２）について、使用中Valid４１を有効にし、次リクエストValid５２を有効にし、次リクエスト格納レジスタ４４へリクエストを登録する（Ｓ１２）。
【００９７】
最後に、競合制御回路２０に登録するリクエストか否かを判定した結果、登録するリクエストであった場合（Ｓ１でＹｅｓ）、受信したリクエスト内に競合制御回路２０のモジュール番号が存在する。このため、グローバルスイッチ・ディレクトリ制御部１５０は、対応するモジュール（３１，３２）のリトライ待ちフラグ５３を無効にし、次リクエストValid５２を有効にし、次リクエスト格納レジスタ４４へリクエストを登録する（Ｓ１３）。
【００９８】
図５は、グローバルスイッチ・ディレクトリ制御部１５０の動作を示している。図５を参照して、グローバルスイッチ・ディレクトリ制御部１５０が、メッセージ格納バッファ１６に格納されている現在処理中のメッセージについての処理を完了した時に、リクエストの対象アドレスがメモリ１４０に存在する場合における動作を説明する。
【００９９】
グローバルスイッチ・ディレクトリ制御部１５０は、現在処理中のメッセージ格納バッファ１６のメッセージについての処理を完了した場合、メッセージ制御レジスタ１５が保持する次メッセージ待ちValidを参照して、次メッセージ待ちか否かを判定する（Ｓ２１）。
【０１００】
次メッセージ待ちでなかった場合（Ｓ２１でＮｏ）、グローバルスイッチ・ディレクトリ制御部１５０は、メッセージ格納バッファ１６のエントリを開放し、競合制御回路２０のアドレスとは異なるリクエストの処理を可能にする（Ｓ２２）。
【０１０１】
次メッセージ待ちであった場合（Ｓ２１でＹｅｓ）、グローバルスイッチ・ディレクトリ制御部１５０は、メッセージ格納バッファ１６のメッセージ処理を完了したエントリのエントリ番号と、競合制御回路２０の各モジュール（３１，３２）の競合エントリ４２と、を比較し、エントリ番号が一致したモジュール（３１，３２）を特定し、その特定したモジュール（３１，３２）のリクエスト発行可能Valid５１を有効にする（Ｓ２３）。
【０１０２】
グローバルスイッチ・ディレクトリ制御部１５０は、特定したモジュール（３１，３２）の次リクエストValid５２を参照して、次に処理対象となるリクエストが次リクエスト格納レジスタ４４に登録されているか否かを判定する（Ｓ２４）。
【０１０３】
次に処理対象となるリクエストはいずれ必ず登録される。このため、登録されていなかった場合（Ｓ２４でＮｏ）、グローバルスイッチ・ディレクトリ制御部１５０は、次メッセージの到着を待ち続ける（Ｓ２５）。
【０１０４】
次に処理対象となるリクエストが登録されていた場合（Ｓ２４でＹｅｓ）、グローバルスイッチ・ディレクトリ制御部１５０は、発行元格納バッファValid５４を参照して、発行元情報格納バッファ４５が空であるか否かを判定する（Ｓ２６）。
【０１０５】
発行元情報格納バッファ４５が空でなかった場合（Ｓ２６でＮｏ）、グローバルスイッチ・ディレクトリ制御部１５０は、次リクエスト格納レジスタ４４に格納しているリクエストを発行する。また、グローバルスイッチ・ディレクトリ制御部１５０は、リクエストの発行を完了した後、発行元情報格納バッファ４５に最も早く登録された発行元に対してリトライ指示を通知する共に、リトライ待ちフラグを有効にする（Ｓ２７）。
【０１０６】
発行元情報格納バッファ４５が空であった場合（Ｓ２６でＹｅｓ）、グローバルスイッチ・ディレクトリ制御部１５０は、すれ違い登録指示５５に基づいて、すれ違い登録であるリクエストの登録要求があるか否かを判定する（Ｓ２８）。
【０１０７】
すれ違い登録がなかった場合（Ｓ２８でＮｏ）、これ以上新たなリクエストは次リクエスト格納レジスタ４４に登録されず、次リクエスト格納レジスタ４４に現在格納しているリクエストが最後となるため、グローバルスイッチ・ディレクトリ制御部１５０は、次リクエスト格納レジスタ４４に格納しているリクエストを発行した後、競合制御回路２０の使用中Valid４１を無効にすると共に、メッセージ制御レジスタ１５の次メッセージ待ちValidも無効にする（Ｓ２９）。
【０１０８】
すれ違い登録があった場合（Ｓ２８でＹｅｓ）、グローバルスイッチ・ディレクトリ制御部１５０は、次リクエスト格納レジスタ４４に格納しているリクエストを発行した後、新たに登録要求されたリクエストを、次リクエスト格納レジスタ４４に登録する（Ｓ３０）。この場合、このモジュールを用いる処理は以後も継続されるため、グローバルスイッチ・ディレクトリ制御部１５０は、競合制御回路２０の使用中Valid４１や、メッセージ制御レジスタ１５の次メッセージ待ちValidは有効のままにする。
【０１０９】
以上説明した本実施の形態に基づくと、次の効果を奏する。
第１の効果として、次に処理するリクエストを、自ノード内のグローバルスイッチ・ディレクトリ制御部１５０に常に保持しておくことで、本発明に関連する技術（図９乃至１０に例示した技術）と比較して、次のリクエストを受け付けるまでの空き時間をなくすことができ、リクエストを連続で処理することが可能となる。このため、リトライの発生を抑制し、性能を向上させるという効果を奏する。
【０１１０】
第２の効果として、リトライが必要なリクエスト発行元の情報を保持すると共に、リクエストを受け付けた順にリトライ指示を発行元へと出すことで、本発明に関連する技術（図９乃至１０に例示した技術）と比較して、発行元間の処理に偏りをなくすことができ、タイミングが合わずに特定の発行元のリクエストが処理され難いという現象をなくすことができる。このため、バランスよくリクエストを処理できるという効果を奏する。
【０１１１】
第３の効果として、自ノード内に次リクエストを保持している際に他のリクエストを受け付けた場合にはその発行元情報のみを保持しておき、保持していた次リクエストの処理を開始した後に、次に保持されるべきリクエストの発行元に対してのみリトライ指示を行い、そのリトライ指示に対して出し直されたリクエストを優先して受取ることで、不要なリトライ指示の発行を抑制することができると共に、そのリトライ指示に基づくリクエストを確実に受け取ることができる。このため、本発明に関連する技術（図９乃至１０に例示した技術）と比較して、リトライ回数をより大幅に削減することができ、複数のノード間でのトラフィックをより低減することができるという効果を奏する。
【０１１２】
図６、図７、図８を参照して、上述した第１、第２、第３の効果を具体的に説明する。
図６は、本実施の形態に係るマルチプロセッサシステム１における動作を説明するための図である。図６では、グローバルスイッチ・ディレクトリ制御部１５０がリクエストを受信した時に、ノード１００のメモリ１４０に対象アドレスが存在する場合を説明している。
【０１１３】
ノード（２００，３００）のプロセッサ（２０１，２０２，３０１，３０２）からノード１００のメモリ１４０に対して同一アドレスのリクエストが発行されると、グローバルスイッチ・ディレクトリ制御部（２５０，３５０）を介して、グローバルスイッチ・ディレクトリ制御部１５０に送られる。
【０１１４】
グローバルスイッチ・ディレクトリ制御部１５０は、受信した４個のリクエストのうち、最初に受信したＣＰＵ２０１からのリクエストを受け付けて処理を行う。グローバルスイッチ・ディレクトリ制御部１５０は、２番目に受け付けたＣＰＵ２０２からのリクエストについては、グローバルスイッチ・ディレクトリ制御部１５０にリクエストごと保持する。また、グローバルスイッチ・ディレクトリ制御部１５０は、３番目、４番目に受け付けたＣＰＵ３０１、ＣＰＵ３０２からのリクエストについては、グローバルスイッチ・ディレクトリ制御部１５０に発行元情報のみを保持する。
【０１１５】
図７は、本実施の形態に係るマルチプロセッサシステム１における動作を説明するための図である。図７では、グローバルスイッチ・ディレクトリ制御部１５０が、メッセージ格納バッファ１６に格納されている現在処理中のメッセージの処理を完了した場合を説明している。
【０１１６】
グローバルスイッチ・ディレクトリ制御部１５０は、ＣＰＵ２０１からのリクエストを処理し、メモリ１４０からのリプライを受信すると、ＣＰＵ２０１へとリプライを返却し、次のメッセージ処理が可能になる。
【０１１７】
そこで、グローバルスイッチ・ディレクトリ制御部１５０は、保持しておいたリクエスト（２番目に受け付けたＣＰＵ２０２からのリクエスト）の処理を続けて行う。また、グローバルスイッチ・ディレクトリ制御部１５０は、保持していた発行元情報からリクエストを３番目に受け付けたＣＰＵ３０１を特定し、その特定したＣＰＵ３０１を含むノード３００のグローバルスイッチ・ディレクトリ制御部３５０に対して、リトライ指示を発行する。そして、グローバルスイッチ・ディレクトリ制御部１５０は、ＣＰＵ３０１から出し直されたリクエストを受信した後、グローバルスイッチ・ディレクトリ制御部１５０に保持する。
【０１１８】
図８は、本実施の形態に係るマルチプロセッサ１による動作を、時間軸で示すシーケンス図である。
グローバルスイッチ・ディレクトリ制御部１５０は、最初に受け付けたＣＰＵ２０１からのリクエストを、メモリ１４０に対して発行する（Ｔ１）。なお、この処理は、図１１に示した処理と同一である。
【０１１９】
次に、グローバルスイッチ・ディレクトリ制御部１５０は、ＣＰＵ２０１からのリクエスト処理中に、ＣＰＵ２０２、ＣＰＵ３０１、ＣＰＵ３０２の順でリクエストを受け付けると、次に処理するリクエストとして、ＣＰＵ２０２からのリクエストを、競合制御回路２０に登録する（Ｔ２）。
【０１２０】
そして、グローバルスイッチ・ディレクトリ制御部１５０は、ＣＰＵ３０１、ＣＰＵ３０２からのリクエストについては、発行元情報格納バッファ４５に発行元情報のみを登録する（Ｔ３、Ｔ４）。
【０１２１】
グローバルスイッチ・ディレクトリ制御部１５０は、ＣＰＵ２０１のリクエスト処理を完了してメモリ１４０からリプライを受信すると、次のリクエストを受け付けられる状態になる（Ｔ５）。
【０１２２】
グローバルスイッチ・ディレクトリ制御部１５０は、競合制御回路２０に登録しておいた次リクエスト（ＣＰＵ２０２からのリクエスト）の処理を開始する（Ｔ６）。また、グローバルスイッチ・ディレクトリ制御部１５０は、ＣＰＵ２０２の次に受け付けたＣＰＵ３０１に対して、リトライ指示を発行する（Ｔ７）。
【０１２３】
このように、グローバルスイッチ・ディレクトリ制御部１５０は、次のリクエスト（ＣＰＵ２０２からのリクエスト）の処理が開始されるまでの間は、リトライさせない（第３の効果）。
【０１２４】
グローバルスイッチ・ディレクトリ制御部１５０は、ＣＰＵ２０２のリクエスト処理を完了するより前に、リトライ指示に対して出し直されたＣＰＵ３０１からのリクエストを、競合制御回路２０に登録しておく。
【０１２５】
このようにして、グローバルスイッチ・ディレクトリ制御部１５０は、リクエストを連続して処理することを可能にしている（第１、第２の効果）。
【０１２６】
なお、本実施の形態では、リクエストの処理時間がリトライに要する時間に比べて十分に大きいことを前提とするが、これは特別な前提ではなく、一般的な装置においてもこの条件は当てはまるものである。
【０１２７】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【０１２８】
１  マルチプロセッサシステム、
１００，２００，３００  ノード、
１０１，１０２，２０１，２０２，３０１，３０２  プロセッサ、
１１０，２１０，３１０  ローカルスイッチ、
１２０，２２０，３２０  メモリ・ディレクトリ制御部、
１４０，２４０，３４０  メモリ、
１３０，１６０，２３０，２６０，３３０，３６０  ディレクトリ、
１５０，２５０，３５０  グローバルスイッチ・ディレクトリ制御部、
１１  次リクエスト登録判定回路、  １２，１８，２１  調停回路、
１３  アドレス一致回路、  １４  登録判定回路、  １５  メッセージ制御レジスタ、
１６  メッセージ格納バッファ、  １７  メッセージ発行・生成回路、
１９  リトライ格納先判定回路、  ２０  競合制御回路、  ２２  リトライバッファ、
３１，３２  モジュール、
４１  使用中Valid、  ４２  競合エントリ、  ４３  競合リクエスト制御レジスタ、
５１  リクエスト発行可能Valid、  ５２  次リクエストValid、
５３  リトライ待ちフラグ、  ５４  発行元格納バッファValid、
４４  次リクエスト格納レジスタ、  ４５  発行元情報格納バッファ、
４００，５００，６００  ノード、
４０１，４０２，５０１，５０２，６０１，６０２  プロセッサ、
４１０，５１０，６１０  ローカルスイッチ、
４２０，５２０，６２０  メモリ・ディレクトリ制御部、
４４０，５４０，６４０  メモリ、
４３０，４６０，５３０，５６０，６３０，６６０  ディレクトリ、
４５０，５５０，６５０  グローバルスイッチ・ディレクトリ制御部、
【図１】
0005630825.tif 000002
【図２】
0005630825.tif 000003
【図３】
0005630825.tif 000004
【図４】
0005630825.tif 000005
【図５】
0005630825.tif 000006
【図６】
0005630825.tif 000007
【図７】
0005630825.tif 000008
【図８】
0005630825.tif 000009
【図９】
0005630825.tif 000010
【図１０】
0005630825.tif 000011
【図１１】
0005630825.tif 000012
【図１２】
0005630825.tif 000013