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

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

Info

Publication number
JP3769411B2
JP3769411B2 JP06190599A JP6190599A JP3769411B2 JP 3769411 B2 JP3769411 B2 JP 3769411B2 JP 06190599 A JP06190599 A JP 06190599A JP 6190599 A JP6190599 A JP 6190599A JP 3769411 B2 JP3769411 B2 JP 3769411B2
Authority
JP
Japan
Prior art keywords
node
message
data
address
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 - Fee Related
Application number
JP06190599A
Other languages
English (en)
Other versions
JP2000259596A (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 JP06190599A priority Critical patent/JP3769411B2/ja
Publication of JP2000259596A publication Critical patent/JP2000259596A/ja
Application granted granted Critical
Publication of JP3769411B2 publication Critical patent/JP3769411B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • 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】
なお、疎結合とは結合係数が小さい結合をいう。これに対して結合係数が大きい結合を密結合という。
【0004】
図15は、このような従来のマルチプロセッサシステム1’の構成を示すブ ロック図である。
【0005】
図15に示すように、このマルチプロセッサシステム1’は、複数のノードPE0〜PEn−1と、各ノードを結合する相互結合網10’と、から構成されている。
【0006】
各ノード(図15では、PEiのみを示す)は、演算やメモリアクセス等を行うプロセッサ20’と、データを保持する主メモリ30’と、プロセッサ20’がデータを一時的に保持する主メモリ30’よりも高速アクセスが可能なキャッシュメモリ21’と、主メモリ30’とキャッシュメモリ21’(他のノードのものを含む)との間のデータの一貫性を維持するための一貫性維持制御部55’と、を有している。
【0007】
図16(a)は、複数のノードの主メモリ30’にデータのコピーが存在する状態を示す図であり、図16(b)は、1つのノードの主メモリ30’にのみデータのコピーが存在する状態を示す図である。
【0008】
一貫性維持制御部55’は、キャッシュメモリ21’の内容を保持するもので、キャッシュメモリ21’は主メモリ30’に格納されているデータの状態およびデータのコピーをキャッシュメモリ21’に保持しているノードの情報 (以降、保持ノード情報と呼ぶ)を保持している。データの状態は、「C」, 「M」の2つがある。「C」は、図16(a)に示すように、複数のノードのキャッシュメモリ21’にデータのコピーが存在する状態を表す。このとき、キャッシュメモリ21’のコピーと主メモリ30’のデータの値は同じである。「M」は、図16(b)に示すように、1つのノードのキャッシュメモリ21’のみがデータのコピーを保持している状態を表す。このとき、キャッシュメモリ21’のコピーの値と主メモリ30’のデータの値は異なり、キャッシュメモリ21’のコピーの値が最新の値である。
【0009】
図17(a)は、複数のノードのキャッシュメモリ21’に一貫性が維持された有効なデータが存在しない状態を示す図であり、図17(b)は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ21’にも有効なデータが存在する可能性のある状態を示す図であり、図17(c)は、データの有効なコピーが1つのノードにだけ存在し、他のノードのキャッシュメモリ21’には有効なコピーが存在せず、かつ主メモリ30’のデータとキャッシュメモリ21’のデータが異なる状態を示す図である。
【0010】
一貫性維持制御部55’は、キャッシュメモリ21’に格納されているデータの状態およびデータのタグアドレスを保持している。データの状態は「I」,「S」,「D」の3つがある。「I」は、図17(a)に示すように、一貫性が維持された有効なデータのコピーが存在しない状態である。「S」は、図17(b)に示すように、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ21’にも有効なコピーが存在する可能性がある状態である。「D」は、図17(c)に示すように、複数のノードのキャッシュメモリ21’にデータの有効なコピーが1つのノードにだけ存在し、他のノードのキャッシュメモリ21’には有効なコピーが存在せず、かつ主メモリ30’のデータの値と異なる状態である。
【0011】
ここで、タグアドレスはどのアドレスのデータであるかを示す。
【0012】
相互結合網10’は、ノード間でやり取りされるメッセージを配信するネットワークである。
【0013】
以下、プロセッサ20’が所定のアドレスのデータに対してロード、あるいはストアアクセスをしたときの、このマルチプロセッサシステム1’において主メモリ30’とキャッシュメモリ21’とのデータの一貫性を維持するための動作について、図16を参照して説明する。
【0014】
最初に、ノードPE1のプロセッサ20’が、ロードアクセスを行ったときの動作について説明する。
【0015】
一貫性維持制御部55’は、該当するアドレスのデータについて有効なコピーがキャッシュメモリ21’も存在するかどうかを調べる。キャッシュメモリ21’に有効なコピーが存在する場合、すなわち状態が「S」または「D」である場合は、一貫性制御部55’は、プロセッサ50’にキャッシュメモリ21’から読み出したデータを渡すことによってプロセッサに応答し、処理を終了する。
【0016】
一方、キャッシュメモリ21’に有効なコピーが存在しない場合、すなわち状態が「I」の場合は、該当するアドレスのデータを保持しているノード、例えば、ノードPEh宛に、当該データの読み出し要求メッセージを相互結合網10’を介して送信する。
【0017】
読み出し要求メッセージを受けたノードPEhの一貫性維持制御部55’は、該当するアドレスのデータについての最新の値がノードPEhの主メモリ30’に存在するかどうかを調べる。該当するアドレスのデータについての最新の値が主メモリ30’に存在する場合、すなわち状態が「C」である場合には、ノードPE1に相互結合網10’を介して主メモリ30’に格納されているデータを相互結合網10’を介して送信すると共に、保持ノード情報にノードPE1を 加える。
【0018】
ノードPEhからのデータを受信したノードPE1の一貫性維持制御部55’は、プロセッサ20’に受け取ったデータを渡すと共に、キャッシュメモリ21’にそのデータをコピーする。さらに、キャッシュメモリ21’の当該データの状態を「S」とする。
【0019】
一方、読み出し要求メッセージを受けたノードPEhにおいて、該当するアドレスのデータについての最新の値が主メモリ30’に存在しない場合、すなわち状態が「M」である場合には、保持ノード情報を参照して、最新のデータを保持するノード、例えば、ノードPErに読み出し要求メッセージを相互結合網10’を介して送信する。
【0020】
読み出し要求メッセージを受けたノードPErの一貫性維持制御部55’は、キャッシュメモリ21’に状態が「D」のデータが存在するかどうかを調べる。キャッシュメモリ21’に状態が「D」のデータが存在する場合には、キャッシュメモリ21’に格納されているデータを相互結合網10’を介してノードPE1に送信すると共に、キャッシュメモリ21’に格納されているデータを付加した書き戻し要求メッセージを相互結合網10’を介してノードPEhに送信する。 さらにキャッシュメモリ21’の当該データの状態を「S」に更新する。
【0021】
書き戻し要求メッセージを受けたノードPEhの一貫性維持制御部55’は、主メモリ30’のデータを、書き戻し要求メッセージに付加されていたデータに更新する。さらに、その主メモリ30’の当該データの状態を「C」に更新し、保持ノード情報にノードPE1を加える。
【0022】
一方、読み出し要求メッセージを受けたノードPErにおいて、キャッシュメモリ21’に状態が「D」のデータが存在しない場合には、Nak(否定応答)メッセージを相互結合網10’を介してノードPE1に送信する。
【0023】
Nakメッセージを受け取ったノードPE1の一貫性維持制御部55’は、再度ノードPEhに読み出し要求メッセージを送信する。以降、ノードPE1にデータが送信されて、ノードPE1のプロセッサ20’にデータが渡されるまで、同様の処理が繰り返される。
【0024】
次に、ノードPE1のプロセッサ50’が、ストアアクセスを行ったときの動作について説明する。
【0025】
一貫性維持制御部55’は、該当するアドレスのデータについてのシステム内での唯一のコピーがキャッシュメモリ21’に存在するかどうかを調べる。キャッシュメモリ21’に有効なコピーが存在する場合、すなわち状態が「D」である場合は、キャッシュメモリ21’のデータを更新し、プロセッサ50’にアクセス完了を通知して、処理を終了する。
【0026】
キャッシュメモリ21’に唯一のコピーが存在しない場合、すなわち状態が「I」または「S」の場合は、ノードPE1の一貫性維持制御部55’は、該当するアドレスのデータを保持しているノード、例えば、ノードPEh宛に、排他読み出し要求メッセージを相互結合網10’を介して送信する。
【0027】
排他読み出し要求メッセージを受けたノードPEhの一貫性維持制御部55’は、該当するアドレスのデータについての最新の値がノードPEhの主メモリ30’に存在するかどうかを調べる。該当するアドレスのデータの最新の値が主メモリ30’に存在する場合、すなわち状態が「C」である場合には、ノードPE1に相互結合網10’を介して主メモリ30’に格納されているデータを相互結合網10’を介して送信する。
【0028】
ノードPE1以外のノードがキャッシュメモリ21’に当該データのコピー を保持している場合には、そのデータのコピーが存在するノードPE1以外の ノードのすべて(ノードPEkとする)に、無効要求メッセージを相互結合網10’を介して送信する。さらに、主メモリ30’の当該データの状態を「M」に更新し、保持ノード情報をノードPE1のみとする。なお、ノードPE1に 送信されるデータには、無効要求メッセージを送信したノードPEkの数が付加される。
【0029】
無効要求メッセージを受けたノードPEkの一貫性維持制御部55’は、キャッシュメモリ21’の当該データの状態を「I」に更新し、Ack(肯定応答)メッセージを相互結合網10’を介してノードPE1に送信する。
【0030】
ノードPEhからのデータを受信したノードPE1の一貫性維持制御部55’は、キャッシュメモリ21’にそのデータをコピーする。また、データに付加されていたノードPEkの数の分だけのAckメッセージを受信するのを待つ。ノードPEkの数の分だけのAckメッセージを受信すると、キャッシュメモリ21’の当該データをプロセッサ20’が行ったストアアクセスのデータに更新する。さらに、キャッシュメモリ21の当該データの状態を「D」に更新し、プロセッサ20’にアクセス完了を通知して処理を終了する。
【0031】
一方、排他読み出し要求メッセージを受けたノードPEhにおいて、該当するアドレスのデータの最新の値が主メモリ30’に存在しない場合、すなわち状態が「M」である場合には、保持ノード情報を参照して、最新のデータを保持するノード、例えば、ノードPErに排他読み出し要求メッセージを相互結合網10を介して送信する。
【0032】
排他読み出し要求メッセージを受けたノードPErの一貫性維持制御部55’は、キャッシュメモリ21’に状態が「D」のデータが存在するかどうかを調べる。キャッシュメモリ21’に状態が「D」のデータが存在しない場合には、相互結合網10を介してNakメッセージを送る。
【0033】
Nakメッセージを受け取ったノードPE1の一貫性維持制御部55’は、再度ノードPEhに対して、排他読み出し要求メッセージを送信する。以降、同様の処理が繰り返される。
【0034】
一方、排他読み出し要求メッセージを受けたノードPErにおいて、キャッ シュメモリ21’に状態が「D」のデータが存在する場合には、キャッシュメモリ21に格納されているデータを相互結合網10’を介してノードPE1に送信する。また、保持ノード更新要求メッセージを相互結合網10’を介してノード PEhに送信すると共に、キャッシュメモリ21’の当該データの状態を「I」に更新する。
【0035】
保持ノード更新要求メッセージを受けたノードPEhの一貫性維持制御部55’は、主メモリ30’のデータを、ノードPE1のみが保持しているとして 保持ノード情報を更新し、Ackメッセージを相互結合網10’を介してノードPE1に送信する。
【0036】
ノードPErからのデータを受信したノードPE1の一貫性維持制御部55は、キャッシュメモリ21’にそのデータをコピーする。また、ノードPEhからのAckメッセージを受信するのを待つ。ノードPEhからのAckメッセージを受信すると、キャッシュメモリ21’の当該データをプロセッサ20’が行ったストアアクセスのデータに更新する。さらに、キャッシュメモリ21’の当該データの状態を「D」に更新し、プロセッサ20’にアクセス完了を応答して処理を終了する。
【0037】
【発明が解決しようとする課題】
しかしながら、従来のマルチプロセッサシステム1’には、プロセッサ20’の読み出しによりアクセスしたキャッシュメモリ21’にデータが存在しないキャッシュミスが発生した場合に,キャッ シュメモリ21’からプロセッサ20にデータが応答されるまでに長い時間がかかってしまうという問題点があった。また、主メモリ30’に最新のデータが存在しない場合、最新のデータを保持す るノードに要求を転送する必要が生じ、最新のデータが主メモリ30’に存在す る場合と比較して、プロセッサ20’が要求を出してからデータを受け取るまで の時間が長くなってしまうという問題点があった。
【0038】
本発明は上述したような従来の技術が有する問題に鑑みなされたものであって、読み出しによるキャッシュミスが発生した場合のデータ一貫性維持制御に要する時間を短縮した、データ一貫性維持制御方法を提供するマルチプロセッサシステムおよびマルチプロセッサシステムにおけるデータの一貫性維持方法を提供することを目的とする。
【0039】
【課題を解決する手段】
相互結合網を介して互いに接続された複数のノードから構成されるマルチプロセッサシステムであって、
前記複数のノードはそれぞれデータが格納される主メモリと、
前記複数のノードのいずれかが備える主メモリに格納されているデータの一部が記憶される、前記主メモリよりも高速アクセスが可能なキャッシュメモリと、
データのアクセス要求を発行するプロセッサと、
前記主メモリのデータがシステム内でどういう状態にあるのかを管理し、前記キャッシュッメモリにあるデータのコピーの状態を管理し、前記プロセッサが所定のアドレスのデータに対してロード及びストアアクセスを行ったとき、メモリアクセスに応じてノード間でメッセージをやり取りし、それらの状態を変更しまたデータの転送を行う機能を有する一貫性維持制御とを有し、
前記一貫性維持制御部は、
前記キャッシュメモリに記憶されているデータの状態が記憶されるタグメモリと、
前記主メモリに記憶されているデータの状態が記憶されるディレクトリメモリと、
前記プロセッサからのアクセス要求、前記複数のノードが備えるホームアクセス制御部が発行する要求や応答を受け、前記キャッシュメモリやタグメモリに対しては一貫性維持のために必要な処理を行い、前記プロセッサに対してはアクセス要求に対する応答を行うローカルアクセス制御部と、
前記複数のノードが備える前記ローカルアクセス制御部が発行する要求や応答を受けて、前記主メモリやディレクトリメモリに対して一貫性維持のために必要な処理を行い、前記ローカルアクセス制御部に要求や応答を発行するホームアクセス制御部と、
前記プロセッサが同時に発行可能なメモリアクセスの最大数に対応するエントリを有するリクエスト管理テーブルと、
書き戻しブロック選択手段とを具備し、
前記書き戻しブロック選択手段は前記ローカルアクセス制御部が指定するアドレスを登録するアドレス登録手段と、前記アドレス登録手段により登録されたアドレスを複数保持するアドレス保持手段と、前記アドレス保持手段に格納された複数のアドレスから一つを選択して前記ローカルアクセス制御部に出力し、データの書き戻しを要求する書き戻し要求手段と、前記ローカルアクセス制御部の指示に従い前記書き戻し要求手段が選択しているアドレスを前記アドレス保持手段から削除するアドレス削除手段とを有し、
前記タグメモリに格納される状態は、少なくとも共有状態と専有状態の2状態を含み、
前記ディレクトリメモリに格納される状態は、一致状態と不一致状態の2状態を含み、またディレクトリメモリはさらにどのノードのキャッシュにコピーが存在するかを示す情報を保持し、
前記ローカルアクセス制御部は、タグメモリの状態が共有状態を示すブロックに対して書き込みが行われた時に、一貫性維持制御のために書き込み要求を発行する手段を有し、
前記ホームアクセス制御部は、前記書き込み要求を受けて、ディレクトリメモリの状態が一致状態にあり当該書き込み要求を発行したノード以外にコピーを保持するノードが存在する場合は共有状態と判定し、その判定情報を前記ローカルアクセス制御部への応答に付加する手段を有し、
前記ローカルアクセス制御部は当該応答を受けてタグメモリの状態を共有状態から専有状態に遷移させ、且つ共有状態にあるという応答であった場合は前記書き戻しブロック選択手段に当該アクセスのアドレスの登録を指示する手段を有し、
前記ローカルアクセス制御部はさらに、前記書き戻しブロック選択手段の要求に応じて、データの書き戻し処理を行う手段を有し、前記データの書き戻し処理では、タグメモリの状態を専有状態から共有状態に遷移させ、
前記ホームアクセス制御部は、前記ローカルアクセス制御部から書き戻し要求を受けて、ディレクトリメモリの状態を一致状態に更新する手段を有することを特徴とする。
【0040】
また、前記ディレクトリメモリは、さらに書き戻し回数をカウントした値を保持し、
前記ホームアクセス制御部は、さらに前記ローカルアクセス制御部から書き戻し要求を受けて、ディレクトリメモリの状態を一致状態に更新するとともに書き戻し回数の値を更新する手段と、書き戻し回数の閾値を記憶するレジスタを有し、
前記ホームアクセス制御部における前記判定情報を前記ローカルアクセス制御部への応答に付加する手段は、書き込み要求を受けたときに、ディレクトリメモリの状態が一致状態にあり当該書き込み要求を発行したノード以外にコピーを保持するノードが存在する場合と、一致状態にあり当該書き込み要求を発行したノードのみがコピーを保持する状態にあり書き戻し回数が閾値未満の場合は共有状態と判定し、その判定情報を前記ローカルアクセス制御部への応答に付加することを特徴とする。
【0050】
上記のような構成をとることにより、共有しているノードの主メモリのブロックに対してノードのプロセッサが書き込みを行い、ノードのキャッシュメモリを専有する状態になっても、ノードの書き戻しブロック選択手段およびローカルアクセス制御部が働き、専有しているブロックをノードの主メモリに書き戻す。それにより、ノード以外のノードのプロセッサがロードアクセスしてキャッシュメモリにブロックがなかったときに、ノードの主メモリからブロックを読み出すことができるので、ロードアクセスのレイテンシを 短縮できる。
【0051】
また、ディレクトリメモリに、共有しているか否かを示す情報を持たせ、書き込みの要求を受けたホームアクセス制御部が要求を出したノードに送信する応答メッセージに、共有していたかいなかったかの情報を持たせ、それにより書き戻しブロック選択手段が選択する書き戻しを行うブロックの対象とするか否かを決めているので、共有していないブロックに関しては書き戻しが行われない。
【0052】
さらに、ディレクトリメモリに、書き戻しを受けた回数および共有していることを示す状態であっても実際にブロックを保持するノードが一つの場合はそのノードを特定することができる情報を持たせ、またホームアクセス制御部が書き戻しを何回まで許容するかを決める閾値を持たせ、それにより、書き込みの要求をうけたホームアクセス制御部が当該ブロックの状態が共有していることを示していても、書き込み要求を出したノードのみが ブロックを保持している状態でかつ閾値と書き戻しを受けた回数が一致する場合は、要求を出したノードに送信する応答メッセージに共有していない旨の情報を持たせ、書き戻しブロック選択手段の対象から外すことによる。これにより、共有していたブロックが時間の経過とともに共有されなくなったことを検出し、無駄な書き戻しが行われるのを防ぐので、書き戻しによりメッセージが増加するのを防ぐことができる。
【0053】
【発明の実施の形態】
次に、本発明の実施の形態を図面を参照して説明する。
【0054】
キャッシュメモリを備えたマルチプロセッサシステムにおいては、あるノードのプロセッサから主メモリ内へのロード/ストアアクセス要求が出されると、まずキャッシュメモリを参照し、キャッシュメモリに要求されたデータが存在すればすぐにそのデータをプロセッサに転送する。キャッシュメモリにもしデータが存在しなければ、要求されたデータを含む適当な大きさのブロックを主メモリから読み出し(ロード)、キャッシュメモリへ格納する。
【0055】
一方、プロセッサの要求が書き込み(ストア)の場合には、キャッシュメモリにそのデータが存在すれば、キャッシュメモリの内容だけでなく同時に主メモリの方も書き換えを行って、主メモリとキャッシュメモリ両方に常に最新のデータが格納されているようにするストアスルー方式(あるいは、ライトスルー、ストアイミディエイト方式)と、とりあえずキャッシュメモリの内容だけ書き換え、キャッシュメモリのブロックの割り当て換えの際に主メモリへ書き戻すストアバック(あるいは、ライトバック、スワップ方式)とがある。
【0056】
後者のストアバック方式を採用した場合、キャッシュメモリの内容だけを書き換え後で主メモリに書き戻す方法をとっているため、主メモリの内容とキャッシュメモリの内容が一致しなくなって、コヒーレンシー(データの一貫性維持)が維持されなくなることがある。本実施例は、主メモリとキャッシュメモリのデータの一貫性を維持しようとうするものである。
【0057】
図1は、本発明の第1の実施例に係わる疎結合型のマルチプロセッサシステム1の構成を示すブロック図である。
【0058】
図1に示すように、本実施例のマルチプロセッサシステム1は、複数のノードPE0〜PEn−1と、各ノードを結合し、ノード間でやり取りされるメッセージを配信する相互結合網10と、から構成されている。なお、本実施例では、ノード数をn=1024とする。
【0059】
図2は、図1に示したノードPEi(i=0〜n−1)の内部構成を示すブロック図である。
【0060】
図2に示すように、ノードPEi(i=0〜n−1)は、それぞれプロセッサ20と、主メモリ30と、キャッシュメモリ21と、一貫性維持制御部16と、を有する。
【0061】
プロセッサ20は、メモリアクセスを行ったとき、そのメモリアクセスに関する情報、ここではアクセスの種類(ロードかストアか)、アドレス、データ等の情報を出力する。プロセッサ20は、メモリアクセス対してロードアクセスであればデータを、ストアアクセスであれば完了信号を受け取ることにより、そのメモリアクセスがプロセッサ20の外部で処理されたことを確認する。プロセッサ20は、前のメモリアクセスが外部で処理されたことを確認する前に次のメモリアクセスを発行することができる。このため、各メモリアクセスにはidが付加され、アクセスの種類、アドレス、データ、キャッシュアルゴリズムの種類と共にidが出力される。プロセッサ20への応答にもこのidが付加されどのメモリアクセスに対する応答であるかが識別できる。
【0062】
ちなみに、ロードとはキャッシュメモリ21からのデータの読み出しを、ストアとはキャッシュメモリ21へのデータの書き込みをいう。
【0063】
ここで、アクセスの種類は、1ビットで表され、「0」がロード、「1」がストアアクセスを表すものとする。また、アドレスは40ビット、データは64ビットで構成されるものとする。プロセッサ20は、最大4個のメモリアクセスを同時に発行することができ、2ビットのidで区別されるものとする。なお、以降の説明では、アドレスの最下位ビットを第0ビット、最上位ビットを第39ビットとする。また、主メモリ30は、64ビット幅×2Mエントリ=512Mバイト(1M =1024×1024)であるとする。
【0064】
プロセッサ20が出力するアドレスは、その上位ビットでどのノードPEiの主メモリ30に格納されたデータであるかを表し、その下位ビットで主メモリ30でのオフセットを表す。ここでは、プロセッサ20が出力するアドレス40ビットのうち、第39ビットから第30ビットまでの上位10ビットがどのノードPEiの主メモリ30のデータであるかを表し、第29ビットか ら第0ビットまでの下位30ビットが各主メモリ30でのオフセットとなる。
【0065】
キャッシュメモリ21は、主メモリ30よりも少量ではあるが高速なメモリで構成される。これにより、データがキャッシュメモリ21に存在した場合、プロセッサ20のメモリアクセスに対して早く応答することができ、メモリアクセスに要する時間を短縮することができる。キャッシュメモリ21は、64ビット幅×128Kエントリ=1Mバイト(1K=1024)であるとする。また、キャッシュメモリ21と主メモリ30との間のデータの転送は、ブロックと呼ばれる固定サイズ(以降128バイトとする)で行われる。
【0066】
このマルチプロセッサシステム1では、主メモリ30にあるデータのコピーが複数のノードPEiのキャッシュメモリ21に存在することがある。このため、それらコピーや主メモリ30のデータとの間でデータの一貫性を維持する制御が必要となる。一貫性維持制御部16は、このような一貫性の維持の制御を行うもので、キャッシュメモリ21にあるデータのコピーの状態や主メモリのデータがシステム内でどういう状態にあるのかを管理する。一貫性維持制御部16は、メモリアクセスに応じてノードPEi間でメッセージをやり取りし、それらの状態を変更したりデータの転送を行う機能を有する。一貫性維持制御部16の構成について、さらに詳しく後述する。
【0067】
図1に示す相互結合網10は、メッセージに含まれるルーティング情報に基づきあるノードPEiからあるノードPEiにメッセージを配送する機能を有する。このルーティング情報として、ここでは宛先ノード番号が必要十分な情報であるものとする。また、あるノードからあるノードへのパスは一つであり、同じパスを通るメッセージ間で追い越しは発生しないものとする。ただし、送信ノードまたは受信ノードどちらか一方でも異なる場合には、メッセージ間での到着順序は保証されない。
【0068】
次に、相互結合網10を介してノードPEi間でやり取りされるメッセー ジについて説明する。
【0069】
図3(a)は、メモリアクセスが行われたノードPEiから主メモリ30にデータを保持するノードPEiへ送信される要求メッセージを示す図であり、図3(b)は、主メモリ30にデータを保持するノードPEiから当該データのコピーをキャッシュメモリ21に保持するノードPEiへ送信される要求メッセージを示す図であり、図3(c)は、データのコピーをキャッシュッメモリ21に保持するノードPEiから主メモリ30にデータを保持するノードPEiへ送信される報告メッセージを示す図であり、図3(d)は、主メモリ30にデータを保持するノードPEiからメモリアクセスが行われたノードPEiへ送信されるメモリアクセス完了メッセージを示す図である。
【0070】
メッセージは、「BlkRdSh」,「BlkRdEx」,「Upgrade」,「BlkWr」,「RpBack」,「Ack」,「AckData」,「IntvSh」,「IntvEx」,「Inv」,「CmpDatSh」,「CmpDatEx」,「CmpSh」,「CmpEx」,「NCmp」の15種類のメッセージがある。これらのメッセージは、ブロック共有/排他読み出し/書き込みメッセージ群である。
【0071】
このうち、「BlkRdSh」,「BlkRdEx」,「Upgrade」,「BlkWr」,「RpBack」の5種類のメッセージは、図3(a)に示すように、メモリアクセスが行われたノードPEiから、主メモリ30にデータを保持するノードPEiへ送信される要求メッセージである。
【0072】
BlkRdShメッセージはブロック共有読み出し要求メッセージ、BlkRdExメッセージはブロック排他読み出しメッセージ、Upgradeメッセージはオーナーシップ獲得要求メッセージ、BlkWrおよびRpBackメッセージはブロック書き込み要求メッセージである。
【0073】
「IntvSh」,「IntvEx」,「Inv」の3種類のメッセージは、図3(b)に示すように、主メモリ30にデータを保持するノードPEiから当該データのコピーをキャッシュメモリ21に保持するノードPEiへ送信される要求メッセージである。これらのメッセージは、BlkRdSh,BlkRdEx,Upgradeメッセージから派生する他のノードPEiのキャッメモリ21に対する要求メッセージである。
【0074】
IntvShメッセージは共有読み出し要求メッセージ、IntvExメッセージは排他読み出し要求メッセージ、Invは無効化要求メッセージである。
【0075】
「Ack」,「AckData」の2種類のメッセージは、図3(c)に示すように、主メモリのデータのコピーをキャッシュメモリ21に保持するノードPEiから主メモリ30にデータを保持するノードPEiへ送信される報告メッセージである。Ack,AckDataメッセージは、IntvSh,IntvEx,Invメッセージに対する応答メッセージである。
【0076】
Ackメッセージは応答、AckDataメッセージはデータ付き応答メッセージである。
【0077】
「CmpDatSh」,「CmpDatEx」,「CmpSh」,「CmpEx」,「NCmp」の5種類のメッセージは、図3(d)に示すように、主メモリ30にデータを保持するノードPEiからメモリアクセスが行われたノードPEiへ送信されるメモリアクセス完了応答メッセージである。
【0078】
CmpDatShメッセージはBlkRDShメッセージに対する共有応答メッセージ、CmpDatExメッセージはBlkRdExメッセージに対する排他応答メッセージ、NCmpメッセージはBlkRDShメッセージおよびBlkRdExメッセージに対する未完了応答メッセージである。
【0079】
図5(a)は、基本メッセージの構成を示す図であり、図5(b)は、ブロックデータ付メッセージの構成を示す図である。
【0080】
次に、上述した各メッセージの構成について、図3(a),(b),(c),(d)および図5(a),(b)を参照しながら説明する。
【0081】
メッセージは、基本メッセージとブロックデータ付きメッセージに分類される。「BlkRdSh」,「BlkRdEx」,「Upgrade」,「Ack」,「IntvSh」,「IntvEx」,「Inv」,「CmpSh」,「CmpEx」,「NCmp」の10種類のメッセージは基本メッセージ である。「BlkWr」,「RpBack」,「AckData」,「CmpDatSh」,「CmpDatEx」の5種類のメッセージはブロックデータ付きのメッセージである。
【0082】
基本メッセージは、図5(a)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(計15個なので4ビットで表現)、要求元ノード番号(10ビット)、mid(2ビット)、アドレス(40ビット)の計66ビットで構成される。
【0083】
ブロックデータ付きメッセージは、図5(b)に示すように、宛先ノード番号(10ビット)、メッセージの種類を表すコード(4ビット)、要求元ノード番号(10ビット)、mid(2ビット)、アドレス(40ビット)に加えて、ブロックサイズのデータ(128バイト)の計66ビット+128バイトで構成される。
【0084】
以下、図2に示した一貫性維持制御部16について、さらに詳しく説明する。一貫性維持制御部16は、タグメモリ22と、リクエスト管理テーブル24と、ローカルアクセス制御部25と、書き戻しブロック選択手段26と、ホームアクセス制御部27と、ディレクトリメモリ31と、メッセージ送信部35と、メッセージ受信部36と、を有する。
【0085】
ディレクトリメモリ31は、主メモリ30に格納されているデータについて、各ブロックごとに、その状態を表す情報を格納している。ディレクトリメモリ31に格納されている各ブロックの情報は、ブロックの状態、コピーをキャッシュメモリ21に保持しているノードの情報(以降、保持ノード情報と呼ぶ)、保持ノード情報の形式、書き戻し回数である。
【0086】
ブロックの状態は、「C」,「M」,「RSP」,「REP」,「UP」 の5つのうちのいずれかで表され、例えば、「C」は「000」,「M」は 「001」,「RSP」は「100」,「REP」は「101」,「UP」は 「110」というように3ビットでコーディングされる。
【0087】
ブロックの状態として「C」は、0以上の複数のノードPEiのキャッシュメモリ21にデータのコピーが存在する状態を表す。このとき、キャッシュメモリ21のコピーと主メモリ30のデータの値は同じである。「M」は、1つのノードPEiのキャッシュメモリ21のみがデータのコピーを保持している状態を表す。このとき、キャッシュメモリ21のコピーの値と主メモリ30のデータの値は異なり、コピーの値が最新の値である可能性がある。「RSP」,「REP」,「UP」は、あるメモリアクセスから派生した一貫性維持処理の要求メッセージを受け、この要求メッセージに応答して一貫性維持の処理をしている最中であることを示して いる。
【0088】
本実施例に係わる保持ノード情報は、次の3つの形式をとる。
【0089】
(1)ノードPEiを特定するノード番号(10ビットで表される)を一つ保持するポインタ形式。
【0090】
(2)コースベクタ形式(ここでは8ビット)。
【0091】
(3)キャッシュメモリ21にコピーを保持するノード数(10ビットで表 し、0から1023までをカウントする)を管理するカウンタ形式。
【0092】
コースベクタ形式では、次のように保持ノードが管理される。
【0093】
ノードPEiをいくつかのグループに分割し、グループ数分のビットで保持者(ノード)を管理する。各ビットを立てるかどうかは、各ビットに対応するグループの中に一つでもコピーを保持するノードPEiが存在するかどうか によって決定される。ここでは、これを8ビットで表し、第0ビットがノードPE0からノードPE127、第1ビットがノードPE128からノードPE255、.....、第7ビットがノードPE896からノードPE1023にそれぞれ対応する。
【0094】
状態が「M」,「RSP」の場合ポインタ形式で保持ノードを管理する。「REP」,「UP」の場合はカウンタ形式で保持ノードを管理する。「C」の場合は保持するノードの数によりポインタ形式とコースベクタ形式を切り替える。そのため、ディレクトリメモリ31には各ブロックごとにどちらの形式で現在管理しているかを示す2ビット(例えば、「00」ならコースベクタ形式、「01」ならポインタ形式、「10」ならカウンタ形式)も保持される。
【0095】
書き戻し回数は、書き戻しを受けた回数を記録するものである。ここでは1ビットからなるものとし、「0」から「1」までの数をカウントできるものとする。
【0096】
この構成の場合、ディレクトリメモリ31は16ビット(状態3ビット、保持ノード情報10ビット、保持形式ビット2ビット、書き戻し回数1ビット)幅4M(主メモリサイズ/ブロックサイズ)エントリ分のデータを保持するメモリとなる。ディレクトリメモリ31に格納されている各エントリの初期値は、状態は「C」、保持ノード情報は「0x000」(0xは16進表記)、保持形式はコースベクタ形式で、書き戻し回数は「0」となる。
【0097】
タグメモリ22は、キャッシュメモリ21に格納されているデータについて、その状態を表す情報をブロック単位で保持している。タグメモリ22に格納されている各ブロックの情報は、ブロックの状態およびタグアドレスである。ブロックの状態は、図6を再び参照すると、「I」,「S」,「E」,「D」の4つのいずれかによって表され、それぞれ対応するブロックがどの状態にあるかを示している。例えば、ブロックの状態は、「I」は「00」,「S」は「01」,「E」は「1 0」,「D」は「11」というように2ビットでコーディングされる。
【0098】
ブロックの状態として「I」は、一貫性が維持された有効なデータのコピーが存在しない状態を示す。「S」は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ21にも有効なコピーが存在する可能性がある、という状態を示す。「E」は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ21には 有効なコピーが存在せず、かつ主メモリ30のデータの値と同じ状態を示す。「D」は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ21には有効なコピーが存在せず、かつ主メモリ30のデータの値と異なる状態を示す。
【0099】
タグアドレスは、対応するブロックがどのアドレスのデータであるかを示す。ここでは、あるアドレスのデータがキャッシュメモリ21のどのブロックに格納されるかが一意に決定されるダイレクトマップ方式でキャッシュメモリ21が制御されている。この場合、キャッシュメモリ21のサイズが1Mバイトであるので、アドレス40ビットのうち第39ビットから第20ビットまでの上位20ビットがタグアドレスとなる。
【0100】
この構成の場合、タグメモリ22は22ビット幅8K(=キャッシュメモリサイズ÷ブロックサイズ)エントリ分のデータを保持するメモリとなる。タグメモリ22に格納されている各エントリの初期値は、状態は「I」、タグアドレスは0x00000となる。
【0101】
図6は、ディレクトリメモリ31とタグメモリ22およびこのメモリブロックの状態を示す図である。
【0102】
メッセージ送信部35およびメッセージ受信部36は、それぞれ相互結合網10と接続されており、ノードPEiから相互結合網10へのメッセージの送信、および相互結合網10からのメッセージの受信を行う。
【0103】
メッセージ送信部35は、ローカルアクセス制御部25およびホームアクセス制御部27の2モジュールと接続されており、各モジュールが出力するメッセージを調停し、取り込む。
【0104】
メッセージ受信部36は、ローカルアクセス制御部25およびホームアクセス制御部27の2モジュールと接続しており、相互結合網10から受け取ったメッセージの種類に応じて上記2モジュールにメッセージを出力する。受け取ったメッセージの種類が「BlkRdSh」,「BlkRdEx」,「Upgrade」,「BlkWr」,「RpBack」,「Ack」,「AckData」の場合、メッセージの出力先はホームアクセス制御部27となる。「IntvSh」,「IntvEx」,「Inv」,「CmpDatSh」,「CmpDatEx」,「CmpSh」,「CmpEx」,「NCmp」の場 合、メッセージの出力先はローカルアクセス制御部25となる。
【0105】
リクエスト管理テーブル24は、プロセッサ20が同時に発行可能なメモリアクセスの最大数(ここでは4)に対応して4エントリからなるテーブルである。各エントリは、エントリが有効かどうかを示す有効ビット(1ビット)、アクセスの種類(1ビット)、アドレス(40ビット)、データ(64ビット) の計106ビットからなる。
【0106】
リクエスト管理テーブル24は次のような機能を有する。
【0107】
(a)ローカルアクセス制御部25の指示に従い、ローカルアクセス制御部25が出力する上記設定データ(106ビット)を、ローカルアクセス制御部25が指定するエントリに書き込む機能。
【0108】
(b)ローカルアクセス制御部25が指定するエントリの内容をローカルアクセス制御部25に出力する機能。
【0109】
ローカルアクセス制御部25は、プロセッサ20が出力するメモリアクセス、ホームアクセス制御部27およびメッセージ受信部36が出力するメッセージを調停して選択し、データ一貫性維持のための処理を行う機能を有する。ローカルアクセス制御部25が行うデータ一貫性維持のための処理には、タグメモリ22へのアクセス、キャッシュメモリ21へのアクセス、リクエスト管理テーブル24へのアクセス、書き戻しブロック選択手段26へのアクセス、プロセッサ20への応答、メッセージ送信部35あるいはホームアクセス制御部27へのメッセージの出力がある。
【0110】
図4は、書き戻しブロック制御手段26の内部構成を示す図である。
【0111】
書き戻しブロック選択手段26は、ローカルアクセス制御部25が指定するアドレスを登録するアドレス登録手段110と、登録されたアドレスを複数保持するアドレス保持手段111と、アドレス保持手段に格納された複数のアドレスから一つを選択しローカルアクセス制御部25に出力し書き戻しを要求するする書き戻し要求手段112と、ローカルアクセス制御部25の指示に従い、書き戻し要求手段が選択しているエントリを削除するアドレス削除手段113と、を有する。
【0112】
ここで、アドレス保持手段111は2エントリを格納したFIFO(First In First Out)で構成される。保持するアドレスは第39ビットから第7ビットまでの33ビットである。アドレス登録手段110は、アドレス保持手段111の各エントリとローカルアクセス制御部25が指定するアドレスの第39ビットから第7ビットを比較し、一致するエントリがない場合アドレス保持手段111に登録する。書き戻し要求手段112はFIFOがいっぱいのときにFIFOの先頭エントリのアドレスをローカルアクセス制御部25に出力し、書き戻しを要求する。このとき、アドレスの第6ビットから第0ビットを0で補完して出力する。また、アドレス削除手段113がエントリ削除の指示を受けると、FIFOの先頭エントリを削除する。
【0113】
ホームアクセス制御部27は、ローカルアクセス制御部25およびメッセージ受信部36が出力するメッセージを受け、データ一貫性維持のための処を行う機能を有する。ホームアクセス制御部27が行うデータ一貫性維持のための処理には、ディレクトリメモリ31へのアクセス、主メモリ30へのアクセス、ローカルアクセス制御部25あるいはメッセージ送信部33へのメッセージ出力がある。
【0114】
また、ホームアクセス制御部27は、書き戻し回数を制限する閾値を保持している。この閾値と、ディレクトリメモリ31に格納されている書き戻し回数と同じビット数(ここでは1ビット)からなる。ここで、この閾値はプロセッサ20から設定可能なものであっても構わないし、固定的に値が決まっていても構わない。ここでは、固定的に値「1」が書き込まれているとする。
【0115】
図7は、本実施例のノードPEi40とその構成要素である主メモリ41およびキャッシュメモリ42の状態遷移を示す図である。
【0116】
図7は、本実施例のノードPEi40とその構成要素である主メモリ41およびキャッシュメモリ42の状態遷移を示す図である。
【0117】
図7に示すように、ノードPEi40にメモリアクセスがあると、メモリアクセスを受けたノードPEi40は、主メモリ41に対し要求メッセージを発行する。主メモリ41はさらにキャッシュメモリ42に対し要求を発行し、キャッシュメモリ42中に所望のデータが存在すれば、それを主メモリ41に報告メッセージで通知する。そして、主メモリ41からノードPEi40に完了メッセージを返す。
【0118】
以下、図8〜図13を参照して、ローカルアクセス制御部25の動作について説明する。本実施例は、原則的に図7に示した流れに従って動作する。
【0119】
図8(a)は、プロセッサ20が出力するメモリアクセスを受けて、ローカルアクセス制御部25が実行する処理を示すフローチャートであり、図8(b9は、図8(a)の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。ローカルアクセス制御部25は、図8(b)の関係を示すテーブルを格納している。
【0120】
このとき、ローカルアクセス制御部25は、プロセッサ20からアクセスの種類(1ビット)、アドレス(40ビット)、id(2ビット)、データ(64ビット)の情報を受ける。
【0121】
まず、ステップS111で、ローカルアクセス制御部25は、タグメモリ22にアクセスし、該当するブロックのデータ(状態およびタグアドレス)を読み出す。ここでは、8K(1K=1024)あるエントリのうち、アドレスの第19ビットから第7ビットの13ビットで指定されるエントリのデータを読み出す。アクセスの種類、状態、アドレスの第39ビットから第20ビットまでの上位20ビットとタグアドレス(20ビット)が一致するかどうかの3つの情報から、後述する「AA」〜「AD」の処理タイプのうちのどの処理タイプとなるかを決定する。この3情報からは、処理タイプが「AA」または「AB」の場合にそれぞれステップS113およびS115で出力されるメッセージの種類、およびステップS118で更新されるブロックの状態(タグアドレスはアドレスの上位20ビットに必ず更新される)も決定する。
【0122】
ステップS112において決定された処理タイプが「AA」の場合、ステップS113に進む。
【0123】
ステップS113では、図8(b)に示すテーブルに従って生成するメッセージを決定する。メッセージの宛先ノード番号(10ビット)には、アドレスの第39ビットから第30ビットまでの上位10ビットが、要求元ノード番号(10ビット)には、当該ノードPEiのノード番号(10ビット)が、それぞれ用いられる。midとアドレスには、プロセッサ20から得たidとアドレスがそれぞれ用いられる。このとき、生成したメッセージをメッセージ送信部35へ出力するか、あるいはホームアクセス制御部27へ出力するかを次のようにして決定する。宛先ノード番号と当該ノードPEiのノード番号とを比較し、その結果が不一致の場合はメッセージをメッセージ送信部35へ出力し、一致の場合はホームアクセス制御部27へ出力する。同時にリクエスト管理テーブル24への登録も行う。ローカルアクセス制御部25は、有効ビットを「1」、受けたメモリアクセスに付加されていたアクセスの種類、アドレスおよびデータを設定データとしてリクエスト管理テーブル24に出力し、受けたメモリアクセスに付加されていたid番目が示すエントリ(0〜3)に設定する。ステップS113の処理が終了すると、ステップS118に進む。
【0124】
ステップS112において決定された処理タイプが「AB」であった場合、ステップS114に進む。
【0125】
ステップS114では、プロセッサ20から得られたアドレスの第19ビットから第7ビットまでの13ビットに0x0から0xfまで変化する4ビットを下位に付加した17ビットで指定される合計16エントリ、128バイトのブロックデータをキャッシュメモリ21(128Kエントリ×64ビット幅)から読み出し、そのブロックデータを付加した「BlkWr」メッセージを生成する(ステップS114)。この「BlkWr」メッセージの宛先ノード番号には、タグアドレスの第19ビットから第10ビットまでの上位10ビットが用いられ、要求元ノード番号には、当該ノードPEiのノード番号が用いられる。また、アドレスは、タグアドレス(20ビット)を上位20ビットとし、下位20ビットにプロセッサ20から得られたアドレスの第19ビットから第0ビットまでの20ビットが用いられる。また、midはどんな値でも構わない。生成したメッセージをメッセージ送信部35とホームアクセス制御部27とのいずれに出力するかは、ステップS113の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップS114の処理が終了すると、ステップS115に進む。
【0126】
ステップS115で実行する処理は、ステップS113の処理と同じであるので、説明は省略する。ステップS115の処理が完了すると、ステップS118に進 む。
【0127】
ステップS112において決定された処理タイプが「AC」であった場合、ステップS116に進む。
【0128】
ステップS116では、プロセッサ20から得たアドレスの第19ビットから第3ビットまでの17ビットで指定されるエントリに対応する64ビットのデータをキャッシュメモリ21から読み出し、その読み出したデータをプロセッサ20に応答する。このとき、プロセッサ20から得たidも、同時にプロセッサ20に渡し、当該idのメモリアクセスに対する応答であることを示す。ステップS116の処理が完了すると、ステップS118に進む。
【0129】
ステップS112において決定された処理タイプが「AD」であった場合、ステップS117に進む。
【0130】
ステップS117では、プロセッサ20から得たアドレスの第19ビットから第3ビットまでの17ビットで指定されるキャッシュメモリ21のエントリに、プロセッサ20から得た64ビットのデータを書き込む。また、プロセッサ20に対してidを出力し、メモリアクセスの完了通知を行う。これにより、当該idのメモリアクセスに対する処理が完了した旨がプロセッサに通知される。ステップS117の処理が終わると、ステップS118に進む。
【0131】
ステップS118では、タグメモリ22を更新するための処理を行う。更新を行うエントリはステップS111においてアクセスしたエントリであり、状態は図8(b)で示されるブロックの次状態に、タグアドレスはプロセッサ20から得たアドレスの第39ビットから第20ビットまでの上位20ビットに、更新する。ステップS118の処理が終了すると、当該メモリアクセスに関する処理は終了する。
【0132】
図9(a)は、ホームアクセス制御部27あるいはメッセージ受信部36が出力するメッセージのうち、IntvSh,IntvEx,Upgradeの3種類のメッセージを受けた場合に、ローカルアクセス制御部25が実行する処理を示すフローチャートであり、図9(b)は、図9(a)の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。ローカルアクセス制御部25は、図9(b)の関係を示すテーブルを格納している。まず、ステップS121で、メッセージに含まれるアドレスの値を用いてタグメモリ22に読み出しアクセスを行う。アクセスされるタグメモリ22のエントリは、アドレスの第19ビットから第7ビットまでの13ビットで指定される。これにより、該当するブロックの状態およびタグアドレスが読み出される。メッセージの種類、状態、およびメッセージに付加されていたアドレスの第39ビットから第20ビットまでの上位20ビットと タグアドレスが一致するかどうかの3つの情報から、後述する「BA」と「BB」のうちのどの処理タイプとなるかを決定する。また、上記3情報からは、ステップS123で出力するメッセージの種類、およびステップS125で更新するブロックの状態(タグアドレスの値は変更されない)も決定する。なお、上記3情報と処理タイプ、メッセージの種類、ブロックの次状態の関係は、図9(b)に示すようになる。ローカルアクセス制御部25は、この関係を示すテーブルを格納している。
【0133】
ステップS122において決定された処理タイプが「BA」であった場合、ステップS123に進む。
【0134】
ステップS123では、図9(b)に示すテーブルに従って生成するメッセージを決定する。メッセージの生成時に、要求元ノード番号、アドレス、midには受けたメッセージのものがそのまま用いられる。また、宛先ノード番号には、受けたメッセージのアドレスの第39ビットから第30ビットまでの上位10ビットが用いられる。生成したメッセージをメッセージ送信部35とホームアクセス制御部27とのいずれに出力するかを、図8(a)のステップS113の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップS123の処理が終了すると、ステップS125に進む。
【0135】
ステップS122において決定された処理タイプが「BB」であった場合、ステップS124に進む。
【0136】
ステップS124では、受けたメッセージのアドレスの第19ビットから第7ビットまでの13ビットに0x0から0xfまで 変化する4ビットを下位に付加した17ビットで指定される合計16エントリ、128バイトのブロックデータを読み出す。図9(b)のテーブルに従って生成するメッセージを決定し、読み出したブロックデータを生成されたメッセージに付加し、送信部35を介して送信する。メッセージの生成時に、要求元ノード番号、アドレス、midには、受けたメッセージのものがそのまま用いられる。宛先ノード番号には、受けたメッセージのアドレスの第39ビットから第30ビットまでの上位10ビットが用いられる。ローカルアクセス制御部25は、生成したメッセージをメッセージ送信部38とホームアクセス制御部27とのいずれに出力するかを、ステップS113の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップS124の処理が終了すると、ステップS125に進む。
【0137】
ステップS125では、タグメモリ22の更新を行う。更新するエントリはステップS121においてアクセスしたエントリであり、状態は図8で示されるブロックの次状態に、タグアドレスはステップS121で読み出したタグアドレスに、それぞれ更新する。ステップS125の処理が終了すると、受けたメッセージに関する処理は終了する。
【0138】
図10および図11(a)は、ホームアクセス制御部27あるいはメッセージ受信部36が出力するメッセージのうち、「CmpDatSh」,「CmpDatEx」,「CmpSh」,「CmpEx」,「NCmp」の5種のメッセー ジを受けた場合に、ローカルアクセス制御部25が実行する処理を示すフロー チャートであり、図11(b)は、図10および図11(a)の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。ローカルアクセス制御部25は、図11(b)の関係を示すテーブルを格納している。
【0139】
まず、ステップS131で、メッセージに含まれるmidをリクエスト管理テーブル24に出力し、mid番目のエントリの情報を読み出す。これにより、リクエスト管理テーブル24から、有効ビット、アクセスの種類、アドレ ス、データ(64ビット)の情報を得る。ステップS131の処理が終了すると、ステップS132に進む。
【0140】
ステップS132では、受けたメッセージがデータ付きかどうか、即ち「CmpDatSh」あるいは「CmpDatEx」であるか、データ付きでない「CmpSh」,「CmpEx」,「NCmp」メッセージであるかを判定する(ステップS132)。データ付きのメッセージでないと判定された場合は、ステップS133に進む。一方、データ付きのメッセージであると判定された場合は、ステップS135に進む。
【0141】
ステップS133では、受けたメッセージが「NCmp」であるかどうか を判定する。「NCmp」でない場合は、ステップS137に進む。「NCm p」の場合、リクエスト管理テーブル24から得たアクセスの種類、アドレス、 データをプロセッサ20が出力したものとしてステップS111に進み、図8(a) のフローチャートに示した処理を再度行う(ステップS133)。
【0142】
ステップS134では、メッセージについていたブロックデータ(128バイト)を、キャッシュメモリ21の該当するブロックに書き込む。書き込まれるエントリは、リクエスト管理テーブル24から得られるアドレスの第19ビットから第7ビットまでの13ビットに0x0から0xfまで変化する4ビットを下位に付加した17ビットのインデックス信号で指定される16エントリ であり、それぞれ64ビットずつ順に書き込まれていく。ステップS134の 処理が終了すると、ステップS135に進む。
【0143】
ステップS135では、リクエスト管理テーブル24から得られるアクセスの種類がロードかストアかを調べる。アクセスの種類がストアであった場合には、ステップS136に進む。一方、アクセスの種類がロードであった場合には、ステップS138に進む。
【0144】
ステップS136では、リクエスト管理テーブル24から得られるデータ(64ビット)を、キャッシュメモリ21の該当するエントリに書き込む。書き込まれるエントリは、リクエスト管理テーブル24から得られるアドレスの 第19ビットから第3ビットまでの17ビットで指定される。また、リクエスト管理テーブル24に有効ビットを「0」にしたデータを出力し、その値を受けたメッセージのmidで指定するエントリに対して書き込む。これにより、リクエスト管理テーブル24から該当するエントリを削除する。さらにタグメモリ22を更新するための処理も行う。更新されるエントリは、リクエスト管理テーブル24より得られるアドレスの第19ビットから第7ビットまでの13ビットで特定される。更新するデータは、ブロックの状態およびタグアドレスである。ブロックの状態に関しては、図11(b)のテーブルに従って、アクセスの種類 (ここではストア)と受けたメッセージの種類によって決定される。タグアドレスには、リクエスト管理テーブル24から読み出したアドレスの第39ビットから第20ビットまでの上位20ビットが用いられる。さらに、プロセッサ20への完了通知も行う。このとき、メッセージに付加されていたmidがプロセッサ20へ出力され、どのメモリアクセスが完了したのかが通知される。ステップS136の処理が終了すると、ステップS137に進む。
【0145】
ステップS137では、受けたメッセージが「CmpSh」あるいは「CmpDatSh」かどうかを調べる。「Yes」の場合はステップS141に進み、書き戻し処理を行う。「No」の場合は受けたメッセージの処理を終了する。
【0146】
ステップS138では、リクエスト管理テーブル24から得られたアドレスの第19ビットから第3ビットまでの17ビットで指定されるキャッシュメモリ21のエントリの64ビットデータを読み出す。読み出された64ビットのデータは、midとともにプロセッサ20へ渡される。また、リクエスト管理テーブル24の更新およびタグメモリ22の更新も行う。これらの処理は、いずれもステップS136におけるそれぞれの処理と同一であり、説明は省略する。ステップS138の処理が終了すると、受けたメッセージの処理は終了する。
【0147】
ステップS141では、書き戻しブロック選択手段26が書き戻しを要求しているかどうかを調べる。書き戻しが要求されている場合はステップS142に進む。要求されていない場合はステップS146に進む。
【0148】
ステップS142では、書き戻しブロック選択手段26が出力するアドレスの第19ビットから第7ビットまでの13ビットで指定されるタグメモリ22のエントリのデータを読み出し、タグアドレスおよび状態を得る。
【0149】
ステップS143では、タグアドレス20ビットと書き戻しブロック選択手段26が出力するアドレスの上位20ビットが一致するかどうか、状態が「D」かどうかから書き戻しが必要かどうかを判断する。両方とも「Yes」の場合は書き戻しが必要と判断しステップS144に進み、どちらかでも「No」の場合はス テップS145に進む。
【0150】
ステップS144では、書き戻しブロック選択手段26から得られたアドレスの第19ビットから第7ビットまでの13ビットに0x0から0xfまで変化する4ビットを下位に付加した17ビットで指定される合計16エントリ、128バイトのブロックデータをキャッシュメモリ21から読み出し、そのブロックデータを付加した「RpBack」メッセージを生成する。この「RpBack」メッセージの宛先ノード番号には、書き戻しブロック選択手段26から得られたアドレスの上位10ビットが用いられ、要求元ノード番号には、当該ノードPEiのノード番号が用いられる。また、アドレスは、書き戻しブロック選択手段26から得られたアドレスが用いられる。また、midはどんな値でも構わない。生成したメッセージをメッセージ送信部35あるいはホームアクセス制御部27のいずれに出力するかを、図8(a)のステップS113の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。また、タグメモリ22の更新も行う。更新するエントリはステップS142において指定されたエントリであり、状態は「S」に、タグアドレスはステップS142で読み出したタグアドレスに、それぞれ更新する。ステップS144の処理が終了するとステップS145に進む。
【0151】
ステップS145では、書き戻しブロック選択手段26から受けた要求のアドレスを削除する。ステップS145の処理が終了するとステップS146に進む。
【0152】
ステップS146では、受けたメッセージ(「CmpSh」あるいは「CmpDatSh」)に付加されていたアドレスを書き戻しブロック選択手段26に登録する。この処理が終了すると、受けたメッセージの処理を終了する。
【0153】
以下、図12(a),(b)および図13を参照して、ホームアクセス制御部27の動作に ついて説明する。
【0154】
図12(a)は、ホームアクセス制御部27が実行する処理を示すフローチャー トであり、図12(b)と図13は、図12(a)のフローチャートの処理で用いられる、受けたメッセージの種類、ディレクトリメモリ読み出したブロックの状態、保持形式および保持ノード情報から求めるアンキャッシュド情報、書き戻し回数と閾値が一致するかどうかの4つの情報と、ディレクトリメモリに格納するブロックの状態、保持ノード情報に対する操作、書き戻し回数に対する操作、処理タイプ、メッセージの種類を示すテーブルである。
【0155】
図12(a)のフローチャートの処理において、ホームアクセス制御部27は、 受けたメッセージの種類、ディレクトリメモリ31から読み出したブロックの 状態、保持形式および保持ノード情報から求めるアンキャッシュド(Uncached)情報、書き戻し回数と閾値が一致するかどうかの4つの情報を元に、ステップS152で ディレクトリメモリ31に格納するブロックの状態、保持ノード情報に対する操作および保持形式、書き戻し回数に対する操作、ステップS153での処理タイプ、ステップS154、ステップS155、ステップS156で出力するメッセージの種類を決定する。
【0156】
ホームアクセス制御部27は、図12(b),図13に示すテーブルを格納している。なお、図12(b), 図13において「−−」は、いずれの値でも構わないことを示している。
【0157】
図12(b),図13に示すアンキャッシュド情報は、要求元ノードPEiを除く他のノードPEiがコピーを保持しているかどうかを求めるものである。アンキャッシュド情報は、保持ノード情報の形式によってそれぞれ求めかたが異なる。
【0158】
保持ノード情報がポインタ形式である場合は、受けたメッセージの要求元ノード番号10ビットと保持ノード情報10ビットが一致した場合に、アンキャッシュド情報は「Yes」となり、一致しなかった場合には「No」となる。
【0159】
保持ノード情報がコースベクタ形式の場合は、コースベクタが8ビットとも「0」の場合には、アンキャッシュド情報は「Yes」となり、1ビットでも「1」が立っている場合には「No」となる。
【0160】
保持ノード情報が、カウンタ形式の場合、保持ノード数から1引いた値が「0」になった場合には、アンキャッシュド情報は「Yes」となり、「0」にならなかった場合には「No」となる。
【0161】
次に、図12(a),図13に示した保持ノード情報に対する操作(図では、「保持ノード操作」と記す)について説明する。保持ノード情報に対する操作として、「set」,「add」,「count」,「dec」,「clean」,「none」の6つの操作がある。
【0162】
「set」は、受けたメッセージの要求元ノード番号を保持ノード番号として設定するものであり、ポインタ形式で保持される。このとき、保持形式もポインタ形式を示す「01」に設定される。
【0163】
「add」は、保持ノード番号形式とコースベクタ形式に対して行われる操作である。保持ノード番号形式の場合は読み出した保持ノード番号の上位3ビットをデコードして得られる8ビットを、コースベクタ形式の場合はそのままの8ビットを、要求元ノード番号の上位3ビットをデコードして得られる8ビットと論理和をとって得られる値に設定するものである。「add」操作を行うことにより保持形式はコースベクタ形式となる。それに従い、保持形式もコースベクタ形式を示す「00」に設定される。
【0164】
「count」は、保持ノード番号形式あるいはコースベクタ形式に対して行われる操作であり、読み出した保持ノード情報から、要求元ノード番号をのぞいて幾つのノードPEiがコピーを保持していることになるかを求める操作である。「count」は、ポインタ形式の場合は「1」に設定される。コースベクタ形式の場合は、8ビット中1が立っているビットの数と1ビットが表すノードPEiの数128とを掛けたもので求められる。ただし、要求元ノード番号に対応するビットが1の場合前記で求めた数から1を引いた値が設定される。これにより、保持形式もカウンタ形式を示す「10」に設定される。
【0165】
「dec」は、カウンタ形式に対して行われる操作である。読み出した保持ノード数から1を引いた値に設定するものである。
【0166】
「clean」は、10ビットをすべて「0」に設定するものである。この場合、保持形式はコースベクタ形式を示す「00」に設定される。
【0167】
「none」は、読み出した値に何の操作も加えずにそのまま設定するものである。保持形式の値も維持される。
【0168】
次に、図12(b),図13に示した書き戻し回数について説明する。書き戻し回数に関する操作には、値を「0」に初期化する操作と、現在の値に1を足し た値を次の値とする操作がある。図中「0」,「+1」がそれぞれに該当する。 またなにも記述がない場合は現在の値と同じ値を次の値とすることを示している。
【0169】
以下、図12(a)のフローチャートの処理について説明する。
【0170】
まず、ステップS151では、ホームアクセス制御部27は、該当するディレクトリメモリのエントリのデータ(状態、保持ノード情報、保持形式、書き戻し回数)を読み出す(ステップS151)。読み出されるエントリは、受けたメッセージのアドレスの第28ビットから第7ビットまでの22ビットでインデックスされるディレクトリメモリ31のデータである。ステップS151の処理が終了するとステップS152に進む。
【0171】
ステップS152では、ステップS151で読み出したディレクトリメモ リ31のエントリの値を更新する。状態は、図12(b),図13に示すテーブルに 従って決定される。保持ノード情報は、図12(b),図13に示した操作がステップS131で読み出した保持ノード情報に対して行われ求められる。また保持ノード形式もその操作によって前記のように決定する。書き戻し回数は、図12(b),図13に示す操作が行われ求められる。ステップS152で更新するエントリは、ステップS151でアクセスしたエントリと同一のエントリである。また、データ付きのメッセージであれば主メモリ30へブロックデータを書き込む処理も行う。ブロックデータが書き込まれる主メモリ30のエントリは、受けたメッセージのアドレスの第28ビットから第7ビットまでの22ビットに0x0から0xfまで変化する4ビットを下位に付加した26ビットで指定される合計16エントリ(128バイト)である。ステップS152の処理が終了すると、ステップS153に進む。
【0172】
ステップS153では、受けたメッセージの種類、ディレクトリメモリ31から読み出したブロックの状態、保持形式及び保持ノード情報から求めるアンキャッシュド情報、書き戻し回数と閾値の比較結果の4つの情報から処理タイプが「CA」〜「CC」のいずれになるかを判定する。処理タイプが「CA」であると判定された場合には、ステップS154に進む。ステップS153で処理タイプが「CB」であると判定された場合には、ステップS155に進む。ステップS153で処理タイプが「CC」であると判定された場合には、受けたメッセージの処理を終了する。
【0173】
ステップS154では、メッセージを必要であれば複数生成し出力する。出力先は、ローカルアクセス制御部25あるいはメッセージ送信部35のどちらかである。どちらに出力するかは、生成したメッセージの宛先ノード番号と、当該ノード番号との比較結果によって決められる。一致した場合はローカルア クセス制御部25となり、一致しない場合はメッセージ送信部35となる。出力するメッセージ(宛先ノード番号、メッセージの種類、アドレス、mid、要求元ノード番号)は、次のようにして生成される。メッセージの種類は、図12(b),図13に従って決定する。アドレス、mid、要求元ノード番号は、それぞれ受けたメッセージのアドレスとmidと要求元ノード番号となる。宛先ノード番号は、生成するメッセージの種類により異なる。以下にメッセージの種類による宛先ノード番号の求め方を示す。
【0174】
「CmpDatSh」,「CmpDatEx」,「CmpSh」,「CmpEx」,「NCmp」の場合、受けたメッセージの要求元ノード番号が宛先ノード番号となる。「IntvSh」,「IntvEx」の場合、ステップS141でディレクトリメモリ31から読み出した保持ノード情報の形式がポインタ形式でありその値がそのまま用いられる。以上のメッセージの場合、生成されるメッセージは一つのみである。
【0175】
「Inv」の場合、宛先ノード番号のみが異なる複数のメッセージが生成され送信される。この宛先ノード番号は、保持ノード情報に従って生成される。保持ノード情報はポインタ形式あるいはコースベクタ形式である。ポインタ形式の場合は前記「IntvSh」の場合と同様に保持ノード情報がそのまま用いられ一つのメッセージだけが生成される。コースベクタ形式の場合、この形式で表されている複数のノードPEi(要求元ノードを除く)に対して宛先の異なる同一のメッセージを生成し出力することとなる。例えば、保持ノード情報が「00110100」で、要求元ノード番号が「0010010110」の場合、宛先ノードはPE256〜PE383、PE512〜PE807の合計384ノードとなり、これらの384個のノードに「Inv」メッセージが送信される。また、例えば、保持ノード情報が「11001011」で、要求元ノード番号が「0010010110」の場合、宛先ノードはPE0〜PE149,PE151〜PE255,PE384〜PE511、PE808〜PE1023の合計679ノードとなり、これらの679ノードに「Inv」メッセージが送信される。
【0176】
ステップS154で、メッセージの生成出力を終えると、受けたメッセージの処理は終了する。
【0177】
ステップS155では、主メモリ30(64Mエントリ×64ビット幅)から該当するブロックデータ(128バイト)を読み出す。読み出されるブロックデータは、受けたメッセージのアドレスの第28ビットから第7ビットまで の22ビットに0x0から0xfまで変化する4ビットを下位に付加した26ビットで指定される合計16エントリのデータで、128バイトで構成される。このブロックデータは、生成されるメッセージに付加され、出力される。出力先はローカルアクセス制御部25あるいはメッセージ送信部35のどちらかとなる。どちらに出力するかはステップS154と同様に決められる。また、メッセージの生成も同様である。ステップS155の処理が終了すると、受けたメッセージの処理は終了する。
【0178】
以上が本発明の第1の実施例の動作の説明である。それでは、次に、本実施例の理解を助けるため、本実施例の動作の具体例を図1から図3を参照しフェーズ1からフェーズ5Bに分けて説明する。
【0179】
ここで、フェーズ1は、ノードPE1のプロセッサ20がノードPE1の主メモリ30のデータにロドアクセスを行ってから、それが完了するまでの動作である。
【0180】
フェーズ2は、フェーズ1の後、ノードPE2のプロセッサ20がフェーズ1でノードPE1がアクセスしたノードPE1の主メモリ30のデータと同じブロックのデータにロードアクセスを行ってから、それが完了するまでの動作である。
【0181】
フェーズ3は、フェーズ2の後、ノードPE2のプロセッサ20がフェーズ2でアクセスしたノードPE1の主メモリ30のデータと同じブロックのデータにストアアクセスを行ってから、それが完了するまでの動作である。
【0182】
フェーズ4は、フェーズ3の後、ノードPE2において書き戻し処理が行われた結果「RpBack」メッセージが送信され、それが処理されるまでの動作である。
【0183】
フェーズ5Aは、フェーズ4の後、ノードPE1のプロセッサ20がフェーズ4で書き戻されたブロックのデータにロードアクセスを行ってから、それが完了するまでの動作である。
【0184】
フェーズ5Bは、フェーズ4の後、ノードPE2のプロセッサ20がフェーズ4で書き戻されたブロックのデータにストアアクセスを行ってから、それが完了するまでの動作である。
【0185】
1. フェーズ1
(1)ロードアクセスの処理
ノードPE1のプロセッサ20がアドレス「0x0040030000」にid=「0」でロードアクセスを行ったとする。
【0186】
プロセッサ20が行ったメモリアクセスを受けたローカルアクセス制御部25は、図8(a)のフローチャートに従い次のように動作する。
【0187】
まず、ステップS111で、タグメモリ22の「0x0600」番地(プロセッサ20から得たアドレス「0x0040030000」の第19ビット〜第7ビットの13ビット)のデータを読み出す。初期の状態は「I」であるため、図8(b)より処理タイプは「AA」、発行するメッセージは「BlkRdSh」、ブロックの次状態は「I」に決定する。以上の処理を終えると、ステップS112に進む。
【0188】
ステップS112では、処理タイプが「AA」であることからステップS113に進む。
【0189】
ステップS113では、メッセージの生成出力およびリクエスト管理テーブル24への登録を行う。生成出力するメッセージの、宛先ノード番号は「0x001」(アドレス「0x0040030000」の第39ビット〜第30ビットの10ビット)、メッセージの種類は「BlkRdSh」、アドレスは「0x0040030000」、midは「0」(=id)、要求元ノード番号は「0x001」となる。また、宛先ノード番号と当該ノードPE1のノード番号が両者とも「0x001」と一致するので、出力先は当該ノードPE1のホームアクセス制御部27となる。また、リクエスト管理テーブルの「0」(=id)番エントリに、有効ビットは「1」、アクセスの種類はロード、アドレスは「0x0040030000」というデータを書き込む。以上の処理を終えると、ステップS118に進む。
【0190】
ステップS118では、タグメモリの0x0600番地のエントリのデータを、状態は「I」に、タグアドレスは「0x00400」(アドレス「0x0040030000」の第39ビット〜第20ビットの20ビット)に更新する。
【0191】
以上で、ノードPE1のローカルアクセス制御部25は、ロードアクセスの処理を終了する。
【0192】
(2)BlkRdShメッセージの処理
上記「BlkRdSh」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「BlkRdSh」、アドレスは「0x0040030000」、midは「0」、要求元ノード番号は「0x001」)を受けたノードPE1のホームアクセス制御部27は図12(a)のフローチャートに従い次のように動作する。
【0193】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030000」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ初期状態の「C」、「0x000」、「00」(コースベクタ形式)、「0」である。受けたメッセージの種類が「BlkRdSh」であり、読み出した状態が「C」、保持形式がコースベクタ形式で保持ノード情報が「0x000」でありアンキャッシュドであることから、処理タイプは「CB」、ブロックの次状態は「M」、保持ノード操作は「set」、書き戻し回数はそのまま、出力するメッセージの種類は「CmpDatEx」に決定する(図12(a),図13参照)。以上の処理を終えると、ステップS152に進む。
【0194】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「M」、保持ノード情報は「0x001」、保持形式は「01」(ポインタ形式)、書き戻し回数は「0」に更新する。また、データ付きのメッセージではないので主メモリ30へのブロックデータの書き込みは行わない。以上の処理を終えると、ステップS153に進む。
【0195】
ステップS153では、処理タイプが「CB」であることからステップS155に進む。
【0196】
ステップS155では、主メモリ30の「0x0006000」番地〜「0x000600f」番地までの64ビット×16エントリ=128バイトのブロックデータを読み出し、生成するメッセージに付加し出力する。このメッセージは、宛先ノード番号を「0x001」、メッセージの種類を「CmpDatEx」、アドレスを「0x0040030000」、midを「0」、要求元ノード番号を「0x001」、ブロックデータを当該ステップS145で読み出したブロックデータとするメッセージである。このメッセージの出力先は、宛先ノード番号と当該ノード番号が両方と「0x001」で一致することから、当該ノードのローカルアクセス制御部25となる。
【0197】
以上で、ノードPE1のホームアクセス制御部27は、「BlkRdSh」メッセージの処理を終了する。
【0198】
(3)CmpDatExメッセージの処理
上記「CmpDatEx」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「CmpDatEx」、アドレスは「0x0040030000」、midは「0」、要求元ノード番号は「0x001」)を受けたノードPE1のローカルアクセス制御部25は、図10および図11(a)のフローチャートに従い次のように動作する。
【0199】
まず、ステップS131で、リクエスト管理テーブル24の「0」(=mid) 番エントリの情報を読み出し、アクセスの種類はロード、アドレスは「0x0 040030000」という情報を得る。以上の処理を終えるとステップS132に進む。
【0200】
ステップS132では、ブロックデータ付きのメッセージであるからステップS135に進む。
【0201】
ステップS135では、キャッシュメモリ21の「0x06000」番地から「0x0600f」番地に、メッ セージに付加されていたブロックデータを書き込む。以上の処理を終えると、ステップS136に進む。
【0202】
ステップS136では、アクセスタイプがロードであることからステップS139に進む。
【0203】
ステップS139では、キャッシュメモリ21から「0x06000」番地の64ビットデータを読み出し、プロセッサ20に対してid=「0」のメモリアクセスに対する応答データとして渡す。これによりメモリアクセスは完了する。また、リクエスト管理テーブル24の「0」番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリの「0x0600」番地の状態およびタグアドレスを、それぞれ「E」および「0x00400」に更新する(図11(b)参照)。
【0204】
以上で、ノードPE1のローカルアクセス制御部25は、受けた「CmpDatEx」メッセージの処理を終了する。
【0205】
この段階で「0x0040030000」〜「0x004003007f」番地までについて、最新のデータはノードPE1の主メモリ30およびノードPE1のキャッシュメモリ21に存在する状態となる。
【0206】
2. フェーズ2
(1)ロードアクセスの処理
次いで、ノードPE2で、ロードアクセスがid=「2」でアドレス「0x0040030000」に行われたとする。
【0207】
プロセッサ20が行ったメモリアクセス(アクセスの種類はロード、アドレスは「0x0040030000」、id=「2」)を受けたローカルアクセス制御部25は、図8(a)のフローチャートに従い次のように動作する。
【0208】
まず、ステップS111で、タグメモリ22の「0x0600」番地のデータを読み出す(ステップS111)。初期の状態は「I」であるため、図8(b)より処理タイプは「AA」、発行するメッセージは「BlkRdSh」、ブロックの次状態は「I」に決定する。以上の処理を終えると、ステップS112に進む。
【0209】
ステップS112では、処理タイプが「AA」であることからステップS113に進む。
【0210】
ステップS113では、メッセージの生成出力およびリクエスト管理テーブル24への登録を行う。生成出力するメッセージの、宛先ノード番号は「0x001」(アドレス「0x0040030000」の第39ビット〜第30ビットの10ビット)、メッセージの種類は「BlkRdSh」、アドレスは「0x0040030000」、midは「2」、要求元ノード番号は「0x002」となる。また、宛先ノード番号と当該ノードPE2のノード番号が異なるので、出力先はメッセージ送信部35となる。また、この時リクエスト管理テーブルの「2」(=id)番エントリに、有効ビットは「1」、アクセスの種類はロード、アドレスは「0x0040030000」というデータを書き込む。以上の処理を終えると、ステップS118に進む。
【0211】
ステップS118では、タグメモリの「0x0600」番地のエントリのデータを、状態は「I」に、タグアドレスは「0x00400」(アドレス「0x0040030000」の第39ビット〜第20ビットの20ビット)に更新する(ステップS118)。
【0212】
以上で、ノードPE2のローカルアクセス制御部25は、ロードアクセスの処理を終了する。
【0213】
(2)BlkRdShメッセージの処理
上記「BlkRdSh」メッセージは、ノードPE2のメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られる。
【0214】
上記「BlkRdSh」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「BlkRdSh」、アドレスは「0x0040030000」、midは「2」、要求元ノード番号は「0x002」)を受けたホームアクセス制御部27は図12(a)のフローチャートに従い次のように動作する。
【0215】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030000」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ1において、状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ「M」、「0x001」、「01」、「0」に更新されており、その値が読み出される。受けたメッセージの種類は「BlkRdSh」であり、読み出した 状態は「M」、保持形式はポインタ形式で保持ノード情報は「0x001」で ありアンキャッシュドでないことから、図13に従い、処理タイプは「CA」、 ブロックの次状態は「RSP」、保持ノード操作は「none」、書き戻し回数は「0」、出力するメッセージの種類は「IntvSh」に決定する。。以上の処理を終えると、ステップS152に進む。
【0216】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「RSP」、保持ノード情報は「0x001」、保持形式は「01」、書き戻し回数は「0」に更新する。ここでは、データ付きのメッセージではないので主メモリ30へのブロックデータの書込は行わない。以上の処理を終えると、ステップS153に進む。
【0217】
ステップS153では、処理タイプが「CA」であることからステップS154に進む。
【0218】
ステップS154では、宛先ノー番号を「0x001」、メッセージの種類を「IntvSh」、アドレスを「0x0040030000」、midを「2」、要求元ノード番号を「0x002」、とするメッセージを生成する。メッセージの出力先は、宛先ノード番号と当該ノードPE1のノード番号が一致することから、ローカルアクセス制御部25とな る(ステップS144)。
【0219】
以上で、ノードPE1のホームアクセス制御部27は、「BlkRdSh」メッセージの処理を終了する。
【0220】
(3)IntvShメッセージの処理
上記「IntvSh」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「IntvSh」、アドレスは「0x0040030000」、midは「2」、要求元ノード番号は「0x002」)を受けたノードPE1のローカルアクセス制御部25は、図9(a)のフローチャートに従い次のように動作する。
【0221】
まず、ステップS121で、タグメモリ22の「0x0600」番地のデータを読みだす。フェーズ1において、状態およびタグアドレスはそれぞれ「E」および「0x00400」に更新されており、この値が読み出される。受けたメッセージが「IntvSh」であり、タグアドレスが一致し、状態が「E」であることから、図9(b)に従い、処理タイプは「BA」、出力するメッセージの種類は「Ack」、ブロックの次状態は「S」に決定する。
【0222】
ステップS122では、処理タイプが「BA」であることからステップS123に進む。
【0223】
ステップS123では、「Ack」メッセージを生成する。「Ack」メッセージの、宛先ノード番号は「0x001」、メッセージの種類は「Ack」、アドレスは「0x0040030000」、要求元ノード番号は「0x002」、midは「2」となる。宛先ノード番号と当該ノードPE1のノード番号が「0x001」で一致することから 出力先はホームアクセス制御部27となる。以上の処理を終えると、ステップS125に進む。
【0224】
ステップS125では、タグメモリの「0x0600」番地の状態およびタグアドレスを、それぞれ「S」および「0x00400」に更新する。
【0225】
以上でノードPE1のローカルアクセス制御部25は、「IntvSh」メッセージの処理を終了する。
【0226】
(4)Ackメッセージの処理
上記「Ack」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「Ack」、アドレスは「0x0040030000」、midは「2」、要求元ノード番号は「0x002」)を受けたホームアクセス制御部27は、図12(a)に従い次のように動作する。
【0227】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030000」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれフェーズ2で「RSP」、「0x001」、「01」(ポインタ形式)、「0」に更新されており、その値が読み出される。受けたメッセージの種類が「Ack」であり、読み出した状態が「RSP」であることから、図13に従い、処理タイプは「CB」、ブロックの次状態は「C」、書き戻し回数はそのまま、保持ノード操作は「add」、出力するメッセージの種類は「CmpDatSh」に決定する。以上の処理を終えると、ステップS152に進む。
【0228】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「C」、保持ノード情報は「0x001」、保持形式は「00」(コースベクタ形式)、書き戻し回数は「0」に更新する。また、「Ack」メッセージがブロックデータ付きのメッセージではないことから、主メモリ30へのデータの書き込みは行わない。ただし、主メモリ30には最新のデータが存在している。以上の処理を終えると、ステップS153に進む。
【0229】
ステップS153では、処理タイプが「CB」であることからステップS155に進む。
【0230】
ステップS155では、主メモリ30の「0x0006000」番地〜「0x000600f」番地までの64ビット×16エントリ=128バイトのブロックデータを読み出し、生成するメッセージに付加し出力する。このメッセージは、宛先ノード番号を「0x002」、メッセージの種類を「CmpDatSh」、アドレスを「0x0040030000」、midを「2」、要求元ノード番号を「0x002」、ブロックデータを当該ステップS145で読み出したブロックデータとするメッセージである。このメッセージの出力先は、宛先ノード番号「0x002」と当該ノードPE1のノード番号「0x001」が一致しないことから、メッセージ送信部35となる。
【0231】
以上でノードPE1のホームアクセス制御部27は、「Ack」メッセージの処理を終了する。
【0232】
(5)CmpDatShメッセージの処理
上記「CmpDatSh」メッセージは、ノードPE1のメッセージ送信部35、相互結合網10、ノードPE2のメッセージ受信部36を介して、ノードPE2のローカルアクセス制御部25に出力される。
【0233】
上記「CmpDatSh」メッセージ(宛先ノード番号は「0x002」、メッセージの種類は「CmpDatSh」、アドレスは「0x0040030000」、midは「2」、要求元ノード番号は「0x002」、ブロックデータは最新のデータ)を受けたノードPE2のローカルアクセス制御部25は、図10のフローチャートに従い、次のように動作する。
【0234】
まず、ステップS131で、リクエスト管理テーブル24の「2」(=mid)番エントリの情報を読み出し、アクセスの種類はロード、アドレスは「0x0040030000」という情報を得る。以上の処理を終えると、ステップS132に進む。
【0235】
ステップS132では、ブロックデータ付きのメッセージであるからステップS135に進む。
【0236】
ステップS135では、キャッシュメモリ21の「0x06000」番地から「0x0600f」番地に、メッ セージに付加されていたブロックデータを書き込む。以上の処理を終えると、ステップS136に進む。
【0237】
ステップS136では、アクセスタイプがロードであることからステップS139に進む。
【0238】
ステップS139では、キャッシュメモリ21から「0x06000」番地の64ビットデータを読み出し、プロセッサ20に対してid=「2」のメモリアクセスに対する応答データとして渡す。これによりメモリアクセスは完了する。また、リクエスト管理テーブル24の「2」番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリの「0x0600」番地の状態およびタグアドレスを、図11(b)に従い、それぞれ「S」および「0x00400」に更新する(ステップS139)。
【0239】
以上でノードPE2のローカルアクセス制御部25は、受けた「CmpDatSh」メッセージの処理を終了する。
【0240】
この段階で「0x0040030000」〜「0x004003007f」番地までについて、最新のデータはノードPE1のキャッシュメモリ21、ノードPE1の主メモリ30、ノードPE2のキャッシュメモリ21に存在する状態になる。
【0241】
3. フェーズ3
(1)ストアアクセスの処理
次いで、ノードPE2で、ストアアクセスがid=「1」でアドレス「0x0040030010」に行われていたとする。
【0242】
プロセッサ20が行ったメモリアクセスを受けたノードPE2のローカルアクセス制御部25は、図8(a)のフローチャートに従い次のように動作する。
【0243】
まず、ステップS111で、タグメモリ22の「0x0600」番地のデータを読み出す。フェーズ2において状態は「S」、タグアドレスは「0x00400」に更新されており、その値が読み出される。アクセスの種類はストアであり、タグアドレスは「0x00400」で一致、状態は「S」であるため、図8(b)に従い処理タイプは「AA」、出力するメッセージの種類は「Upgrade」、ブロックの次状態は「S」に決定する。以上の処理を終えると、ステップS112に進む。
【0244】
ステップS112では、処理タイプが「AA」であることからステップS113に進む。
【0245】
ステップS113では、メッセージの生成出力およびリクエスト管理テーブル24への登録を行う。生成出力するメッセージの、宛先ノード番号は「0x001」(アドレス「0x0040030010」の第39ビット〜第30ビットの10ビット)、メッセージの種類は「Upgrade」、アドレスは「0x0040030010」、midは「1」、要求元ノード番号は「0x002」となる。また、宛先ノード番号と当該ノードPE2のノード番号が異なるので、出力先はメッセージ送信部35となる。また、この時リクエスト管理テーブルの「1」(=id)番エントリに、有効ビットは「1」、アクセスの種類はストア、アドレスは「0x0040030010」、およびストアデータを書き込む。以上の処理を終えると、ステップS118に進む。
【0246】
ステップS118では、タグメモリの「0x0600」番地のエントリのデータを、状態は「S」に、タグアドレスは「0x00400」(アドレス「0x0040030010」の第39ビット〜第20ビットの20ビット)に更新する。
【0247】
以上で、ノードPE2のローカルアクセス制御部25はストアアクセスの処理を終了する。
【0248】
(2)Upgradeメッセージの処理
上記「Upgrade」メッセージは、ノードPE2のメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られる。
【0249】
上記「Upgrade」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「Upgrade」、アドレスは「0x0040030010」、midは「1」、要求元ノード番号は「0x002」)を受けたノードPE1のホームアクセス制御部27は図12(a)のフローチャートに従い次のように動作する。
【0250】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030010」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ2において、状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ 「C」、「0x001」、「00」(コースベクタ形式)、「0」に更新されており、その値が読み出される。受けたメッセージの種類が「Upgrade」であり、読み出した状態が「C」であり、保持形式がコースベクタ形式で保持ノード情報が「0x001」でアンキャッシュドではないことことから、図12(b)に従い、処理タイプは「CA」、ブロックの次状態は「UP」、保持ノード操作は「count」、書き戻し更新回数はそのまま、出力するメッセージの種類は「Inv」に決定する。以上の処理を終えると、ステップS152に進む。
【0251】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「UP」、保持ノード情報は「0x07f」、保持形式は「10」(カウンタ形式)、書き戻し回数は「0」に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ30への書き込みは行わない。以上の処理を終えると、ステップS153に進む。
【0252】
ステップS153では、処理タイプが「CA」であることからステップS154に進む。
【0253】
ステップS154では、宛先ノード番号のみが異なる複数の「Inv」メッセージを生成し出力する。この「Inv」メッセージは、メッセージの種類を「Inv」、アドレスを「0x0040030010」、midを「1」、要求元ノード番号を「0x002」とするメッセージである。また、宛先ノード番号は、要求元ノード番号「0x002」を除いた「0x000」から「0x07f」となる。以上の処理で127個のメッセージが生成される。各メッセージの出力先は、宛先ノード番号と当該ノード番号の比較結果によって決定する。宛先ノード番号が「0x001」のメッセージは、当該ノードPE1のノード番号「0x001」と一致するのでローカルアクセス制御部25に出力される。宛先ノード番号が「0x001」ではない他のメッセージは当該ノードPE1のノード番号と一致しないので、メッセージ送信部35に出力される。
【0254】
以上で、ノードPE2のホームアクセス制御部27は「Upgrade」メッセージの処理を終了する。
【0255】
(3)Invメッセージの処理
これらの「Inv」メッセージはノードPE1のメッセージ送信部35、相互結合網、各ノードPE0〜PE127(PE1,PE2除く)のメッセージ受信部36を介して各ノードのローカルアクセス制御部25に出力される。ノードPE1への「Inv」メッセージは上述のように直接ローカルアクセス制御部25に出力される。
【0256】
上記「Inv」メッセージ(宛先ノード番号は受けたノードPEiのノード番号、メッセージの種類は「Inv」、アドレスは「0x0040030010」、midは「1」、要求元ノード番号は「0x002」)を受けた各ノードPEi(i=0、1、3、・・・、127)のローカルアクセス制御部25は、図9(a)のフローチャートに従い次のように動作する。
【0257】
まず、ステップS121で、「Inv」メッセージを受けたローカルアクセス制御部25は、タグメモリ22の「0x0600」番地のデータを読み出す。読み出したタグアドレスが「0x00400」と一致するかどうか、また状態がなにであるかによって、図9(b)のテーブルに従い、処理タイプ、出力するメッセージの種類、タグメモリ22のブロックの次状態が決定する。以上の処理を終えると、ステップS122に進む。
【0258】
ステップS122では、「Inv」メッセージを受けた場合の処理タイプが「BA」となることからステップS123に進む。
【0259】
ステップS123では、「Ack」メッセージの生成が行われる。この「Ack」メッセージは、宛先ノード番号を「0x001」、メッセージの種類を「Ack」、アドレスを「0x00400300010」、midを「1」、要求元ノード番号を「0x002」とする。出力先は宛先ノード番号「0x001」と当該ノード番号の比較結果によって決定する。ノードPE1であれば、一致するのでホームアクセス制御部27に出力する。他のノードであれば、一致しないのでメッセージ送信部35に出力する。以上の処理を終えると、ステップS125に進む。
【0260】
ステップS125では、次いで、タグメモリの更新を行う。更新するエントリはステップ121で読み出しを行った「0x0600」番地のエントリであり、状態は図8から求まるブロックの次状態「I」に更新され、タグアドレスは先ほどタグメモリ22から読み出した値がそのまま書き込まれる(ステップS125)。
【0261】
以上で各ノードPEi(i=0,1,3,…,127)のローカルアクセス制御部25は、「Inv」メッセージの処理を終了する。
【0262】
(4)Ackメッセージの処理
ノードPE0、ノードPE3〜ノードPE127は、それぞれ前記「Ack」メッセージをノードPE1に対して送信する。この「Ack」メッセージは、各ノードのメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に出力される。
【0263】
一方、ノードPE1では、ローカルアクセス制御部25から、「Ack」メッセージがホームアクセス制御部27に出力される。
【0264】
ノードPE1のホームアクセス制御部27は、合計127個の同じ「Ack」メッセージ(宛先ノードは「0x001」、種類は「Ack」、アドレ スは「0x0040030010」、midは「1」、要求元ノード番号は「0x002」)を受け取り、図12(a)のフローチャートに従い処理することになる。最初の「Ack」メッセージをノードPE1のホームアクセス制御部27が受けた場合、次のように動作する。
【0265】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030010」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれフェーズ3で「UP」、「0x07f」、「10」(カウンタ形式)、「0」に更新されており、その値が読み出される。受けたメッセージの種類が「Ack」であり、読み出した状態が「UP」、また保持ノード形式がカウンタ形式で保持ノード情報が0x07fでありアンキャッシュドでないことから、図13のテーブルに従い、処理タイプは「CC」、ブロックの次状態は「UP」、保持ノード操作は「dec」、書き戻し更新回数はそのまま、出力するメッセージはなしに決定する。以上の処理を終えると、ステップS152に進む。
【0266】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「UP」、保持ノード情報は「0x07e」、保持形式は「10」、書き戻し更新回数は「0」に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから、主メモリ30への書き込みは行なわない。以上の処理を終えると、ステップS153に進む。
【0267】
ステップS153では、処理タイプが「CC」であることから処理を終了する。
【0268】
以上で、ノードPE1のホームアクセス制御部27は「Ack」メッセージの処理を終了する。
【0269】
ホームアクセス制御部27は、各ノードPEiからの「Ack」メッセージを、前記同様に処理していき、ディレクトリメモリ31の値を読み出し保持ノード情報から「1」を引いた値に更新する処理が行われていく。この処理は、読み出した保持ノード情報から「1」を引いた値が「0x000」でない場合、即ちアンキャッシュドでない場合まで継続される。ただし、アンキャッシュドになる場合、即ち最後の127個目の「Ack」メッセージを受けたときは、次のように動作する。
【0270】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030010」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ「UP」、「0x001」、「10」(カウンタ形式)、「0」に更新されており、その値が読み出される。受けたメッセージの種類が「Ack」であり、読み出した状態が「UP」、保持形式がカウンタ形式で保持ノード情報が「0x001」でありアンキャッシュドであることから、図13のテーブルに従い、処理タイプは「CA」、ブロックの次状態は「M」、保持ノード操作は「set」、書き戻し更新回数はそのまま、出力するメッセージの種類は「CmpSh」に決定する。以上の処理を終えると、ステップS152に進む。
【0271】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「M」、保持ノード情報は「0x002」、保持形式は「01」(ポインタ形式)、書き戻し回数は「0」に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ30への書き込みは行なわない。以上の処理を終えると、ステップS153に進む。
【0272】
ステップS153では、処理タイプが「CA」であることからステップS144に進む。
【0273】
ステップS154では、「CmpSh」メッセージを生成する。この「CmpSh」メッセージは、宛先ノード番号を「0x002」、メッセージの種類を「CmpSh」、アドレスを「0x0040030010」」、midを「1」、要求元ノード番号を「0x002」とするものである(ステップS144)。このメッセージの出力先は、宛先ノード番号「0x002」と当該ノードPE1のノード番号「0x001」が一致しないことから、メッセージ送信部35となる。
【0274】
以上でノードPE1のホームアクセス制御部27は「Ack」メッセージの処理を終了する。
【0275】
(5)CmpShメッセージの処理
上記「CmpSh」メッセージは、ノードPE1のメッセージ送信部35、相互結合網10、ノードPE2のメッセージ受信部36を介して、ノードPE2のローカルアクセス制御部25に出力される。
【0276】
上記「CmpSh」メッセージ(宛先ノード番号は「0x002」、メッセージの種類は「CmpSh」、アドレスは「0x0040030010」、midは「1」、要求元ノード番号は「0x002」)を受けたノードPE2のローカルアクセス制御部25は、図10のフローチャートに従い次のように動作する。まず、ステップS131で、リクエスト管理テーブル24の「1」(=mid)番エントリの情報を読み出し、アクセスの種類はストア、アドレスは「0x0040030010」、およびストアデータを得る。以上の処理を終えると、ステップS132に進む。
【0277】
ステップS132では、ブロックデータ付きのメッセージではないのでステップS133に進む。
【0278】
ステップS133では、「Ncmp」メッセージでもないのでステップS137に進む。
【0279】
ステップS137では、キャッシュメモリ21の「0x06002」番地のデータ64ビットを、リクエスト管理テーブル24から得たストアデータに更新する処理を行う。また、リクエスト管理テーブル24の「1」(=mid)番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリ22の「0x0600」番地のデータを、図11(b)のテーブルに従い、状態は「D」、タグアドレスは「0x00400」(リクエスト管理テーブルから得たアドレス0x0040030010の第39ビット〜第20ビットの20ビット)に更新する。また、プロセッサへmidを出力し、id=「1」のメモリアクセスが完了した旨を通知する。以上の処理を終えると、ステップS138に進む。
【0280】
ステップS138では、受けたメッセージが「CmpSh」であるので(ステップS138)、ローカルアクセス制御部25は、図11(a)のフローチャートのステップS161に進み、書き戻し処理を開始する。
【0281】
ステップS141では、書き戻し選択手段26から書き戻しが要求されているかどうかを調べる(ステップS161)。初期状態では、書き戻し選択手段26のアドレス保持手段111(2エントリのFIFO)にはなにも登録されていない状態であり、書き戻し要求手段112は要求を出していない。そのため、ステップS146に進む。
【0282】
ステップS146では、ローカルアクセス制御部25は、書き戻しブロック選択手段26のアドレス登録手段110にアドレス「0x0040030010」の登録を依頼する。依頼を受けたアドレス登録手段110は、アドレス保持手段111に前記アドレスの上位33ビットを登録する。これで、アドレス保持手段111には「0x000800600」が一つ登録された状態となる。
【0283】
以上でローカルアクセス制御部25は、受けた「CmpSh」メッセージの処理を終了する。
【0284】
この段階で「0x0040030000」〜「0x004003007f」番地までについて、最新のデータはノードPE2のキャッシュメモリ21にのみ存在する状態になる。
【0285】
4. フェーズ4
ノードPE1のプロセッサ20がアドレス「0x0040040000」に対してロードアクセスを行うと、フェーズ1で示した動作と同様の処理が行われる。次いで、ノードPE2のプロセッサ20がアドレス「0x0040040000」に対してロードアクセスを行うと、フェーズ2で示した動作と同様の処理が行われる。次いで、ノードPE2のプロセッサ20がアドレス「0x0040040010」に対してストアアクセスを行うと、フェーズ3で示した動作と同様の処理が行われる。これにより、ノードPE2の書き戻しブロッ ク選択手段26のアドレス保持手段111にはアドレス「0x0008006 00」 (アドレス「0x0040030010」の上位33ビット)と「0x000800800」(アドレス「0x0040040000」の上位33ビット)の2個が登録されることになる。
【0286】
上記と同様の処理がまた別のアドレス(例えば「0x0040050000」)で行われ、ノードPE2が行ったストアアクセスから「CmpSh」メッセージが発生しノードPE2のローカルアクセス制御部25が、図9および図10のフローチャートに従い処理したとする。この時、書き戻し選択手段26のアドレス保持手段111には2個のアドレスが登録されており、フルの状態にある。そのため、書き戻し要求手段112はローカルアクセス制御部25に対してアドレス「0x0040030000」(「0x000800600」33ビットの下位に7ビット「0」を付加した40ビット)の書き戻しを要求している。
【0287】
(1)CmpShメッセージの処理
ローカルアクセス制御部25は、「CmpSh」メッセージを受け処理し、ステップS141に進む。
【0288】
ステップS141では、書き戻し選択手段26の書き戻し要求手段112は書き戻しを要求しているためステップS142に進む。
【0289】
ステップS142では、書き戻し要求手段112が出力するアドレス「0x0040030000」の第19ビットから第7ビットまでの13ビット(0x0600)をインデックスとしてタグメモリ22をアクセスし、状態およびタグアドレスを得る(ステップS162)。フェーズ3で状態およびタグアドレスはそれぞれ「D」と「0x00400」に更新されておりその値が読み出される。以上の処理を終えると、ステップS143に進む。
【0290】
ステップS143では、状態が「D」であり、またタグアドレスと書き戻し要求手段112が出力するアドレス「0x0040030000」の上位20ビットが一致することから、書き戻しが必要と判断しステップS144に進む。
【0291】
ステップS144では、書き戻しを行うために、キャッシュメモリ21から該当するブロックのデータを読み出す。読み出すブロックデータは「0x06000」番地から「0x0600f」番地までの64ビット×16エントリ=128バイトである。読み出されたブロックデータは生成する「RpBack」メッセージに付加する。生成する「RpBack」メッセージは、宛先ノード番号を「0x001」(書き戻しブロック要求手段112が出力するアドレスの上位10ビッ ト)、メッセージの種類を「RpBack」、アドレスを「0x0040030000」、要求元ノード番号を「0x002」、midは任意の値、ブロックデータは先ほどキャッシュメモリ21から読み出したブロックデータとするメッセージである。この「RpBack」メッセージの出力先は、宛先ノード番号「0x001」と当該ノードPE2のノード番号「0x002」が異なることからメッセージ送信部35となる。また、タグメモリ22の「0x0600」番地のデータを、状態は「S」、タグアドレスはステップS142で読み出したタグアドレスに更新する。以上の処理を終えると、ステップS145に進む。
【0292】
ステップS145では、書き戻しブロック選択手段26のアドレス削除手段113に、現在書き戻し要求手段112が要求しているアドレスを削除するよう要求する。要求を受けた書き戻し要求手段112は、アドレス保持手段111からアドレス「0x000800600」を削除する。これにより、アドレス保持手段111にはアドレス「0x000800800」一つが登録されている状態となる。以上の処理を終えると、ステップS146に進む。
【0293】
ステップS146では、ローカルアクセス制御部25は、書き戻しブロック選択手段26のアドレス登録手段110に、現在処理しているメッセージ「CmpSh」のアドレス「0x0040050000」を登録するように要求する。要求を受けた、アドレス登録手段110は、アドレス保持手段111にアドレス「0x0040050000」の上位33ビット「0x000800A00」を登録する。これにより、アドレス保持手段111には、「0x000800800」と「0x000800A00」が登録されている状態となる(ステップS166)。
【0294】
以上で、ノードPE2のローカルアクセス制御部25は、「CmpSh」メッセージの処理を終了する。
【0295】
(2)RpBackメッセージの処理
ノードPE2のローカルアクセス制御部25がメッセージ送信部35に出力した前記「RpBack」メッセージは、相互結合網10を通って、ノードPE1のメッセージ受信部36に渡される。メッセージ受信部36は、「RpBack」メッセージを受けると、それをホームアクセス制御部27に出力する。
【0296】
上記「RpBack」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「RpBack」、アドレスは「0x0040030000」、要求元ノード番号は「0x002」、およびブロックデータ)を受けたノードPE1のホームアクセス制御部27は、図12のフローチャートに従い次のように動作する。
【0297】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030000」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェー3において、状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ「M」、「0x002」、「01」(ポインタ形式)、「0」に更新されており、その値が読み出される。受けたメッセージの種類は「RpBack」であり、読み出した状態は「M」であることから、図13のテーブルに従い処理タイプは「CC」、ブロックの次状態は「C」、保持ノード操作は「none」、書き戻し回数は「+1」に決定する。以上の処理が終了すると、ステップS152に進む。
【0298】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「C」、保持ノード情報は「0x002」、保持形式 は「01」(ポインタ形式)、書き戻し回数は「1」に更新する。ここでは、データ付きのメッセージであるので主メモリの「0x0006000」番地から「0x000600f」番地に、メッセージに付加されていたブロックデータを書き込む。これにより、ノードPE1の主メモリ30にも最新のデータが存在する状態となる。以上の処理が終了すると、ステップS153に進む。
【0299】
ステップS153において、処理タイプが「CC」である。
【0300】
以上で、ノードPE1のホームアクセス制御部27は、「RpBack」メッセージの処理を終了する。
【0301】
この段階で「0x0040030000」〜「0x004003007f」番地までについて、最新のデータはノードPE2のキャッシュメモリ21に加え、ノードPE1の主メモリ30にも存在する状態となる。
【0302】
以降の動作は、ノードPE1が再び「0x0040030000」番地にロードアクセスする場合と、しない場合に分けて説明する。まず、ロードアクセスを行う場合の動作を説明する。
【0303】
5. フェーズ5A
(1)ロードアクセスの処理
ノードPE1のプロセッサ20がアドレス「0x0040030000」にid=「0」でロードアクセスを行ったとする。
【0304】
プロセッサ20が行ったメモリアクセスを受けたローカルアクセス制御部25は、図8(a)のフローチャートに従い次のように動作する。
【0305】
まず、ステップS111で、タグメモリ22の「0x0600」番地(プロセッサ20から得たアドレス「0x0040030000」の第19ビット〜第7ビットの13ビット)のデータを読み出す。状態およびタグアドレスはフェーズ3で「I」および「0x00400」に更新されておりその値が読み出される。この値から、図8(b)のテーブルに従い処理タイプは「AA」、発行するメッセージは「BlkRdSh」、ブロックの次状態は「I」に決定する。以上の処理を終えると、ステップS112に進む。
【0306】
ステップS112では、処理タイプが「AA」であることからステップS113に進む。
【0307】
ステップS113では、メッセージの生成出力およびリクエスト管理テーブル24への登録を行う。生成出力するメッセージの、宛先ノード番号は「0x001」(アドレス「0x0040030000」の第39ビット〜第30ビットの10ビット)、メッセージの種類は「BlkRdSh」、アドレスは「0x0040030000」、midは「0」(=id)、要求元ノード番号は「0x001」となる。また、宛先ノード番号と当該ノードPE1のノード番号が両者とも「0x001」と一致するので、出力先は当該ノードPE1のホームアクセス制御部27となる。また、リクエスト管理テーブル24の「0」(=id)番エントリに、有効ビットは「1」、アクセスの種類はロード、アドレスは「0x0040030000」というデータを書き込む。以上の処理を終えると、ステップS118に進む。
【0308】
ステップS118では、タグメモリの「0x0600」番地のエントリのデータを、状態は「I」に、タグアドレスは0x00400(アドレス0x0040030000の第39ビット〜第20ビットの20ビット)に更新する。
【0309】
以上で、ノードPE1のローカルアクセス制御部25は、受けたロードアクセスの処理を終了する。
【0310】
(2) BlkRdShメッセージの送信
上記「BlkRdSh」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「BlkRdSh」、アドレスは「0x0040030000」、midは「0」、要求元ノード番号は「0x001」)を受けたノードPE1のホームアクセス制御部27は図12(a)のフローチャートに従い次のように動作する。
【0311】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030000」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれフェーズ4で 「C」、「0x002」、「01」(ポインタ形)、「1」に更新されておりその値が読み出される。受けたメッセージの種類が「BlkRdSh」であり、読み出した状態が「C」、保持形式がポインタ形式で保持ノード情報が「0x002」でありアンキャッシュドでないことから、図13のテーブルに従い、処理タイプは「CB」、ブロックの次状態は「C」、保持ノード操作は「add」、書き 戻し回数は「0」、出力するメッセージの種類は「CmpDatSh」に決定する。以上の処理を終えると、ステップS152に進む。
【0312】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「C」、保持ノード情報は「0x001」、保持形式 は「00」(コースベクタ)、書き戻し回数は「0」に更新する。以上の処理を終えると、ステップS153に進む。
【0313】
ステップS153では、処理タイプが「CB」であることからステップS155に進む。
【0314】
ステップS155では、主メモリ30の「0x0006000」番地〜「0x000600f」番地までの64ビット×16エントリ=128バイトのブロックデータを読み出し、生成するメッセージに付加し出力する。このメッセージは、宛先ノード番号を「0x001」、メッセージの種類を「CmpDatSh」、アドレスを「0x0040030000」、midを「0」、要求元ノード番号を「0x001」、ブロックデータを当該ステップS155で読み出したブロックデータとするメッセージである(ステップS145)。このメッセージの出力先は、宛先ノード番号と当該ノードPE1のノード番号が一致することから、当該ノードのローカルアクセス制御部25となる。
【0315】
以上で、ホームアクセス制御部27は、「BlkRdSh」メッセージの処理を終了する。
【0316】
(3)CmpdatShメッセージの処理
上記「CmpDatSh」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「CmpDatSh」、アドレスは「0x0040030000」、midは「0」、要求元ノード番号は「0x001」)を受けたノードPE1のロー カルアクセス制御部25は、図10のフローチャートに従い次のように動作する。
【0317】
まず、ステップS131で、リクエスト管理テーブル24の「0」(=mid)番エントリの情報を読み出し、アクセスの種類はロード、アドレスは「0x0040030000」という情報を得る。以上の処理を終えると、ステップS132に進む。
【0318】
ステップS132では、ブロックデータ付きのメッセージであるからステップS135に進む。
【0319】
ステップS153では、キャッシュメモリ21の「0x06000」番地から「0x0600f」番地に、メッセージに付加されていたブロックデータを書き込む。以上の処理を終えると、ステップS136に進む。
【0320】
ステップS136では、アクセスタイプがロードであることからステップS139では、キャッシュメモリ21から「0x06000」番地の64ビットデータを読み出し、プロセッサ20に対してid=「0」のメモリアクセスに対する応答データとして渡す。これによりメモリアクセスは完了する。また、リクエスト管理テーブルの「0」番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリの「0x0600」番地の状態およびタグアドレスを、図11のテーブルに従い、それぞれ「S」および「0x00400」に更新する。
【0321】
以上でノードPE1のローカルアクセス制御部25は、受けた「CmpDatSh」メッセージの処理を終了する。
【0322】
この段階で「0x0040030000」〜「0x004003007f」番地までについて、最新のデータはノードPE1のキャッシュメモリ21および主メモリ30、ノードPE2のキャッシュメモリ21に存在する状態となる。
【0323】
ブロックをノードPE2のキャッシュメモリ21からノードPE1の主メモリ30に書き戻すことにより、既にデータを保持しているノードPE2以外のノード(ここではノードPE1)からのロードアクセスに対して、ノードPE1の主メモリ30から直接データを読み出し応答することが出来ている。書き戻しを行わなかった場合は、ノードPE1を経由してノードPE2に対してデータの書き戻しを要求し、書き戻しを受けた後データを応答することになる。
【0324】
これから明らかなように、本発明の第1の実施例のマルチプロセッサシステムは、ロードアクセスのレイテンシを短縮する効果がある。
【0325】
次に、ノードPE2以外の他のノードがアドレス「0x0040030000」を含むブロックに対してアクセスを行わず、ノードPE2のみがアクセスを繰り返した場合の動作を説明する。
【0326】
6. フェーズ5B
(1)ストアアクセスの処理
ノードPE2のプロセッサ20が、再びアドレス「0x0040030020」にid=「1」でストアアクセスを行った場合の動作を説明する。
【0327】
プロセッサ20が行ったメモリアクセスを受けたローカルアクセス制御部25は、図8(a)のフローチャートに従い次のように動作する。
【0328】
まず、ステップS111で、タグメモリ22の「0x0600」番地のデータを読み出す。フェーズ4において状態は「S」、タグアドレスは「0x00400」に更新されており、その値が読み出される。アクセスの種類はストアであり、タグアドレスは「0x00400」で一致、状態は「S」であるため、図8(b)のテーブルに従い処理タイプは「AA」、出力するメッセージの種類は「Upgrade」、ブロックの次状態は「S」に決定する。以上の処理を終えると、ステップS112に進む。
【0329】
ステップS112では、処理タイプが「AA」であることからステップS113に進む。
【0330】
ステップS113では、メッセージの生成出力およびリクエスト管理テーブル24への登録を行う。生成出力するメッセージの、宛先ノード番号は「0x001」(アドレス「0x0040030020」の第39ビット〜第30ビットの10ビット)、メッセージの種類は「Upgrade」、アドレスは「0x0040030020」、midは「1」、要求元ノード番号は「0x002」となる。また、宛先ノード番号と当該ノードPE2のノード番号が異なるので、出力先はメッセージ送信部35となる。また、この時リクエスト管理テーブル24の「1」(=id)番エントリに、有効ビットは「1」、アクセスの種類はストア、アドレスは「0x0040030020」、およびストアデータを書き込む。以上の処理を終えると、ステップS118に進む。
【0331】
ステップS118では、タグメモリの「0x0600」番地のエントリのデータを、状態は「S」に、タグアドレスは「0x00400」(アドレス「0x0040030020」の第39ビット〜第20ビットの20ビット)に更新する。
【0332】
以上で、ノードPE2のローカルアクセス制御部25はストアアクセスの処理を終了する。
【0333】
(2)Upgradeメッセージの処理
上記「Upgrade」メッセージは、ノードPE2のメッセージ送信部35、相互結合網10、ノードPE1のメッセージ受信部36を介してノードPE1のホームアクセス制御部27に送られる。
【0334】
上記「Upgrade」メッセージ(宛先ノード番号は「0x001」、メッセージの種類は「Upgrade」、アドレスは「0x0040030020」、midは「1」、要求元ノード番号は「0x002」)を受けたノードPE1のホームアクセス制御部27は次のように動作する。
【0335】
まず、ステップS151で、ディレクトリメモリ31の「0x000600」(メッセージに付加されていたアドレス「0x0040030020」の第28ビット〜第7ビットの22ビット)番地をアクセスし、状態等のデータを読み出す。フェーズ4において、状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ 「C」、「0x002」、「01」(ポインタ形式)、「1」に更新されてお り、その値が読み出される。受けたメッセージの種類が「Upgrade」で あり、読み出した状態が「C」であり、保持形式はポインタ形式で保持ノード 情報が「0x002」でアンキャッシュドであり、書き戻し回数と閾値「1」 が一致することから、図12(b)のテーブルに従い処理タイプは「CA」、ブロックの次状態は「M」、保持ノード操作は「none」、書き戻し更新回数はそのまま、出力するメッセージの種類は「CmpEx」に決定する。以上の処理を終えると、ステップS152に進む。
【0336】
ステップS152では、これらの情報を元に、ディレクトリメモリ31の「0x000600」番地のデータを、状態は「M」、保持ノード情報は「0x002」、保持形式 は「01」(ポインタ形式)、書き戻し回数は「1」に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ30への書き込みは行わない。以上の処理を終えると、ステップS153に進む。
【0337】
ステップS153では、処理タイプが「CA」であることからステップS154に進む。
【0338】
ステップS154では、「CmpEx」メッセージを生成する。この「CmpEx」メッセージは、宛先ノード番号を「0x002」、メッセージの種類を「CmpEx」、アドレスを「0x0040030020」、midを「1」、要求元ノード番号を「0x002」とするものである(ステップS144)。このメッセージの出力先は、宛先ノード番号「0x002」と当該ノードPE1のノード番号「0x001」が一致しないことから、メッセージ送信部35となる。以上で、ノードPE1のホームアクセス制御部27は、「Upgrade」メッセージの処理を終了する。
【0339】
(3)CmpExメッセージの処理
上記「CmpEx」メッセージは、ノードPE1のメッセージ送信部35、相互結合網10、ノードPE2のメッセージ受信部36を介して、ノードPE2のローカルアクセス制御部25に出力される。
【0340】
上記「CmpEx」メッセージ(宛先ノード番号は「0x002」、メッセージの種類は「CmpEx」、アドレスは「0x0040030020」、midは「1」、要求元ノード番号は「0x002」)を受けたノードPE2のローカルアクセス制御部25は、図10のフローチャートに従い次のように動作する。まず、ステップS131で、リクエスト管理テーブル24の1(=mid)番エントリの情報を読み出し、アクセスの種類はストア、アドレスは「0x0040030020」、およびストアデータを得る。以上の処理を終えると、ステップS132に進む。
【0341】
ステップS132では、ブロックデータ付きのメッセージではないのでステップS133に進む。
【0342】
ステップS133では、NCmpメッセージでもないのでステップS137に進む。
【0343】
ステップS137では、キャッシュメモリ21の「0x06004」(アドレス「0x0040030020」の第19ビットから第3ビットまでの17ビット)番地のデータ64ビットを、リクエスト管理テーブル24から得たストアデータに更新する処理を行う。また、リクエスト管理テーブルの「1」(=mid)番エントリに有効ビットを「0」としたデータを書き込み、エントリを削除する。また、タグメモリ22の「0x0600」番地のデータを、図11(b)のテーブルに従い状態は「D」、タグアドレスは「0x00400」(リクエスト管理テーブル24から得たアドレス「0x0040030020」の第39ビット〜第20ビットの20ビット)に更新 する。また、プロセッサへmidを出力し、id=「1」のメモリアクセスが完了した旨を通知する。以上の処理を終えると、ステップS138に進む。
【0344】
ステップS138において受けたメッセージは「CmpSh」でも「CmpDatSh」でもない。
【0345】
以上でノードPE2のローカルアクセス制御部25は受けた「CmpEx」メッセージの処理を終了する。
【0346】
この段階で「0x0040030000」〜「0x004003007f」番地までについて、最新のデータはノードPE2のキャッシュメモリ21にのみ存在する状態になる。
【0347】
このように閾値を「1」に設定した場合、同じノードPEi(ここではノードPE2)からの書き戻しを1回受けてから次にノードPE2で書き込みが発生するまでの間に他のノードからのアクセスがない場合は、ノードPE1の主メモリ30にデータを書きもどすのをやめ書き戻しブロックの対象から外している。
【0348】
また、閾値の設定により、何回書き戻しを受けたら書き戻しブロックの対象から外すかどうかを変更することができる。
【0349】
以上のように、本実施例によれば、主メモリ30への不要な書き戻しが発生するのを防ぐことができる。
【0350】
本発明は、上記の第1の実施の形態で説明したものに限定されるものではなく、種々の変形が可能である。
【0351】
次に、本発明の第2の実施例について説明する。
【0352】
図14は、本発明の第2の実施例に係わる疎結合型マルチプロセッサシステム1’の構成を示すブロック図である。
【0353】
本実施例は、ディレクトリメモリ31を持たない マルチプロセッサシステムを構成することも可能にしたものである。この場合は、ディレクトリメモリ31に格納されていた情報は、主メモリ30のある領域(ディレクトリ領域)に格納すればよい。ホームアクセス制御部27がディレクトリメモリ31に対して行っていたアクセスは、主メモリ30のディレクトリ領域をアクセスすることで実現される。
【0354】
これ以外の構成は図1に示した第1の実施例と同様であるため、図1と同じ符号を付して示す。
【0355】
第1、第2の実施例におけるメッセージは、ノードPEi間での処 理要求および応答を的確に伝えられるものであれば、その種類および構成を様々に変形することが可能である。また、特に同一ノード間での要求(アクセス要求など)については、メッセージの形態をとらずに、ノード内に設けられた信号線を介して所定の信号を送ることで、その要求を伝える構成としてもよい。
【0356】
なお、上記の第1、第2の実施例において、一貫性維持制御部16に含まれるロー カルアクセス制御部25、ホームアクセス制御部27の各機能は、それぞれ次 のいずれかによって実現してもよい。
【0357】
(a)プロセッサ20による主メモリ30に格納された処理プログラム(あるいいは、命令キャッシュに記憶されたプログラム)の実行。
【0358】
(b)プロセッサ20および主メモリ30(あるいは命令キャッシュ)とは別個 に設けられた、専用のサブプロセッサによる専用のメモリに格納された処理プ ログラムの実行。
【0359】
(c)それぞれのモジュールの機能を実現するためのロジックに従って構成された専用のハードウェア。
【0360】
上記の第1、第2の実施例で示したマルチプロセッサシステムは、1つの相互結合網10を介して互いに接続された1024個のノードPE0〜PE1023によって構成されていた。しかしながら、本実施例においては、ノード数は任意である。また、相互結合網が複数ある、冗長性のある構成となっていてもよい。この場合は、複数の相互結合網は、システムの障害対策のために用いることができる。
【0361】
以上のように、本実施例によれば、装置構成を簡略化するだけでなく、それと同時に主メモリ30への不要な書き戻しが発生するのを防ぐことができる。
【0362】
以上本発明の実施の形態を述べたが、本発明は上記の実施の形態に限定されることなく、数々の変形が可能であることはいうまでもない。
【0363】
【発明の効果】
以上説明したように、本発明によれば、以下のような顕著な効果を奏する。
【0364】
(1)共有しているブロックに対してプロセッサが書き込みを行うと、当該ノードのキャッシュメモリを専有する状態になる。このようなブロックは、当該ノードの書き戻しブロック選択手段およびローカルアクセス制御部が働き、主メモリに書き戻される。この機能により、他のノードのプロセッサが当該ブロックにロードアクセスしたときに、専有していたノードのキャッシュメモリからでなく、主メモリからブロックを読み出すことができるため、ロードアクセスのレイテンシを短縮できる。
【0365】
(2)共有しているかいないかを示す情報をディレクトリメモリに持たせる。その情報をもとに、書き込み要求を受けたホームアクセス制御部が要求を出したノードに送信する応答メッセージに、共有していたかいなかったかの情報を持たせる。その応答メッセージを受けたローカルアクセス制御部は、共有していたかいなかったかにより、書き戻しブロック選択手段が選択する書き戻しを行うブロックの対象とするかしないかを決める。以上の機能により、共有していないブロックに関しては書き戻しを行わないようにできる。
【0366】
(3)ディレクトリメモリに、書き戻しを受けた回数、共有していることを示す状態であっても実際にブロックを保持するノードが一つの場合はそのノードを特定することができる情報を持たせる。また、ホームアクセス制御部に書き戻しを何回まで許容するかを決める閾値を持たせる。これらの情報をもとに、書き込みの要求を受けたホームアクセス制御部が、当該ブロックの状態が共有していることを示していても、要求を出したノードのみがブロックを保持している状態でかつ閾値と書き戻しを受けた回数が一致する場合は、応答メッセージに共有していない旨の情報を持たせ、書き戻しブロック選択手段の対象から外す。以上の機能により、共有していたブロックが時間の経過とともに共有されなくなったことを検出し、無駄な書き戻しが行われるのを防ぎ、書き戻しによりメッセージが増加するのを防ぐことができる。
【図面の簡単な説明】
【図1】本発明の第1の実施例に係わる疎結合型のマルチプロセッサシステムの構成を示すブロック図である。
【図2】図1に示したノードの内部構成を示すブロック図である。
【図3】(a)は、メモリアクセスが行われたノードから主メモリにデータを保持するノードへ送信される要求メッセージを示す図であり、(b)は、主メモリにデータを保持するノードから当該データのコピーをキャッシュメモリに保持するノードへ送信される要求メッセージを示す図であり、(c)は、データのコピーをキャッシュッメモリに保持するノードから主メモリにデータを保持するノードへ送信される報告メッセージを示す図であり、(d)は、主メモリにデータを保持するノードからメモリアクセスが行われたノードへ送信されるメモリアクセス完了メッセージを示す図である。
【図4】書き戻しブロック制御手段の内部構成を示す図である。。
【図5】(a)は、ブロックデータ付メッセージの構成を示すであり、(b)は、基本メッセージの構成を示す図である。
【図6】ディレクトリメモリとタグメモリおよびこのメモリブロックの状態を示す図である。
【図7】本実施例のノードとその構成要素である主メモリおよびキャッシュメモリの状態遷移を示す図である。
【図8】(a)は、プロセッサが出力するメモリアクセスを受けて、ローカルアクセス制御部が実行する処理を示すフローチャートであり、(b)は、(a)の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである
【図9】(a)は、ホームアクセス制御部あるいはメッセージ受信部が出力するメッセージのうち、IntvSh,IntvEx,Upgradeの3種類のメッセージを受けた場合に、ローカルアクセス制御部が実行する処理を示すフローチャートであり、(b)は、(a)の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。
【図10】ホームアクセス制御部あるいはメッセージ受信部が出力するメッセージのうち、CmpDatSh,CmpDatEx,CmpSh,CmpEx,NCmpの5種類のメッセー ジを受けた場合に、ローカルアクセス制御部が実行する処理を示すフローチャートである。
【図11】(a)は、ホームアクセス制御部あるいはメッセージ受信部が出力するメッセージのうち、CmpDatSh,CmpDatEx,CmpSh,CmpEx,NCmpの5種類のメッセー ジを受けた場合に、ローカルアクセス制御部が実行する処理を示すフロー チャートであり、(b)は、図10および図11(a)の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。
【図12】(a)は、ホームアクセス制御部が実行する処理を示すフローチャートであり、(b)は、(a)の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。
【図13】図12(a)のフローチャートの処理で用いられる、受けたメッセージの種類、ディレクトリメモリ読み出したブロックの状態、保持形式および保持ノード情報から求めるアンキャッシュド情報、書き戻し回数と閾値が一致するかどうかの4つの情報と、ディレクトリメモリに格納するブロックの状態、保持ノード情報に対する操作、書き戻し回数に対する操作、処理タイプ、メッセージの種類を示すテーブルである。
【図14】本発明の第2の実施例に係わる疎結合型マルチプロセッサシステムの構成を示すブロック図である。
【図15】従来のマルチプロセッサシステムの構成を示すブロック図である。
【図16】(a)は、複数のノードの主メモリにデータのコピーが存在する状態を示す図であり、(b)は、1つのノードの主メモリにのみデータのコピーが存在する状態を示す図である。
【図17】(a)は、複数のノードのキャッシュメモリに一貫性が維持された有効なデータが存在しない状態を示す図であり、(b)は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリにも有効なデータが存在する可能性のある状態を示す図であり、(c)は、データの有効なコピーが1つのノードにだけ存在し、他のノードのキャッシュメモリには有効なコピーが存在せず、かつ主メモリのデータとキャッシュメモリのデータが異なる状態を示す図である。
【符号の説明】
PE0〜PEn−1,PE0’〜PEn−1’ ノード
10 相互結合網
16 一貫性維持制御部
20 プロセッサ
21,42 キャッシュメモリ
22 タグメモリ
24 リクエスト管理テーブル
25 ローカルアクセス制御部
26 書き戻しブロック選択手段
27 ホームアクセス制御部
30,41 主メモリ
31 ディレクトリメモリ
35 メッセージ送信部
36 メッセージ受信部
40 ノードPEi
55 一貫性制御部
110 アドレス登録手段
111 アドレス保持手段
112 書き戻し要求手段
113 アドレス削除手段1

