JP3845009B2 - 積和演算装置、及び積和演算方法 - Google Patents

積和演算装置、及び積和演算方法 Download PDF

Info

Publication number
JP3845009B2
JP3845009B2 JP2001398851A JP2001398851A JP3845009B2 JP 3845009 B2 JP3845009 B2 JP 3845009B2 JP 2001398851 A JP2001398851 A JP 2001398851A JP 2001398851 A JP2001398851 A JP 2001398851A JP 3845009 B2 JP3845009 B2 JP 3845009B2
Authority
JP
Japan
Prior art keywords
data
addition
result
value
multiplication
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.)
Expired - Fee Related
Application number
JP2001398851A
Other languages
English (en)
Other versions
JP2003196079A (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.)
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 JP2001398851A priority Critical patent/JP3845009B2/ja
Priority to US10/108,398 priority patent/US6895423B2/en
Publication of JP2003196079A publication Critical patent/JP2003196079A/ja
Application granted granted Critical
Publication of JP3845009B2 publication Critical patent/JP3845009B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • G06F7/49957Implementation of IEEE-754 Standard
    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

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

Description

【0001】
【発明の属する技術分野】
本発明は、デジタルデータの算術演算を行なう演算装置で用いられる技術に関し、特に、積和演算を行なう演算装置で用いられる技術に関する。
【0002】
【従来の技術】
まず、IEEE(The Institute of Electrical and Electronics Engineers, Inc. )の2進浮動小数点算術演算についての規格(IEEE−754)における浮動小数点数値の表現形式について、図14を参照しながら説明する。
【0003】
図14の(A)に示すように、浮動小数点数値は、符号ビットS、指数部E、及び仮数部Fの3つのフィールドから構成される。
符号ビットSは数値の正負の符号を示す常に1ビットのデータであり、「0」は正数を、「1」は負数をそれぞれ表す。
【0004】
仮数部Fは1.0以上2.0未満の値(正規化数)を表しており、各ビットは2を負の冪乗した数値を表している。例えば、指数部Fの第一番目のビットが「1」のときは2-1、すなわち0.5を表し、第二番目のビットが「1」のときは2-2、すなわち0.25を表しており、これらの各ビットが表す値の合計に1.0を加算した値が仮数部の値となる。この加算する1.0は、仮数部Fに第0番目のビットとして「1」があたかも存在するとみなしたときの20 の値に対応するものである。このビットには正規化数に対して常に「1」が設定されるので、このビットは実際には仮数部Fのフィールドに置かれないが、常に存在するものとして扱われる。このビットは「暗黙の1」などと呼ばれている。
【0005】
指数部Eは2の冪乗の整数値を表すが、この指数部Eで負数値の表現を可能とするためにバイアス付き表現が使用される。このバイアスの値は、表現する浮動小数点数値の精度に基づいて予め定義されている。
【0006】
指数部Eに与えられるバイアス値をBとすると、S、E、F、Bによって表現される浮動小数点数値Xは下記の式で求められる。
X=(−1)S ×2E-B ×(1.0+F)
図14(A)に示す各フィールドに割り当てられるビット数及びバイアスBの値を表現する浮動小数点数値に定義されている精度ごとに示したものが図14の(B)に示す表である。
【0007】
次に、上述したIEEE規格に準拠する、指数部にNビットが割り当てられ仮数部にMビットが割り当てられている3つの浮動小数点数A、B、Cについての積和演算A×B+Cを、正確な中間結果を保ちながら実行することを考える。
【0008】
このような演算を実行し得る、従来の積和演算器の構成例を図15に示す。
同図において、加算回路1001及び仮数部乗算回路1002がAとBとの積算を実行し、その他の回路でA×BとCとの加算を実行する。なお、ここではA、B、Cの各々の符号の処理は行なわないものとする。
【0009】
加算回路1001はAの指数部の値(指数値)とBの指数値との加算を行なう回路である。加算回路1001の入力にはA及びBの値の表現における指数部に割り当てられたビット幅に相当するNビットのビット幅が用意され、その出力にはここでの加算によっては桁落ちが生じない(N+1)ビットのビット幅が用意される。
【0010】
仮数部乗算回路1002はAの仮数部の値(仮数値)とBの仮数値との加算を行なう回路である。仮数部乗算回路1002の入力にはA及びBの値の表現における仮数部に割り当てられたビット幅に前述した暗黙の1のための1ビットを加えたものに相当する(M+1)ビットのビット幅が用意され、その出力にはここでの乗算によっては桁落ちが生じない(2M+2)ビットのビット幅が用意される。
【0011】
A×Bの演算結果とCとを加算するとき、その両者の指数値が一致していない場合には、桁揃えを行なってから、すなわちそのどちらか一方の仮数値における小数点を移動させて両者の指数値を一致させてから仮数値の加算を行なう必要がある。これらの処理が減算回路1003、仮数部選択回路1004、及びアライン回路1005によって行なわれる。
【0012】
減算回路1003はA×Bの演算結果とCとでどちらの指数値が大きいかの判定を行なうと共に、その両者の差の値を算出して両者のうちの一方の仮数値の小数点の移動量を求める。
【0013】
仮数部選択回路1004は、減算回路1003から出力されるセレクト信号、すなわちA×Bの演算結果とCとのうちでその指数値の大きい方を示す信号に基づき、両者のうち指数値の大きい方についての仮数値を絶対値加算回路1006の一方の入力へと出力し、小さい方についての仮数値をアライン回路1005へ出力する。なお、この仮数部選択回路1004の一方の入力には仮数部乗算回路1002から送られてくるA×Bの演算結果の仮数値が入力されるため(2M+2)ビットのビット幅が用意されており、他方の入力にはCの値の表現における仮数部に割り当てられたビット幅に暗黙の1のための1ビットを加えたものに相当する(M+1)ビットのビット幅が用意される。また、この仮数部選択回路1004の2つの出力には、どちらにもA×Bの演算結果の仮数値がそのまま出力され得るので(2M+2)ビットのビット幅が用意されている。
【0014】
アライン回路1005は、減算回路1003から出力されるシフト量情報、すなわちA×Bの演算結果とCとのうちで指数値の小さい方についての仮数値の小数点を桁揃えのために移動させるときの移動量を示す情報に基づいて、仮数部選択回路1004から与えられた仮数値の小数点を移動させ、その移動させた後の仮数値を絶対値加算回路1006のもう一方の入力へと出力する。なお、このアライン回路1005の入出力には共に(2M+2)ビットのビット幅が用意される。
【0015】
絶対値加算回路1006は、仮数部選択回路1004及びアライン回路1005から与えられた、桁揃えがなされているA×Bの演算結果とCとの仮数値についての(2M+2)ビットのビット幅での加算を行なう。
【0016】
絶対値加算回路1006によって行なわれるA×BとCとの仮数部の加算結果が前述した正規化数の存在範囲を外れてしまうことが生じ得る。正規化回路1007はそのような加算結果に対して正規化を施す回路であり、この正規化によって行なわれた仮数値の小数点の移動量はシフト量情報として指数部補正回路1010へと送られる。なお、正規化回路1007の入出力にも共に(2M+2)ビットのビット幅が用意される。
【0017】
丸め回路1008は、正規化回路1007から出力された(2M+2)ビットの仮数部の桁数から有効な精度を有する桁数への丸め、すなわちここでは元のA、B、Cの仮数部で示されている(M+1)ビットから暗黙の1のための1ビットを減じたMビットへの変換を行ない、A×B+Cの積和演算結果の仮数部として出力する。
【0018】
ここで丸めについて更に説明を加える。丸めの方法には一般に以下の種類がよく知られている。
(1)切り捨て:演算結果のうち、定義されている数値表現形式において仮数部に割り当てられているビット数より下位のビットを切り捨てる。
【0019】
(2)切り上げ:定義されている数値表現形式において仮数部に割り当てられているビット数で表現し得る値であって、その値の絶対値が演算結果よりも大きく且つ最も近い値とする。
【0020】
(3)正方向切り上げ:定義されている数値表現形式において仮数部に割り当てられているビット数で表現し得る値であって、その値が演算結果よりも大きく且つ最も近い値とする。
【0021】
(4)負方向切り上げ:定義されている数値表現形式において仮数部に割り当てられているビット数で表現し得る値であって、その値が演算結果よりも小さく且つ最も近い値とする。
【0022】
(5)平均値1:定義されている数値表現形式において仮数部に割り当てられているビット数で表現し得る値であって、最も演算結果に近い値とする。もしも、演算結果がそのような値を決められない値であるとき、すなわち仮数部以下第1位ビットが「1」で、それより下のビットが全て「0」のときには、それに最も近い2つの値のうち、仮数部最下位ビットが0(又は1)の方を取る。なお、仮数部以下第1位ビットとは、図16に示すように、定義されている数値表現形式において仮数部に割り当てられているうちの最下位のビットである仮数部最下位ビットの1つ下の位のビットである。
【0023】
(6)平均値2:定義されている数値表現形式において仮数部に割り当てられているビット数で表現し得る値であって、最も演算結果に近い値とする。もしも、演算結果がそのような値を決められない値であるとき、すなわち仮数部以下第1位ビットが「1」で、それより下のビットが全て「0」のときには、それに最も近い2つの値のうち、それらの絶対値が大きい(又は小さい)方を取る。
【0024】
(7)平均値3:定義されている数値表現形式において仮数部に割り当てられているビット数で表現し得る値であって、最も演算結果に近い値とする。もしも、演算結果がそのような値を決められない値であるとき、すなわち仮数部以下第1位ビットが「1」で、それより下のビットが全て「0」のときには、それに最も近い2つの値のうち、大きい(又は小さい)方を取る。
【0025】
以上のように、丸めには様々な方法があり、演算結果の用途に応じて使い分けられている。
図15の説明へ戻る。セレクタ1009は、減算回路1003から出力されるセレクト信号に基づき、A×Bの演算結果とCとの指数値のうちで大きい方、すなわち、絶対値加算回路1006で行なわれる仮数値同士の加算における基準である指数値を選択する。
【0026】
指数部補正回路1010は、正規化回路1007から送られてくるシフト量情報に基づいてセレクタ1009で選択された指数値の補正を行ない、更に数値表現形式における指数部のために割り当てられているNビットの値への変換を行なってA×B+Cの積和演算結果の指数値として出力する。
【0027】
図15に示す積和演算器は以上のようにしてA×B+Cの積和演算を実行する。
【0028】
【発明が解決しようとする課題】
上述したように、A、B、Cの各々がとり得る指数値又は仮数値に対して制限を与えることなく上述したA×B+Cの積和演算を行なうためには、まずAとBとの積算の結果のために、仮数部では最低でも(2M+2)ビット、指数部では最低でも(N+1)ビットの精度が必要であり、更に、この積算結果A×Bをそのまま次の加算演算のオペランドとしなくてはならなかった。このため、汎用の演算器がこの積和演算を実行可能とするためには、図15のように、(N+1)ビットの指数部減算回路1003、(N+1)ビットからNビットへの指数部補正回路1010、(2M+2)ビットの仮数部選択回路1004、(2M+2)ビットのアライン回路1005、(2M+2)ビットの絶対値加算回路1006、(2M+2)ビットの正規化回路1007、及び丸め演算回路1008をこのためのみに装備しなければならず、回路実装上での負担が大きかった。
【0029】
また、この他にも既存の演算器を利用して積和演算を行なう技術が開示されているが(例えば、特開平10−207693号公報)、これらの技術では、演算結果が正規化を必要とする場合や、A×Bの積算結果とCとの加算において仮数部からのキャリーアウトが起こる場合などを特殊ケースと見なし、その特殊ケースを対処する特別な処理を行なうようにしており、この特別な処理の実行は演算のレイテンシを長くさせてしまうため、これらの技術では不向きな演算が存在していた。例えば、非除数Xを除数Yで除算したときの剰余を連続して求めるには、まず、非除数Xを除数Yで除算したときの商の整数部Zを求め、その後にX−Z×Yなる計算を実行してその剰余を得る計算が一般に実行されるが、このような演算では特に除算演算の実行後において正規化処理が高い確率で発生するため、ほとんどの場合が例外処理となり、演算のレイテンシを長くさせてしまっていた。
【0030】
以上の問題を鑑み、浮動小数点数積和演算について十分な演算精度を有する演算装置を少ない回路規模の増加で実現することが本発明が解決しようとする課題である。
【0031】
【課題を解決するための手段】
本発明の態様のひとつである積和演算装置は、浮動小数点数をビット列で表現する浮動小数点数データの乗算及び加算を行なうことで積和演算を実行する装置を前提とし、この装置に、前記浮動小数点数データの乗算を行なう乗算手段と、前記浮動小数点数データの加算を行なう加算手段と、前記加算手段で行なわれた加算の結果として得られる浮動小数点数データに丸めの処理を施す丸め手段と、前記浮動小数点数データである第一のデータと第二のデータとの積へ該浮動小数点数データである第三のデータを加算する積和演算の結果が格納される結果格納手段と、前記第一のデータと前記第二のデータとの乗算の結果である乗算結果データを前記乗算手段に算出させる乗算制御手段と、前記乗算結果データにおける仮数部を表現するビット列を該仮数部における上位の桁を表現するものと該仮数部における下位の桁を表現するものとの2つに分割したうちの該下位の桁を表現するビット列を仮数部とする下位乗算結果データに、前記第三のデータを加算して得られる第一加算結果データを前記加算手段に算出させる第一加算制御手段と、前記第一加算結果データに前記上位の桁を表現するビット列を仮数部とする上位乗算結果データを加算して得られる第二加算結果データを前記加算手段に算出させる第二加算制御手段と、を有し、前記結果格納手段には、前記第二加算結果データに対する丸めの処理が前記丸め手段によって施されて得られる浮動小数点データである第一の積和演算結果データが格納されるように構成することによって前述した課題を解決する。
【0032】
ここで、前記浮動小数点数データの表現形式は、例えば、IEEE(The Institute of Electrical and Electronics Engineers, Inc. )の2進浮動小数点算術演算についての規格であるIEEE−754規格に準拠しているものとする。
【0033】
上記の構成によれば、第一のデータと第二のデータとの乗算結果を、その仮数部における上位の桁を仮数部とするデータとその仮数部における下位の桁を仮数部とするデータとの2つに分け、これらと第三のデータとの加算を2回に分けて行なうようにしたので、乗算結果がそのままのビット幅で加算手段に入力する構成を採る場合に比べて加算手段の回路規模が小さくなり、また乗算手段から加算手段へデータを転送するバスのビット幅も少なくなるので、回路規模の増大が抑制される。
【0034】
また、加算手段における加算の順序について、乗算結果の仮数部における下位の桁を仮数部とするデータと第三のデータとの加算を先に行なうようにしたので、乗算結果の仮数部における上位の桁を仮数部とするデータと第三のデータとの加算を先に行なうとその加算の途中で行なわれる仮数部の桁揃えのために消失してしまう可能性のある第三のデータの下位部分が消失することなく、十分な演算精度を有することができる。
【0035】
なお、上述した本発明に係る積和演算装置において、前記上位乗算結果データに前記第三のデータを加算して得られる第三加算結果データを前記加算手段に算出させる第三加算制御手段と、前記第三加算結果データに前記下位乗算結果データを加算して得られる第四加算結果データを前記加算手段に算出させる第四加算制御手段と、前記上位乗算結果データと前記第三のデータとの比較を行なう比較手段と、を更に有し、前記結果格納手段には、前記比較手段による前記比較の結果に基づき、前記第一の積和演算結果データの代わりに、前記第四加算結果データに対する丸めの処理が前記丸め手段によって施されて得られる浮動小数点データである第二の積和演算結果データが格納されるように構成することもできる。
【0036】
第一加算結果データと上位乗算結果データと加算して第二加算結果データを得る後の加算において正規化を行なう必要が生じた場合には、先に行なわれた第一加算結果データを算出するための加算の際に桁揃えのために切り捨てられてしまった下位の桁の値に関する情報が必要になるが、この順序で和を求めるときには、後の加算のときに既に下位の桁の値は消失してしまう。そこで、このような場合が生じるか否かを比較手段を用いて先に判定するようにし、このような場合が生じるときには上位乗算結果データと第三のデータとから第三加算結果データを得る加算を先に行ない、第三加算結果データと下位乗算加算結果データとから第四加算結果データを得る加算を後に行なうようにして、この問題を解消するものがこの発明である。
【0037】
なお、ここで、前記比較手段による比較の結果が前記上位乗算結果データと前記第三のデータとの符号が一致していることを示しているときには、前記結果格納手段には前記第一の積和演算結果データが格納されるように構成することができる。
【0038】
また、前記比較手段による比較の結果が前記上位乗算結果データと前記第三のデータとの符号が異なっていることを示しているときには、該比較の結果が、該上位乗算結果データで表現されている指数部の値と該第三のデータとの指数部の値とが一致していることを示している場合、若しくは、該上位乗算結果データで表現されている指数部の値と該第三のデータとの指数部の値との差が1であって且つ該乗算結果データと該第三のデータとでそれぞれ表現されている指数部の値のうち大きい方のものについての仮数部を表現しているビット列のうちの最上位のビットが0である場合には前記第二の積和演算結果データが格納され、その他の場合には前記第一の積和演算結果データが格納されるように構成することができる。
【0039】
また、前述した本発明に係る積和演算装置において、前記乗算手段による乗算の結果若しくは前記加算手段による加算の結果を示す浮動小数点数データにおいて指数部の表現のために割り当てられているビット数を、該乗算若しくは該加算においてオーバーフロー又はアンダーフローが生じたことを示す情報に基づいて拡張する変換を行なう指数部変換手段を更に有し、前記加算手段で行なわれる加算の対象が前記乗算手段による乗算の結果若しくは該加算手段自身が以前に行なった加算の結果を示すデータであるとき、該加算手段は、前記指数部変換手段による変換が行なわれた後の値が該データにおける指数部の値であるものとして該データの加算を行なうように構成することもできる。
【0040】
この構成によれば、前記乗算手段及び前記加算手段のそれぞれから出力される加算結果若しくは乗算結果で表現し得る指数値の範囲が制限されているときでも、その制限が積和演算に及ぼす精度の低下の影響を低減することができる。
【0041】
また、前述した本発明に係る積和演算装置において、前記加算手段は、該加算手段で行なわれた加算の結果として得られる浮動小数点数データに前記丸め手段が丸めの処理を施すための基とする情報である丸め処理情報を該加算の結果と併せて出力し、前記丸め手段は、前記第二加算結果データに対して前記丸めの処理を施すときには、前記加算手段が前記第一加算結果データの算出を行なったときに出力された第一の丸め処理情報、及び該加算手段が該第二加算結果データの算出を行なったときに出力された第二の丸め処理情報に基づいて該丸めの処理を施すように構成することもできる。
【0042】
この構成は、例えば、前記丸め処理情報は、前記加算手段による加算の対象とする2つの浮動小数点数データのうちのいずれかの仮数部の値に対し、仮数部の値の加算のために施される桁揃えによって切り捨てられたビット列のうちの最上位のビットであるガードビット、該最上位のビットの下の桁である第二位のビットであるラウンドビット、及び該第二位のビットの下の桁以降の全てのビットの論理和を示すビットであるスティッキービットとを有し、前記丸め手段は、前記第二加算結果データに対して前記丸めの処理を施すときには、前記第一の丸め情報におけるガードビットと前記第二の丸め情報におけるガードビットとの論理和、該第一の丸め情報におけるラウンドビットと該第二の丸め情報におけるラウンドビットとの論理和、及び該第一の丸め情報におけるガードビットとラウンドビットとスティッキービットと該第二の丸め情報におけるスティッキービットとの論理和、に基づいて該丸めの処理を施すように構成する。
【0043】
この構成によれば、第一のデータと第二のデータとの乗算結果を、その仮数部における上位の桁を仮数部とするデータとその仮数部における下位の桁を仮数部とするデータとの2つに分け、これらと第三のデータとの加算を2回に分けて行なうようにしたことが丸め手段による丸め処理に対して及ぼす影響を除外することができるようになり、その影響に起因する積和演算結果の精度の低下を防止することができる。
【0044】
また、本発明の別の態様のひとつである積和演算方法は、浮動小数点数をビット列で表現する浮動小数点数データである第一のデータと第二のデータとの積へ該浮動小数点数データである第三のデータを加算する積和演算を実行する方法を前提とし、浮動小数点数データの乗算を行なう乗算器に前記第一のデータと前記第二のデータとの乗算を行なわせ、前記乗算の結果である乗算結果データにおける仮数部を表現するビット列を該仮数部における上位の桁を表現するものと該仮数部における下位の桁を表現するものとの2つに分割したうちの該下位の桁を表現するビット列を仮数部とする下位乗算結果データに前記第三のデータを加算する演算を浮動小数点数データの加算を行なう加算器に行なわせ、前記加算の結果である第一加算結果データに前記上位の桁を表現するビット列を仮数部とする上位乗算結果データを加算して得られる第二加算結果データを前記加算器に算出させ、前記第二加算結果データに対して丸めの処理を施して得られたデータを該積和演算の結果とすることで前述した本発明に係る積和演算装置と同様の作用・効果が得られ、前述した課題を解決することができる。
【0045】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて説明する。
まず、本実施の形態の原理を説明する。なお、以下の説明では、IEEE規格に準拠する、指数部にNビットが割り当てられ仮数部にMビットが割り当てられている3つの浮動小数点数A、B、Cについての積和演算A×B+Cを実行する演算装置を、既存のIEEE浮動小数点数演算器を改良して実現することについて説明する。
【0046】
まず、この演算器に入力されるオペランドAとBとの乗算を行なう乗算演算部について説明する。
この乗算演算部に入力される値の仮数部はMビットであるが、IEEE浮動小数点数の表現形式では仮数部最上位ビットの上に暗黙の1である1ビットが省かれているため、実際にはそれを加えた(M+1)ビットが仮数乗算の対象となる。また、その乗算演算部の有している乗算器による演算結果は(2M+2)ビットで表されることとなるが、IEEE浮動小数点数の表現形式に準拠させるとそこから暗黙の1である1ビットが取り除かれるので、この乗算器から出力される演算結果の仮数部は(2M+1)ビットを有することとなる。
【0047】
なお、既存の浮動小数点数演算器の乗算演算部では、前述したような仮数値に対する丸め処理が回路内部で行なわれるように構成されているためそのようなビット数の演算結果を出力しないものもある。しかし、そのような乗算演算部であっても、正確な丸め演算を行なうために、内部の乗算器自体では(2M+2)ビットからなる正確な積算結果を得ているのが通常であるため、この段階の積算結果を取り出すようにすればこのような乗算演算部を流用する場合であっても正確な演算結果の仮数値を得ることが可能である。
【0048】
一方、この乗算演算部において、オペランドA、Bの指数部についての演算はNビット同士の加算となり、その結果は(N+1)ビットで表現可能である。但し、本実施の形態の演算装置の出力を、積和演算A×B+Cに関してはIEEE浮動小数点数の表現形式に準拠せずに、(N+1)ビットの指数値を得るようにするためには、この乗算演算部の後段に設けられる演算部に適当な変更を加える必要がある。
【0049】
この乗算演算部がIEEE浮動小数点数の表現形式に則りNビットの指数値を出力するのであれば、A×BとCとの加算を行なう前に、まず、乗算演算部から出力される、演算結果におけるNビットの指数値と指数オーバーフロー及び指数アンダーフローを示す信号とから以下のような操作を加えて(N+1)ビットの指数値を得るための回路を設ける。
【0050】
通常、乗算演算部において指数オーバーフローや指数アンダーフローが生じたときの出力である演算結果の指数値は補正が施されている。この指数補正では、予め定義されている指数部のビット数では表現しきれなくなった浮動小数点数を、定数βで除算又は乗算して指数値を調整する。指数オーバーフローが生じたときはその値をβで除し、指数アンダーフローが生じたときはその値にβを乗じる。ここで、βは、指数オーバーフロー又は指数アンダーフローが生じたときにとり得る全ての指数値について、定義されているビットで表現し得る範囲に収める値とされる。
【0051】
次に、前述した乗算演算部の内部で指数補正処理が施された後のNビットの指数値と、その乗算演算部から出力されるオーバーフロー又はアンダーフローの信号とから、(N+1)ビットに拡張した指数値を得る手法について具体的に説明する。なお、この手法では、指数値に与えられている前述したバイアス値もその指数部に割り当てられているビット数に応じて変更する。
【0052】
変換前のバイアス込みのNビットからなる指数値をE1、変換後のバイアス込みの(N+1)ビットからなる指数値をE2とし、変換前のNビットからなるバイアスをB1、変換後の(N+1)ビットからなるバイアスをB2、乗算演算部の指数補正処理において使用されていた定数βを2のα乗(但し、αはNビットの数値)とすると、
Figure 0003845009
が指数値の変換式になる。これらの式を、後の説明の都合上、指数値変換式と称することとする。
【0053】
この指数値変換式において、Nビットの値については、最上位ビットが「0」である(N+1)ビットの値であるとみなして(N+1)ビットでの加減算を行なう。なお、上記の各式における右辺の括弧内の値は全て定数であるので、この指数値の変換では、上記の括弧内の演算を予め行なっておき、その結果として得られた定数を変換前の指数値に加算するだけで得られる。
【0054】
この変換によって得られた(N+1)ビットの指数値で表現し得る数値の範囲は、図1に示すように、変換前のNビットの指数値で表現し得る数値の範囲に対して大幅に広がる。
【0055】
次に、A×BとCとの加算を行なう回路について説明する。
既存のIEEE浮動小数点数演算器の有する加算演算部における指数部の入力は一般的にNビットのビット幅を有しているが、上述した変更によって乗算演算部から出力される演算結果における指数部のビット数が通常より1ビット増えたため、このままではA×BとCとの加算が実行できない。そこで、この加算演算部に変更を加える。
【0056】
まず、A×BとCとの大小比較、及び仮数値の桁揃えのためのシフト量を求めるための減算器(前述した図15における減算回路1003に相当する回路)を、(N+1)ビット入力が行なえるように変更する。
【0057】
次に、A×Bの乗算結果の値における(2M+1)ビット仮数部を、Mビットの高位部分と、(M+1)ビットの低位部分とに単純に分割し、それぞれ同じ精度を有する浮動小数点数H、Lの仮数部とする。これは、A×Bの演算結果とCとの仮数値の加算を行なう回路として(2M+1)ビットの加算器を用いることは回路規模の増大に繋がるので、予めA×Bの演算結果の仮数値をその上位部分と下位部分とに分割するようにし、これらとCの仮数値との加算を求めるようにすることによってその回路規模の増大を抑えることを意図して行なうものである。
【0058】
ところが、Lの仮数値は乗算結果の値の仮数値の下位を切り取っただけなので、このままではIEEE浮動小数点数の表現形式に沿ったものとはならない。これをIEEE浮動小数点数の表現形式に準拠したものとするためには、(M+1)ビットの低位部分における最も左の、すなわち最も上位のビット位置のひとつ上の位置の値が暗黙の1となるように左シフトを行ない、更にその暗黙の1を切り取る必要がある。
【0059】
また、Hの指数部についてはA×Bの乗算結果の値における(N+1)ビットの指数部に何ら変更を加える必要はないが、Lの指数部は、仮数部に対して行なわれた左シフトの量に応じた値の修正が必要となる。このときのLの指数値は、仮数部に対して行なわれた左シフトの量をZとすると、次式で求めることができる。
【0060】
(Lの指数値)=(Hの指数値) −(M+1+Z)
なお、上式において、Hの指数値がM+1以下のときにはLの指数値が負になってしまう場合があるが、この場合はLの指数値を0とする。このようにすると、Lは実際の値と異なるものになってしまうが、この値でもその後の演算が正しく行われることは保証される。このことについて説明する。
【0061】
HとLの指数部には(N+1)ビットが割り当てられており、このときのバイアス値がB2である。また、Cの指数部にはNビットが割り当てられており、バイアス値がB1である。
【0062】
ここで、仮にCの指数値が、表現し得る最小の値を示す「0」で、Hの指数値が「M+1」であるとすると、CとHの指数値の差は、
(0−B1)−(M+1−B2)=B2−B1−M−1
となる。通常、バイアス値はその指数部がとり得る最大値のほぼ2分の1の値が与えられるので、上式のB1及びB2にこの値を代入すると、
Figure 0003845009
これは、例えば図14に示す表の数値を用いれば、単精度なら104、倍精度なら971、拡張精度なら16271となる。つまり、Cがその精度内で最も小さい値を取っても、Hの指数値がM以下のときであればA×Bの演算結果はCに比べて十分小さなものであり、無視し得る程度の大きさのものとなっていることを意味する。つまり、少なくともA×B+Cの演算結果をA、B、Cを同一の精度で求める限りにおいては、Lの指数値の多少のずれはそれほど重要ではないといえるのである。
【0063】
このようなデータ操作を行なう回路を加算演算部に追加する。
以上までに説明した、A×Bの乗算結果の値における仮数値についての分割の様子を図2に示す。
【0064】
図2において、(1)にはIEEE規格に準拠する、指数部にNビットが割り当てられ仮数部にMビットが割り当てられている浮動小数点数A、Bが示されており、これらの各々から仮数部が抽出されて暗黙の1が付された様子が(2)に示されている。そして、これらの乗算結果の仮数部は、(3)に示すように、暗黙の1と(2M+1)ビットで表現される。その後、(4)に示すように、この仮数部がMビットからなる高位部分と(M+1)ビットからなる低位部分とに分割される。そして、(5)に示すように、高位部分はこのままIEEE規格に準拠する浮動小数点数Hとなり、低位部分は左方向へのビットシフトが行なわれ更に暗黙の1が削除されてIEEE規格に準拠する浮動小数点数Lとなる。但し、このLの仮数部には(M+1)ビットが割り当てられ、Lの指数部にはビットシフトの量に応じた値の修正が行なわれる。
【0065】
次にA×Bの演算結果とCとの加算を行なう加算器について説明する。
前述したように、この加算器では、C、H、Lの3つの浮動小数点数の加算を2回に分けて行なうのであるが、既存の浮動小数点数演算器の加算演算部では暗黙の1を含む(M+1)ビットの加算にしか対応していないため、この加算演算部で加算を行なうと(M+1)ビットで表現可能な桁より下位の桁の値に対しては丸め処理が施され、切り捨てられてしまう。そこで、本発明においては、原則としてLについての加算を先に行なうようにする。つまり、本実施形態では、通常はCとLとの加算を先に行なってその結果とHの加算を後に行なうようにする。
【0066】
ところが、後で行なう加算において正規化を行なう必要が生じた場合には、先に行なわれたCについての加算で丸め処理により切り捨てられてしまった下位の桁の値に関する情報が必要になるが、上記の順で和を求めると、後の加算のときにはすでに下位の桁の値は丸め処理によって失われてしまっている。そこで、このような場合が生じるか否かを先に判定するようにし、このような場合が生じるときには加算の順番を逆にする。つまり、本実施形態においては、この場合にはCとHとの加算を先に行ない、その結果とLの加算とを後に行なうようにする。
【0067】
以下、上述した手法の詳細について説明する。
まずは通常の場合から説明する。HとCとの符号が同じであるか、または、HとCの符号が異なり且つHの指数値とCの指数値との差が1以上(但し、Hの指数値とCの指数値との差が1で且つ両者のうち指数値が大きい方の仮数値の最上位ビットが0の場合を除く)の場合には、加算結果の値における仮数値に対する正規化が生じないか、または起こったとしても高々1ビットのビットシフトによる正規化が生じるに過ぎないので、特段の処理は不要である。そこで、この場合にはLとCとの加算を先に行ない、その結果とHとの加算を後に行なうという順番で和を求める。
【0068】
ここで、上述した加算を行なう加算器は、図3に示すように、加算演算の中間結果として、仮数部の最下位ビットの下の第一番目のビットであるGビット(Guard ビットなどとも称されている)、第二番目のビットであるRビット(Roundビットなどとも称されている)、及び第三番目以下の全てのビットの論理和を取ったビットであるKビット(Stickyビットなどとも称されている)を出力するように構成する。
【0069】
通常の加算演算部ではこのGRKビットに基づいて演算結果の仮数値に丸めの処理を施したものが出力されるので、演算結果にはGRKの値は現れない。しかし、ここで使用する加算器では、このような丸めの処理が施される前の加算結果の仮数値が出力されるようにし、更にGRKの各ビットの値も出力されるように既存のIEEE浮動小数点数演算器に変更を加える。なお、このGRKの各ビットは、加算対象である2つの仮数値のうちの一方を桁揃えのためにビットシフトさせたときに求めることができる。
【0070】
この第一の加算結果、すなわちLとCとの加算結果をPとする。このPはNビットからなる指数値と、Mビットからなる仮数値と、GRKの各ビットを有するものとする。本来、このPの値としては仮数値としてビット幅に制限のない値を持つことができるように構成するべきだが、回路規模の要請を考慮し、PがGRKの各ビットの値を持つことでこれを補うようにするのである。またこのとき指数値がNビットとなるのは、既存のIEEE浮動小数点数演算器をそのまま流用することにより指数補正が行なわれることによるものである。したがって、前述した乗算演算部からの演算結果の指数値に対して行なったものと同様の(N+1)ビットへの変換をここでも行なう必要がある。
【0071】
次に、指数値が(N+1)ビットに変換されたPとHとを、先の加算演算を行なわせたものと同一の加算器に入力して第二の加算結果を求めさせる。
ここで、Pの指数値がHの指数値よりも大きい場合には、Hの仮数値に対して桁揃えの処理が行なわれ、このときHについてのGRKの各ビットが生成される。このHについてのGRKの各ビットをG’R’K’と示すこととする。
【0072】
ところで、この場合では、先に行なわれた第一の加算においてPにも既にGRKが存在している。このように両オペランドにGRKが存在するときには、Kビットの基である仮数部の最下位ビットの下の第三番目以下の桁のビットからの繰り上がりの様子が予測できないため演算が破綻してしまう。
【0073】
例えば、仮数部の最下位ビット以下が2進で10110…である値Xと、00100…である値YとについてX+Yを求めると、その加算結果の仮数部最下位ビット以下の値は11010…となる。このとき、X、Y、X+YについてのGRKの各ビットの値はそれぞれ「101」、「001」、「111」である。
【0074】
同様に、仮数部の最下位ビット以下が2進で10010…である値X'と、00010…である値Y'とX'+Y'を求めると、その加算結果の仮数部最下位ビット以下の値は10100…となる。このとき、X’、Y’、X’+Y’についてのGRKの各ビットの値はそれぞれ「101」、「001」、「101」である。
【0075】
つまり、X及びX’と、Y及びY’とのGRKの各ビットの値はそれぞれ同じであるにもかかわらず、X+YとX’+Y’とのGRKの各ビットの値は異なってしまう。この結果は、X+YについてはKビットの基である桁からの繰り上がりがあるが、X’+Y’についてはその桁からの繰り上がりがないために生じたものである。しかも、この繰り上がりの発生は、仮数部以下の正確な値を保持しなくては予測できない。
【0076】
ところが、今回の計算ではその繰り上がりがないことが保証されている。このことについて説明する。
まず、Pの指数値がHの指数値よりも大きいときは、第一の加算を行なう以前の浮動小数点数C、H、Lの大きさの関係は、Cが一番大きく、その後にH、Lとなるのは明らかである。
【0077】
また、C及びHに割り当てられている桁数の関係を考慮すれば、この場合におけるC、H、Lの仮数値は図4に示すような関係となっているはずである。つまり、第一の加算結果であるPはLとCとの和であるから、このPの仮数値は結局Cの仮数値をそのまま引き継いだものに過ぎないのである。また、このときのPにおけるGRKの各ビットはLの仮数値に基づいて作成されていることも明らかである。
【0078】
ここで、Pの方がHよりも大きいので、第二の加算における桁揃えではHの仮数値の右シフトが行われる。従って、Hの仮数部の最下位ビット以下にある部分に基づいてG’R’K’が生成される。
【0079】
ところで、HとLとはA×Bの演算結果の値の仮数値を2つに分割したものであるから、HとLとの仮数値において同一桁の重複が存在することはない。しかも、上述したように、GRKの各ビットはLより、一方G’R’K’の各ビットはHよりそれぞれ生成されることから、これらのGRKとG’R’K’との各ビットが互いに重複している部分はないといえる(図4参照)。
【0080】
以上のことから、PとHとの加算においては、Kビットの基である桁からの繰り上がりは生じないといえ、更に、GとRとからの繰り上がりも生じないといえる。よって、第二の加算結果の値についての最終的なGRKの各ビットの値(この値をそれぞれG''、R''、K''とする)は、G''=G’∪G、R''=R’∪R、K''=K’∪Kという演算によって求めてよいことが分かる。
【0081】
上述した論理演算によりこのG''R''K''の各ビットの値を求め、これらの値に基づいて第2の演算結果の値に丸めの処理を施したものをA×B+Cの積和演算の最終結果として出力する。
【0082】
なお、Hの指数値がPの指数値よりも大きい場合には、Pに対して桁揃えが施されるので、新たなGRKの各ビットの値が生成されるが、その後の計算は通常の加算と同じように、新たに求められたGRKの各ビットの値に基づいて丸めの処理を加算演算の結果に対して施し、これを積和演算の最終結果とする。
【0083】
次に、前述した通常の場合から外れる場合、すなわち、HとCの符号が異なる場合であってHの指数値とCの指数値とが一致している場合、または、HとCの符号が異なる場合であってHの指数値とCの指数値との差が1であり且つ両者のうち指数値が大きい方の仮数値の最上位ビットが0である場合について説明する。
【0084】
上述した場合では、A×Bの演算結果とCとの加算を行なったときに必ず1ビット以上の正規化を行なう必要が生じる。
このような場合にLとCとの加算を先に行なうと、この第一の加算のときに演算結果に施される丸めの処理と、その後の第一の加算結果とHとの和の演算結果に施される正規化によって、所定の精度を維持するために必要な情報が失われてしまうことになる。そのため、前述した通常の場合とは逆の順番、すなわちHとCとを上述した加算器に入力してNビットの指数部とMビットの仮数部とからなる第一の加算結果Pを先に求める。この第一の加算では1ビット以上の正規化が生じるが、2つのオペランドの指数値の差は1以内に過ぎないので桁揃えのためのビットシフトは発生しないためGRKは発生しない。よって、このときPとLとを加算する第二の加算では、通常の加算と同じように、第一の演算結果Pの指数部を(N+1)ビットに変換したものとLとを第一の加算において用いられたものと同一の加算器に入力して第二の加算結果とそのときのGRKの各ビットの値を求めればよい。そしてその後、このGRKを基に第二の演算結果に丸めの処理を施し、その結果得られた値を積和演算の最終結果とするようにする。
【0085】
以上の原理に沿った積和演算を行なえる演算装置の具体的な構成例について説明する。
図5は本発明を実施する演算装置の構成を示す図である。この演算装置は、IEEEの倍精度浮動小数点数についての規格に準拠する、符号に1ビットが割り当てられ指数部に11ビットが割り当てられ仮数部に52ビットが割り当てられている計64ビットからなる3つの浮動小数点数A、B、Cについての積和演算A×B+Cを、以上までに説明した原理に従って実行するものである。なお、ここでは説明を簡単にするために、A×Bの演算結果とCとの符号は一致しているものとする。
【0086】
OP1R(OP1レジスタ)109及びOP2R(OP2レジスタ)110は浮動小数点乗算器112または浮動小数点加算器113のいずれかに入力する数値データが格納されるレジスタである。これらのうち、OP1R109については64ビットのビット幅を有するように構成する。また、OP2R1110のビット幅については後述する。
【0087】
RR(リザルトレジスタ)111は、浮動小数点乗算器112または浮動小数点加算器113のいずれかから出力される演算結果である数値データが格納されるレジスタである。
【0088】
これらのOP1R109、OP2R110、及びRR111の各レジスタに格納される数値データの選択はレジスタ制御回路105によって制御される。
A×Bの演算を実行するのであれば、A及びBの値がそれぞれOP1R109及びOP2R110に格納された状態で浮動小数点乗算器112が乗算命令に従って動作するとその演算が実行され、その演算結果がRR111に格納される。
【0089】
ここで図6について説明する。同図は図5における浮動小数点乗算器の詳細構成を示している。この浮動小数点乗算器112はIEEE浮動小数点数の乗算に対応しており、仮数部乗算器202は仮数部の正確な乗算結果を算出し、その乗算結果を格納する106ビットの仮数部乗算結果レジスタ211を有している。
【0090】
通常の乗算であれば、この仮数部乗算結果レジスタ211に格納されたデータは丸め演算回路212へ送られて丸め処理が施された後、暗黙の1を含めた上位53ビットの数値データのみが仮数値として出力され、残された下位ビットのデータは棄てられる。これに対し、浮動小数点数A、B、Cについての積和演算A×B+Cについては、仮数部乗算結果レジスタ211に格納されたデータに対して丸め演算回路212による丸め処理が施されることなく、上述した下位ビットのデータを廃棄することなく出力するためのバスが仮数部乗算結果レジスタ211に追加される。
【0091】
具体的には、仮数部乗算結果レジスタ211に格納された106ビットのデータのうちの上位の53ビットから暗黙の1を除いた52ビットの仮数部データについての浮動小数点数値データHと、仮数部乗算結果レジスタ211に格納されたデータのうちの下位の53ビットの仮数部データについての浮動小数点数値データLとを出力するようにし、このH及びLの出力を2回に分けてRR111に格納するようにする。
【0092】
ここで、H及びLの符号ビットには、Ex−OR(Exclusive-OR)213によって求められてSレジスタ(符号レジスタ)204に格納されている、OP1R109及びOP2R110にそれぞれ格納されたデータにおける符号ビットについての排他的論理和の値が与えられる。
【0093】
また、Hの指数部には、指数部演算部201によって求められて上位データ用指数値レジスタ207に格納されている、OP1R109及びOP2R110にそれぞれ格納されたデータにおける指数値の加算結果が与えられる。更に、Lの指数部には、加算器203によって求められて下位データ用指数値レジスタ210に格納されている、OP1R109及びOP2R110にそれぞれ格納されたデータにおける指数値の加算結果から「−53」を減じた値が与えられる。この加算器203による「−53」の加算は、Hの値を基準としたときのLの値の桁揃えを行なうためのものである。
【0094】
以上のようにしてH及びLは求められるが、図5においては浮動小数点乗算器112に乗算結果レジスタ114を示し、乗算結果がこのH及びLが乗算結果レジスタ114に格納されるものとして示している。
【0095】
また、この浮動小数点乗算器112からは、H及びLに加え、Hについてのオーバーフロー及びアンダーフローの情報として、上位データ用オーバーフローレジスタ205に格納されている、指数部演算部201による加算によってオーバーフローが生じたことを示すデータOFHと、上位データ用アンダーフローレジスタ206に格納されている、指数部演算部201による加算によってアンダーフローが生じたことを示すデータUFHとが出力され、更に、Lについてのオーバーフロー及びアンダーフローの情報として、下位データ用オーバーフローレジスタ208に格納されている、加算器203による加算によってオーバーフローが生じたことを示すデータOFLと、下位データ用アンダーフローレジスタ209に格納されている、加算器203による加算によってアンダーフローが生じたことを示すデータUFLとが出力される。
【0096】
これらのオーバーフロー及びアンダーフローの情報は、既存の演算装置であれば一旦ラッチされた後にCPU等の制御ユニットにその情報が報告されるのであるが、この演算装置においてA×B+Cの積和演算を実行するときには、A×BとCとについての2回に分けて行なわれる加算においてもこれらの情報が用いられるため、これらの情報を適切なタイミングで浮動小数点加算器113に提供できるようにするための回路が必要となる。
【0097】
このための回路が、図5における4つのラッチレジスタOF1R101、OF2R102、UF1R106、UF2R107と、2つのセレクタ103及び108である。
【0098】
ここで、直列に接続されているOF1R101及びOF2R102の2つのラッチレジスタがOFH及びOFLと、浮動小数点加算器113による演算でのオーバーフローを示すデータであるOFSとのラッチを行ない、直列に接続されているUF1R106及びUF2R107の2つのラッチレジスタがUFH及びUFLと、浮動小数点加算器113による演算でのアンダーフローを示すデータであるUFSとのラッチを行なう。
【0099】
また、OF2R102によるラッチの前後のオーバーフロー情報の選択を行なうセレクタ103、及びUF2R107によるラッチの前後のアンダーフロー情報の選択を行なうセレクタ108はレジスタ制御回路105によって制御される。
【0100】
ところで、Lの仮数部は正規化が施されておらず、また暗黙の1についての処置も施されていないので、Lの値は、IEEE規格の表現形式から外れている、全体で65ビットのデータとなっている。そのため、このLの値を格納することになるRR111は、既存のIEEE倍精度浮動小数点数の演算に対応している演算装置が有している結果格納レジスタは64ビットのビット幅であるものが一般的であるのに対し、65ビットのビット幅を有するように構成する。
【0101】
但し、RR111のビット幅を65ビットとする代わりに、図7に示すように仮数部正規化回路214と指数部減算器215とからなる下位データ正規化部216を浮動小数点乗算器112に設け、Lの仮数値の正規化とそれに伴うLの指数値の変更を行なってから暗黙の1を除いた値を乗算結果におけるLの仮数値として浮動小数点乗算器112から出力するようにすれば、RR111のビット幅を既存の演算装置と同様の64ビット幅に留めることもできる。なお、このときのOFL及びUFLのデータとしては、加算器203と指数部減算器402とで生じたオーバーフロー若しくはアンダーフローの論理和をそれぞれ出力する。
【0102】
浮動小数点乗算器112から出力されるH及びLをRR111に格納する順番は、Hを先、Lを後とする。これは、この演算装置においてA×B+Cの積和演算を実行するときにおけるA×BとCとについての2回に分けて行なわれる加算の順序の決定、すなわちLとCとの加算を先とするか、あるいはHとCとの加算を先とするかの決定は、前述したようにHとCとの比較結果に基づいて行なわれるため、Hを先にRR111へ転送した方がこのHとCとの比較を早く開始することができるからである。
【0103】
判定回路115には、図8に示されている、上述したHとCとの比較結果に基づいて加算順序を決定するための回路が設けられている。
図8において、SH及びSCはそれぞれH及びCの符号ビットであり、Ex−OR301によってこれらの符号ビットの一致・不一致が判定される。
【0104】
EH及びECはそれぞれH及びCの指数値であり、Ex−OR302及びNOR303によってHとCとの指数部の全ビットの一致・不一致が判定される。なお、図8におけるNOR303の入力部分は、Ex−OR302をH及びCの指数部の各ビットにひとつずつ設け、全ビットをビット毎に比較することを簡略化して表現したものである。
【0105】
加算器304及び加算器307はEH及びECに「1」を加算する回路である。つまり、加算器304、Ex−OR305、及びNOR306によって、Cの指数値に「1」を加算した値とHの指数値との全ビットの一致・不一致が判定され、加算器307、Ex−OR308、及びNOR309によって、Hの指数値に「1」を加算した値とCの指数値との全ビットの一致・不一致が判定される。
【0106】
また、F0H及びF0Cは、それぞれH及びCの仮数部の最上位ビットである。従って、NOR303、NOR306、及びNOR309の出力がそれぞれ入力されるOR310の出力は、HとCの符号が異なる場合であってHの指数値とCの指数値との差が1であり且つ両者のうち指数値が大きい方の仮数部の最上位ビットが0である場合であるか否かの判定結果を示すものとなる。
【0107】
以上のことから、Ex−OR301の出力とOR310の出力とが入力されるAND311の出力は、A×BとCとについての2回に分けて行なわれる加算の順序を決定するための信号となっていることが分かる。
【0108】
なお、判定回路115に上述した判定を行なわせるためには、H及びCの値がOP1R109、OP2R110、又はRR111のいずれかに格納されている必要がある。
【0109】
図5の説明に戻る。
浮動小数点乗算器112から出力されるHがRR111に格納されるのと同じタイミングでOFH及びUFHをそれぞれOF1R101及びUF1R106に格納する。
【0110】
次のタイミングでは、浮動小数点乗算器112から出力されるLをRR111に格納すると共に、OFL及びUFLをそれぞれOF1R101及びUF1R106に格納する。このとき、それまでRR111に格納されていたHはOP2R110に移動させるようにする。また、それまでOF1R101及びUF1R106に格納されていたデータはそれぞれOF1R102及びUF1R107に移される。更に、このタイミングでHの値とCの値とに基づく判定を判定回路115に行なわせる。このために、予めCの値をOP1R109に格納しておくようにする。なお、Hの値をOP1R109に格納するようにし、Cの値をOP2R110に格納するようにしてもよい。
【0111】
次のタイミングでは、判定回路115による判定結果に応じた順序での加算演算が行なわれる。
判定回路115による判定結果がHとCとの加算を先に行なうべきであると判定した場合には、このタイミングでOP1R109に格納されている数値データとOP2R110に格納されている数値データ、すなわちCとHとが浮動小数点加算器113へと転送され、加算演算が行なわれる。なお、このときにセレクタ103及びセレクタ108が制御され、OF2R102に格納されているOFHデータ及びUF2R107に格納されているUFHデータも浮動小数点加算器113へと転送される。これに伴い、OF1R101に格納されているOFLデータがOF2R102に移され、UF1R106に格納されているUFLデータがUF2R107に移される。更にこのタイミングでRR111に格納されているLをOP2R110へ転送する。
【0112】
なお、LがOP2R110に格納されるので、浮動小数点演算器112が図6のように構成されているのであれば、OP2R110は65ビットのビット幅を有するように構成しておく必要があるが、浮動小数点演算器112が図7のように構成されているのであれば、OP2R110は64ビットのビット幅を有するように構成すればよい。なお、このOP2R110の構成に対する要求については、判定回路115の判定結果とは無関係である。
【0113】
一方、判定回路115による判定結果がLとCとの加算を先に行なうべきであると判定した場合には、RR111に格納されているLをOP2R110に転送し、この次のタイミングでOP1R109に格納されている数値データとOP2R110に格納されている数値データ、すなわちCとLとを浮動小数点加算器113へと転送して加算演算を行なわせる。
【0114】
なお、このとき、OP2R110に格納されていたHの値は失われてしまうので、前のタイミングでRR111からOP2R110にHを転送したときに、併せてこのHの値をTMPR(テンポラリレジスタ)104にも格納しておくようにする。
【0115】
また、CとLとが浮動小数点加算器113へと転送されるタイミングにおいてセレクタ103及びセレクタ108が制御され、OF1R101に格納されているOFLデータ及びUF1R106に格納されているUFLデータも浮動小数点加算器113へと転送される。なお、この場合には、OF2R102に格納されているOFHデータ、及びUF2R107に格納されているUFHデータはそのまま保持される。
【0116】
ここで図9について説明する。同図は図5における浮動小数点加算器113の詳細構成を示している。
指数部変換回路401及び402は、OP1R109及びOP2R110から浮動小数点加算器113へと転送されてくる数値データにおける11ビットの指数値のデータを、これらのデータを得るために行なわれた演算によって生じたオーバーフロー若しくはアンダーフローについての情報を利用して12ビットのデータへと変換するものである。
【0117】
指数部変換回路401及び402の詳細構成は図10に示されている。同図において、EXPはこの回路に入力される11ビットの指数値であり、OFはオーバーフローの発生を示すフラグ、UFはアンダーフローの発生を示すフラグである。そして、加算器507による加算結果である12ビットの数値がこの回路の出力となる。
【0118】
図10において、OF及びUFが共に「0」である場合、すなわちEXPの値を求める演算においてオーバーフローもアンダーフローも生じていなかった場合には、OF及びUFの論理値をそれぞれ反転するNOT501及びNOT502の作用により、数値「1024」がAND503及びOR506を経て加算器507に入力され、EXPの値に加算される。ここで、「1024」とは、EXPの値である11ビットの指数値に与えられているバイアス値B1が1023であり、変換後の12ビットの指数値に与えられるバイアス値B2を2047としたときの(−B1+B2)の値である。つまり、この場合には、図10に示す回路は前述した指数値変換式におけるオーバーフロー・アンダーフローが共に生じていない場合の変換式の計算を実行するものとなる。
【0119】
また、図10において、OFが「1」でUFが「0」の場合、すなわちEXPの値を求める演算においてオーバーフローが生じていた場合には、数値「2056」がAND504及びOR506を経て加算器507に入力され、EXPの値に加算される。ここで、「2056」とは、前述した場合と同様に、B1が1023であって、B2を2047とし、更に、この演算装置における指数部演算部201及び加算器203(更に浮動小数点乗算器112が図7の構成を有している場合には指数部減算器215)において指数補正のために使用されていた定数βから求まる値α(β=2のα乗)がいずれも「1536」であるとしたときの(−B1+B2+α)の値である。つまり、この場合には、図10に示す回路は前述した指数値変換式におけるオーバーフローが生じた場合の変換式の計算を実行するものとなる。
【0120】
更に、図10において、OFが「0」でUFが「1」の場合、すなわちEXPの値を求める演算においてアンダーフローが生じていた場合には、数値「−512」がAND505及びOR506を経て加算器507に入力され、EXPの値に加算される。ここで、「−512」とは、前述した場合と同様に、B1が1023であって、B2を2047とし、更に、αが「1536」であるとしたときの(−B1+B2−α)の値である。つまり、この場合には、図10に示す回路は前述した指数値変換式におけるアンダーフローが生じた場合の変換式の計算を実行するものとなる。
【0121】
以上のように、図10に示されている回路は、前述した指数値変換式に従って11ビットの指数値のデータを12ビットのデータへと変換する。
図9の説明へ戻る。指数部比較部403は、2つの指数部変換部401及び402から出力される指数値データを比較してそのどちらが大きいかの判定を行なうと共に、その両者の差を算出する。この指数部比較部403は、図15に示した従来の積和演算器における減算回路1003に相当する機能を実行するものである。
【0122】
仮数部選択回路404は、指数部比較部403から出力されるセレクト信号、すなわち2つの指数部変換部401及び402から出力される変換された指数値データのうちでそのどちらの値が大きいかを示す信号に基づき、OP1R109及びOP2R110から浮動小数点加算器113へと転送されてくる数値データのうちその変換後の指数値の大きい方についての仮数値を絶対値加算回路406の一方の入力へと出力し、小さい方についての仮数値をアライン回路405へ出力する。この仮数部選択回路404は図15に示した従来の積和演算器における仮数部選択回路1004に相当する機能を実行するものであるが、その入出力を、OP1R109側の入力については52ビットのビット幅、OP1R側の入力及び2つの出力については53ビットのビット幅を有するように構成することができ、回路規模の増大が抑制される。更に、浮動小数点演算器112が図7のように構成されているのであれば、全ての入出力で52ビットのビット幅を有するように構成することができる。
【0123】
アライン回路405は、指数部比較部403から出力されるシフト量情報、すなわち2つの指数部変換部401及び402から出力される変換された2つの指数値の差、つまりOP1R109及びOP2R110から浮動小数点加算器113へと転送されてくる数値データのうちその変換後の指数値の小さい方についての仮数値の小数点を桁揃えのために移動させるときの移動量を示す情報に基づいて、仮数部選択回路404から与えられた仮数値の小数点を移動させ、その移動させた後の仮数値を絶対値加算回路406のもう一方の入力へと出力する。このアライン回路405は図15におけるアライン回路1005に相当する機能を実行するものであるが、その入出力を共に53ビット(浮動小数点演算器112が図7のように構成されているのであれば52ビット)のビット幅として構成することができる。
【0124】
絶対値加算回路406は、仮数部選択回路404及びアライン回路405から与えられた、桁揃えがなされているOP1R109及びOP2R110から浮動小数点加算器113へと転送されてくる数値データのうちの仮数値についての53ビットのビット幅での加算を行なう。なお、浮動小数点演算器112が図7のように構成されているのであればここで暗黙の1を付加した53ビットのビット幅での加算を行なう。この絶対値加算回路406は図15における絶対値加算回路1006に相当する機能を実行するものであるが、ここでも回路規模の増大が抑制されている。
【0125】
先行0カウンタ407は、絶対値加算回路406による演算結果である仮数値を表現しているビット列における最上位から並ぶ「0」の数を計数する。
正規化処理部408では、絶対値加算回路406による演算結果である仮数値が正規化数の存在範囲内に収まるようにするために、その仮数値を表現しているビット列を、シフト量情報で示される数、すなわち先行0カウンタ407による計数値に相当するビット数だけ左シフトする。
【0126】
この先行0カウンタ407及び正規化処理部408は、図15においても正規化回路1006が本来備えることとなるものであるが、絶対値加算回路406の出力が53ビットのビット幅なので、ここでも図15の積和演算器に比べて回路規模が小さくなる。
【0127】
セレクタ409は、指数部比較部403から出力されるセレクト信号に基づき、OP1R109及びOP2R110から浮動小数点加算器113へと転送されてくる数値データのうち指数部変換部401及び404によって変換された後の指数値の大きい方、すなわち、絶対値加算回路406で行なわれる仮数値同士の加算における基準である指数値を選択するものであり、図15におけるセレクタ1009に相当するものである。
【0128】
減算器410は、セレクタ1009で選択された指数値から正規化回路1007から送られてくるシフト量情報で示される値の減算を行ない、正規化処理部408で行なわれる左ビットシフトによって生じる仮数値の増加の補償を指数値に対して施す。
【0129】
指数部補正回路411は、減算器410の出力までは12ビットで表現されている指数値から、IEEEの倍精度浮動小数点数についての規格に準拠する11ビットの指数値への補正を行なう回路である。
【0130】
指数部補正回路411の詳細構成は図11に示されている。同図において、EXPはこの回路に入力される12ビットの指数値である。
まず、加算器601によって入力された指数値と「−1024」との加算が実行される。そして、この加算の結果の値を11ビットのビット幅で表現するとき、オーバーフローが生じてしまうときにはオーバーフローの発生を示すフラグOFがセットされて出力され、また、アンダーフローが生じてしまうときにはアンダーフローの発生を示すフラグUFがセットされて出力される。従って、OF及びUFの論理値をそれぞれ反転するNOT602及びNOT603の作用により、加算器601でOF及びUFが共にセットされなかったとき、すなわち加算器601による加算の結果の値を11ビットのビット幅で表現してもオーバーフローもアンダーフローも生じなかったときには、加算器601による加算結果はAND606及びOR609を経てこの回路から11ビットの指数値として出力される。ここで、「−1024」という数値は、EXPの値である12ビットの指数値に与えられているバイアス値B1が2047であり、指数補正後の11ビットの指数値に与えられるバイアス値B2が1023であるときの(−B1+B2)の値であり、EXPの値にこの(−B1+B2)の値を加算することで12ビットから11ビットの指数補正が行なえることは前述した説明より明らかである。
【0131】
一方、加算器601でOFがセットされたとき、すなわち加算器601による加算の結果の値を11ビットのビット幅で表現するとオーバーフローが生じたときには、加算器601による加算結果に更に「−1536」が加算器604によって加算され、その加算結果がAND607及びOR609を経てこの回路から11ビットの指数値として出力される。ここで、「1536」という数値は、前述した図10の説明で用いたαの値である。つまり、EXPの値に前述した(−B1+B2)の値を加算した結果を11ビットのビット幅で表現するとオーバーフローが生じるときは、この回路はその値からαの値を減じた結果を11ビットの指数値として出力すると共に、オーバーフローの発生を示すフラグOFを併せて出力するようにしているのである。
【0132】
また、加算器601でUFがセットされたとき、すなわち加算器601による加算の結果の値を11ビットのビット幅で表現するとアンダーフローが生じたときには、加算器601による加算結果に更に「+1536」が加算器605によって加算され、その加算結果がAND608及びOR609を経てこの回路から11ビットの指数値として出力される。つまり、EXPの値に前述した(−B1+B2)の値を加算した結果を11ビットのビット幅で表現するとアンダーフローが生じるときは、この回路はその値からαの値を加えた結果を11ビットの指数値として出力すると共に、アンダーフローの発生を示すフラグUFを併せて出力するようにしているのである。
【0133】
なお、この減算器410及び指数部補正回路411は、図15においても指数部補正部1010が本来備えることとなるものである。
図9の説明へ戻る。GRK演算回路412は、正規化処理部408から出力される仮数値の加算結果に対して丸め回路413が施す丸めの処理の内容を決定する基となる前述したGRKの各ビットを得るための回路である。
【0134】
丸め回路413は、正規化処理部408から出力された仮数値に対し、GRK演算回路412から送られてくるGRKの各ビットに基づいて丸めの処理を施す。
【0135】
GRK演算回路412の詳細構成は図12に示されている。同図において、G’R’K’はアライン回路405において桁そろえのために行なわれた右ビットシフトにより生じたGRKの各ビットである。また、指数部比較部403からはセレクト信号がこの回路に入力される。このセレクト信号は仮数部選択回路404によるデータ選択を制御する信号でもあるから、この信号より、アライン回路405へ入力された数値データが、OP1R109及びOP2R110から浮動小数点加算器113へと各々転送されてくる数値データのうちのどちらの仮数値であるかを知ることができる。
【0136】
ラッチレジスタ701、702、及び703は、浮動小数点加算器113が前回に加算演算を実行したときにアライン回路405から出力されたGRKの各ビットの値を一時的に保持する。なお、ラッチレジスタ701、702、及び703は、A×B+Cの積和演算で実行される2回の加算における先の加算演算の開始時にリセットされる。従って、この2回の加算における後の加算演算が実行されるときには、先の加算演算においてアライン回路405から出力されたGRKの各ビットの値が保持されている。
【0137】
ラッチレジスタ701、702、及び703がこのような動作をするので、この2回の加算における先の加算演算が実行されたときのGRKの各ビットの値をG、R、Kとし、後の加算演算が実行されたときのGRKの各ビットの値をG’R’K’とすると、OR704、705、及び706の出力は、それぞれG’∪G、R’∪R、K’∪Kとなる。
【0138】
従って、L+Cを先に加算して行なう2回の加算における後の加算演算において、L+Cの演算結果の指数値がHの指数値よりも大きいためアライン回路405がHの仮数値に対して桁揃えを行なった場合にこのOR704、705、及び706の出力がGRK演算回路412から出力されるようにすれば、前述したように、この出力を丸め回路413での丸めの処理の基とすることができる。
【0139】
ここで、Hの仮数値はOP2R110から転送されてくる数値データの一部である。従って、指数部比較部403から出力されるセレクト信号が、OP2R110から転送されてくる数値データの仮数部をアライン回路405に入力させるように仮数部選択回路404を切り換える信号であるときには、OR704、705、及び706の出力がGRK演算回路412から出力されるようにセレクタ708を構成する。
【0140】
一方、L+Cを先に加算して行なう2回の加算における後の加算演算においてHの指数値がL+Cの演算結果の指数値よりも大きいときには、アライン回路405はL+Cの演算結果の仮数値に対して桁揃えを行なったものについてのGRKの各ビットを出力する。従って、丸め回路413での丸めの処理の基とするGRKの各ビットとしては、G及びRの両ビットについてはこのアライン回路405の出力をそのまま使用し、Kビットについては、このアライン回路405の出力のKビットと先に行なわれたL+Cの加算演算において廃棄された全ての下位ビットとの論理和、すなわちアライン回路405の出力のKビットとラッチレジスタ701、702、及び703に保持されている先の加算演算時のGRKの各ビットとの論理和を使用すればよい。
【0141】
つまり、指数部比較部403から出力されるセレクト信号がOP1R109から転送されてくる数値データの仮数部、すなわちL+Cの演算結果の仮数値をアライン回路405に入力させるように仮数部選択回路404を切り換える信号であるときには、アライン回路405から送られてくるビットのうち、G及びRの両ビットについてはこのまま出力され、Kビットについてはこれとラッチレジスタ701、702、及び703に保持されている先の加算演算時のGRKの各ビットとをOR707に入力したときのOR707の出力がGRK演算回路412から出力されるようにセレクタ708を構成する。
【0142】
なお、H+Cを先に加算して行なう2回の加算の場合には、前述したように先に行なわれるH+Cの加算ではGRKは発生しないため、ラッチレジスタ701、702、及び703にはGRKの各ビットが入力されない。この場合では、図12に示すGRK演算回路412から出力されるGRKの各ビットの値は、例えセレクタ708がどちらに切り替わったとしてもこの回路に入力されたGRKの各ビットの値がそのまま出力されることは明らかである。
【0143】
丸め回路413ではGRK演算回路412においてこのようにして得られたGRKの各ビットの値に基づいて正規化処理部408から出力された仮数値に対して丸めの処理を施す。
【0144】
カウンタ414は、この浮動小数点加算器113で実行される加算の回数を計数し、今回行なわれた加算演算がA×B+Cの積和演算で実行される2回の加算のうちの先の加算であるか後の加算であるかを判別する。
【0145】
セレクタ415、416、及び417は、カウンタ414での判別結果に基づき、今回行なわれた加算演算がA×B+Cの積和演算で実行される2回の加算のうちの先の加算であれば、指数部補正回路411からの11ビットの出力を指数値とし、正規化処理部408の出力から暗黙の1を取り除いた52ビットの値を仮数値とする加算演算の結果を出力し、併せて指数部補正回路411から出力されるOF及びUFの両フラグをそれぞれOFS及びUFSとして出力する。一方、今回行なわれた加算演算がA×B+Cの積和演算で実行される2回の加算のうちの後の加算であれば、セレクタ415、416、及び417は、指数部補正回路411からの出力に対して必要に応じて丸め回路11によって変更が加えられた11ビットの値を指数値とし、丸め回路413から出力される丸め処理を施された仮数値から暗黙の1を取り除いた52ビットの値を仮数値とする加算演算の結果を出力し、併せて丸め回路413から出力される、指数部補正回路411又は丸め回路413のいずれか若しくは両方から出力されるOF及びUFの両フラグをそれぞれOFS及びUFSとして出力する。
【0146】
図5に示す演算装置は以上のようにして、倍精度浮動小数点数A、B、Cについての積和演算A×B+Cを行なう。
なお、これまでに説明したこの演算装置における乗算・加算の実行やレジスタ間でのデータの授受は、図5に示す演算装置の各部の動作制御を司る動作制御部116によって管理される。この動作制御部116は、ワイヤードロジックで構成してハードウェアでこれらの管理を実現させるようにするか、あるいは中央処理ユニットを備えてそこでマイクロコード命令やファームウェアを実行させてソフトウェアでこれらの管理を実現させるようにする。なお、動作制御部116を設ける代わりに、この動作管理を図5の演算装置の外部から行なうようにすることも可能である。
【0147】
ソフトウェアによる動作管理を行なうときに用いられる擬似命令コードを用いて記述した制御プログラムの一例を図13に示す。
図13に示す制御プログラムは、積和演算A×B+CにおけるAの値がOP1R109に、Bの値がOP2R110にそれぞれ格納されている状態で開始される。
【0148】
同図において、(1)は、OP1R109とOP2R110とに格納されているそれぞれの値についてその仮数部を正確に算出する乗算、すなわち、演算結果の下位部分を丸めずに算出する乗算を浮動小数点乗算器112に行なわせることを示している。
【0149】
(2)は、(1)の乗算結果が格納される乗算結果レジスタ114におけるH(上位)部分をRR111へ転送すると共に、Cの値をOP1R109に格納することを示している。
【0150】
(3)は、RR111に格納されている値、すなわち(1)の乗算結果におけるHの値をOP2R110とTMPR104とへ同時に転送することを示している。
【0151】
(4)は、OP1R109とOP2R110とに格納されているそれぞれの値、すなわちCの値とHの値との比較を判定回路115に行なわせると共に、(1)の乗算結果が格納される乗算結果レジスタ114におけるL(下位)部分をRR111に転送することを示している。
【0152】
(5)は、(4)で判定回路115に行なわせた判定結果に基づき、C+Lを先に行なうべきであると判定されたときには処理を(6)に分岐させ、C+Hを先に行なうべきであると判定されたときには処理を(10)に分岐させることを示している。
【0153】
(6)は、RR111に格納されている値、すなわち、(1)の乗算結果におけるLの値をOP2R110へ転送することを示している。
(7)は、OP1R109とOP2R110とに格納されているそれぞれの値、すなわちCの値とLの値との加算を浮動小数点加算器113に行なわせることを示している。なお、浮動小数点加算器113での加算の結果は自動的にRR111へ転送されて格納される。
【0154】
(8)は、RR111に格納されている値、すなわちCの値とLの値との加算結果をOP1R109に転送すると共に、TMPR104に格納されている値、すなわちHの値をOP2R110に転送することを示している。
【0155】
(9)は、OP1R109とOP2R110とに格納されているそれぞれの値、すなわちC+Lの加算結果とHの値との加算を浮動小数点加算器113に行なわせることを示している。この後にRR111に格納される値がA×B+Cの積和演算の結果の値である。
【0156】
(10)は、OP1R109とOP2R110とに格納されているそれぞれの値、すなわちCの値とHの値との加算を浮動小数点加算器113に行なわせると共に、RR111に格納されている値、すなわち(4)でRRへ転送されていたLの値をOP2R110へ転送することを示している。
【0157】
(11)は、RR111に格納されている値、すなわち(10)の加算結果であるC+Hの値をOP1R109へ転送することを示している。
(12)は、OP1R109とOP2R110とに格納されているそれぞれの値、すなわちC+Hの加算結果とLの値との加算を浮動小数点加算器113に行なわせることを示している。この後にRR111に格納される値がA×B+Cの積和演算の結果の値である。
【0158】
図13に示す制御プログラムは上述した命令内容を示しており、図5に示す演算装置がこの制御プログラムに記述されている命令に従って動作することによって、精度の維持されたA×B+Cの積和演算が行なわれる。
【0159】
(付記1)浮動小数点数をビット列で表現する浮動小数点数データの乗算及び加算を行なうことで積和演算を実行する積和演算装置であって、
前記浮動小数点数データの乗算を行なう乗算手段と、
前記浮動小数点数データの加算を行なう加算手段と、
前記加算手段で行なわれた加算の結果として得られる浮動小数点数データに丸めの処理を施す丸め手段と、
前記浮動小数点数データである第一のデータと第二のデータとの積へ該浮動小数点数データである第三のデータを加算する積和演算の結果が格納される結果格納手段と、
前記第一のデータと前記第二のデータとの乗算の結果である乗算結果データを前記乗算手段に算出させる乗算制御手段と、
前記乗算結果データにおける仮数部を表現するビット列を該仮数部における上位の桁を表現するものと該仮数部における下位の桁を表現するものとの2つに分割したうちの該下位の桁を表現するビット列を仮数部とする下位乗算結果データに、前記第三のデータを加算して得られる第一加算結果データを前記加算手段に算出させる第一加算制御手段と、
前記第一加算結果データに前記上位の桁を表現するビット列を仮数部とする上位乗算結果データを加算して得られる第二加算結果データを前記加算手段に算出させる第二加算制御手段と、
を有し、
前記結果格納手段には、前記第二加算結果データに対する丸めの処理が前記丸め手段によって施されて得られる浮動小数点データである第一の積和演算結果データが格納される、
ことを特徴とする積和演算装置。
(付記2)前記浮動小数点数データの表現形式は、IEEE(The Institute of Electrical and Electronics Engineers, Inc. )の2進浮動小数点算術演算についての規格であるIEEE−754規格に準拠していることを特徴とする付記1に記載の積和演算装置。
(付記3)前記上位乗算結果データに前記第三のデータを加算して得られる第三加算結果データを前記加算手段に算出させる第三加算制御手段と、
前記第三加算結果データに前記下位乗算結果データを加算して得られる第四加算結果データを前記加算手段に算出させる第四加算制御手段と、
前記上位乗算結果データと前記第三のデータとの比較を行なう比較手段と、
を更に有し、
前記結果格納手段には、前記比較手段による前記比較の結果に基づき、前記第一の積和演算結果データの代わりに、前記第四加算結果データに対する丸めの処理が前記丸め手段によって施されて得られる浮動小数点データである第二の積和演算結果データが格納される、
ことを特徴とする付記1に記載の積和演算装置。
(付記4)前記比較手段による比較の結果が前記上位乗算結果データと前記第三のデータとの符号が一致していることを示しているときには、前記結果格納手段には前記第一の積和演算結果データが格納されることを特徴とする付記3に記載の積和演算装置。
(付記5)前記比較手段による比較の結果が前記上位乗算結果データと前記第三のデータとの符号が異なっていることを示しているときには、該比較の結果が、該上位乗算結果データで表現されている指数部の値と該第三のデータとの指数部の値とが一致していることを示している場合に前記第二の積和演算結果データが格納されることを特徴とする付記3に記載の積和演算装置。
(付記6)前記比較手段による比較の結果が前記上位乗算結果データと前記第三のデータとの符号が異なっていることを示しているときには、該上位乗算結果データで表現されている指数部の値と該第三のデータとの指数部の値との差が1であって且つ該乗算結果データと該第三のデータとでそれぞれ表現されている指数部の値のうち大きい方のものについての仮数部を表現しているビット列のうちの最上位のビットが0である場合には前記第二の積和演算結果データが格納されることを特徴とする付記3に記載の積和演算装置。
(付記7)前記比較手段による比較の結果が前記上位乗算結果データと前記第三のデータとの符号が異なっていることを示しているときには、該比較の結果が、該上位乗算結果データで表現されている指数部の値と該第三のデータとの指数部の値とが一致していることを示している場合、若しくは、該上位乗算結果データで表現されている指数部の値と該第三のデータとの指数部の値との差が1であって且つ該乗算結果データと該第三のデータとでそれぞれ表現されている指数部の値のうち大きい方のものについての仮数部を表現しているビット列のうちの最上位のビットが0である場合には前記第二の積和演算結果データが格納され、その他の場合には前記第一の積和演算結果データが格納されることを特徴とする付記3に記載の積和演算装置。
(付記8)前記乗算手段による乗算の結果若しくは前記加算手段による加算の結果を示す浮動小数点数データにおいて指数部の表現のために割り当てられているビット数を、該乗算若しくは該加算においてオーバーフロー又はアンダーフローが生じたことを示す情報に基づいて拡張する変換を行なう指数部変換手段を更に有し、
前記加算手段で行なわれる加算の対象が前記乗算手段による乗算の結果若しくは該加算手段自身が以前に行なった加算の結果を示すデータであるとき、該加算手段は、前記指数部変換手段による変換が行なわれた後の値が該データにおける指数部の値であるものとして該データの加算を行なう、
ことを特徴とする付記1に記載の積和演算装置。
(付記9)前記加算手段は、該加算手段で行なわれた加算の結果として得られる浮動小数点数データに前記丸め手段が丸めの処理を施すための基とする情報である丸め処理情報を該加算の結果と併せて出力し、
前記丸め手段は、前記第二加算結果データに対して前記丸めの処理を施すときには、前記加算手段が前記第一加算結果データの算出を行なったときに出力された第一の丸め処理情報、及び該加算手段が該第二加算結果データの算出を行なったときに出力された第二の丸め処理情報に基づいて該丸めの処理を施す、
ことを特徴とする付記1に記載の積和演算装置。
(付記10)前記丸め処理情報は、前記加算手段による加算の対象とする2つの浮動小数点数データのうちのいずれかの仮数部の値に対し、仮数部の値の加算のために施される桁揃えによって切り捨てられたビット列のうちの最上位のビットであるガードビット、該最上位のビットの下の桁である第二位のビットであるラウンドビット、及び該第二位のビットの下の桁以降の全てのビットの論理和を示すビットであるスティッキービットとを有し、
前記丸め手段は、前記第二加算結果データに対して前記丸めの処理を施すときには、前記第一の丸め情報におけるガードビットと前記第二の丸め情報におけるガードビットとの論理和、該第一の丸め情報におけるラウンドビットと該第二の丸め情報におけるラウンドビットとの論理和、及び該第一の丸め情報におけるガードビットとラウンドビットとスティッキービットと該第二の丸め情報におけるスティッキービットとの論理和、に基づいて該丸めの処理を施す、
ことを特徴とする付記9に記載の積和演算装置。
(付記11)浮動小数点数をビット列で表現する浮動小数点数データである第一のデータと第二のデータとの積へ該浮動小数点数データである第三のデータを加算する積和演算を実行する積和演算方法であって、
浮動小数点数データの乗算を行なう乗算器に前記第一のデータと前記第二のデータとの乗算を行なわせ、
前記乗算の結果である乗算結果データにおける仮数部を表現するビット列を該仮数部における上位の桁を表現するものと該仮数部における下位の桁を表現するものとの2つに分割したうちの該下位の桁を表現するビット列を仮数部とする下位乗算結果データに前記第三のデータを加算する演算を浮動小数点数データの加算を行なう加算器に行なわせ、
前記加算の結果である第一加算結果データに前記上位の桁を表現するビット列を仮数部とする上位乗算結果データを加算して得られる第二加算結果データを前記加算器に算出させ、
前記第二加算結果データに対して丸めの処理を施して得られたデータを該積和演算の結果とする、
ことを特徴とする積和演算方法。
【0160】
【発明の効果】
以上詳細に説明したように、本発明は、浮動小数点数をビット列で表現する浮動小数点数データである第一のデータと第二のデータとの積へ該浮動小数点数データである第三のデータを加算する積和演算を実行するために、第一のデータと第二のデータとの乗算の結果である乗算結果データにおける仮数部を表現するビット列を該仮数部における上位の桁を表現するものと該仮数部における下位の桁を表現するものとの2つに分割し、そのうちの該下位の桁を表現するビット列を仮数部とする下位乗算結果データと第三のデータとの加算を先に行ない、該加算の結果と該上位の桁を表現するビット列を仮数部とする上位乗算結果データとの加算を後に行なうようにし、その後の加算の結果に対して丸めの処理を施して得られたデータを該積和演算の結果とする。
【0161】
こうすることにより、乗算結果をそのままのビット幅で加算器に入力する構成を採る場合に比べて加算器の回路規模が小さくなり、乗算器から加算器へデータを転送するバスのビット幅も少なくなるので、回路規模の増大が抑制される。
【0162】
また、乗算結果の仮数部における上位の桁を仮数部とするデータと第三のデータとの加算を先に行なうとその加算の途中で行なわれる仮数部の桁揃えのために消失してしまう可能性のある第三のデータの下位部分が消失することなく、十分な演算精度を有することができる。
【0163】
以上のように、本発明によれば、浮動小数点数積和演算について十分な演算精度を有する演算装置を少ない回路規模の増加で実現することが可能となる効果を奏する。
【図面の簡単な説明】
【図1】指数値の変換を説明する図である。
【図2】乗算結果の値における仮数値の分割を説明する図である。
【図3】G、R、Kの各ビットを説明する図である。
【図4】Pの指数値がHの指数値よりも大きい場合におけるC、H、Lの関係を示す図である。
【図5】本発明を実施する演算装置の構成を示す図である。
【図6】図5における浮動小数点乗算器の詳細構成を示す図である。
【図7】図5における浮動小数点乗算器の別の例を示す図である。
【図8】図5における判定回路に設けられている回路の構成を示す図である。
【図9】図5における浮動小数点加算器の詳細構成を示す図である。
【図10】図9における指数部変換回路の詳細構成を示す図である。
【図11】図9における指数部補正回路の詳細構成を示す図である。
【図12】図9におけるGRK演算回路の詳細構成を示す図である。
【図13】図5に示す演算装置に積和演算を行なわせるための制御プログラムの例を示す図である。
【図14】IEEE規格における浮動小数点数値の表現形式を示す図である。
【図15】従来の積和演算器の構成例を示す図である。
【図16】丸め処理の例を説明する図である。
【符号の説明】
101、102、106、107、701、702、703 ラッチレジスタ
103、108、409、415、416、417、708、1009 セレクタ
104 テンポラリレジスタ
105 レジスタ制御回路
109 OP1レジスタ
110 OP2レジスタ
111 リザルトレジスタ
112 浮動小数点乗算器
113 浮動小数点加算器
114 乗算結果レジスタ
115 判定回路
116 動作制御部
201 指数部演算部
202 仮数部演算部
203、304、307、507、601、604、605 加算器
204 符号レジスタ
205 上位データ用オーバーフローレジスタ
206 上位データ用アンダーフローレジスタ
207 上位データ用指数値レジスタ
208 下位データ用オーバーフローレジスタ
209 下位データ用アンダーフローレジスタ
210 下位データ用指数値レジスタ
211 仮数部乗算結果レジスタ
212 丸め演算回路
213、301、302、305、308 Exclusive-OR
214 仮数部正規化回路
215 指数部減算器
216 下位データ正規化部
303、306、309 NOR
310、506、609、704、705、706、707 OR
311、503、504、505、606、607、608 AND
401、402 指数部変換部
403 指数部比較部
404、1004 仮数部選択回路
405、1005 アライン回路
406、1006 絶対値加算回路
407 先行0カウンタ
408 正規化処理部
410 減算器
411 指数部補正回路
412 GRK演算回路
413、1008 丸め回路
414 カウンタ
501、502、602、603 NOT
1001 加算回路
1002 仮数部乗算回路
1003 減算回路
1007 正規化回路
1010 指数部補正部

