(57)【要約】      （修正有）【課題】大容量の入力バッファメモリを必要とせずにデータを送信する方法並びに対応するコンピュータプログラム及びシステムを提供する。【解決手段】システムにおいて、複数のスイッチのうちの２つである上流装置２０２から下流装置２０４にデータを送信する方法は、下流装置の同一の入力バッファメモリ２０８を共有する複数の仮想チャネルのうちの１つの仮想チャネルが、入力バッファメモリのメモリロケーションのうち、厳密に現在の上限値よりも小さい数のメモリロケーションを使用している場合に、前記１つの仮想チャネルから１つのデータを送信する工程を含む。方法はさらに、上流装置と下流装置との間の通信レイテンシを測定する工程と、レイテンシから現在の上限値を計算する工程と、を備える。【選択図】図２
2020009417.tif 000002
【特許請求の範囲】
【請求項１】
上流装置から下流装置にデータを送信する方法であって、
前記下流装置の同一の入力バッファメモリを共有する複数の仮想チャネルのうちの１つの仮想チャネルが、前記入力バッファメモリのメモリロケーションのうち、厳密に現在の上限値よりも小さい数のメモリロケーションを使用している場合に、前記１つの仮想チャネルから１つのデータを送信する工程を備える方法において、
前記上流装置と前記下流装置との間の通信レイテンシを測定する工程と、
前記レイテンシから前記現在の上限値を計算する工程と、
をさらに備えることを特徴とする方法。
【請求項２】
前記レイテンシを測定する工程は、前記上流装置と前記下流装置との間でメッセージを交換するのに要した時間を計測する工程を含む、請求項１に記載の方法。
【請求項３】
前記入力バッファメモリの稼働率を決定する工程をさらに備え、
前記現在の上限値が前記レイテンシ及び前記稼働率から計算される、請求項１又は２に記載の方法。
【請求項４】
前記現在の上限値を計算する工程は、
前記レイテンシから複数の選択可能な上限値を計算する工程と、
前記稼働率に基づいて前記複数の選択可能な上限値のうちの１つを前記現在の上限値として選択する工程と、
を含む、請求項３に記載の方法。
【請求項５】
前記複数の選択可能な上限値はそれぞれ稼働率の複数の隣接するインターバルに関連付けられ、前記選択された選択可能な上限値はその範囲内に前記決定された稼働率を含む、請求項４に記載の方法。
【請求項６】
互いに隣接する下方インターバルと上方インターバルとの境界となる閾値が、前記選択された選択可能な上限値が前記下方インターバルに関連付けられた上限値であるときに高い値を取り、前記選択された選択可能な上限値が前記上方インターバルに関連付けられた上限値であるときに低い値を取り、当該低い値は前記高い値より低い値である、請求項５に記載の方法。
【請求項７】
前記レイテンシから各仮想チャネルのために確保されるメモリロケーションの数を計算する工程をさらに備え、
前記１つの仮想チャネルが厳密に前記上限値よりも小さい数のメモリロケーションを使用しており、かつ前記入力バッファメモリが、確保されているが未使用であるメモリロケーションの数のすべての仮想チャネルについての合計よりも多くの未使用のメモリロケーションを有している場合に、前記１つのデータが送信される、請求項１から６のいずれか１項に記載の方法。
【請求項８】
前記上流装置及び前記下流装置は、
ノードと、
前記ノードの相互接続ネットワークであって、スイッチとコミュニケーションリンクとを含み、当該コミュニケーションリンクは前記スイッチ間の接続及び前記スイッチと前記ノードとの接続を行う、相互接続ネットワークと、
を含むシステムに属し、
前記上流装置及び前記下流装置の各々は、前記ノードの一つ又は前記スイッチの一つのいずれかである、請求項１から７のいずれか１項に記載の方法。
【請求項９】
通信ネットワークからダウンロード可能、及び／又はコンピュータ可読媒体に記録可能、及び／又はプロセッサによって実行可能なコンピュータプログラムであって、コンピュータ上で実行されたときに、請求項１から８のいずれか１項に記載の方法の各工程を実行するための命令を含む、コンピュータプログラム。
【請求項１０】
データを送信するためのシステムであって、
入力バッファメモリを含む下流装置と、
前記入力バッファメモリを共有する複数の仮想チャネルのうちの１つの仮想チャネルが、前記入力バッファメモリのメモリロケーションのうち、厳密に現在の上限値よりも小さい数のメモリロケーションを使用している場合に、前記１つの仮想チャネルから１つのデータを送信するように構成された上流装置と、
前記上流装置と前記下流装置との間の通信レイテンシを測定する手段と、
前記レイテンシから前記現在の上限値を計算する手段と、
を備えるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータを送信する方法、並びにそれに対応するコンピュータプログラム及びシステムに関する。
【０００２】
本発明は特に、上流装置から下流装置にデータを送信する方法であって、前記下流装置の同一の入力バッファメモリを共有する複数の仮想チャネルのうちの１つの仮想チャネルが、前記入力バッファメモリのメモリロケーションのうち、厳密に現在の上限値よりも小さい数のメモリロケーションを使用している場合に、前記１つの仮想チャネルから１つのデータを送信する工程を備える方法に適用される。
【背景技術】
【０００３】
例えば、前記上流装置及び前記下流装置は、ノードと、前記ノードの相互接続ネットワークであって、スイッチとコミュニケーションリンクとを含み、当該コミュニケーションリンクは前記スイッチ間の接続及び前記スイッチと前記ノードとの接続を行う、相互接続ネットワークと、を含むシステムに属する。前記上流装置及び前記下流装置の各々は、前記ノードの一つ又は前記スイッチの一つのいずれかである。前記スイッチ及び前記ノードは通信リンクが接続された接続ポートを有する。
【０００４】
このフレームワークにおいて、システム内に存在するすべての入力バッファメモリについて、前記上限値を同一の値に設定することが知られている。この値は大きな値となるよう選択され、よって、各仮想チャネルがその傾向において十分なメモリロケーションを有し、各仮想チャネルのデータを円滑に送信できるようになっている。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
この解決法の問題点は大容量の入力バッファメモリを必要とすることである。
【０００６】
そこで、この問題点及び制約の少なくとも一部を解決できる、データを送信する方法が求められている。
【課題を解決するための手段】
【０００７】
よって、本発明の目的は、上流装置から下流装置にデータを送信する方法であって、前記下流装置の同一の入力バッファメモリを共有する複数の仮想チャネルのうちの１つの仮想チャネルが、前記入力バッファメモリのメモリロケーションのうち、厳密に現在の上限値よりも小さい数のメモリロケーションを使用している場合に、前記１つの仮想チャネルから１つのデータを送信する工程を備える方法において、前記上流装置と前記下流装置との間の通信レイテンシを測定する工程と、前記レイテンシから前記現在の上限値を計算する工程と、をさらに備えることを特徴とする方法を提供することである。
【０００８】
実際、通信リンクの長さはシステムのノード間で一定ではない。本発明により、上流装置と下流装置の対ごとに異なる上限値を計算することが可能になる。この上限値は、通信リンクの実際の長さに依存する通信レイテンシにしたがって可能な限り最善の値として計算され、それによって、高性能を維持しつつ仮想チャネルごとに必要な量のメモリのみを使用することが可能になる。
【０００９】
また、前記レイテンシを測定する工程は、前記上流装置と前記下流装置との間でメッセージを交換するのに要した時間を計測することを含んでもよい。
【００１０】
また、前記方法はさらに、前記入力バッファメモリの稼働率を決定する工程を備えてもよく、前記現在の上限値が前記レイテンシ及び前記稼働率から計算されてもよい、
【００１１】
また、前記現在の上限値を計算する工程は、前記レイテンシから複数の選択可能な上限値を計算する工程と、前記稼働率に基づいて前記複数の選択可能な上限値のうちの１つを前記現在の上限値として選択する工程と、を含んでもよい。
【００１２】
また、前記複数の選択可能な上限値はそれぞれ稼働率の複数の隣接するインターバルに関連付けられ、前記選択された選択可能な上限値はその範囲内に前記決定された稼働率を含んでもよい。
【００１３】
また、互いに隣接する下方インターバルと上方インターバルとの境界となる閾値が、前記選択された選択可能な上限値が前記下方インターバルに関連付けられた上限値であるときに高い値を取り、前記選択された選択可能な上限値が前記上方インターバルに関連付けられた上限値であるときに低い値を取り、当該低い値は前記高い値より低い値であってもよい。
【００１４】
また、前記方法はさらに、前記レイテンシから各仮想チャネルのために確保されるメモリロケーションの数を計算する工程を備えてもよく、前記１つの仮想チャネルが厳密に前記上限値よりも小さい数のメモリロケーションを使用しており、かつ前記入力バッファメモリが、確保されているが未使用であるメモリロケーションの数のすべての仮想チャネルについての合計よりも多くの未使用のメモリロケーションを有している場合に、前記１つのデータが送信されてもよい。
【００１５】
また、前記上流装置と前記下流装置は、ノードと、前記ノードの相互接続ネットワークであって、スイッチとコミュニケーションリンクとを含み、当該コミュニケーションリンクは前記スイッチ間の接続及び前記スイッチと前記ノードとの接続を行う、相互接続ネットワークと、を含むシステムに属し、前記上流装置及び前記下流装置の各々は、前記ノードの一つ又は前記スイッチの一つのいずれかであってもよい。
【００１６】
本発明の別の目的は、通信ネットワークからダウンロード可能、及び／又はコンピュータ可読媒体に記録可能、及び／又はプロセッサによって実行可能なコンピュータプログラムであって、コンピュータ上で実行されたときに、本発明に記載の方法の各工程を実行するための命令を含む、コンピュータプログラムを提供することである。
【００１７】
本発明の別の目的は、データを送信するためのシステムであって、入力バッファメモリを含む下流装置と、前記入力バッファメモリを共有する複数の仮想チャネルのうちの１つの仮想チャネルが、前記入力バッファメモリのメモリロケーションのうち、厳密に現在の上限値よりも小さい数のメモリロケーションを使用している場合に、前記１つの仮想チャネルから１つのデータを送信するように構成された上流装置と、前記上流装置と前記下流装置との間の通信レイテンシを測定する手段と、前記レイテンシから前記現在の上限値を計算する手段と、を備えるシステムを提供することである。
【００１８】
本発明は、単に例として提示される以下の説明によってよりよく理解されるであろう。
【図面の簡単な説明】
【００１９】
【図１】本発明の一実施形態によるシステムの全体構造を示す概略図である。
【図２】図１のシステムの上流装置及び下流装置の全体構造を示す概略図である。
【図３】本発明の一実施形態による、図２の上流装置から下流装置にデータを送信する方法の連続的な工程を示す図である。
【発明を実施するための形態】
【００２０】
図１を参照して、本発明を実装するシステム１００を説明する。
【００２１】
システム１００は複数の独立したコンピュータ装置１０２をグループ化したものであり、外部からは非常に高い計算能力を有する単一のコンピュータ、いわゆる高性能処理コンピュータもしくはスーパーコンピュータ、又はＨＰＣ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）コンピュータのように見える。
【００２２】
各コンピュータ装置１０２は少なくとも１つのネットワークインターフェースを有する。各コンピュータ装置１０２はさらに、中央演算処理装置、当該中央演算処理装置が処理する命令が記録されるメインメモリ（これらを有するコンピュータ装置１０２を以下で「計算用コンピュータ装置」という）、及び／又はデータ記憶装置（これを有するコンピュータ装置１０２を以下で「入力／出力（ＩＯ）用コンピュータ装置」という）を備えることができる。データ記憶装置は、例えば、計算用コンピュータ装置によって使用及び／又は生成されるデータの記録及び／又は復旧のための１つ以上のハードドライブなどの大容量メモリである。
【００２３】
各ネットワークインターフェースはそれぞれシステム１００のノード１０６を形成する。複数のネットワークインターフェース（すなわち複数のノード１０６）は同一のコンピュータ装置１０２に属してもよく、あるいは、説明する例におけるように、各コンピュータ装置１０２はノード１０６の１つを形成する単一のネットワークインターフェースのみを含んでもよい。計算用コンピュータ装置１０２のネットワークインターフェースによって形成されるノード１０６は「計算ノード」と呼ばれ、入力／出力用コンピュータ装置１０２のネットワークインターフェースによって形成されるノード１０６は「入力／出力ノード」と呼ばれる。
【００２４】
システム１００はさらに、管理サーバ１０８を含む。管理サーバ１０８は特にシステム１００の使用を望むクライアントとの対話を行うように設計されており、システム１００はクライアントによって単一のコンピュータと見なされる。管理サーバ１０８はさらに、クライアントから受けたタスクを計算用コンピュータ装置間で順番に配分するように設計されている。
【００２５】
このようなシステム１００では、計算用コンピュータ装置の少なくとも一部にわたって、複雑な処理の配分及び／又は並行計算処理の配分が可能である。
【００２６】
システム１００はさらに、ノード１０６の相互接続ネットワーク１１０を含む。
【００２７】
ネットワーク１１０は、スイッチ１１２及びコミュニケーションリンク１１４を含み、コミュニケーションリンク１１４はスイッチ１１２間の接続及びスイッチ１１２とノード１０６との接続を行う。各スイッチ１１２及び各ノード１０６はいくつかの接続ポート（図１においてスイッチ１１２については小さい四角で示す）を有し、各コミュニケーションリンク１１４はスイッチ１１２の接続ポートと他のスイッチ１１２の接続ポートとの間、又はノード１０６の接続ポートとの間を接続する。
【００２８】
システム１００は、ノード１０６、スイッチ１１２、及び通信リンク１１４の相対配置を定義する特定のトポロジを有する。説明する例において、このトポロジは並列一般化ファットツリー（ＰＧＦＴ）のトポロジである。
【００２９】
図２を参照して、上流装置２０２、下流装置２０４、及びそれらを接続する通信リンク１１４を説明する。説明する例において、上流装置２０２及び下流装置２０４は図１のスイッチ１１２のうちの２つである。あるいは、上流装置２０２及び下流装置２０４の一方はノード１０６のうちの１つであってもよい。
【００３０】
説明する例において、ポートと通信リンク１１４は双方向に機能する。よって、各スイッチ１１２及び各ノード１０６はいずれも、下流装置でありかつ上流装置でもある。これらの各ポートは入力ポートであるとともに出力ポートでもあり、以下に説明する上流装置２０２の出力ポート及び下流装置２０４の入力ポートのそれぞれの構成要素のすべてを備える。
【００３１】
下流装置２０４の入力ポート２０６には通信リンク１１４が接続され、データの受け取りを行う。入力ポート２０６は所定数Ｋの仮想チャネル及び例えば毎秒２５ＧＢのスループットＤに対応する。入力ポート２０６は入力バッファメモリ２０８を備え、この入力バッファメモリ２０８が有する特定の数のメモリロケーションの各々が単位量のデータを受け取るようになっている。この特定の数を入力バッファメモリ２０８のキャパシティＣという。説明する例において、単位量のデータは３２バイトで構成されるフロー制御単位（ＦＬＩＴ）である。入力バッファメモリ２０８のキャパシティＣは、例えば、４０９６ＦＬＩＴである。
【００３２】
下流装置２０４はさらに、マイクロプロセッサなどの処理装置２１２と、処理装置２１２に作動的に結合されたメモリ２１４とを備え、メモリ２１４は処理装置２１２が実行するための命令からなるコンピュータプログラムを含む。
【００３３】
上流装置２０２の出力ポート２１６には通信リンク１１４が接続される。出力ポート２１６は、入力ポート２０６と同じ所定数Ｋの仮想チャネルと、入力ポート２０６と同じスループットＤに対応する。出力ポート２１６は、Ｋ個の仮想チャネルの各々に使用するクレジットカウンタ２１８1〜２１８Kを備えるとともに、仮想チャネルのすべてによって使用されているメモリロケーションをカウントする入力バッファメモリ２０８の使用カウンタ２２０を備える。よって、入力バッファメモリ２０８は、使用カウンタ２２０の値と入力バッファメモリ２０８のキャパシティＣとの間の比率と等しい稼働率ＴＵを有する。
【００３４】
上流装置２０２はさらに、マイクロプロセッサなどの処理装置２２２と、処理装置２２２に作動的に結合されたメモリ２２４とを備え、メモリ２２４は処理装置２２２が実行するための命令からなるコンピュータプログラムを含む。
【００３５】
このように、説明する例において、上流装置２０２及び下流装置２０４はコンピュータプログラムの形態でソフトウェア手段を備え、このコンピュータプログラムは通信ネットワークからダウンロード可能、及び／又はコンピュータ可読媒体に記録可能、及び／又はプロセッサによって実行可能であり、上流装置２０２及び下流装置２０４によって実行されたときに、以下に説明する方法の各工程を実行するための命令を含む。あるいは、これらの手段の全部または一部は、専用集積回路内のマイクロプログラム式（ｍｉｃｒｏ−ｐｒｏｇｒａｍｍｅｄ）またはマイクロワイヤ式（ｍｉｃｒｏ−ｗｉｒｅｄ）ハードウェア手段であり得る。したがって、別の形態として、上流装置２０２及び下流装置２０４の各々は、同様の動作を実行するためのデジタル回路からのみ構成される（コンピュータプログラムなしの）電子装置であり得る。
【００３６】
さらに、入力バッファメモリ２０８のキャパシティＣ及びスループットＤはメモリ２２４内に記録され、後述の計算に使用できるようになっている。
図３を参照して、上流装置２０２から下流装置２０４にデータを送信する方法３００を説明する。
【００３７】
工程３０２において、上流装置２０２は上流装置２０２と下流装置２０４との間の通信レイテンシ（以下では記号Ｌで表す）を測定する。
【００３８】
説明する例において、システム１００は起動処理中に初期化フェーズを実行するが、このときスイッチ１１２はスイッチ相互の間及びノード１０６との間で初期化メッセージを交換する。これらの交換メッセージを用いて、初期化フェーズ中に上流装置２０２と下流装置２０４との間でメッセージを交換するのに要した時間を計測することによって、レイテンシＬが決定される。より正確には、上流装置２０２は通信リンク１１４を介して第１の初期化メッセージを下流装置２０４に送信する。下流装置２０４は第１の初期化メッセージを受信し、それに応答して、やはり通信リンク１１４を介して第２の初期化メッセージを上流装置２０２に送信する。上流装置２０２はこの第２の初期化メッセージを受信する。この受信は第１の初期化メッセージの送信からある一定の時間だけ間隔があり、この時間を上流装置２０２が計測する。説明する例において、レイテンシＬはこの計測された時間に対応する。
【００３９】
工程３０４において、上流装置２０２は入力バッファメモリ２０８の稼働率ＴＵの複数の隣接するインターバルの各々について、選択可能な上限値をレイテンシＬから計算する。後述するように、これらの選択可能な上限値の各々は、各仮想チャネルによって使用可能なメモリロケーションの最大数を表す現在の上限値Ｐを形成するために選択される。
【００４０】
例えば、これらの選択可能な上限値の各々は、レイテンシＬ及び通信リンク１１４が接続された出力ポートのスループットＤから計算される。
【００４１】
より好ましくは、選択可能な上限値の各々は、入力バッファメモリ２０８のキャパシティＣを仮想チャネルの数Ｋで除算した値と等しい最小値を有する。例えば、キャパシティＣが４０９６メモリロケーションであり、仮想チャネルの数Ｋが２０である場合、選択可能な上限値の最小値は２０５メモリロケーションである。
【００４２】
より好ましくは、稼働率が上昇する方向において、１つのインターバルから次のインターバルに移るにしたがって、選択可能な上限値は低下する。
【００４３】
説明する例において、２つのインターバルが用いられる。第１のインターバルは７５％以下の稼働率ＴＵに対応し、第２のインターバルは厳密に７５％より大きい稼働率ＴＵに対応する。第１のインターバルは以下の式で表される例における第１の選択可能な上限値Ｐ１に関連付けられる。
Ｐ１＝ｍａｘ（Ｌ×Ｄ；  Ｃ／Ｋ）
ここで、Ｌはレイテンシ、Ｄはスループット（ＦＬＩＴ数で表す）、Ｃは入力バッファメモリ２０８のキャパシティ、Ｋは仮想チャネルの数である。例えば、測定されたレイテンシＬが４００ｎｓであり、スループット（バイト数で表す）が２５ＧＢ／ｓ（すなわち０．７８１２５×１０9ＦＬＩＴ／ｓ）である場合、第１の選択可能な上限値Ｐ１は３１３である。第２のインターバルは以下の式で表される例における第２の選択可能な上限値Ｐ２に関連付けられる。
Ｐ２＝ｍａｘ（５０％×Ｌ×Ｄ；  Ｃ／Ｋ）
ここで、Ｌはレイテンシ、Ｄはスループット（ＦＬＩＴ数で表す）、Ｃは入力バッファメモリ２０８のキャパシティ、Ｋは仮想チャネルの数である。例えば、測定されたレイテンシＬが４００ｎｓであり、スループット（バイト数で表す）が２５ＧＢ／ｓ（すなわち０．７８１２５×１０9ＦＬＩＴ／ｓ）である場合、５０％×Ｌ×Ｄは１５７であり、第２の選択可能な上限値Ｐ２は最小値の２０５である。
【００４４】
稼働率ＴＵが上昇する方向において、２つの隣接するインターバルのうちの一方（下方インターバルという）が他方（上方インターバルという）の下側に位置しているが、閾値がこれら２つのインターバルの境界となることが理解されよう。説明する例において、２つのインターバルを分ける閾値は７５％であり、これに固定されている。しかしながら、他の実施形態において、この閾値はヒステリシスの現象にしたがって変化し得る。より正確には、選択された選択可能な上限値が下方インターバルに関連付けられたものであるとき、閾値は高い値を取り、選択された選択可能な上限値が上方インターバルに関連付けられたものであるとき、閾値は低い値を取る。この低い値は上記高い値より低い値である。例えば、選択可能な上限値Ｐ１が選択されたとき、第２のインターバルに移るための閾値は８０％であり、選択可能な上限値Ｐ２が選択されたとき、下方インターバルに移るための閾値は７０％である。このヒステリシスの現象によって、稼働率ＴＵが閾値周辺を変動するときに現在の上限値Ｐが頻繁に変化することを回避できる。
【００４５】
工程３０６において、上流装置２０２は仮想チャネルごとに確保されるメモリロケーションの数（この数はＮRと表す）をレイテンシＬから計算する。説明する例において、以下の式を用いる。
ＮR＝１０％×Ｌ×Ｄ
ここで、Ｌはレイテンシ、Ｄはスループット（ＦＬＩＴ数で表す）である。
【００４６】
工程３０８において、上流装置２０２は第１の選択可能な上限値Ｐ１を現在の上限値Ｐとして選択する。説明する例において、この工程は各クレジットカウンタ２１８1〜２１８Kを第１の数Ｐ１に初期化することによって実行される。
【００４７】
工程３１０において、上流装置２０２は使用カウンタ２２０をゼロに初期化する。
【００４８】
その後、上流装置２０２が通信リンク１１４を介して下流装置２０４にＦＬＩＴを送信しようとする度に、以下の第１の工程ループが実行される。ここで、送信するＦＬＩＴの仮想チャネルをｋ１で表す。
【００４９】
工程３１２において、上流装置２０２は、例えば入力バッファメモリ２０８のキャパシティＣ及び使用カウンタ２２０を用いて、入力バッファメモリ２０８の稼働率ＴＵを決定する。
【００５０】
工程３１４において、上流装置２０２は決定された稼働率ＴＵが含まれるインターバルに関連付けられた数を現在の上限値Ｐとして選択する。
【００５１】
工程３１６において、上限値Ｐが工程３１４で変化した場合、上流装置２０２は変化前の上限値Ｐと変化後の上限値Ｐの差を計算し、この差を各クレジットカウンタ２１８１〜２１８Ｋに適用する。
【００５２】
例えば、現在の上限値Ｐが工程３１４の前には選択可能な上限値Ｐ２であり、工程３１４の終了時には選択可能な上限値Ｐ１である場合、再び上述の例によれば、その差はＰ１−Ｐ２、すなわち３１３−２０５＝１０８となる。よって、各クレジットカウンタ２１８1〜２１８Kに１０８のクレジットが加算される。
【００５３】
あるいは、現在の上限値Ｐが工程３１４の前には選択可能な上限値Ｐ１であり、工程３１４の終了時には選択可能な上限値Ｐ２である場合、やはり上述の例によれば、その差はＰ２−Ｐ１、すなわち−１０８となる。よって、各クレジットカウンタ２１８１〜２１８Ｋから１０８のクレジットが減算される。これによってクレジットカウンタが負の値を持つこともあり得る。その場合、対応する仮想チャネルが現在の上限値Ｐを超過しており、よって入力バッファメモリ２０８のメモリロケーションを多く使い過ぎていることを意味する。
【００５４】
工程３１８において、上流装置２０２は処理対象のＦＬＩＴの仮想チャネルが厳密に現在の上限値Ｐよりも小さい数のメモリロケーションを使用しているかを確認する。
【００５５】
説明する例において、この工程は対応するクレジットカウンタ２１８kが厳密にゼロより大きいことを確認することによって実行される。
【００５６】
工程３２０において、上流装置２０２は、確保されているが未使用であるメモリロケーションの数のすべての仮想チャネルについての合計よりも多くの未使用のメモリロケーションを入力バッファメモリ２０８が有しているかを確認する。
【００５７】
説明する例において、この工程は各仮想チャネルについてこの仮想チャネルが使用しているメモリロケーションの数（この数をＮU（ｋ）と表す。ｋは仮想チャネルを表す）を、例えば以下の式を用いて計算することによって実行される。
ＮU（ｋ）＝Ｐ−Ｃ（ｋ）
ここで、Ｃ（ｋ）はクレジットカウンタ２１８kの値である。その後、この仮想チャネルのために確保されているが未使用であるメモリロケーションの数（ＮRL（ｋ）と表す）を、確保されているメモリロケーションの数ＮRからこの仮想チャネルが使用しているメモリロケーションの数を減算し、この結果をゼロ以上に限定することによって計算する。例えば、以下の式を用いる。
ＮRL（ｋ）＝ｍａｘ（ＮR−ＮU（ｋ）；  ０）
その後、確保されているが未使用であるメモリロケーションの数の合計（すなわち、すべての仮想チャネルについての合計であり、ＮRLで表す）を、各仮想チャネルの確保されているが未使用であるメモリロケーションの数をすべての仮想チャネルについて加算することによって計算する。例えば、以下の式を用いる。
ＮRL＝ΣkＮRL（ｋ）
入力バッファメモリ２０８の未使用のメモリロケーションの数は、例えば以下の式で与えられる。
ＮL＝Ｃ−ＥU
ここで、ＥUは使用されているメモリロケーションの数であり、使用カウンタ２２０によって与えられる。その後、確保されているが未使用であるメモリロケーションの合計数を、入力バッファメモリ２０８内の未使用のメモリロケーションの数と比較する。
【００５８】
工程３２２において、仮想チャネルｋ１が厳密に現在の上限値Ｐより小さい数のメモリロケーションを使用しており、かつ入力バッファメモリ２０８が、確保されているが未使用であるメモリロケーションの数のすべての仮想チャネルについての合計よりも多くの未使用のメモリロケーションを有している場合に、上流装置２０２はＦＬＩＴ  Ｆ１を送信し、クレジットカウンタ２１８k1をデクリメントし、使用カウンタ２２０をインクリメントする。それ以外の場合は、上流装置２０２はＦＬＩＴ  Ｆ１を送信せず、工程３１２に戻って他のＦＬＩＴの処理を行う。
【００５９】
工程３２４において、下流装置２０４はＦＬＩＴ  Ｆ１を受信して入力バッファメモリ２０８内に記録する。
【００６０】
並行して、例えば他の装置に送信するために下流装置２０４がその入力バッファメモリ２０８からＦＬＩＴ  Ｆ２を削除する度に、以下の第２の工程ループが実行される（ＦＬＩＴ  Ｆ２の仮想チャネルをｋ２で表す）。
【００６１】
工程３２６において、下流装置２０４はその入力バッファメモリ２０８からＦＬＩＴ  Ｆ２を削除する。
【００６２】
工程３２８において、下流装置２０４は仮想チャネルｋ２のクレジットを通信リンク１１４を介して上流装置２０２に送信する。
【００６３】
工程３３０において、上流装置２０２は仮想チャネルｋ２のクレジットを受信し、仮想チャネルｋ２に対応するクレジットカウンタ２１８k2をインクリメントし、使用カウンタ２２０をデクリメントする。
【００６４】
なお、他の実施形態においては、現在の上限値が仮想チャネルごとに異なることもあり得る。例えば、各仮想チャネルの現在の上限値はさらに仮想チャネルの使用履歴から計算することもできる。これによって、過去の使用頻度が低い仮想チャネルの上限値を低くし、逆に使用頻度が高い仮想チャネルの上限値を高くすることができる。
【００６５】
このような方法により、高性能を維持しつつ入力バッファメモリの量を低減することが可能になる。
【００６６】
さらに、本発明は上述の実施形態に限定されないことに留意されたい。本明細書の記載に鑑み、上述の実施形態には種々の変更が可能であることが当業者には明らかであろう。上記の本発明の詳細な説明において、使用された用語は本発明をこの説明で開示された実施形態に限定するものとして解釈されるべきではなく、当業者がその一般的な知識を本明細書の内容の実施に適用する範囲内で予見されるすべての均等物を含むものとして解釈されるべきである。
【図１】
2020009417.tif 000003
【図２】
2020009417.tif 000004
【図３】
2020009417.tif 000005
【外国語明細書】
2020009417000001.pdf