Claims (2)

  1. 相互結合網を介して互いに接続された複数のノードから構成されるマルチプロセッサシステムであって、
    前記複数のノードはそれぞれデータが格納される主メモリと、
    前記複数のノードのいずれかが備える主メモリに格納されているデータの一部が記憶される、前記主メモリよりも高速アクセスが可能なキャッシュメモリと、
    データのアクセス要求を発行するプロセッサと、
    前記主メモリのデータがシステム内でどういう状態にあるのかを管理し、前記キャッシュッメモリにあるデータのコピーの状態を管理し、前記プロセッサが所定のアドレスのデータに対してロード及びストアアクセスを行ったとき、メモリアクセスに応じてノード間でメッセージをやり取りし、それらの状態を変更しまたデータの転送を行う機能を有する一貫性維持制御とを有し、
    前記一貫性維持制御部は、
    前記キャッシュメモリに記憶されているデータの状態が記憶されるタグメモリと、
    前記主メモリに記憶されているデータの状態が記憶されるディレクトリメモリと、
    前記プロセッサからのアクセス要求、前記複数のノードが備えるホームアクセス制御部が発行する要求や応答を受け、前記キャッシュメモリやタグメモリに対しては一貫性維持のために必要な処理を行い、前記プロセッサに対してはアクセス要求に対する応答を行うローカルアクセス制御部と、
    前記複数のノードが備える前記ローカルアクセス制御部が発行する要求や応答を受けて、前記主メモリやディレクトリメモリに対して一貫性維持のために必要な処理を行い、前記ローカルアクセス制御部に要求や応答を発行するホームアクセス制御部と、
    前記プロセッサが同時に発行可能なメモリアクセスの最大数に対応するエントリを有するリクエスト管理テーブルと、
    書き戻しブロック選択手段とを具備し、
    前記書き戻しブロック選択手段は前記ローカルアクセス制御部が指定するアドレスを登録するアドレス登録手段と、前記アドレス登録手段により登録されたアドレスを複数保持するアドレス保持手段と、前記アドレス保持手段に格納された複数のアドレスから一つを選択して前記ローカルアクセス制御部に出力し、データの書き戻しを要求する書き戻し要求手段と、前記ローカルアクセス制御部の指示に従い前記書き戻し要求手段が選択しているアドレスを前記アドレス保持手段から削除するアドレス削除手段とを有し、
    前記タグメモリに格納される状態は、少なくとも共有状態と専有状態の2状態を含み、
    前記ディレクトリメモリに格納される状態は、一致状態と不一致状態の2状態を含み、またディレクトリメモリはさらにどのノードのキャッシュにコピーが存在するかを示す情報を保持し、
    前記ローカルアクセス制御部は、タグメモリの状態が共有状態を示すブロックに対して書き込みが行われた時に、一貫性維持制御のために書き込み要求を発行する手段を有し、
    前記ホームアクセス制御部は、前記書き込み要求を受けて、ディレクトリメモリの状態が一致状態にあり当該書き込み要求を発行したノード以外にコピーを保持するノードが存在する場合は共有状態と判定し、その判定情報を前記ローカルアクセス制御部への応答に付加する手段を有し、
    前記ローカルアクセス制御部は当該応答を受けてタグメモリの状態を共有状態から専有状態に遷移させ、且つ共有状態にあるという応答であった場合は前記書き戻しブロック選択手段に当該アクセスのアドレスの登録を指示する手段を有し、
    前記ローカルアクセス制御部はさらに、前記書き戻しブロック選択手段の要求に応じて、データの書き戻し処理を行う手段を有し、前記データの書き戻し処理では、タグメモリの状態を専有状態から共有状態に遷移させ、
    前記ホームアクセス制御部は、前記ローカルアクセス制御部から書き戻し要求を受けて、ディレクトリメモリの状態を一致状態に更新する手段を有することを特徴とするマルチプロセッサシステム。
  2. 請求項1に記載のマルチプロセッサシステムにおいて、
    前記ディレクトリメモリは、さらに書き戻し回数をカウントした値を保持し、
    前記ホームアクセス制御部は、さらに前記ローカルアクセス制御部から書き戻し要求を受けて、ディレクトリメモリの状態を一致状態に更新するとともに書き戻し回数の値を更新する手段と、書き戻し回数の閾値を記憶するレジスタを有し、
    前記ホームアクセス制御部における前記判定情報を前記ローカルアクセス制御部への応答に付加する手段は、書き込み要求を受けたときに、ディレクトリメモリの状態が一致状態にあり当該書き込み要求を発行したノード以外にコピーを保持するノードが存在する場合と、一致状態にあり当該書き込み要求を発行したノードのみがコピーを保持する状態にあり書き戻し回数が閾値未満の場合は共有状態と判定し、その判定情報を前記ローカルアクセス制御部への応答に付加することを特徴とするマルチプロセッサシステム。
