(57)【特許請求の範囲】
【請求項１】
命令の実行に用いるデータを保持する第１レジスタ部と、
前記第１レジスタ部が保持するデータの一部を保持する第２レジスタ部と、
前記第２レジスタ部が保持したデータを用いて演算を実行する演算部と、
前記第１レジスタ部が前記第２レジスタ部に転送するデータのエラーを検出する第１エラー検出部と、
前記第２レジスタ部が前記演算部に転送するデータのエラーを検出する第２エラー検出部と、
前記第１エラー検出部がデータのエラーを検出した場合、前記第１エラー検出部で検出されたエラーデータが前記演算部に伝達される前に、前記第２エラー検出部でエラーと判定されないダミーデータに前記エラーデータを置き換える置換部と、
前記第１エラー検出部または前記第２エラー検出部がデータのエラーを検出した場合、命令の実行を中断する制御部と、
前記第１エラー検出部がデータのエラーを検出した場合、前記第１レジスタ部が保持したデータのエラーを訂正するエラー訂正部と、
を有することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記置換部は、前記第１レジスタ部から出力された前記エラーデータを前記ダミーデータに置き換えて前記第２レジスタ部に転送することを特徴とする演算処理装置。
【請求項３】
請求項１に記載の演算処理装置において、
前記置換部は、前記第２レジスタ部から出力された前記エラーデータを前記ダミーデータに置き換えて前記演算部に転送することを特徴とする演算処理装置。
【請求項４】
請求項１ないし請求項３のいずれか１項に記載の演算処理装置において、
前記制御部は、前記エラー訂正部が前記第１レジスタ部に保持されたデータのエラーを訂正した後に、中断した命令を再実行させることを特徴とする演算処理装置。
【請求項５】
請求項１ないし請求項４のいずれか１項に記載の演算処理装置において、
前記制御部は、前記第１エラー検出部がデータのエラーを検出した場合、前記演算部による演算を停止させることで命令の実行を中断することを特徴とする演算処理装置。
【請求項６】
請求項１ないし請求項５のいずれか１項に記載の演算処理装置において、
前記制御部は、前記第１エラー検出部がデータのエラーを検出した場合、前記演算部による演算の結果を前記第２レジスタ部に書き込むコミットを停止して命令の実行を中断することを特徴とする演算処理装置。
【請求項７】
命令の実行に用いるデータを保持する第１レジスタ部と、前記第１レジスタ部が保持するデータの一部を保持する第２レジスタ部と、前記第２レジスタ部が保持したデータを用いて演算を実行する演算部とを有する演算処理装置の制御方法において、
前記演算処理装置が有する第１エラー検出部が、前記第１レジスタ部が前記第２レジスタ部に転送するデータのエラーを検出し、
前記演算処理装置が有する第２エラー検出部が、前記第２レジスタ部が前記演算部に転送するデータのエラーを検出し、
前記演算処理装置が有する置換部が、前記第１エラー検出部がデータのエラーを検出した場合、前記第１エラー検出部で検出されたエラーデータが前記演算部に伝達される前に、前記第２エラー検出部でエラーと判定されないダミーデータに前記エラーデータを置き換え、
前記演算処理装置が有する制御部が、前記第１エラー検出部または前記第２エラー検出部がデータのエラーを検出した場合、命令の実行を中断し、
前記演算処理装置が有するエラー訂正部が、前記第１エラー検出部がデータのエラーを検出した場合、前記第１レジスタ部が保持したデータのエラーを訂正する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）等の演算処理装置は、主記憶装置に記憶されたデータの一部を保持するキャッシュメモリと、命令を実行する実行部と、実行部等を制御する制御部とを有する。実行部は、例えば、キャッシュメモリに保持されるデータの一部を保持する第１レジスタファイルと、第１レジスタファイルに保持されるデータの一部をさらに保持する第２レジスタファイルと、命令に基づく演算を実行する演算部とを有する。演算部は、第２レジスタファイルから転送されるデータを用いて演算を実行する。
【０００３】
なお、第１レジスタファイル等のレジスタファイルに保持されたデータにエラーが発生する場合がある。このため、エラーを検出するためのパリティデータとエラーを訂正するためのＥＣＣ（Error Checking and Correction）データとを付加したデータをレジスタファイルに保持させる演算処理装置が提案されている（例えば、特許文献１参照）。この種の演算処理装置は、エラーの発生を検出するエラー検出部と、エラーを訂正するエラー訂正を実行するエラー訂正部とを有する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】再表２００８／１５２７２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
命令を複数のステージに分けて実行するパイプライン処理では、第１命令に後続する第２命令の演算に使用する入力データが保持されたレジスタ（例えば、第１レジスタファイルが有するレジスタ）に第１命令の演算結果が書き戻される場合がある。この場合、第２レジスタファイルから演算部へのデータ転送時にエラーの判定処理を実行する演算処理装置では、エラーを含むデータを訂正して命令を再実行することが困難になる場合がある。例えば、第１命令を完了させるコミットの停止が間に合わない場合、第２命令の入力データ（エラーを含むデータ）を保持したレジスタに第１命令のコミットによる演算結果が上書きされ、入力データのエラーを訂正して第２命令を再実行することが困難になる。
【０００６】
また、第１命令が１つの命令を複数のフローに分けたマルチフロー命令である場合、第１命令の１つ目のフローのコミットの停止が間に合わないと、入力データのエラーを訂正して第２命令を再実行することが困難になる。例えば、第１命令の１つ目以降のフローのコミットが終了したため、第１命令が再実行されない場合、第１命令に後続する第２命令は、再実行されない。
【０００７】
命令が再実行されない状態では、演算部等の機能が停止するため、命令が再実行される場合に比べて、演算処理装置の性能は低下する。
【０００８】
１つの側面では、本件開示の演算処理装置および演算処理装置の制御方法は、演算処理装置の性能が低下することを抑制することを目的とする。
【課題を解決するための手段】
【０００９】
一観点によれば、演算処理装置は、命令の実行に用いるデータを保持する第１レジスタ部と、第１レジスタ部が保持するデータの一部を保持する第２レジスタ部と、第２レジスタ部が保持したデータを用いて演算を実行する演算部と、第１レジスタ部が第２レジスタ部に転送するデータのエラーを検出する第１エラー検出部と、第２レジスタ部が演算部に転送するデータのエラーを検出する第２エラー検出部と、第１エラー検出部がデータのエラーを検出した場合、第１エラー検出部で検出されたエラーデータが演算部に伝達される前に、第２エラー検出部でエラーと判定されないダミーデータにエラーデータを置き換える置換部と、第１エラー検出部または第２エラー検出部がデータのエラーを検出した場合、命令の実行を中断する制御部と、第１エラー検出部がデータのエラーを検出した場合、第１レジスタ部が保持したデータのエラーを訂正するエラー訂正部とを有する。
【００１０】
別の観点によれば、命令の実行に用いるデータを保持する第１レジスタ部と、第１レジスタ部が保持するデータの一部を保持する第２レジスタ部と、第２レジスタ部が保持したデータを用いて演算を実行する演算部とを有する演算処理装置の制御方法では、演算処理装置が有する第１エラー検出部が、第１レジスタ部が第２レジスタ部に転送するデータのエラーを検出し、演算処理装置が有する第２エラー検出部が、第２レジスタ部が演算部に転送するデータのエラーを検出し、演算処理装置が有する置換部が、第１エラー検出部がデータのエラーを検出した場合、第１エラー検出部で検出されたエラーデータが演算部に伝達される前に、第２エラー検出部でエラーと判定されないダミーデータにエラーデータを置き換え、演算処理装置が有する制御部が、第１エラー検出部または第２エラー検出部がデータのエラーを検出した場合、命令の実行を中断し、演算処理装置が有するエラー訂正部が、第１エラー検出部がデータのエラーを検出した場合、第１レジスタ部が保持したデータのエラーを訂正する。
【発明の効果】
【００１１】
本件開示の演算処理装置および演算処理装置の制御方法は、演算処理装置の性能が低下することを抑制できる。
【図面の簡単な説明】
【００１２】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図３】図２に示したマスタレジスタおよびワークレジスタの一例を示す図である。
【図４】図２に示したレジスタファイルおよび制御部の一例を示す図である。
【図５】ＳＡＶＥ命令実行時の演算処理装置の動作の一例を示す図である。
【図６】エラー訂正時の演算処理装置の動作の一例を示す図である。
【図７】図２に示した演算処理装置の動作の一例を示す図である。
【図８】図２に示した演算処理装置のパイプライン処理の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、実施形態について、図面を用いて説明する。
【００１４】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。図１に示す太線の矢印は、データの流れを示す。図１に示す演算処理装置１０は、例えば、命令を実行するＣＰＵ等のプロセッサである。演算処理装置１０は、第１レジスタ部１１、第２レジスタ部１２、演算部１３、エラー検出部１４、制御部１５およびエラー訂正部１６を有する。
【００１５】
第１レジスタ部１１は、エラーを検出するためのパリティデータとエラーを訂正するためのＥＣＣデータとが付加されたデータを保持する。例えば、第１レジスタ部１１は、図示しないキャッシュメモリ等に保持されるデータの一部を保持する。そして、第１レジスタ部１１は、保持したデータの一部であるデータＤ１を、制御部１５からの指示に基づいて、第２レジスタ部１２およびエラー検出部１４に出力する。また、第１レジスタ部１１は、制御部１５からの指示に基づいて、第２レジスタ部１２から書き戻されるデータを保持する。
【００１６】
エラー検出部１４は、第１レジスタ部１１が第２レジスタ部１２に転送するデータのエラーを検出する第１エラー検出部の一例である。例えば、エラー検出部１４は、第１レジスタ部１１から第２レジスタ部１２にデータＤ１が転送される際に、データＤ１を第１レジスタ部１１から受ける。そして、エラー検出部１４は、データＤ１に含まれるパリティデータ等を用いて、データＤ１にエラーが含まれるか否かを判定し、判定結果を制御部１５に出力する。
【００１７】
このように、エラー検出部１４は、第２レジスタ部１２から演算部１３にデータが転送されるタイミングより早いタイミングで、データＤ１にエラーが含まれているか否かを検出する。
【００１８】
第２レジスタ部１２は、第１レジスタ部１１に保持されるデータの一部であるデータＤ１を保持する。そして、第２レジスタ部１２は、演算部１３が使用するデータを、演算部１３に出力する。また、第２レジスタ部１２は、図示しないアップデートバッファ等を介して演算部１３から受けた演算結果（演算部１３による演算の結果）を保持する。
【００１９】
さらに、第２レジスタ部１２は、エラー検出部１４がデータＤ１のエラーを検出した場合（すなわち、エラー検出部１４がデータＤ１にエラーが有ることを検出した場合）、エラーを含むデータＤ１ｅをエラー訂正部１６に出力する。そして、第２レジスタ部１２は、データＤ１ｅのエラーが訂正されたデータＤ１ｃをエラー訂正部１６から受け、データＤ１ｃを第１レジスタ部１１に出力する。以下、エラーを含むデータＤ１ｅは、エラーデータＤ１ｅとも称される。また、データＤ１にエラーが含まれる場合、データＤ１は、エラーデータＤ１とも称される。
【００２０】
演算部１３は、第２レジスタ部１２に保持されたデータを用いて演算を実行する。また、演算部１３は、エラー検出部１４がデータＤ１のエラーを検出した場合、制御部１５からの指示に基づいて、演算を停止する。
【００２１】
制御部１５は、第１レジスタ部１１、第２レジスタ部１２、演算部１３およびエラー訂正部１６の動作を制御し、命令に基づく演算を演算部１３に実行させる。また、制御部１５は、エラー検出部１４がデータＤ１のエラーを検出した場合、命令の実行を中断する制御を実行する。例えば、制御部１５は、データＤ１にエラーが含まれることを示す情報をエラー検出部１４から受けた場合、命令を完了させるコミットを停止するとともに、演算部１３による演算を停止させる。さらに、制御部１５は、エラーを含むデータＤ１ｅを第１レジスタ部１１から第２レジスタ部１２を介してエラー訂正部１６に転送する。
【００２２】
なお、実行中の命令が１つの命令を複数のフローに分けたマルチフロー命令である場合、制御部１５は、例えば、演算部１３による演算の結果を第２レジスタ部１２に書き込むコミットを停止する。
【００２３】
エラー訂正部１６は、第１レジスタ部１１から第２レジスタ部１２に転送されたエラーデータＤ１ｅを第２レジスタ部１２から読み出し、読み出したエラーデータＤ１ｅのエラーをＥＣＣデータ等を用いて訂正する。そして、エラー訂正部１６は、エラーデータＤ１ｅのエラーを訂正したデータＤ１ｃを第２レジスタ部１２に書き戻す。第２レジスタ部１２は、データＤ１ｃを第１レジスタ部１１に書き戻す。すなわち、エラー訂正部１６は、エラー検出部１４がデータＤ１のエラーを検出した場合、第１レジスタ部１１に保持されたデータのエラーを訂正する。これにより、演算処理装置１０は、エラーを訂正したデータを用いて命令を再実行できる。
【００２４】
ここで、第２レジスタ部１２から演算部１３へのデータ転送時にエラーを検出する演算処理装置では、コミットの停止が間に合わない場合がある。コミットの停止が間に合わない場合、例えば、コミットの停止が間に合わなかった命令の実行結果が第１レジスタ部１１に書き戻される。この場合、第１レジスタ部１１がエラーデータ（エラーが検出されたデータ）を出力したときの状態と異なる状態に更新されるため、第１レジスタ部１１の状態をエラーデータを出力したときの状態に再現することが困難になる。このため、第１レジスタ部１１に保持されたデータのエラーを訂正して命令を再実行することが困難になる。命令が再実行されない状態では、演算部１３等の機能が停止するため、命令が再実行される場合に比べて、演算処理装置の性能は低下する。
【００２５】
これに対し、演算処理装置１０は、第２レジスタ部１２から演算部１３にデータが転送されるタイミングより早いタイミングで、データＤ１にエラーが含まれているか否かを検出する。このため、第２レジスタ部１２から演算部１３へのデータ転送時にエラーを検出する手法に比べて、コミットの停止が間に合わなくなる頻度を低減することができる。
【００２６】
コミットの停止が間に合わなくなる頻度が低減するほど、第１レジスタ部１１がエラーを含むデータＤ１（エラーデータＤ１）を出力したときの状態と異なる状態に更新される頻度（命令が再実行されない状態になる頻度）は、低減する。例えば、第１レジスタ部１１の状態がエラーデータＤ１を出力したときの状態に維持される場合、演算処理装置１０は、第１レジスタ部１１に保持されたデータのエラーを訂正して命令を再実行できる。
【００２７】
このように、第２レジスタ部１２から演算部１３へのデータ転送時にエラーを検出する手法に比べて、第１レジスタ部１１に発生したエラーを確実に訂正でき、命令が再実行されない状態になる頻度を低減できる。例えば、第１レジスタ部１１が宇宙線等のノイズを受けたことにより、データ化けが発生した場合でも、第１レジスタ部１１に発生したエラーを訂正して命令を再実行することができる。
【００２８】
なお、演算処理装置１０の構成は、図１に示す例に限定されない。例えば、エラー訂正部１６は、エラーデータＤ１ｅのエラーを訂正する場合、第２レジスタ部１２を介さずに第１レジスタ部１１からエラーデータＤ１ｅを読み出してもよい。また、エラー訂正部１６は、エラーデータＤ１ｅのエラーを訂正したデータＤ１ｃを、第２レジスタ部１２を介さずに第１レジスタ部１１に書き戻してもよい。
【００２９】
以上、図１に示す実施形態では、エラー検出部１４は、第１レジスタ部１１から第２レジスタ部１２へのデータ転送時に、データＤ１にエラーが含まれているか否かを検出する。そして、制御部１５は、エラー検出部１４がデータＤ１にエラーが有ることを検出したことに基づいて、命令を中断する。これにより、演算処理装置１０は、第２レジスタ部１２から演算部１３へのデータ転送時にエラーを検出する手法に比べて、命令の中断（コミットの停止）が間に合わなくなる頻度を低減でき、命令が再実行されない状態になる頻度を低減できる。この結果、演算処理装置１０の性能が低下することを抑制できる。
【００３０】
図２は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図２に示す演算処理装置１００は、例えば、１つの命令を複数のフローに分けたマルチフロー命令を実行するＣＰＵ等のプロセッサである。演算処理装置１００は、主記憶装置７００に接続される。例えば、演算処理装置１００および主記憶装置７００は、情報処理装置１０００に搭載される。
【００３１】
演算処理装置１００は、記憶部２００、制御部３００および実行部４００を有する。記憶部２００は、主記憶装置７００に記憶されるデータの一部（例えば、実行部４００で扱うデータ）を保持するデータキャッシュ２１０等を有する。例えば、データキャッシュ２１０は、キャッシュメモリである。
【００３２】
制御部３００は、記憶部２００および実行部４００の動作を制御し、命令を実行する制御、命令を中断する制御、命令を再実行する制御等を実行する。制御部３００の詳細は、図４で説明する。
【００３３】
実行部４００は、レジスタファイル５００および演算部６００を有する。レジスタファイル５００は、データキャッシュ２１０に保持されるデータの一部を保持するマスタレジスタ５１０、演算部６００で使用されるデータを保持するワークレジスタ５２０等を有する。マスタレジスタ５１０は、命令の実行に用いるデータを保持する第１レジスタ部の一例であり、ワークレジスタ５２０は、第１レジスタ部（例えば、マスタレジスタ５１０）が保持するデータの一部を保持する第２レジスタ部の一例である。マスタレジスタ５１０およびワークレジスタ５２０の詳細は、図３で説明する。また、レジスタファイル５００の詳細は、図４で説明する。
【００３４】
演算部６００は、ワークレジスタ５２０が保持したデータを用いて演算を実行し、演算結果をレジスタファイル６００に転送する。また、演算部６００は、マスタレジスタ５１００等に保持されたデータにエラーが検出された場合、制御部３００からの指示に基づいて、演算を停止する。なお、演算処理装置１００の構成は、図２に示す例に限定されない。
【００３５】
図３は、図２に示したマスタレジスタ５１０およびワークレジスタ５２０の一例を示す。マスタレジスタ５１０は、８個のウィンドウＷ（Ｗ０−Ｗ７）を有するレジスタ群である。各ウィンドウＷは、出力用のレジスタＯＵＴと、ローカルに使用されるレジスタＬＯＣＡＬと、入力用のレジスタＩＮとを有する。以下、レジスタＯＵＴ、ＬＯＣＡＬ、ＩＮは、それぞれ、ＯＵＴレジスタ、ＬＯＣＡＬレジスタおよびＩＮレジスタとも称される。各レジスタＯＵＴ、ＬＯＣＡＬ、ＩＮは、図中の括弧内に示すように、パリティデータとＥＣＣデータとが付加されたデータを保持する８個のレジスタを有する。
【００３６】
なお、マスタレジスタ５１０内のウィンドウＷにはそれぞれ番号が割り当てられる。符号Ｗの末尾の数字は、ウィンドウＷに割り当てられた番号に対応する。各ウィンドウＷのＯＵＴレジスタは、１つ隣のウィンドウＷのＩＮレジスタと同一のものを使用する。例えば、ウィンドウＷ０のＯＵＴレジスタとウィンドウＷ１のＩＮレジスタは、互いに同じレジスタを使用する。また、ウィンドウＷ７のＯＵＴレジスタとウィンドウＷ０のＩＮレジスタは、互いに同じレジスタを使用する。
【００３７】
２つのウィンドウＷの一方のウィンドウＷのＯＵＴレジスタと他方のウィンドウＷのＩＮレジスタとでレジスタを共有することにより、８個のウィンドウＷは、数珠繋ぎされる。
【００３８】
ワークレジスタ５２０は、例えば、演算部６００との間でデータを出し入れする際に使用するカレントウィンドウＷ（例えば、ウィンドウＷｎ）と、ウィンドウＷを入れ替える際に使用する次のウィンドウＷ（例えば、ウィンドウＷｎ＋１）とを有する。ウィンドウＷｎのＯＵＴレジスタとウィンドウＷｎ＋１のＩＮレジスタとが互いに同じレジスタ群（８個のレジスタ）を使用するため、ワークレジスタ５２０は、１つのＯＵＴレジスタと、２つのＬＯＣＡＬレジスタと、２つのＩＮレジスタとを有する。
【００３９】
例えば、現在使用しているカレントウィンドウＷは、ウィンドウポインタにより指定される。マスタレジスタ５１０は、ウィンドウポインタが切り替えられると、切り替え後のウィンドウポインタにより指定されるウィンドウＷを、ワークレジスタ５２０に転送する。なお、ウィンドウＷの転送は、ウィンドウＷが保持するデータの転送を意味する。以下、データの転送を説明する場合等では、ウィンドウＷ（またはレジスタ）に保持されたデータは、単に、ウィンドウＷ（またはレジスタ）とも称される。マスタレジスタ５１０に比べて小規模なレジスタ群であるワークレジスタ５２０を中継して演算部６００にデータを転送することにより、レジスタの選択にかかる時間（遅延時間）を短縮することができる。
【００４０】
ここで、ウィンドウＷを入れ替える命令は、例えば、ＳＡＶＥ命令、ＲＥＳＴＯＲＥ命令等である。例えば、カレントウィンドウＷがｎ番（ｎは、０以上７以下の整数）のウィンドウＷｎの場合、ＳＡＶＥ命令の実行により、ｎ＋１番のウィンドウＷｎ＋１がマスタレジスタ５１０からワークレジスタ５２０に転送される。また、カレントウィンドウＷがｎ番のウィンドウＷｎの場合、ＲＥＳＴＯＲＥ命令の実行により、ｎ−１番のウィンドウＷｎ−１がマスタレジスタ５１０からワークレジスタ５２０に転送される。なお、ｎが７の場合、ｎ＋１番のウィンドウＷｎ＋１は、０番のウィンドウＷ０であり、ｎが０の場合、ｎ−１番のウィンドウＷｎ−１は、７番のウィンドウＷ７である。
【００４１】
ＳＡＶＥ命令が実行されたときの演算処理装置１００の動作は、図５等で説明する。ＲＥＳＴＯＲＥ命令が実行されたときの演算処理装置１００の動作は、転送されるウィンドウＷを除いて、ＳＡＶＥ命令が実行されたときの演算処理装置１００の動作と同一または同様である。
【００４２】
なお、マスタレジスタ５１０およびワークレジスタ５２０の構成は、図３に示す例に限定されない。例えば、マスタレジスタ５１０内のウィンドウＷの数は、８個に限定されない。また、例えば、ＯＵＴレジスタ、ＬＯＣＡＬレジスタおよびＩＮレジスタのそれぞれが有するレジスタの数は、８個に限定されない。
【００４３】
図４は、図２に示したレジスタファイル５００および制御部３００の一例を示す。図４に示す太線の矢印は、データの流れを示す。なお、図４では、データ等の流れを分かりやすくするために、演算部６００も記載している。
【００４４】
レジスタファイル５００は、マスタレジスタ５１０、ワークレジスタ５２０、エラー検出部５３０、５３２、エラー訂正部５４０、論理積回路５５０、アップデートバッファ５６０およびバッファ５７０、５７２、５７４、５７６、５７８を有する。また、制御部３００は、レジスタ制御部３１０、エラー伝搬抑止部３２０、コミット停止部３３０、訂正制御部３４０、リトライ制御部３５０および演算中止部３６０を有する。
【００４５】
マスタレジスタ５１０は、例えば、レジスタ制御部３１０により制御されるウィンドウポインタで指定されたウィンドウＷが保持するデータを、バッファ５７２に出力する。また、マスタレジスタ５１０は、ウィンドウポインタの切り替えにより書き戻されるデータを、ワークレジスタ５２０からバッファ５７０を介して受ける。
【００４６】
ワークレジスタ５２０は、マスタレジスタ５１０から出力されたデータ（ウィンドウポインタで指定されたウィンドウＷに保持されたデータ）を、バッファ５７２から論理積回路５５０を介して受け、受けたデータを保持する。これにより、ワークレジスタ５２０内のカレントウィンドウＷは、ウィンドウポインタで指定されたウィンドウＷに切り替わる。なお、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出した場合、ワークレジスタ５２０は、論理積回路５５０から受けたダミーデータ（例えば、全て０のデータ）を、カレントウィンドウＷのデータとして保持する。
【００４７】
また、ワークレジスタ５２０は、演算部６００が使用するデータを、バッファ５７４に出力する。そして、ワークレジスタ５２０は、演算部６００の演算結果を、バッファ５７６、アップデートバッファ５６０およびバッファ５７８を介して受ける。なお、例えば、コミット停止部３３０がコミットを停止する制御を実行した場合、アップデートバッファ５６０からワークレジスタ５２０へのデータの書き込みは、実行されない。
【００４８】
また、ワークレジスタ５２０は、エラー訂正部５４０がエラーデータのエラー訂正を実行する場合、エラーデータをエラー訂正部５４０に出力し、エラーが訂正されたデータをエラー訂正部５４０から受ける。そして、ワークレジスタ５２０は、エラーが訂正されたデータをバッファ５７０を介してマスタレジスタ５１０に転送する。
【００４９】
エラー検出部５３０は、第１レジスタ部（例えば、マスタレジスタ５１０）が第２レジスタ部（例えば、ワークレジスタ５２０）に転送するデータのエラーを検出する第１エラー検出部の一例である。例えば、エラー検出部５３０は、マスタレジスタ５１０から出力されたデータ（ウィンドウポインタで指定されたウィンドウＷに保持されたデータ）を、バッファ５７２から受ける。そして、エラー検出部５３０は、データに含まれるパリティデータ等を用いて、データにエラーが含まれるか否かを判定し、判定結果を、エラー伝搬抑止部３２０、コミット停止部３３０およびリトライ制御部３５０に出力する。
【００５０】
エラー検出部５３２は、第２レジスタ部（例えば、ワークレジスタ５２０）が演算部６００に転送するデータのエラーを検出する第２エラー検出部の一例である。例えば、エラー検出部５３２は、ワークレジスタ５２０から出力されたデータを、バッファ５７４から受ける。そして、エラー検出部５３２は、データに含まれるパリティデータ等を用いて、データにエラーが含まれるか否かを判定し、判定結果をリトライ制御部３５０に出力する。このように、演算処理装置１００では、ワークレジスタ５２０等で発生したエラーをエラー検出部５３２で検出することができる。
【００５１】
エラー訂正部５４０は、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出した場合、訂正制御部３４０からの指示に基づいて、エラー訂正を実行する。例えば、エラー訂正部５４０は、マスタレジスタ５１０に保持されたデータをワークレジスタ５２０を介して受け、受けたデータのエラーをＥＣＣデータ等を用いて訂正する。そして、エラー訂正部５４０は、エラー訂正を実行したデータを、ワークレジスタ５２０を介してマスタレジスタ５１０に転送する。これにより、マスタレジスタ５１０に保持されたデータのエラーは訂正される。
【００５２】
論理積回路５５０は、第２エラー検出部（例えば、エラー検出部５３２）でエラーと判定されないダミーデータにエラーデータを置き換える置換部の一例である。論理積回路５５０は、バッファ５７２から受けるデータとエラー伝搬抑止部３２０から受けるデータとの論理積結果を、ワークレジスタ５２０に出力する。
【００５３】
例えば、論理積回路５５０は、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出した場合、データの全てのビットが０であるダミーデータをエラー伝搬抑止部３２０から受ける。したがって、論理積回路５５０は、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出した場合、全てのビットが０であるダミーデータをワークレジスタ５２０に出力する。
【００５４】
また、例えば、論理積回路５５０は、マスタレジスタ５１０が出力したデータにエラーが含まれていないとエラー検出部５３０が判定した場合、全てのビットが１のデータをエラー伝搬抑止部３２０から受ける。したがって、論理積回路５５０は、マスタレジスタ５１０が出力したデータにエラーが含まれていない場合、マスタレジスタ５１０が出力したデータをワークレジスタ５２０に転送する。
【００５５】
アップデートバッファ５６０は、マスタレジスタ５１０やワークレジスタ５２０へのコミットの整理のために用いられるレジスタ群であり、演算結果等を保持する。例えば、アップデートバッファ５６０は、演算結果をバッファ５７６を介して演算部６００から受ける。そして、アップデートバッファ５６０は、演算結果をバッファ５７８を介してワークレジスタ５２０に転送する。これにより、演算部６００の演算結果をワークレジスタ５２０に書き込むコミットが終了する。
【００５６】
また、アップデートバッファ５６０は、演算部６００の演算結果をワークレジスタ５２０に格納する前に入力データとして演算部６００にバイパスするバイパス処理が実行される場合、演算結果をバッファ５７４を介して演算部６００に転送する。
【００５７】
レジスタ制御部３１０は、ウィンドウポインタ等を用いて、マスタレジスタ５１０からのデータ転送およびマスタレジスタ５１０へのデータの書き戻し等を制御する。
【００５８】
エラー伝搬抑止部３２０は、マスタレジスタ５１０で発生したエラーが演算部６００等に伝搬することを抑止する。例えば、エラー伝搬抑止部３２０は、エラー検出部５３０から受けた判定結果がデータにエラーが含まれることを示す場合、全てのビットが０のダミーデータを論理積回路５５０に出力する。なお、エラー伝搬抑止部３２０は、エラー検出部５３０から受けた判定結果がデータにエラーが含まれないことを示す場合、全てのビットが１のデータを論理積回路５５０に出力する。
【００５９】
コミット停止部３３０は、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出した場合、演算部６００の演算結果をワークレジスタ５２０に書き込むコミットを停止して命令の実行を中断する。例えば、コミット停止部３３０は、エラー検出部５３０から受けた判定結果がデータにエラーが含まれることを示す場合、演算部６００の演算結果をワークレジスタ５２０に書き込むコミットを停止する制御を、ワークレジスタ５２０等に対して実行する。
【００６０】
このように、コミット停止部３３０は、エラー検出部５３２より早いタイミングでエラー検出を実行するエラー検出部５３０の検出結果に基づいて、コミットを停止する制御を実行する。このため、ワークレジスタ５２０から演算部６００へのデータ転送時にエラーを検出する手法（例えば、エラー検出部５３２の判定結果をコミットの停止判定に用いる手法）に比べて、コミットの停止が間に合わなくなる頻度を低減することができる。
【００６１】
訂正制御部３４０は、エラー訂正部５４０によるエラー訂正の実行を、リトライ制御部３５０からの指示に基づいて制御する。
【００６２】
リトライ制御部３５０は、エラー訂正部５４０がマスタレジスタ５１０に保持されたデータのエラーを訂正した後に、中断した命令を再実行させる。例えば、リトライ制御部３５０は、エラー検出部５３０から受けた判定結果がデータにエラーが含まれることを示す場合、演算部６００による演算を停止する制御を、演算中止部３６０に実行させる。これにより、命令の実行は中断する。
【００６３】
また、例えば、リトライ制御部３５０は、エラー検出部５３０から受けた判定結果がデータにエラーが含まれることを示す場合、エラー訂正部５４０にエラー訂正を実行させる制御を、訂正制御部３４０に実行させる。そして、リトライ制御部３５０は、マスタレジスタ５１０に保持されたデータのエラーが訂正された後に、レジスタ制御部３１０等を制御して、中断した命令を再実行させる。
【００６４】
演算中止部３６０は、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出した場合、リトライ制御部３５０からの指示に基づいて、演算部６００による演算を停止させることで命令の実行を中断する。
【００６５】
なお、レジスタファイル５００および制御部３００の構成は、図４に示す例に限定されない。例えば、論理積回路５５０は、ワークレジスタ５２０とバッファ５７４との間に配置されてもよい。この場合、論理積回路５５０は、ワークレジスタ５２０から出力されたエラーデータをダミーデータに置き換えて演算部６００にバッファ５７４を介して転送する。また、エラー検出部５３２は、演算部６００内に設けられてもよい。この場合、論理積回路５５０は、バッファ５７４と演算部６００との間に配置されてもよい。また、演算中止部３６０は、マスタレジスタ５１０が出力したデータにエラーが含まれているか否かの判定結果をエラー検出部５３０から受け、エラー検出部５３０から受けた判定結果に基づいて、演算部６００による演算を停止させる制御を実行してもよい。
【００６６】
図５は、ＳＡＶＥ命令実行時の演算処理装置１００の動作の一例を示す。ＳＡＶＥ命令は、１つの命令を複数のフローに分けて演算を実行するマルチフロー命令の１つである。符号Ｏ、Ｌ、Ｉは、それぞれＯＵＴレジスタ、ＬＯＣＡＬレジスタおよびＩＮレジスタを示している。なお、図５では、図を見やすくするために、図４に示した制御部３００等の記載を省略している。
【００６７】
図５では、ワークレジスタ５２０で使用されているウィンドウＷの番号がｎのとき（カレントウィンドウＷがウィンドウＷｎの場合）に、ＳＡＶＥ命令が発行された場合の演算処理装置１００の動作を説明する。図５の動作では、ｎ＋１番のウィンドウＷｎ＋１に保持されたデータには、エラーは含まれていない。
【００６８】
ＳＡＶＥ命令が発行されると、マスタレジスタ５１０は、ｎ＋１番のウィンドウＷｎ＋１をワークレジスタ５２０に転送する（図５（ａ））。なお、ウィンドウＷｎ＋１のＩＮレジスタは、図３で説明したように、ウィンドウＷｎのＯＵＴレジスタと同じレジスタを使用する。このため、ウィンドウＷｎ＋１のＯＵＴレジスタおよびＬＯＣＡＬレジスタが、マスタレジスタ５１０からワークレジスタ５２０に転送される。
【００６９】
演算部６００は、ｎ番のウィンドウＷｎに保持されたデータαとデータβとを加算し、加算結果γをアップデートバッファ５６０に格納する（図５（ｂ）、（ｃ））。そして、制御部３００は、アップデートバッファ５６０に保持された加算結果γをｎ＋１番のウィンドウＷｎ＋１に書き込むコミットを実行する（図５（ｄ））。
【００７０】
そして、制御部３００は、ｎ番のウィンドウＷｎをワークレジスタ５２０からマスタレジスタ５１０に書き戻すコミットを実行する（図５（ｅ））。このように、ＳＡＶＥ命令は、加算結果γをウィンドウＷｎ＋１に書き込むまでのフロー（以下、フロー１とも称する）と、ウィンドウＷｎをワークレジスタ５２０からマスタレジスタ５１０に書き戻すフロー（以下、フロー２とも称する）とに分けて実行される。
【００７１】
図６は、エラー訂正時の演算処理装置１００の動作の一例を示す。なお、図６では、図を見やすくするために、図４に示した制御部３００、エラー検出部５３０、５３２、論理積回路５５０等の記載を省略している。図６では、図５と同様に、ワークレジスタ５２０で使用されているウィンドウＷの番号がｎのとき（カレントウィンドウＷがウィンドウＷｎの場合）に、ＳＡＶＥ命令が発行された場合の演算処理装置１００の動作を説明する。図５と同一または同様な動作については、詳細な説明を省略する。なお、図６に示した太枠で囲んだＬＯＣＡＬレジスタは、エラーを含むデータを保持していることを示し、網掛けで示したＯＵＴレジスタおよびＬＯＣＡＬレジスタは、ダミーデータを保持していることを示している。
【００７２】
ＳＡＶＥ命令が発行されると、マスタレジスタ５１０は、ｎ＋１番のウィンドウＷｎ＋１をワークレジスタ５２０に転送する。この際、エラー検出部５３０は、マスタレジスタ５１０が出力したデータ（ウィンドウＷｎ＋１に保持されたデータ）のエラーを検出する（図６（ａ））。このため、論理積回路５５０は、マスタレジスタ５１０が出力したデータをダミーデータに置換してワークレジスタ５２０に転送する（図６（ａ））。そして、演算部６００は、ｎ番のウィンドウＷｎに保持されたデータαとデータβとを加算し、加算結果γをアップデートバッファ５６０に格納する（図６（ｂ）、（ｃ））。
【００７３】
そして、ワークレジスタ５２０は、ｎ＋１番のウィンドウＷｎ＋１に保持されたダミーデータを演算部６００等に転送する（図６（ｄ））。ワークレジスタ５２０から出力されたデータがダミーデータであるため、エラー検出部５３２は、データのエラーを検出しない。また、制御部３００は、アップデートバッファ５６０に保持された加算結果γをｎ＋１番のウィンドウＷｎ＋１に書き込むコミットを停止する（図６（ｅ））。さらに、制御部３００は、演算部６００による演算を停止する。これにより、実行中の命令は中断する。
【００７４】
なお、演算部６００に伝達されるデータがダミーデータであるため、エラーの伝搬を抑止することができる。例えば、演算部６００でエラーが検出された場合、命令を再実行できるか否かに拘わらず、リトライ不可能なエラー（命令の再実行ができない状態）と演算部６００が制御部３００等に通知する場合がある。この場合、エラーデータを訂正することにより命令を再実行できる状態でも、命令が再実行されないため、演算処理装置１００の性能は低下する。換言すれば、エラーデータをダミーデータに置き換えることにより、エラーの伝搬を抑止することができ、リトライ不可能なエラーを検出したと演算部６００が制御部３００等に通知することを抑止できる。これにより、エラーデータを訂正して命令を再実行することができ、演算処理装置１００の性能が低下することを抑止できる。
【００７５】
制御部３００は、ｎ番のウィンドウＷｎが正常なデータであるため、命令を中断した後に、ウィンドウＷｎをワークレジスタ５２０からマスタレジスタ５１０に書き戻す（図６（ｆ））。また、制御部３００は、ワークレジスタ５２０のウィンドウＷｎ＋１がダミーデータで上書きされたため、ワークレジスタ５２０のウィンドウＷｎ＋１を破棄する。
【００７６】
そして、マスタレジスタ５１０は、エラー訂正の対象であるｎ＋１番のウィンドウＷｎ＋１を、ワークレジスタ５２０を介してエラー訂正部５４０に転送する（図６（ｇ））。図６に示す例では、ウィンドウＷｎ＋１の全てのレジスタに保持されたデータがエラー訂正部５４０に転送される。エラー訂正部５４０は、マスタレジスタ５１０からワークレジスタ５２０を介して受けたデータのエラーを訂正する（図６（ｈ））。そして、エラー訂正部５４０は、エラーを訂正したデータ（ウィンドウＷｎ＋１）をマスタレジスタ５１０に書き戻す（図６（ｉ））。エラー訂正は、マスタレジスタ５１０に保持されたデータのうちのウィンドウＷｎ＋１のみに対して実行されてもよいし、マスタレジスタ５１０に保持された全てのデータ（全てのウインドウＷ）に対して実行されてもよい。
【００７７】
制御部３００は、エラーデータを訂正した後に、ＳＡＶＥ命令の１フロー目の転送（マスタレジスタ５１０からワークレジスタ５２０へのウィンドウＷｎ＋１の転送）から命令を再開する（図６（ｊ））。なお、ウィンドウＷｎ（カレントウィンドウＷｎ）は、ＳＡＶＥ命令の１フロー目が実行される前に、ワークレジスタ５２０に転送され、ワークレジスタ５２０に保持される。これにより、中断した命令が再実行される。このように、マスタレジスタ５１０に保持されたデータにエラーが含まれている場合でも、エラーを訂正して命令を再実行することができる。
【００７８】
図７は、図２に示した演算処理装置１００の動作の一例を示す。すなわち、図７は、演算処理装置１００の制御方法の一例を示す。なお、図７は、ワークレジスタ５２０で使用されているウィンドウＷの番号がｎのとき（カレントウィンドウＷがウィンドウＷｎの場合）にＳＡＶＥ命令が発行された場合の演算処理装置１００の動作を示す。例えば、ステップＳ１００の処理は、ＳＡＶＥ命令が発行されることにより、実行される。
【００７９】
ステップＳ１００では、マスタレジスタ５１０は、図５および図６で説明したように、ｎ＋１番のウィンドウＷｎ＋１のワークレジスタ５２０への転送を開始する。
【００８０】
ステップＳ１１０では、エラー検出部５３０は、マスタレジスタ５１０が出力したウィンドウＷｎ＋１のエラーを検出する処理を開始する。例えば、エラー検出部５３０は、マスタレジスタ５１０が出力したウィンドウＷｎ＋１にエラーが含まれているか否かを判定する。判定結果は、制御部３００に通知される。以下、データにエラーが含まれているか否かを検出する処理は、エラー検出処理とも称される。
【００８１】
ステップＳ１２０では、演算部６００は、図５および図６で説明したように、ｎ番のウィンドウＷｎに保持されたデータの加算（例えば、図５等に示したα＋β）を開始する。加算結果は、図５等で説明したように、アップデートバッファ５６０に格納される。
【００８２】
ステップＳ１３０では、制御部３００は、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出したか判定する。マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出した場合（すなわち、ウィンドウＷｎ＋１にエラーが含まれている場合）、演算処理装置１００の動作は、ステップＳ３００に移る。一方、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出していない場合（すなわち、ウィンドウＷｎ＋１にエラーがない場合）、演算処理装置１００の動作は、ステップＳ２００に移る。
【００８３】
なお、ステップＳ１３０の処理とステップＳ１２０の処理とは並列に実行されるが、エラーがない場合の動作とエラーがある場合の動作との分岐を分かりやすくするために、図７では、ステップＳ１２０の後にステップＳ１３０を記載している。
【００８４】
ステップＳ２００では、制御部３００は、図５で説明したように、ウィンドウＷｎに保持されたデータの加算結果（例えば、図５等に示した加算結果γ）をｎ＋１番のウィンドウＷｎ＋１に書き込むコミットを実行する。
【００８５】
ステップＳ２１０では、制御部３００は、図５で説明したように、ワークレジスタ５２０のウィンドウＷｎをマスタレジスタ５１０に返却する。すなわち、制御部３００は、ｎ番のウィンドウＷｎをワークレジスタ５２０からマスタレジスタ５１０に書き戻すコミットを実行する。これにより、ＳＡＶＥ命令は、終了する。
【００８６】
なお、マスタレジスタ５１０が出力したウィンドウＷｎ＋１にエラーが含まれている場合、演算処理装置１００は、ＳＡＶＥ命令の通常動作であるステップＳ２００、Ｓ２１０の処理を実行する前に、ステップＳ３００−Ｓ３４０の処理（エラー訂正等）を実行する。
【００８７】
ステップＳ３００では、論理積回路５５０等は、図６で説明したように、マスタレジスタ５１０が出力したエラーデータの全てのビットを０で上書きする。これにより、全てのビットが０のダミーデータが、ウィンドウＷｎ＋１のデータとして、ワークレジスタ５２０に転送される。
【００８８】
ステップＳ３１０では、制御部３００は、図６で説明したように、アップデートバッファ５６０に保持された加算結果をウィンドウＷｎ＋１に書き込むコミットを停止するとともに、演算部６００による演算を停止する。これにより、実行中の命令は中断する。
【００８９】
マスタレジスタ５１０からワークレジスタ５２０へのデータ転送時にエラー検出部５３０によるエラーの判定が実行されるため、ＳＡＶＥ命令中の加算結果がコミットされる前に、ウィンドウＷｎ＋１のエラーは検出される。このため、ウィンドウＷｎのデータを使用した演算結果をウィンドウＷｎ＋１に書き込むコミットを停止することができ、ウィンドウＷｎ＋１が更新されることを防止できる。コミットはインオーダで実行されるため、ｎ番のウィンドウＷｎのデータを使用した演算結果のコミットは、ｎ＋１番のウィンドウＷｎ＋１のデータを使用した演算結果のコミットに追い越させることは無い。
【００９０】
ステップＳ３２０では、制御部３００は、図６で説明したように、ワークレジスタ５２０のウィンドウＷｎをマスタレジスタ５１０に返却し、ワークレジスタ５２０のウィンドウＷｎ＋１を破棄する。
【００９１】
ステップＳ３３０では、エラー訂正部５４０は、図６で説明したように、マスタレジスタ５１０に保持されたデータのエラーを訂正する。
【００９２】
ステップＳ３４０では、制御部３００は、マスタレジスタ５１０のウィンドウＷｎをワークレジスタ５２０に転送して、ＳＡＶＥ命令が発行される前の状態を再現する。そして、制御部３００は、ＳＡＶＥ命令から命令を再実行する。したがって、ステップＳ３４０の処理が実行された後、演算処理装置１００の動作は、ステップＳ１００に戻る。なお、演算処理装置１００の動作は、図７に示す例に限定されない。
【００９３】
図８は、図２に示した演算処理装置１００のパイプライン処理の一例を示す。なお、図８は、ワークレジスタ５２０で使用されているウィンドウＷの番号がｎのとき（カレントウィンドウＷがウィンドウＷｎの場合）にＳＡＶＥ命令が発行された場合のパイプライン処理を示す。
【００９４】
図８に示した符号Ｐ、ＰＴ、Ｂ１、Ｂ２、Ｘは、各パイプラインステージのサイクルを示す。例えば、Ｐサイクルでは、実行部４００に投入される命令（マルチフロー命令では、フロー）が決定される。ＰＴサイクルでは、Ｐサイクルで決定された命令が実行部４００に投入される。Ｂ１、Ｂ２サイクルでは、演算に必要なデータが決定される。Ｘサイクルでは、実行部４００が命令を実行する。Ｕサイクルでは、アップデートバッファ５６０への演算結果の書き込みが実行される。
【００９５】
Ｃサイクルでは、命令（またはフロー）を完了させるコミットが実行される。例えば、ＳＡＶＥ命令のフロー１のＣサイクルでは、演算結果をワークレジスタ５２０に書き込むコミットが実行され、フロー２のＣサイクルでは、ウィンドウＷｎをワークレジスタ５２０からマスタレジスタ５１０に書き戻すコミットが実行される。
【００９６】
また、図８の白抜きの星印は、エラー検出処理（例えば、図４に示したエラー検出部５３０またはエラー検出部５３２で実行されるエラー検出処理）でエラーが検出されないことを示し、黒色の星印は、エラー検出処理でエラーが検出されたことを示す。
【００９７】
例えば、図８に示すケース１は、ウィンドウＷｎ＋１にエラーが含まれていない場合のパイプライン処理を示し、ケース２は、ウィンドウＷｎ＋１にエラーが含まれている場合のパイプライン処理を示す。比較例は、マスタレジスタ５１０からワークレジスタ５２０へのデータ転送時にエラーの判定処理を実行せずに、第２レジスタ部１２から演算部１３へのデータ転送時にエラーの判定処理を実行する演算処理装置のパイプライン処理を示す。なお、比較例では、ウィンドウＷｎ＋１にエラーが含まれている。
【００９８】
先ず、ケース１について説明する。
【００９９】
時間Ｔ１では、ＳＡＶＥ命令のフロー１のＰサイクルの処理が実行される。なお、ＳＡＶＥ命令のフロー１は、例えば、演算結果をワークレジスタ５２０のウィンドウＷｎ＋１に書き込むまでのフローである。また、ＳＡＶＥ命令のフロー１のＰサイクルでは、マスタレジスタ５１０からワークレジスタ５２０へのウィンドウＷｎ＋１の転送が開始され、エラー検出部５３０によるエラー検出処理が実行される。
【０１００】
時間Ｔ２では、ＳＡＶＥ命令のフロー１のＰＴサイクルの処理が実行され、ＳＡＶＥ命令のフロー２のＰサイクルの処理が実行される。なお、ＳＡＶＥ命令のフロー２は、例えば、ウィンドウＷｎをワークレジスタ５２０からマスタレジスタ５１０に書き戻すフローである。また、時間Ｔ２では、エラー検出処理が終了し、マスタレジスタ５１０から出力されたウィンドウＷｎ＋１にエラーが含まれていないと判定される。
【０１０１】
時間Ｔ３では、ＳＡＶＥ命令のフロー１のＢ１サイクルの処理が実行され、ＳＡＶＥ命令のフロー２のＰＴサイクルの処理が実行され、ＳＡＶＥ命令の次の命令である命令１のＰサイクルの処理が実行される。なお、命令１（ＳＡＶＥ命令の次の命令）では、例えば、ウィンドウＷｎ＋１に保持されたデータがＸサイクルの処理で使用される。
【０１０２】
時間Ｔ４では、ＳＡＶＥ命令のフロー１のＢ２サイクルの処理が実行され、命令１のＰＴサイクルの処理が実行される。
【０１０３】
時間Ｔ５では、ＳＡＶＥ命令のフロー１のＸサイクルの処理が実行され、命令１のＢ１サイクルの処理が実行される。例えば、ＳＡＶＥ命令のフロー１のＸサイクルでは、エラー検出部５３２によるエラー検出処理が終了し、ワークレジスタ５２０のウィンドウＷｎから出力されたデータにエラーが含まれていないと判定される。そして、演算部６００は、ウィンドウＷｎに保持されたデータを加算する演算を実行する。
【０１０４】
時間Ｔ６では、ＳＡＶＥ命令のフロー１のＵサイクルの処理が実行され、命令１のＢ２サイクルの処理が実行される。例えば、ＳＡＶＥ命令のフロー１のＵサイクルでは、ウィンドウＷｎに保持されたデータを加算する演算の結果がアップデートバッファ５６０に書き込まれる。
【０１０５】
時間Ｔ７では、ＳＡＶＥ命令のフロー１のＣサイクルの処理が実行され、命令１のＸサイクルの処理が実行される。例えば、ＳＡＶＥ命令のフロー１のＣサイクルでは、アップデートバッファ５６０に保持された演算結果（ウィンドウＷｎに保持されたデータを加算する演算の結果）をワークレジスタ５２０に書き込むコミットが実行される。これにより、ＳＡＶＥ命令のフロー１は終了する。
【０１０６】
また、命令１のＸサイクルでは、例えば、エラー検出部５３２によるエラー検出処理が終了し、ワークレジスタ５２０のウィンドウＷｎ＋１から出力されたデータにエラーが含まれていないと判定される。そして、演算部６００は、ウィンドウＷｎ＋１に保持されたデータを用いた演算を実行する。
【０１０７】
時間Ｔ８では、ＳＡＶＥ命令のフロー２のＣサイクルの処理が実行され、命令１のＵサイクルの処理が実行される。例えば、ＳＡＶＥ命令のフロー２のＣサイクルでは、ウィンドウＷｎをワークレジスタ５２０からマスタレジスタ５１０に書き戻すコミットが実行される。これにより、ワークレジスタ５２０のウィンドウＷｎがマスタレジスタ５１０に返却され、ＳＡＶＥ命令のフロー２は終了する。すなわち、ＳＡＶＥ命令が終了する。
【０１０８】
時間Ｔ９では、命令１のＣサイクルの処理が実行される。これにより、命令１は、終了する。ケース１では、ウィンドウＷｎ＋１にエラーが含まれていないため、ＳＡＶＥ命令および命令１（ＳＡＶＥ命令の次の命令）は、再実行されることなく、正常に終了する。
【０１０９】
次に、ケース２について説明する。ケース１で説明した処理と同様な処理については、詳細な説明を省略する。
【０１１０】
時間Ｔ１では、ＳＡＶＥ命令のフロー１のＰサイクルの処理が実行される。ＳＡＶＥ命令のフロー１のＰサイクルでは、マスタレジスタ５１０からワークレジスタ５２０へのウィンドウＷｎ＋１の転送が開始され、エラー検出部５３０によるエラー検出処理が実行される。
【０１１１】
時間Ｔ２では、ＳＡＶＥ命令のフロー１のＰＴサイクルの処理が実行され、ＳＡＶＥ命令のフロー２のＰサイクルの処理が実行される。また、時間Ｔ２では、マスタレジスタ５１０から出力されたウィンドウＷｎ＋１のエラーが検出される。このため、制御部３００は、ＳＡＶＥ命令のフロー１のコミットを停止する制御を実行する。また、論理積回路５５０は、ダミーデータ（例えば、全て０のデータ）を、ウィンドウＷｎ＋１のデータとして、ワークレジスタ５２０に転送する。
【０１１２】
時間Ｔ３では、ＳＡＶＥ命令のフロー１のＢ１サイクルの処理が実行され、ＳＡＶＥ命令のフロー２のＰＴサイクルの処理が実行され、命令１（ＳＡＶＥ命令の次の命令）のＰサイクルの処理が実行される。
【０１１３】
時間Ｔ４では、ＳＡＶＥ命令のフロー１のＢ２サイクルの処理が実行され、命令１のＰＴサイクルの処理が実行される。
【０１１４】
時間Ｔ５では、ＳＡＶＥ命令のフロー１のＸサイクルの処理が実行され、命令１のＢ１サイクルの処理が実行される。例えば、ＳＡＶＥ命令のフロー１のＸサイクルでは、ワークレジスタ５２０のウィンドウＷｎから出力されたデータにエラーが含まれていないと判定される。そして、演算部６００は、ウィンドウＷｎに保持されたデータを加算する演算を実行する。
【０１１５】
時間Ｔ６では、ＳＡＶＥ命令のフロー１のＵサイクルの処理が実行され、命令１のＢ２サイクルの処理が実行される。例えば、ＳＡＶＥ命令のフロー１のＵサイクルでは、ウィンドウＷｎに保持されたデータを加算する演算の結果がアップデートバッファ５６０に書き込まれる。
【０１１６】
時間Ｔ７では、命令１のＸサイクルの処理が実行される。なお、ＳＡＶＥ命令のフロー１のＣサイクルの処理は、制御部３００がＳＡＶＥ命令のフロー１のコミットを停止する制御を実行したため、実行されない。
【０１１７】
また、命令１のＸサイクルでは、例えば、演算部６００は、ワークレジスタ５２０のウィンドウＷｎ＋１から出力されるダミーデータを用いて演算を実行する。ワークレジスタ５２０のウィンドウＷｎ＋１から出力されるデータがダミーデータであるため、エラー検出部５３２は、ワークレジスタ５２０のウィンドウＷｎ＋１から出力されたデータにエラーが含まれていないと判定する。このように、ワークレジスタ５２０のウィンドウＷｎ＋１が保持するデータをダミーデータに置き換えることにより、エラーが演算部６００等に伝搬することを防止できる。
【０１１８】
時間Ｔ８では、命令１のＵサイクルの処理が実行される。なお、ＳＡＶＥ命令のフロー１のコミットが停止したため、ＳＡＶＥ命令のフロー２のコミットは実行されない。コミットはインオーダで実行されるため、ｎ番のウィンドウＷｎのデータを使用した演算結果のコミットは、ｎ＋１番のウィンドウＷｎ＋１のデータを使用した演算結果のコミットに追い越させることは無い。
【０１１９】
時間Ｔ９から時間Ｔｊでは、制御部３００は、演算部６００による演算を中止させるとともに、マスタレジスタ５１０に保持されたデータのエラーを訂正するエラー訂正をエラー訂正部５４０に実行させる。これにより、マスタレジスタ５１０に保持されたデータは、正常なデータに訂正される。マスタレジスタ５１０に保持されたデータのエラーが訂正された後（例えば、時間Ｔｊ＋１以降）に、命令が再実行される。
【０１２０】
時間Ｔｊ＋１では、ＳＡＶＥ命令が再実行される。例えば、ＳＡＶＥ命令のフロー１のＰサイクルの処理が実行される。
【０１２１】
時間ＴＪ＋２では、ＳＡＶＥ命令のフロー１のＰＴサイクルの処理が実行され、ＳＡＶＥ命令のフロー２のＰサイクルの処理が実行される。エラーが訂正されているため、マスタレジスタ５１０から出力されたウィンドウＷｎ＋１にエラーが含まれていないと判定される。
【０１２２】
時間Ｔｊ＋３以降の処理は、ケース１の時間Ｔ３以降の処理と同一または同様である。ケース２では、マスタレジスタ５１０からワークレジスタ５２０へのデータ転送時（例えば、時間Ｔ２）にエラーが検出されるため、ＳＡＶＥ命令のフロー１のコミットを停止することができる。このため、マスタレジスタ５１０に保持されたデータのエラーを訂正して命令（ＳＡＶＥ命令および命令１）を再実行することができる。エラー訂正後の命令の再実行により、ＳＡＶＥ命令および命令１（ＳＡＶＥ命令の次の命令）を正常に終了させることができる。
【０１２３】
なお、比較例では、エラー検出処理は、マスタレジスタ５１０からワークレジスタ５２０へのデータ転送時（例えば、時間Ｔ２）に実行されずに、時間Ｔ７に実行される。
【０１２４】
例えば、比較例の時間Ｔ７では、ＳＡＶＥ命令のフロー１のＣサイクルの処理が実行され、命令１（ＳＡＶＥ命令の次の命令）のＸサイクルの処理が実行される。例えば、命令１のＸサイクルでは、ワークレジスタ５２０から出力されたウィンドウＷｎ＋１のエラーが検出される。このため、ＳＡＶＥ命令のフロー１のコミットを停止させる制御が実行される。なお、図８の比較例では、時間Ｔ７において、ＳＡＶＥ命令のフロー１のＣサイクルの処理が実行されたため、ＳＡＶＥ命令のフロー１のコミットの停止は、間に合わない。したがって、アップデートバッファ５６０に保持された演算結果（ウィンドウＷｎに保持されたデータを加算する演算の結果）がワークレジスタ５２０に書き込まれ、ＳＡＶＥ命令のフロー１は終了する。
【０１２５】
比較例の時間Ｔ８では、ＳＡＶＥ命令のフロー２のＣサイクルの処理が実行され、ＳＡＶＥ命令が終了する。比較例では、ＳＡＶＥ命令のフロー１のコミットの停止が間に合わなかったため、ＳＡＶＥ命令を再実行することはできない。ＳＡＶＥ命令が再実行されない場合、ＳＡＶＥ命令の次の命令である命令１は、再実行されない。なお、マスタレジスタ５１０に保持されたデータのエラーを訂正して、命令１を再実行した場合、ＳＡＶＥ命令が再実行されないため、ＳＡＶＥ命令により実行された演算の結果は、再現されない。
【０１２６】
これに対し、演算処理装置１００では、ケース２で説明したように、マスタレジスタ５１０からワークレジスタ５２０へのデータ転送時に実行するエラー検出処理の結果に基づいて、ＳＡＶＥ命令のフロー１のコミットを停止する。このため、比較例に比べて、ＳＡＶＥ命令のフロー１のコミットの停止が間に合わなくなる頻度を低減でき、命令が再実行されない状態になる頻度を低減できる。
【０１２７】
以上、図２から図８に示す実施形態においても、図１に示した実施形態と同様の効果を得ることができる。例えば、エラー検出部５３０は、マスタレジスタ５１０からワークレジスタ５２０へのデータ転送時に、データにエラーが含まれているか否かを検出する。そして、制御部３００は、エラー検出部５３０がデータにエラーが有ることを検出したことに基づいて、命令を中断する。これにより、演算処理装置１００は、ワークレジスタ５２０から演算部６００へのデータ転送時にエラーを検出する手法に比べて、命令の中断（コミットの停止）が間に合わなくなる頻度を低減でき、命令が再実行されない状態になる頻度を低減できる。この結果、演算処理装置１００の性能が低下することを抑制できる。
【０１２８】
さらに、エラー伝搬抑止部３２０および論理積回路５５０は、マスタレジスタ５１０が出力したデータのエラーをエラー検出部５３０が検出した場合、マスタレジスタ５１０が出力したエラーデータをダミーデータに置き換えてワークレジスタ５２０に転送する。これにより、エラーが演算部６００等に伝搬することを抑止することができる。
【０１２９】
例えば、演算部６００は、ダミーデータを受けるため、エラーの発生を検出しない。このため、リトライ不可能なエラーを検出したと演算部６００が制御部３００等に通知することを抑止できる。これにより、エラーデータを訂正して命令を再実行することができ、演算処理装置１００の性能が低下することを抑止できる。
【０１３０】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１３１】
１０‥演算処理装置；１１‥第１レジスタ部；１２‥第２レジスタ部；１３‥演算部；１４‥エラー検出部；１５‥制御部；１６‥エラー訂正部；１００‥演算処理装置；２００‥記憶部；２１０‥データキャッシュ；３００‥制御部；３１０‥レジスタ制御部；３２０‥エラー伝搬抑止部；３３０‥コミット停止部；３４０‥訂正制御部；３５０‥リトライ制御部；３６０‥演算中止部；４００‥実行部；５００‥レジスタファイル；５１０‥マスタレジスタ；５２０‥ワークレジスタ；５３０、５３２‥エラー検出部；５４０‥エラー訂正部；５５０‥論理積回路；５６０‥アップデートバッファ；５７０、５７２、５７４、５７６、５７８‥バッファ；７００‥主記憶装置；１０００‥情報処理装置
【図１】
0006582666.tif 000002
【図２】
0006582666.tif 000003
【図３】
0006582666.tif 000004
【図４】
0006582666.tif 000005
【図５】
0006582666.tif 000006
【図６】
0006582666.tif 000007
【図７】
0006582666.tif 000008
【図８】
0006582666.tif 000009