(57)【要約】【課題】コア数の増加に応じた性能の向上を図ること。【解決手段】本願の開示する演算処理装置は、一つの態様において、コア部と、キャッシュメモリとを有する複数のノードをＸ軸方向およびＹ軸方向にタイル状に配置する演算処理装置であり、第１の接続部と、第２の接続部とを有する。第１の接続部は、複数のノードをＸ軸方向にそれぞれリング状に接続する。第２の接続部は、複数のノードをＹ軸方向にそれぞれリング状に接続する。そして、複数のノードに含まれるキャッシュメモリは、Ｙ軸方向にバンク分割され、Ｘ軸方向において該キャッシュメモリの一貫性をスヌープ方式で制御されて、複数のノード間で共有される。【選択図】図１
2014038494.tif 000002
【特許請求の範囲】
【請求項１】
コア部と、分散共有型のキャッシュメモリとを有する複数のノードをＸ軸方向およびＹ軸方向の二次元に配置する演算処理装置において、
前記複数のノードのうち前記Ｘ軸方向に隣接するノードをリング状に接続する第１の接続部と、
前記複数のノードのうち前記Ｙ軸方向に隣接するノードをリング状に接続する第２の接続部と、
を有し、
前記複数のノードに含まれるキャッシュメモリは、前記Ｙ軸方向にバンク分割され、前記Ｘ軸方向において該キャッシュメモリの一貫性をスヌープ方式で制御されて、前記複数のノード間で共有される
ことを特徴とする演算処理装置。
【請求項２】
前記第１の接続部は、
ノードがＸ軸方向において両端以外に位置する場合、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＸ軸方向において両端に位置する場合、該ノードと該ノードに隣接する位置に配置されるノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＸ軸方向において両端に位置するノードと隣接する場合、該ノードと両端に位置するノードのうち該ノードに隣接するノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
前記第２の接続部は、
ノードがＹ軸方向において両端以外に位置する場合、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し
ノードがＹ軸方向において両端に位置する場合、該ノードと該ノードに隣接する位置に配置されるノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＹ軸方向において両端に位置するノードと隣接する場合、該ノードと両端に位置するノードのうち該ノードに隣接するノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記複数のノードのいずれかに異常が発生した場合、異常が発生したノードおよび該ノードと前記Ｙ軸方向の座標が同一である列上に位置するノードを切離すことを特徴とする請求項１または２に記載の演算処理装置。
【請求項４】
コア部と分散共有型のキャッシュメモリとを有する複数のノードをＸ軸方向およびＹ軸方向の二次元に配置する演算処理装置の制御方法において、
各ノードが、
他のノードが有する前記キャッシュメモリに保持されるデータの取得を要求する場合、前記複数のノードに含まれるキャッシュメモリをＹ軸方向に分割したバンクのうち、要求するデータを保持するバンクのアドレスを指定して、第２の接続部によりＹ軸方向にリング状に接続されるノードを介して該データを保持するバンクに該データの取得を要求し、
前記データの要求元のノードと前記Ｙ軸方向の座標が同一である列上に位置し、前記指定されたアドレスのバンクを管理するノードが、
要求された前記データを保持する場合、前記Ｙ軸方向にリング状に接続されるノードを介して該データを前記要求元のノードに応答し、要求された前記データを保持しない場合、第１の接続部により前記Ｘ軸方向にリング状に接続されるノードに、要求された前記データを保持するノードをスヌープ方式で問い合わせて該データを取得し、前記Ｙ軸方向にリング状に接続されるノードを介して取得した該データを前記要求元のノードに応答する
各処理を含んだことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Central  Processing  Unit）は、クロックの高周波化に伴う消費電力の増大を抑えつつ高性能化するため、チップ上に集積される演算処理部としてのプロセッサコア（以下、「コア」という）の数が増えてきている。また、同一チップ上のコア間を接続する技術として、例えば、リングネットワークや、メッシュネットワークが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−１７４２８９号公報
【特許文献２】特表２００４−５３８５４８号公報
【特許文献３】特開２００５−３３９３４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来の技術では、コア数の増加に応じた性能の向上を図ることができない。
【０００５】
例えば、コア数が増えた場合、バイセクションバンド幅(Bisection  Bandwidth)の増大が望まれる。しかしながら、単一のリングでコアを接続すると、コア間の通信距離が長くなり、コア数を増加させてもバイセクションバンド幅は増大しない。
【０００６】
また、記憶領域がバンク分割されたメッシュネットワークでは、コアは、自装置が管理する記憶領域以外にアクセスを行う場合、外部のコアが有するキャッシュメモリへアクセスすることになる。このため、コアが頻繁に外部のコアが有するキャッシュメモリへアクセスを行う場合、レイテンシが大きくなる。さらに、多くのコアが、自装置が管理する記憶領域以外に対してアクセスすると、コア間通信網の負荷が高くなる。なお、このようなレイテンシが大きくなることや、コア間通信網の負荷が高くなることは、メッシュネットワークに限って生じるものではなく、記憶領域がバンク分割された構造である場合に共通して生じるものである。
【０００７】
１つの側面では、本発明は、コア数の増加に応じた性能の向上を図ることができる演算処理装置および演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本願の開示する演算処理装置は、一つの態様において、コア部と、キャッシュメモリとを有する複数のノードをＸ軸方向およびＹ軸方向にタイル状に配置する演算処理装置であり、第１の接続部と、第２の接続部とを有する。第１の接続部は、複数のノードをＸ軸方向にそれぞれリング状に接続する。第２の接続部は、複数のノードをＹ軸方向にそれぞれリング状に接続する。そして、複数のノードに含まれるキャッシュメモリは、Ｙ軸方向にバンク分割され、Ｘ軸方向において該キャッシュメモリの一貫性をスヌープ方式で制御されて、複数のノード間で共有される。
【発明の効果】
【０００９】
１実施形態における演算処理装置によれば、コア数の増加に応じた性能の向上を図ることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る演算処理装置の構成の一例を示すブロック図である。
【図２】図２は、ノードの構成の一例を示すブロック図である。
【図３】図３は、トーラスルータの構成の一例を示す図である。
【図４】図４は、同一Ｘ座標上に位置する別のノードがデータを保持する場合の処理動作の一例を示す図である。
【図５】図５は、Ｘ座標およびＹ座標が異なる座標に位置する別のノードがデータを保持する場合の処理動作の一例を示す図である。
【図６】図６は、データの取得を要求するノードによる処理の処理手順を示すフローチャートである。
【図７】図７は、データの取得を要求するパケットを受信したノードによる処理の処理手順を示すフローチャートである。
【図８】図８は、座標（３，４）に位置するノードに異常が生じた場合の処理動作を示す図である。
【図９】図９は、物理層でバイパスさせる一例を示す図である。
【図１０】図１０は、ノードあたり１コアである場合のノードの構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する演算処理装置および演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１２】
［実施例１に係る演算処理装置１００の構成］
図１は、実施例１に係る演算処理装置１００の構成の一例を示すブロック図である。図１に示すように、演算処理装置１００は、メモリ制御装置１１０（図１中、Ｍ）と、Ｉ／Ｏ（Input/Output）制御装置１２０（図１中、ＩＯ）と、Ｘ軸方向およびＹ軸方向の二次元にタイル状に配置された複数のノード１３０（図１中、Ｎ）とを有する。
【００１３】
メモリ制御装置１１０は、ノード１３０と、図示しないメインメモリとの間のデータの入出力を制御する。Ｉ／Ｏ制御装置１２０は、ＰＣＩ  ＥｘｐｒｅｓｓやインターコネクトなどのＩ／Ｏ接続インターフェースであり、ノード１３０と、図示しない入出力装置との間のデータの入出力を制御する。
【００１４】
ノード１３０は、図示しない、演算処理部としてのコアと分散共有型のキャッシュメモリとトーラスルータとを有する。そして、ノード１３０は、自装置の分散共有型のキャッシュメモリが保持するデータや、他のノードの分散共有型のキャッシュメモリが保持するデータを用いて、演算処理を実行する。なお、以下の説明では、分散共有型のキャッシュメモリのことを、「キャッシュメモリ」と記載する。
【００１５】
また、各ノード１３０を区別して説明する場合、各ノード１３０が配置された位置をＸ−Ｙ座標系平面上の座標で表すものとする。例えば、図１中の１ａで示すノード１３０は、座標（０，０）に位置し、図１中の１ｂで示すノード１３０は、座標（０，７）に位置する。また、図１中の１ｃで示すノード１３０は、座標（７，０）に位置し、図１中の１ｄで示すノード１３０は、座標（７，７）に位置する。なお、ノード１３０の構成については、図２を用いて後述する。
【００１６】
このような演算処理装置１００において、第１の接続部１０１は、ノード１３０をＸ軸方向にそれぞれリング状に接続する。例えば、第１の接続部１０１は、ノード１３０がＸ軸方向において両端以外に位置する場合、ノード１３０と、このノード１３０と、少なくとも一つのノードを挟んで隣接する位置に配置されるノードとを接続する。一例をあげると、第１の接続部１０１は、座標（３，０）に位置するノード１３０と、座標（１，０）に位置するノード１３０とを接続するとともに、座標（３，０）に位置するノード１３０と、座標（５，０）に位置するノード１３０とを接続する。
【００１７】
また、第１の接続部１０１は、ノード１３０がＸ軸方向において両端に位置する場合、ノード１３０とこのノードに隣接する位置に配置されるノードとを接続する。また、第１の接続部１０１は、ノード１３０がＸ軸方向において両端に位置する場合、ノード１３０と、このノードに隣接する位置に配置されるノードに隣接するノードとを接続する。一例をあげると、第１の接続部１０１は、座標（０，０）に位置するノード１３０と、座標（１，０）に位置するノード１３０とを接続するとともに、座標（０，０）に位置するノード１３０と、座標（２，０）に位置するノード１３０とを接続する。
【００１８】
また、第１の接続部１０１は、ノード１３０がＸ軸方向において両端に位置するノードと隣接する場合、ノード１３０と、両端に位置するノードのうち隣接するノードとを接続する。また、第１の接続部１０１は、ノード１３０がＸ軸方向において両端に位置するノードと隣接する場合、ノード１３０と、このノードに隣接する位置に配置されるノードに隣接するノードとを接続する。一例をあげると、第１の接続部１０１は、座標（１，０）に位置するノード１３０と、座標（０，０）に位置するノード１３０とを接続するとともに、座標（１，０）に位置するノード１３０と、座標（３，０）に位置するノード１３０とを接続する。このようにして、第１の接続部１０１は、Ｘ座標が同一であるように並んで配置された複数のノード１３０をリング状に接続する。
【００１９】
このように、第１の接続部１０１は、図１に示す例では、それぞれ独立に機能する８つのリングネットワークを生成する。また、Ｘ軸方向において８つのノード１３０を第１の接続部１０１により接続した場合、ノード間の最短ホップ数は、互いに接続するノード間で「１」となる。また、ノード間の最長ホップ数は、例えば、隣接する位置に配置されるノード間や両端に位置するノード間などで「４」となる。すなわち、第１の接続部１０１により生成されるリングネットワークは、隣接するノード間を接続して生成されるリングネットワークと比較して、最長ホップ数を少なくすることができる。なお、第１の接続部１０１は、例えば「スヌープバス」と呼ばれるバスである。
【００２０】
第２の接続部１０２は、ノード１３０をＹ軸方向にそれぞれリング状に接続する。例えば、第２の接続部１０２は、ノード１３０がＹ軸方向において両端以外に位置する場合、ノード１３０と、少なくとも一つのノードを挟んで隣接する位置に配置されるノードとを接続する。一例をあげると、第２の接続部１０２は、座標（０，３）に位置するノード１３０と、座標（０，１）に位置するノード１３０とを接続するとともに、座標（０，３）に位置するノード１３０と、座標（０，５）に位置するノード１３０とを接続する。
【００２１】
また、第２の接続部１０２は、ノード１３０がＹ軸方向において両端に位置する場合、ノード１３０とこのノードに隣接する位置に配置されるノードとを接続する。また、第２の接続部１０２は、ノード１３０がＹ軸方向において両端に位置する場合、ノード１３０と、このノードに隣接する位置に配置されるノードに隣接するノードとを接続する。一例をあげると、第２の接続部１０２は、座標（０，０）に位置するノード１３０と、座標（０，１）に位置するノード１３０とを接続するとともに、座標（０，０）に位置するノード１３０と、座標（０，２）に位置するノード１３０とを接続する。
【００２２】
また、第２の接続部１０２は、ノード１３０がＹ軸方向において両端に位置するノードと隣接する場合、ノード１３０と、両端に位置するノードのうち隣接するノードとを接続する。また、第２の接続部１０２は、ノード１３０がＹ軸方向において両端に位置するノードと隣接する場合、ノード１３０と、このノードに隣接する位置に配置されるノードに隣接するノードとを接続する。一例をあげると、第２の接続部１０２は、座標（０，１）に位置するノード１３０と、座標（０，０）に位置するノード１３０とを接続するとともに、座標（０，１）に位置するノード１３０と、座標（０，３）に位置するノード１３０とを接続する。このようにして、第２の接続部１０２は、Ｙ座標が同一であるように並んで配置された複数のノード１３０をリング状に接続する。
【００２３】
このように、第２の接続部１０２は、図１に示す例では、それぞれ独立に機能する８つのリングネットワークを生成する。また、Ｙ軸方向において８つのノードを第２の接続部１０２により接続した場合、ノード間の最短ホップ数は、互いに接続するノード間で「１」となる。また、ノード間の最長ホップ数は、例えば、隣接する位置に配置されるノード間や両端に位置するノード間などで「４」となる。すなわち、第２の接続部１０２により生成されるリングネットワークは、隣接するノード間を接続して生成されるリングネットワークと比較して、最長ホップ数を少なくすることができる。なお、第２の接続部１０２は、例えば「キャッシュデータバス」と呼ばれるバスである。
【００２４】
また、演算処理装置１００は、Ｘ軸方向とＹ軸方向とがともにリングネットワークで接続されており、リングネットワーク間をトーラスルータでルーティングする。このようにして、演算処理装置１００では、ノード１３０は、複数のリングネットワーク間でパケットのルーティングをおこなうことにより、トーラスネットワークを形成する。
【００２５】
また、同じＸ座標に位置するノード１３０が有するキャッシュメモリは、例えば、図１に示すように、バンク＃０からバンク＃７の８つのバンクに分割され、全体として一つのキャッシュとして機能する。
【００２６】
一例をあげると、Ｘ座標が０に位置するノード１３０において、バンク＃０には、座標（０，７）に位置するノード１３０が有するキャッシュメモリが含まれ、バンク＃１には、座標（０，６）に位置するノード１３０が有するキャッシュメモリが含まれる。また、バンク＃２には、座標（０，５）に位置するノード１３０が有するキャッシュメモリが含まれ、バンク＃３には、座標（０，４）に位置するノード１３０が有するキャッシュメモリが含まれる。
【００２７】
同様に、バンク＃４には、座標（０，３）に位置するノード１３０が有するキャッシュメモリが含まれ、バンク＃５には、座標（０，２）に位置するノード１３０が有するキャッシュメモリが含まれる。また、バンク＃６には、座標（０，１）に位置するノード１３０が有するキャッシュメモリが含まれ、バンク＃７には、座標（０，０）に位置するノード１３０が有するキャッシュメモリが含まれる。なお、メインメモリとキャッシュメモリとの間でバンクの分け方を共通化しており、例えば座標（０，７）のノード１３０は、バンク＃０のメインメモリが保持するデータのみをキャッシュする。
【００２８】
また、同じＹ座標に位置するノード１３０が有するキャッシュメモリはバンク分割された担当領域を管理する共有キャッシュとして機能し、スヌーププロトコルにより一貫性（キャッシュコヒーレンシ）が維持される。例えば、座標（０，０）、座標（１，０）、座標（２，０）、座標（３，０）、座標（４，０）、座標（５，０）、座標（６，０）および座標（７，０）に位置するノード１３０が有するキャッシュメモリがバンク＃７の共有キャッシュとして機能する。
【００２９】
［ノード１３０の機能構成］
次に、図２を用いて、ノード１３０の構成の一例を説明する。図２は、ノード１３０の構成の一例を示すブロック図である。図２に示すように、ノード１３０は、４つのコア２０１と、キャッシュメモリ２０２とトーラスルータ３００とを有する。
【００３０】
また、コア２０１は、非共有のキャッシュ階層をもっていてもよい。なお、ノード１３０が有するコアの数は、図２に示す４つに限定されるものではなく、１以上のコアを有していればよい。また、コア間では、パケットにより情報が送受信されるものとして説明する。
【００３１】
キャッシュメモリ２０２は、例えば分散共有型のキャッシュメモリであり、複数のノード１３０間で共有される。Ｙ座標が同一であるように並んで配置された複数のノード１３０の各キャッシュメモリ２０２は、少なくとも一つのノード１３０、もしくは、少なくとも同一Ｙ座標の複数のノード１３０のグループを分割単位として、Ｙ軸方向にバンク分割された一つのキャッシュメモリとして管理される。また、Ｘ座標が同一であるように並んで配置された複数のノード１３０の各キャッシュメモリ２０２は、Ｘ軸方向においてキャッシュメモリの一貫性をスヌープ方式で制御される。
【００３２】
トーラスルータ３００は、複数のノード１３０の配置座標系の次元に応じてトーラスネットワークにおけるリングネットワーク間でのパケットのルーティングを行う。例えば、トーラスルータ３００は、キャッシュ共有に伴うデータ転送をＸ軸方向に限定する。このため、トーラスルータ３００は、Ｘ軸方向のリングネットワークを使用して共有キャッシュ間のデータ転送を行う。ここで、キャッシュ共有に伴うデータ転送には、スヌーププロトコルの制御情報などが含まれる。
【００３３】
また、例えば、トーラスルータ３００は、演算処理装置１００において、バンク間のデータ転送をＹ軸方向に限定する。このため、トーラスルータ３００は、Ｙ軸方向のリングネットワークを使用してバンク間のデータ転送を行う。なお、トーラスルータ３００の詳細な構成については、図３を用いて後述する。
【００３４】
［トーラスルータ３００の機能構成］
次に、図３を用いて、トーラスルータ３００の構成について説明する。図３は、トーラスルータ３００の構成の一例を示す図である。図３に示すように、トーラスルータ３００は、ポート３０１（図３中、Ｐ）と、ポート３０２と、ポート３０３と、ポート３０４と、クロスバ３０５と、インターフェース３０６（図３中、Ｔ）と、コントローラ３０７とを有する。
【００３５】
ポート３０１およびポート３０２は、Ｙ軸方向において接続するノード１３０からパケットを受信する。また、ポート３０１およびポート３０２は、Ｙ軸方向において接続するノード１３０へパケットを送信する。すなわち、ポート３０１およびポート３０２は、バンク間のデータ転送を行う。
【００３６】
ポート３０３およびポート３０４は、Ｘ軸方向において接続するノード１３０からパケットを受信する。ポート３０３およびポート３０４は、Ｘ軸方向において接続するノード１３０へパケットを送信する。すなわち、ポート３０３およびポート３０４は、キャッシュ共有に伴うデータ転送を行う。
【００３７】
クロスバ３０５は、各ポート３０１〜ポート３０４間で送受信されるデータの伝送路である。例えば、クロスバ３０５は、ポート３０１から入力されたパケットをポート３０２に出力する。また、例えば、クロスバ３０５は、ポート３０３から入力されたパケットをポート３０４に出力する。また、例えば、クロスバ３０５は、ポート３０１から入力されたパケットをポート３０４に出力する。
【００３８】
インターフェース３０６は、コア２０１の指示によりデータの取得を要求するパケットの生成や、キャッシュメモリ２０２から読出したデータを付加したパケットの生成を実行する。また、インターフェース３０６は、他のノード１３０から受信したパケットからデータを抽出してコア２０１に出力する。
【００３９】
コントローラ３０７は、外部に存在する図示しない制御用のプロセッサと接続し、ルーティングに関する各種の条件の設定を受付ける。また、コントローラ３０７は、例えば、自身に異常が生じた場合、制御用のプロセッサに自身に異常が生じた旨を通知する。
【００４０】
［処理動作］
次に、図４および図５を用いて、演算処理装置１００による処理動作を説明する。ここでは、図４を用いて、同一Ｘ座標上に位置する別のノードがデータを保持する場合の処理動作を説明し、図５を用いて、Ｘ座標およびＹ座標が異なる座標に位置する別のノードがデータを保持する場合の処理動作を説明する。
【００４１】
図４は、同一Ｘ座標上に位置する別のノードがデータを保持する場合の処理動作の一例を示す図である。なお、図４は、座標（０，７）に位置するノードが要求するデータを、座標（０，４）に位置するノードが保持する場合を示す。
【００４２】
図４に示すように、座標（０，７）に位置するノード１３０は、要求するデータのアドレスからデータを保持するバンクを検索する。ここで、座標（０，７）に位置するノード１３０は、バンク＃３のノード１３０を宛て先とするデータの取得要求を送信する（ステップＳ１）。
【００４３】
そして、座標（０，６）に位置するノード１３０は、データの取得要求を受信する。ここで、座標（０，６）に位置するノード１３０は、宛て先が自装置ではないので、自装置と接続するノード１３０にデータの取得要求を転送する（ステップＳ２）。
【００４４】
続いて、座標（０，４）に位置するノード１３０は、データの取得要求を受信する。ここで、座標（０，４）に位置するノード１３０は、宛て先が自装置であるので、要求されたデータを自装置が保持するか否かを検索する。そして、座標（０，４）に位置するノード１３０は、要求されたデータ付きでデータの取得要求に対する応答をデータの要求元に返信する（ステップＳ３）。
【００４５】
また、座標（０，６）に位置するノード１３０は、座標（０，４）に位置するノード１３０から応答を受信する。ここで、座標（０，６）に位置するノード１３０は、宛て先が自装置ではないので、自装置と接続するノード１３０に応答を転送する（ステップＳ４）。そして、座標（０，７）に位置するノード１３０は、応答を受信し、データを取得する。
【００４６】
図５は、Ｘ座標およびＹ座標が異なる座標に位置する別のノードがデータを保持する場合の処理動作の一例を示す図である。なお、図５は、座標（０，７）に位置するノードが要求するデータを、座標（５，４）に位置するノードが保持する場合を示す。
【００４７】
図５に示すように、座標（０，７）に位置するノード１３０は、要求するデータのアドレスからデータを保持するバンクを検索する。ここで、座標（０，７）に位置するノード１３０は、バンク＃３のノード１３０を宛て先とするデータの取得要求を送信する（ステップＳ１１）。
【００４８】
そして、座標（０，６）に位置するノード１３０は、データの取得要求を受信する。ここで、座標（０，６）に位置するノード１３０は、宛て先が自装置ではないので、自装置と接続するノード１３０にデータの取得要求を転送する（ステップＳ１２）。
【００４９】
続いて、座標（０，４）に位置するノード１３０は、データの取得要求を受信する。ここで、座標（０，４）に位置するノード１３０は、宛て先が自装置であるので、要求されたデータを自装置が保持するか否かを検索する。
【００５０】
ここで、座標（０，４）に位置するノード１３０は、要求されたデータを自装置が保持しないと判定し、同一Ｙ座標上の他のノードに要求されたデータを保持するか否かを問い合わせる（ステップＳ１３〜Ｓ１９）。例えば、座標（０，４）に位置するノード１３０は、座標（１，４）に位置するノード１３０および座標（２，４）に位置するノード１３０に要求されたデータを保持するか否かを問い合わせる（ステップＳ１３、Ｓ１４）。
【００５１】
同様に、座標（０，４）に位置するノード１３０は、座標（３，４）から座標（７，４）に位置するノード１３０に要求されたデータを保持するか否かを問い合わせる（ステップＳ１５〜Ｓ１９）。
【００５２】
また、座標（１，４）から座標（７，４）に位置するノード１３０は、要求されたデータを保持する旨あるいは、要求されたデータを保持しない旨を、座標（０，４）に位置するノード１３０に応答する（ステップＳ２０〜Ｓ２６）。
【００５３】
例えば、座標（１，４）に位置するノード１３０は、要求されたデータを保持しない旨を座標（０，４）に位置するノード１３０に応答する（ステップＳ２０）。また、座標（２，４）に位置するノード１３０は、要求されたデータを保持しない旨を座標（０，４）に位置するノード１３０に応答する（ステップＳ２１）。
【００５４】
同様に、座標（３，４）、座標（４，４）、座標（６，４）および座標（７，４）に位置するノード１３０は、要求されたデータを保持しない旨を座標（０，４）に位置するノード１３０に応答する（ステップＳ２２〜Ｓ２５）。
【００５５】
また、座標（５，４）に位置し、要求されたデータを保持するノード１３０は、要求されたデータを保持する旨と要求されたデータとを座標（０，４）に位置するノード１３０に応答する（ステップＳ２６）。そして、座標（０，４）に位置するノード１３０は、要求されたデータ付きでデータの取得要求に対する応答をデータの要求元であるノード１３０に返信する（ステップＳ２７）。
【００５６】
また、座標（０，６）に位置するノード１３０は、座標（０，４）に位置するノード１３０から応答を受信する。ここで、座標（０，６）に位置するノード１３０は、宛て先が自装置ではないので、自装置と接続するノード１３０に応答を転送する（ステップＳ２８）。そして、座標（０，７）に位置するノード１３０は、応答を受信し、データを取得する。
【００５７】
［ノード１３０による処理の処理手順］
次に図６および図７を用いて、ノード１３０による処理の処理手順を説明する。ここでは、図６を用いてデータの取得を要求するノード１３０による処理の処理手順を説明し、図７を用いてデータの取得を要求するパケットを受信したノード１３０による処理の処理手順を説明する。
【００５８】
（データの要求元であるノード１３０による処理）
図６は、データの取得を要求するノード１３０による処理の処理手順を示すフローチャートである。図６に示すように、データの取得を要求するノード１３０は、要求するデータを保持するノードのアドレスを検索する（ステップＳ１０１）。そして、ノード１３０は、検索したアドレスを宛て先とするデータの取得を要求するパケットを送信する（ステップＳ１０２）。
【００５９】
続いて、ノード１３０は、要求したデータを受信したか否かを判定する（ステップＳ１０３）。ここで、ノード１３０は、要求したデータを受信したと判定する場合（ステップＳ１０３、Ｙｅｓ）、処理を終了する。一方、ノード１３０は、要求したデータを受信していないと判定する場合（ステップＳ１０３、Ｎｏ）、所定の時間が経過後、ステップＳ１０３の処理を実行する。
【００６０】
（データの取得を要求するパケットを受信したノード１３０による処理）
図７は、データの取得を要求するパケットを受信したノード１３０による処理の処理手順を示すフローチャートである。図７に示すように、ノード１３０は、データの取得を要求するパケットを受信したか否かを判定する（ステップＳ２０１）。ここで、ノード１３０は、データの取得を要求するパケットを受信したと判定する場合（ステップＳ２０１、Ｙｅｓ）、Ｙ軸方向からパケットを受信したか否かを判定する（ステップＳ２０２）。
【００６１】
ノード１３０は、Ｙ軸方向からパケットを受信したと判定する場合（ステップＳ２０２、Ｙｅｓ）、宛て先とするアドレスが自装置のアドレスと一致するか否かを判定する（ステップＳ２０３）。ここで、ノード１３０は、宛て先とするアドレスが自装置のアドレスと一致しないと判定する場合（ステップＳ２０３、Ｎｏ）、受信したパケットを自装置と接続するノード１３０に転送する（ステップＳ２０４）。
【００６２】
一方、ノード１３０は、宛て先とするアドレスが自装置のアドレスと一致すると判定する場合（ステップＳ２０３、Ｙｅｓ）、要求されたデータを自装置のキャッシュメモリに保持しているか否かを判定する（ステップＳ２０５）。
【００６３】
ノード１３０は、要求されたデータを自装置のキャッシュメモリに保持していないと判定する場合（ステップＳ２０５、Ｎｏ）、同一のＸ軸方向に位置するノード１３０にブロードキャストして、要求されたデータを保持するか否かを問い合わせる（ステップＳ２０６）。そして、ノード１３０は、要求されたデータを保持するノード１３０からデータを受信する（ステップＳ２０７）。
【００６４】
続いて、ノード１３０は、データの要求元ノードにデータを応答する（ステップＳ２０８）。また、ノード１３０は、ステップＳ２０５において、要求されたデータを自装置のキャッシュメモリに保持していると判定する場合（ステップＳ２０５、Ｙｅｓ）、データの要求元ノードにデータを応答する（ステップＳ２０８）。
【００６５】
ノード１３０は、Ｙ軸方向からパケットを受信していないと判定する場合（ステップＳ２０２、Ｎｏ）、言い換えると、Ｘ軸方向からブロードキャストで送信されたパケットを受信したと判定する場合、以下の処理を実行する。すなわち、ノード１３０は、要求されたデータを自装置のキャッシュメモリ２０２に保持しているか否かを判定する（ステップＳ２０９）。なお、ノード１３０が、Ｘ軸方向からブロードキャストで送信されたパケットを受信したと判定する場合、ノード１３０がデータを保持しているかどうかを確認するほか、Ｘ軸上の先にある他のノードにもデータ要求パケットを転送する。ここで、ノード１３０では、トーラスルータ３００が転送を行い、コア及びキャッシュメモリはデータ要求パケットの転送には関与しない。
【００６６】
ノード１３０は、要求されたデータを自装置のキャッシュメモリ２０２に保持していると判定する場合（ステップＳ２０９、Ｙｅｓ）、データを保持する旨と、データとをブロードキャスト元のノード１３０に応答する（ステップＳ２１０）。一方、ノード１３０は、要求されたデータを自装置のキャッシュメモリ２０２に保持していないと判定する場合（ステップＳ２０９、Ｎｏ）、データを保持しない旨をブロードキャスト元のノード１３０に応答する（ステップＳ２１１）。
【００６７】
なお、ノード１３０は、ステップＳ２０１において、データの取得を要求するパケットを受信していないと判定する場合（ステップＳ２０１、Ｎｏ）、所定の時間が経過後、ステップＳ２０１の処理を実行する。
【００６８】
［実施例１の効果］
上述してきたように、演算処理装置１００によれば、コア数の増加に応じた性能の向上を図ることができる。
【００６９】
例えば、従来技術に係るメッシュネットワークは、規模に応じてバイセクションバンド幅を増加する。しかしながら、この場合、バイセクションバンド幅の値自体は、トーラスネットワークの半分しかない。また、リングネットワークのように規模に応じてバイセクションバンド幅を増やせない接続形態では、階層化したりデータバス幅を広げたりする。この場合、ルーティング論理やチップ内部の各所のデータバス幅を拡張することになり、変更量が非常に多くなってしまう。このようなことから、データバス幅の拡張に関しては、実装上困難である可能性もある。一方、演算処理装置１００は、Ｘ軸方向とＹ軸方向がともにリング接続であり、その間をトーラスルータ３００でルーティングするため、全体がトーラスネットワークとなっている。このようなトーラスネットワークでは、コア数の増加に伴ってバイセクションバンド幅が増大する。すなわち、演算処理装置１００は、接続形態を再設計することなく、コア数の増加に伴ってバイセクションバンド幅を増大できる。
【００７０】
また、演算処理装置１００は、共有キャッシュとバンク分割とを併用している。このため、コア数「ｎ」に対して共有キャッシュ自体の数は、バンクあたり「ｎの平方根」となる。すなわち、コア数に対するキャッシュコヒーレンシの制御対象が少なくなる。例えば、キャッシュが６４個である場合、キャッシュコヒーレンシの制御対象は、８個に抑えられる。この結果、演算処理装置１００は、コア数の増加に伴うキャッシュコヒーレンシを制御するコストを低減できる。
【００７１】
さらに、演算処理装置１００は、キャッシュコヒーレンシを制御するプロトコルとして単純かつリングネットワークと親和性の良いスヌープ方式を採用する。また、バンク分割によりスヌープバスもインタリーブされて独立に動作することになるので、スヌープバスの帯域がネックになりにくい。さらに、演算処理装置１００は、キャッシュコヒーレンシを保証する対象が増えるとバンク数も増えるので、スヌープバスの帯域を増加できる。このため、演算処理装置１００は、規模を拡張してもスヌープバスがネックになりにくい。また、演算処理装置１００では、コア数が増えるとバンク分割数が増えるので、キャッシュメモリへのアクセスのスループットをコア数の増加に応じて向上できる。
【００７２】
また、演算処理装置１００は、キャッシュコヒーレンシの制御プロトコルをスヌープ方式にすることによってプロトコル処理の負担を軽減できる。また、演算処理装置１００は、スヌープバスがリング接続であるのでブロードキャストの制御を簡略化できる。
【００７３】
また、演算処理装置１００では、複数のノード１３０を二次元平面上に整列して配置し、Ｘ軸方向およびＹ軸方向にそれぞれリング接続にすることで、ノード１３０間を接続するリンクが短くなる。これにより、演算処理装置１００は、高帯域の配線を実装できる。
【００７４】
また、演算処理装置１００は、単純なスヌーププロトコルと単純なリングネットワークとを採用することで、制御に用いる構成部の数、電力および時間を低減できる。これにより、演算処理装置１００では、高帯域のデータバスを実装できる。
【００７５】
また、演算処理装置１００は、キャッシュメモリ２０２と同様にメインメモリもバンク分割する。そして、メインメモリをキャッシュメモリ２０２と同じバンク分割にして、バンクとＹ座標を対応させている。このため、演算処理装置１００において、メインメモリとキャッシュメモリ２０２との間の転送は、Ｘ軸上に閉じ、Ｙ軸上のデータ転送には干渉しない。これにより、演算処理装置１００は、スループットを向上できる。
【００７６】
また、演算処理装置１００では、ノード１３０とＩ／Ｏ制御装置１２０との間の通信についても、ノード１３０間の通信と同様にトーラスネットワークを利用可能である。これにより、演算処理装置１００では、ノード１３０間の通信やノード１３０とＩ／Ｏ制御装置１２０との間の通信用に専用の配線やルーティング機構などが設けられなくてもよい。
【実施例２】
【００７７】
ところで、演算処理装置１００において、あるノード１３０に異常が生じる場合がある。そして、ノード間で分散共有型のキャッシュメモリを構成している場合、異常発生時に、ノード単位での切り離しが困難である。例えば、チップ内のノードは、ボードの差し替えやチップの載せ替えのように物理的に隔離や交換ができない。
【００７８】
このようなことから、演算処理装置１００は、異常が生じたノード１３０を安全に切り離した上で継続動作できるようにしてもよいものである。そこで、実施例２では、演算処理装置１００において、異常が生じたノード１３０を無効化する場合を説明する。なお、実施例２に係る演算処理装置の構成は、図１に示した演算処理装置１００の構成と同様であるので、図１と同一の符号を付与し、実施例２に係る演算処理装置の構成の詳細については説明を省略する。
【００７９】
［処理動作］
図８を用いて、ノード１３０に異常が生じた場合の処理動作を説明する。なお、ここでは、一例として、座標（３，４）に位置するノード１３０に異常が生じた場合を示す。図８は、座標（３，４）に位置するノード１３０に異常が生じた場合の処理動作を示す図である。なお、図８では、Ｙ軸方向のデータバスは省略しているが、図１と同様に、Ｙ軸方向もデータバスで接続される。
【００８０】
座標（３，４）に位置するノード１３０に異常が生じた場合、異常が生じたノード１３０が有するトーラスルータ３００のコントローラ３０７は、制御用のプロセッサにノード１３０に異常が生じた旨を通知する。また、異常が生じたノード１３０が有するコントローラ３０７は、Ｙ軸方向のポート３０１およびポート３０２を無効化する。
【００８１】
制御用のプロセッサは、座標（３，０）、座標（３，１）、座標（３，２）、座標（３，３）、座標（３，５）、座標（３，６）および座標（３，７）に位置するノード１３０のコントローラ３０７に、Ｙ軸方向のポート３０１およびポート３０２の無効化を指示する。これにより、演算処理装置１００は、Ｘ座標が３である一列のノード１３０を無効化する。なお、ノードを無効化する際には、一旦計算途中のデータを退避させてジョブを終了させ、新しい設定(故障ノードの切り離し)でシステムを立ち上げ直し、ジョブを(退避ポイントから)再実行することが多い。また、動的に(立ち上げ直しなしに)ノードを無効化することも可能である。この場合、動的にジョブの再割り付けやキャッシュのフラッシュやルーティング経路の切り替えなどを行う。
【００８２】
図８に示すように、Ｘ座標が３で同一である同一Ｘ座標列上のノード１３０を全て無効化する場合、データを共有するキャッシュの数が減るだけである。同一Ｘ座標列上のノード１３０を全て無効化しても、無効化したノード１３０とＸ軸方向に隣接するノード１３０同士は、リングネットワークの２つの線路の一方により接続されているため、通信可能である。このため、演算処理装置１００は、継続して動作が可能である。なお、演算処理装置１００は、同一Ｘ座標列ではなく同一Ｙ座標行上のノード１３０を全て無効化すると、無効化された同一Ｙ座標行のノード１３０が担当するバンク領域を使えなくなる。また、演算処理装置１００は、座標（３，４）に位置するノード１３０だけを無効化すると、Ｘ座標が３であるノード１３０で特定のバンクを使えなくなる。
【００８３】
また、異常のレベルとして、「コアやキャッシュだけが故障した場合」と、「ルータが故障した場合」とが考えられる。「コアやキャッシュだけが故障した場合」、ルータは、継続動作可能である。このため、Ｘ軸方向のリング接続が保たれる。
【００８４】
また、「ルータが故障した場合」、故障したノードのトーラスルータが使用できなくなるのでリング接続が切れるが、単一バス接続になるだけである。この場合、単一バス接続とリング接続とでは最適なルーティング方法が異なるので、ノードの無効化のほか、ルーティング論理を切り替える。例えば、図８において、座標（５，４）のノードから座標（０，４）のノードへの応答の経路は、「Ｘ座標において−方向へパケットを送信する経路」および「Ｘ座標において＋方向へパケットを送信する経路」の２つの経路がある。「Ｘ座標において−方向へパケットを送信する経路」は、座標（５，４）−座標（３，４）−座標（１，４）−座標（０，４）の順でパケットを送信する経路である。「Ｘ座標において＋方向へパケットを送信する経路」は、座標（５，４）−座標（６，４）−座標（４，４）−座標（２，４）−座標（０，４）の順でパケットを送信する経路である。そして、いずれのノードも正常である場合、座標（５，４）のノードは、最短経路である「Ｘ座標において−方向へパケットを送信する経路」を利用する。一方、座標（３，４）のノードがルータを含めて故障した場合には、座標（５，４）のノードは、「Ｘ座標において＋方向へパケットを送信する経路」を利用する。このように、演算処理装置１００は、ルータが故障した場合、故障したノードのトーラスルータが使用できなくなるのでリング接続が切れるが、単一バス接続になるだけである。したがって、演算処理装置１００では、他のノードから孤立するノードが発生することはない。
【００８５】
なお、ルータ故障時にもリング接続を保つには、バイパス経路を別途用意するか、物理層でバイパスさせる。図９を用いて、物理層でバイパスさせる一例を説明する。図９は、物理層でバイパスさせる一例を示す図である。
【００８６】
図９中における破線で記した配線は、トーラスルータ３００を介さずにバイパスが可能な経路である。このように、演算処理装置１００は、トーラスルータ３００の故障時に破線で示す物理層でバイパスさせる経路を使えば、リング接続を保つことができる。
【実施例３】
【００８７】
ところで、本発明は、上述した実施例以外にも、種々の異なる形態にて実施されてよい。そこで、実施例３では、本発明に含まれる他の実施例について説明する。
【００８８】
（システム構成等）
本実施例において説明した各処理のうち自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、制御手順、具体的名称については、特記する場合を除いて任意に変更することができる。
【００８９】
また、ノード１３０が有するコアの数は、図２に示す４つに限定されるものではない。例えば、図１０に示すように、ノード１３０ａは、１つのコア２０１と、分散共有型のキャッシュメモリ２０２と、トーラスルータ３００とを有する。また、図１に示す演算処理装置１００が、このノード１３０ａを有する場合、コアの数は、６４コアとなる。なお、図１０は、ノードあたり１コアである場合のノードの構成の一例を示すブロック図である。
【００９０】
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００９１】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００９２】
（付記１）コア部と、分散共有型のキャッシュメモリとを有する複数のノードをＸ軸方向およびＹ軸方向の二次元に配置する演算処理装置において、
前記複数のノードのうち前記Ｘ軸方向に隣接するノードをリング状に接続する第１の接続部と、
前記複数のノードのうち前記Ｙ軸方向に隣接するノードをリング状に接続する第２の接続部と、
を有し、
前記複数のノードに含まれるキャッシュメモリは、前記Ｙ軸方向にバンク分割され、前記Ｘ軸方向において該キャッシュメモリの一貫性をスヌープ方式で制御されて、前記複数のノード間で共有される
ことを特徴とする演算処理装置。
【００９３】
（付記２）前記第１の接続部は、
ノードがＸ軸方向において両端以外に位置する場合、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＸ軸方向において両端に位置する場合、該ノードと該ノードに隣接する位置に配置されるノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＸ軸方向において両端に位置するノードと隣接する場合、該ノードと両端に位置するノードのうち該ノードに隣接するノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
前記第２の接続部は、
ノードがＹ軸方向において両端以外に位置する場合、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し
ノードがＹ軸方向において両端に位置する場合、該ノードと該ノードに隣接する位置に配置されるノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＹ軸方向において両端に位置するノードと隣接する場合、該ノードと両端に位置するノードのうち該ノードに隣接するノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続する
ことを特徴とする付記１に記載の演算処理装置。
【００９４】
（付記３）前記複数のノードのいずれかに異常が発生した場合、異常が発生したノードおよび該ノードと前記Ｙ軸方向の座標が同一である列上に位置するノードを切離すことを特徴とする付記１または２に記載の演算処理装置。
【００９５】
（付記４）コア部と分散共有型のキャッシュメモリとを有する複数のノードをＸ軸方向およびＹ軸方向の二次元に配置する演算処理装置の制御方法において、
各ノードが、
他のノードが有する前記キャッシュメモリに保持されるデータの取得を要求する場合、前記複数のノードに含まれるキャッシュメモリをＹ軸方向に分割したバンクのうち、要求するデータを保持するバンクのアドレスを指定して、第２の接続部によりＹ軸方向にリング状に接続されるノードを介して該データを保持するバンクに該データの取得を要求し、
前記データの要求元のノードと前記Ｙ軸方向の座標が同一である列上に位置し、前記指定されたアドレスのバンクを管理するノードが、
要求された前記データを保持する場合、前記Ｙ軸方向にリング状に接続されるノードを介して該データを前記要求元のノードに応答し、要求された前記データを保持しない場合、第１の接続部により前記Ｘ軸方向にリング状に接続されるノードに、要求された前記データを保持するノードをスヌープ方式で問い合わせて該データを取得し、前記Ｙ軸方向にリング状に接続されるノードを介して取得した該データを前記要求元のノードに応答する
各処理を含んだことを特徴とする演算処理装置の制御方法。
【００９６】
（付記５）前記第１の接続部は、
ノードがＸ軸方向において両端以外に位置する場合、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＸ軸方向において両端に位置する場合、該ノードと該ノードに隣接する位置に配置されるノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＸ軸方向において両端に位置するノードと隣接する場合、該ノードと両端に位置するノードのうち該ノードに隣接するノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
前記第２の接続部は、
ノードがＹ軸方向において両端以外に位置する場合、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し
ノードがＹ軸方向において両端に位置する場合、該ノードと該ノードに隣接する位置に配置されるノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続し、
ノードがＹ軸方向において両端に位置するノードと隣接する場合、該ノードと両端に位置するノードのうち該ノードに隣接するノードとを接続するとともに、該ノードと、該ノードに隣接する位置に配置されるノードに隣接するノードとを接続する
ことを特徴とする付記４に記載の演算処理装置の制御方法。
【００９７】
（付記６）前記複数のノードのいずれかに異常が発生した場合、異常が発生したノードおよび該ノードと前記Ｙ軸方向の座標が同一である列上に位置するノードを切離す
処理を更に含んだことを特徴とする付記４または５に記載の演算処理装置の制御方法。
【符号の説明】
【００９８】
１００  演算処理装置
１０１  第１の接続部
１０２  第２の接続部
１３０  ノード
２０１  コア
２０２  分散共有型のキャッシュメモリ
【図１】
2014038494.tif 000003
【図２】
2014038494.tif 000004
【図３】
2014038494.tif 000005
【図４】
2014038494.tif 000006
【図５】
2014038494.tif 000007
【図６】
2014038494.tif 000008
【図７】
2014038494.tif 000009
【図８】
2014038494.tif 000010
【図９】
2014038494.tif 000011
【図１０】
2014038494.tif 000012