(57)【要約】【課題】演算プロセッサとは別に演算処理部の故障を検出するための専用のハードウェアを設けなくても、演算処理部の故障の検出及び故障からの復帰を行う。【解決手段】演算処理部１１は、自身が実行する処理要素の処理が終了し、次に実行される処理要素に処理を依頼した後、当該次に実行される処理要素からの応答がなかった場合、当該次に実行される処理要素を実行する演算処理部１１が故障したと判定する。管理部１２は、自己と同一の演算ユニット１０に含まれる演算処理部１１によりある処理要素を実行する演算処理部１１が故障したと判定された場合、当該処理要素を代わりに実行する演算処理部１１を決定し、決定した演算処理部１１に当該処理要素を実行させるために全ての演算ユニット１０に代替要求信号を送信する。【選択図】図１
2011113247.tif 000002
【特許請求の範囲】
【請求項１】
通信可能に接続された複数の演算ユニットが所定のプログラムを実行する分散処理システムであって、
前記演算ユニットは、
前記プログラムを構成するプログラム要素のうち各演算ユニットが実行するべきプログラム要素及び各プログラム要素の処理結果の入出力関係を示す管理情報を管理する管理部と、
前記管理情報によって定められたプログラム要素を実行する演算処理部と、
前記管理部及び前記演算処理部から依頼されたデータを他の演算ユニットに送信すると共に、他の演算ユニットから送信されたデータを受信する通信処理部とを含み、
前記演算処理部は、自身が実行する第１のプログラム要素の処理が終了し、次に実行される第２のプログラム要素に処理を依頼した後、当該第２のプログラム要素からの応答がなかった場合、当該第２のプログラム要素を実行する演算処理部が故障したと判定し、
前記管理部は、自己と同一の演算ユニットに含まれる演算処理部により前記第２のプログラム要素を実行する演算処理部が故障したと判定された場合、前記第２のプログラム要素を代わりに実行する演算処理部を決定し、決定した演算処理部に前記第２のプログラム要素を実行させるために全ての演算ユニットに代替要求信号を送信し、
前記代替要求信号を受信した演算ユニットの管理部は、前記代替要求信号に従って前記管理情報を書き換えることを特徴とする分散処理システム。
【請求項２】
前記演算ユニットと通信可能に接続され、全てのプログラム要素を記憶する記憶ユニットを更に備え、
各演算処理部は、起動時に、前記管理情報に基づいて自己が実行するべきプログラム要素を特定し、特定したプログラム要素を前記記憶ユニットから読み出して保持することを特徴とする請求項１記載の分散処理システム。
【請求項３】
各演算ユニットの演算処理部は、それぞれ、全てのプログラム要素を予め保持することを特徴とする請求項１記載の分散処理システム。
【請求項４】
前記管理情報は、予め構築されたものであることを特徴とする請求項３記載の分散処理システム。
【請求項５】
前記管理情報は、前記プログラムに基づいて、起動時に構築されたものであることを特徴とする請求項３記載の分散処理システム。
【請求項６】
通信可能に接続された複数の演算ユニットが所定のプログラムを実行する分散処理システムにおける故障復帰方法あって、
前記演算ユニットは、
前記プログラムを構成するプログラム要素のうち各演算ユニットが実行するべきプログラム要素及び各プログラム要素の処理結果の入出力関係を示す管理情報を管理する管理部と、
前記管理情報によって定められたプログラム要素を実行する演算処理部と、
前記管理部及び前記演算処理部から依頼されたデータを他の演算ユニットに送信すると共に、他の演算ユニットから送信されたデータを受信する通信処理部とを含み、
前記演算処理部が、自身が実行する第１のプログラム要素の処理が終了し、次に実行される第２のプログラム要素に処理を依頼した後、当該第２のプログラム要素からの応答がなかった場合、当該第２のプログラム要素を実行する演算処理部が故障したと判定する判定ステップと、
前記判定ステップにより前記第２のプログラム要素を実行する演算処理部が故障したと判定された場合、当該判定を行った演算処理部と同一の演算ユニットに含まれる管理部が、前記第２のプログラム要素を代わりに実行する演算処理部を決定し、決定した演算処理部に前記第２のプログラム要素を実行させるために全ての演算ユニットに代替要求信号を送信する代替要求ステップと、
前記代替要求信号を受信した演算ユニットの管理部が、前記代替要求信号に従って前記管理情報を書き換える書換ステップとを備えることを特徴とする故障復帰方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信可能に接続された複数の演算ユニットが所定のプログラムを実行する分散処理システム及び故障復帰方法に関するものである。
【背景技術】
【０００２】
近年、情報処理装置においては、信頼性、安定性、安全性への要求が高まっている。かつては、情報処理装置は学術計算等、それ単独で使用されることが多かったが、近年では、自動車、産業用機械、ロボット、家電、インターネット端末、携帯電話等、様々な規模のシステムと組み合わせて使用されることが日常的になってきたからである。情報処理装置が、これらの装置の制御システムの中枢機能の一部として位置づけられるようになり、情報処理装置での障害による機能停止、性能低下が許容されにくくなっている。
【０００３】
例えば、自動車や産業用ロボット等では、情報処理装置を含む制御系に対して暴走等に対する対策が必要となっている。また、自動車や産業用ロボット等では、期待する結果が得られることへの信頼性、連続して正常に動作し続けることへの安定性、万が一、信頼性が低下して期待した結果が得られない場合や、正常に動作しない場合に、人や装置自身、周囲環境への悪影響を及ぼさない安全性が要求される。
【０００４】
これらの要求に対して、一つの信号に対する配線や、情報処理装置を二重化、三重化するというように、システムを冗長化して構築するというような対策がなされていた。このような対策の具体例としては古くから有名なもので、アポロ宇宙船や大型旅客機の制御系が知られている。
【０００５】
しかしながら、情報処理装置が一般的になるにつれて、上記課題に対する対策も高度化している。例えば特許文献１には、３つのプロセッサエレメントＡ〜Ｃと、プロセッサエレメントＡ〜Ｃのそれぞれと通信可能に接続された３つの装置とを含む分散処理システムにおいて、プロセッサエレメントＡ〜ＣのそれぞれにタスクＡ〜Ｃを実行させるものが開示されている。
【０００６】
そして、この分散処理システムでは、プロセッサエレメントＡが装置ＡにタスクＡの出力データを出力し、プロセッサエレメントＢが装置ＢにタスクＢの出力データを出力し、プロセッサエレメントＣが装置ＣにタスクＣの出力データを出力している状態において、例えば、プロセッサエレメントＢに障害が発生した場合、プロセッサエレメントＡが装置ＢにタスクＢの出力データを出力する。これにより、装置Ａ〜Ｃのそれぞれに、タスクＡ〜Ｃのそれぞれを個別に実行する３個のプロセッサエレメントを接続した従来の構成に比べて、プロセッサエレメントの個数を９個から３個に削減することが可能とされている。
【０００７】
また、特許文献２には、複数のサブプロセッサを含む情報処理装置であって、各サブプロセッサに、サブプロセッサの異常を検出する異常検出部を個別に設け、異常検出部が対応するサブプロセッサの異常を検出した場合、対応するサブプロセッサの動作を停止等させる情報処理装置が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００２―３４２３００号公報
【特許文献２】特開２００５−３４６３２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１は、三重多数決方式を前提とするため、正常動作時は全体の３分の１の構成要素が情報処理結果に対する有効動作をすることになり、処理能力の割には大規模なシステムとなってしまう。そのため、プロセッサエレメントの故障を検出するための回路をプロセッサエレメントとは別に設ける必要があり、その分、コストが嵩んでしまう。また、特許文献２は、サブプロセッサ毎に異常検出部が設けられているため、その分、コストが嵩んでしまう。
【００１０】
本発明の目的は、演算プロセッサとは別に演算処理部の故障を検出するための専用のハードウェアを設けなくても、演算処理部の故障の検出及び故障からの復帰を行うことができる低コストな分散処理システム及び故障復帰方法を提供することである。
【課題を解決するための手段】
【００１１】
（１）本発明の一局面による分散処理システムは、通信可能に接続された複数の演算ユニットが所定のプログラムを実行する分散処理システムであって、前記演算ユニットは、前記プログラムを構成するプログラム要素のうち各演算ユニットが実行するべきプログラム要素及び各プログラム要素の処理結果の入出力関係を示す管理情報を管理する管理部と、前記管理情報によって定められたプログラム要素を実行する演算処理部と、前記管理部及び前記演算処理部から依頼されたデータを他の演算ユニットに送信すると共に、他の演算ユニットから送信されたデータを受信する通信処理部とを含み、前記演算処理部は、自身が実行する第１のプログラム要素の処理が終了し、次に実行される第２のプログラム要素に処理を依頼した後、当該第２のプログラム要素からの応答がなかった場合、当該第２のプログラム要素を実行する演算処理部が故障したと判定し、前記管理部は、自己と同一の演算ユニットに含まれる演算処理部により前記第２のプログラム要素を実行する演算処理部が故障したと判定された場合、前記第２のプログラム要素を代わりに実行する演算処理部を決定し、決定した演算処理部に前記第２のプログラム要素を実行させるために全ての演算ユニットに代替要求信号を送信し、前記代替要求信号を受信した演算ユニットの管理部は、前記代替要求信号に従って前記管理情報を書き換えることを特徴とする。
【００１２】
また、本発明の別の一局面による故障復帰方法は、通信可能に接続された複数の演算ユニットが所定のプログラムを実行する分散処理システムにおける故障復帰方法あって、前記演算ユニットは、前記プログラムを構成するプログラム要素のうち各演算ユニットが実行するべきプログラム要素及び各プログラム要素の処理結果の入出力関係を示す管理情報を管理する管理部と、前記管理情報によって定められたプログラム要素を実行する演算処理部と、前記管理部及び前記演算処理部から依頼されたデータを他の演算ユニットに送信すると共に、他の演算ユニットから送信されたデータを受信する通信処理部とを含み、前記演算処理部が、自身が実行する第１のプログラム要素の処理が終了し、次に実行される第２のプログラム要素に処理を依頼した後、当該第２のプログラム要素からの応答がなかった場合、当該第２のプログラム要素を実行する演算処理部が故障したと判定する判定ステップと、前記判定ステップにより前記第２のプログラム要素を実行する演算処理部が故障したと判定された場合、当該判定を行った演算処理部と同一の演算ユニットに含まれる管理部が、前記第２のプログラム要素を代わりに実行する演算処理部を決定し、決定した演算処理部に前記第２のプログラム要素を実行させるために全ての演算ユニットに代替要求信号を送信する代替要求ステップと、前記代替要求信号を受信した演算ユニットの管理部が、前記代替要求信号に従って前記管理情報を書き換える書換ステップとを備える。
【００１３】
これらの構成によれば、演算ユニットは、プログラム要素を実行する演算処理部を備えている。そして、この演算処理部は、自身が実行する第１のプログラム要素の処理が終了して、次に実行される第２のプログラム要素に処理を依頼した後、当該第２のプログラム要素からの応答がない場合、当該第２のプログラム要素を実行する演算処理部は故障したと判定する。
【００１４】
そして、管理部は、同一の演算ユニットに含まれる演算処理部により第２のプログラム要素を実行する演算処理部が故障したと判定されると、代替の演算処理部を決定し、決定した演算処理部に第２のプログラム要素を実行させるために、全ての演算ユニットに代替要求信号を送信する。そして、代替要求信号を受信した演算ユニットの管理部は、受信した代替要求信号に従って、管理情報を書き換える。これにより、第２のプログラム要素が別の演算処理部によって実行されることになる。
【００１５】
つまり、他の演算処理部からの応答を受信できたか否かといった簡易な処理により演算処理部の故障が判定されているため、演算処理部により他の演算処理部の故障を判定させることができる。よって、演算処理部とは別に演算処理部の故障を検出するためのハードウェアを設けなくても、演算処理部の故障を検出することができる。
【００１６】
また、管理部は、各演算ユニットが実行するべきプログラム要素及び各プログラム要素の処理結果の入出力関係を示す管理情報を保持しており、この管理情報に従って、演算処理部に実行するべきプログラム要素を実行させている。そのため、各管理部が保持する管理情報を書き換えるだけで、第２のプログラム要素を別の演算処理部に実行させることが可能となる。その結果、処理が中断された第２のプログラム要素を復帰させるための処理を行う専用のハードウェアを設けなくても、第２のプログラム要素を別の演算処理部に実行させることが可能となる。
【００１７】
（２）前記演算ユニットと通信可能に接続され、全てのプログラム要素を記憶する記憶ユニットを更に備え、各演算処理部は、起動時に、前記管理情報に基づいて自己が実行するべきプログラム要素を特定し、特定したプログラム要素を前記記憶ユニットから読み出して保持することが好ましい。
【００１８】
この構成によれば、全てのプログラム要素を記憶する記憶ユニットから各演算処理部に自身が実行するべきプログラム要素を読み出させることで、各演算処理部に実行するべきプログラム要素が実装されるため、各演算ユニットのメモリ容量を節約することができる。
【００１９】
（３）各演算ユニットの演算処理部は、それぞれ、全てのプログラム要素を予め保持することが好ましい。
【００２０】
この構成によれば、各演算ユニットに全てのプログラム要素が保持されているため、別の演算処理部が第２のプログラム要素を速やかに実装することができる。
【００２１】
（４）前記管理情報は、予め構築されたものであることが好ましい。この構成によれば、管理情報は予め構築されたものであるため、各演算処理部は、この管理情報を基に、自己が実行するべきプログラム要素を速やかに特定することができる。
【００２２】
（５）前記管理情報は、前記プログラムに基づいて、起動時に構築されたものであることが好ましい。
【００２３】
この構成によれば、プログラムの変更に対して柔軟に対応することができる。
【発明の効果】
【００２４】
本発明によれば、演算プロセッサとは別に故障を検出するための専用のハードウェアを設けなくても、演算処理部の故障及び故障からの復帰を行うことができ、システムの低コスト化を図ることができる。
【図面の簡単な説明】
【００２５】
【図１】（Ａ）は本発明の実施の形態による分散処理システムを構成する演算ユニットのブロック図である。（Ｂ）は、本発明の実施の形態による分散処理システムの全体構成図を示している。
【図２】（Ａ）は、演算ユニットが１つのタスクを処理している場合の演算ユニットの処理の流れを示したブロック図であり、図２（Ｂ）は、演算ユニットが複数のタスクを処理している場合の演算ユニットの処理の流れを示したブロック図である。
【図３】（Ａ）は、機能モジュールの構成を示すブロック図である。（Ｂ）は、アプリケーションプログラムの構成を示すブロック図である。
【図４】本発明の実施の形態による分散処理システムを３つの演算ユニットで構成した場合において、演算ユニットと機能モジュールとの関係を示した図である。
【図５】管理情報の一例を示した図である。
【図６】機能モジュールの処理の詳細を示したフローチャートである。
【図７】本発明の実施の形態による分散処理システムが４つの演算ユニットで１つの機能モジュールを実行する場合の各演算ユニットの機能ブロック図を示している。
【図８】本発明の実施の形態による分散処理システムにおいて、ある演算ユニットの演算処理部が故障した場合の動作手順を示すタイミングチャートである。
【図９】本発明の実施の形態による分散処理システムにおいて、ある演算ユニットの演算処理部が故障した場合の動作手順を示すタイミングチャートである。
【図１０】本発明の実施の形態による分散処理システムにおいて、ある演算ユニットの演算処理部が故障した場合の動作手順を示すタイミングチャートである。
【図１１】本発明の実施の形態による分散処理システムにおいて、ある演算ユニットの演算処理部が故障した場合の動作手順を示すタイミングチャートである。
【図１２】本発明の実施の形態による分散処理システムの変形例におけるタイミングチャートを示している。
【図１３】図１２に示す変形例を採用した場合の分散処理システムの機能ブロック図を示している。
【図１４】図１２に示すシーケンス図の処理が終了したときの、分散処理システムの機能ブロック図を示している。
【図１５】各演算ユニットの演算処理部が全ての処理要素を格納している場合の分散処理システムの機能ブロック図を示している。
【図１６】故障発生後に図１０に示す処理が完了した後の分散処理システムの機能ブロック図を示している。
【図１７】ライブラリユニットをある１つの演算ユニットに組み込んだ場合の分散処理システムの機能ブロック図を示している。
【図１８】ライブラリユニットを２つの演算ユニットに分散して組み込んだ場合の分散処理システムの機能ブロック図を示している。
【発明を実施するための形態】
【００２６】
図１（Ａ）は本発明の実施の形態による分散処理システムを構成する演算ユニット１０のブロック図である。図１（Ｂ）は、本発明の実施の形態による分散処理システムの全体構成図を示している。図１（Ｂ）に示すように本分散処理システムは、通信可能に接続された複数（例えば４つ）の演算ユニット１０−１〜１０−４が所定のプログラムを実行するものである。演算ユニット１０−１〜１０−４は、所定の通信媒体ＣＬを介して、種々のデータを相互に送受信可能に接続されている。なお、演算ユニット１０−１〜１０−４について特に区別しない場合は、演算ユニットに対して１０の符号を付す。
【００２７】
ここで、通信媒体ＣＬとしては、例えば、半導体チップ間を接続するためのバスライン、ＬＡＮ等に使用されるイーサネット（登録商標）、並びに車載ＬＡＮに用いられるＣＡＮ及びＦｌｅｘＲａｙを使用することができる。また、通信媒体ＣＬとしては、有線を採用してもよいし、無線を採用してもよい。また、有線を採用する場合の通信方式としては、シリアル方式及びパラレル方式のいずれを採用してもよい。
【００２８】
なお、図１の例では、演算ユニット１０の個数を４つとしたが、本発明はこれに限定されず、２、３、５つ以上であってもよい。
【００２９】
図１（Ａ）に示すように演算ユニット１０は、演算処理部１１、管理部１２、データ保存部１３、及び通信処理部１４を備えている。これら演算処理部１１〜通信処理部１４は、例えば内部バスにより種々のデータが相互に送受信可能に接続されている。
【００３０】
管理部１２は、本分散処理システムが実行するプログラムを構成する処理要素のうち各演算ユニットが実行するべき処理要素及び各処理要素の処理結果の入出力関係を示す管理情報を管理する。
【００３１】
また、管理部１２は、自己と同一の演算ユニット１０に含まれる演算処理部１１によりある処理要素を実行する演算処理部１１が故障したと判定された場合、当該処理要素を代わりに実行する演算処理部１１を決定し、決定した演算処理部１１に当該処理要素を実行させるために全ての演算ユニット１０に代替要求信号を送信する。
【００３２】
そして、代替要求信号を受信した演算ユニット１０の管理部１２は、代替要求信号に従って管理情報を書き換える。
【００３３】
ここで、管理部１２は、管理処理部１２１及び管理情報記憶部１２２を備えている。管理処理部１２１は、例えば専用のハードウェア回路により構成され、管理情報記憶部１２２に記憶されている管理情報の書き換え、及び上述した管理部１２の処理を実行する。管理情報記憶部１２２は、例えば、ＥＥＰＲＯＭ（登録商標）等の書き換え可能なＲＯＭにより構成され、管理情報を記憶する。
【００３４】
演算処理部１１は、実行部１１１及び要素記憶部１１２を備えている。実行部１１１は、例えばＣＰＵにより構成され、要素記憶部１１２に記憶されているプログラム要素のうち自身が実行するべきプラグラム要素を実行する。要素記憶部１１２は、例えばＲＯＭ又は書き換え可能なＲＯＭにより構成され、本分散処理システムが実行するプログラムを構成する全ての処理要素を記憶する。
【００３５】
また、演算処理部１１は、自身が実行する処理要素の処理が終了し、次に実行される処理要素に処理を依頼した後、当該次に実行される処理要素からの応答がなかった場合、当該次に実行される処理要素を実行する演算処理部１１が故障したと判定する。
【００３６】
ここで、演算処理部１１の故障とは、自身が実行するべき処理要素を記憶する要素記憶部１１２のメモリ領域が破損したような場合が該当し、具体的には、メモリ領域においてビットが破損した場合（例えば０／１が反転するような場合）が該当する。
【００３７】
データ保存部１３は、例えば、ＲＡＭ又は書き換え可能なＲＯＭにより構成され、初期化用データ、演算用一時データ、及び演算後保管データを記憶する。ここで、初期化用データは、例えば、演算処理部１１に所定の処理要素を実行させるために行われる演算ユニット１０の初期化処理に使用されるデータである。また、演算用一時データは、例えば、演算処理部１１において、処理要素による処理の実行途中で発生する種々のデータである。また、演算後保管データは、処理要素による処理の終了時に発生するデータであって、保管の必要なデータである。
【００３８】
なお、図１では、要素記憶部１１２、管理情報記憶部１２２、及びデータ保存部１３を別のメモリで構成したが、本発明は、これに限定されず、これらのうちいずれか２つ又は３つを１つのＲＯＭで構成してもよい。
【００３９】
通信処理部１４は、例えば、通信媒体ＣＬに応じた通信プロトコルに準拠した通信回路により構成され、管理部１２及び演算処理部１１から依頼されたデータを他の演算ユニット１０に送信すると共に、他の演算ユニット１０から送信されたデータを受信して、演算処理部１１、又は管理部１２に供給する。
【００４０】
図２（Ａ）は、演算ユニット１０が１つのタスクを処理している場合の演算ユニット１０の処理の流れを示したブロック図であり、図２（Ｂ）は、演算ユニット１０が複数（４つ）のタスクを処理している場合、つまりマルチタスク処理を実行している場合の演算ユニット１０の処理の流れを示したブロック図である。図２（Ａ）、（Ｂ）に示すタスクは、演算処理部１１が実行する演算処理の一つの単位であり、各タスクは、基本的には独立した機能を受け持っている。
【００４１】
ここで、図２（Ｂ）に示す複数のタスクは、それぞれ、通信処理部１４を経由することなく、相互に情報の入出力を行うタスク間通信を行ってもよいし、通信処理部１４を経由して相互に情報の入出力を行ってもよい。
【００４２】
図２（Ａ）、（Ｂ）に示すタスクは、データ保存部１３に記憶されたデータと、通信処理部１４により受信される種々のデータとを用いて動作する。図２（Ｂ）の例では、演算処理部１１は、タスクＡ〜Ｄの４つのタスクを実行している。そして、タスクＡ〜Ｄはそれぞれ、データ保存部１３に記憶されたデータＡ〜Ｄや、通信処理部１４から供給されるデータ等を用いて動作し、処理結果を通信処理部１４に出力している。
【００４３】
図３（Ａ）は、機能モジュールの構成を示すブロック図を示している。ここで、機能モジュールは、上述したタスクを、１又は複数の処理要素から構成される機能モジュールとして再定義したものである。図３（Ａ）においては、機能モジュールＭ１は４つの処理要素Ｅ１〜Ｅ４を備えている。
【００４４】
図３（Ｂ）は、アプリケーションプログラムの構成を示すブロック図である。ここで、アプリケーションプログラムは、図３（Ａ）に示す機能モジュールの１又は複数によって構成される。図３（Ｂ）の例では、アプリケーションプログラムは、３つの機能モジュールＡ〜Ｃを備え、機能モジュールＡは処理要素Ａ１〜Ａ４の４つの処理要素を備え、機能モジュールＢは処理要素Ｂ１〜Ｂ４の４つの処理要素を備え、機能モジュールＣは処理要素Ｃ１〜Ｃ４の４つの処理要素を備えている。
【００４５】
そして、本分散処理システムでは、図３（Ｂ）に示す機能モジュールＡ〜Ｃを適宜組み合わせると共に、各処理要素を適宜組み合わせて実行することで、所望の機能を実現する。
【００４６】
なお、上述した特許文献１では、図２（Ａ）又は（Ｂ）に示す演算ユニット１０を３つ設け、システムを三重化してシステムを冗長化することで、ある１つの演算ユニット１０の故障に対処している。そのため、システムの規模が大規模化するのは明白である。
【００４７】
また、特許文献２では、図２（Ｂ）に示すタスクＡ〜Ｄのそれぞれに異常検出手段を設ける、又は図３（Ａ）の処理要素Ｅ１〜Ｅ４ごとに異常検出手段と各異常検出手段を制御する制御手段とを設けていたため、システムの規模が大規模化することは明白である。
【００４８】
図４は、本分散処理システムを３つの演算ユニット１０−１〜１０−３で構成した場合において、演算ユニット１０−１〜１０−３と機能モジュールＡ〜Ｄとの関係を示した図である。図４の例では、演算ユニット１０−１には処理要素Ａ１〜Ｄ１の４つの処理要素が割り当てられ、演算ユニット１０−２には処理要素Ａ２〜Ｄ２の４つの処理要素が割り当てられ、演算ユニット１０−３には処理要素Ａ３〜Ｄ３の４つの処理要素が割り当てられている。このように本分散処理システムでは、各演算ユニット１０に実行するべき処理要素を割り当てることで処理を実行する。
【００４９】
図５は、管理情報の一例を示した図である。図５に示すように管理情報は、「ユニットＩＤ」、「エレメントＩＤ」、「配置ユニット」、「Ｆｒｏｍ」、及び「Ｔｏ」の欄を備えた表形式のデータ構造を有している。ユニットＩＤの欄には、管理情報を記憶している演算ユニット１０のユニットＩＤが格納されている。
【００５０】
ここで、ユニットＩＤは、各演算ユニット１０を識別するために、各演算ユニット１０に一意的に割り付けられた記号列である。そして、本実施の形態では、図１（Ｂ）に示す演算ユニット１０−１〜１０−４のユニットＩＤとしては、例えば「Ｕ００１」、「Ｕ００２」、「Ｕ００３」、「Ｕ００４」が採用されている。
【００５１】
よって、図１（Ｂ）に示す演算ユニット１０−１が記憶する管理情報のユニットＩＤの欄においては、「Ｕ００１」が格納され、演算ユニット１０−２が記憶する管理情報のユニットＩＤの欄においては、「Ｕ００２」が格納され、演算ユニット１０−３が記憶する管理情報のユニットＩＤの欄においては、「Ｕ００３」が格納され、演算ユニット１０−４が記憶する管理情報のユニットＩＤの欄においては、「Ｕ００４」が格納されている。ている。
【００５２】
「エレメントＩＤ」の欄には、各処理要素を識別するためのエレメントＩＤが格納されている。ここで、エレメントＩＤとしては、各処理要素に対して一意的に割り付けられた記号列が採用されている。
【００５３】
図５の管理情報は、図３（Ｂ）及び図４に示す機能モジュールＡ〜Ｃを図１（Ｂ）に示す分散処理システムに実行させる際に必要となる管理情報である。図６は、機能モジュールＡの処理の詳細を示したフローチャートである。図６に示すように機能モジュールＡは、ステップＳ１〜Ｓ６の６つのステップにより構成されている。そして、ステップＳ１〜Ｓ６では、それぞれ、処理要素Ａ１−１，Ａ２，Ａ１−２，Ａ３，Ａ４，Ａ１−３が実行される。
【００５４】
ここで、処理要素Ａ１−１〜Ａ１−３は処理要素Ａ１のサブの処理要素であり、処理要素Ａ１を構成するものである。よって、機能モジュールＡは、処理要素Ａ１−１〜Ａ１−３、Ａ２〜Ａ４により構成されている。また、機能モジュールＢは、処理要素Ｂ１〜Ｂ４により構成され、機能モジュールＣは、処理要素Ｃ１〜Ｃ４により構成されている。
【００５５】
よって、図５に示す「エレメントＩＤ」の欄には、処理要素Ａ１−１〜Ａ１−３，Ａ２〜Ａ４、処理要素Ｂ１〜Ｂ４、処理要素Ｃ１〜Ｃ４のそれぞれを識別するための記号列である、Ａ１−１〜Ａ１−３，Ａ２〜Ａ４、Ｂ１〜Ｂ４、Ｃ１〜Ｃ４が格納されている。そして、これら処理要素Ａ１−１〜Ａ１−３，Ａ２〜Ａ４、処理要素Ｂ１〜Ｂ４、処理要素Ｃ１〜Ｃ４がプログラム要素の一例に相当する。なお、処理要素としては、例えば、ある１つの関数の処理を規定するためのプログラム等が該当する。
【００５６】
「配置ユニット」の欄には、各処理要素を実行する演算ユニットのエレメントＩＤが格納されている。図５の例では、処理要素Ａ１−１、Ａ１−２、Ａ１−３は演算ユニット１０−１で実行され、処理要素Ａ２，Ｂ２，Ｃ２は演算ユニット１０−２で実行され、処理要素Ａ３，Ｂ３，Ｃ３は演算ユニット１０−３で実行され、演算要素Ａ４，Ｂ４，Ｃ４は演算ユニット１０−４で実行される。
【００５７】
「Ｆｒｏｍ」の欄には、処理結果の出力元の処理要素のエレメントＩＤが格納されている。また、「Ｔｏ」の欄には、処理結果の出力先の処理要素のエレメントＩＤが格納されている。
【００５８】
図６に示すフローチャートでは、まず、処理要素Ａ１−１が実行され（ステップＳ１）、次に処理要素Ａ２が実行され（ステップＳ２）、次に処理要素Ａ１−２が実行され（ステップＳ３）、次に処理要素Ａ１−２の処理結果に応じて処理要素Ａ３又は処理要素Ａ４が実行され（ステップＳ４、Ｓ５）、次に処理要素Ａ１−３で終了判定が行われ（ステップＳ６）、この判定結果に基づいて、処理がステップＳ２に戻される、或いは処理が終了されている。
【００５９】
よって、図５においては、Ａ１−１の行では、「Ｆｒｏｍ」の欄に「−」が格納され、「Ｔｏ」の欄にＡ２が格納されている。ここで、「−」は出力元がないことを示しており、Ａ１−１が最初のステップであることが分かる。また、Ａ１−２の行では、「Ｆｒｏｍ」の欄に「Ａ２」が格納され、「Ｔｏ」の欄に「Ａ３ｏｒＡ４」が格納され、処理要素Ａ３及びＡ４のいずれか一方が出力先であることが分かる。また、Ａ１−３の行では、「Ｆｒｏｍ」の欄に「Ａ３ｏｒＡ４」が格納され、Ａ３及びＡ４のいずれか一方が出力元であることが示されており、「Ｔｏ」の欄には「Ａ２  ｏｒ  ｅｎｄ」が格納されている。そのため、Ａ１−３は、判定結果に基づいて処理がＡ２に戻される、又は処理が終了されていることが分かる。また、Ａ２の行では、「Ｆｒｏｍ」の欄に「Ａ１−１」が格納され、「Ｔｏ」の欄に「Ａ１−２」が格納されている。また、Ａ３の行では、「Ｆｒｏｍ」の欄に「Ａ１−２」が格納され、「Ｔｏ」の欄に「Ａ１−３」が格納されている。また、Ａ４の行では、「Ｆｒｏｍ」の欄に「Ａ１−２」が格納され、「Ｔｏ」の欄に「Ａ１−３」が格納されている。
【００６０】
よって、図６に示すフローチャートの処理の流れが、図５に示す管理情報に反映されていることが分かる。なお、Ｂ１〜Ｃ４の各行でも、機能モジュールＡと同様にして、機能モジュールＢ、Ｃのフローチャート（図略）の処理の流れが反映された各処理要素の処理結果の入出力関係を示す情報が格納されている。
【００６１】
ここで、図５に示す管理情報は、本分散処理システムを設計した時に作成され、予め記憶されたものである。つまり、どの処理要素をどの演算ユニットに割り振るかは分散処理システムの設計時に作成される。
【００６２】
また、図６に示すフローチャートは、例えば、車載システム等の組み込みシステムに用いられる処理を想定している。組み込みシステムでは、システムの起動の後、周期的な演算処理により、センサ入力やアクチュエータの駆動等の制御が行われる。したがって、図６において、処理がステップＳ６からステップＳ２に処理が戻るループは、この周期的な演算処理を表している。また、図６において、ステップＳ１ではなくステップＳ２に処理が戻されているのは、ステップＳ１が初期化処理に相当しているからである。
【００６３】
図７は、本分散処理システムが４つの演算ユニット１０−１〜１０−４で１つの機能モジュールＡを実行する場合の演算ユニット１０−１〜１０−４の機能ブロック図を示している。図７の例では、機能モジュールＡは、処理要素Ａ１〜Ａ４の４つの処理要素により構成され、処理要素Ａ１〜Ａ４はそれぞれ演算ユニット１０−１〜１０−４で実行される。
【００６４】
図８〜図１１は、本発明の実施の形態による分散処理システムにおいて、演算ユニット１０−３の演算処理部１１が故障した場合の動作手順を示すタイミングチャートである。以下、図８〜図１１のタイミングチャートを用いて、図７に示す分散処理システムにおいて、処理要素Ａ３を実行する演算処理部１１が故障したときの、分散処理システムの動作について説明する。なお、図８〜図１１に示すタイミングチャートは、図６に示すフローチャートを演算ユニット１０−１〜１０−４ごとに分けて示したものであり、図６に示すフローチャートと等価である。従って、図８〜図１１に示すＳ１〜Ｓ６の符号は、図６に示すＳ１〜Ｓ６の符号に対応している。
【００６５】
まず、図８に示すように、演算ユニット１０−１が処理要素Ａ１−１を実行する（ステップＳ１）。
【００６６】
処理要素Ａ１−１の処理が終了すると、演算ユニット１０−１は、処理依頼であるＲｅｑｕｅｓｔ（Ａ２）を演算ユニット１０−２に送信する。ここで、Ｒｅｑｕｅｓｔ（Ａ２）には、必要に応じて、処理要素Ａ１−１の処理結果が含まれている。
【００６７】
演算ユニット１０−２は、Ｒｅｑｕｅｓｔ（Ａ２）を受信すると、処理要素Ａ２を実行し（ステップＳ２）、処理が終了すると、Ｒｅｑｕｅｓｔ（Ａ２）に対する応答であるＡＣＫを演算ユニット１０−１に送信する。このＡＣＫには、必要に応じて処理要素Ａ２の演算結果が含まれる。
【００６８】
ＡＣＫを受信すると、演算ユニット１０−１は、処理要素Ａ１−２を実行する（ステップＳ３）。そして、演算ユニット１０−１は、処理要素Ａ１−２の処理結果が次に処理要素Ａ３を実行する必要がある処理結果である場合は、演算ユニット１０−３に処理依頼であるＲｅｑｕｅｓｔ（Ａ３）を送信する。
【００６９】
一方、演算ユニット１０−１は、ステップＳ３の処理結果が次に演算ユニット１０−４に処理要素Ａ４を実行する必要がある処理結果である場合は、演算ユニット１０−４に処理依頼であるＲｅｑｕｅｓｔ（Ａ４）を送信する。
【００７０】
演算ユニット１０−３は、Ｒｅｑｕｅｓｔ（Ａ３）を受信すると、処理要素Ａ３を実行し（ステップＳ４）、処理要素Ａ３の処理が終了すると、Ｒｅｑｕｅｓｔ（Ａ３）の応答であるＡＣＫを演算ユニット１０−１に送信する。また、演算ユニット１０−４は、Ｒｅｑｕｅｓｔ（Ａ４）を受信すると、処理要素Ａ４を実行し（ステップＳ５）、処理要素Ａ４の処理が終了すると、Ｒｅｑｕｅｓｔ（Ａ４）の応答であるＡＣＫを演算ユニット１０−１に送信する。なお、これら、Ｒｅｑｕｅｓｔ（Ａ３）、Ｒｅｑｕｅｓｔ（Ａ４）、及びＡＣＫには必要に応じて処理要素の処理結果も含まれている。そして、演算ユニット１０−１は、処理要素Ａ１−３を実行し、処理を終了する。図８においては、演算ユニット１０−１は、Ｒｅｑｕｅｓｔを要求した全ての演算ユニット１０からＡＣＫを受信しているため、全ての演算ユニット１０が故障していないと判定することができる。
【００７１】
ここで、図９に示すように、演算ユニット１０の演算処理部１１が故障した場合を考える。すると、演算ユニット１０−１は、Ｒｅｑｕｅｓｔ（Ａ３）の送信後、演算ユニット１０−３からのＡＣＫを受信することができないため、演算ユニット１０−３の演算処理部１１が故障したと判定することができる。
【００７２】
具体的には、演算ユニット１０−１の演算処理部１１は、Ｒｅｑｕｅｓｔ（Ａ３）を送信してから、所定時間が経過するまでにＡＣＫを受信することができた場合、処理要素Ａ３の処理が正常に終了したと判定し、所定時間が経過するまでにＡＣＫを受信することができなかった場合、処理要素Ａ３の処理が正常に終了していないと判定する。
【００７３】
処理要素Ａ３の処理が正常に終了していないと判定した演算処理部１１は、図１０に示すように、演算ユニット１０−１の管理部１２に、処理要素Ａ３からの応答がないことを示すＦａｌｓｅ（Ａ３）又は処理要素Ａ３からの応答を所定時間内に受信することができず時間切れが発生したことを示すＴＩＭＥＯＵＴ（Ａ３）を管理部１２に通知する。Ｆａｌｓｅ（Ａ３）又はＴＩＭＥＯＵＴ（Ａ３）を受信した管理部１２は、管理情報を参照し、正常に処理が行われなかった処理要素Ａ３を実行するべきであった演算ユニット１０−３を特定する。
【００７４】
そして、管理部１２は、演算ユニット１０−３に対して処理要素Ａ３の実行を停止させるためのＤｅａｃｔｉｖａｔｅ（Ａ３）を演算ユニット１０−３の管理部１２に送信する。
【００７５】
Ｄｅａｃｔｉｖａｔｅ（Ａ３）を受信した演算ユニット１０−３の管理部１２は、管理情報における処理要素Ａ３の自身への割り当てを消去する。具体的には、管理部１２は、図５に示すＡ３の行において、「ユニット」の欄に格納されている「Ｕ００３」を演算ユニット１０が割り当てられていないことを示す「ＮＯＮＥ」に書き換える。これにより、処理要素Ａ３の演算ユニット１０−３への割り当てが解除される。
【００７６】
次に、演算ユニット１０−３の管理部１２は、Ｄｅａｃｔｉｖａｔｅ（Ａ３）の送信元である演算ユニット１０−１に対して、処理要素Ａ３の実行を停止させたことを示すＡＣＫを送信する。
【００７７】
次に、演算ユニット１０−１の管理部１２は、処理要素Ａ３を実行する演算ユニット１０を決定する。ここで、管理部１２は、演算ユニット１０−３以外の演算ユニット１０（演算ユニット１０−１を含む）の中から処理要素Ａ３を実行する演算ユニット１０を例えばランダムに決定すればよい。
【００７８】
ここでは、演算ユニット１０−２に処理要素Ａ３を割り当てるものとする。よって、演算ユニット１０−１の管理部１２は、演算ユニット１０−２に処理要素Ａ３を割り当てることを示すＡｃｔｉｖａｔｅ（Ａ３）を送信する。
【００７９】
Ａｃｔｉｖａｔｅ（Ａ３）を受信した演算ユニット１０−２の管理部１２は、管理情報を修正する。この場合、演算ユニット１０−２の管理部１２は、図５に示す管理情報のＡ３の行において、「ユニット」の欄の「Ｕ００３」を「Ｕ００２」に書き換える。
【００８０】
次に、演算ユニット１０−２の管理部１２は、管理情報の書き換えが終了すると、ＡＣＫを演算ユニット１０−１に送信する。
【００８１】
次に、演算ユニット１０−１の管理部１２は、処理要素Ａ３を演算ユニット１０−２に割り当てたことを示すＣＨＡＮＧＥ（Ａ３，Ｕ００２）を演算ユニット１０−３に送信する。また、演算ユニット１０−１の管理部１２は、図１０では図示を省略しているが、演算ユニット１０−４に対してもＣＨＡＮＧＥ（Ａ３，Ｕ００２）を送信する。更に、演算ユニット１０−１の管理部１２は、自身の管理情報のＡ３の行において、「配置ユニット」の欄に格納された「Ｕ００３」を「Ｕ００２」に書き換える。
【００８２】
また、ＣＨＡＮＧＥ（Ａ３，Ｕ００２）を受信した演算ユニット１０−３の管理部１２は、自身の管理情報のＡ３の行において「配置ユニット」の欄に格納された「ＮＯＮＥ」を「Ｕ００２」に書き換える。また、ＣＨＡＮＧＥ（Ａ３，Ｕ００２）を受信した演算ユニット１０−４の管理部１２は、自身の管理情報のＡ４の行において「配置ユニット」の欄に格納された「Ｕ００３」を「Ｕ００２」に書き換える。なお、図１０に示すＡｃｔｉｖａｔｅ（Ａ３）及びＣＨＡＮＧＥ（Ａ３，Ｕ００２）が代替依頼情報の一例に相当する。
【００８３】
そして、管理情報の書き換えが終了した演算ユニット１０−３及び１０−４の管理部１２は、それぞれ、管理情報の書き換えが終了したことを示すＡＣＫを演算ユニット１０−１に送信する。なお、図１０では、説明の便宜上、演算ユニット１０−４を省略している。
【００８４】
これにより、処理要素Ａ３が回復したため、演算ユニット１０−１の管理部１２は、演算処理部１１に処理要素Ａ３が回復したことを示すＲｅａｄｙ（Ａ３）を演算処理部１１に通知する。
【００８５】
図１１は、処理要素Ａ３の回復後のシーケンス図を示している。Ｒｅａｄｙ（Ａ３）を受信した演算ユニット１０−１の演算処理部１１は、ステップＳ１を実行し、以降、ステップＳ２〜Ｓ６の処理が演算ユニット１０−２，１０−４の演算処理部１１により実行され、機能モジュールＡの処理結果が得られる。
【００８６】
なお、上記の処理をまとめると、ある処理要素ｐ１を実行する演算処理部Ｐ１が故障すると処理要素ｐ１に処理を依頼した処理要素ｐ２を実行する演算ユニットＴ２の管理部Ｕ２が、他の演算ユニットに対して処理要素ｐ１を実行する演算処理部Ｐ１が故障したことを通知する。続いて、管理部Ｕ２が演算処理部Ｐ１を含む演算ユニットＴ１以外の演算ユニットの演算処理部に処理要素ｐ１の代替を要求する。この要求に基づき、演算ユニットＴ３の演算処理部Ｐ３が処理要素ｐ１を代替した場合、演算ユニットＴ２は、演算ユニットＴ１、Ｔ３を含む全ての演算ユニットに処理要素ｐ１が演算ユニットＴ３に代替されたことを通知する。
【００８７】
なお、図９〜図１１のシーケンス図においては、全ての演算ユニット１０の演算処理部１１が全ての処理要素を有していることを前提に説明したが、これに限定されず、下記の変形例を採用してもよい。
【００８８】
図１２は、本分散処理システムの変形例におけるタイミングチャートを示している。なお、この変形例では、全ての処理要素を記憶するライブラリユニット２０が通信媒体ＣＬを介して接続されている。また、各演算ユニット１０の演算処理部１１は、自身が実行するべき処理要素のみを予め記憶している。
【００８９】
そして、処理要素がある演算処理部１１により代替される場合、当該演算処理部１１は、ライブラリユニット２０から対象となる処理要素を読み出す。
【００９０】
以下、図１２を用いてこの変形例を説明する。図１２において、演算ユニット１０−１の管理部１２が演算ユニット１０−２にＡｃｔｉｖａｔｅ（Ａ３）を出力するまでの処理は、図１０と同一である。
【００９１】
図１２において、Ａｃｔｉｖａｔｅ（Ａ３）を受信した演算ユニット１０−２の管理部１２は、処理要素Ａ３を読み出すためにＬｏａｄ（Ａ３）をライブラリユニット２０に送信する。Ｌｏａｄ（Ａ３）を受信したライブラリユニット２０は、Ｌｏａｄ（Ａ３）の送信元である演算ユニット１０−２に処理要素Ａ３を送信する（Ｄｏｗｎｌｏａｄ（Ａ３））。
【００９２】
処理要素Ａ３を受信した演算ユニット１０−２の管理部１２は、受信した処理要素Ａ３を演算処理部１１の要素記憶部１１２に記憶させる。
【００９３】
図１３は、図１２に示す変形例を採用した場合の分散処理システムの機能ブロック図を示している。ライブラリユニット２０は、例えばＣＰＵ又は専用のハードウェア回路から構成される管理部２１と、例えば書き換え可能なＲＯＭにより構成される記憶部２２とを備えている。記憶部２２は、機能モジュールＡを構成する処理要素Ａ１〜Ａ４、機能モジュールＢを構成する処理要素Ｂ１〜Ｂ４、機能モジュールＣを構成する処理要素Ｃ１〜Ｃ４、及び機能モジュールＤを構成する処理要素Ｄ１〜Ｄ４を記憶しており、全ての処理要素を記憶している。
【００９４】
管理部２１は、演算ユニット１０から処理要素の読み出し依頼があると、読み出し対象となる処理要素を依頼元の演算ユニット１０に送信する。
【００９５】
図１３に示す変形例においては、初期状態において、各演算ユニット１０の演算処理部１１は処理要素を格納しておらず、分散処理システムが起動された時に、各演算ユニット１０の管理部１２が、管理情報を参照して自身が属する演算ユニット１０に割り当てられた処理要素を特定し、特定した処理要素をライブラリユニット２０から読み出して、演算処理部１１の要素記憶部１１２に記憶させるようにすればよい。
【００９６】
図１４は、図１２に示すシーケンス図の処理が終了したときの、本分散処理システムの機能ブロック図を示している。図１４に示すように、故障発生前に、演算ユニット１０−３に読み込まれていた処理要素Ａ３が、故障発生後、図１２に示す処理によって、演算ユニット１０−２に読み込まれていることが分かる。
【００９７】
図１５は、各演算ユニット１０の演算処理部１１が全ての処理要素を格納している場合の分散処理システムの機能ブロック図を示している。図１５の場合、各演算ユニット１０は、自身が記憶する処理要素のうち点線で囲まれた処理要素を実行している。
【００９８】
図１６は、故障発生後に図１０に示す処理が完了した後の分散処理システムの機能ブロック図を示している。図１６に示すように、故障発生前では、処理要素Ａ３は、演算ユニット１０−３の演算処理部１１により実行されていたが、故障発生後は、演算ユニット１０−２の演算処理部１１により実行される。
【００９９】
そのため、図１６では、演算ユニット１０−２は、処理要素Ａ２，Ｂ２，Ｃ２に加えて、処理要素Ａ３を実行することになる。また、演算ユニット１０−３は、処理要素Ｂ３，Ｃ３を実行する。
【０１００】
なお、図１３では、ライブラリユニット２０を演算ユニット１０とは個別に設けたが、これに限定されず、ライブラリユニット２０をいずれか１つの演算ユニット１０に組み込んでもよい。
【０１０１】
図１７は、ライブラリユニット２０を演算ユニット１０−１に組み込んだ場合の分散処理システムの機能ブロック図を示している。図１７に示すように、演算ユニット１０−１は、自身が実行する処理要素Ａ１〜Ｄ１に加えて、残り全ての処理要素を記憶しており、自身が実行する処理要素Ａ１〜Ｄ１以外は実行されずに停止されていることが分かる。
【０１０２】
また、図１７では、ライブラリユニット２０をいずれか１つの演算ユニット１０に組み込んだが、これに限定されず、複数の演算ユニット１０に分散させて組み込んでもよい。
【０１０３】
図１８は、ライブラリユニット２０を演算ユニット１０−１と演算ユニット１０−４とで分散して組み込んだ場合の分散処理システムの機能ブロック図を示している。図１８に示すように、演算ユニット１０−１の演算処理部１１には、自身に割り当てられた処理要素Ａ１〜Ｄ１に加えて、処理要素Ａ２〜Ｄ２が格納されている。また、演算ユニット１０−４の演算処理部１１には、自身に割り当てられた処理要素Ａ４〜Ｄ４に加えて、処理要素Ａ３〜Ｄ３が格納されている。
【０１０４】
この場合、演算ユニット１０−１の管理部１２は、演算ユニット１０−２から処理要素Ａ１〜Ｄ１のいずれかの読み出し要求があると、読み出し対象なる処理要素を演算ユニット１０−２に送信する。また、演算ユニット１０−４の管理部１２は、演算ユニット１０−３から処理要素Ａ３〜Ｄ３のいずれかの読み出し要求があると、読み出し対象となる処理要素を演算ユニット１０−３に送信する。また、演算ユニット１０−１において、処理要素Ａ２〜Ｄ２は演算処理部１１に実行されず、動作が停止されている。また、演算ユニット１０−４において、処理要素Ａ４〜Ｄ４は演算処理部１１に実行されず、動作が停止されている。
【０１０５】
以上説明したように、本分散処理システムによれば、演算ユニット１０は、処理要素を実行する演算処理部１１を備えている。そして、この演算処理部１１は、自身が実行する処理要素の処理が終了して、次に実行される処理要素に処理を依頼した後、当該次に実行される処理要素からの応答がない場合、当該次に実行される処理要素を実行する演算処理部１１が故障したと判定する。
【０１０６】
そして、管理部１２は、同一の演算ユニット１０に含まれる演算処理部１１により、次に実行される処理要素を実行する演算処理部１１が故障したと判定されると、代替の演算ユニット１０の演算処理部１１を決定し、決定した演算処理部１１に次に実行される処理要素を実行させるために、全ての演算ユニット１０に代替要求信号を送信する。そして、代替要求信号を受信した演算ユニット１０の管理部１２は、受信した代替要求信号に従って、管理情報を書き換える。これにより、次に実行されるべき処理要素が別の演算処理部１１により実行されることになる。
【０１０７】
つまり、他の演算処理部１１からの応答を受信できたか否かといった簡易な処理により演算処理部１１の故障の有無が判定されているため、演算処理部１１により他の演算処理部１１の故障の有無を判定させることができる。よって、演算処理部１１とは別に故障を検出するためのハードウェアを設けなくても、演算処理部１１の故障を検出することができる。
【０１０８】
なお、上記説明では、システムの起動時において、管理情報は予め作成されていることを前提に説明したが、本発明はこれに限定されず、システムの起動時において、各演算ユニット１０の管理部１０が、本分散処理システムにより実行されるプログラムにしたがって、管理情報を動的に構築してもよい。
【０１０９】
以下、管理情報を動的に構築する方法について、具体的に説明する。分散処理システムが起動されると、各演算ユニット１０は、自身のユニットＩＤをブロードキャストで全演算ユニット１０に送信する。ここで、ブロードキャストで送信するのは、送信相手が決まっていないからである。これにより、各演算ユニット１０は、分散処理システムに含まれる演算ユニット１０の全個数を把握することができる。
【０１１０】
そして、全演算ユニット１０が他の全演算ユニット１０からのユニットＩＤを受信することができたと想定される一定時間が経過した後、各演算ユニット１０は、ユニットＩＤの昇順、又は降順によって、処理要素の選択処理を行う。
【０１１１】
ここで、各演算ユニット１０は、処理要素の総個数を予め把握しているものとする。そして、演算ユニット１０の個数をＮ個、処理要素の数をＭ個とすると、Ｍは以下の式で表される。
【０１１２】
Ｍ＝Ｅｎ×Ｎ＋Ｅｍ  （Ｅｍ＜Ｎ）
Ｅｎは、処理要素の数であるＭを、演算ユニット１０の個数であるＮで割ったときの商を表し、Ｅｍは余りを表している。
【０１１３】
そして、第１番目〜第Ｎ番目の演算ユニット１０をそれぞれ、演算ユニット１０−１〜１０−Ｎと表すと、演算ユニット１０−１〜１０−Ｎは少なくともＥｎ個の処理要素を選択する。
【０１１４】
具体的には、演算ユニット１０−１〜１０−Ｅｍは、それぞれＥｎ＋１個の処理要素を選択し、演算ユニット１０−（Ｅｍ＋１）〜１０−Ｎは、それぞれ、Ｅｎ個の処理要素を選択すればよい。この場合、演算ユニット１０−１〜１０−Ｅｍは、それぞれ、Ｅｎ＋１個の処理要素をランダムに選択し、演算ユニット１０−（Ｅｍ＋１）〜１０−Ｎは、それぞれ、Ｅｎ個の処理要素をランダムに選択すればよい。
【０１１５】
ここで、ユニットＩＤの昇順に従う場合は、まず、演算ユニット１０−１がＭ個の処理要素の中からＥｎ＋１個の処理要素をランダムに選択し、次に、演算ユニット１０−２がＭ−（Ｅｎ＋１）個の処理要素の中からＥｎ＋１個の処理要素をランダムに選択していく。そして、演算ユニット１０−（Ｅｍ＋１）からは、各演算ユニット１０は、残りの処理要素の中からＥｎ個の処理要素をランダムに選択していけばよい。
【０１１６】
また、ユニットＩＤの降順に従う場合は、まず、演算ユニット１０−ＮがＭ個の処理要素の中からＥｎ個の処理要素をランダムに選択し、次に、演算ユニット１０−（Ｎ−１）がＭ−Ｅｎ個の処理要素の中からＥｎ個の処理要素をランダムに選択していく。そして、演算ユニット１０−Ｅｍからは、各演算ユニット１０は、残りの処理要素の中からＥｎ＋１個の処理要素をランダムに選択していけばよい。
【０１１７】
或いは、演算ユニット１０−１〜１０−（Ｎ−Ｅｍ）は、それぞれ、Ｅｎ個の処理要素をランダムに選択し、演算ユニット１０−（Ｎ−Ｅｍ＋１）〜１０−Ｎは、それぞれ、Ｅｎ＋１個の処理要素をランダムに選択してもよい。
【０１１８】
ここで、ユニットＩＤの昇順に従う場合は、まず、演算ユニット１０−１がＭ個の処理要素の中からＥｎ個の処理要素をランダムに選択し、次に、演算ユニット１０−２がＭ−Ｅｎ個の処理要素の中からＥｎ個の処理要素をランダムに選択していく。そして、演算ユニット１０−（Ｎ−Ｅｍ＋１）からは、各演算ユニット１０は、残りの処理要素の中からＥｎ＋１個の処理要素をランダムに選択していけばよい。
【０１１９】
また、ユニットＩＤの降順に従う場合は、まず、演算ユニット１０−ＮがＭ個の処理要素の中からＥｎ＋１個の処理要素をランダムに選択し、次に、演算ユニット１０−（Ｎ−１）がＭ−（Ｅｎ＋１）個の処理要素の中からＥｎ＋１個の処理要素をランダムに選択していく。そして、演算ユニット１０−（Ｎ−Ｅｍ）からは、各演算ユニット１０は、残りの処理要素の中からＥｎ個の処理要素をランダムに選択していけばよい。
【０１２０】
例えば、図１５に示すシステム構成を例に挙げて説明すると、処理要素の個数であるＭは、Ｍ＝１２であり、演算ユニット１０の個数であるＮは、Ｎ＝４であるため、Ｅｎ＝３、Ｅｍ＝０となる。
【０１２１】
したがって、演算ユニット１０−１〜１０−４は、それぞれ、３個の処理要素を選択することになる。なお、図１５の場合、エレメントＩＤの最下位の数値は１〜４であり、演算ユニット１０のユニットＩＤの最下位の数値に対応付けることが可能であるため、処理要素Ａ１、Ｂ１、Ｃ１は演算ユニット１０−１（ユニットＩＤ：Ｕ００１）、処理要素Ａ２、Ｂ２、Ｃ２は演算ユニット１０−２（ユニットＩＤ：Ｕ００２）というように、各演算ユニット１０は、処理要素のエレメントＩＤの最下位の数値がユニットＩＤの最下位の数値に一致する処理要素を選択している。
【０１２２】
また、図１５の例において、演算ユニット１０の個数を演算ユニット１０−１〜１０−３の３個とすると、エレメントＩＤの最上位の記号がＡ〜Ｃであり、演算ユニット１０−１〜１０−３の最下位の数値である１〜３に対応付ける、つまり、系列ごとに処理要素を演算ユニット１０−１〜１０−３に対応付けることが可能であるため、演算ユニット１０−１は処理要素Ａ１〜Ａ４を選択し、演算ユニット１０−２は処理要素であるＢ１〜Ｂ４を選択するというように、各演算ユニット１０は、系列ごとに処理要素を選択してもよい。
【０１２３】
但し、系列ごとに処理要素を選択すると、同系列の処理要素を分散させて信頼性を向上させるという趣旨に反するため、上述したようにランダムに処理要素を選択する行うことが好ましい。
【０１２４】
なお、上記の説明では、各演算ユニット１０は、ユニットＩＤの昇順又は降順で、処理要素を選択したが、ユニットＩＤの大小等によりホスト役の演算ユニット１０を決定し、そのホスト役の演算ユニット１０が各演算ユニット１０の処理要素を決定し、決定した処理要素から管理情報を生成し、生成した管理情報を他の演算ユニット１０に送信するようにしてもよい。
【０１２５】
或いは、そのホスト役の演算ユニット１０が、各演算ユニットに処理要素の選択処理を指示することで、各演算ユニットに処理要素を選択させるようにしてもよい。
【０１２６】
また、上記の説明では、各演算ユニット１０の能力（演算能力及びデータ保存容量等）、並びに処理要素の規模（演算負荷及びデータ保存量等）は、均質なものであることを暗黙の条件としたが、各演算ユニット、処理要素の需給リソースを加味して、各演算ユニット１０に処理要素の分配しても良い。
【符号の説明】
【０１２７】
１０  演算ユニット
１１  演算処理部
１２  管理部
１３  データ保存部
１４  通信処理部
２０  ライブラリユニット
２１  管理部
２２  記憶部
１１１  実行部
１１２  要素記憶部
１２１  管理処理部
１２２  管理情報記憶部
【図１】
2011113247.tif 000003
【図２】
2011113247.tif 000004
【図３】
2011113247.tif 000005
【図４】
2011113247.tif 000006
【図５】
2011113247.tif 000007
【図６】
2011113247.tif 000008
【図７】
2011113247.tif 000009
【図８】
2011113247.tif 000010
【図９】
2011113247.tif 000011
【図１０】
2011113247.tif 000012
【図１１】
2011113247.tif 000013
【図１２】
2011113247.tif 000014
【図１３】
2011113247.tif 000015
【図１４】
2011113247.tif 000016
【図１５】
2011113247.tif 000017
【図１６】
2011113247.tif 000018
【図１７】
2011113247.tif 000019
【図１８】
2011113247.tif 000020