JP2017027351A - 演算処理装置および演算処理装置の制御方法 - Google Patents

演算処理装置および演算処理装置の制御方法 Download PDF

Info

Publication number
JP2017027351A
JP2017027351A JP2015144938A JP2015144938A JP2017027351A JP 2017027351 A JP2017027351 A JP 2017027351A JP 2015144938 A JP2015144938 A JP 2015144938A JP 2015144938 A JP2015144938 A JP 2015144938A JP 2017027351 A JP2017027351 A JP 2017027351A
Authority
JP
Japan
Prior art keywords
unit
error
data
register
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015144938A
Other languages
English (en)
Other versions
JP6582666B2 (ja
Inventor
弘志 木村
Hiroshi Kimura
弘志 木村
祥照 大貫
Sachiteru Onuki
祥照 大貫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015144938A priority Critical patent/JP6582666B2/ja
Priority to US15/205,507 priority patent/US10176031B2/en
Publication of JP2017027351A publication Critical patent/JP2017027351A/ja
Application granted granted Critical
Publication of JP6582666B2 publication Critical patent/JP6582666B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0763Error or fault detection not based on redundancy by bit configuration check, e.g. of formats or tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • G06F9/30127Register windows
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

Abstract

【課題】 演算処理装置の性能が低下することを抑制する。
【解決手段】 演算処理装置は、命令の実行に用いるデータを保持する第1レジスタ部と、第1レジスタ部が保持するデータの一部を保持する第2レジスタ部と、第2レジスタ部が保持したデータを用いて演算を実行する演算部と、第1レジスタ部が第2レジスタ部に転送するデータのエラーを検出する第1エラー検出部と、第1エラー検出部がデータのエラーを検出した場合、命令の実行を中断する制御部と、第1エラー検出部がデータのエラーを検出した場合、第1レジスタ部が保持したデータのエラーを訂正するエラー訂正部とを有する。
【選択図】 図1

Description

本発明は、演算処理装置および演算処理装置の制御方法に関する。
CPU(Central Processing Unit)等の演算処理装置は、主記憶装置に記憶されたデータの一部を保持するキャッシュメモリと、命令を実行する実行部と、実行部等を制御する制御部とを有する。実行部は、例えば、キャッシュメモリに保持されるデータの一部を保持する第1レジスタファイルと、第1レジスタファイルに保持されるデータの一部をさらに保持する第2レジスタファイルと、命令に基づく演算を実行する演算部とを有する。演算部は、第2レジスタファイルから転送されるデータを用いて演算を実行する。
なお、第1レジスタファイル等のレジスタファイルに保持されたデータにエラーが発生する場合がある。このため、エラーを検出するためのパリティデータとエラーを訂正するためのECC(Error Checking and Correction)データとを付加したデータをレジスタファイルに保持させる演算処理装置が提案されている(例えば、特許文献1参照)。この種の演算処理装置は、エラーの発生を検出するエラー検出部と、エラーを訂正するエラー訂正を実行するエラー訂正部とを有する。
再表2008/152728号公報
命令を複数のステージに分けて実行するパイプライン処理では、第1命令に後続する第2命令の演算に使用する入力データが保持されたレジスタ(例えば、第1レジスタファイルが有するレジスタ)に第1命令の演算結果が書き戻される場合がある。この場合、第2レジスタファイルから演算部へのデータ転送時にエラーの判定処理を実行する演算処理装置では、エラーを含むデータを訂正して命令を再実行することが困難になる場合がある。例えば、第1命令を完了させるコミットの停止が間に合わない場合、第2命令の入力データ(エラーを含むデータ)を保持したレジスタに第1命令のコミットによる演算結果が上書きされ、入力データのエラーを訂正して第2命令を再実行することが困難になる。
また、第1命令が1つの命令を複数のフローに分けたマルチフロー命令である場合、第1命令の1つ目のフローのコミットの停止が間に合わないと、入力データのエラーを訂正して第2命令を再実行することが困難になる。例えば、第1命令の1つ目以降のフローのコミットが終了したため、第1命令が再実行されない場合、第1命令に後続する第2命令は、再実行されない。
命令が再実行されない状態では、演算部等の機能が停止するため、命令が再実行される場合に比べて、演算処理装置の性能は低下する。
1つの側面では、本件開示の演算処理装置および演算処理装置の制御方法は、演算処理装置の性能が低下することを抑制することを目的とする。
一観点によれば、演算処理装置は、命令の実行に用いるデータを保持する第1レジスタ部と、第1レジスタ部が保持するデータの一部を保持する第2レジスタ部と、第2レジスタ部が保持したデータを用いて演算を実行する演算部と、第1レジスタ部が第2レジスタ部に転送するデータのエラーを検出する第1エラー検出部と、第1エラー検出部がデータのエラーを検出した場合、命令の実行を中断する制御部と、第1エラー検出部がデータのエラーを検出した場合、第1レジスタ部が保持したデータのエラーを訂正するエラー訂正部とを有する。
別の観点によれば、命令の実行に用いるデータを保持する第1レジスタ部と、第1レジスタ部が保持するデータの一部を保持する第2レジスタ部と、第2レジスタ部が保持したデータを用いて演算を実行する演算部とを有する演算処理装置の制御方法では、演算処理装置が有する第1エラー検出部が、第1レジスタ部が第2レジスタ部に転送するデータのエラーを検出し、演算処理装置が有する制御部が、第1エラー検出部がデータのエラーを検出した場合、命令の実行を中断し、演算処理装置が有するエラー訂正部が、第1エラー検出部がデータのエラーを検出した場合、第1レジスタ部が保持したデータのエラーを訂正する。
本件開示の演算処理装置および演算処理装置の制御方法は、演算処理装置の性能が低下することを抑制できる。
演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。 演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。 図2に示したマスタレジスタおよびワークレジスタの一例を示す図である。 図2に示したレジスタファイルおよび制御部の一例を示す図である。 SAVE命令実行時の演算処理装置の動作の一例を示す図である。 エラー訂正時の演算処理装置の動作の一例を示す図である。 図2に示した演算処理装置の動作の一例を示す図である。 図2に示した演算処理装置のパイプライン処理の一例を示す図である。
以下、実施形態について、図面を用いて説明する。
図1は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。図1に示す太線の矢印は、データの流れを示す。図1に示す演算処理装置10は、例えば、命令を実行するCPU等のプロセッサである。演算処理装置10は、第1レジスタ部11、第2レジスタ部12、演算部13、エラー検出部14、制御部15およびエラー訂正部16を有する。
第1レジスタ部11は、エラーを検出するためのパリティデータとエラーを訂正するためのECCデータとが付加されたデータを保持する。例えば、第1レジスタ部11は、図示しないキャッシュメモリ等に保持されるデータの一部を保持する。そして、第1レジスタ部11は、保持したデータの一部であるデータD1を、制御部15からの指示に基づいて、第2レジスタ部12およびエラー検出部14に出力する。また、第1レジスタ部11は、制御部15からの指示に基づいて、第2レジスタ部12から書き戻されるデータを保持する。
エラー検出部14は、第1レジスタ部11が第2レジスタ部12に転送するデータのエラーを検出する第1エラー検出部の一例である。例えば、エラー検出部14は、第1レジスタ部11から第2レジスタ部12にデータD1が転送される際に、データD1を第1レジスタ部11から受ける。そして、エラー検出部14は、データD1に含まれるパリティデータ等を用いて、データD1にエラーが含まれるか否かを判定し、判定結果を制御部15に出力する。
このように、エラー検出部14は、第2レジスタ部12から演算部13にデータが転送されるタイミングより早いタイミングで、データD1にエラーが含まれているか否かを検出する。
第2レジスタ部12は、第1レジスタ部11に保持されるデータの一部であるデータD1を保持する。そして、第2レジスタ部12は、演算部13が使用するデータを、演算部13に出力する。また、第2レジスタ部12は、図示しないアップデートバッファ等を介して演算部13から受けた演算結果(演算部13による演算の結果)を保持する。
さらに、第2レジスタ部12は、エラー検出部14がデータD1のエラーを検出した場合(すなわち、エラー検出部14がデータD1にエラーが有ることを検出した場合)、エラーを含むデータD1eをエラー訂正部16に出力する。そして、第2レジスタ部12は、データD1eのエラーが訂正されたデータD1cをエラー訂正部16から受け、データD1cを第1レジスタ部11に出力する。以下、エラーを含むデータD1eは、エラーデータD1eとも称される。また、データD1にエラーが含まれる場合、データD1は、エラーデータD1とも称される。
演算部13は、第2レジスタ部12に保持されたデータを用いて演算を実行する。また、演算部13は、エラー検出部14がデータD1のエラーを検出した場合、制御部15からの指示に基づいて、演算を停止する。
制御部15は、第1レジスタ部11、第2レジスタ部12、演算部13およびエラー訂正部16の動作を制御し、命令に基づく演算を演算部13に実行させる。また、制御部15は、エラー検出部14がデータD1のエラーを検出した場合、命令の実行を中断する制御を実行する。例えば、制御部15は、データD1にエラーが含まれることを示す情報をエラー検出部14から受けた場合、命令を完了させるコミットを停止するとともに、演算部13による演算を停止させる。さらに、制御部15は、エラーを含むデータD1eを第1レジスタ部11から第2レジスタ部12を介してエラー訂正部16に転送する。
なお、実行中の命令が1つの命令を複数のフローに分けたマルチフロー命令である場合、制御部15は、例えば、演算部13による演算の結果を第2レジスタ部12に書き込むコミットを停止する。
エラー訂正部16は、第1レジスタ部11から第2レジスタ部12に転送されたエラーデータD1eを第2レジスタ部12から読み出し、読み出したエラーデータD1eのエラーをECCデータ等を用いて訂正する。そして、エラー訂正部16は、エラーデータD1eのエラーを訂正したデータD1cを第2レジスタ部12に書き戻す。第2レジスタ部12は、データD1cを第1レジスタ部11に書き戻す。すなわち、エラー訂正部16は、エラー検出部14がデータD1のエラーを検出した場合、第1レジスタ部11に保持されたデータのエラーを訂正する。これにより、演算処理装置10は、エラーを訂正したデータを用いて命令を再実行できる。
ここで、第2レジスタ部12から演算部13へのデータ転送時にエラーを検出する演算処理装置では、コミットの停止が間に合わない場合がある。コミットの停止が間に合わない場合、例えば、コミットの停止が間に合わなかった命令の実行結果が第1レジスタ部11に書き戻される。この場合、第1レジスタ部11がエラーデータ(エラーが検出されたデータ)を出力したときの状態と異なる状態に更新されるため、第1レジスタ部11の状態をエラーデータを出力したときの状態に再現することが困難になる。このため、第1レジスタ部11に保持されたデータのエラーを訂正して命令を再実行することが困難になる。命令が再実行されない状態では、演算部13等の機能が停止するため、命令が再実行される場合に比べて、演算処理装置の性能は低下する。
これに対し、演算処理装置10は、第2レジスタ部12から演算部13にデータが転送されるタイミングより早いタイミングで、データD1にエラーが含まれているか否かを検出する。このため、第2レジスタ部12から演算部13へのデータ転送時にエラーを検出する手法に比べて、コミットの停止が間に合わなくなる頻度を低減することができる。
コミットの停止が間に合わなくなる頻度が低減するほど、第1レジスタ部11がエラーを含むデータD1(エラーデータD1)を出力したときの状態と異なる状態に更新される頻度(命令が再実行されない状態になる頻度)は、低減する。例えば、第1レジスタ部11の状態がエラーデータD1を出力したときの状態に維持される場合、演算処理装置10は、第1レジスタ部11に保持されたデータのエラーを訂正して命令を再実行できる。
このように、第2レジスタ部12から演算部13へのデータ転送時にエラーを検出する手法に比べて、第1レジスタ部11に発生したエラーを確実に訂正でき、命令が再実行されない状態になる頻度を低減できる。例えば、第1レジスタ部11が宇宙線等のノイズを受けたことにより、データ化けが発生した場合でも、第1レジスタ部11に発生したエラーを訂正して命令を再実行することができる。
なお、演算処理装置10の構成は、図1に示す例に限定されない。例えば、エラー訂正部16は、エラーデータD1eのエラーを訂正する場合、第2レジスタ部12を介さずに第1レジスタ部11からエラーデータD1eを読み出してもよい。また、エラー訂正部16は、エラーデータD1eのエラーを訂正したデータD1cを、第2レジスタ部12を介さずに第1レジスタ部11に書き戻してもよい。
以上、図1に示す実施形態では、エラー検出部14は、第1レジスタ部11から第2レジスタ部12へのデータ転送時に、データD1にエラーが含まれているか否かを検出する。そして、制御部15は、エラー検出部14がデータD1にエラーが有ることを検出したことに基づいて、命令を中断する。これにより、演算処理装置10は、第2レジスタ部12から演算部13へのデータ転送時にエラーを検出する手法に比べて、命令の中断(コミットの停止)が間に合わなくなる頻度を低減でき、命令が再実行されない状態になる頻度を低減できる。この結果、演算処理装置10の性能が低下することを抑制できる。
図2は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図1で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図2に示す演算処理装置100は、例えば、1つの命令を複数のフローに分けたマルチフロー命令を実行するCPU等のプロセッサである。演算処理装置100は、主記憶装置700に接続される。例えば、演算処理装置100および主記憶装置700は、情報処理装置1000に搭載される。
演算処理装置100は、記憶部200、制御部300および実行部400を有する。記憶部200は、主記憶装置700に記憶されるデータの一部(例えば、実行部400で扱うデータ)を保持するデータキャッシュ210等を有する。例えば、データキャッシュ210は、キャッシュメモリである。
制御部300は、記憶部200および実行部400の動作を制御し、命令を実行する制御、命令を中断する制御、命令を再実行する制御等を実行する。制御部300の詳細は、図4で説明する。
実行部400は、レジスタファイル500および演算部600を有する。レジスタファイル500は、データキャッシュ210に保持されるデータの一部を保持するマスタレジスタ510、演算部600で使用されるデータを保持するワークレジスタ520等を有する。マスタレジスタ510は、命令の実行に用いるデータを保持する第1レジスタ部の一例であり、ワークレジスタ520は、第1レジスタ部(例えば、マスタレジスタ510)が保持するデータの一部を保持する第2レジスタ部の一例である。マスタレジスタ510およびワークレジスタ520の詳細は、図3で説明する。また、レジスタファイル500の詳細は、図4で説明する。
演算部600は、ワークレジスタ520が保持したデータを用いて演算を実行し、演算結果をレジスタファイル600に転送する。また、演算部600は、マスタレジスタ5100等に保持されたデータにエラーが検出された場合、制御部300からの指示に基づいて、演算を停止する。なお、演算処理装置100の構成は、図2に示す例に限定されない。
図3は、図2に示したマスタレジスタ510およびワークレジスタ520の一例を示す。マスタレジスタ510は、8個のウィンドウW(W0−W7)を有するレジスタ群である。各ウィンドウWは、出力用のレジスタOUTと、ローカルに使用されるレジスタLOCALと、入力用のレジスタINとを有する。以下、レジスタOUT、LOCAL、INは、それぞれ、OUTレジスタ、LOCALレジスタおよびINレジスタとも称される。各レジスタOUT、LOCAL、INは、図中の括弧内に示すように、パリティデータとECCデータとが付加されたデータを保持する8個のレジスタを有する。
なお、マスタレジスタ510内のウィンドウWにはそれぞれ番号が割り当てられる。符号Wの末尾の数字は、ウィンドウWに割り当てられた番号に対応する。各ウィンドウWのOUTレジスタは、1つ隣のウィンドウWのINレジスタと同一のものを使用する。例えば、ウィンドウW0のOUTレジスタとウィンドウW1のINレジスタは、互いに同じレジスタを使用する。また、ウィンドウW7のOUTレジスタとウィンドウW0のINレジスタは、互いに同じレジスタを使用する。
2つのウィンドウWの一方のウィンドウWのOUTレジスタと他方のウィンドウWのINレジスタとでレジスタを共有することにより、8個のウィンドウWは、数珠繋ぎされる。
ワークレジスタ520は、例えば、演算部600との間でデータを出し入れする際に使用するカレントウィンドウW(例えば、ウィンドウWn)と、ウィンドウWを入れ替える際に使用する次のウィンドウW(例えば、ウィンドウWn+1)とを有する。ウィンドウWnのOUTレジスタとウィンドウWn+1のINレジスタとが互いに同じレジスタ群(8個のレジスタ)を使用するため、ワークレジスタ520は、1つのOUTレジスタと、2つのLOCALレジスタと、2つのINレジスタとを有する。
例えば、現在使用しているカレントウィンドウWは、ウィンドウポインタにより指定される。マスタレジスタ510は、ウィンドウポインタが切り替えられると、切り替え後のウィンドウポインタにより指定されるウィンドウWを、ワークレジスタ520に転送する。なお、ウィンドウWの転送は、ウィンドウWが保持するデータの転送を意味する。以下、データの転送を説明する場合等では、ウィンドウW(またはレジスタ)に保持されたデータは、単に、ウィンドウW(またはレジスタ)とも称される。マスタレジスタ510に比べて小規模なレジスタ群であるワークレジスタ520を中継して演算部600にデータを転送することにより、レジスタの選択にかかる時間(遅延時間)を短縮することができる。
ここで、ウィンドウWを入れ替える命令は、例えば、SAVE命令、RESTORE命令等である。例えば、カレントウィンドウWがn番(nは、0以上7以下の整数)のウィンドウWnの場合、SAVE命令の実行により、n+1番のウィンドウWn+1がマスタレジスタ510からワークレジスタ520に転送される。また、カレントウィンドウWがn番のウィンドウWnの場合、RESTORE命令の実行により、n−1番のウィンドウWn−1がマスタレジスタ510からワークレジスタ520に転送される。なお、nが7の場合、n+1番のウィンドウWn+1は、0番のウィンドウW0であり、nが0の場合、n−1番のウィンドウWn−1は、7番のウィンドウW7である。
SAVE命令が実行されたときの演算処理装置100の動作は、図5等で説明する。RESTORE命令が実行されたときの演算処理装置100の動作は、転送されるウィンドウWを除いて、SAVE命令が実行されたときの演算処理装置100の動作と同一または同様である。
なお、マスタレジスタ510およびワークレジスタ520の構成は、図3に示す例に限定されない。例えば、マスタレジスタ510内のウィンドウWの数は、8個に限定されない。また、例えば、OUTレジスタ、LOCALレジスタおよびINレジスタのそれぞれが有するレジスタの数は、8個に限定されない。
図4は、図2に示したレジスタファイル500および制御部300の一例を示す。図4に示す太線の矢印は、データの流れを示す。なお、図4では、データ等の流れを分かりやすくするために、演算部600も記載している。
レジスタファイル500は、マスタレジスタ510、ワークレジスタ520、エラー検出部530、532、エラー訂正部540、論理積回路550、アップデートバッファ560およびバッファ570、572、574、576、578を有する。また、制御部300は、レジスタ制御部310、エラー伝搬抑止部320、コミット停止部330、訂正制御部340、リトライ制御部350および演算中止部360を有する。
マスタレジスタ510は、例えば、レジスタ制御部310により制御されるウィンドウポインタで指定されたウィンドウWが保持するデータを、バッファ572に出力する。また、マスタレジスタ510は、ウィンドウポインタの切り替えにより書き戻されるデータを、ワークレジスタ520からバッファ570を介して受ける。
ワークレジスタ520は、マスタレジスタ510から出力されたデータ(ウィンドウポインタで指定されたウィンドウWに保持されたデータ)を、バッファ572から論理積回路550を介して受け、受けたデータを保持する。これにより、ワークレジスタ520内のカレントウィンドウWは、ウィンドウポインタで指定されたウィンドウWに切り替わる。なお、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出した場合、ワークレジスタ520は、論理積回路550から受けたダミーデータ(例えば、全て0のデータ)を、カレントウィンドウWのデータとして保持する。
また、ワークレジスタ520は、演算部600が使用するデータを、バッファ574に出力する。そして、ワークレジスタ520は、演算部600の演算結果を、バッファ576、アップデートバッファ560およびバッファ578を介して受ける。なお、例えば、コミット停止部330がコミットを停止する制御を実行した場合、アップデートバッファ560からワークレジスタ520へのデータの書き込みは、実行されない。
また、ワークレジスタ520は、エラー訂正部540がエラーデータのエラー訂正を実行する場合、エラーデータをエラー訂正部540に出力し、エラーが訂正されたデータをエラー訂正部540から受ける。そして、ワークレジスタ520は、エラーが訂正されたデータをバッファ570を介してマスタレジスタ510に転送する。
エラー検出部530は、第1レジスタ部(例えば、マスタレジスタ510)が第2レジスタ部(例えば、ワークレジスタ520)に転送するデータのエラーを検出する第1エラー検出部の一例である。例えば、エラー検出部530は、マスタレジスタ510から出力されたデータ(ウィンドウポインタで指定されたウィンドウWに保持されたデータ)を、バッファ572から受ける。そして、エラー検出部530は、データに含まれるパリティデータ等を用いて、データにエラーが含まれるか否かを判定し、判定結果を、エラー伝搬抑止部320、コミット停止部330およびリトライ制御部350に出力する。
エラー検出部532は、第2レジスタ部(例えば、ワークレジスタ520)が演算部600に転送するデータのエラーを検出する第2エラー検出部の一例である。例えば、エラー検出部532は、ワークレジスタ520から出力されたデータを、バッファ574から受ける。そして、エラー検出部532は、データに含まれるパリティデータ等を用いて、データにエラーが含まれるか否かを判定し、判定結果をリトライ制御部350に出力する。このように、演算処理装置100では、ワークレジスタ520等で発生したエラーをエラー検出部532で検出することができる。
エラー訂正部540は、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出した場合、訂正制御部340からの指示に基づいて、エラー訂正を実行する。例えば、エラー訂正部540は、マスタレジスタ510に保持されたデータをワークレジスタ520を介して受け、受けたデータのエラーをECCデータ等を用いて訂正する。そして、エラー訂正部540は、エラー訂正を実行したデータを、ワークレジスタ520を介してマスタレジスタ510に転送する。これにより、マスタレジスタ510に保持されたデータのエラーは訂正される。
論理積回路550は、第2エラー検出部(例えば、エラー検出部532)でエラーと判定されないダミーデータにエラーデータを置き換える置換部の一例である。論理積回路550は、バッファ572から受けるデータとエラー伝搬抑止部320から受けるデータとの論理積結果を、ワークレジスタ520に出力する。
例えば、論理積回路550は、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出した場合、データの全てのビットが0であるダミーデータをエラー伝搬抑止部320から受ける。したがって、論理積回路550は、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出した場合、全てのビットが0であるダミーデータをワークレジスタ520に出力する。
また、例えば、論理積回路550は、マスタレジスタ510が出力したデータにエラーが含まれていないとエラー検出部530が判定した場合、全てのビットが1のデータをエラー伝搬抑止部320から受ける。したがって、論理積回路550は、マスタレジスタ510が出力したデータにエラーが含まれていない場合、マスタレジスタ510が出力したデータをワークレジスタ520に転送する。
アップデートバッファ560は、マスタレジスタ510やワークレジスタ520へのコミットの整理のために用いられるレジスタ群であり、演算結果等を保持する。例えば、アップデートバッファ560は、演算結果をバッファ576を介して演算部600から受ける。そして、アップデートバッファ560は、演算結果をバッファ578を介してワークレジスタ520に転送する。これにより、演算部600の演算結果をワークレジスタ520に書き込むコミットが終了する。
また、アップデートバッファ560は、演算部600の演算結果をワークレジスタ520に格納する前に入力データとして演算部600にバイパスするバイパス処理が実行される場合、演算結果をバッファ574を介して演算部600に転送する。
レジスタ制御部310は、ウィンドウポインタ等を用いて、マスタレジスタ510からのデータ転送およびマスタレジスタ510へのデータの書き戻し等を制御する。
エラー伝搬抑止部320は、マスタレジスタ510で発生したエラーが演算部600等に伝搬することを抑止する。例えば、エラー伝搬抑止部320は、エラー検出部530から受けた判定結果がデータにエラーが含まれることを示す場合、全てのビットが0のダミーデータを論理積回路550に出力する。なお、エラー伝搬抑止部320は、エラー検出部530から受けた判定結果がデータにエラーが含まれないことを示す場合、全てのビットが1のデータを論理積回路550に出力する。
コミット停止部330は、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出した場合、演算部600の演算結果をワークレジスタ520に書き込むコミットを停止して命令の実行を中断する。例えば、コミット停止部330は、エラー検出部530から受けた判定結果がデータにエラーが含まれることを示す場合、演算部600の演算結果をワークレジスタ520に書き込むコミットを停止する制御を、ワークレジスタ520等に対して実行する。
このように、コミット停止部330は、エラー検出部532より早いタイミングでエラー検出を実行するエラー検出部530の検出結果に基づいて、コミットを停止する制御を実行する。このため、ワークレジスタ520から演算部600へのデータ転送時にエラーを検出する手法(例えば、エラー検出部532の判定結果をコミットの停止判定に用いる手法)に比べて、コミットの停止が間に合わなくなる頻度を低減することができる。
訂正制御部340は、エラー訂正部540によるエラー訂正の実行を、リトライ制御部350からの指示に基づいて制御する。
リトライ制御部350は、エラー訂正部540がマスタレジスタ510に保持されたデータのエラーを訂正した後に、中断した命令を再実行させる。例えば、リトライ制御部350は、エラー検出部530から受けた判定結果がデータにエラーが含まれることを示す場合、演算部600による演算を停止する制御を、演算中止部360に実行させる。これにより、命令の実行は中断する。
また、例えば、リトライ制御部350は、エラー検出部530から受けた判定結果がデータにエラーが含まれることを示す場合、エラー訂正部540にエラー訂正を実行させる制御を、訂正制御部340に実行させる。そして、リトライ制御部350は、マスタレジスタ510に保持されたデータのエラーが訂正された後に、レジスタ制御部310等を制御して、中断した命令を再実行させる。
演算中止部360は、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出した場合、リトライ制御部350からの指示に基づいて、演算部600による演算を停止させることで命令の実行を中断する。
なお、レジスタファイル500および制御部300の構成は、図4に示す例に限定されない。例えば、論理積回路550は、ワークレジスタ520とバッファ574との間に配置されてもよい。この場合、論理積回路550は、ワークレジスタ520から出力されたエラーデータをダミーデータに置き換えて演算部600にバッファ574を介して転送する。また、エラー検出部532は、演算部600内に設けられてもよい。この場合、論理積回路550は、バッファ574と演算部600との間に配置されてもよい。また、演算中止部360は、マスタレジスタ510が出力したデータにエラーが含まれているか否かの判定結果をエラー検出部530から受け、エラー検出部530から受けた判定結果に基づいて、演算部600による演算を停止させる制御を実行してもよい。
図5は、SAVE命令実行時の演算処理装置100の動作の一例を示す。SAVE命令は、1つの命令を複数のフローに分けて演算を実行するマルチフロー命令の1つである。符号O、L、Iは、それぞれOUTレジスタ、LOCALレジスタおよびINレジスタを示している。なお、図5では、図を見やすくするために、図4に示した制御部300等の記載を省略している。
図5では、ワークレジスタ520で使用されているウィンドウWの番号がnのとき(カレントウィンドウWがウィンドウWnの場合)に、SAVE命令が発行された場合の演算処理装置100の動作を説明する。図5の動作では、n+1番のウィンドウWn+1に保持されたデータには、エラーは含まれていない。
SAVE命令が発行されると、マスタレジスタ510は、n+1番のウィンドウWn+1をワークレジスタ520に転送する(図5(a))。なお、ウィンドウWn+1のINレジスタは、図3で説明したように、ウィンドウWnのOUTレジスタと同じレジスタを使用する。このため、ウィンドウWn+1のOUTレジスタおよびLOCALレジスタが、マスタレジスタ510からワークレジスタ520に転送される。
演算部600は、n番のウィンドウWnに保持されたデータαとデータβとを加算し、加算結果γをアップデートバッファ560に格納する(図5(b)、(c))。そして、制御部300は、アップデートバッファ560に保持された加算結果γをn+1番のウィンドウWn+1に書き込むコミットを実行する(図5(d))。
そして、制御部300は、n番のウィンドウWnをワークレジスタ520からマスタレジスタ510に書き戻すコミットを実行する(図5(e))。このように、SAVE命令は、加算結果γをウィンドウWn+1に書き込むまでのフロー(以下、フロー1とも称する)と、ウィンドウWnをワークレジスタ520からマスタレジスタ510に書き戻すフロー(以下、フロー2とも称する)とに分けて実行される。
図6は、エラー訂正時の演算処理装置100の動作の一例を示す。なお、図6では、図を見やすくするために、図4に示した制御部300、エラー検出部530、532、論理積回路550等の記載を省略している。図6では、図5と同様に、ワークレジスタ520で使用されているウィンドウWの番号がnのとき(カレントウィンドウWがウィンドウWnの場合)に、SAVE命令が発行された場合の演算処理装置100の動作を説明する。図5と同一または同様な動作については、詳細な説明を省略する。なお、図6に示した太枠で囲んだLOCALレジスタは、エラーを含むデータを保持していることを示し、網掛けで示したOUTレジスタおよびLOCALレジスタは、ダミーデータを保持していることを示している。
SAVE命令が発行されると、マスタレジスタ510は、n+1番のウィンドウWn+1をワークレジスタ520に転送する。この際、エラー検出部530は、マスタレジスタ510が出力したデータ(ウィンドウWn+1に保持されたデータ)のエラーを検出する(図6(a))。このため、論理積回路550は、マスタレジスタ510が出力したデータをダミーデータに置換してワークレジスタ520に転送する(図6(a))。そして、演算部600は、n番のウィンドウWnに保持されたデータαとデータβとを加算し、加算結果γをアップデートバッファ560に格納する(図6(b)、(c))。
そして、ワークレジスタ520は、n+1番のウィンドウWn+1に保持されたダミーデータを演算部600等に転送する(図6(d))。ワークレジスタ520から出力されたデータがダミーデータであるため、エラー検出部532は、データのエラーを検出しない。また、制御部300は、アップデートバッファ560に保持された加算結果γをn+1番のウィンドウWn+1に書き込むコミットを停止する(図6(e))。さらに、制御部300は、演算部600による演算を停止する。これにより、実行中の命令は中断する。
なお、演算部600に伝達されるデータがダミーデータであるため、エラーの伝搬を抑止することができる。例えば、演算部600でエラーが検出された場合、命令を再実行できるか否かに拘わらず、リトライ不可能なエラー(命令の再実行ができない状態)と演算部600が制御部300等に通知する場合がある。この場合、エラーデータを訂正することにより命令を再実行できる状態でも、命令が再実行されないため、演算処理装置100の性能は低下する。換言すれば、エラーデータをダミーデータに置き換えることにより、エラーの伝搬を抑止することができ、リトライ不可能なエラーを検出したと演算部600が制御部300等に通知することを抑止できる。これにより、エラーデータを訂正して命令を再実行することができ、演算処理装置100の性能が低下することを抑止できる。
制御部300は、n番のウィンドウWnが正常なデータであるため、命令を中断した後に、ウィンドウWnをワークレジスタ520からマスタレジスタ510に書き戻す(図6(f))。また、制御部300は、ワークレジスタ520のウィンドウWn+1がダミーデータで上書きされたため、ワークレジスタ520のウィンドウWn+1を破棄する。
そして、マスタレジスタ510は、エラー訂正の対象であるn+1番のウィンドウWn+1を、ワークレジスタ520を介してエラー訂正部540に転送する(図6(g))。図6に示す例では、ウィンドウWn+1の全てのレジスタに保持されたデータがエラー訂正部540に転送される。エラー訂正部540は、マスタレジスタ510からワークレジスタ520を介して受けたデータのエラーを訂正する(図6(h))。そして、エラー訂正部540は、エラーを訂正したデータ(ウィンドウWn+1)をマスタレジスタ510に書き戻す(図6(i))。エラー訂正は、マスタレジスタ510に保持されたデータのうちのウィンドウWn+1のみに対して実行されてもよいし、マスタレジスタ510に保持された全てのデータ(全てのウインドウW)に対して実行されてもよい。
制御部300は、エラーデータを訂正した後に、SAVE命令の1フロー目の転送(マスタレジスタ510からワークレジスタ520へのウィンドウWn+1の転送)から命令を再開する(図6(j))。なお、ウィンドウWn(カレントウィンドウWn)は、SAVE命令の1フロー目が実行される前に、ワークレジスタ520に転送され、ワークレジスタ520に保持される。これにより、中断した命令が再実行される。このように、マスタレジスタ510に保持されたデータにエラーが含まれている場合でも、エラーを訂正して命令を再実行することができる。
図7は、図2に示した演算処理装置100の動作の一例を示す。すなわち、図7は、演算処理装置100の制御方法の一例を示す。なお、図7は、ワークレジスタ520で使用されているウィンドウWの番号がnのとき(カレントウィンドウWがウィンドウWnの場合)にSAVE命令が発行された場合の演算処理装置100の動作を示す。例えば、ステップS100の処理は、SAVE命令が発行されることにより、実行される。
ステップS100では、マスタレジスタ510は、図5および図6で説明したように、n+1番のウィンドウWn+1のワークレジスタ520への転送を開始する。
ステップS110では、エラー検出部530は、マスタレジスタ510が出力したウィンドウWn+1のエラーを検出する処理を開始する。例えば、エラー検出部530は、マスタレジスタ510が出力したウィンドウWn+1にエラーが含まれているか否かを判定する。判定結果は、制御部300に通知される。以下、データにエラーが含まれているか否かを検出する処理は、エラー検出処理とも称される。
ステップS120では、演算部600は、図5および図6で説明したように、n番のウィンドウWnに保持されたデータの加算(例えば、図5等に示したα+β)を開始する。加算結果は、図5等で説明したように、アップデートバッファ560に格納される。
ステップS130では、制御部300は、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出したか判定する。マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出した場合(すなわち、ウィンドウWn+1にエラーが含まれている場合)、演算処理装置100の動作は、ステップS300に移る。一方、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出していない場合(すなわち、ウィンドウWn+1にエラーがない場合)、演算処理装置100の動作は、ステップS200に移る。
なお、ステップS130の処理とステップS120の処理とは並列に実行されるが、エラーがない場合の動作とエラーがある場合の動作との分岐を分かりやすくするために、図7では、ステップS120の後にステップS130を記載している。
ステップS200では、制御部300は、図5で説明したように、ウィンドウWnに保持されたデータの加算結果(例えば、図5等に示した加算結果γ)をn+1番のウィンドウWn+1に書き込むコミットを実行する。
ステップS210では、制御部300は、図5で説明したように、ワークレジスタ520のウィンドウWnをマスタレジスタ510に返却する。すなわち、制御部300は、n番のウィンドウWnをワークレジスタ520からマスタレジスタ510に書き戻すコミットを実行する。これにより、SAVE命令は、終了する。
なお、マスタレジスタ510が出力したウィンドウWn+1にエラーが含まれている場合、演算処理装置100は、SAVE命令の通常動作であるステップS200、S210の処理を実行する前に、ステップS300−S340の処理(エラー訂正等)を実行する。
ステップS300では、論理積回路550等は、図6で説明したように、マスタレジスタ510が出力したエラーデータの全てのビットを0で上書きする。これにより、全てのビットが0のダミーデータが、ウィンドウWn+1のデータとして、ワークレジスタ520に転送される。
ステップS310では、制御部300は、図6で説明したように、アップデートバッファ560に保持された加算結果をウィンドウWn+1に書き込むコミットを停止するとともに、演算部600による演算を停止する。これにより、実行中の命令は中断する。
マスタレジスタ510からワークレジスタ520へのデータ転送時にエラー検出部530によるエラーの判定が実行されるため、SAVE命令中の加算結果がコミットされる前に、ウィンドウWn+1のエラーは検出される。このため、ウィンドウWnのデータを使用した演算結果をウィンドウWn+1に書き込むコミットを停止することができ、ウィンドウWn+1が更新されることを防止できる。コミットはインオーダで実行されるため、n番のウィンドウWnのデータを使用した演算結果のコミットは、n+1番のウィンドウWn+1のデータを使用した演算結果のコミットに追い越させることは無い。
ステップS320では、制御部300は、図6で説明したように、ワークレジスタ520のウィンドウWnをマスタレジスタ510に返却し、ワークレジスタ520のウィンドウWn+1を破棄する。
ステップS330では、エラー訂正部540は、図6で説明したように、マスタレジスタ510に保持されたデータのエラーを訂正する。
ステップS340では、制御部300は、マスタレジスタ510のウィンドウWnをワークレジスタ520に転送して、SAVE命令が発行される前の状態を再現する。そして、制御部300は、SAVE命令から命令を再実行する。したがって、ステップS340の処理が実行された後、演算処理装置100の動作は、ステップS100に戻る。なお、演算処理装置100の動作は、図7に示す例に限定されない。
図8は、図2に示した演算処理装置100のパイプライン処理の一例を示す。なお、図8は、ワークレジスタ520で使用されているウィンドウWの番号がnのとき(カレントウィンドウWがウィンドウWnの場合)にSAVE命令が発行された場合のパイプライン処理を示す。
図8に示した符号P、PT、B1、B2、Xは、各パイプラインステージのサイクルを示す。例えば、Pサイクルでは、実行部400に投入される命令(マルチフロー命令では、フロー)が決定される。PTサイクルでは、Pサイクルで決定された命令が実行部400に投入される。B1、B2サイクルでは、演算に必要なデータが決定される。Xサイクルでは、実行部400が命令を実行する。Uサイクルでは、アップデートバッファ560への演算結果の書き込みが実行される。
Cサイクルでは、命令(またはフロー)を完了させるコミットが実行される。例えば、SAVE命令のフロー1のCサイクルでは、演算結果をワークレジスタ520に書き込むコミットが実行され、フロー2のCサイクルでは、ウィンドウWnをワークレジスタ520からマスタレジスタ510に書き戻すコミットが実行される。
また、図8の白抜きの星印は、エラー検出処理(例えば、図4に示したエラー検出部530またはエラー検出部532で実行されるエラー検出処理)でエラーが検出されないことを示し、黒色の星印は、エラー検出処理でエラーが検出されたことを示す。
例えば、図8に示すケース1は、ウィンドウWn+1にエラーが含まれていない場合のパイプライン処理を示し、ケース2は、ウィンドウWn+1にエラーが含まれている場合のパイプライン処理を示す。比較例は、マスタレジスタ510からワークレジスタ520へのデータ転送時にエラーの判定処理を実行せずに、第2レジスタ部12から演算部13へのデータ転送時にエラーの判定処理を実行する演算処理装置のパイプライン処理を示す。なお、比較例では、ウィンドウWn+1にエラーが含まれている。
先ず、ケース1について説明する。
時間T1では、SAVE命令のフロー1のPサイクルの処理が実行される。なお、SAVE命令のフロー1は、例えば、演算結果をワークレジスタ520のウィンドウWn+1に書き込むまでのフローである。また、SAVE命令のフロー1のPサイクルでは、マスタレジスタ510からワークレジスタ520へのウィンドウWn+1の転送が開始され、エラー検出部530によるエラー検出処理が実行される。
時間T2では、SAVE命令のフロー1のPTサイクルの処理が実行され、SAVE命令のフロー2のPサイクルの処理が実行される。なお、SAVE命令のフロー2は、例えば、ウィンドウWnをワークレジスタ520からマスタレジスタ510に書き戻すフローである。また、時間T2では、エラー検出処理が終了し、マスタレジスタ510から出力されたウィンドウWn+1にエラーが含まれていないと判定される。
時間T3では、SAVE命令のフロー1のB1サイクルの処理が実行され、SAVE命令のフロー2のPTサイクルの処理が実行され、SAVE命令の次の命令である命令1のPサイクルの処理が実行される。なお、命令1(SAVE命令の次の命令)では、例えば、ウィンドウWn+1に保持されたデータがXサイクルの処理で使用される。
時間T4では、SAVE命令のフロー1のB2サイクルの処理が実行され、命令1のPTサイクルの処理が実行される。
時間T5では、SAVE命令のフロー1のXサイクルの処理が実行され、命令1のB1サイクルの処理が実行される。例えば、SAVE命令のフロー1のXサイクルでは、エラー検出部532によるエラー検出処理が終了し、ワークレジスタ520のウィンドウWnから出力されたデータにエラーが含まれていないと判定される。そして、演算部600は、ウィンドウWnに保持されたデータを加算する演算を実行する。
時間T6では、SAVE命令のフロー1のUサイクルの処理が実行され、命令1のB2サイクルの処理が実行される。例えば、SAVE命令のフロー1のUサイクルでは、ウィンドウWnに保持されたデータを加算する演算の結果がアップデートバッファ560に書き込まれる。
時間T7では、SAVE命令のフロー1のCサイクルの処理が実行され、命令1のXサイクルの処理が実行される。例えば、SAVE命令のフロー1のCサイクルでは、アップデートバッファ560に保持された演算結果(ウィンドウWnに保持されたデータを加算する演算の結果)をワークレジスタ520に書き込むコミットが実行される。これにより、SAVE命令のフロー1は終了する。
また、命令1のXサイクルでは、例えば、エラー検出部532によるエラー検出処理が終了し、ワークレジスタ520のウィンドウWn+1から出力されたデータにエラーが含まれていないと判定される。そして、演算部600は、ウィンドウWn+1に保持されたデータを用いた演算を実行する。
時間T8では、SAVE命令のフロー2のCサイクルの処理が実行され、命令1のUサイクルの処理が実行される。例えば、SAVE命令のフロー2のCサイクルでは、ウィンドウWnをワークレジスタ520からマスタレジスタ510に書き戻すコミットが実行される。これにより、ワークレジスタ520のウィンドウWnがマスタレジスタ510に返却され、SAVE命令のフロー2は終了する。すなわち、SAVE命令が終了する。
時間T9では、命令1のCサイクルの処理が実行される。これにより、命令1は、終了する。ケース1では、ウィンドウWn+1にエラーが含まれていないため、SAVE命令および命令1(SAVE命令の次の命令)は、再実行されることなく、正常に終了する。
次に、ケース2について説明する。ケース1で説明した処理と同様な処理については、詳細な説明を省略する。
時間T1では、SAVE命令のフロー1のPサイクルの処理が実行される。SAVE命令のフロー1のPサイクルでは、マスタレジスタ510からワークレジスタ520へのウィンドウWn+1の転送が開始され、エラー検出部530によるエラー検出処理が実行される。
時間T2では、SAVE命令のフロー1のPTサイクルの処理が実行され、SAVE命令のフロー2のPサイクルの処理が実行される。また、時間T2では、マスタレジスタ510から出力されたウィンドウWn+1のエラーが検出される。このため、制御部300は、SAVE命令のフロー1のコミットを停止する制御を実行する。また、論理積回路550は、ダミーデータ(例えば、全て0のデータ)を、ウィンドウWn+1のデータとして、ワークレジスタ520に転送する。
時間T3では、SAVE命令のフロー1のB1サイクルの処理が実行され、SAVE命令のフロー2のPTサイクルの処理が実行され、命令1(SAVE命令の次の命令)のPサイクルの処理が実行される。
時間T4では、SAVE命令のフロー1のB2サイクルの処理が実行され、命令1のPTサイクルの処理が実行される。
時間T5では、SAVE命令のフロー1のXサイクルの処理が実行され、命令1のB1サイクルの処理が実行される。例えば、SAVE命令のフロー1のXサイクルでは、ワークレジスタ520のウィンドウWnから出力されたデータにエラーが含まれていないと判定される。そして、演算部600は、ウィンドウWnに保持されたデータを加算する演算を実行する。
時間T6では、SAVE命令のフロー1のUサイクルの処理が実行され、命令1のB2サイクルの処理が実行される。例えば、SAVE命令のフロー1のUサイクルでは、ウィンドウWnに保持されたデータを加算する演算の結果がアップデートバッファ560に書き込まれる。
時間T7では、命令1のXサイクルの処理が実行される。なお、SAVE命令のフロー1のCサイクルの処理は、制御部300がSAVE命令のフロー1のコミットを停止する制御を実行したため、実行されない。
また、命令1のXサイクルでは、例えば、演算部600は、ワークレジスタ520のウィンドウWn+1から出力されるダミーデータを用いて演算を実行する。ワークレジスタ520のウィンドウWn+1から出力されるデータがダミーデータであるため、エラー検出部532は、ワークレジスタ520のウィンドウWn+1から出力されたデータにエラーが含まれていないと判定する。このように、ワークレジスタ520のウィンドウWn+1が保持するデータをダミーデータに置き換えることにより、エラーが演算部600等に伝搬することを防止できる。
時間T8では、命令1のUサイクルの処理が実行される。なお、SAVE命令のフロー1のコミットが停止したため、SAVE命令のフロー2のコミットは実行されない。コミットはインオーダで実行されるため、n番のウィンドウWnのデータを使用した演算結果のコミットは、n+1番のウィンドウWn+1のデータを使用した演算結果のコミットに追い越させることは無い。
時間T9から時間Tjでは、制御部300は、演算部600による演算を中止させるとともに、マスタレジスタ510に保持されたデータのエラーを訂正するエラー訂正をエラー訂正部540に実行させる。これにより、マスタレジスタ510に保持されたデータは、正常なデータに訂正される。マスタレジスタ510に保持されたデータのエラーが訂正された後(例えば、時間Tj+1以降)に、命令が再実行される。
時間Tj+1では、SAVE命令が再実行される。例えば、SAVE命令のフロー1のPサイクルの処理が実行される。
時間TJ+2では、SAVE命令のフロー1のPTサイクルの処理が実行され、SAVE命令のフロー2のPサイクルの処理が実行される。エラーが訂正されているため、マスタレジスタ510から出力されたウィンドウWn+1にエラーが含まれていないと判定される。
時間Tj+3以降の処理は、ケース1の時間T3以降の処理と同一または同様である。ケース2では、マスタレジスタ510からワークレジスタ520へのデータ転送時(例えば、時間T2)にエラーが検出されるため、SAVE命令のフロー1のコミットを停止することができる。このため、マスタレジスタ510に保持されたデータのエラーを訂正して命令(SAVE命令および命令1)を再実行することができる。エラー訂正後の命令の再実行により、SAVE命令および命令1(SAVE命令の次の命令)を正常に終了させることができる。
なお、比較例では、エラー検出処理は、マスタレジスタ510からワークレジスタ520へのデータ転送時(例えば、時間T2)に実行されずに、時間T7に実行される。
例えば、比較例の時間T7では、SAVE命令のフロー1のCサイクルの処理が実行され、命令1(SAVE命令の次の命令)のXサイクルの処理が実行される。例えば、命令1のXサイクルでは、ワークレジスタ520から出力されたウィンドウWn+1のエラーが検出される。このため、SAVE命令のフロー1のコミットを停止させる制御が実行される。なお、図8の比較例では、時間T7において、SAVE命令のフロー1のCサイクルの処理が実行されたため、SAVE命令のフロー1のコミットの停止は、間に合わない。したがって、アップデートバッファ560に保持された演算結果(ウィンドウWnに保持されたデータを加算する演算の結果)がワークレジスタ520に書き込まれ、SAVE命令のフロー1は終了する。
比較例の時間T8では、SAVE命令のフロー2のCサイクルの処理が実行され、SAVE命令が終了する。比較例では、SAVE命令のフロー1のコミットの停止が間に合わなかったため、SAVE命令を再実行することはできない。SAVE命令が再実行されない場合、SAVE命令の次の命令である命令1は、再実行されない。なお、マスタレジスタ510に保持されたデータのエラーを訂正して、命令1を再実行した場合、SAVE命令が再実行されないため、SAVE命令により実行された演算の結果は、再現されない。
これに対し、演算処理装置100では、ケース2で説明したように、マスタレジスタ510からワークレジスタ520へのデータ転送時に実行するエラー検出処理の結果に基づいて、SAVE命令のフロー1のコミットを停止する。このため、比較例に比べて、SAVE命令のフロー1のコミットの停止が間に合わなくなる頻度を低減でき、命令が再実行されない状態になる頻度を低減できる。
以上、図2から図8に示す実施形態においても、図1に示した実施形態と同様の効果を得ることができる。例えば、エラー検出部530は、マスタレジスタ510からワークレジスタ520へのデータ転送時に、データにエラーが含まれているか否かを検出する。そして、制御部300は、エラー検出部530がデータにエラーが有ることを検出したことに基づいて、命令を中断する。これにより、演算処理装置100は、ワークレジスタ520から演算部600へのデータ転送時にエラーを検出する手法に比べて、命令の中断(コミットの停止)が間に合わなくなる頻度を低減でき、命令が再実行されない状態になる頻度を低減できる。この結果、演算処理装置100の性能が低下することを抑制できる。
さらに、エラー伝搬抑止部320および論理積回路550は、マスタレジスタ510が出力したデータのエラーをエラー検出部530が検出した場合、マスタレジスタ510が出力したエラーデータをダミーデータに置き換えてワークレジスタ520に転送する。これにより、エラーが演算部600等に伝搬することを抑止することができる。
例えば、演算部600は、ダミーデータを受けるため、エラーの発生を検出しない。このため、リトライ不可能なエラーを検出したと演算部600が制御部300等に通知することを抑止できる。これにより、エラーデータを訂正して命令を再実行することができ、演算処理装置100の性能が低下することを抑止できる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
10‥演算処理装置;11‥第1レジスタ部;12‥第2レジスタ部;13‥演算部;14‥エラー検出部;15‥制御部;16‥エラー訂正部;100‥演算処理装置;200‥記憶部;210‥データキャッシュ;300‥制御部;310‥レジスタ制御部;320‥エラー伝搬抑止部;330‥コミット停止部;340‥訂正制御部;350‥リトライ制御部;360‥演算中止部;400‥実行部;500‥レジスタファイル;510‥マスタレジスタ;520‥ワークレジスタ;530、532‥エラー検出部;540‥エラー訂正部;550‥論理積回路;560‥アップデートバッファ;570、572、574、576、578‥バッファ;700‥主記憶装置;1000‥情報処理装置

Claims (8)

  1. 命令の実行に用いるデータを保持する第1レジスタ部と、
    前記第1レジスタ部が保持するデータの一部を保持する第2レジスタ部と、
    前記第2レジスタ部が保持したデータを用いて演算を実行する演算部と、
    前記第1レジスタ部が前記第2レジスタ部に転送するデータのエラーを検出する第1エラー検出部と、
    前記第1エラー検出部がデータのエラーを検出した場合、命令の実行を中断する制御部と、
    前記第1エラー検出部がデータのエラーを検出した場合、前記第1レジスタ部が保持したデータのエラーを訂正するエラー訂正部と
    を有することを特徴とする演算処理装置。
  2. 請求項1に記載の演算処理装置において、
    前記第2レジスタ部が前記演算部に転送するデータのエラーを検出する第2エラー検出部と、
    前記第1エラー検出部がデータのエラーを検出した場合、前記第1エラー検出部で検出されたエラーデータが前記演算部に伝達される前に、前記第2エラー検出部でエラーと判定されないダミーデータに前記エラーデータを置き換える置換部と
    をさらに有することを特徴とする演算処理装置。
  3. 請求項2に記載の演算処理装置において、
    前記置換部は、前記第1レジスタ部から出力された前記エラーデータを前記ダミーデータに置き換えて前記第2レジスタ部に転送することを特徴とする演算処理装置。
  4. 請求項2に記載の演算処理装置において、
    前記置換部は、前記第2レジスタ部から出力された前記エラーデータを前記ダミーデータに置き換えて前記演算部に転送することを特徴とする演算処理装置。
  5. 請求項1ないし請求項4のいずれか1項に記載の演算処理装置において、
    前記制御部は、前記エラー訂正部が前記第1レジスタ部に保持されたデータのエラーを訂正した後に、中断した命令を再実行させることを特徴とする演算処理装置。
  6. 請求項1ないし請求項5のいずれか1項に記載の演算処理装置において、
    前記制御部は、前記第1エラー検出部がデータのエラーを検出した場合、前記演算部による演算を停止させることで命令の実行を中断することを特徴とする演算処理装置。
  7. 請求項1ないし請求項6のいずれか1項に記載の演算処理装置において、
    前記制御部は、前記第1エラー検出部がデータのエラーを検出した場合、前記演算部による演算の結果を前記第2レジスタ部に書き込むコミットを停止して命令の実行を中断することを特徴とする演算処理装置。
  8. 命令の実行に用いるデータを保持する第1レジスタ部と、前記第1レジスタ部が保持するデータの一部を保持する第2レジスタ部と、前記第2レジスタ部が保持したデータを用いて演算を実行する演算部とを有する演算処理装置の制御方法において、
    前記演算処理装置が有する第1エラー検出部が、前記第1レジスタ部が前記第2レジスタ部に転送するデータのエラーを検出し、
    前記演算処理装置が有する制御部が、前記第1エラー検出部がデータのエラーを検出した場合、命令の実行を中断し、
    前記演算処理装置が有するエラー訂正部が、前記第1エラー検出部がデータのエラーを検出した場合、前記第1レジスタ部が保持したデータのエラーを訂正する
    ことを特徴とする演算処理装置の制御方法。
JP2015144938A 2015-07-22 2015-07-22 演算処理装置および演算処理装置の制御方法 Active JP6582666B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015144938A JP6582666B2 (ja) 2015-07-22 2015-07-22 演算処理装置および演算処理装置の制御方法
US15/205,507 US10176031B2 (en) 2015-07-22 2016-07-08 Arithmetic processing device and method of controlling arithmetic processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015144938A JP6582666B2 (ja) 2015-07-22 2015-07-22 演算処理装置および演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2017027351A true JP2017027351A (ja) 2017-02-02
JP6582666B2 JP6582666B2 (ja) 2019-10-02

Family

ID=57836198

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015144938A Active JP6582666B2 (ja) 2015-07-22 2015-07-22 演算処理装置および演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US10176031B2 (ja)
JP (1) JP6582666B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11379308B2 (en) * 2018-12-10 2022-07-05 Zoox, Inc. Data processing pipeline failure recovery
US11507453B2 (en) * 2020-10-20 2022-11-22 Micron Technology, Inc. Low-latency register error correction

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000305782A (ja) * 1999-04-22 2000-11-02 Matsushita Electric Ind Co Ltd 演算装置
WO2008152728A1 (ja) * 2007-06-15 2008-12-18 Fujitsu Limited エラー訂正方法および演算器

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5604753A (en) * 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for performing error correction on data from an external memory
US7370230B1 (en) * 2004-01-08 2008-05-06 Maxtor Corporation Methods and structure for error correction in a processor pipeline
US7673190B1 (en) * 2005-09-14 2010-03-02 Unisys Corporation System and method for detecting and recovering from errors in an instruction stream of an electronic data processing system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000305782A (ja) * 1999-04-22 2000-11-02 Matsushita Electric Ind Co Ltd 演算装置
WO2008152728A1 (ja) * 2007-06-15 2008-12-18 Fujitsu Limited エラー訂正方法および演算器

Also Published As

Publication number Publication date
US10176031B2 (en) 2019-01-08
US20170024268A1 (en) 2017-01-26
JP6582666B2 (ja) 2019-10-02

Similar Documents

Publication Publication Date Title
JP5129450B2 (ja) 情報処理装置
US8732550B2 (en) Processor and error correcting method
JP5147564B2 (ja) レジスタ状態エラー回復および再開機構
US20060190702A1 (en) Device and method for correcting errors in a processor having two execution units
US8935678B2 (en) Methods and apparatus to form a resilient objective instruction construct
JPH02257219A (ja) パイプラインプロセッサ装置および方法
JPH07248897A (ja) コンピュータ・システムにおける例外からの回復方法、及びそのための装置
WO2006039595A2 (en) Executing checker instructions in redundant multithreading environments
US9348681B2 (en) Apparatus and method for detecting fault of processor
US20190121689A1 (en) Apparatus and method for increasing resilience to faults
JP6582666B2 (ja) 演算処理装置および演算処理装置の制御方法
JP2011048681A (ja) プロセッサ
JPS6218057B2 (ja)
US8516303B2 (en) Arithmetic device for concurrently processing a plurality of threads
US7447941B2 (en) Error recovery systems and methods for execution data paths
US10289332B2 (en) Apparatus and method for increasing resilience to faults
JP5843804B2 (ja) 演算装置およびエラー処理方法
US20110167296A1 (en) Register file soft error recovery
JP5540697B2 (ja) 演算処理装置、情報処理装置および演算処理装置の制御方法
JP3240660B2 (ja) データ処理装置
WO2023022035A1 (ja) プロセッサ
JP2009238168A (ja) マイクロプロセッサ
JP3667703B2 (ja) エラー訂正制御回路
CN108572881A (zh) 一种在运算器中校验数据的方法
JPH07219771A (ja) 命令プロセッサ

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7426

Effective date: 20170803

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20170803

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20170804

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20180214

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20180219

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20180219

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180413

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190226

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190423

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190806

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190819

R150 Certificate of patent or registration of utility model

Ref document number: 6582666

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150