説明

演算回路及び演算方法並びに情報処理装置

【課題】より少ない回路量で数値的に大きな誤差をもつエラーを効率的に検出する浮動小数点演算回路を提供する。
【解決手段】上記課題を解決するために、浮動小数点演算回路に、第1の演算結果を出力する第1の演算器101と、第2の演算結果を出力する第2の演算器102と、第1の演算結果と第2の演算結果とについて所定ビット幅の比較を行う比較回路103と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、浮動小数点演算時に発生するエラーを訂正することができる演算回路及び演算方法並びに情報処理装置に関する。
【背景技術】
【0002】
半導体製造プロセスの進歩にともなう微細化により、例えば、半導体に用いる配線幅の縮小化も進んでいる。その結果、半導体の高集積化が進む一方で、回路の誤作動の確率も増加している。
【0003】
特に、大規模な科学技術計算を行うスーパーコンピュータでは、多数の浮動小数点演算器が用いられ、アルファ線や宇宙線起因の中性子の衝突により浮動小数点演算器の一つで誤動作が発生し計算結果が誤る危険性が増加する。
【0004】
例えば、浮動小数点演算器1個の故障率を10FIT(Failure In Time:1億時間に1回の故障が発生する率)としても、100万個の浮動小数点演算器を用いるスーパーコンピュータでは、100時間に1回の頻度で、いずれかの浮動小数点演算器にエラーが発生することになる。
【0005】
浮動小数点演算器のエラーを検出する方法としては、2つの同一の演算器を並列に動作させ、両者の結果を比較する方法がある。しかし、通常の2倍の演算器や比較回路が必要となるので回路量が大幅に増加してしまい、多数の浮動小数点演算器を必要とするスーパーコンピュータにとっては負担が大きくなってしまう。
【0006】
また、加算器ではパリティ予測、乗算器ではModulo 3剰余チェックを行うなどの方法により、浮動小数点演算器の主要部分のエラーを検出することもできる。しかし、パリティチェックでは偶数個の出力ビットが誤るエラーは検出できない。また、Modulo 3剰余チェックでは同一の剰余となるエラーは検出できない。さらに、これらのチェックを行うためには演算器自体の20%を超える量の回路をエラー検出のために追加しなくてはならない。
【0007】
特許文献1には、丸め・桁合わせ器の出力と下位mビットの出力を選択的に出力して観測することにより、2進乗算器の下位に位置するゲートの故障を検出しやすくする浮動小数点演算器について開示されている。
【特許文献1】特開平06−083591号公報
【発明の開示】
【発明が解決しようとする課題】
【0008】
以上に説明したように、なるべく少ない回路量で、浮動小数点演算で問題となるエラーを高い確率で検出を行なう演算回路及び計算機システムが望まれており、さらに、エラーが検出された場合には,その演算命令を再度実行することにより中性子の衝突などに起因する間欠エラーを訂正できる演算回路及び計算機システムが望まれている。
【0009】
本発明は、上述した問題に鑑みてなされたものであり、その解決しようとする課題は、より少ない回路量で数値的に大きな誤差をもつエラーを効率的に検出することである。
【課題を解決するための手段】
【0010】
上記課題を解決するために、本発明に係る浮動小数点演算回路は、浮動小数点形式で表
現された演算オペランドを入力し、該浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力する第1の演算器と、前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力する第2の演算器と、前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットから前記第2のデータ幅について比較を行う比較回路と、を有する。
【0011】
本発明によると、比較回路が第1の演算結果と第2の演算結果の仮数部について、それぞれの所定ビットから第2のデータ幅について比較を行うので、比較の結果に応じて第1の演算結果が正しいか否かを判定することが可能となる。
【0012】
また、第2の演算器は、記浮動小数点形式における仮数部に第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力する演算器なので、より少ない回路量で第1の演算結果が正しいか否かを判定することが可能となる。
【0013】
さらに、第2の演算結果は、第1のデータ幅よりも小さい第2のデータ幅を有するので、第1の演算結果と第2の演算結果とで一定以上に大きい誤差がある場合には比較の結果から確実に検出することが可能となる。
【発明の効果】
【0014】
以上に説明したように、本発明によると、より少ない回路量で数値的に大きな誤差をもつエラーを効率的に検出することが可能となる。
【発明を実施するための最良の形態】
【0015】
以下、本発明の実施の形態について図1〜図10に基づいて説明する。
図1は、本発明の実施例に係る浮動小数点演算回路100の概要を説明する図である。
図1に示す浮動小数点演算回路100は、第1の演算結果を出力する第1の演算器101と、第2の演算結果を出力する第2の演算器102と、第1の演算結果と第2の演算結果とについて所定ビット幅だけ比較する比較回路103と、を備える。
【0016】
第1の演算器101は、浮動小数点形式で表現された演算オペランドが入力されると、第1の演算結果を出力する。第1の演算結果は浮動小数点形式のデータであり、その仮数部は第1のデータ幅(例えば、52ビット幅)を有する。以下、この第1の演算結果を構成する符号部、指数部及び仮数部を、それぞれ第1の符号部、第1の指数部及び第1の仮数部という。ただし、本実施例に係る第1の符号部、指数部及び仮数部は、丸め処理が施されていないものとする。
【0017】
第2の演算器102は、第1の演算器101と同じ演算オペランドが入力される。そして、第2の演算結果を出力する。第2の演算結果も浮動小数点形式のデータであり、その仮数部には第2のデータ幅を有する。ここで、第2のデータ幅は、第1のデータ幅よりも小さいデータ幅(例えば、4ビット幅)とする。したがって、第2の演算器102は、第1の演算器101より回路量が少ない。
【0018】
以下、この第2の演算結果を構成する符号部、指数部及び仮数部を、それぞれ第2の符号部、第2の指数部及び第2の仮数部という。
比較回路103は、第1の演算結果と第2の演算結果とについて第2のデータ幅だけ比較し、比較結果を出力する。
【0019】
以下、本発明の実施例に係る浮動小数点演算回路100の具体例として倍精度浮動小数点演算回路について説明する。ただし、本発明を倍精度浮動小数点演算回路に限定する趣
旨ではない。例えば、単精度浮動小数点演算回路等についても本発明は適用可能なのは当然である。
【0020】
なお、以下の説明では、本実施例に係る浮動小数点演算回路100への入力データは、IEEE(Institute of Electrical and Electronic Engineers)754に基づく倍精度浮動小数点形式のデータとする。そして、符号部S1(1ビット幅)と指数部E1(11ビット幅)と仮数部F1(52ビット幅)とで構成される第1の演算オペランドと、符号部S2(1ビット幅)と指数部E2(11ビット幅)と仮数部F2(52ビット幅)とで構成される第2の演算オペランドを入力データとする。
【0021】
したがって、本実施例に係る浮動小数点演算回路100(すなわち、第1の演算器101)の出力も、IEEE754に基づく倍精度浮動小数点形式のデータであり、符号部SIGN(1ビット)と指数部EXP(11ビット幅)と仮数部FRAC(52ビット幅)とで構成される出力データとする。
【0022】
(第1の実施例)
図2は、本発明の第1の実施例に係る第1の演算器101の具体的な構成例を示す図である。
【0023】
図2に示す第1の演算器101は、仮数部F1とF2の和を求める加算器201と、指数部E1とE2の差を求める引算器202と、指数部E1とE2の差を絶対値に変換する変換器203と、その絶対値に応じて仮数部をシフトする右シフタ204と、指数部E1とE2の差の正負に応じて出力を切替える切替器205〜207と、符号部S1とS2の排他的論理和を求める排他的論理和演算器208と、加算器201の出力値を絶対値に変換する変換器209と、最上位ビットからみて最初に1を持つビット位置を検出するビット位置検出器210と、検出したビット位置が最上位となるように左シフトを行うビット位置調整器211と、丸め処理を行う丸め処理器212と、符号部S1とS2と加算器201および引算器202の出力値の符号とから符号部SIGNを決定するデコーダ213と、指数部E1またはE2とビット位置検出器210およびビット位置調整器211との差を求める引算器214と、を備える倍精度浮動小数点加算器である。
【0024】
加算処理では、指数部E1とE2の桁を合わせる必要がある。そのため、引算器202は、指数部E1とE2の差を求める。そして、その結果に応じて、右シフタ203は仮数部F2を右シフトする。
【0025】
ここで、指数部E1とE2の差が負の値となる場合には、仮数部F1を右にシフトする必要があるので、引算器202の結果の正負に応じて、切替器205及び206の出力を切替えて、右シフタ203及び加算器201への入力(仮数部F1またはF2)を切替える。
【0026】
加算器201は、2つの演算オペランドの仮数部(52ビット)に最上位の”1”を復元して53ビット幅のデータの加算を行い、54ビット幅のデータを出力する加算器である。なお、加算器201は、排他的論理和演算器201の出力値に応じて加算または引算を行う。符号部S1とS2が同じ場合は加算を行い、異なる場合は引算を行う。
【0027】
仮数部F1とF2は常に正の値であるので、変換器209は、加算器201の出力値の絶対値をとって正の数に揃える。ビット位置検出器210は、正の数となった加算結果の最上位ビットからみて最初に”1”を持つビット位置を検出し、ビット位置調整器211に出力する。
【0028】
ビット位置調整器211は、変換器209から入力される加算結果を左シフトし、ビット位置検出器210が検出したビット位置を最上位ビットの位置にシフトする。この左シフト分を指数部EXPに反映するために、ビット位置検出器210が検出したビット位置は、引算器214にも入力される。
【0029】
丸め処理器212は、ビット位置調整器211から出力された値について丸め処理を行う。なお、この丸め処理は、IEEE754に基づく丸め処理であるので詳細は省略する。
【0030】
引算器214は、仮数部(E1またはE2)からビット位置検出器210の出力値及び丸め処理器212によるシフト分を差し引いて桁合わせを行う。
デコーダ213は、符号部(S1、S2)と引算器202の出力値の符号と加算器201の出力値の符号とから符号部SIGNを計算する。
【0031】
以上の処理によって、第1の演算オペランドと第2の演算オペランドとの加算結果(符号部SIGN、指数部EXP、仮数部FRAC)が求められる。また、本実施例では、デコーダ213、切替器207および変換器209の出力値を、それぞれ第1の符号部、第1の指数部および第1の仮数部として使用する。
【0032】
図3は、本発明の第1の実施例に係る第2の演算器102及び比較回路103の具体的な構成例を示す図である。
なお、第2の演算器102には、第1の演算器101と同様に、第1及び第2の演算オペランドが入力されるが、仮数部は上位4ビットのみを使用する。図3の説明では、符号部S1(1ビット幅)と指数部E1(11ビット幅)と仮数部f1(4ビット幅)とで構成される第1の演算オペランドと、符号部S2(1ビット幅)と指数部E2(11ビット幅)と仮数部f2(4ビット幅)とで構成される第2の演算オペランドを入力データとする。
【0033】
図3に示す第2の演算器102は、仮数部f1とf2の和を求める加算器301と、指数部E1とE2の差を求める引算器202と、指数部E1とE2の差を絶対値に変換する変換器203と、その絶対値に応じて仮数部をシフトする右シフタ302と、指数部E1とE2の差の正負に応じて出力を切替える切替器205〜207と、符号部S1とS2の排他的論理和を求める排他的論理和演算器208と、加算器201の出力値を絶対値に変換する変換器303と、を備える倍精度浮動小数点加算器である。
【0034】
第1の演算器101と同様に、右シフタ302は、引算器202が算出する指数部E1とE2の差に応じて仮数部f2を右シフトする。また、引算器202の出力値の正負に応じて、切替器205及び206の出力を切替えて、加算器301及び右シフタ302への入力(仮数f1またはf2)を切替える。
【0035】
加算器301は、例えば、5ビット幅のデータを出力する加算器である。なお、加算器301は、第1の演算器と同様に、排他的論理和演算器208の信号に応じて、加算または引算が行われる。変換器303は、加算器301の出力値の絶対値をとって正の数に揃える。
【0036】
デコーダ213は、符号部S1とS2と引算器202及び加算器201の出力値の符号とから第2の符号部を算出する。
以上の処理によって、第1の演算オペランドと第2の演算オペランドとの加算処理が行われ、第2の演算結果が算出される。本実施例では、デコーダ213、切替器207およ
び変換器303の出力値を、それぞれ第2の符号部、第2の指数部および第2の仮数部として使用する。
【0037】
図3に示す比較回路103は、第1の仮数部と第2の仮数部とを比較して誤差が一定範囲内か否かを判定する略一致検出器304と、第1の指数部と第2の指数部とを比較して不一致を検出する不一致検出器305と、第1の符号部と第2の符号部とを比較して不一致を検出する不一致検出器306と、略一致検出器304、不一致検出器305及び306の出力値について論理和を求めてエラーを検出する論理和演算器307と、を備える。
【0038】
第1の仮数部と第2の仮数部は、略一致検出器304に入力される。ここで、第2の演算結果における仮数部は、その最下位1ビット(1LSB:Least Significant Bit)分のエラーを含むことは避けられない。そのため、正しい精度で計算が行われた場合でも1LSBだけ異なる場合がある。以下、この時の誤差を「1LSBの誤差」という。
【0039】
そこで、本実施例に係る比較回路103では、完全な一致検出回路ではなく、1LSBの誤差を許容する比較を行う略一致検出器304を使用する。なお、誤差の範囲を大きくする場合、例えば、最下位2ビット分のエラー分を許容する場合には、略一致検出器304の入力データを1ビット減じてLSBを除く上位ビットを比較することにより2LSBの誤差を許容する比較を行うこともできる。詳しくは図5で後述する。
【0040】
第1の仮数部と第2の仮数部は、略一致検出器304に入力される。略一致検出器304は、両仮数部の誤差が一定範囲内にあるか否かを判定する。例えば、誤差が一定範囲(1LSBの誤差の範囲)内にある場合には一致と判定し、一定範囲(1LSBの誤差の範囲)内にない場合には不一致と判定する。なお、具体的な構成例については、図6で説明する。
【0041】
第1の指数部と第2の指数部は、不一致検出器305に入力される。不一致検出器305は、ビットごとの排他的論理和をとり,その出力にたいして論理和演算を行うことによって両指数部の一致・不一致を判定する。同様に、第1の符号部と第2の符号部は、不一致検出器306に入力される。そして、不一致検出器306は、排他的論理和演算を行うことによって両符号部の一致・不一致を判定する。
【0042】
略一致検出器304、不一致検出器305及び306の出力は、論理和演算器307に入力される。例えば、略一致検出器304、不一致検出器305及び306がそれぞれ不一致を検出した場合に1を出力すると、論理和演算器307は、略一致検出器304、不一致検出器305及び306の少なくとも1つ以上が不一致を検出した場合に1を出力する。その結果、第1の演算結果と第2の演算結果との不一致、すなわち、第1の演算器101のエラーを検出することができる。
【0043】
図4は、本発明の第1の実施例に係る略一致検出器304が行う1LSBの誤差を許容する比較を説明する図である。
図4(a)は、略一致検出器304に入力されるAとBとがLSB以外全く同じ場合を示している。例えば、Aが”11110”、Bが”11111”のような場合である。A及びBの排他的論理和をとると、その演算結果Cは、LSB以外が全て”0”(0の連続)となり、LSBのみ”1”となる。
【0044】
図4(b)は、略一致検出器304に入力されるAとBとが1LSB異なる場合を示している。例えば、Aが”10000”、Bが”01111”のように数値的には1LSBのみ異なる場合である。A及びBの排他的論理和をとると、その演算結果Cは、AとBと
が一致したビット位置では”0”(0の連続)となり、一致しないビット位置では”1”(1の連続)となる。
【0045】
図4(a)及び(b)のいずれの場合も、排他的論理和をとった演算結果Cは、上位ビットから順に”0”が連続し、”1”が現われるとその後は”1”が連続するビットパターンとなっていることが分かる。すなわち、AとBとが上述のビットパターンとなっていれば、AとBとは1LSB以下の違いであると判定できる。
【0046】
なお、演算結果Cが全て”1”のビットパターンの場合は、AとBとの誤差が1LSB分の誤差の場合であり、演算結果Cが全て”0”のビットパターンの場合は、AとBとが完全一致の場合であるので、AとBとが1LSB以下の違いである場合に含まれる。
【0047】
以下、図5〜図6を用いて比較回路103の具体的な構成例について説明する。
図5は、本発明の第1の実施例に係る比較回路103の入力部の構成例を示す図である。A0〜Anは、ビット幅がnである場合の第1の仮数部の各ビットを示し、B0〜Bnは、ビット幅がnである場合の第2の仮数部の各ビットを示している。なお、本実施例の場合には、n=4とすればよい。
【0048】
比較回路103の入力部には、排他的論理和演算回路500〜50nを備え、A0〜AnとB0〜Bnについて、それぞれ排他的論理和をとって演算結果X0〜Xnを出力する。図5に示すように、比較回路103を1LSBの誤差を許容する比較回路とする場合には、A0とB0、A1とB1、・・・、AnとBnの排他的論理和の演算結果を、それぞれX0、X1、・・・Xnとし、比較回路103を2LSBの誤差を許容する比較回路とする場合には、A1とB1、A2とB2、・・・、AnとBnの排他的論理和の演算結果を、それぞれX0、X1、・・・Xn−1とし、”0”をXnとする。
【0049】
図6は、本発明の第1の実施例に係る比較回路103の判定部の構成例を示す図である。なお、説明を簡単にするために8ビット精度(n=7)の比較回路について説明するが、これに限定する趣旨でないのは当然である。
【0050】
図5に示した演算結果X0とX1、X2とX3、X4とX5、X6とX7は、それぞれ論理積演算器601〜604と、論理和演算器611〜614に入力される。
論理積演算器601と602の出力O10とO32は、論理積演算器605に入力される。論理積演算器605は、出力O30を出力する。同様に、論理積演算器603と604の出力O54とO76は、論理積演算器606に入力される。論理積演算器606は、出力O74を出力する。
【0051】
したがって、出力Onmはmビット目からnビット目までが”1”であることを示す。
また、論理和演算器611と612の出力Z10とZ32は、論理積演算器615に入力される。論理積演算器615は、出力Z30を出力する。同様に、論理和演算器613と614の出力Z54とZ76は、論理積演算器616に入力される。論理積演算器616は、出力Z74を出力する
したがって、出力Znmはmビット目からnビット目までが”0”であることを示す。そして、以上の処理から、X0〜X7における”0”の連続と”1”の連続が求められる。
【0052】
さらに、出力Z30とZ74、Z32とZ74とX1、O10とZ74とX2、O30とZ76とX5の反転、O30とO54とX7の反転、O30とO74は、それぞれ論理積演算器621〜626に入力される。論理積演算器621〜626の出力は、反転器629〜634を介して論理積演算器635に入力される。
【0053】
以上の構成において、例えば、(1)O30=O74=1の場合には、X0〜X7が全て1であると判定できる。また、(2)X7=0、かつ、O54=O30=1、(3)Z76=X5=0、かつ、O30=1、(4)Z74=0、かつ、X2=O10=1、(5)Z74=Z32=0、かつ、X1=1の場合には、X0〜X7が上位から所定ビットまで0が連続し続いて1が連続すると判定できる。さらに、(6)Z74=Z30=0の場合には、X0〜X7が全て0である(AとBとが完全に一致する)と判定できる。
【0054】
以上の(1)〜(6)の場合に、論理積演算器635は”1”を出力する。すなわち、AとBとの誤差が1LSBより大きい場合に”1”を出力する。
その結果、比較回路103の出力(0または1)から、比較回路103に入力される第1及び第2の仮数部の誤差が1LSBの範囲である略一致か否かを判定することが可能となる。
【0055】
(第2の実施例)
図7は、本発明の第2の実施例に係る第1の演算器101の具体的な構成例を示す図である。
【0056】
図7に示す第1の演算器101は、仮数部F1とF2の積を求める乗算器701と、丸め処理を行う丸め処理器212と、指数部E1とE2の和から指数部を算出する加算器702と、符号部S1とS2の排他的論理和から符号部を算出する排他的論理和演算器703と、を備える倍精度浮動小数点乗算器である。
【0057】
乗算器701は、2つの演算オペランドの仮数部(52ビット)に最上位の”1”を復元し、53ビット幅のデータの掛け算を行う。また、加算器702は、2つの演算オペランドの指数部の足し算を行う。排他的論理和演算器703は、2つの演算オペランドの符号部の排他的論理和を求める。
【0058】
乗算器701による乗算結果は、丸め処理器212でIEEE規格にしたがった丸め処理が行われる。その結果、桁上がりが発生した場合には、加算器704で補正が行われる。
【0059】
以上の処理によって、第1の演算オペランドと第2の演算オペランドとの乗算結果(符号部SIGN、指数部EXP、仮数部FRAC)が求められる。また、本実施例では、排他的論理和演算器703、加算器702および乗算器701の出力値を、それぞれ第1の符号部、第1の指数部および第1の仮数部として使用する。
【0060】
図8は、本発明の第2の実施例に係る第2の演算器102及び比較回路103の具体的な構成例を示す図である。
なお、第1の実施例と同様に、第2の演算器102には、第1及び第2の演算オペランドが入力されるが、仮数部は上位4ビットのみを使用する。図8の説明では、符号部S1(1ビット幅)と指数部E1(11ビット幅)と仮数部f1(4ビット幅)とで構成される第1の演算オペランドと、符号部S2(1ビット幅)と指数部E2(11ビット幅)と仮数部f2(4ビット幅)とで構成される第2の演算オペランドを入力データとする。
【0061】
図8に示す第2の演算器102は、仮数部f1とf2の積を求める乗算器801と、指数部E1とE2の和から第2の指数部を算出する加算器702と、符号部S1とS2の排他的論理和から第1の符号部を算出する排他的論理和演算器804と、を備える倍精度浮動小数点乗算器である。
【0062】
乗算器801は、例えば、4+1(第2の仮数部のビット幅+1)ビットの掛け算を行う乗算器である。乗算器801は、2つの演算オペランドの仮数部(4ビット)に最上位の”1”を復元し、5ビット幅のデータの掛け算を行う。
【0063】
加算器702は、2つの演算オペランドの指数部と(−1023)の足し算を行う。排他的論理和演算器804は、2つの演算オペランドの符号部と第1の符号部との排他的論理和を求める。
【0064】
以上の処理によって、第1の演算オペランドと第2の演算オペランドとの乗算処理が行われ、第2の演算結果が算出される。本実施例では、排他的論理和演算器804、加算器702および乗算器801の出力値を、それぞれ第2の符号部、第2の指数部および第2の仮数部として使用する。
【0065】
図8に示す比較回路103は、第1の仮数部と第2の仮数部とを比較して誤差が一定範囲(2LSBの誤差の範囲)内か否かを判定する略一致検出器802と、第1の指数部と第2の指数部とを比較して不一致を検出する不一致検出器803と、第1の符号部と第2の符号部とを比較して不一致を検出する不一致検出器804と、略一致検出器802、不一致検出器803及び804の出力結果について論理和を求めてエラーを検出する論理和演算器805と、を備える。なお、第2の演算器102で使用する排他的論理和演算器804は、比較回路103で使用する不一致検出器804と共有しているが、別々に構成してもよい。
【0066】
第1の仮数部と第2の仮数部は、略一致検出器802に入力される。略一致検出器802は、第1の仮数部と第2の仮数部との誤差が一定範囲(2LSBの誤差の範囲)内にあるか否かを判定する。
【0067】
ここで、例えば、第1の演算オペランドaと第2の演算オペランドbとにそれぞれ誤差(Δa、Δb)が含まれる場合の乗算は、下記の式を計算することになる。
a*(1−Δa)*b*(1−Δb) = a*b*(1−Δa−Δb+Δa*Δb)
今、第1及び第2の仮数部が4ビットであるとすると、Δa、Δbは1/32より小さい値となる。しかし、乗算結果の誤差(Δa+Δb−Δa*Δb)は、1/16より小さい値となるが加算結果の誤差のように1/32より小さい値とならない。そこで、本実施例に係る略一致検出器802では、2LSBの誤差を許容する比較を行う略一致検出器を使用する。なお、具体的な構成例は、図5及び図6で説明したので省略する。
【0068】
第1の指数部と第2の指数部は、不一致検出器803に入力される。不一致検出器803は、ビットごとに排他的論理和をとり,それらに対して論理和演算を行うことによって両指数部の一致・不一致を判定する。第1の符号部と第1及び第2の演算オペランドの符号部S1、S2は、排他的論理和演算器804に入力され、排他的論理和が求められる。
【0069】
論理和演算器805は、略一致検出器802、不一致検出器803及び804の論理和をとる。したがって、例えば、略一致検出器802、不一致検出器803及び804がそれぞれ不一致を検出した場合に1を出力すると、論理和演算器307は、略一致検出器304、不一致検出器305及び306の少なくとも1つ以上が不一致を検出した場合に1を出力する。その結果、第1の演算結果と第2の演算結果との不一致、すなわち、第1の演算器101のエラーを検出することができる。
【0070】
第一の演算器と第二の演算器で符号と指数の計算回路は同じ規模の回路を二組必要とするが,次に述べるように,第二の演算器の仮数部の回路量は大幅に少なくなる。
一般に、加算器やシフタの回路量は、ビット幅をNとすると、およそ
【0071】
【数1】

