(57)【特許請求の範囲】
【請求項１】
受信側本体スレッドと、メッセージを受信する受信側受信スレッドとを含む受信側プログラムを実行する他のプロセッサに対して接続されたプロセッサの制御プログラムにおいて、
前記プロセッサに、
前記受信側本体スレッドに対して、前記制御プログラムに含まれる送信側本体スレッドから前記受信側本体スレッドに送信する前記メッセージについて、受信可能な状態であるかについての問い合わせを送信させ、
前記受信側本体スレッドから受信した問い合わせ結果が、受信可能であることを示す場合、前記受信側受信スレッド又は前記制御プログラムに含まれ前記メッセージを送信する送信側送信スレッドを介さずに、前記送信側本体スレッドから前記受信側本体スレッドに対して送信することにより前記メッセージの通信を行う直接方式を用いて行うと判断させ、
前記直接方式を用いて行うと判断した場合、前記送信側送信スレッド又は前記受信側受信スレッドを介さずに、前記メッセージを前記受信側本体スレッドに対して送信させ、
前記受信側本体スレッドから受信した問い合わせ結果が、受信可能ではないことを示す場合、前記問い合わせを送信した送信時刻と前記問い合わせ結果を受信した受信時刻とに基づき、問い合わせ時間を算出させ、
前記問い合わせ時間が所定の閾値以下の場合、前記メッセージを前記受信側受信スレッドに対して送信することにより前記メッセージの通信を行う受信スレッド方式を用いて行うと判断させ、
前記受信スレッド方式を用いて行うと判断した場合、前記メッセージを前記受信側受信スレッドに対して送信させ、
前記問い合わせ時間が前記所定の閾値を超えた場合、前記メッセージを前記送信側送信スレッドに格納して送信を行うことにより前記メッセージの通信を行う送信スレッド方式を用いて行うと判断させ、
前記送信スレッド方式を用いて行うと判断した場合、前記メッセージを前記送信側送信スレッドに対して格納させ、
前記送信スレッド方式を用いて行うと判断した場合、前記受信側本体スレッドが受信可能であることを検出したとき、前記送信側送信スレッドに格納したメッセージを前記受信側本体スレッドに対して送信させることを特徴とするプロセッサの制御プログラム。
【請求項２】
前記プロセッサの制御プログラムはさらに、
前記プロセッサに、
前記直接方式を用いて行うと判断した場合、前記直接方式を用いて前記メッセージの通信を行う旨を、前記受信側本体スレッドに対して通知させ、
前記受信スレッド方式を用いて行うと判断した場合、前記受信スレッド方式を用いて前記メッセージの通信を行う旨を、前記受信側本体スレッドに対して通知させ、
前記送信スレッド方式を用いて行うと判断した場合、前記送信スレッド方式を用いて前記メッセージの通信を行う旨を、前記受信側本体スレッドに対して通知させることを特徴とする請求項１記載のプロセッサの制御プログラム。
【請求項３】
前記プロセッサの制御プログラムはさらに、
前記プロセッサに、
前記直接方式を用いて行うと判断した場合、前記直接方式を用いて前記メッセージの通信を行う旨を、対応するメッセージの送信キューに登録させ、
前記直接方式を用いて行うと判断した場合、前記送信キューに登録した対応するメッセージについて前記直接方式を用いて前記メッセージの通信を行う旨を参照して、前記メッセージを前記受信側本体スレッドに対して送信させ、
前記受信スレッド方式を用いて行うと判断した場合、前記受信スレッド方式を用いて前記メッセージの通信を行う旨を、対応するメッセージの送信キューに登録させ、
前記受信スレッド方式を用いて行うと判断した場合、前記送信キューに登録した対応するメッセージについて前記受信スレッド方式を用いて前記メッセージの通信を行う旨を参照して、前記メッセージを前記受信側受信スレッドに対して送信させ、
前記送信スレッド方式を用いて行うと判断した場合、前記送信スレッド方式を用いて前記メッセージの通信を行う旨を、対応するメッセージの送信キューに登録させ、
前記送信スレッド方式を用いて行うと判断した場合、前記送信キューに登録した対応するメッセージについて前記送信スレッド方式を用いて前記メッセージの通信を行う旨を参照して、前記メッセージを前記送信側送信スレッドに対して格納させることを特徴とする請求項１又は２記載のプロセッサの制御プログラム。
【請求項４】
受信側本体スレッドと、メッセージを受信する受信側受信スレッドとを含む受信側プログラムを実行する他のプロセッサに対して接続されたプロセッサの制御方法において、
前記プロセッサが、
前記受信側本体スレッドに対して、前記プロセッサの制御プログラムに含まれる送信側本体スレッドから前記受信側本体スレッドに送信する前記メッセージについて、受信可能な状態であるかについての問い合わせを送信し、
前記受信側本体スレッドから受信した問い合わせ結果が、受信可能であることを示す場合、前記受信側受信スレッド又は前記制御プログラムに含まれ前記メッセージを送信する送信側送信スレッドを介さずに、前記送信側本体スレッドから前記受信側本体スレッドに対して送信することにより前記メッセージの通信を行う直接方式を用いて行うと判断し、
前記直接方式を用いて行うと判断した場合、前記送信側送信スレッド又は前記受信側受信スレッドを介さずに、前記メッセージを前記受信側本体スレッドに対して送信し、
前記受信側本体スレッドから受信した問い合わせ結果が、受信可能ではないことを示す場合、前記問い合わせを送信した送信時刻と前記問い合わせ結果を受信した受信時刻とに基づき、問い合わせ時間を算出し、
前記問い合わせ時間が所定の閾値以下の場合、前記メッセージを前記受信側受信スレッドに対して送信することにより前記メッセージの通信を行う受信スレッド方式を用いて行うと判断し、
前記受信スレッド方式を用いて行うと判断した場合、前記メッセージを前記受信側受信スレッドに対して送信し、
前記問い合わせ時間が前記所定の閾値を超えた場合、前記メッセージを前記送信側送信スレッドに格納して送信を行うことにより前記メッセージの通信を行う送信スレッド方式を用いて行うと判断し、
前記送信スレッド方式を用いて行うと判断した場合、前記メッセージを前記送信側送信スレッドに対して格納し、
前記送信スレッド方式を用いて行うと判断した場合、前記受信側本体スレッドが受信可能であることを検出したとき、前記送信側送信スレッドに格納したメッセージを前記受信側本体スレッドに対して送信することを特徴とするプロセッサの制御方法。
【請求項５】
前記プロセッサの制御方法はさらに、
前記プロセッサが、
前記直接方式を用いて行うと判断した場合、前記直接方式を用いて前記メッセージの通信を行う旨を、前記受信側本体スレッドに対して通知し、
前記受信スレッド方式を用いて行うと判断した場合、前記受信スレッド方式を用いて前記メッセージの通信を行う旨を、前記受信側本体スレッドに対して通知し、
前記送信スレッド方式を用いて行うと判断した場合、前記送信スレッド方式を用いて前記メッセージの通信を行う旨を、前記受信側本体スレッドに対して通知することを特徴とする請求項４記載のプロセッサの制御方法。
【請求項６】
前記プロセッサの制御方法はさらに、
前記プロセッサが、
前記直接方式を用いて行うと判断した場合、前記直接方式を用いて前記メッセージの通信を行う旨を、対応するメッセージの送信キューに登録し、
前記直接方式を用いて行うと判断した場合、前記送信キューに登録した対応するメッセージについて前記直接方式を用いて前記メッセージの通信を行う旨を参照して、前記メッセージを前記受信側本体スレッドに対して送信し、
前記受信スレッド方式を用いて行うと判断した場合、前記受信スレッド方式を用いて前記メッセージの通信を行う旨を、対応するメッセージの送信キューに登録し、
前記受信スレッド方式を用いて行うと判断した場合、前記送信キューに登録した対応するメッセージについて前記受信スレッド方式を用いて前記メッセージの通信を行う旨を参照して、前記メッセージを前記受信側受信スレッドに対して送信し、
前記送信スレッド方式を用いて行うと判断した場合、前記送信スレッド方式を用いて前記メッセージの通信を行う旨を、対応するメッセージの送信キューに登録し、
前記送信スレッド方式を用いて行うと判断した場合、前記送信キューに登録した対応するメッセージについて前記送信スレッド方式を用いて前記メッセージの通信を行う旨を参照して、前記メッセージを前記送信側送信スレッドに対して格納することを特徴とする請求項４又は５記載のプロセッサの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの制御プログラム及び、その制御方法に関する。  
【背景技術】
【０００２】
図１９は、従来の分散メモリ型マルチプロセッサの全体構成を示す説明図である。図１９に示す分散メモリ型マルチプロセッサ２００は、複数のプロセッサ２０１と、これら複数のプロセッサ２０１を分散接続するインターコネクト２０２とを有する。各プロセッサ２０１上で動作する各プロセス２０３は、各種処理を夫々実行すると共に、メッセージパッシングインタフェース（Message Passing Interface：以下、単にＭＰＩと称する）ライブラリ２０４を使用してプロセス２０３間の相互通信を実行する。尚、ＭＰＩライブラリ２０４は、他のプロセス２０３に対してメッセージを送信する送信処理や、他のプロセス２０３からのメッセージを受信する受信処理等を実行する通信機能を備えている。
【０００３】
図２０は、従来のプロセス間通信処理の一例を示すガントチャートである。図２０の例では、プロセスＰ＃０〜Ｐ＃３の各種処理を下記の通り動作するものとする。プロセスＰ＃０は、計算処理Ｃ０Ａを発行後、プロセスＰ＃２に対してメッセージを送信する送信処理を発行し、その後、プロセスＰ＃１に対してメッセージを送信する送信処理を発行する。更に、プロセスＰ＃１は、計算処理Ｃ１Ａを発行後、プロセスＰ＃０からのメッセージを受信する受信処理を発行する。
【０００４】
更に、プロセスＰ＃２は、計算処理Ｃ２Ａを発行後、プロセスＰ＃０からメッセージを受信する受信処理を発行し、その後、プロセスＰ＃３に対してメッセージを送信する送信処理を発行する。更に、プロセスＰ＃３は、計算処理Ｃ３Ａを発行後、プロセスＰ＃２からメッセージを受信する受信処理を発行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−２２３９５号公報
【特許文献２】特開平９−２８８６５０号公報
【特許文献３】特開平１１−２８２７８３号公報
【特許文献４】特開２０１０−４９３１４号公報
【特許文献５】特開平８−２４１２８７号公報
【非特許文献】
【０００６】
【非特許文献１】松田元彦、石川裕、工藤知宏、手塚宏史著  「ＭＰＩ通信モデルに適した非同期通信機構の設計と実装」Ｖｏｌ．４５．Ｎｏ．ＳＩＧ  １１（ＡＣＳ７）情報処理学会論文誌：コンピューティングシステム  ２００４年１０月
【非特許文献２】RON Brightwell, Keith Underwood著 「Evaluation of an Eager Protocol Optimization for MPI」  Tenth European PVM/MPI Users “Group Meeting, Venice, Italy, September/October 2003
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記従来のプロセス間通信処理では、例えば、プロセスＰ＃２の計算処理Ｃ２Ａに遅延が生じた場合、計算処理Ｃ２Ａ発行後の受信処理や送信処理にも遅延が生じる。更に、計算処理Ｃ２Ａの遅延に伴って、計算処理Ｃ２Ａ発行後の他のプロセス、例えば、プロセスＰ＃０やプロセスＰ＃３の送信処理が発行できず、プロセス間で遅延の連鎖が生じる。
【０００８】
そこで、ＭＰＩライブラリ内のバッファリング機構やキューイング機構を改善して各プロセス間の通信遅延を吸収する通信方式の研究が進められ、ＭＰＩライブラリの受信動作を割り込みドリブンで受信メッセージの即時読出しを実現する通信方式が知られている。このような通信方式を使用した場合には、プロセス間の通信遅延を吸収することで、プロセス間で遅延の連鎖を抑制できる。つまり、この通信方式では、メッセージを送信する送信側のプロセスからメッセージを受信する受信側のプロセスへメッセージを送信する際に、受信側のプロセスの動作状況に関係なく、一律に割り込みドリブンで受信メッセージを即時読み出す所定動作を実行する。
【０００９】
しかしながら、この通信方式では、受信側のプロセスが送信側のプロセスからメッセージを即時受信できる状態であるにもかかわらず、一律に所定動作を実行しなければならず、その分、無駄な動作が生じて、プロセス間の通信効率が低下してしまう。
【００１０】
１つの側面では、プロセス間の通信効率の向上を図るプロセッサの制御プログラム及び、その制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示するプロセス間通信プログラムは、一つの態様において、分散接続された各分散メモリ型プロセッサで実行するプロセス毎に、プロセス間の相互通信を実行する本体スレッド及び受信スレッドを実行した状態で、送信側のプロセスで実行する送信側本体スレッドから受信側のプロセスで実行する受信側本体スレッドにメッセージを送信する場合に、前記受信側のプロセスで実行する受信側受信スレッドに対して受信可能状態であるか否かを問い合せる問合せ手順と、前記問合せ手順の問合せ結果に基づき、前記送信側本体スレッド及び前記受信側本体スレッド間を直接通信する直接方式を使用するか否かを判定する直接方式判定手順と、前記直接方式判定手順にて前記直接方式を使用すると判定された場合に、前記送信側本体スレッドで得た前記メッセージを前記受信側本体スレッドに直接送信する本体スレッド側送信手順とを含むプログラムを前記分散メモリ型プロセッサに実行させる。
【発明の効果】
【００１２】
一つの態様では、プロセス間の通信効率の向上を図るという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１の分散メモリ型マルチプロセッサの内部構成を示す説明図である。
【図２】図２は、実施例２の分散メモリ型マルチプロセッサの全体構成を示す説明図である。
【図３】図３は、分散メモリ型マルチプロセッサの内部構成を示す説明図である。
【図４】図４は、直接方式の一例を示す説明図である。
【図５】図５は、送信スレッド方式の一例を示す説明図である。
【図６】図６は、受信スレッド方式の一例を示す説明図である。
【図７】図７は、送信処理向け指示データのデータ構成を示す説明図である。
【図８】図８は、送信キューの登録内容の一例を示す説明図である。
【図９】図９は、受信処理向け指示データのデータ構成を示す説明図である。
【図１０】図１０は、受信キューの登録内容の一例を示す説明図である。
【図１１】図１１は、プロセス間通信処理に関わる送信側本体スレッド内部の処理動作を示すフローチャートである。
【図１２】図１２は、プロセス間通信処理に関わる送信側送信スレッド内部の処理動作を示すフローチャートである。
【図１３】図１３は、プロセス間通信処理に関わる受信側受信スレッド内部の処理動作を示すフローチャートである。
【図１４】図１４は、プロセス間通信処理に関わる受信側本体スレッド内部の処理動作を示すフローチャートである。
【図１５】図１５は、直接方式使用時の送信側ＭＰＩライブラリ及び受信側ＭＰＩライブラリの一連動作を示す説明図である。
【図１６】図１６は、送信スレッド方式使用時の送信側ＭＰＩライブラリ及び受信側ＭＰＩライブラリの一連動作を示す説明図である。
【図１７】図１７は、受信スレッド方式使用時の送信側ＭＰＩライブラリ及び受信側ＭＰＩライブラリの一連動作を示す説明図である。
【図１８】図１８は、他の送信スレッド方式使用時の送信側ＭＰＩライブラリ及び受信側ＭＰＩライブラリの一連動作を示す説明図である。
【図１９】図１９は、従来の分散メモリ型マルチプロセッサの全体構成を示す説明図である。
【図２０】図２０は、従来のプロセス間通信処理の一例を示す説明図である。
【発明を実施するための形態】
【００１４】
以下、図面に基づいて、本願の開示するプロセス間通信プログラム及びプロセス間通信方法に関わる分散メモリ型マルチプロセッサの実施例を詳細に説明する。尚、本実施例により、開示技術が限定されるものではない。
【実施例１】
【００１５】
図１は、実施例１の分散メモリ型マルチプロセッサの内部構成を示す説明図である。図１に示す分散メモリ型マルチプロセッサ１００は、複数の分散メモリ型プロセッサ１０１を分散接続する。各分散メモリ型プロセッサ１０１は、実行するプロセス１０２毎に、プロセス１０２間の相互通信を実行する本体スレッド１１０及び受信スレッド１２０を実行する。尚、送信側のプロセス１０２Ａ上で実行する本体スレッド１１０を送信側本体スレッド１１０Ａとし、受信側のプロセス１０２Ｂ上で実行する本体スレッド１１０及び受信スレッド１２０を受信側本体スレッド１１０Ｂ及び受信側受信スレッド１２０Ｂとする。
【００１６】
送信側本体スレッド１１０Ａは、問合せ部１１１と、直接方式判定部１１２と、本体スレッド送信部１１３とを有する。問合せ部１１１は、送信側本体スレッド１１０Ａから受信側本体スレッド１１０Ｂにメッセージを送信する場合に、受信側受信スレッド１２０Ｂに対して受信可能な状態であるか否かを問い合わせる。
【００１７】
直接方式判定部１１２は、問合せ部１１１の問合せ結果に基づき、送信側本体スレッド１１０Ａ及び受信側本体スレッド１１０Ｂ間を直接通信する直接方式を使用するか否かを判定する。本体スレッド送信部１１３は、直接方式判定部１１２にて直接方式を使用すると判定された場合に、送信側本体スレッド１１０Ａで得たメッセージを受信側本体スレッド１１０Ｂに直接送信する。
【００１８】
尚、各分散メモリ型プロセッサ１０１は、プロセス間通信プログラムを実行することで、プロセス１０２上に本体スレッド１１０及び受信スレッド１２０を実行する。
【００１９】
実施例１では、送信側本体スレッド１１０Ａで得たメッセージを受信側本体スレッド１１０Ｂに送信する際、受信側受信スレッド１２０Ｂに対して受信可能な状態であるか否かを問い合せる。更に、実施例１では、その問合せ結果に基づき、直接方式を使用すると判定された場合に、送信側本体スレッド１１０Ａで得たメッセージを受信側本体スレッド１１０Ｂに直接送信する。その結果、送信側本体スレッド１１０Ａから受信側本体スレッド１１０Ｂにメッセージを直接送信することで、プロセス１０２間の遅延連鎖を抑制しながら、プロセス１０２間の通信効率の向上を図るという効果を奏する。
【実施例２】
【００２０】
図２は、実施例２の分散メモリ型マルチプロセッサの全体構成を示す説明図、図３は、分散メモリ型マルチプロセッサの内部構成を示す説明図である。図２に示す分散メモリ型マルチプロセッサ(以下、単にマルチプロセッサと称する)１は、複数の分散メモリ型プロセッサ(以下、単にプロセッサと称する)２と、複数のプロセッサ２を分散接続するインターコネクト３とを有する。
【００２１】
各プロセッサ２は、ユーザアプリケーション５を実行するプロセス４毎に、プロセス４間の通信を実行するＭＰＩライブラリ６を使用して本体スレッド１０、送信スレッド２０、受信スレッド３０、受信キュー４０及び送信キュー５０を実行する。尚、説明の便宜上、送信側のプロセス４上で実行する本体スレッド１０、送信スレッド２０及び受信スレッド３０を送信側本体スレッド１０Ａ、送信側送信スレッド２０Ａ及び送信側受信スレッド３０Ａとする。更に、受信側のプロセス４上で実行する本体スレッド１０、送信スレッド２０及び受信スレッド３０を受信側本体スレッド１０Ｂ、受信側送信スレッド２０Ｂ及び受信側受信スレッド３０Ｂとする。
【００２２】
本体スレッド１０は、プロセス４間でメッセージを相互通信する通信機能を有する。更に、送信側本体スレッド１０Ａは、問合せ部１１と、負荷監視部１２と、基準値判定部１３と、直接方式判定部１４と、受信スレッド方式判定部１５と、送信スレッド方式判定部１６と、本体スレッド送信部１７と、通信方式通知部１８とを有する。尚、説明の便宜上、送信側本体スレッド１０Ａの内部構成について説明するが、受信側本体スレッド１０Ｂも同一構成であるため、同一符号を付すことで、その重複する構成及び動作の説明については省略する。
【００２３】
問合せ部１１は、送信側本体スレッド１０Ａから受信側本体スレッド１０Ｂにメッセージを送信する際に、受信側受信スレッド３０Ｂに対して受信可能状態であるか否かを問い合せる。直接方式判定部１４は、問合せ部１１の問合せ結果に基づき、送信側本体スレッド１０Ａ及び受信側本体スレッド１０Ｂ間を直接通信する直接方式を使用するか否かを判定する。尚、問合せ部１１の問合せ結果とは、受信側受信スレッド３０Ｂからの直接方式の使用に関する指示に相当する。
【００２４】
直接方式判定部１４は、直接方式を使用する旨の指示を検出すると、直接方式を使用すると判定する。また、直接方式判定部１４は、直接方式以外の方式を使用する旨の指示を検出すると、直接方式以外の方式、すなわち受信スレッド方式又は送信スレッド方式を使用すると判定する。
【００２５】
負荷監視部１２は、問合せ部１１の問合せ開始タイミングに相当する時刻Ｔ０と、問合せ部１１の問合せ結果を受信する受信タイミングに相当する時刻Ｔ１とを取得し、これら時刻Ｔ０，Ｔ１に基づき問合せ時間を算出する。尚、問合せ時間は、送信側プロセス４Ａ及び受信側プロセス４Ｂ間の通信負荷情報となる。更に、基準値判定部１３は、問合せ時間が予め設定した基準値を超えたか否かを判定する。
【００２６】
送信スレッド方式判定部１６は、直接方式判定部１４にて直接方式以外の方式を使用すると判定した場合、基準値判定部１３の判定結果に基づき、送信スレッド方式を使用するか否かを判定する。送信スレッド方式判定部１６は、問合せ時間が基準値を超えた場合、送信スレッド方式を使用すると判定する。
【００２７】
受信スレッド方式判定部１５は、直接方式判定部１４にて直接方式外の方式を使用すると判定した場合、基準値判定部１３の判定結果に基づき、受信スレッド方式を使用するか否かを判定する。受信スレッド方式判定部１５は、問合せ時間が基準値を超えなかった場合、受信スレッド方式を使用すると判定する。
【００２８】
通信方式通知部１８は、送信側本体スレッド１０Ａで使用する使用通信方式、例えば、直接方式、受信スレッド方式又は送信スレッド方式を受信側本体スレッド１０Ｂや受信側受信スレッド３０Ｂに通知する。通信方式通知部１８は、直接方式を使用する場合、直接方式の使用を受信側本体スレッド１０Ｂに通知する。また、通信方式通知部１８は、受信スレッド方式又は送信スレッド方式を使用する場合、その使用通信方式を受信側本体スレッド１０Ｂ及び受信側受信スレッド３０Ｂに通知する。
【００２９】
また、送信側本体スレッド１０Ａの本体スレッド送信部１７は、使用通信方式を使用してメッセージを受信側本体スレッド１０Ｂに送信する。本体スレッド送信部１７は、使用通信方式として直接方式を使用する場合、インターコネクト３経由でメッセージを受信側本体スレッド１０Ｂに直接送信する。
【００３０】
図４は、直接方式の一例を示す説明図である。受信側本体スレッド１０Ｂが送信側本体スレッド１０Ａのメッセージ送信処理前からメッセージ受信可能な状態の場合、受信側本体スレッド１０Ｂの処理によって送信側本体スレッド１０Ａの処理がブロックされることはない。従って、送信側本体スレッド１０Ａ及び受信側本体スレッド１０Ｂは、直接方式を使用して、送信スレッド２０や受信スレッド３０を経由することなく、メッセージを受信側本体スレッド１０Ｂに直接送信する。尚、直接方式は、受信スレッド方式や送信スレッド方式に比較してプロセス４間の通信効率が良好となる。
【００３１】
また、送信側本体スレッド１０Ａの本体スレッド送信部１７は、送信スレッド方式を使用する場合、送信側送信スレッド２０Ａ経由でメッセージを受信側本体スレッド１０Ｂに送信する。図５は、送信スレッド方式の一例を示す説明図である。送信側本体スレッド１０Ａの送信処理は受信側本体スレッド１０Ｂ側の計算処理Ｃ２Ａでブロックされている。
【００３２】
しかしながら、送信側送信スレッド２０Ａは、送信側本体スレッド１０Ａからのメッセージを常時受信できる体制を整えている。そこで、送信側本体スレッド１０Ａは、受信側本体スレッド１０Ｂの受信状況に関係なく、メッセージを送信側送信スレッド２０Ａに伝送する。そして、送信側送信スレッド２０Ａは、そのメッセージを一時的に格納する。
【００３３】
更に、送信側送信スレッド２０Ａは、受信側本体スレッド１０Ｂ側の受信可能状態を検出すると、一時的に格納したメッセージを受信側本体スレッド１０Ｂに送信する。尚、送信側本体スレッド１０Ａは、問合せ時間が基準値を超えた場合、インターコネクト３上のネットワーク負荷や受信側本体スレッド１０Ｂの計算負荷が高いものと判断し、送信スレッド方式を使用する。そして、送信スレッド方式を使用することで、ネットワーク負荷や受信側本体スレッド１０Ｂの計算負荷が高い状況下でも、送信側本体スレッド１０Ａから受信側本体スレッド１０Ｂに対してメッセージを円滑に送信できる。
【００３４】
また、送信側本体スレッド１０Ａの本体スレッド送信部１７は、受信スレッド方式を使用する場合、受信側受信スレッド３０Ｂ経由でメッセージを受信側本体スレッド１０Ｂに送信する。図６は、受信スレッド方式の一例を示す説明図である。送信側本体スレッド１０Ａの送信処理は受信側本体スレッド１０Ｂ側の計算処理Ｃ２Ａでブロックされている。
【００３５】
しかしながら、受信側受信スレッド３０Ｂは、送信側本体スレッド１０Ａからのメッセージを常時受信できる体制を整えている。そこで、送信側本体スレッド１０Ａは、受信側本体スレッド１０Ｂの受信状況に関係なく、メッセージを受信側受信スレッド３０Ｂに送信する。更に、受信側受信スレッド３０Ｂは、そのメッセージを一時的に格納する。更に、受信側受信スレッド３０Ｂは、受信側本体スレッド１０Ｂの受信可能状態を検出すると、一時的に格納したメッセージを受信側本体スレッド１０Ｂに伝送する。
【００３６】
また、送信スレッド２０は、送信スレッド格納部２１と、送信スレッド送信部２２とを有する。送信側送信スレッド２０Ａの送信スレッド格納部２１は、送信スレッド方式を使用する際、送信側本体スレッド１０Ａから取得したメッセージを一時的に格納する。送信スレッド送信部２２は、受信側本体スレッド１０Ｂの受信可能状態を検出すると、送信スレッド格納部２１にて一時的に格納したメッセージをインターコネクト３経由で受信側プロセス４の受信側本体スレッド１０Ｂに送信する。
【００３７】
受信スレッド３０は、受信スレッド格納部３１と、受信スレッド送信部３２とを有する。受信側受信スレッド３０Ｂの受信スレッド格納部３１は、受信スレッド方式を使用する際、インターコネクト３経由で送信側本体スレッド２０Ａから受信したメッセージを一時的に格納する。受信スレッド送信部３２は、受信側本体スレッド３０Ａの受信可能状態を検出すると、受信スレッド格納部３１にて一時的に格納したメッセージを受信側本体スレッド１０Ｂに伝送する。
【００３８】
尚、送信側本体スレッド１０Ａは、受信側本体スレッド１０Ｂが受信処理向け指示データを受け取っていないために受信できない状態であると判断した場合、問合せ時間が基準値を超えなかったならば、ネットワーク負荷の影響は小さい状態であると判断する。そして、送信側本体スレッド１０Ａは、受信スレッド方式を使用する。そして、受信スレッド方式を使用することで、送信側本体スレッド１０Ａから受信側本体スレッド１０Ｂに対してメッセージを円滑に送信できる。
【００３９】
図７は、送信処理向け指示データのデータ構造を示す説明図、図８は、送信キュー５０の登録内容の一例を示す説明図である。図７に示す送信処理向け指示データ７０Ａは、送信メッセージを識別する指示データに相当する。送信処理向け指示データ７０Ａは、メッセージ送信先であるプロセッサ２及びプロセス４を識別する送信先７１Ａと、メッセージの開始アドレスを示すメッセージ開始アドレス７２Ａと、そのメッセージの長さを示すメッセージ長７３Ａとを有する。尚、メッセージ開始アドレス７２Ａは、図示せぬメッセージを記憶する領域の開始アドレスに相当する。
【００４０】
図８に示す送信キュー５０は、他のプロセス４に対して送信するメッセージを識別する送信処理向け指示データ５１毎に使用通信方式５２を登録する。送信側本体スレッド１０Ａは、メッセージ送信時に送信メッセージの送信処理向け指示データを検出すると、送信処理向け指示データに対応する使用通信方式を送信キュー５０に登録する。送信側本体スレッド１０Ａ又は送信側送信スレッド２０Ａは、送信側プロセス４上の送信キュー５０に登録済みの送信処理向け指示データに基づき、該当するメッセージを読み出す。更に、送信側本体スレッド１０Ａ又は送信側送信スレッド２０Ａは、送信側プロセス４上の送信キュー５０に登録済みの送信処理向け指示データに対応する使用通信方式を使用して、読み出したメッセージを受信側プロセス４に送信することになる。
【００４１】
図９は、受信処理向け指示データのデータ構造を示す説明図、図１０は、受信キュー４０の登録内容の一例を示す説明図である。図９に示す受信処理向け指示データ７０Ｂは、受信メッセージを識別する指示データに相当する。受信処理向け指示データ７０Ｂは、受信メッセージの送信元であるプロセッサ２及びプロセス４を識別する送信元７１Ｂと、そのメッセージの開始アドレスを示すメッセージ開始アドレス７２Ｂと、そのメッセージの長さを示すメッセージ長７３Ｂとを有する。尚、メッセージ開始アドレス７２Ｂは、図示せぬメッセージを記憶する領域の開始アドレスに相当する。
【００４２】
図１０に示す受信キュー４０は、他のプロセス４から受信するメッセージを識別する受信処理向け指示データ４１毎に使用通信方式４２を登録する。受信側本体スレッド１０Ｂは、メッセージを受信する際に受信メッセージの受信処理向け指示データを検出すると、受信処理向け指示データに対応する使用通信方式を受信キュー４０に登録する。
【００４３】
次に、実施例２のマルチプロセッサ１の動作について説明する。図１１は、プロセス間通信処理に関わる送信側本体スレッド１０Ａ内部の処理動作を示すフローチャートである。
【００４４】
図１１において送信側本体スレッド１０Ａは、受信側プロセス４上の受信側本体スレッド１０Ｂに送信するメッセージの送信処理向け指示データを取得し、その送信処理向け指示データを送信キュー５０に登録する(ステップＳ１１)。送信側本体スレッド１０Ａの負荷監視部１２は、例えば、問合せ開始タイミングに相当する現在時刻Ｔ０を取得する(ステップＳ１２)。更に、送信側本体スレッド１０Ａの問合せ部１１は、インターコネクト３経由で受信側受信スレッド３０Ｂに対して受信可能状態であるか否かを問い合せる(ステップＳ１３)。
【００４５】
問合せ部１１は、インターコネクト３経由で受信側受信スレッド３０Ｂの問合せ結果を受信したか否かを判定する(ステップＳ１４)。更に、送信側本体スレッド１０Ａは、問合せ結果を受信した場合(ステップＳ１４肯定)、問合せ結果に対応した使用通信方式を、この送信処理向け指示データに対応付けて送信キュー５０に登録する(ステップＳ１５)。尚、ここで、使用通信方式は、直接方式又は直接方式以外の方式に相当する。更に、送信側本体スレッド１０Ａの負荷監視部１２は、例えば、問合せ結果の受信タイミングに相当する現在時刻Ｔ１を取得する(ステップＳ１６)。
【００４６】
送信側本体スレッド１０Ａの直接方式判定部１４は、問合せ結果に基づき、直接方式を使用するか否かを判定する(ステップＳ１７)。送信側本体スレッド１０Ａの通信方式通知部１８は、直接方式を使用する場合(ステップＳ１７肯定)、直接方式を使用通信方式として受信側本体スレッド１０Ｂに通知する(ステップＳ１８)。更に、送信側本体スレッド１０Ａの本体スレッド送信部１７は、送信キュー５０の登録内容に基づき、直接方式を使用して、メッセージをインターコネクト３経由で受信側本体スレッド１０Ｂに直接送信し(ステップＳ１９)、この処理動作を終了する。また、送信側本体スレッド１０Ａは、問合せ結果を受信しなかった場合(ステップＳ１４否定)、問合せ結果を受信したか否かを継続監視すべく、ステップＳ１４に移行する。
【００４７】
また、送信側本体スレッド１０Ａの負荷監視部１２は、直接方式を使用しない場合(ステップＳ１７否定)、取得した時刻Ｔ０及び時刻Ｔ１を使用して、問合せ開始タイミングから問合せ結果受信タイミングまでの問合せ時間を算出する(ステップＳ２０)。送信側本体スレッド１０Ａの基準値判定部１３は、問合せ時間が基準値を超えたか否かを判定する(ステップＳ２１)。送信側本体スレッド１０Ａの送信スレッド方式判定部１６は、問合せ時間が基準値を超えた場合(ステップＳ２１肯定)、送信スレッド方式を使用すると判断する(ステップＳ２２)。
【００４８】
送信側本体スレッド１０Ａは、送信スレッド方式を使用すると判断した場合、このメッセージに対応する使用通信方式を送信スレッド方式として送信キュー５０に登録する(ステップＳ２３)。送信側本体スレッド１０Ａの通信方式通知部１８は、使用通信方式として送信スレッド方式を受信側本体スレッド１０Ｂ及び受信側受信スレッド３０Ｂに通知する (ステップＳ２４)。送信側本体スレッド１０Ａの本体スレッド送信部１７は、メッセージを送信側送信スレッド２０Ａに伝送し(ステップＳ２５)、この処理動作を終了する。尚、送信側送信スレッド２０Ａは、メッセージを送信スレッド格納部２１に一時的に格納する。
【００４９】
また、送信側本体スレッド１０Ａの受信スレッド方式判定部１５は、問合せ時間が基準値を超えなかった場合(ステップＳ２１否定)、受信スレッド方式を使用すると判断する(ステップＳ２６)。送信側本体スレッド１０Ａは、受信スレッド方式を使用すると判断した場合、このメッセージに対応する使用通信方式を受信スレッド方式として送信キュー５０に登録する(ステップＳ２７)。
【００５０】
更に、送信側本体スレッド１０Ａの通信方式通知部１８は、インターコネクト３経由で、使用通信方式として受信スレッド方式を受信側本体スレッド１０Ｂ及び受信側受信スレッド３０Ｂに通知する(ステップＳ２８)。送信側本体スレッド１０Ａの本体スレッド送信部１７は、メッセージを受信側受信スレッド３０Ｂに送信し(ステップＳ２９)、この処理動作を終了する。尚、受信側受信スレッド３０Ｂは、メッセージを受信スレッド格納部３１に一時的に格納する。
【００５１】
図１２は、プロセス間通信処理に関わる送信側送信スレッド２０Ａ内部の処理動作を示すフローチャートである。図１２において送信側送信スレッド２０Ａは、送信側本体スレッド１０Ａからメッセージを取得したか否かを判定する(ステップＳ３１)。送信側送信スレッド２０Ａの送信スレッド格納部２１は、メッセージを取得した場合(ステップＳ３１肯定)、そのメッセージを一時的に格納する(ステップＳ３２)。
【００５２】
送信側送信スレッド２０Ａは、受信側本体スレッド１０Ｂの受信可能状態を検出したか否かを判定する(ステップＳ３３)。送信側送信スレッド２０Ａの送信スレッド送信部２２は、受信側本体スレッド１０Ｂの受信可能状態を検出した場合(ステップＳ３３肯定)、インターコネクト３経由で一時的に格納したメッセージを受信側本体スレッド１０Ｂに送信し(ステップＳ３４)、この処理動作を終了する。
【００５３】
送信側送信スレッド２０Ａは、メッセージを取得しなかった場合(ステップＳ３１否定)、メッセージの取得を継続監視すべく、ステップＳ３１に移行する。また、送信側送信スレッド２０Ａは、受信側本体スレッド１０Ｂの受信可能状態を検出しなかった場合(ステップＳ３３否定)、受信可能状態の検出を継続監視すべく、ステップＳ３３に移行する。
【００５４】
図１３は、プロセス間通信処理に関わる受信側受信スレッド３０Ｂ内部の処理動作を示すフローチャートである。図１３において受信側受信スレッド３０Ｂは、送信側本体スレッド１０Ａの問合せ部１１からの問合せを検出したか否かを判定する(ステップＳ４１)。受信側受信スレッド３０Ｂは、送信側本体スレッド１０Ａからの問合せを検出した場合(ステップＳ４１肯定)、受信キュー４０の登録内容を参照し、受信側プロセス４の受信状態が受信可能であるか否かを判定する(ステップＳ４２)。
【００５５】
受信側受信スレッド３０Ｂは、受信側プロセス４の受信状態が受信可能である場合(ステップＳ４２肯定)、使用通信方式として直接方式を使用する旨を送信側本体スレッド１０Ａに通知することで(ステップＳ４３)、この処理動作を終了する。
【００５６】
また、受信側受信スレッド３０Ｂは、送信側本体スレッド１０Ａからの問合せを検出しなかった場合(ステップＳ４１否定)、送信側本体スレッド１０Ａからの問合せを検出したか否かを継続監視すべく、ステップＳ４１に移行する。また、受信側受信スレッド３０Ｂは、受信側プロセス４の受信状態が受信可能でない場合(ステップＳ４２否定)、使用通信方式として直接通信方式以外の方式を使用する旨を送信側本体スレッド１０Ａに通知する(ステップＳ４４)。
【００５７】
更に、受信側受信スレッド３０Ｂは、送信側本体スレッド１０Ａから直接通信方式以外の使用通信方式を受信したか否かを判定する(ステップＳ４５)。受信側受信スレッド３０Ｂは、送信側本体スレッド１０Ａから直接通信方式以外の使用通信方式を受信した場合(ステップＳ４５肯定)、使用通信方式が送信スレッド方式であるか否かを判定する(ステップＳ４６)。
【００５８】
受信側受信スレッド３０Ｂは、使用通信方式が送信スレッド方式である場合(ステップＳ４６肯定)、送信スレッド方式を使用することで(ステップＳ４７)、この処理動作を終了する。また、受信側受信スレッド３０Ｂは、使用通信方式を受信しなかった場合(ステップＳ４５否定)、使用通信方式を受信したか否かを継続監視すべく、ステップＳ４５に移行する。また、受信側受信スレッド３０Ｂは、使用通信方式が送信スレッド方式でない場合(ステップＳ４６否定)、すなわち受信スレッド方式の場合、受信スレッド方式を使用する(ステップＳ４８)。
【００５９】
そして、受信側受信スレッド３０Ｂは、インターコネクト３経由で送信側本体スレッド１０Ａからのメッセージを受信したか否かを判定する(ステップＳ４９)。受信側受信スレッド３０Ｂの受信スレッド格納部３１は、送信側本体スレッド１０Ａからのメッセージを受信した場合(ステップＳ４９肯定)、メッセージを一時的に格納し、受信側本体スレッド１０Ｂから受信可能を検出したか否かを判定する(ステップＳ５０)。
【００６０】
受信側受信スレッド３０Ｂの受信スレッド送信部３２は、受信側本体スレッド１０Ｂから受信可能を検出した場合(ステップＳ５０肯定)、一時的に格納したメッセージを受信側本体スレッド１０Ｂに伝送し(ステップＳ５１)、この処理動作を終了する。受信側受信スレッド３０Ｂは、送信側本体スレッド１０Ａからのメッセージを受信しなかった場合(ステップＳ４９否定)、メッセージを継続監視すべく、ステップＳ４９に移行する。受信側受信スレッド３０Ｂは、受信側本体スレッド１０Ｂから受信可能を検出しなかった場合(ステップＳ５０否定)、受信可能を検出したか否かを継続監視すべく、ステップＳ５０に移行する。
【００６１】
図１４は、プロセス間通信処理に関わる受信側本体スレッド１０Ｂ内部の処理動作を示すフローチャートである。図１４において受信側本体スレッド１０Ｂは、メッセージを受信する際、受信処理向け指示データを取得し、その受信処理向け指示データを受信キュー４０に登録する(ステップＳ６１)。受信側本体スレッド１０Ｂは、送信側本体スレッド１０Ａから使用通信方式を受信したか否かを判定する(ステップＳ６２)。受信側本体スレッド１０Ｂは、使用通信方式を受信した場合(ステップＳ６２肯定)、この使用通信方式をメッセージ対応の受信キュー４０に登録する(ステップＳ６３)。
【００６２】
受信側本体スレッド１０Ｂは、使用通信方式が直接方式であるか否かを判定する(ステップＳ６４)。受信側本体スレッド１０Ｂは、使用通信方式が直接方式である場合(ステップＳ６４肯定)、直接方式を使用して、インターコネクト３経由で、送信側本体スレッド１０Ａからメッセージを受信し(ステップＳ６５)、この処理動作を終了する。
【００６３】
受信側本体スレッド１０Ｂは、使用通信方式が直接方式でない場合(ステップＳ６４否定)、直接通信方式以外の通信方式であると判断し、使用通信方式が送信スレッド方式であるか否かを判定する(ステップＳ６６)。受信側本体スレッド１０Ｂは、使用通信方式が送信スレッド方式である場合(ステップＳ６６肯定)、受信可能な状態であるか否かを判定する。尚、受信側本体スレッド１０Ｂは、受信キュー４０の登録内容を参照して受信可能な状態であるか否かを判定する。
【００６４】
受信側本体スレッド１０Ｂは、受信可能な状態である場合、送信側送信スレッド２０Ａに対して受信可能である旨を通知する(ステップＳ６７)。受信側本体スレッド１０Ｂは、インターコネクト３経由で、送信側送信スレッド２０Ａに一時的に格納したメッセージを受信し(ステップＳ６８)、この処理動作を終了する。
【００６５】
受信側本体スレッド１０Ｂは、使用通信方式が送信スレッド方式でない場合(ステップＳ６６否定)、すなわち受信スレッド方式であると判断し、受信可能な状態であるか否かを判定する。受信側本体スレッド１０Ｂは、受信可能な状態である場合、受信側受信スレッド３０Ｂに対して受信可能である旨を通知する(ステップＳ６９)。受信側本体スレッド１０Ｂは、受信側受信スレッド３０Ｂに一時的に格納したメッセージを受信し(ステップＳ７０)、この処理動作を終了する。また、受信側本体スレッド１０Ｂは、送信側本体スレッド１０Ａの使用通信方式を受信しなかった場合(ステップＳ６２否定)、使用通信方式を受信したか否かを継続監視すべく、ステップＳ６２に移行する。
【００６６】
プロセス間通信処理では、受信側ＭＰＩライブラリ６Ｂが送信側本体スレッド１０Ａからのメッセージを受信可能な状態の場合、直接方式を使用する。図１５は、直接方式使用時の送信側ＭＰＩライブラリ６Ａ及び受信側ＭＰＩライブラリ６Ｂの一連動作を示す説明図である。送信側本体スレッド１０Ａは、受信側本体スレッド１０Ｂに対してメッセージを送信する際、受信側受信スレッド３０Ｂに対して受信側ＭＰＩライブラリ６Ｂが受信可能であるか否かを問い合せる(ステップＳ１０１)。
【００６７】
受信側受信スレッド３０Ｂは、受信側ＭＰＩライブラリ６Ｂが受信可能である場合に、問合せ結果として直接方式の使用を送信側本体スレッド１０Ａに通知する(ステップＳ１０２)。送信側本体スレッド１０Ａは、直接方式の使用と判定すると、直接方式の使用を受信側本体スレッド１０Ｂに通知する(ステップＳ１０３)。そして、送信側本体スレッド１０Ａは、受信スレッド３０及び送信スレッド２０を経由することなく、受信側本体スレッド１０Ｂにメッセージを送信する(ステップＳ１０４)。
【００６８】
プロセス間通信処理では、送信側本体スレッド１０Ａから受信側受信スレッド３０Ｂに対して受信可能であるか否かを問い合せた問合せ時間が基準値を超えた場合、送信スレッド方式を使用する。図１６は、送信スレッド方式使用時の送信側ＭＰＩライブラリ６Ａ及び受信側ＭＰＩライブラリ６Ｂの一連動作を示す説明図である。送信側本体スレッド１０Ａは、受信側本体スレッド１０Ｂに対してメッセージを送信する際、受信側受信スレッド３０Ｂに対して受信側ＭＰＩライブラリ６Ｂが受信可能であるか否かを問い合せる(ステップＳ２０１)。
【００６９】
受信側受信スレッド３０Ｂは、受信側ＭＰＩライブラリ６Ｂが受信不可である場合に、問合せ結果として直接方式以外の方式の使用を送信側本体スレッド１０Ａに通知する(ステップＳ２０２)。送信側本体スレッド１０Ａは、問合せ時間が基準値を超えた場合、送信スレッド方式の使用と判定する。送信側本体スレッド１０Ｂは、送信スレッド方式の使用と判定すると、送信スレッド方式の使用を受信側本体スレッド１０Ｂ及び受信側受信スレッド３０Ｂに通知する(ステップＳ２０３)。
【００７０】
そして、送信側本体スレッド１０Ａは、メッセージを送信側送信スレッド２０Ａに一時的に格納する(ステップＳ２０４)。送信側送信スレッド２０Ａは、受信側本体スレッド１０Ｂ側の受信可能状態を検出すると(ステップＳ２０５)、一時的に格納したメッセージを受信側本体スレッド１０Ｂに送信する(ステップＳ２０６)。
【００７１】
プロセス間通信処理では、送信側本体スレッド１０Ａから受信側受信スレッド３０Ｂに対して受信可能であるか否かを問い合せる問合せ時間が基準値を超えなかった場合、受信スレッド方式を使用する。図１７は、受信スレッド方式使用時の送信側ＭＰＩライブラリ６Ａ及び受信側ＭＰＩライブラリ６Ｂの一連動作を示す説明図である。
【００７２】
送信側本体スレッド１０Ａは、受信側本体スレッド１０Ｂに対してメッセージを送信する際、受信側受信スレッド１０Ｂに対して受信側ＭＰＩライブラリ６Ｂが受信可能であるか否かを問い合せる(ステップＳ３０１)。
【００７３】
受信側受信スレッド３０Ｂは、受信側ＭＰＩライブラリ６Ｂが受信不可である場合に、問合せ結果として直接方式以外の方式の使用を送信側本体スレッド１０Ａに通知する(ステップＳ３０２)。送信側本体スレッド１０Ａは、問合せ時間が基準値を超えなかった場合、受信スレッド方式の使用と判定する。送信側本体スレッド１０Ａは、受信スレッド方式の使用と判定すると、受信スレッド方式の使用を受信側本体スレッド１０Ｂ及び受信側受信スレッド３０Ｂに通知する(ステップＳ３０３)。
【００７４】
そして、送信側本体スレッド１０Ａは、メッセージを受信側受信スレッド３０Ｂに一時的に格納する(ステップＳ３０４)。受信側受信スレッド３０Ｂは、受信側本体スレッド１０Ｂ側の受信可能状態を検出すると(ステップＳ３０５)、一時的に格納したメッセージを受信側本体スレッド１０Ｂに送信する(ステップＳ３０６)。
【００７５】
実施例２では、受信側ＭＰＩライブラリ６Ｂの処理が送信側本体スレッド１０Ａのメッセージの送信処理を阻害しない状況下では直接方式を使用する。そして、受信スレッド３０や送信スレッド２０を経由することなく、送信側本体スレッド１０Ａから受信側本体スレッド１０Ｂにメッセージを直接送信する。その結果、プロセス４間の遅延連鎖を抑制しながら、プロセス４間の通信効率の更なる向上を図ることで、アプリケーションの高速化を図ることができる。
【００７６】
実施例２では、受信側ＭＰＩライブラリ６Ｂの処理が送信側本体スレッド１０Ａのメッセージの送信処理を阻害する状況下で問合せ時間が基準値を超えた場合、送信スレッド方式を使用する。そして、送信側本体スレッド１０Ａは、送信側送信スレッド２０Ａに一時的にメッセージを格納する。更に、送信側送信スレッド２０Ａは、受信側本体スレッド１０Ｂ側の受信可能状態を検出すると、一時的に格納したメッセージを受信側本体スレッド１０Ｂに送信する。受信側ＭＰＩライブラリ６Ｂの処理やネットワーク負荷の増大で送信側本体スレッド１０Ａのメッセージの送信処理を阻害する状況下でも、送信側本体スレッド１０Ａは、遅延することなく、送信処理を実行して後続の他の有益な処理を実行できる。その結果、プロセス４間の遅延連鎖を抑制しながら、プロセス４間の通信効率の向上を図ることで、アプリケーションの高速化を図ることができる。
【００７７】
実施例２では、受信側ＭＰＩライブラリ６Ｂの処理が送信側本体スレッド１０Ａのメッセージの送信処理を阻害する状況下で、問合せ時間が基準値を超えなかった場合、受信スレッド方式を使用する。そして、送信側本体スレッド１０Ａは、受信側受信スレッド３０Ｂに一時的にメッセージを格納する。更に、受信側受信スレッド３０Ｂは、受信側本体スレッド１０Ｂ側の受信可能状態を検出すると、一時的に格納したメッセージを受信側本体スレッド１０Ｂに伝送する。受信側ＭＰＩライブラリ６Ｂの処理が送信側本体スレッド１０Ａ側の送信処理を阻害する状況下でも、送信側本体スレッド１０Ａは、遅延することなく、送信処理を実行して、後続する他の有益な処理を実行できる。その結果、プロセス４間の遅延連鎖を抑制しながら、プロセス４間の通信効率の向上を図ることで、アプリケーションの高速化を図ることができる。
【００７８】
尚、上記実施例２では、送信側本体スレッド１０Ａが受信側受信スレッド３０Ｂに対する問合せ開始から問合せ結果受信に到る問合せ時間が基準値を超えた場合、送信スレッド方式の使用を決定する。そして、実施例２では、送信スレッド方式の使用を決定し、送信側本体スレッド１０Ａで得たメッセージを送信側送信スレッド２０Ａに一時的に格納する。
【００７９】
しかしながら、問合せ時間が基準値を超える場合は、問合せ開始から問合せ結果を受信するまでの時間は長くなる。そこで、送信側本体スレッド１０Ａは、受信側受信スレッド３０Ｂの問合せ開始から問合せ結果受信前までに、送信側送信スレッド２０Ａにメッセージを複写するようにしても良い。図１８は、他の送信スレッド方式使用時の送信側ＭＰＩライブラリ６Ａ及び受信側ＭＰＩライブラリ６Ｂの一連動作を示す説明図である。
【００８０】
送信側本体スレッド１０Ａは、受信側本体スレッド１０Ｂに対してメッセージを送信する際、受信側受信スレッド３０Ｂに対して受信側ＭＰＩライブラリ６Ｂが受信可能であるか否かを問い合せる(ステップＳ４０１)。更に、送信側本体スレッド１０Ａは、送信側送信スレッド２０Ａにメッセージを複写する(ステップＳ４０２)。
【００８１】
受信側受信スレッド３０Ｂは、受信側ＭＰＩライブラリ６Ｂが受信不可である場合に、問合せ結果として直接方式以外の方式の使用を送信側本体スレッド１０Ａに通知する(ステップＳ４０３)。送信側本体スレッド１０Ａは、問合せ時間が基準値を超えた場合、送信スレッド方式の使用と判定する。
【００８２】
送信側本体スレッド１０Ｂは、送信スレッド方式の使用と判定すると、送信スレッド方式の使用を受信側本体スレッド１０Ｂ及び受信側受信スレッド３０Ｂに通知する(ステップＳ４０４)。送信側送信スレッド２０Ａは、受信側本体スレッド１０Ｂ側の受信可能状態を検出すると(ステップＳ４０５)、複写したメッセージを受信側本体スレッド１０Ｂに送信する(ステップＳ４０６)。
【００８３】
送信側本体スレッド１０Ａは、受信側受信スレッド３０Ｂの問合せ開始から問合せ結果を受信するまでに、送信側送信スレッド２０Ａにメッセージを複写する。そして、送信側送信スレッド２０Ａは、受信側本体スレッド１０Ｂ側の受信可能状態を検出すると、複写したメッセージを受信側本体スレッド１０Ｂに送信する。その結果、送信側本体スレッド１０Ａは、送信側送信スレッド２０Ａ内にメッセージを複写しておくことで、送信側送信スレッド２０Ａから受信側本体スレッド１０Ｂに送信する際の後続処理を迅速に行うことができる。
【００８４】
また、上記実施例２では、負荷監視部１２が問合せ開始タイミングの時刻Ｔ０及び問合せ結果受信タイミングの時刻Ｔ１に基づき問合せ時間を算出し、この問合せ時間を送信側本体スレッド１０Ａ及び受信側受信スレッド３０Ｂ間の通信負荷情報とした。しかしながら、通信負荷情報は問合せ時間に限定するものではなく、送信側本体スレッド１０Ａ及び受信側受信スレッド３０Ｂ間の通信負荷情報を認識できる、例えば、トラフィック量等の要素であっても良い。
【００８５】
また、送信側本体スレッド１０Ａは、受信側ＭＰＩライブラリ６Ｂ側の受信状況が受信可能でない場合に、問合せ時間を判定することなく、受信スレッド方式又は送信スレッド方式の何れか一方を自動的に使用するようにしても良い。
【００８６】
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【００８７】
以上、本実施例を含む実施の形態に関し、更に以下の付記を開示する。
【００８８】
（付記１）分散接続された各分散メモリ型プロセッサで実行するプロセス毎に、プロセス間の相互通信を実行する本体スレッド及び受信スレッドを実行した状態で、送信側のプロセスで実行する送信側本体スレッドから受信側のプロセスで実行する受信側本体スレッドにメッセージを送信する場合に、前記受信側のプロセスで実行する受信側受信スレッドに対して受信可能状態であるか否かを問い合せる問合せ手順と、
前記問合せ手順の問合せ結果に基づき、前記送信側本体スレッド及び前記受信側本体スレッド間を直接通信する直接方式を使用するか否かを判定する直接方式判定手順と、
前記直接方式判定手順にて前記直接方式を使用すると判定された場合に、前記送信側本体スレッドで得た前記メッセージを前記受信側本体スレッドに直接送信する本体スレッド側送信手順と
を含むプログラムを前記分散メモリ型プロセッサに実行させることを特徴とするプロセス間通信プログラム。
【００８９】
(付記２)前記送信側本体スレッドで得た前記メッセージを前記受信側本体スレッドに送信する場合に、前記送信側本体スレッド及び前記受信側受信スレッド間の通信負荷情報を収集する負荷情報収集手順と、
前記直接方式判定手順にて前記直接方式を使用しないと判定された場合に、前記通信負荷情報に基づき、前記送信側本体スレッド及び前記受信側本体スレッド間を前記受信側受信スレッド経由で通信する受信スレッド方式を使用するか否かを判定する受信スレッド方式判定手順と、
前記受信スレッド方式判定手順にて前記受信スレッド方式を使用すると判定された場合に、前記送信側本体スレッドで得た前記メッセージを前記受信側受信スレッドに送信する前記本体スレッド側送信手順と、
前記受信側受信スレッドで受信した前記メッセージを一時的に格納する受信スレッド側格納手順と、
前記受信側本体スレッドの受信可能状態を検出すると、前記受信側受信スレッドに格納された前記メッセージを当該受信側本体スレッドに送信する受信スレッド側送信手順と
を含むことを特徴とする付記１記載のプロセス間通信プログラム。
【００９０】
(付記３)前記送信側本体スレッドで得た前記メッセージを前記受信側本体スレッドに送信する場合に、前記送信側本体スレッド及び前記受信側受信スレッド間の通信負荷情報を収集する負荷情報収集手順と、
前記直接方式判定手順にて前記直接方式を使用しないと判定された場合に、前記通信負荷情報に基づき、前記送信側本体スレッド及び前記受信側本体スレッド間を前記送信側のプロセスで実行した送信側送信スレッド経由で通信する送信スレッド方式を使用するか否かを判定する送信スレッド方式判定手順と、
前記送信スレッド方式判定手順にて前記送信スレッド方式を使用すると判定された場合に、前記送信側本体スレッドで得たメッセージを前記送信側送信スレッドに送信する前記本体スレッド側送信手順と、
前記送信側送信スレッドで受信した前記メッセージを一時的に格納する送信スレッド側格納手順と、
前記受信側本体スレッドの受信可能状態を検出すると、前記送信側送信スレッドに格納された前記メッセージを当該受信側本体スレッドに送信する送信スレッド側送信手順と
を含むことを特徴とする付記１又は２記載のプロセス間通信プログラム。
【００９１】
(付記４)前記通信負荷情報が所定基準値を超えたか否かを判定する負荷判定手順を含み、
前記受信スレッド方式判定手順は、
前記負荷判定手順にて前記通信負荷情報が前記所定基準値を超えなかったと判定された場合に、前記受信スレッド方式を使用すると判定することを特徴とする付記２又は３記載のプロセス間通信プログラム。
【００９２】
(付記５)前記通信負荷情報が所定基準値を超えたか否かを判定する負荷判定手順を含み、
前記送信スレッド方式判定手順は、
前記負荷判定手順にて前記通信負荷情報が前記所定基準値を超えたと判定された場合に、前記送信スレッド方式を使用すると判定することを特徴とする付記３記載のプロセス間通信プログラム。
【００９３】
(付記６)前記負荷情報収集手順は、
前記問合せ手順による前記受信側受信スレッドの受信可能状態の問合せ開始タイミングから当該問合せの結果を受信するタイミングまでの時間を前記通信負荷情報として収集することを特徴とする付記２〜５の何れか一つに記載のプロセス間通信プログラム。
【００９４】
(付記７)前記送信側本体スレッドで得たメッセージを前記受信側本体スレッドに送信する場合に、前記送信側本体スレッドで得たメッセージを前記送信側のプロセスで実行した送信スレッドに前記メッセージを複写する前記送信側本体スレッド側の複写手順と、
前記直接方式判定手順にて前記直接方式を使用しないと判定された場合に、前記受信側本体スレッド側の受信可能状態を検出すると、前記送信スレッドで複写したメッセージを当該受信側本体スレッドに送信する送信スレッド側送信手順と
を含むことを特徴とする付記１記載のプロセス間通信プログラム。
【００９５】
(付記８) 分散接続された各分散メモリ型プロセッサで実行するプロセス毎に、プロセス間の相互通信を実行する本体スレッド及び受信スレッドを実行した状態で、送信側のプロセスで実行する送信側本体スレッドから受信側のプロセスで実行する受信側本体スレッドにメッセージを送信する場合に、前記受信側のプロセスで実行する受信側受信スレッドに対して受信可能状態であるか否かを問い合せる問合せステップと、
前記問合せステップの問合せ結果に基づき、前記送信側本体スレッド及び前記受信側本体スレッド間を直接通信する直接方式を使用するか否かを判定する直接方式判定ステップと、
前記直接方式判定ステップにて前記直接方式を使用すると判定された場合に、前記送信側本体スレッドで得た前記メッセージを前記受信側本体スレッドに直接送信する本体スレッド側送信ステップと
を含むことを特徴とするプロセス間通信方法。
【００９６】
(付記９) 分散接続された各分散メモリ型プロセッサと、各分散メモリ型プロセッサで実行するプロセス毎に備え、プロセス間の相互通信を実行する本体スレッド及び受信スレッドとを有し、
前記本体スレッドは、
送信側のプロセスで実行した送信側本体スレッドから受信側のプロセスで実行した受信側本体スレッドにメッセージを送信する場合に、前記受信側のプロセスで実行した受信側受信スレッドに対して受信可能状態であるか否かを問い合せる問合せ部と、
前記問合せ部の問合せ結果に基づき、前記送信側本体スレッド及び前記受信側本体スレッド間を直接通信する直接方式を使用するか否かを判定する直接方式判定部と、
前記直接方式判定部にて前記直接方式を使用すると判定された場合に、前記送信側本体スレッドで得た前記メッセージを前記受信側本体スレッドに直接送信する本体スレッド側送信部と
を有することを特徴とする分散メモリ型マルチプロセッサ。
【符号の説明】
【００９７】
１  分散メモリ型マルチプロセッサ(マルチプロセッサ)
２  分散メモリ型プロセッサ(プロセッサ)  
４  プロセス
６  ＭＰＩライブラリ
６Ａ  送信側ＭＰＩライブラリ
６Ｂ  受信側ＭＰＩライブラリ
１０  本体スレッド
１０Ａ  送信側本体スレッド
１０Ｂ  受信側本体スレッド
１１  問合せ部
１２  負荷監視部
１３  基準値判定部
１４  直接方式判定部
１５  受信スレッド方式判定部
１６  送信スレッド方式判定部
１７  本体スレッド送信部
２０  送信スレッド
２０Ａ  送信側送信スレッド
２０Ｂ  受信側送信スレッド
３０  受信スレッド
３０Ａ  送信側受信スレッド
３０Ｂ  受信側受信スレッド
１００  分散メモリ型マルチプロセッサ
１０１  分散メモリ型プロセッサ  
１０２  プロセス
１１０  本体スレッド
１１０Ａ  送信側本体スレッド
１１０Ｂ  受信側本体スレッド
１１１  問合せ部
１１２  直接方式判定部
１１３  本体スレッド送信部
１２０  受信スレッド
１２０Ｂ  受信側受信スレッド
【図１】
0005614138.tif 000002
【図２】
0005614138.tif 000003
【図３】
0005614138.tif 000004
【図４】
0005614138.tif 000005
【図５】
0005614138.tif 000006
【図６】
0005614138.tif 000007
【図７】
0005614138.tif 000008
【図８】
0005614138.tif 000009
【図９】
0005614138.tif 000010
【図１０】
0005614138.tif 000011
【図１１】
0005614138.tif 000012
【図１２】
0005614138.tif 000013
【図１３】
0005614138.tif 000014
【図１４】
0005614138.tif 000015
【図１５】
0005614138.tif 000016
【図１６】
0005614138.tif 000017
【図１７】
0005614138.tif 000018
【図１８】
0005614138.tif 000019
【図１９】
0005614138.tif 000020
【図２０】
0005614138.tif 000021