(57)【要約】  演算処理装置が制御装置に第１のデータと第２のデータを出力すると、制御装置は、第１のデータと第２のデータの制御情報同士を比較することで、第１のデータと第２のデータが同じデータ本体部を有するか否かを判断する。また、制御装置は、演算処理装置から入力されたデータをデータ転送装置に出力するまで一時的に保存する保存部を有する。第１のデータと第２のデータが同じデータ本体部を有する場合、制御装置は、第１のデータを保存部に保存し、第２のデータの制御情報の一部を保存する。この場合、制御装置は第２のデータを破棄してもよい。また、制御装置は、保存部に保存した第１のデータと、第２のデータの制御情報から、第３のデータを生成し、第３のデータをデータ転送装置に出力してもよい。
2010052753.tif 000002
【特許請求の範囲】
【請求項１】
第１の演算処理装置およびデータ転送装置の間でのデータの転送を制御する制御装置であって、
前記第１の演算処理装置から出力された第１のデータを保存する保存手段と、
前記第１のデータの制御情報と、前記第１のデータより後に前記第１の演算処理装置から受け取った第２のデータの制御情報を比較することで、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断する第１の判断手段と、
前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけた複製情報として保存し、前記第１の場合以外である第２の場合は、前記保存手段に前記第２のデータを保存させる管理手段と、
前記保存手段に保存されたデータの前記データ転送装置への出力を制御する制御手段と、
を備えることを特徴とする制御装置。
【請求項２】
前記第１のデータと前記第２のデータの一方が、前記第１の演算処理装置が備える記憶部に保存されたデータを前記制御装置に接続された記憶装置に書き込むデータであり、前記第１のデータと前記第２のデータの他方が、第２の演算処理装置が要求した前記記憶部に保存されたデータを転送する転送データであるとき、
前記判断手段は、前記第１の場合であると判断する、
ことを特徴とする請求項１に記載の制御装置。
【請求項３】
前記第１の場合に、前記保存手段が保存する前記第１のデータと前記管理手段が保存する前記複製情報から、第３のデータを生成する生成手段をさらに備え、
前記制御手段は、前記第１の場合には前記生成手段が生成した前記第３のデータを前記データ転送装置に出力するよう制御するとともに、前記第２の場合には前記保存手段が保存する前記第１のデータと前記第２のデータの双方を前記データ転送装置に出力するよう制御する、
ことを特徴とする請求項１に記載の制御装置。
【請求項４】
前記第１のデータと前記第２のデータそれぞれが有する制御情報は、前記第１の演算処理装置によるデータの出力の起因となる要求を出力した要求元装置を識別する要求元識別情報と、前記要求元識別情報により識別される１つの前記要求元装置における複数の要求を識別する要求識別情報とを含み、
前記判断手段は、前記第１のデータと前記第２のデータの前記制御情報において前記要求元識別情報と前記要求識別情報がともに等しければ、前記第１のデータと前記第２のデータの前記データ本体部が同じであると判断する、
ことを特徴とする請求項１に記載の制御装置。
【請求項５】
前記管理手段は、前記複製情報を保存する管理記憶部を備え、
前記管理手段は、前記第１の場合において、前記第１のデータが保存された前記保存手段上のアドレスと関連づけられた前記管理記憶部のエントリに前記複製情報を保存する、
ことを特徴とする請求項１に記載の制御装置。
【請求項６】
前記第１のデータが前記第１の演算処理装置から出力されたとき、前記管理手段はさらに前記第１のデータの前記制御情報の一部を保存し、
前記判断手段は、前記管理手段が保存した前記第１のデータの前記制御情報の前記一部を参照し、前記第２のデータの前記制御情報との比較に用いる、
ことを特徴とする請求項１に記載の制御装置。
【請求項７】
前記データ転送装置から前記制御装置に出力された第４のデータが、同じデータ本体部を有する第５のデータと第６のデータに基づいて生成されたデータであるか否かを、前記第４のデータの制御情報から判断する第２の判断手段と、
前記第５のデータと前記第６のデータに基づいて前記第４のデータが生成されたと前記第２の判断手段が判断したとき、前記第４のデータから前記第５と前記第６のデータを復元する復元手段と、
前記復元手段が復元した前記第５のデータと前記第６のデータをそれぞれ送信する送信手段と、
をさらに備えることを特徴とする請求項１に記載の制御装置。
【請求項８】
前記管理手段は、前記第１の場合にさらに前記第２のデータを破棄することを特徴とする請求項１に記載の制御装置。
【請求項９】
第１の装置と第２の装置を含む複数の装置と接続され、前記複数の装置間でのデータの転送を行うデータ転送装置であって、
前記複数の装置のうちの１つから出力されたデータを前記複数の装置のうちの他の１つへ送信する送信手段と、
前記第１の装置から受け取った、前記第２の装置へ送信する第１のデータを前記第２の装置へ出力する前に保存しておく保存手段と、
前記第１の装置から受け取り、前記第１のデータより後に前記送信手段により送信した、前記第２の装置へ送信する第２のデータの制御情報を、前記第１のデータの制御情報と比較することで、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断する第１の判断手段と、
前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけた複製情報として保存し、前記第１の場合以外である第２の場合は、前記保存手段に前記第２のデータを保存させる管理手段と、
前記保存手段に保存されたデータの前記第２の装置への出力を制御する制御手段と、
を備えることを特徴とするデータ転送装置。
【請求項１０】
前記第１の場合に、前記保存手段が保存する前記第１のデータと前記管理手段が保存する前記複製情報から、第３のデータを生成する生成手段をさらに備え、
前記制御手段は、前記第１の場合には前記生成手段が生成した前記第３のデータを前記第２の装置に出力するよう制御するとともに、前記第２の場合には前記保存手段が保存する前記第１のデータと前記第２のデータの双方を前記第２の装置に出力するよう制御する、
ことを特徴とする請求項９に記載のデータ転送装置。
【請求項１１】
前記第１のデータが、前記第２の装置に送信する第４のデータと、前記第４のデータと同じデータ本体部を有する第５のデータから生成された複製データであるか否かを前記第１のデータの前記制御情報から判断する第２の判断手段と、
前記第１のデータが複製データであるとき、前記第１のデータから前記第４のデータと前記第５のデータを復元する復元手段とをさらに備え、
前記送信手段は、前記第２の判断手段による判断に基づいて、前記復元手段が復元した前記第４のデータと前記第５のデータを送信するか、または前記第１のデータを送信する、
ことを特徴とする請求項９に記載のデータ転送装置。
【請求項１２】
前記第２の判断手段は、前記第１のデータが前記複製データである場合はさらに、前記第５のデータを前記第２の装置に送信する第３の場合か否かを判断し、
前記第２の判断手段が前記第３の場合であると判断したときは、前記送信手段は、前記第１のデータを前記第２の装置に送信し、
前記第１のデータが前記複製データデータであり、かつ、前記第２の判断手段が前記第３の場合ではないと判断したときは、前記送信手段は、前記復元手段が復元した前記第４のデータと前記第５のデータをそれぞれの送信先に送信する、
ことを特徴とする請求項１１に記載のデータ転送装置。
【請求項１３】
前記復元手段は、
前記第１のデータの前記制御情報の一部を削除することによって前記第１のデータから前記第４のデータを復元する複製データ修正手段と、
前記第１のデータの前記制御情報から前記第５のデータの制御情報を復元する制御情報復元手段と、
前記制御情報復元手段が復元した前記第５のデータの前記制御情報と前記第１のデータのデータ本体部を連結することで前記第５のデータを復元するデータ生成手段と、
を備えることを特徴とする請求項１１に記載のデータ転送装置。
【請求項１４】
前記複数の装置にはさらに第３の装置が含まれ、
前記第５のデータが、前記第３の装置に接続された記憶装置に、前記第１の装置に接続された第１の演算処理装置が備える記憶部に保存されたデータを書き込むデータであり、かつ前記第４のデータが、前記第２の装置に接続されており前記記憶部に保存された前記データを要求した第２の演算処理装置に、前記記憶部に保存された前記データを転送する転送データであるか、または、
前記第４のデータが、前記第２の装置に接続された記憶装置に前記記憶部に保存された前記データを書き込むデータであり、かつ前記第５のデータが、前記第３の装置に接続されており前記記憶部に保存された前記データを要求した第３の演算処理装置に、前記記憶部に保存された前記データを転送する転送データである、
ことを特徴とする請求項１１に記載のデータ転送装置。
【請求項１５】
第１の制御装置および第２の制御装置を含む複数の制御装置と、前記複数の制御装置間でのデータの転送を行うデータ転送装置を備える情報処理装置であって、
前記第１の制御装置は、
前記第１の制御装置に接続された第１の演算処理装置から出力され、前記第２の制御装置へと送信する第１のデータを保存する保存手段と、
前記第１のデータの制御情報と、前記第１のパケットより後に前記第１の演算処理装置から受け取った第２のデータの制御情報とを比較することにより、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断する第１の判断手段と、
前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけて複製情報として保存し、前記第１の場合以外の第２の場合は、前記保存手段に前記第２のデータを保存させる管理手段と、
前記第１の場合に、前記保存手段が保存する前記第１のデータと前記管理手段が保存する前記複製情報から、第３のデータを生成する生成手段と、
前記第１の場合には前記生成手段が生成した前記第３のデータを前記データ転送装置に出力するよう制御するとともに、前記第２の場合には前記保存手段が保存する前記第１のデータと前記第２のデータの双方を前記データ転送装置に出力するよう制御する第１の制御手段を備え、
前記データ転送装置は、
前記第１の制御装置から受け取ったデータの制御情報に基づいて、前記第１の場合か前記第２の場合かを判断する第２の判断手段と、
前記第１の場合に、前記第３のデータから前記第１のデータと前記第２のデータを復元する復元手段と、
前記第２の判断手段による判断に基づいて、前記第３のデータを送信するか、または前記復元手段が復元した前記第１のデータと前記第２のデータを送信する送信手段を備える、
ことを特徴とする情報処理装置。
【請求項１６】
記憶部と演算処理部を備えた演算処理装置であって、
前記演算処理部から出力された第１のデータを保存する保存手段と、
前記第１のデータの制御情報と、前記第１のデータより後に前記演算処理部から出力された第２のデータの制御情報とを比較することにより、前記第１のデータと前記第２のデータが同じデータ本体部を有するか否かを判断する判断手段と、
前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけて複製情報として保存し、前記第１の場合以外の第２の場合は、前記保存手段に前記第２のデータを保存させる管理手段と、
前記第１の場合に、前記保存手段が保存する前記第１のデータと前記管理手段が保存する前記複製情報から、第３のデータを生成する生成手段と、
前記第１の場合には前記生成手段が生成した前記第３のデータを出力するよう制御するとともに、前記第２の場合には前記保存手段が保存する前記第１のデータと前記第２のデータの双方を出力するよう制御する制御手段と、
を備えることを特徴とする演算処理装置。
【請求項１７】
第１の制御装置と、前記第１の制御装置に接続された第１の演算処理装置と、前記第１の制御装置を含む複数の制御装置の間のデータの転送を行うデータ転送装置を有する情報処理装置の制御方法において、
前記第１の演算処理装置が、第１のデータと第２のデータを前記第１の制御装置に出力するステップと、
前記第１の制御装置が、前記第１のデータを受け取って保存し、前記第１のデータを受け取った後で前記第２のデータを受け取り、前記第１のデータの制御情報と前記第２のデータの制御情報を比較することにより、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断するステップと、
前記第１の場合だと前記第１の制御装置が判断した第１の場合は、
前記第１の制御装置は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけて複製情報として保存し、保存している前記第１のデータと前記複製情報から第３のデータを生成し、前記データ転送装置に前記第３のデータを出力するステップと、
前記データ転送装置が、前記第３のデータの制御情報に基づいて前記第１の場合であると判断するとともに、前記第３のデータの前記制御情報に基づいて前記第１のデータと前記第２のデータの送信先が同じか否かを判断するステップと、
前記第１のデータと前記第２のデータの送信先が同じならば、前記データ転送装置は、前記第３のデータを前記同じ送信先に送信するステップと、
前記第１のデータと前記第２のデータの送信先が異なれば、前記データ転送装置は、前記第３のデータの前記制御情報に基づいて、前記第３のデータから前記第１のデータと前記第２のデータを復元してそれぞれを前記複数の制御装置のいずれかへ送信するステップと、
前記第１の場合以外の第２の場合は、
前記第１の制御装置が、さらに前記第２のデータを保存し、保存している前記第１のデータと前記第２のデータの双方を前記データ転送装置に出力するステップと、
前記データ転送装置が、前記第１のデータの前記制御情報に基づいて、前記複数の制御装置のいずれかへ前記第１のデータを送信し、前記第２のデータの前記制御情報に基づいて、前記複数の制御装置のいずれかへ前記第２のデータを送信するステップと、
を含むことを特徴とする情報処理装置の制御方法。
【請求項１８】
前記第１の場合に前記第１の制御装置がさらに前記第２のデータを破棄することを特徴とする請求項１７に記載の情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算処理装置を用いた情報処理技術に関する。
【背景技術】
【０００２】
近年、マルチＣＰＵ（Central Processing Unit）システム（マルチプロセッサシステムともいう）の利用が一般化している。例えば、ノード間を相互に接続するノード相互接続スイッチにより結合されたノードを２つ以上有するＮＵＭＡ（Non-Uniform Memory Access；不均等メモリアクセス）コンピュータシステムなどが開示されている。【０００３】
上記ＮＵＭＡコンピュータシステムにおける各ノードは同一でもよい。各ノードは、ローカル相互接続に結合される処理ユニットとノード相互接続スイッチとの間に結合される。ノード制御装置は、ローカル相互接続上で受信される選択命令を、ノード相互接続スイッチを介して他のノードに伝送することにより、受信された選択命令をローカル相互接続上に伝送して、他のノードのためのローカル・エージェントとして機能する。【０００４】
また、近年では多くのコンピュータシステムにおいてＣＰＵがキャッシュメモリを備えている。そして、複数の装置が主記憶装置を共有する場合にキャッシュメモリ間のデータの整合性であるキャッシュコンシステンシ（Cache Consistency）（キャッシュコヒーレンシ（Cache Coherency）ともいう）を保つための様々な技術が知られている。
【特許文献１】特開２００３−４４４５５号公報
【特許文献２】特開２００２−３４２１６２号公報
【特許文献３】特開平９−２３７２２３号公報
【発明の開示】
【０００５】
本発明は、同じデータ本体部を有する複数のデータが出力される場合に着目して、データを保存するのに必要な容量を削減することを目的とする。
開示の技術の第１の態様によれば、演算処理装置およびデータ転送装置の間でのデータの転送を制御し、保存手段と判断手段と管理手段と制御手段を備える制御装置が提供される。
【０００６】
前記保存手段は、前記演算処理装置から出力された第１のデータを保存する。
前記判断手段は、前記第１のデータの制御情報と、前記第１のデータより後に前記演算処理装置から受け取った第２のデータの制御情報を比較することで、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断する。
【０００７】
前記管理手段は、前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけた複製情報として保存する。また、前記管理手段は、前記第１の場合以外である第２の場合は、前記保存手段に前記第２のデータを保存させる。
【０００８】
前記制御手段は、前記保存手段に保存されたデータの前記データ転送装置への出力を制御する。
開示の技術の第２の態様によれば、第１の装置と第２の装置を含む複数の装置と接続され、前記複数の装置間でのデータの転送を行うデータ転送装置が提供される。前記データ転送装置は、送信手段と保存手段と判断手段と管理手段と制御手段を備える。
【０００９】
前記送信手段は、前記複数の装置のうちの１つから出力されたデータを前記複数の装置のうちの他の１つへ送信する。
前記保存手段は、前記第１の装置から受け取った、前記第２の装置へ送信する第１のデータを前記第２の装置へ出力する前に保存しておく。
【００１０】
前記判断手段は、前記第１の装置から受け取り、前記第１のデータより後に前記送信手段により送信した、前記第２の装置へ送信する第２のデータの制御情報を、前記第１のデータの制御情報と比較する。その比較により、前記判断手段は、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断する。
【００１１】
前記管理手段は、前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけた複製情報として保存する。また、前記管理手段は、前記第１の場合以外である第２の場合は、前記保存手段に前記第２のデータを保存させる。
【００１２】
前記制御手段は、前記保存手段に保存されたデータの前記第２の装置への出力を制御する。
開示の技術の第３の態様によれば、複数の制御装置と、前記複数の制御装置間でのデータの転送を行うデータ転送装置を備える情報処理装置が提供される。複数の制御装置には、下記の生成手段をさらに備えた第１の態様と同様の第１の制御装置が含まれる。
【００１３】
前記生成手段は、第１の態様に関して説明した前記第１の場合に、前記保存手段が保存する前記第１のデータと前記管理手段が保存する前記複製情報から、第３のデータを生成する。
【００１４】
そして、第３の態様において前記第１の制御装置の前記制御手段は、前記第１の場合には前記生成手段が生成した前記第３のデータを前記データ転送装置に出力するよう制御する。また前記第１の制御装置の前記制御手段は、前記第２の場合には前記保存手段が保存する前記第１のデータと前記第２のデータの双方を前記データ転送装置に出力するよう制御する。
【００１５】
また、第３の態様における前記データ転送装置は、前記第１の制御装置から受け取ったデータの制御情報に基づいて、前記第１の態様に関して説明した前記第１の場合か前記第２の場合かを判断する第２の判断手段を備える。
【００１６】
前記データ転送装置はさらに、前記第１の場合に、前記第３のデータから前記第１のデータと前記第２のデータを復元する復元手段を備える。そして、前記データ転送装置は、前記第２の判断手段による判断に基づいて、前記第３のデータを送信するか、または前記復元手段が復元した前記第１のデータと前記第２のデータを送信する送信手段を備える。
【００１７】
開示の技術の第４の態様によれば、記憶部と演算処理部と保存手段と判断手段と管理手段と生成手段と制御手段を備えた演算処理装置が提供される。第４の態様における前記保存手段、前記判断手段、前記管理手段、および前記制御手段は、第１の態様における前記制御装置のものと類似である。また、第４の態様における前記生成手段は、第３の態様における前記制御装置のものと類似である。
【００１８】
開示の技術の第５の態様によれば、第３の態様の情報処理装置の制御方法が提供される。
したがって、開示の技術によれば、いずれの態様においても第１の場合に第２のデータを保存する必要がないため、保存手段に必要な記憶容量を削減することが可能である。
【図面の簡単な説明】
【００１９】
【図１】複数のＣＰＵを備えるシステムの例を示す構成図である。
【図２】第１のキャッシュプロトコルにしたがったサーバシステムの動作例を示す図である。
【図３】第２のキャッシュプロトコルにしたがったサーバシステムの動作例を示す図である。
【図４】第３のキャッシュプロトコルにしたがったサーバシステムの動作例を示す図である。
【図５】比較例におけるＸＢの構成図である。
【図６】比較例におけるＸＢの一部を抜粋して詳細を示した構成図である。
【図７】比較例における出力バッファ制御部の構成図である。
【図８】比較例におけるライトポインタ制御部の構成図である。
【図９】比較例におけるリードポインタ制御部の構成図である。
【図１０】比較例におけるＳＣの構成図である。
【図１１】比較例におけるディレクトリの例を示す図である。
【図１２】比較例においてＣＰＵがライトバックデータパケットをＳＣに出力したときの、ＳＣ内の出力バッファ制御部の動作を説明する図である。
【図１３】比較例においてＣＰＵが続いて転送データパケットをＳＣに出力したときの、ＳＣ内の出力バッファ制御部の動作を説明する図である。
【図１４】第１実施形態によるサーバシステムの動作の概要を示す図である。
【図１５】第１実施形態におけるＳＣの構成図である。
【図１６】第１実施形態におけるＸＢの構成図である。
【図１７】第１実施形態におけるＳＣ内の出力バッファ制御部の構成図である。
【図１８Ａ】第１実施形態における管理テーブル部の構成図である。
【図１８Ｂ】第１実施形態における比較部とライトポインタ制御部の構成図である。
【図１９】第１実施形態における出力バッファ制御部の動作を説明する図である。
【図２０】第１実施形態において先にライトバックデータパケットが入力されたときの出力バッファ制御部の動作の具体例を説明する図である。
【図２１】第１実施形態においてライトバックデータパケットの後から共有型・転送データパケットが入力されたときの出力バッファ制御部の動作の具体例を説明する図である。
【図２２】第１実施形態において共有型・転送データパケットが破棄された後にポート間アービタ部から出力許可が下りたときの出力バッファ制御部内のヘッダマージ部の動作の具体例を説明する図である。
【図２３】第１実施形態における複製チェック部、データパケット復元部、セレクタ、およびルーティング部の構成を示す図である。
【図２４】第１実施形態における複製チェック部、データパケット復元部、およびセレクタの動作を説明する図である。
【図２５】第１実施形態におけるルーティングテーブル部の構成図である。
【図２６】第１実施形態において複製情報を持ったライトバックデータパケットから元の２つのパケットを復元して２つのパケットをルーティングする動作の具体例を説明する図である。
【図２７】第１実施形態における複製データパケット修正部の動作の具体例を説明する図である。
【図２８】第１実施形態におけるヘッダ復元部の動作の具体例を説明する図である。
【図２９】第１実施形態におけるデータパケット生成部の動作の具体例を説明する図である。
【図３０】第２実施形態におけるＣＰＵの構成図である。
【発明を実施するための最良の形態】
【００２０】
以下、実施形態について図面を参照しながら詳細に説明する。開示の技術の理解を助けるため、まずライトバック型のキャッシュメモリを用いるシステムについて説明する。
ライトバック型のキャッシュメモリを用いるシステムにおいては、キャッシュメモリに格納されたデータを主記憶装置に書き戻すライトバック動作が行われる。ライトバック動作が行われるときのシステム性能の向上に関する技術としては、以下のようなものが開示されている。【００２１】
例えば、ライトバック型キャッシュを有するＣＰＵとホストブリッジとがＣＰＵローカルバスを介してメインメモリを共有するシステムにおける次のような構成が開示されている。【００２２】
ホストブリッジは、メインメモリへのリードアクセスアドレスを保持するアドレス保持回路と、アドレス保持回路に保持されたアドレスとＣＰＵによるライトバック動作におけるラインアドレスとの一致を検出するアドレスヒット判定回路を備える。また、両アドレスが一致した場合に、ライトバック動作におけるライトデータを取り込み、且つ、メインメモリへのアクセスをキャンセルするメモリアクセス制御回路をホストブリッジが備える。以上の構成により、所望のデータを早期に得るとともに、ローカルバスのトラフィックを軽減することができる。【００２３】
また、ＣＰＵローカルバスとＩＯ（Input/Output）バスとをバスブリッジで連結してなるコンピュータシステムにおける次のような技術も開示されている。すなわち、ＩＯバスに接続されるバスマスタ装置からＩＯバスを介し主記憶装置へのアクセス動作であるリード要求があった際、キャッシュ検査部によりキャッシュへのライトバックが必要であることが通知された場合、次のようにして主記憶アクセス動作が高速化される。【００２４】
具体的には、書き戻し制御部は、主記憶制御部を介してライトバックデータを主記憶装置に書き戻すのと同時に、ライトバックデータをデータバイパス部にも転送する。すると、データバイパス部を介して、リード要求アドレスに応じた目的のデータが直接ＩＯバス制御部に取り込まれ、ＩＯバスからバスマスタ装置へ転送される。以上により、主記憶装置に対する書き戻し処理の終了を待って主記憶装置からのデータ読み出し処理を行う必要がなくなる。【００２５】
以上のように、ライトバック動作が行われるときのシステム性能の向上に関するいくつかの技術が開示されている。しかしながら、複数のＣＰＵを有するマルチＣＰＵシステムにおいてライトバック型のキャッシュメモリが用いられると、キャッシュプロトコルによっては、システム内の制御装置およびデータ転送装置が比較的大きなサイズのバッファを必要とすることがある。【００２６】
以下では、ライトバック型のキャッシュメモリが用いられる場合に、システム内の制御装置およびデータ転送装置に必要なバッファサイズについて、具体的に説明する。
図１は複数のＣＰＵを備えるシステムの例を示す構成図である。図１において、情報処理装置であるサーバシステム１００は、複数のノード１０１ａ、１０１ｃ、１０１ｅ、１０１ｇとデータ転送装置であるクロスバスイッチ（以下「ＸＢ」と略す）１０２を備える。複数のノード１０１ａ、１０１ｃ、１０１ｅ、１０１ｇはＸＢ１０２を介して互いに接続されている。図１のサーバシステム１００のようにノード拡張された構成は、サーバシステムに好適である。【００２７】
図１においてノード１０１ａは、バス１０８ａによりＸＢ１０２と接続されたシステムコントローラ（以下「ＳＣ」と略す）１０３ａを備える。ノード１０１ａはさらに、内部バスを介してＳＣ１０３ａに接続されたＣＰＵ１０４ａ、ＣＰＵ１０４ｂ、メインメモリ１０５ａ、ディレクトリ１０６ａ、およびＩＯＣ（Input/Output Component）１０７ａを備える。ノード１０１ａ内の各部は、例えば、システムボードとも呼ばれる１枚のマザーボード上に実装されていてもよい。また、図１の例では、他のノード１０１ｃ，１０１ｅ、および１０１ｇも、ノード１０１ａと同様に構成されている。【００２８】
サーバシステム１００内の各コンポーネントについてさらに詳しく説明すれば下記のとおりである。
ＸＢ１０２はＳＣ１０３ａ〜１０３ｇ間でのデータ伝送を行うスイッチング機構である。後述のように、サーバシステム１００内のコンポーネント間でのデータの授受はパケットの伝送により行われる。ＸＢ１０２は、ノード１０１ａ〜１０１ｇ間でのパケットのルーティングを行うデータ転送装置の一例である。【００２９】
ＳＣ１０３ａは、ノード１０１ａ内のコンポーネント間のデータ伝送を制御するとともに、ノード１０１ａ内の各コンポーネントと他のＳＣ１０３ｃ〜１０３ｇとの間のデータ伝送を制御する制御装置である。また、ＳＣ１０３ａはディレクトリ１０６ａの参照や更新の制御も行う。ＳＣ１０３ａ〜１０３ｇもＳＣ１０３ａと同様である。【００３０】
ＣＰＵ１０４ａ〜１０４ｈのそれぞれは、演算や制御などを実行し、不図示のキャッシュメモリを備えている。キャッシュメモリは階層化されていてもよい。
メインメモリ１０５ａは、例えばＲＡＭ（Random Access Memory）である。メインメモリ１０５ａへのアクセスは、同じノード１０１ａ内のコンポーネントからも行われ、他のノード１０１ｃ〜１０１ｇ内のコンポーネントからも行われる。メインメモリ１０５ｃ〜１０５ｇもメインメモリ１０５ａと同様に、いずれのノード内のコンポーネントからもアクセス可能なＲＡＭである。【００３１】
ディレクトリ１０６ａは、同じノード１０１ａ内のメインメモリ１０５ａに格納されたデータがどのＣＰＵ内のキャッシュメモリにキャッシュされているかを、例えばテーブル形式で格納する。つまり、ディレクトリ１０６ａの参照や更新を行うＳＣ１０３ａは、データ伝送を制御するだけでなく、メインメモリ１０５ａとＣＰＵ内のキャッシュメモリ間のデータ整合性であるキャッシュコンシステンシの管理も行っている。ディレクトリ１０６ｃ〜１０６ｇもディレクトリ１０６ａと同様に、同じノード内のメインメモリ１０５ｃ〜１０５ｇに格納されたデータについて管理する。【００３２】
ＩＯＣ１０７ａは、不図示のＰＣＩ（Peripheral Component Interconnect）デバイスなどの様々なＩ／Ｏデバイスと、ＩＯＣ１０７ａとＳＣ１０３ａの間のシステムバスとを接続するチップセットコンポーネントである。ＩＯＣ１０７ｃ〜１０７ｇもＩＯＣ１０７ａと同様である。【００３３】
以上のように構成されたサーバシステム１００において、コンポーネント間の通信はパケットの送受信により行われる。パケットは、データの要求、データの通知、データの要求への応答、データの転送などのために送信される。パケットは、少なくともパケットヘッダを有し、パケットの種類（タイプ）によってはデータペイロードをさらに有する。パケットは、さらに誤り検出用のトレイラを有していてもよい。【００３４】
以下では、パケットヘッダが以下の（ａ１）〜（ａ３）の各フィールドを含むものとして説明する。
（ａ１）パケットの宛先のコンポーネントを識別する宛先ＩＤ（identifier）。【００３５】
（ａ２）パケットの要求元のコンポーネントを識別する要求元ＩＤ。例えば、ＣＰＵ１０４ａが他のコンポーネントに何かを要求するときに送信する要求パケットの要求元ＩＤは、ＣＰＵ１０４ａのＩＤである。また、ＣＰＵ１０４ａからの要求パケットに対する応答としてＣＰＵ１０４ａへ送信されるパケットの要求元ＩＤも、ＣＰＵ１０４ａのＩＤである。【００３６】
（ａ３）１つの要求元からの異なる複数の要求（リクエスト）を識別する要求ＩＤ（以下「ＲｅｑＩＤ」と略す）。
図１の例において、各ＣＰＵ１０４ａ〜１０４ｈが備えるキャッシュメモリがライトバック型のキャッシュメモリであるとする。すると、メインメモリ１０５ａ〜１０５ｇのいずれかから読み出されてキャッシュメモリに格納されたデータが書き換えられた場合、ライトバック動作が必要である。しかし、具体的にどのタイミングでライトバック動作が行われるかは、キャッシュコンシステンシを保つためのキャッシュプロトコルに応じて様々である。【００３７】
キャッシュプロトコルは、キャッシュラインの状態（ステート）の頭文字を使って、「ＭＥＳＩプロトコル」、「ＭＯＳＩプロトコル」、「ＭＯＥＳＩプロトコル」などと呼ばれる。ステートには以下の（ｂ１）〜（ｂ５）のようなものがある。【００３８】
（ｂ１）Ｍ（Modified）ステートは、キャッシュラインが１つのＣＰＵのキャッシュメモリにだけ格納されており、かつキャッシュライン内の少なくとも一部のデータが、キャッシュメモリに格納された後で書き換えられた状態である。すなわち、Ｍステートのキャッシュラインはダーティ（dirty）である。【００３９】
（ｂ２）Ｅ（Exclusive）ステートは、キャッシュラインが１つのＣＰＵのキャッシュメモリにだけ格納されており、かつキャッシュラインがキャッシュメモリに格納された後で書き換えられていない状態である。すなわち、Ｅステートのキャッシュラインはクリーン（clean）である。【００４０】
（ｂ３）Ｓ（Shared）ステートは、同じキャッシュラインが他のＣＰＵのキャッシュメモリにも格納されている状態である。
（ｂ４）Ｉ（Invalid）ステートは、キャッシュラインが無効化された状態である。【００４１】
（ｂ５）Ｏ（Owned）ステートは、メインメモリへのライトバックを行う責任を持った状態である。Ｏステートのキャッシュラインはダーティであり、同じキャッシュラインが他のＣＰＵのキャッシュメモリにも格納されている。【００４２】
キャッシュプロトコルによって、利用するステートやステート間の遷移の仕方が異なり、ライトバックの仕方も異なる。そして、ＣＰＵの仕様によって、どのキャッシュプロトコルが採用されるかということが決まっている。【００４３】
例えば、ＣＰＵ１０４ｃがＭステートで保持しているダーティなキャッシュラインのデータに対して共有型・データ転送要求が到来した場合のＣＰＵ１０４ｃの動作には、ＣＰＵの仕様およびキャッシュプロトコルにより以下の（ｃ１）〜（ｃ３）の３種類の動作をとりうる。【００４４】
（ｃ１）ＣＰＵ１０４ｃはライトバックデータパケットのみを出力する。データを要求した要求元への共有型・転送データパケットの送信は、ライトバックデータパケットを受け取り、メインメモリへデータをライトバックするＳＣが行う。なお、ＣＰＵ１０４ｃにおいて、共有型・データ転送要求により要求されたキャッシュラインは、キャッシュプロトコルに応じてＩまたはＳステートへ遷移する。【００４５】
（ｃ２）ＣＰＵ１０４ｃはデータを要求した要求元を宛先とする共有型・転送データパケットのみを出力する。また、ＣＰＵ１０４ｃにおいて、共有型・データ転送要求により要求されたキャッシュラインは、Ｏステートへ遷移する。例えばＭＯＥＳＩプロトコルでは（ｃ２）の動作が行われ、ライトバックはすぐには行われない。【００４６】
（ｃ３）ＣＰＵ１０４ｃはライトバックデータパケットと共有型・転送データパケットの双方を出力する。ＣＰＵ１０４ｃにおいて、共有型・データ転送要求により要求されたキャッシュラインは、キャッシュプロトコルに応じてＩまたはＳステートへ遷移する。【００４７】
なお、以下の説明では、次の（ｄ１）〜（ｄ４）に示すパケットタイプが定義されているものとして説明する。
（ｄ１）ＣＰＵが、サーバシステム１００内のいずれかのメインメモリに格納されているデータを要求するときに用いる「メモリアクセス要求パケット」がある。キャッシュプロトコルに応じて、メモリアクセス要求パケットには、排他型、共有型などの種類がある。【００４８】
（ｄ２）メモリアクセスが要求された対象データを、あるＣＰＵがキャッシュしていたときに、メモリアクセスを要求した要求元へのデータの転送を要求するために用いられる「データ転送要求パケット」がある。例えば、後述の図４の例のように、要求元以外のＳＣがデータ転送要求パケットを出力する。キャッシュプロトコルに応じて、データ転送要求パケットにも、排他型、共有型などの種類がある。例えば、共有型のデータ転送要求パケットは、あるＣＰＵ内のキャッシュメモリにキャッシュされたデータを他のＣＰＵに転送することを求めるパケットである。【００４９】
（ｄ３）ＣＰＵが、自分のキャッシュメモリにキャッシュしているダーティな（すなわちＭステートの）キャッシュラインのデータをメインメモリにライトバックするときに出力する「ライトバックデータパケット」がある。【００５０】
（ｄ４）データを要求した要求元へ、要求されたデータを転送するために用いられる「転送データパケット」がある。キャッシュプロトコルに応じて、転送データパケットにも、排他型、共有型、書き戻し責任付き共有型などの種類がある。【００５１】
続いて、上記（ｃ１）〜（ｃ３）の場合について、図２〜図４をそれぞれ参照してより具体的に説明する。
図２は、第１のキャッシュプロトコルにしたがったサーバシステム１００の動作例を示す図である。【００５２】
ステップＳ１０１において、ＣＰＵ１０４ａは、メインメモリ１０５ｅに格納されたデータを要求するため、ＳＣ１０３ｅを宛先とする共有型・メモリアクセス要求パケットを出力する。以下、説明の便宜上、ステップＳ１０１で出力される共有型・メモリアクセス要求パケットを識別するＲｅｑＩＤが５であると仮定する。【００５３】
ＣＰＵ１０４ａが出力した共有型・メモリアクセス要求パケットは、ＳＣ１０３ａとＸＢ１０２を介して、メインメモリ１０５ｅと同じノード１０１ｅ内のＳＣ１０３ｅに送信される。【００５４】
するとステップＳ１０２において、共有型・メモリアクセス要求パケットを受信したＳＣ１０３ｅは、ディレクトリ１０６ｅを参照し、要求されたデータを含むキャッシュラインをキャッシュメモリに保持しているＣＰＵを検索する。【００５５】
以下では、ステップＳ１０２におけるディレクトリ１０６ｅの参照の結果、例えば、要求されたデータをＣＰＵ１０４ｃのみが保持していると判明したと仮定する。
すると、ステップＳ１０３においてＳＣ１０３ｅは、ＣＰＵ１０４ｃを宛先とする共有型・データ転送要求パケットを出力する。ＳＣ１０３ｅが出力した共有型・データ転送要求パケットは、ＸＢ１０２とＳＣ１０３ｃを介して、ＣＰＵ１０４ｃに送信される。【００５６】
上記（ｃ１）〜（ｃ３）に関する前提として既に説明したように、図２の例においては、要求されたデータは、ＣＰＵ１０４ｃがＭステートで保持しているダーティなキャッシュライン内のデータである。よって、ステップＳ１０４でＣＰＵ１０４ｃは、Ｍステートのキャッシュラインのデータをメインメモリ１０５ｅにライトバックするため、メインメモリ１０５ｅと同じノード１０１ｅ内のＳＣ１０３ｅを宛先とするライトバックデータパケットを出力する。出力されたライトバックデータパケットは、ＳＣ１０３ｃとＸＢ１０２を介してＳＣ１０３ｅへと送信される。【００５７】
また、上記（ｃ１）で述べたように、ＣＰＵ１０４ｃは、要求されたデータを含むキャッシュラインのステートを、キャッシュプロトコルに応じてＩまたはＳステートに更新する。【００５８】
そして、ライトバックデータパケットを受信したＳＣ１０３ｅは、続くステップＳ１０５において、ステップＳ１０１でデータを要求した要求元であるＣＰＵ１０４ａを宛先とする共有型・転送データパケットを出力する。共有型・転送データパケットのデータペイロードは、ＳＣ１０３ｅによって、ライトバックデータパケットのデータペイロードからコピーされたものである。【００５９】
共有型・転送データパケットは、ＸＢ１０２とＳＣ１０３ａを介してＣＰＵ１０４ａに送信される。
さらに、ステップＳ１０６においてＳＣ１０３ｅは、受信したライトバックデータパケットに基づいて、ＣＰＵ１０４ｃがＭステートで保持していたキャッシュラインのデータをメインメモリ１０５ｅにライトバックする。【００６０】
以上の動作により、（ｃ１）の場合にＣＰＵ１０４ｃが有するキャッシュメモリとメインメモリ１０５ｅ間のデータ整合性であるキャッシュコンシステンシが保たれる。
続いて、上記（ｃ２）の場合について図３を参照して説明する。図３は、第２のキャッシュプロトコルにしたがったサーバシステム１００の動作例を示す図である。【００６１】
図３におけるステップＳ２０１およびＳ２０２は、図２におけるステップＳ１０１およびＳ１０２と同様であるので説明を省略する。
ステップＳ２０３も、図２のステップＳ１０３とほぼ同様であるが、以下の点においてステップＳ１０３とは異なる。すなわち、上記（ｃ２）で述べたように、ＣＰＵ１０４ｃは、要求されたデータを含むキャッシュラインのステートをＯステートに変更する。【００６２】
そして、続くステップＳ２０４においてＣＰＵ１０４ｃは、データを要求した要求元であるＣＰＵ１０４ａを宛先とする共有型・転送データパケットを出力する。出力された共有型・転送データパケットは、ＣＰＵ１０４ｃからＳＣ１０３ｃ、ＸＢ１０２、およびＳＣ１０３ａを介してＣＰＵ１０４ａに送信される。【００６３】
なお、図２の例とは異なり、図３の例では、ライトバックは後に行われる。具体的には、ステップＳ２０３でＯステートに変更したキャッシュラインをキャッシュメモリから追い出す入れ替え（リフィル）が後に生じたとき、ＣＰＵ１０４ｃはライトバックデータパケットを出力してメインメモリ１０５ｅへのライトバックを行う。【００６４】
以上の動作により、（ｃ２）の場合にもＣＰＵ１０４ｃが有するキャッシュメモリとメインメモリ１０５ｅ間のデータ整合性であるキャッシュコンシステンシが保たれる。
続いて、上記（ｃ３）のＣＰＵ１０４がライトバックデータパケットと共有型・転送データパケットの双方を出力する場合について図４を参照して説明する。図４は、第３のキャッシュプロトコルにしたがったサーバシステム１００の動作例を示す図である。【００６５】
図４におけるステップＳ３０１〜Ｓ３０４は、図２におけるステップＳ１０１〜１０４と同様であるので説明を省略する。
図４の例ではライトバックデータパケットを出力するステップＳ３０４に続くステップＳ３０５において、ＣＰＵ１０４ｃは、ステップＳ３０１でデータを要求した要求元であるＣＰＵ１０４ａを宛先とする共有型・転送データパケットを出力する。共有型・転送データパケットは、ＳＣ１０３ｃ、ＸＢ１０２、およびＳＣ１０３ａを介して送信され、ＣＰＵ１０４ａにおいて受信される。【００６６】
なお、ステップＳ３０４とＳ３０５の実行順序は任意であり、両者が並列に実行されてもよい。また、ＣＰＵ１０４ｃは、要求されたデータを含むキャッシュラインのステートを、キャッシュプロトコルに応じてＩまたはＳステートに更新する。【００６７】
そして、ステップＳ３０６においてＳＣ１０３ｅは、図２のステップＳ１０６と同様に、受信したライトバックデータパケットに基づいて、ＣＰＵ１０４ｃがＭステートで保持していたキャッシュラインのデータをメインメモリ１０５ｅにライトバックする。【００６８】
以上の動作により、（ｃ３）の場合にもＣＰＵ１０４ｃが有するキャッシュメモリとメインメモリ１０５ｅ間のデータ整合性であるキャッシュコンシステンシが保たれる。
以上、図２〜図４を参照してキャッシュプロトコルに応じたサーバシステム１００の動作例を説明したが、動作の違いに応じて、各ＳＣ１０３ａ〜１０３ｇおよびＸＢ１０２に必要なバッファの容量も異なる。具体的には、図４の例においては、図２および図３の例に比べて、より大きな容量のバッファが必要である。以下、その理由について説明する。【００６９】
上記のとおりＸＢ１０２とＳＣ１０３ａ〜１０３ｇは、サーバシステム１００内のコンポーネント間のデータ伝送を制御しており、具体的にはパケットのルーティングを行っている。そのため、ＸＢ１０２とＳＣ１０３ａ〜１０３ｇはいずれも、パケットを受け取る入力ポートと、入力されたパケットをルーティングするスイッチング機構と、ルーティング先のコンポーネントへとパケットを出力する出力ポートを備える。また、ルーティング先のコンポーネントにおけるパケットのオーバフローを避けるため、各ＳＣ１０３ａ〜１０３ｇはＸＢ１０２への出力ポートの前段にバッファを有し、ＸＢ１０２は各ＳＣ１０３ａ〜１０３ｇへの出力ポートの前段にバッファを有する。【００７０】
例えば、ＳＣ１０３ａは、ＸＢ１０２に出力するパケットをバッファに一時的に保存し、ＸＢ１０２から出力許可が得られると、バッファ内のパケットを出力ポートからＸＢ１０２へと出力する。したがって、最大でどれくらいの量のパケットがバッファに滞留する可能性があるのかに応じて、必要なバッファの容量は異なる。【００７１】
図４の例では、キャッシュプロトコルから必然的に、ステップＳ３０４とＳ３０５という近接したタイミングで、２つのパケットがＣＰＵ１０４ｃからＳＣ１０３ｃへ出力される。他方で、図２と図３の例では、２つのパケットがＣＰＵ１０４ｃからＳＣ１０３ｃへ近接したタイミングで出力されるということはない。この違いのため、図４の例の方が、図２および図３の例よりも、必要なバッファの容量は大きい。【００７２】
例えばＳＣ１０３ｃが同じノード１０１ｃ内のＣＰＵ１０４ｃ〜１０４ｄへ出力するデータ転送要求パケットについて、応答を待たずに続けて発行できるパケットの最大数である最大アウトスタンディング（outstanding）数をＰとして、ＳＣ１０３ｃに必要なバッファ容量について述べれば下記のごとくである。【００７３】
図２の例では、ステップＳ１０３でＳＣ１０３ｃがＣＰＵ１０４ｃに１つの共有型・データ転送要求パケットを出力する。つまり、ＳＣ１０３ｃはＸＢ１０２から受け取った共有型・データ転送要求パケットをＣＰＵ１０４ｃにルーティングする。【００７４】
すると、ＳＣ１０３ｃからＣＰＵ１０４ｃへの共有型・データ転送要求パケットの出力を契機として、ステップＳ１０４でＣＰＵ１０４ｃが１つのライトバックデータパケットをＳＣ１０３ｃに出力する。したがって、ＳＣ１０３ｃは、少なくともＰ個のライトバックデータパケットを格納することが可能な容量のバッファを備える必要がある。【００７５】
同様に、図３の例では、ステップＳ２０３でＳＣ１０３ｃがＣＰＵ１０４ｃに１つの共有型・データ転送要求パケットを出力することを契機として、ステップＳ２０４でＣＰＵ１０４ｃは１つの共有型・転送データパケットを出力する。したがって、ＳＣ１０３ｃは、少なくともＰ個の共有型・転送データパケットを格納することが可能な容量のバッファを備える必要がある。【００７６】
例えば、ライトバックデータパケットと共有型・転送データパケットのデータペイロードは、いずれも、要求された１つのキャッシュラインのデータであってもよい。したがって、図２と図３の例では、必要なバッファの容量は同様である。【００７７】
他方で、図４の例では、ステップＳ３０３でＳＣ１０３ｃがＣＰＵ１０４ｃに１つの共有型・データ転送要求パケットを出力することを契機として、ステップＳ３０４でＣＰＵ１０４ｃは１つのライトバックデータパケットをＳＣ１０３ｃに出力する。そして、ステップＳ３０４とほぼ同時に行われるステップＳ３０５において、ＣＰＵ１０４ｃは、１つの共有型・転送データパケットをＳＣ１０３ｃに出力する。【００７８】
したがって、ＳＣ１０３ｃは、少なくともＰ個のライトバックデータパケットとＰ個の共有型・転送データパケットを格納することが可能な容量のバッファを備える必要がある。つまり、１つの共有型・データ転送要求パケットが契機となってＣＰＵ１０４ｃからＳＣ１０３ｃへ出力されるデータパケットの数は、図２と図３の例では１個だけであるのに対し、図４の例では２個であるため、図４の例では必要なバッファの容量が大きい。【００７９】
もちろん、ＳＣ１０３ｃが備えるバッファの容量は、例えばＩＯＣ１０７ｃから受け付けるパケットの最大アウトスタンディング数など、他の要因にも左右される。しかしながら、仕様により規定された様々な最大アウトスタンディング数が同じであれば、図２や図３の例よりも図４の例の方が、必要なバッファの容量が大きいことは上記の説明から明らかである。同様の理由から、ＸＢ１０２に必要なバッファの容量も、図２や図３の例よりも図４の例の方が大きい。【００８０】
続いて、開示の技術の理解を助けるため、図５〜図１３を参照して、比較例について詳細に説明する。その後、図１４〜図２９を参照して、必要なバッファの容量が比較例と比べて約２分の１に削減される第１実施形態について詳細に説明する。また、必要なバッファの容量を削減するための別の構成を採用した第２実施形態について、図３０を参照して説明する。【００８１】
以下、図５〜図１３において説明する比較例は、上記で説明した図１のサーバシステム１００において図４に示したＣＰＵがライトバックデータパケットと共有型・転送データパケットの双方を出力する動作を行う場合の例である。【００８２】
図５は、図１に示したＸＢ１０２の比較例における構成図である。図１に示したように、ＸＢ１０２はバス１０８ａ〜１０８ｇにより各ＳＣ１０３ａ〜１０３ｇと接続されており、ＳＣ１０３ａ〜１０３ｇ間のデータ伝送を行う。図１では両向きの１本の矢印で表されている各バス１０８ａ〜１０８ｇが、図５では２本の矢印により表されている。【００８３】
ＸＢ１０２は、ＳＣ１０３ａから出力されたパケットを受け取る入力ポート２０１ａと、ＳＣ１０３ａへパケットを出力する出力ポート２０２ａを備える。他のＳＣ１０３ｃ、１０３ｅ、および１０３ｇに関しても同様に、ＸＢ１０２は、入力ポート２０１ｃ、２０１ｅ、および２０１ｇ、ならびに出力ポート２０２ｃ、２０２ｅ、および２０２ｇを備える。【００８４】
各ＳＣ１０３ａ〜１０３ｇとの間のバス１０８ａ〜１０８ｇの動作周波数とＸＢ１０２内部の動作周波数が異なる場合、入力ポート２０１ａ〜２０１ｇのそれぞれと、出力ポート２０２ａ〜２０２ｇのそれぞれは、「周波数乗り換え」と呼ばれる周波数の変換も行う。【００８５】
ＸＢ１０２はさらに、ルーティング部２０３と、４つの入力ポート２０１ａ〜２０１ｇに対応する４つのルーティングテーブル部２０４ａ〜２０４ｇを備える。【００８６】
ルーティング部２０３は各入力ポート２０１ａ〜２０１ｇと接続されており、入力ポート２０１ａ〜２０１ｇからパケットを受け取る。また、ルーティングテーブル部２０４ａ〜２０４ｇは、入力ポート２０１ａ〜２０１ｇが受け取ったパケットをどの出力ポート２０２ａ〜２０２ｇに振り分けるのかを決定するテーブル（後述する図６のテーブル３０５）を有する。【００８７】
ルーティング部２０３は、ルーティングテーブル部２０４ａ〜２０４ｇの決定にしたがって、入力ポート２０１ａ〜２０１ｇから受け取ったパケットを振り分ける。パケットの振り分けの詳細は図６とともに後述する。【００８８】
また、ＸＢ１０２は、４つの出力ポート２０２ａ〜２０２ｇに対応した４組の回路を有する。
例えば、出力ポート２０２ａに対応して出力ポート２０２ａの前段に設けられた回路には、ポート間アービタ部２０５ａと、ポート間セレクタ２０６ａと、３つの出力バッファ制御部２０７ｃａ、２０７ｅａ、２０７ｇａが含まれる。各出力バッファ制御部２０７ｃａ、２０７ｅａ、２０７ｇａは、ルーティング部２０３、ポート間アービタ部２０５ａ、およびポート間セレクタ２０６ａと接続されている。また、ポート間セレクタ２０６ａは、ポート間アービタ部２０５ａおよび出力ポート２０２ａと接続されている。【００８９】
なお、出力バッファ制御部２０７ｃａは、添え字「ｃａ」で示すように、ＳＣ１０３ｃからＳＣ１０３ａへの送信（すなわち入力ポート２０１ｃから出力ポート２０２ａへの送信）に対応する。同様に、出力バッファ制御部２０７ｅａと２０７ｇａはそれぞれ、ＳＣ１０３ｅからＳＣ１０３ａへの送信とＳＣ１０３ｇからＳＣ１０３ａへの送信に対応する。【００９０】
詳しくは図７とともに後述するが、３つの出力バッファ制御部２０７ｃａ、２０７ｅａ、および２０７ｇａは、出力ポート２０２ａを介してＳＣ１０３ａへ出力するパケットを保存するバッファを有する。前述の説明において、図２および図３の例に比べて図４の例ではバッファに必要な容量が大きいことを述べたが、当該バッファは具体的には図５に示した１２個の出力バッファ制御部に含まれる。【００９１】
入力ポート２０１ｃがＳＣ１０３ｃから受け取ったパケットが、ルーティング部２０３を介して出力バッファ制御部２０７ｃａに入力されると、出力バッファ制御部２０７ｃａは、ポート間アービタ部２０５ａに対して出力リクエストを発行する。ここで「出力リクエスト」とは、出力バッファ制御部２０７ｃａに入力されたパケットを、ポート間セレクタ２０６ａを介して出力ポート２０２ａへと出力することを求めるリクエストである。【００９２】
同様に、入力ポート２０１ｅがＳＣ１０３ｅから受け取ったパケットが、ルーティング部２０３を介して出力バッファ制御部２０７ｅａに入力されると、出力バッファ制御部２０７ｅａは、ポート間アービタ部２０５ａに対して出力リクエストを発行する。また、出力バッファ制御部２０７ｇａも同様に、パケットが入力されるとポート間アービタ部２０５ａに対して出力リクエストを発行する。【００９３】
ポート間アービタ部２０５ａは、出力バッファ制御部２０７ｃａ、２０７ｅａ、および２０７ｇａのそれぞれから発行された複数の出力リクエストを調停する。すなわち、ポート間アービタ部２０５ａの「ポート間」とは、出力ポート２０２ａを出力先とするパケットが入力された入力ポート２０１ｃ、２０１ｅ、および２０１ｇの間での調停を表している。【００９４】
なお、調停のアルゴリズムは任意である。例えば、ポート間アービタ部２０５ａは、ＬＲＵ（Least Recently Used）アルゴリズム、ラウンドロビン（round robin）アルゴリズム、あるいはＦＩＦＯ（First In First Out）アルゴリズムによる調停を行ってもよい。【００９５】
調停の結果、ポート間アービタ部２０５ａは１つの出力バッファ制御部を選択する。
例えば、調停の結果、出力バッファ制御部２０７ｃａが選択されたとする。すると、ポート間アービタ部２０５ａは、出力バッファ制御部２０７ｃａに出力許可を通知するとともに、出力バッファ制御部２０７ｃａを選択したことをポート間セレクタ２０６ａに通知する。そして、ポート間セレクタ２０６ａは、ポート間アービタ部２０５ａから通知された選択結果にしたがって、選択された出力バッファ制御部２０７ｃａ内のバッファからパケットを受け取り、出力ポート２０２ａへと出力する。【００９６】
以上のように、各出力バッファ制御部２０７ｃａ、２０７ｅａ、および２０７ｇａ内のバッファは、ポート間アービタ部２０５ａから出力許可が通知されるまで（つまり、ＳＣ１０３ａへのルーティングを待つ間）一時的にパケットを保存しておくための領域である。【００９７】
続いて、図６を参照して、ＳＣ１０３ｃから出力されたパケットを入力ポート２０１ｃが受け取ったときのＸＢ１０２の動作について、ルーティングテーブル部２０４ｃの詳細とともに説明する。【００９８】
図６は、ＸＢ１０２の一部を抜粋して詳細を示した構成図である。図６には、入力ポート２０１ｃ、ルーティング部２０３の一部、ルーティングテーブル部２０４ｃ、ならびに３つの出力バッファ制御部２０７ｃａ、２０７ｃｅ、および２０７ｃｇが図示されている。入力ポート２０１ｃから入力されたパケットは、ルーティング部２０３を介して、３つの出力バッファ制御部２０７ｃａ、２０７ｃｅ、および２０７ｃｇのいずれかに出力される。【００９９】
ＸＢ１０２内の他のルーティングテーブル部２０４ａ、２０４ｅ、２０４ｇ、および他の入力ポート２０１ａ、２０１ｅ、２０１ｇとルーティング部２０３との間の関係も、図６と同様である。【０１００】
入力ポート２０１ｃがＳＣ１０３ｃから受け取ったパケットを表す信号は、信号線３０１へ出力される。なお以下では、単に「パケットが信号線３０１へ出力される」のように表記する。【０１０１】
信号線３０１は、信号線３０２と信号線３０３に分岐している。信号線３０２はルーティングテーブル部２０４ｃに接続されており、信号線３０３はルーティング部２０３に接続されている。分岐した信号線３０２を介してルーティングテーブル部２０４ｃへ送られるのは、信号線３０１に出力されたパケットのヘッダに含まれる宛先ＩＤである。また、分岐した信号線３０３を介してルーティング部２０３へ送られるのは、信号線３０１に出力されたパケット全体である。また、ルーティングテーブル部２０４ｃは、信号線３０４によりルーティング部２０３と接続されている。【０１０２】
以下の各図においては、上記のようにある信号線（例えば信号線３０１）が複数の信号線（例えば信号線３０２と信号線３０３）に分岐しており、複数の信号線それぞれへ出力されるデータ同士が異なるとき、図６のように斜めに枝分かれする線によって分岐点を示す。なお、複数に分岐した信号線に同じデータが出力される場合は、後述の図８における信号線の分岐点のように、黒丸を用いて分岐を示す。【０１０３】
斜めに枝分かれする線によって図示される分岐は、例えば、以下の（ｅ１）〜（ｅ３）を含む様々な仕方で実装することができる。
（ｅ１）第１と第２の回路素子は、Ａ本の導線の組により実現される信号線（つまりビット幅がＡビットの伝送路）により接続されている。また、Ａ本の導線のうちＢ本は分岐して第３の回路素子に接続されている（Ａ＞Ｂ）。【０１０４】
例えば図６において、第１〜第３の回路素子が、それぞれ入力ポート２０１ｃ、ルーティング部２０３、ルーティングテーブル部２０４ｃであり、信号線３０１と信号線３０３のビット幅がＡビット、信号線３０２のビット幅がＢビットであってもよい。【０１０５】
（ｅ２）第１の回路素子からは、Ａ本の導線の組により実現される信号線にＡビットの信号が出力される。Ａ本の導線のうちＢ本は第２の回路素子に接続し、Ｃ本は第３の回路素子に接続している（Ａ＝Ｂ＋Ｃ）。【０１０６】
（ｅ３）第１と第４の回路素子は、Ａ本の導線の組により接続されている。また、第４の回路素子はＢ本の導線の組により第２の回路素子と接続され、Ｃ本の導線の組により第３の回路素子と接続されている（Ａ≧ＢかつＡ≧Ｃ）。【０１０７】
第４の回路素子は、例えば、第１の回路素子から入力されたＡビットの信号のうちＢビットを第２の回路素子に出力するとともに、ＡビットのうちＣビットを第３の回路素子に出力する。第４の回路素子は、必要に応じて、Ｂビットの出力を遅延させてもよく、Ｃビットの出力を遅延させてもよい。【０１０８】
例えば図６において、信号線３０２と信号線３０３が枝分かれする部分に不図示の第４の回路素子があってもよい。そして、第４の回路素子が、入力を遅延させることなく、ルーティングテーブル部２０４ｃへは信号線３０２を介して宛先ＩＤを出力するとともに、ルーティング部２０３へは信号線３０３を介してパケットを出力してもよい。【０１０９】
以上の（ｅ１）〜（ｅ３）のように、斜めに枝分かれする線によって図示される分岐は、様々な実装が可能であるが、ある信号線へ出力されたデータの一部または全部が複数の信号線に分岐して出力されるという機能は、（ｅ１）〜（ｅ３）で共通である。また、３本以上の分岐に関しても同様である。【０１１０】
ここで図６の説明に戻ると、ルーティングテーブル部２０４ｃは、テーブル３０５を備える。また、ルーティング部２０３は、入力ポート２０１ｃに対応した分岐部３０６を備えるとともに、さらに、他の３つの入力ポート２０１ａ、２０１ｅ、２０１ｇにそれぞれ対応する不図示の３つの分岐部も備えている。【０１１１】
ルーティングテーブル部２０４ｃは、テーブル３０５を参照し、入力ポート２０１ｃが受け取ったパケットのルーティング先を、信号線３０２を介して入力された宛先ＩＤに基づいて決定する。すなわち、ルーティングテーブル部２０４ｃは、入力ポート２０１ｃが受け取ったパケットを、出力ポート２０２ａ、２０２ｅ、２０２ｇのいずれに出力するのかを決定する。そして、ルーティングテーブル部２０４ｃは、決定した出力ポートを識別する出力ポート情報を、信号線３０４を介して分岐部３０６に出力し、通知する。【０１１２】
信号線３０３は、具体的にはルーティング部２０３内の分岐部３０６に接続されている。分岐部３０６は、例えばマルチプレクサでもよい。分岐部３０６は、信号線３０３を介して入力されるパケットを受け取り、通知された出力ポート情報に基づいて、受け取ったパケットの出力先を次のように切り換える。【０１１３】
・出力ポート情報が出力ポート２０２ａを示す場合、分岐部３０６は、出力ポート２０２ａに対応して出力ポート２０２ａの前段に設けられた出力バッファ制御部２０７ｃａへとパケットを出力する。【０１１４】
・出力ポート情報が出力ポート２０２ｅを示す場合、分岐部３０６は、出力ポート２０２ｅに対応して出力ポート２０２ｅの前段に設けられた出力バッファ制御部２０７ｃｅへとパケットを出力する。【０１１５】
・出力ポート情報が出力ポート２０２ｇを示す場合、分岐部３０６は、出力ポート２０２ｇに対応して出力ポート２０２ｇの前段に設けられた出力バッファ制御部２０７ｃｇへとパケットを出力する。【０１１６】
このように、ルーティング部２０３は、各入力ポート２０１ａ〜２０１ｇが受け取ったパケットを、適切な出力ポート２０２ａ〜２０２ｇへ振り分けるためのスイッチング機構である。【０１１７】
続いて、上記のルーティングテーブル部２０４ｃの動作について、テーブル３０５の詳細とともに説明する。
テーブル３０５は、書き換え可能な記憶素子により実現されている。例えば、ＦＦ（フリップフロップ）によりテーブル３０５が実現される。テーブル３０５は、宛先ＩＤとルーティング先の出力ポート情報とを関連づけて記憶している。【０１１８】
具体的には、ノード１０１ａ内のＳＣ１０３ａ、ＣＰＵ１０４ａ、ＣＰＵ１０４ｂ、およびＩＯＣ１０７ａそれぞれを識別するＩＤは、ノード１０１ａのＳＣ１０３ａと接続された出力ポート２０２ａを識別する出力ポート情報と関連づけられている。同様に、ノード１０１ｅ内のＳＣ１０３ｅ、ＣＰＵ１０４ｅ、ＣＰＵ１０４ｆ、ＩＯＣ１０７ｅのＩＤは、出力ポート２０２ｅを識別する出力ポート情報と関連づけられている。また、ノード１０１ｇ内のＳＣ１０３ｇ、ＣＰＵ１０４ｇ、ＣＰＵ１０４ｈ、ＩＯＣ１０７ｇのＩＤは、出力ポート２０２ｇを識別する出力ポート情報と関連づけられている。【０１１９】
ルーティングテーブル部２０４ｃは、テーブル３０５のほかに、さらに比較器３０８ａ〜３０８ｌと、論理和演算を行うＯＲ回路３０９ａ〜３０９ｃと、セレクタ３１０を備えている。また、図６の例では、テーブル３０５を構成するＦＦは、具体的には、上記の１２個の宛先ＩＤをそれぞれ記憶するための１２組のＦＦ３０７ａ〜３０７ｌと、３個の出力ポート情報をそれぞれ記憶するための３組のＦＦ３１１ａ〜３１１ｃを含む。なお、宛先ＩＤおよび出力ポート情報を表すのに用いられるビット数に応じて、１組のＦＦ（例えばＦＦ３０７ａやＦＦ３１１ａ）を構成するＦＦの数が決められる。【０１２０】
図６に示すように、テーブル３０５の左列に相当し、各宛先ＩＤを記憶している１２組のＦＦ３０７ａ〜３０７ｌの各々に対応して、１２個の比較器３０８ａ〜３０８ｌが設けられている。また、テーブル３０５の右列に相当し、ルーティング先の各出力ポート情報を記憶している３組のＦＦ３１１ａ〜３１１ｃの各々に対応して、３個のＯＲ回路３０９ａ〜３０９ｃが設けられている。【０１２１】
信号線３０２からルーティングテーブル部２０４ｃに入力された宛先ＩＤは、比較器３０８ａ〜３０８ｌのそれぞれに入力される。
例えば、比較器３０８ａは、比較器３０８ａに対応するＦＦ３０７ａが保持している宛先ＩＤと、入力された宛先ＩＤとを比較する。比較器３０８ａは、２つの宛先ＩＤが一致すれば論理値１をＯＲ回路３０９ａに出力し、２つの宛先ＩＤが一致しなければ論理値０をＯＲ回路３０９ａに出力する。他の比較器３０８ｂ〜３０８ｌに関しても同様である。【０１２２】
図６の例では、ＯＲ回路３０９ａは、比較器３０８ａ〜３０８ｄからの入力の論理和をセレクタ３１０に出力する。同様に、ＯＲ回路３０９ｂは、比較器３０８ｅ〜３０８ｈからの入力の論理和をセレクタ３１０に出力し、ＯＲ回路３０９ｃは、比較器３０８ｉ〜３０８ｌからの入力の論理和をセレクタ３１０に出力する。【０１２３】
したがって、セレクタ３１０には、ＯＲ回路３０９ａ〜３０９ｃから１ビットずつ、合計３ビットの制御信号が入力される。この３ビットの制御信号は、１ビットのみが論理値１になるワンホット（One-Hot）信号である。セレクタ３１０は、論理値１のビットの位置に応じて、ＦＦ３１１ａ〜３１１ｃが保持する出力ポート情報のいずれかを選択し、信号線３０４を介して分岐部３０６に出力する。すなわち、セレクタ３１０は次のように動作する。【０１２４】
・ＯＲ回路３０９ａから論理値１が出力され、ＯＲ回路３０９ｂと３０９ｃから論理値０が出力された場合、セレクタ３１０は、ＯＲ回路３０９ａに対応するＦＦ３１１ａが保持する出力ポート情報を分岐部３０６に出力する。【０１２５】
・ＯＲ回路３０９ｂから論理値１が出力され、ＯＲ回路３０９ａと３０９ｃから論理値０が出力された場合、セレクタ３１０は、ＯＲ回路３０９ｂに対応するＦＦ３１１ｂが保持する出力ポート情報を分岐部３０６に出力する。【０１２６】
・ＯＲ回路３０９ｃから論理値１が出力され、ＯＲ回路３０９ａと３０９ｂから論理値０が出力された場合、セレクタ３１０は、ＯＲ回路３０９ｃに対応するＦＦ３１１ｃが保持する出力ポート情報を分岐部３０６に出力する。【０１２７】
以上説明したようにルーティングテーブル部２０４ｃが動作することにより、入力ポート２０１ｃが受け取ったパケットは、ヘッダに指定された宛先ＩＤに応じて、出力バッファ制御部２０７ｃａ、２０７ｃｅ、２０７ｃｇのいずれかへと適切に振り分けられる。【０１２８】
続いて、図７を参照して出力バッファ制御部の詳細を説明する。図７は出力バッファ制御部２０７ｃａの構成図であるが、図５に示した他の１１個の出力バッファ制御部も同様の構成である。【０１２９】
図７に示すように、出力バッファ制御部２０７ｃａは、制御部４００と、データパケット保存部４１０と、要求パケット保存部４２０と、パケット間セレクタ４３０を備える。また、図５に関して説明したとおり、出力バッファ制御部２０７ｃａは、ルーティング部２０３、ポート間アービタ部２０５ａ、およびポート間セレクタ２０６ａと接続されている。【０１３０】
制御部４００は、出力バッファ制御部２０７ｃａ全体を制御しており、詳しくは後述するが、例えば下記（ｆ１）〜（ｆ４）のような動作を行う。
（ｆ１）データパケット保存部４１０および要求パケット保存部４２０へのパケットの書き込みの制御
（ｆ２）データパケット保存部４１０および要求パケット保存部４２０からパケット間セレクタ４３０へのパケットの出力の制御
（ｆ３）データパケット保存部４１０と要求パケット保存部４２０の双方にパケットが保存されているときに、いずれに保存されたパケットをパケット間セレクタ４３０へ出力するのか、という調停
（ｆ４）ポート間アービタ部２０５ａへの出力リクエストの発行の制御
また、制御部４００は、上記（ｆ３）の制御を行うパケット間アービタ部４０１を備える。パケット間アービタ部４０１は、パケット間アービタ４０２と、比較器４０３と、比較器４０４を含む。さらに、制御部４００は、パケットタイプに応じたＶＡＬＩＤ信号を出力するエンコーダ４０５を備える。具体的には、エンコーダ４０５はデータパケットと要求パケットを判別してＶＡＬＩＤ信号を出力する。【０１３１】
なお、以下の説明において「データパケット」とはデータペイロードを有するパケットであり、「要求パケット」とはデータペイロードを持たないパケットである。例えば、上記（ｄ３）のライトバックデータパケットと（ｄ４）の転送データパケットは、データパケットの例である。また、（ｄ１）のメモリアクセス要求パケットと（ｄ２）のデータ転送要求パケットは、要求パケットの例である。【０１３２】
また、制御部４００は、データパケット用のライトポインタ制御部４０６とリードポインタ制御部４０７を備え、要求パケット用のライトポインタ制御部４０８とリードポインタ制御部４０９を備える。【０１３３】
「リードポインタ」および「ライトポインタ」とは、データパケット保存部４１０および要求パケット保存部４２０内の番地を示すポインタである。ライトポインタは、次にパケットを保存する番地を表し、リードポインタは、次に読み出すパケットが保存されている番地を表す。【０１３４】
データパケット保存部４１０はデータパケットを一時的に保存するバッファであり、要求パケット保存部４２０は要求パケットを一時的に保存するバッファである。すなわち、上記の各図の説明における「バッファ」とは、データパケット保存部４１０と要求パケット保存部４２０であり、特に、上記の説明で注目したバッファの容量は、データペイロードを保存するだけの容量が要求されるデータパケット保存部４１０の容量である。データパケット保存部４１０と要求パケット保存部４２０には、例えばＲＡＭが用いられる。【０１３５】
また、データパケット保存部４１０と要求パケット保存部４２０におけるパケットのリード制御およびライト制御は、ＦＩＦＯアルゴリズムにしたがっている。よって、詳しくは図８とともに後述するが、ライトポインタ制御部４０６と４０８は、ＦＦ（Flip-Flop）を使ったカウンタによってライトポインタを管理することができる。同様に、詳しくは図９とともに後述するが、リードポインタ制御部４０７と４０９も、ＦＦを使ったカウンタによってリードポインタを管理することができる。【０１３６】
また、パケット間セレクタ４３０は、制御部４００の制御にしたがって、データパケット保存部４１０または要求パケット保存部４２０のいずれかを選択し、パケットをポート間セレクタ２０６ａへと出力する。【０１３７】
なお、以下では、データパケット保存部４１０および要求パケット保存部４２０内について、次の（ｇ１）〜（ｇ４）のように定める。
（ｇ１）１つのデータパケットを保存するのに必要な容量は最大Ｄバイトである。すなわち、データパケットは、Ｄバイトという固定長であるか、または、最長でＤバイトの可変長であることが仕様で決められている。【０１３８】
（ｇ２）データパケット保存部４１０内の番地は、Ｄバイトを１つのブロックとして、ブロックの番号により管理される。つまり、ライトポインタ制御部４０６が制御するライトポインタの値、およびリードポインタ制御部４０７が制御するリードポインタの値は、データパケット保存部４１０内のブロックの番号である。【０１３９】
（ｇ３）１つの要求パケットを保存するのに必要な容量は最大Ｒバイトである（Ｒ＜Ｄ）。すなわち、要求パケットは、Ｒバイトという固定長であるか、または、最長でＲバイトの可変長であることが仕様で決められている。【０１４０】
（ｇ４）要求パケット保存部４２０内の番地は、Ｒバイトを１つのブロックとして、ブロックの番号により管理される。つまり、ライトポインタ制御部４０８が制御するライトポインタの値、およびリードポインタ制御部４０９が制御するリードポインタの値は、要求パケット保存部４２０内のブロックの番号である。【０１４１】
以上、出力バッファ制御部２０７ｃａの構成について説明した。続いて、ルーティング部２０３から出力バッファ制御部２０７ｃａにパケットが出力されてから、出力バッファ制御部２０７ｃａがパケットをポート間セレクタ２０６ａへ出力するまでの動作を説明する。【０１４２】
まず、ルーティング部２０３が信号線４４１を介してパケットを出力バッファ制御部２０７ｃａに出力する。信号線４４１は、図７に示すように信号線４４２と信号線４４３に分岐しており、信号線４４２へはパケットが出力される。【０１４３】
また、ステップＳ４０１に示すように、信号線４４３へはパケットヘッダ内のパケットタイプフィールドが出力される。すると、信号線４４３の接続先であるエンコーダ４０５は、パケットタイプフィールドの値に基づいて、ルーティング部２０３から入力されたパケットがデータパケットであるか要求パケットであるかを判別する。【０１４４】
ステップＳ４０１においてパケットがデータパケットであると判明した場合の動作は下記ステップＳ４０２ｄ〜Ｓ４０６ｄのとおりである。
エンコーダ４０５は、ステップＳ４０２ｄに示すように、データパケット用のライトポインタ制御部４０６にＶＡＬＩＤ信号を出力する。以下、説明の便宜上ＶＡＬＩＤ信号は正論理であるとすると、ステップＳ４０２ｄにおいてエンコーダ４０５は、ライトポインタ制御部４０６に論理値１の信号を出力する。なお、この場合、エンコーダ４０５は、要求パケット用のライトポインタ制御部４０８には、無効を示す論理値０を出力する。【０１４５】
ＶＡＬＩＤ信号を受け取ったライトポインタ制御部４０６は、次のステップＳ４０３ｄにおいて、データパケット保存部４１０へライト指示とライトポインタ値を出力し、ライトポインタ値を更新する。また、論理値０が入力されたライトポインタ制御部４０８は、ライトポインタ値を更新せず、従前のライトポインタ値を保持する。  なお、データパケット保存部４１０への「ライト指示」とは、信号線４４２を介して入力されるパケットを、ライトポインタ値により示されるデータパケット保存部４１０内の番地に書き込むことの指示である。以下では、説明の便宜上、ライト指示も正論理であるとする。すなわち、論理値１はライト指示がアサートされていることを示し、論理値０はライト指示がネゲートされていることを示すものとする。【０１４６】
ここで、ステップＳ４０３ｄの動作をより詳細に説明するため、図８を参照する。図８は、ライトポインタ制御部４０６の構成図である。
図８に示すように、ライトポインタ制御部４０６はライトポインタ値を格納するＦＦ４５１を備える。ＦＦ４５１は、エンコーダ４０５から入力されるＶＡＬＩＤ信号をカウントイネーブル信号として用いるカウンタ回路である。ＦＦ４５１のビット数は、上記（ｇ２）で説明したデータパケット保存部４１０のブロックの番号の最大値による。また、ライトポインタ制御部４０６はエンコーダ４０５から入力された信号そのものをデータパケット保存部４１０に出力する。【０１４７】
すなわち、ステップＳ４０２ｄでエンコーダ４０５からＶＡＬＩＤ信号として論理値１が入力されると、ステップＳ４０３ｄでライトポインタ制御部４０６は、入力された論理値１をそのままライト指示としてデータパケット保存部４１０に出力する。また、ライトポインタ制御部４０６は、ＦＦ４５１が保持するライトポインタ値をデータパケット保存部４１０に出力する。その後、ライトポインタ制御部４０６は、カウントイネーブル信号としてのＶＡＬＩＤ信号にしたがって、ＦＦ４５１が保持する値を１増やす。【０１４８】
逆に、もしエンコーダ４０５から論理値０が入力されれば、ライトポインタ制御部４０６は論理値０をそのままデータパケット保存部４１０に出力し、ＦＦ４５１はカウントアップ動作を行わない。【０１４９】
ここで図７の説明に戻ると、データパケット保存部４１０はステップＳ４０４ｄにおいて次のように動作する。すなわち、データパケット保存部４１０は、ステップＳ４０３ｄで受けたライト指示にしたがい、信号線４４２を介して入力されるデータパケットを、ステップＳ４０３ｄで入力されたライトポインタ値で示される番地に保存する。【０１５０】
また、ステップＳ４０５ｄとして示すように、ライトポインタ制御部４０６は、ステップＳ４０３ｄで更新したライトポインタ値をパケット間アービタ部４０１内の比較器４０３に出力する。なお、ステップＳ４０４ｄとＳ４０５ｄは、同時に並行して行われてもよい。【０１５１】
また、図７に示すようにリードポインタ制御部４０７も比較器４０３に接続されており、リードポインタ制御部４０７が保持するリードポインタが前回更新されたときに比較器４０３にはリードポインタ値が入力されている。【０１５２】
そこで、ステップＳ４０６ｄにおいて比較器４０３は、ライトポインタ制御部４０６から入力されたライトポインタ値と、リードポインタ制御部４０７から入力されたリードポインタ値を比較する。【０１５３】
比較した結果、ライトポインタ値とリードポインタ値が一致した場合は、ポート間セレクタ２０６ａへの出力を待つためにデータパケット保存部４１０に保存されているデータパケットは存在しない。したがって、比較器４０３は、パケット間アービタ４０２へ出力リクエストを出力しない。換言すれば、比較器４０３は、出力リクエストをネゲート（negate）する。【０１５４】
逆に、ライトポインタ値とリードポインタ値が不一致だった場合は、ポート間セレクタ２０６ａへの出力を待つためにデータパケット保存部４１０に保存されているデータパケットが存在する。したがって、比較器４０３は、パケット間アービタ４０２へ出力リクエストを出力（すなわちアサート（assert））する。【０１５５】
以上説明したステップＳ４０２ｄ〜Ｓ４０６ｄは、ステップＳ４０１においてパケットがデータペイロードを有するデータパケットであると判明した場合の動作である。逆に、ステップＳ４０１においてパケットがデータペイロードを有さない要求パケットであると判明した場合の動作は、次のステップＳ４０２ｒ〜Ｓ４０６ｒのとおりである。ステップＳ４０２ｒ〜Ｓ４０６ｒはステップＳ４０２ｄ〜Ｓ４０６ｄと類似なので、簡単に説明する。【０１５６】
ステップＳ４０１においてパケットが要求パケットであると判明すると、エンコーダ４０５は、ステップＳ４０２ｒに示すように、要求パケット用のライトポインタ制御部４０８にＶＡＬＩＤ信号を出力するとともに、データパケット用のライトポインタ制御部４０６には無効を示す論理値０を出力する。【０１５７】
ＶＡＬＩＤ信号を受け取ったライトポインタ制御部４０８は、次のステップＳ４０３ｒにおいて、要求パケット保存部４２０へライト指示とライトポインタ値を出力し、ライトポインタ値を更新する。ライトポインタ制御部４０８も、図８のライトポインタ制御部４０６と同様に構成されている。【０１５８】
そして、次のステップＳ４０４ｒにおいて、要求パケット保存部４２０は、ステップＳ４０３ｒで受けたライト指示にしたがい、信号線４４２を介して入力される要求パケットを、ステップＳ４０３ｒで入力されたライトポインタ値で示される番地に保存する。【０１５９】
また、ステップＳ４０５ｒとして示すように、ライトポインタ制御部４０８は、更新後のライトポインタ値を比較器４０４に出力する。ステップＳ４０４ｒとＳ４０５ｒは並行して行われてもよい。【０１６０】
そして、ステップＳ４０６ｒにおいて比較器４０４は、ライトポインタ制御部４０８から入力されたライトポインタ値と、リードポインタ制御部４０９から入力されたリードポインタ値を比較する。両者が一致した場合は、比較器４０４はパケット間アービタ４０２へ出力リクエストを出力せず、不一致の場合は、比較器４０４はパケット間アービタ４０２への出力リクエストを発行する。【０１６１】
パケット間アービタ４０２は、ステップＳ４０６ｄまたはＳ４０６ｒにおいて出力リクエストを受けた場合、続くステップＳ４０７においてポート間アービタ部２０５ａへ出力リクエストを出力する。【０１６２】
なお、比較器４０３と比較器４０４の双方から出力リクエストが出力されている場合、パケット間アービタ４０２は、ＬＲＵアルゴリズムやラウンドロビンアルゴリズムなどによる調停を行う。パケット間アービタ４０２は、調停の結果、どちらの出力リクエストを先にポート間アービタ部２０５ａへ出力するかを決定し、出力リクエストをポート間アービタ部２０５ａへ出力する。【０１６３】
図５に関して説明したように、ポート間アービタ部２０５ａは、出力バッファ制御部２０７ｃａ、２０７ｅａ、および２０７ｇａからの出力リクエストを調停する。調停の結果、ステップＳ４０８でポート間アービタ部２０５ａが出力バッファ制御部２０７ｃａに対して出力許可を通知する。【０１６４】
すると、ステップＳ４０７でデータパケット用の比較器４０３からの出力リクエストが選択されてポート間アービタ部２０５ａに出力された場合は、出力バッファ制御部２０７ｃａは、以下のステップＳ４０９ｄ〜Ｓ４１２ｄのように動作する。また、ステップＳ４０７で要求パケット用の比較器４０４からの出力リクエストが選択されてポート間アービタ部２０５ａに出力された場合は、出力バッファ制御部２０７ｃａは、以下のステップＳ４０９ｒ〜Ｓ４１２ｒのように動作する。【０１６５】
すなわち、ステップＳ４０９ｄでパケット間アービタ４０２は、データパケットを出力するよう指示する出力パケットタイプ選択信号をパケット間セレクタ４３０へ出力する。例えば、出力パケットタイプ選択信号は２ビットで表され、当該２ビットがデコードされることにより、「１０」はデータパケットを出力することを示し、「０１」は要求パケットを出力することを示し、「００」はどちらの種類のパケットも出力しないことを示し、「１１」はドントケア（don’t care）として使われない。もちろん、出力パケットタイプ選択信号は他の形式でもよい。【０１６６】
また、ステップＳ４０９ｄでパケット間アービタ４０２は、データパケット用のリードポインタ制御部４０７に対してリードポインタ更新指示を出力する。なお、説明の便宜上、以下ではリードポインタ更新指示も正論理であるとする。【０１６７】
ここで、ステップＳ４０９ｄの動作をより詳細に説明するため、図９を参照する。図９はリードポインタ制御部４０７の構成図である。
図９に示すように、リードポインタ制御部４０７はリードポインタ値を格納するＦＦ４５２を備える。ＦＦ４５２は、パケット間アービタ４０２から入力されるリードポインタ更新指示をカウントイネーブル信号として用いるカウンタ回路である。ＦＦ４５２のビット数も、上記（ｇ２）で説明したデータパケット保存部４１０のブロックの番号の最大値を表現できるだけのビット数が必要とされる。また、リードポインタ制御部４０７は、パケット間アービタ４０２から入力された信号そのものをデータパケット保存部４１０に出力する。【０１６８】
以下、図９と図７の双方を参照しながらステップＳ４０９ｄ〜Ｓ４１１ｄについて説明する。ステップＳ４０９ｄでリードポインタ更新指示として論理値１が入力されると、ステップＳ４１０ｄでリードポインタ制御部４０７は、入力された論理値１をそのままリード指示としてデータパケット保存部４１０に出力する。また、リードポインタ制御部４０７は、ＦＦ４５２が保持するリードポインタ値をデータパケット保存部４１０に出力する。その後、リードポインタ制御部４０７は、カウントイネーブル信号としてのリードポインタ更新指示にしたがって、ＦＦ４５２が保持する値を１増やす。【０１６９】
逆に、もしパケット間アービタ４０２から論理値０が入力されれば、リードポインタ制御部４０７は論理値０をそのままデータパケット保存部４１０に出力し、ＦＦ４５２はカウントアップ動作を行わない。【０１７０】
ステップＳ４１０ｄでリードポインタ値を更新した場合、リードポインタ制御部４０７は、続くステップＳ４１１ｄにおいて、更新したリードポインタ値をパケット間アービタ部４０１内の比較器４０３に出力する。さらに、ステップＳ４１２ｄにおいてデータパケット保存部４１０は、ステップＳ４１０ｄで受けたリード指示にしたがい、ステップＳ４１０ｄで入力されたリードポインタ値が示す番地に保存しているデータパケットをパケット間セレクタ４３０に出力する。【０１７１】
なお、ステップＳ４１１ｄとＳ４１２ｄは、並行して行われてもよい。また、リードポインタ値が更新されなかった場合は、リード指示がアサートされないので、ステップＳ４１２ｄは行われない。【０１７２】
以上説明したステップＳ４０９ｄ〜Ｓ４１２ｄは、ステップＳ４０７でデータパケット用の比較器４０３からの出力リクエストが選択された場合の動作である。逆に、ステップＳ４０７で要求パケット用の比較器４０４からの出力リクエストが選択された場合の動作は、次のステップＳ４０９ｒ〜Ｓ４１２ｒのとおりである。ステップＳ４０９ｒ〜Ｓ４１２ｒはステップＳ４０９ｄ〜Ｓ４１２ｄと類似なので、簡単に説明する。【０１７３】
ステップＳ４０９ｒでパケット間アービタ４０２は、要求パケットを出力するよう指示する出力パケットタイプ選択信号（上記に例示した形式では「０１」）をパケット間セレクタ４３０へ出力する。また、パケット間アービタ４０２は、要求パケット用のリードポインタ制御部４０９に対してリードポインタ更新指示を出力する。リードポインタ制御部４０９も図９のリードポインタ制御部４０７と同様に構成されている。【０１７４】
ステップＳ４０９ｒでリードポインタ更新指示として論理値１が入力されると、ステップＳ４１０ｒでリードポインタ制御部４０９は、入力された論理値１をそのままリード指示として要求パケット保存部４２０に出力する。また、リードポインタ制御部４０９は、リードポインタ値を要求パケット保存部４２０に出力し、リードポインタ値を１増やす。【０１７５】
逆に、もしパケット間アービタ４０２から論理値０が入力されれば、リードポインタ制御部４０９は論理値０をそのまま要求パケット保存部４２０に出力し、リードポインタの更新は行わない。【０１７６】
ステップＳ４１０ｒでリードポインタ値を更新した場合、リードポインタ制御部４０９は、続くステップＳ４１１ｒにおいて、更新したリードポインタ値をパケット間アービタ部４０１内の比較器４０４に出力する。さらに、ステップＳ４１２ｒにおいて要求パケット保存部４２０は、ステップＳ４１０ｒで受けたリード指示にしたがい、ステップＳ４１０ｒで入力されたリードポインタ値が示す番地に保存している要求パケットをパケット間セレクタ４３０に出力する。【０１７７】
なお、ステップＳ４１１ｒとＳ４１２ｒは、並行して行われてもよい。また、リードポインタ値が更新されなかった場合は、リード指示がアサートされないので、ステップＳ４１２ｒは行われない。【０１７８】
以上のようにして、ステップＳ４０９ｄ〜Ｓ４１２ｄまたはステップＳ４０９ｒ〜Ｓ４１２ｒが実行されると、ステップＳ４１３においてパケット間セレクタ４３０は次のように動作する。すなわち、パケット間セレクタ４３０は、ステップＳ４０９ｄまたはＳ４０９ｒで入力された出力パケットタイプ選択信号にしたがって、データパケット保存部４１０または要求パケット保存部４２０からの出力を選択し、ポート間セレクタ２０６ａへとパケットを出力する。【０１７９】
以上、図５〜図９を参照して、比較例におけるＸＢ１０２の詳細について説明した。
なお、図７のデータパケット保存部４１０には、例えば次のような場合に、同じデータペイロードを有するライトバックデータパケットと共有型・転送データパケットが保存される場合がある。すなわち、図１のＣＰＵ１０４ａがメインメモリ１０５ａに格納されたデータを要求するため、共有型・メモリアクセス要求パケットを出力し、要求されたデータがＣＰＵ１０４ｃにキャッシュされていると判明した場合である。【０１８０】
この場合、ライトバックデータパケットと共有型・転送データパケットの双方がＣＰＵ１０４ｃから出力され、同じノード１０１ａに属するＣＰＵ１０４ａとＳＣ１０３ａにそれぞれルーティングされる。よって、図７の出力バッファ制御部２０７ｃａ内のデータパケット保存部４１０は、同じデータペイロードを有する２つのパケットを保存する可能性がある。【０１８１】
続いて、図１０と図１１を参照して、比較例におけるＳＣ１０３ｃの詳細について説明する。
図１０は、図１に示したＳＣ１０３ｃの比較例における構成図である。図示は省略したが、他のＳＣ１０３ａ、１０３ｅ、および１０３ｇもＳＣ１０３ｃと同様の構成である。【０１８２】
図１０に示したように、ＳＣ１０３ｃは、バス１０８ｃを介してＸＢ１０２と接続されている。さらに、ＳＣ１０３ｃは、ノード１０１ｃ内のＣＰＵ１０４ｃ、ＣＰＵ１０４ｄ、メインメモリ１０５ｃ、ディレクトリ１０６ｃ、およびＩＯＣ１０７ｃとも、ノード１０１ｃ内のバスを介して接続されている。ＳＣ１０３ｃは、ノード１０１ｃ内のコンポーネントと、他のＳＣ１０３ａ、１０３ｅ、および１０３ｇとの間でのパケット形式のデータの伝送を制御する。【０１８３】
ＳＣ１０３ｃは、ＸＢ１０２、ＣＰＵ１０４ｃ、ＣＰＵ１０４ｄ、メインメモリ１０５ｃ、ディレクトリ１０６ｃ、ＩＯＣ１０７ｃそれぞれからのパケットをそれぞれ受け取る入力ポート５０１ｘ、５０１ｃ、５０１ｄ、５０１ｍ、５０１ｒ、および５０１ｉを備える。【０１８４】
また、ＳＣ１０３ｃは、ＸＢ１０２、ＣＰＵ１０４ｃ、ＣＰＵ１０４ｄ、メインメモリ１０５ｃ、ディレクトリ１０６ｃ、ＩＯＣ１０７ｃそれぞれへとパケットを出力する出力ポート５０２ｘ、５０２ｃ、５０２ｄ、５０２ｍ、５０２ｒ、および５０２ｉを備える。【０１８５】
以上の入力ポート５０１ｘ〜５０１ｉと出力ポート５０２ｘ〜５０２ｉは、必要に応じて、各コンポーネントの動作周波数の違いを吸収するための周波数の変換処理を行う。
また、ＳＣ１０３ｃは、互いに接続されたメモリアクセス制御装置であるＭＡＣ（Memory Access Controller）５０３とＳＣ内制御回路５０４を備え、メインメモリ１０５ｃへのアクセスを制御する。ＭＡＣ５０３はさらに入力ポート５０１ｍと出力ポート５０２ｍにも接続されている。また、ＳＣ内制御回路５０４は入力ポート５０１ｒと出力ポート５０２ｒにも接続されている。【０１８６】
ＳＣ内制御回路５０４は、メインメモリ１０５ｃへのメモリアクセス要求を受けた際のキャッシュコンシステンシ制御を行う。キャッシュコンシステンシ制御は、ＭＥＳＩプロトコルなどの予め定められたキャッシュプロトコルにしたがって行われる。また、ＳＣ内制御回路５０４は、キャッシュコンシステンシ制御のため、ディレクトリ１０６ｃの参照と更新も制御している。【０１８７】
なお、ＳＣ内制御回路５０４は、同じノード１０１ｃ内のＣＰＵ１０４ｃ、ＣＰＵ１０４ｄ、またはＩＯＣ１０７ｃからメモリアクセス要求を受けることもある。また、ＳＣ内制御回路５０４は、ＸＢ１０２を介して他のノード１０１ａ、１０１ｅ、または１０１ｇ内のコンポーネントから、メモリアクセス要求を受けることもある。【０１８８】
図１１は、比較例におけるディレクトリ１０６ｃの例を示す図である。ディレクトリ１０６ｃは、同じノード１０１ｃ内のメインメモリ１０５ｃを管理するデータ構造であり、ＳＣ内制御回路５０４がメインメモリ１０５ｃのキャッシュコンシステンシ制御を行う際に用いられる。【０１８９】
図１１ではディレクトリ１０６ｃをテーブル形式で表している。また、ディレクトリ１０６ｃの各エントリは、アドレスと所有者とステートの組である。
図１１の左列の「アドレス」は、メインメモリ１０５ｃ内のアドレスである。【０１９０】
図１１の中列の「所有者」は、そのアドレスで示されるメインメモリ１０５ｃ内のブロックのデータを、キャッシュラインとしてキャッシュメモリに保持しているＣＰＵのＩＤである。【０１９１】
図１１の右列の「ステート」は、「所有者」が保持するメモリデータのステートである。キャッシュプロトコルによって、例えば上記（ｂ１）〜（ｂ５）に例示した各種ステートのいずれかが、「ステート」を表すのに用いられる。【０１９２】
ここで図１０の説明に戻ると、ＭＡＣ５０３は、ＳＣ内制御回路５０４から出力されるメモリアクセス要求に基づいて、実際にメインメモリ１０５ｃへデータを書き込んだり、メインメモリ１０５ｃからデータを読み出したりする制御を行う。【０１９３】
また、ＳＣ１０３ｃはルーティング部５０５を備える。ルーティング部５０５は、図５および図６に示したＸＢ１０２のルーティング部２０３と同様に、パケットの振り分けを行う。ルーティング部５０５は、入力ポート５０１ｘ、５０１ｃ、５０１ｄ、および５０１ｉ、ならびにＳＣ内制御回路５０４と接続されている。【０１９４】
また、ＳＣ１０３ｃは、入力ポート５０１ｘ、５０１ｃ、５０１ｄ、および５０１ｉ、ならびにＳＣ内制御回路５０４にそれぞれ接続されているルーティングテーブル部５０６ｘ、５０６ｃ、５０６ｄ、５０６ｉ、および５０６ｓを備える。ルーティングテーブル部５０６ｘ、５０６ｃ、５０６ｄ、５０６ｉ、および５０６ｓの各々は、ルーティング部５０５とも接続されている。各ルーティングテーブル部５０６ｘ、５０６ｃ、５０６ｄ、５０６ｉ、および５０６ｓの詳細は、図６のルーティングテーブル部２０４ｃと同様なので、詳しい説明は省略する。【０１９５】
また、ＳＣ１０３ｃは、出力ポート５０２ｘ、５０２ｃ、５０２ｄ、および５０２ｉ、ならびにＳＣ内制御回路５０４にそれぞれ対応した５組の回路を備える。５組の回路は、５つのコンポーネント（すなわち、出力ポート５０２ｘ、５０２ｃ、５０２ｄ、および５０２ｉ、ならびにＳＣ内制御回路５０４）の前段にそれぞれ設けられている。【０１９６】
例えば、出力ポート５０２ｘの前段に設けられた１組の回路は、ポート間アービタ部５０７ｘと、ポート間セレクタ５０８ｘと、出力バッファ制御部５０９ｃｘ、５０９ｄｘ、５０９ｉｘ、および５０９ｓｘを含む。他の４つのコンポーネントの前段に設けられた回路も、出力ポート５０２ｘの前段に設けられた上記の回路と同様である。【０１９７】
ポート間アービタ部５０７ｘは、ＸＢ１０２に備えられた図５のポート間アービタ部２０５ａと同様である。すなわち、ポート間アービタ部５０７ｘは、出力バッファ制御部５０９ｃｘ、５０９ｄｘ、５０９ｉｘ、および５０９ｓｘと接続され、これらの出力バッファ制御部５０９ｃｘ、５０９ｄｘ、５０９ｉｘ、および５０９ｓｘからの出力リクエストを調停する。【０１９８】
また、ポート間セレクタ５０８ｘは、ＸＢ１０２に備えられた図５のポート間セレクタ２０６ａと同様である。すなわち、ポート間セレクタ５０８ｘは、ポート間アービタ部５０７ｘから通知される調停の結果にしたがい、選択された出力バッファ制御部５０９ｃｘ、５０９ｄｘ、５０９ｉｘ、または５０９ｓｘから出力されるパケットを出力ポート５０２ｘへと出力する。【０１９９】
なお、出力バッファ制御部５０９ｃｘには、ＣＰＵ１０４ｃから入力ポート５０１ｃが受け取ったパケットが、ルーティング部５０５を介して入力される。同様に、出力バッファ制御部５０９ｄｘには、ＣＰＵ１０４ｄから入力ポート５０１ｄが受け取ったパケットが、ルーティング部５０５を介して入力される。【０２００】
また、出力バッファ制御部５０９ｉｘには、ＩＯＣ１０７ｃから入力ポート５０１ｉが受け取ったパケットが、ルーティング部５０５を介して入力される。そして、出力バッファ制御部５０９ｓｘには、メインメモリ１０５ｃから入力ポート５０１ｍ、ＭＡＣ５０３、ＳＣ内制御回路５０４、およびルーティング部５０５を介して到着したパケットが入力される。【０２０１】
以上の出力バッファ制御部５０９ｃｘ、５０９ｄｘ、５０９ｉｘ、および５０９ｓｘの詳細は、図７に示したＸＢ１０２内の出力バッファ制御部２０７ｃａと同様であるので説明を省略する。また、以下では、例えば出力バッファ制御部５０９ｃｘ内の各コンポーネントについても、図７の出力バッファ制御部２０７ｃａ内の各コンポーネントと同じ参照符号を用いる。【０２０２】
以上、図１における各コンポーネントの内部について、図５〜図１１を参照して詳細に説明した。
続いて、図４と同じキャッシュプロトコルが採用され、図４のステップＳ３０４とＳ３０５が行われるときの、比較例における出力バッファ制御部５０９ｃｘの動作について図１２と図１３をそれぞれ参照して詳しく説明する。【０２０３】
図４に関して説明したように、ＳＣ１０３ｃが同じノード１０１ｃ内のＣＰＵ１０４ｃ〜１０４ｄへ出力するデータ転送要求パケットの最大アウトスタンディング数をＰとする。すると、少なくとも２Ｐ個のデータパケットを保存する容量のバッファが出力バッファ制御部５０９ｃｘと５０９ｄｘのそれぞれに必要である。【０２０４】
換言すれば、図７と同様に構成されている出力バッファ制御部５０９ｃｘにおいて、データパケット保存部４１０は、上記（ｇ２）で述べたＤバイトのブロックを少なくとも２Ｐ個含む。図１２と図１３は、データパケット保存部４１０が少なくとも２Ｐ個のブロックを含む必要があることを説明している。【０２０５】
図１２は、本比較例において、ＣＰＵ１０４ｃが図４のステップＳ３０４でライトバックデータパケットをＳＣ１０３ｃに出力したときの、ＳＣ１０３ｃ内の出力バッファ制御部５０９ｃｘの動作を説明する図である。また、図１３は、本比較例において、ＣＰＵ１０４ｃが図４のステップＳ３０５で転送データパケットをＳＣ１０３ｃに出力したときの、ＳＣ１０３ｃ内の出力バッファ制御部５０９ｃｘの動作を説明する図である。【０２０６】
なお、上記のように出力バッファ制御部５０９ｃｘは図７の出力バッファ制御部２０７ｃａと同様に構成されている。そこで、図１２および図１３においては、出力バッファ制御部５０９ｃｘ内部のコンポーネントのうち、ステップＳ３０４とＳ３０５に関連するもののみを抜粋して図示し、他のコンポーネントは省略している。【０２０７】
また、図１２のステップＳ５０１〜Ｓ５０７は、図７で出力バッファ制御部２０７ｃに関して説明したステップＳ４０１、Ｓ４０２ｄ〜Ｓ４０６ｄ、およびＳ４０７にとそれぞれ同様である。【０２０８】
さて、図４のステップＳ３０４においてＣＰＵ１０４ｃは、ＳＣ１０３ｅを宛先とするライトバックデータパケット６０１をＳＣ１０３ｃに出力する。すると、ＳＣ１０３ｃは図１０の入力ポート５０１ｃでライトバックデータパケット６０１を受け取る。【０２０９】
ライトバックデータパケット６０１の宛先はＳＣ１０３ｅであり、ＳＣ１０３ｅはＳＣ１０３ｃとは別のノード１０１ｅにある。よって、図１０のルーティングテーブル部５０６ｃは、ＸＢ１０２に対応する出力ポート５０２ｘを示す出力ポート情報をルーティング部５０５に通知する。通知にしたがい、ルーティング部５０５は、ライトバックデータパケット６０１を出力ポート５０２ｘの前段の出力バッファ制御部５０９ｃｘに出力する。【０２１０】
すると、図１２のステップＳ５０１では、信号線４４３を介してライトバックデータパケット６０１のパケットタイプフィールド６０２がエンコーダ４０５に出力される。
ライトバックデータパケット６０１はデータパケットの一種なので、エンコーダ４０５は、続くステップＳ５０２において、データパケット用のライトポインタ制御部４０６にＶＡＬＩＤ信号を出力する。【０２１１】
以下、説明の便宜上、ライトバックデータパケット６０１が出力バッファ制御部５０９ｃｘに出力された時点においてライトポインタ制御部４０６内のＦＦ４５１が保持するライトポインタの値が「００００」であるとする。同様に、説明の便宜上、ライトバックデータパケット６０１が出力バッファ制御部５０９ｃｘに出力された時点においてリードポインタ制御部４０７内のＦＦ４５２が保持するリードポインタの値も「００００」であるとする。【０２１２】
ＶＡＬＩＤ信号を受け取ったライトポインタ制御部４０６は、次のステップＳ５０３において、データパケット保存部４１０へライト指示と「００００」というライトポインタ値を出力し、ライトポインタ値を「０００１」へと更新する。【０２１３】
すると、ステップＳ５０４においてデータパケット保存部４１０は、信号線４４２を介して入力されるライトバックデータパケット６０１を、ライト指示にしたがい、ステップＳ５０３で入力された「００００」という番地に保存する。【０２１４】
また、ステップＳ５０５においてライトポインタ制御部４０６は、ステップＳ５０３での更新後の新たな「０００１」というライトポインタ値を、パケット間アービタ部４０１内の比較器４０３に出力する。また、上記で仮定した「００００」という値のリードポインタ値も、比較器４０３には出力されている。【０２１５】
そして、ステップＳ５０６で比較器４０３は、データパケット用のライトポインタ値「０００１」とリードポインタ値「００００」を比較する。比較した結果、２つの値は不一致であるため、比較器４０３はパケット間アービタ４０２へ出力リクエストを出力する。【０２１６】
そして、ステップＳ５０７でパケット間アービタ４０２は、ポート間アービタ部５０７ｘへと出力リクエストを出力する。図１２の例では、すぐにはポート間アービタ部５０７ｘから出力許可が下りず、しばらくパケット間アービタ４０２は、ポート間アービタ部５０７ｘへ出力リクエストを出力した状態のまま、出力許可を待っているものとする。【０２１７】
次に、図１３を参照して、ＣＰＵ１０４ｃが図４のステップＳ３０５で転送データパケットをＳＣ１０３ｃに出力したときの、ＳＣ１０３ｃ内の出力バッファ制御部５０９ｃｘの動作を説明する。なお、図１３におけるステップ５０８〜Ｓ５１４も、図７のステップＳ４０１、Ｓ４０２ｄ〜Ｓ４０６ｄ、およびＳ４０７とそれぞれ同様である。【０２１８】
また、図１２と図１３に示した例においては、ステップＳ５０８は、ステップＳ５０１の後に実行されるが、必ずしもステップＳ５０２〜Ｓ５０７の後に実行されるとは限らない。例えば、ステップＳ５０２をエンコーダ４０５が実行するのと並行して、ステップＳ５０８が実行されることもありうる。【０２１９】
さて、図４のステップＳ３０５においてＣＰＵ１０４ｃは、ＣＰＵ１０４ａを宛先とする共有型・転送データパケット６０３をＳＣ１０３ｃに出力する。すると、ＳＣ１０３ｃは図１０の入力ポート５０１ｃで共有型・転送データパケット６０３を受け取る。【０２２０】
共有型・転送データパケット６０３の宛先はＣＰＵ１０４ａであり、ＣＰＵ１０４ａはＳＣ１０３ｃとは別のノード１０１ａにある。よって、図１０のルーティングテーブル部５０６ｃは、ＸＢ１０２に対応する出力ポート５０２ｘを示す出力ポート情報をルーティング部５０５に通知する。通知にしたがい、ルーティング部５０５は、共有型・転送データパケット６０３を出力ポート５０２ｘの前段の出力バッファ制御部５０９ｃｘに出力する。【０２２１】
すると、図１３のステップＳ５０８では、信号線４４３を介して共有型・転送データパケット６０３のパケットタイプフィールド６０４がエンコーダ４０５に出力される。
共有型・転送データパケット６０３はデータパケットの一種なので、エンコーダ４０５は、続くステップＳ５０９において、データパケット用のライトポインタ制御部４０６にＶＡＬＩＤ信号を出力する。【０２２２】
ライトバックデータパケット６０１と共有型・転送データパケット６０３の間にＣＰＵ１０４ｃは他のパケットを出力しなかったものとすると、ステップＳ５０９の時点でライトポインタ制御部４０６が管理するライトポインタ値は「０００１」であり、リードポインタ制御部４０７が管理するリードポインタ値は「００００」である。【０２２３】
ＶＡＬＩＤ信号を受け取ったライトポインタ制御部４０６は、次のステップＳ５１０において、データパケット保存部４１０へライト指示と「０００１」というライトポインタ値を出力し、ライトポインタ値を「０００２」へと更新する。【０２２４】
すると、ステップＳ５１１においてデータパケット保存部４１０は、信号線４４２を介して入力される共有型・転送データパケット６０３を、ライト指示にしたがい、ステップＳ５１０で入力された「０００１」という番地に保存する。【０２２５】
また、ステップＳ５１２においてライトポインタ制御部４０６は、ステップＳ５１０での更新後の新たな「０００２」というライトポインタ値を、比較器４０３に出力する。
ステップＳ５１３において比較器４０３は、データパケット用のライトポインタ値「０００２」とリードポインタ値「００００」を比較し、２つの値が不一致であるため、新たな出力リクエストをパケット間アービタ４０２へ出力する。【０２２６】
ここで、図１２のステップＳ５０７の出力リクエストへの出力許可がまだ下りていないとすると、パケット間アービタ４０２は、ポート間アービタ部５０７ｘへ出力リクエストの信号を出力したままである。よって、ステップＳ５１４でもパケット間アービタ４０２は、出力リクエストをアサートした状態を保つ。【０２２７】
以上、図１２と図１３を参照して説明したとおり、上記比較例においては、ライトバックデータパケット６０１と共有型・転送データパケット６０３の双方をデータパケット保存部４１０が保存する必要が生じることがある。【０２２８】
ここで、ライトバックデータパケット６０１と共有型・転送データパケット６０３のデータペイロードは、図４の説明から明らかなとおり、同じである。また、一般にはパケットのヘッダよりもデータペイロードの方が長い。つまり、図１２と図１３の例では、番地「００００」と番地「０００１」に、大部分が重複する２つのパケットが保存されることになり、バッファの使用効率が悪い。【０２２９】
具体的には、出力バッファ制御部５０９ｃｘ内のパケット間アービタ４０２がポート間アービタ部５０７ｘに出力リクエストを出力してから、ポート間アービタ部５０７ｘが出力許可をアサートするまでの時間が長いと、上記のような重複した保存の必要が生じる。出力許可が得られるまでの時間は動的に決まるので、出力バッファ制御部５０９ｃｘの設計においては最悪のケースを想定する必要がある。つまり、出力バッファ制御部５０９ｃｘのデータパケット保存部４１０には、上記のとおり少なくともＤバイト×２Ｐブロックの容量が必要である。【０２３０】
また、図４ではステップＳ３０１においてＣＰＵ１０４ａがメインメモリ１０５ｅに格納されたデータを要求しているが、ＣＰＵ１０４ｅがメインメモリ１０５ｅに格納されたデータを要求する場合もありうる。その場合、データをキャッシュメモリに保存しているＣＰＵ１０４ｃが、ＳＣ１０３ｅを宛先とするライトバックデータパケットと、ＣＰＵ１０４ｅを宛先とする共有型・転送データパケットの双方を出力する。【０２３１】
ここで、データペイロードが共通する２つのパケットの宛先は、いずれもノード１０１ｅ内のコンポーネントである。したがって、ライトバックデータパケットと共有型・転送データパケットの双方は、ＣＰＵ１０４ｃからＳＣ１０３ｅへと至る同じ経路を通る。【０２３２】
この経路上では、ＳＣ１０３ｃ内においてＸＢ１０２に接続された出力ポート５０２ｘの前段のポート間アービタ部５０７ｘや、ＸＢ１０２内においてＳＣ１０３ｅに接続された出力ポート２０２ｅの前段のポート間アービタ部２０５ｅにおいて調停が行われる。調停の結果によっては、ＸＢ１０２においてもライトバックデータパケットと共有型・転送データパケットを同時にバッファリングする必要が生じる。【０２３３】
つまり、ＳＣ１０３ｅに接続された出力ポート２０２ｅの前段の出力バッファ制御部２０７ｃｅ内のデータパケット保存部４１０が、ライトバックデータパケットと共有型・転送データパケットの双方を保存する必要が生じることがある。【０２３４】
つまり、本比較例においては、ＳＣ１０３ａ〜１０３ｇとＸＢ１０２がそれぞれ備える出力バッファ制御部は、同じデータペイロードを有する２つのパケットを重複して保存する必要が生じる可能性がある。【０２３５】
そこで、上記のようなライトバックデータパケット６０１と共有型・転送データパケット６０３の重複した保存の必要をなくせば、バッファ（つまりデータパケット保存部４１０）の実装面積や消費電力の削減が可能となる。その結果、サーバシステム１００全体の性能も向上する。【０２３６】
以下では、ＳＣ１０３ａ〜１０３ｇとＸＢ１０２がそれぞれ備える出力バッファ制御部に必要なバッファ容量を上記比較例よりも削減した第１実施形態について、図１４〜図２９を参照して説明する。【０２３７】
第１実施形態においても、上記比較例と同様、図１のサーバシステム１００を例として説明する。また、上記比較例との共通点については、適宜説明を省略する。以下では第１実施形態について、まず図１４を参照して図４と比較しながら動作の概要を説明した後、図１５と図１６を参照して、比較例と異なるコンポーネントの概要を説明する。その後、図１７〜図２９を参照して第１実施形態の詳細について説明する。【０２３８】
図１４は、第１実施形態によるサーバシステム１００の動作の概要を示す図である。図１４のサーバシステム１００も、図４と同様のキャッシュプロトコルにしたがって動作し、図１４のステップＳ６０１〜Ｓ６０３は図４のステップＳ３０１〜Ｓ３０３と同様である。【０２３９】
すなわち、ステップＳ６０１において、ＣＰＵ１０４ａは、メインメモリ１０５ｅに格納されたデータを要求するため、ＳＣ１０３ｅを宛先とする共有型・メモリアクセス要求パケットを発行する。すると、共有型・メモリアクセス要求パケットは、ＳＣ１０３ａとＸＢ１０２を介して、ＳＣ１０３ｅに送信される。【０２４０】
続くステップＳ６０２において、共有型・メモリアクセス要求パケットを受信したＳＣ１０３ｅは、ディレクトリ１０６ｅを参照し、要求されたデータを含むキャッシュラインをキャッシュメモリに保持しているＣＰＵを検索する。その結果、要求されたデータをＣＰＵ１０４ｃがＥステートで保持していると判明したとする。【０２４１】
すると、ステップＳ６０３においてＳＣ１０３ｅは、ＣＰＵ１０４ｃを宛先とする共有型・データ転送要求パケットを出力する。ＳＣ１０３ｅが出力した共有型・データ転送要求パケットは、ＸＢ１０２とＳＣ１０３ｃを介して、ＣＰＵ１０４ｃに送信される。【０２４２】
そして、ステップＳ６０４においてＣＰＵ１０４ｃは、Ｍステートのキャッシュラインのデータをメインメモリ１０５ｅにライトバックするため、メインメモリ１０５ｅと同じノード１０１ｅ内のＳＣ１０３ｅを宛先とするライトバックデータパケットを出力する。また、ＣＰＵ１０４ｃは、要求されたデータを含むキャッシュラインのステートを、キャッシュプロトコルに応じてＩまたはＳステートに更新する。【０２４３】
詳しくは図１５および図１７〜図２２とともに後述するが、第１実施形態におけるＳＣ１０３ｃは、比較例の図１０に示した出力バッファ制御部５０９ｃｘと類似の出力バッファ制御部７０２ｃｘ（図１４には不図示）を備えている。そして、詳しくは図１５に示すとおり、比較例と同様に第１実施形態におけるＳＣ１０３ｃも、図１０に示したのと同じポート間アービタ部５０７ｘとポート間セレクタ５０８ｘを備える。【０２４４】
よって、ステップＳ６０４で出力されたライトバックデータパケットは、ＳＣ１０３ｃ内の出力バッファ制御部７０２ｃｘ内のバッファに保存され、出力バッファ制御部７０２ｃｘはポート間アービタ部５０７ｘに出力リクエストを発行する。【０２４５】
また、ステップＳ６０５においてＣＰＵ１０４ｃは、ステップＳ６０１でデータを要求した要求元であるＣＰＵ１０４ａを宛先とする共有型・転送データパケットを出力する。
ステップＳ６０４とＳ６０５の実行順は、ＣＰＵ１０４ｃの仕様によって決まり、逆順でもよいが、以下では説明の便宜上、ステップＳ６０４がステップＳ６０５よりも先に実行されるものとして説明する。なお、図１４は、ポート間アービタ部５０７ｘによってライトバックデータパケットのＸＢ１０２への出力が許可されるよりも前に、共有型・転送データパケットがステップＳ６０５においてＳＣ１０３ｃの出力バッファ制御部７０２ｃｘに出力された場合を示す図である。【０２４６】
この場合、第１実施形態では、次のステップＳ６０６に示すように、出力バッファ制御部７０２ｃｘは、ライトバックデータパケットを保存する。また、ステップＳ６０７に示すように、出力バッファ制御部７０２ｃｘは、共有型・転送データパケットのヘッダに含まれる情報をライトバックデータパケットと関連づけて保存することで、２つのパケットをマージする。すなわち、出力バッファ制御部７０２ｃｘは、同じデータペイロードを有する２つのパケットのうち、後から受け取った方の共有型・転送データパケットを破棄する。【０２４７】
同じデータペイロードを有するライトバックデータパケットと共有型・転送データパケットをステップＳ６０７において１つのパケットにマージすることにより、出力バッファ制御部７０２ｃｘは、パケットの保存に必要な記憶容量を削減することができる。【０２４８】
ステップＳ６０７で共有型・データ転送要求パケットがライトバックデータパケットにマージされた後、ポート間アービタ部５０７ｘから出力許可が下りると、ステップＳ６０８において出力バッファ制御部７０２ｃｘは、マージされたパケットをＸＢ１０２に出力する。【０２４９】
マージされたパケットは、元は、ＳＣ１０３ｅを宛先とするライトバックデータパケットと、ＣＰＵ１０４ａを宛先とする共有型・転送データパケットであり、宛先が異なる。そこで、次のステップＳ６０９でＸＢ１０２は、マージされたパケットから元のライトバックデータパケットと共有型・転送データパケットを復元する。【０２５０】
そして、ＸＢ１０２は、ステップＳ６１０で共有型・転送データパケットを宛先のＣＰＵ１０４ａと同じノード１０１ａ内のＳＣ１０３ａに出力するとともに、ステップＳ６１１でライトバックデータパケットを宛先のＳＣ１０３ｅに出力する。詳しくは図２３〜図２９とともに後述するが、ステップＳ６１０とＳ６１１は、同時に実行されてもよい。または、ステップＳ６１０が先に実行されてもよく、ステップＳ６１１が先に実行されてもよい。【０２５１】
以上、図１４に示したように動作するサーバシステム１００においては、ＳＣ１０３ｃ内の出力バッファ制御部７０２ｃｘに必要なバッファの容量が削減される。もちろん、出力バッファ制御部７０２ｃｘ以外にも、各ＳＣ１０３ａ〜１０３ｇにおいて同様に必要なバッファの容量が削減される。したがって、第１実施形態によれば、ＳＣ１０３ａ〜１０３ｇを実現する半導体チップの製造コストおよび実装面積を削減することができ、ＳＣ１０３ａ〜１０３ｇの消費電力を抑えることもできる。【０２５２】
また、ライトバックデータパケットと共有型・転送データパケットの長さの合計は、マージされた１つのパケットの長さよりも長い。したがって、図４のようにＳＣ１０３ｃがライトバックデータパケットと共有型・転送データパケットを個々にバス１０８ｃを介してＸＢ１０２へと出力する場合に比べて、第１実施形態では、バス１０８ｃの占有時間が短い。したがって、比較例と比べて第１実施形態では、他のパケットが出力許可を待つ時間が削減され、実質的にＳＣ１０３ｃからＸＢ１０２へのパケット出力のスループットが向上する。つまり、サーバシステム１００全体としての性能も向上する。【０２５３】
続いて、図１５と図１６を参照して、図１４の動作を可能とするサーバシステム１００内のコンポーネントの構成について、比較例との違いを中心に説明する。
図１５は、第１実施形態におけるＳＣ１０３ｃの構成図である。図１５は、比較例におけるＳＣ１０３ｃの構成を示した図１０と類似しているが、次の（ｈ１）〜（ｈ６）の点において異なる。【０２５４】
（ｈ１）ルーティングテーブル部５０６ｘの代わりにルーティングテーブル部７０１ｘが設けられている。ルーティングテーブル部７０１ｘの構成は、図２５とともに後述する。【０２５５】
（ｈ２）出力バッファ制御部５０９ｃｘの代わりに、図１４で説明したパケットをマージする機能を備えた出力バッファ制御部７０２ｃｘが設けられている。後述するように、パケットのマージは、主に出力バッファ制御部７０２ｃｘ内の管理テーブル部８０１とヘッダマージ部８０４により行われる。管理テーブル部８０１とヘッダマージ部８０４は、図１５では紙面の都合上、図示を省略したが、詳しくは図１７〜図２２とともに説明する。【０２５６】
（ｈ３）（ｈ２）と同様に、出力バッファ制御部５０９ｄｘの代わりに出力バッファ制御部７０２ｄｘが設けられている。
（ｈ４）ルーティング部５０５の代わりにルーティング部７０３が設けられている。ルーティング部５０５とルーティング部７０３の違いは、図２９についての説明の後で述べる。【０２５７】
（ｈ５）入力ポート５０１ｘからルーティングテーブル部７０１ｘを経由してルーティング部７０３へ至る経路上に、不図示の複製チェック部１００１が設けられている。なお、複製チェック部１００１の詳細は図２３、図２４、図２６とともに後述する。【０２５８】
（ｈ６）入力ポート５０１ｘからルーティング部７０３へ至る経路上に、不図示のデータパケット復元部１００２が設けられている。なお、データパケット復元部１００２の詳細は図２３、図２４、図２６〜図２９とともに後述する。【０２５９】
図１６は、第１実施形態におけるＸＢ１０２の構成図である。図１６は、比較例におけるＸＢ１０２の構成を示した図５と類似しているが、次の（ｉ１）〜（ｉ９）の点において異なる。【０２６０】
（ｉ１）ルーティングテーブル部２０４ｃの代わりにルーティングテーブル部７１１ｃが設けられている。ルーティングテーブル部２０４ｃとルーティングテーブル部７１１ｃの違いは、図２５とともに後述する。【０２６１】
（ｉ２）（ｉ１）と同様に、ルーティングテーブル部２０４ａ、２０４ｅ、および２０４ｇの代わりにルーティングテーブル部７１１ａ、７１１ｅ、および７１１ｇが設けられている。【０２６２】
（ｉ３）出力ポート２０２ｃの前段には、出力バッファ制御部２０７ａｃ、２０７ｅｃ、および２０７ｇｃの代わりに、図１４で説明したパケットをマージする機能を備えた出力バッファ制御部７１２ａｃ、７１２ｅｃ、および７１２ｇｃが設けられている。上記（ｈ２）と同様に、パケットのマージは、主に出力バッファ制御部７１２ａｃ、７１２ｅｃ、および７１２ｇｃそれぞれの内部の管理テーブル部８０１とヘッダマージ部８０４により行われる。管理テーブル部８０１とヘッダマージ部８０４は、図１６では紙面の都合上、図示を省略した。【０２６３】
（ｉ４）（ｉ３）と同様に、他の出力ポート２０２ａ、２０２ｅ、および２０２ｇの前段においても、それぞれ３個ずつ設けられた出力バッファ制御部の構成が比較例とは異なる。【０２６４】
（ｉ５）ルーティング部２０３の代わりにルーティング部７１３が設けられている。ルーティング部２０３とルーティング部７１３の違いは、図２３とともに後述する。
（ｉ６）入力ポート２０１ｃからルーティングテーブル部７１１ｃを経由してルーティング部７１３へ至る経路上に、不図示の複製チェック部１００１が設けられている。【０２６５】
（ｉ７）他の入力ポート２０１ａ、２０１ｅ、および２０１ｇとルーティング部７１３の間の経路においても、同様に不図示の複製チェック部１００１が設けられている。
（ｉ８）入力ポート２０１ｃからルーティング部７１３へ至る経路上に、不図示のデータパケット復元部１００２が設けられている。【０２６６】
（ｉ９）他の入力ポート２０１ａ、２０１ｅ、および２０１ｇとルーティング部７１３の間の経路においても、同様に不図示のデータパケット復元部１００２が設けられている。【０２６７】
以上、図１５と図１６を参照して、第１実施形態において比較例と異なるコンポーネントの概要を示した。
ところで、図１４に示した動作シーケンスでは、ＳＣ１０３ｃにおいてパケットがマージされ、ＸＢ１０２においてパケットが復元される。しかし、図１５と図１６に示すように、第１実施形態では、さらにＳＣ１０３ａ〜１０３ｇにおけるパケットの復元や、ＸＢ１０２におけるパケットのマージも可能なように、サーバシステム１００が構成されている。その理由は、図１４とは異なる次のような場合がありうるからである。【０２６８】
例えば、ＣＰＵ１０４ｅが、同じノード１０１ｅ内のメインメモリ１０５ｅに格納されたデータを要求するため、ＳＣ１０３ｅを宛先とする共有型・メモリアクセス要求パケットを発行する。【０２６９】
すると、ＳＣ１０３ｅは、ディレクトリ１０６ｅを参照し、要求されたデータを含むキャッシュラインをキャッシュメモリに保持しているＣＰＵを検索する。その結果、要求されたデータをＣＰＵ１０４ｃがＥステートで保持していると判明したとする。【０２７０】
この場合、図４や図１４に関して説明したキャッシュプロトコルによれば、ＣＰＵ１０４ｃは、ＣＰＵ１０４ｅを宛先とする共有型・転送データパケットと、ＳＣ１０３ｅを宛先とするライトバックデータパケットを出力する。ここでは説明の便宜上、共有型・データ転送要求パケットが先に出力される場合を例にして説明する。【０２７１】
もし、ＳＣ１０３ｃ内の出力バッファ制御部５０９ｃｘから共有型・転送データパケットがポート間セレクタ５０８ｘへ出力される前にライトバックデータパケットが出力バッファ制御部５０９ｃｘに入力されれば、図１４と同様に２つのパケットはマージされる。【０２７２】
しかし、ＳＣ１０３ｃ内の出力バッファ制御部５０９ｃｘから共有型・転送データパケットが出力された後でライトバックデータパケットが出力バッファ制御部５０９ｃｘに入力されれば、２つのパケットはマージされない。以下の説明では、２つのパケットがマージされなかった場合に着目する。【０２７３】
ここで、ＣＰＵ１０４ｅを宛先とする共有型・転送データパケットは、ＸＢ１０２において、ＳＣ１０３ｅと接続された出力ポート２０２ｅへと出力されるパケットである。同様に、ＳＣ１０３ｅを宛先とするライトバックデータパケットは、ＸＢ１０２において、出力ポート２０２ｅへと出力されるパケットである。【０２７４】
よって、マージされずに個別にＳＣ１０３ｃからＸＢ１０２へと出力された共有型・転送データパケットとライトバックデータパケットの双方は、ともにＸＢ１０２内の出力ポート２０２ｅの前段に設けられた出力バッファ制御部７１２ｃｅを経由する。【０２７５】
したがって、場合によっては、出力バッファ制御部７１２ｃｅ内に共有型・転送データパケットが一時的に保存されている状況下で、出力バッファ制御部７１２ｃｅにライトバックデータパケットが入力されることがある。例えば、ノード１０１ｅ内のコンポーネントを宛先とする多くのパケットが集中する場合、出力バッファ制御部７１２ｃｅから共有型・転送データパケットが出力される前に、出力バッファ制御部７１２ｃｅへライトバックデータパケットが入力されることがある。【０２７６】
この場合、ＸＢ１０２内の出力バッファ制御部７１２ｃｅにおいて２つのパケットをマージして保存し、ＳＣ１０３ｅへと出力し、ＳＣ１０３ｅがパケットの復元を行う。それにより、共有型・転送データパケットとライトバックデータパケットにおいて重複する部分の容量が不要となるため、ＸＢ１０２内に必要なバッファ容量が削減される。また、結果として、バス１０８ｅの占有時間も削減され、実質的にはサーバシステム１００のスループットが向上する。【０２７７】
そのため、第１実施形態では、図１６に示すようにＸＢ１０２内の各出力バッファ制御部は、パケットのマージができるように管理テーブル部８０１やヘッダマージ部８０４などを備えている。また、図１５に示すように各ＳＣ１０３ａ〜１０３ｇにおいて、ＸＢ１０２と接続された入力ポート５０１ｘとルーティング部７０３の間には、パケットの復元ができるように複製チェック部１００１やデータパケット復元部１００２が備えられている。【０２７８】
続いて、図１４の動作シーケンスにそって、第１実施形態における各コンポーネントの構成と動作について詳細に説明する。
まず、図１７と図１８を参照して、図１５の出力バッファ制御部７０２ｃｘの詳細な構成を説明する。なお、以下では出力バッファ制御部７０２ｃｘを例として説明するが、図１５の出力バッファ制御部７０２ｄｘおよび図１６に示したＸＢ１０２内の１２個の出力バッファ制御部（７１２ｃｅなど）も同様の構成である。【０２７９】
図１７は、第１実施形態におけるＳＣ１０３ｃ内の出力バッファ制御部７０２ｃｘの構成図である。図１５に示すように、出力バッファ制御部７０２ｃｘはルーティング部７０３、ポート間アービタ部５０７ｘ、およびポート間セレクタ５０８ｘと接続されている。【０２８０】
また、ＸＢ１０２内の例えば出力バッファ制御部７１２ｃｅも図１７と同様の構成である。出力バッファ制御部７１２ｃｅは、図１６に示すように、ルーティング部７１３、ポート間アービタ部２０５ｅ、およびポート間セレクタ２０６ｅと接続されている点で出力バッファ制御部７０２ｃｘとは異なる。しかし、出力バッファ制御部７１２ｃｅの内部の構成は、図１７の出力バッファ制御部７０２ｃｘと同様である。【０２８１】
図１７に示したＳＣ１０３ｃ内の出力バッファ制御部７０２ｃｘは、比較例において図７に示したＸＢ１０２内の出力バッファ制御部２０７ｃａと類似の構成を有するので、以下では共通点についての説明を適宜省略する。【０２８２】
出力バッファ制御部７０２ｃｘは、比較例の出力バッファ制御部２０７ｃａと同様に、制御部４００、データパケット保存部４１０、要求パケット保存部４２０、およびパケット間セレクタ４３０を備える。ただし、出力バッファ制御部７０２ｃｘにおいては、制御部４００の内部の構造と、データパケット保存部４１０の容量が比較例とは異なる。【０２８３】
制御部４００は、パケット間アービタ部４０１を有する。パケット間アービタ部４０１はパケット間アービタ４０２と比較器４０３と比較器４０４を備え、比較例と同様である。また、制御部４００は比較例と同様のエンコーダ４０５を備える。制御部４００はさらに、比較例と同様に、データパケット用のリードポインタ制御部４０７を備え、要求パケット用のライトポインタ制御部４０８とリードポインタ制御部４０９を備える。【０２８４】
第１実施形態の制御部４００が比較例と異なるのは、管理テーブル部８０１を備える点、比較部８０２を備える点、および比較例におけるライトポインタ制御部４０６の代わりにライトポインタ制御部８０３を備える点である。また、第１実施形態においては、出力バッファ制御部７０２ｃｘがさらに、ヘッダマージ部８０４とセレクタ８０５を備える。【０２８５】
管理テーブル部８０１と比較部８０２は協働して、同じデータペイロードを有する２つのパケットの組を判別する。そのために、管理テーブル部８０１は、データパケット保存部４１０に保存されているパケットのヘッダに含まれるヘッダ情報を管理している。【０２８６】
比較部８０２は、出力バッファ制御部７０２ｃｘに新たに入力されたパケットと同じデータペイロードを有するパケットがデータパケット保存部４１０に保存されているか否かをライトポインタ制御部８０３に通知する。【０２８７】
ライトポインタ制御部８０３は、比較部８０２からの通知の結果に基づいて、新たに入力されたパケットのデータパケット保存部４１０への保存、または新たに入力されたパケットの破棄を制御する。その制御のため、ライトポインタ制御部８０３は、比較例と同様にライト指示およびライトポインタ値を出力するだけでなく、「複製ライト指示」を出力する。詳細は後述するが、複製ライト指示は、既にデータパケット保存部４１０に保存されているデータパケットと同じデータペイロードを有するパケットのヘッダ情報を記録することを管理テーブル部８０１に指示するためのものである。【０２８８】
ヘッダマージ部８０４は、同じデータペイロードを有する２つのパケットをマージしたパケットを生成する。セレクタ８０５は、ヘッダマージ部８０４によりマージされたパケットと、データパケット保存部４１０に保存されているデータパケットのいずれかを選択する。【０２８９】
以上、概略を述べた出力バッファ制御部７０２ｃｘ内の各コンポーネント間の関係は、次のとおりである。
まず、信号線４４１を介してパケットがルーティング部７０３から出力バッファ制御部７０２ｃｘへ出力される。信号線４４１は、パケットを出力するための信号線４４２とパケットヘッダ内に含まれるヘッダ情報を出力するための信号線８１１とに分岐している。比較例に関して具体的な実装の例（ｅ１）〜（ｅ３）とともに説明したように、第１実施形態においても、斜めに枝分かれする線によって図示される分岐は、出力されるデータが分岐ごとに異なることを示す。【０２９０】
信号線４４２を介してデータパケット保存部４１０へ出力されるのは、比較例と同じくパケットである。信号線８１１に出力されるヘッダ情報は、具体的には、パケットタイプ、宛先ＩＤ、要求元ＩＤ、ＲｅｑＩＤ、およびデータステートである。【０２９１】
パケットタイプは、前述の（ｄ１）〜（ｄ４）などのタイプを示し、比較例においてもエンコーダ４０５に入力されている。宛先ＩＤ、要求元ＩＤ、およびＲｅｑＩＤについては上記（ａ１）〜（ａ３）で説明したとおりである。【０２９２】
また、データステートとしては、キャッシュプロトコルに応じて前述の（ｂ１）〜（ｂ５）の少なくとも一部が指定可能である。以下では、少なくとも、データステートの値が（ｂ３）のＳステートにあたる「共有型」である場合と、データステートが指定されない場合を例に取り上げる。【０２９３】
信号線８１１はさらに信号線４４３と信号線８１２に分岐し、信号線８１２は信号線８１３と信号線８１４に分岐する。
信号線４４３は比較例と同じくエンコーダ４０５に接続され、ヘッダ情報のうちパケットタイプが信号線４４３を介してエンコーダ４０５に入力される。また、信号線８１３は比較部８０２に接続され、ヘッダ情報のうち要求元ＩＤとＲｅｑＩＤが信号線８１３を介して比較部８０２に入力される。そして、信号線８１４は管理テーブル部８０１に接続され、パケットタイプ、宛先ＩＤ、要求元ＩＤ、ＲｅｑＩＤ、データステートのすべてが信号線８１４を介して管理テーブル部８０１に入力される。【０２９４】
また、管理テーブル部８０１は、さらにライトポインタ制御部８０３とリードポインタ制御部４０７からの入力を受け取り、後述の「複製情報」を信号線８１５に出力する。
管理テーブル部８０１は、ライトポインタ制御部８０３からの入力に基づいて、新たに入力されたパケットと同じデータペイロードを持つパケットがデータパケット保存部４１０に保存されている場合は、上記新たなパケットのヘッダ情報を記憶する。また、管理テーブル部８０１は、リードポインタ制御部４０７からの入力に基づいて、リードポインタ値で示されるブロックに保存されているパケットにマージするヘッダ情報を検索する。【０２９５】
複製情報は、出力しようとするパケットにマージするヘッダ情報があるか否かを示す。複製情報はさらに、出力しようとするパケットにマージするヘッダ情報がある場合は、当該ヘッダ情報を含む。【０２９６】
信号線８１５は信号線８１６と信号線８１７に分岐しており、信号線８１６はヘッダマージ部８０４へ、信号線８１７はセレクタ８０５へ、それぞれ接続されている。信号線８１５に出力された複製情報は信号線８１６を介してヘッダマージ部８０４へ出力される。また、複製情報のうち、出力しようとするパケットにマージするヘッダ情報があるか否かを示す「複製データＶＡＬＩＤ」フィールドのみが信号線８１７を介してセレクタ８０５に出力される。【０２９７】
さらに管理テーブル部８０１は比較部８０２とも接続されているが、管理テーブル部８０１と比較部８０２との間のデータの入出力については図１８Ａおよび図１８Ｂとともに後述する。【０２９８】
比較部８０２は、信号線８１３を介して入力された要求元ＩＤとＲｅｑＩＤを管理テーブル部８０１から入力された情報と比較し、比較結果をライトポインタ制御部８０３に通知する。この比較は、新たに入力されたパケットと同じデータペイロードを持つパケットがデータパケット保存部４１０に保存されているか否かを判断するために行われる。【０２９９】
データパケット用のライトポインタ制御部８０３は、比較例のライトポインタ制御部４０６と同様に、比較器４０３およびデータパケット保存部４１０と接続されている。ライトポインタ制御部８０３はさらに、上記のように比較部８０２とも接続されており、また、管理テーブル部８０１とも接続されている。【０３００】
以上、図１７を参照して出力バッファ制御部７０２ｃｘの構成について説明した。
続いて、出力バッファ制御部７０２ｃｘ内の管理テーブル部８０１、比較部８０２、およびライトポインタ制御部８０３の詳細を図１８Ａおよび図１８Ｂを参照して説明する。【０３０１】
図１８Ａは、第１実施形態における管理テーブル部８０１の構成図であり、図１８Ｂは第１実施形態における比較部８０２とライトポインタ制御部８０３の構成図である。紙幅の都合上、図１８Ａと図１８Ｂは２枚に分かれているが、「Ａ」〜「Ｍ」なる符号で示したように図１８Ａの管理テーブル部８０１は、図１８Ｂの比較部８０２およびライトポインタ制御部８０３と接続されている。【０３０２】
図１８Ａにおいて管理テーブル部８０１は、データパケット保存部４１０内の（Ｎ＋１）個の保存番地００００〜ｘｘｘｘに対応する（Ｎ＋１）個のエントリ９０１−０〜９０１−Ｎを有する。例えば、Ｎ＝６３ならば、「ｘｘｘｘ」＝「００６３」である。【０３０３】
また、管理テーブル部８０１は、複数ビットで表され、リードポインタ制御部４０７から出力されたリードポインタ値を、各１ビットの（Ｎ＋１）個の出力にデコードするデコーダ９０２を有する。管理テーブル部８０１はさらに、（Ｎ＋１）個のＡＮＤ回路９０３−０〜９０３−Ｎを有する。０≦ｊ≦Ｎなる各ｊについて、ＡＮＤ回路９０３−ｊにはリードポインタ制御部４０７から出力されたリード指示と、デコーダ９０２の（ｊ＋１）番目の出力とが入力される。【０３０４】
例えば、「１」というリードポインタ値とリード指示がリードポインタ制御部４０７から出力された場合、デコーダ９０２の出力のうち保存番地０００１に対応する２番目の出力のみが論理値１であり、その他のＮ個の出力は論理値０である。よって、（Ｎ＋１）個のＡＮＤ回路９０３−０〜９０３−Ｎのうち、ＡＮＤ回路９０３−１の出力のみが論理値１である。【０３０５】
また、管理テーブル部８０１は、ＦＦ９０４とＦＦ９０５を有する。ＦＦ９０４は、それぞれ１ビットを出力する（Ｎ＋１）個のＡＮＤ回路９０３−０〜９０３−Ｎからの出力、すなわち（Ｎ＋１）ビットの出力を保持する。ＦＦ９０５もＦＦ９０４と同様であり、ＦＦ９０４とＦＦ９０５は同じデータを保持する。２つのＦＦ９０４とＦＦ９０５を用いる代わりに、１つのＦＦ９０４だけを用い、ＦＦ９０４の出力を図１８ＡにおけるＦＦ９０５の出力先へも供給するよう、信号線を適宜分岐させる実施形態も可能である。【０３０６】
さらに、管理テーブル部８０１は、複数ビットで表され、データパケット用のライトポインタ制御部８０３から出力されたライトポインタ値を、各１ビットの（Ｎ＋１）個の出力にデコードするデコーダ９０６を有する。【０３０７】
ＦＦ９０４が保持する（Ｎ＋１）ビットのデータは、エントリ９０１−０〜９０１−Ｎに１ビットずつ入力される。ＦＦ９０５が保持する（Ｎ＋１）ビットのデータも、エントリ９０１−０〜９０１−Ｎに１ビットずつ入力される。また、デコーダ９０６の（Ｎ＋１）ビットの出力も、エントリ９０１−０〜９０１−Ｎに１ビットずつ入力される。さらに、エントリ９０１−０〜９０１−Ｎにはそれぞれライトポインタ制御部８０３からのライト指示と複製ライト指示が入力される。【０３０８】
エントリ９０１−０〜９０１−Ｎの構造と動作はそれぞれ同様であり、図１８Ａでは保存番地００００用エントリ９０１−０についてのみ詳細に示している。すなわち、エントリ９０１−０は、７個のＡＮＤ回路９０７〜９１３、およびＡＮＤ回路９０７〜９１３にそれぞれ対応する以下の７個のフィールドを有する。【０３０９】
・ＶＡＬＩＤフィールド９１４
・要求元ＩＤフィールド９１５
・ＲｅｑＩＤフィールド９１６
・複製データＶＡＬＩＤフィールド９１７
・複製パケットタイプフィールド９１８
・複製パケット宛先ＩＤフィールド９１９
・複製データステートフィールド９２０
上記７個のフィールドのそれぞれは、例えばＦＦなどの記憶素子を用いて実現される。各フィールドとその入出力の詳細は、比較部８０２とライトポインタ制御部８０３の詳細を説明した後で説明する。なお、上記各フィールドを備えるエントリ９０１−０〜９０１−Ｎの全体が、１つの管理テーブルに相当する。【０３１０】
また、図１７に関して説明したとおり、パケットのヘッダ内のパケットタイプ、要求元ＩＤ、ＲｅｑＩＤ、宛先ＩＤ、データステートの各フィールドのデータがルーティング部７０３から信号線８１４を介して、管理テーブル部８０１に入力される。図１７と図１８Ａに示すように信号線８１２から分岐した信号線８１４は、図１８Ａに示すように、さらに次のように分岐して各エントリ９０１−０〜９０１−Ｎに接続している。【０３１１】
・保存番地００００用エントリ９０１−０にパケットタイプと宛先ＩＤとデータステートを入力するための信号線９３１−０
・保存番地００００用エントリ９０１−０に要求元ＩＤとＲｅｑＩＤが入力される信号線９３２−０
・  ……
・保存番地ｘｘｘｘ用エントリ９０１−Ｎにパケットタイプと宛先ＩＤとデータステートが入力される信号線９３１−Ｎ
・保存番地ｘｘｘｘ用エントリ９０１−Ｎに要求元ＩＤとＲｅｑＩＤが入力される信号線９３２−Ｎ
また、信号線８１２からの他方の分岐は、信号線８１３として図１８Ｂの比較部８０２に入力されている。信号線８１３を介してルーティング部７０３から比較部８０２に入力されるのは、パケットのヘッダに含まれる要求元ＩＤとＲｅｑＩＤである。【０３１２】
図１８Ｂのとおり、比較部８０２は、（Ｎ＋１）個の保存番地００００〜ｘｘｘｘに対応する（Ｎ＋１）個の比較器９４１−０〜９４１−Ｎを備える。比較器９４１−０〜９４１−Ｎの構成は同様であり、比較器９４１−０〜９４１−Ｎそれぞれの出力は、ライトポインタ制御部８０３内が備えるＯＲ回路９５１に入力される。【０３１３】
例えば、保存番地００００に対応する比較器９４１−０には、信号線９３３を介してルーティング部７０３から、図１７の出力バッファ制御部７０２ｃｘへ入力されるパケットのヘッダに含まれる要求元ＩＤとＲｅｑＩＤが入力される。また、比較器９４１−０には、保存番地００００用エントリ９０１−０内の要求元ＩＤフィールド９１５とＲｅｑＩＤフィールド９１６から、要求元ＩＤとＲｅｑＩＤがそれぞれ入力される。つまり、比較器９４１−０には、要求元ＩＤとＲｅｑＩＤの組が２組入力される。【０３１４】
また、比較器９４１−０には、制御信号として、保存番地００００用エントリ９０１−０内のＶＡＬＩＤフィールド９１４の値、すなわち、データパケット保存部４１０の保存番地００００のブロックが有効か否かを示す値が入力される。【０３１５】
制御信号として入力されたＶＡＬＩＤフィールド９１４の値が論理値０の場合、比較器９４１−０は、論理値０を、ＯＲ回路９５１および、保存番地００００用エントリ９０１−０内のＡＮＤ回路９１０に出力する。【０３１６】
制御信号として入力されたＶＡＬＩＤフィールド９１４の値が論理値１の場合、比較器９４１−０は、入力された要求元ＩＤとＲｅｑＩＤの組同士を比較する。そして、入力された２組の要求元ＩＤとＲｅｑＩＤが一致すれば、比較器９４１−０は、論理値１をＯＲ回路９５１とエントリ９０１−０内のＡＮＤ回路９１０とに出力する。逆に、入力された２組の要求元ＩＤとＲｅｑＩＤが不一致の場合は、比較器９４１−０は、論理値０をＯＲ回路９５１とエントリ９０１−０内のＡＮＤ回路９１０とに出力する。【０３１７】
なお、比較器９４１−０が出力する論理値０は、データパケット保存部４１０の保存番地００００には、新たに入力されたデータパケットとデータペイロードが一致するパケットが保存されていないことを示す。また、比較器９４１−０が出力する論理値１は、データパケット保存部４１０の保存番地００００には、新たに入力されたデータパケットとデータペイロードが一致するパケットが保存されていることを示す。【０３１８】
つまり、第１実施形態では、要求ＩＤとＲｅｑＩＤが一致すればデータペイロードが等しいということを利用している。このことはパケットの仕様に依存しており、パケットの仕様に応じた様々な実施形態が可能である。いずれにせよ各比較器９４１−０〜９４１−Ｎは、パケットの仕様に応じて適切なヘッダ情報同士を比較することによって、データペイロードの一致または不一致を判断することができる。【０３１９】
データパケット用のライトポインタ制御部８０３は、上記のＯＲ回路９５１のほかに、ＮＯＴ回路９５２、ＡＮＤ回路９５３、ＡＮＤ回路９５４、およびＦＦ９５５を備える。
ＯＲ回路９５１は（Ｎ＋１）入力のＯＲ回路であり、比較器９４１−０〜９４１−Ｎからの入力がすべて論理値０である場合のみ論理値０を出力し、それ以外の場合は論理値１を出力する。つまり、新たに出力バッファ制御部７０２ｃｘに入力されたデータパケットと同じデータペイロードを有する別のデータパケットがデータパケット保存部４１０内のいずれかのブロックに保存されている場合のみ、ＯＲ回路９５１は論理値１を出力する。【０３２０】
ＯＲ回路９５１の出力はＮＯＴ回路９５２とＡＮＤ回路９５３に入力され、ＮＯＴ回路９５２の出力はＡＮＤ回路９５４に入力される。
ここで、エンコーダ４０５は比較例と同様に、入力されたパケットがデータパケットであるか否かを示すＶＡＬＩＤ信号を出力する。エンコーダ４０５から出力されたＶＡＬＩＤ信号は、ＡＮＤ回路９５３および９５４に入力される。【０３２１】
したがって、ＡＮＤ回路９５３は、出力バッファ制御部７０２ｃｘにデータパケットが入力され、かつ、入力されたデータパケットと同じデータペイロードを有する別のパケットがデータパケット保存部４１０に保存されている場合にのみ、論理値１を出力する。ＡＮＤ回路９５３からの出力は、図１８Ａの各エントリ９０１−０〜９０１−Ｎに、複製ライト指示としてそれぞれ入力される。【０３２２】
また、ＡＮＤ回路９５４は、出力バッファ制御部７０２ｃｘにデータパケットが入力され、かつ、入力されたデータパケットと同じデータペイロードを有する別のパケットがデータパケット保存部４１０に保存されていない場合にのみ、論理値１を出力する。ＡＮＤ回路９５４からの出力は、図１８Ａの各エントリ９０１−０〜９０１−Ｎに、ライト指示としてそれぞれ入力される。【０３２３】
また、ライトポインタ制御部８０３は、図８に示した比較例のライトポインタ制御部４０６がＦＦ４５１を備えるのと同様に、ＦＦ９５５を備える。ＦＦ９５５は、ＦＦ４５１と同様にライトポインタ値を保持する。また、ＡＮＤ回路９５４の出力がカウントイネーブル信号としてＦＦ９５５に入力される。そして、ＦＦ９５５の出力であるライトポインタ値は、比較例と同様にデータパケット保存部４１０と比較器４０３に入力されるだけでなく、さらに、図１８Ａのデコーダ９０６にも入力される。【０３２４】
以上、図１８Ｂを参照して比較部８０２とライトポインタ制御部８０３の詳細を説明した。そこで、ライトポインタ制御部８０３からの入力を受け取る図１８Ａの管理テーブル部８０１の説明に戻ると、例えば保存番地００００用エントリ９０１−０の内の各コンポーネントの構成と動作は次のとおりである。【０３２５】
ＶＡＬＩＤフィールド９１４は、データパケット保存部４１０の保存番地００００のブロックが有効か否かを示す１ビットのフィールドである。論理値１が「有効」を示し、論理値０が「無効」を示す。【０３２６】
ＶＡＬＩＤフィールド９１４の値は、保存番地００００に新たなパケットが保存されるときに論理値１となる。また、ＶＡＬＩＤフィールド９１４の値は、保存番地００００に保存されているパケットがヘッダマージ部８０４を介して、または介さずに、セレクタ８０５へ出力され、さらにパケット間セレクタ４３０へと出力されるときに、論理値０となる。具体的には、ＶＡＬＩＤフィールド９１４は次のように構成されている。【０３２７】
ＶＡＬＩＤフィールド９１４は、例えばＲＳ（Reset-Set）型ＦＦにより実現されてもよい。その場合、ＲＳ型ＦＦのＳ（セット）端子にはＡＮＤ回路９０７の出力が与えられ、Ｒ（リセット）端子には、（Ｎ＋１）ビットを保持するＦＦ９０４の最初のビットであるビット０が与えられる。【０３２８】
ここで、ＡＮＤ回路９０７の入力は、デコーダ９０６からの出力の最初のビットであるビット０（すなわち（Ｎ＋１）ビットの出力のうち、保存番地００００に相当するビット）と、ライトポインタ制御部８０３から出力されたライト指示である。したがって、ライトポインタ制御部８０３が保存番地００００を指定してライト指示をアサートした場合にのみ、ＡＮＤ回路９０７の出力は論理値１となり、ＶＡＬＩＤフィールド９１４の値が論理値１にセットされる。【０３２９】
また、リードポインタ制御部４０７が保存番地００００を示すリードポインタ値を出力するとともにリード指示をアサートした場合にのみ、ＦＦ９０４の最初のビットであるビット０（すなわち（Ｎ＋１）ビットのうち、保存番地００００に相当するビット）は論理値１となる。そして、ＦＦ９０４のビット０が論理値１となると、ＶＡＬＩＤフィールド９１４の値は論理値０にリセットされる。【０３３０】
ＡＮＤ回路９０７の出力とＦＦ９０４のビット０がともに論理値０の場合は、ＶＡＬＩＤフィールド９１４の値は変わらない。
また、前述のとおり、ＶＡＬＩＤフィールド９１４の値は、保存番地００００に対応する比較器９４１−０へと出力される。【０３３１】
次に要求元ＩＤフィールド９１５について説明する。要求元ＩＤフィールド９１５は、データパケット保存部４１０の保存番地００００に保存するデータパケットの要求元ＩＤを記憶する。要求元ＩＤフィールド９１５への値の設定は、ＡＮＤ回路９０８により行われる。以下、要求元ＩＤが例えばＭ１ビットで表されるとして説明する。【０３３２】
ＡＮＤ回路９０８への入力は、ライトポインタ制御部８０３から出力されるライト指示と、デコーダ９０６の出力のうち、保存番地００００に相当するビット０と、信号線９３２−０から分岐した信号線を介して入力されるＭ１ビットの要求元ＩＤである。ＡＮＤ回路９０８は、ライト指示とデコーダ９０６のビット０の出力がともに論理値１のときのみ、入力されたＭ１ビットの要求元ＩＤの値を要求元ＩＤフィールド９１５に上書きする。ライト指示とデコーダ９０６からの出力のビット０の少なくとも一方が論理値０のとき、ＡＮＤ回路９０８は、要求元ＩＤフィールド９１５への上書きを行わず、要求元ＩＤフィールド９１５は現在の値を保持する。【０３３３】
上記のように動作するＡＮＤ回路９０８と要求元ＩＤフィールド９１５の具体的な実装方法は様々である。
例えば、ＡＮＤ回路９０８は、ライト指示とデコーダ９０６からの出力のビット０との論理積を得るＡＮＤ回路を含むとともに、入力されたＭ１ビットの要求元ＩＤを要求元ＩＤフィールド９１５に通過させるよう構成されていてもよい。また、要求元ＩＤフィールド９１５は、例えばＭ１ビットを格納するためのＭ１組の記憶素子を備え、各記憶素子の制御端子にはライトイネーブル用の制御信号として上記ＡＮＤ回路の出力が与えられる。それにより、上記ＡＮＤ回路の出力が論理値０のときは、要求元ＩＤフィールド９１５が現在の値を保持し、上記ＡＮＤ回路の出力が論理値１のときは、ＡＮＤ回路９０８を通過した要求元ＩＤが要求元ＩＤフィールド９１５に書き込まれる。【０３３４】
例えば、要求元ＩＤフィールド９１５がＭ１個のＲＳ型ＦＦを備えていてもよい。ここで、説明の便宜上、ＡＮＤ回路９０８内の上記ＡＮＤ回路の出力（すなわちライト指示とデコーダ９０６からの出力のビット０との論理積）を「Ｘ」とし、ＡＮＤ回路９０８を通過した要求元ＩＤのビットｊを「Ｙｊ」とする（０≦ｊ≦Ｍ１−１）。要求元ＩＤフィールド９１５は、ビットごとに２つのＡＮＤ回路と１つのＮＯＴ回路を備え、ビットｊに対応するＲＳ型ＦＦのＲ端子にはＸ∧Ｙｊが、Ｓ端子にはＸ∧¬Ｙｊが、それぞれ入力されるように構成される。【０３３５】
すると、Ｘが論理値０の場合は各ＲＳ型ＦＦが現状の値を保持し、Ｘが論理値１の場合は各ＲＳ型ＦＦの値はＹｊ（すなわち要求元ＩＤのビットｊの値）となる。したがって、ＡＮＤ回路９０８と要求元ＩＤフィールド９１５の上記の動作が実現される。【０３３６】
なお、ＡＮＤ回路９０８および要求元ＩＤフィールド９１５の具体的な構成が上記の例と異なっていてもよいことは無論である。
また、前述のとおり、要求元ＩＤフィールド９１５の値は、保存番地００００に対応する図１８Ｂの比較器９４１−０へと出力される。【０３３７】
続いて、ＲｅｑＩＤフィールド９１６について説明する。ＲｅｑＩＤフィールド９１６は、データパケット保存部４１０の保存番地００００に保存するデータパケットのＲｅｑＩＤを記憶する。ＲｅｑＩＤフィールド９１６への値の設定は、ＡＮＤ回路９０９により行われる。【０３３８】
ＡＮＤ回路９０９への入力は、ライトポインタ制御部８０３から出力されるライト指示と、デコーダ９０６からの出力のうち保存番地００００に相当するビット０と、信号線９３２−０から分岐した信号線を介して入力されるＲｅｑＩＤである。ＡＮＤ回路９０８と要求元ＩＤフィールド９１５について説明したのと同様に、ＡＮＤ回路９０９とＲｅｑＩＤフィールド９１６の具体的な実装は様々である。【０３３９】
具体的にどのように実装されるにしろ、ＡＮＤ回路９０９とＲｅｑＩＤフィールド９１６は以下のように動作する。すなわち、ＡＮＤ回路９０９は、ライト指示とデコーダ９０６からの出力のビット０がともに論理値１のときのみ、入力されたＲｅｑＩＤの値をＲｅｑＩＤフィールド９１６に上書きする。他方、ライト指示とデコーダ９０６からの出力のビット０の少なくとも一方が論理値０のとき、ＡＮＤ回路９０９は、ＲｅｑＩＤフィールド９１６への上書きを行わず、ＲｅｑＩＤフィールド９１６は現在の値を保持する。【０３４０】
また、前述のとおり、ＲｅｑＩＤフィールド９１６の値は、保存番地００００に対応する比較器９４１−０へと出力される。
続いて、複製データＶＡＬＩＤフィールド９１７について説明する。複製データＶＡＬＩＤフィールド９１７は、複製パケットタイプフィールド９１８、複製パケット宛先ＩＤフィールド９１９、および複製データステートフィールド９２０が有効か否かを示す１ビットのフィールドである。論理値１が「有効」を示し、論理値０が「無効」を示す。【０３４１】
複製データＶＡＬＩＤフィールド９１７の値は、保存番地００００に第１のパケットが保存されている状態で、第１のパケットと同じデータペイロードを有する第２のパケットが出力バッファ制御部７０２ｃｘに入力されたときに論理値１となる。このとき、第２のパケットのヘッダに含まれるパケットタイプ、宛先ＩＤ、データステートはそれぞれ複製パケットタイプフィールド９１８、複製パケット宛先ＩＤフィールド９１９、複製データステートフィールド９２０に記憶される。【０３４２】
また、複製データＶＡＬＩＤフィールド９１７の値は、保存番地００００に保存されている第１のパケットが、図１７のヘッダマージ部８０４とセレクタ８０５を介してパケット間セレクタ４３０へと出力されるときに、論理値０となる。【０３４３】
具体的には、複製データＶＡＬＩＤフィールド９１７は、例えばＲＳ型ＦＦにより実現されてもよい。その場合、Ｓ端子にはＡＮＤ回路９１０の出力が与えられ、Ｒ端子には、（Ｎ＋１）ビットを保持するＦＦ９０５の最初のビットであるビット０が与えられる。【０３４４】
ここで、ＡＮＤ回路９１０の入力は、保存番地００００に対応して図１８Ｂの比較部８０２に設けられた比較器９４１−０の出力と、ライトポインタ制御部８０３から出力された複製ライト指示である。したがって、新たに入力された第２のパケットと同じデータペイロードを有する第１のパケットが既に保存番地００００に保存されているときのみ、ＡＮＤ回路９１０の２つの入力がともに論理値１となり、複製データＶＡＬＩＤフィールド９１７の値が論理値１にセットされる。【０３４５】
また、リードポインタ制御部４０７が保存番地００００を示すリードポインタ値を出力するとともにリード指示をアサートした場合にのみ、ＦＦ９０５のビット０が論理値１となり、複製データＶＡＬＩＤフィールド９１７の値が論理値０にリセットされる。【０３４６】
ＡＮＤ回路９１０の出力とＦＦ９０５のビット０がともに論理値０の場合は、複製データＶＡＬＩＤフィールド９１７の値は変わらない。
次に、複製パケットタイプフィールド９１８について説明する。ここで、図１７の出力バッファ制御部７０２ｃｘに新たに入力された第２のパケットと同じデータペイロードを有する第１のパケットが、既にデータパケット保存部４１０の保存番地００００に保存されていたとする。このとき、複製パケットタイプフィールド９１８は、第２のパケットのヘッダに含まれるパケットタイプを記憶する。また、複製パケットタイプフィールド９１８への値の設定は、ＡＮＤ回路９１１により行われる。【０３４７】
ＡＮＤ回路９１１への入力は、図１８Ｂの比較器９４１−０の出力と、ライトポインタ制御部８０３から出力された複製ライト指示と、信号線９３１−０から分岐した信号線を介して入力されるパケットタイプである。ＡＮＤ回路９０８と要求元ＩＤフィールド９１５について説明したのと同様に、ＡＮＤ回路９１１と複製パケットタイプフィールド９１８の具体的な実装は様々である。【０３４８】
具体的にどのように実装されるにしろ、ＡＮＤ回路９１１と複製パケットタイプフィールド９１８は次のように動作する。すなわち、ＡＮＤ回路９１１は、比較器９４１−０の出力と複製ライト指示がともに論理値１のときのみ、入力されたパケットタイプの値を複製パケットタイプフィールド９１８に上書きする。他方、比較器９４１−０の出力と複製ライト指示の少なくとも一方が論理値０のとき、ＡＮＤ回路９１１は複製パケットタイプフィールド９１８への上書きを行わず、複製パケットタイプフィールド９１８は現在の値を保持する。【０３４９】
次に、複製パケット宛先ＩＤフィールド９１９について説明する。複製パケット宛先ＩＤフィールド９１９は、上記第２のパケットのヘッダに含まれる宛先ＩＤを記憶する。また、複製パケット宛先ＩＤフィールド９１９への値の設定はＡＮＤ回路９１２により行われる。【０３５０】
ＡＮＤ回路９１２への入力は、図１８Ｂの比較器９４１−０の出力と、ライトポインタ制御部８０３から出力された複製ライト指示と、信号線９３１−０から分岐した信号線を介して入力される宛先ＩＤである。宛先ＩＤは、例えば要求元ＩＤと同じくＭ１ビットで表される。ＡＮＤ回路９０８と要求元ＩＤフィールド９１５について説明したのと同様に、ＡＮＤ回路９１２と複製パケット宛先ＩＤフィールド９１９の具体的な実装は様々である。【０３５１】
具体的にどのように実装されるにしろ、ＡＮＤ回路９１２と複製パケット宛先ＩＤフィールド９１９は次のように動作する。すなわち、ＡＮＤ回路９１２は、比較器９４１−０の出力と複製ライト指示がともに論理値１のときのみ、入力された宛先ＩＤの値を複製パケット宛先ＩＤフィールド９１９に上書きする。他方、比較器９４１−０の出力と複製ライト指示の少なくとも一方が論理値０のとき、ＡＮＤ回路９１２は複製パケット宛先ＩＤフィールド９１９への上書きを行わず、複製パケット宛先ＩＤフィールド９１９は現在の値を保持する。【０３５２】
次に、複製データステートフィールド９２０について説明する。複製データステートフィールド９２０は、上記第２のパケットのヘッダに含まれるデータステートを記憶する。また、複製データステートフィールド９２０への値の設定はＡＮＤ回路９１３により行われる。【０３５３】
ＡＮＤ回路９１３への入力は、図１８Ｂの比較器９４１−０の出力と、ライトポインタ制御部８０３から出力された複製ライト指示と、信号線９３１−０から分岐した信号線を介して入力されるデータステートである。ＡＮＤ回路９０８と要求元ＩＤフィールド９１５について説明したのと同様に、ＡＮＤ回路９１３と複製データステートフィールド９２０の具体的な実装は様々である。【０３５４】
具体的にどのように実装されるにしろ、ＡＮＤ回路９１３と複製データステートフィールド９２０は次のように動作する。すなわち、ＡＮＤ回路９１３は、比較器９４１−０の出力と複製ライト指示がともに論理値１のときのみ、入力されたデータステートの値を複製データステートフィールド９２０に上書きする。他方、比較器９４１−０の出力と複製ライト指示の少なくとも一方が論理値０のとき、ＡＮＤ回路９１３は複製データステートフィールド９２０への上書きを行わず、複製データステートフィールド９２０は現在の値を保持する。【０３５５】
そして、以上説明した複製データＶＡＬＩＤフィールド９１７、複製パケットタイプフィールド９１８、複製パケット宛先ＩＤフィールド９１９、および複製データステートフィールド９２０の値は、管理テーブル部８０１内のセレクタ９２１へと出力される。同様に、他のエントリ９０１−１〜９０１−Ｎからもセレクタ９２１へと４つの値の組がそれぞれ出力される。【０３５６】
また、セレクタ９２１には、選択信号として、ＡＮＤ回路９０３−０〜９０３−Ｎからの出力が入力される。ＡＮＤ回路９０３−０〜９０３−Ｎの出力はそれぞれ１ビットであるから、セレクタ９２１の選択信号は（Ｎ＋１）ビットである。また、明らかに、選択信号の（Ｎ＋１）ビットのうち論理値１となるのは、最大１ビットである。【０３５７】
選択信号の全ビットが論理値０の場合、セレクタ９２１は出力をネゲートする（すなわち、有効なデータを出力しない）。選択信号のビットｊ（０≦ｊ≦Ｎ）が論理値１のとき、セレクタ９２１はエントリ９０１−ｊから出力された４つの値の組を選択して信号線８１５へと出力する。例えば、「０」というリードポインタ値とリード指示がリードポインタ制御部４０７から出力されると、ＡＮＤ回路９０３−０の出力が論理値１となり、セレクタ９２１は保存番地００００用エントリ９０１−０からの出力を選択する。【０３５８】
信号線８１５は、ヘッダマージ部８０４へ接続された信号線８１６と、セレクタ８０５へ接続された信号線８１７に分岐している。そして、セレクタ９２１が出力する複製データＶＡＬＩＤフィールド９１７の値は、信号線８１５と信号線８１６、信号線８１７を介してそれぞれヘッダマージ部８０４、セレクタ８０５に出力される。セレクタ９２１が出力する複製パケットタイプフィールド９１８、複製パケット宛先ＩＤフィールド９１９、複製データステートフィールド９２０の値は、信号線８１５と信号線８１６を介してヘッダマージ部８０４に出力される。【０３５９】
ヘッダマージ部８０４は、リードポインタ値に対応するエントリ（９０１−０〜９０１−Ｎのいずれか）からセレクタ９２１を介して入力された各フィールドの値を、リード指示に応じてデータパケット保存部４１０から出力されたパケットにマージする。そして、ヘッダマージ部８０４は、マージして得られたパケットをセレクタ８０５に出力する。【０３６０】
例えば、データパケット保存部４１０に保存されている第１のパケットと同じデータペイロードを有する第２のパケットのヘッダの内容がｊ番目のエントリ９０１−ｊに記憶されており、第１のパケットの保存番地を指定するリード指示が発行される。すると、ヘッダマージ部８０４は、エントリ９０１−ｊからセレクタ９２１を介して入力された内容（すなわち、第２のパケットのヘッダに相当する情報）を、データパケット保存部４１０から出力される第１のパケットにマージする。【０３６１】
以上、図１８Ａと図１８Ｂを参照して７０２ｃｘの構成を説明した。続いて、出力バッファ制御部７０２ｃｘの動作を説明する。
図１９は、第１実施形態における出力バッファ制御部７０２ｃｘの動作を説明する図である。なお、要求パケットが入力された場合、出力バッファ制御部７０２ｃｘは比較例における図７の出力バッファ制御部２０７ｃａと同様に動作するので、説明は省略する。以下では、データパケットが出力バッファ制御部７０２ｃｘに入力された場合について説明する。【０３６２】
ステップＳ７０１で、ＣＰＵ１０４ｃが出力したデータパケットがルーティング部７０３によりルーティングされ、出力バッファ制御部７０２ｃｘに入力される。
すると、ステップＳ７０２で、データパケットのヘッダ内のパケットタイプがエンコーダ４０５と管理テーブル部８０１に出力される。また、ヘッダ内の要求元ＩＤとＲｅｑＩＤが管理テーブル部８０１と比較部８０２に出力される。さらに、ヘッダ内の宛先ＩＤとデータステートは管理テーブル部８０１に出力される。【０３６３】
次のステップＳ７０３では、ルーティング部７０３から入力されたのはデータパケットであるということを、エンコーダ４０５がパケットタイプの値から判断する。その結果、エンコーダ４０５は、データパケット用のライトポインタ制御部８０３にＶＡＬＩＤ信号を出力する。【０３６４】
また、ステップＳ７０４では、比較部８０２が、ステップＳ７０２で受け取った要求元ＩＤとＲｅｑＩＤの組を、管理テーブル部８０１内の各エントリ９０１−０〜９０１−Ｎから出力されている要求元ＩＤとＲｅｑＩＤの組と比較する。比較の結果、比較部８０２は、図１８Ｂに関して説明したように、（Ｎ＋１）個の出力を管理テーブル部８０１内の各エントリ９０１−０〜９０１−Ｎとライトポインタ制御部８０３内のＯＲ回路９５１に出力する。ステップＳ７０４はステップＳ７０３と並行して行われてもよい。【０３６５】
なお、図１８Ａに関して説明したように、管理テーブル部８０１内の各エントリ９０１−０〜９０１−Ｎ内からはＶＡＬＩＤフィールド９１４の値が比較部８０２へ出力されている。したがって、ステップＳ７０４では、ＶＡＬＩＤフィールド９１４の値が「有効」を示す論理値１であるエントリ内の要求元ＩＤとＲｅｑＩＤの組と、ステップＳ７０１で入力されたデータパケットの要求元ＩＤとＲｅｑＩＤの組とが比較される。【０３６６】
ステップＳ７０５では、データパケット用のライトポインタ制御部８０３が、ＯＲ回路９５１を用いて、比較部８０２からステップＳ７０４で出力された（Ｎ＋１）個の出力の論理和を求める。そして、ステップＳ７０３でエンコーダ４０５から出力されたＶＡＬＩＤ信号と、求めた論理和とに基づいて、ライトポインタ制御部８０３は、次のように動作する。【０３６７】
エンコーダ４０５からＶＡＬＩＤ信号が出力（アサート）されており、かつ、ＯＲ回路９５１が出力する論理和が論理値０である場合、ステップＳ７０１で入力されたデータパケットと同じデータペイロードを有するパケットは保存されていない。よって、ステップＳ７０１で入力されたデータパケットは破棄してはならない。【０３６８】
したがって、この場合、ライトポインタ制御部８０３は、ステップＳ７０１で入力されたデータパケットを現在使われていないデータパケット保存部４１０内のブロックに保存する処理を行う。すなわち、ライトポインタ制御部８０３は、図１８ＢのＦＦ９５５が保持するライトポインタ値を出力し、ライトポインタ値を更新する。ライトポインタ値の出力先は、管理テーブル部８０１、データパケット保存部４１０、および比較器４０３である。また、ライトポインタ制御部８０３は、管理テーブル部８０１とデータパケット保存部４１０へライト指示を出力する。【０３６９】
こうしてライトポインタ値とライト指示が出力された後は、データパケット保存部４１０がパケットを保存し、パケット間アービタ４０２が調停の結果としてポート間アービタ部５０７ｘへ出力リクエストを出力する。詳しくは、図７の比較例でステップＳ４０４ｄ〜Ｓ４０７として説明した動作と同様である。【０３７０】
また、ステップＳ７０５において、エンコーダ４０５からＶＡＬＩＤ信号が出力されており、かつ、ＯＲ回路９５１が出力する論理和が論理値１である場合、ステップＳ７０１で入力されたデータパケットと同じデータペイロードを有するパケットが保存されている。【０３７１】
したがって、この場合、ライトポインタ制御部８０３は、ステップＳ７０１で入力されたデータパケットのうち、後の復元で使うためのヘッダ情報のみを管理テーブル部８０１に記憶し、データパケットそのものは破棄する処理を行う。すなわち、ライトポインタ制御部８０３は、複製ライト指示を管理テーブル部８０１に出力する。【０３７２】
そして、ステップＳ７０６において管理テーブル部８０１は、ステップＳ７０２で入力された情報を適切なエントリ内に保存する。管理テーブル部８０１のステップＳ７０６における動作は、ライトポインタ制御部８０３から出力されるライト指示、複製ライト指示、およびライトポインタ値、ならびに比較部８０２から出力される（Ｎ＋１）個の比較結果に基づく。【０３７３】
具体的には、ステップＳ７０６における管理テーブル部８０１の動作は、ステップＳ７０５でライト指示と複製ライト指示のいずれが出力（アサート）されたかによって２通りに場合分けされる。図１８Ｂの説明から明らかなとおり、ライト指示と複製ライト指示は排他的であり、同時に論理値１になることはない。【０３７４】
ステップＳ７０５でライト指示が出力された場合、管理テーブル部８０１は、ライトポインタ値が示す番地用のエントリ内の要求元ＩＤフィールド９１５とＲｅｑＩＤフィールド９１６に、ステップＳ７０２で入力された要求元ＩＤとＲｅｑＩＤの値を記憶する。また、管理テーブル部８０１は、ライトポインタ値が示す番地に対応するエントリ内のＶＡＬＩＤフィールド９１４の値を論理値１にセットし、ライトポインタ値が示す番地に対応するエントリを有効にする。【０３７５】
ステップＳ７０５で複製ライト指示が出力された場合は、比較器９４１−０〜９４１−Ｎのいずれか１つが、ステップＳ７０４の比較の結果、一致を示す論理値１を出力した場合である。つまり、ステップＳ７０１で入力されたデータパケットと同じデータペイロードを有するパケットが保存されている番地が比較部８０２により検出された場合に、複製ライト指示が出力される。【０３７６】
この場合、管理テーブル部８０１は、判別された保存番地用のエントリ内の複製パケットタイプフィールド９１８、複製パケット宛先ＩＤフィールド９１９、および複製データステートフィールド９２０に、ステップＳ７０２で入力された値をそれぞれ記憶する。また、複製ライト指示が出力されると、管理テーブル部８０１は、比較部８０２により判別されたエントリ内の複製データＶＡＬＩＤフィールド９１７を論理値１にセットする。【０３７７】
このように、複製ライト指示が出力された場合は、ステップＳ７０１で入力されたパケットそのものはデータパケット保存部４１０に保存されず、破棄される。また、複製ライト指示が出力された場合は、図１８Ｂに示すようにライトポインタ値が更新されない。したがって、パケット間アービタ部４０１において改めて調停が行われることもなく、ポート間アービタ部５０７ｘへの新たな出力リクエストをパケット間アービタ４０２が出力することもない。こうして、ステップＳ７０５で複製ライト指示が出力された場合は、ステップＳ７０１でのパケットの入力を契機とする一連の処理が、ステップＳ７０６で終了する。【０３７８】
他方で、ステップＳ７０５でライト指示が出力された場合は、上記のように図７のステップＳ４０４ｄ〜Ｓ４０７と同様の動作が行われ、その後、ステップＳ７０７においてポート間アービタ部５０７ｘからデータパケットの出力許可が出力される。【０３７９】
するとステップＳ７０８でパケット間アービタ４０２は、図７のステップＳ４０９ｄと同様に、データパケットを出力するようパケット間セレクタ４３０に選択信号を出力し、データパケット用のリードポインタ制御部４０７にリードポインタ更新指示を出力する。【０３８０】
すると、ステップＳ７０９でリードポインタ制御部４０７は、リード指示とリードポインタ値を管理テーブル部８０１とデータパケット保存部４１０に出力し、リードポインタ値を更新する。また、リードポインタ制御部４０７は、更新後のリードポインタ値を比較器４０３へ出力する。【０３８１】
そして、ステップＳ７１０でデータパケット保存部４１０は、リード指示にしたがって、リードポインタ値が示す番地に保存されているパケットをヘッダマージ部８０４とセレクタ８０５に出力する。【０３８２】
また、ステップＳ７１１に示すように管理テーブル部８０１は、リード指示にしたがって、リードポインタ値が示す番地に対応するエントリ内のデータをヘッダマージ部８０４とセレクタ８０５に出力する。【０３８３】
具体的には、管理テーブル部８０１は、複製データＶＡＬＩＤフィールド９１７、複製パケットタイプフィールド９１８、複製パケット宛先ＩＤフィールド９１９、および複製データステートフィールド９２０の値をヘッダマージ部８０４に出力する。また、管理テーブル部８０１は、複製データＶＡＬＩＤフィールド９１７の値を選択信号としてセレクタ８０５に出力する。【０３８４】
出力された複製データＶＡＬＩＤフィールド９１７の値は、論理値０のとき、リードポインタ値により示されるデータパケット保存部４１０内の保存番地から読み出されたパケットそのものをセレクタ８０５が選択することを示す。逆に、出力された複製データＶＡＬＩＤフィールド９１７の値は、論理値１のとき、ヘッダマージ部８０４で生成される複製情報を持ったパケットをセレクタ８０５が選択することを示す。【０３８５】
ステップＳ７１１において管理テーブル部８０１はさらに、図１８ＡのＦＦ９０４とＦＦ９０５を用いて、リードポインタ値で示される保存番地用のエントリ内のＶＡＬＩＤフィールド９１４と複製データＶＡＬＩＤフィールド９１７の値を論理値０にリセットする。【０３８６】
なお、ステップＳ７１０とＳ７１１は並列に実行されてもよい。
そして、ステップＳ７１２においてヘッダマージ部８０４は、ステップＳ７１０で入力されたデータパケットのヘッダに、ステップＳ７１１で入力された４つのフィールドの情報を追加したパケットを生成し、セレクタ８０５に出力する。具体例は後述するが、ヘッダマージ部８０４は、例えば、ステップＳ７１０で入力されたデータパケットのヘッダの所定の位置に、４つのフィールドの情報を挿入することにより、パケットを生成する。【０３８７】
するとステップＳ７１３においてセレクタ８０５は、ステップＳ７１１で管理テーブル部８０１から出力された選択信号にしたがって、データパケット保存部４１０から入力されたパケットと、ヘッダマージ部８０４から入力されたパケットの一方を選択する。そして、セレクタ８０５は、選択したパケットをパケット間セレクタ４３０に出力する。【０３８８】
ここで、パケット間セレクタ４３０には、図７のステップＳ４０９ｒおよびＳ４０９ｄに関して説明したように、要求パケットとデータパケットのいずれを選択するのかを示す選択信号がパケット間アービタ４０２から入力されている。選択信号が、データパケットを選択することを示す値になると、ステップＳ７１４に示すように、パケット間セレクタ４３０は、セレクタ８０５から出力されたパケットを選択し、ポート間セレクタ５０８ｘへ出力する。【０３８９】
以上、図１９を参照して出力バッファ制御部７０２ｃｘの動作について説明した。なお、図１９の説明におけるデータパケットは、例えば、ライトバックデータパケットでもよく、共有型・転送データパケットでもよい。【０３９０】
また、図１６に示したＸＢ１０２内の出力バッファ制御部７１２ｃｅなども、図１７〜図１９を参照して説明した出力バッファ制御部７０２ｃｘと同様に構成されている。例えば、図１９は、ルーティング部７０３とポート間アービタ部５０７ｘとポート間セレクタ５０８ｘを、それぞれルーティング部７１３とポート間アービタ部２０５ｅとポート間セレクタ２０６ｅに置き換えれば、出力バッファ制御部７１２ｃｅを示す図となる。なお、以下の図に関しても同様に、出力バッファ制御部７０２ｃｘを中心にして説明を行うが、他の出力バッファ制御部についても同様である。【０３９１】
次に、より具体的な例として、図１４においてステップＳ６０４とＳ６０５が行われた場合のＳＣ１０３ｃ内の出力バッファ制御部７０２ｃｘの動作について、図２０〜図２２を参照して説明する。【０３９２】
図２０は、第１実施形態において先にライトバックデータパケットが入力されたときの出力バッファ制御部７０２ｃｘの動作の具体例を説明する図である。
図２０には、出力バッファ制御部７０２ｃｘ内のコンポーネントのうち、以下で説明するステップに関連するもののみを抜粋して示してある。また、図２０には、データパケット保存部４１０の詳細を示した。さらに、図２０では、管理テーブル部８０１内の各エントリ９０１−０〜９０１−Ｎを表形式で示した。【０３９３】
なお、以下では説明の便宜上、図２０の動作が開始される時点で、ライトポインタ制御部８０３のライトポインタ値とリードポインタ制御部４０７のリードポインタ値の初期値は、ともに「００００」であると仮定する。また、図２０の動作が開始される時点で、管理テーブル部８０１内のすべてのエントリ９０１−０〜９０１−Ｎにおいて、ＶＡＬＩＤフィールド９１４の初期値が、「無効」を示す論理値０であると仮定する。【０３９４】
ステップＳ８０１で、ＣＰＵ１０４ｃが出力したライトバックデータパケット６０１が図１５のＳＣ１０３ｃ内のルーティング部７０３によりルーティングされ、ＸＢ１０２と接続された出力ポート５０２ｘの前段の出力バッファ制御部７０２ｃｘに入力される。【０３９５】
するとステップＳ８０２で、ライトバックデータパケット６０１のパケットヘッダ情報６０５がエンコーダ４０５、管理テーブル部８０１、および比較部８０２へ出力される。
図１７に関して説明したように、具体的には、ライトバックデータパケット６０１のヘッダには、少なくとも、パケットタイプ、要求元ＩＤ、ＲｅｑＩＤ、宛先ＩＤ、およびデータステートのフィールドがある。【０３９６】
図２０の例では、パケットタイプの値は、ライトバックデータパケットであることを示す値である。
そして、図１４と同様に図２０も、ＣＰＵ１０４ａがメインメモリ１０５ｅ内のデータを要求したことを契機として、要求されたデータをキャッシュしているＣＰＵ１０４ｃがライトバックデータパケット６０１を出力する例を示す。したがって、ライトバックデータパケット６０１の要求元ＩＤの値はＣＰＵ１０４ａのＩＤである。また、宛先ＩＤの値は、メインメモリ１０５ｅと同じノード１０１ｅ内にあってメインメモリ１０５ｅを管理するＳＣ１０３ｅのＩＤである。【０３９７】
なお、ＲｅｑＩＤの値は、説明の便宜上、「５」であるとする。また、ライトバックデータパケット６０１ではデータステートが指定されないため、データステートの値は「なし」を示す値である。【０３９８】
ステップＳ８０２では、パケットタイプはエンコーダ４０５と管理テーブル部８０１に出力され、要求元ＩＤとＲｅｑＩＤは管理テーブル部８０１と比較部８０２に出力され、宛先ＩＤとデータステートは管理テーブル部８０１に出力される。【０３９９】
そして、ステップＳ８０３では、エンコーダ４０５が、受け取ったパケットタイプに基づいて、「ライトバックデータパケット６０１はデータパケットである」と判断し、データパケット用のライトポインタ制御部８０３にＶＡＬＩＤ信号を出力する。【０４００】
また、ステップＳ８０４では、比較部８０２が、受け取った要求元ＩＤとＲｅｑＩＤの値を、管理テーブル部８０１内の各エントリ９０１−０〜９０１−Ｎの要求元ＩＤフィールド９１５とＲｅｑＩＤフィールド９１６から出力される値とそれぞれ比較する。実際には、図１８Ａ〜図１９に関して説明したように、ＶＡＬＩＤフィールド９１４の値が「有効」を示す論理値１のエントリのみが比較対象である。【０４０１】
したがって、上記のとおり「すべてのエントリ９０１−０〜９０１−ＮにおいてＶＡＬＩＤフィールド９１４の値は論理値０である」という場合には、比較部８０２からの（Ｎ＋１）個の出力はすべて、「不一致」を示す論理値０である。図１８Ｂに示すように、比較部８０２はこの比較結果を管理テーブル部８０１とライトポインタ制御部８０３に出力する。【０４０２】
すると、ステップＳ８０５においてデータパケット用のライトポインタ制御部８０３は、比較部８０２からの（Ｎ＋１）個の出力の論理和を求める。求めた論理和は、ライトバックデータパケット６０１の要求元ＩＤおよびＲｅｑＩＤと一致する要求元ＩＤおよびＲｅｑＩＤを記憶する有効なエントリが管理テーブル部８０１に存在しないことを示す。また、上記ステップＳ８０３のとおり、エンコーダ４０５からはＶＡＬＩＤ信号が出力されている。【０４０３】
よって、ステップＳ８０５でライトポインタ制御部８０３は、管理テーブル部８０１とデータパケット保存部４１０にライト指示と「００００」というライトポインタ値を出力し、その後、ライトポインタ値を「０００１」に更新する。【０４０４】
するとステップＳ８０６で管理テーブル部８０１は、ライト指示にしたがい、入力されたライトポインタ値が示す「００００」という番地用のエントリ９０１−０において、３つのフィールドの値をセットする。【０４０５】
すなわち、管理テーブル部８０１は、エントリ９０１−０のＶＡＬＩＤフィールド９１４を、「有効」を示す論理値１にセットする。また、管理テーブル部８０１は、エントリ９０１−０の要求元ＩＤフィールド９１５に、ステップＳ８０２で入力されたＣＰＵ１０４ａのＩＤを保存する。さらに、管理テーブル部８０１は、エントリ９０１−０のＲｅｑＩＤフィールド９１６に、ステップＳ８０２で入力された「５」というＲｅｑＩＤの値を保存する。【０４０６】
また、ステップＳ８０７でデータパケット保存部４１０は、ライト指示にしたがい、入力されたライトポインタ値が示す「００００」という番地に、ライトバックデータパケット６０１を保存する。ステップＳ８０６とＳ８０７の実行順は任意であり、ステップＳ８０６とＳ８０７は並列に実行されてもよい。【０４０７】
また、ステップＳ８０８では、パケット間アービタ部４０１の比較器４０３が、データパケット用のライトポインタ値とリードポインタ値を比較する。ライトポインタ値は、ライトポインタ制御部８０３から受け取った更新後の「０００１」という値であり、リードポインタ値はリードポインタ制御部４０７から受け取った「００００」という値である。したがって、比較結果は「不一致」となり、比較器４０３はパケット間アービタ部４０１に出力リクエストを出力する。【０４０８】
すると、パケット間アービタ部４０１は、ステップＳ８０８で受け取った出力リクエストと要求パケットに関する出力リクエストとの間の調停を必要に応じて行った後、ステップＳ８０９で、ポート間アービタ部５０７ｘへ出力リクエストを出力する。【０４０９】
続いて、ステップＳ８０９の出力リクエストに対する出力許可が得られる前に、さらに共有型・転送データパケットが出力バッファ制御部７０２ｃｘに入力された場合について説明する。【０４１０】
図２１は、第１実施形態においてライトバックデータパケットの後から共有型・転送データパケットが入力されたときの出力バッファ制御部７０２ｃｘ内の管理テーブル部８０１の動作の具体例を説明する図である。なお、図２１には、出力バッファ制御部７０２ｃｘ内のコンポーネントのうち、以下で説明するステップに関連するもののみを抜粋して示してある。また、図２１では、管理テーブル部８０１内の各エントリ９０１−０〜９０１−Ｎを表形式で示した。【０４１１】
ステップＳ８１０で、図１５のＣＰＵ１０４ｃが出力した共有型・転送データパケット６０３がＳＣ１０３ｃ内のルーティング部７０３によりルーティングされ、ＸＢ１０２と接続された出力ポート５０２ｘの前段の出力バッファ制御部７０２ｃｘに入力される。【０４１２】
するとステップＳ８１１で、共有型・転送データパケット６０３のパケットヘッダ情報６０６が、エンコーダ４０５、管理テーブル部８０１、および比較部８０２へ出力される。【０４１３】
共有型・転送データパケット６０３は、ＣＰＵ１０４ａがメインメモリ１０５ｅ内のデータを要求したことを契機として、要求されたデータをキャッシュしているＣＰＵ１０４ｃが出力したパケットである。したがって、パケットヘッダ情報６０６において、パケットタイプの値は転送データパケットであることを示す値であり、要求元ＩＤと宛先ＩＤの値はＣＰＵ１０４ａのＩＤであり、ＲｅｑＩＤの値は図２０での仮定のとおり「５」である。また、パケットヘッダ情報６０６においてデータステートの値は、キャッシュプロトコルにしたがって、「共有型」を示す値であるとする。【０４１４】
ステップＳ８１１では、パケットタイプはエンコーダ４０５と管理テーブル部８０１に出力され、要求元ＩＤとＲｅｑＩＤは管理テーブル部８０１と比較部８０２に出力され、宛先ＩＤとデータステートは管理テーブル部８０１に出力される。【０４１５】
続いて、ステップＳ８１２でエンコーダ４０５が、受け取ったパケットタイプに基づいて、「共有型・転送データパケット６０３はデータパケットである」と判断し、データパケット用のライトポインタ制御部８０３にＶＡＬＩＤ信号を出力する。【０４１６】
また、ステップＳ８１３では比較部８０２が、受け取った要求元ＩＤとＲｅｑＩＤの値を、管理テーブル部８０１内の各エントリ９０１−０〜９０１−Ｎの要求元ＩＤフィールド９１５とＲｅｑＩＤフィールド９１６から出力される値とそれぞれ比較する。実際には、図２０の前提と図２０の動作から、ＶＡＬＩＤフィールド９１４の値が論理値１であるエントリ９０１−０のみが比較対象である。【０４１７】
図２０のステップＳ８０６の結果、エントリ９０１−０において要求元ＩＤフィールド９１５にはＣＰＵ１０４ａのＩＤが保存され、ＲｅｑＩＤフィールド９１６には「５」という値が保存されている。したがって、ステップＳ８１３では、比較部８０２は、エントリ９０１−０に対応する比較器９４１−０から「一致」を示す論理値１を出力し、他のエントリ９０１−１〜９０１−Ｎに対応する比較器９４１−１〜９４１−Ｎからは「不一致」を示す論理値０を出力する。これら（Ｎ＋１）個の比較結果の出力先は、管理テーブル部８０１とライトポインタ制御部８０３である。【０４１８】
すると、ステップＳ８１４においてデータパケット用のライトポインタ制御部８０３は、比較部８０２からの（Ｎ＋１）個の出力の論理和を求める。求めた論理和は、共有型・転送データパケット６０３の要求元ＩＤおよびＲｅｑＩＤと一致する要求元ＩＤおよびＲｅｑＩＤを記憶する有効なエントリが管理テーブル部８０１に存在することを示す。また、上記ステップＳ８１２のとおり、エンコーダ４０５からはＶＡＬＩＤ信号が出力されている。【０４１９】
よって、ステップＳ８１４でライトポインタ制御部８０３は、管理テーブル部８０１に複製ライト指示を出力する。換言すれば、ステップＳ８１４ではライト指示がネゲートされており、ライト指示がデータパケット保存部４１０に出力されない。したがって共有型・転送データパケット６０３そのものは、データパケット保存部４１０に保存されず、破棄される。【０４２０】
そして、ステップＳ８１５で管理テーブル部８０１は、ライトポインタ制御部８０３から出力された複製ライト指示と比較部８０２からの（Ｎ＋１）個の出力に基づいて、一致が検出されたエントリ９０１−０において、４つのフィールドの値をセットする。【０４２１】
すなわち、管理テーブル部８０１は、エントリ９０１−０の複製データＶＡＬＩＤフィールド９１７を、「有効」を示す論理値１にセットする。また、管理テーブル部８０１は、エントリ９０１−０の複製パケットタイプフィールド９１８に、ステップＳ８１１で入力された、転送データパケットを示す値を保存する。【０４２２】
さらに、管理テーブル部８０１は、エントリ９０１−０の複製パケット宛先ＩＤフィールド９１９に、ステップＳ８１１で入力されたＣＰＵ１０４ａのＩＤを保存する。また、管理テーブル部８０１は、エントリ９０１−０の複製データステートフィールド９２０に、ステップＳ８１１で入力された、「共有型」を示す値を保存する。【０４２３】
以上、図２０と図２１を参照して説明したように、第１実施形態によれば、第１のデータパケットに対する出力許可が得られる前に第２のデータパケットが入力されたとき、データパケット保存部４１０内の１つのブロックのみが使われる。比較例では図１３のとおり同じデータペイロードを持つ２つのパケットを保存するためにデータパケット保存部４１０の２つのブロックが使われるのと比較して、第１実施形態ではデータパケット保存部４１０に必要な記憶容量が２分の１に削減されている。【０４２４】
つまり、ＳＣ１０３ｃが同じノード１０１ｃ内のＣＰＵ１０４ｃ〜１０４ｄへ出力する共有型・データ転送要求パケットの最大アウトスタンディング数がＰのとき、比較例ではデータパケット保存部４１０に２Ｐブロックの容量が必要である。それに対し、第１実施形態では、データパケット保存部４１０にＰブロックの容量が必要である。【０４２５】
なお、第１実施形態では、比較例には存在しない管理テーブル部８０１が設けられており、管理テーブル部８０１内にはＦＦなどの記憶素子により実現されるエントリ９０１−０〜９０１−Ｎが含まれる。しかしながら、一般にパケットのヘッダはデータペイロードよりも十分に短い。よって、管理テーブル部８０１のために付加的に必要となる記憶容量を考慮しても、第１実施形態の方が比較例よりも出力バッファ制御部に必要な記憶容量が大幅に少ない。よって、データパケット保存部４１０だけではなく出力バッファ制御部全体で必要な記憶容量で比較したとしても、第１実施形態は比較例の約２分の１の容量しか必要としない。【０４２６】
続いて、図２１のステップＳ８１４の後でポート間アービタ部５０７ｘから出力許可が下りたときの動作、すなわち図１９のステップＳ７０７〜Ｓ７１４の具体例を説明する。
図２２は、第１実施形態において図２１の処理により共有型・転送データパケットが破棄された後にポート間アービタ部５０７ｘから出力許可が下りたときの出力バッファ制御部内７０２ｃｘのヘッダマージ部８０４の動作の具体例を説明する図である。図２２には、出力バッファ制御部７０２ｃｘ内のコンポーネントのうち、以下で説明するステップに関連するもののみを抜粋して示してある。また、図２２にはヘッダマージ部８０４の動作を示す模式図を含む。【０４２７】
ステップＳ９０１で、ポート間アービタ部５０７ｘからパケット間アービタ４０２に対して、出力許可が出力される。
するとステップＳ９０２でパケット間アービタ４０２は、データパケットを出力するよう指示するパケット間セレクタ４３０に選択信号を出力するとともに、データパケット用のリードポインタ制御部４０７へリードポインタ更新指示を出力する。【０４２８】
続いて、ステップＳ９０３でリードポインタ制御部４０７は、リードポインタ更新指示にしたがって、まずリード指示と「００００」というリードポインタ値を管理テーブル部８０１とデータパケット保存部４１０に出力した後、リードポインタ値を更新する。そして、リードポインタ制御部４０７は、更新後のリードポインタ値「０００１」を比較器４０３に出力する。【０４２９】
ここで、図２０のステップＳ８０５においてライトポインタ値は「０００１」に更新されているため、ステップＳ９０３の実行によりリードポインタ値とライトポインタ値が一致する。したがって、リードポインタの更新により、比較器４０３はパケット間アービタ４０２への出力リクエストをネゲートするようになる。つまり、比較器４０３からパケット間アービタ４０２へ、出力リクエストが出力されないようになる。【０４３０】
したがって、もし要求パケットに関して比較器４０４がパケット間アービタ４０２へ出力リクエストを出力していなければ、パケット間アービタ４０２からポート間アービタ部５０７ｘへの出力リクエストも出力されないようになる。【０４３１】
また、ステップＳ９０４でデータパケット保存部４１０は、ステップＳ９０３で入力されたリード指示とリードポインタ値にしたがい、リードポインタ値が示す番地「００００」に保存されているパケットをヘッダマージ部８０４とセレクタ８０５に出力する。なお、図２０に関して説明したように、「００００」番地「００００」にはライトバックデータパケット６０１が保存されている。【０４３２】
また、ステップＳ９０５で管理テーブル部８０１は、ステップＳ９０３で入力されたリード指示にしたがい、リードポインタ値が示す番地「００００」用のエントリ９０１−０に保存されている４つのフィールドの値をヘッダマージ部８０４に出力する。【０４３３】
すなわち、管理テーブル部８０１は、エントリ９０１−０の複製データＶＡＬＩＤフィールド９１７、複製パケットタイプフィールド９１８、複製パケット宛先ＩＤフィールド９１９、および複製データステートフィールド９２０の値をヘッダマージ部８０４に出力する。これらのフィールドの値は、図２１に関して説明したとおり、それぞれ、「有効」を示す論理値１、転送データパケットを示す値、ＣＰＵ１０４ａのＩＤ、「共有型」を示す値である。また、以上４つのフィールドの値を、以下ではまとめて複製情報６０７とよぶことがある。【０４３４】
また、ステップＳ９０５で管理テーブル部８０１はさらに、リードポインタ値が示す「００００」なる番地用のエントリ９０１−０の複製データＶＡＬＩＤフィールド９１７の値である論理値１をセレクタ８０５に出力する。そして、図１８Ａに示したように管理テーブル部８０１は、ＦＦ９０５の出力をリセット信号として用いて、エントリ９０１−０の複製データＶＡＬＩＤフィールド９１７を、「無効」を示す論理値０にリセットする。【０４３５】
なお、ステップＳ９０４とＳ９０５の実行順は任意であり、ステップＳ９０４とＳ９０５が並列に実行されてもよい。
続いて、ステップＳ９０６でヘッダマージ部８０４は、ステップＳ９０４でデータパケット保存部４１０から出力されたライトバックデータパケット６０１のヘッダに、ステップＳ９０５で管理テーブル部８０１から出力された複製情報６０７を追加する。ヘッダマージ部８０４は、複製情報６０７の追加により、複製情報を持ったライトバックデータパケット６０８を生成し、セレクタ８０５に出力する。【０４３６】
例えば、ライトバックデータパケット６０１のヘッダは、パケットタイプ、宛先ＩＤ、要求元ＩＤ、ＲｅｑＩＤ、データステート、アドレス、その他のフィールドを含む。また、ヘッダの末尾には１つ以上の予約（reserved）フィールドがあってもよい。なお、ヘッダ内のアドレスフィールドは、データペイロードに含まれるデータが記憶されているメインメモリのアドレスを示す。【０４３７】
ヘッダマージ部８０４は、ライトバックデータパケット６０１のヘッダの所定の位置に複製情報６０７を挿入する。例えば、図２２の例では「所定の位置」とはヘッダの末尾の予約フィールドの直前の位置だが、「所定の位置」は実施形態に応じて任意に定めることができる。【０４３８】
複製情報を持ったライトバックデータパケット６０８のヘッダでは、図２２に示すように、ライトバックデータパケット６０１に元々含まれていたパケットタイプ、宛先ＩＤ、要求元ＩＤ、ＲｅｑＩＤ、データステート、アドレス、およびその他のフィールドの後に、複製情報６０７に相当する４つのフィールドが続く。そして最後に、ライトバックデータパケット６０１に元々含まれていた予約フィールドがある。複製情報を持ったライトバックデータパケット６０８のデータペイロードは、ライトバックデータパケット６０１のデータペイロードそのものである。【０４３９】
換言すれば、複製情報を持ったライトバックデータパケット６０８は、ライトバックデータパケット６０１のヘッダの情報と、共有型・転送データパケット６０３のヘッダの情報とを含む。さらに、複製情報を持ったライトバックデータパケット６０８は、ライトバックデータパケット６０１と共有型・転送データパケット６０３に共通のデータペイロードを含む。【０４４０】
ここで、セレクタ８０５には、データパケット保存部４１０からライトバックデータパケット６０１が入力され、ヘッダマージ部８０４から複製情報を持ったライトバックデータパケット６０８が入力されている。ステップＳ９０７では、セレクタ８０５が、ステップＳ９０５で管理テーブル部８０１から出力された選択信号としての複製データＶＡＬＩＤフィールド９１７の値にしたがって、複製情報を持ったライトバックデータパケット６０８を選択し、パケット間セレクタ４３０に出力する。【０４４１】
そして、ステップＳ９０８においてパケット間セレクタ４３０は、ステップＳ９０２で入力された選択信号に基づいて、データパケットを選択する。すなわち、パケット間セレクタ４３０は、セレクタ８０５からの入力である複製情報を持ったライトバックデータパケット６０８を選択してポート間セレクタ５０８ｘへと出力する。【０４４２】
なお、ポート間アービタ部５０７ｘは、ステップＳ９０１で出力バッファ制御部７０２ｃｘに対する出力許可を出力した時点で、出力バッファ制御部７０２ｃｘを選択するよう指示する選択信号をポート間セレクタ５０８ｘに出力している。したがって、ステップＳ９０８でパケット間セレクタ４３０からポート間セレクタ５０８ｘに出力された複製情報を持ったライトバックデータパケット６０８は、ポート間セレクタ５０８ｘで選択され、図１５の出力ポート５０２ｘへ出力される。そして、複製情報を持ったライトバックデータパケット６０８は、出力ポート５０２ｘからバス１０８ｃを介して、図１６に示すＸＢ１０２の入力ポート２０１ｃへと出力される。【０４４３】
ここで、比較例においては、図１２と図１３に示すように、データパケット保存部４１０に個々に保存されていたライトバックデータパケット６０１と共有型・転送データパケット６０３が個々にＳＣ１０３ｃからバス１０８ｃを介してＸＢ１０２へ出力される。それに対し、第１実施形態では、上記のとおり、１つの複製情報を持ったライトバックデータパケット６０８がＳＣ１０３ｃからバス１０８ｃを介してＸＢ１０２へ出力されるだけである。したがって、第１実施形態によれば、データパケットの出力によるバス１０８ｃの占有時間を比較例の約２分の１に短縮することができる。【０４４４】
なお、複製情報を持ったライトバックデータパケット６０８は、追加された複製情報６０７のぶん、ライトバックデータパケット６０１や共有型・転送データパケット６０３よりもパケット長が長い。しかし、一般には、ヘッダの長さがデータペイロードの長さより十分に短いようなパケット形式が採用されることが多い。したがって、複製情報を持ったライトバックデータパケット６０８の長さは、ライトバックデータパケット６０１の長さと共有型・転送データパケット６０３の長さの和の、約２分の１である。【０４４５】
バス１０８ｃの占有時間が短縮されると、図１５のＳＣ１０３ｃにおいて各出力バッファ制御部７０２ｃｘ、７０２ｄｘ、５０９ｉｘ、および５０９ｓｘがポート間アービタ部５０７ｘへ出力リクエストを出力してから出力許可が下りるまでの待ち時間が短縮される。したがって、第１実施形態によれば、比較例と比べて、サーバシステム１００全体としてのレイテンシおよびスループットが改善される。つまり、第１実施形態によれば、サーバシステム１００の性能が向上する。【０４４６】
続いて、図２２のようにしてＸＢ１０２へ出力された、複製情報を持ったライトバックデータパケット６０８の、ＸＢ１０２における復元について、ＸＢ１０２内のコンポーネントの詳細とともに、図２３〜図２９を参照して説明する。【０４４７】
図２３は、第１実施形態における複製チェック部１００１、データパケット復元部１００２、セレクタ１００３、およびルーティング部７１３の構成を示す図である。図２３は、図１６に示すＸＢ１０２においてＳＣ１０３ｃに対応する部分を抜粋して示した図である。【０４４８】
つまり、図２３は、図１６においてＳＣ１０３ｃと接続された入力ポート２０１ｃからルーティング部７１３へ至る経路上に設けられた複製チェック部１００１とデータパケット復元部１００２とセレクタ１００３とを示している。また、図２３には、ルーティング部７１３の一部（具体的には、入力ポート２０１ｃが受け取ったパケットのルーティングに関わる部分）を抜粋して示してある。【０４４９】
なお、図２３と同様の複製チェック部１００１とデータパケット復元部１００２とセレクタ１００３が、図１６において他のＳＣ１０３ａ、１０３ｅ、および１０３ｇに対応して設けられている。また、ルーティング部７１３は、４つのＳＣ１０３ａ〜１０３ｇに関して対称的に構成されている。【０４５０】
さらに、図２３と同様の複製チェック部１００１とデータパケット復元部１００２とセレクタ１００３が、図１５において入力ポート５０１ｘからルーティング部７０３に至る経路上に設けられている。また、ＳＣ１０３ｃ内のルーティング部７０３の詳細の図示は省略したが、ルーティング部７１３の構成とともにルーティング部７０３の構成についても後述する。【０４５１】
図２３において、ＳＣ１０３ｃと接続された入力ポート２０１ｃからルーティング部７１３へ至る経路上には、複製チェック部１００１とデータパケット復元部１００２とセレクタ１００３とが設けられている。また、複製チェック部１００１はルーティングテーブル部７１１ｃと接続されている。ルーティングテーブル部７１１ｃの詳細は、図２５とともに後述する。【０４５２】
複製チェック部１００１は、パケットタイプチェック部１００４と複製チェック部１００５と比較器１００６を備える。また、データパケット復元部１００２は複製データパケット修正部１００７とヘッダ復元部１００８とデータパケット生成部１００９を備える。【０４５３】
そして、ルーティング部７１３は、比較例における図６のルーティング部２０３と同様の分岐部３０６を備え、さらに、分岐部１０１０、ＯＲ回路１０１１、ＯＲ回路１０１２、およびＯＲ回路１０１３を備える。ただし、図６の分岐部３０６は出力バッファ制御部２０７ｃａ、２０７ｃｅ、および２０７ｃｇに接続されているが、分岐部３０６はＯＲ回路１０１１、１０１２、および１０１３に接続されている。そして、ＯＲ回路１０１１、１０１２、および１０１３がそれぞれに対応する出力バッファ制御部７１２ｃａ、７１２ｃｅ、および７１２ｃｇに接続されている。【０４５４】
入力ポート２０１ｃから入力されたパケットの全部または一部は、以下のようにして各部に入力される。
入力ポート２０１ｃに接続された信号線１０２１には、入力ポート２０１ｃがＳＣ１０３ｃから受け取ったパケットが出力される。信号線１０２１は信号線１０２２と信号線１０２３に分岐している。信号線１０２２は分岐してセレクタ１００３と複製データパケット修正部１００７に接続されており、信号線１０２２を介してパケットがセレクタ１００３と複製データパケット修正部１００７に出力される。【０４５５】
また、信号線１０２１から分岐した信号線１０２３を介して、複製チェック部１００１にはパケットに含まれるヘッダ情報が出力される。信号線１０２３はさらに信号線１０２４と信号線１０２５に分岐し、信号線１０２５は信号線１０２６と信号線１０２７に分岐する。信号線１０２４を介してヘッダ情報のうちパケットタイプフィールドの値がパケットタイプチェック部１００４に出力される。【０４５６】
また、信号線１０２６を介してヘッダ情報のうち複製データＶＡＬＩＤフィールドの値が複製チェック部１００５に出力され、信号線１０２７を介してヘッダ情報のうち宛先ＩＤフィールドと複製宛先フィールドの値がルーティングテーブル部７１１ｃに出力される。【０４５７】
なお、入力ポート２０１ｃが受け取ったパケットは、例えば要求パケットである場合などでは、複製データＶＡＬＩＤフィールドや複製パケット宛先ＩＤフィールドを持たない。その場合、信号線１０２６を介して複製チェック部１００５には、ダミーの値として論理値０が出力される。また、信号線１０２７を介してルーティングテーブル部７１１ｃには、例えば、宛先ＩＤとして存在しないダミーの値が出力されてもよい。例えば、すべてのビットが論理値０の値を宛先ＩＤとして用いないことが予め決められていれば、ダミーの値としてすべてのビットが論理値０の値を用いることができる。【０４５８】
このようなダミーの値の出力は、パケットの形式を定める仕様に応じて、適宜実現可能である。
例えば、任意の用途に使用してよいオプション領域がヘッダに含まれる形式のパケットが、サーバシステム１００において用いられてもよい。そして、図２２に示した複製データＶＡＬＩＤ、複製パケットタイプ、複製パケット宛先ＩＤ、および複製データステートの各フィールドは、オプション領域を使ったものであってもよい。例えば、オプション領域は、未使用の場合には「０」で埋められると仕様で決まっていてもよい。【０４５９】
この場合、例えば、信号線１０２３が信号線１０２１から分岐する点が例えば上記（ｅ２）のように実現されていれば、上記のような必要に応じたダミーの値の出力が実現される。【０４６０】
あるいは、ヘッダ長を示すフィールドを含む形式のパケットが用いられ、例えば上記（ｅ３）で説明したように、信号線１０２３が信号線１０２１から分岐する点に不図示の回路素子があってもよい。当該回路素子は、ヘッダ長を示すフィールドの値に応じて、入力ポート２０１ｃから出力されたパケットに複製データＶＡＬＩＤフィールドや複製パケット宛先ＩＤフィールドがあるか否かを判断し、必要に応じてダミーのデータを出力してもよい。【０４６１】
また、分岐した信号線１０２２は、上記のとおり複製データパケット修正部１００７に接続するだけでなく、さらに信号線１０２８と信号線１０２９へと分岐し、それぞれヘッダ復元部１００８とデータパケット生成部１００９へと接続している。信号線１０２２を介して出力されるパケットのうち、ヘッダが信号線１０２８を介してヘッダ復元部１００８へと出力され、データペイロードがデータパケット生成部１００９へと出力される。【０４６２】
以上、複製チェック部１００１とデータパケット復元部１００２とセレクタ１００３とルーティング部７１３の構成の概要を説明するとともに、図２３において入力ポート２０１ｃと直接接続されている各コンポーネントへの入力について説明した。続いて、図２３に示した各コンポーネントの動作について、図２４を参照して詳しく説明する。【０４６３】
図２４は、第１実施形態における複製チェック部、データパケット復元部、およびセレクタの動作を説明する図である。
まず、メモリアクセス要求パケットや、データ転送要求パケットなどの要求パケット（すなわち、データペイロードを持たないパケット）が入力ポート２０１ｃに入力された場合の動作を説明する。要求パケットを処理する動作の流れは、図２４において実線矢印により示される。【０４６４】
ステップＳ１００１ｒにおいて、入力ポート２０１ｃが要求パケットを出力する。
するとステップＳ１００２ｒにおいて、要求パケットのヘッダ内の宛先ＩＤフィールドがルーティングテーブル部７１１ｃに出力されるとともに、ヘッダ内のパケットタイプフィールドがパケットタイプチェック部１００４に出力される。また、上記のように複製データＶＡＬＩＤフィールドと複製パケット宛先ＩＤフィールドのダミーの値が出力されてもよい。【０４６５】
ここで、パケットタイプチェック部１００４は、図示したように、入力されたパケットタイプの値がデータパケットを示す値であるか否かを判断する判断部１１０１を備えている。ステップＳ１００３ｒにおいて判断部１１０１は、入力されたパケットタイプの値をエンコードすることで、入力されたパケットがデータパケットであると判断する。【０４６６】
するとステップＳ１００４ｒで判断部１１０１は、セレクタ１００３に対し、複製データパケット修正部１００７からの入力ではなく、図２３の信号線１０２２を介して入力ポート２０１ｃから入力されたパケットをそのまま出力するよう命令する選択信号を出力する。選択信号にしたがい、セレクタ１００３は入力ポート２０１ｃから入力されたパケットをルーティング部７１３の分岐部３０６に出力する。【０４６７】
また、入力されたパケットタイプの値が要求パケットを示すので、ステップＳ１００４ｒで判断部１１０１はさらに、複製チェック部１００５へ出力するＶＡＬＩＤ信号をネゲートする。【０４６８】
また、ステップＳ１００５ｒでルーティングテーブル部７１１ｃは、図２３の信号線１０２７を介して入力された宛先ＩＤに基づいて、入力されたパケットのルーティング先を決定し、出力ポート情報をルーティング部７１３の分岐部３０６に出力する。ステップＳ１００５ｒは、ステップＳ１００３ｒ〜Ｓ１００４ｒと並列に実行されてもよい。【０４６９】
そして、分岐部３０６は、出力ポート情報に基づいて、入力された要求パケットをＯＲ回路１０１１、１０１２、または１０１３に出力する。
ＯＲ回路１０１１、１０１２、または１０１３を介してのパケットのルーティングの詳細は図２６とともに後述するが、概略を述べると次のとおりである。例えば、出力先が図１６の出力ポート２０２ｃである要求パケットは、ステップＳ１００５ｒで決定された出力ポート情報にしたがい、出力ポート２０２ｃの前段の出力バッファ制御部７１２ｃａと接続されたＯＲ回路１０１１へと出力される。このとき、後述するように分岐部１０１０からＯＲ回路１０１１へは論理値０で埋められたデータが出力される。したがって、分岐部３０６が出力した要求パケットがＯＲ回路１０１１を介して出力バッファ制御部７１２ｃａへと出力される。【０４７０】
また、宛先ＩＤから出力ポート情報を取得するためのルーティングテーブル部７１１ｃの内部の構成は、図６のルーティングテーブル部２０４ｃと類似である。ルーティングテーブル部７１１ｃの構成の詳細については、図２５とともに後述する。【０４７１】
以上のとおり、入力ポート２０１ｃから要求パケットが出力された場合は、データパケット復元部１００２を使わずにルーティングが行われる。
続いて、ライトバックデータパケットや転送データパケットなどのデータパケット（すなわち、データペイロードを持つパケット）が入力ポート２０１ｃに入力された場合の動作を説明する。データパケットを処理する動作の流れは、図２４において１点鎖線矢印により示される。【０４７２】
ステップＳ１００１ｄにおいて、入力ポート２０１ｃがデータパケットを出力する。
するとステップＳ１００２ｄにおいて、データパケットのヘッダ内の宛先ＩＤフィールドと複製パケット宛先ＩＤフィールドがルーティングテーブル部７１１ｃに出力される。また、ヘッダ内のパケットタイプフィールドがパケットタイプチェック部１００４に出力される。さらに、複製データＶＡＬＩＤフィールドが複製チェック部１００５に出力される。なお、上記のように、入力されたデータパケットが複製データＶＡＬＩＤフィールドや複製パケット宛先ＩＤフィールドを持たない場合は、ダミーの値が使われてもよい。【０４７３】
そして、ステップＳ１００３ｄではパケットタイプチェック部１００４内の判断部１１０１が、入力されたパケットがデータパケットであると判断する。
するとステップＳ１００４ｄで判断部１１０１は、入力されたパケットがデータパケットであることを示すＶＡＬＩＤ信号を複製チェック部１００５に出力（アサート）する。第１実施形態では、ＶＡＬＩＤ信号は正論理の信号なので、ステップＳ１００４ｄでは論理値１が複製チェック部１００５に出力される。なお、データパケットが入力された場合のステップＳ１００４ｄでは、判断部１１０１は、セレクタ１００３への選択信号を無効な値に設定する。それにより、判断部１１０１は、後述する比較器１００６からの選択信号のみにしたがって動作するよう、セレクタ１００３に命令する。【０４７４】
そして、ステップＳ１００５ｄで複製チェック部１００５は、「入力されたデータパケットからの復元が必要か否かを判断するための比較を、比較器１００６が行う必要があるか否か」を判断する。ここで、ステップＳ１００５ｄの判断について説明するため、データパケットが入力される場合を次の（ｊ１）〜（ｊ３）に場合分けする。【０４７５】
（ｊ１）入力されたパケットが有効な複製情報を持たないパケットである場合。
例えば、ＳＣ１０３ｃ内の出力バッファ制御部７０２ｃｘにおいて、図２０の処理の後、かつ、図２１と同様の共有型・転送データパケット６０３が入力される前に、ポート間アービタ部５０７ｘから出力許可が出力されたとする。すると、図２２のような複製情報６０７の追加が行われないので、ＸＢ１０２内の入力ポート２０１ｃに入力されたデータパケットは、有効な複製情報を持たない。【０４７６】
（ｊ２）入力されたパケットが有効な複製情報を持ち、かつ、宛先ＩＤフィールドに対応する出力ポートと、複製宛先ＩＤフィールドに対応する出力ポートが等しい場合。
例えば、ＣＰＵ１０４ｅを宛先とする共有型・転送データパケットとＳＣ１０３ｅを宛先とするライトバックデータパケットから、図２０〜図２２と類似の処理により、複製情報を持ったデータパケットが生成されることがある。こうして生成されたパケットが入力ポート２０１ｃに入力された場合、宛先ＩＤフィールドに対応する出力ポートと複製宛先ＩＤフィールドに対応する出力ポートは、ともに図１６の出力ポート２０２ｅであり、等しい。【０４７７】
（ｊ３）入力されたパケットが有効な複製情報を持ち、かつ、宛先ＩＤフィールドに対応する出力ポートと、複製宛先ＩＤフィールドに対応する出力ポートが異なる場合。
例えば、図２０〜図２２の処理により生成された、図２２の複製情報を持ったライトバックデータパケット６０８が、入力ポート２０１ｃに入力された場合が、（ｊ３）には含まれる。【０４７８】
第１実施形態では、上記（ｊ１）と（ｊ２）の場合には、入力されたパケットそのものをルーティング部７１３がルーティングする。なぜなら、（ｊ１）の場合はそもそも復元の必要がないためである。また、（ｊ２）の場合は、より後の時点で復元する方が、ＸＢ１０２の内部バスや、ＸＢ１０２とＳＣとの間のバス（上記の例ではＳＣ１０３ｅとの間のバス１０８ｅ）の占有時間を短縮することができるためである。【０４７９】
逆に、（ｊ３）の場合には、入力されたパケットからデータパケット復元部１００２が２つのパケットを復元し、復元された２つのパケットをルーティング部７１３がルーティングする。つまり、（ｊ３）の場合にのみ復元が必要である。【０４８０】
ここで、入力されたパケットの複製ＶＡＬＩＤフィールドの値が「無効」を示す場合は、上記（ｊ１）に相当し、そもそもパケットの復元とは無関係である。よって、比較器１００６による比較を行うまでもなく、復元は不要であると直ちに判明する。【０４８１】
しかし、入力されたパケットの複製ＶＡＬＩＤフィールドの値が「有効」を示す場合は、上記（ｊ２）と（ｊ３）のいずれであるのかによって、復元の要否が異なる。そして、上記（ｊ２）と（ｊ３）を弁別するには、宛先ＩＤフィールドに対応する出力ポートと、複製宛先ＩＤフィールドに対応する出力ポートを比較する必要がある。つまり、入力されたパケットの復元が必要か否かを判断するためには、比較器１００６による比較が必要である。【０４８２】
比較器１００６による比較が必要であるか否かを決定するため、複製チェック部１００５は、図２４に示すようにＡＮＤ回路１１０２を備えている。ＡＮＤ回路１１０２への入力は、図２３の信号線１０２６を介して入力される複製ＶＡＬＩＤフィールドの値と、パケットタイプチェック部１００４の判断部１１０１が出力するＶＡＬＩＤ信号である。なお、要求パケットが入力された場合は、比較器１００６による比較は当然不要である。【０４８３】
ステップＳ１００５ｄにおいて、ＡＮＤ回路１１０２の出力は、上記（ｊ１）の場合に論理値０となり、上記（ｊ２）または（ｊ３）の場合に論理値１となる。ＡＮＤ回路１１０２の出力は比較器１００６に入力される。【０４８４】
すなわち、比較器１００６による比較が必要なとき、複製チェック部１００５のＡＮＤ回路１１０２は、正論理のＶＡＬＩＤ信号を比較器１００６に出力する。
また、ステップＳ１００６ｄに示すように、ルーティングテーブル部７１１ｃは、ステップＳ１００２ｄで入力された宛先ＩＤフィールドと複製宛先ＩＤフィールドの値に基づいて、出力ポート情報と複製データパケット出力ポート情報を出力する。【０４８５】
なお、「出力ポート情報」とは、比較例と同様に、宛先ＩＤフィールドで指定された宛先に対応する出力ポートを識別する情報である。また、「複製データパケット出力ポート情報」とは、複製パケット宛先ＩＤフィールドで指定された宛先に対応する出力ポートを識別する情報である。【０４８６】
ここで、ルーティングテーブル部７１１ｃの詳細な構成を示した図２５を参照して、ステップＳ１００６ｄにおけるルーティングテーブル部７１１ｃの動作を説明する。
図２５は、第１実施形態におけるルーティングテーブル部７１１ｃの構成図である。ルーティングテーブル部７１１ｃは、図１６および図２３に示すように、ＳＣ１０３ｃから他のＳＣへのルーティングを管理するためのコンポーネントである。【０４８７】
ルーティングテーブル部７１１ｃは、比較例において図６に示したルーティングテーブル部２０４ｃと同様のＦＦ３０７ａ〜３０７ｌと、比較器３０８ａ〜３０８ｌと、ＯＲ回路３０９ａ〜３０９ｃと、セレクタ３１０と、ＦＦ３１１ａ〜３１１ｃを備える。比較例と同様に、ＦＦ３０７ａ〜３０７ｌはそれぞれパケットの宛先となりうるＣＰＵ１０４ａなどのコンポーネントのＩＤを格納しており、ＦＦ３１１ａ〜３１１ｃは出力ポート２０２ａ、２０２ｅ、２０２ｇを識別する情報を格納している。【０４８８】
したがって、ルーティングテーブル部７１１ｃは、入力された宛先ＩＤフィールドの値に応じて、比較例のルーティングテーブル部２０４ｃと同様に、セレクタ３１０から出力ポート情報を出力する。【０４８９】
また、ルーティングテーブル部７１１ｃはさらに、１２個の比較器１２０１ａ〜１２０１ｌと、３個のＯＲ回路１２０２ａ〜１２０２ｃと、セレクタ１２０３を備える。
１２個の比較器１２０１ａ〜１２０１ｌには、１２組のＦＦ３０７ａ〜３０７ｌが保持する値がそれぞれ入力される。また、１２個の比較器１２０１ａ〜１２０１ｌの各々には、複製宛先ＩＤフィールドの値が入力される。比較器１２０１ａ〜１２０１ｌは、それぞれ２つの入力を比較し、２つの入力が一致すれば論理値１を出力し、２つの入力が一致しなければ論理値０を出力する。【０４９０】
ＯＲ回路１２０２ａは、比較器１２０１ａ〜１２０１ｄの出力の論理和をセレクタ１２０３に出力する。ＯＲ回路１２０２ｂは、比較器１２０１ｅ〜１２０１ｈの出力の論理和をセレクタ１２０３に出力する。ＯＲ回路１２０２ｃは、比較器１２０１ｉ〜１２０１ｌの出力の論理和をセレクタ１２０３に出力する。【０４９１】
したがって、セレクタ１２０３には、最大１ビットが論理値１となる合計３ビットの制御信号が入力される。セレクタ１２０３は、論理値１のビットの位置に応じて、ＦＦ３１１ａ〜３１１ｃが保持する出力ポート情報のいずれかを選択し、複製データパケット出力ポート情報として出力する。【０４９２】
すなわち、セレクタ１２０３は、ＯＲ回路１２０２ａの出力が論理値１のとき、ＦＦ３１１ａが保持する値を選択する。また、セレクタ１２０３は、ＯＲ回路１２０２ｂの出力が論理値１のとき、ＦＦ３１１ｂが保持する値を選択し、ＯＲ回路１２０２ｃの出力が論理値１のとき、ＦＦ３１１ｃが保持する値を選択する。【０４９３】
このように、図２５のルーティングテーブル部７１１ｃは、比較例と同様に宛先ＩＤから出力ポート情報を取得する回路と、複製宛先ＩＤから複製データパケット出力ポート情報を取得する回路とを有し、後者の構成は前者と同様である。また、前者と後者の回路は、宛先のコンポーネントを識別する情報を保持するＦＦ３０７ａなどの記憶素子と、ポートを識別する情報を保持するＦＦ３１１ａなどの記憶素子を共有している。図１５のルーティングテーブル部７０１ｘも図２５と同様に構成されている。【０４９４】
ここで図２４の説明に戻ると、ステップＳ１００６ｄでルーティングテーブル部７１１ｃは、出力ポート情報を比較器１００６と分岐部３０６に出力するとともに、複製データパケット出力ポート情報を比較器１００６と分岐部１０１０に出力する。なお、ステップＳ１００６ｄは、ステップＳ１００４ｄ〜Ｓ１００５ｄと並列に実行されてもよい。【０４９５】
続いて、ステップＳ１００７ｄで比較器１００６は、複製チェック部１００５からのＶＡＬＩＤ信号、ならびにルーティングテーブル部７１１ｃからの出力ポート情報および複製データパケット出力ポート情報に基づいて、比較操作を実行する。比較器１００６は、比較結果を選択信号としてセレクタ１００３と分岐部１０１０に出力する。【０４９６】
つまり、複製チェック部１００５からＶＡＬＩＤ信号がアサートされており、かつ、出力ポート情報と複製データパケット出力ポート情報が一致しない場合、比較器１００６は、データパケット復元部１００２からの出力を選択するよう指示する選択信号を出力する。それ以外の場合、比較器１００６は、データパケット復元部１００２からの出力を選択しないよう指示する選択信号を出力する。【０４９７】
換言すれば、比較器１００６は、上記（ｊ３）の場合、データパケット復元部１００２からの出力を選択するよう指示する選択信号を出力する。また、比較器１００６は、上記（ｊ１）または（ｊ２）の場合、データパケット復元部１００２からの出力を選択しないよう指示する選択信号を出力する。【０４９８】
なお、データパケットが入力された場合、パケットタイプチェック部１００４からセレクタ１００３への出力は上記のとおり無効な値なのでセレクタ１００３では無視される。よって、セレクタ１００３は比較器１００６からの選択信号のみにしたがって、入力ポート２０１ｃから図２３の信号線１０２２を介して入力されたパケットまたはデータパケット復元部１００２内の複製データパケット修正部１００７から入力されたパケットを選択する。そして、セレクタ１００３は、選択したパケットを分岐部３０６に出力する。【０４９９】
また、分岐部１０１０は、データパケット復元部１００２からの出力を選択しないよう指示された場合、すべてのビットを論理値０としたデータを出力する。
続いて、上記ステップＳ１００２ｄ〜Ｓ１００７ｄと並行してデータパケット復元部１００２で実行されるステップＳ１００８ｄ〜Ｓ１０１０ｄについて説明する。なお、以下で説明するステップＳ１００８ｄ〜Ｓ１０１０ｄは、上記（ｊ３）の場合の動作である。上記（ｊ３）の場合以外では、下記の理由から、データパケット復元部１００２の動作は後段のセレクタ１００３およびルーティング部７１３の動作に影響しない。【０５００】
要求パケットが入力された場合または上記（ｊ１）の場合には、セレクタ１００３でデータパケット復元部１００２からの出力が選択されることがない。そして、データパケット復元部１００２からの出力を選択しないよう指示する選択信号を比較器１００６が分岐部１０１０に出力している。【０５０１】
また、上記（ｊ２）の場合は、下記と同様にデータパケット復元部１００２での復元が行われる。しかし、上記のとおり分岐部１０１０の出力の各ビットは論理値０であるため、データパケット復元部１００２からの出力は、分岐部１０１０を介してＯＲ回路１０１１、１０１２、あるいは１０１３へ伝達されることはない。【０５０２】
よって、以下では（ｊ３）の場合に注目してデータパケット復元部１００２の動作を説明する。
上記（ｊ３）の場合、ステップＳ１００１ｄで入力ポート２０１ｃから出力されるのは、複製情報を持ったデータパケットである。そこで、ステップＳ１００８ｄでは、複製データパケット修正部１００７に、入力ポート２０１ｃから出力されたデータパケットが出力される。また、ヘッダ復元部１００８には、入力ポート２０１ｃから出力されたデータパケットのヘッダが出力される。そして、データパケット生成部１００９には、入力ポート２０１ｃから出力されたデータパケットのデータペイロードが出力される。【０５０３】
すると、ステップＳ１００９ｄで複製データパケット修正部１００７は、入力されたパケットのヘッダから複製情報を削除したパケットを生成してセレクタ１００３に出力する。つまり、複製データパケット修正部１００７は、図１７のヘッダマージ部８０４でマージされる前の元の２つのパケットのうち、先に出力バッファ制御部（例えば７０２ｃｘ）のデータパケット保存部４１０に保存されていた方のパケットを復元する。【０５０４】
また、ステップＳ１０１０ｄでヘッダ復元部１００８は、入力されたヘッダから、復元しようとする元のデータパケットのヘッダを生成して復元する。つまり、ヘッダ復元部１００８は、元の２つのパケットのうち、後から出力バッファ制御部（例えば７０２ｃｘ）に入力されて破棄された方のパケットのヘッダを復元する。ヘッダ復元部１００８は、復元したヘッダをデータパケット生成部１００９に出力する。なお、ステップＳ１００９ｄとＳ１０１０ｄは並列に実行されてもよい。【０５０５】
そして、ステップＳ１０１１ｄでデータパケット生成部１００９は、ヘッダ復元部１００８から入力されたヘッダと、図２３の信号線１０２９を介して入力されたデータペイロードとをマージする（すなわち連結する）ことによりパケットを生成する。すなわち、データパケット生成部１００９は、元の２つのパケットのうち、後から出力バッファ制御部（例えば７０２ｃｘ）に入力されて破棄された方のパケットを復元する。データパケット生成部１００９は、復元したパケットをルーティング部７１３の分岐部１０１０に出力する。【０５０６】
以上から、上記（ｊ３）の場合は、複製データパケット修正部１００７からの出力がセレクタ１００３と分岐部３０６を介してルーティングされ、データパケット生成部１００９からの出力が分岐部１０１０を介してルーティングされる。【０５０７】
また、上記（ｊ３）の場合には、分岐部３０６におけるルーティング先と分岐部１０１０におけるルーティング先が異なる。よって、復元された２つのパケットがともに同じ１つのＯＲ回路（１０１１〜１０１３のいずれか）に入力されることはありえない。そのため、第１実施形態では、セレクタではなくより構造が単純なＯＲ回路を用いてルーティング部７１３を構成することが可能となっている。【０５０８】
続いて、図２０〜図２２の処理によりＳＣ１０３ｃ内の出力バッファ制御部７０２ｃｘから出力された、複製情報を持ったライトバックデータパケット６０８が、ＸＢ１０２の入力ポート２０１ｃに入力されたという具体例について、図２６を参照して説明する。【０５０９】
図２６は、第１実施形態において複製情報を持ったライトバックデータパケット６０８から元の２つのパケットを復元して２つのパケットをルーティングする動作の具体例を説明する図である。【０５１０】
図２２の処理によって生成された、複製情報を持ったライトバックデータパケット６０８が、ステップＳ１１０１でＸＢ１０２の入力ポート２０１ｃから出力される。
すると、複製情報を持ったライトバックデータパケット６０８の全体が複製データパケット修正部１００７へ出力される。また、複製情報を持ったライトバックデータパケット６０８のヘッダのみがヘッダ復元部１００８へ出力される。そして、複製情報を持ったライトバックデータパケット６０８のデータペイロードがデータパケット生成部１００９へ出力される。【０５１１】
また、ステップＳ１１０２では、複製情報を持ったライトバックデータパケット６０８のヘッダ内のいくつかのフィールドの値が下記のように出力される。
・宛先ＩＤフィールドの値と複製パケット宛先ＩＤフィールドの値がルーティングテーブル部７１１ｃに出力される。図２２に示すとおり、宛先ＩＤフィールドはＳＣ１０３ｅのＩＤを示し、複製パケット宛先ＩＤフィールドはＣＰＵ１０４ａのＩＤを示す。【０５１２】
・パケットタイプフィールドの値がパケットタイプチェック部１００４に出力される。図２２に示すとおり、パケットタイプフィールドは、ライトバックデータパケットであることを示す。【０５１３】
・複製データＶＡＬＩＤフィールドの値が複製チェック部１００５に出力される。図２２に示すとおり、複製データＶＡＬＩＤフィールドの値は、「有効」を示す論理値１である。【０５１４】
すると、ステップＳ１１０３でパケットタイプチェック部１００４は、入力されたパケットタイプをエンコードし、その結果、ステップＳ１１０１で入力された複製情報を持ったライトバックデータパケット６０８がデータパケットであると判断する。よって、パケットタイプチェック部１００４は、複製チェック部１００５にＶＡＬＩＤ信号を出力する。【０５１５】
すると、ステップＳ１１０４で複製チェック部１００５は、パケットタイプチェック部１００４から入力されたＶＡＬＩＤ信号と、ステップＳ１１０２で入力された複製データＶＡＬＩＤの論理積を求め、比較器１００６に出力する。換言すれば、この例では求めた論理積の値は論理値１であるから、複製チェック部１００５は比較器１００６にＶＡＬＩＤ信号を出力（アサート）する。【０５１６】
また、ステップＳ１１０５に示すようにルーティングテーブル部７１１ｃは、入力された宛先ＩＤ（すなわちＳＣ１０３ｅのＩＤ）から、出力ポート２０２ｅを識別する情報を出力ポート情報として取得し、出力ポート情報を分岐部３０６に出力する。さらに、ルーティングテーブル部７１１ｃは、入力された複製パケット宛先ＩＤ（すなわちＣＰＵ１０４ａのＩＤ）から、出力ポート２０２ａを識別する情報を複製データパケット出力ポート情報として取得し、分岐部１０１０に出力する。【０５１７】
また、ステップＳ１１０６で比較器１００６は、ルーティングテーブル部７１１ｃから出力された出力ポート情報と複製データパケット出力ポート情報を比較する。その結果、出力ポート情報と複製データパケット出力ポート情報が不一致であるため、比較器１００６は、データパケット復元部１００２から出力されるパケットを選択するようにセレクタ１００３と分岐部１０１０に選択信号を出力する。【０５１８】
また、ステップＳ１１０７で複製データパケット修正部１００７は、図２２に示した複製情報を持ったライトバックデータパケット６０８のヘッダから、追加された複製情報６０７を削除することにより、図２０のライトバックデータパケット６０１を復元する。以下では元のパケットと復元されたパケットを区別するため、復元後のライトバックデータパケットの参照符号を「６０９」とする。【０５１９】
複製データパケット修正部１００７は、復元したライトバックデータパケット６０９をセレクタ１００３に出力する。
ステップＳ１１０７の詳細を図２７に示す。すなわち、図２７は、第１実施形態における複製データパケット修正部１００７の動作の具体例を説明する図である。【０５２０】
図２２に示したように、複製情報を持ったライトバックデータパケット６０８のヘッダの所定の位置（具体的には、ヘッダ末尾の予約フィールドの直前の位置）には、複製情報６０７が含まれる。複製情報６０７は、具体的には、複製データＶＡＬＩＤ、複製パケットタイプ、複製パケット宛先ＩＤ、複製データステートという４個のフィールドを有する。ステップＳ１１０７において複製データパケット修正部１００７は、複製情報を持ったライトバックデータパケット６０８からヘッダ内の複製情報６０７を削除することによってライトバックデータパケット６０９を生成する。【０５２１】
ここで図２６の説明に戻ると、ステップＳ１１０８でヘッダ復元部１００８は、入力されたヘッダ内から、図２１に示した元の共有型・転送データパケット６０３のヘッダを生成し、データパケット生成部１００９に生成したヘッダを出力する。【０５２２】
ステップＳ１１０８の詳細を図２８に示す。図２８は、第１実施形態におけるヘッダ復元部１００８の動作の具体例を説明する図である。
図２８に示すように、ヘッダ復元部１００８は、複製情報を持ったライトバックデータパケット６０８のヘッダ内のフィールドの一部を取り出して適切に並べ替えることで、図２１の元の共有型・転送データパケット６０３のヘッダを復元する。【０５２３】
具体的には、ヘッダ復元部１００８は、複製情報を持ったライトバックデータパケット６０８のヘッダから、下記の各フィールドを取り出し、下記のリスト順に並べることで、元の共有型・転送データパケット６０３のヘッダを生成し、復元する。なお、下記リストにおいて括弧内に値を示した。【０５２４】
・複製パケットタイプ（転送データパケットであることを示す値）
・複製パケット宛先ＩＤ（ＣＰＵ１０４ａのＩＤ）
・要求元ＩＤ（ＣＰＵ１０４ａのＩＤ）
・ＲｅｑＩＤ（５）
・複製データステート（「共有型」を示す値）
・アドレスその他の不図示のフィールド
・末尾の予約フィールド
ここで、複製情報を持ったライトバックデータパケット６０８の複製パケットタイプ、複製パケット宛先ＩＤ、および複製データステートは、元の共有型・転送データパケット６０３のパケットタイプ、宛先ＩＤ、およびデータステートを複製したものである。【０５２５】
また、図２０〜図２２に示したように、元のライトバックデータパケット６０１と共有型・転送データパケット６０３は、同じ１つの転送データ要求パケットに起因してＣＰＵ１０４ｃにより出力される。したがって、両者において必然的に、要求元ＩＤ、ＲｅｑＩＤ、およびアドレスという３個のフィールドの値は等しい。また、第１実施形態では、その他の予約フィールドや特に図示しないフィールドの値も、ライトバックデータパケット６０１と共有型・転送データパケット６０３で共通であるとする。【０５２６】
したがって、ヘッダ復元部１００８は、上記のように複製情報を持ったライトバックデータパケット６０８のヘッダ内のフィールドの一部を取り出して必要に応じて並べ替えることで、共有型・転送データパケット６０３のヘッダを復元することができる。ヘッダ復元部１００８は、復元したヘッダ６１１をデータパケット生成部１００９に出力する。【０５２７】
ここで図２６の説明に戻ると、ステップＳ１１０９でデータパケット生成部１００９は、ヘッダ復元部１００８から出力された、復元したヘッダ６１１と、入力ポート２０１ｃから出力されたデータペイロードとをマージする。それにより、データパケット生成部１００９は、元の共有型・転送データパケット６０３を復元する。以下では元のパケットと復元されたパケットを区別するため、復元後の共有型・転送データパケットの参照符号を「６１３」とする。【０５２８】
ステップＳ１１０９の詳細を図２９に示す。図２９は、第１実施形態におけるデータパケット生成部１００９の動作の具体例を説明する図である。
図２９に示すように、データパケット生成部１００９には、復元したヘッダ６１１とデータペイロード６１２が入力される。データパケット生成部１００９は、復元したヘッダ６１１の後にデータペイロード６１２を連結することで共有型・転送データパケット６１３を生成し、共有型・転送データパケット６１３を分岐部１０１０に出力する。【０５２９】
ここで図２６の説明に戻る。ステップＳ１１１０でセレクタ１００３は、ステップＳ１００６で入力された選択信号にしたがい、ステップＳ１１０７でデータパケット復元部１００２の複製データパケット修正部１００７から入力されたライトバックデータパケット６０９を選択する。セレクタ１００３は、選択したライトバックデータパケット６０９をルーティング部７１３の分岐部３０６に出力する。【０５３０】
すると、ステップＳ１１１１で分岐部３０６は、ステップＳ１１０５で入力された出力ポート情報にしたがい、入力されたライトバックデータパケット６０９を、ＯＲ回路１０１２に出力する。【０５３１】
上記のとおり、複製情報を持ったライトバックデータパケット６０８の宛先ＩＤであるＳＣ１０３ｅのＩＤから得られた出力ポート情報は、ＳＣ１０３ｅと接続された出力ポート２０２ｅを識別する情報である。したがって、分岐部３０６は、入力されたライトバックデータパケット６０９を、出力ポート２０２ｅの前段に設けられた出力バッファ制御部７１２ｃｅと接続されたＯＲ回路１０１２に出力する。【０５３２】
なお、分岐部３０６は、ルーティングテーブル部７１１ｃからの出力ポート情報により選択しなかったＯＲ回路へは、パケットのビット数分の論理値０を出力する。また、分岐部１０１０は、データパケット復元部１００２からの出力を選択するよう比較器１００６から命令された場合、複製データパケット出力ポート情報により選択しなかったＯＲ回路へは、パケットのビット数分の論理値０を出力する。そして、上記のとおり、（ｊ３）の場合、出力ポート情報と複製データパケット出力ポート情報は排他的である。【０５３３】
したがって、ＯＲ回路１０１２は、分岐部３０６から出力されたライトバックデータパケット６０９の各ビットと論理値０との論理和を求めることにより、実質的にはライトバックデータパケット６０９を出力バッファ制御部７１２ｃｅへルーティングする。【０５３４】
その結果、復元されたライトバックデータパケット６０９が出力バッファ制御部７１２ｃｅを介して出力ポート２０２ｅへとさらにルーティングされ、ＳＣ１０３ｅへ出力される。【０５３５】
また、ステップＳ１１１２で分岐部１０１０は、ステップＳ１１０５で入力された複製データパケット出力ポート情報にしたがい、入力された共有型・転送データパケット６１３を、ＯＲ回路１０１１に出力する。【０５３６】
上記のとおり、複製情報を持ったライトバックデータパケット６０８の複製パケット宛先ＩＤは、ＣＰＵ１０４ａのＩＤである。よって、ＣＰＵ１０４ａのＩＤから得られた複製データパケット出力ポート情報は、ＣＰＵ１０４ａと同じノード１０１ａのＳＣ１０３ａと接続された、出力ポート２０２ａを識別する情報である。【０５３７】
したがって、分岐部１０１０は、入力された共有型・転送データパケット６１３を、出力ポート２０２ａの前段に設けられた出力バッファ制御部７１２ｃａと接続されたＯＲ回路１０１１へ出力する。【０５３８】
ここで、上記のとおり分岐部３０６は、選択しなかったＯＲ回路１０１１には論理値０で埋めたデータを出力している。よって、ＯＲ回路１０１１は、分岐部１０１０から出力された共有型・転送データパケット６１３の各ビットと論理値０との論理和を求めることにより、実質的には共有型・転送データパケット６１３を出力バッファ制御部７１２ｃａへルーティングする。【０５３９】
その結果、復元された共有型・転送データパケット６１３が出力バッファ制御部７１２ｃａを介して出力ポート２０２ａへとさらにルーティングされ、ＳＣ１０３ａへ出力される。【０５４０】
以上、図２６〜図２９を参照して、複製情報を持ったライトバックデータパケット６０８からライトバックデータパケット６０９と共有型・転送データパケット６１３を復元してそれぞれルーティングする処理について説明した。【０５４１】
なお、図２６においては、いくつかのステップについての処理が並列に実行されてもよい。例えば、複製チェック部１００１とルーティングテーブル部７１１ｃにおける処理は、データパケット復元部１００２における処理と並列に実行されてもよい。また、ステップＳ１１１１とＳ１１１２のルーティングは並列に実行されてもよい。【０５４２】
また、図１５に示したように、各ＳＣ１０３ａ〜１０３ｇでＸＢ１０２と接続された入力ポート５０１ｘからルーティング部７０３へ至る経路上にも、上記と同様の複製チェック部１００１、データパケット復元部１００２およびセレクタ１００３が設けられている。また、例えば図１５のＳＣ１０３ｃルーティング部７０３は、比較例と比べて、入力ポート５０１ｘに対応した部分が異なる。【０５４３】
具体的には、図２３と同様に、ルーティング部７０３において、比較例と同様の分岐部３０６と各出力バッファ制御部５０９ｘｃ、５０９ｘｄ、５０９ｘｉ、および５０９ｘｓとの間に、それぞれＯＲ回路が設けられる。つまり、比較例と比べ、新たに４つのＯＲ回路が追加されている。【０５４４】
また、ルーティング部７０３は、図２３の分岐部１０１０と類似の新たな分岐部を有する。この新たな分岐部は、入力ポート５０１ｘに対応して設けられたデータパケット復元部１００２から復元されたパケットを受け取るとともに、複製チェック部１００１およびルーティングテーブル部７０１ｘから制御信号を受け取る。また、この新たな分岐部は、図２３と同様に、上記４つのＯＲ回路とそれぞれ接続されている。【０５４５】
しかし、ルーティング部７０３は、入力ポート５０１ｃ、５０１ｄ、および５０１ｉ、ならびにＳＣ内制御回路５０４に対応した部分は、比較例と同様である。
以上、図１４〜図２９を参照して第１実施形態について説明した。【０５４６】
なお、ＣＰＵ１０４ｃなどの演算処理装置とＸＢ１０２などのデータ転送装置の間でのデータ（例えばパケット形式のデータ）の転送を制御するＳＣ１０３ｃなどの制御装置に注目して第１実施形態を概観すれば下記のとおりである。【０５４７】
すなわち、上記制御装置は、演算処理装置から出力された第１のパケットを保存するデータパケット保存部４１０などの保存手段を有する。第１実施形態では、保存手段としてのデータパケット保存部４１０に必要な容量が、上記のとおり比較例の約２分の１で済む。【０５４８】
また、上記制御装置は、第１の判断手段を実現するコンポーネントとして、例えば図１７〜図１８Ｂに示す管理テーブル部８０１、比較部８０２、およびライトポインタ制御部８０３を備える。第１の判断手段は、第１のパケットのヘッダと、第１のパケットより後に演算処理装置から受け取った第２のパケットのヘッダを比較する。パケットはデータの具体例であり、ヘッダはデータの制御情報の具体例である。上記の比較により、第１の判断手段は、第１のパケットと第２のパケットが同じデータペイロードを有する第１の場合であるか否かを判断する。データペイロードはデータ本体部の具体例である。【０５４９】
また、管理テーブル部８０１、比較部８０２、およびライトポインタ制御部８０３は、協働して次のような管理手段としても機能する。すなわち、管理手段は、第１の場合は、第２のパケットのヘッダの一部を第１のパケットと関連づけて複製情報として保存する。また、管理手段は、第１の場合に第２のパケットを破棄してもよい。また、管理手段は、第１の場合以外である第２の場合は、保存手段としてのデータパケット保存部４１０に第２のパケットを保存させる。【０５５０】
そして、保存手段に保存されたパケットのデータ転送装置（例えばＸＢ１０２）への出力を制御する制御手段として、第１実施形態では、例えば以下のコンポーネントが協働している。すなわち、ＸＢ１０２へのパケットの出力を制御する制御手段として、少なくとも図１７のポート間アービタ部５０７ｘ、ポート間セレクタ５０８ｘ、制御部４００、およびパケット間セレクタ４３０が協働している。また、第１実施形態ではさらにセレクタ８０５も制御手段の一部として機能している。データ転送装置としてのＸＢ１０２へのデータ（例えばパケット）の出力は、データ転送装置へのデータの出力を許可する出力許可に応じて制御されてもよい。【０５５１】
なお、第１実施形態では、ヘッダマージ部８０４が、図２２の複製情報を持ったライトバックデータパケット６０８のような第３のパケットを上記第１の場合に生成する生成手段としても機能する。【０５５２】
そして、上記制御手段として機能する制御部４００内の管理テーブル部８０１およびセレクタ８０５は、上記第１の場合には生成手段としてのヘッダマージ部８０４が生成した第３のパケットをデータ転送装置に出力するよう制御する。また、上記制御手段としての管理テーブル部８０１およびセレクタ８０５は、上記第２の場合には保存手段としてのデータパケット保存部４１０が保存する上記第１と第２のパケットの双方をデータ転送装置に出力するよう制御する。【０５５３】
また、第１実施形態では、第１の判断手段としての管理テーブル部８０１、比較部８０２、およびライトポインタ制御部８０３では、要求元ＩＤとＲｅｑＩＤに基づく判断が行われる。要求元ＩＤは、パケットの出力の起因となる要求を出力した要求元装置を識別する要求元識別情報の一例である。また、ＲｅｑＩＤは、要求元識別情報により識別される１つの要求元装置における複数の要求を識別する要求識別情報の一例である。【０５５４】
また、上記管理手段の一部として機能する管理テーブル部８０１は、例えば図１８Ａのエントリ９０１−０〜９０１−Ｎにより実現される管理記憶部を備える。そして、上記第１の場合には、上記第１のパケットが保存されたデータパケット保存部４１０上のアドレスと関連づけられた管理記憶部のエントリに複製情報を保存することにより、管理手段としての管理テーブル部８０１は、複製情報を第１のパケットと関連づける。【０５５５】
また、ＳＣ１０３ｃなどの制御装置は、図１５に示すように、さらに第２の判断手段としての複製チェック部１００１と、復元手段としてのデータパケット復元部１００２を備えてもよい。【０５５６】
また、ＸＢ１０２などのデータ転送装置に注目して第１実施形態を概観すれば下記のとおりである。
すなわち、ＸＢ１０２などのデータ転送装置は、例えばＳＣ１０３ａ〜１０３ｇなどの複数の装置と接続され、それら複数の装置間でのデータの転送を行う。【０５５７】
データ転送装置は、前記複数の装置のうちの１つから出力されたパケットを前記複数の装置のうちの他の１つへ送信する（すなわちルーティングする）ための送信手段として、図１６や図２３に示したルーティング部７１３を備える。【０５５８】
また、図１６に示したＸＢ１０２内の各出力バッファ制御部には、上記のＳＣに注目した観点で説明したのと同様の意味で、保存手段、判断手段、管理手段、および制御手段として機能する各コンポーネントが含まれる。さらに、第１実施形態では、生成手段としてのヘッダマージ部８０４も、ＸＢ１０２内の各出力バッファ制御部が備えている。【０５５９】
また、図１６と図２３に示すように、ＸＢ１０２は、入力されたパケットが同じデータペイロードを有する２つのパケットから生成された複製データパケットであるか否かを判断する判断手段としての複製チェック部１００１を備える。また、ＸＢ１０２は、復元手段としてのデータパケット復元部１００２も備える。そして、送信手段としてのルーティング部７１３は、複製チェック部１００１の判断に基づいてデータの送信（具体的にはパケットのルーティング）を行う。【０５６０】
具体的には、第１実施形態では、判断手段としての複製チェック部１００１は、入力されたパケットが複製データパケットであるか否かだけではなく、元の２つのパケットは同じ装置に送信するものであるか否かについても判断する。【０５６１】
そして、元の２つのパケットは同じ装置に送信する（つまりルーティングする）ものであると複製チェック部１００１が判断した場合、送信手段としてのルーティング部７１３は入力された複製データパケットそのものを送信する。逆に、元の２つのパケットは同じ装置に送信するものではないと複製チェック部１００１が判断した場合は、送信手段としてのルーティング部７１３は、復元された元の２つのパケットをそれぞれの送信先に送信する。【０５６２】
以上、制御装置としてのＳＣ１０３ａ〜１０３ｇに注目した観点と、データ転送装置としてのＸＢ１０２に注目した観点から第１実施形態を概観した。
続いて、図３０を参照して、第２実施形態について説明する。第２実施形態も第１実施形態と同様に、例えば図１のように構成されたサーバシステム１００に適用される。【０５６３】
図３０は、第２実施形態におけるＣＰＵ１０４ｃの構成図である。説明の簡略化のため、第２実施形態では、他のＣＰＵ１０４ａ、１０４ｂ、１０４ｄ〜１０４ｈも図３０と同様に構成されているものとする。【０５６４】
第２実施形態におけるＣＰＵ１０４ｃはマルチコアＣＰＵであり、具体的にはデュアルコアＣＰＵである。すなわち、演算処理装置であるＣＰＵ１０４ｃは、演算処理部であるＣＰＵコア１３０１ａと１３０１ｂを含む。ＣＰＵコア１３０１ａと１３０１ｂはそれぞれ、不図示の命令フェッチ制御部、分岐予測部、命令デコード部、ＡＬＵ（Arithmetic Logic Unit）などの命令実行部、およびレジスタなどを備える。アーキテクチャによっては、ＣＰＵコア１３０１ａと１３０１ｂは、さらにアウトオブオーダ実行のためのリザベーションステーションなどを備えていてもよい。【０５６５】
ＣＰＵコア１３０１ａと１３０１ｂはそれぞれ、不図示のキャッシュメモリを備える。キャッシュメモリは階層化されていてもよい。例えば、Ｌ１（レベル１）キャッシュが各ＣＰＵコア１３０１ａと１３０１ｂに個別に設けられ、Ｌ２（レベル２）キャッシュが両ＣＰＵコア１３０１ａと１３０１ｂで共有されていてもよい。Ｌ２キャッシュを各ＣＰＵコア１３０１ａと１３０１ｂに個別に設ける構成も可能である。なお、データキャッシュと命令キャッシュが分かれていてもよい。【０５６６】
また、ＣＰＵ１０４ｃは、同じノード１０１ｃ内のＳＣ１０３ｃとのインタフェイスとして、入力ポート１３０２と出力ポート１３０３を備える。入力ポート１３０２と出力ポート１３０３は、ＣＰＵ１０４ｃとＳＣ１０３ｃの動作周波数の違いに応じた「周波数乗り換え」と呼ばれる周波数の変換などを行ってもよい。【０５６７】
第１実施形態では、パケットの宛先ＩＤや要求元ＩＤとしてＣＰＵ１０４ｃのＩＤが使われるが、第２実施形態では、ＣＰＵ１０４ｃのＩＤではなく、ＣＰＵコア１３０１ａまたはＣＰＵコア１３０１ｂのＩＤが宛先ＩＤや要求元ＩＤとして使われる。したがって、ＣＰＵ１０４ｃは、ＳＣ１０３ｃから入力ポート１３０２を介して入力されるパケットを、宛先ＩＤに応じてＣＰＵコア１３０１ａまたは１３０１ｂに振り分けるための回路を有する。【０５６８】
ところで、第１実施形態では、同じデータペイロードを有するデータパケットの組として、ＳＣの１つを宛先とするライトバックデータパケットと、ＣＰＵの１つを宛先とする共有型・転送データパケットを想定している。サーバシステム１００の仕様により、それ以外の組み合わせで、同じデータペイロードを有するデータパケットの組が存在する場合にも第１実施形態は適用可能である。同様に、第２実施形態は、２つの異なるＣＰＵコアを宛先とし、互いに同じデータペイロードを有するデータパケットの組が存在する場合にも適用可能である。【０５６９】
なぜなら、第２実施形態では、上記のパケットを振り分けるための回路が、以下の各コンポーネントを含むからである。
・図２３と同様の複製チェック部１００１、データパケット復元部１００２、およびセレクタ１００３
・図２５のルーティングテーブル部７１１ｃと類似の構成を有し、出力ポートの代わりに出力先のＣＰＵコア（１３０１ａまたは１３０１ｂ）を指定する情報を、宛先ＩＤと複製宛先ＩＤにそれぞれ対応して取得する情報ルーティングテーブル部１３０４
・図２３の分岐部１０１０と同様の分岐部１３０５ａ
・図２３の分岐部３０６と同様の分岐部１３０５ｂ
・図２３のＯＲ回路１０１１〜１０１３と同様のＯＲ回路１３０６ａ〜１３０６ｂ
したがって、入力ポート１３０２から入力されたパケットが複製情報を持っていなければ、宛先ＩＤにしたがってＣＰＵコア１３０１ａまたは１３０１ｂに出力される。また、入力ポート１３０２から入力されたパケットが複製情報を持っていれば、元の２つのパケットが復元されて、それぞれＣＰＵコア１３０１ａと１３０１ｂに出力される。【０５７０】
また、ＣＰＵ１０４ｃは、出力ポート１３０３の前段に、ＣＰＵコア１３０１ａ用の出力バッファ制御部１３０７ａと、ＣＰＵコア１３０１ｂ用の出力バッファ制御部１３０７ｂと、アービタ部１３０８と、コア間セレクタ１３０９とを備える。【０５７１】
出力バッファ制御部１３０７ａは、ＣＰＵコア１３０１ａから出力されたパケットを一時的に保存するバッファを含み、具体的には、第１実施形態の図１７の出力バッファ制御部７０２ｃｘと同様の構成を有する。出力バッファ制御部１３０７ｂも同様である。【０５７２】
また、アービタ部１３０８は、出力バッファ制御部１３０７ａと１３０７ｂの間の調停を行う。アービタ部１３０８は、例えば第１実施形態における図１５のポート間アービタ部５０７ｘや図１６のポート間アービタ部２０５ｅと同様である。【０５７３】
コア間セレクタ１３０９は、アービタ部１３０８の調停の結果にしたがって、出力バッファ制御部１３０７ａと１３０７ｂからの出力の一方を選択して出力ポート１３０３に出力する。コア間セレクタ１３０９は、例えば第１実施形態における図１５のポート間セレクタ５０８ｘや図１６のポート間セレクタ２０６ｅと同様である。【０５７４】
また、第２実施形態におけるＸＢ１０２は、第１実施形態における図１６のＸＢ１０２と同様に構成されている。
そして、第２実施形態におけるＳＣ１０３ｃは、下記の点において第１実施形態と異なる。すなわち、図３０のＣＰＵ１０４ｃと接続されたＳＣ１０３ｃは、図１５における入力ポート５０１ｃとルーティング部７０３の間に、図２３と同様の複製チェック部１００１、データパケット復元部１００２、およびセレクタ１００３を備える。そして、ＣＰＵ１０４ｃに対応するルーティングテーブル部５０６ｃは、ルーティングテーブル部７０１ｘと同様の構成のものに置き換えられる。【０５７５】
なお、ＣＰＵ１０４ｃ以外の他のＣＰＵも図３０と同様に構成されていてもよく、それに応じて各ＳＣ内のコンポーネントが適宜変形されてもよい。
上記のような第２実施形態によっても、サーバシステム１００内でのデータの授受のために用いられるパケットを一時的に保存するためのバッファの容量を削減し、サーバシステム１００内のバスの占有時間を短縮するという効果が得られる。【０５７６】
なお、本発明は上記の実施形態に限られるものではなく、例えば下記のように様々に変形して実施することが可能である。
第１および第２実施形態は、図１に示した構成のサーバシステム１００への適用例である。しかし、サーバシステム１００に含まれるノードの数や、各ノード内のＣＰＵの数は任意である。【０５７７】
また、サーバシステム１００はｃｃＮＵＭＡ（Cache Coherent Non-Uniform Memory Access）システムの一例だが、ＳＭＰ（Symmetric Multiple Processor）システム（つまりＵＭＡ（Uniform Memory Access）システム）に、第１および第２実施形態と同様の構成を適用することもできる。【０５７８】
また、第１実施形態では、先に受け取ったデータパケットのヘッダの情報を、図１８Ａのエントリ９０１−０〜９０１−Ｎのいずれかの中の要求元ＩＤフィールド９１５とＲｅｑＩＤフィールド９１６に記憶している。しかし、要求元ＩＤフィールド９１５とＲｅｑＩＤフィールド９１６を省略し、代わりに、データパケット保存部４１０から図１８Ｂの比較部８０２が要求元ＩＤとＲｅｑＩＤを読み出す実施形態も可能である。ただし、ＲＡＭを用いてデータパケット保存部４１０を実現する場合は、ＦＦを用いて管理テーブル部８０１内の各エントリ９０１−０〜９０１−Ｎに要求元ＩＤフィールド９１５とＲｅｑＩＤフィールド９１６を設ける方が、処理速度の点で好ましい。【０５７９】
また、バスの占有時間が比較例と同等でも問題がない場合、例えば図１７の出力バッファ制御部７０２ｃｘを次のように変形してもよい。すなわち、出力バッファ制御部７０２ｃｘは、ポート間アービタ部５０７ｘからの出力許可が得られたら、図１７のヘッダマージ部８０４で複製情報を持ったデータパケットを生成して出力する代わりに、元の２つのパケットを連続して出力してもよい。【０５８０】
例えば、出力バッファ制御部７０２ｃｘは、データパケット保存部４１０のリードポインタ値で指示される番地に保存されている第１のパケットをまず出力する。さらに、出力バッファ制御部７０２ｃｘは、第１のパケットの番地に対応する管理テーブル部８０１内のエントリから複製情報を読み出す。そして、出力バッファ制御部７０２ｃｘは、読み出した複製情報と第１のパケットから、第１のパケットと同じデータペイロードを持つために破棄された第２のパケットを復元し、出力する。【０５８１】
第２のパケットの復元は、例えば図２３のデータパケット生成部１００９と類似の新たなコンポーネントをヘッダマージ部８０４の代わりに設けることで実現することができる。また、例えば図１７において管理テーブル部８０１は、セレクタ８０５に対して、データパケット保存部４１０から第１のパケットを出力するよう指示した後、必要な時間の経過後、上記新たなコンポーネントから第２のパケットを出力するよう指示を切り換える。【０５８２】
上記のような変形は、ＳＣ１０３ｃ内の出力バッファ制御部７０２ｃｘに限らず、ＸＢ１０２内の出力バッファ制御部においても採用することができる。
また、上記のように出力バッファ制御部からの出力時にパケットを復元する場合は、図１５および図１６において複製チェック部１００１、データパケット復元部１００２、およびセレクタ１００３を設ける必要はない。また、図１５のルーティング部７０３の代わりに比較例の図１０のルーティング部５０５を用いることができ、図１６のルーティング部７１３の代わりに比較例の図５のルーティング部２０３を用いることができる。【０５８３】
このように、出力バッファ制御部からの出力時にパケットを復元する変形例においても、出力バッファ制御部内に必要な記憶容量が比較例の約２分の１であり、そのため消費電力や半導体チップ上の実装面積を節約することができるという効果が得られる。【０５８４】
また、図３０の第２実施形態では、デュアルコアＣＰＵを例示したが、コアの数が３以上のマルチコアＣＰＵに合わせて第２実施形態を変形した実施形態も可能であるし、シングルコアＣＰＵが図３０と同様に出力バッファ制御部を含む実施形態も可能である。【０５８５】
シングルコアＣＰＵの内部に出力バッファ制御部がある場合、ＣＰＵ内部には、図３０のようなアービタ部１３０７およびコア間セレクタ１３０８は不要であり、ＣＰＵ内の出力バッファ制御部は直接ＣＰＵの出力ポートと接続されてもよい。また、シングルコアＣＰＵでは、入力ポート１３０２が直接コアと接続されていてもよい。【０５８６】
また、マルチコアＣＰＵの場合でも、複数のコアを宛先として同じデータペイロードを有するパケットが出力されることがないならば、図３０の第２実施形態を次のように変形してもよい。【０５８７】
すなわち、入力ポート１３０２が分岐部１３０５ｂと直接接続され、分岐部１３０５ｂがＣＰＵコア１３０１ａと１３０１ｂに直接接続されていてもよい。この場合、分岐部１３０５ｂは、１入力２出力のデマルチプレクサでもよい。【０５８８】
また、この場合、図３０の複製チェック部１００１、データパケット復元部１００２、セレクタ１００３、分岐部１３０５ａ、ＯＲ回路１３０６ａ、およびＯＲ回路１３０６ｂは省略可能である。さらに、ルーティングテーブル部１３０４は、出力ポート情報の取得のみを行うものに置き換えることができる。
【図１】
2010052753.tif 000003
【図２】
2010052753.tif 000004
【図３】
2010052753.tif 000005
【図４】
2010052753.tif 000006
【図５】
2010052753.tif 000007
【図６】
2010052753.tif 000008
【図７】
2010052753.tif 000009
【図８】
2010052753.tif 000010
【図９】
2010052753.tif 000011
【図１０】
2010052753.tif 000012
【図１１】
2010052753.tif 000013
【図１２】
2010052753.tif 000014
【図１３】
2010052753.tif 000015
【図１４】
2010052753.tif 000016
【図１５】
2010052753.tif 000017
【図１６】
2010052753.tif 000018
【図１７】
2010052753.tif 000019
【図１８Ａ】
2010052753.tif 000020
【図１８Ｂ】
2010052753.tif 000021
【図１９】
2010052753.tif 000022
【図２０】
2010052753.tif 000023
【図２１】
2010052753.tif 000024
【図２２】
2010052753.tif 000025
【図２３】
2010052753.tif 000026
【図２４】
2010052753.tif 000027
【図２５】
2010052753.tif 000028
【図２６】
2010052753.tif 000029
【図２７】
2010052753.tif 000030
【図２８】
2010052753.tif 000031
【図２９】
2010052753.tif 000032
【図３０】
2010052753.tif 000033
【手続補正書】
【提出日】平成23年1月19日(2011.1.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１の演算処理装置およびデータ転送装置の間でのデータの転送を制御する制御装置であって、
前記第１の演算処理装置から出力された第１のデータを保存する保存手段と、
前記第１のデータの制御情報と、前記第１のデータより後に前記第１の演算処理装置から受け取った第２のデータの制御情報を比較することで、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断する第１の判断手段と、
前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけた複製情報として保存し、前記第１の場合以外である第２の場合は、前記保存手段に前記第２のデータを保存させる管理手段と、
前記保存手段に保存されたデータの前記データ転送装置への出力を制御する制御手段と、
を備えることを特徴とする制御装置。
【請求項２】
前記第１のデータと前記第２のデータの一方が、前記第１の演算処理装置が備える記憶部に保存されたデータを前記制御装置に接続された記憶装置に書き込むデータであり、前記第１のデータと前記第２のデータの他方が、第２の演算処理装置が要求した前記記憶部に保存されたデータを転送する転送データであるとき、
前記判断手段は、前記第１の場合であると判断する、
ことを特徴とする請求項１に記載の制御装置。
【請求項３】
前記第１の場合に、前記保存手段が保存する前記第１のデータと前記管理手段が保存する前記複製情報から、第３のデータを生成する生成手段をさらに備え、
前記制御手段は、前記第１の場合には前記生成手段が生成した前記第３のデータを前記データ転送装置に出力するよう制御するとともに、前記第２の場合には前記保存手段が保存する前記第１のデータと前記第２のデータの双方を前記データ転送装置に出力するよう制御する、
ことを特徴とする請求項１に記載の制御装置。
【請求項４】
第１の装置と第２の装置を含む複数の装置と接続され、前記複数の装置間でのデータの転送を行うデータ転送装置であって、
前記複数の装置のうちの１つから出力されたデータを前記複数の装置のうちの他の１つへ送信する送信手段と、
前記第１の装置から受け取った、前記第２の装置へ送信する第１のデータを前記第２の装置へ出力する前に保存しておく保存手段と、
前記第１の装置から受け取り、前記第１のデータより後に前記送信手段により送信した、前記第２の装置へ送信する第２のデータの制御情報を、前記第１のデータの制御情報と比較することで、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断する第１の判断手段と、
前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけた複製情報として保存し、前記第１の場合以外である第２の場合は、前記保存手段に前記第２のデータを保存させる管理手段と、
前記保存手段に保存されたデータの前記第２の装置への出力を制御する制御手段と、
を備えることを特徴とするデータ転送装置。
【請求項５】
前記第１のデータが、前記第２の装置に送信する第４のデータと、前記第４のデータと同じデータ本体部を有する第５のデータから生成された複製データであるか否かを前記第１のデータの前記制御情報から判断する第２の判断手段と、
前記第１のデータが複製データであるとき、前記第１のデータから前記第４のデータと前記第５のデータを復元する復元手段とをさらに備え、
前記送信手段は、前記第２の判断手段による判断に基づいて、前記復元手段が復元した前記第４のデータと前記第５のデータを送信するか、または前記第１のデータを送信する、
ことを特徴とする請求項４に記載のデータ転送装置。
【請求項６】
第１の制御装置および第２の制御装置を含む複数の制御装置と、前記複数の制御装置間でのデータの転送を行うデータ転送装置を備える情報処理装置であって、
前記第１の制御装置は、
前記第１の制御装置に接続された第１の演算処理装置から出力され、前記第２の制御装置へと送信する第１のデータを保存する保存手段と、
前記第１のデータの制御情報と、前記第１のデータより後に前記第１の演算処理装置から受け取った第２のデータの制御情報とを比較することにより、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断する第１の判断手段と、
前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけて複製情報として保存し、前記第１の場合以外の第２の場合は、前記保存手段に前記第２のデータを保存させる管理手段と、
前記第１の場合に、前記保存手段が保存する前記第１のデータと前記管理手段が保存する前記複製情報から、第３のデータを生成する生成手段と、
前記第１の場合には前記生成手段が生成した前記第３のデータを前記データ転送装置に出力するよう制御するとともに、前記第２の場合には前記保存手段が保存する前記第１のデータと前記第２のデータの双方を前記データ転送装置に出力するよう制御する第１の制御手段を備え、
前記データ転送装置は、
前記第１の制御装置から受け取ったデータの制御情報に基づいて、前記第１の場合か前記第２の場合かを判断する第２の判断手段と、
前記第１の場合に、前記第３のデータから前記第１のデータと前記第２のデータを復元する復元手段と、
前記第２の判断手段による判断に基づいて、前記第３のデータを送信するか、または前記復元手段が復元した前記第１のデータと前記第２のデータを送信する送信手段を備える、
ことを特徴とする情報処理装置。
【請求項７】
記憶部と演算処理部を備えた演算処理装置であって、
前記演算処理部から出力された第１のデータを保存する保存手段と、
前記第１のデータの制御情報と、前記第１のデータより後に前記演算処理部から出力された第２のデータの制御情報とを比較することにより、前記第１のデータと前記第２のデータが同じデータ本体部を有するか否かを判断する判断手段と、
前記第１の場合は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけて複製情報として保存し、前記第１の場合以外の第２の場合は、前記保存手段に前記第２のデータを保存させる管理手段と、
前記第１の場合に、前記保存手段が保存する前記第１のデータと前記管理手段が保存する前記複製情報から、第３のデータを生成する生成手段と、
前記第１の場合には前記生成手段が生成した前記第３のデータを出力するよう制御するとともに、前記第２の場合には前記保存手段が保存する前記第１のデータと前記第２のデータの双方を出力するよう制御する制御手段と、
を備えることを特徴とする演算処理装置。
【請求項８】
第１の制御装置と、前記第１の制御装置に接続された第１の演算処理装置と、前記第１の制御装置を含む複数の制御装置の間のデータの転送を行うデータ転送装置を有する情報処理装置の制御方法において、
前記第１の演算処理装置が、第１のデータと第２のデータを前記第１の制御装置に出力するステップと、
前記第１の制御装置が、前記第１のデータを受け取って保存し、前記第１のデータを受け取った後で前記第２のデータを受け取り、前記第１のデータの制御情報と前記第２のデータの制御情報を比較することにより、前記第１のデータと前記第２のデータが同じデータ本体部を有する第１の場合であるか否かを判断するステップと、
前記第１の場合だと前記第１の制御装置が判断した第１の場合は、
前記第１の制御装置は、前記第２のデータの前記制御情報の一部を前記第１のデータと関連づけて複製情報として保存し、保存している前記第１のデータと前記複製情報から第３のデータを生成し、前記データ転送装置に前記第３のデータを出力するステップと、
前記データ転送装置が、前記第３のデータの制御情報に基づいて前記第１の場合であると判断するとともに、前記第３のデータの前記制御情報に基づいて前記第１のデータと前記第２のデータの送信先が同じか否かを判断するステップと、
前記第１のデータと前記第２のデータの送信先が同じならば、前記データ転送装置は、前記第３のデータを前記同じ送信先に送信するステップと、
前記第１のデータと前記第２のデータの送信先が異なれば、前記データ転送装置は、前記第３のデータの前記制御情報に基づいて、前記第３のデータから前記第１のデータと前記第２のデータを復元してそれぞれを前記複数の制御装置のいずれかへ送信するステップと、
前記第１の場合以外の第２の場合は、
前記第１の制御装置が、さらに前記第２のデータを保存し、保存している前記第１のデータと前記第２のデータの双方を前記データ転送装置に出力するステップと、
前記データ転送装置が、前記第１のデータの前記制御情報に基づいて、前記複数の制御装置のいずれかへ前記第１のデータを送信し、前記第２のデータの前記制御情報に基づいて、前記複数の制御装置のいずれかへ前記第２のデータを送信するステップと、
を含むことを特徴とする情報処理装置の制御方法。
【国際調査報告】
2010052753.tif 000034
2010052753.tif 000035
2010052753.tif 000036