【0072】
に比例する。したがって、例えば、52ビットの加算器201や右シフタ204と比べて、5ビットの加算器301や右シフタ302に必要な回路量は約1/20である。
したがって、第1の実施例においては、仮数部が52ビットの場合は、浮動小数点演算回路100全体の10%以下の回路量で第2の演算器102及び比較回路103を実現することができる。
【0073】
また、乗算器の回路量はおよそNの2乗に比例する。したがって、例えば、53ビットの乗算器701に比べて、5ビットの乗算器801は1/100程度の回路量で実現することができる。
【0074】
したがって、第2の実施例においては、浮動小数点演算回路100全体の2〜3%の回路量で第2の演算器102及び比較回路103を実現することができる。
なお、仮数部は省略された1.0を補うと1.0以上2.0未満である。そこで、仮数部の値を1.0とみなして第1及び第2の符号部と第1及び第2の指数部についてのみ比較を行うようにすれば、エラーを検出する精度は低下するが、例えば、加算器301や乗算器801が不要となるため必要となるハードウェアを更に減少させることができる。
【0075】
図9は、本実施例を反復集束計算に適応した場合の例を説明する図である。
図9に示すグラフは、2次方程式:Y=X*X−3*X+2のグラフである。以下、反復収束計算であるNewton Lapson法を用いてこの2次元方程式の解を求める場合について説明する。
【0076】
2次方程式Y(X)=X*X−3*X+2は、X=1とX=2でY=0となるが、これをX=0からスタートしてX=1の解を求めることを考える。
dY/dX=2*X−3であるので、X=0におけるYの傾きY’(0)=−3、Y(0)=2となる。この時、X=X−Y(0)/Y’(0)から次のXの値を求めるとX=2/3となる。同様に、X=2/3における傾きY’(2/3)=−5/3、Y(2/3)=4/9となる。次のXの値はX=14/15となるので、同様に、Y’(14/15)=−17/15、Y(14/15)=16/225となる。その次のXの値はX=254/255となる。この時、正しい解X=1との誤差は、0.4%程度に減少する。
【0077】
以上の計算から明らかなように、YやY’またはXの補正量の計算に計算エラーが生じて次のXに誤差が生じたとしても、Xが1.5未満に留まる限り反復を繰返すとX=1.0に収束することになる。
【0078】
なお、計算エラーで誤差が生じて解の値から遠ざかってしまうと反復回数が増加し計算時間が余計かかることになるが、上述した中性子などによるエラーの発生頻度は低いので全体の計算時間に与える影響は無視できる程度である。
【0079】
一方、計算エラーによる誤差が大きく、Xが1.5より大きくなってしまうと以降の反復でXの値は2.0に収束することになる。これもX*X−3*X+2=0の解であるので、この2次方程式の解としては正しいが、実際の反復収束計算では、中間での計算誤差が大きいと、意図しない点に収束してしまったり、高次のカーブでは収束点が見つからず発散してしまう場合がある。
【0080】
例えば、スーパーコンピュータ等の主要な用途となるナノやバイオ分野で用いられる第一原理計算では、各電子間の反発力を計算し、それを合計して各原子に働く力を計算し、それにより原子の位置を動かし、また、各原子に働く力を計算する、という反復により、系全体のエネルギーが最小に収束するように計算を行う。
【0081】
各原子に働く力は、他の原子全ての電子からの和であるので、一つの電子から受ける力の計算において、ハードウェアの間欠エラーが原因である程度の誤差が生じたとしても、数千、数万の電子の一つであるので、その影響は軽減される。
【0082】
このように、一般的な計算では、個々の計算において桁が大きく異なるようなエラーが発生しなければ、値として小さなエラーの影響は反復収束過程で自動的に修正されてしまうケースが多い。
【0083】
したがって、本実施例に係る浮動小数点演算回路100を用いて桁違いに大きな誤差となるエラーを検出して再実行を行うことによって、アルファ線や宇宙線起因の中性子の衝突等の固定障害でない障害に起因して発生する間欠エラーを訂正することが可能となる。
【0084】
図10は、本発明の実施例に係る浮動小数点演算回路100の再実行に必要となる構成の例を示す図である。なお、ハードウェアエラーが検出された場合の再実行に関しては、以下の文献に詳細が記載されているので、概要について説明する。
【0085】
1.H.Ando,T.Kitamura,M.Shebanow,M.Butler,US Patent 6,519,730,”Computer and error
recovery method for the same”
2.H.Ando,Y.Yoshida,A.Inoue,I.Sugiyama,T.Asakawa,K.Morita,T.Muta,T.Motokurumada,S.Okada,H.Yamashita,Y.Satsukawa,A.Konmoto,R.Yamashita,H.Sugiyama,”A 1.3−GHz fifth−generation SPARC64 microprocessor”,Solid−State Circuits,IEEE Journal,Vlume38,11.11.2003,1896−1905
図10に示す浮動小数点演算回路1000は、演算回路の実行に必要な状態を保持するプロセッサ・ステイト1001と、正しく演算が実行された時の状態を格納するチェックポイント・アレイ1002と、最後に正しく実行を完結した状態を格納しているエントリを指すコミット・ポインタ1003と、直前の状態を格納するエントリを指すカレント・ポインタ1004と、誤作動等が起こった場合にコミット・ポインタで指された状態をチェックポイント・アレイ1002から取り出し、プロセッサ・ステイト1001に格納することにより、その状態から実行を再開させる制御を行うバックアップ・コントロール1005と、分岐命令を取り扱うブランチ・ユニット1006と、各ユニットの誤作動を監視するエラー検出ユニット1007と、各ユニットを制御するコントロール・ユニット1008と、第1の演算器101で構成された演算実行ユニット1009と、第2の演算器102及び比較回路103で構成することにより演算実行ユニット1009の演算結果の正誤を監視するエラーチェックユニット1010と、を少なくとも備える。
【0086】
分岐先が決定する前に、方向を予測して投機的に実行を行うには、その分岐命令の実行直前の状態(プロセッサ・ステイト1001の内容)をカレント・ポインタ1004が指すチェックポイント・アレイ1002のエントリに格納する。そして、予測した分岐先の命令実行を開始する。そして、ブランチ・ユニット1006は、カレント・ポインタ1004を一つ進める。また、命令の実行完結を監視し、コミット・ポインタ1003の指す
エントリの次のエントリまで実行が完結すると、コミット・ポインタ1003を一つ進め、常に最後の実行命令の完結状態を指すように制御する。
【0087】
分岐予測ミスが発見された場合は,条件分岐命令の直前のチェックポイントをチェックポイント・アレイ1002から取り出してプロセッサ・ステイトを復元してチェックポイント直後の命令から実行を再開することにより,分岐予測の誤りを修正する。
【0088】
第1及び第2の実施例で示した処理によって、エラー検出ユニット1007がエラーを検出すると、エラー検出ユニット1007は、バックアップ・コントロール1005に誤動作を通知する。
【0089】
誤作動の通知を受けると、バックアップ・コントロール1005は、コミット・ポインタ1003で指される正しく実行を完結した状態を取り出し、プロセッサ・ステイト1001に復元する。そして、この状態から実行が再開される(再実行される)。その結果、中性子の衝突などに起因する間欠エラーを訂正することができる。この手順は,分岐予測誤りの修正と同様の手順であり,分岐予測ミスのために存在する回路を有効に利用することが出来る。
【0090】
以上に説明したように、第1の演算器101に短い精度(例えば、4ビット)の第2の演算器102と比較回路103とをエラーチェック用に追加し、第1の演算結果と第2の演算結果とが一定の誤差(例えば、1LSBの誤差)を許容する比較を行うことにより大きな数値誤差となるエラーを効率的に検出することが可能となる。さらに、検出したエラーは上述した再実行の機構を用いて訂正を行うことが可能となる。
【0091】
また、本実施例に係る第2の仮数部は4ビット幅であるので、第2の演算器102及び比較回路103は、浮動小数点演算器の場合にあっては、浮動小数点演算回路100全体の2〜3%程度の回路量、浮動小数点加算器の場合でも浮動小数点演算回路100全体の10%以下の回路量で実現することが可能となる。すなわち、従来の手法に比べてエラー検出に必要となる回路量を低減することが可能となる。
【0092】
また、演算結果の数値が何桁も異なるような、パリティチェックや剰余チェックにより浮動小数点演算器の主要部分のエラーを検出する従来の方法では検出できない間欠エラーであっても、本発明の方法では、第2の仮数部の精度より大きな誤差を確実に検出することが可能となる。
【0093】
また、反復集束計算を行う場合には、許容される数値誤差以下のエラーはその反復収束計算の過程で訂正されるので、従来のエラー検出法に比べて少ない追加回路でエラー訂正回路を実現でき、かつ、計算が収束しない、または、異常を検出せずに終了して計算結果にエラーが生じ等の問題が発生する確率を大幅に低減することが可能となる。
【0094】
(付記1) 浮動小数点形式で表現された演算オペランドを入力し、該浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力する第1の演算器と、
前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力する第2の演算器と、
前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットから前記第2のデータ幅について比較を行う比較回路とを有することを特徴とする浮動小数点演算回路。
(付記2) 前記比較回路は、
前記第1の演算結果と前記第2の演算結果の仮数部について、最上位ビットから前記第2のデータ幅についてビット毎に排他的論理和演算を行なう排他的論理和演算回路と、
該排他的論理和演算の演算結果について、所定のビットパターンであるか否かを判定し、該所定のビットパターンの場合に一致の比較結果を出力する仮数部比較回路と、を有し、
該仮数部比較回路が一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記1記載の浮動小数点演算回路。(付記3) 前記所定のビットパターンは、
全てのビットが1のビットパターン、全てのビットが0のビットパターン、または、最上位ビットから任意のビットまで0が連続し該任意のビットの次のビットから所定のビットまで1が連続するビットパターンのいずれかであることを特徴とする付記2記載の浮動小数点演算回路。
(付記4) 前記第1の演算結果と前記第2の演算結果について、それぞれの符号を比較し、該比較の結果が一致する場合に一致の比較結果を出力する符号比較回路をさらに有し、
前記仮数部比較回路と前記符号比較回路とが一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記2記載の浮動小数点演算回路。
(付記5) 前記第1の演算結果と前記第2の演算結果について、それぞれの指数部を比較し、該比較の結果が一致する場合に一致の比較結果を出力する指数部比較回路をさらに有し、
前記仮数部比較回路と前記指数部比較回路とが一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記2記載の浮動小数点演算回路。
(付記6) 前記比較回路の比較の結果に応じて前記第1の演算回路に対して演算を再実行させる再実行回路をさらに有することを特徴とする付記1記載の浮動小数点演算回路。(付記7) 浮動小数点形式で表現された演算オペランドを入力し、該浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力する第1の演算器に接続され、前記第1の演算結果の検査を行う演算検査回路において、
前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力する第2の演算器と、
前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットから前記第2のデータ幅について比較を行う比較回路とを有することを特徴とする演算検査回路。
(付記8) 前記比較回路は、
前記第1の演算結果と前記第2の演算結果の仮数部について、最上位ビットから前記第2のデータ幅についてビット毎に排他的論理和演算を行なう排他的論理和演算回路と、
該排他的論理和演算の演算結果について、所定のビットパターンであるか否かを判定し、該所定のビットパターンの場合に一致の比較結果を出力する仮数部比較回路と、を有し、
該仮数部比較回路が一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記7記載の演算検査回路。
(付記9) 前記所定のビットパターンは、
全てのビットが1のビットパターン、全てのビットが0のビットパターン、または、最上位ビットから任意のビットまで0が連続し該任意のビットの次のビットから所定のビットまで1が連続するビットパターンのいずれかであることを特徴とする付記8記載の演算検査回路。
(付記10) 前記第1の演算結果と前記第2の演算結果について、それぞれの符号を比較し、該比較の結果が一致する場合に一致の比較結果を出力する符号比較回路をさらに有し、
前記仮数部比較回路と前記符号比較回路とが一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記8記載
の演算検査回路。
(付記11) 前記第1の演算結果と前記第2の演算結果について、それぞれの指数部を比較し、該比較の結果が一致する場合に一致の比較結果を出力する指数部比較回路をさらに有し、
前記仮数部比較回路と前記指数部比較回路とが一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記8記載の演算検査回路。
(付記12) 前記比較回路の比較の結果に応じて前記第1の演算回路に対して演算を再実行させる再実行回路をさらに有することを特徴とする付記7記載の演算検査回路。
(付記13) 浮動小数点形式で表現された演算オペランドを入力し、該浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力する第1の演算回路と、
前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力する第2の演算回路と、
前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットから前記第2のデータ幅について比較を行う比較回路とを有することを特徴とする情報処理装置。
(付記14) 前記比較回路は、
前記第1の演算結果と前記第2の演算結果の仮数部について、最上位ビットから前記第2のデータ幅についてビット毎に排他的論理和演算を行なう排他的論理和演算回路と、
該排他的論理和演算の演算結果について、所定のビットパターンであるか否かを判定し、該所定のビットパターンの場合に一致の比較結果を出力する仮数部比較回路と、を有し、
該仮数部比較回路が一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記13記載の情報処理装置。
(付記15) 前記所定のビットパターンは、
全てのビットが1のビットパターン、全てのビットが0のビットパターン、または、最上位ビットから任意のビットまで0が連続し該任意のビットの次のビットから所定のビットまで1が連続するビットパターンのいずれかであることを特徴とする付記14記載の情報処理装置。
(付記16) 前記第1の演算結果と前記第2の演算結果について、それぞれの符号を比較し、該比較の結果が一致する場合に一致の比較結果を出力する符号比較回路をさらに有し、
前記仮数部比較回路と前記符号比較回路とが一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記14記載の情報処理装置。
(付記17) 前記第1の演算結果と前記第2の演算結果について、それぞれの指数部を比較し、該比較の結果が一致する場合に一致の比較結果を出力する指数部比較回路をさらに有し、
前記仮数部比較回路と前記指数部比較回路とが一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする付記14記載の情報処理装置。
(付記18) 前記比較回路の比較の結果に応じて前記第1の演算回路による演算を再実行する再実行回路をさらに有することを特徴とする付記13記載の情報処理装置。
(付記19) 第1の演算器が出力する第1の演算結果を、第2の演算器が出力する第2の演算結果を用いて検査を行う演算回路の演算方法であって、
浮動小数点形式で表現された演算オペランドを入力し、該浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力するステップと、
前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力するステップと、
前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットか
ら前記第2のデータ幅について比較を行うステップとを有することを特徴とする浮動小数点演算方法。
(付記20) 浮動小数点形式で表現された演算オペランドを入力し、浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力する第1の演算器に接続され、前記第1の演算結果の検査を行う演算検査回路の検査方法であって、
前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力するステップと、
前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットから前記第2のデータ幅について比較を行うステップとを有することを特徴とする演算検査方法。
【図面の簡単な説明】
【0095】
【図1】本発明の実施例に係る浮動小数点演算回路の概要を説明する図である。
【図2】本発明の第1の実施例に係る第1の演算器の具体的な構成例を示す図である。
【図3】本発明の第1の実施例に係る第2の演算器及び比較回路の具体的な構成例を示す図である。
【図4】本発明の第1の実施例に係る略一致検出器が行う1LSBの誤差を許容する比較を説明する図である。
【図5】本発明の第1の実施例に係る比較回路の入力部の構成例を示す図である。
【図6】本発明の第1の実施例に係る比較回路の入力部の構成例を示す図である。
【図7】本発明の第2の実施例に係る第1の演算器の具体的な構成例を示す図である。
【図8】本発明の第2の実施例に係る第2の演算器及び比較回路の具体的な構成例を示す図である。
【図9】本実施例を反復集束計算に適応した場合の例を説明する図である。
【図10】本発明の実施例に係る浮動小数点演算回路の再実行に必要となる構成の例を示す図である。
【符号の説明】
【0096】
100 浮動小数点演算回路
101 第1の演算器
102 第2の演算器
103 比較回路