Claims (5)

  1. 浮動小数点数をビット列で表現する浮動小数点数データの乗算及び加算を行なうことで積和演算を実行する積和演算装置であって、
    前記浮動小数点数データの乗算を行なう乗算手段と、
    前記浮動小数点数データの加算を行なう加算手段と、
    前記加算手段で行なわれた加算の結果として得られる浮動小数点数データに丸めの処理を施す丸め手段と、
    前記浮動小数点数データである第一のデータと第二のデータとの積へ該浮動小数点数データである第三のデータを加算する積和演算の結果が格納される結果格納手段と、
    前記第一のデータと前記第二のデータとの乗算の結果である乗算結果データを前記乗算手段に算出させる乗算制御手段と、
    前記乗算結果データにおける仮数部を表現するビット列を該仮数部における上位の桁を表現するものと該仮数部における下位の桁を表現するものとの2つに分割したうちの該下位の桁を表現するビット列を仮数部とする下位乗算結果データに、前記第三のデータを加算して得られる第一加算結果データを前記加算手段に算出させる第一加算制御手段と、
    前記第一加算結果データに前記上位の桁を表現するビット列を仮数部とする上位乗算結果データを加算して得られる第二加算結果データを前記加算手段に算出させる第二加算制御手段と、
    を有し、
    前記結果格納手段には、前記第二加算結果データに対する丸めの処理が前記丸め手段によって施されて得られる浮動小数点データである第一の積和演算結果データが格納される、
    ことを特徴とする積和演算装置。
  2. 前記上位乗算結果データに前記第三のデータを加算して得られる第三加算結果データを前記加算手段に算出させる第三加算制御手段と、
    前記第三加算結果データに前記下位乗算結果データを加算して得られる第四加算結果データを前記加算手段に算出させる第四加算制御手段と、
    前記上位乗算結果データと前記第三のデータとの比較を行なう比較手段と、
    を更に有し、
    前記結果格納手段には、前記比較手段による前記比較の結果に基づき、前記第一の積和演算結果データの代わりに、前記第四加算結果データに対する丸めの処理が前記丸め手段によって施されて得られる浮動小数点データである第二の積和演算結果データが格納される、
    ことを特徴とする請求項1に記載の積和演算装置。
  3. 前記乗算手段による乗算の結果若しくは前記加算手段による加算の結果を示す浮動小数点数データにおいて指数部の表現のために割り当てられているビット数を、該乗算若しくは該加算においてオーバーフロー又はアンダーフローが生じたことを示す情報に基づいて拡張する変換を行なう指数部変換手段を更に有し、
    前記加算手段で行なわれる加算の対象が前記乗算手段による乗算の結果若しくは該加算手段自身が以前に行なった加算の結果を示すデータであるとき、該加算手段は、前記指数部変換手段による変換が行なわれた後の値が該データにおける指数部の値であるものとして該データの加算を行なう、
    ことを特徴とする請求項1に記載の積和演算装置。
  4. 前記加算手段は、該加算手段で行なわれた加算の結果として得られる浮動小数点数データに前記丸め手段が丸めの処理を施すための基とする情報である丸め処理情報を該加算の結果と併せて出力し、
    前記丸め手段は、前記第二加算結果データに対して前記丸めの処理を施すときには、前記加算手段が前記第一加算結果データの算出を行なったときに出力された第一の丸め処理情報、及び該加算手段が該第二加算結果データの算出を行なったときに出力された第二の丸め処理情報に基づいて該丸めの処理を施す、
    ことを特徴とする請求項1に記載の積和演算装置。
  5. 浮動小数点数をビット列で表現する浮動小数点数データである第一のデータと第二のデータとの積へ該浮動小数点数データである第三のデータを加算する積和演算を実行する積和演算方法であって、
    浮動小数点数データの乗算を行なう乗算器に前記第一のデータと前記第二のデータとの乗算を行なわせ、
    前記乗算の結果である乗算結果データにおける仮数部を表現するビット列を該仮数部における上位の桁を表現するものと該仮数部における下位の桁を表現するものとの2つに分割したうちの該下位の桁を表現するビット列を仮数部とする下位乗算結果データに前記第三のデータを加算する演算を浮動小数点数データの加算を行なう加算器に行なわせ、
    前記加算の結果である第一加算結果データに前記上位の桁を表現するビット列を仮数部とする上位乗算結果データを加算して得られる第二加算結果データを前記加算器に算出させ、
    前記第二加算結果データに対して丸めの処理を施して得られたデータを該積和演算の結果とする、
    ことを特徴とする積和演算方法。
