(57)【特許請求の範囲】
【請求項１】
少なくとも２以上のノードと、前記２以上のノード間を接続するネットワークとからなり、各ノード間で前記ネットワークを介してメッセージ通信を行う並列プロセッサにおいて、
各ノードは、前記ネットワークに対するメッセージの送受信処理を行うインターフェース制御部と、前記インターフェース制御部に対してメッセージの送信要求を送出するプロセッサとを有し、
前記インターフェース制御部は、前記プロセッサとは独立に、前記ネットワークから受信したメッセージに対する受信確認メッセージを返送し、前記受信確認メッセージは前記受信したメッセージを特定する情報を含むことを特徴とする並列プロセッサ。
【請求項２】
前記インターフェース制御部は、前記ネットワークからメッセージを受信する受信手段と、受信したメッセージに含まれる所定の情報に基づいて受信確認メッセージを生成する生成手段と、生成したメッセージを前記ネットワークに送信する送信手段とを有することを特徴とする請求の範囲の第１項記載の並列プロセッサ。
【請求項３】
前記生成手段は、受信したメッセージに含まれる所定の情報に基づいて受信確認メッセージ送信要求を生成するACK要求手段と、前記ACK要求手段からの受信確認メッセージ送信要求に応じて受信確認メッセージを生成するメッセージ生成手段とを有することを特徴とする請求の範囲の第２項記載の並列プロセッサ。
【請求項４】
前記メッセージ生成手段は、前記プロセッサから送出されたメッセージ送信要求に応じてメッセージを生成するものであり、且つ、前記ACK要求手段からの受信確認メッセージ送信要求と前記プロセッサからのメッセージ送信要求とが競合した場合、受信確認メッセージ送信要求を優先して選択する選択手段を有することを特徴とする請求の範囲の第３項記載の並列プロセッサ。
【請求項５】
メッセージは、該メッセージに対して受信確認メッセージの返送が必要か否かを指定するACK制御情報を含み、前記受信手段は、受信したメッセージに含まれる前記ACK制御情報を参照して受信確認メッセージの返送が必要か否かを判定する判定手段と、受信確認メッセージの返送が必要と判定した場合に、受信したメッセージに含まれる所定の情報を抽出して前記生成手段に送る抽出手段とを有することを特徴とする請求の範囲の第２項記載の並列プロセッサ。
【請求項６】
前記生成手段は、前記メッセージ生成手段が直ちにACK要求手段からの受信確認メッセージ送信要求を受け取れない場合に、受信確認メッセージ送信要求を一時保持し、前記メッセージ生成手段が受け取れる状態になると保持していた受信確認メッセージ送信要求を送るキューイング手段を有することを特徴とする請求の範囲の第３項記載の並列プロセッサ。
【請求項７】
前記生成手段は、更に、受信確認メッセージ送信要求を前記ACK要求手段から受け取り、前記キューイング手段に送る第１の保持手段と、前記キューイング手段と前記第１の保持手段に受信確認メッセージ送信要求が最大数保持されたときに計時を開始する計時手段と、前記計時手段が所定時間を計時した場合、所定時間が経過したことを前記プロセッサに通知する通知手段とを有し、前記プロセッサは、前記通知手段からの通知を受けた場合、前記第１の保持手段から受信確認メッセージ送信要求を取り出して一時保持する第２の保持手段と、前記ACK要求手段から前記第１の保持手段に新たな受信確認メッセージ送信要求が送られてこない場合、前記第２の保持手段に保持した受信確認メッセージ送信要求を取り出して前記第１の保持手段に書き込む書込手段とを有することを特徴とする請求の範囲の第６項記載の並列プロセッサ。
【請求項８】
複数のノードと、前記複数のノード間の接続するネットワークとからなり、各ノード間で前記ネットワークを介してメッセージ通信を行う並列プロセッサにおいて、
各ノードは、前記ネットワークに対するメッセージの送受信処理を行うインターフェース制御部と、前記インターフェース制御部に対してメッセージの送信要求を送出するプロセッサとを有し、
前記インターフェース制御部は、前記ネットワークからメッセージを受信する受信制御部と、メッセージ送信要求に応じてメッセージを生成し、前記ネットワークに送信する送信制御部と、前記プロセッサとは独立に、前記受信制御部が受信したメッセージに含まれる所定の情報に基づいて受信確認メッセージ送信要求を生成し、該受信確認メッセージ送信要求を前記送信制御部に送出するACK生成部とを有し、前記送信制御部から送信される受信確認メッセージは前記受信したメッセージを特定する情報を含むことを特徴とする並列プロセッサ。
【請求項９】
前記送信制御部は、前記送信制御部に対する前記プロセッサからのメッセージ送信要求と前記ACK生成部からの受信確認メッセージ送信要求とが競合した場合、前記受信確認メッセージ送信要求を優先して選択する選択手段を有することを特徴とする請求の範囲の第８項記載の並列プロセッサ。
【請求項１０】
メッセージは、該メッセージに対する受信確認メッセージの返送が必要か否かを指定するACK制御情報を含み、前記受信制御部は、受信したメッセージに含まれる前記ACK制御情報を参照して受信確認メッセージの返送が必要か否かを判定する判定手段と、受信確認メッセージの返送が必要と判定した場合、受信したメッセージに含まれる所定の情報を抽出して前記ACK生成部に送る抽出手段とを有することを特徴とする請求の範囲の第９項記載の並列プロセッサ。
【請求項１１】
前記インターフェース制御部は、前記送信制御部が直ちにACK生成部からの受信確認メッセージ送信要求を受け取れない場合に、受信確認メッセージ送信要求を一時保持し、前記送信制御部が受け取れる状態になると保持していた受信確認メッセージ送信要求を前記送信制御部に送るACKキューを有することを特徴とする請求の範囲の第８項記載の並列プロセッサ。
【請求項１２】
前記インタフェース制御部は、更に、受信確認メッセージ送信要求を前記ACK生成部から受け取り、前記ACKキューに送るACKレジスタと、前記ACKキューと前記ACKレジスタとに受信確認メッセージ送信要求が最大数保持されたときに計時を開始するタイマと、前記タイマの計時が所定時間を経過した場合、所定時間が経過したことを前記プロセッサに通知する通知手段とを有し、前記プロセッサは、前記通知手段からの通知を受けた場合、前記ACKレジスタから受信確認メッセージ送信要求を取り出して一時保持する保持手段と、前記ACK生成部から前記ACKキューに新たな受信確認メッセージ送信要求が送られてこない場合、前記保持手段に保持した受信確認メッセージ送信要求を取り出して前記ACKレジスタに書き込む書込手段とを有することを特徴とする請求の範囲の第11項記載の並列プロセッサ。
【請求項１３】
複数のノードと、前記複数のノード間を接続するネットワークとからなり、各ノードは、前記ネットワークに対するメッセージの送受信処理を行うインターフェース制御部と、前記インターフェース制御部に対してメッセージの送信要求を行うプロセッサとを有し、前記プロセッサの要求により各ノード間で前記ネットワークを介してメッセージ通信を行う並列プロセッサのメッセージ通信方法において、
前記複数のノードのうちの任意のノード（以下、送信側ノード）の前記インターフェース制御部が前記プロセッサの要求に応じて他の任意の１つまたは２以上の任意のノード（以下、受信側ノード）に対してメッセージを送信し、前記受信側ノードの前記インタフェース制御部が前記ネットワークを介して前記メッセージを受信し、前記プロセッサとは独立に前記メッセージに対する受信確認メッセージを生成し、前記受信確認メッセージを前記送信側ノードに返送し、前記受信確認メッセージに前記受信したメッセージを特定する情報を含めることを特徴とする並列プロセッサのメッセージ通信方法。
【請求項１４】
前記受信側ノードの前記インターフェース制御部は、前記受信確認メッセージの生成、返送と並行して、または、前記受信確認メッセージの返送後に前記プロセッサへ前記メッセージを受信したことを通知することを特徴とする請求の範囲の第１３項記載の並列プロセッサのメッセージ通信方法。
【請求項１５】
前記受信側ノードの前記インターフェース制御部は、前記受信確認メッセージを生成する際に、前記プロセッサからメッセージ送信要求を受け取った場合には、前記受信確認メッセージを優先して生成し、前記送信側ノードに返送し、その後、前記プロセッサからのメッセージ送信要求に応じてメッセージを生成し、送信することを特徴とする請求の範囲の第１３項記載の並列プロセッサのメッセージ通信方法。
【請求項１６】
前記送信側ノードの前記インタフェース制御部は、送信しようとするメッセージに対して前記受信側ノードが前記受信確認メッセージの返送が必要か否かを指定するACK制御情報を前記メッセージに含めて送信し、前記受信側ノードの前記インタフェース制御部は、前記メッセージに含まれた前記ACK制御情報を参照し、前記ACK制御情報に従って前記受信確認メッセージを返送することを特徴とする請求の範囲の第１３項記載の並列プロセッサのメッセージ通信方法。
【請求項１７】
前記送信側ノードの前記インタフェース制御部は、更に、前記受信側ノードから前記受信確認メッセージを受信したときに前記プロセッサに通知する必要があるか否かを指定する情報を前記ACK制御情報として前記メッセージに含めて送信し、前記受信側ノードの前記インタフェース制御部は、前記メッセージに含まれた前記ACK制御情報を抽出し、前記受信確認メッセージに前記ACK制御情報を含めて返送し、前記送信側ノードの前記インタフェース制御部は、前記受信確認メッセージを受信し、前記受信確認メッセージに含まれた前記ACK制御情報を参照し、前記ACK制御情報に従って前記プロセッサへの通知を行うことを特徴とする請求の範囲の第１６項記載の並列プロセッサのメッセージ通信方法。
【請求項１８】
前記送信側ノードまたは前記受信側ノードの前記インターフェース制御部は、送信しようとするメッセージに対応したメッセージの種類を示すメッセージタイプ情報を前記メッセージまたは前記受信確認メッセージに含めて送信し、いずれかのメッセージを受信した前記送信側ノードまたは前記受信側ノードの前記インターフェース制御部は、受信したメッセージに含まれた前記メッセージタイプ情報を参照してメッセージの種類を認識することを特徴とする請求の範囲の第１７項記載の並列プロセッサのメッセージ通信方法。
【請求項１９】
前記受信側ノードの前記インターフェース制御部は、前記メッセージの受信状態に対応した前記受信確認メッセージの種類を示すACK状態情報を生成し、前記ACK状態情報を前記受信確認メッセージに含めて返送し、前記受信確認メッセージを受信したことの通知を受けた前記プロセッサは、前記ACK状態情報を参照し、前記受信確認メッセージの種類を認識することを特徴とする請求の範囲の第１７項記載の並列プロセッサのメッセージ通信方法。
【請求項２０】
前記各ノードに、受信したメッセージを格納する第１、第２のメッセージ受信領域を用意し、前記受信側ノードの前記インターフェース制御部は、前記受信確認メッセージの生成、返送と並行して前記メッセージを前記第１のメッセージ受信領域に格納すると共に、前記第１のメッセージ受信領域に前記メッセージを格納したことを示す情報を含む第１の受信確認メッセージを生成し、前記送信側ノードに返送し、前記プロセッサへ前記メッセージを受信したことを通知し、前記プロセッサは、前記第１のメッセージ受信領域に格納された前記メッセージを読み出し、前記第２のメッセージ受信領域に格納し、前記第２のメッセージ受信領域に前記メッセージを格納したことを示す情報を含む第２の受信確認メッセージを生成し、前記送信側ノードに返送することを特徴とする請求の範囲の第１３項記載の並列プロセッサのメッセージ通信方法。
【発明の詳細な説明】
技術分野
本発明は、ネットワークにより接続された複数のノードを有し、各ノード間でメッセージ通信を行う並列プロセッサに係り、特にメッセージ通信の際に受信確認メッセージを返送する並列プロセッサに関する。
背景技術
並列プロセッサにおける各ノード間のメッセージ通信に対して高い信頼性を付与するための１つの方法として、メッセージを受信した側のノード（以下、受信側ノードという。）からメッセージを受信したことを通知する受信確認メッセージ（以下、ACKメッセージという。）をメッセージを送信した側のノード（以下、送信側ノードという。）へ返送するということが行われている。
例えば、所定の時間が経過するまで受信側ノードから送信側ノードへACKメッセージが返ってこない場合には、送信側ノードは送信したメッセージと同一のメッセージを再度生成し、受信側ノードに再送することによって、何らかの理由により消失したメッセージを補うことが可能である。また、受信側ノードからACKメッセージが返ってくれば、送信側ノードにおいてメッセージの再送に備えて変更を禁止し、保存していた送信データとメッセージ送信に必要な制御情報（以下、メッセージ送信制御ワードという。）の格納領域をノード内のメモリから解放することができる。
第７図は、一般的な並列プロセッサの構成を示す図である。
第７図において、ノード１、ノード２…ノードＮがネットワーク７０を介して接続されている。また、各ノードは、ノード１に示すように、ノードをネットワーク７０に接続し、ネットワーク７０との通信制御を行うネットワークインターフェース制御部７００、プロセッサ７２０、ソフトウエア及び各種情報を格納するメモリ７３０、ネットワークインターフェース制御部７００及びプロセッサ７２０からのメモリ７３０に対するアクセス要求を制御するメモリ制御部７１０から構成される。
このような並列プロセッサにおいて、例えばノード２からノード１にメッセージが送られる場合、従来では、このメッセージに対するACKメッセージは、ノード１のプロセッサ７２０が受信メッセージを処理するソフトウエアを実行することにより、ノード２からのメッセージの内容及び受信状態から送信データとメッセージ送信制御ワードを準備し、これらからACKメッセージを生成し、ノード２へ返送していた。具体的に説明すると、ノード２からノード１にメッセージが送信されると、ノード１のメモリインターフェース制御部７００がこのメッセージを受信し、これが自ノード宛のメッセージか否か等を判定し、受信メッセージをメモリ７３０の所定の領域に格納する。格納し終えると、メモリインターフェース制御部７００はプロセッサ７２０に対して割り込みによりメッセージを受信したことを通知する。受信通知されたプロセッサ７２０では、受信メッセージを処理するためのソフトウエアを起動する。そして、このソフトウエアを実行して、メモリ７３０に格納された受信メッセージに対して正常に受信されたか、誰から送られたか等の解釈を行い、このメッセージに対するACKメッセージの返送に必要なメッセージ送信制御ワードを準備し、これに従って、ACKメッセージを生成して返送する。
このように従来技術では、受信側ノードでACKメッセージを返送する場合、受信側ノードにおいてメッセージが正常に受信された場合でも、割り込みによるプロセッサへのメッセージ受信通知、ACKメッセージの生成、返送のためのソフトウエアのスケジューリング、当該ソフトウエアの実行によるメッセージの解釈等の処理を行う必要があり、ACKメッセージが受信側ノードから送信側ノードへ返ってくるまでに著しく長い時間がかかってしまう。そのため、送信側ノードで再送に備えて保存しておく送信データ及びメッセージ送信制御ワードの保存期間が長くなり、その分、他のメッセージ送信のための送信データ及びメッセージ送信制御ワードを格納する領域をメモリ内に確保できず、メッセージ通信の処理性能が低下してしまったり、或いは、それを防ぐために必要なメモリ容量が大きくなってしまうという問題がある。
また、受信側ノードにおいても、上記のようなACKメッセージの返送準備を行う必要があるため、ACKメッセージを返送しない場合に比べてプロセッサのオーバヘッドが増えるという問題がある。また、受信側ノードにおいてメッセージが正常に受信されなかった場合には、受信情報が残せる場合を除いて受信側ノードからACKメッセージを返すことができないため、送信側ノードにおいてエラーに応じた適切な処理を行うことができないという問題がある。
本発明の目的は、並列プロセッサ内の各ノードにおいて、メッセージを受信した場合にプロセッサの処理を必要とすることなくACKメッセージを返送することのできる手段を提供することにある。
そして、これによって再送に備えて保存している送信データ及びメッセージ送信制御ワードの格納領域を早期に解放可能とすること、プロセッサの処理によりACKメッセージを返送する場合に必要とされる受信側ノードにおけるプロセッサの負荷を低減すること、更に、受信側ノードでメッセージを正常に受信できない状況においてもできる限りACKメッセージを送信側ノードに返して、送信側ノードにおいてエラーに応じた適切な処理を行うことができるようにする。
発明の開示
本発明は、少なくとも２以上のノードと、この２以上のノード間を接続するネットワークとからなり、各ノード間でネットワークを介してメッセージ通信を行う並列プロセッサにおいて、各ノードは、ネットワークに対してメッセージの送受信処理を行うインターフェース制御部と、インターフェース制御部に対してメッセージの送信要求を送出するプロセッサとを有し、インターフェース制御部が、プロセッサとは独立に、ネットワークから受信したメッセージの所定の情報に基づいてACKメッセージを生成、返送する手段を有するものである。
本発明によれば、受信側ノードにおいてプロセッサによる処理を必要とすることなく、インターフェース制御部のみの処理によってACKメッセージを生成、返送することが可能となる。
【図面の簡単な説明】
第１図は、本発明の一実施例にかかる並列プロセッサ及びノードの構成を示す図である。
第２図は、第１図の各ノードにおいてメッセージ送信時に使用するメッセージ送信制御ワードの形式を示す図である。
第３図は、第１図の並列プロセッサにおけるメッセージパケットの形式を説明するための図である。
第４図は、第１図の各ノード内に設けられたメッセージ送信制御部の構成を示す図である。
第５図は、第１図の各ノード内に設けられたACK生成部の構成を示す図である。
第６図は、本発明の別の実施例にかかるノード内に設けられたACKキューの構成を示す図である。
第７図は、従来技術における並列プロセッサ及びノードの構成を示す図である。
第８図は、本発明の一実施例にかかる各ノードのメッセージ送信動作を示すフローチャートである。
第９図は、本発明の一実施例にかかる各ノードのメッセージ受信動作を示すフローチャートである。
第１０図は、本発明の一実施例にかかる各ノードのACKメッセージ返送動作を示すフローチャートである。
第１１図は、本発明の一実施例にかかる各ノードのACKメッセージ受信動作を示すフローチャートである。
発明を実施するための最良の形態
以下、本発明の好適な一実施例を図面を用いて説明する。
第１図は、本発明に係るＮ台のノードからなる並列プロセッサの構成を示す。
第１図において、並列プロセッサはノード１、ノード２ないしノードＮ（ノード３からノードＮー１は省略する）と、これらのノード間を接続して各ノード間で行うためのネットワーク１０とから構成される。
各ノードは、ノード１及びノード２に示すように、ノードをネットワーク１０に接続し、ネットワーク１０との通信制御を行うネットワーク・インターフェース制御部１００、プロセッサ１２０、ソフトウエア及び各種情報を格納するメモリ１３０、ネットワーク・インターフェース制御部１００及びプロセッサ１２０からのメモリ１３０に対するアクセス要求を制御するメモリ制御部１１０から構成される。また、ネットワーク・インターフェース制御部１００は、ネットワーク１０を介して受信したメッセージを一時的に保持し、メッセージのネットワーク１０からの流入量とメモリ１３０への流出量の瞬間的な差を吸収するための受信バッファ１０１と、メモリ１３０へのメモリアクセス要求をメモリ制御部１１０へ送出するメモリ・リクエスト制御部１０３と、受信したメッセージを受信バッファ１０１より受け取り、該メッセージが自ノード宛のメッセージかどうか、メモリ１３０上のメッセージ受信領域が受信可能な状態にあるか等を判定し、メモリ１３０が受信可能ならばメッセージ受信領域にメッセージを格納するためにメモリ・リクエスト制御部１０３にメモリアクセス要求を送出するメッセージ受信制御部１０２と、プロセッサ１２０からメッセージ送信要求を受け取ると、メッセージ送信に必要な情報を格納したメッセージ送信制御ワード及び送信データをメモリ１３０から読み出すためにメモリ・リクエスト制御部１０３にメモリアクセス要求を送出し、読み出したメッセージ送信制御ワード及び送信データから所定の形式のメッセージを生成してネットワーク１０に送信するメッセージ送信制御部１０４と、送信するメッセージを一時的に保持し、メッセージのメッセージ送信制御部１０４からの送出量とネットワーク１０への流出量との瞬間的な差を吸収するための送信バッファ１０７と、メッセージ受信制御部１０２が送信側ノードに対してACKメッセージの返送が必要と判断した場合に、メッセージ受信制御部１０２からメッセージ内の必要な情報と受信状態を受け取り、ACKメッセージの送信要求を送出するACK生成部１０５と、ACK生成部１０５から送出されるACKメッセージの送信要求を直ちにメッセージ送信制御部１０４に送信できない場合に、これを一時的に保持しておき、メッセージ送信制御部１０４がメッセージを送信可能になったらACKメッセージの送信要求を送出するACKキュー１０６とから構成されている。
ACKキュー１０６からのACKメッセージ送信要求は、メッセージ送信制御部１０４によってプロセッサ１２０からの通常のメッセージ送信要求と調停され、選択されたいずれか一方の送信要求に対してメッセージがネットワーク１０に送出される。メッセージ送信制御部１０４では、２種類のメッセージ送信要求を調停する際にACKメッセージ送信要求を優先するようにする。その理由は、ACKメッセージの送信要求の優先順位が低いとACKメッセージを送信できなくなる場合が発生し、そのために新たなメッセージを受信できなくなってデッドロックまたはデッドロックに近い状態が発生する可能性があるためである。
第２図は、第１図のメモリ１３０上に準備され、ネットワーク・インターフェース制御部１００によって読み出されてメッセージ送信に使用されるメッセージ送信制御ワードの形式を示したものである。第２図(A)は、通常のメッセージを送信するために使用されるメッセージ送信制御ワードであり、第２図(B)は、プロセッサの処理によりACKメッセージを送信するために使用されるACKメッセージ送信制御ワードである。(A)及び(B)において共通の名前の情報は同じ意味を持つ。
第２図に示した各情報のうち、受信ノードアドレス、送信データ先頭アドレス及び送信データ長は、メモリ１３０上にメッセージ送信のための制御情報を準備し、この制御情報に従ってメッセージ送信を行う並列プロセッサでは一般的に必要な情報である。
受信ノードアドレス２２０は、メッセージの宛先となるノードのアドレスであって、ネットワーク１０により目的のノードにメッセージをルーティングするために用いられる。送信データ先頭アドレス２３０は、目的のノードに送信すべきデータを格納するメモリ１３０上の領域の先頭のアドレスであり、送信データ長２４０は、メモリ１３０上に準備された送信すべきデータの長さを示している。
次に、送信モード２５０は上記した情報とは異なり、一般的に必要な情報ではないが、例えば、MPI(Masseage Passing Interface Forumによって標準化された通信ライブラリの仕様)におけるSynchronous Sendのように、受信側ノードにおけるメモリ１３０上のユーザの受信領域においてメッセージの受信が始まったことを送信側ノードで知る必要がある場合等に用いられる。この送信モード２５０はメッセージ内に格納されて受信側ノードに送られ、受信側ノードでは送信モードの値と受信状態に応じて適切なACKメッセージを送信側ノードに返送する。（ACKメッセージの種類については、後述する。）
第２図に示した残りの情報は本発明に特有の情報である。
メッセージタイプ２１０は、通常のメッセージとACKメッセージを区別するために用いられる。尚、このメッセージタイプ２１０は、通常のメッセージとACKメッセージの区別だけでなく、例えば各ノード間で１対１通信以外に１対複数のブロードキャスト通信等を行う並列プロセッサでは、これらを区別するために用いることも可能である。
ACK制御２６０は、メッセージを受信した際にACKメッセージをネットワーク・インターフェース制御部１００で返送する必要があるかどうか、更にはACKメッセージを受け取ったときに割り込みによってプロセッサへ通知する必要があるかどうかを送信側ノードで指定するために用いられる。一般に並列プロセッサにおいては様々な種類の通信が行われ、必ずしもACKメッセージをネットワーク・インターフェース制御部１００で返送する必要はない（この場合、ACKメッセージはプロセッサの処理により返送されるか、或いは返送されない）ので、このACK制御フィールドを用いることによってプロセッサを介在させずにACKメッセージをネットワーク・インターフェース制御部１００で返送するか否かを送信側ノードの判断により制御可能としている。
また、ACKメッセージを受け取ったときにプロセッサへ通知するか否かの指定は、更に、メッセージ送信時に読み出したメッセージ送信制御ワード内のACK制御２６０の値に従ってプロセッサへの通知を行うか、或いはACKメッセージを受け取ったときに再度メッセージ送信制御ワードを読み出し、この読み出したときの値に従ってプロセッサへの通知を行うかを制御できるようにしている。具体的に説明すると、ACK制御２６０はメッセージ内に格納されて受信側ノードに送られ、ACK制御の値がACKメッセージの返送を指定していれば受信側ノードからACKメッセージが返送されるが、このとき、メッセージ内のACK制御の値はACKメッセージ内にそのまま格納されて、送信側ノードに送られる。ここで、前者を指定した場合には、送信側ノードでは受信したACKメッセージ内のACK制御の値（即ち、メッセージ送信時に指定したACK制御２６０の値）に従ってプロセッサへの通知を行う。一方、後者を指定した場合には、送信ノードではACKメッセージを受信すると再度メッセージ送信制御ワードをメモリから読み出し、そのメッセージ送信制御ワード内のACK制御２６０の値（メッセージ送信時に指定した値、或いはメッセージ送信後に変更した値）に従ってプロセッサへの通知を行う。従って、例えば、メッセージ送信時に後者を指定し、更に、プロセッサへの通知が不要であることを指定しておいて、ある所定の時間ACKメッセージの返送を待ち、所定時間が経過した場合にはメッセージ送信制御ワードのACK制御２６０の値を変更することにしておけば、ACKメッセージの到着タイミングによっては割り込みによるプロセッサへの通知を不要とすることもできる。
最後に、ACK状態コード２７０は、後述するように送信モードの値と受信状態に対応したACKメッセージの種類を識別するためのものであり、ACKメッセージが返送されてきたとき、ネットワーク・インターフェース制御部１００によってACKメッセージに含まれるACK状態コードの値がそのまま書き込まれるフィールドである。
ACKメッセージを受けたノードのプロセッサは、メッセージ送信制御ワードに書き込まれたACK状態コード２７０の値に応じて適切な処理を行うことができる。
尚、第２図（Ｂ）に示すACKメッセージ送信制御ワードでは、ACKメッセージが返送されてくることがないためACK状態コードフィールドは必要がない。但し、それとは別に受信状態コードフィールドが設けられている。この受信状態コード２８０は、プロセッサの処理によりACKメッセージを生成、返送する必要がある場合に、ユーザの受信領域にメッセージが格納されたか、或いはユーザの受信領域以外の一時的な受信領域にメッセージが格納されたか、更には受信時にエラーが発生したことを送信側ノードに伝えるために用いられる。
第３図は、上記メッセージ送信制御ワードを用いて生成されるメッセージの形式を示したものである。本実施例にかかる並列プロセッサにおいては、メッセージはパケット形式で通信される。メッセージパケットは、第３図(A)に示すようにパケットヘッダ３００とパケットボディー３１０とからなっている。ここで、第３図(A)は通常のメッセージの形式を示し、(B)はACKメッセージの形式を示す。(A)及び(B)とにおいて共通な名前の情報は、同じ意味を持つ。
また、第２図において説明した各情報と同一の情報には同一の符号を付して示してある。
第３図に示すように、パケットヘッダ３００はメッセージタイプ２１０、受信ノードアドレス２２０、ACK制御２６０、送信ノードアドレス３２０、メッセージ送信制御ワードアドレス３３０と、送信データ長２４０及び送信モード２５０、或いはACK状態コード２７０の各情報からなる。
尚、ネットワーク・インターフェース制御部１００で生成、返送するACKメッセージのメッセージタイプは、プロセッサの処理により生成、返送するACKメッセージのメッセージタイプと同じである。
第３図において、送信ノードアドレス３２０は、受信側ノードにおいて送信元を知ることができるようにするためのものである。また、この送信ノードアドレス３２０は、ネットワーク・インターフェース制御部１００がプロセッサを介在させずにACKメッセージを返送する場合にも使用される。
メッセージ送信制御ワードアドレス３３０は、メッセージ送信時にネットワーク・インターフェース制御部１００が読み出したメッセージ送信制御ワードのメモリ１３０上のアドレスを指定するものである。このメッセージ送信制御ワードアドレス３３０は、ACKメッセージを受信した際、ACKメッセージに含まれるACK状態コード２７０をネットワーク・インターフェース制御部１００が直接にメッセージ送信制御ワードのACK状態コードフィールドに書き込めるようにするために用いられる。
ネットワーク・インターフェース制御部１００またはプロセッサがACKメッセージを返送するとき、元のメッセージに格納されていたメッセージ送信制御ワードアドレス３３０をそのままACKメッセージに格納することにより、ACKメッセージを受信した送信側ノードにおいてACK状態コードを書き込むべきメッセージ送信制御ワードにアクセスすることが可能となる。
ACK状態コード２７０は、ACKメッセージの種類を示し、ACKメッセージがネットワーク・インターフェース制御部１００により返送される場合は、ネットワーク・インターフェース制御部１００がメッセージパケットヘッダ３００内の送信モード２５０の値と受信状態に応じて生成し、ACKメッセージがプロセッサの処理により返送される場合は、ACKメッセージ送信制御ワードに格納された受信状態コード２８０がネットワーク・インターフェース制御部１００によってそのまま用いられる。
ここで、ACKメッセージの種類としては以下の５種類が挙げられる。
（１）ユーザの受信領域にメッセージが格納された。
（２）ユーザの受信領域とは別のネットワーク・インターフェース制御部１００で管理される受信領域にメッセージが格納された。
（３）ユーザの受信領域とは別のネットワーク・インターフェース制御部１００で管理される受信領域に空きが無くメッセージを受信できない。
（４）ネットワーク１０あるいはネットワーク・インターフェース制御部１００におけるバードウエアエラーがあった。
（５）アクセス権限がないためにメッセージを受信できない。
また、パケットボディ３１０はデータからなっている。このデータは目的のノードに送信したいデータであり、メッセージ送信制御ワード中の送信データ先頭アドレスの指し示すアドレスから送信データ長分だけメモリ１３０から読み出される。
次に、上記の並列プロセッサの各ノード間でメッセージ通信を行う場合の動作について説明する。
本実施例では一例としてノード２からノード１にメッセージを送信する場合について説明する。
まず、メッセージ送信動作を説明する。
メッセージ送信動作は、第８図のフローチャートに示す通り、ノード２のプロセッサ１２０がソフトウエアを実行し、ノード１に送信したいデータ及びメッセージ送信に必要なメッセージ送信制御ワードをメモリ１３０上の所望の領域に用意することから始まる。
プロセッサ１２０はデータ及びメッセージ送信制御ワードを用意すると、メモリ１３０上のメッセージ送信制御ワードが格納されている領域のアドレスを専用のアドレスレジスタ（図示せず）にセットしてメッセージ送信要求をネットワーク・インターフェース制御部１００のメッセージ送信制御部１０４に送出する。
この場合、プロセッサ１２０は、メッセージタイプ２１０として通常のメッセージであることを示す値を、受信ノードアドレス２２０としてノード１に与えられた固有のアドレスを示す値を、送信ノードアドレス３２０としてノード２の固有のアドレスを示す値をそれぞれ指定する。また、ACK制御２６０としては、この例ではメッセージを受信した際にネットワーク・インターフェース制御部１００でACKメッセージを返送する必要があることを示す値を指定するものとする。
メッセージ送信制御部１０４は、このメッセージ送信要求を受け取ると、アドレスレジスタにセットされたアドレスを用いてメモリ・リクエスト制御部１０３にメモリアクセス要求を送り、メモリ・リクエスト制御部１０３はメモリ制御部１１０にこのメモリアクセス要求を送出する。メモリ制御部１１０はこの要求を受け取るとメモリアクセスを実行し、メモリ１３０からメッセージ送信制御ワードを読み出し、メモリ・リクエスト制御部１０３を介してメッセージ送信制御部１０４へ送る。
尚、メッセージ送信制御部１０４は、第４図に示す通り、調停部４００を備えており、上記したようにACKキュー１０６を介したACK生成部１０５からのACKメッセージ送信要求とプロセッサ１２０からの通常のメッセージ送信要求とが競合した場合には調停部４００によりこれを調停し、ACKメッセージ送信要求を優先して受け取る。従って、プロセッサ１２０からのメッセージ送信要求をメッセージ送信制御部１０４が受け取るのは、ACK生成部１０５からのACKメッセージ送信要求がないときである。
続いてメッセージ送信制御部１０４は、読み出したメッセージ送信制御ワード内の送信データ先頭アドレス２３０及び送信データ長２４０を用いてメモリアクセス要求をメモリ・リクエスト制御部１０３に送る。メモリ・リクエスト制御部１０３はメモリ制御部１１０にこのメモリアクセス要求を送出し、メモリ制御部１１０はこの要求を受け取るとメモリアクセスを実行し、メモリ１３０から送信データを読み出し、メモリ・リクエスト制御部１０３を介してメッセージ送信制御部１０４へ送る
メッセージ送信制御部１０４は読み出したメッセージ送信制御ワード及び送信データからノード１に対するメッセージを生成する。即ち、メッセージ送信制御ワード中のメッセージタイプ２１０、受信ノードアドレス２２０、送信データ長２４０、送信モード２５０、ACK制御２６０の各値と、これに送信ノードアドレス３２０及びメッセージ送信制御ワードアドレス３３０を加えてパケットヘッダを組み立て、これに送信データを付加してメッセージパケットを生成する。
そして、メッセージ送信制御部１０４は生成したメッセージを送信バッファ１０７を介してネットワーク１０に送信する。
次に、メッセージ受信動作を説明する。
第９図にネットワーク・インターフェース制御部１００の一連の受信動作のフローチャートを示す。
送信されたメッセージはネットワーク１０によりパケットヘッダ内の受信ノードアドレスを参照され、ノード１にルーティングされる。
ルーティングされたメッセージは、まず、ノード１のネットワーク・インターフェース制御部１００内の受信バッファ１０１に受け取られ、続いてメッセージ受信制御部１０２に送られる。
メッセージ受信制御部１０２は、受信バッファ１０１からメッセージを受け取ると、パケットヘッダ内の受信ノードアドレス２２０を参照し、メッセージが自ノード宛のメッセージであることを確認する。続いて、メッセージタイプ２１０を参照し、メッセージの種類、例えば通常のメッセージなのかACKメッセージなのかを確認する。ここで、メッセージがACKメッセージである場合の受信動作については後述する。
ACKメッセージでない場合は、メッセージ受信制御部１０２はパケット長の検査等によりメッセージが正常に受信されたか否かを判定する。メッセージが正常に受信されたと判定すると、次に、メモリ１３０上のメッセージ受信領域が受信可能な状態（即ち、メッセージ受信領域に空きがある状態）にあるか否かを判定する。受信可能な状態にあればメッセージ受信領域に受け取ったメッセージを格納するためにメモリ・リクエスト制御部１０３にメモリアクセス要求を送る。メモリ・リクエスト制御部１０３はメモリ制御部１１０にこのメモリアクセス要求を送出し、メモリ制御部１１０はこの要求を受け取るとメモリアクセスを実行してメモリ１３０のメッセージ受信領域にメッセージを格納する。
そして、メッセージ受信制御部１０２は、メッセージの受信が完了したことを例えば割り込みによってプロセッサ１２０に通知する。
受信完了の通知を受けると、プロセッサ１２０は受信メッセージを処理するソフトウエアを実行し、メモリ１３０上のメッセージ受信領域に格納された受信メッセージを解釈してユーザの受信領域に格納する。
このようにしてメッセージの受信動作が行われる。
尚、この実施例では、メッセージ受信制御部１０２は受信メッセージをメモリ１３０上のメッセージ受信領域に格納しているが、直接にユーザの受信領域に格納することも可能である。この場合、プロセッサによる受信メッセージのユーザの受信領域への格納動作は不要となる。
また、上記のうち、メッセージが正常に受信されなかったと判定した場合及びメモリ１３０上のメッセージ受信領域に空きがなく受信できないと判定した場合には、後述するACKメッセージの返送の際にそのことを送信側ノードに伝えてメッセージ受信制御部１０２は受信処理を終了する。
次に、ACKメッセージの返送動作について説明する。
第１０図にネットワーク・インターフェース制御部１００によるACKメッセージの返送動作のフローチャートを示す。
メッセージ受信制御部１０２では、上記のように、受け取ったメッセージをメッセージ受信領域に格納するためのメモリアクセス要求をメモリ・リクエスト制御部１０３に送る一方、受け取ったメッセージに対するACKメッセージの返送が必要か否かを判定するためにパケットヘッダ内のACK制御２６０を参照する。このとき、例えば、ACK制御２６０の値がACKメッセージの返送を指定していれば、メッセージ制御部１０２はACKメッセージの返送が必要と判定する。これに対して、メッセージタイプ２１０がACKメッセージであることを示していたり、ACK制御２６０がACKメッセージの返送を指定していない場合にはメッセージ制御部１０２はACKメッセージ返送不要と判定する。
尚、この実施例では、上記の通り、メッセージタイプ２１０は通常のメッセージであることを示し、また、ACK制御２６０はネットワーク・インターフェース制御部１００でACKメッセージを返送する必要があることを示しているため、メッセージ受信制御部１０２は、受信したメッセージに対してACKメッセージの返送が必要であると判定する。
このように判定すると、メッセージ受信制御部１０２はパケットヘッダ内の送信ノードアドレス３２０、ACK制御２６０、メッセージ送信制御ワードアドレス３３０、送信モード２５０の各種をメッセージから抽出し、ACKメッセージの返送要求と共にこれらの情報と自ノードアドレス及びメッセージの受信状態をACK生成部１０５に送る。
ACK生成部１０５は、第５図に示す通り、メッセージタイプ／ACK状態コード生成部５１０及びACK送信要求部５２０とを備えており、メッセージタイプ／ACK状態コード生成部５１０は、メッセージ受信制御部１０２からACK返送要求、送信モード２５０及び受信状態を受け取ると、送信モードの値及び受信状態に応じて上記した（１）〜（５）の５種類のうちの１つを示すACK状態コード２７０を生成し、また、メッセージタイプ２１０を生成する。この場合、メッセージタイプとしてACKメッセージであることを示す値を指定する。
そして、送信モード２５０及び受信状態以外のメッセージ受信制御部１０２から受け取った情報及び生成したメッセージタイプ２１０、ACK状態コード２７０がACK送信要求部５２０に送られると、ACK送信要求部５２０ではこれらの情報を受け取り、ACKメッセージ送信要求をこれらの情報と共にメッセージ送信制御部１０４に送出する。このとき、受け取った送信ノードアドレスは受信ノードアドレス２２０、自ノードアドレスは送信ノードアドレス３２０とされる。
ACK生成部１０５から送出されたACKメッセージ送信要求は一旦ACKキュー１０６に格納される。
ACKキュー１０６は、送信要求をメッセージ送信制御部１０４に送信できる状態（即ち、メッセージ送信制御部１０４がメッセージ送信を行える状態）にあれば、直ちにこのACKメッセージ送信要求をメッセージ送信制御部１０４に送る。メッセージ送信制御部１０４に送信できない場合（即ち、メッセージ送信制御部１０４がメッセージ送信中である等の理由によってメッセージ送信を行えない状態にある場合）は、ACKメッセージ送信要求を保持しておき、メッセージ送信制御部１０４がメッセージ送信を行える状態になったらこれをメッセージ送信制御部１０４に送る。
メッセージ送信制御部１０４は、ACKメッセージ送信要求が送られてくるとこれを通常のメッセージ送信要求に対して優先的に受け取り、送信要求と共に送られてきた情報からACKメッセージを生成する。即ち、メッセージタイプ２１０、受信ノードアドレス２２０、送信ノードアドレス３２０、ACK制御２６０、メッセージ送信制御ワードアドレス３３０及びACK状態コード２７０からACKメッセージパケットを組み立て、このACKメッセージパケットを送信バッファ１０７を介してネットワーク１０に送信する。
このようにしてネットワーク・インターフェース制御部１００によるACKメッセージ返送動作が行われる。
次に、ACKメッセージの受信動作について説明する。
第１１図にネットワーク・インターフェース制御部１００及びプロセッサ１２０によるACKメッセージ受信動作のフローチャートを示す。
送信されたACKメッセージは、ネットワーク１０によってノード２にルーティングされる。
ルーティングされたACKメッセージは、通常のメッセージと同様に、ノード２のネットワークインターフェース制御部１００内の受信バッファ１０１に受け取られてメッセージ受信制御部１０２に送られる。
メッセージ受信制御部１０２は、ACKメッセージを受け取るとメッセージ内のメッセージタイプ２１０、受信ノードアドレス２２０、送信ノードアドレス３２０を参照し、自ノードが送信したメッセージに対するACKメッセージであることを確認する。
続いて、メッセージ受信制御部１０２はメッセージ送信制御ワードアドレス３３０の値を参照し、このアドレスが示すメモリ１３０上のメッセージ送信制御ワード内のACK状態コードフィールドにメッセージ内のACK状態コード２７０の値を書き込むためにメモリ・リクエスト制御部１０３にメモリアクセス要求を送る。メモリ・リクエスト制御部１０３はメモリ制御部１１０にこのメモリアクセス要求を送出し、メモリ制御部１１０はこの要求を受け取るとメモリアクセスを実行してメモリ１３０上のメッセージ送信制御ワードのACK状態コードフィールドにメッセージ内のACK状態コード２７０の値を書き込む。
次に、メッセージ受信制御部１０２は、ACKメッセージを受け取ったことをプロセッサ１２０に通知する必要があるか否かを判定するためにACK制御２６０の値を参照する。
このとき、ACK制御２６０の値がメッセージ送信時に指定した値、即ち、このACK制御の値に従ってプロセッサへの通知を行うことを指定し、且つ、プロセッサへの通知を行うことを指定している場合には、メッセージ受信制御部１０２はプロセッサ１２０への通知が必要と判定し、ACKメッセージを受信したことを割り込みによってプロセッサ１２０に通知する。一方、プロセッサへの通知を行わないことを指定している場合には、メッセージ受信制御部１０２はプロセッサ１２０への通知不要と判定しACKメッセージの受信処理を終了する。
また、ACK制御２６０の値がACKメッセージを受け取ったときのメッセージ送信制御ワード内のACK制御２６０の値に従ってプロセッサへの通知を行うことを指定している場合には、メッセージ受信制御部１０２はメッセージ内のメッセージ送信制御ワードアドレスを用いてメッセージ送信制御ワードを読み出し、この中のACK制御２６０を参照する。そして、上記と同様に、ACK制御の値がプロセッサへの通知を行うことを指定している場合には割り込みによってプロセッサ１２０に通知し、プロセッサへの通知を行わないことを指定している場合にはプロセッサ１２０への通知不要と判定してACKメッセージの受信処理を終了する。
ACKメッセージを受信したことの通知を受けると、プロセッサ１２０はACKメッセージの種類を確認するためにメモリ１３０上のメッセージ送信制御ワード内に書き込まれたACK状態コード２７０を参照する。このとき、ACK状態コードの値が上記（１）または（２）の内容を示すものであった場合は、メッセージが目的のノードに正常に受信されたため、このメッセージの再送に備えて変更を禁止し、保存していた送信データ及びメッセージ送信制御ワードのメモリ１３０上の格納領域を解放して、メッセージの送信処理を完了する。
（３）または（４）の内容を示すものであった場合は、メッセージが目的のノードに正常に受信されなかったため、プロセッサ１２０は保存していた送信データ及びメッセージ送信制御ワードを用いてメッセージの再送を試みる。但し、（３）の内容を示していたときは受信側ノードにおいてメッセージの受信領域が不足しているため、送信側ノードではメッセージの再送を一時停止しておき、受信側ノードにおいて受信領域が確保できた時点でメッセージの再送を行うようにする。
また、（５）の内容を示すものであった場合は、エラーが発生したとして実行中のソフトウエアを異常終了する。
尚、上記のACKメッセージ返送動作のうち、メッセージ受信制御部１０２がACK制御２６０の値を参照したときにACKメッセージの返送を指定していない場合に、上記の通りメッセージ受信制御部１０２はACKメッセージの返送不要と判定するため、ネットワーク・インターフェース制御部１００ではACKメッセージの返送が行われない。但し、この場合には、受信側ノード１から送信側ノード２に対して全くACKメッセージが返送されないか、或いは受信側ノード１のプロセッサ１２０の処理によりACKメッセージが生成、返送されるという２つの場合が存在する。そして、プロセッサ１２０の処理によりACKメッセージが生成、返送される場合には、上記背景技術の項で説明したのと同様に、プロセッサ１２０が受信メッセージを処理するソフトウエアを実行し、受信メッセージの内容及び受信状態からメッセージ送信制御ワードを準備し、第３図(A)に示す通常のメッセージパケットの形式によりACKメッセージを生成して返送する。
加えて、上記したMPIのSynchronous Sendのように、送信側ノードにおいて受信側ノードのユーザ受信領域でメッセージの受信が始まったことを知る必要がある場合には、受信側ノードのネットワーク・インターフェース制御部から上記（２）の内容を示すACKメッセージを送信側ノードで受け取ったとしても受信側ノードのユーザ受信領域では未だメッセージを受信していないため、送信側ノードではメッセージ送信処理を完了することができない。この場合には、受信側ノードのユーザ受信領域でメッセージの受信が始まった時に、受信側ノードのプロセッサ１２０がACKメッセージを返送するためのソフトウエアを実行し、第２図(B)に示すACKメッセージ送信制御ワードをメモリ１３０上に用意し、メモリ１３０上のACKメッセージ送信制御ワードが格納されている領域のアドレスを専用のアドレスレジスタにセットしてメッセージ送信制御部１０４にACKメッセージ送信要求を送る。
メッセージ送信制御部１０４は、この要求を受け取るとアドレスレジスタにセットされたアドレスを用いてACKメッセージ送信制御ワードを読み出し、これとメッセージ内のメッセージ送信制御ワードアドレス及び自ノードアドレスから第３図(B)に示すACKメッセージパケットを生成する。このとき、ACK状態コードフィールドにはACKメッセージ送信制御ワード内の上記（１）の内容を示す受信状態コードの値がそのまま格納される。そして、メッセージ送信制御部１０４は生成したACKメッセージをネットワーク１０に送信する。このACKメッセージが送信側ノードにルーティングされると、送信側ノードは上記した受信動作によりこのACKメッセージを受け取り、これが上記（１）の内容を示すものであることを確認すると、上記の通りメッセージの再送に備えて保存しておいた送信データ及びメッセージ送信制御ワードの格納領域を解放して送信処理を完了する。
以上のように動作して、各ノード間でのメッセージ通信が行われる。
次に、本発明の別の実施例について説明する。
この実施例では、第１図の並列プロセッサにおいて、ACKキュー１０６が所定時間フルになったままであった場合に、プロセッサがACKメッセージの送信要求を取り出して管理しておき、ACKキュー１０６に空きが生じた場合にプロセッサによってACKメッセージの送信要求を再キューイングできるようにしたものである。
第６図は、この実施例におけるACKキューの構成を示す図である。
図中、第１図と同一の構成については同一の符号を付して示してある。
第６図において、６２０はメモリマップされたACKレジスタであって、ノード内のプロセッサ１２０からメモリ制御部１１０およびネットワーク・インターフェース制御部１００内のメモリ・リクエスト制御部１０３を介してリード及びライトが可能となっている。６１０はプロセッサ１２０からのACKレジスタ６２０へのライト要求とACK生成部１０５からのACKメッセージ送信要求のいずれか１つを選択するためのセレクタである。６３０はACKキュー１０６及びACKレジスタ６２０においてACKメッセージ送信要求がフルになった時に計時を開始し、所定の時間ACKキュー１０６及びACKレジスタ６２０がフルになったままであるかどうかを判定可能とするためのタイマである。
セレクタ６１０は、タイマ６３０がタイムアウトするまではACK生成部１０５からのACKメッセージ送信要求を選択するように制御される。
尚、これらの構成は全てメッセージ送信制御部１０４により制御されて動作する。
次に、これらの動作について説明する。
通常、ACK生成部１０５からのACKメッセージ送信要求は、セレクタ６１０により選択されてACKレジスタ６２０に一旦格納され、その後ACKキュー１０６にキューイングされる。但し、ACKキュー１０６がフルになってキューイングできない場合にはACKレジスタ内に保持され、ACKキュー１０６に空きができたときにACKレジスタ６２０内の送信要求がACKキュー１０６にキューイングされる。
ACKキュー１０６にキューイングされた送信要求は、メッセージ送信制御部１０４がメッセージ送信を行える状態にあれば、ACKキュー１０６から取り出されてメッセージ送信制御部１０４に送られる。
ACKキュー１０６及びACKレジスタ６２０にACKメッセージ送信要求が最大数保持されてフルになるとタイマ６３０は計時を開始し、これらが連続してフルになっている時間を計る。そして、計時を開始してから所定の時間が経過するとタイマ６３０はタイムアウトする。
タイマ６３０がタイムアウトしたことを検出すると、メッセージ送信制御部１０４はACKレジスタ読み出しイベントを生成し、プロセッサ１２０へ割り込みを行ってこのイベントをプロセッサ１２０に通知する。
ACKレジスタ読み出しイベントを受け取ると、プロセッサ１２０はACKレジスタを読み出し、レジスタに保持されているACKメッセージ送信要求を取り出してメモリ１３０上に用意された自らの管理するキューに一旦キューイングする。そして、メッセージ送信制御部１０４へACKメッセージ送信要求を取り出したことを通知する。
この通知によってメッセージ送信制御部１０４はACKレジスタ６２０が空きになったと判断して、ACK生成部からのACKメッセージ送信要求を受け付け可能とする。
また、プロセッサ１２０は、一旦自らの管理するキューにACKメッセージ送信要求をキューイングすると、キューイング中であることを覚えておくと共にACKメッセージ以外の通常のメッセージ送信要求をメッセージ送信制御部１０４へ出さないようにする。
ACKレジスタ６２０が空いた状態で、ACKキュー１０６内のACKメッセージ送信要求をメッセージ送信制御部１０４に送出できないまま、更にACK生成部１０５からACKメッセージ送信要求が送られてきた場合は、このACKメッセージ送信要求はACKレジスタ６２０に格納され、メッセージ送信制御部１０４は再度ACKレジスタ読み出し要求イベントを生成する。この場合の処理は、上記の場合と同様である。
一方、ACKレジスタ６２０が空いた直後にACK生成部１０５からACKメッセージ送信要求が送られてこなかった場合には、メッセージ送信制御部１０４はACKレジスタ書き込み要求イベントを生成し、プロセッサ１２０へ割り込みを行ってこの要求をプロセッサ１２０に通知すると共に、セレクタ６１０をプロセッサ１２０からのACKレジスタ・ライト要求を選択するように制御する。
ACKレジスタ書き込みイベントを受け取ると、プロセッサ１２０は自らの管理するキューからACKメッセージ送信要求を取り出してACKレジスタ６２０へ書き込む。そして、メッセージ送信制御部１０４へACKメッセージ送信要求を書き込んだことを通知する。
この通知によってメッセージ送信制御部１０４はACKレジスタ６２０にACKメッセージ送信要求が格納されたと判断して、セレクタ６１０をACK生成部１０５からのACKメッセージ送信要求を選択するように制御する。
ACKキュー１０６内のACKメッセージ送信要求が取り出されてメッセージ送信制御部１０４に送られ、ACKレジスタ６２０内のACKメッセージ送信要求がACKキュー１０６にキューイングされることによってACKレジスタ６２０が空になった時、ACK生成部１０５からのACKメッセージ送信要求が送られてこなければ、メッセージ送信制御部１０４は再度ACKレジスタ書き込みイベントを生成する。この場合の処理は、上記の場合と同様である。
このような処理を繰り返してプロセッサ１２０が管理するACKメッセージ送信要求のキューが空になると、プロセッサ１２０は覚えていた状態、即ちキューイング中であったという状態をクリアして、ACKメッセージ以外の通常のメッセージ送信要求もメッセージ送信制御部１０４へ出すように制御し、プロセッサ１２０によるACKメッセージ送信要求のキューイング処理を終了する。
この実施例によれば、ACKキュー１０６がフルになったままの状態で放置されることを防止できるため、メッセージを受信したメッセージ受信制御部１０２がACKメッセージ送信要求を送ることができなくなり、そのため新たなメッセージを受信できなくなってデッドロックまたはデッドロックに近い状態が発生することを確実に防止できる。
上述した本発明のネットワーク・インターフェース制御部１００によるACKメッセージの返送機能は、システム立ち上げ時において第１図のネットワーク１０を診断することにも適用することができる。
具体的に説明すると、第２図に示したメッセージタイプとしてネットワーク診断用メッセージを新たに定義する。このネットワーク診断用メッセージを受信したノードのネットワーク・インターフェース制御部１００内のメッセージ受信制御部１０２は、ACKメッセージの返送が必要と判断するとACK生成部１０５にACKメッセージ送信要求及び必要な情報を送る。以後は上記したと同様に処理されて、ACKメッセージが返送される。
ネットワーク診断用メッセージと通常のメッセージとの差異は、ネットワーク・インターフェース制御部１００が前者の場合にはメッセージ自体のメモリへの格納処理をいっさい行わずに廃棄してしまうことにある。こうすることにより、システムの立ち上げ時に、ネットワーク診断用メッセージの送信先となるノードのネットワーク・インターフェース制御部１００が動作可能な状態になっていればネットワーク診断用メッセージの送信が可能となり、これに対してACKメッセージが正常に返送されてくれば、ネットワーク診断用メッセージの送信側ノードと受信側ノードとを結合するネットワーク経路に異常がないことが確認できる。
以上説明したように、本発明によれば以下のような効果を得ることができる。
（１）受信側ノードにおいてプロセッサの処理を必要とすることなくACKメッセージを返送することができるので、メッセージを送信してからACKメッセージが返ってくるまでの時間が短くなる。そのため、送信側ノードでは、再送に備えて保存している送信データ及び送信制御ワードの格納領域を早期に解放でき、通信処理性能を向上できる。また、必要とされるメモリ容量を減少させることができる。
また、受信側ノードでは、ACKメッセージ返送のためにプロセッサの処理を必要とすることがないため、プロセッサが本来行っている処理を中断することがなくなり、プロセッサの実効的な処理性能を向上できる。
（２）プロセッサの処理によりACKメッセージを返送する場合には、一旦メモリ上にメッセージを受信しなければならないため、何らかの原因で正常に受信できない場合には全くACKメッセージを返送できない。そのため、送信側ノードでは受信側ノードにおいてメッセージが受信できない原因を知ることができず、従って、その原因に応じた適切な処理を行うことができない。一方、本発明による場合には、ネットワーク・インターフェース制御部で受信したメッセージのパケットヘッダさえ正常であればACKメッセージを返送することができ、ACKメッセージ内のACK状態コードの値によって送信側ノードにエラーの内容を伝えることができるため、送信側ノードにおいて、このエラーの内容に応じた適切な処理を行うことができる。例えば、メッセージのパケットボディでエラーが検出されたとすれば、送信側ノードでは、ACKメッセージの内容を確認することにより、直ちに保存していた送信データを再送することができる。
（３）送信側ノードにおいて、ネットワーク・インタフェース制御部でACKメッセージを返送しないように指定できるので、高い信頼性を保証する必要のないプロトコルや、反対に高い信頼性を保証する必要のあるプロトコルを用いて通信を行う場合には、ネットワーク・インタフェース制御部からの不要なACKメッセージを抑止することができ、ネットワーク全体の通信スループットを向上できる。
また、ユーザの受信領域にメッセージを受信したか、或いはユーザの受信領域以外の受信領域に一旦受信しただけなのかをACKメッセージで区別でき、更に、プロセッサによってもACKメッセージを返送できるため、MPIのSynchronous Sendのように受信側ノードのユーザの受信領域でメッセージを受信し始めるまで送信側ノードが送信処理を完了できないような場合にも対処できる。
（４）ネットワーク・インタフェース制御部の制御による受信確認メッセージの送信の優先順位を通常のメッセージの送信の優先順位よりも高く設定し、更に、プロセッサによって受信確認メッセージの送信要求のキューイングができるので、デッドロックまたはデッドロックに近い状態の発生を防止できる。
産業上の利用可能性
以上のように、本発明は、複数のノードを有し、各ノード間でメッセージ通信を行う並列プロセッサに用いるのに適している。
【図１】
0003715991.tif 000002
【図２】
0003715991.tif 000003
【図３】
0003715991.tif 000004
【図４】
0003715991.tif 000005
【図５】
0003715991.tif 000006
【図６】
0003715991.tif 000007
【図７】
0003715991.tif 000008
【図８】
0003715991.tif 000009
【図９】
0003715991.tif 000010
【図１０】
0003715991.tif 000011
【図１１】
0003715991.tif 000012