(57)【要約】【課題】効率のよい並列処理が可能になること。【解決手段】マスタノードにおいて、自身および自身の制御下にあるスレーブノードを識別する収容ノード情報を保持し、最上位マスタノードにおいて、最上位マスタノードと下位マスタノードとのマスタノード接続構成情報を保持し、最上位マスタノードは、並列処理の前処理として、収容ノード情報およびマスタノード接続構成情報から、自身が制御するスレーブノードとの通信および下位マスタノードとの通信を確立し、並列処理の後処理として、自身および自身が制御するノードと、下位マスタノードとから処理終了を検知して通信を終了し、下位マスタノードは、前処理として、最上位マスタノードとの通信が確立された際に、収容ノード情報から、自身が制御するスレーブノードと最上位マスタノードとの通信を確立し、後処理として、自身および自身が制御するノードの処理終了を検知して、最上位マスタノードに通知する。【選択図】        図２
2008198025.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、当該並列処理を制御する並列処理制御方法を各ノードとしてのコンピュータに実行させる並列処理制御プログラムであって、
前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持手順と、
前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持手順と、
前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持手順が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持手順が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御手順と、
前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持手順が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御手順と、
をコンピュータに実行させることを特徴とする並列処理制御プログラム。
【請求項２】
前記最上位マスタノードとして設定されている場合に、前記並列処理に用いられるデータ群を演算コストおよび／または通信コストに基づいてグループ分けすることを指示する指示文が当該並列処理を行うプログラムに検出された際に、前記演算コストおよび／または通信コストが抑えられるように、前記指示文に記載される同一グループのデータ群をノードに割り付ける割り付け手順をさらにコンピュータに実行させることを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項３】
前記割り付け手順は、前記マスタノード接続構成情報保持手順が保持するマスタノード接続構成情報を参照して、前記同一グループのデータ群を同一サブクラスタ内のノードに割り付けることを特徴とする請求項２に記載の並列処理制御プログラム。
【請求項４】
前記割り付け手順は、前記同一グループのデータ群のすべてを前記同一サブクラスタ内のノードに割り付けできなかった場合には、割り付けられなかったデータ群を、当該サブクラスタの配下にあるサブクラスタ内のノードに割り付けることを特徴とする請求項３に記載の並列処理制御プログラム。
【請求項５】
前記収容ノード情報保持手順は、前記サブクラスタごとに収容されるノードすべての演算コストおよび／または通信コストをさらに保持し、
前記割り付け手順は、前記収容ノード情報保持手順が保持する前記演算コストおよび／または通信コストをさらに参照して、前記同一グループのデータ群を割り付けることを特徴とする請求項４に記載の並列処理制御プログラム。
【請求項６】
前記マスタノード接続構成情報保持手順は、前記マスタノード接続構成情報として、各サブクラスタ間の通信性能をさらに保持し、
前記割り付け手順は、前記マスタノード接続構成情報保持手順が保持する前記各サブクラスタ間の通信性能をさらに参照して、前記同一グループのデータ群を割り付けることを特徴とする請求項５に記載の並列処理制御プログラム。
【請求項７】
各ノードにおいて、割り付けられたデータ群に対する処理が終了した際に、当該処理に要した演算コストおよび／または通信コストを算出するコスト算出手順をさらにコンピュータに実行させ、
前記収容ノード情報保持手順は、前記コスト算出手順が算出したノードすべての前記演算コストおよび／または通信コストを更新して保持することを特徴とする請求項２〜６のいずれかひとつに記載の並列処理制御プログラム。
【請求項８】
前記木構造のサブクラスタにおいて管理ノードとして設定されている場合に、前記木構造のサブクラスタにおけるすべてのノードの性能を所定の出力部に出力する性能出力手順をさらにコンピュータに実行させることを特徴とする請求項１〜７のいずれかひとつに記載の並列処理制御プログラム。
【請求項９】
複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、各ノードが当該並列処理を制御する並列処理制御システムであって、
前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持手段と、
前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持手段と、
前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持手段が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持手段が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御手段と、
前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持手段が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御手段と、
を備えたことを特徴とする並列処理制御システム。
【請求項１０】
複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、各ノードが当該並列処理を制御する並列処理制御方法であって、
前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持工程と、
前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持工程と、
前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持工程が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持工程が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御工程と、
前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持工程が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御工程と、
を含んだことを特徴とする並列処理制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、並列処理制御プログラム、並列処理制御システムおよび並列処理制御方法に関する。
【背景技術】
【０００２】
従来より、分散メモリ型の並列計算機システムにおいては、ＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）といったデータ通信方式などを用いた並列プログラミングにより、与えられた処理を複数のプロセッサで分割して実行し、処理時間の短縮を図る並列処理が行なわれている。
【０００３】
例えば、特許文献１では、逐次プログラムの実行中に、並列実行が可能なループを検出し、自動的に当該逐次プログラムを並列化して、並列化処理を行うことができる技術を開示している。
【０００４】
また、一般的に、ＭＰＩなどを用いた並列プログラムでは、使用するノードをあらかじめ静的にリストに登録しておき、例えば、「Ｎ」ノード必要な演算の場合は、そのリストの先頭から順番に使用することになる。この場合、マスタノードとして「１」ノード、スレーブノードとして「Ｎ−１」ノードが割り付けられる。
【０００５】
マスタノードは、「演算」および「全体の制御」を行い、スレーブノードは「演算」のみを行う。基本的に、マスタノードは、並列プログラムのメインルーチンを実行する前処理として、スレーブノードを起動し、マスタノードと各スレーブノード間の通信を確立する作業を行う。この作業を「Ｎ−１」のノード全てに行った後、プログラムの同期を取って実行を開始する。さらに、マスタノードは、メインルーチンの実行終了時に後処理として、全てのスレーブノードの処理をクローズした後、マスタノードの処理をクローズし、全体の処理を終了する。
【０００６】
【特許文献１】特開２００４−３１０６５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、上記した従来の技術は、前処理や後処理などの「全体の制御」を１つのマスタノードが行うので、演算に必要とされるノード数が増えると、マスタノードの処理コストが非常に高くなるため、並列処理の性能が劣化するという問題点があった。
【０００８】
また、上記した従来技術では、ノードごとにデータを静的に割り付けて処理を行うので、１つのノードに処理が集中して演算コストが大きくなったり、ノード間でデータ通信を行なうことによって通信コストが大きくなったりするため、並列処理の性能が劣化するという問題点があった。
【０００９】
例えば、図３６の（Ａ）に示すように、１０個（Ａ〜Ｊ）の均等サイズのデータ群があり、これらのデータ群が、第一グループ（Ａ、Ｂ）と、第二グループ（Ｃ、ＤおよびＥ）と、第三グループ（Ｆ、Ｇ、Ｈ、ＩおよびＪ）に分かれているとする。そして、「演算」実行時において、データ通信は、それぞれのグループ内でのみ発生し、グループ間では（例えば、データ群Ａとデータ群Ｃとの間では）、データ通信は発生しないとする。なお、図３６は、従来技術の課題を説明するための図である。
【００１０】
ここで、通信コストを考慮してデータを割り付ける場合、データ通信の発生しないグループをそれぞれ１ノードずつに割り付けることが考えられる。すなわち、図３６の（Ｂ）に示すように、第一グループ、第二グループおよび第三グループを各々１ノードずつに割り付けるとする。この場合、ノード間の通信は発生しないが、第三グループが割り振られたノードの演算コストは、第一グループおよび第二グループが割り振られたノードの演算コストに比べて大きくなり、第三グループが割り振られたノードが全体の性能を劣化させてしまうことになる。
【００１１】
また、演算コストを考慮してデータを割り付ける場合、１０個（Ａ〜Ｊ）の均等サイズのデータ群を１０ノードそれぞれに均等に割り付けることが考えられる。すなわち、図３６の（Ｃ）に示すように、１０個（Ａ〜Ｊ）の均等サイズのデータ群を順番に割り付けるとする。この場合、各ノードの演算コストに大きな偏りは発生しないが、同一グループのデータ群が別のノードに割り付けられるので通信が発生する。特に、この通信が同一スイッチ内のノードで発生するならばそれほど大きなコストにはならないが、離れた場所のスイッチ間で発生すると通信コストが大きくなる。図３６の（Ｃ）に示すように、第一グループ（Ａ、Ｂ）および第二グループ（Ｃ、ＤおよびＥ）は、それぞれ同一スイッチ内にあるノードに割り付けられているので、通信コストはそれほど大きくならないが、第三グループの「Ｆ」と「Ｇ〜Ｊ」と間では通信コストが大きくなり、これにより全体の性能を劣化させてしまうことになる。
【００１２】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、効率のよい並列処理が可能になる並列処理制御プログラム、並列処理制御システムおよび並列処理制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するため、請求項１に係る発明は、複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、当該並列処理を制御する並列処理制御方法を各ノードとしてのコンピュータに実行させる並列処理制御プログラムであって、前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持手順と、前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持手順と、前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持手順が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持手順が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御手順と、前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持手順が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御手順と、をコンピュータに実行させることを特徴とする。
【００１４】
また、請求項２に係る発明は、上記の発明において、前記最上位マスタノードとして設定されている場合に、前記並列処理に用いられるデータ群を演算コストおよび／または通信コストに基づいてグループ分けすることを指示する指示文が当該並列処理を行うプログラムに検出された際に、前記演算コストおよび／または通信コストが抑えられるように、前記指示文に記載される同一グループのデータ群をノードに割り付ける割り付け手順をさらにコンピュータに実行させることを特徴とする。
【００１５】
また、請求項３に係る発明は、上記の発明において、前記割り付け手順は、前記マスタノード接続構成情報保持手順が保持するマスタノード接続構成情報を参照して、前記同一グループのデータ群を同一サブクラスタ内のノードに割り付けることを特徴とする。
【００１６】
また、請求項４に係る発明は、上記の発明において、前記割り付け手順は、前記同一グループのデータ群のすべてを前記同一サブクラスタ内のノードに割り付けできなかった場合には、割り付けられなかったデータ群を、当該サブクラスタの配下にあるサブクラスタ内のノードに割り付けることを特徴とする。
【００１７】
また、請求項５に係る発明は、上記の発明において、前記収容ノード情報保持手順は、前記サブクラスタごとに収容されるノードすべての演算コストおよび／または通信コストをさらに保持し、前記割り付け手順は、前記収容ノード情報保持手順が保持する前記演算コストおよび／または通信コストをさらに参照して、前記同一グループのデータ群を割り付けることを特徴とする。
【００１８】
また、請求項６に係る発明は、上記の発明において、前記マスタノード接続構成情報保持手順は、前記マスタノード接続構成情報として、各サブクラスタ間の通信性能をさらに保持し、前記割り付け手順は、前記マスタノード接続構成情報保持手順が保持する前記各サブクラスタ間の通信性能をさらに参照して、前記同一グループのデータ群を割り付けることを特徴とする。
【００１９】
また、請求項７に係る発明は、上記の発明において、各ノードにおいて、割り付けられたデータ群に対する処理が終了した際に、当該処理に要した演算コストおよび／または通信コストを算出するコスト算出手順をさらにコンピュータに実行させ、前記収容ノード情報保持手順は、前記コスト算出手順が算出したノードすべての前記演算コストおよび／または通信コストを更新して保持することを特徴とする。
【００２０】
また、請求項８に係る発明は、上記の発明において、前記木構造のサブクラスタにおいて管理ノードとして設定されている場合に、前記木構造のサブクラスタにおけるすべてのノードの性能を所定の出力部に出力する性能出力手順をさらにコンピュータに実行させることを特徴とする。
【００２１】
また、請求項９に係る発明は、複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、各ノードが当該並列処理を制御する並列処理制御システムであって、前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持手段と、前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持手段と、前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持手段が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持手段が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御手段と、前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持手段が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御手段と、を備えたことを特徴とする。
【００２２】
また、請求項１０に係る発明は、複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、各ノードが当該並列処理を制御する並列処理制御方法であって、前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持工程と、前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持工程と、前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持工程が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持工程が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御工程と、前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持工程が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御工程と、を含んだことを特徴とする。
【発明の効果】
【００２３】
請求項１、９または１０の発明によれば、サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持し、木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持し、最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、収容ノード情報を参照して、最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、マスタノード接続構成情報を参照して、下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了し、木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、最上位マスタノードとの通信が確立された際に、収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、最上位マスタノードに処理の終了を通知するので、従来、１つのマスタノードで行なっていた前処理および後処理を、最上位のサブクラスタに設置した最上位マスタノードと下位サブクラスタごとに設置した下位マスタノードと間で分散して行なうことができ、効率のよい並列処理が可能になる。
【００２４】
また、請求項２の発明によれば、最上位マスタノードとして設定されている場合に、並列処理に用いられるデータ群を演算コストおよび／または通信コストに基づいてグループ分けすることを指示する指示文が当該並列処理を行うプログラムに検出された際に、演算コストおよび／または通信コストが抑えられるように、指示文に記載される同一グループのデータ群をノードに割り付けるので、演算コストおよび／または通信コストに基づいてグループ分けしたデータ群を、例えば、最上位にあるサブクラスタ内にあるノードにまとめて割り付けることができ、効率のよい並列処理が可能になる。
【００２５】
また、請求項３の発明によれば、マスタノード接続構成情報を参照して、同一グループのデータ群を同一サブクラスタ内のノードに割り付けるので、演算コストおよび／または通信コストに基づいてグループ分けしたデータ群を同一サブクラスタ内にあるノードにまとめて割り付けることができ、効率のよい並列処理が可能になる。
【００２６】
また、請求項４の発明によれば、同一グループのデータ群のすべてを同一サブクラスタ内のノードに割り付けできなかった場合には、割り付けられなかったデータ群を、当該サブクラスタの配下にあるサブクラスタ内のノードに割り付けるので、同一サブクラスタ内にあるノードに割り振られなかった同一グループのデータ群を、過剰な通信コストの発生することのない配下のサブクラスタ内のノードにまとめて割り付けることができ、効率のよい並列処理が可能になる。
【００２７】
また、請求項５の発明によれば、サブクラスタごとに収容されるノードすべての演算コストおよび／または通信コストをさらに収容ノード情報に保持し、保持する演算コストおよび／または通信コストをさらに参照して、同一グループのデータ群を割り付けるので、演算コストおよび／または通信コストに基づいてクラス分けしたデータ群を、同一サブクラスタの中でも、演算コストおよび／または通信コストが優れたノードに割り付けることができ、効率のよい並列処理が可能になる。
【００２８】
また、請求項６の発明によれば、マスタノード接続構成情報として、各サブクラスタ間の通信性能をさらに保持し、当該各サブクラスタ間の通信性能をさらに参照して、同一グループのデータ群を割り付けるので、演算コストおよび／または通信コストに基づいてクラス分けしたデータ群を、通信性能が高いネットワークで接続されるサブクラスタ内にあるノードに割り付けることができ、効率のよい並列処理が可能になる。
【００２９】
また、請求項７の発明によれば、各ノードにおいて、割り付けられたデータ群に対する処理が終了した際に、当該処理に要した演算コストおよび／または通信コストを算出し、算出したノードすべての演算コストおよび／または通信コストを収容ノード情報に更新して保持するので、更新された各ノードの演算コストおよび／または通信コストを参照することで、例えば、演算コストが増大しているノードの使用を回避するなど、次回のデータ群の割り付けの際に利用することができ、効率のよい並列処理が可能になる。
【００３０】
また、請求項８の発明によれば、木構造のサブクラスタにおいて管理ノードとして設定されている場合に、木構造のサブクラスタにおけるすべてのノードの性能を所定の出力部に出力するので、並列プログラムの実行者は、画面に表示されたすべてのノードの状況を参照して、例えば、処理能力の低下しているノードを検知するなど、迅速に各ノードの性能評価をすることができ、効率のよい並列処理が可能になる。
【発明を実施するための最良の形態】
【００３１】
以下に添付図面を参照して、この発明に係る並列処理制御プログラム、並列処理制御システムおよび並列処理制御方法を詳細に説明する。なお、以下では、この発明に係る並列処理制御プログラムを含んで構成されるノードを並列処理システムに適用した場合を実施例として説明する。また、以下では、実施例１におけるノードの構成および処理の手順、実施例１の効果を順に説明し、次に、実施例１と同様に、実施例２に係るノード、実施例３に係るノード、実施例４に係るノード、実施例５に係るノード、実施例６に係るノード、実施例７に係るノードについて順に説明し、最後に、他の実施例について説明する。
【実施例１】
【００３２】
［実施例１におけるノードの概要および特徴］
まず最初に、図１および図２を用いて、実施例１におけるノードの主たる特徴を具体的に説明する。図１および図２は、実施例１におけるノードの概要および特徴を説明するための図である。
【００３３】
実施例１におけるノードは、複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、当該並列処理を制御することを概要とする。例えば、実施例１におけるノードは、図１に示すように、スイッチで連結される４つのノードからなるサブクラスタが、３層に分かれた木構造でネットワークを介して接続されて構成される並列処理システムにおいて、並列プログラムを実行する際に、当該並列プログラムによる並列処理を制御する。
【００３４】
なお、図１に示す並列処理システムでは、木構造の最上位（第一層）に位置するサブクラスタである第一サブクラスタにおいて、「ノード０〜ノード３」がスイッチを介して連結され、木構造の第二層に位置するサブクラスタである第二サブクラスタおよび第三サブクラスタにおいて、「ノード４〜ノード７」および「ノード８〜ノード１１」がそれぞれスイッチを介して連結され、木構造の第三層に位置するサブクラスタである第四サブクラスタ、第五サブクラスタ、第六サブクラスタおよび第七サブクラスタにおいて、「ノード１２〜ノード１５」、「ノード１６〜ノード１９」、「ノード２０〜ノード２３」および「ノード２４〜ノード２７」がそれぞれスイッチを介して連結されている。
【００３５】
ここで、本発明は、効率のよい並列処理が可能になることに主たる特徴がある。この主たる特徴について簡単に説明すると、実施例１におけるノードは、サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する。
【００３６】
すなわち、図１に示すように、「ノード０」が第一サブクラスタのマスタノードとして設定されている場合に、「マスタノード：ノード０」は、第一サブクラスタに収容される自身（ノード０）および自身の制御下にある「スレーブノード：ノード１〜３」すべてを一意に識別する情報（例えば、ＩＰアドレスなど）である収容ノード情報を保持する。また、「ノード４」が第二サブクラスタのマスタノードとして設定されている場合に、「マスタノード：ノード４」は、第二サブクラスタに収容される自身（ノード４）および自身の制御下にある「スレーブノード：ノード５〜７」すべてを一意に識別する情報（例えば、ＩＰアドレスなど）である収容ノード情報を保持する。これと同様に、第三サブクラスタのマスタノードとして設定される「ノード８」、第四サブクラスタのマスタノードとして設定される「ノード１２」、第五サブクラスタのマスタノードとして設定される「ノード１６」、第六サブクラスタのマスタノードとして設定される「ノード２０」、第七サブクラスタのマスタノードとして設定される「ノード２４」においても、それぞれ収容ノード情報を保持する。
【００３７】
なお、マスタノードは、並列プログラム実行に際して、「演算処理」および「制御処理」を行なうノードであり、スレーブノードは、並列プログラム実行に際して、「演算処理」のみを行うノードである。
【００３８】
また、実施例１におけるノードは、木構造の最上位のサブクラスタにおいてオリジナルマスタノードとして設定されている場合に、オリジナルマスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持する。なお、「オリジナルマスタノード」は、特許請求の範囲に記載の「最上位マスタノード」に対応する。
【００３９】
すなわち、図１に示すように、木構造の最上位（第一層）にある第一サブクラスタのマスタノードとして設定されている「ノード０」は、下位のサブクラスタに設定された下位マスタノード（ノード４、ノード８、ノード１２、ノード１６、ノード２０およびノード２４）との接続構成の情報（マスタノード接続構成情報）を保持する。具体的には、オリジナルマスタノードである「ノード０」は、木構造の最上位にある第一サブクラスタの配下（木構造の第二層）には、第二層マスタノードである「ノード４」および「ノード８」それぞれが制御する２つのサブクラスタが接続され、第二層マスタノードである「ノード４」の配下（木構造の第三層）には、第三層マスタノードである「ノード１２」および「ノード１６」それぞれが制御する２つのサブクラスタが接続され、同じく第二層マスタノードである「ノード８」の配下（木構造の第三層）には、第三層マスタノードである「ノード２０」および「ノード２４」それぞれが制御する２つのサブクラスタが接続されるとする、マスタノード接続構成情報を保持する。
【００４０】
そして、実施例１におけるノードは、オリジナルマスタノードとして設定されている場合に、並列プログラム実行の前処理として、自身の収容ノード情報を参照して、最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、マスタノード接続構成情報を参照して、下位マスタノードそれぞれとの通信を確立する。すなわち、図２の（Ｂ）に示すように、オリジナルマスタノードである「ノード０」は、自身が保持する収容ノード情報を参照して、第一サブクラスタに収容されるスレーブノード（ノード１〜３）との通信を確立するとともに、図２の（Ａ）に示すように、マスタノード接続構成情報を参照して、下位マスタノード（ノード４、ノード８、ノード１２、ノード１６、ノード２０およびノード２４）それぞれとの通信を確立する。
【００４１】
また、実施例１におけるノードは、下位マスタノードとして設定されている場合に、当該並列プログラム実行の前処理として、オリジナルマスタノードとの通信が確立された際に、自身が保持する収容ノード情報を参照して、自身のサブクラスタに収容されるスレーブノードとオリジナルマスタノードとの通信を確立する。例えば、図２の（Ｂ）に示すように、下位マスタノードのうち第二層マスタノードである「ノード４」は、自身が保持する収容ノード情報を参照して、第二サブクラスタに収容されるスレーブノード（ノード５〜７）とオリジナルマスタノードとの通信を確立する。
【００４２】
なお、第三サブクラスタ〜第七サブクラスタにおいても、下位マスタノード（ノード８、ノード１２、ノード１６、ノード２０およびノード２４）は、「ノード４」と同様に、自身のサブクラスタに収容されるスレーブノードとオリジナルマスタノードとの通信を確立する。
【００４３】
そして、実施例１におけるノードは、オリジナルマスタノードとして設定されている場合に、並列プログラム実行の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知する。ずなわち、図２の（Ｃ）に示すように、オリジナルマスタノードである「ノード０」は、自身も含めた第一サブクラスタに収容されるノードの「演算処理」が終了したかを監視し、終了を検知する。
【００４４】
また、実施例１におけるノードは、下位マスタノードとして設定されている場合に、下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、オリジナルマスタノードに処理の終了を通知する。例えば、図２の（Ｃ）に示すように、下位マスタノードのうち第二層マスタノードである「ノード４」は、自身も含めた第二サブクラスタに収容されるノードの「演算処理」が終了したかを監視し、終了を検知するとともに、オリジナルマスタノードに処理終了の通知を行なう。なお、第三サブクラスタ〜第七サブクラスタにおいても、下位マスタノード（ノード８、ノード１２、ノード１６、ノード２０およびノード２４）は、「ノード４」と同様に、自身も含めたサブクラスタに収容されるノードの「演算処理」が終了したかを監視し、終了を検知するとともに、オリジナルマスタノードに処理終了の通知を行なう。
【００４５】
そして、実施例１におけるノードは、オリジナルマスタノードとして設定されている場合に、下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する。すなわち、オリジナルマスタノードである「ノード０」は、図２の（Ｃ）に示すような「処理終了の通知」を、下位マスタノードすべてから受信した場合、前処理において確立していたすべてのノードとの通信を終了する。
【００４６】
このようなことから、実施例１におけるノードは、従来、１つのマスタノードで行なっていた前処理および後処理を、最上位のサブクラスタに設置したオリジナルマスタノードと下位サブクラスタごとに設置した下位マスタノードとの間で分散して行なうことができ、上記した主たる特徴の通り、効率のよい並列処理が可能になる。
【００４７】
［実施例１におけるオリジナルマスタノードの構成］
次に、図３、図５および図６を用いて、実施例１におけるオリジナルマスタノードを説明する。図３は、実施例１におけるオリジナルマスタノードの構成を示すブロック図であり、図５は、実施例１におけるマスタノード接続構成情報記憶部を説明するための図であり、図６は、実施例１におけるオリジナルマスタノードの収容ノード情報記憶部を説明するための図である。
【００４８】
図３に示すように、実施例１におけるオリジナルマスタノード１０は、通信制御Ｉ／Ｆ部１１と、記憶部１２と、制御部１３とから構成される。
【００４９】
通信制御Ｉ／Ｆ部１１は、ネットワークを通じて送受信されるデータの転送を制御したり、記憶部１２および制御部１３との間におけるデータ転送を制御したりする。具体的には、並列プログラムの読み込み通知や「処理終了の通知」を受信して制御部１３に転送したり、制御部１３からの通信確立要求を転送したりする。
【００５０】
記憶部１２は、制御部１３による各種処理に用いるデータを記憶し、特に本発明に密接に関連するものとしては、図３に示すように、マスタノード接続構成情報記憶部１２ａと収容ノード情報記憶部１２ｂとを備える。ここで、マスタノード接続構成情報記憶部１２ａは、特許請求の範囲に記載の「マスタノード接続構成情報保持手順」に対応し、収容ノード情報記憶部１２ｂは、同じく「収容ノード情報保持手順」に対応する。
【００５１】
マスタノード接続構成情報記憶部１２ａは、オリジナルマスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持して記憶する。
【００５２】
具体的には、図５に示すように、マスタノード接続構成情報記憶部１２ａは、オリジナルマスタノード１０として設定された「ノード０」に対して、木構造の第二層にあるマスタノードである「ノード４：２−ｍａｓｔｅｒ．０」および「ノード８：２―ｍａｓｔｅｒ．１」の２つが接続され、第二層マスタノードである「ノード４：２−ｍａｓｔｅｒ．０」に対して、木構造の第三層にあるマスタノードである「ノード１２：３−ｍａｓｔｅｒ．０」および「ノード１６：３−ｍａｓｔｅｒ．１」の２つが接続され、同じく第二層マスタノードである「ノード８：２―ｍａｓｔｅｒ．１」に対して、木構造の第三層にあるマスタノードである「ノード２０：３−ｍａｓｔｅｒ．２」および「ノード２４：３−ｍａｓｔｅｒ．３」の２つが接続されているとする、マスタノード接続構成情報を保持する。また、マスタノードそれぞれを、ネットワークにおいて一意に識別できる情報として「ＩＰアドレス」も保持して記憶する。
【００５３】
収容ノード情報記憶部１２ｂは、最上位サブクラスタに収容されるマスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持して記憶する。
【００５４】
具体的には、図６に示すように、収容ノード情報記憶部１２ｂは、第一サブクラスタ（木構造の最上位にあるサブクラスタ）のオリジナルマスタノード１０として設定された「ノード０」と、その制御下にある「スレーブノード：ノード１〜３」との４つからなるノードそれぞれを、ネットワークにおいて一意に識別できる「ＩＰアドレス」と対応付けて記憶する。
【００５５】
制御部１３は、通信制御Ｉ／Ｆ部１１から転送されたデータに基づき各種処理を実行し、特に本発明に密接に関連するものとしては、図３に示すように、通信制御部１３ａを備える。ここで、通信制御部１３ａは、特許請求の範囲に記載の「最上位マスタノード通信制御手順」に対応する。
【００５６】
通信制御部１３ａは、並列プログラム実行の前処理として、収容ノード情報記憶部１２ｂが記憶する収容ノード情報を参照して、最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、マスタノード接続構成情報記憶部１２ａが記憶するマスタノード接続構成情報を参照して、下位マスタノードそれぞれとの通信を確立する。すなわち、通信制御部１３ａは、図６に示す収容ノード情報を参照して、第一サブクラスタに収容されるスレーブノード（ノード１〜３）との通信を確立する（図２の（Ｂ）参照）。それととともに、通信制御部１３ａは、図５に示すマスタノード接続構成情報を参照して、下位マスタノード（ノード４、ノード８、ノード１２、ノード１６、ノード２０およびノード２４）それぞれとの通信を確立する（図２の（Ａ）参照）。
【００５７】
また、通信制御部１３ａは、下位マスタノードを介して、当該下位マスタノードが制御するスレーブノードすべてとの通信確立を検知する。
【００５８】
また、通信制御部１３ａは、並列プログラム実行の後処理として、最上位のサブクラスタに収容されるノードすべての処理の終了を検知する。すなわち、通信制御部１３ａは、図６に示す収容ノード情報を参照して、第一サブクラスタに収容されるノードすべての「演算処理」が終了したかを監視し、終了を検知する（図２の（Ｃ）参照）。
【００５９】
また、通信制御部１３ａは、下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する。すなわち、通信制御部１３ａは、図５に示すマスタノード接続構成情報にあるすべての下位マスタノードから、「処理終了の通知」を受信した場合、前処理において確立していたすべてのノードとの通信を終了する。
【００６０】
［実施例１における下位マスタノードの構成］
続いて、図４および図７を用いて、実施例１における下位マスタノードを説明する。図４は、実施例１における下位マスタノードの構成を示すブロック図であり、図７は、実施例１における下位マスタノードの収容ノード情報記憶部を説明するための図である。
【００６１】
図４に示すように、実施例１における下位マスタノード２０は、通信制御Ｉ／Ｆ部２１と、記憶部２２と、制御部２３とから構成される。
【００６２】
通信制御Ｉ／Ｆ部２１は、ネットワークを通じて送受信されるデータの転送を制御したり、記憶部２２および制御部２３との間におけるデータ転送を制御したりする。具体的には、オリジナルマスタノード１０からの通信確立要求を受信して制御部２３に転送したり、制御部２３から受信した「処理終了の通知」をオリジナルマスタノード１０に転送したりする。
【００６３】
記憶部２２は、制御部２３による各種処理に用いるデータを記憶し、特に本発明に密接に関連するものとしては、図４に示すように、収容ノード情報記憶部２２ａを備える。ここで、収容ノード情報記憶部２２ａは、特許請求の範囲に記載の「収容ノード情報保持手順」に対応する。
【００６４】
収容ノード情報記憶部２２ａは、下位サブクラスタに収容されるマスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持して記憶する。
【００６５】
例えば、図７に示すように、収容ノード情報記憶部２２ａは、第二サブクラスタ（木構造の第二層にあるサブクラスタ）の下位マスタノード２０として設定された「ノード４」と、その制御下にある「スレーブノード：ノード５〜７」との４つからなるノードそれぞれを、ネットワークにおいて一意に識別できる「ＩＰアドレス」と対応付けて記憶する。
【００６６】
制御部２３は、通信制御Ｉ／Ｆ部２１から転送されたデータに基づき各種処理を実行し、特に本発明に密接に関連するものとしては、図４に示すように、通信制御部２３ａを備える。ここで、通信制御部２３ａは、特許請求の範囲に記載の「下位マスタノード通信制御手順」に対応する。
【００６７】
通信制御部２３ａは、並列プログラム実行の前処理として、オリジナルマスタノード１０との通信が確立された際に、収容ノード情報記憶部２２ａが記憶する収容ノード情報を参照して、自身のサブクラスタに収容されるスレーブノードとオリジナルマスタノードとの通信を確立する。例えば、第二層マスタノードである「ノード４」の通信制御部２３ａは、図７に示す収容ノード情報を参照して、第二サブクラスタに収容されるスレーブノード（ノード５〜７）とオリジナルマスタノードとの通信を確立する（図２の（Ｂ）参照）。
【００６８】
また、通信制御部２３ａは、並列プログラム実行の後処理として、収容するノードすべての処理の終了を検知するとともに、オリジナルマスタノード１０に処理の終了を通知する。例えば、第二層マスタノードである「ノード４」の通信制御部２３ａは、図７に示す収容ノード情報を参照して、第二サブクラスタに収容されるノードの「演算処理」が終了したかを監視して終了を検知するとともに、オリジナルマスタノード１０に処理終了の通知を行なう（図２の（Ｃ）参照）。
【００６９】
［実施例１におけるオリジナルマスタノードによる処理の手順］
次に、図８および図１０を用いて、実施例１におけるオリジナルマスタノードによる処理を説明する。図８は、実施例１におけるオリジナルマスタノードの前処理の手順を説明するための図であり、図１０は、実施例１におけるオリジナルマスタノードの後処理の手順を説明するための図である。
【００７０】
［実施例１におけるオリジナルマスタノードによる前処理の手順］
まず、実施例１におけるオリジナルマスタノード１０は、並列処理システムにおいて並列プログラムが読み込まれると（ステップＳ８０１肯定）、マスタノード接続構成情報を参照して、下位マスタノードとの通信を確立する（ステップＳ８０２）。すなわち、通信制御部１３ａは、図５に示すマスタノード接続構成情報記憶部１２ａが記憶するマスタノード接続構成情報を参照して、下位マスタノード（ノード４、ノード８、ノード１２、ノード１６、ノード２０およびノード２４）それぞれとの通信を確立する（図２の（Ａ）参照）。
【００７１】
そして、通信制御部１３ａは、収容ノード情報を参照して、自身のサブクラスタ内のスレーブノードとの通信を確立する（ステップＳ８０３）。すなわち、通信制御部１３ａは、図６に示す収容ノード情報記憶部１２ｂが記憶する収容ノード情報を参照して、第一サブクラスタに収容されるスレーブノード（ノード１〜３）との通信を確立する（図２の（Ｂ）参照）。
【００７２】
続いて、通信制御部１３ａは、下位マスタノード２０を介して、当該下位マスタノード２０が制御するスレーブノードすべてとの通信確立を検知する（ステップＳ８０４）。例えば、下位マスタノード２０として設定された「ノード４」を介して、スレーブノード（ノード５〜７）すべてとの通信確立を検知する。
【００７３】
そして、実施例１におけるオリジナルマスタノード１０は、並列プログラムのメインルーチン実行を開始して（ステップＳ８０５）、処理を終了する。
【００７４】
［実施例１におけるオリジナルマスタノードによる後処理の手順］
まず、実施例１におけるオリジナルマスタノード１０は、並列処理システムにおいて並列プログラムのメインルーチンが終了すると（ステップＳ１００１肯定）、最上位のサブクラスタに収容されるノードすべての処理の終了を検知する（ステップＳ１００２）。すなわち、通信制御部１３ａは、図６に示す収容ノード情報を参照して、第一サブクラスタに収容されるノードすべての「演算処理」が終了したかを監視し、終了を検知する（図２の（Ｃ）参照）。
【００７５】
そして、通信制御部１３ａは、すべての下位マスタノードから処理の終了通知を受信すると（ステップＳ１００３肯定）、並列プログラムの全処理を終了して（ステップＳ１００４）、処理を終了する。すなわち、通信制御部１３ａは、図６に示すマスタノード接続構成情報にあるすべての下位マスタノードから、「処理終了の通知」を受信した場合、前処理において確立していたすべてのノードとの通信を終了する。
【００７６】
［実施例１における下位マスタノードによる処理の手順］
次に、図９および図１１を用いて、実施例１における下位マスタノードによる処理を説明する。図９は、実施例１における下位マスタノードの前処理の手順を説明するための図であり、図１１は、実施例１における下位マスタノードの後処理の手順を説明するための図である。
【００７７】
［実施例１における下位マスタノードによる前処理の手順］
まず、実施例１における下位マスタノード２０は、オリジナルマスタノード１０から通信確立要求を受け付けると（ステップＳ９０１肯定）、オリジナルマスタノード１０との通信を確立する（ステップＳ９０２）。
【００７８】
そして、通信制御部２３ａは、収容ノード情報を参照して、自身のサブクラスタ内のスレーブノードとオリジナルマスタノードとの通信を確立し（ステップＳ９０３）、処理を終了する。例えば、第二層マスタノードである「ノード４」の通信制御部２３ａは、図７に示す収容ノード情報を参照して、第二サブクラスタに収容されるスレーブノード（ノード５〜７）とオリジナルマスタノードとの通信を確立する（図２の（Ｂ）参照）。
【００７９】
［実施例１における下位マスタノードによる後処理の手順］
まず、実施例１における下位マスタノード２０は、並列プログラムのメインルーチンが終了すると（ステップＳ１１０１肯定）、通信制御部２３ａは、自身のサブクラスタ内にあるノードの処理終了を検知する（ステップＳ１１０２）。例えば、第二層マスタノードである「ノード４」の通信制御部２３ａは、図７に示す収容ノード情報を参照して、第二サブクラスタに収容されるノードの「演算処理」が終了したかを監視して終了を検知する。
【００８０】
そして、通信制御部２３ａは、オリジナルマスタノード１０へ処理の終了通知を送信し（ステップＳ１１０３）、処理を終了する。
【００８１】
［実施例１の効果］
上記したように、実施例１によれば、サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持し、木構造の最上位のサブクラスタにおいてオリジナルマスタノード１０として設定されている場合に、オリジナルマスタノード１０と下位マスタノード２０との接続構成の情報であるマスタノード接続構成情報を保持し、オリジナルマスタノード１０は、当該並列処理の前処理として、自身の収容ノード情報を参照して、最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、マスタノード接続構成情報を参照して、下位マスタノード２０それぞれとの通信を確立し、当該並列処理の後処理として、最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、下位マスタノード２０すべてから、処理の終了通知を検知してすべての通信を終了し、下位マスタノード２０は、当該並列処理の前処理として、オリジナルマスタノード１０との通信が確立された際に、自身の収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードとオリジナルマスタノード１０との通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、オリジナルマスタノード１０に処理の終了を通知するので、従来、１つのマスタノードで行なっていた前処理および後処理を、最上位のサブクラスタに設置した最上位マスタノードと下位サブクラスタごとに設置した下位マスタノードとの間で分散して行なうことができ、効率のよい並列処理が可能になる。
【実施例２】
【００８２】
上述した実施例１では、前処理および後処理を、オリジナルマスタノードと下位マスタノードとが分担する場合について説明したが、実施例２では、並列プログラムに用いられるデータ群の割り付けを、オリジナルマスタノードと下位マスタノードとが分担する場合について説明する。
【００８３】
［実施例２におけるノードの概要および特徴］
まず最初に、図１２および図１３を用いて、実施例２におけるノードの主たる特徴を具体的に説明する。図１２および図１３は、実施例２におけるノードの概要および特徴を説明するための図である。
【００８４】
図１２の（Ａ）に示すように、例えば、並列処理に用いられるデータ群として、１０個（Ａ〜Ｊ）の均等サイズのデータ群があり、これらのデータ群が、第一グループ（Ａ、Ｂ）と、第二グループ（Ｃ、ＤおよびＥ）と、第三グループ（Ｆ、Ｇ、Ｈ、ＩおよびＪ）に分かれているとする。そして、「演算」実行時において、データ通信は、それぞれのグループ内でのみ発生し、グループ間では（例えば、データ群Ａとデータ群Ｃとの間では）、データ通信は発生しないとする。
【００８５】
また、図１２の（Ｃ）に示す並列処理システムにおいて、実施例１で説明した前処理が終了し、並列プログラムのメインルーチンが実行されているが、第一サブクラスタのノード２のみ使用不可（Ｂｕｓｙ）であり、その他のノードは使用可能（Ｉｄｌｅ）であるとする。なお、これらの情報は、各マスタノードが、対応するノードの使用状態をそれぞれの収容ノード情報に保持している。
【００８６】
実施例２におけるオリジナルマスタノード（ノード０）は、並列プログラムのメインルーチン実行中に、図１２の（Ａ）に示した１０個のデータ群について記載された指示文を検出すると、並列プログラムのメインルーチン実行を中断し、当該指示文に記載される情報を抽出する。すなわち、図１２の（Ｂ）に示すように、当該指示文には、並列処理に用いられる均等サイズのデータ群として、総数が１０個であり、データ通信が閉じているグループ構造としては、第一グループ（２個）と、第二グループ（３個）と、第三グループ（５個）とからなることが記載されている。
【００８７】
すなわち、当該指示文は、並列処理に用いられるデータ群を演算コストおよび通信コストに基づいてグループ分けすることを指示するものである。なお、このような指示文は、ＭＰＩなどを用いた並列プログラムにおいて、ユーザによって任意に挿入することができる。
【００８８】
そして、実施例２におけるオリジナルマスタノード（ノード０）は、上述した指示文に記載される情報を抽出すると、演算コストおよび通信コストが抑えられるように、指示文に記載される同一グループのデータ群をノードに割り付ける。
【００８９】
例えば、実施例２におけるオリジナルマスタノード（ノード０）は、図１３の（Ａ）に示すように、第一グループのデータ群（ＡおよびＢからなる２個）を割り付ける際に、自身の収容ノード情報を参照して、第一サブクラスタの調査を行なって、使用可能なノード数が「３」であることを検知し（図１３の（Ａ）の（１）参照）、第一グループのデータ群をまとめて割り付け可能であるので、例えば、番号の若い順から、「ノード０」と「ノード１」とにデータ群を割り付ける（図１３の（Ａ）の（２）参照）。そして、自身が保持する収容ノード情報における、「ノード０」と「ノード１」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する（図１３の（Ａ）の（３）参照）。
【００９０】
また、実施例２におけるオリジナルマスタノード（ノード０）は、マスタノード接続構成情報を参照して、同一グループのデータ群を同一サブクラスタ内のノードに割り付ける。
【００９１】
例えば、実施例２におけるオリジナルマスタノード（ノード０）は、図１３の（Ｂ）に示すように、第二グループのデータ群（Ｃ、ＤおよびＥからなる３個）を割り付ける際に、まず、自身の収容ノード情報を参照して、第一サブクラスタの調査を行なって、使用可能なノード数が「１」であることを検知し（図１３の（Ｂ）の（１）参照）、第一サブクラスタに割り付け不可と判定するが、引き続き、マスタノード接続構成情報を参照して、配下の下位マスタノードである「ノード４」および「ノード８」に対して、第二サブクラスタおよび第三サブクラスタの調査を実行させ、それぞれのサブクラスタで使用可能なノード数が「４」であることを検知する（図１３の（Ｂ）の（２）参照）。
【００９２】
ここで、実施例２におけるオリジナルマスタノード（ノード０）は、第二サブクラスタおよび第三サブクラスタともに割り付けが可能であるので、例えば、左側にあるサブクラスタ（第二サブクラスタ）に対して、第二グループのデータ群を転送し（図１３の（Ｂ）の（３）参照）、第二サブクラスタにおいて、番号の若い順から、「ノード４」と「ノード５」と「ノード６」とにデータ群を割り付ける（図１３の（Ｂ）の（４）参照）。そして、第二サブクラスタのマスタノードである「ノード４」は、自身が保持する収容ノード情報における、「ノード４」と「ノード５」と「ノード６」との情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する（図１３の（Ｂ）の（５）参照）。
【００９３】
また、実施例２におけるオリジナルマスタノード（ノード０）は、同一グループのデータ群のすべてを同一サブクラスタ内のノードに割り付けできなかった場合には、割り付けられなかったデータ群を、当該サブクラスタの配下にあるサブクラスタ内のノードに割り付ける。
【００９４】
例えば、実施例２におけるオリジナルマスタノード（ノード０）は、図１３の（Ｃ）に示すように、第三グループのデータ群（Ｆ、Ｇ、Ｈ、ＩおよびＪからなる５個）を割り付ける際に、まず、自身の収容ノード情報を参照して、第一サブクラスタの調査を行なって、使用可能なノード数が「１」であることを検知し（図１３の（Ｃ）の（１）参照）、第一サブクラスタに割り付け不可と判定し、引き続き、マスタノード接続構成情報を参照して、配下の下位マスタノードである「ノード４」および「ノード８」に対して、第二サブクラスタおよび第三サブクラスタの調査を実行させ、それぞれのサブクラスタで使用可能なノード数が「１」および「４」であることを検知する（図１３の（Ｃ）の（２）参照）。さらに、実施例２におけるオリジナルマスタノード（ノード０）は、使用可能なノード数の多い第三サブクラスタの「ノード８」に対して、配下の下位マスタノードである「ノード２０」、「ノード２４」それぞれに第六サブクラスタ、第七サブクラスタそれぞれの使用可能なノード数の調査実行を指示させ、これにより、それぞれのサブクラスタで使用可能なノード数が「４」であることを検知する（図１３の（Ｃ）の（３）参照）。
【００９５】
ここで、実施例２におけるオリジナルマスタノード（ノード０）は、第三サブクラスタおよびその配下のサブクラスタにおいて合計１２個の使用可能なノード数があり、第三グループのデータ群を割り付け可能と判定するが、第三サブクラスタ内には４つのデータ群しか割り付けられないので、割り付けることが出来ない余り１つのデータ群を第三サブクラスタの配下にあるサブクラスタ内のノードに割り付ける。例えば、配下のサブクラスタのうち、左側にある第六サブクラスタの番号の若い「ノード２０」に余り１つのデータ群を割り付けると判定する。この判定に基づいて、実施例２におけるオリジナルマスタノード（ノード０）は、第三グループのデータ群をそれぞれ第三サブクラスタと第六サブクラスタとに転送し、「ノード８〜１１」と「ノード２０」とに割り付けを行なう（図１３の（Ｃ）の（４）参照）。そして、第三サブクラスタのマスタノードである「ノード８」は、自身が保持する収容ノード情報における「ノード８〜１１」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、第六サブクラスタのマスタノードである「ノード２０」は、自身が保持する収容ノード情報における「ノード２０」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する（図１３の（Ｃ）の（５）参照）。
【００９６】
なお、本実施例では、サブクラスタの左側を選択し、ノード番号の若い順にデータ群を割り付ける場合について説明したが、本発明はこれに限定されるのもではなく、サブクラスタの右側を選択し、ノード番号の大きい順にデータ群を割り付ける場合であってもよい。また、本実施例では、図１３の（Ｃ）の（３）に示したように、使用可能なノード数の多いサブクラスタの下位マスタノードに対してのみ、配下の下位サブクラスタにおいて使用可能なノード数の調査実行を指示させる場合について説明したが、本発明はこれに限定されるのもではなく、使用可能なノード数の少ないサブクラスタの下位マスタノードに対しても、配下の下位サブクラスタにおいて使用可能なノード数の調査実行を指示させて、両者の結果を比較して割り付けるノードを判定してもよい。
【００９７】
このようなことから、実施例２におけるノードは、演算コストおよび通信コストに基づいてグループ分けしたデータ群を、例えば、最上位にあるサブクラスタ内にあるノードにまとめて割り付けることができ、効率のよい並列処理が可能になる。
【００９８】
［実施例２におけるオリジナルマスタノードの構成］
次に、図１４および図１６〜１８を用いて、実施例２におけるオリジナルマスタノードを説明する。図１４は、実施例２におけるオリジナルマスタノードの構成を示すブロック図であり、図１６は、指示文を説明するための図であり、図１７は、実施例２における動的割り付け部を説明するための図であり、図１８は、実施例２における収容ノード情報記憶部を説明するための図である。
【００９９】
図１４に示すように、実施例２におけるオリジナルマスタノード１０は、図３に示す実施例１におけるオリジナルマスタノード１０と基本的に同様であり、動的割り付け部１３ｂと収容ノード情報更新部１３ｃとを新たに備えているところが相違する。以下、これらを中心に説明する。ここで、動的割り付け部１３ｂは、特許請求の範囲に記載の「割り付け手順」に対応する。
【０１００】
動的割り付け部１３ｂは、並列処理に用いられるデータ群を演算コストおよび通信コストに基づいてグループ分けすることを指示する指示文が当該並列処理を行うプログラムに検出された際に、演算コストおよび通信コストが抑えられるように、指示文に記載される同一グループのデータ群をノードに割り付ける。例えば、図１６に示すように、並列処理に用いられる均等サイズのデータ群として、総数が１０個であり、データ通信が閉じているグループ構造としては、第一グループ（２個）と、第二グループ（３個）と、第三グループ（５個）とからなることが記載されている指示文を、並列プログラムのメインルーチン実行中に検出し、当該指示文に記載される情報を抽出すると、並列プログラムのメインルーチン実行を中断し、演算コストおよび通信コストが抑えられるように、指示文に記載される同一グループのデータ群をノードに割り付ける。
【０１０１】
具体的には、動的割り付け部１３ｂは、第一グループのデータ群（ＡおよびＢからなる２個）を割り付ける際に、図１８の（Ａ）の左側に示す収容ノード情報記憶部１２ｂが記憶する収容ノード情報における使用状況（ｓｔａｔｕｓ）を参照して、第一サブクラスタの調査を行なって、使用可能なノード数を検索する（図１７の（Ａ）に示す指令を実行）。これにより、使用可能なノード数が「３」であることを検知し（図１３の（Ａ）の（１）参照）、第一グループのデータ群をまとめて割り付け可能であるので、図１７の（Ｃ）に示す指令を実行して、例えば、番号の若い順から、「ノード０」と「ノード１」とにデータ群を割り付ける（図１３の（Ａ）の（２）参照）。
【０１０２】
収容ノード情報更新部１３ｃは、動的割り付け部１３ｂによって変更されたノードの使用状況を更新する。すなわち、「ノード０」と「ノード１」の使用状況（ｓｔａｔｕｓ）を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新して収容ノード情報記憶部１２ｂに格納する（図１８の（Ａ）の右側参照）。なお、図１８においては、「ＩＰアドレス」を省略して記載している。
【０１０３】
また、動的割り付け部１３ｂは、マスタノード接続構成情報記憶部１２ａが記憶するマスタノード接続構成情報を参照して、同一グループのデータ群を同一サブクラスタ内のノードに割り付ける。
【０１０４】
具体的には、動的割り付け部１３ｂは、第二グループのデータ群（Ｃ、ＤおよびＥからなる３個）を割り付ける際に、図１８の（Ａ）の右側に示す収容ノード情報記憶部１２ｂが記憶する収容ノード情報における使用状況（ｓｔａｔｕｓ）を参照して、第一サブクラスタの調査を行なって、使用可能なノード数を検索し（図１７の（Ａ）に示す指令を実行）、使用可能なノード数が「１」であることを検知し（図１３の（Ｂ）の（１）参照）、第一サブクラスタに割り付け不可と判定するが、引き続き、マスタノード接続構成情報記憶部１２ａが記憶するマスタノード接続構成情報を参照して、配下の下位マスタノードである「ノード４」および「ノード８」に対して、第二サブクラスタおよび第三サブクラスタの調査を実行させ（図１７の（Ｂ）に示す指令を実行）、それぞれのサブクラスタで使用可能なノード数が「４」であることを検知する（図１３の（Ｂ）の（２）参照）。
【０１０５】
ここで、動的割り付け部１３ｂは、第二サブクラスタおよび第三サブクラスタともに割り付けが可能であるので、図１７の（Ｄ）に示す指令を実行して、例えば、左側にあるサブクラスタ（第二サブクラスタ）に対して、第二グループのデータ群を転送する（図１３の（Ｂ）の（３）参照）。そして、動的割り付け部１３ｂは、第二サブクラスタにおける下位マスタノード２０である「ノード４」に対して、図１７の（Ｃ）に示す指令を実行するように指示を出し、「ノード４」は、例えば、第二サブクラスタにおいて、番号の若い順から、「ノード４」と「ノード５」と「ノード６」とにデータ群を割り付ける（図１３の（Ｂ）の（４）参照）。
【０１０６】
なお、後述するように、第二サブクラスタの下位マスタノード２０である「ノード４」は、自身が保持する収容ノード情報における、「ノード４」と「ノード５」と「ノード６」との情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する。
【０１０７】
また、動的割り付け部１３ｂは、同一グループのデータ群のすべてを同一サブクラスタ内のノードに割り付けできなかった場合には、割り付けられなかったデータ群を、当該サブクラスタの配下にあるサブクラスタ内のノードに割り付ける。
【０１０８】
具体的には、動的割り付け部１３ｂは、第三グループのデータ群（Ｆ、Ｇ、Ｈ、ＩおよびＪからなる５個）を割り付ける際に、図１７の（Ａ）に示す指令を実行して、第一サブクラスタにおいて使用可能なノード数が「１」であることを検知し（図１３の（Ｃ）の（１）参照）、引き続き、マスタノード接続構成情報記憶部１２ａが記憶するマスタノード接続構成情報を参照して、図１７の（Ｂ）に示す指令を実行して、配下の下位マスタノード２０である「ノード４」および「ノード８」に対して、第二サブクラスタおよび第三サブクラスタの調査を実行させ、それぞれのサブクラスタで使用可能なノード数が「１」および「４」であることを検知する（図１３の（Ｃ）の（２）参照）。
【０１０９】
さらに、動的割り付け部１３ｂは、使用可能なノード数の多い第三サブクラスタの下位マスタノード２０である「ノード８」に対して、図１７の（Ｂ）に示す指令を実行させるように通知し、配下の下位マスタノードである「ノード２０」、「ノード２４」それぞれに第六サブクラスタ、第七サブクラスタそれぞれの使用可能なノード数の調査実行を指示させ、これにより、それぞれのサブクラスタで使用可能なノード数が「４」であることを検知する（図１３の（Ｃ）の（３）参照）。
【０１１０】
ここで、動的割り付け部１３ｂは、第三サブクラスタおよびその配下のサブクラスタにおいて合計１２個の使用可能なノード数があり、第三グループのデータ群を割り付け可能と判定するが、第三サブクラスタ内には４つのデータ群しか割り付けられないので、割り付けることが出来ない余り１つのデータ群を第三サブクラスタの配下にあるサブクラスタ内のノードに割り付ける。例えば、配下のサブクラスタのうち、左側にある第六サブクラスタの番号の若い「ノード２０」に余り１つのデータ群を割り付けると判定する。この判定に基づいて、動的割り付け部１３ｂは、第三グループのデータ群を第三サブクラスタに転送し（図１７の（Ｄ）に示す指令を実行）、さらに、第三サブクラスタの下位マスタノード２０である「ノード２０」に対して、図１７の（Ｄ）に示す指令を実行するように指示を出すことで、第六サブクラスタの下位マスタノード２０である「ノード２０」に、余り１つのデータ群を第六サブクラスタに転送する。
【０１１１】
それとともに、動的割り付け部１３ｂは、第三サブクラスタの下位マスタノード２０である「ノード２０」に対して、図１７の（Ｃ）に示す指令を実行するように指示を出すことで、「ノード８〜１１」にデータ群を割り付けさせ、同様に、第六サブクラスタの下位マスタノード２０である「ノード２０」に対して、図１７の（Ｃ）に示す指令を実行するように指示を出すことで、「ノード２０」にデータ群を割り付けさせる。
【０１１２】
なお、後述するように、第三サブクラスタの下位マスタノード２０である「ノード８」は、自身が保持する収容ノード情報における「ノード８〜１１」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、第六サブクラスタの下位マスタノード２０である「ノード２０」は、自身が保持する収容ノード情報における「ノード２０」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する。
【０１１３】
［実施例２における下位マスタノードの構成］
次に、図１５、図１７および図１８を用いて、実施例２における下位マスタノードを説明する。図１５は、実施例２における下位マスタノードの構成を示すブロック図であり、図１７は、実施例２における動的割り付け部を説明するための図であり、図１８は、実施例２における収容ノード情報記憶部を説明するための図である。
【０１１４】
図１５に示すように、実施例２における下位マスタノード２０は、図４に示す実施例１における下位マスタノード２０と基本的に同様であり、動的割り付け部２３ｂと収容ノード情報更新部２３ｃとを新たに備えているところが相違する。以下、これらを中心に説明する。
【０１１５】
動的割り付け部２３ｂは、オリジナルマスタノード１０からの指令に基づいて、様々な処理を実行する。例えば、オリジナルマスタノード１０からの指令に基づいて、図１７の（Ｃ）に示す指令を実行して、転送されたデータ群を割り付けたり（図１３の（Ｂ）の（４）など参照）、図１７の（Ｂ）に示す指令を実行して、配下のサブクラスタを調査して、使用可能なノードを検索したり（図１３の（Ｃ）の（３）参照）、図１７の（Ｄ）に示す指令を実行して、配下のサブクラスタにデータ群を転送したりする（図１３の（Ｃ）の（４）における、第三サブクラスタから第六サブクラスタへのデータ群の転送など）。
【０１１６】
収容ノード情報更新部２３ｃは、動的割り付け部２３ｂによって変更されたノードの使用状況を更新する。例えば、第二サブクラスタの下位マスタノード２０である「ノード４」における収容ノード情報更新部２３ｃは、自身が保持する収容ノード情報における、「ノード４〜６」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、自身の収容ノード情報記憶部２２ａに格納する（図１８の（Ｂ）の右側参照）。
【０１１７】
また、第三サブクラスタの下位マスタノード２０である「ノード８」における収容ノード情報更新部２３ｃは、自身が保持する収容ノード情報における「ノード８〜１１」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、自身の収容ノード情報記憶部２２ａに格納する（図１８の（Ｃ）の右側参照）。
【０１１８】
また、第六サブクラスタの下位マスタノード２０である「ノード２０」における収容ノード情報更新部２３ｃは、自身が保持する収容ノード情報における「ノード２０」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、自身の収容ノード情報記憶部２２ａに格納する（図１８の（Ｄ）の右側参照）。
【０１１９】
［実施例２におけるオリジナルマスタノードによる処理の手順］
次に、図１９を用いて、実施例２におけるオリジナルマスタノードによる処理を説明する。図１９は、実施例２におけるオリジナルマスタノードの処理の手順を説明するための図である。
【０１２０】
まず、実施例２におけるオリジナルマスタノード１０は、並列プログラムのメインルーチン実行中に指示文が検出されると（ステップＳ１９０１肯定）、動的割り付け部１３ｂは、メインルーチンの実行を中止し、指示文に記載されたデータ群のグループ総数（ｇ個）およびグループごとのデータ群の個数を抽出する（ステップＳ１９０２）。例えば、動的割り付け部１３ｂは、図１６に示す指示文を検出すると、メインルーチンの実行を中止し、並列処理に用いられる均等サイズのデータ群として、総数が１０個であり、データ通信が閉じているグループ構造としては、第一グループ（２個）と、第二グループ（３個）と、第三グループ（５個）の３個（ｇ＝３）であることを抽出する。
【０１２１】
そして、動的割り付け部１３ｂは、第一グループのデータ群（２個）の割り付けを開始し（ステップＳ１９０３）、最上位サブクラスタ（第一サブクラスタ）のノードに割り付け可能であるかどうかを判定する（ステップＳ１９０４）。すなわち、動的割り付け部１３ｂは、図１７の（Ａ）に示す指令を実行して、最上位サブクラスタ（第一サブクラスタ）のノードに割り付け可能であるかどうかを判定する。
【０１２２】
ここで、動的割り付け部１３ｂは、最上位サブクラスタ（第一サブクラスタ）のノードに割り付け可能であると判定した場合には（ステップＳ１９０４肯定）、最上位サブクラスタのノードにデータ群を割り付ける（ステップＳ１９０５）。例えば、図１３の（Ａ）に示すように、第一グループのデータ群（２個）が、第一サブクラスタに割り付け可能であるので、動的割り付け部１３ｂは、最上位サブクラスタ（第一サブクラスタ）の「ノード０」および「ノード１」に割り付ける。
【０１２３】
これに反して、動的割り付け部１３ｂは、最上位サブクラスタ（第一サブクラスタ）のノードに割り付け不可能であると判定した場合には（ステップＳ１９０４否定）、下位サブクラスタの使用可能なノード数調査を行なう（ステップＳ１９０６）。
【０１２４】
例えば、図１３の（Ｂ）に示すように、動的割り付け部１３ｂは、第二グループのデータ群（３個）が、第一サブクラスタに割り付け不可能であるので、図１７の（Ｂ）に示す指令を実行して、下位サブクラスタの使用可能なノード数調査を行い、第二サブクラスタおよび第三サブクラスタともに、使用可能なノード数が「４」であることを検知する。また、第三グループのデータ群（５個）が、第一サブクラスタに割り付け不可能であるので、図１７の（Ｂ）に示す指令を実行して、下位サブクラスタの使用可能なノード数調査を行い、さらに、当該下部サブクラスタの下位マスタノードに、図１７の（Ｂ）に示す指令を実行するように指示を出して、図１３の（Ｃ）の（３）に示すように、第三サブクラスタと第六サブクラスタと第七サブクラスタとで、使用可能なノード数が合計１２個であることを検知する。
【０１２５】
そして、動的割り付け部１３ｂは、下位サブクラスタのノードに割り付け可能と判定した場合には（ステップＳ１９０７肯定）、下位サブクラスタに当該グループのデータ群を転送し、割り付けを実行させる（ステップＳ１９０８）。
【０１２６】
例えば、動的割り付け部１３ｂは、第二グループのデータ群（３個）が、第二サブクラスタおよび第三サブクラスタともに割り付け可能であるので、図１７の（Ｄ）に示す指示を実行して、左側の第二サブクラスタに当該グループのデータ群を転送する（図１３の（Ｂ）の（３）参照）し、第二サブクラスタの下位マスタノード２０に、図１７の（Ｃ）に示す指示を実行するように指令を出して、割り付けを実行させる。また、第三グループのデータ群（５個）が、第三サブクラスタと第六サブクラスタと第七サブクラスタとで割り付け可能であるので、図１７の（Ｄ）に示す指示を実行して、第三サブクラスタに第三グループのデータ群を転送し、図１７の（Ｃ）に示す指示を実行するように指令を出して、４つのデータ群の割り付けを実行させる。さらに、第三サブクラスタの下位マスタノード２０に、図１７の（Ｄ）に示す指示を実行するように指令を出して、余り１個のデータ群を第六サブクラスタに転送させ、図１７の（Ｃ）に示す指示を実行するように指令を出して、割り付けを実行させる。
【０１２７】
続いて、動的割り付け部１３ｂは、下位マスタノードから割り付け完了通知を受信すると（ステップＳ１９０９肯定）、当該グループのデータ群の割り付けを終了する。
【０１２８】
そののち、動的割り付け部１３ｂは、すべてのグループのデータ群の割り付けが終了したか否かを判定し（ステップＳ１９１１）、すべてのグループのデータ群の割り付けが終了していない場合には（ステップＳ１９１１否定）、次のグループに対して処理を行うと判定し（ステップＳ１９１２）、当該次のグループのデータ群の割り付けを開始する（ステップＳ１９０３）。
【０１２９】
これに反して、すべてのグループのデータ群の割り付けが終了した場合には（ステップＳ１９１１肯定）、並列プログラムのメインルーチンの実行を再開し（ステップＳ１９１３）、当該メインルーチンが終了すると（ステップＳ１９１４肯定）、図１０に示すステップＳ１００２の後処理を実行する。なお、当該メインルーチンが終了しない場合は（ステップＳ１９１４否定）、動的割り付け部１３ｂは、引き続き、指示文の検出を行なう（ステップＳ１９０１）。
【０１３０】
なお、動的割り付け部１３ｂは、下位サブクラスタのノードに割り付け不可能と判定した場合には（ステップＳ１９０７否定）、データ群を静的に割り付け（ステップＳ１９１０）、並列プログラムのメインルーチンの実行を再開する（ステップＳ１９１３）。また、動的割り付け部１３ｂは、並列プログラムのメインルーチン実行中に指示文が検出されない場合は（ステップＳ１９０１否定）、並列プログラムのメインルーチンが終了するまで待機する。
【０１３１】
［実施例２における下位マスタノードによる処理の手順］
次に、図２０を用いて、実施例２における下位マスタノードによる処理を説明する。図２０は、実施例２における下位マスタノードの処理の手順を説明するための図である。
【０１３２】
まず、実施例２における下位マスタノード２０は、並列プログラムのメインルーチンが終了していないと判定し（ステップＳ２０００否定）、並列プログラムのメインルーチン実行中止の通知をオリジナルマスタノード１０から受け付けると（ステップＳ２００１肯定）、動的割り付け部２３ｂは、自身が格納される下位マスタノード２０より上位にあるマスタノードからの使用可能なノード数の調査要求を受け付けるまで待機する。
【０１３３】
そして、動的割り付け部２３ｂは、自身が格納される下位マスタノード２０より上位にあるマスタノードからの使用可能なノード数の調査要求を受け付けた場合は（ステップＳ２００２肯定）、収容ノード情報記憶部２２ａが記憶する収容ノード情報を参照して、使用可能なノード数を調査し（図１７の（Ａ）に示す指示）、当該使用可能なノード数をオリジナルマスタノード１０に通知する（ステップＳ２００３）。これに反して、動的割り付け部２３ｂは、自身が格納される下位マスタノード２０より上位にあるマスタノードからの使用可能なノード数の調査要求を受け付けない場合は（ステップＳ２００２否定）、並列プログラムのメインルーチンの終了判定を行なう（ステップＳ２０００）。
【０１３４】
続いて、動的割り付け部２３ｂは、自身が格納される下位マスタノード２０より上位にあるマスタノードから、さらに下位に位置するサブクラスタにおける使用可能なノード数の調査要求を受け付けた場合は（ステップＳ２００４肯定）、下位サブクラスタの下位マスタノードに使用可能なノード数の調査を指示し（図１７の（Ｂ）に示す指示）、調査結果をオリジナルマスタノード１０に通知し（ステップＳ２００５）、オリジナルマスタノード１０から転送されたデータ群を受信するまで待機する。
【０１３５】
これに反し、動的割り付け部２３ｂは、自身が格納される下位マスタノード２０より上位にあるマスタノードから、さらに下位に位置するサブクラスタにおける使用可能なノード数の調査要求を受け付けなかった場合は（ステップＳ２００４否定）、オリジナルマスタノード１０から転送されたデータ群を受信するまで待機する。
【０１３６】
そして、動的割り付け部２３ｂは、オリジナルマスタノード１０から転送されたデータ群を受信した場合は（ステップＳ２００６肯定）、オリジナルマスタノード１０からの指示に従って、図１７の（Ｃ）に示す指示を実行し、自サブクラスタのノードに、受信したデータ群を割り付ける（ステップＳ２００７）。
【０１３７】
これに反し、動的割り付け部２３ｂは、オリジナルマスタノード１０から転送されたデータ群を受信しない場合は（ステップＳ２００６否定）、メインルーチンの終了判定を行う（ステップＳ２０００）。
【０１３８】
さらに、動的割り付け部２３ｂは、オリジナルマスタノード１０に割り付け完了を通知し（ステップＳ２００８）、オリジナルマスタノード１０からの並列プログラムのメインルーチン実行再開通知を受け付ける（ステップＳ２００９）。
【０１３９】
そののち、並列プログラムのメインルーチンが終了すると（ステップＳ２０００肯定）、下位マスタノード２０は、図１１に示すステップＳ１１０２の後処理を実行する。
【０１４０】
［実施例２の効果］
上記したように、実施例２によれば、オリジナルマスタノード１０として設定されている場合に、並列処理に用いられるデータ群を演算コストおよび通信コストに基づいてグループ分けすることを指示する指示文が当該並列処理を行うプログラムに検出された際に、演算コストおよび通信コストが抑えられるように、指示文に記載される同一グループのデータ群をノードに割り付けるので、演算コストおよび通信コストに基づいてグループ分けしたデータ群を、例えば、最上位にある第一サブクラスタ内にあるノードにまとめて割り付けることができ、効率のよい並列処理が可能になる。
【０１４１】
また、実施例２によれば、マスタノード接続構成情報を参照して、同一グループのデータ群を同一サブクラスタ内のノードに割り付けるので、演算コストおよび通信コストに基づいてグループ分けしたデータ群を同一サブクラスタ内にあるノードにまとめて割り付けることができ、効率のよい並列処理が可能になる。
【０１４２】
また、実施例２によれば、同一グループのデータ群のすべてを同一サブクラスタ内のノードに割り付けできなかった場合には、割り付けられなかったデータ群を、当該サブクラスタの配下にあるサブクラスタ内のノードに割り付けるので、同一サブクラスタ内にあるノードに割り振られなかった同一グループのデータ群を、過剰な通信コストの発生することのない配下のサブクラスタ内のノードにまとめて割り付けることができ、効率のよい並列処理が可能になる。
【実施例３】
【０１４３】
上述した実施例２では、指示文に記載されるグループ分けに基づいて、データ群の割り付けを行なう場合について説明したが、実施例３では、オリジナルマスタノードと下位マスタノードとに保持される収容ノード情報にある各ノードの演算コストをさらに参照して、データ群の割り付けを行なう場合について説明する。
【０１４４】
［実施例３におけるノードの概要および特徴］
まず最初に、図２１を用いて、実施例３におけるノードの主たる特徴を具体的に説明する。図２１は、実施例３におけるノードの概要および特徴を説明するための図である。
【０１４５】
実施例３におけるマスタノードそれぞれは、サブクラスタごとに収容されるノードすべての演算コストをさらに保持する。例えば、図２１の（Ａ）に示すように、最上位にある第一サブクラスタにおけるオリジナルマスタノードである「ノード０」は、収容ノード情報として、使用状況（ｓｔａｔｕｓ）を示す使用可能（Ｉｄｌｅ）もしくは使用不可（Ｂｕｓｙ）の情報に加えて、「ノード０〜４」における演算コストから決定されるクラス分けの情報「ノード０：ＣｌａｓｓＡ、ノード１：ＣｌａｓｓＣ、ノード２：ＣｌａｓｓＣ、ノード３：ＣｌａｓｓＢ」を保持する。なお、本実施例においては、ＣｌａｓｓＡ、ＣｌａｓｓＢ、ＣｌａｓｓＣの順に、演算コストが優れているものとする。
【０１４６】
なお、本実施例においては、並列処理に用いられるデータ群として、実施例２と同様のものが用いられ、指示文検出時においては、実施例２と同様に、第一サブクラスタのノード２のみ使用不可（Ｂｕｓｙ）であり、その他のノードは使用可能（Ｉｄｌｅ）であるとする。
【０１４７】
そして、実施例３におけるオリジナルマスタノード（ノード０）は、収容ノード情報にある演算コストから決定されるクラス分けの情報をさらに参照して、同一グループのデータ群を割り付ける。
【０１４８】
すなわち、実施例３におけるオリジナルマスタノード（ノード０）は、実施例２と同様に、並列プログラムのメインルーチン実行中に、図１６に示した１０個のデータ群について記載された指示文を検出すると、並列プログラムのメインルーチン実行を中断し、当該指示文に記載される情報を抽出した後に、第一グループのデータ群（ＡおよびＢからなる２個）を割り付ける。その際、自身の収容ノード情報を参照して、第一サブクラスタの調査を行なって、使用可能なノード数が「３」であることを検知し（図２１の（Ａ）の（１）参照）、第一グループのデータ群をまとめて割り付け可能と判定するが、実施例３においては、各ノードの演算コストから決定されるクラス分けをさらに参照して、「ノード０」と「ノード３」とにデータ群を割り付ける（図２１の（Ａ）の（２）参照）。そして、自身が保持する収容ノード情報における、「ノード０」と「ノード３」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する（図２１の（Ａ）の（３）参照）。
【０１４９】
また、実施例３におけるオリジナルマスタノード（ノード０）は、図２１の（Ｂ）に示すように、第二グループのデータ群（Ｃ、ＤおよびＥからなる３個）を割り付ける際に、まず、自身の収容ノード情報を参照して、第一サブクラスタの調査を行なって、使用可能なノード数が「１」であることを検知し（図２１の（Ｂ）の（１）参照）、第一サブクラスタに割り付け不可と判定するが、引き続き、マスタノード接続構成情報を参照して、配下の下位マスタノードである「ノード４」および「ノード８」に対して、第二サブクラスタおよび第三サブクラスタの調査を実行させ、それぞれのサブクラスタで使用可能なノード数が「４」であることを検知する（図２１の（Ｂ）の（２）参照）。
【０１５０】
ここで、実施例３におけるオリジナルマスタノード（ノード０）は、第二サブクラスタおよび第三サブクラスタともに割り付けが可能であるので、例えば、左側にあるサブクラスタ（第二サブクラスタ）に対して、第二グループのデータ群を転送し（図２１の（Ｂ）の（３）参照）、データ群を割り付けるが、実施例２とは異なり、第二サブクラスタにおける下位マスタノードである「ノード４」が保持する演算コストのクラス分けを参照して、「ノード４」と「ノード５」と「ノード７」とにデータ群を割り付ける（図２１の（Ｂ）の（４）参照）。そして、第二サブクラスタのマスタノードである「ノード４」は、自身が保持する収容ノード情報における、「ノード４」と「ノード５」と「ノード７」との情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する（図２１の（Ｂ）の（５）参照）。
【０１５１】
また、実施例３におけるオリジナルマスタノード（ノード０）は、図２１の（Ｃ）に示すように、第三グループのデータ群（Ｆ、Ｇ、Ｈ、ＩおよびＪからなる５個）を割り付ける際に、まず、自身の収容ノード情報を参照して、第一サブクラスタの調査を行なって、使用可能なノード数が「１」であることを検知し（図２１の（Ｃ）の（１）参照）、第一サブクラスタに割り付け不可と判定し、引き続き、マスタノード接続構成情報を参照して、配下の下位マスタノードである「ノード４」および「ノード８」に対して、第二サブクラスタおよび第三サブクラスタの調査を実行させ、それぞれのサブクラスタで使用可能なノード数が「１」および「４」であることを検知する（図２１の（Ｃ）の（２）参照）。さらに、実施例３におけるオリジナルマスタノード（ノード０）は、使用可能なノード数の多い第三サブクラスタの「ノード８」に対して、配下の下位マスタノードである「ノード２０」、「ノード２４」それぞれに第六サブクラスタ、第七サブクラスタそれぞれの使用可能なノード数の調査実行を指示させ、これにより、それぞれのサブクラスタで使用可能なノード数が「４」であることを検知する（図２１の（Ｃ）の（３）参照）。
【０１５２】
ここで、実施例３におけるオリジナルマスタノード（ノード０）は、第三サブクラスタおよびその配下のサブクラスタにおいて合計１２個の使用可能なノード数があり、第三グループのデータ群を割り付け可能と判定するが、第三サブクラスタ内には４つのデータ群しか割り付けられないので、割り付けることが出来ない余り１つのデータ群を第三サブクラスタの配下にあるサブクラスタ内のノードに割り付ける。
【０１５３】
この際、実施例３におけるオリジナルマスタノード（ノード０）は、配下のサブクラスタのうち、左側にある第六サブクラスタに余り１つのデータ群を割り付けると判定し、第三グループのデータ群をそれぞれ第三サブクラスタと第六サブクラスタとに転送し、割り付けを行なう（図２１の（Ｃ）の（４）参照）。ここで、実施例２と同様に、第三サブクラスタの「ノード８〜１１」に４つのデータ群を割り付けるが、第六サブクラスタにおいては、実施例２と異なり、当該サブクラスタの下位マスタノードである「ノード２０」が保持する演算コストのクラス分けを参照して、「ノード２１」に割り付けを行なう（図２１の（Ｃ）の（４）参照）。そして、第三サブクラスタの下位マスタノードである「ノード８」は、自身が保持する収容ノード情報における「ノード８〜１１」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、第六サブクラスタの下位マスタノードである「ノード２０」は、自身が保持する収容ノード情報における「ノード２１」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する（図２１の（Ｃ）の（５）参照）。
【０１５４】
なお、本実施例では、演算コストから決定されるクラス分けをさらに参照して割り付けを行なう場合について説明したが、本発明はこれに限定されるものではなく、通信コストから決定されるクラス分けをさらに参照して割り付けを行なう場合であっても、両者のクラス分けをさらに参照して割り付けを行なう場合であってもよい。
【０１５５】
このようなことから、実施例３におけるノードは、演算コストに基づいてクラス分けしたデータ群を、同一サブクラスタの中でも、演算コストが優れたノードに割り付けることができ、効率のよい並列処理が可能になる。
【０１５６】
［実施例３におけるオリジナルマスタノードの構成］
次に、図１４、図２２および図２３を用いて、実施例３におけるオリジナルマスタノードを説明する。図１４は、実施例２におけるオリジナルマスタノードの構成を示すブロック図であり、図２２は、実施例３における動的割り付け部を説明するための図であり、図２３は、実施例３における収容ノード情報記憶部を説明するための図である。
【０１５７】
図１４に示すように、実施例３におけるオリジナルマスタノード１０は、実施例２におけるオリジナルマスタノード１０と基本的に同様であるが、収容ノード情報記憶部１２ｂが記憶する内容と、動的割り付け部１３ｂが行なう処理の内容が異なる。以下、これらを中心に説明する。
【０１５８】
収容ノード情報記憶部１２ｂは、最上位サブクラスタに収容されるマスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報とともに、ノードすべての演算コストから決定されるクラス分けの情報をさらに保持する。具体的には、図２３の（Ａ）の左側の表に示すように、収容ノード情報記憶部１２ｂは、第一サブクラスタ（木構造の最上位にあるサブクラスタ）のオリジナルマスタノード１０として設定された「ノード０」と、その制御下にある「スレーブノード：ノード１〜３」との４つからなるノードそれぞれの演算コストから決定されるクラス分けの情報を保持する（ノード０：ＣｌａｓｓＡ、ノード１：ＣｌａｓｓＣ、ノード２：ＣｌａｓｓＣ、ノード３：ＣｌａｓｓＢ）。なお、図２３においては、「ＩＰアドレス」を省略して記載している。
【０１５９】
動的割り付け部１３ｂは、収容ノード情報にある演算コストから決定されるクラス分けの情報をさらに参照して、同一グループのデータ群を割り付ける。すなわち、実施例３における動的割り付け部１３ｂは、データ群の割り付けに際して、図２２の（Ｅ）に示す指示をさらに実行して、収容ノード情報記憶部１２ｂが記憶する演算コストから決定されるクラス分けの情報を検出し、これを参照して、図２２の（Ｃ）に示す指示をさらに実行して、データ群を割り付ける（例えば、図２１の（Ａ）の（２）参照）。
【０１６０】
また、動的割り付け部１３ｂは、配下のサブクラスタの下位マスタノード２０に、図２２の（Ｂ）に示す指示を実行する際に、さらに当該下位マスタノード２０に対して、図２２の（Ｅ）に示す指示を実行するように指令を出して、検出された演算コストから決定されるクラス分けの情報に基づいて、割り付けの指令を行なう（例えば、図２１の（Ｂ）の（４）参照）。
【０１６１】
また、動的割り付け部１３ｂは、配下のサブクラスタの下位マスタノード２０に、当該配下のサブクラスタのさらに下位のサブクラスタの下位マスタノード２０に対して、図２２の（Ｂ）に示す指示を実行するように指令を出す際に、さらに、当該下位マスタノード２０に対して、図２２の（Ｅ）に示す指示を実行するように指令を出して、検出された演算コストから決定されるクラス分けの情報に基づいて、割り付けの指令を行なう（例えば、図２１の（Ｃ）の（４）参照）。
【０１６２】
収容ノード情報更新部１３ｃは、動的割り付け部１３ｂによって変更されたノードの使用状況を更新する。すなわち、「ノード０」と「ノード３」の使用状況（ｓｔａｔｕｓ）を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新して収容ノード情報記憶部１２ｂに格納する（図２３の（Ａ）の右側参照）。
【０１６３】
［実施例３における下位マスタノードの構成］
次に、図１５、図２２および図２３を用いて、実施例３における下位マスタノードを説明する。図１５は、実施例２における下位マスタノードの構成を示すブロック図であり、図２２は、実施例３における動的割り付け部を説明するための図であり、図２３は、実施例３における収容ノード情報記憶部を説明するための図である。
【０１６４】
図１５に示すように、実施例３における下位マスタノード２０は、実施例２における下位マスタノード２０と基本的に同様であるが、収容ノード情報記憶部２２ａが記憶する内容と、動的割り付け部２３ｂが行なう処理の内容が異なる。以下、これらを中心に説明する。
【０１６５】
収容ノード情報記憶部２２ａは、下位サブクラスタごとに収容される下位マスタノード２０および当該下位マスタノード２０の制御下にあるスレーブノードすべてを一意に識別する情報とともに、ノードすべての演算コストをさらに保持する。例えば、図２３の（Ｂ）の左側の表に示すように、第二サブクラスタのおける下位マスタノード２０である「ノード４」にある収容ノード情報記憶部２２ａは、下位マスタノード２０として設定された「ノード４」と、その制御下にある「スレーブノード：ノード５〜７」との４つからなるノードそれぞれの演算コストから決定されるクラス分けの情報を保持する（ノード４：ＣｌａｓｓＡ、ノード５：ＣｌａｓｓＢ、ノード６：ＣｌａｓｓＣ、ノード７：ＣｌａｓｓＢ）。なお、図２３においては、「ＩＰアドレス」を省略して記載している。
【０１６６】
動的割り付け部２３ｂは、実施例２と同様に、オリジナルマスタノード１０からの指令に基づいて、様々な処理を実行するが、実施例２とは異なり、自身のサブクラスタに収容されるノードの演算コストに基づくクラス分けを検出してオリジナルマスタノード１０に通知する。すなわち、実施例３における動的割り付け部２３ｂは、オリジナルマスタノード１０からの指令に基づいて、図２２の（Ｅ）の指令を実行して、自身のサブクラスタに収容されるノードの演算コストに基づくクラス分けを検出してオリジナルマスタノード１０に通知する。
【０１６７】
収容ノード情報更新部２３ｃは、動的割り付け部２３ｂによって変更されたノードの使用状況を更新する。例えば、第二サブクラスタの下位マスタノード２０である「ノード４」における収容ノード情報更新部２３ｃは、自身が保持する収容ノード情報における、「ノード４、５、７」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、自身の収容ノード情報記憶部２２ａに格納する（図２３の（Ｂ）の右側参照）。
【０１６８】
また、第三サブクラスタの下位マスタノード２０である「ノード８」における収容ノード情報更新部２３ｃは、自身が保持する収容ノード情報における「ノード８〜１１」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、自身の収容ノード情報記憶部２２ａに格納する（図２３の（Ｃ）の右側参照）。
【０１６９】
また、第六サブクラスタの下位マスタノード２０である「ノード２０」における収容ノード情報更新部２３ｃは、自身が保持する収容ノード情報における「ノード２１」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、自身の収容ノード情報記憶部２２ａに格納する（図２３の（Ｄ）の右側参照）。
【０１７０】
［実施例３におけるオリジナルマスタノードによる処理の手順］
次に、図１９を用いて、実施例３におけるオリジナルマスタノードによる処理を説明する。図１９は、実施例２におけるオリジナルマスタノードの処理の手順を説明するための図である。
【０１７１】
実施例３におけるオリジナルマスタノード１０の処理の手順は、基本的に、実施例２におけるオリジナルマスタノードの処理の手順と同様であり、ステップＳ１９０５とステップＳ１９０８の処理の内容が異なる。以下、これを中心に説明する。
【０１７２】
動的割り付け部１３ｂは、最上位サブクラスタ（第一サブクラスタ）のノードに割り付け可能であると判定した場合には（ステップＳ１９０４肯定）、最上位サブクラスタのノードにデータ群を割り付けるが（ステップＳ１９０５）、その際、自身の収容ノード情報が保持する各ノードの演算コストに基づくクラス分けを検出し、検出されたクラス分けを参照して、データ群の割り付けを行なう。
【０１７３】
また、動的割り付け部１３ｂは、下位サブクラスタのノードに割り付け可能と判定した場合には（ステップＳ１９０７肯定）、下位サブクラスタに当該グループのデータ群を転送し、割り付けを実行させるが（ステップＳ１９０８）、その際、当該下位サブクラスタ収容ノード情報が保持する各ノードの演算コストに基づくクラス分けを検出し、検出されたクラス分けを参照して、データ群の割り付けを実行させる。
【０１７４】
［実施例３における下位マスタノードによる処理の手順］
次に、図２０を用いて、実施例３における下位マスタノードによる処理を説明する。図２０は、実施例２における下位マスタノードの処理の手順を説明するための図である。
【０１７５】
実施例３における下位マスタノード２０の処理の手順は、基本的に、実施例２における下位マスタノード２０の処理の手順と同様であり、ステップＳ２００３とステップＳ２００５との処理の内容が異なる。以下、これを中心に説明する。
【０１７６】
動的割り付け部２３ｂは、自身が格納される下位マスタノード２０より上位にあるマスタノードからの使用可能なノード数の調査要求を受け付けた場合は（ステップＳ２００２肯定）、収容ノード情報記憶部２２ａが記憶する収容ノード情報を参照して、使用可能なノード数を調査し（図１７の（Ａ）に示す指示）、当該使用可能なノード数をオリジナルマスタノード１０に通知する（ステップＳ２００３）が、その際、オリジナルマスタノード１０からの指令により、図２２の（Ｅ）の指示を実行して、収容ノード情報記憶部２２ａが記憶する、各ノードの演算コストに基づくクラス分けを検出し、検出したクラス分けの情報も、オリジナルマスタノード１０に通知する。
【０１７７】
また、動的割り付け部２３ｂは、自身が格納される下位マスタノード２０より上位にあるマスタノードから、さらに下位に位置するサブクラスタにおける使用可能なノード数の調査要求を受け付けた場合は（ステップＳ２００４肯定）、下位サブクラスの下位マスタノード２０に使用可能なノード数の調査を指示し（図１７の（Ｂ）に示す指示）、調査結果をオリジナルマスタノード１０に通知するが（ステップＳ２００５）、その際、オリジナルマスタノード１０は、図２２の（Ｅ）の指示を実行する指令を、当該下位サブクラスの下位マスタノード２０に対しても行なっており、当該下位サブクラスの下位マスタノード２０における収容ノード情報記憶部２２ａが記憶する各ノードの演算コストに基づくクラス分けの情報も、オリジナルマスタノード１０に通知する。
【０１７８】
［実施例３の効果］
上記したように、実施例３によれば、サブクラスタごとに収容されるノードすべての演算コストに基づくクラス分けの情報をさらに保持し、オリジナルマスタノード１０は、サブクラスタごとの演算コストに基づくクラス分けの情報をさらに参照して、同一グループのデータ群を割り付けるので、演算コストおよび／または通信コストに基づいてクラス分けしたデータ群を、同一サブクラスタの中でも、演算コストが優れたノードに割り付けることができ、効率のよい並列処理が可能になる。
【実施例４】
【０１７９】
上述した実施例３では、オリジナルマスタノードと下位マスタノードとに保持される収容ノード情報にある各ノードの演算コストをさらに参照して、データ群の割り付けを行なう場合について説明したが、実施例４では、オリジナルマスタノードのマスタノード接続構成情報にある各サブクラスタ間の通信性能をさらに参照して、データ群の割り付けを行なう場合について説明する。
【０１８０】
［実施例４におけるノードの概要および特徴］
まず最初に、図２４を用いて、実施例４におけるノードの主たる特徴を具体的に説明する。図２４は、実施例４におけるノードの概要および特徴を説明するための図である。
【０１８１】
実施例４におけるオリジナルマスタノードは、オリジナルマスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報として、各サブクラスタ間の通信性能をさらに保持する。例えば、図２４の（Ｂ）に示すように、第一サブクラスタと第二サブクラスタとの間の通信性能は、「１００Ｍｂｐｓ」であり、第一サブクラスタと第三サブクラスタとの間の通信性能は、「１Ｇｂｐｓ」であるとする情報をさらに保持する。なお、本実施例では、第一サブクラスタと第三サブクラスタとの間の通信性能以外はすべて、「１００Ｍｂｐｓ」であるとする。
【０１８２】
なお、本実施例においては、並列処理に用いられるデータ群として、実施例２と同様のものが用いられ、指示文検出時においては、実施例２と同様に、第一サブクラスタのノード２のみ使用不可（Ｂｕｓｙ）であり、その他のノードは使用可能（Ｉｄｌｅ）であるとする。また、実施例３と同様に、マスタノードそれぞれは、収容ノード情報として、サブクラスタごとに収容されるノードすべての演算コストに基づいたクラス分けの情報をさらに保持する。
【０１８３】
また、実施例４におけるオリジナルマスタノード（ノード０）は、実施例２と同様に、並列プログラムのメインルーチン実行中に、図１６に示した１０個のデータ群について記載された指示文を検出すると、並列プログラムのメインルーチン実行を中断し、当該指示文に記載される情報を抽出した後に、第一グループのデータ群（ＡおよびＢからなる２個）を割り付ける。その際の手順である図２４の（Ａ）の（１）〜（３）は、図２１の（Ａ）の（１）〜（３）と同様であるので、説明を省略する。
【０１８４】
そして、実施例４におけるオリジナルマスタノードは、各サブクラスタ間の通信性能をさらに参照して、同一グループのデータ群を割り付ける。
【０１８５】
すなわち、実施例４におけるオリジナルマスタノード（ノード０）は、図２４の（Ｂ）に示すように、第二グループのデータ群（Ｃ、ＤおよびＥからなる３個）を割り付ける際に、まず、自身の収容ノード情報を参照して、第一サブクラスタの調査を行なって、使用可能なノード数が「１」であることを検知し（図２４の（Ｂ）の（１）参照）、第一サブクラスタに割り付け不可と判定するが、引き続き、マスタノード接続構成情報を参照して、配下の下位マスタノードである「ノード４」および「ノード８」に対して、第二サブクラスタおよび第三サブクラスタの調査を実行させ、それぞれのサブクラスタで使用可能なノード数が「４」であることを検知する（図２４の（Ｂ）の（２）参照）。
【０１８６】
ここで、実施例４におけるオリジナルマスタノード（ノード０）は、実施例２および実施例３とは異なり、通信性能を参照して、サブクラスタ間の通信性能が「１Ｇｂｐｓ」である第三サブクラスタに対して、第二グループのデータ群を転送し（図２４の（Ｂ）の（３）参照）、データ群の割り付けを行なう。その際、実施例３と同様に、第三サブクラスタにおける下位マスタノードである「ノード８」が保持する演算コストのクラス分けを参照して、「ノード８」と「ノード９」と「ノード１０」とにデータ群を割り付ける（図２４の（Ｂ）の（４）参照）。そして、第三サブクラスタのマスタノードである「ノード８」は、自身が保持する収容ノード情報における、「ノード８」と「ノード９」と「ノード１０」との情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する（図２４の（Ｂ）の（５）参照）。
【０１８７】
また、実施例４におけるオリジナルマスタノード（ノード０）は、図２４の（Ｃ）に示すように、第三グループのデータ群（Ｆ、Ｇ、Ｈ、ＩおよびＪからなる５個）を割り付ける際に、まず、自身の収容ノード情報を参照して、第一サブクラスタの調査を行なって、使用可能なノード数が「１」であることを検知し（図２４の（Ｃ）の（１）参照）、第一サブクラスタに割り付け不可と判定し、引き続き、マスタノード接続構成情報を参照して、配下の下位マスタノードである「ノード４」および「ノード８」に対して、第二サブクラスタおよび第三サブクラスタの調査を実行させ、それぞれのサブクラスタで使用可能なノード数が「４」および「１」であることを検知する（図２４の（Ｃ）の（２）参照）。さらに、実施例４におけるオリジナルマスタノード（ノード０）は、使用可能なノード数の多い第二サブクラスタの「ノード４」に対して、配下の下位マスタノードである「ノード１２」、「ノード１６」それぞれに第四サブクラスタ、第五サブクラスタそれぞれの使用可能なノード数の調査実行を指示させ、これにより、それぞれのサブクラスタで使用可能なノード数が「４」であることを検知する（図２４の（Ｃ）の（３）参照）。
【０１８８】
ここで、実施例４におけるオリジナルマスタノード（ノード０）は、第二サブクラスタおよびその配下のサブクラスタにおいて合計１２個の使用可能なノード数があり、第三グループのデータ群を割り付け可能と判定するが、第二サブクラスタ内には４つのデータ群しか割り付けられないので、割り付けることが出来ない余り１つのデータ群を第二サブクラスタの配下にあるサブクラスタ内のノードに割り付ける。
【０１８９】
この際、実施例４におけるオリジナルマスタノード（ノード０）は、マスタノード接続構成情報を参照して、「第二サブクラスタと第四サブクラスタ」間および「第二サブクラスタと第五サブクラスタ」間の通信性能が両者とも「１００Ｍｂｐｓ」と同じであるので、左側にある第四サブクラスタに余り１つのデータ群を割り付けると判定し、第三グループのデータ群をそれぞれ第二サブクラスタと第四サブクラスタとに転送し、割り付けを行なう（図２４の（Ｃ）の（４）参照）。ここで、第二サブクラスタの「ノード４〜７」に４つのデータ群を割り付けるが、第四サブクラスタにおいては、実施例３と同様に、当該サブクラスタの下位マスタノードである「ノード１２」が保持する演算コストのクラス分けを参照して、「ノード１５」に割り付けを行なう（図２４の（Ｃ）の（４）参照）。そして、第二サブクラスタの下位マスタノードである「ノード４」は、自身が保持する収容ノード情報における「ノード４〜７」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新し、第四サブクラスタの下位マスタノードである「ノード１２」は、自身が保持する収容ノード情報における「ノード１５」の情報を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新する（図２４の（Ｃ）の（５）参照）。
【０１９０】
このようなことから、実施例４におけるノードは、同一サブクラスタ内にあるノードに割り振られなかった同一グループのデータ群を、過剰な通信コストの発生することのない配下のサブクラスタ内のノードにまとめて割り付けることができ、効率のよい並列処理が可能になる。
【０１９１】
［実施例４におけるオリジナルマスタノードの構成］
次に、図１４、図２５〜２７を用いて、実施例４におけるオリジナルマスタノードを説明する。図１４は、実施例２におけるオリジナルマスタノードの構成を示すブロック図であり、図２５は、実施例４におけるマスタノード接続構成情報記憶部を説明するための図であり、図２６は、実施例４における動的割り付け部を説明するための図であり、図２７は、実施例４における収容ノード情報記憶部を説明するための図である。
【０１９２】
図１４に示すように、実施例４におけるオリジナルマスタノード１０は、実施例２および実施例３におけるオリジナルマスタノード１０と基本的に同様であるが、マスタノード接続構成情報記憶部１２ａが記憶する内容と、動的割り付け部１３ｂが行なう処理の内容が、実施例３と異なる。以下、これらを中心に説明する。
【０１９３】
マスタノード接続構成情報記憶部１２ａは、オリジナルマスタノード１０と下位のサブクラスタに設定された下位マスタノード２０との接続構成の情報であるマスタノード接続構成情報として、各サブクラスタ間の通信性能をさらに保持する。例えば、図２５に示すように、第一サブクラスタと第三サブクラスタとの間の通信性能は、「１Ｇｂｐｓ」であり、それ以外のサブクラスタ間の通信性能は、「１００Ｍｂｐｓ」であるとする情報を、図５に示す情報に加えて、さらに保持する。図２５に示すように、第一サブクラスタと第三サブクラスタとの間の通信性能以外はすべて、「１００Ｍｂｐｓ」である。
【０１９４】
動的割り付け部１３ｂは、マスタノード接続構成情報記憶部１２ａが記憶する各サブクラスタ間の通信性能をさらに参照して、同一グループのデータ群を割り付ける。すなわち、動的割り付け部１３ｂは、データ群を割り付ける際に、図２６の（Ｆ）に示す指示を実行して、各サブクラスタ間の通信性能を検知し、検知した情報に基づいて、より通信性能の優れているネットワークで接続されている下位のサブクラスタにデータ群を割り付ける。例えば、図２４の（Ｂ）に示すように、第二グループのデータ群を割り付ける場合、サブクラスタ間の通信性能が「１００Ｍｂｐｓ」である第二サブクラスタではなく、サブクラスタ間の通信性能が「１Ｇｂｐｓ」である第三サブクラスタに対して、第二グループのデータ群を転送し、データ群の割り付けを行なう（図２４の（Ｂ）の（３）参照）。
【０１９５】
なお、動的割り付け部１３ｂは、図２６に示す（Ａ）〜（Ｅ）の処理を実行するが、これらの処理は、実施例３における動的割り付け部１３ｂが行なう処理の内容（図２２に示す（Ａ）〜（Ｅ）の処理の内容）と同様であるので、説明を省略する。
【０１９６】
収容ノード情報更新部１３ｃは、動的割り付け部１３ｂによって変更されたノードの使用状況を更新する。すなわち、「ノード０」と「ノード３」の使用状況（ｓｔａｔｕｓ）を「Ｉｄｌｅ」から「Ｂｕｓｙ」に更新して収容ノード情報記憶部１２ｂに格納する。すなわち、図２７の（Ａ）の左表に示す情報を、図２７の（Ａ）の右表に示す情報に更新する。
【０１９７】
［実施例４における下位マスタノードの構成］
次に、図１５および図２７を用いて、実施例４における下位マスタノードを説明する。図１５は、実施例２における下位マスタノードの構成を示すブロック図であり、図２７は、実施例４における収容ノード情報記憶部を説明するための図である。
【０１９８】
図１５に示すように、実施例４における下位マスタノード２０は、実施例３における下位マスタノード２０と同様であるので、詳細な説明を省略するが、図２４に示す実施例において、収容ノード情報更新部２３ｃが更新する内容が、実施例３と異なるので、これについてのみ説明する。
【０１９９】
収容ノード情報更新部２３ｃは、動的割り付け部２３ｂによって変更されたノードの使用状況を更新する。例えば、第三サブクラスタの下位マスタノード２０である「ノード８」における収容ノード情報更新部２３ｃは、図２４の（Ｂ）に示す第二グループのデータ群の割り付けの場合、図２７の（Ｂ）の左表に示す情報を、図２７の（Ｂ）の右表に示す情報に更新する。
【０２００】
また、第二サブクラスタの下位マスタノード２０である「ノード４」における収容ノード情報更新部２３ｃは、図２４の（Ｃ）に示す第三グループのデータ群の割り付けの場合、図２７の（Ｃ）の左表に示す情報を、図２７の（Ｃ）の右表に示す情報に更新する。
【０２０１】
また、第四サブクラスタの下位マスタノード２０である「ノード１２」における収容ノード情報更新部２３ｃは、図２４の（Ｃ）に示す第三グループのデータ群の割り付けの場合、図２７の（Ｄ）の左表に示す情報を、図２７の（Ｄ）の右表に示す情報に更新する。
【０２０２】
［実施例４におけるオリジナルマスタノードによる処理の手順］
次に、図１９を用いて、実施例４におけるオリジナルマスタノードによる処理を説明する。図１９は、実施例２におけるオリジナルマスタノードの処理の手順を説明するための図である。
【０２０３】
実施例４におけるオリジナルマスタノード１０の処理の手順は、基本的に、実施例３におけるオリジナルマスタノードの処理の手順と同様であり、ステップＳ１９０８の処理の内容が異なる。以下、これを中心に説明する。
【０２０４】
動的割り付け部１３ｂは、下位サブクラスタのノードに割り付け可能と判定した場合には（ステップＳ１９０７肯定）、下位サブクラスタに当該グループのデータ群を転送し、割り付けを実行させるが（ステップＳ１９０８）、その際、当該下位サブクラスタ収容ノード情報が保持する各ノードの演算コストに基づくクラス分けを検出するとともに、マスタノード接続構成情報記憶部１２ａが記憶する各サブクラスタ間の通信性能を検出し、これらの情報を参照して、データ群の割り付けを実行させる。
【０２０５】
なお、実施例４における下位マスタノードによる処理の手順は、上述した実施例３における下位マスタノードによる処理の手順と同様であるので、説明を省略する。
【０２０６】
［実施例４の効果］
上記したように、実施例４によれば、マスタノード接続構成情報記憶部１２ａは、マスタノード接続構成情報として、各サブクラスタ間の通信性能をさらに保持し、この各サブクラスタ間の通信性能をさらに参照して、同一グループのデータ群を割り付けるので、演算コストおよび通信コストに基づいてクラス分けしたデータ群を、通信性能が高いネットワークで接続されるサブクラスタ内にあるノードに割り付けることができ、効率のよい並列処理が可能になる。
【実施例５】
【０２０７】
上述した実施例２〜４では、オリジナルマスタノードと下位マスタノードとでデータ群の割り付けを行なう場合について説明したが、実施例５では、データ群を割り付けて処理を実行した後、各ノードが処理に要した演算コストを算出する場合について説明する。
【０２０８】
［実施例５におけるノードの概要および特徴］
まず最初に、図２８を用いて、実施例５におけるノードの主たる特徴を具体的に説明する。図２８は、実施例５におけるノードの概要および特徴を説明するための図である。
【０２０９】
実施例５における各ノードは、割り付けられたデータ群に対する処理が終了した際に、当該処理に要した演算コストを算出する。例えば、第二サブクラスタに収容される「ノード４」は、指示文で指定した区間の走行が終了し、処理に要した演算コストとして、演算に要した時間（Ｃａｌｃ＿ｔｉｍｅ＝５１２ｓｅｃ）を算出する。
【０２１０】
そして、実施例５における各ノードは、算出した演算コストを、自身が収容されるサブクラスタにおけるマスタノードに、当該算出した演算コストを通知する。
【０２１１】
実施例５におけるマスタノードは、自身が制御するサブクラスタに収容されるノードすべてから通知された演算コストを、収容ノード情報として、更新して保持する。例えば、図２８に示すように、第二サブクラスタにおけるマスタノード（ノード４）は、自身を含む「ノード４〜７」が算出した演算コストを受信して、当該算出された演算コストを収容ノード情報に更新して保持する。すなわち、「ノード４」から「Ｃａｌｃ＿ｔｉｍｅ＝５１２ｓｅｃ」を受信し、「ノード５」から「Ｃａｌｃ＿ｔｉｍｅ＝４１８ｓｅｃ」を受信し、「ノード６」から「Ｃａｌｃ＿ｔｉｍｅ＝４４８ｓｅｃ」を受信し、「ノード７」から「Ｃａｌｃ＿ｔｉｍｅ＝４０９２ｓｅｃ」を受信して、これらの情報を収容ノード情報に加えて更新する。
【０２１２】
なお、「ノード７」のように、演算コストが高い（実行時間が長い）ものを検出した場合、ノードの状態（ｓｔａｔｕｓ）を「ｃａｕｔｉｏｎ」に変更してもよい。また、次回プログラムの指示文を検出して動的割り付けを変更する際に、「ｃａｕｔｉｏｎ」となっているノード（ノード７）は使用しないように、設定してもよい。
【０２１３】
このようなことから、実施例５におけるノードは、更新された各ノードの演算コストを参照することで、例えば、演算コストが増大しているノードの使用を回避するなど、次回のデータ群の割り付けの際に利用することができ、効率のよい並列処理が可能になる。
【０２１４】
［実施例５におけるオリジナルマスタノードの構成］
次に、図１４および図２９を用いて、実施例５におけるオリジナルマスタノードを説明する。図１４は、実施例２におけるオリジナルマスタノードの構成を示すブロック図であり、図２９は、実施例５における動的割り付け部を説明するための図である。
【０２１５】
図１４に示すように、実施例５におけるオリジナルマスタノード１０は、実施例２〜４におけるオリジナルマスタノード１０と基本的に同様であるが、動的割り付け部１３ｂおよび収容ノード情報更新部１３ｃが行なう処理の内容が、実施例２〜４と異なる。以下、これらを中心に説明する。
【０２１６】
動的割り付け部１３ｂは、指示文で指定した区間の走行が終了し、最上位サブクラスタに収容される各ノードが算出した演算コストを受信すると、収容ノード情報更新部１３ｃに対し、図２９の（Ｇ）に示す指令を実行する。
【０２１７】
収容ノード情報更新部１３ｃは、動的割り付け部１３ｂからの指令に基づいて、受信した各ノードの演算コストを、収容ノード情報記憶部１２ｂが記憶する収容ノード情報を更新して格納する。
【０２１８】
なお、動的割り付け部１３ｂは、他に、図２９に示す（Ａ）〜（Ｆ）の処理を実行するが、これらの処理は、実施例４における動的割り付け部１３ｂが行なう処理の内容（図２６に示す（Ａ）〜（Ｆ）の処理の内容）と同様であるので、説明を省略する。
【０２１９】
［実施例５における下位マスタノードの構成］
次に、図１５および図２９を用いて、実施例５における下位マスタノードを説明する。図１５は、実施例２における下位マスタノードの構成を示すブロック図であり、図２９は、実施例５における動的割り付け部を説明するための図である。
【０２２０】
図１５に示すように、実施例５における下位マスタノード２０は、実施例２〜４における下位マスタノード２０と基本的に同様であるが、動的割り付け部２３ｂおよび収容ノード情報更新部２３ｃが行なう処理の内容が、実施例２〜４と異なる。以下、これらを中心に説明する。
【０２２１】
動的割り付け部２３ｂは、指示文で指定した区間の走行が終了し、自身が制御する下位サブクラスタに収容される各ノードが算出した演算コストを受信すると、収容ノード情報更新部２３ｃに対し、図２９の（Ｇ）に示す指令を実行する。
【０２２２】
収容ノード情報更新部２３ｃは、動的割り付け部２３ｂからの指令に基づいて、受信した各ノードの演算コストを、収容ノード情報記憶部２２ａが記憶する収容ノード情報を更新して格納する（図２８参照）。
【０２２３】
なお、動的割り付け部２３ｂは、他に、図２９に示す（Ａ）〜（Ｆ）の処理を実行するが、これらの処理は、実施例４における動的割り付け部２３ｂが行なう処理の内容（図２６に示す（Ａ）〜（Ｆ）の処理の内容）と同様であるので、説明を省略する。
【０２２４】
［実施例５におけるマスタノードによる処理の手順］
次に、図３０を用いて、実施例５におけるマスタノードによる処理を説明する。図３０は、実施例５におけるマスタノードの処理の手順を説明するための図である。なお、オリジナルマスタノード１０および下位マスタノード２０の処理の手順は、同じである。
【０２２５】
まず、実施例５におけるマスタノード（オリジナルマスタノード１０もしくは下位マスタノード２０）は、指示文で指定した区間の走行の終了を検知すると（ステップＳ３００１肯定）、各ノードが算出したコストを自身の収容ノード情報に記録し（ステップＳ３００２）、処理を終了する。
【０２２６】
例えば、オリジナルマスタノード１０は、指示文で指定した区間の走行が終了し、最上位サブクラスタに収容される各ノードが算出した演算コストを受信すると、収容ノード情報更新部１３ｃに対し、図２９の（Ｇ）に示す指令を実行する。その指令に従って、収容ノード情報更新部１３ｃは、受信した各ノードの演算コストを、収容ノード情報記憶部１２ｂが記憶する収容ノード情報を更新して格納する。
【０２２７】
［実施例５の効果］
上記したように、実施例５によれば、各ノードにおいて、割り付けられたデータ群に対する処理が終了した際に、当該処理に要した演算コストを算出し、マスタノードそれぞれは、算出したノードすべての演算コストを更新して保持するので、更新された各ノードの演算コストおよび／または通信コストを参照することで、例えば、演算コストが増大しているノードの使用を回避するなど、次回のデータ群の割り付けの際に利用することができ、効率のよい並列処理が可能になる。
【実施例６】
【０２２８】
上述した実施例５では、各ノードが、処理に要した演算コストを算出する場合について説明したが、実施例６では、各ノードが、処理に要した演算コストおよび通信コストを算出する場合について説明する。
【０２２９】
［実施例６におけるノードの概要および特徴］
まず最初に、図３１を用いて、実施例６におけるノードの主たる特徴を具体的に説明する。図３１は、実施例６におけるノードの概要および特徴を説明するための図である。
【０２３０】
実施例６における各ノードは、割り付けられたデータ群に対する処理が終了した際に、当該処理に要した演算コストおよび通信コストを算出する。例えば、第二サブクラスタに収容される「ノード４」は、指示文で指定した区間の走行が終了し、処理に要した演算コストとして、演算に要した時間（Ｃａｌｃ＿ｔｉｍｅ＝５１２ｓｅｃ）を算出し、処理に要した通信コストとして、通信に要した時間（Ｃｏｍｍ＿ｔｉｍｅ＝２５６ｓｅｃ）を算出する。
【０２３１】
そして、実施例６における各ノードは、算出した演算コストを、自身が収容されるサブクラスタにおけるマスタノードに、当該算出した演算コストを通知する。
【０２３２】
実施例６におけるマスタノードは、自身が制御するサブクラスタに収容されるノードすべてから通知された演算コストおよび通信コストを、収容ノード情報として、更新して保持する。例えば、図３１に示すように、第二サブクラスタにおけるマスタノード（ノード４）は、自身を含む「ノード４〜７」が算出した演算コストを検知して、当該算出された演算コストを収容ノード情報に更新して保持する。すなわち、「ノード４」から「Ｃａｌｃ＿ｔｉｍｅ＝５１２ｓｅｃ、Ｃｏｍｍ＿ｔｉｍｅ＝２５６ｓｅｃ」を検知し、「ノード５」から「Ｃａｌｃ＿ｔｉｍｅ＝４１８ｓｅｃ、Ｃｏｍｍ＿ｔｉｍｅ＝２２２ｓｅｃ」を検知し、「ノード６」から「Ｃａｌｃ＿ｔｉｍｅ＝４４８ｓｅｃ、Ｃｏｍｍ＿ｔｉｍｅ＝２８９ｓｅｃ」を検知し、「ノード７」から「Ｃａｌｃ＿ｔｉｍｅ＝４０９２ｓｅｃ、Ｃｏｍｍ＿ｔｉｍｅ＝２０９８ｓｅｃ」を検知して、これらの情報を収容ノード情報に加えて更新する。
【０２３３】
なお、「ノード７」のように、演算コストとともに、通信コストが高い（通信時間が長い）ものを検出した場合、ノードの状態（ｓｔａｔｕｓ）を「ｃａｕｔｉｏｎ」に変更してもよい。また、次回プログラムの指示文を検出して動的割り付けを変更する際に、「ｃａｕｔｉｏｎ」となっているノード（ノード７）は使用しないように、設定してもよい。
【０２３４】
このようなことから、実施例６におけるノードは、更新された各ノードの演算コストおよび通信コストを参照することで、例えば、通信コストが増大しているノードの使用を回避するなど、次回のデータ群の割り付けの際に利用することができ、効率のよい並列処理が可能になる。
【０２３５】
なお、実施例６におけるオリジナルマスタノードの構成および処理の手順は、通信コストも受信して更新する以外は、実施例５におけるオリジナルマスタノードの構成および処理の手順と同様であるので、説明を省略する。
【０２３６】
［実施例６の効果］
上記したように、実施例６によれば、各ノードにおいて、割り付けられたデータ群に対する処理が終了した際に、当該処理に要した演算コストとともに通信コストを算出し、それぞれのマスタノードは、算出したノードすべての演算コストおよび通信コストを更新して保持するので、更新された各ノードの演算コストおよび通信コストを参照することで、例えば、通信コストが増大しているノードの使用を回避するなど、次回のデータ群の割り付けの際に利用することができ、効率のよい並列処理が可能になる。
【実施例７】
【０２３７】
上述した実施例１〜６では、各ノードがマスタノードとして設定されている場合について説明したが、実施例７では、ノードが管理ノードとして設定されている場合について説明する。
【０２３８】
［実施例７におけるノードの概要および特徴］
まず最初に、図３２を用いて、実施例７におけるノードの主たる特徴を具体的に説明する。図３２は、実施例７におけるノードの概要および特徴を説明するための図である。
【０２３９】
実施例７におけるノードは、木構造のサブクラスタにおいて管理ノードとして設定されている場合に、木構造のサブクラスタにおけるすべてのノードの性能を所定の出力部に出力する。例えば、図３２の（Ａ）に示すように、木構造のサブクラスタにおいて、「ノード２８」が「性能表示ソフト」を搭載した管理ノードとして設定されているとする。
【０２４０】
そして、実施例７における管理ノードとして設定されている「ノード２８」は、ユーザからの性能表示要求に応じて、上述した実施例１〜６における一連の作業における各ノードの状況を、リアルタイムで画面に表示する。例えば、図３２の（Ｂ）に示すように、全体のノードのステータスや性能（演算コストや通信コスト）といった情報をグラフィカルに表示する。
【０２４１】
このようなことから、実施例７におけるノードは、管理ノードとして設定されている場合に、並列プログラムの実行者は、管理ノードの画面に表示されたすべてのノードの状況を参照して、例えば、処理能力の低下しているノードを検知するなど、迅速に各ノードの性能評価をすることができ、効率のよい並列処理が可能になる。
【０２４２】
［実施例７における管理ノードの構成］
次に、図３３を用いて、実施例７における管理ノードを説明する。図３３は、実施例７における管理ノードの構成を示すブロック図である。
【０２４３】
図３３に示すように、実施例７における管理ノード３０は、入力部３１と、出力部３２と、通信制御部３３と、入出力制御Ｉ／Ｆ部３４と、記憶部３５と、処理部３６とから構成される。
【０２４４】
入力部３１は、並列プログラムの実行者からの性能表示要求を受け付け、キーボードや、タッチパネルを備える。
【０２４５】
出力部３２は、後述する性能表示部３６ａによる処理結果を出力し、例えば、モニタを備える。
【０２４６】
通信制御部３３は、入力部３１が受け付けた「性能表示要求」に応じて、各ノードから送信された「状況」を受信し、後述する性能表示記憶部３５ａに格納する。
【０２４７】
入出力制御Ｉ／Ｆ部３４は、入力部３１、出力部３２および通信制御部３３と、記憶部３５および処理部３６との間におけるデータ転送を制御する。
【０２４８】
記憶部３５は、処理部３６による処理に用いるデータを記憶し、特に本発明に密接に関連するものとしては、図３３に示すように、性能表示記憶部３５ａを備える。
【０２４９】
性能表示記憶部３５ａは、入出力制御Ｉ／Ｆ部３４から転送された各ノードからの演算コストや通信コストを記憶する。
【０２５０】
処理部３６は、入出力制御Ｉ／Ｆ部３４から転送された「性能表示要求」に応じて、処理を実行し、特に本発明に密接に関連するものとしては、図３３に示すように、性能表示部３６ａを備える。ここで、性能表示部３６ａは、特許請求の範囲に記載の「性能出力手順」に対応する。
【０２５１】
性能表示部３６ａは、「性能表示要求」に応じて、性能表示記憶部３５ａが記憶する各ノードからの演算コストや通信コストから、例えば、図３２の（Ｂ）に示すような図面に変換して、出力する。
【０２５２】
［実施例７における管理ノードによる処理の手順］
次に、図３４を用いて、実施例７における管理ノードによる処理を説明する。図３４は、実施例７における管理ノードの処理の手順を説明するための図である。
【０２５３】
まず、実施例７における管理ノード３０は、キーボードやタッチパネルから性能表示要求を受け付けると（ステップＳ３４０１肯定）、システム全体の挙動を表示して（ステップＳ３４０２）、処理を終了する。
【０２５４】
すなわち、性能表示部３６ａは、「性能表示要求」に応じて、性能表示記憶部３５ａが記憶する各ノードからの演算コストや通信コストから、例えば、図３２の（Ｂ）に示すような図面に変換して、出力する。
【０２５５】
［実施例７の効果］
上記したように、実施例７によれば、木構造のサブクラスタにおいて管理ノードとして設定されている場合に、木構造のサブクラスタにおけるすべてのノードの性能を所定の出力部に出力するので、並列プログラムの実行者は、画面に表示されたすべてのノードの状況を参照して、例えば、処理能力の低下しているノードを検知するなど、迅速に各ノードの性能評価をすることができ、効率のよい並列処理が可能になる。
【実施例８】
【０２５６】
さて、これまで実施例１〜７におけるノードについて説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてもよいものである。そこで、以下では、実施例８における並列処理制御システムとして、種々の異なる実施例を（１）〜（３）に区分けして説明する。
【０２５７】
（１）動的割り付け
上記の実施例２〜４では、下位マスタノード２０からの情報に基づいて、オリジナルマスタノード１０が一括して動的割り付けを決定する場合について説明したが、本発明はこれに限定されるものではなく、オリジナルマスタノード１０が、最上位サブクラスタにおいて、データ群を割り付け不可能と判定した場合には、下位マスタノード２０に当該データ群を転送し、下位マスタノード２０が、配下のサブクラスタに対して、割り付けを決定する場合であってもよい。すなわち、下位マスタノード２０が、オリジナルマスタノード１０としての冗長機能を備える場合であってもよい。
【０２５８】
（２）システム構成等
また、上記の実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動でおこなうこともでき（例えば、キーボードやタッチパネルから性能表示要求を受け付けるのではなく、一定時間ごと自動的に性能表示要求を生成するなど）、あるいは、手動的におこなうものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文章中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる（例えば、図８に示す、ステップＳ８０２とステップＳ８０３とを並行して処理するなど）。
【０２５９】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各処理部および各記憶部の分散・統合の具体的形態（例えば、図１４の形態など）は図示のものに限られず、例えば、動的割り付け部１３ｂと収容ノード情報更新部１３ｃとを統合するなど、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０２６０】
（３）並列処理制御プログラム
ところで上記の実施例１〜７では、ハードウェアロジックによって各種の処理を実現する場合を説明したが、本発明はこれに限定されるものではなく、あらかじめ用意されたプログラムをコンピュータで実行するようにしてもよい。そこで以下では、図３５を用いて、上記の実施例１に示した各ノードと同様の機能を有する並列処理制御プログラムを実行するコンピュータの一例を説明する。図３５は、実施例１の並列処理制御プログラムを実行するコンピュータを示す図である。
【０２６１】
図３５に示すように、情報処理装置としてのコンピュータ３５０とコンピュータ３６０とは、ネットワークを介して接続され、上述した実施例１における並列処理制御を行う。
【０２６２】
図３５に示すように、情報処理装置としてのコンピュータ３５０は、キーボード３５１、ディスプレイ３５２、ＣＰＵ３５３、ＲＯＭ３５４、ＨＤＤ３５５、ＲＡＭ３５６をバス３５７などで接続して構成される。
【０２６３】
ＲＯＭ３５４には、上記の実施例１に示したオリジナルマスタノード１０と同様の機能を発揮する並列処理制御プログラム、つまり、図３５に示すように、通信制御プログラム３５４ａが予め記憶されている。なお、このプログラム３５４ａについては、図３に示したオリジナルマスタノード１０の各構成要素と同様、適宜統合または分散してもよい。
【０２６４】
そして、ＣＰＵ３５３が、このプログラム３５４ａをＲＯＭ３５４から読みだして実行することで、図３５に示すように、プログラム３５４ａは、通信制御プロセス３５３ａとして機能するようになる。なお、プロセス３５３ａは、図３に示した、通信制御部１３ａに対応する。
【０２６５】
また、ＨＤＤ３５５には、図３５に示すように、マスタノード接続構成情報データ３５５ａと、収容ノード情報データ３５５ｂとが設けられる。そしてＣＰＵ３５３は、マスタノード接続構成情報データ３５６ａをマスタノード接続構成情報データ３５５ａに対して登録し、収容ノード情報データ３５６ｂを収容ノード情報データ３５５ｂに対して登録し、このマスタノード接続構成情報データ３５６ａと、収容ノード情報データ３５６ｂとに基づいて並列処理制御を実行する。
【０２６６】
なお、上記した各プログラム３５４ａについては、必ずしも最初からＲＯＭ３５４に記憶させておく必要はなく、例えばコンピュータ３５０に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータ３５０の内外に備えられるＨＤＤなどの「固定用物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ３５０に接続される「他のコンピュータ（またはサーバ）」などに各プログラムを記憶させておき、コンピュータ３５０がこれらから各プログラムを読み出して実行するようにしてもよい。
【０２６７】
また、図３５に示すように、情報処理装置としてのコンピュータ３６０は、ＣＰＵ３６１、ＲＯＭ３６２、ＨＤＤ３６３およびＲＡＭ３６４をバス３６５などで接続して構成される。
【０２６８】
ＲＯＭ３６２には、上記の実施例１に示した下位マスタノード２０と同様の機能を発揮する並列処理制御プログラム、つまり、図３５に示すように、通信制御プログラム３６２ａ、が予め記憶されている。なお、このプログラム３６２ａについては、図４に示した下位マスタノード２０の各構成要素と同様、適宜統合または分散してもよい。
【０２６９】
そして、ＣＰＵ３６１が、このプログラム３６２ａをＲＯＭ３６２から読みだして実行することで、図３５に示すように、プログラム３６２ａは、通信制御プロセス３６１ａとして機能するようになる。なお、通信制御プロセス３６１ａは、図４に示した、通信制御部２３ａに対応する。
【０２７０】
また、ＨＤＤ３６３には、図３５に示すように、収容ノード情報データ３６３ａが設けられる。そしてＣＰＵ３６１は、収容ノード情報データ３６４ａを収容ノード情報データ３６３ａに対して登録し、この収容ノード情報データ３６４ａに基づいて並列処理制御を実行する。
【０２７１】
なお、上記したプログラム３６２ａについては、必ずしも最初からＲＯＭ３６２に記憶させておく必要はなく、例えばコンピュータ３６０に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータ３６０の内外に備えられるＨＤＤなどの「固定用物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ３６０に接続される「他のコンピュータ（またはサーバ）」などに各プログラムを記憶させておき、コンピュータ３６０がこれらから各プログラムを読み出して実行するようにしてもよい。
【０２７２】
（付記１）複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、当該並列処理を制御する並列処理制御方法を各ノードとしてのコンピュータに実行させる並列処理制御プログラムであって、
前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持手順と、
前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持手順と、
前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持手順が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持手順が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御手順と、
前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持手順が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御手順と、
をコンピュータに実行させることを特徴とする並列処理制御プログラム。
【０２７３】
（付記２）前記最上位マスタノードとして設定されている場合に、前記並列処理に用いられるデータ群を演算コストおよび／または通信コストに基づいてグループ分けすることを指示する指示文が当該並列処理を行うプログラムに検出された際に、前記演算コストおよび／または通信コストが抑えられるように、前記指示文に記載される同一グループのデータ群をノードに割り付ける割り付け手順をさらにコンピュータに実行させることを特徴とする付記１に記載の並列処理制御プログラム。
【０２７４】
（付記３）前記割り付け手順は、前記マスタノード接続構成情報保持手順が保持するマスタノード接続構成情報を参照して、前記同一グループのデータ群を同一サブクラスタ内のノードに割り付けることを特徴とする付記２に記載の並列処理制御プログラム。
【０２７５】
（付記４）前記割り付け手順は、前記同一グループのデータ群のすべてを前記同一サブクラスタ内のノードに割り付けできなかった場合には、割り付けられなかったデータ群を、当該サブクラスタの配下にあるサブクラスタ内のノードに割り付けることを特徴とする付記３に記載の並列処理制御プログラム。
【０２７６】
（付記５）前記収容ノード情報保持手順は、前記サブクラスタごとに収容されるノードすべての演算コストおよび／または通信コストをさらに保持し、
前記割り付け手順は、前記収容ノード情報保持手順が保持する前記演算コストおよび／または通信コストをさらに参照して、前記同一グループのデータ群を割り付けることを特徴とする付記４に記載の並列処理制御プログラム。
【０２７７】
（付記６）前記マスタノード接続構成情報保持手順は、前記マスタノード接続構成情報として、各サブクラスタ間の通信性能をさらに保持し、
前記割り付け手順は、前記マスタノード接続構成情報保持手順が保持する前記各サブクラスタ間の通信性能をさらに参照して、前記同一グループのデータ群を割り付けることを特徴とする付記５に記載の並列処理制御プログラム。
【０２７８】
（付記７）各ノードにおいて、割り付けられたデータ群に対する処理が終了した際に、当該処理に要した演算コストおよび／または通信コストを算出するコスト算出手順をさらにコンピュータに実行させ、
前記収容ノード情報保持手順は、前記コスト算出手順が算出したノードすべての前記演算コストおよび／または通信コストを更新して保持することを特徴とする付記２〜６のいずれかひとつに記載の並列処理制御プログラム。
【０２７９】
（付記８）前記木構造のサブクラスタにおいて管理ノードとして設定されている場合に、前記木構造のサブクラスタにおけるすべてのノードの性能を所定の出力部に出力する性能出力手順をさらにコンピュータに実行させることを特徴とする付記１〜７のいずれかひとつに記載の並列処理制御プログラム。
【０２８０】
（付記９）複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、各ノードが当該並列処理を制御する並列処理制御システムであって、
前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持手段と、
前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持手段と、
前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持手段が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持手段が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御手段と、
前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持手段が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御手段と、
を備えたことを特徴とする並列処理制御システム。
【０２８１】
（付記１０）複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、各ノードが当該並列処理を制御する並列処理制御方法であって、
前記サブクラスタごとのマスタノードとして設定されている場合に、当該サブクラスタに収容される当該マスタノードおよび当該マスタノードの制御下にあるスレーブノードすべてを一意に識別する情報である収容ノード情報を保持する収容ノード情報保持工程と、
前記木構造の最上位のサブクラスタにおいて最上位マスタノードとして設定されている場合に、前記最上位マスタノードと下位のサブクラスタに設定された下位マスタノードとの接続構成の情報であるマスタノード接続構成情報を保持するマスタノード接続構成情報保持工程と、
前記最上位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記収容ノード情報保持工程が保持する前記収容ノード情報を参照して、前記最上位のサブクラスタに収容されるスレーブノードすべてとの通信を確立するとともに、前記マスタノード接続構成情報保持工程が保持する前記マスタノード接続構成情報を参照して、前記下位マスタノードそれぞれとの通信を確立し、当該並列処理の後処理として、前記最上位のサブクラスタに収容されるノードすべての処理の終了を検知するとともに、前記下位マスタノードすべてから、処理の終了通知を検知してすべての通信を終了する最上位マスタノード通信制御工程と、
前記木構造の下位のサブクラスタごとの下位マスタノードとして設定されている場合に、当該並列処理の前処理として、前記最上位マスタノードとの通信が確立された際に、前記収容ノード情報保持工程が保持する前記収容ノード情報を参照して、当該下位のサブクラスタに収容されるスレーブノードと前記最上位マスタノードとの通信を確立し、当該並列処理の後処理として、当該下位のサブクラスタが収容するノードすべての処理の終了を検知するとともに、前記最上位マスタノードに処理の終了を通知する下位マスタノード通信制御工程と、
を含んだことを特徴とする並列処理制御方法。
【産業上の利用可能性】
【０２８２】
以上のように、本発明に係る並列処理制御プログラム、並列処理制御システムおよび並列処理制御方法は、複数のノードからなるサブクラスタが木構造で接続されて構成される並列処理システムにおいて、当該並列処理を制御する場合に有用であり、特に、効率のよい並列処理が可能になることに適する。
【図面の簡単な説明】
【０２８３】
【図１】実施例１におけるノードの概要および特徴を説明するための図である。
【図２】実施例１におけるノードの概要および特徴を説明するための図である。
【図３】実施例１におけるオリジナルマスタノードの構成を示すブロック図である。
【図４】実施例１における下位マスタノードの構成を示すブロック図である。
【図５】実施例１におけるマスタノード接続構成情報記憶部を説明するための図である。
【図６】実施例１におけるオリジナルマスタノードの収容ノード情報記憶部を説明するための図である。
【図７】実施例１における下位マスタノードの収容ノード情報記憶部を説明するための図である。
【図８】実施例１におけるオリジナルマスタノードの前処理の手順を説明するための図である。
【図９】実施例１における下位マスタノードの前処理の手順を説明するための図である。
【図１０】実施例１におけるオリジナルマスタノードの後処理の手順を説明するための図である。
【図１１】実施例１における下位マスタノードの後処理の手順を説明するための図である。
【図１２】実施例２におけるノードの概要および特徴を説明するための図である。
【図１３】実施例２におけるノードの概要および特徴を説明するための図である。
【図１４】実施例２におけるオリジナルマスタノードの構成を示すブロック図である。
【図１５】実施例２における下位マスタノードの構成を示すブロック図である。
【図１６】指示文を説明するための図である。
【図１７】実施例２における動的割り付け部を説明するための図である。
【図１８】実施例２における収容ノード情報記憶部を説明するための図である。
【図１９】実施例２におけるオリジナルマスタノードの処理の手順を説明するための図である。
【図２０】実施例２における下位マスタノードの処理の手順を説明するための図である。
【図２１】実施例３におけるノードの概要および特徴を説明するための図である。
【図２２】実施例３における動的割り付け部を説明するための図である。
【図２３】実施例３における収容ノード情報記憶部を説明するための図である。
【図２４】実施例４におけるノードの概要および特徴を説明するための図である。
【図２５】実施例４におけるマスタノード接続構成情報記憶部を説明するための図である。
【図２６】実施例４における動的割り付け部を説明するための図である。
【図２７】実施例４における収容ノード情報記憶部を説明するための図である。
【図２８】実施例５におけるノードの概要および特徴を説明するための図である。
【図２９】実施例５における動的割り付け部を説明するための図である。
【図３０】実施例５におけるマスタノードの処理の手順を説明するための図である。
【図３１】実施例６におけるノードの概要および特徴を説明するための図である。
【図３２】実施例７におけるノードの概要および特徴を説明するための図である。
【図３３】実施例７における管理ノードの構成を示すブロック図である。
【図３４】実施例７における管理ノードの処理の手順を説明するための図である。
【図３５】実施例１の並列処理制御プログラムを実行するコンピュータを示す図である。
【図３６】従来技術の課題を説明するための図である。
【符号の説明】
【０２８４】
１０  オリジナルマスタノード
１１  通信制御Ｉ／Ｆ部
１２  記憶部
１２ａ  マスタノード接続構成情報記憶部
１２ｂ  収容ノード情報記憶部
１３  制御部
１３ａ  通信制御部
２０  下位マスタノード
２１  通信制御Ｉ／Ｆ部
２２  記憶部
２２ａ  収容ノード情報記憶部
２３  制御部
２３ａ  通信制御部
【図１】
2008198025.tif 000003
【図２】
2008198025.tif 000004
【図３】
2008198025.tif 000005
【図４】
2008198025.tif 000006
【図５】
2008198025.tif 000007
【図６】
2008198025.tif 000008
【図７】
2008198025.tif 000009
【図８】
2008198025.tif 000010
【図９】
2008198025.tif 000011
【図１０】
2008198025.tif 000012
【図１１】
2008198025.tif 000013
【図１２】
2008198025.tif 000014
【図１３】
2008198025.tif 000015
【図１４】
2008198025.tif 000016
【図１５】
2008198025.tif 000017
【図１６】
2008198025.tif 000018
【図１７】
2008198025.tif 000019
【図１８】
2008198025.tif 000020
【図１９】
2008198025.tif 000021
【図２０】
2008198025.tif 000022
【図２１】
2008198025.tif 000023
【図２２】
2008198025.tif 000024
【図２３】
2008198025.tif 000025
【図２４】
2008198025.tif 000026
【図２５】
2008198025.tif 000027
【図２６】
2008198025.tif 000028
【図２７】
2008198025.tif 000029
【図２８】
2008198025.tif 000030
【図２９】
2008198025.tif 000031
【図３０】
2008198025.tif 000032
【図３１】
2008198025.tif 000033
【図３２】
2008198025.tif 000034
【図３３】
2008198025.tif 000035
【図３４】
2008198025.tif 000036
【図３５】
2008198025.tif 000037
【図３６】
2008198025.tif 000038