(57)【特許請求の範囲】
【請求項１】
タスクを計算ノードに配布する複数のヘッドノードと配布されたタスクを実行する複数の前記計算ノードとを有する分散処理システムであって、
前記計算ノードは、
前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記予約要求を予約要求記憶手段に記録する予約管理手段と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手段と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手段とを有し、
前記予約選択手段は、前記タスク実行手段によるタスクの処理の終了に応じ、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する分散処理システム。
【請求項２】
前記予約要求は、前記ヘッドノードに対する前記計算ノードの割当数の相対比又は該相対比の逆数を含み、
前記予約選択手段は、前記予約要求ごとに、当該予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数と前記相対比の逆数との積を算出し、該積が最小の前記予約要求を選択する請求項１記載の分散処理システム。
【請求項３】
前記計算ノードは、計算ノード記憶手段に前記計算ノードの識別情報を記録する登録手段を有し、
前記ヘッドノードは、前記計算ノード記憶手段に記録されている前記識別情報に係る前記計算ノードに前記予約要求を送信する請求項１又は２記載の分散処理システム。
【請求項４】
タスクを計算ノードに配布する複数のヘッドノードと配布されたタスクを実行する複数の前記計算ノードとを有する分散処理システムが実行する分散処理方法であって、
前記計算ノードは、
前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記予約要求を予約要求記憶手段に記録する予約管理手順と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手順と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手順とを実行し、
前記予約選択手順は、前記タスク実行手順におけるタスクの処理の終了に応じ、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する分散処理方法。
【請求項５】
ヘッドノードより配布されたタスクを実行する計算ノードに、
前記ヘッドノードより複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記予約要求を予約要求記憶手段に記録する予約管理手順と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手順と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手順とを実行させ、
前記予約選択手順は、前記タスク実行手順におけるタスクの処理の終了に応じ、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信するプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理システム、分散処理方法、及びプログラムに関し、特に複数の計算ノードにタスクを並列処理させる分散処理システム、分散処理方法、及びプログラムに関する。
【背景技術】
【０００２】
従来、複数のヘッドノードに投入されたタスクをグリッド化した複数の計算ノード上で実行する分散処理方式は、処理の高速化や信頼性の向上に大きな効果があることが知られている。斯かる分散処理方式において、共有化された計算ノード群内の各計算ノードにタスクを割り当てるための管理方法としては、スケジューラや資源管理装置のような管理ノードにより集中管理する方式（以下、「集中管理方式」という。）が知られている（例えば、特許文献１）。
【０００３】
また、集中管理する管理ノードを必要としない管理方式として、計算ノード群内の計算ノード同士が相互に通信を行い、取得したパラメータを使用して評価関数により実行中のタスク処理を中止し他のタスクに切り替える方式（以下、「計算ノード交換方式」という。）も知られている（例えば、特許文献２）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−３０２７４８号公報
【特許文献２】特開平７−１１４５２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、集中管理方式は、管理ノードに障害が発生すると全てのタスクの実行が不可能となってしまうという問題がある。特許文献１では、斯かる問題点を回避するためにスケジューラの多重化と、資源管理装置及び配下の計算ノードの組である「ドメイン」の多重化とを行うことで障害の波及範囲を限定的に抑えることを可能にしている。しかし、スケジューラに障害が発生した場合、当該スケジューラ内で既にスケジューリング済みのタスクが実行不可能となる。また、資源管理装置に障害が発生した場合、資源管理装置配下の計算ノードの全てが利用不可能となる。したがって、根本的な解決策には至っていない。
【０００６】
一方、計算ノード交換方式では、各計算ノードはフォールト発生状況やその時点での処理結果等大量のデータを互いにやり取りする必要があり、ネットワークに大きな負担がかかるという問題がある。
【０００７】
本発明は、上記の点に鑑みてなされたものであって、分散処理のためのシステム構成を簡素化することのできる分散処理システム、分散処理方法、及びプログラムの提供を目的とする。
【課題を解決するための手段】
【０００８】
そこで上記課題を解決するため、タスクを計算ノードに配布する複数のヘッドノードと配布されたタスクを実行する複数の前記計算ノードとを有する分散処理システムであって、前記計算ノードは、前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記利用予約を予約要求記憶手段に記録する予約管理手段と、前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手段と、前記配布要求に応じて返信されるタスクを処理するタスク実行手段とを有し、前記予約選択手段は、前記タスク実行手段によるタスクの処理の終了に応じ、前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する。
【発明の効果】
【０００９】
開示された技術によれば、分散処理のためのシステム構成を簡素化することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施の形態における分散処理システムの構成例を示す図である。
【図２】本発明の実施の形態における計算ノードのハードウェア構成例を示す図である。
【図３】本実施の形態の分散処理システムにおける処理手順の概要を説明するための図である。
【図４】計算ノード記憶装置における計算ノード管理テーブルの構成例を示す図である。
【図５】本実施の形態のヘッドノードの状態遷移の一例を示す図である。
【図６】ヘッドノードにおける開始処理の処理手順を説明するためのフローチャートである。
【図７】分割タスク管理テーブルの構成例を示す図である。
【図８】予約要求の構成例を示す図である。
【図９】分割タスクの配布要求の受信に応じて実行される処理手順を説明するためのフローチャートである。
【図１０】分割タスクの配布データの構成例を示す図である。
【図１１】分割タスクの処理結果の受信に応じて実行される処理手順を説明するためのフローチャートである。
【図１２】分割タスクの応答データの構成例を示す図である。
【図１３】処理中状態における計算ノード監視部による処理手順を説明するためのフローチャートである。
【図１４】本実施の形態の計算ノードの状態遷移の一例を示す図である。
【図１５】予約選択部による処理手順を説明するためのフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態における分散処理システムの構成例を示す図である。同図に示される分散処理システム１において、一台以上のヘッドノード２０（ヘッドノード群）と、一台以上の計算ノード１０（計算ノード群）と、計算ノード記憶装置３０とは、ＬＡＮ（Local Area Network）等のネットワーク４０（有線又は無線の別は問わない。）を介して通信可能に接続されている。
【００１２】
ヘッドノード２０は、タスクの投入を受け付け、当該タスクを計算ノード１０に配布（配信する）ノードである。計算ノード１０は、ヘッドノード２０より配布されたタスクを実行するノードである。計算ノード記憶装置３０は、ネットワーク４０に接続されている計算ノード１０の一覧を記憶する記憶装置である。計算ノード記憶装置３０は、単なるストレージであってもよいし、ＨＤＤ（Hard Disk Drive）等の記憶装置を有したコンピュータであってもよい。
【００１３】
なお、本実施の形態において、ノードとは、一台のコンピュータであってもよいし、ソフトウェアによって実現される一つの処理手段であってもよい。後者の場合、一台のコンピュータ内に複数のノード（ヘッドノード２０又は計算ノード１０）が実現されうる。以下においては、説明が煩雑となるのを避けるため、ネットワーク４０上における一台のコンピュータをノードという。
【００１４】
また、タスクとは、計算ノード１０によって処理の対象とされるデータをいう。すなわち、タスクを処理するロジックは、計算ノード１０に予め実装されている。但し、計算ノード１０の処理内容を制御するためのパラメータ（設定情報等）がタスクに含まれていてもよい。
【００１５】
同図において、各ヘッドノード２０は、計算ノード監視部２１、予約要求部２２、及び分割タスク管理部２３等を有する。これら各部は、ヘッドノード２０にインストールされたプログラムがヘッドノード２０のＣＰＵに実行させる処理によって実現される。
【００１６】
計算ノード監視部２１は、計算ノード記憶装置３０に登録されている計算ノード１０の一覧情報を周期的（定期的）に取得する。計算ノード監視部２１は、周期的に一覧情報を取得することにより、ネットワーク４０における新たな計算ノード１０の追加等を検出する。
【００１７】
予約要求部２２は、計算ノード記憶装置３０に登録されている一覧情報に基づいて、利用可能な全ての計算ノード１０に対して利用予約の要求（予約要求）を送信する。予約要求の契機は、例えば、投入されたタスクの処理開始時期の到来、又は計算ノード監視部２１による、新たな計算ノード１０の検出等である。タスクの処理開始時期は、タスクの投入時であってもよいし、予め設定された時刻であってもよい。予約要求部２２は、また、ヘッドノード２０に投入されたタスクの完了に応じ、予約要求を送信した各計算ノード１０に予約のキャンセル要求を送信する。
【００１８】
分割タスク管理部２３は、投入されたタスクを複数に分割する。分割された１つのタスク（サブタスク）を分割タスクという。タスクの分割方法は、分割対象となるタスク（データ）に依存する。分割タスク管理部２３は、予約要求を受信したいずれかの計算ノード１０からのタスクの配布（配信）要求に応じ、分割タスクを配布する。一回の配布要求に対して一つの分割タスクが配布される。分割タスク管理部２３は、計算ノード１０からの分割タスクの配布要求の受信又は分割タスクの処理結果の受信等に基づいてヘッドノード２０が利用中の計算ノード１０の数（以下、「計算ノード確保数」という。）を更新する。計算ノード確保数は、例えば、ヘッドノード２０ごとに、当該ヘッドノード２０のメモリ装置を用いて記憶される。分割タスク管理部２３は、予約要求を受信した計算ノード１０からの問い合わせに応じ、計算ノード確保数を返信する。
【００１９】
各計算ノード１０は、登録部１１、予約管理部１２、予約選択部１３、及び分割タスク実行部１４等を有する。これら各部は、計算ノード１０にインストールされたプログラムが計算ノード１０のＣＰＵに実行させる処理によって実現される。
【００２０】
登録部１１は、計算ノード１０の新規設置時等に当該計算ノード１０の存在を示す情報（レコード）を計算ノード記憶装置３０に登録する。当該レコードには計算ノード１０の識別情報や登録時刻等が含まれる。登録部１１は、また、周期的（定期的）に、当該計算ノード１０に対するレコードの登録時刻を更新する。周期的に登録時刻を更新するのは、登録時刻に基づいて計算ノード１０が起動しているか否かの推測を可能とするためである。
【００２１】
予約管理部１２は、ヘッドノード２０より送信される予約要求を受信し、管理する。複数のヘッドノード２０から同時期に予約要求が受信される場合は、複数の予約要求が管理される。予約管理部１２は、また、ヘッドノード２０より予約のキャンセル要求を受信すると、当該ヘッドノード２０より受信した予約要求を管理対象から除外する。
【００２２】
予約選択部１３は、予約管理部１２によって管理されている予約要求のいずれかを所定の選択規則に基づいて選択する。予約選択部１３は、選択された予約要求の送信元のヘッドノード２０に分割タスクの配布を要求し、当該ヘッドノード２０より分割タスクを受信する。
【００２３】
分割タスク実行部１４は、予約選択部１３によって受信された分割タスクを処理する。すなわち、分割タスク実行部１４は、タスクを処理するためのロジックが実装された部分である。したがって、分割タスク実行部１４は、タスクの種類に応じて複数種類存在しうる。
【００２４】
図２は、本発明の実施の形態における計算ノードのハードウェア構成例を示す図である。図２の計算ノード１０は、それぞれバスBで相互に接続されているドライブ装置１００と、補助記憶装置１０２と、メモリ装置１０３と、ＣＰＵ１０４と、インタフェース装置１０５とを有する。
【００２５】
計算ノード１０での処理を実現するプログラムは、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００２６】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従って計算ノード１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００２７】
なお、ヘッドノード２０についても、図２と同様のハードウェアを有していればよい。但し、ヘッドノード２０は、タスクの投入を受け付けるためのキーボード及びマウス等の入力装置や、タスクの処理結果を出力するための表示装置を備えていてもよい。
【００２８】
以下、分散処理システム１の処理手順について説明する。まず、分散処理システム１の全体の処理概要について説明する。図３は、本実施の形態の分散処理システムにおける処理手順の概要を説明するための図である。同図では、説明の便宜上、ヘッドノード２０及び計算ノード１０は一つずつ示されている。
【００２９】
計算ノード１０の登録部１１は、計算ノード１０の設置時に当該計算ノード１０の存在を示すレコードを計算ノード記憶装置３０に登録し、その後、周期的に当該レコードの登録時刻を更新する（Ｓ１１）。
【００３０】
図４は、計算ノード記憶装置における計算ノード管理テーブルの構成例を示す図である。同図において、一つのレコードは、一つの計算ノード１０に対応する。各レコードは、計算ノードＩＤ、アドレス、及び登録時刻等のデータを含む。計算ノードＩＤは、計算ノード１０の識別子である。アドレスは、通信において計算ノード１０を識別するための情報である。したがって、アドレスの具体的な形式は、利用される通信プロトコルに応じて異なりうる。例えば、ＴＣＰ／ＩＰの場合は、ＩＰアドレスが採用される。また、ＨＴＴＰ（HyperText Transfer Protocol）の場合は、ＵＲＬ（Uniform Resource Locator）が採用される。登録時刻は、レコードが最後に更新された時刻である。
【００３１】
ステップＳ１１が複数の計算ノード１０によって実行されることにより、計算ノード記憶装置３０には、複数のレコードが登録される。
【００３２】
一方、ヘッドノード２０の計算ノード監視部２１は、周期的に計算ノード記憶装置３０を監視する（Ｓ１２）。具体的には、計算ノード監視部２１は、計算ノード記憶装置３０に登録されているレコードの一覧（計算ノード１０の一覧情報）を周期的に取得し、ヘッドノード２０のメモリ装置に記録する。
【００３３】
タスクの開始時期が到来すると、予約要求部２２は、計算ノード監視部２１によって取得されたレコードの一覧に基づいて利用可能であると判定された全ての計算ノード１０に対して予約要求を送信する（Ｓ１３）。各計算ノード１０の予約管理部１２は、受信された予約要求をメモリ装置１０３に記録しておく。予約要求には、予約要求元のヘッドノード２０のアドレス及び当該ヘッドノード２０に投入されたタスクの優先度が含まれている。なお、予約要求には、タスクの実体は含まれない。予約要求は、タスクを実行させたいヘッドノード２０の存在を通知するための情報だからである。
【００３４】
計算ノード１０の予約選択部１３は、予約要求が受信されると、メモリ装置１０３に記録されている予約要求ごとに、当該予約要求に係るヘッドノード２０に対して計算ノード確保数を問い合わせる（Ｓ１４）。問い合わせを受けた各ヘッドノード２０の分割タスク管理部２３は、当該ヘッドノード２０の現在の計算ノード確保数を返信する（Ｓ１５）。
【００３５】
続いて、予約選択部１３は、予約要求ごと（ヘッドノード２０ごと）の計算ノード確保数と優先度とに基づいて、予約要求を１つ選択する。予約選択部１３は、選択された予約要求に係るヘッドノード２０に対して分割タスクの配布要求を送信する（Ｓ１６）。ヘッドノード２０の分割タスク管理部２３は、未配布の分割タスクを優先的に選択し、選択された分割タスクを要求元に返信する（Ｓ１７）。予約選択部１３は、返信された分割タスクの処理を分割タスク実行部１４に要求する（Ｓ１８）。分割タスク実行部１４は、当該分割タスクの処理が終了すると、当該分割タスクの処理結果を予約選択部１３に通知する。予約選択部１３は、当該処理結果を、当該分割タスクの配布元のヘッドノード２０の分割タスク管理部２３に通知する（Ｓ２０）。
【００３６】
ステップＳ１５以降が繰り返されることにより、ヘッドノード２０が配布した全ての分割タスクの処理が終了すると、当該ヘッドノード２０の分割タスク管理部２３は、分割タスクごとの処理結果を統合したものを、分割前のタスクに対する処理結果として出力する。
【００３７】
続いて、ヘッドノード２０及び計算ノード１０のそれぞれによる処理内容の詳細について順番に説明する。まず、ヘッドノード２０について説明する。
【００３８】
図５は、本実施の形態のヘッドノードの状態遷移の一例を示す図である。同図に示されるように、各ヘッドノード２０は、待機状態、開始処理状態、処理中状態、及び終了処理状態の４つの状態を有する。
【００３９】
待機状態は、タスクの処理を開始していない状態である。具体的には、タスクが投入されていない状態、又はタスクは投入されていても開始時期が到来していない状態である。待機状態では、計算ノード監視部２１以外は動作しない。図３のステップＳ１２において説明したように、計算ノード監視部２１は周期的に計算ノード記憶装置３０よりレコードを読み込み、ヘッドノード２０のメモリ装置に記録する。タスクの開始時期が到来するとヘッドノード２０は開始処理状態へ遷移する。
【００４０】
開始処理状態への遷移に応じ、開始処理が１回実行される。図６は、ヘッドノードにおける開始処理の処理手順を説明するためのフローチャートである。
【００４１】
ステップＳ１０１において、分割タスク管理部２３は、処理の開始対象とされたタスクを分割し、分割タスクを生成する。また、分割タスク管理部２３は、分割タスクを管理するための分割タスク管理テーブル２３０を、ヘッドノード２０のメモリ装置に生成する。
【００４２】
図７は、分割タスク管理テーブルの構成例を示す図である。同図において、分割タスク管理テーブル２３０は、分割タスクごとに、分割タスクＩＤ、配布状態、及び処理状態を記憶する。
【００４３】
分割タスクＩＤは、分割タスク管理部２３によって分割タスクごとに割り当てられる識別子である。配布状態は、分割タスクが配布済みであるか否かを示す情報であり、「配布済」又は「未配布」の値をとる。処理状態は、配布済みの分割タスクの処理結果が受信されたか否かを示す情報であり、「結果受信済」又は「結果未受信」の値をとる。
【００４４】
分割タスクの生成に応じ、計算ノード監視部２１は、計算ノード記憶装置３０に登録されている全レコードを取得する（Ｓ１０２）。なお、このタイミングにおいて通信障害又は計算ノード記憶装置３０の障害等によってレコードの取得に失敗した場合、計算ノード監視部２１は、周期的な取得において最後に取得されたレコード群を以降のステップにおいて利用する。したがって、斯かる障害が発生した場合であっても、タスクの処理は遂行可能である。
【００４５】
続いて、計算ノード監視部２１は、取得された各レコードについて、登録時刻が現時点から所定の時間内であるか否かを判定する（Ｓ１０３）。すなわち、所定の時間内に更新されたレコードが抽出される。所定の時間内に更新されたレコードは、現時点において起動されている（利用可能である）可能性の高い計算ノード１０に対応するレコードである。
【００４６】
登録時刻が所定の時間内であるレコード（以下、「カレントレコード」という。）が検出されると、予約要求部２２は、カレントレコードに登録されているアドレス宛（すなわち、カレントレコードに対応する計算ノード１０宛）に、予約要求を送信する（Ｓ１０４）。
【００４７】
図８は、予約要求の構成例を示す図である。同図に示されるように、予約要求は、ヘッドノードアドレス及び優先度係数を含む。ヘッドノードアドレスは、通信においてヘッドノード２０を識別するための情報である。優先度係数は、タスクの優先度を示す係数である。優先度係数の値が小さい程、優先度は高い。優先度係数は、例えば、タスクの投入時に指定される。なお、予約要求は、ヘッドノード２０に投入されたタスク単位で送信されるものである。すなわち、予約要求は、分割タスク単位で送信されるものではない。したがって、予約要求に含まれている優先度係数は、当該予約要求に係るタスクより分割された全ての分割タスクに対して共用される。
【００４８】
予約要求の送信に続いて、計算ノード監視部２１は、予約済み計算ノード一覧にカレントレコードを登録する（Ｓ１０５）。予約済み計算ノード一覧は、ヘッドノード２０のメモリ装置において、予約要求を送信した計算ノード１０の一覧を記憶するための記憶領域（リスト又は配列等）である。したがって、図６の開始処理の終了時には、予約要求の送信先とされた全ての計算ノード１０のレコードが予約済みレコード一覧に記録された状態となる。
【００４９】
開始処理が完了すると、ヘッドノード２０は処理中状態に遷移する。処理中状態において、ヘッドノード２０の分割タスク管理部２３は、予約要求を送信した計算ノード１０からの計算ノード確保数の問い合わせの受信、分割タスクの配布要求の受信、又は分割タスクの処理結果の受信を待機する。
【００５０】
計算ノード確保数の問い合わせが受信されると、分割タスク管理部２３は、当該ヘッドノード２０のメモリ装置に記憶されている計算ノード確保数を、問い合わせ元の計算ノード１０に返信する。
【００５１】
分割タスクの配布要求が受信されると、分割タスク管理部２３は、図９に示される処理を実行する。
【００５２】
図９は、分割タスクの配布要求の受信に応じて実行される処理手順を説明するためのフローチャートである。
【００５３】
分割タスクの配布要求の受信に応じ、分割タスク管理部２３は、メモリ装置に記憶されている計算ノード確保数に１を加算する（Ｓ２０１）。分割タスクの配布によって、当該ヘッドノード２０が利用する（確保する）計算ノード１０が１つ増加するからである。続いて、分割タスク管理部２３は、分割タスク管理テーブル２３０を参照して、配布状態が「未配布」である分割タスクの有無を判定する（Ｓ２０２）。配布状態が「未配布」である分割タスクが存在する場合（Ｓ２０３でＹｅｓ）、分割タスク管理部２３は、該当する分割タスクのうちの１つの分割タスクの配布データを配布要求元の計算ノード１０に配布（送信）する（Ｓ２０４）。該当する分割タスクが複数有る場合は、所定の規則に基づいて配布対象とする分割タスクを決定すればよい。例えば、分割の前後関係において前の分割タスクから順に配布対象とすればよい。
【００５４】
図１０は、分割タスクの配布データの構成例を示す図である。同図において、配布データは、分割タスクＩＤと分割タスク（の実体）とを含む。なお、配布元のヘッドノード２０の識別情報は、計算ノード１０側において予約要求に基づいて判定可能であるため、本実施の形態では、配布データに含まれない。
【００５５】
続いて、分割タスク管理部２３は、配布対象とされた分割タスクの配布状態を、「配布済」とすることにより、分割タスク管理テーブル２３０を更新する（Ｓ２０５）。
【００５６】
一方、配布状態が「未配布」である分割タスクが無い場合（Ｓ２０３でＮｏ）、分割タスク管理部２３は、配布状態が「配布済」であり、かつ、処理状態が「結果未受信」である１つの分割タスクを配布要求元の計算ノード１０に配布する（Ｓ２０６）。
【００５７】
すなわち、分割タスクの配布要求が受信された場合、未配布の分割タスクが優先的に配布対象とされる。未配布の分割タスクが無いときは、配布済みの分割タスクが配布対象とされる。配布済みの分割タスクは、既に他の計算ノード１０において処理対象とされている分割タスクである。斯かる分割タスクを改めて他の計算ノード１０に配布するのは、当該他の計算ノード１０によって、より迅速に処理結果を得られる可能性が有るからである。なお、同一の分割タスクを複数回送信するのは全ての分割タスク送信済みで結果を受け取っていない分割タスクが存在する場合のみである。但し、未配布の分割タスクが無い場合は、分割タスクを配布しないようにしてもよい。この場合、分割タスクが配布されなかった計算ノード１０は、他のヘッドノード２０に対して分割タスクの配布を要求すればよい。
【００５８】
続いて、処理中状態において、分割タスクの処理結果が受信された場合について説明する。この場合、分割タスク管理部２３は、図１１に示される処理を実行する。
【００５９】
図１１は、分割タスクの処理結果の受信に応じて実行される処理手順を説明するためのフローチャートである。
【００６０】
分割タスクの処理結果を含む応答データの受信に応じ、分割タスク管理部２３は、メモリ装置に記憶されている計算ノード確保数から１を減算する（Ｓ３０１）。分割タスクの処理結果が受信されたということは、当該処理結果の送信元の計算ノード１０において、当該分割タスクの処理が終了したということである。したがって、当該計算ノード１０は、もはや当該ヘッドノード２０に利用されていないからである。
【００６１】
図１２は、分割タスクの応答データの構成例を示す図である。同図において、応答データは、分割タスクＩＤと処理結果とを含む。
【００６２】
続いて、分割タスク管理部２３は、応答データに含まれている分割タスクＩＤに対する処理状態を分割タスク管理テーブル２３０を参照して確認する（Ｓ３０２）。当該処理状態が「結果未受信」である場合（Ｓ３０３でＹｅｓ）、分割タスク管理部２３は、当該処理状態を「結果受信済」に更新する（Ｓ３０６）。また、分割タスク管理部２３は、応答データに含まれている処理結果を、当該応答データに含まれている分割タスクＩＤに関連付けてヘッドノード２０のメモリ装置に記録する。
【００６３】
一方、応答データに含まれている分割タスクＩＤに対する処理状態が「結果受信済」である場合（Ｓ３０３でＮｏ）、分割タスク管理部２３は、受信された応答データを破棄する（Ｓ３０５）。なお、ステップＳ３０５は、同一の分割タスクが複数の計算ノード１０に配布された場合に実行されうる。
【００６４】
処理中状態では、上述した、計算ノード確保数の応答、分割タスクの配布、及び処理結果の受信が繰り返し実行される。分割タスク管理部２３は、処理結果の受信に応じて図１１の処理が実行されるたびに、分割タスク管理テーブル２３０における全ての分割タスクの処理状態が「結果受信済」となったか否かを判定（確認）する。当該全ての分割タスクの処理状態が「結果受信済」となると、ヘッドノード２０は終了処理状態に遷移する。
【００６５】
一方、処理中状態では、計算ノード確保数の応答、分割タスクの配布、及び処理結果の受信とは非同期に、計算ノード監視部２１によって図１３に示される処理手順が周期的に実行される。
【００６６】
図１３は、処理中状態における計算ノード監視部による処理手順を説明するためのフローチャートである。
【００６７】
ステップＳ４０１において、計算ノード監視部２１は、計算ノード記憶装置３０に登録されている全レコードを取得する。続いて、計算ノード監視部２１は、取得された各レコードについて、予約済み計算ノード一覧に含まれているか否かを判定する（Ｓ４０２）。レコードの同一性は、計算ノードＩＤ又はアドレスのいずれか一方の一致によって判定されてもよいし、双方の一致によって判定されてもよい。少なくとも、登録時刻は同一性の判定に用いられない。
【００６８】
予約済み計算ノード一覧に含まれていないレコードの場合（Ｓ４０２でＮｏ）、計算ノード監視部２１は、当該レコードの登録時刻が現時点から所定の時間内であるか否かを判定する（Ｓ４０３）。当該レコードの登録時刻が、所定の時間内である場合（Ｓ４０３でＹｅｓ）、当該レコードに係る計算ノード１０は、予約要求の送信後に起動された（追加された）計算ノード１０であり、かつ、現時点において起動している計算ノード１０であると考えられる。そこで、予約要求部２２は、当該レコードに登録されているアドレス宛（すなわち、当該レコードに対応する計算ノード１０宛）に、予約要求を送信する（Ｓ４０４）。予約要求の送信に続いて、計算ノード監視部２１は、予約済み計算ノード一覧に当該レコードを登録する（Ｓ４０５）。
【００６９】
一方、予約済み計算ノード一覧に含まれているレコードの場合（Ｓ４０２でＹｅｓ）、計算ノード監視部２１は、当該レコードによって予約済み計算ノード一覧における同一レコードを更新する（Ｓ４０６）。この場合、予約済み計算ノード一覧における同一レコードの登録時刻が更新されうる。
【００７０】
図１３の処理によって、既に予約要求を行った後に新たな計算ノード１０が追加された場合であっても、当該計算ノード１０に分割タスクを実行させることが可能となる。
【００７１】
続いて、ヘッドノード２０の終了処理状態について説明する。終了処理状態への遷移に応じ、終了処理が１回実行される。終了処理において、予約要求部２２は、予約済み計算ノード一覧に含まれているレコード（図４と同一形式のレコード）に基づいて、予約要求を送信した全ての計算ノード１０に予約のキャンセル要求を送信する。具体的には、当該各レコードに含まれているアドレス宛に予約のキャンセル要求が送信される。予約のキャンセル要求には、当該ヘッドノード２０のアドレス（ヘッドノードアドレス）が含まれている。
【００７２】
また、終了処理において、分割タスク管理部２３は、分割タスクＩＤごとに保存されている処理結果を統合又は結合し、投入された１つのタスクに対する処理結果を生成する。終了処理が終了すると、ヘッドノード２０は、待機状態へ遷移する。
【００７３】
次に、計算ノード１０の詳細について説明する。図１４は、本実施の形態の計算ノードの状態遷移の一例を示す図である。同図に示されるように、各計算ノード１０は、待機状態、処理開始待ち状態、及び処理中状態の３つの状態を有する。
【００７４】
待機状態は、計算ノード１０の起動後、予約要求が一つも蓄積されていない状態である。計算ノード１０の予約管理部１２が、ヘッドノード２０からの予約要求を受信すると、当該計算ノード１０は、処理開始待ち状態へ遷移する。なお、予約管理部１２は、受信された予約要求（図８）をメモリ装置１０３に記録する。
【００７５】
処理開始待ち状態への遷移に応じ、計算ノード１０の予約選択部１３は、図１５に示される処理手順を１回実行する。図１５は、予約選択部による処理手順を説明するためのフローチャートである。
【００７６】
ステップＳ５０１において、予約選択部１３は、メモリ装置１０３に記録されている全ての予約要求を取得する。少なくとも１つの予約要求が取得された場合（Ｓ５０２でＹｅｓ）、予約選択部１３は、予約要求元のヘッドノード２０に計算ノード確保数の問い合わせを送信し、応答された計算ノード確保数を予約要求に関連付けてメモリ装置１０３に記録する（Ｓ５０３）。なお、ステップＳ５０３は、ステップＳ５０１において取得された各予約要求について実行される。また、予約要求元のヘッドノード２０は、予約要求に含まれているヘッドノードアドレスによって特定される。
【００７７】
続いて、予約選択部１３は、予約要求ごとに、当該予約要求に含まれている優先度係数と、予約要求元の計算ノード確保数とに基づいて確保度を算出する（Ｓ５０４）。
【００７８】
予約要求ｒの優先度係数をＰｒ、予約要求元の計算ノード確保数をＫｒとしたとき、予約要求ｒの確保度Ｓ（ｒ）は、以下の式（１）を用いて算出される。
Ｓ（ｒ）  ＝  Ｐｒ  ×  Ｋｒ  ・・・  （１）
【００７９】
例えば、ヘッドノード２０ａからの予約要求ｒａ（優先度係数０．５）と、ヘッドノード２０ｂからの予約要求ｒｂ（優先度係数１．０）とが有り、ヘッドノード２０ａの計算ノード確保数は３０であり、ヘッドノード２０ｂの計算ノード確保数は２０の場合、
予約要求ｒａに対する確保度Ｓ（Ａ）＝０．５×３０＝１５
予約要求ｒｂに対する確保度Ｓ（Ｂ）＝１．０×２０＝２０
となる。
【００８０】
続いて、予約選択部１３は、算出された確保度を比較することにより、予約要求を１つ選択する（Ｓ５０５）。具体的には、確保度が最小である予約要求が選択される。したがって、上記では予約要求ｒａが選択される。なお、最小の確保度が複数発生した場合、古い（先着の）予約要求に係るヘッドノード２０を優先させる等、所定の規則に基づいて、一つの予約要求を選択すればよい。
【００８１】
なお、上記より、確保度係数は、各ヘッドノード２０（タスク）に対して割り当てられる計算ノード１０数の相対比の逆数であることが分かる。この点については、後述において更に詳しく説明する。
【００８２】
続いて、予約選択部１３は、選択された予約要求に係るヘッドノード２０に対して分割タスクの配布要求を送信する（Ｓ５０６）。配布要求の送信先は、選択された予約要求に含まれているヘッドノードアドレスである。続いて、予約選択部１３は、配布要求先のヘッドノード２０より分割タスクの配布データ（図１０）を受信する（Ｓ５０７）。予約選択部１３は、受信された配布データを、選択された予約要求に関連付けてメモリ装置１０３に記録する。なお、配布データの受信に応じ、当該計算ノード１０は処理中状態へ遷移する。
【００８３】
一方、ステップＳ５０１において、予約要求が取得されなかった場合（Ｓ５０２でＹｅｓ）、当該計算ノード１０は、待機状態へ遷移する。
【００８４】
続いて、処理中状態について説明する。処理中状態へ遷移すると、予約選択部１３は、配布された（受信された）配布データに含まれている分割タスクを分割タスク実行部１４に入力する。分割タスク実行部１４は、入力された配布データに含まれている分割タスクを処理し、処理結果を予約選択部１３に出力する。予約選択部１３は、出力された処理結果に、配布データに含まれていた分割タスクＩＤを付与して応答データを生成する。予約選択部１３は、応答データを予約要求元のヘッドノード２０に送信する。予約要求元のヘッドノード２０は、配布データに関連付けられている予約要求のヘッドノードアドレスによって特定される。処理結果の送信後、当該計算ノード１０は、処理開始待ち状態に遷移する。
【００８５】
なお、処理開始待ち状態又は処理中状態においても、予約要求又は予約のキャンセル要求は受信されうる。予約要求が受信された場合の処理手順は上述した通りである。予約のキャンセル要求が受信された場合、予約管理部１２は、当該キャンセル要求に含まれているヘッドノードアドレスを有する予約要求をメモリ装置１０３より削除する。その結果、メモリ装置１０３に記録されている予約要求が０件となったら、当該計算ノード１０は待機状態へ遷移する。
【００８６】
一方、各計算ノード１０の登録部１１は、状態遷移とは非同期に（すなわち、いずれの状態においても）周期的に計算ノード記憶装置３０への当該計算ノード１０のレコードの登録処理を実行する。テーブル内に当該計算ノード１０のレコードが存在しない場合、新たにレコードが追加される。
【００８７】
要するに、各計算ノード１０は予約要求が存在する間は処理開始待ち状態と処理中状態との間の遷移を繰り返し、処理開始待ち状態中にヘッドノード２０の再選択を行うことで、処理対象を他のヘッドノード２０の分割タスクに切り替えることができる。計算ノード１０に記憶された予約要求は、ヘッドノード２０からキャンセル要求が受信されるまで消去されないため、全てのヘッドノード２０の全ての分割タスクの処理は完了することが保証される。
【００８８】
各計算ノード１０による予約要求の選択の際には、確保度の低い方が優先されることで、確保度が均衡する方向に各ヘッドノード２０の計算ノード確保数を推移させることができる。すなわち、各ヘッドノード２０の計算ノード確保数は、各ヘッドノード２０の確保度係数の逆数の比率に対する不均衡が是正される方向に推移する。
【００８９】
次に、上記において説明した処理手順に対して、具体例を当てはめて説明する。当該具体例において、分散処理システム１ａは、映像のトランスコードシステムに接続されたヘッドノード２０Ａと、算術演算システムに接続されたヘッドノード２０Ｂと、１００個の計算ノード１０Ｃ１〜Ｃ１００とを含むこととする。各計算ノード１０は、映像トランスコード処理を実行する分割タスク実行部１４ａと、算術演算システムに対する演算処理を行う分割タスク実行部１４ｂとを有する。
【００９０】
分散処理システム１ａにおいて、ヘッドノード２０Ａに、優先度係数１．０が指定された映像トランスコードのタスクＡ１が投入された場合、分散処理システム１ａは、以下のように動作する。
【００９１】
まず、ヘッドノード２０ＡはタスクＡ１を分割し、計算ノード１０Ｃ１〜Ｃ１００に対して予約要求Ｙａを送信する。なお、タスクＡ１の実体は映像データである。この場合、映像データのデータ形式に応じて予めヘッドノード２０Ａに設定されている分割単位を基準として、タスクＡ１の分割が行われる。分割単位は、データに含まれている所定の符号を区切りとしてもよいし、再生時間を区切りとしてもよい。
【００９２】
予約要求Ｙａを受信した計算ノード１０Ｃ１〜Ｃ１００はそれぞれ待機状態から処理開始待ち状態に遷移する。この時点において、計算ノード１０Ｃ１〜Ｃ１００には、それぞれ予約要求は１つしか存在しない。したがって、計算ノード１０Ｃ１〜Ｃ１００は、予約要求Ｙａを選択し、ヘッドノード２０Ａに分割タスクの配布要求を送信する。その結果、計算ノード１０Ｃ１〜Ｃ１００は、ヘッドノード２０Ａの分割タスクを受信し、当該分割タスクの処理を開始する。
【００９３】
この状態において、ヘッドノード２０Ｂに優先度係数０．５が指定された算術演算のタスクＢ１が投入されると、ヘッドノード２０ＢはタスクＢ１をヘッドノード２０Ｂに設定された分割単位を基準として分割する。続いて、ヘッドノード２０Ｂは、計算ノード１０Ｃ１〜Ｃ１００に対して予約要求Ｙｂを送信する。
【００９４】
その後、計算ノード１０Ｃｎ（１≦ｎ≦１００）が処理開始待ち状態に遷移すると、計算ノード１０Ｃｎは、予約要求Ｙａ又はＹｂのいずれか一方を次のように選択する。
【００９５】
まず、計算ノード１０Ｃｎは、予約要求Ｙａ又はＹｂの送信元であるヘッドノード２０Ａ及びノードＢのそれぞれから計算ノード確保数Ｋａ又はＫｂを取得する。この時点において、Ｋａ＝９９、Ｋｂ＝０である。Ｋａは、当初は１００であるが、計算ノード１０Ｃｎより処理結果が返信されているため、この時点ではＫａは、９９となっている。
【００９６】
続いて、計算ノード１０Ｃｎは、予約要求Ｙａに対する確保度Ｓ（ａ）と、予約要求Ｙｂに対する確保度Ｓ（ｂ）とを次のように算出する。
【００９７】
Ｓ（ａ）＝１．０×９９＝９９
Ｓ（ｂ）＝０．５×０＝０
【００９８】
ここで、Ｓ(ａ)＞Ｓ(ｂ)であるため、予約要求Ｙｂが選択される。したがって、計算ノード１０Ｃｎは、ノードＢより分割タスクの配布を受ける。
【００９９】
続いて、計算ノード１０Ｃｍ（１≦ｍ≦１００）が処理開始待ち状態に遷移すると、計算ノード１０Ｃｍは、予約要求Ｙａ又はＹｂのいずれか一方を次のように選択する。
【０１００】
まず、計算ノード１０Ｃｍは、予約要求Ｙａ又はＹｂの送信元であるヘッドノード２０Ａ及びノードＢのそれぞれから計算ノード確保数Ｋａ又はＫｂを取得する。この時点において、Ｋａ＝９８、Ｋｂ＝１である。
【０１０１】
続いて、計算ノード１０Ｃｍは、予約要求Ｙａに対する確保度Ｓ（ａ）と、予約要求Ｙｂに対する確保度Ｓ（ｂ）とを次のように算出する。
【０１０２】
Ｓ（ａ）＝１．０×９８＝９８
Ｓ（ｂ）＝０．５×１＝０．５
【０１０３】
ここで、Ｓ(ａ)＞Ｓ(ｂ)であるため、予約要求Ｙｂが選択される。したがって、計算ノード１０Ｃｍは、ノードＢより分割タスクの配布を受ける。
【０１０４】
以降、予約要求Ｙａ及びＹｂのそれぞれの確保度が均衡するまで、予約要求Ｙｂが各計算ノード１０において選択される。したがって、確保度が等しいときには古い予約要求を優先させるというルールを採用した場合、予約要求Ｙａが選択されるようになるのはＫａ＝３３、Ｋｂ＝６６となった時である。
【０１０５】
すなわち、この時、Ｓ(ａ)＝１×３３＝３３、Ｓ(ｂ)＝０．５×６６＝３３となる。Ｓ(ａ)＝Ｓ(ｂ)であるため、古い予約要求Ｙａに係るノードＡが選択される。
【０１０６】
このようにして、ヘッドノード２０Ａ及びＢが確保する計算ノード１０数は１：２の比率に収束する。この比率は、タスクＡ１、タスクＢ１のそれぞれの優先度係数の逆数の比に等しい。換言すれば、優先度係数は、各ヘッドノード２０（タスク）に対して割り当てる計算ノード１０数の相対比の逆数であるといえる。
【０１０７】
ここで、システム増強のため、新たな１００個の計算ノード１０Ｃ１０１〜Ｃ２００が追加された場合を考える。この場合、ヘッドノード２０Ａ及びＢは、処理中状態において、計算ノード１０Ｃ１０１〜Ｃ２００の存在を検知する。そこで、ヘッドノード２０Ａ及びＢは、算ノードＣ１０１〜Ｃ２００に対して予約要求Ｙａ又はＹｂを送信する（図１３：Ｓ４０４）。
【０１０８】
予約要求Ｙａ及びＹｂを受信した計算ノード１０Ｃ１０１〜Ｃ２００は、予約要求Ｙａ及びＹｂの確保度が均衡するように予約要求を選択する。その結果、最終的に、Ｋａ＝６７、Ｋｂ＝１３３前後に収束していく。
【０１０９】
また、分散処理システム１ａに更に映像トランスコードシステムに接続されたヘッドノード２０Ｄが追加されたとする。ヘッドノード２０Ｄに、優先度係数１．０が指定されたタスクＤ１が投入されると、タスクＡ１、Ｂ１、及びＤ１のそれぞれの優先度係数の逆数の比である１：２：１に応じて、各ヘッドノード２０の計算ノード確保数は、Ｋａ＝５０、Ｋｂ＝１００、Ｋｃ＝５０に収束していくことは上記より自明である。
【０１１０】
上述したように、本実施の形態によれば、各計算ノード１０がそれぞれ単独で自律的に自己管理を行うことが可能であるため、タスクの割り当てを管理するための管理装置は不要である。したがって、当該管理装置の障害によってタスクの実行が不可能となるといった事態の発生を適切に回避することができる。
【０１１１】
また、各計算ノード１０による相互通信は発生しない。したがって、通信負荷を軽減することができる。なお、計算ノード１０とヘッドノード２０との間において通信が行われるが、一般的な分散処理システムにおいては、計算ノード１０とヘッドノード２０との通信回数は、計算ノード１０間の相互通信の回数に比べて顕著に少ない。一般的な分散処理システムでは、計算ノード１０の数の方がヘッドノード２０の数より著しく多いからである。
【０１１２】
また、計算ノード１０は、１つの分割タスクの処理が終了するたびに予約要求の再選択を行うため、前回選択した予約要求に係る分割タスクが完了しなくても他の予約要求に係る分割タスクを処理することができる。すなわち、複数のタスクに対して並列的に資源を割り当てることができる。したがって、先に開始されているタスクの終了を待たずに、他のヘッドノード２０のタスクの処理を開始させることができる。
【０１１３】
また、計算ノード１０では、各予約要求内の優先度係数と、各予約要求元の計算ノード確保数とに基づいて確保度が算出され、最小の確保度の予約要求が選択される。その結果、各ヘッドノード２０の計算ノード確保数は、各予約要求の確保度が均衡する方向に推移する。このような振る舞いは、相対的に小さい優先度係数が設定されたタスクには、相対的に多くの計算ノード１０が割り当てられ、相対的に大きい優先度係数が設定されたタスクには、相対的に少ない計算ノード１０が割り当てられることを意味する。すなわち、優先度係数の大小によって各タスクに割り当てる計算ノード１０の比率を操作することができる。したがって、タスクの重要度や緊急度に応じて、各タスクに割り当てる計算ノード１０数を適切に調整することが可能である。
【０１１４】
また、優先度係数は、予約要求の選択の際に毎回参照される。したがって、ヘッドノード２０は、既に予約要求を行ったタスクに関する処理の開始後に、優先度係数を変更して当該タスクの再予約要求を行うようにしてもよい。その場合であっても、新たな優先度係数に応じて、随時計算ノード確保数の比率を変更することが可能である。
【０１１５】
また、ヘッドノード２０は、自らが発行した予約要求を選択した計算ノード１０から分割タスク配布要求を受信したときに初めて分割タスクを配布する。一方、分割タスクを受信した計算ノード１０は分割タスクの処理が終了するまで次の予約要求の選択は行わない。よって、ヘッドノード２０が送信した分割タスクは必ず処理されることになる。
【０１１６】
また、ヘッドノード２０は、周期的に計算ノード記憶装置３０に登録されたレコードを監視し、予約済みでない計算ノード１０を検出すると、当該計算ノード１０に対して予約要求を行う。その結果、ヘッドノード２０は、既に他の計算ノード１０において開始されている処理に影響を与えることなく計算ノード１０の追加（スケールアウト）に随時対応することが可能である。
【０１１７】
なお、分割タスクの配布データには、必ずしも優先度係数は含まれていなくてもよい。この場合、例えば、計算ノード確保数の比較によって分割タスクの配布要求先のヘッドノード２０が選択されればよい。すなわち、計算ノード確保数が最小のヘッドノード２０が分割タスクの配布要求先として選択されればよい。その結果、各ヘッドノード２０のタスクに対して略均等に計算ノード１０が割り当てられる。
【０１１８】
また、計算ノード確保数を用いないで予約要求の選択が行われてもよい。この場合、予約要求の選択規則は、所定のものに限定されない。例えば、先着の予約要求から順番に選択が行われてもよいし、ランダムに選択が行われてもよい。
【０１１９】
また、優先度係数をユーザに指定させる場合、割り当てる計算ノード１０の数の相対比をそのまま指定させてもよい。この場合、確保度を演算する際に、当該相対比の逆数を計算ノード確保数に乗ずるようにすればよい。配布データには、当該相対比の逆数が含められてもよいし、当該相対比がそのまま含められもよい。
【０１２０】
また、各計算ノード１０に配布されるタスクは、分割タスクでなくてもよい。例えば、各ヘッドノード２０に、１００個前後のタスクが投入され、ヘッドノード２０は、投入されたタスクを分割することはく各計算ノード１０に配布するようにしてもよい。
【０１２１】
また、計算ノード確保数は、必ずしも、各ヘッドノード２０において管理されなくてもよい。例えば、各ヘッドノード２０の計算ノード確保数を一元的に管理するノード（確保数管理ノード）が設けられてもよい。この場合、各ヘッドノード２０は、確保数管理ノードに対して計算ノード確保数の更新を行う必要がある。一方で、各計算ノード１０は、各ヘッドノード２０の計算ノード確保数を、一回の通信によって取得することが可能となる。したがって、計算ノード１０側の処理負荷を軽減させたい場合、このようなシステム構成が有効である。
【０１２２】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１２３】
以上の説明に関し、更に以下の項を開示する。
（付記１）
タスクを計算ノードに配布する複数のヘッドノードと配布されたタスクを実行する複数の前記計算ノードとを有する分散処理システムであって、
前記計算ノードは、
前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記利用予約を予約要求記憶手段に記録する予約管理手段と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手段と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手段とを有し、
前記予約選択手段は、前記タスク実行手段によるタスクの処理の終了に応じ、前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する分散処理システム。
（付記２）
前記予約選択手段は、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求を選択する付記１記載の分散処理システム。
（付記３）
前記予約要求は、前記ヘッドノードに対する前記計算ノードの割当数の相対比又は該相対比の逆数を含み、
前記選択手段は、前記予約要求ごとに、当該予約要求に係る前記計算ノード数と前記相対比の逆数との乗を算出し、該乗が最小の前記予約要求を選択する付記１又は２記載の分散処理システム。
（付記４）
前記計算ノードは、計算ノード記憶手段に前記計算ノードの識別情報を記録する登録手段を有し、
前記ヘッドノードは、前記計算ノード記憶手段に記録されている前記識別情報に係る前記計算ノードに前記予約要求を送信する付記１乃至３いずれか一項記載の分散処理システム。
（付記５）
タスクを計算ノードに配布する複数のヘッドノードと配布されたタスクを実行する複数の前記計算ノードとを有する分散処理システムが実行する分散処理方法であって、
前記計算ノードは、
前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記利用予約を予約要求記憶手段に記録する予約管理手順と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手順と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手順とを実行し、
前記予約選択手順は、前記タスク実行手順におけるタスクの処理の終了に応じ、前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する分散処理方法。
（付記６）
前記予約選択手順は、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求を選択する付記５記載の分散処理方法。
（付記７）
前記予約要求は、前記ヘッドノードに対する前記計算ノードの割当数の相対比又は該相対比の逆数を含み、
前記選択手順は、前記予約要求ごとに、当該予約要求に係る前記計算ノード数と前記相対比の逆数との乗を算出し、該乗が最小の前記予約要求を選択する付記５又は６記載の分散処理方法。
（付記８）
前記計算ノードは、計算ノード記憶手段に前記計算ノードの識別情報を記録する登録手順を実行し、
前記ヘッドノードは、前記計算ノード記憶手段に記録されている前記識別情報に係る前記計算ノードに前記予約要求を送信する付記５乃至７いずれか一項記載の分散処理方法。
（付記９）
ヘッドノードより配布されたタスクを実行する前記計算ノードに、
前記ヘッドノードより前記複数の計算ノードに送信される、前記計算ノードの利用の予約要求の受信に応じ、前記利用予約を予約要求記憶手段に記録する予約管理手順と、
前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信する予約選択手順と、
前記配布要求に応じて返信されるタスクを処理するタスク実行手順とを実行させ、
前記予約選択手順は、前記タスク実行手順におけるタスクの処理の終了に応じ、前記予約要求記憶手段に記録された前記予約要求のいずれかを選択し、選択された前記予約要求の送信元の前記ヘッドノードにタスクの配布要求を送信するプログラム。
（付記１０）
前記予約選択手順は、前記予約要求記憶手段に記録されたそれぞれの前記予約要求に係る前記ヘッドノードがタスクの処理に利用中の計算ノード数を取得し、取得された前記計算ノード数の比較に基づいて前記予約要求を選択する付記９記載のプログラム。
（付記１１）
前記予約要求は、前記ヘッドノードに対する前記計算ノードの割当数の相対比又は該相対比の逆数を含み、
前記選択手順は、前記予約要求ごとに、当該予約要求に係る前記計算ノード数と前記相対比の逆数との乗を算出し、該乗が最小の前記予約要求を選択する付記９又は１０記載のプログラム。
【符号の説明】
【０１２４】
１          分散処理システム
１０        計算ノード
１１        登録部
１２        予約管理部
１３        予約選択部
１４        分割タスク実行部
２０        ヘッドノード
２１        計算ノード監視部
２２        予約要求部
２３        分割タスク管理部
３０        計算ノード記憶装置
４０        ネットワーク
１００      ドライブ装置
１０１      記録媒体
１０２      補助記憶装置
１０３      メモリ装置
１０４      ＣＰＵ
１０５      インタフェース装置
Ｂ          バス
【図１】
0005488029.tif 000002
【図２】
0005488029.tif 000003
【図３】
0005488029.tif 000004
【図４】
0005488029.tif 000005
【図５】
0005488029.tif 000006
【図６】
0005488029.tif 000007
【図７】
0005488029.tif 000008
【図８】
0005488029.tif 000009
【図９】
0005488029.tif 000010
【図１０】
0005488029.tif 000011
【図１１】
0005488029.tif 000012
【図１２】
0005488029.tif 000013
【図１３】
0005488029.tif 000014
【図１４】
0005488029.tif 000015
【図１５】
0005488029.tif 000016