(57)【要約】【課題】現在時刻の経過によって隙間の空き資源が無駄になるのを回避可能とする。【解決手段】複数の計算ノードと、複数の計算ノードにジョブを割り当てるジョブ管理装置とを備える並列計算機システムであって、ジョブ管理装置は、ジョブ割り当ての結果生じた空き資源であって、現在時刻と割り当て済みの或るジョブの開始予定時刻との間に亘って複数の計算ノードの一部が空き状態の空き資源を探索する処理と、空き資源が発見されたときに未割り当てのジョブの中から空き資源に割り当て可能なジョブを検索する処理と、検索されたジョブを空き資源に割り当てる処理と、を実行する制御装置を含む。【選択図】図１０
2015194923.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算ノードと、
前記複数の計算ノードにジョブを割り当てるジョブ管理装置とを備え、
前記ジョブ管理装置は、ジョブ割り当ての結果生じた空き資源であって、現在時刻と割り当て済みの或るジョブの開始予定時刻との間に亘って前記複数の計算ノードの一部が空き状態の空き資源を探索する処理と、前記空き資源が発見されたときに未割り当てのジョブの中から前記空き資源に割り当て可能なジョブを検索する処理と、検索されたジョブを前記空き資源に割り当てる処理と、を実行する制御装置を含む
並列計算機システム。
【請求項２】
前記ジョブ管理装置は、現在時刻における前記複数の計算ノードに対するジョブの割り当て状況を示す現在時刻の資源マップと、割り当て済の各ジョブの開始予定時刻及び終了予定時刻のそれぞれにおける前記複数の計算ノードに対するジョブの割り当て状況を示す資源マップとを記憶する記憶装置をさらに含み、
前記制御装置は、前記現在時刻の資源マップと当該現在時刻の資源マップに後続する資源マップとの論理和演算を、論理和の結果に空き状態の計算ノードが認められなくなるまで行い、空き状態の計算ノードが認められなくなったときの論理和と前記現在時刻の資源マップとの排他的論理和演算を行い、排他的論理和の結果から空き状態と認められる計算ノードの一部と、前記空き状態の計算ノードが認められなくなったときの資源マップの時刻と現在時刻との間の時間帯とを前記空き資源として検出する
請求項１に記載の並列計算機システム。
【請求項３】
前記制御装置は、前記空き資源を形成する計算ノードの数及び時間長と、未割り当てのジョブの要求ノード数及び実行所要時間との比較によって、前記空き資源に割り当て可能なジョブを検索する
請求項１又は２に記載の並列計算機システム。
【請求項４】
前記制御装置は、ジョブの割り当てがジョブの有する優先度順で行われる場合に、前記空き資源に割り当て可能なジョブの検索を前記優先度順で行う
請求項１から３の何れか１項に記載の並列計算機システム。
【請求項５】
前記制御装置は、現在時刻における空き資源率と、前記現在時刻の後にある割り当て済みの各ジョブの開始予定時刻及び終了予定時刻における空き資源率との比較を行い、当該開始予定時刻又は終了予定時刻の空き資源率が前記現在時刻における空き資源率から所定量以上低下しているときに、前記空き資源を探索する処理を開始する
請求項１から４の何れか１項に記載の並列計算機システム。
【請求項６】
複数の計算ノードにジョブを割り当てるジョブ管理装置の制御プログラムであって、
前記ジョブ管理装置として動作するコンピュータに、
ジョブ割り当ての結果生じた空き資源であって、現在時刻と割り当て済みの或るジョブの開始予定時刻との間に亘って前記複数の計算ノードの一部が空き状態の空き資源を探索するステップと、
前記空き資源が発見されたときに未割り当てのジョブの中から前記空き資源に割り当て可能なジョブを検索するステップと、
検索されたジョブを前記空き資源に割り当てる処理と、
を実行させるジョブ管理装置の制御プログラム。
【請求項７】
複数の計算ノードと、当該複数の計算ノードにジョブを割り当てるジョブ管理装置とを含む並列計算機システムの制御方法であって、
前記ジョブ管理装置が、
ジョブ割り当ての結果生じた空き資源であって、現在時刻と割り当て済みの或るジョブの開始予定時刻との間に亘って前記複数の計算ノードの一部が空き状態の空き資源を探索し、
前記空き資源が発見されたときに未割り当てのジョブの中から前記空き資源に割り当て可能なジョブを検索し、
検索されたジョブを前記空き資源に割り当てる、
ことを含む並列計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、並列計算機システム，ジョブ管理装置の制御プログラム，及び並列計算機システムの制御方法に関する。
【背景技術】
【０００２】
ジョブスケジューラが複数のジョブを予め計算資源に割り当てるスケジューリングを行い、計算資源に割り当てられたジョブが順次実行される並列計算機システムがある。図１は、ジョブスケジューラによる一般的なジョブ割り当ての流れを示す図であり、図２は、「ジョブ選択」処理及び「計算資源選択」処理の流れを示すフローチャートである。
【０００３】
ジョブ割り当ては、以下のようにして行われる。図１に示すように、ジョブスケジューラは、「ジョブ受け付け」処理において、各ユーザから投入されたジョブを受け付ける。ジョブスケジューラは、一定間隔で投入されたジョブをまとめ、ジョブ選択処理を実行する。
【０００４】
ジョブ選択処理では、最初に、ジョブスケジューラは、ジョブ選択処理の対象の複数のジョブ（実行待ちジョブ）の全てを所定の優先度（フェアウェア制御、グループ優先度制御など）に従って並べ換え（ソート）する（図２の１）。次に、ジョブスケジューラは、ソートされたジョブ列から先頭のジョブを取り出し、変数“ＪＯＢ”に設定する（図２の２）。次に、ジョブスケジューラは、計算資源選択処理のサブルーチンを呼び出し、変数“ＪＯＢ”に設定されたジョブに対する計算資源を割り当てる（図２の３）。
【０００５】
計算資源選択処理では、ジョブの要求量（ジョブの実行に要する計算ノード数，計算ノードの形状，ジョブの実行所要時間（経過時間制限値）等）に従って、空き状態の計算資源（空き資源）を探索し、ジョブを計算資源に割り当てる。計算資源選択処理は、ジョブ列をなす全てのジョブに対して実行される（図２の４のループ参照）。計算資源が割り当てられた各ジョブは、現在時刻が開始予定時刻になると、割り当てられた計算資源を用いて実行される（図１、「ジョブ実行」）。
【０００６】
各ジョブに対する計算資源の割り当て状況は、図１に示すようなスケジューリングマップＭで表現することができる。スケジューリングマップＭは、例えば、縦軸に計算資源の軸、横軸に時間軸をとり、計算資源と時間との格子をなす横方向の線分は単位時間を示し、縦方向の線分は計算資源の単位を示す。計算資源の単位は「計算ノード」と呼ばれる。計算ノードは、単一のプロセッサ（例えばＣＰＵ）又は複数のプロセッサ（プロセッサ群）で形成される。
【０００７】
上述したジョブ選択処理及び計算資源選択処理によって、実行待ちの各ジョブは、優先度が高い順で順次実行開始されるように１つずつ計算資源に割り当てられていく。但し、バックフィルスケジューリングの対象となるジョブ（バックフィルジョブ）は、当該ジョブより高い優先度を有するジョブの実行開始を妨げない範囲で、優先度が高いジョブを追い越して計算資源に割り当てられる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平７−１４１３０５号公報
【特許文献２】特開２００８−１０７８７５号公報
【特許文献３】特開２００６−１４６８６４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した従来技術では、以下の問題があった。すなわち、ジョブの割当に伴って、或る時間帯に亘って或る計算ノード又は計算ノード群に対してジョブが割り当てられていない空き状態の計算資源（空き資源）の隙間が生じることがある。このような隙間に未割り当てのジョブを割り当てることができれば、当該時間帯における計算資源（計算ノード）の稼働率が向上する。
【００１０】
ところが、未割り当てのジョブは、優先度に従って１つずつ計算資源に割り当てられる。このため、或る時点において未割り当てのジョブの中に上記隙間に割り当て可能なジョブがあっても、当該ジョブの優先度が低いと、当該ジョブの割り当てを行う順番となるまでに時間がかかる。この結果、当該ジョブの割り当てが行われる時点では、現在時刻の経過（変化）によって当該隙間の時間長が当該ジョブの実行所要時間より短くなり、当該ジョブを割り当てることができなくなる。この場合、当該隙間は無駄な空き資源となっていた。
【００１１】
本開示課題は、現在時刻の経過によって隙間の空き資源が無駄になるのを回避可能とすることを課題とする。
【課題を解決するための手段】
【００１２】
本開示は、複数の計算ノードと、
前記複数の計算ノードにジョブを割り当てるジョブ管理装置とを備え、
前記ジョブ管理装置は、ジョブ割り当ての結果生じた空き資源であって、現在時刻と割り当て済みの或るジョブの開始予定時刻との間に亘って前記複数の計算ノードの一部が空き状態の空き資源を探索する処理と、前記空き資源が発見されたときに未割り当てのジョブの中から前記空き資源に割り当て可能なジョブを検索する処理と、検索されたジョブを前記空き資源に割り当てる処理と、を実行する制御装置を含む
並列計算機システムである。
【発明の効果】
【００１３】
本開示によれば、現在時刻の経過によって隙間の空き資源が無駄になるのを回避可能とすることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、ジョブスケジューラによる一般的なジョブ割り当ての流れを示す図である。
【図２】図２は、「ジョブ選択」処理及び「計算資源選択」処理の流れを示すフローチャートである。
【図３】計算ノード群で形成された二次元トーラスネットワークの一例を示すとともに、実施形態における並列計算機システムの全体構成例を示す。
【図４】計算ノード群で形成された三次元トーラスネットワークの一例を示すとともに、実施形態における並列計算機システムの全体構成例を示す。
【図５】図３、図４に示したジョブ管理装置のハードウェア構成例を示す。
【図６】図６は、実施形態の計算資源選択処理にて使用される資源マップの説明図である。
【図７】図７は、参考例の説明図であり、図６に示した状態の資源マップを用いて経過時間４０分のジョブ“jobA”を割り当てる場合の空き資源探索処理の概要を示す。
【図８】図８は、参考例における空き資源探索処理のフローチャートである。
【図９】図９は、上記した問題の具体例を示す説明図である。
【図１０】図１０は、実施形態に係る閉じ空間優先制御処理の説明図である。
【図１１】図１１は、図１０を用いて説明した閉じ空間探索処理の例を示すフローチャートである。
【図１２】図１２は、実施形態２に係る空き資源率管理による資源探索方法の説明図である。
【図１３】図１３は、空き資源率を考慮した閉じ空間探索処理の例を示すフローチャートである。
【図１４】図１４は、図１３に示す処理を行った場合の作用説明図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施形態について説明する。実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１６】
〔実施形態１〕
最初に、ジョブスケジューラによるジョブの割り当て処理の対象となる「計算資源」（以下、単に「資源」と表記することもある）について説明する。或るジョブが実行を開始するのに先立って、当該ジョブを実行するためのプロセッサ（一般的には複数のプロセッサ（プロセッサ群））がジョブに割り当てられる。このようなプロセッサ又はプロセッサ群が「資源」に該当する。プロセッサ又はプロセッサ群によって形成される計算資源の管理単位は、「計算ノード」と呼ばれる。
【００１７】
ジョブの割り当て処理において、ジョブスケジューラは、ジョブを実行する計算ノードだけでなく、「ジョブが計算ノードを使用可能な時間帯（計算ノードがジョブの実行に使用される時間帯）」も割り当てる。このため、「計算ノード」と「計算ノードを使用可能な時間帯」の組み合わせが割り当て対象の「資源」となる。
【００１８】
なお、ジョブへの計算ノードの割り当てのことは、スケジュールマップを用いた説明の都合上、「空間軸での計算資源割当て」と呼ばれることがある。また、計算ノードをジョブ実行のために使用する時間帯の割り当てのことは、「時間軸での計算資源割当て」と呼ばれることがある。「計算資源割り当て」を単に「資源割り当て」と呼ぶ場合もある。
【００１９】
本実施形態では、ジョブが割り当てられる計算ノードの集合の空間的配置（厳密にはネットワーク接続関係）が二次元又は三次元のメッシュ、或いは二次元又は三次元のトーラスである場合を仮定する。図３は、４×４の計算ノードＮで形成された二次元トーラスネットワーク（ネットワーク１）を例示し、図４は、２×２×２の計算ノードＮで形成された三次元トーラスネットワーク（ネットワーク２）を例示する。但し、図３及び図４に示した計算ノードＮの数は例示であり、所定数の計算ノードＮを有するネットワークが適用される。
【００２０】
これらの計算ノードの空間的配置では、計算ノードの集合が長方形又は直方体の形状に配置されているということができる。もっとも、計算ノードの空間的配置には立ち入らない説明においては、説明を簡単にするため、図１に示したスケジューリングマップに示すように、計算ノードの集合を一次元の線分で表す場合もある。
【００２１】
なお、計算ノードの空間的配置を二次元又は三次元のメッシュ、或いは二次元又は三次元のトーラスに限定するという条件は、ネットワーク全体がメッシュあるいはトーラス接続のシステムにおいて、しばしば採用されている。或るジョブ用の計算ノード間の通信が他のジョブ用の通信による干渉を受けることを回避するためである。
【００２２】
上記したように、図１のスケジューリングマップＭは、計算ノードを一次元で表した例である。これに対し、二次元又は三次元メッシュネットワーク、或いは二次元又は三次元トーラスネットワークで計算ノードが接続された並列計算機システムでは、次のような方法で、ジョブが要求する数の計算ノードが当該ジョブに割り当てられる。すなわち、二次元ネットワークの場合には、連続する計算ノードの長方形、三次元ネットワークの場合には、連続する計算ノードの直方体がジョブに割り当てられる。このような割り当て方法は、次の理由による。
（１）ジョブ内のプロセス間通信が他のジョブの外乱にならないこと。
（２）計算ノードの異常(計算ノードダウン等)が発生した場合に、多数のジョブに影響しないこと(異常が発生した計算ノードを使用しているジョブだけが中断されること)。
【００２３】
但し、計算ノードのネットワークトポロジが二次元又は三次元メッシュ、或いは二次元又は三次元メッシュであることは必須の要件ではなく、これら以外のネットワークトポロジが適用され得る。
【００２４】
＜並列計算機システムの構成＞
本実施形態に係る並列計算機システムは、図３，図４に示したネットワーク１又はネットワーク２と、ネットワーク１又はネットワーク２に接続されてネットワーク１又はネットワーク２（複数の計算ノード）にジョブを割り当てるジョブ管理装置１０とを含む。なお、図３及び図４のそれぞれにおけるネットワークとジョブ管理装置１０との接続関係は模式的に示されたものである。
【００２５】
図５は、ジョブ管理装置のハードウェア構成例を示す。ジョブ管理装置１０は、プロセッサ及びメモリを含むコンピュータである。ジョブ管理装置１０として、専用のコンピュータ，或いは、パーソナルコンピュータ（ＰＣ）やワークステーション（ＷＳ）のような汎用のコンピュータを適用することができる。
【００２６】
図５において、ジョブ管理装置１０は、バスＢを介して接続されたCentral Processing
Unit（ＣＰＵ）１１と、メモリ１２と、ネットワーク１やネットワーク２との通信イン
タフェース（通信ＩＦ）１３とを含む。ＣＰＵ１１は、プロセッサ（制御装置）の一例である。
【００２７】
メモリ１２は、不揮発性記憶媒体と、揮発性記憶媒体とを含む。不揮発性記憶媒体は、例えば、Read Only Memory（ＲＯＭ），ハードディスク，Solid State Drive（ＳＳＤ）
，ＥＥＰＲＯＭ，フラッシュメモリなどであり、ＣＰＵ１１によって実行されるプログラムや、プログラムの実行に際して使用されるデータを記憶する。揮発性記憶媒体は、例えばRandom Access Memory（ＲＡＭ）であり、ＣＰＵ１１の作業領域として使用される。メモリ１２は、「記憶装置」、「記憶媒体」の一例である。
【００２８】
通信ＩＦ６は、通信に係る信号変換、プロトコル変換を司る装置である。ＣＰＵ１１は、メモリ１２に記憶されたプログラムをロードして実行することによって、ジョブスケジューラとして動作し、ネットワーク１やネットワーク２を形成する複数の計算ノードＮに対するジョブ割り当てを行う。
【００２９】
ジョブ管理装置１０のＣＰＵ１１は、プログラムの実行によってジョブスケジューラとして動作する。これによって、ＣＰＵ１１は、ジョブスケジューラとして、図１に示したような、「ジョブ受け付け」，「ジョブ選択」，「計算資源選択」，「ジョブ実行」の各処理を行うことができる。
【００３０】
＜資源マップ＞
ジョブ管理装置１０で実行される空き資源探索処理では、時間軸を考慮した空き資源探索のために、「資源マップ」を使用する。図６は、スケジューリングマップ上に表された資源マップの例を示す。資源マップは、計算資源に割り当てられたジョブの実行の開始予定時刻及び終了予定時刻について生成される資源使用状況のスナップショットである。資源マップは、「マップ構造体」とも呼ばれる。資源マップの情報は、例えばジョブの割り当て時において、ジョブの開始予定時刻及び終了予定時刻について作成され、メモリ１２に記憶される。
【００３１】
図６に示す例では、ジョブ“job1”の前後（開始予定時刻及び終了予定時刻）における資源マップ（１）及び（３）が作成され、ジョブ“job2”の前後に資源マップ（２）及び（３）が作成され、ジョブ“job3”の前後に資源マップ（３）及び（４）が作成されている。さらに、現在時刻の資源マップ（nowマップ）が作成されている。
【００３２】
なお、計算ノード間を接続するネットワークが三次元トーラスネットワーク（ネットワーク２）である並列計算機システムの場合では、各資源マップは、図６中の[３次元イメ
ージ]で示すように、全体として直方体に形成された複数の計算ノードのスナップショッ
トとなる。図６の例では、直方体は、幅，奥行き，及び高さ方向に並べられた４×３×３の計算ノードＮの集合である。
【００３３】
図６に示す３次元イメージは、資源マップ（３）を示し、３段に積まれた計算ノード群のうちの下から１段目及び２段目の計算ノード群がジョブ“job3”に割り当てられた割り当て済ノードであり、最上段の計算ノード群が空き状態（未割り当て状態）の計算ノード（空きノード：空き資源）であることを示している。
【００３４】
＜参考例＞
次に、資源マップを用いた空き資源探索処理の参考例について説明する。図７は、図６に示した状態の資源マップを経過時間４０分のジョブ“jobA”を割り当てる場合の空き資源探索処理の参考例の概要を示す。
【００３５】
“jobA”の経過時間は４０分であり、計算ノードの直方体のうちの１段分の計算ノード群を資源として要求する。このため、ジョブスケジューラは、最初に現在時刻から４０分後の時刻までに含まれるnowマップ，資源マップ（２）及び資源マップ（３）の論理和（
ＯＲ）を計算してマージマップＡ１を作成する。論理和の計算には、各資源マップ（now
マップを含む）をビット値に換算したビット換算値を用いる。ビット換算値において、例えば、割り当て済みの領域はオフ“０”で示され、未割り当て（空き状態）の領域はオン“１”で示される。以下の説明で言及する論理演算においては、このようなビット換算値が用いられているものとする。
【００３６】
もし、マージマップＡ１に空き状態の計算ノード群を示す資源があれば、当該資源は、現在時刻から４０分間連続して空き状態である計算ノード群（空きノード群）を示す。但し、図７の例では、マージマップＡ１には“jobA”に割り当て可能な空きノード群が存在しない。
【００３７】
このため、ジョブスケジューラは、次に、資源マップ（２）の時刻（“job2”の開始予定時刻）から４０分後の時刻の間に含まれる資源マップ（２）及び資源マップ（３）の論理和を計算してマージマップＡ２を作成する。但し、図７では、マージマップＡ２の作成に係る図示は省略されている。続いて、ジョブスケジューラは、マージマップＡ２に“jobA”を割り当て可能な空きノード群があるか否かを調べる。しかし、マージマップＡ２にも空きノード群が存在しない。
【００３８】
次に、ジョブスケジューラは、資源マップ（３）の時刻（“job3”の開始予定時刻）から４０分後の時刻の間に含まれる資源マップ（３）と資源マップ（４）との論理和演算によってマージマップ（マージマップＢ）を作成する。続いて、ジョブスケジューラは、マージマップＢに“jobA”を割り当て可能な空きノード群があるかを調べる。マージマップＢには“jobA”を割り当て可能な空きノード群が存在する。このため、空きノード群の探索が終了し、“jobA”が発見された空きノード群に割り当てられる。
【００３９】
図８は、空き資源探索処理の参考例のフローチャートである。図８に示す処理は、図２に示した資源選択処理に適用可能なサブルーチンの一例である。図８において、最初の０１では、変数“ELAPSE（経過時間）”に対し、選択されたジョブ“JOB”（サブルーチン
の引数）の経過時間が設定される。また、変数“MMAP（マージマップ）”が初期化される。さらに、変数“SMAP（最初の資源マップ）”としてnowマップが設定され、変数“NMAP
（次の資源マップ）”の値に“SMAP.next（SMAPの次の資源マップ）”が設定される。
【００４０】
０１の処理を図７の例に則して説明すると、“ELAPSE”の値として“JOB”である“jobA”の経過時間“４０分”が設定される。また、“SMAP”としてnowマップが設定され、“NMAP”として資源マップ（２）が設定される。
【００４１】
０２では、MMAP（マージマップの初期値）とSMAP（nowマップ）との論理和が計算され
、SMAPの値がMMAPとして保持される。“SMAP”に“SMAP.next（SMAPの次の資源マップ）
”が設定される。図７の例に従うと、SMAPとしてnowマップの次の資源マップ（２）が設
定される。
【００４２】
次の０３では、変数“SMAP.time（SMAPの時刻）”の値がnow（現在時刻）に“ELAPSE”の値を加えた時刻より小さいか否かが判定される。図７の例に従うと、現在時刻から“jobA”の経過時間“４０分”が経過した時刻内に、資源マップ（２）の時刻が含まれているか否かが判定される。
【００４３】
０３において、“SMAP.time”が“(now+ELAPSE)”の値より小さい場合（０３，ＹＥＳ
）には、処理が０２に戻され、そうでなければ（０３，ＮＯ）、処理が０４に進む。図７の例に従うと、資源マップ（２）の時刻は、現在時刻から４０分経過した時刻より前であるので、処理が０２に戻る。
【００４４】
再度の０２の処理において、MMAPとSMAPとの論理和演算によって、nowマップと資源マ
ップ（２）との論理和が算出される。また、SMAPとして次の資源マップ（３）が設定される。
【００４５】
その後、０３における処理において、資源マップ（３）の時刻が現在時刻から４０分経過前であるので、再び処理が０２に戻り、MMAP（マージマップＡ１）とSMAP（資源マップ（３））との論理和演算によって、マージマップＡ２が求められる。また、資源マップ（３）の次の資源マップ（４）がSMAPに設定される。
【００４６】
次の０３の処理において、資源マップ（４）の時刻は、現在時刻から４０分経過した時刻の後であるので（０３，ＮＯ）、処理が０４に進む。０４では、“JOB”，すなわち“jobA”がMMAP（マージマップ）の空き資源に収まるか否かが判定される。
【００４７】
このとき、空き資源があれば（０４，ＹＥＳ）、図８の処理が終了（リターン）し、当該空き資源に“jobA”が割り当てられる。これに対し、空き資源が無ければ（０４，ＮＯ）処理が０５に進む。図７に示す例に則して説明すると、マージマップＡ３に“jobA”を割り当て可能な空き資源は存在しないので、処理が０５に進む。
【００４８】
０５では、MMAPが初期化される。また、SMAPにNMAPの値が設定され、NMAPにSMAP.next
の値が設定される。図７の例に従うと、SMAPとして資源マップ（２）が設定され、NMAPとして資源マップ（３）が設定される。
【００４９】
０５の処理が終了すると、０２に処理が戻り、MMAPの初期値とSMAPとの論理和演算によって、資源マップ（２）の値が保持される。また、SMAPとして資源マップ（３）が設定される。次の０３では、資源マップ（３）の時刻に基づき、“ＹＥＳ”の判定がなされ、処理が０２に戻る。
【００５０】
再度の０２において、MMAPとして、資源マップ（２）と資源マップ（３）との論理和が算出される。また、SMAPとして資源マップ（４）が設定される。次の０３では、資源マップ（４）の時刻が現在時刻から４０分以後であるので、“ＮＯ”の判定がなされ、０４に進む。０４にて、マージマップには“jobA”を割り当て可能な空き資源は存在しないと判定され、０５に処理が進む。０５では、MMAPが初期化され、SMAPとして資源マップ（３）が設定され、NMAPとして資源マップ（４）が設定される。
【００５１】
その後、処理が０２に戻り、０２及び０３のループ処理が実行される。これによって、MMAPとして資源マップ（３）と資源マップ（４）との論理和（マージマップＢ）が求められた状態で、０４に処理が進む。０３にて、資源マップ（５）の時刻が０３の条件を満たさないからである。そして、０４にて、MMAP（マージマップＢ）に“jobA”を割り当て可能な空き資源が発見される（０４，ＹＥＳ）。このため、図８の処理が終了し、空き資源に“jobA”が割り当てられる。
【００５２】
＜閉じ空間＞
次に、本実施形態における資源探索処理にて探索対象となる「閉じ空間」について説明する。一部の計算ノード（計算ノード群）が、「或る時刻まで未割当て」かつ「その時刻以降は割り当て(予約)済み」となる場合がある。この時点で未割り当てのジョブに必要な計算ノードの数、空間的配置の両方の条件を満たす計算ノードの集合について、未割り当てのジョブの予定実行時間以上の長さを持つ空き時間がなければ、当該計算ノードの集合に対してジョブを割り当てることができない。
【００５３】
「或る時刻まで未割当て」かつ「その時刻以降は割り当て(予約)済み」となる計算ノードの集合と、当該計算ノードの集合が割り当て済となる前の時間帯の対からなる「計算資源」を、本明細書では「閉じ空間」と呼ぶ。図６に示す例では、スケジューリングマップの左隅にある空き領域が閉じ空間に該当する。計算ノードの集合の空間的配置が二次元の長方形あるいは三次元の直方体である場合には、各々の(時間軸を含む)「閉じ空間」の全体は、三次元あるいは四次元の資源となる。
【００５４】
閉じ空間をなす計算ノードの集合(「閉じ空間」の空間軸)は、割り当て済みとなる時刻以前には、「使用可能期限付きの資源」と考えることができる。すなわち、閉じ空間は、空間軸の割り当て条件と時間軸の割り当て条件とを満たすことができるジョブに対して割り当て可能な資源である。ここに、空間軸の割り当て条件は、計算ノード数と計算ノードの集合の配置形状についての条件であり、時間軸の割当て条件は、既に割り当て済みである時刻が到来する迄の時間がジョブに必要な時間より長いという条件である。
【００５５】
＜本実施形態で解決する問題＞
図２に示した計算資源選択処理において、図７及び図８で説明したような空き資源探索処理（参考例）を適用して閉じ空間を探索しようとすると、以下の問題が生じていた。すなわち、参考例の空き資源探索処理は、nowマップを含む資源マップ間の論理和の計算及
び空きノードの調査を繰り返す時間のかかる処理である。
【００５６】
このため、並列計算機システムの規模が大きくなると、実行（割り当て）待ちのジョブ全体から見た空き資源探索処理にかかる時間が大きくなる。これによって、以下に説明するように、「空き資源の探索処理時間」のために空き時間帯が実質的に短くなり、ジョブを割当てられない計算資源が生ずる場合がある。
【００５７】
これまでに説明したように、計算資源選択処理では、優先度が高い順でソートされた複数のジョブの一つ一つに対して空き資源探索（割り当て可能なノードの集合および利用可能な時間帯）及び割り当てが行われる。換言すれば、ジョブ選択処理においてソートされたジョブ列において優先度が低いジョブ程空き資源探索処理の開始が後回しにされる。この結果、或るジョブを割り当て可能な「閉じ空間」に対して当該或るジョブを割り当てる時期を逃す場合があり得る。
【００５８】
図９は、上記した問題の具体例を示す説明図である。図９に示す例は、現在時刻において、２つの計算ノードを５５分使用可能な空き資源Ｃ（スケジューリングマップの左上を参照）が存在している。そして、“job6”から“job99999”までの約１０万の未割り当ての実行待ちジョブに対する計算資源選択処理が実行されていると仮定する。なお、資源量は、計算ノード数及び時間帯を用いて“ｘノードｘｘ分”のように表記されることもある。上記空き資源の資源量は、“２ノード５５分”である。
【００５９】
未割り当ての複数のジョブには、９９９９９番目に空き資源探索処理が開始されるジョブ“job99999”が含まれている。ジョブ“job99999”の要求資源量は、２ノード５０分である。このため、現在時刻から５分以内にジョブ“job99999”の空き資源探索処理及び割り当てが実行されれば、当該空き資源Ｃを活用することができる。
【００６０】
しかしながら、計算ノード数が多くなると１ジョブ当りの空き資源探索に要する時間が長くなる。また、ジョブ“job99999”のように優先度が低いジョブに対しては、当該ジョブの空き資源探索開始（割り当て）までに長い時間がかかる。例えば、ジョブ“job99999”の空き資源探索が開始されるまでに２０分が経過したと仮定する。
【００６１】
この場合、現在時刻は破線の位置まで移動する。このような現在時刻では、空き資源Ｃの資源量は時間長の短縮によって２ノード３５分となっている。このため、ジョブ“job99999”を空き資源Ｃに割り当てることができない。この結果、“job6”の割り当て時点では存在していた２ノード５５分の資源が無駄となり、資源の稼働率が低くなる。
【００６２】
以下、上記問題を解決し得るジョブ割り当て方法を実行する並列計算機システムの制御方法について説明する。
【００６３】
＜閉じ空間優先制御処理（閉じ空間探索）＞
図１０は、実施形態に係る閉じ空間優先制御処理の説明図である。図１０の例では、スケジューリングマップ上において、各ジョブ“job1”〜ジョブ“job5”のそれぞれに対する割り当てが既に済んでいる。これによって、スケジューリングマップの左上隅に閉じ空間Ａが存在している。
【００６４】
現在時刻から見た閉じ空間Ａの資源量は“２ノード５５分”である。本実施形態では、閉じ空間Ａのような現在時刻と或るジョブ（図１０では“job3”）の開始予定時刻の間に亘って計算ノードの一部が空き状態である空き資源を、探索対象の閉じ空間とする。以下の説明では、空き状態である複数の計算ノードの一部を“空きノード”と称することもある。
【００６５】
ジョブスケジューラ（ジョブスケジューラとして動作するＣＰＵ１１）は、次のようにして閉じ空間Ａを検出する。
【００６６】
（手順１）
最初に、ジョブスケジューラは、現在時刻nowから資源マップ（２）の時刻（“job2”
の終了予定時刻）までにおける閉じ空間の有無の判定を行う。すなわち、ジョブスケジューラは、nowマップのビット換算値と資源マップ（２）のビット換算値との論理和（ビッ
ト論理和）を算出し、マージマップ（２）´とする。
【００６７】
次に、ジョブスケジューラは、nowマップと資源マップ（２）´との排他的論理和（Ｘ
ＯＲ）を算出する。排他的論理和においてビット“オン”の位置は、空きノードによって形成される閉じ空間を示す。但し、nowマップとマージマップ（２）´との排他的論理和
（ＸＯＲ）は、全ビット“オフ”となるので、閉じ空間Ａは検出されない。
【００６８】
（手順２）
次に、ジョブスケジューラは、現在時刻nowから資源マップ（３）の時刻（“job1”の
終了予定時刻且つ“job3”の開始予定時刻）までにおける閉じ空間Ａの有無の判定を行う。すなわち、ジョブスケジューラは、マージマップ（２）´と資源マップ（３）のビット換算値との論理和を算出し、マージマップ（３）´とする。
【００６９】
（手順３）
次に、ジョブスケジューラは、nowマップとマージマップ（３）´との排他的論理和（
ＸＯＲ）を算出する。排他的論理和において、ビット“オン”の位置が検出される。当該位置は、閉じ空間Ａを示す。すなわち、ビット“オン”の位置は空きノードを示し、現在時刻nowと資源マップ（３）の時刻との間の時間帯が当該空きノードを使用可能な時間帯
を示す。
【００７０】
その後、ジョブスケジューラは、現在時刻nowから資源マップ（４）の時刻（“job3”
の終了予定時刻）までにおける閉じ空間の有無の判定を試行する。但し、資源マップ（３）に空き領域がないので、閉じ空間の探索が終了する。
【００７１】
（手順４）
閉じ空間Ａが発見されると、ジョブスケジューラは、未割り当てのジョブから閉じ空間Ａに入るジョブを検索する。図１０の例では、未割り当てのジョブとしてジョブ“job6”〜“job99999”がある。具体的には、未割り当てのジョブのリスト（図示せず）がメモリ１２に記憶されており、各ジョブ“job6”〜“job99999”は、優先度順でソートされている。また、リストには、各ジョブ“job6”〜“job99999”の実行に要するノード数（要求ノード数）と、経過時間（実行所要時間）とが保持されている。
【００７２】
ジョブスケジューラは、閉じ空間Ａのノード数及び時間長と、リスト中の各ジョブ“job6”〜“job99999”の要求ノード数及び経過時間との比較を、優先度が高い順（ソート順）で実行する。ジョブスケジューラは、要求ノード数が閉じ空間Ａのノード数に収まり、且つ経過時間が閉じ空間Ａの時間長に収まるジョブを発見すると、検索を終了して当該ジョブを閉じ空間Ａに割り当てる。例えば、閉じ空間Ａに収まるジョブ“job99999”が発見され、閉じ空間Ａに割り当てられる。
【００７３】
図１１は、図１０を用いて説明した閉じ空間探索処理の例を示すフローチャートである。当該処理は、ＣＰＵ１１によって実行される。図１１に示す処理の開始時点では、図１０に示したように、“job1”〜“job5”の割り当てが既に済んでおり、nowマップ及び資
源マップ（１）〜（６）の情報をＣＰＵ１１が作成してメモリ１２に記憶しているものとする。そして、図１１に示す処理は、ジョブ“job6”の割り当て処理の時点で開始されたと仮定する。
【００７４】
図１１において、最初の１０１では、以下の処理がなされる。すなわち、ＣＰＵ１１は、変数“MTIME”に対し、所定の時間が設定される。MTIMEは、閉じ空間の探索を行う時間範囲を示す。図１１の例では、MTIMEとして８時間が設定されているが、MTIMEの値は適宜設定可能である。MTIMEの値は、ジョブ管理装置１０にオペレータが図示しないコンソー
ル（入力装置及び出力装置）を用いて入力した値を適用することができる。MTIMEの長さ
を調整することで、閉じ空間優先制御処理の実行時間を調整することができる。
【００７５】
ＣＰＵ１１は、設定されたMTIMEの値に従って、MMAP（マージマップ）の初期化を行う
。図１１の例では、MTIME＝８時間の設定に従って、１０分間隔で４８０分（８×６＝４
８）の配列を初期化する。また、ＣＰＵ１１は、変数MMの値（カウンタ値）を“１”に設定する。さらに、ＣＰＵ１１は、MMAP[MM-1]として、nowマップを設定し、NMAPとして、
“nowマップ.next”を設定する。１０１の処理を図１０の例に則して説明すると、MMAP[MM-1]として、nowマップが設定され、NMAPとして、資源マップ（２）が設定される。なお
、“MMAP[MM]”は、マージマップ用のマップ構造体配列を示す。
【００７６】
次の１０２では、ＣＰＵ１１は、MMAP[MM]（MM=1のときのマージマップ）として、MMAP[MM-1]とNMAPとの論理和を算出する。図１０の例に則して説明すると、nowマップと資源
マップ（２）との論理和（マージマップ（２）´）が算出される。
【００７７】
また、ＣＰＵ１１は、変数“XMAP”（閉じ空間用マップ構造体変数）として、nowマッ
プとMMAP[MM]との排他的論理和を算出する。すなわち、図１０に示すnowマップとマージ
マップ（２）´との排他的論理和が算出される。さらに、ＣＰＵ１１は、XMAPのビットオン位置をTLIST（閉じ空間リスト）に設定する。
【００７８】
次の１０３では、ＣＰＵ１１は、MMAP[MM]（マージマップ（２）´）に空きノードがあるか否かを判定する。このとき、空きノードが無ければ（１０３，ＮＯ）閉じ空間探索処理が終了する。これに対し、空きノードがあれば（１０３，ＹＥＳ）処理が１０４へ進む。
【００７９】
１０４へ処理が進むと、ＣＰＵ１１は、変数“NMAP.time（NMAPの時刻）”がnow（現在時刻）に“MTIME”の値を加えた時刻より小さいか否かが判定される。図１０の例に則し
て説明すると、ＣＰＵ１１は、資源マップ（２）の時刻が現在時刻からMTIMEとして設定
した時間（８時間）内か否かを判定する。資源マップ（２）の時刻は８時間以内であるため、処理が１０５に進む。NMAP.timeが現在時刻より８時間を過ぎているときには、閉じ
空間探索処理が終了する。
【００８０】
１０５へ処理が進むと、ＣＰＵ１１は、変数MMの値をインクリメント（MM=2）する。さらに、ＣＰＵ１１は、NMAPの値をNMAP.next（資源マップ（３））に設定し、処理を１０
２に戻す。再度の１０２の処理では、ＣＰＵ１１は、MMAP[MM=2]として、MMAP[MM=1]（マージマップ（２）´）とNMAP（資源マップ（３））との論理和であるマージマップ（３）´を算出する。さらに、ＣＰＵ１１は、XMAPとして、nowマップとマージマップ（３）´
との排他的論理和を算出し、XMAPのビットオン位置をTLISTに設定する。
【００８１】
再度の１０３の処理において、ＣＰＵ１１は、MMAP[MM]（マージマップ（３）´）に空きノードがないため、閉じ空間探索処理を終了する。ＣＰＵ１１は、TLISTに設定したビ
ットオン位置を、空きノードとして認識することができる。また、ＣＰＵ１１は、例えば
MMの値（カウンタ値）より、資源マップを特定することができ、当該資源マップの時刻と現在時刻との間の時間帯で空き状態の計算ノードが空き資源（閉じ空間）であると認識することができる。これによって、閉じ空間Ａ（ノード数及び時間帯（時間長））を特定することができる。
【００８２】
なお、図１１に示した処理に代えて、nowマップとnowマップの直後の資源マップとの論理和（マージマップ）を求めたときに、当該マージマップに空き資源があるか否かの判定（１０３）を行い、空き資源があるときに排他的論理和の演算（XMAPの算出）を行うようにしても良い。このようにすれば、nowマップとnowマップの直後の資源マップとの論理和（マージマップ）に空き資源がないときに、図１１の処理を終了することができ、閉じ区間探索処理の短縮化を図ることができる。
【００８３】
上述した閉じ空間探索処理は、例えば、複数のジョブが資源に割り当てられた状態において所定のタイミングで開始することができる。例えば、上述したジョブ受け付け処理でまとめられたジョブの集合の全て（ジョブ列）に対するジョブ選択処理及び計算資源選択処理が終了した後に、これらの処理から切り離された形式で実行することができる。
【００８４】
或いは、計算資源選択処理において、適宜のタイミングで閉じ空間探索処理が割り込み（挿入）形式で実行されるようにしても良い、例えば、１つのジョブに対する割り当て（計算資源選択処理）の前後で、閉じ空間探索処理が実行されるようにすることができる。或いは、２以上の所定数のジョブの割り当てが終了する毎に閉じ空間探索処理が実行されるようにしても良い。或いは、ジョブ選択処理でのソートによりジョブ列が生成されてから周期的なタイミング（一定の時間間隔）で閉じ空間探索処理が実行されるようにしても良い。或いは、閉じ空間探索処理は、ジョブ管理装置１０に入力される実行開始指示を受けて実行を開始することもできる。
【００８５】
＜実施形態１の作用効果＞
実施形態に係る閉じ空間優先制御処理では、閉じ空間探索処理によって閉じ空間Ａが発見され、未割り当てのジョブの中から閉じ空間Ａに収まるジョブが検索されると、当該ジョブは、当該ジョブより優先度の高い未割り当てのジョブがあっても優先的に割り当てられる。これによって、図９に示したような閉じ空間Ａに係る資源が現在時刻の経過で無駄になるのを回避することができる。換言すれば、現在時刻の経過によって隙間の空き資源が無駄になるのを低減することができる。これによって、資源の稼働率向上を図ることができる。
【００８６】
閉じ空間優先制御処理は、閉じ空間探索処理によって発見された閉じ空間に割り当て可能なジョブを未割り当てのジョブ全てを対象として検索し、検出されたジョブを割り当てる処理である。従って、通常の空き資源探索処理、すなわち、優先度に従って１つのジョブを選択し、選択したジョブを割り当て可能な資源を探索する処理とは異なる。
【００８７】
閉じ空間探索処理は、nowマップ及び資源マップの累積的な論理和演算と、論理和演算
結果とnowマップとの排他的論理和演算とによってなされる。閉じ空間探索処理は、この
ような簡易な論理演算であり、現在時刻から或る割り当て済みジョブの実行開始時刻までの時間帯を対象としてなされる短時間の処理である。また、閉じ空間に収まるジョブの検索処理は、閉じ空間のノード数及び時間長と未割り当てのジョブの要求ノード数及び経過時間（実行所要時間）との比較でなされる。このため、短時間で全未割り当てジョブに対する比較を完了することができる。
【００８８】
このように、閉じ空間探索及びジョブ検索を用いたジョブ割り当ては、通常の空き資源探索処理でのジョブ割り当てよりも短時間で処理を終えることが可能である。このため、
或る現在時刻で生じた閉じ空間に対し、対応するジョブが割当てられるまでに経過する時間は少なくなる。従って、隙間の空き資源（閉じ空間）を稼働率向上のために有効に活用することができる。
【００８９】
また、上記した閉じ空間優先制御処理は、このため、通常の優先度順での割り当て処理（スケジューリング）と組み合わせることができる。この場合、閉じ空間優先制御処理は、優先度順でのジョブ割り当てによって形成された閉じ空間に対して行われる。このため、閉じ空間に割り当てられるジョブは、割り当て済みのジョブの実行開始を妨げない。
【００９０】
また、上記したように、閉じ空間優先制御処理は、現在時刻から或る割り当て済みのジョブの開始予定時刻までの時間帯を対象としてなされるので、短時間で終えることが可能である、このため、通常の優先度順でのジョブ割り当てに閉じ空間優先制御処理を組み合わせたときにおいて、優先度順での割り当て処理に与える影響は小さい。換言すれば、未割り当てジョブの全てに対するスケジューリングのトータル所要時間に対する影響を抑えることができる。
【００９１】
但し、閉じ空間を形成する複数の割り当て済みのジョブが優先度順で割り当てられたものであることは必須の条件ではなく、優先度以外の順序や割り当て方法で割り当てがなされたジョブの割り当て状況に対して閉じ空間優先制御処理は適用され得る。例えば、ジョブの投入順（受け付け順）でジョブを資源に割り当てるスケジューリングにおいても、本実施形態に係る閉じ空間優先制御処理は適用可能である。
【００９２】
また、閉じ空間に割り当て可能なジョブの検索は、優先度順で実行される。このため、閉じ空間優先制御処理を優先度に沿って実行することができる。もっとも、検索の順序は優先度順に限定されず、適宜のルールで実行可能である。
【００９３】
〔実施形態２〕
次に、実施形態２について説明する。実施形態２の構成は、実施形態１と共通する部分を含むので、主として相違点について説明し、共通点については説明を省略する。実施形態１で説明した閉じ空間探索処理は、閉じ空間探索処理の実行によって閉じ空間が発見された場合には、稼働率向上に貢献することができる。これに対し、発見できなかった場合には、単なるロスタイムとなり得る。
【００９４】
実施形態１で説明したように、閉じ空間探索処理は、様々な条件下で開始されるようにすることができる。但し、閉じ空間探索処理の頻度が徒に大きくなると、上記したロスタイムが無視できない程大きくなり、ジョブスケジューラのスケジューリング性能の劣化を招来する虞がある。このため、閉じ空間が存在する状況を予測し、閉じ空間が存在する可能性が高い場合に限って閉じ空間探索処理を実行することが考えられる。
【００９５】
図１２は、実施形態２に係る空き資源率管理による閉じ空間探索方法の説明図である。図１２に示すように、実施形態２では、ジョブ管理装置１０で管理する（メモリ１２に記憶される）資源マップの情報に空き資源率が含まれる。空き資源率は、資源マップにおける全計算ノード（全資源）に対する空きノード（空き資源）の占有率を示す。
【００９６】
実施形態２では、ＣＰＵ１１は、ジョブを割り当てる毎に、現在時刻以降の資源マップの空き資源率をチェックする。チェックの結果、現在時刻の空き資源率よりも所定量（例えば２０[％]）以上の減少が発生した場合に、実施形態１で説明した閉じ空間探索処理を開始することで、無駄な閉じ空間探索処理の実行を回避する。
【００９７】
図１２に示す例では、現在時刻の資源マップ（nowマップ）の空き資源率が２５％であ
る。そして、現在時刻より後の資源マップの空き資源率をチェックし、現在時刻の空き資源率から所定量（例えば２０[％]）以上空き資源率が低下したときに、閉じ空間探索が実行されるようにする。
【００９８】
図１２において、資源マップ（２）の空き資源率は５０％であり、nowマップの空き資
源率より２５[％]増加している。このため、閉じ空間探索処理は開始されない。これに対し、資源マップ（３）の空き資源率は０％であり、nowマップの空き資源率との比較にお
いて２５[％]減少している。このため、閉じ空間探索処理が開始される。
【００９９】
或る資源マップの空き資源率が現在時刻の空き資源率より低下することは、図１２の“job3”のように、閉じ空間の最後尾（終了時刻）を形成するジョブが割り当てられている可能性が高い。すなわち、閉じ空間が存在する可能性が高い。そこで、実施形態２では、現在時刻の空き資源率からの低下量に閾値を設けて、閉じ空間が存在する可能性が高い状況下に限って閉じ空間探索処理が実行されるようにする。なお、低下量（現在時刻の空き資源率からの減少分）に対する閾値は適宜設定可能である。
【０１００】
図１３は、空き資源率を考慮した閉じ空間探索処理の例を示すフローチャートである。図１３に示す処理は、これまでに説明した「ジョブ選択処理」及び「計算資源選択処理」に該当し、「ジョブ選択処理」開始のタイミングで開始される。一例として、図１３に示す処理の開始時点では、例えば、図１２に示すように、“job1”〜“job5”の割り当てが既に済んでおり、nowマップ及び資源マップ（１）〜（６）の情報をＣＰＵ１１が作成し
てメモリ１２に記憶しているものとする。
【０１０１】
図１３に示す処理が開始されると、２０１において、ＣＰＵ１１は、変数“MTIME”と
して閉じ空間探索範囲時間（探索範囲）を設定する。閉じ空間探索範囲時間の長さは可変（適宜設定可能）であり、本実施形態では、一例として８時間が設定される。
【０１０２】
次の２０２では、ＣＰＵ１１は、全ての実行待ちジョブ（未割り当てジョブ）を優先度が高い順でソートする。次の２０３では、ＣＰＵ１１は、変数“NMAP”の値を“nowマッ
プ.next（nowマップの次の資源マップ）”に設定する。図１２に示す例に従えば、“now
マップ.next”として資源マップ（２）が設定される。
【０１０３】
次の２０４では、ＣＰＵ１１は、変数“NMAP.time”の値が“（now＋MTIME）”の値よ
り小さいか否かを判定する。すなわち、ＣＰＵ１１は、NMAPに該当する資源マップの時刻が現在時刻からMTIMEの時間（８時間）だけ経過した時刻より前か否かを判定する。２０
４の条件が満たされる場合（２０４，ＹＥＳ）には、処理が２０５に進み、そうでない場合（２０４，ＮＯ）には処理が２１３に進む。
【０１０４】
２０５では、ＣＰＵ１１は、“nowマップ.free（nowマップ（現在時刻）の空き資源率
）”から“NMAP.free（NMAPの空き資源率）”を減じた値“FREE”（nowマップの空き資源率からの減少分）を求める。次の２０６では、ＣＰＵ１１は、“FREE”の値が所定閾値（２０[％]）以上か否かを判定する。このとき、“FREE”の値が２０以上であれば（２０６，ＹＥＳ）、処理が２０７に進み、そうでなければ（２０６，ＮＯ）、処理が２１１に進む。
【０１０５】
２０７では、ＣＰＵ１１は、図１１に示した閉じ空間探索処理のサブルーチンを呼び出して実行する。閉じ空間探索処理が終了すると、処理が２０８に進み、ＣＰＵ１１は、閉じ空間が発見されたか否かを判定する。閉じ空間が発見された場合には（２０８，ＹＥＳ）、処理が２０９に進み、発見されなかった場合（２０９，ＮＯ）には、処理が２１１に進む。
【０１０６】
２０９では、ＣＰＵ１１は、閉じ空間へのジョブ割り当て処理を実行する。すなわち、実施形態１で説明したように、ＣＰＵ１１は、実行待ちのジョブから閉じ空間に収まるジョブを検索し、ジョブが見つかった場合には、ジョブの優先度より高い優先度を有する未割り当てのジョブがあっても当該ジョブを閉じ空間に割り当てる。その後、処理が２１０に進む。なお、２０９にて、閉じ空間に収まるジョブが発見されなかった場合も処理が２１０に進む。
【０１０７】
２１０では、ＣＰＵ１１は、閉じ空間に割り当てられたジョブ数が０より大きい（１以上）か否かを判定する。このとき、ジョブ数が１以上の場合には（２１０，ＹＥＳ）には、処理が２１５へ進み、そうでない場合（２１０，ＮＯ）には、処理が２１１に進む。
【０１０８】
２１１では、ＣＰＵ１１は、“NMAP.next” （現在のNMAPの次の資源マップ）に該当する資源マップがあるか否かを判定する。該当の資源マップがあれば（２１１，ＹＥＳ）、処理が２１２に進む。該当の資源マップがない場合（２１１，ＮＯ）には、これ以上の空き資源率の調査はできないことから、処理が２１３へ進む。
【０１０９】
２１２では、ＣＰＵ１１は、NMAP（次の資源マップ）を“NMAP.next”に設定し、処理
を２０４に戻す。その後、２０４又は２１１にてＮＯの判定がなされるまで、２０４〜２１２のループが繰り返される。
【０１１０】
２１３に処理が進んだ場合には、ＣＰＵ１１は、２０２でソートした実行待ちジョブの列の先頭に位置するジョブと取り出して引数“JOB”に設定する。次の２１４で、ＣＰＵ
１１は、資源選択のサブルーチンを読み出して“JOB”に対する資源選択処理を行う。資
源選択処理として、図８に示したサブルーチンが実行され、優先度に従ったジョブの割り当てが行われる。
【０１１１】
ＣＰＵ１１は、２１４でジョブの割り当てを行うと、当該ジョブの開始予定時刻及び終了予定時刻に対する資源マップを生成し、メモリ１２に記憶する。当該ジョブの開始予定時刻及び終了予定時刻のそれぞれが、先に割り当て済みのジョブの開始予定時刻や終了予定時刻と重複する場合には、既存の資源マップが更新される。新たなジョブ割り当てに伴い、空きノード状況（空き資源率）が変化するからである。
【０１１２】
２１５では、ＣＰＵ１１は、未割り当ての残りのジョブがあるか否かを判定する。このとき、全てのジョブに対する割り当てが終了していれば（２１５，ＮＯ）、図１３の処理が終了する。これに対し、残りのジョブがある場合には（２１５，ＹＥＳ）、ＣＰＵ１１は、処理を２０３へ戻す。
【０１１３】
その後、再び２０４〜２１２のループ処理が実行され、２０４又は２１１でＮＯの判定がなされると、処理が２１３へ進み、優先度に従ってジョブが一つ割り当てられる（２１４）。このような処理が残りジョブが０になるまで繰り返され、残りジョブが０になると、図１３の処理が終了する。なお、図１３の処理において、現在時刻の経過に伴い、now
マップは適宜のタイミングで更新される。例えば、２１４の資源選択処理が開始されるに先立ち、nowマップが現在時刻に合わせて更新されるようにしても良い。
【０１１４】
実施形態２に係る図１３の処理によれば、閉じ空間の探索範囲（現在時刻から８時間）において、ジョブ割り当てによって形成された閉じ空間を探索し、未割り当てのジョブを割り当てる処理が行われる。閉じ空間探索処理は、空き資源率の低下量が閾値を超えた場合に限って実行される。このため、無駄な閉じ空間探索処理を回避することができ、通常の優先度に従ったジョブ割当処理に対する影響を小さくすることができる。
【０１１５】
なお、上記した図１３の説明では、ジョブ選択処理の開始時点で割り当て済みのジョブとして、実行中のものと実行待ちのものとが存在する前提で説明した。但し、実際のジョブ選択処理の開始時点では、実行中のジョブを除き、実行待ちのジョブは未割り当ての状態にされる。すなわち、割り当て済み且つ実行待ちのジョブに対する割り当て状態が一旦解除される。ジョブ選択処理におけるジョブのソートがこのような割り当てが解除されたジョブも含めて実行されることで、優先度に従ったジョブ割り当ての精度を高めることができる。
【０１１６】
図１４は、図１３に示す処理を行った場合の作用説明図である。図１４に示す“job1”及び“job2”は、ジョブ選択処理の開始時点で実行中のジョブと仮定する。図１４では、“job3”が割り当てられた様子が示されているが、“job3”〜“job99999”の約１０万個のジョブが実行待ち（未割り当て）ジョブであると仮定する。
【０１１７】
上記仮定において、図１３の処理が実行されると、２０２にて、“job3”〜“job99999”が優先度順でソートされる。次の２０４〜２１２のループにおいて、“job1”及び“job2”に係る資源マップに関して２０６の条件は満たされない。また、“job1”の終了予定時刻より後の資源マップが存在しないことから、処理が２１３に進み、２１４で“job3”に対する割り当てが行われ、“job3”に係る資源マップが作成される。“job3”の割り当ての結果、図１４に示す状態となり、閉じ空間Ａが生じる。
【０１１８】
その後、２０４以降の処理が実行されると、２０６でＹＥＳの判定がなされ、閉じ空間探索処理（２０７）が実行される。この結果、閉じ空間Ａが発見される。閉じ空間Ａが発見されると、閉じ空間Ａに収まるジョブが未割り当てのジョブから検索される。すなわち、閉じ空間Ａに収まるジョブが優先度順で“job4”から“job99999”まで検索される。この結果、２ノード５０分のジョブ“job99999”が発見され、閉じ空間Ａに割り当てられる。
【０１１９】
図１４では、閉じ空間Ａの検出及びジョブ“job99999”の割り当てまでが現在時刻から５分以内で済み、閉じ空間に対するジョブ“job99999”の割り当てが成功した様子が示されている。これによって、現在時刻から直近に存在する空き資源を有効に活用し、システムの稼働率を向上させることができる。
【符号の説明】
【０１２０】
１，２・・・ネットワーク
１０・・・ジョブ管理装置
１１・・・ＣＰＵ
１２・・・メモリ
【図１】
2015194923.tif 000003
【図２】
2015194923.tif 000004
【図３】
2015194923.tif 000005
【図４】
2015194923.tif 000006
【図５】
2015194923.tif 000007
【図６】
2015194923.tif 000008
【図７】
2015194923.tif 000009
【図８】
2015194923.tif 000010
【図９】
2015194923.tif 000011
【図１０】
2015194923.tif 000012
【図１１】
2015194923.tif 000013
【図１２】
2015194923.tif 000014
【図１３】
2015194923.tif 000015
【図１４】
2015194923.tif 000016