図1は、本実施形態による情報処理装置の構成例を示す図である。情報処理装置は、第1のプロセッサ101a、第1のシステムコントローラ102a、第1のメインメモリ103a、第1のディレクトリメモリ104a、第2のプロセッサ101b、第2のシステムコントローラ102b、第2のメインメモリ103b、第2のディレクトリメモリ104b、第3のプロセッサ101c、第3のシステムコントローラ102c、第3のメインメモリ103c、及び第3のディレクトリメモリ104cを有する。
第1のプロセッサ101aは、演算処理を行う第1の演算処理装置である。第1のメインメモリ103aは、第1のプロセッサ101aに対応し、各アドレスにデータを記憶する第1の主記憶装置である。第1のディレクトリメモリ104aは、第1のメインメモリ103aの各アドレスのデータのキャッシュ状態を示すディレクトリ情報、エラー情報及びプロセッサ識別情報を記憶する第1の情報記憶装置である。第1のシステムコントローラ102aは、第1のプロセッサ101a、第1のメインメモリ103a及び第1のディレクトリメモリ104aを制御する第1の制御装置である。
第2のプロセッサ101bは、演算処理を行う第2の演算処理装置である。第2のメインメモリ103bは、第2のプロセッサ101bに対応し、各アドレスにデータを記憶する第2の主記憶装置である。第2のディレクトリメモリ104bは、第2のメインメモリ103bの各アドレスのデータのキャッシュ状態を示すディレクトリ情報、エラー情報及びプロセッサ識別情報を記憶する第2の情報記憶装置である。第2のシステムコントローラ102bは、第2のプロセッサ101b、第2のメインメモリ103b及び第2のディレクトリメモリ104bを制御する第2の制御装置である。
第3のプロセッサ101cは、演算処理を行う第3の演算処理装置である。第3のメインメモリ103cは、第3のプロセッサ101cに対応し、各アドレスにデータを記憶する第3の主記憶装置である。第3のディレクトリメモリ104cは、第3のメインメモリ103cの各アドレスのデータのキャッシュ状態を示すディレクトリ情報、エラー情報及びプロセッサ識別情報を記憶する第3の情報記憶装置である。第3のシステムコントローラ102cは、第3のプロセッサ101c、第3のメインメモリ103c及び第3のディレクトリメモリ104cを制御する第3の制御装置である。
第2のプロセッサ101bは、第1のプロセッサ101a及び第3のプロセッサ101cの間に設けられる。第1〜第3のメインメモリ103a〜103cは、相互に異なるアドレスのデータを記憶する。第1〜第3のメインメモリ103a〜103cは、第1〜第3のプロセッサ101a〜101cの共有メモリである。
第1のプロセッサ101aは、第1のシステムコントローラ102aを介して、第1のメインメモリ103aに対してデータの読み出し及び書き込みを行うことができる。また、第1のプロセッサ101aは、第2のプロセッサ101b及び第2のシステムコントローラ102bを介して、第2のメインメモリ103bに対してデータの読み出し及び書き込みを行うことができる。また、第1のプロセッサ101aは、第2のプロセッサ101b、第3のプロセッサ101c及び第3のシステムコントローラ102cを介して、第3のメインメモリ103cに対してデータの読み出し及び書き込みを行うことができる。
第2のプロセッサ101bは、第2のシステムコントローラ102bを介して、第2のメインメモリ103bに対してデータの読み出し及び書き込みを行うことができる。また、第2のプロセッサ101bは、第1のプロセッサ101a及び第1のシステムコントローラ102aを介して、第1のメインメモリ103aに対してデータの読み出し及び書き込みを行うことができる。また、第2のプロセッサ101aは、第3のプロセッサ101c及び第3のシステムコントローラ102cを介して、第3のメインメモリ103cに対してデータの読み出し及び書き込みを行うことができる。
第3のプロセッサ101cは、第3のシステムコントローラ102cを介して、第3のメインメモリ103cに対してデータの読み出し及び書き込みを行うことができる。また、第3のプロセッサ101cは、第2のプロセッサ101b及び第2のシステムコントローラ102bを介して、第2のメインメモリ103bに対してデータの読み出し及び書き込みを行うことができる。また、第3のプロセッサ101cは、第2のプロセッサ101b、第1のプロセッサ101a及び第1のシステムコントローラ102aを介して、第1のメインメモリ103aに対してデータの読み出し及び書き込みを行うことができる。
図2は、第2のプロセッサ101b、第2のシステムコントローラ102b、第2のメインメモリ103b及び第2のディレクトリメモリ104bの構成例を示す図である。第1のプロセッサ101a及び第3のプロセッサ101cは、第2のプロセッサ101bと同様の構成を有する。第1のシステムコントローラ102a及び第3のシステムコントローラ102cは、第2のシステムコントローラ102bと同様の構成を有する。第1のメインメモリ103a及び第3のメインメモリ103cは、第2のメインメモリ103bと同様の構成を有する。第1のディレクトリメモリ104a及び第3のディレクトリメモリ104cは、第2のディレクトリメモリ104bと同様の構成を有する。
第2のプロセッサ101bは、コア221及びキャッシュメモリ222を有する。コア221は、演算処理を行う。キャッシュメモリ222は、キャッシュライン単位で、第1のメインメモリ103a〜第3のメインメモリ103cの一部のアドレスのデータを記憶する。例えば、キャッシュメモリ222はSRAM(Static Random Access Memory)であり、第1〜第3のメインメモリ103a〜103cはDRAM(Dynamic Random Access Memory)である。キャッシュメモリ222は、第1〜第3のメインメモリ103a〜103cに対して高速にアクセスが可能である。
第2のシステムコントローラ102bは、プロセッサインターフェース201、エラー検出部202、エラープロセッサ検出部203、トランザクション制御部204、メモリアクセス制御部205、キャッシュコヒーレンシ制御部206、エラープロセッサ制御部207、及びディレクトリ制御部208を有する。プロセッサインターフェース201は、第2のプロセッサ101bに対して、メモリアクセス要求を入力し、処理の完了後の応答を出力する。トランザクション制御部204は、プロセッサインターフェース201に接続され、メモリアクセス要求を判別し、第2のメインメモリ103bに対する読み出し又は書き込み要求と、第1〜第3のプロセッサ101a〜101cに対するデータ返送要求とを、順次、実行指示する。メモリアクセス制御部205は、トランザクション制御部204に接続され、第2のメインメモリ103bに対して、読み出し及び書き込みを制御する。
キャッシュコヒーレンシ制御部206は、MESIプロトコルに従い、キャッシュメモリ222の各キャッシュラインのデータが4状態のうちのいずれかの状態であるのかを記憶する。4状態は、変更状態、排他状態、共有状態、及び無効状態である。変更状態は、第2のプロセッサ101bのキャッシュメモリ222だけに存在し、第1のプロセッサ101a及び第3のプロセッサ101cのキャッシュメモリ222には存在しないデータであり、第1〜第3のメインメモリ103a〜103cのデータに対して変更されたデータを示す。排他状態は、第2のプロセッサ101bのキャッシュメモリ222だけに存在し、第1のプロセッサ101a及び第3のプロセッサ101cのキャッシュメモリ222には存在しないデータであり、第1〜第3のメインメモリ103a〜103cのデータに対して同一のデータを示す。共有状態は、第2のプロセッサ101bのキャッシュメモリ222に存在し、かつ第1のプロセッサ101a又は第3のプロセッサ101cのキャッシュメモリ222にも存在するデータを示す。無効状態は、そのキャッシュラインのデータが無効であることを示す。また、キャッシュコヒーレンシ制御部206は、第2のディレクトリメモリ104b内のディレクトリ情報211に応じて、第1〜第3のプロセッサ101a〜101cに対して、データ返送要求又はキャッシュラインの無効化要求を出力し、その応答を入力する。
第2のディレクトリメモリ104bは、第2のメインメモリ103の各アドレスのデータに対する、ディレクトリ情報211、エラー情報212、及びプロセッサ識別情報213を記憶する。ディレクトリ制御部208は、第2のディレクトリメモリ104bに対して、ディレクトリ情報211、エラー情報212、及びプロセッサ識別情報213の読み出し及び書き込みを行う。ディレクトリ情報211は、第2のメインメモリ103の各アドレスのデータが第1〜第3のプロセッサ101a〜101cのうちのいずれのキャッシュメモリ222に記憶されているかの情報を含む。また、ディレクトリ情報211は、すべてのプロセッサ101a〜101cのキャッシュメモリ222に存在しないデータ状態、自己のプロセッサ101bのキャッシュメモリ222に存在するデータ状態、他のプロセッサ101a及び101cのうちの1個のプロセッサのキャッシュメモリ222にのみ存在するデータ状態(排他状態)、他のプロセッサ101a及び101cのうちの複数のプロセッサのキャッシュメモリ222に存在するデータ状態(共有状態)を示す情報を含む。
エラー検出部202は、データ返送要求の処理でエラーが発生したことを検出し、トランザクション制御部204及びエラープロセッサ検出部203にエラーを通知する。エラープロセッサ検出部203は、エラーが通知された場合には、ディレクトリ制御部208により読み出されたディレクトリ情報211に応じて、第1〜第3のプロセッサ101a〜101cのうちのエラー対象のプロセッサの識別情報(ID)をディレクトリ制御部208に通知する。ディレクトリ制御部208は、第2のディレクトリメモリ104bに対して、エラー対象のアドレスのデータに対する、通知されたエラー情報212及びプロセッサ識別情報213を書き込む。
ディレクトリ制御部208は、リカバリ要求に応じて、プロセッサ識別情報213を読み出し、その読み出したプロセッサ識別情報213をエラープロセッサ制御部207に出力する。エラープロセッサ制御部207は、その入力したプロセッサ識別情報213をトランザクション制御部204に出力する。トランザクション制御部104は、第1〜第3のプロセッサ101a〜101cのうちのプロセッサ識別情報213が示すプロセッサにエラーを通知する。
図3は、情報処理装置の課題を説明するための情報処理装置の制御方法を示すフローチャートである。ここで、第2のシステムコントローラ102bが第2のディレクトリメモリ104bにプロセッサ識別情報213を書き込まない場合の課題を説明する。ステップS321は、第1のプロセッサ101aのデータ書き込み要求の処理である。ステップS322は、第3のプロセッサ101cのデータ読み出し要求の処理である。
ステップS301では、第1のプロセッサ101aは、第2のメインメモリ103bのアドレスのデータ書き込み要求を発行する。次に、ステップS302では、第1のプロセッサ101aは、その書き込み要求に対応するデータが第1のプロセッサ101a内のキャッシュメモリ222に存在するか否かをチェックし、存在しない場合にはステップS303に処理を進め、存在する場合にはステップS307に処理を進める。
ステップS303では、第1のプロセッサ101aは、第2のプロセッサ101bを介して、第2のシステムコントローラ102bに上記のアドレスのデータの第2の読み出し要求を出力する。第2のシステムコントローラ102bは、第2のディレクトリメモリ104bに対して、上記の第2の読み出し要求に対応するアドレスのディレクトリ情報211を読み出す。
次に、ステップS304では、第2のシステムコントローラ102bは、ディレクトリ情報211を基に、第2の読み出し要求に対応するアドレスのデータが第2のプロセッサ101b又は第3のプロセッサ101cのキャッシュメモリ222に存在するか否かをチェックし、存在する場合にはステップS306に処理を進める。また、第2のシステムコントローラ102bは、第2の読み出し要求に対応するアドレスのデータがすべてのプロセッサ101a〜101cのキャッシュメモリ222に存在しない場合には、ステップS305に処理を進める。
ステップS306では、第2のシステムコントローラ102bは、第2の読み出し要求に対応する第2のプロセッサ101b又は第3のプロセッサ101cのキャッシュメモリ222のデータを取得し、その取得したデータを第2のプロセッサ101bを介して第1のプロセッサ101aに転送し、ステップS307に処理を進める。
ステップS305では、第2のシステムコントローラ102bは、第2のメインメモリ103bに対して、第2の読み出し要求に対応するアドレスのデータを読み出し、その読み出したデータを第2のプロセッサ101bを介して第1のプロセッサ101aに出力する。第1のプロセッサ101aは、入力したデータを第1のプロセッサ101aのキャッシュメモリ222に書き込む。第2のシステムコントローラ102bのディレクトリ制御部208は、第2のディレクトリメモリ104bに対して、第1のプロセッサ101aのキャッシュメモリ222にのみそのデータが存在することを示す排他状態のディレクトリ情報211を書き込む。また、第1のシステムコントローラ102aのキャッシュコヒーレンシ制御部206は、第1のプロセッサ101aのキャッシュメモリ222に書き込まれたデータが排他状態であることを記憶する。その後、情報処理装置は、ステップS307に処理を進める。
ステップS307では、第1のプロセッサ101aは、上記の書き込み要求に応じて、第1のプロセッサ101aのキャッシュメモリ222内のそのデータを書き換える。第1のシステムコントローラ102aのキャッシュコヒーレンシ制御部206は、第1のプロセッサ101aのキャッシュメモリ222の書き換えられたデータが変更状態であることを記憶する。
次に、ステップS308では、第3のプロセッサ101cは、第2のプロセッサ101bを介して、第2のシステムコントローラ102bに対して、第2のメインメモリ103bの上記のアドレスのデータの第1の読み出し要求を出力する。第2のシステムコントローラ102bは、第2のディレクトリメモリ104bに対して、上記のアドレスのディレクトリ情報211を読み出す。そして、第2のシステムコントローラ102bは、そのディレクトリ情報211に応じて、上記のアドレスのデータが第1のプロセッサ101aのキャッシュメモリ222に存在するので、第1のプロセッサ101aのキャッシュメモリ222のそのデータの返送要求を第1のプロセッサ101aに出力する。ここで、第1の読み出し要求に対応するアドレスのデータは、第1のプロセッサ101aのキャッシュメモリ222に存在し、他のプロセッサ101b及び101cのキャッシュメモリ222に存在しない状態である。
次に、ステップS309では、第1のプロセッサ101aは、返送要求に対応するデータを第1のプロセッサ101aのキャッシュメモリ222から読み出し、その読み出した変更状態のデータをライトバックのために第2のプロセッサ101bを介して第2のシステムコントローラ102bに出力する。
次に、ステップS310では、第2のシステムコントローラ102bにおいて、エラー検出部202は、返送要求に対応するデータを第1のプロセッサ101aから得られた場合には、転送成功を検出し、転送成功をトランザクション制御部204に通知し、ステップS317に処理を進める。これに対し、エラー検出部202は、通信障害等により、一定時間内に返送要求に対応するデータを第1のプロセッサ101aから得られない場合には、タイムアウトし、転送エラーを検出し、転送エラーをトランザクション制御部204に通知し、ステップS311に処理を進める。
ステップS317では、第2のシステムコントローラ102bは、第1のプロセッサ101aから得られたデータを第2のメインメモリ103bに書き込み(ライトバックし)、かつ第1のプロセッサ101aから得られたデータを第2のプロセッサ101bを介して第3のプロセッサ101cに出力する。第2のシステムコントローラ102bは、第1のプロセッサ101aのキャッシュメモリ222のそのデータの無効化要求を第1のプロセッサ101aを介して第1のシステムコントローラ102aに出力する。なお、第2のシステムコントローラ102bは、そのデータの無効化要求をすべてのプロセッサ101a〜101cに出力してもよい。第1のシステムコントローラ102aのキャッシュコヒーレンス制御部206は、無効化要求に応じて、第1のプロセッサ101aのキャッシュメモリ222のそのデータが無効状態であることを記憶する。第2のシステムコントローラ102bは、上記のアドレスのデータがすべてのプロセッサ101a〜101cのキャッシュメモリ222に存在しないことを示すディレクトリ情報211を第2のディレクトリメモリ104bに書き込む。
次に、ステップS318では、第1のプロセッサ101aは、第2のプロセッサ101bを介して、第2のシステムコントローラ102bに上記のアドレスのデータの第3の読み出し要求を出力する。第2のシステムコントローラ102bは、第2のディレクトリメモリ104b内のディレクトリ情報211を参照し、上記のアドレスのデータがすべてのプロセッサ101a〜101cのキャッシュメモリ222に存在しないので、第2のメインメモリ103bから上記のアドレスのデータを読み出す。そして、第2のシステムコントローラ102bは、その読み出したデータを第2のプロセッサ101bを介して第1のプロセッサ101aに出力する。
次に、ステップS319では、第1のプロセッサ101aは、その入力したデータを取得し、その入力したデータを第1のプロセッサ101aのキャッシュメモリ222に書き込む。これにより、第1のプロセッサ101aは、自己が書き換えたデータを第2のメインメモリ103bから正常に読み出すことができる。情報処理装置は、正常終了する。
ステップS311では、第2のシステムコントローラ102bは、転送エラーのアドレスに対するエラー情報212を第2のディレクトリメモリ104bに書き込む。
次に、ステップS312では、第2のシステムコントローラ102bは、転送エラーに応じて、第2のプロセッサ101bを介して、ステップS308の第1の読み出し要求の要求元の第3のプロセッサ101cにエラーを通知する。
次に、ステップS313では、第3のプロセッサ101cは、エラーの通知に応じて、ソフトウェア処理により、第2のプロセッサ101bを介して第2のシステムコントローラ102bにリカバリ要求を出力する。
次に、ステップS314では、第2のシステムコントローラ102bは、リカバリ要求に応じて、第2のディレクトリメモリ104bに対して、上記のアドレスに対するエラー情報212をクリアする。また、第2のシステムコントローラ102bは、第1のプロセッサ101aのキャッシュメモリ222のそのデータの無効化要求を第1のプロセッサ101aを介して第1のシステムコントローラ102aに出力する。なお、第2のシステムコントローラ102bは、そのデータの無効化要求をすべてのプロセッサ101a〜101cに出力してもよい。第1のシステムコントローラ102aのキャッシュコヒーレンス制御部206は、無効化要求に応じて、第1のプロセッサ101aのキャッシュメモリ222のそのデータが無効状態であることを記憶する。第2のシステムコントローラ102bは、上記のアドレスのデータがすべてのプロセッサ101a〜101cのキャッシュメモリ222に存在しないことを示すディレクトリ情報211を第2のディレクトリメモリ104bに書き込む。
次に、ステップS315では、ステップS318と同様に、第1のプロセッサ101aは、第2のプロセッサ101bを介して、第2のシステムコントローラ102bに上記のアドレスのデータの第3の読み出し要求を出力する。第2のシステムコントローラ102bは、第2のディレクトリメモリ104b内のディレクトリ情報211を参照し、上記のアドレスのデータがすべてのプロセッサ101a〜101cのキャッシュメモリ222に存在しないので、第2のメインメモリ103bから上記のアドレスのデータを読み出す。そして、第2のシステムコントローラ102bは、その読み出したデータを第2のプロセッサ101bを介して第1のプロセッサ101aに出力する。
次に、ステップS316では、第1のプロセッサ101aは、その入力したデータを取得し、その入力したデータを第1のプロセッサ101aのキャッシュメモリ222に書き込む。ここで、第1のプロセッサ101aは、ステップS319と同様に、自己が書き換えたデータを取得することを前提に処理を進める。しかし、ステップS310の転送エラーにより、第2のメインメモリ103bには書き換え後のデータが書き込まれていない。したがって、第1のプロセッサ101aは、自己が書き換える前のデータを第2のメインメモリ103bから取得することになり、正常な処理を行うことができない。これにより、情報処理装置は、異常終了する。この異常終了の課題を解決するための実施形態を以下に説明する。
図4は、本実施形態による情報処理装置の制御方法を示すフローチャートである。本実施形態では、第2のシステムコントローラ102bが第2のディレクトリメモリ104bにプロセッサ識別情報213を書き込むことにより、上記の図3の処理の課題を解決する。図4のフローチャートは、図3のフローチャートに対して、ステップS311、S315及びS316を削除し、ステップS401〜S406を追加したものである。以下、図4のフローチャートが図3のフローチャートと異なる点を説明する。
情報処理装置は、図3のフローチャートと同様に、ステップS301〜S310の処理を行う。ステップS310では、第2のシステムコントローラ102bにおいて、エラー検出部202は、返送要求に対応するデータを第1のプロセッサ101aから得られた場合には、転送成功をトランザクション制御部204に通知し、ステップS317に処理を進める。この場合、情報処理装置は、図3のフローチャートと同様に、ステップS317〜S319の処理を行う。これに対し、エラー検出部202は、通信障害等により、一定時間内に返送要求に対応するデータを第1のプロセッサ101aから得られない場合には、タイムアウトし、転送エラーをトランザクション制御部204に通知し、ステップS401に処理を進める。
ステップS401では、第2のシステムコントローラ102bは、ディレクトリ情報211を参照し、転送エラーのアドレスに対するエラー情報212と、転送エラーの対象であって転送エラーのアドレスのデータを排他状態でキャッシュメモリ222に記憶する第1のプロセッサ101aの識別情報213とを第2のディレクトリメモリ104bに書き込む。具体的には、エラープロセッサ検出部203がディレクトリ情報211を基に第1のプロセッサ101aの識別情報213をディレクトリ制御部208に出力し、ディレクトリ制御部208がエラー情報212及び第1のプロセッサ101aの識別情報213を第2のディレクトリメモリ104bに書き込む。
次に、ステップS312では、第2のシステムコントローラ102bは、転送エラーに応じて、第2のプロセッサ101bを介して、ステップS308の第1の読み出し要求の要求元の第3のプロセッサ101cにエラーを通知する。
次に、ステップS313では、第3のプロセッサ101cは、エラーの通知に応じて、ソフトウェア処理により、第2のプロセッサ101bを介して第2のシステムコントローラ102bにリカバリ要求を出力する。
次に、ステップS402では、第2のシステムコントローラ102bは、リカバリ要求に応じて、ステップS401で書き込んだ第1のプロセッサ101aの識別情報213を第2のディレクトリメモリ104bから読み出す。具体的には、ディレクトリ制御部208が第2のディレクトリメモリ104bから第1のプロセッサ101aの識別情報213を読み出してエラープロセッサ制御部207に出力し、エラープロセッサ制御部207が第1のプロセッサ101aの識別情報213をトランザクション制御部204に出力する。
次に、ステップS403では、第2のシステムコントローラ102bは、第1のプロセッサ101aの識別情報213に応じて、第2のプロセッサ101bを介して、第1のプロセッサ101aにエラーを通知する。具体的には、第2のシステムコントローラ102bは、第1のプロセッサ101a及び第2のプロセッサ101bを介して、第1のプロセッサ101aのキャッシュメモリ222のそのデータの無効化要求とエラー情報とを第1のシステムコントローラ102aに出力する。なお、第2のシステムコントローラ102bは、そのデータの無効化要求をすべてのプロセッサ101a〜101cに出力してもよい。第1のシステムコントローラ102aのキャッシュコヒーレンス制御部206は、無効化要求に応じて、第1のプロセッサ101aのキャッシュメモリ222のそのデータが無効状態であることを記憶する。第2のシステムコントローラ102bは、上記のアドレスのデータがすべてのプロセッサ101a〜101cのキャッシュメモリ222に存在しないことを示すディレクトリ情報211を第2のディレクトリメモリ104bに書き込む。
次に、ステップS314では、第2のシステムコントローラ102bは、リカバリ要求に応じて、第2のディレクトリメモリ104bに対して、上記のアドレスに対するエラー情報212をクリアする。
次に、ステップS404では、第1のプロセッサ101aは、エラーの通知に応じて、ステップS309のデータ転送に失敗したことを認識する。
次に、ステップS405では、第1のプロセッサ101aは、割り込みの設定又はレジスタに値をセットして、ソフトウェアがエラー発生を認識できるようにする。
次に、ステップS406では、第1のプロセッサ101aは、ソフトウェア処理により、割り込み又はレジスタの値に応じたエラーのリカバリ処理を行う。例えば、情報処理装置は、リカバリ処理として、上記のステップS308からの処理をリトライする。また、情報処理装置は、リカバリ処理として、上記のステップS308の要求を無効にし、以降では第1のプロセッサ101aが存在しないものとして処理を続行してもよい。これにより、情報処理装置は、正常終了することができる。
図5(A)は、図4のステップS322内の第3のプロセッサ101cの処理を示すフローチャートである。ステップS501では、第3のプロセッサ101cは、第2のプロセッサ101bを介して、第2のシステムコントローラ102bに対して、第2のメインメモリ103bのアドレスのデータの第1の読み出し要求を出力する。第2のシステムコントローラ102bは、第1の読み出し要求を入力すると、レジスタ情報211を参照し、そのアドレスのデータをキャッシュメモリ222に記憶している第1のプロセッサ101aにデータの返送要求を出力する。第1のプロセッサ101aは、その返送要求に応じて、キャッシュメモリ222のデータを第2のプロセッサ101bを介して第2のシステムコントローラ102bに出力する。
次に、ステップS502では、第3のプロセッサ101cは、エラー通知を受信するまで待機し、エラー通知を受信した場合には、ステップS503に処理を進める。
ステップS503では、第3のプロセッサ101cは、ソフトウェア処理により、第2のプロセッサ101bを介して、リカバリ要求を第2のシステムコントローラ102bに出力する。
図5(B)は、図4のステップS322内の第2のプロセッサ101b及び第2のシステムコントローラ102bの処理を示すフローチャートである。ステップS511では、エラープロセッサ検出部203は、エラー検出部202がエラーを検出した場合には、ディレクトリ情報211を基に、エラー対象のアドレスのデータを排他状態で記憶するキャッシュメモリ222を有する第1のプロセッサ101aの識別情報213をディレクトリ制御部208に通知する。
次に、ステップS512では、ディレクトリ制御部208は、第2のディレクトリメモリ104bに対して、エラー対象のアドレスに対するエラー情報212及び通知された第1のプロセッサ101aの識別情報213を書き込む。そして、第2のシステムコントローラ102bは、第2のプロセッサ101bを介して、エラー通知を第3のプロセッサ101cに出力する。
次に、ステップS513では、第2のシステムコントローラ102bは、リカバリ要求を受信するまで待機し、リカバリ要求を受信した場合には、ステップS514に処理を進める。
ステップS514では、ディレクトリ制御部208は、エラー情報211に対応した第1のプロセッサ101aの識別情報213を読み出してエラープロセッサ制御部207に出力する。エラープロセッサ制御部207は、入力した第1のプロセッサ101aの識別情報213をトランザクション制御部204に出力する。
次に、ステップS515では、トランザクション制御部204は、第2のプロセッサ101bを介して、入力した識別情報213が示す第1のプロセッサ101aに、転送失敗を示すエラーを通知する。
次に、ステップS516では、ディレクトリ制御部208は、第2のディレクトリメモリ104bのエラー情報212をクリアする。
図5(C)は、図4のステップS322内の第1のプロセッサ101aの処理を示すフローチャートである。ステップS521では、第1のプロセッサ101aは、転送失敗を示すエラー通知を受信するまで待機し、エラー通知を受信した場合には、ステップS522に処理を進める。
ステップS522では、第1のプロセッサ101aは、割り込みを設定又はレジスタに値をセットして、ソフトウェアが転送失敗のエラー発生を認識できるようにする。
次に、ステップS523では、第1のプロセッサ101aは、ソフトウェア処理により、割り込み又はレジスタの値に応じたエラーのリカバリ処理を行う。これにより、情報処理装置は、正常終了することができる。
本実施形態によれば、第1のプロセッサ101aから第2のプロセッサ101bへのデータ転送が失敗し、書き換えたデータを第2のメインメモリ103bにライトバックできない場合に、第1のプロセッサ101aがエラー通知を受信することができる。これにより、第1のプロセッサ101aは、ライトバックに失敗したことを認識することができ、情報処理装置は、失敗した処理のやり直しや第1のプロセッサ101aの無効化など、プロセッサ間のデータ整合性を保った状態で適切に処理を継続することができる。
なお、情報処理装置は、ソフトウェア処理によりリカバリ処理を実施してもよいし、ハードウェア処理によりリカバリ処理を実施してもよい。第1のプロセッサ101aから第2のプロセッサ101bへの転送データが消失して、エラー情報212と排他状態のデータを持つ第1のプロセッサ101aの識別情報213が第2のディレクトリメモリ104bに書き込まれる。第2のシステムコントローラ102bは、エラーを検出した時点で、リカバリ処理を自動的に実施し、他のプロセッサ101a及び101cにキャッシュメモリ222の無効化要求を出力し、排他状態のデータを持つ第1のプロセッサ101aに対しては、エラー通知もあわせて出力する。これにより、第1のプロセッサ101aは、即座にデータのライトバックに失敗したことを認識することが可能になる。ただし、この場合においても、第1のプロセッサ101aは、データ転送に失敗したことを認識した後のリカバリ処理をソフトウェア処理により行う。
また、上記では、第2のシステムコントローラ102bは、排他状態のデータを持つ第1のプロセッサ101aの識別情報213を第2のディレクトリメモリ104bに書き込んだが、これに限定されない。第2のシステムコントローラ102bは、第2のシステムコントローラ102bの内部のレジスタなどに識別情報213を書き込み、リカバリ処理の際に識別情報213を読み出し、キャッシュメモリ222の無効化要求とあわせてエラー通知を出力してもよい。
また、上記では、第2のシステムコントローラ102bは、第1のプロセッサ101aに対して、エラー通知をキャッシュメモリ222の無効化要求と共に出力したが、これに限定されない。第2のシステムコントローラ102bは、他のプロセッサ101a及び101cにエラー通知専用の信号線を用意し、エラープロセッサ制御部207が他のプロセッサ101a又は101cに対し、信号線経由でエラー通知を出力してもよい。
また、図2では、第2のメインメモリ103bとは別に第2のディレクトリメモリ104bを設ける例を示したが、第2のディレクトリメモリ104bを第2のメインメモリ103bに統合してもよい。その場合、第2のメインメモリ103bは、各アドレスに対して、データの他に、ディレクトリ情報211、エラー情報212及びプロセッサ識別情報213を記憶する。この場合、第2のディレクトリメモリ104bは、不要となる。同様に、メインメモリ103a及び103cにディレクトリメモリ104a及び104cをそれぞれ統合してもよい。
また、第1のプロセッサ101a、第2のプロセッサ101b及び第3のプロセッサ101cは、別々の装置に限定されない。第2のプロセッサ101bと、第3のプロセッサ101cとは、同一のプロセッサであってもよい。つまり、第2のメインメモリ103bのデータを第1のプロセッサ101aが読み出して値を修正し、そのデータが第1のプロセッサ101a内で排他状態となっている状態で、第2のプロセッサ101bがこのデータを要求する場合にも、上記実施形態を適用可能である。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。