(57)【要約】【課題】並列処理装置において、バックフィルスケジューリングを適用したジョブスケジューリングを効率化する。【解決手段】ジョブ管理装置６１２は、計算ノード６１１−１〜計算ノード６１１−Ｎの計算資源をジョブに割り当てる。決定部６２１は、実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定する。探索部６２２は、資源探索時間範囲内において、計算ノード６１１−１〜計算ノード６１１−Ｎの計算資源の中から、処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する。【選択図】図６
2020201741.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算ノードと、
前記複数の計算ノードの計算資源をジョブに割り当てるジョブ管理装置とを備え、
前記ジョブ管理装置は、
実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定する決定部と、
前記資源探索時間範囲内において、前記複数の計算ノードの計算資源の中から、前記複数のジョブのうち処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する探索部とを含むことを特徴とする並列処理装置。
【請求項２】
前記決定部は、前記複数のジョブそれぞれの予定実行時間の最大値を、前記資源探索時間範囲の開始時刻に加算することで、前記資源探索時間範囲を決定することを特徴とする請求項１記載の並列処理装置。
【請求項３】
前記ジョブ管理装置は、フラグを記憶する記憶部をさらに含み、
前記フラグは、前記資源探索時間範囲の開始時刻から１つ以上の実行中ジョブがすべて終了する時刻までのバックフィル許可時間範囲を適用するか否かを示し、
前記探索部は、前記フラグが前記バックフィル許可時間範囲を適用しないことを示す値である場合、前記資源探索時間範囲内において、前記処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索し、前記フラグが前記バックフィル許可時間範囲を適用することを示す値である場合、前記バックフィル許可時間範囲内において、前記処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索することを特徴とする請求項１又は２記載の並列処理装置。
【請求項４】
前記探索部は、前記資源探索時間範囲内において、前記処理対象の実行待ちジョブよりも前に選択した実行待ちジョブに対して割り当てる空き計算資源が存在しない場合、前記フラグを、前記バックフィル許可時間範囲を適用することを示す値に設定することを特徴とする請求項３記載の並列処理装置。
【請求項５】
前記探索部は、前記フラグが前記バックフィル許可時間範囲を適用することを示す値である場合、前記バックフィル許可時間範囲内において、前記資源探索時間範囲の開始時刻を実行開始時刻とする空き計算資源を、前記処理対象の実行待ちジョブに対して割り当てることを特徴とする請求項３又は４記載の並列処理装置。
【請求項６】
複数の計算ノードの計算資源をジョブに割り当てる際に、実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定し、
前記資源探索時間範囲内において、前記複数の計算ノードの計算資源の中から、前記複数のジョブのうち処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する、
処理をコンピュータに実行させるためのジョブ管理プログラム。
【請求項７】
コンピュータによって実行されるジョブ管理方法であって、
前記コンピュータが、
複数の計算ノードの計算資源をジョブに割り当てる際に、実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定し、
前記資源探索時間範囲内において、前記複数の計算ノードの計算資源の中から、前記複数のジョブのうち処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する、
ことを特徴とするジョブ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置、ジョブ管理プログラム、及びジョブ管理方法に関する。
【背景技術】
【０００２】
大規模並列計算機システムは、計算資源を有する多数の計算ノードを含み、ユーザによって投入された複数のジョブを並列に実行する。各計算ノードは、単一のＣＰＵ（Central Processing Unit）又は複数のＣＰＵを含む計算機（コンピュータ）であり、各ＣＰＵは、単一又は複数のコアを含む。
【０００３】
並列計算機システムのジョブスケジューラは、各ジョブの実行開始に先立って、計算資源割り当てを含むジョブスケジューリングを行う。ジョブスケジューラは、計算ノードの計算資源の中から、そのジョブが要求する空き計算資源を選択して、そのジョブに割り当てる。
【０００４】
例えば、単一のＣＰＵを含む計算ノードの計算資源は、ＣＰＵ時間で表されることがあり、複数のＣＰＵを含む計算ノードの計算資源は、ＣＰＵの個数×ＣＰＵ時間（又はコアの個数×ＣＰＵ時間）で表されることがある。また、複数の計算ノードを並列に専有して使用するジョブが要求する計算資源は、計算ノードの個数×（占有）使用時間等によって表されることがある。計算資源は、単に資源と呼ばれることもある。
【０００５】
図１は、並列計算機システムにおけるジョブスケジューリングの例を示している。まず、新規ジョブ投入（手順Ａ１）において、ユーザは、「所定個数の計算ノードを所定時間だけ連続して使用する」という条件を指定して、ジョブを投入（サブミット）し、ジョブスケジューリングをジョブスケジューラ１０１に依頼する。以下では、ジョブが要求する計算資源を、“計算ノードの個数×使用時間”の形式で記載することがある。
【０００６】
計算ノードのネットワークトポロジがメッシュ又はトーラスである場合、ユーザは、使用する計算ノードを指定する際に、ジョブが使用する範囲のメッシュ又はトーラスの形状を指定することもある。例えば、３次元形状の場合、縦、横、及び高さを表す各辺の計算ノードの個数が指定される。
【０００７】
次に、ジョブスケジューラ１０１は、ジョブ受け付け（手順Ａ２）において、投入されたジョブを、一定間隔でまとめて受け付ける。図１の例では、ジョブ１６〜ジョブ２０がまとめて受け付けられている。このうち、ジョブ１６、ジョブ１８、及びジョブ２０は、ユーザＵ１のジョブであり、ジョブ１７は、ユーザＵ２のジョブであり、ジョブ１９は、ユーザＵ３のジョブである。
【０００８】
次に、ジョブスケジューラ１０１は、ジョブ選択（手順Ａ３）において、受け付けられたジョブを含むすべての実行待ちジョブを、決められた優先度（グループ優先度、ユーザ優先度等）に従って、優先度の高いものから順にソートする。これにより、ジョブ１６〜ジョブ２０と、ジョブ６、ジョブ８、ジョブ３、ジョブ５、及びジョブ１０とが、優先度順に並べ換えられる。ジョブ３、ジョブ５、及びジョブ１０は、ユーザＵ１のジョブであり、ジョブ６及びジョブ８は、ユーザＵ３のジョブである。
【０００９】
次に、ジョブスケジューラ１０１は、計算資源選択（手順Ａ４）において、各ジョブが要求する空き計算資源を探索し、その空き計算資源をジョブに対して割り当てる。これにより、優先度の高い順に各ジョブの実行が開始されるように、計算資源割り当てが行われる。
【００１０】
例えば、現在時刻において実行中のジョブは、ジョブ１及びジョブ２であり、ジョブ１には、“２×５”（２個の計算ノード×５時間）の計算資源が割り当てられ、ジョブ２には、“１×３”の計算資源が割り当てられている。一方、実行待ちジョブであるジョブ１７に対しては、“３×３”の計算資源が割り当てられ、ジョブ６に対しては、“２×３”の計算資源が割り当てられ、ジョブ８に対しては、“４×１”の計算資源が割り当てられる。ジョブ５に対しては、バックフィルスケジューリングにより、“２×３”の計算資源が割り当てられる。
【００１１】
バックフィルスケジューリングは、優先度の高い順に計算資源を割り当てるスケジューリングの順方向とは逆向きに、既に他のジョブに割り当て済みの時間帯の隙間を埋めるようにして、処理対象のジョブに計算資源を割り当てるスケジューリング処理である。割り当て済みの時間帯の隙間を埋める処理は、バックフィルと呼ばれる。バックフィルスケジューリングによれば、比較的少ない計算ノードを比較的短い時間使用するジョブＪ１が、より優先度の高いジョブＪ２の実行開始を妨げない範囲で、ジョブＪ２よりも早く開始されることがある。
【００１２】
次に、ジョブスケジューラ１０１は、ジョブ実行（手順Ａ５）において、実行開始時刻が到来したジョブから順に、割り当てられた計算資源を使用するジョブが開始されるように、計算ノードを制御する。
【００１３】
図２は、計算ノードのネットワークトポロジが１次元トーラスである場合の計算資源割り当てテーブルの例を示している。縦軸は計算ノードを表し、横軸は時刻（単位は時間）を表す。計算ノードの総数は８個である。各ジョブに割り当てられる計算資源は、連続する１つ以上の計算ノードを一方の辺とし、それらの計算ノードが連続して使用される使用時間を他方の辺とする、長方形によって表される。
【００１４】
ｊｏｂＡ〜ｊｏｂＲは、ジョブの名称（ジョブ名）であり、ジョブ名の後の括弧内に記載されたＰ１〜Ｐ１５は、ジョブの優先度を表す。数字が小さいジョブほど優先度が高くなる。ジョブ名の後の括弧内に記載されたＲＵＮは、実行中ジョブを表す。
【００１５】
ｊｏｂＡ〜ｊｏｂＣは実行中ジョブであり、ｊｏｂＤ〜ｊｏｂＲは実行待ちジョブである。各ジョブのジョブ名が記載された長方形は、そのジョブが要求する計算資源を表す。例えば、優先度Ｐ２を有するｊｏｂＥが要求する計算資源は、“３×６”である。
【００１６】
ジョブスケジューリングが開始されると、まず、ジョブスケジューラ１０１は、計算資源割り当てテーブルをクリアし、現在時刻０における実行中ジョブの割り当て状況を設定する。
【００１７】
ｊｏｂＡには２個の計算ノードが割り当てられており、ｊｏｂＡの残り使用時間は７時間である。そこで、ｊｏｂＡの割り当て状況として“２×７”が設定される。同様にして、ｊｏｂＢの割り当て状況として“１×９”が設定され、ｊｏｂＣの割り当て状況として、“１×４”が設定される。
【００１８】
次に、ジョブスケジューラ１０１は、実行待ちジョブを優先度順にソートして、優先度の高いジョブから順に、バックフィルスケジューリングを適用しない計算資源割り当てを行う。
【００１９】
まず、最も高い優先度Ｐ１を有するｊｏｂＤが処理対象として選択される。ｊｏｂＤが要求する計算資源は“７×５”であるため、計算資源割り当てテーブルにおいて、現在時刻０から未来へ向かって、連続する７個の計算ノードが連続して５時間空いている空き計算資源が探索される。この場合、現在時刻０から９時間後の時刻９において、“７×５”の空き計算資源が見つかり、ｊｏｂＤに対して、その空き計算資源が割り当てられる。
【００２０】
次に、２番目に高い優先度Ｐ２を有するｊｏｂＥが処理対象として選択される。ｊｏｂＥの優先度はｊｏｂＤの優先度よりも低いため、ｊｏｂＥの実行開始時刻がｊｏｂＤの実行開始時刻よりも遅くなるように、計算資源割り当てを行うことが望ましい。ｊｏｂＥが要求する計算資源は“３×６”であるため、ｊｏｂＤの実行開始時刻である時刻９から未来へ向かって、連続する３個の計算ノードが連続して６時間空いている空き計算資源が探索される。この場合、現在時刻０から１４時間後の時刻１４において、“３×６”の空き計算資源が見つかり、ｊｏｂＥに対して、その空き計算資源が割り当てられる。
【００２１】
同様にして、優先度Ｐ３を有するｊｏｂＦから優先度Ｐ１５を有するｊｏｂＲまで、順番に空き計算資源が探索され、最終的に、図２の計算資源割り当てテーブルが示すような計算資源割り当てが行われる。
【００２２】
しかし、各ジョブが要求する計算資源が大きいほど、その条件に合う空き計算資源が見つかる時刻は遅くなりやすく、結果として、虫食いのように、割り当てられない空き計算資源が多数発生することになる。このため、現在時刻０において実行中ジョブが使用している計算ノードの個数は４個であり、計算ノードの総数の半分に過ぎない。したがって、並列計算機システムの稼働率は５０％であり、稼働率が低くなる。
【００２３】
このような空き計算資源の隙間を埋めて、並列計算機システムの稼働率を向上させるために、バックフィルスケジューリングを適用することが効果的である。
【００２４】
図３は、図２の実行待ちジョブに対してバックフィルスケジューリングを適用した場合の計算資源割り当てテーブルの例を示している。この場合、ｊｏｂＨ、ｊｏｂＪ、ｊｏｂＫ、ｊｏｂＬ、ｊｏｂＭ、ｊｏｂＮ、ｊｏｂＯ、ｊｏｂＰ、及びｊｏｂＱが、優先度の高い他のジョブよりも早く開始されるように、計算資源割り当てが行われる。
【００２５】
現在時刻０における実行中ジョブの割り当て状況の設定と、最も高い優先度Ｐ１を有するｊｏｂＤに対する計算資源割り当ては、図２と同様にして行われる。
【００２６】
次に、２番目に高い優先度Ｐ２を有するｊｏｂＥが処理対象として選択される。バックフィルスケジューリングでは、現在時刻０から未来へ向かって、連続する３個の計算ノードが連続して６時間空いている空き計算資源が探索される。このとき、ｊｏｂＥよりも高い優先度を有するｊｏｂＤには、既に計算資源が割り当てられているので、現在時刻０から空き計算資源を探索しても、ｊｏｂＤの実行開始が妨げられることはない。
【００２７】
しかし、現在時刻０からｊｏｂＤの実行開始時刻である時刻９までの時間帯において、バックフィル可能な“３×６”の空き計算資源が見つからないため、時刻１４を実行開始時刻とする“３×６”の空き計算資源が、ｊｏｂＥに対して割り当てられる。
【００２８】
同様にして、優先度Ｐ３を有するｊｏｂＦと優先度Ｐ４を有するｊｏｂＧに対して、現在時刻０から未来へ向かって空き計算資源が探索されるが、バックフィル可能な空き計算資源が見つからない。そこで、時刻１４を実行開始時刻とする“２×１１”の空き計算資源が、ｊｏｂＦに対して割り当てられ、時刻２５を実行開始時刻とする“４×４”の空き計算資源が、ｊｏｂＧに対して割り当てられる。
【００２９】
次に、優先度Ｐ５を有するｊｏｂＨに対して、現在時刻０から未来へ向かって空き計算資源が探索される。この場合、時刻７において、バックフィル可能な“４×２”の空き計算資源が見つかり、ｊｏｂＨに対して、その空き計算資源が割り当てられる。
【００３０】
以降、ｊｏｂＩ〜ｊｏｂＲに対しても、現在時刻０から未来へ向かって空き計算資源が探索され、バックフィル可能な空き計算資源が見つかれば、バックフィルによる計算資源割り当てが行われる。一方、バックフィル可能な空き計算資源が見つからなければ、図２と同様の計算資源割り当てが行われ、最終的に、図３の計算資源割り当てテーブルが示すような計算資源割り当てが行われる。
【００３１】
図３と図２とを比較すると、バックフィルスケジューリングによって、各ジョブが要求する空き計算資源が見つかる時刻が早くなり、割り当てられない空き計算資源が減少していることが分かる。
【００３２】
また、図３において、優先度Ｐ９を有するｊｏｂＬと優先度Ｐ１３を有するｊｏｂＰについては、現在時刻０を実行開始時刻とする計算資源が割り当てられており、ジョブの実行が直ちに開始される。このため、現在時刻０において実行中ジョブが使用している計算ノードの個数は６個になり、並列計算機システムの稼働率は７５％になる。したがって、バックフィルスケジューリングによって、稼働率が向上することが分かる。
【００３３】
バックフィルスケジューリングに関連して、空き資源が発見されたときに、未割り当てのジョブの中から空き資源に割り当て可能なジョブを検索する並列計算機システムが知られている（例えば、特許文献１を参照）。ワークフロージョブの場合に、要件情報と段情報とに基づきマッピング処理を実行するスケジューラ装置も知られている（例えば、特許文献２を参照）。遅延禁止ジョブのジョブ実行開始時刻を遅延させない追越可能ジョブを判別するジョブスケジューリングシステムも知られている（例えば、特許文献３を参照）。
【先行技術文献】
【特許文献】
【００３４】
【特許文献１】特開２０１５−１９４９２３号公報
【特許文献２】特開２０１５−１８５００３号公報
【特許文献３】特開２０１２−１７３７５３号公報
【発明の概要】
【発明が解決しようとする課題】
【００３５】
従来の並列計算機システムにおいて、ジョブスケジューリングにバックフィルスケジューリングを適用した場合、ジョブスケジューリングに長い時間がかかることがある。
【００３６】
なお、かかる問題は、１次元トーラスのネットワークトポロジを有する並列計算機システム等の並列処理装置に限らず、他のネットワークトポロジを有する並列処理装置においても生ずるものである。
【００３７】
１つの側面において、本発明は、並列処理装置において、バックフィルスケジューリングを適用したジョブスケジューリングを効率化することを目的とする。
【課題を解決するための手段】
【００３８】
１つの案では、並列処理装置は、複数の計算ノードと、それらの計算ノードの計算資源をジョブに割り当てるジョブ管理装置とを含み、ジョブ管理装置は、決定部及び探索部を含む。
【００３９】
決定部は、実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定する。探索部は、資源探索時間範囲内において、複数の計算ノードの計算資源の中から、複数のジョブのうち処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する。
【発明の効果】
【００４０】
実施形態によれば、並列処理装置において、バックフィルスケジューリングを適用したジョブスケジューリングを効率化することができる。
【図面の簡単な説明】
【００４１】
【図１】ジョブスケジューリングを示す図である。
【図２】計算資源割り当てテーブルを示す図である。
【図３】バックフィルスケジューリングを適用した場合の計算資源割り当てテーブルを示す図である。
【図４】固定値の資源探索時間範囲が設定された計算資源割り当てテーブルを示す図である。
【図５】短い資源探索時間範囲が設定された計算資源割り当てテーブルを示す図である。
【図６】並列処理装置の機能的構成図である。
【図７】ジョブ管理処理のフローチャートである。
【図８】並列計算機システムの構成図である。
【図９】ジョブ管理装置の機能的構成図である。
【図１０】ジョブ情報テーブルを示す図である。
【図１１】資源探索時間範囲及びバックフィル許可時間範囲が設定された計算資源割り当てテーブルを示す図である。
【図１２】ジョブスケジューリングのフローチャートである。
【図１３】資源選択処理のフローチャートである。
【図１４】第１探索処理のフローチャートである。
【図１５】第２探索処理のフローチャートである。
【図１６】計算ノードとして用いられる情報処理装置の構成図である。
【図１７】ジョブ管理装置として用いられる情報処理装置の構成図である。
【発明を実施するための形態】
【００４２】
以下、図面を参照しながら、実施形態を詳細に説明する。
ジョブスケジューリングで用いられる計算資源割り当てテーブルの形式は、ネットワークトポロジがＦａｔ  Ｔｒｅｅ、メッシュ、又はトーラス等のいずれであるかによって変化する。
【００４３】
例えば、Ｆａｔ  Ｔｒｅｅの場合、各計算ノードが他のすべての計算ノードと接続されているため、計算ノード間の連続性は重要ではない。このため、計算資源割り当てテーブルは、ある時間帯において連続して使用できる計算ノードの個数を表現できれば十分である。
【００４４】
一方、トーラスの場合、計算ノード間の連続性が重要になり、さらに、トーラスの形状として、１次元トーラス、２次元トーラス、又は３次元トーラスのいずれであるかを表現できることが望ましい。例えば、３次元トーラスの場合、ジョブが要求する個数の計算ノードがＸ軸、Ｙ軸、又はＺ軸の方向に連続しており、かつ、それらの計算ノードがある時間帯に連続して使用される、という状況を表現できることが望ましい。
【００４５】
ネットワークトポロジが２次元トーラス、３次元トーラス、メッシュ、又はＦａｔ  Ｔｒｅｅの場合であっても、図２に示した１次元トーラスの場合の同様にして、計算資源割り当てテーブルを生成することが可能である。
【００４６】
しかしながら、並列計算機システムが大規模になるとともにネットワークトポロジが複雑になり、かつ、投入されるジョブが膨大な個数になると、ジョブスケジューリングに長い時間がかかる。例えば、１万個程度の計算ノードを含む大規模並列計算機システムにおいて、１０００個〜１００万個のジョブが投入された場合、ジョブスケジューリングの処理時間が１０分〜１時間になることがある。
【００４７】
また、各ジョブが要求する計算資源が大きくなるほど、その条件に合う空き計算資源が見つかる時刻は遅くなりやすく、結果として、空き状態（ジョブが実行されていない状態）の計算ノードでジョブが実行され難くなる。このため、並列計算機システムの稼働率が低下する。
【００４８】
そこで、空き計算資源を探索する時間範囲を所定範囲に制限することで、ジョブスケジューリングの処理時間が長くなることを抑止する方法が考えられる。
【００４９】
図４は、固定値の資源探索時間範囲が設定された計算資源割り当てテーブルの例を示している。図４の計算資源割り当てテーブルでは、現在時刻０から時刻２４までの資源探索時間範囲Ｔ１が設定されており、資源探索時間範囲Ｔ１を用いて、図２の実行待ちジョブに対するバックフィルスケジューリングが行われる。
【００５０】
現在時刻０における実行中ジョブの割り当て状況の設定と、優先度Ｐ１を有するｊｏｂＤ及び優先度Ｐ２を有するｊｏｂＥに対する計算資源割り当ては、図３と同様にして行われる。
【００５１】
次に、優先度Ｐ３を有するｊｏｂＦが処理対象として選択される。バックフィルスケジューリングでは、現在時刻０から未来へ向かって、連続する２個の計算ノードが連続して１１時間空いている空き計算資源が探索される。このとき、ｊｏｂＦよりも高い優先度を有するｊｏｂＤ及びｊｏｂＥには、既に計算資源が割り当てられているので、現在時刻０から空き計算資源を探索しても、これらのジョブの実行開始が妨げられることはない。
【００５２】
しかし、バックフィル可能な“２×１１”の空き計算資源が見つからないため、時刻１４を実行開始時刻とする“２×１１”の空き計算資源が、ｊｏｂＦに対して割り当てられる。この場合、ｊｏｂＦの実行終了時刻が時刻２５になり、資源探索時間範囲Ｔ１を超えてしまうが、計算資源割り当て不可ジョブが発生していないため、この空き計算資源の割り当てが許容される。
【００５３】
次に、優先度Ｐ４を有するｊｏｂＧが処理対象として選択され、現在時刻０から未来へ向かって、連続する４個の計算ノードが連続して４時間空いている空き計算資源が探索されるが、資源探索時間範囲Ｔ１内で“４×４”の空き計算資源が見つからない。この場合、時刻２４以降の時間範囲における資源探索は行われず、ｊｏｂＧは、計算資源割り当て不可ジョブとして記録される。
【００５４】
このように、資源探索時間範囲Ｔ１を超える時間範囲における資源探索を省略することで、処理時間が無制限に長くなることが回避される。
【００５５】
次に、優先度Ｐ５を有するｊｏｂＨ〜優先度Ｐ９を有するｊｏｂＬに対して、資源探索時間範囲Ｔ１内で空き計算資源が探索され、空き計算資源が見つかれば、計算資源割り当てが行われる。一方、資源探索時間範囲Ｔ１内で空き計算資源が見つからなければ、処理対象のジョブが、計算資源割り当て不可ジョブとして記録される。これにより、ｊｏｂＨ、ｊｏｂＪ、ｊｏｂＫ、及びｊｏｂＬに対して空き計算資源が割り当てられ、ｊｏｂＩは、計算資源割り当て不可ジョブとして記録される。
【００５６】
次に、優先度Ｐ１０を有するｊｏｂＭが処理対象として選択され、現在時刻０から未来へ向かって、連続する３個の計算ノードが連続して９時間空いている空き計算資源が探索される。この場合、バックフィル可能な“３×９”の空き計算資源は見つからないが、時刻１７を実行開始時刻とする“３×９”の空き計算資源が見つかる。
【００５７】
しかし、ｊｏｂＭの実行終了時刻が時刻２６になって、資源探索時間範囲Ｔ１を超えてしまい、かつ、計算資源割り当て不可ジョブが発生している。
【００５８】
計算資源割り当て不可ジョブが発生している場合、資源探索時間範囲Ｔ１を超える時間範囲の計算資源は、資源探索時間範囲Ｔ１が設定されていなければ、処理対象のジョブよりも高い優先度を有する他のジョブに割り当てられる可能性がある計算資源である。このため、計算資源割り当て不可ジョブが発生している場合、処理対象のジョブに対して、資源探索時間範囲Ｔ１を超える時間範囲の計算資源を割り当てることは許容されない。したがって、ｊｏｂＭに対する空き計算資源の割り当ては許容されず、ｊｏｂＭは、計算資源割り当て不可ジョブとして記録される。
【００５９】
次に、優先度Ｐ１１を有するｊｏｂＮ〜優先度Ｐ１５を有するｊｏｂＲに対して、資源探索時間範囲Ｔ１内で空き計算資源が探索される。その結果、ｊｏｂＮ及びｊｏｂＰに対して空き計算資源が割り当てられ、ｊｏｂＯ、ｊｏｂＱ、及びｊｏｂＲは、計算資源割り当て不可ジョブとして記録されて、最終的に、図４の計算資源割り当てテーブルが示すような計算資源割り当てが行われる。
【００６０】
図４では、説明を分かりやすくするために、資源探索時間範囲Ｔ１が２４時間に設定されているが、一般的な運用では、資源探索時間範囲Ｔ１が１週間〜１月程度に設定されることが多い。
【００６１】
このようなジョブスケジューリングでは、資源探索時間範囲Ｔ１が長いほど、投入されたジョブに対してバックフィル可能な空き計算資源が見つかる確率が高くなる。しかし、資源探索時間範囲Ｔ１が長過ぎる場合、１回の探索処理の時間が長くなり過ぎる可能性が高くなる。長大な資源探索時間範囲Ｔ１を探索しても、結局、バックフィル可能な空き計算資源が見つからないこともあり、その場合、結果的に長い処理時間が無駄になる。
【００６２】
また、計算資源割り当て不可ジョブが発生した場合、バックフィルによって遅い時刻に空き計算資源を割り当てられたジョブが、より高い優先度を有する他のジョブの実行開始を妨げる可能性が高くなる。この場合、優先度の低いジョブに割り当てられた空き計算資源は、資源探索時間範囲Ｔ１が設定されていなければ、そのジョブよりも高い優先度を有する他のジョブに割り当てられた可能性がある。
【００６３】
例えば、図３の計算資源割り当てテーブルでは、優先度Ｐ１０を有するｊｏｂＭに対して、時刻１７を実行開始時刻とする“３×９”の空き計算資源が割り当てられている。一方、図４の計算資源割り当てテーブルでは、優先度Ｐ１１を有するｊｏｂＮに対して、時刻１７を実行開始時刻とする“３×２”の空き計算資源が割り当てられ、ｊｏｂＭに対して、空き計算資源が割り当てられていない。したがって、ｊｏｂＮが、より高い優先度を有するｊｏｂＭの実行開始を妨げている。
【００６４】
これに対して、資源探索時間範囲Ｔ１を短くすれば、１回の探索処理の時間を短縮することができ、優先度の低いジョブが優先度の高いジョブの実行開始を妨げる可能性が低くなる。
【００６５】
図５は、短い資源探索時間範囲が設定された計算資源割り当てテーブルの例を示している。図５の計算資源割り当てテーブルでは、現在時刻０から時刻８までの資源探索時間範囲Ｔ２が設定されており、資源探索時間範囲Ｔ２は８時間である。この場合、ｊｏｂＪ、ｊｏｂＬ、及びｊｏｂＰに対して空き計算資源が割り当てられ、他のジョブは計算資源割り当て不可ジョブとして記録される。
【００６６】
しかし、短い資源探索時間範囲Ｔ２を用いた場合、投入されたジョブに対してバックフィル可能な空き計算資源が見つかる確率は低くなる。例えば、図４の計算資源割り当てテーブルでは、ｊｏｂＨ、ｊｏｂＫ、及びｊｏｂＮに対して、バックフィル可能な空き計算資源が割り当てられているが、図５の計算資源割り当てテーブルでは、これらのジョブに対して空き計算資源が割り当てられていない。
【００６７】
このように、資源探索時間範囲が短過ぎる場合、１回の探索処理の時間は短くなるが、空き計算資源が見つからない確率が高くなるため、結果的には、無駄な処理時間が長くなる可能性がある。
【００６８】
また、長い使用時間を要求するジョブに対して、バックフィル可能な空き計算資源が見つからなくなる可能性が高くなる。例えば、図５のｊｏｂＦが要求する使用時間は１１時間であり、資源探索時間範囲Ｔ２よりも長いため、資源探索時間範囲Ｔ２内でバックフィル可能な空き計算資源は見つからない。
【００６９】
さらに、優先度の高い実行待ちジョブが計算資源割り当て不可ジョブとして記録される確率が高くなり、そのジョブがいつまでも実行されない状況（いわゆるスタベーション問題）が発生する可能性が高くなる。例えば、図５の計算資源割り当てテーブルでは、最も高い優先度Ｐ１を有するｊｏｂＤが計算資源割り当て不可ジョブとして記録されており、いつまでも実行されない状況が発生する。
【００７０】
図６は、実施形態の並列処理装置の機能的構成例を示している。図６の並列処理装置６０１は、計算ノード６１１−１〜計算ノード６１１−Ｎ（Ｎは２以上の整数）及びジョブ管理装置６１２を含む。ジョブ管理装置６１２は、決定部６２１及び探索部６２２を含み、計算ノード６１１−１〜計算ノード６１１−Ｎの計算資源をジョブに割り当てる。
【００７１】
図７は、図６のジョブ管理装置６１２が行うジョブ管理処理の例を示すフローチャートである。まず、決定部６２１は、実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定する（ステップ７０１）。
【００７２】
次に、探索部６２２は、資源探索時間範囲内において、計算ノード６１１−１〜計算ノード６１１−Ｎの計算資源の中から、処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する（ステップ７０２）。
【００７３】
図６の並列処理装置６０１によれば、並列処理装置において、バックフィルスケジューリングを適用したジョブスケジューリングを効率化することができる。
【００７４】
図８は、図６の並列処理装置６０１の具体例である並列計算機システム８０１の構成例を示している。図８の並列計算機システム８０１は、計算ノード８１１−１〜計算ノード８１１−Ｎ及びジョブ管理装置８１２を含み、各計算ノード８１１−ｉ（ｉ＝１〜Ｎ）はジョブ管理装置８１２に接続されている。計算ノード８１１−１〜計算ノード８１１−Ｎのネットワークトポロジは、Ｆａｔ  Ｔｒｅｅ、メッシュ、又はトーラス等であってもよい。
【００７５】
計算ノード８１１−ｉ及びジョブ管理装置８１２は、図６の計算ノード６１１−ｉ及びジョブ管理装置６１２にそれぞれ対応する。
【００７６】
図９は、図８のジョブ管理装置８１２の機能的構成例を示している。図９のジョブ管理装置８１２は、決定部９０１、探索部９０２、及び記憶部９０３を含む。決定部９０１及び探索部９０２は、図６の決定部６２１及び探索部６２２にそれぞれ対応し、ジョブスケジューラとして動作する。記憶部９０３は、ジョブ情報テーブル９１１、資源探索時間範囲９１２、バックフィル許可時間範囲９１３、フラグ９１４、及び計算資源割り当てテーブル９１５を記憶する。
【００７７】
ジョブ情報テーブル９１１は、各ジョブの情報を保持する。資源探索時間範囲９１２は、空き計算資源を探索する時間範囲を表し、ｓｃ＿ｓｔａｒｔ及びｓｃ＿ｅｎｄをパラメータとして含む。ｓｃ＿ｓｔａｒｔは、資源探索時間範囲９１２の開始時刻を表し、ｓｃ＿ｅｎｄは、資源探索時間範囲９１２の終了時刻を表す。ｓｃ＿ｓｔａｒｔ及びｓｃ＿ｅｎｄは、動的に変更される。
【００７８】
資源探索時間範囲９１２は、並列計算機システム８０１に投入されている実行中ジョブ及び実行待ちジョブを含む、複数のジョブそれぞれの予定実行時間に基づいて決定される。例えば、ジョブの予定実行時間としては、そのジョブが要求する計算ノードの使用時間が用いられる。
【００７９】
バックフィル許可時間範囲９１３は、バックフィル可能な時間範囲を表し、ｂｆ＿ｓｔａｒｔ及びｂｆ＿ｅｎｄをパラメータとして含む。ｂｆ＿ｓｔａｒｔは、バックフィル許可時間範囲９１３の開始時刻を表し、ｂｆ＿ｅｎｄは、バックフィル許可時間範囲９１３の終了時刻を表す。ｂｆ＿ｓｔａｒｔ及びｂｆ＿ｅｎｄは、動的に変更される。
【００８０】
フラグ９１４は、ＯＮ又はＯＦＦの値を有し、バックフィル許可時間範囲９１３を適用するか否かを示す。ＯＮは、バックフィル許可時間範囲９１３を適用することを示し、ＯＦＦは、バックフィル許可時間範囲９１３を適用しないことを示す。フラグ９１４の値は、動的に切り替えられる。
【００８１】
計算資源割り当てテーブル９１５は、各ジョブに対する計算資源の割り当て状況を保持する。
【００８２】
図１０は、ジョブ情報テーブル９１１の例を示している。図１０のジョブ情報テーブル９１１は、ジョブＩＤ、ジョブ名、計算ノードの個数、使用時間、優先度、及びジョブ状態を含む。
【００８３】
ジョブＩＤは、ジョブの識別情報であり、ジョブ名は、ジョブの名称である。計算ノードの個数は、ジョブが要求する計算ノードの個数を表し、使用時間は、ジョブが要求する計算ノードの使用時間を表す。使用時間の単位は、時間（Ｈ）である。
【００８４】
優先度は、ジョブの優先度を表し、ジョブ状態は、ジョブが実行中ジョブ又は実行待ちジョブのいずれであるかを表す。ｊｏｂＡ〜ｊｏｂＣは実行中ジョブであり、ｊｏｂＤ〜ｊｏｂＲは実行待ちジョブである。
【００８５】
例えば、実行中ジョブであるｊｏｂＡは、“２×７”の計算資源を要求しており、優先度Ｐ１を有する実行待ちジョブであるｊｏｂＤは、“７×５”の計算資源を要求している。
【００８６】
決定部９０１及び探索部９０２は、記憶部９０３が記憶する情報を用いて、バックフィルスケジューリングを適用したジョブスケジューリングを行う。ジョブスケジューリングの開始時に、決定部９０１は、資源探索時間範囲９１２及びバックフィル許可時間範囲９１３を決定し、フラグ９１４をＯＦＦに設定する。
【００８７】
フラグ９１４がＯＦＦである場合、探索部９０２は、資源探索時間範囲９１２内において、計算ノード８１１−１〜計算ノード８１１−Ｎの計算資源の中から、処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索する。
【００８８】
空き計算資源が見つかった場合、探索部９０２は、見つかった空き計算資源を処理対象の実行待ちジョブに対して割り当て、空き計算資源の割り当て結果を、計算資源割り当てテーブル９１５に記録する。
【００８９】
一方、空き計算資源が見つからない場合、探索部９０２は、処理対象の実行待ちジョブを、計算資源割り当て不可ジョブとして計算資源割り当てテーブル９１５に記録し、フラグ９１４をＯＮに設定する。
【００９０】
フラグ９１４がＯＮに設定された場合、探索部９０２は、資源探索時間範囲９１２の代わりに、バックフィル許可時間範囲９１３内において、次の実行待ちジョブに対して割り当てる空き計算資源を探索する。
【００９１】
決定部９０１は、１回の探索処理の時間が比較的短く、かつ、探索処理が結果的に無駄になる確率が比較的低くなるように、資源探索時間範囲９１２及びバックフィル許可時間範囲９１３を決定する。例えば、以下のような決定方法により、資源探索時間範囲９１２及びバックフィル許可時間範囲９１３が決定される。
【００９２】
（１）資源探索時間範囲９１２の決定方法
決定部９０１は、ｓｃ＿ｓｔａｒｔとして、ジョブスケジューリングの開始時刻である現在時刻を設定する。そして、決定部９０１は、現在時刻における実行中ジョブ及び実行待ちジョブが要求する使用時間の最大値を、ｓｃ＿ｓｔａｒｔに加算することで、ｓｃ＿ｅｎｄを決定する。この場合、ｓｃ＿ｓｔａｒｔに使用時間の最大値を加算して得られる時刻よりも所定値だけ遅い時刻が、ｓｃ＿ｅｎｄとして設定される。
【００９３】
ｓｃ＿ｅｎｄとして設定される時刻は、計算資源割り当てテーブル９１５において単位時間毎に区切られた時刻のうち、ｓｃ＿ｓｔａｒｔと使用時間の最大値とを加算して得られる時刻の直後の時刻であってもよい。例えば、単位時間が１時間であり、加算結果が時刻１０．５を示している場合、時刻１１がｓｃ＿ｅｎｄとして設定され、加算結果が時刻１１を示している場合、時刻１２がｓｃ＿ｅｎｄとして設定される。
【００９４】
このような決定方法によれば、資源探索時間範囲９１２が長くなり過ぎないため、１回の探索処理の時間が長くなり過ぎる可能性が低くなる。
【００９５】
また、資源探索時間範囲９１２が短くなり過ぎないため、バックフィル可能な空き計算資源が見つかる確率が高くなり、結果的に無駄な処理時間が長くなる可能性が低くなる。資源探索時間範囲９１２が短くなり過ぎないため、図５のｊｏｂＦのように、長い使用時間を要求するジョブに対しても、バックフィル可能な空き計算資源が見つかる可能性が高くなる。
【００９６】
また、資源探索時間範囲９１２が短くなり過ぎないため、図５のｊｏｂＤのように、優先度の高い実行待ちジョブが計算資源割り当て不可ジョブとして記録される確率が低くなり、スタベーション問題が発生する可能性が低くなる。
【００９７】
（２）バックフィル許可時間範囲９１３の決定方法
決定部９０１は、ｂｆ＿ｓｔａｒｔとして、ｓｃ＿ｓｔａｒｔと同じ時刻を設定し、ｂｆ＿ｅｎｄとして、現在時刻における１つ以上の実行中ジョブがすべて終了する時刻以降の時刻を設定する。
【００９８】
ｂｆ＿ｅｎｄとして設定される時刻は、計算資源割り当てテーブル９１５において単位時間毎に区切られた時刻のうち、すべての実行中ジョブが終了する時刻以降の時刻であってもよい。例えば、単位時間が１時間であり、時刻９においてすべての実行中ジョブが終了する場合、時刻９がｂｆ＿ｅｎｄとして設定され、時刻９．５においてすべての実行中ジョブが終了する場合、時刻１０がｂｆ＿ｅｎｄとして設定される。
【００９９】
バックフィル許可時間範囲９１３を用いて探索処理を行うことで、計算資源割り当て不可ジョブが発生した場合であっても、バックフィルによって遅い時刻の空き計算資源が割り当てられる確率が低くなる。したがって、優先度の低いジョブが優先度の高いジョブの実行開始を妨げる可能性が低くなる。
【０１００】
また、資源探索時間範囲９１２が長い場合であっても、バックフィル許可時間範囲９１３内で空き計算資源を探索することで、１回の探索処理の時間が長くなり過ぎる可能性が低くなる。
【０１０１】
このように、資源探索時間範囲９１２及びバックフィル許可時間範囲９１３を用いてジョブスケジューリングを行うことで、大規模並列計算機システムにおいて大量のジョブが投入される場合であっても、ジョブスケジューリングを高速化することができる。これにより、ジョブが開始されるまでの時間を短縮するとともに、並列計算機システムの稼働率を向上させることが可能になる。
【０１０２】
なお、バックフィル許可時間範囲９１３は必ずしも使用する必要はなく、資源探索時間範囲９１２のみを用いてジョブスケジューリングを行ってもよい。
【０１０３】
図１１は、計算ノード８１１−１〜計算ノード８１１−Ｎのネットワークトポロジが１次元トーラスである場合の計算資源割り当てテーブル９１５の例を示している。縦軸は計算ノードを表し、横軸は時刻（単位は時間）を表す。計算ノードの総数は８個である。
【０１０４】
図１１の計算資源割り当てテーブル９１５には、図１０に示したｊｏｂＡ〜ｊｏｂＲが記録されている。このうち、実行中ジョブであるｊｏｂＡ〜ｊｏｂＣの実行開始時刻は、現在時刻０である。資源探索時間範囲Ｔ１１は、資源探索時間範囲９１２に対応し、バックフィル許可時間範囲Ｔ１２は、バックフィル許可時間範囲９１３に対応する。
【０１０５】
図１２は、ジョブ管理装置８１２が行うジョブスケジューリングの例を示すフローチャートである。まず、決定部９０１は、資源探索時間範囲９１２及びバックフィル許可時間範囲９１３を決定し、フラグ９１４をＯＦＦに設定する（ステップ１２０１）。
【０１０６】
このとき、決定部９０１は、ｓｃ＿ｓｔａｒｔ及びｂｆ＿ｓｔａｒｔに現在時刻０を設定し、ｓｃ＿ｅｎｄにｍａｘｔｉｍｅ１を設定し、ｂｆ＿ｅｎｄにｍａｘｔｉｍｅ２を設定する。そして、決定部９０１は、フラグ９１４に対応するｂｆ＿ｆｌａｇにＯＦＦを設定する。
【０１０７】
ｍａｘｔｉｍｅ１は、計算資源割り当てテーブル９１５において単位時間毎に区切られた時刻のうち、ジョブが要求する使用時間の最大値を現在時刻０に加算して得られる時刻の直後の時刻である。ｍａｘｔｉｍｅ２は、計算資源割り当てテーブル９１５において単位時間毎に区切られた時刻のうち、実行中ジョブの残り使用時間の最大値を現在時刻０に加算して得られる時刻以降の時刻である。
【０１０８】
実行中ジョブの残り使用時間としては、そのジョブが要求する計算ノードの使用時間から、現在時刻０において既に経過している実行時間を差し引いた、残りの使用時間が用いられる。したがって、実行中ジョブの残り使用時間の最大値を現在時刻０に加算して得られる時刻は、実行中ジョブがすべて終了する時刻を表す。
【０１０９】
例えば、図１０のジョブ情報テーブル９１１では、ｊｏｂＡ〜ｊｏｂＲが要求する使用時間の最大値は、ｊｏｂＦ及びｊｏｂＯの使用時間の１１時間である。そこで、現在時刻０に１１時間を加算して得られる時刻１１よりも１時間だけ遅い時刻１２が、ｓｃ＿ｅｎｄに設定される。したがって、資源探索時間範囲Ｔ１１は、現在時刻０から時刻１２までの時間範囲であり、その長さは１２時間である。
【０１１０】
また、実行中ジョブであるｊｏｂＡ〜ｊｏｂＣの残り使用時間は、それらのジョブが要求する使用時間と一致し、残り使用時間の最大値は、ｊｏｂＢの残り使用時間の９時間である。そこで、現在時刻０に９時間を加算して得られる時刻９が、ｂｆ＿ｅｎｄに設定される。したがって、バックフィル許可時間範囲Ｔ１２は、現在時刻０から時刻９までの時間範囲であり、その長さは９時間である。
【０１１１】
次に、探索部９０２は、計算資源割り当てテーブル９１５をクリアして（ステップ１２０２）、実行中ジョブの割り当て状況を計算資源割り当てテーブル９１５に設定する（ステップ１２０３）。
【０１１２】
これにより、図１１に示すように、ｊｏｂＡが要求する“２×７”の計算資源、ｊｏｂＢが要求する“１×９”の計算資源、及びｊｏｂＣが要求する“１×４”の計算資源が、計算資源割り当てテーブル９１５に記録される。
【０１１３】
次に、探索部９０２は、実行待ちジョブを優先度順にソートし（ステップ１２０４）、ソート結果の中から最も高い優先度を有する先頭の実行待ちジョブを抽出して、ＪＯＢに設定する（ステップ１２０５）。
【０１１４】
次に、探索部９０２は、ＪＯＢが示す実行待ちジョブを処理対象として、資源選択処理を行い（ステップ１２０６）、ソート結果から抽出されていない残りの実行待ちジョブの個数（残りジョブ数）をチェックする（ステップ１２０７）。
【０１１５】
探索部９０２は、残りジョブ数が０でない場合（ステップ１２０７，ＹＥＳ）、ステップ１２０５以降の処理を繰り返し、残りジョブ数が０である場合（ステップ１２０７，ＮＯ）、処理を終了する。
【０１１６】
図１３は、図１２のステップ１２０６における資源選択処理の例を示すフローチャートである。まず、探索部９０２は、ｂｆ＿ｆｌａｇの値をチェックする（ステップ１３０１）。探索部９０２は、ｂｆ＿ｆｌａｇがＯＮである場合（ステップ１３０１，ＹＥＳ）、第１探索処理を行い（ステップ１３０２）、ｂｆ＿ｆｌａｇがＯＦＦである場合（ステップ１３０１，ＮＯ）、第２探索処理を行う（ステップ１３０３）。その後、探索部９０２は、図１２のステップ１２０７以降の処理を行う。
【０１１７】
図１４は、図１３のステップ１３０２における第１探索処理の例を示すフローチャートである。第１探索処理では、バックフィル許可時間範囲Ｔ１２内において、ＪＯＢが示す実行待ちジョブが要求する空き計算資源が探索される。
【０１１８】
まず、探索部９０２は、ＪＯＢが示す実行待ちジョブが要求する計算ノードの個数をＮＯＤＥに設定し、その実行待ちジョブが要求する使用時間をＥＬＡＰＳＥに設定し、ＥＬＡＰＳＥの値をｅｔｉｍｅに設定する（ステップ１４０１）。そして、探索部９０２は、ｅｔｉｍｅをｂｆ＿ｅｎｄと比較する（ステップ１４０２）。
【０１１９】
ｅｔｉｍｅがｂｆ＿ｅｎｄ以下である場合（ステップ１４０２，ＮＯ）、探索部９０２は、計算資源割り当てテーブル９１５の先頭位置を実行開始時刻とする、“ＮＯＤＥ×ＥＬＡＰＳＥ”の空き計算資源が存在するか否かをチェックする（ステップ１４０３）。計算資源割り当てテーブル９１５の先頭位置は、現在時刻０に対応する。
【０１２０】
“ＮＯＤＥ×ＥＬＡＰＳＥ”の空き計算資源が存在する場合（ステップ１４０３，ＹＥＳ）、探索部９０２は、先頭位置から計算機資源割り当てを行う（ステップ１４０４）。これにより、ＪＯＢが示す実行待ちジョブに対する空き計算資源の割り当て結果が、計算資源割り当てテーブル９１５に記録される。その後、探索部９０２は、図１２のステップ１２０７以降の処理を行う。
【０１２１】
ｅｔｉｍｅがｂｆ＿ｅｎｄよりも大きい場合（ステップ１４０２，ＹＥＳ）、又は“ＮＯＤＥ×ＥＬＡＰＳＥ”の空き計算資源が存在しない場合（ステップ１４０３，ＮＯ）、探索部９０２は、図１２のステップ１２０７以降の処理を行う。この場合、探索部９０２は、ＪＯＢが示す実行待ちジョブを、計算資源割り当て不可ジョブとして計算資源割り当てテーブル９１５に記録する。
【０１２２】
図１４の第１探索処理によれば、バックフィルによって割り当てられる計算資源の実行開始時刻が、計算資源割り当てテーブル９１５の先頭位置である現在時刻０に限定される。したがって、実行待ちジョブの実行開始時刻が現在時刻０よりも遅くなることがなく、優先度の低いジョブが優先度の高いジョブの実行開始を妨げる可能性がより低くなる。
【０１２３】
図１５は、図１３のステップ１３０３における第２探索処理の例を示すフローチャートである。第２探索処理では、資源探索時間範囲Ｔ１１内において、ＪＯＢが示す実行待ちジョブが要求する空き計算資源が探索される。
【０１２４】
まず、探索部９０２は、ＪＯＢが示す実行待ちジョブが要求する計算ノードの個数をＮＯＤＥに設定し、その実行待ちジョブが要求する使用時間をＥＬＡＰＳＥに設定し、ｓｃ＿ｓｔａｒｔの値をｓｔｉｍｅに設定する（ステップ１５０１）。そして、探索部９０２は、ｓｔｉｍｅをｓｃ＿ｅｎｄと比較する（ステップ１５０２）。
【０１２５】
ｓｔｉｍｅがｓｃ＿ｅｎｄ未満である場合（ステップ１５０２，ＮＯ）、探索部９０２は、計算資源割り当てテーブル９１５のｓｔｉｍｅを実行開始時刻とする、“ＮＯＤＥ×ＥＬＡＰＳＥ”の空き計算資源が存在するか否かをチェックする（ステップ１５０３）。
【０１２６】
“ＮＯＤＥ×ＥＬＡＰＳＥ”の空き計算資源が存在する場合（ステップ１５０３，ＹＥＳ）、探索部９０２は、ｓｔｉｍｅから計算機資源割り当てを行う（ステップ１５０４）。これにより、ＪＯＢが示す実行待ちジョブに対する空き計算資源の割り当て結果が、計算資源割り当てテーブル９１５に記録される。その後、探索部９０２は、図１２のステップ１２０７以降の処理を行う。
【０１２７】
一方、“ＮＯＤＥ×ＥＬＡＰＳＥ”の空き計算資源が存在しない場合（ステップ１５０３，ＮＯ）、探索部９０２は、ｓｔｉｍｅを単位時間だけインクリメントして（ステップ１５０５）、ステップ１５０２以降の処理を繰り返す。
【０１２８】
ｓｔｉｍｅがｓｃ＿ｅｎｄ以上である場合（ステップ１５０２，ＹＥＳ）、探索部９０２は、ｂｆ＿ｆｌａｇにＯＮを設定して（ステップ１５０６）、図１２のステップ１２０７以降の処理を行う。この場合、探索部９０２は、ＪＯＢが示す実行待ちジョブを、計算資源割り当て不可ジョブとして計算資源割り当てテーブル９１５に記録する。
【０１２９】
このように、資源探索時間範囲Ｔ１１内において、ＪＯＢが示す実行待ちジョブに対して割り当てる空き計算資源が存在しない場合、ｂｆ＿ｆｌａｇにＯＮが設定される。したがって、ｂｆ＿ｆｌａｇ＝ＯＮは、計算資源割り当て不可ジョブが発生していることを示し、ｂｆ＿ｆｌａｇ＝ＯＦＦは、計算資源割り当て不可ジョブが発生していないことを示す。計算資源割り当て不可ジョブが発生している場合、資源探索時間範囲Ｔ１１内のどの時刻から計算資源を割り当てる処理も、バックフィルに該当する。
【０１３０】
ｂｆ＿ｆｌａｇをＯＦＦからＯＮに変更することで、次回以降に抽出される実行待ちジョブに対して図１４の第１探索処理を適用し、バックフィル許可時間範囲Ｔ１２を用いたバックフィルスケジューリングを行うことが可能になる。
【０１３１】
例えば、図１０のジョブ情報テーブル９１１では、実行待ちジョブであるｊｏｂＤ〜ｊｏｂＲが優先度順にソートされており、最初に、最も高い優先度Ｐ１を有するｊｏｂＤがＪＯＢに設定される。このとき、ｂｆ＿ｆｌａｇがＯＦＦであるため、ｊｏｂＤを処理対象として、図１５の第２探索処理が行われる。ｊｏｂＤが要求する計算資源は“７×５”であるため、資源探索時間範囲Ｔ１１内で現在時刻０から未来へ向かって、連続する７個の計算ノードが連続して５時間空いている空き計算資源が探索される。
【０１３２】
しかし、バックフィル可能な“７×５”の空き計算資源が見つからないため、実行中ジョブがすべて終了する時刻９を実行開始時刻とする、“７×５”の空き計算資源が、ｊｏｂＤに対して割り当てられる。この場合、ｊｏｂＤの実行終了時刻が時刻１４になり、資源探索時間範囲Ｔ１１を超えてしまうが、ｂｆ＿ｆｌａｇがＯＦＦであり、計算資源割り当て不可ジョブが発生していないため、この空き計算資源の割り当てが許容される。
【０１３３】
次に、優先度Ｐ２を有するｊｏｂＥを処理対象として、図１５の第２探索処理が行われる。ｊｏｂＥが要求する計算資源は“３×６”であるため、資源探索時間範囲Ｔ１１内で現在時刻０から未来へ向かって、連続する３個の計算ノードが連続して６時間空いている空き計算資源が探索される。
【０１３４】
しかし、資源探索時間範囲Ｔ１１内で“３×６”の空き計算資源が見つからないため、時刻１２以降の時間範囲における資源探索は行われず、ｊｏｂＥは、計算資源割り当て不可ジョブとして記録される。これにより、最初の計算資源割り当て不可ジョブが発生したため、ｂｆ＿ｆｌａｇにＯＮが設定される。
【０１３５】
次に、優先度Ｐ３を有するｊｏｂＦがＪＯＢに設定される。このとき、ｂｆ＿ｆｌａｇがＯＮであるため、ｊｏｂＦを処理対象として、図１４の第１探索処理が行われる。しかし、ｊｏｂＦが要求する使用時間は１１時間であり、バックフィル許可時間範囲Ｔ１２の長さは９時間であるため、ｅｔｉｍｅ＞ｂｆ＿ｅｎｄとなる。このため、ｊｏｂＦに対する計算資源割り当ては行われず、ｊｏｂＦは、計算資源割り当て不可ジョブとして記録される。
【０１３６】
次に、優先度Ｐ４を有するｊｏｂＧ〜優先度Ｐ７を有するｊｏｂＪを順番に処理対象として、図１４の第１探索処理が行われるが、空き計算資源が見つからないため、ｊｏｂＧ〜ｊｏｂＪは、計算資源割り当て不可ジョブとして記録される。
【０１３７】
次に、優先度Ｐ８を有するｊｏｂＫを処理対象として、図１４の第１探索処理が行われる。ｊｏｂＫが要求する計算資源は“１×９”であるため、バックフィル許可時間範囲Ｔ１２内で、１個の計算ノードが現在時刻０から連続して５時間空いている空き計算資源が探索される。そして、バックフィルにより、現在時刻０を実行開始時刻とする“１×９”の空き計算資源が、ｊｏｂＫに対して割り当てられる。
【０１３８】
次に、優先度Ｐ９を有するｊｏｂＬ〜優先度Ｐ１５を有するｊｏｂＲを順番に処理対象として、図１４の第１探索処理が行われ、空き計算資源が見つかれば、バックフィルによる計算資源割り当てが行われる。一方、空き計算資源が見つからなければ、処理対象のジョブが、計算資源割り当て不可ジョブとして記録される。
【０１３９】
これにより、ｊｏｂＬ、ｊｏｂＰ、及びｊｏｂＱに対して、現在時刻０を実行開始時刻とする空き計算資源が割り当てられ、ｊｏｂＭ、ｊｏｂＮ、ｊｏｂＯ、及びｊｏｂＲは、計算資源割り当て不可ジョブとして記録される。最終的に、図１１の計算資源割り当てテーブル９１５が示すような計算資源割り当てが行われる。
【０１４０】
図１１の計算資源割り当てテーブル９１５では、現在時刻０において、ｊｏｂＫ、ｊｏｂＬ、ｊｏｂＰ、及びｊｏｂＱに対して、バックフィルによる計算資源割り当てが行われており、ジョブの実行が直ちに開始される。このため、現在時刻０において実行中ジョブが使用している計算ノードの個数は８個になり、並列計算機システムの稼働率は１００％になる。したがって、図３〜図５の割り当て結果よりも稼働率が向上する。
【０１４１】
図６の並列処理装置６０１及び図８の並列計算機システム８０１の構成は一例に過ぎず、並列処理装置６０１又は並列計算機システム８０１の用途又は条件に応じて一部の構成要素を省略又は変更してもよい。
【０１４２】
図６のジョブ管理装置６１２及び図８のジョブ管理装置８１２の構成は一例に過ぎず、並列処理装置６０１又は並列計算機システム８０１の用途又は条件に応じて一部の構成要素を省略又は変更してもよい。
【０１４３】
図７及び図１２〜図１５のフローチャートは一例に過ぎず、ジョブ管理装置の構成又は条件に応じて一部の処理を省略又は変更してもよい。例えば、図１２のジョブスケジューリングにおいてバックフィル許可時間範囲９１３を使用しない場合は、図１３のステップ１３０１及びステップ１３０２の処理、図１４の第１探索処理、及び図１５のステップ１５０６の処理を省略することができる。
【０１４４】
図１に示したジョブスケジューリングは一例に過ぎず、ジョブスケジューリングは、投入されるジョブに応じて変化する。図２〜図５及び図１１に示した計算資源割り当てテーブルは一例に過ぎず、計算資源割り当てテーブルは、投入されるジョブとジョブスケジューリングのアルゴリズムに応じて変化する。図１０に示したジョブ情報テーブルは一例に過ぎず、ジョブ情報テーブルは、投入されるジョブに応じて変化する。
【０１４５】
図１６は、図６の計算ノード６１１−ｉ及び図８の計算ノード８１１−ｉとして用いられる情報処理装置（コンピュータ）の構成例を示している。図１６の情報処理装置は、ＣＰＵ１６０１、メモリ１６０２、及びインタフェース１６０３を含む。これらの構成要素はバス１６０４により互いに接続されている。
【０１４６】
メモリ１６０２は、例えば、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）等の半導体メモリであり、投入されたジョブのプログラムとジョブの実行に用いられるデータとを記憶する。ＣＰＵ１６０１（プロセッサ）は、メモリ１６０２を利用してプログラムを実行することにより、ジョブを実行する。情報処理装置は、複数のＣＰＵを含んでいてもよい。
【０１４７】
インタフェース１６０３は、並列処理装置６０１又は並列計算機システム８０１内のネットワークに接続され、他の計算ノードと通信する通信インタフェース回路である。
【０１４８】
図１７は、図６のジョブ管理装置６１２及び図８のジョブ管理装置８１２として用いられる情報処理装置（コンピュータ）の構成例を示している。図１７の情報処理装置は、ＣＰＵ１７０１、メモリ１７０２、入力装置１７０３、出力装置１７０４、補助記憶装置１７０５、媒体駆動装置１７０６、インタフェース１７０７、及びインタフェース１７０８を含む。これらの構成要素はバス１７０９により互いに接続されている。
【０１４９】
メモリ１７０２は、例えば、ＲＯＭ、ＲＡＭ等の半導体メモリであり、処理に用いられるプログラム及びデータを記憶する。メモリ１７０２は、図９の記憶部９０３として用いることができる。
【０１５０】
ＣＰＵ１７０１（プロセッサ）は、例えば、メモリ１７０２を利用してプログラムを実行することにより、図６の決定部６２１及び探索部６２２として動作する。ＣＰＵ１７０１は、メモリ１７０２を利用してプログラムを実行することにより、図９の決定部９０１及び探索部９０２としても動作する。
【０１５１】
入力装置１７０３は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示又は情報の入力に用いられる。出力装置１７０４は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問い合わせ又は指示、及び処理結果の出力に用いられる。処理結果は、計算資源割り当てテーブル９１５が示す割り当て結果であってもよく、ジョブの実行結果であってもよい。
【０１５２】
補助記憶装置１７０５は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置１７０５は、ハードディスクドライブ又はフラッシュメモリであってもよい。情報処理装置は、補助記憶装置１７０５にプログラム及びデータを格納しておき、それらをメモリ１７０２にロードして使用することができる。補助記憶装置１７０５は、図９の記憶部９０３として用いることができる。
【０１５３】
媒体駆動装置１７０６は、可搬型記録媒体１７１０を駆動し、その記録内容にアクセスする。可搬型記録媒体１７１０は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体１７１０は、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）、ＤＶＤ（Digital Versatile Disk）、ＵＳＢ（Universal Serial Bus）メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体１７１０にプログラム及びデータを格納しておき、それらをメモリ１７０２にロードして使用することができる。
【０１５４】
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ１７０２、補助記憶装置１７０５、又は可搬型記録媒体１７１０のような、物理的な（非一時的な）記録媒体である。
【０１５５】
インタフェース１７０７は、並列処理装置６０１又は並列計算機システム８０１内のネットワークに接続され、計算ノード６１１−ｉ又は計算ノード８１１−ｉと通信する通信インタフェース回路である。
【０１５６】
インタフェース１７０８は、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）等の通信ネットワークに接続され、外部の装置と通信する通信インタフェース回路である。情報処理装置は、プログラム及びデータを外部の装置からインタフェース１７０８を介して受信し、それらをメモリ１７０２にロードして使用することができる。
【０１５７】
なお、情報処理装置が図１７のすべての構成要素を含む必要はなく、用途又は条件に応じて一部の構成要素を省略することも可能である。例えば、オペレータ又はユーザとのインタフェースが不要な場合は、入力装置１７０３及び出力装置１７０４を省略してもよい。可搬型記録媒体１７１０又は外部の通信ネットワークを使用しない場合は、媒体駆動装置１７０６又はインタフェース１７０８を省略してもよい。
【０１５８】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１５９】
図４乃至図１７を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数の計算ノードと、
前記複数の計算ノードの計算資源をジョブに割り当てるジョブ管理装置とを備え、
前記ジョブ管理装置は、
実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定する決定部と、
前記資源探索時間範囲内において、前記複数の計算ノードの計算資源の中から、前記複数のジョブのうち処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する探索部とを含むことを特徴とする並列処理装置。
（付記２）
前記決定部は、前記複数のジョブそれぞれの予定実行時間の最大値を、前記資源探索時間範囲の開始時刻に加算することで、前記資源探索時間範囲を決定することを特徴とする付記１記載の並列処理装置。
（付記３）
前記ジョブ管理装置は、フラグを記憶する記憶部をさらに含み、
前記フラグは、前記資源探索時間範囲の開始時刻から１つ以上の実行中ジョブがすべて終了する時刻までのバックフィル許可時間範囲を適用するか否かを示し、
前記探索部は、前記フラグが前記バックフィル許可時間範囲を適用しないことを示す値である場合、前記資源探索時間範囲内において、前記処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索し、前記フラグが前記バックフィル許可時間範囲を適用することを示す値である場合、前記バックフィル許可時間範囲内において、前記処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索することを特徴とする付記１又は２記載の並列処理装置。
（付記４）
前記探索部は、前記資源探索時間範囲内において、前記処理対象の実行待ちジョブよりも前に選択した実行待ちジョブに対して割り当てる空き計算資源が存在しない場合、前記フラグを、前記バックフィル許可時間範囲を適用することを示す値に設定することを特徴とする付記３記載の並列処理装置。
（付記５）
前記探索部は、前記フラグが前記バックフィル許可時間範囲を適用することを示す値である場合、前記バックフィル許可時間範囲内において、前記資源探索時間範囲の開始時刻を実行開始時刻とする空き計算資源を、前記処理対象の実行待ちジョブに対して割り当てることを特徴とする付記３又は４記載の並列処理装置。
（付記６）
複数の計算ノードの計算資源をジョブに割り当てる際に、実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定し、
前記資源探索時間範囲内において、前記複数の計算ノードの計算資源の中から、前記複数のジョブのうち処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する、
処理をコンピュータに実行させるためのジョブ管理プログラム。
（付記７）
前記コンピュータは、前記複数のジョブそれぞれの予定実行時間の最大値を、前記資源探索時間範囲の開始時刻に加算することで、前記資源探索時間範囲を決定することを特徴とする付記６記載のジョブ管理プログラム。
（付記８）
前記コンピュータは、
前記資源探索時間範囲の開始時刻から１つ以上の実行中ジョブがすべて終了する時刻までのバックフィル許可時間範囲を適用するか否かを示すフラグを記憶し、
前記フラグが前記バックフィル許可時間範囲を適用しないことを示す値である場合、前記資源探索時間範囲内において、前記処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索し、
前記フラグが前記バックフィル許可時間範囲を適用することを示す値である場合、前記バックフィル許可時間範囲内において、前記処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索する、
ことを特徴とする付記６又は７記載のジョブ管理プログラム。
（付記９）
前記コンピュータは、前記資源探索時間範囲内において、前記処理対象の実行待ちジョブよりも前に選択した実行待ちジョブに対して割り当てる空き計算資源が存在しない場合、前記フラグを、前記バックフィル許可時間範囲を適用することを示す値に設定することを特徴とする付記８記載のジョブ管理プログラム。
（付記１０）
前記コンピュータは、前記フラグが前記バックフィル許可時間範囲を適用することを示す値である場合、前記バックフィル許可時間範囲内において、前記資源探索時間範囲の開始時刻を実行開始時刻とする空き計算資源を、前記処理対象の実行待ちジョブに対して割り当てることを特徴とする付記８又は９記載のジョブ管理プログラム。
（付記１１）
コンピュータによって実行されるジョブ管理方法であって、
前記コンピュータが、
複数の計算ノードの計算資源をジョブに割り当てる際に、実行中ジョブと実行待ちジョブとを含む複数のジョブそれぞれの予定実行時間に基づいて、資源探索時間範囲を決定し、
前記資源探索時間範囲内において、前記複数の計算ノードの計算資源の中から、前記複数のジョブのうち処理対象の実行待ちジョブに対して割り当てる空き計算資源を、バックフィルスケジューリングにより探索する、
ことを特徴とするジョブ管理方法。
（付記１２）
前記コンピュータは、前記複数のジョブそれぞれの予定実行時間の最大値を、前記資源探索時間範囲の開始時刻に加算することで、前記資源探索時間範囲を決定することを特徴とする付記１１記載のジョブ管理方法。
（付記１３）
前記コンピュータは、
前記資源探索時間範囲の開始時刻から１つ以上の実行中ジョブがすべて終了する時刻までのバックフィル許可時間範囲を適用するか否かを示すフラグを記憶し、
前記フラグが前記バックフィル許可時間範囲を適用しないことを示す値である場合、前記資源探索時間範囲内において、前記処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索し、
前記フラグが前記バックフィル許可時間範囲を適用することを示す値である場合、前記バックフィル許可時間範囲内において、前記処理対象の実行待ちジョブに対して割り当てる空き計算資源を探索する、
ことを特徴とする付記１１又は１２記載のジョブ管理方法。
（付記１４）
前記コンピュータは、前記資源探索時間範囲内において、前記処理対象の実行待ちジョブよりも前に選択した実行待ちジョブに対して割り当てる空き計算資源が存在しない場合、前記フラグを、前記バックフィル許可時間範囲を適用することを示す値に設定することを特徴とする付記１３記載のジョブ管理方法。
（付記１５）
前記コンピュータは、前記フラグが前記バックフィル許可時間範囲を適用することを示す値である場合、前記バックフィル許可時間範囲内において、前記資源探索時間範囲の開始時刻を実行開始時刻とする空き計算資源を、前記処理対象の実行待ちジョブに対して割り当てることを特徴とする付記１３又は１４記載のジョブ管理方法。
【符号の説明】
【０１６０】
１０１  ジョブスケジューラ
６０１  並列処理装置
６１１−１〜６１１−Ｎ、８１１−１〜８１１−Ｎ  計算ノード
６１２、８１２  ジョブ管理装置
６２１、９０１  決定部
６２２、９０２  探索部
８０１  並列計算機システム
８１２  ジョブ管理装置
９０３  記憶部
９１１  ジョブ情報テーブル
９１２  資源探索時間範囲
９１３  バックフィル許可時間範囲
９１４  フラグ
９１５  計算資源割り当てテーブル
１６０１、１７０１  ＣＰＵ
１６０２、１７０２  メモリ
１６０３、１７０７、１７０８  インタフェース
１６０４、１７０９  バス
１７０３  入力装置
１７０４  出力装置
１７０５  補助記憶装置
１７０６  媒体駆動装置
１７１０  可搬型記録媒体
【図１】
2020201741.tif 000003
【図２】
2020201741.tif 000004
【図３】
2020201741.tif 000005
【図４】
2020201741.tif 000006
【図５】
2020201741.tif 000007
【図６】
2020201741.tif 000008
【図７】
2020201741.tif 000009
【図８】
2020201741.tif 000010
【図９】
2020201741.tif 000011
【図１０】
2020201741.tif 000012
【図１１】
2020201741.tif 000013
【図１２】
2020201741.tif 000014
【図１３】
2020201741.tif 000015
【図１４】
2020201741.tif 000016
【図１５】
2020201741.tif 000017
【図１６】
2020201741.tif 000018
【図１７】
2020201741.tif 000019