(57)【特許請求の範囲】
【請求項１】
複数の計算ノード間のデータを調停して転送するデータ転送装置において、
前記複数の計算ノードからデータを受信する受信部と、
前記受信部が受信した各データから、前記データが前記受信部に受信されるまでに前記調停の相手になった他のデータの累積数を取得する取得部と、
前記取得部が各データから取得した累積数を、前記受信部が受信したデータの数に基づいてそれぞれ更新する更新部と、
前記更新部が更新した累積数に基づいて、前記受信したデータを調停して、計算ノードへ送信するデータを選択する調停部と、
前記調停部が選択したデータに、前記更新部が更新した累積数を格納する格納部と、
前記格納部が累積数を格納したデータを計算ノードへ送信する送信部と、
を有することを特徴とするデータ転送装置。 
【請求項２】
前記データ転送装置において、
前記更新部は、前記取得部が各データから取得した累積数に、前記受信部が受信したデータの数から１を減算した値を加算した値を新たな累積数とすることを特徴とする請求項１に記載のデータ転送装置。 
【請求項３】
前記データ転送装置において、
前記調停部は、前記更新部が更新した各データの累積数を比較し、前記受信部が受信したデータのうち、累積数が最も大きいデータを前記計算ノードへ送信するデータとして選択することを特徴とする請求項１または２記載のデータ転送装置。 
【請求項４】
前記データ転送装置において、
前記調停部は、前回の調停の処理において選択しなかったデータについて、前記更新部が更新した累積数に、当該データを選択しなかった回数を加算した値に基づいて、前記計算ノードへ送信するデータを選択することを特徴とする請求項１〜３のいずれか１つに記載のデータ転送装置。 
【請求項５】
前記データ転送装置はさらに、
計算ノードから受信する複数の入力ポートと、
前記複数の入力ポート毎に、データの累積数を表示する表示部を有することを特徴とする請求項１〜４のいずれか１つに記載のデータ転送装置。 
【請求項６】
情報を処理する複数の計算ノードを有する並列計算機システムであって、
各計算ノードは、
演算を実行する演算処理装置と、
前記演算処理装置又は他の計算ノードから受信したデータを転送する転送装置とを有し、
前記転送装置は、
前記複数の計算ノードからデータを受信する受信部と、
前記受信部が受信した各データから、各前記データが前記受信部に受信されるまでに調停の相手になった他のデータの累積数を取得する取得部と、
前記取得部が各データから取得した累積数を、前記受信部が受信したデータの数に基づいてそれぞれ更新する更新部と、
前記更新部が更新した累積数に基づいて、前記受信したデータを調停する調停部と、
前記調停部での調停の結果選択されたデータに、前記更新部が更新した累積数を格納する格納部と、
前記格納部が累積数を格納したデータを他の計算ノードへ送信する送信部と、
を有することを特徴とする並列計算機システム。 
【請求項７】
複数の計算ノード間の複数のデータを調停して転送するデータ転送装置の制御方法において、
前記データ転送装置が有する受信部が、前記複数の計算ノードからデータを受信し、
前記データ転送装置が有する取得部が、前記受信部が計算ノードから受信したデータ毎に、前記データが前記受信部に受信されるまでに前記調停の相手になった他のデータの累積数を取得し、
前記データ転送装置が有する更新部が、前記取得部が各データから取得した累積数を、計算ノードから受信したデータの数に基づいてそれぞれ更新し、
前記データ転送装置が有する調停部が、前記更新部が更新した累積数に基づいて、前記受信した複数のデータを調停して、送信するデータを選択し、
前記データ転送装置が有する格納部が、前記調停部が選択したデータに、前記更新部が更新した累積数を格納し、
前記データ転送装置が有する送信部が、前記格納部が累積数を格納したデータを他の計算ノードへ送信することを特徴とするデータ転送装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置、並列計算機システムおよびデータ転送装置の制御方法に関する。
【背景技術】
【０００２】
従来、複数の計算ノードを有する並列計算機システムが知られている。このような並列計算機システムの一例として、複数の計算ノード間における通信を中継するルータが各計算ノードに設置された並列計算機システムが知られている。
【０００３】
図１３は、並列計算機システムが有する複数の計算ノードの一例を説明するための図である。図１３に示す例では、並列計算機システム５０は、複数の計算ノード６０〜６０ｅを有する。各計算ノード６０〜６０ｅは、それぞれＣＰＵ（Central  Processing  Unit）６１〜６１ｅ、ＮＩＣ（Network  Interface    Controller）６２〜６２ｅ、ルータ６３〜６３ｅを有する。なお、各計算ノード６０ａ〜６０ｅは、計算ノード６０と同様の処理を実行するものとし、以下の説明を省略する。
【０００４】
ＣＰＵ６１は、自身に割当てられたプログラムを実行するとともに、他のＣＰＵ６１ａ〜６１ｅへ送信する情報をＮＩＣ６２に送信する。ＮＩＣ６２は、ＣＰＵ６１が他のＣＰＵ６１ａ〜６１ｅへ送信する情報をパケット化してルータ６３に伝達する。ルータ６３は、ＮＩＣ６２からパケットを受信する入力ポートとパケットをルータ６３ａに送信する出力ポートとを有し、入力ポートを介してＮＩＣ６２から受信したパケットを、出力ポートを介してルータ６３ａに転送する。
【０００５】
また、ルータ６３は、図１３中（Ａ）に示すように、計算ノード６０〜６０ｅ以外の計算ノードからパケットを受信する複数の入力ポートを有する。そして、ルータ６３は、計算ノード６０〜６０ｅ以外の計算ノードおよびＮＩＣ６２からパケットを受信する複数の入力ポートから送信先が同じパケットを同時に受信した場合には、入力ポート間における調停を行い、受信した各パケットを順次ルータ６３ａへ送信する。
【０００６】
ここで、並列計算機システム５０は、各ルータ６３〜６３ｅがそれぞれラウンドロビン方式でポート間の調停を行った場合には、並列計算機システム５０全体から見た各ポート間の優先度を見出すことができないので、各入力ポートを公平に勝たせようとする。このため、並列計算機システム５０は、各計算ノード６０〜６０ｅ間の通信に対して、帯域を均等に割当てることは困難である。
【０００７】
一例として、ＣＰＵ６１〜６１ｄからＣＰＵ６１ｅへパケットが送信されると共に、図１３（Ａ）〜（Ｅ）に示すように、各ルータ６３〜６３ｄにおいて、常時２つの受信ポートにパケットが合流する例について説明する。このような場合には、各ルータ６３〜６３ｄは、４つの受信ポートから受信したパケットをラウンドロビン方式で送信するので、自身が有する出力ポートの帯域を自身が有する４つの受信ポートに対して均等に割当てる。
【０００８】
このため、並列計算機システム５０は、計算ノード６０ｄと計算ノード６０ｅとの間における通信に対しては、全帯域の「１／４」を割当てることができる。しかし、並列計算機システム５０は、計算ノード６０と計算ノード６０ｅとの間における通信に対しては、各ルータ６３〜６３ｄが各出力ポートにおける帯域の「１／４」ずつを割当てるため、全帯域の「（１／４）５」程度しか割当てることができない。
【０００９】
そこで、パケットが送信されてからの経過時間や、パケットを中継したルータの数をａｇｅ情報としてパケットのヘッダに格納し、各パケットのヘッダに格納されたａｇｅ情報に基づいて調停を行う技術が知られている。図１４は、ａｇｅ情報を付与したパケットを説明するための図である。図１４中（Ａ）に示すように、送信されるデータのヘッダ部分には、ａｇｅ情報が格納されており、７ｂｉｔの「ａｇｅ」が格納されるフィールド、１ｂｉｔの「ｃａｒｒｙ」が格納されるフィールド、１ｂｉｔの「ｅｐｏｃｈ」が格納されるフィールドを有する。
【００１０】
ここで「ａｇｅ」には、パケットが送信されてから経過した時間や、パケットを中継したルータの数が格納される。また、「ｃａｒｒｙ」には、キャリーアウトビットが格納される。また、「ｅｐｏｃｈ」には、ａｇｅ情報を更新する際に照会する情報が格納される。なお、１ｂｉｔの「ｕｎｕｓｅｄ」は、未使用領域である。
【００１１】
また、並列計算機システム５０は、パケットに格納されたａｇｅ情報に基づいて調停を行う場合には、並列計算機システム５０が有する複数の計算ノード間を接続するネットワークのトポロジや、各計算ノード６０〜６０ｅが実行するジョブの規模等に応じて、ａｇｅ情報の制御パラメータがあらかじめ設定される。例えば、「ａｇｅ」に格納された値を加算する時間間隔を示す「ＡＧＥ＿ＣＬＯＣＫ＿ＰＥＲＩＯＤ」が制御パラメータとして設定される。また、パケットがルータを１回ホップした際に加算されるａｇｅの値を示す「ＲＥＱ＿ＡＧＥ＿ＢＩＡＳ」、「ＲＳＰ＿ＡＧＥ＿ＢＩＡＳ」が制御パラメータとして設定される。また、各ルータ６３〜６３ｅがラウンドロビン方式を用いて調停を行う比率とａｇｅ情報を用いて調停を行う比率とを示す「ＡＧＥ＿ＲＲ＿ＳＥＬＥＣＴ」が制御パラメータとして設定される。
【００１２】
各ルータ６３〜６３ｅは、ａｇｅ情報に基づいて調停を行う場合には、設定された制御パラメータに基づいて受信したパケットのａｇｅ情報を更新するとともに、更新した「ａｇｅ」を比較する。そして、各ルータ６３〜６３ｅは、「ａｇｅ」に格納された値が大きいパケットから順番に次のルータへ送信する。このようなルータ６３〜６３ｅを有する並列計算機システム５０は、送信元の計算ノードが送信してから経過した時間や移動距離が多いパケットを優先的に送信するので、通信を行う計算ノード間の距離が長いほど多くの帯域を割当てる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開平０６−１８７３１１号公報
【特許文献２】特開２０１０−０３９６２５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、上述したａｇｅ情報を用いて調停を行う技術では、計算ノードがパケットを送信してから経過した時間やパケットを中継したルータの数等のレイテンシを示す情報に基づいて帯域を分配する。このため、各ルータ６３〜６３ｅは、各計算ノード間における通信に対して帯域を適切に分配することができないという問題があった。
【００１５】
つまり、入力ポート間の競合を調停する処理は、パケットのレイテンシを調整する処理とは異なり、各計算ノード６０〜６０ｅ間の通信に対して、並列計算機システム５０が有する帯域を分配する処理である。このため、帯域の情報とは本質的に異なるレイテンシの情報を用いて、各計算ノード６０〜６０ｅ間における通信に帯域を適切に分配することができない。
【００１６】
また、並列計算機システム５０は、各計算ノード６０〜６０ｅが多対多で通信する際に、レイテンシを示す情報を用いて調停を行った場合には、各パケットを中継するルータの数を均一化することができない。つまり、並列計算機システム５０は、各パケットのレイテンシのばらつきを本質的に均一化することができないため、各計算ノード６０〜６０ｅ間における通信に帯域を適切に分配することができない。
【００１７】
さらに、各ルータ６３〜６３ｅは、パケットを送信してから経過した時間やパケットを中継したルータの数を「ａｇｅ」に格納するので、「ａｇｅ」を格納するフィールドのｂｉｔ幅が大きくなる。このため、データを格納するフィールドのｂｉｔ幅が小さくなり、各計算ノード間の通信において、データの転送効率が低下してしまうという問題があった。
【００１８】
本願に開示の技術は、上述した問題に鑑みてなされたものであって、データの転送効率を低下させることなく各計算ノード間における通信に対して帯域を適切に分配する。
【課題を解決するための手段】
【００１９】
１つの側面では、複数の計算ノード間のデータを調停して転送するデータ転送装置である。このようなデータ転送装置は、複数の計算ノードからデータを受信し、受信した各データから、データが受信されるまでに調停の相手になった他のデータの累積数を取得する。また、データ転送装置は、各データから取得した累積数を、受信したデータの数に基づいてそれぞれ更新する。そして、データ転送装置は、更新した累積数に基づいて、受信したデータを調停して、計算ノードへ送信するデータを選択する。また、データ転送装置は、選択したデータに、更新した累積数を格納し、累積数を格納したデータを計算ノードへ送信する。
【発明の効果】
【００２０】
１つの側面では、データの転送効率を低下させることなく各計算ノード間における通信に対して帯域を適切に分配する。
【図面の簡単な説明】
【００２１】
【図１】図１は、実施例１に係る並列計算機システムの一例を説明するための図である。
【図２】図２は、実施例１に係る計算ノード間において送受信されるパケットの一例を説明するための図である。
【図３】図３は、実施例１に係るルータの一例を説明するための図である。
【図４】図４は、ポート２に関わる調停回路の一例を説明するための図である。
【図５】図５は、実施例１に関わる並列計算機システムが帯域を割当てる処理の一例を説明するための図である。
【図６】図６は、実施例１に関わる計算ノードの適用例を説明するための図である。
【図７】図７は、メッシュ網によって接続した計算ノードを有する並列計算機システムを説明するための図である。
【図８】図８は、パケットを送信する計算ノードとパケットを受信する計算ノードとを説明するための図である。
【図９】図９は、パケットの送信経路の一例を説明するための図である。
【図１０】図１０は、パケットの送信経路の木構造を説明するための図である。
【図１１】図１１は、各経路を流れるパケットに格納される合流数の値を説明するための図である。
【図１２】図１２は、実施例１に関わるルータが調停を行う処理の一例を説明するためのフローチャートである。
【図１３】図１３は、並列計算機システムが有する複数の計算ノードの一例を説明するための図である。
【図１４】図１４は、ａｇｅ情報を付与したパケットを説明するための図である。
【発明を実施するための形態】
【００２２】
以下に添付図面を参照して本願に係るデータ転送装置、並列計算機システムおよびデータ転送装置の制御方法について説明する。
【実施例１】
【００２３】
以下の実施例１では、図１を用いて、並列計算機システム１の一例を説明する。図１は、実施例１に係る並列計算機システムの一例を説明するための図である。なお、並列計算機システム１は、少なくともルータを有する複数の計算ノードを有し、各計算ノードが相互に通信を行う並列計算機システムである。
【００２４】
図１に示すように、並列計算機システム１は、複数の計算ノード２〜２ｅを有する。なお、図１では省略したが、並列計算機システム１は、計算ノード２〜２ｅ以外にも、複数の計算ノードを有するものとする。また、計算ノード２ａ〜２ｅは、計算ノード２と同様の処理を実行するものとし、以下の説明を省略する。
【００２５】
計算ノード２は、情報を処理する情報処理装置である。具体的には、計算ノード２は、ＣＰＵ３、ＮＩＣ４、ルータ１０を有する。ＣＰＵ３は、演算を実行する演算処理装置である。例えば、ＣＰＵ３は、計算ノード２に割当てられたタスクの演算処理を実行する。また、ＣＰＵ３は、他の計算ノード２ａ〜２ｅが有するＣＰＵ３ａ〜ＣＰＵ３ｅに対してデータを送信する場合には、ＮＩＣ４に対して、送信先のＣＰＵを示す識別子と送信対象のデータとを送信する。
【００２６】
ＮＩＣ４は、ＣＰＵ３から受信したデータをパケット化し、パケット化したデータをルータ１０に送信する。図２は、実施例１に係る計算ノード間において送受信されるパケットの一例を説明するための図である。図２に示す例では、パケットは、図２中（Ａ）で示すヘッダ部分と、図２中（Ｂ）で示すデータ部分とを有する。なお、パケットの先頭には、パケットの開始符号（Ｓ）が付加され、パケットの終端には、パケットの終端符号（Ｅ）が付加される。なお、メモリ等の他のＩｎｔｅｒｆａｃｅ機能と共に、ＮＩＣ４の機能を１チップに集積することや、ＣＰＵ３の内部に同等の機能を発揮する処理装置を設置することで、ＮＩＣ４の機能を発揮させるようにしてもよい。
【００２７】
図２中（Ａ）で示すように、パケットのヘッダ部分は、パケットの宛先やパケットのサイズを示す識別情報を格納する領域と、このパケットが参加した調停処理において、このパケットと競合した他のパケットの累積数である合流数を格納する領域を有する。また、図２中（Ａ）で示すように、パケットのヘッダ部分は、合流数を用いて調停を行うか否かを指定するフラグを格納する領域を有する。また、図２中（Ｂ）で示すように、パケットのデータ部分には、ＣＰＵ３から他のＣＰＵ３ａ〜３ｅへ送信されるデータを格納する領域が設定される。
【００２８】
例えば、ＮＩＣ４は、ＣＰＵ３からＣＰＵ３ｅへの送信対象のデータを受信した場合には、パケットのデータ部分に受信したデータを格納するとともに、パケットの宛先をＣＰＵ３ｅとした識別情報をヘッダに格納する。また、ＮＩＣ４は、合流数の初期値「１」を格納するとともに、合流数を用いて調停を行う事を指定するフラグを格納する。その後、ＮＩＣ４は、各情報を格納したパケットをルータ１０へ送信する。
【００２９】
図１に戻って、ルータ１０は、ＮＩＣ４又は図示しない計算ノードからパケットを受信した場合には、受信したパケットをルータ１０ａへ転送する転送装置である。具体的には、ルータ１０は、複数のパケットを受信した場合には、各パケットに格納されている合流数を取得し、受信したパケットの数に応じて合流数を更新する。そして、ルータ１０は、更新した合流数に基づいて、受信した複数のパケットからルータ１０ａへ送信するパケットを選択する。その後、ルータ１０は、選択したパケットに更新した合流数を格納し、更新した合流数を格納したパケットをルータ１０ａへ送信する。
【００３０】
以下、図面を用いて、ルータ１０が実行する処理の具体例について説明する。図３は、実施例１に係るルータの一例を説明するための図である。図３に示す例では、ルータ１０は、ポート０受信処理部１１、ポート１受信処理部１２、ポート２受信処理部１３、ポート３受信処理部１４、ポート０送信処理部１５、ポート１送信処理部１６、ポート２送信処理部１７、ポート３送信処理部１８を有する。また、ルータ１０は、調停回路２０、データパススイッチ３０を有する。
【００３１】
なお、図３中の太線による矢印は、パケットの経路を示し、図３中の細線による矢印は、調停回路２０の制御線によるデータの経路を示す。また、ポート０受信処理部１１とポート０送信処理部１５は、同一のポート０に係る受信処理部１１と送信処理部１５であるものとする。また、ポート１受信処理部１２とポート１送信処理部１６とは、同一のポート１に係る受信処理部１２と送信処理部１６であるものとする。また、ポート２受信処理部１３とポート２送信処理部１７は、同一のポート２に係る受信処理部１３と送信処理部１７であるものとする。また、ポート３受信処理部１４とポート３送信処理部１８とは、同一のポート３に係る受信処理部１４と送信処理部１８であるものとする。
【００３２】
なお、以下の説明においては、ポート０は、ＮＩＣ４と、ポート１は、計算ノード２ａと、ポート３およびポート４は、計算ノード２と隣接する他の計算ノードと物理的なリンクにより接続されているものとする。また、ポート１受信処理部１２、ポート２受信処理部１３、ポート３受信処理部１４が実行する処理については、ポート０受信処理部１１が実行する処理と同様の処理を実行するものとし、以下の説明を省略する。また、ポート１送信処理部１６、ポート２送信処理部１７、ポート３送信処理部１８が実行する処理は、ポート０送信処理部１５が実行する処理と同様の処理であるものとして、以下の説明を省略する。
【００３３】
ポート０受信処理部１１は、パケットを受信した場合には、受信したパケットの送信先を判別する。そして、ポート０受信処理部１１は、受信したパケットの送信先と対応するポートの送信処理部への送信要求を調停回路２０に送信する。また、ポート０受信処理部１１は、受信したパケットのヘッダ部分から合流数を取得し、取得した合流数を調停回路２０へ送信する。また、ポート０受信処理部１１は、調停回路２０から送信許可の通知を受け付けた場合には、受信したパケットをデータパススイッチ３０に送信する。
【００３４】
例えば、ポート０受信処理部１１は、計算ノード２を宛先とするパケットを受信した場合には、ポート０への送信要求を調停回路２０に送信する。また、ポート０受信処理部１１は、計算ノード２ａ〜２ｅを宛先とするパケットを受信した場合には、ポート１への送信要求を調停回路２０に送信する。
【００３５】
ポート０送信処理部１５は、後述する調停回路２０によって、計算ノード２を宛先とするパケットが選択された場合には、データパススイッチ３０を介してパケットを受信する。このような場合には、ポート０送信処理部１５は、ＮＩＣ４に対して受信したパケットを送信する。また、ポート１送信処理部１６も同様に、計算ノード２ａ〜２ｅを宛先とするパケット、すなわち、計算ノード２ａに送信されるパケットをデータパススイッチ３０を介して受信した場合には、受信したパケットを計算ノード２ａに送信する。
【００３６】
また、各ポートの送信処理部１５〜１８は、データパススイッチ３０を介してパケットを受信する。また、各ポートの送信処理部１５〜１８は、調停回路２０から合流数を受信する。そして、各ポートの送信処理部１５〜１８は、調停回路２０から受信した合流数を新たな合流数としてデータパススイッチ３０から受信したパケットのヘッダに格納する。その後、各ポートの送信処理部１５〜１８は、新たな合流数を格納したパケットを自身と接続されたＮＩＣ４または計算ノードへ送信する。
【００３７】
なお、パケットを送信するポートの選択は、各パケットの宛先に依存する。例えば、固定ルーティングの場合には、パケットヘッダが持つ宛先情報によって送信するポートは、一意に決まる。また、Ａｄａｐｔｉｖｅルーティングの場合には、採用されたアルゴリズムに従って、パケットを送信するポートが決まる。
【００３８】
ここで、複数のポートからパケットを受信した際に、受信した各パケットの宛先から決まる送信ポートが同じであった場合には、この送信ポートにける送信処理部にて競合が発生する。このような場合には、以下に説明する調停回路２０によって、送信されるパケットが選択される。その後、選択されたパケットを受信したポートの受信処理部は、パケットをデータパススイッチ３を介して、送信ポートの送信処理部に送信する。そして、パケットを受信した送信処理部は、受信したパケットの合流数を更新した後に、自身と接続されたＮＩＣ４または計算ノードにパケットを送信する。
【００３９】
例えば、ポート０受信処理部１１がポート１送信処理部１６を介して送信するパケットを受信し、ポート１受信処理部１２がポート２送信処理部１７を介して送信するパケットを受信し、ポート２受信処理部１３がポート１送信処理部１６を介して送信するパケットを受信した場合には、ルータ１０は、以下の処理を実行する。
【００４０】
すなわち、ルータ１０は、ポート０受信処理部１１が受信したパケットとポート２受信処理部１３が受信したパケットとの調停を行う。ここで、ルータ１０は、ポート０受信処理部１１が受信したパケットを調停回路２０が選択した場合には、ポート０受信処理部１１が受信したパケットをポート１送信処理部１６を介して送信するとともに、ポート２受信処理部１３がポート１送信処理部１６を介してパケットを送信する。つまり、受信した複数のパケットについて、送信を行うポートのリソース（つまり、送信処理部１５〜１８）が競合していない場合には、受信した複数のパケットの転送は同時並行で行われる。
【００４１】
調停回路２０は、各受信処理部１１〜１４から受信した送信要求に基づいて、各ポートについて競合が発生しているか否かを判別し、いずれかのポートにおいて競合が発生していると判別した場合には、競合が発生しているポートについて以下の処理を実行する。すなわち、調停回路２０は、各受信処理部１１〜１４から受信した合流数を、各受信処理部１１〜１４が受信したパケットの数に基づいてそれぞれ更新する。そして、調停回路２０は、更新した合流数に基づいて、パケットを送信するポートについての調停を行う。その後、調停回路２０は、調停に勝利したパケットを受信した受信処理部に対して送信許可を送信するとともに、パケットを送信するポートの送信処理部に対して、更新した合流するを送信する。
【００４２】
一方、調停回路２０は、競合が発生していないポートについては、以下の処理を実行する。すなわち、調停回路２０は、競合が発生していないポートを用いて送信するパケットを受信した受信処理部に対して送信許可を送信する。
【００４３】
以下、図を用いて、ルータ１０が受信したパケットの調停を行い、ルータ１０ａへ送信するパケットを調停回路２０が選択する処理の一例について説明する。図４は、ポート２に関わる調停回路の一例を説明するための図である。なお、図４に示す調停回路２０は、図３に示す調停回路２０のうち、ポート２についての調停を行う回路部分を抜き出したものである。
【００４４】
すなわち、図３に示す調停回路２０は、各ポート０〜３についての調停を行う回路であり、図４に示すポート２についての調停を行う回路部分と同様の回路を、各ポート０、１、３についての調停を行う回路部分として有する。なお、以下の説明においては、ポート０受信処理部１１とポート１受信処理部１２とがポート２送信処理部１７を介して送信するパケットを受信した際に調停回路２０が実行する処理の一例を説明するものとする。これに合わせて、図４においては、ポート２受信処理部１３、ポート３受信処理部１４、ポート０送信処理部１５、ポート１送信処理部１６、ポート３送信処理部１８については、記載を省略した。
【００４５】
図４に示す例では、調停回路２０は、合流数更新部２１、合流数更新部２４、衝突カウンタ２７、調停部２８、選択部２９を有する。合流数更新部２１は、ポート０受信処理部１１と対応付けられており、ポート０受信処理部１１が受信したパケットから取得された合流数を格納するレジスタＡ２２とレジスタＢ２３を有する。具体的には、合流数更新部２１は、ポート０受信処理部１１から合流数を受信した場合には、受信した合流数をレジスタＡ２２およびレジスタＢ２３に格納する。
【００４６】
また、合流数更新部２１は、衝突カウンタ２７から衝突数を受信した場合には、レジスタＡ２２およびレジスタＢ２３に格納された値に、受信した衝突数から１を減算した値を加算する。また、合流数更新部２１は、調停部２８から調停負けを示す情報を受信した場合には、レジスタＢ２３に格納された値に１を加算する。また、合流数更新部２１は、調停部２８から送信許可を受信した場合には、レジスタＡ２２に格納されている値を選択部２９へ送信する。
【００４７】
合流数更新部２４は、ポート１受信処理部１２と対応付けられており、ポート１受信処理部１２から合流数を受信した場合には、受信した合流数をレジスタＡ２５およびレジスタＢ２６に格納する。また、合流数更新部２４は、衝突カウンタ２７から衝突数を受信した場合には、レジスタＢ２６に格納された値に、受信した衝突数から１を減算した値を加算する。また、合流数更新部２４は、調停部２８から調停負けを示す情報を受信した場合には、レジスタＢ２６に格納された値に１を加算する。また、合流数更新部２４は、調停部２８から送信許可を受信した場合には、レジスタＡ２５に格納されている値を選択部２９へ送信する。
【００４８】
衝突カウンタ２７は、ポート０受信処理部１１およびポート１受信処理部１２から送信要求を受信した場合には、受信した送信要求の数を計数し、計数した数を衝突数として合流数更新部２１、２４に送信する。また、衝突カウンタ２７は複数の受信処理部、すなわちポート０受信処理部１１およびポート１受信処理部１２から送信要求を受信した場合には、調停部２８に調停の実行を示す情報を送信する。
【００４９】
調停部２８は、調停の実行を示す情報を受信した場合には、合流数更新部２１のレジスタＢ２３に格納されている値と合流数更新部２４のレジスタＢ２６に格納されている値とを取得する。そして、調停部２８は、取得した値を比較し、最も大きい値が格納されていた合流数更新部と、この合流数更新部に対応付けられた受信処理部とに送信許可を送信するとともに、これ以外の合流数更新部に調停負けを示す情報を送信する。
【００５０】
また、調停部２８は、取得した値のうち、最も大きい値が複数存在する場合には、最も大きい値が格納されていた合流数更新部のうち、いずれかの合流数更新部をラウンドロビン方式で選択する。そして、調停部２８は、選択した合流数更新部と、選択した合流数更新部に対応付けられた受信処理部とに送信許可を送信する。
【００５１】
例えば、調停部２８は、レジスタＢ２３に格納されていた値がレジスタＢ２６に格納されていた値よりも大きい場合には、ポート０受信処理部１１と合流数更新部２１とに送信許可を送信するとともに、合流数更新部２４に調停負けを示す情報を送信する。また、調停部２８は、レジスタＢ２６に格納されていた値がレジスタＢ２３に格納されていた値よりも大きい場合には、ポート１受信処理部１２と合流数更新部２４とに送信許可を送信するとともに、合流数更新部２１に調停負けを示す情報を送信する。
【００５２】
ここで、各合流数更新部２１、２４は、調停部２８から調停負けを示す情報を受信した場合には、各レジスタＢ２３、２６に格納された値に１を加算する。そして、調停部２８は、各レジスタＢ２３、２６に格納された値に基づいて、ルータ１０ａへ送信するパケットを選択する。つまり、調停部２８は、受信したパケットに格納されていた合流数を受信したパケットの数に応じて更新した値に、パケットが調停負けした回数を加算した値に基づいて、ルータ１０ａへ送信するパケットを選択する。この結果、調停部２８は、調停処理におけるデッドロックを回避することができる。
【００５３】
なお、調停部２８は、送信するパケットを選択した場合には、選択部２９と図３に例示したデータパススイッチ３０に選択したパケットを受信したポートを示す情報を送信する。
【００５４】
選択部２９は、調停部２８からポートを示す情報を受信した場合には、受信した情報が示すポートと対応付けられた合流数更新部から送信された合流数をポート２送信処理部１７へ送信する。つまり、選択部２９は、図４に示す調停部２８がポート２についての調停部であるため、調停部２８から受信した情報が示すポートが受信したパケットから取得され、競合によって更新された合流数を、調停部２８に関わるポート２の送信処理部１７へ送信する。
【００５５】
例えば、選択部２９は、調停部２８からポート０を示す情報を受信した場合には、合流数更新部２１から送信された合流数をポート２送信処理部１７へ伝達する。また、選択部２９は、調停部２８からポート１を示す情報を受信した場合には、合流数更新部２４から送信された合流数をポート２送信処理部１７へ送信する。
【００５６】
なお、上述した調停処理は、１つのパケットについての調停を行うものであっても良い。つまり、調停部２８は、一方の合計数更新部が有するレジスタＡおよびレジスタＢに値が格納されていない場合には、「０」が格納されているものとみなして調停を行う。このような場合には、調停回路２０は、競合が発生していない場合にも、パケットを送信するポートの送信処理部に、パケットを適切に送信するので実装が容易になる。また、調停回路２０は、合流数更新部２１、２４から出力されるレジスタＡ２２、２４の値について、勝者のパケットの合流数のみを出力し、それ以外は「０」値を出力するようにした場合には、選択部２９は不要である。
【００５７】
このように、調停回路２０は、各ポート０、１が受信したパケットに格納されていた合流数を取得し、取得した合流数を受信したパケットの数に応じて更新する。そして、調停回路２０は、更新した合流数が最も大きいパケットをルータ１０ａへ送信するパケットとして選択する。このため、調停回路２０は、各計算ノード２〜２ｅ間における通信に対して、均等に帯域を割当てることができる。
【００５８】
図３に戻って、データパススイッチ３０は、調停回路２０のうち、図４に示したポート２に関わる回路の調停部２８からポートを示す情報を受信した場合には、受信した情報が示すポートの受信処理部から受信したパケットを、ポート２送信処理部１７へ送信する。例えば、データパススイッチ３０は、調停部２８からポート０を示す情報を受信した場合には、ポート０受信処理部１１から受信したパケットをポート２送信処理部１７へ送信する。また、データパススイッチ３０は、調停回路２０のうち、ポート３に関わる回路の調停部からポート０を示す情報を受信した場合には、ポート０受信処理部１１から受信したパケットをポート３送信処理部１８へ送信する。
【００５９】
なお、ルータ１０は、ルータ１０ａのリソースの枯渇でパケットを受け入れられない場合等、パケットを送信できない場合には、調停を行わず、各パケットの合流数の更新もおこなわない。このように、送信先がパケットを受け入れられないのは、送信先が帯域を複数の通信で共有している合流点であるからである。なお、このような状態は、ａｄａｐｔｉｖｅ  ｒｏｕｔｉｎｇなどの処理を用いることによって解消することができる。
【００６０】
例えば、各ＣＰＵ３〜３ｅ、各受信処理部１１〜１４、各送信処理部１５〜１８、調停回路２０、各合流数更新部２１、２４、衝突カウンタ２７、調停部２８は、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【００６１】
また、レジスタＡ２２、レジスタＡ２５、レジスタＢ２３、レジスタＢ２６とは、ＲＡＭ（Random  Access  Memory）やフラッシュメモリ（flash  memory）などの半導体メモリ素子である。また、選択部２９、データパススイッチ３０とは、調停部２８から通知された情報により、パケットの出力先を変更するスイッチである。
【００６２】
上述したように、ルータ１０は、パケットを受信した場合には、各パケットが参加した調停処理において各パケットと競合した他のパケットの数の累積数である合流数を取得する。また、ルータ１０は、取得した合流数を受信したパケットの数、つまり、調停において競合した他のパケットの数に基づいて更新する。
【００６３】
ここで、各パケットに格納された合流数は、パケットが競合した他のパケットの数の累積数であり、帯域を共有する通信がどれだけ重なっているかを示す値である。つまり、各パケットに格納された合流数は、帯域を共有する通信に対して割当てられた帯域と直接関与する情報である。このため、ルータ１０は、各パケットに格納された合流数に基づいて調停を行った場合には、帯域を示す情報に基づいて調停を行う事ができるので、各計算ノード２〜２ｅ間の通信に対して適切に帯域を割当てることができる。
【００６４】
一例として、図１に示す各計算ノード２〜２ｄが計算ノード２ｅに対してパケットを送信する例について説明する。例えば、各ルータ１０〜１０ｅが、従来と同様にラウンドロビン方式で受信したパケットの調停を行った場合には、全通信には、全帯域の「１／２」が割当てられる。また、計算ノード２ｃと計算ノード２ｅとの間の通信には、全帯域の「１／４」が割当てられ、計算ノード２ｂと計算ノード２ｅとの間の通信には、全帯域の「１／８」が割当てられる。
【００６５】
また、計算ノード２ａと計算ノード２ｅとの間の通信には、全帯域の「１／１６」が割当てられ、計算ノード２と計算ノード２ｅとの間の通信には、残りの「１／１６」の帯域が割当てられる。このように、並列計算機システム１は、各ルータ１０〜１０ｅがラウンドロビン方式でパケットの調停を行った場合には、パケットのホップ数が多い通信に対して少ない帯域しか割当てることができず、適切な帯域の割当を行っているとは言えない。なお、多くのポート間において送信先ポートが競合した場合には、各計算ノード２〜２ｅ間の通信に割当てられる帯域は、さらに絞られることになる。
【００６６】
ここで、各ルータ１０〜１０ｅが各パケットに格納された合流数が最も多いパケットを調停に勝利させた場合には、計算ノード２ｄと計算ノード２ｅ間の通信におけるパケットは、５回に１回の割合で調停に勝つことになる。このため、計算ノード２ｄと計算ノード２ｅ間の通信には、全帯域の「１／５」が割当てられる。また、計算ノード２ｃと計算ノード２ｅ間の通信におけるパケットは、４回に１回の割合で調停に勝つことになるため、残りの帯域「１−１／５＝４／５」の「１／４」が割当てられる。この結果、計算ノード２ｃと計算ノード２ｅ間の通信には、全帯域の「１／５」が割当てられる。
【００６７】
また、計算ノード２ｂと計算ノード２ｅ間の通信におけるパケットは、３回に１回の割合で調停に勝つことになるため、計算ノード２ｂと計算ノード２ｅ間の通信には、残りの帯域「１−２／５」の「１／３」である「１／５」が割当てられる。また、計算ノード２ａと計算ノード２ｅ間の通信におけるパケットは、２回に１回の割合で調停に勝つことになるため、計算ノード２ａと計算ノード２ｅ間の通信には、残りの帯域「１−３／５」の「１／２」である「１／５」が割当てられる。また、計算ノード２と計算ノード２ｅ間の通信には、残りの帯域「１／５」が割当てられる。つまり、並列計算機システム１は、合流数が最も多いパケットを調停に勝利させた場合には、各計算ノード間の通信に対して、均等に帯域を割当てることができる。
【００６８】
次に、並列計算機システム１が帯域を割当てる処理のシミュレーション結果について説明する。まず、図１に示す各計算ノード２〜２ｄが計算ノード２ｅにパケットを送信した際に、各計算ノード２〜２ｄと計算ノード２ｅとの間の通信に対して割当てられた帯域のシミュレーション結果について説明する。なお、このシミュレーションにおいては、転送に１〜３２サイクルを要するランダムなサイズを有する１００００個のパケットを各計算ノード２〜２ｄに対してランダムに割当て、各計算ノード２〜２ｄが自身に割当てられたパケットを計算ノード２ｅに対して送信した例をシミュレーションした。
【００６９】
このような条件の下、各ルータ１０〜１０ｄがラウンドロビン方式でパケットの調停を行った場合は、並列計算機システム１は、計算ノード２ｄと計算ノード２ｅとの通信に、全帯域のうち「５０．０％」の帯域を割当てた。また、並列計算機システム１は、計算ノード２ｃと計算ノード２ｅとの通信に「２５．０％」の帯域を割当て、計算ノード２ｂと計算ノード２ｅとの通信に「１２．８％」の帯域を割当てた。
【００７０】
また、並列計算機システム１は、計算ノード２ａと計算ノード２ｅとの通信に「６．１％」の帯域を割当て、計算ノード２と計算ノード２ｅとの通信に「６．５％」の帯域を割当てた。このように、各パケットが各計算ノード２ａ〜２ｄをホップするたびに１つのパケットが合流する際に各計算ノード２〜２ｄのルータ１０〜１０ｄがラウンドロビン方式でパケットの調停を行った場合には、各計算ノード２〜２ｄと計算ノード２ｅ間の通信におけるパケットのホップ数が「１」増えるたびに帯域が「１／２」に減少する。
【００７１】
一方、同様の条件の下、各ルータ１０〜１０ｄが合流数が最も多いパケットを調停に勝利させた場合には、並列計算機システム１は、計算ノード２ｄと計算ノード２ｅとの通信に、全帯域のうち「２０．２％」を割当てた。また、並列計算機システム１は、計算ノード２ｃと計算ノード２ｅとの通信に「１９．８％」の帯域を割当て、計算ノード２ｂと計算ノード２ｅとの通信に「１９．４％」の帯域を割当てた。また、並列計算機システム１は、計算ノード２ａと計算ノード２ｅとの通信に「２０．８％」の帯域を割当て、計算ノード２と計算ノード２ｅとの通信に「２０．１％」の帯域を割当てた。このように、各ルータ１０〜１０ｅが合流数が最も多いパケットを調停に勝利させた場合には、並列計算機システム１は、各計算ノード２〜２ｄと計算ノード２ｅ間の通信に対して、均等に帯域を割当てることができる。
【００７２】
次に、各計算ノード２〜２ｄが計算ノード２ｅにパケットを送信するとともに、各計算ノード２〜２ｅ以外の計算ノードから計算ノード２ｅへ送信されたパケットが常時合流する例におけるシミュレーション結果について説明する。なお、このシミュレーションにおいては、転送に１〜３２サイクルを要するランダムなサイズの１００００個のパケットを各計算ノード２〜２ｄに割当て、各計算ノード２〜２ｄが自身に割当てられたパケットを計算ノード２ｅに対して送信した例をシミュレーションした。
【００７３】
図５は、実施例１に関わる並列計算機システムが帯域を割当てる処理の一例を説明するための図である。図５中の（Ａ）に示すように、計算ノード２が有するルータ１０には、計算ノード２〜２ｅ以外の計算ノードから計算ノード２ｅへ送信されたパケットの合流が無いものとする。また、図５中の（Ｂ）に示すように、計算ノード２ａが有するルータ１０ａには、計算ノード２〜２ｅ以外の計算ノードから計算ノード２ｅへ送信されたパケットが常時「１」つ合流するものとする。また、図５中の（Ｃ）に示すように、計算ノード２ｂが有するルータ１０ｂには、計算ノード２〜２ｅ以外の計算ノードから計算ノード２ｅへ送信されたパケットが常時「２」つ合流するものとする。
【００７４】
また、図５中の（Ｄ）に示すように、計算ノード２ｃが有するルータ１０ｃには、計算ノード２〜２ｅ以外の計算ノードから計算ノード２ｅへ送信されたパケットが常時「１」つ合流するものとする。また、図５中の（Ｅ）に示すように、計算ノード２ｄが有するルータ１０ｄには、計算ノード２〜２ｅ以外の計算ノードから計算ノード２ｅへ送信されたパケットが常時「３」つ合流するものとする。
【００７５】
このような条件の下、ルータ１０〜１０ｄがラウンドロビン方式でパケットの調停を行った場合には、並列計算機システム１は、計算ノード２ｄと計算ノード２ｅとの通信に、計算ノード２ｄと計算ノード２ｅとの間の帯域のうち「１９．９％」の帯域を割当てた。また、並列計算機システム１は、計算ノード２ｄにおいて合流する３つの通信、つまり、計算ノード２ｃ、ＮＩＣ４ｄ以外から計算ノード２ｄに合流してくる３つの通信には計算ノード２ｄと計算ノード２ｅとの間の帯域のうち「１９．８％」、「２０．４％」、「１９．９％」の帯域を割当てた。
【００７６】
また、並列計算機システム１は、計算ノード２ｃと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「６．６％」の帯域を割当て、計算ノード２ｃにおいて合流する計算ノード２ｂからの通信およびＮＩＣ４ｃ以外からの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「６．６％」を割当てた。また、並列計算機システム１は、計算ノード２ｂと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「１．８％」を割当て、計算ノード２ｂにおいて合流する計算ノード２ａからの通信およびＮＩＣ４ｂからの通信以外の２つの通信に、それぞれ計算ノード２ｄと計算ノード２ｅとの間の帯域の「１．８％」と「１．６％」とを割当てた。
【００７７】
また、並列計算機システム１は、計算ノード２ａと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「０．６％」を割当て、計算ノード２ａにおいて合流する計算ノード２から合流する通信とＮＩＣ４ａからの通信以外の通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「０．６％」を割当てた。そして、並列計算機システム１は、計算ノード２と計算ノード２ｅ間の通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「０．７％」を割当てた。このように、並列計算機システム１は、各ルータ１０〜１０ｄがラウンドロビン方式を用いてパケットの調停を行った場合には、各通信に対して均等に帯域を割当てることができない。
【００７８】
一方、同様の条件の下、各ルータ１０〜１０ｄが合流数が最も多いパケットを調停に勝利させた場合は、並列計算機システム１は、計算ノード２ｄと計算ノード２ｅとの通信に、計算ノード２ｄと計算ノード２ｅとの間の帯域の「１１．０％」を割当てた。また、並列計算機システム１は、計算ノード２ｄにおいて合流する計算ノード２ｃ、ＮＩＣ４ｄ以外から計算ノード２ｄに合流してくる３つの通信には計算ノード２ｄと計算ノード２ｅとの間の帯域の「１１．１％」、「１１．１％」、「１１．２％」を割当てた。
【００７９】
また、並列計算機システム１は、計算ノード２ｃと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「８．０％」を割当て、計算ノード２ｃにおいて合流する計算ノード２ｂからの通信およびＮＩＣ４ｃ以外からの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「８．０％」を割当てた。
【００８０】
また、並列計算機システム１は、計算ノード２ｂと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「８．３％」を割当て、計算ノード２ｂにおいて合流する２つの通信に、それぞれ計算ノード２ｄと計算ノード２ｅとの間の帯域の「８．５％」と「８．４％」を割当てた。また、並列計算機システム１は、計算ノード２ａと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「５．０％」を割当て、計算ノード２ａにおいて合流する計算ノード２から合流する通信とＮＩＣ４ａからの通信以外の通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「４．８％」を割当てた。
【００８１】
そして、並列計算機システム１は、計算ノード２と計算ノード２ｅ間の通信に全帯域の「５．０％」を割当てた。このように、並列計算機システム１は、各ルータ１０〜１０ｅが最も大きい合流数が格納されたパケットを調停に勝利させた場合には、各通信に割当てられる帯域のばらつきを抑え、各通信に対して適切に帯域を割当てることができる。
【００８２】
次に、各計算ノード２〜２ｅ以外の計算ノードからランダムな送信先に送信されたパケットが常時合流するとともに、各計算ノード２〜２ｅが通信を行う例についてのシミュレーション結果について説明する。なお、各計算ノードから送信されるパケットのサイズ、パケットの総数、計算ノード２〜２ｅ以外の計算ノードからルータ１０〜１０ｄにおいて合流するパケットの数は、図５を用いて説明したシミュレーションと同様であるものとする。
【００８３】
このような条件の下、各ルータ１０〜１０ｅがラウンドロビン方式でパケットの調停を行った場合には、並列計算機システム１は、計算ノード２ｄと計算ノード２ｅとの通信に、計算ノード２ｄと計算ノード２ｅとの間の帯域のうち「２０．０％」を割当てた。また、並列計算機システム１は、計算ノード２ｃ、ＮＩＣ４ｄ以外から計算ノード２ｄに合流してくる３つの通信には計算ノード２ｄと計算ノード２ｅとの間の帯域のうち「２０．０％」をそれぞれ割当てた。
【００８４】
また、並列計算機システム１は、計算ノード２ｃと計算ノード２ｅとの通信には計算ノード２ｄと計算ノード２ｅとの間の帯域の「７．５％」を割当て、計算ノード２ｃにおいて合流する計算ノード２ｂからの通信およびＮＩＣ４ｃ以外からの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「７．５％」を割当てた。また、並列計算機システム１は、計算ノード２ｂと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「２．０％」を割当て、計算ノード２ｂにおいて合流する計算ノード２ａからの通信およびＮＩＣ４ｂからの通信以外の２つの通信に、それぞれ計算ノード２ｄと計算ノード２ｅとの間の帯域の「２．０％」を割当てた。
【００８５】
また、並列計算機システム１は、計算ノード２ａと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「０．７％」を割当て、計算ノード２ａにおいて合流する計算ノード２から合流する通信とＮＩＣ４ａからの通信以外の通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「０．７％」を割当てた。そして、並列計算機システム１は、計算ノード２と計算ノード２ｅ間の通信に、計算ノード２ｄと計算ノード２ｅとの間の帯域の「０．８％」を割当てた。
【００８６】
一方、同様の条件の下、並列計算機システム１は、各ルータ１０〜１０ｄが合流数が最も多いパケットを調停に勝利させた場合には、計算ノード２ｄと計算ノード２ｅとの通信に、計算ノード２ｄと計算ノード２ｅとの間の帯域の「１１．１％」を割当てた。また、並列計算機システム１は、計算ノード２ｃ、ＮＩＣ４ｄ以外から計算ノード２ｄに合流してくる３つの通信にはそれぞれ計算ノード２ｄと計算ノード２ｅとの間の帯域のうち「１１．１％」を割当てた。
【００８７】
また、並列計算機システム１は、計算ノード２ｃと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「１０．４％」を割当て、計算ノード２ｃにおいて合流する計算ノード２ｂからの通信およびＮＩＣ４ｃ以外からの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「１０．４％」を割当てた。また、並列計算機システム１は、計算ノード２ｂと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「１１．６％」を割当て、計算ノード２ｂにおいて合流する計算ノード２ａからの通信およびＮＩＣ４ｂからの通信以外の２つの通信に、それぞれ計算ノード２ｄと計算ノード２ｅとの間の帯域の「１１．６％」を割当てた。
【００８８】
また、並列計算機システム１は、計算ノード２ａと計算ノード２ｅとの通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「８．３％」を割当て、計算ノード２ａにおいて合流する計算ノード２から合流する通信とＮＩＣ４ａからの通信以外の通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「８．３％」を割当てた。そして、並列計算機システム１は、計算ノード２と計算ノード２ｅ間の通信に計算ノード２ｄと計算ノード２ｅとの間の帯域の「８．４％」を割当てた。
【００８９】
このように、並列計算機システム１は、各ルータ１０〜１０ｄが合流数が最も多いパケットを調停に勝利させた場合には、各通信に割当てられた最大の帯域と最小の帯域との比を「２：１」程度の範囲に抑えることができる。このため、並列計算機システム１は、各通信に割当てられる帯域のばらつきを抑え、各通信に対して適切に帯域を割当てることができる。
【００９０】
次に、図６〜図１１を用いて、パケットに格納された合流数に基づいて調停を行うルータが設置された計算ノードをメッシュ網によって接続した例について説明する。図６は、実施例１に関わる計算ノードの適用例を説明するための図である。図６に示す例では、計算ノード２ｆは、ＣＰＵ３ｆ、ルータ１０ｆを有する。なお、計算ノード２、ＣＰＵ３ｆ、ルータ１０ｆは、それぞれ計算ノード２、ＣＰＵ３、ルータ１０と同様の機能を発揮するものとし、動作の詳細な説明については省略する。また、ＣＰＵ３ｆは、ＮＩＣ４の機能を有するものとする。
【００９１】
図７は、メッシュ網によって接続した計算ノードを有する並列計算機システムを説明するための図である。図７に示す並列計算機システム１ａは、Ｘ軸方向およびＹ軸方向に５個ずつの計算ノードをメッシュ状に接続したトポロジを有する。なお、図７に示す各計算ノードは、計算ノード１ｆと同様の計算ノードである。また、図７に示す「Ｃ」は各計算ノードのＣＰＵを示し、「Ｒ」は各計算ノードのルータを示すものとする。
【００９２】
また、図７に示す各計算ノードは、パケットを送信するルーティングにおいて、パケットをＸ軸上の各ルータを転送させた後に、Ｙ軸上の各ルータを転送させることで、パケットの送信先となる計算ノードにパケットを送信するものとする。なお、この例はあくまでひとつの適用例であり、ルータ１０ｆが実行する処理は、固定ルーティングを採用したネットワークのみならず、任意のルーティング方式が適用された任意の並列計算機システムに適用することも可能である。
【００９３】
図８は、パケットを送信する計算ノードとパケットを受信する計算ノードとを説明するための図である。例えば、図８中「Ｓ」で示したＣＰＵを有する計算ノードから、図８中「Ｄ」で示したＣＰＵを有する計算ノードにパケットが送信された場合には、各計算ノードから送信されたパケットは、図８中の太線で示す経路を辿って送信されることになる。
【００９４】
図９は、パケットの送信経路の一例を説明するための図である。図９に示す例では、図８に示したパケットが送信される経路を抜粋した。図９に示すパケットの経路を回転させるとわかるように、図９に示すパケットの経路は、図１０に示すように、パケットの送信先となる「Ｄ」が付されたＣＰＵを頂点とする木構造である。なお、図１０は、パケットの送信経路の木構造を説明するための図である。
【００９５】
図１１は、各経路を流れるパケットに格納される合流数の値を説明するための図である。図１１に示すように、「Ｓ」が付されたＣＰＵから送信されるパケットには、図１１中の各経路に示す数値の合流数が格納される。より具体的には、各経路を流れるパケットには、各経路を根とするｓｕｂ  ｔｒｅｅに含まれる送信元のＣＰＵの数と等しい値が合流数として格納される。
【００９６】
一例として、図１１中（Ａ）で示す範囲について説明する。例えば、図１１中（Ｂ）で示すルータにおいては、図１１中左方の経路を根とするｓｕｂ  ｔｒｅｅにはパケットの送信元となる２つのＣＰＵが存在する。また、図１１中右方の経路を根とするｓｕｂ  ｔｒｅｅには、パケットの送信元となる１つのＣＰＵが存在する。このため、図１１中（Ｂ）で示すルータにおいては、図１１中左方から合流数「２」が格納されたパケットが合流し、図１１中右方の経路から合流数「１」が格納されたパケットが合流する。このため、図１１中（Ｂ）で示すルータは、図１１中左方の経路から合流したパケットと図１１中右方の経路から合流したパケットとを「２：１」の割合で図１１中上方のルータへと転送するように、各パケットの調停を行う。
【００９７】
このため、図１１中（Ｂ）で示すルータは、図１１中（Ａ）で示す範囲に含まれる各ＣＰＵを有する計算ノードと、送信先となる計算ノードとの間の通信に対して、適切に帯域を割当てることができる。また、図１１中に示す各ルータは、図１１中（Ｂ）で示すルータと同様の処理を行うため、送信元の計算ノードと送信先の計算ノードとの通信に対して均等に帯域を割当てることができる。このように、パケットが参加した調停における競合したパケットの累積数を合流数として各パケットに格納し、各パケットに格納された合流数に基づいて調停を行った場合には、各計算ノード間の通信に対して公平に帯域を割当てることができる。
【００９８】
［調停処理の流れ］
次に、図１２を用いて、ルータ１０がパケットの調停を行う処理の流れについて説明する。図１２は、実施例１に関わるルータが調停を行う処理の一例を説明するためのフローチャートである。まず、ルータ１０は、他の計算ノードからパケットを受信する（ステップＳ１０１）。次に、ルータ１０は、受信したパケットのヘッダに格納された合流数を取得する（ステップＳ１０２）。そして、ルータ１０は、調停回路２０の回路のうち、パケットの宛先に関わるポートの調停回路が有する合流数更新部であって、受信したポートと対応する合流数更新部のレジスタＡおよびレジスタＢに取得した合流数を格納する（ステップＳ１０３）。
【００９９】
次に、ルータ１０は、各ポートの送信要求から競合を確認し、レジスタＡとレジスタＢに格納された値を更新する（ステップＳ１０４）。次に、ルータ１０は、レジスタＢの値を用いて調停処理を実行する（ステップＳ１０５）。また、ルータ１０は、各ポートにおいて受信したパケットが調停に勝利したか否かを判別する（ステップＳ１０６）。そして、ルータ１０は、調停に負けたパケットについては（ステップＳ１０６否定）、このパケットを受信したルータと対応付けられた合流数更新部のレジスタＢに格納された値に１を加算する（ステップＳ１０７）。その後、ルータ１０は、新たなレジスタＢを用いて、再度調停を実行する（ステップＳ１０５）。
【０１００】
また、ルータ１０は、調停に勝利したパケットについては（ステップＳ１０６肯定）、このパケットを受信したポートの受信処理部へ送信許可を送信するとともに、送信ポートの送信処理部へレジスタＡに格納されていた値を送信する（ステップＳ１０８）。次に、ルータ１０は、データパススイッチを介して、受信ポートから送信ポートへパケットを移動させる（ステップＳ１０９）。そして、送信ポートの送信処理部がパケットのヘッダ部にレジスタＡの値を合流数として格納する（ステップＳ１１０）。その後、ルータ１０は、出力先の計算ノードへパケットを送信し（ステップＳ１１１）、処理を終了する。
【０１０１】
［実施例１の効果］
上述したように、ルータ１０は、パケットを受信した場合には、各パケットが参加した調停処理において各パケットと競合した他のパケットの数の累積数である合流数を取得する。また、ルータ１０は、受信したパケットの数、つまり、調停において競合した他のパケットの数に基づいて取得した合流数を更新する。そして、ルータ１０は、更新した各パケットの合流数に基づいて、ルータ１０ａに送信するパケットを選択する。その後、ルータ１０は、選択したパケットのヘッダに更新した合流数を格納し、ルータ１０ａに選択したパケットを送信する。
【０１０２】
このため、並列計算機システム１は、各計算ノード２〜２ｅ間の通信に対して、適切に帯域を分配することができる。つまり、並列計算機システム１は、ルータ１０が各パケットに格納された合流数に基づいて調停を行った場合には、帯域を示す情報に基づいて調停を行う事ができるので、各計算ノード２〜２ｅ間の通信に対して適切に帯域を割当てることができる。すなわち、並列計算機システム１は、各パケットに格納されたひとつのパケットが宛先に届くまでの間に他のパケットと衝突する回数に基づいて調停を行うので、各計算ノード２〜２ｅ間の通信をより高効率で行う事ができる。
【０１０３】
ここで、各パケットが競合した他のパケットの累積数は、高々十数程度であるので、合流数を格納するために必要なビット数は、時間を示す情報を格納するためのビット数よりも小さくなる。例えば、Ｃｒａｙの並列計算機に使用されているルータ（ＳｅａＳｔａｒ
）は、レイテンシを示す１０ｂｉｔの情報をパケットに格納する。しかし、パケットの合流数が３２回程度であると仮定すると、合流数を格納するために必要なビット数は５ビットで済む。このため、並列計算機システム１は、合流数を示す情報に基づいて帯域を制御する場合には、パケットにおけるヘッダ部のサイズが小さくなる結果、１つのパケットにより多くのデータを格納することができる。結果として、並列計算機システム１は、各計算ノード２〜２ｅ間の通信を適切に行わせることができる。
【０１０４】
なお、パケットの合流数は、並列計算機システム１の規模に依存する。すなわち、合流数が３２回とは、例えば、２次元のメッシュ網において、送信されたパケットが受信されるまで各軸方向に１６ホップし、ホップするごとに合計数が１加算される場合である。このため、２次元メッシュ網ならば１７×１７＝２８９個の計算ノードを有する並列計算機システムに対応することができる。同様に、２次元のトーラス網であれば３２×３２＝１０２４個の計算ノードを有する並列計算機システムに対応することができる。なお、この例は、ホップするごとに合計数が１加算される場合であり、通信頻度が少ない並列計算機システムについては、より多くの計算ノードを有していてもこの転送方式が適用できることは明らかである。
【０１０５】
また、合流数は、並列計算機システム１の規模、各計算ノード２〜２ｅを接続するトポトジ、各計算ノード２〜２ｅ間における通信パターン、ルーティングアルゴリズム等に依存せず、汎用的に計測が可能である。このため、並列計算機システム１は、各ルータ１０〜１０ｅが合流数に基づいて調停を行った場合には、計算ノード２〜２ｅの構成によらず、各計算ノード２〜２ｅ間の通信に対して適切に帯域を割当てることができる。また、並列計算機システム１は、十分に帯域が割当てられた通信に対して帯域をさらに割当てるような処理を行うことなく、各通信に対して適切に帯域を割当てることができる。
【０１０６】
また、ルータ１０は、各パケットから取得した合流数に、受信したパケットの数から（自パケットに対応する）１を減算した値を新たな合流数とし、ルータ１０ａへ送信するパケットの合流数を新たな合流数に更新する。すなわち、ルータ１０は、各パケットから取得した合流数に、そのパケットと送信ポートが競合した受信パケットの数（自分を除く）を加えた値を新たな合流数とし、ルータ１０ａへ送信するパケットの合流数を新たな合流数に更新する。このため、ルータ１０は、ルータ１０ａへ送信する各パケットの合流数に、ルータ１０における調停において競合したパケットの数を適切に加算する。この結果、並列計算機システム１は、各計算ノード２〜２ｅ間の通信に対して適切に帯域を割当てることができる。
【０１０７】
また、ルータ１０は、自身で行われた調停において競合したパケットの数を容易に計数することができるので、複雑な処理を行わなくとも、帯域を示す情報を各パケットに格納することができる。この結果、ルータ１０は、実装が容易である。
【０１０８】
また、ルータ１０は、各パケットから取得した合流数を比較し、合流数が最も多いパケットをルータ１０ａへ送信する。このため、並列計算機システム１は、各計算ノード２〜２ｅ間の通信のうち、割当てられた帯域が最も少ない通信に対して、より多くの帯域を割当てるので、各計算ノード２〜２ｅ間の通信に対して、均等に帯域を割当てることができる。
【０１０９】
また、ルータ１０は、前回の調停において送信しなかったパケットについては、更新した合流数に１を加算した値を用いて、新たな調停を実行する。つまり、ルータ１０は、調停負けしたパケットについては、調停負けした回数だけ高い優先度で新たな調停を行うので、最終的に全てのパケットをルータ１０ａに送信する。この結果、並列計算機システム１は、デッドロックを防ぐことができる。
【実施例２】
【０１１０】
これまで本発明の１つの側面として並列計算機システム１について説明したが、本発明は、上述した並列計算機システム１以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１１１】
（１）各ノード１０〜１０ｅについて
上述した各ノード１０〜１０ｅは、調停に参加したパケットに格納された合流数のうち、一番大きい値が格納されたパケットを調停に勝利させていた。しかし、実施例はこれに限定されるものではなく、各パケットに格納された合流数に基づいて、各計算ノード２〜２ｅ間の通信に対して適切に帯域を割当てることができるのであれば、任意の処理を行う事ができる。
【０１１２】
例えば、各ノード１０〜１０ｅは、各パケットの送信先に基づいて、各パケットに格納された合流数に重み付けを行った優先度を算出し、算出した優先度に基づいて調停をおこなってもよい。このような処理を行った場合には、並列計算機システム１は、各計算ノード２〜２ｅ間の通信に対して均等に帯域を割当てるだけではなく、計算ノード間ごとに設定された帯域を適切に割当てることができる。
【０１１３】
また、各ルータ１０〜１０ｅは、調停において参加したパケットの数を外部に表示する表示装置を有しても良い。このような場合には、並列計算機システム１の利用者は、パケットの輻輳が発生した際に輻輳が始まった合流箇所を容易に特定することができる。つまり、各ルータ１０〜１０ｅが有するバッファの使用量やクレジットの使用量を監視しても、一旦輻輳が発生した場合には、パケットを送受信する経路全体でバッファリソースが枯渇する結果、輻輳の開始点を発見することが困難となる。一方、各ルータ１０〜１０ｅが競合したパケットの数は、合流が多く発生している箇所でしか値が大きくならない。このため、並列計算機システム１は、各ルータ１０〜１０ｅにおいて競合したパケットの数を外部に表示させた場合には、利用者に輻輳の発生位置を容易に特定させることができる。
【０１１４】
また、各ルータ１０〜１０ｅは、ポートごとに受信したパケットの合流数を外部に表示することとしてもよい。また、ルータ１０〜１０ｅは、ＶＣ（Virtual  Channel）間での調停において競合したＶＣの数の累積数をカウントして外部に表示することとしてもよい。並列計算機システム１は、このようなルータ１０〜１０ｅを有する場合には、ＶＣ間の競合が多発している箇所を利用者に容易に特定させることができる。
【０１１５】
なお、各ルータ１０〜１０ｅは、合流数を用いて調停をおこなわないことを指定するフラグがパケットのヘッダに格納されていた場合には、ラウンドロビン方式を初めとする任意の調停方法を用いることとしてもよい。
【０１１６】
（２）合流数の初期値について
実施例１に関わるＮＩＣ４〜４ｅは、パケットを生成した場合には、合流数の初期値として「１」を格納した。しかし、実施例はこれに限定されるものではなく、例えば、ＮＩＣ４〜４ｅは、システム管理用等の重要なパケットを生成した場合には、「２」以上の値を合流数の初期値として格納することで、パケットを優先的に送信させることができる。
【０１１７】
例えば、並列計算機システム１は、ＮＩＣ４が合流数の初期値として「２」を格納したパケットを生成した場合には、このパケットを用いた通信に対して、通常の２倍の帯域を割当てることができる。同様に、並列計算機システム１は、ＮＩＣ４が合流数の初期値としてパケットに任意の数「ｎ」を格納した場合には、このパケットを用いた通信に対して通常の「ｎ」倍の帯域を割当てることができる。
【０１１８】
（３）パケットについて
上述したパケットは、ヘッダ部分に識別情報、合流数、フラグを有するものとした。しかし、実施例はこれに限定されるものではなく、パケットのヘッダ部分に合流数が格納されていれば、任意のプロトコルによるパケットを使用することができる。
【符号の説明】
【０１１９】
１、１ａ、５０  並列計算機システム
２〜２ｆ、６０〜６０ｅ  計算ノード
３〜３ｆ、６１〜６１ｅ  ＣＰＵ
４〜４ｅ、６２〜６２ｅ  ＮＩＣ
１０〜１０ｆ、６３〜６３ｅ  ルータ
１１〜１４  受信処理部
１５〜１８  送信処理部
２０  調停回路
２１、２４  合流数更新部
２２、２５  レジスタＡ
２３、２６  レジスタＢ
２７  衝突カウンタ
２８  調停部
２９、３０  データパススイッチ
【図１】
0005682391.tif 000002
【図２】
0005682391.tif 000003
【図３】
0005682391.tif 000004
【図４】
0005682391.tif 000005
【図５】
0005682391.tif 000006
【図６】
0005682391.tif 000007
【図７】
0005682391.tif 000008
【図８】
0005682391.tif 000009
【図９】
0005682391.tif 000010
【図１０】
0005682391.tif 000011
【図１１】
0005682391.tif 000012
【図１２】
0005682391.tif 000013
【図１３】
0005682391.tif 000014
【図１４】
0005682391.tif 000015