JP2001398851A 2001-12-28 2001-12-28 積和演算装置、及び積和演算方法 Expired - Fee Related JP3845009B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2001398851A JP3845009B2 (ja) 2001-12-28 2001-12-28 積和演算装置、及び積和演算方法
US10/108,398 US6895423B2 (en) 2001-12-28 2002-03-29 Apparatus and method of performing product-sum operation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001398851A JP3845009B2 (ja) 2001-12-28 2001-12-28 積和演算装置、及び積和演算方法

Publications (2)

Publication Number Publication Date
JP2003196079A JP2003196079A (ja) 2003-07-11
JP3845009B2 true JP3845009B2 (ja) 2006-11-15

Family

ID=19189395

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001398851A Expired - Fee Related JP3845009B2 (ja) 2001-12-28 2001-12-28 積和演算装置、及び積和演算方法

Country Status (2)

Country Link
US (1) US6895423B2 (ja)
JP (1) JP3845009B2 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7225216B1 (en) * 2002-07-09 2007-05-29 Nvidia Corporation Method and system for a floating point multiply-accumulator
US8190669B1 (en) 2004-10-20 2012-05-29 Nvidia Corporation Multipurpose arithmetic functional unit
US7240184B2 (en) * 2004-11-10 2007-07-03 Nvidia Corporation Multipurpose functional unit with multiplication pipeline, addition pipeline, addition pipeline and logical test pipeline capable of performing integer multiply-add operations
US7428566B2 (en) * 2004-11-10 2008-09-23 Nvidia Corporation Multipurpose functional unit with multiply-add and format conversion pipeline
US20060101244A1 (en) * 2004-11-10 2006-05-11 Nvidia Corporation Multipurpose functional unit with combined integer and floating-point multiply-add pipeline
US7225323B2 (en) * 2004-11-10 2007-05-29 Nvidia Corporation Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines
US8037119B1 (en) 2006-02-21 2011-10-11 Nvidia Corporation Multipurpose functional unit with single-precision and double-precision operations
JP4500358B2 (ja) * 2006-02-24 2010-07-14 富士通株式会社 演算処理装置および演算処理方法
US7739324B1 (en) 2006-03-22 2010-06-15 Cadence Design Systems, Inc. Timing driven synthesis of sum-of-product functional blocks
JP4388543B2 (ja) * 2006-12-14 2009-12-24 株式会社日立製作所 3項入力の浮動小数点加減算器
US8051123B1 (en) 2006-12-15 2011-11-01 Nvidia Corporation Multipurpose functional unit with double-precision and filtering operations
US8078660B2 (en) * 2007-04-10 2011-12-13 The Board Of Regents, University Of Texas System Bridge fused multiply-adder circuit
US8106914B2 (en) * 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit
US8495121B2 (en) * 2008-11-20 2013-07-23 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
US20100125621A1 (en) * 2008-11-20 2010-05-20 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
US8468191B2 (en) * 2009-09-02 2013-06-18 Advanced Micro Devices, Inc. Method and system for multi-precision computation
US10942889B2 (en) 2019-06-04 2021-03-09 Micron Technology, Inc. Bit string accumulation in memory array periphery
CN113924622B (zh) * 2019-06-04 2022-09-09 美光科技公司 存储器阵列***中的位串累加
CN111078188A (zh) * 2019-12-16 2020-04-28 广东三维家信息科技有限公司 JavaScript运算中浮点数据处理方法、装置及电子设备
CN116594589B (zh) * 2019-12-31 2024-03-26 华为技术有限公司 浮点数乘法计算的方法、装置和算术逻辑单元

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4754421A (en) * 1985-09-06 1988-06-28 Texas Instruments Incorporated Multiple precision multiplication device
JPS6280764A (ja) 1985-10-04 1987-04-14 Nec Corp 浮動小数点積和演算器
JPH0833809B2 (ja) 1990-10-02 1996-03-29 富士通テン株式会社 浮動小数点表示データの演算方法
US5241493A (en) * 1991-12-16 1993-08-31 International Business Machines Corporation Floating point arithmetic unit with size efficient pipelined multiply-add architecture
JPH0689300A (ja) 1992-09-07 1994-03-29 Nagano Japan Radio Co Ltiシステムのデータ処理方法
FR2718866B1 (fr) * 1994-04-19 1996-05-15 Sgs Thomson Microelectronics Dispositif de calcul arithmétique et logique et procédé de commande.
US5867413A (en) 1995-10-17 1999-02-02 Hitachi Micro Systems, Inc. Fast method of floating-point multiplication and accumulation
US5880984A (en) * 1997-01-13 1999-03-09 International Business Machines Corporation Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments

