(57)【要約】【課題】競合リンクの発生を抑える情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムを提供する。【解決手段】第１割当部１５１は、環状の順番にデータを送信して処理を行うリングアルゴリズムを用いる第１ジョブを、複数のサーバ１が接続された複数のスイッチのそれぞれが互いに全二重の通信経路で接続されたフルメッシュトポロジを用いたネットワークを有する情報処理システムにおける複数のサーバ１に割り当てる。第２割当部１５２は、リングアルゴリズムを用いる第２ジョブを、第１ジョブによる処理で用いられるネットワーク上の通信経路と同じ通信経路を用いる場合、第１ジョブがデータを送信する方向と逆方向にデータを送信するように、複数のサーバ１に割り当てる。【選択図】図３
2019020852.tif 000002
【特許請求の範囲】
【請求項１】
環状に配置された演算装置において前記環状の順番にデータを送信して処理を行うリングアルゴリズムを用いる第１ジョブを、複数の演算装置が接続された複数のスイッチのそれぞれが互いに全二重の通信経路で接続されたフルメッシュトポロジを用いたネットワークに配置された前記演算装置のうちの複数の第１演算装置に割り当てる第１割当部と、
前記リングアルゴリズムを用いる第２ジョブを、前記第１ジョブによる処理で用いられる前記ネットワーク上の通信経路と同じ通信経路を用いる場合、前記第１ジョブがデータを送信する方向と逆方向にデータを送信するように、前記演算装置のうちの複数の第２演算装置に割り当てる第２割当部と
を備えたことを特徴とする情報処理装置。
【請求項２】
各前記スイッチに接続された前記演算装置に割り当てた識別番号が、前記スイッチのうちの他のスイッチに接続された演算装置に割り当てた識別番号の最大値と最小値との間に含まれないように識別番号を設定する番号設定部を備え、
前記第１割当部は、前記第１ジョブで使用する前記第１演算装置を選択し、前記識別番号の昇順又は降順に前記第１ジョブがデータを送信するように前記第１演算装置に第１ジョブを割り当て、
前記第２割当部は、前記第２ジョブで使用する前記第２演算装置を選択し、前記識別番号の昇順又は降順のうち前記第１ジョブのデータの送信順とは逆の順番に前記第２ジョブがデータを送信するように前記第２演算装置に前記第２ジョブを割り当てる
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１割当部は、前記第１ジョブの通信経路に使用するスイッチを選択し、選択したスイッチ毎に接続された演算装置から前記第１演算装置を選択し、
前記第２割当部は、前記第２ジョブの通信経路に使用するスイッチを選択し、選択したスイッチ毎に接続された演算装置から前記第２演算装置を選択する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記リングアルゴリズムを用いる第３ジョブの通信経路が前記第１ジョブ及び前記第２ジョブの双方の通信経路となっている通信経路と重複せず、且つ、前記第１ジョブの通信経路又は前記第２ジョブの通信経路の一方との重複を許してスイッチを選択し、選択したスイッチ毎に接続された演算装置から第３演算装置を選択し、前記識別番号の昇順又は降順のうち通信経路の重複を許した前記第１ジョブ又は前記第２ジョブのデータの送信順とは逆の順番に前記第３ジョブがデータを送信するように前記第３演算装置に前記第３ジョブを割り当てる第３割当部をさらに備えたことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
複数の演算装置が接続されたスイッチのそれぞれが互いに全二重の通信経路で接続されたフルメッシュトポロジを用いたネットワーク及び前記演算装置にジョブを割り当てて実行させる情報処理装置を有する情報処理システムであって、
前記情報処理装置は、
環状に配置された演算装置において前記環状の順番にデータを回して処理を行うリングアルゴリズムを用いる第１ジョブを、前記演算装置のうちの複数の第１演算装置に割り当てる第１割当部と、
前記リングアルゴリズムを用いる第２ジョブを、前記第１ジョブによる処理で用いられる前記ネットワーク上の通信経路と同じ通信経路を用いる場合、前記第１ジョブがデータを送信する方向と逆方向にデータを送信するように、前記演算装置のうちの複数の第２演算装置に割り当てる第２割当部と
を備えたことを特徴とする情報処理システム。
【請求項６】
環状に配置された演算装置において前記環状の順番にデータを送信して処理を行うリングアルゴリズムを用いる第１ジョブを、複数の演算装置が接続されたスイッチのそれぞれが互いに全二重の通信経路で接続されたフルメッシュトポロジを用いたネットワークに配置された前記演算装置のうちの複数の第１演算装置に割り当て、
前記リングアルゴリズムを用いる第２ジョブを、前記第１ジョブによる処理で用いられる前記ネットワーク上の通信経路と同じ通信経路を用いる場合、前記第１ジョブがデータを送信する方向と逆方向にデータを送信するように、前記演算装置のうちの複数の第２演算装置に割り当てる
ことを特徴とする情報処理方法。
【請求項７】
環状に配置された演算装置において前記環状の順番にデータを送信して処理を行うリングアルゴリズムを用いる第１ジョブを、複数の演算装置が接続されたスイッチのそれぞれが互いに全二重の通信経路で接続されたフルメッシュトポロジを用いたネットワークに配置された前記演算装置のうちの複数の第１演算装置に割り当て、
前記リングアルゴリズムを用いる第２ジョブを、前記第１ジョブによる処理で用いられる前記ネットワーク上の通信経路と同じ通信経路を用いる場合、前記第１ジョブがデータを送信する方向と逆方向にデータを送信するように、前記演算装置のうちの複数の第２演算装置に割り当てる
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムに関する。
【背景技術】
【０００２】
スーパーコンピュータやＰＣ（Personal  Computer）クラスタシステムでは、多数のサーバが高速なネットワークで接続されている。サーバは、ノードと呼ばれる場合がある。このサーバ間のネットワークの接続方法は、ネットワークトポロジと呼ばれる。そして、スーパーコンピュータやＰＣクラスタシステムで用いられるネットワークトポロジには、ＦａｔＴｒｅｅトポロジやフルメッシュトポロジといった様々な種類が存在する。
【０００３】
ＦａｔＴｒｅｅトポロジは、ツリー形のネットワークにおいて上流側への接続リンクを多重化したトポロジである。また、フルメッシュトポロジは、サーバが接続されたスイッチ間を全て直接繋いだ形のネットワークトポロジである。ここで、直接繋ぐとは、他のスイッチを介さずに接続されることを指す。
【０００４】
フルメッシュトポロジは、ＦａｔＴｒｅｅトポロジに比べて、同一のスイッチ数でより多くのサーバが接続できる。また、フルメッシュトポロジは、ＦａｔＴｒｅｅトポロジに対し最短経路での通信ホップ数を小さくすることができる。
【０００５】
一方、あるサーバが他のいずれかのサーバとの間で通信を行う場合、ＦａｔＴｒｅｅトポロジを用いたネットワークであれば、通信を行うサーバ間で複数の通信経路が存在する。これに対して、フルメッシュトポロジを用いたネットワークの場合、通信を行うサーバ間では経路がＦａｔＴｒｅｅトポロジの場合よりも少ない。
【０００６】
なお、ネットワークにおける通信技術として、リング状の通信パスを用いるネットワークシステムの従来技術がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２０１４−５３３４４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ここで、ネットワーク上の複数のサーバにジョブが割り当てられ、それぞれのジョブが通信を行う、すなわち、異なるサーバの通信が重なる場合を考える。ＦａｔＴｒｅｅトポロジを用いたネットワークであれば、各通信に対してそれぞれ異なる通信経路を割り当てることにより、競合の発生が抑えられる。しかしながら、フルメッシュトポロジを用いた場合、異なるサーバが同じ通信経路を用いて同じ方向への通信を行うことが考えられる。その場合、競合リンクが発生してしまい、ネットワークにおける通信性能が低下するおそれがある。
【０００９】
そこで、競合リンクを回避するために同一スイッチに直接接続される複数のサーバにジョブを割り当てないようにする方法が考えられる。しかしながら、同一スイッチに直接接続される複数のサーバにジョブを割り当てない場合、割り当てるジョブがあるにもかかわらず未使用のサーバが存在する事態が発生し、システム全体の利用効率が低下するおそれがある。
【００１０】
また、フルメッシュトポロジを用いたネットワーク上で、単にリング状の通信パスを用いた場合、競合リンクの発生を抑えることは困難である。
【００１１】
開示の技術は、上記に鑑みてなされたものであって、競合リンクの発生を抑える情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本願の開示する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムの一つの態様において、第１割当部は、環状に結ばれた演算装置において前記環状の順番にデータを送信して処理を行うリングアルゴリズムを用いる第１ジョブを、複数の演算装置が接続された複数のスイッチのそれぞれが互いに全二重の通信経路で接続されたフルメッシュトポロジを用いたネットワークを有する情報処理システムにおける前記演算装置のうちの複数の第１演算装置に割り当てる。第２割当部は、前記リングアルゴリズムを用いる第２ジョブを、前記第１ジョブによる処理で用いられる前記ネットワーク上の通信経路と同じ通信経路を用いる場合、前記第１ジョブがデータを送信する方向と逆方向にデータを送信するように、前記演算装置のうちの複数の第２演算装置に割り当てる。
【発明の効果】
【００１３】
１つの側面では、本発明は、競合リンクの発生を抑えることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、フルメッシュトポロジを用いたネットワーク構成の一例を表す図である。
【図２】図２は、ジョブ入力を説明するための図である。
【図３】図３は、実施例１に係る管理装置のブロック図である。
【図４】図４は、ジョブの割り当ての一例を説明するためのネットワーク構成図である。
【図５】図５は、割当管理表の一例を表す図である。
【図６】図６は、ホストリストの一例を表す図である。
【図７】図７は、ジョブの割り当ての他の例を説明するためのネットワーク構成図である。
【図８】図８は、割当管理表の他の例を表す図である。
【図９】図９は、ホストリストの他の例を表す図である。
【図１０】図１０は、グローバル番号の割付処理のフローチャートである。
【図１１】図１１は、スイッチ毎のサーバへのグローバル番号の割付処理のフローチャートである。
【図１２】図１２は、ジョブ割当処理全体のフローチャートである。
【図１３】図１３は、リングアルゴリズム使用可能判定処理のフローチャートである。
【図１４】図１４は、サーバへのジョブの割当処理のフローチャートである。
【図１５】図１５は、ジョブ終了処理のフローチャートである。
【図１６】図１６は、実施例２に係る管理装置のブロック図である。
【図１７】図１７は、３つのジョブの割当状態の一例を表す図である。
【図１８】図１８は、３つのジョブの割当状態の他の例を表す図である。
【図１９】図１９は、４つのジョブの割当状態の一例を表す図である。
【図２０】図２０は、多層フルメッシュトポロジの概念図である。
【図２１】図２１は、ハードウェア構成図である。
【発明を実施するための形態】
【００１５】
以下に、本願の開示する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムが限定されるものではない。
【実施例１】
【００１６】
図１は、フルメッシュトポロジを用いたネットワーク構成の一例を表す図である。図１に示すように、本実施例に係るネットワークは、全てのスイッチ２同士が他のスイッチ２を介さずに直接繋がるフルメッシュトポロジを用いて構成される。スイッチ２同士は、全二重通信の通信線で接続される。そして、各スイッチ２には、サーバ１が複数接続される。図１では、スイッチ２が４つの場合のネットワーク構成を示したが、スイッチ２の数は３以上であれば他の数でもよい。
【００１７】
サーバ１は、スイッチ２を介して他のサーバ１と通信を行う。図１では、１つのスイッチ２につき２台のサーバ１が接続される場合を示したが、各スイッチ２に接続されるサーバ１の数は特に制限は無い。また、サーバ１は、各スイッチ２にそれぞれ異なる数が接続されてもよい。
【００１８】
次に、図２を参照して、サーバ１を管理する管理装置１０を含む情報処理システム１００について説明する。図２は、ジョブ入力を説明するための図である。図２では、サーバ１同士が管理用ネットワーク３及び計算用ネットワーク４で接続される構成を記載したが、実際には、サーバ１は、他の通信機器を経由して相互に接続されてもよい。例えば、計算用ネットワーク４は、実際には、図１のフルメッシュトポロジを用いたネットワークにあたり、サーバ１は、スイッチ２を介して相互に接続される。
【００１９】
サーバ１及び管理装置１０は、それぞれがＣＰＵ（Central  Processing  Unit）及びメモリなどを有する。サーバ１は、計算ノードと呼ばれる場合がある。また、管理装置１０は、管理ノードと呼ばれる場合がある。
【００２０】
例えば、管理装置１０は、ジョブスケジューラコントローラ１０１が動作する。ジョブスケジューラコントローラ１０１は、操作者からジョブを実行させるためのプログラムのパス、プログラムが同時に使用するサーバ１の数である並列数及びプログラムの実行時間などを含むジョブ情報１０３の入力を受ける。そして、ジョブスケジューラコントローラ１０１は、並列数などに基づきジョブを実行させるサーバ１を選択する。その後、ジョブスケジューラコントローラ１０１は、選択したサーバ１のジョブスケジューラデーモン１０２に対してジョブの実行を、管理用ネットワーク３を介して指示する。ジョブスケジューラコントローラ１０１によるジョブを実行させるサーバ１の選択及び選択したサーバ１へのジョブの実行の指示が、ジョブの割り当てにあたる。
【００２１】
本実施例では、管理装置１０は、リングアルゴリズムを用いる集合通信（Collective  Communication  Operation）を行うジョブをサーバ１に実行させる。リングアルゴリズムとは、環状にデータを巡回させることで処理が行われるアルゴリズムである。また、集合通信は、集団通信とも呼ばれ、２つ以上のサーバ１の間でデータの送受信を行う通信である。管理装置１０によるジョブの割り当てについては後で詳細に説明する。本実施例では、管理装置１０がサーバ１を３つ以上用いてジョブを実行させる場合について説明する。
【００２２】
各サーバ１では、ジョブスケジューラデーモン１０２が動作する。ジョブスケジューラデーモン１０２は、ジョブの実行の指示を管理装置１０で動作するジョブスケジューラコントローラ１０１から受ける。そして、各サーバ１のジョブスケジューラデーモン１０２は、指示されたジョブをサーバ１に実行させる。サーバ１は、計算用ネットワーク４を介して他のサーバ１と通信を行うことでジョブを実行する。ここで、サーバ１は、それぞれに接続された個別のストレージを有し、実行するプログラムや使用するデータを自己に接続されたストレージから読み出してジョブを実行してもよい。また、他の方法としては、サーバ１が接続する１台のファイルサーバを用意し、各サーバ１は、実行するプログラムや使用するデータをファイルサーバから読み出してジョブを実行してもよい。このサーバ１が、「演算装置」の一例にあたる。
【００２３】
また、本実施例では、ジョブスケジューラコントローラ１０１を動作させる装置としてジョブを実行するサーバ１とは別に管理装置１０を配置したが、サーバ１の何れかにジョブスケジューラコントローラ１０１を実行させてもよい。
【００２４】
次に、図３を参照して、管理装置１０によるジョブの割り当てについて説明する。図３は、実施例１に係る管理装置のブロック図である。図３に示すように、管理装置１０は、情報取得部１１、識別番号設定部１２、管理表作成部１３、記憶部１４及びジョブ割当部１５を有する。
【００２５】
記憶部１４は、メモリなどの記憶装置である。そして、記憶部１４は、各サーバ１に対するジョブの割当状態を表す割当管理表１４０及び各ジョブで利用されるサーバ１の利用順を表すホストリスト１４１を有する。
【００２６】
情報取得部１１は、情報処理システム１００内の使用可能な各スイッチ２の情報及び各スイッチ２に接続されたサーバ１の情報を含むネットワーク構成情報を取得する。例えば、情報取得部１１は、管理装置１０が有するキーボードなどの入力装置を用いて操作者から入力されたネットワーク構成情報を取得する。そして、情報取得部１１は、ネットワーク構成情報を識別番号設定部１２へ出力する。
【００２７】
ここでは、情報取得部１１は、図４に示すネットワーク構成の情報の入力を受けた場合で説明する。すなわち、情報取得部１１は、３つのスイッチ２がフルメッシュトポロジを用いたネットワークで接続され、且つ、各スイッチ２にサーバ１が２台ずつ接続されたことを表すネットワーク構成情報を取得する。以下では、３つのスイッチ２をそれぞれ、図４に示すようにスイッチＳＷ０〜ＳＷ２として説明する。
【００２８】
また、情報取得部１１は、ジョブ情報の入力を受ける。そして、情報取得部１１は、取得したジョブ情報をジョブ割当部１５へ出力する。
【００２９】
識別番号設定部１２は、情報処理システム１００内の使用可能な各スイッチ２の情報及び各スイッチ２に接続されたサーバ１の情報の入力を情報取得部１１から受ける。次に、識別番号設定部１２は、各スイッチ２に接続されるサーバ１に対してローカル番号を設定する。ローカル番号とは、１つのスイッチ２に接続されるサーバ１においてそれぞれを識別するための番号である。本実施例では、識別番号設定部１２は、スイッチ２のそれぞれに接続される２台のサーバ１に＃＃０及び＃＃１というローカル番号を設定する。ここで、１つのスイッチ２の配下のサーバ１はいずれも同等であり区別しなくてよいので、識別番号設定部１２は、サーバ１に対して自由にローカル番号を設定してよい。
【００３０】
次に、識別番号設定部１２は、全てのサーバ１に対してグローバル番号を設定する。具体的には、識別番号設定部１２は、それぞれが重複せず、且つ、あるスイッチ２の配下のサーバ１のグローバル番号が、他のスイッチ２の配下のサーバ１のグローバル番号の最大値より大きい又は最小値より小さくなるように設定する。言い換えれば、識別番号設定部１２は、あるスイッチ２の配下のグローバル番号の最大値と最小値との範囲に、他のスイッチ２の配下のグローバル番号が含まれないように、グローバル番号を設定する。
【００３１】
本実施例では、識別番号設定部１２は、各スイッチ２の配下のサーバ１のグローバル番号が連番となり、且つ、全てのサーバ１のグローバル番号が連番になるようにグローバル番号をサーバ１に設定する。具体的には、識別番号設定部１２は、スイッチＳＷ０の配下のサーバ１のローカル番号の小さい順に、グローバル番号を＃０及び＃１に設定する。また、識別番号設定部１２は、スイッチＳＷ１の配下のサーバ１のローカル番号の小さい順に、グローバル番号を＃２及び＃３に設定する。さらに、識別番号設定部１２は、スイッチＳＷ２の配下のサーバ１のローカル番号の小さい順に、グローバル番号を＃４及び＃５に設定する。
【００３２】
これにより、図４に示すように各サーバ１にローカル番号及びグローバル番号が設定される。図４において、各サーバ１の近傍に記載した括弧内の符号がローカル番号を表し、その括弧の前の符号がグローバル番号を表す。
【００３３】
そして、識別番号設定部１２は、各サーバ１に設定したローカル番号及びグローバル番号をネットワーク構成情報とともに管理表作成部１３へ出力する。
【００３４】
管理表作成部１３は、ネットワーク構成情報、並びに、各サーバ１に設定されたローカル番号及びグローバル番号の入力を識別番号設定部１２から受ける。そして、管理表作成部１３は、図５に示すように、記憶部１４に格納された割当管理表１４０にグローバル番号及びローカル番号を登録する。図５は、割当管理表の一例を表す図である。図４のスイッチＳＷ０〜ＳＷ２に対応する各行はスイッチＳＷ０〜ＳＷ２のそれぞれの配下に存在するサーバ１に対応する。
【００３５】
ここでは、管理表作成部１３は、スイッチＳＷ０〜ＳＷ２のそれぞれの配下の各サーバ１にローカル番号＃＃０及び＃＃１を登録する。そして、管理表作成部１３は、スイッチＳＷ０の配下のローカル番号＃＃０のサーバ１のグローバル番号として＃０を登録する。また、管理表作成部１３は、スイッチＳＷ０の配下のローカル番号＃＃１のサーバ１のグローバル番号として＃１を登録する。また、管理表作成部１３は、スイッチＳＷ１の配下のローカル番号＃＃０のサーバ１のグローバル番号として＃２を登録する。また、管理表作成部１３は、スイッチＳＷ１の配下のローカル番号＃＃１のサーバ１のグローバル番号として＃３を登録する。また、管理表作成部１３は、スイッチＳＷ２の配下のローカル番号＃＃０のサーバ１のグローバル番号として＃４を登録する。また、管理表作成部１３は、スイッチＳＷ２の配下のローカル番号＃＃１のサーバ１のグローバル番号として＃５を登録する。このグローバル番号が、「識別番号」の一例にあたる。
【００３６】
ジョブ割当部１５は、ジョブ情報の入力を情報取得部１１から受ける。ここでは、ジョブ割当部１５は、３つのサーバ１を使用するリングアルゴリズムを用いた集合通信を行う２つのジョブに関するジョブ情報の入力を受ける。以下では、２つのジョブの一方をジョブＡとし、他方をジョブＢとする。
【００３７】
ジョブ割当部１５は、ジョブＡ及びＢのそれぞれに関して第１割当部１５１及び第２割当部１５２という２つの機能部を動作させる。ここで、本実施例では２つのジョブを動作させる場合であるため、ジョブ割当部１５に第１割当部１５１及び第２割当部１５２という２つが存在するが、３つ以上のジョブの場合、そのジョブの数に応じた同様の機能部が存在する。ここで、本実施例では、説明の都合上、各ジョブに対応する第１割当部１５１及び第２割当部１５２をジョブ割当部１５が有するように説明したが、機能としては同様の機能を有するため、各ジョブに対応する割当を行う機能を有する１つの機能部としてまとめてもよい。
【００３８】
第１割当部１５１は、ジョブＡのジョブ情報を取得する。次に、第１割当部１５１は、ジョブＡがリングアルゴリズムを使用可能な集合通信か否かを判定する。例えば、第１割当部１５１は、ジョブを実行するためのプログラムからＭＰＩ（Message  Passing  Interface）関数名情報を取得する。関数名情報の取得方法として、例えば、Ｌｉｎｕｘ（登録商標）におけるｎｍコマンドを用いたシンボルテーブルの取得により関数名情報を得る方法がある。そして、第１割当部１５１は、取得したＭＰＩ関数名情報が、リングアルゴリズムを用いる集合通信を表すか否かを判定する。例えば、第１割当部１５１は、ＭＰＩ関数名情報がＭＰＩ  Ａｌｌｇａｔｈｅｒ（ｖ）、ＭＰＩ  Ａｌｌｒｅｄｕｃｅ又はＭＰＩ  Ｂｃａｓｔの何れかであるか否かを判定することで、リングアルゴリズムを用いる集合通信を表すか否かを判定する。
【００３９】
ＭＰＩ  Ａｌｌｇａｔｈｅｒ（ｖ）は、全てのプロセスが他のプロセスのデータを集める通信を表す。ＭＰＩ  Ａｌｌｒｅｄｕｃｅは、集めたデータの演算結果を全てのプロセスに送信する通信を表す。ＭＰＩ  Ｂｃａｓｔは、あるプロセスのデータを他の全てのプロセスに送信する通信を表す。そして、取得したＭＰＩ関数名情報がリングアルゴリズムを用いる集合通信を表す場合、第１割当部１５１は、ジョブＡがリングアルゴリズムを使用可能と判定する。ここで、プロセスとは、ジョブの実行単位にあたり、具体的には、ジョブを実行する各サーバ１上で動作するジョブに対する処理機能を表す。
【００４０】
そして、第１割当部１５１は、割当不可フラグに割り当てを表す値が設定されてないスイッチ２の中から、使用するスイッチ２を選択する。ここで、割当管理表１４０における割当不可フラグは、値が「１」であれば、そのスイッチ２へのジョブの割り当てが禁止されていることを表し、値が「０」であれば、そのスイッチ２へのジョブの割り当てが可能であることを表す。割当管理表１４０における割当不可フラグは、初期値として「０」に設定される。
【００４１】
ここでは、第１割当部１５１は、スイッチＳＷ０〜ＳＷ２を選択する。さらに、第１割当部１５１は、割当管理表１４０を確認して、スイッチＳＷ０〜ＳＷ２それぞれの配下のサーバ１にジョブが割り当て済みか否かを判定する。ここでは、第１割当部１５１は、スイッチＳＷ０〜ＳＷ２の配下の何れのサーバ１にもジョブが割り当てられていないことを確認する。
【００４２】
次に、第１割当部１５１は、スイッチＳＷ０〜ＳＷ２の中の適当なスイッチ２を１つ選択し、その配下のサーバ１を１つ選択する。そして、第１割当部１５１は、割当管理表１４０における選択したサーバ１に対応する１つ目ジョブの欄にジョブＡを登録する。これは、１つ目ジョブの欄にジョブＡを登録されたサーバ１に、１つ目のジョブであるジョブＡを実行させることを表す。同様に、第１割当部１５１は、スイッチＳＷ０〜ＳＷ２の中の未選択のスイッチ２から１つ選択し、その配下のサーバ１を１つ選択して、割当管理表１４０に１つ目ジョブを登録する。さらに、第１割当部１５１は、スイッチＳＷ０〜ＳＷ２の中の残りのスイッチ２の配下のサーバ１を１つ選択して、割当管理表１４０に１つ目ジョブを登録する。例えば、第１割当部１５１は、スイッチＳＷ０の配下のグローバル番号が＃０のサーバ１、スイッチＳＷ１の配下のグローバル番号が＃２のサーバ１及びスイッチＳＷ２の配下のグローバル番号が＃４のサーバ１にジョブＡを実行させると決定する。この第１割当部１５１により選択されたサーバ１が「第１演算装置」の一例にあたる。
【００４３】
次に、第１割当部１５１は、グローバル番号の小さい順、すなわちグローバル番号の昇順にジョブＡが利用するサーバ１の順番を決定する。ここで、各プロセスには、ジョブにおける処理の順番を表すランク番号が割り振られる。すなわち、ランク番号にしたがって各プロセスが処理を実行することで、ジョブが実行される。そこで、第１割当部１５１は、グローバル番号の昇順にジョブＡにおけるランク番号を小さいものから割り振ることで、ジョブＡが利用するサーバ１の順番を決定する。ここでは、グローバル番号が＃０，＃２及び＃４のサーバ１にジョブＡを実行させるとしたので、第１割当部１５１は、グローバル番号＃０，＃２，＃４の順にジョブＡが利用するサーバ１の順番を決定する。
【００４４】
そして、第１割当部１５１は、ランク番号順にそのランク番号が割り振られたプロセスを実行するサーバ１のグローバル番号を表すホストリスト１４１を作成し記憶部１４に格納する。例えば、第１割当部１５１は、図６のホストリスト１４１Ａを作成する。図６は、ホストリストの一例を表す図である。ホストリスト１４１Ａでは、上から下に向かってランク番号が増えていく。
【００４５】
そして、第１割当部１５１は、ホストリスト１４１Ａにしたがってリングアルゴリズムを用いた集合通信が行われるようにジョブＡの実行をグローバル番号が＃０，＃２及び＃４のサーバ１に指示する。これにより、第１割当部１５１は、図４における実線矢印で処理が進むようにグローバル番号＃０，＃２及び＃４のサーバ１にジョブＡを割り当てる。
【００４６】
その後、ジョブＡの実行が終了した場合、第１割当部１５１は、ジョブＡの情報を割当管理表１４０から消去する。さらに、第１割当部１５１は、ジョブＡが割り当てられたサーバ１が接続するスイッチ２の割当不可フラグが「１」であれば、「０」に変更する。ここでは、第１割当部１５１は、スイッチＳＷ０〜ＳＷ２の割当不可フラグを「０」に変更する。
【００４７】
ここで、本実施例では、１つ目のジョブであるジョブＡがリングアルゴリズムを使用可能である場合で説明したが、ジョブＡがリングアルゴリズムを不使用の場合も考えられる。ジョブＡがリングアルゴリズムを不使用の場合、ジョブＡでは一方向に向かってデータが流れることが保証されない。そのため、ジョブＡが他のジョブとデータを流す経路を供給した場合、競合リンクが発生するおそれがある。そこで、ジョブＡがリングアルゴリズムを不使用の場合、第１割当部１５１は、ジョブＡを割り当てたサーバ１を収容するスイッチ２の割当不可フラグを全て「１」に設定する。これにより、ジョブＡが使用するスイッチ２は他のジョブが使用しなくなり、競合リンクの発生を回避することができる。
【００４８】
次に、図３に戻って説明を続ける。第２割当部１５２は、ジョブＢのジョブ情報を取得する。次に、第２割当部１５２は、第１割当部１５１と同様に、ジョブＢがリングアルゴリズムを使用可能な集合通信か否かを判定する。
【００４９】
次に、第２割当部１５２は、割当不可フラグが「０」のスイッチ２の中から、使用するスイッチ２を選択する。ここでは、第２割当部１５２は、スイッチＳＷ０〜ＳＷ２を選択する。さらに、第２割当部１５２は、割当管理表１４０を確認して、スイッチＳＷ０〜ＳＷ２それぞれの配下のサーバ１にジョブが割り当て済みか否かを判定する。ここでは、第２割当部１５２は、スイッチＳＷ０〜ＳＷ２のそれぞれの配下のサーバ１にジョブＡが既に割り当てられていることを確認する。
【００５０】
次に、第２割当部１５２は、スイッチＳＷ０〜ＳＷ２の中から適当なスイッチ２を１つ選択し、その配下のジョブＡが割り当てられていないサーバ１を選択する。そして、第２割当部１５２は、割当管理表１４０における選択したサーバ１に対応する２つ目ジョブの欄にジョブＢを登録する。さらに、第２割当部１５２は、スイッチＳＷ０の割当不可フラグに割当不可を表す値である「１」を設定する。同様に、第２割当部１５２は、スイッチＳＷ０〜ＳＷ２の中の未選択のスイッチ２から１つ選択し、その配下のジョブＡが割り当てられていないサーバ１を１つ選択して、割当管理表１４０に２つ目ジョブを登録する。さらに、第２割当部１５２は、スイッチＳＷ０〜ＳＷ２の中の残りのスイッチ２の配下のジョブＡが割り当てられていないサーバ１を１つ選択して、割当管理表１４０に２つ目ジョブを登録する。例えば、第２割当部１５２は、スイッチＳＷ０の配下のグローバル番号が＃１のサーバ１、スイッチＳＷ１の配下のグローバル番号が＃３のサーバ１及びスイッチＳＷ２の配下のグローバル番号が＃５のサーバ１にジョブＢを実行させると決定する。この第２割当部１５２により選択されたサーバ１が「第２演算装置」の一例にあたる。
【００５１】
ここで、本実施例では、スイッチＳＷ０〜ＳＷＥ２の全てにおいて配下のサーバ１の全てにジョブが割り当てられた。しかし、スイッチ２の数及び各ジョブで使用するサーバ１の数に応じて、第２割当部１５２によるジョブの割り当て時に、配下のサーバ１の一部にジョブが割り当てられる場合がある。その場合、第２割当部１５２は、ジョブが割り当てられていないサーバ１が接続されるスイッチ２の割当不可フラグは「０」のままとする。
【００５２】
次に、第２割当部１５２は、グローバル番号の大きい順、すなわちグローバル番号の降順にジョブＢが利用するサーバ１の順番を決定する。具体的には、第２割当部１５２は、グローバル番号の降順にジョブＢにおけるランク番号を小さいものから割り振ることで、ジョブＢが利用するサーバ１の順番を決定する。ここでは、グローバル番号が＃１，＃３及び＃５のサーバ１にジョブＢを実行させるとしたので、第２割当部１５２は、グローバル番号＃５，＃３，＃１の順にジョブＡが利用するサーバ１の順番を決定する。
【００５３】
そして、第２割当部１５２は、ランク番号順にそのランク番号が割り振られたプロセスを実行するサーバ１のグローバル番号を表すホストリスト１４１を作成し記憶部１４に格納する。例えば、第２割当部１５２は、図６のホストリスト１４１Ｂを作成する。ホストリスト１４１Ｂにおいても、上から下に向かってランク番号が増えていく。
【００５４】
そして、第２割当部１５２は、ホストリスト１４１Ｂにしたがってリングアルゴリズムを用いた集合通信が行われるようにジョブＢの実行をグローバル番号が＃１，＃３及び＃５のサーバ１に指示する。これにより、第２割当部１５２は、図４における破線矢印で処理が進むようにグローバル番号＃１，＃３及び＃５のサーバ１にジョブＢを割り当てる。
【００５５】
また、ジョブＢがリングアルゴリズムを不使用の場合、第２割当部１５２は、配下のサーバ１にジョブが１つも割り当てられていないスイッチ２を選択し、その選択したスイッチ２の配下のサーバ１にジョブを割り当てる。その場合、第２割当部１５２は、配下のサーバ１にジョブを割当てたスイッチ２の割当不可フラグを「１」に設定する。
【００５６】
その後、ジョブＢの実行が終了した場合、第２割当部１５２は、ジョブＢの情報を割当管理表１４０から消去する。さらに、第２割当部１５２は、ジョブＢが割り当てられたサーバ１が接続するスイッチ２の割当不可フラグが「１」であれば、「０」に変更する。ここでは、第１割当部１５１は、スイッチＳＷ０〜ＳＷ２の割当不可フラグを「０」に変更する。
【００５７】
このように、ジョブＡ及びジョブＢが割り当てられることで、図４に示すように、ジョブＡは実線矢印の方向にデータが流され、ジョブＢは破線矢印の方向にデータが流される。すなわち、ジョブＡのデータの伝送方向と、ジョブＢのデータの伝送方向とは、どのスイッチ２の間においても反対を向くため、図４のネットワークにおいて競合リンクが発生しない。
【００５８】
また、以上では、スイッチ２が３つの場合で説明したが、ジョブ割当部１５は、スイッチ２が増えても同様にジョブを割り当てることができる。
【００５９】
たとえば、図７に示すように、スイッチ２が５台あり、各スイッチ２にサーバ１が２台ずつ接続される場合を考える。図７は、ジョブの割り当ての他の例を説明するためのネットワーク構成図である。以下では、５台のスイッチ２をそれぞれスイッチＳＷ０〜ＳＷ４として説明する。さらに、ここではジョブＡが４台のサーバ１を使用し、ジョブＢが３台のサーバ１を使用する場合で説明する。
【００６０】
この場合、識別番号設定部１２は、各スイッチ２の配下のサーバ１にローカル番号＃＃０及び＃＃１を設定する。さらに、識別番号設定部１２は、スイッチＳＷ０の配下のサーバ１のローカル番号の小さい順に、グローバル番号を＃０及び＃１に設定する。また、識別番号設定部１２は、スイッチＳＷ１の配下のサーバ１のローカル番号の小さい順に、グローバル番号を＃２及び＃３に設定する。また、識別番号設定部１２は、スイッチＳＷ２の配下のサーバ１のローカル番号の小さい順に、グローバル番号を＃４及び＃５に設定する。また、識別番号設定部１２は、スイッチＳＷ３の配下のサーバ１のローカル番号の小さい順に、グローバル番号を＃６及び＃７に設定する。また、識別番号設定部１２は、スイッチＳＷ４の配下のサーバ１のローカル番号の小さい順に、グローバル番号を＃８及び＃９に設定する。
【００６１】
管理表作成部１３は、図８に示すように、識別番号設定部１２の設定したグローバル番号及びローカル番号を割当管理表１４０に登録する。図８は、割当管理表の他の例を表す図である。
【００６２】
第１割当部１５１は、割当管理表１４０における使用不可フラグが「０」のスイッチ２の中から４台のスイッチ２を選択する。ここでは、第１割当部１５１は、スイッチＳＷ１，ＳＷ２，ＳＷ３及びＳＷ４を選択する。そして、第１割当部１５１は、選択したスイッチ２の配下のサーバ１を１台ずつ選択し、ジョブＡを実行させるサーバ１とする。ここでは、第１割当部１５１は、グローバル番号が＃２，＃４，＃６及び＃８のサーバ１をジョブＡを実行させるサーバ１と決定する。
【００６３】
そして、第１割当部１５１は、グローバル番号の昇順でジョブＡの処理が行われるように、ジョブＡで利用するサーバ１の順番を決定し、図９に示すホストリスト１４１Ａを作成する。図９は、ホストリストの他の例を表す図である。その後、第１割当部１５１は、ホストリスト１４１Ａにしたがって、グローバル番号が＃２，＃４，＃６及び＃８のサーバ１にジョブＡの実行を指示する。
【００６４】
同様に、第２割当部１５２は、割当管理表１４０における使用不可フラグが「０」のスイッチ２の中から３台のスイッチ２を選択する。ここでは、第２割当部１５２は、スイッチＳＷ１，ＳＷ２及びＳＷ３を選択する。そして、第２割当部１５２は、選択したスイッチ２の配下のサーバ１を１台ずつ選択し、ジョブＢを実行させるサーバ１とする。ここでは、第２割当部１５２は、グローバル番号が＃３，＃５及び＃７のサーバ１をジョブＢを実行させるサーバ１と決定する。さらに、第２割当部１５２は、配下の２つのサーバ１の何れにもジョブが割り当てられたスイッチ２に対して、割当管理表１４０の割当不可フラグを「１」に設定する。ここでは、第２割当部１５２は、スイッチＳＷ１及びＳＷ２のわいあて不可フラグを「１」に設定する。
【００６５】
そして、第２割当部１５２は、グローバル番号の降順でジョブＢの処理が行われるように、ジョブＢで利用するサーバ１の順番を決定し、図９に示すホストリスト１４１Ｂを作成する。その後、第２割当部１５２は、ホストリスト１４１Ｂにしたがって、グローバル番号が＃３，＃５及び＃７のサーバ１にジョブＢの実行を指示する。
【００６６】
このように、ジョブＡ及びジョブＢが割り当てられることで、図７に示すように、ジョブＡは実線矢印の方向にデータが流され、ジョブＢは破線矢印の方向にデータが流される。すなわち、スイッチ２が５台の場合にも、ジョブＡのデータの伝送方向と、ジョブＢのデータの伝送方向とは、どのスイッチ２の間においても反対を向くため、図７のネットワークにおいて競合リンクが発生しない。
【００６７】
次に、図１０を参照して、識別番号設定部１２によるグローバル番号の割付処理の流れについて説明する。図１０は、グローバル番号の割付処理のフローチャートである。ここでは、スイッチ２に対して、スイッチ番号がＳＷ０，ＳＷ１，ＳＷ２・・・と割り当てられた場合で説明する。
【００６８】
識別番号設定部１２は、スイッチ番号を表すｉを初期化して０に設定する（ステップＳ１０１）。
【００６９】
次に、識別番号設定部１２は、ｉが最大のスイッチ番号より大きいか否かを判定する（ステップＳ１０２）。ここで、ｉが最大のスイッチ番号より大きいとは、スイッチ番号のＳＷの後の数字が最大のものよりも大きい場合を指す。ｉがスイッチ番号より大きい場合（ステップＳ１０２：肯定）、識別番号設定部１２は、グローバル番号の割付処理を終了する。
【００７０】
これに対して、ｉがスイッチ番号以下の場合（ステップＳ１０２：否定）、識別番号設定部１２は、スイッチ番号がＳＷｉのスイッチを選択する（ステップＳ１０３）。
【００７１】
次に、識別番号設定部１２は、選択したスイッチに接続されたサーバ１にグローバル番号を付ける処理を行う（ステップＳ１０４）。
【００７２】
そして、識別番号設定部１２は、ｉを１つインクリメントし（ステップＳ１０５）、ステップＳ１０２に戻る。
【００７３】
次に、図１１を参照して、識別番号設定部１２によるスイッチ２毎のサーバ１へのグローバル番号の割付処理の流れについて説明する。図１１は、スイッチ毎のサーバへのグローバル番号の割付処理のフローチャートである。図１１のフローチャートで表される処理は、図１０のステップＳ１０４において実行される処理の一例にあたる。ここでは、識別番号設定部１２が、各サーバ１にローカル番号を＃＃１，＃＃２，＃＃３・・・と設定している場合で説明する。また、この場合、識別番号設定部１２が、スイッチ番号がＳＷｎのスイッチ２に接続されたサーバ１に対するグローバル番号の設定を行う場合で説明する。
【００７４】
識別番号設定部１２は、サーバ１のローカル番号を表すｊを初期化して０に設定する（ステップＳ１４１）。
【００７５】
次に、識別番号設定部１２は、ｊが最大のローカル番号より大きいか否かを判定する（ステップＳ１４２）。ここで、ｊが最大のローカル番号より大きいとは、ローカル番号の＃＃の後の数字が最大のものよりも大きい場合を指す。ｊがローカル番号より大きい場合（ステップＳ１４２：肯定）、識別番号設定部１２は、対象のスイッチ２におけるグローバル番号の割付処理を終了する。
【００７６】
これに対して、ｊがローカル番号以下の場合（ステップＳ１４２：否定）、識別番号設定部１２は、選択したスイッチ２のローカル番号が＃＃ｊのサーバを選択する（ステップＳ１４３）。
【００７７】
次に、識別番号設定部１２は、選択したサーバ１のグローバル番号をｉとｎとを乗算した値にｊを加算した値（ｉ＊ｎ＋ｊ）とする（ステップＳ１４４）。
【００７８】
次に、識別番号設定部１２は、ｊを１つインクリメントし（ステップＳ１４５）、ステップＳ１４２に戻る。
【００７９】
次に、図１２を参照して、ジョブ割当処理の全体的な流れについて説明する。図１２は、ジョブ割当処理全体のフローチャートである。ここで、第１割当部１５１及び第２割当部１５２のいずれも同様の処理を行うので、ジョブ割当部１５が第１割当部１５１及び第２割当部１５２の何れかの処理を行うものとして説明する。
【００８０】
ジョブ割当部１５は、与えられたジョブがリングアルゴリズムを使用可能な集合通信を行うか否かを判定する（ステップＳ２０１）。
【００８１】
与えられたジョブがリングアルゴリズムを使用可能な集合通信を行う場合（ステップＳ２０１：肯定）、ジョブ割当部１５は、サーバ１にジョブを割り当てるサーバ割当処理を実行する（ステップＳ２０２）。そして、ジョブ割当部１５は、ジョブ割当処理を終了する。
【００８２】
これに対して、与えられたジョブがリングアルゴリズムを使用可能な集合通信を行わない場合（ステップＳ２０１：否定）、ジョブ割当部１５は、サーバ１にジョブを割り当てるサーバ割当処理を実行する（ステップＳ２０３）。
【００８３】
次に、ジョブ割当部１５は、ジョブを割り当てたサーバ１が接続されたスイッチ２の割当不可フラグを「１」に設定する（ステップＳ２０４）。そして、ジョブ割当部１５は、ジョブ割当処理を終了する。
【００８４】
次に、図１３を参照して、ジョブ割当部１５によるリングアルゴリズムの使用可能判定処理の流れについて説明する。図１３は、リングアルゴリズム使用可能判定処理のフローチャートである。図１３のフローチャートで表される処理は、図１２のステップＳ２０１において実行される処理の一例にあたる。
【００８５】
ジョブ割当部１５は、ジョブを実行するためのプログラムからＭＰＩ関数名情報を取得する（ステップＳ２１１）。
【００８６】
次に、ジョブ割当部１５は、ＭＰＩ関数名情報からジョブがリングアルゴリズムを使用する集団通信にあたる所定の通信を使用するか否かを判定する（ステップＳ２１２）。この所定の通信には、例えば、ＭＰＩ  Ａｌｌｇａｔｈｅｒ（ｖ）、ＭＰＩ  Ａｌｌｒｅｄｕｃｅ及びＭＰＩ  Ｂｃａｓｔなどが含まれる。
【００８７】
所定の通信を使用する場合（ステップＳ２１２：肯定）、ジョブ割当部１５は、ジョブがリングアルゴリズムを使用可能な集合通信を行うと判定する（ステップＳ２１３）。
【００８８】
これに対して、所定の通信を使用しない場合（ステップＳ２１２：否定）、ジョブ割当部１５は、ジョブがリングアルゴリズムを不使用の集合通信を行うと判定する（ステップＳ２１４）。
【００８９】
次に、図１４を参照して、ジョブ割当部１５によるサーバ１へのジョブの割当処理の流れについて説明する。図１４は、サーバへのジョブの割当処理のフローチャートである。図１４のフローチャートで表される処理は、図１２のステップＳ２０２及びＳ２０３において実行される処理の一例にあたる。ここでは、１つのスイッチ２あたり２つのサーバ１が接続された場合で説明する。
【００９０】
ジョブ割当部１５は、ジョブ情報からジョブを実行するために利用するスイッチ２の数である利用スイッチ数を算出する（ステップＳ２２１）。
【００９１】
次に、ジョブ割当部１５は、割当管理表１４０において割当不可フラグの値が「０」、すなわち、割当不可フラグが未設定のスイッチ２からサーバ１を選択する（ステップＳ２２２）。
【００９２】
次に、ジョブ割当部１５は、１つ目のジョブは割り当て済みか否かを判定する（ステップＳ２２３）。
【００９３】
１つ目のジョブが割り当て済みでない場合（ステップＳ２２３：否定）、ジョブ割当部１５は、グローバル番号の小さい順にランク番号が増えるようにホストリスト１４１に登録する（ステップＳ２２４）。その後、ジョブ割当部１５は、サーバ１へのジョブの割当処理を終了する。
【００９４】
これに対して、１つ目のジョブが割り当て済みの場合（ステップＳ２２３：肯定）、ジョブ割当部１５は、グローバル番号の大きい順にランク番号が増えるようにホストリスト１４１に登録する（ステップＳ２２５）。
【００９５】
そして、ジョブ割当部１５は、割当管理表１４０において、接続された２つのサーバ１の両方にジョブが割り当てられたスイッチ２の割当不可フララグを「１」に設定する。その後、ジョブ割当部１５は、サーバ１へのジョブの割当処理を終了する（ステップＳ２２６）。
【００９６】
次に、図１５を参照して、ジョブ終了時の処理の流れについて説明する。図１５は、ジョブ終了処理のフローチャートである。
【００９７】
ジョブ割当部１５は、ジョブの実行が終了した場合、実行が終了したジョブの情報を割当管理表１４０から消去する（ステップＳ３０１）。
【００９８】
次に、ジョブ割当部１５は、そのジョブが割り当てられたサーバ１が接続するスイッチ２の割当不可フラグを「０」に設定する（ステップＳ３０２）。
【００９９】
以上に説明したように、本実施例に係る管理装置は、スイッチ間でグローバル番号の範囲が重ならないように配下のサーバにグローバル番号を振る。管理装置は、２つのリングアルゴリズムを用いるジョブが利用するスイッチが重複する場合、一方のジョブをグローバル番号の昇順でデータが送られるようにサーバに投入し、他方のジョブをグローバル番号の降順でデータが送られるようにサーバに投入する。これにより、フルメッシュトポロジを用いたネットワーク上で、競合リンクの発生を抑制し、システムの性能低下を軽減することができる。また、利用されないサーバの数を減少させることができ、システムの利用効率を向上させることができる。さらには、競合リンクの発生を回避できるため、ジョブの実行時間の予測を正確に行うことが可能となる。
【実施例２】
【０１００】
図１６は、実施例２に係る管理装置のブロック図である。本実施例に係る管理装置１０は、３つのジョブをサーバ１に割り当てる。本実施例に係る管理装置１０のジョブ割当部１５は、第１割当部１５１、第２割当部１５２及び第３割当部１５３を有する。図１６において図３と同じ符号を有する各部は特に説明のない限り同じ機能を有するものとする。
【０１０１】
３つのジョブが存在する場合、第１割当部１５１、第２割当部１５２及び第３割当部１５３は以下の処理を行い、図１７に示すようなジョブの割当を行う。図１７は、３つのジョブの割当状態の一例を表す図である。
【０１０２】
第１割当部１５１は、例えば、１つ目のジョブに対して枠２０１で囲われた３つのスイッチ２を選択する。そして、第１割当部１５１は、複数のサーバ１が順番に１つ目のジョブの処理を行っていく場合に、ジョブを行うサーバ１のグローバル番号が昇順となるように、選択したスイッチ２に接続するサーバ１に１つ目のジョブを割り当てる。これにより、１つめのジョブは、実線矢印の方向にデータを流す。
【０１０３】
また、第２割当部１５２は、枠２０１と重なる枠２０２で囲われた３つのスイッチ２を２つ目のジョブに対して選択する。そして、第２割当部１５２は、複数のサーバ１が順番に１つ目のジョブの処理を行っていく場合に、ジョブを行うサーバ１のグローバル番号が降順となるように、選択したスイッチ２に接続するサーバ１に２つ目のジョブを割り当てる。これにより、２つ目のジョブは、一点鎖線矢印の方向にデータが流れる。
【０１０４】
さらに、第３割当部１５３は、１つ目のジョブ及び２つ目のジョブの通信経路に含まれない枠２０３で囲われた４つのスイッチ２を選択する。この第３割当部１５３により選択されたスイッチ２が「第３演算装置」の一例にあたる。そして、第３割当部１５３は、複数のサーバ１が順番に３つ目のジョブの処理を行っていく場合に、ジョブを行うサーバ１のグローバル番号が昇順となるように、選択したスイッチ２に接続するサーバ１に３つ目のジョブを割り当てる。
【０１０５】
この場合、図１７に示すように、実線矢印と一点鎖線矢印とは反対方向を向く。すなわち、１つ目のジョブのデータと２つ目のジョブのデータとは反対方向に流れるため、競合リンクが発生しない。さらに、３つ目のジョブのデータは、１つ目のジョブのデータ及び２つ目のジョブのデータが流れる経路を流れないため、競合リンクは発生しない。
【０１０６】
したがって、３つのジョブがある場合であっても、以上に説明したようにジョブを割り当てれば競合リンクの発生を抑制することができる。
【０１０７】
（変形例）
以上では、１つのジョブに１つのジョブが重なる場合を説明したが、２つのジョブが重なる状態であれば、１つのジョブに複数のジョブが重なってもよい。図１８は、３つのジョブの割当状態の他の例を表す図ある。
【０１０８】
第１割当部１５１は、例えば、１つ目のジョブに対して枠２０１で囲われた３つのスイッチ２を選択する。そして、第１割当部１５１は、複数のサーバ１が順番に１つ目のジョブの処理を行っていく場合に、ジョブを行うサーバ１のグローバル番号が昇順となるように、選択したスイッチ２に接続するサーバ１に１つ目のジョブを割り当てる。これにより、１つめのジョブは、実線矢印の方向にデータを流す。
【０１０９】
また、第２割当部１５２は、枠２０１と重なる枠２０２で囲われた４つのスイッチ２を２つ目のジョブに対して選択する。そして、第２割当部１５２は、複数のサーバ１が順番に２つ目のジョブの処理を行っていく場合に、ジョブを行うサーバ１のグローバル番号が降順となるように、選択したスイッチ２に接続するサーバ１に２つ目のジョブを割り当てる。これにより、２つ目のジョブは、一点鎖線矢印の方向にデータが流れる。
【０１１０】
さらに、第３割当部１５３は、１つ目のジョブの通信経路に含まれず且つ２つ目のジョブの通信経路に含まれるスイッチ２であり、枠２０２と重なる枠２０３で囲われた４つのスイッチ２を３つ目のジョブに対して選択する。そして、第３割当部１５３は、複数のサーバ１が順番に３つ目のジョブの処理を行っていく場合に、ジョブを行うサーバ１のグローバル番号が昇順となるように、選択したスイッチ２に接続するサーバ１に３つ目のジョブを割り当てる。これにより、３つ目のジョブは、破線矢印の方向にデータが流れる。
【０１１１】
この場合、図１８に示すように、実線矢印と一点鎖線矢印とは反対方向を向く。すなわち、１つ目のジョブのデータと２つ目のジョブのデータとは反対方向に流れるため、競合リンクが発生しない。また、一点鎖線矢印と破線矢印とは反対方向を向く。すなわち、２つ目のジョブのデータと３つ目のジョブのデータとは反対方向に流れるため、競合リンクが発生しない。
【０１１２】
したがって、３つのジョブがある場合であっても、以上に説明したようにジョブを割り当てれば競合リンクの発生を抑制することができる。このように、同じスイッチ２を最大２つのジョブが共有するようにスイッチ２を選択し、利用するサーバ１の順番を決定する際にグローバル番号の選び方を一方が昇順となり他方が降順となるように選択すれば、競合リンクの発生を抑制することができる。
【０１１３】
さらに、実施例２では、３つのジョブを割り当てる場合で説明したが、４つ以上のジョブでも同様である。一例として４つのジョブの割当について説明する。図１９は、４つのジョブの割当状態の一例を表す図である。４つのジョブの場合、ジョブ割当部１５は、第１割当部１５１、第２割当部１５２及び第３割当部１５３に加えて、図示しない第４割当部を有する。ここでは、第１割当部１５１、第２割当部１５２及び第３割当部１５３は、上述した３つのジョブの割当の場合と同様にジョブを割り当てる。
【０１１４】
さらに、ジョブ割当部１５の第４割当部は、１つ目のジョブ及び２つ目のジョブの通信経路に含まれず、且つ、３つ目のジョブに通信経路に含まれる枠２０４で囲われた３つのスイッチ２を選択する。そして、第４割当部は、複数のサーバ１が順番に４つ目のジョブの処理を行っていく場合に、ジョブを行うサーバ１のグローバル番号が降順となるように、選択したスイッチ２に接続するサーバ１に４つ目のジョブを割り当てる。これにより、４つ目のジョブは、二点鎖線矢印の方向にデータが流れる。
【０１１５】
この場合、図１９に示すように、実線矢印と一点鎖線矢印とは反対方向を向く。すなわち、１つ目のジョブのデータと２つ目のジョブのデータとは反対方向に流れるため、競合リンクが発生しない。また、破線矢印と二点鎖線矢印とは反対方向を向く。すなわち、３つ目のジョブのデータと４つ目のジョブのデータとは反対方向に流れるため、競合リンクが発生しない。さらに、３つ目のジョブ及び４つ目のジョブのデータは、１つ目のジョブのデータ及び２つ目のジョブのデータが流れる経路を流れないため、それらの間で競合リンクは発生しない。
【０１１６】
したがって、４つのジョブがある場合であっても、以上に説明したようにジョブを割り当てれば競合リンクの発生を抑制することができる。
【実施例３】
【０１１７】
次に、実施例３について説明する。本実施例に係る管理装置１０は、多層フルメッシュトポロジを構成するネットワークにおいてリングアルゴリズムを用いた集合通信を行うジョブをサーバ１に割り当てる。
【０１１８】
図２０は、多層フルメッシュトポロジの概念図である。多層フルメッシュトポロジを用いたネットワークは、フルメッシュトポロジを用いたネットワークが多層化されたネットワークである。
【０１１９】
ネットワーク３０１〜３０３は、多層フルメッシュトポロジの各層を形成するフルメッシュトポロジを用いたネットワークである。そして、スイッチ２は、各層のフルメッシュトポロジを用いたネットワークを構成する。スイッチ２は、リーフスイッチ（Leaf  Switch）と呼ばれる場合がある。スイッチ５は、各層を接続するスイッチである。スイッチ５は、スパインスイッチ（Spine  Switch）と呼ばれる場合がある。
【０１２０】
この場合、管理装置１０は、各層のネットワーク３０１〜３０３毎に、サーバ１へのジョブの割当をおこなう。この場合、管理装置１０は、各層毎にジョブの割当を行うため、上記実施例と同様にジョブの割当を行うことで、異なるジョブが同じ通信経路にデータを流す場合に、データの送信方向を逆向きにすることができる。
【０１２１】
以上に説明したように、本実施例に係る管理装置は、多層フルメッシュトポロジを用いたネットワークにおける競合リンクを軽減することができる。
【０１２２】
また、以上では、ジョブが重なる場合に、最初に割り当てるジョブの処理をグローバル番号の昇順の各サーバ１が順番に処理を行い、次に割り当てるジョブの処理をグローバル番号の降順の各サーバ１が順番に処理を行うように設定した。しかし、一方のジョブを処理するサーバ１のグローバル番号の順番が昇順で、他方のジョブを処理するサーバ１のグローバル番号の順番が降順であればよい。すなわち、最初に割り当てるジョブの処理をグローバル番号の降順の各サーバ１が順番に処理を行い、次に割り当てるジョブの処理をグローバル番号の昇順の各サーバ１が順番に処理を行うように設定してもよい。
【０１２３】
（ハードウェア構成）
図２１は、ハードウェア構成図である。ノード９０は、例えば、サーバ１及び管理装置１０を実現する。
【０１２４】
ノード９０は、ＣＰＵ９１、メモリ９２及びＮＩＣ（Network  Interface  Card）９３を有する。ノード９０により管理装置１０を実現する場合、ＮＩＣ９３は、サーバ１との通信のための通信インタフェースとなる。
【０１２５】
また、メモリ９２は、図３及び１６に例示した記憶部１４の機能を実現する。さらに、メモリ９２は、図３及び１６に例示した情報取得部１１、識別番号設定部１２、管理表作成部１３及びジョブ割当部１５の機能を実現するためのプログラムを含む各種プログラムを格納する。
【０１２６】
ＣＰＵ９１は、メモリ９２から各種プログラムを読み出し、メモリ９２上に展開して実行する。これにより、ＣＰＵ９１は、図３及び１６に例示した情報取得部１１、識別番号設定部１２、管理表作成部１３及びジョブ割当部１５の機能を実現する。
【符号の説明】
【０１２７】
１  サーバ
２  スイッチ
３  管理用ネットワーク
４  計算用ネットワーク
５  スイッチ
１０  管理装置
１１  情報取得部
１２  識別番号設定部
１３  管理表作成部
１４  記憶部
１５  ジョブ割当部
１０１  ジョブスケジューラコントローラ
１０２  ジョブスケジューラデーモン
１０３  ユーザジョブ
１４０  割当管理表
１４１  ホストリスト
１５１  第１割当部  
１５２  第２割当部
１５３  第３割当部
【図１】
2019020852.tif 000003
【図２】
2019020852.tif 000004
【図３】
2019020852.tif 000005
【図４】
2019020852.tif 000006
【図５】
2019020852.tif 000007
【図６】
2019020852.tif 000008
【図７】
2019020852.tif 000009
【図８】
2019020852.tif 000010
【図９】
2019020852.tif 000011
【図１０】
2019020852.tif 000012
【図１１】
2019020852.tif 000013
【図１２】
2019020852.tif 000014
【図１３】
2019020852.tif 000015
【図１４】
2019020852.tif 000016
【図１５】
2019020852.tif 000017
【図１６】
2019020852.tif 000018
【図１７】
2019020852.tif 000019
【図１８】
2019020852.tif 000020
【図１９】
2019020852.tif 000021
【図２０】
2019020852.tif 000022
【図２１】
2019020852.tif 000023