(57)【要約】【課題】読み出し効率を向上させることができるようにすることである。【解決手段】データ転送装置は、第１の転送要求に対して末尾隣接情報を設定し、第２の転送要求に対して先頭隣接情報を設定する分割部（２０１）と、第１の転送要求に基づく読み出し末尾アドレスに対応する第１の読み出し要求に対して第１の隣接情報を設定する第１の要求出力部（２０２ａ）と、第２の転送要求に基づく読み出し先頭アドレスに対応する第２の読み出し要求に対して第２の隣接情報を設定する第２の要求出力部（２０２ｂ）と、第１の読み出し要求に応答して読み出された第１の読み出しデータを保持するとともに、第１の読み出しデータを第１の要求出力部に出力し、保持している第１の読み出しデータを第２の要求出力部に出力する第１のバッファ部（５０１ａ）を有する。【選択図】図５
2019091333.tif 000002
【特許請求の範囲】
【請求項１】
第１のメモリから第２のメモリにデータを転送するデータ転送装置であって、
データ転送要求を第１の転送要求及び第２の転送要求を含む複数の転送要求に分割し、前記第１の転送要求に基づく読み出しデータの末尾アドレスが前記第１のメモリにおける前記第２の転送要求に基づく読み出しデータの先頭アドレスに隣接する場合、前記第１の転送要求に対して末尾隣接情報を設定するとともに、前記第２の転送要求に対して先頭隣接情報を設定する分割部と、
前記第１の転送要求に前記末尾隣接情報が設定されている場合、前記第１の転送要求に基づく読み出し末尾アドレスに対応する第１の読み出し要求に対して第１の隣接情報を設定するとともに、前記第１の隣接情報が設定された前記第１の読み出し要求を出力する第１の要求出力部と、
前記第２の転送要求に前記先頭隣接情報が設定されている場合、前記第２の転送要求に基づく読み出し先頭アドレスに対応する第２の読み出し要求に対して第２の隣接情報を設定するとともに、前記第２の隣接情報が設定された前記第２の読み出し要求を出力する第２の要求出力部と、
前記第１の読み出し要求を入力し、前記第１の読み出し要求に前記第１の隣接情報が設定されている場合、前記第１の読み出し要求を前記第１のメモリに対して出力し、前記第１の読み出し要求に応答して前記第１のメモリから読み出された第１の読み出しデータを保持するとともに、前記第１の読み出しデータを前記第１の要求出力部に出力し、前記第２の読み出し要求を入力し、前記第２の読み出し要求に前記第２の隣接情報が設定されている場合、保持している前記第１の読み出しデータを前記第２の要求出力部に出力する第１のバッファ部と
を有することを特徴とするデータ転送装置。
【請求項２】
前記分割部は、前記データ転送要求を第１の転送要求、第２の転送要求及び第３の転送要求を含む複数の転送要求に分割し、前記第２の転送要求に基づく読み出しデータの末尾アドレスが前記第１のメモリにおける前記第３の転送要求に基づく読み出しデータの先頭アドレスに隣接する場合、前記第２の転送要求に対して末尾隣接情報を設定するとともに、前記第３の転送要求に対して先頭隣接情報を設定し、
前記第２の要求出力部は、前記第２の転送要求に前記末尾隣接情報が設定されている場合、前記第２の転送要求に基づく読み出し末尾アドレスに対応する第３の読み出し要求に対して第３の隣接情報を設定するとともに、前記第３の隣接情報が設定された前記第３の読み出し要求を出力し、
前記データ転送装置は、
さらに、前記第３の転送要求に前記先頭隣接情報が設定されている場合、前記第３の転送要求に基づく読み出し先頭アドレスに対応する第４の読み出し要求に対して第４の隣接情報を設定するとともに、前記第４の隣接情報が設定された前記第４の読み出し要求を出力する第３の要求出力部と、
前記第３の読み出し要求を入力し、前記第３の読み出し要求に前記第３の隣接情報が設定されている場合、前記第３の読み出し要求を前記第１のメモリに対して出力し、前記第３の読み出し要求に応答して前記第１のメモリから読み出された第２の読み出しデータを保持するとともに、前記第２の読み出しデータを前記第２の要求出力部に出力し、前記第４の読み出し要求を入力し、前記第４の読み出し要求に前記第４の隣接情報が設定されている場合、保持している前記第２の読み出しデータを前記第３の要求出力部に出力する第２のバッファ部とを有することを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
前記第１のバッファ部は、前記第１の読み出し要求を入力し、前記第１の読み出し要求に前記第１の隣接情報が設定されている場合、前記第１の読み出し要求を前記第１のメモリに対して出力し、前記第２の読み出し要求を入力し、前記第２の読み出し要求に前記第２の隣接情報が設定されている場合、前記第１の読み出し要求に応答して前記第１のメモリから読み出された前記第１の読み出しデータを前記第１の要求出力部及び前記第２の要求出力部に出力することを特徴とする請求項１に記載のデータ転送装置。
【請求項４】
前記第１のバッファ部は、前記第２の読み出し要求に前記第２の隣接情報が設定されている場合、前記第２の読み出し要求を前記第１のメモリに対して出力せず、保持している前記第１の読み出しデータを前記第２の要求出力部に出力することを特徴とする請求項１〜３のいずれか１項に記載のデータ転送装置。
【請求項５】
前記分割部は、前記第１の転送要求に基づく読み出しデータの末尾アドレスが前記第１のメモリにおける前記第２の転送要求に基づく読み出しデータの先頭アドレスに隣接する場合、前記第１の転送要求に対して前記末尾隣接情報及び第１の識別子を設定するとともに、前記第２の転送要求に対して前記先頭隣接情報及び前記第１の識別子を設定し、
前記第１の要求出力部は、前記第１の転送要求に前記末尾隣接情報及び前記第１の識別子が設定されている場合、前記第１の転送要求に基づく読み出し末尾アドレスに対応する第１の読み出し要求に対して前記第１の隣接情報及び前記第１の識別子を設定するとともに、前記第１の隣接情報及び前記第１の識別子が設定された前記第１の読み出し要求を出力し、
前記第２の要求出力部は、前記第２の転送要求に前記先頭隣接情報及び前記第１の識別子が設定されている場合、前記第２の転送要求に基づく読み出し先頭アドレスに対応する第２の読み出し要求に対して前記第２の隣接情報及び前記第１の識別子を設定するとともに、前記第２の隣接情報及び前記第１の識別子が設定された前記第２の読み出し要求を出力し、
前記第１のバッファ部は、前記第１の読み出し要求を入力し、前記第１の読み出し要求に前記第１の隣接情報及び前記第１の識別子が設定されている場合、前記第１の識別子を登録し、前記第１の読み出し要求を前記第１のメモリに対して出力し、前記第１の読み出し要求に応答して前記第１のメモリから読み出された前記第１の読み出しデータを保持するとともに、前記第１の読み出しデータを前記第１の要求出力部に出力し、前記第２の読み出し要求を入力し、前記第２の読み出し要求に前記第２の隣接情報が設定され、かつ前記第２の読み出し要求に設定されている前記第１の識別子が前記登録されている前記第１の識別子と同じ場合、保持している前記第１の読み出しデータを前記第２の要求出力部に出力することを特徴とする請求項１〜４のいずれか１項に記載のデータ転送装置。
【請求項６】
前記第１の要求出力部は、前記第１の転送要求に基づく読み出し先頭アドレスに対応する第５の読み出し要求に対して隣接情報を設定せず、前記第５の読み出し要求を出力し、
前記データ転送装置は、さらに、前記第５の読み出し要求に隣接情報が設定されていない場合、前記第５の読み出し要求を前記第１のメモリに対して出力し、前記第５の読み出し要求に応答して前記第１のメモリから読み出された読み出しデータを前記第１の要求出力部に出力する第３のバッファ部を有することを特徴とする請求項１〜５のいずれか１項に記載のデータ転送装置。
【請求項７】
前記第１の要求出力部は、前記第１の読み出しデータの一部を含む第１のパケットを前記第２のメモリに対して出力し、
前記第２の要求出力部は、前記第１の読み出しデータの他の一部を含む第２のパケットを前記第２のメモリに対して出力することを特徴とする請求項１〜６のいずれか１項に記載のデータ転送装置。
【請求項８】
前記第１のパケット及び前記第２のパケットのペイロード長は、それぞれ、前記第２のメモリの書き込み単位ブロック長であることを特徴とする請求項７に記載のデータ転送装置。
【請求項９】
前記第１のパケット及び前記第２のパケットのペイロード長は、それぞれ、最大転送可能ペイロード長であることを特徴とする請求項７に記載のデータ転送装置。
【請求項１０】
第１のメモリから第２のメモリにデータを転送するデータ転送部を有する演算処理装置であって、
前記データ転送部は、
データ転送要求を第１の転送要求及び第２の転送要求を含む複数の転送要求に分割し、前記第１の転送要求に基づく読み出しデータの末尾アドレスが前記第１のメモリにおける前記第２の転送要求に基づく読み出しデータの先頭アドレスに隣接する場合、前記第１の転送要求に対して末尾隣接情報を設定するとともに、前記第２の転送要求に対して先頭隣接情報を設定する分割部と、
前記第１の転送要求に前記末尾隣接情報が設定されている場合、前記第１の転送要求に基づく読み出し末尾アドレスに対応する第１の読み出し要求に対して第１の隣接情報を設定するとともに、前記第１の隣接情報が設定された前記第１の読み出し要求を出力する第１の要求出力部と、
前記第２の転送要求に前記先頭隣接情報が設定されている場合、前記第２の転送要求に基づく読み出し先頭アドレスに対応する第２の読み出し要求に対して第２の隣接情報を設定するとともに、前記第２の隣接情報が設定された前記第２の読み出し要求を出力する第２の要求出力部と、
前記第１の読み出し要求を入力し、前記第１の読み出し要求に前記第１の隣接情報が設定されている場合、前記第１の読み出し要求を前記第１のメモリに対して出力し、前記第１の読み出し要求に応答して前記第１のメモリから読み出された第１の読み出しデータを保持するとともに、前記第１の読み出しデータを前記第１の要求出力部に出力し、前記第２の読み出し要求を入力し、前記第２の読み出し要求に前記第２の隣接情報が設定されている場合、保持している前記第１の読み出しデータを前記第２の要求出力部に出力する第１のバッファ部と
を有することを特徴とする演算処理装置。
【請求項１１】
第１のメモリから第２のメモリにデータを転送するデータ転送装置のデータ転送方法であって、
前記データ転送装置が有する分割部が、データ転送要求を第１の転送要求及び第２の転送要求を含む複数の転送要求に分割し、前記第１の転送要求に基づく読み出しデータの末尾アドレスが前記第１のメモリにおける前記第２の転送要求に基づく読み出しデータの先頭アドレスに隣接する場合、前記第１の転送要求に対して末尾隣接情報を設定するとともに、前記第２の転送要求に対して先頭隣接情報を設定し、
前記データ転送装置が有する第１の要求出力部が、前記第１の転送要求に前記末尾隣接情報が設定されている場合、前記第１の転送要求に基づく読み出し末尾アドレスに対応する第１の読み出し要求に対して第１の隣接情報を設定するとともに、前記第１の隣接情報が設定された前記第１の読み出し要求を出力し、
前記データ転送装置が有する第２の要求出力部が、前記第２の転送要求に前記先頭隣接情報が設定されている場合、前記第２の転送要求に基づく読み出し先頭アドレスに対応する第２の読み出し要求に対して第２の隣接情報を設定するとともに、前記第２の隣接情報が設定された前記第２の読み出し要求を出力し、
前記データ転送装置が有する第１のバッファ部が、前記第１の読み出し要求を入力し、前記第１の読み出し要求に前記第１の隣接情報が設定されている場合、前記第１の読み出し要求を前記第１のメモリに対して出力し、前記第１の読み出し要求に応答して前記第１のメモリから読み出された第１の読み出しデータを保持するとともに、前記第１の読み出しデータを前記第１の要求出力部に出力し、前記第２の読み出し要求を入力し、前記第２の読み出し要求に前記第２の隣接情報が設定されている場合、保持している前記第１の読み出しデータを前記第２の要求出力部に出力することを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置、演算処理装置及びデータ転送方法に関する。
【背景技術】
【０００２】
複数バイトのバス幅のバスを介して、外部制御手段の制御に基づき転送元に格納された連続データを転送先にＤＭＡ（Direct Memory Access）転送する為の構成を備えたＤＭＡ転送制御装置が知られている（特許文献１参照）。転送パラメータ設定手段は、転送元に格納された連続データの転送元開始アドレス及び転送先の転送先開始アドレス、並びに連続データのデータサイズを外部制御手段からそれぞれ取得して設定する。データシフト手段は、この転送パラメータ設定手段に設定された転送元開始アドレスに基づき、転送元に格納された連続データをバス幅に対するアラインメント境界に合致するようデータシフトさせながら順次読み出して記憶する。そして、データシフト手段は、この記憶された連続データを転送パラメータ設定手段に設定された転送先開始アドレスに基づき、バス幅に対するアラインメント境界に合致するようデータシフトさせながら順次読み出して転送先に格納する。
【０００３】
また、アクセス単位が異なる二種類のメモリの間でデータ転送を行うデータ転送制御装置が知られている（特許文献２参照）。データ転送制御装置は、データの供給側メモリの任意のアドレスを開始アドレスとして順次に任意のデータ長のデータを読み出し、任意のデータ長のデータをデータの格納側メモリの任意のアドレスを開始アドレスとして順次に書き込む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−４３４０号公報
【特許文献２】特開平１０−２２２４６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
メモリには、メモリキャッシュに対応する読み出し単位ブロック毎に読み出しを行うメモリがある。その場合、読み出し単位ブロック内の一部のデータのみを読み出すことができない。そのため、メモリの読み出し効率が低下してしまう場合がある。
【０００６】
１つの側面では、本発明の目的は、メモリの読み出し効率を向上させることができるデータ転送装置、演算処理装置及びデータ転送方法を提供することである。
【課題を解決するための手段】
【０００７】
データ転送装置は、第１のメモリから第２のメモリにデータを転送するデータ転送装置であって、データ転送要求を第１の転送要求及び第２の転送要求を含む複数の転送要求に分割し、前記第１の転送要求に基づく読み出しデータの末尾アドレスが前記第１のメモリにおける前記第２の転送要求に基づく読み出しデータの先頭アドレスに隣接する場合、前記第１の転送要求に対して末尾隣接情報を設定するとともに、前記第２の転送要求に対して先頭隣接情報を設定する分割部と、前記第１の転送要求に前記末尾隣接情報が設定されている場合、前記第１の転送要求に基づく読み出し末尾アドレスに対応する第１の読み出し要求に対して第１の隣接情報を設定するとともに、前記第１の隣接情報が設定された前記第１の読み出し要求を出力する第１の要求出力部と、前記第２の転送要求に前記先頭隣接情報が設定されている場合、前記第２の転送要求に基づく読み出し先頭アドレスに対応する第２の読み出し要求に対して第２の隣接情報を設定するとともに、前記第２の隣接情報が設定された前記第２の読み出し要求を出力する第２の要求出力部と、前記第１の読み出し要求を入力し、前記第１の読み出し要求に前記第１の隣接情報が設定されている場合、前記第１の読み出し要求を前記第１のメモリに対して出力し、前記第１の読み出し要求に応答して前記第１のメモリから読み出された第１の読み出しデータを保持するとともに、前記第１の読み出しデータを前記第１の要求出力部に出力し、前記第２の読み出し要求を入力し、前記第２の読み出し要求に前記第２の隣接情報が設定されている場合、保持している前記第１の読み出しデータを前記第２の要求出力部に出力する第１のバッファ部とを有する。
【発明の効果】
【０００８】
１つの側面では、第１のメモリの読み出し効率を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施形態による演算処理システムの構成例を示す図である。
【図２】図２は、基本技術によるネットワークコントローラの構成例を示す図である。
【図３】図３は、図２のネットワークコントローラのデータ転送方法を説明するための図である。
【図４】図４は、図２のネットワークコントローラの他のデータ転送方法を説明するための図である。
【図５】図５（Ａ）は本実施形態によるネットワークコントローラの構成例を示す図であり、図５（Ｂ）はジョイントＩＤの構成例を示す図である。
【図６】図６（Ａ）は第１のジョイントバッファの構成例を示す図であり、図６（Ｂ）は状態遷移図である。
【図７】図７は、本実施形態によるネットワークコントローラのデータ転送方法を説明するための図である。
【図８】図８は、本実施形態によるネットワークコントローラの他のデータ転送方法を説明するための図である。
【図９】図９は、コントロールマネージャの処理例を示すフローチャートである。
【図１０】図１０は、第１のパケットコントローラの処理例を示すフローチャートである。
【図１１】図１１は、第１のジョイントバッファの読み出し要求受信処理を示すフローチャートである。
【図１２】図１２は、第１のジョイントバッファの読み出し要求の応答受信処理を示すフローチャートである。
【図１３】図１３は、ネットワークコントローラの処理例を示すタイムチャートである。
【図１４】図１４は、ネットワークコントローラの他の処理例を示すタイムチャートである。
【発明を実施するための形態】
【００１０】
図１は、本実施形態による演算処理システム１００の構成例を示す図である。演算処理システム１００は、複数の中央演算処理装置（ＣＰＵ：Central Processing Unit）１０１ａ〜１０１ｄと、複数のメモリ１０２ａ〜１０２ｄと、ネットワーク１０３とを有する。メモリ１０２ａは、中央演算処理装置１０１ａに接続される。メモリ１０２ｂは、中央演算処理装置１０１ｂに接続される。メモリ１０２ｃは、中央演算処理装置１０１ｃに接続される。メモリ１０２ｄは、中央演算処理装置１０１ｄに接続される。メモリ１０２ａ〜１０２ｄは、例えば、ランダムアクセスメモリ（ＲＡＭ：Random Access Memory）である。メモリ１０２ａ〜１０２ｄの各々は、コア部１１１の数と同じである必要がない。中央演算処理装置１０１ａ〜１０１ｄは、相互に、ネットワーク１０３を介して接続される。
【００１１】
中央演算処理装置１０１ａ〜１０１ｄは、それぞれ、複数のコア部１１１と、制御部１１２と、ネットワークコントローラ１１３とを有する。複数のコア１１１の各々は、コア１２１及び１次キャッシュ１２２を有する。制御部１１２は、２次／３次キャッシュ１３１と、システムコントローラ１３２と、メモリアクセスコントローラ１３３とを有する。コア１２１は、演算処理を行う。中央演算処理装置１０１ａの１次キャッシュ１２２は、メモリ１０２ａの一部のデータを記憶する。中央演算処理装置１０１ａの２次／３次キャッシュ１３１は、メモリ１０２ａの一部のデータを記憶する。中央演算処理装置１０１ａのシステムコントローラ１３２は、中央演算処理装置１０１ａの全体を制御する。中央演算処理装置１０１ａのメモリアクセスコントローラ１３３は、メモリ１０２ａに対する読み出し及び書き込みを制御する。中央演算処理装置１０１ｂ〜１０１ｄは、中央演算処理装置１０１ａと同様の構成を有する。
【００１２】
ネットワークコントローラ１１３は、メモリ１０２ａ〜１０２ｄ間のリモートダイレクトメモリアクセス（ＲＤＭＡ）のデータ転送を行うデータ転送装置である。ＲＤＭＡ転送は、メモリ１０２ａ〜１０２ｄ間のデータ転送を高速に行うことができる。例えば、中央演算処理装置１０１ａのネットワークコントローラ１１３は、メモリ１０２ａからメモリ１０２ｂ〜１０２ｄのいずれかへデータを転送することができる。
【００１３】
次に、中央演算処理装置１０１ａのネットワークコントローラ１１３が、メモリ１０２ａからメモリ１０２ｂへデータを転送する例を説明する。中央演算処理装置１０１ａでは、コア１２１は、制御部１１２を介して、メモリ１０２ａの命令領域にデータ転送要求（データ転送命令）を書き込み、ネットワークコントローラ１１３に対して起動信号を出力する。ネットワークコントローラ１１３は、起動信号を入力すると、制御部１１２を介して、メモリ１０２の命令領域からデータ転送要求を読み出す。また、コア１２１は、ネットワークコントローラ１１３に対して、直接、データ転送要求を出力してもよい。データ転送要求は、転送元のメモリ１０２ａのアドレス、転送先の中央演算処理装置１０１ｂの識別子、転送先のメモリ１０２ｂのアドレス、及び転送データ長の情報を有する。ネットワークコントローラ１１３は、データ転送要求を基に、制御部１１２を介して転送元のメモリ１０２ａからデータを読み出し、その読み出したデータを基に１個又は複数のパケット（書き込み要求を含む）を生成する。そして、ネットワークコントローラ１１３は、その１個又は複数のパケットを、ネットワーク１０３を介して転送先の中央演算処理装置１０１ｂに出力する。中央演算処理装置１０１ｂでは、ネットワークコントローラ１１３は、その１個又は複数のパケットを入力すると、その１個又は複数のパケットのペイロードを、制御部１１２を介して、メモリ１０２ｂに書き込む。
【００１４】
図２は、基本技術によるネットワークコントローラ１１３の構成例を示す図である。ネットワークコントローラ１１３は、コントロールマネージャ２０１と、第１のパケットコントローラ２０２ａと、第１のパケットバッファ２０３ａと、第２のパケットコントローラ２０２ｂと、第２のパケットバッファ２０３ｂと、第３のパケットコントローラ２０２ｃと、第３のパケットバッファ２０３ｃと、第４のパケットコントローラ２０２ｄと、第４のパケットバッファ２０３ｄと、セレクタ２０４ａ〜２０４ｄと、ダイレクトメモリアクセス（ＤＭＡ）コントローラ２０５と、アービタ２０６と、パケットレシーバ２０７とを有する。
【００１５】
図３は、図２のネットワークコントローラ１１３のデータ転送方法を説明するための図である。転送元のメモリ１０２ａは、読み出し単位ブロック（アクセス単位ブロック）３０１〜３０７の境界を示すアライン３１０を有する。読み出し単位ブロック３０１〜３０７のサイズは、それぞれ、キャッシュラインのサイズと同じである。中央演算処理装置１０１ａは、キャッシュコヒーレンスの管理を効率的に行うために、メモリアクセスの粒度はキャッシュラインサイズのアライン３１０で制限される。例えば、キャッシュラインサイズが２５６バイトである場合、転送元のメモリ１０２ａの読み出し単位ブロック３０１〜３０７は、それぞれ、２５６バイトとなる。転送元のメモリ１０２ａは、読み出し単位ブロック３０１〜３０７毎に読み出しを行う。読み出し単位ブロック３０１内の一部のデータのみを読み出すことができない。
【００１６】
同様に、転送先のメモリ１０２ｂは、書き込み単位ブロック（アクセス単位ブロック）３２１〜３２７の境界を示すアライン３２０を有する。書き込み単位ブロック３２１〜３２７のサイズは、それぞれ、キャッシュラインのサイズと同じである。例えば、キャッシュラインサイズが２５６バイトである場合、書き込み単位ブロック３２１〜３２７は、それぞれ、２５６バイトとなる。転送先のメモリ１０２ｂは、書き込み単位ブロック３２１〜３２７毎に書き込みを行う。書き込み単位ブロック３２１内の一部のデータのみを書き込むことができない。
【００１７】
コントロールマネージャ２０１は、コア１２１が生成したデータ転送要求を入力する。データ転送要求は、転送元のメモリ１０２ａのアドレス、転送先の中央演算処理装置１０１ｂの識別子、転送先のメモリ１０２ｂのアドレス、及び転送データ長の情報を有する。例えば、データ転送要求は、転送元のメモリ１０２ａのペイロード（データ）３１１を転送先のメモリ１０２ｂに転送するための要求である。
【００１８】
コントロールマネージャ２０１は、データ転送要求を解析し、データ転送要求をパケット単位のパケットａ〜ｇの７個のパケット転送要求に分割する。パケットａ〜ｇの各々のペイロード長３１２は、それぞれ、転送先のメモリ１０２ｂの書き込み単位ブロック３２１の長さと同じである。ペイロード３１１は、ペイロード長３１２単位で分割される。コントロールマネージャ２０１は、パケットａのパケット転送要求を第１のパケットコントローラ２０２ａに出力し、パケットｂのパケット転送要求を第２のパケットコントローラ２０２ｂに出力し、パケットｃのパケット転送要求を第３のパケットコントローラ２０２ｃに出力し、パケットｄのパケット転送要求を第４のパケットコントローラ２０２ｄに出力する。そして、コントロールマネージャ２０１は、パケットｅのパケット転送要求を第１のパケットコントローラ２０２ａに出力し、パケットｆのパケット転送要求を第２のパケットコントローラ２０２ｂに出力し、パケットｇのパケット転送要求を第３のパケットコントローラ２０２ｃに出力する。
【００１９】
第１のパケットコントローラ２０２ａは、パケットａのパケット転送要求を基に、ＤＭＡコントローラ２０５及び制御部１１２を介して、転送元のメモリ１０２ａの読み出し単位ブロック３０１を読み出し、その後、転送元のメモリ１０２ａの読み出し単位ブロック３０２を読み出す。次に、第１のパケットコントローラ２０２ａは、読み出し単位ブロック３０１及び３０２を第１のパケットバッファ２０３ａに書き込み、読み出し単位ブロック３０１の一部のデータと読み出し単位ブロック３０２の一部のデータを基にパケットａを生成する。次に、第１のパケットコントローラ２０２ａは、セレクタ２０４ａを介して、パケット送信要求信号をアービタ２０６に出力する。アービタ２０６は、第１〜第４のパケットコントローラ２０２ａ〜２０２ｄの複数のパケット送信要求信号が競合した場合、調停を行い、第１〜第４のパケットコントローラ２０２ａ〜２０２ｄのうちのいずれか１個に許可信号を出力する。第１のパケットコントローラ２０２ａは、許可信号を入力すると、パケットａ（書き込み要求を含む）をアービタ２０６及びネットワーク１０３を介して、転送先の中央演算処理装置１０１ｂに出力する。中央演算処理装置１０１ｂのパケットレシーバ２０７は、ＤＭＡコントローラ２０５及び制御部１１２を介して、パケットａのペイロードを転送先のメモリ１０２ｂの書き込み単位ブロック３２１として書き込む。
【００２０】
同様に、第２のパケットコントローラ２０２ｂは、パケットｂのパケット転送要求を基に、ＤＭＡコントローラ２０５及び制御部１１２を介して、転送元のメモリ１０２ａの読み出し単位ブロック３０２を読み出し、その後、転送元のメモリ１０２ａの読み出し単位ブロック３０３を読み出す。次に、第２のパケットコントローラ２０２ｂは、読み出し単位ブロック３０２及び３０３を第２のパケットバッファ２０３ｂに書き込み、読み出し単位ブロック３０２の一部のデータと読み出し単位ブロック３０３の一部のデータを基にパケットｂを生成する。次に、第２のパケットコントローラ２０２ｂは、セレクタ２０４ｂを介して、パケット送信要求信号をアービタ２０６に出力する。第２のパケットコントローラ２０２ｂは、アービタ２０６から許可信号を入力すると、パケットｂ（書き込み要求を含む）をアービタ２０６及びネットワーク１０３を介して、転送先の中央演算処理装置１０１ｂに出力する。中央演算処理装置１０１ｂのパケットレシーバ２０７は、ＤＭＡコントローラ２０５及び制御部１１２を介して、パケットｂのペイロードを転送先のメモリ１０２ｂの書き込み単位ブロック３２２として書き込む。
【００２１】
同様に、第３のパケットコントローラ２０２ｃは、パケットｃのパケット転送要求を基に、ＤＭＡコントローラ２０５及び制御部１１２を介して、転送元のメモリ１０２ａの読み出し単位ブロック３０３を読み出し、その後、転送元のメモリ１０２ａの読み出し単位ブロック３０４を読み出す。次に、第３のパケットコントローラ２０２ｃは、読み出し単位ブロック３０３及び３０４を第３のパケットバッファ２０３ｃに書き込み、読み出し単位ブロック３０３の一部のデータと読み出し単位ブロック３０４の一部のデータを基にパケットｃを生成する。次に、第３のパケットコントローラ２０２ｃは、セレクタ２０４ｃを介して、パケット送信要求信号をアービタ２０６に出力する。第３のパケットコントローラ２０２ｃは、アービタ２０６から許可信号を入力すると、パケットｃ（書き込み要求を含む）をアービタ２０６及びネットワーク１０３を介して、転送先の中央演算処理装置１０１ｂに出力する。中央演算処理装置１０１ｂのパケットレシーバ２０７は、ＤＭＡコントローラ２０５及び制御部１１２を介して、パケットｃのペイロードを転送先のメモリ１０２ｂの書き込み単位ブロック３２３として書き込む。
【００２２】
同様に、第４のパケットコントローラ２０２ｄは、パケットｄのパケット転送要求を基に、ＤＭＡコントローラ２０５及び制御部１１２を介して、転送元のメモリ１０２ａの読み出し単位ブロック３０４を読み出し、その後、転送元のメモリ１０２ａの読み出し単位ブロック３０５を読み出す。次に、第４のパケットコントローラ２０２ｄは、読み出し単位ブロック３０４及び３０５を第４のパケットバッファ２０３ｄに書き込み、読み出し単位ブロック３０４の一部のデータと読み出し単位ブロック３０５の一部のデータを基にパケットｄを生成する。次に、第４のパケットコントローラ２０２ｄは、セレクタ２０４ｄを介して、パケット送信要求信号をアービタ２０６に出力する。第４のパケットコントローラ２０２ｄは、アービタ２０６から許可信号を入力すると、パケットｄ（書き込み要求を含む）をアービタ２０６及びネットワーク１０３を介して、転送先の中央演算処理装置１０１ｂに出力する。中央演算処理装置１０１ｂのパケットレシーバ２０７は、ＤＭＡコントローラ２０５及び制御部１１２を介して、パケットｄのペイロードを転送先のメモリ１０２ｂの書き込み単位ブロック３２４として書き込む。
【００２３】
同様に、第１のパケットコントローラ２０２ａは、パケットｅのパケット転送要求を基に、転送元のメモリ１０２ａの読み出し単位ブロック３０５及び３０６を読み出し、パケットｅを生成する。次に、第１のパケットコントローラ２０２ａは、パケットｅ（書き込み要求を含む）を転送先の中央演算処理装置１０１ｂに出力する。中央演算処理装置１０１ｂのパケットレシーバ２０７は、パケットｅのペイロードを転送先のメモリ１０２ｂの書き込み単位ブロック３２５として書き込む。
【００２４】
同様に、第２のパケットコントローラ２０２ｂは、パケットｆのパケット転送要求を基に、転送元のメモリ１０２ａの読み出し単位ブロック３０６及び３０７を読み出し、パケットｆを生成する。次に、第２のパケットコントローラ２０２ｂは、パケットｆ（書き込み要求を含む）を転送先の中央演算処理装置１０１ｂに出力する。中央演算処理装置１０１ｂのパケットレシーバ２０７は、パケットｆのペイロードを転送先のメモリ１０２ｂの書き込み単位ブロック３２６として書き込む。
【００２５】
同様に、第３のパケットコントローラ２０２ｃは、パケットｇのパケット転送要求を基に、転送元のメモリ１０２ａの読み出し単位ブロック３０７を読み出し、パケットｇを生成する。次に、第３のパケットコントローラ２０２ｃは、パケットｇ（書き込み要求を含む）を転送先の中央演算処理装置１０１ｂに出力する。中央演算処理装置１０１ｂのパケットレシーバ２０７は、パケットｇのペイロードを転送先のメモリ１０２ｂの書き込み単位ブロック３２７として書き込む。
【００２６】
上記のように、読み出し単位ブロック３０２〜３０７は、それぞれ、転送元のメモリ１０２ａから２回ずつ読み出されている。そのため、メモリ１０２ａのスループットが低下し、データ転送効率が低下する。
【００２７】
図４は、図２のネットワークコントローラ１１３の他のデータ転送方法を説明するための図である。図４は、図３に対して、各パケットのペイロード長４１２が異なる。図４の各パケットのペイロード長４１２は、図３の各パケットのペイロード長３１２と異なる。各パケットのペイロード長４１２は、最大転送可能ペイロード長（ＭＴＵ）であり、例えば１７９２バイトである。ネットワークコントローラ１１３は、図３の場合と同様に、転送元のメモリ１０２ａから転送先のメモリ１０２ｂにペイロード３１１を転送することができる。各パケットのペイロード長４１２を長くすることにより、パケットの数を減らすことができる。しかし、この場合も、読み出し単位ブロック３０２、３０３、３０６及び３０７は、それぞれ、転送元のメモリ１０２ａから２回ずつ読み出され、データ転送効率が低下している。また、書き込み単位ブロック３２２、３２３、３２４及び３２７は、それぞれ、転送先のメモリ１０２ｂに２回ずつ書き込まれる。
【００２８】
次に、転送元のメモリ１０２ａの読み出し効率の低下の例について説明する。例えば、ペイロード３１１は、２Ｍバイト（２０９７１５２バイト）である。読み出し単位ブロック３０１〜３０７の各々のサイズは、２５６バイトである。各パケットのペイロード長（ＭＴＵ）４１２は、１７９２バイトである。この場合、２０９７１５２／１７９２≒１１７０．３である。したがって、２０９７１５２バイトのペイロード３１１は、（１７９２バイト×１１７０パケット＋５１２バイト×１パケット）の１１７１パケットに分割される。２回読み出される読み出し単位ブロックの数は、例えば（パケット数−１）である。パケット数は１１７１パケットであるので、１１７１＋１１７０回のメモリアクセスが必要になる。結果的に、２０９７１５２バイトのペイロード３１１を転送するため、２３９６６７２バイト（＝２０９７１５２＋１１７０×２５６バイト）を読み出している。メモリ１０２ａの読み出し効率は、１４％余分なデータを読み出していることになり、メモリアクセスのスループットが低下する。
【００２９】
図５（Ａ）は、本実施形態によるネットワークコントローラ１１３の構成例を示す図である。図５（Ａ）のネットワークコントローラ１１３は、図２のネットワークコントローラ１１３に対して、第１のジョイントバッファ５０１ａと、第２のジョイントバッファ５０１ｂと、第３のジョイントバッファ５０１ｃと、第４のジョイントバッファ５０１ｄと、セレクタ５０２ａ〜５０２ｄと、セレクタ５０３ａ〜５０３ｄとを追加したものである。
【００３０】
セレクタ５０２ａは、第１及び第２のジョイントバッファ５０１ａ及び５０１ｂが出力する読み出し要求を選択的にＤＭＡコントローラ２０５に出力する。セレクタ５０２ｂは、第２及び第３のジョイントバッファ５０１ｂ及び５０１ｃが出力する読み出し要求を選択的にＤＭＡコントローラ２０５に出力する。セレクタ５０２ｃは、第３及び第４のジョイントバッファ５０１ｃ及び５０１ｄが出力する読み出し要求を選択的にＤＭＡコントローラ２０５に出力する。セレクタ５０２ｄは、第４及び第１のジョイントバッファ５０１ｄ及び５０１ａが出力する読み出し要求を選択的にＤＭＡコントローラ２０５に出力する。
【００３１】
セレクタ５０３ａは、第１及び第２のジョイントバッファ５０１ａ及び５０１ｂが出力する読み出し単位ブロックを選択的に第２のパケットバッファ２０３ｂに出力する。セレクタ５０３ｂは、第２及び第３のジョイントバッファ５０１ｂ及び５０１ｃが出力する読み出し単位ブロックを選択的に第３のパケットバッファ２０３ｃに出力する。セレクタ５０３ｃは、第３及び第４のジョイントバッファ５０１ｃ及び５０１ｄが出力する読み出し単位ブロックを選択的に第４のパケットバッファ２０３ｄに出力する。セレクタ５０３ｄは、第４及び第１のジョイントバッファ５０１ｄ及び５０１ａが出力する読み出し単位ブロックを選択的に第１のパケットバッファ２０３ａに出力する。
【００３２】
図５（Ｂ）は、ジョイントＩＤ５１０の構成例を示す図である。コントロールマネージャ２０１は、第１〜第４のパケットコントローラ２０２ａ〜２０２ｄに各パケットに応じたジョイントＩＤ５１０を出力する。ジョイントＩＤ５１０は、先頭隣接フラグＶＦ（Ｆ）と、先頭識別子ＩＤ（Ｆ）と、末尾隣接フラグＶＦ（Ｌ）と、末尾識別子ＩＤ（Ｌ）とを有する。先頭隣接フラグＶＦ（Ｆ）は先頭隣接情報であり、末尾隣接フラグＶＦ（Ｌ）は末尾隣接情報である。
【００３３】
図６（Ａ）は、第１のジョイントバッファ５０１ａの構成例を示す図である。第２〜第４のジョイントバッファ５０１ｂ〜５０１ｄも、第１のジョイントバッファ５０１ａと同様の構成を有する。第１のジョイントバッファ５０１ａは、セレクタＳＥＬ０〜ＳＥＬ３と、記憶部６０１〜６０３と、バッファ６０４とを有する。記憶部６０１は、第１のジョイントバッファ５０１ａの状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳを記憶する。記憶部６０２は、識別子Ｊｏｉｎｔ＿ＩＤを記憶する。記憶部６０３は、隣接フラグ（隣接情報）Ｊｏｉｎｔ＿Ｖａｌｉｄ（０／１）を記憶する。バッファ６０４は、例えば２５６バイトの容量を有し、メモリ１０２ａの読み出し単位ブロックを記憶する。
【００３４】
セレクタＳＥＬ０は、第１の制御信号に応じて、第１のパケットコントローラ２０２ａからの読み出し要求をＤＭＡコントローラ２０５に出力する。セレクタＳＥＬ１は、第２の制御信号に応じて、第２のパケットコントローラ２０２ｂからの読み出し要求をＤＭＡコントローラ２０５に出力する。セレクタＳＥＬ２は、第３の制御信号に応じて、ＤＭＡコントローラ２０５又はバッファ６０４からの読み出し単位ブロックを第１のパケットバッファ２０３ａに出力する。セレクタＳＥＬ３は、第４の制御信号に応じて、ＤＭＡコントローラ２０５又はバッファ６０４からの読み出し単位ブロックを第２のパケットバッファ２０３ｂに出力する。
【００３５】
図６（Ｂ）は、図６（Ａ）の状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳの状態遷移図である。状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳは、ＩＤＬＥと、ＤＭＡ＿ＷＡＩＴと、ＤＭＡ＿ＨＯＬＤと、ＤＭＡ＿ＳＥＮＤとを有する。ＩＤＬＥは、初期のアイドル状態である。ＤＭＡ＿ＷＡＩＴは、メモリ１０２ａに対する読み出し要求の応答の待機状態である。ＤＭＡ＿ＨＯＬＤは、バッファ６０４が読み出し単位ブロックを保持している状態である。ＤＭＡ＿ＳＥＮＤは、バッファ６０４に保持されている読み出し単位ブロックを送信可能な状態である。
【００３６】
図７は、本実施形態によるネットワークコントローラ１１３のデータ転送方法を説明するための図である。以下、図７が図３と異なる点を説明する。コントロールマネージャ２０１は、分割部であり、データ転送要求を解析し、データ転送要求をパケット単位のパケットａ〜ｇの７個のパケット転送要求に分割する。パケットａ〜ｇの各々のペイロード長３１２は、それぞれ、転送先のメモリ１０２ｂの書き込み単位ブロック３２１の長さと同じである。ペイロード３１１は、ペイロード長３１２単位で分割される。
【００３７】
コントロールマネージャ２０１は、パケットａのパケット転送要求に基づく読み出し末尾アドレスがメモリ１０２ａの読み出し単位ブロック３０２内で次のパケットｂのパケット転送要求に基づく読み出し先頭アドレスと隣接する場合、パケットａのパケット転送要求に対して末尾隣接フラグＶＦ（Ｌ）及び第１の識別子ＩＤ（Ｌ）を設定し、パケットｂのパケット転送要求に対して先頭隣接フラグＶＦ（Ｆ）及び第１の識別子ＩＤ（Ｆ）を設定する。
【００３８】
同様に、コントロールマネージャ２０１は、パケットｂのパケット転送要求に基づく読み出し末尾アドレスがメモリ１０２ａの読み出し単位ブロック３０３内で次のパケットｃのパケット転送要求に基づく読み出し先頭アドレスと隣接する場合、パケットｂのパケット転送要求に対して末尾隣接フラグＶＦ（Ｌ）及び第２の識別子ＩＤ（Ｌ）を設定し、パケットｃのパケット転送要求に対して先頭隣接フラグＶＦ（Ｆ）及び第２の識別子ＩＤ（Ｆ）を設定する。他のパケットも同様である。
【００３９】
パケットａのパケット転送要求は、先頭隣接フラグＶＦ（Ｆ）が設定されず、末尾隣接フラグＶＦ（Ｌ）が設定される。パケットｂ〜ｆのパケット転送要求は、先頭隣接フラグＶＦ（Ｆ）及び末尾隣接フラグＶＦ（Ｌ）が設定される。パケットｇのパケット転送要求は、先頭隣接フラグＶＦ（Ｆ）が設定され、末尾隣接フラグＶＦ（Ｌ）が設定されない。
【００４０】
コントロールマネージャ２０１は、パケットａのパケット転送要求を第１のパケットコントローラ２０２ａに出力し、パケットｂのパケット転送要求を第２のパケットコントローラ２０２ｂに出力し、パケットｃのパケット転送要求を第３のパケットコントローラ２０２ｃに出力し、パケットｄのパケット転送要求を第４のパケットコントローラ２０２ｄに出力する。そして、コントロールマネージャ２０１は、パケットｅのパケット転送要求を第１のパケットコントローラ２０２ａに出力し、パケットｆのパケット転送要求を第２のパケットコントローラ２０２ｂに出力し、パケットｇのパケット転送要求を第３のパケットコントローラ２０２ｃに出力する。
【００４１】
第１のパケットコントローラ２０２ａは、パケットａのパケット転送要求に先頭隣接フラグＶＦ（Ｆ）が設定されていない場合、パケットａのパケット転送要求に基づく読み出し先頭アドレスを含むメモリ１０２ａの読み出し単位ブロック３０１の第１の読み出し要求に対して先頭隣接フラグＶＦ（Ｆ）を設定せず、読み出し要求を出力する。ＤＭＡコントローラ２０５は、読み出し要求に応答して、制御部１１２を介してメモリ１０２ａから、先頭アドレスを含む読み出し単位ブロック３０１を読み出し、第１のパケットバッファ２０３ａに出力する。
【００４２】
次に、第１のパケットコントローラ２０２ａは、パケットａのパケット転送要求に末尾隣接フラグＶＦ（Ｌ）及び第１の識別子ＩＤ（Ｌ）が設定されている場合、パケットａのパケット転送要求に基づく読み出し末尾アドレスを含むメモリ１０２ａの読み出し単位ブロック３０２の読み出し要求に対して末尾隣接フラグＶＦ（Ｌ）及び第１の識別子ＩＤ（Ｌ）を設定し、末尾隣接フラグＶＦ（Ｌ）及び第１の識別子ＩＤ（Ｌ）が設定された読み出し要求を第１のジョイントバッファ５０１ａに出力する。
【００４３】
第１のジョイントバッファ５０１ａは、読み出し要求を入力し、読み出し要求に末尾隣接フラグＶＦ（Ｌ）及び第１の識別子ＩＤ（Ｌ）が設定されている場合、記憶部６０３に隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）として１を登録し、第１の識別子ＩＤ（Ｌ）を記憶部６０２に識別子Ｊｏｉｎｔ＿ＩＤとして登録し、読み出し要求をＤＭＡコントローラ２０５に出力する。ＤＭＡコントローラ２０５は、読み出し要求に応答して、制御部１１２を介してメモリ１０２ａから、末尾アドレスを含む読み出し単位ブロック３０２を読み出し、第１のジョイントバッファ５０１ａに出力する。第１のジョイントバッファ５０１ａは、末尾アドレスを含む読み出し単位ブロック３０２をバッファ６０４に保持すると共に、第１のパケットバッファ２０３ａに出力する。
【００４４】
第１のパケットコントローラ２０２ａは、第１のパケットバッファ２０３ａ内の先頭アドレスを含む読み出し単位ブロック３０１の一部と末尾アドレスを含む読み出し単位ブロック３０２の一部を基にパケットａを生成し、パケットａを転送先の中央演算処理装置１０１ｂのメモリ１０２ｂに出力する。中央演算処理装置１０１ｂは、パケットａのペイロードをメモリ１０２ｂの書き込み単位ブロック３２１として書き込む。
【００４５】
次に、第２のパケットコントローラ２０２ｂは、パケットｂのパケット転送要求に先頭隣接フラグＶＦ（Ｆ）及び第２の識別子ＩＤ（Ｆ）が設定されている場合、パケットｂのパケット転送要求に基づく読み出し先頭アドレスを含むメモリ１０２ａの読み出し単位ブロック３０２の読み出し要求に対して先頭隣接フラグＶＦ（Ｆ）及び第１の識別子ＩＤ（Ｆ）を設定し、先頭隣接フラグＶＦ（Ｆ）及び第１の識別子ＩＤ（Ｆ）が設定された読み出し要求を第１のジョイントバッファ５０１ａに出力する。
【００４６】
第１のジョイントバッファ５０１ａは、読み出し要求を入力し、読み出し要求に先頭隣接フラグＶＦ（Ｆ）及び第１の識別子ＩＤ（Ｆ）が設定されており、記憶部６０３の隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）に１が登録され、入力された第１の識別子ＩＤ（Ｆ）が記憶部６０２の識別子Ｊｏｉｎｔ＿ＩＤと一致する場合、バッファ６０４に保持されている読み出し単位ブロック３０２を第２のパケットバッファ２０３ｂに出力する。この際、第１のジョイントバッファ５０１ａは、入力した読み出し要求をＤＭＡコントローラ２０５に出力しない。これにより、読み出し単位ブロック３０２は、メモリ１０２ａから１回だけ読み出される。
【００４７】
次に、第２のパケットコントローラ２０２ｂは、パケットｂのパケット転送要求に末尾隣接フラグＶＦ（Ｌ）及び第２の識別子ＩＤ（Ｌ）が設定されている場合、パケットｂのパケット転送要求に基づく読み出し末尾アドレスを含むメモリ１０２ａの読み出し単位ブロック３０３の読み出し要求に対して末尾隣接フラグＶＦ（Ｌ）及び第２の識別子ＩＤ（Ｌ）を設定し、末尾隣接フラグＶＦ（Ｌ）及び第２の識別子ＩＤ（Ｌ）が設定された読み出し要求を第２のジョイントバッファ５０１ｂに出力する。
【００４８】
第２のジョイントバッファ５０１ｂは、読み出し要求を入力し、読み出し要求に末尾隣接フラグＶＦ（Ｌ）及び第２の識別子ＩＤ（Ｌ）が設定されている場合、記憶部６０３に隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）として１を登録し、第２の識別子ＩＤ（Ｌ）を記憶部６０２に識別子Ｊｏｉｎｔ＿ＩＤとして登録し、読み出し要求をＤＭＡコントローラ２０５に出力する。ＤＭＡコントローラ２０５は、読み出し要求に応答して、制御部１１２を介してメモリ１０２ａから、末尾アドレスを含む読み出し単位ブロック３０３を読み出し、第２のジョイントバッファ５０１ｂに出力する。第２のジョイントバッファ５０１ｂは、末尾アドレスを含む読み出し単位ブロック３０３をバッファ６０４に保持すると共に、第２のパケットバッファ２０３ｂに出力する。
【００４９】
第２のパケットコントローラ２０２ｂは、第２のパケットバッファ２０３ｂ内の先頭アドレスを含む読み出し単位ブロック３０２の一部と末尾アドレスを含む読み出し単位ブロック３０３の一部を基にパケットｂを生成し、パケットｂを転送先の中央演算処理装置１０１ｂのメモリ１０２ｂに出力する。中央演算処理装置１０１ｂは、パケットｂのペイロードをメモリ１０２ｂの書き込み単位ブロック３２２として書き込む。
【００５０】
次に、第３のパケットコントローラ２０２ｃは、パケットｃのパケット転送要求に先頭隣接フラグＶＦ（Ｆ）及び第２の識別子ＩＤ（Ｆ）が設定されている場合、パケットｃのパケット転送要求に基づく読み出し先頭アドレスを含むメモリ１０２ａの読み出し単位ブロック３０３の読み出し要求に対して先頭隣接フラグＶＦ（Ｆ）及び第２の識別子ＩＤ（Ｆ）を設定し、先頭隣接フラグＶＦ（Ｆ）及び第２の識別子ＩＤ（Ｆ）が設定された読み出し要求を第２のジョイントバッファ５０１ｂに出力する。
【００５１】
第２のジョイントバッファ５０１ｂは、読み出し要求を入力し、読み出し要求に先頭隣接フラグＶＦ（Ｆ）及び第２の識別子ＩＤ（Ｆ）が設定されており、記憶部６０３の隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）に１が登録され、入力された第２の識別子ＩＤ（Ｆ）が記憶部６０２の識別子Ｊｏｉｎｔ＿ＩＤと一致する場合、バッファ６０４に保持されている読み出し単位ブロック３０３を第３のパケットバッファ２０３ｃに出力する。この際、第２のジョイントバッファ５０１ｂは、入力した読み出し要求をＤＭＡコントローラ２０５に出力しない。これにより、読み出し単位ブロック３０３は、メモリ１０２ａから１回だけ読み出される。他のパケットも同様である。
【００５２】
以上のように、読み出し単位ブロック３０２は、転送元のメモリ１０２ａから１回だけ読み出され、第１のジョイントバッファ５０１ａに保持される。第１のジョイントバッファ５０１ａは、読み出し単位ブロック３０２を第１及び第２のパケットバッファ２０３ａ及び２０３ｂに出力する。
【００５３】
読み出し単位ブロック３０３は、転送元のメモリ１０２ａから１回だけ読み出され、第２のジョイントバッファ５０１ｂに保持される。第２のジョイントバッファ５０１ｂは、読み出し単位ブロック３０３を第２及び第３のパケットバッファ２０３ｂ及び２０３ｃに出力する。
【００５４】
読み出し単位ブロック３０４は、転送元のメモリ１０２ａから１回だけ読み出され、第３のジョイントバッファ５０１ｃに保持される。第３のジョイントバッファ５０１ｃは、読み出し単位ブロック３０４を第３及び第４のパケットバッファ２０３ｃ及び２０３ｄに出力する。
【００５５】
読み出し単位ブロック３０５は、転送元のメモリ１０２ａから１回だけ読み出され、第４のジョイントバッファ５０１ｄに保持される。第４のジョイントバッファ５０１ｄは、読み出し単位ブロック３０５を第４及び第１のパケットバッファ２０３ｄ及び２０３ａに出力する。
【００５６】
読み出し単位ブロック３０６は、転送元のメモリ１０２ａから１回だけ読み出され、第１のジョイントバッファ５０１ａに保持される。第１のジョイントバッファ５０１ａは、読み出し単位ブロック３０６を第１及び第２のパケットバッファ２０３ａ及び２０３ｂに出力する。
【００５７】
読み出し単位ブロック３０７は、転送元のメモリ１０２ａから１回だけ読み出され、第２のジョイントバッファ５０１ｂに保持される。第２のジョイントバッファ５０１ｂは、読み出し単位ブロック３０７を第２及び第３のパケットバッファ２０３ｂ及び２０３ｃに出力する。
【００５８】
上記のように、読み出し単位ブロック３０１〜３０７は、それぞれ、転送元のメモリ１０２ａから１回ずつ読み出されている。そのため、メモリ１０２ａのスループットが向上し、データ転送効率が向上する。
【００５９】
図８は、本実施形態によるネットワークコントローラ１１３の他のデータ転送方法を説明するための図である。図８は、図７に対して、各パケットのペイロード長４１２が異なる。図８の各パケットのペイロード長４１２は、図７の各パケットのペイロード長３１２と異なる。各パケットのペイロード長４１２は、最大転送可能ペイロード長（ＭＴＵ）であり、例えば１７９２バイトである。ネットワークコントローラ１１３は、図７の場合と同様に、転送元のメモリ１０２ａから転送先のメモリ１０２ｂにペイロード３１１を転送することができる。各パケットのペイロード長４１２を長くすることにより、パケットの数を減らすことができる。この場合も、読み出し単位ブロック３０１〜３０７は、それぞれ、転送元のメモリ１０２ａから１回ずつ読み出されている。そのため、メモリ１０２ａのスループットが向上し、データ転送効率が向上する。
【００６０】
次に、転送元のメモリ１０２ａの読み出し効率の向上の例について説明する。例えば、ペイロード３１１は、２Ｍバイト（２０９７１５２バイト）である。図８では、２Ｍバイトのペイロード３１１を転送するため、２Ｍバイトをメモリ１０２ａから読み出している。図８のメモリ１０２ａの読み出し効率は、図４の場合に比べ、１４％向上する。
【００６１】
図９は、コントロールマネージャ２０１の処理例を示すフローチャートである。以下、図７の処理例を説明する。ステップＳ９０１において、コントロールマネージャ２０１は、データ転送要求（ペイロード送信要求）を受信（入力）したか否かをチェックする。コントロールマネージャ２０１は、データ転送要求を受信した場合にはステップＳ９０２に進み、データ転送要求を受信していない場合には処理を終了する。
【００６２】
ステップＳ９０２において、コントロールマネージャ２０１は、パケットａのサイズを決定する。次に、ステップＳ９０３において、コントロールマネージャ２０１は、パケットａが先頭パケットであるので、パケットａのパケット転送要求に対して先頭隣接フラグＶＦ（Ｆ）に０を設定し、先頭識別子ＩＤ（Ｆ）に０を設定する。そして、コントロールマネージャ２０１は、パケットａのパケット転送要求に基づく読み出し末尾アドレスがメモリ１０２ａの読み出し単位ブロック３０２内でパケットｂのパケット転送要求に基づく読み出し先頭アドレスと隣接する場合、パケットａのパケット転送要求に対して末尾隣接フラグＶＦ（Ｌ）に１を設定し、識別子ＩＤ（Ｌ）に１を設定する。
【００６３】
次に、ステップＳ９０４において、コントロールマネージャ２０１は、第ｎ＋１のパケットコントローラ内のバッファが空くのを待って、パケットａのパケット転送要求を第ｎ＋１のパケットコントローラに出力する。ｎの初期値は、０である。したがって、コントロールマネージャ２０１は、第１のパケットコントローラ２０２ａ内のバッファが空くのを待って、パケットａのパケット転送要求を第１のパケットコントローラ２０２ａに出力する。コントロールマネージャ２０１は、残ペイロード長からパケットａのサイズを減算する。残ペイロード長の初期値は、全パケットサイズである。コントロールマネージャ２０１は、ｎ＋１を４で割った余りを新たなｎとする。例えば、ｎは、１になる。
【００６４】
次に、ステップＳ９０５において、コントロールマネージャ２０１は、残ペイロード長が０でない場合にはステップＳ９０２に戻り、次のパケットの処理を繰り返す。
【００６５】
次に、ステップＳ９０２において、コントロールマネージャ２０１は、パケットｂのサイズを決定する。次に、ステップＳ９０３において、コントロールマネージャ２０１は、パケットｂのパケット転送要求に基づく読み出し先頭アドレスがメモリ１０２ａの読み出し単位ブロック３０２内でパケットａのパケット転送要求に基づく読み出し末尾アドレスと隣接する場合、パケットｂのパケット転送要求に対して先頭隣接フラグＶＦ（Ｆ）に１を設定し、識別子ＩＤ（Ｆ）に１を設定する。そして、コントロールマネージャ２０１は、パケットｂのパケット転送要求に基づく読み出し末尾アドレスがメモリ１０２ａの読み出し単位ブロック３０３内でパケットｃのパケット転送要求に基づく読み出し先頭アドレスと隣接する場合、パケットｂのパケット転送要求に対して末尾隣接フラグＶＦ（Ｌ）に１を設定し、識別子ＩＤ（Ｌ）に２を設定する。
【００６６】
次に、ステップＳ９０４において、コントロールマネージャ２０１は、第２のパケットコントローラ２０２ｂ内のバッファが空くのを待って、パケットｂのパケット転送要求を第２のパケットコントローラ２０２ｂに出力する。コントロールマネージャ２０１は、残ペイロード長からパケットｂのサイズを減算する。コントロールマネージャ２０１は、ｎを２に更新する。その後、ステップＳ９０２に戻る。
【００６７】
次に、ステップＳ９０２において、コントロールマネージャ２０１は、パケットｃのサイズを決定する。次に、ステップＳ９０３において、コントロールマネージャ２０１は、パケットｃのパケット転送要求に基づく読み出し先頭アドレスがメモリ１０２ａの読み出し単位ブロック３０３内でパケットｂのパケット転送要求に基づく読み出し末尾アドレスと隣接する場合、パケットｃのパケット転送要求に対して先頭隣接フラグＶＦ（Ｆ）に１を設定し、識別子ＩＤ（Ｆ）に２を設定する。そして、コントロールマネージャ２０１は、パケットｃのパケット転送要求に基づく読み出し末尾アドレスがメモリ１０２ａの読み出し単位ブロック３０４内でパケットｄのパケット転送要求に基づく読み出し先頭アドレスと隣接する場合、パケットｃのパケット転送要求に対して末尾隣接フラグＶＦ（Ｌ）に１を設定し、識別子ＩＤ（Ｌ）に３を設定する。
【００６８】
次に、ステップＳ９０４において、コントロールマネージャ２０１は、第３のパケットコントローラ２０２ｃ内のバッファが空くのを待って、パケットｃのパケット転送要求を第３のパケットコントローラ２０２ｃに出力する。コントロールマネージャ２０１は、残ペイロード長からパケットｃのサイズを減算する。コントロールマネージャ２０１は、ｎを３に更新する。
【００６９】
コントロールマネージャ２０１は、全てのパケットに対して、上記の処理を行う。ステップＳ９０５において、コントロールマネージャ２０１は、残ペイロード長が０である場合、処理を終了する。
【００７０】
図１０は、第１のパケットコントローラ２０２ａの処理例を示すフローチャートである。第２〜第４のパケットコントローラ２０２ｂ〜２０２ｄも、第１のパケットコントローラ２０２ａと同様である。
【００７１】
ステップＳ１００１において、第１のパケットコントローラ２０２ａは、パケット転送要求（パケット生成要求）を受信した場合にはステップＳ１００２に進み、パケット転送要求を受信していない場合には処理を終了する。
【００７２】
ステップＳ１００２において、第１のパケットコントローラ２０２ａは、パケットａの読み出し先頭アドレスを含むメモリ１０２ａの読み出し単位ブロック３０１の読み出し要求と、パケットａの読み出し末尾アドレスを含むメモリ１０２ａの読み出し単位ブロック３０２の読み出し要求とを生成する。第１のパケットコントローラ２０２ａは、パケットａのパケット転送要求に０の先頭隣接フラグＶＦ（Ｆ）が設定されている場合、パケットａのパケット転送要求に基づく読み出し先頭アドレスを含む読み出し単位ブロック３０１の読み出し要求に対して０の先頭隣接フラグＶＦ（Ｆ）を設定する。
【００７３】
そして、第１のパケットコントローラ２０２ａは、パケットａのパケット転送要求に１の末尾隣接フラグＶＦ（Ｌ）及び１の末尾識別子ＩＤ（Ｌ）が設定されている場合、パケットａのパケット転送要求に基づく読み出し末尾アドレスを含む読み出し単位ブロック３０２の読み出し要求に対して１の末尾隣接フラグＶＦ（Ｌ）及び１の末尾識別子ＩＤ（Ｌ）を設定する。
【００７４】
また、第２のパケットコントローラ２０２ｂは、パケットｂの読み出し先頭アドレスを含むメモリ１０２ａの読み出し単位ブロック３０２の読み出し要求と、パケットｂの読み出し末尾アドレスを含むメモリ１０２ａの読み出し単位ブロック３０３の読み出し要求とを生成する。第２のパケットコントローラ２０２ｂは、パケットｂのパケット転送要求に１の先頭隣接フラグＶＦ（Ｆ）及び１の先頭識別子ＩＤ（Ｆ）が設定されている場合、パケットｂのパケット転送要求に基づく読み出し先頭アドレスを含む読み出し単位ブロック３０２の読み出し要求に対して１の先頭隣接フラグＶＦ（Ｆ）及び１の先頭識別子ＩＤ（Ｆ）を設定する。
【００７５】
そして、第２のパケットコントローラ２０２ｂは、パケットｂのパケット転送要求に１の末尾隣接フラグＶＦ（Ｌ）及び２の末尾識別子ＩＤ（Ｌ）が設定されている場合、パケットｂのパケット転送要求に基づく読み出し末尾アドレスを含む読み出し単位ブロック３０３の読み出し要求に対して１の末尾隣接フラグＶＦ（Ｌ）及び２の末尾識別子ＩＤ（Ｌ）を設定する。第３及び第４のパケットコントローラ２０２ｃ及び２０２ｄも同様である。
【００７６】
次に、ステップＳ１００３において、第１のパケットコントローラ２０２ａは、全読み出し要求の出力を完了していない場合にはステップＳ１００４に進み、全読み出し要求の出力を完了した場合にはステップＳ１００５に進む。
【００７７】
ステップＳ１００４において、第１のパケットコントローラ２０２ａは、上記の読み出し単位ブロック３０１の読み出し要求を第４のジョイントバッファ５０１ｄに出力し、読み出し単位ブロック３０２の読み出し要求を第１のジョイントバッファ５０１ａに出力する。第２のパケットコントローラ２０２ｂは、上記の読み出し単位ブロック３０２の読み出し要求を第１のジョイントバッファ５０１ａに出力し、読み出し単位ブロック３０３の読み出し要求を第２のジョイントバッファ５０１ｂに出力する。第３及び第４のパケットコントローラ２０２ｃ及び２０２ｄも同様である。
【００７８】
次に、ステップＳ１００５において、第１のパケットコントローラ２０２ａは、全読み出し要求の応答（読み出し単位ブロック３０１及び３０２）を受信していない場合にはステップＳ１００３に戻り、全読み出し要求の応答を受信した場合にはステップＳ１００６に進む。第２〜第４のパケットコントローラ２０２ｂ〜２０２ｄも同様である。
【００７９】
ステップＳ１００６において、第１のパケットコントローラ２０２ａは、上記の読み出し要求に応答して読み出された読み出し単位ブロック３０１の一部と読み出し単位ブロック３０２の一部を含むペイロードのパケットａを生成する。そして、第１のパケットコントローラ２０２ａは、パケットａをアービタ２０６及びネットワーク１０３を介して、転送先の中央演算処理装置１０１ｂのメモリ１０２ｂに送信する。
【００８０】
第２のパケットコントローラ２０２ｂは、上記の読み出し要求に応答して読み出された読み出し単位ブロック３０２の一部と読み出し単位ブロック３０３の一部を含むペイロードのパケットｂを生成する。そして、第２のパケットコントローラ２０２ｂは、パケットｂをアービタ２０６及びネットワーク１０３を介して、転送先の中央演算処理装置１０１ｂのメモリ１０２ｂに送信する。第３及び第４のパケットコントローラ２０２ｃ及び２０２ｄも同様である。
【００８１】
図１１は、第１のジョイントバッファ５０１ａの読み出し要求受信処理を示すフローチャートである。第２〜第４のジョイントバッファ５０１ｂ〜５０１ｄの処理も、第１のジョイントバッファ５０１ａの処理と同様である。
【００８２】
ステップＳ１１０１において、第１のジョイントバッファ５０１ａは、第１又は第２のパケットコントローラ２０２ａ又は２０２ｂから読み出し要求を受信した場合にはステップＳ１００２に進み、読み出し要求を受信していない場合には処理を終了する。
【００８３】
ステップＳ１１０２において、第１のジョイントバッファ５０１ａは、第１のパケットコントローラ２０２ａからの読み出し要求の末尾隣接フラグＶＦ（Ｌ）又は第２のパケットコントローラ２０２ｂからの読み出し要求の先頭隣接フラグＶＦ（Ｆ）が１であるか否かを判定する。第１のジョイントバッファ５０１ａは、隣接フラグＶＦ（Ｌ）又はＶＦ（Ｆ）が１である場合にはステップＳ１１０３に進み、隣接フラグＶＦ（Ｌ）又はＶＦ（Ｆ）が１でない場合にはステップＳ１１０６に進む。
【００８４】
ステップＳ１００６において、第１のジョイントバッファ５０１ａが第１のパケットコントローラ２０２ａから読み出し要求を受信した場合、セレクタＳＥＬ０は、第１のパケットコントローラ２０２ａからの読み出し要求を、ＤＡＭコントローラ２０５及び制御部１１２を介して、メモリ１０２ａに出力する。
【００８５】
第１のジョイントバッファ５０１ａが第２のパケットコントローラ２０２ｂから読み出し要求を受信した場合、セレクタＳＥＬ１は、第２のパケットコントローラ２０２ｂからの読み出し要求を、ＤＡＭコントローラ２０５及び制御部１１２を介して、メモリ１０２ａに出力する。例えば、第４のジョイントバッファ５０１ｄのセレクタＳＥＬ１は、第１のパケットコントローラ２０２ａからの読み出し単位ブロック３０１の読み出し要求を、ＤＡＭコントローラ２０５及び制御部１１２を介して、メモリ１０２ａに出力する。
【００８６】
ステップＳ１００３において、第１のジョイントバッファ５０１ａは、記憶部６０１に記憶されている状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＩＤＬＥであるか否かを判定する。状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳの初期値は、ＩＤＬＥである。第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＩＤＬＥである場合にはステップＳ１１０７に進み、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＩＤＬＥでない場合にはステップＳ１１０４に進む。
【００８７】
ステップＳ１１０７において、セレクタＳＥＬ０は、第１のパケットコントローラ２０２ａからの読み出し単位ブロック３０２の読み出し要求を、ＤＡＭコントローラ２０５及び制御部１１２を介して、メモリ１０２ａに出力する。第１のジョイントバッファ５０１ａは、記憶部６０１に記憶されている状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＤＭＡ＿ＷＡＩＴに更新する。第１のジョイントバッファ５０１ａは、第１のパケットコントローラ２０２ａからの読み出し単位ブロック３０２の読み出し要求に設定されている末尾識別子ＩＤ（Ｌ）を、識別子Ｊｏｉｎｔ＿ＩＤとして記憶部６０２に登録する。第１のジョイントバッファ５０１ａは、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）として１を記憶部６０３に登録する。これにより、第１のジョイントバッファ５０１ａは、読み出し要求に対する応答（読み出し単位ブロック３０２）の待機状態になる。
【００８８】
ステップＳ１１０４において、第１のジョイントバッファ５０１ａは、記憶部６０１の状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＷＡＩＴであり、かつ、記憶部６０２の識別子Ｊｏｉｎｔ＿ＩＤが受信読み出し要求の先頭隣接フラグＶＦ（Ｆ）と一致している条件を満たすか否かを判定する。第１のジョイントバッファ５０１ａは、上記の条件を満たす場合にはステップＳ１１０８に進み、上記の条件を満たさない場合にはステップＳ１１０５に進む。
【００８９】
ステップＳ１１０８において、第１のジョイントバッファ５０１ａは、受信した読み出し要求をＤＭＡコントローラ２０５に出力しない。例えば、第１のジョイントバッファ５０１ａにおいて、セレクタＳＥＬ１は、第２のパケットコントローラ２０２ｂからの読み出し単位ブロック３０２の読み出し要求をＤＭＡコントローラ２０５に出力しない。第１のジョイントバッファ５０１ａは、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）として１を記憶部６０３に登録する。これにより、第１のジョイントバッファ５０１ａは、読み出し要求に対する応答（読み出し単位ブロック３０２）の待機状態を維持する。
【００９０】
ステップＳ１１０５において、第１のジョイントバッファ５０１ａは、記憶部６０１の状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＨＯＬＤであり、かつ、記憶部６０２の識別子Ｊｏｉｎｔ＿ＩＤが受信読み出し要求の識別子ＩＤ（Ｆ）と一致している条件を満たすか否かを判定する。第１のジョイントバッファ５０１ａは、上記の条件を満たす場合にはステップＳ１１０９に進み、上記の条件を満たさない場合にはステップＳ１１１０に進む。
【００９１】
ステップＳ１１０９において、第１のジョイントバッファ５０１ａは、受信した読み出し要求をＤＭＡコントローラ２０５に出力しない。例えば、第１のジョイントバッファ５０１ａにおいて、セレクタＳＥＬ１は、第２のパケットコントローラ２０２ｂからの読み出し単位ブロック３０２の読み出し要求をＤＭＡコントローラ２０５に出力しない。第１のジョイントバッファ５０１ａは、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）として１を記憶部６０３に登録する。第１のジョイントバッファ５０１ａは、記憶部６０１に記憶されている状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＤＭＡ＿ＳＥＮＤに更新する。これにより、第１のジョイントバッファ５０１ａは、バッファ６０４に保持されている読み出し単位ブロック３０２を第２のパケットバッファ２０３ｂに送信可能な状態になる。
【００９２】
ステップＳ１１１０において、第１のジョイントバッファ５０１ａが第１のパケットコントローラ２０２ａから読み出し要求を受信した場合、セレクタＳＥＬ０は、第１のパケットコントローラ２０２ａからの読み出し要求を、ＤＡＭコントローラ２０５及び制御部１１２を介して、メモリ１０２ａに出力する。
【００９３】
第１のジョイントバッファ５０１ａが第２のパケットコントローラ２０２ｂから読み出し要求を受信した場合、セレクタＳＥＬ１は、第２のパケットコントローラ２０２ｂからの読み出し要求を、ＤＡＭコントローラ２０５及び制御部１１２を介して、メモリ１０２ａに出力する。
【００９４】
例えば、第１のジョイントバッファ５０１ａは、読み出し単位ブロック３０６の読み出し要求を受信しているが、その前の読み出しブロック３０２の処理が終了していない状態である。その場合、第１のジョイントバッファ５０１ａは、読み出し単位ブロック３０６を保持することができないので、受信した読み出し要求をＤＭＡコントローラ２０５に出力する。
【００９５】
図１２は、第１のジョイントバッファ５０１ａの読み出し要求の応答受信処理を示すフローチャートである。第２〜第４のジョイントバッファ５０１ｂ〜５０１ｄの処理も、第１のジョイントバッファ５０１ａの処理と同様である。
【００９６】
ステップＳ１２０１において、第１のジョイントバッファ５０１ａは、ＤＭＡコントローラ２０５及び制御部１１２を介してメモリ１０２ａから、読み出し要求に応答して読み出された読み出し単位ブロックを受信したか否かを判定する。第１のジョイントバッファ５０１ａは、読み出し単位ブロックを受信した場合にはステップＳ１２０４に進み、読み出し単位ブロックを受信していない場合にはステップＳ１２０２に進む。
【００９７】
ステップＳ１２０２において、第１のジョイントバッファ５０１ａは、記憶部６０１の状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＳＥＮＤである場合にはステップＳ１２０３に進み、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＳＥＮＤでない場合には処理を終了する。
【００９８】
ステップＳ１２０３において、第１のジョイントバッファ５０１ａは、バッファ６０４に保持されている読み出し単位ブロックを読み出す。隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）が１である場合、セレクタＳＥＬ２は、バッファ６０４から読み出された読み出し単位ブロックを第１のパケットバッファ２０３ａに出力する。隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）が１である場合、セレクタＳＥＬ３は、バッファ６０４から読み出された読み出し単位ブロックを第２のパケットバッファ２０３ｂに出力する。例えば、セレクタＳＥＬ３は、バッファ６０４から読み出された読み出し単位ブロック３０２を第２のパケットバッファ２０３ｂに出力する。第１のジョイントバッファ５０１ａは、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）を０にリセットし、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＩＤＬＥに更新する。
【００９９】
ステップＳ１２０４において、第１のジョイントバッファ５０１ａは、記憶部６０３の隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）又はＪｏｉｎｔ＿Ｖａｌｉｄ（１）が１であり、かつ、記憶部６０２の識別子Ｊｏｉｎｔ＿ＩＤが受信読み出し要求の識別子ＩＤ（Ｆ）又はＩＤ（Ｌ）と一致し、かつ、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＷＡＩＴであることの条件を満たすか否かを判定する。第１のジョイントバッファ５０１ａは、上記の条件を満たしている場合にはステップＳ１２０６に進み、上記の条件を満たしていない場合にはステップＳ１２０５に進む。
【０１００】
ステップＳ１２０５において、第１のジョイントバッファ５０１ａが第１のパケットコントローラ２０２ａから読み出し要求を受信した場合、セレクタＳＥＬ２は、ＤＭＡコントローラ２０５及び制御部１１２を介してメモリ１０２ａから読み出された読み出し単位ブロックを、第１のパケットバッファ２０３ａに出力する。
【０１０１】
第１のジョイントバッファ５０１ａが第２のパケットコントローラ２０２ｂから読み出し要求を受信した場合、セレクタＳＥＬ３は、ＤＭＡコントローラ２０５及び制御部１１２を介してメモリ１０２ａから読み出された読み出し単位ブロックを、第２のパケットバッファ２０３ｂに出力する。
【０１０２】
ステップＳ１２０６において、第１のジョイントバッファ５０１ａは、ＤＭＡコントローラ２０５及び制御部１１２を介してメモリ１０２ａから読み出された読み出し単位ブロックを、バッファ６０４に書き込む。
【０１０３】
記憶部６０３の隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）が１である場合、セレクタＳＥＬ２は、ＤＭＡコントローラ２０５及び制御部１１２を介してメモリ１０２ａから読み出された読み出し単位ブロックを、第１のパケットバッファ２０３ａに出力する。
【０１０４】
記憶部６０３の隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）が１である場合、セレクタＳＥＬ３は、ＤＭＡコントローラ２０５及び制御部１１２を介してメモリ１０２ａから読み出された読み出し単位ブロックを、第２のパケットバッファ２０３ｂに出力する。
【０１０５】
次に、ステップＳ１２０７において、第１のジョイントバッファ５０１ａは、記憶部６０３の隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）が共に１であるか否かを判定する。第１のジョイントバッファ５０１ａは、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）が共に１である場合にはステップＳ１２０８に進み、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）が共に１でない場合にはステップＳ１２０９に進む。
【０１０６】
ステップＳ１２０８において、第１のジョイントバッファ５０１ａは、記憶部６０４の隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）を０にリセットする。第１のジョイントバッファ５０１ａは、記憶部６０１の状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＩＤＬＥに更新する。例えば、第１のジョイントバッファ５０１ａは、第１のパケットコントローラ２０２ａから読み出し単位ブロック３０２の読み出し要求を受信し、第２のパケットコントローラ２０２ｂから読み出し単位ブロック３０２の読み出し要求を受信し、その後、ＤＭＡコントローラ２０５から読み出し単位ブロック３０２を受信した状態である。この場合、ステップＳ１２０６において、第１のジョイントバッファ５０１ａは、ＤＭＡコントローラ２０５から受信した読み出し単位ブロック３０２を第１及び第２のパケットバッファ２０３ａ及び２０３ｂに出力する。この処理の詳細は、後に図１４を参照しながら説明する。
【０１０７】
ステップＳ１２０９において、第１のジョイントバッファ５０１ａは、記憶部６０３の隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）を０にリセットする。第１のジョイントバッファ５０１ａは、記憶部６０１の状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＤＭＡ＿ＨＯＬＤに更新する。例えば、第１のジョイントバッファ５０１ａは、第１のパケットコントローラ２０２ａから読み出し単位ブロック３０２の読み出し要求を受信し、その後、ＤＭＡコントローラ２０５から読み出し単位ブロック３０２を受信した状態である。この場合、ステップＳ１２０６において、第１のジョイントバッファ５０１ａは、ＤＭＡコントローラ２０５から受信した読み出し単位ブロック３０２をバッファ６０４に書き込むと共に、第１のパケットバッファ２０３ａに出力する。この処理の詳細は、後に図１３を参照しながら説明する。
【０１０８】
図１３は、図１２のステップＳ１２０９に対応するネットワークコントローラ１１３の処理例を示すタイムチャートである。サイクル０において、第４のジョイントバッファ５０１ｄは、第１のパケットコントローラ２０２ａからパケットａの先頭読み出し要求Ｒ０−０を受信する。先頭読み出し要求Ｒ０−０は、先頭隣接フラグＶＦ（Ｆ）が０であり、先頭識別子ＩＤ（Ｆ）が０である。第４のジョイントバッファ５０１ｄのセレクタＳＥＬ１は、上記の受信した先頭読み出し要求Ｒ０−０をＤＭＡコントローラ２０５に出力する。
【０１０９】
サイクル０の第１のジョイントバッファ５０１ａにおいて、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳはＩＤＬＥであり、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）は０である。
【０１１０】
サイクル２において、第１のジョイントバッファ５０１ａは、第１のパケットコントローラ２０２ａからパケットａの末尾読み出し要求Ｒ０−１を受信する。末尾読み出し要求Ｒ０−１は、末尾隣接フラグＶＦ（Ｌ）が１であり、末尾識別子ＩＤ（Ｌ）が１である。第１のジョイントバッファ５０１ａのセレクタＳＥＬ０は、上記の受信した末尾読み出し要求Ｒ０−１をＤＭＡコントローラ２０５に出力する。
【０１１１】
サイクル３において、第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＤＭＡ＿ＷＡＩＴに更新し、識別子Ｊｏｉｎｔ＿ＩＤとして末尾識別子ＩＤ（Ｌ）＝１を登録し、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）を１に設定する。
【０１１２】
サイクル５において、第４のジョイントバッファ５０１ｄは、先頭読み出し要求Ｒ０−０に応答して読み出された読み出し単位ブロック３０１を、ＤＭＡコントローラ２０５から受信する。第４のジョイントバッファ５０１ｄのセレクタＳＥＬ３は、その受信した読み出し単位ブロック３０１を第１のパケットバッファ２０３ａに出力する。
【０１１３】
サイクル７において、第１のジョイントバッファ５０１ａは、末尾読み出し要求Ｒ０−１に応答して読み出された読み出し単位ブロック３０２を、ＤＭＡコントローラ２０５から受信する。第１のジョイントバッファ５０１ａのセレクタＳＥＬ２は、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）が１であるので、その受信した読み出し単位ブロック３０２を第１のパケットバッファ２０３ａに出力する。
【０１１４】
サイクル８において、第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＷＡＩＴであり、かつ、末尾識別子ＩＤ（Ｌ）＝１が識別子Ｊｏｉｎｔ＿ＩＤ＝１と同じであるので、末尾読み出し要求Ｒ０−１に応答して読み出された読み出し単位ブロック３０２を、バッファ６０４に書き込む。第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＤＭＡ＿ＨＯＬＤに更新し、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）を０にリセットする。
【０１１５】
サイクル１０において、第１のジョイントバッファ５０１ａは、第２のパケットコントローラ２０２ｂからパケットｂの先頭読み出し要求Ｒ１−０を受信する。先頭読み出し要求Ｒ１−０は、先頭隣接フラグＶＦ（Ｆ）が１であり、先頭識別子ＩＤ（Ｆ）が１である。第１のジョイントバッファ５０１ａのセレクタＳＥＬ１は、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＨＯＬＤであり、かつ、先頭識別子ＩＤ（Ｆ）＝１が識別子Ｊｏｉｎｔ＿ＩＤ＝１と同じであるので、上記の受信した先頭読み出し要求Ｒ１−０をＤＭＡコントローラ２０５に出力しない。
【０１１６】
サイクル１１において、第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＤＭＡ＿ＳＥＮＤに更新し、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）を１に設定する。第１のジョイントバッファ５０１ａのセレクタＳＥＬ３は、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＳＥＮＤであり、かつ、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）が１であるので、先頭読み出し要求Ｒ１−０に応答し、バッファ６０４に保持されている読み出し単位バッファ３０２を第２のパケットバッファ２０３ｂに出力する。
【０１１７】
サイクル１２において、第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＩＤＬＥに更新し、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）を０にリセットする。
【０１１８】
第２のジョイントバッファ５０１ｂは、第２のパケットコントローラ２０２ｂからパケットｂの末尾読み出し要求Ｒ１−１を受信する。ここで、末尾読み出し要求Ｒ１−１は、末尾隣接フラグＶＦ（Ｆ）が０であり、先頭識別子ＩＤ（Ｆ）が２である場合を説明する。第２のジョイントバッファ５０１ｂのセレクタＳＥＬ０は、上記の受信した末尾読み出し要求Ｒ１−１をＤＭＡコントローラ２０５に出力する。
【０１１９】
サイクル１４において、第２のジョイントバッファ５０１ｂは、末尾読み出し要求Ｒ１−１に応答して読み出された読み出し単位ブロック３０３を、ＤＭＡコントローラ２０５から受信する。第２のジョイントバッファ５０１ｂのセレクタＳＥＬ２は、その受信した読み出し単位ブロック３０３を第２のパケットバッファ２０３ｂに出力する。
【０１２０】
図１４は、図１２のステップＳ１２０８に対応するネットワークコントローラ１１３の処理例を示すタイムチャートである。サイクル０において、第４のジョイントバッファ５０１ｄは、第１のパケットコントローラ２０２ａからパケットａの先頭読み出し要求Ｒ０−０を受信する。先頭読み出し要求Ｒ０−０は、先頭隣接フラグＶＦ（Ｆ）が０であり、先頭識別子ＩＤ（Ｆ）が０である。第４のジョイントバッファ５０１ｄのセレクタＳＥＬ１は、上記の受信した先頭読み出し要求Ｒ０−０をＤＭＡコントローラ２０５に出力する。
【０１２１】
サイクル０の第１のジョイントバッファ５０１ａにおいて、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳはＩＤＬＥであり、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）は０である。
【０１２２】
サイクル２において、第１のジョイントバッファ５０１ａは、第１のパケットコントローラ２０２ａからパケットａの末尾読み出し要求Ｒ０−１を受信する。末尾読み出し要求Ｒ０−１は、末尾隣接フラグＶＦ（Ｌ）が１であり、末尾識別子ＩＤ（Ｌ）が１である。第１のジョイントバッファ５０１ａのセレクタＳＥＬ０は、上記の受信した末尾読み出し要求Ｒ０−１をＤＭＡコントローラ２０５に出力する。
【０１２３】
サイクル３において、第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＤＭＡ＿ＷＡＩＴに更新し、識別子Ｊｏｉｎｔ＿ＩＤとして末尾識別子ＩＤ（Ｌ）＝１を登録し、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）を１に設定する。
【０１２４】
サイクル４において、第１のジョイントバッファ５０１ａは、第２のパケットコントローラ２０２ｂからパケットｂの先頭読み出し要求Ｒ１−０を受信する。先頭読み出し要求Ｒ１−０は、先頭隣接フラグＶＦ（Ｆ）が１であり、先頭識別子ＩＤ（Ｆ）が１である。第１のジョイントバッファ５０１ａのセレクタＳＥＬ１は、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＷＡＩＴであり、かつ、先頭識別子ＩＤ（Ｆ）＝１が識別子Ｊｏｉｎｔ＿ＩＤ＝１と同じであるので、上記の受信した先頭読み出し要求Ｒ１−０をＤＭＡコントローラ２０５に出力しない。
【０１２５】
サイクル５において、第１のジョイントバッファ５０１ａは、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）を１に設定する。
【０１２６】
第４のジョイントバッファ５０１ｄは、先頭読み出し要求Ｒ０−０に応答して読み出された読み出し単位ブロック３０１を、ＤＭＡコントローラ２０５から受信する。第４のジョイントバッファ５０１ｄのセレクタＳＥＬ３は、その受信した読み出し単位ブロック３０１を第１のパケットバッファ２０３ａに出力する。
【０１２７】
サイクル７において、第１のジョイントバッファ５０１ａは、末尾読み出し要求Ｒ０−１に応答して読み出された読み出し単位ブロック３０２を、ＤＭＡコントローラ２０５から受信する。第１のジョイントバッファ５０１ａのセレクタＳＥＬ２は、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）が１であるので、その受信した読み出し単位ブロック３０２を第１のパケットバッファ２０３ａに出力する。第１のジョイントバッファ５０１ａのセレクタＳＥＬ３は、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（１）が１であるので、その受信した読み出し単位ブロック３０２を第２のパケットバッファ２０３ｂに出力する。
【０１２８】
サイクル８において、第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳがＤＭＡ＿ＷＡＩＴであり、かつ、末尾識別子ＩＤ（Ｌ）＝１が識別子Ｊｏｉｎｔ＿ＩＤ＝１と同じであるので、末尾読み出し要求Ｒ０−１に応答して読み出された読み出し単位ブロック３０２を、バッファ６０４に書き込む。ただし、バッファ６０４の読み出し単位ブロック３０２は、使用されない。第１のジョイントバッファ５０１ａは、状態Ｊｏｉｎｔ＿ＳＴＡＴＵＳをＤＭＡ＿ＩＤＬＥに更新し、隣接フラグＪｏｉｎｔ＿Ｖａｌｉｄ（０）及びＪｏｉｎｔ＿Ｖａｌｉｄ（１）を０にリセットする。
【０１２９】
サイクル１２において、第２のジョイントバッファ５０１ｂは、第２のパケットコントローラ２０２ｂからパケットｂの末尾読み出し要求Ｒ１−１を受信する。ここで、末尾読み出し要求Ｒ１−１は、末尾隣接フラグＶＦ（Ｆ）が０であり、先頭識別子ＩＤ（Ｆ）が２である場合を説明する。第２のジョイントバッファ５０１ｂのセレクタＳＥＬ０は、上記の受信した末尾読み出し要求Ｒ１−１をＤＭＡコントローラ２０５に出力する。
【０１３０】
サイクル１４において、第２のジョイントバッファ５０１ｂは、末尾読み出し要求Ｒ１−１に応答して読み出された読み出し単位ブロック３０３を、ＤＭＡコントローラ２０５から受信する。第２のジョイントバッファ５０１ｂのセレクタＳＥＬ２は、その受信した読み出し単位ブロック３０３を第２のパケットバッファ２０３ｂに出力する。
【０１３１】
以上のように、ネットワークコントローラ１１３は、メモリ１０２ａの読み出し単位ブロック３０１〜３０７をそれぞれ１回ずつ読み出し、第１〜第４のジョイントバッファ５０１ａ〜５０１ｄに読み出し単位ブロック３０２〜３０７を保持させる。第１〜第４のパケットコントローラ２０２ａ〜２０２ｄは、第１〜第４のジョイントバッファ５０１ａ〜５０１ｄから必要な読み出し単位ブロック３０２〜３０７を得ることができる。これにより、メモリ１０２ａの読み出し効率及びスループットが向上する。
【０１３２】
また、第１〜第４のジョイントバッファ５０１ａ〜５０１ｄは、大容量のキャッシュに比べ、実装面積が小さく、制御が容易である。これにより、中央演算処理装置１０１ａ〜１０１ｄをそれぞれ高集積化することができる。
【０１３３】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【０１３４】
１０１ａ〜１０１ｄ  中央演算処理装置
１０２ａ〜１０２ｄ  メモリ
１１３  ネットワークコントローラ
２０１  コントロールマネージャ
２０２ａ〜２０２ｄ  第１〜第４のパケットコントローラ
２０３ａ〜２０３ｄ  第１〜第４のパケットバッファ
２０４ａ〜２０４ｄ  セレクタ
２０５  ＤＭＡコントローラ
２０６  アービタ
２０７  パケットレシーバ
５０１ａ〜５０１ｄ  第１〜第４のジョイントバッファ
５０２ａ〜５０２ｄ  セレクタ
５０３ａ〜５０３ｄ  セレクタ
【図１】
2019091333.tif 000003
【図２】
2019091333.tif 000004
【図３】
2019091333.tif 000005
【図４】
2019091333.tif 000006
【図５】
2019091333.tif 000007
【図６】
2019091333.tif 000008
【図７】
2019091333.tif 000009
【図８】
2019091333.tif 000010
【図９】
2019091333.tif 000011
【図１０】
2019091333.tif 000012
【図１１】
2019091333.tif 000013
【図１２】
2019091333.tif 000014
【図１３】
2019091333.tif 000015
【図１４】
2019091333.tif 000016