(57)【要約】【課題】連続空き計算ノード数の探索処理の処理時間を短縮すること。【解決手段】ノード状態記憶部２１が、各計算ノード１１の空き状態を記憶する。また、探索データ記憶部２２が、Ｘ軸の右端にＸ軸を跨いだ状態を仮想Ｘ軸として展開したデータ構造を有する。そして、探索部２３は、各ＸＹ座標位置の計算ノード１１を起点として仮想Ｘ軸を含むＸ軸及びＹ軸の増加する方向に連続空きノード数をノード状態記憶部２１を参照して探索し、探索データ記憶部２２に書き込む。【選択図】図１
2015041302.tif 000002
【特許請求の範囲】
【請求項１】
所定軸の方向に接続端を介して円環状に接続された所定数の情報処理装置を有する並列計算機と前記並列計算機を管理する管理装置とを備えた並列計算機システムにおいて、
前記管理装置は、
前記所定軸の方向における接続端を跨いで前記所定数の２倍の数の情報処理装置を検索対象として、自装置を起点として全ての軸方向について連続して空き状態にある情報処理装置を探索した数である連続空き装置数の探索データを、起点とした各情報処理装置ごとに記憶する探索データ記憶部と、
前記探索データ記憶部が記憶する探索データを用いて、前記所定軸の方向に接続点を跨ぐ場合を含めて前記連続空き装置数を探索する探索部と、
前記探索部が探索した連続空き装置数に基づき、割当対象のジョブに複数の情報処理装置を割り当てる割当部と
を有することを特徴とする並列計算機システム。
【請求項２】
前記探索部は、他の軸の方向に連続して情報処理装置が空き状態にある数の固定値に対して前記軸の方向に連続して情報処理装置が空き状態にある数を探索する処理を前記固定値を変えながら繰り返すことにより１つの情報処理装置を起点とする前記連続空き装置数を探索することを特徴とする請求項１に記載の並列計算機システム。
【請求項３】
前記探索部は、前記起点から前記軸の増加方向に使用中の情報処理装置が見つかるまで情報処理装置の使用状態を１つずつ判定していくことで、前記固定値に対して前記軸の方向に連続して情報処理装置が空き状態にある数を探索する処理を行うことを特徴とする請求項２に記載の並列計算機システム。
【請求項４】
所定軸の方向に接続端を介して円環状に接続された所定数の情報処理装置を有する並列計算機と前記並列計算機を管理する管理装置とを備えた並列計算機システムにおいて、
前記管理装置は、
自装置を起点として前記所定軸を除いた軸方向について一定の数連続して情報処理装置が空き状態にあるか否かを示す情報を、起点とした各情報処理装置ごとに表すブロックデータを、前記所定軸を除いた軸の方向に連続して情報処理装置が空き状態にある数ごとに展開して得られる階層型データを記憶する階層型データ記憶部と、
自装置を起点として全ての軸方向について連続して空き状態にある情報処理装置を探索した数である連続空き情報処理装置数の探索データを、起点とした各情報処理装置ごとに記憶する探索データ記憶部と、
前記探索データ記憶部が記憶する探索データと前記階層型データ記憶部が記憶する階層型データとを用いて、前記連続空き情報処理装置数を各情報処理装置について探索する探索部と、
前記探索部が探索した連続空き情報処理装置数に基づき、割当対象のジョブに複数の情報処理装置を割り当てる割当部と
を有することを特徴とする並列計算機システム。
【請求項５】
前記ブロックデータは、前記情報を１ビットで表し、
前記探索部は、所定のビット数のデータについて連続する１の数を記憶したビット数テーブルを用いて前記ブロックデータの前記軸方向の連続する空き情報処理装置の数を探索することを特徴とする請求項４に記載の並列計算機システム。
【請求項６】
前記探索部は、各情報処理装置が空き状態にあるか否かを示す情報を、自装置を起点として１つの軸を除く軸方向で１つ連続して情報処理装置が空き状態にあるか否かを示す情報として用いて、前記階層型データを作成して前記階層型データ記憶部に書き込み、該書き込んだ階層型データを用いて前記連続空き情報処理装置数を各情報処理装置について探索することを特徴とする請求項４又は５に記載の並列計算機システム。
【請求項７】
所定軸の方向に接続端を介して円環状に接続された所定数の情報処理装置を有する並列計算機と前記並列計算機を管理するとともに、前記所定軸の方向における接続端を跨いで前記所定数の２倍の数の情報処理装置を検索対象として、自装置を起点として全ての軸方向について連続して空き状態にある情報処理装置を探索した数である連続空き装置数の探索データを起点とした各情報処理装置ごとに記憶する探索データ記憶部を有する管理装置とを備えた並列計算機システムの制御方法において、
前記管理装置が有する探索部が、前記探索データ記憶部が記憶する探索データを用いて、前記所定軸の方向に接続点を跨ぐ場合を含めて前記連続空き装置数を探索し、
前記探索部が探索した連続空き装置数に基づき、前記管理装置が有する割当部が、割当対象のジョブに複数の情報処理装置を割り当てることを特徴とする並列計算機システムの制御方法。
【請求項８】
所定軸の方向に接続端を介して円環状に接続された所定数の情報処理装置を有する並列計算機と前記並列計算機を管理するとともに、前記所定軸の方向における接続端を跨いで前記所定数の２倍の数の情報処理装置を検索対象として、自装置を起点として全ての軸方向について連続して空き状態にある情報処理装置を探索した数である連続空き装置数の探索データを起点とした各情報処理装置ごとに記憶する探索データ記憶部を有する管理装置の制御プログラムにおいて、
前記管理装置が有する探索部に、前記探索データ記憶部が記憶する探索データを用いて、前記所定軸の方向に接続点を跨ぐ場合を含めて前記連続空き装置数を探索させ、
前記探索部が探索した連続空き装置数に基づき、前記管理装置が有する割当部に、割当対象のジョブに複数の情報処理装置を割り当てさせることを特徴とする管理装置の制御プログラム。
【請求項９】
所定軸の方向に接続端を介して円環状に接続された所定数の情報処理装置を有する並列計算機と前記並列計算機を管理するとともに、自装置を起点として前記所定軸を除いた軸方向について一定の数連続して情報処理装置が空き状態にあるか否かを示す情報を起点とした各情報処理装置ごとに表すブロックデータを、前記所定軸を除いた軸の方向に連続して情報処理装置が空き状態にある数ごとに展開して得られる階層型データを記憶する階層型データ記憶部と、自装置を起点として全ての軸方向について連続して空き状態にある情報処理装置を探索した数である連続空き情報処理装置数の探索データを、起点とした各情報処理装置ごとに記憶する探索データ記憶部とを有する管理装置とを備えた並列計算機システムの制御方法において、
前記管理装置が有する探索部が、前記探索データ記憶部が記憶する探索データと前記階層型データ記憶部が記憶する階層型データとを用いて、前記連続空き情報処理装置数を各情報処理装置について探索し、
前記探索部が探索した連続空き情報処理装置数に基づき、前記管理装置が有する割当部が、割当対象のジョブに複数の情報処理装置を割り当てることを特徴とする並列計算機システムの制御方法。
【請求項１０】
所定軸の方向に接続端を介して円環状に接続された所定数の情報処理装置を有する並列計算機と前記並列計算機を管理するとともに、自装置を起点として前記所定軸を除いた軸方向について一定の数連続して情報処理装置が空き状態にあるか否かを示す情報を起点とした各情報処理装置ごとに表すブロックデータを、前記所定軸を除いた軸の方向に連続して情報処理装置が空き状態にある数ごとに展開して得られる階層型データを記憶する階層型データ記憶部と、自装置を起点として全ての軸方向について連続して空き状態にある情報処理装置を探索した数である連続空き情報処理装置数の探索データを、起点とした各情報処理装置ごとに記憶する探索データ記憶部とを有する管理装置の制御プログラムにおいて、
前記管理装置が有する探索部に、前記探索データ記憶部が記憶する探索データと前記階層型データ記憶部が記憶する階層型データとを用いて、前記連続空き情報処理装置数を各情報処理装置について探索させ、
前記探索部が探索した連続空き情報処理装置数に基づき、前記管理装置が有する割当部に、割当対象のジョブに複数の情報処理装置を割り当てさせることを特徴とする管理装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機システム、並列計算機システムの制御方法及び管理装置の制御プログラムに関する。
【背景技術】
【０００２】
従来、二次元のメッシュ接続や三次元のキューブ接続やトーラス接続等、任意の次元空間内で隣接関係を有する計算ノード同士を接続し、隣接関係を有しない計算ノード同士の通信を経路中に位置する他の計算ノードに中継させる並列計算機システムが知られている。ここで、トーラス接続とは、複数の計算ノード同士を円環状に接続する接続形態をいう。
【０００３】
かかる並列計算機システムでは、配置が連続していない計算ノードに対して１つのジョブを割当てた場合は、ジョブが割当てられた計算ノード同士の通信を、他のジョブが割当てられた計算ノードが中継する場合がある。かかる場合、あるジョブが割当てられた計算ノード間の通信が、他のジョブが割当てられた計算ノードの外乱となる場合や、あるジョブを実行する計算ノードに異常が発生した際に、他のジョブが中断する場合がある。
【０００４】
このため、並列計算機システムは、新たなジョブの割当てを行う場合は、ジョブが割当てられていない空きノードが連続する領域を総当りで探索し、探索した領域からジョブの実行に最適な領域を選択する。そして、並列計算機システムは、選択した領域に対して、新たなジョブの割当てを行う。
【０００５】
しかし、連続する計算ノードの長方形や直方体で割当て・解放(ジョブ実行終了時)を繰り返していくと、段々とフラグメントが多く発生して大きなジョブ(要求計算ノード数が多いジョブ)が割当て難くなってくる。図２３Ａは、計算ノードが二次元に配置される並列計算機システムで、フラグメントが多く発生した場合を示す図である。図２３Ａでは、４つの３ノードジョブの配置がよくないため、フラグメントが多く、連続する空き計算ノードの最大の長方形の空間である最大空き空間は８ノードである。
【０００６】
このような状況を出来る限り少なくするために、並列計算機システムは、小さなジョブ(要求計算ノード数が少ないジョブ)を隅に集めて大きな空き空間が残るように計算ノードを選択している。図２３Ｂは、小さなジョブを隅に集めて大きな空き空間が残るよう計算ノードを選択した場合を示す図である。図２３Ｂでは、４つの３ノードジョブを隅に集めることにより、最大空き空間は１８ノードとなり、フラグメントが多い図２３Ａの場合と比較して、最大空き空間を大きくすることができる。
【０００７】
なお、二次元トーラス接続の場合は、二次元トーラス接続に含まれる二次元メッシュ接続においてＸ方向及びＹ方向の両端の計算ノードが接続された接続形態であり、三次元トーラス接続の場合は、三次元トーラス接続に含まれる三次元メッシュ接続においてＸ方向、Ｙ方向及びＺ方向の両端の計算ノードが接続された接続形態である。言い換えると、トーラス接続とは、所定軸の方向に接続端を介して円環状に接続された接続形態である。従って、並列計算機システムは、トーラス接続に含まれるメッシュ接続の両端が接続された接続形態であるとして、当該トーラス接続に含まれるメッシュ接続における接続された両端である接続端を跨いだ探索を行う。ここで、Ｘ方向はＸ軸の方向であり、Ｙ方向はＹ軸の方向であり、Ｚ方向はＺ軸の方向である。図２３Ｃは、二次元トーラス接続のＸ軸跨ぎ最大空き空間の一例を示す図である。この例では、Ｘ軸を跨いで連続空き計算ノードを探索することにより、最大空き空間は１５ノードとなる。
【０００８】
二次元トーラス接続ネットワークで接続された並列計算機システムにおいて、連続する空き計算ノードを探索する処理では、図２４Ａに示すデータ構造の探索データが用いられる。図２４Ａは、Ｘサイズが４であり、Ｙサイズが３である並列計算機システムを例として、各ＸＹ座標の計算ノードにおいて、最大ＸＹ座標へ向かう連続する空き計算ノード数の探索データを示している。ここで、「Ｘサイズが４である」とは、Ｘ方向に４計算ノードあることを示し、「Ｙサイズが３である」とは、Ｙ方向に３計算ノードあることを示す。
【０００９】
各ＸＹ座標位置のデータには、当該座標からＹ＝２座標に向けて連続したＹサイズを１ずつ増やした場合の連続したＸサイズの探索データが含まれている。すなわち、各ＸＹ座標位置のデータには、連続Ｙサイズｅを固定した連続Ｘサイズｄ及び連続空きノード数ｆの探索データＴ[ａ][ｂ].ｙｘ[ｃ]＝ｆ（ｄ，ｅ）が含まれている。ここで、ａは計算ノードのＸ座標であり、ｂは計算ノードのＹ座標であり、ｃは配列添字で０〜２の値をとる。また、連続Ｙサイズは、Ｙ方向の連続した空き計算ノードのサイズであり、連続Ｘサイズは、Ｘ方向の連続した空き計算ノードのサイズである。また、ｆ及びｄ以外は固定値であるため、初期設定され、ｆ及びｄは０に初期設定される。図２４Ａにおいて、探索されるｆ及びｄは太字で示される。
【００１０】
例えば、原点Ｔ[０][０]のデータには、連続Ｙサイズ＝１，２，３の場合の連続Ｘサイズ探索データが含まれる。最大ＸＹ座標である、Ｔ[３][２]のデータには、連続Ｙサイズ＝１の場合の連続Ｘサイズ探索データが含まれる。なお、図２４Ａは、全計算ノードは空き状態にある場合の探索データを示している。また、図２４Ａにおいて斜線掛けした部分は、無効データを示す。例えば、Ｙ＝１の場合、連続Ｙサイズｅは１又は２であり、３となることはないので配列添字は１と２となり、Ｙ＝２の場合、連続Ｙサイズｅは１しかないので配列添字は１だけとなる。
【００１１】
図２４Ａに示した探索データを連続空き計算ノード数でソートした結果を図２４Ｂに示す。図２４Ｂに示すソート結果よりユーザジョブが要求する形状及び計算ノード数を満たす最小の連続空き計算ノードの長方形を選択することで大きな空き空間、すなわち、連続する空き計算ノードの長方形を残すことが可能になる。
【００１２】
ただし、図２４Ａに示した探索データのデータ構造には、Ｘ軸及びＹ軸跨ぎの探索データが含まれない。Ｘ軸跨ぎを処理する場合、右端と左端の計算ノードは繋がっているので、図２５Ａに示すように、各仮想原点より始めて、右端から左端へ回り込んだ探索が必要になる。同様に、Ｙ軸跨ぎを処理する場合、上端と下端の計算ノードは繋がっているので、図２５Ｂに示すように、各仮想原点より始めて、上端から下端へ回り込んだ探索が必要になる。
【００１３】
図２６は、二次元連続空き計算ノードの長方形探索処理のフローを示すフローチャートである。図２６に示すように、並列計算機システムにおいて長方形の探索を行う探索部は、計算ノードのＹ方向の座標位置を示す変数Ｙを０で初期化する（ステップＳ２０１）。そして、探索部は、Ｙ方向の計算ノードの個数をＹｍａｘとしてＹがＹｍａｘより小さいか否かを判定し（ステップＳ２０２）、ＹがＹｍａｘより小さくない場合には、Ｙ方向について全ての計算ノードを対象として探索した場合であるので、処理を終了する。
【００１４】
一方、ＹがＹｍａｘより小さい場合には、探索部は、計算ノードのＸ方向の座標位置を示す変数Ｘを０で初期化する（ステップＳ２０３）。そして、探索部は、Ｘ方向の計算ノードの個数をＸｍａｘとしてＸがＸｍａｘより小さいか否かを判定する（ステップＳ２０４）。その結果、ＸがＸｍａｘより小さい場合には、探索部は、座標（Ｘ，Ｙ）の計算ノードについて、連続Ｙサイズを固定してＸ方向に連続空き計算ノードの探索を行うＹ固定探索処理（Ｘ，Ｙ）を行う（ステップＳ２０５）。そして、探索部は、Ｘを１増加し（ステップＳ２０６）、ステップＳ２０４に戻り、Ｘ方向の次の計算ノードを起点とする探索を行う。一方、ＸがＸｍａｘより小さくない場合には、Ｘ方向について全ての計算ノードを対象として探索した場合であるので、Ｙを１増加し（ステップＳ２０７）、ステップＳ２０２に戻る。
【００１５】
図２７は、Ｙ固定探索処理（Ｘ，Ｙ）のフローを示すフローチャートである。図２７に示すように、探索部は、Ｘ方向の探索サイズであるＸＳｉｚｅをＸｍａｘ−Ｘで初期化する。また、探索部は、Ｘ方向の繰り返し変数ｉをＸで初期化し、Ｙ方向の繰り返し変数ｃをＹで初期化し、連続Ｘサイズｄを０で初期化し、連続Ｙサイズｅを１で初期化する（ステップＳ２１１）。
【００１６】
そして、探索部は、ｃがＹｍａｘより小さいか否かを判定し（ステップＳ２１２）、ｃがＹｍａｘより小さくない場合には、全ての連続Ｙサイズについて探索をした場合であるので、処理を終了する。
【００１７】
一方、ｃがＹｍａｘより小さい場合には、探索部は、ｉがＸｍａｘより小さいか否かを判定し（ステップＳ２１３）、ｉがＸｍａｘより小さい場合には、ｉがＸＳｉｚｅより小さいか否かを判定する（ステップＳ２１４）。その結果、ｉがＸＳｉｚｅより小さい場合には、探索部は、座標（ｉ，ｃ）の計算ノードが空きか否かを示すＴ[ｉ][ｃ]が空きであるか否かを判定する（ステップＳ２１５）。その結果、空きである場合には、探索部は、ｄに１を加え、ｉに１を加えて（ステップＳ２１６）、Ｘ方向の次の計算ノードの空き状態をチェックするため、ステップＳ２１３に戻る。
【００１８】
一方、Ｔ[ｉ][ｃ]が空きでない場合、ｉがＸＳｉｚｅより小さくない場合、又は、ｉがＸｍａｘより小さくない場合には、連続Ｘサイズの探索が終了した場合であるので、探索部は、ｄとｅをかけてｆを算出する。また、探索部は、探索データＴ[Ｘ][Ｙ].ｙｘ[ｃ]のｆ及びｄに値を設定し、ＸＳｉｚｅ、ｉ及びｄをそれぞれｄ、Ｘ及び０で初期化し、ｃ及びｅに１を加え（ステップＳ２１７）、ステップＳ２１２に戻って、次の連続Ｙサイズの探索を行う。
【００１９】
図２８は、Ｙ固定探索処理（０，０）の処理概要を説明するための図である。図２８に示すように、探索部は、連続Ｙサイズが１である場合の連続Ｘサイズの探索のため、ＸＳｉｚｅを初期化し（１）、ｉがＸＳｉｚｅより小さいか否かを判定し（２）、計算ノードが空きか否かを判定する（３）。そして、探索部は、ｉがＸＳｉｚｅより小さくなくなるか又は計算ノードが空きでなくなるまで、ｉがＸＳｉｚｅより小さいか否かの判定（４）、（６）、（８）と、計算ノードが空きか否かの判定（５）、（７）、（９）を繰り返す。
【００２０】
そして、探索部は、連続Ｙサイズが２である場合の連続Ｘサイズの探索のため、連続Ｙサイズが１である場合の連続ＸサイズでＸＳｉｚｅを初期化する（１０）。連続Ｙサイズが１である場合の連続ＸサイズでＸＳｉｚｅを初期化するのは、連続Ｙサイズが１である場合の連続Ｘサイズより、連続Ｙサイズが２である場合の連続Ｘサイズが大きくなることはないためである。そして、探索部は、ｉがＸＳｉｚｅより小さくなくなるか又は計算ノードが空きでなくなるまで、ｉがＸＳｉｚｅより小さいかの判定（１１）、（１３）、（１５）、（１７）と、計算ノードが空きか否かの判定（１２）、（１４）、（１６）、（１８）を繰り返す。
【００２１】
そして、探索部は、連続Ｙサイズが３である場合の連続Ｘサイズの探索のため、連続Ｙサイズが２である場合の連続ＸサイズでＸＳｉｚｅを初期化する（１９）。そして、探索部は、ｉがＸＳｉｚｅより小さくなくなるか又は計算ノードが空きでなくなるまで、ｉがＸＳｉｚｅより小さいかの判定（２０）、（２２）、（２４）、（２６）と、計算ノードが空きか否かの判定（２１）、（２３）、（２５）、（２７）を繰り返す。
【００２２】
なお、三次元トーラス接続構造のＰＣクラスタシステム上で、並列プログラムの実行時間短縮を図るためにプロセスを自動最適配置する従来技術がある（例えば、特許文献１参照。）。また、トーラス接続網で構成された並列計算機システムで１対多又は多対多の通信を効率よく行う従来技術がある（例えば、特許文献２参照。）。また、配置領域としての長方形領域内に複数個の形状の異なる長方形を、制約違反が起こらないように効率よく配置する従来技術がある（例えば、特許文献３参照。）。
【先行技術文献】
【特許文献】
【００２３】
【特許文献１】特開２０１２−２５２５９１号公報
【特許文献２】国際公開第２００８／１１４４４０号
【特許文献３】特開平６−１６１９９０号公報
【発明の概要】
【発明が解決しようとする課題】
【００２４】
しかしながら、従来の探索処理には、計算ノードの数が多くなると処理に時間がかかり、実用的な時間内に計算ノードの選択処理が完了しなくなるという問題がある。ここで、探索処理では、図２６及び図２７のフローチャートに示すように、ループ内の条件判定処理が処理全体の大部分を占める。したがって、条件判定の回数で処理時間の増減を判断することが可能となる。
【００２５】
図２９及び図３０は、計算ノード数増加による条件判定回数の増加を示す図である。図２９は、計算ノード数増加による条件判定回数の増加を表で示し、図３０は、計算ノード数増加による条件判定回数の増加をグラフで示す。図２９及び図３０は、Ｘサイズが２４でＹサイズが１〜１８まで増加した場合の条件判定の回数を示す。
【００２６】
図２９に示すように、Ｘトーラス接続を無効にした場合の条件判定回数であるＸトーラス無効合計は、計算ノード数が２４から４３２へ１８倍になると９９９から１６３００９と１６３倍になる。また、Ｘトーラス接続を有効にした場合の条件判定回数であるＸトーラス有効合計は、計算ノード数が２４から４３２へ１８倍になり、Ｘ軸跨ぎが有効となると９９９から３９１２２１６と３９１６倍になる。なお、図３０において、Ｙ固定探索処理のグラフは、Ｘトーラス無効合計のグラフと重なっている。
【００２７】
本発明は、１つの側面では、連続空き計算ノードの探索処理時間を短くする並列計算機システムを提供することを目的とする。
【課題を解決するための手段】
【００２８】
本願の開示する並列計算機システムは、１つの態様において、所定軸の方向に接続端を介して円環状に接続された所定数の情報処理装置を有する並列計算機と前記並列計算機を管理する管理装置とを備えた並列計算機システムである。前記管理装置は、探索データ記憶部と、探索部と、割当部とを有する。前記探索データ記憶部は、前記所定軸の方向における接続端を跨いで前記所定数の２倍の数の情報処理装置を検索対象として、自装置を起点として全ての軸方向について連続して空き状態にある情報処理装置を探索した数である連続空き装置数の探索データを、起点とした各情報処理装置ごとに記憶する。前記探索部は、前記探索データ記憶部が記憶する探索データを用いて、前記所定軸の方向に接続点を跨ぐ場合を含めて前記連続空き装置数を探索する。前記割当部は、前記探索部が探索した連続空き装置数に基づき、割当対象のジョブに複数の情報処理装置を割り当てる。
【発明の効果】
【００２９】
１実施態様によれば、連続空き計算ノードの探索処理時間を短くすることができる。
【図面の簡単な説明】
【００３０】
【図１】図１は、実施例１に係る並列計算機システムの構成を示す図である。
【図２】図２は、探索データ記憶部のデータ構造の一例を示す図である。
【図３】図３は、ソート結果記憶部のデータ構造の一例を示す図である。
【図４】図４は、探索部による探索処理のフローを示すフローチャートである。
【図５】図５は、Ｙ固定探索処理（Ｘ，Ｙ）のフローを示すフローチャートである。
【図６】図６は、実施例１に係る探索部による条件判定の回数を示す図である。
【図７】図７は、実施例１に係る探索部による条件判定の回数を示す図である。
【図８】図８は、実施例２に係る並列計算機システムの構成を示す図である。
【図９】図９は、並列計算機システムの各計算ノード状態のビット化を示す図である。
【図１０Ａ】図１０Ａは、階層型データ記憶部の階層型データ構造を示す図である。
【図１０Ｂ】図１０Ｂは、階層型データ記憶部の階層型データ構造を示す図である。
【図１０Ｃ】図１０Ｃは、階層型データ記憶部の階層型データ構造を示す図である。
【図１０Ｄ】図１０Ｄは、階層型データ記憶部の階層型データ構造を示す図である。
【図１１】図１１は、探索データ記憶部のデータ構造の一例を示す図である。
【図１２】図１２は、図１１に示した探索データに対するソート結果を示す図である。
【図１３】図１３は、Ｚ方向１ノード連続のＹ方向探索処理を説明するための図である。
【図１４】図１４は、Ｚ方向２ノード連続のＹ方向探索処理を説明するための図である。
【図１５】図１５は、６４ビット内の連続ＯＮビット数探索処理用データ構造の一例を示す図である。
【図１６】図１６は、ビット数テーブルを示す図である。
【図１７】図１７は、探索部による探索処理のフローを示すフローチャートである。
【図１８】図１８は、Ｚ１のＹ方向探索処理のフローを示すフローチャートである。
【図１９】図１９は、ＺｎのＹ方向探索処理のフローを示すフローチャートである。
【図２０】図２０は、Ｘ方向探索処理（Ｘ，Ｙ，Ｚ，ＸＢ）のフローを示すフローチャートである。
【図２１】図２１は、連続ＯＮビット数探索処理（ＣＢ，Ｘ）のフローを示すフローチャートである。
【図２２】図２２は、実施例に係る管理プログラムを実行するコンピュータのハードウェア構成を示す図である。
【図２３Ａ】図２３Ａは、フラグメントが多く発生した場合を示す図である。
【図２３Ｂ】図２３Ｂは、大きな空き空間が残るよう計算ノードを選択した場合を示す図である。
【図２３Ｃ】図２３Ｃは、二次元トーラス接続のＸ軸跨ぎ最大空き空間の一例を示す図である。
【図２４Ａ】図２４Ａは、二次元連続空き計算ノードの長方形探索データの表現例を示す図である。
【図２４Ｂ】図２４Ｂは、図２４Ａに示した探索データのソート結果を示す図である。
【図２５Ａ】図２５Ａは、Ｘ軸跨ぎ処理における仮想原点の移動を示す図である。
【図２５Ｂ】図２５Ｂは、Ｙ軸跨ぎ処理における仮想原点の移動を示す図である。
【図２６】図２６は、二次元連続空き計算ノードの長方形探索処理のフローを示すフローチャートである。
【図２７】図２７は、Ｙ固定探索処理（Ｘ，Ｙ）のフローを示すフローチャートである。
【図２８】図２８は、Ｙ固定探索処理（０，０）の処理概要を説明するための図である。
【図２９】図２９は、計算ノード数増加による条件判定回数の増加を示す図である。
【図３０】図３０は、計算ノード数増加による条件判定回数の増加を示す図である。
【発明を実施するための形態】
【００３１】
以下に、本願の開示する並列計算機システム、並列計算機システムの制御方法及び管理装置の制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例１】
【００３２】
まず、実施例１に係る並列計算機システムの構成について説明する。図１は、実施例１に係る並列計算機システムの構成を示す図である。図１に示すように、並列計算機システム１は、並列計算機１０と、管理装置２０とを有する。
【００３３】
並列計算機１０は、Ｘ方向に４個の計算ノード１１を有し、Ｙ方向に３個の計算ノード１１を有する。したがって、並列計算機１０は、合計１２個の計算ノード１１を有する。各計算ノード１１は、ＣＰＵ、メモリ、通信部などを有する情報処理装置である。
【００３４】
各計算ノード１１は上下左右に隣接する計算ノード１１と直接接続される。また、並列計算機１０は、Ｘ方向についてトーラス接続であり、左端の計算ノード１１は右端の計算ノードと直接接続される。なお、ここでは説明の便宜上、１２個の計算ノード１１のみを示したが、並列計算機１０は、任意の台数の計算ノード１１を有することができる。
【００３５】
管理装置２０は、並列計算機１０を管理する装置であり、各計算ノード１１へのジョブの割当などを行う。管理装置２０は、ノード状態記憶部２１と、探索データ記憶部２２と、探索部２３と、ソート部２４と、ソート結果記憶部２５と、受付部２６と、割当部２７とを有する。
【００３６】
ノード状態記憶部２１は、各計算ノード１１が空いているか使用中であるかを記憶する。ノード状態記憶部２１は、各計算ノード１１のＸＹ座標と１ビットの情報を対応付けて記憶する。１ビットの情報は、「１」が空きを示し、「０」は使用中を示す。
【００３７】
探索データ記憶部２２は、連続して空き状態にある計算ノード１１である連続空きノードの探索データを記憶する。図２は、探索データ記憶部２２のデータ構造の一例を示す図である。図２は、各ＸＹ座標の計算ノードにおいて、最大ＸＹ座標へ向かう連続空きノード数の探索データを示している。
【００３８】
各ＸＹ座標位置のデータには、当該座標からＹ＝２座標に向けて連続したＹサイズを１ずつ増やした場合の連続したＸサイズの探索データが含まれている。すなわち、各ＸＹ座標位置のデータには、連続Ｙサイズｅを固定した連続Ｘサイズｄ及び連続空きノード数ｆの探索データＴ[ａ][ｂ].ｙｘ[ｃ]＝ｆ（ｄ，ｅ）が含まれている。ここで、ａは計算ノード１１のＸ座標であり、ｂは計算ノード１１のＹ座標であり、ｃは配列添字で０〜２の値をとる。また、ｄ及びｆ以外は固定値であるため、初期設定され、ｆ及びｄは０に初期設定される。図２において、探索されるｆ及びｄは太字で示される。
【００３９】
ただし、図２４Ａに示した探索データと異なり、探索データ記憶部２２は、Ｘ軸の右端にＸ軸を跨いだ状態を仮想Ｘ軸として展開したデータ構造を有する。仮想Ｘ軸上のデータは実Ｘ軸上のデータの状態を写したものである。例えば、仮想Ｘ＝４は、Ｘ＝０の計算ノード状態のコピーとなる。したがって、探索データ記憶部２２は、Ｘ方向の４個の計算ノード１１に対してＸ軸跨ぎ用にＸ方向に２倍の８個分の探索データを記憶する。
【００４０】
なお、図２は、全計算ノードが空き状態にある場合の探索データを示している。また、図２において斜線掛けした部分は、無効データを示す。例えば、Ｙ＝１の場合、連続Ｙサイズｅは１又は２であり、３となることはないので配列添字は１と２となり、Ｙ＝２の場合、連続Ｙサイズｅは１しかないので配列添字は１だけとなる。
【００４１】
探索部２３は、各ＸＹ座標位置の計算ノード１１を起点として仮想Ｘ軸を含むＸ軸及びＹ軸の増加する方向に連続空きノード数をノード状態記憶部２１を用いて探索し、探索結果を探索データ記憶部２２に書き込む。探索部２３は、仮想Ｘ軸を含めて連続Ｘサイズの最大値を８として探索を行うが、連続空き計算ノード数については実Ｘサイズを超えない値で計算する。
【００４２】
ソート部２４は、探索データ記憶部２２が記憶する探索データを連続空きノード数でソートし、ソート結果をソート結果記憶部２５に書き込む。ソート結果記憶部２５は、ソート部２４によるソート結果を記憶する。図３は、ソート結果記憶部２５のデータ構造の一例を示す図である。図３に示すように、ソート結果記憶部２５は、連続空きノード数でソートされた探索データを記憶する。
【００４３】
受付部２６は、入力装置を用いてユーザが指定したジョブを受け付け、探索部２３に連続空きノードの探索を指示する。また、受付部２６は、ユーザから受け付けたジョブに対して、割当部２７に計算ノード１１の割当を指示する。
【００４４】
割当部２７は、ソート結果記憶部２５が記憶する連続空きノード数に基づいてジョブを割り当てる計算ノード１１を選択する。すなわち、割当部２７は、ユーザジョブが要求する形状および計算ノード数を満たす最小の空き計算ノード１１の長方形を選択する。割当部２７が、ユーザジョブが要求する形状および計算ノード数を満たす最小の空き計算ノード１１の長方形を選択することで、管理装置２０は、大きな空き空間を残すことができる。
【００４５】
また、割当部２７は、選択した計算ノード１１にジョブの実行を指示する。また、割当部２７は、ジョブを割り当てた計算ノード１１についてノード状態記憶部２１を更新する。また、割当部２７は、ジョブを完了した計算ノード１１についてノード状態記憶部２１を更新する。
【００４６】
次に、探索部２３による探索処理のフローについて説明する。図４は、探索部２３による探索処理のフローを示すフローチャートである。図４に示すように、探索部２３は、計算ノード１１のＹ方向の座標位置を示す変数Ｙを０で初期化する（ステップＳ１）。そして、探索部２３は、Ｙ方向の計算ノード１１の個数３よりＹが小さいか否かを判定し（ステップＳ２）、Ｙが３より小さくない場合には、Ｙ方向について全ての計算ノード１１を対象として探索した場合であるので、処理を終了する。
【００４７】
一方、Ｙが３より小さい場合には、探索部２３は、計算ノード１１のＸ方向の座標位置を示す変数Ｘを０で初期化する（ステップＳ３）。そして、探索部２３は、仮想Ｘ軸を含めたＸ方向の計算ノード１１の個数８よりＸが小さいか否かを判定する（ステップＳ４）。その結果、Ｘが８より小さい場合には、探索部２３は、座標（Ｘ，Ｙ）の計算ノード１１について、連続Ｙサイズを固定してＸ方向に連続空きノードの探索を行うＹ固定探索処理（Ｘ，Ｙ）を行う（ステップＳ５）。
【００４８】
そして、探索部２３は、Ｘを１増加し（ステップＳ６）、ステップＳ４に戻り、Ｘ方向の次の計算ノード１１を起点としてＹ固定探索処理（Ｘ，Ｙ）を行う。一方、Ｘが８より小さくない場合には、Ｘ方向について全ての計算ノード１１を対象として探索した場合であるので、Ｙを１増加し（ステップＳ７）、ステップＳ２に戻り、Ｙ方向の次の計算ノード１１を起点とするＹ固定探索処理（Ｘ，Ｙ）を行う。
【００４９】
図５は、Ｙ固定探索処理（Ｘ，Ｙ）のフローを示すフローチャートである。図５に示すように、探索部２３は、Ｘ方向の探索サイズであるＸＳｉｚｅを８−Ｘで初期化する。また、探索部２３は、Ｘ方向の繰り返し変数ｉをＸで初期化し、Ｙ方向の繰り返し変数ｃをＹで初期化し、連続Ｘサイズｄを０で初期化し、連続Ｙサイズｅを１で初期化する（ステップＳ１１）。
【００５０】
そして、探索部２３は、ｃが３より小さいか否かを判定し（ステップＳ１２）、ｃが３より小さくない場合には、全ての連続Ｙサイズについて探索をした場合であるので、処理を終了する。
【００５１】
一方、ｃが３より小さい場合には、探索部２３は、ｉが８より小さいか否かを判定し（ステップＳ１３）、ｉが８より小さい場合には、ｉがＸＳｉｚｅより小さいか否かを判定する（ステップＳ１４）。その結果、ｉがＸＳｉｚｅより小さい場合には、探索部２３は、座標（ｉ，ｃ）の計算ノード１１が空きか否かを示すＴ[ｉ][ｃ]が空きであるか否かを判定する（ステップＳ１５）。ここで、Ｔ[ｉ][ｃ]はノード状態記憶部２１が記憶する情報である。その結果、空きである場合には、探索部２３は、ｄに１を加え、ｉに１を加えて（ステップＳ１６）、次の計算ノード１１の空き状態をチェックするため、ステップＳ１３に戻る。
【００５２】
一方、Ｔ[ｉ][ｃ]が空きでない場合、ｉがＸＳｉｚｅより小さくない場合、又は、ｉが８より小さくない場合には、連続Ｘサイズの探索が終了した場合であるので、探索部２３は、ｄが４以下であるか否かを判定する（ステップＳ１７）。その結果、探索部２３は、４以下でない場合には、Ｘ軸跨ぎの場合であるので、４とｅをかけてｆを算出し（ステップＳ１８）、４以下である場合には、Ｘ軸跨ぎでない場合であるので、ｄとｅをかけてｆを算出する（ステップＳ１９）。
【００５３】
そして、探索部２３は、探索データＴ[Ｘ][Ｙ].ｙｘ[ｃ]のｆ及びｄに値を設定し、ＸＳｉｚｅ、ｉ及びｄをそれぞれｄ、Ｘ及び０で初期化し、ｃ及びｅに１を加え（ステップＳ２０）、ステップＳ１２に戻って、次の連続Ｙサイズの探索を行う。
【００５４】
このように、探索部２３は、連続Ｘサイズの探索が終了した場合に、Ｘ軸跨ぎの場合であるか否かを判定し、Ｘ軸跨ぎである場合には、連続空きノード数を実Ｘサイズを超えない値で計算するので、正しく連続空きノード数を計算することができる。
【００５５】
図６及び図７は、実施例１に係る探索部２３による条件判定の回数を示す図である。図６は、実施例１に係る探索部２３による条件判定の回数を表で示し、図７は、実施例１に係る探索部２３による条件判定の回数をグラフで示す。図６及び図７は、Ｘサイズが２４でＹサイズが１〜１８まで増加した場合の条件判定の回数を示す。
【００５６】
図６に示すように、Ｘトーラス接続を有効にした場合の条件判定回数であるＸトーラス有効合計は、計算ノード数が４３２の場合で、６２９６７７であり、従来の３９１２２１６と比較して６分の１になる。なお、図７において、Ｙ固定探索処理のグラフは、Ｘトーラス無効合計のグラフと重なっている。
【００５７】
上述してきたように、実施例１では、ノード状態記憶部２１が、各計算ノード１１の空き状態を記憶する。また、探索データ記憶部２２が、Ｘ軸の右端にＸ軸を跨いだ状態を仮想Ｘ軸として展開したデータ構造を有する。そして、探索部２３は、各ＸＹ座標位置の計算ノード１１を起点として仮想Ｘ軸を含むＸ軸及びＹ軸の増加する方向に連続空きノード数をノード状態記憶部２１を参照して探索し、探索データ記憶部２２に書き込む。したがって、管理装置２０は、仮想原点を移動してＸ軸を跨いだ連続空きノード数を探索する場合と比較して、条件判定の数を減らすことができ、連続空きノード数の探索処理時間を短くすることができる。
【００５８】
なお、実施例１では、Ｘ方向に軸を跨いだ探索を行う場合について説明したが、本発明はこれに限定されるものではなく、Ｙ方向に軸を跨いだ探索を行う場合やＸ軸及びＹ軸の両方向に軸を跨いだ探索を行う場にも同様に適用することができる。
【００５９】
また、実施例１では、二次元に計算ノード１１が配置される場合について説明したが、本発明はこれに限定されるものではなく、例えば三次元に計算ノード１１が配置される場合など任意の次元で計算ノード１１が配置される場合にも同様に適用することができる。
【実施例２】
【００６０】
ところで、上記実施例１では、軸を跨いだ連続空きノード数の探索における条件判定数は減るが、Ｘ方向のデータ量が２倍になるため、Ｘ方向に連続空きノードを探索する際の条件判定数は増加する。そこで、実施例２では、連続した空き計算ノード１１の長方形及び直方体探索処理において条件判定回数を削減する並列計算機システムについて説明する。
【００６１】
まず、実施例２に係る並列計算機システムの構成について説明する。図８は、実施例２に係る並列計算機システムの構成を示す図である。なお、ここでは説明の便宜上、図１に示した各部と同様の役割を果たす機能部については同一符号を付すこととしてその詳細な説明を省略する。図８に示すように、並列計算機システム２は、並列計算機３０と、管理装置４０とを有する。
【００６２】
並列計算機３０は、Ｘ方向に６個の計算ノード１１を有し、Ｙ方向に５個の計算ノード１１を有し、Ｚ方向に４個の計算ノード１１を有する。したがって、並列計算機３０は、合計１２０個の計算ノード１１を有する。各計算ノード１１は、ＣＰＵ、メモリ、通信部などを有する情報処理装置である。
【００６３】
各計算ノード１１は各方向に隣接する計算ノード１１と直接接続される。また、並列計算機３０は、Ｘ方向にトーラス接続であり、左端の計算ノード１１は右端の計算ノード１１と直接接続される。なお、ここでは説明の便宜上、１２０個の計算ノード１１を示したが、並列計算機３０は、任意の台数の計算ノード１１を有することができる。
【００６４】
管理装置４０は、並列計算機３０を管理する装置であり、各計算ノード１１へのジョブの割当などを行う。管理装置４０は、階層型データ記憶部４１と、探索データ記憶部４２と、探索部４３と、ソート部２４と、ソート結果記憶部２５と、受付部２６と、割当部２７と、ビット数テーブル４８とを有する。
【００６５】
階層型データ記憶部４１は、Ｚ方向及びＹ方向の連続空きノード数を表す階層型データ構造のデータを記憶する。ここで、階層型データ構造を説明するために必要な計算ノード状態のビット化について説明する。図９は、並列計算機システム２の各計算ノード状態のビット化を示す図である。図９において、Ｘ０〜Ｘ５は、Ｘ座標が０〜５であることを示し、Ｙ０〜Ｙ４は、Ｙ座標が０〜４であることを示し、Ｚ０〜Ｚ３は、Ｚ座標が０〜３であることを示す。
【００６６】
図９に示すように、各計算ノード１１の状態は、Ｚ０〜Ｚ３の各面においてＸＹ座標に対応する位置の１ビットで表される。図９において、「１」はジョブなし、すなわち、計算ノード状態は空きであることを示し、「０」はジョブあり、すなわち、計算ノード状態は使用中であることを示す。
【００６７】
図１０Ａ〜図１０Ｄは、階層型データ記憶部４１の階層型データ構造を示す図である。図１０Ａは、Ｚ方向に１ノード連続（ＰＺ＝０）であるブロック５１を示し、図１０Ｂは、Ｚ方向に２ノード連続（ＰＺ＝１）であるブロック５２を示す。図１０Ｃは、Ｚ方向に３ノード連続（ＰＺ＝２）であるブロック５３を示し、図１０Ｄは、Ｚ方向に４ノード連続（ＰＺ＝３）であるブロック５４を示す。ここで、Ｚ方向にｎ（ｎ＝１〜４）ノード連続とは、Ｚ方向に計算ノード１１が連続して空き状態にあることを示す。また、ＰＺ＝（Ｚ方向に連続空きノード数−１）である。図１０Ａ〜図１０Ｄは、一番大きな階層の４つのブロック５１〜５４を示す。
【００６８】
各ブロック内には、５つの「Ｙ方向にｎ（ｎ＝１〜５）ノード連続」のブロック（ＰＹ＝０〜４）がある。ここで、Ｙ方向にｎ（ｎ＝１〜５）ノード連続とは、Ｙ方向に計算ノード１１が連続して空き状態にあることを示す。また、ＰＹ＝（Ｙ方向に連続空きノード数−１）である。
【００６９】
図１０Ａ〜図１０Ｄにおいて、各ビットは、Ｘ軸上の計算ノード情報Ｂ[Ｙ][Ｚ].ｙｚ[ＰＹ][ＰＺ]を示す。ここで、Ｂ[Ｙ][Ｚ].ｙｚ[ＰＹ][ＰＺ]は、座標（ｎ（ｎ＝０〜５），Ｙ，Ｚ）の計算ノード１１を起点としてＹ方向に（ＰＹ＋１）個、Ｚ方向に（ＰＺ＋１）個連続して空き計算ノード１１があるか否かを示し、「１」はあることを示し、「０」はないことを示す。
【００７０】
例えば、図１０Ａにおいて、Ｂ[０][０].ｙｚ[０][０]は、座標（ｎ（ｎ＝０〜５），０，０）の計算ノード１１を起点としてＹ方向及びＺ方向に計算ノード１１が１個連続して空きであるか否かを示す。また、Ｂ[１][１].ｙｚ[１][０]は、座標（ｎ（ｎ＝０〜５），１，１）の計算ノード１１を起点としてＹ方向に２個の計算ノード１１、Ｚ方向に１個の計算ノード１１が連続して空きであるか否かを示す。また、Ｂ[２][２].ｙｚ[２][０]は、座標（ｎ（ｎ＝０〜５），２，２）の計算ノード１１を起点としてＹ方向に３個、Ｚ方向に１個の計算ノード１１が連続して空きであるか否かを示す。また、Ｂ[１][３].ｙｚ[３][０]は、座標（ｎ（ｎ＝０〜５），１，３）の計算ノード１１を起点としてＹ方向に４個、Ｚ方向に１個の計算ノード１１が連続して空きであるか否かを示す。
【００７１】
なお、斜線掛け部分は、Ｙ方向の空きノードの連続数と起点となる計算ノード１１のＹ座標との関係で情報が無効であることを示す。例えば、起点となる計算ノード１１のＹ座標が３である場合には、Ｙ方向に２個しか計算ノード１１がないため、３個以上空き計算ノード１１が連続することはありえない。
【００７２】
また、図１０Ａに示すＰＺ＝０内のＰＹ＝０のブロック６１は、図９で示した各計算ノード状態のビット化したデータを示している。ただし、図１０Ａは、全ての計算ノード１１が空き状態である場合を示している。階層型データ記憶部４１は、初期状態として図１０Ａに示すＰＺ＝０内のＰＹ＝０のブロック６１だけを記憶する。他の部分は、探索部４３によりブロック６１のデータから作成される。
【００７３】
図８に戻って、探索データ記憶部４２は、連続空きノードの探索データを記憶する。図１１は、探索データ記憶部４２のデータ構造の一例を示す図である。図１１は、各ＸＹＺ座標の計算ノード１１において、最大ＸＹＺ座標へ向かう連続する空き計算ノード数の探索データを示している。なお、図１１は、説明の便宜上、Ｘ方向に４個、Ｙ方向に３個、Ｚ方向に２個の計算ノード１１がある場合を示す。
【００７４】
各ＸＹＺ座標位置のデータには、当該座標からＹ＝２座標に向けて連続したＹサイズを１ずつ増やし、Ｚ＝１座標に向けて連続したＺサイズを１ずつ増やした場合の連続したＸサイズの探索データが含まれている。すなわち、各ＸＹＺ座標位置のデータには、連続Ｙサイズｈ、連続Ｚサイズｉを固定した連続Ｘサイズｇ及び連続空きノード数ｆの探索データＴ[ａ][ｂ][ｃ].ｙｚｘ[ｄ][ｅ]＝ｆ（ｇ，ｈ，ｉ）が含まれている。ここで、ａ、ｂ及びｃはそれぞれ起点となる計算ノード１１のＸ座標、Ｙ座標及びＺ座標であり、ｄはｙ配列添字で０〜２の値をとり、ｅはｚ配列添字で０〜１の値をとる。また、ｆ及びｇ以外は固定値であるため、初期設定され、ｆ及びｇは０に初期設定される。図１１において、探索されるｆ及びｇは太字で示される。
【００７５】
例えば、原点Ｔ[０][０][０]のデータには、連続Ｙサイズ＝１，２，３に対する連続Ｚサイズ＝１，２の場合の連続Ｘサイズ探索データが含まれる。最大ＸＹＺ座標であるＴ[７][２][１]のデータには、連続Ｙサイズ＝１かつ連続Ｚサイズ＝１の場合の連続Ｘサイズ探索データが含まれる。
【００７６】
なお、図１１は、全計算ノード１１が空き状態にある場合の探索データを示している。また、図１１において斜線掛けした部分は、無効データを示す。例えば、Ｙ＝１の場合、連続Ｙサイズｈは１又は２であり、３となることはないのでｙ配列添字は１と２となり、Ｙ＝２の場合、連続Ｙサイズｈは１しかないのでｙ配列添字は１だけとなる。
【００７７】
図１２は、図１１に示した探索データに対するソート結果を示す図である。図１２に示すように、探索データは、連続空きノード数でソートされる。
【００７８】
図８に戻って、探索部４３は、各ＸＹＺ座標位置の計算ノード１１を起点として仮想Ｘ軸を含むＸ軸、Ｙ軸及びＺ軸の増加する方向に連続空きノード数を階層型データ記憶部４１を用いて探索し、探索結果を探索データ記憶部４２に書き込む。
【００７９】
具体的には、探索部４３は、まず図１０Ａに示したＺ方向１ノード連続のブロック５１を作成するＺ方向１ノード連続のＹ方向探索処理を行う。図１３は、Ｚ方向１ノード連続のＹ方向探索処理を説明するための図である。ブロック５１内のＰＹ＝０のブロック６１は、各計算ノード１１の状態をビット化した情報であり、探索部４３は、ブロック６１のデータを元にＰＹ＝１（Ｙ方向に２ノード連続）〜ＰＹ＝４（Ｙ方向に５ノード連続）の情報を順番に算出していく。
【００８０】
ＰＹ＝１のブロックのデータは、Ｙ方向に２ノード連続した空きノードの情報なので、ＰＹ＝０のブロックの２つのデータの論理積で求められる。例えば、Ｂ[０][０].ｙｚ[１][０]の６計算ノード１１の状態はＢ[０][０].ｙｚ[０][０]とＢ[１][０].ｙｚ[０][０]の一回の論理積で算出できる。なお、ＰＹ＝１のブロックのデータはＹ方向に２ノード連続した空きノード情報なので、Ｙ＝４の座標のデータは０と決まっており、Ｙ＝４の座標のデータを算出する必要はない。図１３では、斜線掛け表示したＢ[４][０].ｙｚ[１][０]、Ｂ[４][１].ｙｚ[１][０]、Ｂ[４][２].ｙｚ[１][０]、Ｂ[４][３].ｙｚ[１][０]が演算が必要ないデータとなる。
【００８１】
また、ＰＹ＝２のブロックのデータは、Ｙ方向に３ノード連続した空きノードの情報なので、ＰＹ＝０のブロックとＰＹ＝１のブロックの２つのデータの論理積で求められる。例えば、Ｂ[０][１].ｙｚ[２][０]の６計算ノード１１の状態はＢ[０][１].ｙｚ[０][０]とＢ[１][１].ｙｚ[１][０]の一回の論理積で算出できる。なお、Ｙ＝４、Ｙ＝３の座標のデータについては０と決まっており、Ｙ＝４、Ｙ＝３の座標のデータを算出する必要はない。
【００８２】
同様に、ＰＹ＝３のブロックのデータは、Ｙ方向に４ノード連続した空きノードの情報なので、ＰＹ＝０のブロックとＰＹ＝２のブロックの２つのデータの論理積で求められる。例えば、Ｂ[０][２].ｙｚ[３][０]の６計算ノード１１の状態はＢ[０][２].ｙｚ[０][０]とＢ[１][２].ｙｚ[２][０]の一回の論理積で算出できる。同様に、ＰＹ＝４のブロックのデータはＹ方向に５ノード連続した空きノードの情報なので、ＰＹ＝０のブロックとＰＹ＝３のブロックの２つのデータの論理積で求められる。例えば、Ｂ[０][３].ｙｚ[４][０]の６計算ノード１１の状態はＢ[０][３].ｙｚ[０][０]とＢ[１][３].ｙｚ[３][０]の一回の論理積で算出できる。
【００８３】
Ｚ方向１ノード連続のＹ方向探索処理で重要な点は、探索部４３は６計算ノード１１の連続空きノード数探索処理を一回の論理積演算で実行できることである。また、Ｚ方向１ノード連続のＹ方向探索処理で重要なもう１つの点は、Ｙ方向の連続ノード数が増えても論理積演算回数が増えないことである。これに対して、通常の方法でＹ方向に５ノード連続した空きノード数を求める場合４回の論理積演算を行う必要がある。また、Ｚ方向１ノード連続のＹ方向探索処理で重要なもう１つの点は、Ｙ方向の連続ノード数が２以上のデータについては無駄な演算を行わないことである。
【００８４】
Ｚ方向１ノード連続のＹ方向探索処理によりＺ方向１ノード連続のブロック５１の作成が完了すると、探索部４３は、図１０Ｂに示したＺ方向２ノード連続のブロック５２を作成するＺ方向２ノード連続のＹ方向探索処理を行う。図１４は、Ｚ方向２ノード連続のＹ方向探索処理を説明するための図である。探索部４３は、ＰＺ＝０のブロック５１内のデータを元にＰＺ＝１（Ｚ方向に２ノード連続）かつＰＹ＝０(Ｙ方向に１ノード連続)〜ＰＹ＝４（Ｙ方向に５ノード連続）の情報を順番に算出していく。図１３で示した処理と同様に、探索部４３は６計算ノード１１の連続空きノード数探索処理を一回の論理積で算出できる。
【００８５】
ＰＹ＝０のブロックのデータは、Ｚ方向に２ノード連続かつＹ方向に１ノード連続した空きノードの情報なので、ＰＺ＝０のブロック内のＰＹ＝０のブロックの２つのデータの論理積で求められる。例えば、Ｂ[４][２].ｙｚ[０][１]の６計算ノード１１の状態はＢ[４][２].ｙｚ[０][０]とＢ[４][３].ｙｚ[０][０]の一回の論理積で算出できる。なお、ＰＺ＝１のブロック５２のデータはＺ方向に２ノード連続した空きノード情報なので、Ｚ＝３の座標のデータは０と決まっており、Ｚ＝３の座標のデータを算出する必要はない。図１４では斜線掛け表示したＢ[０][３].ｙｚ[０][１]〜Ｂ[４][３].ｙｚ[０][１]が演算が必要ないデータとなる。
【００８６】
ＰＹ＝１のブロックのデータは、Ｚ方向に２ノード連続かつＹ方向に２ノード連続した空きノードの情報なので、ＰＺ＝０のブロック内のＰＹ＝１のブロックの２つのデータの論理積で求められる。例えば、Ｂ[３][１].ｙｚ[１][１]の６計算ノード１１の状態はＢ[３][１].ｙｚ[１][０]とＢ[３][２].ｙｚ[１][０]の一回の論理積で算出できる。なお、Ｚ方向に２ノード連続した空きノード情報なので、Ｚ＝３の座標のデータは０と決まっており、さらにＹ方向に２ノード連続した空きノード情報なので、Ｙ＝４の座標のデータも０と決まっており、これらのデータを算出する必要はない。図１４では、斜線掛け表示したＢ[０][３].ｙｚ[１][１]〜Ｂ[４][３].ｙｚ[１][１]、Ｂ[４][０].ｙｚ[１][１]、Ｂ[４][１].ｙｚ[１][１]、Ｂ[４][２].ｙｚ[１][１]が演算が必要ないデータとなる。
【００８７】
ＰＹ＝２〜ＰＹ＝４のブロックのデータも同様に算出される。Ｚ方向２ノード連続のＹ方向探索処理で重要な点は、図１３で示した処理と同様に、探索部４３は６計算ノード１１の連続空きノード数探索処理を一回の論理積演算で実行できることである。また、Ｚ方向２ノード連続のＹ方向探索処理でもう１つ重要な点は、Ｚ方向の連続ノード数およびＹ方向の連続ノード数が増えても論理積演算回数が増えないことである。これに対して、通常の方法でＺ方向に２ノード連続かつＹ方向に５ノード連続した空きノード数を求める場合８回の論理積演算を行う必要がある。また、Ｚ方向２ノード連続のＹ方向探索処理で重要なもう１つの点は、Ｚ方向、Ｙ方向の連続ノード数が２以上のデータについては無駄な演算を行わないことである。
【００８８】
Ｚ方向２ノード連続のＹ方向探索処理が完了すると、探索部４３は、Ｚ方向３ノード連続のＹ方向探索処理及びＺ方向４ノード連続のＹ方向探索処理を同様の方法で行う。そして、全ブロックの算出が終わると、探索部４３は、最後に各ＸＹＺ座標から連続Ｘサイズを求める処理を行い、結果を探索データ記憶部４２に書き込む。ここで、各ＸＹＺ座標から連続Ｘサイズを求める処理は、当該Ｘ座標から連続するＯＮ状態（ビットが１の状態）のビット数を数える処理になる。
【００８９】
そこで、Ｘ方向に６４個の計算ノード１１が並ぶ場合を例として、６４ビット内の任意の位置から連続したＯＮビット数を求める探索部４３の処理について説明する。通常の探索処理では、１ビットを順番に左(又は右)シフトして対象の６４ビットとの論理積演算を繰り返すため、最大６４回の条件判定が必要になる。一方、探索部４３は、図１５に示すデータ構造及び図１６に示すビット数テーブル４８を用いて条件判定回数を減らす。
【００９０】
図１５は、６４ビット内の連続ＯＮビット数探索処理用データ構造の一例を示す図である。図１５に示すように、共用体ｃｃは、６４ビットデータｃｃ.ａａとしても８個の８ビットデータｃｃ.ｂｂ[０]〜ｃｃ.ｂｂ[７]としても使用される。探索部４３は、始めに探索対象の６４ビットデータを任意の探索位置が左端（図１５の６３ビット位置）になる様にｃｃ.ａａに代入する。そして、探索部４３は、このデータの左端から８ビットずつ切出して（ｃｃ.ｂｂ[７]〜ｃｃ.ｂｂ[０])、図１６のビット数テーブル４８を参照することにより直接８ビット内の連続ＯＮビット数を求める処理を８回繰返す。ここで重要なのは、各８ビット内の連続ＯＮビット数が８未満になった時点で処理を終了させることが出来る点である。
【００９１】
次に、探索部４３による探索処理のフローについて説明する。図１７は、探索部４３による探索処理のフローを示すフローチャートである。図１７に示すように、探索部４３は、図１０Ａ〜図１０Ｄに示した階層型データを作成するために、Ｚ１のＹ方向探索処理とＺｎのＹ方向探索処理を行う（ステップＳ３１〜ステップＳ３２）。ここで、Ｚ１のＹ方向探索処理とは、Ｚ方向１ノード連続のＹ方向探索処理であり、ＺｎのＹ方向探索処理とは、Ｚ方向２ノード連続のＹ方向探索処理〜Ｚ方向４ノード連続のＹ方向探索処理である。
【００９２】
そして、探索部４３は、ＺをＺｍａｘ−１で初期化する（ステップＳ３３）。ここで、Ｚｍａｘは、Ｚ方向の計算ノードの数である。そして、探索部４３は、Ｚが０以上であるか否かを判定し（ステップＳ３４）、Ｚが０以上でない場合には、処理を終了する。
【００９３】
一方、Ｚが０以上である場合には、探索部４３は、ＹをＹｍａｘ−１で初期化する（ステップＳ３５）。そして、探索部４３は、Ｙが０以上であるか否かを判定し（ステップＳ３６）、Ｙが０以上である場合には、仮想Ｘ軸用にＸｍａｘの２倍でＸを初期化し、ビット位置を示す変数ＸＢを１で初期化する（ステップＳ３７）。そして、探索部４３は、Ｘが０以上であるか否かを判定し（ステップＳ３８）、Ｘが０以上である場合には、Ｘ方向に連続空きノードを探索するＸ方向探索処理（Ｘ，Ｙ，Ｚ，ＸＢ）を行う（ステップＳ３９）。
【００９４】
そして、探索部４３は、Ｘを１減らし、ＸＢを左に１ビットシフトする（ステップＳ４０）。そして、探索部４３は、ステップＳ３８に戻って、Ｘ方向の座標が１つ小さい計算ノード１１を起点とするＸ方向探索処理（Ｘ，Ｙ，Ｚ，ＸＢ）を行う。
【００９５】
一方、Ｘが０以上でない場合（ステップＳ３８、Ｎｏ）には、探索部４３は、Ｙを１減らし（ステップＳ４１）、ステップＳ３６に戻って次のＹを処理する。また、Ｙが０以上でない場合（ステップＳ３６、Ｎｏ）には、探索部４３は、Ｚを１減らし（ステップＳ４２）、ステップＳ３４に戻って次のＺ面を処理する。
【００９６】
このように、探索部４３は、階層型データ構造を用いて連続空きノードを探索することによって、条件判定の数を減らすことができる。
【００９７】
次に、Ｚ１のＹ方向探索処理のフローについて説明する。図１８は、Ｚ１のＹ方向探索処理のフローを示すフローチャートである。図１８に示すように、探索部４３は、ＰＹを１で初期化する（ステップＳ５１）。そして、探索部４３は、ＰＹがＹｍａｘより小さいか否かを判定し（ステップＳ５２）、ＰＹがＹｍａｘより小さくない場合には、全てのＰＹについて処理が終了した場合なので、探索処理を終了する。
【００９８】
一方、ＰＹがＹｍａｘより小さい場合には、Ｚを０で初期化し（ステップＳ５３）、ＺがＺｍａｘより小さいか否かを判定する（ステップＳ５４）。その結果、ＺがＺｍａｘより小さい場合には、Ｙを０で初期化し（ステップＳ５５）、ＹがＹｍａｘ−ＰＹより小さいか否かを判定する（ステップＳ５６）。なお、ＹがＹｍａｘ−ＰＹより小さいか否かを判定するのは、図１３に斜線掛けで示した部分はデータの算出が不要であるためである。
【００９９】
その結果、ＹがＹｍａｘ−ＰＹより小さい場合には、探索部４３は、図１３に示した処理を行う。すなわち、探索部４３は、Ｂ[Ｙ][Ｚ].ｙｚ[ＰＹ][０]＝Ｂ[Ｙ][Ｚ].ｙｚ[０][０]＆Ｂ[Ｙ＋１][Ｚ].ｙｚ[ＰＹ−１][０]の演算を行う（ステップＳ５７）。そして、探索部４３は、Ｙを１増加し（ステップＳ５８）、ステップＳ５６に戻って、次のＹについて処理を行う。
【０１００】
一方、ＹがＹｍａｘ−ＰＹより小さくない場合（ステップＳ５６、Ｎｏ）には、探索部４３は、Ｚを１増加し（ステップＳ５９）、ステップＳ５４に戻って、次のＺについて処理を行う。また、ＺがＺｍａｘより小さくない場合（ステップＳ５４、Ｎｏ）には、探索部４３は、ＰＹを１増加し（ステップＳ６０）、ステップＳ５２に戻って次のＰＹを処理する。
【０１０１】
このように、探索部４３は、Ｚ１のＹ方向探索処理を行うことによって、図１０Ａに示したブロック５１のデータを算出することができる。
【０１０２】
次に、ＺｎのＹ方向探索処理のフローについて説明する。図１９は、ＺｎのＹ方向探索処理のフローを示すフローチャートである。図１９に示すように、探索部４３は、ＰＺを１で初期化する（ステップＳ７１）。そして、探索部４３は、ＰＺがＺｍａｘより小さいか否かを判定し（ステップＳ７２）、ＰＺがＺｍａｘより小さくない場合には、全てのＰＺについて処理が終了した場合なので、探索処理を終了する。
【０１０３】
一方、ＰＺがＺｍａｘより小さい場合には、探索部４３は、ＰＹを０で初期化する（ステップＳ７３）。そして、探索部４３は、ＰＹがＹｍａｘより小さいか否かを判定し（ステップＳ７４）、ＰＹがＹｍａｘより小さい場合には、Ｚを０で初期化し（ステップＳ７５）、ＺがＺｍａｘ−ＰＺより小さいか否かを判定する（ステップＳ７６）。その結果、ＺがＺｍａｘ−ＰＺより小さい場合には、Ｙを０で初期化し（ステップＳ７７）、ＹがＹｍａｘ−ＰＹより小さいか否かを判定する（ステップＳ７８）。なお、ＺがＺｍａｘ−ＰＺより小さいか否か、及び、ＹがＹｍａｘ−ＰＹより小さいか否かを判定するのは、図１４に斜線掛けで示した部分はデータの算出が不要であるためである。
【０１０４】
そして、ＹがＹｍａｘ−ＰＹより小さい場合には、探索部４３は、図１４に示した処理を行う。すなわち、探索部４３は、Ｂ[Ｙ][Ｚ].ｙｚ[ＰＹ][ＰＺ]＝Ｂ[Ｙ][Ｚ].ｙｚ[ＰＹ][ＰＺ−１]＆Ｂ[Ｙ][Ｚ＋１].ｙｚ[ＰＹ][ＰＺ−１]の演算を行う（ステップＳ７９）。そして、探索部４３は、Ｙを１増加し（ステップＳ８０）、ステップＳ７８に戻って、次のＹについて処理を行う。
【０１０５】
一方、ＹがＹｍａｘ−ＰＹより小さくない場合（ステップＳ７８、Ｎｏ）には、探索部４３は、Ｚを１増加し（ステップＳ８１）、ステップＳ７６に戻って、次のＺについて処理を行う。また、ＺがＺｍａｘ−ＰＺより小さくない場合（ステップＳ７６、Ｎｏ）には、探索部４３は、ＰＹを１増加し（ステップＳ８２）、ステップＳ７４に戻って次のＰＹを処理する。また、ＰＹがＹｍａｘより小さくない場合（ステップＳ７４、Ｎｏ）には、探索部４３は、ＰＺを１増加し（ステップＳ８３）、ステップＳ７２に戻って次のＰＺを処理する。
【０１０６】
このように、探索部４３は、ＺｎのＹ方向探索処理を行うことによって、図１０Ｂ〜図１０Ｄに示したブロック５２〜５４のデータを算出することができる。
【０１０７】
次に、Ｘ方向探索処理（Ｘ，Ｙ，Ｚ，ＸＢ）のフローについて説明する。図２０は、Ｘ方向探索処理（Ｘ，Ｙ，Ｚ，ＸＢ）のフローを示すフローチャートである。図２０に示すように、探索部４３は、Ｂ[Ｙ][Ｚ].ｙｚ[０][０]＆ＸＢが０でないか否かを判定する（ステップＳ９１）。ここで、ＸＢは、Ｘ方向の連続空きノードを探索する先頭のビット位置を示しているので、この判定で、探索部４３は、先頭の計算ノード１１が空きであるか否かを判定している。
【０１０８】
その結果、先頭の計算ノード１１が空きでない場合には、探索部４３は、処理を終了する。このとき、図１１に示した探索データの連続空きノード数ｆ及び連続Ｘサイズｇの値は、初期化で設定される０となる。
【０１０９】
そして、探索部４３は、ＰＹをＹｍａｘ−１−Ｙで初期化する（ステップＳ９２）。ここで、Ｙｍａｘ−１−Ｙで初期化する理由は、図１１に示した斜線掛け部分の算出は不要であるためである。
【０１１０】
そして、探索部４３は、ＰＹが０以上であるか否かを判定し（ステップＳ９３）、０以上でない場合には、処理を終了する。一方、ＰＹが０以上である場合には、ＰＺをＺｍａｘ−１−Ｚで初期化する（ステップＳ９４）。ここで、Ｚｍａｘ−１−Ｚで初期化する理由は、図１１に示した斜線掛け部分の算出は不要であるためである。
【０１１１】
そして、探索部４３は、ＰＺが０以上であるか否かを判定し（ステップＳ９５）、０以上である場合には、ＣＢにＢ[Ｙ][Ｚ].ｙｚ[ＰＹ][ＰＺ]をセットする（ステップＳ９６）。すなわち、探索部４３は、図１０Ａ〜図１０Ｄに示したＸ０〜Ｘ５のうち、ＰＺ、ＰＹ、Ｚ、Ｙで指定されるＸ０〜Ｘ５をＣＢにセットする。
【０１１２】
そして、探索部４３は、ＣＢ＆ＸＢが０でないか否かを判定する（ステップＳ９７）。ここで、ＸＢは、Ｘ方向の連続空きノードを探索する先頭のビット位置を示しているので、この判定で、探索部４３は、先頭の連続空きノードの情報が空きであるか否かを判定している。
【０１１３】
その結果、先頭の連続空きノードの情報が空きである場合には、探索部４３は、連続ＯＮビット数探索処理（ＣＢ，Ｘ）をＣＢに対してＸを先頭として行い、連続ＯＮビット数すなわち連続Ｘサイズをｇにセットする（ステップＳ９８）。そして、探索部４３は、連続ＹサイズＴ[Ｘ][Ｙ][Ｚ].ｙｚｘ［ＰＹ＋Ｙ］[ＰＺ＋Ｚ].ｈ及び連続ＺサイズＴ[Ｘ][Ｙ][Ｚ].ｙｚｘ［ＰＹ＋Ｙ］[ＰＺ＋Ｚ].ｉを探索データ記憶部４２から取り出して、ｈ及びｉにセットする（ステップＳ９９）。なお、探索データ記憶部４２の連続ＹサイズＴ[Ｘ][Ｙ][Ｚ].ｙｚｘ［ＰＹ＋Ｙ］[ＰＺ＋Ｚ].ｈ及び連続ＺサイズＴ[Ｘ][Ｙ][Ｚ].ｙｚｘ［ＰＹ＋Ｙ］[ＰＺ＋Ｚ].ｉは初期設定されている。
【０１１４】
そして、探索部４３は、連続ＸサイズｇがＸｍａｘ以下であるか否かを判定する（ステップＳ１００）。その結果、Ｘｍａｘ以下でない場合には、連続ＸサイズはＸ軸跨ぎの場合なので、探索部４３は、Ｘｍａｘと連続Ｙサイズｈと連続Ｚサイズｉとを掛けた値を連続空きノード数ｆとする（ステップＳ１０１）。一方、Ｘｍａｘ以下である場合には、連続ＸサイズはＸ軸跨ぎでない場合なので、探索部４３は、連続Ｘサイズｇと連続Ｙサイズｈと連続Ｚサイズｉとを掛けた値を連続空きノード数ｆとする（ステップＳ１０２）。
【０１１５】
そして、探索部４３は、探索データ記憶部４２の連続空きノード数Ｔ[Ｘ][Ｙ][Ｚ].ｙｚｘ[ＰＹ＋Ｙ][ＰＺ＋Ｚ].ｆに算出した連続空きノード数ｆを書き込む。また、探索部４３は、探索データ記憶部４２の連続ＸサイズＴ[Ｘ][Ｙ][Ｚ].ｙｚｘ[ＰＹ＋Ｙ][ＰＺ＋Ｚ].ｇに算出した連続Ｘサイズｇを書き込む（ステップＳ１０３）。そして、探索部４３は、ＰＺを１減らし（ステップＳ１０４）、ステップＳ９５に戻って、次のＰＺの処理を行う。
【０１１６】
一方、ＣＢ＆ＸＢが０である場合（ステップＳ９７、Ｎｏ）には、先頭の連続空きノードの情報が空きでない場合なので、探索部４３は、ステップＳ１０４に進む。また、ＰＺが０以上でない場合（ステップＳ９５、Ｎｏ）には、探索部４３は、ＰＹを１減らし（ステップＳ１０５）、ステップＳ９３に戻って、次のＰＹの処理を行う。
【０１１７】
このように、探索部４３は、Ｘ方向探索処理（Ｘ，Ｙ，Ｚ，ＸＢ）を行うことによって、階層型データから連続空きノード数及び連続Ｘサイズを算出することができる。
【０１１８】
次に、連続ＯＮビット数探索処理（ＣＢ，Ｘ）のフローについて説明する。図２１は、連続ＯＮビット数探索処理（ＣＢ，Ｘ）のフローを示すフローチャートである。図２１に示すように、探索部４３は、ＣＢを（６４−（（Ｘｍａｘ＊２）−Ｘ））左シフトしてｃｃ.ａａにセットし、ｇを０に初期化する（ステップＳ１１１）。ＣＢを（６４−（（Ｘｍａｘ＊２）−Ｘ））左シフトすることにより、探索部４３は、探索したいビット列をｃｃ.ａａの左につめてセットすることができる。
【０１１９】
そして、探索部４３は、最上位の８ビットｃｃ.ｂｂ[７]の連続ＯＮビット数をビット数テーブル４８（図１６に示したｃｂｃｔ[２５６]）から検索し、Ｊにセットする（ステップＳ１１２）。そして、探索部４３は、Ｊが８より小さいか否かを判定し（ステップＳ１１３）、Ｊが８より小さい場合には、８ビット連続ＯＮでない場合であるので、下位ビットを探索することなくステップＳ１２７に進む。
【０１２０】
一方、Ｊが８より小さくない場合には、８ビット連続ＯＮである場合であるので、探索部４３は、ｇにＪを加え、次の８ビットｃｃ.ｂｂ[６]の連続ＯＮビット数をビット数テーブル４８から検索し、Ｊにセットする（ステップＳ１１４）。そして、探索部４３は、Ｊが８より小さいか否かを判定し（ステップＳ１１５）、Ｊが８より小さい場合には、８ビット連続ＯＮでない場合であるので、下位ビットを探索することなくステップＳ１２７に進む。
【０１２１】
一方、Ｊが８より小さくない場合には、８ビット連続ＯＮである場合であるので、探索部４３は、ｇにＪを加え、次の８ビットｃｃ.ｂｂ[５]の連続ＯＮビット数をビット数テーブル４８から検索し、Ｊにセットする（ステップＳ１１６）。そして、探索部４３は、Ｊが８より小さいか否かを判定し（ステップＳ１１７）、Ｊが８より小さい場合には、８ビット連続ＯＮでない場合であるので、下位ビットを探索することなくステップＳ１２７に進む。
【０１２２】
一方、Ｊが８より小さくない場合には、８ビット連続ＯＮである場合であるので、探索部４３は、ｇにＪを加え、次の８ビットｃｃ.ｂｂ[４]の連続ＯＮビット数をビット数テーブル４８から検索し、Ｊにセットする（ステップＳ１１８）。そして、探索部４３は、Ｊが８より小さいか否かを判定し（ステップＳ１１９）、Ｊが８より小さい場合には、８ビット連続ＯＮでない場合であるので、下位ビットを探索することなくステップＳ１２７に進む。
【０１２３】
一方、Ｊが８より小さくない場合には、８ビット連続ＯＮである場合であるので、探索部４３は、ｇにＪを加え、次の８ビットｃｃ.ｂｂ[３]の連続ＯＮビット数をビット数テーブル４８から検索し、Ｊにセットする（ステップＳ１２０）。そして、探索部４３は、Ｊが８より小さいか否かを判定し（ステップＳ１２１）、Ｊが８より小さい場合には、８ビット連続ＯＮでない場合であるので、下位ビットを探索することなくステップＳ１２７に進む。
【０１２４】
一方、Ｊが８より小さくない場合には、８ビット連続ＯＮである場合であるので、探索部４３は、ｇにＪを加え、次の８ビットｃｃ.ｂｂ[２]の連続ＯＮビット数をビット数テーブル４８から検索し、Ｊにセットする（ステップＳ１２２）。そして、探索部４３は、Ｊが８より小さいか否かを判定し（ステップＳ１２３）、Ｊが８より小さい場合には、８ビット連続ＯＮでない場合であるので、下位ビットを探索することなくステップＳ１２７に進む。
【０１２５】
一方、Ｊが８より小さくない場合には、８ビット連続ＯＮである場合であるので、探索部４３は、ｇにＪを加え、次の８ビットｃｃ.ｂｂ[１]の連続ＯＮビット数をビット数テーブル４８から検索し、Ｊにセットする（ステップＳ１２４）。そして、探索部４３は、Ｊが８より小さいか否かを判定し（ステップＳ１２５）、Ｊが８より小さい場合には、８ビット連続ＯＮでない場合であるので、下位ビットを探索することなくステップＳ１２７に進む。
【０１２６】
一方、Ｊが８より小さくない場合には、８ビット連続ＯＮである場合であるので、探索部４３は、ｇにＪを加え、次の８ビットｃｃ.ｂｂ[０]の連続ＯＮビット数をビット数テーブル４８から検索し、Ｊにセットする（ステップＳ１２６）。
【０１２７】
そして、探索部４３は、ｇにＪを加え（ステップＳ１２７）、ｇを連続ＯＮビット数として返す。
【０１２８】
このように、ビット数テーブル４８を検索することによって、探索部４３は、高速に連続ＯＮビット数を算出することができる。また、図２１に示すフローチャートでは、通常使用するループカウンタによる条件判定を削減するためループ処理自体をなくしている。
【０１２９】
上述してきたように、実施例２では、探索部４３は、各計算ノードの空き状態を元に、図１０Ａ〜図１０Ｄに示す階層型データ構造でＺ方向及びＹ方向の連続空きノード数ごと及びＸＹＺ座標ごとに連続空きノード情報を作成し、階層型データ記憶部４１に書き込む。そして、探索部４３は、階層型データ記憶部４１に書き込んだ階層型データ構造のデータを用いて、Ｚ方向及びＹ方向の連続空きノード数ごと及びＸＹＺ座標ごとにＸ方向の連続空きノード数及び三次元の連続空きノード数を算出する。したがって、探索部４３は、空きノードの直方体の探索処理における条件判定の回数を減らすことができ、探索処理時間を短縮することができる。
【０１３０】
また、実施例２では、探索部４３は、階層型データ記憶部４１に書き込んだ階層型データ構造のデータを用いてＸ方向の連続空きノード数を探索する際に、ビット数テーブル４８を用いて連続ＯＮビット数を算出する。したがって、探索部４３は、空きノードの直方体の探索処理の処理時間をさらに短縮することができる。
【０１３１】
なお、実施例２では、Ｘ軸を跨いだ探索を行う場合について説明したが、本発明はこれに限定されるものではなく、Ｙ軸やＺ軸を跨いだ探索を行う場合にも同様に適用することができる。また、本発明は、Ｘ軸、Ｙ軸及びＺ軸の３方向に軸を跨いだ探索を行う場合やＸ軸、Ｙ軸及びＺ軸のいずれの方向にも軸を跨いだ探索を行わない場合などにも同様に適用することができる。
【０１３２】
また、実施例２では、三次元に計算ノードが配置される場合について説明したが、本発明はこれに限定されるものではなく、例えば二次元に計算ノードが配置される場合など三次元以外の任意の次元で計算ノードが配置される場合にも同様に適用することができる。
【０１３３】
また、実施例１及び２では、管理装置について説明したが、管理装置が有する構成をソフトウェアによって実現することで、同様の機能を有する管理プログラムを得ることができる。そこで、管理プログラムを実行するコンピュータについて説明する。
【０１３４】
図２２は、実施例に係る管理プログラムを実行するコンピュータのハードウェア構成を示す図である。図２２に示すように、コンピュータ９０は、メインメモリ９１と、ＣＰＵ（Central  Processing  Unit）９２と、ＬＡＮ（Local  Area  Network）インタフェース９３と、ＨＤＤ（Hard  Disk  Drive）９４とを有する。また、コンピュータ９０は、スーパーＩＯ（Input  Output）９５と、ＤＶＩ（Digital  Visual  Interface）９６と、ＯＤＤ（Optical  Disk  Drive）９７とを有する。
【０１３５】
メインメモリ９１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ９２は、メインメモリ９１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ９２は、メモリコントローラを有するチップセットを含む。
【０１３６】
ＬＡＮインタフェース９３は、コンピュータ９０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ９４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ９５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ９６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ９７は、ＤＶＤの読み書きを行う装置である。
【０１３７】
ＬＡＮインタフェース９３は、ＰＣＩエクスプレスによりＣＰＵ９２に接続され、ＨＤＤ９４及びＯＤＤ９７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ９２に接続される。スーパーＩＯ９５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ９２に接続される。
【０１３８】
そして、コンピュータ９０において実行される管理プログラムは、ＤＶＤに記憶され、ＯＤＤ９７によってＤＶＤから読み出されてコンピュータ９０にインストールされる。あるいは、管理プログラムは、ＬＡＮインタフェース９３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ９０にインストールされる。そして、インストールされた管理プログラムは、ＨＤＤ９４に記憶され、メインメモリ９１に読み出されてＣＰＵ９２によって実行される。
【符号の説明】
【０１３９】
１，２    並列計算機システム
１０，３０    並列計算機
１１    計算ノード
２０，４０    管理装置
２１    ノード状態記憶部
２２，４２    探索データ記憶部
２３，４３    探索部
２４    ソート部
２５    ソート結果記憶部
２６    受付部
２７    割当部
４１    階層型データ記憶部
４８    ビット数テーブル
５１〜５４    ブロック
６１    ブロック
９０    コンピュータ
９１    メインメモリ
９２    ＣＰＵ
９３    ＬＡＮインタフェース
９４    ＨＤＤ
９５    スーパーＩＯ
９６    ＤＶＩ
９７    ＯＤＤ
【図１】
2015041302.tif 000003
【図２】
2015041302.tif 000004
【図３】
2015041302.tif 000005
【図４】
2015041302.tif 000006
【図５】
2015041302.tif 000007
【図６】
2015041302.tif 000008
【図７】
2015041302.tif 000009
【図８】
2015041302.tif 000010
【図９】
2015041302.tif 000011
【図１０Ａ】
2015041302.tif 000012
【図１０Ｂ】
2015041302.tif 000013
【図１０Ｃ】
2015041302.tif 000014
【図１０Ｄ】
2015041302.tif 000015
【図１１】
2015041302.tif 000016
【図１２】
2015041302.tif 000017
【図１３】
2015041302.tif 000018
【図１４】
2015041302.tif 000019
【図１５】
2015041302.tif 000020
【図１６】
2015041302.tif 000021
【図１７】
2015041302.tif 000022
【図１８】
2015041302.tif 000023
【図１９】
2015041302.tif 000024
【図２０】
2015041302.tif 000025
【図２１】
2015041302.tif 000026
【図２２】
2015041302.tif 000027
【図２３Ａ】
2015041302.tif 000028
【図２３Ｂ】
2015041302.tif 000029
【図２３Ｃ】
2015041302.tif 000030
【図２４Ａ】
2015041302.tif 000031
【図２４Ｂ】
2015041302.tif 000032
【図２５Ａ】
2015041302.tif 000033
【図２５Ｂ】
2015041302.tif 000034
【図２６】
2015041302.tif 000035
【図２７】
2015041302.tif 000036
【図２８】
2015041302.tif 000037
【図２９】
2015041302.tif 000038
【図３０】
2015041302.tif 000039