(57)【要約】【課題】ジョブの実行終了時刻より前に該ジョブの実行が終了する際に、実行開始時刻を繰り上げるジョブを決定することにかかる時間を短縮すること。【解決手段】並列処理装置１０１は、図１の（１）で示すように、ジョブＡ〜Ｆをスケジュールする際に、各々のジョブを実行する順序を示す情報と、各々のジョブが使用する各座標軸におけるノードの数および位置とを記憶した整列ジョブリストＬを作成する。次に、図１の（２）で示すように、並列処理装置１０１は、例えばジョブＡの実行が終了する前に、整列ジョブリストＬを参照して、潜在空き空間ｒＲを特定する。並列処理装置１０１は、図１の（３）で示すように、ジョブＥ、Ｆから、Ｒｘｓｉｚｅ以下のｘサイズとなり、かつ、Ｒｙｓｉｚｅ以下のｙサイズとなるジョブＥを、実行開始時刻を繰り上げるジョブとして決定する。【選択図】図１
2018010492.tif 000002
【特許請求の範囲】
【請求項１】
複数の座標軸の各座標軸方向で隣接するノード同士が接続されておりプロセッサとメモリとを有する複数のノードに対する複数のジョブの各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブが使用するノードとを決定する際に、前記各々のジョブを実行する順序を示す情報と、前記各々のジョブが使用する前記各座標軸におけるノードの数および位置とを記憶したリストを作成し、
前記複数のジョブのうちのいずれかのジョブの実行が終了する前に、作成した前記リストを参照して、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、特定した前記各座標軸における未使用のノードの数と前記リストとに基づいて、前記複数のジョブから実行開始時刻を繰り上げるジョブを決定する、
制御部を有することを特徴とする並列処理装置。
【請求項２】
前記制御部は、
前記各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブに割り当てるノードとを決定する際に、さらに、前記各々のジョブが使用する前記各座標軸におけるノードの数を、入力された値が大きい程出力される値が単調に増加するハッシュ関数に入力することにより出力されたハッシュ値を記憶し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を前記ハッシュ関数に入力することにより出力されたハッシュ値を算出し、
算出した前記ハッシュ値と、記憶した前記ハッシュ値との比較結果に基づいて、前記複数のジョブから実行開始時刻を繰り上げるジョブを決定する、
ことを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記制御部は、
前記各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブに割り当てるノードとを決定する際に、前記各々のジョブを実行する順序と前記各々のジョブが使用する前記各座標軸におけるノードの位置とに基づいて、前記各々のジョブを複数のグループのいずれかに分類し、
分類した前記グループごとに、前記グループに分類した前記各々のジョブを実行する順序を示す情報と、前記各々のジョブが使用する前記各座標軸におけるノードの数および位置とを記憶したリストを作成し、
前記いずれかのジョブの実行が終了する前に、作成した前記いずれかのジョブが属するグループのリストを参照して、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、特定した前記各座標軸における未使用のノードの数と前記いずれかのジョブが属するグループのリストとに基づいて、前記いずれかのジョブが属するグループに属するジョブから実行開始時刻を繰り上げるジョブを決定する、
ことを特徴とする請求項１または２に記載の並列処理装置。
【請求項４】
前記制御部は、
前記複数のジョブのうちのいずれかのジョブの実行を開始する際に、作成した前記リストを参照して、前記いずれかのジョブが使用する前記各座標軸におけるノードに隣接し前記いずれかのジョブが使用しないノードに、前記各座標軸と垂直方向の前記複数のジョブのいずれにも使用されないノードがいくつあるかを処理要求元に通知する処理の実行依頼を送信し、
前記いずれかのジョブが使用しないノードから通知された前記複数のジョブのいずれにも使用されないノードの数に基づいて、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定する、
処理を実行することを特徴とする請求項１〜３のいずれか一つに記載の並列処理装置。
【請求項５】
コンピュータが、
複数の座標軸の各座標軸方向で隣接するノード同士が接続されておりプロセッサとメモリとを有する複数のノードに対する複数のジョブの各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブが使用するノードとを決定する際に、前記各々のジョブを実行する順序を示す情報と、前記各々のジョブが使用する前記各座標軸におけるノードの数および位置とを記憶したリストを作成し、
前記複数のジョブのうちのいずれかのジョブの実行が終了する前に、作成した前記リストを参照して、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、特定した前記各座標軸における未使用のノードの数と前記リストとに基づいて、前記複数のジョブから実行開始時刻を繰り上げるジョブを決定する、
処理を実行することを特徴とするジョブ管理方法。
【請求項６】
コンピュータに、
複数の座標軸の各座標軸方向で隣接するノード同士が接続されておりプロセッサとメモリとを有する複数のノードに対する複数のジョブの各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブが使用するノードとを決定する際に、前記各々のジョブを実行する順序を示す情報と、前記各々のジョブが使用する前記各座標軸におけるノードの数および位置とを記憶したリストを作成し、
前記複数のジョブのうちのいずれかのジョブの実行が終了する前に、作成した前記リストを参照して、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、特定した前記各座標軸における未使用のノードの数と前記リストとに基づいて、前記複数のジョブから実行開始時刻を繰り上げるジョブを決定する、
処理を実行することを特徴とするジョブ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置、ジョブ管理方法、およびジョブ管理プログラムに関する。
【背景技術】
【０００２】
従来、プロセッサとメモリとを有する複数のノードの各々のノードを、複数の座標軸の各座標軸方向で隣接するノード同士で接続する技術がある。そして、複数のノードの各々のノードに実行させるジョブについて、ジョブの実行開始時刻および実行終了時刻と、ジョブを実行するノードとを決定する技術がある。
【０００３】
関連する先行技術として、例えば、複数の配信データの配信を予約する際、追加される配信データの配信方式の種類に応じて、その配信データまたは既に予約済みの配信データの使用帯域や配信開始時刻等を自動的に変更し、配信スケジュールを調整するものがある。また、スケジュールの実行状況が予定と異なる場合、スケジュールの実行状況および希望条件のデータに基づいて、未実行な確定されたスケジュールであって繰り上げ変更することが可能なスケジュールを検索し、該スケジュールに関する情報を報知する技術がある。また、ジョブのリソース量と割り当て時間とを含むスケジューリング情報から、新たにスケジューリング対象となるジョブのリソース量のスケジューリングは可能だが予想実行時間に満たない空き時間を検索し、該ジョブを該空き時間にスケジューリングする技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−１６２４７０号公報
【特許文献２】特開２００５−１９００６３号公報
【特許文献３】特開２０１２−７３６９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、あるジョブの実行終了時刻より前に該ジョブの実行が終了する場合、ノードの数が増える程、実行待ちのジョブから実行開始時刻を繰り上げるジョブを決定することにかかる時間が増大することになる。
【０００６】
１つの側面では、本発明は、ジョブの実行終了時刻より前に該ジョブの実行が終了する際に、実行開始時刻を繰り上げるジョブを決定することにかかる時間を短縮することができる並列処理装置、ジョブ管理方法、およびジョブ管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、複数の座標軸の各座標軸方向で隣接するノード同士が接続されておりプロセッサとメモリとを有する複数のノードに対する複数のジョブの各々のジョブの実行開始時刻および実行終了時刻と各々のジョブが使用するノードとを決定する際に、各々のジョブを実行する順序を示す情報と、各々のジョブが使用する各座標軸におけるノードの数および位置とを記憶したリストを作成し、複数のジョブのうちのいずれかのジョブの実行が終了する前に、作成したリストを参照して、いずれかのジョブの実行終了時刻より前にいずれかのジョブの実行が終了する際の各座標軸における未使用のノードの数を特定し、いずれかのジョブの実行終了時刻より前にいずれかのジョブの実行が終了する際に、特定した各座標軸における未使用のノードの数とリストとに基づいて、複数のジョブから実行開始時刻を繰り上げるジョブを決定する並列処理装置、ジョブ管理方法、およびジョブ管理プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、ジョブの実行終了時刻より前に該ジョブの実行が終了する際に、実行開始時刻を繰り上げるジョブを決定することにかかる時間を短縮することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかる並列処理装置１０１の動作例を示す説明図である。
【図２】図２は、並列処理システム２００の構成例を示す説明図である。
【図３】図３は、ノードのハードウェア構成例を示す説明図である。
【図４】図４は、並列処理システム２００の機能構成例を示す説明図である。
【図５】図５は、スケジュール表のイメージ例を示す説明図である。
【図６】図６は、使用ノードと整列ジョブリストＬの関係を示す説明図（その１）である。
【図７】図７は、使用ノードと整列ジョブリストＬの関係を示す説明図（その２）である。
【図８】図８は、使用ノードと整列ジョブリストＬの関係を示す説明図（その３）である。
【図９】図９は、ｘ軸方向に狭い意味での隣のジョブを求めることで決まる潜在空き空間の例を示す説明図である。
【図１０】図１０は、ｙ軸方向に狭い意味での隣のジョブを求めることで決まる潜在空き空間の例を示す説明図である。
【図１１】図１１は、広い意味での隣のジョブを求めることで決まる潜在空き空間の例を示す説明図である。
【図１２】図１２は、ハッシュテーブルＨが記憶する情報をイメージ化した例を示す説明図である。
【図１３】図１３は、ジョブ管理情報４２０の一例を示す説明図である。
【図１４】図１４は、ジョブ実行予約時処理手順の一例を示すフローチャートである。
【図１５】図１５は、ジョブ実行終了時処理手順の一例を示すフローチャートである。
【図１６】図１６は、繰り上げ候補ジョブの決定例を示す説明図（その１）である。
【図１７】図１７は、繰り上げ候補ジョブの決定例を示す説明図（その２）である。
【図１８】図１８は、繰り上げ候補ジョブの決定例を示す説明図（その３）である。
【図１９】図１９は、空きノードとジョブ管理ノードとが協働して潜在空き空間を特定する方法の一例を示す説明図である。
【図２０】図２０は、実施例３におけるジョブ実行予約時処理手順の一例を示すフローチャートである。
【図２１】図２１は、ジョブ実行開始時処理手順の一例を示すフローチャートである。
【図２２】図２２は、境界面ノードに送信される情報の一例を示す説明図である。
【図２３】図２３は、境界面ノードが実行する隣接空きノード特定処理手順の一例を示すフローチャートである。
【図２４】図２４は、空き計算ノードが実行する処理手順の一例を示すフローチャートである。
【図２５】図２５は、ジョブ管理ノードが実行する処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示の並列処理装置、ジョブ管理方法、およびジョブ管理プログラムの実施の形態を詳細に説明する。
【００１１】
図１は、本実施の形態にかかる並列処理装置１０１の動作例を示す説明図である。並列処理装置１０１は、ジョブの実行開始時刻および実行終了時刻と、計算資源とを割り当てるスケジュールを行うコンピュータである。例えば、並列処理装置１０１は、プロセッサとメモリとを有する複数のノードのいずれかを計算資源として、ジョブに割り当てるというスケジューリングを行う。以下の説明では、プロセッサとメモリとを有し、ジョブが割り当てられるノードを、「計算ノード」と称する。また、実行開始時刻および実行終了時刻をまとめて、「実行予定時間」と称する。
【００１２】
ここで、ジョブとは、ユーザから見た処理の単位を示す。ジョブと似たような概念として、プログラムの実行単位であって、固有のメモリ空間を有するプロセスや、プログラムの実行単位であって、同一プロセスに属するもの同士でメモリ空間を共有するスレッド等がある。従って、並列処理装置１０１は、複数のジョブとして、複数のスレッドや複数のプロセスに計算資源を割り当ててもよい。ここで、ジョブは、例えば、科学技術計算等の処理といったジョブである。また、並列処理装置１０１は、例えば、ハイ・パフォーマンス・コンピューティング（ＨＰＣ：Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）分野で使用されるコンピュータである。
【００１３】
並列処理装置１０１は、複数の計算ノードのいずれかでもよいし、複数の計算ノードと接続する別の装置でもよい。図１の説明では、並列処理装置１０１は、複数の計算ノードと接続する別の装置であるとする。
【００１４】
また、複数の計算ノードは、複数の座標軸の各座標軸方向で隣接する計算ノード同士が接続されている。そして、計算ノード同士が接続することにより、複数の座標軸を有するメッシュ状のネットワークまたはトーラス状のネットワークを形成する。そして、ユーザから要求されることによって決められる所定の時間帯の実行のために予約する計算ノード群は、ネットワーク内の互いに重なりのないサブメッシュまたはサブトーラスを形成することが多い。サブメッシュまたはサブトーラスを形成することにより、異なるジョブが同じネットワーク経路を同時に使用することによる通信干渉を避けることができる。
【００１５】
ここで、前述した複数の座標軸の各々の座標軸同士は、直交することが好ましいが、斜めに交わっていてもよい。そして、以下の説明では、形成されるネットワークがメッシュ状である場合、一般次元のユークリッド空間に埋め込まれているとみなし、メッシュと呼ぶ代わりにｎ次元直方体、または単に直方体という表現も使用する。形成されるネットワークがトーラスの場合も、ラップアラウンドのリンク先には、メッシュとみなした場合のジョブ配置が反復されているとみなすことによって、サブメッシュないしサブトーラスを一般次元の直方体と対応付けることにする。
【００１６】
ここで、各ジョブに、互いに重なりのないネットワーク内のサブメッシュを割り当てる処理は、直方体から部分集合を、互いに共通部分がない直方体であるように切り出す、または直方体領域内に、互いに共通部分がない直方体を詰め込む処理とみなせる。そして、この処理は、一般にｎ次元の箱詰め問題として知られ、最適となるための計算は、対象となる資源の集合規模が拡大するとき、計算時間が急激に増大する、いわゆるＮＰ（Ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｐｏｌｙｎｏｍｉａｌ）困難問題であることが知られている。
【００１７】
また、並列処理装置１０１は、現在空いている資源に対するスケジューリングだけでなく、未来の実行開始予約時間も含めてスケジューリングする。従って、スケジューリングによって決められるジョブの実行開始時刻および実行終了時刻は、未来の時刻となる。具体的には、並列処理装置１０１は、ジョブが要求するノード資源量だけでなく、ジョブの実行予定時間を元に、ジョブの使用する計算ノード資源および時間帯を予約する。ただし、ジョブの実行予定時間は、通常はジョブを投入したユーザまたは、並列処理装置１０１の管理者が指定するものであり、実際のジョブの実行時間より長く見積もられて指定されることが多い。そのため、ジョブの実行予定時間より早く、ジョブが終了するケースが多い。このように、予定より早くジョブが終了したため空いた資源を有効活用するために、実行待ちであった実行予約ジョブの開始時刻を繰り上げて実行開始することが考えられる。
【００１８】
しかしながら、あるジョブの実行終了時刻より前に該ジョブの実行が終了する場合、ノードの数が増える程、実行待ちのジョブから実行開始時刻を繰り上げるジョブを決定することにかかる時間が増大することになる。繰り上げるジョブを決定することにかかる時間が長くなると、本来なら実行時間繰り上げに利用できたはずの資源が、空き時間不足のため、使用できなくなる恐れがある。このように、ジョブの早期終了による実行開始時刻を繰り上げ可能なジョブを、通常のスケジューリングにおける箱詰め問題の解の探索時間に比べて短くし、かつ、スケジューラ自体のＣＰＵ時間が、事前準備に伴って増加することを抑制することが求められる。
【００１９】
そこで、本実施の形態では、スケジュール決定時にジョブが使用する各座標軸におけるノードの数および位置を記憶したリストを作成する。さらに、本実施の形態では、ジョブの実行が終了する際の各座標軸における未使用のノードの数を、予め特定しておく。これにより、本実施の形態では、ジョブが終了した時に、繰り上げ可能なジョブを高速に求める方法を提示する。
【００２０】
図１を用いて、並列処理装置１０１の動作例について説明する。図１の例では、ｎ次元の直方体として、複数の計算ノードは、ｘ座標軸、ｙ座標軸という２次元のメッシュ状のネットワークを形成するものとする。さらに、図１では、複数のジョブの各々のジョブとして、ジョブＡ〜Ｆのスケジュールを行うものとする。そして、スケジュールの結果、ジョブＡ〜Ｄは、未来時刻となる時刻ｔ１に実行する予定となり、ジョブＥ、Ｆは、時刻ｔ１より後の時刻ｔ２に実行する予定になるとする。
【００２１】
並列処理装置１０１は、図１の（１）で示すように、ジョブＡ〜Ｆをスケジュールする際に、各々のジョブを実行する順序を示す情報と、各々のジョブが使用する各座標軸におけるノードの数および位置とを記憶したリストを作成する。ここで、作成するリストは、繰り上げるジョブを高速に絞り込むためのデータ構造であり、ジョブを識別する情報が格納される。以下、作成するリストを、「整列ジョブリスト」と称する。
【００２２】
図１において、未来時刻となるｔ１に実行する予定のジョブＡ〜Ｄが使用する計算ノードは、グラフ１０２で示す通りである。グラフ１０２で示すようにジョブＡ〜Ｄが使用する計算ノードによって領域が生成される。（ｘ，ｙ）空間で、ジョブＡ〜Ｄが使用する計算ノードが示す領域を、「ジョブの使用ノード領域」と称する。図１では示していないが、ジョブＥ、Ｆが使用する計算ノードも、グラフ１０２と同様に示すことができる。例えば、ジョブのｘ座標軸における計算ノードの数は、ジョブのｘ軸における幅に相当し、ジョブのｘ座標軸における計算ノードの位置は、ジョブのｘ座標に相当する。
【００２３】
並列処理装置１０１は、ジョブのｘ座標軸におけるノードの数を記憶した整列ジョブリストＬｘｓｉｚｅに、ジョブＡ〜Ｆのｘ座標軸における計算ノードの数を格納することにより、整列ジョブリストＬｘｓｉｚｅを作成する。同様に、並列処理装置１０１は、ジョブのｙ座標軸におけるノードの数を記憶した整列ジョブリストＬｙｓｉｚｅに、ジョブＡ〜Ｆのｙ座標軸における計算ノードの数を格納することにより、整列ジョブリストＬｙｓｉｚｅを作成する。ここで、図１で示す整列ジョブリストＬｘｓｉｚｅ、Ｌｙｓｉｚｅの各要素は、値が小さいジョブほど下に位置し、値が大きいジョブほど上に位置するものとする。
【００２４】
同様に、並列処理装置１０１は、ジョブのｘ座標軸におけるノードの位置として、ジョブＡ〜Ｆの最小ｘ座標の値を格納することにより、整列ジョブリストＬｘｍｉｎを作成する。例えば、整列ジョブリストＬｘｍｉｎには、ジョブＢの最小ｘ座標Ｂｘｍｉｎ、ジョブＡの最小ｘ座標Ａｘｍｉｎ、ジョブＣの最小ｘ座標Ｃｘｍｉｎ、ジョブＤの最小ｘ座標Ｄｘｍｉｎの順に登録される。さらに、図１では図示していないが、ジョブＥの最小ｘ座標、ジョブＦの最小ｘ座標も整列ジョブリストＬｘｍｉｎ内の適切な位置に登録される。同様に、並列処理装置１０１は、ジョブＡ〜Ｆの最大ｘ座標の値を格納した整列ジョブリストＬｘｍａｘを作成する。同様に、並列処理装置１０１は、ジョブＡ〜Ｆの最小ｙ座標の値を格納した整列ジョブリストＬｙｍｉｎと、ジョブＡ〜Ｆの最大ｙ座標の値を格納した整列ジョブリストＬｙｍａｘとを作成する。また、並列処理装置１０１は、ジョブＡ〜Ｆを実行する順序を示す情報を格納した整列ジョブリストＬｏｒｄｅｒを作成する。整列ジョブリストＬｏｒｄｅｒには、例えば、ジョブＡ〜Ｆを実行する順番が格納されてもよいし、ジョブＡ〜Ｆを実行する時刻を示す値が格納されてもよい。
【００２５】
次に、並列処理装置１０１は、整列ジョブリストＬを参照して、ジョブＡの実行終了時刻より前にジョブＡの実行が終了する際の各座標軸における未使用のノードの数を特定する。ここで、例えば、ジョブＡの実行が終了する際の各座標軸における未使用のノードの位置は、グラフ１０２上では、太い破線が示す空間ｒＲとなる。以下、ジョブの実行が終了する際の各座標軸における未使用のノードの数を、「潜在空き空間」と呼称する。潜在空き空間には、各座標軸における未使用のノードの数が含まれていればよいが、各座標軸における未使用のノードの位置の情報が含まれてもよい。潜在空き空間は、可能な限り大きい領域となることが好ましい。また、潜在空き空間を特定するタイミングは、ジョブの実行が終了する前であればいつでもよい。従って、例えば、並列処理装置１０１は、ジョブのスケジューリングが終了したときや、または、ジョブの実行を開始したときに、そのジョブの潜在空き空間を特定する。また、並列処理装置１０１は、ジョブＡ〜Ｆのいずれかのジョブの潜在空き空間を特定してもよいし、全てのジョブの潜在空き空間を特定してもよい。例えば、並列処理装置１０１は、ジョブが予定より早く終了することがないことが予めわかっているジョブに対しては、潜在空き空間を特定しなくてもよい。
【００２６】
ここで、整列ジョブリストＬを参照して、ジョブＡの潜在空き空間ｒＲを特定する一例を示す。例えば、並列処理装置１０１は、整列ジョブリストＬｘｍｉｎを参照し、ジョブＡの次の要素として、ジョブＣを得る。ここで、時刻ｔ０において、ジョブＡの最小ｙ座標〜最大ｙ座標と、ジョブＣの最小ｙ座標〜最大ｙ座標とは重ならないため、さらに、次の要素として、ジョブＤを得る。時刻ｔ０において、ジョブＡの最小ｙ座標〜最大ｙ座標とジョブＣの最小ｙ座標〜最大ｙ座標とは一部が重なるため、並列処理装置１０１は、潜在空き空間の最大ｘ座標を、ジョブＤの最小ｘ座標として特定する。このように、並列処理装置１０１は、潜在空き空間を特定する。より具体的な潜在空き空間の特定方法は、図９〜図１１で説明する。
【００２７】
図１の例では、図１の（２）で示すように、並列処理装置１０１は、例えばジョブＡの実行が終了する前に、整列ジョブリストＬを参照して、潜在空き空間ｒＲを特定する。図１の例では、ｘ座標軸における未使用のノードの数、すなわち、潜在空き空間ｒＲのｘサイズがＲｘｓｉｚｅであるとし、ｙ座標軸における未使用のノードの数、すなわち、潜在空き空間ｒＲのｙサイズがＲｙｓｉｚｅであるとする。
【００２８】
次に、並列処理装置１０１は、潜在空き空間を特定したいずれかのジョブの実行終了時刻より前にいずれかのジョブの実行が終了する際に、いずれかのジョブの潜在空き空間と整列ジョブリストＬとに基づいて、実行開始時刻を繰り上げるジョブを決定する。図１の例では、現在時刻が時刻ｔ１となり、ジョブＡ〜Ｄが実行開始した後、ジョブＡの実行終了時刻より前にいずれかのジョブの実行が終了するとする。この時点で時刻ｔ２には達していないものとする。従って、この時点で実行開始していないジョブは、整列ジョブリストＬｏｒｄｅｒが示すように、時刻ｔ２に実行を開始するジョブＥ、Ｆとなる。よって、並列処理装置１０１は、実行待ちとなるジョブＥ、Ｆから、実行開始時刻を繰り上げるジョブを決定する。
【００２９】
具体的には、並列処理装置１０１は、整列ジョブリストＬｘｓｉｚｅ、Ｌｙｓｉｚｅを参照して、ジョブＡの潜在空き空間ｒＲのＲｘｓｉｚｅ以下のｘサイズとなり、かつ、ジョブＡの潜在空き空間ｒＲのＲｙｓｉｚｅ以下のｙサイズとなるジョブを探索する。図１の例では、並列処理装置１０１は、図１の（３）で示すように、ジョブＥ、Ｆから、Ｒｘｓｉｚｅ以下のｘサイズとなり、かつ、Ｒｙｓｉｚｅ以下のｙサイズとなるジョブＥを、実行開始時刻を繰り上げるジョブとして決定する。そして、並列処理装置１０１は、図１の（４）で示すように、潜在空き空間ｒＲにジョブＥを割り当てる。
【００３０】
このように、並列処理装置１０１は、事前に潜在空き空間を特定しているため、実行開始時刻を繰り上げるジョブを高速に決定することができる。また、図１の例では、整列ジョブリストＬｘｓｉｚｅ、Ｌｙｓｉｚｅを用いたが、ｘ座標軸、およびｙ座標軸におけるノードの数と単調増加するハッシュ値をキーとして登録したハッシュテーブルを利用し、実行開始時刻を繰り上げるジョブの候補を特定してもよい。この方法は、図１２〜図１５で示す。次に、並列処理装置１０１を、並列処理システム２００に適用した例を図２に示す。
【００３１】
図２は、並列処理システム２００の構成例を示す説明図である。並列処理システム２００は、ジョブ管理ノードａｄｎと、複数の計算ノードの各計算ノードｃｎとを有する。ここで、ジョブ管理ノードａｄｎが、図１で示した並列処理装置１０１に相当する。各計算ノードｃｎは、ｎを２以上として、ｎ次元のメッシュ構造またはトーラス構造のネットワークを形成する。本実施の形態では、ｎ＝２とする２次元のメッシュネットワーク２０１を形成するものとする。この場合、各計算ノードは、並列処理システム２００内での位置を、図２で示すように（ｘ，ｙ）座標で示すことができる。
【００３２】
ジョブ管理ノードａｄｎは、ジョブの実行予定時間および割り当て資源をスケジューリングする。ジョブ管理ノードａｄｎは、主として、計算資源の管理を行う。具体的には、ジョブ管理ノードａｄｎは、実行依頼されたジョブに対して、計算ノード資源と、そのノードを使用可能な時間帯の組を実行予約情報として割り当てておく。そして、ジョブ管理ノードａｄｎは、あるジョブの実行開始予定時刻になったら、割り当てておいた計算ノードに対してジョブの実行を依頼する。
【００３３】
計算ノードｃｎは、主として、ジョブ実行の制御を行う。具体的には、計算ノードｃｎは、ジョブ管理ノードａｄｎから依頼されたジョブについて、ジョブの実行開始・実行状態の監視・終了等を制御する。ただし、計算ノードｃｎは、ジョブ管理ノードａｄｎで実行される部分からの処理依頼に応じ、計算資源の管理の一部を分担する場合がある。
【００３４】
次に、ジョブ管理ノードａｄｎ、計算ノードｃｎを総称したノードのハードウェア構成例を示す。
【００３５】
（ノードのハードウェア構成例）
図３は、ノードのハードウェア構成例を示す説明図である。ノードは、ＣＰＵ３０１と、メモリ３０２と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０３と、を有する。また、各構成部はバス３１０によってそれぞれ接続される。
【００３６】
ここで、ＣＰＵ３０１は、ノード全体の制御を司る制御装置である。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する記憶装置である。より具体的には、例えば、フラッシュＲＯＭがＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）やファームウェアなどのプログラムを記憶し、ＲＯＭがアプリケーションプログラムを記憶し、ＲＡＭがＣＰＵ３０１のワークエリアとして使用される。メモリ３０２に記憶されているプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させることになる。
【００３７】
Ｉ／Ｆ３０３は、他のノードからのデータの入出力を制御する装置である。具体的には、Ｉ／Ｆ３０３は、インターコネクトと呼ばれるノード間のコンピュータネットワークに接続する。
【００３８】
図４は、並列処理システム２００の機能構成例を示す説明図である。並列処理装置１０１は、制御部４０１を有する。制御部４０１は、ジョブスケジューラ４１０を有する。そして、ジョブスケジューラ４１０は、スケジューリング部４１１と、作成部４１２と、潜在空き空間特定部４１３と、決定部４１４と、を含む。ジョブスケジューラ４１０は、記憶装置に記憶されたプログラムをＣＰＵ３０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したメモリ３０２などである。また、各部の処理結果は、メモリ３０２や、ＣＰＵ３０１のレジスタや、ＣＰＵ３０１のキャッシュメモリ等に格納される。
【００３９】
また、ジョブスケジューラ４１０は、整列ジョブリストＬｘｍｉｎ、Ｌｘｍａｘ、…、Ｌｓｉｚｅ、ハッシュテーブルＨｘｍｉｎ、Ｈｘｍａｘ、…、Ｌｓｉｚｅ、ジョブ管理情報４２０にアクセス可能である。整列ジョブリストＬ、ハッシュテーブルＨ、ジョブ管理情報４２０は、メモリ３０２といった記憶装置に格納されている。ジョブ管理情報４２０は、ジョブごとに存在する。整列ジョブリストＬ、ハッシュテーブルＨ、ジョブ管理情報４２０の関係については、図１３で示す。
【００４０】
また、計算ノードｃｎは、制御部４３１を有する。そして、制御部４３１は、実行部４３２と、隣接空きノード特定部４３３とを有する。制御部４３１は、記憶装置に記憶されたプログラムをＣＰＵ３０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したメモリ３０２などである。また、各部の処理結果は、メモリ３０２や、ＣＰＵ３０１のレジスタや、ＣＰＵ３０１のキャッシュメモリ等に格納される。
【００４１】
ここで、本実施の形態では、大きく分類して実施例１〜実施例３のいずれかを採用することができる。まず、実施例１の機能について説明する。実施例１の詳細な説明は、図６〜図１５で示す。
【００４２】
スケジューリング部４１１は、複数のジョブの各ジョブの実行予定時間と計算ノードとを割り当てる。
【００４３】
作成部４１２は、スケジューリング部４１１がスケジュールを決定する際に、整列ジョブリストＬを作成する。具体的に作成される整列ジョブリストＬの一覧は、図１３で示す。
【００４４】
潜在空き空間特定部４１３は、複数のジョブのうちのいずれかのジョブの実行が終了する前に、作成部４１２が作成した整列ジョブリストＬを参照して、いずれかのジョブの潜在空き空間を特定する。
【００４５】
決定部４１４は、いずれかのジョブの実行終了時刻より前にいずれかのジョブの実行が終了する際に、潜在空き空間特定部４１３が特定した潜在空き空間と整列ジョブリストＬとに基づいて、複数のジョブから実行開始時刻を繰り上げるジョブを決定する。
【００４６】
計算ノードｃｎが有する実行部４３２は、ジョブスケジューラ４１０の指示に従って、ジョブを実行する。
【００４７】
また、作成部４１２は、各々のジョブが使用する前記各座標軸におけるノードの数を、入力された値が大きい程出力される値が単調に増加するハッシュ関数に入力することにより出力されたハッシュ値を記憶するハッシュテーブルＨｓｉｚｅを作成する。ハッシュ関数の具体例は、図１２で示す。次に、決定部４１４は、いずれかのジョブの実行終了時刻より前にいずれかのジョブの実行が終了する際に、潜在空き空間特定部４１３が特定した潜在空き空間の各座標軸における計算ノードｃｎの数をハッシュ関数に入力することにより、ハッシュ値を算出する。そして、決定部４１４は、算出したハッシュ値と、ハッシュテーブルＨｓｉｚｅに記憶したハッシュ値との比較結果に基づいて、複数のジョブから実行開始時刻を繰り上げるジョブを決定してもよい。
【００４８】
次に、実施例２の機能について説明する。実施例２は、メッシュネットワーク２０１の規模が大きい場合に有効な手法であり、メッシュネットワーク２０１を分割し、分割したグループ内のジョブ、または近隣のグループのジョブに繰り上げ候補ジョブを絞る手法である。実施例２の詳細な説明は、図１６〜図１８で示す。
【００４９】
作成部４１２は、スケジューリング部４１１がスケジュールを決定する際に、各々のジョブを実行する順序と各々のジョブの使用ノード領域とに基づいて、各々のジョブを複数のグループのいずれかに分類する。ここで、グループを、「区画」と称する。次に、作成部４１２は、分類した区画ごとに、区画に分類した各々のジョブに関する整列ジョブリストＬを作成する。従って、作成部４１２は、区画の数だけ整列ジョブリストＬを作成することになる。
【００５０】
次に、潜在空き空間特定部４１３は、いずれかのジョブの実行が終了する前に、いずれかのジョブが属する区画の整列ジョブリストＬを参照して、潜在空き空間を特定する。そして、決定部４１４は、いずれかのジョブの実行終了時刻より前にいずれかのジョブの実行が終了する際に、特定した潜在空き空間と前述の区画の整列ジョブリストＬとに基づいて、前述の区画に属するジョブから実行開始時刻を繰り上げるジョブを決定する。
【００５１】
次に、実施例３の機能について説明する。実施例３は、ジョブスケジューラ４１０が行う処理の一部を、計算ノードｃｎに実行させることにより、負荷分散を図る手法である。実施例３の詳細な説明は、図１９〜図２５で示す。
【００５２】
潜在空き空間特定部４１３は、いずれかのジョブの実行を開始する際に、作成した前記リストを参照して、前記いずれかのジョブの使用ノード領域に隣接し、いずれかのジョブが使用しないノードに、隣接空きノード特定処理の実行依頼を送信する。ここで、隣接空きノード特定処理は、各座標軸と垂直方向の複数のジョブのいずれにも使用されないノードがいくつあるかを処理要求元に通知する処理である。
【００５３】
次に、隣接空きノード特定処理の実行依頼を受け付けた計算ノードｃｎの隣接空きノード特定部４３３は、隣接空きノード特定処理を実行する。実行した結果は、処理要求元となるジョブ管理ノードａｄｎに送信される。
【００５４】
そして、いずれかのジョブが使用しないノードから複数のジョブのいずれにも使用されないノードの数をジョブ管理ノードａｄｎが受け付けたとする。この場合、潜在空き空間特定部４１３は、複数のジョブのいずれにも使用されないノードの数に基づいて、いずれかのジョブの潜在空き空間を特定する。
【００５５】
図５は、スケジュール表のイメージ例を示す説明図である。図５では、ジョブスケジューラ４１０が管理するスケジュール表のイメージ例を示す。図５で示すグラフ５０１は、ジョブの実行予定時間および割り当て資源を示す。グラフ５０１の横軸は、時刻を示す。グラフ５０１の縦軸は、図示を容易にするために、メッシュネットワーク２０１の（ｘ，ｙ）空間を、ｘ軸またはｙ軸に射影したものである。
【００５６】
例えば、グラフ５０１は、薄い網掛けを付与したジョブＡが、時刻ｔ１に終了予定の実行中ジョブとして割り当てられていることを示す。ここで、ジョブＡは、ジョブＡの割り当て時間帯に現在時刻ｔ０が含まれるため、現在実行中である。また、グラフ５０１は、濃い網掛けを付与したジョブＢが、時刻ｔ１からｔ２という実行予定期間に実行予約されたジョブとして割り当てられていることを示す。
【００５７】
また、スケジュール表における、ジョブに割り当てられた領域、具体的には、グラフ５０１内の薄い網掛けや濃い網掛けを付与した領域が、図１で示した使用ノード領域となる。次に、ジョブが使用する使用ノードと、整列ジョブリストＬとの関係を、図６〜図８を用いて説明する。
【００５８】
（実施例１）
実施例１は、複数のジョブのいずれかのジョブが予定より早く終了する際に、空き領域になると思われる資源のひとまとまりとして、できるだけ大きい領域を求める方法で用いる整列ジョブリストＬを作成する例を説明する。
【００５９】
図６は、使用ノードと整列ジョブリストＬの関係を示す説明図（その１）である。また、図７は、使用ノードと整列ジョブリストＬの関係を示す説明図（その２）である。図６に示すグラフ６０１は、図６〜図８で示す整列ジョブリストＬの例として、ジョブＡ〜Ｄの使用ノード領域ｒＡ〜ｒＤを示す。また、図７では、５つの整列ジョブリストＬについて示す。図７で示す５つの整列ジョブリストＬは、左側にあるほど値が小さく、右側にあるほど値が大きいことを示す。
【００６０】
図６の例について、ジョブＡ〜Ｄの使用ノード領域ｒＡ〜ｒＤに最小ｘ座標に関して整列した整列ジョブリストＬｘｍｉｎは、図７で示すように、値が小さい順に、ジョブＡ、Ｂ、Ｃ、Ｄという要素を有する。同様に、最大ｘ座標に関して整列した整列ジョブリストＬｘｍａｘは、図７で示すように、値が小さい順に、ジョブＡ、Ｂ、Ｄ、Ｃという要素を有する。同様に、最小ｙ座標に関して整列した整列ジョブリストＬｙｍｉｎは、図７で示すように、値が小さい順に、ジョブＤ、Ｂ、Ｃ、Ａという要素を有する。
【００６１】
同様に、最大ｙ座標に関して整列した整列ジョブリストＬｙｍａｘは、図７で示すように、値が小さい順に、ジョブＢおよびジョブＤ、Ｃ、Ａという要素を有する。図６の例では、使用ノード領域ｒＢ、ｒＤの最大ｙ座標は同一であるため、Ｌｙｍａｘは、ジョブＢとジョブＤとを、同一の要素内に格納している。同様に、使用ノード領域のサイズで整列した整列ジョブリストＬｓｉｚｅは、図７で示すように、値が小さい順に、ジョブＤ、Ｂ、Ｃ、Ａという要素を有する。また、図７で示した整列ジョブリストＬの各要素は、ジョブごとに管理される管理データからポイントされる。整列ジョブリストＬの各要素へのポイントの様子を、図８を用いて説明する。
【００６２】
図８は、使用ノードと整列ジョブリストＬの関係を示す説明図（その３）である。ジョブＡのジョブ管理情報４２０Ａは、ジョブＡの属性パラメタとして、最小ｘ座標、最大ｘ座標、最小ｙ座標、最大ｙ座標、サイズを有する。そして、ジョブ管理情報４２０Ａ内の最小ｘ座標は、整列ジョブリストＬｘｍｉｎの要素Ａをポイントする。同様に、ジョブ管理情報４２０Ａ内の最大ｘ座標は、整列ジョブリストＬｘｍａｘの要素Ａをポイントする。同様に、ジョブ管理情報４２０Ａ内の最小ｙ座標は、整列ジョブリストＬｙｍｉｎの要素Ａをポイントする。同様に、ジョブ管理情報４２０Ａ内のサイズは、整列ジョブリストＬｓｉｚｅの要素Ａをポイントする。
【００６３】
また、図８に示したジョブ管理情報４２０Ａは、配置（ｘ，ｙ）に関する情報を属性パラメタとして有するが、さらに、実行予定時間に関する情報を有してもよい。ジョブ管理情報４２０のより詳細な説明については、図１３で示す。
【００６４】
（潜在空き空間の求め方）
次に、複数のジョブのいずれかのジョブが予定より早く終了する際に、空き領域になると思われる資源のひとまとまりとして、できるだけ大きい領域を求める方法について、図９〜図１１を用いて説明する。図９〜図１１の説明では、ジョブＡ〜Ｆのうち、ジョブＡが予定より早く終了するものとする。このできるだけ大きい領域を求める方法として、実施例１では、潜在空き空間を特定する。ジョブスケジューラ４１０は、求めた潜在空き空間を、実行待ちジョブの開始時刻の繰り上げのヒント情報として使用する。ヒント情報として使用できる理由として、潜在空き空間に含まれるサイズを有する実行待ちジョブは、少なくとも開始時刻を繰り上げ可能なためである。
【００６５】
潜在空き空間の例として、ジョブスケジューラ４１０は、狭い意味での隣のジョブを求めることで決まる潜在空き空間を特定してもよいし、広い意味での隣のジョブを求めることで決まる潜在空き空間を特定してもよい。狭い意味での隣のジョブを求める例について、図９、図１０を用いて説明する。狭い意味での隣のジョブを求める例では、ｘ軸方向に狭い意味での隣のジョブを求める例と、ｘ軸方向に狭い意味での隣のジョブを求める例とがある。ｘ軸方向に狭い意味での隣のジョブを求める例について、図９を用いて説明する。
【００６６】
図９は、ｘ軸方向に狭い意味での隣のジョブを求めることで決まる潜在空き空間の例を示す説明図である。図９に示すグラフ９０１は、ジョブＡ〜Ｆの使用ノード領域ｒＡ〜ｒＦを示す。グラフ９０１が示すように使用ノード領域ｒＡから、最小ｙ座標と最大ｙ座標は使用ノード領域ｒＡから変えないまま、使用ノード領域ｒＡをｘ軸の正方向と負方向に広げていった領域Ｐがある。このような領域のことを、「ｘ軸方向に狭い意味での隣のジョブを求めることで決まる潜在空き空間」と呼ぶ。ｘ軸方向に狭い意味での隣のジョブを求めることで決まる潜在空き空間をｒＰとするとき、ジョブスケジューラ４１０は、ｒＰを以下の通りに求める。
【００６７】
ジョブスケジューラ４１０は、ジョブＡの最小ｙ座標〜最大ｙ座標の範囲で、ジョブＡの最大ｘ座標から、ｘ軸の正方向へ伸ばして最初に重なるジョブを探し、見つかったジョブの最小ｘ座標を、ｒＰの最大ｘ座標として決定する。グラフ９０１の例では、ｒＰの最大ｘ座標は、ジョブＦの最小ｘ座標となる。より具体的には、ジョブスケジューラ４１０は、整列ジョブリストＬｘｍｉｎを参照して、ジョブＡから最小ｘ座標の値を増やす方向にある要素を選択する。ジョブスケジューラ４１０は、選択した要素のジョブがジョブＡの最小ｙ座標〜最大ｙ座標の範囲になければ、選択した要素の次の要素を選択し、同様の処理を繰り返す。また、選択した要素のジョブがジョブＡの最小ｙ座標〜最大ｙ座標の範囲にあれば、選択した要素のジョブが、最初に重なるジョブとなる。従って、この場合、ジョブスケジューラ４１０は、選択した要素の最小ｘ座標を、ｒＰの最大ｘ座標として決定する。
【００６８】
また、ジョブスケジューラ４１０は、ｒＰの最大ｘ座標と同様の方法により、ｒＰの最小ｘ座標を決定する。また、ｒＰの最大ｙ座標は、ｒＡの最大ｙ座標と同一となる。同様に、ｒＰの最小ｙ座標は、ｒＡの最小ｙ座標と同一となる。次に、ｙ軸方向に狭い意味での隣のジョブを求める例について、図１０を用いて説明する。
【００６９】
図１０は、ｙ軸方向に狭い意味での隣のジョブを求めることで決まる潜在空き空間の例を示す説明図である。図９で行った手順についてｘとｙとを交換することにより、ジョブスケジューラ４１０は、ｙ軸方向に狭い意味での隣のジョブを求めることで決まる潜在空き空間を得る。
【００７０】
ｙ軸方向に狭い意味での隣のジョブを求めることで決まる潜在空き空間をｒＱとすると、ｒＱは、図１０で示すようになる。具体的には、ｒＱの最大ｙ座標は、ジョブＣの最小ｙ座標となり、ｒＱの最小ｙ座標は、ジョブＤの最大ｙ座標となる。広い意味での隣のジョブを求めることで決まる潜在空き空間について、図１１を用いて説明する。
【００７１】
図１１は、広い意味での隣のジョブを求めることで決まる潜在空き空間の例を示す説明図である。ここで、広い意味での隣のジョブを求めることで決まる潜在空き空間を、図９、図１０で説明したｒＰ、ｒＱが求まった状況で、下記のように求めたｒＲとする。
【００７２】
ジョブスケジューラ４１０は、ｒＰをｙ軸の正方向と負方向とに広げて、狭い意味での隣のジョブを求める。ここで、ｒＰをｙ軸の正方向と負方向とに広げ、隣のジョブと重ならない最大の空間を、ｒＰ’とする。ジョブスケジューラ４１０は、図９で示した手順と同様に、整列ジョブリストＬを利用してｒＰ’を求める。また、ジョブスケジューラ４１０は、ｒＱをｘ軸の正方向と負方向とに広げて、狭い意味での隣のジョブを求める。ここで、ｒＱをｘ軸の正方向と負方向とに広げ、隣のジョブと重ならない最大の空間を、ｒＱ’とする。ジョブスケジューラ４１０は、図９で示した手順と同様に、整列ジョブリストＬを利用してｒＱ’を求める。そして、ジョブスケジューラ４１０は、ｒＰ’とｒＱ‘との共通部分を、ｒＲとする。
【００７３】
図１１の例では、ｒＰ’＝ｒＱ’となることから、ｒＰ’＝ｒＱ’＝ｒＲとなる。図１の例では、ｒＲを、太い破線で示す。
【００７４】
（繰り上げ可能なジョブの候補の絞り方）
潜在空き空間を特定した後、ジョブスケジューラ４１０は、特定した潜在空き空間を検索キーとして、実行予約されたジョブの中から、開始繰り上げジョブの候補を絞りこむ。候補となるジョブは、下記２つの条件がともに満たされたジョブである。１つ目の条件は、ジョブの要求資源量が、潜在空き空間以下のサイズになることである。ここで、ジョブの要求資源量は、メッシュネットワーク２０１におけるジョブの各次元の資源量であり、例えば、２次元メッシュならば、ジョブのｘサイズ、ｙサイズである。２つ目の条件は、ジョブの実行予定時間が、（ジョブの実行終了予定時刻−現在時刻）以下になることである。ここで、実行終了予定時刻とは、ユーザが元々予定していたジョブの実行が終了する時刻である。以下に、使用ノード領域のサイズで整列された、整列ジョブリストＬを使う方法を述べる。
【００７５】
ここで、例えば、使用ノード領域の座標、サイズ等で整列された、整列ジョブリストＬ内で特定のサイズのジョブを探す場合、先頭または末尾から順にたどりながら探すことになり処理時間がかかる。このため、本実施例では整列ジョブリストＬの整列キーに対応するハッシュテーブルＨを使用して、整列ジョブリストＬ内でのジョブを特定する処理を高速化する。次に、ハッシュテーブルＨが記憶する情報を、図１２を用いて説明する。
【００７６】
図１２は、ハッシュテーブルＨが記憶する情報をイメージ化した例を示す説明図である。図１２では、最小ｘ座標での整列ジョブリストＬｘｍｉｎに対応するハッシュテーブルＨｘｍｉｎと、最大ｙ座標での整列ジョブリストＬｙｍａｘに対応するハッシュテーブルＨｙｍａｘとの例を示す。
【００７７】
ハッシュテーブルＨｘｍｉｎには、最小ｘ座標をキーとして、キーに対応する整列ジョブリストＬｘｍｉｎの要素へのポインタが格納されている。例えば、ジョブスケジューラ４１０は、ジョブｒＡの最小ｘ座標をキーとして、整列ジョブリストＬｘｍｉｎのジョブＡが格納された要素へのポインタを取得する。このように、ジョブスケジューラ４１０は、整列ジョブリストＬｘｍｉｎの先頭または末尾から順にたどりながら探さずとも、該当のジョブを探すことができる。ハッシュテーブルＨｙｍａｘと整列ジョブリストＬｙｍａｘとの関係も同様である。
【００７８】
また、候補ジョブを探索する際に、予定より早く終了したジョブの潜在空き領域に対して、サイズ以下の領域をもつジョブを検索することになる。そこで、他パラメタを固定した時に、検索キーは大きさ（ｘサイズ，ｙサイズ）について単調増大の性質をもつハッシュ関数を用いてハッシュ値を使用してもよい。この性質があれば、より大きい空間に、より大きいハッシュ値が対応することになるため、ハッシュ値が特定の値以下の範囲に探索範囲を限定することができる。前述のハッシュ関数としては、例えば、以下の４つのいずれかである。また、以下に示す関数は、ｘ，ｙ，ｚの３次元メッシュまたはトーラスとした際の例となる。
【００７９】
ハッシュ関数の１つ目の例としては、ジョブの対角線の長さを定数倍した値の整数部を算出する関数である。１つ目の例におけるハッシュ関数は、例えば、下記（１）式となる。
【００８０】
ハッシュ値＝｜定数＊√（（（ｘｍａｘ−ｘｍｉｎ）＾２＋（ｙｍａｘ−ｙｍｉｎ）＾２＋（ｚｍａｘ−  ｚｍｉｎ）＾２））｜  …（１）
【００８１】
ここで、ｘｍａｘ、ｘｍｉｎ、ｙｍａｘ、ｙｍｉｎ、ｚｍａｘ、ｚｍｉｎは、それぞれ、ジョブの最大ｘ座標、最小ｘ座標、最大ｙ座標、最小ｙ座標、最大ｚ座標、最小ｚ座標を示す。また、｜ａ｜は、ａの整数部、すなわち、ａを超えない最小の整数を示す。
【００８２】
ハッシュ関数の２つ目の例としては、全次元の大きさの幾何平均を定数倍した値の整数部を算出する関数である。２つ目の例におけるハッシュ関数は、例えば、下記（２）式となる。
【００８３】
ハッシュ値＝｜定数＊（（（ｘｍａｘ−ｘｍｉｎ）＊（ｙｍａｘ−ｙｍｉｎ）＊（ｚｍａｘ−ｚｍｉｎ）＾（１／３））｜  …（２）
【００８４】
ハッシュ関数の３つ目の例としては、全次元の大きさの調和平均を定数倍した値の整数部を算出する関数である。３つ目の例におけるハッシュ関数は、例えば、下記（３）式となる。
【００８５】
ハッシュ値＝｜定数＊（１／（１／（ｘｍａｘ−ｘｍｉｎ）＋１／（ｙｍａｘ−ｙｍｉｎ）＋１／（ｚｍａｘ−ｚｍｉｎ）））  …（３）
【００８６】
ハッシュ関数の４つ目の例としては、体積の対数の整数部を定数倍した値の整数部を算出する関数である。４つ目の例におけるハッシュ関数は、例えば、下記（３）式となる。
【００８７】
ハッシュ値＝｜定数＊ｌｏｇ（（ｘｍａｘ−ｘｍｉｎ）＊（ｙｍａｘ−ｙｍｉｎ）＊（ｚｍａｘ−ｚｍｉｎ）））  …（４）
【００８８】
ここで、（４）式におけるｌｏｇの底は、単調増加となる１より大きい値であればどのような値でもよい。また、（１）〜（４）式において、定数倍する理由は、例えば小数点以下の値の違いを反映することにより、形状が異なる場合は異なる値が割り当てやすくなるようにするためである。また、ハッシュ値の範囲が大きく、ハッシュテーブルのサイズが大きくなりすぎる場合には、（４）式のように、対数関数など緩やかに増加する関数でハッシュ値を求めることで、範囲を狭めることが好ましい。
【００８９】
図１３は、ジョブ管理情報４２０の一例を示す説明図である。図１３では、ジョブ管理情報４２０と、整列ジョブリストＬと、ハッシュテーブルＨとの関係を示す。図１３では、ある１つのジョブに対するジョブ管理情報４２０を示す。図１３で示すジョブ管理情報は、説明の簡略化のため、２次元（ｘ，ｙ）のネットワークで接続される場合の例である。ジョブ管理情報４２０は、ジョブＩＤに加え、ジョブの使用ノード領域に関する情報として、最小ｘ座標、最大ｘ座標、ｘサイズ、最小ｙ座標、最大ｙ座標、ｙサイズ、対角線長で整列した次ジョブという情報を有する。
【００９０】
さらに、ジョブ管理情報４２０は、最小ｘ座標〜対角線長で整列した次ジョブの各項目に対応する整列ジョブリストのポインタｐを有する。例えば、ジョブ管理情報４２０は、最小ｘ座標に対応する最小ｘ座標での整列ジョブリストへのポインタｐＬｘｍｉｎを有する。同様に、ジョブ管理情報４２０は、最大ｘ座標、ｘサイズ、最小ｙ座標、最大ｙ座標、ｙサイズ、対角線長のそれぞれに対応する整列ジョブリストＬのポインタｐＬｘｍａｘ、ｐＬｘｓｉｚｅ、ｐＬｙｍｉｎ、ｐＬｙｍａｘ、ｐＬｙｓｉｚｅ、ｐＬｄを有する。ここで、各ポインタが指す位置は、整列ジョブリストＬにおける、あるジョブの要素の位置である。このように、ジョブ管理情報４２０から、整列ジョブリストＬにおけるあるジョブの位置をたどることができる。また、逆に、整列ジョブリストから、各ジョブのジョブ管理情報４２０をたどることもできる。
【００９１】
また、図１３で示すように、ジョブ管理情報４２０は、そのジョブが終了したときに想定される潜在空き空間の情報を有する。具体的には、ジョブ管理情報４２０は、潜在空き空間の最大ｘ座標、最小ｘ座標、最大ｙ座標、最小ｙ座標を有する。
【００９２】
また、ジョブ管理情報４２０は、最小ｘ座標でのハッシュテーブルＨｘｍｉｎと、最大ｘ座標でのハッシュテーブルＨｘｍａｘと、…、対角線長でのハッシュテーブルＨｄと対応付けられている。さらに、ジョブ管理情報４２０は、前述した（１）式〜（４）式のいずれかにより算出されたハッシュ値が登録された、サイズでのハッシュテーブルＨｓｉｚｅと対応付けられている。また、ジョブスケジューラ４１０は、ハッシュテーブルＨｓｉｚｅに対応する整列ジョブリストＬｓｉｚｅを作成してもよい。
【００９３】
次に、実施例１において、ジョブＡを実行予約、すなわちスケジュールしてから、ジョブＡが終了する際に実行する処理を、フローチャートとして図１４、図１５を用いて説明する。
【００９４】
図１４は、ジョブ実行予約時処理手順の一例を示すフローチャートである。ジョブ実行予約時処理は、ジョブスケジューラ４１０によって、ジョブのスケジューリング決定後に実行する処理である。
【００９５】
ジョブスケジューラ４１０は、整列ジョブリストＬにジョブＡのジョブ管理情報４２０を登録する（ステップＳ１４０１）。ここで、図１４で示す処理を実行するタイミングは、ジョブＡのスケジューリング決定後であり、ジョブＡの割り当て領域の、各次元の最小座標、最大座標、サイズはわかっているため、整列ジョブリストＬにジョブＡの情報を挿入することが可能である。
【００９６】
次に、ジョブスケジューラ４１０は、「大きさ」をキーとするハッシュテーブルＨｓｉｚｅに、ジョブＡのジョブ管理情報４２０を登録する（ステップＳ１４０２）。ここで、大きさが同じ場合となり、キーが衝突するときには、ジョブスケジューラ４１０は、最初に登録された要素を先頭にしたリストを、サイズに対して設定する。また、ジョブスケジューラ４１０は、大きさ以外にも各次元のサイズ、最小座標、最大座標をキーにした、それぞれ別のハッシュテーブルＨを作成しジョブＡを登録してもよい。この場合、ジョブスケジューラ４１０は、ステップＳ１４０１の処理において、整列ジョブリストＬへの挿入位置がハッシュテーブルですぐに求めることができるため、ステップＳ１４０１の処理を効率的に行うことができる。
【００９７】
そして、ジョブスケジューラ４１０は、整列ジョブリストＬから、ジョブＡが終了するとした場合の潜在空き空間を特定する（ステップＳ１４０３）。潜在空き空間は、例えば、図９〜図１１で示す方法で特定することができる。具体的には、各次元の最小座標、最大座標に関する整列ジョブリストＬに対してジョブＡを起点として整列ジョブリスト内をたどることにより求めることができる。
【００９８】
次に、ジョブスケジューラ４１０は、特定した潜在空き空間の各次元の最小座標、最大座標をジョブＡのジョブ管理情報４２０Ａ内に記録する（ステップＳ１４０４）。ステップＳ１４０４の処理終了後、ジョブスケジューラ４１０は、ジョブ実行予約時処理を終了する。
【００９９】
図１５は、ジョブ実行終了時処理手順の一例を示すフローチャートである。ジョブ実行終了時処理は、ジョブＡが、ジョブの実行終了予定時刻より前に終了した際に実行する処理である。
【０１００】
ジョブスケジューラ４１０は、ジョブＡによる潜在空き空間のサイズをジョブＡのジョブ管理情報４２０Ａから取得する（ステップＳ１５０１）。潜在空き空間の情報は、ステップＳ１４０４の処理で予め求められたものである。
【０１０１】
次に、ジョブスケジューラ４１０は、開始繰り上げ候補のジョブを、潜在空き空間のサイズをキーとして、サイズによるハッシュテーブルＨｓｉｚｅを用いてリストアップする（ステップＳ１５０２）。ここで、ハッシュテーブルＨｓｉｚｅは、ステップＳ１４０２の処理により作成されている。ジョブスケジューラ４１０は、ハッシュテーブルＨｓｉｚｅに対して、潜在空き空間のサイズをキーにして引くことにより、該当のサイズを有するジョブの管理情報を、繰り上げの候補ジョブとして取得することができる。また、該当するサイズのジョブがなければ、ジョブスケジューラ４１０は、サイズを減少させる方向でハッシュテーブルＨｓｉｚｅ内を探索して、繰り上げの候補ジョブとして取得してもよい。また、ジョブスケジューラ４１０は、候補ジョブを所定の閾値個取得するために、所定の閾値回ハッシュテーブルＨｓｉｚｅを探索してもよい。また、ステップＳ１５０２の処理において、ジョブスケジューラ４１０は、ハッシュテーブルＨｓｉｚｅから探索した候補ジョブの実行予定時間が、（ジョブの実行終了予定時刻−現在時刻）以下となるかを確認する。候補ジョブの実行予定時間が（ジョブの実行終了予定時刻−現在時刻）より大きい場合、ジョブスケジューラ４１０は、その候補ジョブは候補から外す。
【０１０２】
そして、ジョブスケジューラ４１０は、ジョブＡの管理データをスケジュール表から削除する（ステップＳ１５０３）。ここで、ジョブスケジューラ４１０は、整列ジョブリストＬ、ハッシュテーブルからのジョブＡの情報削除も実施する。
【０１０３】
次に、ジョブスケジューラ４１０は、候補ジョブがあるか否かを判断する（ステップＳ１５０４）。候補ジョブがある場合（ステップＳ１５０４：Ｙｅｓ）、ジョブスケジューラ４１０は、候補ジョブの先頭が潜在空き空間に入るか否かを判断する（ステップＳ１５０５）。候補ジョブの先頭が潜在空き空間に入らない場合（ステップＳ１５０５：Ｎｏ）、ジョブスケジューラ４１０は、候補ジョブの先頭を候補リストから削除する（ステップＳ１５０６）。そして、ジョブスケジューラ４１０は、ステップＳ１５０４の処理に移行する。
【０１０４】
一方、候補ジョブの先頭が潜在空き空間に入る場合（ステップＳ１５０５：Ｙｅｓ）、ジョブスケジューラ４１０は、潜在空き空間に、候補ジョブの先頭を繰り上げジョブとして入れる（ステップＳ１５０７）。潜在空き空間に開始繰り上げジョブを入れたときは、そのジョブのスケジュールが更新されたことを意味するので、ジョブスケジューラ４１０は、図１４で示したジョブ実行予約時処理を実行する。
【０１０５】
潜在空き空間に繰り上げジョブを入れた後、ジョブスケジューラ４１０は、入れたジョブを除いた残りの空き空間を特定する（ステップＳ１５０８）。具体的には、ジョブスケジューラ４１０は、潜在空き空間を示す直方体から、繰り上げジョブの使用ノード領域を示す直方体を除いた残りの空き空間を特定する。ここで、ステップＳ１５０８の処理は、ステップＳ１５１３の処理の後に実行されることもある。この場合、ジョブスケジューラ４１０は、残りの空き空間を示す直方体から、繰り上げジョブの使用ノード領域を示す直方体をさらに除いた残りの空き空間を特定する。
【０１０６】
次に、ジョブスケジューラ４１０は、残りの空間のサイズから、開始繰り上げ候補のジョブをリストアップする（ステップＳ１５０９）。ステップＳ１５０９の処理は、ステップＳ１５０２の処理と同様の処理である。
【０１０７】
そして、ジョブスケジューラ４１０は、候補ジョブがあるか否かを判断する（ステップＳ１５１０）。候補ジョブがある場合（ステップＳ１５１０：Ｙｅｓ）、ジョブスケジューラ４１０は、候補ジョブの先頭が残りの空き空間に入るか否かを判断する（ステップＳ１５１１）。候補ジョブの先頭が残りの空き空間に入らない場合（ステップＳ１５１１：Ｎｏ）、ジョブスケジューラ４１０は、候補ジョブの先頭を候補リストから削除する（ステップＳ１５１２）。そして、ジョブスケジューラ４１０は、ステップＳ１５１０の処理に移行する。
【０１０８】
一方、候補ジョブの先頭が残りの空き空間に入る場合（ステップＳ１５１１：Ｙｅｓ）、ジョブスケジューラ４１０は、残りの空き空間に、候補ジョブの先頭を繰り上げジョブとして入れる（ステップＳ１５１３）。ステップＳ１５０７の処理と同様に、空き空間に開始繰り上げジョブを入れたときは、そのジョブのスケジュールが更新されたことを意味するので、ジョブスケジューラ４１０は、図１４で示したジョブ実行予約時処理を実行する。そして、ジョブスケジューラ４１０は、ステップＳ１５０８の処理に移行する。
【０１０９】
また、候補ジョブがない場合（ステップＳ１５０４：Ｎｏ、ステップＳ１５１０：Ｎｏ）、ジョブスケジューラ４１０は、ジョブ実行終了時処理を終了する。
【０１１０】
（実施例２）
実施例１では、整列ジョブリストＬは、ジョブを登録しているが、計算ノードｃｎのネットワークの全体規模が大きい場合、全体を互いに交わらない区画に分け、区画ごとに整列ジョブリストを保持することが考えられる。これにより、整列ジョブリストＬの要素数を減らすことができる。以下、潜在空き空間から距離的に近い区画に属するジョブを対象に、候補を絞る。区画に分割した際のジョブの決定例を、図１６〜図１８を用いて説明する。
【０１１１】
図１６は、繰り上げ候補ジョブの決定例を示す説明図（その１）である。図１６で示すグラフ１６０１は、ジョブＡ〜Ｆのスケジュールとして、ジョブＡ〜Ｆの使用ノード領域ｒＡ〜ｒＦを示す。また、ｔを時刻とする。また、ｔ０は現在時刻である。現在時刻ｔ０で実行中のジョブはジョブＡ、Ｂ、Ｇである。また、ジョブＣ、Ｄ、Ｅ、Ｆは実行予約されたジョブである。図１６〜図１８では、分割する区画と区別するため、ｒＡに薄い網掛けを付与し、ｒＢ〜ｒＧに濃い網掛けを付与している。
【０１１２】
図１７は、繰り上げ候補ジョブの決定例を示す説明図（その２）である。図１７で示すグラフ１７０１は、グラフ１６０１に対して、適当な間隔で互いに交わらないような領域で区画分けした例を示す。グラフ１７０１では、各区画は、太い破線で囲まれた範囲となる。図１７の例では、各区画の時間幅は、最小の割り当て時間の３倍の時間幅となる。従って、グラフ１７０１の時刻ｔ０から時刻ｔ１までの時間幅に、グラフ１７０１の下部、中部、上部の３つの区画ｓｃｔ１〜３ができる。同様に、時刻ｔ１からｔ２までの時間幅に、グラフ１７０１の下部、中部、上部の３つの区画ｓｃｔ４〜６ができ、時刻ｔ２からｔ３までの時間幅に、グラフ１７０１の下部、中部、上部の３つの区画ｓｃｔ７〜９ができる。また、実行中および実行予約のジョブは、「ジョブが使用するｘｙ空間でのノード領域×実行予定時間（ｔ）」という直方体で表すことができる。
【０１１３】
ここで、ジョブスケジューラ４１０は、各ジョブに対して、一つの区画を対応させる。例えば、ジョブスケジューラ４１０は、ジョブが表される直方体の中点を求め、中点が所属する区画を、該当のジョブに対応する区画に決定する。
【０１１４】
また、ジョブスケジューラ４１０は、区画ごとの管理データとして、区画に対応付けられたジョブ群を、使用ノード領域のサイズで整列した整列ジョブリストＬとして保持しておく。これにより、区画ごとの整列ジョブリストＬができることになる。図１７の例では、グラフ１７０１の区画ｓｃｔ６の管理データには、ジョブＣ、Ｇが保持される。また、各区画のサイズが大きくなるように分割した結果、入りうるジョブ数が多くなる場合には、整列ジョブリストＬを、実施例１で述べたハッシュテーブルＨで検索できるよう管理してもよい。
【０１１５】
図１７の例では、ジョブＡが終了するものとし、ジョブＡが作る、潜在空き空間ｒｓＡのサイズをｓとする。実行中ジョブＡが終了した場合、ジョブスケジューラ４１０は、ジョブＡの属していた区画ｓｃｔ１の管轄で、サイズｓ以下の実行予約のジョブを探す。次に、ジョブスケジューラ４１０は、ジョブＡの属していた区画ｓｃｔ１に隣接した区画ｓｃｔ２、４、５に対して、同様にサイズｓ以下かつ実行予約のジョブを探す。こうして、ジョブＡの使用していた資源から距離的に近いジョブを優先的に候補にすることができる。
【０１１６】
図１８は、繰り上げ候補ジョブの決定例を示す説明図（その３）である。図１８で示すグラフ１８０１は、ジョブＡの属していた区画ｓｃｔ１に隣接した区画に属したジョブＤ、Ｅを繰り上げた様子を示す。図１８では、繰り上げたジョブＤ、Ｅに、薄い網掛けを付与する。
【０１１７】
ここで、グラフ１８０１のように、時刻ｔ０に関して、実行予約のジョブを繰り上げした場合、時刻ｔ１に、計算ノードの空き領域が出来る場合がある。ジョブスケジューラ４１０は、時刻ｔ１を基準に見て、ジョブＤ、Ｅの繰り上げにより空きとなる領域について、潜在空き空間を特定し、同様の操作をしてもよい。これにより、ジョブスケジューラ４１０は、時刻ｔ１以降に実行開始予定のあるジョブに対して、時刻ｔ１へのジョブを繰り上げることができる。同様に、ジョブスケジューラ４１０は、次の区画の境界に位置する時刻ｔ２でも繰り返すことができる。
【０１１８】
（実施例３）
実施例１では、ジョブＡの終了による潜在空き空間を、ジョブスケジューラ４１０が保持する管理データから求めている。実施例３では、ジョブを実行している計算ノード上で、ノード間通信によりノード間の距離を求め、潜在空き空間を特定するための情報を取得する。これにより、ジョブスケジューラ４１０の処理を軽減することができる。また、実施例３は、実施例２に適用してもよい。
【０１１９】
図１９は、空きノードとジョブ管理ノードとが協働して潜在空き空間を特定する方法の一例を示す説明図である。ジョブスケジューラ４１０は、実行を割り当てられた計算ノードｃｎにジョブの実行を依頼するとき、そのジョブの使用ノード領域の境界面のすぐ外側にあたる空き計算ノードに対して、境界面である旨の情報を同時に与える。以下、境界面である旨の情報が与えられた空き計算ノードを、「境界面ノード」と称する。境界面ノードは、境界面とは垂直な外側方向に通信パケットを送信する。ここで、境界面とは垂直な外側方向は、ｘ軸に平行な方向、またはｙ軸に平行な方向となる。
【０１２０】
図１９で示すグラフ１９０１は、ジョブスケジューラ４１０が管理するスケジュール表上で、各境界面ノードが、ノード間の距離を求める際の状態を模式化したものである。グラフ１９０１で示す黒丸は、境界面ノードとなる空きノードに、パケット通信を送信している例を示す。
【０１２１】
次に、実施例３において、ジョブＡを実行予約、すなわちスケジュールしてから、ジョブＡが実行開始する際に実行する処理を、フローチャートとして図２０、図２１、図２３〜図２５を用いて説明する。なお、実施例３におけるジョブＡが実行終了する際の処理は、図１５で示したジョブ実行終了時処理と同一であるため、説明を省略する。
【０１２２】
図２０は、実施例３におけるジョブ実行予約時処理手順の一例を示すフローチャートである。
【０１２３】
ジョブスケジューラ４１０は、整列ジョブリストＬにジョブＡのジョブ管理情報４２０Ａを登録する（ステップＳ２００１）。整列ジョブリストＬは、図８に示したものである。図８に示したように、整列ジョブリストＬとして、各次元の最小座標、最大座標、サイズに関するそれぞれのリストがある。ここで、図２０で示す処理を実行するタイミングは、ジョブＡのスケジューリング決定後であり、ジョブＡの割り当て領域の、各次元の最小座標、最大座標、サイズはわかっているため、整列ジョブリストＬにジョブＡの情報を挿入することが可能である。
【０１２４】
次に、ジョブスケジューラ４１０は、「大きさ」をキーとするハッシュテーブルＨｓｉｚｅに、ジョブＡのジョブ管理情報を登録する（ステップＳ２００２）。ステップＳ２００２の処理は、ステップＳ１４０２の処理と同一である。ステップＳ２００２の処理終了後、ジョブスケジューラ４１０は、ジョブ実行予約時処理を終了する。
【０１２５】
図２１は、ジョブ実行開始時処理手順の一例を示すフローチャートである。ジョブ実行開始時処理は、ジョブの実行開始を計算ノードｃｎに依頼する際に、ジョブスケジューラ４１０が実行する処理である。
【０１２６】
ジョブスケジューラ４１０は、ジョブＡに割り当てられた計算ノードから成る直方体領域の境界面ノードに対して、隣接空きノード特定処理の実行依頼を送信する（ステップＳ２１０１）。この実行依頼には、ジョブＡの境界面である旨を示す情報、その境界面に対して垂直な座標軸を示す情報、および、外へ向かう向きを示す情報が含まれる。さらに、実行依頼には、ジョブＡの情報として、割り当てノード領域の各座標の情報も含まれる。
【０１２７】
次に、ジョブスケジューラ４１０は、ジョブＡに割り当てられた計算ノードに対して、ジョブＡの実行依頼を送信する（ステップＳ２１０２）。ステップＳ２１０２の処理終了後、ジョブスケジューラ４１０は、ジョブ実行開始時処理を終了する。次に、境界面ノードに送信される情報の一例を、図２２を用いて説明する。
【０１２８】
図２２は、境界面ノードに送信される情報の一例を示す説明図である。図２２に示すグラフ２２０１は、ジョブＡ〜Ｆの使用ノード領域ｒＡ〜ｒＦと、ジョブＡの実行開始時に境界面ノードとなるノードの一つとなるノードｂｃｎとを示す。
【０１２９】
図２２の例では、ノードｂｃｎに与えられる座標軸を示す情報は、境界面がｙ軸方向であるから、「ｘ軸」となり、外へ向かう向きを示す情報は、正方向となる。以下の図２３〜図２５の説明では、境界面ノードｂｃｎを例にして説明する。次に、境界面ノードが実行する隣接空きノード特定処理について、図２３を用いて説明する。
【０１３０】
図２３は、境界面ノードが実行する隣接空きノード特定処理手順の一例を示すフローチャートである。隣接空きノード特定処理は、境界面ノードとなるノードが実行依頼を受け付けた際に実行される。図２３で示す隣接空きノード特定処理は、境界面ノードｂｃｎを例としているため、境界面に対して垂直になる座標軸は「ｘ軸」となり、「向き」は「正方向」となる。図２３の説明では、説明の簡略化のため、正方向を「右」、負方向を「左」と記載する。
【０１３１】
境界面ノードｂｃｎは、変数ｈに１を代入する（ステップＳ２３０１）。ここで、変数ｈは、何ホップ右のノードと通信するかを示す変数である。
【０１３２】
次に、境界面ノードｂｃｎは、自ノードが別のジョブの境界面か否かを判断する（ステップＳ２３０２）。ここで、境界面ノードｂｃｎが、ジョブＡの右側にあることから、自ノードが別のジョブの境界面となる場合は、右隣りに別のジョブの割り当てノードがあることになる。別のジョブが右隣りにあるか否かの判断方法は、図２１、図２２で示したように、別のジョブの実行依頼時に、ジョブスケジューラ４１０から別のジョブの境界面ノードに対して、境界面である旨を示す情報が通知されていることから判断することができる。
【０１３３】
自ノードが別のジョブの境界面でない場合（ステップＳ２３０２：Ｎｏ）、境界面ノードｂｃｎは、ｈホップ右にある空きノードに向けて通信し、応答メッセージを待ち受ける（ステップＳ２３０３）。ここで、境界面ノードｂｃｎは、通信がタイムアウトしたとみなす時間を設定しておく。境界面ノードからの通信を受信した際の処理については、図２４で示す。
【０１３４】
次に、境界面ノードｂｃｎは、通信タイムアウトしたか否かを判断する（ステップＳ２３０４）。通信タイムアウトしていない場合（ステップＳ２３０４：Ｎｏ）、境界面ノードｂｃｎは、応答結果が「左隣に隣接する別ジョブあり」を示すか否かを判断する（ステップＳ２３０５）。
【０１３５】
通信タイムアウトした場合（ステップＳ２３０４：Ｙｅｓ）、または、応答結果が「左隣に隣接する別ジョブあり」を示さない場合（ステップＳ２３０５：Ｎｏ）、境界面ノードｂｃｎは、変数ｈを１増加させる（ステップＳ２３０６）。そして、境界面ノードｂｃｎは、ステップＳ２３０３の処理に移行する。
【０１３６】
一方、自ノードが別のジョブの境界面である場合（ステップＳ２３０２：Ｙｅｓ）、または、応答結果が「左隣に隣接する別ジョブあり」を示す場合（ステップＳ２３０５：Ｙｅｓ）、境界面ノードｂｃｎは、変数ｈの値をジョブ管理ノードａｄｎに向けて送信する（ステップＳ２３０７）。変数ｈの値は、右方向に向けての別ジョブの使用ノードまでの距離を示す。ステップＳ２３０７の処理終了後、境界面ノードｂｃｎは、隣接空きノード特定処理を終了する。
【０１３７】
ステップＳ２３０７の処理では、境界面となったノードのそれぞれが。ジョブ管理ノードａｄｎに対してｈの情報を送信するが、これに限られない。例えば、境界面ノードのいずれか一つを代表面ノードとし、各境界面ノードが求めた変数ｈの値を、代表ノードが各境界面ノードから収集し、収集した距離の最小値をジョブ管理ノードａｄｎに送信してもよい。具体的には、ジョブスケジューラ４１０は、各境界面につき１つのノードを代表ノードとして選択する。そして、ジョブスケジューラ４１０は、代表ノードを含む境界面ノードに、隣接空きノード特定処理の実行依頼を送信する際に、代表ノードの座標も併せて送信する。代表ノード以外の境界面ノードは、ステップＳ２３０７の処理において、距離ｈの情報をジョブ管理ノードａｄｎではなく、代表ノードに送信する。代表ノードは、境界面ノードから距離ｈの値を収集できた後、距離の最小値を求め、求めた最小値をジョブ管理ノードａｄｎに送信する。
【０１３８】
図２４は、空き計算ノードが実行する処理手順の一例を示すフローチャートである。図２４で示す空き計算ノードが実行する処理は、ステップＳ２３０３の処理によって、境界面ノードｂｃｎから通信を受け付けたときに行う処理である。
【０１３９】
境界面ノードｂｃｎから通信を受け付けた計算ノードｃｎは、受け付けたノードへ、隣接するジョブについてのジョブＩＤ、ジョブが使用する領域の各次元の座標を返信する（ステップＳ２４０１）。なお、隣接するジョブがない場合、境界面ノードｂｃｎから通信を受け付けた計算ノードｃｎは、隣接するジョブがないことを示す情報を送信すればよい。ステップＳ２４０１の処理終了後、境界面ノードｂｃｎから通信を受け付けた計算ノードｃｎは、処理を終了する。
【０１４０】
図２５は、ジョブ管理ノードが実行する処理手順の一例を示すフローチャートである。図２５で示すジョブ管理ノードが実行する処理は、ジョブスケジューラ４１０が、ステップＳ２３０７の処理によって、境界面ノードｂｃｎまたは代表ノードから、別ジョブの使用ノードまでの距離の情報を受け付けたときに行う処理である。
【０１４１】
ジョブスケジューラ４１０は、受け付けた別ジョブの使用ノードまでの距離の情報から、ジョブＡが終了するとした場合の潜在空き空間を特定する（ステップＳ２５０１）。次に、ジョブスケジューラ４１０は、特定した潜在空き空間の各次元の最小座標、最大座標をジョブＡのジョブ管理情報４２０内に記録する（ステップＳ２５０２）。ステップＳ２５０２の処理終了後、ジョブスケジューラ４１０は、図２５で示すジョブ管理ノードが実行する処理を終了する。
【０１４２】
このように、実施例１では、潜在空き空間を、整列ジョブリストＬをたどることで隣接ジョブまでの距離を取得し、潜在空き空間の最小座標、最大座標およびサイズを求めたが、実施例３では、境界面ノードｂｃｎが、潜在空き空間の最小座標、最大座標を求める。従って、実施例３では、ジョブスケジューラ４１０にかかる負荷を抑制することができる。
【０１４３】
このように、実施例３では、個々の空きノードが、システム全体に関する制御表ではなく、隣接ノードを使用しているジョブに関する情報だけを使用して行うため、並列処理システム２００の規模が増大してもＣＰＵ処理時間増を抑えることができる。ここで、隣接空きノード特定処理に使用する通信は、空きノードを使うため、実行中ジョブの通信とは干渉しない。また、複数のノード間での最小値の報告はネットワークハードウェアのリダクション機能を使用することにより、計算ノードのＣＰＵを使用することなく高速に実行できる。
【０１４４】
以上説明したように、ジョブスケジューラ４１０は、スケジュール決定時に作成した整列ジョブリストからジョブの潜在空き空間を特定し、該ジョブが早く終了したら該空間に入るジョブを決定する。これにより、ジョブスケジューラ４１０は、事前に潜在空き空間を特定する分繰り上げジョブの決定を高速化することができる。また、ジョブスケジューラ４１０は、通常の空き資源探索処理に比べ少ないＣＰＵ時間で、あるジョブが早期に終了した際に利用可能になる空き資源の大きさを特定する。これにより、ジョブスケジューラ４１０は、実行開始時間を繰り上げ可能なジョブの候補を高速に絞り込み、発生した空き資源の有効利用率を向上させて、並列処理システム２００のジョブスループットを改善することができる。
【０１４５】
また、ジョブスケジューラ４１０は、ハッシュテーブルＨｓｉｚｅを用いて複数のジョブから繰り上げ候補のジョブを決定してもよい。これにより、ジョブスケジューラ４１０は、図１で示した整列ジョブリストＬｘｓｉｚｅ、Ｌｙｓｉｚｅを用いて決定する方法よりも、高速に繰り上げ候補のジョブを決定することができる。
【０１４６】
また、ジョブスケジューラ４１０は、メッシュネットワーク２０１を分割した区画ごとに整列ジョブリストＬを作成し、潜在空き空間に距離的に近い空間内のジョブに繰り上げ候補のジョブを絞ってもよい。これにより、ジョブスケジューラ４１０は、探索範囲を限定する分、より高速に繰り上げ候補のジョブを決定することができる。
【０１４７】
また、ジョブスケジューラ４１０は、境界面ノードｂｃｎに、隣接空きノード特定処理を実行させてもよい。このように、ジョブスケジューラ４１０は、潜在空き空間の特定にかかる負荷を境界面ノードｂｃｎに分散することにより、ジョブスケジューラ４１０にかかる負荷を抑制することができる。
【０１４８】
なお、本実施の形態で説明した並列処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本並列処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本並列処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１４９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１５０】
（付記１）複数の座標軸の各座標軸方向で隣接するノード同士が接続されておりプロセッサとメモリとを有する複数のノードに対する複数のジョブの各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブが使用するノードとを決定する際に、前記各々のジョブを実行する順序を示す情報と、前記各々のジョブが使用する前記各座標軸におけるノードの数および位置とを記憶したリストを作成し、
前記複数のジョブのうちのいずれかのジョブの実行が終了する前に、作成した前記リストを参照して、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、特定した前記各座標軸における未使用のノードの数と前記リストとに基づいて、前記複数のジョブから実行開始時刻を繰り上げるジョブを決定する、
制御部を有することを特徴とする並列処理装置。
【０１５１】
（付記２）前記制御部は、
前記各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブに割り当てるノードとを決定する際に、さらに、前記各々のジョブが使用する前記各座標軸におけるノードの数を、入力された値が大きい程出力される値が単調に増加するハッシュ関数に入力することにより出力されたハッシュ値を記憶し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を前記ハッシュ関数に入力することにより出力されたハッシュ値を算出し、
算出した前記ハッシュ値と、記憶した前記ハッシュ値との比較結果に基づいて、前記複数のジョブから実行開始時刻を繰り上げるジョブを決定する、
ことを特徴とする付記１に記載の並列処理装置。
【０１５２】
（付記３）前記制御部は、
前記各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブに割り当てるノードとを決定する際に、前記各々のジョブを実行する順序と前記各々のジョブが使用する前記各座標軸におけるノードの位置とに基づいて、前記各々のジョブを複数のグループのいずれかに分類し、
分類した前記グループごとに、前記グループに分類した前記各々のジョブを実行する順序を示す情報と、前記各々のジョブが使用する前記各座標軸におけるノードの数および位置とを記憶したリストを作成し、
前記いずれかのジョブの実行が終了する前に、作成した前記いずれかのジョブが属するグループのリストを参照して、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、特定した前記各座標軸における未使用のノードの数と前記いずれかのジョブが属するグループのリストとに基づいて、前記いずれかのジョブが属するグループに属するジョブから実行開始時刻を繰り上げるジョブを決定する、
ことを特徴とする付記１または２に記載の並列処理装置。
【０１５３】
（付記４）前記制御部は、
前記複数のジョブのうちのいずれかのジョブの実行を開始する際に、作成した前記リストを参照して、前記いずれかのジョブが使用する前記各座標軸におけるノードに隣接し前記いずれかのジョブが使用しないノードに、前記各座標軸と垂直方向の前記複数のジョブのいずれにも使用されないノードがいくつあるかを処理要求元に通知する処理の実行依頼を送信し、
前記いずれかのジョブが使用しないノードから通知された前記複数のジョブのいずれにも使用されないノードの数に基づいて、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定する、
処理を実行することを特徴とする付記１〜３のいずれか一つに記載の並列処理装置。
【０１５４】
（付記５）前記複数のノードは、前記複数の座標軸を有するメッシュ状のネットワークまたはトーラス状のネットワークを形成することを特徴とする付記１〜４のいずれか一つに記載の並列処理装置。
【０１５５】
（付記６）コンピュータが、
複数の座標軸の各座標軸方向で隣接するノード同士が接続されておりプロセッサとメモリとを有する複数のノードに対する複数のジョブの各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブが使用するノードとを決定する際に、前記各々のジョブを実行する順序を示す情報と、前記各々のジョブが使用する前記各座標軸におけるノードの数および位置とを記憶したリストを作成し、
前記複数のジョブのうちのいずれかのジョブの実行が終了する前に、作成した前記リストを参照して、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、特定した前記各座標軸における未使用のノードの数と前記リストとに基づいて、前記複数のジョブから実行開始時刻を繰り上げるジョブを決定する、
処理を実行することを特徴とするジョブ管理方法。
【０１５６】
（付記７）コンピュータに、
複数の座標軸の各座標軸方向で隣接するノード同士が接続されておりプロセッサとメモリとを有する複数のノードに対する複数のジョブの各々のジョブの実行開始時刻および実行終了時刻と前記各々のジョブが使用するノードとを決定する際に、前記各々のジョブを実行する順序を示す情報と、前記各々のジョブが使用する前記各座標軸におけるノードの数および位置とを記憶したリストを作成し、
前記複数のジョブのうちのいずれかのジョブの実行が終了する前に、作成した前記リストを参照して、前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際の前記各座標軸における未使用のノードの数を特定し、
前記いずれかのジョブの実行終了時刻より前に前記いずれかのジョブの実行が終了する際に、特定した前記各座標軸における未使用のノードの数と前記リストとに基づいて、前記複数のジョブから実行開始時刻を繰り上げるジョブを決定する、
処理を実行させることを特徴とするジョブ管理プログラム。
【符号の説明】
【０１５７】
Ｈ  ハッシュテーブル
Ｌ  整列ジョブリスト
１０１  並列処理装置
４０１、４３１  制御部
４１１  スケジューリング部
４１２  作成部
４１３  潜在空き空間特定部
４１４  決定部
４２０  ジョブ管理情報
【図１】
2018010492.tif 000003
【図２】
2018010492.tif 000004
【図３】
2018010492.tif 000005
【図４】
2018010492.tif 000006
【図５】
2018010492.tif 000007
【図６】
2018010492.tif 000008
【図７】
2018010492.tif 000009
【図８】
2018010492.tif 000010
【図９】
2018010492.tif 000011
【図１０】
2018010492.tif 000012
【図１１】
2018010492.tif 000013
【図１２】
2018010492.tif 000014
【図１３】
2018010492.tif 000015
【図１４】
2018010492.tif 000016
【図１５】
2018010492.tif 000017
【図１６】
2018010492.tif 000018
【図１７】
2018010492.tif 000019
【図１８】
2018010492.tif 000020
【図１９】
2018010492.tif 000021
【図２０】
2018010492.tif 000022
【図２１】
2018010492.tif 000023
【図２２】
2018010492.tif 000024
【図２３】
2018010492.tif 000025
【図２４】
2018010492.tif 000026
【図２５】
2018010492.tif 000027