(57)【要約】  環境に応じて得られるエネルギーを用いて発電される電力を用いて動作する複数の通信装置を用いて分散処理を効率的に行うこと。時刻（ｔ１）にて、スレーブ（＃ａ＿Ｎ）は、第１の処理の結果を、マスタ（＃１）に送信し、電力残量が無くなったために、動作を停止する。時刻（ｔ１）から時刻（ｔ２）までのいずれかのときに、マスタ（＃１）は、第１の処理の結果に基づいて、所定の処理を実行する。そして、マスタ（＃１）は、第１の処理の結果を受信してから所定時間が経過したか否かを判定する。時刻（ｔ２）にて、所定時間が経過したと判定した場合、マスタ（＃１）は、所定の処理の結果をスレーブ（＃ａ＿Ｎ）に送信する。
2015008367.tif 000002
【特許請求の範囲】
【請求項１】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理方法において、
前記複数の通信装置のうちの特定の通信装置が、
前記複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、前記特定の通信装置に直接通信可能な通信装置から、前記通信装置によって実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、所定の処理を実行し、
前記第１の処理の結果を受信してから所定時間が経過したか否かを判定し、
前記所定時間が経過したと判定した場合、前記所定の処理の結果を前記通信装置に送信する、
処理を実行することを特徴とする分散処理方法。
【請求項２】
前記特定の通信装置が、
前記所定時間が経過したと判定する前に、前記複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、前記特定の通信装置に直接通信可能な前記通信装置とは異なる他の通信装置から、前記他の通信装置によって実行された第２の処理の結果を受信した場合、前記第１の処理の結果と前記第２の処理の結果とに基づいて、前記所定の処理を実行する、処理を実行し、
前記判定する処理は、
前記他の通信装置から前記第２の処理の結果を受信してから前記所定時間が経過したか否かを判定し、
前記送信する処理は、
前記所定時間が経過したと判定した場合、前記所定の処理の結果を前記通信装置と前記他の通信装置とに送信することを特徴とする請求項１に記載の分散処理方法。
【請求項３】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理方法において、
自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部の電力を用いて動作する前記複数の通信装置のうちの特定の通信装置を基点として前記複数の通信装置により形成される環状の通信経路における前記特定の通信装置とは異なる他の通信装置が、
前記環状の通信経路における前記他の通信装置と直接通信可能な第１の通信装置から、前記第１の通信装置により実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、第２の処理を実行し、
前記第１の処理の結果を受信してから所定時間が経過したか否かを判定し、
前記所定時間が経過したと判定した場合、前記第２の処理の結果を前記環状の通信経路における前記他の通信装置と直接通信可能な第２の通信装置に送信する、
処理を実行することを特徴とする分散処理方法。
【請求項４】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムにおいて、
前記複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、前記複数の通信装置のうちの特定の通信装置に直接通信可能な通信装置から、前記通信装置によって実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、所定の処理を実行する実行部と、
前記第１の処理の結果を受信してから所定時間が経過したか否かを判定する判定部と、
前記判定部によって前記所定時間が経過したと判定された場合、前記実行部によって実行された前記所定の処理の結果を前記通信装置に送信する送信部と、を有する前記特定の通信装置を、
含むことを特徴とするシステム。
【請求項５】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムにおいて、
自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部の電力を用いて動作する前記複数の通信装置のうちの特定の通信装置を基点として前記複数の通信装置により形成される環状の通信経路における前記特定の通信装置とは異なる他の通信装置と直接通信可能な第１の通信装置から、前記第１の通信装置により実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、第２の処理を実行する実行部と、
前記第１の処理の結果を受信してから所定時間が経過したか否かを判定する判定部と、
前記判定部によって前記所定時間が経過したと判定された場合、前記実行部によって実行された前記第２の処理の結果を前記環状の通信経路における前記他の通信装置と直接通信可能な第２の通信装置に送信する送信部と、を有する他の通信装置を、
含むことを特徴とするシステム。
【請求項６】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理プログラムにおいて、
前記複数の通信装置のうちの特定の通信装置に、
前記複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、前記特定の通信装置に直接通信可能な通信装置から、前記通信装置によって実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、所定の処理を実行し、
前記第１の処理の結果を受信してから所定時間が経過したか否かを判定し、
前記所定時間が経過したと判定した場合、前記所定の処理の結果を前記通信装置に送信する、
処理を実行させることを特徴とする分散処理プログラム。
【請求項７】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理プログラムにおいて、
自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部の電力を用いて動作する前記複数の通信装置のうちの特定の通信装置を基点として前記複数の通信装置により形成される環状の通信経路における前記特定の通信装置とは異なる他の通信装置に、
前記環状の通信経路における前記他の通信装置と直接通信可能な第１の通信装置から、前記第１の通信装置により実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、第２の処理を実行し、
前記第１の処理の結果を受信してから所定時間が経過したか否かを判定し、
前記所定時間が経過したと判定した場合、前記第２の処理の結果を前記環状の通信経路における前記他の通信装置と直接通信可能な第２の通信装置に送信する、
処理を実行させることを特徴とする分散処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理方法、システム、および分散処理プログラムに関する。
【背景技術】
【０００２】
従来、設置された環境に応じて得られるエネルギーを用いて発電する、エナジーハーベストと呼ばれる技術がある。また、複数の通信装置に処理を分散させる技術がある。関連する先行技術として、たとえば、解析処理を分散処理にて実行する複数の通信装置の出力を検知し、出力がない通信装置を障害が発生したと判断し、複数の通信装置を管理する通信装置に障害が発生した通信装置を復旧させて解析処理を再開するものがある。（たとえば、下記特許文献１を参照。）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２３１２９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来技術によれば、環境に応じて得られるエネルギーを用いて発電される電力を用いて動作する複数の通信装置で分散処理しようとすると、処理を実行した通信装置の電力が無くなって通信装置の動作が停止する場合がある。この場合、連続して複数の処理を通信装置に割り当てることが難しい。【０００５】
１つの側面では、本発明は、環境に応じて得られるエネルギーを用いて発電される電力を用いて動作する複数の通信装置を用いて分散処理を効率的に行うことができる分散処理方法、システム、および分散処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理方法において、複数の通信装置のうちの特定の通信装置が、複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、特定の通信装置に直接通信可能な通信装置から、通信装置によって実行された第１の処理の結果を受信した場合、第１の処理の結果に基づいて、所定の処理を実行し、第１の処理の結果を受信してから所定時間が経過したか否かを判定し、所定時間が経過したと判定した場合、所定の処理の結果を通信装置に送信する分散処理方法、システム、および分散処理プログラムが提案される。【０００７】
また、本発明の他の側面によれば、複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理方法において、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部の電力を用いて動作する複数の通信装置のうちの特定の通信装置を基点として複数の通信装置により形成される環状の通信経路における特定の通信装置とは異なる他の通信装置が、環状の通信経路における他の通信装置と直接通信可能な第１の通信装置から、第１の通信装置により実行された第１の処理の結果を受信した場合、第１の処理の結果に基づいて、第２の処理を実行し、第１の処理の結果を受信してから所定時間が経過したか否かを判定し、所定時間が経過したと判定した場合、第２の処理の結果を環状の通信経路における他の通信装置と直接通信可能な第２の通信装置に送信する分散処理方法、システム、および分散処理プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、環境に応じて得られるエネルギーを用いて発電される電力を用いて動作する複数の通信装置を用いて分散処理を効率的に行うことができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態１にかかるシステムの分散処理方法の動作例を示す説明図である。
【図２】図２は、ノードのハードウェア構成例を示すブロック図である。
【図３】図３は、検査員端末のハードウェア構成例を示すブロック図である。
【図４】図４は、実施の形態１にかかるシステムの機能例を示すブロック図である。
【図５】図５は、実施の形態１にかかる各ノードの分散処理のシーケンスを示す説明図である。
【図６】図６は、実施の形態１にかかるジョブ構造体の一例を示す説明図である。
【図７】図７は、実施の形態１にかかるジョブの割当処理手順の一例を示すフローチャートである。
【図８】図８は、実施の形態１にかかるジョブの実行処理手順の一例を示すフローチャートである。
【図９】図９は、実施の形態１にかかるジョブの集約再割当処理手順の一例を示すフローチャートである。
【図１０】図１０は、ジョブの集約処理手順の一例を示すフローチャートである。
【図１１】図１１は、実施の形態２にかかる分散処理方法の動作例を示す説明図である。
【図１２】図１２は、実施の形態２にかかるシステムの機能例を示すブロック図である。
【図１３】図１３は、実施の形態２にかかる各ノードの分散処理のシーケンスを示す説明図である。
【図１４】図１４は、実施の形態２にかかるジョブ構造体の一例を示す説明図である。
【図１５】図１５は、実施の形態２にかかるジョブの割当処理手順の一例を示すフローチャートである。
【図１６】図１６は、実施の形態２にかかるジョブの実行処理手順の一例を示すフローチャートである。
【図１７】図１７は、実施の形態２にかかるジョブの集約再割当処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示の分散処理方法、システム、および分散処理プログラムの実施の形態を詳細に説明する。
【００１１】
（実施の形態１の説明）
図１は、実施の形態１にかかるシステムの分散処理方法の動作例を示す説明図である。システム１００は、検査員端末１０１と、複数の通信装置とを含む。通信装置を、以下、「ノード」と称する。システム１００に含まれるノードは、特定のノードであるマスタノードと、特定のノード以外のノードであるスレーブノードがある。以下、マスタノードを、単に、「マスタ」と呼称する。また、スレーブノードを、単に、「スレーブ」と呼称する。図１の（ａ）で表示するように、マスタは、マスタ＃０、＃１がある。また、スレーブは、スレーブ＃ａ＿０〜＃ａ＿Ｎ、＃ｂ＿０〜＃ｂ＿Ｎ、＃ｃ＿０〜＃ｃ＿Ｎ、＃ｄ＿０〜＃ｄ＿Ｎ、＃ｅ＿０〜＃ｅ＿Ｎと、がある。
【００１２】
以下、スレーブ＃ａ＿０〜＃ａ＿Ｎ、＃ｂ＿０〜＃ｂ＿Ｎ、＃ｃ＿０〜＃ｃ＿Ｎ、＃ｄ＿０〜＃ｄ＿Ｎ、スレーブ＃ｅ＿０〜＃ｅ＿Ｎを指すときは、「各スレーブ」と称する。また、マスタ＃０、＃１と、各スレーブとを指すときは、「各ノード」と称する。
【００１３】
各ノードは、各ノードが設置された環境に応じて得られるエネルギーを用いて発電するエナジーハーベスト素子を有し、エナジーハーベスト素子により発生する電力を充電する充電部に充電された電力を用いて動作する通信装置である。各ノードは、所定領域Ｒ内に配置される。所定領域Ｒは、たとえば、コンクリート、土、水、空気などの物質で満たされた領域である。各ノードは、十分に蓄電されると起動し、データを送信してスリープするという間欠動作を行う。また、エナジーハーベスト素子により発生する電力は限られるため、各ノードは、電力消費が少ない短距離無線を有しており、マルチホップ通信によりデータを送受信する。
【００１４】
また、各ノードは、特定の通信経路に従ってマルチホップ通信によりデータを送受信する。特定の通信経路は、マスタ＃０を始点とし、マスタ＃１を終点とする。また、システム１００内に特定の通信経路が複数ある場合、各特定の通信経路は、マスタ＃０とマスタ＃１を共有し、各スレーブは共有しない。特定の通信経路は、たとえば、通信経路を決定するアルゴリズムにより決定されてもよいし、検査員端末１０１からの指示により決定されてもよい。
【００１５】
通信経路を決定するアルゴリズムの一例として、たとえば、マスタ＃０が直接通信可能なノードに、自ノードの識別情報を付与した信号を送信する。マスタ＃０の識別情報を付与した信号を受信したスレーブは、信号を送信しておらず、かつ、受信した信号に自ノードの識別情報が無ければ、自ノードの識別情報を受信した信号に付与して、直接通信可能なノードに送信する。マスタ＃１が受信した信号の内容が通信経路を示す情報となる。マスタ＃１は、マルチホップ通信により、各スレーブに、通信経路上の各スレーブの各々のスレーブの隣のノードの識別情報を通知する。各スレーブは、通信経路上の各スレーブの各々のスレーブの隣のノードの識別情報を記憶装置に記憶する。
【００１６】
図１の（ａ）の例では、所定領域Ｒに５つの通信経路がある。１つ目の通信経路は、マスタ＃０、スレーブ＃ａ＿０〜＃ａ＿Ｎ、マスタ＃１から形成される通信経路である。２つ目の通信経路は、マスタ＃０、スレーブ＃ｂ＿０〜＃ｂ＿Ｎ、マスタ＃１から形成される通信経路である。３つ目の通信経路は、マスタ＃０、スレーブ＃ｃ＿０〜＃ｃ＿Ｎ、マスタ＃１から形成される通信経路である。４つ目の通信経路は、マスタ＃０、スレーブ＃ｄ＿０〜＃ｄ＿Ｎ、マスタ＃１から形成される通信経路である。５つ目の通信経路は、マスタ＃０、スレーブ＃ｅ＿０〜＃ｅ＿Ｎ、マスタ＃１から形成される通信経路である。
【００１７】
各ノードは、センサーを有してもよい。各ノードは、各々が有するセンサーから、所定領域Ｒ内の温度、湿度、応力といったデータを検出する。検査員端末１０１は、各ノードが検出したデータを収集する。収集したデータは、サーバに集約されて、解析処理に用いられる。このとき、データを収集する際に、データはノードごとにあるため、データ量が多くなることから、検査員端末１０１に負荷がかかる。そのため、実施の形態１にかかるシステム１００は、各ノードの演算能力を利用して、解析処理を分散して行うことにより、検査員端末１０１がデータを収集する際にかかる負荷を低減することを図る。
【００１８】
しかしながら、各ノードで分散して処理を行う場合、各ノードが間欠動作するために、マスタが、スレーブに処理を実行させようとしても、スレーブが間欠動作しており、スレーブが停止中には、処理を割り当てることが難しい。ここで、マスタが、スレーブが動作中か否かを問い合わせる信号を送信すると、何度も信号を送信することになってしまい、マスタの消費する電力が増大してしまう。また、複数のノードの各ノードの電力残量が十分であれば、各ノードで一回ずつ分散処理を行うことができるが、１回の処理結果を送信したノードの動作が停止するため、各ノードの個数より多く分散したい場合に、処理を割り当てることが難しい。
【００１９】
そこで、本実施の形態にかかるシステム１００において、マスタは、あるスレーブから処理結果を受信した後、所定時間が経過してから、あるスレーブにマスタによる処理結果を送信する。これにより、システム１００は、スレーブの動作中に処理結果を渡すことができるため、スレーブに処理結果を用いた新たな処理を実行させることができる。
【００２０】
具体的に、マスタ＃０は、各スレーブに処理を割り当てる。各スレーブは処理を実行していき、マスタ＃１は、処理結果を集約する。さらに、マスタ＃１は、集約結果を用いる処理を各スレーブに割り当てる。各スレーブは処理を実行していき、マスタ＃０は、処理結果を集約する。
【００２１】
図１の（ｂ）では、マスタ＃０が各スレーブに処理を割り当てた後の、マスタ＃１と、マスタ＃１と直接通信可能なスレーブ＃ａ＿Ｎとの通信のシーケンスを示す。また、スレーブ＃ａ＿Ｎの矩形１１１は、スレーブ＃ａ＿Ｎの充電部の各時刻の電力残量を示す。たとえば、時刻ｔ０では、スレーブ＃ａ＿Ｎは十分に充電していることを示す。
【００２２】
時刻ｔ０からｔ１にかけて、スレーブ＃ａ＿Ｎは、第１の処理を実行し、第１の処理の結果を、マスタ＃１に送信する。ここで、第１の処理は、マスタ＃０から割り当てられた処理である。第１の処理の内容を記述したプログラムは、ノード配置後や特定の通信経路決定後に、システム１００の管理者が検査員端末１０１を操作して該当ノードの記憶領域に格納してもよいし、処理内容を実行可能なプログラムをマスタ＃０が送信してもよい。第１の処理の内容は、どのような内容でもよく、たとえば、スレーブ＃ａ＿Ｎが受信したデータと、スレーブ＃ａ＿Ｎのセンサーから取得したデータとの加算処理と、スレーブ＃ａ＿Ｎが受信したデータのホップ数をインクリメントする処理内容である。
【００２３】
時刻ｔ１にて、スレーブ＃ａ＿Ｎは、第１の処理の結果を、マスタ＃１に送信し、電力残量が無くなったために、動作を停止する。第１の処理の結果は、たとえば、加算結果とインクリメントしたホップ数である。
【００２４】
時刻ｔ１から時刻ｔ２までのいずれかのときに、マスタ＃１は、第１の処理の結果に基づいて、所定の処理を実行する。所定の処理は、第１の処理に関する処理である。所定の処理の内容を記述したプログラムは、たとえば、ノード配置後や特定の通信経路決定後に、システム１００の管理者が検査員端末１０１を操作して該当ノードの記憶領域に格納する。所定の処理は、たとえば、第１の処理のデータとホップ数から、平均値を計算する処理である。
【００２５】
そして、マスタ＃１は、第１の処理の結果を受信してから所定時間が経過したか否かを判定する。具体的な判定方法として、たとえば、マスタ＃１は、第１の処理の結果を受信したときの、マスタ＃１内にあるプロセッサのクロックパルスの数を記憶しておき、定期的にクロックパルスの数を参照して、所定時間が経過したか否かを判定する。
【００２６】
所定時間は、各スレーブの電力残量が無くなってから動作可能となる電力残量までの電力を充電する時間である。実際に、所定時間の大きさは、ノード製造時に計測した結果に基づいて決定してもよいし、ノードを配置した際のエナジーハーベスト素子の発電量に基づいて決定してもよい。たとえば、所定時間は、短ければ１分、長ければ１０分ぐらいとなる。
【００２７】
時刻ｔ２にて、所定時間が経過したと判定した場合、マスタ＃１は、所定の処理の結果をスレーブ＃ａ＿Ｎに送信する。これにより、スレーブ＃ａ＿Ｎは、所定の処理の結果を用いて、再び処理を実行する。以下、実施の形態１にかかるシステム１００について、図２〜図１０を用いて説明する。
【００２８】
（ノードのハードウェア構成例）
図２は、ノードのハードウェア構成例を示すブロック図である。図２の例では、スレーブ＃ａ＿０を例として、スレーブ＃ａ＿０のハードウェア構成を示す。マスタ＃０、＃１、スレーブ＃ａ＿１〜スレーブ＃ａ＿Ｎ、スレーブ＃ｂ＿０〜＃ｂ＿Ｎ、スレーブ＃ｃ＿０〜＃ｃ＿Ｎ、スレーブ＃ｄ＿０〜＃ｄ＿Ｎ、スレーブ＃ｅ＿０〜＃ｅ＿Ｎといった他のノードも、スレーブ＃ａ＿０と同様のハードウェア構成となる。スレーブ＃ａ＿０は、マイクロプロセッサ（以下、「ＭＣＵ（Ｍｉｃｒｏ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）」と称する。）２０１と、センサー２０２と、無線通信回路２０３と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０４と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０５と、不揮発メモリ２０６と、アンテナ２０７と、ハーベスタ２０８と、バッテリ２０９と、ＰＭＵ（Ｐｏｗｅｒ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）２１０と、を有する。スレーブ＃ａ＿０は、ＭＣＵ２０１と、センサー２０２と、無線通信回路２０３と、ＲＡＭ２０４と、ＲＯＭ２０５と、不揮発メモリ２０６と、を接続するバス２１１を有する。
【００２９】
ＭＣＵ２０１は、スレーブ＃ａ＿０の全体の制御を司る演算処理装置である。たとえば、ＭＣＵ２０１は、センサー２０２が検出したデータを処理する。センサー２０２は、設置箇所における所定の変位量を検出する装置である。センサー２０２は、たとえば、設置箇所の圧力を検出する圧電素子や、温度を検出する素子、光を検出する光電素子などを用いることができる。アンテナ２０７は、検査員端末や他のノードと無線通信する電波を送受信する。無線通信回路２０３（ＲＦ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ））は、受信した無線電波を受信信号として出力し、送信信号を無線電波としてアンテナ２０７を介して送信する。無線通信回路２０３は、数１０ｃｍ付近にある他ノードと通信可能とする短距離無線が採用された通信回路でよい。
【００３０】
ＲＡＭ２０４は、ＭＣＵ２０１における処理の一時データを格納する記憶装置である。ＲＯＭ２０５は、ＭＣＵ２０１が実行する処理プログラムなどを格納する記憶装置である。不揮発メモリ２０６は、書き込み可能な記憶装置であって、電力供給が途絶えたときにおいても書き込まれた所定のデータを保持する。たとえば、不揮発メモリ２０６は、フラッシュメモリ等が採用される。
【００３１】
ハーベスタ２０８は、図１で説明したエナジーハーベスト素子であり、スレーブ＃ａ＿０の設置箇所における外部環境、たとえば、光、振動、温度、無線電波（受信電波）などのエネルギー変化に基づき発電する装置である。また、ハーベスタ２０８は、センサー２０２によって検出された変位量に応じて発電してもよい。バッテリ２０９は、ハーベスタ２０８により発電された電力を蓄える装置である。すなわち、スレーブ＃ａ＿０は、外部電源などが不要であり、動作に要求される電力を自装置の内部で生成する。ＰＭＵ２１０は、バッテリ２０９によって蓄えられた電力を、ノードの各部に駆動電源として供給する制御を行う装置である。
【００３２】
（検査員端末１０１のハードウェア構成例）
図３は、検査員端末のハードウェア構成例を示すブロック図である。検査員端末１０１は、プロセッサ（ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））３０１と、大容量のＲＯＭ３０２と、ＲＡＭ３０３と、不揮発メモリ３０４と、インターフェース（Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ））回路３０５と、無線通信回路３１１と、アンテナ３１２と、ネットワークＩ／Ｆ３１３と、を有する。ＣＰＵ３０１は、ノードのＭＣＵ２０１よりも高性能であってもよい。検査員端末１０１は、ＣＰＵ３０１と、ＲＯＭ３０２と、ＲＡＭ３０３と、不揮発メモリ３０４と、Ｉ／Ｏ回路３０５と、を接続するバス３０６を有する。検査員端末１０１は、ノードと異なり外部電源に基づき動作してもよいし、内部電源に基づき動作してもよい。不揮発メモリ３０４は、システム１００内のノード識別情報一覧を記憶する。
【００３３】
また、Ｉ／Ｏ回路３０５には、無線通信回路３１１およびアンテナ３１２と、ネットワークＩ／Ｆ３１３が接続される。これにより、検査員端末１０１は、無線通信回路３１１およびアンテナ３１２を介して、ノードと無線通信することができる。なお、無線通信回路３１１は、数１０ｃｍ付近にあるノードと通信可能とする短距離無線が採用された通信回路でもよいし、遠方にあるノードと通信可能とする中長距離無線が採用された通信回路でもよい。さらに、検査員端末１０１は、ネットワークＩ／Ｆ３１３を介して、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）のプロトコル処理などにより、インターネットなどのネットワーク３１４を介してサーバなどの外部装置と通信を行うことができる。
【００３４】
（システム１００の機能）
図４は、実施の形態１にかかるシステムの機能例を示すブロック図である。システム１００は、充電部４０１と、受信部４１１と、実行部４１２と、判定部４１３と、送信部４１４と、を含む。制御部となる受信部４１１〜送信部４１４は、記憶装置に記憶されたプログラムをＭＣＵ２０１が実行することにより、受信部４１１〜送信部４１４の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０５、ＲＡＭ２０４、不揮発メモリ２０６などである。充電部４０１は、スレーブ＃ａ＿Ｎとスレーブ＃ｂ＿Ｎとに含まれる。充電部４０１は、図２にて説明したバッテリ２０９に相当する。受信部４１１〜送信部４１４は、マスタ＃１に含まれる。
【００３５】
受信部４１１は、マスタ＃１に直接通信可能なスレーブ＃ａ＿Ｎから、スレーブ＃ａ＿Ｎによって実行された第１の処理の結果を受信する。また、受信部４１１は、マスタ＃１に直接通信可能なスレーブ＃ｂ＿Ｎから、スレーブ＃ｂ＿Ｎによって実行された第２の処理の結果を受信する。第２の処理は、第１の処理同様に、マスタ＃０から割り当てられた処理である。なお、受信した結果は、マスタ＃１のＲＡＭ２０４、不揮発メモリ２０６等の記憶領域に格納される。
【００３６】
実行部４１２は、受信部４１１によって受信された第１の処理の結果に基づいて、所定の処理を実行する。また、実行部４１２は、所定時間が経過したと判定する前に、スレーブ＃ｂ＿Ｎから、第２の処理の結果を受信した場合、第１の処理の結果と第２の処理の結果とに基づいて、所定の処理を実行してもよい。なお、所定の処理の結果は、マスタ＃１のＲＡＭ２０４、不揮発メモリ２０６等の記憶領域に格納される。
【００３７】
判定部４１３は、受信部４１１が第１の処理の結果を受信してから所定時間が経過したか否かを判定する。また、判定部４１３は、受信部４１１が第２の処理の結果を受信してから所定時間が経過したか否かを判定してもよい。なお、判定結果は、マスタ＃１のＲＡＭ２０４、不揮発メモリ２０６等の記憶領域に格納される。
【００３８】
送信部４１４は、判定部４１３によって第１の処理の結果を受信してから所定時間が経過したと判定された場合、所定の処理の結果をスレーブ＃ａ＿Ｎに送信する。また、送信部４１４は、判定部４１３によって第２の処理の結果を受信してから所定時間が経過したと判定された場合、所定の処理の結果をスレーブ＃ａ＿Ｎ、＃ｂ＿Ｎに送信してもよい。また、所定の処理の結果は、スレーブ＃ａ＿Ｎに対する新たな処理の実行要求を含んでもよい。
【００３９】
図５は、実施の形態１にかかる各ノードの分散処理のシーケンスを示す説明図である。図５の例では、マスタ＃０、スレーブ＃ａ＿０、スレーブ＃ａ＿１、…、スレーブ＃ａ＿Ｎ−１、スレーブ＃ａ＿Ｎ、マスタ＃１から形成される通信経路における分散処理について説明する。
【００４０】
マスタ＃０は、実施の形態１にかかるジョブの割当処理を実行する（ステップＳ５０１）。実施の形態１にかかるジョブの割当処理の詳細については、図７にて後述する。以下、各ノードに割り当てる処理をジョブとする。ジョブの割当処理は、ジョブを生成し、複数のスレーブにジョブを割り当てる処理である。ジョブに含まれる情報については、図６にて後述する。ジョブの割当処理の中で、マスタ＃０は、ジョブをスレーブ＃ａ＿０を含む複数のスレーブに送信する。具体的に、複数のスレーブは、スレーブ＃ａ＿０、＃ｂ＿０、＃ｃ＿０、＃ｄ＿０、＃ｅ＿０となる。送信後、マスタ＃０は、電力を消費したため、充電が完了するまで停止する。
【００４１】
ジョブを受信したスレーブ＃ａ＿０は、ジョブの実行処理を実行する（ステップＳ５０２）。ジョブの実行処理の詳細は、図８にて後述する。ジョブの実行処理の中で、スレーブ＃ａ＿０は、ジョブを次のノードに転送する。このように、次々ジョブが転送される。転送後、スレーブ＃ａ＿０は、電力を消費したため、充電が完了するまで停止する。
【００４２】
ここで、次のノードについて説明する。図１で説明したように、システム１００は、スレーブ間のデータの通信経路が決まっており、各スレーブは、データを送受信する２つのノードの識別情報を不揮発メモリ２０６といった記憶装置に記憶している。各スレーブは、不揮発メモリ２０６に記憶した識別情報から特定される２つのノードのうちのいずれか一方のノードからジョブを受信した際、次のノードとして他方のノードにジョブを転送する。
【００４３】
ジョブを受信したスレーブ＃ａ＿Ｎは、ジョブの実行処理を実行する（ステップＳ５０３）。ジョブの実行処理の中で、スレーブ＃ａ＿Ｎは、ジョブをマスタ＃１に転送する。転送後、スレーブ＃ａ＿Ｎは、電力を消費したため、充電が完了するまで停止する。
【００４４】
ジョブを受信したマスタ＃１は、ジョブの集約再割当処理を実行する（ステップＳ５０４）。マスタ＃１は、ジョブをスレーブ＃ａ＿Ｎを含む複数のスレーブから受信する。具体的に、複数のスレーブとは、スレーブ＃ａ＿Ｎ、＃ｂ＿Ｎ、＃ｃ＿Ｎ、＃ｄ＿Ｎ、＃ｅ＿Ｎとなる。ジョブの集約再割当処理の詳細については、図９にて後述する。ジョブの集約再割当処理は、スレーブ＃ａ＿Ｎの充電が完了するまで待機した後、新たなジョブを生成して、複数のスレーブに新たなジョブを割り当てる処理である。
【００４５】
スレーブ＃ａ＿Ｎの充電が完了した場合、マスタ＃０、スレーブ＃ａ＿０、…、スレーブ＃ａ＿Ｎ−１の充電も完了している可能性が高い。ジョブの集約再割当処理の中で、マスタ＃１は、新たなジョブをスレーブ＃ａ＿Ｎを含む複数のスレーブに送信する。送信後、マスタ＃１は、電力を消費したため、充電が完了するまで停止する。
【００４６】
新たなジョブを受信したスレーブ＃ａ＿Ｎは、ジョブの実行処理を実行する（ステップＳ５０５）。ジョブの実行処理の中で、スレーブ＃ａ＿Ｎは、新たなジョブを次のスレーブに転送する。このように、次々新たなジョブが転送される。新たなジョブを受信したスレーブ＃ａ＿０は、ジョブの実行処理を実行する（ステップＳ５０６）。ジョブの実行処理の中で、スレーブ＃ａ＿０は、新たなジョブをマスタ＃０に転送する。転送後、スレーブ＃ａ＿０は、電力を消費したため、充電が完了するまで停止する。
【００４７】
新たなジョブを受信したマスタ＃０は、ジョブの集約処理を実行する（ステップＳ５０７）。マスタ＃０は、新たなジョブをスレーブ＃ａ＿０を含む複数のスレーブから受信する。ジョブの集約処理の詳細については、図１０にて後述する。ジョブの集約処理は、複数のスレーブから新たなジョブを受信するまで待機して、複数のスレーブから受信した新たなジョブを収集する処理である。
【００４８】
次に、図６を用いて、ジョブに含まれる情報を定義したジョブ構造体について説明する。実施の形態１、２にかかるシステム１００は、システム１００内のセンサーデータの分散を計算するジョブを実行することが可能であるとする。さらに、実施の形態１、２にかかるシステム１００は、分散を計算するジョブを実行するために、システム１００内のセンサーデータの総和を計算するジョブも実行することが可能であるとする。
【００４９】
図６は、実施の形態１にかかるジョブ構造体の一例を示す説明図である。ジョブ構造体６０１は、実施の形態１にかかるジョブに含まれる情報を定義したプログラムコードである。ジョブ構造体６０１は、４つのｉｎｔ型のメンバを含む。１つ目のメンバは、ジョブの種類を示す識別子が格納されるｋｉｎｄメンバである。ジョブの種類を示す識別子として、本実施の形態では、システム１００内のデータの総和を計算するジョブを示す“総和計算”と、システム１００内のデータの標本分散を計算するジョブを示す“分散計算”とがある。
【００５０】
２つ目のメンバは、ジョブの処理結果となるデータが格納されるｄａｔａメンバである。３つ目のメンバは、平均値が格納されるａｖｅｒａｇｅメンバである。４つ目のメンバは、ジョブの転送回数であるホップ数が格納されるｈｏｐメンバである。
【００５１】
以下、説明の簡略化のため、ジョブのｋｉｎｄメンバに格納されたデータを、「ジョブの種類」と呼称する。また、ジョブのｄａｔａメンバに格納されたデータを、「ジョブのデータ」と呼称する。さらに、ジョブのａｖｅｒａｇｅメンバに格納されたデータを、「ジョブの平均値」と呼称する。また、ジョブのｈｏｐメンバに格納されたデータを、「ジョブのホップ数」と呼称する。
【００５２】
次に、図５に示した、ジョブの割当処理と、ジョブの実行処理と、ジョブの集約再割当処理と、ジョブの集約処理と、のフローチャートについて、図７〜図１０を用いて説明する。
【００５３】
図７は、実施の形態１にかかるジョブの割当処理手順の一例を示すフローチャートである。実施の形態１にかかるジョブの割当処理は、複数のスレーブにジョブを割り当てる処理である。ジョブの割当処理は、検査員端末１０１からのジョブ実行の指示を契機として実行される。または、ジョブの割当処理は、定期的に実行されてもよい。
【００５４】
マスタ＃０は、ジョブ構造体６０１に従って、ジョブの種類が“総和計算”である総和計算ジョブを生成する（ステップＳ７０１）。次に、マスタ＃０は、生成したジョブを複数のスレーブに送信する（ステップＳ７０２）。ステップＳ７０２の処理終了後、マスタ＃０は、実施の形態１にかかるジョブの割当処理を終了する。実施の形態１にかかるジョブの割当処理を実行することにより、マスタ＃０は、複数のスレーブにジョブを割り当てて、システム１００内でジョブを分散処理することができる。
【００５５】
図８は、実施の形態１にかかるジョブの実行処理手順の一例を示すフローチャートである。実施の形態１にかかるジョブの実行処理は、割り当てられたジョブを実行する処理である。ジョブの実行処理は、各スレーブが実行する。図８の説明では、複数のスレーブのうちのいずれかのスレーブがジョブの実行処理を実行する場合について説明する。
【００５６】
いずれかのスレーブがジョブの実行処理を実行する契機は、次の３つの条件のいずれかを満たす時である。１つ目の条件は、図８中の結合子Ａが示す、いずれかのスレーブがマスタ＃０の次のノードであり、図７に示したステップＳ７０２の処理が実行された場合である。２つ目の条件は、図８中の結合子Ｂが示す、いずれかのスレーブが他のスレーブの次のノードであり、他のスレーブによりジョブの実行処理が実行されて、図８に示すステップＳ８１０の処理が実行された場合である。３つ目の条件は、図８中の結合子Ｃが示す、いずれかのスレーブがマスタ＃１の次のノードであり、図９に示すステップＳ９０６の処理が実行された場合である。
【００５７】
いずれかのスレーブは、ジョブを受信する（ステップＳ８０１）。次に、いずれかのスレーブは、ジョブの種類を確認する（ステップＳ８０２）。ジョブの種類が総和計算ジョブである場合（ステップＳ８０２：総和計算ジョブ）、いずれかのスレーブは、センサー２０２からデータを取得する（ステップＳ８０３）。次に、いずれかのスレーブは、取得したデータを、不揮発メモリ３０４に格納する（ステップＳ８０４）。続けて、いずれかのスレーブは、取得したデータとジョブのデータとを加算したデータを、ジョブのデータに格納する（ステップＳ８０５）。
【００５８】
ジョブの種類が分散計算ジョブである場合（ステップＳ８０２：分散計算ジョブ）、いずれかのスレーブは、不揮発メモリ３０４からセンサー２０２のデータを取得する（ステップＳ８０６）。次に、いずれかのスレーブは、取得したデータと、ジョブの平均値との差の２乗を算出する（ステップＳ８０７）。続けて、いずれかのスレーブは、取得したデータとジョブのデータとを加算したデータを、ジョブのデータに格納する（ステップＳ８０８）。
【００５９】
ステップＳ８０５、またはステップＳ８０８の処理終了後、いずれかのスレーブは、ジョブのホップ数をインクリメントする（ステップＳ８０９）。次に、いずれかのスレーブは、ジョブを次のノードに転送する（ステップＳ８１０）。ステップＳ８１０の処理終了後、いずれかのスレーブは、実施の形態１にかかるジョブの実行処理を終了する。実施の形態１にかかるジョブの実行処理を実行することにより、いずれかのスレーブは、割り当てられたジョブを実行することができる。
【００６０】
図９は、実施の形態１にかかるジョブの集約再割当処理手順の一例を示すフローチャートである。実施の形態１にかかるジョブの集約再割当処理は、ジョブを集約して、新たなジョブを生成して、再びスレーブに割り当てる処理である。ジョブの集約再割当処理は、マスタ＃１が実行する。また、ジョブの集約再割当処理が実行される契機は、各スレーブのうちの次のノードがマスタ＃１となるスレーブによって、ステップＳ８１０の処理が実行された場合である。
【００６１】
マスタ＃１は、ジョブを受信する（ステップＳ９０１）。マスタ＃１は、各通信経路の末端に位置するスレーブから受信する。次に、マスタ＃１は、最後にジョブを受信してから所定時間が経過したか否かを判断する（ステップＳ９０２）。最後にジョブを受信してから所定時間が経過していない場合（ステップＳ９０２：Ｎｏ）、マスタ＃１は、ステップＳ９０１の処理に移行する。
【００６２】
ステップＳ９０１とステップＳ９０２の処理の詳細について説明する。図１が示すように５つの通信経路がある場合、５つのスレーブからジョブを受信する。マスタ＃１は、１つ目のスレーブからジョブを受信した後、１つ目のスレーブからジョブを受信してから所定時間が経過するまで待機する。待機中に２つ目のスレーブからジョブを受信した場合、マスタ＃１は、２つ目のスレーブからジョブを受信してから所定時間が経過するまで待機する。このようにして、マスタ＃１は、５つのスレーブからジョブを受信する。
【００６３】
ある程度の数のジョブを受信して、所定時間が経過した場合、マスタ＃１は、全てのスレーブからジョブが送信されるのを待たずに、ステップＳ９０２：Ｙｅｓとして、処理を実行する。全てのスレーブからジョブが送信されるのを待たない理由の１つ目として、ノードは安価で大量に設置されるため、ノードが故障する可能性があり、全てのスレーブのうちの一部のスレーブからジョブが送信されない可能性があるためである。また、ある程度の数のジョブを受信した結果を解析することにより、検査員端末１０１の利用者は、所定領域Ｒで何が起こっているかを十分に把握することができる。
【００６４】
最後にジョブを受信してから所定時間が経過した場合（ステップＳ９０２：Ｙｅｓ）、マスタ＃１は、受信したジョブのデータおよびホップ数から、データの平均値を算出する（ステップＳ９０３）。次に、マスタ＃１は、ジョブ構造体６０１に従って、ジョブの種類が“分散計算”である分散計算ジョブを生成する（ステップＳ９０４）。続けて、マスタ＃１は、生成したジョブの平均値に、算出した平均値を設定する（ステップＳ９０５）。次に、マスタ＃１は、分散計算ジョブを、複数のスレーブに送信する（ステップＳ９０６）。このとき、ステップＳ９０２の処理により、最後にジョブを送信したスレーブがジョブを送信してから所定時間が経過しているため、送信対象となる複数のスレーブの充電が十分であり、複数のスレーブが動作することが出来る可能性が高い。
【００６５】
ステップＳ９０６の処理終了後、マスタ＃１は、実施の形態１にかかるジョブの集約再割当処理を終了する。また、ステップＳ９０２の処理において、ジョブを受信してから所定時間が経過したか待機することになるが、マスタ＃１は、待機中に、ステップＳ９０３の処理とステップＳ９０４の処理とを実行してもよい。たとえば、ジョブを２つ受信した場合、ステップＳ９０３の処理の途中の処理として、マスタ＃１は、１つ目および２つ目のジョブのホップ数を加算しておくとともに、１つ目および２つ目のジョブのデータを加算しておいてもよい。
【００６６】
実施の形態１にかかるジョブの集約再割当処理を実行することにより、マスタ＃１は、ジョブを集約して、新たなジョブを生成して、スレーブの電力が十分蓄電された後、再びスレーブに割り当てることができる。
【００６７】
図１０は、ジョブの集約処理手順の一例を示すフローチャートである。ジョブの集約処理は、ジョブの結果を集約する処理である。マスタ＃０は、ジョブを受信する（ステップＳ１００１）。次に、マスタ＃０は、初めてジョブを受信してから最大受信待ち時間が経過したか否かを判断する（ステップＳ１００２）。最大受信待ち時間とは、複数のスレーブからジョブを受信できるように、ある程度の余裕を持たせるために設けた時間である。たとえば、最大受信待ち時間は、数秒である。また、ステップＳ１００２の処理において、マスタ＃０は、最後にジョブを受信してから最大受信待ち時間が経過したか否かを判断してもよい。
【００６８】
初めてジョブを受信してから最大受信待ち時間が経過していない場合（ステップＳ１００２：Ｎｏ）、マスタ＃０は、ステップＳ１００１の処理に移行する。初めてジョブを受信してから最大受信待ち時間が経過した場合（ステップＳ１００２：Ｙｅｓ）、マスタ＃０は、受信したジョブのデータおよびホップ数から、データの標本分散を算出する（ステップＳ１００３）。ステップＳ１００３の処理終了後、マスタ＃０は、ジョブの集約処理を終了する。
【００６９】
なお、ジョブの集約処理は、他のノードにジョブを送信する、という処理を行わない。したがって、他のノードの充電が不十分のため動作していないことを考慮しなくてよいため、所定時間経過したか判定しなくてよい。ジョブの集約処理を実行することにより、システム１００は、分散して実行されたジョブの集約結果を得ることができる。
【００７０】
以上説明したように、システム１００によれば、スレーブから処理結果を受信した後、所定時間が経過してからスレーブに別の処理結果を送信する。これにより、システム１００は、間欠動作するノードを用いて、分散処理を効率的に実行することができる。たとえば、マスタ＃１は、スレーブ＃ａ＿Ｎが動作中か否かを問い合わせる信号を発行せずに、スレーブ＃ａ＿Ｎに処理結果を渡すことができる。
【００７１】
また、システム１００は、特定の通信経路の両端にあるノードにマスタの役割を担わせることにより、マスタ間に存在するノードをスレーブとして分散並列処理を実現することができる。
【００７２】
また、システム１００によれば、マスタ＃１は、あるスレーブからある処理の結果を受信した後、所定時間が経過していない間に、他のスレーブから他の処理の結果を受信した場合、ある処理の結果と他の処理の結果に基づいて、処理を行ってもよい。これにより、マスタ＃１は、複数のスレーブからの処理結果を集約した結果を算出することができる。
【００７３】
（実施の形態２の説明）
実施の形態１にかかるシステム１００は、特定のノードとなるマスタが２つであることを前提とする。一方、実施の形態２にかかるシステム１００は、特定のノードとなるマスタが１つであることを前提とする。以下、実施の形態２にかかるシステム１１００について、図１１〜図１７を用いて説明する。なお、実施の形態１において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
【００７４】
図１１は、実施の形態２にかかる分散処理方法の動作例を示す説明図である。図１１の（ａ）が示すように、実施の形態２にかかるシステム１１００に含まれる各ノードが配置される所定領域Ｒが円柱の表面となる。図１１の（ａ）で表示するように、マスタは、マスタ＃０１つである。また、スレーブは、スレーブ＃ａ＿０〜＃ａ＿Ｎ、＃ｂ＿０〜＃ｂ＿Ｎ、＃ｃ＿０〜＃ｃ＿Ｎ、＃ｄ＿０〜＃ｄ＿Ｎ、＃ｅ＿０〜＃ｅ＿Ｎと、がある。図１１の（ｂ）は、図１１の（ａ）において、スレーブ＃ａ＿０が通信経路の先頭かつ末尾となるように円柱の表面を展開した図である。図１１の（ｂ）に示す特定の通信経路は、以下５つとなる。
【００７５】
１つ目の通信経路は、マスタ＃０、スレーブ＃ａ＿０〜＃ａ＿Ｎ、マスタ＃０から形成される環状の通信経路である。２つ目の通信経路は、マスタ＃０、スレーブ＃ｂ＿０〜＃ｂ＿Ｎ、マスタ＃０から形成される環状の通信経路である。３つ目の通信経路は、マスタ＃０、スレーブ＃ｃ＿０〜＃ｃ＿Ｎ、マスタ＃０から形成される環状の通信経路である。４つ目の通信経路は、マスタ＃０、スレーブ＃ｄ＿０〜＃ｄ＿Ｎ、マスタ＃０から形成される環状の通信経路である。５つ目の通信経路は、マスタ＃０、スレーブ＃ｅ＿０〜＃ｅ＿Ｎ、マスタ＃０から形成される環状の通信経路である。
【００７６】
このように、図１１の（ｂ）の通信経路は、マスタ＃０を基点とする環状の通信経路となる。したがって、通信経路のマスタ以外のスレーブのいずれか一つが、所定時間が経過したか否かを判定することになる。
【００７７】
図１２は、実施の形態２にかかるシステムの機能例を示すブロック図である。システム１１００は、充電部４０１と、受信部１２０１と、実行部１２０２と、判定部１２０３と、送信部１２０４と、を含む。制御部となる受信部１２０１〜送信部１２０４は、記憶装置に記憶されたプログラムをＭＣＵ２０１が実行することにより、受信部１２０１〜送信部１２０４の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０５、ＲＡＭ２０４、不揮発メモリ２０６などである。充電部４０１は、マスタ＃０と、スレーブ＃ａ＿ｉ−１と、スレーブ＃ａ＿ｉと、スレーブ＃ａ＿ｉ＋１と、に含まれる。ここで、ｉは、０以上ａ＿Ｎ以下の整数である。充電部４０１は、図２にて説明したバッテリ２０９に相当する。受信部１２０１〜送信部１２０４は、スレーブ＃ａ＿ｉに含まれる。
【００７８】
受信部１２０１は、直接通信可能な第１のノードから、上述のノードによって実行された第１の処理の結果を受信する。ｉが１以上であれば、第１のノードは、スレーブ＃ａ＿ｉ−１となる。一方、ｉが０であれば、第１のノードは、マスタ＃０となる。このとき、第１の処理は、生成した処理となる。なお、受信した結果は、スレーブ＃ａ＿ｉのＲＡＭ２０４、不揮発メモリ２０６等の記憶領域に格納される。
【００７９】
実行部１２０２は、受信部１２０１が第１の処理の結果を受信した場合、第１の処理の結果に基づいて、第２の処理を実行する。なお、実行した結果は、スレーブ＃ａ＿ｉのＲＡＭ２０４、不揮発メモリ２０６等の記憶領域に格納される。
【００８０】
判定部１２０３は、受信部１２０１が第１の処理の結果を受信してから所定時間が経過したか否かを判定する。なお、判定結果は、スレーブ＃ａ＿ｉのＲＡＭ２０４、不揮発メモリ２０６等の記憶領域に格納される。
【００８１】
送信部１２０４は、判定部１２０３によって所定時間が経過したと判定された場合、第２の処理の結果を環状の通信経路におけるスレーブ＃ａ＿ｉと直接通信可能な第２のノードに送信する。ｉがＮより小さければ、第２のノードは、スレーブ＃ａ＿ｉ＋１となる。ｉがＮであれば、第２のノードは、マスタ＃０となる。
【００８２】
図１３は、実施の形態２にかかる各ノードの分散処理のシーケンスを示す説明図である。図１３の例では、マスタ＃０、スレーブ＃ａ＿０、スレーブ＃ａ＿１、…、スレーブ＃ａ＿Ｎ−１、スレーブ＃ａ＿Ｎ、マスタ＃０から形成される環状の通信経路における分散処理について説明する。
【００８３】
マスタ＃０は、実施の形態２にかかるジョブの割当処理を実行する（ステップＳ１３０１）。実施の形態２にかかるジョブの割当処理の詳細については、図１５にて後述する。ジョブの割当処理の中で、マスタ＃０は、ジョブをスレーブ＃ａ＿０を含む複数のスレーブに送信する。送信後、マスタ＃０は、電力を消費したため、充電が完了するまで停止する。
【００８４】
ジョブを受信したスレーブ＃ａ＿０は、実施の形態２にかかるジョブの実行処理を実行する（ステップＳ１３０２）。実施の形態２にかかるジョブの実行処理の詳細は、図１６にて後述する。実施の形態２にかかるジョブの実行処理は、該当のジョブが初めて実行される場合、マスタ＃０の充電が完了するまで待機する。また、マスタ＃０の充電が完了するまで待機するノードは、スレーブ＃ａ＿０〜スレーブ＃ａ＿Ｎのうちいずれのノードであってもよい。
【００８５】
ジョブの実行処理の中で、スレーブ＃ａ＿０は、ジョブを次のスレーブに転送する。転送後、スレーブ＃０は、電力を消費したため、充電が完了するまで停止する。このように、次々ジョブが転送される。ジョブを受信したスレーブ＃ａ＿Ｎは、ジョブの実行処理を実行する（ステップＳ１３０３）。ジョブの実行処理の中で、スレーブ＃ａ＿Ｎは、ジョブをマスタ＃０に転送する。転送後、スレーブ＃ａ＿Ｎは、電力を消費したため、充電が完了するまで停止する。
【００８６】
ジョブを受信したマスタ＃０は、実施の形態２にかかるジョブの集約再割当処理を実行する（ステップＳ１３０４）。マスタ＃０は、ジョブをスレーブ＃ａ＿Ｎを含む複数のスレーブから受信する。実施の形態２にかかるジョブの集約再割当処理の詳細については、図１７にて後述する。実施の形態２にかかるジョブの集約再割当処理は、複数のスレーブからジョブを受信するまで待機して、複数のスレーブから受信したジョブを収集する。そして、実施の形態２にかかるジョブの集約再割当処理は、ジョブの再割当を行う場合、新たなジョブを生成して、複数のスレーブに新たなジョブを割り当てる。
【００８７】
ジョブの集約再割当処理の中で、マスタ＃０は、新たなジョブをスレーブ＃ａ＿０を含む複数のスレーブに送信する。新たなジョブの送信時、マスタ＃０の充電が完了していたため、スレーブ＃ａ＿０の充電も完了している可能性が高い。送信後、マスタ＃０は、電力を消費したため、充電が完了するまで停止する。
【００８８】
新たなジョブを受信したスレーブ＃ａ＿０は、実施の形態２にかかるジョブの実行処理を実行する（ステップＳ１３０５）。実施の形態２にかかるジョブの実行処理は、新たなジョブが初めて実行される場合、マスタ＃０の充電が完了するまで待機する。ジョブの実行処理の中で、スレーブ＃ａ＿０は、新たなジョブを次のスレーブに転送する。転送後、スレーブ＃ａ＿０は、電力を消費したため、充電が完了するまで停止する。このように、次々新たなジョブが転送される。新たなジョブを受信したスレーブ＃ａ＿Ｎは、ジョブの実行処理を実行する（ステップＳ１３０６）。ジョブの実行処理の中で、スレーブ＃ａ＿Ｎは、新たなジョブをマスタ＃０に転送する。転送後、スレーブ＃ａ＿Ｎは、電力を消費したため、充電が完了するまで停止する。
【００８９】
新たなジョブを受信したマスタ＃０は、実施の形態２にかかるジョブの集約再割当処理を実行する（ステップＳ１３０７）。マスタ＃０は、新たなジョブをスレーブ＃ａ＿Ｎを含む複数のスレーブから受信する。マスタ＃０は、実施の形態２にかかるジョブの集約再割当処理において、複数のスレーブからジョブを受信するまで待機して、複数のスレーブから受信したジョブを収集する。次に、図１４を用いて、実施の形態２にかかるジョブに含まれる情報を定義したジョブ構造体について説明する。
【００９０】
図１４は、実施の形態２にかかるジョブ構造体の一例を示す説明図である。ジョブ構造体１４０１は、実施の形態２にかかるジョブに含まれる情報を定義したプログラムコードである。ジョブ構造体１４０１は、ジョブ構造体６０１に含まれる４つのメンバに加えて、システム内において該当のジョブが初めて実行されるか否かを示す初回フラグが格納されるｆｉｒｓｔｔｉｍｅメンバを含む。以下、説明の簡略化のため、ジョブのｆｉｒｓｔｔｉｍｅメンバに格納されたデータを、「ジョブの初回フラグ」と呼称する。実施の形態２にかかる初回フラグは、“１”が該当のジョブが初めて実行されることを示し、“０”が該当のジョブが自ノード以外の他のノードで実行されたことを示す。
【００９１】
次に、図１３に示した、ジョブの割当処理と、ジョブの実行処理と、ジョブの集約再割当処理と、のフローチャートについて、図１５〜図１７を用いて説明する。
【００９２】
図１５は、実施の形態２にかかるジョブの割当処理手順の一例を示すフローチャートである。実施の形態２にかかるジョブの割当処理は、複数のスレーブにジョブを割り当てる処理である。マスタ＃０は、ジョブ構造体１４０１に従って、ジョブの種類が“総和計算”である総和計算ジョブを生成する（ステップＳ１５０１）。次に、マスタ＃０は、生成したジョブの初回フラグを“１”に設定する（ステップＳ１５０２）。続けて、マスタ＃０は、生成したジョブを複数のスレーブに送信する（ステップＳ１５０３）。ステップＳ１５０３の処理終了後、マスタ＃０は、実施の形態２にかかるジョブの割当処理を終了する。実施の形態２にかかるジョブの割当処理を実行することにより、マスタ＃０は、複数のスレーブにジョブを割り当てることができる。
【００９３】
図１６は、実施の形態２にかかるジョブの実行処理手順の一例を示すフローチャートである。実施の形態２にかかるジョブの実行処理は、割り当てられたジョブを実行する処理である。実施の形態２にかかるジョブの実行処理は、各スレーブが実行する。図１６の説明では、複数のスレーブのうちのいずれかのスレーブがジョブの実行処理を実行する場合について説明する。
【００９４】
いずれかのスレーブがジョブの実行処理を実行する契機は、次の３つの条件のいずれかを満たす時である。１つ目の条件は、図１６中の結合子Ｄが示す、いずれかのスレーブがマスタ＃０の次のノードであり、図１５に示したステップＳ１５０３の処理が実行された場合である。２つ目の条件は、図１６中の結合子Ｅが示す、いずれかのスレーブが他のスレーブの次のノードであり、他のスレーブによりジョブの実行処理が実行されて、図１６に示すステップＳ１６１３の処理が実行された場合である。３つ目の条件は、図１６中の結合子Ｆが示す、いずれかのスレーブがマスタ＃０の次のノードであり、図１７に示すステップＳ１７０８の処理が実行された場合である。
【００９５】
また、実施の形態２にかかるジョブの実行処理のステップＳ１６０１と、ステップＳ１６０５〜ステップＳ１６１３は、図８に示したステップＳ８０１〜ステップＳ８１０と同一の処理なので、説明を省略する。
【００９６】
ステップＳ１６０１の処理終了後、いずれかのスレーブは、ジョブの初回フラグが“１”か否かを判断する（ステップＳ１６０２）。ジョブの初回フラグが“１”である場合（ステップＳ１６０２：Ｙｅｓ）、いずれかのスレーブは、ジョブの初回フラグを“０”に設定する（ステップＳ１６０３）。次に、いずれかのスレーブは、所定時間が経過するまで待機する（ステップＳ１６０４）。また、いずれかのスレーブは、待機中に、ステップＳ１６１２の処理まで実行しておいてもよい。
【００９７】
ステップＳ１６０４の処理終了後、またはジョブの初回フラグが“０”である場合（ステップＳ１６０２：Ｎｏ）、いずれかのスレーブは、ステップＳ１６０５の処理に移行する。実施の形態２にかかるジョブの実行処理を実行することにより、スレーブは、割り当てられたジョブを実行することができるとともに、マスタ＃０の充電が十分となるまで待機するために、マスタ＃０が動作中にジョブを送信することができる。
【００９８】
図１７は、実施の形態２にかかるジョブの集約再割当処理手順の一例を示すフローチャートである。実施の形態２にかかるジョブの集約再割当処理は、複数のスレーブからジョブを受信するまで待機して、複数のスレーブから受信したジョブを収集し、ジョブの再割当を行う場合、新たなジョブを生成して、複数のスレーブに新たなジョブを割り当てる処理である。また、実施の形態２にかかるジョブの集約再割当処理が実行される契機は、各スレーブのうちの次のノードがマスタ＃０となるスレーブによって、ステップＳ１６１３の処理が実行された場合である。
【００９９】
また、実施の形態２にかかるジョブの集約再割当処理のステップＳ１７０４〜ステップＳ１７０６、ステップＳ１７０８は、図９に示したステップＳ９０３〜ステップＳ９０６と同一の処理なので、説明を省略する。
【０１００】
マスタ＃０は、ジョブを受信する（ステップＳ１７０１）。次に、マスタ＃０は、初めてジョブを受信してから最大受信待ち時間が経過したか否かを判断する（ステップＳ１７０２）。初めてジョブを受信してから最大受信待ち時間が経過していない場合（ステップＳ１７０２：Ｎｏ）、マスタ＃０は、ステップＳ１７０１の処理に移行する。
【０１０１】
初めてジョブを受信してから最大受信待ち時間が経過した場合（ステップＳ１７０２：Ｙｅｓ）、マスタ＃０は、ジョブの種類を確認する（ステップＳ１７０３）。ジョブの種類が総和計算ジョブである場合（ステップＳ１７０３：総和計算ジョブ）、マスタ＃０は、ステップＳ１７０４の処理に移行する。
【０１０２】
そして、ステップＳ１７０６の処理終了後、マスタ＃０は、生成したジョブの初回フラグを“１”に設定する（ステップＳ１７０７）。次に、マスタ＃０は、ステップＳ１７０８の処理に移行する。
【０１０３】
ジョブの種類が分散計算ジョブである場合（ステップＳ１７０３：分散計算ジョブ）、マスタ＃０は、受信したジョブのデータおよびホップ数から、標本分散を算出する（ステップＳ１７０９）。算出した標本分散の値は、不揮発メモリ３０４に格納される。ステップＳ１７０９の処理終了後、マスタ＃０は、実施の形態２にかかるジョブの集約再割当処理を終了する。実施の形態２にかかるジョブの集約再割当処理を実行することにより、システム１１００は、分散して実行されたジョブの集約結果を得ることができる。
【０１０４】
以上説明したように、システム１１００によれば、複数のノードが環状の通信経路を形成する場合、マスタ＃０の間のいずれかのスレーブが所定時間待機することにより、マスタ＃０が動作中である時に、処理の結果を送信することができる。
【０１０５】
なお、本実施の形態で説明した分散処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本分散処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本分散処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１０６】
＃０、＃１  マスタ
＃ａ＿０〜＃ａ＿Ｎ、＃ｂ＿０〜＃ｂ＿Ｎ、＃ｃ＿０〜＃ｃ＿Ｎ、＃ｄ＿０〜＃ｄ＿Ｎ、＃ｅ＿０〜＃ｅ＿Ｎ  スレーブ
１００、１１００  システム
４０１  充電部
４１１、１２０１  受信部
４１２、１２０２  実行部
４１３、１２０３  判定部
４１４、１２０４  送信部
【図１】
2015008367.tif 000003
【図２】
2015008367.tif 000004
【図３】
2015008367.tif 000005
【図４】
2015008367.tif 000006
【図５】
2015008367.tif 000007
【図６】
2015008367.tif 000008
【図７】
2015008367.tif 000009
【図８】
2015008367.tif 000010
【図９】
2015008367.tif 000011
【図１０】
2015008367.tif 000012
【図１１】
2015008367.tif 000013
【図１２】
2015008367.tif 000014
【図１３】
2015008367.tif 000015
【図１４】
2015008367.tif 000016
【図１５】
2015008367.tif 000017
【図１６】
2015008367.tif 000018
【図１７】
2015008367.tif 000019
【手続補正書】
【提出日】平成28年7月11日(2016.7.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理方法において、
前記複数の通信装置のうちの特定の通信装置が、
前記複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、前記特定の通信装置に直接通信可能な通信装置から、前記通信装置によって実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、所定の処理を実行し、
前記第１の処理の結果を受信してから、前記複数の通信装置の各々の電力残量が無くなってから動作可能となる電力を充電するまでにかかる所定時間が経過したか否かを判定し、
前記所定時間が経過したと判定した場合、前記所定の処理の結果を前記通信装置に送信する、
処理を実行することを特徴とする分散処理方法。
【請求項２】
前記特定の通信装置が、
前記所定時間が経過したと判定する前に、前記複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、前記特定の通信装置に直接通信可能な前記通信装置とは異なる他の通信装置から、前記他の通信装置によって実行された第２の処理の結果を受信した場合、前記第１の処理の結果と前記第２の処理の結果とに基づいて、前記所定の処理を実行する、処理を実行し、
前記判定する処理は、
前記他の通信装置から前記第２の処理の結果を受信してから前記所定時間が経過したか否かを判定し、
前記送信する処理は、
前記所定時間が経過したと判定した場合、前記所定の処理の結果を前記通信装置と前記他の通信装置とに送信することを特徴とする請求項１に記載の分散処理方法。
【請求項３】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理方法において、
自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部の電力を用いて動作する前記複数の通信装置のうちの特定の通信装置を基点として前記複数の通信装置により形成される環状の通信経路における前記特定の通信装置とは異なる他の通信装置が、
前記環状の通信経路における前記他の通信装置と直接通信可能な第１の通信装置から、前記第１の通信装置により実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、第２の処理を実行し、
前記第１の処理の結果を受信してから、前記複数の通信装置の各々の電力残量が無くなってから動作可能となる電力を充電するまでにかかる所定時間が経過したか否かを判定し、
前記所定時間が経過したと判定した場合、前記第２の処理の結果を前記環状の通信経路における前記他の通信装置と直接通信可能な第２の通信装置に送信する、
処理を実行することを特徴とする分散処理方法。
【請求項４】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムにおいて、
前記複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、前記複数の通信装置のうちの特定の通信装置に直接通信可能な通信装置から、前記通信装置によって実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、所定の処理を実行する実行部と、
前記第１の処理の結果を受信してから、前記複数の通信装置の各々の電力残量が無くなってから動作可能となる電力を充電するまでにかかる所定時間が経過したか否かを判定する判定部と、
前記判定部によって前記所定時間が経過したと判定された場合、前記実行部によって実行された前記所定の処理の結果を前記通信装置に送信する送信部と、を有する前記特定の通信装置を、
含むことを特徴とするシステム。
【請求項５】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムにおいて、
自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部の電力を用いて動作する前記複数の通信装置のうちの特定の通信装置を基点として前記複数の通信装置により形成される環状の通信経路における前記特定の通信装置とは異なる他の通信装置と直接通信可能な第１の通信装置から、前記第１の通信装置により実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、第２の処理を実行する実行部と、
前記第１の処理の結果を受信してから、前記複数の通信装置の各々の電力残量が無くなってから動作可能となる電力を充電するまでにかかる所定時間が経過したか否かを判定する判定部と、
前記判定部によって前記所定時間が経過したと判定された場合、前記実行部によって実行された前記第２の処理の結果を前記環状の通信経路における前記他の通信装置と直接通信可能な第２の通信装置に送信する送信部と、を有する他の通信装置を、
含むことを特徴とするシステム。
【請求項６】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理プログラムにおいて、
前記複数の通信装置のうちの特定の通信装置に、
前記複数の通信装置のうちの、自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部に充電された電力を用いて動作する、前記特定の通信装置に直接通信可能な通信装置から、前記通信装置によって実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、所定の処理を実行し、
前記第１の処理の結果を受信してから、前記複数の通信装置の各々の電力残量が無くなってから動作可能となる電力を充電するまでにかかる所定時間が経過したか否かを判定し、
前記所定時間が経過したと判定した場合、前記所定の処理の結果を前記通信装置に送信する、
処理を実行させることを特徴とする分散処理プログラム。
【請求項７】
複数の通信装置の各々がマルチホップ通信によりデータを送受信するシステムの分散処理プログラムにおいて、
自装置が設置された環境に応じて得られるエネルギーを用いて発電される電力を充電する充電部の電力を用いて動作する前記複数の通信装置のうちの特定の通信装置を基点として前記複数の通信装置により形成される環状の通信経路における前記特定の通信装置とは異なる他の通信装置に、
前記環状の通信経路における前記他の通信装置と直接通信可能な第１の通信装置から、前記第１の通信装置により実行された第１の処理の結果を受信した場合、前記第１の処理の結果に基づいて、第２の処理を実行し、
前記第１の処理の結果を受信してから、前記複数の通信装置の各々の電力残量が無くなってから動作可能となる電力を充電するまでにかかる所定時間が経過したか否かを判定し、
前記所定時間が経過したと判定した場合、前記第２の処理の結果を前記環状の通信経路における前記他の通信装置と直接通信可能な第２の通信装置に送信する、
処理を実行させることを特徴とする分散処理プログラム。
【国際調査報告】
2015008367.tif 000020
2015008367.tif 000021