"分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、条件分岐にてタスクの投機的実行を行う計算ノードを割り当てる投機的実行装置であって、前記タスクの処理内容が条件分岐である場合に、該タスクの入力となるデータを保持し、かつタスクを実行していない計算ノードを、計算ノード記憶手段から抽出するノード情報取得手段と、前記ノード情報取得手段で抽出された計算ノードリストの計算ノードが保持している入力データサイズを求めるデータサイズ計算手段と、2つの分岐先両方に対して、前記入力データサイズに基づいて、空いている計算ノードに投機的に実行するタスクを割り当てるタスク割当手段と、有することを特徴とする投機的実行装置。前記タスク割当手段は、前記計算ノードのリストの計算ノードのうち、サイズの大きい入力データの上位k個を保持している計算ノードについて投機的にタスクを割り当てる第1のタスク割当手段と、前記計算ノードのリストの残った計算ノードに対するタスク割り当てを行う第2のタスク割当手段と、を含む請求項1記載の投機的実行装置。前記第2のタスク割当手段は、分岐先の入力データを両方保持している計算ノードには、入力データの大きい方のタスクを割り当て、分岐先の入力データを片方保持している計算ノードには、入力データを保持しているタスクを割り当て、分岐先の入力データを保持してない計算ノードには、2つの分岐先のタスク割当比率のうち数が少ないタスクを割り当てる手段を含む請求項2記載の投機的実行装置。前記第2のタスク割当手段は、前記分岐先の入力データを保持していない計算ノードにタスクを割り当てる際に、タスク間のリソース利用比率が等分になるように、少ない方を優先的に割り当てる手段をふくむ請求項3記載の投機的実行装置。分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、資源管理ノードが条件分岐にてタスクの投機的実行を行う計算ノードを割り当てる投機的実行ノード割当方法であって、前記資源管理ノードにおいて、ノード情報取得手段が、前記タスクの処理内容が条件分岐である場合に、該タスクの入力となるデータを保持し、かつタスクを実行していない計算ノードを、計算ノード記憶手段から抽出するノード情報取得ステップと、データサイズ計算手段が、前記ノード情報取得ステップで抽出された計算ノードリストの計算ノードが保持している入力データサイズを求めるデータサイズ計算ステップと、タスク割当手段が、2つの分岐先両方に対して、前記入力データサイズに基づいて、空いている計算ノードに投機的に実行するタスクを割り当てる割当ステップと、を行うことを特徴とする投機的実行方法。前記割当ステップにおいて、前記計算ノードのリストの計算ノードのうち、サイズの大きい入力データの上位k個を保持している計算ノードについて投機的にタスクを割り当てる第1のタスク割当ステップと、前記計算ノードのリストの残った計算ノードに対するタスク割り当てを行う第2のタスク割当ステップと、を含む請求項5記載の投機的実行方法。前記第2のタスク割当ステップにおいて、分岐先の入力データを両方保持している計算ノードには、入力データの大きい方のタスクを割り当て、分岐先の入力データを片方保持している計算ノードには、入力データを保持しているタスクを割り当て、分岐先の入力データを保持してない計算ノードには、2つの分岐先のタスク割当比率のうち数が少ないタスクを割り当てる請求項6記載の投機的実行方法。前記第2のタスク割当ステップにおいて、前記分岐先の入力データを保持していない計算ノードにタスクを割り当てる際に、タスク間のリソース利用比率が等分になるように、少ない方を優先的に割り当てる請求項7記載の投機的実行方法。コンピュータを、請求項1乃至4記載のいずれか1項に記載の投機的実行装置の各手段として機能させるための投機的実行プログラム。上記の従来技術における特許文献1,2、非特許文献1,2のシステムの有効な投機的実行処理を組み合わせてシステムを構築したとしても、以下のような問題がある。1.投機的実行を行う際に、2つの分岐先に存在する処理のうち1つを選択し、その処理に全ての計算ノードを割り当てることのみが可能である。このため、分岐予測に失敗した場合、全ての計算結果が無駄になる。2.投機的に実行しているタスク間におけるリソースの競合が起きてしまい、結果データの転送が大量に発生する場合がある。本発明は、上記の点に鑑みなされたもので、条件分岐にて行うタスクの投機的実行において、2つの分岐先に対して、入力データサイズが偏っていない場合は計算ノードの分配を等しく行うことができ、投機的実行時に発生するデータの転送量を抑えることが可能な分散処理フレームワークにおける投機的実行ノード割当装置及び方法及びプログラムを提供することを目的とする。上記の課題を解決するため、本発明請求項1は、分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、条件分岐にてタスクの投機的実行を行う計算ノードを割り当てる投機的実行装置であって、前記タスクの処理内容が条件分岐である場合に、該タスクの入力となるデータを保持し、かつタスクを実行していない計算ノードを、資源管理ノードに問い合わせて計算ノードリストを取得するノード情報取得手段と、前記計算ノードリストの計算ノードが保持している入力データサイズを求めるデータサイズ計算手段と、2つの分岐先両方に対して、前記入力データサイズに基づいて、空いている計算ノードに投機的に実行するタスクを割り当てる割当手段と、有することを特徴とする。また、本発明請求項2は、前記割当手段に、前記計算ノードのリストの計算ノードのうち、サイズの大きい入力データの上位k個を保持している計算ノードについて投機的にタスクを割り当てる第1のタスク割当手段と、前記計算ノードのリストの残った計算ノードに対するタスク割り当てを行う第2のタスク割当手段と、を含む。また、本発明請求項3は、前記第2のタスク割当手段に、分岐先の入力データを両方保持している計算ノードには、入力データの大きい方のタスクを割り当て、分岐先の入力データを片方保持している計算ノードには、入力データを保持しているタスクを割り当て、分岐先の入力データを保持してない計算ノードには、2つの分岐先のタスク割当比率のうち数が少ないタスクを割り当てる手段を含む。また、本発明請求項4は、前記第2のタスク割当手段に、前記分岐先の入力データを保持していない計算ノードにタスクを割り当てる際に、タスク間のリソース利用比率が等分になるように、少ない方を優先的に割り当てる手段を含む。上記のように、本発明によれば、想定している分散並列実行フレームワークにおいて、実行するプログラムのフローが循環有向グラフとして表現されているとき、条件分岐にて行うタスクの投機的実行において、12つの分岐先に対して、入力データサイズが偏っていない場合は計算ノードの分配を等しく行うことができる。2投機的実行時に発生する、データの転送量バイト数を抑えることができる。以下図面と共に、本発明の実施の形態を説明する。本発明の資源管理ノードが、計算機ノードが有する入力データの局所性保存場所、サイズを考慮し、投機的実行するタスク同士のリソース調停を行いながらスケジューリングするものである。図4は、本発明の一実施の形態におけるシステム構成を示す。同図に示すシステムは、資源管理ノード10と複数の物理計算機20から構成される。物理計算機20は、各々計算ノード21を有する。資源管理ノード10は、タスク割当部11、計算ノードリスト取得部12、サイズ計算部13、計算ノードDB14から構成される。計算ノードDB14は、計算ノード毎の識別情報と対応させて、保持している入力データの識別情報、サイズ等を格納する。計算ノード21は、資源管理ノードから割り当てられたタスクを実行するタスク実行部211を有する。図5は、本発明の一実施の形態における投機的実行装置の概要動作のフローチャートである。ステップ310資源管理ノード10は、計算ノード21にタスクを割り当て、当該タスクの処理内容が条件分岐であるかを判定し、条件分岐でない場合は、ステップ320に移行し、条件分岐がある場合はステップ330に移行する。ステップ320計算ノード21は、条件分岐ではないタスクを割り当てられた場合は、タスク実行部211において割り当てられたタスクを実行し、ステップ310に戻る。ステップ330条件分岐である場合は、条件式を評価する。ここで、評価とは、ユーザにより指定された条件式をタスクとして実行し、その真偽を評価するものである。ステップ340資源管理ノード10は、条件式に基づいて、図6に示す手法により投機的実行を行い、ステップ310に戻る。図6は、本発明の一実施の形態における図5のS340のフローチャートである。ステップ510資源管理ノード10は、2つの分岐先の両方に対して空いている計算ノードを利用して投機的実行を行う。詳細な処理は図7で後述する。ステップ520条件分岐の処理が終了次第、条件が成立しなかった投機的実行に関するタスクを全て終了する。次に上記ステップ510の処理を説明する。図7は、本発明の一実施の形態における図6のS510の詳細なフローチャートである。ステップ610資源管理ノード10の計算ノードリスト取得部12は、特許文献2の技術を用いて、計算ノードDB14より、投機的実行の入力となるデータを保持しており、かつ、タスクを行っていない計算ノードのリストを抽出する。ステップ620サイズ計算部13は、取得した計算ノードのリストから、タスクを行っていない計算ノードが保持している投機的実行の入力データサイズを求める。ステップ630タスク割当部11は、サイズの大きい入力データ上位k個を保持している計算ノードに、投機的に実行するタスクを割り当てる。ここで、kはユーザが指定するものとする。なお、当該処理の詳細は図8にて後述する。ステップ640タスク割当部11は、計算ノードリスト上の残った計算ノードに対するタスクの割り当てを行う。当該割り当て方法の詳細は図9にて後述する。次に、上記のステップ630の詳細な処理について説明する。図8は、本発明の一実施の形態における図7のS630の詳細なフローチャートである。ステップ710タスク割当部11は、ステップ620で問い合わせた結果を用いて保持している入力データサイズが大きい計算ノード上位k台を選択する。ステップ720タスク割当部11は、ステップ710で選択された計算ノードに対して、その計算ノードが保持する最も大きい入力データと紐付いている分岐先のタスクを割り当てる。次に、図7のステップ640の詳細な処理について説明する。図9は、本発明の一実施の形態における図7のS640の詳細なフローチャーである。ステップ801タスク割当部11は、計算ノードリストに残った計算ノードのうち、分岐先の両方の入力データを保持している計算ノードについては、ステップ810の処理に移行し、両方の入力データを保持していない場合はステップ802に移行する。ステップ802分岐先の片方の入力データのみを保持している場合は、ステップ820に移行し、いずれも保持していない場合はステップ830に移行する。ステップ810入力データ量の大きい方のタスクを割り当てる。ステップ820入力データを保持しているタスクを割り当てる。ステップ830分岐先の入力データを全く保持していない計算ノードには、特許文献2で用いられている技術を用いて、データ転送を行い、タスクを割り当てる。このとき、投機的に実行するタスク間のリソース利用比率が等分になるように、少ない方を優先的に割り当てる。上記により、想定している分岐並列実行フレームワークにおいて、条件分岐を含む処理を高速に行うことができる。また、複数の条件分岐が連なっている場合でも処理を高速に行うことができる。本発明は、上記の実施の形態に限定されることなく特許請求の範囲内において種々変更応用が可能である。"