JP2010049614A - 計算機 - Google Patents

計算機 Download PDF

Info

Publication number
JP2010049614A
JP2010049614A JP2008215174A JP2008215174A JP2010049614A JP 2010049614 A JP2010049614 A JP 2010049614A JP 2008215174 A JP2008215174 A JP 2008215174A JP 2008215174 A JP2008215174 A JP 2008215174A JP 2010049614 A JP2010049614 A JP 2010049614A
Authority
JP
Japan
Prior art keywords
mantissa
input
exponent
arithmetic unit
sign
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.)
Pending
Application number
JP2008215174A
Other languages
English (en)
Inventor
Masaya Nakahata
昌也 中畑
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2008215174A priority Critical patent/JP2010049614A/ja
Publication of JP2010049614A publication Critical patent/JP2010049614A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】SIMD型計算機やベクトル型計算機に適用可能な、特定の初期値を検出して別処理を行うことを不要とする、ソフトウェアシーケンスによる高性能な除算を実行する。
【解決手段】符号および仮数と、指数とを分解し、2者を別々に計算する除算用の計算機において、符号および仮数を取り出す演算器と、2つの数の指数の差を取り出す演算器を設ける。
【選択図】図2

Description

本発明は、浮動小数点データの数値演算を行う高性能計算機に関し、特に反復法によって除算を行う計算機に関する。
計算機で実行する除算のアルゴリズムとして、1回の繰り返しごとに固定ビット数ずつ結果が得られるSRT法や、二次の収束性をもつ反復法(Newton−Raphson法、Goldschmit法など)を用いた繰り返しによるものが知られている。
二次の収束性をもつ反復法であれば、一回の反復により仮数部の有効ビット数が2倍になるため、除数の逆数近似値をテーブルなどによって適切な有効ビット数の精度で与えることができれば、一定の回数の反復により、所望の精度で結果を得ることができる。
計算機で除算を実現する手段としては、ハードウェアで除算器を構成する場合と、ソフトウェアによる除算のシーケンスを実行する場合がある。通常、計算機における除算はその頻度が小さいにも拘わらず、高性能な除算器はハードウェア規模が大きくなる。
そのため、ソフトウェアで除算を実現するものとして、例えば、米国インテル社のItaniumプロセッサ(インテル社商標)は、命令セットアーキテクチャに浮動小数点除算の命令を備えず、除数の逆数近似値を初期値とし、乗加算器を使って、二次の収束性をもつ反復法に基づくソフトウェアシーケンスにより、除算を実行している。
特に多数の除算を実行する場合には、パイプライン化され、レジスタ数の多いプロセッサにおいては、ソフトウェアパイプライニングが可能となる。このため、ソフトウェアシーケンスによる除算は、ハードウェアで除算器を構成する場合に比べて、スループットが向上する。
しかし、ソフトウェアシーケンスによる除算においては、被除数と除数によっては、商自体が計算機の扱うことができる浮動小数点データの範囲内であっても、反復計算の初期値である逆数近似値、または反復計算の途中でオーバーフロー、アンダーフロー、または精度落ちを引き起こすことがある。
例えば、非特許文献1(IEEE754−1985)で定める浮動小数点数のフォーマットでは、正規化数よりも小さい値(denormalized number)が定義されているが、この値の逆数近似値は浮動小数点数のフォーマットで表現できる値の範囲を越える場合がある。
この問題に対しては、特定の初期値を検出して別処理を行う等の解決策が考えられる。例えば、上記Itaniumプロセッサでは、逆数近似値を求める命令において、被除数と除数の組が、反復計算が失敗するような範囲であることを検出し、浮動小数点例外を発生させる。浮動小数点例外が発生すると、通常のソフトウェアシーケンスによる除算をキャンセルし、システムソフトウェアが正しい商を計算する。
IEEE,"IEEE Standard for binary Floating−Point Arithmetic",ANSI/IEEE Standard754−1985.
しかしながら、上記のような処理をSIMD(Single Instruction Multiple Data)型計算機やベクトル計算機に適用するのは困難である。このため、SIMD型計算機やベクトル型計算機において高性能な除算を実現する場合、一般的にユーザプログラムに制約を設けている。
本発明の目的は、SIMD型計算機やベクトル型計算機に適用可能な、特定の初期値を検出して別処理を行うことを不要とする、ソフトウェアシーケンスによる高性能な除算を実行する計算機を提供することにある。
本発明は、符号および仮数と、指数とを分解し、2者を別々に計算する。被除数と除数の双方を、指数が0付近の正規化数と、符号が正で正規化した時の仮数の値が1である2つの数の積に分解する。その結果、指数が0付近の正規化数であれば、反復計算の初期値である逆数近似値、または反復計算の途中でオーバーフロー、アンダーフロー、または精度落ちを引き起こさない。反復計算の後で、指数を調整することで、正しい商が得られる。
上記を実現するために、符号および仮数を取り出す第1の演算器と、2つの数の指数の差を取り出す第2の演算器を用いて除算を実現する。また、被除数の仮数が除数の仮数よりも小さい場合には指数を補正する手段を有する。
好ましい例によれば、本発明は、符号部、指数部、および仮数部からなる、主従2つの浮動小数点データを入力とし、1つの浮動小数点データを出力とする演算器であって、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より大きいかまたは等しい場合は、主たる入力の符号と仮数の値を保存し指数を0とした正規化数を出力し、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より小さい場合は、主たる入力の符号と仮数の値を保存し指数を1とした正規化数を出力する演算器を有することを特徴とする計算機として構成される。
また好ましくは、本発明は、符号部、指数部、および仮数部からなる浮動小数点データを扱う演算器を有する計算機であって
主従2つの浮動小数点データを入力とし、1つの浮動小数点データを出力とする演算器であって、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より大きいかまたは等しい場合は、主たる入力の符号と仮数の値を保存し指数を0とした正規化数を出力し、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より小さい場合は、主たる入力の符号と仮数の値を保存し指数を1とした正規化数を出力する第1の演算器と、
主従2つの浮動小数点データを入力とし、1つの浮動小数点データを出力とする演算器であって、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より大きいかまたは等しい場合は、主たる入力を正規化した数の仮数を1としたものを、従たる入力を正規化した数の仮数を1としたもので除した結果を出力し、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より小さい場合は、主たる入力を正規化した数の仮数を1としたものを、従たる入力を正規化した数の仮数を1としたもので除した結果をさらに指数の底で除した結果を出力する第2の演算器を有することを特徴とする計算機として構成される。
また、好ましくは、1つの浮動小数点データを入力とし、1つの浮動小数点データを出力とする演算器であって、入力を正規化した数の指数を0としたものの逆数の近似値を出力する演算器を更に有する上記計算機として構成される。
本発明によれば、ソフトウェアによる除算において、反復計算の初期値である逆数近似値、または反復計算の途中でオーバーフロー、アンダーフロー、または精度落ちを引き起こさないシーケンスを組むことができる。これにより、SIMD型計算機やベクトル計算機において、ユーザプログラムに制約を設けず、高性能な除算を実現することができる。
[実施例1]
以下、図面を参照して本発明の実施形態について詳細に説明する。
図1及び図2は、一実施例における除算の処理フローを示す。図1は、被除数の仮数が除数の仮数よりも大きいか等しい場合の除算の処理フロー、図2は、被除数の仮数が除数の仮数よりも小さい場合の除算のフローである。両図とも、数値表現については、被除数および除数の両方が正規化数の場合について例示するが、非正規化数であっても処理フローは実質的に同じである。
IEEE754−1985の表現形式による浮動小数点数の正規化数は、
a = (-1)^S(a) * 1.F(a) * 2^{E(a)-bias}
のようになる。ここで、aは浮動小数点数、S(a)はaの符号、F(a)はaの仮数部の節約表現、{E(a)-bias}はaの指数である。倍精度浮動小数点数の場合は、S(a)は1ビット、F(a)は52ビット、E(a)は11ビットの2進数であり、biasは1023である。
ここで、本発明により下記の2つの新規な命令、即ち、被除数の仮数(w/指数補正) "fX"を求める命令と、商の指数 "fdivE"を求める命令を導入する。
(i)被除数の仮数(w/指数補正) "fX"
fX(a,b) = (-1)^S(a) * 1.F(a) if F(a) >= F(b)
(-1)^S(a) * 1.F(a) * 2 if F(a) < F(b)
(ii)商の指数 "fdivE"
fdivE(a,b) = 2^{E(a)-E(b)} if F(a) >= F(b)
2^{E(a)-E(b)-1} if F(a) < F(b)
これらの新規命令を実行する演算器は、2入力であることと、仮数を比較することから、比較を実行する演算器(多くの場合、これは加減算を実行する演算器と共通である)と共通点が多い。また、商の指数fdivEを実行する演算器は、指数の差をとることから、乗算を実行する演算器と共通点がある。
以上を考慮して、これら2つの命令を実行する演算器は、好ましくは図3に示す様に、独立した演算器35,36を有する構成とするのがよい。また他の例として、図4に示す様に、乗加算を実行する演算器43と共用することで、命令追加によるハードウェアの増加を極小に抑えることができる。
図3及び図4は本実施例による演算器の構成例を示す。
図3において、30はSIMD又はベクトル計算機の演算器、31は種々の演算命令がセットされるレジスタ、33は符号部、指数部、および仮数部からなる浮動小数点データを扱う乗加算器、34は例えば論理演算やシフト演算等の乗加算以外の演算器、35は被除数の仮数fXを求める演算器、36は商の指数fdivEを求める演算器である。なお、図には1つのレジスタ31を示しているが、多数のレジスタを備えてもよい。
他の例として、図4において、40はSIMD又はベクトル計算機の演算器、41は種々の演算命令がセットされるレジスタ、43は符号部、指数部、および仮数部からなる浮動小数点データを扱う乗加算器、44は例えば論理演算やシフト演算等の乗加算以外の演算器である。図3の例との違いは、乗加算記43において一般的な乗加算の演算の他に、本実施例に係る被除数の仮数fXの演算、及び商の指数fdivEの演算を行うことである。
次に、図1及び図2を参照しながら、本実施例における除算のアルゴリズムについて説明する。
q = a/bを求める除算のアルゴリズムは以下の様になる。
(1) mb = fX(b,b) /* bの仮数取り出し */
(2) ma = fX(a,b) /* aの仮数(w/指数補正)取り出し */
(3) my0 = 1/mb /* bの仮数の逆数近似値を求める */
(4) e = fdivE(a,b) /* a/bの指数取り出し */
(5) /* 中略: 反復法によりmyを必要な精度で求める */
(6) mq0 = ma * my /* a/bの仮数 */
(7) mr = ma - mb * mq /* 丸め処理 */
(8) mq = mq + mr * my /* 丸め処理 */
(9) q = mq * e /* 指数の掛け戻し */
ステップ(1)とステップ(2)で、図1および図2における除数b(200)の符号および仮数を取り出したものであるmb(210)と、被除数a(100)の符号および仮数を取り出したものに、必要に応じて2倍の補正を加えたものであるma(110)を求める。被除数a(100)の仮数が除数b(200)の仮数よりも大きいか等しい場合は補正が不要であり、この処理を図1のフローに示す。被除数a(100)の仮数が除数b(200)の仮数よりも小さい場合は補正が必要であり、この処理を図2のフローに示す。
この補正により、ma(110)の絶対値 > mb(210)の絶対値 となる。
次にステップ(3)で、mb(200)の逆数近似値であるmy0(300)を求める。その後、ステップ(4)で、商q(600)の指数を取り出したものであるe(400)を求める。
このとき、上記の補正に対応して、被除数a(100)の仮数が除数b(200)の仮数よりも大きいか等しい場合は、e(400)の指数は被除数a(100)の指数と除数b(200)の指数の差となり、図1のフローに示す。
被除数a(100)の仮数が除数b(200)の仮数よりも小さい場合はe(400)の指数は被除数a(100)の指数と除数b(200)の指数の差からさらに「1」を減じたものとなり、図2のフローに示す。
次にステップ(5)で、my0(300)から反復法で、mb(210)の逆数であるmy(310)を求める。そして、ステップ(6)で、ma(110)と、my(310)の積であるmq0(500)を求める。ステップ(7)及び(8)で、mq0(500)から丸め処理により、商q(600)の符号および仮数を取り出したものであるmq(510)を求める。最終的にステップ(9)で、指数と符号および仮数を掛け合わせることで商q(600)を求める。
ここで、逆数近似値を求めるのは、ソフトウェアによりテーブルを検索し、または上記Itaniumプロセッサのような、ハードウェアによる逆数近似値を求める命令を用いるなど、いずれ手段を用いてもよい。
また、図1および図2のフローに示すように、(3)とステップ(5)には依存関係があるが、これらとステップ(2)およびステップ(4)には依存関係が無い。依存関係のないステップに関しては、性能を考慮して適宜入れ替え可能であることはいうまでもない。
また、ステップ(4)の結果は最終ステップまで使われないため、他と比較して、高い性能が要求されないステップとなり得る。このため、fdivEの指数の取り出しは、演算器を設けず、SIMDまたはベクトルのパイプラインを妨げない通常命令の組み合わせで実現することも可能である。
本発明の実施例によれば、除算の前処理として、被除数の仮数(w/指数補正) "fX"を求める演算(ステップ(1)及び(2))、及び商の指数 "fdivE"を求める演算(ステップ(4))を行なうことで(図1のステップ210,110,400)、除算の例外処理を発生させないようにした。これにより、プログラム上の制約を除き、高性能な除算を実行することを実現することが可能である。
[実施例2]
実施例1の2つの新規命令に加え、さらに以下の新規命令を導入する。
(iii) 仮数の逆数近似値 "freM"
freM(b) = (-1)^S(b) * 1/1.F(b)
この命令は、仮数の逆数近似値を求めるものであり、実際の処理はハードウェアテーブル引きである。前出のItaniumプロセッサの逆数近似値を求める命令と似ているが、指数の扱いが異なり、より簡単になっている。
q = a/bを求める除算のアルゴリズムは以下の様になる。
(1) My0 = freM(b) /* bの仮数で逆数テーブル引き */
(2) ma = fX(a,b) /* aの仮数(w/指数補正)取り出し */
(3) mb = fX(b,b) /* bの仮数取り出し */
(4) e = fdivE(a,b) /* a/bの指数取り出し */
(5) /* 中略: 反復法によりmyを必要な精度で求める */
(6) mq0 = ma * my /* a/bの仮数 */
(7) mr = ma - mb * mq /* 丸め処理 */
(8) mq = mq + mr * my /* 丸め処理 */
(9) q = mq * e /* 指数の掛け戻し */
実施例1では、bの仮数を求める処理と、その逆数を求める処理に依存関係があるため、逐次的にしか処理できないが、実施例2ではこの依存がなくなる。このため、パイプライン化されたプロセッサにおいて処理シーケンス全体を高速化することができる。
一実施例における除算の処理フローを示す図。 一実施例における除算の処理フローを示す図。 一実施例による演算器の構成例を示す図。 他の実施例による演算器の構成例を示す図。
符号の説明
100:被除数a
110:被除数aの仮数を取り出したもの。但し、除数の仮数との大小関係による補正を含む。
200:除数b
210:除数bの仮数を取り出したもの。
300:除数bの仮数の逆数近似値
310:除数bの仮数の逆数を反復法により必要な精度まで求めたもの。
400:a/bの指数を取り出したもの。
500:a/bの仮数を取り出したもの。但し、丸め誤差を含む。
510:a/bの仮数を取り出したもの。丸め誤差修正後。
600:a/bの結果。

