(57)【要約】【課題】無駄なデータ転送を減らすことが可能なデータ転送装置およびデータ転送システムを提供する。【解決手段】本実施形態によると、複数のデータ送受信装置と、第１のメモリ領域を有する少なくとも１つのメモリと、の間でデータ転送を行うデータ転送装置であって、前記複数のデータ送受信装置のうちの１つが前記メモリの第１のメモリ領域の排他的アクセス権を獲得すると、前記第１のメモリ領域に対応するアドレス情報を記憶することを特徴とするデータ転送装置が提供される。【選択図】図１
2012043350.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ送受信装置と、第１のメモリ領域を有する少なくとも１つのメモリと、の間でデータ転送を行うデータ転送装置であって、
前記複数のデータ送受信装置のうちの１つが前記メモリの第１のメモリ領域の排他的アクセス権を獲得すると、前記第１のメモリ領域に対応するアドレス情報を記憶することを特徴とするデータ転送装置。
【請求項２】
前記アドレス情報を記憶する記憶部と、
受信したデータを判定するデータ判定部と、
前記データ判定および前記記憶部に記憶されているアドレス情報に基づき、出力するデータを決定する出力部と
を備えることを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
複数のデータ送受信装置と、
第１のメモリ領域を有する少なくとも１つのメモリと、
前記複数のデータ送受信装置と前記メモリとの間でデータ転送を行う複数のデータ転送装置と
を備え、
前記データ転送装置は、前記複数のデータ送受信装置のうちの１つが前記メモリの第１のメモリ領域の排他的アクセス権を獲得すると、前記第１のメモリに対応するアドレス情報を記憶することを特徴とするデータ転送システム。
【請求項４】
前記データ転送装置は、前記複数のデータ送受信装置のうちの１つから前記メモリの第１のメモリ領域の排他的アクセス権を獲得したことを示す第１のデータを受信すると、前記第１のメモリ領域に対応するアドレス情報を記憶することを特徴とする請求項３に記載のデータ転送システム。
【請求項５】
前記データ転送装置は、前記排他的アクセス権が獲得された前記メモリから、前記複数のデータ送受信装置のうちの１つが前記メモリの第１のメモリ領域の排他的アクセス権を獲得したことを示す第２のデータを受信すると、前記第１のメモリ領域に対応するアドレス情報を記憶することを特徴とする請求項３に記載のデータ転送システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データ転送装置およびデータ転送システムに関する。
【背景技術】
【０００２】
近年のパーソナルコンピュータなどでは、複数のコアでメモリを共有するマルチコアシステムが用いられる。これにより、２以上のコアで共同して１つの処理を行う場合にも、メモリアクセスの制御を簡略化できる。また、メモリに対して複数のコアからアクセスできるためメモリ資源を効率よく利用できる。
【０００３】
マルチコアシステムでは、コアとメモリ間で無駄なデータ転送が行われると、他のデータ転送を阻害してしまい、システム全体の性能低下を招いてしまうという問題がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１７８７８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
無駄なデータ転送を減らすことが可能なデータ転送装置およびデータ転送システムを提供する。
【課題を解決するための手段】
【０００６】
本実施形態によると、複数のデータ送受信装置と、第１のメモリ領域を有する少なくとも１つのメモリと、の間でデータ転送を行うデータ転送装置であって、前記複数のデータ送受信装置のうちの１つが前記メモリの第１のメモリ領域の排他的アクセス権を獲得すると、前記第１のメモリ領域に対応するアドレス情報を記憶することを特徴とするデータ転送装置が提供される。
【図面の簡単な説明】
【０００７】
【図１】本発明の第１の実施形態に係るデータ転送システムの概略ブロック図。
【図２】Ｔｅｓｔ＆Ｓｅｔアクセスの手順を示すフローチャート。
【図３】第１の実施形態に係るルータの内部構造の一例を示す概略ブロック図。
【図４】第１の実施形態におけるルータのバッファ１５の構造の一例を示す図。
【図５】第１の実施形態におけるルータの処理動作の一例を示すフローチャート。
【図６】データ転送システムにおけるデータ転送の一例を示す図。
【図７】第１の実施形態におけるルータのバッファ１５の設定例を示す図。
【図８】第２の実施形態に係るルータの内部構造の一例を示す概略ブロック図。
【図９】第２の実施形態におけるルータのバッファ１５の構造の一例を示す図。
【図１０】第２の実施形態におけるルータの処理動作の一例を示すフローチャート。
【図１１】データ転送システムにおけるデータ転送の一例を示す図。
【図１２】第２の実施形態におけるルータのバッファ１５の設定例を示す図。
【図１３】第３の実施形態におけるルータのバッファ１５の構造の一例を示す図。
【図１４】第３の実施形態におけるルータの処理動作の一例を示すフローチャート。
【図１５】図１４に引き続くルータの処理動作の一例を示すフローチャート。
【図１６】データ転送システムにおけるデータ転送の一例を示す図。
【図１７】ルータＲ２２ｂのバッファ１５の設定例を示す図。
【図１８】第３の実施形態におけるルータのバッファ１５の設定例を示す図。
【図１９】第３の実施形態におけるルータのバッファ１５の設定例を示す図。
【図２０】第４の実施形態におけるルータのバッファ１５の構造の一例を示す図。
【図２１】バッファ制御部１４によるカウンタ制御の一例を示すフローチャート。
【図２２】第４の実施形態におけるルータの処理動作の一例を示すフローチャート。
【図２３】データ転送システムにおけるデータ転送の一例を示す図。
【図２４】第４の実施形態におけるルータのバッファ１５の設定例を示す図。
【図２５】第５の実施形態におけるルータの処理動作の一例を示すフローチャート。
【図２６】第５の実施形態におけるルータのバッファ１５の設定例を示す図。
【図２７】Ｔｅｓｔ＆Ｓｅｔアクセスの別の手順を示すフローチャート。
【図２８】第６の実施形態におけるルータの処理動作の一例を示すフローチャート。
【図２９】第7の実施形態におけるルータのバッファ１５の構造の一例を示す図。
【図３０】第７の実施形態におけるルータの処理動作の一例を示すフローチャート。
【図３１】第７の実施形態におけるルータのバッファ１５の設定例を示す図。
【発明を実施するための形態】
【０００８】
以下、データ転送装置およびデータ転送システムの実施形態について、図面を参照しながら具体的に説明する。
【０００９】
（第１の実施形態）
図１は、本発明の第１の実施形態に係るデータ転送システムの概略ブロック図である。図１のデータ転送システムは、コア（データ送受信装置）Ｃ１１〜Ｃ１４と、ルータ（データ転送装置）Ｒ１１〜Ｒ２４と、メモリＭ１１〜Ｍ１４とを備えている。なお、同図では４つのコアＣ１１〜Ｃ１４、８つのルータＲ１１〜Ｒ２４および４つのメモリＭ１１〜Ｍ１４を示しているが、これに限定されるものではなく、データ転送システムは２以上のコアと少なくとも１つのルータおよびメモリを備えていればよい。
【００１０】
データ転送システムは、例えばパーソナルコンピュータに搭載される。図１の全体を１チップに内蔵してもよいし複数のチップに分散してもよい。例えばメモリＭ１１〜Ｍ１４のみを別チップに内蔵してもよい。
【００１１】
コアＣ１１〜Ｃ１４はそれぞれが画像処理や音声処理等の処理を行うプロセッサである。あるいは、２以上のコアにより１つの処理を行ってもよい。ルータＲ１１〜Ｒ２４はＸ方向およびＹ方向のマトリクス状に配置され、コアＣ１１〜Ｃ１４とメモリＭ１１〜Ｍ１４間でデータの転送を行う。メモリＭ１１〜Ｍ１４は、コアＣ１１〜Ｃ１４での処理において、種々のデータを記憶するために用いられる。
【００１２】
図１のデータ転送システムは、複数のコアＣ１１〜Ｃ１４がルータＲ１１〜Ｒ２４を介していずれのメモリＭ１１〜Ｍ１４にもアクセス可能なマルチコアシステムである。このような構成にすることで、２以上のコアで共同して１つの処理を行うことができる。また、メモリに対して複数のコアからアクセスできるため、メモリ資源を効率的に使用できる。
【００１３】
通常はコアC１１〜C１４が並列にメモリアクセスを行うことができるが、あるメモリ上のデータに対する一連の動作(例えば参照から更新まで)を排他的に行いたい場合がある。この場合、あるコアがそのデータを使用している間、他のコアはそのデータを使用できない。すなわち、２つ以上のコアが同時に１つのデータにアクセスすることはできない。そのため、コアは、まず、アクセスしようとするデータに対する排他的なアクセス権であるロックを獲得しなければならない。コアはロックを獲得した後にデータを使用し、使用後にロックを解除する。
【００１４】
ここで、メモリＭ１１はアドレス０ｘ２０００＿００００〜３０００＿ＦＦＦＦを有するものとする（０ｘは１６進数であることを表す）。アドレス０ｘ３０００＿００００〜０ｘ３０００＿ＦＦＦＦはデータ書き込み領域（第１のメモリ領域）であり、コアの処理に必要なデータ、例えば画像データ等が記憶される。このデータは排他アクセスが必要で、アドレス０ｘ２０００＿００００をそのデータのためのロック制御アドレス（アドレス情報）として使用する。例えば、ロック制御アドレス０ｘ２０００＿００００に記憶されるデータがロウである場合、データ書き込み領域０ｘ３０００＿００００〜０ｘ３０００＿ＦＦＦＦ上のデータはいずれのコアからもアクセスされておらずロック可能な状態であり、ハイである場合、同領域上のデータはいずれかのコアからアクセスされており他のコアからはロックできない状態であることを示す。
【００１５】
また、メモリＭ１２はアドレス０ｘ４０００＿００００〜０ｘ５０００＿ＦＦＦＦを、メモリＭ１３はアドレス０ｘ６０００＿００００〜０ｘ７０００＿ＦＦＦＦを、メモリＭ１４はアドレス０ｘ８０００＿００００〜０ｘ９０００＿ＦＦＦＦを、それぞれ有するものとする。各メモリ内のデータ構造はメモリＭ１１と同じである。
【００１６】
以下、本明細書では、メモリのデータ書き込み領域にデータを書き込むことを、単に「メモリにデータを書き込む」、とも表記する。同様に、メモリのデータ書き込み領域に書き込まれたデータを、単に「メモリ上のデータ」とも表記する。
【００１７】
コアＣ１１〜Ｃ１４とメモリＭ１１〜Ｍ１４間はパケットを単位としてデータの転送が行われる。パケットは、先頭に配置されるヘッダフリット（Header Flit）と、これに引き続くボディフリット（Body Flit）とを有する。ヘッダフリットにはパケットの送信先および送信元や、パケットの種類等の情報が含まれる。ボディフリットには、メモリＭ１１〜Ｍ１４に書き込むデータ、メモリＭ１１〜Ｍ１４から読み出したデータ等が含まれる。ボディフリットの最後尾はテイルフリット（Tail Flit）と呼ばれ、パケットの終端であることを示す。
【００１８】
第１の実施形態ではＴｅｓｔ＆Ｓｅｔアクセスによりロックを獲得する例を示す。図２は、Ｔｅｓｔ＆Ｓｅｔアクセスの手順を示すフローチャートである。例として、コアＣ１１がメモリＭ１２上のデータに対するロックを獲得する手順を説明する。
【００１９】
まず、コアＣ１１はメモリＭ１２上のデータに対するロックを要求するパケット（以下、ロック要求パケットＡ）をメモリＭ１２へ送信する（Ｓ１）。ロック要求パケットＡがメモリＭ１２に到達すると、メモリＭ１２のロック制御アドレス０ｘ４０００＿００００に書き込まれた値が読み出される（Ｓ２）。そして、読み出された値を含むパケットがメモリＭ１２からロック要求パケットＡの送信元であるコアＣ１１に送信される。
【００２０】
ここで、メモリＭ１２から読み出された値がロウである場合は（Ｓ３のＹＥＳ）メモリＭ１２にアクセス可能であり、ハイである場合は（Ｓ３のＮＯ）アクセスできないことを示す。すなわち、メモリＭ１２からは、読み出した値がロウであるパケット（以下、ロック成功パケットＢ１）（Ｓ４）、または、ハイであるパケット（以下、ロック失敗パケットＢ２）（Ｓ５）のいずれかが、コアＣ１１へ送信される。
【００２１】
コアＣ１１は、受信したパケットがロック成功パケットＢ１であれば、ロックの獲得に成功したと判断する。そして、他のコアＣ１２〜Ｃ１４からのアクセスを禁止するために、メモリＭ１２のロック制御アドレス０ｘ４０００＿００００にハイを書き込むパケット（以下、ロック獲得パケットＣ１）をメモリＭ１２に送信し（Ｓ６）、メモリＭ１２のロック制御アドレス０ｘ４０００＿００００にハイが書き込まれ（Ｓ７）、他のコアＣ１２〜Ｃ１４からメモリＭ１２上のデータ書き込み領域０ｘ５０００＿００００〜０ｘ５０００＿ＦＦＦＦへアクセスできなくなる。
【００２２】
一方、コアＣ１１は、受信したパケットがロック失敗パケットＢ２であれば、コアＣ１１はロックの獲得に失敗したと判断する。この場合、コアＣ１１はメモリＭ１２上のデータ書き込み領域０ｘ５０００＿００００〜０ｘ５０００＿ＦＦＦＦへアクセスできない。
【００２３】
なお、ロックを解除する場合、コアＣ１１はメモリＭ１２のロック制御アドレス０ｘ４０００＿００００にロウを書き込むパケット（以下、ロック解除パケットＣ２）をメモリＭ１２に送信する。これによりメモリＭ１２のロック制御アドレスにはロウが書き込まれ、コアＣ１１〜Ｃ１４のいずれもがメモリＭ１２上のデータ書き込み領域０ｘ５０００＿００００〜０ｘ５０００＿ＦＦＦＦにアクセス可能となる。
【００２４】
以上説明したように、第１の実施形態では、コアからメモリへ転送されるパケットとして、ロック（排他的アクセス権）を獲得するためのロック要求パケットＡ（第５のデータ）、メモリ上のデータに対するロックを獲得したことを示すロック獲得パケットＣ１（第１のデータ）およびメモリ上のデータに対するロックを解除するためのロック解除パケットＣ２（第３のデータ）、メモリからコアへ転送されるパケットとして、メモリへのアクセスが可能であることを示すロック成功パケットＢ１（第２のデータ）およびメモリへのアクセスが不可能であることを示すロック失敗パケットＢ２（第４のデータ）、の少なくとも５種類のパケットが転送される。
【００２５】
コアがあるメモリ上のデータに対するロックの獲得を試みて失敗した場合、コアは処理を進めることができない。すなわち、ロックを獲得できない場合のロック要求パケットＡおよびロック失敗パケットＢ２は無駄なデータ転送となる。無駄なデータ転送が多くなると、他のデータ転送を阻害してしまい、システム全体の性能低下を招いてしまう。
【００２６】
そこで、第１の実施形態は、コアとメモリとの間に配置されるルータにおいて各ルータに書き込んだ情報に基づいてロックを獲得できるか否かを判断することにより、無駄なデータ転送の削減を図るものである。
【００２７】
図３は、ルータの内部構造の一例を示す概略ブロック図である。図３に示すルータは、４方向に経路がある。なお、左端あるいは右端に位置するルータ等では、入出力は３つのみとなる。ルータＲ１１〜Ｒ２４の内部構成は類似しているため、以下では代表してルータＲ１２について説明する。
【００２８】
ルータＲ１２の入力端子Ｘ＋ＩＮ，Ｘ−ＩＮ，Ｙ＋ＩＮおよびＹ−ＩＮは、それぞれ、Ｘ＋方向（右）、Ｘ−方向（左）、Ｙ＋方向（下）およびＹ−方向（上）に位置するコア、ルータまたはメモリに接続される。ルータＲ１２の場合、入力端子Ｘ＋ＩＮはルータＲ１３、入力端子Ｘ−ＩＮはルータＲ１１、入力端子Ｙ＋ＩＮはルータＲ２２、入力端子Ｙ−ＩＮはコアＣ１２にそれぞれ接続される。ルータＲ１２の出力端子Ｘ＋ＯＵＴ，Ｘ−ＯＵＴ，Ｙ＋ＯＵＴおよびＹ−ＯＵＴも同様である。
【００２９】
ルータＲ１２は、経路計算部１１と、切替部１２とを有する。経路計算部１１は、入力端子Ｘ＋ＩＮ〜Ｙ−ＩＮのうちの１つから入力されるパケットを、出力端子Ｘ＋ＯＵＴ〜Ｙ−ＯＵＴのいずれに出力するかを計算する。切替部１２は経路計算部１１の計算結果に応じて、パケットの出力先を切り替える。
【００３０】
経路計算部１１は、パケット判定部（データ判定部）１３と、バッファ制御部１４と、バッファ（記憶部）１５と、パケット生成部（データ生成部）１６と出力先決定部１７とを有する。パケット判定部１３は、入力されたパケットがパケットＡ，Ｂ１，Ｂ２，Ｃ１，Ｃ２のいずれであるかを判定する。バッファ制御部１４はバッファ１５の情報を参照したり、バッファ１５への書き込みおよびクリアを行ったりする。パケット生成部１６は入力されたパケットの判定結果に基づいたパケットを生成する。出力先決定部１７は、パケットの種類とバッファ１５の情報とに応じて、パケットの出力先を決定する。パケット生成部１６と出力先決定部１７は出力部を構成し、生成したパケットおよび出力先を切替部１２に出力する。
【００３１】
図４は、バッファ１５の構造の一例を示す図である。第１の実施形態では、バッファ１５には１つのエントリ（項目）につき、Ｖａｌｉｄ  ｂｉｔ（Ｖ）およびアドレス欄が設けられる。例えば、（Ｖ）がハイであればそのエントリが有効であることを示し、ロウであればそのエントリが無効であることを示す。アドレス欄はメモリＭ１１〜Ｍ１４のロック制御アドレスが書き込まれる。図４ではバッファ１５は３つのエントリを有する例を示しているが、エントリの数は任意でよい。
【００３２】
図５は、ルータの処理動作の一例を示すフローチャートである。ルータはパケットを受信すると（Ｓ１１）、パケット判定部１３によりパケットの種類を判定し（Ｓ１２〜Ｓ１４）、その後パケットの種類に応じて以下の処理を行う。
【００３３】
受信したパケットがロック獲得パケットＣ１である場合（Ｓ１２のＹＥＳ）、バッファ制御部１４は（Ｖ）がロウであるエントリのアドレス欄にロック獲得パケットＣ１の送信元であるメモリのロック制御アドレスを書き込むとともに、（Ｖ）をハイに設定する（Ｓ１５）。そして、出力先決定部１７はロック獲得パケットＣ１の出力先を決定し（Ｓ１９）、切替部１２はロック獲得パケットＣ１の出力先を決定された次のルータまたはコアへ切り替える（Ｓ２０）。
【００３４】
受信したパケットがロック要求パケットＡである場合（Ｓ１３のＹＥＳ）、バッファ制御部１４はロック要求パケットＡの送信先メモリのロック制御アドレスがバッファ１５に書き込まれているか否かを確認する（Ｓ１６）。書き込まれていなければ（Ｓ１６のＮＯ）、出力先決定部１７はロック要求パケットＡの出力先を決定し（Ｓ１９）、切替部１２はロック要求パケットＡの出力先を決定された次のルータまたはメモリへ切り替える（Ｓ２０）。また、書き込まれていれば（Ｓ１６のＹＥＳ）、パケット生成部１６はロック要求パケットＡの送信元に送信するロック失敗パケットＢ２を生成する（Ｓ１７）。そして、出力先決定部１７はロック失敗パケットＢ２の出力先を決定し（Ｓ１９）、切替部１２はロック失敗パケットＢ２の出力先を決定された次のルータまたはコアに切り替える（Ｓ２０）。
【００３５】
このように、バッファ１５にロック要求パケットＡの送信先メモリのロック制御アドレスが書き込まれている場合、ロック要求パケットＡは次のルータおよびメモリには出力されず、ロック失敗パケットＢ２が生成され、送信元のコアに折り返す。これにより、メモリまでロック要求パケットＡを送信しないで、ロック獲得の可能の有無を判断でき、データ転送量を抑制できる。
【００３６】
受信したパケットがロック解除パケットＣ２である場合（Ｓ１４のＹＥＳ）、バッファ制御部１４はバッファ１５に書き込まれたロック解除パケットＣ２の送信先であるメモリのロック制御アドレスをクリアし、（Ｖ）をロウに設定する（Ｓ１８）。そして、出力先決定部１７はロック解除パケットＣ２の出力先を決定し（Ｓ１９）、切替部１２はロック解除パケットＣ２の出力先を決定された次のルータまたはコアに切り替える（Ｓ２０）。
【００３７】
受信したパケットがその他のパケット、つまり、ロック成功パケットＢ１またはロック失敗パケットＢ２である場合（Ｓ１４のＮＯ）、出力先決定部１７は受信したパケットの出力先を決定し（Ｓ１９）、切替部１２は受信したパケットの出力先を決定された次のルータ、コアまたはメモリに切り替える（Ｓ２０）。
【００３８】
図５および図６を用いて、データ転送システムの処理動作の具体例を説明する。図６では、コアＣ１１がメモリＭ１２のロック獲得に成功し、その後、コアＣ１３がメモリＭ１２のロック獲得を試みる例である。
【００３９】
なお、第１の実施形態のデータ転送システムは、コアおよびメモリ間で予め定めた経路によりパケットを転送する経路固定型であるとする。例えば、コアＣ１１からメモリＭ１２へ（またはメモリＭ１２からコアＣ１１へ）転送されるパケットはルータＲ１１，Ｒ１２，Ｒ２２を経由し、コアＣ１３からメモリＭ１２へ（またはメモリＭ１２からコアＣ１３へ）転送されるパケットはルータＲ１３，Ｒ１２，Ｒ２２を経由するものとする。
【００４０】
まず、コアＣ１１がロック要求パケットＡを送信すると（図２のＳ１）、ロック要求パケットＡは初めにルータＲ１１に到達する。ルータＲ１１のバッファ１５には、メモリＭ１２のロック制御アドレス０ｘ４０００＿００００は書き込まれていない（Ｓ１６のＮＯ）。そのため、ルータＲ１１は受信したロック要求パケットＡをルータＲ１２に出力する。
【００４１】
続いて、ロック要求パケットＡはルータＲ１２に到達する。ルータＲ１２でもルータＲ１１と同様の処理が行われ、ルータＲ１２はロック要求パケットＡをルータＲ２２に出力する。ルータＲ２２でもルータＲ１１と同様の処理が行われ、ルータＲ２２は受信したロック要求パケットＡをメモリＭ１２に出力する。
【００４２】
続いて、Ｍ１２はロック制御アドレスに書き込まれた値が読み出され、（図２のＳ２）ロック成功パケットＢ１をコアＣ１１へ送信する（Ｓ３のＹＥＳ，Ｓ４）。
【００４３】
メモリＭ１２から送信されたロック成功パケットＢ１は、ルータＲ２２、Ｒ１２、Ｒ１１を介してコアＣ１１に到達する。コアＣ１１はロック成功パケットＢ１を受信すると、ロックの獲得に成功したと判断し、ロック獲得パケットＣ１をメモリＭ１２へ送信する（図２のＳ６）。
【００４４】
コアＣ１１から送信されたロック獲得パケットＣ１は、初めにルータＲ１１に到達する。ルータＲ１１はロック獲得パケットＣ１を受信すると（図５のＳ１１、Ｓ１２のＹＥＳ）、バッファ制御部１４はバッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００を書き込むとともに、（Ｖ）をハイに設定する（Ｓ１５）。これにより、ルータＲ１１のバッファ１５は図７のように設定される。そして、ルータＲ１１はロック獲得パケットＣ１をルータＲ１２に出力する（Ｓ１９，２０）。
【００４５】
続いて、ルータＲ１２、Ｒ２２でもルータＲ１１と同様の処理が行われる。ルータＲ１２，Ｒ２２のバッファ１５も図７のように設定される。
【００４６】
ルータＲ２２から出力されたロック獲得パケットＣ１はメモリＭ１２に到達する。すると、メモリＭ１２のロック制御アドレスにハイが書き込まれる（図２のＳ７）。以上により、コアＣ１１はロックを獲得する。第１の実施形態では、メモリからのロック成功パケットをコアが受信した後、経路となる各ルータはロック獲得パケット転送時にバッファ１５に情報を書き込む。
【００４７】
コアＣ１１がロックを獲得している状態で、コアＣ１３がメモリＭ１２のロック獲得を試みたとする。コアＣ１３は、ロック要求パケットＡを送信する。ロック要求パケットＡは、初めにルータＲ１３に到達する。ルータＲ１３のバッファ１５は、メモリＭ１２のロック制御アドレス０ｘ４０００＿００００は書き込まれていない（Ｓ１６のＮＯ）。したがって、ルータＲ１３は受信したロック要求パケットＡをルータＲ１２に出力する（Ｓ１９，２０）。
【００４８】
続いて、ルータＲ１２はロック要求パケットＡを受信する（Ｓ１１、Ｓ１３のＹＥＳ）。ここで、図７に示すように、ルータＲ１２のバッファ１５にはメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれている（Ｓ１６のＹＥＳ）。これは、メモリＭ１２上のデータは既にロックされているため、ロック要求パケットＡの送信元であるコアＣ１３はメモリＭ１２上のデータに対するロックを獲得できないことを意味する。
【００４９】
そのため、ルータＲ１２はロック要求パケットＡを出力しない。代わりに、ルータＲ１２のパケット生成部１６はロック失敗パケットＢ２を生成し、コアＣ１３に送信する。
【００５０】
ルータＲ１３はロック失敗パケットＢ２を受信すると（Ｓ１１、Ｓ１４のＮＯ）、ロック失敗パケットＢ２をコアＣ１３に出力する。これにより、コアＣ１３はロック失敗パケットＢ２を受信し、ロックの獲得に失敗したと判断する。
【００５１】
第１の実施形態では、ロック要求パケットＡは、コアＣ１３からメモリＭ１２に向けて送信されるが、ルータＲ１２のバッファ１５に書き込まれた情報に基づいてルータＲ１２までしか到達しない。また、ロック失敗パケットＢ２は、メモリＭ１２でなくルータＲ１２で生成され、コアＣ１３に出力される。よって、メモリＭ１２からルータＲ１２までのロック要求パケットＡ、ロック失敗パケットＢ２の転送を削減できる。
【００５２】
一方、ロックを解除する場合、ルータは以下のように動作する。コアＣ１１はロック解除パケットＣ２をメモリＭ１２に送信する。ロック解除パケットＣ２は、初めにルータＲ１１に到達する。ルータＲ１２はロック解除パケットＣ２を受信すると（Ｓ１１、Ｓ１４のＹＥＳ）、バッファ１５に書き込まれたメモリＭ１２のロック制御アドレス０ｘ４０００＿００００をクリアするとともに、（Ｖ）ａｌｉｄ  ｂｉｔをロウに設定する（Ｓ１８）。そして、ルータＲ１１はロック解除パケットＣ２をルータＲ１２に出力する（Ｓ１９，２０）。
【００５３】
続いて、ルータＲ１２、Ｒ２２でもルータＲ１１と同様の処理が行われる。以上によりルータＲ１１，Ｒ１２，Ｒ２２のバッファ１５に書き込まれたメモリＭ１２のロック制御アドレス０ｘ４０００＿００００は全てクリアされる。
【００５４】
ロック解除パケットＣ２がメモリＭ１２に到達すると、ロック制御アドレス０ｘ４０００＿００００にロウが書き込まれる。これにより、全てのコアＣ１１〜Ｃ１４からメモリＭ１２に対してアクセス可能となる。
【００５５】
このように、第１の実施形態では、ルータ内にバッファを設け、ロック獲得したメモリのロック制御アドレスを経路となるルータのバッファ１５に書き込む。ルータはバッファ１５にロック制御アドレスが書き込まれたメモリに対するロック要求パケットＡを受信すると、ロック要求パケットＡの転送を止め、ロック失敗パケットＢ２を生成してロック要求パケットＡの送信元へ送信する。そのため、ロックを獲得できない場合の無駄なデータ転送を抑制でき、システム全体の処理効率を向上できる。
【００５６】
（第２の実施形態）
第１の実施形態のデータ転送システムは、常に一定の経路でパケットを送信する経路固定型であった。これに対し、第２の実施形態のデータ転送システムは、周囲のデータ転送状況に応じて適応的に経路を決定する経路可変型である。
【００５７】
図８は、第２の実施形態に係るルータの内部構造の一例を示す概略ブロック図である。図８では、図３と共通する構成部分には同一の符号を付し、以下では相違点を中心に説明する。ルータの出力先決定部１７には、周囲のルータの混雑状況、すなわち、データ転送量が入力される。これにより、出力先決定部１７はデータ転送量が少なく、混雑していない経路を選択してパケットを出力でき、転送速度を向上できる。また、出力先決定部１７は決定した経路をバッファ制御部１４にも伝達する。
【００５８】
図９は、第２の実施形態におけるルータのバッファ１５の構造の一例を示す図である。図９のバッファ１５は、図４のバッファ１５に加え、ロック獲得パケットＣ１の出力先を書き込む欄が設けられている。この出力先欄には、ロック獲得パケットＣ１の出力先経路を示すＸ＋，Ｘ−，Ｙ＋およびＹ−のいずれかが書き込まれる。なお、Ｘ＋，Ｘ−，Ｙ＋およびＹ−を書き込む代わりに、これらを２ビットのデジタル信号に対応させてもよい。例えば、Ｘ＋，Ｘ−，Ｙ＋およびＹ−をそれぞれ“００”，“０１”，“１０”および“１１”に対応させてもよい。
【００５９】
図１０は、第２の実施形態におけるルータの処理動作の一例を示すフローチャートである。
【００６０】
ルータは、受信したパケットがロック獲得パケットＣ１である場合（Ｓ２２のＹＥＳ）、バッファ制御部１４は（Ｖ）がロウであるエントリのアドレス欄にロック獲得パケットＣ１の送信元であるメモリのロック制御アドレスを書き込むとともに、（Ｖ）をハイに設定する（Ｓ２５）。そして、出力先決定部１７は、混雑状況に応じて、ロック獲得パケットＣ１の出力先を決定する（Ｓ２６）。このとき、バッファ制御部１４は出力先決定部１７が出力したロック獲得パケットＣ１の出力先をバッファ１５に書き込む（Ｓ２７）。そして、ルータはロック獲得パケットＣ１の出力先を決定された次のルータまたはコアに切り替える（Ｓ３４）。
【００６１】
なお、受信したパケットがロック要求パケットＡである場合（Ｓ２３のＹＥＳ）、および、ロック成功パケットＢ１またはロック失敗パケットＢ２である場合（Ｓ２４のＮＯ）は、混雑状況に応じてパケットの出力先を決定する点（Ｓ３０，Ｓ３３）のみ、第１の実施形態と異なる。
【００６２】
受信したパケットがロック解除パケットＣ２であり（Ｓ２４のＹＥＳ）、その出力先のメモリのロック制御アドレスがバッファ１５に書き込まれている場合、出力先決定部１７はバッファ１５に書き込まれた出力先情報に従って、ロック解除パケットＣ２の出力先を決定する（Ｓ３１）。そして、バッファ制御部１４はバッファ１５の対応するエントリをクリアする（Ｓ３２）。その後、ルータはロック解除パケットＣ２の出力先を決定された次のルータまたはコアに切り替える（Ｓ３４）。
【００６３】
以下、図１０および図１１を用いて、データ転送システムの処理動作の具体例を説明する。図１１は、データ転送システムにおけるデータ転送の一例を示す図である。第２の実施形態のデータ転送システムは経路可変型であるため、例えばコアＣ１１からメモリＭ１２へ（またはメモリＭ１２からコアＣ１１へ）転送されるパケットは、ルータＲ１１ａ，Ｒ１２ａ，Ｒ２２ａを経由する経路Ｐ１およびルータＲ１１ａ，Ｒ２１ａ，Ｒ２２ａを経由する経路Ｐ２のいずれかが、他のルータの混雑状況に応じて選択されるものとする。
【００６４】
まず、第１の実施形態と同様に、コアＣ１１がロック要求パケットＡをメモリＭ１２に送信し、その後コアＣ１１はメモリＭ１２からロック成功パケットＢ１を受信したとする。これらのパケットは、混雑状況に応じて経路Ｐ１，Ｐ２のいずれで転送されてもよい。
【００６５】
次に、コアＣ１１はロック成功パケットＢ１を獲得すると、ロック獲得パケットＣ１をメモリＭ１２に送信する。コアＣ１１は、ロック獲得パケットＣ１を初めにルータＲ１１ａに送信する。ルータＲ１１ａはロック獲得パケットＣ１を受信すると（Ｓ２１、Ｓ２２のＹＥＳ）、バッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００を書き込むとともに、（Ｖ）をハイに設定する（Ｓ２５）。
【００６６】
さらに、出力先決定部１７は混雑状況に応じて、ロック獲得パケットＣ１をルータＲ１２ａに出力するのか、ルータＲ２１ａに出力するのかを決定する（Ｓ２６）。より具体的には、出力先決定部１７は、ルータＲ１２ａのデータ転送量とルータＲ２１ａのデータ転送量とを比較し、よりデータ転送量が少ないルータにロック獲得パケットＣ１を出力することに決定する。ここでは、ルータＲ１２ａに決定したとする。ルータＲ１１ａのバッファ制御部１４は、バッファ１５の出力先欄にＸ＋を書き込む（Ｓ２７）。これにより、ルータＲ１１ａのバッファ１５は図１２（ａ）のように設定される。そして、ルータＲ１１ａはロック獲得パケットＣ１の出力先をルータＲ１２ａに切り替える。
【００６７】
続いて、ルータＲ１２ａでもルータＲ１１ａと同様の処理が行われる。ルータＲ１２ａでは、ロック獲得パケットＣ１はルータＲ１２ａに出力される（Ｓ２６）ため、バッファ１５にＹ＋を書き込む（Ｓ２７）。これにより、ルータＲ１２ａのバッファ１５は図１２（ｂ）のように設定される。続いて、ルータＲ２２ａでもルータＲ１１ａと同様の処理が行われ、ルータＲ２２ａのバッファ１５は図１２（ｃ）のように設定される。
【００６８】
コアＣ１１がメモリＭ１２上のデータに対するロックしている状態で、コアＣ１３がメモリＭ１２のロック獲得を試み、ロック要求パケットＡを送信したとする。ルータＲ１２ａのバッファ１５にはメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれている（Ｓ２８のＹＥＳ）。そのため、コアＣ１３が送信したロック要求パケットＡがルータＲ１２ａに到達すると、それ以上ロック要求パケットＡは転送されず、代わりにロック失敗パケットＢ２が生成され（Ｓ２９）、コアＣ１１に送信される（Ｓ３０，Ｓ３４）。よって、ルータＲ１２ａとメモリＭ１２間の無駄なデータ転送を抑制できる。
【００６９】
一方、ロックを解除する場合、ルータは以下のように動作する。コアＣ１１はロック解除パケットＣ２をメモリＭ１２に送信する。ルータＲ１１ａはロック解除パケットＣ２を受信すると（Ｓ２１、Ｓ２４のＹＥＳ）、バッファ１５に書き込まれた情報に基づきロック解除パケットＣ２の出力先をルータＲ１２ａに切り替える（Ｓ３１）。さらに、バッファ制御部１４はバッファ１５に書き込まれたメモリＭ１２のロック制御アドレス０ｘ４０００＿００００および出力先Ｘ＋をクリアするとともに、（Ｖ）をロウに設定する（Ｓ３２）。そして、ルータＲ１１ａはロック解除パケットＣ２の出力先をルータＲ１２ａに切り替える。
【００７０】
続いて、ルータＲ１２ａでもルータＲ１１ａと同様の処理が行われる。ルータＲ１２ａはバッファに書き込まれた情報に基づき、ロック解除パケットＣ２の出力先をルータＲ２１ａに切り替える（Ｓ３１）。さらに、バッファ制御部１４はバッファ１５の対応するエントリをクリアする（Ｓ３２）。そして、ルータＲ１２ａはロック解除パケットＣ２を出力端子Ｙ＋ＯＵＴから出力する（Ｓ３４）。ルータＲ２２ａでもルータＲ１１ａと同様の処理が行われ、対応するバッファ１５の情報はクリアされる。
【００７１】
以上によりルータＲ１１ａ，Ｒ１２ａ，Ｒ２２ａのバッファ１５に書き込まれたロック制御アドレス０ｘ４０００＿００００は全てクリアされ、全てのコアＣ１１〜Ｃ１４からメモリＭ１２に対してアクセス可能となる。
【００７２】
第２の実施形態では、バッファ１５に出力先欄を設けるため、ロック獲得パケットＣ１とロック解除パケットＣ２は必ず同一経路で転送される。したがって、同一経路で転送されるロック解除パケットＣ２により、ロック獲得パケットＣ１が経由したルータのバッファ１５に書き込まれたメモリのロック制御アドレス等を確実にクリアできる。
【００７３】
このように、第２の実施形態は、ロック解除パケットＣ２以外のパケットを、混雑状況に応じてデータ転送量が少ない経路を選択して出力転送できるため、より効率よくデータを転送できる。また、ルータ内のバッファ１５にロック獲得パケットＣ１の出力先を記憶する。ロック解除の際は同じ経路を辿るため、バッファ１５に書き込まれた情報を確実にクリアできる。また、無駄なデータ転送を抑制できる。
【００７４】
（第３の実施形態）
第３の実施形態は、第２の実施形態に加え、ロック失敗パケットＢ２が経由するルータのバッファ１５にも、ロックを獲得できないメモリのアドレスを書き込むものである。以下、第２の実施形態との相違点を中心に説明する。
【００７５】
第３の実施形態では、ルータの内部構成は図８と同様だが、バッファ１５構造が異なる。図１３は、ルータのバッファ１５の構造の一例を示す図である。図１３のバッファ１５は、図９のバッファ１５に加え、ロック失敗パケットＢ２の出力先を書き込む欄が設けられる。より具体的には、出力先Ｘ＋，Ｘ−，Ｙ＋，Ｙ−毎に１ビットの値を書き込む欄が設けられる。これらの欄には、ロック失敗パケットＢ２が出力された経路にはハイが、出力されていない経路にはロウが書き込まれる。
【００７６】
バッファ１５にロック失敗パケットＢ２が出力された経路を書き込むことにより、ロック解除後に確実に書き込んだロック制御アドレスを確実にクリアすることができる。
【００７７】
図１４および図１５は、第３の実施形態のルータの処理動作の一例を示すフローチャートである。第３の実施形態では経路可変型である例を示すが、経路固定型であってもよい。
【００７８】
受信したパケットがロック獲得パケットＣ１である場合（Ｓ４２のＹＥＳ）、第２の実施形態と同様のＳ４７〜Ｓ５０を行った後、バッファ１５の対応するパケットＢ２の出力先欄のいずれかをロウに設定する（Ｓ５１）。
【００７９】
ルータは受信したパケットがロック失敗パケットＢ２である場合（Ｓ４３のＹＥＳ）、ロックを獲得できないメモリのロック制御アドレスを書き込む（Ｓ５２）。そして、ルータは、混雑状況に応じて、ロック失敗パケットＢ２を次のルータ等に出力する（Ｓ５３，５４）。さらに、バッファ制御部１４は、バッファ１５のパケットＢ２の出力先欄のうち、出力先決定部１７が決定した出力先欄をハイに設定する（Ｓ５５）。
【００８０】
すなわち、第３の実施形態では、ロック獲得パケットＣ１のみならず、ロック失敗パケットＢ２が経由するルータのバッファ１５にも、メモリのロック制御アドレスが設定される。
【００８１】
受信したパケットがロック要求パケットＡである場合（Ｓ４４のＹＥＳ）、送信先メモリのロック制御アドレスが書き込まれていない場合（Ｓ５６のＮＯ）、ルータは、混雑状況に応じて、ロック要求パケットＡの出力先を次のルータ等に切り替える（Ｓ５７，５８）。書き込まれている場合（Ｓ５６のＹＥＳ）、パケット生成部１６はロック要求パケットＡの送信元に送信するロック失敗パケットＢ２を生成し（Ｓ５９）、ルータはロック失敗パケットＢ２の出力先を次のルータ等に切り替える出力する（Ｓ６０，６１）。さらに、バッファ制御部１４は、バッファ１５のパケットＢ２の出力先欄のうち、出力先決定部１７が決定した出力先欄をハイに設定する（Ｓ６２）。
【００８２】
受信したパケットがロック解除パケットＣ２である場合（Ｓ４５のＹＥＳ）、ルータはバッファ１５に書き込まれたロック制御アドレスおよびロック獲得パケットＣ１の出力先に従って、ロック解除パケットＣ２を次のルータまたはコアに出力する（Ｓ６３，６４）。その後、バッファ制御部１４はバッファ１５にハイが設定されているパケットＢ２の出力先欄があれば（Ｓ６５のＹＥＳ）、パケット生成部１６は他のルータ内のバッファ１５の対応するエントリをクリアするためのバッファクリアパケットＤを新たに生成する（Ｓ６６）。そして、ルータは、Ｂ２出力先欄のうち、ハイが設定された全ての方向にバッファクリアパケットＤを出力する（Ｓ６７，６８）。その後、バッファ制御部１４はバッファ１５の対応するエントリをクリアする（Ｓ６９）。
【００８３】
このように、第３の実施形態では、第１および第２の実施形態で転送される５種類のパケットＡ，Ｂ１，Ｂ２，Ｃ１，Ｃ２に加え、バッファクリアパケットＤ（第５のデータ）を生成し出力する。
【００８４】
受信したパケットがバッファクリアパケットＤである場合（Ｓ４６のＹＥＳ）、Ｓ６５〜Ｓ６９の処理を行う。受信したパケットがロック成功パケットＢ１である場合（Ｓ４６のＮＯ）、ルータは、混雑状況に応じて、ロック成功パケットＢ１の出力先を次のルータ等に切り替える（Ｓ７０，７１）。
【００８５】
以下、図１４〜図１６を用いて、データ転送システムの処理動作の具体例を説明する。図１６は、データ転送システムにおけるデータ転送の一例を示す図である。ここで、コアＣ１１がメモリＭ１２上のデータに対するロックを獲得し、コアＣ１３、Ｃ１４がメモリＭ１２のロック獲得を試みるとする。
【００８６】
まず、コアＣ１１がロック要求パケットＡをメモリＭ１２に送信し、その後コアＣ１１はメモリＭ１２からロック成功パケットＢ１を受信したとする。これらのパケットは、一定の経路で転送されてもよいし、混雑状況に応じてどの経路で転送されてもよい。
【００８７】
次に、コアＣ１１はロック成功パケットＢ１を獲得すると、ロック獲得パケットＣ１をメモリＭ１２へ送信する。例えば、ルータＲ１１ｂ，Ｒ１２ｂ，Ｒ２２ｂを経由してロック獲得パケットＣ１がメモリＭ１２に到達したとすると、これらルータのバッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００と（Ｓ４７）、ロック獲得パケットＣ１の出力先が（Ｓ４８〜Ｓ５０）それぞれ書き込まれる。さらに、バッファ１５のＢ２出力先欄は全てロウに設定される（Ｓ５１）。これにより、例えばＲ２２ｂのバッファ１５は図１７のようになる。
【００８８】
コアＣ１１がメモリＭ１２上のデータに対するロックしている状態で、コアＣ１３がメモリＭ１２のロック獲得を試み、ロック要求パケットＡを送信したとする。ロック要求パケットＡは、ルータＲ１３ｂ、Ｒ２３ｂを経由して、ルータＲ２２ｂに到達したとする。ルータＲ２２ｂのバッファ１５にはメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれている（Ｓ５６のＹＥＳ）。そのため、ルータＲ２２ｂはロック失敗パケットＢ２を生成する（Ｓ５９）。そして、ルータＲ２２ｂは、ロック失敗パケットＢ２をルータＲ２３ｂに出力する（Ｓ６０，Ｓ６１）。これに従って、ルータＲ２２ｂのバッファ制御部１４はバッファ１５の出力先欄Ｘ＋をハイに設定する（Ｓ６２、図１８（ａ））。
【００８９】
ルータＲ２３ｂはロック失敗パケットＢ２を受信すると（Ｓ４１，Ｓ４３のＹＥＳ）、バッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００を書き込む（Ｓ５２）。さらに、ルータＲ２３ｂはロック失敗パケットＢ２をルータＲ１３ｂに出力する（Ｓ５３，Ｓ５４）。これに従って、ルータＲ２３ｂのバッファ１５のＹ−欄をハイに設定する（Ｓ５５、図１８（ｂ））。
【００９０】
ルータＲ１３ｂもルータＲ２３ｂと同様の処理動作を行い、ルータＲ１３ｂのバッファ１５は図１８（ｃ）のように設定される。ロック失敗パケットＢ２の到達により、コアＣ１３はロックの獲得に失敗したと判断する。
【００９１】
次に、コアＣ１４がメモリＭ１２のロック獲得を試みたとする。コアＣ１４が送信したロック要求パケットＡは、ルータＲ１４ｂを経由して、ルータＲ１３ｂに到達したとする。ルータＲ１３ｂのバッファ１５にはメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれている（Ｓ５６のＹＥＳ）。そのため、ルータＲ１３ｂはロック失敗パケットＢ２を生成する（Ｓ５９）。そして、ルータＲ１３ｂはロック失敗パケットＢ２を出力端子Ｘ＋ＯＵＴからルータＲ１４ｂに出力する（Ｓ６０，６１）。これに従って、バッファ制御部１４はバッファ１５の出力先欄Ｘ＋をハイに設定する（Ｓ６２、図１９（ａ））。
【００９２】
ルータＲ１４ｂはロック失敗パケットＢ２を受信する（Ｓ４１，Ｓ４３のＹＥＳ）と、バッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００を書き込む（Ｓ５２）。さらに、ルータＲ１４ｂはロック失敗パケットＢ２を出力端子Ｙ−ＯＵＴからコアＣ１４に出力する（Ｓ５３，Ｓ５４）。これに従って、ルータＲ１４ｂのバッファ１５の出力先欄Ｙ−をハイに設定する（Ｓ５５、図１９（ｂ））。ロック失敗パケットＢ２の到達により、コアＣ１４はロックの獲得に失敗したと判断する。
【００９３】
ロック獲得パケットＣ１が経由するルータのみならず、ロック失敗パケットＢ２が経由するルータにも、ロックを獲得できないメモリのロック制御アドレスを書き込む。そのため、コアから送信されたロック要求パケットＡは、該メモリのロック制御アドレスが書き込まれたルータより先のルータおよびメモリには転送されない。よって、ルータとメモリ間の無駄なデータ転送を削減できる。
【００９４】
一方、ロックを解除する場合、ルータは以下のように動作する。コアＣ１１はロック解除パケットＣ２をメモリＭ１２に送信する。ロック解除パケットＣ２は、各ルータのバッファ１５に書き込まれたロック獲得パケットＣ１の出力先に従って、ルータＲ１１ｂ，Ｒ１２ｂ，Ｒ２２ｂの順に転送される。ルータＲ１１ｂ，Ｒ１２ｂの処理動作は、内部のバッファ１５のＸ＋〜Ｙ−欄にハイは設定されていないため（Ｓ６５のＮＯ）、第２の実施形態と同様である。
【００９５】
ルータＲ２２ｂはロック解除パケットＣ２を受信すると（Ｓ４１，Ｓ４５のＹＥＳ）、書き込まれたロック獲得パケットＣ１の出力先に従って、ロック解除パケットＣ２を出力端子Ｙ＋ＯＵＴからメモリＭ１２に出力する（Ｓ６３，Ｓ６４）。ここで、ルータＲ２２ｂのＢ２出力先欄Ｘ＋がハイなので（Ｓ６５のＹＥＳ）、バッファクリアパケットＤを生成し（Ｓ６６）、ルータＲ２２ｂは出力端子Ｘ＋ＯＵＴからルータＲ２３ｂにバッファクリアパケットＤを出力する（Ｓ６７，Ｓ６８）。そして、ルータＲ２２ｂはバッファ１５の該Ｂ２出力先欄をクリアする（Ｓ６９）。
【００９６】
ルータＲ２３ｂはバッファクリアパケットＤを受信すると（Ｓ４１，Ｓ４６のＹＥＳ）、バッファ１５に応じて、バッファクリアパケットＤがルータＲ１３ｂに出力され（Ｓ６５〜Ｓ６７）、バッファ１５の対応するエントリはクリアされる（Ｓ６８）。
【００９７】
ルータＲ１３ｂはバッファクリアパケットＤを受信すると（Ｓ４１，Ｓ４６のＹＥＳ）、ルータＲ２３ｂと同様の処理動作を行う。すなわち、バッファ１５に応じて、バッファクリアパケットＤが出力端子Ｘ＋ＯＵＴおよび出力端子Ｙ−ＯＵＴから出力され（Ｓ６６〜Ｓ６８）、バッファ１５の対応するエントリはクリアされる（Ｓ６９）。
【００９８】
ルータＲ１３ｂの上（Ｙ−）に位置するのはコアＣ１３であるので、出力端子Ｙ−ＯＵＴから出力されたバッファクリアパケットＤは無視される。一方、出力端子Ｘ＋ＯＵＴから出力されたバッファクリアパケットＤはルータＲ１４ｂに到達する。ルータＲ１４ｂはルータＲ２３ｂと同様の処理動作を行い、バッファ１５の対応するエントリをクリアする。
【００９９】
以上により、ロック獲得パケットＣ１が経由するルータのバッファ１５のみならず、ロック失敗パケットＢ２が経由してメモリのロック制御アドレスが書き込まれたルータのバッファ１５の対応するエントリもクリアできる。
【０１００】
このように、第３の実施形態では、ロック失敗パケットＢ２が経由するルータにも、ロックを獲得できないメモリのロック制御アドレスを書き込む。したがって、他のコアが対応するメモリに関するロック失敗パケットＢ２が書き込まれているルータを経由した場合パケットの転送は行われず、無駄なデータ転送を削減できる。また、ルータのバッファ１５にロック失敗パケットＢ２の経路を記憶するため、その経路にバッファクリアパケットＤを送信することにより、ロック失敗パケットＢ２が経由するルータのバッファ１５の対応するエントリも確実にクリアできる。
【０１０１】
（第４の実施形態）
第２および第３の実施形態は、バッファ１５にロック獲得パケットＣ１の出力先をバッファ１５に書き込み、ロック獲得パケットＣ１およびロック解除パケットＣ２を同じ経路で転送することにより、ロック解除時にバッファ１５に書き込まれたメモリのアドレスをクリアするものであった。これに対し、第４の実施形態は、バッファ１５にカウンタを設けてメモリのアドレスをクリアするものである。
【０１０２】
第４の実施形態では、ルータの内部構成は図８と同様だが、バッファ１５の構造が異なる。図２０は、ルータのバッファ１５の構造の一例を示す図である。図２０のバッファ１５はカウンタを有する。ルータがロック獲得パケットＣ１を受信し、その送信先メモリのロック制御アドレスをバッファ１５に書き込むのと同時にカウンタは所定の値に設定される。
【０１０３】
図２１は、バッファ制御部１４によるカウンタ制御の一例を示すフローチャートである。バッファ制御部１４にはクロック信号（不図示）が入力され、例えばクロック信号の立ち上がりに同期して図２１の処理動作を行う。バッファ制御部１４は、（Ｖ）＝１であるエントリにおいて（Ｓ８１のＹＥＳ）、カウント値が０でない場合（Ｓ８２のＮＯ）、カウント値を１だけデクリメントする（Ｓ８３）。一方、カウント値が０の場合（Ｓ８２のＹＥＳ）、バッファ１５に書き込まれたメモリのロック制御アドレスをクリアするとともに、（Ｖ）を０に設定する（Ｓ８４）。第４の実施形態では、バッファ制御部はカウント値制御部としても機能する。
【０１０４】
以上のように、一旦カウント値が設定されると、時間の経過とともにカウント値は自動的に減少し、０になった時点でバッファ１５の対応するエントリはクリアされる。
【０１０５】
図２２は、ルータの処理動作の一例を示すフローチャートである。第４の実施形態では経路可変型である例を示すが、経路固定型であってもよい。以下、第２の実施形態との相違点を中心に説明する。
【０１０６】
受信したパケットがロック獲得パケットＣ１である場合（Ｓ９２のＹＥＳ）、バッファ制御部１４はアドレス欄にロック獲得パケットＣ１の送信元であるメモリのアドレスを書き込むとともに、（Ｖ）をハイに設定する（Ｓ９５）。
【０１０７】
ここで、コアＣ１１は、ロックを獲得している時間（クロック数）を予測し、予測時間を含むロック獲得パケットＣ１を生成する。ロックを獲得している時間を予測する手法は種々考えられるが、例えば、コアに応じて予め定めておいてもよいし、前回コアＣ１１がロックを獲得していた時間を予測時間としてもよい。ルータはバッファにこの予測時間をカウント値として設定する（Ｓ９６）。
【０１０８】
その後、ルータは、混雑状況に応じて、ロック獲得パケットＣ１を次のルータ等へ出力する（Ｓ１０１，Ｓ１０２）。各ルータのバッファ１５に設定されたカウント値は図２１の処理に従って減少し、カウント値が０になるとバッファ１５の対応するエントリはクリアされる。なお、第４の実施形態では、第２および第３の実施形態と異なり、ロック獲得パケットＣ１の出力先を記憶しない。
【０１０９】
受信したパケットがロック要求パケットＡである場合（Ｓ９３のＹＥＳ）、および、ロック成功パケットＢ１またはロック失敗パケットＢ２である場合（Ｓ９４のＮＯ）は、第２の実施形態と同様である。
【０１１０】
受信したパケットがロック解除パケットＣ２である場合（Ｓ９４のＹＥＳ）、ロック解除パケットＣ２の送信先メモリのロック制御アドレスがバッファ１５に書き込まれていれば（Ｓ９９のＹＥＳ）、バッファ制御部１４はそのロック制御アドレスをクリアする（Ｓ１００）。そして、ルータは、混雑状況に応じて、ロック解除パケットＣ２を次のルータ等へ出力する（Ｓ１０１，Ｓ１０２）。第４の実施形態では、ロック解除パケットＣ２は、必ずしもロック獲得パケットＣ１と同一経路ではなく、混雑状況に応じて経路が選択される。
【０１１１】
以下、図２２および図２３を用いて、データ転送システムの処理動作を説明する。図２３は、データ転送システムにおけるデータ転送の一例を示す図である。
【０１１２】
まず、コアＣ１１は、メモリＭ１２上のデータに対するロックを獲得し、ロックに成功したとする。これらのパケットは、混雑状況に応じて、経路Ｐ１，Ｐ２のいずれで転送されてもよい。コアＣ１１がロック獲得パケットＣ１をメモリＭ１２へ送信する。このロック獲得パケットＣ１には、コアＣ１１がロックを獲得している予測時間が含まれる。
【０１１３】
ルータＲ１１ｃはロック獲得パケットＣ１を受信すると（Ｓ９１，Ｓ９２のＹＥＳ）、バッファ１５のアドレス欄にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００を書き込み（Ｓ９５）、予測時間をカウンタに設定する（Ｓ９６）。例えば予測時間が０ｘ１０００である場合、ルータＲ１１ｃのバッファ１５は図２４（ａ）のように設定される。その後、ルータＲ１１ｃはロック獲得パケットＣ１を出力端子Ｘ＋ＯＵＴからルータＲ１２ｃに出力したとする（Ｓ１０１，Ｓ１０２）。
【０１１４】
ルータＲ１２ｃもルータＲ１１ｃと同様の処理動作を行う。ここで、ルータＲ１２ｃのバッファ制御部１４は予測時間０ｘ１０００をそのままバッファのカウンタ欄に設定してもよいが、ロック獲得パケットＣ１がルータＲ１１ｃからルータＲ１２ｃまでの予測時間から転送時間を引いた予測値をカウンタに設定してもよい。転送時間は、実際に転送に要した時間でも良いし、予め定めた値でもよい。転送時間を考慮した値を予測時間として設定することで、予測制度を向上できる。例えば転送時間を引いた予測時間が０ｘ０Ｆ００である場合、ルータＲ１２ｃのバッファ１５は図２４（ｂ）のように設定される。その後、ルータＲ１２ｃはロック獲得パケットＣ１を出力端子Ｙ＋ＯＵＴからルータＲ２２ｃに出力する。
【０１１５】
ルータＲ２２ｃもルータＲ１１ｃと同様の処理動作を行い、バッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００と、カウント値が設定される。続いて、ロック獲得パケットＣ１はメモリＭ１２に到達し、メモリＭ１２のロック制御アドレスにハイが設定され、他のコアＣ１２〜Ｃ１４はメモリＭ１２にアクセスできなくなる。
【０１１６】
ルータＲ１１ｃ，Ｒ１２ｃ，Ｒ２２ｃのバッファ１５に設定されたカウント値は、例えば図２１の制御に従って毎クロック減少する。カウント値が０になると、メモリＭ１２のロック制御アドレス０ｘ４０００＿００００はクリアされる。
【０１１７】
ここで、カウント値が０になる前に、コアＣ１３がメモリＭ１２上のデータに対するロックを試み、ロック要求パケットＡを送信したとする。例えばロック要求パケットＡがルータＲ１３ｃを経由してルータＲ１２ｃに到達する。ルータＲ１２ｃは、バッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれているので（Ｓ９７のＹＥＳ）、ロック失敗パケットＢ２を生成する（Ｓ９８）。そして、ルータＲ１２ｃは生成されたロック失敗パケットＢ２をルータＲ１３ｃへ送信する（Ｓ１０１，１０２）。よって、ルータＲ１２ｃとメモリＭ１２間の無駄なデータ転送を削減できる。
【０１１８】
なお、実際のロック獲得時間よりも予測時間が短いと、ロックが解除される前にルータに書き込まれたメモリのロック制御アドレス０ｘ４０００＿００００がクリアされる。この場合、ルータには送信先のアドレス０ｘ４０００＿００００は書き込まれていない（Ｓ９７のＮＯ）。よって、ルータではロック失敗パケットＢ２が生成されず、ロック要求パケットＡはメモリＭ１２に到達する。コアＣ１１がメモリＭ１２上のデータに対するロックを獲得している間、メモリＭ１２のロック制御アドレスの値はハイなので、ロック失敗パケットＢ２がメモリＭ１２からコアＣ１３へ送信される。そのため、ルータＲ１２ｃとメモリＭ１２間のデータ転送が生じてしまうが、誤動作することはない。
【０１１９】
続いて、カウント値が０になる前に、コアＣ１１がロック解除パケットＣ２をメモリＭ１２へ送信したとする。ルータＲ１１ｃは、バッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれているため（Ｓ９９のＹＥＳ）、これをクリアする（Ｓ１００）。
【０１２０】
その後、ルータＲ１１ｃは、混雑状況に応じて、ロック解除パケットＣ２の出力先を決定する（Ｓ１０１）。第４の実施形態では、必ずしもロック解除パケットＣ２をロック獲得パケットＣ１と同一の経路で転送する必要はない。以下では、ロック解除パケットＣ２はロック獲得パケットＣ１と異なるＹ＋ＯＵＴからルータＲ２１ｃに出力されたとする（Ｓ１０２）。
【０１２１】
ルータＲ２１ｃはバッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００は書き込まれていないため（Ｓ９９のＮＯ）、バッファ１５を更新しない。そして、ルータＲ２１ｃはロック解除パケットＣ２をＸ＋ＯＵＴからルータＲ２２ｃに出力する（Ｓ１０１，Ｓ１０２）。
【０１２２】
ルータＲ２１は、バッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれているため（Ｓ９９のＹＥＳ）、これをクリアする（Ｓ１００）。そして、ルータＲ２２ｃはロック解除パケットＣ２をＹ＋ＯＵＴからメモリＭ１２に出力する（Ｓ１０１，Ｓ１０２）。
【０１２３】
そして、メモリＭ１２のロック制御アドレス０ｘ４００００＿００００はロウに設定される。これにより、メモリＭ１２上のデータに対するロックは解除され、いずれのコアＣ１１〜Ｃ１４もメモリＭ１２にアクセスできるようになる。
【０１２４】
ロック解除パケットＣ２はルータＲ１２ｃを経由していないため、ルータＲ１２ｃのバッファ１５に書き込まれたロック制御アドレス０ｘ４０００＿００００は解除パケットの処理ではクリアされない。しかしながら、バッファ制御部１４はカウンタの制御を行っているため、カウント値が０になるとロック解除パケットＣ２を受信しなくても、バッファ１５に書き込まれたアドレスは自動的にクリアされる。したがって、ロック解除パケットＣ２が経由したか否かに関わらず、メモリＭ１２のアドレス０ｘ４０００＿００００を書き込まれた全てのルータのバッファ１５からクリアすることができる。
【０１２５】
第４の実施形態では、ロック解除パケットＣ２を含む全てのパケットの転送経路を混雑状況に応じて選択できるため、より効率よくデータを転送できる。また、ロック獲得パケットＣ１の出力先をバッファ１５に書き込まない。バッファ１５内にカウンタを設け、毎クロックカウント値をデクリメントする。これにより、ロック獲得パケットＣ１が同一経路を経由しなくても、ロック獲得パケットＣ１によりルータに書き込まれたバッファ１５の対応するエントリを確実にクリアできる。
【０１２６】
（第５の実施形態）
第５の実施形態は、第４の実施形態に加え、ロック失敗パケットＢ２が経由するルータのバッファ１５にもロックを獲得できないメモリのロック制御アドレスを書き込むものである。以下、第４の実施形態との相違点を中心に説明する。
【０１２７】
第５の実施形態のルータおよびそのバッファの構造は第４の実施形態と同様だが、その処理動作が異なる。図２５は、ルータの処理動作の一例を示すフローチャートである。
【０１２８】
受信したパケットがロック要求パケットＡで（Ｓ１１３のＹＥＳ）、送信先メモリのロック制御アドレスがバッファ１５に書き込まれている場合（Ｓ１１７のＹＥＳ）、バッファ制御部１４は、ロック要求パケットＡを受信した時点でのカウント値を取得する（Ｓ１１８）。そして、パケット生成部１６はカウント値を含むロック失敗パケットＢ２を生成する（Ｓ１１９）。
【０１２９】
そして、ロック失敗パケットＢ２である場合（Ｓ１１２のＹＥＳ）も、バッファ制御部１４はバッファ１５にメモリのロック制御アドレスを書き込み（Ｓ１１５）、カウンタを設定する（Ｓ１１６）。その他は第４の実施形態と同様である。
【０１３０】
以下、図２５および図２３を用いて、データ転送システムの処理動作を説明する。
【０１３１】
まず、第４の実施形態と同様に、コアＣ１１がロック要求パケットＡをメモリＭ１２に送信し、その後コアＣ１１はメモリＭ１２からロック成功パケットＢ１を受信したとする。コアＣ１１がロック獲得パケットＣ１をメモリＭ１２へ送信する。例えば、ルータＲ１１ｃ，Ｒ１２ｃ，Ｒ２２ｃを経由してロック獲得パケットＣ１がメモリＭ１２に到達したとすると、これらのバッファ１５のアドレス欄にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれ（Ｓ１１５）、カウンタに予測時間が設定される（Ｓ１１６）。
【０１３２】
ここで、コアＣ１３がメモリＭ１２にロック要求パケットＡを送信したとする。ルータＲ１２ｃがロック要求パケットＡを受信した時点で、ルータＲ１２ｃのバッファ１５は図２６（ａ）のように設定されていたとする。
【０１３３】
バッファ１５にはメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれている（Ｓ１１７のＹＥＳ）。ルータＲ１２ｃは、カウント値０ｘ０５００を取得し（Ｓ１１８）、このカウント値を含むロック失敗パケットＢ２を生成する（Ｓ１１９）。そして、ロック失敗パケットＢ２をコアＣ１３に送信するために、ルータＲ１２ｃはロック失敗パケットＢ２をルータＲ１３ｃに出力する（Ｓ１２２，Ｓ１２３）。
【０１３４】
ルータＲ１３ｃはロック失敗パケットＢ２を受信すると（Ｓ１１１，Ｓ１１２のＹＥＳ）、バッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００を書き込む（Ｓ１１５）。さらに、ルータＲ１３ｃはロック失敗パケットＢ２に含まれるカウント値またはカウント値から転送時間を引いた値を予測時間としてバッファ１５のカウンタに設定する（Ｓ１１６）。例えば予測時間を０ｘ０４００とすると、ルータＲ１３ｃのバッファ１５は図２６（ｂ）のように設定される。
【０１３５】
このようにして、ロック失敗パケットＢ２が経由したルータ１３ｃにもメモリＭ１２のロック制御アドレス０ｘ４０００＿００００を書き込む。ルータＲ１３ｃは、コアＣ１１から送信されるロック解除パケットＣ２が経由されなくても、カウント値が毎クロック減少し０になった時点で対応するエントリはクリアされる。
【０１３６】
このように、第５の実施形態では、予測時間を考慮したカウント値を含むロック失敗パケットＢ２を生成し、ロック失敗パケットＢ２が経由するルータにもロックを獲得できないメモリのロック制御アドレスおよびカウント値を書き込む。したがって、他のコアが対応するメモリに関するロック失敗パケットＢ２が書き込まれているルータを経由した場合パケットの転送は行われず、無駄なデータ転送を削減できる。また、バッファ１５内にカウンタを設け、毎クロックカウント値をデクリメントし、バッファ１５の対応するエントリを確実にクリアできる。
【０１３７】
なお、第２または３の実施形態の一方と、第４または第５の実施形態の一方とを組み合わせても良い。すなわち、ロック獲得パケットＣ１の出力先を書き込むとともにカウンタも設定しておき、ロック解除パケットＣ２を受信した場合またはカウント値が０になった場合にクリアすることにしてもよい。これにより、ロック解除パケットＣ２を受信するとカウント値が０になる前であってもメモリのロック制御アドレスをクリアされるため、クリアのタイミングを高精度化できる。
【０１３８】
（第６の実施形態）
第１〜第５の実施形態では、３回の通信によりロックを獲得するものであった。これに対し、第６の実施形態では、２回の通信によりロックを獲得するものである。ロック要求パケットＡがロック獲得パケットＣ１の役割を兼ねており、ロック獲得パケットＣ１は転送されない。
【０１３９】
図２７は、Ｔｅｓｔ＆Ｓｅｔアクセスの別の手順を示すフローチャートである。例として、コアＣ１１がメモリＭ１２上のデータに対するロックを獲得する手順を説明する。
【０１４０】
まず、コアＣ１１はロック要求パケットＡをメモリＭ１２へ送信する（Ｓ１３１）。ロック要求パケットＡがメモリＭ１２に到達すると、メモリＭ１２のロック制御アドレスの値が読み出される（Ｓ１３２）。
【０１４１】
読み出された値がロウである場合は（Ｓ１３３のＹＥＳ）、メモリＭ１２にアクセス可能であり、直ちにメモリＭ１２のロック制御アドレスにハイが書き込まれる（Ｓ１３４）。その後、メモリＭ１２からコアＣ１１へロック成功パケットＢ１を送信する（Ｓ１３５）。一方、読み出された値がハイである場合は（Ｓ１３３のＮＯ）、メモリＭ１２にアクセスできず、メモリＭ１２からコアＣ１１へロック失敗パケットＢ２を送信する（Ｓ１３６）。
【０１４２】
一方、ロックを解除する場合は図２のフローチャートと同様であり、コアＣ１１はロック解除パケットＣ２をメモリＭ１２に送信する。これによりメモリＭ１２のロック制御アドレスにはロウが書き込まれ、コアＣ１１〜Ｃ１４のいずれもがメモリＭ１２にアクセス可能となる。
【０１４３】
以上説明したように、第６の実施形態では、コアからメモリへ転送されるパケットとして、ロック要求パケットＡおよびロック解除パケットＣ２、メモリからコアへ転送されるパケットとして、ロック成功パケットＢ１およびロック失敗パケットＢ２、の少なくとも４種類のパケットが転送される。
【０１４４】
第６の実施形態では、ルータＲ１２ｅの内部構造およびバッファ１５構造は第１の実施形態と同様である。図２８は、ルータＲ１２ｅの処理動作の一例を示すフローチャートである。第６の実施形態では経路固定型とし、第１の実施形態との相違点を中心にルータの処理動作を説明する。
【０１４５】
ロック要求パケットＡを受信した場合のルータの処理動作（Ｓ１４３のＹＥＳ）は第１の実施形態と同様である。第６の実施形態では、ロック獲得パケットＣ１ではなく、メモリからコアへ転送されるロック成功パケットＢ１を受信すると（Ｓ１４２のＹＥＳ）、ルータ内のバッファ制御部１４はバッファ１５にメモリのロック制御アドレスを書き込む（Ｓ１４５）。そして、ロック解除パケットＣ２を受信すると、ルータ内のバッファ制御部１４はバッファ１５の対応するエントリをクリアする（Ｓ１４８）。
【０１４６】
経路固定型では、ロック成功パケットＢ１とロック解除パケットＣ２とは同一の経路で転送されるため、ロック成功パケットＢ１の受信時に書き込まれたバッファ１５の対応するエントリを確実にクリアできる。
【０１４７】
このように、第６の実施形態では、２回の通信でロックの獲得を行うとともに、ロック成功パケットＢ１により、ルータ内のバッファ１５にロックを獲得できないメモリのロック制御アドレスを書き込む。そのため、ロックを獲得できない場合の無駄なデータ転送を抑制でき、システム全体の処理効率を向上できる。
【０１４８】
（第７の実施形態）
第６の実施形態のデータ転送システムは経路固定型であったが、第７の実施形態のデータ転送システムは経路可変型である例を示す。すなわち、第２の実施形態において、３回の通信でなく２回の通信でロックを獲得する例である。
【０１４９】
第７の実施形態では、ルータＲ１２ｆの内部構造は第２の実施形態と同様だが、バッファ１５の構造が異なる。図２９は、ルータＲ１２ｆのバッファ１５の構造の一例を示す図である。バッファ１５にはロック成功パケットＢ１の入力元を書き込む欄が設けられる。この入力元欄には、ロック成功パケットＢ１の入力元を示すＸ＋，Ｘ−，Ｙ＋およびＹ−のいずれかが書き込まれる。
【０１５０】
図３０は、ルータＲ１２ａの処理動作の一例を示すフローチャートである。第２の実施形態との主な相違点は、ロック成功パケットＢ１を受信した場合に（Ｓ１５２のＹＥＳ）、バッファ１５に送信先メモリのアドレスとロック成功パケットＢ１の入力元を書き込む点（Ｓ１５６）である。
【０１５１】
以下、図３０および図６を用いて、データ転送システムの処理動作を説明する。なお、図６ではルータＲ１１等と表記されているが、第７の実施形態に合わせてルータＲ１１ｆ等と読み替えて説明する。
【０１５２】
まず、コアＣ１１がロック要求パケットＡをメモリＭ１２に送信し、メモリＭ１２のロック制御アドレス０ｘ４０００＿００００にハイを書き込んだとする。すると、メモリＭ１２からロック成功パケットＢ１がコアＣ１１に向けて送信される。
【０１５３】
メモリＭ１２から送信されたロック成功パケットＢ１は、初めにルータＲ２２ｆに到達する。ルータＲ２２ｆがロック成功パケットＢ１を受信すると（Ｓ１５１、Ｓ１５２のＹＥＳ）、バッファ制御部１４はバッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００を書き込む（Ｓ１５５）。また、ロック成功パケットＢ１はメモリＭ１２からルータＲ２２ｆの入力端子Ｙ＋ＩＮに入力される。そのため、バッファ制御部１４は入力元欄にＹ＋を書き込む（Ｓ１５６）。これにより、ルータＲ２２ｆのバッファ１５は図３１（ａ）のように設定される。さらに、ルータＲ２２ｆは、混雑状況に応じて、ロック成功パケットＢ１を出力端子Ｘ−ＯＵＴまたは出力端子Ｙ−ＯＵＴから出力する（Ｓ１５７，Ｓ１６４）。ここでは、出力端子Ｙ−ＯＵＴから出力したとする。
【０１５４】
続いて、ロック成功パケットＢ１はルータＲ１２ｆに到達する。ルータＲ１２ｆでもルータＲ２２ｆと同様の処理（Ｓ１５５，Ｓ１５６）が行われ、ルータＲ２２ｆのバッファ１５は図３１（ｂ）のように設定される。さらに、ルータ１２ｆはロック成功パケットＢ１を出力端子Ｘ−ＯＵＴから出力する（Ｓ１５７，Ｓ１６４）。続いて、ロック成功パケットＢ１はルータＲ１１ｆに到達する。ルータＲ１１ｆでもルータＲ２２ｆと同様の処理（Ｓ１５５，Ｓ１５６）が行われ、ルータＲ１１ｆのバッファ１５は図３１（ｃ）のように設定される。さらに、ルータＲ１１ｆはロック成功パケットＢ１を出力端子Ｙ−ＯＵＴから出力する（Ｓ１５７，Ｓ１６４）。
【０１５５】
ロック成功パケットＢ１はコアＣ１１に到達し、コアＣ１１はロックの獲得に成功したと判断する。以上により、ルータＲ１１ｆ，Ｒ１２ｆ，Ｒ２２ｆのバッファ１５にメモリＭ１２のロック制御アドレス０ｘ４０００＿００００が書き込まれる。そのため、これらのルータはメモリＭ１２上のデータに対するロックを獲得するためのロック要求パケットＡを受信すると（Ｓ１５１，Ｓ１５３のＹＥＳ）、ロック制御アドレス０ｘ４０００＿００００が書き込まれているため（Ｓ１５８のＹＥＳ）、ロック失敗パケットＢ２を生成することになる（Ｓ１５９）。
【０１５６】
一方、ロックを解除する場合、ルータは以下のように動作する。コアＣ１１はロック解除パケットＣ２をメモリＭ１２に送信する。ロック解除パケットＣ２は、初めにルータＲ１１ｆに到達する。ルータＲ１１ｆはロック解除パケットＣ２を受信すると（Ｓ１５１、Ｓ１５４のＹＥＳ）、バッファ１５に書き込まれたメモリＭ１２のロック制御アドレス０ｘ４０００＿００００をクリアするとともに、（Ｖ）をロウに設定する（Ｓ１６１）。さらに、図３１（ｃ）に示すように、バッファ１５の入力元欄にはＸ＋が書き込まれているため、これに従ってルータＲ１１ｆはロック解除パケットＣ２を出力端子Ｘ＋ＯＵＴからルータＲ１２ｆに出力する（Ｓ１６２，Ｓ１６４）。
【０１５７】
バッファ１５にアドレスを書き込むためのロック成功パケットＢ１はメモリからコアへ転送されるのに対し、ロック解除パケットＣ２は反対方向であるコアからメモリへ転送される。そのため、ロック成功パケットＢ１の入力元へロック解除パケットＣ２を出力することにより、ロック成功パケットＢ１の転送経路とロック解除パケットＣ２の転送経路とを一致させることできる。
【０１５８】
続いて、ルータＲ１２ｆでもルータＲ１１ｆと同様の処理が行われる。すなわち、ルータＲ１２ｆのバッファ１５の対応するエントリはクリアされ（Ｓ１６１）、図３１（ｂ）に示すように、バッファ１５の入力元欄にはＹ＋が書き込まれているため、これに従ってルータＲ１２ｆはロック解除パケットＣ２をＹ＋ＯＵＴからルータＲ２２ｆに出力する（Ｓ１６２，Ｓ１６４）。
【０１５９】
続いて、ルータＲ２２ｆでもルータＲ１１ｆと同様の処理が行われる。すなわち、ルータＲ２２ｆのバッファ１５の対応するエントリはクリアされ（Ｓ１６１）、図３１（ａ）に示すように、バッファ１５の入力元欄にはＹ＋が書き込まれているため、これに従ってルータＲ２２ｆはロック解除パケットＣ２をＹ＋ＯＵＴからメモリＭ１２に出力する（Ｓ１６２，Ｓ１６４）。
【０１６０】
ロック解除パケットＣ２はメモリＭ１２に到達すると、メモリＭ１２のロック制御アドレス０ｘ４０００＿００００はロウに設定され、ロックが解除される。以上によりルータＲ１１ｆ，Ｒ１２ｆ，Ｒ２２ｆのバッファ１５に書き込まれたアドレス０ｘ４０００＿００００は全てクリアされる。
【０１６１】
このように、第７の実施形態では、第６の実施形態と同様に無駄なデータ転送を抑制できる。さらに、ロック解除パケットＣ２以外のパケットを、混雑状況に応じてデータ転送量が少ない経路を選択して転送できるため、より効率よくデータを転送できる。また、ルータ内のバッファ１５にロック成功パケットＢ１の入力元を書き込むため、ロック解除パケットＣ２はロック成功パケットＢ１と同じ経路で転送される。したがって、ロック成功パケットＢ１によりルータに書き込まれたバッファ１５の対応するエントリを確実にクリアできる。
【０１６２】
なお、図２７に示す２回の通信でロックを獲得する手法を第３〜第５の実施形態に適用することもできる。第３の実施形態に適用するためには、図１３のバッファ１５にロック獲得パケットＣ１の出力先ではなくロック成功パケットＢ１の入力元を書き込めばよい。さらに、第４および第５の実施形態に適用するためには、図２２のＳ９２および図２５のＳ１１２において、ロック獲得パケットＣ１の代わりにロック成功パケットＢ１を用いればよい。
【０１６３】
以上のように、各実施形態によると、無駄なデータ転送を減らすことができる。なお、各実施形態では、ルータがマトリクス状に配置される例を示したが、ルータの配置の仕方はこれに限られない。例えば、ルータを上下左右の４つでなく、さらに多くのルータ等と接続してもよい。この場合、ルータの入出力端子の数およびバッファ１５の構造を適宜変更すればよい。
【０１６４】
実施形態で説明したデータ転送システムの少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、データ転送システムの少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でもよい。
【０１６５】
また、データ転送システムの少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布してもよい。
【０１６６】
上記の記載に基づいて、当業者であれば、本発明の追加の効果や種々の変形を想到できるかもしれないが、本発明の態様は、上述した個々の実施形態には限定されるものではない。特許請求の範囲に規定された内容およびその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲で種々の追加、変更および部分的削除が可能である。
【符号の説明】
【０１６７】
Ｃ１１〜Ｃ１４  コア  
Ｒ１１〜Ｒ２４  ルータ
Ｍ１１〜Ｍ１４  メモリ
１１  経路計算部
１２  切替部
１３  パケット判定部
１４  バッファ制御部
１５  バッファ
１６  パケット生成部
１７  出力先決定部
【図１】
2012043350.tif 000003
【図２】
2012043350.tif 000004
【図３】
2012043350.tif 000005
【図４】
2012043350.tif 000006
【図５】
2012043350.tif 000007
【図６】
2012043350.tif 000008
【図７】
2012043350.tif 000009
【図８】
2012043350.tif 000010
【図９】
2012043350.tif 000011
【図１０】
2012043350.tif 000012
【図１１】
2012043350.tif 000013
【図１２】
2012043350.tif 000014
【図１３】
2012043350.tif 000015
【図１４】
2012043350.tif 000016
【図１５】
2012043350.tif 000017
【図１６】
2012043350.tif 000018
【図１７】
2012043350.tif 000019
【図１８】
2012043350.tif 000020
【図１９】
2012043350.tif 000021
【図２０】
2012043350.tif 000022
【図２１】
2012043350.tif 000023
【図２２】
2012043350.tif 000024
【図２３】
2012043350.tif 000025
【図２４】
2012043350.tif 000026
【図２５】
2012043350.tif 000027
【図２６】
2012043350.tif 000028
【図２７】
2012043350.tif 000029
【図２８】
2012043350.tif 000030
【図２９】
2012043350.tif 000031
【図３０】
2012043350.tif 000032
【図３１】
2012043350.tif 000033