説明

マルチプロセッサシステム、リクエスト処理方法、及びノード

【課題】アドレス競合処理時の性能を向上させること。
【解決手段】マルチプロセッサシステム2は、それぞれプロセッサ(701,702,801,802,901,902)を有する複数のノード(700,800,900)、を備え、自ノード700は、複数のノード(700,800,900)で共有されるメモリ740と、複数のノード(700,800,900)のうち他ノード(800,900)から発行されるリクエストを処理し、メモリ740のアドレスが指定された第1のリクエストの処理中に当該アドレスと一致するアドレスが指定された第2のリクエストを受信した場合、第1のリクエストの処理を完了するまで第2のリクエストを保持し、第1のリクエストの処理を完了した後に保持した第2のリクエストを続けて処理する制御部750と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マルチプロセッサシステムにおけるアドレス競合処理時のリクエスト処理技術に関する。
【背景技術】
【0002】
複数のプロセッサを備え、キャッシュのコヒーレンシ制御が必要となる情報処理装置では、同じアドレスのメモリに対して複数のプロセッサからリードリクエストが発行された場合には、制御の簡単化の観点から、最初に受信したリクエストの処理中は、同じアドレスに対する後続のリクエストについては、発行元に対して再発行指示(以下、リトライ指示と称する場合がある。)を出し、発行元からリクエストの出し直しをさせている。このようにしてリクエストを1個1個順番に処理することで、キャッシュ間のコヒーレンシを保っていた。
【0003】
例えば特許文献1に、キャッシュのコヒーレンシ制御方式を採用し、リクエストのアドレスが一致した場合には、発行元に対してリクエストの再発行指示を行う、マルチプロセッサシステムが開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2010−218350号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、近年のマルチコア化により発行元の数が増えたことで、上述したようなアドレス競合処理においては、アドレスが競合する頻度が高まり、性能への影響が大きくなってきた。以下、図9乃至図11を参照して、本発明に関連する技術の問題を説明する。
【0006】
図9に、本発明に関連する技術の構成を示す。
ノード400は、プロセッサ(401,402)と、自ノード内のキャシュの状態を管理するディレクトリ430と、メモリ440の制御を行うメモリ・ディレクトリ制御部420と、ノード間のルーティングと他ノードのキャッシュ状態を管理するディレクトリ460と、ディレクトリ460の制御を行うグローバルスイッチ・ディレクトリ制御部450と、これらをノード内で繋ぐローカルスイッチ410と、を備えて構成されている。
【0007】
各ノード(400,500,600)は、グローバルスイッチ・ディレクトリ制御部(450,550,650)を介して接続されている。
【0008】
ノード500のプロセッサ501からノード400のメモリ440に対するリクエストが発行されると、グローバルスイッチ・ディレクトリ制御部550を介してグローバルスイッチ・ディレクトリ制御部450へとリクエストが送られる。
【0009】
リクエストを受信したグローバルスイッチ・ディレクトリ制御部450は、メモリ440へのリクエストの発行を行うと同時にディレクトリ460を索引し、キャッシュ状態が有効なプロセッサがあれば、そのプロセッサに対してスヌープ(キャッシュ制御用のリクエスト)を発行してキャッシュの制御を行う。
【0010】
図10は、図9に示した構成の動作を説明するための図である。
ノード(500,600)のプロセッサ(501,502,601,602)から、ノード400のメモリ440に対して同一アドレスのリクエストが発行された場合、グローバルスイッチ・ディレクトリ制御部(550,650)を介して、グローバルスイッチ・ディレクトリ制御部450へとリクエストが送られる。
【0011】
グローバルスイッチ・ディレクトリ制御部450は、受信した4個のリクエストのうち、最初に受信したCPU501からのリクエストを受け付けて処理を行う。残りのCPU(502,601,602)からのリクエストは、最初のリクエストの処理が完了するまでの間、グローバルスイッチ・ディレクトリ制御部450とグローバルスイッチ・ディレクトリ制御部(550,650)との間でリトライし続ける。
【0012】
図11は、図10で説明した動作を時間軸で示すシーケンス図である。
グローバルスイッチ・ディレクトリ制御部450は、最初に受け付けたCPU501からのリクエストを、メモリ440に対して発行する(T11)。
【0013】
そして、このリクエストの処理が完了するまでの間は、CPU502、CPU601、CPU602から送られたリクエストに関しては、リトライし続ける(T12)。図11に示す例では、1個のリクエスト処理が行われている間に、計7回のリトライが発生している(CPU502のリクエストに対して3回、CPU601とCPU602のリクエストに対して各2回)。
【0014】
その後、グローバルスイッチ・ディレクトリ制御部450がメモリ440からリプライを受信すると、CPU501のリクエスト処理が完了(T13)する。これにより、グローバルスイッチ・ディレクトリ制御部450は次のリクエストを受け付け可能な状態となり、図11に示す例では、この状態の時にたまたま入ってきたCPU601のリクエストを受け付けて処理する(T14)。CPU601のリクエスト処理中は、CPU502とCPU603からのリクエストは、再びリトライし続ける(T15)。
【0015】
図11に例示した結果に見られるように、本発明に関連する技術には以下の課題があった。
第1に、リトライが大量に発生するため、ノード間のトラフィックが増大し、性能へと影響が生じてしまうことである。
第2に、リクエストが受け付け順に処理されないため、リクエスト発行元間で偏りが生じてしまい(あるCPUからのリクエストは処理されやすい、処理されにくいなど)、一向に処理されないCPUが出てくることで、性能低下につながることである。
【0016】
そこで本発明の目的は、これらの課題を解決し、アドレス競合処理時の性能を向上させることが可能なマルチプロセッサシステム及びマルチプロセッサシステムにおけるリクエスト処理方法を提供することである。
【課題を解決するための手段】
【0017】
本発明の第一の態様に係るマルチプロセッサシステムは、それぞれプロセッサを有する複数のノード、を備え、前記複数のノードのうちの自ノードは、前記複数のノードで共有されるメモリと、前記複数のノードのうち他ノードから発行されるリクエストを処理し、前記メモリのアドレスが指定された第1のリクエストの処理中に当該アドレスと一致するアドレスが指定された第2のリクエストを受信した場合、前記第1のリクエストの処理を完了するまで前記第2のリクエストを保持し、前記第1のリクエストの処理を完了した後に前記保持した前記第2のリクエストを続けて処理する制御部と、を備えるものである。
【0018】
これにより、アドレス競合処理時の性能を向上させることができる。
【0019】
本発明の第二の態様に係るリクエスト処理方法は、それぞれプロセッサを有する複数のノードを備えたマルチプロセッサにおけるリクエスト処理方法であって、前記複数のノードで共有されるメモリを有する自ノードが、他ノードから発行されるリクエストを処理するステップと、前記自ノードが、前記メモリのアドレスが指定された第1のリクエストの処理中に当該アドレスと一致するアドレスが指定された第2のリクエストを受信した場合、前記第1のリクエストの処理を完了するまで前記第2のリクエストを保持するステップと、前記自ノードが、前記第1のリクエストの処理を完了した後に前記保持した前記第2のリクエストを続けて処理するステップと、を含むものである。
【0020】
これにより、アドレス競合処理時の性能を向上させることができる。
【0021】
本発明の第三の態様に係るノードは、それぞれプロセッサを有する複数の他のノードと接続され、自ノードと他ノードで共有されるメモリと、前記他ノードから発行されるリクエストを処理する制御部と、を備え、前記制御部は、前記メモリのアドレスが指定された第1のリクエストの処理中に当該アドレスと一致するアドレスが指定された第2のリクエストを受信した場合、前記第1のリクエストの処理を完了するまで前記第2のリクエストを保持する次リクエスト格納レジスタを有し、前記第1のリクエストの処理を完了した後に前記保持した前記第2のリクエストを続けて処理することを特徴とするものである。
【0022】
これにより、アドレス競合処理時の性能を向上させることができる。
【発明の効果】
【0023】
本発明によれば、アドレス競合処理時の性能を向上させることが可能なマルチプロセッサシステム及びマルチプロセッサシステムにおけるリクエスト処理方法を提供することができる。
【図面の簡単な説明】
【0024】
【図1】実施の形態1に係るマルチプロセッサシステムの構成図である。
【図2】実施の形態1に係るグローバルスイッチ・ディレクトリ制御部の詳細構成図である。
【図3】実施の形態1に係る競合制御回路の詳細構成図である。
【図4】実施の形態1に係るグローバルスイッチ・ディレクトリ制御部の動作を示すフローチャートである。
【図5】実施の形態1に係るグローバルスイッチ・ディレクトリ制御部の動作を示すフローチャートである。
【図6】実施の形態1に係るマルチプロセッサシステムにおける動作を説明するための図である。
【図7】実施の形態1に係るマルチプロセッサシステムにおける動作を説明するための図である。
【図8】実施の形態1に係るマルチプロセッサによる動作を、時間軸で示すシーケンス図である。
【図9】本発明に関連する技術の構成図である。
【図10】図9に示した構成の動作を説明するための図である。
【図11】図10で説明した動作を時間軸で示すシーケンス図である。
【図12】本発明の原理を説明するための図である。
【発明を実施するための形態】
【0025】
本発明の実施の形態について説明するのに先立ち、図12を参照して本発明の原理について説明する。
【0026】
図に示すように、本発明に係るマルチプロセッサシステム2は、それぞれプロセッサ(701,702,801,802,901,902)を有する複数のノード(700,800,900)、を備え、自ノード700は、複数のノード(700,800,900)で共有されるメモリ740と、複数のノード(700,800,900)のうち他ノード(800,900)から発行されるリクエストを処理し、メモリ740のアドレスが指定された第1のリクエストの処理中に当該アドレスと一致するアドレスが指定された第2のリクエストを受信した場合、第1のリクエストの処理を完了するまで第2のリクエストを保持し、第1のリクエストの処理を完了した後に保持した第2のリクエストを続けて処理する制御部750(後述する実施の形態では、グローバルスイッチ・ディレクトリ制御部に相当する)と、を備えている。
【0027】
これにより、第1及び第2のリクエストを連続で処理することができ、リトライの発生を抑制し、アドレス競合処理時の性能を向上させることができる。
【0028】
実施の形態1.
以下、図面を参照して本発明の実施の形態について説明する。
図1は、本実施の形態に係るマルチプロセッサシステム1の構成図である。
マルチプロセッサシステム1は、互いに接続された複数のノード(100,200,300)を備えている。複数のノード(100,200,300)は、共有メモリを含むマルチプロセッサノードである。これら複数のノード(100,200,300)は、それぞれが有するグローバルスイッチ・ディレクトリ制御部(150,250,350)を介して、互いに接続されている。
【0029】
本実施の形態では、複数のノード(100,200,300)は全て同様の構成である。このため、以下では、ノード100の構成を代表して説明し、ノード200及びノード300の構成についてはその詳細な説明を省略する。
【0030】
ノード100は、複数のプロセッサ(101,102)と、ローカルスイッチ110と、メモリ・ディレクトリ制御部120と、メモリ140と、複数のディレクトリ(130,160)と、グローバルスイッチ・ディレクトリ制御部150と、を備えて構成されている。
【0031】
ローカルスイッチ110は、複数のプロセッサ(101,102)と、メモリ・ディレクトリ制御部120と、グローバルスイッチ・ディレクトリ制御部150と、接続されている。ローカルスイッチ110は、これら接続先のそれぞれから発行されるリクエスト、スヌープ、スヌープに対する応答(以下、レスポンスと称する場合がある。)、リクエストに対する応答(以下、リプライと称する場合がある。)、を、これらに含まれる宛先データに従ってルーティングする。
【0032】
メモリ・ディレクトリ制御部120は、メモリ140にアクセスされる全リクエストを受信する。メモリ・ディレクトリ制御部120は、リクエストを受信すると、メモリ140へのアクセスを行うと共にディレクトリ130を索引して、有効なキャッシュが存在した場合には、対象となるプロセッサに対してスヌープ処理を行う。そして、メモリ・ディレクトリ制御部120は、レスポンスと、メモリ140からのデータと、が揃ったところで、それらをリプライとしてリクエスト発行元へと返却する。リプライを返却することで、リクエストの処理が終了する。
【0033】
複数のディレクトリ(130,160)は、プロセッサのキャッシュの状態を管理する。メモリ・ディレクトリ制御部120と接続されているディレクトリ130は、ノード100内の複数のプロセッサ(101,102)のキャッシュ状態と、他ノード(200,300)のプロセッサを示すグローバルスイッチ・ディレクトリ制御部150のキャッシュ状態と、を、管理対象とする。グローバルスイッチ・ディレクトリ制御部150と接続されているディレクトリ160は、他ノード(200,300)のプロセッサ(201,202,301,302)のキャッシュ状態を管理対象とする。
【0034】
グローバルスイッチ・ディレクトリ制御部150は、他ノード(200,300)のグローバルスイッチ・ディレクトリ制御部(250,350)と接続されている。グローバルスイッチ・ディレクトリ制御部150は、リクエスト、スヌープ、レスポンス、リプライを、これらに含まれる宛先データに従ってルーティングする。
【0035】
また、グローバルスイッチ・ディレクトリ制御部150は、他ノード(200,300)からのリクエスト又はローカルスイッチ110からのスヌープを受信した場合、受信したリクエストなどを処理すると共にディレクトリ160を索引して、有効なデータを持つキャッシュが存在した場合には、そのプロセッサに対してスヌープ処理を行う。
【0036】
次に、図2を参照して、グローバルスイッチ・ディレクトリ制御部150の詳細な構成を説明する。本実施の形態では、図2に示した構成に基づいて、アドレス一致したリードリクエストを、受付順に連続で処理する制御を行う。
【0037】
グローバルスイッチ・ディレクトリ制御部150は、次リクエスト登録判定回路11と、複数の調停回路(12,18,21)と、アドレス一致回路13と、登録判定回路14と、メッセージ制御レジスタ15と、メッセージ格納バッファ16と、メッセージ発行・・生成回路17と、リトライ格納先判定回路19と、競合制御回路20と、リトライバッファ22と、を備えて構成されている。
【0038】
さらに、競合制御回路20は、アドレスごとに管理・制御を行う、複数のモジュール(31,32)を備えている。なお、複数のモジュール(31,32)の詳細については後述する。
【0039】
次リクエスト登録判定回路11は、他ノード(200,300)からのリクエストを受信した場合に、リクエスト内に含まれる次メッセージ登録可否情報から、受信したリクエストが競合制御回路20に登録するリクエストであるか否かを判定する。
【0040】
次リクエスト登録判定回路11は、競合制御回路20に登録するリクエストであると判定した場合、リクエスト内に含まれるモジュール番号から、競合制御回路20内の対応するモジュール(31,32)を特定する。そして、次リクエスト登録判定回路11は、特定したモジュール(31,32)の次リクエスト格納レジスタ44にリクエストの登録を行うため、そのモジュールに対して登録指示を行う。
【0041】
また、次リクエスト登録判定回路11は、次リクエスト格納レジスタ44にリクエストの登録を行う場合、特定したモジュール(31,32)の競合リクエスト制御レジスタ43の次リクエストValidを有効にし、リトライ待ちフラグを無効にする。なお、次リクエストValid及びリトライ待ちフラグの詳細については後述する。
【0042】
次リクエスト登録判定回路11は、競合制御回路20に登録するリクエストでないと判定した場合、通常のリクエストとしてメッセージ格納バッファ16へ登録するため、調停回路12へと調停参加を行う。
【0043】
調停回路12は、ローカルスイッチ110からのメッセージと、次リクエスト登録判定回路11からのメッセージと、さらに、競合制御回路20内の各モジュール(31,32)の次リクエスト格納レジスタ44から発行される次リクエストと、を受け取り、順不同で来るこれらメッセージを調停し、いずれのメッセージを処理するのか決定する。ここで、メッセージとは、リクエスト、リプライ、スヌープ、及びレスポンスを総称した用語である。
【0044】
アドレス一致回路13は、調停回路12で選ばれたメッセージのアドレスと、メッセージ格納バッファ16に登録されている有効なリクエスト又はスヌープのアドレスと、を比較する。アドレス一致回路13は、アドレス一致比較の結果と、アドレスが一致していた場合にはその一致したアドレスのリクエストなどを格納しているエントリのエントリ番号と、リクエストが競合制御回路20から発行されたものか否か、を、登録判定回路14に通知する。ここで、アドレスは、共有されるメモリ140のアドレスである。
【0045】
登録判定回路14は、アドレス一致回路13からの一致結果と、メッセージ格納バッファ16の使用状況と、を確認し、アドレス一致がなくメッセージ格納バッファ16に空いているエントリが存在した場合、メッセージ格納バッファ16の該当エントリにリクエストを登録して処理する。
【0046】
また、登録判定回路14は、リクエストが競合制御回路20から発行されたものか否かと、メッセージ格納バッファ16の使用状況と、を確認し、競合制御回路20から発行されたものである場合、メッセージ格納バッファ16の該当エントリにリクエストを登録して処理する。後述するように、競合制御回路20から送出されるリクエストについては、先行処理リクエストが使用したエントリを使用して処理されることになるため、必ず登録可能となるからである。
【0047】
なお、登録判定回路14は、それら以外の条件では、リクエストはリトライであると判定し、リトライと判定したリクエストと、アドレス一致結果と、一致したエントリのエントリ番号(アドレス一致していた場合のみ)と、を、リトライ格納先判定回路19へ通知する。
【0048】
メッセージ制御レジスタ15は、制御フラグなどを含んでいる。制御フラグなどは、メッセージ格納バッファ16に格納された各リクエスト又はスヌープを処理する際に用いる。制御フラグなどは、メッセージ格納バッファ16に格納された各リクエスト又はスヌープのエントリの個数分が用意されている。
【0049】
制御フラグなどには、エントリValid、次メッセージ待ちValid、発行要求フラグ、レスポンス受信フラグ、リプライデータ受信フラグ、リプライ発行済みフラグ、ライトバック受信フラグ、データ転送フラグなどの制御情報が含まれる。これら制御情報のうち、フラグ類は、リクエストの処理が完了する毎に全てクリアされるが、エントリValidだけは、次メッセージ待ちValidが無効で、かつ、リクエストの処理が完了した際にのみ、クリアされる。
【0050】
メッセージ格納バッファ16は、多数のエントリに区分されたバッファである。各エントリに、リクエスト及びスヌープを格納すると共に、スヌープを格納したエントリにそのスヌープに対応するレスポンスデータを格納し、リクエストを格納したエントリにそのリクエストに対するリプライデータを格納する。
【0051】
メッセージ発行・生成回路17は、メッセージ制御レジスタ15の発行要求フラグを参照し、発行要求フラグがオンになっているエントリを検索する。そして、発行要求フラグがオンになっているエントリについて、メッセージ制御レジスタ15の制御フラグなどと、メッセージ格納バッファ16のエントリデータと、を読み出す。
【0052】
また、メッセージ発行・生成回路17は、ディレクトリ160の索引及び更新を行うと共に、メッセージ制御レジスタ15の制御フラグなどに基づいて、次に発行するメッセージがリクエスト、スヌープ、レスポンス、リプライのいずれであるかを特定する。そして、メッセージ発行・生成回路17は、メッセージを生成し、その種別に応じて、ローカルスイッチ110もしくは他ノード(200,300)へと発行する。
【0053】
調停回路18は、メッセージ発行・生成回路17から送出される他ノード(200,300)行きのメッセージと、リトライバッファ22から送出されるリトライ指示のメッセージと、を受取り、順不同で来るこれらメッセージを調停し、いずれのメッセージを処理するかを決定する。
【0054】
リトライ格納先判定回路19は、リトライと判定されたリクエストと、アドレス一致結果と、一致したエントリのエントリ番号(アドレス一致していた場合のみ)と、を登録判定回路14から受け取る。
【0055】
リトライ格納先判定回路19は、アドレス一致がなかった場合には、受取ったリクエストに関してリトライバッファ22へリトライ指示のメッセージを格納するため、調停回路21に対してリトライ発行調停参加の要求を出す。
【0056】
リトライ格納先判定回路19は、アドレス一致した場合には、競合制御回路20の各モジュール(31,32)のうちで使用中Valid41が有効なモジュール(31,32)を確認し、そのモジュール(31,32)の競合エントリ42と、アドレス一致したエントリのエントリ番号と、を比較する。なお、使用中Valid41及び競合エントリ42の詳細については後述する。
【0057】
リトライ格納先判定回路19は、アドレス一致したエントリのエントリ番号と競合エントリ42とが一致した場合、リクエストの登録又はリクエストの発行元情報の登録を行うため、その一致した競合エントリ42を有するモジュール(31,32)に対して登録指示を行う。
【0058】
リトライ格納先判定回路19は、アドレス一致したエントリのエントリ番号と競合エントリ42とが一致しなかった場合、さらに、複数のモジュール(31,32)の空き状態を確認する。
【0059】
リトライ格納先判定回路19は、複数のモジュール(31,32)のいずれかに空きがあった場合(使用中Valid41が無効なモジュール(31,32)が存在した場合)、リクエストの登録を行うため、空いているモジュール(31,32)に対して登録指示を行う。
【0060】
リトライ格納先判定回路19は、いずれのモジュール(31,32)にも空きがなかった場合、リトライバッファ22へリトライ指示のメッセージを格納するため、調停回路21に対してリトライ発行調停参加の要求を出す。
【0061】
競合制御回路20は、複数のモジュール(31,32)を束ねたものである。複数のモジュール(31,32)は、それぞれアドレス毎に独立に制御を行う。各モジュール(31,32)は、ある1つのアドレスに関して、次リクエストの保持や発行、次々以降のリクエストの発行元情報の登録や、次々以降のリクエストのリトライ指示の発行を行う。図4では2個のモジュール(31,32)を有しているため、本実施の形態に係るリクエスト制御は、2つの異なるアドレスに対して同時に使用することが可能である。なお、モジュールの個数は限定されず、任意の個数に拡張可能である。各モジュール(31,32)内の詳細な構成については後述する。
【0062】
調停回路21は、リトライ格納先判定回路19からのリトライ発行調停参加要求と、競合制御回路内20の各モジュール(31,32)からのリトライ指示と、を受け取り、順不同で来るこれらを調停し、いずれのリトライ指示を処理するかを決定する。なお、調停回路21では、通常のリクエスト処理に影響を与えないようにするため、リトライ格納先判定回路19から送出されるリトライ指示を優先的に選択する。
【0063】
リトライバッファ22は、調停回路21で選ばれたリトライ指示のメッセージを格納する。また、リトライバッファ22は、リクエストの発行元に対してリトライ指示を行う。
【0064】
なお、リトライバッファ22が発行するリトライ指示のメッセージには、再発行指示に応答して発行されるリクエストが次リクエスト格納レジスタ44に現在格納されているリクエストの次に登録対象となるリクエストである旨(次メッセージ登録可否情報及びモジュール番号)を含ませるようにする。すなわち、後述するように、再発行させる特定のリクエストを、所望のモジュールの次リクエスト格納レジスタ44に確実に登録させるため、リトライ指示のメッセージには、競合制御回路20に登録するリクエストであるか否かを示す次メッセージ登録可否情報と、いずれのモジュールの次リクエスト格納レジスタ44に次リクエストを登録するかを示すモジュール番号と、を含む。
【0065】
次に、図3を参照して、競合制御回路内20の詳細な構成を説明する。本実施の形態では、競合制御回路内20の複数のモジュール(31,32)は全て同様の構成である。このため、図3では、1つのモジュール31の構成を代表して説明し、モジュール32の構成についてはその詳細な説明を省略する。
【0066】
モジュール31は、使用中Valid41と、競合エントリ42と、競合リクエスト制御レジスタ43と、次リクエスト格納レジスタ44と、発行元情報格納バッファ45と、を備えて構成されている。
【0067】
使用中Valid41は、その使用中Valid41を有するモジュール31が現在使用中であることを示す。使用中Valid41は、リトライ格納先判定回路19からの登録指示に基づいて有効になり、競合リクエスト制御レジスタ43内の情報が全てクリアされた場合(アドレス一致したリクエストのうちで、最後のリクエストを発行した場合)に、無効になる。
【0068】
競合エントリ42は、アドレス一致したメッセージ格納バッファ16内のエントリのエントリ番号を保持する。競合エントリ42が保持するエントリのエントリ番号は、リトライ格納先判定回路19からの登録指示と一緒に渡される。
【0069】
競合リクエスト制御レジスタ43は、リクエスト発行可能Valid51と、次リクエストValid52と、リトライ待ちフラグ53と、発行元格納バッファValid54と、を備えて構成されている。
【0070】
リクエスト発行可能Valid51は、次のリクエストを次リクエスト格納レジスタ44から発行可能か否かを示す。リクエスト発行可能Valid51は、メッセージ格納バッファ16のエントリに関して、競合エントリ42の競合エントリ番号と同じエントリ番号のリクエストの処理が完了した場合、有効になる(次のリクエストが発行可能になる)。リクエスト発行可能Valid51は、次に処理するリクエストを、モジュール31の次リクエスト格納レジスタ44から発行した場合、無効になる。
【0071】
次リクエストValid52は、次リクエスト格納レジスタ44に、有効なリクエストが保持されているか否かを示す。次リクエストValid52は、次リクエスト格納レジスタ44に有効なリクエストが保持された場合に有効となり、次リクエスト格納レジスタ44からリクエストが発行された場合、または有効なリクエストが何ら保持されていない場合に無効となる。
【0072】
リトライ待ちフラグ53は、モジュール31の発行元情報格納バッファ45からリトライ指示を発行してから、再発行されたリクエストが次リクエスト格納レジスタ44に格納されるまでの間の、リトライの待ち状態にあるか否かを示す。リトライ待ちフラグ53は、リトライの待ち状態にある場合、有効となり、リトライの待ち状態にない場合、無効となる。
【0073】
発行元格納バッファValid54は、リトライ指示が必要になる発行元の発行元情報が、発行元情報格納バッファ45に存在するか否かを示す。発行元格納バッファValid54は、発行元情報格納バッファ45に発行元情報が存在する場合、有効となり、発行元情報格納バッファ45に発行元情報が存在しない場合、無効となる。
【0074】
なお、メッセージ格納バッファ16には、現在処理中のメッセージが格納されており、この現在処理中のメッセージとアドレス競合するモジュールの次リクエスト格納レジスタ44には、次に処理するリクエスト(次リクエスト)が格納され、また、発行元情報格納バッファ45には、次々以降のリクエストの発行元情報が登録される。
【0075】
すれ違い登録指示55は、次リクエスト格納レジスタ44に格納されている次リクエストを発行するタイミングと、次リクエスト格納レジスタ44に次に登録されるべき新たなリクエスト(次々リクエスト)の登録指示を受けたタイミングと、が同じタイミングとなったことを通知する。つまり、すれ違い登録指示55は、次リクエストと次々リクエストとがすれ違うケースであるか否かを通知する。すれ違い登録指示55は、次に登録されるべきリクエストに含まれている。
【0076】
次リクエスト格納レジスタ44は、次に処理するリクエストを格納する。次リクエスト格納レジスタ44には、次リクエスト登録判定回路11、又は、リトライ格納先判定回路19からの登録指示に基づいて、リクエストが登録される。
【0077】
リクエストが、1番最初にアドレス一致したリクエストである場合、又は、すれ違ったリクエストである場合に、リトライ格納先判定回路19が、次リクエスト格納レジスタ44にリクエストを登録する。それ以外の場合、登録判定回路11が、次リクエスト格納レジスタ44にリクエストを登録する。
【0078】
発行元情報格納バッファ45は、リクエストの発行元情報を格納する。リクエストの発行元情報はリクエストの発行元を示しており、その発行元に対してリトライ指示が出される。発行元情報格納バッファ45は、次に処理されるリクエストが先行にいた場合(既に、次リクエスト格納レジスタ44に、次に処理するリクエストが格納されている場合)、リクエスト発行元に対してリトライ指示を出すために使用される。発行元情報格納バッファ45は、受け付けた順に発行元情報を登録し、登録した順に発行元情報を読み出す。
【0079】
モジュール31は、リクエスト発行可能Valid51が有効になり(リクエスト発行可能Valid51=1)、かつ、次リクエストValid52が有効になった(次リクエストValid52=1)場合、調停回路12に対して、リクエスト発行調停参加の要求を出す。つまり、モジュール31は、次リクエスト格納レジスタ44から次のリクエストを発行可能になり、かつ、次リクエスト格納レジスタ44に有効なリクエストが保持された場合に、次リクエスト格納レジスタ44に格納されているリクエストを発行する。
【0080】
また、モジュール31は、次リクエストValid52が無効になり(次リクエストValid52=0)、かつ、リトライ待ちフラグ53が無効になり(リトライ待ちフラグ53=0)、かつ、発行元格納バッファValid54が有効になった(発行元格納バッファValid54=1)場合、調停回路21に対して、リトライ指示の発行調停参加の要求を出す。つまり、モジュール31は、次リクエスト格納レジスタ44に有効なリクエストが保持されておらず、かつ、リトライの待ち状態でなく、かつ、発行元情報格納バッファ45に発行元情報が存在する場合に、発行元情報格納バッファ45に格納されている発行元情報に基づいて、リトライ指示を発行する。このリトライ指示には、発行元情報格納バッファ45に登録された最古の発行元情報が含まれている。
【0081】
また、モジュール31は、次リクエストValid52が無効になり(次リクエストValid52=0)、かつ、リトライ待ちフラグ53が無効になり(リトライ待ちフラグ53=0)、かつ、発行元格納バッファValid54が無効になり(発行元格納バッファValid54=0)、かつ、すれ違い登録がなかった(すれ違い登録指示55=0)場合、モジュール31について、競合エントリ42に保持したエントリについての使用を終了し、モジュール31を解放する。つまり、モジュール31は、次リクエスト格納レジスタ44に有効なリクエストが保持されておらず、かつ、リトライの待ち状態でなく、かつ、発行元情報格納バッファ45に発行元情報が存在しておらず、かつ、すれ違い登録指示がなかった場合に、使用中Valid41を無効にすると共に、競合エントリ42の登録内容をクリアする。
【0082】
以上に、本実施の形態に係るマルチプロセッサシステム1の構成を説明したが、プロセッサ(101,102,201,202,301,302)、ローカルスイッチ(110,210,310)、メモリ・ディレクトリ制御部(120,220,320)、メモリ(140,240,340)、ディレクトリ(130,160,230.260,330,360)などの構成は、当業者にとって良く知られた機能を有する公知の技術を採用すればよい。このため、ここでは、その詳細な構成を省略する。
【0083】
次に、図4及び図5を参照して、グローバルスイッチ・ディレクトリ制御部の動作を説明する。
図4は、グローバルスイッチ・ディレクトリ制御部150の動作を示している。図4を参照して、グローバルスイッチ・ディレクトリ制御部150がリクエストを受信した時に、リクエストの対象アドレスがメモリ140に存在する場合における動作を説明する。
【0084】
グローバルスイッチ・ディレクトリ制御部150は、他ノード(200,300)から送出されたリクエストを受信した場合、リクエストが競合制御回路20に登録するリクエストであるか否かを判定する(S1)。
【0085】
登録するリクエストではなかった場合(S1でNo)、グローバルスイッチ・ディレクトリ制御部150は、調停回路12で選ばれたメッセージのアドレスと、メッセージ格納バッファ16に格納されている現在処理中のメッセージのアドレスと、を比較する(S2)。
【0086】
アドレス一致がなかった場合(S2でNo)、グローバルスイッチ・ディレクトリ制御部150は、メッセージ格納バッファ16の使用状況を確認して、全てのエントリが使用されているか否かを判定する(S3)。
【0087】
メッセージ格納バッファ16に空いているエントリ(使用されていないエントリ)が存在した場合(S3でNo)、グローバルスイッチ・ディレクトリ制御部150は、メッセージ格納バッファ16にリクエストを登録して処理する(S4)。
【0088】
メッセージ格納バッファ16の全てのエントリが使用されていた場合(S3でYes)、グローバルスイッチ・ディレクトリ制御部150は、リトライ格納先判定回路19及び調停回路21を経てリクエストをリトライバッファ22に登録し、リトライ指示を発行元に通知する(S5)。
【0089】
また、現在処理中のメッセージとアドレス比較した結果、一致があった場合(S2でYes)、グローバルスイッチ・ディレクトリ制御部150は、メッセージ格納バッファ16のアドレス一致したエントリのエントリ番号と、競合制御回路20の各モジュール(31,32)の競合エントリ42と、を比較する(S6)。ここで、複数のモジュール(31,32)の競合エントリ42のうちで、使用中Valid41が有効である競合エントリ42のみを比較の対象とする。
【0090】
メッセージ格納バッファ16のエントリのエントリ番号と、競合制御回路20の競合エントリ42と、が一致しなかった場合(S6でNo)、グローバルスイッチ・ディレクトリ制御部150は、さらに、使用していないモジュール(31,32)が競合制御回路20に存在するか否かを判定する(S7)。
【0091】
空いているモジュール(使用中Valid41が無効であるモジュール)が存在しなかった場合(S7でNo)、グローバルスイッチ・ディレクトリ制御部150は、リトライ格納先判定回路19及び調停回路21を経てリクエストをリトライバッファ22に登録し、リトライ指示を発行元に通知する(S8)。
【0092】
空いているモジュールが存在した場合(S7でYes)、グローバルスイッチ・ディレクトリ制御部150は、その空いているモジュール(31,32)の使用中Valid41、競合エントリ42、次リクエストValid52、次リクエスト格納レジスタ44、に対する処理を行うと共に、さらに、メッセージ制御レジスタ15が保持する次メッセージ待ちValidに対する処理を行う(S9)。
【0093】
S9の処理として、具体的には、グローバルスイッチ・ディレクトリ制御部150は、モジュール(31,32)の使用中Valid41を有効にし、エントリが一致したメッセージ格納バッファ16のエントリ番号を競合エントリ42に登録し、次リクエストValid52を有効にし、次リクエスト格納レジスタ44へリクエストを登録する。さらに、グローバルスイッチ・ディレクトリ制御部150は、メッセージ制御レジスタ15が保持する次メッセージ待ちValidを有効にする。
【0094】
メッセージ格納バッファ16のエントリのエントリ番号と、競合制御回路20の競合エントリ42と、が一致した場合(S6でYes)、グローバルスイッチ・ディレクトリ制御部150は、すれ違い登録指示55に基づいて、リクエストの登録要求がすれ違い登録であるか否かを判定する(S10)。
【0095】
すれ違い登録でなかった場合(S10でNo)、リクエストが発行されずに次リクエスト格納レジスタ44に残されているため、グローバルスイッチ・ディレクトリ制御部150は、エントリが一致した競合制御回路20のモジュール(31,32)について、その発行元情報格納バッファ45へ、リクエストの発行元情報を登録する(S11)。
【0096】
すれ違い登録であった場合(S10でYes)、次リクエスト格納レジスタ44からリクエストが発行されると共に次リクエスト格納レジスタ44に新たなリクエストが登録されることになるため、グローバルスイッチ・ディレクトリ制御部150は、エントリが一致した競合制御回路20のモジュール(31,32)について、使用中Valid41を有効にし、次リクエストValid52を有効にし、次リクエスト格納レジスタ44へリクエストを登録する(S12)。
【0097】
最後に、競合制御回路20に登録するリクエストか否かを判定した結果、登録するリクエストであった場合(S1でYes)、受信したリクエスト内に競合制御回路20のモジュール番号が存在する。このため、グローバルスイッチ・ディレクトリ制御部150は、対応するモジュール(31,32)のリトライ待ちフラグ53を無効にし、次リクエストValid52を有効にし、次リクエスト格納レジスタ44へリクエストを登録する(S13)。
【0098】
図5は、グローバルスイッチ・ディレクトリ制御部150の動作を示している。図5を参照して、グローバルスイッチ・ディレクトリ制御部150が、メッセージ格納バッファ16に格納されている現在処理中のメッセージについての処理を完了した時に、リクエストの対象アドレスがメモリ140に存在する場合における動作を説明する。
【0099】
グローバルスイッチ・ディレクトリ制御部150は、現在処理中のメッセージ格納バッファ16のメッセージについての処理を完了した場合、メッセージ制御レジスタ15が保持する次メッセージ待ちValidを参照して、次メッセージ待ちか否かを判定する(S21)。
【0100】
次メッセージ待ちでなかった場合(S21でNo)、グローバルスイッチ・ディレクトリ制御部150は、メッセージ格納バッファ16のエントリを開放し、競合制御回路20のアドレスとは異なるリクエストの処理を可能にする(S22)。
【0101】
次メッセージ待ちであった場合(S21でYes)、グローバルスイッチ・ディレクトリ制御部150は、メッセージ格納バッファ16のメッセージ処理を完了したエントリのエントリ番号と、競合制御回路20の各モジュール(31,32)の競合エントリ42と、を比較し、エントリ番号が一致したモジュール(31,32)を特定し、その特定したモジュール(31,32)のリクエスト発行可能Valid51を有効にする(S23)。
【0102】
グローバルスイッチ・ディレクトリ制御部150は、特定したモジュール(31,32)の次リクエストValid52を参照して、次に処理対象となるリクエストが次リクエスト格納レジスタ44に登録されているか否かを判定する(S24)。
【0103】
次に処理対象となるリクエストはいずれ必ず登録される。このため、登録されていなかった場合(S24でNo)、グローバルスイッチ・ディレクトリ制御部150は、次メッセージの到着を待ち続ける(S25)。
【0104】
次に処理対象となるリクエストが登録されていた場合(S24でYes)、グローバルスイッチ・ディレクトリ制御部150は、発行元格納バッファValid54を参照して、発行元情報格納バッファ45が空であるか否かを判定する(S26)。
【0105】
発行元情報格納バッファ45が空でなかった場合(S26でNo)、グローバルスイッチ・ディレクトリ制御部150は、次リクエスト格納レジスタ44に格納しているリクエストを発行する。また、グローバルスイッチ・ディレクトリ制御部150は、リクエストの発行を完了した後、発行元情報格納バッファ45に最も早く登録された発行元に対してリトライ指示を通知する共に、リトライ待ちフラグを有効にする(S27)。
【0106】
発行元情報格納バッファ45が空であった場合(S26でYes)、グローバルスイッチ・ディレクトリ制御部150は、すれ違い登録指示55に基づいて、すれ違い登録であるリクエストの登録要求があるか否かを判定する(S28)。
【0107】
すれ違い登録がなかった場合(S28でNo)、これ以上新たなリクエストは次リクエスト格納レジスタ44に登録されず、次リクエスト格納レジスタ44に現在格納しているリクエストが最後となるため、グローバルスイッチ・ディレクトリ制御部150は、次リクエスト格納レジスタ44に格納しているリクエストを発行した後、競合制御回路20の使用中Valid41を無効にすると共に、メッセージ制御レジスタ15の次メッセージ待ちValidも無効にする(S29)。
【0108】
すれ違い登録があった場合(S28でYes)、グローバルスイッチ・ディレクトリ制御部150は、次リクエスト格納レジスタ44に格納しているリクエストを発行した後、新たに登録要求されたリクエストを、次リクエスト格納レジスタ44に登録する(S30)。この場合、このモジュールを用いる処理は以後も継続されるため、グローバルスイッチ・ディレクトリ制御部150は、競合制御回路20の使用中Valid41や、メッセージ制御レジスタ15の次メッセージ待ちValidは有効のままにする。
【0109】
以上説明した本実施の形態に基づくと、次の効果を奏する。
第1の効果として、次に処理するリクエストを、自ノード内のグローバルスイッチ・ディレクトリ制御部150に常に保持しておくことで、本発明に関連する技術(図9乃至10に例示した技術)と比較して、次のリクエストを受け付けるまでの空き時間をなくすことができ、リクエストを連続で処理することが可能となる。このため、リトライの発生を抑制し、性能を向上させるという効果を奏する。
【0110】
第2の効果として、リトライが必要なリクエスト発行元の情報を保持すると共に、リクエストを受け付けた順にリトライ指示を発行元へと出すことで、本発明に関連する技術(図9乃至10に例示した技術)と比較して、発行元間の処理に偏りをなくすことができ、タイミングが合わずに特定の発行元のリクエストが処理され難いという現象をなくすことができる。このため、バランスよくリクエストを処理できるという効果を奏する。
【0111】
第3の効果として、自ノード内に次リクエストを保持している際に他のリクエストを受け付けた場合にはその発行元情報のみを保持しておき、保持していた次リクエストの処理を開始した後に、次に保持されるべきリクエストの発行元に対してのみリトライ指示を行い、そのリトライ指示に対して出し直されたリクエストを優先して受取ることで、不要なリトライ指示の発行を抑制することができると共に、そのリトライ指示に基づくリクエストを確実に受け取ることができる。このため、本発明に関連する技術(図9乃至10に例示した技術)と比較して、リトライ回数をより大幅に削減することができ、複数のノード間でのトラフィックをより低減することができるという効果を奏する。
【0112】
図6、図7、図8を参照して、上述した第1、第2、第3の効果を具体的に説明する。
図6は、本実施の形態に係るマルチプロセッサシステム1における動作を説明するための図である。図6では、グローバルスイッチ・ディレクトリ制御部150がリクエストを受信した時に、ノード100のメモリ140に対象アドレスが存在する場合を説明している。
【0113】
ノード(200,300)のプロセッサ(201,202,301,302)からノード100のメモリ140に対して同一アドレスのリクエストが発行されると、グローバルスイッチ・ディレクトリ制御部(250,350)を介して、グローバルスイッチ・ディレクトリ制御部150に送られる。
【0114】
グローバルスイッチ・ディレクトリ制御部150は、受信した4個のリクエストのうち、最初に受信したCPU201からのリクエストを受け付けて処理を行う。グローバルスイッチ・ディレクトリ制御部150は、2番目に受け付けたCPU202からのリクエストについては、グローバルスイッチ・ディレクトリ制御部150にリクエストごと保持する。また、グローバルスイッチ・ディレクトリ制御部150は、3番目、4番目に受け付けたCPU301、CPU302からのリクエストについては、グローバルスイッチ・ディレクトリ制御部150に発行元情報のみを保持する。
【0115】
図7は、本実施の形態に係るマルチプロセッサシステム1における動作を説明するための図である。図7では、グローバルスイッチ・ディレクトリ制御部150が、メッセージ格納バッファ16に格納されている現在処理中のメッセージの処理を完了した場合を説明している。
【0116】
グローバルスイッチ・ディレクトリ制御部150は、CPU201からのリクエストを処理し、メモリ140からのリプライを受信すると、CPU201へとリプライを返却し、次のメッセージ処理が可能になる。
【0117】
そこで、グローバルスイッチ・ディレクトリ制御部150は、保持しておいたリクエスト(2番目に受け付けたCPU202からのリクエスト)の処理を続けて行う。また、グローバルスイッチ・ディレクトリ制御部150は、保持していた発行元情報からリクエストを3番目に受け付けたCPU301を特定し、その特定したCPU301を含むノード300のグローバルスイッチ・ディレクトリ制御部350に対して、リトライ指示を発行する。そして、グローバルスイッチ・ディレクトリ制御部150は、CPU301から出し直されたリクエストを受信した後、グローバルスイッチ・ディレクトリ制御部150に保持する。
【0118】
図8は、本実施の形態に係るマルチプロセッサ1による動作を、時間軸で示すシーケンス図である。
グローバルスイッチ・ディレクトリ制御部150は、最初に受け付けたCPU201からのリクエストを、メモリ140に対して発行する(T1)。なお、この処理は、図11に示した処理と同一である。
【0119】
次に、グローバルスイッチ・ディレクトリ制御部150は、CPU201からのリクエスト処理中に、CPU202、CPU301、CPU302の順でリクエストを受け付けると、次に処理するリクエストとして、CPU202からのリクエストを、競合制御回路20に登録する(T2)。
【0120】
そして、グローバルスイッチ・ディレクトリ制御部150は、CPU301、CPU302からのリクエストについては、発行元情報格納バッファ45に発行元情報のみを登録する(T3、T4)。
【0121】
グローバルスイッチ・ディレクトリ制御部150は、CPU201のリクエスト処理を完了してメモリ140からリプライを受信すると、次のリクエストを受け付けられる状態になる(T5)。
【0122】
グローバルスイッチ・ディレクトリ制御部150は、競合制御回路20に登録しておいた次リクエスト(CPU202からのリクエスト)の処理を開始する(T6)。また、グローバルスイッチ・ディレクトリ制御部150は、CPU202の次に受け付けたCPU301に対して、リトライ指示を発行する(T7)。
【0123】
このように、グローバルスイッチ・ディレクトリ制御部150は、次のリクエスト(CPU202からのリクエスト)の処理が開始されるまでの間は、リトライさせない(第3の効果)。
【0124】
グローバルスイッチ・ディレクトリ制御部150は、CPU202のリクエスト処理を完了するより前に、リトライ指示に対して出し直されたCPU301からのリクエストを、競合制御回路20に登録しておく。
【0125】
このようにして、グローバルスイッチ・ディレクトリ制御部150は、リクエストを連続して処理することを可能にしている(第1、第2の効果)。
【0126】
なお、本実施の形態では、リクエストの処理時間がリトライに要する時間に比べて十分に大きいことを前提とするが、これは特別な前提ではなく、一般的な装置においてもこの条件は当てはまるものである。
【0127】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【0128】
1 マルチプロセッサシステム、
100,200,300 ノード、
101,102,201,202,301,302 プロセッサ、
110,210,310 ローカルスイッチ、
120,220,320 メモリ・ディレクトリ制御部、
140,240,340 メモリ、
130,160,230,260,330,360 ディレクトリ、
150,250,350 グローバルスイッチ・ディレクトリ制御部、

