(57)【特許請求の範囲】
【請求項１】
コンピュータに、
利用ノード数を指定したジョブ実行要求に応じて、複数のノードがメッシュ結合またはトーラス結合で接続されたネットワークを表すｎ（ｎは２以上の整数）次元の空間のｎ個の軸から、順番に決定対象軸を選択し、
前記複数のノードそれぞれのｎ次元の座標値と利用可否を含む状態を示す状態情報とに基づいて、前記決定対象軸の座標値の候補範囲の幅を所定値から広げていき、先に選択した軸の座標値については、該軸に対して決定した座標値の範囲内であり、かつ前記決定対象軸の座標値が前記候補範囲内である利用可能なノードの数が前記利用ノード数以上となったときの前記候補範囲を、前記決定対象軸の座標値の範囲に決定し、
すべての軸について座標値の範囲が決定すると、各軸の決定した範囲内の座標値を有する利用可能な第１ノードの中から、前記ジョブに割り当てる第２ノードを決定する、
処理を実行させるジョブ管理プログラム。
【請求項２】
前記コンピュータに、さらに、
前記状態情報には、前記複数のノードの故障の有無が含まれており、すべての軸の範囲を決定したとき、前記複数のノードの前記座標値と前記状態情報とに基づいて、前記第１ノード間で全対全通信が保証できるかどうかを判断する処理を実行させ、
前記第２ノードの決定では、全対全通信が保証できると判断された場合に、前記第１ノードの中から、前記ジョブに割り当てる第２ノードを決定する、
請求項１記載のジョブ管理プログラム。
【請求項３】
前記範囲の決定では、前記第１ノード間で全対全通信が保証できないと判断された場合、既に範囲が決定された軸の少なくとも一部において範囲が変更されるように、範囲決定をやり直す請求項２記載のジョブ管理プログラム。
【請求項４】
前記範囲の決定では、前記決定対象軸の座標値の範囲の幅を変えずに範囲の位置を移動しても、すべての位置において前記第１ノード間で全対全通信が保証できないと判断された場合、前記決定対象軸の座標値の範囲の決定を取りやめ、既に範囲が決定された軸の少なくとも一部において範囲が変更されるように、範囲決定をやり直す請求項２または３記載のジョブ管理プログラム。
【請求項５】
前記ネットワークは、ノード集合である単位ノード群内のノードがｕ（ｕは１以上の整数）次元メッシュ結合またはｕ次元トーラス結合で接続された第１ネットワークと、複数の単位ノード群がｖ（ｖは１以上の整数）次元メッシュ結合またはｖ次元トーラス結合で接続された第２ネットワークとで構成されており、前記第２ネットワークでは、隣接する単位ノード群内のｕ次元の座標値が同じノード同士が接続されており、
前記判断では、前記複数の単位ノード群内の各ノードのｕ次元の座標値のうち、前記複数の単位ノード群それぞれにおけるルーティング機能が故障した故障ノードのｕ次元の座標値と重複しない座標値が少なくとも１つあれば、前記第２ネットワークを介した単位ノード群間の全対全通信が保証できると判断する請求項２乃至４のいずれかに記載のジョブ管理プログラム。
【請求項６】
前記範囲の決定では、範囲が決定した軸の座標値が該範囲内である利用可能なノードの数から、範囲が決定した軸の座標値が該範囲内であり、前記決定対象軸の座標値が所定座標値である利用可能なノードの数を減算した結果が、前記利用ノード数に満たない場合、前記候補範囲の幅の前記所定値を、前記決定対象軸の座標値の全範囲とする請求項１乃至５のいずれかに記載のジョブ管理プログラム。
【請求項７】
コンピュータが、
利用ノード数を指定したジョブ実行要求に応じて、複数のノードがメッシュ結合またはトーラス結合で接続されたネットワークを表すｎ（ｎは２以上の整数）次元の空間のｎ個の軸から、順番に決定対象軸を選択し、
前記複数のノードそれぞれのｎ次元の座標値と利用可否を含む状態を示す状態情報とに基づいて、前記決定対象軸の座標値の候補範囲の幅を所定値から広げていき、先に選択した軸の座標値については、該軸に対して決定した座標値の範囲内であり、かつ前記決定対象軸の座標値が前記候補範囲内である利用可能なノードの数が前記利用ノード数以上となったときの前記候補範囲を、前記決定対象軸の座標値の範囲に決定し、
すべての軸について座標値の範囲が決定すると、各軸の決定した範囲内の座標値を有する利用可能な第１ノードの中から、前記ジョブに割り当てる第２ノードを決定する、
ジョブ管理方法。
【請求項８】
複数のノードがメッシュ結合またはトーラス結合で接続されたネットワーク内の前記複数のノードそれぞれのｎ（ｎは２以上の整数）次元の座標値と利用可否を含む状態を示す状態情報とを記憶する記憶部と、
利用ノード数を指定したジョブ実行要求に応じて、前記ネットワークを表すｎ次元の空間のｎ個の軸から、順番に決定対象軸を選択し、前記複数のノードそれぞれのｎ次元の座標値と利用可否を含む状態を示す状態情報とに基づいて、前記決定対象軸の座標値の候補範囲の幅を所定値から広げていき、先に選択した軸の座標値については、該軸に対して決定した座標値の範囲内であり、かつ前記決定対象軸の座標値が前記候補範囲内である利用可能なノードの数が前記利用ノード数以上となったときの前記候補範囲を、前記決定対象軸の座標値の範囲に決定し、すべての軸について座標値の範囲が決定すると、各軸の決定した範囲内の座標値を有する利用可能な第１ノードの中から、前記ジョブに割り当てる第２ノードを決定する演算部と、
を有するジョブ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ジョブ管理プログラム、ジョブ管理方法、およびジョブ管理装置に関する。
【背景技術】
【０００２】
ＨＰＣ（High Performance Computing）の分野では、多数のコンピュータ（以下ノードと呼ぶ）を接続して並列計算が行われる。ノードの接続形態には、メッシュ結合やトーラス結合がある。メッシュ結合は、複数の軸方向にメッシュ状にノードを並べ、各軸方向に隣接するノード同士をインターコネクトと呼ばれる高速ネットワークで接続する接続形態である。トーラス結合は、メッシュ結合の接続をした上で、各軸の両端のノード同士を接続する接続形態である。すべての軸がメッシュ結合またはトーラス結合であるネットワークや、一部の軸がメッシュ結合で残りの軸はトーラス結合であるような接続形態も存在する。
【０００３】
ＨＰＣで実行するジョブには、そのジョブを実行するノードの割り当てが行われる。複数のジョブを実行すると、複数のジョブそれぞれのノード間通信が、共通のノードを経由する場合がある。この場合、通信経路を共有する複数のジョブにおいて同時にデータが通信されると、通信干渉が発生する。通信干渉が発生すると、通信に想定以上の時間がかかる。このような通信干渉が度重なると、ジョブの処理が予定時間内に完了できない可能性がでてくる。
【０００４】
そこで、ネットワーク上で互いに隣接し、かつ、形状がサブメッシュやサブトーラス（矩形形状）となるようなノード群のみを選択して、そのノード群内のノードをジョブに割り当てる技術が存在する。この技術では、サブメッシュ／サブトーラスを１ジョブが専有する。そのため、異なるジョブのノード間通信が干渉することがなくなる。
【０００５】
なおジョブに対するノードの割り当てに関する他の技術としては、例えば、複数の単位ジョブを連続した長方形状又は直方体形状を割り当てる計算ノードである空きノードを、効率良く検索することができるジョブ管理装置が考えられている。また超並列型スーパーコンピュータでの問題レイアウトを最適化するための技術もある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１２／０２０４７４号
【特許文献２】特表２００８−５１６３４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、ジョブに割り当てるノードの範囲形状をサブメッシュ／サブトーラスに限定すると、内包する全ノードが空き（ジョブを実行していない）であるサブメッシュ／サブトーラスが存在しない限りノードを割り当てることができない。そのため、結果として、ネットワーク全体としてはジョブの要求する数だけの空きノードが存在するにもかかわらず、十分なサイズのサブメッシュ／サブトーラスを用意できず、ジョブに対してノードを割り当てることができない状況が生じる。そのため、ノード資源が有効活用できない。
【０００８】
なお、ジョブに割り当てるノードの範囲形状をサブメッシュ／サブトーラスに限定せず、割り当てるノードを自由に選択すれば、ノードの有効活用は可能であるが、そうするとジョブ間での通信干渉が発生する。従来、ジョブに割り当てるノードの範囲形状をサブメッシュ／サブトーラスに限定せずに、ジョブ間での通信干渉による性能低下を抑制するための有効な技術が存在しない。
【０００９】
１つの側面では、本件では、ノードを有効活用しながらも、ノード間通信の性能低下を抑制することを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、コンピュータに、以下の処理を実行させるジョブ管理プログラムが提供される。
ジョブ管理プログラムに基づいて、コンピュータは、まず、利用ノード数を指定したジョブ実行要求に応じて、複数のノードがメッシュ結合またはトーラス結合で接続されたネットワークを表すｎ（ｎは２以上の整数）次元の空間のｎ個の軸から、順番に決定対象軸を選択する。次にコンピュータは、複数のノードそれぞれのｎ次元の座標値と利用可否を含む状態を示す状態情報とに基づいて、決定対象軸の座標値の候補範囲の幅を所定値から広げていき、範囲が決定した軸の座標値が該範囲内であり、決定対象軸の座標値が候補範囲内である利用可能なノードの数が利用ノード数以上となったときの候補範囲を、決定対象軸の座標値の範囲に決定する。そしてコンピュータは、すべての軸について座標値の範囲が決定すると、各軸の決定した範囲内の座標値を有する利用可能な第１ノードの中から、ジョブに割り当てる第２ノードを決定する。
【発明の効果】
【００１１】
１態様によれば、ノードを有効活用しながらも、ノード間通信の性能低下を抑制することができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係るジョブ管理装置の例を示す図である。
【図２】第２の実施の形態のシステム構成例を示す図である。
【図３】ジョブ管理サーバのハードウェアの一構成例を示す図である。
【図４】ジョブ管理サーバの機能を示すブロック図である。
【図５】ノードを有効利用した割り当ての一例を示す図である。
【図６】通信の干渉の発生例を示す図である。
【図７】ルータ故障の影響範囲の一例を示す図である。
【図８】ルータが故障したノードがある場合のノード間通信の例を示す図である。
【図９】第２の実施の形態におけるノード割り当て例を示す図である。
【図１０】第２の実施の形態におけるノードの割り当て処理を示すフローチャートである。
【図１１】ＢＢ探索処理の手順を示すフローチャートである。
【図１２】軸ｉ範囲決定処理の手順の一例を示すフローチャートである。
【図１３】探索範囲制限処理の手順の一例を示す図である。
【図１４】第３の実施の形態における軸ｉ範囲決定処理の手順の一例を示すフローチャートである。
【図１５】第４の実施の形態におけるノードの結合例を示す図である。
【図１６】隣接する単位ノード群内のノード間の接続例を示す図である。
【図１７】ノード間の通信例を示す図である。
【図１８】ルーティング機能が故障したノードがある場合のノード間通信の例を示す図である。
【図１９】故障ノードの位置の射影例を示す図である。
【図２０】ルーティング機能が故障したノードを含む単位ノード群内の通信例を示す図である。
【図２１】ルーティング機能が故障したノードを含むもののノードの利用が可能な単位ノード群の例を示す図である。
【図２２】通信規則ごとの利用可能ノード数の比較例を示す図である。
【図２３】軸０の範囲決定例を示す図である。
【図２４】軸１の範囲決定例を示す図である。
【図２５】軸２の範囲決定例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るジョブ管理装置の例を示す図である。ジョブ管理装置１０は、端末装置１と複数のノード２ａ，２ｂ，２ｃ，・・・とに接続されている。端末装置１は、例えばユーザが使用するコンピュータである。複数のノード２ａ，２ｂ，２ｃ，・・・は、ジョブの計算を行うコンピュータである。複数のノード２ａ，２ｂ，２ｃ，・・・は、ｎ（ｎは２以上の整数）次元メッシュ結合またはｎ次元トーラス結合のネットワークを構成している。
【００１４】
ジョブ管理装置１０は、ジョブ実行要求３に示される利用ノード数分のノードを、ジョブに割り当てる。そしてジョブ管理装置１０は、割り当てたノードにジョブを実行させる。このような処理を実行するために、ジョブ管理装置１０は、記憶部１１と演算部１２とを有する。
【００１５】
記憶部１１は、複数のノード２ａ，２ｂ，２ｃ，・・・それぞれのｎ次元の座標値と、複数のノード２ａ，２ｂ，２ｃ，・・・それぞれの利用可否を含む状態を示す状態情報とを記憶する。図１では、記憶部１１内の丸い図形１１ａが、ノードを表している。図形１１ａの位置が、対応するノードのネットワーク上での座標を表す。図形１１ａ間を接続する線が、ノード間を接続するリンクを表す。網掛けを有する図形は、利用不可のノードを示している。例えば他のジョブを実行中のノードや、プロセッサが故障中のノードは、利用不可となる。網掛けの無い図形は、利用可能なノードを示している。なお状態情報には、ノードの故障の有無に関する情報を含めてもよい。
【００１６】
演算部１２は、利用ノード数を指定したジョブ実行要求に応じて、ネットワークを表すｎ次元空間４のｎ個の軸から、順番に決定対象軸を選択する。次に演算部１２は、決定対象軸の座標値の候補範囲の幅を所定値から広げていく。このとき、演算部１２は、複数のノード２ａ，２ｂ，２ｃ，・・・それぞれの座標値と状態情報とに基づいて、範囲が決定した軸の座標値が決定されたその範囲内であり、決定対象軸の座標値が候補範囲内である、利用可能なノードの数を計数する。例えば演算部１２は、範囲が決定した軸の座標値が決定されたその範囲であり、決定対象軸の座標値が候補範囲内である矩形領域を設定する。以下この矩形領域を、ＢＢ（Bounding Box）と呼ぶ。ＢＢ５は、範囲が未定の軸の座標値は全範囲を含む。
【００１７】
そして演算部１２は、利用可能なノード数が利用ノード数以上となったときの候補範囲を、決定対象軸の座標値の範囲に決定する。すべての軸について座標値の範囲が決定すると、演算部１２は、各軸の決定した範囲内の座標値を有する利用可能なノードの中から、ジョブに割り当てるノードを決定する。そして演算部１２は、ジョブに割り当てたノードに対して、ジョブの実行指示を送信する。
【００１８】
このようなジョブ管理装置１０にジョブ実行要求３が入力されると、演算部１２が、利用ノード数分の利用可能ノードを含むＢＢ５を探索する。その際、演算部１２は、各軸の座標値の範囲を順に決定する。例えば、軸０、軸１、軸２の順で、範囲を決定するものとする。その場合、演算部１２は、まず軸０の範囲の幅を所定値（例えば１）から広げていく。例えば演算部１２は、軸０の所定値の幅の範囲を候補範囲として、軸０の座標値がその範囲内の利用可能なノード数が、ジョブの利用ノード数（例えば「７」）以上あるかどうかを判断する。利用可能なノード数がジョブの利用ノード数未満であれば、演算部１２は、同じ幅のまま、範囲を軸０方向にずらしていき、利用可能なノード数がジョブの利用ノード数以上となる位置を探索する。すべての位置で利用可能なノード数がジョブの利用ノード数未満であれば、演算部１２は、軸０の座標値の範囲の幅を広げ、同様に探索する。そして、演算部１２は、探索過程で最初に利用可能なノード数がジョブの利用ノード数以上となったときの範囲を、軸０の座標値の範囲に決定する。
【００１９】
軸０の座標値の範囲が決定すると、演算部１２は、軸１についても、同様の探索を行い、軸１の座標値の範囲を決定する。さらに演算部１２は、軸２についても、同様の探索を行い、軸２の座標値の範囲を決定する。各軸の座標値の範囲が決定されるごとに、ＢＢ５が占める領域は狭くなる。例えば図１の例では、すべての軸の座標値の範囲決定後のＢＢ５は、３軸方向それぞれに２ずつの幅しかもっていない。このＢＢ５内に含まれる利用可能なノードが、ジョブに割り当てられる。そして割り当てられたノードに対して、ジョブの実行指示が出される。
【００２０】
このようにしてジョブにノードを割り当てることで、ネットワーク内のノードの有効利用が図れる。すなわちＢＢ５内に、他のジョブを実行していて利用不可能なノードが存在することを許容しているため、ＢＢ５の各軸の座標値の範囲を広げていけば、最終的には、利用可能なノードのすべてが、いずれＢＢ５内に含まれることになる。そのため、ジョブ実行要求３に示された利用ノード数分の利用可能ノードが、離れた位置に点在していたとしても、そのノードをジョブに割り当てることができる。
【００２１】
しかも第１の実施の形態のジョブ管理装置１０では、各軸の幅を、所定値から徐々に広げるようにしたため、利用ノード数以上の利用可能なノードを含む、可能な限り小さいＢＢ５を探索できる。ＢＢ５のサイズが小さければ、ジョブに割り当てられたノードは、互いの距離が短くなる。同じジョブに割り当てられたノード間の距離が近ければ、ノード間の通信効率が上がると共に、他のジョブのノード間通信との干渉が発生する可能性も低下する。その結果、ジョブの処理効率が向上する。
【００２２】
なお演算部１２は、各軸の座標値の範囲を決定後、ＢＢ５内の利用可能なノード間で、全対全通信が可能かどうかを判断することもできる。その場合、記憶部１１の状態情報に、複数のノードそれぞれの故障の有無を示す情報を含める。そして演算部１２は、すべての軸の範囲を決定したとき、複数のノードの位置と状態情報とに基づいて、ＢＢ５内の利用可能なノード間で全対全通信が保証できるかどうかを判断する。例えば利用可能なノード間の通信経路上に、ルーティング機能が故障したノードが存在しないことが確認される。少なくとも１対のノード間の通信経路上に、ルーティング機能が故障したノードが存在すれば、全対全通信は保証できない。演算部１２は、全対全通信が保証できると判断された場合に、ＢＢ５内の利用可能なノードの中から、ジョブに割り当てるノードを決定する。
【００２３】
このように事前にＢＢ５内の利用可能なノード間で全対全通信が保証できることを確認しておくことで、ＢＢ５内からどのような組み合わせで割り当てるノードを選択しても、割り当てたノード間の通信が保証される。そのため、割り当てるノードを選択する度に、通信が可能かどうかを判定せずに済み、割り当てるノードを選択する際の処理効率が向上する。
【００２４】
なお演算部１２は、すべての軸の範囲を決定した後に、ＢＢ５内の利用可能なノード間で全対全通信が保証できないと判断された場合、例えば、少なくとも一部の軸において範囲が変更されるように、範囲決定をやり直す。これにより、全対全通信を保証したＢＢ５を探索できる。
【００２５】
決定対象軸の座標値の範囲の幅を変えずに範囲の位置を移動しても、すべての位置においてＢＢ５内の利用可能なノード間で全対全通信が保証できないと判断される場合もある。この場合、決定対象軸の座標値の範囲の幅をそれ以上広げても、全対全通信を保証できない領域を包含してしまい、全対全通信を保証できるようにはならない。そこで、このような場合には、演算部１２は、決定対象軸の座標値の範囲の決定を取りやめ、既に範囲が決定された軸の少なくとも一部において範囲が変更されるように、範囲決定をやり直してもよい。これにより、無駄な探索処理を行わずに済み、処理効率が向上する。
【００２６】
メッシュ結合またはトーラス結合のｎ次元ネットワークは、階層的にすることもできる。例えば、ノード集合である単位ノード群内のノードがｕ（ｕは１以上の整数）次元メッシュ結合またはｕ次元トーラス結合で接続された第１ネットワークを下位構造とする。そして、複数の単位ノード群がｖ（ｖは１以上の整数）次元メッシュ結合またはｖ次元トーラス結合で接続された第２ネットワークを上位構造とする。このとき、第２ネットワークでは、例えば隣接する単位ノード群内のｕ次元の座標値が同じノード同士が接続される。
【００２７】
このような階層的なネットワークトポロジーの場合、第２ネットワークにおける単位ノード群間の通信の保証を、効率的に行うことができる。例えば演算部１２は、複数の単位ノード群内の各ノードのｕ次元の座標値のうち、複数の単位ノード群それぞれにおけるルーティング機能が故障した故障ノードのｕ次元の座標値と重複しない座標値が少なくとも１つあることを確認する。このような重複しない座標値が少なくとも１つあれば、すべての単位ノード群内で、その座標値を有するノードはルーティングを行うことができる。すなわち、ルーティング機能が故障したノードのｕ次元の座標値と重複しない座標値のノードが、複数の単位ノード群内にあれば、そのノードを介して単位ノード群間の通信ができる。このような重複しない座標値が検出できた場合、演算部１２は、第２ネットワークを介した単位ノード群間の全対全通信が保証できると判断する。これにより、第２ネットワークにおける単位ノード群間の通信が保証できるかどうかの判定を、容易に行うことができる。
【００２８】
利用ノード数が多いため、決定対象軸の座標値の範囲の幅が狭いと、ＢＢ５内に、利用ノード数分の利用可能ノードが含まれないことが明らかな場合もある。その場合、演算部１２は、例えば、座標値の範囲を、最初から全範囲としてもよい。例えば演算部１２は、範囲が決定した軸の座標値が決定された範囲内である利用可能なノードの数から、範囲が決定した軸の座標値が該範囲内であり、決定対象軸の座標値が所定座標値である利用可能なノードの数を減算する。減算した結果が、利用ノード数に満たない場合、演算部１２は、候補範囲の幅の初期値を、決定対象軸の座標値の全範囲とする。これにより、不要な探索を行わずに済み、処理が効率化される。
【００２９】
なお、演算部１２は、例えばジョブ管理装置１０が有するプロセッサにより実現することができる。また、記憶部１１は、例えばジョブ管理装置１０が有するメモリにより実現することができる。
【００３０】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。
図２は、第２の実施の形態のシステム構成例を示す図である。第２の実施の形態では、複数の端末装置３１，３２，３３，・・・がネットワーク３０を介してジョブ管理サーバ１００に接続されている。端末装置３１，３２，３３，・・・は、並列ジョブの実行指示をするユーザが使用するコンピュータである。
【００３１】
ジョブ管理サーバ１００は、端末装置３１，３２，３３，・・・から受信したジョブ実行要求で指定されたジョブに対する、実行資源としてのノードの割り当てを管理する。ジョブ管理サーバ１００は、管理ネットワーク２０を介して複数のノード４１〜４６，・・・に接続されている。複数のノード４１〜４６，・・・は、ジョブを実行するコンピュータである。複数のノード４１〜４６，・・・は、インターコネクトによるｎ（ｎは２以上の整数）次元のメッシュ結合またはトーラス結合で接続されている。
【００３２】
このようなシステムにおいて、いずれかの端末装置からジョブ管理サーバ１００にジョブ実行要求が入力されると、ジョブ管理サーバ１００が、受信したジョブ実行要求で要求されているジョブの並列度に応じて、そのジョブに割り当てるノードを決定する。例えばジョブ管理サーバ１００は、並列度が「４」のジョブに対して、４つのノードを割り当てる。そしてジョブ管理サーバ１００は、各ジョブの実行指示を、そのジョブに割り当てたノードに対して出力する。ジョブの実行指示を受け取ったノードは、指示に従ってジョブを実行する。なお複数のノードが並列ジョブを実行する場合、そのジョブを実行するノード間で、計算結果の受け渡しなどのデータ通信が行われる。
【００３３】
図３は、ジョブ管理サーバのハードウェアの一構成例を示す図である。ジョブ管理サーバ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３４】
メモリ１０２は、ジョブ管理サーバ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３５】
周辺機器としては、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８ａ，１０８ｂがある。
【００３６】
ＨＤＤ１０３は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ジョブ管理サーバ１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの不揮発性の半導体記憶装置を使用することもできる。
【００３７】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３８】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３９】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００４０】
機器接続インタフェース１０７は、ジョブ管理サーバ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００４１】
ネットワークインタフェース１０８ａは、ネットワーク３０に接続されている。ネットワークインタフェース１０８ａは、ネットワーク３０を介して、端末装置３１，３２，３３，・・・との間でデータの送受信を行う。
【００４２】
ネットワークインタフェース１０８ｂは、管理ネットワーク２０に接続されている。ネットワークインタフェース１０８ｂは、管理ネットワーク２０を介して、ノード４１〜４６，・・・との間でデータの送受信を行う。
【００４３】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示したジョブ管理装置１０も、図３に示したジョブ管理サーバ１００と同様のハードウェアにより実現することができる。また複数のノード４１〜４６，・・・も、ジョブ管理サーバ１００と同様のハードウェアで実現できる。ただし、複数のノード４１〜４６，・・・は、他のノードと接続するためのインターコネクトのインタフェースをさらに有している。
【００４４】
ジョブ管理サーバ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。ジョブ管理サーバ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、ジョブ管理サーバ１００に実行させるプログラムをＨＤＤ１０３に格納しておくことができる。プロセッサ１０１は、ＨＤＤ１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またジョブ管理サーバ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ＨＤＤ１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４５】
このようなシステムにおいて、ジョブ管理サーバ１００は、並列ジョブを実行する複数のノード間のデータ通信が効率的に実行できるように、ジョブに対してノードを割り当てる。
【００４６】
図４は、ジョブ管理サーバの機能を示すブロック図である。ジョブ管理サーバ１００は、ノード情報記憶部１１０、ジョブ実行要求受け付け部１２０、スケジューラ１３０、およびジョブ実行指示部１４０を有する。
【００４７】
ノード情報記憶部１１０は、ジョブの計算に使用するノードに関する情報（ノード情報１１１）を記憶する。ノード情報１１１には、例えば各ノードの識別子、位置、及び状態が含まれる。位置は、ｎ次の軸ごとの座標で表される。ノードの状態には、例えばジョブ実行中、ルータ故障中、プロセッサ故障中、空きなどの状態がある。プロセッサが故障しておらず、ジョブ実行中でない空きノードが、ジョブに新たに割り当て可能なノードである。またルータ故障中のノードを経由したノード間通信は行うことができない。そのため、矩形領域内のノード間の全対全通信が可能かどうかを判断する際には、ルータ故障中のノードを経由せずに全対全通信ができるかどうかが判断される。なおノード情報記憶部１１０としては、例えばメモリ１０２またはＨＤＤ１０３の記憶領域の一部が使用される。
【００４８】
ジョブ実行要求受け付け部１２０は、端末装置３１，３２，３３，・・・からのジョブ実行要求を受信する。ジョブ実行要求受け付け部１２０は、受信したジョブ実行要求を、スケジューラ１３０に転送し、ジョブ実行要求に応じたジョブに対して、そのジョブの実行に用いるノードの割り当てを依頼する。
【００４９】
スケジューラ１３０は、ノード情報１１１を参照し、ジョブ実行要求に応じたジョブに対して、そのジョブを実行するノードを割り当てる。例えばスケジューラ１３０は、メッシュ結合またはトーラス結合のネットワーク内から、ジョブの利用ノード数分の利用可能なノードが存在する、できるだけ小さい矩形領域を選択し、その矩形領域内のノードをジョブに割り当てる。これにより、並列ジョブを実行する際のノード間の通信距離が短くなり、通信効率が向上する。ノード間の通信距離が短くなれば、通信経路上のノードの故障により通信障害が発生する可能性も抑制できる。なおスケジューラ１３０は、選択する矩形領域（ＢＢ）内に、他のジョブに既に割り当てられているノードが含まれることを許容する。これにより、システム内のノードを有効利用したノードの割り当てが可能となる。スケジューラ１３０は、ジョブに対して割り当てるノードを決定すると、決定したノードをジョブ実行指示部１４０に通知する。
【００５０】
ジョブ実行指示部１４０は、ジョブに割り当てられたノードに対して、そのジョブの実行を指示する。ジョブ実行指示部１４０は、ジョブの実行を指示したノードのノード情報における状態を、ジョブ実行中に更新する。またジョブ実行指示部１４０は、ノードにおいてジョブの実行が完了すると、そのノードのノード情報における状態を、空きに更新する。さらにジョブ実行指示部１４０は、各ノード４１，４２，４３，・・・の動作状況を監視し、プロセッサまたはルータの機能の不具合を検出する。そしてジョブ実行指示部１４０は、不具合を検出したノードのノード情報における状態として、不具合の内容を設定する。
【００５１】
なお、図４に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図４に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００５２】
このようなジョブ管理サーバ１００により、ノード資源を有効に利用しながらもノード間通信の性能低下を抑制した割り当てが行われる。例えばスケジューラ１３０は、ＢＢをサブメッシュ／サブトーラスとするのではなく、ジョブごとのＢＢが重なり合うことを許容する。そのため、ジョブごとにサブメッシュ／サブトーラスを決め、サブメッシュ／サブトーラス内のノードを割り当てる場合と異なり、ノードを有効利用することが可能となる。
【００５３】
図５は、ノードを有効利用した割り当ての一例を示す図である。図５の例では、複数の端末装置３１〜３４それぞれから、４つのジョブに関するジョブ実行要求が入力されている。端末装置３１からは、６つのノードを利用する「ジョブＡ」の実行要求が入力されている。端末装置３２からは、３つのノードを利用する「ジョブＢ」の実行要求が入力されている。端末装置３３からは、４つのノードを利用する「ジョブＣ」の実行要求が入力されている。端末装置３４からは、３つのノードを利用する「ジョブＤ」の実行要求が入力されている。ここで、「ジョブＡ」、「ジョブＢ」、「ジョブＣ」、「ジョブＤ」の順で、ノードを割り当てるものとする。
【００５４】
ジョブに対するノードの割り当てを、サブメッシュまたはサブトーラス内から行った場合、ジョブＡ、ジョブＢ、ジョブＣへのノードの割り当て後、空きノードが３つあるにもかかわらず、ジョブＤにノードを割り当てることができない。すなわち、サブメッシュまたはサブトーラスは、他のサブメッシュ／サブトーラスと領域が重ならないことが前提となるため、３つの空きノードを囲むサブメッシュ／サブトーラスを生成できない。
【００５５】
他方、第２の実施の形態では、ネットワークトポロジーがメッシュ／トーラスでのノード割り当てに際して、１ジョブへの割り当て範囲をサブメッシュやサブトーラスに限定しない。すなわちスケジューラ１３０は、ジョブごとに、そのジョブの利用ノード数以上の空きノードを含む、できるだけ小さいＢＢを生成し、そのＢＢ内のノードをジョブに割り当てる。ＢＢは、他のＢＢと領域が重なることが許容される。そのため、サブメッシュ／サブトーラスを生成できなかった３つの空きノードを囲むＢＢを生成し、そのＢＢ内のノードをジョブＤに割り当てることができる。
【００５６】
また第２の実施の形態では、できるだけ小さいＢＢを生成することで、ジョブ間の通信の干渉や経由ルータ数の増加によるジョブ性能の低下が抑制される。以下、ジョブ間の通信の干渉について説明する。
【００５７】
図６は、通信の干渉の発生例を示す図である。例えば、４つのノード５１〜５４が１つのジョブ（ジョブＡ）に割り当てられた後、ノード５５，５６が別のジョブ（ジョブＢ）に割り当てられた場合を考える。またノード間のデータ転送は、ｘ方向へ転送後、ｙ方向に転送されるものとする。この場合、ノード５２からノード５３へのデータ転送では、ノード５２・ノード５１・ノード５３という順でデータが転送される。またノード５５からノード５６へのデータ転送では、ノード５５・ノード５２・ノード５１・ノード５３・ノード５６という順でデータが転送される。この２つのデータ転送の転送経路のうち、ノード５２からノード５１への経路と、ノード５１からノード５３への経路とが重複する。経路が重複する場合、データ転送が同時に発生したときに、通信の干渉が生じ、いずれかのデータ転送が待たされる。その結果、一方のジョブの処理に想定以上の時間がかかってしまう。
【００５８】
このような通信の干渉は、通信するノード間の距離が離れているほど発生しやすい。第２の実施の形態では、ジョブへのノードの割り当ての際に、できるだけ小さいＢＢを生成するため、ジョブに割り当てるノードが分散することが抑制され、可能な限り近い場所に集約される。その結果、通信の干渉の発生が抑制される。
【００５９】
また、できるだけ小さいＢＢを生成することで、ノード内のルーティング機能の故障の影響を受けるジョブの数を抑制する効果も期待できる。
図７は、ルータ故障の影響範囲の一例を示す図である。ネットワークトポロジーがメッシュ／トーラスで、かつ、ノード間通信におけるパケットの経路選択（ルーティング）が静的であるものとする。すなわち、予め決められた経路でデータ通信が行われる。図７の例では、ジョブＡに割り当てられたノード間の通信と、ジョブＢに割り当てられたノード間の通信と、ジョブＣに割り当てられたノード間の通信とがいずれもノード５７を経由している。この場合、ノード５７のルーティング機能が故障すると、ノード５７を経由したノード間通信を行う全てのジョブに影響が及ぶ。このように通信経路の重なりが多いほど、１台のノードの故障の影響範囲が大きくなりやすい。
【００６０】
第２の実施の形態では、できるだけ小さいＢＢを生成するため、割り当て済みのジョブが利用するルータ／リンクに故障箇所が発生した際に、故障の影響を受けるジョブの数をできるだけ少なくすることができる。
【００６１】
なお、パケットの経路選択が静的であり、ジョブへのノード割り当て前にルーティング機能が故障したノードがある場合、そのノードを含むＢＢを生成すると、そのＢＢ内のノードをジョブに割り当てたとき、ノード間の通信が保証されない可能性がある。
【００６２】
図８は、ルータが故障したノードがある場合のノード間通信の例を示す図である。図８の例では、ノード５８のルーティング機能に障害があることが事前に判明している。このとき、ノード５９とノード６０とを同じジョブに割り当てると、そのジョブに割り当てたノード間の通信が保証できなくなる。他方、ノード６１とノード６２であれば、同じジョブに割り当てても、ノード間通信を保証できる。
【００６３】
第２の実施の形態では、１ジョブに割り当てた全てのノード間で通信が可能なことを保証できるＢＢを選択し、そのＢＢ内のノードをジョブに割り当てる。これにより、ノードの割り当て後に通信障害が判明し、再割り当てとなるような事態の発生を抑止できる。
【００６４】
以上のように、第２の実施の形態では、ノードを有効利用しながらも、干渉の発生の抑止、ルーティング機能故障時の影響範囲の抑止、およびノード間の通信が保証されない割り当ての抑止が実現される。
【００６５】
図９は、第２の実施の形態におけるノード割り当て例を示す図である。図９の例では、４つのノードで並列処理を行うジョブの実行要求が入力されている。この場合、スケジューラ１３０は、ジョブの利用ノード数以上の利用可能ノードを含むＢＢ７１を決定する。図９の例では、ＢＢ７１内に５個の利用可能なノードが含まれる。スケジューラ１３０は、ＢＢ７１に含まれる利用可能なノードを、ジョブに割り当てる。
【００６６】
またスケジューラ１３０は、ＢＢ探索に際しては、サイズの小さいものから順番に探索し、最初に発見したものの範囲でジョブ割り当てを行う。これにより、可能な限り小さいＢＢから、ノードの割り当てを行うことができる。
【００６７】
例えば、ネットワークトポロジーがｎ次元のメッシュ／トーラスであるとする。スケジューラ１３０は、ｎ個の軸について任意の優先順位を定める。そしてスケジューラ１３０は、優先順位の高い軸方向のサイズが小さいものから順番に適切なＢＢを探索し、探索で得られたＢＢ内のノードをジョブに割り当てる。
【００６８】
例えば、ｎ＝３の場合であり、軸０，１，２の順に優先度が高いものとする。この場合は、以下の順番でＢＢが探索される。
・軸０方向のサイズの小さい順
・軸０方向のサイズが同じ場合、軸１方向のサイズの小さい順
・軸０，１方向のサイズが同じ場合、軸２方向のサイズの小さい順
軸の優先順位は、ネットワークトポロジーに基づいて、その軸方向への通信を行うノードのペアの数が多くなる軸ほど高くすることができる。例えば、あるノードを選択し、当該ノードを通過する通信を行い得る任意のノードのペア（パケット送信ノードとパケット受信ノード）の集合を考える。このとき、ノードのペア間の通信が、どの軸方向の移動により選択したノードを通過するかによって分類する。そして、最もペアの数が多い軸から順番に高優先度となるように設定する。
【００６９】
また通信の方向が、ｘ方向、ｙ方向、ｚ方向の順番で通信が行われることが決まっている場合がある。この場合、過去の統計情報などから、例えばｙ方向の通信が他の軸よりも多く発生することが分かっていれば、ｙ軸の優先順を最も高くしてもよい。
【００７０】
これにより、ノードに故障箇所が発生した際に、当該ノードを通過するジョブの数ができるだけ少なくなるようにＢＢが選択される。結果として故障の影響を受けるジョブの数をできるだけ少なくすることが、適正な処理時間の範囲で可能となる。
【００７１】
以下、効率的な探索処理を伴う、ジョブへのノードの割り当て処理について詳細に説明する。以下では、特に断りの無い限り、ネットワークトポロジーがｎ次元のメッシュ／トーラスであり、ｎ個の軸の優先度については、所与であるとする。ここでは、軸の優先度は軸０が最も高く、軸１，軸２，・・・の順に低くなっていき、軸（ｎ−１）が最も低い優先度をもつものとする。なお、任意の軸優先度をもつシステムにおいて、優先度順に上記の通り軸名を設定すれば本手法は適用可能である。
【００７２】
当該システムに属するノードの位置はｎ次元の座標を用いて（ｘ0，ｘ1，・・・，ｘn-1）と表せるものとする。ここでｘiは、当該ノードの軸ｉ方向の座標値を表わす０以上の整数値である。原点Ｏ＝（０，０，・・・，０）軸ｉサイズ Ｓi＝ｍａｘ｛ｘi＋１｜ｘ∈Ｘ｝，Ｓ＝（Ｓ0，Ｓ1，・・・，Ｓ(n-1)）と定義する。ここで、Ｘはシステムに属するノードの集合である。原点がｘであり、軸ｉ方向の大きさがｓiであるｎ次元の矩形領域を、ｓ＝（ｓ0，ｓ1，・・・，ｓ(n-1)）を用いてＲ（ｘ，ｓ）と表記する。Ｒ（ｘ，ｓ）＝｛（ｘ0＋ｄ0，ｘ1＋ｄ1，・・・，ｘ(n-1)＋ｄ(n-1)）｜ｄ0∈［０，ｓ0），ｄ1∈［０，ｓ1），・・・，ｄ(n-1)∈［０，ｓ(n-1)）］｝である。以下では、Ｒ（Ｏ，Ｓ）＝Ｘを満たす、すなわち、矩形領域Ｒ（Ｏ，Ｓ）内の任意の座標値について対応するノードが存在すると仮定する。本仮定を満たさないようなシステムの場合、ノードが存在しない座標値には、ジョブの割り当ておよび通信経路として利用することのできないノードが存在しているとみなすことで本手法を適用することが可能である。
【００７３】
任意のＢＢは原点ｘとサイズｓを用いてＲ（ｘ，ｓ）と表わすことが可能であることに注意されたい。ＢＢ内の利用可能ノードの個数を、Ｎ（ｘ，ｓ）と表わす。ここでは単一ジョブへのノード割り当てのみを考え、当該ジョブの利用ノード数をｐと記載する。ｐは１以上の整数である。複数のジョブに対して資源割り当てを行う場合は、本処理を繰り返し実施すれば可能である。
【００７４】
図１０は、第２の実施の形態におけるノードの割り当て処理を示すフローチャートである。この処理は、利用ノード数を指定したジョブ実行要求に応じて実行される。
［ステップＳ１０１］スケジューラ１３０は、ＢＢの開始位置を示すｘの初期値として原点Ｏを設定する。またＢＢのサイズｓの初期値として、最小の値（１，１，・・・，１）を設定する。
【００７５】
［ステップＳ１０２］スケジューラ１３０は、ジョブの利用ノード数分の割り当て可能なノードを含むＢＢ探索処理を実行する。この処理の詳細は後述する（図１１参照）。
［ステップＳ１０３］スケジューラ１３０は、ＢＢ探索処理により、ジョブの利用ノード数分の割り当て可能なノードを含むＢＢが検出できたか否かを判断する。該当ＢＢが検出できた場合、処理がステップＳ１０４に進められる。該当ＢＢが検出できなかった場合、処理がステップＳ１０５に進められる。
【００７６】
［ステップＳ１０４］スケジューラ１３０は、検出したＢＢ内の空きノードのうち、ジョブの利用ノード数分のノードを選択し、選択したノードをジョブに割り当てる。その後、割り当て処理が終了する。
【００７７】
［ステップＳ１０５］スケジューラ１３０は、割り当て失敗と判断し、割り当て処理を終了する。割り当てが失敗した場合、例えばスケジューラ１３０は、既に実行されている他のジョブが終了するのを待ち、他のジョブが終了したら再度割り当て処理を実行する。
【００７８】
次に、ＢＢ探索処理の詳細を説明する。
図１１は、ＢＢ探索処理の手順を示すフローチャートである。
［ステップＳ１１１］スケジューラ１３０は、軸０に関する探索範囲の制限処理を行う。探索範囲の制限処理は、判断対象の軸方向のＢＢのサイズを最大にしないと、ジョブの利用ノード数分の空きノードを含むＢＢを生成できない場合、判断対象の軸方向のＢＢの幅を、最大値にする処理である。これにより、判断対象の軸方向の幅が狭いＢＢについての探索処理が不要となり、処理が効率化される。探索範囲制限処理の詳細は後述する（図１３参照）。
【００７９】
［ステップＳ１１２］スケジューラ１３０は、ｉ＝０としたときの軸ｉ範囲決定処理を実行する。これにより、ＢＢの０軸方向の範囲（開始位置とサイズ）が決定される。軸ｉ範囲決定処理の詳細は後述する（図１２参照）。
【００８０】
［ステップＳ１１３］スケジューラ１３０は、軸０の軸ｉ範囲決定処理において、範囲決定が成功したか否かを判断する。範囲決定が成功した場合、処理がステップＳ１１４に進められる。範囲決定が失敗した場合、スケジューラ１３０は、ＢＢを検出できないと判断し、ＢＢ探索処理を終了する。
【００８１】
ステップＳ１１４〜Ｓ１１６では、軸１に関してステップＳ１１１〜Ｓ１１３と同様の処理が行われる。そして軸１に関して範囲決定が成功すれば（ステップＳ１１６でＹＥＳ）、処理がステップＳ１１８に進められる。軸１に関して範囲決定が失敗すれば（ステップＳ１１６でＮＯ）、処理がステップＳ１１７に進められる。
【００８２】
［ステップＳ１１７］スケジューラ１３０は、軸１に関して範囲決定に失敗した場合、ｘ0の値を１だけカウントアップする。またスケジューラ１３０は、ｘ1を０に初期化し、ｓ1を１に初期化する。その後、処理がステップＳ１１２に進められる。これにより、軸０の範囲の開始位置を変えて、０軸の範囲決定から処理がやり直される。
【００８３】
ステップＳ１１８〜Ｓ１２１では、軸２に関してステップＳ１１４〜Ｓ１１７と同様の処理が行われる。そして軸２に関して範囲決定が成功すれば（ステップＳ１２０でＹＥＳ）、次の軸３に関する処理に、処理が進められる。軸２に関して範囲決定が失敗すれば（ステップＳ１２０でＮＯ）、ｘ1の値のカウントアップ、ｘ2の初期化、ｓ2の初期化が行われ（ステップＳ１２１）、処理がステップＳ１１５に進められる。
【００８４】
その後、軸ｎ−２までＢＢの範囲が決定すると、処理がステップＳ１２２に進められる。ステップＳ１２２〜Ｓ１２５では、軸ｎ−１に関してステップＳ１１４〜Ｓ１１７と同様の処理が行われる。そして軸ｎ−１に関して範囲決定が成功すれば（ステップＳ１２４でＹＥＳ）、スケジューラ１３０は、現在決定している各軸の範囲を有するＢＢを、探索結果として検出したＢＢとして、ＢＢ探索処理を成功終了する。軸ｎ−１に関して範囲決定が失敗すれば（ステップＳ１２４でＮＯ）、ｘn-2の値のカウントアップ、ｘn-1の初期化、ｓn-1の初期化が行われ（ステップＳ１２５）、軸ｎ−２に関する処理に、処理が進められる。
【００８５】
次に、軸ｉ範囲決定処理について詳細に説明する。
図１２は、軸ｉ範囲決定処理の手順の一例を示すフローチャートである。
［ステップＳ１３１］スケジューラ１３０は、軸ｉがトーラスであり、かつｓi＜Ｓiであるか否かを判断する。これらの条件が満たされれば、処理がステップＳ１３２に進められる。条件が満たされなければ、処理がステップＳ１３３に進められる。
【００８６】
［ステップＳ１３２］スケジューラ１３０は、ｘiendにＳi−１を設定する。ｘiendは、ＢＢの開始位置ｘiをずらしていくときの終点となる位置である。その後、処理がステップＳ１３４に進められる。
【００８７】
［ステップＳ１３３］スケジューラ１３０は、ｘiendにＳi−ｓiを設定する。
［ステップＳ１３４］スケジューラ１３０は、ｓiがＳi以下であるとの条件が満たされるか否かを判断する。条件が満たされれば、処理がステップＳ１３５に進められる。条件が満たされなければ、軸ｉの範囲決定失敗として、軸ｉ範囲決定処理が終了する。
【００８８】
［ステップＳ１３５］スケジューラ１３０は、ｘiがｘiend以下であるとの条件が満たされるか否かを判断する。条件が満たされれば、処理がステップＳ１３７に進められる。条件が満たされなければ、処理がステップＳ１３６に進められる。
【００８９】
［ステップＳ１３６］スケジューラ１３０は、現在のｓiの幅でｘiをずらしていきｘiendに達しても、所定の条件を満たすＢＢが見つからない場合、ｓiの値を１だけカウントアップして、ＢＢの軸ｉ方向の幅を広げる。またスケジューラ１３０は、ｘiの値を０に初期化する。その後、処理がステップＳ１３４に進められる。
【００９０】
［ステップＳ１３７］スケジューラ１３０は、（ｓ0，ｓ1，…，ｓi，Ｓi+1，Ｓi+2,…，Ｓn-1）を、ｓtmpに設定する。これは判定対象のＢＢのサイズｓtmpとして、軸ｉまでの各軸方向には、これまでの処理で選択した幅をとり、軸ｉ＋１以降の各軸方向には、最大の幅をとることを示している。
【００９１】
［ステップＳ１３８］スケジューラ１３０は、ｉ＝ｎ−１が満たされるか否かを判断する。この条件が満たされる場合、現在、最後の軸に関する範囲決定処理を行っているため、処理がステップＳ１３９に進められる。条件が満たされなければ、処理がステップＳ１４０に進められる。
【００９２】
［ステップＳ１３９］スケジューラ１３０は、判定対象のＢＢ内のすべてのノードについて、全対全通信が保証されるか否かが判断される。全対全通信が保証される場合とは、ＢＢ内の全てのノードペア間の通信経路上に、ルーティング機能が故障したノードが存在しない場合である。全対全通信が保証されれば、処理がステップＳ１４０に進められる。全対全通信が保証されなければ、処理がステップＳ１４１に進められる。
【００９３】
［ステップＳ１４０］スケジューラ１３０は、Ｎ（ｘ，ｓtmp）≧ｐが満たされるか否かを判断する。すなわち判定対象のＢＢ内の利用可能ノードの個数が、ジョブの利用ノード数ｐ以上か否かが判断される。なおＢＢ内の各ノードが利用可能かどうかは、ノード情報記憶部１１０内のノード情報１１１に基づいて判断される。
【００９４】
なお、Ｎ（ｘ，ｓ）の算出処理は、前回の算出結果を有効利用することで効率化することができる。例えば、軸ｉの探索処理では、ｓi＝１から１ずつ順番に探索が行われる。そこでスケジューラ１３０は、ｘi，ｓiについての探索処理においてＮ（ｘ，ｓ）値を２次元配列などのデータ構造に記録しておく。これにより、ｓi＞２となる場合のＮ（ｘ，ｓ）の算出を以下のように１回の加算操作で算出することが可能になる。
Ｎi（ｘi，ｓi）＝Ｎi（ｘi，ｓi−１）＋Ｎi（ｘi+ｓi−１，１）
ここで、
Ｎi（ｘi，ｓi）＝Ｎ（（ｘ0，ｘ1，・・・，ｘi，０，０，・・・，０），（ｓ0，ｓ1，・・・，ｓi，Ｓi+1，Ｓi+2，・・・，Ｓn-1））
である。
【００９５】
Ｎ（ｘ，ｓtmp）≧ｐの条件が満たされた場合、軸ｉの範囲決定が成功したものとして、軸ｉ範囲決定処理が終了する。条件が満たされない場合、処理がステップＳ１４１に進められる。
【００９６】
［ステップＳ１４１］スケジューラ１３０は、ｘiの値を１だけカウントアップして、処理をステップＳ１３５に進める。
以上のような処理によって、ジョブの利用ノード数ｐ以上の利用可能ノードを含む、できるだけ小さなＢＢが探索される。
【００９７】
次に、探索範囲制限処理（図１１のステップＳ１１１，Ｓ１１４，Ｓ１１８，Ｓ１２２）について詳細に説明する。例えばスケジューラ１３０は、範囲が決定した軸の座標値がその範囲内である利用可能なノードの数から、範囲が決定した軸の座標値が決定された範囲内であり、軸ｉの座標値が所定座標値（ｘi）である利用可能なノードの数を減算する。減算結果が、利用ノード数ｐに満たない場合、スケジューラ１３０は、軸ｉの範囲を全範囲とする。詳細には、以下の通りである。
【００９８】
スケジューラ１３０は、軸ｉの探索処理において、以下の条件Ｘを満たした場合にＳi→ｓiを実施し、最大サイズの探索より開始する。これにより、軸ｉにおける探索処理のループ回数を削減し、処理の高速化が実現できる。
条件Ｘ
∀ｘi∈［０，ｓi），Ｎ（ａi（０），ｂi（Ｓi））Ｎ（ａi（ｘi），ｂi（１））＜ｐ
ここで
ａi（ｋ）＝ｘ0，ｘ1，・・・，ｘi-1，ｋ，０，０，・・・，０
ｂi（ｋ）＝（ｓ0，ｓ1，・・・，ｓi-1，ｋ，Ｓi+1，Ｓi+2，・・・，Ｓi-1）
である。上記条件式を満たす場合、Ｎ（ｘ，ｓ）≧ｐを満たすのはｓi＝Ｓiのみであるため、ｓi＜Ｓiについての探索を省略してもよい。
【００９９】
図１３は、探索範囲制限処理の手順の一例を示す図である。
［ステップＳ１５１］スケジューラ１３０は、軸ｉについて、条件Ｘを満たすか否かを判断する。条件Ｘが満たされる場合、処理がステップＳ１５２に進められる。条件Ｘが満たされなければ、探索範囲制限処理が終了する。
【０１００】
［ステップＳ１５２］スケジューラ１３０は、ｓiにＳiを設定する。その後、探索範囲制限処理が終了する。
このように、ある軸方向について、ＢＢの幅を最大にしないと、ジョブの利用ノード数以上の利用可能ノードをＢＢ内に含めることができない場合、その軸方向の幅を最初から最大にしてＢＢの探索が行われる。これにより、探索処理の効率化を図ることができる。
【０１０１】
［第３の実施の形態］
次に第３の実施の形態について説明する。第３の実施の形態は、ＢＢの探索に際して、以前の探索結果より全ノード間での通信が保証されないことが明らかなＢＢについては、全ノード間で通信可能かどうかの検証を省略するものである。これにより、ＢＢ探索処理の効率化が図れる。
【０１０２】
例えば、スケジューラ１３０は、ネットワークトポロジーがｎ次元のメッシュ／トーラス結合であるとしたとき、ＢＢの探索過程で生成したＢＢについて、ＢＢ内全域の全ノードで相互に通信可能なこと（全対全通信）が保証されるか検証する。スケジューラ１３０は、保証されない場合は次のＢＢの探索を行う。スケジューラ１３０は、次のＢＢの探索に際して、以前の探索結果より全ノード間での通信が保証されないことが明らかなＢＢについては、全ノード間で通信可能かどうかの検証は行わない。
【０１０３】
例えばｓiを変えずにｘiを変更しても、すべてのｘiにおいて全対全通信が保証できないと判断された場合、ｓiの値を大きくしても、現在のｓiで検証したいずれかのＢＢの範囲を含むこととなる。すると全対全通信が保証できない領域を含むこととなり、全体としても全対全通信が保証できない。この場合、スケジューラ１３０は、例えば現在の軸ｉにおける範囲決定処理は、範囲決定失敗として終了させ、既に範囲が決定された軸の少なくとも一部において範囲が変更されるように、範囲決定をやり直す。
【０１０４】
図１４は、第３の実施の形態における軸ｉ範囲決定処理の手順の一例を示すフローチャートである。なお図１４のステップＳ２０１〜Ｓ２０８，Ｓ２１０，Ｓ２１１，Ｓ２１３の処理は、それぞれ図１２のステップＳ１３１〜Ｓ１３５，Ｓ１３７〜Ｓ１４１，Ｓ１３６の処理と同様である。以下、図１２と異なる処理について説明する。
【０１０５】
［ステップＳ２０９］スケジューラ１３０は、判定対象のＢＢ内のすべてのノードについて、全対全通信が保証されない場合、ｄiの値を１だけカウントアップする。ｄiは、ある軸ｉのｓiについて、全対全通信を保証することのできないｘiの数である。このｄiの数がｘiの取り得る値の数と一致する場合、軸ｉのサイズがｓiとなるＢＢすべてで全対全通信が保証されないこととなる。カウントアップ後、処理がステップＳ２１１に進められる。
【０１０６】
［ステップＳ２１２］スケジューラ１３０は、ｘiがｘiendに至るまでＢＢの開始位置を移動させても範囲が決定できない場合（ステップＳ２０５でＮＯ）、ｄi＝ｘiend＋１が満たされるかどうかを判断する。この式が満たされなければ、処理がステップＳ２１３に進められ、軸ｉ方向の幅を広げたＢＢについて、探索が行われる。他方、ｄi＝ｘiend＋１が満たされた場合、軸ｉのサイズがｓiとなるＢＢすべてで全対全通信が保証されない。この場合、軸ｉ方向にＢＢの幅を広げても、全対全通信が満たされるようにはならない。そこで、処理がステップＳ２１４に進められる。
【０１０７】
［ステップＳ２１４］スケジューラ１３０は、ｓi＝１かつｉ＞０の条件が満たされるか否かを判断する。この条件が満たされる場合、処理がステップＳ２１５に進められる。この条件が満たされなければ、範囲決定失敗として軸ｉの範囲決定処理が終了する。
【０１０８】
［ステップＳ２１５］スケジューラ１３０は、ｄi-1の値を１だけカウントアップし、範囲決定失敗として軸ｉの範囲決定処理を終了する。
このようにＢＢの軸ｉ方向の幅がｓiのときに、ｘiをどこにとっても全対全通信が保証できない場合、幅がｓi＋１，ｓi＋２のＢＢを続けて探索しても全対全通信は必ず保証されず、これ以上探索する意味がないため軸ｉに対する探索が打ち切られる。
【０１０９】
これにより、ノードに故障箇所が発生した際に、１ジョブに割り当てた全てのノード間で通信が可能なことを保証するための検証処理の実施を最低限の回数に抑えることが可能となる。結果として、１ジョブに割り当てた全てのノード間で通信が可能なことを保証することが、適切な処理時間の範囲で可能となる。
【０１１０】
〔第４の実施の形態〕
次に第４の実施の形態について説明する。第４の実施の形態は、ネットワークトポロジーがｎ＝ｕ＋ｖ（ｕ，ｖは、１以上の整数）次元のメッシュ／トーラス結合の例である。
【０１１１】
図１５は、第４の実施の形態におけるノードの結合例を示す図である。第４の実施の形態では、単位ノード群８０が、ｖ次元（例えば３次元）空間内に、各軸方向に並べられている。各単位ノード群８０は、ノード８１が、ｕ次元（例えば３次元）空間内に、各軸方向に並べられている。
【０１１２】
ここで、ｕ次元空間の軸を、軸ａ、軸ｂ、軸ｃとする。ｖ次元空間の軸を、軸ｘ、軸ｙ、軸ｚとする。この場合、３次元＋３次元の６次元のメッシュ／トーラス結合となる。各ノードの位置は、軸ａ、軸ｂ、軸ｃにおける座標値と、軸ｘ、軸ｙ、軸ｚにおける座標値とにより特定される。
【０１１３】
図１６は、隣接する単位ノード群内のノード間の接続例を示す図である。ｘ−ｙ−ｚ空間で隣接する単位ノード群８０ａ，８０ｂ間は、ａ−ｂ−ｃ空間で同じ座標となるノード８１ａ，８１ｂ同士が接続されている。図１６の例では、１つの単位ノード群に１２個のノードが含まれているため、隣接する単位ノード群８０ａ，８０ｂ間は、インターコネクトによる１２本のリンクが存在する。
【０１１４】
このようなネットワークトポロジーでノードが接続されているとき、ノード間の通信では、例えば、軸ｂ→軸ｃ→軸ａ→軸ｘ→軸ｙ→軸ｚ→軸ａ→軸ｃ→軸ｂの順で、各軸方向にデータが移動する。
【０１１５】
図１７は、ノード間の通信例を示す図である。単位ノード群８０ｃ内のノード８１ｃと、単位ノード群８０ｄ内のノード８１ｄとの間で、相互に通信する場合について説明する。図中、ノード８１ｃからノード８１ｄへのデータの移動経路を、実線の矢印で示す。また、ノード８１ｄからノード８１ｃへのデータの移動経路を、点線の矢印で示す。
【０１１６】
ノード８１ｃからノード８１ｄへのデータは、まず単位ノード群８０ｃ内のネットワークを、軸ｂ→軸ｃ→軸ａの順で各軸方向に移動（ｂｃａルーティング）し、ノード８２ｃに到達する。そのデータは、ノード８２ｃから、他の単位ノード群内のノード８２ｃに対応する位置（軸ａ、軸ｂ、軸ｃの座標値が同じ）のノード間を移動（ｘｙｚルーティング）し、単位ノード群８０ｄ内のノード８２ｄに到達する。そして、そのデータは、軸ａ→軸ｃ→軸ｂの順で各軸方向に移動（ａｃｂルーティング）し、目的のノード８１ｄに到達する。
【０１１７】
ノード８１ｄからノード８１ｃへのデータは、まず単位ノード群８０ｄ内のネットワークを軸ｃ方向に移動し、ノード８３ｄに到達する。そのデータは、ノード８３ｄから、他の単位ノード群内のノード８３ｄと対応する位置のノード間を移動し、単位ノード群８０ｃ内のノード８３ｃに到達する。そして、そのデータは、軸ｃ→軸ｂの順で各軸方向に移動し、目的のノード８１ｃに到達する。
【０１１８】
このような経路でデータ通信が行われる場合、単位ノード群間の移動の際に、移動経路上の単位ノード群内にルーティング機能が故障したノードが存在しても、多くの場合は通信できる。
【０１１９】
図１８は、ルーティング機能が故障したノードがある場合のノード間通信の例を示す図である。図１８には、単位ノード群８０ｅ内のノード８１ｅからの単位ノード群８０ｈ内のノード８１ｈへのデータ転送例が示されている。単位ノード群８０ｅ〜８０ｈ間のデータの移動は、ノード８２ｅ〜８２ｈを介して行われる。このときデータを中継する単位ノード群８０ｆ，８０ｇ内のノード８２ｆ，８２ｇ以外のノード８３ｆ，８３ｇが故障しているが、データ通信には影響しない。
【０１２０】
このように、データを中継する単位ノード群内に故障したノードがあっても、通信は可能である。ノード間のデータ移動には、各単位ノード群８０ｅ〜８０ｈ内の対応する位置にあるノードを経由する。そのため各単位ノード群８０ｅ〜８０ｈ内のノード数が１２であれば、ノード間移動経路は１２通り存在する。１２通りの移動経路のうち、少なくとも１つにおいて、単位ノード群８０ｅ〜８０ｈ内の対応する位置の全ノードが正常にルーティングできていれば、ノード間のデータの移動を保証できる。換言すると、１２通りの移動経路すべてにおいて、単位ノード群８０ｅ〜８０ｈ内の対応する位置のノードのうちの少なくとも１つでルーティング機能が故障していれば、ノード間のデータの移動が保証できない。
【０１２１】
そこで第４の実施の形態では、ＢＢ内の全対全通信が保証できるかどうかの検証処理において、ｎ次元メッシュ／トーラス空間上で表現されたノードのルーティング機能の故障箇所をｕ次元サブメッシュ／トーラス上に射影する。射影結果から、全対全通信を保証できるかどうかを判断できる。
【０１２２】
図１９は、故障ノードの位置の射影例を示す図である。図１９の例では、スケジューラ１３０は、単位ノード群８０ｉ〜８０ｔの配列のある軸方向に、故障ノードの位置を射影し、射影結果９１〜９４を得る。射影結果９１〜９４では、各単位ノード群内の故障ノードの座標に対応する位置に、故障を示すフラグ（図中、×印）が示される。次に、スケジューラ１３０は、射影結果９１〜９４をさらに射影し、射影結果９５を得る。射影結果９５において、少なくとも一カ所でも、故障を示すフラグが付いていない位置があれば、その位置のノードを用いて、単位ノード群間の通信を保証することができる。他方、射影結果９５において、すべての箇所に故障を示すフラグが付与されていれば、単位ノード群間の通信は保証されない。
【０１２３】
このようにして、ルーティング機能の故障が発生した際に、１ジョブに割り当てた全てのノード間で通信が可能なことを保証するための検証を、簡単な処理で行うことができる。すなわち、ｎ（ｕ＋ｖ）次元メッシュ／トーラスであるものの、ｕ次元での射影で検証ができ、検証対象の次元数が低減されている。その結果、１ジョブに割り当てた全てのノード間で通信が可能なことを保証することが、適切な処理時間の範囲で可能となる。
【０１２４】
なお、ルーティング機能が故障したノードを含む単位ノード群については、単位ノード群内でのノード間の全対全通信ができない可能性がある。
図２０は、ルーティング機能が故障したノードを含む単位ノード群内の通信例を示す図である。単位ノード群８０ｕでは、ノード８１ｕのルーティング機能が故障しているものとする。このときノード８２ｕからノード８３ｕへの通信は可能である。しかしノード８２ｕからノード８４ｕへは通信できない。
【０１２５】
そこでスケジューラ１３０は、例えば、ルーティング機能が故障したノードを含む単位ノード群からは、ジョブへのノードの割り当てを行わないようにする。これにより、全対全通信が保証できるかどうかの判断時に、単位ノード群内での通信状況を考慮せずに済み、効率的な処理が可能となる。
【０１２６】
この場合の全対全通信可否の検証は、以下のようにして行われる。以下では簡単のため、システムのネットワークトポロジーは６次元のメッシュ／トーラスであると仮定して説明する。任意のｎ次元のメッシュ／トーラスについても以下と同様の手法を適用することは可能である。
【０１２７】
ノードの座標は（ｘ0，ｘ1，ｘ2，ｘ3，ｘ4，ｘ5）と表せる。ノード間のパケットは、以下の経路を通過するようルーティングされるものとする。
１．軸３，４，５からなる３次元サブメッシュ／トーラス内の移動（移動時に通過するノードの軸０，１，２の座標値はすべて同一）
２．軸０，１，２からなる３次元サブメッシュ／トーラス内の移動（移動時に通過するノードの軸３，４，５の座標値はすべて同一）
３．軸３，４，５からなる３次元サブメッシュ／トーラス内の移動（移動時に通過するノードの軸０，１，２の座標値はすべて同一）
ＢＢ内のルーティング機能の故障が存在するノードの座標値の集合をＢとする。また、集合Ｂの軸３，４，５からなるサブメッシュ／トーラス空間への射影Ｂ’を以下のように定義する。
Ｂ’＝｛（ｘ3，ｘ4，ｘ5）｜∀（ｘ0，ｘ1，ｘ2，ｘ3，ｘ4，ｘ5）∈Ｂ｝
このとき、以下の条件を満たす場合、全対全通信が保証されると判断する。
（Ｂ’の補集合）≠（空集合）、かつルーティング機能が故障したノードと（ｘ0，ｘ1，ｘ2）座標値がすべて同一であるノードをジョブへは割り当てない。
【０１２８】
上記条件を満たすノード集合を本手法で探索するには、スケジューラ１３０は、ルーティング機能が故障したノードと（ｘ0，ｘ1，ｘ2）座標値が同じになるノードは利用不可であるとみなし、その上で探索を行う。
【０１２９】
軸４がトーラスであり、Ｓ4＝３である場合、スケジューラ１３０は、以下条件を満たす場合に全対全通信が保証されると判断する。
｛ｘ｜ｘ∈Ｂ，ｘ4＝０｝＝（空集合）または、
｛ｘ｜ｘ∈Ｂ，ｘ4＝１｝＝（空集合）
｛ｘ｜ｘ∈Ｂ，ｘ4＝２｝＝（空集合）
以上のようにして、ネットワークトポロジーがｎ（＝ｕ＋ｖ）次元のメッシュ／トーラス結合の場合において、全対全通信が可能かどうかを、効率的に判断することができる。
【０１３０】
なお、ルーティング機能が故障したノードを含むというだけで、単位ノード群内のすべてのノードについて利用できなくなると、ノードの利用効率が低下する。スケジューラ１３０は、例えば、単位ノード群内の軸ｂ＝１の面上のノードすべてについて、ルーティング機能が正常であれば、その単位ノード群内のノードを利用可能とすることができる。
【０１３１】
図２１は、ルーティング機能が故障したノードを含むもののノードの利用が可能な単位ノード群の例を示す図である。単位ノード群８０ｖ，８０ｗ，８０ｘは、いずれもルーティング機能が故障したノードを含んでいる。このとき単位ノード群８０ｖのｂ＝１の面上のノード８２ｖ，８３ｖ，８４ｖ，８５ｖが正常にルーティングできれば、単位ノード群８０ｖ内の他のノードは、１ホップでｂ＝１面上のいずれかのノードと通信できる。ｂ＝１の面上のノード８２ｖ，８３ｖ，８４ｖ，８５ｖのいずれかを用いて、単位ノード群間の通信を行うようにすれば、単位ノード群８０ｖ内のノードは、ルーティング機能が故障したノードを経由せずに他のノードと通信できることが保証される。これは、他の単位ノード群８０ｗ，８０ｘにおいても同様である。
【０１３２】
すなわち、単位ノード群８０ｖ，８０ｗ，８０ｘそれぞれのｂ＝１の面上のノードがすべて正常にルーティングできれば、以下のことが保証できる。
・ｂｃａルーティング：送信元ノードからｂ＝１面へは１ホップで移動可能
・ｘｙｚルーティング：ｂ＝１面の４ノードのうちいずれかで移動可能
・ａｃｂルーティング：ｂ＝１面から送信先ノードへは１ホップで移動可能
これにより、例えば単位ノード群８０ｖ内のノード８１ｖから単位ノード群８０ｘ内のノード８１ｘへのデータ送信も可能であることが分かる。その結果、ルーティング機能が故障したノードを含む単位ノード群８０ｖ，８０ｗ，８０ｘ内のノードを、ジョブに割り当てることが可能となる。
【０１３３】
ここで軸ｂがトーラス結合であれば、ｂ＝０面上のノードがすべて正常にルーティングできる場合、またはｂ＝２面上のノードがすべて正常にルーティングできる場合にも、単位ノード群８０ｖ，８０ｗ，８０ｘ内のノードをジョブに割り当て可能となる。
【０１３４】
このように、ルーティング機能が故障したノードを含む単位ノード群であっても、その単位ノード群内のノードを利用可能としたことで、ノードの有効利用が可能となる。
図２２は、通信規則ごとの利用可能ノード数の比較例を示す図である。図２２には、以下の４種類の通信規則ごとに、利用可能ノード数が示されている。
・規則「ＡＬＬ」：ｘｙｚルーティングに任意ノードを利用（故障を含む単位ノード群へはジョブを割り当てない）
・規則「ｂ０」：ｘｙｚルーティングにｂ＝０面内のノードを利用（ＢＢ内でｂ＝０のノードに故障が無いこと）
・規則「ｂ１」：ｘｙｚルーティングにｂ＝１面内のノードを利用（ＢＢ内でｂ＝１のノードに故障が無いこと）
・規則「ｂ２」：ｘｙｚルーティングにｂ＝２面内のノードを利用（ＢＢ内でｂ＝２のノードに故障が無いこと）
単位ノード群９６の場合、ルーティング機能が故障したノードを含んでいない。そのため、いずれの規則であっても、空きノードすべてが利用可能となる。
【０１３５】
単位ノード群９７の場合、ｂ＝０の面上のノードにおいて、ルーティング機能が故障している。規則「ＡＬＬ」では利用可能ノード数「０」である。規則「ｂ０」は適用できない。規則「ｂ１」と「ｂ２」では、９台のノードが利用可能となる。
【０１３６】
単位ノード群９８の場合、ｂ＝２の面上のノードにおいて、ルーティング機能が故障している。規則「ＡＬＬ」では利用可能ノード数「０」である。規則「ｂ２」は適用できない。規則「ｂ０」と「ｂ１」では、９台のノードが利用可能となる。
【０１３７】
このように、ルーティング機能が故障したノードを含む単位ノード群内のノードを利用可能とすることで、ノードの有効利用が促進される。
次に、ネットワークトポロジーが６（＝３＋３）次元のメッシュ／トーラス結合のＢＢ探索の具体例を、図２３〜図２５を参照して説明する。以下の例では、単位ノード群ごとに利用可能ノード数が集計されているものとする。またＢＢの軸ａ、軸ｂ、軸ｃの範囲は全範囲として、軸ｘ、軸ｙ、軸ｚの範囲を、順番に決定するものとする。軸ｘ、軸ｙ、軸ｚのうち、優先順位が最も高い軸を軸０、次に優先順位が高い軸を軸１、最も優先順位が低い軸を軸２として、軸ごとの範囲が決定される。
【０１３８】
図２３は、軸０の範囲決定例を示す図である。この例では、利用ノード数は「２５０」である。また軸は、すべてメッシュ結合である。
軸０方向には、３つの単位ノード群が並べられている。そして軸０＝０の面上の単位ノード群、軸０＝１の面上の単位ノード群、および軸０＝２の面上の単位ノード群それぞれについて、利用可能ノード数が集計されている。軸０＝０の面上の単位ノード群の利用可能ノードの総数は「２０」である。軸０＝１の面上の単位ノード群の利用可能ノードの総数は「９０」である。軸０＝２の面上の単位ノード群の利用可能ノードの総数は「２４０」である。
【０１３９】
まず、軸０方向の幅が１（ｓ0＝１）の場合に、利用ノード数を満足するＢＢが生成できるかが検討される。この例では、軸０方向の幅が１（ｓ0＝１）では、利用ノード数を満たすことができない。
【０１４０】
次に、軸０方向の幅が２（ｓ0＝２）の場合に、利用ノード数を満足するＢＢが生成できるかが検討される。この例では、軸０の範囲の開始位置をｘ0＝１とすれば、利用ノード数を満たすことができる。そこで、軸０の範囲が「ｘ0＝１，ｓ0＝２」に決定する。
【０１４１】
図２４は、軸１の範囲決定例を示す図である。決定した軸０の範囲内の軸０の値ごとの各単位ノード群内の利用可能ノード数が、軸１−軸２平面の位置ごとに合計（マージ）される。
【０１４２】
軸１方向には、５つの単位ノード群が並べられている。軸１＝０の面上の単位ノード群の利用可能ノードの総数は「７３」である。軸１＝１の面上の単位ノード群の利用可能ノードの総数は「８９」である。軸１＝２の面上の単位ノード群の利用可能ノードの総数は「６８」である。軸１＝３の面上の単位ノード群の利用可能ノードの総数は「４８」である。軸１＝４の面上の単位ノード群の利用可能ノードの総数は「５２」である。
【０１４３】
まず、軸１方向の幅が１（ｓ1＝１）から徐々に広げながら、利用ノード数を満足するＢＢが生成できるかが検討される。この例では、軸１方向の幅が１（ｓ1＝１）〜３（ｓ1＝３）では、利用ノード数を満たすことができない。
【０１４４】
その後、軸１方向の幅が４（ｓ1＝４）の場合に、利用ノード数を満足するＢＢが生成できるかが検討される。この例では、軸１の範囲の開始位置をｘ1＝０とすれば、利用ノード数を満たすことができる。そこで、軸１の範囲が「ｘ1＝０，ｓ1＝４」に決定する。
【０１４５】
図２５は、軸２の範囲決定例を示す図である。決定した軸１の範囲内の軸１の値ごとの各単位ノード群内の利用可能ノード数が、軸２の位置ごとに合計（マージ）される。
軸２方向には、４つの単位ノード群が並べられている。軸２＝０である単位ノード群の利用可能ノードの総数は「７１」である。軸２＝１である単位ノード群の利用可能ノードの総数は「６３」である。軸２＝２である単位ノード群の利用可能ノードの総数は「７９」である。軸２＝３である単位ノード群の利用可能ノードの総数は「６５」である。
【０１４６】
まず、軸２方向の幅が１（ｓ2＝１）から徐々に広げながら、利用ノード数を満足するＢＢが生成できるかが検討される。この例では、軸２方向の幅が１（ｓ2＝１）〜３（ｓ2＝３）では、利用ノード数を満たすことができない。
【０１４７】
その後、軸２方向の幅が４（ｓ2＝４）の場合に、利用ノード数を満足するＢＢが生成できるかが検討される。この例では、軸２の範囲の開始位置をｘ2＝０とすれば、利用ノード数を満たすことができる。そこで、軸２の範囲が「ｘ2＝０，ｓ2＝４」に決定する。その結果、ＢＢの領域は、「ｘ（１，０，０）、ｓ（２，４，４）」に決定される。
【０１４８】
このように、各軸方向に、狭い範囲から徐々に幅を広げてＢＢの領域を決定することで、利用ノード数以上の利用可能なノードを含む、できるだけ小さいサイズのＢＢを生成できる。その結果、ジョブに割り当てたノード間の通信を効率的に行うことができ、処理効率が向上する。また、ＢＢ内に利用できないノードが含まれることを許容しているため、利用ノード数以上の利用可能なノードを含むようになるまでＢＢのサイズを最大値まで広げていくことができ、ノードの有効利用が可能である。
【０１４９】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１５０】
１  端末装置
２ａ，２ｂ，２ｃ  ノード
３  ジョブ実行要求
４  ｎ次元空間
５  ＢＢ（Bounding Box）
１０  ジョブ管理装置
１１  記憶部
１２  演算部
【図１】
0006413634.tif 000002
【図２】
0006413634.tif 000003
【図３】
0006413634.tif 000004
【図４】
0006413634.tif 000005
【図５】
0006413634.tif 000006
【図６】
0006413634.tif 000007
【図７】
0006413634.tif 000008
【図８】
0006413634.tif 000009
【図９】
0006413634.tif 000010
【図１０】
0006413634.tif 000011
【図１１】
0006413634.tif 000012
【図１２】
0006413634.tif 000013
【図１３】
0006413634.tif 000014
【図１４】
0006413634.tif 000015
【図１５】
0006413634.tif 000016
【図１６】
0006413634.tif 000017
【図１７】
0006413634.tif 000018
【図１８】
0006413634.tif 000019
【図１９】
0006413634.tif 000020
【図２０】
0006413634.tif 000021
【図２１】
0006413634.tif 000022
【図２２】
0006413634.tif 000023
【図２３】
0006413634.tif 000024
【図２４】
0006413634.tif 000025
【図２５】
0006413634.tif 000026