(57)【特許請求の範囲】
【請求項１】
複数の計算ノードを備え、ジョブに対する演算処理を行なう計算機システムであって、
投入される複数のジョブのそれぞれに対して、前記複数の計算ノードがそれぞれ配置されるノード座標空間に当該ジョブのジョブ属性情報に対応するノード割り当て基準点を設定する基準点決定部と、
前記ノード座標空間において、前記ノード割り当て基準点からの通信時間の見積もり指標である遠隔度に基づき、前記ノード座標空間におけるジョブが未割当の計算ノードのうち、前記ノード割り当て基準点からの遠隔度が小さい計算ノードを優先して、計算ノードの集合である計算ノード集合として探索する、ノード集合探索部と
を備えることを特徴とする計算機システム。
【請求項２】
前記ノード集合探索部が、
前記ノード座標空間に割り当てられている実行中ジョブの位置を管理する実行中ジョブ位置情報に基づき、ジョブを非実行中の前記計算ノードによる計算ノード集合を探索することを特徴とする、請求項１記載の計算機システム。
【請求項３】
前記遠隔度が、前記ノード座標空間における複数のノード座標の間の遠隔度関数によって表されることを特徴とする、請求項１または２に記載の計算機システム。
【請求項４】
複数の計算ノードを備えジョブに対する演算処理を行なう計算機システムにおいて、前記ジョブを処理する処理方法であって、
投入される複数のジョブのそれぞれに対して、前記複数の計算ノードがそれぞれ配置されるノード座標空間に当該ジョブのジョブ属性情報に対応するノード割り当て基準点を設定する処理と、
前記ノード割り当て基準点からの通信時間の見積もり指標である遠隔度に基づき、前記ノード座標空間におけるジョブが未割当の計算ノードのうち、前記ノード割り当て基準点からの遠隔度が小さい計算ノードを優先して、計算ノードの集合である計算ノード集合として探索する処理と
を備えることを特徴とする処理方法。
【請求項５】
複数の計算ノードを備えジョブに対する演算処理を行なう計算機システムにおいて前記ジョブを処理させる機能をコンピュータに実行させるためのジョブ処理プログラムであって、
投入される複数のジョブのそれぞれに対して、前記複数の計算ノードがそれぞれ配置されるノード座標空間に当該ジョブのジョブ属性情報に対応するノード割り当て基準点を設定する処理と、
前記ノード割り当て基準点からの通信時間の見積もり指標である遠隔度に基づき、前記ノード座標空間におけるジョブが未割当の計算ノードのうち、前記ノード割り当て基準点からの遠隔度が小さい計算ノードを優先して、計算ノードの集合である計算ノード集合として探索する処理と
を前記コンピュータに実行させることを特徴とするジョブ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システム，処理方法及びジョブ処理プログラムに関する。
【背景技術】
【０００２】
大規模な並列計算機システムでは、通信ネットワークを、通信トラフィックが全く、ないしは、ほとんど干渉しない複数の部分に分けて使用する事が一般的である。
その理由の一つは、単一のジョブが複数のプロセッサを使用して並列処理を行ない、且つ、複数のジョブがシステム上で実行されている時に、ジョブ間で通信が干渉する事で各ジョブの性能が低下しないようにするためである。このため、各ジョブを、通信トラフィックが他の部分と干渉しない領域内でそれぞれ実行させる。
【０００３】
また他の理由として、なんらかの属性（例えば、利用者のＩＤや課金コード、実行優先度など）が共通のジョブの集合全体として、属性が異なる他のジョブ集合との通信の干渉が好ましくない場合がある。さらに、システム管理上の理由で、属性が共通のジョブを物理的に近いプロセッサ上に（例えば、同一筐体内や同一設置場所に）まとめる事が望ましい場合もある。
【０００４】
以下では、並列計算機システムにおいて、ジョブの配置単位となるプロセッサの集合をノードと呼ぶ。
大規模な並列計算機システムのネットワークは、ネットワーク上での「近さ」が複数の独立なパラメータで表される場合が多い。例えば、ファットツリー（Fat Tree）のように階層的な接続構成を持つネットワークでは、「第Ｎ層の接続での近さ」は、Ｎが異なれば相互に独立な「近さ」を表すパラメータと考える事ができる。なお、例えばFat Treeの場合では、各ノードから数えてＮ段目のスイッチ同士の間で互いに何段のスイッチを介して接続されているかが「第Ｎ層の接続での近さ」に相当する。
【０００５】
また、大規模な並列計算機システムのネットワークでの代表的ネットワークトポロジーである（さまざまな次元の）メッシュやトーラスでは、ネットワークのアドレス自体がＮ次元空間上の格子点（座標が全ての整数の点）として与えられる。異なる次元の座標は、当然ながら独立のパラメータである。
このようにアドレスがＮ次元空間上の格子点として与えられる並列計算機システムのネットワークとしては、他に３次元クロスバなどの別の例もある。
【０００６】
なお、「近さを表す複数の独立なパラメータ」と総合的に見た「近さ」との関係は、ネットワークトポロジーにより異なる。一般に、階層的な接続構成を持つネットワークでは、より上位の階層のパラメータで見て近い事（Fat Treeの場合、なるべく多く上位階層のスイッチが共通（従って、上位階層でのホップ数は０））が総合的な「近さ」に大きく寄与する。しかしながら、メッシュやトーラスでは、どの次元の座標での近さも総合的な近さへの寄与は、同じ程度になる。
【０００７】
ここで、ネットワークトポロジーにおけるメッシュとトーラスの相違点を説明する。
図３７（ａ），（ｂ）はネットワークトポロジーを例示する図であり、（ａ）はメッシュを、また、（ｂ）はトーラスをそれぞれ示す。
これらの２つのネットワークトポロジーにおいては、ノードの座標の付け方は共通であり、２つのノードを直接結ぶ通信リンクの存在条件だけが異なる。
【０００８】
トーラスでは、図３７（ｂ）に示すように、メッシュにある通信リンクに加えて、ある１つの次元での座標が各々最小値と最大値で、他の次元の座標が全て等しいノードを結ぶwrap around linkと呼ばれるリンクを有する。なお、特定の次元にはwrap around link があり、別の次元にはないシステムもある。以下、wrap around link がある次元が１つでもあればネットワーク全体はトーラスと呼ぶが、wrap around link がない次元についての処理は、メッシュの場合に準ずる。
【０００９】
また、以下に、システムのネットワークトポロジーが（N次元の）メッシュないしトーラスである事を、ネットワークアドレス、すなわち、N次元の座標を用いて表す。
２N個の整数L(1),..., L(N), M(1),...., M(N) （ただし1≦i≦N なる全ての整数についてL(i)<M(i)）を所与として、システムのノードの座標が、{{x(1),...x(N)}| 1≦i≦N かつL(i)≦x(i)≦M(i)} というN 個の整数の組で与えられるとする。
【００１０】
このとき、システム内のノード座標数はΠ(M(i)-L(i)+1)（全てのiについての(M(i)-L(i)+1) の積）になる。
そして、システムのネットワークトポロジーが（Ｎ次元）メッシュであるとは、２つのノード間を直接結ぶリンクが存在する条件が、各ノードの座標を(x(1), x(2),..., x(N)), (y(1), y(2),..., y(N)) として、座標の差の絶対値の集合{|x(i)-y(i)|1≦i≦N} の中で１つのi に対応する要素だけが1であり、他は0となる場合を指す。
【００１１】
一方、システムのネットワークトポロジーが（Ｎ次元）トーラスであるとは、２つのノード間を直接結ぶリンクが存在する条件が、各ノードの座標を(x(1), x(2),..., x(N)), (y(1), y(2),..., y(N)) として、座標の差の絶対値の集合{|x(i)-y(i)|1≦i≦N} の中で１つのi に対応する要素だけが1または(M(i)-L(i)) であり、他は0となる場合を指す。ここで、(M(i)-L(i)) になる箇所が前述したwrap around link である。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１２−２１５９３３号公報
【特許文献２】特開２００９−７５９５６号公報
【特許文献３】特開平８−１６４１０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
さて、属性の異なる複数のジョブをネットワーク上で区分された領域に割り当てる際には、種々の情報や条件を考慮する必要がある。具体的には、区別が必要な属性の数、各属性のジョブの集合が全体として必要とするノード数、そしてシステムのネットワーク構成上での近さないし遠さに関する条件を考慮して区分する事が求められる。すなわち、ネットワーク上においてジョブを属性毎にまとめて配置したいという課題がある。
【００１４】
この際、近さないし遠さに関する複数の独立なパラメータの組のなす空間を分割する方法が鍵になる。
ここで、各属性のジョブが必要なノード数に関して事前に情報がない場合には、システム内のノードを、ほぼ同じ大きさの連結性を持つ領域に分割する事が妥当と考えられる。また、各領域の形状が大きく異ならないようにするためには、領域内のある基準点からの近さないし遠さが、領域毎に大きく異ならないようにする事が望ましい。
【００１５】
なお、各属性のジョブが必要とするノード数に関して事前情報が与えられた場合、各属性のジョブに対して配分すべきノード数の比率を必要な精度で近似する「分母が共通な分数」の集合によって配分比率を表す事が考えられる。これにより、ノード全体を分母の数のほぼ同じ大きさの連結した領域に分けてから、分子の個数分、各々のジョブ属性に対して割り当てる事で初期値を設定するのである。
【００１６】
しかしながら、区別が必要な属性の数（あるいは適切な配分比率を表す分数の共通分母）は、システム構成やネットワークトポロジーとは独立のシステム要件に依存して様々に異なる。このため、区別が必要な属性の数により、システム構成やネットワークトポロジーに適した連結領域を、各領域内の基準点からの距離が大きくは異ならないように設定する事は、例えば、ネットワークトポロジーを大規模システムで一般的であるＮ次元のトーラス、ないしＮ次元のメッシュに限定したとしても容易ではない。
【００１７】
例えば５次元のメッシュあるいはトーラスにおいて、異なる２０個の属性値の基準点を「なるべく基準点相互の距離を大きくして配置する」方法と、属性値が５０個、あるいは１００個の場合に「なるべく基準点相互の距離を大きくして配置する」方法は、各々全く異なり、どの場合についても、明らかとは言えない。
さらに、ジョブが投入される時にはそのジョブが必要とする大きさおよび特定の配置形状を持つ領域を割り当て、終了時には回収する事を繰り返す中で、フラグメンテーションをできるだけ抑えながら、属性値が同じジョブを近くに配置し続ける手順は、例えば予め割り当て範囲を完全に固定したとしても、明らかではない。
【００１８】
特に、システム規模が大きい時には、システム内のノード数に探索時間が比例する処理手順は採用できない。基準点近くに探索範囲を制限しても、基準点の数が比較的少数の場合は特に、システム内のノード数に比例する処理手順が採用できない事情は変わらないのである。
従って、従来においては、ジョブをネットワーク上の領域に割り振る際には、例えば空いている領域に順次ジョブを割り振り、これにより、属性毎にジョブをまとめて配置することができない。
【００１９】
１つの側面では、本発明は、ジョブをネットワーク上の領域に効率的に割り当てることができるようにすることを目的とする。
【課題を解決するための手段】
【００２０】
このため、この計算機システムは、複数の計算ノードを備え、ジョブに対する演算処理を行なう計算機システムであって、投入される複数のジョブのそれぞれに対して、前記複数の計算ノードがそれぞれ配置されるノード座標空間に当該ジョブのジョブ属性情報に対応するノード割り当て基準点を設定する基準点決定部と、前記ノード座標空間において、前記ノード割り当て基準点からの通信時間の見積もり指標である遠隔度に基づき、前記ノード座標空間におけるジョブが未割当の計算ノードのうち、前記ノード割り当て基準点からの遠隔度が小さい計算ノードを優先して、計算ノードの集合である計算ノード集合として探索する、ノード集合探索部とを備える。
【発明の効果】
【００２１】
一実施形態によれば、属性の異なるジョブを、ネットワーク上の領域に効率的に割り当てることができる
【図面の簡単な説明】
【００２２】
【図１】実施形態の一例としての並列計算機システムの構成を示す図である。
【図２】実施形態の一例としての並列計算機システムのジョブスケジューラの機能構成を示す図である。
【図３】ハミルトン路を例示する図である。
【図４】（ａ），（ｂ），（ｃ）はハミルトン路の２次元断面の種類を示す図である。
【図５】（ａ），（ｂ），（ｃ）はｋ次元ハミルトン路の生成手法を説明する図である。
【図６】実施形態の一例としての並列計算機システムの割り当て候補ノード集合探索部によるジョブの割り当て方法を示す図である。
【図７】実施形態の一例としての並列計算機システムの割り当て候補ノード集合探索部によるジョブの割り当て方法を示す図である。
【図８】実施形態の一例としての並列計算機システムの割り当て候補ノード集合探索部によるジョブの割り当て方法を示す図である。
【図９】実施形態の一例としての並列計算機システムの割り当て候補ノード集合探索部によるジョブの割り当て方法を示す図である。
【図１０】基準点の配置を次元Ｎや属性数mがより小さい場合に帰着させる手法を説明する図である。
【図１１】基準点の配置を次元Ｎや属性数mがより小さい場合に帰着させる手法を説明する図である。
【図１２】実施形態の一例としての並列計算機システムにおけるジョブ管理構造体を例示する図である。
【図１３】実施形態の一例としての並列計算機システムにおける実行中ジョブ管理情報を例示する図である。
【図１４】（ａ），（ｂ），（ｃ）は実施形態の一例としての並列計算機システムにおけるハッシュ情報を説明するための図である。
【図１５】実施形態の一例としての並列計算機システムにおけるハッシュ表を用いた空き領域の探索方法を説明するフローチャートである。
【図１６】実施形態の一例としての並列計算機システムにおけるハッシュ表を用いた空き領域の探索方法を説明するフローチャートである。
【図１７】実施形態の一例としての並列計算機システムにおけるハッシュ表を用いた空き領域の探索方法を説明するフローチャートである。
【図１８】実施形態の一例としての並列計算機システムにおける探索の開始点を説明するための図である。
【図１９】実施形態の一例としての並列計算機システムにおける探索の基準点からの空き領域の探索方法を説明するフローチャートである。
【図２０】第１実施例の並列計算機システムの基準点決定部による基準点割り当て処理を説明するフローチャートである。
【図２１】第１実施例の並列計算機システムの基準点決定部による基準点割り当て処理を説明するフローチャートである。
【図２２】第１実施例の並列計算機システムの基準点決定部による基準点割り当て処理を説明するフローチャートである。
【図２３】第１実施例の並列計算機システムの基準点決定部による基準点割り当て処理を説明するフローチャートである。
【図２４】第１実施例の並列計算機システムの基準点決定部による基準点割り当て処理を説明するフローチャートである。
【図２５】第１実施例の並列計算機システムの基準点決定部による基準点割り当て処理を説明するフローチャートである。
【図２６】（ａ），（ｂ），（ｃ）は実施形態の一例としての並列計算機システムにおけるグラフG(V,E)の作成手法を説明するための図である。
【図２７】第１実施例としての並列計算機システムの割り当て候補ノード集合探索部による割り当て候補ノードの探索処理を説明するフローチャートである。
【図２８】第１実施例としての並列計算機システムの割り当て候補ノード集合探索部による割り当て候補ノードの探索処理を説明するフローチャートである。
【図２９】第２実施例の並列計算機システムの基準点決定部の処理を説明するフローチャートである。
【図３０】第２実施例としての並列計算機システムの割り当て候補ノード集合探索部による割り当て候補ノードの探索処理を説明するフローチャートである。
【図３１】第３実施例の並列計算機システムのネットワークトポロジーを例示する図である。
【図３２】第３実施例の並列計算機システムの基準点決定部の処理を説明するフローチャートである。
【図３３】第３実施例の並列計算機システムの基準点決定部の処理を説明するフローチャートである。
【図３４】第３実施例の並列計算機システムの基準点決定部の処理を説明するフローチャートである。
【図３５】第３実施例の並列計算機システムの基準点決定部の処理を説明するフローチャートである。
【図３６】第３実施例の一例としての並列計算機システムの割り当て候補ノード集合探索部による処理を説明するフローチャートである。
【図３７】（ａ），（ｂ）はネットワークトポロジーを例示する図である。
【発明を実施するための形態】
【００２３】
以下、図面を参照して本計算機システム，処理方法及びジョブ処理プログラム実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形（実施形態及び各変形例を組み合わせる等）して実施することができる。又、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００２４】
［Ｉ］構成
図１は実施形態の一例としての並列計算機システム１の構成を示す図である。
並列計算機システム１は、図１に示すように、複数の計算ノード２００がネットワーク２０を介して相互に通信可能に接続され、これにより相互結合網が構成されている。また、ネットワーク２０には、ジョブスケジューラノード１００が接続されている。
【００２５】
ネットワーク２０は通信回線であり、例えば、ＬＡＮ（Local Area Network）や光通信路である。
計算ノード２００は情報処理装置であり、互いに同様の構成をそなえる。各計算ノード２００は、図１に示すように、それぞれ、ＣＰＵ（Central Processing Unit）２０１，メモリ２０２およびＮＩＣ（Network Interface Card）２０３を備える。
【００２６】
ＮＩＣ２０３は計算ノード２００をネットワーク２０に接続するネットワークアダプタであり、ネットワーク２０を介して他の計算ノード２００やジョブスケジューラノード１００，図示しない他の情報処理装置等との間でデータの授受を実現する。ＮＩＣ２０３は、例えば、ＬＡＮインタフェースである。
メモリ２０２はＲＯＭ（Read Only Memory）及びＲＡＭ（Random Access Memory）を含む記憶装置である。メモリ２０２のＲＯＭには、各種演算に係るソフトウェアプログラムやこのプログラム用のデータ類が書き込まれている。メモリ２０２上のソフトウェアプログラムは、ＣＰＵ２０１に適宜読み込まれて実行される。又、メモリ２０２のＲＡＭは、一次記憶メモリあるいはワーキングメモリとして利用される。
【００２７】
ＣＰＵ２０１は、種々の制御や演算を行なう処理装置であり、メモリ２０２に格納されたＯＳ（Operating System）やプログラムを実行することにより、種々の機能を実現する。すなわち、ＣＰＵ２０１は、ＮＩＣ２０３およびネットワーク２０を介して受信したデータに対して演算処理を行なう。また、ＣＰＵ２０１は、演算処理結果等のデータを他の計算ノード２００へ送信する必要がある場合に、そのデータをＮＩＣ２０３およびネットワーク２０を介して出力する。
【００２８】
本並列計算機システム１においては、各計算ノード２００がジョブの配置単位であるノードに相当する。以下、計算ノード２００を単にノードという場合がある。
ジョブスケジューラノード１００は、計算ノード２００に実行させるジョブを決定する。すなわち、計算ノード２００に対するジョブの割り当てを行なう。
ジョブスケジューラノード１００は、情報処理装置であり、ＣＰＵ１０１，メモリ１０２およびＮＩＣ１０３を備える。
【００２９】
ＮＩＣ１０３はジョブスケジューラノード１００をネットワーク２０に接続するネットワークアダプタであり、ネットワーク２０を介して計算ノード２００や図示しない他の情報処理装置等との間でデータの授受を実現する。ＮＩＣ１０３は、例えば、ＬＡＮインタフェースである。
メモリ１０２はＲＯＭ及びＲＡＭを含む記憶装置である。メモリ１０２のＲＯＭには、ジョブスケジューリングに係るソフトウェアプログラムやこのプログラム用のデータ類が書き込まれている。メモリ１０２上のソフトウェアプログラムは、ＣＰＵ１０１に適宜読み込まれて実行される。又、メモリ１０２のＲＡＭは、一次記憶メモリあるいはワーキングメモリとして利用される。
【００３０】
ＣＰＵ１０１は、種々の制御や演算を行なう処理装置であり、メモリ１０２に格納されたＯＳやプログラムを実行することにより、種々の機能を実現する。すなわち、ＣＰＵ１０１が、プログラム（ジョブ処理プログラム）を実行することにより、ジョブスケジューラ１０（図２参照）として機能する。
なお、このジョブスケジューラ１０としての機能を実現するためのプログラム（ジョブ処理プログラム）は、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００３１】
ジョブスケジューラ１０としての機能を実現する際には、内部記憶装置（本実施形態ではメモリ１０２のＲＡＭやＲＯＭ）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＣＰＵ１０１）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
図２は実施形態の一例としての並列計算機システム１のジョブスケジューラ１０の機能構成を示す図である。
【００３２】
ジョブスケジューラ１０は、図２に示すように、ノード間情報設定部１１，基準点決定部１２，割り当て候補ノード集合探索部１３および割り当て候補ノード制限部１４としての機能を備える。
ノード間情報設定部１１は、本並列計算機システム１における異なる２つのノード座標（例えばE,F）の「近さ（nearness）」あるいは「遠さ（farness）」を定める。
【００３３】
ノード間情報設定部１１は、２つのノード座標に対して、「遠さ関数（farness function）」あるいは「遠隔度関数」を定める。
遠隔度関数としては、例えば、Ｎ次元トーラスやＮ次元メッシュでのマンハッタン距離やユークリッド距離等の２つのノード座標の間の「距離関数」を使用できる。具体的な例については後述する。
【００３４】
なお、距離関数における三角不等式の条件は、本並列計算機システム１の実施には必ずしも必要ではない。そこで、以後、「距離関数」と呼ぶ代わりに「遠隔度関数」と呼ぶ。
遠隔度関数の実質的な意味は「通信時間の見積もり指標」であり、例えば、中継点の個数やホップ数や直近での通信時間の測定値などとしてもよく、これらの例は三角不等式を満たさない場合がある。
【００３５】
「遠隔度関数」を単調減少する１変数関数（例えば、逆数）と合成した関数を、「近さ関数（nearness function）」あるいは「近接度関数」と呼ぶ。「遠隔度関数」と「近接度関数」とは、どちらを使っても不等号の向きを逆にするだけで同様の処理ができるが、以下の説明では主に「遠隔度関数」を使う。
遠隔度関数は、単一のシステムに対して複数使い分けてもよい。例えば、システム内での配分比率を変更する際に、時刻別あるいは基準点別に遠隔度関数を変更してもよい。
【００３６】
ある時刻でのノード数の配分比を、基準点別に「遠隔度関数」を異なった定数を掛けてから「同じ遠隔度」になるように調整する。これは共通の「遠隔度関数」に対し基準点別に異なる遠隔度を取る事で調整する事と同じ意味になる。
領域の形状（より一般的には、あるトポロジーでのノード座標を、より単純なトポロジーでの座標の組で書く場合の座標の集合の関係S(1) = S(2)×S(3) ないしS(1) ⊂ S(2) × S(3)）に応じて、各部分座標を異なった重み付けで組み合わせて計算してもよい。
【００３７】
例えば、通常のマンハッタン距離は２点間の座標差の絶対値の和であるが、各次元に異なる係数を掛けてから和をとってもよい。
このように、ノード間情報設定部１１は、本並列計算機システム１を構成するネットワークトポロジーに含まれる各ノード位置（ノード座標）を、２つのノード座標間の遠隔度関数で表す。
【００３８】
基準点決定部１２は、投入されるジョブ毎に、各ジョブのジョブ属性情報（ジョブ属性値）に対応するノード割り当て基準点を設定する。
基準点決定部１２は、ｍ個の相違なるジョブ属性値{a(i)|1≦i≦m}の各々のa(i)に対し、「ノード割り当て基準点」となる特定のノード座標の集合c(i)を対応させる。
各属性値に対応するノード割り当て基準点に対しての遠隔度関数ないし近接度関数の値を入力として、後述する割り当て候補ノード集合探索部１３が機能する。
【００３９】
基準点決定部１２は各属性値を持つジョブの投入状況やシステムの動作状況に合わせて基準点を調整する機能を備える。すなわち、基準点の座標は時刻に対し固定とは限らないので、時刻を明示する際はc(i,t) のように表記するが、特定の１時点についての議論では、上記のように時刻変数を省略する。
基準点決定部１２は、以下に示すような初期配置決定部１２１としての機能を備える。
【００４０】
初期配置決定部１２１は、基準時刻（以下、「時刻０」）での、各属性値に対応する基準点の集合を定める。
初期配置決定部１２１は、各ジョブ属性値に対し、少なくとも１つの基準点を設定する。すなわち、c(i) は空集合ではない。
なお、各ジョブ属性値に対応する基準点は複数であってもよい。例えば、２つの基準点を設定し、２つの座標間のユークリッド距離を「遠隔度関数」として、「各基準点までの「遠隔度関数」の和が特定の値以下」という条件を使って、後述する割り当て候補ノード集合探索部１３の探索範囲を「各平面での断面が楕円になる領域」に限定してもよい。また、「ある基準点からの遠隔度関数が一定値以上で、別の基準点からの遠隔度関数が一定値以下」のように限定してもよい。
【００４１】
あるネットワークトポロジーT(1) での座標が、別の２つのネットワークトポロジーT(2), T(3)での座標の組み合わせと１対１に対応する時は、T(1) での初期配置をT(2) の座標とT(3) の座標の初期配置の組み合わせで表す事で、より単純なトポロジーT(2), T(3) の場合の初期配置設定機構の処理に還元する（帰着させる）。
T(1) での座標の集合をS(1) 、T(2) およびT(3) での座標の集合をS(2)およびS(3) とするとき、S(1) = S(2) × S(3) 、または、S(1) ⊂ S(2) × S(3)となる。
【００４２】
ここでS(2)×S(3）は、集合論の用語でのS(2) とS(3)との「直積（ベクトル）」を示す。
例えば、Fat Treeなども、ネットワーク２０を構成するスイッチ（図示省略）の階層を区分してこのように扱える。スイッチを使う間接網の場合には、同じスイッチに接続されている場合は等距離と見なせる。「遠隔度関数」としては、例えばFat Tree などの規則的な接続構成の場合、「通信時に通過するスイッチの数」を使用できる。スイッチ間の接続が不規則の場合は、各スイッチへの負荷集中のパターンが一様とは限らないため、実際の通信時間の測定値などを「遠隔度関数」として使用する必要性が高まる。
【００４３】
基準点決定部１２は、Ｎ次元メッシュおよびＮ次元トーラスに対しては、任意の整数m に対し、m個の基準点の初期配置の１つの設定手順をmに対する場合分けにより具体的に定める。
以下では、“^ ”は冪乗、“*” は乗法を表す記号とする。数学の一般的な慣例の通り、数に対しては“＋”は加法、“| |”は絶対値を表す記号とする。ただし、集合に対しては“| |”で要素数を表す記号とする。また、整数とは限らない実数に対し、“[ ]” を、その数を越えない最大の整数を表す記号とする。いわゆるガウスの記号である。さらに、例えば、“[x]”を関数として表す場合は、“floor(x)” と表記する。
【００４４】
mが１より大きい正の整数についてk^Nの形に書ける場合の配置を基準にして、その配置に対して出来るだけ基準点の間を遠く（２つの基準点間の遠隔度関数を大きく）するように点を規則的に追加あるいは取り除いて、最終的にm個の基準点を選ぶ。特に、取り除く方法としては、以下に示す手法を用いる。
基準点決定部１２は、k^N と書ける場合の基準点の配置を「頂点」、２つの基準点の間のリンクの集合を「辺」とする（グラフ理論の意味での）グラフで、ハミルトン路またはハミルトン閉路に沿って、一定間隔でk^N-m個の点を取り除く事で、m個の基準点を選ぶ。
【００４５】
一般にN次元のメッシュに対しハミルトン路があり、N次元のトーラスに対しハミルトン閉路がある事を利用する。
図３はハミルトン路を例示する図である。ハミルトン路に沿って等間隔でグラフの頂点を基準点の集合から除く事で、属性の数が正の整数の冪でない場合や、より小さい数の倍数の形に書けない（割って余りが出る）場合の基準点の数を調整する。
【００４６】
図４（ａ），（ｂ），（ｃ）はハミルトン路の２次元断面の種類を示す図である。図４（ａ）は２次元（断面）で、ある辺の頂点の数が偶数であり、始点と終点とがその辺の両端となる場合を示す。図４（ｂ）は２次元（断面）で、両方の辺が奇数の場合で、始点と終点とがどちらか一方の対角線の両端となる場合を示す。図４（ｃ）は２次元（断面）で、両方の辺が奇数であり、始点と終点とが一つの辺の両端となる場合を示す。
【００４７】
また、図５（ａ），（ｂ），（ｃ）はｋ次元ハミルトン路の生成手法を説明する図である。図５（ａ）においては、(k-2)番目と(k-1)番目の次元の辺の少なくとも一方とk番目の次元の辺が偶数である。図５（ｂ）においては、(k-2)番目と(k-1)番目の次元の両方が奇数でk番目の次元の辺が偶数である。また、図５（ｃ）においては、(k-2)番目，(k-1)番目及びk番目の３つの次元の辺が全て奇数である。
【００４８】
これらの図５（ａ），（ｂ），（ｃ）に示すように、(ｋ-2)次元ハミルトン路を(k-2)番目の座標軸と(k-1)番目の座標軸の成す２次元断面を１つ通過し終わるたびにk番目の座標軸方向に順次接続すると、最終的にｋ次元ハミルトン路になる。
特にs次元の単位立方体のハミルトン路（ハミルトン閉路でもある）については、s bit のGray コードと対応している事が利用できる。それ以外の場合、図４（ａ）〜（ｃ）および図５（ａ）〜（ｃ）に示すように、より低い次元のハミルトン路を順次接続する。これにより始点と終点とが１つの座標軸では一方が最小値、他方が最大値で、他の座標値は全て等しいハミルトン路が取れる。従ってトーラスの場合、始点と終点が異なる値を持つ座標軸のwrap around link を最後に使う事により、ハミルトン閉路が取れる。
【００４９】
別の方法として、m < 2^Nなら各次元の座標が最大または最小の点（以下、「隅」の点と呼ぶ）を全て基準点とする2^N場合の配置に対しては、上記の他に、２つの次元を組にした「断面」での４つの隅のうち２つを選ぶ、あるいは断面である長方形上に出来るだけ遠く３点を配置する手順を、以下に示す（手法１），（手法２）のいずれかと組み合わせる事もできる。
【００５０】
（手法１）「隅」の点を、「ある１つの座標の値が最大の点」と「ある１つの座標の値が最小の点」とに２分割する事で、Nがより小さい場合の処理に順次帰着する。
（手法２）N-2次元の直方体と2次元の直方体の「直積」としてN次元の直方体を表す事により、Nがより小さい場合の処理に順次帰着する。
また、一般に２より大きい正の整数nについてnまたはn+1の一方は素数でない事を利用し、mまたはm+1を因数分解して、各次元の座標範囲を分割し、Nがより小さい場合に順次帰着する事もできる。
【００５１】
ネットワーク２０が複数の部分ネットワークから構成されている場合は、属性値の数と部分ネットワーク数との大小関係によって、以下のいずれかとする。
属性値の数の方が多ければ、部分ネットワークに対し基準点を割り振って、各部分ネットワークでの基準点の配置に帰着する。一方、部分ネットワークの方が多ければ、複数のネットワークを属性値の数のグループにまとめ、グループ毎に共通する基準点を割り当てる。
【００５２】
どちらが多い場合についても、「属性値の数」と「部分ネットワークの数」の一方が他方の倍数ではない場合（整数除算の余りが0でない場合）を含めて、基準点の配置を均等化する。
割り当て候補ノード集合探索部１３は、ジョブ属性値a(i)を持つジョブが投入された際に、割り当てが必要なノードの集合が正の整数kに対し、k個の数値パラメータの組B= {b(1), b(2),..., b(k)}で規定される条件を必要とする時、Bで指定された条件および「ノード割り当て基準点」からの「遠隔度」に関する所定の条件を満たすノード集合（割り当て候補ノード集合）を探索する。
【００５３】
例えば、ネットワークトポロジーがN次元メッシュやN次元トーラスのシステムでk次元のメッシュ、ないしトーラス（kはN以下の整数）である部分ネットワークを持つ領域で実行するジョブを投入する際は、k次元の直方体の形状を「各次元の大きさ」によって指定する。
割り当て候補ノード集合探索部１３は、空き領域探索を基準点に近い空き領域から順に行なう事により、同じ属性のジョブを出来るだけ基準点の近くに保つ。
【００５４】
割り当て候補ノード集合探索部１３は、空き領域探索を基準点近くのジョブに隣接するように行なう。これにより、空き領域のフラグメンテーションを出来るだけ抑えると共に、探索処理の計算量がシステム内の全ノード数にではなくシステム内で実行中のジョブ数に比例するようにして、大規模システムでの計算量の増加を抑える。
図６〜図９は、それぞれ実施形態の一例としての並列計算機システム１の割り当て候補ノード集合探索部１３によるジョブの割り当て方法を示す図である。なお、図６および図７は、ネットワークトポロジーがメッシュの例を示す図であり、図８および図９は、ネットワークトポロジーがトーラスである例を示す。なお、これらの図中において、斜線の網がけがされた矩形が実行中のジョブを示しており、横線の網がけがされた矩形が新規に割り当てるジョブを示している。
【００５５】
ジョブスケジューラノード１００は、割り当て候補ノード集合探索部１３によって割り当てられた計算機ノード２００にジョブを実行させる。なお、計算機ノード２００にジョブを実行させる手法は既知であり、その説明は省略する。
割り当て候補ノード制限部１４は、図６及び図８に示すように、実行中ジョブから見て基準点との遠隔度が小さい方向に新規ジョブ用に指定された形状の空き領域がある場合、その領域に新規ジョブを割り当てる。
【００５６】
また、割り当て候補ノード制限部１４は、図７及び図９に示すように、実行中ジョブから見て基準点との遠隔度が小さい方向に新規ジョブ用に指定された形状の空き領域がない場合、実行中ジョブから見て基準との遠隔度が大きい空き領域で実行中ジョブに隣接する箇所に新規ジョブを割り当てる。
割り当て候補ノード制限部１４は、各属性値のジョブに割り当て可能とするノード集合を制限する。値別の割り当て候補ノード制限は、必要に応じて行なわれ、必ずしも実行する必要はない。この制限は、ノードの座標に関する連立不等式で与える。なお、ここでの不等式は等式の場合も含むものとする。
【００５７】
［ＩＩ］実施例
上述の如く構成された実施形態の一例としての並列計算機システム１におけるジョブスケジュール手法を詳細に説明する。
実施例の処理手順は、一般に以下に示す処理手順(P), (Q)のいずれか、あるいは組み合わせの特別な例をm の大きさに合わせて適用しているとみなす事ができる。
【００５８】
図１０および図１１はそれぞれ基準点の配置を次元Ｎや属性数mがより小さい場合に帰着させる手法を説明する図である。
図１０は基準点座標の集合を２組の座標群の直積に分解することにより、より小さい次元の場合に帰着する例を示す。
すなわち、座標を２組に分け、各組の次元の座標を各々p等分、q等分すると、全体の領域はp*q等分され、格子点の数は各次元で(p+1),(q+1)の時(p+1)*(q+1)になる。
【００５９】
図１１は基準点座標の集合を２組の１つ次元が小さい図形に分けて、より小さい次元の場合に帰着し、各々から点を除く事で属性数が、より少ない場合に帰着する例を示す。
例えば、３次元の場合、方体を構成するの８つ「隅」の点を２つの長方形の４つずつ「隅」の点に分けておく。例えば、高さ方向の座標値が同じもの同士に分ける。
そして、夫々の組の４つの格子点を３つ、あるいは２つの格子点で置き換える事により、
全体の点の数をある程度の点の配置の均等性を保ちながら減らす。
【００６０】
処理手順(P)は、図１０の原理に基づく（図１０はN=s=2として図示）。
処理手順(Q)は、図１１の原理に基づく（図１１はN=2として図示）。
例えば、後述する第１実施例の場合５の３（k^N<m<(k+1)^N)の場合）は、処理手順(P) でs=N,A(1)=A(2)=...A(N)=k+1とし、r= (k+1)^N-mとして、ハミルトン路に沿ってr個の点を取り除いている事に相当する。
【００６１】
第１実施例の場合５の１（m=2^N+1の場合）は、r=-1として、s=N,A(1)=A(2)=...A(N)=2とした場合に相当する。
第１実施例の場合４は、処理手順(Q)の再帰的適用に相当する。
第２実施例の場合５は、処理手順(P)でN=s=2として、mが素数でないならr=0,mが素数ならr=1とした場合に相当する。
【００６２】
［処理手順(P)］
処理手順(P)は以下の処理を備える。
（１）2以上N以下の任意の整数sに対し、ある整数rと、s個の２以上の整数A(1),..., A(s) を取って、次のように表せる事に注意する。何故なら、rを0から順次大きくしていけば、m+rをs個以上の素因数を持つ数に必ずできるからである。
【００６３】
m+r=A(1)*A(2)*...*A(s)
なお、mが十分大きければ、rを0から順次減らしてs個以上の素因数を持つ数を作れる場合もある。すなわち、rは負の数であってもよい。
（２）座標軸の集合をs個のグループG(f) (1≦f≦s) に分ける。
G(1) = {i(1), ....}, G(2) = {i(e),...}, G(s) = {..., i(N)} (1≦e≦N)
（３）全てのG(f) (1≦f≦s) に対して、それらの座標軸の組に対応する部分集合T(f) (1≦f≦s) から、各々A(f) 個の(1≦f≦s) の要素からなる部分集合U(f) (1≦f≦s) を選ぶ。
【００６４】
（４）m+r=A(1)*A(2)*...*A(s) 個の要素を持つ直積集合U(1)×...×U(s) からr が正の数ならr 個の点を除き、r が負の数なら|r| = -r 個の点を追加する。
［処理手順(Q)］
処理手順(Q)は、以下の処理を備える。
（１）座標軸g を固定し、対応する座標の集合をV(g)とし、g以外の座標軸に対応する座標の組からなる集合をW(g)として、全体の座標の集合Xと、直積集合V(g)×W(g)とを１対１に対応させる。すなわち、X=V(g)×W(g)と見なせる。
【００６５】
（２）V(g)の２つの共通部分のない２つの部分集合Z(g,1), Z(g,2)を取って、Z(g,1)×W(g), Z(g,2)×W(g) をXの共通部分のない２つの部分集合と１対１対応させる。すなわち、Z(g,1)×W(g) ⊂ X かつZ(g,2)×W(g) ⊂ X と見なせる。
（３）mを２つの正の整数の和としてm=m(1)+m(2)のように表しておき、Z(g,1)×W(g) からm(1)個、Z(g,2)×W(g) からm(2)個を各々定めて、その和集合を全体での基準点とする。
【００６６】
また、Z(g,1)×W(g) からm(1)個、Z(g,2)×W(g) からm(2)個の基準点を定める方法は、次の２つのどちらでもよい。
（方法１）上記処理手順(P)を適用する。
（方法２）|Z(g,1)|=|Z(g,2)| = 1とする事で次元を下げる、すなわち座標軸の数を１つ減らす事により、上記処理手順(Q) 自体を再帰的に適用する。
【００６７】
以下に示す複数の実施例において、各々の座標がE=(e(1),...e(N)) およびF=(f(1),...f(N)) である２つのプロセッサの座標の間の遠隔度として、２つのプロセッサ座標E,F間の距離関数（次の３種類の距離関数（a）〜（c）を含む）ないし、それらを各次元についての重み付け係数で一般化した関数を使用する。以下、一般化には明示的には言及しないものとする。
【００６８】
（a）ユークリッド距離は、各次元の座標の差の２乗の和の平方根で求められ、以下の式で表される。
sqrt((e(1)-f(1))^2+(e(2)-f(2))^2+ ... +(e(N)-f(N))^2)
また、重み付けによる一般化を行なう場合には、以下の式で表される。
sqrt(c(1)*(e(1)-f(1))^2+c(2)*(e(2)-f(2))^2+ ... +(c(N)*e(N)-f(N))^2)）
（b）マンハッタン距離は、各次元の座標の差の絶対値の和で求められ、以下の式で表される。
【００６９】
|e(1)-f(1)|+|e(2)-f(2)|+ ... +|e(N)-f(N)|)
また、重み付けによる一般化を行なう場合には、以下の式で表される。
d(1)*|e(1)-f(1)|+d(2)*|e(2)-f(2)|+ ... +d(N)*|e(N)-f(N)|)）
（c）チェビシェフ距離は、各次元の座標の差の絶対値の最大値で求められ、以下の式で表される。
【００７０】
max(|e(1)-f(1)|, |e(2)-f(2)|, ..., |e(N)-f(N)|)
なお、以下での記述も含め、maxは、複数の引数の中での最大値を表す関数とする。
また、重み付けによる一般化を行なう場合には、以下の式で表される。
max(d(1)*|e(1)-f(1)|, d(2)*|e(2)-f(2)|, ..., d(N)*|e(N)-f(N)|)）
また、以下ではジョブの１つの属性の取りうる値の集合をA で表す。以下では、
|A| = m > 1 
とする。これは、属性のとりうる値がm個である事を意味する。一般にA={a(1), a(2), ..., a(m)} となるが、以下では、簡単のためA={1, 2, ...., m} とする。こうしても処理の実質的な内容には違いがない。
【００７１】
なお、ネットワークトポロジーがトーラスの場合、wrap around linkを無視しない本来の距離では上記の各々の式での第i 次元の座標の差|e(i)-f(i)| の項を、第i座標の最大値M(i) と最小値L(i) として、
min((M(i)-L(i)+1-|e(i)-f(i)|), |e(i)-f(i)|)
により置き換える。以下での記述も含め、minは複数の引数の中での最小値を表す関数とする。
【００７２】
ただし、以下の実施例では、ネットワークトポロジーがトーラスの場合も、wrap around linkを無視したメッシュとしての距離を使用する場合もある。
（Ａ）第１実施例
本第１実施例では、ネットワークトポロジーがN次元メッシュあるいはN次元トーラスとする。
【００７３】
本第１実施例では、遠隔度関数として、マンハッタン距離、チェビシェフ距離およびユークリッド距離のいずれかを使用する。ただし、トーラスの場合も、これらの距離の定義でwrap around link の存在を無視している。
本第１実施例においては、基準点決定部１２は、mの値に関する次の条件に応じて、以下の（１）〜（８）に示すように場合分けして、基準点の集合を変更する。なお、場合５では、mまたはNがより小さい場合に順次帰着させて処理するものとする。
（１）場合１： m = 2^N
（２）場合２： m = 2^q かつN/2 ≦ q < N
（３）場合３： m < 2^(N/2)
（４）場合４： 2^(N/2)≦m<2^Nかつmは2の冪ではない。
（５）場合５： m > 2^N
（６）場合５の１： m = 2^N + 1
（７）場合５の２： あるk > 2 なる整数に対してm = k^N
（８）場合５の３： 上記以外
（１）場合１：m = 2^N
プロセッサの座標は、2N個の整数L(1),..., L(N), M(1),....M(N) （ただし1≦i≦N なる全ての整数iについてL(i)<M(i) ）として、{{x(1),...x(N)}| 1≦i≦N かつL(i)≦x(i)≦M(i)} で表す。
【００７４】
まず、基準点全体の集合Cは、以下のように定めておく。
C = {(x(1),...x(N))| 1≦i≦N なる全てのi について、x(i) = L(i) またはx(i) = M(i)}
Cの要素とAの要素とを、次のようにして１対１に対応させる。
まず、「N次元の単位立方体の頂点」がなす2^N個の点の集合Gを以下のように定める。
【００７５】
G = {(y(1),...y(N))| 1≦i≦N なる全てのiについて、y(i) = 0 またはy(i) = 1}
次に、Cの要素とGの要素とを、次のように１対１に対応させる。
(x(1),...x(N))←→(y(1),...y(N))
Cでx(i)=L(i) ならGでy(i)=0となり、Cでx(i)=M(i)ならGでy(i) = 1となる。
ここで、Gの要素の座標は、「0または1をN個、特定の順序に並べたもの」である。従って、座標を整数の２進数表記と見なすと、Gの要素は「0以上2^N-1以下の整数の集合」であるK = {0, 1, 2, ... 2^N-1} と１対１に対応する。さらにKの各要素kに1を加えると全てAの要素となり、Aの要素から1を引いたものは全てKの要素であるため、KとA とは１対１に対応する。
【００７６】
ここまでの対応を全て合成する事でCの要素とAの要素とが１対１に対応する。Aの要素（ジョブの属性値）a に対応する基準点の第i 番目の座標はa-1の２進数表示を利用して次のように計算する。ここで、記号“<<”はbit の左shift 演算を、また、記号“*” は乗算を、記号“&” はbitwise and 演算を、それぞれ表している。
A → C
a |→ L(i) + ((a-1) & (1<<(i-1))) * (M(i) - L(i))
以上のm=2^Nの場合の処理を、m≠2^Nの場合の処理のサブルーチンとしても利用するので、一般にn次元（n はN とは限らない）のメッシュあるいはトーラスのプロセッサの座標の集合に対して、以上の手順により2^n 個の点を定める方法に関連する記号を定めておく。
【００７７】
LB = {L(1), ... L(n)} : プロセッサ座標の各次元の座標の最小値の集合
MB = {M(1), ... M(n)} : プロセッサ座標の各次元の座標の最大値の集合
（ただし1≦i≦n なる全ての整数i でL(i)<M(i)）
XX(LB, MB, n) = {{x(1),...x(n)}| 1≦i≦n かつL(i)≦x(i)≦M(i)}
CC(LB, MB, n) = {(x(1),...x(n))| 1≦i≦n なる整数i について、x(i) = L(i) またはx(i) = M(i)}
GG(n) = {(y(1),...y(n))| 1≦i≦n なる整数i について、y(i) = 0 またはy(i) = 1}
上述のm = 2^N の場合の記号との対応は、C = CC(LB, MB, N), G = GG(N) である。
【００７８】
（２）場合２： m = 2^q かつN/2 ≦ q < N
m = 2^q であり、N - q = s とおくと、s は1以上の整数になり、2^N / m = (2^N / 2^q) = 2^s であり、s ≦ q となる。
全体のN次元座標の集合の要素を、q次元座標の集合の要素とs次元座標の集合の要素との組で表しておく。
【００７９】
XX(LB, MB, N) = {{x(1),...x(N)}| 1≦i≦n かつL(i)≦x(i)≦M(i)}
YYY(LB, MB, N, q) = {{x(1),...x(q)}| 1≦i≦q かつL(i)≦x(i)≦M(i)}
ZZZ(LB, MB, N, q) = {{x(q+1),...x(N)}| q+1≦i≦N かつL(i)≦x(i)≦M(i)}
すなわち、N次元座標の集合XX を、q次元座標の集合YYYとs次元座標の集合ZZZとの直積と見なす。
【００８０】
x∈XX(LB, MB, N)と、y∈YYY(LB, MB, N, q)とz∈ZZZ(LB, MB, N, q)との組(y, z) は、次のようにして１対１に対応する。
XX(LB, MB, N) → YYY(LB, MB, N, q) × ZZZ(LB, MB, N, q)
x |→ (y, z)
各次元の最小値、最大値の集合を次のように分割する。
【００８１】
LB = LBY ∪ LBZ
MB = MBY ∪ MBZ
ただし，LBY, LBZ, MBY, MBZ は以下のように定める。
LBY = {L(1), ... L(q)}
MBY = {M(1), ... M(q)}
LBZ = {L(q+1), ..., L(N)}
MBZ = {M(q+1), ..., M(N)}
s < q の場合は、次のようになる。
【００８２】
{(L(1), L(q+1)), (L(2), L(q+2)), ..., (L(s), L(q+s))}
{(M(1), M(q+1)), (M(2), M(q+2)), ..., (M(s), M(q+s))}
必要な基準点の数はm = |A| = 2^q = 2^N / 2^s なので、s個の「２つの座標軸の組」に対しては、２つの座標軸のどちらか一方の対角線上の頂点だけを座標とする事により、組み合わせの数が1/2^sとなり、丁度m個の基準点を得る。すなわち、次の２つの条件を組み合わせて、単位立方体G(N)の2^q個の要素を持つ部分集合H(q,s)を定め、H(q,s)に対応する点を基準点とする。
【００８３】
P(q,s) : 1≦i≦s なる整数i についてy(i)=0 かつy(i+q)=0 またはy(i)=1 かつy(i+q)=1
Q(q,s) : s+1≦j≦q なる整数j についてy(j) = 0 またはy(j) = 1
これらの２つの条件を満たす点の集合をH(q,s) とすると、
|H(q,s)| = 2^N/2^s = 2^(N-s) = 2^q = m
H(q,s) = {(y(1),...y(N))| P(q,s) かつQ(q,s)}
s = qの場合は、Q(q,s) の条件に意味がないので、P(q,q)だけを指定すると
|H(q,q)| = m
となる。
【００８４】
H(q,q) = {(y(1),...y(N))| P(q,q) }
単位立方体の各隅の点をメッシュないしトーラスの隅の点に前述した方法で対応させる。
どちらの場合も対応する基準点の第i座標は、次の３通りに場合分けした式で表される。
L(i) (1≦i≦s)
L(i) + ((a-1) & (1<<(i-1))) * (M(i) - L(i)) (s+1≦i≦q またはq+s+1≦i≦N)
M(i) (q+1≦i≦q+s)
（３）場合３： m < 2^(N/2) 
m = 2 の時、N次元単位立方体の中で「全ての次元の座標が0の点」と「全ての次元の座標が1の点」とを選ぶ。（条件よりN > 2 でもある）
次に、m > 2とする。m = (2^u)*t と書く。s = N - u とする。
【００８５】
全体のN次元座標の集合の要素を、u次元座標の集合の要素とs次元座標の集合の要素の組で表しておく。
XX(LB, MB, N) = {{x(1),...x(N)}| 1≦i≦n かつL(i)≦x(i)≦M(i)}
YYY(LB, MB, N, u) = {{x(1),...x(u)}| 1≦i≦u かつL(i)≦x(i)≦M(i)}
ZZZ(LB, MB, N, u) = {{x(u+1),...x(N)}| u+1≦i≦N かつL(i)≦x(i)≦M(i)}
なお、uが0の場合は、N=sであり、2^u=１になるので、ZZZがXXと一致しYYYは考えなくてよい。
【００８６】
u>0の時は、YYY(LB, MB, N, u) から2^u 個の座標をx(i)=L(i)またはx(i)=M(i)という条件で定める。
YYY(LB, MB, N, u) から2^u個の座標の組を取り、ZZZ(LB, MB, N, u) からはt個の座標の組をとって組み合わせた(y,z) の組の数は、丁度、(2^u) * t = m となる。YYY(LB, MB, N, u)からはu次元の単位立方体の頂点を取って、ZZZ(LB, MB, N, u)のt個の座標の組と組み合わせる事で基準点を定める。
【００８７】
以下に、ZZZ(LB, MB, N, u)からt個の座標の組を取り出す方法を示す。
s bitのGrayコード（Gray Code: 交番２進符号）は、定義により隣接するコード同士では1 bit しか変化しないため、第i番目のbit とs次元単位立方体の第i次元座標を対応させる事により、s bitの隣接するGrayコードを順次並べたものからs次元単位立方体の（隅の点を頂点とする）「ハミルトン閉路」（各頂点を１回だけ通るループ）が得られる。
【００８８】
なお、隣接するGray コードの値は、排他的論理和とビットシフトの反復計算で生成する事ができる。すなわち、１つ前のステップでの値をxとして、(x>>1)とxの排他的論理和をとればよい。ただし、Gray(k)はs bitの整数とするため、s bitより大きい整数での演算を使用する場合は、s bitより上の桁をマスクして消去する。
こうして得られたハミルトン閉路上にt個の点を、以下のように定める。2^sをtで割った商をvとする。初期値0として、次々に前ステップの値(x>>1)とxの排他的論理和を取って定めた第kステップの値を一般にGray(k) とする。そして、{0=Gray(0), Gray(v), Gray(2v), ..., Gray((t-2)v), Gray((t-1)v)} のt 個の値に対応するZZZ(LB, MB, N, u) = {{x(u+1),...x(N)}| u+1≦i≦N かつL(i)≦x(i)≦M(i)} の座標を選ぶ。
【００８９】
A の要素aに対し、a-1を2^uで割った余りをrem(a-1,2^u), tで割った余りをrem(a-1,t)として、対応する基準点は、次の式で求める。
L(i) + ((rem(a-1,2^u)) & (1<<(i-1))) * (M(i) - L(i)) (1≦i≦u)
L(i) + ((Gray(rem(a-1,t)*v)) & (1<<(i-1))) * (M(i) - L(i)) (u+1≦i≦N)
（４）場合４： 2^(N/2)≦m<2^Nかつmは2の冪ではない
N = 2の場合、条件からm = 3である。２点ずつ選んだfarnessを出来るだけ等しくなるようにするため、長方形の４辺を１つながりの曲線と見て、それを３等分する場合に最も近い分割となるようなノードの座標を任意に３つ選び、それらを基準点とする。
【００９０】
例えば、長方形の各頂点のノード座標を(L(1), L(2)), (L(1), M(2)), (M(1), L(2)), (M(1), M(2)) とする。
使用する遠隔度（farness）の種類により、処理を分ける。
（４−１）場合４の１：farness として、マンハッタン距離を使用する場合
N = 2
M(1)-L(1) = D(1), M(2)-L(2) = D(2) とするとき、長方形の辺の上のノードの１つを任意に定め、長方形の周囲を一方の方向に１周する１次元の座標を1 から2*(D(1)+D(2)-1) までの値を取るように定める。
【００９１】
CC = 2*(D(1)+D(2)-1) を3で割った商をqとし、余りをrとするとCC = 3q + rである。
このqにより基準点の１次元座標を1 , q+1, 2q+1 とする。q < (D(1)+D(2)-1) かつ(D(1)+D(2)-1) < 2q となる。
∴ L(1), L(2)のここでの１次元座標を1とすると、基準点の２次元座標は、次のように定められる。
q ≦ D(1) の場合、｛（L(1), L(2)) , (L(1)+q, L(2)), (M(1)-(2*q-(D(1)+D(2)-1)), M(2)) }
q > D(1) の場合、｛（L(1), L(2)) , (M(1), L(2)+q-D(1)), (M(1)-(2*q-(D(1)+D(2)-1)), M(2)) }
（４−２）場合４の２：farness として、チェビシェフ距離あるいはユークリッド距離を使用する場合
N = 2
M(1)-L(1) = D(1), M(2)-L(2) = D(2)として、D(1)とD(2)とのうち小さくない方(max((D(1), D(2))）の長さを持つ向かいあった（従って平行な）２辺について、一方の両端の
点、他方の中点に最も近い点を取る。
【００９２】
例えばD(2) ≦ D(1) の時、{ (L(1), L(2)), (M(1), L(2)), ([(L(1)+M(1))/2], M(2)) } の３点を基準点とする。
次に、N > 2とする。直方体の次元が１つ下の場合の設定方法に順次帰着させる。使用するfarnessについての条件により、最終的に帰着させる２次元の場合を上のように分けるが、１つ下の次元の場合に帰着させる手順は、farnessによらない。ただし、次のように、偶数か奇数かで場合を分ける。
【００９３】
mが偶数のとき、次のようにmを分割する。
m = m/2 + m/2
2^((N-1)/2)≦m/2<2^(N-1)かつm/2は2の冪ではない。(∵mは2の冪ではない）。
この場合、ある１つの座標軸の値を最小値、あるいは最大値に固定した２つのN-1次元の直方体２つに対して、m/2個ずつの基準点を定め、それらの和集合を取る事で、m個の基準点を定める。
【００９４】
mが奇数のときは、条件からm > 1である事に注意して、次のようにmを分割する。
m = (m-1)/2 + (m+1)/2
以下の両方が成り立つ。なお、(m-1)/2 と(m+1)/2と のうち一方は２の冪になるかも知れないが、２の冪になった場合には、基準点の定め方は既に述べられている（上記、場合２を参照）。
【００９５】
2^((N-1)/2)≦(m-1)/2<2^(N-1)
2^((N-1)/2)≦(m+1)/2<2^(N-1)
∴この場合も、ある１つの座標軸の値を最小値あるいは最大値に固定した２つのN-1次元の直方体２つに対して、その一方に(m-1)/2個、他方には(m+1)/2個の基準点を定め、和集合を取る事でm個の基準点を定める。
【００９６】
（５）場合５： m > 2^N
上述した場合１から場合４までの基準点の配置に対し、ノード座標全体の集合に対応するN次元直方体の「境界点」以外の部分（「内部」）にも基準点を追加する形で定める。
（６）場合５の１： m = 2^N + 1
m = 2^Nの場合の基準点の集合に対し、次の点を追加したものを基準点の集合とする。
【００９７】
([(L(1)+M(1))/2], [(L(2)+M(2))/2], ..., [(L(N)+M(N))/2])
（７）場合５の２： あるk > 2 なる整数に対してm = k^N
第i 次元の座標の値の部分集合CC(i) を以下のように定める。|CC(i)| = k である。
R(i) = (M(i)-L(i))/(k-1)
CC(i) = { L(i), [L(i)+((M(i)-L(i))/(k-1))], [L(i)+2*((M(i)-L(i))/(k-1))], ..., M(i) }
基準点の集合を以下のように定める。
【００９８】
C = {(c(1),c(2),...,c(N))| 1≦i≦N なる全ての整数iで、c(i) ∈ CC(i)}
（８）場合５の３： 上記以外
k^N < m < (k+1)^Nとなる整数をkとする（すなわち、k = [m^(1/N)] ）
(k+1)^N - m = q とおく。k > 1, k+1 > 2 である。
m = (k+1)^Nとした、上記の場合５の２でのk^N個の基準点の集合をBとする。Bから以下のようにしてq個の点を除いたものを基準点の集合とする。
【００９９】
グラフ理論の意味での「グラフ」G(V,E) を、頂点の集合と辺の集合を各々定義する事で定める。
頂点の集合V = {B に属する(k+1)^N 個の点}
辺の集合Eは、元のネットワークのリンクから、Bの点の間だけを結ぶ部分ネットワークに属するものだけを取り出し、かつ、その部分ネットワークにおいて隣接するBの点の間の複数のリンクを仮想的に１つのリンクと見なし、それらの仮想的リンクの集合として定める。言い換えると、ある１つの次元の座標だけが変化する次のような任意の点の列（あるいは対応するノードの列）に対し、Bの点１とBの点２の間に仮想的に１つのリンクがあると見なし、その仮想リンクの集合をEとする。
【０１００】
Bの点１、B以外の点１、B以外の点２、.., B以外の点ｎ、Bの点２
G(V,E)は、N次元メッシュまたはN次元トーラスのグラフなので、ハミルトン路（全ての頂点を一回だけ通る経路）がある。１つのハミルトン路を取り、出発点から順に通過する頂点をv(1), ..., v((k+1)^N)とする。
qと(k+1)^Nの最大公約数dと、a*q + b*(k+1)^N) = d となる整数a, bとをユークリッドの互除法によって求める。
【０１０１】
ハミルトン路内のq個の要素を持つ点集合を|a|間隔に取る。ここで、%% は、割算の余りを表す。
{v(|a| %% (k+1)^N), v(2*|a| %% (k+1)^N ),...,v(q*|a|) %% (k+1)^N}
この集合をBから取り除いた集合を基準点の集合Cとする。
割り当て候補ノード集合探索部１３は、各ジョブに対し、ある特定の属性値に対応する基準点からの遠隔度が小さい方から、他のジョブによって使用中のノードを含まない指定された形状の領域を探索する。遠隔度としては、マンハッタン距離、ユークリッド距離、チェビシェフ距離のどれかを使用する。
【０１０２】
割り当て候補ノード集合探索部１３は、実行待ちジョブ管理キュー１３１，実行中ジョブ管理情報１３２およびハッシュ情報１３３を用いる。
実行待ちジョブ管理キュー１３１は、実行待ちジョブ管理構造体１３１ａのキューであり、探索処理毎の入力を与える。
図１２は実施形態の一例としての並列計算機システム１におけるジョブ管理構造体１３１ａを例示する図である。
【０１０３】
実行待ちジョブ管理構造体１３１ａは、実行待ちのジョブに関する情報であり、図１２に示すように、ジョブを特定するジョブＩＤ（identification）に対して、利用者ＩＤ，ジョブ属性値および各次元の大きさを関連付けて構成されている。
図１２に示す例においては、ジョブ管理構造体１３１ａを表として示している。以下、ジョブ管理構造体１３１ａをジョブ管理制御表１３１ａという場合がある。
【０１０４】
利用者ＩＤはそのジョブの利用者を特定する情報であり、ジョブ属性値はジョブ属性を示す。各次元の大きさは、実行に必要なノード領域の各次元（第１〜第Ｎ次元）の大きさである。
実行中ジョブ管理情報１３２は、実行中のジョブに関する情報であり、実行中の各ジョブが使用しているノード座標の各次元の最小値と最大値を含む。
【０１０５】
図１３は実施形態の一例としての並列計算機システム１における実行中ジョブ管理情報１３２を例示する図である。
実行中ジョブ管理情報１３２は、図１３に示すように、ジョブＩＤに対して、利用者ＩＤ，ジョブ属性値，各次元の大きさ，各次元の最大値，各次元の最小値，および各次元の次ジョブを関連付けて構成されている。
【０１０６】
図１３に示す例においては、実行中ジョブ管理情報１３２を表として表している。以下、実行中ジョブ管理情報１３２を実行中ジョブ管理表１３２という場合がある。
各次元の最大値と各次元の最小値は、実行中の各ジョブが使用しているノード座標の各次元の最大値と最小値である。
各次元の次ジョブは、各次元での座標の最小値または最大値をキーとするハッシュ表１３３（図１４（ａ）〜（ｃ）を用いて後述）の「ハッシュバケツ」内の次ジョブへのポインタである。なお、最後のジョブでは空ポインタとなる。
【０１０７】
割り当て候補ノード集合探索部１３は、各ジョブについて、各基準点との遠隔度を表への登録時に計算する。そして、基準点毎の「特定の遠隔度以下のジョブだけを抜き出した表」に登録する処理と、各ジョブについて、個々の基準点との遠隔度を表のエントリに含める処理との少なくとも一方を行なう。
また、各ジョブの属性での指定と特定の基準点から遠隔度が所定値以下であるという条件での指定が一致しない場合は、特定の属性値のジョブだけを抜き出した実行中ジョブ管理表１３２にも登録する処理を行なう。
【０１０８】
なお、各ジョブについて、同じ属性のジョブへのポインタを少なくとも１つ含め、そのポインタを次々に辿ると同じ属性のジョブを全て辿れるようにしても良い。ただし、当該処理は属性別の表を持つ事と実質的に同等である。
ハッシュ情報１３３は、ノード座標空間に割り当てられている実行中ジョブの位置（ノード座標位置）を管理する実行中ジョブ位置情報である。このハッシュ情報１３３は、割り当て候補ノード集合探索部１３による探索処理の鍵となる情報であり、実行中ジョブ管理情報１３２とともに管理・維持される。
【０１０９】
ハッシュ情報１３３は、ノード座標空間における、実行中ジョブの各次元のノード座標値をキーとする（N個の）ハッシュの情報である。以下、ハッシュ情報１３３をハッシュ表１３３という場合がある。
図１４（ａ），（ｂ），（ｃ）は実施形態の一例としての並列計算機システム１におけるハッシュ情報１３３を説明するための図である。図１４（ａ）はメッシュを例示する図であり、図１４（ｂ）は図１４（ａ）に示すメッシュの縦座標の次元に関する実行中ジョブのハッシュ表を示す図、図１４（ｃ）は図１４（ａ）に示すメッシュの横座標の次元に関する実行中ジョブのハッシュ表を示す図である。
【０１１０】
ハッシュ情報１３３は、ノード座標空間に割り当てられている実行中ジョブの位置（ノード座標位置）を、ノード座標空間を構成する次元軸毎に対応させて管理する。
例えば、図１４（ａ）に示すメッシュのノード座標空間は、横座標方向（横座標の次元）と縦座標方向（縦座標の次元）とを備える。このようなノード座標空間においては、ハッシュ情報１３３は、横座標の次元に関するハッシュ表１３３ａ（図１４（ｃ）参照）と縦座標の次元に関するハッシュ表１３３ｂ（図１４（ｂ）参照）とをそなえる。
【０１１１】
そして、ハッシュ情報１３３には、各ジョブについて、各次元でのノード座標の最小値および最大値に対応するエントリに、実行中ジョブ管理表１３２内で、そのジョブに対応するエントリへのポインタを格納する。
図１４（ａ）に示すにおいては、９（横軸）×７（縦軸）のメッシュ座標にjob1〜job5で示される５つのジョブが割り当てられている。例えば、この図１４（ａ）において、job4の四隅（頂点）の座標（ノード座標）は（１，４），（４，４），（１，６），（４，６）である。従って、このjob4のノード座標の横軸側の最大値は４であり最小値は１である。
【０１１２】
この場合に、図１４（ｃ）に示すように、横座標の次元のハッシュ表１３３ａにおいては、座標値１に対応するエントリと座標値４に対応するエントリとのそれぞれにjob4が関連付けられる。同様に、このjob4のノード座標の縦軸側の最大値は６であり最小値は４であるので、図１４（ｂ）に示すように、縦座標の次元のハッシュ表１３３ｂにおいては、座標値４に対応するエントリと座標値６に対応するエントリとのそれぞれにjob4が関連付けられる。
【０１１３】
これらの関連付け、すなわちハッシュ表１３３への登録は、具体的には、座標の最小値および最大値をキーにして、対応するジョブのジョブ管理構造体１３１ａへのポインタが登録される。また、このジョブ管理構造体１３１ａへのポインタの登録は、当該ジョブの実行開始時に登録される。
なお、ハッシュ値の衝突は、「ハッシュバケツ法」で処理する。すなわち、同一キーに対応する構造体をポインタで連結する。
【０１１４】
第i 次元に対応するハッシュ情報１３３のエントリ数はM(i)-L(i)+1である。なお、原理上は座標値そのものをキーとするのではなく、dを２以上の整数として座標値をd で割った商をキーにしてもよく、その場合のハッシュエントリ数は(M(i)-L(i)+1)/d以上の最小の整数に減少するが、キーの衝突率が大きくなるというトレードオフがある。
キーの衝突はハッシュバケツ法、すなわち、ポインタ格納領域をキューイングする方法で処理する。
【０１１５】
実施形態の一例としての並列計算機システム１におけるハッシュ表１３３を用いた空き領域の探索方法を、図１５〜図１７に示すフローチャートに従って説明する。
ただし、当該説明を行なう前に、以下に用語の定義を示す。
以下では「ノード」の座標の位置関係だけを問題にする場合が多いため、幾何学的なイメージで考える方が分かり易いという事情により、座標だけに着目する際は「ノード」の代わりに「点」と呼ぶ。
【０１１６】
「N次元直方体の「隅」の点、ないし「頂点」」とは、その直方体の中で、各次元の座標が最小値ないし最大値の点である。
まず、N次元メッシュないしトーラスのネットワークで以下のパラメータを持つ２つの（N次元）直方体領域が交差する（共通部分を持つ）条件に注意しておく。
最小値形状パラメータ最大値
((x(1), ..., x(N)) (s(1), ..., s(N)) ((X(1), ...(X(N))
((y(1), ..., y(N)) (t(1), ..., t(N)) ((Y(1), ...(Y(N))
ここで、∀ i ∈ {1, 2, .., N} X(i) = x(i)+s(i)-1 かつY(i) = y(i)+t(i)-1
２つの領域が交差する条件は、少なくとも１つのi ∈ {1, 2, .., N} で[x(i), X(i)] と[y(i), Y(i)]とが共通部分を持つ事である。すなわち、x(i) とy(i) の大小関係で場合を分けて、以下のように表される。
【０１１７】
(x(i) ≦ y(i) かつy(i) ≦ X(i)) または(y(i) < x(i) かつx(i) ≦ Y(i) )
ある点の近くには所要の形状パラメータを持つ直方体領域がない事が判明した場合、探索の基準にする点を変更しながら探索する。以下、「探索の基準点」は、このように探索中に変更される点を指し、ジョブの属性値に対応して定める基準点とは一般には異なる事に注意する。ジョブの属性値に対応する基準点は「探索の基準点」の初期値となる。
【０１１８】
探索の基準点p の近くで特定の形状パラメータshape を持つ「空き領域」は、「形状パラメータshape を持ち、点p の近くにある「既に他のジョブが使用中のノード領域」のいずれとも交差しない領域」に他ならない。
従って、１つの直方体領域をとって、その領域が近くのジョブが使用中の直方体領域すべてと交差しない事が確認できれば探索は終了する。前述の記号で((x(1), ..., x(N))、(s(1), ..., s(N))、((X(1), ...(X(N))を固定し、((y(1), ..., y(N)) 、(t(1), ..., t(N))、((Y(1), ...(Y(N)) を「近くのジョブ」が占める領域として動かすとき、すべてのi ∈ {1, 2, .., N} で[x(i), X(i)] と[y(i), Y(i)] が交差しない条件は、上記の条件式が不成立という意味である。従って、x(i) とy(i) の大小関係で場合を分ければ以下のように表される。
【０１１９】
(x(i) ≦ y(i) かつX(i) < y(i)) または(y(i) < x(i) かつY(i) < x(i))
ここでx(i) < X(i) 、y(i) < Y(i) である事に注意すると、上の条件は次のように簡単化される。
(X(i) < y(i)) または(Y(i) < x(i))
この条件は、形状パラメータと頂点の座標を使って言い換える事ができる。例えば、一方の領域の形状パラメータを使った条件の形で書けば、以下のようになる。
【０１２０】
(x(i)+s(i)) < y(i)) または(Y(i) < X(i)-s(i))
さらに書き換えると以下の形でも表すことができる。
(s(i) < y(i)-(xi)) または(s(i) < X(i)-Y(i))
結局、各座標軸で「「頂点の座標の差の絶対値」が、形状パラメータより大きければよい」事になる。
【０１２１】
「空き領域」の探索処理では「空き領域の候補」を順次選んで、各座標の差が形状パラメータの差の範囲内にある「実行中のジョブが使用中の領域」に対し、すべての座標軸について上記の条件が成立するか否かを確認する。確認の結果、上記の条件が成立すれば探索が成功した事になる。
ある時点での「探索範囲」は、「「探索の基準点」との各次元の座標の差の絶対値が形状パラメータ以下の直方体」とする。「探索範囲」に「実行中ジョブが使用中の領域」が１つ以上ある場合、それらの領域の頂点を（現時点の探索範囲内に所定の形状パラメータを持つ「空き領域」が見つからなかった場合の）次の段階の「探索の基準点」候補の集合に追加していく事で探索範囲を広げる。「探索の基準点」は「それまでの探索処理で「探索の基準点」として未使用の頂点」から、「ジョブ属性によって定まる基準点」の座標との「遠隔度」が小さい方から使用する。
【０１２２】
次に、「空き領域の候補」の選び方について説明する。
「「探索の基準点」の近くにある形状パラメータshape を持つ領域」は、「探索範囲」の内側で探せば十分な事は上述の内容から明らかなので、この範囲内にある「実行中のジョブが使用している領域」と交差しない空き領域であればよい。なお、この範囲内に実行中のジョブが使用している領域がない場合、基準点を含む形状パラメータshape の領域が、どれでも探索の条件を満たす。以下では少なくとも１つ、「探索範囲」内に実行中のジョブが使用している領域があるとする。
【０１２３】
以下、２点が「接する」とは、２点の座標のうち座標の差の絶対値が１の座標軸が１つ、残りの座標軸の座標がすべて等しい事という意味で使用する。また、「（あるN次元直方体領域の）N-k 次元境界」とは、あるk 個の座標軸について値が異なり、残りのN-k 個の座標軸については、値がすべて各座標軸の最小値ないし最大値のどちらか一方という共通の値を持つ点からなる部分領域という意味で使用する。例えば、３次元直方体の場合の２次元境界は、側面上の点になる。
【０１２４】
ある点と「N-k 次元境界」とが「接する」とは、「N-k 次元境界」に属する点が共通の値を持つk個の座標軸で、「N-k 次元境界」に属する点との座標の差の絶対値が１であるという意味で使う。また、２つの直方体領域が「接する」とは、各々のN-1 次元境界のうち少なくとも一方の１点が、他方のN-1次元境界に「接する」という意味で使用する。
本実施例での空き領域の候補の選び方は、「指定した形状パラメータの空き領域が、前述した探索範囲内に何らかの方法で見つかっている」状態で「空き領域の頂点と探索範囲内のジョブが使用中の領域のN-1 次元境界との関係」について、以下のような考え方で制約条件を付加する事に基づいている。
【０１２５】
見つかっている空き領域を１つあるいは複数の座標軸の方向に平行移動させて、実行中ジョブが使用中の直方体領域の少なくとも１つに「接する」ように動かす。平行移動を繰り返して、少なくとも１つの実行中ジョブが使用中の直方体領域の頂点のうち、少なくとも１つの頂点に「接する」位置まで空き領域の頂点の１つを動かした状態を考える事ができる。
【０１２６】
本実施例の空き領域候補選択は、上述のように「使用中の他の領域の頂点に少なくとも１つの頂点が接する位置に移動された「空き領域」を探す」という方針に基づく。言い換えれば、「実行中ジョブが使用中の直方体領域の頂点」の少なくとも１つと「接する」位置に頂点がある指定の形状パラメータを持つ直方体領域を「空き領域」の候補とする。
以下では「実行中ジョブが使用中の直方体領域の頂点のうち少なくとも１つ」に「接する」位置まで「空き領域（候補）」の頂点の１つを動かした状態を想定したときの「空き領域（候補）」の頂点を、「探索の開始点」と呼ぶ。
【０１２７】
図１８は実施形態の一例としての並列計算機システム１における探索の開始点を説明するための図である。
この図１８に示す例においては、「ジョブ属性によって定まる基準点」をｐとして、ある時点の「探索の基準点」としてｃを選んで、「探索の開始点」をｓとした状態を示している。
【０１２８】
本実施例のメッシュネットワークの場合、「各次元の座標の最小値以上、最大値以下」という範囲に「空き領域」の候補の頂点の座標および他ジョブが使用中の領域の頂点の座標が制約される。
なお、トーラスネットワークの場合は、wrap around link があるため、探索の際に各次元座標の最小値、最大値で制約されない代わりに、「座標の差の絶対値」を「各次元でのネットワークの大きさ（＝座標の最大値−座標の最小値＋１）を法（除数）とする「絶対最小剰余」」で置き換える必要がある。
【０１２９】
言い換えると次元iのネットワークの大きさをd(i)=M(i)-L(i)+1として、メッシュでは|x(i)-y(i)| を取るところで、min(|x(i)-y(i)|, d(i)-|x(i)-y(i)|) を使う事になる。
図１５〜図１７に示すフローチャート中の記号の意味は以下の通りである。
p = (p(1), ..., p(N))：ジョブ属性値に対応する基準点
Shape = (s(1), ..., s(N))：形状パラメータ
CL = (C(1)=(c(1,1), c(1,2), ..., c(1,N)),C(2)=(c(2,1),c(2,2) ...,c(2,N)), ...)：探索の基準点リスト
CL_NEXT：探索範囲を外側に広げる際に追加する基準点のリスト
CL(job)：各ジョブjobの「頂点」を「pに近い順」に整列したリスト
NL(job)：CL(job)のうち、p に近い側の半分の点からなるリスト
NL：CLのうち、p に近い側の半分の点からなるリスト
FL(job)：CL(job)のうち、p から遠い側の半分の点からなるリスト
FL：CLのうち、p から遠い側の半分の点からなるリスト
SL：「探索の開始点」リスト。「ジョブの頂点cに隣接するjobの外部の点のリスト」で初期化して使用する。
【０１３０】
s∈SL , s=(x(1), x(2), ...., x(N)) が実行中のジョブjの頂点v = (y(1), y(2),..., y(N)) に「接する」座標軸をi(1),..., i(k) とすると、|x(i(1))-y(i(1))| = |x(i(2))-y(i(2))| = ... = |x(i(k))-y(i(k))| = 1
R：「探索範囲」ある点q との各次元の座標の差の絶対値が形状パラメータ以下の直方体領域
RL：「探索範囲リスト」ある点w に対応して次のように定める「探索範囲」のリスト
探索の基準点がジョブ属性値に対応するとき、R はネットワークの各次元の座標の最大値、最小値によっても制約される。探索の基準点がジョブに接する点の場合、R は隣接するジョブの座標によっても制約される。
【０１３１】
JL_ALL：使用中の「探索の基準点」を頂点に持つジョブのリスト
Job：探索基準点の頂点を含むジョブ
図１５のステップＳ１において、割り当て候補ノード集合探索部１３は、実行待ちジョブ管理キュー１３１の先頭からジョブ管理制御表を取り出す。
ステップＳ２において、割り当て候補ノード集合探索部１３は、取り出したジョブ管理制御表１３１ａに含まれるジョブ属性値から、対応する基準点pを求める。
【０１３２】
図１５のステップＳ３において、CLに(p)を設定することで探索基準点リストの初期化を行なった後、図１５のステップＳ４において、CLが空であるか否かを確認する。
確認の結果、CLが空である場合には（ステップＳ４のＹＥＳルート参照）、処理を終了する。一方、CLが空でない場合には（ステップＳ４のＮＯルート参照）、ステップＳ５に移行する。
【０１３３】
図１５のステップＳ５において、割り当て候補ノード集合探索部１３は、CLから１つの探索基準点cを取り出し、図１５のステップＳ６において、探索基準点cに対する探索範囲リストを作成する。なお、このステップＳ６の処理の詳細は、図１６を用いて後述する。
図１５のステップＳ７において、割り当て候補ノード集合探索部１３は、RLに探索範囲リストを設定する。
【０１３４】
図１５のステップＳ８において、RLが空であるか否かを確認する。確認の結果、RLが空である場合には（ステップＳ８のＹＥＳルート参照）、ステップＳ４に移行する。一方、RLが空でない場合には（ステップＳ８のＮＯルート参照）、ステップＳ９に移行する。
図１５のステップＳ９において、割り当て候補ノード集合探索部１３は、RLから探索範囲リストを取り出してRに設定する。なお、RLからは取り出した探索範囲リストを取り除く。
【０１３５】
図１５のステップＳ１０において、割り当て候補ノード集合探索部１３は、探索範囲R内の空き領域を探索する。なお、このステップＳ１０の処理の詳細は、図１７を用いて後述する。
図１５のステップＳ１１において、割り当て候補ノード集合探索部１３は、所定形状パラメータの空き領域が見つかったか否かを確認する。所定形状パラメータの空き領域が見つからない場合には（ステップＳ１１のＮＯルート参照）、ステップＳ８に戻る。また、所定形状パラメータの空き領域が見つかった場合には（ステップＳ１１のＹＥＳルート参照）、処理を終了する。
【０１３６】
次に、上述した図１５のフローチャートのステップＳ６における処理を、図１６に示すフローチャート（ステップＴ１〜Ｔ９）に従って説明する。
探索基準点ｃに対する探索範囲リストを作成するために、図１６のステップＴ１において、割り当て候補ノード集合探索部１３は、cがジョブ属性値に対応する基準点pであるか否かを確認する。
【０１３７】
cがジョブ属性値に対応する基準点pである場合には（ステップＴ１のＹＥＳルート参照）、図１６のステップＴ２において、Rに{(x(1),...x(N))|max(L(i), p(i)-s(i)) ≦ x(i)かつx(i)≦ min(M(i), p(i)+s(i)を設定する。その後、図１６のステップＴ３においてRLに{R}を設定して、処理を終了する。
一方、cがジョブ属性値に対応する基準点pでない場合には（ステップＴ１のＮＯルート参照）、図１６のステップＴ４において、割り当て候補ノード集合探索部１３は、cに隣接するジョブ外の点のリストをSLに設定する。
【０１３８】
図１６のステップＴ５において、SLが空であるか否かを確認する。確認の結果、SLが空である場合には（ステップＴ５のＹＥＳルート参照）、処理を終了する。一方、SLが空でない場合には（ステップＴ５のＮＯルート参照）、図１６のステップＴ６において、割り当て候補ノード集合探索部１３は、SLから探索範囲リストを取り出してs=(z(1),..., z(N))に設定する。なお、SLからは取り出した探索範囲リストを取り除く。
【０１３９】
図１６のステップＴ７において、割り当て候補ノード集合探索部１３は、sに接するジョブの頂点をt=(t(1),..., t(N))に設定する。
図１６のステップＴ８において、Rに{(x(1),..., x(N))|max(|x(i)-L(i)|,|x(i)-M(i)|,|x(i)-t(i)|)≦s(i)}を設定した後、図１６のステップＴ９において、RLにRを追加し、ステップＴ５に戻る。
【０１４０】
次に、上述した図１５のフローチャートのステップＳ１０における処理を、図１７に示すフローチャート（ステップＵ１〜Ｕ１３）に従って説明する。
探索範囲Rの探索方法を成するために、図１７のステップＵ１において、割り当て候補ノード集合探索部１３は、R内に実行中のジョブがあるかを確認する。
R内に実行中のジョブがない場合には（ステップＵ１のＮＯルート参照）、ステップＵ１２に移行する。図１７のステップＵ１２においては、空き領域が見つかったか否かを確認する。空き領域が見つかった場合には（ステップＵ１２のＹＥＳルート参照）、処理を終了し、図１５のステップＳ１１に移行する。
【０１４１】
一方、ステップＵ１２において空き領域が見つからなかった場合には（ステップＵ１２のＮＯルート参照）、図１７のステップＵ１３において、CL_NEXTをCLに設定してから処理を終了し、図１５のステップＳ１１に移行する。
また、R内に実行中のジョブがある場合には（ステップＵ１のＹＥＳルート参照）、図１７のステップＵ２において、JL_ALLにR内の実行中ジョブを設定する。
【０１４２】
その後、図１７のステップＵ３において、JL_ALLが空であるかを確認する。JL_ALLが空である場合には（ステップＵ３のＹＥＳルート参照）、ステップＵ１２に移行する。また、JL_ALLが空でない場合には（ステップＵ３のＮＯルート参照）、ステップＵ４に移行する。
図１７のステップＵ４において、割り当て候補ノード集合探索部１３は、jobにJL_ALLの要素を設定する。なお、JL_ALLからは取り出したjob を取り除く。
【０１４３】
図１７のステップＵ５において、割り当て候補ノード集合探索部１３は、CL(job)、すなわちjobの「頂点」を「pに近い順」に整列したリストを作成する
図１７のステップＵ６において、割り当て候補ノード集合探索部１３は、CL(job)を「p に近い側のリスト」NL(job) と「p から遠い側のリスト」FL(job)とに分割する。
図１７のステップＵ７において、割り当て候補ノード集合探索部１３は、FL(job)をCL_NEXT に追加する。
【０１４４】
図１７のステップＵ８において、割り当て候補ノード集合探索部１３は、cにNL(job)の要素を設定する。なお、NL(job)からは取り出したcを取り除く。
図１７のステップＵ９において、割り当て候補ノード集合探索部１３は、実行中のジョブ job の１つの頂点である「探索の基準点」c からの空き領域探索を行なう。
ここで、この図１７のフローチャートのステップＵ９における処理を、図１９に示すフローチャート（ステップＵ９０１〜Ｕ９０６）に従って説明する。
【０１４５】
割り当て候補ノード集合探索部１３は、図１９のステップＵ９０１において、cに対する探索範囲リストを作成し、図１９のステップＵ９０２において、作成したcに対する探索範囲リストをRLに設定する。
図１９のステップＵ９０３において、割り当て候補ノード集合探索部１３は、RLが空であるか否かを確認する。確認の結果、RLが空である場合には（ステップＵ９０３のＹＥＳルート参照）、処理を終了し、図１７のステップＵ１０に移行する。一方、RLが空でない場合には（ステップＵ９０３のＮＯルート参照）、図１９のステップＵ９０４に移行する。
【０１４６】
図１９のステップＵ９０４において、割り当て候補ノード集合探索部１３は、RLの要素を取り出してRに設定する。なお、RLからは取り出した要素を取り除く。
図１９のステップＵ９０５において、割り当て候補ノード集合探索部１３は、探索範囲R内の空き領域を探索する。図１９のステップＵ９０６において、割り当て候補ノード集合探索部１３は、探索範囲R内に空き領域が見つかったか否かを確認する。探索範囲R内に空き領域が見つからない場合には（ステップＵ９０６のＮＯルート参照）、ステップＵ９０３に戻る。また、探索範囲R内に空き領域が見つかった場合には（ステップＵ９０６のＹＥＳルート参照）、処理を終了し、図１７のステップＵ１０に移行する。
【０１４７】
図１７のステップＵ１０においては、ステップＵ９における探索の結果、空き領域が見つかったか否かを確認する。空き領域が見つかった場合には（ステップＵ１０のＹＥＳルート参照）、ステップＵ１３に移行する。
一方、空き領域が見つからなかった場合には（ステップＵ１０のＮＯルート参照）、図１７のステップＵ１１において、NL(job)が空であるか否かを確認する。NL(job)が空でない場合には（ステップＵ１１のＮＯルート参照）、ステップＵ８に戻る。
【０１４８】
また、NL(job)が空である場合には（ステップＵ１１のＹＥＳルート参照）、ステップＵ３に戻る。
本第１実施例では、割り当て候補ノード制限部１４は属性値別の割り当て候補ノード制限を行なわないものとする。従って、システム内に投入されるジョブが全て特定の属性値の場合には、その属性値のジョブだけで、全ノードが占有されてもよい。すなわち、特定の属性値のジョブのための予約領域を作らない。
【０１４９】
次に、上述の如く構成された第１実施例の並列計算機システム１の基準点決定部１２による基準点割り当て処理を、図２０〜図２５に示すフローチャートに従って説明する。
図２０のステップＣ１において、基準点決定部１２は、m≦2^Nであるか否かを確認する。確認の結果、mが2^Nよりも大きい場合には（ステップＣ１のＮＯルート参照）、図２０のステップＣ２に移行する。このステップＣ２において、基準点決定部１２は、属性値の数が 2^N以下の場合の関数を再帰的に呼び出して処理を行なう。なお、このステップＣ２の処理の詳細は、図２１を用いて後述する。
【０１５０】
一方、ステップＣ１における確認の結果、mが2^N以下の場合には（ステップＣ１のＹＥＳルート参照）、ステップＣ３に移行する。この図２０のステップＣ３において、基準点決定部１２は、属性値の数が 2^N より大きい場合の関数を呼び出す。このステップＣ３の処理の詳細は、図２５を用いて後述する。
次に、上述した図２０のフローチャートのステップＣ２における処理を、図２１に示すフローチャート（ステップＤ１〜Ｄ１２）に従って説明する。
【０１５１】
図２１のステップＤ１において、基準点決定部１２は、m＝2^Nであるか否かを確認する。確認の結果、m＝2^Nである場合には（ステップＤ１のＹＥＳルート参照）、ステップＤ３に移行する。ステップＤ３においては、基準点決定部１２は、全ての「隅」の点を基準点とし、処理を終了する。
一方、ステップＤ１における確認の結果、m＝2^Nでない場合には（ステップＤ１のＮＯルート参照）、ステップＤ２に移行する。図２１のステップＤ２において、floor(log_2(m))をqとする。
【０１５２】
その後、図２１のステップＤ４において、基準点決定部１２は、N/2 ≦ q 且つq < N且つ2^q=mであるかを確認する。確認の結果、ステップＤ４の条件を満たす場合には（ステップＤ４のＹＥＳルート参照）、ステップＤ５において、「隅」の点から2^q個の点を選択し、処理を終了する。なお、このステップＤ５の処理の詳細は、図２２を用いて後述する。
【０１５３】
また、確認の結果ステップＤ４の条件を満たさない場合には（ステップＤ４のＮＯルート参照）、ステップＤ６に移行する。
図２１のステップＤ６において、基準点決定部１２は、m＜2^(N/2)であるか否かを確認する。mが2^(N/2)未満である場合には（ステップＤ６のＹＥＳルート参照）、図２１のステップＤ７において、m＜2^(N/2)の関数を読み出し、処理を終了する。なお、このステップＤ７の処理の詳細は、図２３を用いて後述する。
【０１５４】
ステップＤ６における確認の結果、mが2^(N/2)以上である場合には（ステップＤ６のＮＯルート参照）、ステップＤ８に移行する。
図２１のステップＤ８において、2^(N/2)≦m<2^N、且つ、m>2^q、且つ、m<2^(q+1)であるか否かを確認する。確認の結果、ステップＤ８の条件を満たす場合には（ステップＤ８のＹＥＳルート参照）、ステップＤ１０において、基準点決定部１２は、m=2であるか否かを確認する。確認の結果、m=2である場合には（ステップＤ１０のＹＥＳルート参照）、図２１のステップＤ１１において、基準点決定部１２は、座標が全て最小の点と全て最大の点を選択し、処理を終了する。
【０１５５】
また、ステップＤ１０の確認の結果、m=2ではない場合には（ステップＤ１０のＮＯルート参照）、図２１のステップＤ１２において、基準点決定部１２は、ある座標を最小値または最大値に固定して得られる２つのN-1次元の直方体に対しての割り当てを関数の再帰呼び出しで実行し、処理を終了する。なお、このステップＤ１２の処理の詳細は、図２４を用いて後述する。
【０１５６】
一方、ステップＤ８の条件を満たさない場合には（ステップＤ８のＮＯルート参照）、エラーとなり（ステップＤ９）、処理を終了する。
次に、上述した図２１のフローチャートのステップＤ５における処理を、図２２に示すフローチャート（ステップＥ１〜Ｅ１２）に従って説明する。すなわち、属性値の数が 2^（N/2) 以上2^N未満の２冪の場合について示す。
【０１５７】
図２２のステップＥ１において、基準点決定部１２はm=2であるか否かを確認する。m=2である場合には（ステップＥ１のＹＥＳルート参照）、図２２のステップＥ２において、基準点決定部１２は、座標が全て最小の点と全て最大の点とを選択する。
また、m=2でない場合には（ステップＥ１のＮＯルート参照）、図２２のステップＥ３において、log_2(m)をqとする。なお、このときm=2^qとする。
【０１５８】
基準点決定部１２は、図２２のステップＥ４においてN-qをsとし、図２２のステップＥ５において最初のq個の座標の集合をYYYとする。また、図２２のステップＥ６において、残りのS個の座標の集合をZZZとする。
そして、図２２のステップＥ７において、基準点決定部１２は、YYYに属する座標軸とZZZに属する座標軸を１対1に対応させて、s個の座標軸のペアを作り、そのペアに長方形を対応させる。
【０１５９】
図２２のステップＥ８において、基準点決定部１２は、上記の座標軸の各ペアから座標が両方とも最小値または両方とも最大値の座標だけを選ぶ。
図２２のステップＥ９において、基準点決定部１２はｓ<qであるか否かを確認する。確認の結果、sがq以上である場合には（ステップＥ９のＮＯルート参照）、基準点決定部１２は、図２２のステップＥ１０において、YYYとZZZの座標軸のペアから選んだ点を基準点とし、処理を終了する。
【０１６０】
一方、sがq未満である場合には（ステップＥ９のＹＥＳルート参照）図２２のステップＥ１１において、基準点決定部１２は、ZZZのYYYの座標軸とペアにならない座標軸からは各座標が最小値の場合と最大値の場合の全組み合わせを選ぶ。
そして、図２２のステップＥ１２において、基準点決定部１２は、YYYとZZZの座標軸のペアから選んだ点とペア以外のZZZの座標軸から選んだ点との直積集合を基準点とし、処理
を終了する。
【０１６１】
次に、上述した図２１のフローチャートのステップＤ７における処理を、図２３に示すフローチャート（ステップＦ１〜Ｆ１８）に従って説明する。すなわち、属性値の数が 2^（N/2) 未満の場合について示す。
図２３のステップＦ１において、基準点決定部１２はm=2であるか否かを確認する。m=2である場合には（ステップＦ１のＹＥＳルート参照）、図２３のステップＦ２において、基準点決定部１２は、座標が全て最小の点と全て最大の点とを選択する。
【０１６２】
一方、m=2でない場合には（ステップＦ１のＮＯルート参照）、図２３のステップＦ３において、基準点決定部１２は、mが偶数であるか否かを確認する。mが奇数である場合には（ステップＦ３のＮＯルート参照）、基準点決定部１２は、図２３のステップＦ４においてtにmを設定する。また、図２３のステップＦ５においてuに0を設定する。
mが偶数である場合には（ステップＦ３のＹＥＳルート参照）、図２３のステップＦ６において、基準点決定部１２は、mを素因数分解して２冪の項を2^uとする。また、図２３のステップＦ７においてtにｍ/(2^u)を設定する。
【０１６３】
図２３のステップＦ８において、基準点決定部１２は、u>0であるか否かを確認する。uが0以下である場合には（ステップＦ８のＮＯルート参照）、基準点決定部１２は、図２３のステップＦ９において、N個全部の座標の集合をZZZとする。また、図２３のステップＦ１０において、sにNを設定する。
一方、uが0より大きい場合には（ステップＦ８のＹＥＳルート参照）、基準点決定部１２は、図２３のステップＦ１１において、最初のu個の座標の集合をYYYとする。また、図２３のステップＦ１２において、N-u個の座標の集合をZZZとし、図２３のステップＦ１３において、sにN-uを設定する。
【０１６４】
図２３のステップＦ１４において、基準点決定部１２は、s次元直方体の2^s 個の隅の点と直方体の2^s個の辺からなるハミルトン閉路をHとする。
図２３のステップＦ１５において、基準点決定部１２は、Hの点から経路順にfloor(2^s/t) の間隔で選んだt個の点の集合をT(ZZZ)とする。
その後、図２３のステップＦ１６において、基準点決定部１２は、再度、u>0であるか否かを確認する。uが0以下である場合には（ステップＦ１６のＮＯルート参照）、図２３のステップＦ１７において、基準点決定部１２は、T(ZZZ)を基準点に選び、処理を終了する。
【０１６５】
一方、uが0より大きい場合には（ステップＦ１６のＹＥＳルート参照）、図２３のステップＦ１８において、基準点決定部１２は、YYYの全ての隅の点とT（ZZZ)の直積集合を基準点に選び、処理を終了する。
次に、上述した図２１のフローチャートのステップＤ１２における処理を、図２４に示すフローチャート（ステップＧ１〜Ｇ１３）に従って説明する。すなわち、属性値の数が 2^（N/2) 以上2^N未満で2冪ではない場合について示す。
【０１６６】
図２４のステップＧ１において、基準点決定部１２はN=2であるか否かを確認する。N=2でない場合には（ステップＧ１のＮＯルート参照）、図２４のステップＧ２において、基準点決定部１２は、mが偶数であるか否かを確認する。
mが奇数である場合には（ステップＧ２のＮＯルート参照）、基準点決定部１２は、図２４のステップＧ３において、m(1)に(m-1)/2を設定し、図２４のステップＧ４においてm(2)に(m+1)/2を設定する。
【０１６７】
一方、mが偶数である場合には（ステップＧ２のＹＥＳルート参照）、基準点決定部１２は、図２４のステップＧ５およびステップＧ６においてm(1)およびm(2)にそれぞれm/2を設定する。
図２４のステップＧ７において、基準点決定部１２は、任意の１座標を最小値に固定したN-1次元直方体をS(1)とする。
【０１６８】
また、図２４のステップＧ８において、基準点決定部１２は、ステップＧ７において設定した座標と同じ座標を最大値に固定したN-1次元直方体をS(2)とする。
図２４のステップＧ９において、基準点決定部１２は、S(1)からm(1)個、S(2)からｍ(2)個の基準点を、同じ関数の再帰呼び出しによりそれぞれ選択し、２つ合わせて全体の基準点として、処理を終了する。
【０１６９】
また、ステップＧ１の確認の結果、N=2である場合には（ステップＧ１のＹＥＳルート参照）、図２４のステップＧ１０において、基準点決定部１２は、遠隔度がユークリッド距離またはチェビシェフ距離であるかを確認する。
遠隔度がユークリッド距離またはチェビシェフ距離である場合には（ステップＧ１０のＹＥＳルート参照）、ステップＧ１１に移行する。
【０１７０】
図２４のステップＧ１１において、基準点決定部１２は、一方の座標が最小値かつ他方の座標が最小値または最大値である２点と、一方の座標が最大値で、他方の座標が最小値と最大値の平均の整数部分である点との合計３点を選択し、処理を終了する。
また、遠隔度がユークリッド距離でもチェビシェフ距離でもない場合には（ステップＧ１０のＮＯルート参照）、ステップＧ１２に移行する。
【０１７１】
図２４のステップＧ１２において、基準点決定部１２は、全体（長方形）の外周部に属するノードの数をCCとする。
そして、図２４のステップＧ１３において、基準点決定部１２は、長方形の外周部のハミルトン閉路（外周を一方向に一周する経路）に沿って、任意の出発点から間隔をfloor(CC/3)開けて３点を選んで、処理を終了する。
【０１７２】
次に、上述した図２０のフローチャートのステップＣ３における処理を、図２５に示すフローチャート（ステップＨ１〜Ｈ１０）に従って説明する。すなわち、属性値の数が2^Nより大きい場合について示す。
図２５のステップＨ１において、基準点決定部１２は、N=2^N+1であるか否かを確認する。N=2^N+1である場合には（ステップＨ１のＹＥＳルート参照）、ステップＨ２に移行する。図２５のステップＨ２において、基準点決定部１２は、座標が最小値または最大値である2^N個の点全てと座標が最小値と最大値の平均の整数部分である点の合計2^N+1個を選択し、処理を終了する。
【０１７３】
一方、ステップＨ１における確認の結果、N=2^N+1でない場合には（ステップＨ１のＮＯルート参照）、図２５のステップＨ３において、基準点決定部１２は、floor(mのN乗根)をkとする。
また、図２５のステップＨ４において、基準点決定部１２は、m=k^Nであるか否かを確認する。m=k^Nである場合には（ステップＨ４のＹＥＳルート参照）、ステップＨ５に移行する。図２５のステップＨ５において、基準点決定部１２は、各次元の座標の範囲の1/(k-1)の整数部分をR(i)として座標値の最小値からR(i)刻みにとったk-1個の座標値と座標の最大値の合計k個の座標値の全組合せを基準点とする。
【０１７４】
一方、m=k^Nでない場合には（ステップＨ４のＮＯルート参照）、ステップＨ６に移行する。
図２５のステップＨ６において、基準点決定部１２は、各次元の座標範囲の1/kの整数部分をR(i)として座標の最小値からR(i)刻みにとったｋ個の座標値と座標値の最大値の合計k＋１個の座標値の全組合せのk^(N+1)個の点を頂点の集合Vとする。そして、Vに含まれるノードを最短距離で結ぶリンクを合わせたものをVでは一体と見なして１つの辺とした集合をとし、グラフG(V,E)を作る。
【０１７５】
ここで、図２６（ａ），（ｂ），（ｃ）は、実施形態の一例としての並列計算機システム１におけるグラフG(V,E)の作成手法を説明するための図であり、図２６（ａ）は元のネットワークを例示する図、図２６（ｂ）は図２６（ａ）に示すネットワークから間引きを行なう過程のネットワークを例示する図、図２６（ｃ）は図２６（ａ）に示すネットワークから間引きが行なわれたネットワークを例示する図である。
【０１７６】
ここでは、N=2，k=3であり、元のネットワークが図２６（ａ）に示すような縦×横=７×１３の２次元メッシュである例について示す。
図２６（ａ）に示すネットワークにおいて、ノードの座標を縦軸については１つ置きに、横軸については３つ置きにとることで、図２６（ｂ）に示す状態となり、間引きを行なうことで、図２６（ｃ）に示すような状態となる。
【０１７７】
この図２６（ｃ）に示す例において、間引かれずに残ったノードは、元のネットワークでは２ホップないし４ホップ離れているため「元のネットワークに対応するグラフ」においては辺で繋がれていない。しかし、上記ステップＨ６の処理においては、図２６（ｂ）に示すように「間引かれずに残ったノードに対応する頂点が元のリンクと同じ方向に１つの辺で結ばれている」グラフを考える。
【０１７８】
図２５のステップＨ７において、基準点決定部１２は、(k+1)^N-mをqとする。そして、図２５のステップＨ８において、基準点決定部１２は、ユークリッドの互除法によりqと(k+1)^Nの最大公約数dおよびa*q+b*(k+1)^N=d となる整数 a, b を求める。
また、ステップＨ９において、グラフG(V,E)のハミルトン路をHとする。そして、図２５のステップＨ１０において、基準点決定部１２は、Hの始点から|a|間隔で頂点を取り除く事でq個の点をVから取り除いたものを基準点の集合とする。ただし、(k+1)^Nを|a|の倍数が越えるたび超過分だけ始点から離れた点を起点に再開する。つまり(k+1)^Nを法として|a|間隔で頂点を取り除く。その後、処理を終了する。
【０１７９】
次に、第１実施例としての並列計算機システム１の割り当て候補ノード集合探索部１３による割り当て候補ノードの探索処理を、図２７および図２８に示すフローチャートに従って説明する。なお、図２８は図２７のステップＡ１１の処理の詳細を示すフローチャートであり、基準点周辺にジョブが存在する場合の指定形状空き領域の探索について示す。
図２７のステップＡ１において、割り当て候補ノード集合探索部１３は、実行待ちジョブ管理キュー１３１の先頭からジョブ管理構造体１３１ａを取り出しＪとする。なお、再帰呼び出しの場合には、ジョブ管理構造体１３１ａは引き継がれる。
【０１８０】
図２７のステップＡ２において、割り当て候補ノード集合探索部１３は、ジョブＪに必要な領域の形状パラメータ{s(1), s(2), ..., s(N)}をshapeとする。なお、形状パラメータは再帰呼び出しの場合には引き継がれる。
図２７のステップＡ３において、割り当て候補ノード集合探索部１３は、隣接する指定形状空き領域がないことを確認済みのジョブリストJL_INを作成する。最初は空リストとなる。
【０１８１】
図２７のステップＡ４において、割り当て候補ノード集合探索部１３は、JL_IN中で隣接して指定形状Shape空き探索未完了ジョブの、隣接領域未探索の隅の点(c(1),c(2),...,c(N))をPとする。この点が一時的基準点であり、最初は本来の基準点である。
図２７のステップＡ５において、割り当て候補ノード集合探索部１３は、各座標i についてのハッシュ表１３３でmax(L(i), c(i)-s(i)) ≦ x(i)かつx(i)≦ min(M(i), c(i)+s(i)の範囲で実行中ジョブを探索する。
【０１８２】
図２７のステップＡ６において、割り当て候補ノード集合探索部１３は、どの座標についても上記範囲に登録された実行中ジョブがないかを確認する。実行中ジョブがない場合には（ステップＡ６のＹＥＳルート参照）、図２７のステップＡ７において、割り当て候補ノード集合探索部１３は、基準点を含む領域にshapeで指定された形状の領域を割り当てて、処理を終了する。
【０１８３】
また、上記範囲に登録された実行中ジョブがある場合には（ステップＡ６のＮＯルート参照）、ステップＡ８に移行する。
図２７のステップＡ８において、割り当て候補ノード集合探索部１３は、各座標iのハッシュ表から検出した前記条件で検出したジョブの中でI以外についての座標についての条件も全て満たすものを探索する。
【０１８４】
ステップＡ９において、割り当て候補ノード集合探索部１３は、全ての座標が上記範囲に含まれる実行中ジョブがあるか否かを確認する。
確認の結果、該当する実行中ジョブがある場合には（ステップＡ９のＹＥＳルート参照）、ステップＡ１０に移行する。
図２７のステップＡ１０において、割り当て候補ノード集合探索部１３は、検出済みの実行ジョブの「隅」の点を順次一時的な基準点と見なして再帰的に探索処理を行ない、処理を終了する。
【０１８５】
また、ステップＡ９における確認の結果、該当する実行中ジョブがない場合には（ステップＡ９のＮＯルート参照）、ステップＡ１１に移行する。
図２７のステップＡ１１において、割り当て候補ノード集合探索部１３は、座標iのハッシュ表で検出したジョブについて、座標が基準点より大きいジョブと小さいジョブの両方が存在する座標と、一方だけが存在する座標を区別して基準点を含む空き領域の判定条件を設定する。なお、このステップＡ１１の処理の詳細は図２８を用いて後述する。
【０１８６】
その後、図２７のステップＡ１２において、割り当て候補ノード集合探索部１３は、検出済みジョブから見て本来の基準点に近い方向にShapeで指定された空き領域が存在するか否かを確認する。確認の結果、空き領域が存在する場合には（ステップＡ１２のＹＥＳルート参照）、ステップＡ１４に移行する。
図２７のステップＡ１４において、割り当て候補ノード集合探索部１３は、基準点に領域にshapeで指定された形状の領域を割り当て、処理を終了する。
【０１８７】
また、ステップＡ１２における確認の結果、空き領域が存在しない場合には（ステップＡ１２のＮＯルート参照）、割り当て候補ノード集合探索部１３は、図２７のステップＡ１３において、検出済みジョブから見て本来の基準点から遠い方向にShapeで指定された空き領域が存在するか否かを確認する。
この確認の結果、空き領域が存在する場合には（ステップＡ１３のＹＥＳルート参照）、ステップＡ１４に移行する。一方、空き領域が存在しない場合には（ステップＡ１３のＮＯルート参照）、ステップＡ１５に移行する。
【０１８８】
図２７のステップＡ１５において、割り当て候補ノード集合探索部１３は、検出済みの実行中ジョブの「隅」の点を順次一時的な基準点と見なして再帰的に探索処理を行ない、処理を終了する。
なお、上述したフローチャートにおいて、例えば、ステップＡ６およびステップＡ７の処理は同様の処理が冗長して行なわれるので省略してもよい。
【０１８９】
次に、上述した図２７のフローチャートのステップＡ１１における基準点周辺にジョブが存在する場合の指定形状空き領域の探索処理を、図２８に示すフローチャート（ステップＢ１〜Ｂ１２）に従って説明する。
割り当て候補ノード集合探索部１３は、図２８のステップＢ１において変数iに１を設定する。その後、図２８のステップＢ２において、割り当て候補ノード集合探索部１３は、第i座標が基準点座標より大きいジョブと小さいジョブとの両方が存在するか否かを確認する。確認の結果、該当するジョブが存在しない場合には（ステップＢ２のＮＯルート参照）、図２８のステップＢ３において、割り当て候補ノード集合探索部１３は、ジョブと基準点の座標iの差の絶対値の最小値をd(i)とし、ステップＢ７に移行する。
【０１９０】
一方、ステップＢ２における確認の結果、該当するジョブが存在する場合には（ステップＢ２のＹＥＳルート参照）、図２８のステップＢ４において、割り当て候補ノード集合探索部１３は、座標iが基準点より小さいジョブと基準点の座標iとの差の最小値をb(i)とする。
また、図２８のステップＢ５において、割り当て候補ノード集合探索部１３は、座標iが基準点より大きいジョブと基準点の座標iとの差の最小値をa(i)とする。
【０１９１】
その後、割り当て候補ノード集合探索部１３は、図２８のステップＢ６においてd(i) にa(i)+b(i)を設定し、ステップＢ７に移行する。
図２８のステップＢ７において、割り当て候補ノード集合探索部１３は、s(i)≦d(i)+1であるか否かを確認する。確認の結果、s(i)がd(i)+1以下である場合には（ステップＢ７のＹＥＳルート参照）、図２８のステップＢ８において、第i座標はs(i)≦d(i)+1と記録する。
【０１９２】
また、ステップＢ７の確認の結果、s(i)がd(i)+1よりも大きい場合には（ステップＢ７のＮＯルート参照）、図２８のステップＢ９において、第i座標はs(i)>d(i)+1 と記録と記録する。
割り当て候補ノード集合探索部１３は、図２８のステップＢ１０においてiをインクリメント（i＝i+1）した後、図２８のステップＢ１１においてi=Nであるか否かを確認する。
【０１９３】
i=Nでない場合には（ステップＢ１１のＮＯルート参照）、ステップＢ２に戻る。また、i=Nである場合には（ステップＢ１１のＹＥＳルート参照）、ステップＢ１２において、割り当て候補ノード集合探索部１３は、全座標での 判定結果を呼び出し元に返し、図２７に示すフローチャートのステップＡ１２に移行する。
（Ｂ）第２実施例
本第２実施例では、ネットワークトポロジーを２次元トーラスとする。本第２実施例では、wrap around link を無視しない本来の距離（マンハッタン距離、チェビシェフ距離、ユークリッド距離のいずれか）を遠隔度関数に使用する。このため、座標を次のように、各軸に含まれるノード数（各軸の大きさ）の「剰余類」で表すものとする。
【０１９４】
即ち、x軸方向、y軸方向の大きさが各々d(1), d(2) であるとして、各軸の座標は、次のようになる。
x 座標の範囲を0, 1, 2, ..., (d(1)-1) (mod d(1))
y 座標の範囲を0, 1, 2, ..., (d(2)-1) (mod d(2))
［基準点決定部１２の処理］
本第２実施例では、以下の（１）〜（５）に示すように場合分けを行なう。なお、場合５のm>4 の場合は、よりm が小さい場合に順次帰着させる。詳細については、図２９を用いて後述する。
（１）場合１：m=1
（２）場合２：m=2
（３）場合３：m=3
（４）場合４：m=4
（５）場合５：m>4
なお、本第２実施例では、簡便のために２次元の場合についてのみ示すが、N次元の場合には第１実施例と同様の場合分けを行なう。
【０１９５】
（１）場合１：m=1
以下のように基準点の集合C を定める。
すなわち、トーラスの場合、どの座標(x,y) を基準点としても実質的には同じであるが、例えば、C = {(0,0)} とする。
（２）場合２：m=2
以下のように基準点の集合C を定める。
【０１９６】
d(2) ≦ d(1) の時、C = {(0, 0), ([d(1)/2], 0)}
d(2) > d(1) の時、C = {(0, 0), (0, [d(2)/2])}
（３）場合３：m=3
以下の基準点の集合C を定める。
d(2) ≦ d(1) の時、C = {(0, 0), ([d(1)/3], 0), (2*[d(1)/3], 0)}
d(2) > d(1) の時、C = {(0, 0), (0, [d(2)/3])}, (0, 2*[d(2)/3])}
（４）場合４：m=4
以下のように基準点の集合C を定める。
【０１９７】
C = {(0, 0), ([d(1)/2], 0), (0, [d(2)/2]), ([d(1)/2],, [d(2)/2])}
なお、N = 2 の場合、条件から基準点の数m=３となる。
（４−１）場合４の１：farness として、マンハッタン距離を使用する場合
M(1)-L(1) = D(1), M(2)-L(2) = D(2) とするとき、長方形の辺の上のノードの１つを任意に定め、長方形の周囲を一方の方向に１周する１次元の座標を1 から2*(D(1)+D(2)-1) までの値を取るように定める。
【０１９８】
CC = 2*(D(1)+D(2)-1) を3 で割った商をq 余りをr とするとCC = 3q + r である。こ
のq により基準点の１次元座標を1 , q+1, 2q+1 とする。
q < (D(1)+D(2)-1) かつ(D(1)+D(2)-1) < 2q となる。
∴ L(1), L(2)のここでの１次元座標を1 とすると、基準点の２次元座標は、次のよう
に定められる。
q ≦ D(1) の場合、｛（L(1), L(2)) , (L(1)+q, L(2)), (M(1)-(2*q-(D(1)+D(2)-1)), M(2)) }
q > D(1) の場合、｛（L(1), L(2)) , (M(1), L(2)+q-D(1)), (M(1)-(2*q-(D(1)+D(2)-1)), M(2)) }
（４−２）場合４の２：farness として、チェビシェフ距離あるいはユークリッド距離を使用する場合
N = 2M(1)-L(1) = D(1), M(2)-L(2) = D(2) として、D(1) とD(2) のうち小さくない方(max((D(1), D(2))）の長さを持つ向かい合った（従って平行な）２辺について、一方の
両端の点、他方の中点に最も近い点を取る。
【０１９９】
例えばD(2) ≦ D(1) の時、{ (L(1), L(2)), (M(1), L(2)), ([(L(1)+M(1))/2], M(2)) } の３点を基準点とする。
次にN > 2 とする。直方体の次元が１つ下の場合の設定方法に順次帰着させる。使用するfarness についての条件により、最終的に帰着させる２次元の場合を上のように分けるが、１つ下の次元の場合に帰着させる手順は、farness によらない。ただし、次のように、偶数か奇数かで場合を分ける。
【０２００】
m が偶数のとき、次のようにm を分割する。
m = m/2 + m/2
2^((N-1)/2)≦m/2<2^(N-1)かつm/2 は2 の冪ではない。(∵mは2の冪ではない）。
この場合、ある１つの座標軸の値を最小値、あるいは最大値に固定した２つのN-1次元の直方体２つに対して、m/2 個ずつの基準点を定め、それらの和集合を取る事で、m 個の基準点を定める。
【０２０１】
m が奇数のときは、条件からm > 1 である事に注意して、次のようにm を分割する。
m = (m-1)/2 + (m+1)/2
次の両方が成り立つ。なお、(m-1)/2 と(m+1)/2 のうち一方は２の冪になるかも知れないが、２の冪になった場合には、基準点の定め方は既に述べられている（上記、場合２を参照）。
【０２０２】
2^((N-1)/2)≦(m-1)/2<2^(N-1)
2^((N-1)/2)≦(m+1)/2<2^(N-1)
∴この場合も、ある１つの座標軸の値を最小値あるいは最大値に固定した２つのN-1次元の直方体２つに対して、その一方に(m-1)/2 個、他方には(m+1)/2 個の基準点を定め、和集合を取る事でm 個の基準点を定める。
【０２０３】
（５）場合５：m>4
（５−１）場合５の１：mが素数でない
m は複数の素因数を持つので、m=p*q (p>1, q>1) となるような２つの整数p, q がある。
g(1)=[d(1)/p], h(1)=[d(2)/q] とするとき、|g(1)-h(1)| が最小になるようにp, q を選んでおく。
【０２０４】
さらに、g(2)=[d(1)/m], h(2)=[d(2)/m] とする。
|d(1)-g(2)|, |d(2)-g(1)|, |g(1)-h(1)| の中でどれが最小であるかにより処理を分ける。
|d(1)-g(2)| が最小の場合、次のように基準点の集合C を定める。
C = {(j*g(2), 0)|0≦j≦g(2)-1, j は整数}
|d(2)-g(1)| が最小の場合、次のように基準点の集合C を定める。
【０２０５】
C = {(0, k*h(2))|0≦k≦h(2)-1, k は整数}
|g(1)-h(1)| が最小の場合、次のように基準点の集合C を定める。
C = {(j*g(1), k*h(1))| 0≦j≦(p-1), 0≦k≦(q-1), j, k は共に整数}
（５−２）場合５の２：mが素数
m+1 は素数ではないので、m+1=p*q (p>1, q>1) となるような２つの整数p, q がある。
【０２０６】
g(1)=[d(1)/p], h(1)=[d(2)/q] とするとき、|g(1)-h(1)| が最小になるようにp, q を選んでおく。
さらに、g(2)=[d(1)/m], h(2)=[d(2)/m] とする。
|d(1)-g(2)|, |d(2)-g(1)|, |g(1)-h(1)| の中でどれが最小であるかにより処理を分ける。
【０２０７】
|d(1)-g(2)| が最小の場合、次のように基準点の集合C を定める。
C = {(j*g(2), 0)|0≦j≦g(2)-1, j は整数}
|d(2)-h(2)| が最小の場合、次のように基準点の集合C を定める。
C = {(0, k*h(2))|0≦k≦h(2)-1, k は整数}
|g(1)-h(1)| が最小の場合、次のように基準点の集合C を定める。
【０２０８】
C = {(j*g(1), k*h(1))| 0≦j≦(p-1), 0≦k≦(q-1), j, k は共に整数で、同時に0 はならない}
本第２実施例において、割り当て候補ノード集合探索部１３は、各ジョブに対し「ある特定の属性値に対応する基準点」からの遠隔度が小さい方から、他のジョブによって使用中のノードを含まない指定された形状の領域を探索する。
【０２０９】
遠隔度としては、マンハッタン距離、ユークリッド距離、チェビシェフ距離のどれかを使用する。ただし、ここでの距離はトーラスとしての本来の距離である。他は、第１実施例と同様であるが、割り当て可能範囲の探索範囲が、下記の割り当て候補ノード制限機構での不等式条件により制約される。
本第２実施例において、割り当て候補ノード制限部１４は、各属性値について、対応する基準点からの各座標軸の値に関する不等式条件の組み合わせで、割り当て候補を制限する。なお、不等式の組み合わせは、重複がない限り、任意に定める事ができる。
【０２１０】
基準点の座標を(a(0), b(0)), (a(1), b(1)) ..., (a(m), b(m)) とするとき、1≦j≦m に対して、次のいずれかの形の不等式（ただし、一方は等式でもよい）の複数の組み合わせを、各基準点に対して定める。
x(j) - a(j) = A(j) かつB(j) ≦ y(j) - b(j) ≦ C(j)
A(j) ≦ x(j) - a(j) ≦ B(j) かつC(j) ≦ y(j) - b(j) ≦ D(j)
A(j) ≦ x(j) - a(j) ≦ B(j) かつC(j) = y(j) - b(j)
なお、割り当て候補ノード制限部１４は、同様の処理を第１実施例や後述する第３実施例において行なってもよい。
【０２１１】
上述の如く構成された第２実施例の並列計算機システム１における基準点決定部１２の処理を、図２９に示すフローチャート（ステップＫ１〜Ｋ２３）に従って説明する。
ステップＫ１において、基準点決定部１２はm=1であるか否かを確認する。確認の結果、m=1である場合には（ステップＫ１のＹＥＳルート参照）、ステップＫ２において、基準点決定部１２は、｛(0,0)｝を基準点として処理を終了する。
【０２１２】
また、m=1でない場合には（ステップＫ１のＮＯルート参照）、ステップＫ３において、m=2であるか否かを確認する。確認の結果、m=2である場合には（ステップＫ３のＹＥＳルート参照）、基準点決定部１２は、ステップＫ４においてｄ(2)≦ｄ(1)であるか否かを確認する。ｄ(2)がｄ(1)以下である場合には（ステップＫ４のＹＥＳルート参照）、ステップＫ５において、基準点決定部１２は、｛(0,0), (floor(d(1)/2),0)}を基準点とし、処理を終了する。
【０２１３】
また、ｄ(2)がｄ(1)より大きい場合には（ステップＫ４のＮＯルート参照）、ステップＫ６において、基準点決定部１２は、｛(0,0), (0,floor(d(2)/2))}を基準点として、処理を終了する。
また、ステップＫ３における確認の結果、m=2でない場合には（ステップＫ３のＮＯルート参照）、ステップＫ７において、m=3であるか否かを確認する。m=3である場合には（ステップＫ７のＹＥＳルート参照）、ステップＫ８において、ｄ(2)≦ｄ(1)であるか否かを確認する。ｄ(2)がｄ(1)以下である場合には（ステップＫ８のＹＥＳルート参照）、ステップＫ９において、基準点決定部１２は、{(0,0), (0, floor(d(1)/3)),(0,2*floor(d(2)/3))}を基準点とし、処理を終了する。
【０２１４】
また、ｄ(2)がｄ(1)より大きい場合には（ステップＫ８のＮＯルート参照）、ステップＫ１０において、基準点決定部１２は、｛(0,0), (0,floor(d(2)/3), (0,2*floor(d(2)/3)}を基準点ととし、処理を終了する。
また、ステップＫ７における確認の結果、m=3でない場合には（ステップＫ７のＮＯルート参照）、ステップＫ１１において、m=4であるか否かを確認する。m=4である場合には（ステップＫ１１のＹＥＳルート参照）、ステップＫ１２において、基準点決定部１２は、{(0,0), (0, floor(d(1)/2)),(floor(d(2)/2),0),(floor(d(1)/2),floor(d(2)/2))}を基準点として、処理を終了する。
【０２１５】
また、ステップＫ１１における確認の結果、m=4でない場合には（ステップＫ１１のＮＯルート参照）、ステップＫ１３において、mが素数であるか否かを確認する。mが素数の場合には（ステップＫ１３のＹＥＳルート参照）、ステップＫ１５において、基準点決定部１２は、m+1を１より大きい整数p,qでm+1=p*qと表す時に、g(1)=floor(d(1)/p),h(1)=floor(d(2)/q)とし、|g(1)-h(1)|が最小のp,qを選択する。
【０２１６】
また、mが素数でない場合には（ステップＫ１３のＮＯルート参照）、ステップＫ１４において、基準点決定部１２は、mを1より大きい整数p,qでm=p*qと表す時に、g(1)=floor(d(1)/p),h(1)=floor(d(2)/q)とし、|g(1)-h(1)|が最小のp,qを選択する。
その後、ステップＫ１６において、基準点決定部１２は、g(2)=floor(d(1)/m),h(2)=floor(d(2)/m)として、|d(1)-g(2)|,|d(2)-g(1)|,|g(1)-h(1)|の中でいずれが最小かを調べる。
【０２１７】
ステップＫ１７において、|d(1)-g(2)|が最小であるか否かを確認する。|d(1)-g(2)|が最小である場合には（ステップＫ１７のＹＥＳルート参照）、ステップＫ１８に移行する。ステップＫ１８において、基準点決定部１２は、{(j*g(2), 0)|0≦j≦m-1, j は整数}という集合を基準点とし、処理を終了する。
また、ステップＫ１７における確認の結果、|d(1)-g(2)|が最小でない場合には（ステップＫ１７のＮＯルート参照）、ステップＫ１９において、|d(2)-g(1)|が最小であるか否かを確認する。
【０２１８】
|d(2)-g(1)|が最小である場合には（ステップＫ１９のＹＥＳルート参照）、ステップＫ２０に移行する。ステップＫ２０において、基準点決定部１２は、{(0, k*h(2))|0≦k≦ｍ-1, k は整数}という集合を基準点とし、処理を終了する。
|d(2)-g(1)|が最小でない場合には（ステップＫ１９のＮＯルート参照）、すなわち、|g(1)-h(1)|が最小の場合には、ステップＫ２１に移行する。ステップＫ２１において、mが素数であるか否かを確認する。mが素数である場合には（ステップＫ２１のＹＥＳルート参照）、ステップＫ２２において、基準点決定部１２は、{(j*g(1), k*h(1))| 0≦j≦(p-1),0≦k≦(q-1), j, k は同時には0でない整数}という集合を基準点とし、処理を終了する。
【０２１９】
また、ステップＫ２１の確認の結果、mが素数でない場合には（ステップＫ２１のＮＯルート参照）、ステップＫ２３において、基準点決定部１２は、{(j*g(1), k*h(1))| 0≦j≦(p-1),0≦k≦(q-1), j, k は共に整数}という集合を基準点とし、処理を終了する。
次に、第２実施例としての並列計算機システム１における割り当て候補ノード集合探索部１３による割り当て候補ノードの探索処理を、図３０に示すフローチャート（ステップＪ１〜Ｊ１５）に従って説明する。
【０２２０】
ステップＪ１において、割り当て候補ノード集合探索部１３は、実行待ちジョブ管理キュー１３１の先頭からジョブ管理構造体１３１ａを取り出し、Ｊとする。なお、再帰呼び出しの場合には、ジョブ管理構造体１３１ａは引き継がれる。
ステップＪ２において、割り当て候補ノード集合探索部１３は、ジョブＪに必要な領域の形状パラメータ{s(1), s(2), ..., s(N)}の指定値をshape とする。初期値は空であり、再帰呼び出しの場合には引き継がれる。
【０２２１】
ステップＪ３において、割り当て候補ノード集合探索部１３は、隣接する指定形状空き領域がないことを確認済みのジョブリストをJL_INとする。初期値は空であり、再帰呼び出しの場合には引き継がれる。
ステップＪ４において、割り当て候補ノード集合探索部１３は、JL_IN中で隣接して指定形状Shapeの空き探索未完了ジョブの隣接領域が未探索の隅の点(c(1),c(2),...,c(N))をPとする。
【０２２２】
ステップＪ５において、割り当て候補ノード集合探索部１３は、各座標i についてのハッシュ表で法(modulo)L(i)での座標差の絶対値がs(i)以下のジョブを探索する。
ステップＪ６において、割り当て候補ノード集合探索部１３は、いずれかの座標について上記範囲に登録された実行中ジョブがあるかを確認する。確認の結果、制限されていない場合には（ステップＪ６のＮＯルート参照）、ステップＪ７に移行する。
【０２２３】
ステップＪ７において、割り当て候補ノード集合探索部１３は、基準点を含む領域にshapeで指定された形状の領域を割り当てて、処理を終了する。
また、ステップＪ６における確認の結果、制限がされている場合には（ステップＪ６のＹＥＳルート参照）、ステップＪ８に移行する。
ステップＪ８において、割り当て候補ノード集合探索部１３は、各座標iのハッシュ表１３３から検出した前記条件で検出したジョブの中でI以外についての座標についての条件も全て満たすものを探索する。
【０２２４】
ステップＪ９において、割り当て候補ノード集合探索部１３は、全ての登録座標が上記範囲にある実行中ジョブがあるかを確認する。確認の結果、実行中ジョブがある場合には（ステップＪ９のＹＥＳルート参照）、ステップＪ１０に移行する。
ステップＪ１０において、割り当て候補ノード集合探索部１３は、検出済みの実行ジョブの「隅」の点を順次一時的な基準点と見なして再帰的に探索処理を行ない、処理を終了する。
【０２２５】
また、ステップＪ９における確認の結果、実行中ジョブがない場合には（ステップＪ９のＮＯルート参照）、ステップＪ１１に移行する。
ステップＪ１１において、割り当て候補ノード集合探索部１３は、座標iの基準点を含む空き領域の判定条件を設定する。
ステップＪ１２において、割り当て候補ノード集合探索部１３は、検出済みジョブから見て基準点に近い方向にShapeで指定された割当て制限がない空き領域が存在するか否かを確認する。確認の結果、該当する空き領域が存在する場合には（ステップＪ１２のＹＥＳルート参照）、ステップＪ１３に移行する。
【０２２６】
ステップＪ１３において、割り当て候補ノード集合探索部１３は、基準点に領域にshapeで指定された形状の領域を割り当てて、処理を終了する。
また、ステップＪ１２における確認の結果、該当する空き領域が存在しない場合には（ステップＪ１２のＮＯルート参照）、ステップＪ１４に移行する。
ステップＪ１４においては、割り当て候補ノード集合探索部１３は、検出済みジョブから見て基準点から遠い方向にShapeで指定された割当て制限がない空き領域が存在するか否かを確認する。確認の結果、該当する空き領域が存在する場合には（ステップＪ１４のＹＥＳルート参照）、ステップＪ１３に移行する。
【０２２７】
一方、ステップＪ１４における確認の結果、該当する空き領域が存在しない場合には（ステップＪ１４のＮＯルート参照）、ステップＪ１５に移行する。
ステップＪ１５において、割り当て候補ノード集合探索部１３は、検出済みの実行中ジョブの「隅」の点を順次一時的な基準点と見なして再帰的に探索処理を行ない、処理を終了する。
【０２２８】
（Ｃ）第３実施例
本第３実施例では、複数のメッシュまたはトーラスネットワークが、複数のゲートウェイノードを介して結合されたネットワークトポロジーを扱う。なお、どの２つのメッシュまたはトーラスネットワークにも、各々に互いへのゲートウェイとなるノードが少なくとも１つ存在するネットワークとする。
【０２２９】
本第３実施例では、メッシュあるいはトーラスネットワークを持つ複数の計算機システムのクラスターを、単一のシステムとして運用する場合に相当する。
以下、M個のメッシュまたはトーラスネットワークが結合されているとする。この時、各メッシュないしトーラスは、システム全体のネットワークの部分ネットワークである。
図３１は第３実施例の並列計算機システム１のネットワークトポロジーを例示する図であり、トーラスと複数のメッシュとをゲートウェイノードを介して接続したネットワークを示す。
【０２３０】
本第３実施例においては、遠隔度関数を以下のように定める。
同じメッシュまたはトーラスネットワークに属する２ノード間の遠隔度は、メッシュまたはトーラス内での距離関数とする。
異なるメッシュまたはトーラスネットワークに属する２ノード間の遠隔度は、各メッシュないしトーラスからゲートウェイノードまでの遠隔度とゲートウェイノード間の遠隔度の和と定める。ただし、複数のゲートウェイノードの組み合わせがあるときは、それらの最小値とする。
【０２３１】
さらに、ゲートウェイノード間の遠隔度は基準時刻でのゲートウェイノード間の通信レイテンシを各メッシュまたはトーラスでの１リンクの平均レイテンシで割ったものとして定める。
一般に、ゲートウェイノードを経由する場合には通信遅延が大きいので、可能な限り１つのジョブを１つの部分ネットワーク内に留める事が望ましいが、ジョブが必要とするノード数が大きいために、そう出来ない場合も想定する。
【０２３２】
次に、本第３実施例における基準点決定部１２の処理を説明する。
本第３実施例においては、基準点決定部１２は、M ≦ m の時、m をM 個の正の整数の和として表し、各メッシュ、トーラスに基準点を配置する。
m = m(1) + m(2) + ... + m(M)
m がM で割り切れない時にも、できるだけ、部分ネットワーク毎の基準点の数が等しくなるように配置する処理を行なう。また、基準点の数のバラツキが生ずる場合、ノード数が多い部分ネットワークに、より多くの基準点を配置する。
【０２３３】
M > m の時、M をm 個の正の整数の和として表し、複数のメッシュ、トーラスのゲートウェイノードのグループ毎に基準点を配置する。下記のように表した時、第k番目の属性に対する基準点を、M(k) 個のメッシュ、トーラス間のゲートウェイノードのいずれかから選択する。
M = M(1) + M(2) + ... + M(m)
本第３実施例においては、部分ネットワークとなるメッシュ、トーラスの数Mが大きい場合には、２つの閾値Threshold1およびThreshold2を用いた、２種類の近似処理を併用することで、部分ネットワークのグループ分けを出来るだけノード数が等しくなるようにする。
【０２３４】
すなわち、統計学上の複数の量が平均から離れている度合いを測る量である「分散」による厳密な計算の計算量が非常に大きくなる問題への対応として、２つの閾値Threshold1およびThreshold2を用いた、２種類の近似処理を併用する。
なお、これら２つの閾値の関係は、Threshold1 > Threshold2 とする。
ここで、Threshold1よりM が大きい場合、各グループに属する部分ネットワークのノード数の総和の順序に着目し、「各グループに属する部分ネットワークの数」をなるべく等しくする。すなわち、各部分ネットワークのノード数の差が比較的小さいと見なしてノード数合計の均等化を部分ネットワーク数の均等化で近似する。
【０２３５】
また、Threshold2よりM が大きい場合、やはりM個の部分ネットワークをノード数の多い順に整列し、先頭から順に、グループ毎のノード数の合計が平均を、ぎりぎりで越えない所まで、各グループにサブネットワークを追加していく方法で近似する。m-1個のグループを定めた所で残っているノードは全てまとめて１つのグループとする。
本第３実施例において、割り当て候補ノード集合探索部１３は、複数のメッシュあるいはトーラスに跨るノード割り当てが必要な場合に、ジョブ実行に必要なノード数nn を各メッシュないしトーラスに配分する。そして、割り当て候補ノード集合探索部１３は、配分した数の空きノードを各メッシュないしトーラス内で基準点としたゲートウェイノード、または基準点ノードと接続されているゲートウェイノードからの遠隔度が小さい側から、探索を行なう。この探索は上述した第１実施例と同様の手法で行なう。
【０２３６】
ただし、本第３実施例では、このように領域を分割する探索は、基準点がゲートウェイノード上にある場合に限定する。また、本第３実施例では、許容可能な分割パターンが各ジョブについて予めリストとして与えられているとする。
なお、割り当て候補ノード集合探索部１３は、ジョブが単一のメッシュないしトーラス内のノードだけで実行可能であれば、第１実施例に示した割り当て手法を使用する。
【０２３７】
第３実施例の並列計算機システム１の基準点決定部１２の処理を、図３２〜図３５に示すフローチャートに従って説明する。
図３２のステップＭ１において、基準点決定部１２は、システムを構成する部分ネットワークの集合（｛S(1),S(2),...,S(M)})をSとする。
図３２のステップＭ２において、基準点決定部１２は、M≦mであるか否かを確認し、Mがm以下である場合には（ステップＭ２のＹＥＳルート参照）、ステップＭ３に移行する。図３２のステップＭ３において、基準点決定部１２は基準点を部分ネットワークに配分する。このステップＭ３の処理の詳細は、図３３を用いて後述する。
【０２３８】
また、図３２のステップＭ２における確認の結果、Mがmよりも大きい場合には（ステップＭ２のＮＯルート参照）、ステップＭ４において、M≦Threshold1であるか否かを確認する。確認の結果、MがThreshold1以下である場合には（ステップＭ４のＹＥＳルート参照）、ステップＭ５に移行する。図３２のステップＭ５においては、基準点決定部１２は、複数の部分ネットワークを、ノード数合計がなるべく同じになるグループに分けて、そのグループ毎に基準点を配分する。このステップＭ５の処理の詳細は、図３５を用いて後述する。
【０２３９】
一方、ステップＭ４における確認の結果、MがThreshold1よりも大きい場合には（ステップＭ４のＮＯルート参照）、ステップＭ６に移行する。図３２のステップＭ６においては、基準点決定部１２は、複数の部分ネットワークを、なるべく同じ数からなるグループに分けて、それらのグループ毎に基準点を配分する。このステップＭ６の処理は、図３４を用いて後述する。
【０２４０】
次に、上述した図３２のフローチャートのステップＭ３における処理を、図３３に示すフローチャート（ステップＮ１〜Ｎ５）に従って説明する。
図３３のステップＮ１において、基準点決定部１２は、mをMで割った余りをｒとして、図３３のステップＮ２において、r=0であるか否かを確認する。r=0の場合には（ステップＮ２のＹＥＳルート参照）、ステップＮ３に移行する。ステップＮ３においては、基準点決定部１２は、全ての部分ネットワークにm/M個の基準点を配分する。
【０２４１】
また、r=0でない場合には（ステップＮ２のＮＯルート参照）、ステップＮ４に移行する。図３３のステップＮ４においては、基準点決定部１２は、部分ネットワークの集合を各々のノード数順に整列させる。
そして、図３３のステップＮ５において、基準点決定部１２は、ノード数が多い方からr個の各部分ネットワークにはfloor(m/M)+1個の基準点、残りの部分ネットワークには各々floor(m/M)個の基準点を配分する。
【０２４２】
次に、上述した図３２のフローチャートのステップＭ６における処理を、図３４に示すフローチャート（ステップＰ１〜Ｐ１０）に従って説明する。
図３４のステップＰ１において、基準点決定部１２は、部分ネットワークの集合Sを各々のノード数順に整列させ、ステップＰ２において、Mをｍで割った余りをrとする。
図３４のステップＰ３において、r=0であるか否かを確認する。r=0の場合には（ステップＰ３のＹＥＳルート参照）、ステップＰ９に移行する。ステップＰ９においては、基準点決定部１２は、整列されたSの要素番号をMで割った余りが同じM/m個の要素からなるm個のグループに分ける。
【０２４３】
そして、図３４のステップＰ１０において、基準点決定部１２は、各グループの中でノード数が最大の部分ネットワークのゲートウェイノードの１つに基準点を配置する。
一方、ステップＰ３における確認の結果、r=0でない場合には（ステップＰ３のＮＯルート参照）、ステップＰ４に移行する。図３４のステップＰ４において、基準点決定部１２は、整列されたSのうちノード数の多い方からM-r個までの部分集合を、要素番号をmで割った余りが同じ(M-r)/m個ずつを集めた、m個のグループからなるリストをGとする。
【０２４４】
図３４のステップＰ５において、基準点決定部１２は、Gからノード数合計が小さい方からr個を取って、ノード数の合計が大きい方から順に整列したリストをHとする。また、図３４のステップＰ６において、基準点決定部１２は、ノード数が小さい方から順にr個のまだグループに含まれていない要素を整列したリストをTとする。
図３４のステップＰ７において、基準点決定部１２は、HとTの各々の先頭から順に１つずつ要素をよって、Hの要素であるグループにTの要素である部分ネットワークを追加する。
【０２４５】
そして、図３４のステップＰ８において、基準点決定部１２は、Gの各グループの中でノード数が最大の部分ネットワークのゲートウェイノードの１つに基準点を配置する。
次に、上述した図３２のフローチャートのステップＭ５における処理を、図３５に示すフローチャート（ステップＱ１〜Ｑ１７）に従って説明する。
図３５のステップＱ１において、基準点決定部１２は、M≦Threshold2であるか否かを確認する。確認の結果、MがThreshold2以下である場合には（ステップＱ１のＹＥＳルート参照）、ステップＱ２に移行する。ステップＱ２においては、基準点決定部１２は、部分ネットワークの集合Sをm個のグループに分ける全てのパターンのリストをUとする。
【０２４６】
図３５のステップＱ３において、基準点決定部１２は、Uの要素から「グループ毎のノード数の和」の統計学用語での「分散」が最小となるパターンのグループ分けを選び、Gとする。
その後、図３５のステップＱ１２において、基準点決定部１２は、Gの要素である各グループのノード数最大の部分ネットワークのゲートウェイノードに基準点を配置する。
【０２４７】
一方、ステップＱ１における確認の結果、MがThreshold2より大きい場合には（ステップＱ１のＮＯルート参照）、ステップＱ４に移行する。
図３５のステップＱ４において、基準点決定部１２は、部分ネットワークの集合Sを各々のノード数順に整列する。図３５のステップＱ５において、基準点決定部１２は、空リストをGとして設定する。
【０２４８】
基準点決定部１２は、図３５のステップＱ６においてiに１を設定し、図３５のステップＱ７においてシステム内の全ノード数をnnとする。また、図３５のステップＱ８およびステップＱ９においてggおよびjにそれぞれ0を設定する。
図３５のステップＱ１０において、基準点決定部１２は、Gの要素数=(m-1)であるか否かを確認する。Gの要素数が(m-1)に一致する場合には（ステップＱ１０のＹＥＳルート参照）、ステップＱ１１に移行する。
【０２４９】
図３５のステップＱ１１において、基準点決定部１２は、まだグループに入っていないSの要素の全てを１グループとしてGに追加する。
そして、図３５のステップＱ１２において、基準点決定部１２は、Gの要素である各グループのノード数最大の部分ネットワークのゲートウェイノードに基準点を配置する。
一方、ステップＱ１０における確認の結果、Gの要素数が(m-1)と一致しない場合には（ステップＱ１０のＮＯルート参照）、基準点決定部１２は、図３５のステップＱ１３においてggにgg+(S(i+j))を設定する。
【０２５０】
図３５のステップＱ１４において、基準点決定部１２は、nn/m>ggであるか否かを確認する。nn/mがgg以下である場合には（ステップＱ１４のＮＯルート参照）、図３５のステップＱ１５においてjをインクリメント（j+1）した後、ステップＱ１３に戻る。
また、nn/mがggよりも大きい場合には（ステップＱ１４のＹＥＳルート参照）、ステップＱ１６に移行する。図３５のステップＱ１６においては、基準点決定部１２は、Gにグループ{S(i),....S(i+j-1)}を追加する。
【０２５１】
その後、図３５のステップＱ１７においてiにi+j+1を設定した後、ステップＱ８に戻る。
次に、第３実施例の一例としての並列計算機システム１の割り当て候補ノード集合探索部１３による処理を、図３６に示すフローチャート（ステップＬ１〜Ｌ１１）に従って説明する。
【０２５２】
図３６のステップＬ１において、割り当て候補ノード集合探索部１３は、実行待ちジョブ管理キューの先頭のジョブ管理構造体をJとする。
また、図３６のステップＬ２において、割り当て候補ノード集合探索部１３は、shapeにジョブ J に必要な領域の形状パラメータ（ {s(1), s(2), ..., s(N)}）指定値を設定する。
【０２５３】
図３６のステップＬ３において、割り当て候補ノード集合探索部１３は、基準点が部分ネットワーク内部であるか、すなわち、ゲートウェイノード以外であるか否かを確認する。基準点が部分ネットワーク内部である場合には（ステップＬ３のＹＥＳルート参照）、図３６のステップＬ４において、割り当て候補ノード集合探索部１３は、基準点が属する部分ネットワーク内での第１実施例と同様の手法で探索を行なう。
【０２５４】
また、ステップＬ３における確認の結果、基準点が部分ネットワーク内部でない場合には（ステップＬ３のＮＯルート参照）、ステップＬ５に移行する。
図３６のステップＬ５において、割り当て候補ノード集合探索部１３は、許容可能な割り当て可能領域の分割パターンのリストをshape_listとする。
図３６のステップＬ６において、割り当て候補ノード集合探索部１３はsに１を設定する。また、図３６のステップＬ７において、割り当て候補ノード集合探索部１３は、基準点からのリンクのある他の部分ネットワークのゲートウェイノードを順次基準点とみなし、形状パラメータがshapeの探索を各部分ネットワーク内で第１実施例と同様の手法で行なう。
【０２５５】
割り当て候補ノード集合探索部１３は、図３６のステップＬ８において、探索中の空き領域がs個見つかったか否かを確認する。空き領域がs個見つからない場合は（ステップＬ８のＮＯルート参照）、図３６のステップＬ９において、shape_listが空リストであるか否かを確認する。
ステップＬ９における確認の結果、shape_listが空リストでない場合には（ステップＬ９のＮＯルート参照）、ステップＬ１０に移行する。
【０２５６】
図３６のステップＬ１０においては、割り当て候補ノード集合探索部１３は、shape_list から許容可能な領域分割パターンを取り出し、shapeに設定する。また、ステップＬ１１において、取り出した分割パターンでの領域の分割個数をsに設定する。その後、ステップＬ７に戻る。
また、図３６のステップＬ８における確認の結果、空き領域がs個見つかった場合（ステップＬ８のＹＥＳルート参照）、およびステップＬ９における確認の結果、shape_listが空リストである場合には（ステップＬ９のＹＥＳルート参照）、それぞれ処理を終了する。
【０２５７】
［ＩＩＩ］効果
このように、実施形態の一例としての並列計算機システム１によれば、基準点決定部１２が、ジョブ属性を示す属性値毎に、ネットワークトポロジーでのノード割り当て基準点を設定する。そして、割り当て候補ノード集合探索部１３が、基準点から遠隔度が小さい方から、他のジョブによって使用中のノードを含まない指定された形状の領域を探索し、ジョブを割当てる計算ノード集合として選択する。
【０２５８】
これにより、同じ属性のジョブを基準点の近くに集中させることができる。すなわち、属性が共通のジョブを物理的に近い位置にある計算ノード２００の集合に処理させることができる。
また、他のジョブによって使用中のノードを探索対象から除外することで、探索にかかる演算を軽減することができる。
【０２５９】
さらに、割り当て候補ノード集合探索部１３が、空き領域探索を基準点近くのジョブに隣接するように行なうことで、空き領域のフラグメンテーションを抑えることができる。すなわち、割り当て候補ノード集合探索部１３が、実行中のジョブと隣接する領域を優先して探索する。これにより、ジョブ間に隙間があることによるノード領域の断片化の進行を緩和させることができる。
【０２６０】
また、ハッシュ情報１３３によりノード座標空間に割り当てられている実行中ジョブの位置を管理し、割り当て候補ノード集合探索部１３が、このハッシュ情報１３３を用いることで、ジョブを割当てる計算ノード集合を迅速かつ低負荷で探索することができる。
さらに、割り当て候補ノード集合探索部１３が、ジョブの属性値に対応する基準点に近い側の頂点の隣接点を優先して探索する。これにより、他の属性値に対応する基準点からはできるだけ遠い領域にジョブを割当てることができる。
【０２６１】
割り当て候補ノード制限部１４が、特定の属性値のジョブに対して割り当てるノード集合を制限することで、例えば、特定の属性値のジョブに対してノード集合を予約領域として割り当てることができ利便性が高い。
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０２６２】
例えば、上述した実施形態においては、ネットワークトポロジーが四角メッシュの例について示しているが、これに限定されるものではなく、三角メッシュ等、メッシュの形状に応じて種々変形して実施することができる。
また、上述した実施形態においては、遠隔度関数としてマンハッタン距離やユークリッド距離，チェビシェフ距離の距離関数を用いた例を示しているが、これに限定されるものではなく、これら以外の距離関数を用いてもよく種々変形して実施することができる。
【０２６３】
上述した開示により本実施形態を当業者によって実施・製造することが可能である。
［ＩＶ］付記
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
複数の計算ノードを備え、ジョブに対する演算処理を行なう計算機システムであって、
投入されるジョブ毎に、各ジョブのジョブ属性情報に対応させて、前記複数の計算ノードがそれぞれ配置されるノード座標空間にノード割り当て基準点をそれぞれ設定する基準点決定部と、
前記ノード座標空間において、前記ノード割り当て基準点からの通信時間の見積もり指標である遠隔度に関する所定の条件を満たす計算ノードの集合である計算ノード集合を探索する、ノード集合探索部と
を備えることを特徴とする計算機システム。
【０２６４】
（付記２）
前記ノード集合探索部が、
前記ノード座標空間におけるジョブが未割当の計算ノードのうち、前記ノード割り当て基準点からの遠隔度が小さい計算ノードを優先して計算ノード集合として選択することを特徴とする、付記１記載の計算機システム。
【０２６５】
（付記３）
前記ノード集合探索部が、
前記ノード座標空間に割り当てられている実行中ジョブの位置を管理する実行中ジョブ位置情報に基づき、ジョブを非実行中の前記計算ノードによる計算ノード集合を探索することを特徴とする、付記１または２記載の計算機システム。
【０２６６】
（付記４）
前記遠隔度が、前記ノード座標空間における複数のノード座標の間の遠隔度関数によって表されることを特徴とする、付記１〜付記３のいずれか１項に記載の計算機システム。
（付記５）
複数の計算ノードを備えジョブに対する演算処理を行なう計算機システムにおいて、前記ジョブを処理する処理方法であって、
投入されるジョブ毎に、各ジョブのジョブ属性情報に対応させて、前記複数の計算ノードがそれぞれ配置されるノード座標空間にノード割り当て基準点をそれぞれ設定する処理と、
前記ノード割り当て基準点からの通信時間の見積もり指標である遠隔度に関する所定の条件を満たす計算ノードの集合である計算ノード集合を探索する処理と
を備えることを特徴とする処理方法。
【０２６７】
（付記６）
前記ノード割り当て基準点からの遠隔度が小さい前記計算ノードを優先して選択することを特徴とする、付記５記載の処理方法。
（付記７）
前記ノード座標空間に割り当てられている実行中ジョブの位置を管理する実行中ジョブ位置情報に基づき、ジョブを非実行中の前記計算ノードによる計算ノード集合を探索することを特徴とする、付記５または６記載の処理方法。
【０２６８】
（付記８）
前記遠隔度が、前記ノード座標空間における複数のノード座標の間の遠隔度関数によって表されることを特徴とする、付記５〜付記７のいずれか１項に記載の処理方法。
（付記９）
複数の計算ノードを備えジョブに対する演算処理を行なう計算機システムにおいて前記ジョブを処理させる機能をコンピュータに実行させるためのジョブ処理プログラムであって、
投入されるジョブ毎に、各ジョブのジョブ属性情報に対応させて、前記複数の計算ノードがそれぞれ配置されるノード座標空間にノード割り当て基準点をそれぞれ設定する処理と、
前記ノード割り当て基準点からの通信時間の見積もり指標である遠隔度に関する所定の条件を満たす計算ノードの集合である計算ノード集合を探索する処理と
を前記コンピュータに実行させることを特徴とするジョブ処理プログラム。
【０２６９】
（付記１０）
前記ノード割り当て基準点からの遠隔度が小さい前記計算ノードを優先して選択する処理を前記コンピュータに実行させることを特徴とする、付記９記載のジョブ処理プログラム。
（付記１１）
前記ノード座標空間に割り当てられている実行中ジョブの位置を管理する実行中ジョブ位置情報に基づき、ジョブを非実行中の前記計算ノードによる計算ノード集合を探索する処理を前記コンピュータに実行させることを特徴とする、付記９または１０記載のジョブ処理プログラム。
【０２７０】
（付記１２）
前記遠隔度が、前記ノード座標空間における複数のノード座標の間の遠隔度関数によって表されることを特徴とする、付記９〜付記１１のいずれか１項に記載のジョブ処理プログラム。
【符号の説明】
【０２７１】
１０    ジョブスケジューラ
１１    ノード間情報設定部
１２    基準点決定部
１２１    初期配置決定部
１３    割り当て候補ノード集合探索部
１３１    実行待ちジョブ管理キュー
１３１ａ    ジョブ管理構造体（ジョブ管理制御表）
１３２    実行中ジョブ管理情報（実行中ジョブ管理表）
１３３    ハッシュ情報（ハッシュ表）
１４    割り当て候補ノード制限部
１００    ジョブスケジューラノード
１０１，２０１    ＣＰＵ
１０２，２０２    メモリ
１０３，２０３    ＮＩＣ
２００    計算ノード
【図１】
0006446989.tif 000002
【図２】
0006446989.tif 000003
【図３】
0006446989.tif 000004
【図４】
0006446989.tif 000005
【図５】
0006446989.tif 000006
【図６】
0006446989.tif 000007
【図７】
0006446989.tif 000008
【図８】
0006446989.tif 000009
【図９】
0006446989.tif 000010
【図１０】
0006446989.tif 000011
【図１１】
0006446989.tif 000012
【図１２】
0006446989.tif 000013
【図１３】
0006446989.tif 000014
【図１４】
0006446989.tif 000015
【図１５】
0006446989.tif 000016
【図１６】
0006446989.tif 000017
【図１７】
0006446989.tif 000018
【図１８】
0006446989.tif 000019
【図１９】
0006446989.tif 000020
【図２０】
0006446989.tif 000021
【図２１】
0006446989.tif 000022
【図２２】
0006446989.tif 000023
【図２３】
0006446989.tif 000024
【図２４】
0006446989.tif 000025
【図２５】
0006446989.tif 000026
【図２６】
0006446989.tif 000027
【図２７】
0006446989.tif 000028
【図２８】
0006446989.tif 000029
【図２９】
0006446989.tif 000030
【図３０】
0006446989.tif 000031
【図３１】
0006446989.tif 000032
【図３２】
0006446989.tif 000033
【図３３】
0006446989.tif 000034
【図３４】
0006446989.tif 000035
【図３５】
0006446989.tif 000036
【図３６】
0006446989.tif 000037
【図３７】
0006446989.tif 000038