11 次リクエスト登録判定回路、 12,18,21 調停回路、
13 アドレス一致回路、 14 登録判定回路、 15 メッセージ制御レジスタ、
16 メッセージ格納バッファ、 17 メッセージ発行・生成回路、
19 リトライ格納先判定回路、 20 競合制御回路、 22 リトライバッファ、
31,32 モジュール、
41 使用中Valid、 42 競合エントリ、 43 競合リクエスト制御レジスタ、
51 リクエスト発行可能Valid、 52 次リクエストValid、
53 リトライ待ちフラグ、 54 発行元格納バッファValid、
44 次リクエスト格納レジスタ、 45 発行元情報格納バッファ、

400,500,600 ノード、
401,402,501,502,601,602 プロセッサ、
410,510,610 ローカルスイッチ、
420,520,620 メモリ・ディレクトリ制御部、
440,540,640 メモリ、
430,460,530,560,630,660 ディレクトリ、
450,550,650 グローバルスイッチ・ディレクトリ制御部、

【特許請求の範囲】
【請求項1】
それぞれプロセッサを有する複数のノード、を備え、
前記複数のノードのうちの自ノードは、
前記複数のノードで共有されるメモリと、
前記複数のノードのうち他ノードから発行されるリクエストを処理し、前記メモリのアドレスが指定された第1のリクエストの処理中に当該アドレスと一致するアドレスが指定された第2のリクエストを受信した場合、前記第1のリクエストの処理を完了するまで前記第2のリクエストを保持し、前記第1のリクエストの処理を完了した後に前記保持した前記第2のリクエストを続けて処理する制御部と、
を備えるマルチプロセッサシステム。
【請求項2】
前記制御部は、
前記第2のリクエストの保持中に、前記アドレスと一致するアドレスが指定された第3のリクエストを受信した場合、前記第2のリクエストの処理を開始するまで前記第3のリクエストの発行元情報を保持し、前記第2のリクエストの処理を開始した後に、前記保持した発行元情報が示す発行元に対してリクエストの再発行指示を行う
ことを特徴とする請求項1に記載のマルチプロセッサシステム。
【請求項3】
前記制御部は、
前記第2のリクエストの保持中に、前記アドレスと一致するアドレスが指定された複数のリクエストを受信した場合、前記第2のリクエストの処理を開始するまで前記複数のリクエストの発行元情報を受信した順に保持し、前記第2のリクエストの処理を開始した後に、前記保持した発行元情報のうち最初に保持した発行元情報が示す発行元に対してリクエストの再発行指示を行う
ことを特徴とする請求項2に記載のマルチプロセッサシステム。
【請求項4】
前記制御部は、
前記第2のリクエストの保持中に、前記アドレスと一致するアドレスが指定された第3のリクエストを受信した場合、前記第2のリクエストの処理を開始するタイミングと、前記第3のリクエストを保持しようとするタイミングと、が、同じタイミングとなったときには前記第3のリクエストを保持し、それ以外のときには、前記第2のリクエストの処理を開始するまで前記第3のリクエストの発行元情報を保持する
ことを特徴とする請求項2又は3に記載のマルチプロセッサ。
【請求項5】
前記制御部は、
前記保持した発行元情報が示す発行元に対してリクエストの再発行指示を行う場合、当該再発行指示に応答して発行されるリクエストは前記第3のリクエストの次に保持対象となるリクエストである旨を含むリクエストの再発行指示を行い、前記再発行指示に応答して発行されたリクエストを受信した場合、当該受信したリクエストを受信する他のリクエストよりも優先して保持する
ことを特徴とする請求項2乃至4のいずれか1項に記載のマルチプロセッサ。
【請求項6】
それぞれプロセッサを有する複数のノードを備えたマルチプロセッサにおけるリクエスト処理方法であって、
前記複数のノードで共有されるメモリを有する自ノードが、他ノードから発行されるリクエストを処理するステップと、
前記自ノードが、前記メモリのアドレスが指定された第1のリクエストの処理中に当該アドレスと一致するアドレスが指定された第2のリクエストを受信した場合、前記第1のリクエストの処理を完了するまで前記第2のリクエストを保持するステップと、
前記自ノードが、前記第1のリクエストの処理を完了した後に前記保持した前記第2のリクエストを続けて処理するステップと、
を含むリクエスト処理方法。
【請求項7】
それぞれプロセッサを有する複数の他のノードと接続され、
自ノードと他ノードで共有されるメモリと、
前記他ノードから発行されるリクエストを処理する制御部と、を備え、
前記制御部は、
前記メモリのアドレスが指定された第1のリクエストの処理中に当該アドレスと一致するアドレスが指定された第2のリクエストを受信した場合、前記第1のリクエストの処理を完了するまで前記第2のリクエストを保持する次リクエスト格納レジスタを有し、前記第1のリクエストの処理を完了した後に前記保持した前記第2のリクエストを続けて処理する
ことを特徴とするノード。
【請求項8】
前記制御部は、
前記第2のリクエストの保持中に、前記アドレスと一致するアドレスが指定された複数のリクエストを受信した場合、前記第2のリクエストの処理を開始するまで前記複数のリクエストの発行元情報を受信した順に保持する発行元情報格納バッファを有し、前記第2のリクエストの処理を開始した後に、前記保持した発行元情報のうち最初に保持した発行元情報が示す発行元に対してリクエストの再発行指示を行う
ことを特徴とする請求項7に記載のノード。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate