JP7285966B2 - 多入力浮動小数点加算器 - Google Patents

多入力浮動小数点加算器 Download PDF

Info

Publication number
JP7285966B2
JP7285966B2 JP2021569502A JP2021569502A JP7285966B2 JP 7285966 B2 JP7285966 B2 JP 7285966B2 JP 2021569502 A JP2021569502 A JP 2021569502A JP 2021569502 A JP2021569502 A JP 2021569502A JP 7285966 B2 JP7285966 B2 JP 7285966B2
Authority
JP
Japan
Prior art keywords
bits
operand
value
mantissa
bit
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.)
Active
Application number
JP2021569502A
Other languages
English (en)
Other versions
JP2022533850A (ja
Inventor
ヤン,シン-ジョン
フェルプス,アンドリュー・エバレット
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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2022533850A publication Critical patent/JP2022533850A/ja
Application granted granted Critical
Publication of JP7285966B2 publication Critical patent/JP7285966B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • G06F7/49952Sticky bit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/504Adding; Subtracting in bit-serial fashion, i.e. having a single digit-handling circuit treating all denominations after each other
    • G06F7/5045Adding; Subtracting in bit-serial fashion, i.e. having a single digit-handling circuit treating all denominations after each other for multiple operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
    • G06F7/509Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination for multiple operands, e.g. digital integrators
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Description

背景
数値は、多くの場合、コンピュータにおいては、浮動小数点フォーマットを用いて表される。2入力加算器は、多くの場合、浮動小数点数に対して加算演算および(数値のうちの1つの補数を用いて)減算演算を実行するために用いられる。2つより多い浮動小数点数に対してそのような演算を実行するために、複数の加算器を用いて一回に2つまでの浮動小数点数を加算することができ、または複数の加算演算を単一の加算器によって実行することができる。例えば、3つの浮動小数点数を加算するために、加算器は、浮動小数点数のうちの2つを加算し、次いで、最初の2つの数の和に第3の浮動小数点数を加算することができる。
浮動小数点加算は、ビットをシフトして数値をそれらの指数に基づいて整列させるステップと、加算を実行するステップと、和を正規化するステップと、必要に応じて和を丸めるステップとを含む複数のステップを含むことができる。したがって、3つ以上の浮動小数点数を加算するために2つ以上の加算演算を実行することは、これらのステップの複数の反復をもたらし得る。複数の加算器を用いて和を並列に計算する場合、追加の加算器は、加算器を含むチップの限られた空間をより多く占有し得る。
概要
本明細書では、3個以上の浮動小数点数を加算する多入力加算器に関する技術について説明する。
一般に、本明細書で説明する主題の1つの革新的な態様は、上記多入力ハードウェア加算器によって加算されるべき3つ以上のオペランドの各々について、上記オペランドの浮動小数点表現を含むビットのセットを受けることと、各他のオペランドが整列される所与のオペランドを識別することと、上記各他のオペランドについて、当該オペランドのビットが上記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成することと、上記シフトに基づいて、上記各他のオペランドに対するスティッキー(sticky)ビットの値を決定することを含み、オペランドのスティッキービットは、非0値が、上記オペランドの仮数ビットの最下位位置および任意の精度ビット位置を越えてシフトされて、上記オペランドに対する上記シフトされたビットのセットを生成したとき、非0値を有し、さらに、各スティッキービットの値に基づいて、全体的なスティッキービット値を決定することを含み、上記全体的なスティッキービット値は、(i)他のオペランドのすべてに対するスティッキービットのすべてが0であるか、または(ii)上記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときは、いつでも0であり、上記全体的なスティッキービット値は、各非0スティッキービットのすべてが一致するか、または非0スティッキービットが1つだけあるときはいつでも、各非0スティッキービットの値に一致し、さらに、(i)上記所与のオペランドを表すビットのセット、(ii)上記各他のオペランドに対する上記シフトされたビットのセット、および(iii)上記全体的なスティッキービット値を用いて、上記3つ以上のオペランドの和を求めることを含む、方法によって、具現化され得る。この態様および他の態様の他の実現例は、本方法のアクションを実行するように構成される、対応のシステムおよび装置を含む。
これらの実現例および他の実現例は各々、いくつかの態様では、以下の特徴の1つ以上を任意選択で含むことができる。すなわち、上記3つ以上のオペランドの和を求めることは、 上記所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定することと、上記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、上記合計のビットのセットの仮数を上記隠れビットが1になるまでシフトさせることによって、上記合計のビットのセットの仮数を正規化することと、上記合計のビットのセットの仮数および上記全体的なスティッキービット値に基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断することとを含む。
いくつかの態様では、上記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、上記合計のビットのセットの仮数を正規化するために上記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、上記ビット位置の数が、上記スティッキービット以外の上記多入力加算器の精度ビット数を超えるときはいつでも、上記合計のビットのセットによって表される浮動小数点値と上記全体的なスティッキービット値とに基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるよう判断することとを含む。
いくつかの態様は、上記全体的なスティッキービット値が、非0でありかつ正規化中に上記合計のビットのセットの仮数にシフトされるときはいつでも、上記全体的なスティッキービット値を表すであろう上記合計のビットのセットの仮数のビットを0に割り当てることによって、上記全体的なスティッキービット値が正規化中に上記合計のビットのセットの仮数に含まれないようにすることを含み得る。いくつかの態様では、上記オペランドの仮数ビットを0以上のビット位置だけシフトすることは、上記オペランドの指数と上記所与のオペランドの指数との差に基づいて上記仮数ビットをシフトすることを含む。
いくつかの態様では、上記各他のオペランドが整列される所与のオペランドを識別することは、最大の指数値を有するオペランドを識別することを含む。いくつかの態様では、上記多入力加算器は、4つの浮動小数点入力を有し、上記4つの浮動小数点入力で受け取られる4つの浮動小数点値の和を求める4入力加算器である。
一般に、本明細書で説明する主題の別の革新的態様は、3つ以上の浮動小数点オペランドを受けるように構成された3つ以上の入力と加算器回路とを含む多入力ハードウェア加算器において具現化することができる。加算器回路は、上記多入力ハードウェア加算器によって加算されるべき3つ以上のオペランドの各々について、上記オペランドの浮動小数点表現を含むビットのセットを受けることを含む動作を実行するように構成され得る。加算器回路は、各他のオペランドが整列される所与のオペランドを識別し、上記各他のオペランドについて、当該オペランドのビットが上記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成することができる。加算器回路は、上記シフトに基づいて、上記各他のオペランドに対するスティッキービットの値を決定することができる。オペランドに対する上記スティッキービットは、非0値が、上記オペランドの仮数ビットの最下位位置および任意の精度ビット位置を越えてシフトされて、上記オペランドに対する上記シフトされたビットのセットを生成したとき、非0値を有することができる。加算器回路は、各スティッキービットの値に基づいて、全体的なスティッキービット値を決定することができる。上記全体的なスティッキービット値は、(i)他のオペランドのすべてに対するスティッキービットのすべてが0であるか、または(ii)上記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときは、いつでも0であることができる。全体的なスティッキービット値は、非0スティッキービットのすべてが一致するとき、または非0スティッキービットが1つだけあるときは、いつでも各非0スティッキービットの値に一致することができる。加算器回路は、(i)上記所与のオペランドを表すビットのセット、(ii)上記各他のオペランドに対する上記シフトされたビットのセット、および(iii)上記全体的なスティッキービット値を用いて、上記3つ以上のオペランドの和を求めることができる。
これらおよび他の実現例は、各々、以下の特徴のうちの1つ以上を任意選択で含むことができる。いくつかの態様では、上記3つ以上のオペランドの和を求めることは、 上記所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定することを含むことができる。上記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、上記合計のビットのセットの仮数を上記隠れビットが1になるまでシフトさせることによって、上記合計のビットのセットの仮数を正規化させることができる。加算器回路は、上記合計のビットのセットの仮数および上記全体的なスティッキービット値に基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断することができる。
いくつかの態様では、上記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、上記合計のビットのセットの仮数を正規化するために上記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、上記ビット位置の数が、上記スティッキービット以外の上記多入力加算器の精度ビット数を超えるときはいつでも、上記合計のビットのセットによって表される浮動小数点値と上記全体的なスティッキービット値とに基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるよう決定することとを含むことができる。
いくつかの態様では、上記動作は、上記全体的なスティッキービット値が、非0でありかつ正規化中に上記合計のビットのセットの仮数にシフトされるときはいつでも、上記全体的なスティッキービット値を表すであろう上記合計のビットのセットの仮数のビットを0に割り当てることによって、上記全体的なスティッキービット値が正規化中に上記合計のビットのセットの仮数に含まれないようにすることを含むことができる。
いくつかの態様では、上記動作は、上記和を求める前に、各ビットのセットを指定された数のビット位置だけ右にシフトすることを含むことができる。いくつかの態様では、上記オペランドのビットを0以上のビット位置だけシフトすることは、上記オペランドの指数と上記所与のオペランドの指数との差に基づいて上記ビットをシフトすることを含むことができる。
いくつかの態様では、上記各他のオペランドが整列される所与のオペランドを識別することは、最大の指数値を有するオペランドを識別することを含むことができる。
いくつかの態様では、上記多入力加算器は、4つの浮動小数点入力を有し、上記4つの浮動小数点入力で受け取られる4つの浮動小数点値の和を求める4入力加算器である。
一般に、本明細書で説明する主題の別の革新的態様は、3つ以上の浮動小数点オペランドを受けるように構成された3つ以上の入力を含む多入力ハードウェア加算器において具現化することができる。各入力は、オペランドの浮動小数点表現を含むビットのセットを受けるように構成され得る。多入力ハードウェア加算器は、各他のオペランドが整列される所与のオペランドを識別するように構成される指数減算およびスワップコンポーネントを含むことができる。多入力ハードウェア加算器は、1つ以上のシフタを含むことができ、上記1つ以上のシフタは、上記所与のオペランドと異なる各他のオペランドについて、当該オペランドのビットが上記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成するように構成され、上記1つ以上のシフタはさらに、上記シフトに基づいて、上記各他のオペランドに対するスティッキービットの値を決定するよう構成される。上記オペランドのスティッキービットは、非0値が、上記オペランドの仮数ビットの最下位位置および任意の精度ビット位置を越えてシフトされて、上記オペランドに対する上記シフトされたビットのセットを生成したとき、非0値を有する。多入力ハードウェア加算器は、各スティッキービットの値に基づいて、全体的なスティッキービット値を決定するように構成されたスティッキービット計算器を含むことができる。上記全体的なスティッキービット値は、(i)他のオペランドのすべてに対するスティッキービットのすべてが0であるか、または(ii)上記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときは、いつでも0である。全体的なスティッキービット値は、非0スティッキービットのすべてが一致するとき、または非0スティッキービットが1つだけあるときは、いつでも各非0スティッキービットの値に一致する。多入力ハードウェア加算器は、(i)上記所与のオペランドを表すビットのセット、(ii)上記各他のオペランドに対する上記シフトされたビットのセット、および(iii)上記全体的なスティッキービット値を用いて、上記3つ以上のオペランドの和を求めるよう構成される加算器回路を含むことができる。
これらおよび他の実現例は各々、いくつかの態様では、以下の特徴のうちの1つ以上を任意選択で含むことができる。すなわち、上記1つ以上のシフタは、非0値がオペランドに対するスティッキービットにシフトされるときはいつでも、上記スティッキービットを1の値にセットする。
いくつかの態様では、加算器回路は、所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定するようにさらに構成される。上記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、上記合計のビットのセットの仮数を上記隠れビットが1になるまでシフトさせることによって、上記合計のビットのセットの仮数を正規化させることができる。加算器回路は、上記合計のビットのセットの仮数および上記全体的なスティッキービット値に基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断することができる。
いくつかの態様では、上記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、上記合計のビットのセットの仮数を正規化するために上記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、上記ビット位置の数が、上記スティッキービット以外の上記多入力加算器の精度ビット数を超えるときはいつでも、上記合計のビットのセットによって表される浮動小数点値と上記全体的なスティッキービット値とに基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるよう決定することとを含むことができる。
いくつかの態様では、上記動作は、上記全体的なスティッキービット値が、非0でありかつ正規化中に上記合計のビットのセットの仮数にシフトされるときはいつでも、上記全体的なスティッキービット値を表すであろう上記合計のビットのセットの仮数のビットを0に割り当てることによって、上記全体的なスティッキービット値が正規化中に上記合計のビットのセットの仮数に含まれないようにすることを含むことができる。いくつかの態様では、上記オペランドの仮数ビットを0以上のビット位置だけシフトすることは、上記オペランドの指数と上記所与のオペランドの指数との差に基づいて上記仮数ビットをシフトすることを含むことができる。
一般に、本明細書で説明する主題の別の革新的な態様は、上記多入力ハードウェア加算器によって加算されるべき3つ以上のオペランドの各々について、上記オペランドの浮動小数点表現を含むビットのセットを受けることと、各他のオペランドが整列される所与のオペランドを識別することと、上記各他のオペランドについて、当該オペランドのビットが上記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成することと、上記シフトに基づいて、上記各他のオペランドに対するスティッキービットの値を判断することを含み、オペランドに対する上記スティッキービットは、非0値が、上記オペランドを表すビットのセットからシフトされて、上記オペランドに対する上記シフトされたビットのセットを生成したとき、非0値を有し、および上記オペランドの符号と一致する符号を有し、さらに、各スティッキービットの値に基づいて、全体的なスティッキービット値を決定することを含み、上記全体的なスティッキービット値は、(i)他のオペランドのすべてに対するスティッキービットのすべてが0であるか、または(ii)上記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときは、いつでも0であり、上記全体的なスティッキービット値は、各非0スティッキービットのすべてが一致するか、または非0スティッキービットが1つだけあるときはいつでも、各非0スティッキービットの値に一致し、さらに、(i)上記所与のオペランドを表すビットのセット、(ii)上記各他のオペランドに対する上記シフトされたビットのセット、および(iii)上記全体的なスティッキービット値を用いて、上記3つ以上のオペランドの和を求めることを含む、方法によって、具現化され得る。この態様および他の態様の他の実現例は、方法のアクションを実行するように構成された対応するシステムおよび装置を含む。
これらの実現例および他の実現例は各々、いくつかの態様では、以下の特徴の1つ以上を任意選択で含むことができる。すなわち、上記3つ以上のオペランドの和を求めることは、上記所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定することと、上記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、上記合計のビットのセットの仮数を上記隠れビットが1になるまでシフトさせることによって、上記合計のビットのセットの仮数を正規化することと、上記合計のビットのセットの仮数および上記全体的なスティッキービット値に基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断することとを含むことができる。
いくつかの態様では、上記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、上記合計のビットのセットの仮数を正規化するために上記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、上記ビット位置の数が、上記スティッキービット以外の上記多入力加算器の精度ビット数を超えるときはいつでも、上記合計のビットのセットによって表される浮動小数点値と上記全体的なスティッキービット値とに基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるよう決定することとを含む。
いくつかの態様は、上記全体的なスティッキービット値が、非0でありかつ正規化中に上記合計のビットのセットの仮数にシフトされるときはいつでも、上記全体的なスティッキービット値を表すであろう上記合計のビットのセットの仮数のビットを0に割り当てることによって、上記全体的なスティッキービット値が正規化中に上記合計のビットのセットの仮数に含まれないようにすることを含み得る。いくつかの態様では、上記オペランドの仮数ビットを0以上のビット位置だけシフトすることは、上記オペランドの指数と上記所与のオペランドの指数との差に基づいて上記仮数ビットをシフトすることを含む。
いくつかの態様では、上記各他のオペランドが整列される所与のオペランドを識別することは、最大の指数値を有するオペランドを識別することを含む。
いくつかの態様では、上記多入力加算器は、4つの浮動小数点入力を有し、上記4つの浮動小数点入力で受け取られる4つの浮動小数点値の和を求める4入力加算器である。
一般に、本明細書で説明する主題の別の革新的態様は、3つ以上の浮動小数点オペランドを受けるように構成された3つ以上の入力と加算器回路とを含む多入力ハードウェア加算器において具現化することができる。加算器回路は、上記多入力ハードウェア加算器によって加算されるべき3つ以上のオペランドの各々について、上記オペランドの浮動小数点表現を含むビットのセットを受けることを含む動作を実行するように構成され得る。加算器回路は、各他のオペランドが整列される所与のオペランドを識別し、上記各他のオペランドについて、当該オペランドのビットが上記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成することができる。加算器回路は、上記シフトに基づいて、上記各他のオペランドに対するスティッキービットの値を決定することができる。オペランドに対する上記スティッキービットは、非0値が、上記オペランドを表すビットのセットからシフトされて、上記オペランドに対する上記シフトされたビットのセットを生成したとき、非0値を有することができる。オペランドに対する上記スティッキービットは、上記オペランドの符号と一致する符号を有することができる。加算器回路は、各スティッキービットの値に基づいて、全体的なスティッキービット値を決定することができる。上記全体的なスティッキービット値は、(i)他のオペランドのすべてに対するスティッキービットのすべてが0であるか、または(ii)上記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときは、いつでも0であることができる。全体的なスティッキービット値は、非0スティッキービットのすべてが一致するとき、または非0スティッキービットが1つだけあるときは、いつでも各非0スティッキービットの値に一致することができる。加算器回路は、(i)上記所与のオペランドを表すビットのセット、(ii)上記各他のオペランドに対する上記シフトされたビットのセット、および(iii)上記全体的なスティッキービット値を用いて、上記3つ以上のオペランドの和を求めることができる。
これらおよび他の実現例は、各々、以下の特徴のうちの1つ以上を任意選択で含むことができる。いくつかの態様では、上記3つ以上のオペランドの和を求めることは、上記所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定することを含むことができる。上記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、上記合計のビットのセットの仮数を上記隠れビットが1になるまでシフトさせることによって、上記合計のビットのセットの仮数を正規化させることができる。加算器回路は、上記合計のビットのセットの仮数および上記全体的なスティッキービット値に基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断することができる。
いくつかの態様では、上記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、上記合計のビットのセットの仮数を正規化するために上記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、上記ビット位置の数が、上記スティッキービット以外の上記多入力加算器の精度ビット数を超えるときはいつでも、上記合計のビットのセットによって表される浮動小数点値と上記全体的なスティッキービット値とに基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるよう決定することとを含むことができる。
いくつかの態様では、上記動作は、上記全体的なスティッキービット値が、非0でありかつ正規化中に上記合計のビットのセットの仮数にシフトされるときはいつでも、上記全体的なスティッキービット値を表すであろう上記合計のビットのセットの仮数のビットを0に割り当てることによって、上記全体的なスティッキービット値が正規化中に上記合計のビットのセットの仮数に含まれないようにすることを含むことができる。
いくつかの態様では、上記動作は、上記和を求める前に、各ビットのセットを指定された数のビット位置だけ右にシフトすることを含むことができる。いくつかの態様では、上記オペランドのビットを0以上のビット位置だけシフトすることは、上記オペランドの指数と上記所与のオペランドの指数との差に基づいて上記ビットをシフトすることを含むことができる。
いくつかの態様では、上記各他のオペランドが整列される所与のオペランドを識別することは、最大の指数値を有するオペランドを識別することを含むことができる。
いくつかの態様では、上記多入力加算器は、4つの浮動小数点入力を有し、上記4つの浮動小数点入力で受け取られる4つの浮動小数点値の和を求める4入力加算器である。
一般に、本明細書で説明する主題の別の革新的態様は、3つ以上の浮動小数点オペランドを受けるように構成された3つ以上の入力を含む多入力ハードウェア加算器において具現化することができる。各入力は、オペランドの浮動小数点表現を含むビットのセットを受けるように構成され得る。多入力ハードウェア加算器は、各他のオペランドが整列される所与のオペランドを識別するように構成される指数減算およびスワップコンポーネントを含むことができる。多入力ハードウェア加算器は、1つ以上のシフタを含むことができ、上記1つ以上のシフタは、上記所与のオペランドと異なる各他のオペランドについて、当該オペランドのビットが上記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成するように構成され、上記1つ以上のシフタはさらに、上記シフトに基づいて、上記各他のオペランドに対するスティッキービットの値を決定するよう構成される。オペランドに対する上記スティッキービット値は、非0値が、上記オペランドを表すビットのセットからシフトされて、上記オペランドに対する上記シフトされたビットのセットを生成したとき、非0値を有し、および上記オペランドの符号と一致する符号を有する。多入力ハードウェア加算器は、各スティッキービットの値に基づいて、全体的なスティッキービット値を決定するように構成されたスティッキービット計算器を含むことができる。上記全体的なスティッキービット値は、(i)他のオペランドのすべてに対するスティッキービットのすべてが0であるか、または(ii)上記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときは、いつでも0である。全体的なスティッキービット値は、非0スティッキービットのすべてが一致するとき、または非0スティッキービットが1つだけあるときは、いつでも各非0スティッキービットの値に一致する。多入力ハードウェア加算器は、(i)上記所与のオペランドを表すビットのセット、(ii)上記各他のオペランドに対する上記シフトされたビットのセット、および(iii)上記全体的なスティッキービット値を用いて、上記3つ以上のオペランドの和を求めるよう構成される加算器回路を含むことができる。
これらおよび他の実現例は各々、いくつかの態様では、以下の特徴のうちの1つ以上を任意選択で含むことができる。すなわち、上記1つ以上のシフタは、非0値がオペランドに対するスティッキービットにシフトされるときはいつでも、上記スティッキービットを1の値にセットする。
いくつかの態様では、加算器回路は、所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定するようにさらに構成される。上記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、上記合計のビットのセットの仮数を上記隠れビットが1になるまでシフトさせることによって、上記合計のビットのセットの仮数を正規化させることができる。加算器回路は、上記合計のビットのセットの仮数および上記全体的なスティッキービット値に基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断することができる。
いくつかの態様では、上記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、上記合計のビットのセットの仮数を正規化するために上記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、上記ビット位置の数が、上記スティッキービット以外の上記多入力加算器の精度ビット数を超えるときはいつでも、上記合計のビットのセットによって表される浮動小数点値と上記全体的なスティッキービット値とに基づいて、上記合計のビットのセットによって表される浮動小数点値を丸めるよう決定することとを含むことができる。
いくつかの態様では、上記動作は、上記全体的なスティッキービット値が、非0でありかつ正規化中に上記合計のビットのセットの仮数にシフトされるときはいつでも、上記全体的なスティッキービット値を表すであろう上記合計のビットのセットの仮数のビットを0に割り当てることによって、上記全体的なスティッキービット値が正規化中に上記合計のビットのセットの仮数に含まれないようにすることを含むことができる。いくつかの態様では、上記オペランドの仮数ビットを0以上のビット位置だけシフトすることは、上記オペランドの指数と上記所与のオペランドの指数との差に基づいて上記仮数ビットをシフトすることを含むことができる。
この明細書において記載される主題は、以下の利点の1つ以上を実現するように特定の実施の形態において実現することができる。本明細書で説明する多入力加算器は、2入力加算器を用いて複数の加算を実行するよりも少ない電力を用いて3つ以上のオペランドを加算することができ、なぜならば、いくつかのステップ、たとえば、正規化および丸めが、複数回ではなく、(例えば、2入力加算器の複数の加算演算の各々につき1回ではなく、)多入力加算器によって1回実行されるからである。また、これは、3つ以上のオペランドの和を求めるために実行される必要がある正規化ステップおよび丸めステップがより少ない結果、より高速かつより効率的な加算をもたらすことができ、それは、機械学習アクセラレータ回路のような多くの複雑な数学的演算を実行する集積回路において特に有益である。多入力加算器はまた、加算演算を並列に実行する複数の2入力加算器よりも、占められるチップ上の空間より少なく、他のコンポーネントのための空間を解放するか、またはチップのサイズを縮小する。
和を丸めるかどうかおよびどのように丸めるかを判断するための全体的なスティッキービット値は、丸めることによって引き起こされる誤差が、許容可能な範囲内にあり、かつ0から離れる方向のバイアスがないことを確実にするような態様で、オペランドのスティッキービット値に基づいて計算することができる。すなわち、本文書に記載されるように全体的なスティッキービットを計算することによって、どのようなバイアスも、正または負の数に向かうよりも、0への丸めに向かう。このようにして0に向かって偏らせることにより、ニューラルネットワークなどの機械学習モデルの収束に対する影響が最小化される。したがって、説明される技法は、たとえば、多入力加算器が機械学習モデルの学習を実行する専用機械学習アクセラレータチップ上にある場合に、機械学習モデルの学習のために最適化される方法で、全体的なスティッキービット値を決定する。
前述の主題の様々な特徴および利点が、図面に関して以下で説明される。追加の特徴および利点は、本明細書および特許請求の範囲に記載される主題から明らかである。
例示的な多入力ハードウェア加算器のブロック図である。 3つ以上のオペランドを加算するための例示的なプロセスを示す流れ図である。 4入力加算器を用いて加算される4つのオペランドの例を示す。
様々な図面における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
一般に、本明細書で説明するシステムおよび技法は、3つ以上の浮動小数点入力の和を計算する多入力ハードウェア加算器に関する。例えば、4入力加算器は、4つの浮動小数点数の和を計算することができる。浮動小数点数は、浮動小数点数が正であるか負であるかを示す符号ビットと、浮動小数点数の指数の値を表す指数ビットと、浮動小数点数の有効桁を表す仮数(mantissa)ビット(significandとも称される)とを含むビットのセットによって表される。例えば、IEEE754単精度フォーマット浮動小数点数は、1個の符号ビット、8個の指数ビット、および24個の仮数ビット(23個の明示的に格納されるもの、および暗黙の隠れビット)を含む。浮動小数点数の値を導出するために、仮数を、指数で累乗した基底(例えば、2の基底)で乗算する。
3つ以上の浮動小数点オペランドの和を求めるために、多入力加算器は、各他のオペランドが整列されるオペランドを識別することができる。このオペランドは、最大の指数値を有するオペランドとすることができる。整列を確立するために、すなわち、他のオペランドを所与のオペランドと整列するために、多入力加算器は、識別されたオペランドの指数値と他のオペランドの指数値との間の差に基づいて、すべてのオペランドの仮数ビットを整列させるように、各他のオペランドの仮数ビットをシフトすることができる。所与のオペランドが他のオペランドより大きい値を有する指数を有する場合、他のオペランドの仮数内のビットは、あるビット数だけ右にシフトされ、ここで、最上位ビットは0にセットされ(論理シフト)、シフトされるビット数は指数の差に対応する。シフト後、他のオペランドの指数は、所与のオペランドの指数と同じ値にセットされ、他のオペランドの仮数の値は、右シフトによって減少される。言い換えれば、整列されると、各オペランドは同じ指数値を有する。右シフトが発生した場合、他のオペランドは、IEEE浮動小数点フォーマットの意味において、もはや正規化されていない。他のオペランドの整列プロセスは、幾らかの精度を失わせる場合があり、なぜならば、元の他のオペランドの仮数の下端における幾つかの非0ビット、すなわち下位ビットは、仮数から外れて、さらには付加的な精度ビットから外れてシフトされ、その結果、それらが表す情報が失われ得るからである。本明細書で開示されるようなスティッキービットおよび全体的なスティッキービットの決定は、他の態様の中でも特に、このような精度の損失を回避または緩和することを意図しており、-上記のように-加算の即時段階での他のオペランドの正規化されていない表現を介する値の有効な変化は、合計結果の精度を著しく偏らせるかまたは低下させる。より高い合計結果の精度は、例えば、合計オペランドに対する内部精度ビットの数を増加させることによって達成され得るが、スティッキービットおよび全体的なスティッキービットに関連する開示される技術は、3つ以上の浮動小数点数の加算の場合に、合計結果の丸めが、オペランドごとに単一のスティッキービットを用いて、許容可能な範囲内にあり、0から離れる方向のバイアスがないことを達成する。したがって、開示された技術によって必要とされるハードウェア資源は、多入力浮動小数点加算の精度を高める従来技術と比較して、低減される。
オペランドの仮数ビットをシフトする際、仮数ビットの一部は、浮動小数点オペランドを表すために利用可能なビットからシフトアウトされ得る。多入力加算器は、精度および丸めのために幾つかの追加のビットを含むことができる。例えば、多入力加算器は、精度のために3つの追加のビットを含み、内部計算および丸めのために1つのスティッキービットを含むことができる。スティッキービットは最下位ビット(LSB)位置であってもよく、3つの精度ビットはスティッキービットと仮数ビットとの間にあってもよい。この例では、オペランドが整列中に3ビット位置よりも多く右にシフトされる場合、最下位仮数ビットのうちの1つ以上は、利用可能なビットからシフトされ、スティッキービット位置に入るかまたはスティッキービット位置を通過する。スティッキービットは、何が、整列後に維持されないより下位のビット中にあり得るか、を示すものである。あるオペランドについて、1の値がスティッキービット位置にシフトされる場合、スティッキービットは、追加のシフトにもかかわらず1のままである。
精度ビットの数は、整列中のシフトによる潜在的な損失ビットの数に影響を及ぼすので、精度ビットの数は、多入力加算器についての目標誤差境界に基づいて選択され得る。例えば、3つの精度ビットと1つのスティッキービットとを用いて、無限の数の精度ビットを有する加算器に対する4入力加算器の誤差を以下の関係1に示す。関係1において、パラメータMは、各オペランドの仮数ビット(隠れビットを含む)の数であり、パラメータEは、各オペランドの指数ビットの数である。パラメータzは、4入力加算器の出力であり、パラメータz_refは、無限の数の精度ビットを有する加算器の出力であり、パラメータz_ref.expは、加算器の出力の指数であり、パラメータa.exp-d.expは、4つの入力オペランドの指数である。この関係において「.exp」を用いることは、格納された指数ではなく、浮動小数点数の実際の指数を意味する。浮動小数点数の実際の指数は、格納された指数からバイアスを差し引くことによって導出することができる。この関係は、パラメータzおよびパラメータz_refの両方が無限大ではないか、または数値でない(NaN:not a number)場合に、有効である。パラメータzまたはパラメータz_refが無限大またはNaNである場合、パラメータzからパラメータz_refを引いた絶対値は無限大またはNaNである。
Figure 0007285966000001
オペランドのスティッキービットの符号は、オペランドの符号が、最も大きい指数値を有するオペランドの符号と同じであるかどうかに基づき得る。例えば、最も大きい指数値を有するオペランドとは異なる符号を有するオペランドの仮数を仮数加算時に負値として扱う場合、スティッキービットの符号は、それらの符号が同じであれば正となり、それらの符号が異なる場合には負となる。
仮数ビットを整列させた後、多入力加算器は、オペランドの仮数を加算することができる。加算の一部として、多入力加算器は、追加の精度ビットを加算することもできる。多入力加算器は、次いで、必要に応じて和を正規化することができる。例えば、最上位ビット(MSB)が0の値を有する場合、多入力加算器は、MSBが1の値を有するまで和の仮数ビットをシフトすることができる。多入力加算器はまた、全体的なスティッキービット値に基づいて仮数を丸めるかどうかを判断することができる。3つ以上のオペランドを加算する多入力加算器の場合、全体的なスティッキービットの計算は、精度および誤差バイアスに対するその影響を最小化するために、注意深く扱われる必要がある。
スティッキービットの値は、大量の仮数の相殺(cancellation)が生ずると、精度および誤差バイアスに対してより大きな影響を有し得る。大量の仮数の相殺が生ずるのは、加算されているオペランドの仮数値が近い値であるが反対の符号を有するときであり、これにより正規化の前の仮数の和において2つ以上の0が先行する結果になる。大量の仮数の相殺は、2入力加算器を用いて起こり得る。しかしながら、それが2入力加算器を用いて起こる場合、スティッキービットは常に0である。なぜなら、指数差が1以下の場合にのみ、大量の仮数の相殺が起こるからである。大量の仮数の相殺が多入力加算器を用いて生ずると、あるオペランドと最も大きい指数を有するオペランドとの間の指数差が大きく、結果として非0のスティッキービットをもたらすかもしれない。したがって、全体のスティッキービットの計算は、注意深く扱う必要がある。
いくつかの実現例では、多入力加算器は、(最大の指数値を有する識別されたオペランド以外の)他のオペランドのすべてに対するスティッキービットのすべてが0であるときにはいつでも、全体的なスティッキービット値が0となるように、全体的なスティッキービット値を決定する。全体的なスティッキービット値はまた、他のオペランドのうちの少なくとも2つが、0ではなくかつ一致しないスティッキービットを有するときはいつでも、0である。例えば、1つのオペランドが-1の値を有するスティッキービットを有し、別のオペランドが+1の値を有するスティッキービットを有する場合、全体的なスティッキービット値は0となる。すべての非0スティッキービットが一致する場合、例えば、すべてが+1の値を有する場合、全体的なスティッキービット値は、この例では、非0スティッキービット+1と同じであり得る。全体的なスティッキービットがこのように決定されると、多入力加算器の合計結果における誤差が、ある範囲内にあり、0から離れる方向のバイアスがないことを保証することができる。特に、この効果を達成するために、多入力加算器の各オペランドに対して多数の追加の精度ビットを維持する必要はない。これは、開示される技法が、従来の多入力加算器実現例と比較して、低減されたハードウェアリソースで実現され得るという利点をもたらす。
図1は、例示的な多入力ハードウェア加算器100のブロック図である。この例では、多入力加算器100は、4つの浮動小数点オペランドの和を求めるためのいくつかの構成要素を含むハードウェア回路の形態の4入力加算器である。しかしながら、多入力加算器100は、以下に説明されるように、3つの浮動小数点オペランド、5つの浮動小数点オペランド、または別の適切な数の浮動小数点オペランドの和を求めるように構成され得る。
多入力加算器100は、所定のフォーマットを有する浮動小数点数の和を求めることができる。フォーマットは、浮動小数点数の様々な部分を表すために用いられるビットの数によって定義され得る。上述したように、IEEE754単精度フォーマット浮動小数点数は、1個の符号ビット、8個の指数ビット、および24個の仮数ビット(23個の明示的に格納されるもの、および暗黙の隠れビット)を含む。多入力加算器100は、これらの32ビットの単精度フォーマット浮動小数点数の和を求めるように構成され得る。別の例では、多入力加算器100は、1個の符号ビット、8個の指数ビット、および16個の仮数ビット(15個の明示的に格納されるもの、および暗黙の隠れビット)を含む24ビット数、または他の浮動小数点フォーマット数の和を求めるように構成され得る。特定のフォーマットのために多入力加算器を構成するために、加算器150(以下でより詳細に説明される)は、特定のビット数を有する仮数を加算するように構成することができ、内部計算および丸めのために、スティッキービットを含む追加のビットを含むように構成することができる。
多入力加算器100は、4つの浮動小数点オペランド(a、b、c、およびd)を入力として受け取り、それらを入力オペランドの指数値に基づいて中間オペランド(x、y、m、およびn)に割り当てる指数減算およびスワップコンポーネント110を含む。指数減算およびスワップコンポーネント110は、最大の指数値を有する入力オペランドをオペランドxに割り当て、他の入力オペランドを中間オペランドy、mおよびnに割り当てることができる。すべてのオペランドが同じ指数値を有する場合には、指数減算およびスワップコンポーネント110は、入力オペランドaを中間オペランドxに、入力オペランドbを中間オペランドyに、入力オペランドcを中間オペランドmに、入力オペランドdを中間オペランドnに、割り当てることができる。
指数減算およびスワップコンポーネント110は、1つ以上のスワップユニット、1つ以上の減算器、および/または1つ以上の絶対値計算器を含むことができる。例えば、指数減算およびスワップコンポーネント110は、3つのスワップユニット、4つの8ビット減算器(指数ビット数に基づく)、および2つの絶対値計算器を含むことができる。これらのコンポーネントの各々の量およびこれらのコンポーネントの構成は、多入力加算器100の入力の数および/または多入力加算器100が加算するように構成された入力オペランドの指数ビットの数に基づいて変わり得る。例えば、入力オペランドが4つの指数ビットを有する場合、減算器は4ビット減算器とすることができる。
指数減算およびスワップコンポーネント110は、最も大きい指数値を有する入力オペランドを識別し、このオペランドの指数値と各他の入力オペランドの指数値との間の差をハードウェアにおいて計算し、ある減算器は、入力オペランドaの指数値と入力オペランドbの指数値との間の差を求めることができる。ある減算器も、オペランドcの指数値とオペランドdの指数値との差を求めることができる。
次いで、スワップユニットは、以下の関係2および3を用いて、入力オペランドを中間オペランドに割り当てることができる:
Figure 0007285966000002
オペランド名の後に「.e」を有するパラメータは、オペランドの指数値を指す。例えば、パラメータa.eは、入力オペランドaの指数値である。この初期スワップの後、入力オペランドの2つは、それらの中間オペランドmおよびnに割り当てられている。
次いで、減算器は、前のスワップの後で、p.eとr.eとの間の差を求めることができる。次いで、スワップユニットは、以下の関係4を用いて、入力オペランドを中間オペランドxおよびyに割り当てることができる:
Figure 0007285966000003
次いで、指数減算およびスワップコンポーネント110は、中間オペランドy、m、およびnの仮数をシフトすべきビット位置数を、これらのオペランドと中間オペランドxとの指数値間の差に基づいて、判断することができる。例えば、指数減算およびスワップコンポーネント110は、以下の関係5、6、および7を用いて、各中間オペランドの仮数をシフトすべきビット位置数を判断することができる:
Figure 0007285966000004
オペランド名の後に「_shift」を伴うパラメータは、そのオペランドをシフトするためのビット位置の数を指し、例えば、m_shiftは、オペランドmをシフトするためのビット位置の数を指す。上記の論理を用いて、指数減算およびスワップコンポーネント110は、x.eがy.e、m.e、およびn.e以上となるように、入力オペランドa、b、c、およびdをx、y、m、およびnに割り当てる。指数減算およびスワップコンポーネント110はまた、オペランドyのシフトがx.eとy.eとの差に等しく、オペランドmのシフトがx.eとm.eとの差に等しく、オペランドnのシフトがx.eとn.eとの差に等しくなるように、オペランドの仮数y、m、nの仮数をシフトするためのビット位置の数も判断する。
指数減算およびスワップコンポーネント110はまた、中間オペランドxの符号に対する各オペランドの符号に基づいて、中間オペランドy、m、またはnのいずれかが反転されるべきかどうかを判断することができる。中間オペランドが反転されるべきである場合、指数減算およびスワップコンポーネント110は、そのオペランドに対する反転演算「_op」パラメータ(たとえば、あるビットとして格納される)の値を1の値にセットし得る。指数減算およびスワップコンポーネント110は、関係8、9、および10を用いて、中間オペランドy、m、またはnを反転させるかどうかを判断することができる:
Figure 0007285966000005
指数減算およびスワップコンポーネント110は、中間オペランドをパイプラインレジスタ125に出力する。指数減算およびスワップコンポーネント110はまた、反転演算パラメータもパイプラインレジスタ125に出力する。パイプラインレジスタ125および165は、この例では、多入力加算器110のデータパスを段に分離するために使用され、データパスは、パイプラインレジスタ125の前の第1の整列段と、パイプラインレジスタ125とパイプラインレジスタ165との間の第2の加算段と、パイプラインレジスタ125および165の後の第3の正規化および丸め段とを含む。他のコンポーネントは、それらの動作に必要なデータをパイプラインレジスタ125および165から得ることができる。
パイプラインレジスタ125は、中間オペランドごとに符号、指数、および仮数を格納することができる。例えば、パイプラインレジスタ125は、オペランドxについて、x.sign(符号値)、x.exponent(指数値)、およびx.mantissa(仮数値)を格納することができる。他のオペランドについては、パイプラインレジスタ125は、シフトされた仮数(例えば、オペランドyに対してはy_shifted_f)を格納することができる。シフトされたオペランドのシフトされた仮数は、そのオペランドに対する追加の精度ビットおよびスティッキービットを含むことができる。パイプラインレジスタ125は、反転演算「_op」パラメータの値(例えば、y_op、m_op、n_op)も格納することができる。
また、パイプラインレジスタ125は、result_is_specialパラメータの値も格納することもできる。入力オペランドの1つ以上がNaNであるか、入力オペランドの1つ以上が無限大であるか、またはすべての入力オペランドが0もしくは非正規化数(0指数および非0仮数を有する浮動小数点数)である、特別な場合があり得る。いずれの場合でも、result_is_specialの値は、加算の結果が特殊ケースの一つであることを示すよう、1とすることができる。
図1には示されていないが、多入力ハードウェア加算器100は、特別なケースを処理するための追加のコンポーネントまたはロジックを含むことができる。例えば、多入力加算器100は、入力オペランドのうちの少なくとも1つがNaNである場合、または入力オペランドのうちの少なくとも2つが逆符号で無限大である場合、NaNである最終結果(z)を出力することができる。別の例では、多入力ハードウェア加算器100は、すべての入力オペランドが0または非正規化数である場合、0である最終結果(z)を出力することができる。別の例では、多入力ハードウェア加算器は、入力オペランドのうちの少なくとも1つが無限大であり、無限大であるすべてのオペランドが同じ符号を有する場合、正または負の無限大である最終結果(z)を出力することができる。多入力ハードウェア加算器100は、非正規化数を、適切に符号付けされた0として扱い、非正規化結果を0にフラッシュすることができる。
指数減算およびスワップコンポーネント110はまた、オペランドy、m、およびnの仮数ビット(図1の「f」を伴うパラメータ)およびシフトを、それぞれの右シフタ121,122,および123に出力する。多入力加算器100は、最も大きい指数値を有するオペランドではないオペランドごとに右シフタを含むことができる。したがって、多入力加算器100は、n-1個の右シフタを含むことができ、ここで、nは、多入力加算器100のための入力オペランドの数である。この例では、6入力加算器は5個の右シフタを有し、他の例では、より少ない右シフタを用いることができ、各右シフタは、加算演算ごとに2つ以上のオペランドをシフトすることができる。
右シフタ121は、y_shiftに基づいてオペランドyの仮数ビットy.fをシフトすることができる。例えば、y_shiftが5である(xに対する指数値間の差がyの指数値よりも5大きいことを意味する)場合、右シフタ121は、オペランドyの仮数ビットy.fを5ビット位置だけ右にシフトすることができる。同様に、右シフタ122は、m_shiftに基づいてオペランドmの仮数ビットm.fをシフトすることができ、右シフタ123は、n_shiftに基づいてオペランドnの仮数ビットn.fをシフトすることができる。オペランドのシフトが0である場合、オペランドの仮数はシフトされず、例えば0ビット位置分シフトされる。オペランドがシフトされた後、適切な場合には、各オペランドx、y、m、およびnの指数値は同じである。すなわち、y、m、およびnの指数値は、今や、仮数のシフトに起因して、オペランドxの指数値に等しい。各右シフタ121,122,および123は、その仮数のシフトされたものを出力することができ、それは、0以上のビット位置だけシフトされている。例えば、右シフタ121は、オペランドyの仮数のシフトされたもの(y_shifted_f)を出力することができ、右シフタ122は、オペランドmの仮数のシフトされたもの(m_shifted_f)を出力することができ、右シフタ123は、オペランドnの仮数のシフトされたもの(n_shifted_f)を出力することができる。
いくつかの実現例では、多入力加算器100は、精度および丸めのために仮数に対して追加のビットを含む。たとえば、多入力加算器100は、仮数の右に1つ以上の精度ビットと、1つ以上の精度ビットの右にスティッキービットとを含むことができる。オペランドの仮数が右にシフトされると、仮数のLSBは、精度ビット位置にシフトされ、十分にシフトされた場合には、スティッキービット位置にシフトされ、仮数のために利用可能なビットから外れる可能性がある。このようにして、オペランドの仮数が精度ビットの数よりも少ないビット位置だけシフトされる場合には、精度ビット位置にシフトされたビットの値を維持することができる。
例えば、多入力加算器100は、28ビットを用いて24ビットの仮数を格納することができる。この例では、24個の仮数ビットは24個のMSBとすることができる。次の3ビットは精度ビットとすることができ、LSBはスティッキービットとすることができる。オペランドの仮数が右に3ビット位置分シフトされる場合、仮数のLSBは第3の精度ビット位置に格納されるであろう。しかしながら、オペランドの仮数が右に5ビット位置分シフトされる場合、LSBは利用可能なビット位置からシフトアウトされるだろう。
オペランドのスティッキービットは、利用可能なビット位置からシフトされた可能性があるものを表すために用いられる。値1がスティッキービット位置にシフトされると、スティッキービットは値1にセットされる。スティッキービット値は、1の値にセットされた後、たとえ0がその後スティッキービット値位置にシフトされる場合でも、(たとえば、上位のビットが0の値を有し、1の値を有する下位のビットがスティッキービット位置にシフトされた後に、その0の値を有する上位のビットがスティッキービット位置にシフトされる場合でも、)1の値のままであることができる。
オペランドのスティッキービットの符号は、オペランドの符号が、最も大きい指数値を有するオペランドの符号と同じであるかどうかに基づくことができる。符号が同じである場合、スティッキービットの符号は正である。符号が異なる場合、スティッキービットの符号は-1である。
いくつかの実現例では、オペランドの仮数ビットのすべてが利用可能なビット位置からシフトされる場合、オペランドのスティッキービットは0の値を有することができる。例えば、仮数ビットをシフトしている右シフタは、すべての仮数ビットが利用可能なビット位置からシフトアウトされる場合、スティッキービットを0にセットすることができる。
多入力加算器110はまた、オペランドに対する反転演算パラメータが1の値にセットされる場合に、シフトされた仮数ビットに対して反転演算を実行することができる反転コンポーネント131,132,および133を含む。例えば、各反転コンポーネント131~133は、オペランドの反転演算パラメータが1の値にセットされる場合、オペランドの仮数ビットに対して2の補数反転を実行することができる。このようにして、別のオペランドの仮数を反転された仮数結果に加算すると、2つの仮数の間において減算演算がもたらされる。
多入力加算器110はまた、スティッキービット計算器134を含む。スティッキービット計算器134は、和に対する(例えば、仮数の和を表す合計のビットのセットに対する)全体的なスティッキービット値を計算することができる。スティッキービット計算器134は、オペランドy、m、およびnに対するスティッキービットのすべてが0であるときはいつでも、全体的なスティッキービット値が0となるように、全体的なスティッキービット値を計算することができる。全体的なスティッキービット値はまた、他のオペランドのうちの少なくとも2つが非0でありかつ一致しないスティッキービットを有するときはいつでも0である。すべての非0スティッキービットが一致する場合、例えばすべてが+1の値を有する場合、全体的なスティッキービット値は非0スティッキービットと同じ、この例では+1とすることができる。
例えば、オペランドyのスティッキービットが+1であり、mのスティッキービットが+1であり、nのスティッキービットが0である場合、すべての非0スティッキービットは+1であるので、全体的なスティッキービット値は+1となる。別の例では、オペランドyのスティッキービットが-1であり、mのスティッキービットが0であり、nのスティッキービットは0である場合、唯一の非0のスティッキービットは-1の値を有するので、全体的なスティッキービット値は-1となる。別の例では、オペランドyのスティッキービットが-1であり、mのスティッキービットが-1であり、nのスティッキービットが-1である場合、すべてのスティッキービットは-1の値を有するので、全体的なスティッキービット値は-1となる。別の例では、オペランドyのスティッキービットが+1であり、mのスティッキービットが-1であり、nのスティッキービットが-1である場合、オペランドy、m、およびnのすべての非0スティッキービットのすべての値が一致しはしないので、全体的なスティッキービット値は0となる。さらに別の例では、オペランドyのスティッキービットが0であり、mのスティッキービットが0であり、nのスティッキービットが0である場合、すべてのスティッキービットは0の値を有するので、全体的なスティッキービット値は0となる。
いくつかの実現例では、スティッキービット計算器134は、反転コンポーネント131,132,および133がシフトされた仮数ビットに対して反転演算を実行する前に、全体的なスティッキービットをオペランド(y、m、またはn)のうちの1つに割り当て、他のオペランドのスティッキービットをクリアすることができる。全体的なスティッキービットが+1である場合、スティッキービット計算器134は、オペランドxと同じ符号を有する1つのオペランドのスティッキービットを1にセットし、他の2つのオペランドのスティッキービットを0にセットする。全体的なスティッキービットが-1である場合、スティッキービット計算器134は、オペランドxと逆の符号を有する1つのオペランドのスティッキービットを1にセットし、他の2つのオペランドのスティッキービットを0にセットする。
多入力加算器100はまた、オペランドx、y、m、およびnの仮数、精度ビット、およびスティッキービットを加算する4入力仮数加算器150を含む。例えば、4入力加算器150は、オペランドxの元の仮数をオペランドy、m、およびnの仮数(ならびにそれらの精度ビットおよびスティッキービット)のシフトされたものに加算することができる。オペランドxの精度ビットおよびスティッキービットは、オペランドxの仮数がシフトされないので、0となる。入力の数が異なる場合、多入力加算器100は、その数の仮数の和を計算する加算器を含むことができる。
加算器150は、4つの仮数ならびにそれらの精度ビットおよびスティッキービットの合計を表す合計のビットのセットを出力することができる。例えば、2つのオーバーフロービットが含まれる場合、合計のビットのセットは、2個のオーバーフロービット、24個の仮数ビット、3個の精度ビット、2の補数変換のための1ビット、および最後のスティッキービットを含む、31個のビットを含み得る。2個のオーバーフロービットが含まれない場合、合計のビットのセットは、他の29ビットを含むことができる。もちろん、入力オペランドのフォーマット、所望の精度などに基づいて、他のフォーマットも可能である。
多入力加算器100はまた、仮数の和の符号が負である場合、仮数の和を反転することができる反転コンポーネント155を含む。例えば、反転コンポーネント155は、仮数の和が0未満である場合、2の補数反転を用いて仮数の和を反転することができる。
いくつかの実現例では、多入力加算器は、加算器によって出力される合計のビットのセットを再マッピングすることによって、合計のビットのセットの基数を右に1つ以上のビット位置(例えば、2ビットオーバーフローに対しては2つのビット位置)だけシフトする。これにより、オーバーフロー時に右シフトを行う必要がない。例えば、入力オペランドが各々24個の仮数ビットを含む場合、多入力加算器100は29ビットを用いて仮数を格納することができる。これらの29ビットは、24個の仮数ビット、3個の精度ビット、(MSBにおける)2の補数変換用の1ビット、およびスティッキービット位置用の1ビット(LSB)を含むことができる。反転コンポーネント155の出力は、和のために2個のオーバーフロービット、24個の仮数ビット、3個の精度ビット、およびスティッキービットを含むことができる。多入力加算器は、オーバーフロービットのMSBを仮数の隠れビットとして、次の23ビットを仮数の残りとして、次の5ビットを追加の精度ビットとして、およびLSBをスティッキービットとして、見なすことができる。基数の右へのシフト数は、和の指数値に影響する。例えば、和の基数が右に2ビット位置だけシフトされる場合、以下で説明するように、数値2が和の指数値に加算され得る。
多入力加算器100は、先行0検出器160を含むことができる。先行0検出器160は、合計のビットのセットの仮数内に先行する0があるかどうかを判断することができる。合計のビットのセットの仮数内に先行する0がある場合、合計のビットのセットによって表される和は、MSBが仮数のMSBにおいて1の値を有するように、正規化されることができる。先行0検出器160は、仮数における先行する0の数を判断し、合計のビットのセットと先行する0の数とを左シフタ170に与えることができる。
左シフタ170は、仮数のMSBが1の値を有するまで、合計のビットのセットを左にシフトすることができる。左シフタ170は、先行する0の数に基づいて、合計のビットのセットを左にシフトすることができる。例えば、仮数部が2つの先行する0を有する場合、左シフタ170は、合計のビットのセットの各ビットを左に2ビット位置だけシフトすることができる。
また、左シフタ170は、スティッキービットの値が仮数ビットにシフトされるのを防ぐことができる。合計のビットのセットにおけるスティッキービットが仮数ビットにシフトされる場合、スティッキービットは0の値にセットされることができる。すべての追加の精度ビットが仮数ビットにシフトされる場合も、スティッキービットは0にセットされる。左シフタは、先行する0の数(合計のビットのセットがシフトされるビット位置の数を表す)を用いて、スティッキービットが仮数ビットにシフトされるかどうかを判断することができる。オーバーフローのために追加のビットが使用されず、3つの精度ビットが用いられる場合、合計のビットのセットが左に3つ以上の位置分シフトされる場合には、スティッキービットの値は仮数にシフトされるであろう。この場合、スティッキービットが非0値を有する場合には、スティッキービットについて仮数にシフトされた値は0の値で置換されることができる。
多入力加算器100は、丸め器175も含む。丸め器175は、仮数部のLSBの値と、スティッキービット、追加の精度ビット、および仮数部オーバーフローケースを正規化する際に仮数領域から右にシフトアウトされた、仮数領域からのビットを含み得る、左側のすべてのビットとに基づいて、仮数を丸めることができる。いくつかの実現例では、丸め器175は、最近接偶数への丸め法(round to the nearest, half to even rounding technique)を用いて丸める。他の丸め法を用いることもできる。
最近接偶数への丸め法を用いて、仮数から切り捨てられるビットの値(例えば、シフト後の精度ビットおよび精度ビットに続くスティッキービットの値)が仮数のLSBの値の半分を超える場合、仮数の値は丸めて切り上げられる。切り捨てられるビットの値が仮数のLSBの値の半分未満である場合、仮数の値は丸めて切り捨てられる。切り捨てられるビットの値が仮数のLSBの値の半分である場合、仮数のLSBが0であれば、仮数の値は丸めて切り捨てられ、仮数のLSBが1であれば、仮数の値は丸めて切り上げられる。丸められた仮数ビットは、特別なケース(例えば、zは、NaN、無限大、または0である)のいずれも発生しない場合には、4つの入力オペランドの和の仮数(z.f)として出力される。
多入力加算器はまた、和の指数値を決定する指数更新器180を含む。指数値は、オペランドzの指数(x.e)、任意の丸めオーバーフロー(例えば、丸めによって仮数が最上位ビットをオーバーフローさせる場合)、および和の基数が右にシフトされたビット位置の数(もしあれば)の和から、合計のビットのセットが左シフタ170によって左にシフトされたビット位置の数(例えば、これは、先行0検出器160によって判断される先行する0の数と同じである)を引いたものに等しくなり得る。指数更新器180は、4つの入力オペランドの和の指数(z.e)を出力することができる。
多入力加算器100はまた、オペランドxの符号ビット(負の場合1である)と、加算器によって出力される和が負であるかどうかを表すビット(これも、負の場合1である)との排他的論理和を行うXORゲート185を含む。双方のビットが同じ値を有する場合、XORゲート185の出力は0である。すなわち、符号が同じ(すなわち、両方とも正または負)である場合、ビットが異なる値を有する場合には、和(z.s)の符号は正であり、XORゲートの出力は1である。すなわち、符号が異なる場合、和(z.s)の符号は負である。
図2は、3つ以上のオペランドを加算するための例示的なプロセス200を示す流れ図である。プロセス200の動作は、図1の多入力加算器100などの多入力ハードウェア加算器によって実行され得る。図2は、4入力加算器を用いて加算される4つのオペランドの例を示す図3を参照して説明される。
多入力加算器は、3つ以上の浮動小数点入力を有する。各入力は、2つ以上の他のオペランドに加算されるべき浮動小数点オペランドを受けるように構成される。多入力加算器は、たとえば、符号ビット、特定の数の指数ビット、および特定の数の仮数ビットを有する特定のフォーマットで浮動小数点オペランドの和を求めるように構成され得る。上述したように、多入力加算器は、精度のために、および整列ステップのため、仮数のためにスティッキービットを追跡するよう、追加のビットを用いることができる。
多入力加算器は、多入力加算器によって加算される3つ以上のオペランドの各々について、オペランドの浮動小数点表現を含むビットのセットを受ける(210)。例えば、オペランドのビットのセットは、オペランドの符号を表す符号ビットと、オペランドの指数値を表す指数ビットと、浮動小数点数の有効桁を表す仮数ビットとを含むことができる。
多入力加算器内では、オペランドは、隠れビット、精度のための追加のビット、およびスティッキービットを含むことができる。図3の例では、参照番号301で示されるように、各オペランド321~324は、1つの符号ビット311、3つの指数ビット312、1つの隠れビット313、5つの仮数ビット314、2つの精度ビット315、および1つのスティッキービット316を含む。例えば、多入力加算器は、9ビット入力オペランド(例えば、1つの符号ビット311、3つの指数ビット312、および5つの仮数ビット314)を、1つの符号ビット311、3つの指数ビット312、隠れビット313を含む6つの仮数ビット313および314、2つの精度ビット315、ならびに1つのスティッキービット316を有する13ビットフォーマットで受けることができる。上述したように、多入力加算器は、内部計算および丸めのために追加のビットを含むことができる。この例では、多入力加算器は、各オペランドに対して2つの精度ビット315および1つのスティッキービット316を含む。他の数の精度ビットも、多入力加算器の目標精度に基づいて用いることができる。
多入力加算器は、各他のオペランドが整列される所与のオペランドを識別する(220)。例えば、多入力加算器は、最も大きい指数値を有するオペランドを、各他のオペランドが整列される所与のオペランドとして識別することができる。この例では、オペランド322が、最大の指数値(2進数で110または10進数で6)を有する。
各他のオペランドについて、多入力加算器は、そのオペランドのシフトされたビットのセットを生成する(230)。多入力加算器は、オペランドのビットが所与のオペランドのビットと整列するように、オペランドのビットを1つ以上のビット位置分シフトさせることによって、シフトされたビットのセットを生成することができる。例えば、多入力加算器は、各オペランドについて、所与のオペランドの指数値と他のオペランドとの差を求めることができる。差が0である場合、他のオペランドはシフトされず、例えば0ビット位置分シフトされる。
次いで、多入力加算器は、他のオペランドの仮数ビットを右に(すなわち、仮数の最上位側から仮数の最下位側に向かって、図3では左から右に)、所与のオペランドの指数値と他のオペランドの指数値との差に等しい数のビット位置数だけシフトすることができる。例えば、所与のオペランドの指数の10進値が5であり、他のオペランドの指数の10進値が3である場合、多入力加算器は、他のオペランドの仮数ビットを2ビット位置だけ右にシフトすることができる。
参照番号302に示されるように、各他のオペランド321,323,および324の仮数ビットはシフトされている。オペランド321の仮数ビットは、オペランド321の指数値が2進数で011または10進数で3であるので、右に3ビット位置だけシフトされた。オペランド322およびオペランド321の指数値間の差は3(6-3)であるので、オペランド321の仮数ビットは右に3ビット位置だけシフトされた。シフトにより、オペランド321の精度ビット314は1および0を有する。他の2つのオペランド323および324も、オペランド322の指数値とそれらのそれぞれの指数値との間の差に基づいて右にシフトされた。以下で説明するように、シフトは、最下位仮数ビットの直後の精度ビットも含む。同様に、以下で説明するように、最下位精度ビットの直後のスティッキービットの値も右シフト動作によって影響を受ける。
この例では、他のオペランド321,323,および324は反転演算ビット317も含む。オペランドの反転演算ビット317は、オペランドの符号が、最も大きい指数値を有するオペランド322の符号と異なる場合には、1にセットされる。反転演算ビット317が1にセットされると、多入力加算器はオペランドの仮数ビットで2の補数反転を行う。このように、反転された仮数に別のオペランドの仮数を加算すると、2つの仮数間の減算演算が得られる。
多入力加算器は、シフトに基づいて、各他のオペランドに対するスティッキービットの値を判断する(240)。オペランドのスティッキービットは、非0値が、オペランドを表すビットのセットからシフトされて、オペランドに対するシフトされたビットのセットを生成したとき、非0値を有する。さらに、符号値が、スティッキービットに関連付けられる。以下、単にスティッキービットの符号という。オペランドのスティッキービット値は、オペランドの符号に一致する符号も有する。
参照番号302に示されるように、オペランド321の元の仮数のLSBが3ビット位置分シフトされて、スティッキービット316に入るので、オペランド321のスティッキービット316は1の値を有する。オペランド321の仮数のビットが3ビット位置ではなく4ビット位置だけシフトされた場合、オペランドのスティッキービット316は、0がそのビット位置にシフトされても、依然として1の値を有する。これは、一旦、整列中にオペランドのスティッキービットが非0値にセットされると、スティッキービットはその値のままだからである。
多入力加算器は、各スティッキービットの値に基づいて、全体的なスティッキービット値を求める(250)。上述したように、上記全体的なスティッキービット値は、(i)他のオペランドのすべてに対するスティッキービットのすべてが0であるか、または(ii)上記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有する(例えば、非0のスティッキービットを有するオペランドの符号ビットが一致しない)ときは、いつでも0である。全体的なスティッキービット値は、非0スティッキービットのすべてが一致するとき、または非0スティッキービットが1つだけあるときは、いつでも各非0スティッキービットの値に一致する。この例では、2つの非0スティッキービット(オペランド321および324に対するスティッキービット)があり、両方とも1の値を有することによって一致するので、和に対する全体的なスティッキービット値は1である。
上述したように、多入力加算器は、他のオペランド321,323,または324のうちの1つに全体的なスティッキービット値を割り当て、例えば、各他のスティッキービット値に0の値を割り当てることによって、各他のオペランドごとにスティッキービット値をクリアすることができる。この例において、ステップ303において、多入力加算器は、参照番号303に示されるように、オペランド321に全体的なスティッキービット値を割り当て、オペランド324のスティッキービット値をクリアした。
多入力加算器は、(i)上記所与のオペランドを表すビットのセット、(ii)上記各他のオペランドに対する上記シフトされたビットのセット、および(iii)上記全体的なスティッキービット値を用いて、上記3つ以上のオペランドの和を求める。上述したように、多入力加算器は、まず、最も大きい指数値を有するオペランドの仮数ビットを、他のオペランドのシフトされた仮数ビットに加算することができる。和は、合計のビットのセット304として表わすことができ、合計プロセスは、仮数ビット314の他に、各オペランドの仮数の最下位端に続くビット315および316を含む。
オペランドを加算する前に、多入力加算器は、各オペランド321~324についてオーバーフロービットを加算することができる。例えば、参照番号303で示されるように、各オペランド321~324は、1つの2の補数ビット320、0の値を有する2つのオーバーフロービット318、1つの隠れビット313、5つの仮数ビット314、2つの精度ビット315、および1つのスティッキービット316を含む。多入力加算器は、参照番号303で示されるように、オペランド321~324のビットのセットを加算して、合計のビットのセット304を求めることができる。合計のビットのセット304は、オペランド321~324の符号なし和を表す。合計のビットのセット304は、2つのオーバーフロービット318、1つの隠れビット313、5つの仮数ビット314、2つの精度ビット315、および全体的なスティッキービット値を表す1つのスティッキービット316を含む。
上述したように、多入力加算器は、正規化の前に、和の基数を(例えば2ビット位置分)右にシフトすることができる。このシフトは、合計のビットのセットにおける値の実際のシフトでなくてもよい。代わりに、このシフトは、ビット位置の再マッピングであってもよい。例えば、多入力加算器は、隠れビット313(これは、オーバーフロービット318のMSBの値を有する)、5つの仮数ビット314(これは、オーバーフロービット318のLSB、合計のビットのセット304の隠れビット313、および合計のビットのセット304の仮数314の最初の3つのMSBを含む)、4つの追加のビット319(これは、合計のビットのセット304の仮数314の2つのLSBと、合計のビットのセット304の精度ビット315とを含む)、ならびにスティッキービット316を含む、再マッピングされた合計のビットのセット304を生成することができる。多入力加算器はまた、このシフトに基づいて、シフトのビット位置数(この例では2つ)を、和の指数値に加算することができる。
次いで、多入力加算器は、和を表す合計ビットを正規化することができる。正規化は、ビットシーケンス305をシーケンス306に変換するものであり、合計のビットのセットの仮数ビットが任意の先行する0を含む場合、合計のビットのセットの仮数ビットを左にシフトすることを含むことができる。例えば、多入力加算器は、仮数の最上位ビットが1の値を有するように、仮数の各先行する0について、仮数ビットおよび精度ビットを左に1位置だけシフトすることができる。シーケンス306において、これは、示されている最も左側のビットである。
この例では、合計のビットのセット305は、MSBにおいて1つの先行する0を含む。したがって、多入力加算器は、合計のビットのセット305を左に1ビット位置だけシフトして、合計のビットのセット306をもたらすことができる。この時点で、合計のビットのセットのMSBは、1の値を有する隠れビット313である。合計のビットのセット306は、隠れビット313、5つの仮数ビット314、3つの追加ビット319、およびスティッキービット316を含む。多入力加算器は、シフトに基づいて和の指数を更新することもできる。例えば、多入力加算器は、和の指数から、合計のビットのセット305が左にシフトされたビット位置の数を減算することにより、正規化された合計のビットのセット306に至ることができる。この例では、多入力加算器は、和の指数から1の値を減算することができる。
次いで、精度ビットおよび全体的なスティッキービット値に基づいて、和を丸めることができる。上で説明されたように、和は、最近接偶数への丸め法を用いて丸めることができる。最近接偶数への丸め法を用いて、仮数から切り捨てられるビットの値(例えば、シフト後の精度ビットの値および精度ビットに続く全体的なスティッキービット値)が仮数のLSBの値の半分を超える場合、仮数の値は丸めて切り上げられる。切り捨てられるビットの値が仮数のLSBの値の半分未満である場合、仮数の値は丸めて切り捨てられる。切り捨てられるビットの値が仮数のLSBの値の半分である場合、仮数のLSBが0であれば、仮数の値は丸めて切り捨てられ、仮数のLSBが1であれば、仮数の値は丸めて切り上げられる。丸められた仮数ビットは、特別なケース(例えば、zは、NaN、無限大、または0である)のいずれも発生しない場合には、4つの入力オペランドの和の仮数(z.f)として出力される。
この例では、仮数のLSBは0であり、追加の精度ビット319の各々は0の値を有し、スティッキービットは1の値を有する。切り捨てられるビットの値は0.0625であり、これは1(仮数のLSBの値)の半分未満である。したがって、合計のビットのセットの仮数のLSBは、参照番号307に示されるように、丸められず、これは、4つのオペランド321~324の和の仮数314を示す。隠れビット313は落とすことができ、多入力加算器は5ビットの仮数314を出力することができる。
加えて、多入力加算器は、和の符号331および和の指数値332を求めることができる。上述したように、和の符号331は、最も大きい指数値を有するオペランドの符号と仮数加算器150の出力の符号とのXOR演算の出力とすることができる。この例では、すべての4つのオペランドは正であったので、和の符号331は正である。和の指数値332は、最も大きい指数値を有するオペランド322の指数値、合計のビットのセット305を生成するよう再マッピング中に基数が右にシフトされたビット位置の数(それが実行される場合)、および合計のビットのセット306を生成するよう正規化中に合計のビットのセット305が左にシフトされたビット位置の数に基づく。例えば、指数値332は、オペランド322の指数値と基数が右にシフトされたビット位置の数との和から、和が正規化中に左にシフトされたビット位置の数を引いたものとすることができる。この例では、指数値332は7となる(たとえば、6+2-1)。
和を表すビットのセット308は、符号ビット331、求められた指数値を表す指数ビット332、および和の仮数を表す仮数ビット314で生成することができる。例えば、多入力加算器は、各ビットのセットを、和のためのメモリの1つ以上のバイトのそれぞれのメモリ位置に出力することができる。
「データ処理装置」という用語は、例としてプログラマブルプロセッサ、コンピュータ、チップ上のシステム、または前述のもののうちの複数もしくは組合わせを含む、データを処理するためのすべての種類の装置、デバイスおよびマシンを包含する。当該装置は、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)といった特定目的論理回路を含み得る。
本明細書に記載されるプロセスおよび論理フローは、入力データを操作し出力を生成することによりアクションを実行するよう1つ以上のプログラマブルプロセッサが1つ以上のコンピュータプログラムを実行することによって実行され得る。本プロセスおよび論理フローの実行、ならびに本装置の実施は、さらに、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)といった特殊目的論理回路系によってもなされ得る。
コンピュータプログラムの実行に好適であるプロセッサは、例として、汎用マイクロプロセッサおよび特殊目的マイクロプロセッサの両方、ならびに任意の種類のデジタルコンピュータの任意の1つ以上のプロセッサを含んでもよい。一般に、プロセッサは、リードオンリメモリもしくはランダムアクセスメモリまたはその両方から命令およびデータを受取ることになる。コンピュータの必須の要素は、命令に従ってアクションを実行するためのプロセッサと、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといった、データを格納するための1つ以上の大容量記憶装置を含むか、当該1つ以上の大容量記憶装置からデータを受取るかもしくは当該1つ以上の大容量記憶装置にデータを転送するよう動作可能に結合されるか、またはその両方を行う。
本明細書は多くの具体的な実現例の詳細を含んでいるが、これらは如何なる発明の範囲または請求され得るものの範囲に対する限定としても解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴の記載として解釈されるべきである。別個の実施形態の文脈で本明細書において記載されるある特徴は、単一の実施形態において組合せでも実現され得る。反対に、単一の実施形態の文脈において記載されるさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組合わせでも実現され得る。さらに、特徴は、ある組合せにおいて作用すると上で記載され、最初はそのように請求されていさえする場合もあるが、請求される組合せからの1つ以上の特徴はいくつかの場合には当該組合せから削除され得、請求される組合せは、部分的組合わせまたは部分的組合わせの変形例に向けられ得る。
同様に、動作が図においては特定の順に示されているが、そのような動作は、望ましい結果を達成するために、示された当該特定の順もしくは連続した順で実行される必要があると理解されるべきではなく、または、すべての示された動作が実行される必要があると理解されるべきではない。ある状況においては、マルチタスキングおよび並列処理が有利であり得る。さらに、上述の実施形態における様々なシステムコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきではなく、記載されるプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に統合され得るかまたは複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
かくして、主題の特定の実施形態が記載された。他の実施形態は以下の請求の範囲内にある。一部のケースでは、請求項において記載されるアクションは、異なる順で実行され得、それでも望ましい結果を達成し得る。加えて、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順序または連続する順序であることを必ずしも必要としない。ある実現例においては、マルチタスキングおよび並列処理が有利であり得る。

Claims (20)

  1. 3つ以上の浮動小数点入力を有する多入力ハードウェア加算器によって実行される方法であって、
    前記多入力ハードウェア加算器によって加算されるべき3つ以上のオペランドの各々について、前記オペランドの浮動小数点表現を含むビットのセットを受けることと、
    各他のオペランドが整列される所与のオペランドを識別することと、
    前記各他のオペランドについて、当該オペランドのビットが前記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成することと、
    前記シフトに基づいて、前記各他のオペランドに対するスティッキービットの値を決定することを含み、オペランドに対する前記スティッキービットは、
    非0値が、前記オペランドの仮数ビットの最下位位置および任意の精度ビット位置を越えてシフトされて、前記オペランドに対する前記シフトされたビットのセットを生成したとき、非0値を有し、前記方法はさらに、
    各スティッキービットの値に基づいて、全体的なスティッキービット値を決定することを含み、
    他のオペランドのすべてに対するスティッキービットのすべてが0であるときに、前記全体的なスティッキービット値は、0であり、
    前記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときに、前記全体的なスティッキービット値は、0であり、
    各非0スティッキービットのすべてが一致するときに、前記全体的なスティッキービット値は、前記各非0スティッキービットの値に一致し、
    非0スティッキービットが1つだけあるときに、前記全体的なスティッキービット値は、前記非0スティッキービットの値に一致し、前記方法はさらに、
    (i)前記所与のオペランドを表すビットのセット、(ii)前記各他のオペランドに対する前記シフトされたビットのセット、および(iii)前記全体的なスティッキービット値を用いて、前記3つ以上のオペランドの和を求めることを含む、方法。
  2. 前記3つ以上のオペランドの和を求めることは、
    前記所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定することと、
    前記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、前記合計のビットのセットの仮数を前記隠れビットが1になるまでシフトさせることによって、前記合計のビットのセットの仮数を正規化することと、
    前記合計のビットのセットの仮数および前記全体的なスティッキービット値に基づいて、前記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断することとを含む、請求項1に記載の方法。
  3. 前記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、
    前記合計のビットのセットの仮数を正規化するために前記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、
    前記ビット位置の数が、前記スティッキービット以外の前記多入力ハードウェア加算器の精度ビット数を超えるときはいつでも、前記合計のビットのセットによって表される浮動小数点値と前記全体的なスティッキービット値とに基づいて、前記合計のビットのセットによって表される浮動小数点値を丸めるよう決定することとを含む、請求項2に記載の方法。
  4. 前記全体的なスティッキービット値が、非0でありかつ正規化中に前記合計のビットのセットの仮数にシフトされるときはいつでも、前記全体的なスティッキービット値を表すであろう前記合計のビットのセットの仮数のビットを0に割り当てることによって、前記全体的なスティッキービット値が正規化中に前記合計のビットのセットの仮数に含まれないようにすることをさらに含む、請求項2または3に記載の方法。
  5. 前記オペランドの仮数ビットを0以上のビット位置だけシフトすることは、前記オペランドの指数と前記所与のオペランドの指数との差に基づいて前記仮数ビットをシフトすることを含む、請求項1~4のいずれか1項に記載の方法。
  6. 前記各他のオペランドが整列される所与のオペランドを識別することは、最大の指数値を有するオペランドを識別することを含む、請求項1~5のいずれか1項に記載の方法。
  7. 前記多入力ハードウェア加算器は、4つの浮動小数点入力を有し、前記4つの浮動小数点入力で受け取られる4つの浮動小数点値の和を求める4入力加算器である、請求項1~6のいずれか1項に記載の方法。
  8. 多入力ハードウェア加算器であって、
    3つ以上の浮動小数点オペランドを受けるように構成された3つ以上の入力と、
    オペレーションを実行するように構成された加算器回路とを備え、前記オペレーションは、
    前記多入力ハードウェア加算器によって加算されるべき3つ以上のオペランドの各々について、前記オペランドの浮動小数点表現を含むビットのセットを受けることと、
    各他のオペランドが整列される所与のオペランドを識別することと、
    前記各他のオペランドについて、当該オペランドのビットが前記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成することと、
    前記シフトに基づいて、前記各他のオペランドに対するスティッキービットの値を決定することを含み、オペランドに対する前記スティッキービットは、
    非0値が、前記オペランドの仮数ビットの最下位位置および任意の精度ビット位置を越えてシフトされて、前記オペランドに対する前記シフトされたビットのセットを生成したとき、非0値を有し、前記オペレーションはさらに、
    各スティッキービットの値に基づいて、全体的なスティッキービット値を決定することを含み、
    他のオペランドのすべてに対するスティッキービットのすべてが0であるときに、前記全体的なスティッキービット値は、0であり、
    前記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときに、前記全体的なスティッキービット値は、0であり、
    各非0スティッキービットのすべてが一致するときに、前記全体的なスティッキービット値は、前記各非0スティッキービットの値に一致し、
    非0スティッキービットが1つだけあるときに、前記全体的なスティッキービット値は、前記非0スティッキービットの値に一致し、
    前記オペレーションはさらに、
    (i)前記所与のオペランドを表すビットのセット、(ii)前記各他のオペランドに対する前記シフトされたビットのセット、および(iii)前記全体的なスティッキービット値を用いて、前記3つ以上のオペランドの和を求めることを含む、多入力ハードウェア加算器。
  9. 前記3つ以上のオペランドの和を求めることは、
    前記所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定することと、
    前記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、前記合計のビットのセットの仮数を前記隠れビットが1になるまでシフトさせることによって、前記合計のビットのセットの仮数を正規化することと、
    前記合計のビットのセットの仮数および前記全体的なスティッキービット値に基づいて、前記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断することとを含む、請求項8に記載の多入力ハードウェア加算器。
  10. 前記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、
    前記合計のビットのセットの仮数を正規化するために前記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、
    前記ビット位置の数が、前記スティッキービット以外の前記多入力ハードウェア加算器の精度ビット数を超えるときはいつでも、前記合計のビットのセットによって表される浮動小数点値と前記全体的なスティッキービット値とに基づいて、前記合計のビットのセットによって表される浮動小数点値を丸めるよう決定することとを含む、請求項9に記載の多入力ハードウェア加算器。
  11. 前記オペレーションは、前記全体的なスティッキービット値が、非0でありかつ正規化中に前記合計のビットのセットの仮数にシフトされるときはいつでも、前記全体的なスティッキービット値を表すであろう前記合計のビットのセットの仮数のビットを0に割り当てることによって、前記全体的なスティッキービット値が正規化中に前記合計のビットのセットの仮数に含まれないようにすることを含む、請求項9または10に記載の多入力ハードウェア加算器。
  12. 前記オペランドの仮数ビットを0以上のビット位置だけシフトすることは、前記オペランドの指数と前記所与のオペランドの指数との差に基づいて前記仮数ビットをシフトすることを含む、請求項8~11のいずれか1項に記載の多入力ハードウェア加算器。
  13. 前記各他のオペランドが整列される所与のオペランドを識別することは、最大の指数値を有するオペランドを識別することを含む、請求項8~12のいずれか1項に記載の多入力ハードウェア加算器。
  14. 前記多入力ハードウェア加算器は、4つの浮動小数点入力を有し、前記4つの浮動小数点入力で受け取られる4つの浮動小数点値の和を求める4入力加算器である、請求項8~13のいずれか1項に記載の多入力ハードウェア加算器。
  15. 多入力ハードウェア加算器であって、
    3つ以上の浮動小数点オペランドを受けるように構成された3つ以上の入力を備え、各入力は、オペランドの浮動小数点表現を含むビットのセットを受けるように構成され、前記多入力ハードウェア加算器はさらに、
    各他のオペランドが整列される所与のオペランドを識別するように構成される指数減算およびスワップコンポーネントと、
    1つ以上のシフタとを備え、前記1つ以上のシフタは、
    前記所与のオペランドと異なる各他のオペランドについて、当該オペランドのビットが前記所与のオペランドのビットと整列するように当該オペランドの仮数ビットを0以上のビット位置だけシフトさせることによって、当該オペランドについて、シフトされたビットのセットを生成することと、
    前記シフトに基づいて、前記各他のオペランドに対するスティッキービットの値を決定するよう構成され、オペランドに対する前記スティッキービットは、
    非0値が、前記オペランドの仮数ビットの最下位位置および任意の精度ビット位置を越えてシフトされて、前記オペランドに対する前記シフトされたビットのセットを生成したとき、非0値を有し、前記多入力ハードウェア加算器はさらに、
    各スティッキービットの値に基づいて、全体的なスティッキービット値を決定するように構成されたスティッキービット計算器を備え、
    他のオペランドのすべてに対するスティッキービットのすべてが0であるときに、前記全体的なスティッキービット値は、0であり、
    前記他のオペランドのうちの少なくとも2つが、非0でありかつ一致しないスティッキービットを有するときに、前記全体的なスティッキービット値は、0であり、
    各非0スティッキービットのすべてが一致するときに、前記全体的なスティッキービット値は、前記各非0スティッキービットの値に一致し、
    非0スティッキービットが1つだけあるときに、前記全体的なスティッキービット値は、前記非0スティッキービットの値に一致し、
    前記多入力ハードウェア加算器はさらに、
    (i)前記所与のオペランドを表すビットのセット、(ii)前記各他のオペランドに対する前記シフトされたビットのセット、および(iii)前記全体的なスティッキービット値を用いて、前記3つ以上のオペランドの和を求める加算器回路を備える、多入力ハードウェア加算器。
  16. 前記1つ以上のシフタは、非0値がオペランドに対するスティッキービットにシフトされるときはいつでも、前記スティッキービットを1の値にセットする、請求項15に記載の多入力ハードウェア加算器。
  17. 前記加算器回路は、さらに、
    前記所与のオペランドを表すビットのセットと各シフトされたビットのセットとの和を表す合計のビットのセットを決定し、
    前記合計のビットのセットの仮数の隠れビットが0であるときはいつでも、前記合計のビットのセットの仮数を前記隠れビットが1になるまでシフトさせることによって、前記合計のビットのセットの仮数を正規化し、
    前記合計のビットのセットの仮数および前記全体的なスティッキービット値に基づいて、前記合計のビットのセットによって表される浮動小数点値を丸めるべきかどうかを判断するよう構成される、請求項15または16に記載の多入力ハードウェア加算器。
  18. 前記合計のビットのセットによって表される浮動小数点値を丸めるかどうかを判断することは、
    前記合計のビットのセットの仮数を正規化するために前記合計のビットのセットの仮数をシフトさせたビット位置の数を決定することと、
    前記ビット位置の数が、前記スティッキービット以外の前記多入力ハードウェア加算器の精度ビット数を超えるときはいつでも、前記合計のビットのセットによって表される浮動小数点値と前記全体的なスティッキービット値とに基づいて、前記合計のビットのセットによって表される浮動小数点値を丸めるよう決定することとを含む、請求項17に記載の多入力ハードウェア加算器。
  19. 前記加算器回路は、前記全体的なスティッキービット値が、非0でありかつ正規化中に前記合計のビットのセットの仮数にシフトされるときはいつでも、前記全体的なスティッキービット値を表すであろう前記合計のビットのセットの仮数のビットを0に割り当てることによって、前記全体的なスティッキービット値が正規化中に前記合計のビットのセットの仮数に含まれないようにすることを含む、請求項17または18に記載の多入力ハードウェア加算器。
  20. 前記オペランドの仮数ビットを0以上のビット位置だけシフトすることは、前記オペランドの指数と前記所与のオペランドの指数との差に基づいて前記仮数ビットをシフトすることを含む、請求項15~19のいずれか1項に記載の多入力ハードウェア加算器。
JP2021569502A 2019-05-24 2019-12-12 多入力浮動小数点加算器 Active JP7285966B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962852796P 2019-05-24 2019-05-24
US62/852,796 2019-05-24
US16/435,075 2019-06-07
US16/435,075 US10514891B1 (en) 2019-05-24 2019-06-07 Multi-input floating-point adder
PCT/US2019/065956 WO2020242526A1 (en) 2019-05-24 2019-12-12 Multi-input floating-point adder

Publications (2)

Publication Number Publication Date
JP2022533850A JP2022533850A (ja) 2022-07-26
JP7285966B2 true JP7285966B2 (ja) 2023-06-02

Family

ID=68979699

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021569502A Active JP7285966B2 (ja) 2019-05-24 2019-12-12 多入力浮動小数点加算器

Country Status (8)

Country Link
US (2) US10514891B1 (ja)
EP (1) EP3977259A1 (ja)
JP (1) JP7285966B2 (ja)
KR (1) KR102639646B1 (ja)
CN (1) CN113874833A (ja)
BR (1) BR112021023433A2 (ja)
TW (1) TWI723681B (ja)
WO (1) WO2020242526A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2598107B (en) * 2020-08-17 2022-08-17 Imagination Tech Ltd Method and system for processing floating point numbers
WO2023113445A1 (ko) * 2021-12-14 2023-06-22 서울대학교산학협력단 부동 소수점 연산 방법 및 장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007156748A (ja) 2005-12-02 2007-06-21 Fujitsu Ltd 演算処理装置,情報処理装置,及び演算処理方法
JP2017530445A (ja) 2014-08-18 2017-10-12 クゥアルコム・インコーポレイテッドQualcomm Incorporated 融合された乗算−加算演算のエミュレーション

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5502401A (en) * 1995-04-26 1996-03-26 Texas Instruments Incorporated Controllable width or gate
JP2747267B2 (ja) * 1996-01-29 1998-05-06 甲府日本電気株式会社 3入力浮動小数点加算装置
JP3695820B2 (ja) * 1996-02-02 2005-09-14 株式会社東芝 浮動小数点積和演算器
JP2919386B2 (ja) 1996-09-19 1999-07-12 甲府日本電気株式会社 浮動小数点数検出装置および浮動小数点数検出回路
JP2002215384A (ja) * 2001-01-16 2002-08-02 Toshiba Corp 多入力加減算回路
JP4388543B2 (ja) 2006-12-14 2009-12-24 株式会社日立製作所 3項入力の浮動小数点加減算器
US8650231B1 (en) * 2007-01-22 2014-02-11 Altera Corporation Configuring floating point operations in a programmable device
CN104081341B (zh) * 2011-12-23 2017-10-27 英特尔公司 用于多维数组中的元素偏移量计算的指令
US9405728B2 (en) * 2013-09-05 2016-08-02 Altera Corporation Floating-point adder circuitry
US9904513B2 (en) * 2015-06-25 2018-02-27 Intel Corporation Handling instructions that require adding results of a plurality of multiplications
US10037189B2 (en) * 2016-09-20 2018-07-31 Altera Corporation Distributed double-precision floating-point multiplication
US10078512B2 (en) * 2016-10-03 2018-09-18 Via Alliance Semiconductor Co., Ltd. Processing denormal numbers in FMA hardware

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007156748A (ja) 2005-12-02 2007-06-21 Fujitsu Ltd 演算処理装置,情報処理装置,及び演算処理方法
JP2017530445A (ja) 2014-08-18 2017-10-12 クゥアルコム・インコーポレイテッドQualcomm Incorporated 融合された乗算−加算演算のエミュレーション

Also Published As

Publication number Publication date
KR20210147070A (ko) 2021-12-06
US20200371748A1 (en) 2020-11-26
US10514891B1 (en) 2019-12-24
TWI723681B (zh) 2021-04-01
WO2020242526A1 (en) 2020-12-03
KR102639646B1 (ko) 2024-02-21
TW202044017A (zh) 2020-12-01
CN113874833A (zh) 2021-12-31
JP2022533850A (ja) 2022-07-26
EP3977259A1 (en) 2022-04-06
BR112021023433A2 (pt) 2022-01-11

Similar Documents

Publication Publication Date Title
US8046399B1 (en) Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module
US9483232B2 (en) Data processing apparatus and method for multiplying floating point operands
US8185570B2 (en) Three-term input floating-point adder-subtractor
US5677861A (en) Arithmetic apparatus for floating-point numbers
JP7285966B2 (ja) 多入力浮動小数点加算器
WO1999040508A1 (en) Fast adder/subtractor for signed floating point numbers
US5260889A (en) Computation of sticky-bit in parallel with partial products in a floating point multiplier unit
US6941335B2 (en) Random carry-in for floating-point operations
US10489115B2 (en) Shift amount correction for multiply-add
US5623435A (en) Arithmetic unit capable of performing concurrent operations for high speed operation
KR20020063058A (ko) 덧셈 및 반올림 연산을 동시에 수행하는 부동 소수점alu 연산 장치
US5278782A (en) Square root operation device
Schwarz Binary Floating-Point Unit Design: the fused multiply-add dataflow
CN112783470A (zh) 一种用于执行浮点对数运算的装置和方法
Wires et al. Reciprocal and reciprocal square root units with operand modification and multiplication
KR100974190B1 (ko) 부동 소수점을 이용한 복소수 곱셈방법
JP2002023997A (ja) 浮動小数点演算のための選択ベースの丸め方法
US20040049528A1 (en) Apparatus and method for adding multiple-bit binary-strings
JP2761145B2 (ja) 開平演算装置
JP3100868B2 (ja) 浮動小数点数のための算術演算装置
Chittaluri Implementation of area efficient IEEE-754 double precision floating point arithmetic unit using Verilog
Balasaraswathi et al. IMPLEMENTATION OF FLOATING POINT FFT PROCESSOR WITH SINGLE PRECISION FOR REDUCTION IN POWER
George Improved architecture for floating-point four-term dot product unit
Jaiswal et al. Dual-mode double precision division architecture
Baesler et al. Analysis of fast radix-10 digit recurrence algorithms for fixed-point and floating-point dividers on FPGAs

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220120

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230105

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: 20230425

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230523

R150 Certificate of patent or registration of utility model

Ref document number: 7285966

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150