Claims (4)

  1. 符号部、指数部、および仮数部からなる、主従2つの浮動小数点データを入力とし、1つの浮動小数点データを出力とする演算器であって、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より大きいかまたは等しい場合は、主たる入力の符号と仮数の値を保存し指数を0とした正規化数を出力し、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より小さい場合は、主たる入力の符号と仮数の値を保存し指数を1とした正規化数を出力する演算器を有することを特徴とする計算機。
  2. 符号部、指数部、および仮数部からなる浮動小数点データを扱う演算器を有する計算機であって
    主従2つの浮動小数点データを入力とし、1つの浮動小数点データを出力とする演算器であって、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より大きいかまたは等しい場合は、主たる入力の符号と仮数の値を保存し指数を0とした正規化数を出力し、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より小さい場合は、主たる入力の符号と仮数の値を保存し指数を1とした正規化数を出力する第1の演算器と、
    主従2つの浮動小数点データを入力とし、1つの浮動小数点データを出力とする演算器であって、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より大きいかまたは等しい場合は、主たる入力を正規化した数の仮数を1としたものを、従たる入力を正規化した数の仮数を1としたもので除した結果を出力し、主たる入力を正規化した数の仮数が従たる入力を正規化した数の仮数より小さい場合は、主たる入力を正規化した数の仮数を1としたものを、従たる入力を正規化した数の仮数を1としたもので除した結果をさらに指数の底で除した結果を出力する第2の演算器を有することを特徴とする計算機。
  3. 1つの浮動小数点データを入力とし、1つの浮動小数点データを出力とする演算器であって、入力を正規化した数の指数を0としたものの逆数の近似値を出力する演算器を更に有することを特徴とする請求項1又は2の計算機。
  4. q = a/bを求める除算のアルゴリズムを実行する計算機において、
    被除数の仮数(w/指数補正) "fX"を求める命令を実行する第1の演算器と、商の指数 "fdivE"を求める命令を実行する第2の演算器と、を有し、
    (i)被除数の仮数(w/指数補正) "fX"
    fX(a,b) = (-1)^S(a) * 1.F(a) if F(a) >= F(b)
    (-1)^S(a) * 1.F(a) * 2 if F(a) < F(b)
    (ii)商の指数 "fdivE"
    fdivE(a,b) = 2^{E(a)-E(b)} if F(a) >= F(b)
    2^{E(a)-E(b)-1} if F(a) < F(b)
    除数bの符号および仮数を取り出したものであるmbと、被除数aの符号および仮数を取り出したものに、必要に応じて2倍の補正を加えたものであるmaを求め、被除数aの仮数が除数bの仮数よりも大きいか等しい場合は補正をせず、被除数aの仮数が除数bの仮数よりも小さい場合は所定の補正をすることを特徴とする計算機。
JP2008215174A 2008-08-25 2008-08-25 計算機 Pending JP2010049614A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008215174A JP2010049614A (ja) 2008-08-25 2008-08-25 計算機

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008215174A JP2010049614A (ja) 2008-08-25 2008-08-25 計算機

Publications (1)

Publication Number Publication Date
JP2010049614A true JP2010049614A (ja) 2010-03-04

Family

ID=42066621

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008215174A Pending JP2010049614A (ja) 2008-08-25 2008-08-25 計算機

Country Status (1)

Country Link
JP (1) JP2010049614A (ja)

Similar Documents

Publication Publication Date Title
US9841948B2 (en) Microarchitecture for floating point fused multiply-add with exponent scaling
US11347511B2 (en) Floating-point scaling operation
US8838664B2 (en) Methods and apparatus for compressing partial products during a fused multiply-and-accumulate (FMAC) operation on operands having a packed-single-precision format
US8965945B2 (en) Apparatus and method for performing floating point addition
US8606840B2 (en) Apparatus and method for floating-point fused multiply add
US8046399B1 (en) Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module
CN110168493B (zh) 在128位宽的操作数上的融合乘加浮点运算
US9483232B2 (en) Data processing apparatus and method for multiplying floating point operands
US8463834B2 (en) Floating point multiplier with first and second partial product shifting circuitry for result alignment
CN107025091B (zh) 二进制融合乘加浮点计算
US9696964B2 (en) Multiply adder
JP6415236B2 (ja) 浮動小数点加算ユニットを含む装置及びシステム、並びに浮動小数点加算方法
US8239441B2 (en) Leading zero estimation modification for unfused rounding catastrophic cancellation
JPH06314187A (ja) 引き数簡約の最適化システム
US20100125621A1 (en) Arithmetic processing device and methods thereof
US11068238B2 (en) Multiplier circuit
US20160070573A1 (en) Condition code generation
US20230092574A1 (en) Single-cycle kulisch accumulator
US5943249A (en) Method and apparatus to perform pipelined denormalization of floating-point results
US20080263336A1 (en) Processor Having Efficient Function Estimate Instructions
Quinnell et al. Bridge floating-point fused multiply-add design
US6598065B1 (en) Method for achieving correctly rounded quotients in algorithms based on fused multiply-accumulate without requiring the intermediate calculation of a correctly rounded reciprocal
JPH02227726A (ja) 制御方法
Jaiswal et al. Taylor series based architecture for quadruple precision floating point division
JP2010049614A (ja) 計算機