【特許請求の範囲】
【請求項1】
浮動小数点形式で表現された演算オペランドを入力し、該浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力する第1の演算器と、
前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力する第2の演算器と、
前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットから前記第2のデータ幅について比較を行う比較回路とを有することを特徴とする浮動小数点演算回路。
【請求項2】
前記比較回路は、
前記第1の演算結果と前記第2の演算結果の仮数部について、最上位ビットから前記第2のデータ幅についてビット毎に排他的論理和演算を行なう排他的論理和演算回路と、
該排他的論理和演算の演算結果について、所定のビットパターンであるか否かを判定し、該所定のビットパターンの場合に一致の比較結果を出力する仮数部比較回路と、を有し、
該仮数部比較回路が一致の比較結果を出力した場合に、前記第1の演算結果と前記第2の演算結果とが一致すると判断することを特徴とする請求項1記載の浮動小数点演算回路。
【請求項3】
前記所定のビットパターンは、
全てのビットが1のビットパターン、全てのビットが0のビットパターン、または、最上位ビットから任意のビットまで0が連続し該任意のビットの次のビットから所定のビットまで1が連続するビットパターンのいずれかであることを特徴とする請求項2記載の浮動小数点演算回路。
【請求項4】
浮動小数点形式で表現された演算オペランドを入力し、該浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力する第1の演算器に接続され、前記第1の演算結果の検査を行う演算検査回路において、
前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力する第2の演算器と、
前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットから前記第2のデータ幅について比較を行う比較回路とを有することを特徴とする演算検査回路。
【請求項5】
浮動小数点形式で表現された演算オペランドを入力し、該浮動小数点形式における仮数部に第1のデータ幅を有する第1の演算結果を出力する第1の演算回路と、
前記演算オペランドを入力し、前記浮動小数点形式における仮数部に前記第1のデータ幅よりも小さい第2のデータ幅を有する第2の演算結果を出力する第2の演算回路と、
前記第1の演算結果と前記第2の演算結果の仮数部について、それぞれの所定ビットから前記第2のデータ幅について比較を行う比較回路とを有することを特徴とする情報処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2008−158822(P2008−158822A)
【公開日】平成20年7月10日(2008.7.10)
【国際特許分類】
【出願番号】特願2006−346997(P2006−346997)
【出願日】平成18年12月25日(2006.12.25)
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成17年度、文部科学省、「科学技術試験研究」委託研究、産業再生法第30条の適用を受ける特許出願
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】