以下に、本願の開示する情報処理装置、演算処理装置及び情報処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、演算処理装置及び情報処理装置の制御方法が限定されるものではない。
図1は、実施例に係る情報処理システムの一例の図である。本実施例に係る情報処理システムは、複数のノード1及び複数のクロスバスイッチ5を有する。ノード1は、情報処理装置の一例であり、例えば、サーバなどである。
ノード1は、サービスプロセッサ2、複数のメモリ3、2つのXB(Cross bar)チップ4及び演算処理装置である複数のプロセッサ10を有する。ただし、それぞれのノード1は、プロセッサ10の数などが異なってもよい。
XBチップ4は、各プロセッサ10が有する外部IF(Interface)106に接続される。また、XBチップ4は、各クロスバスイッチ5に接続される。XBチップ4は、接続されたプロセッサ10又はクロスバスイッチ5からパケットを受信する。そして、XBチップ4は、受信したパケットの送信先を判定し、送信先である他のプロセッサ10又はクロスバスイッチ5に経路を切り替えてパケットを転送する。
クロスバスイッチ5は、各ノード1が有するXBチップ4に接続される。クロスバスイッチ5は、XBチップ4からパケットを受信する。そして、クロスバスイッチ5は、受信したパケットの送信先を判定し、送信先であるプロセッサ10に接続されたXBチップ4に経路を切り替えてパケットを転送する。
また、クロスバスイッチ5は、サービスプロセッサ501を有する。サービスプロセッサ501は、自己が配置されたクロスバスイッチ5の起動やクロスバスイッチ5内の構成制御や温度監視などの状態監視を行う。
プロセッサ10は、コア101、キャッシュ102、IOコントローラ103、メモリコントローラ104、構成制御レジスタ105及び外部IF106を有する。
コア101は、CPUコアである。コア101は、メモリ3に対するデータの読み出し及び書き込みをメモリコントローラ104に指示する。また、コア101は、IO装置の制御をIOコントローラ103に指示する。また、コア101は、外部IF106及びXBチップ4を介して、自己が属するノード1内の他のプロセッサ10に搭載されたコア101と通信する。また、コア101は、外部IF106、XBチップ4及びクロスバスイッチ5を介して自己が属するノード1以外のノード1内の他のプロセッサ10に搭載されたコア101と通信する。
そして、コア101は、キャッシュ102、IOコントローラ103、メモリコントローラ104、構成制御レジスタ105及び外部IF106を用いて演算処理を行う。
キャッシュ102は、メモリ3よりも高速な一時的な記憶装置である。構成制御レジスタ105は、後述するプロセッサ10の動作モードの設定、各プロセッサ10のCHIPID及びアドレスとCHIPIDとの対応情報などを記憶する。また、外部IF106は、プロセッサ10がXBチップ4と接続するためのインタフェースである。
メモリコントローラ104は、メモリ3に対するデータの読み出し及び書き込みを制御する。各メモリ3は、それぞれのプロセッサ10に対応させて配置される。メモリ3は、対応するプロセッサ10が使用する主記憶媒体である。
IOコントローラ103は、図1には図示していないが、LAN(Local Area Network)などのネットワークやストレージ装置などのIO装置に接続される。IOコントローラ103は、接続されたネットワークを介した通信の制御や接続されたIO装置の制御を行う。このIOコントローラ103が、「制御部」及び「制御装置」の一例にあたる。
サービスプロセッサ2は、後述するプロセッサ10の動作モードの設定、各プロセッサ10のCHIPID及びアドレスとCHIPIDとの対応情報を各プロセッサ10の構成情報レジスタに書き込む。また、サービスプロセッサ2は、自己が配置されたノード10に搭載された各プロセッサ10の起動やノード1内の温度監視などの状態監視などを行う。
サービスプロセッサ2は、各ノード1に配置される。そして、サービスプロセッサ2及びサービスプロセッサ501のうちの何れかがメインのサービスプロセッサとなり、全体の統括制御を行う。具体的には、メインのサービスプロセッサは、各プロセッサ10のCHIPIDの割り当て、通信セグメントの決定、及び、各セグメントでのプロセッサ10の動作モードの決定などを行う。
ここで、本実施例では、プロセッサ10に内蔵するIOコントローラ103の数が異なるものが混在する。具体的には、IOコントローラ103の数が2つのプロセッサ10とIOコントローラ103の数が4つのプロセッサ10が存在する。
そして、IOコントローラ103を4つ有するプロセッサ10は、通信の運用形態に応じて、通常モードと互換モードという2つの動作モードを有する。具体的には、IOコントローラ103の数が同じ他のプロセッサ10とのみ通信を行う場合、プロセッサ10は、通常モードで動作する。また、IOコントローラ103の数が異なる他のプロセッサ10と通信を行う可能性がある場合、プロセッサ10は、互換モードで動作する。この通常モードが、「第1モード」の一例にあたる。また、互換モードが、「第2モード」の一例にあたる。以下に、本実施例に係るプロセッサ10による通信及びパケット処理の詳細について説明する。
図2は、4つのIOコントローラを有するプロセッサの内部を表すブロック図である。ただし、図2では、4つのIOコントローラ103をまとめて1つのIOコントローラ103で表す。図2に示すように、プロセッサ10は、外部バスIF部11、パケット送信部12、パケット受信部13、IOリクエスト生成部14、IOリクエスト処理部15及びリクエスト処理制御部16を有する。また、プロセッサ10は、図1に示した構成制御レジスタ105及びIOコントローラ103を有する。IOコントローラ103は、IO装置6に接続される。IOコントローラ103は、接続されたIO装置6を制御する。以下では、4つのIOコントローラ103を有するプロセッサ10を単にプロセッサ10という場合がある。
ここで、パケット送信部12及びパケット受信部13が、「通信部」の一例にあたる。また、IOリクエスト生成部14が、「生成部」の一例にあたる。また、IOリクエスト処理部15が、「選択部」の一例にあたる。さらに、リクエスト処理制御部16が、「処理実行部」の一例にあたる。
外部バスIF部11は、例えば、図1の外部IF106によって実現される。パケット送信部12、パケット受信部13、IOリクエスト生成部14、IOリクエスト処理部15及びリクエスト処理制御部16は、例えば、図1のコア101及びキャッシュ102により実現される。
ここで、図2に示したプロセッサ10の各機能をパケット送信時の機能と受信時の機能とに分けて説明する。まず、図3を参照して、プロセッサ10のIO処理のパケットの送信時の機能について説明する。図3は、4つのIOコントローラを有するプロセッサにおけるパケット送信時の機能のブロック図である。図3では、4つのIOコントローラ103は、IOコントローラ131〜134として表される。
構成制御レジスタ105は、動作モード情報レジスタ151、CHIPIDレジスタ152及び宛先リストレジスタ153を有する。この動作モード情報レジスタ151を有する構成制御レジスタ105が、「動作モード決定部」の一例にあたる。
ここで、動作モード情報レジスタ151に登録される各動作モードについて説明する。4つのIOコントローラ103を有するプロセッサ10は、パケットのフォーマットとして6ビットのCHIPIDと2ビットのIO−IDを用いて送信先や送信元を表すことが決められる。これに対して、2つのIOコントローラ103を有するプロセッサ10は、パケットのフォーマットとして6ビットのCHIPIDと1ビットのIO−IDを用いて送信先や送信元を表すことが決められる。このCHIPIDが、「演算処理装置識別情報」の一例にあたる。また、IO−IDが、「制御部識別情報」の一例にあたる。
そこで、4つのIOコントローラ103を有するプロセッサ10は、他の4つのIOコントローラ103を有するプロセッサ10と通信する場合、動作モードとして通常モードが選択される。すなわち、通常モードの場合、プロセッサ10は、6ビットのCHIPIDと2ビットのIO−IDを用いて送信先や送信元を表すパケットのフォーマットを用いる。この通常モードで使用されるCHIPIDのサイズの6ビットが、「第1サイズ」の一例にあたる。また、IO−IDのサイズの2ビットが、「第2サイズ」の一例にあたる。
一方、4つのIOコントローラ103を有するプロセッサ10は、2つのIOコントローラ103を有するプロセッサ10と通信する可能性がある場合、動作モードとして互換モードが選択される。すなわち、互換モードの場合、プロセッサ10は、6ビットのCHIPIDと1ビットのIO−IDを用いて送信先や送信元を表すパケットのフォーマットを用いる。ただし、この場合、6ビットのCHIPIDのうち最下位の1ビットは、実際には4つのIOコントローラ103を有するプロセッサ10が有するIOコントローラ103のIO−IDの上位1ビットに割り当てられる。この通常モードで使用されるIO−IDのサイズの1ビットが、「第3サイズ」の一例にあたる。そして、通常モードと互換モードにおけるIO−IDのサイズの差である1ビットが、「所定サイズ」の一例にあたる。さらに、互換モードにおける6ビットのCHIPIDの最下位の1ビットが、「所定サイズの領域」の一例にあたる。
例えば、構成制御レジスタ105は、動作モード情報レジスタ151内に、通常モードを表す値として「0」を記憶し、互換モードを表す値として「1」を記憶する。また、構成制御レジスタ105は、6ビットのCHIPIDレジスタ152を有する。また、宛先リストレジスタ153は、各プロセッサ10のCHIPIDとアドレスとの対応を表す情報である。
また、動作モードが互換モードの場合、後述するようにCHIPIDレジスタ152の最下位の1ビットの値はIOコントローラ103の上位1ビットを表す値に変換される。そのため、互換モードの場合、CHIPIDレジスタ152は、上位5ビットにより区別される値が与えられる。すなわち、CHIPIDレジスタ152の最下位の1ビットの値は、予め「0」などと決められる。これに対して、動作モードが通常モードであれば、CHIPIDレジスタ152は6ビット全てを使用して表される。
図3に戻って説明を続ける。IOコントローラ131〜134は、同じ機能を有するので、ここでは、これらを区別せずにIOコントローラ103として説明する。IOコントローラ103は、2ビットで表される自己のIOコントローラ番号を記憶する。
IOコントローラ103は、実行した処理に関してパケットの送信を決定する。そして、IOコントローラ103は、自己のIOコントローラ番号及び宛先のアドレスとともにIOリクエスト生成部14にパケット送信の要求を出力する。IOリクエスト生成部14は、調停回路41、選択回路42、不使用情報出力部43、選択回路44及びパケット生成部45を有する。
調停回路41は、IOコントローラ103(IOコントローラ131〜134)からパケットの送信要求を取得する。このパケットの送信要求には、IOコントローラ番号及び宛先のアドレスが付属する。そして、調停回路41は、受信した送信要求の調停を行い、出力するパケットの送信要求を決定する。その後、調停回路41は、出力を決定したパケットの送信元のIOコントローラ103のIOコントローラ番号の上位1ビットの値を選択回路42及び選択回路44へ出力する。また、調停回路41は、出力を決定したパケットの送信元のIOコントローラ103のIOコントローラ番号の下位1ビットの値を送信元ID生成部451へ出力する。また、調停回路41は、送信先のアドレスを送信先ID生成部452及びリクエスト情報生成部453へ出力する。さらに、調停回路41は、リクエスト種やリクエストIDなどを含むリクエスト情報をリクエスト情報生成部453へ出力する。
選択回路42は、動作モードに応じてCHIPIDの情報を決定する回路である。選択回路42は、構成制御レジスタ105の動作モード情報レジスタ151が有する値を取得する。すなわち、選択回路42は、動作モードを構成制御レジスタ105から取得する。さらに、選択回路42は、CHIPIDレジスタ152の最下位1ビットの値を構成制御レジスタ105から取得する。また、選択回路42は、パケットの送信元のIOコントローラ103のIOコントローラ番号の上位1ビットの値の入力を調停回路41から受ける。
取得した動作モード情報レジスタ151の値が「0」である、すなわち通常モードの場合、選択回路42は、取得したプロセッサ10のCHIPIDの最下位1ビットの値を送信元ID生成部451へ出力する。
これに対して、取得した動作モード情報レジスタ151の値が「1」である、すなわち互換モードの場合、選択回路42は、IOコントローラ番号の上位1ビットの値を送信元ID生成部451へ出力する。
不使用情報出力部43は、不使用を表す情報を出力値として出力する回路である。
選択回路44は、動作モードに応じてIO−IDの情報を決定する回路である。選択回路44は、動作モード情報レジスタ151の値を構成制御レジスタ105から取得する。さらに、選択回路44は、パケットの送信元のIOコントローラ103のIOコントローラ番号の上位1ビットの値の入力を調停回路41から受ける。また、選択回路44は、不使用を表す情報の入力を不使用情報出力部43から受ける。
取得した動作モード情報レジスタ151の値が「0」である、すなわち通常モードの場合、選択回路44は、送信元のIOコントローラ103のIOコントローラ番号の上位1ビットの値を送信元ID生成部451へ出力する。
これに対して、取得した動作モード情報レジスタ151の値が「1」である、すなわち互換モードの場合、選択回路44は、送信元ID生成部451への信号の出力を行わない。
パケット生成部45は、取得した情報を用いて送信するパケットを生成する回路である。パケット生成部45は、送信元ID生成部451、送信先ID生成部452及びリクエスト情報生成部453を有する。パケット生成部45は、動作モード情報レジスタ151の値を構成制御レジスタ105から取得し、動作モードを取得する。そして、パケット生成部45は、取得した動作モードにしたがって、送信元ID生成部451を動作させる。
送信元ID生成部451は、動作モードにしたがってパケットに格納する送信元の送信元IDを生成する。送信元IDには、CHIPIDとIO−IDが含まれる。動作モードが通常モードの場合、送信元ID生成部451は、6ビットのCHIPID及び2ビットのIO−IDを含む送信元IDを生成する。一方、動作モードが互換モードの場合、送信元ID生成部451は、最下位の1ビットにIO−IDの上位1ビットを含む6ビットのCHIPIDとIO−IDの下位1ビットを1ビットのIO−IDとして含む送信元IDを生成する。具体的には、送信元ID生成部451は、以下のように送信元IDを生成する。
通常モードの場合、送信元ID生成部451は、CHIPIDレジスタ152の上位5ビットの値を構成制御レジスタ105から取得する。また、送信元ID生成部451は、CHIPIDレジスタ152の最下位1ビットの値の入力を選択回路42から受ける。また、送信元ID生成部451は、IO−IDの上位1ビットの値の入力を選択回路44から受ける。さらに、送信元ID生成部451は、IO−IDの下位1ビットの値の入力を調停回路41から受ける。そして、送信元ID生成部451は、構成制御レジスタ105から取得した値に選択回路44から取得した値を付加して、6ビットのCHIPIDを生成する。この生成されたCHIPIDは、CHIPIDレジスタ152の各ビットの値に一致する。また、送信元ID生成部451は、選択回路44から取得した値に調停回路41から取得した値を付加して送信元のIOコントローラ103の2ビットのIO−IDを生成する。そして、送信元ID生成部451は、生成したCHIPIDに生成したIO−IDを付加して送信元IDを生成する。
これに対して、互換モードの場合、送信元ID生成部451は、CHIPIDレジスタ152の上位5ビットの値を構成制御レジスタ105から取得する。また、送信元ID生成部451は、IO−IDの上位1ビットの入力を選択回路42から受ける。さらに、送信元ID生成部451は、IO−IDの下位1ビットの値の入力を調停回路41から受ける。そして、送信元ID生成部451は、構成制御レジスタ105から取得した値に選択回路44から取得した値を付加して、6ビットのCHIPIDを生成する。この生成されたCHIPIDは、最下位の1ビットにIO−IDの上位1ビットを含むことになる。また、送信元ID生成部451は、動作モードが互換モードであることから、IO−IDを1ビットに決定する。そして、送信元ID生成部451は、調停回路41から取得した値を1ビットのIO−IDとする。その後、送信元ID生成部451は、生成したCHIPIDに生成した1ビットのIO−IDを付加して送信元IDを生成する。
送信先ID生成部452は、パケットに格納する送信先IDを生成する。送信先ID生成部452は、アドレスの入力を調停回路41から受ける。そして、送信先ID生成部452は、取得したアドレスに対応するCHIPIDを宛先リストレジスタ153から取得して送信先IDを生成する。
ここで、宛先リストレジスタ153では、4つのIOコントローラを有するプロセッサ10を宛先とするアドレスに対するCHIPIDの割り当ては、通常モードでは6ビットのCHIPIDが予め割り当てられる。また、互換モードでは、上位5ビットがCHIPIDの上位5ビットを表し、最下位の1ビットがIO−IDを表すCHIPIDが、アドレスに対するCHIPIDとして予め割り当てられる。
リクエスト情報生成部453は、パケットに格納するリクエストに関する情報を生成する。リクエスト情報生成部453は、アドレスの入力を調停回路41から受ける。また、リクエスト情報生成部453は、データやリクエストの種別の情報やリクエストのIDの入力を調停回路41から受ける。そして、リクエスト情報生成部453は、リクエストID、リクエスト種、アドレス及びデータをパケットに格納する状態で生成する。
パケット生成部45は、リクエスト情報生成部453が生成したパケットID、パケット種及びアドレス、送信先ID生成部452が生成した送信先ID、並びに、送信元ID生成部451が生成した送信元IDを用いてパケットのヘッダを生成する。さらに、パケット生成部45は、生成したヘッダにデータを付加してパケットを生成する。そして、パケット生成部45は、生成したパケットをパケット送信部12へ出力する。
パケット送信部12は、送信するパケットの入力をパケット生成部45から受ける。そして、パケット送信部12は、外部バスIF部11を介してXBチップ4へパケットを出力する。
このように、互換モードにおいて出力パケットの送信先IDを6ビットのCHIPID及び1ビットのIO−IDとすることで、プロセッサ10は、2つのIOコントローラ103を有するプロセッサ10と通信を行うことができる。そして、2つのIOコントローラ103を有するプロセッサ10は、CHIPIDの上位5ビットとIO−IDの上位1ビットで生成されたCHIPIDを送信元のCHIPIDとして処理する。すなわち、実際には1つのプロセッサ10しか存在しないが、2つのIOコントローラ103を有するプロセッサ10は、CHIPIDの上位5ビットにIO−IDの上位1ビットが付加された2つのプロセッサ10と通信するように動作する。
次に、図4を参照して、プロセッサ10のIO処理のパケットの受信時の機能について説明する。図4は、4つのIOコントローラを有するプロセッサにおけるパケット受信時の機能のブロック図である。ここでは、プロセッサ10がIO処理のパケットを受信する場合を説明する。
構成制御レジスタ105は、動作モード情報レジスタ151及びCHIPIDレジスタ152を有する。動作モード情報レジスタ151及びCHIPIDレジスタ152は、送信時の場合と同様の値である。
外部バスIF部11は、CHIPIDチェック部111を有する。外部バスIF部11は、XBチップ4からIO処理用のパケットを受信する。
CHIPIDチェック部111は、動作モード情報レジスタ151の値を取得する。また、CHIPIDチェック部111は、受信したパケットの送信先のCHIPIDを取得する。
通常モードの場合、CHIPIDチェック部111は、受信したパケットの送信先のCHIPIDとCHIPIDレジスタ152との6ビット全てが一致するか否かを判定する。一致しない場合、外部バスIF部11は、エラーと判定しエラー応答を送信元に返す。これに対して、一致した場合、外部バスIF部11は、パケットをパケット受信部13へ出力する。
一方、互換モードの場合、CHIPIDチェック部111は、受信したパケットの送信先のCHIPIDとCHIPIDレジスタ152との上位5ビットが一致するか否かを判定する。すなわち、互換モードの場合、CHIPIDチェック部111は、CHIPIDの最下位の1ビットは無視する。一致しない場合、外部バスIF部11は、エラーと判定しエラー応答を送信元に返す。これに対して、一致した場合、外部バスIF部11は、パケットをパケット受信部13へ出力する。
パケット受信部13は、パケットの入力を外部バスIF部11から受ける。そして、パケット受信部13は、取得したパケットをIOリクエスト処理部15のIOコントローラ選択部51へ出力する。
IOリクエスト処理部15は、受信したパケットを宛先のIOコントローラ103へ送信する回路である。IOリクエスト処理部15は、IOコントローラ選択部51及び選択回路52を有する。
IOコントローラ選択部51は、IO−ID抽出部511、選択回路512及びリクエスト情報取得部513を有する。IOコントローラ選択部51のIO−ID抽出部511及びリクエスト情報取得部513は、パケットの入力をパケット受信部13から受ける。
IO−ID抽出部511は、受信したパケットから送信先のIO−IDの上位1ビットを抽出する。また、IO−ID抽出部511は、パケットから送信先のCHIPIDの最下位の1ビットを抽出する。そして、IO−ID抽出部511は、IO−IDの上位1ビット及びCHIPIDの最下位の1ビットを選択回路512へ出力する。さらに、IO−ID抽出部511は、パケットからIO−IDの下位1ビットを抽出する。そして、IO−ID抽出部511は、抽出したIO−IDの下位1ビットの値を選択回路52へ出力する。
選択回路512は、動作モード情報レジスタ151の値を構成制御レジスタ105から取得し、動作モードを判定する。さらに、選択回路512は、IO−IDの上位1ビット及びCHIPIDの最下位の1ビットの入力をIO−ID抽出部511から受ける。
通常モードの場合、選択回路512は、IO−IDの上位1ビットを選択回路52へ出力する。これに対して、互換モードの場合、選択回路512は、CHIPIDの最下位の1ビットをIO−IDの上位1ビットとして選択回路52へ出力する。
リクエスト情報取得部513は、受信したパケットからリクエストの内容、アドレス及びデータを取得する。そして、リクエスト情報取得部513は、リクエストの内容、アドレス及びデータなどのリクエスト情報を選択回路52へ出力する。
選択回路52は、IO−IDの上位1ビットの入力を選択回路512から受ける。また、選択回路52は、IO−IDの下位1ビットの入力をIO−ID抽出部511から受ける。そして、選択回路52は、受信したIO−IDの上位1ビット及び下位1ビットで表されるIOコントローラ番号を有するIOコントローラ103をIOコントローラ131〜134の中から選択する。
また、選択回路52は、リクエスト情報の入力をリクエスト情報取得部513から受ける。そして、選択回路52は、選択したIOコントローラ103に対して、リクエスト情報を送信する。リクエスト情報を受信したIOコントローラ103は、リクエストにしたがい接続されるIO装置(不図示)を制御する。
このように、互換モードの場合、IOリクエスト処理部15は、パケットに格納された送信先IDのうちCHIPIDの最下位の1ビット及びIO−IDの1ビットで処理を行わせるIOコントローラ103を判定する。これにより、1ビットのIO−IDしか有さないフォーマットのパケットを受信しても、IOリクエスト処理部15は、4つのIOコントローラ131〜134の中から適切なIOコントローラ103を選択できる。
また、2つのIOコントローラを有するプロセッサ10は、送信先の6ビットのCHIPIDを有するプロセッサ10の1ビットのIO−IDで表されるIOコントローラ103に対してパケットを送信する。ただし、1つのプロセッサ10が有するIOコントローラ103に対するパケットのCHIPIDは上位5ビットが同様で、最下位の1ビットが異なるCHIPIDである。そこで、4つのIOコントローラ103を有するプロセッサ10は、2つのIOコントローラを有するプロセッサ10が送信した自己宛のパケットを自己宛と判定でき、且つ、指定されたIOコントローラ103を選択できる。
ここで、図5を参照して、動作モード毎のパケットについて再度説明する。図5は、動作モード毎のパケットを説明するための図である。
パケット201は、フォーマットの一例を示す。パケット201は、ヘッダ部202及びデータ部203を有する。ヘッダ部202には、パケットID、パケット種、送信先、送信元及びアドレスが格納される。また、データ部203には、データが格納される。
いずれの動作モードにおいても、ヘッダ部202のパケットID、パケット種及びアドレスは同様に生成される。またデータ部203には同様にデータが格納される。
これに対して、互換モードであれば、4つのIOコントローラ103を有するプロセッサ10が送信元の場合、ヘッダ部202の送信元にID204が格納される。また、4つのIOコントローラ103を有するプロセッサ10が送信先の場合、ヘッダ部202の送信先にID204が格納される。
具体的には、ID204は、それが示す対象が4つのIOコントローラ103の場合、CHIPID205として割り当てられた6ビットのうち最下位の1ビットであるビット206がIO−IDの上位1ビットを表す。したがって、示す対象が4つのIOコントローラ103の場合、ID204は、ビット206とIO−ID207とで2ビットのIO−IDを表す。
ここで、表208は、互換モードの場合の送信先又は送信元の一例を表す。表208のCHIPIDは、ID204のCHIPID205にあたり、IO−IDは、ID204のIO−ID207にあたる。すなわち、CHIPIDが「0x0」のプロセッサ10に対して、「0x0」及び「0x1」の2つのIO−IDが割り当てられる。さらに、CHIPIDとして「0x0」の最下位の1ビットと異なる「0x1」を有するプロセッサ10に対して、「0x0」及び「0x1」の2つのIO−IDが割り当てられる。このように、互換モードの場合、2つのCHIPIDと2つのIO−IDとの組によって、実際には1つのプロセッサ10の中の4つのIOコントローラ103を表す。
一方、通常モードであれば、ヘッダ部202の送信元及び送信先にID210が格納される。具体的には、ID210は、CHIPID211として割り当てられた6ビットとIO−ID212として割り当てられた2ビットとで表される。
ここで、表213は、通常モードの場合の送信先又は送信元の一例を表す。表213のCHIPIDは、ID210のCHIPID211にあたり、IO−IDは、ID210のIO−ID212にあたる。すなわち、CHIPIDが「0x0」のプロセッサ10に対して、「0x0」〜「0x3」の4つのIO−IDが割り当てられる。このように、通常モードの場合、1つのCHIPIDと4つのIO−IDとの組によって、1つのプロセッサ10の中の4つのIOコントローラ103を表す。
さらに、図6を参照して、他のプロセッサ10から見た4つのIOコントローラ103を有するプロセッサ10の状態を説明する。図6は、他のプロセッサから見た4つのIOコントローラを有するプロセッサの状態を説明するための図である。
図6の状態220は、実際の4つのIOコントローラ103を有するプロセッサ10の状態を表す。また、状態230は、2つのIOコントローラ103を有するプロセッサ10から見た4つのIOコントローラ103を有するプロセッサ10の状態を表す。ここで、プロセッサ10は対応するメモリ3をそれぞれが有する。そこで、図6では、組み合わせが分かり易いようにプロセッサ10の中に対応するメモリ3を含ませて記載している。また、プロセッサ10は、1つのコア101及び1つの対応するメモリ3を有する場合で示したが、コア101及びメモリ3の数は他の数でもよい。
4つのIOコントローラ103を有するプロセッサ10は、実際には、状態220に示すように、1つのコア101及び1つのメモリ3を有する。さらに、プロセッサ10は、コア101及びメモリ3に対して、4つのIOコントローラ131〜134を有する。
一方、互換モードの場合、1つのプロセッサ10は、最下位の1ビットが異なる6ビットのCHIPIDと1ビットのIO−IDによって、送信先及び送信元が表される。この場合、他のプロセッサ10は、4つのIOコントローラ103を有するプロセッサ10のIOコントローラ103を2つのCHIPID及び2つのIO−IDによって判別する。すなわち、プロセッサ10は、状態230に示すように、仮想のプロセッサ231及び232に分けられて認識される。さらに、仮想のプロセッサ231及び232それぞれにIOコントローラ131及び132、もしくは、IOコントローラ133及び134が含まれる。そして、仮想のプロセッサ231又は232の何れかのCHIPIDは、プロセッサ10のCHIPIDと一致する。この場合、仮想のプロセッサ231のCHIPIDとプロセッサ10のCHIPIDとが一致するものとすると、仮想のプロセッサ231は、コア101及びメモリ3を有するといえる。一方、仮想のプロセッサ232は、実際にはないCHIPIDで識別されるため、コア101及びメモリ3を有さないプロセッサとなる。
このように、互換モードの場合、他のプロセッサ10は、仮想のプロセッサ231のIOコントローラ131及び132、並びに、仮想のプロセッサ232のIOコントローラ133及び134を通信相手とする。これにより、他のプロセッサ10は、実際のプロセッサ10のIOコントローラ131〜134と通信を行うことができる。
また、パケットによって送られてくるリクエストには、IO処理以外の他の処理も含まれる。そのため、4つのIOコントローラ103を有するプロセッサ10は、他の処理のリクエストが、通常モード及び互換モードの何れのフォーマットのパケットで送られてきた場合でも、それらを適切に処理する機能を有する。そこで、図7を参照して、IO処理以外の他の処理のリクエストを処理する場合の4つのIOコントローラ103を有するプロセッサ10について説明する。図7は、4つのIOコントローラを有するプロセッサにおけるリクエスト処理時の機能のブロック図である。
構成制御レジスタ105は、動作モード情報レジスタ151及びCHIPIDレジスタ152を有する。動作モード情報レジスタ151及びCHIPIDレジスタ152は、送信時の場合と同様の値である。
外部バスIF部11は、CHIPIDチェック部111を有する。外部バスIF部11は、XBチップ4からIO処理用のパケットを受信する。
CHIPIDチェック部111は、動作モード情報レジスタ151の値を取得し、動作モードを判定する。また、CHIPIDチェック部111は、受信したパケットの送信先のCHIPIDを取得する。
通常モードの場合、CHIPIDチェック部111は、受信したパケットの送信先のCHIPIDとCHIPIDレジスタ152との6ビット全てが一致するか否かを判定する。一致しない場合、外部バスIF部11は、エラーと判定しエラー応答を送信元に返す。これに対して、一致した場合、外部バスIF部11は、パケットをパケット受信部13へ出力する。
一方、互換モードの場合、CHIPIDチェック部111は、受信したパケットの送信先のCHIPIDとCHIPIDレジスタ152との上位5ビットが一致するか否かを判定する。すなわち、互換モードの場合、CHIPIDチェック部111は、CHIPIDの最下位の1ビットは無視する。一致しない場合、外部バスIF部11は、エラーと判定しエラー応答を送信元に返す。これに対して、一致した場合、外部バスIF部11は、パケットをパケット受信部13へ出力する。
パケット受信部13は、リクエストのパケットの入力を外部バスIF部11から受ける。そして、パケット受信部13は、リクエストのパケットをリクエスト処理制御部16の応答判定部61及び選択回路62へ出力する。
リクエスト処理制御部16は、応答判定部61、選択回路62、受信バッファ63、リクエスト処理部64、リクエスト応答部65、受信バッファ66及び仮想チップ宛リクエスト応答部67を有する。さらに、応答判定部61は、CHIPID抽出部611及びAND回路612を有する。
CHIPID抽出部611は、パケットの入力をパケット受信部13から受ける。そして、CHIPID抽出部611は、取得したパケットから送信先のCHIPIDを抽出し、さらに、抽出したCHIPIDから最下位の1ビットの値を取得する。その後、CHIPID抽出部611は、取得した送信先のCHIPIDの最下位の1ビットの値をAND回路612へ出力する。
AND回路612は、動作モード情報レジスタ151の値の入力を受ける。ここでは、AND回路612は、動作モード情報レジスタ151の値として、通常モードの場合「0」の入力を受け、互換モードの場合「1」の入力を受ける。また、AND回路612は、送信先のCHIPIDの最下位の1ビットの値の入力をCHIPID抽出部611から受ける。
次に、AND回路612は、動作モード情報の値と送信先のCHIPIDの最下位の1ビットの値との論理積を求める。そして、AND回路612は、求めた論理積の結果を選択回路62へ出力する。通常モードであれば、AND回路612は、「0」を選択回路62へ出力する。また、互換モードであって、送信先のCHIPIDの最下位の1ビットの値が「0」の場合、AND回路612は、「0」を選択回路62へ出力する。これに対して、互換モードであって、送信先のCHIPIDの最下位の1ビットの値が「1」の場合、AND回路612は、「1」を選択回路62へ出力する。ただし、ここではプロセッサ10の6ビットで表される実際のCHIPIDの最下位の1ビットが「0」であるとする。
選択回路62は、動作モード情報の値と送信先のCHIPIDの最下位の1ビットの値との論理積の結果の入力をAND回路612から受ける。また、選択回路62は、リクエストのパケットの入力をパケット受信部13から受ける。
選択回路62は、AND回路612からの入力が「1」の場合、リクエストのパケットを受信バッファ63へ出力する。一方、AND回路612からの入力が「0」の場合、選択回路62は、リクエストのパケットを受信バッファ66へ出力する。すなわち、通常モードの場合、又は互換モードで且つCHIPIDの最下位の1ビットが「0」の場合、選択回路62は、パケットを受信バッファ63へ出力する。
ここで、受信バッファ63は、実チップID宛のリクエスト処理である通常のリクエスト処理を実行する経路に繋がる。また、受信バッファ66は、仮想チップID宛のリクエストに対する処理を実行する経路に繋がる。すなわち、選択回路62は、図8に示すテーブルに示す経路選択のようにパケットを出力する経路を選択する。図8は、リクエスト処理経路判定のテーブルを示す図である。ここで、CHIPID[0]は、CHIPIDの最下位の1ビットであることを表す。すなわち、動作モードが通常モードの場合、選択回路62は、実チップID宛のリクエスト処理経路にパケットを送信する。また、動作モードが互換モードであって、CHIPIDの最下位の1ビットが「0」の場合、選択回路62は、実チップID宛のリクエスト処理経路にパケットを送信する。また、動作モードが互換モードであって、CHIPIDの最下位の1ビットが「1」の場合、仮想チップID宛のリクエスト処理経路にパケットを送信する。
なぜなら、通常モードの場合、6ビットのCHIPID及び2ビットのIO−IDを送信先として用いるフォーマットのパケットを用いて通信を行うため、自己宛てのパケットである。そこで、プロセッサ10は、そのパケットを実チップID宛として通常の処理を施すことができる。また、互換モードであっても、CHIPIDの最下位の1ビットが「0」であれば、自己のCHIPIDと一致するため、プロセッサ10は、自己宛のパケットとして処理することができる。そこで、プロセッサ10は、そのパケットを実チップID宛として通常の処理を施すことができる。これに対して、互換モードであり、且つ、CHIPIDの最下位の1ビットが「1」の場合、受信したパケットは、実際には存在しないプロセッサ10を送信先とするパケットである。そこで、プロセッサ10は、そのパケットについて仮想チップID宛てのリクエストに対する処理を実行することになる。
受信バッファ63は、リクエストのパケットの入力を選択回路62から受ける。そして、受信バッファ63は、取得したリクエストのパケットを順次蓄積していく。
リクエスト処理部64は、受信バッファ63に格納されたリクエストのパケットの中から1つ選択し、リクエストを取得する。そして、リクエスト処理部64は、取得したリクエストに対して通常の処理を実行する。その後、リクエスト処理部64は、処理完了の通知をリクエスト応答部65へ出力する。リクエスト処理部64は、受信バッファ63に格納されたリクエストについて順次処理を行う。
リクエスト応答部65は、処理完了の通知の入力をリクエスト処理部64から受ける。そして、リクエスト応答部65は、処理完了の通知に応じてリクエストに対する応答のパケットを生成する。その後、リクエスト応答部65は、生成した応答のパケットをパケット送信部12へ出力する。
受信バッファ66は、リクエストのパケットの入力を選択回路62から受ける。そして、受信バッファ66は、取得したリクエストのパケットを順次蓄積していく。
仮想チップ宛リクエスト応答部67は、受信バッファ66に格納されたリクエストのパケットの中から1つ選択し、リクエストを取得する。そして、仮想チップ宛リクエスト応答部67は、取得したリクエストに対して仮想チップID宛てのリクエスト処理を実行する。仮想チップ宛リクエスト応答部67は、処理の実行にしたがいリクエストに対する応答のパケットを生成する。その後、仮想チップ宛リクエスト応答部67は、生成した応答のパケットをパケット送信部12へ出力する。仮想チップ宛リクエスト応答部67は、受信バッファ66に格納されたリクエストについて順次処理を行う。
ここで、図9を参照して、リクエスト処理部64、リクエスト応答部65及び仮想チップ宛リクエスト応答部67によるリクエスト応答について説明する。図9は、動作モード毎のリクエスト応答処理を説明するための図である。ここで、CHIPID[0]=0は、CHIPIDの最下位の1ビットの値が0であることを表す。また、CHIPID[0]=1は、CHIPIDの最下位の1ビットの値が1であることを表す。
図9に示すように、IO処理以外のリクエストには、例えば、メモリアクセス要求、キャッシュ制御要求、アーキテクチャレジスタへのアクセス要求及びコア101に対する割込要求がある。ここで、アーキテクチャレジスタは、プロセッサ10上に搭載されたソフトウェアレベルで参照可能なレジスタである。リクエスト処理部64及び仮想チップ宛リクエスト応答部67は、図5に示すパケット201のヘッダ部202におけるパケット種のフィールドに格納された値でリクエストの種類を判定する。
通常モードの場合、リクエスト処理部64及びリクエスト応答部65は以下のような処理を行い応答を返す。例えば、メモリアクセス要求の場合、リクエスト応答部65は、要求のあったメモリアドレスのデータを応答する。また、キャッシュ制御要求の場合、リクエスト処理部64は、キャッシュ102が指定されたデータを保持するかを調べ、保持する場合破棄する。そして、リクエスト応答部65は、要求元へ完了応答を返す。アーキテクチャレジスタへのアクセス要求の場合、リクエスト処理部64は、指定されたレジスタに対する読み出し又は書き込みを行う。そして、リクエスト応答部65は、要求元へ完了応答を返す。コア101に対する割込要求の場合、リクエスト処理部64は、指定された割り込みを発生させる。そして、リクエスト応答部65は、パケットの送信元に受信完了を示す応答を返す。
また、互換モードであって、CHIPIDの最下位の1ビットが「0」の場合、リクエスト処理部64及びリクエスト応答部65は、通常モードと同様のリクエスト処理を行い応答を返す。ここで、CHIPIDの最下位の1ビットの値としての「0」が、「所定値」の一例にあたる。
これに対して、互換モードであって、CHIPIDの最下位の1ビットが「1」の場合、仮想チップ宛リクエスト応答部67は、以下のような処理を行い応答を返す。メモリアクセス要求の場合、仮想チップ宛リクエスト応答部67は、要求されたメモリアドレスに実メモリがないことを示すエラー応答を返す。キャッシュ制御要求の場合、仮想チップ宛リクエスト応答部67は、キャッシュ102に対して何もせずに、要求元に完了応答を返す。アーキテクチャレジスタへのアクセス要求の場合、仮想チップ宛リクエスト応答部67は、指定したレジスタが存在しないことを示すエラー応答を要求元に返す。ただし、実装によっては、仮想チップ宛リクエスト応答部67は、アーキテクチャレジスタへのアクセス要求の場合、書き込みデータは捨て、読み出し値は全て0として、正常応答を要求元に返してもよい。コア101に対する割込要求の場合、仮想チップ宛リクエスト応答部67は、受信した割り込みは破棄し、パケットの送信元に受信したことを示す応答を返してもよい。ただし、実装によっては、仮想チップ宛リクエスト応答部67は、コア101に対する割込要求の場合、エラー応答をパケットの送信元に返してもよい。
また、図9では、リクエスト処理制御部16による受信したパケットに対する応答処理について説明したが、リクエスト処理制御部16は、プロセッサ10が送信元となるリクエストのパケットの生成も行う。この場合、リクエスト処理制御部16は、CHIPIDレジスタ152を構成制御レジスタ105から取得する。そして、リクエスト処理制御部16は、取得した6ビットのCHIPIDを送信元の識別情報として用い、送信先の識別情報はアドレスに対応するCHIPIDを宛先リストレジスタ153から取得してパケットを生成する。また、リクエスト処理制御部16は、その他の情報は、送信するリクエストに合わせて作成しパケットを生成する。そして、リクエスト処理制御部16は、生成したパケットをパケット送信部12を介してXBチップ4に送信する。
次に、図10を参照して、本実施例に係る4つのIOコントローラ103を有するプロセッサ10によるパケットの発行処理の流れについて説明する。図10は、4つのIOコントローラを有するプロセッサによるパケットの発行処理のフローチャートである。
IOコントローラ103は、IOリクエスト生成部14にリクエストを発信する(ステップS101)。
IOリクエスト生成部14は、構成制御レジスタ105の動作モード情報レジスタ151の値から動作モードが通常モードか否かを判定する(ステップS102)。
動作モードが通常モードの場合(ステップS102:肯定)、IOリクエスト生成部14は、リクエストの発信元のIOコントローラ103のIOコントローラ番号で2ビットのIO−IDを作成する(ステップS103)。
さらに、IOリクエスト生成部14は、CHIPIDレジスタ152を表す6ビット全てを構成制御レジスタ105から取得する(ステップS104)。
次に、IOリクエスト生成部14は、6ビットのCHIPID及び2ビットのIO−IDを用いて送信元のIDを生成する(ステップS105)。その後、IOリクエスト生成部14は、ステップS109へ進む。
これに対して、動作モードが互換モードの場合(ステップS102:否定)、IOリクエスト生成部14は、リクエストの発信元のIOコントローラ103のIOコントローラ番号の下位1ビットを1ビットのIO−IDに割り当てる。さらに、IOリクエスト生成部14は、リクエストの発信元のIOコントローラ103のIOコントローラ番号の上位1ビットをCHIPIDの最下位の1ビットに割り当てる(ステップS106)。
さらに、IOリクエスト生成部14は、CHIPIDレジスタ152の上位5ビットを構成制御レジスタ105から取得する(ステップS107)。
次に、IOリクエスト生成部14は、IOコントローラ番号の上位1ビット及びCHIPIDの上位5ビットを有するCHIPID、並びに、IOコントローラ番号の下位1ビットを有する1ビットのIO−IDを用いて送信元のIDを生成する(ステップS108)。
次に、IOリクエスト生成部14は、アドレスに対応するCHIPIDを構成制御レジスタ105の宛先リストレジスタ153から取得する(ステップS109)。
そして、IOリクエスト生成部14は、リクエストのパケットを生成する(ステップS110)。その後、IOリクエスト生成部14は、生成したパケットをパケット送信部12へ出力する。
パケット送信部12は、パケットをIOリクエスト生成部14から取得する。そして、パケット送信部12は、外部バスIF部11を介してXBチップ4へパケットを送信することで、パケットの発行を行う(ステップS111)。
次に、図11を参照して、本実施例に係る4つのIOコントローラ103を有するプロセッサ10によるIO処理要求のパケットの受信処理の流れについて説明する。図11は、4つのIOコントローラを有するプロセッサによるIO処理要求のパケットの受信処理のフローチャートである。
外部バスIF部11は、XBチップ4からリクエストのパケットを受信する(ステップS201)。
外部バスIF部11のCHIPIDチェック部111は、構成制御レジスタ105の動作モード情報レジスタ151の値から動作モードが通常モードか否かを判定する(ステップS202)。
動作モードが通常モードの場合(ステップS202:肯定)、CHIPIDチェック部111は、受信したパケットの送信先におけるCHIPIDの6ビット全てが一致するか否かを判定する(ステップS203)。CHIPIDが一致しない場合(ステップS203:否定)、外部バスIF部11は、エラー応答をパケットの送信元へ返す(ステップS204)。
これに対して、CHIPIDが一致した場合(ステップS203:肯定)、外部バスIF部11は、パケット受信部13へパケットを出力する。そして、パケット受信部13は、パケットをIOリクエスト処理部15へ出力する。IOリクエスト処理部15は、パケットの送信先のIDに格納された2ビットのIO−IDを宛先のIOコントローラ番号として取得する(ステップS205)。その後、IOリクエスト処理部15は、ステップS209へ進む。
一方、動作モードが互換モードの場合(ステップS202:否定)、CHIPIDチェック部111は、受信したパケットの送信先におけるCHIPIDの上位5ビットが一致するか否かを判定する(ステップS206)。CHIPIDが一致しない場合(ステップS206:否定)、外部バスIF部11は、エラー応答をパケットの送信元へ返す(ステップS207)。
これに対して、CHIPIDが一致した場合(ステップS206:肯定)、外部バスIF部11は、パケット受信部13へパケットを出力する。そして、パケット受信部13は、パケットをIOリクエスト処理部15へ出力する。IOリクエスト処理部15は、パケットの送信先のIDに格納された1ビットのIO−IDをIOコントローラ番号の下位1ビットとして取得する。さらに、IOリクエスト処理部15は、CHIPIDの最下位の1ビットをIOコントローラ番号の上位1ビットとして取得する(ステップS208)。
次に、IOリクエスト処理部15は、取得したIOコントローラ番号を有するIOコントローラ103へリクエストのパケットを転送する(ステップS209)。IOコントローラ103は、受信したパケットにより示されるリクエストに応じてIO装置を制御する。
次に、図12を参照して、本実施例に係る4つのIOコントローラ103を有するプロセッサ10によるリクエストの受信処理の流れについて説明する。図12は、4つのIOコントローラを有するプロセッサによるリクエストの受信処理のフローチャートである。
外部バスIF部11は、リクエストのパケットを受信する(ステップS301)。
CIHPIDチェック部111は、構成制御レジスタ105の動作モード情報レジスタ151の値から、動作モードが通常モードか否かを判定する(ステップS302)。
動作モードが通常モードの場合(ステップS302:肯定)、CHIPIDチェック部111は、受信したパケットの送信先におけるCHIPIDの6ビット全てが一致するか否かを判定する(ステップS303)。CHIPIDが一致しない場合(ステップS303:否定)、外部バスIF部11は、エラー応答をパケットの送信元へ返す(ステップS304)。
これに対して、CHIPIDが一致した場合(ステップS303:肯定)、外部バスIF部11は、パケット受信部13へパケットを出力する。そして、パケット受信部13は、パケットをリクエスト処理制御部16へ出力する。リクエスト処理制御部16は、実チップID宛のリクエスト処理を実行する(ステップS305)。
一方、動作モードが互換モードの場合(ステップS302:否定)、CHIPIDチェック部111は、受信したパケットの送信先におけるCHIPIDの上位5ビットが一致するか否かを判定する(ステップS306)。CHIPIDが一致しない場合(ステップS306:否定)、外部バスIF部11は、エラー応答をパケットの送信元へ返す(ステップS307)。
これに対して、CHIPIDが一致した場合(ステップS306:肯定)、外部バスIF部11は、パケット受信部13へパケットを出力する。そして、パケット受信部13は、パケットをリクエスト処理制御部16へ出力する。リクエスト処理制御部16は、受信したパケットの送信先におけるCHIPIDの最下位の1ビットが「0」であるか否かを判定する。最下位の1ビットが「0」の場合(ステップS308:肯定)、リクエスト処理制御部16は、ステップS305に進む。
これに対して、最下位の1ビットが「1」の場合(ステップS308:否定)リクエスト処理制御部16は、仮想チップID宛のリクエスト処理を実行する(ステップS309)。
さらに、図13〜15を参照して、各ノードにおけるアドレスマップについて説明する。図13は、2つのIOコントローラを有するプロセッサ同士の通信におけるアドレスマップを説明するための図である。図14は、互換モードを用いた通信におけるアドレスマップを説明するための図である。図15は、通常モードを用いた通信におけるアドレスマップを説明するための図である。
図13では、構成702に示すように、2つのIOコントローラ103を備えたプロセッサ10を有するノード1が通信する場合で説明する。ここでは、ノード#00〜#15を有するシステムを考えるが、構成702では、例として2つのノード1であるノード#00及び#01の接続を記載した。また、ノード#00及びノード#01は、それぞれ4つのプロセッサ10を有する。ノード#00は、CHIPID#0〜#3が割り当てられたプロセッサ10を有する。ノード#01は、CHIPID#4〜#7が割り当てられたプロセッサ10を有する。さらに、各プロセッサ10は、2つのIOコントローラ番号として##0及び##1が割り当てられたIOコントローラ103を有する。ここでは、この2つのIOコントローラ103を、IOコントローラ##0及び##1と表す。図13では、IOコントローラを「IOC」と表す。また、構成702では、分かり易いように、プロセッサ10に対応するメモリ3もそのプロセッサ10のCHIPIDで表されるグループに属するように記載した。
アドレスマップ701は、CA(Cacheable Address)空間及びNC(Non Cacheable)空間を有する。
CA空間には、ノード#00〜ノード#15の各メモリ3に対してアドレスが割り当てられる。例えば、ノード#00に存在するメモリ3として、CHIPID#0〜#3のそれぞれのプロセッサ10に搭載された各メモリ3に対してアドレスが割り当てられる。
また、NC空間には、ノード#00〜ノード#15の各プロセッサ10の各IOコントローラ##0及び##1に対してアドレスが割り当てられる。例えば、ノード#00のIOコントローラ103として、CHIPID#0〜#3のそれぞれのプロセッサ10毎に、各IOコントローラ##0及び##1に対してアドレスが割り当てられる。すなわち、2つのIOコントローラ103を有するプロセッサ10同士の通信では、各プロセッサ10は、直接CHIPID#0〜#3のそれぞれのプロセッサ10の各IOコントローラ##0及び##1のIDをアドレスマップ701から取得することができる。
一方、図14では、構成712に示すように、2つのIOコントローラ103を備えたプロセッサ10を有するノード1と4つのIOコントローラ103を備えたノード1とが通信する場合で説明する。ここでは、ノード#00〜#15を有するシステムを考えるが、構成712では、例として2つのノード1のみ記載した。ここでは、ノード#00は、2つのIOコントローラを有するプロセッサ10を備えたノードとする。また、ノード#01は、4つのIOコントローラを有するプロセッサ10を備えたノードとする。ノード#00は、CHIPID#0〜#3が割り当てられたプロセッサ10を有する。ノード#01は、CHIPID#4及び#6が割り当てられたプロセッサ10を有する。さらに、ノード#00の各プロセッサ10は、2つのIOコントローラ番号として##0及び##1が割り当てられたIOコントローラ103を有する。また、ノード#01の各プロセッサ10は、IOコントローラ番号として##0〜##3が割り当てられたIOコントローラ103を有する。
この場合も、アドレスマップ711のCA空間には、ノード#00〜ノード#15の各メモリ3に対してアドレスが割り当てられる。ただし、例えば、CA空間のCHIPID#5メモリ及び#7メモリのメモリ領域には実メモリが存在しないため、メモリ未実装となる。
これに対して、アドレスマップ711のNC空間には、ノード#00のIOコントローラ103として、CHIPID#0〜#3のそれぞれのプロセッサ10毎に、各IOコントローラ##0及び##1に対してアドレスが割り当てられる。一方、2つのIOコントローラ103を有するプロセッサ10と通信するために、IO−IDに使用できる領域は1ビットのみである。そこで、ノード#01のIOコントローラ103として、CHIPID#5及び#7を有する仮想のプロセッサ71及び72が作成される。さらに、各CHIPID#4〜#7がIOコントローラ##0及び##1を有するとして、各IOコントローラ103にアドレスが割り当てられる。ここで、アドレスマップ711でアドレスが割り当てられたCHIPID#5のIOコントローラ##0及び##1は、実体はCHIPID#4のIOコントローラ##2及び##3である。また、アドレスマップ711でアドレスが割り当てられたCHIPID#7のIOコントローラ##0及び##1は、実体はCHIPID#6のIOコントローラ##2及び##3である。これにより、2つのIOコントローラ103を有するプロセッサ10は、CHIPID#4及び#6のIOコントローラ##0〜##3を表すIDを、6ビットのCHIPIDと1ビットのIO−IDとの組み合わせで表されるIDとしてアドレスマップ711から取得することができる。
一方、図15では、構成722に示すように、4つのIOコントローラ103を備えたプロセッサ10を有するノード1同士が通信する場合で説明する。ここでは、ノード#00〜#15を有するシステムを考えるが、構成722では、例として2つのノード1を記載した。ここでは、ノード#00及び#01は、4つのIOコントローラを有するプロセッサ10を備えたノードである。ノード#00及び#01は、それぞれCHIPID#0〜#3が割り当てられたプロセッサ10を有する。さらに、ノード#00の各プロセッサ10は、4つのIOコントローラ番号として##0〜##3が割り当てられたIOコントローラ103を有する。
アドレスマップ721のCA空間には、ノード#00〜ノード#15の各メモリ3に対してアドレスが割り当てられる。
また、NC空間には、ノード#00〜ノード#15の各プロセッサ10の各IOコントローラ##0〜##3に対してアドレスが割り当てられる。例えば、ノード#00のIOコントローラ103として、CHIPID#0〜#3のそれぞれのプロセッサ10毎に、各IOコントローラ##0〜##3に対してアドレスが割り当てられる。すなわち、4つのIOコントローラ103を有するプロセッサ10同士の通信では、各プロセッサ10は、直接CHIPID#0〜#3のそれぞれのプロセッサ10の各IOコントローラ##0〜##3のIDをアドレスマップ721から取得することができる。
そして、アドレスマップ701,711及び721で表すように、各モードに合わせてアドレスマップが変更されることで、あるプロセッサ10で実行されるソフトウェアは、アドレスマップを用いて他のプロセッサ10と通信することができる。
以上に説明したように、本実施例に係る4つのIOコントローラを有するプロセッサは、1ビットのIO−IDを使用する2つのIOコントローラを有するプロセッサと混在した場合にも、全てのIOコントローラを用いることができる。したがって、本実施例に係る4つのIOコントローラを有するプロセッサは、2つのIOコントローラを有するプロセッサと混在した場合にも、IO処理能力を十分に発揮することができる。
また、本実施例に係る4つのIOコントローラを有するプロセッサは、2つのIOコントローラを有するプロセッサと混在した場合における各リクエストに対するエラー応答などの処理も適切に行うことができ、適切な動作を継続することができる。