Also Published As

Publication number Publication date
US6895423B2 (en) 2005-05-17
US20030126174A1 (en) 2003-07-03
JP2003196079A (ja) 2003-07-11

Similar Documents

Publication Publication Date Title
JP3845009B2 (ja) 積和演算装置、及び積和演算方法
JP3541066B2 (ja) コンピュータにおいて除算および平方根計算を実施するための方法および装置
CN107769791B (zh) 用于定点到浮点的转换的装置和方法及2的负幂检测器
JP4571903B2 (ja) 演算処理装置,情報処理装置,及び演算処理方法
US8185570B2 (en) Three-term input floating-point adder-subtractor
JP3178746B2 (ja) 浮動小数点数のためのフォーマット変換装置
JP3418460B2 (ja) 倍精度除算回路および方法
KR100203468B1 (ko) 부동소수점수를 위한 산술연산장치
KR100465371B1 (ko) 덧셈 및 반올림 연산을 동시에 수행하는 부동 소수점alu 연산 장치
US20070038693A1 (en) Method and Processor for Performing a Floating-Point Instruction Within a Processor
US7401107B2 (en) Data processing apparatus and method for converting a fixed point number to a floating point number
CN108153513B (zh) 前导零预测
JP2558669B2 (ja) 浮動小数点演算装置
KR920003493B1 (ko) 부동 소숫점 표기를 기초로 하는 연산회로
JP3257278B2 (ja) 冗長なシフト数予測とシフト誤り補正を用いた正規化装置
KR100974190B1 (ko) 부동 소수점을 이용한 복소수 곱셈방법
JP4428778B2 (ja) 演算装置及び演算方法並びに計算装置
JPH0225924A (ja) 浮動小数点演算処理装置
JP3100868B2 (ja) 浮動小数点数のための算術演算装置
JP3124286B2 (ja) 浮動小数点数演算装置
KR20230015844A (ko) 극소 검출
JPH0778724B2 (ja) 除算器
CN116382625A (zh) 用于多精度算术右移的方法、装置及***
JPH0552532B2 (ja)
JPH0498524A (ja) 浮動小数点演算装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040823

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060810

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060817

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090825

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100825

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110825

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120825

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120825

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130825

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees