(57)【要約】  演算処理を行う複数のノードを有し、ノード間を互いに通信可能に接続する並列計算機のノードに、ノード間の通信形態に基づいて、各宛先ノードまでの通信帯域幅を計測する計測手段と、計測手段が計測した通信帯域幅にしたがって、宛先ノードに送出するパケットサイズを制御する制御手段と、を備える。
2012127625.tif 000002
【特許請求の範囲】
【請求項１】
演算処理を行う複数のノードを有し、該ノード間を互いに通信可能に接続する並列計算機において、
前記ノードに、
前記ノード間の通信形態に基づいて、各宛先ノードまでの通信帯域幅を計測する計測手段と、
前記計測手段が計測した通信帯域幅にしたがって、宛先ノードに送出するパケットサイズを制御する制御手段と、
を備える並列計算機。
【請求項２】
前記計測手段は、通信元である第１のノードと、該第１のノードの通信先である第２のノードとの間の通信経路に介在するパケットの転送手段７２６の数に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１に記載の並列計算機。
【請求項３】
前記計測手段は、通信元である第１のノードが、該第１のノードの通信先である第２のノードにパケットを送信してから、該パケットに対する応答パケットを前記第２のノードから受信するまでの応答時間に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１に記載の並列計算機。
【請求項４】
前記計測手段は、自身に接続された転送手段からパケットを受信してから、自身に接続された他の転送手段に該パケットを転送するまでの待ち時間を取得し、該待ち時間に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１に記載の並列計算機。
【請求項５】
前記制御手段は、前記計測手段が計測する宛先ノードとの間の通信帯域幅に応じて、前記ノードが前記宛先ノードに送信するパケットのサイズを大きくする、
ことを特徴とする請求項１に記載の並列計算機。
【請求項６】
前記制御手段は、前記計測手段が計測する宛先ノードとの間の通信帯域幅に応じて、前記ノードが前記宛先ノードにパケットを送信する送信間隔を大きくする、
ことを特徴とする請求項１に記載の並列計算機。
を備える並列計算機。
【請求項７】
前記第１のノードと前記第２のノードとの間の通信経路に介在する前記転送手段の数を含む情報を記憶する記憶手段、
をさらに備え、
前記計測手段は、前記記憶手段が記憶する情報から、前記第１のノードと前記第２のノードとの間に介在する前記転送手段の数を取得し、該取得した前記転送手段の数に基づいて、宛先ノードとの間の通信帯域幅を計測する、
ことを特徴とする請求項２に記載の並列計算機。
【請求項８】
前記ノードを含むネットワークにおける前記第１のノードと前記第２のノードの位置関係に基づいて、前記第１のノードと前記第２のノードとの間の通信経路に介在する前記転送手段の数を算出する算出手段、
をさらに備え、
前記計測手段は、前記算出手段から、前記第１のノードと前記第２のノードとの間に介在する前記転送手段の数を取得し、該取得した前記転送手段の数に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項２に記載の並列計算機。
【請求項９】
前記転送手段を経由する毎に該転送手段によって更新される計数値を保持する計数値領域を含む調査用パケットを、前記第２のノードに送信する送信手段と、
前記調査用パケットに含まれる前記数値領域に保持された前記計数値が前記第２のノードによって設定された、前記調査用パケットに対する応答パケットを受信する受信手段と、
前記計測手段は、前記受信手段が受信した応答パケットから、前記第１のノードと前記第２のノードとの間に介在する前記転送手段の数を取得し、該取得した前記転送手段の数に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項２に記載の並列計算機。
【請求項１０】
前記第１のノードと前記第２のノードとの間の通信経路に介在する、パケットの転送手段の数に基づく標準的な応答時間を記憶する記憶手段と、
前記応答時間を計数する計数手段と、
をさらに備え、
前記計測手段は、前記記憶手段が記憶する標準的な応答時間と、前記計数手段が計数した前記応答時間とを比較し、該比較の結果に基づいて前記通信帯域幅を計測する、
ことを特徴とする請求項３に記載の並列計算機。
【請求項１１】
演算処理を行う複数のノードを有し、該ノード間を互いに通信可能に接続する並列計算機において、前記ノードの通信を制御する通信制御装置であって、
前記ノード間の通信形態に基づいて、ノード間の通信帯域幅を計測する計測手段と、
前記計測手段の計測結果にしたがって、ノード間で送信されるパケットサイズを制御する制御手段と、
を備える通信制御装置。
【請求項１２】
前記計測手段は、通信元ノードと、該第１のノードの通信先ノードとの間の通信経路に介在するパケットの転送手段の数に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１１に記載の通信制御装置。
【請求項１３】
前記計測手段は、通信元ノードが、該第１のノードの通信先ノードにパケットを送信してから、該パケットに対する応答パケットを前記通信左記ノードから受信するまでの応答時間に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１１に記載の通信制御装置。
【請求項１４】
前記計測手段は、通信元ノードが送信するパケットを転送する転送手段から、該パケットを受信してから他の転送手段に転送するまでの待ち時間を取得し、該待ち時間に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１１に記載の通信制御装置。
【請求項１５】
演算処理を行う複数のノードを有し、該ノード間を互いに通信可能に接続する並列計算機において、前記ノードの通信を制御する通信制御方法であって、
前記ノード間の通信形態に基づいて、通信帯域幅を計測し、
前記計測結果にしたがって、パケットサイズを制御する、
通信制御方法。
【請求項１６】
通信元である第１のノードと、該第１のノードの通信先である第２のノードと、の間の通信経路に介在する、パケットの転送手段の数に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１５に記載の通信制御方法。
【請求項１７】
通信元である第１のノードが、該第１のノードの通信先である第２のノードにパケットを送信してから、該パケットに対する応答パケットを前記第２のノードから受信するまでの応答時間に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１５に記載の通信制御方法。
【請求項１８】
通信元である第１のノードが送信するパケットを受信して転送する転送手段から、該パケットを受信してから他の転送手段に転送するまでの待ち時間を取得し、該待ち時間に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１５に記載の通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機、通信制御装置および通信制御方法に関する。
【背景技術】
【０００２】
従来、演算処理を行う複数のノードを備える並列計算機が知られている。並列計算機に備わる各ノードは、複数の通信機器、例えば、スイッチなどを含むネットワークを介して接続され、互いにデータ通信を行う。【０００３】
図１は、並列計算機１００の構成例について示す図である。
図１に示す並列計算機１００は、計算を行うノードＮ０〜Ｎ７と、受信したデータを特定の送信先のノードに転送するスイッチ１１０〜１１７と、を備える。スイッチ１１０〜１１７は、スイッチを直線上に配置した１次元のメッシュ型ネットワークを構成する。【０００４】
スイッチは、ノードや他のスイッチが接続されている入力ポートからパケットを受信すると、受信したパケットの宛先に応じて、パケットを出力する出力ポートを決定する。そして、スイッチは、決定した出力ポートにパケットを出力する。【０００５】
同じ出力ポートに出力するパケットを複数受信した場合、スイッチは、各入力ポートから出力ポートに出力するパケットの数が均等になるように調停を行う。そして、スイッチは、調停結果にしたがって出力ポートからパケットを送信する。【０００６】
上記技術に関連して、宛先までの転送回数であるホップ数に応じたパケットサイズを決定して送信データをより小さいサイズのパケットに断片化するフラグメント化を行う送信ノードと、ホップ数に応じた優先制御によってパケットを送信する中継ノードと、を含む無線マルチホップネットワークが知られている。【０００７】
また、通信が完了したパケットの長さに基づいて次のパケットの長さを定めることにより、常に効率のよい通信を行う無線データ通信方法が知られている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００３−２７３７８８号公報
【特許文献２】特開２００１−３２６６４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述の並列計算機１００において、集団通信を行って一部のスイッチに通信が集中すると、通信が集中したスイッチまでのホップ数が大きいノードほど通信帯域幅が大きく下がる。この場合、ホップ数が小さいノードからのデータに比べて、ホップ数の大きいノードからの宛先ノードへのデータの到着が遅延する。【００１０】
図２は、ノードＮ０〜Ｎ６がノードＮ７に対してデータを送信する集団通信の例を示している。
スイッチは、各入力ポートに入力されるパケットの、出力ポートへの出力数が均等、つまり１／２ずつになるように、入力するパケットの調停を行う。したがって、ノードＮ６からスイッチ１１６に送信され、かつ、スイッチ１１６からスイッチ１１７に送信されるパケット数は、スイッチ１１６からスイッチ１１７に送信される全パケット数の１／２となる。【００１１】
図２では、ノードＮ７に送信されるパケット数、すなわち、スイッチ１１７に送信されるパケット数に対して、任意のノードが送信するパケット数の比率を「パケット数比」とする。この場合、ノードＮ６におけるパケット数比は１／２となる。【００１２】
また、スイッチ１１５からスイッチ１１６に送信され、かつ、スイッチ１１６からスイッチ１１７に送信されるパケット数は、スイッチ１１６からスイッチ１１７に送信される全パケット数の１／２となる。そして、ノードＮ５からスイッチ１１５に送信され、かつ、スイッチ１１５からスイッチ１１６に送信されるパケット数は、スイッチ１１５からスイッチ１１６に送信される全パケット数の１／２となる。したがって、ノードＮ５におけるパケット数比は１／４となる。【００１３】
同様に、ノードＮ４、Ｎ３、Ｎ２およびＮ１のパケット数比は、それぞれ１／８、１／１６、１／３２および１／６４となる。また、スイッチ１１０は、ノードＮ０から送信されたパケットだけをスイッチ１１１に送信するので、ノードＮ０のパケット数比は、ノードＮ１と同じく１／６４となる。【００１４】
ここで、集団通信の送信元である各ノードが送信するパケットのサイズの比率を「パケットサイズ比」とする。図２に示す集団通信では、全てのノードが同一のサイズのパケットを出力するので、ノードＮ６、Ｎ５、Ｎ４、Ｎ３、Ｎ２、Ｎ１およびＮ０におけるパケットサイズ比は１：１：１：１：１：１：１となる。【００１５】
また、通信帯域幅全体に対する、送信元のノードがパケットを送信するために使用する通信帯域幅、の比率を「通信帯域幅比」とする。全てのノードが同一のサイズのパケットを出力する場合、各ノードにおけるパケット数比がそのまま通信帯域幅比となるので、ノードＮ６、Ｎ５、Ｎ４、Ｎ３、Ｎ２、Ｎ１およびＮ０における通信帯域幅比は全体を１とすると、それぞれ１／２、１／４、１／８、１／１６、１／３２、１／６４および１／６４となる。【００１６】
図２に示した集団通信の例では、宛先ノードＮ７から遠いノードＮ０やＮ１の通信帯域幅が大きく下がってしまうことになる。全てのノードの通信が完了しなければ、集団通信は完了しない。そのため、宛先ノードＮ７に近いノードＮ６から宛先ノードＮ７へのデータに比べて、ノードＮ０やＮ１からの宛先ノードＮ７へのデータの到着が遅延する。この場合、宛先ノードＮ７から遠いノードＮ０やＮ１の通信帯域幅がボトルネックとなる。ホップ数の大きいノードからの宛先ノードへのデータの到着が遅くなる。【００１７】
また、集団通信以外の通信であっても、一部のスイッチに通信が集中すると、通信が集中したスイッチまでの転送回数であるホップ数が大きいノードの通信帯域幅は大きく下がる。【００１８】
図３は、並列計算機１００において、集団通信以外の通信で一部のノードの通信帯域幅が大きく下がる場合の例を示す図である。図３は、ノードＮ０、Ｎ１、Ｎ２およびＮ３が、それぞれ４ホップ離れたノードと同時に通信を行う場合を示している。なお、通信経路の理解を容易にするために、図３では、各ノード間の通信経路を、各々矢印を含む実線で記載しているが、並列計算機１００の構成は図１と同様である。【００１９】
ノードＮ３からスイッチ１１３に送信されて、かつ、スイッチ１１３からスイッチ１１４に送信されるパケット数は、スイッチ１１３からスイッチ１１４に出力される全パケット数の１／２となる。【００２０】
図３では、スイッチ１１３に送信されるパケット数に対して、任意のノードが送信するパケット数の比率を「パケット数比」とする。この場合、ノードＮ３におけるパケット数比は１／２となる。【００２１】
また、スイッチ１１２からスイッチ１１３に送信され、かつ、スイッチ１１３からスイッチ１１４に送信されるパケット数は、スイッチ１１３からスイッチ１１４に送信されるパケット数の１／２となる。そして、ノードＮ２からスイッチ１１２に送信され、かつ、スイッチ１１２からスイッチ１１３に送信されるパケット数は、スイッチ１１２からスイッチ１１３に送信されるパケット数の１／２となる。したがって、ノードＮ２におけるパケット数比は１／４となる。【００２２】
同様に、ノードＮ１のパケット数比は１／８となる。また、スイッチ１１０は、ノードＮ０から送信されたパケットだけをスイッチ１１１に送信するので、ノードＮ０のパケット数比は、ノードＮ１と同じく１／８となる。【００２３】
ノードＮ０〜Ｎ３が同一のサイズのパケットを出力する場合、ノードＮ０、Ｎ１、Ｎ２およびＮ３の各々におけるパケットサイズ比は１：１：１：１となる。この場合、パケット数比がそのまま通信帯域幅比となるので、ノードＮ０、Ｎ１、Ｎ２およびＮ３における通信帯域幅比は全体を１とすると、それぞれ１／２、１／４、１／８および１／８となる。【００２４】
図３に示した通信の例では、他のノードの通信帯域幅と比べて、ノードＮ０やＮ１の通信帯域幅が大きく下がってしまう。この場合、例えば、ノードＮ０やＮ１の通信完了に依存した処理を行う他のノードは、通信が集中するスイッチ１１４までのホップ数が大きいノードであるノードＮ０やＮ１の通信が完了しなければ、通信が完了しない。そのため、ノードＮ０やＮ１の通信帯域幅がボルトネックとなる。【００２５】
なお、図１〜図３では、スイッチを直線上に配置した１次元のメッシュ型ネットワークの場合について説明したが、多次元のメッシュ型ネットワークの場合も同様の問題が生じる。また、上述した問題は、並列計算機１００が、メッシュ型ネットワーク以外のネットワーク形態を有する場合でも生じる。【００２６】
図４は、トーラス型ネットワークのネットワーク形態を有する並列計算機４００の構成例を示す図である。
図４に示す並列計算機４００は、計算を行うノードＮ０〜Ｎ７と、受信したデータを特定の送信先に転送するスイッチ４１０〜４１７と、を備える。スイッチ４１０〜４１７は、リング状のトーラス型ネットワークを構成する。【００２７】
図４では、ノードＮ４は、スイッチ４１４、４１５、４１６および４１７を含む経路を介して、ノードＮ７と通信を行う。ノードＮ５は、スイッチ４１５、４１６および４１７を含む経路を介して、ノードＮ７と通信を行う。ノードＮ６は、スイッチ４１６および４１７を含む経路を介して、ノードＮ７と通信を行う。また、ノードＮ０は、スイッチ４１３、４１２、４１１、４１０および４１７を含む経路を介して、ノードＮ７と通信を行う。ノードＮ０は、スイッチ４１３、４１２、４１１、４１０および４１７を含む経路を介して、ノードＮ７と通信を行う。ノードＮ１は、スイッチ４１２、４１１、４１０および４１７を含む経路を介して、ノードＮ７と通信を行う。ノードＮ３は、スイッチ４１１、４１０および４１７を含む経路を介して、ノードＮ７と通信を行う。ノードＮ４は、スイッチ４１０および４１７を含む経路を介して、ノードＮ７と通信を行う。【００２８】
スイッチ４１６からスイッチ４１７に送信され、かつ、スイッチ４１７からノードＮ７に送信されるパケット数は、スイッチ４１７からノードＮ７に送信されるパケット数の１／２となる。また、ノードＮ６からスイッチ４１６に送信され、かつ、スイッチ４１６からスイッチ４１７に送信されるパケット数は、スイッチ４１６からスイッチ４１７に送信されるパケット数の１／２となる。【００２９】
図４では、ノードＮ７に送信されるパケット数に対して、任意のノードが送信するパケット数の比率を「パケット数比」とする。この場合、ノードＮ６におけるパケット数比は１／４となる。【００３０】
また、スイッチ４１５からスイッチ４１６に送信され、かつ、スイッチ４１６からスイッチ１１７に送信されるパケット数は、スイッチ４１６からスイッチ４１７に送信されるパケット数の１／２となる。そして、ノードＮ５からスイッチ４１５に送信され、かつ、スイッチ４１５からスイッチ４１６に送信されるパケット数は、スイッチ４１５からスイッチ４１６に送信されるパケット数の１／２となる。この場合、ノードＮ５におけるパケット数比は１／８となる。【００３１】
スイッチ４１４は、ノードＮ４から入力されたパケットだけをスイッチ４１５に出力するので、ノードＮ４におけるパケット数比は、ノードＮ５と同じく１／８となる。
同様に、ノードＮ０、Ｎ１、Ｎ２およびＮ３についてのパケット数比は、それぞれ１／４、１／８、１／１６および１／１６となる。【００３２】
ノードＮ０〜Ｎ６が同一のサイズのパケットを出力する場合、ノードＮ０〜Ｎ６におけるパケットサイズ比は１：１：１：１：１：１：１となる。この場合、パケット数比がそのまま通信帯域幅比となるので、ノードＮ０、Ｎ１、Ｎ２、Ｎ３、Ｎ４、Ｎ５およびＮ６における通信帯域幅比は、それぞれ１／４、１／８、１／１６、１／１６、１／８、１／８および１／４となる。【００３３】
図４に示した集団通信の例では、他のノードの通信帯域幅と比べて、ノードＮ７までのホップ数が大きいノードであるノードＮ２やＮ３の通信帯域幅が大きく下がってしまう。全てのノードの通信が完了しなければ、集団通信は完了しないので、ノードＮ２やＮ３の通信帯域幅がボトルネックとなる。ホップ数の大きいノードからの宛先ノードへのデータの到着が遅くなる。【００３４】
なお、図４では、ノード間をリング状に接続したトーラス型ネットワークの場合について説明したが、多次元のトーラス型ネットワークの場合についても同様の問題が生じる。【００３５】
図５は、ネットワーク形態がファットツリー型である場合の並列計算機５００の構成例を示す図である。
図５に示す並列計算機５００は、計算を行うノードＮ０〜Ｎ７と、受信したデータを特定の送信先に転送するスイッチ５１０〜５１４と、を備える。スイッチ５１０〜５１４は、ファットツリー型に接続されている。ここで、ファットツリー型とは、上位階層のスイッチから各ノードが接続される下位階層のスイッチまで、対称にスイッチ間の接続が分岐するように接続したツリー型の接続形態である。【００３６】
図５では、ノードＮ０〜Ｎ６が、ノードＮ７に対してデータを送信する集団通信の例を示している。
ノードＮ６からスイッチ５１４に送信され、かつ、スイッチ５１４からノードＮ７に送信されるパケット数は、スイッチ５１４からノードＮ７に送信されるパケット数の１／２となる。【００３７】
図５では、ノードＮ７に送信されるパケット数に対して、任意のノードが送信するパケット数、の比率を「パケット数比」とする。この場合、ノードＮ６におけるパケット数比は１／２となる。【００３８】
スイッチ５１０は、スイッチ５１１、５１２および５１３から送信されるパケットを、スイッチ５１４に送信する。したがって、例えば、スイッチ５１３からスイッチ５１０に送信され、かつ、スイッチ５１０からスイッチ５１４に送信されるパケット数は、スイッチ５１０からスイッチ５１４に送信される全パケット数の１／３となる。【００３９】
また、スイッチ５１３は、ノードＮ４およびノードＮ５から送信されるパケットを、スイッチ５１０に送信する。したがって、ノードＮ４からスイッチ５１３に送信され、かつ、スイッチ５１３からスイッチ５１０に送信されるパケット数は、スイッチ５１３からスイッチ５１０に送信される全パケット数の１／２となる。同様に、ノードＮ５からスイッチ５１３に送信され、かつ、スイッチ５１３からスイッチ５１０に送信されるパケット数は、スイッチ５１３からスイッチ５１０に送信される全パケット数の１／２となる。したがって、ノードＮ４およびＮ５におけるパケット数比は、それぞれ１／１２となる。【００４０】
ノードＮ０〜Ｎ６が同一のサイズのパケットを出力する場合、ノードＮ０〜Ｎ６におけるパケットサイズ比はそれぞれ１となる。この場合、パケット数比がそのまま通信帯域幅比となるので、ノードＮ０、Ｎ１、Ｎ２、Ｎ３、Ｎ４、Ｎ５およびＮ６における通信帯域幅比は、それぞれ１／１２、１／１２、１／１２、１／１２、１／１２、１／１２および１／２となる。【００４１】
図５に示した集団通信の例では、ノードＮ６の通信帯域幅と比べて、ノードＮ０〜Ｎ５の通信帯域幅が大きく下がってしまう。そのため、ノードＮ０〜Ｎ５の通信帯域幅がボトルネックとなる。ホップ数の大きいノードからの宛先ノードへのデータの到着が遅くなる。【００４２】
以上に説明したように、集団通信など一部のスイッチに通信が集中すると、通信が集中したスイッチへのホップ数が大きいノードの通信帯域幅が大きく下がってしまうため、ホップ数の大きいノードからの宛先ノードへのデータの到着が遅くなる。そのため、ホップ数の大小によって、宛先ノードへのデータの到着時間に偏りが生じる。【００４３】
本並列計算機は、１つの側面では、宛先ノードへのデータの到着時間を均一化したノード間通信を行うことを目的とする。
【課題を解決するための手段】
【００４４】
本並列計算機の１つの観点によれば、本並列計算機は、以下の構成要素を備える。
本並列計算機は、演算処理を行う複数のノードを有し、該ノード間を互いに通信可能に接続する情報処理装置である。【００４５】
そして、前記ノードに、計測手段と、制御手段と、を備える。前記計測手段は、前記ノード間の通信形態に基づいて、各宛先ノードまでの通信帯域幅を計測する。また、前記制御手段は、前記計測手段が計測した通信帯域幅にしたがって、宛先ノードに送出するパケットサイズを制御する。
【発明の効果】
【００４６】
本並列計算機の１つの態様によると、宛先ノードへのデータの到着時間を均一化したノード間通信を行うことができる。
【図面の簡単な説明】
【００４７】
【図１】並列計算機の構成例について示す図である。
【図２】図１に示した並列計算機において、ノードＮ０〜Ｎ６がノードＮ７に対してデータを送信する集団通信の例を示す図である。
【図３】図１に示した並列計算機において、集団通信以外の通信で一部のノードの通信帯域幅が大きく下がる場合の例を示す図である。
【図４】トーラス型ネットワークのネットワーク形態を有する並列計算機の構成例を示す図である。
【図５】ネットワーク形態がファットツリー型である場合の並列計算機の構成例を示す図である。
【図６】並列計算機６００を説明する図である。
【図７】並列計算機７００の構成例を示す図である。
【図８】並列計算機７００に含まれるノードの概要を説明する図である。
【図９】図８に示したノードの具体的な構成例を示す図である。
【図１０】並列計算機７００のパケット送信処理を示すフローチャートである。
【図１１】図１０に示したステップＳ１００３の具体的な処理を示すフローチャートである。
【図１２】図９に示したノードの変形例を示す図である。
【図１３】図１２で説明したノードを使用した並列計算機７００のパケット送信処理を示すフローチャートである。
【図１４】図１３に示したステップＳ１３０３の具体的な処理を示すフローチャートである。
【図１５】図９に示したノードのその他の変形例を示す図である。
【図１６】図１５で説明したノードを使用した並列計算機７００のパケット送信処理を示すフローチャートである。
【図１７】図９に示したノードのその他の変形例を示す図である。
【図１８】図１７で説明したノードを使用した並列計算機７００で使用するスイッチの構成例を示す図である。
【図１９】図１７で説明したノードおよび図１８で説明したスイッチを使用した並列計算機７００のパケット送信処理を示すフローチャートである。
【図２０】その他の実施例に係る並列計算機２０００に含まれるノードの概要を説明する図である。
【図２１】図２０に示したノードの具体的な構成例を示す図である。
【図２２】図２１で説明したノードを使用した並列計算機２０００のパケット送信処理を示すフローチャートである。
【図２３】図２２に示したステップＳ２２０６の具体的な処理を示すフローチャートである。
【図２４】その他の実施例に係る並列計算機２４００に含まれるノードおよびスイッチの概要を説明する図である。
【図２５】図２４に示したスイッチの具体的な構成例を示す図である。
【図２６】図２５に示したスイッチに備わる記憶部に記憶する待ち時間テーブルの例を示す図である。
【図２７】図２５に示したスイッチの処理を示すフローチャートである。
【図２８】図２４に示したプロセッサによるパケットサイズの決定処理を示すフローチャートである。
【図２９】図２４に示したノードの変形例を示す図である。
【図３０】図２９に示したノードの具体的な構成例を示す図である。
【図３１】図３０に示したスイッチの記憶部に記憶される待ち時間テーブルの例を示す図である。
【図３２】図３０で説明したノードを使用した並列計算機２４００におけるパケット送信処理を示すフローチャートである。
【図３３】図３２に示したステップＳ３２０３の具体的な処理を示すフローチャートである。
【図３４】並列計算機６００、７００、２０００、２４００におけるノード間通信で使用するパケットの例を示す図である。
【図３５】並列計算機７００との対比に使用する並列計算機３５００を示す図である。
【図３６】図３５に示した並列計算機３５００の各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。
【図３７】並列計算機７００において、ノード７１０〜７１３が、ノード７１５または７１６に対して、Ｇａｔｈｅｒ通信を行う場合の例を示す図である。
【図３８】図３７に示した並列計算機７００の各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。
【図３９】図３５に示した並列計算機３５００の各ノードがメッセージを分割することなく宛先ノードに送信する場合に、各スイッチ間を宛先ノードの方向に流れるパケットを示すタイムチャートである。
【図４０】図３５に示した並列計算機３５００のノード３５１０〜３５１２が、それぞれ４ホップ離れた宛先ノードと通信を行う場合の例を示す図である。
【図４１】図４０に示した並列計算機３５００の各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。
【図４２】並列計算機７００において、ノード７１０〜７１２が、それぞれ４ホップ離れた宛先ノードと通信を行っている場合の例を示す図である。
【図４３】図４２に示した並列計算機７００の各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。
【図４４】図４０に示した並列計算機３５００の各ノードがストア・アンド・フォワード方式で動作する場合における、各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。
【図４５】図４２に示した並列計算機７００の各ノードがストア・アンド・フォワード方式で動作する場合における、各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。
【発明を実施するための形態】
【００４８】
以下、本実施形態の一例について、図６〜図４５に基づいて説明する。なお、以下に説明する実施形態はあくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図ではない。すなわち、本実施形態は、その趣旨を逸脱しない範囲で、各実施例を組み合わせるなど種々変形して実施することができる。
【実施例】
【００４９】
図６は、本実施例に係る並列計算機６００を説明する図である。
並列計算機６００は、ノード６１０、６２０、・・・を備える。各ノードは、互いに通信可能に接続している。ノード６１０、６２０、・・・は、同様の構成なので、以下では、代表してノード６１０について説明する。【００５０】
ノード６１０は、任意の演算処理を行う演算装置等の情報処理装置である。ノード６１０は、一般的な情報処理装置に備わる構成要素、例えば、プロセッサや主記憶装置などを備える。
そして、ノード６１０は、計測手段６１１と、制御手段６１２と、を備える。【００５１】
計測手段６１１は、自ノードと通信の宛先ノード間の通信形態に基づいて、自ノードと当該宛先ノード間の送信パケットの転送回数であるホップ数を計測する。通信形態とは、ノード６１０、６２０、・・・が互いに通信可能に接続することで実現されるネットワークの形態、自ノードと通信を行う宛先ノード間の通信距離または通信距離を表わす情報、例えば、送信元ノードから宛先ノードまでに送信パケットが経由する転送手段の数であるホップ数などを含むことができる。転送手段とは、ノード６１０、６２０、・・・を互いに通信可能に接続してネットワークを実現するために、ノード間に介在してデータまたはパケットを転送する通信機器、例えば、スイッチやルータなどである。転送手段は、例えば、パケットが入力される複数の入力ポートと、入力されたパケットを出力する出力パケットと、を備える。そして、転送手段は、同じ出力ポートに出力するパケットを複数受信した場合、各入力ポートから出力ポートに出力するパケットの数が均等になるように調停を行うことができる。転送手段は、調停結果にしたがって出力ポートからパケットを送信する。【００５２】
制御手段６１２は、計測手段６１１の計測結果にしたがって、宛先ノードに対する自ノードからのパケット到着時間と、宛先ノードに対する他ノードからのパケット到着時間を均一化するように、当該宛先ノードとの通信に使用するパケットサイズを制御する。例えば、計測手段６１１が計測した自ノード６１０と宛先ノード６２０間の送信パケットのホップ数が大きい場合、制御手段６１２は、当該宛先ノード６２０に送信するパケットのサイズを大きくする。【００５３】
例えば、転送手段では、各入力ポートから出力ポートに出力するパケットの数が均等になるように調停されて宛先ノードにパケットが転送される。この場合、ホップ数の小さいノードから宛先ノードに転送されるパケット数に比べて、ホップ数の大きいノードから宛先ノードに転送されるパケット数の比率が低下する。そして、宛先ノードまでのホップ数の小さいノードが使用できる通信帯域幅に比べて、宛先ノードまでのホップ数の大きいノードが使用できる通信帯域幅の比率が低下する。【００５４】
しかし、上述のように、ノード６１０、６２０、・・・は、宛先ノードとの通信距離であるホップ数に基づいて、宛先ノード毎に通信に使用するパケットサイズを制御する。例えば、ノード６１０、６２０、・・・は、宛先ノードまでのホップ数が大きい場合、宛先ノードに送信するパケットのサイズを大きくする。これにより、ホップ数の小さいノードで使用できる通信帯域幅と、ホップ数の大きいノードで使用できる通信帯域幅と、の比率を均等にすることができる。その結果、ノード６１０、６２０、・・・は、宛先ノードに対する自ノードからのパケット到着時間と、宛先ノードに対する他ノードからのパケット到着時間を均一化したノード間通信を行うことが可能となる。【００５５】
（その他の実施例）
図７は、本実施例に係る並列計算機７００の構成例を示す図である。
並列計算機７００は、ノード７１０〜７１６と、スイッチ７２０〜７２６と、を備える。各ノード７１０〜７１６は、スイッチ７２０〜７２６を介して相互に通信可能に接続している。以下では、ノード７１０〜７１６と、スイッチ７２０〜７２６と、含むネットワークの一部または全部を、単に「ネットワーク」という。【００５６】
各ノード７１０〜７１６は、例えば、所定のプログラムにしたがって演算処理を行うプロセッサや、所定のプログラムを記憶する主記憶装置などを含む演算装置である。また、各ノード７１０〜７１６は、他のノードとネットワークを介して通信を行うネットワークインタフェース装置を含む。【００５７】
スイッチ７２０〜７２６は、受信したデータを所定の宛先に転送する通信装置である。
なお、図７では、７台のノード７１０〜７１６を備える並列計算機７００の構成例について示したが、ノードの数を限定する趣旨ではない。【００５８】
また、図７には、ネットワーク構成がメッシュ型である場合の並列計算機７００を示しているが、本実施例に係るノードおよびスイッチは、ネットワーク構成がトーラス型やファットツリー型にも適用することができる。【００５９】
図８は、本実施例に係る並列計算機７００に含まれるノードの概要を説明する図である。ノード７１０〜７１６は全て同様の構成なので、図８には、並列計算機７００に含まれるノードのうち、代表してノード７１０を記載している。【００６０】
ノード７１０は、プロセッサ８１０と、主記憶装置８２０と、ネットワークインタフェース装置８３０と、を備える。
プロセッサ８１０は、所定のプログラムにしたがって演算処理を行う演算処理装置である。主記憶装置８２０は、プログラムなどを記憶する。主記憶装置８２０には、プロセッサ８１０を解さずに、主記憶装置８２０が保持するデータをインタフェース背制御部８３２に転送するＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を実現するＤＭＡ回路を含むことができる。ネットワークインタフェース装置８３０は、ノードがネットワークを介して他のノードと通信を行うためのインタフェースである。【００６１】
ネットワークインタフェース装置８３０は、ホップ数テーブル記憶部３３１と、インタフェース制御部８３２と、を備える。
ホップ数テーブル記憶部８３１は、パケットを送信する宛先である宛先ノード毎に、宛先ノードを識別する宛先ノードアドレスと宛先ノードまでに経由するスイッチの数とを含むホップ数テーブル８４０を記憶する記憶装置を含む。以下では、送信元のノードから送信されたパケットが宛先ノードに至るまでに経由するスイッチの数を「ホップ数」という。【００６２】
インタフェース制御部８３２は、ネットワークで使用するプロトコルにしたがって、プロセッサ８１０が指定するデータの一部または全部を含むパケットを所定の宛先ノードに送信する。この送信の際、インタフェース制御部８３２は、ホップ数テーブル記憶部８３１に記憶されているホップ数テーブル８４０を参照し、パケットの宛先ノードまでのホップ数を取得する。そして、宛先ノードまでのホップ数が多いと判断した場合、インタフェース制御部８３２は、当該宛先ノードへ送信するパケットサイズを大きくする。また、宛先ノードまでのホップ数が少ないと判断した場合、インタフェース制御部８３２は、当該宛先ノードへ送信するパケットサイズを小さくする。
また、インタフェース制御部８３２は、ネットワークから受信したデータをプロセッサ８１０に送信する。【００６３】
図９は、図８に示したノード７１０の具体的な構成例を示す図である。
ノード７１０は、図８に示したように、プロセッサ８１０と、主記憶装置８２０と、ネットワークインタフェース装置８３０と、を備える。【００６４】
ネットワークインタフェース装置８３０は、ホップ数テーブル記憶部８３１と、制御部９０１と、ＤＭＡコントローラ９０２と、パケット送信部９０３と、を備える。ただし、図９は、ネットワークインタフェース装置８３０が図９に示す構成要素のみを備えるという趣旨ではない。ネットワークインタフェース装置８３０は、例えば、パケットの受信機能などの機能も含むことができる。【００６５】
制御部９０１は、プロセッサ８１０からパケット送信指示を受けると、ＤＭＡコントローラ９０２やパケット送信部９０３を制御して、パケットの送信処理を行う。このとき、制御部９０１は、ＤＭＡコントローラ９０２とパケット送信部９０３に、１つのパケットに含むデータのデータ長を指定する。また、制御部９０１は、自ノードからパケットの宛先までのホップ数から自ノードの通信帯域幅を計測する。その計測に応じて、制御部９０１は、ＤＭＡコントローラ９０２とパケット送信部９０３に指定する当該宛先ノードに送信するパケットのデータ長を変更する。【００６６】
制御部９０１は、パケットの宛先までのホップ数に基づく自ノードの通信帯域幅の計測と、その計測に応じて変更するデータ長と、の関係を表わす数式によって、宛先ノードに送信するパケットのデータ長を定量的に求めることができる。【００６７】
ＤＭＡコントローラ９０２は、制御部９０１からＤＭＡを行なうデータのアドレスとデータ長を通知されると、主記憶装置８２０に対して、制御部９０１が通知したアドレスとデータ長を指定してＤＭＡ要求を行う。すると、主記憶装置８２０は、指定されたアドレスに格納されているデータを、指定されたデータ長だけＤＭＡコントローラ９０２にＤＭＡ転送する。ＤＭＡコントローラ９０２は、主記憶装置８２０からＤＭＡ転送されるデータをパケット送信部９０３に送信する。
パケット送信部９０３は、ＤＭＡコントローラ９０２から転送されるデータから、制御部９０１が指定するデータ長のデータを含むパケットを作成して宛先ノードに送信する。【００６８】
図１０は、本実施例に係る並列計算機７００のパケット送信処理を示すフローチャートである。
ステップＳ１０００から処理を開始し、ステップＳ１００１において、制御部９０１は、プロセッサ８１０からパケット送信指示を受け取ると、パケット送信指示に含まれる宛先ノードアドレス、ネットワーク構成および通信パターン情報も取得する。【００６９】
ネットワーク構成とは、並列計算機７００に備わるノード７１０〜７１６およびスイッチ７２０〜７２６を含むネットワークの構成のことである。パケット送信指示に含まれるネットワーク構成には、例えば、各ノードを網のメッシュ状に接続するメッシュ型、各ノードをリング状に接続するトーラス型、上位階層のスイッチから各ノードが接続される下位階層のスイッチまで、対称にスイッチ間の接続が分岐するように接続したファットツリー型などを含むことができる。また、通信パターン情報には、図２６で後述する通信パターンを含むことができる。【００７０】
ステップＳ１００２において、制御部９０１は、ホップ数テーブル記憶部８３１に記憶されているホップ数テーブル８４０を参照する。そして、制御部９０１は、ホップ数テーブル８４０から、ステップＳ１００１で取得した自ノードから宛先ノードまでのホップ数と、並列計算機７００全体での最大ホップ数と、を取得する。【００７１】
ステップＳ１００３において、ステップＳ１００１で取得したネットワーク構成および通信パターン情報と、ステップＳ１００２で取得した自ノードから宛先ノードまでのホップ数および並列計算機７００全体での最大ホップ数と、を基に当該宛先ノードへ送信するパケットのパケットサイズを決定する。【００７２】
プロセッサ８１０からのパケット送信指示がＰｕｔリクエストによるものである場合（ステップＳ１００４  ＹＥＳ）、制御部９０１は、処理をステップＳ１００５に移行する。この場合、制御部９０１は、プロセッサ８１０が指定したデータを主記憶装置８２０から読み出す（ステップＳ１００５）。ここで、Ｐｕｔリクエストとは、通信を行なうノードが、自ノードの主記憶装置の領域と宛先ノードの主記憶装置の領域とを指定し、自ノードの主記憶装置の領域に記憶されたデータを、宛先ノードの主記憶装置の領域にライトする要求である。Ｐｕｔリクエストの具体的な処理としては、例えば、以下のような処理が行われる。【００７３】
ＤＭＡコントローラ９０２は、主記憶装置８２０に対して、パケット送信指示によって制御部９０１から指定された、送信対象のデータが格納されているアドレスと、パケットに含ませるデータのデータ長と、を指定してＤＭＡ要求を行う。すると、主記憶装置８２０は、指定されたアドレスに格納されているデータを、指定されたデータ長だけＤＭＡコントローラ９０２にＤＭＡ転送する。ＤＭＡコントローラ９０２は、転送されたデータをパケット送信部９０３に送信する。【００７４】
なお、データ長には、ステップＳ１００３で決定したパケットサイズから、パケットに含まれるヘッダ長を除いた値を使用することができる。
ステップＳ１００６において、パケット送信部９０３は、ＤＭＡコントローラ９０２からデータを受信すると、制御部９０１が指定するデータ長のデータを含むパケットを作成する。そして、パケット送信部９０３は、作成したパケットを宛先ノードに送信する。【００７５】
一方、プロセッサ８１０からのパケット送信指示がＧｅｔリクエストによるものである場合（ステップＳ１００４  ＮＯ）、制御部９０１は、処理をステップＳ１００７に移行する。この場合、パケット送信部９０３は、ステップＳ１００３で決定したパケットサイズを指定するＧｅｔリクエストパケットを作成して宛先ノードに送信する（ステップＳ１００７）。ここで、Ｇｅｔリクエストとは、通信を行なうノードが、自ノードの主記憶装置の領域と宛先ノードの主記憶装置の領域とを指定し、宛先ノードの主記憶装置の領域に記憶されたデータを、自ノードの主記憶装置の領域にリードする要求である。
以上の処理が終了すると、制御部９０１は、パケット送信処理を終了する（ステップＳ１００８）。【００７６】
図１１は、本実施例に係るパケットサイズの決定処理（ステップＳ１００３）の詳細を示すフローチャートである。
ステップＳ１００１で取得したネットワーク構成が、トーラス型またはメッシュ型の場合（ステップＳ１１０１  ＹＥＳ）、制御部９０１は、処理をステップＳ１１０２に移行する。この場合、制御部９０１は、パケットサイズ候補を次式によって算出する（ステップＳ１１０２）。
α×（ｍ÷ｎ）×ｌ      ・・・  （１）
ただし、αはパケットサイズ調整のための０より大きい定数、ｍは最大パケットサイズ、ｎは最大ホップ数、ｌは宛先ノードへのホップ数とする。【００７７】
一方、ステップＳ１００１で取得したネットワーク構成が、ファットツリー型の場合（ステップＳ１１０１  ＮＯ）、制御部９０１は、処理をステップＳ１１０３に移行する。この場合、制御部９０１は、宛先ノードまでのホップ数が１か否かを判別する（ステップＳ１１０３）。【００７８】
宛先ノードまでのホップ数が１の場合（ステップＳ１１０３  ＹＥＳ）、制御部９０１は、処理をステップＳ１１０４に移行する。この場合、制御部９０１は、パケットサイズ候補を次式によって算出する（ステップＳ１１０４）。
β×ｍ÷（ｋ−ｊ）      ・・・  （２）
ただし、βはパケット送信間隔調整のための０より大きい定数、ｊは一つのスイッチに直接接続されているノード数、ｋは全ノード数とする。【００７９】
また、ステップＳ１１０３において、宛先ノードまでのホップ数が１でない場合（ステップＳ１１０３  ＮＯ）、制御部９０１は、処理をステップＳ１１０５に移行する。この場合、制御部９０１は、パケットサイズ候補を次式によって算出する（ステップＳ１１０５）。
γ×ｍ  ・・・  （３）
ただし、γはパケットサイズ調整のための０より大きい定数とする。【００８０】
以上の処理によって、パケットサイズ候補を算出すると、制御部９０１は、処理をステップＳ１１０６に移行する。【００８１】
ステップＳ１１０６において、送信データが、他ノードから受信して中継するデータである場合（ステップＳ１１０６  ＹＥＳ）、制御部９０１は、処理をステップＳ１１０７に移行する。この場合、制御部９０１は、新たなパケットサイズ候補を次式によって算出する（ステップＳ１１０７）。
δ×（ｉ＋１）×Ｐ      ・・・  （４）
ただし、δはパケットサイズ調整のための０より大きい定数、ｉはデータを受信して中継するノードの数、ＰはステップＳ１１０２、Ｓ１１０４またはＳ１１０５で算出したパケットサイズ候補である。【００８２】
式（４）によって新たなパケットサイズ候補を算出すると、制御部９０１は、処理をステップＳ１１０８に移行する。
また、ステップＳ１１０６において、送信データが、他ノードから受信して中継するデータでない場合（ステップＳ１１０６  ＮＯ）、制御部９０１は、処理をステップＳ１１０８に移行する。【００８３】
ステップＳ１１０８において、ステップＳ１１０２、Ｓ１１０４、Ｓ１１０５またはＳ１１０７で求めたパケットサイズ候補が、パケットサイズを変更可能な最大値以上の場合、制御部９０１は、当該最大値をパケットサイズとする。また、ステップＳ１１０２、Ｓ１１０４、Ｓ１１０５またはＳ１１０７で求めたパケットサイズ候補が、パケットサイズを変更可能な最小値以下の場合、制御部９０１は当該最小値をパケットサイズとする。また、ステップＳ１１０２、Ｓ１１０４、Ｓ１１０５またはＳ１１０７で求めたパケットサイズ候補が、最小値より大きく、かつ、最大値より小さい以上の場合、制御部９０１は、当該パケットサイズ候補をパケットサイズとする。【００８４】
以上の処理が終了すると、制御部９０１は、パケットサイズの決定処理を終了する（ステップＳ１１０９）。【００８５】
（変形例）
図１２は、図９に示したノード７１０の変形例を示す図である。
図１２に示すノード１２００は、プロセッサ８１０と、主記憶装置８２０と、ネットワークインタフェース装置１２１０と、を備える。【００８６】
ネットワークインタフェース装置１２１０は、ホップ数テーブル記憶部８３１と、制御部１２１１と、ＤＭＡコントローラ９０２と、パケット送信部１２１２と、を備える。ただし、図１２は、ネットワークインタフェース装置１２１０が図１２に示す構成要素のみを備えるという趣旨ではない。ネットワークインタフェース装置１２１０は、例えば、パケットの受信機能などの機能も含むことができる。【００８７】
制御部１２１１は、プロセッサ８１０からパケット送信指示を受けると、ＤＭＡコントローラ９０２やパケット送信部１２１２を制御して、パケットの送信処理を行う。このとき、制御部１２１１は、パケット送信部１２１２に対して、パケット送信間隔を指示する。また、制御部１２１１は、パケットの宛先までのホップ数から自ノードと宛先ノード間の通信帯域幅を計測する。そして、その計測に応じて、制御部１２１１は、パケット送信部１２１２に指示するパケット送信間隔を変更する。【００８８】
制御部１２１１は、パケットの宛先までのホップ数に基づく自ノードの通信帯域幅の計測と、その計測に他応じて変更するパケット送信間隔と、の関係を表わす数式によって、パケット送信部１２１２に指示するパケット送信間隔を定量的に求めることができる。【００８９】
パケット送信部１２１２は、ＤＭＡコントローラ９０２から転送されるデータからパケットを作成する。そして、パケット送信部１２１２は、制御部１２１１が指示するパケット送信間隔でパケットを宛先ノードに送信する。【００９０】
図１３は、図１２で説明したノード１２００を使用した並列計算機７００のパケットの送信処理を示すフローチャートである。
ステップＳ１３０１〜Ｓ１３０２の処理は、図１０のステップＳ１００１〜Ｓ１００２と同様なので、説明は省略する。【００９１】
ステップＳ１３０３において、ステップＳ１３０１で取得したネットワーク構成および通信パターン情報と、ステップＳ１３０２で取得した宛先ノードまでのホップ数および並列計算機７００全体での最大ホップ数と、を基にパケット送信間隔を決定する。【００９２】
プロセッサ８１０からのパケット送信指示がＰｕｔリクエストによるものである場合（ステップＳ１３０４  ＹＥＳ）、制御部１２１１は、処理をステップＳ１３０５に移行する。この場合、制御部１２１１は、プロセッサ８１０が指定した主記憶装置８２０から読み出す（ステップＳ１３０５）。ステップＳ１３０５では、具体的には、以下のような処理が行われる。【００９３】
ＤＭＡコントローラ９０２は、主記憶装置８２０に対して、パケット送信指示によって制御部９０１から指定された、送信対象のデータが格納されているアドレスと、パケットに含ませるデータのデータ長と、を指定してＤＭＡ要求を行う。すると、主記憶装置８２０は、指定されたアドレスに格納されているデータを、指定されたデータ長だけＤＭＡコントローラ９０２にＤＭＡ転送する。ＤＭＡコントローラ９０２は、転送されたデータをパケット送信部９０３に送信する（ステップＳ１３０６）。【００９４】
なお、データ長には、プロセッサ８１０が指定するパケットサイズであって、あらかじめ決められたパケットサイズから、パケットに含まれるヘッダ長を除いた値を使用することができる。【００９５】
一方、プロセッサ８１０からのパケット送信指示がＧｅｔリクエストによるものである場合（ステップＳ１３０４  ＮＯ）、制御部１２１１は、処理をステップＳ１３０７に移行する。この場合、パケット送信部１２１２は、プロセッサ８１０がパケット送信指示とともに指定したデータ長のデータを含むパケットサイズを指定するＧｅｔリクエストパケットを作成する。そして、パケット送信部１２１２は、作成したＧｅｔリクエストパケットを、ステップＳ１３０３で決定したパケット送信間隔で宛先ノードに送信する（ステップＳ１３０７）。
以上の処理が終了すると、制御部１２１１は、パケット送信処理を終了する（ステップＳ１３０８）。【００９６】
図１４は、本実施例に係るパケット送信間隔の決定処理（ステップＳ１３０３）の詳細を示すフローチャートである。
ステップＳ１３０１で取得したネットワーク構成が、トーラス型またはメッシュ型の場合（ステップＳ１４０１  ＹＥＳ）、制御部１２１１は、処理をステップＳ１４０２に移行する。この場合、制御部１２１１は、パケット送信間隔候補を次式によって算出する（ステップＳ１４０２）。
α１×ｍ１×（ｎ−ｌ）      ・・・  （５）
ただし、α１はパケット送信間隔調整のための０より大きい定数、ｍ１は既定のパケットサイズ、ｎは最大ホップ数、ｌは宛先ノードへのホップ数とする。【００９７】
一方、ステップＳ１３０１で取得したネットワーク構成が、ファットツリー型の場合（ステップＳ１４０１  ＮＯ）、制御部１２１１は、処理をステップＳ１４０３に移行する。この場合、制御部１２１１は、宛先ノードまでのホップ数が１か否かを判別する（ステップＳ１４０３）。【００９８】
宛先ノードまでのホップ数が１の場合（ステップＳ１４０３  ＹＥＳ）、制御部１２１１は、処理をステップＳ１４０４に移行する。この場合、制御部１２１１は、パケット送信間隔候補を次式によって算出する（ステップＳ１４０４）。
β１×ｍ１×（ｋ−ｊ）      ・・・  （６）
ただし、β１はパケット送信間隔調整のための０より大きい定数、ｊは一つのスイッチに直接接続されているノード数、ｋは全ノード数とする。【００９９】
ステップＳ１４０３において、宛先ノードまでのホップ数が１でない場合（ステップＳ１４０３  ＮＯ）、制御部１２１１は、処理をステップＳ１４０５に移行する。この場合、制御部１２１１は、パケット送信間隔候補をγ１に決定する（ステップＳ１４０５）。ただし、γ１はパケット送信間隔調整のための０より大きい定数であるが、通常の通信で使用する既定値よりは小さい値とする。【０１００】
以上の処理によって、パケット送信間隔を求めると、制御部１２１１は、処理をステップＳ１４０６に移行する。
ステップＳ１４０６において、送信データが、他ノードから受信して宛先ノードへ中継するデータである場合（ステップＳ１４０６  ＹＥＳ）、制御部１２１１は、処理をステップＳ１４０７に移行する。この場合、制御部１２１１は、当該他ノードから当該宛先ノードへの新たなパケット送信間隔候補を次式によって算出する（ステップＳ１４０７）。
δ１÷（ｉ＋１）×Ｐ１      ・・・  （７）
ただし、δ１はパケット送信間隔調整のための０より大きい定数、ｉはデータを受信して中継するノードの数、Ｐ１はステップＳ１４０２、Ｓ１４０４またはＳ１４０５で算出したパケット送信間隔候補である。【０１０１】
式（７）によって新たなパケット送信間隔候補を算出すると、制御部１２１１は、処理をステップＳ１４０８に移行する。また、ステップＳ１４０６において、送信データが、他ノードから受信して中継するデータでない場合（ステップＳ１４０６  ＮＯ）、制御部１２１１は、処理をステップＳ１４０８に移行する。
以上の処理が終了すると、制御部１２１１は、パケット送信間隔の決定処理を終了する（ステップＳ１４０８）。【０１０２】
（その他の変形例）
図１５は、図９に示したノード７１０のその他の変形例を示す図である。なお、本変形例に係るノード１５００は、ネットワークの構成が多次元のメッシュ型またはトーラス型の場合に利用することができる。以下の説明では、並列計算機７００のネットワーク構成が３次元のメッシュ型またはトーラス型の場合について説明する。【０１０３】
図１５に示すノード１５００は、プロセッサ８１０と、主記憶装置８２０と、ネットワークインタフェース装置１５１０と、を備える。
ネットワークインタフェース装置１５００は、制御部１５１１と、ホップ数計算部１５１２と、ＤＭＡコントローラ９０２と、パケット送信部９０３と、を備える。ただし、図１５は、ネットワークインタフェース装置１５１０が図１５に示す構成要素のみを備えるという趣旨ではない。ネットワークインタフェース装置１５１０は、例えば、パケットの受信機能などの機能も含むことができる。【０１０４】
制御部１５１１は、プロセッサ８１０からパケット送信指示を受けると、ＤＭＡコントローラ９０２やパケット送信部９０３を制御して、パケットの送信処理を行う。制御部１５１１は、パケットの宛先までのホップ数をホップ数計算部１５１２から取得する。このとき、制御部１５１１は、ＤＭＡコントローラ９０２とパケット送信部９０３に、１つのパケットに含むデータのデータ長を指定する。また、制御部１５１１は、パケットの宛先までのホップ数から、自ノードと宛先ノード間の通信帯域幅を計測する。その計測に応じて、制御部１５１１は、ＤＭＡコントローラ９０２とパケット送信部９０３に指定する宛先ノードに送信するパケットのデータ長を変更する。【０１０５】
制御部１５１１は、パケットの宛先までのホップ数に基づく自ノードの通信帯域幅の計測と、その計測に応じて変更するデータ長と、の関係を表わす数式によって、宛先ノードに送信するパケットのデータ長を定量的に求めることができる。【０１０６】
ホップ数計算部１５１２は、制御部９０１から宛先ノードアドレスの通知を受けると、宛先ノードアドレス、自ノードアドレスおよびネットワークの構成からホップ数を計算する。ホップ数計算部１５１２は、計算したホップ数を制御部９０１に通知する。【０１０７】
図１６は、図１５で説明したノード１５００を使用した並列計算機７００のパケットの送信処理を示すフローチャートである。
ステップＳ１６０１の処理は、図１０のステップＳ１００１と同様なので、説明は省略する。【０１０８】
ステップＳ１６０２において、制御部１５１１は、ホップ数計算部１５１２から、宛先ノードまでのホップ数と、並列計算機７００全体の最大ホップ数を取得する。このとき、具体的には、例えば、以下の処理が行われる。【０１０９】
制御部１５１１は、ステップＳ１６０１で取得した宛先ノードアドレスおよびネットワーク構成をホップ数計算部１５１２に通知する。すると、ホップ数計算部１５１２は、制御部１５１１から通知された宛先ノードアドレスおよびネットワーク構成から、次式を用いて宛先ノードまでのホップ数を算出する。
（ネットワーク構成がメッシュ型の場合）
｜ｘ１−ｘ０｜＋｜ｙ１−ｙ０｜＋｜ｚ１−ｚ０｜      ・・・（８）
（ネットワーク構成がトーラス型の場合）
ｍｉｎ（｜ｘ１−ｘ０｜，Ｎｘ−｜ｘ１−ｘ０｜）＋ｍｉｎ（｜ｙ１−ｙ０｜，Ｎｙ−｜ｙ１−ｙ０｜）＋ｍｉｎ（｜ｚ１−ｚ０｜，Ｎｚ−｜ｚ１−ｚ０｜）      ・・・（９）【０１１０】
ただし、ノードアドレスはｘｙｚ軸座標系の座標値で表わすものとする。そして、自ノードアドレスを（ｘ０，ｙ０，ｚ０）、宛先ノードアドレスを（ｘ１，ｙ１，ｚ１）とする。また、ｘ軸方向、ｙ軸方向およびｚ軸方向に含まれるノード数を、それぞれＮｘ、ＮｙおよびＮｚとする。【０１１１】
宛先ノードまでのホップ数を算出すると、ホップ数計算部１５１２は、宛先ノードまでのホップ数と、並列計算機７００全体の最大ホップ数と、を制御部１５１１に通知する。
以上の処理が終了すると、制御部１５１１は、処理をステップＳ１６０３に移行する。ステップＳ１６０３〜１６０８は、図１０のステップＳ１００３〜Ｓ１００８と同様なので、説明は省略する。【０１１２】
（その他の変形例）
図１７は、図９に示したノード７１０のその他の変形例を示す図である。
図１７に示すノード１７００は、プロセッサ８１０と、主記憶装置８２０と、ネットワークインタフェース装置１７１０と、を備える。
ネットワークインタフェース装置１７１０は、制御部１７１１と、パケット送信部１７１２と、パケット受信部１７１３と、ＤＭＡコントローラ９０２と、を備える。ただし、図１７は、ネットワークインタフェース装置１７１０が図１７に示す構成要素のみを備えるという趣旨ではない。ネットワークインタフェース装置１７１０は、例えば、パケットの受信機能など公知の機能を含むこともできる。【０１１３】
制御部１７１１は、プロセッサ８１０からパケット送信指示を受けると、ＤＭＡコントローラ９０２やパケット送信部１７１２を制御して、パケットの送信処理を行う。このとき、制御部１７１１は、ＤＭＡコントローラ９０２とパケット送信部１７１２に、１つのパケットに含むデータのデータ長を指定する。【０１１４】
制御部１７１１は、パケットの宛先までのホップ数に基づく自ノードの通信帯域幅の計測と、その計測に他応じて変更するデータ長と、の関係を表わす数式によって、１つのパケットに含むデータのデータ長を定量的に求めることができる。【０１１５】
また、制御部１５１１は、宛先ノードまでのホップ数を調査するために、パケット送信部１７１２に対して、ホップ数調査用パケットの送信指示を行う。制御部１７１１は、パケット受信部１７１３から、ホップ数調査用パケットに対する応答パケットのホップ数フィールドに含まれるパケット数の通知を受ける。この通知されたパケット数が宛先ノードまでのホップ数である。制御部１７１１は、宛先ノードまでのホップ数から自ノードと当該宛先ノード間の通信帯域幅を計測する。その計測に応じて、制御部１７１１は、ＤＭＡコントローラ９０２およびパケット送信部９０３に指示するデータ長を変更する。【０１１６】
パケット送信部１７１２は、ＤＭＡコントローラ９０２から転送されるデータから、制御部１７１１が指定するデータ長のデータを含むパケットを作成して宛先ノードに送信する。また、制御部１７１１は、制御部１７１１からホップ数調査用パケットの送信指示を受けると、ホップ数調査用パケットを作成する。そして、制御部１７１１は、作成したホップ数調査用パケットを宛先ノードに送信する。【０１１７】
なお、ホップ数調査用パケットとは、ホップ数フィールドを含むパケットである。ホップ数調査用パケット送信時には、ホップ数フィールドの初期値として０が設定される。ホップ数フィールドは、ホップ数調査用パケットが経由するスイッチが更新可能なフィールドである。スイッチは、ホップ数調査用パケットを受信すると、ホップ数フィールドに格納されている値を１だけインクリメントした値に更新する。【０１１８】
また、ホップ数調査用パケットを受信した宛先ノードは、ホップ数調査用パケットに対する応答パケットを、ホップ数調査用パケットの送信元ノードに送信する。この場合、ホップ数調査用パケットに対する応答パケットには、宛先のノードが受信したホップ数調査用パケットのホップ数フィールドがそのまま含まれる。【０１１９】
パケット受信部１７１３は、ネットワークからパケットを受信する。受信したパケットが、ホップ数調査用パケットに対する応答パケットである場合、パケット受信部１７１３は、受信した応答パケットに含まれるホップ数フィールドからホップ数を取得する。そして、パケット受信部１７１３は、取得したホップ数を制御部１７１１に通知する。【０１２０】
以上に説明したノード１５１０に備わる制御部１５１１は、図１２に示したノード１２１０に備わる制御部１２１１のように、パケット送信部９０３に指定するパケット送信間隔を変更してパケット送信間隔を制御してもよい。この場合、ノード１５１０は、図１６のステップＳ１６０３〜Ｓ１６０７の処理に代えて、図１３のステップＳ１３０３〜Ｓ１３０７の処理を行えばよい。【０１２１】
図１８は、本変形例で使用するスイッチ１８００の構成例を示す図である。
スイッチ１８００は、送信バッファ部１８１０および１８２０と、パケット送信制御部１８３０と、ポート１８４０および１８５０と、加算器１８６０と、を備える。【０１２２】
送信バッファ部１８１０は、ノード１７００から受信したパケットを記憶する記憶装置を備える。そして、パケットを記憶装置に記憶すると、送信バッファ部１８１０は、記憶装置に記憶されたパケットの例えばヘッダ部に含まれる宛先ノードアドレスをパケット送信制御部１８３０に送信する。また、送信バッファ部１８１０は、パケット送信制御部１８３０からの要求に応じて、パケットをパケット送信制御部１８３０に送信する。【０１２３】
送信バッファ部１８２０は、ネットワークから受信したパケットを記憶する記憶装置を備える。そして、パケットを記憶装置に記憶すると、送信バッファ部１８２０は、記憶装置に記憶されたパケットの例えばヘッダ部に含まれる宛先ノードアドレスをパケット送信制御部１８３０に出力する。また、送信バッファ部１８２０は、パケット送信制御部１８３０からの要求に応じて、パケットをパケット送信制御部１８３０に送信する。【０１２４】
パケット送信制御部１８３０は、送信バッファ部１８１０や１８２０から、パケットの宛先ノードアドレスの通知を受けると、通知された宛先ノードアドレスを基に、パケット送信に使用するポートを決定する。また、送信バッファ部１８１０や１８２０からパケットを取得すると、パケット送信制御部１８３０は、決定したポートにパケットを送信する。【０１２５】
ポート１８４０は、ネットワークからパケットを受信すると、受信したパケットを送信バッファ部１８２０に送信する。ポート１８５０は、パケット送信制御部１８３０から送信要求を受けると、パケット送信制御部１８３０に送信許可を通知する。その後、パケット送信制御部１８３０からパケットを受信すると、ポート１８５０は、加算器１８６０を介して受信したパケットを宛先ノードに送信する。【０１２６】
加算器１８６０は、ポート１８５０から送信されたパケットに含まれるホップ数フィールドに格納されている値を、その値を１だけインクリメントした値に更新する。
なお、図１８には、ポート１８４０と、ポート１８５０および加算器１８６０と、をそれぞれ１つだけ記載しているが、ポート１８４０と、ポート１８５０および加算器１８６０は、それぞれ複数備えられていてもよい。【０１２７】
図１９は、図１７で説明したノード１７００および図１８で説明したスイッチ１８００を使用した並列計算機７００におけるパケット送信処理を示すフローチャートである。
ステップＳ１９０１の処理は、図１０のステップＳ１００１と同様なので、説明は省略する。【０１２８】
ステップＳ１９０２において、制御部１７１１は、パケットの宛先、すなわち、宛先ノードアドレスが示すノードに、ホップ数調査用パケットパケットを送信して、宛先ノードまでのホップ数を取得する。このとき、具体的には、例えば、以下の処理が行われる。【０１２９】
制御部１７１１は、パケット送信部１７１２に対して、ステップＳ１７０１で取得した宛先ノードアドレスへの、ホップ数調査用パケットの送信指示を行う。パケット送信部１７１２は、制御部１７１１からホップ数調査用パケットの送信指示を受けると、ステップＳ１７０１で取得した宛先ノードアドレスにホップ数調査用パケットを送信する。【０１３０】
パケット受信部１７１３は、ホップ数調査用パケットに対する応答パケットを受信すると、応答パケットに含まれるホップ数フィールドを参照し、宛先ノードまでのホップ数を取得する。そして、パケット受信部１７１３は、宛先ノードまでのホップ数を制御部１７１１に通知する。【０１３１】
以上の処理が終了すると、制御部１７１１は、処理をステップＳ１９０３に移行する。ステップＳ１９０３〜Ｓ１９０７の処理は、図１０のステップＳ１００３〜Ｓ１００７と同様なので、説明は省略する。【０１３２】
以上に説明したノード１７１０に備わる制御部１７１１は、図１２に示したノード１２１０に備わる制御部１２１１のように、パケット送信部１７１２に指定するパケット送信間隔を変更してパケット送信間隔を制御してもよい。この場合、ノード１７１０は、図１９のステップＳ１９０３〜Ｓ１６０７の処理に代えて、図１３のステップＳ１３０３〜Ｓ１３０７の処理を行うことができる。【０１３３】
（その他の実施例）
図２０は、本実施例に係る並列計算機２０００に含まれるノードの概要を説明する図である。本実施例に係る並列計算機２０００は、図７に示したノード７１０〜７１６に代えて、図２０に示すノード２０１０を使用する。【０１３４】
ノード２０１０は、プロセッサ８１０と、主記憶装置８２０と、ネットワークインタフェース装置２０２０と、を備える。
そして、ネットワークインタフェース装置２０２０は、応答時間テーブル記憶部２０２１と、インタフェース制御部２０２２と、送信部２０２３と、カウンタ２０２４と、受信部２０２５と、を備える。【０１３５】
応答時間テーブル記憶部２０２１は、パケットを送信する宛先である宛先ノード毎に、基準応答時間と、応答時間と、を記憶する応答時間テーブル２０３０を記憶する記憶装置を含む。応答時間は、宛先ノードにパケットを送信してから、送信したパケットに対する応答パケットを宛先ノードから受信するまでに要する時間である。応答時間テーブル２０３０の応答時間には、実際に計測された応答時間が記憶される。基準応答時間は、通信帯域幅の計測に用いられる応答時間の基準値である。基準応答時間は、ネットワークの構成や宛先ノードまでのホップ数、標準的な環境における実測値または論理値などに基づいて決定することができる。【０１３６】
インタフェース制御部２０２２は、ネットワークで使用するプロトコルにしたがって、プロセッサ８１０が指定するデータの一部または全部を含むパケットを所定の宛先ノードに送信するように送信部２０２３に指示する。この指示の際、インタフェース制御部２０２２は、応答時間テーブル記憶部２０２１に記憶されている応答時間テーブル２０３０を参照し、宛先ノードまでの基準応答時間と応答時間とを取得する。インタフェース制御部２０２２は、取得した基準応答時間と応答時間とに基づいて、自ノード２０１０と宛先ノード間の通信帯域幅を計測する。そして、その計測に基づいて、インタフェース制御部２０２２は、送信するパケットのサイズを決定する。インタフェース制御部２０２２は、決定したパケットのサイズに基づくデータ長を送信部２０２３に指示する。【０１３７】
送信部２０２３は、インタフェース制御部２０２２が指定するデータ長毎に、プロセッサ８１０が指定するデータの一部または全部を含むパケットを作成する。このとき、送信部２０２３は、カウンタ２０２４を参照し、カウント値を取得する。そして、送信部２０２３は、取得したカウント値をパケットの所定の領域に設定する。【０１３８】
また、送信するパケットが応答パケットである場合、送信部２０２３は、受信したパケットの所定の領域に設定されていたカウント値を、応答パケットの所定の領域に設定する。そして、送信部２０２３は、応答パケットを送信元のノードに送信する。【０１３９】
カウンタ２０２４は、一定の間隔で数を数えるカウンタである。
受信部２０２５は、受信したパケットの所定の領域に設定されたカウント値Ａを取得する。また、受信部２０２５は、カウンタ２０２４を参照し、カウント値Ｂを取得する。そして、受信部２０２５は、カウント値Ｂとカウント値Ａとの差分から応答時間を算出する。受信部２０２５は、算出した応答時間を応答時間テーブル２０３０に記憶する。【０１４０】
また、受信部２０２５は、受信したパケットを、主記憶装置８２０に記憶する。インタフェース制御部２０２２は、受信部２０２５からパケットの受信が通知されると、その旨をパケットの記憶場所とともにプロセッサ８１０に通知する。【０１４１】
図２１は、図２０に示したノード２０１０の具体的な構成例を示す図である。
ノード２０１０は、プロセッサ８１０と、主記憶装置８２０と、ネットワークインタフェース装置２０２０と、を備える。【０１４２】
ネットワークインタフェース装置２０２０は、応答時間テーブル記憶部２１０１と、パケット送信管理部２１０２と、制御部２１０３と、ＤＭＡコントローラ２１０４と、パケット送信部２１０５と、カウンタ２１０６と、パケット受信部２１０７と、を備える。【０１４３】
応答時間テーブル記憶部２１０１は、図２０に示した応答時間記憶テーブル２０２１と同様である。したがって、応答時間テーブル記憶部２１０１は、パケットを送信する宛先である宛先ノード毎に、基準応答時間と、応答時間と、を記憶する応答時間テーブル２０３０を記憶する記憶装置を含む。【０１４４】
パケット送信管理部２１０２は、送信したパケットに対する応答パケットを未受信な状態で送信できるパケット数ｑと、応答パケットを１個受信した場合に送信できるパケット数ｐと、を用いて、送信可能なパケット数を管理する。ただし、ｐおよびｑは０以上の整数とする。具体的には、以下の操作によって、パケット送信管理部２１０２は、送信可能なパケット数を管理する。【０１４５】
（１）初期値としてパケット数ｑが、プロセッサ８１０から通知される。すると、パケット送信管理部２１０２は、送信可能なパケット数としてパケット数ｑを保持する。
（２）制御部２１０３からパケットを送信した旨の通知を受けると、パケット送信管理部２１０２は、送信可能なパケット数ｑを「１」だけ減算した値に更新する。
（３）パケット受信部２１０７から応答パケットを受信した旨の通知を受けると、パケット送信管理部２１０２は、送信可能なパケット数ｑを「ｐ」だけ加算した値に更新する。【０１４６】
パケット送信管理部２１０２は、制御部２１０３から、送信可能なパケット数の問合わせを受けると、送信可能なパケット数を制御部２１０３に通知する。
制御部２１０３は、プロセッサ８１０からパケット送信指示を受けると、パケット送信管理部２１０２に問合わせて、送信可能なパケット数を取得する。そして、パケットを送信可能であれば、制御部２１０３は、応答時間テーブル記憶部２１０１に記憶された応答時間テーブル２０３０を参照し、宛先ノードまでの基準応答時間と応答時間とを取得する。制御部２１０３は、取得した基準応答時間と応答時間とに基づいて、送信するパケットのサイズを決定する。【０１４７】
例えば、応答時間が基準応答時間より大きい場合、制御部２１０３は、自ノード、すなわちノード２０１０の通信帯域幅が狭まると計測する。この場合、制御部２１０３は、送信するパケットのサイズを大きくする。また、応答時間が基準応答時間より小さい場合、制御部２１０３は、自ノード、すなわちノード２０１０の通信帯域幅が拡がると計測する。この場合、制御部２１０３は、送信するパケットのサイズを小さくする。【０１４８】
制御部２１０３は、決定したパケットのサイズとなるように、パケットに含まれるデータ長を算出する。そして、算出したデータ長と、送信するデータのアドレスと、をＤＭＡコントローラ２１０４に通知する。【０１４９】
制御部２１０３は、応答時間に基づく自ノードの通信帯域幅の計測と、その計測に他応じて変更するデータ長と、の関係を表わす数式によって、宛先ノードに送信するパケットのデータ長を定量的に求めることができる。【０１５０】
ＤＭＡコントローラ２１０４は、制御部２１０３からアドレスとデータ長を通知されると、主記憶装置８２０に対して、制御部２１０３が通知したアドレスとデータ長を指定してＤＭＡ要求を行う。すると、主記憶装置８２０は、指定されたアドレスに格納されているデータを、指定されたデータ長だけＤＭＡコントローラ２１０４にＤＭＡ転送する。ＤＭＡコントローラ２１０４は、主記憶装置８２０からＤＭＡ転送されるデータをパケット送信部２１０５に送信する。【０１５１】
パケット送信部２１０５は、ＤＭＡコントローラ２１０４から送信されたデータを含むパケットを作成する。このとき、パケット送信部２１０５は、カウンタ２１０６を参照し、カウント値を取得する。そして、パケット送信部２１０５は、取得したカウント値をパケットの所定の領域に設定する。そして、パケット送信部２１０５は、作成したパケットを宛先ノードに送信する。【０１５２】
また、送信するパケットが応答パケットである場合、パケット送信部２１０５は、受信したパケットの所定の領域に設定されていたカウント値を、応答パケットの所定の領域に設定する。そして、パケット送信部２１０５は、応答パケットを宛先ノードに送信する。【０１５３】
カウンタ２１０６は、一定の間隔で数を数えるカウンタである。
パケット受信部２１０７は、受信したパケットの所定の領域に設定されたカウント値Ａを取得する。また、パケット受信部２１０７は、カウンタ２１０６を参照し、カウント値Ｂを取得する。そして、パケット受信部２１０７は、カウント値Ｂとカウント値Ａとの差分から応答時間を算出する。パケット受信部２１０７は、算出した応答時間を、応答時間テーブル記憶部２１０１に格納された応答時間テーブル２０３０に記憶する。また、パケット受信部２１０７は、応答パケットを受信した旨をパケット送信部２１０５に通知する。【０１５４】
また、パケット受信部２１０７は、受信したパケットを、主記憶装置８２０に記憶する。制御部２１０３は、パケット受信部２１０７からパケットの受信が通知されると、その旨をパケットの記憶場所とともにプロセッサ８１０に通知する。【０１５５】
図２２は、図２１で説明したノード２０１０を使用した並列計算機７００におけるパケット送信処理を示すフローチャートである。
ステップＳ２２０１の処理は、図１０のステップＳ１００１と同様なので、説明は省略する。【０１５６】
ステップＳ２２０２において、制御部２１０３は、パケット送信管理部２１０２から、送信可能なパケット数を取得する。
パケット送信管理部２１０２から取得した、送信可能なパケット数が１未満の場合（ステップＳ２２０３  ＮＯ）、制御部２１０３は、処理をステップＳ２２０４に移行する。この場合、制御部２１０３は、例えば、一定間隔でパケット送信管理部２１０２に問合わせを行うなどして、送信可能なパケット数が１以上となるまで待つ（ステップＳ２２０４）。そして、送信可能なパケット数が１以上となると、制御部２１０３は、処理をステップＳ２２０５に移行する。【０１５７】
また、パケット送信管理部２１０２から取得した、送信可能なパケット数が１以上の場合（ステップＳ２２０３  ＹＥＳ）、制御部２１０３は、処理をステップＳ２２０５に移行する。【０１５８】
ステップＳ２２０５において、制御部２１０３は、応答時間テーブル記憶部２１０１に記憶されている応答時間テーブル２０３０を参照する。そして、制御部２１０３は、応答時間テーブル２０３０から、宛先ノードについての基準応答時間と応答時間を取得する。【０１５９】
ステップＳ２２０６において、制御部２１０３は、ステップＳ２２０５で取得した基準応答時間および応答時間と、通信パターンと、に基づいてパケットのサイズを決定する。
プロセッサ８１０からのパケット送信指示がＰｕｔリクエストによるものである場合（ステップＳ２２０７  ＹＥＳ）、制御部２１０３は、処理をステップＳ２２０８に移行する。この場合、制御部２１０３は、プロセッサ８１０が指定したデータを主記憶装置８２０から読み出す（ステップ２２０８）。具体的には、例えば、以下のような処理が行われる。【０１６０】
ＤＭＡコントローラ２１０４は、主記憶装置８２０に対して、パケット送信指示によって制御部２１０３から指示された、送信対象のデータが格納されているアドレスと、パケットに含ませるデータのデータ長と、を指定してＤＭＡ要求を行う。すると、主記憶装置８２０は、指定されたアドレスに格納されているデータを、指定されたデータ長だけＤＭＡコントローラ２１０４にＤＭＡ転送する。ＤＭＡコントローラ２１０４は、転送されたデータをパケット送信部２１０５に送信する。【０１６１】
なお、データ長には、ステップＳ２２０６で決定したパケットサイズから、パケットに含まれるヘッダ長を除いた値を使用することができる。
ステップＳ２２０９において、制御部２１０３は、ＤＭＡコントローラ９０２からデータを受信すると、制御部２１０３が指定するデータ長のデータを含むパケットを作成する。また、パケット送信部２１０５は、カウンタ２１０６からカウント値を取得し、取得したカウント値をパケットの所定の領域に設定する。そして、パケット送信部２１０５は、パケットを宛先ノードに送信する。【０１６２】
一方、プロセッサ８１０からのパケット送信指示がＧｅｔリクエストによるものである場合（ステップＳ２２０７  ＮＯ）、制御部２１０３は、処理をステップＳ２２１０に移行する。この場合、制御部２１０３は、ステップＳ２２０６で決定したパケットサイズを指定するＧｅｔリクエストパケットを作成して宛先ノードに送信する（ステップＳ２２１０）。
以上の処理が終了すると、制御部２１０３は、パケット送信処理を終了する（ステップＳ２２１１）。【０１６３】
図２３は、本実施例に係るパケットサイズの決定処理（ステップＳ２２０６）の詳細を示すフローチャートである。
ステップＳ２３０１において、制御部２１０３は、パケットサイズ候補を次式によって算出する。
ｍ２＋α２×（ｌ１−ｎ２）      ・・・  （１０）
ただし、α２はパケットサイズ調整のための０より大きい定数、ｍ２は標準パケットサイズ、ｎ２はステップＳ２２０５で取得した基準応答時間、ｌ１はステップＳ２２０５で取得した応答時間とする。ｍ２には、応答時間が基準応答時間と同じ時に送信するパケットサイズなど、を使用することができる。なお、標準パケットサイズは、並列計算機２０００におけるノード間通信で使用するパケットのサイズである。【０１６４】
ステップＳ２３０２において、送信データが、他ノードから受信して宛先ノードに中継するデータである場合（ステップＳ２３０２  ＹＥＳ）、制御部２１０３は、処理をステップＳ２３０３に移行する。この場合、制御部２１０３は、当該他ノードから受信して当該宛先ノードに中継するパケットの新たなパケットサイズ候補を次式によって算出する（ステップＳ２３０３）。
β２×（ｉ＋１）×Ｐ２      ・・・  （１１）
ただし、β２はパケットサイズ調整のための０より大きい定数、ｉはデータを受信して中継するノードの数、Ｐ２はステップＳ２３０１で算出したパケットサイズ候補である。【０１６５】
式（１１）によって新たなパケットサイズ候補を算出すると、制御部２１０３は、処理をステップＳ２３０４に移行する。また、ステップＳ２３０２において、送信データが、他ノードから受信して宛先ノードに中継するパケットのデータでない場合（ステップＳ２３０２  ＹＥＳ）、制御部２１０３は、処理をステップＳ２３０４に移行する。【０１６６】
ステップＳ２３０４において、ステップＳ２３０１またはＳ２３０３で求めたパケットサイズ候補が、パケットサイズを変更可能な最大値以上の場合、制御部２１０３は、パケットサイズ候補を最大値のパケットサイズとする。また、ステップＳ２３０１またはＳ２３０３で求めたパケットサイズ候補が、パケットサイズを変更可能な最小値以下の場合、制御部２１０３は、パケットサイズ候補を最小値のパケットサイズとする。また、ステップＳ２３０１またはＳ２３０３で求めたパケットサイズ候補が、最小値より大きく、かつ、最大値より小さい以上の場合、制御部２１０３は、パケットサイズ候補をパケットサイズとする。【０１６７】
以上の処理が終了すると、制御部２１０３は、パケットサイズの決定処理を終了する（ステップＳ２３０５）。
以上に説明したノード２０２０に備わる制御部２１０３は、図１２に示したノード１２１０に備わる制御部１２１１のように、パケット送信部２１０５にパケット送信間隔を指定してパケット送信間隔を制御してもよい。この場合、ノード２０２０は、図２２のステップＳ２２０６〜Ｓ２２１０の処理に代えて、図１３のステップＳ１３０３〜Ｓ１３０７の処理を行うことができる。【０１６８】
（その他の実施例）
図２４は、本実施例に係る並列計算機２４００に含まれるノードおよびスイッチの概要を説明する図である。本実施例に係る並列計算機２４００は、図７に示したノード７１０〜７１６に、図２４に示すノード２４１０を使用し、図７に示したスイッチ７２０〜７２６に、図２４に示すスイッチ２４２０を使用する。【０１６９】
ノード２４１０は、プロセッサ２４１１と、ネットワークインタフェース装置２４１２と、を備える。ノード２４１０は、ＬＡＮケーブル等を介して、スイッチ２４２０と通信可能に接続している。また、ノード２４１０に備わるプロセッサ２４１１は、専用線またはＬＡＮケーブル等を介して、スイッチ２４２０に備わる記憶部２５６０と通信可能に接続することができる。【０１７０】
プロセッサ２４１１は、所定のプログラムにしたがって演算処理を行う演算装置である。また、プロセッサ２４１１は、所望のデータを他のノードに送信する場合、ネットワークインタフェース装置２４１２に対して、パケット送信指示を行う。このとき、プロセッサ２４１１は、パケット送信指示とともにパケットのサイズを指定する。【０１７１】
なお、プロセッサ２４１１は、図１２に示したノード１２１０に備わる制御部１２１１のように、ネットワークインタフェース装置２４１２に対して、パケット送信間隔を指定してもよい。この場合、プロセッサ２４１１は、図２２のステップＳ２２０６〜Ｓ２２０９の処理に代えて、図１４に示した処理によってパケット送信間隔を求めることができる。【０１７２】
パケットのサイズは、例えば、スイッチ２４２０に備わる記憶部２４２１に記憶された待ち時間テーブル２６００に設定された、パケットの送信待ち時間に基づいて決定することができる。待ち時間テーブル２６００については、図２６で後述する。【０１７３】
ネットワークインタフェース装置２４１２は、プロセッサ２４１１から通知されたパケット送信指示を受けると、パケット送信指示とともに指定されたパケットサイズのパケットを作成してスイッチ２４２０に送信する。【０１７４】
スイッチ２４２０は、送信バッファ２４２１、２４２２および２４２３と、カウンタ２４２４と、記憶部２４２５と、を備える。
送信バッファ２４２１は、ノード２４１０から受信したパケットを送信するまで保持する記憶装置である。送信バッファ２４２２および２４２３は、他のノードから受信したパケットを送信するまで保持する記憶装置である。【０１７５】
カウンタ２４２４は、ノード２４１０からパケットを受信してから、受信したパケットを次のノードに送信するまでの送信待ち時間を計時するカウンタである。カウンタ２４２４は、カウントした送信待ち時間を、記憶部２４２５に記憶されている待ち時間テーブル２６００に設定する。【０１７６】
記憶部２４２５は、通信パターン毎に、パケットを受信してから宛先ノードに送信するまでの送信待ち時間を記憶する待ち時間テーブル２６００を記憶する記憶装置である。
以上の構成において、例えば、プロセッサ２４１１がパケットを処理する場合を考える。この場合、プロセッサ２４１１は、記憶部２４２５に記憶されている待ち時間テーブル２６００から、パケットを受信してから宛先ノードに送信するまでの送信待ち時間を取得する。そして、プロセッサ２４１１は、取得した送信待ち時間に基づいて、自ノード２４１０と宛先ノード間の通信帯域幅を計測する。そして、プロセッサ２４１１は、その計測の結果に基づいてパケットのサイズを決定する。【０１７７】
プロセッサ２４１１は、送信待ち時間に基づく自ノードの通信帯域幅の計測と、その計測に応じて変更するデータ長と、の関係を表わす数式によって、宛先ノードに送信するパケットのデータ長を定量的に求めることができる。【０１７８】
プロセッサ２４１１は、ネットワークインタフェース装置２４１０に対して、パケット送信指示とともに、パケットのサイズを指定する。すると、ネットワークインタフェース装置２４１０は、プロセッサ２４１１が指定するサイズのパケットを作成してスイッチ２４２０に送信する。【０１７９】
スイッチ２４２０に入力されるパケットは、送信バッファ２４２１に格納される。送信バッファ２４２１にパケットが格納されると、カウンタ２４２４は、送信バッファ２４２１に格納されたパケットが送信されるまでの送信待ち時間をカウントする。そして、カウンタ２４２４は、カウントした送信待ち時間を、記憶部２４２５に記憶されている待ち時間テーブル２６００に設定する。【０１８０】
なお、図２４では、パケットが送信待ちである状態の理解を容易にするために、３つの送信バッファ２４２１、２４２２および２４２３が記載されている。しかし、送信バッファ２４２１、２４２２および２４２３は、１つまたは複数の送信バッファで実現することもできる。【０１８１】
また、図２４は、ノード２４１０が図２４に示す構成要素のみを備えるという趣旨ではない。ノード２４１０は、例えば、図８に示した主記憶装置８２０など、情報処理を行う機能も含むことができる。【０１８２】
図２５は、図２４に示したスイッチ２４２０の具体的な構成例を示す図である。
スイッチ２４２０は、送信バッファ部２５１０と、パケット送信制御部２５２０と、ポート２５３０および２５４０と、カウンタ２５５０と、記憶部２５６０と、を備える。【０１８３】
送信バッファ部２５１０は、ノード２４１０に備わるネットワークインタフェース装置２４１２から受信したパケットを記憶する記憶装置を備える。そして、パケットを記憶装置に記憶すると、送信バッファ部２５１０は、記憶装置に記憶されたパケットの例えばヘッダ部に含まれる宛先ノードアドレスをパケット送信制御部２５２０に送信する。また、送信バッファ部２５１０は、パケット送信制御部２５２０からの要求に応じて、パケットをパケット送信制御部２５２０に送信する。【０１８４】
パケット送信制御部２５２０は、送信バッファ部２５１０から、パケットの宛先ノードアドレスの通知を受けると、通知された宛先ノードアドレスを基に、パケット送信に使用するポートを決定する。パケット送信制御部２５２０は、決定したポート、例えば、ポート２５３０または２５４０に対して送信要求を行う。送信要求を行ったポートから送信許可が通知されると、パケット送信制御部２５２０は、送信バッファ部２５１０からパケットを取得する。そして、送信バッファ部２５１０からパケットを取得すると、パケット送信制御部２５２０は、決定したポートにパケットを送信する。【０１８５】
また、パケット送信制御部２５２０は、送信バッファ部２５１０から宛先ノードアドレスの通知を受けると、カウンタ２５５０に、送信バッファ部２５１０から通知された宛先ノードアドレスを通知する。同時に、パケット送信制御部２５２０は、待ち時間のカウントを開始する旨のスタート指示をカウンタ２５５０に通知する。パケットの送信が完了すると、パケット送信制御部２５２０は、送信が完了したパケットについての送信待ち時間のカウントを終了する旨のストップ指示をカウンタ２５５０に通知する。【０１８６】
カウンタ２５５０は、パケット送信制御部２５２０からスタート指示を受けると、パケット送信制御部２５２０から通知された宛先ノードアドレスのパケットについて、パケット毎に、送信待ち時間のカウントを開始する。また、カウンタ２５５０は、パケット送信制御部２５２０からストップ指示を受けると、ストップ指示のあった宛先ノードへのパケットについて、送信待ち時間のカウントを終了する。そして、カウンタ２５５０は、カウント値を、記憶部２５６０に記憶される待ち時間テーブル２６００に設定する。【０１８７】
ポート２５３０は、パケット送信制御部２５２０から送信要求を受けると、パケット送信制御部２５２０に送信許可を通知する。その後、パケット送信制御部２５２０からパケットを受信すると、ポート２５３０は、受信したパケットを宛先ノードに送信する。ポート２５４０も、ポート２５３０と同様に動作する。【０１８８】
なお、図２５には、スイッチ２４２０が２つのポート２５３０および２５４０を備える場合の例を示したが、スイッチ２４２０に備わるポートの数を限定する趣旨ではない。また、スイッチ２４２０は、図１８に示した送信バッファ部１８２０およびポート１８４０などを備えることができる。【０１８９】
図２６は、記憶部２５６０に記憶する待ち時間テーブル２６００の例を示す図である。
図２６に示す待ち時間テーブル２６００は、通信パターンと、宛先ノードアドレスと、スイッチ２４２０と接続するノード２４１０が宛先ノードアドレスに送信したパケットそれぞれを受信してから宛先ノードアドレスに送信するまでの送信待ち時間と、を含む情報である。【０１９０】
通信パターンには、例えば、ＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）に規定された「Ａｌｌ  Ｇａｔｈｅｒ」、「Ａｌｌ  ｔｏ  Ａｌｌ」および「Ａｌｌ  ｒｅｄｕｃｅ」などの集団通信の種類を含むことができる。また、通信パターンには、例えば、ＭＰＩに規定された「Ｂｒｏａｄｃａｓｔ」、「Ｇａｔｈｅｒ」および「Ｒｅｄｕｃｅ」などの集団通信の種類も含むことができる。【０１９１】
「Ａｌｌ  Ｇａｔｈｅｒ」は、各ノードが、その他の全てのノードに対して同じデータを送信する通信パターンである。「Ａｌｌ  ｔｏ  Ａｌｌ」は、各ノードが、その他の全てのノードに対して、それぞれ異なるデータを送信する通信パターンである。「Ａｌｌ  ｒｅｄｕｃｅ」は、任意の１つのノードが、全ノードが保持するデータを用いて演算を行った結果を、演算を行ったノード以外の全てのノードに対して送信する通信パターンである。「Ｂｒｏａｄｃａｓｔ」は、任意の１つのノードが、他の複数のノードにデータを送信する通信パターンである。「Ｇａｔｈｅｒ」は、複数のノードが、任意の１つのノードにデータを送信する通信パターンである。「Ｒｅｄｕｃｅ」は、任意の１つのノードが、全ノードが保持するデータを用いて演算を行う通信パターンである。この場合、演算結果は、演算を行ったノードのみが保持する。【０１９２】
例えば、図２６に示す待ち時間テーブル２６００では、通信パターンが「Ａｌｌ  Ｇａｔｈｅｒ」の場合に、宛先ノードアドレスが「ｎ００」の宛先ノードに送信するパケット「ｐ００」、「ｐ０１」、・・・の送信待ち時間「ｔ００」、「ｔ０１」、・・・が設定されている。【０１９３】
図２７は、図２５に示したスイッチ２４２０の処理を示すフローチャートである。
ステップＳ２７０１において、パケット送信制御部２５２０は、送信バッファ部２５１０から宛先ノードアドレスを受け取る。すると、パケット送信制御部２５２０は、処理をステップＳ２７０２に移行する。【０１９４】
ステップＳ２７０２において、パケット送信制御部２５２０は、送信バッファ部２５１０から受け取った宛先ノードアドレスを基に、パケットを送信するポートを決定する。パケットを送信するポートを決定すると、パケット送信制御部２５２０は、決定したポートに対して送信要求を行う（ステップＳ２７０３）。【０１９５】
ステップＳ２７０４において、パケット送信制御部２５２０は、カウンタ２５５０に対して、送信制御部２５２０から受け取った宛先ノードアドレスを通知するとともに、スタート指示を行う。スタート指示を受けたカウンタ２５５０は、宛先ノードアドレスに送信するパケットの送信待ち時間について、例えば、０からカウントを開始する。【０１９６】
ステップＳ２７０５において、パケット送信制御部２５２０は、送信要求を行ったポートから送信許可を受けると、送信許可を受けたポートにパケットを送信する。パケットの送信が完了すると、パケット送信制御部２５２０は、カウンタ２５５０に対してストップ指示を行う（ステップＳ２７０６）。ストップ指示を受けたカウンタ２５５０は、ステップＳ２７０４のスタート指示で開始したカウントを終了する。そして、カウンタ２５５０は、待ち時間テーブル２６００内の該当する通信パターンに、カウント値と宛先ノードアドレスを記憶する。【０１９７】
以上の説明は、パケット送信制御部２５２０の処理を、図２７に示したステップＳ２７００〜Ｓ２７０７の処理の順番に限定する趣旨ではない。例えば、パケット送信制御部２５２０は、ステップＳ２７０３とステップＳ２７０４を同時に行ってもよい。また、パケット送信制御部２５２０は、ステップＳ２７０５とステップＳ２７０６を同時に行ってもよい。【０１９８】
図２８は、本実施例に係るプロセッサ２４１１によるパケットサイズの決定処理を示すフローチャートである。
ステップＳ２８０１において、プロセッサ２４１１は、スイッチ２４２０に備わる記憶部２５６０に記憶された待ち時間テーブル２６００から、これから行う通信の通信パターンにおける、各宛先ノードへの送信待ち時間を全て取得する。【０１９９】
ステップＳ２８０２において、プロセッサ２４１１は、ステップＳ２８０１で取得した、各宛先ノードへの送信待ち時間、の平均値ｌ２を算出すると、パケットサイズ候補を次式から算出する。
ｍ２＋α３×（ｌ２−ｎ２）      ・・・  （１２）
ただし、α３はパケットサイズ調整のための０より大きい定数、ｌ２は宛先ノードへの待ち時間の平均値、ｍ２は標準パケットサイズ、ｎ２はあらかじめ決められた基準待ち時間である。ｍ２には、待ち時間が基準待ち時間と同じ時に送信するパケットサイズなど、を使用することができる。基準待ち時間ｎ２には、例えば、あらかじめ様々な種類の通信を行って全ノードで計測した、同じ宛先ノードのパケットの送信待ち時間の平均値などを使用することができる。【０２００】
ステップＳ２８０３において、ステップＳ２８０２で求めたパケットサイズ候補が、パケットサイズを変更可能な最大値以上の場合、プロセッサ２４１１は、パケットサイズの最大値をパケットサイズとする。また、ステップＳ２８０２で求めたパケットサイズ候補が、パケットサイズを変更可能な最小値以下の場合、プロセッサ２４１１は、パケットサイズの最小値をパケットサイズとする。また、ステップＳ２８０２で求めたパケットサイズ候補が、最小値より大きく、かつ、最大値より小さい以上の場合、プロセッサ２４１１は、パケットサイズ候補をパケットサイズとする。【０２０１】
以上の処理が終了すると、プロセッサ２４１１は、パケットサイズの決定処理を終了する（ステップＳ２８０４）。【０２０２】
（変形例）
図２９は、図２４に示したノード２４１０の変形例を示す図である。【０２０３】
図２４に示すノード２９１０は、プロセッサ８１０と、主記憶装置８２０と、インタフェース制御部２９１２を含むネットワークインタフェース装置２９１１と、を備える。
ノード２９１０は、ＬＡＮケーブル等を介して、スイッチ２４２０と通信可能に接続している。また、ノード２９１０に含まれるインタフェース制御部２９１２は、専用線またはＬＡＮケーブル等を介して、スイッチ２４２０に備わる記憶部２５６０と通信可能に接続することができる。【０２０４】
インタフェース制御部２９１２は、プロセッサ８１０からのパケット送信指示にしたがってパケット送信処理を行う。このとき、インタフェース制御部２９１２は、スイッチ２４２０に備わる記憶部２４２１に記憶された待ち時間テーブル３１００に設定された、パケットの送信待ち時間から自ノードと宛先ノード間の通信帯域幅を計測する。その計測に応じて、インタフェース制御部２９１２は、当該宛先ノードに送信するパケットのサイズを変更する。待ち時間テーブル３１００については、図３１で後述する。【０２０５】
図３０は、図２９に示したノード２９１０の具体的な構成例を示す図である。
ノード２９１０は、プロセッサ８１０と、主記憶装置８２０と、ネットワークインタフェース装置２９１１と、を備える。
ネットワークインタフェース装置２９１１は、制御部３００１と、ＤＭＡコントローラ９０２と、パケット送信部９０３と、を備える。ただし、図３０は、ネットワークインタフェース装置２９１１が図３０に示す構成要素のみを備えるという趣旨ではない。ネットワークインタフェース装置２９１１は、例えば、パケットの受信機能などの機能を含むことができる。【０２０６】
制御部３００１は、プロセッサ８１０からパケット送信指示を受けると、ＤＭＡコントローラ９０２やパケット送信部９０３を操作して、パケットの送信処理を行う。制御部３００１は、スイッチ２４２０に備わる記憶部２５６０に記憶された待ち時間テーブル３１００から取得したパケットの送信待ち時間から自ノードと宛先ノード間の通信帯域幅を計測する。その計測に応じて、制御部３００１は、当該宛先ノードに送信するパケットのサイズを変更する。【０２０７】
制御部３００１は、送信待ち時間に基づく自ノードの通信帯域幅の計測と、その計測に応じて変更するデータ長と、の関係を表わす数式によって、宛先ノードに送信するパケットのデータ長を定量的に求めることができる。【０２０８】
図３１は、本変形例で使用する待ち時間テーブル３１００の例を示す図である。
図３１に示す待ち時間テーブル３１００は、宛先ノードを識別する情報である宛先ノードアドレスと、宛先ノードに送信したパケットの送信待ち時間と、を含む情報である。送信待ち時間には、該当する宛先ノードに送信したパケットのうち最新のパケットの送信待ち時間が、カウンタ２５５０によって設定される。【０２０９】
なお、本変形例においても、図２６に示した待ち時間テーブル２６００を使用することができる。ただし、待ち時間テーブル２６００を使用する場合には、図２８に示したように、宛先ノードへの送信待ち時間の平均値ｌ２を算出する必要があるため、パケット送信のレイテンシの影響を受ける場合がある。【０２１０】
図３２は、図３０で説明したノード２９１０を使用した並列計算機２４００におけるパケット送信処理を示すフローチャートである。
ステップＳ３２０１の処理は、図１０のステップＳ１００１と同様なので、説明は省略する。【０２１１】
ステップＳ３２０２において、制御部３００１は、プロセッサ８１０からパケット送信指示を受けると、スイッチ２４２０に備わる記憶部２５６０に記憶された待ち時間テーブル３１００から、宛先ノードアドレスへのパケットの送信待ち時間を取得する。【０２１２】
ステップＳ３２０３において、制御部３００１は、ステップＳ３２０２で取得した送信待ち時間と、通信パターンと、に基づいて宛先ノードに送信するパケットのサイズを決定する。
ステップＳ３２０４〜Ｓ３２０７の処理は、図１０のステップＳ１００４〜Ｓ１００７と同様なので、説明は省略する。【０２１３】
図３３は、本変形例に係るパケットサイズの決定処理（ステップＳ３２０３）の詳細を示すフローチャートである。
ステップＳ３３０１において、制御部３００１は、パケットサイズ候補を次式によって算出する。
α４×ｍ２＋（ｌ３−ｎ２）      ・・・  （１３）
ただし、α４はパケットサイズ調整のための０より大きい定数、ｍ２は標準パケットサイズ、ｎ２は基準待ち時間、ｌ３はステップＳ３２０２で取得した宛先ノードへの送信待ち時間とする。ｍ２には、待ち時間が基準待ち時間と同じ時に送信するパケットサイズなど、を使用することができる。基準待ち時間ｎ２には、例えば、あらかじめ様々な種類の通信を行って全ノードで計測した、同じ宛先ノードのパケットの送信待ち時間の平均値などを使用することができる。【０２１４】
ステップＳ３３０２において、送信データが、他ノードから受信して中継するデータである場合（ステップＳ３３０２  ＹＥＳ）、制御部３００１は、処理をステップＳ３３０３に移行する。この場合、制御部３００１は、新たなパケットサイズ候補を次式によって算出する（ステップＳ３３０３）。
β４×（ｉ＋１）×Ｐ４      ・・・  （１４）
ただし、β４はパケットサイズ調整のための０より大きい定数、ｉはデータを受信して中継するノードの数、Ｐ４はステップＳ３３０１で算出したパケットサイズ候補である。【０２１５】
式（１４）によって新たなパケットサイズ候補を算出すると、制御部３００１は、処理をステップＳ３３０４に移行する。また、ステップＳ３３０２において、送信データが、他ノードから受信して宛先ノードに中継するパケットのデータでない場合（ステップＳ３３０２  ＮＯ）、制御部３００１は、処理をステップＳ３３０４に移行する。【０２１６】
ステップＳ３３０４において、ステップＳ３３０１またはＳ３３０３で求めたパケットサイズ候補が、変更可能な最大値以上の場合、制御部３００１は、パケットサイズ候補を最大値のパケットサイズとする。また、ステップＳ３３０１またはＳ３３０３で求めたパケットサイズ候補が、変更可能な最小値以下の場合、制御部３００１は、パケットサイズ候補を最小値のパケットサイズとする。また、ステップＳ３３０１またはＳ３３０３で求めたパケットサイズ候補が、最小値より大きく、かつ、最大値より小さい以上の場合、制御部３００１は、パケットサイズ候補をパケットサイズとする。【０２１７】
以上の処理が終了すると、制御部３００１は、パケットサイズの決定処理を終了する（ステップＳ３３０５）。
以上に説明したノード２９１１に備わる制御部３００１は、図１２に示したノード１２１０に備わる制御部１２１１のように、パケット送信部９０３にパケット送信間隔を指定してパケット送信間隔を制御してもよい。この場合、制御部３００１は、図３２のステップＳ３２０３〜Ｓ３２０７の処理に代えて、図１３のステップＳ１３０３〜Ｓ１３０７の処理を行うことができる。【０２１８】
以上に説明した並列計算機６００、７００、２０００、２４００におけるノード間通信で使用するパケットには、図３４に示すパケット３４００を使用することができる。
図３４に示すパケット３４００には、パケットタイプ、リモートノードアドレス、ローカルノードアドレスおよびペイロードが含まれる。パケットタイプは、Ｐｕｔリクエストに使用するパケットやＧｅｔリクエストに使用するパケットなどパケットの種類を示す情報である。リモートノードアドレスは、パケットの送信先ノードのアドレスを示す情報である。ローカルノードアドレスは、パケットの送信元ノードのアドレスを示す情報である。ペイロードは、ノードが宛先ノードに送信するメッセージを必要に応じて分割したデータである。【０２１９】
以下では、本実施例に係る並列計算機の効果の一例を説明する。例えば、図３５に示す並列計算機３５００を考える。並列計算機３５００は、図１に示した並列計算機１００と同様の構成であるが、本実施例に係る並列計算機との対比に使用するためスイッチの数とノードの数を７個としている。【０２２０】
図３５に示す並列計算機３５００は、ノード３５１０〜３５１３が、ノード３５１５または３５１６に対して、Ｇａｔｈｅｒ通信を行う場合の例を示している。
スイッチ３５２３は、パケット数比が均等になるように調停を行う。そのため、ノード３５１３から受信したパケットをスイッチ３５２３が宛先ノードに送信するパケット数と、スイッチ３５２２から受信したパケットをスイッチ３５２３が宛先ノードに送信するパケット数と、の比率は１／２ずつになる。同様に、ノード３５１２から受信したパケットをスイッチ３５２２が宛先ノードに送信するパケット数と、スイッチ３５２１から受信したパケットをスイッチ３５２２が宛先ノードに送信するパケット数と、の比率は１／２ずつになる。また、ノード３５１１から受信したパケットをスイッチ３５２１が宛先ノードに送信するパケット数と、スイッチ３５２０から受信したパケットをスイッチ３５２１が宛先ノードに送信するパケット数と、の比率は１／２ずつになる。【０２２１】
すると、ノード３５１３、３５１２、３５１１および３５１０が宛先ノードに送信するパケットのパケット数の比率、すなわち、パケット数比は、それぞれ、１／２、１／４、１／８および１／８となる。【０２２２】
各ノード３５１３、３５１２、３５１１および３５１０が送信するパケットサイズは同じなので、パケット数の比率はそのまま通信帯域幅比となる。この場合、宛先ノードであるノード３５１５や３５１６に近いノード３５１３から宛先ノードへのデータに比べて、宛先ノードであるノード３５１５や３５１６に遠いノード３５１０や３５１１からの宛先ノードへのデータの到着が遅延する。【０２２３】
図３６は、図３５に示した並列計算機３５００の各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示している。図３６は、ノード３５１０〜３５１３が、ノード３５１５、３５１６の順にＧａｔｈｅｒ通信を行う通信パターンの場合の例である。なお、ノード３５１０〜３５１３は、メッセージサイズ４ＫＢｙｔｅのデータを、１ＫＢｙｔｅに分割してノード３５１５および３５１６に送信するものとする。ただし、分割するサイズを限定する趣旨ではない。また、スイッチ３５２０〜３５２６は、カット・スルー（Ｃｕｔ−Ｔｈｒｏｕｇｈ）方式で動作できる、すなわち、他スイッチなどからパケットの先頭を受信すると、自スイッチが受信した、または、既に受信していたパケットを次のスイッチへ送信することができるものとする。【０２２４】
なお、図３６に示す（０）と記載された□は、ノード３５１０が宛先ノードに送信するパケットを表している。同様に、（１）、（２）、（３）と記載された□は、それぞれノード３５１１、３５１２、３５１３が宛先ノードに送信するパケットを表している。図３９、図４１および図４４についても同様である。【０２２５】
図３６を参照すると、例えば、ノード３５１０が宛先ノードに送信したパケット数の比率が、多段のスイッチの調停により、スイッチ３５２３−３５２４間の経路で落ちている。また、ノード３５１１、３５１２が宛先ノードに送信したパケット数の比率も、スイッチ３５２３−３５２４間の経路で落ちている。【０２２６】
これに対し、スイッチ３５２３−３５２４間の経路での、ノード３５１３が送信したパケット数の比率は高くなっている。すなわち、スイッチ３５２３−３５２４間の経路での、ノード３５１３が利用できる通信帯域幅が高くなっている。そのため、ノード３５１０〜３５１２がノード３５１５へのパケット送信を全て終了する前に、ノード３５１３は、ノード３５１６へのパケットを送信している。すなわち、ノード３５１０〜３５１２がノード３５１５へのＧａｔｈｅｒ通信を終了する前に、ノード３５１３は、ノード３５１６へのＧａｔｈｅｒ通信を開始している。これにより、ノード３５１０〜３５１３からノード３５１５へのパケットの送信、すなわち、ノード３５１０〜３５１３からノード３５１５へのＧａｔｈｅｒ通信が待たされる。【０２２７】
このように、ホップ数の大きいノードから宛先ノードに送信するパケットの到着が、ホップ数の小さいノードから宛先ノードに送信するパケットの到着より遅くなる。
一方、図３７は、本実施例に係る並列計算機７００において、ノード７１０〜７１３が、ノード７１５または７１６に対して、Ｇａｔｈｅｒ通信を行う場合の例を示している。【０２２８】
並列計算機７００は、例えば、図１１で説明したステップＳ１１０２などの処理により、宛先ノードまでのホップ数が大きいノードが送信するパケットのパケットサイズを大きくする。図３７では、ホップ数の大きいノード７１０や７１１のパケットサイズ比が４となっている。また、ホップ数の小さいノード７１３のパケットサイズ比が１となっている。その結果、ノード７２０〜７２３が使用する通信帯域幅比が均等になっている。これにより、ボトルネックとなる通信帯域幅のノードがなくなる。そして、ホップ数の大きいノードからのパケットと、ホップ数の小さいノードからのパケットと、の宛先ノードへの到着のタイミングが均一化される。【０２２９】
なお、図３７に示すパケットサイズ比は、説明のための例示であって、例えば、図１１のステップＳ１１０２などの処理によって求めることができる。【０２３０】
図３８は、図３７に示した並列計算機７００の各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示している。
図３８は、ノード７１０〜７１３が、ノード７１５、７１６の順にＧａｔｈｅｒ通信を行う通信パターンの場合の例である。ノード７１０〜７１３は、４ＫＢｙｔｅのメッセージを、ノード７１５および７１６に送信するものとする。スイッチ７２０〜７２６は、カット・スルー方式で動作できるものとする。【０２３１】
なお、図３８に示す（０）’と記載された□は、ノード７１０が宛先ノードに送信するパケットを表している。同様に、（１）’、（２）’、（３）’と記載された□は、それぞれノード７１１、７１２、７１３が宛先ノードに送信するパケットを表している。図４３および図４５についても同様である。【０２３２】
図３８を参照する。スイッチ７２０〜Ｓ７２６は、パケット数比が均等になるように調停を行う。そのため、スイッチ７２３−７２４間の経路での、ノード７１０〜７１３が宛先ノードに送信するパケットのパケット数比は、図３６に示したスイッチ３５２３−３５２４間の経路での、ノード３５１０〜３５１３が宛先ノードに送信するパケットのパケット数比と同様である。【０２３３】
しかし、パケット数比が小さいノード７１０や７１１が宛先ノードに送信するパケットサイズは、パケット数比が大きいノード７１３などが宛先ノードに送信するパケットサイズに比べて大きくなっている。例えば、図３８の例では、ノード７１０および７１１が宛先ノードに送信するパケットサイズが４ＫＢｙｔｅ、ノード７１２が宛先ノードに送信するパケットサイズが２ＫＢｙｔｅ、ノード７１３が宛先ノードに送信するパケットサイズが１ＫＢｙｔｅとなっている。その結果、例えば、スイッチ７２３−７２４間の経路での、ノード７１０〜７１３がそれぞれ単位時間当たりに経路を使用する時間は、公平になる。ノード７１０〜７１３がそれぞれ使用する通信帯域幅比が均等になる。【０２３４】
その結果、例えば、図３８のスイッチ７２５−７２６間の経路のタイミングチャートからわかるように、ホップ数の大きいノード７１０や７１１から宛先ノード７１６に送信するパケットの到着と、ホップ数の小さいノード７１３から宛先ノード７１６に送信するパケットの到着と、が均一化される。【０２３５】
図３５〜図３８は、各ノードが送信する４ＫＢｙｔｅのメッセージを、所定のサイズのパケットに分割して宛先ノードに送信する場合の例を示した。これに対して、各ノードが送信する４ＫＢｙｔｅのメッセージを、所定のサイズのパケットに分割せずに宛先ノードに送信する場合でも、図３８で説明した効果を得ることができる。【０２３６】
図３９は、図３５に示した並列計算機３５００の各ノードがメッセージを分割することなく宛先ノードに送信する場合に、各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートである。【０２３７】
各ノードがメッセージを分割することなく宛先ノードに送信する場合も、図３６で説明したように、例えば、ノード３５１０が宛先ノードに送信したパケット数の比率が、多段のスイッチの調停により、スイッチ３５２３−３５２４間の経路で落ちている。また、ノード３５１１、３５１２が宛先ノードに送信したパケット数の比率も、スイッチ３５２３−３５２４間の経路で落ちている。【０２３８】
これに対し、スイッチ３５２３−３５２４間の経路での、ノード３５１３が送信したパケット数の比率は高くなっている。すなわち、スイッチ３５２３−３５２４間の経路での、ノード３５１３が利用できる通信帯域幅が高くなっている。そのため、ノード３５１０〜３５１２がノード３５１５へのパケット送信が全て完了していない状態で、ノード３５１３は、ノード３５１６へのパケットを送信している。すなわち、ノード３５１０〜３５１２がノード３５１５へのＧａｔｈｅｒ通信を終了する前に、ノード３５１３は、ノード３５１６へのＧａｔｈｅｒ通信を開始している。これにより、ノード３５１０〜３５１３からノード３５１５へのパケットの送信、すなわち、ノード３５１０〜３５１３からノード３５１５へのＧａｔｈｅｒ通信が待たされる。【０２３９】
各ノードが宛先ノードに送信するメッセージを、所定のサイズのパケットに分割せずに宛先ノードに送信する場合でも、ホップ数の大きいノードから宛先ノードに送信するパケットの到着が、ホップ数の小さいノードから宛先ノードに送信するパケットの到着より遅くなる。したがって、各ノードが宛先ノードに送信するメッセージを、所定のサイズのパケットに分割せずに宛先ノードに送信する場合でも、本実施例に係る並列計算機７００を使用することにより、図３８で説明した効果を得ることができる。【０２４０】
以上では、集団通信における本実施例に係る並列計算機７００の効果の一例を説明したが、以下では、集団通信以外の通信を行う場合における、本実施例に係る並列計算機７００の効果の一例を説明する。【０２４１】
図４０は、図３５に示した並列計算機３５００のノード３５１０〜３５１２が、それぞれ４ホップ離れた宛先ノードと通信を行っている場合の例を示している。
スイッチ３５２２は、パケット数比が均等になるように調停を行う。そのため、ノード３５１２から受信したパケットをスイッチ３５２２が宛先ノードに送信するパケット数と、スイッチ３５２１から受信したパケットをスイッチ３５２２が宛先ノードに送信するパケット数と、の比率は１／２ずつになる。同様に、ノード３５１１から受信したパケットをスイッチ３５２１が宛先ノードに送信するパケット数と、スイッチ３５２０から受信したパケットをスイッチ３５２１が宛先ノードに送信するパケット数と、の比率は１／２ずつになる。結局、ノード３５１２、３５１１および３５１０が宛先ノードに送信するパケット数の比率、すなわち、パケット数比は、それぞれ、１／２、１／４および１／４となる。ノード３５１２、３５１１および３５１０の通信帯域幅比も、ぞれぞれ、１／２、１／４および１／４となる。【０２４２】
この場合、ノード３５１２の通信帯域幅が、ノード３５１０や３５１１の通信帯域幅より大きい。そのため、スイッチ３５２２では、ノード３５１０や３５１１が宛先ノードに送信するパケットを受信してから宛先ノードに送信するまでの時間が、ノード３５１２が宛先ノードに送信するパケットを受信してから宛先ノードに送信するまでの時間より大きくなる。その結果、例えば、宛先ノードに送信するメッセージのサイズがノード３５１２よりノード３５１０の方が小さい場合でも、ノード３５１２が送信するメッセージが宛先ノードに到着するタイミングの方が、ノード３５１０が送信するメッセージが宛先ノードに到着するタイミングより遅くなる場合がある。【０２４３】
図４１は、図４０に示した並列計算機３５００の各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。ノード３５１０およびノード３５１１は、それぞれ４ホップ離れた宛先ノード３５１４および３５１５に４ＫＢｙｔｅのメッセージを１ＫＢｙｔｅのパケットに分割して送信するものとする。また、ノード３５１２は、４ホップ離れた宛先ノード３５１６に８ＫＢｙｔｅのメッセージを１ＫＢｙｔｅのメッセージに分割して送信するものとする。【０２４４】
図４１を参照すると、例えば、ノード３５１０が宛先ノードに送信したパケット数の比率が、多段のスイッチの調停により、スイッチ３５２２−３５２３間の経路で落ちている。スイッチ３５２２では、ノード３５１０が宛先ノード３５１４に送信するパケットを受信してから、宛先ノード３５１４に送信するまでの時間が、ノード３５１２が宛先ノード３５１６に送信するパケットを受信してから、宛先ノード３５１６に送信するまでの時間より大きくなる。その結果、ノード３５１２よりメッセージ３５１０の方が宛先ノードに送信するメッセージのサイズが小さいが、ノード３５１０の宛先ノード３５１４へのメッセージの到着が、ノード３５１２の宛先ノード３５１６へのメッセージの到着より遅延している。【０２４５】
一方、図４２は、本実施例に係る並列計算機７００において、ノード７１０〜７１２が、それぞれ４ホップ離れた宛先ノードと通信を行っている場合の例を示している。
並列計算機７００は、例えば、図１１で説明したステップＳ１１０２などの処理により、宛先ノードまでのホップ数が大きいノード、すなわち、パケット数比の小さいノードが宛先ノードに送信するパケットサイズを大きくする。これにより、パケット数比の小さいノードが宛先ノードに送信するパケットのパケットサイズ比が大きくなる。例えば、図４２では、パケット数比の小さいノード７１０や７１１のパケットサイズ比が２となっている。その結果、ノード７２０〜７２２が使用する通信帯域幅比が均等になる。ボトルネックとなる通信帯域幅のノードがなくなる。【０２４６】
なお、図４２に示すパケットサイズ比は、説明のための例示であって、例えば、図１１のステップＳ１１０２などの処理によって求めることができる。
図４３は、図４２に示した並列計算機７００の各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示している。図４３は、ノード７１０〜７１２が、それぞれ４ホップ離れた宛先ノード７１４〜７１６と通信を行う通信パターンの場合の例である。ノード７１０および７１１は、４ＫＢｙｔｅのメッセージを、必要に応じてパケットサイズを変更して、それぞれノード７１４および７１５に送信するものとする。ノード７１２は、８ＫＢｙｔｅのメッセージを、必要に応じてパケットサイズを変更して、それぞれノード７１６に送信するものとする。【０２４７】
図４３に示すように、パケット数比が小さいノード７１０や７１１が宛先ノードに送信するパケットサイズは、パケット数比が大きいノード７１２が宛先ノードに送信するパケットサイズに比べて大きくなっている。例えば、図４３の例では、ノード７１０および７１１がそれぞれ宛先ノード７１４および７１５に送信するパケットサイズが２ＫＢｙｔｅとなっている。また、ノード７１２が宛先ノード７１６に送信するパケットサイズが１ＫＢｙｔｅとなっている。その結果、例えば、スイッチ７２２−７２３間の経路での、ノード７１０〜７１２がそれぞれ単位時間当たりに経路を使用する時間が均等になる。ノード７１０〜７１２がそれぞれ使用する通信帯域幅比が均等になる。その結果、例えば、図４３のスイッチ７２３−７２４間、７２４−７２５間および７２５−７２６間の経路のタイミングチャートから次のことがいえる。すなわち、ノード７１０から宛先ノード７１４に送信するメッセージ、ノード７１１から宛先ノード７１５に送信するメッセージ、およびノード７１２から宛先ノード７１６に送信するメッセージ、の到着タイミングが分散されて均一化される。【０２４８】
図４０〜図４３では、スイッチが、カット・スルー方式で動作できるものについての例を示した。これに対して、スイッチが、ストア・アンド・フォワード（Ｓｔｏｒｅ  ａｎｄ  Ｆｏｒｗａｒｄ）方式で動作できる場合でも、図４３で説明した効果を得ることができる。なお、ストア・アンド・フォワード方式とは、スイッチが、他スイッチなどから送られたパケットの全てを受信してから、自スイッチが受信した、または、既に受信していたパケットを次のスイッチへ送信する方式である。【０２４９】
図４４は、図４０に示した並列計算機３５００の各ノードがストア・アンド・フォワード方式で動作する場合における、各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。【０２５０】
ノード３５２０〜３５２６がストア・アンド・フォワード方式で動作する場合においても、図４１と同様に、例えば、ノード３５１０が宛先ノードに送信したパケット数の比率が、多段のスイッチの調停により、スイッチ３５２２−３５２３間の経路で落ちている。スイッチ３５２２では、ノード３５１０が宛先ノード３５１４に送信するパケットを受信してから、宛先ノード３５１４に送信するまでの時間が、ノード３５１２が宛先ノード３５１６に送信するパケットを受信してから、宛先ノード３５１６に送信するまでの時間より大きくなる。その結果、ノード３５１２よりメッセージ３５１０の方が宛先ノードに送信するメッセージのサイズが小さいが、ノード３５１０の宛先ノード３５１４へのメッセージの到着が、ノード３５１２の宛先ノード３５１６へのメッセージの到着より遅延する。【０２５１】
一方、図４５は、図４２に示した並列計算機７００の各ノードがストア・アンド・フォワード方式で動作する場合における、各スイッチ間を宛先ノードの方向に流れるパケットのタイムチャートを示す図である。【０２５２】
ノード７２０〜７２６がストア・アンド・フォワード方式の場合、受信するパケットのパケットサイズが大きいと、パケットの受信完了を待つ間、次のスイッチにパケットを送信できない期間、例えば、図４５に示す区間Ａができる。しかし、この点以外は、図４３と同様のことがいえる。【０２５３】
例えば、図４５に示すように、パケット数比が小さいノード７１０や７１１が宛先ノードに送信するパケットサイズは、パケット数比が大きいノード７１２が宛先ノードに送信するパケットサイズに比べて大きい。例えば、図４５の例では、ノード７１０および７１１がそれぞれ宛先ノード７１４および７１５に送信するパケットサイズが２ＫＢｙｔｅとなっている。また、ノード７１２が宛先ノード７１６に送信するパケットサイズが１ＫＢｙｔｅとなっている。その結果、例えば、スイッチ７２２−７２３間の経路での、ノード７１０〜７１２がそれぞれ単位時間当たりに経路を使用する時間が均等になる。ノード７１０〜７１２がそれぞれ使用する通信帯域幅比が均等になる。その結果、例えば、図４３のスイッチ７２３−７２４間、７２４−７２５間および７２５−７２６間の経路のタイミングチャートから次のことがいえる。すなわち、ノード７１０から宛先ノード７１４に送信するパケットの到着タイミング、ノード７１１から宛先ノード７１５に送信するパケットの到着タイミング、およびノード７１２から宛先ノード７１６に送信するパケットの到着タイミング、が分散されて均一化される。【０２５４】
以上の説明において、ホップ数テーブル８４０、応答時間テーブル２０３０、待ち時間テーブル２６００および３１００は、ノード間の通信形態の一例として挙げることができる。【０２５５】
また、Ｓ１１０１−Ｓ１１０７の処理などを行う制御部９０１、制御部１５１１および制御部１７１１は、計測手段の一例として挙げることができる。また、Ｓ１４０１−Ｓ１４０７の処理などを行う制御部１２１１、Ｓ２３０１−Ｓ２３０４の処理などを行う制御部２１０３も、計測手段の一例として挙げることができる。また、Ｓ２８０１−Ｓ２８０３の処理などを行うプロセッサ２４１１、Ｓ３３０１−Ｓ３３０４の処理などを行う制御部３００１も、計測手段の一例として挙げることができる。【０２５６】
また、Ｓ１００４−Ｓ１００６の処理などを行う制御部９０１、Ｓ１３０４−Ｓ１３０７の処理などを行う制御部１２１１は、制御手段の一例として挙げることができる。同様に、Ｓ１６０４−Ｓ１６０６の処理などを行う制御部１５１１、Ｓ１９０４−Ｓ１９０６の処理などを行う制御部１７１１も、制御手段の一例として挙げることができる。また、Ｓ２２０７−Ｓ２２０９の処理などを行う制御部２１０３、Ｓ２７０１−Ｓ２７０６の処理などを行うプロセッサ２４１１、Ｓ３２０４−Ｓ３２０６の処理などを行う制御部３００１も、制御手段の一例として挙げることができる。【０２５７】
以上に説明したノード７１０は、例えば、ネットワーク構成がトーラス型またはメッシュ型の場合、パケットサイズを式（１）によって求める。すなわち、ノード７１０は、宛先ノードまでのホップ数が多いほど、パケットサイズを大きくする。この場合、宛先ノードまでのホップ数が多いほど、パケットサイズ比が大きくなる。【０２５８】
一般に、ネットワーク構成がトーラス型またはメッシュ型の場合、宛先ノードまでのホップ数が多いほど、パケット数比は低下する。しかし、ノード７１０は、宛先ノードまでのホップ数が多いほど、パケットサイズ比を大きくする。その結果、ノード７１０は、自ノードから宛先ノードまでの送信パケットの到着時間と、他ノードから宛先ノードまでの送信パケットの到着時間とを均一化するように動作する。【０２５９】
ノード７１１〜ノード７１６についても、ノード７１０と同様の動作をする。
その結果、ノード７１０〜ノード７１６は、集団通信などで一部のスイッチに通信が集中してパケット数比が下がっても、自ノードから宛先ノードまでの送信パケットの到着時間と、他ノードから宛先ノードまでの送信パケットの到着時間とを均一化するように動作する。【０２６０】
また、ノード７１０は、ネットワーク構成がメッシュ型の場合、宛先ノードまでのホップ数が１でないとき、例えば、図５に示したノードＮ０とＮ７の状態のように宛先ノードと同じスイッチと接続していないとき、パケットサイズを式（３）によって求める。この場合、ノード７１０は、パケットサイズを大きくする。【０２６１】
一般に、ネットワーク構成がメッシュ型の場合、宛先ノードが接続するスイッチと同じスイッチに直接接続するノード以外のノードのパケット数比は低下する。これは、図５で例示したとおりである。【０２６２】
しかし、ノード７１０は、ネットワーク構成がメッシュ型の場合で、宛先ノードと同じスイッチと接続していないとき、パケットサイズ比を大きくする。その結果、ノード７１０は、自ノードから宛先ノードまでの送信パケットの到着時間と、他ノードから宛先ノードまでの送信パケットの到着時間とを均一化するように動作する。【０２６３】
ノード７１１〜ノード７１６についても、ネットワーク構成がメッシュ型の場合で、宛先ノードと同じスイッチと接続していないとき、ノード７１０と同様の動作をする。
その結果、ノード７１０〜ノード７１６は、ネットワーク構成がメッシュ型の場合に、宛先ノードが接続するスイッチに直接接続するノード以外のノードのパケット数比が下がっても、自ノードから宛先ノードまでの送信パケットの到着時間と、他ノードから宛先ノードまでの送信パケットの到着時間とを均一化できる。【０２６４】
ノード１５００または１７００を使用した並列計算機７００の場合も、ノード７１０〜ノード７１６を使用した並列計算機７００と同様に動作する。したがって、ノード１５００または１７００を使用した並列計算機７００は、集団通信などのように、一部のノード間に通信が集中する場合でも通信性能を低下しないノード間通信を行うことが可能となる。さらに、ノード１５００または１７００並列計算機７００は、ネットワーク構成がメッシュ型である場合での集団通信であっても、通信性能を低下することなくノード間通信を行うことが可能となる。【０２６５】
ノード１２００は、例えば、ネットワーク構成がトーラス型またはメッシュ型の場合、パケットサイズを式（５）によって求める。すなわち、ノード１２００は、宛先ノードまでのホップ数が多いほど、パケット送信間隔を小さくする。ここで、パケットサイズ比を、一定時間に、集団通信の送信元である各ノードが送信するパケットの総量の比率と考えると、パケット送信間隔が小さくなるほど、パケットサイズ比が大きくなる。【０２６６】
一般に、ネットワーク構成がトーラス型またはメッシュ型の場合、宛先ノードまでのホップ数が多いほど、パケット数比は低下する。しかし、ノード１２００は、宛先ノードまでのホップ数が多いほど、パケットサイズ比を大きくする。その結果、ノード１２００は、自ノードから宛先ノードまでの送信パケットの到着時間と、他ノードから宛先ノードまでの送信パケットの到着時間とを均一化するように動作する。【０２６７】
また、ノード１２００は、ネットワーク構成がメッシュ型の場合、宛先ノードまでのホップ数が１でないとき、例えば、図５に示したノードＮ０とＮ７の状態のように宛先ノードと同じスイッチと接続していないとき、ステップＳ１４０５によって求める。この場合、ノード１２００は、パケット送信間隔を通常の通信で使用する既定値より小さくする。【０２６８】
一般に、ネットワーク構成がメッシュ型の場合、宛先ノードが接続するスイッチと同じスイッチに直接接続するノード以外のノードのパケット数比は低下する。これは、図５で例示したとおりである。【０２６９】
しかし、ノード１２００は、ネットワーク構成がメッシュ型の場合で、宛先ノードと同じスイッチと接続していないとき、パケット送信間隔を小さくすることにより、パケットサイズ比を大きくする。その結果、ノード１２００は、自ノードから宛先ノードまでの送信パケットの到着時間と、他ノードから宛先ノードまでの送信パケットの到着時間とを均一化するように動作する。【０２７０】
ノード２０２０は、パケットサイズを式（１０）によって求める。すなわち、ノード２０２０は、計数した応答時間が大きいほど、パケットサイズを大きくする。この場合、計数した応答時間が大きいほど、パケットサイズ比が大きくなる。【０２７１】
一般に、計測した応答時間が大きいほど、通信経路中のスイッチでの調停の結果、パケット数比が低下していると考えられる。しかし、ノード２０２０は、計測した応答時間が大きいほど、パケットサイズ比を大きくする。その結果、ノード２０２０は、自ノードから宛先ノードまでの送信パケットの到着時間と、他ノードから宛先ノードまでの送信パケットの到着時間とを均一化できる。【０２７２】
ノード２４１０は、パケットサイズを式（１２）によって求める。すなわち、ノード２４１０は、宛先ノードへ送信するパケットの待ち時間の平均値が大きいほど、パケットサイズを大きくする。この場合、宛先ノードへ送信するパケットの待ち時間の平均値が大きいほど、パケットサイズ比が大きくなる。【０２７３】
一般に、宛先ノードへ送信するパケットの待ち時間の平均値が大きいほど、通信経路中のスイッチでの調停の結果、パケット数比が低下していると考えられる。しかし、ノード２４１０は、宛先ノードへ送信するパケットの待ち時間の平均値が大きいほど、パケットサイズ比を大きくする。その結果、ノード２４１０は、自ノードから宛先ノードまでの送信パケットの到着時間と、他ノードから宛先ノードまでの送信パケットの到着時間とを均一化できる。【０２７４】
ノード２９１０を使用した並列計算機２４００の場合も、ノード２４１０を使用した並列計算機２４００と同様の動作となる。
以上のように、本実施例に係る並列計算機を使用することにより、宛先ノードへのデータの到着時間を均一化したノード間通信を行うことが可能となる。
【図１】
2012127625.tif 000003
【図２】
2012127625.tif 000004
【図３】
2012127625.tif 000005
【図４】
2012127625.tif 000006
【図５】
2012127625.tif 000007
【図６】
2012127625.tif 000008
【図７】
2012127625.tif 000009
【図８】
2012127625.tif 000010
【図９】
2012127625.tif 000011
【図１０】
2012127625.tif 000012
【図１１】
2012127625.tif 000013
【図１２】
2012127625.tif 000014
【図１３】
2012127625.tif 000015
【図１４】
2012127625.tif 000016
【図１５】
2012127625.tif 000017
【図１６】
2012127625.tif 000018
【図１７】
2012127625.tif 000019
【図１８】
2012127625.tif 000020
【図１９】
2012127625.tif 000021
【図２０】
2012127625.tif 000022
【図２１】
2012127625.tif 000023
【図２２】
2012127625.tif 000024
【図２３】
2012127625.tif 000025
【図２４】
2012127625.tif 000026
【図２５】
2012127625.tif 000027
【図２６】
2012127625.tif 000028
【図２７】
2012127625.tif 000029
【図２８】
2012127625.tif 000030
【図２９】
2012127625.tif 000031
【図３０】
2012127625.tif 000032
【図３１】
2012127625.tif 000033
【図３２】
2012127625.tif 000034
【図３３】
2012127625.tif 000035
【図３４】
2012127625.tif 000036
【図３５】
2012127625.tif 000037
【図３６】
2012127625.tif 000038
【図３７】
2012127625.tif 000039
【図３８】
2012127625.tif 000040
【図３９】
2012127625.tif 000041
【図４０】
2012127625.tif 000042
【図４１】
2012127625.tif 000043
【図４２】
2012127625.tif 000044
【図４３】
2012127625.tif 000045
【図４４】
2012127625.tif 000046
【図４５】
2012127625.tif 000047
【手続補正書】
【提出日】平成25年10月3日(2013.10.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
演算処理を行う複数のノードを有し、該ノード間を互いに通信可能に接続する並列計算機において、
前記ノードに、
前記ノード間の通信形態に基づいて、各宛先ノードまでの通信帯域幅を計測する計測手段と、
前記計測手段が計測した通信帯域幅にしたがって、宛先ノードに送出するパケットサイズを制御する制御手段と、
を備える並列計算機。
【請求項２】
前記計測手段は、通信元である第１のノードと、該第１のノードの通信先である第２のノードとの間の通信経路に介在するパケットの転送手段７２６の数に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１に記載の並列計算機。
【請求項３】
前記計測手段は、通信元である第１のノードが、該第１のノードの通信先である第２のノードにパケットを送信してから、該パケットに対する応答パケットを前記第２のノードから受信するまでの応答時間に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１に記載の並列計算機。
【請求項４】
前記計測手段は、自身に接続された転送手段からパケットを受信してから、自身に接続された他の転送手段に該パケットを転送するまでの待ち時間を取得し、該待ち時間に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項１に記載の並列計算機。
【請求項５】
前記制御手段は、前記計測手段が計測する宛先ノードとの間の通信帯域幅に応じて、前記ノードが前記宛先ノードに送信するパケットのサイズを大きくする、
ことを特徴とする請求項１に記載の並列計算機。
【請求項６】
前記制御手段は、前記計測手段が計測する宛先ノードとの間の通信帯域幅に応じて、前記ノードが前記宛先ノードにパケットを送信する送信間隔を大きくする、
ことを特徴とする請求項１に記載の並列計算機。
を備える並列計算機。
【請求項７】
演算処理を行う複数のノードを有し、該ノード間を互いに通信可能に接続する並列計算機において、前記ノードの通信を制御する通信制御装置であって、
前記ノード間の通信形態に基づいて、ノード間の通信帯域幅を計測する計測手段と、
前記計測手段の計測結果にしたがって、ノード間で送信されるパケットサイズを制御する制御手段と、
を備える通信制御装置。
【請求項８】
前記計測手段は、通信元ノードと、該第１のノードの通信先ノードとの間の通信経路に介在するパケットの転送手段の数に基づいて、前記通信帯域幅を計測する、
ことを特徴とする請求項７に記載の通信制御装置。
【請求項９】
演算処理を行う複数のノードを有し、該ノード間を互いに通信可能に接続する並列計算機において、前記ノードの通信を制御する通信制御方法であって、
前記ノード間の通信形態に基づいて、通信帯域幅を計測し、
前記計測結果にしたがって、パケットサイズを制御する、
通信制御方法。
【国際調査報告】
2012127625.tif 000048
2012127625.tif 000049