JP06190599A 1999-03-09 1999-03-09 マルチプロセッサシステム Expired - Fee Related JP3769411B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP06190599A JP3769411B2 (ja) 1999-03-09 1999-03-09 マルチプロセッサシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP06190599A JP3769411B2 (ja) 1999-03-09 1999-03-09 マルチプロセッサシステム

Publications (2)

Publication Number Publication Date
JP2000259596A JP2000259596A (ja) 2000-09-22
JP3769411B2 true JP3769411B2 (ja) 2006-04-26

Family

ID=13184650

Family Applications (1)

Application Number Title Priority Date Filing Date
JP06190599A Expired - Fee Related JP3769411B2 (ja) 1999-03-09 1999-03-09 マルチプロセッサシステム

Country Status (1)

Country Link
JP (1) JP3769411B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3791433B2 (ja) 2002-02-27 2006-06-28 日本電気株式会社 システム、制御処理装置、およびシステム制御方法
JP4572169B2 (ja) 2006-01-26 2010-10-27 エヌイーシーコンピュータテクノ株式会社 マルチプロセッサシステム及びその動作方法
JP6089891B2 (ja) 2013-03-29 2017-03-08 富士通株式会社 演算処理装置、情報処理装置及び情報処理装置の制御方法

Also Published As

Publication number Publication date
JP2000259596A (ja) 2000-09-22

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
US7904665B2 (en) Multiprocessor system and its operational method
TWI391821B (zh) 在互連結構上發佈請求而無參照基於標籤快取狀態的低階快取之處理單元及資料處理系統與方法
KR100465583B1 (ko) 판독 요청을 원격 처리 노드에 추론적으로 전송하는 비정형 메모리 액세스 데이터 처리 시스템 및 이 시스템에서의 통신 방법
US6154816A (en) Low occupancy protocol for managing concurrent transactions with dependencies
KR100324975B1 (ko) 잠재적인 제3 노드 트랜잭션을 버퍼에 기록하여 통신 대기시간을 감소시키는 비균일 메모리 액세스(numa) 데이터 프로세싱 시스템
US20010013089A1 (en) Cache coherence unit for interconnecting multiprocessor nodes having pipelined snoopy protocol
EP0911731A2 (en) Order supporting mechanisms for use in a switch-based multi-processor system
US20020009095A1 (en) Multicast decomposition mechanism in a hierarchically order distributed shared memory multiprocessor computer system
US7529893B2 (en) Multi-node system with split ownership and access right coherence mechanism
JP2002304328A (ja) マルチプロセッサシステム用コヒーレンスコントローラ、およびそのようなコントローラを内蔵するモジュールおよびマルチモジュールアーキテクチャマルチプロセッサシステム
US6266743B1 (en) Method and system for providing an eviction protocol within a non-uniform memory access system
JP2001515244A (ja) スケーリング可能な共用メモリ・マルチプロセッサ・システム
US6920532B2 (en) Cache coherence directory eviction mechanisms for modified copies of memory lines in multiprocessor systems
JPH10143483A (ja) ミグラトリ・データ・アクセス・パターンを検出し、効果的に提供するように構成されたマルチプロセスシステム
US6934814B2 (en) Cache coherence directory eviction mechanisms in multiprocessor systems which maintain transaction ordering
US6587922B2 (en) Multiprocessor system
US6925536B2 (en) Cache coherence directory eviction mechanisms for unmodified copies of memory lines in multiprocessor systems
US20050013294A1 (en) Multi-node computer system with active devices employing promise arrays for outstanding transactions
CN112955876A (zh) 具有对写入操作的改进处理的用于数据处理网络的i/o相干请求节点
US20050027947A1 (en) Multi-node computer system including a mechanism to encode node ID of a transaction-initiating node in invalidating proxy address packets
US20040215895A1 (en) Multi-node computer system in which networks in different nodes implement different conveyance modes
JP3751741B2 (ja) マルチプロセッサシステム
US7725660B2 (en) Directory for multi-node coherent bus
US7669013B2 (en) Directory for multi-node coherent bus

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20050310

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060206

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: 20100210

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20100210

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110210

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110210

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120210

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20120210

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20130210

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130210

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20140210

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees