JP3697831B2 - コンピュータシステム - Google Patents
コンピュータシステム Download PDFInfo
- Publication number
- JP3697831B2 JP3697831B2 JP10132097A JP10132097A JP3697831B2 JP 3697831 B2 JP3697831 B2 JP 3697831B2 JP 10132097 A JP10132097 A JP 10132097A JP 10132097 A JP10132097 A JP 10132097A JP 3697831 B2 JP3697831 B2 JP 3697831B2
- Authority
- JP
- Japan
- Prior art keywords
- reception
- field
- message
- request
- pool
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Systems (AREA)
- Multi Processors (AREA)
Description
【0001】
【発明の属する技術分野】
本発明は、データ転送ネットワークを介してデータをメッセージの形式で転送するコンピュータシステムに関する。
【0002】
【従来の技術】
並列コンピュータシステムのうち、特に分散型記憶装置を有するシステムに使用する目的で記述されたソフトウェアの多くのアプリケーションでは、アプリケーションソフトウェアと通信ネットワークのハードウェアとの間のインタフェースとしてメッセージ通信ソフトウェアライブラリを使用する。こうしたライブラリの一例として、MPI(Message‐Passing Interface Standard; メッセージ通信インタフェース規格)がある。
【0003】
MPIの場合、ライブラリはソフトウェアのルーチンとして作成される。これらのルーチンは、アプリケーションソフトウェアによって呼び出され、並列コンピュータの各ノードにおける命令処理装置によって実行される。命令処理装置は、ノードの送信回路と受信回路とを制御する。これらの回路は、ネットワークを介してシステムの他のノードへと接続されている。
【0004】
MPI規格に準ずるライブラリにおいては、基本的に2種類のソフトウェアルーチンが存在する。一方のルーチンは、送信要求ルーチンであって、システムの他のノード宛てにメッセージの送信を要求するために使用される。他方のルーチンは、受信要求ルーチンであって、メッセージの受信を要求するために使用される。
【0005】
アプリケーションが送信要求ルーチンを呼び出してメッセージを送信する場合、アプリケーションは複数のパラメータを指定する。これらのパラメータとしては、メッセージの宛先ノード番号(各ノードは一意な識別番号を有する)、タグ値(アプリケーションがメッセージの種類を識別するために使用する値)、コミュニケータ値(送信における通信のコンテキストを指定するために使用され、メッセージは同一の通信コンテキストにおいてのみ受信可能である)、送信データのローカルメモリ内のアドレス、送信データの量などがある。
【0006】
アプリケーションが受信要求ルーチンを呼び出す場合、アプリケーションは、受信したいメッセージと、そのメッセージのローカルメモリ内の書込アドレスとを指定する。かかる指定に関するパラメータは、受信要求ルーチンに渡される。これらのパラメータとしては、タグ指定(特定のタグもしくは任意の無指定(Wildcard)タグ値を指定する)、送信元指定(特定の送信元もしくは任意の無指定(Wildcard)送信元値を指定する)、コミュニケータ値(受信時の通信のコンテキストを指定するために使用され、受信要求は同一の通信コンテキストで送信されたメッセージにのみ対応する)、宛先バッファのローカルメモリ内のアドレス、宛先バッファの大きさなどがある。
【0007】
受信ルーチンを実行すると、メッセージがすでに当該ノード宛てに送信済みであれば、受信メッセージ指定に対応する該メッセージが直ちにアプリケーションへと返送される。要求が直ちに実行できない場合、該要求に関する情報が記録され、かかる情報はポスト受信要求と呼ばれる。ついでこのようなメッセージの送信要求が発行されると、受信ルーチンは、当該メッセージを完成してアプリケーションソフトウェアへと返送する。またMPI規格は、複数のメッセージが互いを追い越さないことを定めている。すなわち複数の保留状態の受信要求が一メッセージに対応する場合、保留時間のもっとも長い受信要求がかかるメッセージによって満たされる。
【0008】
あるノードのローカルメモリから他のノードのローカルメモリへとメッセージを転送するためのハードウェアの従来技術が特開平6ー324998に開示されている。この従来技術の発明の一実施例を図3に示す。複数のノードがメッセージ転送ネットワーク(902)に接続されるが、ここでは説明を簡単にするために1個のノード(901)のみを示す。各ノードは、命令処理装置IP(903)と、ローカルメモリ(904)と、ネットワークインタフェースアダプタNIA(905)とを含む。これらの構成はすべてバス(906)によって接続される。ネットワークインタフェースアダプタNIA(905)は、送信回路(908)と受信回路(910)とを含む。送信回路(908)と受信回路(910)は、それぞれ送信ネットワーク接続機構(909)と受信ネットワーク接続機構(911)とを介して、ネットワーク(902)へと接続される。ネットワークメッセージ(912)は、メッセージデータ(917)とメッセージヘッダとから構成される。メッセージヘッダは、DNNフィールド(913)とタグフィールド(916)とを有し、DNNフィールド(913)はどのノードが当該メッセージを受信するかを指定する。受信回路内には、入力ポート(918)と、受信シーケンサ(919)と、直接メモリアクセス制御装置DMAC(921)と、受信ポストレジスタ(920)とが含まれる。メッセージが入力ポート(918)に到着すると、該メッセージのタグフィールド(916)とポストレジスタ(920)に格納されたタグフィールドとが照合される。両フィールドが一致すれば、受信シーケンサ(919)の指令によって、直接メモリアクセス制御装置DMAC(921)はユーザ受信バッファ(933)を使用してメッセージデータ(917)を受信する。ユーザ受信バッファ(933)を指すアドレスポインタ(932)もまた、ポストレジスタ(920)内にある。ユーザ受信バッファ(933)は、一例としてローカルメモリ(904)のユーザのアプリケーション空間に置かれる。メッセージのタグフィールド(916)とポストレジスタ(920)のタグフィールドとが一致しない場合、当該メッセージはローカルメモリのメッセージバッファ(941)で受信・格納される。
【0009】
上記従来技術の発明では、各メッセージにつき1個のみのポスト受信要求をサポートする受信装置を記述している。また上記の従来技術では、受信ポストレジスタと一致しないメッセージを記録するメッセージバッファも示している。このメッセージバッファは、メッセージプールとみなしてよい。従来技術では、メッセージプールを1個のみサポートしている。
【0010】
上記従来技術のハードウェアで受信ポストレジスタを使用すれば、一時に1個ずつのメッセージの受信を要求できる。MPIも含めてほとんどのメッセージ通信ライブラリでは、多数の同時に有効な受信要求と無指定(Wildcard)受信要求とをサポートしている。
【0011】
ここで、上記従来技術の発明で示された単一受信ポストレジスタを利用したMPIメッセージ通信ライブラリを作成したとする。この場合、ライブラリはこのレジスタを使用して1個の保留受信要求をポストできるのみであり、しかもこれはかかる要求が無指定(Wildcard)を使用しない場合にのみ限られる。また保留時間のもっとも長い要求以外の要求をポストしたい場合、MPIのメッセージの順番付けの規則を犯さないという制約上、かかる要求のポストは、該要求の保留時間より短い保留時間を有する要求がすべて当該メッセージに一致しない場合にのみ可能である。これは、受信時の矛盾を検査するためのソフトウェアのオーバヘッドを増加させる。受信ポストレジスタを使用してメッセージを受信したのち、受信回路は命令処理装置に割り込む必要がある。これは、受信ポストレジスタを使用して、命令処理装置に別な要求をポストさせるためである。結果として、命令処理装置の割り込みが頻発し、ソフトウェアのオーバヘッドが増大するため、命令処理装置の有効処理能力を低下させてしまう。一方、ソフトウェアの発行した受信要求の順序と異なる順序で受信回路が受信したメッセージは、プールに書き込まれる。プールに受信・格納されたこれらのメッセージもまた、命令処理装置によって宛先バッファへと複写されなければならないため、さらに性能が低下することになる。
【0012】
従来技術のハードウェアを使用したMPIライブラリを実施する別な方法としては、メッセージを実際に転送する前にノード間で制御メッセージを交換するという方法が考えられる。これらの制御メッセージを使用すれば、実際にメッセージが転送される前に受信ポストレジスタを形成することができるため、メッセージデータを宛先バッファに一括して複写する必要がなくなる。しかしながら、この解決法には性能上重大な問題がある。第一に、制御メッセージを転送するためのオーバヘッドによって、メッセージ転送の待ち時間が長くなる。第二に、制御メッセージは、その性質上非同期であるため、これらのメッセージを処理するためには命令処理装置に頻繁に割り込む必要があり、結果的に命令処理装置の有効処理能力が低下する。
【0013】
さらに、ノード上で動作する通信タスク以外のソフトウェアタスクと、通信タスクとを、メッセージの待機中にスリープ状態に入れたいとする。この場合、受信回路を設定して行なう命令処理装置の割り込みは、特定の一メッセージに対してのみ可能である。メッセージプールへとメッセージを受信・格納するための割り込みを許可する必要がある。割り込み処理のソフトウェアルーチンは、一メッセージが受信回路によって受信されると、その都度、上記の特定のメッセージが受信されたか否かを調べるために、メッセージプールを検査しなければならない。
【0014】
また、ある単一のノードが使用する通信のコンテキストが複数存在する場合、これら複数の通信コンテキストに属するメッセージを対象として、別個のメッセージプールをそれぞれ割り当てることは不可能である。単一の通信コンテキストにおいて多数のメッセージが送信された場合、すべての通信処理用のプール空間を使い切ってしまう可能性がある。
【0015】
【発明が解決しようとする課題】
本発明の第1の課題は、同時に保留状態となりうる複数の受信要求をいかにポストするかという問題を解決するとともに、中間的な受信バッファプールからローカルメモリ内の最終宛先バッファへのメッセージデータの不用な複写をなくすことにある。ローカルメモリ内の最終宛先バッファは、メッセージが実際に受信される前に該最終宛先バッファのアドレスが判明している場合、受信要求によって指定される。ローカルメモリ内の領域間におけるデータの複写は、命令処理装置の処理時間の浪費であり、メッセージ転送の待ち時間を増加させる。
【0016】
本発明の第2の課題は、受信すべきメッセージの指定方法を拡大することによって、無指定(Wildcard)値を含む複数のパラメータをメッセージに持たせることにある。これによって、何も指定しない受信要求をサポートするメッセージ通信ライブラリを簡単に実現できるとともに、メッセージデータの不用な複写をなくすことができる。
【0017】
本発明の第3の課題は、受信要求をその発行順に、到着するメッセージに対応させることにある。これによって、メッセージと受信要求との対応を、規定の順序で行なうことを定めたMPIのようなメッセージ通信ライブラリを簡単に実現することができる。
【0018】
本発明の第4の課題は、複数の通信コンテキストに異なるメッセージプールをいかにしてか割り当てることによって、一通信コンテキストにおけるプールのオーバーフローが、他の通信コンテキストのメッセージプールへの受信に影響を及ぼさないようにするかという問題を解決することにある。
【0019】
本発明の第5の課題は、命令処理装置が、特定のメッセージの受信、特定の種類のメッセージの受信、もしくは特定の送信元からのメッセージの受信を待つ間に、命令処理装置の不用な割り込みが発生するという問題を解決することにある。不用な割り込みは、命令処理装置の有効処理性能を低下させる。
【0020】
【課題を解決するための手段】
本発明のデータ転送ネットワークを介したメッセージ通信において、メッセージヘッダは、送信元フィールドと、宛先フィールドと、タグフィールドと、コミュニケータフィールドとを含む。送信元フィールドは、送信ノードを一意に識別する。宛先フィールド、タグフィールド、ならびにコミュニケータフィールドは、送信回路に対して発行されるメッセージ送信要求によって指定される。メッセージは、宛先フィールドによって一意に指定される目標ノードへとネットワークを介して送られる。受信要求が、受信すべきメッセージの送信元フィールド、タグフィールド、コミュニケータフィールドを指定してもよい。送信元フィールドとタグフィールドは、無指定としてもよい。受信要求にはタイムスタンプが記され、それぞれローカルメモリのハッシュテーブルにポストされる。メッセージが到着すると、このハッシュテーブルは受信回路によって検索される。この検索は、経過時間がもっとも長くて有効な受信要求指定、送信元無指定もしくはタグ無指定に対して行なわれ、送信元フィールドもしくはタグフィールドに関してメッセージと一致した指定が確定される。一致するポスト受信要求が検出されると、当該受信要求が実行される。受信要求は、一致するメッセージデータを受信回路が直接書き込むバッファを指定することもできる。この場合、当該受信要求は処理済みとされ、ハッシュテーブルから削除される。もしくは、受信要求は、メッセージをその内部に受信する特定のメッセージプールを指定してもよい。この場合、受信要求は、実行後も有効な持続性受信要求として指定できる。一例として、ソフトウェアは、各コミュニケータ値につき、持続性であって、遠い未来を指すタイムスタンプ値を持ち、無指定送信元フィールドおよび無指定タグフィールドを持つ受信要求をポストする。これらの要求は、他のポスト受信要求のいずれにも一致しないメッセージに対するデフォルト受信要求として作用する。この場合、アプリケーションソフトウェアがメッセージ到着後に発行した特定の受信要求は、ソフトウェアがメッセージプール内のメッセージと照合してもよい。一致したメッセージはアプリケーションへと複写される。
【0021】
不用な割り込み要求は、次のようにして減少させる。各受信要求に対応するローカルメモリ内の制御データ構造に、割り込み要求ビットフィールドを設ける。このビットフィールドを受信回路に検査させる手段を設け、これによって命令処理装置に割り込むか否かを決定する。
【0022】
ハードウェア上でポスト受信検索機構を実現する。該機構は、送信すべき制御メッセージの数量を減少させ、割り込み要求に関連した命令処理オーバヘッドを減らすことによって、メッセージの待ち時間を相当程度短縮する。また該機構は、メッセージの到着前に受信要求が発行された場合、データの一括複写動作を不用とする。
【0023】
各ノードにおけるライブラリソフトウェアは、最初にポスト受信ハッシュテーブル構造をローカルメモリに形成するとともに、持続性であって、遠い未来を指すタイムスタンプ値を持ち、無指定送信元フィールドおよび無指定タグフィールドを持つ受信要求を、各通信コンテキストにおいてポストする。これらのデフォルト受信要求は、他のいずれのポスト受信要求にも一致しないメッセージを、メッセージプールへと受信するために使用される。
【0024】
いずれかのノードで実行されるアプリケーションソフトウェアは、任意の時点で、通信ライブラリソフトウェアに対して送信要求を発行できる。この場合、ライブラリは、該送信要求と、該要求の通信コンテキストを識別するコミュニケータ値とを、送信回路へと転送する。送信回路はメッセージヘッダを作成する。このメッセージヘッダには、送信要求に基づいた宛先フィールドとタグフィールド、送信ノードを一意に識別する送信元フィールド、ならびにコミュニケータフィールドが含まれる。ついで送信回路は、ヘッダにメッセージデータを付加して、完成したメッセージをネットワークへと送出する。
【0025】
メッセージは、メッセージヘッダの宛先フィールドによって一意に指定された目標ノードへとネットワークを介して転送される。このネットワークは固定経路アルゴリズムを使用していることに注目されたい。このアルゴリズムによれば、一ノードから送出されたメッセージは、すべて同一の経路を通って他の一ノードへと送信される。これによってメッセージ間の追い越しを防いでいる。
【0026】
いずれかのノードで実行されるアプリケーションソフトウェアは、任意の時点で、通信ライブラリソフトウェアに対して受信要求を発行できる。この場合、ライブラリはまず、当該通信コンテキストに対応するメッセージプールを検索して、以前に受信したメッセージのなかで該当するものを検出しようとする。該当するメッセージが検出されない場合、ライブラリは、タイムスタンプを記した受信要求をハッシュテーブルにポストする。この要求には、当該受信要求の通信コンテキストを識別するコミュニケータ値と、当該受信要求で指定されたタグフィールドと送信元フィールドの値とが含まれる。送信元フィールドとタグフィールドは、無指定としてもよい。また各受信要求には、該要求の完了時に命令処理装置の割り込みを要求する制御ビットが含まれる。この制御ビットは、受信が完了するまでの任意の時点で変更することができる。
【0027】
メッセージが到着すると、宛先ノードのポスト受信ハッシュテーブルが受信回路によって検索される。この検索は、経過時間がもっとも長くて有効な受信要求指定、送信元無指定、もしくはタグ無指定に対して行なわれ、送信元フィールドもしくはタグフィールドに関してメッセージと一致した指定が確定される。一例として、以前にポストされた受信要求がメッセージに一致しないとする。この場合、メッセージは、デフォルト受信要求を使用してメッセージプールへと受信・格納される。続いてアプリケーションソフトウェアが受信要求を発行すると、該メッセージは、メッセージプールからアプリケーションへと複写される。他の例として、一致するポスト受信要求が検出されたとする。この場合、当該受信要求は実行され、該要求によって指定された受信バッファは、受信回路によって直接書き込まれる。受信要求の割り込み要求制御ビットが、検査によってセットされていると判明した場合、命令処理装置の割り込みが発生する。
【0028】
【発明の実施の形態】
本発明の実施例を詳細に説明するに先立ち、MPIを以下で簡単に要約する。
【0029】
MPIの仕様では、アプリケーションソフトウェアプログラムとソフトウェア通信ライブラリとの間のソフトウェアインタフェースを規定する。MPIソフトウェアライブラリは、アプリケーションソフトウェアに対して、たとえばアプリケーションソフトウェアが呼び出せるソフトウェアサブルーチン一式として提供される。
【0030】
通信は、たとえば異なるノード上で実行されるソフトウェアの処理間で転送されるメッセージによって実行される。MPIライブラリソフトウェアのサブルーチンのうち、もっとも原始的なものは送信サブルーチンと受信サブルーチンである。メッセージをあるソフトウェア処理から別なソフトウェア処理へと送信するための要求を発行する場合、送信元の処理は送信サブルーチンを呼び出す。受信側の処理が、メッセージを受信するための要求を発行する場合、受信側の処理は受信サブルーチンを呼び出す必要がある。受信側処理が指定したメッセージに一致するメッセージがすでに送られている場合、受信は直ちに完了する。受信側処理が指定したメッセージに一致するメッセージがまだ送られていない場合、かかるメッセージが到着するまで該受信要求は保留状態に置かれる。
【0031】
MPI仕様によれば、MPIメッセージは、データ部に加えて「メッセージエンベロープ」を含む。かかるエンベロープは、一定数のフィールドからなり、これらのフィールドはメッセージを識別して選択的に受信するために使用される。これらフィールドには、送信元フィールド、宛先フィールド、タグフィールド、およびコミュニケータフィールドが含まれる。メッセージの送信元は、送信元の存在によって暗黙に決定される。他のフィールドは、送信動作の引数によって指定される。コミュニケータフィールドは、通信動作の通信コンテキストを指定する。各通信コンテキストは、別個な「通信領域」を規定する。メッセージは、それらが送信されたコンテキストにおいてのみ受信され、異なるコンテキストで送られたメッセージは互いに干渉することがない。
【0032】
MPI規格はまた、メッセージ間で追い越しがあってはならないことを定めている。ある送信元が、2個のメッセージを同一の宛先に対して連続して送信した場合であって、いずれのメッセージも同一の受信要求に一致する場合、最初のメッセージが保留とされると、2番目のメッセージはこの動作においては受信できない。また受信側が2個の受信要求を連続してポストした場合であって、いずれの要求も同一のメッセージに一致する場合、最初の受信要求が保留とされると、2番目の要求は当該メッセージによって満たされることがない。
【0033】
本発明の目的は、MPI仕様の定めるインタフェースと同様な、ハードウェアとソフトウェアとの間のインタフェースを有する通信システムを提供することによって、MPIに適合したソフトウェアライブラリを実施することにある。このライブラリは、ライブラリソフトウェアの待ち時間オーバヘッドと、命令処理装置割り込み要求に起因するオーバヘッドとをほぼ伴わずに、機器インタフェースを使用できるライブラリとして機能する。
【0034】
本発明の実施例を図1に示す。この実施例は、ネットワーク(2)によって接続された複数のノードからなるコンピュータシステムである。説明を簡単にするため、1個のノード(1)のみを示す。図2に、複数のノード(50、51、52)をネットワーク(2)に接続する方法を示す。この方法によって、任意の複数のノードをネットワーク(2)によって接続することができる。図1のノード(1)は、このシステムを構成するノードのうちのひとつである。他のノードはいずれも、ノード(1)と同様な構造を有する。各ノードは、システムにおいて該ノードを一意に識別するノード番号を有し、また各ノードはシステム内の各通信処理を一意に識別する。
【0035】
ノード(1)は、命令処理装置IP(3)と、ローカルメモリ(4)と、ネットワークインタフェースアダプタNIA(5)とを含む。これらの構成は、バス(6)によって当該ノード内で連係されている。命令処理装置(3)とネットワークインタフェースアダプタ(5)は、バス(6)を介してローカルメモリ(4)へのアクセスを共有する。また命令処理装置(3)は、バス(6)を介して、ネットワークインタフェースアダプタ(5)内の所定のレジスタに直接アクセスできる。ネットワークインタフェースアダプタ(5)から命令処理装置(3)へと至る割り込み要求線(7)が設けられ、これによって、ネットワークインタフェースアダプタ(5)は、命令処理装置(3)のサービスを要求することができる。
【0036】
ネットワークインタフェースアダプタ(5)は、ネットワーク(2)に送信するための送信ポート接続機構(9)を有する送信回路部(8)と、ネットワーク(2)から受信するための受信ポート接続機構(11)を有する受信回路部(10)とを含む。メッセージは送信回路(8)によって組み立てられて、ネットワークへと送出される。かかるメッセージ(12)の一例を図1に示す。メッセージ(12)は、メッセージヘッダ部と、データ部(17)とを有する。メッセージヘッダ部は、宛先ノード番号(DNN)フィールド(13)、送信元ノード番号(SNN)フィールド(14)、コミュニケータ(Comm)フィールド(15)、ならびにタグ(Tag)フィールドを含む。ネットワーク(2)は、DNNフィールド(13)を使用して、メッセージの転送先を決定する。SNNフィールド(14)は、送信元ノードに対応する一意なノード番号を含む。コミュニケータフィールド(15)は、送信元ノードのソフトウェアが割り当てた値であって、当該メッセージが所属する通信コンテキストを指定する値を含む。タグフィールド(16)の値は、複数のメッセージを区別するためにアプリケーションソフトウェアによって割り当てられる。
【0037】
ネットワーク(2)は、パケット交換ネットワークであって、各メッセージのヘッダ部に含まれるDNNフィールドに基づいて、送信回路から適当な受信回路へとメッセージを転送するネットワークである。メッセージは、メッセージ間の追い越しを禁じたMPI規格に準じて、互いを追い越すことなく転送される。
【0038】
受信回路(10)を使用して、当該ノードに対して送られたメッセージをネットワーク(2)から受信する。受信回路(10)は、入力ポート制御装置(18と)、受信シーケンサ(19)と、ハッシュテーブル検索制御装置(20)と、直接メモリアクセス制御装置DMAC(21)とを含む。これらの制御装置はバス(6)に接続され、制御/状態信号(22)によって相互に連係されている。入力ポート制御装置(18)は、受信ポート接続機構(11)を介してネットワーク(2)へと接続され、ネットワーク(2)からメッセージを受信するために使用される。直接メモリアクセス制御装置DMAC(21)は、ローカルメモリ(4)からの読み出しと該メモリへの書き込みとを、バス(6)を介して制御するために使用される。ハッシュ検索制御装置(20)は、ローカルメモリ(4)内のポスト受信ハッシュテーブル(23)を検索して、メッセージヘッダのSNNフィールドと、コミュニケータフィールドと、タグフィールドとに一致するエントリを確定するために使用される。受信シーケンサ(19)は、他の制御装置の動作を監視し、ローカルメモリ(4)内のメモリ構造における取り出しと更新とを制御するとともに、受信回路(10)が生成した割り込み要求を制御する。
【0039】
本発明の一面は、メッセージの受信に関する動作に特に関わっている。メッセージを受信するためには、ソフトウェアはローカルメモリ(4)にあらかじめ各種のメモリ構造を生成しなければならない。これらの構造は、受信回路とソフトウェアとの双方によって使用される。ポスト受信要求は、ポスト受信ハッシュテーブル(23)を使用して行なわれる。このテーブルには、ハッシュテーブルエントリ(以下ではHTEと呼ぶ)が格納される。参照番号(24)で示すHTEは、有効HTEの一例である。有効HTE(24)には、SNNフィールド(26)と、コミュニケータフィールド(27)と、タグフィールド(28)とが含まれる。SNNフィールド(26)とタグフィールド(28)は、無指定(Wildcard)値を表わす特別な値を含むように、ソフトウェアによってプログラムしてもよい。受信回路(10)がメッセージを受信すると、ハッシュテーブルが検索されて、メッセージヘッダのSNNフィールドと、コミュニケータフィールドと、タグフィールドとに一致する受信指定を有するHTEが検出される。HTE(24)はまた、受信回路(10)が、複数の有効なハッシュテーブルエントリを一致したものとして検出した場合に使用される時間フィールド(29)を有する。この場合、受信回路(10)は、時間フィールドの値がもっとも古いハッシュテーブルエントリを選択する。参照番号(24)のHTEはさらに、ポスト受信制御語(ポストRCWと称する)(31)を指すポインタ(30)を含む。ポストRCW(31)は、受信回路(10)によって取り出され、メッセージの受信先を指定する。ポストRCW(31)は、ローカルメモリ内のデータバッファ(33)を指すポインタ(32)を含む。一例として、データポインタ(33)は、受信要求を発行したアプリケーションのアプリケーション空間(34)に含まれる。受信回路(10)は、HTE(24)を更新することによって、ポストRCW(31)が使用されていることを示すとともに、メッセージヘッダをポストRCW(31)に記録し、メッセージデータをデータバッファ(33)へと書き込む。他の一例として、参照番号(25)のHTEは、プール制御語(PCWと称する)(36)を指すポインタ(35)を含む。PCW(36)は、一連の空きプール受信制御語(プールRCWと称する)を指すポインタ(37)と、データプール(41)の先頭ポインタ(39)と末尾ポインタ(40)とを保持するために使用される。複数のプールRCWは、連鎖の形式をとる。PCW(36)は、連鎖内の最初の空きプールRCW(38)を指すために保持されるポインタ(37)を含む。このプールRCW(38)は、別なプールRCW(43)を指すポインタ(42)を含む。メッセージが受信されて、一致するとして検出されたHTEがPCWを指す場合、受信回路は、該PCWを使用して、メッセージヘッダを記録するための空きプールRCWと、メッセージデータを記録するためのデータプールの空間とを割り当てる。
【0040】
ソフトウェアはたとえば、使用中の各コミュニケータ値に対して、SNN無指定(Wildcard)とタグ無指定(Wildcard)とを有する有効HTEを生成する。これらのHTEはそれぞれ、PCWを指すポインタを含む。ソフトウェアはまた、各PCWに対して、一連の空きプールRCWと一データプールとを生成する。これは、一致するポストRCWのないメッセージを、ソフトウェアが受信できるようにすることを目的としている。他のいずれの受信要求にも一致しないメッセージが受信されると、これらのメッセージはデータプールへと受信・格納される。メッセージが実際に受信されたのちに該メッセージの受信を求めて発行されたソフトウェアの要求は、データプールからアプリケーションの受信バッファへとデータを複写することによって処理される。
【0041】
送信回路と受信回路の説明を続ける前に、メッセージの形式と、メッセージの送信を制御するために使用されるデータ構造の形式と、受信要求をポストするために使用されるデータ構造の形式とについて説明する。これらのデータ構造は、ローカルメモリ(4)内に設けられる。
【0042】
図4に、本実施例で使用するメッセージ(100)の詳細な形式を示す。最初のフィールドはDNNフィールド(101)である。ネットワーク(2)は、DNNフィールド(101)を使用して、正しい宛先ノードの受信回路へとメッセージを転送する。DNNフィールド(101)は、MPIメッセージエンベロープの宛先フィールドと同じ機能を有する。SNNフィールド(102)は、受信ノードに対してメッセージ(100)の送信元を識別する。SNNフィールド(102)は、MPIメッセージエンベロープの送信元フィールドと同じ機能を有する。コミュニケータフィールド(103)の値は、メッセージの送られた通信コンテキストを識別するMPIメッセージエンベロープのコミュニケータ値と同様な意味をもつ値であるとともに、該メッセージを受信するための受信要求の通信コンテキストの値でもある。タグフィールド(104)の値は、送信要求によって指定されたMPIメッセージエンベロープのタグ値と同様な意味を持つ値である。ソフトウェアヘッダ(WSH)フィールド(105)は、送信元処理のライブラリソフトウェア用として確保されたフィールドである。遠隔割り込み要求Rビットフィールド(106)は、送信元処理のライブラリソフトウェアによって指定される制御ビットである。遠隔割り込み要求ビットR(106)がセットされると、宛先ノードの受信回路によるメッセージ(100)の受信時に、受信ノードで命令処理装置(IP)割り込み要求が発生するように指定される。データ長さ(DataLen)フィールド(107)は、メッセージ(100)のデータフィールド(109)の長さを指定する。ヘッダCRCフィールド(108)には、先行するすべてのヘッダフィールドを使用して計算されるCRCエラーチェック値が格納される。データフィールド(109)にはメッセージデータが格納される。データCRC(110)には、データフィールド(109)のみを使用して計算されるCRCエラーチェック値が格納される。いずれのフィールドをメッセージの先頭にするかをネットワークと受信回路とで決定するために、メッセージヘッダとメッセージデータの2バイト語ごとに、同期ビットフィールド(111)が付加される。メッセージヘッダの最初の2バイト語に付加された同期ビット(112)のみがセットされ、他の同期ビットフィールドはすべてクリアされる。
【0043】
メッセージを送信するための要求は、送信制御語(TCWと称する)の形式でローカルメモリに格納される。複数のTCWを連鎖すると、複数のメッセージの送信が可能になる。これらのTCWは、連鎖と同一の順序で送信回路によって処理される。図5にTCW(120)の詳細な形式を示す。次ポインタ連鎖フィールド(NTCWPtr)(121)は、次の連鎖TCWを指すアドレスポインタを含む。次TCW連鎖制御ビット(NC)(122)は、NTCWPtr(121)フィールドが有効であって、TCW連鎖内の次のTCWを指す場合にセットされる。DNNフィールド(126)、コミュニケータ(Comm)フィールド(127)、タグ(Tag)フィールド(128)、SWHフィールド(129)、Rフィールド(130)、データ長さ(DataLen)フィールド(131)は、送信すべきメッセージヘッダのそれぞれ該当するフィールドを含む。データポインタ(DataPtr)フィールド(125)は、送信すべきメッセージデータを指すポインタを含む。割り込み要求IRビットフィールド(124)がセットされると、送信動作の完了時に、送信回路が割り込み要求を発行する。IMビットフィールド(123)は、割り込み要求機能の動作を制御する。IMビット(123)をクリアすると、送信動作の完了時に、IRビット(124)が送信回路によって再度読まれる。IMビット(123)がセットされると、IRビット(124)は再度読まれることはなく、送信回路によるTCWの最初の読み込み時のIRビットの値が記憶され、該ビット値が割り込み要求を生成するか否かの決定に使用される。TCWの状態は、残りのSフィールド(132)、Fフィールド(133)、Iフィールド(134)、Eフィールド(135)ならびにECフィールド(136)から構成される。これらのフィールドの書き込みは、送信回路によって2回実行される。すなわち、送信回路がTCWを取り出した直後に1回、メッセージの送信の完了時に1回行なわれる。開始状態Sビット(132)は、TCWが最初に取り出されたのちに送信回路によってセットされる。終了状態Fビット(133)は、送信回路によるTCWの処理が終了した時点でセットされる。割り込み要求状態Iビット(134)は、Fビット(133)と同時にセットされるが、これはIRビット(124)を介して割り込み要求が出された場合にのみ行なわれる。エラー状態Eビット(135)もFビット(133)と同時にセットされるが、これは送信元によるTCWの処理中にエラーが発生した場合にのみ行なわれる。エラーコードECフィールド(136)には、Eビット(135)のセットと同時に書き込みが行なわれる。ECフィールド(136)には、ソフトウェアによってエラーを表わすと解釈されたコードが格納される。ライブラリがローカルメモリ中にTCWを生成したのち、ライブラリは次のいずれかの動作を行なう。すなわち、ライブラリは、TCWを指すポインタを、送信回路内にあるNTCWPtrレジスタ(後で説明する)へと書き込む。もしくは、送信回路による他のTCWの処理がすでに行なわれているため該レジスタが使用中である場合は、ライブラリは、TCW連鎖内の最後のTCWに当該TCWを連結する。送信要求を処理する場合、送信回路はTCWを取り出し、TCW内の状態フィールドを更新するとともに、送信要求を実行する。TCWの処理が完了すると、送信回路は、再度状態ビットを更新し、連鎖内に次のTCWがあればこれを取り出す。
【0044】
ポスト受信要求は、非持続性受信要求と持続性受信要求の2種類に大別される。非持続性受信要求は単一のメッセージを受信するための要求であり、持続性受信要求は任意の複数のメッセージを受信するための要求である。非持続性受信要求は、ポストRCWの形式でローカルメモリに格納され、要求されたメッセージが受信されるとその処理が完了する。複数のメッセージを受信するための持続性受信要求は、ポストPCWの形式でローカルメモリに格納される。持続性受信要求は、一メッセージを受信したのちも有効である。
【0045】
ネットワークの受信回路にメッセージが到着すると、受信回路はポスト受信ハッシュテーブルを検索して、一致する受信要求を検出しようとする。図6にハッシュテーブルエントリ(140)(HTEと称する)の詳細な形式を示す。ポスト受信要求のメッセージ指定は、SNNフィールド(141)と、コミュニケータ(Comm)フィールド(142)と、タグ(Tag)フィールド(143)とから構成される。SNNフィールド(141)には、メッセージの送信元ノード番号か、もしくは無指定の送信元値を表わす特別な値(全ビットがセットされている)かのいずれかが格納される。コミュニケータフィールド(142)には、受信コンテキストのコミュニケータ値が格納される。この値は、メッセージの送信コンテキストの値と同一である。受信コンテキストと送信コンテキストのコミュニケータ値は同一でなければならない。タグフィールド(143)には、メッセージのタグか、もしくは無指定のタグ値を表わす特別な値(全ビットがセットされている)かのいずれかが格納される。RCWもしくはPCWの形式の受信要求は、HTEから始まるこれらRCWもしくはPCWの連鎖を形成することによってポストされる。この場合の受信指定は、要求の指定と同一である。ポインタ(Ptr)フィールド(144)は、RCWもしくはPCWを指す連鎖アドレスポインタを含む。連鎖有効ビットC(145)は、ポインタフィールド(144)が有効であることを示す。Pビット(146)は、ポインタフィールド(144)がポストPCWを直接指している場合にセットされ、ポストRCWを指す場合にはクリアされる。時間フィールド(148)には、RCWもしくはPCWがポストされた時間(ポインタフィールド(144)によって示される)に対応するタイムスタンプ値が格納される。
【0046】
特定の受信指定を有するHTEのポスト受信ハッシュテーブル内における格納場所は、2つのステップからなる処理によって決定される。第1のステップでは、ハッシュ機能を使用して受信指定のハッシングが行なわれる。ハッシュ機能は、同一の入力パラメータに対しては常に同一の結果値を発生するが、他の場合にはランダムな結果値を発生する数学的機能である。受信指定のSNNフィールドの値、コミュニケータフィールドの値ならびにタグフィールドの値が、ハッシュ機能に与えられる入力パラメータとなる。出力値、すなわちハッシュテーブル内のHTEの個数の非等価演算の結果は、ハッシュテーブルの基底アドレスから最初の検索点に至るインデックスを構成する。第2のステップでは、これらのHTEが最初の検索点から逐次検索される。検索がハッシュテーブルの上限に達すると、基底アドレスへと戻る。この処理は、当該HTEが検出されるか、もしくは無効なHTEが検出されるまで行なわれる。無効なHTEが検出された場合、当該HTEは存在しない。新たなHTEを生成する必要がある場合、検索中に検出された古いHTE(そのCビットがクリアされたもの)に重ね書きするか、もしくは検索中に最初に検出された有効なHTEに重ね書きする。この検索手順において注目すべき点は、メッセージに一致する受信指定を有するHTEを検索・確定するわけではなく、特定の受信指定を有するHTEを確定するために検索が行なわれるという点である。
【0047】
すべての非持続性受信要求は、それぞれに付加された一意なタイムスタンプ値を有する。低いタイムスタンプ値は受信要求が古いことを示し、高いタイムスタンプ値はより新しい受信要求を表わす。持続性受信要求にもタイムスタンプ値が付加されているが、通常このタイムスタンプ値は遠い未来を指す最大値にセットされている。
【0048】
ポストすべき各受信要求に対応するRCWもしくはPCWは、当該受信要求の受信指定を含むHTEから連鎖を行ない、必要に応じて新たなHTEを形成しなければならない。特定の受信指定に対しては、有効なHTEが1個のみハッシュテーブル内に存在するが、同一の受信指定を有する要求が複数存在する場合もある。後者の場合、RCWやPCWは、相互に連鎖を行なって、ポストRCWを生成時刻順に繋げた単一の連鎖を形成する。生成時刻のもっとも古いRCWが、連鎖の最後尾でHTE(もしあればPCW)に直接付加される。ただし、同一の受信指定を有するPCWを1個以上ポストすることは不可能であり、無意味である。またPCWの後にRCWを連鎖することもできない。受信要求は、RCWとPCWが連鎖された順序で処理され、もっとも古い要求が最初に処理される。
【0049】
到着するメッセージに一致する受信指定は、最大4種類存在する。第1の種類は、SNNフィールド、タグフィールド、コミュニケータフィールドのいずれも一致の場合からなり、第2の種類は、SNNフィールドは無指定、タグフィールドが一致、コミュニケータフィールドが一致の場合からなり、第3の種類は、SNNフィールドが一致、タグフィールドは無指定、コミュニケータフィールドが一致の場合からなり、第4の種類は、SNNフィールドは無指定、タグフィールドも無指定、コミュニケータフィールドが一致の場合からなる。メッセージが到着すると、受信回路は、一致する受信指定を有する4個のHTEをすべて確定しようと試みる。これらのHTEのうち任意の個数が検出されるが、検出された複数のHTEに有効なポインタフィールドを示すCビットがセットされている場合には、受信回路は、時間フィールドを利用して、もっとも古い保留ポスト受信要求のHTEを、該当するHTEの中から選択する。4個のHTEがいずれも検出されないか、もしくは各HTEのCビットがすべてクリアされている場合、一致する受信要求は存在せず、受信回路はエラーを発生させてメッセージを廃棄する。
【0050】
次に、受信回路は選択されたHTEのPビットを検査する。Pビットがセットされていれば、ポインタフィールドは、持続性受信要求に対応するポストPCWを指している。Pビットがクリアされていれば、ポインタフィールドは非持続性受信要求に対応するポストRCWを指している。
【0051】
PCWは、ローカルメモリ内のデータ構造であって、2種類の受信プールを管理するために使用される。一方の受信プールは、連鎖された一連のプールRCWである。これらのプールRCWは、PCWが受信回路によってポストPCWとしてアクセスされる場合に、受信されるメッセージに関する情報を記録するために使用される。他方の受信プールは、データプールである。このプールは、ポストRCWに接続された受信バッファに受信されないメッセージデータを記録するために使用される。単一のPCWは、それぞれ異なる受信指定を有する複数のHTEを使用して複数回ポストしてもよい。これによって、他のいずれのポスト受信要求にも一致しないメッセージを受信するためのデフォルト持続性要求の機能が実現される。対応するバッファを持たないポストRCWをPCWに連係すると、PCWのデータプールを使用することにより、ポストRCWに一致するメッセージデータを受信することができる。
【0052】
図7にPCW(150)の詳細な形式を示す。PoolRCWPtrフィールド(151)には、空きプールRCWの一連鎖内における最初のプールRCWを指すアドレスポインタが格納される。NCビット(152)がセットされると、PoolRCWPtrフィールド(151)が有効であることを示す。NCビット(152)がクリアされると、PoolRCWPtrフィールド(151)が無効であって、空きプールRCWが残っていないことを示す。Nビット(153)はRCWエラー状態ビットであって、Nビットがセットされると、プールRCWが残っていないためエラーが発生したことを示す。Wビット(154)はRCW警告状態ビットである。Wビットがセットされると、プールRCWの連鎖が短くなりつつあるため、できるだけ早く該連鎖を延長する必要があることを示す。Oビット(155)はプールエラー状態ビットであって、メッセージデータを記録するデータプール空間が残り少ないためにエラーが発生したことを示す。Lビット(156)はプール警告状態ビットであって、データプールが残り少ないため、これをできるだけ早く増加させる必要があることを示す。Seqフィールド(157)は、当該PCWを使用してこれまでに受信したメッセージの個数を示す。先頭ポインタ(HeadPtr)フィールド(158)、末尾ポインタ(TailPtr)フィールド(159)ならびにLWMPtrフィールド(160)は、先頭ポインタ、末尾ポインタ、ウォータマークアドレスポインタをそれぞれ有するフィールドである。これらのフィールドは、データプールの管理に使用される。
【0053】
図10に空きプールRCW(220)の詳細な形式を示す。NCビット(222)がセットされている場合、NPoolRCWPtrフィールド(221)には、プールRCWの連鎖における次のプールRCWを指すアドレスポインタが格納されている。NCビット(222)がクリアされていれば、このプールRCWは連鎖内の最後のプールRCWである。メッセージを受信するためにいずれかのプールRCWを使用すると、NPoolRCWPtrフィールド(221)とNCビット(222)は、PCWのPoolRCWPtrフィールド(151)とNCビットフィールド(152)とにそれぞれ複写される。SWビット(223)がソフトウェアによってセットされると、このプールRCWが連鎖の終端の近くにあり、このプールRCWが使用されると警告が出されることを示す。またSWビット(223)がセットされると、受信の完了時に、受信回路は割り込み要求を発行する。IMビット(224)は、割り込み要求機能の動作を制御する。IMビット(224)がクリアされると、IRビット(225)は、受信の完了時に受信回路によって再度読まれる。IMビット(224)がセットされると、IRビット(225)は再度読まれることはない。この場合、受信回路によるプールRCWの最初の読み出し時のIRビットの値が記憶されて、この値が割り込み要求を発生させるか否かの決定に使用される。受信状態を書き込む格納場所(226)は、ゼロに初期化される。
【0054】
受信回路がプールRCWを取り出すと、このプールRCWは受信メッセージに関する情報によって直ちに更新される。更新されたプールRCW(230)の形式を図11に示す。NPoolPtrフィールド(231)、NCフィールド(232)、SWフィールド(233)、IMフィールド(234)、IRフィールド(235)は受信回路によって書き込まれることはない。Seqフィールド(236)には、PCWが取り出された時点のPCWSeqフィールド(157)の値が格納される。DataPtrフィールド(237)には、メッセージデータを受信するために使用されるデータプールから割り当てられたデータバッファを指すポインタが格納される。SNNフィールド(238)、コミュニケータ(Comm)フィールド(239)、タグ(Tag)フィールド(240)、SWHフィールド(241)、Rフィールド(242)、データ長さ(DataLen)フィールド(243)にはそれぞれ、メッセージヘッダからの対応する値が格納される。プールRCWの状態は、残りのSフィールド(244)、Bフィールド(249)、Fフィールド(245)、Iフィールド(246)、Eフィールド(247)ならびにECフィールド(248)から構成される。これらのフィールドは、受信回路によって2回書き込まれる。すなわち、受信回路が他のフィールドを書き込む時点でプールRCWを取り出した直後に1回、メッセージの受信の完了時に1回書き込まれる。Sビット(244)がセットされると、このプールRCWを使用したメッセージの受信が開始されたことを示す。Bフィールド(249)は使用されず、その値は不定である。Fビット(245)は、このプールRCWを使用したメッセージの受信が終了した時点でセットされる。Iビット(246)は、IRビット(225)がすでにセットされていて、割り込み要求が発行されたことを示す。Eビット(247)は、エラーが発生した場合にセットされる。この場合、ECフィールド(248)には、発生したエラーの種類を示すエラーコードが格納される。
【0055】
図12にデータプール(250)の構成を示す。データプールは、ローカルメモリ内の空き空間からなる連続ブロックであって、メッセージデータの受信に使用される。HeadPtr(253)と示されたポインタは、当該PCWのHeadPtrフィールド(158)にあるデータプールのヘッドポインタに対応している。このポインタは、空き空間ブロックの基底アドレスを指す。このアドレスポインタより低い格納場所には、データプール内にすでに受信されたメッセージデータ(252)が格納されている。データプール(250)から受信バッファ(251)が割り当てられる場合、この受信バッファは、HeadPtr(253)の指す基底アドレスに基づいて割り当てられる。ヘッドポインタは、新たなヘッドポインタNheadPtr(254)を生成するために割り当てられたブロックのサイズ分だけ増分される。TailPtr(256)と示されたポインタは、PCWのTailPtrフィールド(159)にあるデータプールのポインタに対応している。このポインタは、空き空間ブロックの限界を示す。データプールのサイズを越えるブロックを割り当てようとする試みは、TailPtr(256)の示すデータプールの限界を越えてNHeadPtr(254)を増分しようとすることに相当し、この場合エラーが発生する。LWMPtr(255)と示されたポインタは、PCWのLWMPtrフィールド(160)にあるデータプールのウォータマークポインタに対応している。このポインタは、空き空間ブロックのウォータマークを指す。NHeadPtr(254)が、PCWのLWMPtrフィールド(160)にあるウォータマークポインタを越える場合、データプールの空き空間が残り少ないことを示す警告が出される。PCWのLWMPtrフィールド(160)は、たとえばPCWのTailPtrフィールド(159)より十分に低く設定される。これによって、警告が出された場合、データプールの空き空間がなくなる前にデータプールを拡張することができる。データプールの空き空間の割り当てに成功した場合、PCWのHeadPtrフィールド(158)は、NHeadPtr(254)の値によって更新される。空き空間の割り当てに失敗した場合、PCWのOビット(155)がセットされる。ウォータマークを越えた場合はLビット(156)がセットされる。
【0056】
図8に保留状態のポストRCW(170)を示す。NPtrフィールド(171)、NPフィールド(173)、NTimeフィールド(176)は、同一の受信指定を有する次に古いポストRCWもしくはPCWに繋がる連鎖のリンクを形成している。これらのフィールドは、NCビット(172)がセットされている場合にのみ有効である。NPtrフィールド(171)には、HTEに連鎖される次に古いポストRCWまたはPCWを指すアドレスポインタが格納される。NPビット(173)がセットされると、次にポストPCWが連鎖されていることを示す。NPビット(173)がクリアされている場合、次にポストRCWが連鎖されていることを示す。BEビット(174)はバッファイネーブルビットである。BEビット(174)がセットされると、BuffPtrフィールド(180)とBuffSizeフィールド(181)とが有効であって、対応するデータバッファのアドレスポインタとサイズとをそれぞれ有することを示す。この対応するデータバッファは、要求されたメッセージのメッセージデータが受信されるバッファである。BEビット(175)がクリアされている場合、PCWPtrフィールド(179)が有効であって、PCWのうち、そのデータプールがメッセージの受信に使用されるPCWのアドレスポインタが該フィールドに格納される。
【0057】
受信回路は、ポストRCWを検出すると、NPtrフィールド(171)、NCフィールド(172)、NPフィールド(173)、NTimeフィールド(176)を、HTEのPtrフィールド(144)、Cフィールド(145)、Pフィールド(144)、Timeフィールド(148)へとそれぞれ複写し、HVフィールド(147)をセットする。これによって、ハッシュテーブルにポストされていた当該RCWのポストが解除される。これに続くポストRCWもしくはポストPCWがある場合、HTEは次にこれを指し示す。ポストRCWもしくはポストPCWが存在しない場合、HTEは有効であるが、示す対象を持たない。注目すべき点は、無効なHTEを検出するとハッシュテーブル検索アルゴリズムが停止するため、HTEを無効としないことが重要であるとういう点である。これによって、別なHTEの検索中に、他のHTEが検出されるという不具合を防ぐことができる。IRビット(178)は割り込み要求ビットである。このビットがセットされると、受信回路は、受信の完了時に割り込み要求を発行する。IMビット(177)は、割り込み要求機能の動作を制御する。IMビット(177)がクリアされていると、IRビット(178)は受信の完了時に受信回路によって再度読まれる。IMビット(177)がセットされていると、IRビット(178)は再度読まれることがなく、受信回路がRCWを最初に読んだ時点でのIRビットの値が記憶され、この値を使用して、割り込み要求を発行するか否かが決定される。受信状態の格納場所(182)は、ゼロに初期化される。
【0058】
受信回路がポストRCWを取り出すと、このポストRCWは受信メッセージに関する情報によって直ちに更新される。更新されたポストRCW(190)の形式を図9に示す。NPtrフィールド(191)、NCフィールド(192)、NPフィールド(193)、BEフィールド(194)、Ntimeフィールド(195)、IMフィールド(197)、IRフィールド(198)は、受信回路によって書き込まれることはない。BEビット(174)がセットされていれば、Seqフィールド(199)とDataPtrフィールド(200)はいずれも書き込まれず、PCWPtrフィールド(179)とBuffPtrフィールド(180)は、ソフトウェアによってセットされたままの状態となる。BEビット(174)がクリアされていれば、Seqフィールド(199)が書き込まれ、PCWが受信回路によって取り出された時点でのPCWのSeqフィールド(157)の値がこのフィールド(199)に格納される。またDataPtrフィールド(200)には、メッセージデータの受信に使用されるデータプールから割り当てられたデータバッファの基底アドレスが書き込まれる。SNNフィールド(201)、Commフィールド(202)、Tagフィールド(203)、SWHフィールド(204)、Rフィールド(205)、DataLenフィールド(206)には、メッセージヘッダからの対応する値がそれぞれ格納される。残りのSフィールド(207)、Bフィールド(208)、Fフィールド(209)、Iフィールド(210)、Eフィールド(211)、ECフィールド(212)は、受信回路によって2回書き込まれる。すなわち、受信回路が他のフィールドを書き込む時点でポストRCWを取り出した直後に1回、メッセージの受信の完了時に1回書き込まれる。Sビット(207)がセットされると、このポストRCWを使用したメッセージの受信が開始されたことを示す。Bビット(208)がセットされるのは、受信回路がポストRCWを取り出した時点で、バッファがBEビット(194)を介してイネーブルされた場合である。このポストRCWを使用したメッセージの受信が終了すると、Fビット(209)がセットされる。Iビット(210)は、IRビット(178)がセットされ、割り込み要求が発行されたことを示す。Eビット(211)は、エラーが発生するとセットされる。この場合、ECフィールド(212)には、発生したエラーの種類を示すエラーコードが格納される。
【0059】
本実施例に関して、NIA(ネットワークインタフェースアダプタ)に含まれる回路を以下で説明する。図13にNIA(5)の詳細な回路図を示す。NIA(5)には、送信回路(300)と、受信回路(301)と、両回路が共有する他の回路とが含まれる。さらに、割り込み要求状態レジスタ(265)と、割り込み要求マスクレジスタ(277)と、割り込み要求回路(304、305)と、動作状態レジスタ(260)と、保留制御レジスタ(257)と、ノード番号レジスタ(250)とがNIA(5)に含まれる。
【0060】
送信回路(300)から出力される割り込み要求信号IRQs(302)と、受信回路(301)から出力される割り込み要求信号IRQs(303)とによって、割り込み要求状態レジスタ(265)の割り込み要求ビットがセットされる。ANDゲート(304)によって、各割り込み要求ビットと、割り込み要求マスクレジスタ(277)内の対応する割り込みマスクビットとの間で論理積演算が行なわれる。これらANDゲート(304)のすべての出力は、ORゲート(305)によって論理和がとられ、その結果IP割り込み要求信号(7)が生成されてIP(命令処理装置)(3)へと送られる。IP(3)は、バス(6)を介して割り込み要求ビットのいずれもチェックもしくはクリアすることができるとともに、バス(6)を介して割り込みマスクビットをプログラムすることができる。割り込み要求状態レジスタ(265)の形式を図16に示す。割り込みマスクレジスタ(277)の形式は、割り込み要求状態レジ
送信回路(300)から出力される割り込み要求信号IRQs(302)と、受信回路(301)から出力される割り込み要求信号IRQs(303)とによって、割り込み要求状態レジスタ(265)の割り込み要求ビットがセットされる。ANDゲート(304)によって、各割り込み要求ビットと、割り込み要求マスクレジスタ(277)内の対応する割り込みマスクビットとの間で論理積演算が行なわれる。これらANDゲート(304)のすべての出力は、ORゲート(305)によって論理和がとられ、その結果IP割り込み要求信号(7)が生成されてIP(命令処理装置)(3)へと送られる。IP(3)は、バス(6)を介して割り込み要求ビットのいずれもチェックもしくはクリアするこスクビットである。この割り込み回路を使用することにより、送信回路(300)や受信回路(301)は、割り込み要求をIPへと発行することができる。
【0061】
割り込み要求状態レジスタ(265)の詳細な形式を図16に示す。各割り込み要求ビットの意味を以下で説明する。TIビット(266)は、送信割り込み要求ビットである。IRビット(124)をセットしたTCWの処理を送信回路が完了すると、TIビット(266)がセットされる。TEビット(267)は、送信エラー割り込み要求ビットである。エラーの発生を示すTCWのEビット(135)を送信回路がセットすると、TEビット(267)がセットされる。RIビット(268)は、受信割り込み要求ビットである。IRビット(178)をセットしたポストRCW、もしくはIRビット(225)をセットしたプールRCWのいずれかの処理を受信回路が完了した時点で、RIビット(268)がセットされる。REビット(269)は、受信エラー割り込み要求ビットである。エラーの発生を示すポストRCWのEビット(211)、もしくはプールRCWのEビット(247)を受信回路がセットすると、REビット(269)がセットされる。RRビット(270)は、受信回路によってセットされる遠隔割り込み要求ビットである。受信回路がポストRCWのFビット(209)もしくはプールRCWのFビット(245)をセットした場合であって、受信されたメッセージにRビット(106)がセットされている場合にのみ、RRビット(270)はセットされる。PN(271)、PW(272)、PO(273)、PL(274)の各ビットは、それぞれPCWの割り込み要求ビットである。受信回路がPCWのNビット(153)、Wビット(154)、Oビット(155)もしくはLビット(156)をそれぞれセットすると、対応するPNビット(271)、PWビット(272)、POビット(273)、PLビット(274)が受信回路によってセットされる。NMビット(275)は、不一致検出エラー割り込み要求ビットである。受信回路がポストRCW、プールRCWのいずれも確定できなかった場合、NMビット(274)が受信回路によってセットされる。CE割り込み要求ビット(276)は、ヘッダCRCエラービットであって、メッセージヘッダに不正なヘッダCRCが含まれていた場合に受信回路によってセットされる。この場合、メッセージは破棄される。
【0062】
ノード番号レジスタ(250)は、ノードに割り当てられた一意なノード番号を保持するために使用される。このレジスタは、バス(6)を介してIP(命令処理装置)(3)によってプログラムできる。たとえばノード番号レジスタ(250)は、システムの初期化においてIPによってのみ書き込みが可能である。ノード番号レジスタ(250)の出力(310)は、送信回路(300)へと送られる。送信回路(300)では、この出力(310)を使用して、ノードから送られた各メッセージのSNNフィールド(102)を格納する。
【0063】
保留制御レジスタ(257)は、バス(6)を介してIP(3)によってプログラムできる。図14にこのレジスタの形式を示す。保留制御レジスタ(257)には2個の制御ビットが含まれる。すなわち、送信保留ビットTH(258)と、受信保留ビットRH(259)とである。動作状態レジスタ(260)は、バス(6)を介してIP(3)によって読み出すことができる。図15に動作状態レジスタ(260)の形式を示す。動作状態レジスタ(260)には4個の状態ビットがある。すなわち、送信動作開始ビットTS(261)と、送信動作終了ビットTF(262)と、受信動作開始ビットRS(263)と、受信動作終了ビットRF(264)とである。これらのレジスタは、データ構造にアクセスするためのロック機構を形成しており、NIAとソフトウェアライブラリとの間でアクセスを共有している。
【0064】
図13において、保留制御レジスタ(257)からのTHビットの出力(348)は、送信回路(300)に接続されている。この出力は、送信回路を一時的に保留して、次の送信要求の処理を保留とするために使用される。送信回路(300)から出力されるTS動作信号(349)は、TSビット(261)に接続され、また送信回路(300)からのTF動作信号(350)は、TFビット(262)に接続される。これらのビットは、送信回路のシーケンサの現在の状態を反映している。保留制御レジスタ(257)からのRHビットの出力(426)は、受信回路へと接続される。この出力は、受信回路を一時的に保留することによって、いずれのメッセージも失わずに別なメッセージの受信の開始を保留にするために使用される。受信回路からのRS動作信号(427)はRSビット(263)に接続され、また受信回路から出されるRF動作信号(428)はRFビット(264)に接続される。これらのビットは、受信回路のシーケンサの現在の状態を反映している。
【0065】
図17に送信回路(300)の詳細な回路図を示す。図18に示す送信回路の動作のフローを参照しながら、送信回路について以下で説明する。送信シーケンサ(320)が送信回路全体を制御する。送信回路の動作は、THビット(258)からのTH保留信号(348)を介して保留とすることができる。シーケンサの状態は、TSビット(261)とTFビット(262)とにそれぞれ接続されたTS動作信号(349)とTF動作信号(350)とを介して、動作状態レジスタ(260)に反映される。送信シーケンサ(320)は、送信シーケンサ(320)と直接メモリアクセス制御装置DMAC(321)との間で転送されるDMA制御信号(345)を介して、DMAC(321)を制御する。DMAC(321)は、バス(6)を制御することによって、送信回路にローカルメモリのTCWの取り出しと更新を行なわせることができるとともに、ローカルメモリからのメッセージデータの取り出しを制御できる。また送信シーケンサは、他の様々な制御信号(344)を介してネットワーク出力ポート(322)を制御する。ネットワーク出力ポート(322)は、送信ヘッダバッファ(335)の出力(354)との接続を有するとともに、ノード番号レジスタとの接続(310)を有し、メッセージヘッダを生成する。またネットワーク出力ポート(322)は、ローカルメモリから取り出されたメッセージデータを、バス(6)を介して受信し、これによってメッセージのデータフィールドを形成する。さらにネットワーク出力ポート(322)は、各メッセージのヘッダCRCフィールドとデータCRCフィールドを計算して、形成されたメッセージを送信回路のネットワーク接続機構(9)を介してネットワークへと送出する。TCW連鎖バッファ(331)には、NTCWPtrレジスタ(332)とNCビットレジスタ(333)とが含まれている。TCW連鎖バッファ(331)は、次に処理すべきTCWに関する連鎖情報を保持するために使用される。また、NTCWPtrレジスタ(332)は、バス(6)を介してIP(命令処理装置)によってアクセスできる。送信シーケンサ(320)が次のTCWの処理を開始すると、送信シーケンサは、その他の制御信号(344)のうちのいずれか1個をアサートして、NTCWPtrレジスタ(332)の内容のコピーをTCWPtrレジスタ(334)へとラッチする。TCWPtrレジスタ(334)は、現在処理中のTCWを指すアドレスポインタを含む。TCWPtrレジスタ(334)の出力(351)は、現在のTCWを判定する場合に、DMAC(321)によってTCWのアドレスポインタとして使用される。TCWは、ローカルメモリ(4)からバス(6)を介して取り出され、その内容は送信回路内のレジスタに格納される。TCWのNTCWPtrフィールド(121)とNCビット(122)は、NTCWPtrレジスタ(332)とNCビットレジスタ(333)とにそれぞれ格納される。TCWのIMビット(123)とIRビット(124)は、IMビットレジスタ(323)とIRビットレジスタ(324)とにそれぞれ格納される。これらのビットの出力と、NCビットレジスタ(333)の出力とで状態入力信号(343)が構成され、これらの信号(343)は送信シーケンサ(320)へと送られる。DataPtrレジスタ(342)は、TCWからのDataPtrフィールド(125)を保持するために使用される。送信ヘッダバッファ(335)は、DNNレジスタ(336)と、Commレジスタ(337)と、Tagレジスタ(338)と、SWHレジスタ(339)と、Rビットレジスタ(340)と、DataLenレジスタ(341)とで構成される。これらのレジスタは、TCWのDNNフィールド(126)、Commフィールド(127)、Tagフィールド(128)、SWHフィールド(129)、Rフィールド(130)、DataLenフィールド(131)をそれぞれ保持するために使用される。またDataPtrレジスタ(342)とDataLenレジスタ(341)は、DMAC(321)への出力接続(353)、(352)をそれぞれ有しており、これらの接続は、DMACが送信シーケンサによってメッセージデータの取り出しを要求された場合に使用される。TCWの取り出しの直後と、TCWの処理の完了時とに、送信回路はTCWの状態フィールドを更新する。送信回路はTCW状態バッファ(325)を有しており、送信シーケンサ(320)からの状態出力(346)は、TCW状態フィールドに書き戻される前にこのバッファ(325)に入れられる。TCW状態バッファの内容がTCWに書き込まれるとき、TCW状態バッファのSレジスタ(326)、Fレジスタ(327)、Iレジスタ(328)、Eレジスタ(329)、ECレジスタ(330)は、TCWのSフィールド(132)、Fフィールド(133)、Iフィールド(134)、Eフィールド(135)、ECフィールド(136)へとそれぞれ書き込まれる。
【0066】
送信回路の動作フローを図18に示す。電源を投入すると、NIA内のすべてのレジスタと状態とがクリアされ、送信シーケンサは開始ステップ(500)から動作を開始する。ステップ(501)において、送信シーケンサは、THビット(258)がクリアされて、NCビット(333)がセットされるのを待つ。クリアされたTHビット(258)は、ソフトウェアライブラリが送信回路によるTCWの処理を妨げないことを示しており、セットされたNCビット(333)は、次に処理すべきTCWのアドレスがNTCWPtrレジスタ(332)に格納されていることを示す。ステップ(502)において、TSビット(261)がセットされて、送信回路がTCWの処理を開始したことを示す。ステップ(503)において、TCWPtrレジスタ(334)にNTCWPtrレジスタ(332)からのTCWのアドレスが格納されるとともに、Fレジスタ(327)と、Iレジスタ(328)と、Eレジスタ(329)と、ECレジスタ(330)とが初期状態へとクリアされて、エラーが発生していないことを示す。ステップ(504)において、送信シーケンサ(320)は、TCWPtrレジスタ(334)内のTCWアドレスポインタを使用して、送信回路のDMAC(321)に対してメモリからのTCWの取り出しを要求する。TCWの内容は、ローカルメモリから取り出されると、送信回路の各レジスタに次のように格納される。すなわち、NTCWPtrフィールド(121)とNCビット(122)は、NTCWPtrレジスタ(332)とNCビットレジスタ(333)とにそれぞれ格納され、IMビット(123)とIRビット(124)は、IMビットレジスタ(323)とIRビットレジスタ(324)とにそれぞれ格納され、DataPtrフィールド(125)はDataPtrレジスタ(324)に格納され、DNNフィールド(126)、Comフィールド(127)、Tagフィールド(128)、SWHフィールド(129)、Rフィールド(130)、DataLenフィールド(131)は、送信ヘッダバッファ(335)のDNNレジスタ(336)と、Comレジスタ(337)と、Tagレジスタ(338)と、SWHレジスタ(339)と、Rレジスタ(340)と、DataLenレジスタ(341)とにそれぞれ格納される。ステップ(505)において、送信シーケンサ(320)は、ネットワーク出力ポート(322)に対してメッセージの送信開始を命令する。この時点で、ネットワーク出力ポート(322)は、DNNレジスタ(336)、ノード番号レジスタ(250)、Comレジスタ(337)、Tagレジスタ(338)、SWHレジスタ(339)、Rレジスタ(340)およびDataLenレジスタ(341)の内容を、この順序で取り出して送信することによって、メッセージヘッダのDNNフィールド(101)、SNNフィールド(102)、Comフィールド(103)、Tagフィールド(104)、SWHフィールド(105)、Rフィールド(106)およびDataLenフィールド(107)をそれぞれ形成する。ステップ(506)において、ネットワーク出力ポート(322)は、先行するヘッダフィールドから計算されたヘッダCRCフィールド(108)を送信する。ステップ(507)において、送信シーケンサ(320)は、DMAC(321)に対して、TCW状態バッファ(325)のSレジスタ(326)と、Fレジスタ(327)と、Iレジスタ(328)と、Eレジスタ(329)と、ECレジスタ(330)とを、TCW内のSフィールドと、Fフィールドと、Iフィールドと、Eフィールドと、ECフィールドとに書き込むことを要求する。書き込みがステップ(508)において完了すると、TSビットがクリアされる。ステップ(509)において、送信シーケンサ(320)は、DMAC(321)に対して、ローカルメモリからメッセージデータを取り出すことを要求する。メッセージデータのアドレスと長さは、DataPtrレジスタ(342)とDataLenレジスタ(341)にそれぞれ格納されている。データがバス(6)を介してローカルメモリから取り出されると、ネットワーク出力ポート(322)は、該データをネットワークへと送信して、メッセージのデータフィールド(109)を形成する。すべてのデータの送信が完了すると、ステップ(510)において、送信シーケンサはデータCRCフィールド(110)をメッセージの終端に付加する。ステップ(511)において、送信シーケンサ(320)はIMビットレジスタ(323)の値を検査する。このビットがクリアされていれば、送信シーケンサ(320)は、ステップ(512)においてTFビット(262)をセットする。ステップ(513)において、送信シーケンサはDMAC(321)に対して、TCWからIRビット(124)をIRビットレジスタ(324)へと再度取り出すことを要求する。IRビットが再度取り出されるか、もしくはこの取り出しが不用である場合、送信シーケンサはステップ(514)へと進み、Fレジスタ(327)をセットし、Iレジスタ(328)をIRビットレジスタ(324)の値へとセットする。TCWの処理中にエラーが発生した場合、ECレジスタ(330)にエラーコードを表わす値がセットされるとともに、Eレジスタ(329)がセットされる。ステップ(515)において、送信シーケンサ(320)はDMAC(321)に対して、TCW状態バッファ(325)のSレジスタ、Fレジスタ、Iレジスタ、Eレジスタ、ECレジスタを、それぞれTCWのSフィールドと、Fフィールドと、Iフィールドと、Eフィールドと、ECフィールドとに再度書き込むことを要求する。ステップ(516)において書き込み要求が完了すると、送信シーケンサ(320)はTCWIRQ信号(347)をアサートする。TCWIRQ信号(347)は、2個のANDゲート(355)、(356)によってTCW状態バッファ(325)のIビット(328)とEビット(329)との間で論理積がとられる。これらのANDゲート(355)、(356)の出力(357)、(358)は、TI割り込み要求ビット(266)とTE割り込み要求ビット(267)とに接続される。TCW内のIRビット(124)がセットされて割り込みが要求されると、TI割り込み要求ビット(266)がセットされる。この割り込みが、割り込み要求マスクレジスタ(277)によってマスクされていなければ、処理装置に接続されている割り込み要求線(7)もアサートされる。同様にして、エラーが発生すると、TCW状態バッファ(325)のEレジスタがセットされ、当該割り込みが割り込み要求マスクレジスタ(277)によってマスクされていなければ、処理装置へと至る割り込み要求線(7)もアサートされる。ステップ(517)において、送信シーケンサはTFビット(262)をクリアしたのちステップ(501)へと戻り、次のTCWの処理に備える。
【0067】
アプリケーションソフトウェアは、送信ライブラリソフトウェアサブルーチンを呼び出すことによって、単一または複数のメッセージを送信するための要求を発行する。ライブラリソフトウェアは、送信すべき各メッセージに対してTCWを生成し、これらのTCWを繋げてサブ連鎖を形成する。送信回路がすでにTCWの一連鎖を処理している場合、新しいTCWのサブ連鎖は現行の連鎖の末尾に付加される。送信回路が、連鎖の最後のTCWを処理しているか、もしくはアイドル状態にある場合、ライブラリソフトウェアは、新たなTCWの連鎖の処理を開始するように送信回路をプログラムする。送信回路はTCWの処理とメッセージの送信とを、常にTCW連鎖中の順序に基づいて行なうため、上記の送信命令の待ち行列法を使用すれば、メッセージが送信要求の発行順に送信されることが保証される。ネットワーク上ではメッセージが互いを追い越すことなく転送されるため、送信回路から受信回路へと送られるメッセージは、送信要求の発行順に到着する。
【0068】
図19に受信回路(301)の詳細な回路図を示す。以下での受信回路の説明は、受信回路の動作フローを表わす図20、23、24、25、26と、受信回路内にあるハッシュテーブル検索制御回路とを参照しながら行なう。図21にハッシュテーブル検索制御回路(363)の詳細な回路図を示す。この回路は、図22に示す該回路の動作フローを参照して説明する。
【0069】
最初に図19を参照して受信回路を説明する。受信シーケンサ(360)が受信回路全体を制御する。受信DMAC(361)は、バス(6)の動作を制御することによって、ローカルメモリ内のHTE、ポストRCW、PCWならびにプールRCWの取り出しと更新とを受信回路に実行させることができるとともに、メッセージデータのローカルバッファへの書き込みを制御することができる。受信シーケンサ(360)は、ネットワーク接続機構(11)を有するネットワーク入力ポート(362)を制御して、この機構(11)を介してメッセージを受信する。ハッシュテーブル検索制御装置(363)は、ハッシュテーブル内で、もっとも古いポストRCWまたはPCWであって、一致する受信指定を有するポストRCWまたはPCWを指すHTEを確定する。また受信回路には、多数の他のレジスタ、演算装置、ゲート等が含まれる。これらの構成部品については後で説明する。
【0070】
受信回路の主要動作フローを図20に示す。電源が投入されると、NIA内のすべてのレジスタの状態は初期化され、ステップ(520)から動作が開始される。ステップ(521)において、ネットワーク入力ポート(362)は、受信ネットワーク接続機構(11)を介してメッセージヘッダの受信が開始されるのを待つ。ネットワーク入力ポート(362)は、メッセージ同期ビット(112)によってメッセージヘッダの開始を確認する。ステップ(522)において、ネットワーク入力ポート(362)は、メッセージヘッダのSNNフィールド(102)、Commフィールド(103)、Tagフィールド(104)、SWHフィールド(105)、Rフィールド(106)、DataLenフィールド(107)を、SNNレジスタ(365)、Commレジスタ(366)、Tagレジスタ(367)、SWHレジスタ(402)、Rレジスタ(403)、DataLenレジスタ(404)へとそれぞれ転送する。この転送は、これらのレジスタに接続されたメッセージヘッダデータバス(435)を使用して行なわれる。ステップ(523)において、ネットワーク入力ポート(362)はメッセージヘッダのヘッダCRCフィールド(108)を検査する。ここでエラーが検出されると、ステップ(524)においてヘッダCRCエラー信号(429)を介してCE割り込み要求ビット(276)がセットされて、メッセージヘッダCRCエラーがソフトウェアに通知される。エラーの通知後、処理はステップ(521)へと戻り、ネットワーク入力ポート(362)は次のメッセージヘッダの受信開始を待つ。ステップ(523)においてエラーが検出されなければ、ネットワーク入力ポート(362)は、受信シーケンサ(360)に対して、有効なメッセージヘッダの到着を入力ポート制御信号(144)を使用して通知する。
【0071】
受信保留ビットRH(259)の状態は、RH保留信号(426)を介して受信シーケンサへと転送される。ステップ(525)において、受信シーケンサ(360)はRH(259)がクリアされるのを待つ。このビットがすでにクリアされている場合か、もしくは該ビットがその後クリアされた場合に、受信シーケンサ(360)は、ステップ(526)において、RS動作信号(427)をアサートすることによって受信動作開始ビットRS(263)をセットする。
【0072】
ポスト受信要求を保持するために使用される制御構造を、ソフトウェアと受信回路とが同時にアクセスや変更をしないことが重要である。これが仮に行なわれると、動作の整合性が失われることになる。この問題は、RSビット(263)とRHビット(259)を使用することによって避けられる。これらのビットは、ソフトウェアによってバス(6)を介してアクセスできる。RSビット(263)は、受信要求をポストするために使用される制御構造のアクセスを受信回路が開始する直前に、受信シーケンサによってセットされる。RSビット(263)は受信回路によってクリアされるが、このクリア動作は、メッセージ受信時の必要に応じて、ポストRCWのポストを解除するか、プールRCWを割り当てるか、データプール空間を割り当てるかのいずれかの動作を行なうための制御構造の変更が完了したのちに行なわれる。RHビット(259)によって、ソフトウェアは受信回路の動作を一時的に保留することができるため、受信回路によるメッセージの処理は開始されない。これによって受信回路による制御構造へのアクセスを抑制することができる。RHビット(259)がセットされていれば、受信回路がRSビット(263)をセットすることは決してない。RSビットは、セットされたのちできるだけ早い時期に受信回路によってクリアされるが、このクリア動作は、制御構造に対する所要のアクセスが完了してから行なわれる。このように、RHビット(259)がセットされたのち、RSビット(263)がクリアされるのをソフトウェアが待つとすれば、RHビット(259)がクリアされるまで受信回路によって制御構造がアクセスされることはないことがソフトウェア側に対して保証される。RHビット(259)とRSビット(263)をこのように使用することによって、ソフトウェアは、受信回路の動作の整合性を乱すことなく、これらの制御構造を独占的にアクセスし、変更することができる。
【0073】
ステップ(526)において、RSビット(263)がセットされると、受信シーケンサ(360)はステップ(527)へと移行する。ステップ(527)において、受信シーケンサ(360)は検索要求信号(415)をアサートし、この信号はハッシュテーブル検索制御装置(363)へと送られる。ハッシュテーブル検索制御装置(363)は、メッセージヘッダバッファ(364)のSNNレジスタ(365)、Commレジスタ(366)、Tagレジスタ(367)の中の値を、検索用の入力パラメータとして使用する。受信回路の他の構成部品の説明を再開する前に、ハッシュテーブル検索制御装置(363)とその動作とについて説明する。
【0074】
図21にハッシュテーブル検索制御装置(363)の詳細な回路図を示す。この回路は、もっとも古いポストRCWまたはPCWであって、一致する受信指定を有するポストRCWまたはPCWを指すHTEを確定する。このハッシュテーブル検索制御装置の回路図を、該回路の動作フローを示す図22を参照しながら説明する。
【0075】
ハッシュテーブル検索制御装置(363)は、その機能の実行にあたって、メッセージヘッダバッファ(364)の内容と一致する可能性のある受信指定を有する各HTEを検索し、一致したHTEであってその時点までに判明したもっとも古いHTEに関する情報を保持する。HTEバッファ(457)は、MPtrレジスタ(458)と、MPレジスタ(459)と、MTimeレジスタ(460)とを有し、最も古い一致したHTEのPtrフィールド(144)と、Pフィールド(146)と、Timeフィールド(148)とを含む。このHTEのインデックスは、MIndexレジスタ(479)に保持されている。これらのレジスタは、検出(Found)信号(433)によって有効であることが表わされる。
【0076】
ハッシュテーブル構成レジスタ(751)にはHTBPtrレジスタ(752)とサイズSizeレジスタ(753)とが含まれ、命令処理装置IP(3)で実行されるソフトウェアからバス(6)を介してプログラムできる。HTBPtrレジスタ(752)はハッシュテーブルの基底アドレスを指定し、Sizeレジスタ(753)はハッシュテーブル中のHTEの個数を指定する。本実施例では、説明を簡単にするために、ハッシュテーブル内のHTEの個数を2の累乗に限定している。
【0077】
メッセージが到着してメッセージヘッダバッファ(364)へと格納されると、ステップ(540)において、検索要求信号(415)によってハッシュテーブル検索シーケンサ(450)が起動される。ハッシュテーブル検索シーケンサ(450)は、制御信号(497)を介して、ハッシュテーブル検索制御装置内のセレクタとラッチの動作を制御するとともに、DMA制御信号(432)を介して、DMAC(361)に対してHTEの取り出しを請求する。各メッセージに一致する4種類の受信指定があり、これらの指定は無指定値を使用する際の4種類の組み合わせに対応する。ハッシュテーブル検索シーケンサ(450)は、これら4種類の組み合わせに該当する各HTEを検索するが、この検索のために、検索対象のHTEの受信指定を選択するためのループカウンタnを有する。ステップ(541)において、ハッシュテーブル検索シーケンサ(450)は、ループカウンタnをゼロに初期化して、検出状態信号(433)をクリアする。
【0078】
ループの第1のステップは、ステップ(542)である。ステップ(542)において、HTEの受信指定のうち無指定の組み合わせが選択される。無指定選択信号(461,462)は、ハッシュテーブル検索シーケンサ(450)によって制御され、これらの信号にはnの値に対応する値が割り当てられる。1または3に等しいnに対してはSNN無指定選択信号(461)がアサートされ、2または3に等しいnに対してはTag無指定選択信号(462)がアサートされる。ステップ(543)において、検索すべきHTEの最初の検索インデックスが計算される。受信指定は最大3個の構成部分、すなわちSNN受信指定、Comm受信指定、Tag受信指定からなる。SNN受信指定は、SNNレジスタ(365)の出力(463)と、SNN無指定選択信号(461)とを、ORゲート(464)によって論理和演算した結果である。Comm受信指定(466)は、Commレジスタ(366)の出力そのものである。Tag受信指定(470)は、Tagレジスタ(367)の出力(468)と、Tag無指定選択信号(462)とを、ORゲート(469)によって論理和演算した結果である。SNN受信指定(465)とComm受信指定(466)とを合成して、合成SNN/Comm受信指定(467)を生成すると便利である。最初の検出インデックスを生成するには、2種類の受信指定(つまり合成SNN/Comm受信指定(467))とTag受信指定(470)とを、ハッシュ機能回路(471)によってハッシングする必要がある。ハッシュ機能回路(471)の出力は、セレクタ(472)によって選択され、ANDゲート(474)によってこの出力値とマスク値との論理積がとられる。マスク値は、Sizeレジスタ(753)の値に基づいてマスク回路(473)によって生成され、インデックス値の可能な範囲を限定するために使用される。これによってハッシュテーブルのサイズが限定される。マスク後の値は、インデックスレジスタ(475)によってラッチされる。インデックスレジスタ(475)は、検査すべき最初のHTEの最初の検索インデックスを保持する。
【0079】
ステップ(544)において、HTE検索アルゴリズムの最も内側のループに入る。インデックスレジスタ(475)のインデックス値は、セレクタ(476)によって選択され、乗算回路(477)によってHTEのバイトサイズで乗算され、加算器(478)によってHTBPtrレジスタ(752)内のハッシュテーブルの基底アドレスへと加算される。こうしてHTEPtr信号(431)が生成される。ついでステップ(545)において、HTEPtr信号(431)は、受信側のDMAC(361)へと送られる。ハッシュテーブル検索シーケンサ(450)と受信側DMAC(361)との間で転送されるDMA制御信号(432)を使用して、ローカルメモリからのHTEの読み出しが要求される。バス(6)を介してHTEが到着すると、HTEのSNNフィールド(141)とCommフィールド(142)とからなる最初の語が、等値比較器(481)によってSNN/Comm受信指定(467)と比較される。比較の結果が等値であれば、S0状態レジスタ(482)がセットされ、等値でなければこのレジスタ(482)はクリアされる。HTEのTagフィールド(143)からなる第2の語は、別な等価比較器(483)によってTag受信指定(470)と比較される。比較の結果が等値であれば、S1状態レジスタ(484)がセットされ、等値でなければこのレジスタ(484)はクリアされる。Ptr(144)、C(145)、P(146)、HV(147)、Time(148)の各フィールドからなるHTEの第3と第4の語は、HTE読み出しバッファ(451)のPtr(452)、HC(453)、P(454)、HV(455)、Time(456)の各レジスタにそれぞれラッチされる。
【0080】
ステップ(546)において、ANDゲート(489)が、HVレジスタ(455)の出力(HTE有効信号(486)と称する)と、S0状態レジスタ(482)ならびにS1状態レジスタ(484)との論理積演算を行なう。ANDゲート(489)の出力は一致信号(490)を構成する。この一致信号(490)は、HTEが検出されたこと、該HTEが有効であって一致する受信指定を有すること、ただし有効なポスト受信要求が該HTEに連鎖されているか否かは不明であること、を示している。ORゲート(493)が、一致信号(490)と、HTE有効信号(486)の反転信号との論理和演算を行なう。この結果、検索終了信号(494)が生成されて、ハッシュテーブル検索シーケンサ(450)へとこの信号が転送される。HTEの検索は、検索対象のHTEが検出された時点か、もしくは無効なHTEが検出された時点で終了する。このように検索終了信号(494)は、特定の受信指定を有するHTEの検索に関して、これ以上HTEを取り出す必要のないことを示す。
【0081】
ステップ(547)において、ハッシュテーブル検索シーケンサ(450)は検索終了信号(494)を検査する。この信号がアサートされていなければ、処理はステップ(548)へと進み、次のHTEを取り出して検査する。ステップ(548)において、検査すべき次のHTEのインデックスが計算される。ハッシュテーブル検索シーケンサ(450)は、増分器(480)によって増分されたインデックスレジスタ(475)の値を、セレクタ(472)を介して選択する。この値は、ANDゲート(474)によって、マスク回路(473)からのマスク値でマスクされる。マスクされた値は、再びインデックスレジスタ(479)へとラッチされる。インデックスレジスタ(479)の値を増分したのちマスクすることによって、ハッシュテーブル内の次のHTEのインデックスが与えられる。ハッシュテーブルのサイズの限界が越えられた場合には、テーブルの先頭へと戻る。処理のフローはステップ(544)へと戻り、次のHTEが取り出される。ソフトウェア側では、無効なHTEを少なくとも1個ハッシュテーブルに格納しておく必要がある。これはハッシュテーブル検索シーケンサが無限ループに入ってしまう可能性を防ぐためである。
【0082】
ステップ(547)において検索終了信号(494)がアサートされると、処理のフローはステップ(549)へと至る。別なANDゲート(491)が、一致信号(490)とHCビット(453)との論理積演算を行なって、一致ポスト信号(492)を生成する。比較器(495)によってOlder信号(496)が生成される。Timeレジスタ(456)の値がMtimeレジスタ(460)の値より低い場合、Older信号(496)がアサートされる。これらの信号もハッシュテーブル検索シーケンサ(450)へと送られる。ステップ(550)において、有効なポスト受信要求についてのHTEが検出されたか、またかかるポスト受信要求がその時点までに検出された最も古いポスト受信要求より古いかが、ハッシュテーブル検索シーケンサ(450)によって検査される。一致ポスト信号(492)がアサートされる場合であって、検出状態信号(433)がアサートされないか、もしくはOlder信号(496)がアサートされているかのいずれかである場合、有効なポスト受信要求についてのHTEが検出されて該ポスト受信要求がその時点で最も古いことが示される。この場合、ステップ(551)において、検出状態信号(433)がアサートされ、Ptr(452)、P(454)、Time(456)、Index(475)の各レジスタの内容が、MPtr(458)、MP(459)、Mtime(460)、MIndex(479)の各レジスタへとそれぞれ複写される。
【0083】
処理のフローはステップ(552)へと至り、ここでnの値が1だけ増分される。ステップ(553)において、nが4未満であって、受信指定が無指定の順列のすべてが検査されたわけではないことが示されると、処理はステップ(542)へと戻って、次の受信指定を有するHTEの検索が開始される。
【0084】
nの値が4に等しければ、検索は完了したことになる。ステップ(554)において、ハッシュテーブル検索シーケンサ(450)は、セレクタ(476)を使用してMindexレジスタ(479)を選択したのち、検索完了信号(416)をアサートする。検出信号(433)がすでにアサートされていれば、有効なポスト受信要求についてのHTEがすでに検出されたことを意味しているため、HTEPtr信号(431)は、最も古くて有効なポスト受信要求についてのHTEのアドレスポインタに対応する。MPtrレジスタ(458)とMPレジスタ(459)から送られたMPtr信号(437)とMP信号(436)は、HTEのPtrフィールド(144)とPフィールド(146)とにそれぞれ対応する。ステップ(555)において、ハッシュテーブル検出シーケンサ(450)は検出完了信号(416)をアサートする。この信号は、受信シーケンサ(360)に対して、ハッシュテーブル検索制御装置(363)が当該検索要求の処理を完了したことを通知する。
【0085】
ここで受信回路の他の構成部品の説明に戻る。検索完了信号(416)がアサートされると、受信回路の処理フローはステップ(528)から再開される。ハッシュテーブル検索制御装置(363)から送られた検出(Found)信号(433)が検査される。この検査を行なう場合、ANDゲート(434)が、検出完了信号(416)と検出信号(433)の反転信号との論理積演算を行なって、その結果をNM割り込み要求ビット(275)へと転送する。検索の結果、一致するものが検出できなければ、ステップ(529)においてNM割り込み要求ビット(275)がセットされる。これによって、有効なポスト受信要求について一致したHTEが検出されなかったことが、ソフトウェア側に通知される。検出信号(433)は受信シーケンサ(360)にも送られる。この場合も検索により一致するものが検出できなければ、受信シーケンサ(360)はRSビット(263)をステップ(530)においてクリアする。処理フローは最初のステップ(521)へともどり、ネットワーク入力ポート(362)は次のメッセージヘッダの受信開始を待つ。
【0086】
HTEが検出されると、処理フローはステップ(531)へと進む。ステップ(531)において、実行すべき受信動作の種類により、必要に応じてポストRCWもしくはポストPCWの取り出し、ポストRCWのポストの解除、プールRCWの割り当て、データプール空間の割り当て等が行なわれる。ポストRCWもしくはプールRCWは更新されて、メッセージの受信が開始されたことが示される。
【0087】
このステップ(531)は実際はさらに複雑なサブルーチンであって、このサブルーチンの拡大フローを図23、24、25に示す。フローをこれら3図に分割したのは見やすさを考慮したためであって、参照記号のA(570)、B(571)、C(575)、D(577)、E(587)によって各図の間の繋がりを示す。このサブルーチンの最初のステップはステップ(560)である。受信回路は、現在のメッセージの受信に関するさまざまな状態を保持している。これらの状態は、受信状態バッファ(382)のSレジスタ(383)と、Bレジスタ(384)と、Fレジスタ(385)と、Iレジスタ(386)と、Eレジスタ(387)と、ECレジスタ(388)とに保持されており、その後受信回路によって、ポストRCWのS(207)、B(208)、F(209)、I(210)、E(211)、EC(212)の各フィールドにそれぞれ書き込まれる。プールRCWの場合、これらの状態は、S(244)、B(249)、F(245)、I(246)、E(247)、EC(248)の各フィールドにそれぞれ書き込まれる。これによって、メッセージの受信状態がソフトウェアへと通知される。Sレジスタ(383)は、「1」の値でハードワイヤドされている。これは、受信回路が、RCWのSフィールドにセット値以外の値を書き込む必要がまったくないためである。このビットは、受信動作が開始されたことをソフトウェアに通知する。BEビット(174)のセットされたポストRCWによって指定されたバッファが、受信動作で使用されると、Bレジスタ(384)がセットされる。受信動作が終了すると、Fレジスタ(385)がセットされる。ポストRCWのIRビット(178)もしくはプールRCWのIRビット(225)による指定に準じて割り込みが要求される場合、Iレジスタ(386)がセットされる。Eレジスタ(387)は、エラー状態が検出されるとセットされる。この場合、検出されたエラーの種類を示すエラーコードがECレジスタ(388)にセットされる。ステップ(561)において、B(384)、F(385)、I(386)、E(387)、EC(388)の各レジスタは、すべてセット値以外の状態にクリアされる。ステップ(562)において、受信シーケンサ(360)は、ハッシュテーブル検索制御装置(363)から送られたMPビット信号(436)を検査して、ポストRCWもしくはポストPCWが検出されたか否かを判定する。ここではまず、MPビット(436)がクリアされた場合を説明する。これは、検索によって、ポストRCWを指すポインタを含むHTEの一致が検出された場合である。MPビット(436)がセットされた場合については後述する。ポストRCWを指すアドレスポインタは、MPtr信号(437)を介してハッシュテーブル検索制御装置(363)から出力される。このアドレスポインタは、ステップ(563)においてRCWPtrレジスタ(369)によってラッチされる。このレジスタ(369)の出力(439)は、受信側DMAC(361)へと送られる。次に受信シーケンサ(360)は、ステップ(564)において、受信側DMAC(361)に対して、DMA制御信号(419)を使用してローカルメモリ(4)からポストRCWを取り出すよう要求する。ポストRCWのデータフィールドは、バス(6)を介して返送される。ポストRCWもしくはプールRCWから読み出されたリンク情報は、次リンクバッファ(371)によって一時的に保持される。ポストRCWの場合には、ステップ(564)の場合と同様に、次リンクバッファ(371)内のNPtr(372)、NC(373)、NP(374)、NTime(376)の各レジスタが、バス(6)を介して読み出された当該ポストRCWの対応するフィールドからそれぞれラッチされる。NHVレジスタ(375)は、ハードワイヤドされた2進値「1」を有しており、この値は変更されない。ポストRCWのBE(174)、IM(177)、IR(178)、PCWPtr(179)、BuffPtr(180)の各フィールドは、BE(378)、IM(380)、IR(381)、PCWPtr(368)、BuffPtr(407)の各レジスタにそれぞれラッチされる。ポストRCWのBuffSizeフィールド(181)は、レジスタに直接ラッチされず、バス(6)上に到着した時点で比較器(405)によってDataLenレジスタの出力(440)と比較される。比較の結果は、CBレジスタ(406)にラッチされる。DataLenレジスタにはメッセージデータフィールドの長さの値が格納されており、この値がポストRCWのBufSizeフィールド(181)の値より大きい場合、CBレジスタ(406)がセットされる。これによって、ポストRCWのバッファの大きさが不十分であるため、すべてのメッセージデータを格納できないことが示される。
【0088】
ステップ(565)において、ポストRCWのポストが解除される。これは、受信回路が、次のポストRCWもしくはポストPCWに関する連鎖情報をHTEに複写することによって行なわれる。連鎖されたポストRCWやポストPCWがなければ、受信回路は、現在のポストRCWに関するフィールドを無効とすることによってポストの解除を行なう。この場合、受信シーケンサ(360)は、受信側のDMAC(361)に対して、次リンクバッファ(371)の内容を、ハッシュテーブル検索制御装置(363)からのHTEPtr出力(431)によって示されたHTEへと書き込むことを要求する。NPtr(372)、NC(373)、NP(374)、NHV(375)、NTime(376)の各レジスタの値は、HTEのPtr(144)、C(145)、P(146)、HV(147)、Time(148)の各フィールドへとそれぞれ書き込まれる。HVフィールド(147)に2進値の「1」を書き込むと、HTEの有効性を保証する効果がある。NCレジスタ(373)がクリアされている場合のように、連鎖されたポスト項がなくても、ハッシュテーブル内の将来の検索において異なるHTEの検出を可能とすることを保証するためには、当該HTEが有効であることが重要である。連鎖されたポストRCWやポストPCWがない場合であって、HTEが無効とされた場合は、無効なHTEの取り出し時点で直ちに将来の検索は終了し、一致する有効なHTEの検出は行なわれない。ステップ(566)において、BEビット(378)の値が受信シーケンサ(360)によって検査される。BEビットがセットされていれば、ポストRCWのBuffPtrフィールド(180)とBuffSizeフィールド(181)が有効であるため、DataPtrレジスタ(407)とCBレジスタ(406)も有効である。ここで、BEビット(378)がセットされた場合について説明する。BEビット(378)がクリアされた場合については後述する。処理のフローはステップ(567)へと進む。ステップ(567)において、受信状態バッファ(382)のBレジスタ(384)が受信シーケンサ(360)によってセットされる。これによってRCWのデータバッファが有効であることが示される。ステップ(568)において、CBレジスタ(406)の値が受信シーケンサによって検査される。CBレジスタ(406)がセットされていれば、RCWのバッファの大きさが不十分であることがわかる。ステップ(569)において、受信シーケンサ(360)は、受信状態バッファ(382)のEレジスタ(387)とECレジスタ(388)をセットする。これによって、受信バッファの大きさが不十分であってメッセージデータを格納できなかったため、エラーが発生したことが示される。CBレジスタ(406)がセットされたか否かにかかわらず、処理フローはステップ(588)へと進む。ステップ(588)において、ローカルメモリ(4)内の当該ポストRCWが受信回路によって更新される。受信シーケンサ(360)は、受信側DMAC(361)に対して、PCWPtrレジスタ(369)によって指定されたポストRCWの更新を要求する。SNN(365)、Comm(366)、Tag(367)、SWH(402)、R(403)、DataLen(404)の各レジスタ内のメッセージヘッダフィールドの値は、ポストRCWのSNN(201)、Comm(202)、Tag(203)、SWH(204)、R(205)、DataLen(206)の各フィールドへとそれぞれ書き込まれる。受信状態バッファ(382)のS(383)、B(384)、F(385)、I(386)、E(387)、EC(388)の各レジスタは、ポストRCWのS(207)、B(208)、F(209)、I(210)、E(211)、EC(212)の各フィールドへと書き込まれる。ついで処理フローはステップ(594)へと進む。以上で受信開始局面が完了する。先に説明を延期した各状態の説明を以下で終えたのちに、ステップ(594)に続く受信回路の処理のフローを説明する。
【0089】
ステップ(566)においてBEビット(378)がクリアされた場合、処理フローはステップ(578)へと進む。この時点では、受信回路はメッセージデータを書き込む場所をまだ決定していない。受信回路がメッセージデータを受信するためには、まずデータプールから空間を割り当てる必要がある。PCWPtrレジスタには、特定のPCWを指定するポストRCWからのPCWPtrフィールドが格納されている。使用すべきデータプールは、このPCWによって管理される。PCWPtrレジスタ(368)の出力(438)は、受信側DMAC(361)へと送られる。ステップ(578)において、受信シーケンサ(360)は受信側DMAC(361)に対して、PCWの取り出しを要求する。このPCWは、バス(6)を介してローカルメモリ(4)から返送される。PCWのN(153)、W(154)、O(155)、L(156)、Seq(157)の各フィールドは、PCW状態バッファ(389)のN(390)、W(391)、O(392)、L(393)、Seq(394)の各レジスタによってそれぞれラッチされる。PCWのHeadPtrフィールド(158)は、DataPtrレジスタ(407)とNHeadPtrレジスタ(413)とによってラッチされる。加算器(408)は、DataPtrレジスタ(407)の出力(441)とDataLenレジスタ(404)の出力(440)とを加算する。加算器の出力(409)は、データプールのヘッドポインタの新しい値となる。比較器(410)によって、新しいヘッドポインタの値(409)が、PCWのLWMPtrフィールド(160)またはTailPtrフィールド(159)の値を越えるか否かが検査される。これらのフィールドは、PCWの異なる語内にあるため、異なる周期でバス(6)上に到着する。比較器(410)の出力は、CLレジスタ(411)とCTレジスタ(412)とによってラッチされる。このラッチ動作は、ヘッドポインタの値(409)がLWMPtrフィールドの値を越えていれば、CLビット(411)がセットされ、TailPtrフィールドの値を越えていればCTビット(412)がセットされるように行なわれる。ステップ(579)において、受信シーケンサ(360)は、N(390)、W(391)、O(392)、L(393)の各レジスタの値を、PCW書き込み状態バッファ(396)のNN(397)、NW(398)、NO(399)、NL(400)の各レジスタへとそれぞれ複写する。さらに受信シーケンサは、増分器(395)を使用してSeqレジスタ(394)の値を増分するとともに、この値をPCW書き込み状態バッファ(396)のNSeqレジスタ(401)にラッチする。PCW書き込み状態バッファ(396)によって、PCWへの書き込みのバッファリングが行なわれる。NN(397)、NW(398)、NO(399)、NL(400)、NSeq(401)の各レジスタには、書き込むべきPCWのN(153)、W(154)、O(155)、L(156)、Seq(157)の各フィールドの新しい値がそれぞれ格納される。処理フローは次にステップ(582)へと進む。ステップ(582)において、受信回路はデータプールの割り当てエラーの有無を検査する。Oレジスタ(392)がセットされていれば、PCWのデータプールにはすでにデータプールオーバーフローエラーが発生している。CTレジスタ(412)がセットされていれば、現在のメッセージのデータを受信するための空間を割り当てるのに十分なデータプール空間がないことを意味する。いずれの場合でも、データプール空間の割り当ては行なわれない。ステップ(583)において、受信シーケンサ(360)は、Eレジスタ(387)とECレジスタ(388)とをセットする。これによって、データプール空間の不足が検出されたことと、空間の割り当てが不可能であることとが示される。さらに受信シーケンサ(360)はNOレジスタ(399)をセットする。これによって、PCWが書き込まれた場合、当該PCWのOビットフィールド(155)がセットされてデータプールオーバーフローエラーが検出されたことが示される。データプールオーバーフローエラーが検出されなければ、割り当てが成功したことを意味する。ステップ(584)において、受信シーケンサ(360)は、NHeadPtrレジスタ(413)によって、加算器出力(409)からのデータプールヘッドポインタ出力の新しい値をラッチする。またデータプールオーバーフローエラーが発生しなかった場合、受信シーケンサ(360)はステップ(585)においてCLレジスタ(411)を検査する。CLレジスタ(411)がセットされていれば、受信シーケンサはステップ(586)において、NLレジスタ(400)をセットする。これによってヘッドポインタがウォータマークを超過したことが示される。データプール空間の割り当てが成功したか否かにかかわらず、処理フローはステップ(589)へと進む。ステップ(589)において、ローカルメモリ内のポストRCWが受信回路によって更新される。受信シーケンサ(360)は、RCWPtrレジスタ(369)によって指定されたポストRCWの書き込みを、受信側DMAC(361)に対して要求する。Seqレジスタ(394)とDataPtrレジスタ(407)の値は、ポストRCWのSeqフィールド(199)とDataPtrフィールド(200)とに書き込まれる。SNN(365)、Comm(366)、Tag(367)、SWH(402)、R(403)、DataLen(404)の各レジスタにあるメッセージヘッダフィールドの値は、ポストRCWのSNN(201)、Comm(202)、Tag(203)、SWH(204)、R(205)、DataLen(206)の各フィールドへとそれぞれ書き込まれる。受信状態バッファ(382)のS(383)、B(384)、F(385)、I(386)、E(387)、EC(388)の各レジスタは、ポストRCWのS(207)、B(208)、F(209)、I(210)、E(211)、EC(212)の各フィールドへとそれぞれ書き込まれる。ステップ(590)において、受信シーケンサ(360)は、HTE検索制御装置(363)からのMP信号(436)の値を再度検査する。以上の説明は、MP信号がクリアされている場合に該当するため、処理フローはステップ(592)へと進む。ステップ(592)において、ローカルメモリ内のPCWが受信回路によって更新される。受信シーケンサ(360)は、PCWPtrレジスタ(368)によって指定されたPCWの書き込みを、受信側のDMAC(361)に対して要求する。PCW書き込み状態バッファ(396)内のNN(397)、NW(398)、NO(399)、NL(400)、NSeq(401)の各レジスタの値と、NheadPtrレジスタ(413)の値とが、バス(6)を介して、PCWのN、W、O、L、Seq、HeadPtrの各フィールドにそれぞれ書き込まれる。PCWの書き込み動作が完了すると、受信シーケンサ(360)は、ステップ(593)においてPCWIRQ信号(420)をアサートする。4個のANDゲート(421)が、この信号と、NN(397)、NW(398)、NO(399)、NL(400)の各レジスタの出力との論理積をとるとともに、N(390)、W(391)、O(392)、L(393)の反転出力との論理積をそれぞれとる。この結果、4個の出力信号は、PN(271)、PW(272)、PO(273)、PL(274)の各割り込み要求ビットをそれぞれセットする。このため、PCWのN、W、O、Lの各ビットのうち過去にクリアされていたビットのいずれかを受信回路がセットすると、対応する割り込み要求ビットがセットされる。このビットによって、PCWに関する警告もしくはエラー状態が存在する場合、かかる警告もしくはエラー状態がソフトウェアに通知される。処理フローはステップ(594)へと進み、上記の受信開始局面が完了する。
【0090】
ここでステップ(562)へと戻って、ハッシュテーブル検索処理装置(363)からのMP信号がセットされていた場合の受信回路の処理フローを説明する。この場合、検索において、ポストPCWを指すポインタを含むHTEとの一致が検出されて、処理はステップ(572)へと進む。当該PCWを指すポインタは、MPtr信号(437)を介してハッシュテーブル検索制御装置(363)から出力され、ステップ(572)においてPCWPtrレジスタ(368)によってラッチされる。PCWPtrレジスタ(368)の出力(438)は、受信側のDMAC(361)へと送られる。ステップ(573)において、受信シーケンサは、DMAC(361)に対して、ローカルメモリ(4)からポストPCWを取り出すことを要求する。PCWのデータフィールドはバス(6)を介して返送される。PCWのRCWPtrフィールドとCフィールドは、RCWPtrレジスタ(369)とCビットレジスタ(370)とによってラッチされる。PCWのN、W、O、L、Seqの各フィールドは、PCW状態バッファ(389)のN(390)、W(391)、O(392)、L(393)、Seq(394)の各レジスタによってラッチされる。PCWのHeadPtrフィールドは、DataPtrレジスタ(407)とNHeadPtrレジスタ(413)とによってラッチされる。対応するデータバッファのない上記のRCWの場合と同様に、新しいデータプールヘッドポインタがLWMPtrの値を越えていれば、CLレジスタ(411)がセットされ、TailPtrの値を越えていればCTレジスタ(412)がセットされる。ステップ(595)において、受信シーケンサ(360)は、N(390)、W(391)、O(392)、L(393)の各レジスタの値を、PCW書き込み状態バッファ(396)のNN(397)、NW(398)、NO(399)、NL(400)の各レジスタへとそれぞれ複写する。また受信シーケンサ(360)は、増分器(395)を使用してSeqレジスタ(394)内の値を増分したのち、この値をPCW書き込み状態バッファ(396)のNSeqレジスタ(401)にラッチする。ステップ(574)において、受信シーケンサ(360)は、プールPCWの取得が可能か否かを検査する。Nレジスタ(390)がセットされていれば、プールPCWの不足によるエラーがすでに検出されていることを意味する。Cレジスタ(370)がクリアされていれば、PCWPtrレジスタ(369)にラッチされたPoolRCWPtrフィールドが無効であることと、PCWから連鎖されたプールRCWがないことを意味する。Nレジスタ(390)がセットされているか、もしくはCレジスタ(370)がクリアされていれば、受信シーケンサ(360)はNNレジスタ(397)をセットし、処理フローはステップ(592)へと進む。ステップ(592)において、PCWがローカルメモリに書き戻される。これは、対応するバッファのないポストRCWの受信に関して以前に説明した例と同様である。ただし今回の例では、Nレジスタがすでにセットされていなければ、受信回路はPCWのNビットとPN割り込み要求ビット(271)とをセットする。これによってプールPCWの不足によるエラーが示される。ステップ(574)の説明に戻り、取得可能なプールRCWがあれば、処理フローはステップ(580)へと進む。ステップ(580)では、当該プールRCWがローカルメモリ(4)から取り出される。RCWPtrレジスタ(369)にはプールRCWのポインタが格納されている。このレジスタの出力(439)は、受信側DMAC(361)へと送られる。受信シーケンサ(360)は、プールRCWを取り出すことを受信側DMAC(361)に対して要求する。このプールRCWはバス(6)を介して到着する。ポストPCWを使用した受信の場合、次リンクバッファ(371)を使用して次のプールRCWへのリンクを一時的に保留する。プールRCWのNPoolRCWPtrフィールドとNCフィールドは、このバッファのNPtrレジスタ(372)とNCレジスタ(373)とにそれぞれラッチされる。プールRCWのSW、IM、IRの各フィールドは、SW(377)、IM(380)、IR(381)の各レジスタにそれぞれラッチされる。SWビットフィールドがセットされたプールRCWは、プールRCWの連鎖が残り少ないことを示す。受信回路がこのようなプールRCWを取り出した場合、受信回路はこの状態をソフトウェアに警告しなければならない。ステップ(581)において、SWレジスタ(377)がセットされていれば、受信シーケンサはNWレジスタ(397)をセットする。NWレジスタ(397)は後でPCWのWビットフィールドへと書き戻される。処理フローは次いでステップ(582)へと進む。ステップ(582)において、受信回路はデータプール割り当てエラーの存在を検査する。これは、対応するバッファのないポストRCWを使用した受信の前述の例と同様である。処理フローは前回の例と同じように進行するが、ステップ(589)において、プールRCWが更新される点が異なる。ステップ(591)において、MP信号(436)が再度検査される。処理フローのここまでの説明では、この信号がセットされていたことを前提にしてるので、フローはここでステップ(591)へと進む。ステップ(591)において、ローカルメモリ内のPCWが受信回路によって更新される。受信シーケンサ(360)は、受信側DMAC(361)に対して、PCWPtrレジスタ(368)によって指されたPCWの書き込みを要求する。NPtrレジスタ(372)とNCレジスタ(373)の値は、バス(6)を介してPCWのPoolRCWPtrフィールドとCフィールドとに書き込まれる。PCW書き込み状態バッファ(396)のNN(397)、NW(398)、NO(399)、NL(400)、NSeq(401)の各レジスタの値と、NHeadPtrレジスタ(413)の値は、PCWのN、W、O、L、Seq、HeadPtrの各フィールドへとそれぞれ書き込まれる。PCW書き込み動作が完了すると、処理フローはステップ(593)へと至る。このステップは、対応するバッファのないポストRCWを使用した前述の受信の例ですでに説明した。次に処理フローはステップ(594)へと進む。これで上記の受信開始局面が完了する。
【0091】
ステップ(594)へと至る処理のさまざまな変形例をこれまで説明した。処理フローは次に図20のステップ(532)へと戻る。ステップ(532)において、受信シーケンサはRSビット(263)をクリアする。ステップ(533)において、受信シーケンサは、プールRCWの不足によるエラーが発生したか否かを再度検査する。MP信号(436)がアサートされていて、Nレジスタ(390)がセットされているかもしくはCレジスタ(370)がクリアされていれば、プールRCWの不足によるエラーが発生したことを意味する。この場合、処理フローは最初のステップ(521)へと戻り、ネットワーク入力ポート(362)は次のメッセージヘッダの受信開始を待つ。ステップ(533)でエラーが検出されなければ、RCWPtrレジスタ(369)の値は、有効なポストRCWもしくは有効なプールRCWのいずれかを示す。処理フローは次にステップ(534)へと進む。ステップ(534)において、データがバッファに書き込まれるとともに、最終状態がポストRCWもしくはプールRCWへと書き込まれる。実際にはこのステップはさらに複雑なフローであって、ステップ(600)から始まるこのフローを図26に示す。ステップ(601)において、受信シーケンサはEレジスタ(387)を検査する。Eレジスタ(387)がクリアされていれば、DataPtrレジスタ(407)は有効であって、このレジスタはローカルメモリ(4)内のバッファを指すアドレスポインタを含む。このアドレスポインタで示されたバッファは、DataLenレジスタ(404)内のメッセージデータの長さの値を書き込むのに十分なサイズのバッファである。DataPtrレジスタ(407)の出力(441)と、DataLenレジスタ(404)の出力(440)は、受信側DMAC(361)へと送られる。ステップ(602)において、受信シーケンサ(360)は、受信側DMAC(361)に対して、ネットワーク入力ポート(362)からのメッセージデータをバス(6)を介してローカルメモリ(4)へと書き込むことを要求する。ステップ(603)において書き込み動作が完了した時点で、データCRCエラーがネットワーク入力ポート(362)によって検出されると、受信シーケンサ(360)はEレジスタ(387)とECレジスタ(388)とをセットする。これによってステップ(604)においてエラーが発生したことが示される。エラーの有無にかかわらず、処理フローはステップ(605)へと進み、このステップで受信の完了局面が開始される。
【0092】
ソフトウェアは、特定の受信要求の処理が完了した時点で、命令処理装置への割り込み要求を発行するか否かを制御できる。割り込み要求を発行する場合、ソフトウェアは対応するポストRCWもしくはプールRCWのIRビットをセットする。このIRビットは受信回路によって読まれる。IRビットがセットされていれば、当該受信要求の完了後、割り込み要求が発行される。ソフトウェア側では、受信要求の処理が完了するまで割り込み要求が必要かどうかわからないことが多い。たとえば多重タスクのソフトウェア環境において、ある受信要求の完了を待っているタスクは別な作業を実行できるが、メッセージの処理が終るまでソフトウェアのタスクが実行すべき作業がなければ、このタスクはスリープ状態に入る必要がある。あるタスクがスリープ状態に入れば、他のタスクが命令処理装置の処理能力を利用して別な作業を実行できる。スリープ状態に入る前に、当該タスクはポストRCWまたはプールRCWのIRビットをセットする。これによって、受信要求の処理が完了すると、当該タスクはスリープ状態を離脱して作業を続行できる。この場合、IRビットは、受信処理が完了するまでの任意の時点でソフトウェアによって動的にセットできる。これは、受信回路が、受信処理の終了後、IRビットの状態を判定するためにポストRCWもしくはプールRCWを再度読まなければならないことを意味する。残念ながら、受信回路による再度の読み出し要求には時間がかかるため、受信の実際の終了時間を遅らせる可能性がある。このため本発明では、各ポストRCWおよびプールRCWに特別なフィールド(IMビットフィールド)を設けている。このフィールドは、再度の読み出し要求が不用の場合にこれを避けるために使用される。IMビットは、IRフィールドに関する動作状態を制御するビットである。IMビットがソフトウェアによってセットされると、再度の読み出しは実行されず、ポストRCWもしくはプールRCWに対する最初の読み出し要求で得られたIRビットが使用される。この場合、ソフトウェアはIRビットの状態を動的に変更しない。IMビットがソフトウェアによってクリアされると、受信処理の終了時にIRフィールドの値が再度取り出される。IRフィールドの変更を受信回路に知らせるか否かをソフトウェア側で検査できるようにするため、受信回路はRFビット(264)を備えている。このビットは、バス(6)を介してソフトウェアによってアクセスできる。ポストRCWとプールRCWはそれぞれ、受信回路の読んだIRビットの条件を反映するIビットフィールドを有する。RFビット(264)は、IRビットを再度取り出すための再度読み出し要求が発行される前に、受信回路によってセットされる。IビットがポストRCWもしくはプールRCWに最終的に書き込まれたのち、RFビット(264)はクリアされる。ソフトウェアは、いずれかのポストRCWもしくはプールRCWのIRビットをセットしたのち、RFビット(264)をポーリングして、このビット(264)がクリアされるまで待つ必要がある。RFビット(264)がやがてクリアされるか、もしくは該ビットがすでにクリアされている場合、次の2種類の状態のうちいずれかが該当する。第1の状態は、受信要求の処理がまだ完了していない状態であって、受信動作に対応するポストRCWもしくはプールRCWが更新されていない状態である。この場合、ソフトウェアによるIRビットの変更がのちほど受信回路に通知される。第2の状態は、受信要求の処理が完了した状態であって、受信動作に対応するポストRCWもしくはプールRCWは最終的に更新されている状態である。この場合、Iビットフィールドは、受信回路から見たIRビットの状態を反映している。
【0093】
ステップ(605)において、受信シーケンサ(360)はRF信号(428)をアサートする。この信号はRFビット(264)をセットする。ステップ(606)において、IMレジスタ(380)が検査される。このレジスタは、ポストRCWもしくはプールRCWの最初の読み出しでラッチされたIMフィールドの値を保持している。IMレジスタ(380)がクリアされていれば、受信シーケンサ(360)は、受信側DMAC(361)に対して、ポストRCWもしくはプールRCWを再度取り出すことを要求する。IRビット(385)はIRレジスタ(381)に再度ラッチされる。次にステップ(608)において、受信シーケンサは、Fビット(385)をセットし、Iビット(386)をIRレジスタ(381)の内容にセットする。ステップ(609)において、受信シーケンサ(360)は、受信側DMAC(361)に対して、S(383)、B(384)、F(385)、I(386)、E(387)、EC(388)の各レジスタの内容を、ポストRCWもしくはプールRCWのS、B、F、I、E、ECの各フィールドへとそれぞれ書き込むことを要求する。ステップ(610)において、受信シーケンサ(360)はRCWIRQ信号(422)をアサートする。3個のANDゲート(425、424、423)が、RCWIRQ信号(422)と、I(400)、E(398)、R(403)の各レジスタからの出力との論理積をそれぞれとる。これらゲートの出力信号は、RR(270)、RE(269)、RI(268)の各割り込み要求ビットをそれぞれセットする。このため、受信処理の終了時に、受信回路がRCWのRビット、Eビット、Iビットのうちいずれかをセットすると、対応する割り込み要求ビットがセットされる。ステップ(611)において、受信回路はRF信号(428)のアサートを解除して、RFビット(264)をクリアする。ステップ(612)において、処理フローは図20の最初のステップ(521)へと戻る。ステップ(621)において、入力ポートは次のメッセージヘッダの受信開始を待つ。
【0094】
以下では、通信ソフトウェアがシステムのノード間においてメッセージをいかに転送するかについて、例を挙げて説明する。ここでは1個のノードのみを説明するが、この説明はシステムの他のノードも同様に該当する。
【0095】
ソフトウェアは最初に、ローカルメモリ内に必要なデータ構造を形成しなければならない。ソフトウェアはまず、無効なHTEだけから構成されるハッシュテーブルをローカルメモリ内に生成する。各ノードは、アプリケーションソフトウェアの複数のタスクを実行できる。異なるタスクとの通信を区別するため、ここでは上記のComm(コミュニケータ)フィールドを2分割して、タスク識別フィールドと、コミュニケータ識別フィールドとを形成する。アプリケーションソフトウェアの各タスクをノードで実行するためには、各アプリケーションタスクに使用される通信コンテキストを識別するためのコミュニケータを表わす一連のコミュニケータ値を割り当てる必要がある。アプリケーションソフトウェアの各タスクに対しては、ソフトウェアは、データプール1個と、空きプールRCWCW1個を生成しなければならない。特に限定されないが、アプリケーションソフトウェアの各タスクが、別個のPCWと、別個のデータプールと、別個のプールPCWの連鎖とをそれぞれ使用することが望ましい。理由は、こうすればデータのオーバーフローエラーやプールPCW不足エラーが、エラーを生じたアプリケーションタスク1個のみに限定されるからである。通信ソフトウェアは次に、送信元無指定と、タグ無指定と、当該アプリケーションタスクに割り当てられたコミュニケータ値とに対応する受信指定を有する有効なHTEを生成することによって、ハッシュテーブルにPCWをポストする。PCWに対応するHTE内のTime(時間)値は最大値にセットしておく。この値は、将来における受信要求、すなわち今後発行される受信要求に対応する値である。PCWは、アプリケーションソフトウェアのタスクに割り当てられた各コミュニケータ値につき、別個のHTEを使用して同一の方法で複数回ポストする。PCWのこれらのポスト受信要求は、アプリケーションソフトウェアによって発行された保留状態の受信要求のうちのいずれにも一致しないメッセージに対するデフォルト受信要求として使用される。
【0096】
メモリ構造の初期化後の任意の時点で、ノード上で実行されるアプリケーションソフトウェアは、通信ライブラリソフトウェアにメッセージを送信するための要求を発行できる。ライブラリソフトウェアは、この要求を、送信回路が実行する送信のためのキューに登録する。メッセージ送信要求をキューに登録するためには、通信ライブラリソフトウェアは、すでに説明したTCWを生成する。このTCWには、送信すべきデータのコミュニケータ(Comm)値と、タグ(Tag)値と、バッファアドレスとが格納される。次にライブラリソフトウェアは、TCWのSビット(132)を検査して、先行する送信対象メッセージに対応するTCWが送信回路によって開始されたか否かを調べる。Sビット(132)がセットされていれば、ソフトウェアは現在のTCWのアドレスを送信回路のNTCWPtrレジスタ(331)にセットするとともに、NCビット(333)をセットする。先行するTCWのSビットがクリアされていれば、ソフトウェアはNIA(ネットワークインタフェースアダプタ)のTHビット(258)をセットする。これによって送信回路が別なTCWを開始しないことが保証される。ソフトウェアは次に、TSビット(261)のポーリングを行なって、このビットがクリアされるまで待つ。TSビット(261)がクリアされると、送信回路が別なTCWを開始しないことが保証される。ソフトウェアは再び先行するTCWのSビットを検査する。Sビットがクリアされていれば、ソフトウェアは現在のTCWを指すポインタをNTCWPtrフィールド(121)へと書き込むとともに、先行するTCWのNCビット(122)をセットして、THビット(333)をクリアする。先行するTCWのSビットがこの時点でセットされていれば、ソフトウェアが先行するTCWに現在のTCWを連鎖するにはすでに遅すぎることを意味する。この場合、ソフトウェアは、現在のTCWのアドレスを送信回路のNTCWPtrレジスタ(331)にセットするとともに、NCビット(333)をセットしなければならない。ソフトウェアはこのようにして、送信回路がメッセージの送信を完了するまで待たずに、任意の個数のメッセージ送信要求をキューに登録することができる。ソフトウェアが、メッセージの送信が終るまでスリープ状態に入り、送信完了時にスリープ状態から離脱したい場合には、ソフトウェアは任意の時点でTCWのIRビットをセットする。こうすれば、送信動作の終了時に処理装置割り込み要求が発行される。送信動作が完了したか否かは、ソフトウェアが対応するTCWのFビット(132)の状態を検査することによって容易に調べることができる。
【0097】
メモリ構造の初期化後の任意の時点で、ノード上で実行されるアプリケーションソフトウェアは、通信ライブラリソフトウェアに対して受信要求を発行することができる。ライブラリソフトウェアは、受信回路が使用したプールRCWの連鎖を最初に検索する。これらのプールRCWは、各プールRCWのSビット(244)によって容易に識別できる。各Sビットは、対応するPCWが使用された場合にはセットされている。これらのプールRCWは、最も古いものから検索しなければならない。これはMPIのメッセージの順序要件を犯さないためである。当該受信要求に一致するSNNフィールドと、コミュニケータフィールドと、タグフィールドとを含むプールRCWがソフトウェアによって検出されると、この要求は満たされる。次にソフトウェアは、プールRCWのFビット(245)がセットされるのを待って受信の完了を確認する。ソフトウェアは、DataPtrフィールド(237)によって示されたデータをアプリケーションのバッファに複写してもよい。メッセージがプールRCWの連鎖内で検出されない場合、受信側ではポストRCWを生成しなければならない。このポストRCWには、アプリケーション空間内のユーザバッファの指定と、PCWの有効なポインタとが格納されている必要がある。ポストRCWのBEビット(174)はクリアされていなければならない。理由は、当該ポストRCWは当初仮にポストされるだけであって、後にバッファがイネーブルされるからである。次にソフトウェアは、受信指定のハッシュ値を計算して、ハッシュテーブル内で該当するHTEを検索する。HTEが検出されない場合、ソフトウェアがHTEを生成しなければならない。このため、受信側では最初にRHビット(259)をセットしたのち、RSビット(263)がクリアされるまでこのビット(263)のポーリングを実行する。これによって、ソフトウェアがハッシュテーブルを変更している間に、受信回路がこのテーブルの検索を開始しないことが保証される。次にソフトウェアは、HTEをハッシュテーブルへと書き込み、タイムスタンプとポインタをHTE内のポストRCWへと格納したのち、RHビット(259)をクリアする。HTEが検出されても連鎖としてこれに何も付加されていなければ、ソフトウェアはRHビット(259)をまずセットしたのち、RSビット(263)がクリアされるまでこのビット(263)のポーリングを行なう。その後ソフトウェアは、ポストRCWをポストRCWの連鎖の最後に挿入するが、このポストRCWはすべてのポストPCWに先行する必要がある。この動作をソフトウェアが行なう場合、連鎖内の最後のポストRCWのNPtr、NC、NP、NTimeの各フィールドを、ポストすべきRCWの対応するフィールドへとそれぞれ複写するとともに、先行するRCWのNC、NP、NPtr、NTimeの各フィールドを、現在の受信要求のポストRCWのタイムスタンプとポインタとに対応するようにセットする。ソフトウェアは次に、RHビット(259)をクリアして、受信回路の動作を再度イネーブルする。次いでソフトウェアは、前回の検査以降に使用されたすべてのプールRCWのなかから当該受信要求に一致するメッセージを検索する。このメッセージが受信されていなければ、ソフトウェアはRCWのBEビット(174)をセットしてバッファをイネーブルする。次にソフトウェアはRSビット(263)のポーリングを行ない、このビットがクリアされるまでポーリングを続ける。RSビット(263)がクリアされると、ソフトウェアはRCWのSビット(207)とBビット(208)とを検査して、要求されたメッセージの受信開始前にバッファのイネーブルが成功したかどうかを調べる。ポストRCWを使用したメッセージの受信開始後にバッファがイネーブルされていれば、ライブラリソフトウェアによってデータをアプリケーションバッファへと複写しなければならない。バッファがイネーブルされる前にプールRCWを使用してメッセージが受信されていれば、仮にポストしたRCWのポストの解除を行なう。ソフトウェアが仮ポストRCWのポストを解除するには、前述のように、ソフトウェアは最初にRHビット(259)をセットしたのち、RSビット(263)のポーリングを行ない、このビット(263)がクリアされるまでポーリングを続ける。RSビット(263)がクリアされると、ソフトウェアは、HTEもしくはポストRCWの連鎖からRCWを外す。要求されたメッセージに加えて、仮ポストRCWを使用して別なメッセージが受信されると、連鎖から外された仮ポストRCWは使用済みのプールRCWとして扱われる。対応するバッファのない使用済みのポストRCWと、使用済みのプールRCWはそれぞれSeqフィールドを有する。このSeqフィールドは、PCWのSeqフィールドから複写されたカウント値から得られる。このカウント値は、PCWが受信回路によって更新される度に、受信回路によって増分される。このため、Seqフィールドを使用すると、プールRCWと仮ポストRCWとに受信されたメッセージの相対順序を決定できる。ポストの解除が間に合わなかった使用済みの仮ポストRCWは、使用済みプールRCWの連鎖のなかで、メッセージの受信順序に対応する場所に挿入する。この場合、受信回路の動作を保留にする必要がないことが注目すべき点である。理由は、これらのプールRCWがすでに使用されているためである。任意のアプリケーションタスクを、スリープ状態に入れたのち、受信要求の完了時にスリープ状態から離脱させたい場合、ソフトウェアは、任意の時点でプールRCWもしくはポストRCWのIRビットをセットすることによって、対応する受信動作の完了時に処理装置割り込み請求を発行することができる。受信動作が完了したか否かは、対応するポストRCWの状態か、もしくは対応するポストRCWのFビットのいずれかをソフトウェアが検査することによって容易に調べることができる。
【0098】
上記の実施例の多数の変形を本発明を使用して実施することができる。以下に例を示す。
【0099】
送信回路がノード番号レジスタからSNNヘッダフィールドを取り出す代りに、SNNフィールドをTCWに付加することによって、メッセージヘッダのSNN(送信元ノード番号)をメッセージごとに命令処理装置によって指定してもよい。このようなシステムは、ノード1個につき複数のアプリケーション処理が実行される場合に有効である。この場合、SNNを使用してメッセージの送信元処理を識別してもよい。
【0100】
メッセージヘッダフィールドのうちいずれかを不用とするシステムでは、これらの不用なフィールドを省略してもよい。たとえば、単一の通信コンテキストのみを使用するシステムにおいてはCommフィールドを省略できる。また無指定の使用を必要としないアプリケーションを実行するシステムでは、検索アルゴリズムを簡略化して、ハッシュテーブル内で該当するHTE1個のみを検索すればよい。
【0101】
上記の実施例では、ハッシュテーブルを、到着するメッセージとポスト受信要求との照合の手段として使用している。これに代えて、ポスト受信要求を保持するための連想メモリを使用してもよい。このような連想メモリには、メッセージをメッセージヘッダから識別するための識別フィールドを設けて、メッセージに対応する受信要求をメモリから返送する。こうした実施例も本発明の範囲から逸脱するものではない。
【0102】
メッセージを受信要求に照合する際に厳密な順序要件を必要としないソフトウェアを使用するシステムでは、前述の実施例で使用したタイムスタンプフィールドや時間比較器を使用しなくてよい。このような変形例も本発明の範囲から逸脱するものではない。
【0103】
また本発明の実施例では、メッセージプールの設置を必ずしも必要としない。受信側のソフトウェアにおいて、受信すべきメッセージが常にあらかじめわかっていれば、受信したメッセージをメッセージプールへと格納する必要はない。このような実施例も本発明の範囲から逸脱しない。
【0104】
【発明の効果】
本発明によれば、ポスト受信要求検索機構をハードウェアで実現することにより、ソフトウェアのオーバヘッドを減らすことによってメッセージの待ち時間を大幅に短縮することができるとともに、MPI(メッセージ通信インタフェース)規格に準じたメッセージ通信ライブラリを簡単に実現することができる。
【図面の簡単な説明】
【図1】メッセージ通信ネットワークに接続された本発明のノードのブロック図である。
【図2】メッセージ通信ネットワークに接続された多重ノードシステムのブロック図である。
【図3】従来のシステムを示すブロック図である。
【図4】本発明によって送受信されるメッセージの形式を示す図である。
【図5】メッセージの送信を要求するために本発明で使用する送信制御語(TCW)の形式を示す図である。
【図6】保留状態の受信要求をポストするために本発明で使用するハッシュテーブルエントリ(HTE)の形式を示す図である。
【図7】データプールとプールRCWの連鎖を管理するために本発明で使用するプール制御語(PCW)の形式を示す図である。
【図8】メッセージの受信を要求するために本発明で使用するポスト受信制御語(ポストRCW)の形式を示す図である。
【図9】受信回路によって更新された後のポストRCWの形式を示す図である。
【図10】保留状態のポストRCWのいずれにも一致しないメッセージを受信するために本発明で使用するプール受信制御語(プールRCW)の形式を示す図である。
【図11】保留状態のポストRCWのいずれにも一致しないメッセージの受信時に受信回路によって更新されたプールRCWの形式を示す図である。
【図12】データプールの形式を示す図である。
【図13】ネットワークインタフェースアダプタ(NIA)の回路図である。
【図14】NIA保留制御レジスタの形式を示す図である。
【図15】NIA動作状態レジスタの形式を示す図である。
【図16】NIA割り込み要求状態レジスタの形式を示す図である。
【図17】送信回路の回路図である。
【図18】送信回路の動作を表わすフローチャートである。
【図19】受信回路の回路図である。
【図20】受信回路の動作の全体を表わすフローチャートである。
【図21】ハッシュテーブル検索制御装置の回路図である。
【図22】ハッシュテーブル検索制御装置の動作を表わすフローチャートである。
【図23】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図24】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図25】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図26】メッセージデータの受信とメッセージの受信の終了とに関する受信回路の動作を表わすフローチャートである。
【符号の説明】
1、50、51、52、901…ノード、2、902…ネットワーク、3、
903…命令処理装置、4、904…ローカルメモリ、
5、905…NIA、6、906…バス、8、908、300…送信回路、
10、910、301…受信回路、12、912…メッセージ、919…シーケンサ、920…ポストレジスタ
320…送信シーケンサ、321…送信DMAC
360…受信シーケンサ、363…ハッシュテーブル検索制御装置、
【発明の属する技術分野】
本発明は、データ転送ネットワークを介してデータをメッセージの形式で転送するコンピュータシステムに関する。
【0002】
【従来の技術】
並列コンピュータシステムのうち、特に分散型記憶装置を有するシステムに使用する目的で記述されたソフトウェアの多くのアプリケーションでは、アプリケーションソフトウェアと通信ネットワークのハードウェアとの間のインタフェースとしてメッセージ通信ソフトウェアライブラリを使用する。こうしたライブラリの一例として、MPI(Message‐Passing Interface Standard; メッセージ通信インタフェース規格)がある。
【0003】
MPIの場合、ライブラリはソフトウェアのルーチンとして作成される。これらのルーチンは、アプリケーションソフトウェアによって呼び出され、並列コンピュータの各ノードにおける命令処理装置によって実行される。命令処理装置は、ノードの送信回路と受信回路とを制御する。これらの回路は、ネットワークを介してシステムの他のノードへと接続されている。
【0004】
MPI規格に準ずるライブラリにおいては、基本的に2種類のソフトウェアルーチンが存在する。一方のルーチンは、送信要求ルーチンであって、システムの他のノード宛てにメッセージの送信を要求するために使用される。他方のルーチンは、受信要求ルーチンであって、メッセージの受信を要求するために使用される。
【0005】
アプリケーションが送信要求ルーチンを呼び出してメッセージを送信する場合、アプリケーションは複数のパラメータを指定する。これらのパラメータとしては、メッセージの宛先ノード番号(各ノードは一意な識別番号を有する)、タグ値(アプリケーションがメッセージの種類を識別するために使用する値)、コミュニケータ値(送信における通信のコンテキストを指定するために使用され、メッセージは同一の通信コンテキストにおいてのみ受信可能である)、送信データのローカルメモリ内のアドレス、送信データの量などがある。
【0006】
アプリケーションが受信要求ルーチンを呼び出す場合、アプリケーションは、受信したいメッセージと、そのメッセージのローカルメモリ内の書込アドレスとを指定する。かかる指定に関するパラメータは、受信要求ルーチンに渡される。これらのパラメータとしては、タグ指定(特定のタグもしくは任意の無指定(Wildcard)タグ値を指定する)、送信元指定(特定の送信元もしくは任意の無指定(Wildcard)送信元値を指定する)、コミュニケータ値(受信時の通信のコンテキストを指定するために使用され、受信要求は同一の通信コンテキストで送信されたメッセージにのみ対応する)、宛先バッファのローカルメモリ内のアドレス、宛先バッファの大きさなどがある。
【0007】
受信ルーチンを実行すると、メッセージがすでに当該ノード宛てに送信済みであれば、受信メッセージ指定に対応する該メッセージが直ちにアプリケーションへと返送される。要求が直ちに実行できない場合、該要求に関する情報が記録され、かかる情報はポスト受信要求と呼ばれる。ついでこのようなメッセージの送信要求が発行されると、受信ルーチンは、当該メッセージを完成してアプリケーションソフトウェアへと返送する。またMPI規格は、複数のメッセージが互いを追い越さないことを定めている。すなわち複数の保留状態の受信要求が一メッセージに対応する場合、保留時間のもっとも長い受信要求がかかるメッセージによって満たされる。
【0008】
あるノードのローカルメモリから他のノードのローカルメモリへとメッセージを転送するためのハードウェアの従来技術が特開平6ー324998に開示されている。この従来技術の発明の一実施例を図3に示す。複数のノードがメッセージ転送ネットワーク(902)に接続されるが、ここでは説明を簡単にするために1個のノード(901)のみを示す。各ノードは、命令処理装置IP(903)と、ローカルメモリ(904)と、ネットワークインタフェースアダプタNIA(905)とを含む。これらの構成はすべてバス(906)によって接続される。ネットワークインタフェースアダプタNIA(905)は、送信回路(908)と受信回路(910)とを含む。送信回路(908)と受信回路(910)は、それぞれ送信ネットワーク接続機構(909)と受信ネットワーク接続機構(911)とを介して、ネットワーク(902)へと接続される。ネットワークメッセージ(912)は、メッセージデータ(917)とメッセージヘッダとから構成される。メッセージヘッダは、DNNフィールド(913)とタグフィールド(916)とを有し、DNNフィールド(913)はどのノードが当該メッセージを受信するかを指定する。受信回路内には、入力ポート(918)と、受信シーケンサ(919)と、直接メモリアクセス制御装置DMAC(921)と、受信ポストレジスタ(920)とが含まれる。メッセージが入力ポート(918)に到着すると、該メッセージのタグフィールド(916)とポストレジスタ(920)に格納されたタグフィールドとが照合される。両フィールドが一致すれば、受信シーケンサ(919)の指令によって、直接メモリアクセス制御装置DMAC(921)はユーザ受信バッファ(933)を使用してメッセージデータ(917)を受信する。ユーザ受信バッファ(933)を指すアドレスポインタ(932)もまた、ポストレジスタ(920)内にある。ユーザ受信バッファ(933)は、一例としてローカルメモリ(904)のユーザのアプリケーション空間に置かれる。メッセージのタグフィールド(916)とポストレジスタ(920)のタグフィールドとが一致しない場合、当該メッセージはローカルメモリのメッセージバッファ(941)で受信・格納される。
【0009】
上記従来技術の発明では、各メッセージにつき1個のみのポスト受信要求をサポートする受信装置を記述している。また上記の従来技術では、受信ポストレジスタと一致しないメッセージを記録するメッセージバッファも示している。このメッセージバッファは、メッセージプールとみなしてよい。従来技術では、メッセージプールを1個のみサポートしている。
【0010】
上記従来技術のハードウェアで受信ポストレジスタを使用すれば、一時に1個ずつのメッセージの受信を要求できる。MPIも含めてほとんどのメッセージ通信ライブラリでは、多数の同時に有効な受信要求と無指定(Wildcard)受信要求とをサポートしている。
【0011】
ここで、上記従来技術の発明で示された単一受信ポストレジスタを利用したMPIメッセージ通信ライブラリを作成したとする。この場合、ライブラリはこのレジスタを使用して1個の保留受信要求をポストできるのみであり、しかもこれはかかる要求が無指定(Wildcard)を使用しない場合にのみ限られる。また保留時間のもっとも長い要求以外の要求をポストしたい場合、MPIのメッセージの順番付けの規則を犯さないという制約上、かかる要求のポストは、該要求の保留時間より短い保留時間を有する要求がすべて当該メッセージに一致しない場合にのみ可能である。これは、受信時の矛盾を検査するためのソフトウェアのオーバヘッドを増加させる。受信ポストレジスタを使用してメッセージを受信したのち、受信回路は命令処理装置に割り込む必要がある。これは、受信ポストレジスタを使用して、命令処理装置に別な要求をポストさせるためである。結果として、命令処理装置の割り込みが頻発し、ソフトウェアのオーバヘッドが増大するため、命令処理装置の有効処理能力を低下させてしまう。一方、ソフトウェアの発行した受信要求の順序と異なる順序で受信回路が受信したメッセージは、プールに書き込まれる。プールに受信・格納されたこれらのメッセージもまた、命令処理装置によって宛先バッファへと複写されなければならないため、さらに性能が低下することになる。
【0012】
従来技術のハードウェアを使用したMPIライブラリを実施する別な方法としては、メッセージを実際に転送する前にノード間で制御メッセージを交換するという方法が考えられる。これらの制御メッセージを使用すれば、実際にメッセージが転送される前に受信ポストレジスタを形成することができるため、メッセージデータを宛先バッファに一括して複写する必要がなくなる。しかしながら、この解決法には性能上重大な問題がある。第一に、制御メッセージを転送するためのオーバヘッドによって、メッセージ転送の待ち時間が長くなる。第二に、制御メッセージは、その性質上非同期であるため、これらのメッセージを処理するためには命令処理装置に頻繁に割り込む必要があり、結果的に命令処理装置の有効処理能力が低下する。
【0013】
さらに、ノード上で動作する通信タスク以外のソフトウェアタスクと、通信タスクとを、メッセージの待機中にスリープ状態に入れたいとする。この場合、受信回路を設定して行なう命令処理装置の割り込みは、特定の一メッセージに対してのみ可能である。メッセージプールへとメッセージを受信・格納するための割り込みを許可する必要がある。割り込み処理のソフトウェアルーチンは、一メッセージが受信回路によって受信されると、その都度、上記の特定のメッセージが受信されたか否かを調べるために、メッセージプールを検査しなければならない。
【0014】
また、ある単一のノードが使用する通信のコンテキストが複数存在する場合、これら複数の通信コンテキストに属するメッセージを対象として、別個のメッセージプールをそれぞれ割り当てることは不可能である。単一の通信コンテキストにおいて多数のメッセージが送信された場合、すべての通信処理用のプール空間を使い切ってしまう可能性がある。
【0015】
【発明が解決しようとする課題】
本発明の第1の課題は、同時に保留状態となりうる複数の受信要求をいかにポストするかという問題を解決するとともに、中間的な受信バッファプールからローカルメモリ内の最終宛先バッファへのメッセージデータの不用な複写をなくすことにある。ローカルメモリ内の最終宛先バッファは、メッセージが実際に受信される前に該最終宛先バッファのアドレスが判明している場合、受信要求によって指定される。ローカルメモリ内の領域間におけるデータの複写は、命令処理装置の処理時間の浪費であり、メッセージ転送の待ち時間を増加させる。
【0016】
本発明の第2の課題は、受信すべきメッセージの指定方法を拡大することによって、無指定(Wildcard)値を含む複数のパラメータをメッセージに持たせることにある。これによって、何も指定しない受信要求をサポートするメッセージ通信ライブラリを簡単に実現できるとともに、メッセージデータの不用な複写をなくすことができる。
【0017】
本発明の第3の課題は、受信要求をその発行順に、到着するメッセージに対応させることにある。これによって、メッセージと受信要求との対応を、規定の順序で行なうことを定めたMPIのようなメッセージ通信ライブラリを簡単に実現することができる。
【0018】
本発明の第4の課題は、複数の通信コンテキストに異なるメッセージプールをいかにしてか割り当てることによって、一通信コンテキストにおけるプールのオーバーフローが、他の通信コンテキストのメッセージプールへの受信に影響を及ぼさないようにするかという問題を解決することにある。
【0019】
本発明の第5の課題は、命令処理装置が、特定のメッセージの受信、特定の種類のメッセージの受信、もしくは特定の送信元からのメッセージの受信を待つ間に、命令処理装置の不用な割り込みが発生するという問題を解決することにある。不用な割り込みは、命令処理装置の有効処理性能を低下させる。
【0020】
【課題を解決するための手段】
本発明のデータ転送ネットワークを介したメッセージ通信において、メッセージヘッダは、送信元フィールドと、宛先フィールドと、タグフィールドと、コミュニケータフィールドとを含む。送信元フィールドは、送信ノードを一意に識別する。宛先フィールド、タグフィールド、ならびにコミュニケータフィールドは、送信回路に対して発行されるメッセージ送信要求によって指定される。メッセージは、宛先フィールドによって一意に指定される目標ノードへとネットワークを介して送られる。受信要求が、受信すべきメッセージの送信元フィールド、タグフィールド、コミュニケータフィールドを指定してもよい。送信元フィールドとタグフィールドは、無指定としてもよい。受信要求にはタイムスタンプが記され、それぞれローカルメモリのハッシュテーブルにポストされる。メッセージが到着すると、このハッシュテーブルは受信回路によって検索される。この検索は、経過時間がもっとも長くて有効な受信要求指定、送信元無指定もしくはタグ無指定に対して行なわれ、送信元フィールドもしくはタグフィールドに関してメッセージと一致した指定が確定される。一致するポスト受信要求が検出されると、当該受信要求が実行される。受信要求は、一致するメッセージデータを受信回路が直接書き込むバッファを指定することもできる。この場合、当該受信要求は処理済みとされ、ハッシュテーブルから削除される。もしくは、受信要求は、メッセージをその内部に受信する特定のメッセージプールを指定してもよい。この場合、受信要求は、実行後も有効な持続性受信要求として指定できる。一例として、ソフトウェアは、各コミュニケータ値につき、持続性であって、遠い未来を指すタイムスタンプ値を持ち、無指定送信元フィールドおよび無指定タグフィールドを持つ受信要求をポストする。これらの要求は、他のポスト受信要求のいずれにも一致しないメッセージに対するデフォルト受信要求として作用する。この場合、アプリケーションソフトウェアがメッセージ到着後に発行した特定の受信要求は、ソフトウェアがメッセージプール内のメッセージと照合してもよい。一致したメッセージはアプリケーションへと複写される。
【0021】
不用な割り込み要求は、次のようにして減少させる。各受信要求に対応するローカルメモリ内の制御データ構造に、割り込み要求ビットフィールドを設ける。このビットフィールドを受信回路に検査させる手段を設け、これによって命令処理装置に割り込むか否かを決定する。
【0022】
ハードウェア上でポスト受信検索機構を実現する。該機構は、送信すべき制御メッセージの数量を減少させ、割り込み要求に関連した命令処理オーバヘッドを減らすことによって、メッセージの待ち時間を相当程度短縮する。また該機構は、メッセージの到着前に受信要求が発行された場合、データの一括複写動作を不用とする。
【0023】
各ノードにおけるライブラリソフトウェアは、最初にポスト受信ハッシュテーブル構造をローカルメモリに形成するとともに、持続性であって、遠い未来を指すタイムスタンプ値を持ち、無指定送信元フィールドおよび無指定タグフィールドを持つ受信要求を、各通信コンテキストにおいてポストする。これらのデフォルト受信要求は、他のいずれのポスト受信要求にも一致しないメッセージを、メッセージプールへと受信するために使用される。
【0024】
いずれかのノードで実行されるアプリケーションソフトウェアは、任意の時点で、通信ライブラリソフトウェアに対して送信要求を発行できる。この場合、ライブラリは、該送信要求と、該要求の通信コンテキストを識別するコミュニケータ値とを、送信回路へと転送する。送信回路はメッセージヘッダを作成する。このメッセージヘッダには、送信要求に基づいた宛先フィールドとタグフィールド、送信ノードを一意に識別する送信元フィールド、ならびにコミュニケータフィールドが含まれる。ついで送信回路は、ヘッダにメッセージデータを付加して、完成したメッセージをネットワークへと送出する。
【0025】
メッセージは、メッセージヘッダの宛先フィールドによって一意に指定された目標ノードへとネットワークを介して転送される。このネットワークは固定経路アルゴリズムを使用していることに注目されたい。このアルゴリズムによれば、一ノードから送出されたメッセージは、すべて同一の経路を通って他の一ノードへと送信される。これによってメッセージ間の追い越しを防いでいる。
【0026】
いずれかのノードで実行されるアプリケーションソフトウェアは、任意の時点で、通信ライブラリソフトウェアに対して受信要求を発行できる。この場合、ライブラリはまず、当該通信コンテキストに対応するメッセージプールを検索して、以前に受信したメッセージのなかで該当するものを検出しようとする。該当するメッセージが検出されない場合、ライブラリは、タイムスタンプを記した受信要求をハッシュテーブルにポストする。この要求には、当該受信要求の通信コンテキストを識別するコミュニケータ値と、当該受信要求で指定されたタグフィールドと送信元フィールドの値とが含まれる。送信元フィールドとタグフィールドは、無指定としてもよい。また各受信要求には、該要求の完了時に命令処理装置の割り込みを要求する制御ビットが含まれる。この制御ビットは、受信が完了するまでの任意の時点で変更することができる。
【0027】
メッセージが到着すると、宛先ノードのポスト受信ハッシュテーブルが受信回路によって検索される。この検索は、経過時間がもっとも長くて有効な受信要求指定、送信元無指定、もしくはタグ無指定に対して行なわれ、送信元フィールドもしくはタグフィールドに関してメッセージと一致した指定が確定される。一例として、以前にポストされた受信要求がメッセージに一致しないとする。この場合、メッセージは、デフォルト受信要求を使用してメッセージプールへと受信・格納される。続いてアプリケーションソフトウェアが受信要求を発行すると、該メッセージは、メッセージプールからアプリケーションへと複写される。他の例として、一致するポスト受信要求が検出されたとする。この場合、当該受信要求は実行され、該要求によって指定された受信バッファは、受信回路によって直接書き込まれる。受信要求の割り込み要求制御ビットが、検査によってセットされていると判明した場合、命令処理装置の割り込みが発生する。
【0028】
【発明の実施の形態】
本発明の実施例を詳細に説明するに先立ち、MPIを以下で簡単に要約する。
【0029】
MPIの仕様では、アプリケーションソフトウェアプログラムとソフトウェア通信ライブラリとの間のソフトウェアインタフェースを規定する。MPIソフトウェアライブラリは、アプリケーションソフトウェアに対して、たとえばアプリケーションソフトウェアが呼び出せるソフトウェアサブルーチン一式として提供される。
【0030】
通信は、たとえば異なるノード上で実行されるソフトウェアの処理間で転送されるメッセージによって実行される。MPIライブラリソフトウェアのサブルーチンのうち、もっとも原始的なものは送信サブルーチンと受信サブルーチンである。メッセージをあるソフトウェア処理から別なソフトウェア処理へと送信するための要求を発行する場合、送信元の処理は送信サブルーチンを呼び出す。受信側の処理が、メッセージを受信するための要求を発行する場合、受信側の処理は受信サブルーチンを呼び出す必要がある。受信側処理が指定したメッセージに一致するメッセージがすでに送られている場合、受信は直ちに完了する。受信側処理が指定したメッセージに一致するメッセージがまだ送られていない場合、かかるメッセージが到着するまで該受信要求は保留状態に置かれる。
【0031】
MPI仕様によれば、MPIメッセージは、データ部に加えて「メッセージエンベロープ」を含む。かかるエンベロープは、一定数のフィールドからなり、これらのフィールドはメッセージを識別して選択的に受信するために使用される。これらフィールドには、送信元フィールド、宛先フィールド、タグフィールド、およびコミュニケータフィールドが含まれる。メッセージの送信元は、送信元の存在によって暗黙に決定される。他のフィールドは、送信動作の引数によって指定される。コミュニケータフィールドは、通信動作の通信コンテキストを指定する。各通信コンテキストは、別個な「通信領域」を規定する。メッセージは、それらが送信されたコンテキストにおいてのみ受信され、異なるコンテキストで送られたメッセージは互いに干渉することがない。
【0032】
MPI規格はまた、メッセージ間で追い越しがあってはならないことを定めている。ある送信元が、2個のメッセージを同一の宛先に対して連続して送信した場合であって、いずれのメッセージも同一の受信要求に一致する場合、最初のメッセージが保留とされると、2番目のメッセージはこの動作においては受信できない。また受信側が2個の受信要求を連続してポストした場合であって、いずれの要求も同一のメッセージに一致する場合、最初の受信要求が保留とされると、2番目の要求は当該メッセージによって満たされることがない。
【0033】
本発明の目的は、MPI仕様の定めるインタフェースと同様な、ハードウェアとソフトウェアとの間のインタフェースを有する通信システムを提供することによって、MPIに適合したソフトウェアライブラリを実施することにある。このライブラリは、ライブラリソフトウェアの待ち時間オーバヘッドと、命令処理装置割り込み要求に起因するオーバヘッドとをほぼ伴わずに、機器インタフェースを使用できるライブラリとして機能する。
【0034】
本発明の実施例を図1に示す。この実施例は、ネットワーク(2)によって接続された複数のノードからなるコンピュータシステムである。説明を簡単にするため、1個のノード(1)のみを示す。図2に、複数のノード(50、51、52)をネットワーク(2)に接続する方法を示す。この方法によって、任意の複数のノードをネットワーク(2)によって接続することができる。図1のノード(1)は、このシステムを構成するノードのうちのひとつである。他のノードはいずれも、ノード(1)と同様な構造を有する。各ノードは、システムにおいて該ノードを一意に識別するノード番号を有し、また各ノードはシステム内の各通信処理を一意に識別する。
【0035】
ノード(1)は、命令処理装置IP(3)と、ローカルメモリ(4)と、ネットワークインタフェースアダプタNIA(5)とを含む。これらの構成は、バス(6)によって当該ノード内で連係されている。命令処理装置(3)とネットワークインタフェースアダプタ(5)は、バス(6)を介してローカルメモリ(4)へのアクセスを共有する。また命令処理装置(3)は、バス(6)を介して、ネットワークインタフェースアダプタ(5)内の所定のレジスタに直接アクセスできる。ネットワークインタフェースアダプタ(5)から命令処理装置(3)へと至る割り込み要求線(7)が設けられ、これによって、ネットワークインタフェースアダプタ(5)は、命令処理装置(3)のサービスを要求することができる。
【0036】
ネットワークインタフェースアダプタ(5)は、ネットワーク(2)に送信するための送信ポート接続機構(9)を有する送信回路部(8)と、ネットワーク(2)から受信するための受信ポート接続機構(11)を有する受信回路部(10)とを含む。メッセージは送信回路(8)によって組み立てられて、ネットワークへと送出される。かかるメッセージ(12)の一例を図1に示す。メッセージ(12)は、メッセージヘッダ部と、データ部(17)とを有する。メッセージヘッダ部は、宛先ノード番号(DNN)フィールド(13)、送信元ノード番号(SNN)フィールド(14)、コミュニケータ(Comm)フィールド(15)、ならびにタグ(Tag)フィールドを含む。ネットワーク(2)は、DNNフィールド(13)を使用して、メッセージの転送先を決定する。SNNフィールド(14)は、送信元ノードに対応する一意なノード番号を含む。コミュニケータフィールド(15)は、送信元ノードのソフトウェアが割り当てた値であって、当該メッセージが所属する通信コンテキストを指定する値を含む。タグフィールド(16)の値は、複数のメッセージを区別するためにアプリケーションソフトウェアによって割り当てられる。
【0037】
ネットワーク(2)は、パケット交換ネットワークであって、各メッセージのヘッダ部に含まれるDNNフィールドに基づいて、送信回路から適当な受信回路へとメッセージを転送するネットワークである。メッセージは、メッセージ間の追い越しを禁じたMPI規格に準じて、互いを追い越すことなく転送される。
【0038】
受信回路(10)を使用して、当該ノードに対して送られたメッセージをネットワーク(2)から受信する。受信回路(10)は、入力ポート制御装置(18と)、受信シーケンサ(19)と、ハッシュテーブル検索制御装置(20)と、直接メモリアクセス制御装置DMAC(21)とを含む。これらの制御装置はバス(6)に接続され、制御/状態信号(22)によって相互に連係されている。入力ポート制御装置(18)は、受信ポート接続機構(11)を介してネットワーク(2)へと接続され、ネットワーク(2)からメッセージを受信するために使用される。直接メモリアクセス制御装置DMAC(21)は、ローカルメモリ(4)からの読み出しと該メモリへの書き込みとを、バス(6)を介して制御するために使用される。ハッシュ検索制御装置(20)は、ローカルメモリ(4)内のポスト受信ハッシュテーブル(23)を検索して、メッセージヘッダのSNNフィールドと、コミュニケータフィールドと、タグフィールドとに一致するエントリを確定するために使用される。受信シーケンサ(19)は、他の制御装置の動作を監視し、ローカルメモリ(4)内のメモリ構造における取り出しと更新とを制御するとともに、受信回路(10)が生成した割り込み要求を制御する。
【0039】
本発明の一面は、メッセージの受信に関する動作に特に関わっている。メッセージを受信するためには、ソフトウェアはローカルメモリ(4)にあらかじめ各種のメモリ構造を生成しなければならない。これらの構造は、受信回路とソフトウェアとの双方によって使用される。ポスト受信要求は、ポスト受信ハッシュテーブル(23)を使用して行なわれる。このテーブルには、ハッシュテーブルエントリ(以下ではHTEと呼ぶ)が格納される。参照番号(24)で示すHTEは、有効HTEの一例である。有効HTE(24)には、SNNフィールド(26)と、コミュニケータフィールド(27)と、タグフィールド(28)とが含まれる。SNNフィールド(26)とタグフィールド(28)は、無指定(Wildcard)値を表わす特別な値を含むように、ソフトウェアによってプログラムしてもよい。受信回路(10)がメッセージを受信すると、ハッシュテーブルが検索されて、メッセージヘッダのSNNフィールドと、コミュニケータフィールドと、タグフィールドとに一致する受信指定を有するHTEが検出される。HTE(24)はまた、受信回路(10)が、複数の有効なハッシュテーブルエントリを一致したものとして検出した場合に使用される時間フィールド(29)を有する。この場合、受信回路(10)は、時間フィールドの値がもっとも古いハッシュテーブルエントリを選択する。参照番号(24)のHTEはさらに、ポスト受信制御語(ポストRCWと称する)(31)を指すポインタ(30)を含む。ポストRCW(31)は、受信回路(10)によって取り出され、メッセージの受信先を指定する。ポストRCW(31)は、ローカルメモリ内のデータバッファ(33)を指すポインタ(32)を含む。一例として、データポインタ(33)は、受信要求を発行したアプリケーションのアプリケーション空間(34)に含まれる。受信回路(10)は、HTE(24)を更新することによって、ポストRCW(31)が使用されていることを示すとともに、メッセージヘッダをポストRCW(31)に記録し、メッセージデータをデータバッファ(33)へと書き込む。他の一例として、参照番号(25)のHTEは、プール制御語(PCWと称する)(36)を指すポインタ(35)を含む。PCW(36)は、一連の空きプール受信制御語(プールRCWと称する)を指すポインタ(37)と、データプール(41)の先頭ポインタ(39)と末尾ポインタ(40)とを保持するために使用される。複数のプールRCWは、連鎖の形式をとる。PCW(36)は、連鎖内の最初の空きプールRCW(38)を指すために保持されるポインタ(37)を含む。このプールRCW(38)は、別なプールRCW(43)を指すポインタ(42)を含む。メッセージが受信されて、一致するとして検出されたHTEがPCWを指す場合、受信回路は、該PCWを使用して、メッセージヘッダを記録するための空きプールRCWと、メッセージデータを記録するためのデータプールの空間とを割り当てる。
【0040】
ソフトウェアはたとえば、使用中の各コミュニケータ値に対して、SNN無指定(Wildcard)とタグ無指定(Wildcard)とを有する有効HTEを生成する。これらのHTEはそれぞれ、PCWを指すポインタを含む。ソフトウェアはまた、各PCWに対して、一連の空きプールRCWと一データプールとを生成する。これは、一致するポストRCWのないメッセージを、ソフトウェアが受信できるようにすることを目的としている。他のいずれの受信要求にも一致しないメッセージが受信されると、これらのメッセージはデータプールへと受信・格納される。メッセージが実際に受信されたのちに該メッセージの受信を求めて発行されたソフトウェアの要求は、データプールからアプリケーションの受信バッファへとデータを複写することによって処理される。
【0041】
送信回路と受信回路の説明を続ける前に、メッセージの形式と、メッセージの送信を制御するために使用されるデータ構造の形式と、受信要求をポストするために使用されるデータ構造の形式とについて説明する。これらのデータ構造は、ローカルメモリ(4)内に設けられる。
【0042】
図4に、本実施例で使用するメッセージ(100)の詳細な形式を示す。最初のフィールドはDNNフィールド(101)である。ネットワーク(2)は、DNNフィールド(101)を使用して、正しい宛先ノードの受信回路へとメッセージを転送する。DNNフィールド(101)は、MPIメッセージエンベロープの宛先フィールドと同じ機能を有する。SNNフィールド(102)は、受信ノードに対してメッセージ(100)の送信元を識別する。SNNフィールド(102)は、MPIメッセージエンベロープの送信元フィールドと同じ機能を有する。コミュニケータフィールド(103)の値は、メッセージの送られた通信コンテキストを識別するMPIメッセージエンベロープのコミュニケータ値と同様な意味をもつ値であるとともに、該メッセージを受信するための受信要求の通信コンテキストの値でもある。タグフィールド(104)の値は、送信要求によって指定されたMPIメッセージエンベロープのタグ値と同様な意味を持つ値である。ソフトウェアヘッダ(WSH)フィールド(105)は、送信元処理のライブラリソフトウェア用として確保されたフィールドである。遠隔割り込み要求Rビットフィールド(106)は、送信元処理のライブラリソフトウェアによって指定される制御ビットである。遠隔割り込み要求ビットR(106)がセットされると、宛先ノードの受信回路によるメッセージ(100)の受信時に、受信ノードで命令処理装置(IP)割り込み要求が発生するように指定される。データ長さ(DataLen)フィールド(107)は、メッセージ(100)のデータフィールド(109)の長さを指定する。ヘッダCRCフィールド(108)には、先行するすべてのヘッダフィールドを使用して計算されるCRCエラーチェック値が格納される。データフィールド(109)にはメッセージデータが格納される。データCRC(110)には、データフィールド(109)のみを使用して計算されるCRCエラーチェック値が格納される。いずれのフィールドをメッセージの先頭にするかをネットワークと受信回路とで決定するために、メッセージヘッダとメッセージデータの2バイト語ごとに、同期ビットフィールド(111)が付加される。メッセージヘッダの最初の2バイト語に付加された同期ビット(112)のみがセットされ、他の同期ビットフィールドはすべてクリアされる。
【0043】
メッセージを送信するための要求は、送信制御語(TCWと称する)の形式でローカルメモリに格納される。複数のTCWを連鎖すると、複数のメッセージの送信が可能になる。これらのTCWは、連鎖と同一の順序で送信回路によって処理される。図5にTCW(120)の詳細な形式を示す。次ポインタ連鎖フィールド(NTCWPtr)(121)は、次の連鎖TCWを指すアドレスポインタを含む。次TCW連鎖制御ビット(NC)(122)は、NTCWPtr(121)フィールドが有効であって、TCW連鎖内の次のTCWを指す場合にセットされる。DNNフィールド(126)、コミュニケータ(Comm)フィールド(127)、タグ(Tag)フィールド(128)、SWHフィールド(129)、Rフィールド(130)、データ長さ(DataLen)フィールド(131)は、送信すべきメッセージヘッダのそれぞれ該当するフィールドを含む。データポインタ(DataPtr)フィールド(125)は、送信すべきメッセージデータを指すポインタを含む。割り込み要求IRビットフィールド(124)がセットされると、送信動作の完了時に、送信回路が割り込み要求を発行する。IMビットフィールド(123)は、割り込み要求機能の動作を制御する。IMビット(123)をクリアすると、送信動作の完了時に、IRビット(124)が送信回路によって再度読まれる。IMビット(123)がセットされると、IRビット(124)は再度読まれることはなく、送信回路によるTCWの最初の読み込み時のIRビットの値が記憶され、該ビット値が割り込み要求を生成するか否かの決定に使用される。TCWの状態は、残りのSフィールド(132)、Fフィールド(133)、Iフィールド(134)、Eフィールド(135)ならびにECフィールド(136)から構成される。これらのフィールドの書き込みは、送信回路によって2回実行される。すなわち、送信回路がTCWを取り出した直後に1回、メッセージの送信の完了時に1回行なわれる。開始状態Sビット(132)は、TCWが最初に取り出されたのちに送信回路によってセットされる。終了状態Fビット(133)は、送信回路によるTCWの処理が終了した時点でセットされる。割り込み要求状態Iビット(134)は、Fビット(133)と同時にセットされるが、これはIRビット(124)を介して割り込み要求が出された場合にのみ行なわれる。エラー状態Eビット(135)もFビット(133)と同時にセットされるが、これは送信元によるTCWの処理中にエラーが発生した場合にのみ行なわれる。エラーコードECフィールド(136)には、Eビット(135)のセットと同時に書き込みが行なわれる。ECフィールド(136)には、ソフトウェアによってエラーを表わすと解釈されたコードが格納される。ライブラリがローカルメモリ中にTCWを生成したのち、ライブラリは次のいずれかの動作を行なう。すなわち、ライブラリは、TCWを指すポインタを、送信回路内にあるNTCWPtrレジスタ(後で説明する)へと書き込む。もしくは、送信回路による他のTCWの処理がすでに行なわれているため該レジスタが使用中である場合は、ライブラリは、TCW連鎖内の最後のTCWに当該TCWを連結する。送信要求を処理する場合、送信回路はTCWを取り出し、TCW内の状態フィールドを更新するとともに、送信要求を実行する。TCWの処理が完了すると、送信回路は、再度状態ビットを更新し、連鎖内に次のTCWがあればこれを取り出す。
【0044】
ポスト受信要求は、非持続性受信要求と持続性受信要求の2種類に大別される。非持続性受信要求は単一のメッセージを受信するための要求であり、持続性受信要求は任意の複数のメッセージを受信するための要求である。非持続性受信要求は、ポストRCWの形式でローカルメモリに格納され、要求されたメッセージが受信されるとその処理が完了する。複数のメッセージを受信するための持続性受信要求は、ポストPCWの形式でローカルメモリに格納される。持続性受信要求は、一メッセージを受信したのちも有効である。
【0045】
ネットワークの受信回路にメッセージが到着すると、受信回路はポスト受信ハッシュテーブルを検索して、一致する受信要求を検出しようとする。図6にハッシュテーブルエントリ(140)(HTEと称する)の詳細な形式を示す。ポスト受信要求のメッセージ指定は、SNNフィールド(141)と、コミュニケータ(Comm)フィールド(142)と、タグ(Tag)フィールド(143)とから構成される。SNNフィールド(141)には、メッセージの送信元ノード番号か、もしくは無指定の送信元値を表わす特別な値(全ビットがセットされている)かのいずれかが格納される。コミュニケータフィールド(142)には、受信コンテキストのコミュニケータ値が格納される。この値は、メッセージの送信コンテキストの値と同一である。受信コンテキストと送信コンテキストのコミュニケータ値は同一でなければならない。タグフィールド(143)には、メッセージのタグか、もしくは無指定のタグ値を表わす特別な値(全ビットがセットされている)かのいずれかが格納される。RCWもしくはPCWの形式の受信要求は、HTEから始まるこれらRCWもしくはPCWの連鎖を形成することによってポストされる。この場合の受信指定は、要求の指定と同一である。ポインタ(Ptr)フィールド(144)は、RCWもしくはPCWを指す連鎖アドレスポインタを含む。連鎖有効ビットC(145)は、ポインタフィールド(144)が有効であることを示す。Pビット(146)は、ポインタフィールド(144)がポストPCWを直接指している場合にセットされ、ポストRCWを指す場合にはクリアされる。時間フィールド(148)には、RCWもしくはPCWがポストされた時間(ポインタフィールド(144)によって示される)に対応するタイムスタンプ値が格納される。
【0046】
特定の受信指定を有するHTEのポスト受信ハッシュテーブル内における格納場所は、2つのステップからなる処理によって決定される。第1のステップでは、ハッシュ機能を使用して受信指定のハッシングが行なわれる。ハッシュ機能は、同一の入力パラメータに対しては常に同一の結果値を発生するが、他の場合にはランダムな結果値を発生する数学的機能である。受信指定のSNNフィールドの値、コミュニケータフィールドの値ならびにタグフィールドの値が、ハッシュ機能に与えられる入力パラメータとなる。出力値、すなわちハッシュテーブル内のHTEの個数の非等価演算の結果は、ハッシュテーブルの基底アドレスから最初の検索点に至るインデックスを構成する。第2のステップでは、これらのHTEが最初の検索点から逐次検索される。検索がハッシュテーブルの上限に達すると、基底アドレスへと戻る。この処理は、当該HTEが検出されるか、もしくは無効なHTEが検出されるまで行なわれる。無効なHTEが検出された場合、当該HTEは存在しない。新たなHTEを生成する必要がある場合、検索中に検出された古いHTE(そのCビットがクリアされたもの)に重ね書きするか、もしくは検索中に最初に検出された有効なHTEに重ね書きする。この検索手順において注目すべき点は、メッセージに一致する受信指定を有するHTEを検索・確定するわけではなく、特定の受信指定を有するHTEを確定するために検索が行なわれるという点である。
【0047】
すべての非持続性受信要求は、それぞれに付加された一意なタイムスタンプ値を有する。低いタイムスタンプ値は受信要求が古いことを示し、高いタイムスタンプ値はより新しい受信要求を表わす。持続性受信要求にもタイムスタンプ値が付加されているが、通常このタイムスタンプ値は遠い未来を指す最大値にセットされている。
【0048】
ポストすべき各受信要求に対応するRCWもしくはPCWは、当該受信要求の受信指定を含むHTEから連鎖を行ない、必要に応じて新たなHTEを形成しなければならない。特定の受信指定に対しては、有効なHTEが1個のみハッシュテーブル内に存在するが、同一の受信指定を有する要求が複数存在する場合もある。後者の場合、RCWやPCWは、相互に連鎖を行なって、ポストRCWを生成時刻順に繋げた単一の連鎖を形成する。生成時刻のもっとも古いRCWが、連鎖の最後尾でHTE(もしあればPCW)に直接付加される。ただし、同一の受信指定を有するPCWを1個以上ポストすることは不可能であり、無意味である。またPCWの後にRCWを連鎖することもできない。受信要求は、RCWとPCWが連鎖された順序で処理され、もっとも古い要求が最初に処理される。
【0049】
到着するメッセージに一致する受信指定は、最大4種類存在する。第1の種類は、SNNフィールド、タグフィールド、コミュニケータフィールドのいずれも一致の場合からなり、第2の種類は、SNNフィールドは無指定、タグフィールドが一致、コミュニケータフィールドが一致の場合からなり、第3の種類は、SNNフィールドが一致、タグフィールドは無指定、コミュニケータフィールドが一致の場合からなり、第4の種類は、SNNフィールドは無指定、タグフィールドも無指定、コミュニケータフィールドが一致の場合からなる。メッセージが到着すると、受信回路は、一致する受信指定を有する4個のHTEをすべて確定しようと試みる。これらのHTEのうち任意の個数が検出されるが、検出された複数のHTEに有効なポインタフィールドを示すCビットがセットされている場合には、受信回路は、時間フィールドを利用して、もっとも古い保留ポスト受信要求のHTEを、該当するHTEの中から選択する。4個のHTEがいずれも検出されないか、もしくは各HTEのCビットがすべてクリアされている場合、一致する受信要求は存在せず、受信回路はエラーを発生させてメッセージを廃棄する。
【0050】
次に、受信回路は選択されたHTEのPビットを検査する。Pビットがセットされていれば、ポインタフィールドは、持続性受信要求に対応するポストPCWを指している。Pビットがクリアされていれば、ポインタフィールドは非持続性受信要求に対応するポストRCWを指している。
【0051】
PCWは、ローカルメモリ内のデータ構造であって、2種類の受信プールを管理するために使用される。一方の受信プールは、連鎖された一連のプールRCWである。これらのプールRCWは、PCWが受信回路によってポストPCWとしてアクセスされる場合に、受信されるメッセージに関する情報を記録するために使用される。他方の受信プールは、データプールである。このプールは、ポストRCWに接続された受信バッファに受信されないメッセージデータを記録するために使用される。単一のPCWは、それぞれ異なる受信指定を有する複数のHTEを使用して複数回ポストしてもよい。これによって、他のいずれのポスト受信要求にも一致しないメッセージを受信するためのデフォルト持続性要求の機能が実現される。対応するバッファを持たないポストRCWをPCWに連係すると、PCWのデータプールを使用することにより、ポストRCWに一致するメッセージデータを受信することができる。
【0052】
図7にPCW(150)の詳細な形式を示す。PoolRCWPtrフィールド(151)には、空きプールRCWの一連鎖内における最初のプールRCWを指すアドレスポインタが格納される。NCビット(152)がセットされると、PoolRCWPtrフィールド(151)が有効であることを示す。NCビット(152)がクリアされると、PoolRCWPtrフィールド(151)が無効であって、空きプールRCWが残っていないことを示す。Nビット(153)はRCWエラー状態ビットであって、Nビットがセットされると、プールRCWが残っていないためエラーが発生したことを示す。Wビット(154)はRCW警告状態ビットである。Wビットがセットされると、プールRCWの連鎖が短くなりつつあるため、できるだけ早く該連鎖を延長する必要があることを示す。Oビット(155)はプールエラー状態ビットであって、メッセージデータを記録するデータプール空間が残り少ないためにエラーが発生したことを示す。Lビット(156)はプール警告状態ビットであって、データプールが残り少ないため、これをできるだけ早く増加させる必要があることを示す。Seqフィールド(157)は、当該PCWを使用してこれまでに受信したメッセージの個数を示す。先頭ポインタ(HeadPtr)フィールド(158)、末尾ポインタ(TailPtr)フィールド(159)ならびにLWMPtrフィールド(160)は、先頭ポインタ、末尾ポインタ、ウォータマークアドレスポインタをそれぞれ有するフィールドである。これらのフィールドは、データプールの管理に使用される。
【0053】
図10に空きプールRCW(220)の詳細な形式を示す。NCビット(222)がセットされている場合、NPoolRCWPtrフィールド(221)には、プールRCWの連鎖における次のプールRCWを指すアドレスポインタが格納されている。NCビット(222)がクリアされていれば、このプールRCWは連鎖内の最後のプールRCWである。メッセージを受信するためにいずれかのプールRCWを使用すると、NPoolRCWPtrフィールド(221)とNCビット(222)は、PCWのPoolRCWPtrフィールド(151)とNCビットフィールド(152)とにそれぞれ複写される。SWビット(223)がソフトウェアによってセットされると、このプールRCWが連鎖の終端の近くにあり、このプールRCWが使用されると警告が出されることを示す。またSWビット(223)がセットされると、受信の完了時に、受信回路は割り込み要求を発行する。IMビット(224)は、割り込み要求機能の動作を制御する。IMビット(224)がクリアされると、IRビット(225)は、受信の完了時に受信回路によって再度読まれる。IMビット(224)がセットされると、IRビット(225)は再度読まれることはない。この場合、受信回路によるプールRCWの最初の読み出し時のIRビットの値が記憶されて、この値が割り込み要求を発生させるか否かの決定に使用される。受信状態を書き込む格納場所(226)は、ゼロに初期化される。
【0054】
受信回路がプールRCWを取り出すと、このプールRCWは受信メッセージに関する情報によって直ちに更新される。更新されたプールRCW(230)の形式を図11に示す。NPoolPtrフィールド(231)、NCフィールド(232)、SWフィールド(233)、IMフィールド(234)、IRフィールド(235)は受信回路によって書き込まれることはない。Seqフィールド(236)には、PCWが取り出された時点のPCWSeqフィールド(157)の値が格納される。DataPtrフィールド(237)には、メッセージデータを受信するために使用されるデータプールから割り当てられたデータバッファを指すポインタが格納される。SNNフィールド(238)、コミュニケータ(Comm)フィールド(239)、タグ(Tag)フィールド(240)、SWHフィールド(241)、Rフィールド(242)、データ長さ(DataLen)フィールド(243)にはそれぞれ、メッセージヘッダからの対応する値が格納される。プールRCWの状態は、残りのSフィールド(244)、Bフィールド(249)、Fフィールド(245)、Iフィールド(246)、Eフィールド(247)ならびにECフィールド(248)から構成される。これらのフィールドは、受信回路によって2回書き込まれる。すなわち、受信回路が他のフィールドを書き込む時点でプールRCWを取り出した直後に1回、メッセージの受信の完了時に1回書き込まれる。Sビット(244)がセットされると、このプールRCWを使用したメッセージの受信が開始されたことを示す。Bフィールド(249)は使用されず、その値は不定である。Fビット(245)は、このプールRCWを使用したメッセージの受信が終了した時点でセットされる。Iビット(246)は、IRビット(225)がすでにセットされていて、割り込み要求が発行されたことを示す。Eビット(247)は、エラーが発生した場合にセットされる。この場合、ECフィールド(248)には、発生したエラーの種類を示すエラーコードが格納される。
【0055】
図12にデータプール(250)の構成を示す。データプールは、ローカルメモリ内の空き空間からなる連続ブロックであって、メッセージデータの受信に使用される。HeadPtr(253)と示されたポインタは、当該PCWのHeadPtrフィールド(158)にあるデータプールのヘッドポインタに対応している。このポインタは、空き空間ブロックの基底アドレスを指す。このアドレスポインタより低い格納場所には、データプール内にすでに受信されたメッセージデータ(252)が格納されている。データプール(250)から受信バッファ(251)が割り当てられる場合、この受信バッファは、HeadPtr(253)の指す基底アドレスに基づいて割り当てられる。ヘッドポインタは、新たなヘッドポインタNheadPtr(254)を生成するために割り当てられたブロックのサイズ分だけ増分される。TailPtr(256)と示されたポインタは、PCWのTailPtrフィールド(159)にあるデータプールのポインタに対応している。このポインタは、空き空間ブロックの限界を示す。データプールのサイズを越えるブロックを割り当てようとする試みは、TailPtr(256)の示すデータプールの限界を越えてNHeadPtr(254)を増分しようとすることに相当し、この場合エラーが発生する。LWMPtr(255)と示されたポインタは、PCWのLWMPtrフィールド(160)にあるデータプールのウォータマークポインタに対応している。このポインタは、空き空間ブロックのウォータマークを指す。NHeadPtr(254)が、PCWのLWMPtrフィールド(160)にあるウォータマークポインタを越える場合、データプールの空き空間が残り少ないことを示す警告が出される。PCWのLWMPtrフィールド(160)は、たとえばPCWのTailPtrフィールド(159)より十分に低く設定される。これによって、警告が出された場合、データプールの空き空間がなくなる前にデータプールを拡張することができる。データプールの空き空間の割り当てに成功した場合、PCWのHeadPtrフィールド(158)は、NHeadPtr(254)の値によって更新される。空き空間の割り当てに失敗した場合、PCWのOビット(155)がセットされる。ウォータマークを越えた場合はLビット(156)がセットされる。
【0056】
図8に保留状態のポストRCW(170)を示す。NPtrフィールド(171)、NPフィールド(173)、NTimeフィールド(176)は、同一の受信指定を有する次に古いポストRCWもしくはPCWに繋がる連鎖のリンクを形成している。これらのフィールドは、NCビット(172)がセットされている場合にのみ有効である。NPtrフィールド(171)には、HTEに連鎖される次に古いポストRCWまたはPCWを指すアドレスポインタが格納される。NPビット(173)がセットされると、次にポストPCWが連鎖されていることを示す。NPビット(173)がクリアされている場合、次にポストRCWが連鎖されていることを示す。BEビット(174)はバッファイネーブルビットである。BEビット(174)がセットされると、BuffPtrフィールド(180)とBuffSizeフィールド(181)とが有効であって、対応するデータバッファのアドレスポインタとサイズとをそれぞれ有することを示す。この対応するデータバッファは、要求されたメッセージのメッセージデータが受信されるバッファである。BEビット(175)がクリアされている場合、PCWPtrフィールド(179)が有効であって、PCWのうち、そのデータプールがメッセージの受信に使用されるPCWのアドレスポインタが該フィールドに格納される。
【0057】
受信回路は、ポストRCWを検出すると、NPtrフィールド(171)、NCフィールド(172)、NPフィールド(173)、NTimeフィールド(176)を、HTEのPtrフィールド(144)、Cフィールド(145)、Pフィールド(144)、Timeフィールド(148)へとそれぞれ複写し、HVフィールド(147)をセットする。これによって、ハッシュテーブルにポストされていた当該RCWのポストが解除される。これに続くポストRCWもしくはポストPCWがある場合、HTEは次にこれを指し示す。ポストRCWもしくはポストPCWが存在しない場合、HTEは有効であるが、示す対象を持たない。注目すべき点は、無効なHTEを検出するとハッシュテーブル検索アルゴリズムが停止するため、HTEを無効としないことが重要であるとういう点である。これによって、別なHTEの検索中に、他のHTEが検出されるという不具合を防ぐことができる。IRビット(178)は割り込み要求ビットである。このビットがセットされると、受信回路は、受信の完了時に割り込み要求を発行する。IMビット(177)は、割り込み要求機能の動作を制御する。IMビット(177)がクリアされていると、IRビット(178)は受信の完了時に受信回路によって再度読まれる。IMビット(177)がセットされていると、IRビット(178)は再度読まれることがなく、受信回路がRCWを最初に読んだ時点でのIRビットの値が記憶され、この値を使用して、割り込み要求を発行するか否かが決定される。受信状態の格納場所(182)は、ゼロに初期化される。
【0058】
受信回路がポストRCWを取り出すと、このポストRCWは受信メッセージに関する情報によって直ちに更新される。更新されたポストRCW(190)の形式を図9に示す。NPtrフィールド(191)、NCフィールド(192)、NPフィールド(193)、BEフィールド(194)、Ntimeフィールド(195)、IMフィールド(197)、IRフィールド(198)は、受信回路によって書き込まれることはない。BEビット(174)がセットされていれば、Seqフィールド(199)とDataPtrフィールド(200)はいずれも書き込まれず、PCWPtrフィールド(179)とBuffPtrフィールド(180)は、ソフトウェアによってセットされたままの状態となる。BEビット(174)がクリアされていれば、Seqフィールド(199)が書き込まれ、PCWが受信回路によって取り出された時点でのPCWのSeqフィールド(157)の値がこのフィールド(199)に格納される。またDataPtrフィールド(200)には、メッセージデータの受信に使用されるデータプールから割り当てられたデータバッファの基底アドレスが書き込まれる。SNNフィールド(201)、Commフィールド(202)、Tagフィールド(203)、SWHフィールド(204)、Rフィールド(205)、DataLenフィールド(206)には、メッセージヘッダからの対応する値がそれぞれ格納される。残りのSフィールド(207)、Bフィールド(208)、Fフィールド(209)、Iフィールド(210)、Eフィールド(211)、ECフィールド(212)は、受信回路によって2回書き込まれる。すなわち、受信回路が他のフィールドを書き込む時点でポストRCWを取り出した直後に1回、メッセージの受信の完了時に1回書き込まれる。Sビット(207)がセットされると、このポストRCWを使用したメッセージの受信が開始されたことを示す。Bビット(208)がセットされるのは、受信回路がポストRCWを取り出した時点で、バッファがBEビット(194)を介してイネーブルされた場合である。このポストRCWを使用したメッセージの受信が終了すると、Fビット(209)がセットされる。Iビット(210)は、IRビット(178)がセットされ、割り込み要求が発行されたことを示す。Eビット(211)は、エラーが発生するとセットされる。この場合、ECフィールド(212)には、発生したエラーの種類を示すエラーコードが格納される。
【0059】
本実施例に関して、NIA(ネットワークインタフェースアダプタ)に含まれる回路を以下で説明する。図13にNIA(5)の詳細な回路図を示す。NIA(5)には、送信回路(300)と、受信回路(301)と、両回路が共有する他の回路とが含まれる。さらに、割り込み要求状態レジスタ(265)と、割り込み要求マスクレジスタ(277)と、割り込み要求回路(304、305)と、動作状態レジスタ(260)と、保留制御レジスタ(257)と、ノード番号レジスタ(250)とがNIA(5)に含まれる。
【0060】
送信回路(300)から出力される割り込み要求信号IRQs(302)と、受信回路(301)から出力される割り込み要求信号IRQs(303)とによって、割り込み要求状態レジスタ(265)の割り込み要求ビットがセットされる。ANDゲート(304)によって、各割り込み要求ビットと、割り込み要求マスクレジスタ(277)内の対応する割り込みマスクビットとの間で論理積演算が行なわれる。これらANDゲート(304)のすべての出力は、ORゲート(305)によって論理和がとられ、その結果IP割り込み要求信号(7)が生成されてIP(命令処理装置)(3)へと送られる。IP(3)は、バス(6)を介して割り込み要求ビットのいずれもチェックもしくはクリアすることができるとともに、バス(6)を介して割り込みマスクビットをプログラムすることができる。割り込み要求状態レジスタ(265)の形式を図16に示す。割り込みマスクレジスタ(277)の形式は、割り込み要求状態レジ
送信回路(300)から出力される割り込み要求信号IRQs(302)と、受信回路(301)から出力される割り込み要求信号IRQs(303)とによって、割り込み要求状態レジスタ(265)の割り込み要求ビットがセットされる。ANDゲート(304)によって、各割り込み要求ビットと、割り込み要求マスクレジスタ(277)内の対応する割り込みマスクビットとの間で論理積演算が行なわれる。これらANDゲート(304)のすべての出力は、ORゲート(305)によって論理和がとられ、その結果IP割り込み要求信号(7)が生成されてIP(命令処理装置)(3)へと送られる。IP(3)は、バス(6)を介して割り込み要求ビットのいずれもチェックもしくはクリアするこスクビットである。この割り込み回路を使用することにより、送信回路(300)や受信回路(301)は、割り込み要求をIPへと発行することができる。
【0061】
割り込み要求状態レジスタ(265)の詳細な形式を図16に示す。各割り込み要求ビットの意味を以下で説明する。TIビット(266)は、送信割り込み要求ビットである。IRビット(124)をセットしたTCWの処理を送信回路が完了すると、TIビット(266)がセットされる。TEビット(267)は、送信エラー割り込み要求ビットである。エラーの発生を示すTCWのEビット(135)を送信回路がセットすると、TEビット(267)がセットされる。RIビット(268)は、受信割り込み要求ビットである。IRビット(178)をセットしたポストRCW、もしくはIRビット(225)をセットしたプールRCWのいずれかの処理を受信回路が完了した時点で、RIビット(268)がセットされる。REビット(269)は、受信エラー割り込み要求ビットである。エラーの発生を示すポストRCWのEビット(211)、もしくはプールRCWのEビット(247)を受信回路がセットすると、REビット(269)がセットされる。RRビット(270)は、受信回路によってセットされる遠隔割り込み要求ビットである。受信回路がポストRCWのFビット(209)もしくはプールRCWのFビット(245)をセットした場合であって、受信されたメッセージにRビット(106)がセットされている場合にのみ、RRビット(270)はセットされる。PN(271)、PW(272)、PO(273)、PL(274)の各ビットは、それぞれPCWの割り込み要求ビットである。受信回路がPCWのNビット(153)、Wビット(154)、Oビット(155)もしくはLビット(156)をそれぞれセットすると、対応するPNビット(271)、PWビット(272)、POビット(273)、PLビット(274)が受信回路によってセットされる。NMビット(275)は、不一致検出エラー割り込み要求ビットである。受信回路がポストRCW、プールRCWのいずれも確定できなかった場合、NMビット(274)が受信回路によってセットされる。CE割り込み要求ビット(276)は、ヘッダCRCエラービットであって、メッセージヘッダに不正なヘッダCRCが含まれていた場合に受信回路によってセットされる。この場合、メッセージは破棄される。
【0062】
ノード番号レジスタ(250)は、ノードに割り当てられた一意なノード番号を保持するために使用される。このレジスタは、バス(6)を介してIP(命令処理装置)(3)によってプログラムできる。たとえばノード番号レジスタ(250)は、システムの初期化においてIPによってのみ書き込みが可能である。ノード番号レジスタ(250)の出力(310)は、送信回路(300)へと送られる。送信回路(300)では、この出力(310)を使用して、ノードから送られた各メッセージのSNNフィールド(102)を格納する。
【0063】
保留制御レジスタ(257)は、バス(6)を介してIP(3)によってプログラムできる。図14にこのレジスタの形式を示す。保留制御レジスタ(257)には2個の制御ビットが含まれる。すなわち、送信保留ビットTH(258)と、受信保留ビットRH(259)とである。動作状態レジスタ(260)は、バス(6)を介してIP(3)によって読み出すことができる。図15に動作状態レジスタ(260)の形式を示す。動作状態レジスタ(260)には4個の状態ビットがある。すなわち、送信動作開始ビットTS(261)と、送信動作終了ビットTF(262)と、受信動作開始ビットRS(263)と、受信動作終了ビットRF(264)とである。これらのレジスタは、データ構造にアクセスするためのロック機構を形成しており、NIAとソフトウェアライブラリとの間でアクセスを共有している。
【0064】
図13において、保留制御レジスタ(257)からのTHビットの出力(348)は、送信回路(300)に接続されている。この出力は、送信回路を一時的に保留して、次の送信要求の処理を保留とするために使用される。送信回路(300)から出力されるTS動作信号(349)は、TSビット(261)に接続され、また送信回路(300)からのTF動作信号(350)は、TFビット(262)に接続される。これらのビットは、送信回路のシーケンサの現在の状態を反映している。保留制御レジスタ(257)からのRHビットの出力(426)は、受信回路へと接続される。この出力は、受信回路を一時的に保留することによって、いずれのメッセージも失わずに別なメッセージの受信の開始を保留にするために使用される。受信回路からのRS動作信号(427)はRSビット(263)に接続され、また受信回路から出されるRF動作信号(428)はRFビット(264)に接続される。これらのビットは、受信回路のシーケンサの現在の状態を反映している。
【0065】
図17に送信回路(300)の詳細な回路図を示す。図18に示す送信回路の動作のフローを参照しながら、送信回路について以下で説明する。送信シーケンサ(320)が送信回路全体を制御する。送信回路の動作は、THビット(258)からのTH保留信号(348)を介して保留とすることができる。シーケンサの状態は、TSビット(261)とTFビット(262)とにそれぞれ接続されたTS動作信号(349)とTF動作信号(350)とを介して、動作状態レジスタ(260)に反映される。送信シーケンサ(320)は、送信シーケンサ(320)と直接メモリアクセス制御装置DMAC(321)との間で転送されるDMA制御信号(345)を介して、DMAC(321)を制御する。DMAC(321)は、バス(6)を制御することによって、送信回路にローカルメモリのTCWの取り出しと更新を行なわせることができるとともに、ローカルメモリからのメッセージデータの取り出しを制御できる。また送信シーケンサは、他の様々な制御信号(344)を介してネットワーク出力ポート(322)を制御する。ネットワーク出力ポート(322)は、送信ヘッダバッファ(335)の出力(354)との接続を有するとともに、ノード番号レジスタとの接続(310)を有し、メッセージヘッダを生成する。またネットワーク出力ポート(322)は、ローカルメモリから取り出されたメッセージデータを、バス(6)を介して受信し、これによってメッセージのデータフィールドを形成する。さらにネットワーク出力ポート(322)は、各メッセージのヘッダCRCフィールドとデータCRCフィールドを計算して、形成されたメッセージを送信回路のネットワーク接続機構(9)を介してネットワークへと送出する。TCW連鎖バッファ(331)には、NTCWPtrレジスタ(332)とNCビットレジスタ(333)とが含まれている。TCW連鎖バッファ(331)は、次に処理すべきTCWに関する連鎖情報を保持するために使用される。また、NTCWPtrレジスタ(332)は、バス(6)を介してIP(命令処理装置)によってアクセスできる。送信シーケンサ(320)が次のTCWの処理を開始すると、送信シーケンサは、その他の制御信号(344)のうちのいずれか1個をアサートして、NTCWPtrレジスタ(332)の内容のコピーをTCWPtrレジスタ(334)へとラッチする。TCWPtrレジスタ(334)は、現在処理中のTCWを指すアドレスポインタを含む。TCWPtrレジスタ(334)の出力(351)は、現在のTCWを判定する場合に、DMAC(321)によってTCWのアドレスポインタとして使用される。TCWは、ローカルメモリ(4)からバス(6)を介して取り出され、その内容は送信回路内のレジスタに格納される。TCWのNTCWPtrフィールド(121)とNCビット(122)は、NTCWPtrレジスタ(332)とNCビットレジスタ(333)とにそれぞれ格納される。TCWのIMビット(123)とIRビット(124)は、IMビットレジスタ(323)とIRビットレジスタ(324)とにそれぞれ格納される。これらのビットの出力と、NCビットレジスタ(333)の出力とで状態入力信号(343)が構成され、これらの信号(343)は送信シーケンサ(320)へと送られる。DataPtrレジスタ(342)は、TCWからのDataPtrフィールド(125)を保持するために使用される。送信ヘッダバッファ(335)は、DNNレジスタ(336)と、Commレジスタ(337)と、Tagレジスタ(338)と、SWHレジスタ(339)と、Rビットレジスタ(340)と、DataLenレジスタ(341)とで構成される。これらのレジスタは、TCWのDNNフィールド(126)、Commフィールド(127)、Tagフィールド(128)、SWHフィールド(129)、Rフィールド(130)、DataLenフィールド(131)をそれぞれ保持するために使用される。またDataPtrレジスタ(342)とDataLenレジスタ(341)は、DMAC(321)への出力接続(353)、(352)をそれぞれ有しており、これらの接続は、DMACが送信シーケンサによってメッセージデータの取り出しを要求された場合に使用される。TCWの取り出しの直後と、TCWの処理の完了時とに、送信回路はTCWの状態フィールドを更新する。送信回路はTCW状態バッファ(325)を有しており、送信シーケンサ(320)からの状態出力(346)は、TCW状態フィールドに書き戻される前にこのバッファ(325)に入れられる。TCW状態バッファの内容がTCWに書き込まれるとき、TCW状態バッファのSレジスタ(326)、Fレジスタ(327)、Iレジスタ(328)、Eレジスタ(329)、ECレジスタ(330)は、TCWのSフィールド(132)、Fフィールド(133)、Iフィールド(134)、Eフィールド(135)、ECフィールド(136)へとそれぞれ書き込まれる。
【0066】
送信回路の動作フローを図18に示す。電源を投入すると、NIA内のすべてのレジスタと状態とがクリアされ、送信シーケンサは開始ステップ(500)から動作を開始する。ステップ(501)において、送信シーケンサは、THビット(258)がクリアされて、NCビット(333)がセットされるのを待つ。クリアされたTHビット(258)は、ソフトウェアライブラリが送信回路によるTCWの処理を妨げないことを示しており、セットされたNCビット(333)は、次に処理すべきTCWのアドレスがNTCWPtrレジスタ(332)に格納されていることを示す。ステップ(502)において、TSビット(261)がセットされて、送信回路がTCWの処理を開始したことを示す。ステップ(503)において、TCWPtrレジスタ(334)にNTCWPtrレジスタ(332)からのTCWのアドレスが格納されるとともに、Fレジスタ(327)と、Iレジスタ(328)と、Eレジスタ(329)と、ECレジスタ(330)とが初期状態へとクリアされて、エラーが発生していないことを示す。ステップ(504)において、送信シーケンサ(320)は、TCWPtrレジスタ(334)内のTCWアドレスポインタを使用して、送信回路のDMAC(321)に対してメモリからのTCWの取り出しを要求する。TCWの内容は、ローカルメモリから取り出されると、送信回路の各レジスタに次のように格納される。すなわち、NTCWPtrフィールド(121)とNCビット(122)は、NTCWPtrレジスタ(332)とNCビットレジスタ(333)とにそれぞれ格納され、IMビット(123)とIRビット(124)は、IMビットレジスタ(323)とIRビットレジスタ(324)とにそれぞれ格納され、DataPtrフィールド(125)はDataPtrレジスタ(324)に格納され、DNNフィールド(126)、Comフィールド(127)、Tagフィールド(128)、SWHフィールド(129)、Rフィールド(130)、DataLenフィールド(131)は、送信ヘッダバッファ(335)のDNNレジスタ(336)と、Comレジスタ(337)と、Tagレジスタ(338)と、SWHレジスタ(339)と、Rレジスタ(340)と、DataLenレジスタ(341)とにそれぞれ格納される。ステップ(505)において、送信シーケンサ(320)は、ネットワーク出力ポート(322)に対してメッセージの送信開始を命令する。この時点で、ネットワーク出力ポート(322)は、DNNレジスタ(336)、ノード番号レジスタ(250)、Comレジスタ(337)、Tagレジスタ(338)、SWHレジスタ(339)、Rレジスタ(340)およびDataLenレジスタ(341)の内容を、この順序で取り出して送信することによって、メッセージヘッダのDNNフィールド(101)、SNNフィールド(102)、Comフィールド(103)、Tagフィールド(104)、SWHフィールド(105)、Rフィールド(106)およびDataLenフィールド(107)をそれぞれ形成する。ステップ(506)において、ネットワーク出力ポート(322)は、先行するヘッダフィールドから計算されたヘッダCRCフィールド(108)を送信する。ステップ(507)において、送信シーケンサ(320)は、DMAC(321)に対して、TCW状態バッファ(325)のSレジスタ(326)と、Fレジスタ(327)と、Iレジスタ(328)と、Eレジスタ(329)と、ECレジスタ(330)とを、TCW内のSフィールドと、Fフィールドと、Iフィールドと、Eフィールドと、ECフィールドとに書き込むことを要求する。書き込みがステップ(508)において完了すると、TSビットがクリアされる。ステップ(509)において、送信シーケンサ(320)は、DMAC(321)に対して、ローカルメモリからメッセージデータを取り出すことを要求する。メッセージデータのアドレスと長さは、DataPtrレジスタ(342)とDataLenレジスタ(341)にそれぞれ格納されている。データがバス(6)を介してローカルメモリから取り出されると、ネットワーク出力ポート(322)は、該データをネットワークへと送信して、メッセージのデータフィールド(109)を形成する。すべてのデータの送信が完了すると、ステップ(510)において、送信シーケンサはデータCRCフィールド(110)をメッセージの終端に付加する。ステップ(511)において、送信シーケンサ(320)はIMビットレジスタ(323)の値を検査する。このビットがクリアされていれば、送信シーケンサ(320)は、ステップ(512)においてTFビット(262)をセットする。ステップ(513)において、送信シーケンサはDMAC(321)に対して、TCWからIRビット(124)をIRビットレジスタ(324)へと再度取り出すことを要求する。IRビットが再度取り出されるか、もしくはこの取り出しが不用である場合、送信シーケンサはステップ(514)へと進み、Fレジスタ(327)をセットし、Iレジスタ(328)をIRビットレジスタ(324)の値へとセットする。TCWの処理中にエラーが発生した場合、ECレジスタ(330)にエラーコードを表わす値がセットされるとともに、Eレジスタ(329)がセットされる。ステップ(515)において、送信シーケンサ(320)はDMAC(321)に対して、TCW状態バッファ(325)のSレジスタ、Fレジスタ、Iレジスタ、Eレジスタ、ECレジスタを、それぞれTCWのSフィールドと、Fフィールドと、Iフィールドと、Eフィールドと、ECフィールドとに再度書き込むことを要求する。ステップ(516)において書き込み要求が完了すると、送信シーケンサ(320)はTCWIRQ信号(347)をアサートする。TCWIRQ信号(347)は、2個のANDゲート(355)、(356)によってTCW状態バッファ(325)のIビット(328)とEビット(329)との間で論理積がとられる。これらのANDゲート(355)、(356)の出力(357)、(358)は、TI割り込み要求ビット(266)とTE割り込み要求ビット(267)とに接続される。TCW内のIRビット(124)がセットされて割り込みが要求されると、TI割り込み要求ビット(266)がセットされる。この割り込みが、割り込み要求マスクレジスタ(277)によってマスクされていなければ、処理装置に接続されている割り込み要求線(7)もアサートされる。同様にして、エラーが発生すると、TCW状態バッファ(325)のEレジスタがセットされ、当該割り込みが割り込み要求マスクレジスタ(277)によってマスクされていなければ、処理装置へと至る割り込み要求線(7)もアサートされる。ステップ(517)において、送信シーケンサはTFビット(262)をクリアしたのちステップ(501)へと戻り、次のTCWの処理に備える。
【0067】
アプリケーションソフトウェアは、送信ライブラリソフトウェアサブルーチンを呼び出すことによって、単一または複数のメッセージを送信するための要求を発行する。ライブラリソフトウェアは、送信すべき各メッセージに対してTCWを生成し、これらのTCWを繋げてサブ連鎖を形成する。送信回路がすでにTCWの一連鎖を処理している場合、新しいTCWのサブ連鎖は現行の連鎖の末尾に付加される。送信回路が、連鎖の最後のTCWを処理しているか、もしくはアイドル状態にある場合、ライブラリソフトウェアは、新たなTCWの連鎖の処理を開始するように送信回路をプログラムする。送信回路はTCWの処理とメッセージの送信とを、常にTCW連鎖中の順序に基づいて行なうため、上記の送信命令の待ち行列法を使用すれば、メッセージが送信要求の発行順に送信されることが保証される。ネットワーク上ではメッセージが互いを追い越すことなく転送されるため、送信回路から受信回路へと送られるメッセージは、送信要求の発行順に到着する。
【0068】
図19に受信回路(301)の詳細な回路図を示す。以下での受信回路の説明は、受信回路の動作フローを表わす図20、23、24、25、26と、受信回路内にあるハッシュテーブル検索制御回路とを参照しながら行なう。図21にハッシュテーブル検索制御回路(363)の詳細な回路図を示す。この回路は、図22に示す該回路の動作フローを参照して説明する。
【0069】
最初に図19を参照して受信回路を説明する。受信シーケンサ(360)が受信回路全体を制御する。受信DMAC(361)は、バス(6)の動作を制御することによって、ローカルメモリ内のHTE、ポストRCW、PCWならびにプールRCWの取り出しと更新とを受信回路に実行させることができるとともに、メッセージデータのローカルバッファへの書き込みを制御することができる。受信シーケンサ(360)は、ネットワーク接続機構(11)を有するネットワーク入力ポート(362)を制御して、この機構(11)を介してメッセージを受信する。ハッシュテーブル検索制御装置(363)は、ハッシュテーブル内で、もっとも古いポストRCWまたはPCWであって、一致する受信指定を有するポストRCWまたはPCWを指すHTEを確定する。また受信回路には、多数の他のレジスタ、演算装置、ゲート等が含まれる。これらの構成部品については後で説明する。
【0070】
受信回路の主要動作フローを図20に示す。電源が投入されると、NIA内のすべてのレジスタの状態は初期化され、ステップ(520)から動作が開始される。ステップ(521)において、ネットワーク入力ポート(362)は、受信ネットワーク接続機構(11)を介してメッセージヘッダの受信が開始されるのを待つ。ネットワーク入力ポート(362)は、メッセージ同期ビット(112)によってメッセージヘッダの開始を確認する。ステップ(522)において、ネットワーク入力ポート(362)は、メッセージヘッダのSNNフィールド(102)、Commフィールド(103)、Tagフィールド(104)、SWHフィールド(105)、Rフィールド(106)、DataLenフィールド(107)を、SNNレジスタ(365)、Commレジスタ(366)、Tagレジスタ(367)、SWHレジスタ(402)、Rレジスタ(403)、DataLenレジスタ(404)へとそれぞれ転送する。この転送は、これらのレジスタに接続されたメッセージヘッダデータバス(435)を使用して行なわれる。ステップ(523)において、ネットワーク入力ポート(362)はメッセージヘッダのヘッダCRCフィールド(108)を検査する。ここでエラーが検出されると、ステップ(524)においてヘッダCRCエラー信号(429)を介してCE割り込み要求ビット(276)がセットされて、メッセージヘッダCRCエラーがソフトウェアに通知される。エラーの通知後、処理はステップ(521)へと戻り、ネットワーク入力ポート(362)は次のメッセージヘッダの受信開始を待つ。ステップ(523)においてエラーが検出されなければ、ネットワーク入力ポート(362)は、受信シーケンサ(360)に対して、有効なメッセージヘッダの到着を入力ポート制御信号(144)を使用して通知する。
【0071】
受信保留ビットRH(259)の状態は、RH保留信号(426)を介して受信シーケンサへと転送される。ステップ(525)において、受信シーケンサ(360)はRH(259)がクリアされるのを待つ。このビットがすでにクリアされている場合か、もしくは該ビットがその後クリアされた場合に、受信シーケンサ(360)は、ステップ(526)において、RS動作信号(427)をアサートすることによって受信動作開始ビットRS(263)をセットする。
【0072】
ポスト受信要求を保持するために使用される制御構造を、ソフトウェアと受信回路とが同時にアクセスや変更をしないことが重要である。これが仮に行なわれると、動作の整合性が失われることになる。この問題は、RSビット(263)とRHビット(259)を使用することによって避けられる。これらのビットは、ソフトウェアによってバス(6)を介してアクセスできる。RSビット(263)は、受信要求をポストするために使用される制御構造のアクセスを受信回路が開始する直前に、受信シーケンサによってセットされる。RSビット(263)は受信回路によってクリアされるが、このクリア動作は、メッセージ受信時の必要に応じて、ポストRCWのポストを解除するか、プールRCWを割り当てるか、データプール空間を割り当てるかのいずれかの動作を行なうための制御構造の変更が完了したのちに行なわれる。RHビット(259)によって、ソフトウェアは受信回路の動作を一時的に保留することができるため、受信回路によるメッセージの処理は開始されない。これによって受信回路による制御構造へのアクセスを抑制することができる。RHビット(259)がセットされていれば、受信回路がRSビット(263)をセットすることは決してない。RSビットは、セットされたのちできるだけ早い時期に受信回路によってクリアされるが、このクリア動作は、制御構造に対する所要のアクセスが完了してから行なわれる。このように、RHビット(259)がセットされたのち、RSビット(263)がクリアされるのをソフトウェアが待つとすれば、RHビット(259)がクリアされるまで受信回路によって制御構造がアクセスされることはないことがソフトウェア側に対して保証される。RHビット(259)とRSビット(263)をこのように使用することによって、ソフトウェアは、受信回路の動作の整合性を乱すことなく、これらの制御構造を独占的にアクセスし、変更することができる。
【0073】
ステップ(526)において、RSビット(263)がセットされると、受信シーケンサ(360)はステップ(527)へと移行する。ステップ(527)において、受信シーケンサ(360)は検索要求信号(415)をアサートし、この信号はハッシュテーブル検索制御装置(363)へと送られる。ハッシュテーブル検索制御装置(363)は、メッセージヘッダバッファ(364)のSNNレジスタ(365)、Commレジスタ(366)、Tagレジスタ(367)の中の値を、検索用の入力パラメータとして使用する。受信回路の他の構成部品の説明を再開する前に、ハッシュテーブル検索制御装置(363)とその動作とについて説明する。
【0074】
図21にハッシュテーブル検索制御装置(363)の詳細な回路図を示す。この回路は、もっとも古いポストRCWまたはPCWであって、一致する受信指定を有するポストRCWまたはPCWを指すHTEを確定する。このハッシュテーブル検索制御装置の回路図を、該回路の動作フローを示す図22を参照しながら説明する。
【0075】
ハッシュテーブル検索制御装置(363)は、その機能の実行にあたって、メッセージヘッダバッファ(364)の内容と一致する可能性のある受信指定を有する各HTEを検索し、一致したHTEであってその時点までに判明したもっとも古いHTEに関する情報を保持する。HTEバッファ(457)は、MPtrレジスタ(458)と、MPレジスタ(459)と、MTimeレジスタ(460)とを有し、最も古い一致したHTEのPtrフィールド(144)と、Pフィールド(146)と、Timeフィールド(148)とを含む。このHTEのインデックスは、MIndexレジスタ(479)に保持されている。これらのレジスタは、検出(Found)信号(433)によって有効であることが表わされる。
【0076】
ハッシュテーブル構成レジスタ(751)にはHTBPtrレジスタ(752)とサイズSizeレジスタ(753)とが含まれ、命令処理装置IP(3)で実行されるソフトウェアからバス(6)を介してプログラムできる。HTBPtrレジスタ(752)はハッシュテーブルの基底アドレスを指定し、Sizeレジスタ(753)はハッシュテーブル中のHTEの個数を指定する。本実施例では、説明を簡単にするために、ハッシュテーブル内のHTEの個数を2の累乗に限定している。
【0077】
メッセージが到着してメッセージヘッダバッファ(364)へと格納されると、ステップ(540)において、検索要求信号(415)によってハッシュテーブル検索シーケンサ(450)が起動される。ハッシュテーブル検索シーケンサ(450)は、制御信号(497)を介して、ハッシュテーブル検索制御装置内のセレクタとラッチの動作を制御するとともに、DMA制御信号(432)を介して、DMAC(361)に対してHTEの取り出しを請求する。各メッセージに一致する4種類の受信指定があり、これらの指定は無指定値を使用する際の4種類の組み合わせに対応する。ハッシュテーブル検索シーケンサ(450)は、これら4種類の組み合わせに該当する各HTEを検索するが、この検索のために、検索対象のHTEの受信指定を選択するためのループカウンタnを有する。ステップ(541)において、ハッシュテーブル検索シーケンサ(450)は、ループカウンタnをゼロに初期化して、検出状態信号(433)をクリアする。
【0078】
ループの第1のステップは、ステップ(542)である。ステップ(542)において、HTEの受信指定のうち無指定の組み合わせが選択される。無指定選択信号(461,462)は、ハッシュテーブル検索シーケンサ(450)によって制御され、これらの信号にはnの値に対応する値が割り当てられる。1または3に等しいnに対してはSNN無指定選択信号(461)がアサートされ、2または3に等しいnに対してはTag無指定選択信号(462)がアサートされる。ステップ(543)において、検索すべきHTEの最初の検索インデックスが計算される。受信指定は最大3個の構成部分、すなわちSNN受信指定、Comm受信指定、Tag受信指定からなる。SNN受信指定は、SNNレジスタ(365)の出力(463)と、SNN無指定選択信号(461)とを、ORゲート(464)によって論理和演算した結果である。Comm受信指定(466)は、Commレジスタ(366)の出力そのものである。Tag受信指定(470)は、Tagレジスタ(367)の出力(468)と、Tag無指定選択信号(462)とを、ORゲート(469)によって論理和演算した結果である。SNN受信指定(465)とComm受信指定(466)とを合成して、合成SNN/Comm受信指定(467)を生成すると便利である。最初の検出インデックスを生成するには、2種類の受信指定(つまり合成SNN/Comm受信指定(467))とTag受信指定(470)とを、ハッシュ機能回路(471)によってハッシングする必要がある。ハッシュ機能回路(471)の出力は、セレクタ(472)によって選択され、ANDゲート(474)によってこの出力値とマスク値との論理積がとられる。マスク値は、Sizeレジスタ(753)の値に基づいてマスク回路(473)によって生成され、インデックス値の可能な範囲を限定するために使用される。これによってハッシュテーブルのサイズが限定される。マスク後の値は、インデックスレジスタ(475)によってラッチされる。インデックスレジスタ(475)は、検査すべき最初のHTEの最初の検索インデックスを保持する。
【0079】
ステップ(544)において、HTE検索アルゴリズムの最も内側のループに入る。インデックスレジスタ(475)のインデックス値は、セレクタ(476)によって選択され、乗算回路(477)によってHTEのバイトサイズで乗算され、加算器(478)によってHTBPtrレジスタ(752)内のハッシュテーブルの基底アドレスへと加算される。こうしてHTEPtr信号(431)が生成される。ついでステップ(545)において、HTEPtr信号(431)は、受信側のDMAC(361)へと送られる。ハッシュテーブル検索シーケンサ(450)と受信側DMAC(361)との間で転送されるDMA制御信号(432)を使用して、ローカルメモリからのHTEの読み出しが要求される。バス(6)を介してHTEが到着すると、HTEのSNNフィールド(141)とCommフィールド(142)とからなる最初の語が、等値比較器(481)によってSNN/Comm受信指定(467)と比較される。比較の結果が等値であれば、S0状態レジスタ(482)がセットされ、等値でなければこのレジスタ(482)はクリアされる。HTEのTagフィールド(143)からなる第2の語は、別な等価比較器(483)によってTag受信指定(470)と比較される。比較の結果が等値であれば、S1状態レジスタ(484)がセットされ、等値でなければこのレジスタ(484)はクリアされる。Ptr(144)、C(145)、P(146)、HV(147)、Time(148)の各フィールドからなるHTEの第3と第4の語は、HTE読み出しバッファ(451)のPtr(452)、HC(453)、P(454)、HV(455)、Time(456)の各レジスタにそれぞれラッチされる。
【0080】
ステップ(546)において、ANDゲート(489)が、HVレジスタ(455)の出力(HTE有効信号(486)と称する)と、S0状態レジスタ(482)ならびにS1状態レジスタ(484)との論理積演算を行なう。ANDゲート(489)の出力は一致信号(490)を構成する。この一致信号(490)は、HTEが検出されたこと、該HTEが有効であって一致する受信指定を有すること、ただし有効なポスト受信要求が該HTEに連鎖されているか否かは不明であること、を示している。ORゲート(493)が、一致信号(490)と、HTE有効信号(486)の反転信号との論理和演算を行なう。この結果、検索終了信号(494)が生成されて、ハッシュテーブル検索シーケンサ(450)へとこの信号が転送される。HTEの検索は、検索対象のHTEが検出された時点か、もしくは無効なHTEが検出された時点で終了する。このように検索終了信号(494)は、特定の受信指定を有するHTEの検索に関して、これ以上HTEを取り出す必要のないことを示す。
【0081】
ステップ(547)において、ハッシュテーブル検索シーケンサ(450)は検索終了信号(494)を検査する。この信号がアサートされていなければ、処理はステップ(548)へと進み、次のHTEを取り出して検査する。ステップ(548)において、検査すべき次のHTEのインデックスが計算される。ハッシュテーブル検索シーケンサ(450)は、増分器(480)によって増分されたインデックスレジスタ(475)の値を、セレクタ(472)を介して選択する。この値は、ANDゲート(474)によって、マスク回路(473)からのマスク値でマスクされる。マスクされた値は、再びインデックスレジスタ(479)へとラッチされる。インデックスレジスタ(479)の値を増分したのちマスクすることによって、ハッシュテーブル内の次のHTEのインデックスが与えられる。ハッシュテーブルのサイズの限界が越えられた場合には、テーブルの先頭へと戻る。処理のフローはステップ(544)へと戻り、次のHTEが取り出される。ソフトウェア側では、無効なHTEを少なくとも1個ハッシュテーブルに格納しておく必要がある。これはハッシュテーブル検索シーケンサが無限ループに入ってしまう可能性を防ぐためである。
【0082】
ステップ(547)において検索終了信号(494)がアサートされると、処理のフローはステップ(549)へと至る。別なANDゲート(491)が、一致信号(490)とHCビット(453)との論理積演算を行なって、一致ポスト信号(492)を生成する。比較器(495)によってOlder信号(496)が生成される。Timeレジスタ(456)の値がMtimeレジスタ(460)の値より低い場合、Older信号(496)がアサートされる。これらの信号もハッシュテーブル検索シーケンサ(450)へと送られる。ステップ(550)において、有効なポスト受信要求についてのHTEが検出されたか、またかかるポスト受信要求がその時点までに検出された最も古いポスト受信要求より古いかが、ハッシュテーブル検索シーケンサ(450)によって検査される。一致ポスト信号(492)がアサートされる場合であって、検出状態信号(433)がアサートされないか、もしくはOlder信号(496)がアサートされているかのいずれかである場合、有効なポスト受信要求についてのHTEが検出されて該ポスト受信要求がその時点で最も古いことが示される。この場合、ステップ(551)において、検出状態信号(433)がアサートされ、Ptr(452)、P(454)、Time(456)、Index(475)の各レジスタの内容が、MPtr(458)、MP(459)、Mtime(460)、MIndex(479)の各レジスタへとそれぞれ複写される。
【0083】
処理のフローはステップ(552)へと至り、ここでnの値が1だけ増分される。ステップ(553)において、nが4未満であって、受信指定が無指定の順列のすべてが検査されたわけではないことが示されると、処理はステップ(542)へと戻って、次の受信指定を有するHTEの検索が開始される。
【0084】
nの値が4に等しければ、検索は完了したことになる。ステップ(554)において、ハッシュテーブル検索シーケンサ(450)は、セレクタ(476)を使用してMindexレジスタ(479)を選択したのち、検索完了信号(416)をアサートする。検出信号(433)がすでにアサートされていれば、有効なポスト受信要求についてのHTEがすでに検出されたことを意味しているため、HTEPtr信号(431)は、最も古くて有効なポスト受信要求についてのHTEのアドレスポインタに対応する。MPtrレジスタ(458)とMPレジスタ(459)から送られたMPtr信号(437)とMP信号(436)は、HTEのPtrフィールド(144)とPフィールド(146)とにそれぞれ対応する。ステップ(555)において、ハッシュテーブル検出シーケンサ(450)は検出完了信号(416)をアサートする。この信号は、受信シーケンサ(360)に対して、ハッシュテーブル検索制御装置(363)が当該検索要求の処理を完了したことを通知する。
【0085】
ここで受信回路の他の構成部品の説明に戻る。検索完了信号(416)がアサートされると、受信回路の処理フローはステップ(528)から再開される。ハッシュテーブル検索制御装置(363)から送られた検出(Found)信号(433)が検査される。この検査を行なう場合、ANDゲート(434)が、検出完了信号(416)と検出信号(433)の反転信号との論理積演算を行なって、その結果をNM割り込み要求ビット(275)へと転送する。検索の結果、一致するものが検出できなければ、ステップ(529)においてNM割り込み要求ビット(275)がセットされる。これによって、有効なポスト受信要求について一致したHTEが検出されなかったことが、ソフトウェア側に通知される。検出信号(433)は受信シーケンサ(360)にも送られる。この場合も検索により一致するものが検出できなければ、受信シーケンサ(360)はRSビット(263)をステップ(530)においてクリアする。処理フローは最初のステップ(521)へともどり、ネットワーク入力ポート(362)は次のメッセージヘッダの受信開始を待つ。
【0086】
HTEが検出されると、処理フローはステップ(531)へと進む。ステップ(531)において、実行すべき受信動作の種類により、必要に応じてポストRCWもしくはポストPCWの取り出し、ポストRCWのポストの解除、プールRCWの割り当て、データプール空間の割り当て等が行なわれる。ポストRCWもしくはプールRCWは更新されて、メッセージの受信が開始されたことが示される。
【0087】
このステップ(531)は実際はさらに複雑なサブルーチンであって、このサブルーチンの拡大フローを図23、24、25に示す。フローをこれら3図に分割したのは見やすさを考慮したためであって、参照記号のA(570)、B(571)、C(575)、D(577)、E(587)によって各図の間の繋がりを示す。このサブルーチンの最初のステップはステップ(560)である。受信回路は、現在のメッセージの受信に関するさまざまな状態を保持している。これらの状態は、受信状態バッファ(382)のSレジスタ(383)と、Bレジスタ(384)と、Fレジスタ(385)と、Iレジスタ(386)と、Eレジスタ(387)と、ECレジスタ(388)とに保持されており、その後受信回路によって、ポストRCWのS(207)、B(208)、F(209)、I(210)、E(211)、EC(212)の各フィールドにそれぞれ書き込まれる。プールRCWの場合、これらの状態は、S(244)、B(249)、F(245)、I(246)、E(247)、EC(248)の各フィールドにそれぞれ書き込まれる。これによって、メッセージの受信状態がソフトウェアへと通知される。Sレジスタ(383)は、「1」の値でハードワイヤドされている。これは、受信回路が、RCWのSフィールドにセット値以外の値を書き込む必要がまったくないためである。このビットは、受信動作が開始されたことをソフトウェアに通知する。BEビット(174)のセットされたポストRCWによって指定されたバッファが、受信動作で使用されると、Bレジスタ(384)がセットされる。受信動作が終了すると、Fレジスタ(385)がセットされる。ポストRCWのIRビット(178)もしくはプールRCWのIRビット(225)による指定に準じて割り込みが要求される場合、Iレジスタ(386)がセットされる。Eレジスタ(387)は、エラー状態が検出されるとセットされる。この場合、検出されたエラーの種類を示すエラーコードがECレジスタ(388)にセットされる。ステップ(561)において、B(384)、F(385)、I(386)、E(387)、EC(388)の各レジスタは、すべてセット値以外の状態にクリアされる。ステップ(562)において、受信シーケンサ(360)は、ハッシュテーブル検索制御装置(363)から送られたMPビット信号(436)を検査して、ポストRCWもしくはポストPCWが検出されたか否かを判定する。ここではまず、MPビット(436)がクリアされた場合を説明する。これは、検索によって、ポストRCWを指すポインタを含むHTEの一致が検出された場合である。MPビット(436)がセットされた場合については後述する。ポストRCWを指すアドレスポインタは、MPtr信号(437)を介してハッシュテーブル検索制御装置(363)から出力される。このアドレスポインタは、ステップ(563)においてRCWPtrレジスタ(369)によってラッチされる。このレジスタ(369)の出力(439)は、受信側DMAC(361)へと送られる。次に受信シーケンサ(360)は、ステップ(564)において、受信側DMAC(361)に対して、DMA制御信号(419)を使用してローカルメモリ(4)からポストRCWを取り出すよう要求する。ポストRCWのデータフィールドは、バス(6)を介して返送される。ポストRCWもしくはプールRCWから読み出されたリンク情報は、次リンクバッファ(371)によって一時的に保持される。ポストRCWの場合には、ステップ(564)の場合と同様に、次リンクバッファ(371)内のNPtr(372)、NC(373)、NP(374)、NTime(376)の各レジスタが、バス(6)を介して読み出された当該ポストRCWの対応するフィールドからそれぞれラッチされる。NHVレジスタ(375)は、ハードワイヤドされた2進値「1」を有しており、この値は変更されない。ポストRCWのBE(174)、IM(177)、IR(178)、PCWPtr(179)、BuffPtr(180)の各フィールドは、BE(378)、IM(380)、IR(381)、PCWPtr(368)、BuffPtr(407)の各レジスタにそれぞれラッチされる。ポストRCWのBuffSizeフィールド(181)は、レジスタに直接ラッチされず、バス(6)上に到着した時点で比較器(405)によってDataLenレジスタの出力(440)と比較される。比較の結果は、CBレジスタ(406)にラッチされる。DataLenレジスタにはメッセージデータフィールドの長さの値が格納されており、この値がポストRCWのBufSizeフィールド(181)の値より大きい場合、CBレジスタ(406)がセットされる。これによって、ポストRCWのバッファの大きさが不十分であるため、すべてのメッセージデータを格納できないことが示される。
【0088】
ステップ(565)において、ポストRCWのポストが解除される。これは、受信回路が、次のポストRCWもしくはポストPCWに関する連鎖情報をHTEに複写することによって行なわれる。連鎖されたポストRCWやポストPCWがなければ、受信回路は、現在のポストRCWに関するフィールドを無効とすることによってポストの解除を行なう。この場合、受信シーケンサ(360)は、受信側のDMAC(361)に対して、次リンクバッファ(371)の内容を、ハッシュテーブル検索制御装置(363)からのHTEPtr出力(431)によって示されたHTEへと書き込むことを要求する。NPtr(372)、NC(373)、NP(374)、NHV(375)、NTime(376)の各レジスタの値は、HTEのPtr(144)、C(145)、P(146)、HV(147)、Time(148)の各フィールドへとそれぞれ書き込まれる。HVフィールド(147)に2進値の「1」を書き込むと、HTEの有効性を保証する効果がある。NCレジスタ(373)がクリアされている場合のように、連鎖されたポスト項がなくても、ハッシュテーブル内の将来の検索において異なるHTEの検出を可能とすることを保証するためには、当該HTEが有効であることが重要である。連鎖されたポストRCWやポストPCWがない場合であって、HTEが無効とされた場合は、無効なHTEの取り出し時点で直ちに将来の検索は終了し、一致する有効なHTEの検出は行なわれない。ステップ(566)において、BEビット(378)の値が受信シーケンサ(360)によって検査される。BEビットがセットされていれば、ポストRCWのBuffPtrフィールド(180)とBuffSizeフィールド(181)が有効であるため、DataPtrレジスタ(407)とCBレジスタ(406)も有効である。ここで、BEビット(378)がセットされた場合について説明する。BEビット(378)がクリアされた場合については後述する。処理のフローはステップ(567)へと進む。ステップ(567)において、受信状態バッファ(382)のBレジスタ(384)が受信シーケンサ(360)によってセットされる。これによってRCWのデータバッファが有効であることが示される。ステップ(568)において、CBレジスタ(406)の値が受信シーケンサによって検査される。CBレジスタ(406)がセットされていれば、RCWのバッファの大きさが不十分であることがわかる。ステップ(569)において、受信シーケンサ(360)は、受信状態バッファ(382)のEレジスタ(387)とECレジスタ(388)をセットする。これによって、受信バッファの大きさが不十分であってメッセージデータを格納できなかったため、エラーが発生したことが示される。CBレジスタ(406)がセットされたか否かにかかわらず、処理フローはステップ(588)へと進む。ステップ(588)において、ローカルメモリ(4)内の当該ポストRCWが受信回路によって更新される。受信シーケンサ(360)は、受信側DMAC(361)に対して、PCWPtrレジスタ(369)によって指定されたポストRCWの更新を要求する。SNN(365)、Comm(366)、Tag(367)、SWH(402)、R(403)、DataLen(404)の各レジスタ内のメッセージヘッダフィールドの値は、ポストRCWのSNN(201)、Comm(202)、Tag(203)、SWH(204)、R(205)、DataLen(206)の各フィールドへとそれぞれ書き込まれる。受信状態バッファ(382)のS(383)、B(384)、F(385)、I(386)、E(387)、EC(388)の各レジスタは、ポストRCWのS(207)、B(208)、F(209)、I(210)、E(211)、EC(212)の各フィールドへと書き込まれる。ついで処理フローはステップ(594)へと進む。以上で受信開始局面が完了する。先に説明を延期した各状態の説明を以下で終えたのちに、ステップ(594)に続く受信回路の処理のフローを説明する。
【0089】
ステップ(566)においてBEビット(378)がクリアされた場合、処理フローはステップ(578)へと進む。この時点では、受信回路はメッセージデータを書き込む場所をまだ決定していない。受信回路がメッセージデータを受信するためには、まずデータプールから空間を割り当てる必要がある。PCWPtrレジスタには、特定のPCWを指定するポストRCWからのPCWPtrフィールドが格納されている。使用すべきデータプールは、このPCWによって管理される。PCWPtrレジスタ(368)の出力(438)は、受信側DMAC(361)へと送られる。ステップ(578)において、受信シーケンサ(360)は受信側DMAC(361)に対して、PCWの取り出しを要求する。このPCWは、バス(6)を介してローカルメモリ(4)から返送される。PCWのN(153)、W(154)、O(155)、L(156)、Seq(157)の各フィールドは、PCW状態バッファ(389)のN(390)、W(391)、O(392)、L(393)、Seq(394)の各レジスタによってそれぞれラッチされる。PCWのHeadPtrフィールド(158)は、DataPtrレジスタ(407)とNHeadPtrレジスタ(413)とによってラッチされる。加算器(408)は、DataPtrレジスタ(407)の出力(441)とDataLenレジスタ(404)の出力(440)とを加算する。加算器の出力(409)は、データプールのヘッドポインタの新しい値となる。比較器(410)によって、新しいヘッドポインタの値(409)が、PCWのLWMPtrフィールド(160)またはTailPtrフィールド(159)の値を越えるか否かが検査される。これらのフィールドは、PCWの異なる語内にあるため、異なる周期でバス(6)上に到着する。比較器(410)の出力は、CLレジスタ(411)とCTレジスタ(412)とによってラッチされる。このラッチ動作は、ヘッドポインタの値(409)がLWMPtrフィールドの値を越えていれば、CLビット(411)がセットされ、TailPtrフィールドの値を越えていればCTビット(412)がセットされるように行なわれる。ステップ(579)において、受信シーケンサ(360)は、N(390)、W(391)、O(392)、L(393)の各レジスタの値を、PCW書き込み状態バッファ(396)のNN(397)、NW(398)、NO(399)、NL(400)の各レジスタへとそれぞれ複写する。さらに受信シーケンサは、増分器(395)を使用してSeqレジスタ(394)の値を増分するとともに、この値をPCW書き込み状態バッファ(396)のNSeqレジスタ(401)にラッチする。PCW書き込み状態バッファ(396)によって、PCWへの書き込みのバッファリングが行なわれる。NN(397)、NW(398)、NO(399)、NL(400)、NSeq(401)の各レジスタには、書き込むべきPCWのN(153)、W(154)、O(155)、L(156)、Seq(157)の各フィールドの新しい値がそれぞれ格納される。処理フローは次にステップ(582)へと進む。ステップ(582)において、受信回路はデータプールの割り当てエラーの有無を検査する。Oレジスタ(392)がセットされていれば、PCWのデータプールにはすでにデータプールオーバーフローエラーが発生している。CTレジスタ(412)がセットされていれば、現在のメッセージのデータを受信するための空間を割り当てるのに十分なデータプール空間がないことを意味する。いずれの場合でも、データプール空間の割り当ては行なわれない。ステップ(583)において、受信シーケンサ(360)は、Eレジスタ(387)とECレジスタ(388)とをセットする。これによって、データプール空間の不足が検出されたことと、空間の割り当てが不可能であることとが示される。さらに受信シーケンサ(360)はNOレジスタ(399)をセットする。これによって、PCWが書き込まれた場合、当該PCWのOビットフィールド(155)がセットされてデータプールオーバーフローエラーが検出されたことが示される。データプールオーバーフローエラーが検出されなければ、割り当てが成功したことを意味する。ステップ(584)において、受信シーケンサ(360)は、NHeadPtrレジスタ(413)によって、加算器出力(409)からのデータプールヘッドポインタ出力の新しい値をラッチする。またデータプールオーバーフローエラーが発生しなかった場合、受信シーケンサ(360)はステップ(585)においてCLレジスタ(411)を検査する。CLレジスタ(411)がセットされていれば、受信シーケンサはステップ(586)において、NLレジスタ(400)をセットする。これによってヘッドポインタがウォータマークを超過したことが示される。データプール空間の割り当てが成功したか否かにかかわらず、処理フローはステップ(589)へと進む。ステップ(589)において、ローカルメモリ内のポストRCWが受信回路によって更新される。受信シーケンサ(360)は、RCWPtrレジスタ(369)によって指定されたポストRCWの書き込みを、受信側DMAC(361)に対して要求する。Seqレジスタ(394)とDataPtrレジスタ(407)の値は、ポストRCWのSeqフィールド(199)とDataPtrフィールド(200)とに書き込まれる。SNN(365)、Comm(366)、Tag(367)、SWH(402)、R(403)、DataLen(404)の各レジスタにあるメッセージヘッダフィールドの値は、ポストRCWのSNN(201)、Comm(202)、Tag(203)、SWH(204)、R(205)、DataLen(206)の各フィールドへとそれぞれ書き込まれる。受信状態バッファ(382)のS(383)、B(384)、F(385)、I(386)、E(387)、EC(388)の各レジスタは、ポストRCWのS(207)、B(208)、F(209)、I(210)、E(211)、EC(212)の各フィールドへとそれぞれ書き込まれる。ステップ(590)において、受信シーケンサ(360)は、HTE検索制御装置(363)からのMP信号(436)の値を再度検査する。以上の説明は、MP信号がクリアされている場合に該当するため、処理フローはステップ(592)へと進む。ステップ(592)において、ローカルメモリ内のPCWが受信回路によって更新される。受信シーケンサ(360)は、PCWPtrレジスタ(368)によって指定されたPCWの書き込みを、受信側のDMAC(361)に対して要求する。PCW書き込み状態バッファ(396)内のNN(397)、NW(398)、NO(399)、NL(400)、NSeq(401)の各レジスタの値と、NheadPtrレジスタ(413)の値とが、バス(6)を介して、PCWのN、W、O、L、Seq、HeadPtrの各フィールドにそれぞれ書き込まれる。PCWの書き込み動作が完了すると、受信シーケンサ(360)は、ステップ(593)においてPCWIRQ信号(420)をアサートする。4個のANDゲート(421)が、この信号と、NN(397)、NW(398)、NO(399)、NL(400)の各レジスタの出力との論理積をとるとともに、N(390)、W(391)、O(392)、L(393)の反転出力との論理積をそれぞれとる。この結果、4個の出力信号は、PN(271)、PW(272)、PO(273)、PL(274)の各割り込み要求ビットをそれぞれセットする。このため、PCWのN、W、O、Lの各ビットのうち過去にクリアされていたビットのいずれかを受信回路がセットすると、対応する割り込み要求ビットがセットされる。このビットによって、PCWに関する警告もしくはエラー状態が存在する場合、かかる警告もしくはエラー状態がソフトウェアに通知される。処理フローはステップ(594)へと進み、上記の受信開始局面が完了する。
【0090】
ここでステップ(562)へと戻って、ハッシュテーブル検索処理装置(363)からのMP信号がセットされていた場合の受信回路の処理フローを説明する。この場合、検索において、ポストPCWを指すポインタを含むHTEとの一致が検出されて、処理はステップ(572)へと進む。当該PCWを指すポインタは、MPtr信号(437)を介してハッシュテーブル検索制御装置(363)から出力され、ステップ(572)においてPCWPtrレジスタ(368)によってラッチされる。PCWPtrレジスタ(368)の出力(438)は、受信側のDMAC(361)へと送られる。ステップ(573)において、受信シーケンサは、DMAC(361)に対して、ローカルメモリ(4)からポストPCWを取り出すことを要求する。PCWのデータフィールドはバス(6)を介して返送される。PCWのRCWPtrフィールドとCフィールドは、RCWPtrレジスタ(369)とCビットレジスタ(370)とによってラッチされる。PCWのN、W、O、L、Seqの各フィールドは、PCW状態バッファ(389)のN(390)、W(391)、O(392)、L(393)、Seq(394)の各レジスタによってラッチされる。PCWのHeadPtrフィールドは、DataPtrレジスタ(407)とNHeadPtrレジスタ(413)とによってラッチされる。対応するデータバッファのない上記のRCWの場合と同様に、新しいデータプールヘッドポインタがLWMPtrの値を越えていれば、CLレジスタ(411)がセットされ、TailPtrの値を越えていればCTレジスタ(412)がセットされる。ステップ(595)において、受信シーケンサ(360)は、N(390)、W(391)、O(392)、L(393)の各レジスタの値を、PCW書き込み状態バッファ(396)のNN(397)、NW(398)、NO(399)、NL(400)の各レジスタへとそれぞれ複写する。また受信シーケンサ(360)は、増分器(395)を使用してSeqレジスタ(394)内の値を増分したのち、この値をPCW書き込み状態バッファ(396)のNSeqレジスタ(401)にラッチする。ステップ(574)において、受信シーケンサ(360)は、プールPCWの取得が可能か否かを検査する。Nレジスタ(390)がセットされていれば、プールPCWの不足によるエラーがすでに検出されていることを意味する。Cレジスタ(370)がクリアされていれば、PCWPtrレジスタ(369)にラッチされたPoolRCWPtrフィールドが無効であることと、PCWから連鎖されたプールRCWがないことを意味する。Nレジスタ(390)がセットされているか、もしくはCレジスタ(370)がクリアされていれば、受信シーケンサ(360)はNNレジスタ(397)をセットし、処理フローはステップ(592)へと進む。ステップ(592)において、PCWがローカルメモリに書き戻される。これは、対応するバッファのないポストRCWの受信に関して以前に説明した例と同様である。ただし今回の例では、Nレジスタがすでにセットされていなければ、受信回路はPCWのNビットとPN割り込み要求ビット(271)とをセットする。これによってプールPCWの不足によるエラーが示される。ステップ(574)の説明に戻り、取得可能なプールRCWがあれば、処理フローはステップ(580)へと進む。ステップ(580)では、当該プールRCWがローカルメモリ(4)から取り出される。RCWPtrレジスタ(369)にはプールRCWのポインタが格納されている。このレジスタの出力(439)は、受信側DMAC(361)へと送られる。受信シーケンサ(360)は、プールRCWを取り出すことを受信側DMAC(361)に対して要求する。このプールRCWはバス(6)を介して到着する。ポストPCWを使用した受信の場合、次リンクバッファ(371)を使用して次のプールRCWへのリンクを一時的に保留する。プールRCWのNPoolRCWPtrフィールドとNCフィールドは、このバッファのNPtrレジスタ(372)とNCレジスタ(373)とにそれぞれラッチされる。プールRCWのSW、IM、IRの各フィールドは、SW(377)、IM(380)、IR(381)の各レジスタにそれぞれラッチされる。SWビットフィールドがセットされたプールRCWは、プールRCWの連鎖が残り少ないことを示す。受信回路がこのようなプールRCWを取り出した場合、受信回路はこの状態をソフトウェアに警告しなければならない。ステップ(581)において、SWレジスタ(377)がセットされていれば、受信シーケンサはNWレジスタ(397)をセットする。NWレジスタ(397)は後でPCWのWビットフィールドへと書き戻される。処理フローは次いでステップ(582)へと進む。ステップ(582)において、受信回路はデータプール割り当てエラーの存在を検査する。これは、対応するバッファのないポストRCWを使用した受信の前述の例と同様である。処理フローは前回の例と同じように進行するが、ステップ(589)において、プールRCWが更新される点が異なる。ステップ(591)において、MP信号(436)が再度検査される。処理フローのここまでの説明では、この信号がセットされていたことを前提にしてるので、フローはここでステップ(591)へと進む。ステップ(591)において、ローカルメモリ内のPCWが受信回路によって更新される。受信シーケンサ(360)は、受信側DMAC(361)に対して、PCWPtrレジスタ(368)によって指されたPCWの書き込みを要求する。NPtrレジスタ(372)とNCレジスタ(373)の値は、バス(6)を介してPCWのPoolRCWPtrフィールドとCフィールドとに書き込まれる。PCW書き込み状態バッファ(396)のNN(397)、NW(398)、NO(399)、NL(400)、NSeq(401)の各レジスタの値と、NHeadPtrレジスタ(413)の値は、PCWのN、W、O、L、Seq、HeadPtrの各フィールドへとそれぞれ書き込まれる。PCW書き込み動作が完了すると、処理フローはステップ(593)へと至る。このステップは、対応するバッファのないポストRCWを使用した前述の受信の例ですでに説明した。次に処理フローはステップ(594)へと進む。これで上記の受信開始局面が完了する。
【0091】
ステップ(594)へと至る処理のさまざまな変形例をこれまで説明した。処理フローは次に図20のステップ(532)へと戻る。ステップ(532)において、受信シーケンサはRSビット(263)をクリアする。ステップ(533)において、受信シーケンサは、プールRCWの不足によるエラーが発生したか否かを再度検査する。MP信号(436)がアサートされていて、Nレジスタ(390)がセットされているかもしくはCレジスタ(370)がクリアされていれば、プールRCWの不足によるエラーが発生したことを意味する。この場合、処理フローは最初のステップ(521)へと戻り、ネットワーク入力ポート(362)は次のメッセージヘッダの受信開始を待つ。ステップ(533)でエラーが検出されなければ、RCWPtrレジスタ(369)の値は、有効なポストRCWもしくは有効なプールRCWのいずれかを示す。処理フローは次にステップ(534)へと進む。ステップ(534)において、データがバッファに書き込まれるとともに、最終状態がポストRCWもしくはプールRCWへと書き込まれる。実際にはこのステップはさらに複雑なフローであって、ステップ(600)から始まるこのフローを図26に示す。ステップ(601)において、受信シーケンサはEレジスタ(387)を検査する。Eレジスタ(387)がクリアされていれば、DataPtrレジスタ(407)は有効であって、このレジスタはローカルメモリ(4)内のバッファを指すアドレスポインタを含む。このアドレスポインタで示されたバッファは、DataLenレジスタ(404)内のメッセージデータの長さの値を書き込むのに十分なサイズのバッファである。DataPtrレジスタ(407)の出力(441)と、DataLenレジスタ(404)の出力(440)は、受信側DMAC(361)へと送られる。ステップ(602)において、受信シーケンサ(360)は、受信側DMAC(361)に対して、ネットワーク入力ポート(362)からのメッセージデータをバス(6)を介してローカルメモリ(4)へと書き込むことを要求する。ステップ(603)において書き込み動作が完了した時点で、データCRCエラーがネットワーク入力ポート(362)によって検出されると、受信シーケンサ(360)はEレジスタ(387)とECレジスタ(388)とをセットする。これによってステップ(604)においてエラーが発生したことが示される。エラーの有無にかかわらず、処理フローはステップ(605)へと進み、このステップで受信の完了局面が開始される。
【0092】
ソフトウェアは、特定の受信要求の処理が完了した時点で、命令処理装置への割り込み要求を発行するか否かを制御できる。割り込み要求を発行する場合、ソフトウェアは対応するポストRCWもしくはプールRCWのIRビットをセットする。このIRビットは受信回路によって読まれる。IRビットがセットされていれば、当該受信要求の完了後、割り込み要求が発行される。ソフトウェア側では、受信要求の処理が完了するまで割り込み要求が必要かどうかわからないことが多い。たとえば多重タスクのソフトウェア環境において、ある受信要求の完了を待っているタスクは別な作業を実行できるが、メッセージの処理が終るまでソフトウェアのタスクが実行すべき作業がなければ、このタスクはスリープ状態に入る必要がある。あるタスクがスリープ状態に入れば、他のタスクが命令処理装置の処理能力を利用して別な作業を実行できる。スリープ状態に入る前に、当該タスクはポストRCWまたはプールRCWのIRビットをセットする。これによって、受信要求の処理が完了すると、当該タスクはスリープ状態を離脱して作業を続行できる。この場合、IRビットは、受信処理が完了するまでの任意の時点でソフトウェアによって動的にセットできる。これは、受信回路が、受信処理の終了後、IRビットの状態を判定するためにポストRCWもしくはプールRCWを再度読まなければならないことを意味する。残念ながら、受信回路による再度の読み出し要求には時間がかかるため、受信の実際の終了時間を遅らせる可能性がある。このため本発明では、各ポストRCWおよびプールRCWに特別なフィールド(IMビットフィールド)を設けている。このフィールドは、再度の読み出し要求が不用の場合にこれを避けるために使用される。IMビットは、IRフィールドに関する動作状態を制御するビットである。IMビットがソフトウェアによってセットされると、再度の読み出しは実行されず、ポストRCWもしくはプールRCWに対する最初の読み出し要求で得られたIRビットが使用される。この場合、ソフトウェアはIRビットの状態を動的に変更しない。IMビットがソフトウェアによってクリアされると、受信処理の終了時にIRフィールドの値が再度取り出される。IRフィールドの変更を受信回路に知らせるか否かをソフトウェア側で検査できるようにするため、受信回路はRFビット(264)を備えている。このビットは、バス(6)を介してソフトウェアによってアクセスできる。ポストRCWとプールRCWはそれぞれ、受信回路の読んだIRビットの条件を反映するIビットフィールドを有する。RFビット(264)は、IRビットを再度取り出すための再度読み出し要求が発行される前に、受信回路によってセットされる。IビットがポストRCWもしくはプールRCWに最終的に書き込まれたのち、RFビット(264)はクリアされる。ソフトウェアは、いずれかのポストRCWもしくはプールRCWのIRビットをセットしたのち、RFビット(264)をポーリングして、このビット(264)がクリアされるまで待つ必要がある。RFビット(264)がやがてクリアされるか、もしくは該ビットがすでにクリアされている場合、次の2種類の状態のうちいずれかが該当する。第1の状態は、受信要求の処理がまだ完了していない状態であって、受信動作に対応するポストRCWもしくはプールRCWが更新されていない状態である。この場合、ソフトウェアによるIRビットの変更がのちほど受信回路に通知される。第2の状態は、受信要求の処理が完了した状態であって、受信動作に対応するポストRCWもしくはプールRCWは最終的に更新されている状態である。この場合、Iビットフィールドは、受信回路から見たIRビットの状態を反映している。
【0093】
ステップ(605)において、受信シーケンサ(360)はRF信号(428)をアサートする。この信号はRFビット(264)をセットする。ステップ(606)において、IMレジスタ(380)が検査される。このレジスタは、ポストRCWもしくはプールRCWの最初の読み出しでラッチされたIMフィールドの値を保持している。IMレジスタ(380)がクリアされていれば、受信シーケンサ(360)は、受信側DMAC(361)に対して、ポストRCWもしくはプールRCWを再度取り出すことを要求する。IRビット(385)はIRレジスタ(381)に再度ラッチされる。次にステップ(608)において、受信シーケンサは、Fビット(385)をセットし、Iビット(386)をIRレジスタ(381)の内容にセットする。ステップ(609)において、受信シーケンサ(360)は、受信側DMAC(361)に対して、S(383)、B(384)、F(385)、I(386)、E(387)、EC(388)の各レジスタの内容を、ポストRCWもしくはプールRCWのS、B、F、I、E、ECの各フィールドへとそれぞれ書き込むことを要求する。ステップ(610)において、受信シーケンサ(360)はRCWIRQ信号(422)をアサートする。3個のANDゲート(425、424、423)が、RCWIRQ信号(422)と、I(400)、E(398)、R(403)の各レジスタからの出力との論理積をそれぞれとる。これらゲートの出力信号は、RR(270)、RE(269)、RI(268)の各割り込み要求ビットをそれぞれセットする。このため、受信処理の終了時に、受信回路がRCWのRビット、Eビット、Iビットのうちいずれかをセットすると、対応する割り込み要求ビットがセットされる。ステップ(611)において、受信回路はRF信号(428)のアサートを解除して、RFビット(264)をクリアする。ステップ(612)において、処理フローは図20の最初のステップ(521)へと戻る。ステップ(621)において、入力ポートは次のメッセージヘッダの受信開始を待つ。
【0094】
以下では、通信ソフトウェアがシステムのノード間においてメッセージをいかに転送するかについて、例を挙げて説明する。ここでは1個のノードのみを説明するが、この説明はシステムの他のノードも同様に該当する。
【0095】
ソフトウェアは最初に、ローカルメモリ内に必要なデータ構造を形成しなければならない。ソフトウェアはまず、無効なHTEだけから構成されるハッシュテーブルをローカルメモリ内に生成する。各ノードは、アプリケーションソフトウェアの複数のタスクを実行できる。異なるタスクとの通信を区別するため、ここでは上記のComm(コミュニケータ)フィールドを2分割して、タスク識別フィールドと、コミュニケータ識別フィールドとを形成する。アプリケーションソフトウェアの各タスクをノードで実行するためには、各アプリケーションタスクに使用される通信コンテキストを識別するためのコミュニケータを表わす一連のコミュニケータ値を割り当てる必要がある。アプリケーションソフトウェアの各タスクに対しては、ソフトウェアは、データプール1個と、空きプールRCWCW1個を生成しなければならない。特に限定されないが、アプリケーションソフトウェアの各タスクが、別個のPCWと、別個のデータプールと、別個のプールPCWの連鎖とをそれぞれ使用することが望ましい。理由は、こうすればデータのオーバーフローエラーやプールPCW不足エラーが、エラーを生じたアプリケーションタスク1個のみに限定されるからである。通信ソフトウェアは次に、送信元無指定と、タグ無指定と、当該アプリケーションタスクに割り当てられたコミュニケータ値とに対応する受信指定を有する有効なHTEを生成することによって、ハッシュテーブルにPCWをポストする。PCWに対応するHTE内のTime(時間)値は最大値にセットしておく。この値は、将来における受信要求、すなわち今後発行される受信要求に対応する値である。PCWは、アプリケーションソフトウェアのタスクに割り当てられた各コミュニケータ値につき、別個のHTEを使用して同一の方法で複数回ポストする。PCWのこれらのポスト受信要求は、アプリケーションソフトウェアによって発行された保留状態の受信要求のうちのいずれにも一致しないメッセージに対するデフォルト受信要求として使用される。
【0096】
メモリ構造の初期化後の任意の時点で、ノード上で実行されるアプリケーションソフトウェアは、通信ライブラリソフトウェアにメッセージを送信するための要求を発行できる。ライブラリソフトウェアは、この要求を、送信回路が実行する送信のためのキューに登録する。メッセージ送信要求をキューに登録するためには、通信ライブラリソフトウェアは、すでに説明したTCWを生成する。このTCWには、送信すべきデータのコミュニケータ(Comm)値と、タグ(Tag)値と、バッファアドレスとが格納される。次にライブラリソフトウェアは、TCWのSビット(132)を検査して、先行する送信対象メッセージに対応するTCWが送信回路によって開始されたか否かを調べる。Sビット(132)がセットされていれば、ソフトウェアは現在のTCWのアドレスを送信回路のNTCWPtrレジスタ(331)にセットするとともに、NCビット(333)をセットする。先行するTCWのSビットがクリアされていれば、ソフトウェアはNIA(ネットワークインタフェースアダプタ)のTHビット(258)をセットする。これによって送信回路が別なTCWを開始しないことが保証される。ソフトウェアは次に、TSビット(261)のポーリングを行なって、このビットがクリアされるまで待つ。TSビット(261)がクリアされると、送信回路が別なTCWを開始しないことが保証される。ソフトウェアは再び先行するTCWのSビットを検査する。Sビットがクリアされていれば、ソフトウェアは現在のTCWを指すポインタをNTCWPtrフィールド(121)へと書き込むとともに、先行するTCWのNCビット(122)をセットして、THビット(333)をクリアする。先行するTCWのSビットがこの時点でセットされていれば、ソフトウェアが先行するTCWに現在のTCWを連鎖するにはすでに遅すぎることを意味する。この場合、ソフトウェアは、現在のTCWのアドレスを送信回路のNTCWPtrレジスタ(331)にセットするとともに、NCビット(333)をセットしなければならない。ソフトウェアはこのようにして、送信回路がメッセージの送信を完了するまで待たずに、任意の個数のメッセージ送信要求をキューに登録することができる。ソフトウェアが、メッセージの送信が終るまでスリープ状態に入り、送信完了時にスリープ状態から離脱したい場合には、ソフトウェアは任意の時点でTCWのIRビットをセットする。こうすれば、送信動作の終了時に処理装置割り込み要求が発行される。送信動作が完了したか否かは、ソフトウェアが対応するTCWのFビット(132)の状態を検査することによって容易に調べることができる。
【0097】
メモリ構造の初期化後の任意の時点で、ノード上で実行されるアプリケーションソフトウェアは、通信ライブラリソフトウェアに対して受信要求を発行することができる。ライブラリソフトウェアは、受信回路が使用したプールRCWの連鎖を最初に検索する。これらのプールRCWは、各プールRCWのSビット(244)によって容易に識別できる。各Sビットは、対応するPCWが使用された場合にはセットされている。これらのプールRCWは、最も古いものから検索しなければならない。これはMPIのメッセージの順序要件を犯さないためである。当該受信要求に一致するSNNフィールドと、コミュニケータフィールドと、タグフィールドとを含むプールRCWがソフトウェアによって検出されると、この要求は満たされる。次にソフトウェアは、プールRCWのFビット(245)がセットされるのを待って受信の完了を確認する。ソフトウェアは、DataPtrフィールド(237)によって示されたデータをアプリケーションのバッファに複写してもよい。メッセージがプールRCWの連鎖内で検出されない場合、受信側ではポストRCWを生成しなければならない。このポストRCWには、アプリケーション空間内のユーザバッファの指定と、PCWの有効なポインタとが格納されている必要がある。ポストRCWのBEビット(174)はクリアされていなければならない。理由は、当該ポストRCWは当初仮にポストされるだけであって、後にバッファがイネーブルされるからである。次にソフトウェアは、受信指定のハッシュ値を計算して、ハッシュテーブル内で該当するHTEを検索する。HTEが検出されない場合、ソフトウェアがHTEを生成しなければならない。このため、受信側では最初にRHビット(259)をセットしたのち、RSビット(263)がクリアされるまでこのビット(263)のポーリングを実行する。これによって、ソフトウェアがハッシュテーブルを変更している間に、受信回路がこのテーブルの検索を開始しないことが保証される。次にソフトウェアは、HTEをハッシュテーブルへと書き込み、タイムスタンプとポインタをHTE内のポストRCWへと格納したのち、RHビット(259)をクリアする。HTEが検出されても連鎖としてこれに何も付加されていなければ、ソフトウェアはRHビット(259)をまずセットしたのち、RSビット(263)がクリアされるまでこのビット(263)のポーリングを行なう。その後ソフトウェアは、ポストRCWをポストRCWの連鎖の最後に挿入するが、このポストRCWはすべてのポストPCWに先行する必要がある。この動作をソフトウェアが行なう場合、連鎖内の最後のポストRCWのNPtr、NC、NP、NTimeの各フィールドを、ポストすべきRCWの対応するフィールドへとそれぞれ複写するとともに、先行するRCWのNC、NP、NPtr、NTimeの各フィールドを、現在の受信要求のポストRCWのタイムスタンプとポインタとに対応するようにセットする。ソフトウェアは次に、RHビット(259)をクリアして、受信回路の動作を再度イネーブルする。次いでソフトウェアは、前回の検査以降に使用されたすべてのプールRCWのなかから当該受信要求に一致するメッセージを検索する。このメッセージが受信されていなければ、ソフトウェアはRCWのBEビット(174)をセットしてバッファをイネーブルする。次にソフトウェアはRSビット(263)のポーリングを行ない、このビットがクリアされるまでポーリングを続ける。RSビット(263)がクリアされると、ソフトウェアはRCWのSビット(207)とBビット(208)とを検査して、要求されたメッセージの受信開始前にバッファのイネーブルが成功したかどうかを調べる。ポストRCWを使用したメッセージの受信開始後にバッファがイネーブルされていれば、ライブラリソフトウェアによってデータをアプリケーションバッファへと複写しなければならない。バッファがイネーブルされる前にプールRCWを使用してメッセージが受信されていれば、仮にポストしたRCWのポストの解除を行なう。ソフトウェアが仮ポストRCWのポストを解除するには、前述のように、ソフトウェアは最初にRHビット(259)をセットしたのち、RSビット(263)のポーリングを行ない、このビット(263)がクリアされるまでポーリングを続ける。RSビット(263)がクリアされると、ソフトウェアは、HTEもしくはポストRCWの連鎖からRCWを外す。要求されたメッセージに加えて、仮ポストRCWを使用して別なメッセージが受信されると、連鎖から外された仮ポストRCWは使用済みのプールRCWとして扱われる。対応するバッファのない使用済みのポストRCWと、使用済みのプールRCWはそれぞれSeqフィールドを有する。このSeqフィールドは、PCWのSeqフィールドから複写されたカウント値から得られる。このカウント値は、PCWが受信回路によって更新される度に、受信回路によって増分される。このため、Seqフィールドを使用すると、プールRCWと仮ポストRCWとに受信されたメッセージの相対順序を決定できる。ポストの解除が間に合わなかった使用済みの仮ポストRCWは、使用済みプールRCWの連鎖のなかで、メッセージの受信順序に対応する場所に挿入する。この場合、受信回路の動作を保留にする必要がないことが注目すべき点である。理由は、これらのプールRCWがすでに使用されているためである。任意のアプリケーションタスクを、スリープ状態に入れたのち、受信要求の完了時にスリープ状態から離脱させたい場合、ソフトウェアは、任意の時点でプールRCWもしくはポストRCWのIRビットをセットすることによって、対応する受信動作の完了時に処理装置割り込み請求を発行することができる。受信動作が完了したか否かは、対応するポストRCWの状態か、もしくは対応するポストRCWのFビットのいずれかをソフトウェアが検査することによって容易に調べることができる。
【0098】
上記の実施例の多数の変形を本発明を使用して実施することができる。以下に例を示す。
【0099】
送信回路がノード番号レジスタからSNNヘッダフィールドを取り出す代りに、SNNフィールドをTCWに付加することによって、メッセージヘッダのSNN(送信元ノード番号)をメッセージごとに命令処理装置によって指定してもよい。このようなシステムは、ノード1個につき複数のアプリケーション処理が実行される場合に有効である。この場合、SNNを使用してメッセージの送信元処理を識別してもよい。
【0100】
メッセージヘッダフィールドのうちいずれかを不用とするシステムでは、これらの不用なフィールドを省略してもよい。たとえば、単一の通信コンテキストのみを使用するシステムにおいてはCommフィールドを省略できる。また無指定の使用を必要としないアプリケーションを実行するシステムでは、検索アルゴリズムを簡略化して、ハッシュテーブル内で該当するHTE1個のみを検索すればよい。
【0101】
上記の実施例では、ハッシュテーブルを、到着するメッセージとポスト受信要求との照合の手段として使用している。これに代えて、ポスト受信要求を保持するための連想メモリを使用してもよい。このような連想メモリには、メッセージをメッセージヘッダから識別するための識別フィールドを設けて、メッセージに対応する受信要求をメモリから返送する。こうした実施例も本発明の範囲から逸脱するものではない。
【0102】
メッセージを受信要求に照合する際に厳密な順序要件を必要としないソフトウェアを使用するシステムでは、前述の実施例で使用したタイムスタンプフィールドや時間比較器を使用しなくてよい。このような変形例も本発明の範囲から逸脱するものではない。
【0103】
また本発明の実施例では、メッセージプールの設置を必ずしも必要としない。受信側のソフトウェアにおいて、受信すべきメッセージが常にあらかじめわかっていれば、受信したメッセージをメッセージプールへと格納する必要はない。このような実施例も本発明の範囲から逸脱しない。
【0104】
【発明の効果】
本発明によれば、ポスト受信要求検索機構をハードウェアで実現することにより、ソフトウェアのオーバヘッドを減らすことによってメッセージの待ち時間を大幅に短縮することができるとともに、MPI(メッセージ通信インタフェース)規格に準じたメッセージ通信ライブラリを簡単に実現することができる。
【図面の簡単な説明】
【図1】メッセージ通信ネットワークに接続された本発明のノードのブロック図である。
【図2】メッセージ通信ネットワークに接続された多重ノードシステムのブロック図である。
【図3】従来のシステムを示すブロック図である。
【図4】本発明によって送受信されるメッセージの形式を示す図である。
【図5】メッセージの送信を要求するために本発明で使用する送信制御語(TCW)の形式を示す図である。
【図6】保留状態の受信要求をポストするために本発明で使用するハッシュテーブルエントリ(HTE)の形式を示す図である。
【図7】データプールとプールRCWの連鎖を管理するために本発明で使用するプール制御語(PCW)の形式を示す図である。
【図8】メッセージの受信を要求するために本発明で使用するポスト受信制御語(ポストRCW)の形式を示す図である。
【図9】受信回路によって更新された後のポストRCWの形式を示す図である。
【図10】保留状態のポストRCWのいずれにも一致しないメッセージを受信するために本発明で使用するプール受信制御語(プールRCW)の形式を示す図である。
【図11】保留状態のポストRCWのいずれにも一致しないメッセージの受信時に受信回路によって更新されたプールRCWの形式を示す図である。
【図12】データプールの形式を示す図である。
【図13】ネットワークインタフェースアダプタ(NIA)の回路図である。
【図14】NIA保留制御レジスタの形式を示す図である。
【図15】NIA動作状態レジスタの形式を示す図である。
【図16】NIA割り込み要求状態レジスタの形式を示す図である。
【図17】送信回路の回路図である。
【図18】送信回路の動作を表わすフローチャートである。
【図19】受信回路の回路図である。
【図20】受信回路の動作の全体を表わすフローチャートである。
【図21】ハッシュテーブル検索制御装置の回路図である。
【図22】ハッシュテーブル検索制御装置の動作を表わすフローチャートである。
【図23】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図24】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図25】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図26】メッセージデータの受信とメッセージの受信の終了とに関する受信回路の動作を表わすフローチャートである。
【符号の説明】
1、50、51、52、901…ノード、2、902…ネットワーク、3、
903…命令処理装置、4、904…ローカルメモリ、
5、905…NIA、6、906…バス、8、908、300…送信回路、
10、910、301…受信回路、12、912…メッセージ、919…シーケンサ、920…ポストレジスタ
320…送信シーケンサ、321…送信DMAC
360…受信シーケンサ、363…ハッシュテーブル検索制御装置、
Claims (19)
- メッセージ転送ネットワークによって相互接続される複数の処理ノードを含むコンピュータシステムであって、
各ノードは、命令処理装置と、前記ネットワークを介して他の処理ノードにメッセージを転送する送信回路と、前記メッセージはヘッダ部とデータ部とを含み、前記ヘッダ部はメッセージを識別するための識別フィールドを有し、
記憶装置と、複数のメッセージを受信するための受信要求であって前記記憶装置に格納される複数の受信要求と、前記受信要求は受信すべきメッセージを指定するメッセージ指定フィールドを有し、前記受信要求はまた受信したメッセージの書き込み場所を指定する情報を含む受信制御フィールドを有し、
受信回路と、前記受信回路は前記ネットワークを介して他の処理ノードから送信された前記メッセージを受信する受信手段と、前記メッセージの受信時に、前記記憶装置に格納された複数の受信要求の中から前記受信したメッセージの前記識別フィールドに対応する前記メッセージ指定フィールドを有する受信要求を検索して確定する検索手段と、任意の受信要求の検索及び確定時に、前記受信制御フィールドを使用して、指定された書き込み場所に受信したメッセージを書き込む動作を含むメッセージの受信動作を制御する受信制御手段とを有することを特徴とするコンピュータシステム。 - 請求項1に記載のコンピュータシステムであって、
前記メッセージの前記識別フィールドは、送信ノードの命令処理装置によって設定される送信コンテキストを識別するコミュニケータフィールドと、メッセージの種類を識別するタグフィールドと、メッセージの送信元を識別する送信元フィールドを含み、前記受信要求の前記メッセージ指定フィールドは、受信コンテキストを指定するコミュニケータ指定フィールドと、メッセージの種類を指定するタグ指定フィールドと、メッセージの送信元を指定する送信元指定フィールドを含み、
前記検索手段は、前記記憶装置を検索して前記受信メッセージの前記コミュニケータフィールドと、前記タグフィールドと、前記送信元フィールドに対応する前記コミュニケータ指定フィールドと、前記タグ指定フィールドと、前記送信元指定フィールドとを含む前記メッセージ指定フィールドを有する前記受信要求を確定することを特徴とするコンピュータシステム。 - 請求項2に記載のコンピュータシステムであって、
前記タグ指定フィールドは、特定のメッセージの種類を指定する特定タグ指定フィールドもしくは前記記憶装置に格納された受信要求のタグ指定フィールドのいずれにも一致しないメッセージに対する無指定タグ指定フィールドのいずれかであり、前記検索手段は、前記記憶装置を検索して、前記受信メッセージの前記タグフィールドに対応する特定タグ指定フィールドもしくは無指定タグ指定フィールドのいずれかを有する受信要求を確定することを特徴とするコンピュータシステム。 - 請求項3に記載のコンピュータシステムであって、
前記送信元指定フィールドは、特定の送信元を指定する特定送信元指定フィールドもしくは前記記憶装置に格納された受信要求の送信元指定フィールドのいずれにも一致しないメッセージに対する無指定送信元指定フィールドのいずれかであり、前記検索手段は、前記記憶装置を検索して、前記受信メッセージの送信元フィールドに対応する特定送信元指定フィールドもしくは無指定送信元指定フィールドのいずれかを有する受信要求を確定することを特徴とするコンピュータシステム。 - 請求項1に記載のコンピュータシステムであって、
前記受信要求は、前記記憶装置内にあるハッシュテーブルの有効なエントリであり、前記検索手段は、前記受信メッセージの前記識別フィールドに対応する前記受信要求を確定するために行なう前記記憶装置の検索において、検索すべき前記受信要求の前記メッセージ指定フィールドのハッシュ値を最初に計算し、前記ハッシュ値は前記ハッシュテーブル内のエントリを検索するための最初のインデックスとして使用され、次いで前記検索手段は、各ハッシュテーブルエントリの検索を前記最初のインデックスから開始して、無効なハッシュテーブルエントリまたは所望の受信要求のいずれかが検出されるまで行なうことを特徴とするコンピュータシステム。 - 請求項5に記載のコンピュータシステムであって、
前記各受信要求は、前記各受信要求が発行された後の相対経過時間を示す時間フィールドをさらに含み、
前記検索手段は、前記受信メッセージに対応する複数の受信要求を検出した場合、各受信要求の前記時間フィールドに基づいて決定された最長経過時間を有する受信要求を確定することを特徴とするコンピュータシステム。 - 請求項1に記載のコンピュータシステムであって、
前記各受信要求は、前記受信制御フィールドが有効かまたは使用中かを示す受信要求有効フィールドを含み、前記検索手段は前記記憶装置の検索において前記有効な受信要求のみを検索し、
前記受信回路は、受信要求無効化手段を有し、任意の受信要求が検索及び確定された場合、前記受信要求無効化手段は、前記受信要求の前記受信要求有効フィールドを変更することによって前記受信要求が使用中であることを示すことを特徴とするコンピュータシステム。 - 請求項7に記載のコンピュータシステムであって、
前記各受信要求は、前記受信要求が持続性受信要求かまたは非持続性受信要求かを示す持続性制御フィールドをさらに含み、前記受信要求無効化手段は、前記持続性受信要求以外の受信要求のみの前記受信要求有効フィールドを変更することを特徴とするコンピュータシステム。 - 請求項7に記載のコンピュータシステムであって、
前記受信制御フィールドは受信制御語アドレスポインタを含み、前記記憶装置には複数の前記受信制御語が格納され、
前記受信制御手段は、任意の受信要求が検索及び確定された場合、前記受信要求の前記受信制御フィールド内の前記受信制御語アドレスポインタを使用して対応する受信制御語を読み出し、前記受信制御語を使用して前記受信回路の前記メッセージの受信動作を制御することを特徴とするコンピュータシステム。 - 請求項9に記載のコンピュータシステムであって、
各受信制御語は、次受信制御語アドレスポインタと、前記次受信制御語アドレスポインタが有効か否かを示す次受信要求有効フィールドとを含み、前記次受信制御語アドレスポインタと前記次受信要求有効フィールドとによって前記複数の受信制御語が連鎖され、該連鎖における最終受信制御語は無効と示された次受信制御語アドレスポインタを含み、
前記受信要求無効化手段は、前記受信制御語が検索及び確定された場合、前記次受信制御語アドレスポインタを前記受信制御フィールドの前記受信制御語アドレスポインタへと複写するとともに、前記次受信要求有効フィールドを前記受信制御フィールドの前記受信要求有効フィールドへと複写し、前記連鎖における前記最終受信制御語が検索及び確定された場合においてのみ前記受信要求が使用中であることを示すように前記受信要求有効フィールドを変更することを特徴とするコンピュータシステム。 - 請求項9に記載のコンピュータシステムであって、
前記受信制御語は、前記受信回路による前記メッセージの受信状態を示す受信状態フィールドを含み、
前記受信回路は、前記受信制御語の前記受信状態フィールドを更新する受信状態更新手段を有することを特徴とするコンピュータシステム。 - 請求項11に記載のコンピュータシステムであって、
前記受信状態更新手段は、前記メッセージの受信開始時に、前記受信状態フィールドを更新し、前記メッセージの受信終了時に、前記受信状態フィールドを再度更新することを特徴とするコンピュータシステム。 - 請求項8に記載のコンピュータシステムであって、
前記受信制御フィールドは受信制御語アドレスポインタを含み、前記受信制御後アドレスポインタは、非持続性受信要求の受信制御語アドレスポインタまたは持続性受信要求のプール制御語アドレスポインタのいずれかであり、前記記憶装置には複数の受信制御語及び複数のプール制御語が格納され、
前記受信制御手段は、前記非持続性受信要求が検索及び確定された場合、前記非持続性受信要求の前記受信制御フィールド内の前記受信制御語アドレスポインタを使用して対応する受信制御語を読み出し、前記受信制御語を使用して前記受信回路の前記メッセージの受信動作を制御し、
前記持続性受信要求が検索及び確定された場合、前記持続性受信要求の前記受信制御フィールド内の前記プール制御語アドレスポインタを使用して対応するプール制御語を読み出し、前記プール制御語を使用して前記受信回路の前記メッセージの受信動作を制御することを特徴とするコンピュータシステム。 - 請求項13に記載のコンピュータシステムであって、
各受信制御語またはプール制御語は、次制御語アドレスポインタと、前記次制御語アドレスポインタが有効か否かを示す次受信要求有効フィールドと、次制御語アドレスポインタが次受信制御語アドレスポインタまたは次プール制御語アドレスポインタのいずれであるかを示す次持続性制御フィールドとを含み、次制御語アドレスポインタと次受信要求有効フィールドとによって前記複数の受信制御語またはプール制御語が連鎖され、該連鎖における最終受信制御語または最終プール制御語は無効と示された次制御語アドレスポインタを含み、
前記受信要求無効化手段は、前記受信制御語またはプール制御語が検索及び確定された場合、前記次制御語アドレスポインタを前記受信制御フィールドの前記受信制御語アドレスポインタへ複写し、前記次持続性制御フィールドを前記持続性制御フィールドへ複写し、対応する次受信要求有効フィールドを前記受信要求有効フィールドへ複写し、前記連鎖における前記最終受信制御語が検索及び確定された場合であって、前記最終受信制御語の前記次持続性制御フィールドが、次制御語アドレスポインタが次プール制御語アドレスポインタであることを示す場合においてのみ前記受信要求が持続性であることを示すように前記持続性制御フィールドを変更し、前記プール制御語が連鎖されていない場合であって、前記連鎖における前記最終受信制御語が検索及び確定された場合においてのみ前記受信要求が使用中であることを示すように前記受信要求有効フィールドを変更することを特徴とするコンピュータシステム。 - 請求項13に記載のコンピュータシステムであって、
前記記憶装置に形成され、前記記憶装置の空き記憶領域である複数のデータプールと、前記記憶装置に形成され、複数の受信状態語が格納される複数の受信状態語プールと、各プール制御語は前記データプールと前記受信状態語プールとを管理する制御情報を含み、
前記受信回路は、前記プール制御語に対応するデータプールにプール受信バッファを割り当て、前記受信したメッセージの前記データ部を前記プール受信バッファに書き込み、また、前記プール制御語に対応する受信状態語プールに前記受信状態語を割り当て、前記受信したメッセージに関する状態情報及び制御情報を前記受信状態語に記録するプール受信手段を有することを特徴とするコンピュータシステム。 - 請求項15に記載のコンピュータシステムであって、
各受信制御語は、前記記憶装置に形成された受信バッファを指すアドレスポインタと、前記受信バッファの使用を許可する受信バッファ許可フィールドと、前記受信バッファの使用が許可されない場合に、前記受信回路によって使用される前記プール制御語を指すプール制御語アドレスポインタとを含み、
前記受信回路は、前記受信バッファの使用が許可される場合に、前記受信したメッセージの前記アドレスポインタを使用して前記データ部を前記受信バッファに書き込む受信バッファ手段をさらに有し、
前記受信制御語において前記受信バッファの使用が許可されない場合、前記プール受信手段は、前記受信制御語内の前記プール制御語アドレスポインタを使用して前記プール制御語を検索及び確定し、前記プール制御語に対応するデータプールに前記プール受信バッファを割り当て、前記受信したメッセージの前記データ部を前記プール受信バッファに書き込むことを特徴とするコンピュータシステム。 - 請求項16に記載のコンピュータシステムであって、
前記プール制御語は、受信シーケンスフィールドを含み、前記受信制御語は、受信状態フィールドを含み、
前記プール受信手段は、前記プール制御語を使用して前記メッセージを受信する際、前記受信シーケンスフィールドを増分する手段と、前記プール制御語における前記受信シーケンスフィールドの現在値を記録する手段とを有することを特徴とするコンピュータシステム。 - 請求項1に記載のコンピュータシステムであって、
前記受信制御フィールドは、前記記憶装置に形成された受信バッファを指すアドレスポインタを含み、
前記受信回路は、前記受信したメッセージの前記受信制御フィールド内の前記アドレスポインタを使用して前記データ部を前記受信バッファに書き込む受信バッファ手段を有することを特徴とするコンピュータシステム。 - 請求項18に記載のコンピュータシステムであって、
各受信制御フィールドは、前記受信バッファの大きさを示すサイズフィールドをさらに含み、
前記受信回路は、前記受信したメッセージの前記データ部の長さを前記受信バッファに対応する前記サイズフィールドと比較する長さ検査手段を有することを特徴とするコンピュータシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP10132097A JP3697831B2 (ja) | 1997-04-18 | 1997-04-18 | コンピュータシステム |
US09/061,328 US6125399A (en) | 1997-04-18 | 1998-04-17 | Computer system including a plurality of nodes for transferring through a data transfer network messages having distinguishing fields used for distinguishing the messages and controlling receipt thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP10132097A JP3697831B2 (ja) | 1997-04-18 | 1997-04-18 | コンピュータシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10293754A JPH10293754A (ja) | 1998-11-04 |
JP3697831B2 true JP3697831B2 (ja) | 2005-09-21 |
Family
ID=14297528
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP10132097A Expired - Fee Related JP3697831B2 (ja) | 1997-04-18 | 1997-04-18 | コンピュータシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US6125399A (ja) |
JP (1) | JP3697831B2 (ja) |
Families Citing this family (72)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE200373T1 (de) * | 1997-10-13 | 2001-04-15 | X Way Rights B V | Verfahren und vorrichtung zur strukturierten kommunikation |
US6412018B1 (en) * | 1998-08-19 | 2002-06-25 | International Business Machines Corporation | System for handling asynchronous message packet in a multi-node threaded computing environment |
US6385659B1 (en) * | 1998-08-19 | 2002-05-07 | International Business Machines Corporation | Handling of asynchronous message packet in a multi-node threaded computing environment |
US6415332B1 (en) * | 1998-08-19 | 2002-07-02 | International Business Machines Corporation | Method for handling of asynchronous message packet in a multi-node threaded computing environment |
US6711206B1 (en) * | 1998-09-25 | 2004-03-23 | Intel Corporation | Modem using a digital signal processor and separate transmit and receive sequencers |
US6502138B2 (en) * | 1998-09-25 | 2002-12-31 | Intel Corporation | Modem with code execution adapted to symbol rate |
US6625208B2 (en) * | 1998-09-25 | 2003-09-23 | Intel Corporation | Modem using batch processing of signal samples |
US6661848B1 (en) | 1998-09-25 | 2003-12-09 | Intel Corporation | Integrated audio and modem device |
US6711205B1 (en) | 1998-09-25 | 2004-03-23 | Intel Corporation | Tone detector for use in a modem |
US6374312B1 (en) * | 1998-09-25 | 2002-04-16 | Intel Corporation | System for dedicating a host processor to running one of a plurality of modem programs and dedicating a DSP to running another one of the modem programs |
US6490628B2 (en) * | 1998-09-25 | 2002-12-03 | Intel Corporation | Modem using a digital signal processor and a signal based command set |
US6834343B1 (en) * | 1999-05-27 | 2004-12-21 | Microsoft Corporation | Method for watermarking computer programs |
US7069335B1 (en) * | 1999-08-10 | 2006-06-27 | Microsoft Corporation | Method and system for exchanging messages between entities on a network comprising an actor attribute and a mandatory attribute in the header data structure |
US6782537B1 (en) * | 1999-09-23 | 2004-08-24 | International Business Machines Corporation | Establishing a communicator across multiple processes in a multithreaded computing environment |
US6954799B2 (en) * | 2000-02-01 | 2005-10-11 | Charles Schwab & Co., Inc. | Method and apparatus for integrating distributed shared services system |
US7039050B1 (en) * | 2000-02-16 | 2006-05-02 | Tibco Software Inc. | Intra-process message switch |
DE60036024D1 (de) * | 2000-04-20 | 2007-09-27 | Nokia Corp | Kommunikationsendgerät |
US6553438B1 (en) * | 2000-04-24 | 2003-04-22 | Intel Corporation | Methods and system for message resource pool with asynchronous and synchronous modes of operation |
US6647428B1 (en) * | 2000-05-05 | 2003-11-11 | Luminous Networks, Inc. | Architecture for transport of multiple services in connectionless packet-based communication networks |
FR2824215B1 (fr) * | 2001-04-27 | 2003-07-18 | Canon Kk | Procede et dispositif de traitement d'un message dans un reseau de communication |
US7577631B2 (en) * | 2001-09-10 | 2009-08-18 | Feldhake Michael J | Cognitive image filtering |
US7464138B2 (en) * | 2002-03-29 | 2008-12-09 | International Business Machines Corporation | Mirror queue in a shared queue environment |
US7404061B2 (en) * | 2005-02-14 | 2008-07-22 | Jordan David A | Permanent pool memory management method and system |
US8510491B1 (en) * | 2005-04-05 | 2013-08-13 | Oracle America, Inc. | Method and apparatus for efficient interrupt event notification for a scalable input/output device |
US7653070B2 (en) * | 2005-06-07 | 2010-01-26 | Broadcom Corporation | Method and system for supporting efficient and cache-friendly TCP session lookup operations based on canonicalization tags |
US8176222B2 (en) | 2008-02-14 | 2012-05-08 | International Business Machines Corporation | Early termination of an I/O operation in an I/O processing system |
US8196149B2 (en) | 2008-02-14 | 2012-06-05 | International Business Machines Corporation | Processing of data to determine compatability in an input/output processing system |
US8312189B2 (en) | 2008-02-14 | 2012-11-13 | International Business Machines Corporation | Processing of data to monitor input/output operations |
US7890668B2 (en) | 2008-02-14 | 2011-02-15 | International Business Machines Corporation | Providing indirect data addressing in an input/output processing system where the indirect data address list is non-contiguous |
US8095847B2 (en) * | 2008-02-14 | 2012-01-10 | International Business Machines Corporation | Exception condition handling at a channel subsystem in an I/O processing system |
US8478915B2 (en) | 2008-02-14 | 2013-07-02 | International Business Machines Corporation | Determining extended capability of a channel path |
US8166206B2 (en) | 2008-02-14 | 2012-04-24 | International Business Machines Corporation | Cancel instruction and command for determining the state of an I/O operation |
US8117347B2 (en) | 2008-02-14 | 2012-02-14 | International Business Machines Corporation | Providing indirect data addressing for a control block at a channel subsystem of an I/O processing system |
US7941570B2 (en) | 2008-02-14 | 2011-05-10 | International Business Machines Corporation | Bi-directional data transfer within a single I/O operation |
US9052837B2 (en) | 2008-02-14 | 2015-06-09 | International Business Machines Corporation | Processing communication data in a ships passing condition |
JP4621747B2 (ja) | 2008-02-15 | 2011-01-26 | 株式会社東芝 | 通信制御装置および情報処理装置 |
US8249072B2 (en) * | 2009-03-12 | 2012-08-21 | Oracle America, Inc. | Scalable interface for connecting multiple computer systems which performs parallel MPI header matching |
US8387067B2 (en) * | 2008-03-14 | 2013-02-26 | Lsi Corporation | Method for tracking and/or verifying message passing in a simulation environment |
EP2307954A2 (en) * | 2008-06-30 | 2011-04-13 | University Of Oslo | Method for event-based intergration using on-the-fly matching |
US8843651B2 (en) | 2009-06-30 | 2014-09-23 | Oracle America, Inc. | Software aware throttle based flow control |
US8122301B2 (en) * | 2009-06-30 | 2012-02-21 | Oracle America, Inc. | Performing remote loads and stores over networks |
US8234407B2 (en) * | 2009-06-30 | 2012-07-31 | Oracle America, Inc. | Network use of virtual addresses without pinning or registration |
US9596186B2 (en) * | 2009-06-30 | 2017-03-14 | Oracle America, Inc. | Multiple processes sharing a single infiniband connection |
US8095617B2 (en) * | 2009-06-30 | 2012-01-10 | Oracle America Inc. | Caching data in a cluster computing system which avoids false-sharing conflicts |
US8332542B2 (en) | 2009-11-12 | 2012-12-11 | International Business Machines Corporation | Communication with input/output system devices |
US8677027B2 (en) | 2011-06-01 | 2014-03-18 | International Business Machines Corporation | Fibre channel input/output data routing system and method |
US8364854B2 (en) | 2011-06-01 | 2013-01-29 | International Business Machines Corporation | Fibre channel input/output data routing system and method |
US8583988B2 (en) | 2011-06-01 | 2013-11-12 | International Business Machines Corporation | Fibre channel input/output data routing system and method |
US9021155B2 (en) | 2011-06-01 | 2015-04-28 | International Business Machines Corporation | Fibre channel input/output data routing including discarding of data transfer requests in response to error detection |
US8738811B2 (en) | 2011-06-01 | 2014-05-27 | International Business Machines Corporation | Fibre channel input/output data routing system and method |
US8473641B2 (en) | 2011-06-30 | 2013-06-25 | International Business Machines Corporation | Facilitating transport mode input/output operations between a channel subsystem and input/output devices |
US8312176B1 (en) | 2011-06-30 | 2012-11-13 | International Business Machines Corporation | Facilitating transport mode input/output operations between a channel subsystem and input/output devices |
US8549185B2 (en) | 2011-06-30 | 2013-10-01 | International Business Machines Corporation | Facilitating transport mode input/output operations between a channel subsystem and input/output devices |
US9146776B1 (en) | 2011-08-16 | 2015-09-29 | Marvell International Ltd. | Systems and methods for controlling flow of message signaled interrupts |
US9128920B2 (en) * | 2011-11-30 | 2015-09-08 | Marvell World Trade Ltd. | Interrupt handling systems and methods for PCIE bridges with multiple buses |
US8918542B2 (en) | 2013-03-15 | 2014-12-23 | International Business Machines Corporation | Facilitating transport mode data transfer between a channel subsystem and input/output devices |
US8990439B2 (en) | 2013-05-29 | 2015-03-24 | International Business Machines Corporation | Transport mode data transfer between a channel subsystem and input/output devices |
US9582426B2 (en) * | 2013-08-20 | 2017-02-28 | International Business Machines Corporation | Hardware managed compressed cache |
US9325658B2 (en) * | 2014-02-05 | 2016-04-26 | International Business Machines Corporation | Providing contextual relevance of an unposted message to an activity stream after a period of time elapses |
US9442941B1 (en) * | 2014-03-28 | 2016-09-13 | Emc Corporation | Data structure for hash digest metadata component |
EP2947848B1 (en) * | 2014-05-20 | 2018-07-11 | 2236008 Ontario Inc. | System and method for granting permission for a machine action |
US10574733B2 (en) * | 2015-09-18 | 2020-02-25 | Intel Corporation | Technologies for handling message passing interface operations |
US10152527B1 (en) | 2015-12-28 | 2018-12-11 | EMC IP Holding Company LLC | Increment resynchronization in hash-based replication |
US10324782B1 (en) | 2016-03-24 | 2019-06-18 | Emc Corporation | Hiccup management in a storage array |
US10705907B1 (en) | 2016-03-24 | 2020-07-07 | EMC IP Holding Company LLC | Data protection in a heterogeneous random access storage array |
US10101934B1 (en) | 2016-03-24 | 2018-10-16 | Emc Corporation | Memory allocation balancing for storage systems |
US9857990B1 (en) | 2016-03-24 | 2018-01-02 | EMC IP Holding Company LLC | Fast startup for modular storage systems |
DE102016206109A1 (de) * | 2016-04-13 | 2017-10-19 | Robert Bosch Gmbh | Speicherdirektzugriffssteuereinrichtung für mindestens eine einen Arbeitsspeicher aufweisende Recheneinheit |
US10152371B1 (en) | 2016-09-30 | 2018-12-11 | EMC IP Holding Company LLC | End-to-end data protection for distributed storage |
US10255172B1 (en) | 2016-09-30 | 2019-04-09 | EMC IP Holding Company LLC | Controlled testing using code error injection |
US10223008B1 (en) | 2016-09-30 | 2019-03-05 | EMC IP Holding Company LLC | Storage array sizing for compressed applications |
JPWO2021161909A1 (ja) * | 2020-02-13 | 2021-08-19 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4723208A (en) * | 1981-07-31 | 1988-02-02 | Norand Corporation | System and method for communication between nodes of a closed loop local communication path |
US5377327A (en) * | 1988-04-22 | 1994-12-27 | Digital Equipment Corporation | Congestion avoidance scheme for computer networks |
GB8821410D0 (en) * | 1988-09-13 | 1988-10-12 | Int Computers Ltd | Data processing system |
US5167019A (en) * | 1989-06-23 | 1992-11-24 | Digital Equipment Corporation | Apparatus and method for interconnecting a plurality of devices to a single node in a node-limited serial data bus computer network |
AU639088B2 (en) * | 1990-04-13 | 1993-07-15 | Digital Equipment Corporation | Telecommunications network with plesiochronous transfer mode |
EP0608653A1 (en) * | 1993-01-26 | 1994-08-03 | International Business Machines Corporation | Method and system for routing information between nodes in a communication network |
US5530806A (en) * | 1994-12-15 | 1996-06-25 | At&T Corp. | Method and apparatus for storing and retrieving routing information in a network node |
-
1997
- 1997-04-18 JP JP10132097A patent/JP3697831B2/ja not_active Expired - Fee Related
-
1998
- 1998-04-17 US US09/061,328 patent/US6125399A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH10293754A (ja) | 1998-11-04 |
US6125399A (en) | 2000-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3697831B2 (ja) | コンピュータシステム | |
US7533197B2 (en) | System and method for remote direct memory access without page locking by the operating system | |
US8024489B2 (en) | System for communicating command parameters between a processor and a memory flow controller | |
EP0646876B1 (en) | Message passing system for distributed shared memory multiprocessor system and message passing method using the same | |
US8499102B2 (en) | Managing read requests from multiple requestors | |
US7930457B2 (en) | Channel mechanisms for communicating with a processor event facility | |
US5418913A (en) | System of two-way communication between processors using a single queue partitioned with pointers and limited overwrite privileges | |
JP2977688B2 (ja) | マルチプロセッシング装置、方法、及びこれらに使用するプロセッサ | |
JP3871305B2 (ja) | マルチプロセッサ・システムにおけるメモリ・アクセスの動的直列化 | |
US7869459B2 (en) | Communicating instructions and data between a processor and external devices | |
US20030145136A1 (en) | Method and apparatus for implementing a relaxed ordering model in a computer system | |
US20080109573A1 (en) | RDMA systems and methods for sending commands from a source node to a target node for local execution of commands at the target node | |
JP4317365B2 (ja) | 周辺デバイスからホスト・コンピュータ・システムに割込みを転送する方法および装置 | |
EP1200897B1 (en) | Mechanism for reordering transactions in computer systems with snoop-based cache consistency protocols | |
US5742843A (en) | Control system for access between processing elements in a parallel computer | |
EP3433746A1 (en) | Contended lock request elision scheme | |
US20080109604A1 (en) | Systems and methods for remote direct memory access to processor caches for RDMA reads and writes | |
WO2008057833A2 (en) | System and method for remote direct memory access without page locking by the operating system | |
JP5558713B2 (ja) | データ処理システム内でプロセッサ内のイベントに関連する命令およびデータを伝達するための方法 | |
US8560776B2 (en) | Method for expediting return of line exclusivity to a given processor in a symmetric multiprocessing data processing system | |
JP3122606B2 (ja) | メッセージ受信制御方式 | |
JPH0863442A (ja) | マルチプロセッサシステム | |
JPH04291660A (ja) | プロセッサ間通信方法およびそのための並列プロセッサ | |
JPH04195576A (ja) | キャッシュメモリ方式 | |
JPH0581210A (ja) | クラスタ・マルチプロセツサ協調処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050125 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050328 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050614 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050627 |
|
LAPS | Cancellation because of no payment of annual fees |