(57)【要約】【課題】空きノードを含む領域を探索する際の処理コストを軽減することを目的とする。【解決手段】並列計算機システム１は、互いに接続された複数の計算ノード３ａ〜３ｆを有する並列計算装置３と、管理装置１０とを有する。また、管理装置１０は、計算ノード３ａ〜３ｆにジョブが割当てられているか否かを示す第１の情報と、計算ノード３ａ〜３ｆの接続関係の端に配置される仮想的な計算ノードに常時ジョブが割当てられる旨を示す第２の情報とを含むノードテーブル１２を記憶する。そして、管理装置１０は、ノードテーブル１２を用いて、ジョブが割当てられていない空き計算ノードが連続して配置された領域を全て探索する。その後、管理装置１０は、探索された領域のうち、割当対象のジョブの割当に適した領域を特定し、特定した領域に対し、割当対象のジョブを割当てる。【選択図】図１
2015036924.tif 000002
【特許請求の範囲】
【請求項１】
互いに接続された複数の情報処理装置を有する並列計算装置と、前記並列計算装置の管理を行う管理装置とを有する並列計算機システムにおいて、
前記管理装置は、
前記情報処理装置にジョブが割当てられているか否かを示す第１の割当情報と、前記情報処理装置の接続関係の端に配置される仮想的な情報処理装置に常時ジョブが割当てられる旨を示す第２の割当情報とを含む割当テーブルを記憶する記憶部と、
前記記憶部に記憶された割当テーブルを用いて、ジョブが割当てられていない空き情報処理装置が連続して配置された領域を探索する探索部と、
前記探索部が探索した領域のうち、割当対象のジョブの割当に適した領域を特定する特定部と、
前記特定部が特定した領域に対し、前記割当対象のジョブを割当てる割当部と
を有することを特徴とする並列計算機システム。
【請求項２】
前記探索部は、前記領域の起点となる情報処理装置を選択し、選択した情報処理装置から所定の軸方向に空き情報処理装置が連続する数を、前記所定の軸方向以外の軸方向に連続する情報処理装置の数を変更しながら計数し、計数結果を用いて、前記選択した情報処理装置を起点とする全ての領域を探索することを特徴とする請求項１に記載の並列計算機システム。
【請求項３】
前記探索部は、前記所定の軸方向以外の軸方向に連続する情報処理装置の数を変更し、前記所定の軸方向に空き情報処理装置が連続する数を新たに計数する場合は、それまでに計数した数の最小値を新たに計数する数の最大値とすることを特徴とする請求項２に記載の並列計算機システム。
【請求項４】
前記管理装置は、
原点となる情報処理装置からの接続距離が最大となる情報処理装置から、前記原点となる情報処理装置に向かって、所定の軸方向に情報処理装置を順に選択する処理を、他の軸方向の接続距離を変更しながら実行する選択部と、
前記割当テーブルを用いて、前記選択部により選択された情報処理装置にジョブが割当てられているか否かを判定する判定部と
を有し、
前記探索部は、前記選択された情報処理装置にジョブが割当てられていないと前記判定部が判定した場合は、当該選択された情報処理装置と接続された他の情報処理装置であって、当該選択された情報処理装置よりもいずれかの軸方向における前記原点からの接続距離が大きい情報処理装置を起点とする領域の探索結果を用いて、当該選択された情報処理装置を起点とする領域を探索する
ことを特徴とする請求項１に記載の並列計算機システム。
【請求項５】
前記探索部は、前記選択された情報処理装置を起点とする領域のうち第１の軸方向の接続距離が１である領域を探索する場合は、前記選択された情報処理装置と第２の軸方向に接続された情報処理装置を起点とする領域のうち、第１の軸方向の接続距離が１である領域における第２の軸方向の接続距離に１を加算した値を、探索対象となる領域における第２の軸方向の接続距離とする
ことを特徴とする請求項４に記載の並列計算機システム。
【請求項６】
前記探索部は、前記選択された情報処理装置を起点とする領域のうち第１の軸方向の接続距離が２以上である領域を探索する場合は、前記選択された情報処理装置と第２の軸方向に接続された情報処理装置を起点とする領域のうち、第１の軸方向における接続距離が、探索対象となる領域の第１の軸方向における接続距離と同一である領域の第２の軸方向における接続距離に１を加算した値、または、前記選択された情報処理装置と第１の軸方向に接続された情報処理装置を起点とする領域のうち、第１の軸方向における接続距離が、探索対象となる領域の第１の軸方向における接続距離から１を減算した値となる領域の第２の軸方向における接続距離の値のいずれか小さい方の接続距離を、前記探索対象となる領域における第２の軸方向の接続距離とする
ことを特徴とする請求項４または５に記載の並列計算機システム。
【請求項７】
前記情報処理装置は、所定の軸方向を円環状に接続したトーラス型のネットワークを形成し、
前記探索部は、前記所定の軸方向に連続する各情報処理装置をそれぞれ仮想原点とし、仮想原点ごとに、各情報処理装置を起点とする全ての前記領域を探索し、
前記特定部は、前記探索部による探索結果のうち第１の領域における所定の軸方向の接続距離が、前記所定の軸方向以外の軸方向の接続距離が前記第１の領域よりも大きい第２の領域における前記所定の軸方向の接続距離以下となる場合は、前記第１の領域を探索結果から除外することを特徴とする請求項１〜６のいずれか１つに記載の並列計算機システム。
【請求項８】
前記情報処理装置は、所定の軸方向を円環状に接続したトーラス型のネットワークを形成し、
前記管理装置は、複数の前記探索部を有し、
前記記憶部は、前記所定の軸方向に連続する情報処理装置をそれぞれ仮想原点とする複数の前記割当テーブルを記憶し、
前記複数の探索部は、前記所定の軸方向に連続する情報処理装置からそれぞれ異なる情報処理装置を仮想原点として選択し、当該選択した情報処理装置を仮想原点とした前記割当テーブルを用いて、前記空き情報処理装置が連続して配置された領域を探索する処理を並列に実行する
ことを特徴とする請求項１〜７のいずれか１つに記載の並列計算機システム。
【請求項９】
互いに接続された複数の情報処理装置を有する並列計算装置と、前記並列計算装置の管理を行う管理装置とを有する並列計算機システムにおいて、
前記管理装置は、
原点となる情報処理装置からの接続距離が最大となる情報処理装置から、前記原点となる情報処理装置に向かって、所定の軸方向に情報処理装置を順に選択する処理を、他の軸方向の接続距離を変更しながら実行する選択部と、
前記情報処理装置にジョブが割当てられているか否かを示す割当情報を用いて、前記選択部により選択された情報処理装置にジョブが割当てられているか否かを判定する判定部と
前記選択された情報処理装置にジョブが割当てられていると前記判定部が判定した場合は、当該選択された情報処理装置と接続された他の情報処理装置であって、当該選択された情報処理装置よりもいずれかの軸方向における前記原点からの接続距離が大きい情報処理装置を起点とする領域の探索結果を用いて、当該選択された情報処理装置を起点とする領域を探索する探索部と、
前記探索部が探索した領域のうち、割当対象のジョブの割当に適した領域を特定する特定部と、
前記特定部が特定した領域に対し、前記割当対象のジョブを割当てる割当部と
を有することを特徴とする並列計算機システム。
【請求項１０】
互いに接続された複数の情報処理装置を有する並列計算装置の管理を行う管理装置の制御プログラムにおいて、
前記管理装置に、
前記情報処理装置にジョブが割当てられているか否かを示す第１の割当情報と、前記情報処理装置の接続関係の端に配置される仮想的な情報処理装置に常時ジョブが割当てられる旨を示す第２の割当情報とを含む割当テーブルを用いて、ジョブが割当てられていない空き情報処理装置が連続して配置された領域を探索させ、
前記探索された領域のうち、割当対象のジョブの割当に適した領域を特定させ、
前記特定された領域に対し、前記割当対象のジョブを割当てさせる
ことを特徴とする管理装置の制御プログラム。
【請求項１１】
互いに接続された複数の情報処理装置を有する並列計算装置と、並列計算機の管理を行う管理装置とを有する並列計算機システムの制御方法において
前記管理装置が、
前記情報処理装置にジョブが割当てられているか否かを示す第１の割当情報と、前記情報処理装置の接続関係の端に配置される仮想的な情報処理装置に常時ジョブが割当てられる旨を示す第２の割当情報とを含む割当テーブルを用いて、ジョブが割当てられていない空き情報処理装置が連続して配置された領域を探索し、
前記探索された領域のうち、割当対象のジョブの割当に適した領域を特定し、
前記特定された領域に対し、前記割当対象のジョブを割当てる
ことを特徴とする並列計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機システム、管理装置の制御プログラムおよび並列計算機システムの制御方法に関する。
【背景技術】
【０００２】
従来、２次元のメッシュ接続や３次元のキューブ接続やトーラス接続等、任意の次元空間内で隣接関係を有する計算ノード同士を接続し、隣接関係を有しない計算ノード同士の通信を経路中に位置する他の計算ノードに中継させる並列計算機システムが知られている。
【０００３】
かかる並列計算機システムでは、配置が連続していない計算ノードに対して１つのジョブを割当てた場合は、ジョブが割当てられた計算ノード同士の通信を、他のジョブが割当てられた計算ノードが中継する場合がある。かかる場合、あるジョブが割当てられた計算ノード間の通信が、他のジョブが割当てられた計算ノードの外乱となる場合や、あるジョブを実行する計算ノードに異常が発生した際に、他のジョブが中断する場合がある。
【０００４】
このため、並列計算機システムは、新たなジョブの割当てを行う場合は、ジョブが割当てられていない空きノードが連続する領域を全て探索し、探索した領域からジョブの実行に最適な領域を選択する。そして、並列計算機システムは、選択した領域に対して、新たなジョブの割当てを行う。
【０００５】
以下、並列計算機システムがジョブの割当て対象となる全ての領域を探索する処理の一例について説明する。なお、以下の説明では、並列計算機システムは、Ｘ軸方向に４つ、Ｙ軸方向に３つの計算ノードを配置し、隣接する計算ノードを接続した２次元メッシュ状のネットワークを有するものとする。
【０００６】
例えば、並列計算機システムは、計算ノードを１つ選択し、選択した計算ノードからＸ軸方向に連続する計算ノードの数を変更しながら、Ｙ軸方向に連続する空きノードの数を探索する。また、並列計算機システムは、選択した計算ノードからＹ軸方向に連続する計算ノードの数を変更しながら、Ｘ軸方向に連続する空きノードの数を探索する。かかる処理を全ての計算ノードに対して実行することで、並列計算機システムは、ジョブの割当て対象となる全ての領域を示す探索データを取得する。
【０００７】
図２８は、空きノードを探索する処理の一例を説明する図である。なお、図２８には、並列計算機システムが有する全てのノードが空きノードである場合に、並列計算機システムが取得する探索データを、ジョブの割当て対象となる領域の原点となる計算ノードごとにまとめて記載した。また、図２８に示す探索データのうち、他の探索データが示す領域と同一の領域を示す探索データについては、無効データとして網掛けで記載した。
【０００８】
また、図２８に示す例では、原点となる計算ノードが配置された座標を（ａ，ｂ）とし、Ｘ軸方向の計算ノードの数「ｄ」ごとに探索したＹ軸方向に連続する空きノードの数「ｅ」をＴ［ａ］［ｂ］、ｘｙ［ｃ］＝（ｄ，ｅ）と記載した。また、図２８に示す例では、Ｙ軸方向の計算ノードの数「ｅ」ごとに探索したＸ軸方向に連続する空きノードの数「ｄ」をＴ［ａ］［ｂ］、ｙｘ［ｃ］＝（ｄ，ｅ）と記載した。なお、「ｃ」とは、探索データを識別するための配列添字である。
【０００９】
例えば、図２８に示す例では、並列計算機システムは、座標（０，０）に配置された計算ノードを原点とする領域を示す探索データとして、（４，３）、（３，３）、（２，３）、（１，３）、（４，３）、（４，２）、（４，１）を取得する。すなわち、並列計算機システムは、Ｙ軸方向に３つのノードを有し、Ｘ軸方向に１〜４つの計算ノードを有する４つの領域と、Ｘ軸方向に４つのノードを有し、Ｙ軸方向に１〜３つの計算ノードを有する３つの領域とを示す探索データを取得する。
【００１０】
また、並列計算機システムは、他の計算ノードについても、各計算ノードを原点とする領域を示す探索データを取得する。そして、並列計算機システムは、含まれる計算ノードの数が多い順に、取得した探索データをソートする。その後、並列計算機システムは、ソートした探索データから、ジョブの割り当て対象となる数の計算ノードの数を満たす最小の領域を示す探索データを選択し、選択した領域に含まれる計算ノードにジョブの割当てを行う。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０１２−２５２５９１号公報
【特許文献２】国際公開第２００８／１１４４４０号
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、上述したジョブの割当て対象となる領域を探索する技術では、空きノードを連続して含む領域を全て探索するので、計算ノードの数に応じて探索コストが増大するという問題がある。
【００１３】
以下、図２９〜３１を用いて、並列計算機システムがジョブの割当て対象となる領域を全て探索する処理の一例について説明する。なお、以下の例では、従来の並列計算機システムは、空きノードが連続して含まれる長方形の領域を探索する。
【００１４】
まず、図２９を用いて、領域の原点とする情報処理装置を選択する処理の流れについて説明する。図２９は、従来の空きノード探索処理の流れを説明する第１のフローチャートである。図２９に示す例では、並列計算機システムは、Ｙの値を「０」に初期化し（ステップＳ１）、Ｙの値が３より小さいか否かを判定する（ステップＳ２）。そして、並列計算機システムは、Ｙの値が３より小さい場合は（ステップＳ２：Ｙｅｓ）、Ｘの値を「０」に初期化し（ステップＳ３）、Ｘの値が４より小さいか否かを判定する（ステップＳ４）。
【００１５】
ここで、並列計算機システムは、Ｘの値が４より小さい場合は（ステップＳ４：Ｙｅｓ）、Ｙの値を固定してＸ軸方向に連続する空きノードの数を探索するＹ軸固定探索処理を実行する（ステップＳ５）。次に、並列計算機システムは、Ｘの値を固定してＹ軸方向に連続する空きノードの数を探索するＸ軸固定探索処理を実行する（ステップＳ６）。
【００１６】
そして、並列計算機システムは、Ｘの値に１を加算し（ステップＳ７）、ステップＳ４を実行する。一方、並列計算機システムは、Ｘの値が４以上となる場合は（ステップＳ４：Ｎｏ）、Ｙの値に１を加算し（ステップＳ８）、ステップＳ２を実行する。そして、並列計算機システムは、Ｙの値が３以上である場合は（ステップＳ２：Ｎｏ）、処理を終了する。
【００１７】
次に、図３０を用いて、Ｙ軸固定探索処理の一例について説明する。図３０は、従来の空きノード探索処理の流れを説明する第２のフローチャートである。なお、図３０には、図２９中ステップＳ５に示したＹ軸固定探索処理の流れを示すフローチャートを記載した。
【００１８】
例えば、並列計算機システムは、変数ＸＭａｘ、ｉ、ｃ、ｄ、ｅの値を初期化してＸＭａｘ＝４−Ｘ、ｉ＝Ｘ、ｃ＝Ｙ、ｄ＝０、ｅ＝１とし（ステップＳ１０）、ｃの値が３より小さいか否かを判定する（ステップＳ１１）。そして、並列計算機システムは、ｃの値が３より小さい場合は（ステップＳ１１：Ｙｅｓ）、ｉの値が４より小さいか否かを判定する（ステップＳ１２）。
【００１９】
また、並列計算機システムは、ｉの値が４より小さい場合は（ステップＳ１２：Ｙｅｓ）、ｉの値がＸＭａｘの値よりも小さいか否かを判定する（ステップＳ１３）。そして、並列計算機システムは、ｉの値がＸＭａｘの値よりも小さい場合は（ステップＳ１３：Ｙｅｓ）、座標（ｉ，ｃ）に配置された計算ノードＴ［ｉ］［ｃ］が空きノードであるか否かを判定する（ステップＳ１４）。そして、並列計算機システムは、計算ノードＴ［ｉ］［ｃ］が空きノードである場合は（ステップＳ１４：Ｙｅｓ）、ｄとｉの値にそれぞれ１を加算し（ステップＳ１５）、ステップＳ１２を実行する。
【００２０】
一方、並列計算機システムは、ｉの値が４以上である場合（ステップＳ１２：Ｎｏ）、ｉの値がＸＭａｘ以上である場合（ステップＳ１３：Ｎｏ）、または、Ｔ［ｉ］［ｃ］が空きノードではない場合（ステップＳ１４：Ｎｏ）は、以下の処理を実行する。すなわち、並列計算機システムは、探索データＴ［Ｘ］［Ｙ］ｙｘ［ｃ］として（ｄ、ｅ）を出力し、ＸＭａｘ＝ｄとした後に、ｉ、ｄの値を初期化してｉ＝Ｘ、ｄ＝０に設定し、ｃとｅの値にそれぞれ１を加算する（ステップＳ１６）。そして、並列計算機システムは、ステップＳ１１を実行し、ｃの値が３以上である場合は（ステップＳ１１：Ｎｏ）、Ｙ軸固定探索処理を終了する。
【００２１】
次に、図３１を用いて、Ｘ軸固定探索処理の一例について説明する。図３１は、従来の空きノード探索処理の流れを説明する第３のフローチャートである。なお、図３１には、図２９中ステップＳ６に示したＸ軸固定探索処理の流れを示すフローチャートを記載した。
【００２２】
例えば、並列計算機システムは、変数ＹＭａｘ、ｉ、ｃ、ｄ、ｅの値を初期化してＹＭａｘ＝３−Ｙ、ｉ＝Ｙ、ｃ＝Ｘ、ｄ＝１、ｅ＝０とし（ステップＳ２０）、ｃの値が４より小さいか否かを判定する（ステップＳ２１）。そして、並列計算機システムは、ｃの値が４より小さい場合は（ステップＳ２１：Ｙｅｓ）、ｉの値が３より小さいか否かを判定する（ステップＳ２２）。
【００２３】
また、並列計算機システムは、ｉの値が３より小さい場合は（ステップＳ２２：Ｙｅｓ）、ｉの値がＹＭａｘよりも小さいか否かを判定する（ステップＳ２３）。そして、並列計算機システムは、ｉの値がＹＭａｘよりも小さい場合は（ステップＳ２３：Ｙｅｓ）、座標（ｃ、ｉ）に配置された計算ノードＴ［ｃ］［ｉ］が空きノードであるか否かを判定する（ステップＳ２４）。そして、並列計算機システムは、計算ノードＴ［ｃ］［ｉ］が空きノードである場合は（ステップＳ２４：Ｙｅｓ）、ｅとｉの値にそれぞれ１を加算し（ステップＳ２５）、ステップＳ２２を実行する。
【００２４】
一方、並列計算機システムは、ｉの値が３以上である場合（ステップＳ２２：Ｎｏ）、ｉの値がＹＭａｘ以上である場合（ステップＳ２３：Ｎｏ）、または、Ｔ［ｃ］［ｉ］が空きノードではない場合は（ステップＳ２４：Ｎｏ）、以下の処理を実行する。すなわち、並列計算機システムは、探索データＴ［Ｘ］［Ｙ］ｘｙ［ｃ］として（ｄ、ｅ）を出力し、ＹＭａｘ＝ｅとした後に、ｉ、ｅの値を初期化してｉ＝Ｙ、ｅ＝０に設定し、ｃとｄの値にそれぞれ１を加算する（ステップＳ２６）。そして、並列計算機システムは、ステップＳ２１を実行し、ｃの値が４以上である場合は（ステップＳ２１：Ｎｏ）、Ｙ軸固定探索処理を終了する。
【００２５】
このように、並列計算機システムは、ジョブの割当対象となる領域を探索する際に、Ｙ軸固定探索処理、および、Ｘ軸固定探索処理に含まれる条件判定処理を繰り返し実行する。このため、並列計算機システムは、計算ノードの数が増加するに従って、実行する条件判定処理の回数が増加し、実用的な時間内で処理を完了できなくなる場合がある。
【００２６】
１つの側面では、本発明は、空きノードを含む領域を探索する際の処理コストを軽減することを目的とする。
【課題を解決するための手段】
【００２７】
一態様の並列計算機システムは、互いに接続された複数の情報処理装置を有する並列計算装置と、前記並列計算装置の管理を行う管理装置とを有する。また、管理装置は、前記情報処理装置にジョブが割当てられているか否かを示す第１の割当情報と、前記情報処理装置の接続関係の端に配置される仮想的な情報処理装置に常時ジョブが割当てられる旨を示す第２の割当情報とを含む割当テーブルを記憶する記憶部を有する。また、管理装置は、前記記憶部に記憶された割当テーブルを用いて、ジョブが割当てられていない空き情報処理装置が連続して配置された領域を探索する探索部を有する。また、管理装置は、前記探索部が探索した領域のうち、割当対象のジョブの割当に適した領域を特定する特定部を有する。また、管理装置は、前記特定部が特定した領域に対し、前記割当対象のジョブを割当てる割当部を有する。
【発明の効果】
【００２８】
一実施形態によれば、本発明は、空きノードを含む領域を探索する際の処理コストを軽減することができる。
【図面の簡単な説明】
【００２９】
【図１】図１は、実施例１に係る並列計算機システムを説明する図である。
【図２】図２は、実施例１に係る管理装置が生成するノードテーブルの一例を説明する図である。
【図３】図３は、実施例１に係る管理装置が実行するＹ軸固定探索処理を説明する図である。
【図４】図４は、実施例１に係る管理装置が実行するＸ軸固定探索処理を説明する図である。
【図５】図５は、実施例１に係る管理装置が空き領域を特定する処理の一例を説明する図である。
【図６】図６は、空きノードが連続する空間が最大となるように、リストから探索データを選択する処理を説明する図である。
【図７】図７は、実施例１に係る管理装置が実行するＹ軸固定探索処理の流れを説明するフローチャートである。
【図８】図８は、実施例１に係る管理装置が実行するＸ軸固定探索処理の流れを説明するフローチャートである。
【図９】図９は、実施例２に係る並列計算機システムを説明する図である。
【図１０】図１０は、実施例２に係る管理装置がＸ軸方向について実行する処理の流れを説明する図である。
【図１１】図１１は、実施例２に係る管理装置がＹ軸方向について実行する処理の流れを説明する図である。
【図１２】図１２は、従来の並列計算機システムが実行する条件判定回数の一例を説明する図である。
【図１３】図１３は、実施例２に係る管理装置が実行する条件判定回数の一例を説明する図である。
【図１４】図１４は、実施例２に係る管理装置が実行するメイン処理の流れを説明するフローチャートである。
【図１５】図１５は、実施例２に係る管理装置が実行するＹ軸固定探索処理の流れを説明するフローチャートである。
【図１６】図１６は、実施例２に係る管理装置が実行するＸ軸固定探索処理の流れを説明するフローチャートである。
【図１７】図１７は、実施例３に係る並列計算機システムを説明する図である。
【図１８】図１８は、仮想原点の一例を説明する図である。
【図１９】図１９は、実施例３に係る管理装置が実行する処理を説明する図である。
【図２０】図２０は、実施例３に係る管理装置が探索データを削減する処理の流れを説明する図である。
【図２１】図２１は、従来の並列計算機システムが出力する探索データの数の一例を説明する図である。
【図２２】図２２は、実施例３に係る管理装置が出力する探索データの数の一例を説明する図である。
【図２３】図２３は、従来の並列計算機システムがＸ軸方向のトーラスを考慮した際に実行する条件判定回数の一例を説明する図である。
【図２４】図２４は、実施例３に係る管理装置が実行する条件判定回数の一例を説明する図である。
【図２５】図２５は、実施例３に係る管理装置が実行するメイン処理の流れを説明するフローチャートである。
【図２６】図２６は、実施例３に係る管理装置が実行する４並列処理の流れを説明するフローチャートである。
【図２７】図２７は、制御プログラムを実行するコンピュータの一例を説明する図である。
【図２８】図２８は、空きノードを探索する処理の一例を説明する図である。
【図２９】図２９は、従来の空きノード探索処理の流れを説明する第１のフローチャートである。
【図３０】図３０は、従来の空きノード探索処理の流れを説明する第２のフローチャートである。
【図３１】図３１は、従来の空きノード探索処理の流れを説明する第３のフローチャートである。
【発明を実施するための形態】
【００３０】
以下に添付図面を参照して本願に係る並列計算機システム、管理装置の制御プログラムおよび並列計算機システムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により開示技術が限定されるものではない。また、各実施例は、矛盾しない範囲で適宜組みあわせてもよい。
【実施例１】
【００３１】
以下の実施例１では、図１を用いて、本願に係る並列計算機システムの一例を説明する。図１は、実施例１に係る並列計算機システムを説明する図である。図１に示す例では、並列計算機システム１は、入力装置２、並列計算機３、出力装置４、管理装置１０を有する。
【００３２】
入力装置２は、並列計算機システム１に対して実行させるジョブの入力を行うための入力装置である。例えば、入力装置２は、並列計算機システム１の利用者が入力したジョブの内容を管理装置１０に出力する。また、入力装置２は、ジョブの割当対象となる計算ノードの数やトポロジの入力を受け付けると、受け付けた計算ノードの数やトポロジを管理装置１０に通知する。例えば、入力装置２は、ジョブの割当対象となる計算ノードのトポロジとして、Ｘ軸方向に２つ、Ｙ軸方向に３つの２次元メッシュ状に接続された計６つの計算ノードを示す情報「（２、３）」を受け付ける。かかる場合は、入力装置２は、受け付けた情報「（２、３）」を割り当てるジョブとともに管理装置１０に通知する。
【００３３】
並列計算機３は、複数の計算ノード３ａ〜３ｆを有する。なお、並列計算機３は、図１に示す計算ノード３ａ〜３ｆ以外にも、複数の計算ノードを有するものとする。また、以下の説明では、計算ノード３ｂ〜３ｆは、計算ノード３ａと同様の機能を発揮するものとして、説明を省略する。
【００３４】
計算ノード３ａは、各種の情報処理を実行する情報処理装置である。かかる計算ノード３ａの一例としては、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）、ＧＰＵ（Graphic  Processing  Unit）、ＡＳＩＣ（Application  Specific  Integrated  Circuit）等が適用される。なお、計算ノード３ａは、複数のＣＰＵ等とメモリとＩ／Ｏ（Input/Output）を備える情報処理装置であってもよい。
【００３５】
ここで、各計算ノード３ａ〜３ｆは、２次元のメッシュ状に接続されており、接続された計算ノード同士で通信を行う。例えば、各計算ノード３ａ〜３ｆは、各Ｘ軸方向に４つ、各Ｙ軸方向に３つの計算ノードを配置し、隣接する計算ノード同士を接続した２次元メッシュ状のネットワークを形成する。そして、例えば、計算ノード３ａは、直接接続されていない計算ノード３ｃとデータ通信を行う場合は、計算ノード３ｂや他の計算ノードを介して、通信を実行する。
【００３６】
なお、以下の説明では、２次元メッシュ状に接続された計算ノードのうち、端点に配置された計算ノードを原点とし、原点から見た各軸方向の計算ノード数を用いて、各計算ノード３ａ〜３ｆが配置された座標を表現する。すなわち、並列計算機システム１は、原点となる計算ノードから、各軸方向にいくつの計算ノードが接続されているかを示す接続距離を、各計算ノードが配置された座標とする。例えば、原点となる計算ノードからＸ軸方向にｄ個、Ｙ軸方向にｅ個離れた計算ノードを座標（ｄ，ｅ）に配置された計算ノードとする。また、以下の説明では、並列計算機３は、Ｘ軸方向に３つ、Ｙ軸方向に４つの計１２個の計算ノードを２次元メッシュ状に接続したネットワークを有するものとする。
【００３７】
一方、管理装置１０は、記憶部１１、生成部１３、受付部１４、探索部１５、特定部１６、割当部１７を有する。また、記憶部１１は、ノードテーブル１２を記憶する。
【００３８】
ノードテーブル１２は、各計算ノード３ａ〜３ｆにジョブが割り当てられているか否かを示す情報が格納されたテーブルである。以下、図２を用いて、ノードテーブル１２の一例について説明する。図２は、実施例１に係る管理装置が生成するノードテーブルの一例を説明する図である。
【００３９】
例えば、図２に示すように、ノードテーブル１２は、各計算ノードの座標と、各計算ノードにジョブが割当てられているか否かを示すバリッドビットとが格納されている。例えば、ノードテーブル１２には、原点である計算ノードにジョブが割当てられていない旨を示す「（０，０）＝０」を記憶する。また、ノードテーブル１２には、各計算ノードの座標とバリッドビット、「（０，１）＝０」、「（０，２）＝０」、「（１，０）＝０」、「（１，１）＝０」、「（１，２）＝０」が格納されている。また、ノードテーブル１２には「（２，０）＝０」、「（２，１）＝０」、「（２，２）＝０」、「（３，０）＝０」、「（３，１）＝０」、「（３，２）＝０」、が格納されている。
【００４０】
ここで、ノードテーブル１２には、図２中点線で示すように、各計算ノード３ａ〜３ｆが形成するネットワークの終端に配置される仮想的な計算ノードの座標と常時ジョブが割当てられた旨を示すバリッドビットが格納される。詳細には、ノードテーブル１２には、「（０，３）＝１」、「（１，３）＝１」、「（２，３）＝１」、「（３，３）＝１」、「（４，０）＝１」、「（４，１）＝１」、「（４，２）＝１」、「（４，３）＝１」が格納される。なお、以下の説明では、ネットワークの終端に配置される仮想的な計算ノードであって、常時ジョブが割当てられた計算ノードを仮想計算ノードと記載する。
【００４１】
図１に戻り、説明を続ける。生成部１３は、ノードテーブル１２を生成する。詳細には、生成部１３は、各計算ノード３ａ〜３ｆの座標と、計算ノードにジョブが割当てられているか否かを示すバリッドビットとを対応付けた情報を生成する。また、生成部１３は、各計算ノード３ａ〜３ｆが形成するネットワークの終端に配置される仮想的な計算ノードの座標を生成し、生成した座標にジョブが割当てられた旨を示すバリッドビットとを対応付けた情報を生成する。そして、生成部１３は、生成した各情報をノードテーブル１２として記憶部１１に格納する。
【００４２】
受付部１４は、入力装置２から、割当対象となるジョブと、ジョブの割当対象となる計算ノードの数またはトポロジを受け付ける。かかる場合は、受付部１４は、探索部１５に対し、ジョブが割当てられていない計算ノードである空きノードが連続する領域の探索を要求し、特定部１６に対し、受け付けた計算ノードの数またはトポロジを通知する。また、受付部１４は、割当部１７に対し、受け付けたジョブを出力する。
【００４３】
探索部１５は、生成部１３が生成したノードテーブル１２を用いて、空きノードが連続して配置された領域を全て探索する。具体的には、探索部１５は、並列計算機３が有する各計算ノードを順次選択し、選択した計算ノードを起点としてＸ軸方向の接続距離を変更しながらＹ軸方向に空きノードが連続する数を計数するＸ軸固定探索処理を実行する。また、探索部１５は、選択した計算ノードを起点としてＹ軸方向の接続距離を変更しながらＸ軸方向に空きノードが連続する数を計数するＹ軸固定探索処理を実行する。
【００４４】
そして、探索部１５は、Ｘ軸固定探索処理とＹ軸固定探索処理との結果、選択した計算ノードを起点とし、空きノードが連続する領域のＸ軸方向とＹ軸方向との大きさとを探索データとして出力する。以下、探索部１５が実行するＹ軸固定探索処理およびＸ軸固定探索処理について説明する。なお、以下の説明では、探索部１５は、ジョブの割当てを容易にするため、長方形型の領域を探索するものとする。
【００４５】
まず、図３を用いて、探索部１５が実行するＹ軸固定探索処理を説明する。図３は、実施例１に係る管理装置が実行するＹ軸固定探索処理を説明する図である。なお、図３には、座標（０，０）に配置された計算ノードを起点とした際に探索部１５が実行するＹ軸固定探索処理の内容について記載した。なお、図３に示す例では、座標（３，１）に配置された計算ノードにジョブが割当てられているものとする。
【００４６】
まず探索部１５は、図３中（Ａ）に示すように、探索する領域に含まれるＸ軸方向の計算ノードの数の最大値となるＸＭａｘを初期化する。例えば、探索部１５は、ＸＭａｘをＸ軸方向の終端となる仮想計算ノードまでの計算ノードの数「４」に設定する。そして、探索部１５は、図３中（Ｂ）に示すように、座標（０，０）に配置された計算ノードから、Ｘ軸方向の接続距離がＸｍａｘと同数の計算ノード、すなわち座標（４，０）に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
【００４７】
ここで、従来の並列計算機システムでは、判定対象となる計算ノードが空きノードか否かを判定する度に、Ｘ軸方向に連続する全ての計算ノードについて空きノードか否かを判定する処理を実行したか判定した。しかし、かかる処理を実行した場合は、並列計算機３が有する計算ノードの数が増加するに従って、判定処理の回数が多くなってしまう。
【００４８】
一方、並列計算機システム１では、ノードデータ１２に、常時ジョブが割当てられた仮想計算ノードのデータが含まれる。このため、探索部１５は、Ｘ軸方向に連続する全ての計算ノードについて空きノードか否かを判定する処理を実行したか判定せずとも、各計算ノードが空きノードか否かを判定するだけで、空きノードが連続する領域を適切に探索できる。
【００４９】
例えば、図３に示す例では、探索部１５は、座標（０，０）の計算ノードから座標（３，０）の計算ノードまで順に空きノードか否かを判定する。そして、探索部１５は、座標（３、０）の計算ノードが空きノードか否かを判定した後、図３中（Ｃ）に示すように、座標（４，０）の計算ノード、すなわち仮想計算ノードにジョブが割当てられているか否かを判定する。この結果、探索部１５は、座標（４，０）の計算ノードにジョブが割当てられていると判定し、座標（０，０）に配置された計算ノードから座標（３，０）に配置された計算ノードまでの「４」つの計算ノードが空きノードであると判定する。
【００５０】
この結果、探索部１５は、Ｙ軸方向の接続距離を「１」とした際のＸ軸方向の探索処理が完了したと判定する。そして、探索部１５は、座標（０，０）を起点とするＹ軸固定探索の第１の領域の探索データとして、Ｘ軸方向の空きノード数が「４」、Ｙ軸方向の開きノード数が「１」となる領域を示すＴ［０］［０］、ｙｘ［０］＝（４，１）を出力する。このように、探索部１５は、Ｘ軸方向の終端まで判定処理を行ったか否かを判定を行わずとも、Ｘ軸方向の探索処理が完了したか判定できる。
【００５１】
また、探索部１５は、図３中（Ｄ）に示すように、ＸＭａｘの値を、空きノードが連続した数「４」に更新する。また、探索部１５は、図３中（Ｅ）に示すように、起点となる計算ノードとＹ軸方向に接続された計算ノード、すなわち座標（０，１）に配置された計算ノードを選択する。そして、探索部１５は、座標（０，１）に配置された計算ノードからＸＭａｘと同じ数の計算ノード、すなわち座標（３，１）に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
【００５２】
ここで、図３中（Ｆ）に示すように、座標（３，１）に配置された計算ノードにジョブが割当てられている。このため、探索部１５は、座標（０，０）を起点とし、Ｙ軸方向の大きさを「２」とした際に、空きノードが連続した数が「３」であると判定する。この結果、探索部１５は、座標（０，０）を起点とする第２の領域の探索データとして、Ｔ［０］［０］、ｙｘ［１］＝（３，２）を出力する。
【００５３】
次に、探索部１５は、図３中（Ｇ）に示すように、空きノードが連続した数「３」にＸＭａｘの値を更新する。また、探索部１５は、前回選択した計算ノードからＹ軸方向に接続された計算ノード、すなわち座標（０，２）に配置された計算ノードを選択する。そして、探索部１５は、座標（０，２）に配置された計算ノードからＸ軸方向にＸｍａｘと同じ数の計算ノード、すなわち座標（２，２）に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
【００５４】
ここで、図３に示す例では、座標（０，２）に配置された計算ノードから座標（２，２）に配置された計算ノードまでには、ジョブが割当てられていない。かかる場合は、探索部１５は、座標（０，０）を起点とし、Ｙ軸方向の大きさを「３」とした際に空きノードが連続した数が「３」であると判定する。この結果、探索部１５は、座標（０，０）を起点とする第３の領域の探索データとして、Ｔ［０］［０］、ｙｘ［２］＝（３，３）を出力する。
【００５５】
ここで、図３に示すように、座標（１，４）の計算ノードにジョブが割当てられている場合は、起点となる計算ノードから接続距離が（３，３）となる領域が、ジョブが割当てられていない計算ノードが連続する最大の長方形領域となる。このため、座標（１，４）の計算ノードにジョブが割当てられている場合は、座標（２，４）の計算ノードにジョブが割当てられているか否かを判定する処理は無駄な処理となる。
【００５６】
そこで、探索部１５は、Ｙ軸固定探索処理において、各Ｘ軸方向に連続する空きノードの数のうち、最小の数をＸＭａｘとして記憶する。そして、探索部１５は、Ｙ軸の大きさを変更した際に、記憶したＸＭａｘと同数の計算ノードについてのみ、ジョブが割当てられているか否かを判定する。例えば、探索部１５は、図３中（Ｈ）に示すように、座標（３，２）に配置された計算ノードにジョブが割当てられているか否かを判定する処理を実行しない。このため、探索部１５は、長方形の領域を探索する場合に、Ｙ軸固定探索処理における無駄な判定を削減できる。
【００５７】
次に、図４を用いて、探索部１５が実行するＸ軸固定探索処理を説明する。図４は、実施例１に係る管理装置が実行するＸ軸固定探索処理を説明する図である。なお、図４には、座標（０，０）に配置された計算ノードを起点とした際に探索部１５が実行するＸ軸固定探索処理の内容について記載した。なお、図４に示す例では、座標（１，２）に配置された計算ノードにジョブが割当てられているものとする。
【００５８】
まず探索部１５は、探索する領域に含まれるＹ軸方向の計算ノードの数の最大値となるＹＭａｘを初期化する。例えば、探索部１５は、ＸＭａｘをＸ軸方向の終端となる仮想計算ノードまでの計算ノードの数「３」に設定する。そして、探索部１５は、図４中（Ｉ）に示すように、座標（０，０）に配置された計算ノードから、Ｙ軸方向の接続距離がＹｍａｘと同数の計算ノード、すなわち座標（０，３）に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
【００５９】
また、図４に示す例では、探索部１５は、座標（０，０）の計算ノードから座標（０，２）の計算ノードまで順に空きノードか否かを判定する。そして、探索部１５は、座標（０、２）の計算ノードが空きノードか否かを判定した後、図４中（Ｊ）に示すように、座標（０，３）の計算ノード、すなわち仮想計算ノードにジョブが割当てられているか否かを判定する。
【００６０】
この結果、探索部１５は、座標（０，３）の計算ノードにジョブが割当てられていると判定し、座標（０，０）に配置された計算ノードから座標（０，２）に配置された計算ノードまでの「３」つの計算ノードが空きノードであると判定する。そして、探索部１５は、座標（０，０）を起点とするＸ軸固定探索の第１の領域の探索データとして、Ｙ軸方向の接続距離が「３」、Ｘ軸方向の接続距離が「１」となる領域を示すＴ［０］［０］、ｘｙ［０］＝（１，３）を出力する。
【００６１】
また、探索部１５は、ＹＭａｘの値を、空きノードが連続した数「３」に更新する。また、探索部１５は、起点となる計算ノードとＸ軸方向に接続された計算ノード、すなわち座標（１，０）に配置された計算ノードを選択する。そして、探索部１５は、座標（１，０）に配置された計算ノードからＹｍａｘと同数の計算ノード、すなわち座標（１，３）に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
【００６２】
ここで、図４中（Ｋ）に示すように、座標（１，２）に配置された計算ノードにジョブが割当てられている。このため、探索部１５は、座標（０，０）を起点とし、Ｘ軸方向の大きさを「２」とした際に空きノードが連続した数が「２」であると判定する。この結果、探索部１５は、座標（０，０）を起点とする第２の領域の探索データとして、Ｔ［０］［０］、ｘｙ［１］＝（２，２）を出力する。
【００６３】
次に、探索部１５は、図４中（Ｌ）に示すように、ＹＭａｘの値を空きノードが連続した数「２」に更新する。また、探索部１５は、前回選択した計算ノードからＸ軸方向に接続された計算ノード、すなわち座標（２，０）に配置された計算ノードを選択する。そして、探索部１５は、、図４中（Ｍ）に示すように、座標（２，０）に配置された計算ノードからＹ軸方向に接続されたＹｍａｘと同数の計算ノード、すなわち座標（２，１）に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
【００６４】
また、図４に示す例では、座標（２，０）に配置された計算ノードから座標（２，１）に配置された計算ノードまでには、ジョブが割当てられていない。かかる場合は、探索部１５は、座標（０，０）を起点とし、Ｘ軸方向の大きさを「３」とした際に空きノードが連続した数が「２」であると判定する。この結果、探索部１５は、座標（０，０）を起点とする第３の領域の探索データとして、Ｔ［０］［０］、ｘｙ［２］＝（３，２）を出力する。
【００６５】
次に、探索部１５は、ＹＭａｘの値を空きノードが連続した数「２」に更新する。また、探索部１５は、前回選択した計算ノードからＸ軸方向に接続された計算ノード、すなわち座標（３，０）に配置された計算ノードを選択する。そして、探索部１５は、図４中（Ｍ）に示すように、座標（３，０）に配置された計算ノードからＹ軸方向に接続されたＹｍａｘと同数の計算ノード、すなわち座標（３，１）に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
【００６６】
この結果、探索部１５は、座標（０，０）を起点とし、Ｘ軸方向の大きさを「４」とした際に空きノードが連続した数が「２」であると判定する。この結果、探索部１５は、座標（０，０）を起点とする第３の領域の探索データとして、Ｔ［０］［０］、ｘｙ［２］＝（３，２）を出力する。
【００６７】
このように探索部１５は、各計算ノード３ａ〜３ｆが形成するネットワークの終端に常時ジョブが割当てられた仮想計算ノードが配置された旨を示すノードデータ１２を用いて、空きノードが連続する領域を探索する。このため、探索部１５は、起点となる計算ノードから各軸方向の終端となる計算ノードまで空きノードか否かの判定を行ったか否か判別する処理を不要にできる。この結果、探索部１５は、空きノードが連続する領域を探索する処理の判定回数を削減できる。
【００６８】
また、探索部１５は、起点となる計算ノードから所定の軸方向に連続する空きノードの数を計数する。そして、探索部１５は、所定の軸方向以外に連続する計算ノードの数を変更して所定の軸方向に連続する空きノードの数を計数する場合は、それまでに計数した所定の軸方向に連続する空きノードの数値と同数の計算ノードについて、空きノードか否かを判定する。このため、探索部１５は、空きノードが連続する領域を探索する処理の判定回数をさらに削減できる。
【００６９】
図１に戻って説明を続ける。特定部１６は、探索部が探索した領域のうち、ジョブの割り当てに適した領域を特定する。例えば、特定部１６は、受付部１４から、ジョブの割当対象となる領域に含まれる計算ノードの数またはトポロジを受信する。また、特定部１６は、探索部１５が探索した全ての領域を示す探索データを受信する。
【００７０】
かかる場合、特定部１６は、受信した探索データを、領域に含まれる計算ノードの数でソートする。そして、特定部１６は、ソートした探索データのうち、領域に含まれる計算ノードの数が少ない探索データから順に、受付部１４から受信した計算ノードの数またはトポロジを満たす探索データであるか否かを判定する。その後、特定部１６は、受付部１４から受信した計算ノードの数またはトポロジを満たす探索データであると判定した場合は、かかる探索データを割当部１７に出力する。
【００７１】
例えば、図５は、実施例１に係る管理装置が空き領域を特定する処理の一例を説明する図である。なお、図５には、並列計算機３が有する全ての計算ノード３ａ〜３ｆが空きノードである場合に、探索部１５から取得する探索データを、起点となる計算ノードごとにまとめて記載した。また、図５に示す探索データのうち、他の探索データが示す領域と同一の領域を示す探索データについては、無効データとして網掛けで記載した。
【００７２】
例えば、特定部１６は、図５中（Ｎ）に示す探索データを取得する。かかる場合、特定部１６は、図５中（Ｏ）に示すように、各領域に含まれる計算ノードの数に応じて、探索データをソートする。そして、特定部１６は、ソートした探索データのうち、下位のデータから順に、受付部１４から受信したノードの数またはトポロジと一致する領域の探索データか判定する。例えば、特定部１６は、受付部１４からトポロジ（３，２）を受信した場合は、下位のデータから順に、領域の大きさが（３，２）となる探索データを探索する。その後、特定部１６は、特定した探索データを割当部１７に出力する。
【００７３】
なお、特定部１６が実行する処理は、上述した処理に限定されるものではない。例えば、特定部１６は、受付部１４から受信したノードの数またはトポロジと一致する領域の探索データが複数存在する場合は、ジョブ割当て後の空きノードが連続する空間が最大となるように、ジョブの割当対象となる領域の探索データを選択してもよい。
【００７４】
例えば、図６は、空きノードが連続する空間が最大となるように、リストから探索データを選択する処理を説明する図である。なお、図６には、Ｘ軸方向に６つの計算ノードが配置され、Ｙ軸方向に５つの計算ノードが配置されたネットワークに対し、３つのノードを用いる３ノードジョブを複数割当てる例について記載した。
【００７５】
管理装置１０は、図６中（Ｐ−１）に示すように、４つの３ノードジョブをランダムに配置した場合は、例えば、空きノードが連続する最大の領域である最大空き空間を８ノードに限定してしまう。一方、管理装置１０は、図６中（Ｐ−２）に示すように、４つの３ノードジョブをネットワークの端から連続して割当てた場合は、最大空き空間ノードを１８ノードにまで拡張することができる。
【００７６】
そこで、特定部１６は、受付部１４から受信したノードの数またはトポロジと一致する領域の探索データが複数存在する場合は、以下の処理を実行する。なお、以下の説明では、受付部１４から受信したノードの数またはトポロジと一致する領域の探索データの一致データを記載する。まず、特定部１６は、一致データが複数存在する場合は、一致データに対してジョブを割当てた際に、ソートした探索データのうち一致データよりも上位の探索データであって、使用できなくなる領域の探索データを一致データごとに特定する。
【００７７】
そして、特定部１６は、特定した探索データが示す領域の大きさが最も少ない一致データを特定し、特定した一致データを割当部１７に通知する。かかる処理を実行することで、特定部１６は、ジョブの割当対象となる領域のフラグメンテーションを解消し、効率良くジョブの割当を行うことができる。
【００７８】
図１に戻って、説明を続ける。割当部１７は、特定部１６が特定した領域に対して、ジョブの割当てを行う。例えば、割当部１７は、受付部１４からジョブを受信する。また、割当部１７は、特定部１６からジョブの割当対象となる領域を示す探索データを受信する。かかる場合は、割当部１７は、探索データが示す領域に含まれる計算ノードに対し、受付部１４から受信したジョブを割当てる。また、割当部１７は、ノードテーブル１２に格納された各計算ノードのバリッドビットのうち、ジョブの割当てを行った計算ノードのバリッドビットを「１」に更新する。
【００７９】
また、割当部１７は、ジョブの実行が完了した場合は、ジョブを実行した計算ノードからジョブの実行結果を受信し、受信したジョブの実行結果を出力装置４に出力する。また、割当部１７は、ノードテーブル１２に格納された各計算ノードのバリッドビットのうち、ジョブの実行が完了した計算ノードと対応付けられたバリッドビットを「０」に更新する。
【００８０】
なお、計算ノード３ａ〜３ｆが２次元トーラス状のネットワークを構成する場合は、以下の処理を実行することで、ジョブの割当対象となる領域を特定することができる。例えば、生成部１３は、計算ノード３ａ〜３ｆがＸ軸方向に回り込んだ２次元トーラス状のネットワークを構成する場合は、Ｙ軸方向の座標が「０」となる各計算ノードを順次選択する。そして、生成部１３は、選択した計算ノードを仮想原点とする２次元メッシュ状のネットワークを各計算ノード３ａ〜３ｆが形成している旨のノードテーブル１２を、選択した計算ノードごとに生成する。すなわち、生成部１３は、Ｙ軸方向の座標が「０」となる各計算ノードを仮想原点としたノードテーブル１２を生成する。
【００８１】
また、探索部１５は、Ｙ軸方向の座標が「０」となる各計算ノードを仮想原点として順次選択し、選択した仮想原点と対応するノードテーブル１２を用いて、上述した探索処理を実行する。この結果、探索部１５は、図５中（Ｎ）に示した探索データを仮想原点の数だけ生成する。その後、特定部１６は、探索部１５が生成した全ての探索データを用いて、ジョブの割当てに最も適した領域を特定する。
【００８２】
例えば、特定部１６は、各計算ノード３ａ〜３ｆがＸ軸方向に回り込んだ２次元トーラス状のネットワークを形成する場合、図６中（Ｐ−３）に示すように、Ｘ軸方向に回り込んだ最大空き空間ノードを考慮する。この結果、特定部１６は、４つの３ノードジョブをＹ軸方向に並べるように配置してもよい。
【００８３】
次に、管理装置１０が実行する処理の流れについて説明する。なお、管理装置１０は、領域の起点となる計算ノードを選択するメイン処理と、Ｘ軸固定探索処理と、Ｙ軸固定探索処理とを実行する。ここで、管理装置１０が実行するメイン処理については、図２９に示した従来の並列計算機システムと同様の処理を実行するものとして、説明を省略する。
【００８４】
まず、図７を用いて、管理装置２０が実行するＹ軸固定探索処理の流れを説明する。図７は、実施例１に係る管理装置が実行するＹ軸固定探索処理の流れを説明するフローチャートである。例えば、管理装置２０は、変数ＸＭａｘ、ｉ、ｃ、ｄ、ｅの値を初期化してＸＭａｘ＝４−Ｘ、ｉ＝Ｘ、ｃ＝Ｙ、ｄ＝０、ｅ＝１とし（ステップＳ１０１）、ｃの値が３より小さいか否かを判定する（ステップＳ１０２）。そして、並列計算機システムは、ｃの値が３より小さい場合は（ステップＳ１０２：Ｙｅｓ）、ｉの値がＸＭａｘより小さいか否かを判定する（ステップＳ１０３）。
【００８５】
また、並列計算機システムは、ｉの値がＸＭａｘより小さい場合は（ステップＳ１０３：Ｙｅｓ）、座標（ｉ、ｃ）に配置された計算ノードＴ［ｉ］［ｃ］が空きノードであるか否かを判定する（ステップＳ１０４）。そして、並列計算機システムは、計算ノードＴ［ｉ］［ｃ］が空きノードである場合は（ステップＳ１０４：Ｙｅｓ）、ｄとｉの値にそれぞれ１を加算し（ステップＳ１０５）、ステップＳ１０３を実行する。
【００８６】
一方、並列計算機システムは、ｉの値がＸＭａｘ以上である場合（ステップＳ１０３：Ｎｏ）、または、Ｔ［ｉ］［ｃ］が空きノードではない場合（ステップＳ１０４：Ｎｏ）は、以下の処理を実行する。すなわち、並列計算機システムは、探索データＴ［Ｘ］［Ｙ］ｙｘ［ｃ］として（ｄ、ｅ）を出力し、ＸＭａｘ＝ｄとした後に、ｉ、ｄの値を初期化してｉ＝Ｘ、ｄ＝０に設定し、ｃとｅの値にそれぞれ１を加算する（ステップＳ１０６）。そして、並列計算機システムは、ステップＳ１０２を実行し、ｃの値が３以上である場合は（ステップＳ１０２：Ｎｏ）、Ｙ軸固定探索処理を終了する。
【００８７】
次に、図８を用いて、Ｘ軸固定探索処理の一例について説明する。図８は、実施例１に係る管理装置が実行するＸ軸固定探索処理の流れを説明するフローチャートである。例えば、並列計算機システムは、変数ＹＭａｘ、ｉ、ｃ、ｄ、ｅの値を初期化してＹＭａｘ＝３−Ｙ、ｉ＝Ｙ、ｃ＝Ｘ、ｄ＝１、ｅ＝０とし（ステップＳ２０１）、ｃの値が４より小さいか否かを判定する（ステップＳ２０２）。そして、並列計算機システムは、ｃの値が４より小さい場合は（ステップＳ２０２：Ｙｅｓ）、ｉの値がＹＭａｘよりも小さいか否かを判定する（ステップＳ２０３）。そして、並列計算機システムは、ｉの値がＹＭａｘよりも小さい場合は（ステップＳ２０３：Ｙｅｓ）、座標（ｃ、ｉ）に配置された計算ノードＴ［ｃ］［ｉ］が空きノードであるか否かを判定する（ステップＳ２０４）。そして、並列計算機システムは、計算ノードＴ［ｃ］［ｉ］が空きノードである場合は（ステップＳ２０４：Ｙｅｓ）、ｅとｉの値にそれぞれ１を加算し（ステップＳ２０５）、ステップＳ２０３を実行する。
【００８８】
一方、並列計算機システムは、ｉの値がＹＭａｘ以上である場合（ステップＳ２０３：Ｎｏ）、または、Ｔ［ｃ］［ｉ］が空きノードではない場合は（ステップＳ２０４：Ｎｏ）、以下の処理を実行する。すなわち、並列計算機システムは、探索データＴ［Ｘ］［Ｙ］ｘｙ［ｃ］として（ｄ、ｅ）を出力し、ＹＭａｘ＝ｅとした後に、ｉ、ｅの値を初期化してｉ＝Ｙ、ｅ＝０に設定し、ｃとｄの値にそれぞれ１を加算する（ステップＳ２０６）。そして、並列計算機システムは、ステップＳ２０２を実行し、ｃの値が４以上である場合は（ステップＳ２０２：Ｎｏ）、Ｙ軸固定探索処理を終了する。
【００８９】
［並列計算機システム１の効果］
上述したように、並列計算機システム１は、複数の計算ノード３ａ〜３ｆを有する並列計算機３と、並列計算機３の管理を行う管理装置１０とを有する。また、計算ノード３ａ〜３ｆは、計算ノード３ａ〜３ｆと接続される。また、管理装置１０は、各計算ノード３ａ〜３ｆにジョブが割当てられているか否かを示す第１の情報と、各計算ノード３ａ〜３ｆの接続関係の終端に配置される仮想計算ノードに常時ジョブが割当てられている旨を示す第２の情報とを含むノードテーブル１２を記憶する。
【００９０】
そして、管理装置１０は、ノードテーブル１２を用いて、空きノードが連続する領域を全て探索する。その後、管理装置１０は、探索した領域から割当て対象のジョブの割当てに適した領域を特定し、特定した領域に対して割当て対象のジョブの割当てを行う。このため、並列計算機システム１は、空きノードが連続する領域を探索する際の終端判定処理を不要とする。この結果、並列計算機システム１は、空きノードが連続する領域を探索する際の処理コストを軽減し、探索時にかかる時間を短縮することができる。
【００９１】
また、管理装置１０は、領域の起点となる計算ノードを選択し、選択した計算ノードから所定の軸方向（例えばＸ軸方向）空きノードが連続する数を、所定の軸方向以外の軸方向（例えばＹ軸方向）に連続する計算ノードの数を変更しながら計数する。そして、管理装置１０は、計数結果を用いて、選択した計算ノードを起点とする全ての領域を探索する。このため、管理装置１０は、空きノードが連続する領域を全て探索することができる。
【００９２】
また、管理装置１０は、所定の軸方向以外の軸方向に連続する計算ノードの数を変更し、所定の軸方向に連続する空きノードの数を計数する場合は、それまでに計数した連続する空きノードの数の最小値を、新たに計数する空きノードの数の最大値とする。このため、管理装置１０は、領域に含まれることのない計算ノードが空きノードか否かを判定する処理を削減することができるので、探索時にかかる時間を短縮することができる。
【実施例２】
【００９３】
以下の実施例２では、空きノードが連続して含まれる領域を探索する際の処理コストを更に削減する並列計算機システム１ａについて説明する。なお、以下の説明では、上述した実施例１に記載した機能と同様の機能を発揮するものについては、同一の符号を付し、以下の説明を省略する。
【００９４】
図９は、実施例２に係る並列計算機システムを説明する図である。図９に示すように、並列計算機システム１ａは、入力装置２、出力装置４、並列計算機３、管理装置１０ａを有する。また、管理装置１０ａは、ノードテーブル１２を記憶する記憶部１１、生成部１３、受付部１４、探索部１５ａ、特定部１６、割当部１７を有する。
【００９５】
探索部１５ａは、探索部１５と同様に、空きノードが連続する領域を探索する。ここで、探索部１５ａは、かかる探索処理を実行する際の処理コストを軽減するため、各軸方向ごとに、計算ノードを選択する選択処理と、選択処理により選択された計算ノードを起点とする領域を算出する算出処理とを実行する。
【００９６】
まず、探索部１５ａが実行する選択処理について説明する。探索部１５ａは、原点となる計算ノードからの接続距離が最大となる計算ノード、すなわち、配置された座標の各軸方向の接続距離が最大となる計算ノードを特定する。そして、探索部１５ａは、特定した計算ノードから、所定の軸方向における負の方向、すなわち原点となる計算ノードの方向に接続された計算ノードを順次選択する。
【００９７】
また、探索部１５ａは、特定した計算ノードから所定の軸方向の負の方向に接続された全ての計算ノードを選択した場合は、特定した計算ノードと所定の軸方向以外の軸方向の負の方向に接続された計算ノードを特定する。そして、探索部１５ａは、特定した計算ノードから所定の軸方向の負の方向に接続された全ての計算ノードを選択する。また、探索部１５ａは、各軸方向に上述した選択処理を繰り返えすことで、探索部１５ａは、座標の各軸方向の接続距離が最大となる計算ノードから原点に配置された計算ノードまで全てのノードを１つずつ選択する。
【００９８】
例えば、探索部１５ａは、Ｘ軸方向について選択処理を実行する場合は、座標（３，２）に配置された計算ノードから、座標（０，２）に配置された計算ノードを順次選択する。また、探索部１５ａは、座標（３，２）に配置された計算ノードから、座標（０，２）に配置された計算ノードを順次選択した場合は、座標（３，１）に配置された計算ノードから座標（０，１）に配置された計算ノードまで順次選択する。また、探索部１５ａは、座標（３，１）に配置された計算ノードから、座標（０，１）に配置された計算ノードを順次選択した場合は、座標（３，０）に配置された計算ノードから座標（０，０）に配置された計算ノードまで順次選択する。
【００９９】
また、探索部１５ａは、Ｙ軸方向について選択処理を実行する場合は、座標（３，２）に配置された計算ノードから、座標（３，０）に配置された計算ノードを順次選択する。続いて、探索部１５ａは、座標（２，２）に配置された計算ノードから座標（２，０）に配置された計算ノードまで順次選択し、その後、座標（１，２）に配置された計算ノードから座標（１，０）に配置された計算ノードまで順次選択する。そして、探索部１５ａは、座標（０，２）に配置された計算ノードから座標（０，０）に配置された計算ノードまで順次選択する。
【０１００】
次に、探索部１５ａが各軸方向ごとに実行する算出処理について説明する。まず、探索部１５ａは、ノードテーブル１２を用いて、選択処理によって選択された計算ノードにジョブが割当てられているか否かを判定する。また、探索部１５ａは、選択された計算ノードにジョブが割当てられていない場合は、選択された計算ノードと接続された他の計算ノードであって、選択された計算ノードよりもいずれかの軸方向における接続距離が大きい計算ノードを特定する。
【０１０１】
そして、探索部１５ａは、特定した計算ノードを起点とする領域を示す探索データから、選択された計算ノードを起点とする領域を示す探索データを算出する。一方、探索部１５ａは、選択された計算ノードにジョブが割当てられている場合は、かかる計算ノードからの連続した空きノードの数を「０」に設定することで、無効化した探索データを算出する。
【０１０２】
例えば、管理装置１０ａが起点となる計算ノードから各軸の正の方向に空きノードを探索する場合、座標（２，１）に配置された計算ノードを起点とする領域には、座標（３，１）を起点とする領域と、座標（２，２）を起点とする領域とが含まれる。このため、探索部１５ａは、上述した選択処理によって、原点からの接続距離が大きい計算ノードから順に計算ノードを選択し、選択した計算ノードを起点とする領域を、それまでの探索結果から算出することで、探索処理の処理コストを削減する。
【０１０３】
以下、探索部１５ａが特定した計算ノードを起点とする領域を示す探索データから、選択された計算ノードを起点とする領域を示す探索データを算出する処理について説明する。まず、探索部１５ａが、探索データを算出する処理の１つであるＹ軸固定探索処理について説明する。
【０１０４】
例えば、探索部１５ａは、座標（３、２）に配置された計算ノードからＸ軸の負の方向に順次計算ノードを選択する。そして、探索部１５ａは、選択した計算ノードにジョブが割当てられていない場合は、選択した計算ノードを起点として、領域のＹ軸方向のサイズを変更しながら、Ｘ軸方向のサイズを探索する。ここで、ある計算ノードについて、Ｙ軸方向のサイズが１となる領域のＸ軸方向のサイズは、かかる計算ノードからＸ軸の正の方向に接続された計算ノードを起点とする領域のうち、Ｙ軸方向のサイズが１となる領域のＸ軸方向のサイズに１を加算した値となる。
【０１０５】
このため、探索部１５ａは、選択した計算ノードについてＹ軸方向のサイズが１となる領域の探索データを算出する場合は、以下の処理を実行する。まず、探索部１５ａは、選択した計算ノードからＸ軸の正の方向に接続された計算ノードを起点とする領域の探索データのうち、Ｙ軸方向のサイズが１となる領域の探索データを特定する。そして、探索部１５ａは、特定した探索データのＸ軸方向のサイズに１を加算した値を、選択した計算ノードを起点とする領域の探索データであって、Ｙ軸方向のサイズが１となる領域の探索データとして出力する。
【０１０６】
また、ある計算ノードについて、Ｙ軸方向のサイズが２以上の整数ｎとなる領域のＸ軸方向のサイズは、以下の条件を満たす。まず、かかる領域のＸ軸方向のサイズは、起点となる計算ノードとＸ軸の正の方向に接続された計算ノードを起点とする領域のうち、Ｙ軸方向のサイズがｎとなる領域のＸ軸方向のサイズに１を加算した値（以下、第１の値と記載する）以下となる。また、かかる領域のＸ軸方向のサイズは、起点となる計算ノードとＹ軸の正の方向に接続された計算ノードを起点とする領域のうち、Ｙ軸方向のサイズがｎ−１となる領域のＸ軸方向のサイズの値（以下、第２の値と記載する）以下となる。このため、探索部１５ａは、第１の値および第２の値のうち、より小さい値を選択する。そして、探索部１５ａは、Ｙ軸方向のサイズをｎとし、Ｘ軸方向のサイズを選択した値とした探索データを出力する。
【０１０７】
続いて、探索部１５ａが探索データを算出する処理の１つであるＸ軸固定探索処理について説明する。例えば、探索部１５ａは、座標（３、２）に配置された計算ノードからＹ軸の負の方向に順次計算ノードを選択する。そして、探索部１５ａは、選択した計算ノードにジョブが割当てられていない場合は、選択した計算ノードを起点として、領域のＸ軸方向のサイズを変更しながら、Ｙ軸方向のサイズを探索する。
【０１０８】
ここで、ある計算ノードについて、Ｘ軸方向のサイズが１となる領域のＹ軸方向のサイズは、かかる計算ノードからＹ軸の正の方向に接続された計算ノードを起点とする領域のうち、Ｘ軸方向のサイズが１となる領域のＹ軸方向のサイズに１を加算した値となる。このため、探索部１５ａは、選択した計算ノードからＹ軸の正の方向に接続された計算ノードを起点とする領域の探索データのうち、Ｘ軸方向のサイズが１となる領域の探索データを特定する。そして、探索部１５ａは、特定した探索データのＹ軸方向のサイズに１を加算した値を、選択した計算ノードを起点とする領域の探索データであって、Ｘ軸方向のサイズが１となる領域の探索データとして出力する。
【０１０９】
また、ある計算ノードについて、Ｘ軸方向のサイズが２以上の整数ｎとなる領域のＹ軸方向のサイズは、以下の条件を満たす。まず、かかる領域のＹ軸方向のサイズは、起点となる計算ノードとＸ軸の正の方向に接続された計算ノードを起点とする領域のうち、Ｘ軸方向のサイズがｎ−１となる領域のＹ軸方向のサイズの値（以下、第３の値と記載する）以下となる。また、かかる領域のＹ軸方向のサイズは、起点となる計算ノードとＹ軸の正の方向に接続された計算ノードを起点とする領域のうち、Ｘ軸方向のサイズがｎとなる領域のＹ軸方向のサイズに１を加算した値（以下、第４の値と記載する）以下となる。このため、探索部１５ａは、第３の値および第４の値のうち、より小さい値を選択する。そして、探索部１５ａは、Ｘ軸方向のサイズをｎとし、Ｙ軸方向のサイズを選択した値とした探索データを出力する。
【０１１０】
以下、図１０、図１１を用いて、探索部１５ａが実行する処理の一例について説明する。まず、図１０を用いて、探索部１５ａがＸ軸方向について実行する算出処理の一例について説明する。図１０は、実施例２に係る管理装置がＸ軸方向について実行する処理の流れを説明する図である。なお図１０に示す例では、探索部１５ａが座標（０，０）に配置された計算ノードを起点とする領域の探索データを算出する例について記載した。
【０１１１】
例えば、探索部１５ａは、座標（０，０）に配置された計算ノードを起点とする領域のうち、Ｙ軸方向のサイズが「１」となる領域の探索データＴ［０］［０］、ｙｘ［０］を探索する場合は、以下の処理を実行する。まず、探索部１５ａは、座標（１，０）に配置された計算ノードを起点とする領域の探索データのうち、Ｙ軸方向のサイズが「１」となる領域の探索データＴ［１］［０］、ｙｘ［０］の値を参照する。そして、探索部１５ａは、図１０中（Ｑ）に示すように、探索データＴ［１］［０］、ｙｘ［０］が示す領域のＸ軸方向のサイズに１を加算した値を探索データＴ［０］［０］、ｙｘ［０］が示す領域のＸ軸方向のサイズとする。
【０１１２】
また、例えば、探索部１５ａは、座標（０，０）に配置された計算ノードを起点とする領域のうち、Ｙ軸方向のサイズが「３」となる領域の探索データＴ［０］［０］、ｙｘ［２］を算出する場合は、以下の処理を実行する。まず、探索部１５ａは、図１０中（Ｒ）に示すように、座標（１，０）に配置された計算ノードを起点とする領域の探索データのうち、Ｙ軸方向のサイズが「３」となる領域の探索データＴ［１］［０］、ｙｘ［２］を参照する。そして、探索部１５ａは、探索データＴ［１］［０］、ｙｘ［２］が示す領域のＸ軸方向のサイズに１を加算した値を第１の値として取得する。
【０１１３】
また、探索部１５ａは、図１０中（Ｓ）に示すように、座標（０，１）に配置された計算ノードを起点とする領域の探索データのうち、Ｙ軸方向のサイズが「２」となる領域の探索データＴ［１］［０］、ｙｘ［２］を参照する。そして、探索部１５ａは、探索データＴ［１］［０］、ｙｘ［２］が示す領域のＸ軸方向のサイズを第２の値として取得する。そして、探索部１５ａは、取得した第１の値および第２の値のうち、より小さい値を選択し、選択した値を探索データＴ［０］［０］、ｙｘ［２］が示す領域のＸ軸方向のサイズとする。
【０１１４】
次に、図１１を用いて、探索部１５ａがＹ軸方向について実行する算出処理の一例について説明する。図１１は、実施例２に係る管理装置がＹ軸方向について実行する処理の流れを説明する図である。なお図１１に示す例では、探索部１５ａが座標（０，０）に配置された計算ノードを起点とする領域の探索データを算出する例について記載した。
【０１１５】
例えば、探索部１５ａは、座標（０，０）に配置された計算ノードを起点とする領域のうち、Ｘ軸方向のサイズが「１」となる領域の探索データＴ［０］［０］、ｘｙ［０］を探索する場合は、以下の処理を実行する。まず、探索部１５ａは、座標（１，０）に配置された計算ノードを起点とする領域の探索データのうち、Ｘ軸方向のサイズが「１」となる領域の探索データＴ［０］［１］、ｘｙ［０］の値を参照する。そして、探索部１５ａは、図１１中（Ｔ）に示すように、探索データＴ［０］［１］、ｘｙ［０］が示す領域のＹ軸方向のサイズに１を加算した値を探索データＴ［０］［０］、ｘｙ［０］が示す領域のＹ軸方向のサイズとする。
【０１１６】
また、例えば、探索部１５ａは、座標（０，０）に配置された計算ノードを起点とする領域のうち、Ｘ軸方向のサイズが「４」となる領域の探索データＴ［０］［０］、ｘｙ［３］を算出する場合は、以下の処理を実行する。まず、探索部１５ａは、図１１中（Ｕ）に示すように、座標（１，０）に配置された計算ノードを起点とする領域の探索データのうち、Ｘ軸方向のサイズが「３」となる領域の探索データＴ［１］［０］、ｘｙ［３］を参照する。そして、探索部１５ａは、探索データＴ［１］［０］、ｘｙ［３］が示す領域のＹ軸方向のサイズを第３の値として取得する。
【０１１７】
また、探索部１５ａは、図１１中（Ｖ）に示すように、座標（０，１）に配置された計算ノードを起点とする領域の探索データのうち、Ｘ軸方向のサイズが「４」となる領域の探索データＴ［０］［１］、ｘｙ［３］を参照する。そして、探索部１５ａは、探索データＴ［０］［１］、ｘｙ［３］が示す領域のＹ軸方向のサイズに１を加算した値を第４の値として取得する。そして、探索部１５ａは、取得した第３の値および第４の値のうち、より小さい値を選択し、選択した値を探索データＴ［０］［０］、ｘｙ［３］が示す領域のＹ軸方向のサイズとする。
【０１１８】
上述したように、探索部１５ａは、探索処理の対象となる計算ノードを選択し、選択した計算ノードといずれかの軸方向に接続された計算ノードを起点する領域を示す探索データから、選択した計算ノードを起点とする領域を示す探索データを生成する。このため、探索部１５ａは、各計算ノードを起点として各軸方向に空きノードが連続する数を計数せずとも、各計算ノードが空きノードであるか否かを判定するだけで、各計算ノードを起点とする領域を示す探索データを生成できる。この結果、探索部１５ａは、探索処理の処理コストを削減するので、探索処理にかかる時間を短縮できる。
【０１１９】
次に、図１２、図１３を用いて、管理装置１０ａの効果について説明する。まず、図１２を用いて、従来の並列計算機が空きノードが連続する領域を探索する処理に実行する判定回数の一例について説明する。図１２は、従来の並列計算機システムが実行する条件判定回数の一例を説明する図である。
【０１２０】
なお、図１２には、図２９〜図３０に示す各処理における条件判定回数を、横軸を計算ノードの数とし、縦軸を条件判定回数としてプロットした。また、図１２には、計算ノードの数ごとに、図２９に示したメイン処理における条件判定回数を点線で示し、図３０に示したＹ軸固定判定処理における条件判定回数を一点破線で示し、図３１に示したＸ軸固定判定処理における条件判定回数を点線で示した。また、図１２には、各条件判定処理の合計を実線で示した。
【０１２１】
例えば、図１２に示すように、従来の並列計算機システムは、計算ノードの数が「２４」個の際は、約「２５００」回の条件判定処理を実行する。また、並列計算機システムは、計算ノード数が「４３２」個の際は、約「３３００００」回の条件判定処理を実行する。このように、従来の並列計算機では、計算ノードの数が１８倍になると、条件判定処理の実行回数が約１３０倍となってしまう。
【０１２２】
一方、図１３は、実施例２に係る管理装置が実行する条件判定回数の一例を説明する図である。なお、図１３には、図１２と同様に、管理装置１０ａが実行する条件判定回数を、横軸を計算ノードの数とし、縦軸を条件判定回数としてプロットした。また、図１３には、起点となる計算ノードを選択するメイン処理における条件判定回数を点線で示し、Ｙ軸固定判定処理における条件判定回数を一点破線で示し、Ｘ軸固定判定処理における条件判定回数を点線で示し、各条件判定処理の合計を実線で示した。
【０１２３】
例えば、図１３に示すように、管理装置１０ａは、計算ノードの数が「２４」個の際は、約「９５０」回の条件判定処理を実行する。また、管理装置１０ａは、計算ノード数が「４３２」個の際は、約「３００００」回の条件判定処理を実行する。このように、管理装置１０ａは、従来の並列計算機システムと比較して、約１２分の１の処理で、空きノードが連続する領域を探索できる。
【０１２４】
次に、図１４〜１６を用いて、管理装置１０ａが実行する処理の流れについて説明する。まず、図１４を用いて、管理装置１０ａが実行するメイン処理の流れを説明する。図１４は、実施例２に係る管理装置が実行するメイン処理の流れを説明するフローチャートである。例えば、管理装置１０ａは、Ｙの値を「２」に初期化し（ステップＳ３０１）、Ｙの値が０以上となるか否かを判定する（ステップＳ３０２）。そして、管理装置１０ａは、Ｙの値が０以上となる場合は（ステップＳ３０２：Ｙｅｓ）、Ｘの値を「３」に初期化し（ステップＳ３０３）、Ｘの値が０以上となるか否かを判定する（ステップＳ３０４）。
【０１２５】
ここで、管理装置１０ａは、Ｘの値が０以上となる場合は（ステップＳ３０４：Ｙｅｓ）、ＸおよびＹの値を引数としてＹ軸固定探索処理を実行し（ステップＳ３０５）、次に、ＸおよびＹの値を引数としてＸ軸固定探索処理を実行する（ステップＳ３０６）。そして、管理装置１０ａは、Ｘの値から１を減算し（ステップＳ３０７）、ステップＳ３０４を実行する。一方、管理装置１０ａは、Ｘの値が０よりも小さい場合は（ステップＳ３０４：Ｎｏ）、Ｙの値から１を減算し（ステップＳ３０８）、ステップＳ３０２を実行する。そして、管理装置１０ａは、Ｙの値が０よりも小さい値となった場合は（ステップＳ３０２：Ｎｏ）、処理を終了する。
【０１２６】
次に、図１５を用いて、管理装置１０ａが実行するＹ軸固定探索処理の流れについて説明する。図１５は、実施例２に係る管理装置が実行するＹ軸固定探索処理の流れを説明するフローチャートである。なお、図１５に示す処理は、図１４中ステップＳ３０５に示す処理に対応する。なお、以下の説明では、座標（Ｘ，Ｙ）に配置された計算ノードを起点とする領域のうち、Ｙ軸方向のサイズを「ｃ−１」に設定してＹ軸固定探索処理を実行した結果探索される領域の、Ｘ軸方向のサイズをＴ［Ｘ］［Ｙ］．ｙｘ［ｃ］．ｄと記載する。
【０１２７】
まず、管理装置１０ａは、変数ｃ、ｅ、ｄの値を初期化して、ｃ＝２、ｅ＝３−Ｙ、ｄ＝０とし（ステップＳ４０１）、ｃの値がＹの値よりも大きいか否かを判定する（ステップＳ４０２）。また、管理装置１０ａは、ｃの値がＹの値よりも大きいと判定した場合は（ステップＳ４０２：Ｙｅｓ）、座標（Ｘ、Ｙ）に配置された計算ノードＴ［Ｘ］［Ｙ］が空きノードであるか否かを判定する（ステップＳ４０３）。
【０１２８】
また、管理装置１０ａは、座標（Ｘ、Ｙ）に配置された計算ノードＴ［Ｘ］［Ｙ］が空きノードであると判定した場合は（ステップＳ４０３：Ｙｅｓ）、以下の処理を実行する。すなわち、管理装置１０ａは、Ｔ［Ｘ］［Ｙ＋１］．ｙｘ［ｃ］．ｄの値（第２の値）がＴ［Ｘ＋１］［Ｙ］．ｙｘ［ｃ］．ｄ＋１の値（第１の値）よりも小さいか否かを判定する（ステップＳ４０４）。
【０１２９】
ここで、管理装置１０ａは、第２の値が第１の値以上であると判定した場合は（ステップＳ４０４：Ｎｏ）、ｄの値を第１の値に設定する（ステップＳ４０５）。一方、管理装置１０ａは、第２の値が第１の値より小さいと判定した場合は（ステップＳ４０４：Ｙｅｓ）、ｄの値を第２の値に設定する（ステップＳ４０６）。
【０１３０】
そして、管理装置１０ａは、座標（Ｘ，Ｙ）に配置された計算ノードを起点とする領域を示すデータとして、Ｔ［Ｘ］［Ｙ］．ｙｘ［ｃ］＝（ｄ、ｅ）を出力し、ｃの値とｅの値から１を減算するとともに、ｄの値を０に初期化する（ステップＳ４０７）。そして、管理装置１０ａは、ステップＳ４０２を再度実行する。また、管理装置１０ａは、計算ノードＴ［Ｘ］［Ｙ］が空きノードではないと判定した場合は（ステップＳ４０３：Ｎｏ）、ｄの値を０に初期化し（ステップＳ４０８）、ステップＳ４０７を実行する。
【０１３１】
また、管理装置１０ａは、ｃの値がＹの値以下であると判定した場合は（ステップＳ４０２：Ｎｏ）、計算ノードＴ［Ｘ］［Ｙ］が空きノードであるか否かを判定する（ステップＳ４０９）。そして、管理装置１０ａは、計算ノードＴ［Ｘ］［Ｙ］が空きノードであると判定した場合は（ステップＳ４０９：Ｙｅｓ）ｄの値をＴ［Ｘ＋１］［Ｙ］．ｙｘ［ｃ］．ｄ＋１に設定する（ステップＳ４１０）。一方、管理装置１０ａは、計算ノードＴ［Ｘ］［Ｙ］が空きノードではないと判定した場合は（ステップＳ４０９：Ｎｏ）、ステップＳ４１０をスキップする。その後、管理装置１０ａは、Ｔ［Ｘ］［Ｙ］．ｙｘ［ｃ］＝（ｄ、ｅ）を出力し（ステップＳ４１１）、処理を終了する。
【０１３２】
次に、図１６を用いて、管理装置１０ａが実行するＸ軸固定探索処理の流れについて説明する。図１６は、実施例２に係る管理装置が実行するＸ軸固定探索処理の流れを説明するフローチャートである。なお、図１６に示す処理は、図１４中ステップＳ３０６に示す処理に対応する。なお、以下の説明では、座標（Ｘ，Ｙ）に配置された計算ノードを起点とする領域のうち、Ｘ軸方向のサイズを「ｃ−１」に設定してＸ軸固定探索処理を実行した結果探索される領域の、Ｙ軸方向のサイズをＴ［Ｘ］［Ｙ］．ｘｙ［ｃ］．ｅと記載する。
【０１３３】
まず、管理装置１０ａは、変数ｃ、ｄ、ｅの値を初期化して、ｃ＝３、ｄ＝４−Ｘ、ｅ＝０とし（ステップＳ５０１）、ｃの値がＸの値よりも大きいか否かを判定する（ステップＳ５０２）。また、管理装置１０ａは、ｃの値がＸの値よりも大きいと判定した場合は（ステップＳ５０２：Ｙｅｓ）、座標（Ｘ、Ｙ）に配置された計算ノードＴ［Ｘ］［Ｙ］が空きノードであるか否かを判定する（ステップＳ５０３）。
【０１３４】
また、管理装置１０ａは、座標（Ｘ、Ｙ）に配置された計算ノードＴ［Ｘ］［Ｙ］が空きノードであると判定した場合は（ステップＳ５０３：Ｙｅｓ）、以下の処理を実行する。すなわち、管理装置１０ａは、Ｔ［Ｘ＋１］［Ｙ］．ｘｙ［ｃ］．ｅの値（第３の値）がＴ［Ｘ］［Ｙ＋１］．ｘｙ［ｃ］．ｅ＋１の値（第４の値）よりも小さいか否かを判定する（ステップＳ５０４）。
【０１３５】
ここで、管理装置１０ａは、第３の値が第４の値以上であると判定した場合は（ステップＳ５０４：Ｎｏ）、ｄの値を第４の値に設定する（ステップＳ５０５）。一方、管理装置１０ａは、第３の値が第４の値より小さいと判定した場合は（ステップＳ５０４：Ｙｅｓ）、ｄの値を第３の値に設定する（ステップＳ５０６）。
【０１３６】
そして、管理装置１０ａは、座標（Ｘ，Ｙ）に配置された計算ノードを起点とする領域を示すデータとして、Ｔ［Ｘ］［Ｙ］．ｘｙ［ｃ］＝（ｄ、ｅ）を出力し、ｃの値とｅの値から１を減算するとともに、ｅの値を０に初期化する（ステップＳ５０７）。そして、管理装置１０ａは、ステップＳ５０２を再度実行する。また、管理装置１０ａは、計算ノードＴ［Ｘ］［Ｙ］が空きノードではないと判定した場合は（ステップＳ５０３：Ｎｏ）、ｅの値を０に初期化し（ステップＳ５０８）、ステップＳ５０７を実行する。
【０１３７】
また、管理装置１０ａは、ｃの値がＸの値以下であると判定した場合は（ステップＳ５０２：Ｎｏ）、計算ノードＴ［Ｘ］［Ｙ］が空きノードであるか否かを判定する（ステップＳ５０９）。そして、管理装置１０ａは、計算ノードＴ［Ｘ］［Ｙ］が空きノードであると判定した場合は（ステップＳ５０９：Ｙｅｓ）、ｅの値をＴ［Ｘ］［Ｙ＋１］．ｘｙ［ｃ］．ｅ＋１に設定する（ステップＳ５１０）。一方、管理装置１０ａは、計算ノードＴ［Ｘ］［Ｙ］が空きノードではないと判定した場合は（ステップＳ５０９：Ｎｏ）、ステップＳ５１０をスキップする。その後、管理装置１０ａは、Ｔ［Ｘ］［Ｙ］．ｘｙ［ｃ］＝（ｄ、ｅ）を出力し（ステップＳ５１１）、処理を終了する。
【０１３８】
［並列計算機システム１ａの効果］
上述したように、管理装置１０ａは、原点となる計算ノードからの接続距離が最大となる計算ノードから、所定の軸方向以外の軸方向の接続距離を変更しながら、所定の軸における負の方向に計算ノードを順に選択する選択処理を実行する。また、管理装置１０ａは、選択された計算ノードにジョブが割当てられているか否かを判定する。
【０１３９】
そして、管理装置１０ａは、選択された計算ノードにジョブが割当てられていないと判定した場合は、以下の処理を実行する。すなわち、管理装置１０ａは、選択された計算ノードと接続された他の計算ノードであって、いずれかの軸方向における原点からの接続距離が選択された計算ノードよりも大きい計算ノードを起点とする領域の探索結果を参照する。そして、管理装置１０ａは、参照した探索結果を用いて、選択された計算ノードを起点とする領域を探索する。
【０１４０】
このため、管理装置１０ａは、選択された計算ノードを起点とし、各軸方向に連続する空きノードの数を計数せずとも、選択された計算ノードを起点とする領域を示す全ての探索データを算出できる。このため、管理装置１０ａは、探索処理における処理コストを削減し、探索処理にかかる時間を短縮できる。
【０１４１】
なお、管理装置１０ａは、各計算ノードにジョブが割当てられているか否かを示す第１の情報と、仮想ノードにジョブが割当てられている旨を示す第２の情報とを含むノードテーブル１２を記憶する必要はない。すなわち、管理装置１０ａは、仮想ノードにジョブが割当てられている旨を示す第２の情報をノードテーブル１２に含めず、従来と同様に選択したノードが終端のノードであるか否かを判定してもよい。かかる処理を実行した場合でも、管理装置１０ａは、空きノードが連続する範囲を探索する探索処理の処理コストを削減できるので、管理装置１０ａは、探索処理にかかる時間を短縮できる。
【０１４２】
また、管理装置１０ａは、ノードテーブル１２に、仮想ノードにジョブが割当てられている旨を示す第２の情報が含まれる場合は、選択したノードが終端のノードであるか判定する処理を不要にできる。この結果、管理装置１０ａは、探索処理にかかる時間をさらに短縮できる。
【０１４３】
また、管理装置１０ａは、選択された計算ノードを起点とする領域のうち第１の軸方向のサイズが１である領域を探索する場合は、選択された計算ノードと第２の軸方向に接続された計算ノードを特定する。また、探索部１５ａは、特定した計算ノードを起点とする領域の探索データのうち、第１の軸方向のサイズが１である領域を示す探索データが示す第２の軸方向のサイズに１を加算した値を算出する。
【０１４４】
そして、探索部１５ａは、算出した値を、選択された計算ノードを起点とする領域のうち、第１の軸方向のサイズが１である領域の第２の軸方向のサイズとする探索データを出力する。このため、探索部１５ａは、第１の軸方向のサイズが１である領域を探索する場合は、他の計算ノードが空きノードか否かを判定する処理を実行せずとも、加算処理を行うだけで探索データを算出することができる。
【０１４５】
また、探索部１５ａは、選択された計算ノードを起点とする領域のうち第１の軸方向の接続距離が２以上である領域を探索する場合は、以下の処理を実行する。まず、探索部１５ａは、選択された計算ノードと第２の軸方向に接続された計算ノードを起点とする領域のうち、第１の軸方向における接続距離が、探索対象となる領域の第１の軸方向における接続距離と同一である領域を特定する。そして、探索部１５ａは、特定した領域の第２の軸方向における接続距離、例えば第２の値を取得する。
【０１４６】
また、探索部１５ａは、選択された計算ノードと第１の軸方向に接続された計算ノードを起点とする領域のうち、第１の軸方向における接続距離が、探索対象となる領域の第１の軸方向における接続距離から１を減算した値となる領域を特定する。そして、探索部１５ａは、特定した領域の第２の軸方向における接続距離、例えば第１の値を取得する。そして、探索部１５ａは、第１の値と第２の値とのうち、いずれか小さい方の値を探索対象となる領域における第２の軸方向の接続距離とする。このため、探索部１５ａは、第１の軸方向のサイズが２である領域を探索する場合は、第１の値と第２の値とを比較する処理を行うだけで、探索データを算出することができる。
【実施例３】
【０１４７】
上述した実施例１、２では、並列計算機３が２次元メッシュ状のネットワークを形成する計算ノード３ａ〜３ｆを有する例について説明した。しかしながら、実施例は、これに限定されるものではない。
【０１４８】
例えば、管理装置１０、１０ａは、計算ノード３ａ〜３ｆが、Ｘ軸方向が円環状に接続されたトーラス状のネットワークを有する場合がある。かかる場合、管理装置１０、１０ａは、上述した処理を実行しただけでは、円環方向に回り込んで存在する領域を適切に探索することができない。
【０１４９】
そこで、管理装置１０、１０ａは、座標（０，０）〜座標（３，０）に配置された計算ノードまでの各計算ノードを仮想原点とする。そして、管理装置１０、１０ａは、仮想原点ごとに、上述したメイン処理、Ｘ軸固定探索処理、Ｙ軸固定探索処理を実行する。この結果、管理装置１０、１０ａは、トーラスを跨ぐ領域を考慮した探索データを算出できる。
【０１５０】
しかしながら、かかる処理を実行した場合は、管理装置１０、１０ａは、上述したメイン処理、Ｘ軸固定探索処理、Ｙ軸固定探索処理を仮想原点ごとに実行するので、探索処理にかかる時間が増大してしまう。そこで、実施例３に係る並列計算機システム１ｂは、仮想原点ごとにノードテーブルを生成する。そして、並列計算機システム１ｂは、仮想原点ごとに生成されたノードテーブルを用いた探索処理を、並列に実行することで、トーラスを跨ぐ領域を考慮した探索データを算出する際の時間を短縮する。
【０１５１】
以下、図１７を用いて、実施例３に係る並列計算機システム１ｂについて説明する。図１７は、実施例３に係る並列計算機システムを説明する図である。なお、以下の説明では、上述した実施例１、２に記載した機能と同様の機能を発揮するものについては、同一の符号を付し、以下の説明を省略する。
【０１５２】
図１７に示すように、並列計算機システム１ｂは、入力装置２、並列計算機３、出力装置４、管理装置１０ｂを有する。また、管理装置１０ｂは、複数のノードテーブル１２ａ、１２ｂを記憶する記憶部１１ａ、生成部１３ａ、受付部１４、複数の探索部１５ｂ〜１５ｄ、特定部１６ａ、割当部１７を有する。なお、記憶部１１ａは、他にも複数のノードテーブルを記憶しているものとする。
【０１５３】
並列計算機３は、並列計算機３と同様に、複数の計算ノード３ａ〜３ｆを有する。ここで、並列計算機３が有する計算ノード３ａ〜３ｆは、Ｘ軸方向またはＹ軸方向の少なくとも一方を円環状に接続したトーラス状のネットワークを形成する。
【０１５４】
ノードテーブル１２ａ、１２ｂは、それぞれ異なる計算ノードを仮想原点とした際の、各計算ノードの仮想的な座標と各計算ノードにジョブが割当てられているか否かを示すバリッドビットとを対応付けて格納したノードテーブルである。例えば、ノードテーブル１２ａは、計算ノード３ａを仮想原点とした際のノードテーブルであり、ノードテーブル１２ｂは、仮想ノード３ｂを仮想原点とした際のノードテーブルである。
【０１５５】
生成部１３ａは、生成部１３と同様に、各計算ノードの座標と、各計算ノードにジョブが割当てられているか否かを示すバリッドビットとを対応付けて格納したノードテーブルを生成する。
【０１５６】
また、生成部１３ａは、各計算ノード３ａ〜３ｆが、Ｘ軸またはＹ軸のいずれか１軸が円環状に接続された２次元トーラス状のネットワークを形成する場合は、円環状に接続された各計算ノードをそれぞれ仮想原点とした複数のノードテーブルを生成する。以下、図１８を用いて、生成部１３ａが複数のノードテーブルを生成する処理について説明する。
【０１５７】
図１８は、仮想原点の一例を説明する図である。例えば、生成部１３ａは、各計算ノード３ａ〜３ｆがＸ軸方向に円環状に接続される場合は、図１８中（Ｗ）に示すように、座標（０，０）〜座標（３，０）に配置された各計算ノードを仮想原点としたノードテーブルを生成する。かかる場合、生成部１３ａは、Ｘ軸方向の回り込みを考慮したノードテーブルを生成する。
【０１５８】
詳細に説明すると、生成部１３ａは、座標（１，０）に配置された計算ノードを仮想原点とする場合は、座標（０，０）に配置された計算ノードを仮想的な座標（３，０）に配置された計算ノードとみなしてノードテーブルを生成する。また、生成部１３ａは、座標（２，０）に配置された計算ノードを仮想原点とする場合は、座標（０，０）、座標（１，０）に配置された計算ノードを仮想的な座標（２，０）、（３，０）に配置された計算ノードとみなしてノードテーブルを生成する。また、生成部１３ａは、座標（３，０）に配置された計算ノードを仮想原点とする場合は、座標（０，０）〜（２，０）に配置された計算ノードを仮想的な座標（１，０）〜（３，０）に配置された計算ノードとみなしてノードテーブルを生成する。
【０１５９】
また、例えば、生成部１３ａは、各計算ノード３ａ〜３ｆがＹ軸方向に円環状に接続される場合は、図１８中（Ｘ）に示すように、座標（０，０）〜座標（０，２）に配置された各計算ノードを仮想原点としたノードテーブルを生成する。かかる場合、生成部１３ａは、Ｙ軸方向の回り込みを考慮したノードテーブルを生成する。
【０１６０】
詳細に説明すると、生成部１３ａは、座標（０，１）に配置された計算ノードを仮想原点とする場合は、座標（０，０）に配置された計算ノードを仮想的な座標（０，２）に配置された計算ノードとみなしてノードテーブルを生成する。また、生成部１３ａは、座標（０，２）に配置された計算ノードを仮想原点とする場合は、座標（０，０）、座標（０，１）に配置された計算ノードを仮想的な座標（０，１）、（０，２）に配置された計算ノードとみなしてノードテーブルを生成する。
【０１６１】
なお、生成部１３ａは、並列計算機３が有する各計算ノード３ａ〜３ｆが、Ｘ軸およびＹ軸が円環状に接続された３次元トーラス状のネットワークを形成する場合は、全ての計算ノード３ａ〜３ｆをそれぞれ仮想原点とした複数のノードテーブルを生成する。かかる場合においても、生成部１３ａは、各軸方向の回りこみを考慮して、仮想原点とした計算ノード以外の計算ノードの座標を設定したノードテーブルを生成する。
【０１６２】
図１７に戻り、各探索部１５ｂ〜１５ｄは、それぞれ異なるノードテーブルを用いて、探索処理を並行して実行する。そして、各探索部１５ｂ〜１５ｄは、それぞれ異なる計算ノードを仮想原点とした探索データを生成し、生成した探索データを特定部１６に出力する。
【０１６３】
例えば、図１９は、実施例３に係る管理装置が実行する処理を説明する図である。なお、図１９に示す例では、各計算ノード３ａ〜３ｆがＸ軸を円環状に接続した２次元トーラス状のネットワークを形成する際に、管理装置１０ｂが実行する処理の一例について記載した。なお、図１９中に記載した探索部１５ｅは、図１７において図示を省略した探索部であり、他の探索部１５ｂ〜１５ｄと同様の機能を発揮する。
【０１６４】
例えば、生成部１３ａは、図１９中（Ｙ）に示すように、座標（０，０）に配置された計算ノードを仮想原点としたノードテーブルを生成する。そして、探索部１５ｂは、かかるノードテーブルを用いて、空きノードが連続する領域を探索する処理を実行する。また、生成部１３ａは、図１９中（Ｚ）に示すように、座標（３，０）に配置された計算ノードを仮想原点とし、他の計算ノード座標をＸ軸方向の周り込みを考慮した座標に修正したノードテーブルを生成する。そして、探索部１５ｃは、かかるノードテーブルを用いて、空きノードが連続する領域を探索する処理を実行する。
【０１６５】
また、生成部１３ａは、図１９中（ａ）に示すように、座標（２，０）に配置された計算ノードを仮想原点とし、他の計算ノード座標をＸ軸方向の周り込みを考慮した座標に修正したノードテーブルを生成する。そして、探索部１５ｄは、かかるノードテーブルを用いて、空きノードが連続する領域を探索する処理を実行する。
【０１６６】
また、生成部１３ａは、図１９中（ｂ）に示すように、座標（１，０）に配置された計算ノードを仮想原点とし、他の計算ノード座標をＸ軸方向の周り込みを考慮した座標に修正したノードテーブルを生成する。そして、探索部１５ｅは、かかるノードテーブルを用いて、空きノードが連続する領域を探索する処理を実行する。
【０１６７】
このように、管理装置１０ｂは、複数の探索部１５ｂ〜１５ｅを有する。また、管理装置１０ｂは、各計算ノード３ａ〜３ｆが、Ｘ軸方向を円環状に接続したトーラス状のネットワークを形成する場合は、Ｙ軸方向の座標が「０」となる各計算ノードを仮想原点としたノードテーブル１２ａ、１２ｂを生成する。そして、管理装置１０ｂは、各探索部１５ｂ〜１５ｅに、それぞれ異なるノードテーブル１２ａ、１２ｂを用いて、空きノードが連続した配置された領域を探索する処理を並列に実行させる。
【０１６８】
この結果、管理装置１０ｂは、各計算ノード３ａ〜３ｆが、Ｘ軸方向を円環状に接続したトーラス状のネットワークを形成する際にも、各仮想原点ごとに、探索処理を並行して実行するので、探索処理にかかる時間を短縮することができる。
【０１６９】
なお、かかる処理を実行した場合、各探索部１５ｂ〜１５ｅは、例えば、図５中（Ｎ）に示す形式のデータを仮想原点と同数だけ出力するので、探索データのソートにかかる時間が増大してしまう。そこで、特定部１６ａは、以下の処理を実行する。
【０１７０】
例えば、各計算ノード３ａ〜３ｆが２次元トーラス状のネットワークを形成している場合、各探索部１５ｂ〜１５ｅが出力する探索データには、他の探索データが示す領域を内包するデータが存在する場合がある。詳細な例を説明すると、Ｙ軸固定探索処理を実行した際に取得される複数の探索データは、Ｙ軸方向のサイズが１つずつ減少した領域を示す探索データとなる。また、逆に、Ｘ軸固定探索処理を実行した際に取得される複数の探索データには、Ｘ軸方向のサイズが１つずつ減少した領域を示す探索データとなる。
【０１７１】
このため、特定部１６ａは、第１の探索データが示す領域と、第１の探索データが示す領域よりも所定軸方向以外の軸方向のサイズが大きい領域を示す探索データ、すなわち、第１の探索データの上位の探索データが示す領域とを比較する。そして、特定部１６ａは、第２の探索データが示す領域の所定軸方向のサイズが第１の探索データが示す領域の所定軸方向のサイズより大きい場合は、第１の探索データを探索結果から除外する。
【０１７２】
詳細には、特定部１６ａは、各探索部１５ｂ〜１５ｅが算出した探索データをまとめ、探索データが示す領域の各軸方向のサイズがより大きい順にソートする。そして、特定部１６ａは、上位の探索データから順に、各探索データが示す領域に下位の探索データが示す領域を含むか否かを判定し、探索データが示す領域に下位の探索データが示す領域が含まれる場合は、下位の探索データを削除する。
【０１７３】
ここで、図２０は、実施例３に係る管理装置が探索データを削減する処理の流れを説明する図である。なお、図２０に示す例では、図５に示す探索データから不要な探索データを削除する処理の一例について記載した。例えば、特定部１６ａは、図２０に示す全ての探索データを上位の探索データからソートし、上位の探索データが示す領域に下位の探索データが示す領域が含まれるか否かを判定する。
【０１７４】
ここで、図２０中（ｃ）に示すように、Ｔ［０］［０］，ｙｘ［０］、および、Ｔ［０］［０］，ｙｘ［１］が示す領域のＸ軸方向におけるサイズは、Ｔ［０］［０］，ｙｘ［２］が示す領域のＸ軸方向におけるサイズ以下となる。このため、特定部１６ａは、Ｔ［０］［０］，ｙｘ［０］、および、Ｔ［０］［０］，ｙｘ［１］が示す領域がＴ［０］［０］，ｙｘ［２］が示す領域に含まれると判断し、Ｔ［０］［０］，ｙｘ［０］、および、Ｔ［０］［０］，ｙｘ［１］を削除する。
【０１７５】
また、特定部１６ａは、同様の処理を行うことで、図２０中（ｄ）に示すように、Ｔ［３］［０］，ｙｘ［０］〜Ｔ［３］［０］，ｙｘ［２］までの探索データのうち、Ｔ［３］［０］，ｙｘ［２］以外の探索データを除外する。また、特定部１６ａは、Ｘ軸方向固定処理によって取得された探索データ、すなわち、図２０中（ｅ）に示す探索データについても、Ｙ軸方向固定処理によって取得された探索データと比較する。この結果、特定部１６ａは、図２０中（ｅ）に示す探索データを全て削除する。
【０１７６】
この結果、特定部１６ａは、図２０中（ｆ）に示すように、無駄のない探索データを取得することができる。その後、特定部１６ａは、図２０中（ｆ）に示す探索データから、ジョブの割当てに最も適した領域を示す探索データを特定する。
【０１７７】
次に、図２１〜図２２を用いて、上位の探索データが示す領域に含まれる領域を示す下位の探索データを削除することで、探索データの数の削減量の一例について説明する。図２１は、従来の並列計算機システムが出力する探索データの数の一例を説明する図である。なお、図２１には、図１２と同様に、従来の並列計算機システムが出力する探索データの数を、横軸を計算ノードの数とし、縦軸を探索データ数としてプロットした。
【０１７８】
例えば、図２１に示すように、従来の並列計算機システムは、計算ノードの数が「２４」個の際は、「３２４」個の探索データを出力する。また、並列計算機システムは、計算ノード数が「４３２」個の際は、「９５０４」個の探索データを出力する。このように、従来の並列計算機では、計算ノードの数が１８倍になると、出力する探索データの数が条２９倍となってしまう。
【０１７９】
一方、図２２は、実施例３に係る管理装置が出力する探索データの数の一例を説明する図である。なお、図２２には、図２１と同様に、管理装置１０ｂが出力する探索データの数を、横軸を計算ノードの数とし、縦軸を探索データの数としてプロットした。例えば、図２２に示すように、管理装置１０ｂは、計算ノードの数が「２４」個の際は、「２４」個の探索データを出力する。また、管理装置１０ｂは、計算ノード数が「４３２」個の際は、「４３２」個の探索データを出力する。この結果、管理装置１０ｂは、計算ノードの数が「４３２」個の場合は、従来の並列計算機システムと比較して、約２２分の１の探索データから、ジョブの割当てに最適な領域を示す探索データを探索すればよい。この結果、管理装置１０ｂは、ジョブの割当てにかかる時間を短縮できる。
【０１８０】
次に、図２３、図２４を用いて、管理装置１０ｂが実行する条件判定処理の回数について説明する。まず、図２３を用いて、従来の並列計算機がＸ軸方向のトーラスを考慮した際に実行する条件判定回数の一例について説明する。図２３は、従来の並列計算機システムがＸ軸方向のトーラスを考慮した際に実行する条件判定回数の一例を説明する図である。
【０１８１】
なお、図２３には、図１２と同様に、従来の並列計算機システムが実行する条件判定回数を、横軸を計算ノードの数とし、縦軸を条件判定回数として、実線でプロットした。また、図２３には、比較のため、トーラスを考慮しない際に従来の並列計算機システムが実行する条件判定回数を点線でプロットした。
【０１８２】
例えば、図２３に示すように、従来の並列計算機システムは、図１２に示した条件判定回数と、Ｘ軸方向に連続する計算ノードとを積算した回数の条件判定処理を実行する。この結果、例えば、従来の並列計算機システムは、計算ノードの数が「２４」個の際は、「６０５５２」回の条件判定処理を実行する。また、並列計算機システムは、計算ノード数が「４３２」個の際は、「７８７５３８４」回の条件判定処理を実行する。このように、従来の並列計算機では、計算ノードの数が１８倍になると、条件判定処理の実行回数が３１２１倍となってしまう。
【０１８３】
一方、図２４は、実施例３に係る管理装置が実行する条件判定回数の一例を説明する図である。なお、図２４には、図１２と同様に、管理装置１０ｂが実行する条件判定回数を、横軸を計算ノードの数とし、縦軸を条件判定回数としてプロットした。例えば、図２４に示すように、管理装置１０ａは、計算ノードの数が「２４」個の際は、「７５」回の条件判定処理を実行する。また、管理装置１０ａは、計算ノード数が「４３２」個の際は、「１２３４９」回の条件判定処理を実行する。このように、管理装置１０ａは、従来の並列計算機システムと比較して、６３８分の１の処理で、空きノードが連続する領域を探索できる。
【０１８４】
次に、図２５、図２６を用いて、管理装置１０ｂが実行する処理の流れについて説明する。まず、図２５を用いて、管理装置１０ｂが実行する処理の基本的な流れについて説明する。図２５は、実施例３に係る管理装置が実行するメイン処理の流れを説明するフローチャートである。なお、以下の説明では、管理装置１０ｂが生成したテーブルのセルのうち、計算ノードＴ［Ｘ］［Ｙ］に対応するセルをＴＴ［Ｘ］［Ｙ］と記載する。また、以下の説明では、並列処理の結果取得される探索データが示す領域のサイズをＳＺと記載する。
【０１８５】
まず、管理装置１０ｂは、初期設定を実行する（ステップＳ６０１）。詳細な例を説明すると、管理装置１０ｂは、Ｘ軸方向に５個、Ｙ軸方向に４個の計算ノードが配置された旨を示すテーブルを生成し、全ての計算ノードを空きノードに設定する。また、管理装置１０ｂは、生成したテーブルのうち、仮想計算ノードを示すＴＴ［４］［０］〜ＴＴ［４］［３］、ＴＴ［０］［３］〜ＴＴ［４］［３］に使用中である旨の情報を格納する。また、管理装置１０ｂは、並列処理用の獲得領域返却ポインタ配列Ｐ［４］を獲得する。
【０１８６】
次に、管理装置１０ｂは、生成したテーブルのうち、ジョブが割当てられた使用中の計算ノードと対応する領域に、計算ノードが使用中である旨の情報を格納する（ステップＳ６０２）。そして、管理装置１０ｂは、４並列処理を実行する（ステップＳ６０３）。次に、管理装置１０ｂは、Ｘ、ＸＸ、ＳＺの値を０に初期化する（ステップＳ６０４）。そして、管理装置１０ｂは、配列Ｐ［Ｘ］のＳＺの値が現在の変数値ＳＺよりも大きいか否かを判定する（ステップＳ６０５）。
【０１８７】
そして、管理装置１０ｂは、配列Ｐ［Ｘ］のＳＺの値が現在の変数値ＳＺよりも大きいと判断した場合は（ステップＳ６０５：Ｙｅｓ）、ＸＸの値をＸの値とし、ＳＺの値を配列Ｐ［ＸＸ］のＳＺの値に変更する（ステップＳ６０６）。一方、管理装置１０ｂは、配列Ｐ［Ｘ］のＳＺの値が現在の変数値ＳＺ以下であると判断した場合は（ステップＳ６０５：Ｎｏ）、ステップＳ６０６の処理をスキップする。
【０１８８】
次に、管理装置１０ｂは、Ｘの値が３より小さいか否かを判定し（ステップＳ６０７）、Ｘの値が３以上であると判定した場合は（ステップＳ６０７：Ｎｏ）、配列Ｐ［ＸＸ］のＴの値を出力して処理を終了する。一方、管理装置１０ｂは、Ｘの値が３より小さいと判断した場合は（ステップＳ６０７：Ｙｅｓ）、Ｘの値に１を加算し（ステップＳ６０８）、ステップＳ６０５を実行する。
【０１８９】
次に、図２６を用いて、実施例３に係る管理装置１０ｂが実行する４並列処理の流れについて説明する。図２６は、実施例３に係る管理装置が実行する４並列処理の流れを説明するフローチャートである。なお、図２６に示す処理は、図２５中ステップＳ６０３に示す処理に対応する。また、以下の説明では、Ｉ、Ｘ、Ｙを変数とする。
【０１９０】
まず、管理装置１０ｂは、初期設定を実行する（ステップＳ７０１）。詳細には、管理装置１０ｂは、Ｘ軸方向に５つ、Ｙ軸方向に４つのデータを配列可能なＰＰ．Ｔ［５］［４］領域を獲得する。また、管理装置１０ｂは、獲得した領域のうち、仮想計算ノードに対応する領域であるＰＰ．Ｔ［４］［０］〜ＰＰ．Ｔ［４］［３］、ＰＰ．Ｔ［０］［３］〜ＰＰ．Ｔ［４］［３］に、計算ノードにジョブが割当てられた旨の情報を格納する。また、管理装置１０ｂは、ＰＰ．ＳＺ領域を獲得し、Ｐ［Ｘ］の値をＰＰの値が格納されたアドレスの番地に初期化する。
【０１９１】
次に、管理装置１０ｂは、変数Ｉの値を０に初期化し（ステップＳ７０２）、変数Ｙの値を０に初期化し（ステップＳ７０３）、ＰＰ．Ｔ［Ｉ］［Ｙ］の値をＴＴ［Ｘ］［Ｙ］に設定する（ステップＳ７０４）。そして、管理装置１０ｂは、Ｙの値が２より小さいか否かを判定し（ステップＳ７０５）、Ｙの値が２以上となる場合は（ステップＳ７０５:Ｎｏ）、Ｉの値が３と等しいか否かを判定する（ステップＳ７０６）。
【０１９２】
また、管理装置１０ｂは、Ｉの値が３と異なると判定した場合は（ステップＳ７０６：Ｎｏ）、ＩおよびＸの値に１を加算し（ステップＳ７０７）、Ｘの値が４と等しいか否かを判定する（ステップＳ７０８）。そして、管理装置１０ｂは、Ｘの値が４と等しいと判定した場合は（ステップＳ７０８：Ｙｅｓ）、Ｘの値を０に設定し（ステップＳ７０９）、ステップＳ７０３を実行する。
【０１９３】
また、管理装置１０ｂは、Ｉの値が３と等しいと判定した場合は（ステップＳ７０６：Ｙｅｓ）、探索処理を実行し、配列ＰＰ．Ｔの値、すなわち探索データを取得する（ステップＳ７１０）。そして、管理装置１０ｂは、探索処理の結果取得される探索データのリストを、領域に含まれる計算ノードの数でソートし、ＰＰ．ＳＺの値を最大のノード数に設定して（ステップＳ７１１）、処理を終了する。
【０１９４】
一方、管理装置１０ｂは、Ｙの値が２よりも小さいと判定した場合は（ステップＳ７０５：Ｙｅｓ）、Ｙの値に１を加算し（ステップＳ７１２）、ステップＳ７０４の処理を実行する。また、管理装置１０ｂは、Ｘの値が４と異なると判定した場合は（ステップＳ７０８：Ｎｏ）、ステップＳ７０３を実行する。
【０１９５】
［情報処理システム１ｂの効果］
上述したように、並列計算機３の各計算ノード３ａ〜３ｆは、所定の軸方向を円環状に接続したトーラス型のネットワークを形成する。また、管理装置１０ｂは、所定の軸方向に連続する各情報処理装置をそれぞれ仮想原点とし、仮想原点ごとに、各計算ノード３ａ〜３ｆを起点とする全ての領域を探索する。
【０１９６】
また、管理装置１０ｂは、探索データのうち、第１の探索データが示す領域における所定の軸方向のサイズと、第１の探索データよりも上位の探索データである第２の探索データが示す領域における所定の軸方向のサイズとを比較する。そして、管理装置１０ｂは、第１の探索データが示す領域の所定の軸方向におけるサイズが、第２の探索データが示す領域の所定の軸方向におけるサイズ以下となる場合は、第１の領域を示す探索データを削除する。このため、管理装置１０ｂは、ジョブの割当てに最適な領域を探索する処理にかかる時間を短縮することができる。
【０１９７】
また、管理装置１０ｂは、複数の探索部１５ｂ〜１５ｅを有する。また、管理装置１０ｂは、所定の軸方向に連続する計算ノードをそれぞれ仮想原点として他の計算ノードが配置された座標を表現した複数のノードテーブル１２ａ、１２ｂを記憶する。また、各探索部１５ｂ〜１５ｅは、所定の軸方向に連続する計算ノードからそれぞれ異なる計算ノードを仮想原点として選択する。そして、各探索部１５ｂ〜１５ｅは、選択した計算ノードを仮想原点としたノードテーブルを用いて、空きノードが連続して配置された領域を探索する処理を並列に実行する。このため、管理装置１０ｂは、並列計算機３の各計算ノード３ａ〜３ｆが所定の軸方向を円環状に接続したトーラス型のネットワークを形成する場合にも、ジョブの割当てにかかる時間を短縮することができる。
【実施例４】
【０１９８】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１９９】
（１）管理装置について
上述した各実施例１〜３に係る管理装置１０〜１０ｂが発揮する機能は、任意に組み合わせて実行することができる。例えば、管理装置１０ｂは、管理装置１０のように、ネットワークの端に配置された仮想計算ノードに常時ジョブが割当てられた旨を示すノードテーブルを用いずともよい。
【０２００】
（２）計算ノードについて
上述した実施例１〜３では、計算ノード３ａ〜３ｆが２次元のメッシュ状のネットワーク、２次元のトーラス状ネットワーク、または、３次元のトーラス状のネットワークを形成する例について記載した。しかしながら、実施例はこれに限定されるものではない。例えば、各計算ノード３ａ〜３ｆは、任意の次元のメッシュ状のネットワークや任意の次元のトーラス状ネットワークを形成してもよい。
【０２０１】
なお、管理装置１０、１０ａは、計算ノード３ａ〜３ｆが任意の次元のメッシュ状のネットワークを形成する場合は、各軸方向に空きノードが連続する数を、他の軸に連続する計算ノードの数を変更しながら計数することで、全ての探索データを算出できる。また、管理装置１０ｂは、計算ノード３ａ〜３ｆが任意の次元のトーラス状ネットワークを形成する場合は、ノードテーブルを、各軸方向の周り込みを考慮した仮想原点ごとに生成する。そして、管理装置１０ｂは、生成したノードテーブルを用いて、探索処理を並列実行することで、全ての探索データを算出できる。
【０２０２】
（３）並列処理について
上述した実施例３では、管理装置１０ｂは、複数の探索部１５ｂ〜１５ｅを用いて、探索処理を並列実行した。例えば、管理装置１０ｂは、計算ノード３ａ〜３ｆが形成するネットワークのトポロジに応じた数のノードテーブルを生成する。このため、管理装置１０ｂは、生成するノードテーブルと同数の探索部を有するのが望ましい。しかしながら、管理装置１０ｂは、例えば、生成するノードテーブルの半数の探索部を有し、各探索部が２回ずつ探索処理を実行することで、全ての探索データを算出してもよい。
【０２０３】
（４）プログラム
上記の実施例で説明した管理装置１０〜１０ｂが発揮する機能は、予め用意された制御プログラムをコンピュータが実行することで実現してもよい。そこで、以下では、図２７を用いて、上記の管理装置１０〜１０ｂと同様の機能を有する制御プログラムを実行するコンピュータの一例について説明する。図２７は、制御プログラムを実行するコンピュータの一例を説明する図である。
【０２０４】
図２７に例示されたコンピュータ１００は、ＲＯＭ（Read  Only  Memory）１１０、ＨＤＤ（Hard  Disk  Drive）１２０、ＲＡＭ（Random  Access  Memory）１３０、ＣＰＵ（Central  Processing  Unit）１４０がバス１６０で接続される。また、図２７に例示されたコンピュータ１００は、並列計算機３と通信するためのＩ／Ｏ（Input  Output）１５０が、バス１６０で、ＣＰＵ１４０等と接続される。
【０２０５】
ここで、ＨＤＤ１２０には、制御プログラム１２１があらかじめ保持される。ＣＰＵ１４０が制御プログラム１２１をＨＤＤ１２０から読み出して実行することによって、図２７に示す例では、制御プログラム１２１は、制御プロセス１４１として機能するようになる。なお、制御プロセス１４１は、図１に示した生成部１３、受付部１４、探索部１５、特定部１６、割当部１７と同様の機能を発揮する。
【０２０６】
なお、本実施例で説明した制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disc  Read  Only  Memory）、ＭＯ（Magneto  Optical  Disc）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【０２０７】
なお、コンピュータ１００は、ＣＰＵではなく、例えばＭＰＵやＦＰＧＡ等の演算装置を用いて制御プログラム１２１を実行してもよい。また、上記の制御プログラム１２１については、例えば、ＲＡＭ１３０や、ＲＯＭ１１０記憶させてもよいし、他の方法でＣＰＵ１４０に実行させてもよい。例えば、フレキシブルディスク、いわゆるＦＤ（Flexible  Disk）、ＣＤ（Compact  Disk）−ＲＯＭ、ＤＶＤ（Digital  Versatile  Disk）、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させる。
【０２０８】
そして、コンピュータ１００がこれらの可搬用の物理媒体から各プログラムを取得して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮ（Wide  Area  Network）などを介して他のコンピュータまたはサーバ装置などに記憶させた各プログラムを取得して実行するようにしてもよい。
【符号の説明】
【０２０９】
１  並列計算機システム
２  入力装置
３  並列計算機
３ａ〜３ｆ  計算ノード
４  出力装置
１０、１０ａ〜１０ｂ  管理装置
１１、１１ａ  記憶部
１２、１２ａ  ノードテーブル
１３、１３ａ  生成部
１４  受付部
１５、１５ａ〜１５ｅ  探索部
１６、１６ａ  特定部
１７  割当部
【図１】
2015036924.tif 000003
【図２】
2015036924.tif 000004
【図３】
2015036924.tif 000005
【図４】
2015036924.tif 000006
【図５】
2015036924.tif 000007
【図６】
2015036924.tif 000008
【図７】
2015036924.tif 000009
【図８】
2015036924.tif 000010
【図９】
2015036924.tif 000011
【図１０】
2015036924.tif 000012
【図１１】
2015036924.tif 000013
【図１２】
2015036924.tif 000014
【図１３】
2015036924.tif 000015
【図１４】
2015036924.tif 000016
【図１５】
2015036924.tif 000017
【図１６】
2015036924.tif 000018
【図１７】
2015036924.tif 000019
【図１８】
2015036924.tif 000020
【図１９】
2015036924.tif 000021
【図２０】
2015036924.tif 000022
【図２１】
2015036924.tif 000023
【図２２】
2015036924.tif 000024
【図２３】
2015036924.tif 000025
【図２４】
2015036924.tif 000026
【図２５】
2015036924.tif 000027
【図２６】
2015036924.tif 000028
【図２７】
2015036924.tif 000029
【図２８】
2015036924.tif 000030
【図２９】
2015036924.tif 000031
【図３０】
2015036924.tif 000032
【図３１】
2015036924.tif 000033