(57)【特許請求の範囲】
【請求項１】
他の演算処理装置に接続される演算処理装置であって、
処理対象データの読出要求を生成する処理部と、
前記処理部が生成した読出要求を前記他の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記他の演算処理装置から受信する通信部と、
前記データブロックを保存するバッファと、
前記通信部が受信した前記データブロックに含まれる複数の単位データを前記バッファに順次書き込む書込部と、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す読出部と、を有し、
前記読出部は、
前記データブロックに付された応答ヘッダに前記他の演算処理装置によって記録された前記処理対象データのアドレス情報であって、前記複数の単位データの中から前記処理対象データを特定するための情報を参照し、
当該アドレス情報に対応する前記処理対象データを前記バッファから読み出した後、
前記処理対象データ以外の単位データを前記バッファから順次読み出す、演算処理装置。
【請求項２】
他の演算処理装置に接続される演算処理装置であって、
処理対象データの読出要求を生成する処理部と、
前記処理部が生成した読出要求を前記他の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記他の演算処理装置から受信する通信部と、
前記データブロックを保存するバッファと、
前記通信部が受信した前記データブロックに含まれる複数の単位データを前記バッファに順次書き込む書込部と、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す読出部と、を有し、
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記通信部は、
前記所定間隔に関する情報を含む前記読出要求を前記他の演算処理装置へ送信し、
前記読出部は、
前記データブロックに付された応答ヘッダに前記他の演算処理装置によって記録された先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、演算処理装置。
【請求項３】
第１の演算処理装置と、
前記第１の演算処理装置に接続される第２の演算処理装置と、を有し、
前記第１の演算処理装置は、
処理対象データの読出要求を生成する処理部と、
前記処理部が生成した読出要求を前記第２の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記第２の演算処理装置から受信する第１の通信部と、
前記データブロックを保存するバッファと、
前記第１の通信部が受信した前記データブロックに含まれる複数の単位データを前記バッファに順次書き込む書込部と、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す読出部と、を有し、
前記第２の演算処理装置は、
前記第１の演算処理装置から前記読出要求を受信するとともに、受信した前記読出要求に対応する前記処理対象データを含む前記データブロックを前記第１の演算処理装置へ送信する第２の通信部を有し、
前記第２の演算処理装置における前記第２の通信部は、
前記読出要求に含まれるアドレス情報から取り出された前記処理対象データのアドレス情報であって、前記複数の単位データの中から前記処理対象データを特定するための情報を記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第１の演算処理装置へ送信する、情報処理装置。
【請求項４】
第１の演算処理装置と、
前記第１の演算処理装置に接続される第２の演算処理装置と、を有し、
前記第１の演算処理装置は、
処理対象データの読出要求を生成する処理部と、
前記処理部が生成した読出要求を前記第２の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記第２の演算処理装置から受信する第１の通信部と、
前記データブロックを保存するバッファと、
前記第１の通信部が受信した前記データブロックに含まれる複数の単位データを前記バッファに順次書き込む書込部と、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す読出部と、を有し、
前記第２の演算処理装置は、
前記第１の演算処理装置から前記読出要求を受信するとともに、受信した前記読出要求に対応する前記処理対象データを含む前記データブロックを前記第１の演算処理装置へ送信する第２の通信部を有し、
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記第１の演算処理装置における前記第１の通信部は、
前記所定間隔に関する情報を含む前記読出要求を前記第２の演算処理装置へ送信し、
前記第２の演算処理装置における前記第２の通信部は、
前記読出要求に含まれるアドレス情報から取り出された先頭の前記処理対象データのアドレス情報であって、前記複数の単位データの中から前記先頭の前記処理対象データを特定するための情報と、前記読出要求から取り出された前記所定間隔に関する情報とを記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第１の演算処理装置へ送信する、情報処理装置。
【請求項５】
前記第１の演算処理装置における前記読出部は、
前記データブロックに付された前記応答ヘッダに記録された前記先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき、前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、請求項４に記載の情報処理装置。
【請求項６】
第１の演算処理装置と、前記第１の演算処理装置に接続される第２の演算処理装置と、を有する情報処理装置の制御方法であって、
前記第１の演算処理装置は、
処理対象データの読出要求を前記第２の演算処理装置へ送信し、
前記第２の演算処理装置は、
前記第１の演算処理装置から前記読出要求を受信すると、受信した前記読出要求に含まれるアドレス情報から取り出された前記処理対象データのアドレス情報であって、前記処理対象データを特定するための情報を記録した応答ヘッダを、前記読出要求に対応する前記処理対象データを含むデータブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第１の演算処理装置へ送信し、
前記第１の演算処理装置は、
前記読出要求に対応する前記処理対象データを含む前記データブロックを前記第２の演算処理装置から受信し、
受信した前記データブロックに含まれる複数の単位データをバッファに順次書き込み、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す、情報処理装置の制御方法。
【請求項７】
第１の演算処理装置と、前記第１の演算処理装置に接続される第２の演算処理装置と、を有する情報処理装置において、
前記第１の演算処理装置は、
処理対象データの読出要求を前記第２の演算処理装置へ送信し、
前記第２の演算処理装置は、
前記第１の演算処理装置から前記読出要求を受信すると、受信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記第１の演算処理装置へ送信し、
前記第１の演算処理装置は、
前記読出要求に対応する前記処理対象データを含む前記データブロックを前記第２の演算処理装置から受信し、
受信した前記データブロックに含まれる複数の単位データをバッファに順次書き込み、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す、情報処理装置の制御方法であって、
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記第１の演算処理装置は、
前記所定間隔に関する情報を含む前記読出要求を前記第２の演算処理装置へ送信し、
前記第２の演算処理装置は、
前記読出要求に含まれるアドレス情報から取り出された先頭の前記処理対象データのアドレス情報であって、前記複数の単位データの中から前記先頭の前記処理対象データを特定するための情報と、前記読出要求から取り出された前記所定間隔に関する情報とを記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第１の演算処理装置へ送信する、情報処理装置の制御方法。
【請求項８】
前記第１の演算処理装置は、
前記データブロックに付された前記応答ヘッダに記録された前記先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき、前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、請求項７に記載の情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、演算処理装置、情報処理装置、および情報処理装置の制御方法に関する。
【背景技術】
【０００２】
ＰＣ（Personal Computer），サーバなどの情報処理装置には、メモリから読み出したデータに対する演算処理を行なう、ＣＰＵ（Central Processing Unit）などの演算処理装置が含まれる。このような情報処理装置では、エンドポイントであるＣＰＵからメモリに対する読出要求となるフェッチ要求が発行された後、当該読出要求に対応する応答データをＣＰＵが受信するまでのレイテンシが、処理性能の重要なファクタの一つになっている。
【０００３】
また、情報処理装置としては、複数のＣＰＵを相互に通信可能に接続されるマルチプロセッサシステムが用いられる場合がある。このようなマルチプロセッサシステムでは、近年、例えば図１４に示すように、複数のＣＰＵやルータの相互間が、高速シリアル伝送によるネットワークを介して接続される。高速シリアル伝送を採用することによって、通信の高スループットを実現することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１２４４４８号公報
【特許文献２】特開２０１０−１１６２２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、高速シリアル伝送によるネットワークでは、伝送エラーがＣＲＣ（Cyclic Redundancy Check；巡回冗長検査）によってチェックされる。そして、伝送エラーが検出されるとパケットの末尾がＥＤＢ（end bad）に書き換えられる。そのため、エンドポイント（ＣＰＵ）では、応答データを含むパケットの末尾までの全てのデータを受信しないと、そのパケットが正常か否かを判定することができない。
【０００６】
したがって、フェッチ要求を発行したＣＰＵでは、当該フェッチ要求に応じた応答データを含むパケットの末尾までの全てのデータが、一旦、受信バッファに保存されてから、受信バッファにおけるデータが先頭から順にＣＰＵコアに送り出される。
【０００７】
しかしながら、受信バッファはＦＩＦＯ（First In First Out）であるので、ＣＰＵコアが要求している処理対象データ（一単位データ；例えば８バイトデータ）の、受信バッファからの読出は、当該単位データ直前のデータが読み出されるまで待たされる。このため、ＣＰＵコアから見て通信レイテンシが大きくなり処理性能が低下する場合がある。
【０００８】
一つの側面で、本件明細書に開示の発明は、処理対象データの読出レイテンシを短縮することを目的とする。
【課題を解決するための手段】
【０００９】
本件の演算処理装置は、他の演算処理装置に接続されるものであって、処理部，通信部，バッファ，書込部および読出部を有する。前記処理部は、処理対象データの読出要求を生成する。前記通信部は、前記処理部が生成した読出要求を前記他の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記他の演算処理装置から受信する。前記バッファは、前記データブロックを保存する。前記書込部は、前記通信部が受信した前記データブロックに含まれる複数の単位データを前記バッファに順次書き込む。前記読出部は、前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す。また、前記読出部は、前記データブロックに付された応答ヘッダに前記他の演算処理装置によって記録された前記処理対象データのアドレス情報であって、前記複数の単位データの中から前記処理対象データを特定するための情報を参照し、当該アドレス情報に対応する前記処理対象データを前記バッファから読み出した後、前記処理対象データ以外の単位データを前記バッファから順次読み出す。
【発明の効果】
【００１０】
一実施形態によれば、処理対象データの読出レイテンシを短縮することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１実施形態および第２実施形態としての演算処理装置（ＣＰＵ）を含む情報処理装置の構成を示すブロック図である。
【図２】第１実施形態の情報処理装置において一ＣＰＵから他ＣＰＵへフェッチ要求を行なう場合のパケットルーティングを説明する図である。
【図３】第１実施形態におけるフェッチ応答パケットのヘッダのフォーマットを示す図である。
【図４】第１実施形態のＣＰＵにおけるルータに含まれる受信バッファおよび当該受信バッファに対するパケット書込／読出処理に係る構成（書込部および読出部）を示すブロック図である。
【図５】図４に示すパケット読出処理に係る構成（読出部）を詳細に示すブロック図である。
【図６】図５に示すパケット読出処理に係る構成（読出部）の動作を説明するフローチャートである。
【図７】図４および図５に示すパケット読出処理に係る構成（読出部）が図６に示すフローチャートに従って１０番目のデータを最初に読み出す場合の動作を示すタイムチャートである。
【図８】（Ａ）は第２実施形態におけるフェッチ要求パケットのヘッダのフォーマットを示す図、（Ｂ）は第２実施形態におけるフェッチ応答パケットのヘッダのフォーマットを示す図である。
【図９】第２実施形態の情報処理装置において一ＣＰＵから他ＣＰＵへフェッチ要求を行なう場合のパケットルーティングを説明する図である。
【図１０】第２実施形態のＣＰＵにおけるルータに含まれる受信バッファおよび当該受信バッファに対するパケット書込／読出処理に係る構成（書込部および読出部）を示すブロック図である。
【図１１】図１０に示すパケット読出処理に係る構成（読出部）を詳細に示すブロック図である。
【図１２】図１１に示すパケット読出処理に係る構成（読出部）の動作を説明するフローチャートである。
【図１３】図１０および図１１に示すパケット読出処理に係る構成（読出部）が図１２に示すフローチャートに従って２，６，１０，１４番目のデータを先に読み出す場合の動作を示すタイムチャートである。
【図１４】マルチプロセッサシステム（情報処理装置）の構成の一例を示すブロック図である。
【図１５】マルチコアプロセッサ（ＣＰＵ，演算処理装置）の構成の一例を示すブロック図である。
【図１６】図１４に示すマルチプロセッサシステムにおいて一ＣＰＵから他ＣＰＵへフェッチ要求を行なう場合のパケットルーティングを説明する図である。
【図１７】（Ａ）はデータ無しパケットのフォーマットを示す図、（Ｂ）はデータ付きパケットのフォーマットを示す図である。
【図１８】（Ａ）はフェッチ要求パケットのヘッダのフォーマットを示す図、（Ｂ）はフェッチ応答パケットのヘッダのフォーマットを示す図である。
【図１９】図１５に示すＣＰＵ（マルチコアプロセッサ）におけるルータに含まれる受信バッファおよび当該受信バッファに対するパケット書込／読出処理に係る構成を示すブロック図である。
【図２０】図１９に示すパケット書込処理に係る構成の動作を説明するフローチャートである。
【図２１】図１９に示すパケット読出処理に係る構成の動作を説明するフローチャートである。
【図２２】図１９に示すパケット書込／読出処理に係る構成において最短ケースの動作を示すタイムチャートである。
【図２３】図１９に示すパケット書込処理に係る構成において受信パケットの末尾がＥＤＢである場合の動作を示すタイムチャートである。
【発明を実施するための形態】
【００１２】
以下に、図面を参照し、本願の開示する演算処理装置、情報処理装置、および情報処理装置の制御方法の実施形態について、詳細に説明する。ただし、以下に示す実施形態は、あくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能を含むことができる。そして、各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【００１３】
〔１〕本実施形態に関連する技術
まず、図１４〜図２３を参照しながら本実施形態に関連する技術について説明する。
近年、マルチプロセッサシステム（情報処理装置）では、通信の高スループットを実現すべく、図１４に示すように、複数のＣＰＵやルータの相互間が、高速シリアル伝送によるネットワーク（図１６の符号３０参照）を介して接続される。図１４は、マルチプロセッサシステムの構成の一例を示すブロック図である。
【００１４】
また、近年、ＣＰＵとしては、複数のコア（core）を内蔵したマルチコアプロセッサが一般的に用いられる。ここで、図１５を参照しながら、図１４に示すマルチプロセッサシステムを構成する各ＣＰＵ（マルチコアプロセッサ，演算処理装置）１０の構成の一例について説明する。図１５は、ＣＰＵ１０の構成の一例を示すブロック図である。
【００１５】
図１５に示すように、ＣＰＵ１０においては、複数のコア１１が共有キャッシュ（三次キャッシュ）１２を介して接続されている。図１５では、コア１１として、Ｎ＋１個のコア＃０〜コア＃Ｎ（Ｎは１以上の整数）が備えられている。図１５では、一次キャッシュ（不図示）および二次キャッシュ（不図示）が各コア１１に内蔵され、三次キャッシュが、共有キャッシュ１２として用いられているが、一次キャッシュを各コア１１に内蔵し、二次キャッシュを共有キャッシュ１２として用いてもよい。
【００１６】
共有キャッシュ１２には、コア１１のほかにＭＡＣ（Memory Access Controller）１３およびルータ（Router）１４が接続されている。ＭＡＣ１３は、メインメモリとして機能するＤＩＭＭ（Dual Inline Memory Module）２０を接続され、ＤＩＭＭ２０とのデータのやり取りを制御する制御部として機能する。ルータ１４は、他のＣＰＵ１０または他のルータ（例えばルーティング用のＬＳＩ（Large Scale Integrated circuit））に接続され、パケットによって、他のＣＰＵ１０とのデータの通信を行なう通信部として機能する。
【００１７】
このようなＣＰＵ１０において、コア１１の一つがメモリデータの読出（フェッチ）を要求する場合（フェッチ要求を発行する場合）について考える。コア１１は、当該コア１１が必要とする８バイトのデータ（処理対象データ）を示すアドレスを指定して、まず、コア１１に内蔵されたキャッシュ（一次キャッシュ，二次キャッシュ）にアクセスする。その結果、コア１１は、キャッシュヒットすると、当該８バイトのデータを内蔵キャッシュから読み出す。
【００１８】
一方、コア１１は、内蔵メモリでキャッシュミスすると、複数のコアによって共有している共有キャッシュ（図１５では３次キャッシュ）１２にアクセスする。しかし、共有キャッシュ１２でもキャッシュミスすると、メインメモリ２０に対するアクセスが行なわれる。共有キャッシュ１２のキャッシュラインサイズは、例えば１２８バイトであるため、ＭＡＣ１３に対しては、コア１１の要求する８バイトの処理対象データを含む１２８バイトのデータブロックの読出が要求される。
【００１９】
次に、コア１１が、当該コア１１の属するＣＰＵ１０（例えば図１４や図１６のＣＰＵ＃０）と異なる他のＣＰＵ１０（例えば図１４や図１６のＣＰＵ＃１）におけるメモリデータ（例えば８バイトの処理対象データ）の読出を要求する場合について、図１６を参照しながら説明する。図１６は、図１４に示すマルチプロセッサシステムにおいて一ＣＰＵ＃０から他ＣＰＵ＃１へフェッチ要求を行なう場合のパケットルーティングを説明する図である。
【００２０】
この場合、図１６に示すように、ＣＰＵ＃０におけるコア１１は、フェッチ要求パケットを、ルータ１４およびネットワーク３０を介して他のＣＰＵ＃１へ送信する。フェッチ要求パケットを受け取ったＣＰＵ＃１は、要求されたメモリデータ（８バイトの処理対象データ）を含むデータブロックを、ＣＰＵ＃１のＤＩＭＭ２０から読み出し、フェッチ応答パケットとしてデータブロックを送り返す。このときのデータブロックのサイズは１２８バイトである。
【００２１】
ここで、図１７（Ａ）および図１７（Ｂ）を参照しながら、フェッチ要求パケットおよびフェッチ応答パケットについて説明する。図１７（Ａ）はデータ無しパケット（フェッチ要求パケット）のフォーマットを示す図であり、図１７（Ｂ）はデータ付きパケット（フェッチ応答パケット）のフォーマットを示す図である。
【００２２】
パケットには、図１７（Ａ）に示すようなデータ無しパケットと、図１７（Ｂ）に示すようなデータ付きパケットとがある。ＣＰＵ＃０からＣＰＵ＃１へ送信されるフェッチ要求パケットは、データ無しパケットであり、当該フェッチ要求パケットに対するフェッチ応答パケットは、データ付きパケットである。パケットの先頭サイクルは、パケットの内容や宛先を判別するための情報を載せたヘッダ（Header；ＨＤ）である。
【００２３】
さらに、図１８（Ａ）および図１８（Ｂ）を参照しながら、フェッチ要求パケットおよびフェッチ応答パケットのヘッダについて説明する。図１８（Ａ）はフェッチ要求パケットのヘッダのフォーマットを示す図であり、図１８（Ｂ）はフェッチ応答パケットのヘッダのフォーマットを示す図である。
【００２４】
図１８（Ａ）に示すように、フェッチ要求パケットのヘッダには、パケットの種別を表すOpcode（オペコード；ＯＰＣ)や、コア１１の要求するメモリデータのPhysical Address（物理アドレス；ＰＡまたはｐａ）や、パケットを識別するための識別子であるRequest ＩＤ（ＲＱＩＤ）などの情報が含まれる。図１８（Ｂ）に示すように、フェッチ応答パケットのヘッダには、ＯＰＣやＲＱＩＤなどの情報が含まれる。なお、ＲＳＶ（reserve）は、未使用のビットである。
【００２５】
コア１１の要求する処理対象データを含む１２８バイトのデータブロックは、図１７（Ｂ）に示すように、ヘッダの後に、８バイトのデータに分けられ、１６サイクルかけて送信される。フェッチ応答パケットにおいて、各サイクルの８バイトデータは、先頭から順に物理アドレスｐａ[6:3] ＝ 0000, 0001, … , 1111におけるデータData0, Data1, … , DataFに対応する。
【００２６】
ＣＰＵ＃１からフェッチ応答パケットを受け取ったＣＰＵ＃０（ルータ１４）は、フェッチ応答パケットに添付されたデータブロックを、ＣＰＵ＃０の共有キャッシュ１２に登録するとともに、フェッチ要求を行なったコア１１へ送る。
【００２７】
一方、ＣＰＵ＃０，＃１間の伝送エラーは、パケットに付されたＣＲＣをパケット受信側でチェックすることによって検出される。伝送エラーが検出されると、伝送エラーを検出したパケット以降のパケットは破棄され、ＤＬＬＰ（Data Link Layer Packet）を用いてＮＡＣＫ（Negative ACKnowledgement）を送ることで、送信側ＣＰＵ＃１に対しパケットの再送が要求される。
【００２８】
伝送エラーを検出したパケットを、中継点（ルータ；図１４参照）や受信側ＣＰＵ＃０において破棄することができない場合、当該パケットは、当該パケットの末尾をＥＤＢにして送出される。
【００２９】
受信側ＣＰＵ＃０におけるルータ１４は、他のＣＰＵ＃１から受信したフェッチ応答パケットを、一旦、当該ルータ１４内のバッファ（図１９の符号１４１参照）に格納する。当該バッファを受信バッファという。受信バッファはＦＩＦＯのバッファである。ここで、図１９〜図２３を参照しながら、受信バッファ１４１および当該受信バッファ１４１に対するパケット書込／読出処理について説明する。
【００３０】
図１９は、図１５に示すＣＰＵ１０におけるルータ１４に含まれる受信バッファ１４１および当該受信バッファ１４１に対するパケット書込／読出処理に係る構成を示すブロック図である。図１９に示すように、受信バッファ１４１の書込側には、ＷＤＲ（Write Data Register；書込データレジスタ），ＨＤＷＰ（Header Write Pointer；ヘッダ書込ポインタ）およびＷＰ（Write Pointer；書込ポインタ）が備えられる。また、受信バッファ１４１の読出側には、ＲＤＲ（Read Data Register；読出データレジスタ）およびＲＰ（Read Pointer；読出ポインタ）が備えられる。
【００３１】
ＷＤＲは、受信バッファ１４１に書き込まれる書込対象データ（一単位データ；例えば８バイトデータ）を一時的に保存するレジスタである。ＷＰは、書込対象パケットの書込を制御するもので、ＷＤＲに保存されている書込対象データの、受信バッファ１４１における書込先アドレスを指定するポインタである。ＷＰは、初期状態では０を設定され、書込対象パケットの受信バッファ１４１への書込時に１サイクル毎に１ずつインクリメントされる。ＷＤＲに保存されている書込対象データは、ＷＰによって指定されるアドレスに書き込まれる。ＨＤＷＰは、書込対象パケットのヘッダのアドレスを指定するポインタであり、初期状態では０を設定される。
【００３２】
ＲＤＲは、受信バッファ１４１から読み出された読出データ（一単位データ；例えば８バイトデータ）を一時的に保存するレジスタである。ＲＰは、受信バッファ１４１からのデータの読出を制御するもので、受信バッファ１４１から読み出すデータのアドレスを指定するポインタである。ＲＰは、初期状態では０を設定され、受信バッファ１４１からのデータ読出時に１サイクル毎に１ずつインクリメントされる。ＲＰによって指定されるアドレスのデータは、受信バッファ１４１から読み出され、ＲＤＲに一時的に保存され、前述したように共有キャッシュ１２に登録されるとともにフェッチ要求を行なったコア１１へ送信される。
【００３３】
図２０に示すフローチャート（ステップＳ１０１〜Ｓ１０７）に従って、図１９に示すパケット書込処理に係る構成（ＣＰＵ＃０におけるルータ１４）の動作について説明する。ルータ１４は、パケット書込時にヘッダ（ＨＤ）またはデータ（ＤＴ）の受信を待機しており（ステップＳ１０１のＮＯルート）、ヘッダ（ＨＤ）またはデータ（ＤＴ）を受信すると（ステップＳ１０１のＹＥＳルート）、ＥＤＢを受信したか否かを判断する（ステップＳ１０２）。
【００３４】
ＥＤＢを受信していない場合（ステップＳ１０２のＮＯルート）、ルータ１４は、パケットの最終サイクルを示すＥＮＤを受信したか否かを判断する（ステップＳ１０３）。ＥＮＤを受信した場合（ステップＳ１０３のＹＥＳルート）、ルータ１４は、ＨＤＷＰに、次の書込対象パケットの先頭アドレス（ヘッダのアドレス）を指定する値として、ＷＰ＋１を設定する（ステップＳ１０４）。この後、ルータ１４は、ＷＰによって指定される、受信バッファ１４１のエントリに、ＷＤＲにおけるデータ（又はヘッダ）を書き込んでから（ステップＳ１０５）、ＷＰを１インクリメントし（ステップＳ１０６）、ステップＳ１０１の処理に戻る。
【００３５】
ステップＳ１０２でＥＤＢを受信したと判断した場合（ＹＥＳルート）、ルータ１４は、ＷＰにＨＤＷＰを設定し（ステップＳ１０７）、ステップＳ１０１の処理に戻る。これによって、現在の書込対象パケット（末尾にＥＤＢを設定されたパケット）が、再度、先頭（ヘッダ）から順に受信バッファ１４１へ書き込まれる。
【００３６】
ついで、図２１に示すフローチャート（ステップＳ１１１〜Ｓ１１３）に従って、図１９に示すパケット読出処理に係る構成（ＣＰＵ＃０におけるルータ１４）の動作について説明する。ルータ１４は、ＲＰの値とＨＤＷＰの値とが一致しているか否かを判断する（ステップＳ１１１）。ＲＰの値とＨＤＷＰの値とが一致している場合（ステップＳ１１１のＹＥＳルート）、ルータ１４は、書込対象パケットの書込中であると判断し、ステップＳ１１１の処理に戻る。
【００３７】
ＲＰの値とＨＤＷＰの値とが一致しない場合（ステップＳ１１１のＮＯルート）、ルータ１４は、書込対象パケットの書込を完了したと判断し、受信バッファ１４１からのパケット読出を開始する（図２２のタイミングＴ１８参照）。つまり、ルータ１４は、ＲＰによって指定される、受信バッファ１４１のエントリ（一単位データ）を、受信バッファ１４１からＲＤＲ経由で読み出す（ステップＳ１１２）。この後、ルータ１４は、ＲＰを１インクリメントし（ステップＳ１１３）、ステップＳ１１１の処理に戻る。
【００３８】
ここで、受信バッファ１４１に対するフェッチ応答パケットの書込／読出処理の最短ケースのタイムチャートを図２２に示す。図２２に示すように、初期状態（タイミングＴ０参照）において、ＷＥ（Write Enable）およびＲＥ（Read Enable）はＬｏｗ状態に設定され、ＷＰ，ＨＤＷＰ，ＲＰは０に設定される。パケットの書込処理は、ＷＥをＨｉｇｈ状態にすることで開始され、まずヘッダＨＤがＷＤＲ経由で受信バッファ１４１に書き込まれる（タイミングＴ１参照）。
【００３９】
以降、ＷＰが１ずつインクリメントされる都度、１６個のデータＤＴ０〜ＤＴＦがＷＤＲ経由で受信バッファ１４１に順次書き込まれる（タイミングＴ２〜Ｔ１７参照；図２０のステップＳ１０３のＮＯルートからステップＳ１０５，Ｓ１０６参照）。
【００４０】
そして、タイミングＴ１７で、データＤＴＦとパケットの最終サイクルを示すＥＮＤとが受信されると、ＷＥがＬｏｗ状態に設定されるとともにＲＥがＨｉｇｈ状態に設定される。これに伴い、タイミングＴ１８で、ＨＤＷＰの値として、次のパケットのヘッダのアドレスを示す値ＷＰ＋１＝１７が設定される（図２０のステップＳ１０３のＹＥＳルートからステップＳ１０４）。これにより、ＨＤＷＰの値１７とＲＰの値１とが不一致になり（図２１のステップＳ１１１のＮＯルート）、パケットの読出処理が開始され、まずヘッダＨＤがＲＤＲ経由で受信バッファ１４１から読み出される（タイミングＴ１８参照）。
【００４１】
以降、ＲＰが１インクリメントされる都度、１６個のデータＤＴ０〜ＤＴＦがＲＤＲ経由で受信バッファ１４１から順次読み出される（タイミングＴ１９〜Ｔ３４参照；図２１のステップＳ１１１のＮＯルートからステップＳ１１２，Ｓ１１３参照）。このような読出処理は、タイミングＴ３４でＨＤＷＰの値とＲＰの値とが一致するまで（つまり図２１のステップＳ１１１でＹＥＳと判定されるまで）実行される。図２２に示す例では、タイミングＴ３４においてＨＤＷＰの値とＲＰの値とは、１７で一致している。
【００４２】
図２０〜図２２を参照しながら上述したように、パケット読出処理は、パケットの最終サイクルで最後の単位データが書き込まれるのを待ってから開始される。これは、パケットの最終サイクル（末尾）がＥＤＢである場合には、パケットを破棄する必要があるためである。
【００４３】
ついで、受信したフェッチ応答パケットの末尾がＥＤＢである場合のタイムチャートを図２３に示す。図２３では、図２２と同様の手順に従ってパケットのデータＤＴ８の書込タイミングＴ１０になった時点で、ＥＤＢが検出される場合が例示されている。この場合、タイミングＴ１１で、ＷＰの値としてＨＤＷＰの値（図２３では０）が保存される（図２０のステップＳ１０２のＹＥＳルートからステップＳ１０７参照）。
【００４４】
これにより、受信バッファ１４１からの読出処理を行なうことなく、現在の書込対象パケット（末尾にＥＤＢを設定されたパケット）が、再度、先頭（ヘッダ）から順に受信バッファ１４１へ書き込まれる。その際、末尾にＥＤＢを設定されたパケットは、後続のパケットによって上書きされる。
【００４５】
〔２〕本実施形態の概要
上述したように、高速シリアル伝送によるネットワーク３０では、伝送エラーがＣＲＣによってチェックされる。そして、伝送エラーが検出されるとパケットの末尾がＥＤＢに書き換えられる。そのため、エンドポイント（ＣＰＵ＃０）では、応答データ（処理対象データ）を含むパケットの末尾までの全てのデータを受信しないと、そのパケットが正常か否かを判定することができない。
【００４６】
したがって、フェッチ要求を発行したＣＰＵ＃０では、当該フェッチ要求に応じた応答データを含むパケットの末尾までの全てのデータが、一旦、受信バッファ１４１に保存されてから、受信バッファ１４１におけるデータが先頭から順にコア１１に送り出される。
【００４７】
しかし、受信バッファ１４１はＦＩＦＯであるので、コア１１が要求している処理対象データ（一単位データ；例えば８バイトデータ）の、受信バッファ１４１からの読出は、当該単位データ直前のデータが読み出されるまで待たされる。このため、コア１１から見て通信レイテンシが大きくなり、ＣＰＵ＃０の処理性能や、当該ＣＰＵ＃０を含む情報処理装置（マルチプロセッサシステム）の処理性能が低下する場合がある。
【００４８】
このため、高速シリアル伝送のネットワーク３０で接続されるマルチプロセッサシステムにおいて、コア１１が要求する処理対象データの読出レイテンシを短縮することが望まれている。
【００４９】
そこで、本実施形態（第１および第２実施形態）では、例えば、他のＣＰＵ１０から読み出され転送されてきたフェッチ応答パケットにおける１２８バイトのデータブロックのうち、コア１１が必要とする８バイトの処理対象データが、先に受信バッファ１４１から読み出されコア１１へ送られる。これにより、コア１１から見た通信レイテンシ（処理対象データの読出レイテンシ）が短縮される。
【００５０】
つまり、後述する第１実施形態の情報処理装置では、上述した関連技術と同様、エンドポイントの受信バッファ１４１に、フェッチ要求に対する応答パケットが全て書き込まれる。エンドポイントは、高速シリアル伝送のネットワーク３０に接続されフェッチ応答パケットを受信する受信側ＣＰＵ１０Ａ（図１参照；第１の演算処理装置，ＣＰＵ＃０）である。しかし、第１実施形態の情報処理装置では、図１〜図７を参照しながら後述するように、パケットの書込後、パケットの受信バッファ１４１からの読出時には、受信バッファ１４１に書き込んだ順ではなく、コア１１が要求する８バイトの処理対象データが最初に読み出される。
【００５１】
後述する第１実施形態の情報処理装置は、コア１１が要求する８バイトの処理対象データを最初に読み出すため、フェッチ応答パケットは、コア１１が要求する処理対象データを示す物理アドレス（ｐａ[6:3]）を含む（図２，図３参照）。また、エンドポイントにおいては、上述した関連技術のパケット読出処理に係る構成（図１９のＲＰおよびＲＤＲ参照）に、後述するＨＤＲＰ（ヘッダ読出ポインタ），LengthレジスタおよびCycleＣＴ（サイクルカウンタ）が追加される（図４および図５の読出部１４３参照）。ＨＤＲＰ，LengthレジスタおよびCycleＣＴを用いてＲＰを制御することで、コア１１が要求する８バイトの処理対象データを最初に読み出すことが可能になっている（図５〜図７参照）。
【００５２】
このようにして、ＣＰＵ１０Ａのコア１１から要求される処理対象データを先頭にして受信バッファ１４１から読み出すことで読出レイテンシが短縮される。例えば、コア１１が要求する処理対象データがパケットの最後尾である場合、当該処理対象が最初に読み出されることで、レイテンシを［パケットのデータ部分のサイクル数−１］だけ短縮することができる。逆に、処理対象データがパケットの先頭だった場合、レイテンシは変わらない。つまり、レイテンシの短縮サイクル数は、処理対象データがパケットの何番目のデータであるかによって変わる。したがって、平均すると、［パケットのデータ部分のサイクル数−１］／２程度、レイテンシを短縮することが可能である。
【００５３】
また、図１および図８〜図１３を参照しながら後述する第２実施形態は、行列計算等で発生するストライドアクセスにおいて、１個のデータ付きパケット内に、必要な単位データ（処理対象データ）が複数存在する場合に対応する技術である。行列の計算などで配列を扱う際、コア１１は、パケット長よりも短い一定間隔をあけたアドレスにおける複数の単位データを要求し、当該複数の単位データが１つのパケットに含まれている。
【００５４】
このような場合、第２実施形態では、受信バッファ１４１からパケットを読み出す際、必要な複数の単位データを、他の単位データよりも前（先頭側）に詰めて送出することで、必要な複数の単位データが、他の単位データよりも先に読み出される。これにより、ＣＰＵ１０Ａのコア１１から見たレイテンシが、大幅に短縮される。
【００５５】
〔３〕第１実施形態の情報処理装置
図１を参照しながら、本発明の第１実施形態としての演算処理装置（ＣＰＵ）１０Ａ，１０Ｂを含む情報処理装置（マルチプロセッサシステム）１の構成について説明する。図１は、その構成を示すブロック図である。
【００５６】
図１に示すように、第１実施形態の情報処理装置１は、複数（図１で２個）のＣＰＵ１０Ａ，１０Ｂを有するマルチプロセッサシステムであり、例えばＰＣ，サーバである。ＣＰＵ１０Ａは、第１の演算処理装置に相当し、受信側ＣＰＵもしくはＣＰＵ＃０と表記する場合がある。また、ＣＰＵ１０Ｂは、第２の演算処理装置に相当し、送信側ＣＰＵもしくはＣＰＵ＃１と表記する場合がある。なお、第１実施形態の情報処理装置１には２個のＣＰＵが備えられているが、本発明は、これに限定されるものでなく、３個以上のＣＰＵが備えられてもよい。
【００５７】
ＣＰＵ１０ＡとＣＰＵ１０Ｂとは、高速シリアル伝送によるネットワーク３０を介して相互に通信可能に接続される。
【００５８】
ＣＰＵ１０Ａは、図１５に示すＣＰＵ１０と同様、複数のコア１１Ａを内蔵したマルチコアプロセッサである。ＣＰＵ１０Ａにおいては、複数のコア１１が共有キャッシュ（三次キャッシュ）１２Ａを介して接続されている。図１では、コア１１Ａとして、Ｎ＋１個のコア＃０〜コア＃Ｎ（Ｎは１以上の整数）が備えられている。図１では、一次キャッシュ（不図示）および二次キャッシュ（不図示）が各コア１１に内蔵され、三次キャッシュが、共有キャッシュ１２Ａとして用いられているが、一次キャッシュを各コア１１Ａに内蔵し、二次キャッシュを共有キャッシュ１２Ａとして用いてもよい。
【００５９】
共有キャッシュ１２Ａには、コア１１ＡのほかにＭＡＣ１３Ａおよびルータ１４Ａが接続されている。ＭＡＣ１３Ａは、メインメモリとして機能するＤＩＭＭ２０Ａを接続され、ＤＩＭＭ２０Ａとのデータのやり取りを制御する制御部として機能する。ルータ１４Ａは、他のＣＰＵ１０Ｂまたは他のルータ（例えばルーティング用のＬＳＩ；図１４参照）に接続され、パケットによって、他のＣＰＵ１０Ｂとのデータの通信を行なう第１の通信部として機能する。
【００６０】
ＣＰＵ１０Ｂは、コア１１Ｂ，共有キャッシュ（三次キャッシュ）１２Ｂ，ＭＡＣ１３Ｂ，ルータ１４Ｂを有している。コア１１Ｂ，共有キャッシュ１２Ｂ，ＭＡＣ１３Ｂ，ルータ１４Ｂは、それぞれ、上述したＣＰＵ１０Ａのコア１１Ａ，共有キャッシュ１２Ａ，ＭＡＣ１３Ａ，ルータ１４Ａと同様である。ただし、ＭＡＣ１３Ｂは、メインメモリとして機能するＤＩＭＭ２０Ｂを接続され、ＤＩＭＭ２０Ｂとのデータのやり取りを制御する制御部として機能する。ルータ１４Ｂは、他のＣＰＵ１０Ａまたは他のルータ（例えばルーティング用のＬＳＩ；図１４参照）に接続され、パケットによって、他のＣＰＵ１０Ａとのデータの通信を行なう第２の通信部として機能する。
【００６１】
ＣＰＵ１０Ａにおける複数のコア（処理部）１１Ａのうちの少なくとも一つは、必要な処理対象データ（例えば８バイトの単位データ）の読出要求を生成する。以下では、読出要求をフェッチ要求という場合がある。
【００６２】
ＣＰＵ１０Ａにおけるルータ（第１の通信部）１４Ａは、一のコア１１Ａが生成したフェッチ要求を、フェッチ要求パケット（図２，図１７（Ａ）参照）によってＣＰＵ１０Ｂへ送信する。また、ルータ（第１の通信部）１４Ａは、フェッチ要求に対応する処理対象データを含むデータブロックを添付されたフェッチ応答パケット（図２，図１７（Ｂ）参照）を、ＣＰＵ１０Ｂから受信する。
【００６３】
一方、ＣＰＵ１０Ｂにおけるルータ（第２の通信部）１４Ｂは、フェッチ要求パケット（図２，図１７（Ａ）参照）によって、ＣＰＵ１０Ａからフェッチ要求を受信する。また、ルータ（第２の通信部）１４Ｂは、フェッチ要求に対応する処理対象データを含むデータブロックを添付されたフェッチ応答パケット（図２，図１７（Ｂ）参照）を、ＣＰＵ１０Ａへ送信する。
【００６４】
特に、第１実施形態において、ＣＰＵ１０Ｂのルータ（第２の通信部）１４Ｂは、フェッチ要求（フェッチ要求パケットのヘッダ）に含まれるアドレス情報（図１８（Ａ）のＰＡ参照）から取り出された処理対象データのアドレス情報ｐａ[6:3]を記録した応答ヘッダをデータブロックに付す。ここで、応答ヘッダは、例えば図３を参照しながら後述するフェッチ応答パケットのヘッダである。そして、ルータ（第２の通信部）１４Ｂは、応答ヘッダを付したデータブロックを、フェッチ応答パケット（図２，図１７（Ｂ）参照）としてＣＰＵ１０Ａへ送信する。
【００６５】
ＣＰＵ１０Ａのルータ（第１の通信部）１４Ａは、受信バッファ１４１，書込部１４２，読出部１４３を有する。第１実施形態において、受信バッファ１４１，書込部１４２，読出部１４３は、ＣＰＵ１０Ａのルータ１４Ａ内に備えられているが、ＣＰＵ１０Ａ内に備えられていればよい。
【００６６】
受信バッファ（バッファ）１４１は、データブロックを添付されたデータ付きパケットを単位データ（例えば８バイト）で保存する。
【００６７】
書込部１４２は、ルータ１４Ａによって受信されたパケット（ヘッダおよびデータブロック）に含まれる複数の単位データを、受信バッファ１４１に順次書き込む。第１実施形態の書込部１４２は、図４を参照しながら後述するごとく、図１９に示した関連技術と同様に構成されている。
【００６８】
読出部１４３は、パケットに含まれる複数の単位データのうちの少なくとも一つである処理対象データを、受信バッファ１４１から優先的に読み出す。特に、第１実施形態の読出部１４３は、データブロックに付された応答ヘッダに記録された処理対象データのアドレス情報ｐａ[6:3]を参照する。そして、読出部１４３は、まず、参照した当該アドレス情報ｐａ[6:3]に対応する処理対象データを受信バッファ１４１から読み出した後、当該処理対象データ以外の単位データを受信バッファ１４１から順次読み出す。第１実施形態の読出部１４３は、図４および図５を参照しながら後述するごとく構成され、図６および図７を参照しながら後述するごとく動作する。
【００６９】
なお、第１実施形態では、ＣＰＵ１０Ａが、第１の通信部としての機能や、受信バッファ１４１，書込部１４２，読出部１４３としての機能を有し、ＣＰＵ１０Ｂが、第２の通信部としての機能を有する場合について説明している。しかし、複数のＣＰＵ１０Ａ，１０Ｂのそれぞれが、第１および第２の通信部としての機能と、受信バッファ１４１，書込部１４２，読出部１４３としての機能とを有していてもよい。
【００７０】
ここで、図２を参照しながら、図１に示す情報処理装置１において、一ＣＰＵ１０Ａのコア１１Ａから他ＣＰＵ１０Ｂのメモリデータに対するフェッチ要求を発行する場合のパケットルーティングについて説明する。
【００７１】
この場合、図２に示すように、必要な処理対象データを読み出すためのフェッチ要求パケット（データ無しパケット）が、ＣＰＵ１０Ａから発行・送信され、ネットワーク３０経由で、当該処理対象データを保持するメモリ２０Ｂを有するＣＰＵ１０Ｂにルーティングされる。ルータ１４Ｂによってフェッチ要求パケットを受信したＣＰＵ１０Ｂは、要求された処理対象データを含むデータブロックをメモリ２０Ｂから読み出し、フェッチ応答パケット（データ付きパケット）を生成し、当該フェッチ応答パケットをＣＰＵ１０Ａに送信する。
【００７２】
このとき、ＣＰＵ１０Ｂで生成されるフェッチ応答パケットのヘッダ（応答ヘッダ）のフォーマットを図３に示す。図３に示すように、第１実施形態では、フェッチ応答パケットのヘッダに、フェッチ要求対象の単位データ（処理対象データ）を特定可能な４ビットの物理アドレスｐａ[6:3]が載せられている。４ビットの物理アドレスｐａ[6:3]は、フェッチ応答パケットに含まれるデータブロックにおける複数の単位データ（例えば１６個の８バイトデータ）のうちの、どの単位データがＣＰＵ１０Ａ側のコア１１Ａによって要求されているのかを識別するための情報である。
【００７３】
ＣＰＵ１０Ｂがフェッチ応答パケットを生成する際、フェッチ要求パケットのヘッダに載っている物理アドレスＰＡ（図１８（Ａ）参照）から、フェッチ要求対象の単位データを特定可能な４ビットの物理アドレスｐａ[6:3]が取り出される。取り出された物理アドレスｐａ[6:3]を、図１８（Ｂ）を参照しながら前述したヘッダに含ませることにより、図３に示すようなフォーマットの応答ヘッダが生成される。このように生成された応答ヘッダを有するフェッチ応答パケットは、図２に示すように、フェッチ要求の発行元であるＣＰＵ１０Ａにルーティングされ送信される。
【００７４】
ＣＰＵ１０Ａ側で受信されたフェッチ応答パケットは、まず、ルータ１４Ａに設けられた受信バッファ１４１に、書込部１４２（図１，図４参照）によって、一旦、単位データ毎に書き込まれる。この後、読出部１４３′におけるＲＰの値（読み出すべき単位データのアドレス）を制御することで、受信バッファ１４１に書き込まれたパケットのうち、コア１１Ａが要求する処理対象データが、受信バッファ１４１から優先的に読み出される。図４は、図１に示すＣＰＵ１０Ａにおけるルータ１４Ａに含まれる受信バッファ１４１および当該受信バッファ１４１に対するパケット書込／読出処理に係る構成（書込部１４２および読出部１４３）を示すブロック図である。
【００７５】
図４に示すように、第１実施形態の書込部１４２は、図１９に示した関連技術の受信バッファ１４１に対するパケット書込処理に係る構成と同様のＷＤＲ，ＨＤＷＰおよびＷＰを有する。また、第１実施形態の読出部１４３は、図１９に示した関連技術の受信バッファ１４１に対するパケット書込処理に係る構成と同様のＲＤＲおよびＲＰに加え、ＨＤＲＰ（Header Read Pointer；ヘッダ読出ポインタ），LengthレジスタおよびCycleＣＴ（Cycle Counter；サイクルカウンタ）を有する。
【００７６】
ＷＤＲは、受信バッファ１４１に書き込まれる書込対象データ（一単位データ；例えば８バイトデータ）を一時的に保存するレジスタである。ＷＰは、書込対象パケットの書込を制御するもので、ＷＤＲに保存されている書込対象データの、受信バッファ１４１における書込先アドレスを指定するポインタである。ＷＰは、初期状態では０を設定され、書込対象パケットの受信バッファ１４１への書込時に１サイクル毎に１ずつインクリメントされる。ＷＤＲに保存されている書込対象データは、ＷＰによって指定されるアドレスに書き込まれる。ＨＤＷＰは、書込対象パケットのヘッダのアドレスを指定するポインタであり、初期状態では０を設定される。
【００７７】
ＲＤＲは、受信バッファ１４１から読み出された読出データ（一単位データ；例えば８バイトデータ）を一時的に保存するレジスタである。ＲＰは、受信バッファ１４１からのデータの読出を制御するもので、受信バッファ１４１から読み出すデータのアドレスを指定するポインタである。ＲＰは、初期状態では０を設定され、受信バッファ１４１からのデータ読出時に１サイクル毎に１ずつインクリメントされる。ＲＰによって指定されるアドレスのデータは、受信バッファ１４１から読み出され、ＲＤＲに一時的に保存され、前述したように共有キャッシュ１２Ａに登録されるとともにフェッチ要求を行なったコア１１へ送信される。
【００７８】
ＨＤＲＰは、受信バッファ１４１から読出中のパケットのヘッダのアドレスを示すポインタであり、初期状態では０を設定される。Lengthレジスタは、受信バッファ１４１から読出中のパケットのデータ長（パケット長）Lengthを設定される。Lengthレジスタに設定されるデータ長Lengthは、ヘッダを受信バッファ１４１から読み出した際に、Length生成部１４３ａ（図５参照）によって当該ヘッダにおけるOpcode（パケット種）から生成され設定される。CycleＣＴは、受信バッファ１４１から読出中のパケットの単位データが、何個目の単位データであるかを示すカウンタであり、一サイクル毎につまり一単位データを読み出す都度、１ずつインクリメントされる。
【００７９】
ついで、図５を参照しながら、図４に示すパケット読出処理に係る構成、つまり読出部１４３について、より詳細に説明する。図５は、読出部１４３の詳細構成を示すブロック図である。図５に示す読出部１４３は、図６および図７を参照しながら後述するように動作する。図５に示すように、第１実施形態の読出部１４３は、Length生成部１４３ａと１加算器１４３ｂ，１４３ｄと加算器１４３ｃ，１４３ｅ，１４３ｆとセレクタ１４３ｇとを含む。
【００８０】
Length生成部１４３ａは、図４を参照しながら前述したように、ヘッダを受信バッファ１４１から読み出した際に、当該ヘッダにおけるOpcodeから、受信バッファ１４１から読出中のパケットのデータ長Lengthを生成し、Lengthレジスタに設定する。
【００８１】
１加算器（＋１）１４３ｂは、ＨＤＲＰの示す値（以下、ＨＤＲＰと表記）に１を加算する。
【００８２】
加算器１４３ｃは、Lengthレジスタにおけるデータ長Lengthと、１加算器１４３ｂからの値ＨＤＲＰ＋１とを加算し、得られた値ＨＤＲＰ＋Length＋１をＨＤＲＰに設定する（図６のステップＳ２４参照）。加算器１４３ｃの動作タイミングは、CycleＣＴの示す値（以下、CycleＣＴと表記）がデータ長LengthになってCycleＣＴをリセット（初期化）するタイミング（図６のステップＳ２２および図７のタイミングＴ３４参照）である。
【００８３】
１加算器（＋１）１４３ｄは、ＲＰの示す値（以下、ＲＰと表記）に１を加算する。
【００８４】
加算器１４３ｅは、コア１１Ａが要求する処理対象データを特定する物理アドレスｐａ[6:3]と、１加算器１４３ｄからの値ＲＰ＋１とを加算し、得られた値ＲＰ＋ｐａ[6:3]＋１をＲＰに設定する（図６のステップＳ１６参照）。物理アドレスｐａ[6:3]は、読出中のパケットのヘッダからＲＤ−ＢＵＳ（読出バス）を介して読み出される。加算器１４３ｅの動作タイミングは、フェッチ応答パケットからヘッダを読み出すタイミング（図６のステップＳ１５のＹＥＳルート；図７のタイミングＴ１８参照）である。当該タイミングで、セレクタ１４３ｇは、加算器１４３ｅで得られた値ＲＰ＋ｐａ[6:3]＋１をＲＰに設定するように切替動作を行なう（図５〜図７の(1)参照）。
【００８５】
加算器１４３ｆは、Lengthレジスタにおけるデータ長Lengthと、１加算器１４３ｂからの値ＨＤＲＰ＋１とを加算し、得られた値ＨＤＲＰ＋Length＋１をＲＰに設定する（図６のステップＳ２３参照）。加算器１４３ｆの動作タイミングは、CycleＣＴがデータ長LengthになってCycleＣＴをリセット（初期化）するタイミング（図６のステップＳ２２；図７のタイミングＴ３４参照）である。当該タイミングで、セレクタ１４３ｇは、加算器１４３ｆで得られた値ＨＤＲＰ＋Length＋１をＲＰに設定するように切替動作を行なう（図５〜図７の(4)参照）。
【００８６】
また、セレクタ１４３ｇは、１加算器１４３ｄで得られた値ＲＰ＋１をＲＰに設定するように切替動作を行なう（図５〜図７の(2)参照）。当該切替動作を行なうタイミングは、ヘッダのOpcodeがフェッチ応答でない場合（図６のステップＳ１５のＮＯルート参照）、もしくは、ＲＰがＨＤＲＰ＋Lengthと一致しないタイミング（図６のステップＳ１９のＮＯルート；図７のタイミングＴ１９〜Ｔ２３，Ｔ２５〜Ｔ３３参照）である。
【００８７】
さらに、セレクタ１４３ｇは、１加算器１４３ｂで得られた値ＨＤＲＰ＋１をＲＰに設定するように切替動作を行なう（図５〜図７の(3)参照）。当該切替動作を行なうタイミングは、ＲＰがＨＤＲＰ＋Lengthと一致するタイミング（図６のステップＳ１９のＹＥＳルート；図７のタイミングＴ２４参照）である。
【００８８】
なお、上述した書込部１４２および読出部１４３としての機能は、論理ゲート等によってハードウエア的にＣＰＵ１０Ａに組み込まれて実現されてもよいし、プログラムを実行することでソフトウエア的にＣＰＵ１０Ａに組み込まれて実現されてもよい。
【００８９】
次に、図５〜図７を参照しながら、上述のごとく構成された書込部１４２および読出部１４３の動作について説明する。図６は、図５に示すパケット読出処理に係る構成（読出部１４３）の動作を説明するフローチャートである。図７は、図４および図５に示すパケット読出処理に係る構成（読出部１４３）が図６に示すフローチャートに従って１０番目のデータ（ＤＴＡ）を最初に読み出す場合の動作を示すタイムチャートである。
【００９０】
第１実施形態の書込部１４２によるパケット書込動作は、図２０を参照しながら前述した関連技術の動作と同様であるので、その説明は省略する。これに対し、第１実施形態の読出部１４３によるパケット読出動作は、図２１を参照しながら前述した関連技術の動作と異なっている。
【００９１】
ここで、図６に示すフローチャート（ステップＳ１１〜Ｓ２４）に従って、図５および図７を参照しながら、第１実施形態の読出部１４３によるパケット読出動作について説明する。
【００９２】
ルータ１４Ａは、ＲＰの値とＨＤＷＰの値とが一致しているか否かを判断する（ステップＳ１１）。ＲＰの値とＨＤＷＰの値とが一致している場合（ステップＳ１１のＹＥＳルート）、ルータ１４Ａは、書込対象パケットの書込中であると判断し、ステップＳ１１の処理に戻る。
【００９３】
ＲＰの値とＨＤＷＰの値とが一致しない場合（ステップＳ１１のＮＯルート）、ルータ１４Ａは、書込対象パケットの書込を完了したと判断し、受信バッファ１４１からのパケット読出を開始する（図７のタイミングＴ１８参照）。つまり、ＲＰによって指定される、受信バッファ１４１のエントリ（一単位データ）が、受信バッファ１４１からＲＤＲ経由で読み出される（ステップＳ１２）。そして、読み出されたエントリがヘッダ（ＨＤ）であるか否かが判断される（ステップＳ１３）。
【００９４】
パケット読出の開始時には、まずパケットのヘッダが読み出されるため、読み出されたエントリはヘッダであると判断される（ステップＳ１３のＹＥＳルート）。この場合、読み出されたヘッダのOpcodeが参照され、当該Opcode（パケット種）に基づき、受信バッファ１４１から読出中のパケットのデータ長Lengthが生成され、生成されたデータ長Lengthが読出部１４３のLengthレジスタに設定される（ステップＳ１４）。
【００９５】
この後、当該Opcodeがフェッチ応答であるか否かを判断する（ステップＳ１５）。フェッチ応答である場合（ステップＳ１５のＹＥＳルート）、セレクタ１４３ｇは図５の(1)を選択するように切替動作を行なう。これにより、加算器１４３ｅで得られた値ＲＰ＋ｐａ[6:3]＋１がＲＰに設定され（ステップＳ１６）、CycleＣＴが１インクリメントされる（ステップＳ１７）。そして、ＲＰに設定された値（アドレス）で指定されるエントリ（データＤＴＡ）が読み出される（ステップＳ１１のＮＯルートからステップＳ１２）。つまり、パケットのヘッダを読み出した際に、ヘッダの物理アドレスｐａ[6:3]に基づき、コア１１Ａが要求しているデータに対応する受信バッファ１４１のアドレスＲＰ＋ｐａ[6:3]＋１がＲＰに設定される。図７に示す例では、１０番目のデータＤＴＡに対応するアドレスを示す１１が、ＲＰにセットされる。
【００９６】
この後、次のサイクルで、ヘッダの次に読み出されるエントリはデータであり、この場合（ステップＳ１３のＮＯルート）、CycleＣＴの値がデータ長（パケット長）Lengthに到達したか否かが判断される（ステップＳ１８）。つまり、読出対象パケットの全てのデータが読み出されたか否かが判断される。図７では、Length＝１６の例が示されている。
【００９７】
CycleＣＴ＝Lengthでない場合（ステップＳ１８のＮＯルート）、ＲＰの値が値ＨＤＲＰ＋Length（図７では値１６）に到達したか否かが判断される（ステップＳ１９）。ＲＰ＝ＨＤＲＰ＋Lengthでない場合（ステップＳ１９のＮＯルート）、もしくは、ヘッダのOpcodeがフェッチ応答でない場合（ステップＳ１５のＮＯルート）、セレクタ１４３ｇは図５の(2)を選択するように切替動作を行なう。これにより、ＲＰの値が値ＨＤＲＰ＋Lengthに到達するまで、一単位データを読み出す都度（図７のタイミングＴ１９〜Ｔ２３参照）、ＲＰの値が１インクリメントされ（ステップＳ２０）、CycleＣＴが１インクリメントされた後（ステップＳ１７）、処理はステップＳ１１に戻る。
【００９８】
ＲＰの値が値ＨＤＲＰ＋Lengthに到達すると（ステップＳ１９のＹＥＳルート）、セレクタ１４３ｇは図５の(3)を選択するように切替動作を行なう。これにより、１加算器１４３ｂで得られた値ＨＤＲＰ＋１がＲＰに設定され（ステップＳ２１）、CycleＣＴが１インクリメントされる（ステップＳ１７）。例えば図７のタイミングＴ２４では、ＨＤＲＰ＝０であるため、ＲＰには１が設定される。この後、処理はステップＳ１１に戻る。
【００９９】
ＲＰに値ＨＤＲＰ＋１を設定した後の各サイクル（図７のタイミングＴ２５〜Ｔ３３参照）では、CycleＣＴの値がデータ長Lengthに到達するまで、つまり読出対象パケットの全てのデータが読み出されるまで、セレクタ１４３ｇは図５の(2)を選択するように切替動作を行なう。これにより、CycleＣＴの値がデータ長Lengthに到達するまで、一単位データを読み出す都度、ＲＰの値が１インクリメントされ（ステップＳ２０）、CycleＣＴが１インクリメントされた後（ステップＳ１７）、処理はステップＳ１１に戻る。
【０１００】
CycleＣＴの値がデータ長Lengthに到達すると（ステップＳ１８のＹＥＳルート；図７のタイミングＴ３４参照）、CycleＣＴの値が０にリセットされる（ステップＳ２２）。そして、セレクタ１４３ｇは図５の(4)を選択するように切替動作を行なう。これにより、加算器１４３ｆで得られた値ＨＤＲＰ＋Length＋１（図７では値１７）が、次に読み出すべきデータのアドレスとしてＲＰに設定される（ステップＳ２３）。また、加算器１４３ｃで得られた値ＨＤＲＰ＋Length＋１（図７では値１７）が、次に読み出すべきパケットのヘッダのアドレスとしてＨＤＲＰに設定される（ステップＳ２４）。この後、処理はステップＳ１１に戻る。
【０１０１】
以上の動作により、第１実施形態では、データＤＴＡを、図２２に示した関連技術の場合よりも１０サイクル早く読み出すことができ、レイテンシが短縮される。
【０１０２】
また、上述した動作では、物理アドレスｐａ[6:3]によって、読み出すデータの順番が一意に決まる。したがって、パケットを受け取ったコア１１Ａは、受信バッファ１４１におけるパケットから最初に読み出したデータ以外のデータが、どの物理アドレスのデータであるかを容易に判断することができる。
【０１０３】
〔４〕第２実施形態の情報処理装置
次に、図１および図８〜図１３を参照しながら、本発明の第２実施形態としての情報処理装置（マルチプロセッサシステム）１′について説明する。ここで説明する第２実施形態は、複数の処理対象データが、一つのデータブロック内において所定間隔Intervalをあけて存在する場合に対応する技術である。つまり、第２実施形態は、前述したように、行列計算等で発生するストライドアクセスにおいて、１個のデータ付きパケット内に、必要な単位データ（処理対象データ）が複数存在する場合に対応する技術である。例えば、図１３に示す例では、１６個の８バイトデータＤＴ０〜ＤＴＦを含むパケット内に、所定間隔Interval＝４をあけて４個の処理対象データＤＴ２，ＤＴ６，ＤＴＡ，ＤＴＥが存在する場合について説明する。
【０１０４】
図１に示すように、第２実施形態の情報処理装置１′も、第１実施形態の情報処理装置１と同様、複数（図１で２個）のＣＰＵ１０Ａ，１０Ｂを有している。第２実施形態においても、ＣＰＵ１０ＡとＣＰＵ１０Ｂとは、高速シリアル伝送によるネットワーク３０を介して相互に通信可能に接続される。
【０１０５】
情報処理装置１′におけるＣＰＵ１０Ａ，１０Ｂも、図１〜図７を参照しながら前述した情報処理装置１におけるＣＰＵ１０Ａ，１０Ｂと同様に構成されている。ただし、第２実施形態の情報処理装置１′では、以下に説明するように、ＣＰＵ１０Ａのルータ１４Ａの第１の通信部としての機能、および、ＣＰＵ１０Ｂのルータ１４Ｂの第２の通信部としての機能に若干の変更が加えられる。また、第２実施形態の情報処理装置１′では、以下に説明するように、ＣＰＵ１０Ａ（ルータ１４Ａ）における読出部１４３が、読出部１４３′（図１，図１０，図１１参照）に変更されている。
【０１０６】
第２実施形態のＣＰＵ１０Ａにおけるルータ（第１の通信部）１４Ａも、第１実施形態と同様、一のコア１１Ａが生成したフェッチ要求を、フェッチ要求パケット（図９，図１７（Ａ）参照）によってＣＰＵ１０Ｂへ送信する。また、ルータ（第１の通信部）１４Ａは、フェッチ要求に対応する処理対象データを含むデータブロックを添付されたフェッチ応答パケット（図９，図１７（Ｂ）参照）を、ＣＰＵ１０Ｂから受信する。
【０１０７】
ただし、第２実施形態のＣＰＵ１０Ａにおけるルータ（第１の通信部）１４ＡからＣＰＵ１０Ｂへ送信される、フェッチ要求パケットのヘッダは、図８（Ａ）に示すようなフォーマットを有する。つまり、フェッチ要求パケットのヘッダには、図１８（Ａ）を参照しながら上述したＯＰＣ，ＲＱＩＤ，物理アドレスＰＡのほかに、上記所定間隔に関する情報（ここでは上記所定間隔を示す値Interval）が含まれる。
【０１０８】
また、第２実施形態のＣＰＵ１０Ｂにおけるルータ（第２の通信部）１４Ｂは、図８（Ｂ）に示すようなフォーマットを有する応答ヘッダをＣＰＵ１０Ａへ送信されるフェッチ応答パケット（ＤＩＭＭ２０Ｂ等から読み出されたデータブロック）に付す。図８（Ｂ）に示すように、当該応答ヘッダには、フェッチ要求パケットのヘッダに含まれるアドレス情報（図８（Ａ）のＰＡ参照）から取り出された先頭の処理対象データのアドレス情報ｐａ[6:3]と、所定間隔Intervalとが記録される。そして、ルータ（第２の通信部）１４Ｂは、応答ヘッダを付したデータブロックを、フェッチ応答パケット（図９，図１７（Ｂ）参照）としてＣＰＵ１０Ａへ送信する。
【０１０９】
さらに、第２実施形態のＣＰＵ１０Ａにおけるルータ（第１の通信部）１４Ａは、受信バッファ１４１，書込部１４２，読出部１４３′を有する。第２実施形態において、受信バッファ１４１，書込部１４２，読出部１４３′は、ＣＰＵ１０Ａのルータ１４Ａ内に備えられているが、ＣＰＵ１０Ａ内に備えられていればよい。受信バッファ１４１および書込部１４２は、図１および図４を参照しながら上述した第１実施形態の受信バッファ１４１および書込部１４２と同様に構成されているので、その説明は省略する。
【０１１０】
読出部１４３′は、データブロック（フェッチ応答パケット）に付された応答ヘッダに記録された、先頭の処理対象データの物理アドレスｐａ[6:3]と所定間隔Intervalとを参照する。そして、読出部１４３′は、参照した物理アドレスｐａ[6:3]と所定間隔Intervalとに基づき、まず、コア１１Ａの要求する複数の処理対象データを受信バッファ１４１から読み出した後、当該複数の処理対象データ以外の単位データを受信バッファ１４１から順次読み出す。第２実施形態における読出部１４３′は、図１０および図１１を参照しながら後述するごとく構成され、図１２および図１３を参照しながら後述するごとく動作する。
【０１１１】
なお、第２実施形態では、ＣＰＵ１０Ａが、第１の通信部としての機能や、受信バッファ１４１，書込部１４２，読出部１４３′としての機能を有し、ＣＰＵ１０Ｂが、第２の通信部としての機能を有する場合について説明している。しかし、複数のＣＰＵ１０Ａ，１０Ｂのそれぞれが、第１および第２の通信部としての機能と、受信バッファ１４１，書込部１４２，読出部１４３′としての機能とを有していてもよい。
【０１１２】
ここで、図９を参照しながら、第２実施形態の情報処理装置１′において、一ＣＰＵ１０Ａのコア１１Ａから他ＣＰＵ１０Ｂのメモリデータに対する、ストライドアクセスに係るフェッチ要求を発行する場合のパケットルーティングについて説明する。
【０１１３】
この場合、図９に示すように、必要な処理対象データを読み出すためのフェッチ要求パケット（データ無しパケット）が、ＣＰＵ１０Ａから発行・送信され、ネットワーク３０経由で、当該処理対象データを保持するメモリ２０Ｂを有するＣＰＵ１０Ｂにルーティングされる。このとき、フェッチ要求パケットのヘッダには、図８（Ａ）に示すように、少なくとも、処理対象データのアドレス情報ＰＡと、ストライドアクセスに係る所定間隔Intervalとが含まれる。
【０１１４】
一方、ルータ１４Ｂによってフェッチ要求パケットを受信したＣＰＵ１０Ｂは、要求された処理対象データを含むデータブロックをメモリ２０Ｂから読み出し、フェッチ応答パケット（データ付きパケット）を生成し、当該フェッチ応答パケットをＣＰＵ１０Ａに送信する。このとき、図８（Ｂ）に示すように、ＣＰＵ１０Ｂで生成されるフェッチ応答パケットのヘッダ（応答ヘッダ）には、ストライドアクセス対象の先頭の単位データ（処理対象データ）を特定可能な４ビットの物理アドレスｐａ[6:3]が載せられている。また、図８（Ｂ）に示すように、当該ヘッダには、ストライドアクセスに係る所定間隔Intervalも載せられている。
【０１１５】
ＣＰＵ１０Ｂがフェッチ応答パケットを生成する際、フェッチ要求パケットのヘッダに載っている物理アドレスＰＡ（図８（Ａ）参照）から、フェッチ要求対象の先頭単位データを特定可能な４ビットの物理アドレスｐａ[6:3]が取り出される。また、同ヘッダからストライドアクセスに係る所定間隔Intervalが取り出される。取り出された物理アドレスｐａ[6:3]および所定間隔Intervalを応答ヘッダに含ませることにより、図８（Ｂ）に示すようなフォーマットの応答ヘッダが生成される。このように生成された応答ヘッダを有するフェッチ応答パケットは、図９に示すように、フェッチ要求の発行元であるＣＰＵ１０Ａにルーティングされ送信される。
【０１１６】
上述の通り、第２実施形態では、フェッチ要求パケットのヘッダおよびフェッチ応答パケットのヘッダの両方に、コア１１Ａがメモリ２０Ｂにストライドアクセスする際のアドレス間隔を示すIntervalが追加されている。ここで、例えば、データブロック（１２８バイトデータ）に含まれる単位データ（８バイトデータ）の数が１６である場合、所定間隔Intervalの値は、０＜Interval＜１６の範囲の整数である。これは、Interval＝０の場合、同一の単位データを選択することになる一方、Interval＝１６の場合、パケットに含まれるデータブロック（１６個の単位データ）の範囲を超えることになるからである。
【０１１７】
ＣＰＵ１０Ａ側で受信されたフェッチ応答パケットは、まず、ルータ１４Ａに設けられた受信バッファ１４１に、書込部１４２（図１，図１０参照）によって、一旦、単位データ毎に書き込まれる。この後、読出部１４３′におけるＲＰの値（読み出すべき単位データのアドレス）を制御することで、受信バッファ１４１に書き込まれたパケットのうち、コア１１Ａが要求する処理対象データが受信バッファ１４１から優先的に読み出される。
【０１１８】
特に、第２実施形態における読出部１４３′は、応答ヘッダに記録された、先頭の処理対象データの物理アドレスｐａ[6:3]と所定間隔Intervalとに基づき、コア１１Ａの要求する複数の処理対象データを受信バッファ１４１から読み出した後、それ以外のデータを受信バッファ１４１から順次読み出す。
【０１１９】
以下、上述のような機能を実現する第２実施形態の構成について、図１０および図１１を参照しながら説明する。図１０は、第２実施形態のＣＰＵ１０Ａにおけるルータ１４Ａに含まれる受信バッファ１４１および当該受信バッファ１４１に対するパケット書込／読出処理に係る構成（書込部１４２および読出部１４３′）を示すブロック図である。図１１は、図１０に示すパケット読出処理に係る構成（読出部１４３′）を詳細に示すブロック図である。
【０１２０】
図１０に示すように、第２実施形態における書込部１４２は、図４に示した書込部１４２と同様のＷＤＲ，ＨＤＷＰおよびＷＰを有する。
【０１２１】
また、第２実施形態の読出部１４３′は、図４に示した読出部１４３と同様のＲＤＲ，ＲＰ，ＨＤＲＰ，LengthレジスタおよびCycleＣＴに加え、Intervalレジスタを有する。ＷＤＲ，ＨＤＷＰ，ＷＰ，ＲＤＲ，ＲＰ，ＨＤＲＰ，LengthレジスタおよびCycleＣＴについては、既述のものと同様であるので、その説明は省略する。
【０１２２】
第２実施形態で追加されるIntervalレジスタには、フェッチ応答パケットのヘッダ（応答ヘッダ）を受信バッファ１４１から読み出した際に、当該ヘッダに記録された所定間隔Intervalが設定される。なお、パケット種がフェッチ応答パケット以外のパケットについては、Intervalの値として１が設定される。
【０１２３】
ついで、図１１を参照しながら、図１０に示すパケット読出処理に係る構成、つまり読出部１４３′について、より詳細に説明する。図１１に示すように、第２実施形態の読出部１４３′は、第１実施形態の読出部１４３と同様のLength生成部１４３ａと１加算器１４３ｂ，１４３ｄと加算器１４３ｃ，１４３ｅ，１４３ｆとセレクタ１４３ｇとに加え、加算器１４３ｈおよび演算器１４３ｉを有する。
【０１２４】
Length生成部１４３ａは、第１実施形態と同様、ヘッダを受信バッファ１４１から読み出した際に、当該ヘッダにおけるOpcodeから、受信バッファ１４１から読出中のパケットのデータ長Lengthを生成し、Lengthレジスタに設定する。
【０１２５】
１加算器（＋１）１４３ｂは、第１実施形態と同様、ＨＤＲＰの示す値に１を加算する。
【０１２６】
加算器１４３ｃは、第１実施形態と同様、Lengthレジスタにおけるデータ長Lengthと、１加算器１４３ｂからの値ＨＤＲＰ＋１とを加算し、得られた値ＨＤＲＰ＋Length＋１をＨＤＲＰに設定する（図１２のステップＳ４５参照）。加算器１４３ｃの動作タイミングは、CycleＣＴの示す値がデータ長LengthになってCycleＣＴをリセット（初期化）するタイミング（図１２のステップＳ４３および図１３のタイミングＴ３４参照）である。
【０１２７】
１加算器（＋１）１４３ｄは、第１実施形態と同様、ＲＰの示す値に１を加算する。
【０１２８】
加算器１４３ｅは、第１実施形態と同様、コア１１Ａが要求する先頭の処理対象データを特定する物理アドレスｐａ[6:3]と、１加算器１４３ｄからの値ＲＰ＋１とを加算し、得られた値ＲＰ＋ｐａ[6:3]＋１をＲＰに設定する（図１２のステップＳ３７参照）。物理アドレスｐａ[6:3]は、読出中のパケットのヘッダからＲＤ−ＢＵＳを介して読み出される。加算器１４３ｅの動作タイミングは、フェッチ応答パケットからヘッダを読み出すタイミング（図１２のステップＳ３６のＹＥＳルート；図１３のタイミングＴ１８参照）である。当該タイミングで、セレクタ１４３ｇは、加算器１４３ｅで得られた値ＲＰ＋ｐａ[6:3]＋１をＲＰに設定するように切替動作を行なう（図１１〜図１３の(1)参照）。
【０１２９】
加算器１４３ｆは、第１実施形態と同様、Lengthレジスタにおけるデータ長Lengthと、１加算器１４３ｂからの値ＨＤＲＰ＋１とを加算し、得られた値ＨＤＲＰ＋Length＋１をＲＰに設定する（図１２のステップＳ４４参照）。加算器１４３ｆの動作タイミングは、CycleＣＴがデータ長LengthになってCycleＣＴをリセット（初期化）するタイミング（図１２のステップＳ４３；図１３のタイミングＴ３４参照）である。当該タイミングで、セレクタ１４３ｇは、加算器１４３ｆで得られた値ＨＤＲＰ＋Length＋１をＲＰに設定するように切替動作を行なう（図１１〜図１３の(4)参照）。
【０１３０】
第２実施形態で追加された加算器１４３ｈは、Intervalレジスタにおける所定間隔Intervalと、ＲＰの値とを加算し、得られた値ＲＰ＋IntervalをＲＰに設定する（図１２のステップＳ４１参照）。加算器１４３ｈの動作タイミングは、ヘッダのOpcodeがフェッチ応答でない場合（図１２のステップＳ３６のＮＯルート参照）、もしくは、ＲＰ＋IntervalがＨＤＲＰ＋Length以下であるタイミング（図１２のステップＳ４０のＮＯルート；図１３のタイミングＴ１９〜Ｔ２１，Ｔ２３〜Ｔ２５，Ｔ２７〜Ｔ２９，Ｔ３１〜Ｔ３２参照）である。当該タイミングで、セレクタ１４３ｇは、加算器１４３ｈで得られた値ＲＰ＋IntervalをＲＰに設定するように切替動作を行なう（図１１〜図１３の(2)参照）。
【０１３１】
また、第２実施形態で追加された演算器１４３ｉは、Intervalレジスタにおける所定間隔Intervalと、１加算器１４３ｂからの値ＨＤＲＰ＋１と、ＲＰの値とに基づき、値ＨＤＲＰ＋［（ＲＰ−ＨＤＲＰ＋１）％Interval］を算出し、当該値をＲＰに設定する（図１２のステップＳ４２参照）。演算器１４３ｉの動作タイミングは、ＲＰ＋IntervalがＨＤＲＰ＋Lengthを超えるタイミング（図１２のステップＳ４０のＹＥＳルート；図１３のタイミングＴ２２，Ｔ２６，Ｔ３０参照）である。当該タイミングで、セレクタ１４３ｇは、演算器１４３ｉで得られた値をＲＰに設定するように切替動作を行なう（図１１〜図１３の(3)参照）。なお、上記値における％は、剰余を与える演算に用いられる記号で、剰余＝被除数％除数と規定される。例えば、１６％４＝４、１７％４＝１、１４％４＝２となる。
【０１３２】
なお、上述した書込部１４２および読出部１４３′としての機能は、論理ゲート等によってハードウエア的にＣＰＵ１０Ａに組み込まれて実現されてもよいし、プログラムを実行することでソフトウエア的にＣＰＵ１０Ａに組み込まれて実現されてもよい。
【０１３３】
次に、図１１〜図１３を参照しながら、上述のごとく構成された書込部１４２および読出部１４３′の動作について説明する。図１２は、図１１に示すパケット読出処理に係る構成（読出部１４３′）の動作を説明するフローチャートである。図１３は、図１０および図１１に示すパケット読出処理に係る構成（読出部１４３′）が図１２に示すフローチャートに従って２，６，１０，１４番目のデータ（ＤＴ２，ＤＴ６，ＤＴＡ，ＤＴＥ）を先に読み出す場合の動作を示すタイムチャートである。
【０１３４】
第２実施形態の書込部１４２によるパケット書込動作は、図２０を参照しながら前述した関連技術の動作と同様であるので、その説明は省略する。一方、第２実施形態の読出部１４３′によるパケット読出動作は、図６を参照しながら前述した第１実施形態の読出部１４３の動作と部分的に異なっている。
【０１３５】
図１２に示すフローチャート（ステップＳ３１〜Ｓ４５）に従って、図１１および図１３を参照しながら第２実施形態の読出部１４３′によるパケット読出動作について説明する。
【０１３６】
ルータ１４Ａは、ＲＰの値とＨＤＷＰの値とが一致しているか否かを判断する（ステップＳ１１）。ＲＰの値とＨＤＷＰの値とが一致している場合（ステップＳ３１のＹＥＳルート）、ルータ１４Ａは、書込対象パケットの書込中であると判断し、ステップＳ３１の処理に戻る。
【０１３７】
ＲＰの値とＨＤＷＰの値とが一致しない場合（ステップＳ３１のＮＯルート）、ルータ１４Ａは、書込対象パケットの書込を完了したと判断し、受信バッファ１４１からのパケット読出を開始する（図１３のタイミングＴ１８参照）。つまり、ＲＰによって指定される、受信バッファ１４１のエントリ（一単位データ）が、受信バッファ１４１からＲＤＲ経由で読み出される（ステップＳ３２）。そして、読み出されたエントリがヘッダ（ＨＤ）であるか否かが判断される（ステップＳ３３）。
【０１３８】
パケット読出の開始時には、まずパケットのヘッダが読み出されるため、読み出されたエントリはヘッダであると判断される（ステップＳ３３のＹＥＳルート）。この場合、読み出されたヘッダの所定間隔Intervalが参照され、ヘッダから当該Intervalの値が、読出部１４３′のIntervalレジスタに設定される（ステップＳ３４）。また、読み出されたヘッダのOpcodeが参照され、当該Opcode（パケット種）に基づき、受信バッファ１４１から読出中のパケットのデータ長Lengthが生成され、生成されたデータ長Lengthが読出部１４３′のLengthレジスタに設定される（ステップＳ３５）。
【０１３９】
この後、当該Opcodeがフェッチ応答であるか否かを判断する（ステップＳ３６）。フェッチ応答である場合（ステップＳ３６のＹＥＳルート）、セレクタ１４３ｇは図１１の(1)を選択するように切替動作を行なう。これにより、加算器１４３ｅで得られた値ＲＰ＋ｐａ[6:3]＋１がＲＰに設定され（ステップＳ３７）、CycleＣＴが１インクリメントされる（ステップＳ３８）。そして、ＲＰに設定された値（アドレス）で指定されるエントリ（データＤＴ２）が読み出される（ステップＳ３１のＮＯルートからステップＳ３２）。つまり、パケットのヘッダを読み出した際に、ヘッダの物理アドレスｐａ[6:3]に基づき、コア１１Ａが要求しているデータ（先頭単位データ）に対応する受信バッファ１４１のアドレスＲＰ＋ｐａ[6:3]＋１がＲＰに設定される。図１３に示す例では、２番目のデータＤＴ２に対応するアドレスを示す３が、ＲＰにセットされる。
【０１４０】
この後、次のサイクルで、ヘッダの次に読み出されるエントリはデータであり、この場合（ステップＳ３３のＮＯルート）、CycleＣＴの値がデータ長（パケット長）Lengthに到達したか否かが判断される（ステップＳ３９）。つまり、読出対象パケットの全てのデータが読み出されたか否かが判断される。図１３では、Length＝１６の例が示されている。
【０１４１】
CycleＣＴ＝Lengthでない場合（ステップＳ３９のＮＯルート）、値ＲＰ＋Intervalが値ＨＤＲＰ＋Length（図１３では値１６）を超えているか否かが判断される（ステップＳ４０）。ＲＰ＋IntervalがＨＤＲＰ＋Length以下である場合（ステップＳ４０のＮＯルート）、もしくは、ヘッダのOpcodeがフェッチ応答でない場合（ステップＳ３６のＮＯルート）、セレクタ１４３ｇは図１１の(2)を選択するように切替動作を行なう。
【０１４２】
これにより、ＲＰ＋Intervalの値が値ＨＤＲＰ＋Lengthを超えるまで、一単位データを読み出す都度、ＲＰの値に、所定間隔の値Interval（図１３ではInterval＝４）が加算され（ステップＳ４１）、CycleＣＴが１インクリメントされた後（ステップＳ３８）、処理はステップＳ３１に戻る。なお、ステップＳ４１の処理の実行タイミングは、図１３のタイミングＴ１９〜Ｔ２１，Ｔ２３〜Ｔ２５，Ｔ２７〜Ｔ２９，Ｔ３１〜Ｔ３３に対応する。
【０１４３】
ＲＰ＋Intervalの値が値ＨＤＲＰ＋Lengthを超えると（ステップＳ４０のＹＥＳルート）、セレクタ１４３ｇは図１１の(3)を選択するように切替動作を行なう。これにより、演算器１４３ｉで得られた値ＨＤＲＰ＋［（ＲＰ−ＨＤＲＰ＋１）％Interval］がＲＰに設定され（ステップＳ４２）、CycleＣＴが１インクリメントされる（ステップＳ３８）。
【０１４４】
例えば、図１３のタイミングＴ２２では、値ＨＤＲＰ＋［（ＲＰ−ＨＤＲＰ＋１）％Interval］＝０＋［（１５−０＋１）％４］＝１６％４＝４であるため、ＲＰには４が設定される。また、図１３のタイミングＴ２６では、値ＨＤＲＰ＋［（ＲＰ−ＨＤＲＰ＋１）％Interval］＝０＋［（１６−０＋１）％４］＝１７％４＝１であるため、ＲＰには１が設定される。同様に、図１３のタイミングＴ３０では、値ＨＤＲＰ＋［（ＲＰ−ＨＤＲＰ＋１）％Interval］＝０＋［（１３−０＋１）％４］＝１４％４＝２であるため、ＲＰには２が設定される。この後、処理はステップＳ３１に戻る。
【０１４５】
この後、CycleＣＴの値がデータ長Lengthに到達すると（ステップＳ３９のＹＥＳルート；図１３のタイミングＴ３４参照）、CycleＣＴの値が０にリセットされる（ステップＳ４３）。そして、セレクタ１４３ｇは図１１の(4)を選択するように切替動作を行なう。これにより、加算器１４３ｆで得られた値ＨＤＲＰ＋Length＋１（図１３では値１７）が、次に読み出すべきデータのアドレスとしてＲＰに設定される（ステップＳ４４）。また、加算器１４３ｃで得られた値ＨＤＲＰ＋Length＋１（図７では値１７）が、次に読み出すべきパケットのヘッダのアドレスとしてＨＤＲＰに設定される（ステップＳ４５）。この後、処理はステップＳ３１に戻る。
【０１４６】
以上の動作により、第２実施形態では、データＤＴ２，ＤＴ６，ＤＴＡ，ＤＴＥが他のデータよりも先に読み出され、レイテンシが短縮される。
【０１４７】
また、上述した動作では、先頭の処理対象データの物理アドレスｐａ[6:3]と所定間隔Intervalとによって、読み出すデータの順番が一意に決まる。したがって、パケットを受け取ったコア１１Ａは、受信バッファ１４１におけるパケットから先に読み出されたデータ群以外のデータが、どの物理アドレスのデータであるかを容易に判断することができる。
【０１４８】
なお、図１〜図７を参照しながら上述した第１実施形態は、図８〜図１３を参照しながら上述した第２実施形態の所定間隔Intervalの値が１である場合に相当する。
【０１４９】
〔５〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
【０１５０】
〔６〕付記
以上の各実施形態を含む実施形態に関し、さらに以下の付記を開示する。
【０１５１】
（付記１）
他の演算処理装置に接続される演算処理装置であって、
処理対象データの読出要求を生成する処理部と、
前記処理部が生成した読出要求を前記他の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記他の演算処理装置から受信する通信部と、
前記データブロックを保存するバッファと、
前記通信部が受信したデータブロックに含まれる複数の単位データを前記バッファに順次書き込む書込部と、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す読出部と、を有する、演算処理装置。
【０１５２】
（付記２）
前記読出部は、
前記データブロックに付された応答ヘッダに前記他の演算処理装置によって記録された前記処理対象データのアドレス情報を参照し、
当該アドレス情報に対応する前記処理対象データを前記バッファから読み出した後、
前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記１に記載の演算処理装置。
【０１５３】
（付記３）
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記通信部は、
前記所定間隔に関する情報を含む前記読出要求を前記他の演算処理装置へ送信し、
前記読出部は、
前記データブロックに付された応答ヘッダに前記他の演算処理装置によって記録された先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記１に記載の演算処理装置。
【０１５４】
（付記４）
第１の演算処理装置と、
前記第１の演算処理装置に接続される第２の演算処理装置と、を有し、
前記第１の演算処理装置は、
処理対象データの読出要求を生成する処理部と、
前記処理部が生成した読出要求を前記第２の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記第２の演算処理装置から受信する第１の通信部と、
前記データブロックを保存するバッファと、
前記第１の通信部が受信したデータブロックに含まれる複数の単位データを前記バッファに順次書き込む書込部と、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す読出部と、を有し、
前記第２の演算処理装置は、
前記第１の演算処理装置から前記読出要求を受信するとともに、受信した前記読出要求に対応する前記処理対象データを含む前記データブロックを前記第１の演算処理装置へ送信する第２の通信部を有する、情報処理装置。
【０１５５】
（付記５）
前記第２の演算処理装置における前記第２の通信部は、
前記読出要求に含まれるアドレス情報から取り出された前記処理対象データのアドレス情報を記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第１の演算処理装置へ送信する、付記４に記載の情報処理装置。
【０１５６】
（付記６）
前記第１の演算処理装置における前記読出部は、
前記データブロックに付された前記応答ヘッダに記録された前記処理対象データのアドレス情報を参照し、
当該アドレス情報に対応する前記処理対象データを前記バッファから読み出した後、
前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記５に記載の情報処理装置。
【０１５７】
（付記７）
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記第１の演算処理装置における前記第１の通信部は、
前記所定間隔に関する情報を含む前記読出要求を前記第２の演算処理装置へ送信し、
前記第２の演算処理装置における前記第２の通信部は、
前記読出要求に含まれるアドレス情報から取り出された先頭の前記処理対象データのアドレス情報と、前記読出要求から取り出された前記所定間隔に関する情報とを記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第１の演算処理装置へ送信する、付記４に記載の情報処理装置。
【０１５８】
（付記８）
前記第１の演算処理装置における前記読出部は、
前記データブロックに付された前記応答ヘッダに記録された前記先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき、前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記７に記載の情報処理装置。
【０１５９】
（付記９）
第１の演算処理装置と、前記第１の演算処理装置に接続される第２の演算処理装置と、を有する情報処理装置の制御方法であって、
前記第１の演算処理装置は、
処理対象データの読出要求を前記第２の演算処理装置へ送信し、
前記第２の演算処理装置は、
前記第１の演算処理装置から前記読出要求を受信すると、受信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記第１の演算処理装置へ送信し、
前記第１の演算処理装置は、
前記読出要求に対応する前記処理対象データを含むデータブロックを前記第２の演算処理装置から受信し、
受信したデータブロックに含まれる複数の単位データをバッファに順次書き込み、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す、情報処理装置の制御方法。
【０１６０】
（付記１０）
前記第２の演算処理装置は、
前記読出要求に含まれるアドレス情報から取り出された前記処理対象データのアドレス情報を記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第１の演算処理装置へ送信する、付記９に記載の情報処理装置の制御方法。
【０１６１】
（付記１１）
前記第１の演算処理装置は、
前記データブロックに付された前記応答ヘッダに記録された前記処理対象データのアドレス情報を参照し、
当該アドレス情報に対応する前記処理対象データを前記バッファから読み出した後、
前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記１０に記載の情報処理装置の制御方法。
【０１６２】
（付記１２）
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記第１の演算処理装置は、
前記所定間隔に関する情報を含む前記読出要求を前記第２の演算処理装置へ送信し、
前記第２の演算処理装置は、
前記読出要求に含まれるアドレス情報から取り出された先頭の前記処理対象データのアドレス情報と、前記読出要求から取り出された前記所定間隔に関する情報とを記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第１の演算処理装置へ送信する、付記９に記載の情報処理装置の制御方法。
【０１６３】
（付記１３）
前記第１の演算処理装置は、
前記データブロックに付された前記応答ヘッダに記録された前記先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき、前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記１２に記載の情報処理装置の制御方法。
【符号の説明】
【０１６４】
１，１′    情報処理装置（マルチプロセッサシステム）
１０，１０Ａ，１０Ｂ    ＣＰＵ（演算処理装置，マルチコアプロセッサ）
１１，１１Ａ，１１Ｂ    コア（処理部）
１２，１２Ａ，１２Ｂ    共有キャッシュ（三次キャッシュ）
１３，１３Ａ，１３Ｂ    ＭＡＣ
１４    ルータ
１４Ａ    ルータ（第１の通信部）
１４Ｂ    ルータ（第２の通信部）
１４１    受信バッファ（バッファ）
１４２    書込部
１４３，１４３′    読出部
１４３ａ    length生成部
１４３ｂ，１４３ｄ    １加算器（＋１）
１４３ｃ，１４３ｅ，１４３ｆ，１４３ｈ    加算器
１４３ｇ    セレクタ
１４３ｉ    演算器
２０，２０Ａ，２０Ｂ    ＤＩＭＭ（メインメモリ）
３０    ネットワーク
【図１】
0006665429.tif 000002
【図２】
0006665429.tif 000003
【図３】
0006665429.tif 000004
【図４】
0006665429.tif 000005
【図５】
0006665429.tif 000006
【図６】
0006665429.tif 000007
【図７】
0006665429.tif 000008
【図８】
0006665429.tif 000009
【図９】
0006665429.tif 000010
【図１０】
0006665429.tif 000011
【図１１】
0006665429.tif 000012
【図１２】
0006665429.tif 000013
【図１３】
0006665429.tif 000014
【図１４】
0006665429.tif 000015
【図１５】
0006665429.tif 000016
【図１６】
0006665429.tif 000017
【図１７】
0006665429.tif 000018
【図１８】
0006665429.tif 000019
【図１９】
0006665429.tif 000020
【図２０】
0006665429.tif 000021
【図２１】
0006665429.tif 000022
【図２２】
0006665429.tif 000023
【図２３】
0006665429.tif 000024