JP3751741B2 - マルチプロセッサシステム - Google Patents

マルチプロセッサシステム Download PDF

Info

Publication number
JP3751741B2
JP3751741B2 JP02113598A JP2113598A JP3751741B2 JP 3751741 B2 JP3751741 B2 JP 3751741B2 JP 02113598 A JP02113598 A JP 02113598A JP 2113598 A JP2113598 A JP 2113598A JP 3751741 B2 JP3751741 B2 JP 3751741B2
Authority
JP
Japan
Prior art keywords
message
control unit
address
node
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP02113598A
Other languages
English (en)
Other versions
JPH11219343A (ja
Inventor
岳生 細見
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP02113598A priority Critical patent/JP3751741B2/ja
Priority to US09/241,069 priority patent/US6408365B1/en
Priority to DE19904049A priority patent/DE19904049A1/de
Publication of JPH11219343A publication Critical patent/JPH11219343A/ja
Application granted granted Critical
Publication of JP3751741B2 publication Critical patent/JP3751741B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory
    • G06F2212/2542Non-uniform memory access [NUMA] architecture

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、疎結合型のマルチプロセッサシステムに関し、特にこのようなマルチプロセッサシステムにおける主記憶装置とキャッシュメモリとのデータの一貫性(コヒーレンシー)の維持に関するものである。
【0002】
【従来の技術】
従来の疎結合型マルチプロセッサシステムにおけるキャッシュメモリと主メモリとのデータの一貫性(コヒーレンシー)を維持するための技術が、文献(「The Directory-Based Cache Coherence Protocol for the DASH Multiprocessor」,Daniel Lenoski, James Laudon, Kourosh Gharachorloo, Anoop Gupta and John Hennessy,In Proceedings of 17th International Symposium on Computer Architecture,p148-159,1990)に開示されている。
【0003】
図34は、このような従来のマルチプロセッサシステムの構成を示すブロック図である。
【0004】
図示するように、このマルチプロセッサシステムは、複数のノードPe0〜Pen−1と、各ノードを結合する二つの相互結合網10−1、10−2とから構成されている。
【0005】
各ノード(図では、Peiのみを示す)は、演算やメモリアクセス等を行うプロセッサ50と、データを保持する主メモリ51と、プロセッサ50がデータを一時的に保持する主メモリ51よりも高速アクセスが可能なキャッシュメモリ52と、主メモリ51とキャッシュメモリ52(他のノードのものを含む)との間のデータの一貫性を維持するための一貫性維持制御部53とを有している。
【0006】
一貫性維持制御部53は、主メモリ51に格納されているデータの状態およびデータのコピーをキャッシュメモリ52に保持しているノードの情報(以降保持ノード情報と呼ぶ)を保持している。データの状態は、C、Mの2つからなる。Cは、複数のノードのキャッシュメモリ52にデータのコピーが存在する状態を表す。この時、キャッシュメモリ52のコピーと主メモリ51のデータの値は同じである。Mは、1つのノードのキャッシュメモリ52のみがデータのコピーを保持している状態を表す。この時、キャッシュメモリ52のコピーの値と主メモリ51のデータの値は異なり、コピーの値が最新の値である。
【0007】
一貫性維持制御部53は、キャッシュメモリ52に格納されているデータの状態およびデータのタグアドレスを保持している。状態はI、S、Dの3つからなる。Iは、一貫性が維持された有効なデータのコピーが存在しない状態である。Sは、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ52にも有効なコピーが存在する可能性がある、という状態である。Dは、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ52には有効なコピーが存在せず、かつ主メモリ51のデータの値と異なる、という状態である。タグアドレスはどのアドレスのデータであるかを示す。
【0008】
相互結合網10−1は、ノード間でやり取りされる要求メッセージを配信する。相互結合網10−2は、ノード間でやり取りされる応答メッセージを配信する。このように、要求メッセージと応答メッセージを配信する相互結合網をそれぞれ別々に用意することによって、主メモリ51とキャッシュメモリ52とのデータの一貫性維持処理におけるデッドロックを回避するものである。
【0009】
以下、プロセッサ50が所定のアドレスのデータに対してロード或いはストアアクセスをしたときの、このマルチプロセッサシステムにおいて主メモリ51とキャッシュメモリ52とのデータの一貫性を維持するための動作について、説明する。
【0010】
最初に、例えば、ノードPe1のプロセッサ50が、ロードアクセスを行ったときの動作について説明する。
【0011】
一貫性維持制御部53は、該当するアドレスのデータについて有効なコピーがキャッシュメモリ52にも存在するかどうかを調べる。キャッシュメモリ52に有効なコピーが存在する場合、すなわち状態がSまたはDである場合は、一貫性制御部53は、プロセッサ50にキャッシュメモリ52から読み出したデータを渡すことによってプロセッサに応答し、処理を終了する。
【0012】
キャッシュメモリ52に有効なコピーが存在しない場合、すなわち状態がIの場合は、ノードPe1の一貫性維持制御部53は、該当するアドレスのデータを保持しているノード、例えば、ノードPeh宛に、当該データの読み出し要求メッセージを相互結合網10−1を介して送信する。
【0013】
読み出し要求メッセージを受けたノードPehの一貫性維持制御部53は、該当するアドレスのデータについての最新の値がノードPehの主メモリ51に存在するかどうかを調べる。該当するアドレスのデータについての最新の値が主メモリ51に存在する場合、すなわち状態がCである場合には、ノードPehの一貫性維持制御部53は、主メモリ51に格納されているデータを相互結合網10−2を介してノードPe1に送信すると共に、保持ノード情報にノードPe1を加える。
【0014】
ノードPehからのデータを受信したノードPe1の一貫性維持制御部53は、プロセッサ50に受け取ったデータを渡すと共に、キャッシュメモリ52にそのデータをコピーする。さらに、ノードPe1の一貫性維持制御部53は、状態をSとする。
【0015】
一方、読み出し要求メッセージを受けたノードPehにおいて、該当するアドレスのデータについての最新の値が主メモリ51に存在しない場合、すなわち状態がMである場合には、ノードPehの一貫性維持制御部53は、保持ノード情報を参照して、最新のデータを保持するノード、例えば、ノードPerに読み出し要求メッセージを相互結合網10−1を介して送信する。
【0016】
読み出し要求メッセージを受けたノードPerの一貫性維持制御部53は、キャッシュメモリ52に状態がDのデータが存在するかどうかを調べる。キャッシュメモリ52に状態がDのデータが存在する場合には、ノードPerの一貫性維持制御部53は、キャッシュメモリ52に格納されているデータを相互結合網10−2を介してノードPe1に送信すると共に、キャッシュメモリ52に格納されているデータを付加した書き戻し要求メッセージを相互結合網10−1を介してノードPehに送信する。ノードPerの一貫性維持制御部53は、さらにキャッシュメモリ52に存在する当該データの状態をSに更新する。
【0017】
書き戻し要求メッセージを受けたノードPehの一貫性維持制御部53は、主メモリ51のデータを、書き戻し要求メッセージに付加されていたデータに更新する。さらに、そのデータの状態をCに更新し、保持ノード情報にノードPe1を加える。
【0018】
一方、読み出し要求メッセージを受けたノードPerにおいて、キャッシュメモリ52に状態がDのデータが存在しない場合には、ノードPerの一貫性維持制御部53は、Nak(否定応答)メッセージを相互結合網10−2を介してノードPe1に送信する。
【0019】
Nakメッセージを受け取ったノードPe1の一貫性維持制御部53は、再度ノードPehに読み出し要求メッセージを送信する。以降、ノードPe1にデータが送信されて、ノードPe1のプロセッサ50にデータが渡されるまで、同様の処理が繰り返される。
【0020】
次に、例えば、ノードPe1のプロセッサ50が、ストアアクセスを行ったときの動作について説明する。
【0021】
一貫性維持制御部53は、該当するアドレスのデータについてのシステム内での唯一のコピーがキャッシュメモリ52にも存在するかどうかを調べる。キャッシュメモリ52に有効なコピーが存在する場合、すなわち状態がDである場合は、キャッシュメモリ52のデータを更新し、プロセッサ50にアクセス完了を通知して、処理を終了する。
【0022】
キャッシュメモリ52に唯一のコピーが存在しない場合、すなわち状態がIまたはSの場合は、ノードPe1の一貫性維持制御部53は、該当するアドレスのデータを保持しているノード、例えば、ノードPeh宛に、排他読み出し要求メッセージを相互結合網10−1を介して送信する。
【0023】
排他読み出し要求メッセージを受けたノードPehの一貫性維持制御部53は、該当するアドレスのデータについての最新の値がノードPehの主メモリ51に存在するかどうかを調べる。該当するアドレスのデータについての最新の値が主メモリ51に存在する場合、すなわち状態がCである場合には、ノードPehの一貫性維持制御部53は、主メモリ51に格納されているデータを相互結合網10−2を介してノードPe1に送信する。
【0024】
ノードPe1以外のノードがそのキャッシュメモリ52に当該データのコピーを保持している場合には、そのデータのコピーが存在するノードPe1以外のノードのすべて(ノードPekとする)に、無効化要求メッセージを相互結合網10−1を介して送信する。さらに、ノードPehの一貫性維持制御部53は、主メモリ51のデータの状態をMに更新し、保持ノード情報をノードPe1のみとする。なお、ノードPe1に送信されるデータには、無効化要求メッセージを送信したノードPekの数が付加される。
【0025】
無効化要求メッセージを受けたノードPekの一貫性維持制御部53は、キャッシュメモリ52のデータの状態をIに更新し、Ack(肯定応答)メッセージを相互結合網10−2を介してノードPe1に送信する。
【0026】
ノードPehからのデータを受信したノードPe1の一貫性維持制御部53は、データに付加されていたノードPekの数の分だけのAckメッセージを受信するのを待つ。ノードPekの数の分だけのAckメッセージを受信すると、キャッシュメモリ52にそのデータをプロセッサ50が行ったストアアクセスのデータに更新する。さらに、ノードPe1の一貫性維持制御部53は、状態をDに更新し、プロセッサ50にアクセス完了を通知して処理を終了する。
【0027】
一方、排他読み出し要求メッセージを受けたノードPehにおいて、該当するアドレスのデータについての最新の値が主メモリ51に存在しない場合、すなわち状態がMである場合には、ノードPehの一貫性維持制御部53は、保持ノード情報を参照して、最新のデータを保持するノード、例えば、ノードPerに排他読み出し要求メッセージを相互結合網10−1を介して送信する。
【0028】
排他読み出し要求メッセージを受けたノードPerの一貫性維持制御部53は、キャッシュメモリ52に状態がDのデータが存在するかどうかを調べる。キャッシュメモリ52に状態がDのデータが存在しない場合には、ノードPerの一貫性維持制御部53は、相互結合網10−2を介してNakメッセージを送る。
【0029】
Nakメッセージを受け取ったノードPe1の一貫性維持制御部53は、再度ノードPehに対して、排他読み出し要求メッセージを送信する。以降、同様の処理が繰り返される。
【0030】
一方、キャッシュメモリ52に状態がDのデータが存在する場合には、ノードPerの一貫性維持制御部53は、キャッシュメモリ52に格納されているデータを相互結合網10−2を介してノードPe1に送信する。また、ノードPerの一貫性維持制御部53は、保持ノード更新要求メッセージを相互結合網10−1を介してノードPehに送信すると共に、キャッシュメモリ52のデータの状態をIに更新する。
【0031】
保持ノード更新要求メッセージを受けたノードPehの一貫性維持制御部53は、主メモリ51のデータを、ノードPe1のみが保持しているとして保持ノード情報を更新し、Ackメッセージを相互結合網10−2を介してノードPe1に送信する。
【0032】
ノードPerからのデータを受信したノードPe1の一貫性維持制御部53は、ノードPehからのAckメッセージを受信するのを待つ。ノードPehからのAckメッセージを受信すると、キャッシュメモリ52にそのデータをプロセッサ50が行ったストアアクセスのデータに更新する。さらに、ノードPe1の一貫性維持制御部53は、状態をDに更新し、プロセッサ50にアクセス完了を応答して処理を終了する。
【0033】
【発明が解決しようとする課題】
しかしながら、上記従来技術のマルチプロセッサシステムには、次のような問題点があった。
【0034】
第1に、一貫性維持のための処理が無限ループに陥ってしまう可能性がある。上記の例でいえば、ノードPe1のプロセッサ50がアクセスを行ったときに、ノードPerからノードPe1のNakメッセージが繰り返されている場合などが該当する。このため、上記従来技術のマルチプロセッサシステムでは、有限時間内でプロセッサ50に応答が行えない場合が存在するという問題があった。
【0035】
第2に、要求メッセージをやり取りするための相互結合網10−1と、応答メッセージをやり取りするための相互結合網10−2とを、それぞれ別々に設けることによって、デッドロックの発生を回避していた。このため、ハードウェアのコストが高くなると共に、故障の発生率も高くなり、システムの信頼性が低下するという問題点があった。
【0036】
本発明は、上記従来技術の問題点を解消するためになされたものであり、主記憶装置とキャッシュメモリとのデータの一貫性(コヒーレンシー)を維持しつつ、処理装置によるデータアクセスが有限時間内で完了することを保証することができるマルチプロセッサシステムを提供することを目的とする。
【0037】
本発明は、また、デッドロックの発生を回避するためにハードウェアを付加する必要がなく、低コストで信頼性の高いマルチプロセッサシステムを提供することを目的とする。
【0038】
【課題を解決するための手段】
上記目的を達成するため、本発明の第1の観点にかかるマルチプロセッサシステムは、
相互結合網 (10) を介して互いに接続された複数のノード (PEi) から構成されるマルチプロセッサシステムであって、
前記複数のノード (PEi) は、それぞれ、
データのアクセス要求を発行するプロセッサ (20) と、
データが格納される主メモリ (30) と、
前記プロセッサ (20) がアクセスした主メモリ (30) のデータをブロック単位で一時保持する、前記主メモリ (30) よりも高速アクセスが可能なキャッシュメモリ (21) と、
前記キャッシュメモリ (21) に記憶されているデータの状態をブロック毎に記憶するタグメモリ (22) と、
前記主メモリ (30) に格納されているデータの一貫性に関する状態と、一貫性に関する状態の変化を待っているアクセス要求が存在するかどうか、をブロック毎に記憶するディレクトリメモリ (31) と、
前記プロセッサ (20) が発行したアクセス要求を受けて、キャッシュメモリ (21) とタグメモリ (22) にアクセスして一貫性処理を行い、必要に応じて該当するデータを保持する主メモリ (30) を有するノード (PEi) に対してアクセス要求を通知するローカルアクセス制御部 (25) と、
前記ローカルアクセス制御部 (25) からアクセス要求を受け、主メモリ (30) およびディレクトリメモリ (31) にアクセスして一貫性処理を行うと共に、必要に応じてアクセス要求をコンフリクトキューに退避するホームアクセス制御部 (27) とを備え、
前記ホームアクセス制御部 (27) は、
前記ローカルアクセス制御部 (25) からアクセス要求を受けたとき、該アクセス要求に応じたブロックのディレクトリメモリ (31) が一貫性処理中の状態にあることを示す場合には、該アクセス要求を前記コンフリクトキューに退避し、
アクセス要求を退避する時に前記コンフリクトキューが空であった場合は、対応するブロックのディレクトリメモリ (31) の内容を一貫性に関する状態の変化を待っているアクセス要求が存在することを示す値に更新し、
ディレクトリメモリ (31) の内容が一貫性に関する状態の変化を待っているアクセス要求が存在することを示すブロックに関して、該ブロックの状態が一貫性処理中の状態からそれ以外の状態に更新された場合に、前記コンフリクトキューの先頭のアクセス要求を読み出して一貫性処理を行い、該ブロックのディレクトリメモリ (31) の内容を一貫性に関する状態の変化を持っているアクセス要求が存在しないことを示す値に更新し、
前記コンフリクトキューから読み出されたアクセス要求を処理し、かつ別のアクセス要求が前記コンフリクトキューに蓄積されている場合、引き続き次のアクセス要求を前記コンフリクトキューから読み出し、
該当するブロックのディレクトリメモリ (31) の内容が、一貫性処理中であることを示す状態である場合には、前記コンフリクトキューから読み出したアクセス要求の処理を中止し、該ブロックのディレクトリメモリ (31) のエントリの内容を一貫性に関する状態の変化を待っているアクセス要求が存在することを示す値に更新し、
該当するブロックのディレクトリメモリ (31) の内容が、一貫性処理中でないことを示す状態である場合は、一貫性処理を行い、別のアクセス要求が前記コンフリクトキューにまだ蓄積されている場合は、引き続き次のアクセス要求を前記コンフリクトキューから読み出す
ことを特徴とする。
【0039】
上記第1の観点にかかるマルチプロセッサシステムにおいて、
前記コンフリクトキューは、前記主メモリ (30) 内に設けられたものとすることができる。
【0040】
上記第1の観点にかかるマルチプロセッサシステムにおいて、
前記複数のノード (PEi) が、N個 ( N=自然数 ) のノードで構成され、
前記プロセッサ (20) が、最大k個 ( k=自然数 ) のアクセス要求を同時に発行する手段を有する場合には、
前記コンフリクトキューは、N×k個のエントリで構成されたものとすることができる。
【0041】
上記目的を達成するため、本発明の第2の観点にかかるマルチプロセッサシステムは、
相互結合網 (10) を介して互いに接続された複数のノード (PEi) から構成されるマルチプロセッサシステムであって、
前記複数のノード (PEi) は、それぞれ、
データのアクセス要求を発行するプロセッサ (20) と、
データが格納される主メモリ (30) と、
前記プロセッサ (20) がアクセスした主メモリ (30) のデータをブロック単位で一時保持する、前記主メモリ (30) よりも高速アクセスが可能なキャッシュメモリ (21) と、
前記キャッシュメモリ (21) に記憶されているデータの状態をブロック毎に記憶するタグメモリ (22) と、
前記主メモリ (30) に記憶されているデータの状態をブロック毎に記憶するディレクトリメモリ (31) と、
前記プロセッサ (20) が発行したアクセス要求を受けて、キャッシュメモリ (21) とタグメモリ (22) をアクセスして一貫性処理を行い、必要に応じて該当するデータを保持する主メモリ (30) を有するノード (PEi) に対してアクセス要求を通知するローカルアクセス制御部 (25) と、
前記ローカルアクセス制御部 (25) からアクセス要求を受けて、主メモリ (30) およびディレクトリメモリ (31) をアクセスして一貫性処理を行うホームアクセス制御部 (27) と、
前記ローカルアクセス制御部 (25) に対する応答を受け取り、該応答を蓄積するリプライバッファ (32) と、
前記ローカルアクセス制御部 (25) に対する一貫性処理要求を受け取り、該一貫性処理要求を蓄積するリクエストバッファ (33) と、
前記ホームアクセス制御部 (27) が一貫性処理を行って他のノード (PEi) に送出する一貫性処理要求および応答を生成するための情報を前記ホームアクセス制御部 (27) より受け取り、該情報を蓄積するリモートバッファ (34)
を備えることを特徴とする。
【0042】
上記第2の観点にかかるマルチプロセッサシステムにおいて、
前記リクエストバッファ (33) は、前記ローカルアクセス制御部 (25) に対する一貫性処理要求を、前記主メモリ (30) に設けられたリクエスト退避キューに退避する手段と、該リクエスト退避キューに退避した一貫性処理要求を読み出す手段とを有するものとすることができる。
【0043】
上記第2の観点にかかるマルチプロセッサシステムにおいて、
前記リモートバッファ (34) は、前記ホームアクセス制御部 (27) が他のノード (PEi) に送出する一貫性処理要求および応答を生成するための情報を、前記主メモリ (30) に設けられたリモート退避キューに退避する手段と、該リモート退避キューに退避した情報を読み出す手段と、該一貫性処理要求及び応答を生成するための情報から必要に応じて一貫性要求及び応答を生成する手段とを有するものとすることができる。
【0044】
上記第2の観点にかかるマルチプロセッサシステムにおいて、
前記複数のノード (PEi) が、N個 ( N=自然数 ) のノードで構成され、
前記プロセッサ (20) が、最大k個 ( k=自然数 ) のアクセス要求を同時に発行する手段を有する場合には、
前記リプライバッファ (32) は、k個のエントリで構成され、
前記リクエストバッファ (33) は、N×k個のエントリで構成され、
前記リモートバッファ (34) は、N×k個のエントリで構成されたものとすることができる。
【0045】
上記第2の観点にかかるマルチプロセッサシステムにおいて、
前記ディレクトリメモリ (31) は、さらに、どのノード (PEi) のキャッシュメモリ (21) がデータを保持しているかをブロック毎に記憶し、
前記一貫性処理要求および応答を生成するための情報には、前記ディレクトリメモリ (31) に格納されている、どのノード (PEi) のキャッシュメモリ (21) がデータを保持しているかを示す情報が含まれるものとすることができる。
【0054】
【発明の実施の形態】
以下、添付図面を参照して、本発明の実施の形態について説明する。
【0055】
[第1の実施の形態]
図1は、この実施の形態にかかる疎結合型のマルチプロセッサシステムの構成を示すブロック図である。
【0056】
図示するように、このマルチプロセッサシステムは、複数のノードPE0〜PEn−1と、各ノードを結合し、ノード間でやり取りされる要求メッセージ及び応答メッセージをそれぞれ配信する相互結合網10とから構成されている。この実施の形態においては、n=1024とする。
【0057】
図2は、図1のノードPEi(i=0〜n−1)の機能構成を示すブロック図である。
【0058】
図示するように、ノードPEi(i=0〜n−1)は、それぞれプロセッサ20と、主メモリ30と、キャッシュメモリ21と、一貫性維持制御部16とを有する。
【0059】
プロセッサ20は、メモリアクセスを行ったとき、そのメモリアクセスに関する情報、即ちアクセスの種類(ロードかストアか)、アドレス、データ等をローカルバッファ38に出力する。プロセッサ20は、メモリアクセスが対してロードアクセスであればデータを、ストアアクセスであれば完了信号を受け取ることにより、そのメモリアクセスがプロセッサ20の外部で処理されたことを確認する。プロセッサ20は前のメモリアクセスが外部で処理されたことを確認する前に次のメモリアクセスを発行することができる。このため、各メモリアクセスにはidが付加され、アクセスの種類、アドレス、データと共にidがローカルバッファ38に出力される。プロセッサ20への応答にもこのidが付加されどのメモリアクセスに対する応答であるかが識別される。
【0060】
アクセスの種類は、1ビットで表され、0がロード、1がストアアクセスを表すものとする。また、アドレスは40ビット、データは64ビットで構成される。プロセッサ20は、最大4個のメモリアクセスを同時に発行することができ、2ビットのidで区別されるものとする。なお、以降の説明では、アドレスの最下位ビットを第0ビット、最上位ビットを第39ビットとする。
【0061】
主メモリ30は、64ビット幅×2Mエントリ=512Mバイト(1M=1024×1024)である。
【0062】
プロセッサ20が出力するアドレスは、その上位ビットでどのノードPEiの主メモリ30に格納されたデータであるかを表し、その下位ビットで主メモリ30でのオフセットを表す。ここでは、プロセッサ20が出力するアドレス40ビットのうち、第39ビットから第30ビットまでの上位10ビットがどのノードPEiの主メモリ30のデータであるかを表し、第29ビットから第0ビットまでの下位30ビットが各主メモリ30でのオフセットとなる。
【0063】
キャッシュメモリ21は、主メモリ30よりも少量ではあるが高速なメモリで構成される。これにより、データがキャッシュメモリ21に存在した場合、プロセッサ20のメモリアクセスに対して早く応答することができ、メモリアクセスに要する時間を短縮することができる。キャッシュメモリ21は、64ビット幅×128Kエントリ=1Mバイト(1K=1024)であるとする。また、キャッシュメモリ21と主メモリ30との間のデータの転送は、ブロックと呼ばれる固定サイズ(以降128バイトとする)で行われる。なお、キャッシュメモリは、一般に命令キャッシュとデータキャッシュとに分かれるが、ここでは、データキャッシュが対象となる。
【0064】
このマルチプロセッサシステムでは、主メモリ30にあるデータのコピーが複数のキャッシュメモリ21に存在することがある。このため、それらコピーや主メモリ30のデータとの間でデータの一貫性を維持する制御が必要となる。一貫性維持制御部16は、このような一貫性の維持の制御を行うもので、キャッシュメモリ21にあるデータのコピーの状態や主メモリ30のデータがシステム内でどういう状態にあるのかを管理する。一貫性維持制御部16は、メモリアクセスに応じてノードPEi間でメッセージをやり取りし、それらの状態を変更したりデータの転送を行う機能を有する。一貫性維持制御部16の構成については、さらに詳しく後述する。
【0065】
図1に示す相互結合網10は、メッセージに含まれるルーティング情報に基づきあるノードPEiからあるノードPEiにメッセージを配送する機能を有する。このルーティング情報として、ここでは宛先ノード番号が必要十分な情報であるものとする。また、あるノードからあるノードへのパスは一つであり、同じパスを通るメッセージ間で追い越しは発生しないものとする。ただし、送信ノードまたは受信ノードどちらか一方でも異なる場合には、メッセージ間での到着順序は保証されない。
【0066】
次に、相互結合網10を介してノードPEi間でやり取りされるメッセージについて説明する。
【0067】
メッセージは、BlkRdSh、BlkRdEx、Upgrade、BlkWr、Ack、AckData、IntvSh、IntvEx、Inv、CmpDatSh、CmpDatEx、Cmpの12種類からなる。
【0068】
BlkRdSh、BlkRdEx、Upgrade、BlkWrの4種は、メモリアクセスが行われたノードPEiから、主メモリ30にデータを保持するノードPEiへ送信される要求メッセージである。IntvSh、IntvEx、Invの3種は、主メモリ30にデータを保持するノードPEiから当該データのコピーをキャッシュメモリ21に保持するノードPEiへ送信される要求メッセージである。
【0069】
Ack、AckDataの2種は、データのコピーをキャッシュメモリ21に保持するノードPEiから主メモリ30にデータを保持するノードPEiへ送信される報告メッセージである。CmpDatSh、CmpDatEx、Cmpの3種は、主メモリ30にデータを保持するノードPEiからメモリアクセスが行われたノードPEiへ送信されるメモリアクセス完了メッセージである。
【0070】
次に、各メッセージの構成について、図3を参照しながら説明する。
メッセージは、基本メッセージとブロックデータ付きメッセージに2分される。BlkRdSh、BlkRdEx、Upgrade、Ack、IntvSh、IntvEx、Inv、Cmpの8種のメッセージは基本メッセージである。BlkWr、AckData、CmpDatSh、CmpDatExの4種のメッセージはブロックデータ付きのメッセージである。
【0071】
基本メッセージは、図3(a)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(計12個なので4ビットで表現)、要求元ノード番号(10ビット)、mid(2ビット)、アドレス(40ビット)の計66ビットで構成される。
【0072】
ブロックデータ付きメッセージは、図3(b)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(4ビット)、要求元ノード番号(10ビット)、mid(2ビット)、アドレス(40ビット)に加えて、ブロックサイズのデータ(128バイト)の計66ビット+128バイトで構成される。
【0073】
以下、図2の一貫性維持制御部16について、さらに詳しく説明する。
一貫性維持制御部16は、タグメモリ22、キャッシュメモリアクセス記憶部23、タグメモリアクセス制御部24、ローカルアクセス制御部27、主メモリアクセス制御部28、ディレクトリメモリアクセス制御部29、ディレクトリメモリ31、リプライバッファ32、リクエストバッファ33、リモートバッファ34、メッセージ送信部35、メッセージ受信部36、リクエスト管理テーブル37、及びローカルバッファ38を含む。
【0074】
ディレクトリメモリ31は、主メモリ30に格納されているデータについて、その状態を表す情報をブロック単位で格納している。ディレクトリメモリ31に格納されている各ブロックの情報は、トップビット、ブロックの状態、およびコピーをキャッシュメモリ21に保持しているノードの情報(以降保持ノード情報と呼ぶ)である。
【0075】
トップビットは1ビットで表され、ホームアクセス制御部25の動作に関わる。ブロックの状態は、C、M、RSP、REP、UPの5つのうちのいずれかで表され、例えば、Cは“000”、Mは“001”、RSPは“100”、REPは“101”、UPは“110”というように3ビットでコーディングされる。
【0076】
ブロックの状態としてCは、0以上の複数のノードPEiのキャッシュメモリ21にデータのコピーが存在する状態を表す。この時、キャッシュメモリ21のコピーと主メモリ30のデータの値は同じである。ブロックの状態としてMは、1つのノードPEiのキャッシュメモリ21のみがデータのコピーを保持している状態を表す。この時、キャッシュメモリ21のコピーの値と主メモリ30のデータの値は異なり、コピーの値が最新の値である可能性がある。ブロックの状態としてRSP、REP、UPは、あるメモリアクセスから派生した一貫性維持処理の要求メッセージを受け、コピーを保持するキャッシュメモリ21に一貫性維持処理の要求メッセージを発行し、応答を待っている状態であることを示している。
【0077】
保持ノード情報は、ブロックの状態によって保持形態が異なる。ブロックの状態がMおよびRSPの場合は、ノードPEiを特定するノード番号(10ビットで表される)が一つ保持される。ブロックの状態がREPおよびUPの場合は、ノード数(10ビットで表される)が保持される。ブロックの状態がCの場合は、例えば、コースベクタ方式を単純化した方式でデータのコピーを保持するノードを管理する。
【0078】
この方式は、ノードPEiを幾つかのグループに分割し、グループ数分のビットで保持者(ノード)を管理する方式である。各ビットを立てるかどうかは、各ビットに対応するグループの中に一つでもコピーを保持するノードPEiが存在するかどうかによって決定される。ここでは、これを8ビットで表し、第0ビットがノードPE0からノードPE127、第1ビットがノードPE128からノードPE255、.....、第7ビットがノードPE896からノードPE1023にそれぞれ対応する。この構成の場合、ディレクトリメモリは14ビット幅4M(主メモリサイズ/ブロックサイズ)エントリ分のデータを保持するメモリとなる。ディレクトリメモリ31に格納されている各ブロックの情報は初期状態は、トップビットは0、状態はC、保持ノード情報は0x000(0xは16進表記)となる。
【0079】
タグメモリ22は、キャッシュメモリ21に格納されているデータについて、その状態を表す情報をブロック単位で保持している。タグメモリ22に格納されている各ブロックの情報は、ブロックの状態およびタグアドレスである。ブロックの状態はI、S、E、Dの4つのいずれかによって表され、それぞれ対応するブロックがどの状態にあるかを示している。例えば、ブロックの状態は、Iは“00”、Sは“01”、Eは“10”、Dは“11”というように2ビットでコーディングされる。
【0080】
ブロックの状態としてIは、一貫性が維持された有効なデータのコピーが存在しない状態を示す。ブロックの状態としてSは、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ21にも有効なコピーが存在する可能性がある、という状態を示す。ブロックの状態としてEは、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ21には有効なコピーが存在せず、かつ主メモリのデータの値と同じ、という状態を示す。ブロックの状態としてDは、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ21には有効なコピーが存在せず、かつ主メモリのデータの値と異なる、という状態を示す。
【0081】
タグアドレスは、対応するブロックがどのアドレスのデータであるかを示す。ここでは、あるアドレスのデータがキャッシュメモリ21のどのブロックに格納されるかが一意に決定されるダイレクトマップ方式でキャッシュメモリ21が制御されている。この場合、キャッシュメモリ21のサイズが1Mバイトであるので、アドレス40ビットのうち第39ビットから第20ビットまでの上位20ビットがタグアドレスとなる。よって、この構成の場合、タグメモリ22は22ビット幅8K(キャッシュメモリサイズ/ブロックサイズ)エントリ分のデータを保持するメモリとなる。タグメモリ22に格納されている各ブロックの情報は初期状態は、状態はI、タグアドレスは任意の値となる。
【0082】
キャッシュメモリアクセス制御部23は、ローカルアクセス制御部25からのアクセス要求に従い、キャッシュメモリ21にアクセスを行う機能を有する。ローカルアクセス制御部25からのアクセス要求には、ブロックデータの読み出しおよび書き込み、並びに64ビットデータの読み出しおよび書き込みがある。
【0083】
タグメモリアクセス制御部24は、ローカルアクセス制御部25からのアクセス要求に従い、タグメモリ22にアクセスを行う機能を有する。ローカルアクセス制御部25からのアクセス要求には、1エントリ(ここでは1エントリ22ビット)分のデータの読み出しおよび書き込みがある。
【0084】
主メモリアクセス制御部28は、リクエストバッファ33、リモートバッファ34、ホームアクセス制御部27からのアクセス要求を調停し、受け付けたアクセス要求に従い、主メモリ30にアクセスを行う機能を有する。リクエストバッファ33およびリモートバッファ34からのアクセス要求には、メッセージ情報の読み書き(詳細は後述)がある。ホームアクセス制御部27からのアクセス要求には、ブロックデータの読み書き、及びメッセージ情報の読み書き(詳細は後述)がある。
【0085】
ディレクトリメモリアクセス制御部29は、ホームアクセス制御部27からのアクセス要求に従い、ディレクトリメモリ31にアクセスを行う機能を有する。ホームアクセス制御部27からのアクセス要求には、1エントリ(ここでは14ビット)分のデータの読み出し及び書き込みがある。
【0086】
メッセージ送信部35およびメッセージ受信部36は、それぞれ相互結合網10と接続されており、ノードPEiから相互結合網10へのメッセージの送信、および相互結合網10からのメッセージの受信を行う。
【0087】
メッセージ送信部35は、ローカルアクセス制御部25およびリモートバッファ34の2モジュールと接続されており、各モジュールが出力するメッセージを調停し、取り込む。
【0088】
メッセージ受信部は、リプライバッファ32、リクエストバッファ33、ホームアクセス制御部27の3モジュールと接続しており、相互結合網10から受け取ったメッセージの種類に応じて前記3モジュールにメッセージを出力する。受け取ったメッセージの種類がBlkRdSh、BlkRdEx、Upgrade、BlkWr、Ack、AckDataの場合、メッセージの出力先はホームアクセス制御部27となる。IntvSh、IntvEx、Invの場合、メッセージの出力先はリクエストバッファ33となる。CmpDatSh、CmpDatEx、Cmpの場合、メッセージの出力先はリプライバッファ32となる。
【0089】
ローカルバッファ38は、プロセッサ20が発行したメモリアクセスを受けるバッファであり、プロセッサ20が最大4個のメモリアクセスを同時に発行できるのに対応して4エントリで構成される。各エントリで保持される情報は、アクセスの種類(1ビット)、アドレス(40ビット)、データ(64ビット)、id(2ビット)の計107ビットとなる。
【0090】
ローカルバッファ38に貯められたメモリアクセスは、順次ローカルアクセス制御部25に出力される。出力したメモリアクセスをローカルアクセス制御部25が受け取ると、当該メモリアクセスを破棄し、次のメモリアクセスを出力する。ただし、出力しようとするメモリアクセスのアドレスが、後述するリクエスト管理テーブル37に登録されているエントリのアドレスとブロックアドレスで一致する場合(ここでは、第19ビットから第7ビットまでの13ビットが一致する場合)には、メモリアクセスの出力は抑止される。このため、ローカルバッファ38の先頭エントリのアドレスがリクエスト管理テーブル37に出力される。ローカルバッファ38は、リクエスト管理テーブル37がそのアドレスの値を使用して生成したペンディング信号が「1」である場合に、ローカルアクセス制御部25への出力を抑止する。
【0091】
リクエスト管理テーブル37は、プロセッサ20が同時に発行可能なメモリアクセスの最大数(ここでは4)に対応して4エントリからなるテーブルである。各エントリは、エントリが有効かどうかを示す有効ビット(1ビット)、アクセスの種類(1ビット)、アドレス(40ビット)、データ(64ビット)、チェックビット(1ビット)の計107ビットからなる。
【0092】
リクエスト管理テーブル37は次のような機能を有する。
1)ローカルアクセス制御部25の指示に従い、ローカルアクセス制御部25が出力された前記設定データ(107ビット)を、ローカルアクセス制御部25が指定するエントリに書き込む機能。
【0093】
2)ローカルアクセス制御部25が指定するエントリの内容をローカルアクセス制御部25に出力する機能。
【0094】
3)ローカルバッファ38が出力するアドレス信号(40ビット)とエントリの設定データ中のアドレス(40ビット)との第19ビットから第7ビットの13ビットで一致し、かつ有効ビットが「1」のエントリが存在するかどうかをペンディング信号(存在する場合「1」)にして出力する機能。
【0095】
4)ローカルアクセス制御部25の指示に従い、ローカルアクセス制御部25が出力するアドレス信(40ビット)とエントリのアドレス部(40ビット)との第39ビットから第7ビットまでの上位33ビットが一致し、かつ有効ビットが「1」の場合、該当するエントリのチェックビットを「1」に設定する機能。
【0096】
リプライバッファ32は、ホームアクセス制御部27およびメッセージ受信部36が出力するメッセージを取り込み貯めておくバッファである。このバッファ36に書き込まれ得るメッセージはCmp、CmpDatSh、CmpDatExに限られる。これらのメッセージはプロセッサ20が発行するメモリアクセスに対応してリプライバッファ32に書き込まれるメッセージであり、1メモリアクセスに対して1メッセージより多く書き込まれることはない。
【0097】
リプライバッファ32は、プロセッサ20が最大4個のメモリアクセスを同時に発行できるのに対応して、4エントリで構成される。各エントリは、66ビット+128バイトで構成されるブロックデータ付きメッセージを保持することができる。これにより、出力先のローカルアクセス制御部25がリプライバッファ32に貯められたメッセージを一つも処理しなくても、リプライバッファ32に出力されるメッセージを全て取り込むことができるようになっている。
【0098】
リプライバッファ32は、受け取ったメッセージを、順にローカルアクセス制御部25に出力する。出力したメッセージがローカルアクセス制御部25に受け取られると、リプライバッファ32は、出力しているメッセージを破棄し、次のメッセージの処理を開始する。
【0099】
リクエストバッファ33は、後述するホームアクセス制御部27およびメッセージ受信部36が出力するメッセージを貯めておくバッファである。このバッファに書き込まれるメッセージは、IntvSh、IntvEx、Invに限られ、ブロックデータ付きメッセージは存在しない。
【0100】
リクエストバッファ33は、デッドロックを回避するため、バッファが一杯になると主メモリ30に設けたリクエスト退避キューにメッセージ情報を吐出し、必要に応じて吐出したメッセージ情報を読み出す機能を有する。このリクエスト退避キューの各エントリは、ブロックデータ付きでない66ビットのメモリを保持することができる。また、このリクエスト退避キューは、プロセッサ20が発行する最大メモリアクセス数4にノード数1024を掛け合わせた4096エントリからなる。
【0101】
リクエストバッファ33は、リクエスト退避キューにメッセージを退避することにより、出力先のローカルアクセス制御部25がリクエストバッファ33に貯められたメッセージを一つも処理しなくても、出力されるメッセージを全て取り込むことができる。リクエストバッファ33は、受け取ったメッセージを順にローカルアクセス制御部25に出力する。出力したメッセージがローカルアクセス制御部25に受け取られると、リクエストバッファ33は、出力しているメッセージを破棄し、次のメッセージの処理を開始する。
【0102】
図4に、リクエストバッファ33の構成例を示す。
図示するように、リクエストバッファ33は、セレクタ101と、バッファ102と、セレクタ103と、バッファ104とによって構成される。
【0103】
ホームアクセス制御部27およびメッセージ受信部36から出力するメッセージは、セレクタ101で調停選択され、バッファ102に書き込まれる。バッファ102に書き込まれたメッセージは、バッファ104に有効なメッセージが存在する場合、またはその時点で前述のリクエスト退避キューにメッセージが存在する場合、キューに書き込まれる。バッファ104およびリクエスト退避キューにメッセージが存在しない場合、バッファ104にメッセージが出力されセレクタ103により選択され書き込まれる。
【0104】
バッファ104は、当該バッファに有効なメッセージが存在しない場合、バッファ102が出力するメッセージ、あるいはキューから読み出したメッセージをセレクタ103で選択して取り込む。キューにメッセージが存在する場合はそのキューからメッセージを取り込み、キューが空でバッファ102にメッセージが存在する場合はバッファ102が出力するメッセージを取り込む。キューに書き込まれたメッセージ情報は、読み出されるとによりキューから削除される。バッファ104は、書き込まれたメッセージをローカルアクセス制御部25に出力する。
【0105】
図2のリモートバッファ34は、ホームアクセス制御部27が出力するメッセージ生成情報を貯めておくバッファである。リモートバッファ34に書き込まれる情報は、メッセージ生成のために必要なメッセージの種類(4ビット)、アドレス(40ビット)、要求元ノード番号(10ビット)、mid(2ビット)およびディレクトリメモリ31に保持されていた保持ノード情報(10ビット)であり、66ビットからなる。
【0106】
リモートバッファ34は、リクエストバッファ33と同様にデッドロックを回避するため、バッファが一杯になると主メモリ30に設けたリモート退避キューにメッセージ情報を吐出し、必要に応じて吐出したメッセージ情報をリモート退避キューから読み出す機能を有する。このリモート退避キューの各エントリは、上記の66ビットの情報を保持することができる。また、このリモート退避キューは、プロセッサ20が発行する最大メモリアクセス数4にノード数1024を掛け合わせた4096エントリのキューによって構成される。
【0107】
リモートバッファ34は、リモート退避キューにメッセージ情報を退避することにより、出力先のメッセージ送信部33に一つもメッセージを出力できなくても、リモートバッファ34に出力されるメッセージ生成情報を取り込むことができる。
【0108】
リモートバッファ34は、また、書き込まれたメッセージ生成情報からメッセージを生成する機能を有し、その際に必要があれば主メモリアクセス制御部28を介して主メモリ31からブロックデータの読み出しを行う。リモートバッファ34は、受け取ったメッセージ生成情報から順にメッセージを生成し、メッセージ送信部35に出力する。出力したメッセージがメッセージ送信部35に受け取られると、出力しているメッセージを破棄し、次のメッセージ生成情報の処理を開始する。
【0109】
図5に、リモートバッファ34の構成例を示す。
図示する量に、リモートバッファ34は、バッファ111と、セレクタ112と、バッファ113と、データバッファ115と、メッセージ生成回路114とから構成される。
【0110】
ホームアクセス制御部27が出力するメッセージ生成情報はバッファ111に書き込まれる。バッファ111に書き込まれたメッセージ生成情報は、バッファ113に有効なメッセージ生成情報が存在する場合、またはその時点でリモート退避キューにメッセージ生成情報が存在する場合、キューに書き込まれる。バッファ113およびキューにメッセージ生成情報が存在しない場合、バッファ113にメッセージ生成情報が出力されセレクタ112により選択され書き込まれる。
【0111】
バッファ113は、当該バッファに有効なメッセージ生成情報が存在しない場合、バッファ111が出力するメッセージ生成情報、あるいはキューから読み出したメッセージ生成情報をセレクタ112で選択して取り込む。キューにメッセージ生成情報が存在する場合はそれを取り込み、キューが空でバッファ111にメッセージ生成情報が存在する場合はバッファ111が出力するメッセージ生成情報を取り込む。キューに書き込まれたメッセージ生成情報は、読み出されることによりキューから削除される。バッファ113にメッセージ生成情報が書き込まれると、メッセージ生成回路114は、メッセージを生成し、メッセージ送信部35に出力する。
【0112】
メッセージ生成回路114は、メッセージ生成情報のうちメッセージの種類を表すコード(4ビット)に応じて次のような処理をする。
【0113】
ここで、メッセージの種類は、IntvSh、IntvEx、Inv、CmpDatSh、CmpDatEx、Cmpの6種類である。全てのメッセージでメッセージの種類(4ビット)、要求元ノード番号(10ビット)、アドレス(40ビット)、mid(2ビット)はメッセージ生成情報としてバッファ113に蓄えられたデータがそのまま生成されるメッセージに用いられる。
【0114】
メッセージの種類がIntvShあるいはIntvExの場合、不足している情報は、宛先ノード番号のみである。この場合には、保持ノード情報がそのまま使用される。このとき生成されるメッセージは、このメッセージ一つのみである。
【0115】
メッセージの種類がInvの場合、不足している情報は、宛先ノード番号のみである。この場合は、宛先ノード番号の異なる複数のメッセージを生成する。この宛先ノード番号は、保持ノード情報に従って生成される。保持ノード情報はコースベクタ形式であり、この形式で表されている複数のノードPEi(要求元ノードを除く)に対して宛先の異なる同一のメッセージを生成し出力することとなる。
【0116】
例えば、保持ノード情報が“00110100”で、要求元ノード番号が“0010010110”の場合、宛先ノードはPE256〜PE383、PE512〜PE807の合計384ノードとなり、これらの384個のノードにInvメッセージが送信される。また、例えば、保持ノード情報が“11001011”で、要求元ノード番号が“0010010110”の場合、宛先ノードはPE0〜PE149、PE151〜PE255、PE384〜PE511、PE808〜PE1023の合計679ノードとなり、これらの679ノードにInvメッセージが送信される。
【0117】
メッセージの種類がCmpDatShおよびCmpDatExの場合、不足している情報は、宛先ノード番号およびブロックデータである。この場合、宛先ノード番号には、要求元ノード番号がそのまま用いられる。主メモリアクセス制御部28を介してバッファ113から出力されているアドレスに対応するブロックが読み出され、ブロックデータとしてデータバッファ115に蓄えられる。メッセージ生成回路114は、データバッファ115に蓄えられたブロックデータを用いてメッセージを生成し出力する。生成されるメッセージはこのメッセージ一つのみである。
【0118】
メッセージ情報がCmpの場合、不足している情報は宛先ノード番号のみである。この場合、宛先ノード番号には、要求元ノード番号が使用される。また、生成されるメッセージは、このメッセージ一つのみである。
【0119】
ローカルアクセス制御部25は、ローカルバッファ38が出力するメモリアクセス、リプライバッファ32が出力するメッセージ、およびリクエストバッファ33が出力するメッセージを調停して選択し、データ一貫性維持のための処理を行う機能を有する。ローカルアクセス制御部25が行うデータ一貫性維持のための処理には、タグメモリアクセス制御部24を介したタグメモリ22へのアクセス、キャッシュメモリアクセス制御部23を介したキャッシュメモリ21へのアクセス、リクエスト管理テーブル37へのアクセス、プロセッサ20への応答、メッセージ送信部35あるいはホームアクセス制御部27へのメッセージの出力がある。
【0120】
ホームアクセス制御部27は、ローカルアクセス制御部25が出力するメッセージ、およびメッセージ受信部34が出力するメッセージを受け、データ一貫性維持のための処理を行う機能を有する。ホームアクセス制御部27が行うデータ一貫性維持のための処理には、ディレクトリアクセス制御部29を介したディレクトリメモリ31アクセス、主メモリアクセス制御部28を介した主メモリ30アクセス、リプライバッファ32あるいはリクエストバッファ33へのメッセージ出力、及びリモートバッファ34へのメッセージ生成情報の出力がある。
【0121】
ホームアクセス制御部27は、また、主メモリ30上にメッセージを貯めておくコンフリクトキューを管理制御している。このキューは総プロセッサ数にプロセッサ20が同時に発行可能なメモリアクセス数をかけたエントリ数を持つ。ここでは、1024×4=4096エントリのキューとなる。1つのエントリは、基本メッセージ(66ビット)を保持することができる。コンフリクトキューにキューイングされるメッセージの種類は、BlkRdSh、BlkRdEx、あるいはUpgradeの3種に限られる。
【0122】
以下、図6〜図11を参照して、ローカルアクセス制御部25の動作について説明する。
【0123】
なお、以下の説明において、ローカルアクセス制御部25がキャッシュメモリ21或いはタグメモリ22にアクセスする場合は、実際にはキャッシュメモリアクセス制御部23或いはタグメモリアクセス制御部24の機能が用いられる。
【0124】
図6は、ローカルバッファ38が出力するメモリアクセスを受け、そのメモリアクセスがロードアクセスであった場合に、ローカルアクセス制御部25が実行す処理を示すフローチャートである。
【0125】
この時、ローカルアクセス制御部38は、ローカルバッファ38からアクセスの種類(1ビット)、アドレス(40ビット)、id(2ビット)、データ(64ビット)の情報を受ける。
【0126】
ステップS111では、ローカルアクセス制御部25は、タグメモリアクセス制御部24を利用してタグメモリ22にアクセスし、該当するブロックのデータ(状態およびタグアドレス)を読み出す。ここでは、8K(1K=1024)あるエントリのうち、ローカルバッファ38から得たアドレスの第19ビットから第7ビットの13ビットで指定されるエントリのデータを読み出す。
【0127】
ステップS112では、ローカルアクセス制御部25は、アクセスの種類、状態、及びアドレスの第39ビットから第20ビットまでの上位20ビットとタグアドレス(20ビット)が一致するかどうかの3つの情報から、後述するAA〜ADの処理タイプのうちのどの処理タイプとなるかを決定する。
【0128】
前記3情報からは、処理タイプがAAまたはABの場合にそれぞれステップS113およびS115で出力されるメッセージの種類、およびステップS118で更新されるブロックの状態(タグアドレスはアドレスの上位20ビットに必ず更新される)も決定される。
【0129】
なお、前記3情報と処理タイプ、メッセージの種類、次状態の関係は、図7に示すようになる。ローカルアクセス制御部25は、この関係を示すテーブルを有している。
【0130】
ステップS112において決定された処理タイプがAAの場合、ステップS113に進む。ステップS113では、ローカルアクセス制御部25は、図7に示すテーブルに従って、メッセージを生成し出力する。メッセージの宛先ノード番号(10ビット)には、アドレスの第39ビットから第30ビットまでの上位10ビットが、要求元ノード番号(10ビット)には、当該ノードPEiのノード番号(10ビット)が、それぞれ用いられる。mid、アドレスには、ローカルバッファ38から得たid、アドレスが、それぞれ用いられる。この時、ローカルアクセス制御部25は、生成したメッセージをメッセージ送信部35へ出力するか、あるいはホームアクセス制御部27へ出力するかを次のようにして決定する。ローカルアクセス制御部25は、宛先ノード番号と当該ノードPEiのノード番号とを比較する。この結果が、不一致の場合はメッセージはメッセージ送信部35へ出力され、一致の場合はメッセージはホームアクセス制御部27へ出力される。
【0131】
ステップS113では、ローカルアクセス制御部25は、同時にリクエスト管理テーブル37への登録も行う。ローカルアクセス制御部25は、有効ビット「1」、チェックビット「0」、並びに受けたメモリアクセスに付加されていたアクセスの種類、アドレス及びデータを設定データとしてリクエスト管理テーブル37に出力し、受けたメモリアクセスに付加されていたid番目が示すエントリ(0〜3)に設定する。ステップS113の処理が終了すると、ステップS118に進む。
【0132】
ステップS112において決定された処理タイプがABであった場合、ステップS114に進む。ステップS114では、ローカルアクセス制御部25は、ローカルバッファ38から得られたアドレスの第19ビットから第7ビットまでの13ビットに0x0から0xfまで変化する4ビットを下位に付加した17ビットで指定される合計16エントリ、128バイトのブロックデータをキャッシュメモリ21(128Kエントリ×64ビット幅)から読み出し、そのブロックデータを付加したBlkWrメッセージを生成する。
【0133】
このBlkWrメッセージの宛先ノード番号には、タグアドレスの第19ビットから第10ビットまでの上位10ビットが用いられ、要求元ノード番号には、当該ノードPEiのノード番号が用いられる。また、アドレスには、タグアドレス(20ビット)を上位20ビットとし、下位20ビットはローカルバッファ38から得られたアドレスの第19ビットから第0ビットまでの下位20ビットとしたものが用いられる。また、midはどんな値でも構わない。ローカルアクセス制御部25は、生成したメッセージをメッセージ送信部38とホームアクセス制御部27とのいずれに出力するかを、ステップS113の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。
【0134】
ステップS114の処理が終了すると、ステップS115に進む。ステップS115でローカルアクセス制御部25が実行する処理は、ステップS113での処理と同じであるので、説明は省略する。ステップS115の処理が完了すると、ステップS118に進む。
【0135】
ステップS112において決定された処理タイプがACであった場合、ステップS116に進む。ステップS116では、ローカルアクセス制御部25は、ローカルバッファ38から得られたアドレスのうちの第19ビットから第3ビットまでの17ビットで指定されるエントリに対応する64ビットのデータをキャッシュメモリ21から読み出し、その読み出したデータをプロセッサ20に応答する。この時、ローカルアクセス制御部25は、ローカルバッファ38から得られたidも、同時にプロセッサ20に渡し、当該idのメモリアクセスに対する応答であることをプロセッサ20に示す。ステップS116の処理が完了すると、ステップS118に進む。
【0136】
ステップS112において決定された処理タイプがADであった場合、ステップS117に進む。ステップS117では、ローカルアクセス制御部25は、ローカルバッファ38から得られたアドレスのうちの第19ビットから第3ビットまでの17ビットで指定されるキャッシュメモリ21のエントリに、ローカルバッファ38から得られた64ビットのデータを書き込む。また、ローカルアクセス制御部25は、プロセッサ20に対してidを出力し、メモリアクセスの完了通知を行う。これにより、当該idのメモリアクセスに対する処理が完了した旨がプロセッサに通知される。ステップS117の処理が終わると、ステップS118に進む。
【0137】
ステップS118では、ローカルアクセス制御部25は、タグメモリ22を更新するための処理を行う。更新を行うエントリはステップS111において指定されたエントリであり、状態は図7で示される次状態に、タグアドレスはローカルバッファ38から得たアドレスの第39ビットから第20ビットまでの上位20ビットに、更新される。ステップS118の処理が終了すると、当該メモリアクセスに関する処理は終了する。
【0138】
図8は、リクエストバッファ33が出力するメッセージを受け付けた場合に、ローカルアクセス制御部25が実行する処理を示すフローチャートである。
【0139】
ステップS121では、ローカルアクセス制御部25は、メッセージに含まれるアドレスを用いてタグメモリ22に読み出しアクセスを行う。アクセスされるタグメモリ22のエントリは、アドレスの第19ビットから第7ビットまでの13ビットで指定される。これにより、該当するブロックの状態およびタグアドレスが読み出される。
【0140】
ステップS122では、メッセージの種類、状態、及びメッセージに付加されていたアドレスの第39ビットから第20ビットまでの上位20ビットとタグアドレスが一致するかどうかの3つの情報から、ローカルアクセス制御部25は、後述するBAとBBのうちのどの処理タイプとなるかを決定する。また、前記3情報からは、ステップS123で出力するメッセージの種類、およびステップS125で更新するブロックの状態(タグアドレスの値は変更されない)も決定される。
【0141】
なお、前記3情報と処理タイプ、メッセージの種類、次状態の関係は、図9に示すようになる。ローカルアクセス制御部25は、この関係を示すテーブルを有している。
【0142】
ステップS122において決定された処理タイプがBAであった場合、ステップS123に進む。ステップS123では、ローカルアクセス制御部25は、図9に示すテーブルに従って、メッセージを生成する。メッセージの生成時に、要求元ノード番号、アドレス、midには、受けたメッセージのものがそのまま用いられる。また、宛先ノード番号には、受けたメッセージのアドレスの第39ビットから第30ビットまでの上位10ビットが用いられる。ローカルアクセス制御部25は、生成したメッセージをメッセージ送信部38とホームアクセス制御部27とのいずれに出力するかを、ステップS113の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップS123の処理が終了すると、ステップS125に進む。
【0143】
ステップS122において決定された処理タイプがBBであった場合、ステップS124に進む。ステップS124では、ローカルアクセス制御部25は、受けたメッセージのアドレスの第19ビットから第7ビットまでの13ビットに0x0から0xfまで変化する4ビットを下位に付加した17ビットで指定される合計16エントリ、128バイトのブロックデータを読み出す。ローカルアクセス制御部25は、図9のテーブルに従ってメッセージを生成し、読み出したブロックデータを生成されたメッセージに付加し、送信部35を介して送信する。メッセージの生成時に、要求元ノード番号、アドレス、midには、受けたメッセージのものがそのまま用いられる。宛先ノード番号には、受けたメッセージのアドレスの第39ビットから第30ビットまでの上位10ビットが用いられる。ローカルアクセス制御部25は、生成したメッセージをメッセージ送信部38とホームアクセス制御部27とのいずれに出力するかを、ステップS113の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップS124の処理が終了すると、ステップS125に進む。
【0144】
ステップS125では、ローカルアクセス制御部25は、タグメモリ22の更新を行う。更新するエントリはステップS121において指定されたエントリであり、状態は図9で示される次状態に、タグアドレスはステップS121で読み出したタグアドレスに、それぞれ更新される。
【0145】
ローカルアクセス制御部25は、また、リクエスト管理テーブル37の検査も行う。受けたメッセージに付加されていたアドレスをリクエスト管理テーブル37に出力し、同一ブロック(第39ビット〜第7ビットが一致)のメモリアクセスが登録されていた場合、該当するエントリのチェックビットを「1」に設定する。ステップS125の処理が終了すると、当該メッセージに関する処理は終了する。
【0146】
図10は、リプライバッファ32が出力するメッセージを受けつけた場合に、ローカルアクセス制御部25が実行する処理を示すフローチャートである。
【0147】
ここで、リプライバッファ32から出力されるメッセージの種類は、CmpDatSh、CmpDatEx、Cmpの3種類にかぎられる。
【0148】
ステップS131では、ローカルアクセス制御部25は、まずリプライバッファ32よりメッセージを受け取り、メッセージに含まれるmidをリクエスト管理テーブル37に出力し、mid番目のエントリの情報を読み出す。これにより、リクエスト管理テーブル37から、有効ビット、アクセスの種類、アドレス、データ(64ビット)、チェックビットの情報を得る。ステップS131の処理が終了すると、ステップS132に進む。
【0149】
ステップS132では、ローカルアクセス制御部25は、受けたメッセージがデータ付きかどうか、即ちCmpDatShあるいはCmpDatExであるか、データ付きでないCmpメッセージであるかを判定する。
【0150】
ステップS132でデータ付きのメッセージでないと判定された場合は、場合ステップS133に進む。一方、ステップS132でデータ付きのメッセージであると判定された場合は、ステップS135に進む。
【0151】
ステップS133では、ローカルアクセス制御部25は、リクエスト管理テーブル37から得られたチェックビットの値を検査する。ステップS133で検査したチェックビットの値が「1」であった場合は、ステップS134に進む。一方、ステップS133で検査したチェックビットの値が「0」であった場合は、ステップS137に進む。
【0152】
ステップS134では、ローカルアクセス制御部25は、BlkRdExメッセージを生成し、出力する。この時、要求ノード番号には、リクエスト管理テーブル37から得たアドレスの第39ビットから第30ビットの上位10ビットが、要求元ノード番号には、当該ノードPEiのノード番号が、midには受けたメッセージのmidが、アドレスには、リクエスト管理テーブル37から得たアドレスがそれぞれ用いられる。ローカルアクセス制御部25は、生成したメッセージをメッセージ送信部38とホームアクセス制御部27とのいずれに出力するかを、ステップS113の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップS134の処理が終了すると、受けたメッセージについての処理は終了する。
【0153】
ステップS135では、ローカルアクセス制御部25は、メッセージについていたブロックデータ(128バイト)を、キャッシュメモリ21の該当するブロックに書き込む。書き込まれるエントリは、リクエスト管理テーブル37から得られるアドレスの第19ビットから第7ビットまでの13ビットに0x0から0xfまで変化する4ビットを下位に付加した17ビットのインデックス信号で指定される。ステップS135の処理が終了すると、ステップS136に進む。
【0154】
ステップS136では、ローカルアクセス制御部25は、リクエスト管理テーブル37から得られるアクセスの種類を検査する。
【0155】
ステップS136で検査されたアクセスの種類がストアであった場合には、ステップS137に進む。一方、ステップS136で検査されたアクセスの種類がロードであった場合には、ステップS138に進む。
【0156】
ステップS137では、ローカルアクセス制御部25は、リクエスト管理テーブル37から得られるデータ(64ビット)を、キャッシュメモリ21の該当するエントリに書き込む。書き込まれるエントリは、リクエスト管理テーブル37から得られるアドレスの第19ビットから第3ビットまでの17ビットで指定される。
【0157】
ローカルアクセス制御部25は、また、リクエスト管理テーブル37に有効ビットを「0」にしたデータを出力し、その値を受けたメッセージのmidで指定するエントリに対して書き込む。これにより、リクエスト管理テーブル37からエントリが削除される。
【0158】
ローカルアクセス制御部25は、さらにタグメモリ22を更新するための処理も行う。更新されるエントリのアドレスは、リクエスト管理テーブル37より得られるアドレスの第19ビットから第7ビットまでの13ビットで特定される。更新するデータは、ブロックの状態およびタグアドレスである。ブロックの状態に関しては、アクセスの種類(ここではストア)と受けたメッセージの種類によって決定される。
【0159】
アクセスの種類、受けたメッセージの種類、次状態の関係は、図11に示すようになる。ローカルアクセス制御部25は、この関係を示すテーブルを有している。ブロックの状態は、図11のテーブルに従って更新される。タグアドレスには、リクエスト管理テーブル37から読み出したアドレスの第39ビットから第20ビットまでの上位20ビットが用いられる。
【0160】
ローカルアクセス制御部25は、さらに、プロセッサ20への完了通知も行う。このとき、メッセージに付加されていたmidがプロセッサ20へ出力され、どのメモリアクセスが完了したのかが通知される。ステップS137の処理が終了すると、受けたメッセージの処理は終了する。
【0161】
ステップS138では、ローカルアクセス制御部25は、キャッシュメモリ21からリクエスト管理テーブル37から得られたアドレスの第19ビットから第3ビットまでの17ビットで指定されるエントリの64ビットデータを読み出す。読み出された64ビットのデータは、midとともにプロセッサ20へ渡される。
【0162】
ローカルアクセス制御部25は、また、リクエスト管理テーブル37の更新およびタグメモリ22の更新も行う。これらの処理は、いずれもステップS137におけるそれぞれの処理と同一であり、説明は省略する。ステップS138の処理が終了すると、受けたメッセージの処理は終了する。
【0163】
以下、図12〜図16を参照して、ホームアクセス制御部27の動作について説明する。
【0164】
図12は、ホームアクセス制御部27が実行する処理を示すフローチャートである。
【0165】
なお、以下の説明において、ホームアクセス制御部27が、主メモリ30或いはディレクトリメモリ31にアクセスするときは、実際には主メモリアクセス制御部28或いはディレクトリメモリアクセス制御部29の機能が用いられる。
【0166】
図12のフローチャートの処理において、ホームアクセス制御部27は、受けたメッセージの種類、ディレクトリメモリ31から読み出したブロックの状態、保持ノード情報から求めるアンキャッシュド情報、要求ノード番号と当該ノード番号が一致するかどうか、及び保持ノード情報と当該ノード番号が一致するかどうかの5つの情報を元に、ステップS142でディレクトリメモリ31に格納するブロックの状態および保持ノード情報に対する操作、ステップS143での処理タイプ、ステップS144、ステップS145、ステップS146で出力するメッセージあるいはメッセージ生成情報のメッセージの種類および出力先のバッファを決定する。
【0167】
図13、図14は、これらの関係を示すテーブルである。ホームアクセス記憶部27は、図13、図14に示すテーブルを有している。なお、図13、図14において“−−”は、いずれの値でも構わないことを示している。
【0168】
ホームアクセス記憶部27は、また、後述するステップS149でコンフリクトキューから読み出したメッセージの処理なのかそうでないのか、コンフリクトキューが空かどうか、図13、図14から求まる処理タイプがCDかどうか、の3つの情報を元に、ステップS142でディレクトリメモリ31に格納するトップビットの値、ステップS142でコンフリクトキューの先頭エントリを削除するかどうかを決定する。
【0169】
図15は、これらの関係を示すテーブルである。ホームアクセス記憶部27は、図15に示すテーブルを有している。
【0170】
図13、図14に示すアンキャッシュド情報は、それを求めるための保持ノード情報の形態によって、それぞれ求めかたが異なる。保持ノード情報が、状態がMやRSPの場合の形態である保持ノード番号であるときは、保持ノード番号が受けたメッセージの要求元ノード番号と一致した場合には、アンキャッシュド情報はYesとなり、一致しなかった場合には、Noとなる。
【0171】
保持ノード情報が、状態がREPやUPの場合の形態である保持ノード数の場合、保持ノード数から「1」ひいた値が「0」になった場合には、アンキャッシュド情報はYesとなり、「0」にならなかった場合には、Noとなる。保持ノード情報が、状態がCの場合の形態であるコースベクタ形式のときには、コースベクタが8ビットとも「0」の場合には、アンキャッシュド情報はYesとなり、1ビットでも1が立っている場合には、Noとなる。この情報は、要求元ノードPEiを除く他のノードPEiがコピーを保持していないかいるかを求めるものである。
【0172】
次に、図13、図14に示した保持ノード情報に対する操作(図では、「保持ノード操作」と記す)について説明する。保持ノード情報に対する操作として、set、add、count、dec、clean、noneの6つの操作がある。
【0173】
setは、受けたメッセージの要求元ノード番号を保持ノード番号として設定するものである。addは、保持ノード番号形式とコースベクタ形式に対して行われる操作である。保持ノード番号形式の場合は読み出した保持ノード番号の上位3ビットをデコードして得られる8ビットを、コースベクタ形式の場合はそのままの8ビットを、要求元ノード番号の上位3ビットをデコードして得られる8ビットと論理和をとって得られる値に設定するものである。
【0174】
countは、保持ノード番号形式あるいはコースベクタ形式に対して行われる操作である。読み出した保持ノード情報から、要求元ノード番号をのぞいて幾つのノードPEiがコピーを保持していることになるかを求める操作である。countは、保持ノード番号形式の場合は「1」に設定される。コースベクタ形式の場合は、8ビット中1が立っているビットの数と1ビットが表すノードPEiの数128とを掛けたもので求められる。ただし、要求元ノード番号に対応するビットが1の場合前記で求めた数から「1」引いた値が設定される。
【0175】
decは、保持ノード数形式に対して行われる操作である。decは、読み出した保持ノード数から「1」引いた値に設定するものである。cleanは、10ビットをすべて「0」に設定するものである。noneは、読み出した値に何の操作も加えずにそのまま設定するものである。
【0176】
以下、図12のフローチャートの処理について、説明する。
ステップS141では、ホームアクセス制御部27は、該当するディレクトリメモリのエントリのデータ(トップビット、状態、保持ノード情報)を読み出す。読み出されるエントリは、受けたメッセージのアドレスの第28ビットから第7ビットまでの22ビットでインデックスされるディレクトリメモリ31のデータである。
【0177】
ステップS142では、ホームアクセス制御部27は、ステップS141で読み出したディレクトリメモリ31のエントリの値を更新する。状態は、図13、図14に示すテーブルに従って決定される。保持ノード情報は、図13、図14に示した操作がステップS141で読み出した保持ノード情報に対して行われ求められる。トップビットは、図15に示すテーブルに従って決定される。ステップS142で更新するエントリは、ステップS141でアクセスしたエントリと同一のエントリである。
【0178】
ステップS142では、ホームアクセス制御部27は、データ付きのメッセージであれば主メモリ30へブロックデータを書き込む処理も行う。ブロックデータが書き込まれる主メモリ30のエントリは、受けたメッセージのアドレスの第28ビットから第7ビットまでの22ビットに0x0から0xfまで変化する4ビットを下位に付加した26ビットで指定される合計16エントリ(128バイト)である。ステップS142の処理が終了すると、ステップS143に進む。
【0179】
ステップS143では、ホームアクセス制御部27は、ディレクトリメモリ31から読み出したブロックの状態、保持ノード情報から求めるアンキャッシュド情報、要求ノード番号と当該ノード番号が一致するかどうか、保持ノード情報と当該ノード番号が一致するかどうか、の5つの情報から処理タイプがCA〜CEのいずれになるかを判定する。
【0180】
ステップS143で処理タイプがCAであると判定された場合には、ステップS144に進む。ステップS143で処理タイプがCBであると判定された場合には、ステップS145に進む。ステップS143で処理タイプがCCであると判定された場合には、ステップS146に進む。ステップS143で処理タイプがCDであると判定された場合には、ステップS147に進む。ステップS143で処理タイプがCEであると判定された場合には、ステップS148に進む。
【0181】
ステップS144では、ホームアクセス制御部27は、メッセージ生成情報を生成し、リモートバッファ34に出力する。出力されるメッセージ生成情報(メッセージの種類、アドレス、mid、要求元ノード番号、保持ノード情報)は、次のようにして生成される。メッセージの種類は、図13、図14で求められるメッセージの種類となる。アドレス、mid、要求元ノード番号は、それぞれ受けたメッセージのアドレスとmidと要求元ノード番号となる。保持ノード情報(メッセージ生成情報の場合)は、ステップS141で読み出した値となる。ステップS144の処理が終了すると、ステップS148に進む。
【0182】
ステップS145では、ホームアクセス制御部27は、主メモリ30(64Mエントリ×64ビット幅)から該当するブロックデータ(128バイト)を読み出す。読み出されるブロックデータは、受けたメッセージのアドレスの第28ビットから第7ビットまでの22ビットに0x0から0xfまで変化する4ビットを下位に付加した26ビットで指定される合計16エントリで、128バイトで構成される。このブロックデータは、生成されるメッセージに付加され、リプライバッファ32に出力される。宛先ノード番号は、要求元ノード番号となる。メッセージの種類は、図13、図14から求められる。アドレス、mid、要求元ノード番号については、受けたメッセージに付加されていたアドレス、mid、要求元ノード番号を使用する。ステップS145の処理が終了すると、ステップS148に進む。
【0183】
ステップS147では、ホームアクセス制御部27は、受けたメッセージを主メモリ30に設けたキューの最後に書き込む。ただし、処理しているメッセージがステップS149でコンフリクトキューから読み出したメッセージの場合には、ステップS147では何もしないで、ステップS148に進む。ここで、書き込まれるメッセージは、BlkRdSh、BlkRdEx、Upgradeに限られる。キューに書き込まれる情報は、メッセージの種類(4ビット)、アドレス(40ビット)、mid(2ビット)、要求元ノード番号(10ビット)の計56ビットで構成される。ステップS147の処理が終了すると、ステップS148に進む。
【0184】
ステップS148では、ホームアクセス制御部27は、主メモリ30のキューからメッセージを読み出す必要があるかどうかを判定する。ここで、キューからメッセージを読み出す必要があるかどうかは、後述するステップS149で読み出したメッセージの処理であったかどうか、また処理したメッセージの種類、コンフリクトキューが空かどうか、また処理したメッセージの処理タイプが何であったか、及びステップS141で読み出したトップビットの値が何であったか5つの情報を元に決定される。
【0185】
前記5つの情報と、決定されるキューの読み出しとの関係を図16に示す。ホームアクセス制御部27は、図16に示すテーブルを有している。
【0186】
ステップS148でキューからメッセージを読み出す必要があると判定された場合には、ステップS149に進む。ステップS148でキューからメッセージを読み出す必要がないと判定された場合には、図12のフローチャートの処理を終了する。
【0187】
ステップS149では、ホームアクセス制御部27は、主メモリ30に設けれらたコンフリクトキューの先頭のメッセージを読み出す。ここでは、メッセージを読み出すだけであり、キューからのメッセージの削除は行われない。ステップS149の処理が終わると、ステップS141に戻り、ローカルアクセス制御部25やメッセージ受信部35から受けたメッセージを処理した場合と同様に、キューから読み出したメッセージが処理されていく。なお、キューからの先頭のメッセージの削除は、前述した通り、ステップS142において行われる。
【0188】
以下、この実施の形態にかかるマルチプロセッサシステムの動作について、具体例を示して説明する。
【0189】
この例では、ノードPEi(i=0〜1023)において、次のようにしてメモリアクセスが行われた場合の動作を示す。
【0190】
最初ノードPE1で、ロードアクセスがid=0でアドレス0x0040030000に行われる。次いで、ノードPE1で、ストアアクセスがid=1でアドレス0x0040030000に行われる。次いで、ノードPE2で、ロードアクセスがid=2でアドレス0x0040030000に行われる。次いで、ノードPE5で、ストアアクセスがid=3でアドレス0x0040030008に行われる。次いで、ノードPE128で、ロードアクセスがid=0でアドレス0x0040030020に行われる。次いで、ノードPE2でストアアクセスがid=1でアドレス0x0040030010に行われる。
【0191】
(フェーズ1)
ノードPE1のプロセッサ20がアドレス0x0040030000にid=0でロードアクセスを行ったとする。
【0192】
プロセッサ20が行ったメモリアクセスはローカルバッファ38に出力される。メモリアクセスを受けたローカルバッファ38は、リクエスト管理テーブル37にアドレス(40ビット)を出力し、同一キャッシュブロックに対するリクエストが存在するかどうかを検査する。リクエスト管理テーブル37は、検査した結果をペンディング信号にして出力する(1の場合、同一キャッシュブロックに対するリクエストが存在することを示す)。ローカルバッファ38は、ペンディング信号が1の場合ローカルリクエスト制御部25への出力を行わず、ペンディング信号が0になるのを待って、ローカルアクセス制御部25に出力する。
【0193】
前記メモリアクセス(アクセスの種類はロード、アドレスは0x0040030000、id=0)を受けたローカルアクセス制御部25は、次のように動作する。まず、タグメモリ22の0x0600番地(ローカルバッファから得たアドレス0x0040030000の第19ビット〜第7ビットの13ビット)のデータを読み出す。初期の状態はIであるため、図7より処理タイプはAA、発行するメッセージはBlkRdSh、次状態はIに決定する(ステップS111)。
【0194】
処理タイプがAAであることから(ステップS112)、メッセージの生成出力およびリクエスト管理テーブル37への登録を行う。生成出力するメッセージの、宛先ノード番号は0x001(アドレス0x0040030000の第39ビット〜第30ビットの10ビット)、メッセージの種類はBlkRdSh、アドレスは0x0040030000、midは「0」、要求元ノード番号は0x001となる。また、宛先ノード番号と要求元ノード番号が両者とも0x001と一致するので、出力先は当該ノードPE1のホームアクセス制御部27となる。また、リクエスト管理テーブルの0(=id)番エントリに、有効ビットは「1」、チェックビットは「0」、アクセスの種類はロード、アドレスは0x0040030000というデータを書き込む(ステップS113)。
【0195】
タグメモリの0x0600番地のエントリのデータを、状態はIに、タグアドレスは0x00400(アドレス0x0040030000の第39ビット〜第20ビットの20ビット)に更新する(ステップS118)。以上で、ローカルアクセス制御部25は、ロードアクセスの処理を終了する。
【0196】
前記BlkRdShメッセージ(宛先ノード番号は0x001、メッセージの種類はBlkRdSh、アドレスは0x0040030000、midは「0」、要求元ノード番号は0x001)を受けたホームアクセス制御部27は次のように動作する。まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030000の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はそれぞれ初期状態の0、C、0x000である。受けたメッセージの種類がBlkRdShであり、読み出した状態がC、保持ノード情報が0x000でりアンキャッシュドであること、要求元ノード番号と当該ノード番号が一致することから、処理タイプはCB、次状態はM、保持ノード操作はset、出力するメッセージの種類はCmpDatEx、出力先はリプライバッファ32に決定する(図13参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDでないことから、トップビットは読み出した値「0」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0197】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はM、保持ノード情報は0x001に更新する。ここでは、データ付きのメッセージではないので主メモリへのブロックデータの書込を行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0198】
処理タイプがCBであることから(ステップS143)、主メモリ30の0x0006000番地〜0x000600f番地までの64ビット×16エントリ=128バイトのブロックデータを読み出し、生成するメッセージに付加しリプライバッファ32に出力する。このメッセージは、宛先ノード番号を0x001、メッセージの種類をCmpDatEx、アドレスを0x0040030000、midを「0」、要求元ノード番号を0x001、ブロックデータを当該ステップS145で読み出したブロックデータとするメッセージである(ステップS145)。
【0199】
メッセージの生成出力を終えると、コンフリクトキューからの読み出しが必要かどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、メッセージの種類はBlkRdShであるので、ステップS149でキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、BlkRdShメッセージの処理を終了する。
【0200】
ホームアクセス制御部27が出力した前記CmpDatExメッセージ(宛先ノード番号は0x001、メッセージの種類はCmpDatEx、アドレスは0x0040030000、midは「0」、要求元ノード番号は0x001)を受たリプライバッファ32は、その情報をそのままローカルアクセス制御部25に出力する。
【0201】
CmpDatExメッセージ(宛先ノード番号は0x001、メッセージの種類はCmpDatEx、アドレスは0x0040030000、midは「0」、要求元ノード番号は0x001)を受けたローカルアクセス制御部25は、リクエスト管理テーブル37の0(=mid)番エントリの情報を読みだし、アクセスの種類はロード、アドレスは0x0040030000、チェックビットは「0」という情報を得る(ステップS131)。
【0202】
ブロックデータ付きのメッセージであるから(ステップS132)、キャッシュメモリ21の0x06000番地から0x0600f番地に、メッセージに付加されていたブロックデータを書き込む(ステップS135)。
【0203】
アクセスタイプがロードであることから(ステップS136)、キャッシュメモリ21から0x06000番地の64ビットデータを読み出し、プロセッサ20に対してid=0のメモリアクセスに対する応答データとして渡す。また、リクエスト管理テーブルの0番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリの0x0600番地の状態およびタグアドレスを、それぞれEおよび0x00400に更新する(ステップS138)。以上でローカルアクセス制御部25は、CmpDatExメッセージの処理を終了する。
【0204】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1の主メモリ30およびノードPE1のキャッシュメモリ21に存在する状態となる。
【0205】
(フェーズ2)
次いで、ノードPE1で、ストアアクセスがid=1でアドレス0x0040030000に行われたとする。
【0206】
プロセッサ20が行ったメモリアクセスはローカルバッファ38に出力される。メモリアクセスを受けたローカルバッファ38は、リクエスト管理テーブル37にアドレス(40ビット)を出力し、同一キャッシュブロックに対するリクエストが存在するかどうかを検査する。リクエスト管理テーブル37は検査した結果をペンディング信号にして出力する(「1」の場合、同一キャッシュブロックに対するリクエストが存在することを示す)。
【0207】
フェーズ1で処理していたロードアクセスがまだ終了していなかった場合、ペンディング信号は「1」となり、ローカルバッファ38はローカルリクエスト制御部25へ受けたメモリアクセスを出力しない。フェーズ1の処理が完了し、リクエスト管理テーブル37からロードアクセスのエントリが削除されると出力を開始する。
【0208】
フェーズ1のロードアクセスの処理を終了し、前記ストアアクセス(アクセスの種類はストア、アドレスは0x0040030000、id=1)を受けたローカルアクセス制御部25は、次のように動作する。まず、タグメモリ22の0x0600番地(ローカルバッファから得たアドレス0x0040030000の第19ビット〜第7ビットの13ビット)のデータを読み出す。フェーズ1において状態はE、タグアドレスは0x00400に更新されており、その値が読み出される。アクセスの種類がストアであり、タグアドレスが一致し、状態がEであることから、処理タイプはAD、次状態はDに決定する(ステップS111)。
【0209】
処理タイプがADであることから(ステップS112)、キャッシュメモリ21の0x06000番地のデータ64ビットを、受けたストアアクセスのデータに更新する処理を行う。まだ同時に、プロセッサへidを出力し、id=1のメモリアクセスが完了した旨をプロセッサ20に通知する(ステップS117)。
【0210】
タグメモリ22の0x0600番地のデータを、状態はD、タグアドレスは0x00400に更新する(ステップS118)。以上で、ローカルアクセス制御部25は、ストアアクセスの処理を終了する。
【0211】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1のキャッシュメモリ21にのみ存在する状態となる。
【0212】
(フェーズ3)
次いで、ノードPE2で、ロードアクセスがid=2でアドレス0x0040030000に行われたとする。
【0213】
プロセッサ20が行ったメモリアクセスはローカルバッファ38に出力される。メモリアクセスを受けたローカルバッファ38は、リクエスト管理テーブル37にアドレス(40ビット)を出力し、同一キャッシュブロックに対するリクエストが存在するかどうかを検査する。存在しなければローカルアクセス制御部25に対して出力する。
【0214】
前記メモリアクセス(アクセスの種類はロード、アドレスは0x0040030000、id=2)を受けたローカルアクセス制御部25はまず、タグメモリ22の0x0600番地のデータを読み出す(ステップS111)。初期の状態はIであるため、図7より処理タイプはAA、発行するメッセージはBlkRdSh、次状態はIに決定する。
【0215】
処理タイプがAAであることから(ステップS112)、メッセージの生成出力およびリクエスト管理テーブル37への登録を行う。生成出力するメッセージの、宛先ノード番号は0x001(アドレス0x0040030000の第39ビット〜第30ビットの10ビット)、メッセージの種類はBlkRdSh、アドレスは0x0040030000、midは「2」、要求元ノード番号は0x002となる。また、宛先ノード番号と要求元ノード番号が異なるので、出力先はメッセージ送信部35となる。また、この時リクエスト管理テーブルの2(=id)番エントリに、有効ビットは「1」、チェックビットは「0」、アクセスの種類はロード、アドレスは0x0040030000というデータを書き込む(ステップS113)。
【0216】
タグメモリの0x0600番地のエントリのデータを、状態はIに、タグアドレスは0x00400(アドレス0x0040030000の第39ビット〜第20ビットの20ビット)に更新する(ステップS118)。以上で、ローカルアクセス制御部25は、ロードアクセスの処理を終了する。
【0217】
BlkRdShメッセージは、ノードPE2のメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られる。
【0218】
前記BlkRdShメッセージ(宛先ノード番号は0x001、メッセージの種類はBlkRdSh、アドレスは0x0040030000、midは「2」、要求元ノード番号は0x002)を受けたホームアクセス制御部27は次のように動作する。
【0219】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030000の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ1において、トップビット、状態、保持ノード情報はそれぞれ0、M、0x001に更新されており、その値が読み出される。受けたメッセージの種類はBlkRdShであり、読み出した状態はM、保持ノード情報は0x001でありアンキャッシュドでないこと、保持ノード情報0x001と当該ノード番号0x001は一致することから、処理タイプはCC、次状態はRSP、保持ノード操作はnone、出力するメッセージの種類はIntvSh、出力先はリクエストバッファ33に決定する。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDでないことから、トップビットは読み出した値「0」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0220】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はRSP、保持ノード情報は0x001に更新する。ここでは、データ付きのメッセージではないので主メモリへのブロックデータの書込を行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0221】
処理タイプがCCであることから(ステップS143)、宛先ノード番号を0x001、メッセージの種類をIntvSh、アドレスを0x0040030000、midを「2」、要求元ノード番号を0x002、とするメッセージを生成し、リクエストバッファ33に出力する(ステップS146)。
【0222】
メッセージの生成出力を終えると、コンフリクトキューからの読み出しが必要かどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、メッセージの種類はBlkRdShであるので、ステップS149でキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、BlkRdShメッセージの処理を終了する。
【0223】
IntvShメッセージはリクエストバッファ33を介してローカルアクセス制御部25に出力される。
【0224】
IntvShメッセージ(宛先ノード番号は0x001、メッセージの種類はIntvSh、アドレスは0x0040030000、midは「2」、要求元ノード番号は0x002)を受けたローカルアクセス制御部25は、タグメモリ22の0x0600番地のデータを読みだす。フェーズ2において、状態及びタグアドレスはそれぞれD及び0x00400に更新されており、この値が読み出される。受けたメッセージがIntvShであり、タグアドレスが一致し、状態がDであることから、処理タイプはBB、出力するメッセージの種類はAckData、次状態はSに決定する(ステップS121)。
【0225】
処理タイプがBBであることから(ステップS122)、キャッシュメモリ21の0x06000番地から0x0600f番地までの64ビット×16エントリ=128バイトのブロックデータを読み出し、生成するAckDataメッセージに付加する。生成するAckDataメッセージの、宛先ノード番号は0x001、メッセージの種類はAckData、アドレスは0x0040030000、要求元ノード番号は0x002、midは「2」、ブロックデータはキャッシュメモリ21から読み出したデータとなる。宛先ノード番号0x001と当該ノードPE1のノード番号0x001が一致することから出力先はホームアクセス制御部27となる(ステップS124)。
【0226】
タグメモリの0x0600番地の状態およびタグアドレスを、それぞれSおよび0x00400に更新する。また、リクエスト管理テーブル37へ、受けたメッセージのアドレス(0x0040030000)を出力する。リクエスト管理テーブル37では、各エントリのアドレスと、ローカルアクセス制御部25が出力するアドレスの、第39ビット〜第7ビットが一致するかどうかを検査し、一致するエントリのチェックビットを「1」に更新する(ステップS125)。以上でローカルアクセス制御部25は、IntvShメッセージの処理を終了する。
【0227】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1のキャッシュメモリ21に存在し、その最新のデータが付加されたAckDataメッセージがノードPE1のホームアクセス制御部27に出力されている状態となる。
【0228】
(フェーズ4)
この時、ノードPE5で、ストアアクセスがid=3でアドレス0x0040030008に行われていたとする。
【0229】
プロセッサ20が行ったメモリアクセスはローカルバッファ38に出力される。メモリアクセスを受けたローカルバッファ38は、リクエスト管理テーブル37にアドレス(40ビット)を出力し、同一キャッシュブロックに対するリクエストが存在するかどうかを検査する。存在しなければローカルアクセス制御部25に対して出力する。
【0230】
前記メモリアクセス(アクセスの種類はストア、アドレスは0x0040030008、id=3)を受けたローカルアクセス制御部25は、まず、タグメモリ22の0x0600番地のデータを読み出す。初期の状態はIであるため、図7より処理タイプはAA、発行するメッセージはBlkRdEx、次状態はIに決定する(ステップS111)。
【0231】
処理タイプがAAであることから(ステップS112)(ステップS113)、メッセージの生成出力およびリクエスト管理テーブル37への登録を行う。発行されるメッセージの、宛先ノード番号は0x001(アドレス0x0040030008の第39ビット〜第30ビットの10ビット)、メッセージの種類はBlkRdEx、アドレスは0x0040030008、midは「3」、要求元ノード番号は0x005となる。また、宛先ノード番号と要求元ノード番号が異なるので、出力先はメッセージ送信部35となる。また、この時リクエスト管理テーブルの3(=id)番エントリに、有効ビットは「1」、チェックビットは「0」、アクセスの種類はストア、アドレスは0x0040030008、及びストアデータを書き込む(ステップS113)。
【0232】
タグメモリの0x0600番地のエントリのデータを、状態はIに、タグアドレスは0x00400(アドレス0x0040030008の第39ビット〜第20ビットの20ビット)に更新する(ステップS118)。以上で、ローカルアクセス制御部25は、ストアアクセスの処理を終了する。
【0233】
BlkRdExメッセージは、ノードPE5のメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られる。ホームアクセス制御部27において、このBlkRdExメッセージが、フェーズ3の最後でノードPE1のローカルアクセス制御部25がホームアクセス制御部に27に出力しているAckDataメッセージよりも先に処理されたとする。
【0234】
前記BlkRdExメッセージ(宛先ノード番号は0x001、メッセージの種類はBlkRdEx、アドレスは0x0040030008、midは「3」、要求元ノード番号は0x005)を受けたホームアクセス制御部27は次のように動作する。
【0235】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030000の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ3において、トップビット、状態、保持ノード情報はそれぞれ0、RSP、0x001に更新されており、その値が読み出される。受けたメッセージの種類がBlkRdExであり、読み出した状態がRSPであることから、処理タイプはCD、次状態はRSP、保持ノード操作はnoneに決定される。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDであることから、トップビットは「1」に更新し、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0236】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「1」、状態はRSP、保持ノード情報は0x001に更新する。ここでは、データ付きのメッセージではないので主メモリへのブロックデータの書込は行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0237】
処理タイプがCDであり(ステップS143)、ステップS149でキューから読み出したメッセージの処理ではないので、コンフリクトキューにメッセージ情報(メッセージの種類はBlkRdEx、アドレスは0x0040030008、要求元ノード番号は0x005、midは「3」)を書き込む。キューは空であったためこのメッセージがキューの先頭となる(ステップS147)。
【0238】
コンフリクトキューからの読み出しが必要かどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、メッセージの種類はBlkRdExであるので、ステップS149でキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、BlkRdExメッセージの処理を終了する。
【0239】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1のキャッシュメモリ21に存在し、その最新のデータが付加されたAckDataメッセージがノードPE1のホームアクセス制御部27に出力されている状態となる。
【0240】
(フェーズ5)
その後、ホームアクセス制御部27は、ローカルアクセス制御部25からAckDataメッセージ(宛先ノード番号は0x001、メッセージの種類はAckData、アドレスは0x0040030000、midは「2」、要求元ノード番号は0x002、ブロックデータは最新のデータ)を受け、次のように動作する。
【0241】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030000の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はそれぞれフェーズ4で1、RSP、0x001に更新されており、その値が読み出される。受けたメッセージの種類がAckDataであり、読み出した状態がRSP、要求元ノード番号0x002と当該ノード番号0x001が一致しないことから、処理タイプはCA、次状態はC、保持ノード操作はadd、出力するメッセージの種類はCmpDatSh、出力先はリモートバッファ34に決定する(図14参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空でないことから、トップビットは読み出した値「1」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0242】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「1」、状態はC、保持ノード情報は0x001に更新する。また、この時受けたメッセージがブロックデータ付きのAckDataメッセージであることから主メモリ30の0x0006000番地から0x000600f番地に、付加されていたブロックデータを書き込む。これにより、主メモリ30に最新のデータが存在する状態となる。コンフリクトキューの先頭エントリの削除は行わない(ステップS142)。
【0243】
処理タイプがCAであることから(ステップS143)、CmpDatShメッセージ生成情報を生成し、リモートバッファ34に出力する。このメッセージ生成情報は、メッセージの種類をCmpDatSh、アドレスを0x0040030000、midを「2」、要求元ノード番号を0x002、保持ノード情報を0x001とする(ステップS144)。
【0244】
メッセージ生成情報の出力を終えると、コンフリクトキューからの読み出が必要かどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、メッセージの種類はAckDataであり、ステップS141で読み出したトップビットの値は「1」であることから、コンフリクトキューからの読み出しを行う(ステップS149)。
【0245】
読み出されるメッセージはフェーズ4でコンフリクトキューに書き込まれた、BlkRdExメッセージ(メッセージの種類はBlkRdEx、アドレスは0x0040030008、要求元ノード番号は0x005、midは「3」)である。以上で、ホームアクセス制御部27は、AckDataメッセージの処理を終了し、コンフリクトキューから読み出したBlkRdExメッセージの処理を開始する。
【0246】
ホームアクセス制御部27がステップS149で読み出したBlkRdExメッセージの処理の説明は次のフェーズ6で行う。ここでは、ステップS144でリモートバッファ34に出力されたCmpDatShメッセージ生成情報について説明する。
【0247】
前記CmpDatShメッセージ生成情報(メッセージの種類はCmpDatSh、アドレスは0x0040030000、midは「2」、要求元ノード番号は0x002、保持ノード情報は0x001)を受けたリモートバッファ34は、主メモリ30の0x0006000番地から0x000600f番地までの128バイトのデータを読み出し、宛先ノード番号を0x002、メッセージの種類をCmpDatSh、アドレスを0x0040030000、midを「2」、要求元ノード番号を0x002、ブロックデータを主メモリ30から読み出したブロックデータとするメッセージを生成し、メッセージ送信部35へ出力する。このブロックデータは最新のデータである。
【0248】
このCmpDatShメッセージは、ノードPE1のメッセージ送信部35、相互結合網10、ノードPE2のメッセージ受信部36、ノードPE2にのリプライバッファ32を介して、ノードPE2のローカルバッファ25に出力される。
【0249】
前記CmpDatShメッセージ(宛先ノード番号は0x002、メッセージの種類はCmpDatSh、アドレスは0x0040030000、midは「2」、要求元ノード番号は0x002、ブロックデータは最新のデータ)を受けたローカルアクセス制御部25は、リクエスト管理テーブル37の2(=mid)番エントリの情報を読みだし、アクセスの種類はロード、アドレスは0x0040030000、チェックビットは「0」という情報を得る(ステップS131)。
【0250】
ブロックデータ付きのメッセージであるから(ステップS132)、キャッシュメモリ21の0x06000番地から0x0600f番地に、メッセージに付加されていたブロックデータを書き込む(ステップS135)。
【0251】
そして、アクセスタイプがロードであることから(ステップS136)、キャッシュメモリ21から0x06000番地の64ビットデータを読み出し、プロセッサ20に対してid=2のメモリアクセスに対する応答データとして渡す。また、リクエスト管理テーブルの2番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリの0x0600番地の状態およびタグアドレスを、それぞれSおよび0x00400に更新する(ステップS138)。以上でローカルアクセス制御部25は、CmpDatShメッセージの処理を終了する。
【0252】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1のキャッシュメモリ21、ノードPE1の主メモリ30、ノードPE2のキャッシュメモリ21に存在する状態になる。
【0253】
(フェーズ6)
フェーズ5において、ノードPE1のホームアクセス制御部27は同ノードのローカルアクセス制御部25が出力するAckDataメッセージを受けそれを処理した。その処理において、コンフリクトキューからのメッセージ情報の読み出しが必要と判断し(ステップS148)、主メモリ30をアクセスし、BlkRdExメッセージ(メッセージの種類はBlkRdEx、アドレスは0x0040030008、要求元ノード番号は0x005、midは「3」)を読み出した(ステップS149)。ここでは、このBlkRdExメッセージを読み出したホームアクセス制御部27の動作を説明する。
【0254】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030008の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ5において、トップビット、状態、保持ノード情報はそれぞれ1、C、0x001に更新されており、その値が読み出される。受けたメッセージの種類がBlkRdExであり、読み出した状態がCであり、保持ノード情報が0x001でアンキャッシュドではないことことから、処理タイプはCA、次状態はREP、保持ノード操作はcount、出力するメッセージの種類はInv、出力先はリモートバッファ34に決定する(図13参照)。また、コンフリクトキューから読み出したメッセージの処理であり、処理タイプがCDでないことから、トップビットは「0」に更新し、また、コンフリクトキューの先頭エントリの削除を行うことが決定する(図15参照)(ステップS141)。
【0255】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はREP、保持ノード情報は0x07fに更新する。処理しているメッセージがデータ付きではないので主メモリ30への書き込みは行わない。コンフリクトキューの先頭エントリの削除は行い、読み出したBlkRdExメッセージのエントリを削除する。これにより、コンフリクトキューは空となる(ステップS142)。
【0256】
処理タイプがCAであるので(ステップS143)、メッセージ生成情報を生成しリモートバッファ34に出力する。メッセージ生成情報は、メッセージの種類をInv、アドレスを0x0040030008、midを「3」、要求元ノード番号を0x005、保持ノード情報を0x001とする(ステップS144)。
【0257】
さらにコンフリクトキューから情報を読み出す必要があるかどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理であり、コンフリクトキューが空であることから、ステップS149でコンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、コンフリクトキューから読み出したBlkRdExメッセージの処理を終了する。
【0258】
前記Invメッセージ生成情報(種類はInv、アドレスは0x0040030008、midは「3」、要求元ノード番号は0x005、保持ノード情報は0x001)を受け取ったリモートバッファ34は、メッセージの種類をInv、アドレスを0x0040030008、midを「3」、要求元ノード番号を0x005とし、宛先ノード番号が0x000〜0x07fの内0x005を除いたものとする127個のメッセージを順次生成しメッセージ送信部35に出力する。
【0259】
これらのInvメッセージはノードPE1のメッセージ送信部35、相互結合網10、各ノードPE0〜PE127(PE5除く)のメッセージ受信部36、リクエストバッファ33を介してローカルアクセス制御部25に出力される。
【0260】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1のキャッシュメモリ21、ノードPE1の主メモリ30、ノードPE2のキャッシュメモリ21に存在する状態である。
【0261】
(フェーズ7)
この時、ノードPE128で、ロードアクセスがid=0でアドレス0x0040030020に行われていたとする。
【0262】
プロセッサ20が行ったメモリアクセスはローカルバッファ38に出力される。メモリアクセスを受けたローカルバッファ38は、リクエスト管理テーブル37にアドレス(40ビット)を出力し、同一キャッシュブロックに対するリクエストが存在するかどうかを検査する。存在しなければローカルアクセス制御部25に対して出力する。
【0263】
前記メモリアクセス(アクセスの種類はロード、アドレスは0x0040030020、id=0)を受けたローカルアクセス制御部25は、まず、タグメモリ22の0x0600番地のデータを読み出す。初期の状態はIであるため、図7より処理タイプはAA、発行するメッセージはBlkRdSh、次状態はIに決定する(ステップS111)。
【0264】
処理タイプがAAであることから(ステップS112)、メッセージの生成出力およびリクエスト管理テーブル37への登録を行う。生成出力するメッセージの、宛先ノード番号は0x001(アドレス0x0040030000の第39ビット〜第30ビットの10ビット)、メッセージの種類はBlkRdSh、アドレスは0x0040030020、midは「0」、要求元ノード番号は0x080となる。また、宛先ノード番号と要求元ノード番号が異なるので、出力先はメッセージ送信部35となる。また、この時リクエスト管理テーブルの0(=id)番エントリに、有効ビットは「1」、チェックビットは「0」、アクセスの種類はロード、アドレスは0x0040030020というデータを書き込む(ステップS113)。
【0265】
タグメモリの0x0600番地のエントリのデータを、状態はIに、タグアドレスは0x00400(アドレス0x0040030000の第39ビット〜第20ビットの20ビット)に更新する(ステップS118)。以上で、ローカルアクセス制御部25は、ロードアクセスの処理を終了する。
【0266】
BlkRdShメッセージは、ノードPE128のメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られる。
【0267】
前記BlkRdShメッセージ(宛先ノード番号は0x001、メッセージの種類はBlkRdSh、アドレスは0x0040030020、midは「0」、要求元ノード番号は0x080)を受けたホームアクセス制御部27は次のように動作する。
【0268】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030020の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ6において、トップビット、状態、保持ノード情報はそれぞれ0、REP、0x07fに更新されており、その値が読み出される。受けたメッセージの種類がBlkRdShであり、読み出した状態がREPであることから、処理タイプはCD、次状態はREP、保持ノード操作はnoneに決定される(図13参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDであることから、トップビットは「1」に更新し、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0269】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「1」、状態はREP、保持ノード情報は0x07fに更新する。また、処理しているメッセージがデータ付きではないので主メモリ30への書き込みは行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0270】
処理タイプがCDであり(ステップS143)、ステップS149でキューから読み出したメッセージの処理ではないので、コンフリクトキューにメッセージ情報(メッセージの種類はBlkRdSh、アドレスは0x0040030020、要求元ノード番号は0x080、midは「0」)を書き込む。キューは空であったためこのメッセージがキューの先頭となる(ステップS147)。
【0271】
コンフリクトキューからの読み出しが必要かどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、処理したメッセージの種類がBlkRdShであることから、ステップS149でコンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、BlkRdShメッセージの処理を終了する。
【0272】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1のキャッシュメモリ21、ノードPE1の主メモリ30、ノードPE2のキャッシュメモリ21に存在する状態である。
【0273】
(フェーズ8)
またこの時ノードPE2で、ストアアクセスがid=1でアドレス0x0040030010に行われていたとする。
【0274】
プロセッサ20が行ったメモリアクセスはローカルバッファ38に出力される。メモリアクセスを受けたローカルバッファ38は、リクエスト管理テーブル37にアドレス(40ビット)を出力し、同一キャッシュブロックに対するリクエストが存在するかどうかを検査する。存在しなければローカルアクセス制御部25に対して出力する。
【0275】
前記メモリアクセス(アクセスの種類はストア、アドレスは0x0040030010、id=1)を受けたローカルアクセス制御部25はまず、タグメモリ22の0x0600番地のデータを読み出す。フェーズ5において状態はS、タグアドレスは0x00400に更新されており、その値が読み出される。アクセスの種類はストアであり、タグアドレスは0x00400で一致、状態はSであるため、処理タイプはAA、出力するメッセージの種類はUpgrade、次状態はSに決定する(図7参照)(ステップS111)。
【0276】
処理タイプがAAであることから(ステップS112)、メッセージの生成出力およびリクエスト管理テーブル37への登録を行う。生成出力するメッセージの、宛先ノード番号は0x001(アドレス0x0040030010の第39ビット〜第30ビットの10ビット)、メッセージの種類はUpgrade、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002となる。また、宛先ノード番号と要求元ノード番号が異なるので、出力先はメッセージ送信部35となる。また、この時リクエスト管理テーブルの1(=id)番エントリに、有効ビットは「1」、チェックビットは「0」、アクセスの種類はストア、アドレスは0x0040030010、及びストアデータを書き込む(ステップS113)。
【0277】
タグメモリの0x0600番地のエントリのデータを、状態はSに、タグアドレスは0x00400(アドレス0x0040030010の第39ビット〜第20ビットの20ビット)に更新する(ステップS118)。
【0278】
Upgradeメッセージは、ノードPE2のメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られる。
【0279】
前記Upgradeメッセージ(宛先ノード番号は0x001、メッセージの種類はUpgrade、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002)を受けたホームアクセス制御部27は次のように動作する。
【0280】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030010の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ7において、トップビット、状態、保持ノード情報はそれぞれ1、REP、0x07fに更新されており、その値が読み出される。受けたメッセージの種類がUpgradeであり、読み出した状態がREPであることから、処理タイプはCD、次状態はREP、保持ノード操作はnoneに決定する(図13参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空でないことから、トップビットは読み出した値「1」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0281】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「1」、状態はREP、保持ノード情報は0x07fに更新する。また、処理しているメッセージがデータ付きではないので主メモリ30への書き込みは行わず、また、コンフリクトキューの先頭エントリの削除も行わない(ステップS143)。
【0282】
処理タイプがCDであり(ステップS143)、ステップS149でキューから読み出したメッセージの処理ではないので、コンフリクトキューにメッセージ情報(メッセージの種類はUpgrade、アドレスは0x0040030010、要求元ノード番号は0x002、midは「1」)を書き込む(ステップS147)。
【0283】
コンフリクトキューからの読み出しが必要かどうかを検査する(ステップS148)。図16より、ステップS149でコンフリクトキューから読み出したメッセージの処理でなく、処理したメッセージの種類がUpgradeであることから、コンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、Upgradeメッセージの処理を終了する。
【0284】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1のキャッシュメモリ21、ノードPE1の主メモリ30、ノードPE2のキャッシュメモリ21に存在する状態である。
【0285】
(フェーズ9)
フェーズ6でノードPE1から送信された127個のInvメッセージ(宛先ノードは0x000〜0x07fで0x005を除いたもの、種類はInv、アドレスは0x0040030008、midは「3」、要求元ノード番号は0x005)は、相互結合網10、各宛先ノードのメッセージ受信部36、リクエストバッファ33を介してローカルアクセス制御部25に出力される。
【0286】
Invメッセージを受けたローカルアクセス制御部25は、タグメモリ22の0x0600番地のデータを読み出す。読み出したタグアドレスが0x00400と一致するかどうか、また状態がなにであるかによって、処理タイプ、出力するメッセージの種類、タグメモリ22の次状態が決定する(図9参照)(ステップS121)。
【0287】
この場合必ず処理タイプがBAとなり(ステップS122)、Ackメッセージを生成する。このAckメッセージは、宛先ノード番号を0x001、メッセージの種類をAck、アドレスを0x00400300008、midを「3」、要求元ノード番号を0x005とするメッセージである。出力先は宛先ノード番号0x001と当該ノード番号の比較結果によって決定する。ノードPE1であれば、一致するのでホームアクセス制御部27に出力する。他のノードであれば、一致しないのでメッセージ送信部35に出力する(ステップS123)。
【0288】
タグメモリの更新を行う。更新するエントリは先ほど読み出を行った0x0600番地のエントリであり、状態は図9から求まる次状態を、タグアドレスは先ほどタグメモリ22から読み出した値をそのまま書き込む。また、リクエスト管理テーブル37へ、受けたメッセージのアドレス(0x0040030008)を出力する。リクエスト管理テーブル37では、各エントリのアドレスと、ローカルアクセス制御部25が出力するアドレスの、第39ビット〜第7ビットが一致するかどうかを検査し、一致するエントリのチェックビットを「1」に更新する。
【0289】
例えばノードPE2では、フェーズ8でアドレス0x0040030010に対するストアアクセスを処理し、リクエスト管理テーブル37の1番のエントリに当該メモリアクセスを登録している。リクエスト管理テーブル37の1番エントリのアドレス0x0040030010と、ローカルアクセス制御部25がリクエスト管理テーブル37に出力したアドレス0x0040030008の、第39ビット〜第7ビットが一致するので、1番エントリのチェックビットが「1」に更新される(ステップS125)。以上でローカルアクセス制御部25は、Invメッセージの処理を終了する。
【0290】
ノードPE0、ノードPE2〜ノードPE4、ノードPE6〜ノードPE127は、それぞれAckメッセージ(宛先ノードは0x001、種類はAck、アドレスは0x0040030008、midは「3」、要求元ノード番号は0x005)をノードPE1に対して送信する。このAckメッセージは、各ノードのメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られてくる。
【0291】
一方、ノードPE1では、ローカルアクセス制御部25から、Ackメッセージ(宛先ノードは0x001、種類はAck、アドレスは0x0040030008、midは「3」、要求元ノード番号は0x005)がホームアクセス制御部27に出力される。ノードPE1のホームアクセス制御部27は、合計127個の同じAckメッセージを受け取り処理することになる。最初のAckメッセージをノードPE1のホームアクセス制御部27が受けた場合、次のように動作する。
【0292】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030008の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はそれぞれフェーズ8で1、REP、0x07fに更新されており、その値が読み出される。受けたメッセージの種類がAckであり、読み出した状態がREP、また保持ノード情報が0x07fでありアンキャッシュドでないことから、処理タイプはCE、次状態はREP、保持ノード操作はdec、出力するメッセージはなしに決定する(図14参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空でないことから、トップビットは読み出した値「1」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0293】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「1」、状態はREP、保持ノード情報は0x07eに更新する。処理しているメッセージがデータ付きではないので主メモリ30への書き込みは行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0294】
処理タイプがCEであることから(ステップS143)、コンフリクトキューからの読み出しが必要かどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、処理したメッセージの種類がAckであり、処理タイプがCEであることから、ステップS149でコンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、Ackメッセージの処理を終了する。
【0295】
ホームアクセス制御部27は、各ノードPEiからのAckメッセージを、前記同様に処理していき、ディレクトリメモリ31の値を読み出し、保持ノード情報を「1」引いた値に更新する処理が行われていく。この処理は、読み出した保持ノード情報から「1」引いた値が0x000でない場合、即ちアンキャッシュドでない場合まで継続される。ただし、アンキャッシュドになる場合、即ち最後の127個目のAckメッセージを受けたときは、次のように動作する。
【0296】
最後の127個目のメッセージを受けたホームアクセス制御部27は、まずディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030008の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はそれぞれ1、REP、0x001に更新されており、その値が読み出される。受けたメッセージの種類がAckであり、読み出した状態がREP、保持ノード情報が0x001でありアンキャッシュドであること、また要求元ノード番号0x005が当該ノードPE1のノード番号0x001と異なることから、処理タイプはCA、次状態はM、保持ノード操作はset、出力するメッセージの種類はCmpDatEx、出力先はリモートバッファ34に決定する(図14参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空でないことから、トップビットは読み出した値「1」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0297】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「1」、状態はM、保持ノード情報は0x005に更新する。また、処理しているメッセージがデータ付きではないので主メモリ30への書き込みは行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0298】
処理タイプがCAであることから(ステップS143)、CmpDatExメッセージ生成情報が生成され、リモートバッファ34に出力される。このCmpDatExメッセージ生成情報は、メッセージの種類をCmpDatEx、アドレスを0x0040030008、midを「3」、要求元ノード番号を0x005、保持ノード情報を0x001とする(ステップS144)。
【0299】
コンフリクトキューからメッセージ情報を読み出す必要があるかどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、処理したメッセージの種類がAckであり、処理タイプがCAであり、トップビットが「1」であることから、リクトキューからの読み出しを行う。
【0300】
この時、コンフリクトキューにはフェーズ7おいてBlkRdShメッセージが、フェーズ8においてUpgradeメッセージが書き込まれており前者のBlkRdShメッセージ(メッセージの種類はBlkRdSh、アドレスは0x0040030020、要求元ノード番号は0x080、midは「0」)が読み出される(ステップS149)。以上で、ホームアクセス制御部27は、Ackメッセージの処理を終了し、コンフリクトキューから読み出したBlkRdShメッセージの処理を開始する。
【0301】
ホームアクセス制御部27がステップS149で読み出したBlkRdShメッセージの処理の説明は次のフェーズ10で行う。ここでは、ステップS144でリモートバッファ34に出力されたCmpDatExメッセージ生成情報について説明する。
【0302】
前記CmpDatExメッセージ生成情報(メッセージの種類はCmpDatEx、アドレスは0x0040030008、midは「3」、要求元ノード番号は0x005、保持ノード情報は0x001)を受けたリモートバッファ34は、主メモリ30の0x0006000番地から0x000600f番地までの128バイトのデータを読み出し、宛先ノード番号を0x005、メッセージの種類をCmpDatEx、アドレスを0x0040030008、midを「3」、要求元ノード番号を0x005、ブロックデータを主メモリ30から読み出したブロックデータとするメッセージを生成し、メッセージ送信部35へ出力する。このブロックデータは最新のデータである。
【0303】
このCmpDatExメッセージは、ノードPE1のメッセージ送信部35、相互結合網10、ノードPE5のメッセージ受信部36、リプライバッファ32を介して、ローカルバッファ25に出力される。
【0304】
CmpDatExメッセージ(宛先ノード番号は0x005、メッセージの種類はCmpDatEx、アドレスは0x0040030008、midは「3」、要求元ノード番号は0x005、ブロックデータは最新のデータ)を受けたローカルアクセス制御部25は、まずリクエスト管理テーブル37の3(=mid)番エントリの情報を読みだし(ステップS131)、アクセスの種類はストア、アドレスは0x0040030008、チェックビットは「0」という情報及びストアデータを得る。
【0305】
ブロックデータ付きのメッセージであるから(ステップS132)、キャッシュメモリ21の0x06000番地から0x0600f番地に、メッセージに付加されていたブロックデータを書き込む(ステップS135)。
【0306】
そして、アクセスタイプがストアであることから(ステップS136)、キャッシュメモリ21の0x06000番地のデータ64ビットを、リクエスト管理テーブル37から得たストアデータに更新する処理を行う。また、リクエスト管理テーブルの3(=mid)番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリ22の0x0600番地のデータを、状態はD(図11参照)、タグアドレスは0x00400(リクエスト管理テーブルから得たアドレス0x0040030008の第39ビット〜第20ビットの20ビット)に更新する。また、プロセッサへmidを出力し、id=3のメモリアクセスが完了した旨を通知する(ステップS137)。以上でローカルアクセス制御部25は、CmpDatExメッセージの処理を終了する。
【0307】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE5のキャッシュメモリ21にのみ存在する状態となる。
【0308】
(フェーズ10)
フェーズ9において、ノードPE1のホームアクセス制御部27はAckメッセージを127個処理した。その127個目のAckメッセージの処理(ステップS148)において、コンフリクトキューからのメッセージ情報の読み出しが必要と判断し、主メモリ30をアクセスし、BlkRdShメッセージ(メッセージの種類はBlkRdSh、アドレスは0x0040030020、要求元ノード番号は0x080、midは「0」)を読み出した(ステップS149)。ここでは、このBlkRdShメッセージを読み出したホームアクセス制御部27の動作を説明する。
【0309】
まず、ディレクトリメモリ31の0x000600(コンフリクトキューから読み出したメッセージ情報のアドレス0x0040030020の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ9において、トップビット、状態、保持ノード情報はそれぞれ1、M、0x005に更新されており、その値が読み出される。キューから読み出したメッセージの種類がBlkRdShであり、読み出した状態がM、保持ノード情報が0x005でアンキャッシュドではないこと、保持ノード情報が0x005で当該ノード番号0x001とことなることから、処理タイプはCA、次状態はRSP、保持ノード操作はnone、出力するメッセージの種類はIntvSh、出力先はリモートバッファと決定する(図13参照)。また、コンフリクトキューから読み出したメッセージの処理であり、処理タイプがCDでないことから、トップビットは「0」に更新し、また、コンフリクトキューの先頭エントリの削除を行うことが決定する(図15参照)(ステップS141)。
【0310】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はRSP、保持ノード情報を0x005に更新する。また、処理しているメッセージがデータ付きではないので主メモリ30への書き込みは行わない。コンフリクトキューの先頭エントリの削除は行い、読み出したBlkRdShメッセージのエントリを削除する。これにより、コンフリクトキューにはフェーズ8で書き込まれたUpgradeメッセージのみが存在する(ステップS142)。
【0311】
処理タイプがCAであるので(ステップS144)、メッセージ生成情報を生成しリモートバッファ34に出力する。メッセージ生成情報は、メッセージの種類をIntvSh、アドレスを0x0040030020、midを「0」、要求元ノード番号を0x080、保持ノード情報を0x005とする(ステップS143)。
【0312】
さらにコンフリクトキューから情報を読み出す必要があるかどうかを検査する(ステップS148)。図16より、ステップS149でコンフリクトキューから読み出したメッセージの処理であり、キューが空でなく、処理タイプがCAであることから、コンフリクトキューからの読み出しを行う。
【0313】
この時、フェーズ8において書き込まれたUpgradeメッセージの情報(メッセージの種類はUpgrade、アドレスは0x0040030010、要求元ノード番号は0x002、midは「1」)が読み出される(ステップS149)。以上で、ホームアクセス制御部27は、コンフリクトキューから読み出したBlkRdShメッセージの処理を終了し、さらにコンフリクトキューから読み出したUpgradeメッセージの処理を開始する。
【0314】
ホームアクセス制御部27がステップS144でリモートバッファ34に出力したIntvShメッセージ生成情報については次のフェーズ11で説明する。ここでは、コンフリクトキューから読み出したUpgradeメッセージの処理について説明する。前記Upgradeメッセージ生成情報を読み出したホームアクセス制御部27は、次のように動作する。
【0315】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030010の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。同フェーズ10において、トップビット、状態、保持ノード情報はそれぞれ0、RSP、0x005に更新されており、その値が読み出される。処理しているメッセージの種類がUpgradeであり、読み出した状態がRSPであることから、処理タイプはCE、次状態はRSP、保持ノード操作はnoneに決定する(図13参照)。また、コンフリクトキューから読み出したメッセージの処理であり、処理タイプがCDであることから、トップビットは「1」に更新し、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0316】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「1」、状態はRSP、保持ノード情報は0x005に更新する。また、処理しているメッセージがデータ付きではないので主メモリ30への書き込みは行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0317】
処理タイプがCDであり(ステップS143)、ステップS149でキューから読み出したメッセージの処理なので、コンフリクトキューにメッセージ情報を書き込まず(ステップS147)、さらにコンフリクトキューからメッセージ情報を読み出すかどうかを検査する(ステップS148)。
【0318】
図16より、コンフリクトキューから読み出したメッセージの処理であり、キューが空でなく、処理タイプがCDであることから、ステップS149でコンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、コンフリクトキューから読み出したUpgradeメッセージの処理を終了する。
【0319】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE5のキャッシュメモリ21にのみ存在する状態である。
【0320】
(フェーズ11)
フェーズ10において、ノードPE1のホームアクセス制御部27はコンフリクトキューから読み出したBlkRdShメッセージを処理した。その処理において、リモートバッファ34にIntvShメッセージ生成情報を出力している。ここでは、このIntvShメッセージ生成情報について説明する。
【0321】
前記IntvShメッセージ生成情報(種類はIntvSh、アドレスは0x0040030020、midは「0」、要求元ノード番号は0x080、保持ノード情報は0x005)を受け取ったリモートバッファ34は、宛先ノード番号を0x005、メッセージの種類をIntvSh、アドレスを0x0040030020、midを「0」、要求元ノード番号を0x080とするメッセージを生成し、メッセージ送信部35に出力する。
【0322】
このIntvShメッセージはノードPE1のメッセージ送信部35、相互結合網、ノードPE5のメッセージ受信部36、ノードPE5のリクエストバッファ33を介して、ノードPE5のローカルアクセス制御部25に出力される。
【0323】
IntvShメッセージ(宛先ノード番号は0x005、メッセージの種類はIntvSh、アドレスは0x0040030020、midは「0」、要求元ノード番号は0x080)を受けたローカルアクセス制御部25は、タグメモリ22の0x0600番地のデータを読み出す。フェーズ9において、状態及びタグアドレスはそれぞれD及び0x00400に更新されており、この値が読み出される。受けたメッセージがIntvShであり、タグアドレスが一致し、状態がDであることから、処理タイプはBB、出力するメッセージの種類はAckData、次状態はSに決定する(ステップS121)。
【0324】
処理タイプがBBであることから(ステップS122)、キャッシュメモリ21の0x06000番地から0x0600f番地までの64ビット×16エントリ=128バイトのブロックデータを読み出し、生成するAckDataメッセージに付加する。生成するAckDataメッセージの、宛先ノード番号は0x001、メッセージの種類はAckData、アドレスは0x0040030020、要求元ノード番号は0x080、midは「0」、ブロックデータはキャッシュメモリ21から読み出したデータとなる。宛先ノード番号0x001と当該ノード番号0x005が一致しないことから出力先はメッセージ送信部35となる(ステップS124)。
【0325】
タグメモリの0x0600番地の状態およびタグアドレスを、それぞれS(図9参照)および0x00400(タグメモリ22から読み出したタグアドレス)に更新する。また、リクエスト管理テーブル37へ、受けたメッセージのアドレス(0x0040030000)を出力する。リクエスト管理テーブル37では、各エントリのアドレスと、ローカルアクセス制御部25が出力するアドレスの、第39ビット〜第7ビットが一致するかどうかを検査し、一致するエントリのチェックビットを「1」に更新する(ステップS125)。以上でローカルアクセス制御部25は、IntvShメッセージの処理を終了する。
【0326】
AckDataメッセージは、ノードPE5のメッセージ送信部、相互結合網10、ノードPE1のメッセージ受信部を介して、ノードPE1のホームアクセス制御部に出力される。
【0327】
AckDataメッセージ(宛先ノード番号は0x001、メッセージの種類はAckData、アドレスは0x0040030020、midは「0」、要求元ノード番号は0x080、ブロックデータは最新のデータ)を受けたホームアクセス制御部27は、次のように動作する。
【0328】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030020の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はそれぞれフェーズ10で1、RSP、0x005に更新されており、その値が読み出される。受けたメッセージの種類がAckDataであり、読み出した状態がRSP、要求元ノード番号0x080と当該ノード番号0x001が一致しないことから、処理タイプはCA、次状態はC、保持ノード操作はadd、出力するメッセージの種類はCmpDatSh、出力先はリモートバッファ34に決定する(図14参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空でないことから、トップビットは読み出した値「1」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0329】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「1」、状態はC、保持ノード情報は0x003に更新する。また、処理しているメッセージがブロックデータ付きのAckDataメッセージであることから主メモリ30の0x0006000番地から0x000600f番地に、付加されていたブロックデータを書き込む。これにより、主メモリ30に最新のデータが存在する状態となる。また、コンフリクトキューの先頭エントリの削除は行わない(ステップS142)。
【0330】
処理タイプがCAであることから(ステップS143)、CmpDatShメッセージ生成情報を生成しリモートバッファ34に出力する。このメッセージ生成情報は、メッセージの種類をCmpDatSh、アドレスを0x0040030020、midを「0」、要求元ノード番号を0x080、保持ノード情報を0x005とする(ステップS144)。
【0331】
メッセージ生成情報の出力を終えると、コンフリクトキューからの読み出が必要かどうかを検査する(ステップS148)。図16より、ステップS149でコンフリクトキューから読み出したメッセージの処理でなく、処理したメッセージの種類がAckDataであり、処理タイプがCAであり、ステップS141で読み出したトップビットの値が「1」であることから、コンフリクトキューからの読み出しを行う。読み出されるメッセージはフェーズ8でコンフリクトキューに書き込まれた、Upgradeメッセージ(メッセージの種類はUpgrade、アドレスは0x0040030010、要求元ノード番号は0x002、midは「1」)である(ステップS149)。以上で、ホームアクセス制御部27は、AckDataメッセージの処理を終了し、コンフリクトキューから読み出したUpgradeメッセージの処理を開始する。
【0332】
ホームアクセス制御部27がステップS149で読み出したUpgradeメッセージの処理の説明は次のフェーズ12で行う。ここでは、ステップS144でリモートバッファ34に出力されたCmpDatShメッセージ生成情報について説明する。
【0333】
CmpDatShメッセージ生成情報(メッセージの種類はCmpDatSh、アドレスは0x0040030020、midは「0」、要求元ノード番号は0x080、保持ノード情報は0x005)を受けたリモートバッファ34は、主メモリ30の0x0006000番地から0x000600f番地までの128バイトのデータを読み出し、宛先ノード番号を0x080、メッセージの種類をCmpDatSh、アドレスを0x0040030020、midを「0」、要求元ノード番号を0x080、ブロックデータを主メモリ30から読み出したブロックデータとするメッセージを生成し、メッセージ送信部35へ出力する。このブロックデータは最新のデータである。
【0334】
このCmpDatShメッセージは、ノードPE1のメッセージ送信部35、相互結合網10、ノードPE80のメッセージ受信部36、ノードPE80のリプライバッファ32を介して、ノードPE80のローカルバッファ25に出力される。
【0335】
前記CmpDatShメッセージ(宛先ノード番号は0x080、メッセージの種類はCmpDatSh、アドレスは0x0040030020、midは「0」、要求元ノード番号は0x080、ブロックデータは最新のデータ)を受けたローカルアクセス制御部25は、リクエスト管理テーブル37の0(=mid)番エントリの情報を読みだし、アクセスの種類はロード、アドレスは0x0040030020、チェックビットは「0」という情報を得る(ステップS131)。
【0336】
ブロックデータ付きのメッセージであるから(ステップS132)、キャッシュメモリ21の0x06000番地から0x0600f番地に、メッセージに付加されていたブロックデータを書き込む(ステップS135)。
【0337】
そして、アクセスタイプがロードであることから(ステップS136)、キャッシュメモリ21から0x06004番地の64ビットデータを読み出し、プロセッサ20に対してid=0のメモリアクセスに対する応答データとして渡す。また、リクエスト管理テーブルの0番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリの0x0600番地の状態およびタグアドレスを、それぞれS(図11参照)および0x00400(リクエスト管理テーブル37に付加されていたアドレス0x0040030020の第39ビット〜第20ビットまでの20ビット)に更新する(ステップS138)。以上でローカルアクセス制御部25は、CmpDatShメッセージの処理を終了する。
【0338】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE5のキャッシュメモリ21、ノードPE1の主メモリ30、ノードPE80のキャッシュメモリ21に存在する状態になる。
【0339】
(フェーズ12)
フェーズ11において、ノードPE1のホームアクセス制御部27はAckDataメッセージを処理した。その処理(ステップS148)において、コンフリクトキューからのメッセージ情報の読み出しが必要と判断し(ステップS149)、主メモリ30をアクセスし、Upgradeメッセージ(メッセージの種類はUpgrade、アドレスは0x0040030010、要求元ノード番号は0x002、midは「1」)を読み出した。ここでは、このUpgradeメッセージを読み出した後のホームアクセス制御部27の動作を説明する。
【0340】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030010の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ11において、トップビット、状態、保持ノード情報はそれぞれ1、C、0x003に更新されており、その値が読み出される。受けたメッセージの種類がUpgradeであり、読み出した状態がCであり、保持ノード情報が0x003でアンキャッシュドではないことことから、処理タイプはCA、次状態はUP、保持ノード操作はcount、出力するメッセージの種類はInv、出力先はリモートバッファ34に決定する(図13参照)。また、コンフリクトキューから読み出したメッセージの処理であり、処理タイプがCDでないことから、トップビットは「0」に更新し、また、コンフリクトキューの先頭エントリの削除を行うことが決定する(図15参照)(ステップS141)。
【0341】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はUP、保持ノード情報は0x0ffに更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ30への書き込みは行わない。また、コンフリクトキューの先頭エントリの削除は行い、読み出したUpgradeメッセージのエントリを削除する。これにより、コンフリクトキューは空となる(ステップS142)。
【0342】
処理タイプがCAであるので(ステップS143)、メッセージ生成情報を生成しリモートバッファ34に出力する。メッセージ生成情報は、メッセージの種類をInv、アドレスを0x0040030010、midを「1」、要求元ノード番号を0x002、保持ノード情報を0x003とする(ステップS144)。
【0343】
さらにコンフリクトキューから情報を読み出す必要があるかどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理であり、コンフリクトキューが空であることから、ステップS149でコンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、コンフリクトキューから読み出したUpgradeメッセージの処理を終了する。
【0344】
前記Invメッセージ生成情報(種類はInv、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002、保持ノード情報は0x003)を受け取ったリモートバッファ34は、メッセージの種類をInv、アドレスを0x0040030010、midを「1」、要求元ノード番号を0x002とし、宛先ノード番号が0x000〜0x0ffの内0x002を除いたものとする255個のメッセージを順次生成しメッセージ送信部35に出力する。
【0345】
これらのInvメッセージはノードPE1のメッセージ送信部35、相互結合網、各ノードPE0〜PE255(PE2除く)のメッセージ受信部36、リクエストバッファ33を介してローカルアクセス制御部25に出力される。
【0346】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE5のキャッシュメモリ21、ノードPE1の主メモリ30、ノードPE80のキャッシュメモリ21に存在する状態である
【0347】
(フェーズ13)
前記Invメッセージを受けた各ノードPEi(i=0、1、3、・・・、255)のローカルアクセス制御部25は次のように動作する。
【0348】
Invメッセージ(宛先ノード番号は受けたノードの番号、メッセージの種類はInv、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002)を受けたローカルアクセス制御部25は、タグメモリ22の0x0600番地のデータを読み出す。読み出したタグアドレスが0x00400と一致するかどうか、また状態がなにであるかによって、処理タイプ、出力するメッセージの種類、タグメモリ22の次状態が決定する(図9参照)(ステップS121)。
【0349】
この場合必ず処理タイプがBAとなり(ステップS122)、Ackメッセージの生成が行われる。このAckメッセージは、宛先ノード番号を0x001、メッセージの種類をAck、アドレスを0x00400300010、midを「1」、要求元ノード番号を0x002とする。出力先は宛先ノード番号0x001と当該ノード番号の比較結果によって決定する。ノードPE1であれば、一致するのでホームアクセス制御部27に出力する。他のノードであれば、一致しないのでメッセージ送信部35に出力する(ステップS123)。
【0350】
タグメモリの更新を行う。更新するエントリは先ほど読み出を行った0x0600番地のエントリであり、状態は図9から求まる次状態に更新され、タグアドレスは先ほどタグメモリ22から読み出した値がそのまま書き込まれる。また、リクエスト管理テーブル37へ、受けたメッセージのアドレス(0x0040030008)を出力する。リクエスト管理テーブル37では、各エントリのアドレスと、ローカルアクセス制御部25が出力するアドレスの、第39ビット〜第7ビットが一致するかどうかを検査し、一致するエントリのチェックビットを「1」に更新する(ステップS125)。以上でローカルアクセス制御部25は、IntvShメッセージの処理を終了する。
【0351】
ノードPE0、ノードPE3〜ノードPE255は、それぞれAckメッセージ(宛先ノードは0x001、種類はAck、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002)をノードPE1に対して送信する。このAckメッセージは、各ノードのメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られてくる。
【0352】
一方、ノードPE1では、ローカルアクセス制御部25から、Ackメッセージ(宛先ノードは0x001、種類はAck、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002)がホームアクセス制御部27に出力される。ノードPE1のホームアクセス制御部27は、合計255個の同じAckメッセージを受け取り処理することになる。最初のAckメッセージをノードPE1のホームアクセス制御部27が受けた場合、次のように動作する。
【0353】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030010の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はそれぞれフェーズ12で0、UP、0x0ffに更新されており、その値が読み出される。受けたメッセージの種類がAckであり、読み出した状態がUP、また保持ノード情報が0x0ffでありアンキャッシュドでないことから、処理タイプはCE、次状態はUP、保持ノード操作はdec、出力するメッセージはなしに決定する(図14参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDでないことから、トップビットは読み出した値「0」のままとし、また、コンフリクトキューの先頭エントリの削除は行わないことが決定する(図15参照)(ステップS141)。
【0354】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はUP、保持ノード情報は0x0feに更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから、主メモリ30への書き込みは行なわない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0355】
処理タイプがCEであることから(ステップS143)、コンフリクトキューからの読み出が必要かどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、処理したメッセージがAckであり、処理タイプがCEであることから、ステップS149でコンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、Ackメッセージの処理を終了する。
【0356】
ホームアクセス制御部27は、各ノードPEiからのAckメッセージを、前記同様に処理していき、ディレクトリメモリ31の値を読み出し保持ノード情報を「1」引いた値に更新する処理が行われていく。この処理は、読み出した保持ノード情報から「1」引いた値が0x000でない場合、即ちアンキャッシュドでない場合まで継続される。ただし、アンキャッシュドになる場合、即ち最後の255個目のAckメッセージを受けたときは、次のように動作する。最後の255個目のメッセージを受けたホームアクセス制御部27は次のように動作する。
【0357】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030010の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はそれぞれ1、UP、0x001に更新されており、その値が読み出される。受けたメッセージの種類がAckであり、読み出した状態がUP、保持ノード情報が0x001でありアンキャッシュドであること、また要求元ノード番号0x002が当該ノードPE1のノード番号0x001と異なることから、処理タイプはCA、次状態はM、保持ノード操作はset、出力するメッセージの種類はCmp、出力先はリモートバッファ34に決定する(図14参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDでないことから、トップビットは読み出した値「0」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0358】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はM、保持ノード情報は0x002に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ30への書き込みは行なわない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0359】
処理タイプがCAであることから(ステップS143)、Cmpメッセージ生成情報を生成しリモートバッファ34に出力する。このCmpメッセージ生成情報は、メッセージの種類をCmp、アドレスを0x0040030010、midを「1」、要求元ノード番号を0x002、保持ノード情報を0x001とする(ステップS144)。
【0360】
コンフリクトキューからメッセージ情報を読み出す必要があるかどうかを検査する(ステップS148)。図16より、コンフリクトキューから読み出したメッセージの処理でなく、処理したメッセージがAckであり、処理タイプがCAであり、トップビットは「0」であることから、ステップS149でコンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、Ackメッセージの処理を終了する。
【0361】
前記Cmpメッセージ生成情報(メッセージの種類はCmp、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002、保持ノード情報は0x001)を受けたリモートバッファ34は、宛先ノード番号を0x002、メッセージの種類をCmp、アドレスを0x0040030010、midを「1」、要求元ノード番号を0x002とするメッセージを生成し、メッセージ送信部35へ出力する。
【0362】
このCmpメッセージは、ノードPE1のメッセージ送信部35、相互結合網10、ノードPE2のメッセージ受信部36、リプライバッファ32を介して、ローカルバッファ25に出力される。
【0363】
Cmpメッセージ(宛先ノード番号は0x002、メッセージの種類はCmp、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002を受けたローカルアクセス制御部25は、リクエスト管理テーブル37の1(=mid)番エントリの情報を読み出す。リクエスト管理テーブル37に登録されている値は、フェーズ8で設定され、フェーズ9でチェックビットが「1」に変更された値、即ちアクセスの種類はストア、アドレスは0x0040030010、チェックビットは「1」、及びストアデータである(ステップS131)。
【0364】
ブロックデータ付きのメッセージではないので(ステップS132)、チェックビットの値を調べる(ステップS133)。リクエスト管理テーブル37から得たチェックビットの値は「1」であるため、BlkRdExメッセージの生成出力が行われる。このBlkRdExメッセージは、宛先ノード番号を0x001(アドレス0x0040030010の第39ビット〜第30ビットまでの10ビット)、メッセージの種類をBlkRdEx、アドレスを0x0040030010、midを「1」、要求元ノード番号を0x002とするメッセージである(ステップS134)。以上で、ローカルアクセス制御部25は、Cmpメッセージの処理を終了する。
【0365】
BlkRdExメッセージに関する動作については次のフェーズ14で説明する。
【0366】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE1の主メモリ30にのみ存在する状態となる。前フェーズ12で最新のデータが存在したPE5のキャッシュメモリ21、ノードPE80のキャッシュメモリ21はInvメッセージにより無効化されている。
【0367】
(フェーズ14)
フェーズ13において、ノードPE2のローカルアクセス制御部25で生成されメッセージ送信部に出力されたBlkRdExメッセージ(宛先ノード番号は0x001、メッセージの種類はBlkRdEx、アドレスは0x0040030010、midは「1」、要求元ノード番号を0x002)は、相互結合網10、ノードPE1のメッセージ受信部35を介してノードPE1のホームアクセス制御部27に送られる。BlkRdExメッセージを受けたホームアクセス制御部27は次のように動作する。
【0368】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030010の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はフェーズ13でそれぞれ0、M、0x002に更新されており、その値が読み出される。受けたメッセージの種類がBlkRdExであり、読み出した状態がM、保持ノード情報が0x002でりアンキャッシュドであること、要求元ノード番号0x002と当該ノード番号0x001が一致しないことから、処理タイプはCA、次状態はM、保持ノード操作はset、出力するメッセージの種類はCmpDatEx、出力先はリプライバッファ32に決定する(図13参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDでないことから、トップビットは読み出した値「0」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0369】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はM、保持ノード情報は0x002に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ30への書き込みは行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0370】
処理タイプがCAであることから(ステップS143)、CmpDatExメッセージ生成情報を生成しリモートバッファ34に出力する。このメッセージ生成情報は、メッセージの種類をCmpDatEx、アドレスを0x0040030010、midを「1」、要求元ノード番号を0x002、保持ノード情報を0x002とする(ステップS144)。
【0371】
メッセージ生成情報の出力を終えると、コンフリクトキューからの読み出が必要かどうかを検査する(ステップS148)。図16より、ステップS149でコンフリクトキューから読み出したメッセージの処理でなく、処理したメッセージがBlkRdExであることから、コンフリクトキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、BlkRdExメッセージの処理を終了する。
【0372】
CmpDatExメッセージ生成情報(メッセージの種類はCmpDatEx、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002、保持ノード情報は0x002)を受けたリモートバッファ34は、主メモリ30の0x0006000番地から0x000600f番地までの128バイトのデータを読み出し、宛先ノード番号を0x002、メッセージの種類をCmpDatEx、アドレスを0x0040030010、midを「1」、要求元ノード番号を0x002、ブロックデータを主メモリ30から読み出したブロックデータとするメッセージを生成し、メッセージ送信部35へ出力する。このブロックデータは最新のデータである。
【0373】
このCmpDatExメッセージは、ノードPE1のメッセージ送信部35、相互結合網10、ノードPE2のメッセージ受信部36、ノードPE2のリプライバッファ32を介して、ノードPE2のローカルバッファ25に出力される。
【0374】
前記CmpDatExメッセージ(宛先ノード番号は0x002、メッセージの種類はCmpDatEx、アドレスは0x0040030010、midは「1」、要求元ノード番号は0x002、ブロックデータは最新のデータ)を受けたローカルアクセス制御部25は、リクエスト管理テーブル37の1(=mid)番エントリの情報を読みだし、アクセスの種類はストア、アドレスは0x0040030010、チェックビットは「1」という情報、およびストアデータを得る(ステップS131)。
【0375】
ブロックデータ付きのメッセージであるから(ステップS132)、キャッシュメモリ21の0x06000番地から0x0600f番地に、メッセージに付加されていたブロックデータを書き込む(ステップS135)。
【0376】
そして、アクセスタイプがストアであることから(ステップS136)、キャッシュメモリ21の0x06002番地のデータ64ビットを、リクエスト管理テーブル37から得たストアデータに更新する処理を行う。また、リクエスト管理テーブルの1(=mid)番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリ22の0x0600番地のデータを、状態はD(図11参照)、タグアドレスは0x00400(リクエスト管理テーブルから得たアドレス0x0040030010の第39ビット〜第20ビットの20ビット)に更新する。また、プロセッサへmidを出力し、id=1のメモリアクセスが完了した旨を通知する(ステップS137)。以上でローカルアクセス制御部25は、CmpDatExメッセージの処理を終了する。
【0377】
この段階で0x0040030000〜0x004003007f番地までについて、最新のデータはノードPE2のキャッシュメモリ22にのみ存在する。ノードPE1の主メモリ30のデータはノードPE2のキャッシュメモリ22にストアデータが書き込まれた時点で最新のデータではなくなる。
【0378】
この実施の形態のマルチプロセッサにおける、プロセッサ20が行うメモリアクセスから始まる、ノードPEi間でやり取りされるメッセージのシーケンスを、図17に示す。
【0379】
図17において、括弧で囲まれたメッセージは生成されない場合が存在することを表す。逆に、括弧で囲まれていないものは必ず生成されることを表している。また、矢印の分岐は、分岐先のメッセージのどれかが出力されることを表している。
【0380】
図17から明らかなように、ノードPEi間でやり取りされるメッセージのシーケンスにループは存在しない。
【0381】
従って、この実施の形態のマルチプロセッサシステムでは、プロセッサ20がメモリアクセスを行ってから、その結果を得るまでの処理が無限ループに陥ることがない。このため、この実施の形態のマルチプロセッサシステムでは、プロセッサ20がメモリアクセスに対する結果を有限時間内に得ることを保証することができる。
【0382】
この実施の形態のマルチプロセッサシステムにおける、メッセージの出力元モジュールと出力先モジュールの関係を図18に示す。
【0383】
ところで、出力先のモジュールがメッセージを受け付けられる状態にならないと、出力元のモジュールはメッセージを出力できず処理が停止してしまう。この依存関係にループができるとデッドロックが発生する可能性がある。
【0384】
この実施の形態のマルチプロセッサシステムにおいては、リプライバッファ32、リクエストバッファ33、リモートバッファ34が出力され得る全てのメッセージを受け取れるように構成されている。すなわち、リプライバッファ32は、受け取るべきメッセージの最大数分のエントリで構成される。リクエストバッファ33およびリモートバッファ34は、受け取るべきメッセージの最大数分のエントリからなる領域を主メモリ30に設け、その領域に一時的にメッセージを退避する手段を有する。
【0385】
これにより、デッドロックを考える場合、上記の3つのバッファ32、33、34を出力先モジュールから除くことができる。従って、この実施の形態におけるマルチプロセッサシステムでは、依存関係にループができず、デッドロックの発生を防ぐことができる。
【0386】
[第2の実施の形態]
この実施の形態にかかる疎結合型マルチプロセッサシステムの構成は、第1の実施の形態で示したもの(図1)と実質的に同一であるが、後述する一部の点において異なる。
【0387】
また、この実施の形態の疎結合型マルチプロセッサシステムにおいては、相互結合網10を介してノードPEi間でやり取りされるメッセージの種類及び構成と、ノードPEi(i=0〜1023)の構成が、第1の実施の形態のものと異なる。
【0388】
以下、この実施の形態の疎結合型マルチプロセッサシステムにおいて、相互結合網10を介してノードPEi間でやり取りされるメッセージについて、説明する。
【0389】
この実施の形態において、メッセージは、第1の実施の形態でも説明したBlkRdSh、BlkRdEx、Upgrade、BlkWr、Ack、AckData、IntvSh、IntvEx、Inv、CmpDatSh、CmpDatEx、Cmpの12種に、PrcDatEx、PrcAckを加えた14種類からなる。
【0390】
この実施の形態において、第1の実施の形態で説明したものに対応するメモリアクセス完了メッセージは、プロセッサ20に対する応答メッセージと処理完了メッセージに分離することができるものが含まれる。CmpDatSh、CmpDatExメッセージは、分離されていないメモリアクセス完了メッセージである。PrcDatExおよびPrcAckメッセージは、プロセッサ20に対する応答メッセージであり、Cmpメッセージは、処理完了メッセージである。BlkRdSh、BlkRdEx、Upgrade、BlkWr、Ack、AckData、IntvSh、IntvEx、Invについては、第1の実施の形態のものと同一である。
【0391】
この実施の形態においても、第1の実施の形態と同様に、メッセージは、基本メッセージとブロックデータ付きメッセージに分類される。BlkRdSh、BlkRdEx、Upgrade、Ack、IntvSh、IntvEx、Inv、Cmp、PrcAckの9種は、基本メッセージである。一方、BlkWr、AckData、CmpDatSh、CmpDatEx、PrcDatExの5種のメッセージは、ブロックデータ付きのメッセージである。
【0392】
基本メッセージは、図19(a)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(計14個なので4ビットで表現)、要求元ノード番号(10ビット)、mid(3ビット)、アドレス(40ビット)の計67ビットで構成される。
【0393】
ブロックデータ付きメッセージは、図19(b)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(4ビット)、要求元ノード番号(10ビット)、mid(3ビット)、アドレス(40ビット)、さらにブロックサイズのデータ(128バイト)の計67ビット+128バイトで構成される。
【0394】
メッセージの構成要素のmidは、第1の実施の形態では2ビットで構成されていたのに対して、この実施の形態では3ビットで構成される。また、この実施の形態では、第1の実施の形態のようにプロセッサ20がメモリアクセスに付加していたid(2ビット)をメッセージのmidに使用するのではなく、後述するローカルアクセス制御部25が各メモリアクセスを識別するmid(3ビット)を、idとは別に付加している。
【0395】
以下、この実施の形態の疎結合型マルチプロセッサシステムにおける各ノードPEiの構成について、説明する。
【0396】
図20は、この実施の形態におけるノードPEiの機能構成を示すブロック図である。図20に示すノードPEiは、図2に示した第1の実施の形態のものとほぼ同様であるため、以下では、図20に示すノードPEiについて、第1の実施の形態のものと異なる部分について、説明する。
【0397】
プロセッサ20は、メモリブロック命令を持っている。メモリブロック命令は、以前に発行したメモリアクセスでまだ完了していないメモリアクセスが存在するか、或いはシステム完了信号(リクエスト管理テーブル37が出力)が「0」の場合には、プロセッサ20がメモリブロック命令以降のメモリアクセスを実行しないようにするものである。
【0398】
メッセージ受信部36は、第1の実施の形態のものとほぼ同じである。ただし、この実施の形態のメッセージ受信部36には、PrcAckおよびPrcDatExメッセージを受けたとき、これらのメッセージをリプライバッファ32に出力する機能が追加されている。
【0399】
リクエスト管理テーブル37は、何エントリによって構成されていても構わない。以後の説明においては、リクエスト管理テーブル37が、8エントリで構成されている場合を示す。なお、メッセージに付加されているmid(3ビット)は、リクエスト管理テーブル37が8エントリであることに対応している。従って、リクエスト管理テーブル37のエントリ数が異なれば、midのビット数も異なるものとなる。
【0400】
リクエスト管理テーブル37の各エントリは、Prcビット(1ビット)、Sysカウンタ(2ビット)、アクセスの種類(1ビット)、アドレス(40ビット)、id(2ビット)、データ(64ビット)、チェックビット(1ビット)の計111ビットからなる。
【0401】
リクエスト管理テーブル37は、次のような機能を有する。
1)空いているエントリの番号(3ビット)をローカルアクセス制御部25に出力し、またローカルアクセス制御部25の指示に従い、その空いているエントリに前記設定データ(前記111ビット)の値を書き込む機能。
ここで、エントリが空いているエントリとは、PrcビットおよびSysカウンタが両方とも「0」のエントリである。
【0402】
2)ローカルアクセス制御部25が指定するエントリの内容をローカルアクセス制御部25に対して出力する機能。
【0403】
3)ローカルアクセス制御部25の指示に従い、ローカルアクセス制御部25が指定するエントリのPrcビットを「0」に更新し、Sysカウンタの2ビットをローカルアクセス制御部25が指定する値に設定する機能。
【0404】
4)ローカルバッファ38が出力するアドレス信号(40ビット)とエントリの設定データ中のアドレス(40ビット)とが第19ビットから第7ビットの13ビットで一致し、かつPrcビットあるいはSysカウンタのどちらか一方でも「0」でないエントリが存在する(同一キャッシュブロックに対するメモリアクセスが存在する)場合、あるいは全エントリともPrcビットあるいはSysビットのどちらか一方でも「0」でない(全エントリが使用中)の場合、ペンディング信号を「1」にして出力する機能。
【0405】
5)ローカルアクセス制御部25の指示に従い、ローカルアクセス制御部25が出力するアドレス(40ビット)とエントリのアドレス部(40ビット)とが第39ビットから第7ビットまでの上位33ビットで一致する場合、該当するエントリのチェックビットを「1」に設定する機能。
【0406】
6)全エントリのPrcビットおよびSysカウンタが「0」の場合に、システム完了信号を「1」にして、プロセッサ20に対して出力する機能。
【0407】
リプライバッファ32は、20エントリのバッファによって構成される。リプライバッファ32は、4個のメモリアクセス完了メッセージあるいはプロセッサ20に対する応答メッセージ(PrcAck、PrcDatEx、CmpDatSh、CmpDatExメッセージ)、および16個の処理完了メッセージ(Cmpメッセージ)を受け取り保持することができる。リプライバッファ32の4エントリは、ブロックデータ付きのメッセージ(67ビット+128バイト)を保持することができ、残りの16エントリは、基本メッセージ(67ビット)を保持することができる。
【0408】
リクエストバッファ33の構成は、第1の実施の形態のものとほぼ同じである。ただし、リクエストバッファ33が管理する主メモリ30のリクエスト退避キューのエントリ数は、リクエスト管理テーブルのエントリ数8にノード数1024を掛け合わせた8192となる。リクエストバッファ33の各エントリは、基本メッセージ(67ビット)を保持することができる。
【0409】
リモートバッファ34の構成は、第1の実施の形態のものとほぼ同じである。ただし、リモートバッファ34が管理する主メモリ30のリクエスト退避キューのエントリ数は、リクエスト管理テーブルのエントリ数8にノード数1024および2を掛け合わせた16384となる。リモートバッファ34の各エントリは、ホームアクセス制御部27が出力するメッセージ生成情報、メッセージの種類(4ビット)、アドレス(40ビット)、要求元ノード番号(10ビット)、mid(3ビット)およびディレクトリメモリ31に保持されていた保持ノード情報(10ビット)、の計67ビットを保持することができる。
【0410】
リモートバッファ34は、この実施の形態においては、第1の実施の形態で説明した機能に加えて、メッセージ生成情報からPrcDatExおよびPrcAckの2種のメッセージを生成する機能を有している。
【0411】
生成すべきメッセージ情報がPrcDatExの場合、CmpDatSh、CmpDatEx同様、不足している情報は宛先ノード番号およびブロックデータである。この場合、宛先ノード番号には要求元ノード番号がそのまま用いられる。ブロックデータには、主メモリ30から読み出したメッセージ生成情報に付加されているアドレスで指定されるブロックデータを用いる。このとき生成されるメッセージは、このメッセージ一つのみである。
【0412】
生成すべきメッセージ情報がPrcAckの場合、Cmp同様、不足している情報は宛先ノード番号のみである。この場合、宛先ノード番号には、要求元ノード番号が使用される。このとき生成されるメッセージはこのメッセージ一つのみである。
【0413】
ローカルアクセス制御部25と、ホームアクセス制御部27とは、それぞれ第1の実施の形態のものとほぼ同様の機能を有するが、後述する一部の点でその機能及び動作が異なる。ローカルアクセス制御部25とホームアクセス制御部27において、第1の実施の形態と異なる部分については、さらに詳しく後述する。
【0414】
以下、この実施の形態におけるローカルアクセス制御部25の動作について、説明する。
【0415】
なお、以下の説明においても、第1の実施の形態の場合と同様に、ローカルアクセス制御部25が、キャッシュメモリ21或いはタグメモリ22にアクセスするときは、実際にはキャッシュメモリアクセス制御部23或いはタグメモリアクセス制御部24の機能が用いられる。
【0416】
ローカルアクセス制御部25が、メモリアクセスを受け付けて行う処理の流れは、第1の実施の形態におけるものとほぼ同じであり、図6に示すフローチャート及び図7に示すテーブルに従う。ただし、この実施の形態においては、図6のステップS113、ステップS115におけるリクエスト管理テーブル37への登録の処理、およびステップS113、ステップS114、ステップS115におけるメッセージの生成の処理が、第1の実施の形態のものと異なる。
【0417】
ステップS113におけるリクエスト管理テーブル37への登録では、設定するデータおよび登録するエントリ番号が、第1の実施の形態のものと異なる。リクエスト管理テーブル37に登録するデータは、Prcビットは「1」、Sysカウンタは「1」、チェックビットは「0」、アクセスの種類とアドレスとidとデータはメモリアクセスに付加されていたものとなる。また、リクエスト管理テーブル37に登録するエントリは、リクエスト管理テーブル37が出力している空きエントリの番号(3ビット)となる。
【0418】
ステップS113、ステップS114、ステップS115におけるメッセージの生成の処理では、各メッセージに付加されるmid(3ビット)として、リクエスト管理テーブル37が出力する空きエントリの番号(3ビット)が用いられる。
【0419】
以下、ローカルアクセス制御部25が、リプライバッファ32が出力するメッセージを受け付けて行う処理のうちの第1の実施の形態と異なる点について、図21、図22を参照して説明する。
【0420】
この実施の形態では、第1の実施の形態での処理(図10)に、ステップS211およびステップS212が加わっている。第1の実施の形態におけるステップS134(図10参照)が、ステップS213に変更され、リクエスト管理テーブル37の操作が付け加わっている。また、ステップS212、ステップS213、ステップS137、ステップS138の処理で操作されるリクエスト管理テーブル37が、図22に示すように変更されている。また、この実施の形態のローカルアクセス制御部25は、さらにPrcAckおよびPrcDatExの新たに加わった両メッセージを処理できるようになっている。
【0421】
リプライバッファ32から出力されるメッセージの種類は、CmpDatSh、CmpDatEx、Cmp、PrcDatEx、PrcAckの5種類にかぎられる。
【0422】
ローカルアクセス制御部25は、リプライバッファ32よりメッセージを受け取ると(ステップS131)、メッセージに含まれるmid(3ビット)をリクエスト管理テーブル37に出力し、Sysカウンタ、アクセスの種類、アドレス、データ(64ビット)、id(2ビット)、チェックビットの情報を得る。
【0423】
ステップS211では、ローカルアクセス制御部25は、受けたメッセージがCmpメッセージであるかどうかを検査する。ステップS211での検査結果により受けたメッセージがCmpメッセージである場合は、ステップS212に進む。そうでない場合ステップS132に進む。
【0424】
ステップS212では、ローカルアクセス制御部25は、ステップS131で読み出したSysカウンタの値から「1」引いた(dec操作)値に、メッセージに付加されていたmidで指定されるリクエスト管理テーブル37のエントリのSysカウンタの値を更新する。ステップS212の処理が終了すると、受けたメッセージに関する処理を終了する。
【0425】
ステップS132では、ローカルアクセス制御部25は、受けたメッセージがデータ付きメッセージかどうか、即ちCmpDatSh、CmpDatExあるいはPrcDatExであるか、データ付きでないPrcAckメッセージであるかを検査する。
【0426】
ステップS132での検査の結果、ローカルアクセス制御部25が受けたメッセージがデータ付きメッセージでない場合は、ステップS133に進む。ローカルアクセス制御部25が受けたメッセージがデータ付きメッセージでない場合は、ステップS135に進む。
【0427】
ステップS133では、ローカルアクセス制御部25は、リクエスト管理テーブル37から得られたチェックビットの値を検査する。ステップS133での検査の結果、チェックビットの値が「1」であった場合には、ステップS213に進む。ステップS133での検査の結果、チェックビットの値が「0」であった場合には、ステップS137に進む。
【0428】
ステップS213では、ローカルアクセス制御部25は、BlkRdExメッセージを生成し、出力する。この時、要求ノード番号にはリクエスト管理テーブル37から得たアドレスの第39ビットから第30ビットの上位10ビットが、要求元ノード番号には当該ノードPEiのノード番号が、midには受けたメッセージのmidが、アドレスにはリクエスト管理テーブル37から得たアドレスがそれぞれ用いられる。
【0429】
ローカルアクセス制御部25は、生成したメッセージの出力先をメッセージ送信部35とホームアクセス制御部27とのいずれにするかは、ステップS113の場合と同じく宛先ノード番号と当該ノードPEiのノード番号との比較結果によって決定する。ローカルアクセス制御部25は、また、ステップS131で読み出したSysカウンタの値に「1」足した(inc操作)値に、メッセージに付加されていたmidで指定されるリクエスト管理テーブル37のエントリのSysカウンタの値を、更新する。ステップS213の処理が終了すると、受けたメッセージに関する処理を終了する。
【0430】
ステップS135では、ローカルアクセス制御部25は、メッセージについていたブロックデータ(128バイト)を、キャッシュメモリ21の該当するブロックに書き込む。このブロックデータが書き込まれるエントリは、リクエスト管理テーブル37から得られるアドレスの第19ビットから第7ビットまでの13ビットに0x0から0xfまで変化する4ビットを下位に付加した17ビットのインデックス信号で指定される合計16エントリ(128バイト)である。ステップS135の処理が終了すると、ステップS136に進む。
【0431】
ステップS136では、ローカルアクセス制御部25は、リクエスト管理テーブル37から得られるアクセスの種類を検査する。ステップS136での検査の結果、アクセスの種類がストアであった場合には、ステップS137に進む。ステップS136での検査の結果、アクセスの種類がロードであった場合には、ステップS138に進む。
【0432】
ステップS137では、ローカルアクセス制御部25は、リクエスト管理テーブル37から得られるデータ(64ビット)を、キャッシュメモリ21の該当するエントリに書き込む。ここで、データが書き込まれるエントリは、リクエスト管理テーブル37から得られるアドレスの第19ビットから第3ビットまでの17ビットで指定されるエントリ(64ビット)である。
【0433】
ローカルアクセス制御部25は、また、受けたメッセージのmidで指定されるリクエスト管理テーブル37中のエントリのPrcビットおよびSysカウンタの値を更新する、ここで、Prcビット及びSysカウンタの値をどのような値に更新するかは、図22に示すテーブルに従って求められる。
【0434】
ローカルアクセス制御部25は、さらにタグメモリ22の内容を更新する。更新されるエントリは、リクエスト管理テーブル37より得られるアドレスの第19ビットから第7ビットまでの13ビットで特定されるアドレスのものである。更新されるデータは、ブロックの状態およびタグアドレスである。
【0435】
ブロックの状態は、アクセスの種類(ここではストア)と受けたメッセージの種類によって、図22に示すテーブルに従って決められる。ここで、ブロックの状態には、タグアドレスはリクエスト管理テーブル37から読み出したアドレスの第39ビットから第20ビットまでの上位20ビットが用いられる。
【0436】
ローカルアクセス制御部25は、さらに、プロセッサ20への完了通知も行う。このとき、リクエスト管理テーブル37より得られるid(2ビット)をプロセッサ20へ出力し、どのメモリアクセスが完了したのかを通知する。ステップS137の処理が終了すると、受けたメッセージの処理は終了する。
【0437】
ステップS138では、ローカルアクセス制御部25は、キャッシュメモリ21からリクエスト管理テーブル37から得られたアドレスの第19ビットから第3ビットまでの17ビットで指定されるエントリの64ビットデータを読み出し、リクエスト管理テーブル37から得られるidとともにプロセッサ20へ渡す。
【0438】
ローカルアクセス制御部25は、さらにリクエスト管理テーブル37の内容とタグメモリ22の内容とを更新する。このリクエスト管理テーブル37の内容の更新の処理と、タグメモリ22の内容の更新の処理は、ステップS137におけるそれぞれの処理と同一である。ステップS138の処理が終了すると、受けたメッセージの処理は終了する。
【0439】
以下、この実施の形態におけるホームアクセス制御部27の動作について、説明する。
【0440】
なお、以下の説明においても、第1の実施の形態の場合と同様に、ホームアクセス制御部27が、主メモリ30或いはディレクトリメモリ31にアクセスするときは、実際には主メモリアクセス制御部28或いはディレクトリメモリアクセス制御部29の機能が用いられる。
【0441】
第1の実施の形態ではステップS143(図12参照)で分岐するための処理タイプがCA〜CEの5タイプであったものが、第2の実施の形態においては、図23に示すように、CF、CG、CHの3タイプが加わった8タイプに増加している。また、図24のテーブルに示すように、BlkRdExあるいはUpgradeメッセージを受けた場合の処理タイプや、次状態などが第1の実施の形態のもの(図14)と異なる。
【0442】
図23のフローチャートに示すように、ステップS143で処理タイプがCFであると判定されたときは、ステップS221に進む。ステップS143で処理タイプがCGであると判定されたときは、ステップS222に進む。ステップS143で処理タイプがCHであると判定されたときは、ステップS223に進む。
【0443】
ステップS221では、ホームアクセス制御部27は、ステップS144(図12)と同様に、メッセージ生成情報の生成およびリモートバッファ34への出力を行う。ただし、ここで、ホームアクセス制御部27から生成するメッセージの種類は、PrcDatExあるいはPrcAckに限られる。ステップS221の処理が終わると、ステップS224に進む。
【0444】
ステップS222では、ホームアクセス制御部27は、ステップS145(図12)と同様に、主メモリ30からブロックデータを読み出し、その読み出したブロックデータを付加したメッセージを生成し、リプライバッファ32に出力する。ここで、ホームアクセス制御部27が生成するメッセージの種類は、PrcDatExに限られる。ステップS222の処理が終わると、ステップS224に進む。
【0445】
ステップS223では、ホームアクセス制御部27は、ステップS146(図12)と同様に、メッセージを生成し、リプライバッファ32に出力する。ここで、ホームアクセス制御部27が生成するメッセージの種類は、PrcAckに限られる。ステップS223の処理が終わると、ステップS224に進む。
【0446】
ステップS224では、ホームアクセス制御部27は、ステップS144(図12)と同様に、メッセージ生成情報の生成及びリモートバッファ34への出力を行うここで、ホームアクセス情報が生成するメッセージ情報の種類はInvに限られる。ステップS224の処理が終わるとステップS148に進む。
【0447】
以降の処理については、第1の実施の形態におけるホームアクセス制御部27の処理と同一である。
【0448】
以下、この実施の形態におけるマルチプロセッサシステムの動作の具体例について、第1の実施の形態と異なる部分について、説明する。
【0449】
以降、ノードPE1で、ストアアクセスがid=1でアドレス0x0040030000に行われた場合の動作を説明する。
【0450】
ノードPE1のプロセッサ20がアドレス0x0040030000にid=1でストアアクセスを行ったとする。
【0451】
プロセッサ20が行ったメモリアクセスはローカルバッファ38に出力される。メモリアクセスを受けたローカルバッファ38は、リクエスト管理テーブル37にアドレス(40ビット)を出力し、同一キャッシュブロックに対するリクエストが存在するかどうか、また空いているエントリが存在するかどうかを検査する。
【0452】
リクエスト管理テーブル37は検査した結果をペンディング信号にして出力する(「1」の場合、同一キャッシュブロックに対するリクエストが存在する、あるいは空いているエントリが存在しないことを示す)。ローカルバッファ38は、ペンディング信号が「1」の場合ローカルリクエスト制御部25への出力を行わず、ペンディング信号が「0」になるのを待って、ローカルアクセス制御部25に出力する。
【0453】
前記メモリアクセス(アクセスの種類はストア、アドレスは0x0040030000、id=1)を受けたローカルアクセス制御部25は、まず、タグメモリ22の0x0600番地(ローカルバッファから得たアドレス0x0040030000の第19ビット〜第7ビットの13ビット)のデータを読み出す。読み出された状態がIであった場合、図7より処理タイプはAA、発行するメッセージはBlkRdEx、次状態はIに決定する(ステップS111)。
【0454】
処理タイプがAAであることから(ステップS113)、メッセージの生成出力およびリクエスト管理テーブル37への登録を行う。またこの時、リクエスト管理テーブル37からは空いているエントリとして0番が指定されているとする。生成出力するメッセージの、宛先ノード番号は0x001(アドレス0x0040030000の第39ビット〜第30ビットの10ビット)、メッセージの種類はBlkRdEx、アドレスは0x0040030000、midは「0」(リクエスト管理テーブルが出力している空きエントリの番号)、要求元ノード番号は0x001となる。また、宛先ノード番号と要求元ノード番号が両者とも0x001と一致するので、出力先は当該ノードPE1のホームアクセス制御部27となる。また、リクエスト管理テーブルの0番エントリに、Prcビットは「1」、Sysカウンタは「1」、チェックビットは「0」、アクセスの種類はストア、アドレスは0x0040030000、idは「1」、およびストアデータを書き込む(ステップS113)。
【0455】
タグメモリの0x0600番地のエントリのデータを、状態はIに、タグアドレスは0x00400(アドレス0x0040030000の第39ビット〜第20ビットの20ビット)に更新する(ステップS118)。以上で、ローカルアクセス制御部25は、ストアアクセスの処理を終了する。
【0456】
前記BlkRdExメッセージ(宛先ノード番号は0x001、メッセージの種類はBlkRdEx、アドレスは0x0040030000、midは「0」、要求元ノード番号は0x001)を受けたホームアクセス制御部27は次のように動作する。
【0457】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030000の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報が、それぞれ0、C、0x003であった場合の動作を説明する。受けたメッセージがBlkRdExであり、読み出した状態がC、保持ノード情報が0x003でありアンキャッシュドでなく、要求元ノード番号と当該ノード番号が一致することから、処理タイプはCG、次状態はUP、保持ノード操作はcount、出力するメッセージの種類はPrcDatExとInv、出力先はそれぞれリプライバッファ32とリモートバッファ34に決定する(図24参照)。また、コンフリクトキューが空とすると、コンフリクトキューから読み出したメッセージの処理でなく、処理タイプがCDでないことから、トップビットは読み出した値「0」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0458】
これらの情報を元に、ディレクトリメモリ31のデータを、トップビットは「0」、状態はUP、保持ノード情報は0xffに更新する。ここでは、データ付きのメッセージではないので主メモリへのブロックデータの書込を行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0459】
処理タイプがCGであることから(ステップS143)、主メモリ30の0x0006000番地〜0x000600f番地までの64ビット×16エントリ=128バイトのブロックデータを読み出し、生成するメッセージに付加しリプライバッファ32に出力する。このメッセージは、宛先ノード番号を0x001、メッセージの種類をPrcDatEx、アドレスを0x0040030000、midを「0」、要求元ノード番号を0x001、ブロックデータを当該ステップS222で読み出したブロックデータとするメッセージである(ステップS222)。
【0460】
メッセージの生成出力を終えると、Invメッセージの生成情報を生成し、リモートバッファ34へ出力する。生成するメッセージ生成情報は、メッセージの種類をInv、アドレスを0x0040030000、midを「0」、要求元ノード番号を0x001、保持ノード情報を0x003とする(ステップS224)。
【0461】
このInvメッセージ生成情報のリモートバッファ34への出力を終えると、コンフリクトキューからの読み出しが必要かどうかを検査する(ステップS148)。
【0462】
図16より、コンフリクトキューから読み出したメッセージの処理でなく、メッセージの種類はBlkRdExであるので、ステップS149でキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、BlkRdExメッセージの処理を終了する。
【0463】
PrcDatExメッセージを受け取たリプライバッファ32は、その情報をローカルアクセス制御部25へ出力する。
【0464】
前記PrcDatExメッセージ(宛先ノード番号は0x001、メッセージの種類はPrcDatEx、アドレスは0x0040030000、midは「0」、要求元ノード番号は0x001、ブロックデータ)を受けたローカルアクセス制御部25は、リクエスト管理テーブル37の0(=mid)番エントリの情報を読みだし、Sysカウンタは「1」、アクセスの種類はストア、アドレスは0x0040030000、チェックビットは「0」、idは「1」という情報を得る(ステップS131)。
【0465】
Cmpメッセージではなく(ステップS211)、ブロックデータ付きのメッセージであるから(ステップS132)、キャッシュメモリ21の0x06000番地から0x0600f番地に、メッセージに付加されていたブロックデータを書き込む(ステップS135)。
【0466】
そして、アクセスタイプがストアであることから(ステップS136)、キャッシュメモリ21の0x06000番地のデータ64ビットを、リクエスト管理テーブル37から得たストアデータに更新する処理を行う。また、リクエスト管理テーブルの0(=mid)番エントリのPrcビットを「0」に更新する。
【0467】
また、タグメモリ22の0x0600番地のデータを、状態はD、タグアドレスは0x00400(リクエスト管理テーブルから得たアドレス0x0040030008の第39ビット〜第20ビットの20ビット)に更新する。
【0468】
また、プロセッサへリクエスト管理テーブル37から得たidを出力し、id=1のメモリアクセスが完了した旨を通知する(ステップS137)。以上でローカルアクセス制御部25の処理は終わる。この時、リクエスト管理テーブル37の0番エントリのSysカウンタは「1」のままである。そのため、プロセッサ20に出力しているシステム完了信号は「0」のままとなる。
【0469】
この段階で、プロセッサ20にとって、id=1で行ったストアアクセスは完了しており、また、id=1で別のメモリアクセスを発行することが可能となる。
【0470】
リモートバッファ34に出力された前記Invメッセージ生成情報に関する処理は第1の実施の形態における動作と同じである。宛先ノード番号を0x000〜0x0ff(0x001除く)、メッセージの種類をInv、アドレスを0x0040030000、midを「0」、要求元ノード番号を0x001とする255個のメッセージが生成され、相互結合網10を介して各宛先ノードPEiのローカルアクセス制御部25に送られる。
【0471】
各ノードのローカルアクセス制御部25では、Invメッセージを処理し、Ackメッセージを生成する。このAckメッセージは宛先ノード番号を0x001、メッセージの種類をAck、アドレスを0x0040030000、midを「0」、要求元ノード番号を0x001とするメッセージである。
【0472】
これらのメッセージは相互結合網10を介してノードPE1のホームアクセス制御部27に送られてくる。これらAckメッセージを受け取ったホームアクセス制御部は順次処理していき、最後のメッセージを受け取ったときに、ディレクトリメモリ31のトップビットを「0」、状態をM、保持ノード情報を0x001に更新し、Cmpメッセージを生成してリプライバッファ34へ出力する。
【0473】
Cmpメッセージを受け取たリプライバッファ32はその情報をローカルアクセス制御部25へ出力する。
【0474】
前記Cmpメッセージ(宛先ノード番号は0x001、メッセージの種類はCmp、アドレスは0x0040030000、midは「0」、要求元ノード番号は0x001)を受けたローカルアクセス制御部25は、リクエスト管理テーブル37の0(=mid)番エントリの情報を読みだし、Sysカウンタは「1」、アクセスの種類はストア、アドレスは0x0040030000、チェックビットは「0」、idは「1」という情報を得る(ステップS131)。
【0475】
Cmpメッセージであるので、リクエスト管理テーブル37のmid=0番のエントリのSysカウンタの値を、読み出した値「1」から「1」引いた「0」に更新し(ステップS211)、処理を終了する。
【0476】
PrcDatExメッセージを受けたときにPrcビットが「0」に変更され、Cmpメッセージを受けたときにSysカウンタが「0」に更新される。両方のメッセージを受けて始めて当該エントリが空きエントリとなる。この時、他のエントリも全て空きエントリであればシステム完了信号が1となる。
【0477】
この実施の形態のマルチプロセッサにおける、プロセッサ20が行うメモリアクセスから始まる、ノードPEi間でやり取りされるメッセージのシーケンスを、図25に示す。
【0478】
図25において、括弧で囲まれたメッセージは生成されない場合が存在することを表す。逆に、括弧で囲まれていないものは必ず生成されることを表している。また、矢印の分岐は、分岐先のメッセージのどれかが出力されることを表している。
【0479】
図25から明らかなように、ノードPEi間でやり取りされるメッセージのシーケンスにループは存在しない。
【0480】
従って、この実施の形態のマルチプロセッサシステムでは、プロセッサ20がメモリアクセスを行ってから、その結果を得るまでの処理が無限ループに陥ることがない。このため、この実施の形態のマルチプロセッサシステムでは、プロセッサ20がメモリアクセスに対する結果を有限時間内に得ることを保証することができる。
【0481】
この実施の形態のマルチプロセッサシステムにおける、メッセージの出力元モジュールと出力先モジュールの関係は、第1の実施の形態と同様に、図18に示すものとなる。従って、この実施の形態におけるマルチプロセッサシステムでも、依存関係にループができず、デッドロックの発生を防ぐことができる。
【0482】
[第3の実施の形態]
この実施の形態にかかる疎結合型マルチプロセッサシステムの構成は、第1の実施の形態で示したもの(図1)と実質的に同一であるが、後述する一部の点において異なる。
【0483】
また、この実施の形態の疎結合型マルチプロセッサシステムにおいては、相互結合網10を介してノードPEi間でやり取りされるメッセージの種類及び構成と、ノードPEi(i=0〜1023)の構成が、第1の実施の形態のものと異なる。
【0484】
以下、この実施の形態の疎結合型マルチプロセッサシステムにおいて、相互結合網10を介してノードPEi間でやり取りされるメッセージについて、説明する。
【0485】
この実施の形態において、メッセージは、第1の実施の形態でも説明したBlkRdSh、BlkRdEx、Upgrade、BlkWr、Ack、AckData、IntvSh、IntvEx、Inv、CmpDatSh、CmpDatEx、Cmpの12種に、AckX、InvX、CmpDatShR、CmpDatDyRの4種を加えた16種類のメッセージからなる。
【0486】
BlkRdSh、BlkRdEx、Upgrade、BlkWrの4種は、メモリアクセスが行われたノードPEiから、主メモリ30にデータを保持するノードPEiへ送信される要求メッセージである。IntvSh、IntvEx、Inv、InvXの4種は、主メモリ30にデータを保持するノードPEiから当該データのコピーをキャッシュメモリ21に保持するノードPEiへ送信される要求メッセージである。
【0487】
AckXは、データのコピーをキャッシュメモリ21に保持するノードPEiから主メモリ30にデータを保持するノードPEiへ送信される報告メッセージである。Ack、AckDataの2種は、メモリアクセスが行われたノードPEiから主メモリ30にデータを保持するノードPEiへ送信される報告メッセージである。
【0488】
CmpDatSh、CmpDatExの2種は、主メモリ30にデータを保持するノードPEiからメモリアクセスが行われたノードPEiへ送信されるメモリアクセス完了メッセージである。Cmp、CmpDatShR、CmpDatDyRの3種は、データのコピーをキャッシュメモリ21に保持するノードPEiからメモリアクセスが行われたノードPEiへ送信されるメモリアクセス完了メッセージである。
【0489】
この実施の形態において、メッセージは、基本メッセージとブロック付きデータメッセージに加えて、保持ノード数付きメッセージの3種類に分類される。BlkRdSh、BlkRdEx、Upgrade、Ack、IntvSh、IntvEx、InvX、AckXの8種のメッセージは、基本構成のメッセージである。BlkWr、AckData、CmpDatSh、CmpDatEx、CmpDatShR、CmpDatDyRの6種のメッセージは、ブロックデータ付きのメッセージである。最後に、Inv、Cmpの2種のメッセージは、保持ノード数付きのメッセージである。
【0490】
基本メッセージは、図26(a)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(計16個なので4ビットで表現)、要求元ノード番号(10ビット)、mid(2ビット)、アドレス(40ビット)の計66ビットで構成される。
【0491】
ブロックデータ付きメッセージは、図26(b)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(4ビット)、要求元ノード番号(10ビット)、id(2ビット)、アドレス(40ビット)に加えて、ブロックサイズのデータ(128バイト)の計66ビット+128バイトで構成される。
【0492】
保持ノード数付きメッセージは、図26(c)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(4ビット)、要求元ノード番号(10ビット)、id(2ビット)、アドレス(40ビット)に加えて、保持ノード数(10ビット)の計76ビットで構成される。
【0493】
以下、この実施の形態の疎結合型マルチプロセッサシステムにおける各ノードPEiの構成について、説明する。
【0494】
図27は、この実施の形態におけるノードPEiの機能構成を示すブロック図である。図27に示すノードPEiは、図2に示した第1の実施の形態のものとほぼ同様であるため、以下では、図27に示すノードPEiについて、第1の実施の形態のものと異なる部分について、説明する。
【0495】
メッセージ受信部36は、第1の実施の形態のものとほぼ同じである。ただし、この実施の形態のメッセージ受信部36には、InvX、AckX、Cmp、CmpDatShR、CmpDatDyRメッセージを受けたとき、次のように機能する。
【0496】
InvXメッセージを受け取ったときは、メッセージ受信部36は、そのメッセージをリクエストバッファ33に出力する。AckXメッセージを受け取ったときは、メッセージ受信部36は、そのメッセージをホームアクセス制御部27に出力する。CmpDatShRメッセージ或いはCmpDatDyRメッセージを受け取ったときは、メッセージ受信部36は、これらのメッセージをリプライバッファ32に出力する。
【0497】
Cmpメッセージの場合、メッセージ受信部は、後述するリクエスト管理テーブル37のエントリのうちのメッセージに付加されているmidで指定されるエントリの受信メッセージ数を読み出し、値が「0」の場合、メッセージに付加されている保持ノード数を設定し、「0」でない場合、読み出した値から「1」引いた値を設定する。メッセージ受信部36は、読み出した値が「1」の場合にのみCmpメッセージをリプライバッファ32へ出力し、それ以外の場合はCmpメッセージをリプライバッファ32には出力せず、処理を終了する。
【0498】
リプライバッファ32は、第1の実施の形態で説明したものに対応するCmp、CmpDatSh、CmpDatExに加え、CmpDatShR、CmpDatDyRの計5種のメッセージを受け取る。ここで、Cmpメッセージは、保持ノード数付きメッセージであり、CmpDatSh、CmpDatEx、CmpDatShR、CmpDatDyRの各メッセージは、ブロックデータ付きのメッセージである。
【0499】
リプライバッファ32は、4エントリで構成される。リプライバッファ32の各エントリは、ブロックデータ付きメッセージ(66ビット+128バイト)、あるいは保持ノード数付きメッセージ(76ビット)を保持することができる。
【0500】
リクエストバッファ33は、IntvSh、IntvEx、Invに加え、InvXの計5種のメッセージを受け取る。ここで、IntvSh、IntvEx、InvXは基本メッセージであり、Invは保持ノード数付きのメッセージである。リクエストバッファ33の各エントリ、および主メモリ30に設けたリクエスト退避キューの各エントリは、それぞれ保持ノード数付きのメッセージを受け取ることができるだけのサイズからなる。
【0501】
リモートバッファ34は、第1の実施の形態のものとほぼ同一であるが、InvXメッセージを生成する機能が加わる点と、第1の実施の形態におけるそれとInvメッセージの生成方法の点で、第1の実施の形態のものと異なる。以下、この実施の形態での、InvXメッセージ生成情報、あるいはInvメッセージ生成情報を受けた場合におけるリモートバッファ34によるメッセージの生成方法について、説明する。
【0502】
InvXメッセージ生成情報において、メッセージの生成のために不足している情報は、宛先ノード番号のみである。この場合、宛先ノード番号の異なる複数のメッセージが生成される。この宛先ノード番号は、保持ノード情報から生成される。この保持ノード情報はコースベクタ形式であり、この形式で表されている複数のノードPEi(要求元ノードを除く)に対して宛先の異なる同一のメッセージを生成し出力することとなる。
【0503】
例えば、保持ノード情報が“00110100”で要求元ノード番号が“0010010110”の場合、宛先ノードは、PE256〜PE383、PE512〜PE807となり、合計384ノードに対してInvXメッセージが送信される。また、例えば、保持ノード情報が“11001011”で要求元ノード番号が“0010010110”の場合、宛先ノードは、PE0〜PE149、PE151〜PE255、PE384〜PE511、PE808〜PE1023となり、合計679ノードに対してInvXメッセージが送信される。
【0504】
Invメッセージ生成情報で、不足している情報は、宛先ノード番号および保持ノード数である。この場合、InvXメッセージ同様、宛先ノード番号の異なる複数のメッセージが生成される。宛先ノード番号の生成方法は、InvXメッセージと同様である。保持ノード数は、メッセージ生成情報に付加されている保持ノード情報から求められる。これは、後述するディレクトリメモリ31に蓄えられた保持ノード情報に対するホームアクセス制御部27が行うcount操作と同じであり、受けた保持ノード情報の下位8ビットをコースベクタ形式として求められる。
【0505】
ローカルアクセス制御部25と、ホームアクセス制御部27とは、それぞれ第1の実施の形態のものとほぼ同様の機能を有するが、後述する一部の点でその機能及び動作が異なる。ローカルアクセス制御部25とホームアクセス制御部27において、第1の実施の形態と異なる部分については、さらに詳しく後述する。
【0506】
以下、この実施の形態におけるローカルアクセス制御部25の動作について、説明する。
【0507】
なお、以下の説明においても、第1の実施の形態の場合と同様に、ホームアクセス制御部27が、主メモリ30或いはディレクトリメモリ31にアクセスするときは、実際には主メモリアクセス制御部28或いはディレクトリメモリアクセス制御部29の機能が用いられる。
【0508】
ローカルアクセス制御部25が、リクエストバッファ33が出力するメッセージを受けた場合の処理の流れは、第1の実施の形態におけるもの(図8)と同じである。ただし、この実施の形態においては、処理タイプ、出力するメッセージの種類、次状態は、図28のテーブルに示すものとなる。
【0509】
また、ステップS123およびステップS124(図8)において、ローカルアクセス制御部25が生成するメッセージの宛先ノード番号が異なる。また、ローカルアクセス制御部25が、Cmpメッセージを生成する場合には、生成されるCmpメッセージに保持ノード数を付加する必要がある。Cmpメッセージに付加する保持ノード数には、受けたメッセージ(必ずInvメッセージ)に付加されている保持ノード数が用いられる。
【0510】
生成されるメッセージの宛先ノード番号は、出力するメッセージの種類により異なる。Cmp、CmpDatShR、CmpDatDyRメッセージの場合、宛先ノード番号には、受けたメッセージの要求元ノード番号が用いられる。AckXメッセージの場合、宛先ノード番号には、受けたメッセージのアドレスの第39ビットから第30ビットまでの上位10ビットが用いられる。
【0511】
以下、リプライバッファ32が出力するメッセージを受けつけた場合に、ローカルアクセス制御部25が実行する処理について、図29、図30を参照しながら説明する。
【0512】
この実施の形態では、ローカルアクセス制御部25は、ステップS131の後に、ステップS311でメッセージを出力するかどうかを判定する。ステップS311でメッセージを出力する必要があると判定されたときは、ローカルアクセス制御部25は、ステップS311でメッセージを生成、出力してから、ステップS132に進む。ステップS311でメッセージを出力する必要がないと判定されたときは、ステップS132に進む。
【0513】
ステップS311において、メッセージを出力するかどうかは、図30のテーブルに示すように、受けたメッセージの種類で決定できる。受けたメッセージの種類がCmpDatShあるいはCmpDatExの場合には、ローカルアクセス制御部25は、メッセージの出力を行う必要はない。受けたメッセージの種類がCmp、CmpDatShR、CmpDatDyRの場合には、ローカルアクセス制御部25は、受けたメッセージに応じてメッセージを生成し、出力する。
【0514】
ステップS311において生成されるメッセージの宛先ノード番号には、受けたメッセージのアドレスの第39ビットから第30ビットまでの上位10ビットを、メッセージの種類は図30で求められるものが用いられる。ステップS311において生成されるメッセージのアドレス、mid、要求元ノード番号には受けたメッセージに付加されていたものが用いられる。
【0515】
また、生成されるメッセージがブロックデータ付きのメッセージ(ここでは、AckDataメッセージに限られる)である場合には、ローカルアクセス制御部25は、受けたメッセージに付加されていたブロックデータを、出力するメッセージに付加する。
【0516】
ローカルアクセス制御部25は、生成したメッセージの出力先がメッセージ送信部35とホームアクセス制御部27とのいずれになるかは、ステップS113(図6)の場合と同様に、宛先ノード番号と当該ノードPEiのノード番号との比較結果によって決定する。
【0517】
以降の処理は、第1の実施の形態におけるローカルアクセス制御部25の動作と同一である。
【0518】
以下、この実施の形態におけるホームアクセス制御部27の動作について、説明する。
【0519】
この実施の形態においては、ホームアクセス制御部27の動作は、第1の実施の形態のもの(図12)とほぼ同一であるが、Ackメッセージ、AckXメッセージ、AckDataメッセージを受けた場合の動作が異なる。
【0520】
図31のテーブルは、これらのメッセージを受けた場合に、決定される処理タイプや次状態などを示す。また、ステップS148(図12)において、ホームアクセス制御部27は、コンフリクトキューからの読み出しを行うかどうかを、図32のテーブルに従って判定する。
【0521】
以下、この実施の形態におけるマルチプロセッサシステムの動作の具体例について、第1の実施の形態と異なる部分について、説明する。
【0522】
ノードPE1のプロセッサ20が、アドレス0x0040030000に対してストアアクセスをid=2で行った場合の動作を説明する。
【0523】
プロセッサ20が行ったメモリアクセスは、ローカルバッファ38に出力される。メモリアクセスを受けたローカルバッファ38は、リクエスト管理テーブル37にアドレス(40ビット)を出力し、同一キャッシュブロックに対するリクエストが存在するかどうかを検査する。存在しなければローカルアクセス制御部25に対して出力する。
【0524】
前記メモリアクセス(アクセスの種類はストア、アドレスは0x0040030000、id=2)を受けたローカルアクセス制御部25は、まず、タグメモリ22の0x0600番地(ローカルバッファから得たアドレス0x0040030000の第19ビット〜第7ビットの13ビット)のデータを読み出す。ここで、読み出した状態がS、タグアドレスが0x00400の場合、図7より処理タイプはAA、発行するメッセージはUpgrade、次状態はSに決定する(ステップS111)。
【0525】
処理タイプがAAであることから(ステップS112)、メッセージの生成出力およびリクエスト管理テーブル37への登録を行う。発行されるメッセージの、宛先ノード番号は0x001(アドレス0x0040030000の第39ビット〜第30ビットの10ビット)、メッセージの種類はUpgrade、アドレスは0x0040030000、idは「2」、要求元ノード番号は0x001となる。また、宛先ノード番号と要求元ノード番号が両者とも0x001と一致するので、出力先は当該ノードPE1のホームアクセス制御部27となる。また、この時リクエスト管理テーブルの2(=id)番エントリに、有効ビットは「1」、チェックビットは「0」、アクセスの種類はロード、アドレスは0x0040030000、受信メッセージ数は「0」、およびストアデータを書き込む(ステップS113)。
【0526】
タグメモリの0x0600番地のエントリのデータを、状態はCに、タグアドレスは0x00400(アドレス0x0040030000の第39ビット〜第20ビットの20ビット)に更新する(ステップS118)。
【0527】
前記Upgradeメッセージ(宛先ノード番号は0x001、メッセージの種類はUpgrade、アドレスは0x0040030000、idは「2」、要求元ノード番号は0x001)を受けたホームアクセス制御部27は次のように動作する。
【0528】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030000の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。ここで読み出したトップビット、状態、保持ノード情報が、それぞれ0、C、0x0efとする。受けたメッセージの種類がUpgradeであり、読み出した状態がCであることから、処理タイプはCA、次状態はUP、保持ノード操作はcountに決定する(図13参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDでないことから、トップビットは読み出した値「0」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0529】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はUP、保持ノード情報は0x37fに更新する。ここでは、データ付きのメッセージではないので主メモリへのブロックデータの書込を行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0530】
処理タイプがCAであるので(ステップS143)、メッセージ生成情報が生成されリモートバッファ34に出力される。メッセージ生成情報は、メッセージの種類をInv、アドレスを0x0040030000、idを「2」、要求元ノード番号を0x001、保持ノード情報を0x07fとするものである(ステップS144)。
【0531】
メッセージの生成出力を終えると、コンフリクトキューから情報を読み出す必要があるかどうかを検査する(ステップS148)。図32より、コンフリクトキューから読み出したメッセージの処理でなく、メッセージの種類はUpgradeであるので、ステップS149でキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、Upgradeメッセージの処理を終了する。
【0532】
前記Invメッセージ生成情報(種類はInv、アドレスは0x0040030000、idは「1」、要求元ノード番号は0x001、保持ノード情報は0x07f)を受け取ったリモートバッファ34は、メッセージの種類をInv、アドレスを0x0040030000、idを「1」、要求元ノード番号を0x001と、保持ノード数を0x37fとし、宛先ノード番号が0x000〜0x37fの内0x001を除いた896個のメッセージを順次生成しメッセージ送信部35に出力する。
【0533】
これらのInvメッセージはノードPE1のメッセージ送信部35、相互結合網、各ノードPE0〜PE895(PE1除く)のメッセージ受信部36、リクエストバッファ33を介してローカルアクセス制御部25に出力される、
【0534】
前記Invメッセージを受けた各ノードPEi(i=0、2、3、・・・、895)のローカルアクセス制御部25は次のように動作する。
【0535】
Invメッセージ(宛先ノード番号は受けたノードの番号、メッセージの種類はInv、アドレスは0x0040030000、idは「2」、要求元ノード番号は0x001、保持ノード数は0x37f)を受けたローカルアクセス制御部25は、タグメモリ22の0x0600番地のデータを読みだす。読み出したタグアドレスが0x00400と一致するかどうか、また状態がなにであるかによって、処理タイプ、出力するメッセージの種類、タグメモリ22の次状態が決定する(図28参照)(ステップS121)。
【0536】
この場合必ず処理タイプがBAとなり(ステップS122)、Cmpメッセージの生成が行われる。このCmpメッセージは、宛先ノード番号を0x001、メッセージの種類をCmp、アドレスを0x00400300000、idを「2」、要求元ノード番号を0x001、保持ノード数を0x37fとするメッセージである。出力先は宛先ノード番号0x001と当該ノード番号の比較結果によって決定するが、この場合必ずメッセージ送信部35となる(ステップS123)。
【0537】
メッセージの生成出力を終えると、タグメモリの更新を行う(ステップS125)。更新するエントリは先ほど読み出を行った0x0600番地のエントリであり、状態は図28から求まる次状態に更新し、タグアドレスは先ほどタグメモリ22から読み出した値をそのまま書き込む。
【0538】
また、リクエスト管理テーブル37へ、受けたメッセージのアドレス(0x0040030000)を出力する。リクエスト管理テーブル37では、各エントリのアドレスと、ローカルアクセス制御部25が出力するアドレスの、第39ビット〜第7ビットが一致するかどうかを検査し、一致するエントリのチェックビットを「1」に更新する。以上でローカルアクセス制御部25は、Invメッセージの処理を終了する。
【0539】
ノードPE0、ノードPE2〜ノードPE895からそれぞれCmpメッセージ(宛先ノードは0x001、種類はCmp、アドレスは0x0040030000、idは「2」、要求元ノード番号は0x001、保持ノード数は0x37f)が相互結合網10を介してノードPE1に対して送信されてくる。その数は合計で895メッセージであり、全て同じメッセージである。
【0540】
メッセージを受けたノードPE1のメッセージ受信部36は次のように動作する。メッセージに付加されているid=2で指定されるリクエスト管理テーブル37のエントリから受信メッセージ数を読み出す。最初のCmpメッセージの場合、その値は「0」であり、リクエスト管理テーブル37のid=2で指定されるエントリの受信メッセージ数の値を、受けたメッセージに付加されている保持ノード数0x37fから1引いた値0x37eに更新する。このCmpメッセージはどのモジュールにも出力せず、以上の処理が終了するとメッセージを破棄する。
【0541】
次にCmpメッセージをメッセージ受信部36が受けると、同じくメッセージに付加されているid=2で指定されるリクエスト管理テーブル37のエントリから受信メッセージ数を読み出す。先ほどこの値は0x37eに更新されており0ではないため、この値から「1」引いた値0x37dに更新する。このCmpメッセージはどのモジュールにも出力せず、以上の処理が終了するとメッセージを破棄する。
【0542】
さらに、Cmpメッセージを順次受け取り、リクエスト管理テーブル37の2番エントリの受信メッセージ数の値が「1」引かれていく。そして、最後の895個目のメッセージを受け取ったとき、次のように動作する。
【0543】
メッセージに付加されているid=2で指定されるリクエスト管理テーブル37のエントリから受信メッセージ数を読み出す。この値は0x001に更新されており0ではないため、この値から「1」引いた値0x000に、リクエスト管理テーブル37のid=2で指定されるエントリの受信メッセージ数の値を更新する。また、読み出した値が0x001であることから、リプライバッファ32に対して受けたCmpメッセージを出力する。
【0544】
Cmpメッセージを受け取ったリプライバッファ32はその情報をローカルアクセス制御部25に出力する。
【0545】
Cmpメッセージ(宛先ノード番号は0x001、メッセージの種類はCmp、アドレスは0x0040030000、idは「2」、要求元ノード番号は0x001)を受けたローカルアクセス制御部25は、リクエスト管理テーブル37の2(=id)番エントリの情報を読みだす。ここでは、チェックビットは「0」、アクセスの種類はストア、アドレスは0x0040030000、ストアデータを得る(ステップS131)。
【0546】
次に、メッセージの出力が必要かどうかを判定する(ステップS311)。受けたメッセージがCmpであるため、Ackメッセージの生成出力を行う。このAckメッセージは、宛先ノード番号を0x001(アドレス0x0040030000の第39ビット〜第30ビットの10ビット)、メッセージの種類をCmp、アドレスを0x0040030000、idを「2」、要求元ノード番号を0x001とするメッセージである。宛先ノード番号と当該ノード番号が一致するので出力先はホームアクセス制御部27となる(ステップS311)。
【0547】
メッセージの生成出力を終えると、データ付きのメッセージではなく(ステップS132)、チェックビットの値も「0」であるので(ステップS133)、キャッシュメモリ21の0x06000番地のデータ64ビットを、リクエスト管理テーブル37から得たストアデータに更新する処理を行う。また、リクエスト管理テーブルの2(=id)番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリ22の0x0600番地のデータを、状態はD(図30参照)、タグアドレスは0x00400(リクエスト管理テーブルから得たアドレス0x0040030000の第39ビット〜第20ビットの20ビット)に更新する。また、プロセッサへidを出力し、id=2のメモリアクセスが完了した旨を通知する(ステップS137)。以上でローカルアクセス制御部25は、Cmpメッセージの処理を終了する。
【0548】
前記Ackメッセージ(宛先ノード番号は0x001、メッセージの種類はAck、アドレスは0x0040030000、idは「2」、要求元ノード番号は0x001)を受けとったホームアクセス制御部27は次のように動作する。
【0549】
まず、ディレクトリメモリ31の0x000600(メッセージに付加されていたアドレス0x0040030000の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出したトップビット、状態、保持ノード情報はそれぞれ0、UP、0x37fに更新されており、その値が読み出される。受けたメッセージの種類がAckであり、読み出した状態がUPであることから、処理タイプはCE、次状態はM、保持ノード操作はset、出力するメッセージはなしに決定する(図31参照)。また、コンフリクトキューから読み出したメッセージの処理でなく、キューが空であり、処理タイプがCDでないことから、トップビットは読み出した値「0」のままとし、また、コンフリクトキューの先頭エントリの削除を行わないことが決定する(図15参照)(ステップS141)。
【0550】
これらの情報を元に、ディレクトリメモリ31の0x000600番地のデータを、トップビットは「0」、状態はM、保持ノード情報は0x001に更新する。ここでは、データ付きのメッセージではないので主メモリへのブロックデータの書込を行わない。また、コンフリクトキューの先頭エントリの削除も行わない(ステップS142)。
【0551】
処理タイプがCEであることから(ステップS143)、コンフリクトキューからの読み出しが必要かどうかを検査する(ステップS148)。図32より、コンフリクトキューから読み出したメッセージの処理でなく、メッセージの種類はAckであり、ステップS141で読み出したトップビットの値が「0」であるので、ステップS149でキューからの読み出しは行わない。以上で、ホームアクセス制御部27は、Ackメッセージの処理を終了する。
【0552】
この実施の形態のマルチプロセッサにおける、プロセッサ20が行うメモリアクセスから始まる、ノードPEi間でやり取りされるメッセージのシーケンスを、図33に示す。
図33において、括弧で囲まれたメッセージは生成されない場合が存在することを表す。逆に、括弧で囲まれていないものは必ず生成されることを表している。また、矢印の分岐は、分岐先のメッセージのどれかが出力されることを表している。
【0553】
図33から明らかなように、ノードPEi間でやり取りされるメッセージのシーケンスにループは存在しない。
従って、この実施の形態のマルチプロセッサシステムでは、プロセッサ20がメモリアクセスを行ってから、その結果を得るまでの処理が無限ループに陥ることがない。このため、この実施の形態のマルチプロセッサシステムでは、プロセッサ20がメモリアクセスに対する結果を有限時間内に得ることを保証することができる。
【0554】
この実施の形態のマルチプロセッサシステムにおける、メッセージの出力元モジュールと出力先モジュールの関係は、第1の実施の形態と同様に、図18に示すものとなる。従って、この実施の形態におけるマルチプロセッサシステムでも、依存関係にループができず、デッドロックの発生を防ぐことができる。
【0555】
[実施の形態の変形]
本発明は、上記の第1〜第3の実施の形態で説明したものに限定されるものではなく、種々の変形が可能である。
以下、上記の第1〜第3の実施の形態の変形態様について、説明する。
【0556】
上記の第1〜第3の実施の形態におけるリプライバッファ32の各エントリは、メッセージ情報を全て保持する必要はなく、少なくともローカルアクセス制御部25がリプライバッファ32から受けたメッセージを処理する際に使用している情報を保持していればよい。
【0557】
上記の第1、第3の実施の形態におけるリプライバッファ32の4エントリは、それぞれメッセージの種類(4ビット)、mid(2ビット)、ブロックデータ(128バイト)を保持するだけでもよい。
【0558】
上記の第2の実施の形態におけるリプライバッファ32のブロックデータ付きのメッセージを保持する4エントリは、それぞれメッセージの種類(4ビット)、mid(3ビット)、ブロックデータ(128バイト)を保持するだけで良い。また、Cmpメッセージを保持する16エントリは、それぞれメッセージの種類(4ビット)、mid(3ビット)のみでもよい。
【0559】
上記の第1〜第3の実施の形態におけるリクエストバッファ33の各エントリ、およびリクエストバッファ33が管理し、主メモリ30に設けるリクエスト退避キューの各エントリは、メッセージ情報を全て保持する必要はなく、少なくともローカルアクセス制御部25がリクエストバッファ33から受けたメッセージを処理する際に使用している情報を保持していればよい。
【0560】
上記の第1の実施の形態におけるリクエストバッファ33の各エントリ、およびリクエスト退避キューの各エントリは、それぞれメッセージの種類(4ビット)、アドレス(40ビット)、mid(2ビット)、要求元ノード番号(10ビット)を保持するだけでもよい。
【0561】
上記の第2の実施の形態におけるリクエストバッファ33の各エントリ、およびリクエスト退避キューの各エントリは、それぞれメッセージの種類(4ビット)、アドレス(40ビット)、mid(3ビット)、要求元ノード番号(10ビット)を保持するだけでもよい。
【0562】
上記の第3の実施の形態におけるリクエストバッファ33の各エントリ、およびリクエスト退避キューの各エントリは、それぞれメッセージの種類(4ビット)、アドレス(40ビット)、mid(2ビット)、要求元ノード番号(10ビット)、保持ノード数(10ビット)を保持するだけでもよい。
【0563】
上記の第1〜第3の実施の形態におけるホームアクセス制御部27が管理し、主メモリ30に設けるコンフリクトキューの各エントリは、メッセージ情報を全て保持する必要はなく、少なくともホームアクセス制御部25がメッセージを処理する際に使用している情報を保持していればよい。
【0564】
上記の第1、第3の実施の形態におけるコンフリクトキューの各エントリは、それぞれメッセージの種類(4ビット)、アドレス(40ビット)、mid(2ビット)、要求元ノード番号(10ビット)を保持するだけでもよい。
【0565】
上記の第2の実施の形態におけるコンフリクトキューの各エントリは、それぞれメッセージの種類(4ビット)、アドレス(40ビット)、mid(3ビット)、要求元ノード番号(10ビット)を保持するだけでもよい。
【0566】
上記の第1〜第3の実施の形態において、ディレクトリメモリ31およびディレクトリメモリアクセス制御部29を持たないマルチプロセッサシステムを構成することも可能である。この場合は、ディレクトリメモリ31に格納されていた情報は、主メモリ30のある領域(ディレクトリ領域)に格納すればよい。ホームアクセス制御部27が、ディレクトリメモリアクセス制御部を介して行っていたディレクトリメモリに対するアクセスは、主メモリアクセス制御部28を介して主メモリ30のディレクトリ領域をアクセスすることで実現される。
【0567】
上記の第1〜第3の実施の形態において、ホームアクセス制御部27は、Upgradeメッセージを受け処理し、主メモリ30に設けたコンフリクトキューに書き込む際にメッセージの種類を変更して書き込んでも良い。その際、メッセージの種類は、UpgradeからBlkRdExに変更すればよい。
【0568】
上記の第1〜第3の実施の形態のリプライバッファ32、リクエストバッファ33、リモートバッファ34などのエントリ数は、上述したものに限定されるものではない。
【0569】
上記の第1〜第3の実施の形態におけるメッセージは、ノードPEi間での処理要求及び応答を的確に伝えられるものであれば、その種類及び構成を様々に変形することが可能である。また、特に同一ノード間での要求(アクセス要求など)については、メッセージの形態をとらずに、ノード内に設けられた信号線を介して所定の信号を送ることで、その要求を伝える構成としてもよい。
【0570】
上記の第1〜第3の実施の形態において、一貫性維持制御部16に含まれるキャッシュメモリアクセス制御部23、タグメモリアクセス制御部24、ローカルアクセス制御部25、ホームアクセス制御部27、主メモリアクセス制御部28及びディレクトリメモリアクセス制御部29の各機能は、それぞれ次のいずれのによって実現してもよい。
【0571】
1)プロセッサ20による主メモリ30に格納された処理プログラム(或いは、命令キャッシュに記憶されたプログラム)の実行。
2)プロセッサ20及び主メモリ30(或いは命令キャッシュ)とは別個に設けられた、専用のサブプロセッサによる専用のメモリに格納された処理プログラムの実行。
3)それぞれのモジュールの機能を実現するためのロジックに従って構成された専用のハードウェア。
【0572】
上記の第1〜第3の実施の形態で示したマルチプロセッサシステムは、1つの相互結合網10を介して互いに接続された1024個のノードPE0〜PE1023によって構成されていた。しかしながら、本発明において、ノード数は任意である。また、相互結合網が複数ある、冗長性のある構成となっていてもよい。この場合は、複数の相互結合網は、システムの障害対策のために用いることができる。
【0573】
【発明の効果】
以上説明したように、本発明によれば、主記憶とキャッシュメモリとのデータの一貫性(コヒーレンシー)を維持するための処理において、無限ループに陥ることがない。このため、処理装置によるデータアクセスが有限時間内で完了することを保証することができる。
【0574】
また、デッドロックの発生を回避するためにハードウェア(特に、相互結合網)を付加する必要がなく、信頼性が高く、しかも低コストでマルチプロセッサシステムを提供することができる。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態にかかる疎結合型のマルチプロセッサシステムの構成を示すブロック図である。
【図2】本発明の第1の実施の形態におけるノードの機能構成を示すブロック図である。
【図3】(a)、(b)は、本発明の第1の実施の形態において、相互結合網を介してノード間でやり取りされるメッセージの構成を示す図であり、(a)は基本メッセージの構成を、(b)はブロックデータ付きメッセージの構成をそれぞれ示す。
【図4】本発明の第1の実施の形態におけるリクエストバッファの構成を示すブロック図である。
【図5】本発明の第1の実施の形態におけるリモートバッファの構成を示すブロック図である。
【図6】本発明の第1の実施の形態において、ローカルバッファが出力するメモリアクセスを受け、そのメモリアクセスがロードアクセスであった場合に、ローカルアクセス制御部が実行す処理を示すフローチャートである。
【図7】図6のフローチャートにおける処理で用いられる、アクセスの種類、状態、及びアドレスの第39ビットから第20ビットまでの上位20ビットとタグアドレスが一致するかどうかの3つの情報と処理タイプ、メッセージの種類、次状態の関係を示すテーブルである。
【図8】本発明の第1の実施の形態において、リクエストバッファが出力するメッセージを受け付けた場合に、ローカルアクセス制御部が実行する処理を示すフローチャートである。
【図9】図8のフローチャートの処理で用いられる、メッセージの種類、状態、及びメッセージに付加されていたアドレスの第39ビットから第20ビットまでの上位20ビットとタグアドレスが一致するかどうかの3つの情報と処理タイプ、メッセージの種類、次状態の関係を示すテーブルである。
【図10】本発明の第1の実施の形態において、リプライバッファが出力するメッセージを受けつけた場合に、ローカルアクセス制御部が実行する処理を示すフローチャートである。
【図11】図10のフローチャートの処理で用いられる、アクセスの種類、受けたメッセージの種類、次状態の関係を示すテーブルである。
【図12】本発明の第1の実施の形態において、ホームアクセス制御部が実行する処理を示すフローチャートである。
【図13】図12のフローチャートの処理で用いられる、受けたメッセージの種類、ディレクトリメモリ読み出したブロックの状態、保持ノード情報から求めるアンキャッシュド情報、要求ノード番号と当該ノード番号が一致するかどうか、及び保持ノード情報と当該ノード番号が一致するかどうかの5つの情報と、ディレクトリメモリに格納するブロックの状態、保持ノード情報に対する操作、処理タイプ、メッセージの種類および出力先のバッファとの関係を示すテーブルである。
【図14】図12のフローチャートの処理で用いられる、受けたメッセージの種類、ディレクトリメモリから読み出したブロックの状態、保持ノード情報から求めるアンキャッシュド情報、要求ノード番号と当該ノード番号が一致するかどうか、及び保持ノード情報と当該ノード番号が一致するかどうかの5つの情報と、ディレクトリメモリに格納するブロックの状態、保持ノード情報に対する操作、処理タイプ、メッセージの種類および出力先のバッファとの関係を示すテーブルである。
【図15】コンフリクトキューから読み出したメッセージの処理なのかそうでないのか、コンフリクトキューが空かどうか、及び処理タイプがCDかどうかの3つの情報と、トップビットの値及びコンフリクトキューの先頭エントリを削除するかどうかの関係を示すテーブルである。
【図16】キューから読み出したメッセージの処理であったかどうか、また処理したメッセージの種類、コンフリクトキューが空かどうか、また処理したメッセージの処理タイプが何であったか、及び読み出したトップビットの値が何であったか5つの情報と、決定されるキューの読み出しとの関係を示すテーブルである。
【図17】本発明の第1の実施の形態において、プロセッサが行うメモリアクセスから始まる、ノード間でやり取りされるメッセージのシーケンスを示す図である。
【図18】実施の形態のマルチプロセッサシステムにおける、メッセージの出力元モジュールと出力先モジュールの関係を示す図である。
【図19】(a)、(b)は、本発明の第2の実施の形態において、相互結合網を介してノード間でやり取りされるメッセージの構成を示す図であり、(a)は基本メッセージの構成を、(b)はブロックデータ付きメッセージの構成をそれぞれ示す。
【図20】本発明の第2の実施の形態におけるノードの機能構成を示すブロック図である。
【図21】本発明の第2の実施の形態において、リプライバッファが出力するメッセージを受けつけた場合に、ローカルアクセス制御部が実行する処理を示すフローチャートである。
【図22】図21のフローチャートの処理で用いられる、アクセスの種類、受けたメッセージの種類、次状態の関係を示すテーブルである。
【図23】本発明の第2の実施の形態において、ホームアクセス制御部が実行する処理のうちの第1の実施の形態と異なる部分を示すフローチャートである。
【図24】図23のフローチャートの処理で用いられる、受けたメッセージの種類、ディレクトリメモリ読み出したブロックの状態、保持ノード情報から求めるアンキャッシュド情報、要求ノード番号と当該ノード番号が一致するかどうか、及び保持ノード情報と当該ノード番号が一致するかどうかの5つの情報と、ディレクトリメモリに格納するブロックの状態、保持ノード情報に対する操作、処理タイプ、メッセージの種類および出力先のバッファとの関係を示すテーブルである。
【図25】本発明の第2の実施の形態において、プロセッサが行うメモリアクセスから始まる、ノード間でやり取りされるメッセージのシーケンスを示す図である。
【図26】(a)〜(c)は、本発明の第3の実施の形態において、相互結合網を介してノード間でやり取りされるメッセージの構成を示す図であり、(a)は基本メッセージの構成を、(b)はブロックデータ付きメッセージの構成を、(c)は保持ノード数付きメッセージの構成をそれぞれ示す。
【図27】本発明の第3の実施の形態におけるノードの機能構成を示すブロック図である。
【図28】本発明の第3の実施の形態において、リクエストバッファが出力するメッセージを受け付けた場合にローカルアクセス制御部が実行する処理で用いられる、メッセージの種類、状態、及びメッセージに付加されていたアドレスの第39ビットから第20ビットまでの上位20ビットとタグアドレスが一致するかどうかの3つの情報と処理タイプ、メッセージの種類、次状態の関係を示すテーブルである。
【図29】本発明の第3の実施の形態において、リプライバッファが出力するメッセージを受けつけた場合に、ローカルアクセス制御部が実行する処理を示すフローチャートである。
【図30】図29のフローチャートの処理で用いられる、アクセスの種類、受けたメッセージの種類、次状態の関係を示すテーブルである。
【図31】本発明の第3の実施の形態におけるホームアクセス制御部の処理で用いられる、受けたメッセージの種類、ディレクトリメモリ読み出したブロックの状態、保持ノード情報から求めるアンキャッシュド情報、要求ノード番号と当該ノード番号が一致するかどうか、及び保持ノード情報と当該ノード番号が一致するかどうかの5つの情報と、ディレクトリメモリに格納するブロックの状態、保持ノード情報に対する操作、処理タイプ、メッセージの種類および出力先のバッファとの関係を示すテーブルである。
【図32】本発明の第3の実施の形態におけるホームアクセス制御部の処理で用いられる、キューから読み出したメッセージの処理であったかどうか、また処理したメッセージの種類、コンフリクトキューが空かどうか、また処理したメッセージの処理タイプが何であったか、及び読み出したトップビットの値が何であったか5つの情報と、決定されるキューの読み出しとの関係を示すテーブルである。
【図33】本発明の第3の実施の形態において、プロセッサが行うメモリアクセスから始まる、ノード間でやり取りされるメッセージのシーケンスを示す図である。
【図34】従来例の疎結合型のマルチプロセッサシステムの構成、及びノードの機能構成を示すブロック図である。
【符号の説明】
PE0〜PEn−1 ノード
10 相互結合網
16 一貫性維持制御部
20 プロセッサ
21 キャッシュメモリ
22 タグメモリ
23 キャッシュメモリアクセス制御部
24 タグメモリアクセス制御部
25 ローカルアクセス制御部
27 ホームアクセス制御部
28 主メモリアクセス制御部
29 ディレクトリメモリアクセス制御部
30 主メモリ
31 ディレクトリメモリ
32 リプライバッファ
33 リクエストバッファ
34 リモートバッファ
35 メッセージ送信部
36 メッセージ受信部
37 リクエスト管理テーブル
38 ローカルバッファ
101 セレクタ
102 バッファ
103 セレクタ
104 バッファ
111 バッファ
112 セレクタ
113 バッファ
114 メッセージ生成回路
115 データバッファ

Claims (8)

  1. 相互結合網 (10) を介して互いに接続された複数のノード (PEi) から構成されるマルチプロセッサシステムであって、
    前記複数のノード (PEi) は、それぞれ、
    データのアクセス要求を発行するプロセッサ (20) と、
    データが格納される主メモリ (30) と、
    前記プロセッサ (20) がアクセスした主メモリ (30) のデータをブロック単位で一時保持する、前記主メモリ (30) よりも高速アクセスが可能なキャッシュメモリ (21) と、
    前記キャッシュメモリ (21) に記憶されているデータの状態をブロック毎に記憶するタグメモリ (22) と、
    前記主メモリ (30) に格納されているデータの一貫性に関する状態と、一貫性に関する状態の変化を待っているアクセス要求が存在するかどうか、をブロック毎に記憶するディレクトリメモリ (31) と、
    前記プロセッサ (20) が発行したアクセス要求を受けて、キャッシュメモリ (21) とタグメモリ (22) にアクセスして一貫性処理を行い、必要に応じて該当するデータを保持する主メモリ (30) を有するノード (PEi) に対してアクセス要求を通知するローカルアクセス制御部 (25) と、
    前記ローカルアクセス制御部 (25) からアクセス要求を受け、主メモリ (30) およびディレクトリメモリ (31) にアクセスして一貫性処理を行うと共に、必要に応じてアクセス要求をコンフリクトキューに退避するホームアクセス制御部 (27) とを備え、
    前記ホームアクセス制御部 (27) は、
    前記ローカルアクセス制御部 (25) からアクセス要求を受けたとき、該アクセス要求に応じたブロックのディレクトリメモリ (31) が一貫性処理中の状態にあることを示す場合には、該アクセス要求を前記コンフリクトキューに退避し、
    アクセス要求を退避する時に前記コンフリクトキューが空であった場合は、対応するブロックのディレクトリメモリ (31) の内容を一貫性に関する状態の変化を 待っているアクセス要求が存在することを示す値に更新し、
    ディレクトリメモリ (31) の内容が一貫性に関する状態の変化を待っているアクセス要求が存在することを示すブロックに関して、該ブロックの状態が一貫性処理中の状態からそれ以外の状態に更新された場合に、前記コンフリクトキューの先頭のアクセス要求を読み出して一貫性処理を行い、該ブロックのディレクトリメモリ (31) の内容を一貫性に関する状態の変化を持っているアクセス要求が存在しないことを示す値に更新し、
    前記コンフリクトキューから読み出されたアクセス要求を処理し、かつ別のアクセス要求が前記コンフリクトキューに蓄積されている場合、引き続き次のアクセス要求を前記コンフリクトキューから読み出し、
    該当するブロックのディレクトリメモリ (31) の内容が、一貫性処理中であることを示す状態である場合には、前記コンフリクトキューから読み出したアクセス要求の処理を中止し、該ブロックのディレクトリメモリ (31) のエントリの内容を一貫性に関する状態の変化を待っているアクセス要求が存在することを示す値に更新し、
    該当するブロックのディレクトリメモリ (31) の内容が、一貫性処理中でないことを示す状態である場合は、一貫性処理を行い、別のアクセス要求が前記コンフリクトキューにまだ蓄積されている場合は、引き続き次のアクセス要求を前記コンフリクトキューから読み出す
    ことを特徴とするマルチプロセッサシステム。
  2. 前記コンフリクトキューは、前記主メモリ (30) 内に設けられている
    ことを特徴とする請求項 1 記載のマルチプロセッサシステム。
  3. 前記複数のノード (PEi) は、N個 ( N=自然数 ) のノードで構成され、
    前記プロセッサ (20) は、最大k個 ( k=自然数 ) のアクセス要求を同時に発行する手段を有し、
    前記コンフリクトキューは、N×k個のエントリで構成される
    ことを特徴とする請求項1または2に記載のマルチプロセッサシステム。
  4. 相互結合網 (10) を介して互いに接続された複数のノード (PEi) から構成されるマルチプロセッサシステムであって、
    前記複数のノード (PEi) は、それぞれ、
    データのアクセス要求を発行するプロセッサ (20) と、
    データが格納される主メモリ (30) と、
    前記プロセッサ (20) がアクセスした主メモリ (30) のデータをブロック単位で一時保持する、前記主メモリ (30) よりも高速アクセスが可能なキャッシュメモリ (21) と、
    前記キャッシュメモリ (21) に記憶されているデータの状態をブロック毎に記憶するタグメモリ (22) と、
    前記主メモリ (30) に記憶されているデータの状態をブロック毎に記憶するディレクトリメモリ (31) と、
    前記プロセッサ (20) が発行したアクセス要求を受けて、キャッシュメモリ (21) とタグメモリ (22) をアクセスして一貫性処理を行い、必要に応じて該当するデータを保持する主メモリ (30) を有するノード (PEi) に対してアクセス要求を通知するローカルアクセス制御部 (25) と、
    前記ローカルアクセス制御部 (25) からアクセス要求を受けて、主メモリ (30) およびディレクトリメモリ (31) をアクセスして一貫性処理を行うホームアクセス制御部 (27) と、
    前記ローカルアクセス制御部 (25) に対する応答を受け取り、該応答を蓄積するリプライバッファ (32) と、
    前記ローカルアクセス制御部 (25) に対する一貫性処理要求を受け取り、該一貫性処理要求を蓄積するリクエストバッファ (33) と、
    前記ホームアクセス制御部 (27) が一貫性処理を行って他のノード (PEi) に送出する一貫性処理要求および応答を生成するための情報を前記ホームアクセス制御部 (27) より受け取り、該情報を蓄積するリモートバッファ (34)
    を備えることを特徴とするマルチプロセッサシステム。
  5. 前記リクエストバッファ (33) は、前記ローカルアクセス制御部 (25) に対する一貫性処理要求を、前記主メモリ (30) に設けられたリクエスト退避キューに退避する手段と、該リクエスト退避キューに退避した一貫性処理要求を読み出す手段とを有する
    ことを特徴とする請求項4に記載のマルチプロセッサシステム。
  6. 前記リモートバッファ (34) は、前記ホームアクセス制御部 (27) が他のノード (PEi) に送出する一貫性処理要求および応答を生成するための情報を、前記主メモリ (30) に設けられたリモート退避キューに退避する手段と、該リモート退避キューに退避した情報を読み出す手段と、該一貫性処理要求及び応答を生成するための情報から必要に応じて一貫性要求及び応答を生成する手段とを有する
    ことを特徴とする請求項4または5に記載のマルチプロセッサシステム。
  7. 前記複数のノード (PEi) は、N個 ( N=自然数 ) のノードで構成され、
    前記プロセッサ (20) は、最大k個 ( k=自然数 ) のアクセス要求を同時に発行する手段を有し、
    前記リプライバッファ (32) は、k個のエントリで構成され、
    前記リクエストバッファ (33) は、N×k個のエントリで構成され、
    前記リモートバッファ (34) は、N×k個のエントリで構成される
    ことを特徴とする請求項4乃至6のいずれか1項に記載のマルチプロセッサシステム。
  8. 前記ディレクトリメモリ (31) は、さらに、どのノード (PEi) のキャッシュメモリ (21) がデータを保持しているかをブロック毎に記憶し、
    前記一貫性処理要求および応答を生成するための情報には、前記ディレクトリメモリ (31) に格納されている、どのノード (PEi) のキャッシュメモリ (21) がデータを保持しているかを示す情報が含まれる
    ことを特徴とする請求項4乃至7のいずれか1項に記載のマルチプロセッサシステム。
JP02113598A 1998-02-02 1998-02-02 マルチプロセッサシステム Expired - Lifetime JP3751741B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP02113598A JP3751741B2 (ja) 1998-02-02 1998-02-02 マルチプロセッサシステム
US09/241,069 US6408365B1 (en) 1998-02-02 1999-02-01 Multiprocessor system having means for arbitrating between memory access request and coherency maintenance control
DE19904049A DE19904049A1 (de) 1998-02-02 1999-02-02 Mehrprozessorsystem mit einer Einrichtung zum Entscheiden zwischen einer Speicherzugriffanforderung und einer Steuerung zum Aufrechterhalten eines Kohärenzzustands

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP02113598A JP3751741B2 (ja) 1998-02-02 1998-02-02 マルチプロセッサシステム

Publications (2)

Publication Number Publication Date
JPH11219343A JPH11219343A (ja) 1999-08-10
JP3751741B2 true JP3751741B2 (ja) 2006-03-01

Family

ID=12046464

Family Applications (1)

Application Number Title Priority Date Filing Date
JP02113598A Expired - Lifetime JP3751741B2 (ja) 1998-02-02 1998-02-02 マルチプロセッサシステム

Country Status (3)

Country Link
US (1) US6408365B1 (ja)
JP (1) JP3751741B2 (ja)
DE (1) DE19904049A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3772690B2 (ja) 2001-04-25 2006-05-10 日本電気株式会社 サービスシステム及びそれに用いるサービス方法
US7941585B2 (en) * 2004-09-10 2011-05-10 Cavium Networks, Inc. Local scratchpad and data caching system
US7594081B2 (en) 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
WO2006031551A2 (en) 2004-09-10 2006-03-23 Cavium Networks Selective replication of data structure
US7454576B2 (en) * 2004-12-27 2008-11-18 Intel Corporation System and method for cache coherency in a cache with different cache location lengths
JP4572169B2 (ja) 2006-01-26 2010-10-27 エヌイーシーコンピュータテクノ株式会社 マルチプロセッサシステム及びその動作方法
JP5082479B2 (ja) * 2007-02-08 2012-11-28 日本電気株式会社 データ一貫性制御システム及びデータ一貫性制御方法
US7996360B2 (en) * 2008-06-27 2011-08-09 International Business Machines Corporation Coordinating updates to replicated data

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02304666A (ja) 1989-05-19 1990-12-18 Nec Corp ライトスルーキャッシュの一貫性保持方式
JPH0625984B2 (ja) 1990-02-20 1994-04-06 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン マルチプロセツサ・システム
JPH04209053A (ja) 1990-11-30 1992-07-30 Nec Corp キャッシュシステム
JPH0532776A (ja) 1990-12-10 1993-02-09 Teijin Ltd ポリアリールエーテルケトンの製造方法
JPH0535697A (ja) 1991-07-25 1993-02-12 Mitsubishi Electric Corp マルチプロセツサシステム
US5244545A (en) 1991-10-09 1993-09-14 Eastman Kodak Company Process for removing acetone from carbonylation processes
JPH0962580A (ja) 1995-08-30 1997-03-07 Canon Inc マルチプロセッサ装置

Also Published As

Publication number Publication date
JPH11219343A (ja) 1999-08-10
DE19904049A1 (de) 1999-09-09
US6408365B1 (en) 2002-06-18

Similar Documents

Publication Publication Date Title
US5900020A (en) Method and apparatus for maintaining an order of write operations by processors in a multiprocessor computer to maintain memory consistency
US6154816A (en) Low occupancy protocol for managing concurrent transactions with dependencies
US6014690A (en) Employing multiple channels for deadlock avoidance in a cache coherency protocol
JP4700773B2 (ja) スイッチをベースとするマルチプロセッサシステムに使用するための順序サポート機構
US6085276A (en) Multi-processor computer system having a data switch with simultaneous insertion buffers for eliminating arbitration interdependencies
KR100465583B1 (ko) 판독 요청을 원격 처리 노드에 추론적으로 전송하는 비정형 메모리 액세스 데이터 처리 시스템 및 이 시스템에서의 통신 방법
US6108752A (en) Method and apparatus for delaying victim writes in a switch-based multi-processor system to maintain data coherency
US6209065B1 (en) Mechanism for optimizing generation of commit-signals in a distributed shared-memory system
US6094686A (en) Multi-processor system for transferring data without incurring deadlock using hierarchical virtual channels
US6101420A (en) Method and apparatus for disambiguating change-to-dirty commands in a switch based multi-processing system with coarse directories
US20010013089A1 (en) Cache coherence unit for interconnecting multiprocessor nodes having pipelined snoopy protocol
JPH10187470A (ja) スピンロック動作を最適化する装置を含むマルチプロセス・システム
JPH10116253A (ja) 同期動作を実行するマルチプロセス・システム
JP2002304328A (ja) マルチプロセッサシステム用コヒーレンスコントローラ、およびそのようなコントローラを内蔵するモジュールおよびマルチモジュールアーキテクチャマルチプロセッサシステム
JPH10187645A (ja) プロセス・ノードの多数のサブノード内にコヒーレンス状態で格納するように構成されたマルチプロセス・システム
JPH10340227A (ja) ローカル・グローバル・アドレス・スペース及びマルチアクセス・モードを用いたマルチプロセッサ・コンピュータ・システム
US20040255002A1 (en) Methods and apparatus for extended packet communications between multiprocessor clusters
JPH10133917A (ja) コヒーレンシー関連エラー・ロッジング能力を有するマルチプロセス・システム
JPH10171710A (ja) 効果的なブロック・コピー動作を実行するマルチプロセス・システム
JPH10143482A (ja) エフィシェントな書込み動作を実行するマルチプロセッサ・システム
JPH10214230A (ja) 応答カウントを含むコヒーレンシー・プロトコルを採用したマルチプロセッサ・システム
JP2001519565A (ja) キャッシュコヒーレンス共用ディスクコンピュータシステムにおけるi/o転送
CN112955876B (zh) 用于在数据处理网络中传输数据的方法和装置
US20050013294A1 (en) Multi-node computer system with active devices employing promise arrays for outstanding transactions
JP3751741B2 (ja) マルチプロセッサシステム

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20050310

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051208

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091216

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091216

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101216

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101216

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111216

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111216

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121216

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121216

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131216

Year of fee payment: 8

EXPY Cancellation because of completion of term