以下、図面を用いて実施形態を説明する。
図1は、情報処理装置、入出力制御装置および情報処理装置の制御方法の一実施形態を示す。図1に示す情報処理装置IPEは、インタコネクトICNTを介して互いに接続されたノードND(ND0、ND1)および入出力制御装置IOHを有する。ノードNDは、演算を処理する演算処理装置の一例である。入出力制御装置IOHは、入出力バスIOBUSを介して複数の入出力装置IO(IO0、IO1)に接続され、入出力装置IOの動作を制御する。入出力装置IOは、HDD(Hard Disk Drive)装置、SSD(Solid State Drive)装置、通信装置またはネットワークインタフェース装置等の情報を入出力する装置である。
ノードND0は、CPU(Central Processing Unit)0およびメモリバスMBUS0を介してCPU0に接続されたメモリMEM(MEM00、MEM01、MEM02)を有する。ノードND1は、CPU1およびメモリバスMBUS1を介してCPU1に接続されたメモリMEM(MEM10、MEM11、MEM12)を有する。メモリMEM00、MEM01、MEM02は、互いに独立したメモリバスMBUS0を介してCPU0に接続され、メモリMEM10、MEM11、MEM12は、互いに独立したメモリバスMBUS1を介してCPU1に接続される。
各メモリMEMは、CPU0、CPU1に割り当てられた共通のアドレス空間に割り当てられ、各CPU0、CPU1は、ノードND0、ND1のメモリMEMを用いて、情報処理を分散して実行可能である。ノードNDが自ノードのメモリMEMにアクセスする場合のアクセス速度は、他ノードのメモリMEMにアクセスする場合のアクセス速度より高い。すなわち、情報処理装置IPEは、NUMA型システムのアーキテクチャを有する。
メモリMEMは、DIMM(Dual Inline Memory Module)等のメインメモリであり、各メモリMEMの記憶容量は、例えば4GB(ギガバイト)である。なお、情報処理装置IPEが有するノードNDの数、入出力装置IOの数、各CPUに接続されるメモリMEMの数は、図1に示す数に限定されない。
入出力制御装置IOHは、CPUからのリクエストに基づき、入出力装置IOのいずれかにアクセスし、入出力装置IOに対してデータを入出力する。また、入出力制御装置IOHは、入出力装置IOからのメモリMEMにアクセスするメモリアクセス要求に基づき、アクセスするメモリMEMを接続したCPU(CPU0またはCPU1)にリクエストを送信する。
図2は、図1に示すCPUの例を示す。CPU0、CPU1は、互いに同一または同様の構成を有するため、図2では、CPU0が説明される。CPU0は、演算処理部100、ルータ110および複数のポート120(120a、120b、...)を有する。ポート120aは、図1に示すインタコネクトICNTを介して入出力制御装置IOHに接続され、ポート120bは、インタコネクトICNTを介してCPU1に接続される。
演算処理部100は、演算部10、アドレス変換部12、キャッシュ管理部14、キャッシュメモリ16、メモリアクセス部18、ソースアドレスデコーダ20、アドレスデコーダテーブル22およびパケット制御部24を有する。
演算部10は、CPU0が実行するプログラムに含まれる演算命令およびメモリアクセス命令等の命令をデコードするデコーダと、デコードした命令を実行する演算器等とを有する。アドレス変換部12は、演算部10から出力される論理アドレスを物理アドレスに変換し、変換した物理アドレスをキャッシュ管理部14に出力する。アドレス変換部12は、TLB(Translation Lookaside Buffer)を含む。
キャッシュ管理部14は、アドレス変換部12からの物理アドレス、またはパケット制御部24から受ける物理アドレスに基づいて、物理アドレスに対応するデータがキャッシュメモリ16に格納されているかの判定を実行する。キャッシュ管理部14は、データがキャッシュメモリ16に格納されている場合(キャッシュヒット)、キャッシュメモリ16にアクセスする。キャッシュ管理部14は、アドレス変換部12またはパケット制御部24から受ける物理アドレスに対応するデータがキャッシュメモリ16に格納されていない場合(キャッシュミス)、ソースアドレスデコーダ20に物理アドレスを出力する。
ソースアドレスデコーダ20は、キャッシュ管理部14からのアドレスに基づきアドレスデコーダテーブル22を参照し、物理アドレスが割り当てられたメモリMEMを含むノードNDを求める。ソースアドレスデコーダ20は、求めたノードNDを示す識別情報をキャッシュ管理部14に出力する。ソースアドレスデコーダ20は、アドレスデコーダテーブル22から、リクエスト受信部30が受信したパケットに含まれる物理アドレスPAを検索した結果である識別情報NDIDを出力するデコード部の一例である。アドレスデコーダテーブル22の例は、図3および図4に示される。
キャッシュ管理部14は、キャッシュミスの場合で、ソースアドレスデコーダ20からの識別情報が自ノードを示す場合、メモリアクセス部18にメモリMEM00、MEM01、MEM02のいずれかにアクセスするメモリアクセス要求を出力する。キャッシュ管理部14は、キャッシュミスの場合で、ソースアドレスデコーダ20からの識別情報が他ノードを示す場合、他ノードのメモリMEMへのメモリアクセス要求をパケット制御部24に出力する。キャッシュ管理部14は、ソースアドレスデコーダ20が出力した識別情報が、自ノードに対応する識別情報であるかを判別する管理部の一例である。また、キャッシュ管理部14は、ソースアドレスデコーダ20が出力した識別情報が、自ノードに対応する識別情報でない場合、リクエスト受信部30が受信したパケットを他のノードNDに転送する管理部の一例である。
メモリアクセス部18は、キャッシュ管理部14からのメモリアクセス要求がライト要求の場合、キャッシュ管理部14から受けるデータを、メモリMEM00、MEM01、MEM02のいずれかに書き込む。メモリアクセス部18は、キャッシュ管理部14からのメモリアクセス要求がリード要求の場合、メモリMEM00、MEM01、MEM02のいずれかにリードアクセスし、リードアクセスしたメモリMEMから出力されるデータをキャッシュ管理部14に出力する。
パケット制御部24は、リクエスト生成部26、応答受信部28、リクエスト受信部30および応答生成部32を有する。リクエスト生成部26は、キャッシュ管理部14からの他ノードのメモリMEMへのメモリアクセス要求に基づき、パケットを生成し、生成したパケットをルータ110に出力する。パケットが他ノードのメモリMEMにデータを書き込むストアリクエストの場合、パケットに含まれる情報は、他ノードのメモリMEMのアクセス先を示す物理アドレスと、書き込みデータとを含む。パケットが他ノードのメモリMEMからデータを読み出すロードリクエストの場合、パケットに含まれる情報は、他ノードのメモリMEMのアクセス先を示す物理アドレスを含む。また、リクエスト生成部26は、キャッシュ管理部14からの入出力装置IOへのアクセス要求に基づき、パケットを生成し、生成したパケットをルータ110に出力する。
応答受信部28は、リクエスト生成部26が出力したパケットに応答する応答パケットを受信し、受信した情報をキャッシュ管理部14に出力する。パケットが他ノードのメモリMEMへのストアリクエストに対する応答の場合、パケットに含まれる情報は、他ノードのメモリMEMへのデータの書き込みが成功したかを示す情報を含む。パケットが他ノードのメモリMEMへのロードリクエストに対する応答の場合、パケットに含まれる情報は、データの読み出しが成功したかの情報と、リードデータとを含む。
リクエスト受信部30は、ルータ110を介して供給される他のノードNDまたは入出力制御装置IOHからのパケットを受け、受けたパケットに含まれる情報をキャッシュ管理部14に出力する。パケットが自ノードのメモリMEMにデータを書き込むストアリクエストの場合、パケットに含まれる情報は、メモリMEMのアクセス先を示す物理アドレスと、書き込みデータとを含む。パケットが自ノードのメモリMEMからデータを読み出すロードリクエストの場合、パケットに含まれる情報は、メモリMEMのアクセス先を示す物理アドレスを含む。リクエスト受信部30は、入出力制御装置IOHが出力したパケットを受信する受信部の一例である。
応答生成部32は、自ノードのメモリMEMへのストアリクエストまたはロードリクエストのパケットに対する応答パケットを生成し、生成した応答パケットをルータ110に出力する。自ノードのメモリMEMへのストアリクエストに対する応答パケットでは、応答パケットに含まれる情報は、自ノードのメモリMEMへのデータの書き込みが成功したかを示す情報を含む。自ノードのメモリMEMへのロードリクエストに対する応答パケットでは、応答パケットに含まれる情報は、データの読み出しが成功したかの情報と、リードデータとを含む。パケットの例は、図9に示される。
ルータ110は、リクエスト生成部26または応答生成部32から出力されるパケットを、ポート120a、120bのいずれかを介して入出力制御装置IOHまたは他のノードNDに出力する。また、ルータ110は、ポート120a、120bのいずれかを介して入出力制御装置IOHまたは他のノードNDから受けるパケットを、応答受信部28またはリクエスト受信部30に出力する。
なお、各CPUは、ノードNDおよび入出力制御装置IOHを識別する識別情報と、ノードNDおよび入出力制御装置IOHが接続されるポートの番号を示すポート情報とを格納する複数の領域を有するルーティングテーブルを有してもよい。この場合、ルータ110は、ルーティングテーブルを参照して、パケットを送信するポートを決定する。
図3は、図2に示すアドレスデコーダテーブル22の例を示す。アドレスデコーダテーブル22は、VALIDフラグ、ベースアドレス、アドレス長およびノードNDの番号を識別する識別情報NDIDを格納する複数の領域(図3に示すアドレスデコーダテーブル22の各行)を有する。すなわち、アドレスデコーダテーブル22は、VALIDフラグ、ベースアドレス、アドレス長および識別情報NDIDを含む複数のエントリを記憶する。ベースアドレスおよびアドレス長に格納された値の先頭の”0x”は、格納された値が16進数であることを示す。
VALIDフラグは、エントリが有効な場合に”1”に設定され、エントリが無効な場合に”0”に設定される。各エントリは、ベースアドレス(物理アドレスPA)を開始アドレスとし、アドレス長で示されるアドレス空間が、どのノードNDに割り当てられているかを示す。
図3に示すアドレスデコーダテーブル22の例では、図3の右側に示すように、4GB(ギガバイト)の領域毎にノードND0とノードND1とが交互に割り当てられる例を示す。アドレスデコーダテーブル22において、ノードND0の割り当てを示す3つのエントリには、図1に示すメモリMEM00、MEM01、MEM02のそれぞれが割り当てられる。同様に、アドレスデコーダテーブル22において、ノードND1の割り当てを示す3つのエントリには、図1に示すメモリMEM10、MEM11、MEM12のそれぞれが割り当てられる。アドレスデコーダテーブル22は、メモリMEMの物理アドレスPAの範囲毎に識別情報NDIDを対応して記憶するテーブル記憶部の一例である。
図4は、図2に示すアドレスデコーダテーブル22の別の例を示す。図4に示すアドレスデコーダテーブル22は、ブロック番号、VALIDフラグおよび識別情報NDIDを格納する複数の領域(図4に示すアドレスデコーダテーブル22の各行)を有する。すなわち、アドレスデコーダテーブル22は、ブロック番号、VALIDフラグおよび識別情報NDIDを含む複数のエントリを記憶する。図4の右側に示す情報処理装置IPEのアドレス空間の割り当ては、図3と同じである。
ブロック番号で識別される各ブロックは、例えば64MB(メガバイト)のアドレス領域に対応しており、4GB(ギガバイト)のアドレス領域は、64個のブロックで示される。なお、ブロックに対応するアドレス領域の大きさが大きいほど、エントリの数は少なくなる。
図5は、図1に示す入出力制御装置IOHの例を示す。入出力制御装置IOHは、入出力バスブリッジ200、アクセス履歴テーブル210、予測部220および複数の入出力ポート230(230a、230b、...)を有する。入出力ポート230a、230bは、入出力装置IO0、IO1のそれぞれに接続される。また、入出力制御装置IOHは、ルータ240、ルーティングテーブル250および複数のポート260(260a、260b、...)を有する。ポート260a、260bは、図1に示すインタコネクトICNTを介してノードND0、ND1のそれぞれに接続される。
入出力バスブリッジ200は、パケット制御部40、要求元テーブル42および入出力バス制御部44を有する。パケット制御部40は、リクエスト生成部46、応答受信部48、リクエスト受信部50および応答生成部52を有する。
リクエスト生成部46は、入出力ポート230および入出力バス制御部44を介して入出力装置IOから送信されるメモリMEMへのメモリアクセス要求に基づき、パケットを生成し、生成したパケットをルータ240に出力する。この際、リクエスト生成部46は、メモリアクセス要求を発行した入出力装置IOの番号を予測部220に渡し、予測部220にメモリアクセス要求を出力するノードND(識別情報NDID)を予測させる。リクエスト生成部46は、予測部220が予測した識別情報NDIDに基づき、パケットを生成する生成部の一例である。
予測部220は、リクエスト生成部46から受けた入出力装置IOを識別する識別情報に基づいてアクセス履歴テーブル210を参照し、メモリアクセス要求を出力するノードNDを予測する。アクセス履歴テーブル210の例は、図8に示される。予測部220は、メモリアクセスを行う入出力装置IOの識別情報に対応するノードNDの識別情報をアクセス履歴テーブル210から検索し、検索したノードの識別情報をメモリアクセス先の識別情報として予測する予測部の一例である。
応答受信部48は、リクエスト生成部46が出力したパケットに対する応答パケットと、応答パケットの送信元のノードNDを示す識別情報とを、ルータ240から受信する。応答受信部48は、要求元テーブル42を参照し、応答パケットに対応する元のメモリアクセス要求を出力した入出力装置IOを求める。そして、応答受信部48は、求めた入出力装置IOを示す識別情報とともに、応答パケットに含まれる情報を入出力バス制御部44に出力する。また、応答受信部48は、応答パケットの送信元のノードNDを示す識別情報を、応答パケットに対応する元のメモリアクセス要求を出力した入出力装置IOに対応づけてアクセス履歴テーブル210に書き込む。応答受信部48は、ルータ240が取得した識別情報NDIDをアクセス履歴テーブル210に記憶する応答部の一例である。要求元テーブル42の例は、図7に示される。
リクエスト受信部50は、ルータ240を介して供給されるノードND0、ND1からのパケットを受け、受けたパケットに含まれる情報を入出力バス制御部44に出力する。パケットが入出力装置IOのいずれかにデータを書き込むストアリクエストの場合、パケットに含まれる情報は、データを書き込む入出力装置IOを指定する情報と、書き込み要求と、書き込みデータとを含む。パケットが入出力装置IOのいずれかからデータを読み出すロードリクエストの場合、パケットに含まれる情報は、データを読み出す入出力装置IOを指定する情報と、読み出し要求とを含む。
応答生成部52は、入出力装置IOにアクセスするストアリクエストまたはロードリクエストのパケットに対する応答パケットを生成する。応答生成部52は、生成した応答パケットを、ルータ240を介して、ストアリクエストまたはロードリクエストのパケットのパケットを発行したノードNDに出力する。パケットが入出力装置IOのいずれかにデータを書き込むストアリクエストに対する応答の場合、パケットに含まれる情報は、入出力装置IOへのデータの書き込みが成功したかを示す情報を含む。入出力装置IOのいずれかからデータを読み出すロードリクエストに対する応答の場合、パケットに含まれる情報は、入出力装置IOからのデータの読み出しが成功したかの情報と、ロードデータとを含む。
入出力バス制御部44は、入出力ポート230を介して入出力装置IOから受けるメモリアクセス要求をリクエスト生成部46に出力する。入出力バス制御部44は、メモリアクセス要求に対応して応答受信部48から受ける応答パケットに含まれる情報をメモリアクセス要求の発行元の入出力装置IOに出力する。入出力バス制御部44は、リクエスト受信部50から受ける入出力装置IOへのアクセス要求を、入出力装置IOのいずれかに出力する。入出力バス制御部44は、入出力装置IOへのアクセス要求に対応して入出力装置IOから出力される情報を応答生成部52に出力する。
ルータ240は、リクエスト生成部46または応答生成部52からパケットを受けた場合、ルーティングテーブル250を参照し、パケットを出力するノードNDに接続されたポート260を求め、求めたポート260にパケットを出力する。また、ルータ240は、ポート260のいずれかを介してノードNDから受信したパケットを、応答受信部48またはリクエスト受信部50に出力する。ルータ240は、ルーティングテーブル250を参照し、パケットを受信したポート260に接続されたノードNDを求め、求めたノードNDを識別する識別情報をパケットとともにパケット制御部40に出力する。ルータ240は、リクエスト生成部46が生成したパケットを出力する送受信部の一例である。ルーティングテーブル250の例は、図6に示される。
図6は、図5に示すルーティングテーブル250の例を示す。ルーティングテーブル250は、ノードNDを識別する識別情報NDID、VALIDフラグおよびノードNDが接続されるポートの番号を示すポート情報PTIDを格納する複数の領域(図6に示すルーティングテーブル250の各行)を有する。複数の領域は、情報処理装置IPEが有するノードNDのそれぞれに対応して設けられる。そして、ルーティングテーブル250は、識別情報NDID、VALIDフラグおよびポート情報PTIDを含むエントリをノードND毎に記憶する。
なお、入出力制御装置IOHに対応する識別情報NDID=5の領域は無効にされており(VALIDフラグ=”0”)、ポート情報PTIDの”5”は、ダミーの値である。
ルーティングテーブル250は、複数のポート260に接続される複数のノードNDを識別する識別情報NDIDと複数のポート260との対応を記憶する接続テーブル記憶部の一例である。なお、ルーティングテーブル250が有する領域の数は64個に限定されない。
VALIDフラグの”1”は、エントリが有効であることを示し、VALIDフラグの”0”は、エントリが無効であることを示す。図6に示す例では、ルーティングテーブル250の左側に括弧づけで示すように、識別情報NDIDの”0”から”4”は、ノードND0からノードND4のそれぞれを示す。ポート情報PTIDの”0”から”4”は、ノードND0からノードND4のそれぞれに接続されるポート260を示す。
図5に示すルータ240は、パケット制御部40からパケットを受けた場合、ルーティングテーブル250を参照し、パケットに含まれる送信先のノードNDに対応するポート情報PTIDを求め、求めたポート情報PTIDが示すポート260にパケットを送信する。また、ルータ240は、ポート260のいずれかを介してパケットを受信した場合、ルーティングテーブル250を参照し、パケットを受信したポート260を示すポート情報PTIDに対応する識別情報NDIDを求める。そして、ルータ240は、パケットの送信元のノードNDを示す識別情報NDIDを、受信したパケットとともにパケット制御部40に出力する。
図7は、図5に示す要求元テーブル42の例を示す。要求元テーブル42は、識別情報REQIDに対応して、VALIDフラグと、メモリアクセス要求の発行元の入出力装置IOを識別する識別情報IOIDとを格納する複数の領域(図7に示す要求元テーブル42の各行)を有する。すなわち、要求元テーブル42は、VALIDフラグと識別情報IOIDとを含むエントリを記憶する領域を、識別情報REQID毎に有する。
VALIDフラグの”1”は、エントリが有効状態であることを示し、VALIDフラグの”0”は、エントリが無効状態であることを示す。要求元テーブル42は、メモリMEMへのメモリアクセス要求を発行した入出力装置IOを識別する識別情報IOIDを含むエントリをパケット毎に記憶する要求テーブル記憶部の一例である。
図5に示すリクエスト生成部46は、入出力装置IOからのメモリアクセス要求に基づくパケットをノードNDに送信するときに、要求元テーブル42の無効状態のエントリに識別情報IOIDを記憶し、VALIDフラグを”1”に設定する。また、図5に示す応答受信部48は、応答パケットを受信したときに、要求元テーブル42を参照し、応答パケットに含まれる識別情報REQIDに対応するエントリに含まれる識別情報IOIDを求める。そして、応答受信部48は、求めた識別情報IOIDを応答パケットに含まれる情報とともに、入出力バス制御部44に通知する。ここで、応答受信部48が要求元テーブル42を参照して求める識別情報IOIDは、応答パケットに対応する元のメモリアクセス要求を出力した入出力装置IOを示す。
図8は、図5に示すアクセス履歴テーブル210の例を示す。アクセス履歴テーブル210は、情報処理装置IPEが有する入出力装置IOのそれぞれに対応する複数の領域(図8に示すアクセス履歴テーブル210の各行)を有する。各領域には、入出力装置IOを識別する識別情報IOIDと、VALIDフラグと、メモリアクセス要求の送信先と予測されるノードNDを示す識別情報NDIDとが格納される。すなわち、アクセス履歴テーブル210は、識別情報IOID、VALIDフラグおよび識別情報NDIDを含む複数のエントリを記憶する。アクセス履歴テーブル210に記憶されるエントリの数は、入出力制御装置IOHに接続可能な入出力装置IOの数(すなわち、図5の入出力ポート230の数)に等しい。
VALIDフラグの”1”は、エントリが含む識別情報NDIDが有効(すなわち、メモリアクセス要求の送信先の予測に使用可能)であることを示し、VALIDフラグの”0”は、エントリが含む識別情報が無効であることを示す。アクセス履歴テーブル210は、図5に示す予測部220により参照され、図5に示す応答受信部48により更新される。アクセス履歴テーブル210を更新する例は、図13に示す。
アクセス履歴テーブル210は、ノードNDのいずれかが過去にアクセスした入出力装置IOを特定する識別情報IOIDと応答パケットの送信元であるノードNDを識別する識別情報NDIDとが対応づけられたエントリを記憶する履歴記憶部の一例である。
図8に示すアクセス履歴テーブル210は、図3に示すアドレスデコーダテーブル22に比べて規模が小さい。また、ソースアドレスデコーダ20と予測部220とは、互いに同程度の規模である。このため、予測部220およびアクセス履歴テーブル210が搭載された入出力制御装置IOHの回路規模を、ソースアドレスデコーダ20およびアドレスデコーダテーブル22が搭載された入出力制御装置IOHの回路規模に比べて小さくすることができる。
図9は、図1に示すインタコネクトICNTを介してノードNDと入出力制御装置IOHとの間で授受されるパケットの例を示す。なお、パケットに含まれる各要素のビット数およびバイト数(図9にかぎ括弧で示す)は、図9に示す値に限定されない。図9は、パケットの例として、データを書き込むストアリクエストと、ストアリクエストに対する応答パケットであるストア応答と、データを読み出すロードリクエストと、ロードリクエストに対する応答パケットであるロード応答とを示す。
各パケットにおいて、オペレーションコードOPCDは、パケットの種類(ストアリクエスト、ストアリクエストに対するストア応答、ロードリクエスト、ロードリクエストに対するロード応答のいずれか)を示す。ディスティネーションDSTは、パケットの送信先の識別情報(NDIDまたはIOID)を示し、ソースSRCは、パケットの送信元の識別情報(IOIDまたはNDID)を示す。識別情報REQIDは、入出力制御装置IOHからのリクエストの送信時に、要求元テーブル42に割り当てられた識別情報REQIDを示す。識別情報REQIDは、メモリMEMへのメモリアクセス要求を発行した入出力装置IOを識別するために使用される。物理アドレスPAは、メモリMEMにアクセスするリクエストではアクセス対象のアドレスを示し、入出力制御装置IOHにアクセスするリクエストでは入出力制御装置IOHに割り当てられたアドレスを示す。
ストアリクエストのパケットは、アクセス対象のメモリMEMまたは入出力制御装置IOHに書き込むデータDATAを含み、ロード応答のパケットは、アクセス対象のメモリMEMまたは入出力制御装置IOHから読み出したデータDATAを含む。ストア応答およびロード応答のパケットは、元のパケットによるアクセス動作の結果を示す結果コードRESULTを含む。各パケット内の”(RSV)”は、使用されないことを示す。
図10から図12は、図1に示す入出力装置IOがメモリMEMにアクセスする動作の例を示す。図10から図12は、情報処理装置IPEの制御方法の例を示す。図10から図12は、入出力制御装置IOHが、メモリMEMにデータを書き込むメモリアクセス要求を入出力装置IOから受信し、メモリMEMにデータを書き込む動作を示す。あるいは、図10から図12は、入出力制御装置IOHが、メモリMEMに対するメモリアクセス要求を入出力装置IOから受信してから、メモリMEMから読み出されたデータを入出力装置IOに送信する動作を示す。
図10は、図5に示す入出力制御装置IOHが、ノードNDにストアリクエストまたはロードリクエストのパケットを送信する動作の例を示す。
まず、ステップS202において、入出力バス制御部44は、メモリMEMへのメモリアセス要求を入出力装置IOから受信した場合、ステップS204の処理を実行する。
ステップS204において、入出力バス制御部44は、メモリアクセス要求に含まれる物理アドレスPAと、メモリアクセス要求を発行した入出力装置IOを識別する識別情報IOIDとをパケット制御部24に通知する。
次に、ステップS206において、パケット制御部24は、要求元テーブル42内の無効のエントリの1つに、パケット制御部24から受けた識別情報IOIDを格納し、VALIDフラグを”1”に設定する。また、パケット制御部24は、入出力バス制御部44から受けた識別情報IOIDを予測部220に通知する。
次に、ステップS208において、予測部220は、アクセス履歴テーブル210を参照し、パケット制御部24から受けた識別情報IOIDに対応するエントリが有効な識別情報NDIDを含むかを判定する。予測部220は、識別情報IOIDに対応するエントリが有効な識別情報NDIDを含むかを、VALIDフラグを用いて判定する。
予測部220は、識別情報IOIDに対応するエントリが有効な識別情報NDIDを含む場合、ステップS210において、識別情報NDIDをパケット制御部24に通知する。
予測部220は、識別情報IOIDに対応するエントリが有効な識別情報NDIDを含まない場合、ステップS212において、インタコネクトICNTに接続されたノードNDを識別する識別情報NDIDの1つを、ランダムに予測する。そして、予測部220は、ランダムに予測した識別情報NDIDをパケット制御部24に通知する。なお、予測部220は、アクセス履歴テーブル210が有効な識別情報NDIDを記憶していない場合、ランダム以外の所定の規則に従い識別情報NDIDを予測してもよい。ランダム以外の所定の規則は、昇順、降順等である。
このように、有効な識別情報NDIDがアクセス履歴テーブル210に格納されていない場合、予測部220は、識別情報NDIDを所定の規則に従い選択する。これにより、アクセス履歴テーブル210に有効な識別情報NDIDが格納されていない場合にも、リクエスト生成部46は、入出力装置IOからのメモリアクセス要求に基づいて、パケットを生成し、生成したパケットをノードNDのいずれかに送信することができる。換言すれば、アクセス履歴テーブル210に有効な識別情報NDIDが格納されていない場合に、リクエスト生成部46が誤動作することを抑止することができる。なお、パケットの送信先のノードNDが間違った場合、図11で説明するように、正しいノードNDにパケットが転送されるため、パケットがエラーになることを抑止することができる。
次に、ステップS214において、パケット制御部40は、入出力バス制御部44から受けたメモリアクセス要求に基づいて、予測部220から受けた識別情報NDIDを送信先(ディスティネーションDST)とするパケットを生成する。パケットのソースSRCは、メモリアクセス要求を発行した入出力装置IOの識別情報IOIDに設定される。生成されたパケットは、要求元テーブル42における識別情報IOIDを格納した領域に割り当てられた識別情報REQIDを含む。
このように、入出力制御装置IOHは、ソースアドレスデコーダ20およびアドレスデコーダテーブル22を持つことなく、予測部220の予測結果に基づきパケットを送信するノードNDを決定することができる。この結果、新たなCPUが開発された場合にも、新たなCPUに搭載されるソースアドレスデコーダおよびアドレスデコーダテーブルを入出力制御装置IOHに移植することなく、既存の入出力制御装置IOHを使用することができる。これにより、入出力制御装置IOHとの接続性が保証された既存の入出力装置IOを情報処理装置IPEに接続することができる。すなわち、CPUの世代に依存することなく、入出力制御装置IOHとノードNDとを接続することができ、新たなCPUが開発された場合にも、入出力制御装置IOHとノードNDとの接続性を低下させることなく、パケットを送受信することができる。
次に、ステップS216において、パケット制御部24は、生成したパケットをルータ240に送信する。ルータ240は、ルーティングテーブル250を参照し、パケットのソースSRCに設定された識別情報NDIDが示すノードNDが接続されたポート260にパケットを出力する。
図11は、図2に示すノードNDが入出力制御装置IOHからストアリクエストまたはロードリクエストのパケットを受信した場合の動作の例を示す。
まず、ステップS102において、CPUは、パケット制御部24が、メモリMEMへのメモリアセス要求を示すパケットを受信した場合、ステップS104の処理を実行する。なお、ステップS102は、パケット制御部24が、入出力制御装置IOHまたは他のノードNDからのメモリアセス要求を示すパケットを受信した場合に実行される。
ステップS104において、キャッシュ管理部14は、パケット制御部24から受けたパケットに含まれる物理アドレスPAをソースアドレスデコーダ20に渡す。ソースアドレスデコーダ20は、アドレスデコーダテーブル22を参照し、物理アドレスPAが割り当てられたノードNDを示す識別情報NDIDを求める。なお、ソースアドレスデコーダ20が参照するアドレスデコーダテーブル22は、図3または図4のいずれでもよい。
そして、キャッシュ管理部14は、ソースアドレスデコーダ20が求めた識別情報NDIDが、自ノードを示すかを判定する。物理アドレスPAが自ノードを示す場合、ステップS106が実行される。識別情報NDIDが他ノードを示す場合、パケットを他ノードに転送するためにステップS120が実行される。
ステップS106において、キャッシュ管理部14は、パケットがストアリクエストの場合、物理アドレスPAが示すキャッシュメモリ16の領域または物理アドレスPAが示すメモリMEMにアクセスし、データを書き込む。一方、キャッシュ管理部14は、パケットがロードリクエストの場合、物理アドレスPAが示すキャッシュメモリ16の領域または物理アドレスPAが示すメモリMEMにアクセスし、データを読み出す。次に、ステップS108において、キャッシュ管理部14は、キャッシュメモリ16のコヒーレンスを維持する等の管理処理を実行する。また、キャッシュ管理部14は、メモリアクセスの完了通知をパケット制御部24に出力し、パケットがロードリクエストの場合、キャッシュメモリ16またはメモリMEMから読み出したデータをパケット制御部24に出力する。
次に、ステップS110において、パケット制御部24の応答生成部32は、メモリアクセスに対する応答パケットを生成し、生成したパケットを入出力制御装置IOHに送信し、動作を終了する。
一方、ステップS120において、キャッシュ管理部14は、ステップS104で求めた識別情報NDIDをパケットの転送先としてパケット制御部24に通知する。次に、ステップS122において、パケット制御部24のリクエスト生成部26は、パケットのディスティネーションDSTに格納された識別情報NDIDをキャッシュ管理部14から受けた識別情報NDIDで書き替える。次に、ステップS124において、リクエスト生成部26は、ディスティネーションDSTを書き替えたパケットをルータ110に送信する。ルータ110は、受信したパケットに基づいて、パケットを他のノードNDに転送する。そして、パケットの受信動作が完了する。転送されたパケットを受信した他のノードNDのCPUは、ステップS102、S104、S106、S108、S110の処理を実行する。
なお、キャッシュ管理部14が、パケットの転送機能を有していない場合、ステップS120、S122、S124の代わりに、エラー処理が実行される。エラー処理では、キャッシュ管理部14は、”PA異常”を示す結果コードRESULTを含む応答パケットを入出力制御装置IOHに送信する指示を応答生成部32に出力する。入出力制御装置IOHは、”PA異常”を示す結果コードRESULTを含む応答パケットを受信した場合、図10に示すステップS202、S204、S208、S212、S214、S216の処理を実行し、パケットを他のノードNDに再送信する。このため、入出力制御装置IOHは、エラー処理とパケットの再送信を何回か繰り返すことで、正しいノードNDにパケットを送信することができる。入出力装置IOからメモリMEMへのメモリアクセス要求(パケット)が所定の回数連続して発行される場合、以降のパケットは、正しいノードNDに送信される。このように、予測部220が予測したパケットの送信先のノードNDが間違っており、CPUがパケットの転送機能を有していない場合にも、情報処理装置IPEは、メモリアクセス要求に基づくパケットを処理することができる。
図12は、図5に示す入出力制御装置IOHがノードNDから応答パケットを受信した場合の動作の例を示す。応答パケットは、図9に示すストア応答またはロード応答である。
まず、ステップS220において、図5に示した入出力制御装置IOHは、ルータ240を介してCPUから応答パケットを受信した場合、ステップS222の処理を実行する。
ステップS222において、ルータ240は、ルーティングテーブル250を参照し、応答パケットを受けたポート260に接続されたノードNDを示す識別情報NDIDを取得し、取得した識別情報NDIDを応答パケットとともにパケット制御部40に出力する。すなわち、ルータ240は、複数のノードNDのいずれかから応答パケットを受信した場合、ルーティングテーブル250を検索し、応答パケットの送信元のノードNDを示すノード識別情報NDIDを取得する。
このように、ルータ240は、既存のルーティングテーブル250を参照して応答パケットの送信元のノードNDを求めることで、ステップS230でアクセス履歴テーブル210に格納する識別情報NDIDを取得することができる。すなわち、新たな回路を設けることなく、応答パケットの送信元のノードNDを示す識別情報NDIDを取得することができる。
次に、ステップS224において、パケット制御部40の応答受信部48は、応答パケットに含まれる結果コードRESULT(図9)を参照し、元のパケットの処理が正常であったかを判断する。結果コードRESULTが正常応答を示す場合、ステップS226の処理が実行され、結果コードRESULTが識別情報NDIDの異常または物理アドレスPAの異常を示す場合、ステップS240の処理が実行される。
ステップS226において、応答受信部48は、要求元テーブル42(図7)を参照し、応答パケットに含まれる識別情報REQIDに対応する領域に格納されたメモリアクセス要求の発行元の識別情報IOIDを取得する。すなわち、応答受信部48は、要求元テーブル42を検索し、複数のノードNDのいずれかから受信するパケットに含まれる識別情報REQIDに対応する入出力装置IOの識別情報IOIDを取得する。
次に、ステップS228において、応答受信部48は、要求元テーブル42において、識別情報IOIDを取得した領域のVALIDフラグを”0”に設定し、当該領域に対応する識別情報REQIDを未使用状態に戻す。すなわち、要求元テーブル42を更新する。
次に、ステップS230において、応答受信部48は、ステップS226で取得した識別情報IOIDに対応するアクセス履歴テーブル210のエントリに、ステップS222で取得した応答パケットの送信元の識別情報NDIDを格納する。応答パケットの送信元のノードNDは、応答パケットに対応する元のパケット(メモリアクセス要求)を処理したノードNDである。すなわち、応答受信部48は、応答パケットに対応する元のパケットでアクセスされたメモリMEMを含むノードNDを示す識別情報NDIDを、アクセス履歴テーブル210に格納する。
このように、応答受信部48は、要求元テーブル42から特定したメモリアクセス要求の発行元の識別情報IOIDを利用して、アクセス履歴テーブル210の識別情報NDIDを更新することができる。すなわち、新たな回路を設けることなく、既存の要求元テーブル42を利用して、アクセス履歴テーブル210における識別情報NDIDを格納するエントリを選択することができる。
図11のステップS104において、パケット内の物理アドレスPAが他ノードであることが判定された場合、パケット内のディスティネーションDSTが示す識別情報NDIDは正しくない。換言すれば、パケットの生成時に予測部220がアクセス履歴テーブル210を用いて取得した識別情報NDID、あるいは、ランダムに生成した識別情報NDIDは正しくない。一方、応答受信部48は、応答パケットの受信毎にアクセス履歴テーブル210に識別情報NDIDを格納する。これにより、入出力装置IOからメモリMEMへのメモリアクセス要求(パケット)が所定の回数連続して発行される場合、予測部220が予測する識別情報NDIDが正しい確率は高くなる。
次に、ステップS232において、応答受信部48は、応答パケットに対する正常処理を実行する。応答パケットの元のパケットがストアリクエストの場合、応答受信部48は、元のパケットに対応するメモリアクセス要求の発行元の入出力装置IOにデータの書き込みの完了を通知する。応答パケットの元のパケットがロードリクエストの場合、応答受信部48は、元のパケットに対応するメモリアクセス要求の発行元の入出力装置IOにメモリMEMから読み出したデータを転送する。そして、入出力制御装置IOHによる応答パケットの受信処理が終了する。なお、メモリアクセス要求の発行元の入出力装置IOは、ステップS226において要求元テーブル42から取得した識別情報IOIDで示される。
一方、結果コードRESULTが識別情報NDIDの異常または物理アドレスPAの異常を示す場合、ステップS240において、応答受信部48はエラー処理を実行する。応答受信部48は、メモリMEMへのメモリアクセスの失敗を示す情報を、メモリアクセス要求の発行元の入出力装置IOに通知する。そして、入出力制御装置IOHによる応答パケットの受信処理が終了する。
ステップS230の処理によりアクセス履歴テーブル210に格納された正しい識別情報NDIDは、次のメモリアクセス要求が入出力装置IOから発行された場合に、図10のステップS210の処理で使用される。図9に示すパケットでは、1回のストアリクエストにより128バイトのデータがメモリMEMに書き込まれ、1回のロードリクエストにより128バイトのデータがメモリMEMから読み出される。例えば、入出力装置IOによるメモリMEMへのメモリアクセスが、ページ単位で実行され、1ページは8KB(キロバイト)とする。この場合、入出力装置IOからメモリMEMへのデータの書き込みは、64回のストアリクエストにより実行され、メモリMEMから入出力装置IOへのデータの読み出しは、64回のロードリクエストにより実行される。
メモリMEMの1ページをアクセスする64回のメモリアクセス要求において、予測部220が最初のメモリアクセス要求に基づき予測した識別情報NDIDが正しくないとする(予測部220が図10のステップS212を実行)。この場合にも、最初のメモリアクセス要求に対する応答パケットの受信に基づき、メモリアクセス先を示す識別情報NDIDはアクセス履歴テーブル210に正しく設定され、2回目以降のメモリアクセス要求に対応するパケットは、正しいノードNDに送信される。
図13は、図8に示すアクセス履歴テーブル210を更新する例を示す。なお、図13では、入出力装置IO0、IO1に対応するエントリを示す。図13は、情報処理装置IPEの制御方法の例を示す。アクセス履歴テーブル210の全てのエントリは、情報処理装置IPEに電源が投入された後の初期化処理により、初期状態にリセットされる(図13(a))。初期状態では、識別情報IOIDの領域は、入出力装置IOのそれぞれに割り当てられた番号が”0”から順に格納され、全てのVALIDフラグの領域および全ての識別情報NDIDの領域は、”0”にリセットされる。
この後、入出力制御装置IOHは、”1”の識別情報IOIDが割り当てられた入出力装置IO1からメモリアクセス要求を受信する。アクセス履歴テーブル210における識別情報IOID=”1”を含むエントリは、VALIDフラグが”0”であり無効状態である。このため、入出力制御装置IOHは、図10のステップS212で説明したように、予測部220が予測したランダムな識別情報NDIDを用いてパケット(ストアリクエストまたはロードリクエスト)を生成する。
入出力制御装置IOHの応答受信部48は、入出力装置IO1が発行したメモリアクセス要求のパケットに対する応答パケット(ストア応答またはロード応答)を、識別情報NDID=”1”が割り当てられたノードND1から受信する(図13(b))。そして、応答受信部48は、図12のステップS230で説明したように、アクセス履歴テーブル210における識別情報IOID=”1”を含むエントリのVALIDフラグおよび識別情報NDIDの領域を”1”にセットする(図13(c))。
次に、入出力制御装置IOHは、”1”の識別情報IOIDが割り当てられた入出力装置IO1からメモリアクセス要求を受信する。入出力制御装置IOHは、図10のステップS210で説明したように、予測部220がアクセス履歴テーブル210を参照することで予測した識別情報NDID(=”1”)を用いてパケットを生成する。
この後、応答受信部48は、識別情報NDID=”1”が割り当てられたノードND1から応答パケット受信する(図13(d))。そして、応答受信部48は、図12のステップS230で説明したように、アクセス履歴テーブル210における識別情報IOID=”1”を含むエントリのVALIDフラグおよび識別情報NDIDの領域を”1”にセットする(図13(e))。なお、1つの入出力装置IOから1つのメモリMEMに対する複数のメモリアクセス要求が連続して発行される場合、応答パケットに基づき更新されるアクセス履歴テーブル210の内容は、更新前の状態と同じである。アクセス履歴テーブル210の内容が、更新の前後で変化しない場合、応答受信部48は、アクセス履歴テーブル210のVALIDフラグおよび識別情報NDIDの領域の書き替え処理を省略してもよい。
次に、入出力制御装置IOHは、”0”の識別情報IOIDが割り当てられた入出力装置IO0からメモリアクセス要求を受信する。アクセス履歴テーブル210における識別情報IOID=”0”を含むエントリは、VALIDフラグが”0”であり無効状態である。このため、入出力制御装置IOHは、図10のステップS212で説明したように、予測部220が生成したランダムな識別情報NDIDを用いてパケットを生成する。
この後、応答受信部48は、識別情報NDID=”0”が割り当てられたノードND0から応答パケット受信する(図13(f))。そして、応答受信部48は、図12のステップS230で説明したように、アクセス履歴テーブル210における識別情報IOID=”0”を含むエントリのVALIDフラグおよび識別情報NDIDの領域を”1”にセットする(図13(g))。
図14は、予測部220の予測が正しかった場合と、予測部220の予測が間違った場合とのパケットの流れの例を示す。図14は、情報処理装置IPEの制御方法の例を示す。図14に示す例では、入出力装置IOは、CPU1に接続されたメモリMEM10に割り当てられた記憶領域を示す物理アドレスPAとともにメモリアクセス要求を入出力制御装置IOHに送信する。そして、メモリアクセス要求に基づき入出力制御装置IOHが発行するパケットによりメモリMEM10がアクセスされる。
予測部220の予測が正しかった場合、入出力制御装置IOHは、アクセスするメモリMEM10を含むノードND1にパケットを送信する(図14(a))。ノードND1のCPU1は、受信したパケットに基づいてメモリMEM10にアクセスする(図14(b))。そして、CPU1は、応答パケットを入出力制御装置IOHに送信する(図14(c))。
一方、予測部220の予測が間違った場合、入出力制御装置IOHは、アクセスするメモリMEM10を含まないノードND0にパケットを送信する(図14(d))。ノードND0のCPU0は、図5に示すアクセス履歴テーブル210を参照することで、パケットに含まれる物理アドレスPAが、ノードND1に割り当てられていることを検出し、パケットをノードND1に転送する(図14(e))。転送されたパケットを受信したノードND1のCPU1は、パケットに基づいてメモリMEM10にアクセスする(図14(f))。そして、CPU1は、応答パケットを入出力制御装置IOHに送信する(図14(g))。
図15は、予測部220の予測が正しかった場合と、予測部220の予測が間違った場合とのアクセス時間の比較例を示す。図15に示す例では、入出力装置IOは、ノードND1に含まれるメモリMEM10に割り当てられた記憶領域を示す物理アドレスPAとともにメモリアクセス要求を入出力制御装置IOHに送信する。
予測部220の予測が正しかった場合、予測部220が予測した識別情報NDIDがノードND1を示す場合、入出力制御装置IOHは、CPU0を介することなく、CPU1にパケットを送信する。この場合、CPU0へのパケットの転送は発生しない。
一方、予測部220の予測が間違った場合、予測部220が求めた識別情報NDIDがノードND1でなくノードND0を示す場合、CPU0からCPU1へのパケットの転送が発生する。この場合、パケットの転送に掛かる時間は、CPU0がCPU1に転送するパケットの送信処理時間と、パケットの転送時間と、CPU1が受信したパケットの受信処理時間とを含む。この結果、予測部220の予測が間違った場合、パケットの転送に係る時間に相当するアクセスペナルティが発生する。
図16は、パケットが連続して発行される場合の情報処理装置IPEの動作の例を示す。図15の同様の動作については、詳細な説明は省略する。図15と同様に、太い破線の矢印は、予測部220の予測が間違った場合の動作を示し、太い実線の矢印は、予測部220の予測が正しかった場合の動作を示す。
図16では、先行するリクエストに対する応答を受信する前に送信可能なリクエストの数であるアウトスタンディング数は”3”である。また、アウトスタンディング数分のパケットでは、予測部220は、識別情報NDIDを間違って予測し、アウトスタンディング数以降のパケットでは、予測部220は、識別情報NDIDを正しく予測するとする。
入出力制御装置IOHは、アウトスタンディング数を超えた数の応答待ちのリクエストを保持しないため、4番目以降のパケットを、先行するパケットに対する応答パケットを受信した後にCPU0またはCPU1に送信する。
図17は、アウトスタンディング数と、入出力制御装置IOHとメモリMEMとの間で転送されるデータのスループットとの関係の例を示す。図17の太い実線は、アウトスタンディング数分のリクエストで識別情報NDIDの予測が間違われ、アウトスタンディング数以降のリクエストで識別情報NDIDの予測が正しい場合のスループットの変化を示す。図16に示す動作でのスループットは、図17に示す実線において、アウトスタンディング数が”3”の特性で示される(約2GB/s)。一方、図17の一点鎖線は、全てのリクエストで識別情報NDIDの予測が正しい場合のスループットの変化を示す。
図17に示す特性は、以下のパラメータを使用して求められた。
インタコネクトICNTの通信バンド幅 :36GB/s
データの総転送量 :8KB
1パケットで送信するデータサイズ :128B
パケットの送信処理による遅延時間 :21ns
パケットの受信処理による遅延時間 :19ns
パケットの転送による遅延時間 :10ns
メモリMEMのアクセスレイテンシ :100ns
データの総転送量と1パケットで送信するデータサイズとの関係から、8KBのデータを転送するために64個のパケットが発行される。スループット(GB/s)は、データの転送量を転送時間で除して求められる。予測部220による予測の間違いは、図15に示すように、転送時間の増加(アクセスペナルティ)として現れる。予測部220による予測が間違った場合、ノードND間でのパケットの転送が発生し、パケットの送信処理による遅延時間と、パケットの転送による遅延時間と、パケットの受信処理による遅延時間が余分に掛かる(50ns)。
アウトスタンディング数は、応答パケットを受ける前に送信できるパケットの数であるため、アウトスタンディング数が増える程、パケットの送信効率は向上し、スループットは上昇する。図17に示す例では、予測部220による予測が間違った場合と、全ての予測が正しい場合とのスループットの差は、アウトスタンディング数が44の場合に最大になる。アウトスタンディング数が45を超えると、スループットの差は小さくなり、予測が間違った場合のスループットへの影響は小さくなる。なお、情報処理装置IPEが実際に適用するアウトスタンディング数は、最大でも10程度であり、予測のミスによるスループットへの影響は、アウトスタンディング数が10を超える場合に比べて小さい。
以上、図1から図17に示した実施形態では、入出力制御装置IOHは、ソースアドレスデコーダ20およびアドレスデコーダテーブル22を持つことなく、予測部220の予測結果に基づきパケットを送信するノードNDを決定することができる。この結果、CPUの世代に依存することなく、入出力制御装置IOHとノードNDとを接続することができ、新たなCPUが開発された場合にも、入出力制御装置IOHとノードNDとの接続性を低下させることなく、パケットを送受信することができる。
入出力制御装置IOHの回路規模を、アドレスデコーダテーブル22およびソースアドレスデコーダ20が搭載された入出力制御装置IOHの回路規模に比べて小さくすることができる。入出力制御装置IOHのルータ240は、既存のルーティングテーブル250を参照することで、新たな回路を設けることなく、応答パケットの送信元のノードNDを示す識別情報NDIDを取得することができる。入出力制御装置IOHの応答受信部48は、既存の要求元テーブル42を参照することで、新たな回路を設けることなく、アクセス履歴テーブル210の識別情報NDIDを更新することができる。
アクセス履歴テーブル210に有効な識別情報NDIDが格納されていない場合、予測部220が識別情報NDIDを所定の規則に従い選択することで、リクエスト生成部46は、誤動作することなく、パケットをノードNDのいずれかに送信することができる。
図18は、情報処理装置、入出力制御装置および情報処理装置の制御方法の別の実施形態を示す。図1から図17で説明した要素と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。図18に示す入出力制御装置IOHは、図5に示すアクセス履歴テーブル210、予測部220および応答受信部48の代わりに、アクセス履歴テーブル210A、予測部220Aおよび応答受信部48Aを有する。入出力制御装置IOHにおいて、アクセス履歴テーブル210A、予測部220Aおよび応答受信部48Aを除く構成は、図5に示す入出力制御装置IOHと同様である。また、入出力制御装置IOHに接続されるノードND(CPU)の構成は、図2と同一または同様である。すなわち、この実施形態の情報処理装置の構成は、図1と同一または同様である。アクセス履歴テーブル210Aの例は図19に示され、予測部220Aの動作の例は図20に示され、応答受信部48Aの動作の例は図21に示される。
図19は、図18に示すアクセス履歴テーブル210Aの例を示す。アクセス履歴テーブル210Aは、パケットに含まれる物理アドレスPAのハッシュ値と、VALIDフラグと、メモリアクセス要求の送信先と予測されるノードNDを示す識別情報NDIDとを格納する複数の領域を有する。すなわち、アクセス履歴テーブル210Aは、物理アドレスPAのハッシュ値とVALIDフラグと識別情報NDIDとを含む複数のエントリを記憶する。アクセス履歴テーブル210Aに格納されるVALIDフラグおよび識別情報NDIDは、図8に示すアクセス履歴テーブル210に格納されるVALIDフラグおよび識別情報NDIDと同様である。
アクセス履歴テーブル210Aに格納される物理アドレスPAのハッシュ値は、ノードNDからの応答パケットに含まれる物理アドレスPAの一部のビットにより示される。図19に示す例では、ハッシュ値は、物理アドレスPA[39:0]の上位の8ビット(PA[39:32])である。すなわち、ハッシュ関数は、物理アドレスPAからPA[39:32]を抽出する関数である。なお、他のハッシュ関数を用いて物理アドレスPAから生成されたハッシュ値が、アクセス履歴テーブル210Aに記憶されてもよい。
図19に示すアクセス履歴テーブル210Aは、図8に示すアクセス履歴テーブル210と同様に、図3に示すアドレスデコーダテーブル22に比べて規模が小さい。また、ソースアドレスデコーダ20と予測部220Aとは、互いに同程度の規模である。このため、予測部220Aおよびアクセス履歴テーブル210Aが搭載された入出力制御装置IOHの回路規模を、ソースアドレスデコーダ20およびアドレスデコーダテーブル22が搭載された入出力制御装置IOHの回路規模に比べて小さくすることができる。
アクセス履歴テーブル210Aは、図18に示す予測部220Aにより参照され、図8に示す応答受信部48Aにより更新される。ハードディスクドライブ装置等の入出力装置IOは、セクタ等のブロック単位でデータが入出力されるため、メモリMEMの連続した記憶領域にアクセスすることが多い。この場合、入出力装置IOからのメモリアクセス要求に基づいてノードNDに送信される複数のパケット(ストアリクエストまたはロードリクエスト)に含まれる物理アドレスPAのハッシュ値は連続する。このため、予測部220Aは、アクセス履歴テーブル210Aに格納されたハッシュ値に基づいて、パケットの送信先のノードNDの識別情報NDIDを正しく予測することができる。パケット制御部40がアクセス履歴テーブル210Aを更新する例は、図22に示す。
図20は、図18に示す予測部220Aの動作の例を示す。図20は、情報処理装置IPEの制御方法の例を示す。予測部220Aは、パケット制御部40が入出力装置IOからメモリアクセス要求を受信した場合に図20に示す動作を開始する。なお、図20に示す動作は、図10に示すステップS208、S210、S212の代わりに実行される。すなわち、予測部220Aは、メモリアクセス要求を発行した入出力装置IOが過去にアクセスしたノードNDを検索する代わりに、物理アドレスPAのハッシュ値に対応して過去のアクセスされたノードNDを検索する。入出力制御装置IOHがストアリクエストまたはロードリクエストのパケットをCPUに送信する動作は、図10のステップS208、S210、S212の代わりに図20の動作が実行されることを除き、図10と同様である。
まず、ステップS302において、予測部220Aは、入出力装置IOが発行するメモリアクセス要求に含まれる物理アドレスPAをパケット制御部40から受け、受けた物理アドレスPAの8ビット[39:32]を取り出して、ハッシュ値を生成する。
次に、ステップS304において、予測部220Aは、生成したハッシュ値を、アクセス履歴テーブル210Aに格納されたハッシュ値と比較する。次に、ステップS306において、予測部220Aは、アクセス履歴テーブル210内に、生成したハッシュ値を含むエントリがあるかを判定する。
生成したハッシュ値を含むエントリがある場合、ステップS308において、予測部220Aは、生成したハッシュ値とともにエントリに含まれる識別情報NDIDを選択する。一方、生成したハッシュ値を含むエントリがない場合、ステップS310において、予測部220Aは、インタコネクトICNTに接続されたノードNDを識別する識別情報NDIDの1つを、ランダムに選択する。すなわち、予測部220Aは、生成したハッシュ値を含むエントリがない場合、パケットを送信するノードNDをランダムに予測する。
なお、図10に示すステップS212と同様に、予測部220Aは、生成したハッシュ値を含むエントリがない場合、ランダム以外の所定の規則に従い識別情報NDIDを選択してもよい。ランダム以外の所定の規則は、昇順、降順等である。そして、ステップS312において、予測部220Aは、選択した識別情報NDIDをリクエスト生成部46に出力し、動作を終了する。
図21は、図18に示す応答受信部48Aの動作の例を示す。図21は、情報処理装置IPEの制御方法の例を示す。応答受信部48Aは、ルータ240を介してノードNDのいずれかから応答パケットを受信した場合に図21に示す動作を開始する。なお、図21に示す動作は、図12に示すステップS230の代わりに実行される。入出力制御装置IOHがCPUから応答パケットを受けた場合の動作は、図12のステップS230の代わりに図21の動作が実行されることを除き、図12と同様である。
まず、ステップS402において、応答受信部48Aは、応答パケットに含まれる物理アドレスPAの8ビット[39:32]を取り出して、ハッシュ値を生成する。次に、ステップS404において、応答受信部48Aは、生成したハッシュ値を、アクセス履歴テーブル210Aに格納されたハッシュ値と比較する。
次に、ステップS406において、応答受信部48Aは、アクセス履歴テーブル210内に、生成したハッシュ値を含むエントリがあるかを判定する。生成したハッシュ値を含むエントリがある場合、応答受信部48Aは、ステップS408を実行し、生成したハッシュ値を含むエントリがない場合、応答受信部48Aは、ステップS410を実行する。
ステップS408において、応答受信部48Aは、アクセス履歴テーブル210Aにおいて、生成したハッシュ値とともにエントリに含まれる識別情報NDIDを、図12のステップ222で取得した識別情報NDIDに書き替える。すなわち、応答受信部48Aは、応答パケットを送信した送信元のノードNDをアクセス履歴テーブル210Aに登録することで、アクセス履歴テーブル210Aを更新する。そして、応答受信部48Aによるアクセス履歴テーブル210の更新動作は完了する。
一方、ステップS410において、応答受信部48Aは、ステップS402で生成したハッシュ値と、図12のステップ222で取得した識別情報NDIDとを含むエントリを空いている領域に格納する。そして、生成したハッシュ値と識別情報NDIDとを含むエントリのVALIDフラグを”1”に設定する。なお、エントリを格納する領域がない場合、追い出しアルゴリズムに基づき、エントリを上書きすることで、生成したハッシュ値と、図12のステップ222で取得した識別情報NDIDとを含むエントリをアクセス履歴テーブル210Aに格納する。追い出しアルゴリズムは、FIFO(First-In First-Out)またはLRU(Least Recently Used)等が使用される。そして、応答受信部48Aによるアクセス履歴テーブル210の更新動作は完了する。
図22は、図19に示すアクセス履歴テーブル210Aを更新する例を示す。図22は、情報処理装置IPEの制御方法の例を示す。図22では、アクセス履歴テーブル210Aにおけるエントリの格納数は、”2”とする。図22において、物理アドレスPAの上位8ビットに付した下線は、ハッシュ値を示す。
アクセス履歴テーブル210Aにおけるエントリを格納する全ての領域は、情報処理装置IPEに電源が投入された後の初期化処理により、初期状態にリセットされる(図22(a))。ハッシュ値の初期値は”0xFF”であり、VALIDフラグの初期値および識別情報NDIDの初期値は”0”である。なお、ハッシュ値の初期値は”0x00”等でもよい。
まず、入出力制御装置IOHは、入出力装置IOからの物理アドレスPA=”0x0000001000”を示すメモリアクセス要求に基づき、予測部220Aにパケットの送信先のノードNDを示す識別情報NDIDを予測させる。予測部220Aは、生成したハッシュ値(0x00)を含むエントリがアクセス履歴テーブル210Aに存在しないため、識別情報NDIDをランダムに生成する。そして、入出力制御装置IOHは、物理アドレスPA=”0x0000001000”とランダムな識別情報NDIDとを含むパケットを送信する(図22(b))。
この後、入出力制御装置IOHは、物理アドレスPA=”0x0000001000”を含む応答パケットをノードND0から受信する。図18に示す応答受信部48Aは、受信した物理アドレスPAからハッシュ値(0x00)を生成する。そして、応答受信部48は、生成したハッシュ値をアクセス履歴テーブル210Aの空いている領域に格納し、VALIDフラグを”1”に設定し、応答パケットを受信したノードND0を示す識別情報NDIDを”0”に設定する(図22(c))。すなわち、エントリがアクセス履歴テーブル210Aに記憶される。
次に、入出力装置IOからの物理アドレスPA=”0x0100001000”を示すメモリアクセス要求に基づき、予測部220Aにパケットの送信先のノードNDを示す識別情報NDIDを予測させる。予測部220Aは、生成したハッシュ値(0x01)を含むエントリがアクセス履歴テーブル210Aに存在しないため、識別情報NDIDをランダムに生成する。そして、入出力制御装置IOHは、物理アドレスPA=”0x0100001000”とランダムな識別情報NDIDとを含むパケットを送信する(図22(d))。
この後、入出力制御装置IOHは、物理アドレスPA=”0x0100001000”を含む応答パケットをノードND1から受信する。応答受信部48Aは、受信した物理アドレスPAからハッシュ値(0x01)を生成する。そして、応答受信部48は、生成したハッシュ値をアクセス履歴テーブル210Aの空いている領域に格納し、VALIDフラグを”1”に設定し、応答パケットを受信したノードND1を示す識別情報NDIDを”1”に設定する(図22(e))。すなわち、エントリがアクセス履歴テーブル210Aに記憶される。
次に、入出力装置IOからの物理アドレスPA=”0x0100002000”を示すメモリアクセス要求に基づき、予測部220Aにパケットの送信先のノードNDを示す識別情報NDIDを予測させる。予測部220Aは、ハッシュ値(0x01)を生成し、アクセス履歴テーブル210Aに記憶されたハッシュ値(0x01)を含むエントリから識別情報NDID(=1)を読み出す。そして、入出力制御装置IOHは、物理アドレスPA=”0x0100002000”と識別情報NDID(=1)とを含むパケットを送信する(図22(f))。
この後、入出力制御装置IOHは、物理アドレスPA=”0x0100002000”を含む応答パケットをノードND1から受信する。応答受信部48Aは、受信した物理アドレスPAからハッシュ値(0x01)を生成する。応答受信部48は、生成したハッシュ値を含むエントリがアクセス履歴テーブル210Aにあるため、生成したハッシュ値を含むエントリに、応答パケットを受信したノードND1を示す識別情報NDIDを”1”に格納する(図22(g))。
次に、入出力装置IOからの物理アドレスPA=”0x0200001000”を示すメモリアクセス要求に基づき、予測部220Aにパケットの送信先のノードNDを示す識別情報NDIDを予測させる。予測部220Aは、生成したハッシュ値(0x02)を含むエントリがアクセス履歴テーブル210Aに存在しないため、識別情報NDIDをランダムに生成する。そして、入出力制御装置IOHは、物理アドレスPA=”0x0200001000”とランダムな識別情報NDIDとを含むパケットを送信する(図22(h))。
この後、入出力制御装置IOHは、物理アドレスPA=”0x0200001000”を含む応答パケットをノードND0から受信する。応答受信部48Aは、受信した物理アドレスPAからハッシュ値(0x02)を生成する。応答受信部48は、アクセス履歴テーブル210Aに空いている領域が存在しないため、追い出しアルゴリズムに基づき、エントリを書き替える。この例では、アクセス履歴テーブル210Aの2行目に記憶されたエントリが、ハッシュ値(0x02)および識別情報NDID(=0)に書き替えられる(図22(i))。
以上、図18から図22に示す実施形態においても、図1から図17に示す実施形態と同様の効果を得ることができる。さらに、図18から図22に示す実施形態では、物理アドレスPAのハッシュ値を含むエントリをアクセス履歴テーブル210Aに記憶することで、予測部220Aは、パケットの送信先のノードNDの識別情報NDIDを正しく予測することができる。
図23は、情報処理装置、入出力制御装置および情報処理装置の制御方法の別の実施形態におけるパケットの例を示す。この実施形態では、応答パケット(ストア応答およびロード応答のパケット)に、パケットの送信元の識別情報を示すソースSRCが追加される。パケットのその他の構成は、図9と同様である。情報処理装置IPEの構成は、図1と同一または同様であり、各ノードNDのCPUの構成は、図2と同一または同様である。入出力制御装置IOHの構成は、応答受信部48の動作が異なることを除き、図5と同様である。なお、図23に示すパケットは、図18に示す入出力制御装置IOHを含む情報処理装置IPEに適用されてもよい。この場合、入出力制御装置IOHの構成は、応答受信部48Aの動作が異なることを除き、図18と同様である。
図23では、応答パケットがソースSRCを含むため、応答受信部48(または48A)は、応答パケットの受信時に、ルーティングテーブル250を参照することなく、応答パケットの送信元のノードNDを示す識別情報NDIDを取得可能である。
図24は、図23に示すパケットを送受信する入出力制御装置IOHが、CPUから応答パケットを受けた場合の動作の例を示す。図24は、情報処理装置IPEの制御方法の例を示す。図12と同一または同様の処理については、図12と同じ符号を付し、詳細な説明は省略する。図24は、図12に示すステップS222の代わりにステップS223が実行されることを除き、図12の動作と同様である。
ステップS223では、応答受信部48(または48A)は、応答パケットのソースSRCを参照し、応答パケットの送信元のノードNDを示す識別情報NDIDを取得する。これにより、入出力制御装置IOHは、ルーティングテーブル250を参照することなく、応答パケットの送信元のノードNDを示す識別情報NDIDを取得することができる。なお、応答パケットのソースSRCに基づき、識別情報NDIDを取得する処理は、応答受信部48(または48A)でなく、ルータ240により実行されてもよい。
以上、図23から図24に示す実施形態においても、図1から図22に示す実施形態と同様の効果を得ることができる。さらに、図23から図24に示す実施形態では、ルーティングテーブル250を参照することなく、応答パケットの送信元の識別情報NDIDを取得することができる。この結果、図1から図17に示す実施形態に比べて、応答パケットの送信元の識別情報NDIDを取得する時間を短縮することができ、応答パケットの受信時の処理効率を向上することができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。