(57)【特許請求の範囲】
【請求項１】
パケットでデータを通信するシステムであって、各パケットはフレームに含まれ、該システムは、
フレームを順次送信し受信すべく配置された複数のルータ（118）と、
複数のノード（102）であって、各ノードが、ルータへフレームを送りルータからフレームを受け取るべく配置されたフレームムーバ（116）とフレームムーバへパケットを供給しフレームムーバからパケットを受け取るべく配置されたパケットムーバ（114）とを含むものとを具備し、
複数のルータとノードがネットワークにおいて相互接続され、
複数のノードの中の発信元ノードのパケットムーバがそのフレームムーバへ複数のノードの中の宛先ノードを示すパケット（302）を供給し、
ルーチングテーブル（406）が発信元ノードから宛先ノードへの複数の予め定められたルートを有し、
発信元ノードのフレームムーバが宛先ノードへの選択されたルートとして複数の予め定められたルートの一つを選択して選択されたルートとパケットを含むフレーム（300）を生成し、
発信元ノードが発信元ノードから宛先ノードへ選択されたルートに沿ってフレームを送信し、ここにおいて、選択されたルートはフレームに含まれる選択されたルートに応答してフレームを送信する１つ以上のルータの連鎖を含み、
宛先ノードのフレームムーバがフレームを受信しそれに含まれているパケットを宛先ノードのパケットムーバへ供給し宛先ノードのパケットムーバがパケットのエラーをチェックしエラーの検出に応答してパケットを廃棄しエラーを検出しないことに応答してパケットのアクノリッジメントを発信元ノードへ送信し、
発信元ノードのパケットムーバが予め定められた期間パケットのアクノリッジメントを受信しないことに応答して宛先ノードへパケットを再送し、ここにおいて、複数のノードの少なくとも１つのフレームムーバは選択されたルートとして複数の予め定められたルートの確率分布に従って複数の予め定められたルートの前記１つを選択する、システム。
【請求項２】
複数のルータとノードはネットワークにおいてメッシュリンクで相互接続される請求項１記載のシステム。
【請求項３】
複数のノードの少なくとも１つのフレームムーバは複数の予め定められたルートの前記１つを選択されたルートとして選択するために使用される乱数を発生する乱数発生器を具備する請求項１記載のシステム。
【請求項４】
発信元ノードのフレームムーバは選択されたルートをフレームの初めの部分に含ませ、
１つ以上のルータの連鎖におけるルータの少なくとも１つはフレームの初めの部分を受信しフレームの終わりの部分の受信に先立ってフレームの初めの部分に含まれる選択されたルートに応答して該初めの部分を送信する請求項１記載のシステム。
【請求項５】
複数のノードの少なくとも１つのパケットムーバは、
複数の中の互いに他のノードのパケットムーバからの期待される次のパケットの通し番号を格納するテーブルと、
他のパケットムーバから受信された１つ以上のパケットを格納するためのバッファ（1114）と、
前記他のパケットムーバから受信した前記１つ以上のパケットの１つの通し番号をそのパケットムーバに対応してテーブルに格納されている通し番号と比較して、該１つ以上のパケットの該１つの通し番号が該格納されている通し番号に続くことに応答して該１つ以上のパケットの該１つをバッファに格納し、該１つ以上のパケットの該１つの通し番号が格納されている通し番号に一致することに応答して該１つ以上のパケットの該１つを処理して格納されている通し番号をインクリメントし、インクリメントされた格納されている通し番号がバッファに格納されている他のパケットの通し番号に一致することに応答して該他のパケットを取り出して処理してインクリメントされた格納されている通し番号を再度インクリメントするための受信回路（1104）とを具備する請求項１記載のシステム。
【請求項６】
発信元ノードが発信元ノードから宛先ノードへ選択されたルートに沿ってフレームを送信することは、
受信ノードまたはルータが送信ノードまたはルータの第１のクロック信号を使ってバッファにフレームの一部を受け入れること、および
受信ノードまたはルータが受信ノードまたはルータの第２のクロック信号を使ってバッファから該フレームの一部を読み出すことを含む請求項１記載のシステム。
【請求項７】
パケットを含むフレームを順次送信し受信すべく配置された複数のルータ（118）と複数のノード（102）を具備するシステムにおいてパケットでデータを通信する方法であって、複数のルータとノードはネットワークにおいて相互接続され、該方法は、
発信元ノードから宛先ノードへパケット（302）を通信するための選択されたルートとして予め定められた複数のルートの１つを選択し、
選択されたルートおよびパケットを含むフレーム（300）を生成し、
発信元ノードから宛先ノードへ選択されたルートに沿ってフレームを送信し、ここにおいて、選択されたルートはフレームに含まれる選択されたルートに応答してフレームを送信する１つ以上のルータの連鎖を含み、各ノードはフレームを送信しルータからフレームを受信すべく配置されたフレームムーバ（116）とフレームムーバへパケットを供給しフレームムーバからパケットを受け取るべく配置されたパケットムーバ（114）とを含み、フレームムーバはパケットを通信するための選択されたルートとして複数の予め定められたルートの確率分布に従って複数の予め定められたルートの前記１つを選択することを具備する方法。
【請求項８】
フレームを受信し、
パケットのエラーをチェックし、
エラーの検出に応答してパケットを廃棄し、
エラーを検出しないことに応答してノードの１つへパケットのアクノリッジメントを送信し、
予め定められた期間内にパケットのアクノリッジメントを受信しないことに応答して宛先ノードへパケットを再送することをさらに具備する請求項７記載の方法。
【請求項９】
選択されたルートとして複数の予め定められたルートの確率分布に従って複数の予め定められたルートの前記１つを選択することは、複数の予め定められたルートの前記１つを選択されたルートとして選択するために使用される乱数を発生することを具備する請求項７記載の方法。
【請求項１０】
選択されたルートをフレームの初めの部分に含ませ、
前記１つ以上のルータの連鎖におけるルータの少なくとも１つが、フレームの終わりの部分の受信に先立って、フレームの初めの部分に含まれる選択されたルートに応答して該初めの部分を送信することをさらに具備する請求項７記載の方法。
【請求項１１】
複数の中の１つ以上の他のノードのパケットムーバの各々から期待される次のパケットの通し番号を格納し、
該１つ以上の他のパケットムーバの１つから受信した１つ以上のパケットの通し番号をそのパケットムーバに対応して格納されている通し番号と比較し、
該１つ以上のパケットの１つの通し番号が該格納されている通し番号に続くことに応答して該１つ以上のパケットの該１つを格納し、
該１つ以上のパケットの該１つの通し番号が該格納されている通し番号に一致することに応答して該１つ以上のパケットの該１つを処理して該格納されている通し番号をインクリメントし、
インクリメントされた格納されている通し番号が他の格納されているパケットの通し番号に一致することに応答して該他の格納されているパケットを取り出して処理しインクリメントされた格納されている通し番号を再度インクリメントすることをさらに具備する請求項７記載の方法。
【請求項１２】
発信元ノードから宛先ノードへ選択されたルートに沿ってフレームを送信することは、
受信ノードまたはルータが送信ノードまたはルータの第１のクロック信号を使ってバッファにフレームの一部を受け入れること、および
受信ノードまたはルータが受信ノードまたはルータの第２のクロック信号を使ってバッファからフレームの一部を読み出すことを含む請求項７記載の方法。
【発明の詳細な説明】
関連出願の相互参照
本願発明の主題は、下記に掲げる出願の主題と関連している。
米国特許出願第08／605,676号、“ダイナミックなネットワーク・トポロジー探査のシステムおよび方法”の名称で、Thomas M.Wicki, Patrick J.Helland, Wolf-Dietrich WeberおよびWinfried W.Wilckeによって1996年２月22日に出願、そして米国特許第5,740,346号として1998年４月14日に発行、（特表平11−504494号公報）、
米国特許出願第08／603,926号、“低い待ち時間、高いクロック周波数  プレジオ非同期  パケットベース  クロスバー・スイッチング・チップ・システムおよび方法”の名称で、Thomas M.Wicki, Jeffrey D.Larson, Albert MuおよびRaghu Sastryによって1996年２月22日に出願、そして米国特許第5,838,684号として1998年11月17日に発行、（特表平11−504496号公報）、
米国特許出願第08／603,880号、“パケットスイッチングネットワーク内のルーチングデバイス出力アクセス用調整方法および装置”の名称で、Jeffrey D.Larson, Albert MuおよびThomas M.Wickiによって1996年２月22日に出願、そして米国特許第5,892,766号として1999年４月６日に発行、（特表平11−504781号公報）、
米国特許出願第08／604,920号、“電圧の揺れを少なくし、かつ、内部のブロック化データパスを生じさせないクロスバースイッチおよびその方法”の名称で、Albert MuおよびJeffrey D. Larsonによって1996年２月22日に出願、そして米国特許第5,991,296号として1999年11月23日に発行、（特表平11−51163号公報）、
米国特許出願第08／603,913号、“ネットワーク要素間のデータ伝送を制御するシステムおよび方法”の名称で、Thomas M.Wicki, Patrick J.Helland, Jeffrey D.Larson, Albert Mu, Raghu SastryおよびRichard L.Schober, Jr.によって1996年２月22日に出願、そして米国特許第6,003,064号として1999年12月14日に発行、（特表2000−506326号公報）、
米国特許出願第08／603,911号、“相互接続の障害検出およびその位置特定方法および装置”の名称で、Raghu Sastry, Jeffrey D.Larson, Albert Mu, John R.Slice, Richard L.Schober, Jr.およびThomas M.Wickiによって1996年２月22日に出願、そして米国特許第5,768,300号として1998年６月16日に発行、（特表平11−504495号公報）、
米国特許出願第08／603,923号、“多重ワード通信におけるエラー検出方法および装置”の名称で、Thomas M.Wicki, Patrick J.HellandおよびTakeshi Shimizuによって1996年２月22日に出願、そして米国特許第5,931,967号として1999年８月３日に発行、（特表2000−503498号）、
米国特許出願第08／603,882号、“正のソース帰還をそなえたクロック動作されるセンス増幅器”の名称で、Albert Muによって1996年２月22日に出願、そして米国特許第5,615,161号として1997年３月25日に発行、（特表2000−503449号）、
参考として、上記の出願の全てを本願発明の全体に亘って取り入れている。
発明の分野
本発明は、ネットワーク上のデータ転送、特に、マルチプロセッサ環境における非同期パケット交換データ転送に関する。
発明の背景
マルチプロセッサシステムは１つまたはそれ以上のメモリに接続されたいくつかのプロセッサを含んでいる。それらの相互接続は、例えば共有バス、クロスバー等のいくつかの形の１つを取り得る。そのような相互接続は高速アクセス（短かい待ち時間）と広い帯域幅をサポートしなければならない。現在存在している相互接続には（バス相互接続におけるように）帯域幅が制限されるか（クロスバー相互接続におけるように）スケーラビリティの問題があるか（一般のネットワークにおけるように）待ち時間が長過ぎるといった欠点がある。
すべてのメモリに対して短かい待ち時間で広い帯域幅のアクセスを可能にするマルチプロセッサシステムが望まれている。さらにプロセッサ／メモリが追加されたとき利用可能な帯域幅が増える（比例的に増える）べきである。
発明の概要
本発明において、マルチノードシステムは互いに結合された複数のノードを具備している。ノードはポイント−ポイント間のパケットで互いに通信している。各ノードはパケットムーバとフレームムーバを含んでいる。パケットムーバはフレームムーバへパケットを供給し、他のパケットムーバの１つからのパケットの受信に応答してアクノリッジメントを供給し、アクノリッジメントが予め定められた時間内に他のパケットムーバの１つから受信されないならばパケットをフレームムーバへ再送する。各パケットは宛先ノードを指示する。フレームムーバはパケットをフレームに変換し宛先ノードまでのルートを生成する。フレームに欠陥があれば廃棄されパケットムーバがそのパケットを再送する。フレームムーバはソースルーチングとノードまでの複数ルートを提供する。相互接続はフレキシブルなトポロジで良い。パケットは制限された有限の寿命を有する。
フレームムーバは宛先ノードまでの予め選択されたルートを選択し、該予め選択されたルートを含むフレームを生成し、フレームを宛先ノードへの伝達のために複数のルータへ供給する。ルートはそれらの間での伝達のための複数のルータのうちのいくつかを通るルートステップの連鎖を含んでいる。フレームムーバは宛先ノードまでの複数の予め選択されたルートを格納するためのルーチングテーブルを含み、フレームに含めるために複数の予め選択されたルートの１つを選択するためのコントローラを含んでいる。
【図面の簡単な説明】
図１は本発明に係るマルチプロセッサシステムを表わすブロック図である。
図２は図１のマルチプロセッサシステムのプロトコル階層を表わすブロック図である。
図３はフレームとパケットを表わす図である。
図４はファストフレームムーバを表わすブロック図である。
図５はフレームのルートの選択を表わすブロック図である。
図６はフレームが相互接続を経て伝達される間のフレームヘッダ内のルーチング情報の修正を表わすブロック図である。
図７は半メッシュリンクを表わす図である。
図８はメッシュリンクのレシーバとトランスミッタの対に対する異なるクロックドメインを表わすブロック図である。
図９は本発明の第２の実施例におけるフォールトトレラントな相互接続を表わすブロック図である。
図10はバーチャルカットスルールーチングを表わすブロック図である。
図11は図１のマルチプロセッサシステムのリライアブルパケットムーバを表わすブロック図である。
図12ａはリライアブルパケットムーバによるパケットの送信動作を表わすフローチャートである。
図12ｂはリライアブルパケットムーバによるアクノリッジメントの処理とパケットの再送の動作を表わすフローチャートである。
図13はリライアブルパケットムーバによるパケットの受信の動作を表わすフローチャトである。
図14はペンディングパケットバッファをチェックする動作を表わすフローチャートである。
好適な具体例の詳細な記述
本発明の好適な具体例が図面を参照して記述されるが、そこでは同じ参照番号は同一または機能的に類似の要素を示している。また各参照番号の下２桁以外の数字はその参照番号が最初に使われる図面に対応している。
図１を参照すると、本発明に係るマルチプロセッサシステム100を表わすブロック図が示されている。マルチプロセッサシステム100は各々がメッシュリンク120で相互接続104に結合された複数のプロセッサノード102を含んでいる。各プロセッサノード102はプロセッサ106、コヒーレンス制御ユニット110及びローカルメモリ112を含んでいる。コヒーレンス制御ユニット110はリライアブルパケットムーバ（RPM）114とファストフレームムーバ（FFM）116を含んでいる。
リライアブルパケットムーバ114はプロセッサノード102間の信頼性のあるエンド−エンド間データ通信を提供する。ファストフレームムーバ116はデータを発信元プロセッサノード102から宛先プロセッサノード102へルーチングする。各プロセッサノード102に対して、あらゆる宛先プロセッサノード102へ向かう少なくとも１つの経路がファストフレームムーバ116に格納されている。相互接続104におけるトポロジー及びその中の失敗の領域の決定方法は、特許出願第08／605,676号、“ダイナミックなネットワート・トポロジー探査のシステムおよび方法”の名称で、Thomas M.Wicki, Patrick J.Helland, Wolf-Dietrich WeberおよびWinfried W.Wickeによって1996年２月22日に出願、そして米国特許第5,740,346号として1998年４月14日に発行、に記述されており、その事項は参照することによりここに組み入れられる。
プロセッサ102の他のアーキテクチャも使用可能である。例えば、コヒーレンス制御ユニット110はプロセッサ106に結合されたキャッシュメモリに結合されても良い。
相互接続104はメッシュリンク120で相互接続された複数のルータ118を含んでいる。複数のプロセッサノード102はメッシュリンク120でルータ118に結合されている。１つ以上のプロセッサノード102が同じルータ118に結合されても良い。ルータ118は好ましくはクロスバースイッチである。図示の目的のためにここに記述される特別の実現形態において、ルータ118は６つのポートを有している。勿論、プロセッサノード102の数が少ないシステムにおいては、相互接続104は唯１つのルータ118を含んでおり、２つのプロセッサノード102を含むシステムでは、ルータ118が含まれる必要はない。ルータの一例は、特許第08／603,926号、“低い待ち時間、高いクロック周波数  プレジオ非同期  パケットベース  クロスバー・スイッチング・チップ・システムおよび方法”の名称で、Thomas M.Wicki, Jeffrey D.Larson, Albert MuおよびRaghu Sastryによって1996年２月22日に出願、そして米国特許第5,838,684号として1998年11月17日に発行、に記述されており、その事項は参照することによりここに組み入れられる。
相互接続104はすべての通信がプロセッサノード102−プロセッサノード102間で直接行なわれるパケットベースのプロトコルを使用する。相互接続104は多数同報または放送機能を提供する必要はない。すべての転送データは、図３との関連において以下に記述されるパケットに分けられる。
マルチプロセッサシステム100は不均一なメモリアクセス時間を提供する共有メモリシステムである。プロセッサ106は他のローカルメモリ112をアクセスすることもできる。第１のプロセッサノード102のローカルメモリ112へのアクセスは他のプロセッサノード102のメモリへのアクセス時間よりも短かい。プロセッサ106がローカルメモリ112をより多く使用することを許すソフトウェアを書くことにより、待ち時間は減少する。ネットワークの待ち時間は、メモリ要求が送信されたときから測定された、要求中のプロセッサノード102へ要求されたデータがもたらされるまでに必要な時間である。言い換えれば、待ち時間はデータが要求された後にそれが受け取られるまでにどれだけの時間がかかるかを示している。
コヒーレンス制御ユニット110とローカルメモリ112の間のリンクの帯域幅は、コヒーレンス制御ユニット112と相互接続104の間のリンクの帯域幅に実質的に等しいことが好ましい。帯域幅はデータを受け取りまたは送出することのできる速度とパスの幅の双方に依存する。
マルチプロセッサシステム100は好適には分散メモリシステムである。より特定すれば、システム100は物理的に分散されているがローカルメモリ112が論理的に共有されるメモリアーキテクチャを有している。例えば、プロセッサノード102例えばノードＡは、このノード102がローカルであるものとして処理するがそれは実際には異なるプロセッサノード102例えばノードＢに結合された異なるローカルメモリ112に物理的に位置するメモリ位置へのアクセスを要求することができる。要求中のノードまたは発信元のノード（ノードＡ）のコヒーレンス制御ユニット110はメモリの位置を特定しその位置に格納されたデータがすばやく取り出される。
マルチプロセッサシステム100はプロセッサとしての能力を持たない入力／出力（Ｉ／Ｏ）ノード103もまた含んでいる。明確化のため、唯一のＩ／Ｏノード103が示されている。そのようなノード103はPCIバスまたはＳバスのようなバスとのインターフェースをとるためのバス変換器であっても良い。そのようなＩ／Ｏノード103はここに記述されたような発信元または宛先ノード102として機能することもできる。このように、ここでのデータの通信及び処理の記述において、プロセッサノード102が記述されるとき、Ｉ／Ｏノード103もまた使用することができる。
図２を参照すると、プロセッサノード102と相互接続104のプロトコル階層を表わすブロック図が示されている。プロトコル階層は相互接続サービスマネージャ(ISM）層202、リライアブルパケットムーバ(RPM）層104、ファストフレームムーバ(FFM）層206、及び物理層208を含んでいる。コヒーレンス制御ユニット110は、プロセッサ106が実行するソフトウェアで制御可能な相互接続サービスマネージャ層202、リライアブルパケットムーバ層204、ファストフレームムーバ層206、及び物理層208の一部、の機能を提供する。それらの階層ではシステム100の機能のより能率的な分割とシステムの一部の独立な更新及び試験のことが考慮されている。相互接続サービスマネージャ層202はコヒーレンスを保証するためにポイント−ポイント間でメッセージを通信する。第１のプロセッサノード202の相互接続マネージャ層202が他のプロセッサノード102へデータを送るかまたはそれからのデータを要求するとき、第１のプロセッサノード102の相互接続マネージャ層202は、リライアブルパケットムーバ114にデータを送るべきであるかまたは要求すべきであること及びデータの発信元または宛先を知らせるコマンドをリライアブルパケットムーバ114へ送る。
リライアブルパケットムーバ層204では、発信元のプロセッサノード102が宛先のプロセッサノード102へデータを送り、相互接続104内の経路を決定することまたは経路に関する何らの情報を使用することもない。リライアブルパケットムーバ層204は、パケット302を通信するためにファストフレームムーバ層206を使うことによって、プロセッサノード102間でパケット302(図３参照）の信頼性のある配送を提供する。リライアブルパケットムーバ層204はエンド−エンド間のデータの一貫性を提供する。リライアブルパケットムーバ層204では、リライアブルパケットムーバ114はデータを送りそのデータが受けとられたことを示すアクノリッジ信号を監視する。もしそれが或るタイムアウト期間内にアクノリッジされなかったら、リライアブルパケットムーバ114はデータを再送する。これは好ましくはソフトウェアによる実現ではなくハードウェアで実現される。このように、リライアブルパケットムーバ層204は伝送中に失なわれたかまたは破壊されたデータを再送する。リライアブルパケットムーバ層204はパケットの重複を抑制し、誤った順序で受信されたデータパケットの並べ換えを行なう。リライアブルパケットムーバ層204は宛先プロセッサノード102の送信パケットバッファ1106（図11）のオーバーランを避けるべくノード−ノード間のフロー制御を提供する。リライアブルパケットムーバ層では、通信はプロセッサ102間で行なわれ１対多または同報通信ではない。パケット302が２以上のプロセッサノード102へ送られるときは、相互接続サービスマネージャ層202が各宛先プロセッサノード102へパケット302のコピーを別々に送る。
ファストフレームムーバ層206では、通信は直接に接続されたエレメント（例えばプロセッサノード102とルータ118）間のポイント−ポイント間通信である。フレーム300(図３参照）は発信元プロセッサノード102から相互接続104のルータ118を経て他のルータ118へ送られさらに宛先プロセッサノード102へ送られる。ファストフレームムーバ層206は隣り合ったエレメント（ルータ118とプロセッサノード102）間の各ステップについてフロー制御を提供する。ファストフレームムーバ層206はこれらのステップをつないだルートを提供し、それによってフレームを或るノードから他へ送達する。ファストフレームムーバ層206は使用されるフレーム300の部分のみについて簡単な一貫性チェックを行なうがエラーの訂正は行なわない。もしエラーが起こったらファストフレームムーバ層206はそのフレーム300を廃棄し、その後に、センダがデータを再送する。ファストフレームムーバ層206はメッシュリンク120の他端に接続された直接の隣人のオーバーランを避けるためのメッシュリンクフロー制御を提供する。ファストフレームムーバ層206は各フレーム300に対するエラー検出を行なわず悪いフレーム300をドロップすることにより短かい待ち時間でストリームライン化されている。
物理層208は相互接続104のケーブル、コネクタ等とプロセッサノード102とのインターフェースを含んでいる。
図３を参照すると、フレーム300とパケット302を表わす図が示されている。フレーム300はファストフレームムーバ116で使用されるデータ転送の単位である。フレーム300はフレームヘッダ304とフレーム本体であるパケット302を含んでいる。フレームヘッダ304はルーチング情報318、フロー制御情報320、及びプライオリティ情報322を含んでいる。ルーチング情報318はそのフレームを処理しそのルーチングを制御する予定のルータ118の連鎖を含んでいる。フロー制御情報320は次の下流のルータ118またはプロセッサノード102の容量に関する情報を含んでおり、データの流れの制御または停止を可能にする。プライオリティ情報322はフレーム300の優先度レベルを含んでいる。フレームヘッダ304は好ましくは大きさ68ビット（８1／2バイト）のワードで１ワードである。フレーム本体（パケット302）は好適には大きさが２〜18（68ビット）ワードである。
パケット302はパケットヘッダ306とパケットデータ308を含んでいる。パケットヘッダ306はパケットヘッダディスクリプタ310、プライオリティアクノリッジメントリクエスト324、及びエラー検出コード（EDC）312を含んでいる。パケットヘッダ306は好適には68ビットのワードで２ワードであり、各ワードは64ビット（８バイト）のデータと４ビットのEDCである。パケット302はパケットデータ308を含んでいなくても良い。パケットデータ308は可変長であり、好ましくは０ないし128バイトのデータ（０ないし16ワード）である。例えばアクトリッジメントパケット（後述）はパケットヘッダ306とEDC312のみを含んでいる。パケットデータ308はデータであって良い。パケットヘッダディスクリプタ310は宛先プロセッサノード102を示す情報を含んでいる。図12とともに後に説明するように、リライアブルパケットムーバ114はそれがパケット302を処理するときパケット302にEDC312を付加する。EDC312は好ましくはパケット308の16バイトごとに１バイト（８ビット）である。EDC312はパケットデータ308の各８バイトに対して４ビットとして格納され、16バイトまたは２ワードに対する８ビットが１度にチェックされる。プライオリティアクノリッジメントリクエスト324はパケット302が受信されたという既座のアクノリッジメントを宛先プロセッサノード102が送ることの要求である。
リライアブルパケットムーバ114はパケット302の通し番号を含むパケットヘッダを生成する。通し番号は識別子であり発信元プロセッサノード102から宛先ノード102へ送られるパケット302の順序のインジケータである。通し番号は各発信先−宛先ノードのペアについて生成される。ファストフレームムーバ116はフレーム本体（パケット302）を調べたり修正したりはしない。ファストフレームムーバ116はパケット302を受信するとフレームヘッダ304を生成する。ファストフレームムーバ層206の一部であるルータ118は図５〜６に関連して以下に記述されるように相互接続104を経てフレームが通信されるときフレームヘッダ304を修正する。宛先プロセッサノード102のファストフレームムーバ116は宛先プロセッサノード102のリライアブルパケットムーバ114へパケット302を引き渡すときフレームヘッダ304を廃棄する。
図４を参照すると、送信回路402と受信回路404を含むファストフレームムーバ116を表わすブロック図が示されている。各ファストフレームムーバ116は送信回路402と受信回路404の双方を含んでいるが、明確化のために、１つの送信回路402と１つの受信回路404のみが示されている。送信回路402はルーチングテーブル406、乱数発生器407、及びFFM送信コントローラ408を含んでいる。受信回路404はバッファマネージャ410、バッファ412、及びFFM受信コントローラ414を含んでいる。ルーチングテーブル406は相互接続104を経て各宛先プロセッサノード102へ至る少なくとも１つのルートを格納している。フレーム300がルートに沿って通信されるときルート上の各ルータ118はルートから１つのルーチングステップを取り除くことによってフレームヘッダ304を修正する。
ファストフレームムーバ114及びルータ118はメッシュリンク120上のフロー制御を維持する。受信回路404のバッファマネージャ410はバッファ412のステータスを監視し、ルータ118またはプロセッサノード102のいずれかである次の上流の隣人にメッシュリンク120を介してステータス情報を送る。同様に、各ルータ118はその中のバッファ（図示せず）のステータスを監視し、同様にルータ118またはプロセッサノード102のいずれかである次の上流の隣人にメッシュリンク120を介してステータス情報を送る。発信元プロセッサノード102のファストフレームムーバ114またはルータはバッファ412に空きができるまで次の下流の隣人（プロセッサノード102またはルータのいずれか）へのフレーム300の送信を遅くするかまたは停止する。フロー制御のそのような実現の１つは米国特許出願第08／603,913号、“ネットワーク要素間のデータ伝送を制御するシステムおよび方法”の名称で、1996年２月22日に出願、そして米国特許第6,003,064号として1999年12月14日に発行、に記述されており、その事項は参照することによりここに組み入れられる。
ルータ118はルータ118の動作として許される範囲内のエラー検出を行なう。例えば、ルータ118はルータ118の次のリンクが存在するかどうかを決定する。例えば、ルータ118が６つのポートを持っておりフレームヘッダ304はフレーム300がポート０のような存在していないポートへ供給されるべきであることを示しているならばルータ118はフレーム300を廃棄する。
図５を参照すると、フレーム300のルートの選択を表わすブロック図が示されている。図６を参照すると、フレーム300が相互接続104を介して通信される間におけるフレームヘッダ304内のルーチング情報318の修正を表わすブロック図が示されている。ルートの選択は発信元プロセッサノード102と宛先プロセッサノード102と複数のルートの１つを取り出すための乱数のみに依存する。ルートは好ましくはフレーム300の大きさまたは種類に基づかない。
相互接続104を通るルートは決定論的である。ルートの選択は予め定められたルートのテーブルを格納するルーチングテーブル406から選択される。ルートが選択されフレーム300が相互接続104へ供給されるとパスが決定される。フレーム300は宛先プロセッサノード102までのこのルートに従うかまたはエラーの際にルートの途中で廃棄される。決定論的なルーチングはいくつかの利点をもたらす。第１に、ルータ118による決定を伴うことなくフレーム300がフレーム300の次の宛先を定めるのでルータ118がフレーム300をすばやく処理することができる。第２に、フレーム300の相互接続内での寿命が制限される。フレーム300は有限の長さの予め定められたルートによって通信される。このことはリライアブルパケットムーバ114が有限の長さの通し番号を使用することを許し、それによってパケットヘッダ306の大きさが小さくなる。ほとんどの場合に、このことは相互接続104からの古いパケット802をなくす。第３に、予め選択されたルートは相互接続104を通る任意のパスに従うことができる。相互接続の負荷を適切に分散させることができる。
ルートは発信元プロセッサノード102と宛先プロセッサノード102の間で直接結合されたルータ118の連鎖を含んでいる。ルートは特別のトポロジを必要としない。実際、２つの直接結合されたルータ118間のリンクがユニークに定められる任意のトポロジが使用可能である。
特に図５〜６を参照すると、ファストフレームムーバ116は、予め特定された宛先ノード例えばプロセッサノードＢに送られるべきであるパケット302で示されるパケット302をリライアブルパケットムーバ114から受け取る。ファストフレームムーバ116は乱数発生器407から１つの乱数を受け取る。ファストフレームムーバ116は確率分布テーブル502内の複数のメモリ位置504の１つを選択するためにこの乱数を使用する。各メモリ位置504は、発信元プロセッサノード102(例えばノードＡ）から宛先プロセッサノード102(例えばノードＢ）までの複数の予め特定されたルートの１つを格納している。次にファストフレームムーバ116は選択されたメモリ位置504からその中に格納されている予め特定されたルートを抽出する。確率分布テーブル502は好適にはルートの選択を偏らせる予め特定された確率分布に従ってつくられる。例えば、ファストフレームムーバ116はルーチングテーブル406に格納されたルートの１つを予め定められた数のメモリ位置504に格納することによって確率分布を生成する。確率分布502はルートの各々がメモリ位置504に格納される頻度によって決定される。ファストフレームムーバ116はこのように選択された予め特定されたルートを含むフレームヘッダ304を生成し、このフレームヘッダ304をパケット302に付加してフレーム300を生成する。
さて、特に図６を参照する。前述したようにフレームヘッダ304は発信元プロセッサノード102から相互接続104を経て宛先プロセッサノード102に至る予め定められたパスを特定するルーチング情報318を含んでいる。前に指摘したように、ルートは一連のルートステップを含んでいる。各ルートステップはルータ118がフレーム300を送り出すルータ118のポートを定める。各ルートステップは可変の大きさを有する。例えば、６ポートのルータ118においては３ビットがポートを定める。12ポートのルータ118においては４ビットがポートを定める。従って、１つのルートが様々な大きさのルータ118を含む場合がある。勿論、ルートが異なる数のルートステップを含む場合がある。この場合に、ルートは異なる大きさのルートステップを含む。図６のリンク１において、ルーチングパスはリンク３、リンク５、リンク２及び宛先プロセッサノード102である。ルーチングパスの各リンクはフレームヘッダ304から次のリンクのコードを取り去り、フレームヘッダ304内のルーチングパスをシフトし、フレームヘッダ304の終りを存在しないプロセッサノードの番号すなわち０で満たす。次にそのリンクは修正されたフレームヘッダ304を有するフレーム300を次のリンクに供給する。例えばリンク＃３はポート５を経てフレーム300を供給しフレームヘッダ304からリンク５を除去する。勿論、ルートの最後のリンクはフレーム300を宛先プロセッサノード102へ供給する。
図７を参照すると、メッシュリンク120の半分を表わす線図が示されている。メッシュリンク120は１対の単方向のデータパスを含んでいる。この対は送信から受信へスイッチされる共有媒体よりも広い帯域幅を提供し、そのような共有媒体に対して起こる伝幡遅延への依存性をなくす。高速度システムに対しては多ビットの情報がメッシュリンク120上に一度に存在しうる。その対はルータ118が双方向で同時に通信することを可能にする。メッシュリンク120はポイント−ポイント間の電機接続を提供する。メッシュリンク120は好適にはバスではない。各単方向データパスはデータライン702と制御ライン、特に、クロックライン704、データ／ステータス指示ライン706、フレームエンベロープライン708及び基準電圧ライン710を含む半メッシュリンクである。データライン702はフレーム300を伝達するためのパスを提供する。バッファステータス情報はフレーム300が送られないときに同じデータライン702上に多重化される。相互接続104の帯域輻はデータライン702の数に依存する。データライン702は好適にはクロックエッジあたり１／２ワードのフレーム300を伝達するために34線である。クロックライン704はフレーム300を相互接続104を経て供給しているプロセッサノード102のクロックのための通信パスを提供する。クロックライン704は好適には２線上の完全差動単一クロックである。データ／ステータス指示ライン706はデータライン702上の信号がデータであるかステータスであるかを示す信号を供給する。例えば、図４との関連において前述されたようなメッシュリンク120のフロー制御については、データ／ステータス指示ライン706はバッファ412のステータス情報がデータライン702上で通信されていることを示す。データ／ステータス指示ライン706は好ましくは１本の線を有している。フレームエンベロープライン708はフレームの始まりを示すフレームエンベロープ信号を供給する。特に、フレームエンベロープ信号はフレームヘッダ304の始まりを示し、フレームの伝送中はアクティブにとどまる。フレームエンベロープ信号はフレームの終りでまたはフレームが背中合わせで伝送されることを可能にするためその終りよりも充分な時間だけ前にイナクティブになる。フレームエンベロープライン708は好ましくは単一の線を有している。基準電圧ライン710は単線差動であるすべてのデータ及び制御ライン702，706，708上での小信号の変化を可能にするため、ルータ118またはプロセッサノード102に対する基準電圧を提供する。基準電圧ライン710は好ましくは５線である。各メッシュライン120は好ましくは各方向で43線或いは全体で86線を有している。これによりメッシュリンク120上で34ビットのパラレル伝送が可能となる。したがって１ワードは２クロックサイクルで伝送され、それは双方のエッジでラッチされれば１クロックサイクルに等しい。
図８を参照すると、メッシュリンク120の１対のレシーバとトランスミッタに対する異なるクロックドメインを表わすブロック図が示されている。各プロセッサノード102と各ルータ118はクロック信号を提供するための内部クロック発生器802を有している。クロック発生器802は好ましくは実質的に等しいクロック信号を提供する。クロックはメッシュリンク120上で次の隣人（宛先プロセッサノード102またはルータ118）へ供給され、それはデータを受け入れるためにこのクロックを使用する。より特定すれば、このクロックは宛先プロセッサノード102またはルータ118においてファーストインファーストアクト（FIFO）バッファ804にデータをラッチするために使用される。宛先プロセッサノード102またはルータ118はFIFOバッファ804からデータを読み出すためにそれ自身の内部クロック発生器802を使用する。これにより宛先プロセッサノード102またはルータ118のクロックからの周波数シフト及び位相シフトを有するクロックに基づくデータを宛先プロセッサノード102またはルータ118が受け入れることが可能になる。このクロック手法はすべてのクロック全体の同期化の必要性をなくす。クロックドメインはプレジオ同期クロックドメインである。クロックはデータライン702上のデータとともにメッシュリンク120上に提供される。クロック手法の一例は米国特許出願第08／223,575号、“マルチパスデータ同期化システム及び方法”の名称で1994年４月６日に出願、そして米国特許第5,509,038号として1996年４月16日に発行、にあり、その事項は参照することによりここに組み入れられる。
図９を参照すると、本発明の第２の実施例に係るフォールトトレラントな相互接続を表わすブロック図が示されている。相互接続104はプロセッサノード102間にフォールトトレラントにするために冗長なパスを提供する少なくとも２つのサブメッシュ902を含んでいる。ファストフレームムーバ116は、動的に、機能していないかまたは取り除かれたルータ118またはメッシュリンク120のまわりに再ルーチングするか他のサブメッシュ902を使用する。
各サブメッシュ902はすべてのプロセッサノード102へメッシュリンク120により結合される。各サブメッシュ902は好ましくはフォールトトレラントでないメッシュに類似している。各プロセッサノード102はサブメッシュ902の各々と別のメッシュリンク120で結合されているルータ118にメッシュリンク120で結合される。
各ルータ118はルータ118がフレーム300を廃棄するごとにインクリメントされるカウンタ（図示せず）を含んでいる。マルチプロセッサシステム100は周期的にカウンタを読みそれに接続されているルータ118またはメッシュリンク120が欠陥を有しているかを決定する。そのような決定がなされたら、マルチプロセッサシステム100は欠陥冗長性のあるシステムにおいて予め定められたルートからそのルータ118またはサブメッシュ902を取り除く。例えば、プロセッサノード102はルーチングテーブル406からルートを選択するための確率分布テーブル502からこのルートを削除する。プロセッサノード102は各宛先プロセッサノード102について要求されるパケット302の再送の回数をカウントし、カウント値が予め定められた閾値よりも大きければパス内のルータ118が高い欠陥カウントを有しているかを決定する。
図10を参照すると、フレーム300終りがまだ受信されていなくてもルート内の次のルータ118またはプロセッサノード102へフレーム300の始まりが送られるバーチャルカットスルールーチングを表わすブロック図が示されている。より特定すれば、パケット302は複数のセグメント1002、例えば７に区切られる。セグメント1002は好ましくは異なるサイズである。前述のように、発信元プロセッサノード102は宛先プロセッサノード102へパケットを送るためのルートを選択する。発信元プロセッサノード102はフレーム300をルート内の最初のルータ118に供給する。フレームヘッダ306を受信すると、ルート内の第１のルータ118はフレーム300を送るための次のメッシュリンク120を決定し受け側のバッファ資源が利用可能であり出力ポートが利用可能であればフレーム300の送出を開始する。フレーム300は宛先プロセッサノード102を含む多くのルータ118とメッシュリンクにまたがる可能性がある。図10に示されるように、フレーム300の第１セグメント1002は宛先プロセッサノード102に到着し第２〜第６セグメント1002はルート内の異なるルータ118及びメッシュリンク120にある。発信元プロセッサノード102は第７セグメント1002をまだ送っていない。バーチャルカットスルールーチングの待ち時間は代表的には中間のルータ118におけるバッファリングを含んでいない。これに対して、蓄積交換ルーチングではメッセージ全体が転送の前に蓄積される。このようなルーチングでは待ち時間はバッファリングを含んでいる。
図11を参照すると、リライアブルパケットムーバ114を表わすブロック図が示され、それは送信回路1102と受信回路1104を含んでいる。各リライアブルパケットムーバ114は送信回路1102と受信回路1104の双方を含んでいるが、明確化のため、１つの送信回路1102と１つの受信回路1104のみが示されている。送信回路1102は失われたかまたは破壊されたデータの再送の制御のために送信パケットバッファ1106、RPM送信コントローラ1108、パートナインフォメーションテーブル1110及びタイムアウト回路1112を含んでいる。送信パケットバッファ1106は送信されたがアクノリッジされていないパケット302を格納する。送信パケットバッファ1106はソフトウェアで実現されるシステムにおけるよりもサイズが小さい。その理由は、バーチャルカットスルールーチングとの組み合わせにおいてシステム100の待ち時間を小さくすればパケット302の受信順序の誤りが少なくなりもし送信パケットバッファ1106が一杯になったら相互接続サービスマネージャ層202がパケット302を保持するからである。パートナ情報テーブル1110は各宛先プロセッサノード102について送る予定でありその宛先プロセッサノード102からアクノリッジされる予定である次のパケット302の通し番号を格納する。RPM送信コントローラ1108は送信回路1102の動作を制御する。タイムアウト回路1112は失なわれたかまたは破壊されたデータの再送の制御のための時間カウントを提供する。
受信回路1104はペンディングパケットバッファ1114、RPM受信コントローラ1116、及びパートナ情報テーブル1118を含んでいる。ペンディングパケットバッファ1114は誤った順序で受信されたパケット302を格納する。ペンディングパケットバッファ1114はソフトウェアで実現されたシステムにおけるよりもサイズが小さい。その理由はシステム100の待ち時間が小さいのでパケット302を誤った順序で受信することがより少ないからである。RPM受信コントローラ1116は受信回路1104の動作を制御する。パートナ情報テーブル1118は各発信元プロセッサノード102についてその発信元プロセッサノード102からの次に期待されるパケット302の通し番号を格納する。
リライアブルパケットムーバ114はパケット302の通し番号を含むパケットヘッダ306を生成する。通し番号は宛先プロセッサノード102にパケット302の順序を知らせるために使われる。宛先ノードは順番にパケット302を処理するのみである。正しい順序のパケットを受信したら宛先プロセッサノードは発信元プロセッサノードへパケット302の受信を知らせるアクノリッジメントを発信元プロセッサノードに送り返す。発信元プロセッサノード102が所定の時間内にアクノリッジメントを受け取らないならば発信元プロセッサノード102は同じ通し番号を使ってパケット302を再送する。
図12ａを参照すると、リライアブルパケットムーバ114の送信回路1102の動作を表わすフローチャートが示されている。データを送信するために、コヒーレンス制御ユニット110はデータと宛先プロセッサノード102の識別子をリライアブルパケットムーバ114へ供給し、それはデータをパケット302に変換して各パケット302に通し番号を割り当てる。各送信パケット302は発信元プロセッサノード102において送信パケットバッファ1106に格納される。もし1201それが容量を持っていたら、送信パケットバッファ1106はデータを受け入れ、リライアブルパケットムーバ114はパケット302を送信する。もしそうでなければ、相互接続サービスマネージャ層202はパケット302の送出を停止して待つ。
リライアブルパケットムーバ114がパケット302を送るとき、送信回路1102は宛先プロセッサノード102に対応するパートナ情報テーブル1110から通し番号を取得する1202。送信回路1102は取得した通し番号をパケット302のパケットヘッダ306に付加し1206エラー検出を行なう1207。送信回路1102は前述のように送信するためにパケット302をファストフレームムーバ116へ送る1208。送信回路1102はまたパケットが受信されたとのアクノリッジメントが受信されるまで、パケット302をそのパケット302のためのセットされていないマークビットとともに送信パケットバッファ1106に格納する1210。パートナ情報テーブル1110の通し番号は次のパケット302の送信のためにインクリメントされる1204。通し番号は有限であるからそれらは結局巡回する。従って、通し番号の領域は同じ通し番号のパケット302がシステム100内に同時にないように充分に大きい。
図12ｂを参照すると、パケットが送られた後のリライアブルパケットムーバによるアクノリッジメントパケットの処理とパケットの再送の動作を表わすフローチャートが示されている。アクノリッジメントパケットとはパケット302が受信されエラー検出を通過したことを示す受信回路1104から発信元プロセッサノード102への制御パケットである。アクノリッジメントパケットは宛先ノード番号、受信パケット302の通し番号及びEDCを含み好適には16バイトである。アクノリッジメントパケットは発信元宛先ノード102へ送られるべき他のパケット302に付加されても良い。これにより相互接続104におけるトラヒックが軽減される。アクノリッジメントパケッ自身はアクノリッジされずそれ自身の通し番号を含まない。アクノリッジメントパケット内の通し番号はすべての先行するパケット、すなわちアクノリッジメント内の通し番号または前に指摘した巡回を考慮して調整したものよりも小さい通し番号をもつすべてのパケットを暗黙的にアクノリッジしている。このことは受信回路1104がパケット302のアクノリッジメントを出し遅れることを許し２以上のパケット302をアクノリッジするために１つのアクノリッジメントパケットを使うことによりアクノリッジメントパケットのトラヒックが減少する。
送信回路1102はアクノリッジメントパケットが受信されたかを決定する1212。もしそうであれば送信回路1102は送信パケットバッファ1106から受信されたアクノリッジメントに対応するパケット302を削除する1214。この削除には発信元−宛先プロセッサノード102の対に対する送信パケットバッファ1106内のすべての先行するパケット302が含まれている。これらのパケット302はアクノリッジメントパケット内の通し番号或いは巡回を考慮して適切に調節された通し番号よりも小さいか等しい通し番号を有している。
アクノリッジメントパケットが所定のタイムアウト期間内に受信されないならばパケット302は再送される。特に、アクノリッジメントパケットが受信されないならば1212、送信回路1102はタイムアウト回路1112がタイムアウトしたかを決定する1216。もしそうでなければ、送信回路1102はアクノリッジメントが受信されるかの決定1212を続行する。
一方、タイムアウト回路1112がタイムアウトしたならば、送信回路1102は送信パケットバッファ1106に格納された各パケット302をチェックして1218そのパケット302にマークビットがセットされているか決定する。ビットがセットされていなければ、送信回路1102はそのパケット302にマークビットをセットする1220。このことはパケット302が再送される前に１ないし２回のタイムアウト期間を許すものである。マークビットがセットされている1218パケット302については、送信回路1102は送信パケットバッファ1106からパケット302を取り出し1222そのパケット302を再送信する1224。相互接続104に欠陥があるかを決めるために、制限されたまたは最大数の再送信が行なわれる。より特定すれば、送信回路1102はパケット302が所定の回数だけ再送されたかを決める1225。もしそうであれば、送信回路1102は相互接続サービスマネージャ層202にその再送の回数を知らせ1227、層202は発信元−宛先ノードの対の間でパケット302のルートを再設定する。再送回数が最大に達していなければ、最後のパケット302に達したら1226、送信回路1102は前述のようなアクノリッジメントパケットが受信されるかの決定1212を続行する。
図13を参照すると、リライアブルパケットムーバ114の受信回路1104の動作を表わすフローチャートが示されている。リライアブルパケットムーバ114の受信回路1104はパケット302を相互接続サービスマネージャ層202へ通し番号の順序で供給する。受信回路1104は相互接続104からパケット302を受け取る1302。ペンディングパケットバッファ1114が満杯であれば、受信回路1104はパケット302を廃棄する。或いは、受信回路1104がペンディングパケットバッファ1114に格納された最後のパケット302を廃棄するようにしても良い。これは処理量のためのもので正確さのためのものではないから、勿論他のパケットをペンディングパケットバッファ1114から廃棄するようにしても良い。受信回路1104はパケット302についてエラー検出を行なう1316。パケット302がエラー検出で失敗すれば1318、パケット302は廃棄され1310、受信回路1104はパケット302の受信1302を続行する。一方、パケット302がエラー検出で失敗しなければ1318、受信回路1104はパケットヘッダ306から通し番号と発信元ノード番号を抽出する1304。受信回路1104はパートナ情報テーブル1118から発信元プロセッサノードについての次に期待される通し番号を読み出し1306、次に期待される通し番号を抽出された通し番号と比較する1308。抽出された通し番号が期待される通し番号よりも小さければそのパケット302は既に受信回路1104で処理されており重複している。ここでも通し番号の巡回が適切に考慮される。そのパケット302は廃棄され1310、受信回路1104はパケット302の受信1302を続行する。
抽出された通し番号が期待された通し番号よりも小さくなければ、受信回路は抽出された通し番号が期待された通し番号に等しいかを決める1312。一致がなければ受信されたパケット302は正しい順序でない。受信回路1104はパケット302をペンディングパケットバッファ1114に格納し1314、受信回路1104はパケット302の受信1302を続行する。
一方、次に期待される通し番号が抽出された通し番号に一致すると1312、受信回路1104は相互接続104へアクノリッジメントを供給する1320。受信したパケット302は期待したパケット302であるから、受信回路1104は対応する発信元プロセッサについてのパートナ情報テーブル1118をインクリメントする1322。受信回路1104は順番における次のパケット302についてのペンディングパケットバッファ1114を処理しチェックする1326ためにパケット302を相互接続サービスマネージャ層202へ供給する1324。
図14を参照すると、ペンディングバッファ1114をチェックする1326動作を表わすフローチャートが示されている。受信回路1104は順番において次のパケット302についてペンディングパケットバッファ1114をチェックする1402。次の期待されたパケット302がペンディングバッファ1114にあれば、受信回路1104はアクノリッジメントを送り1104通し番号をインクリメントする1406。受信回路1104は相互接続サービスマネージャ層202へそのパケット302を供給する1408。受信回路1104は次に期待されるパケット302についてそのようなパケットがみつからなくなるまでペンディングパケットバッファ1114のチェックを続行する。受信回路1104は受信されたパケット302について監視1302（図13）を続行する。
上記の記述は好適な実施例の動作の説明のためのものであり、本発明の範囲を限定することを意味するものではない。上記の議論から、当業者にとって本発明の精神と範囲に含まれる多くの変形が明らかである。
【図１】
0003816531.tif 000002
【図２】
0003816531.tif 000003
【図３】
0003816531.tif 000004
【図４】
0003816531.tif 000005
【図５】
0003816531.tif 000006
【図６】
0003816531.tif 000007
【図７】
0003816531.tif 000008
【図８】
0003816531.tif 000009
【図９】
0003816531.tif 000010
【図１０】
0003816531.tif 000011
【図１１】
0003816531.tif 000012
【図１２ａ】
0003816531.tif 000013
【図１２ｂ】
0003816531.tif 000014
【図１３】
0003816531.tif 000015
【図１４】
0003816531.tif 000016