(57)【要約】【課題】コア間通信用のバッファを新たに設けることなく、コア間通信のレイテンシを低減可能なオンチップルータ及びそれを用いたマルチコアシステムを提供する。【解決手段】実施形態に係るオンチップルータは、宛先変更用テーブルと、検索部と、経路計算部と、ヘッダー生成部とを備える。宛先変更用テーブルは、共有メモリ上の宛先アドレスと、宛先コアに接続されたルータの識別子とを対応させる。検索部は、書き込み要求パケットの宛先アドレスと同一のアドレスを有する有効なエントリが宛先変更用テーブルに存在するか否かを検索する。経路計算部は、検索の結果、有効なエントリが前記宛先変更用テーブルに存在すれば、そのエントリの識別子のルータを宛先として経路計算を行う。ヘッダー生成部は、計算されたルータの識別子を書き込み要求パケットのヘッダーに格納し、かつ宛先を変更したことを示すリルーテッドフラグを立てる。【選択図】図４
2012146201.tif 000002
【特許請求の範囲】
【請求項１】
パケットを受信する複数の入力ポートと、
前記パケットを送信する複数の出力ポートと、
前記入力ポートのそれぞれに設けられており、前記受信したパケットのデータを格納する複数のバッファと、
前記パケットが所望の出力ポートから送出されるように、パケットの出力先を切り替えるスイッチ部と、
送信元コアにより設定された共有メモリ上の宛先アドレスとルータの識別子とを対応させて格納する宛先変更用テーブルと、
受信した書き込み要求パケットに格納された共有メモリ上の宛先アドレスと同一のアドレスを有する有効なエントリが前記宛先変更用テーブルに存在するかどうかを検索する第１の検索を行う検索部と、
前記第１の検索の結果、前記宛先変更用テーブルに存在する有効なエントリのルータを宛先として経路計算を行う経路計算部と、
前記経路計算部により求められた経路を示すルータの識別子を、前記書き込み要求パケットに格納し、かつ宛先を変更したことを示すリルーテッドフラグを立てるヘッダー生成部と、を備えることを特徴とするオンチップルータ。
【請求項２】
前記検索部は、前記宛先コアから受信した読み出し要求パケットに格納された共有メモリ上の宛先アドレスと同一のアドレスを有し、かつ、前記リルーテッドフラグが立てられた書き込み要求パケットが、前記バッファに蓄積されているかどうかを検索する第２の検索を行い、
前記ヘッダー生成部は、前記第２の検索の結果、該当する書き込み要求パケットが存在すれば、その書き込み要求パケットのヘッダーを書き換え、前記読み出し要求パケットに対する応答パケットのヘッダーを生成する、
ことを特徴とする請求項１に記載のオンチップルータ。
【請求項３】
前記ヘッダー生成部は、前記書き込み要求パケットのリルーテッドフラグが立っている場合、１サイクル経過する毎に、前記バッファに蓄積された前記書き込み要求パケットのライフサイクル値を減じ、
前記経路計算部は、前記ライフサイクル値が所定の値まで減少すると、前記書き込み要求パケットの共有メモリ上の宛先アドレスを宛先として経路計算を行い、
前記ヘッダー生成部は、その結果求められたルータ識別子を前記書き込み要求パケットに格納し、前記リルーテッドフラグを倒す、
ことを特徴とする請求項１または２のいずれかに記載のオンチップルータ。
【請求項４】
転送先のルータのバッファに空きがない場合、前記経路計算部はパケットに格納された共有メモリ上の宛先アドレスを宛先として経路計算を行い、前記ヘッダー生成部は前記リルーテッドフラグを倒すことを特徴とする請求項１乃至３のいずれかに記載のオンチップルータ。
【請求項５】
複数のプロセッサコアと、前記プロセッサコアに接続され、前記プロセッサコア間で送受信されるパケットを転送する複数のオンチップルータとを備えるマルチコアシステムであって、
前記オンチップルータは、
前記パケットを受信する複数の入力ポートと、
前記パケットを送信する複数の出力ポートと、
前記入力ポートのそれぞれに設けられており、前記受信したパケットのデータを格納する複数のバッファと、
前記パケットが所望の出力ポートから送出されるように、パケットの出力先を切り替えるスイッチ部と、
自身が接続された前記プロセッサコアにより設定された共有メモリ上の宛先アドレスと、ルータの識別子とを対応させて格納する宛先変更用テーブルと、
受信した書き込み要求パケットに格納された共有メモリ上の宛先アドレスと同一のアドレスを有する有効なエントリが前記宛先変更用テーブルに存在するかどうかを検索する第１の検索を行う検索部と、
前記第１の検索の結果、前記宛先変更用テーブルに存在する有効なエントリのルータを宛先として経路計算を行う経路計算部と、
前記経路計算部により求められた経路を示すルータの識別子を、前記書き込み要求パケットに格納し、かつ宛先を変更したことを示すリルーテッドフラグを立てるヘッダー生成部とを備える、
ことを特徴とするマルチコアシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、オンチップルータ及びそれを用いたマルチコアシステムに関する。
【背景技術】
【０００２】
共有メモリ型のマルチコアシステムでは、プロセッサコア（以下、「コア」）間の通信は共有メモリを介して行われる。まず、コアＡが書き込み要求パケットをオンチップルータ（以下、「ルータ」）により共有メモリに送信する。そして、書き込み要求パケットに含まれるデータが共有メモリ上の所定アドレスに書き込まれる。その後、所定アドレスのデータを必要とするコアＢがデータを読み出すための読出し要求パケットを共有メモリに送信し、コアＡが書き込んだデータを取得する。
【０００３】
このように共有メモリ型マルチコアシステムにおけるコア間通信では、共有メモリを介してデータをやりとりするため、一般にレイテンシが大きいという問題がある。さらに、コア間通信による共有メモリの一時的な使用が、共有メモリを圧迫するという問題もある。
【０００４】
一方、いわゆるメッセージパッシング型と呼ばれるコア間通信方式では、共有メモリを介さずに、コアＡからコアＢにデータを直接送信する。この方式の場合、レイテンシを低減させることができるが、次の問題がある。コア間通信に用いる専用バッファをコアごとに設ける必要があるため、実装コストの増大、チップ面積の増加、消費電力の増大という問題が発生する。さらに、専用バッファには、他のコアからアクセス可能なようにグローバルアドレスを割り当てる必要があるため、限られたアドレス空間を圧迫するという問題もある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−３７２７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、コア間通信用のバッファを新たに設けることなく、コア間通信のレイテンシを低減可能なオンチップルータ及びそれを用いたマルチコアシステムを提供することである。
【課題を解決するための手段】
【０００７】
一実施形態に係るオンチップルータは、共有メモリ型のマルチコアシステムにおいてコア間通信を行うオンチップルータであって、バッファと、スイッチ部と、宛先変更用テーブルと、検索部と、経路計算部と、ヘッダー生成部と、を備える。
【０００８】
前記バッファは、各入力ポートに設けられており、前記入力ポートで受信したデータを格納する。前記スイッチ部は、受信したパケットが所望の出力ポートから送出されるように、パケットの出力先を切り替える。前記宛先変更用テーブルは、共有メモリ上の宛先アドレスと、宛先コアに直接接続されたルータの識別子とを対応させており、送信元コアにより設定される。前記検索部は、前記送信元コアから受信した書き込み要求パケットのヘッダーに格納された前記共有メモリ上の宛先アドレスと同一のアドレスを有する有効なエントリが前記宛先変更用テーブルに存在するかどうかを検索する第１の検索を行う。前記経路計算部は、前記第１の検索の結果、前記有効なエントリが前記宛先変更用テーブルに存在すれば、そのエントリの識別子のルータを宛先としてソースルーティング方式により経路計算を行う。前記ヘッダー生成部は、前記経路計算により求められたルータの識別子を、前記書き込み要求パケットのヘッダーのホップルータフィールドに格納し、かつ宛先を変更したことを示すリルーテッドフラグを立てる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に係る共有メモリ型のマルチコアシステムの概略的な構成を示す図である。
【図２】マルチコアシステムのコア間通信で用いられるパケットの構造を示す図である。
【図３】ソースルーティング方式におけるパケットのヘッダーの詳細を示す図である。
【図４】一実施形態に係るルータの構成を示す図である。
【図５】宛先変更用テーブルの一例を示す図である。
【図６】送信元コアと直接接続されたルータにより生成されたヘッダーの詳細を示す図である。
【図７】第１の実施形態におけるパケットの転送経路の一例を示す図である。
【図８】適応型ルーティング方式におけるパケットのヘッダーの詳細を示す図である。
【図９】第３の実施形態に係るルータの構成を示す図である。
【図１０】第４の実施形態におけるパケットの転送経路の一例を示す図である。
【図１１】第５の実施形態に係る宛先変更用テーブルの一例を示す図である。
【図１２】第５の実施形態におけるパケットの転送経路の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明に係る実施形態について図面を参照しながら説明する。なお、各図において同等の機能を有する構成要素には同一の符号を付し、同一符号の構成要素の詳しい説明は繰り返さない。
【００１１】
まず、各実施形態に共通するマルチコアシステムの構成およびコア間通信に用いられるパケットの概略的な構成について説明する。
【００１２】
図１は、本実施形態に係る共有メモリ型のマルチコアシステムの概略的な構成を示している。図１のマルチコアシステムは、１６個のコア１０１〜１１６と、２０個のルータ２０１〜２２０と、４個の共有メモリ３０１〜３０４と、を含んでいる。
【００１３】
ルータ２０１〜２２０は、格子状に配置され、メッシュ型のネットワークを構成している。ルータ２０１〜２１６は対応するコア１０１〜１１６と接続されており、ルータ２１７〜２２０は対応する共有メモリ３０１〜３０４と接続されている。例えば、コア１０１にはルータ２０１が接続されており、共有メモリ３０１にはルータ２１７が接続されている。各コアは、メッシュ状に接続されたルータを介して、互いに接続されるとともに共有メモリと接続されている。
【００１４】
なお、図１においてルータを示す円内の数字は、ルータの識別子（ＩＤ）を示している。即ち、ルータ２０１〜２２０の識別子はそれぞれ、０〜１９である。また、共有メモリ３０１〜３０４については、キャッシュ機能を有する場合、メモリが用いられることもある。
【００１５】
次に、マルチコアシステムの通信で用いられるパケットの構造について、図２を用いて説明する。パケットは、宛先などに関する情報が格納されるヘッダーと、書き込みデータ又は読出しデータ等が格納されるボディとから構成される。ヘッダーおよびボディはフリット（Ｆｌｉｔ）と呼ばれるデータ単位から構成されており、図２に示すパケットの例では、ヘッダーは２つのヘッダーフリット０及び１からなり、ボディは５つのボディフリット０〜４からなる。
【００１６】
次にパケットの転送方式について説明する。パケットを転送する方式は、ソースルーティング（固定型ルーティング）方式と適応型ルーティング方式がある。ソースルーティング方式では、送信元コアに接続されたルータが、宛先アドレスに応じてパケットの転送経路、即ちパケットの経由するルータを予め全て決める。よって、ソースルーティング方式の場合、転送経路が途中で変更されることはない。適応型ルーティング方式では、パケットを受信した各ルータは、宛先アドレスの他、ネットワークの混雑状況等を考慮して経路計算を行い、パケットの次の転送先を決定する。このように適応型ルーティングの場合、転送経路はパケットを受信したルータごとに決められる。
【００１７】
以下、第１乃至第５の実施形態について説明する。  
（第１の実施形態）
第１の実施形態は、ソースルーティング方式を採った場合の実施形態である。第１の実施形態ではコア間通信は非同期で行われる。
【００１８】
まず、図３を用いて、ソースルーティング方式の場合のパケットのヘッダーの詳細を説明する。ヘッダーフリット０は、コマンドフィールド（Cmd）と、リルーテッドフラグ（Rerouted Flag）と、Ａｃｋ要求フラグ（Ack Required Flag）と、宛先アドレスフィールド（Dest Address）と、ソースコアフィールド（Src Core）と、ライフサイクルフィールド（Life Cycle）と、ホップルータフィールド（Hop Router 1）と、を有する。ヘッダーフリット１は、ホップルータフィールド（Hop Router 2〜5）を有する。
【００１９】
コマンドフィールドはパケットの種類を示すフィールドである。例えば、書き込み要求パケットの場合、コマンドフィールドには“write”を意味する符号が格納され、読み出し要求パケットの場合、コマンドフィールドには“read”を意味する符号が格納される。リルーテッドフラグは、パケットの宛先を変更したことを示すフラグである。
【００２０】
Ａｃｋ要求フラグは、発信元のコアが受領通知を要求するフラグである。第１の実施形態ではコア間通信は非同期であるため、Ａｃｋ要求フラグには“０”が格納される。宛先アドレスフィールドは、共有メモリ上の宛先アドレスを格納するフィールドである。ソースコアフィールドは、発信元のコアの識別子を格納するフィールドである。
【００２１】
ライフサイクルフィールドは、パケットの寿命を示すフィールドである。このフィールドに設定されるライフサイクル値は、ネットワークの特性等に依存する。例えば初期値として“２０”が格納され、ライフサイクル値が所定の値（例えば零）になるとタイムアウトとなる。
【００２２】
ホップルータフィールドは、パケットが経由するルータの識別子を格納するフィールドである。ホップルータフィールドの数は、ルータの中継段数に応じて変化する。発信元コアに接続されたルータは、パケットが宛先コア若しくは共有メモリに接続されたルータに達するまでに経由する全てのルータの識別子をヘッダーに格納する。このため、ルータの中継段数によっては、複数のヘッダーフリットが必要になる。
【００２３】
なお、マルチコアシステムに設けられた各ルータは、受信パケットのホップルータフィールドのうち最後尾のフィールドを参照することで、自分が宛先コアに接続されたルータであるか否かを認識することができる。つまり、最後尾のホップルータフィールドに格納された識別子が自身の識別子と一致すれば、自身が宛先コアに接続されたルータであると認識することができる。
【００２４】
図４は、第１の実施形態に係るルータの構成図の一例である。図４のルータは入力ポートおよび５つの出力ポートを５つずつ有する。ここでは、入力ポート及び出力ポートはそれぞれ、西方向（Ｗ）、東方向（Ｅ）、北方向（Ｎ）、南方向（Ｓ）およびコア方向（Ｃ）と表現する。ただし、ルータの配置位置により入出力ポートの数は異なる。例えば、ルータ２０１は、コア方向、北方向および東方向について入出力ポートを有する。ルータ２０２は、コア方向、西方向、東方向及び北方向について入出力ポートを有する。
【００２５】
ルータは、各入力ポートに設けられたバッファ２１と、スイッチ部２２と、宛先変更用テーブル２３と、検索部２４と、ヘッダー生成部２５と、経路計算部２６とを有する。
【００２６】
バッファ２１は、入力ポートで受信したデータを格納する。バッファ２１の深さ（大きさ）は１Ｆｌｉｔ以上（例えば４〜８Ｆｌｉｔ）である。スイッチ部２２は、受信パケットが所望の出力ポートから送出されるように、パケットの出力先を切り替える。このスイッチ部２２は経路計算部２６により制御される。
【００２７】
宛先変更用テーブル２３は、共有メモリ上の宛先アドレスと、宛先コアに接続されたルータの識別子とを対応させた表である。この宛先変更用テーブル２３は送信元コアにより設定される。送信元コアは、自身の制御用レジスタにアクセスするのと同様にして、接続されたルータの宛先変更用テーブル２３に書き込むことができる。
【００２８】
図５は宛先変更用テーブル２３の一例を示している。図５の宛先変更用テーブル２３は、データの有効性を示すＶフラグ（Valid Flag）を格納するＶと、共有メモリ上の宛先アドレスを格納するDest. Addressと、宛先ルータの識別子を格納するDest Router IDとから構成される。Ｖフラグ、宛先アドレスおよび宛先ルータ識別子のセットをエントリと呼ぶ。図５のエントリ０はＶフラグが立ち、有効なエントリである。エントリ０において、宛先アドレスは０ｘ３１Ｂ８＿９ＢＣ０（以下、アドレスＤＡ１）であり、宛先ルータ識別子は“１０”（ルータ２１１）である。なお、図５ではエントリ数は１であるが、宛先変更用テーブル２３は複数のエントリを有することができる。
【００２９】
次に、コア１０１を送信元コア、コア１１１を宛先コアとした場合における、第１の実施形態によるコア間通信の詳細について説明する。  
まず、送信元のコア１０１は、書き込み要求パケットを送信する前に、自身と接続されたルータ２０１に対して設定を行う。具体的には、コア１０１は、宛先変更用テーブル２３のエントリ０の宛先アドレスＤＡ１を、宛先ルータ識別子として、ルータ２１１の識別子“１０”をそれぞれ書き込む。さらに、コア１０１は、エントリ０が有効であることを示す“１”をＶフラグに書き込む。
【００３０】
宛先変更用テーブルを設定した後、コア１０１は、書き込み要求パケットを生成し、ルータ２０１へ送信する。書き込み要求パケットは、宛先アドレスフィールドに共有メモリ３０１のアドレスＤＡ１が格納されている。
【００３１】
次に、ルータ２０１の検索部２４は、コア１０１から受信した書き込み要求パケットのヘッダーに格納された宛先アドレスと同一のアドレスを有する有効なエントリが宛先変更用テーブル２３に存在するかどうかを検索する。検索の結果、同一のアドレスを有する有効なエントリが存在する場合、ルータ２０１の経路計算部２６は、エントリの識別子のルータを宛先として経路計算を行う。第１の実施形態の場合、ソースルーティングによる経路計算が行われる。
【００３２】
そして、ヘッダー生成部２５は、求められた全てのルータの識別子を、パケットの経由する順にポップルータフィールドに格納するとともに、リルーテッドフラグに“１”を設定する。図６は、このようにして生成されたパケットのヘッダーの一例を示している。図６の各ホップルータフィールドには、経路計算により求められたルータの識別子“１”、“２”、“６”、“１０”がそれぞれ格納されている。
【００３３】
その後、経路計算部２６からの制御を受けて、スイッチ部２２はパケットの出力先を、ルータ２０２（ＩＤ＝１）の方向であるＥ方向のポートに切替える。これにより、宛先変更された書き込み要求パケットがルータ２０１からルータ２０２に送出される。  
図７は、パケットの転送経路の一例を示す図である。書き込み要求パケットは、例えば図７の経路Ａに示すように、ルータ２０１、２０２、２０３及び２０７を経由してルータ２１１に達する。
【００３４】
ここで、コア１１１は、アドレスＤＡ１のデータを読み出す場合、ルータ２１１に対して読み出し要求パケットを送信する。読出し要求パケットの宛先アドレスフィールドにはアドレスＤＡ１が格納されている。
【００３５】
ルータ２１１はコア１１１から読み出し要求パケットを受信すると、検索部２４により読み出し要求パケットの宛先アドレスと同一のアドレスを有し、かつ、リルーテッドフラグが“１”の書き込み要求パケットがバッファに蓄積されているかどうかを検索する。検索の結果、バッファ内に存在する場合、ルータ２１１はヘッダー生成部２５により書き込み要求パケットのヘッダーを書き換え、読み出し要求パケットに対する応答パケットのヘッダーを生成し、コア１１１に送出される。したがって、宛先のコア１１１は、アドレスＤＡ１のデータを迅速に読み出すことができる。なお、応答パケットを生成する際、バッファ内に蓄積されていた書き込み要求パケットは削除される。
【００３６】
次に、コア間通信が非同期であることに起因する問題と、それに対する対処方法について説明する。ここでは、コア１０１からの書き込み要求パケットがルータ２１１に到達した後に、宛先のコア１１１が別のアドレスＤＡ２の読み出しを行った場合を考える。
【００３７】
ルータ２１１内のバッファ２１に空きがない場合、アドレスＤＡ２のデータを有する読み出し応答パケットは、途中のルータに留まり、いつまで経ってもルータ２１１に到達することができない。このためコア１１１の処理が停止するという不具合が生じる。
【００３８】
本実施形態では、ルータ２１１はライフサイクルを利用し、タイムアウトが発生した場合には、既に到達していた書き込み要求パケットを共有メモリに転送する。具体的には、ルータ２１１は、自身のバッファ内にリルーテッドフラグが“１”の書き込み要求パケットがある場合、ライフサイクル値を１サイクル経過するごとに１ずつ減らす。タイムアウトすると、ルータ２１１は、その書き込み要求パケットを共有メモリ３０１に転送する。ルータ２１１は、ヘッダー生成部２５により書き込み要求パケットのアドレスＤＡ１を宛先として転送経路を計算し、求められたルータ識別子をホップルータフィールドに格納する。書き込み要求パケットのリルーテッドフラグは、“０”に設定する。これにより、書き込み要求パケットはルータ２１１から共有メモリ３０１に向けて送信され、例えば図７に示す経路Ｂに沿って転送される。
【００３９】
上記のようにしてルータ２１１に滞留した書き込み要求パケットを共有メモリに転送することで、ルータ２１１のバッファ２１に空きを生じさせる。これにより、コア１１１による読出し要求に対する応答パケットは、ルータ２１１に到達することができる。その結果、コア１１１の処理が停止する事態を回避することができる。
【００４０】
第１の実施形態によれば、コア間通信用のバッファを新たに設けることなく、共有メモリを介さないコア間通信を実現することができる。このため、従来に比べてコア間通信のレイテンシを低減することができる。
【００４１】
また、第１の実施形態によれば、共有メモリがキャッシュ機能を有する場合、従来に比べてキャッシュラインの追い出しが低減することでヒット率を向上させることができ、その結果、マルチコアシステム全体の性能を向上させることができる。
【００４２】
（第２の実施形態）
第２の実施形態では、書き込み要求パケットのＡｃｋ要求フラグを用い、同期をとってコア間通信を行う。宛先コアに接続されたルータは、Ａｃｋ要求フラグが立てられた書き込み要求パケットを受信すると、送信元コアにパケットの転送完了を通知する。そして、送信元コアは宛先コアにデータ書き込み完了通知を送信する。その後、宛先コアは読み出し要求パケットを送信する。よって、同期したコア間通信を行うことができる。以下、詳細について説明する。
【００４３】
コア１０１を送信元コア、コア１１１を宛先コアとする。送信元コア１０１から書き込み要求パケットを受信したルータ２０１は、書き込み要求パケットのＡｃｋ要求フラグに“１”を設定する。宛先コア１１１と接続されたルータ２１１は、コア１０１にパケットの転送が完了したことを通知する。
【００４４】
なお、この通知は、専用の信号線等により行ってもよいし、通常のデータ転送と区別可能な特殊なパケットを用いて行ってもよい。後者の場合は、特殊パケットがルータのバッファでデータ転送用パケットを追い越すことができるようにすることが好ましい。これにより、特殊パケットが通常のパケットに阻害されて送信元のコア１０１に到達できないために同期が完了しないという事態を回避することができる。
【００４５】
ルータ２１１からパケットの転送が完了した旨が通知されると、送信元コア１０１は、マルチコアシステムの提供する同期機構（メモリ上の共有変数や割り込み等）により、コア１１１へデータ書き込みの完了を通知する。コア１１１はその通知を受信すると、アドレスＤＡ１に対する読出し要求パケットを送信する。それ以降の動作は第１の実施形態と同様であるので詳しい説明は省略する。
【００４６】
第２の実施形態によれば、宛先コアは送信元コアからデータ書き込みの完了通知を受けてから、読出し要求を行うため、宛先コアは送信元コアからの書き込みデータを確実に読み出すことができる。また、第２の実施形態によれば、従来に比べて、コア間通信のレイテンシを低減することができる。
【００４７】
（第３の実施形態）
第３の実施形態について説明する。まず、図８を用いて、適応型ルーティング方式の場合のパケットのヘッダーの構成について説明する。
【００４８】
ソースルーティング方式の場合との相違点は、ホップルータフィールドの代わりに、宛先ルータフィールド（Ｄｅｓｔ  Ｒｏｕｔｅｒ）が設けられていることである。宛先ルータフィールドには、宛先コアに接続されたルータの識別子が格納される。なお、従来の場合、宛先ルータフィールドは存在せず、宛先アドレスフィールドの情報を用いて経路計算が行われる。
【００４９】
図９は第３の実施形態に係るルータの構成を示している。図９のルータは、バッファ２１と、スイッチ部２２と、宛先変更用テーブル２３と、検索部２４と、ヘッダー生成部２５と、経路計算部２６とを有する。
【００５０】
さらに、第３の実施形態に係るルータは、隣接するルータのバッファの状態（データの埋まり具合）を通知するフィードバック線２９を有する。経路計算部２６は、フィードバック線２９からの情報を考慮して経路計算を行い、パケットの出力先を決定することができる。
【００５１】
次に、コア１０１を送信元コア、コア１１１を宛先コアとした場合における、第３の実施形態によるコア間通信の詳細について説明する。  
まず、送信元のコア１０１は、書き込み要求パケットを送信する前に、ルータ２０１の宛先変更用テーブル２３に対して設定を行う。即ち、コア１０１は宛先変更用テーブル２３のエントリに、Ｖフラグ“１”、アドレスＤＡ１及びルータ識別子“１０”を書き込む。
【００５２】
次に、コア１０１は、宛先アドレスをアドレスＤＡ１とした書き込み要求パケットをルータ２０１へ送信する。ルータ２０１の検索部２４は、書き込み要求パケットの宛先アドレスと同一のアドレスを有する有効なエントリが宛先変更用テーブル２３に存在するかどうかを検索する。検索の結果、同一のアドレスを有する有効なエントリが存在する場合、ヘッダー生成部２５はそのエントリの宛先ルータ識別子を宛先ルータフィールドに格納するとともに、リルーテッドフラグに“１”を設定する。なお、この際、ヘッダー生成部２５は、Ａｃｋ要求フラグについて、非同期の場合には “０”を設定し、同期の場合には“１”を設定する。
【００５３】
次に、ルータ２０１の経路計算部２６は、格納された識別子のルータを宛先として経路計算を行い、次の転送先を決定する。その決定に従い、経路計算部２６はスイッチ部２２を制御する。これにより、書き込み要求パケットは、ルータ２０１から決定されたルータに向けて送信される。
【００５４】
パケットが転送された中継ルータの経路計算部２６は、リルーテッドフラグが立っている場合には、宛先ルータフィールドに格納された識別子のルータを転送先として経路計算を行い、パケットの出力先を決定する。一方、リルーテッドフラグが立っていない場合には、経路計算部２６は、宛先アドレスフィールドに格納されたアドレスを転送先として経路計算を行う。
【００５５】
コア１０１からの書き込み要求パケットは転送され、最終的に宛先ルータであるルータ２１１に到達する。それ以降の動作は、非同期の場合は第１の実施形態、同期の場合は第２の実施形態と同様であるので詳しい説明は省略する。
【００５６】
第３の実施形態によれば、第１の実施形態と同様、従来に比べてコア間通信のレイテンシを低減することができるとともに、共有メモリがキャッシュ機能を有する場合には、従来に比べてマルチコアシステム全体の性能を向上させることができる。
【００５７】
また、第３の実施形態によれば、同期式のコア間通信を行う場合、第２の実施形態と同様、宛先コアは送信元コアからの書き込みデータを確実に読み出すことができるとともに、従来に比べて、コア間通信のレイテンシを低減することができる。
【００５８】
（第４の実施形態）
第４の実施形態は、ネットワークの混雑等により書き込み要求パケットが宛先コアに接続されたルータに到達できない場合の動作に関する。コア１０１からコア１１１に書き込み要求パケットを転送する場合を例にとって説明する。なお、ルーティング方式は、ソースルーティング方式でも適応型ルーティング方式でもよい。
【００５９】
コア１０１から送信された書き込み要求パケットは、ルータ２０１において宛先変更用テーブル２３の設定に従って宛先をルータ２１１に変更され、経路計算を行って求められた出力ポートから送出され、ルータ２１１に転送される。
【００６０】
ここで、ルータ２１１への経路が混雑しているために、書き込み要求パケットが途中のルータ２０７（ＩＤ＝６）で滞留し、ルータ２１１に到達できない場合を考える。第４の実施形態では、ルータ２０７は、ルータ２１１に転送することを断念し、宛先を宛先アドレスの存在する共有メモリ３０１に変更する。具体的には、ルータ２０７の経路計算部２６が、アドレスＤＡ１を宛先として経路計算を行い、新たな転送経路を求める。また、ヘッダー生成部２５は書き込み要求パケットのリルーテッドフラグを“０”にする。そして、書き込み要求パケットはルータ２０７から共有メモリ３０１に向けて転送される。図１０の経路Ｅは、このときの転送経路の一例を示している。
【００６１】
その後、コア１１１が読み出し要求を行った場合、ルータ２１１のバッファには書き込み要求パケットは存在しない。このため、従来と同様に共有メモリから宛先アドレスのデータが読み出される。
【００６２】
次に、送信元コア１０１に接続されたルータ２０１がルータ２１１への経路が混雑していると判断した場合について説明する。この場合は、初めから共有メモリ３０１に向けて書き込み要求パケットを転送する。
【００６３】
ルータ２０１は、コア１０１からパケットを受信すると、宛先変更用テーブル２３を参照し、宛先を変更すべきパケットであるかどうかを判断する。そして、宛先を変更すべきパケットである場合には、以下の処理を行う。
【００６４】
ルータ２０１がルータ２１１への経路が混雑していると判断した場合、ルータ２０１の経路計算部２６は、アドレスＤＡ１を宛先として経路計算を行う。また、ヘッダー生成部２５は書き込み要求パケットのリルーテッドフラグを“０”に設定する。書き込み要求パケットは共有メモリ３０１に転送される。なお、ネットワークが混雑しているかどうかを判断する方法として、例えば、フィードバック線２９からの情報を用いる。
【００６５】
第４の実施形態では、宛先ルータに到達することが困難なことが分かった段階で、ルータの動作を変更して、宛先コアへの転送を中止し、共有メモリに書き込み要求パケットを送信する。送信元コア及び宛先コアの動作を変更する必要はない。これにより、第４の実施形態によれば、ネットワークの混雑状況に応じて、共有メモリを介したコア間通信と、共有メモリを介さないコア間通信とを柔軟に切替えることができる。
【００６６】
（第５の実施形態）
第５の実施形態は、パケットのマルチキャスト転送を行う。第５の実施形態では、送信元コアからのデータを共有メモリに接続されたルータのバッファに蓄積し、宛先コアからの読み出し要求に応じてこのバッファから複数のコアに対してデータを送信する。これにより共有メモリへの書き込み・読み出しが発生しないことから、従来の共有メモリ型のコア間通信よりもレイテンシの小さいマルチキャストを実現させることができる。
【００６７】
以下、送信元コア１０１から２つのコア１１１とコア１１４へデータを転送する場合について詳細に説明する。ここでは、同期の適応型ルーティング方式の場合について説明するが、第５の実施形態はソースルーティング方式や非同期の場合についても適用可能である。
【００６８】
まず、送信元コア１０１は、書き込み要求パケットを送信する前に、ルータ２０１の宛先変更用テーブル２３の設定を行う。例えば図１１に示すように、コア１０１は、宛先変更用テーブル２３のエントリに、Ｖフラグ“１”、アドレスＤＡ１、及び共有メモリ３０１に接続されたルータの識別子“１６”をそれぞれ書き込む。
【００６９】
次に、コア１０１は、宛先アドレスをアドレスＤＡ１とした書き込み要求パケットをルータ２０１へ送信する。ルータ２０１の検索部２４は、書き込み要求パケットの宛先アドレスと同一のアドレスを有する有効なエントリが宛先変更用テーブル２３に存在するかどうかを検索する。検索の結果、同一のアドレスを有する有効なエントリが存在する場合、ヘッダー生成部２５は、そのエントリのルータ識別子“１６”を宛先ルータフィールドに格納するとともに、リルーテッドフラグに“１”を設定する。この際、ヘッダー生成部２５は、Ａｃｋ要求フラグに“１”を設定する。
【００７０】
次に、ルータ２０１の経路計算部２６は、宛先ルータフィールドに格納された識別子のルータを宛先として経路計算を行い、次の転送先を決定する。その決定に従い、経路計算部２６はスイッチ部２２を制御する。これにより、書き込み要求パケットは、例えば図１２の経路Ｈに沿って転送され、最終的にルータ２１７へ到達する。
【００７１】
ルータ２１７の検索部は、宛先ルータフィールドに格納された識別子が自身のものと一致するパケットを検索し、そのようなパケットが存在すると、ルータ２１７はコア１０１に転送完了を通知する。
【００７２】
コア１０１は、ルータ２１７から転送完了通知を受信すると、コア１１１及びコア１１４に対し、割り込みなどの手段により同期をかける。コア１１１及びコア１１４は、宛先をアドレスＤＡ１とした読み出し要求パケットを送信する。これらの読み出し要求パケットは、共有メモリ３０１に向けて転送され、ルータ２１７へ到達する。  
ルータ２１７の検索部は読み出し要求パケットを受信すると、自身のバッファ２１の中からリルーテッドフラグが“１”であり、かつ宛先アドレスフィールドの宛先アドレスが読み出し要求パケットの宛先アドレスと一致する書き込み要求パケットを検索する。ルータ２１７のヘッダー生成部は、該当する書き込み要求パケットを書き換え、読み出し要求パケットに対する応答パケットのヘッダーを生成する。
【００７３】
そして、生成した応答パケットを読み出し結果としてコア１１１及びコア１１４に送信する。なお、マルチキャストに対応するため、バッファに蓄積された書き込み要求パケットはそのまま保存しておき、マルチキャストが終了した後、共有メモリ３０１に書き込むとともにバッファから消去する。なお、マルチキャストの終了のタイミングとして、例えばライフサイクル値を用いたタイムアウトを用いることができる。図１２の経路Ｉ及び経路Ｊは応答パケットの転送経路の一例を示している。
【００７４】
第５の実施形態によれば、共有メモリにデータの書き込み及び読み出しを行わない分のレイテンシを低減させることができる。
【００７５】
以上、本発明に係る実施形態について説明した。本実施形態ではメッシュ型のマルチコアネットワークを例にとったが、これに限らず、コア及び共有メモリにそれぞれ対応するルータが接続されていればよく、リング型やトーラス型でもよい。
【００７６】
また、非同期のコア間通信を行う実施形態において、宛先コアにパケットを直接転送するとともに、共有メモリにもパケットを転送し、共有メモリの宛先アドレスにデータを書き込むようにしてもよい。このようにすることで、予め判明しているコア間通信についてはパケットを直接転送することでレイテンシを低減するとともに、その後他のコアが読み出し要求を行った場合には共有メモリからデータを読み出すことができる。
【００７７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００７８】
２１  バッファ
２２  スイッチ部
２３  宛先変更用テーブル
２４  検索部
２５  ヘッダー生成部
２６  経路計算部
２９  フィードバック線
１０１〜１１６  コア  
２０１〜２２０  ルータ  
３０１〜３０４  共有メモリ
【図１】
2012146201.tif 000003
【図２】
2012146201.tif 000004
【図３】
2012146201.tif 000005
【図４】
2012146201.tif 000006
【図５】
2012146201.tif 000007
【図６】
2012146201.tif 000008
【図７】
2012146201.tif 000009
【図８】
2012146201.tif 000010
【図９】
2012146201.tif 000011
【図１０】
2012146201.tif 000012
【図１１】
2012146201.tif 000013
【図１２】
2012146201.tif 000014