Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP4359258B2 - 演算装置および演算方法 - Google Patents
[go: Go Back, main page]

JP4359258B2 - 演算装置および演算方法 - Google Patents

演算装置および演算方法 Download PDF

Info

Publication number
JP4359258B2
JP4359258B2 JP2005126326A JP2005126326A JP4359258B2 JP 4359258 B2 JP4359258 B2 JP 4359258B2 JP 2005126326 A JP2005126326 A JP 2005126326A JP 2005126326 A JP2005126326 A JP 2005126326A JP 4359258 B2 JP4359258 B2 JP 4359258B2
Authority
JP
Japan
Prior art keywords
sum
error
multiplication
follows
variables
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
JP2005126326A
Other languages
English (en)
Other versions
JP2006302180A (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.)
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 JP2005126326A priority Critical patent/JP4359258B2/ja
Publication of JP2006302180A publication Critical patent/JP2006302180A/ja
Application granted granted Critical
Publication of JP4359258B2 publication Critical patent/JP4359258B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Complex Calculations (AREA)

Description

本発明は、浮動小数点を用いた演算を行う演算装置および演算方法に関する。
一般に、コンピュータなどの演算装置において、乗算、加算などの演算を行う場合、二進数で表現された数値について、所定の桁の切り捨てあるいは切り上げを行いながら、演算を実行することになる。
たとえば、IEEE(Institute of Electrical and Electronic Engineers)754では、単精度、倍精度という二進浮動小数点形式を規定している。単精度とは、1つの数値を32ビット(符号部1ビット・指数部8ビット・仮数部23ビット)で表現するものであり、倍精度とは、1つの数値を64ビット(符号部1ビット・指数部11ビット・仮数部52ビット)で表現するものである。
そして、これら単精度および倍精度の拡張形式が演算に用いられる場合もある。
このように、IEEE754では浮動小数点形式が規定されているが、これらの浮動小数点数を用いたコンピュータにおける内積演算では、丸め、情報落ち及び桁落ちの誤差が生じるため、正確な内積演算結果が得られない、という問題がある。
そこで、内積演算の精度を改善するものとして、いくつかの装置が提案されている。
たとえば、特許文献1では、入力ベクトルxに対し、全てのベクトル成分からスカラー数βを減じた後、スカラー数α倍したα(x-βI)なる変換を施してから内積演算を行う装置が開示されている。
また、特許文献2では、複数の入力データに対応するビットスライスに基づいて、ルックアップテーブルから該ビットスライスの数値配列に対応する部分内積を検出して出力し、該部分内積を初期値あるいは中間累積値に対して加算して加算出力値を出力し、該加算出力値の下位側切捨てビットの数値を保持し、上記加算処理を入力データの桁数分に対応するサイクルを繰り返して得られる最終累算結果の値に最終加算サイクルから所定サイクル前までの上記切捨てビットの数値を付加することにより、演算精度の劣化を改善する演算装置が開示されている。
特開平11−96140号公報(段落0014〜段落0031、図3) 特開2000−132539号公報(段落0066〜段落0073、図1)
しかしながら、特許文献1、特許文献2ではいずれも、ハードウェアによる内積演算の精度改善方式が採用されていて、ハードウェアの設計段階で桁数に制限が設けられるため、IEEE754に準拠している任意の浮動小数点を用いた内積演算において、丸め、情報落ち及び桁落ちの誤差が少なからず生じることがあり、正確な演算結果が得られないという問題点があった。
そこで、本発明は、前記問題点に鑑みてなされたものであり、より正確な浮動小数点を用いた演算を行うことを目的とする。
前記課題を解決するために、乗算対象である第1の数と第2の数との積の演算を、二進浮動小数点を用いて行う演算装置であって、第1の数、第2の数、および、演算によって発生した数を、所定の桁数より下位の桁のビットを切り捨てることによってあるいは切り上げることによって所定の桁数内の数として記憶する記憶部と、記憶部に記憶された第1の数を、所定の上位数桁である第1の上位数と、残りの下位数桁である第1の下位数と、に分離し、記憶部に記憶された第2の数を、所定の上位数桁である第2の上位数と、残りの下位数桁である第2の下位数と、に分離し、第1の上位数と第2の上位数とを乗算して第1の乗算数とし、第1の上位数と第2の下位数とを乗算して第2の乗算数とし、第1の下位数と第2の上位数とを乗算して第3の乗算数とし、第1の下位数と第2の下位数とを乗算して第4の乗算数とし、第1の乗算数、第2の乗算数、第3の乗算数および第4の乗算数を任意の順番で3回の加算を行うことでその総和を算出するとき、各回における和とは別に各回の誤差それぞれを記憶部に記憶させ、各回の誤差すべてを加算して総誤差を算出し、3回の加算後の和に対して総誤差を加算することで総和を算出するとともに、そのときの誤差である総和誤差も算出する処理部と、を有することを特徴とする。その他の手段については後記する。
本発明によれば、より正確な浮動小数点を用いた演算を行うことができる。
以下、本発明に係るデータ処理装置(演算装置)について、適宜図面を参照しながら説明する。
まず、図1を参照しながら、データ処理装置の構成について説明する。図1は、データ処理装置の構成図である。
データ処理装置1は、補助記憶部101、メモリ(記憶部)102、処理部としてのCPU(Central Processing Unit)103、入力部104、出力部105および入出力インタフェース106を備えて構成される。
補助記憶部101は、各種情報を記憶するものであり、たとえば、ハードディスク、ROM(Read Only Memory)などにより実現される。補助記憶部101は、ここでは、プログラム111、コンパイラ112および実行モジュール113を記憶している。
プログラム111は、図2で示すフローチャート上の処理が記述されているプログラム(以下、ソースプログラムという)である。
コンパイラ112は、プログラム111をコンパイル・リンクするものである。
実行モジュール113は、コンパイラ112によってコンパイル・リンクされたモジュールである。
メモリ102は、各種情報を記憶する一時記憶手段であり、たとえば、RAM(Random Access Memory)により実現される。
CPU103は、各種演算処理を行うものであり、メモリ102、入出力インタフェース106を介して実行モジュール113を実行する役割を果たす。
入力部104は、各種実行コマンドなどを入力する入力装置である。
出力部105は、各種実行結果などを出力する出力装置である。
入出力インタフェース106は、図1に示すように、各構成間の入出力のインタフェースの役割を果たすものである。
そして、前記のように構成されるデータ処理装置1は、次のように動作する。
まず、操作者により入力部104から入力されたコンパイルコマンドは、入出力インタフェース106を介して、メモリ102にストアされる。メモリ102では、補助記憶部101のプログラム111が、コンパイラ112によってコンパイル・リンクされ、機械語コードである実行モジュール113が生成される。
次に、操作者により入力部104から実行コマンドが入力されると、CPU103がメモリ102に実行モジュール113をロードする。実行モジュール113がメモリ102にロードされると、CPU103によって、図2に示すフローチャート上の各処理S201〜S208がメモリ102からCPU103に逐次呼び出され、各処理が実行された後、その実行結果がメモリ102にストアされる。
メモリ102にストアされた実行結果は、CPU103によって、入出力インターフェイス106を介して、出力部105に出力される。
続いて、図2を参照しながら、データ処理装置の処理について説明する(適宜図1参照)。図2は、データ処理装置の全体的な処理を示したフローチャートである。ここでは、i=N次元での内積演算のベクトルA(i)、B(i)の精度改善を行う場合を例にして説明する。
まず、入力処理S201が、メモリ102からCPU103に呼び出される。この入力処理S201では、図3に示すように、CPU103が、S301からS303までの処理を繰り返し、操作者により入力部104から入力されたi=N次元のデータ、すなわち、A(i)、B(i)を、メモリ102にロードさせる。
図2に戻って、次に、初期化処理S202がメモリ102からCPU103に呼び出される。この初期化処理S202では、図4に示すように、S401において、CPU103が、変数であるSUMおよびDSUMの領域をメモリ102上に確保し、SUMおよびDSUMの値をそれぞれ0に初期化する。
SUMは、最終的な誤差の補正がされていない和を代入する変数であり、DSUMは、誤差の補正部分を代入する変数である。
このようなSUM、DSUMを用いることにより、データ処理装置1において数値の乗算や加算などの演算を行う場合、次のような効果がある。すなわち、メモリ102やCPU103が記憶(保持)できる桁数が決まっているので、それによる数値のずれを誤差として記憶し、その後の演算においてもその誤差を使用することで、演算全体の誤差を減らしたり、なくしたりすることが可能となる。
次に、図2の処理S203〜S206において、ベクトルのN次元数分の繰返し処理、すなわち、内積の演算処理を行う。たとえば、2次元の場合はN=2とし、その場合、A(i)、B(i)は、それぞれA(A(1),A(2))、B(B(1),B(2))と表現することとする。
具体的には、まず、CPU103は、i=NのときのA(i)*B(i)における誤差を補正する(S204)。次に、CPU103は、i=NのときのΣA(i)*B(i)における誤差を補正する(S205)。
図5は、図2に示したS204の詳細図である。まず、S501において、CPU103は、変数A(i)、A1(i)、A2(i)、B(i)、B1(i)およびB2(i)の領域を、メモリ102上に確保する。
そして、CPU103は、A(i)を、1のビットの最上位桁と最下位桁が分かれるようにA1(i)とA2(i)に分離する。
また、CPU103は、B(i)についても同様に、1のビットの最上位桁と最下位桁が分かれるようにB(i)とB2(i)に分離する。
なお、この分離は、A(i),B(i)のいずれかのみに行うようにしてもよい。
S502において、CPU103は、変数S1、S2、S3およびS4の領域を、メモリ102上に確保し、A1(i)*B1(i)をS1、A1(i)*B2(i)をS2、A2(i)*B1(i)をS3、A2(i)*B2(i)をS4にそれぞれ代入する。
これにより、A(i)*B(i)は、S1+S2+S3+S4で表現されることとなる。
S503において、CPU103は、変数T1、T2の領域をメモリ102上に確保し、前記したS1とS2の和をT1に代入する。また、S1とS2の和の誤差をS2-(T1-S1)から計算し、T2に代入する。
これにより、和S1+S2で生じた丸めや情報落ちによる誤差をフォローすることができる。
S504において、CPU103は、変数T3、T4の領域をメモリ102上に確保し、前記したS3とS4の和をT3に代入する。また、S3とS4の和の誤差をS4-(T3-S3)から計算し、T4に代入する。
これにより、和S3+S4で生じた丸めや情報落ちによる誤差をフォローすることができる。
S505において、CPU103は、変数T5、T6の領域をメモリ102上に確保し、前記したT1とT3の和をT5に代入する。また、T1とT3の和の誤差をT3-(T5-T1)から計算し、T6に代入する。
これにより、和T1+T3で生じた丸めや情報落ちによる誤差をフォローすることができる。
S506において、CPU103は、変数T7の領域をメモリ102上に確保し、前記したT2とT4とT6の和をT7に代入する。
なお、このT7は、大きな誤差を生じる可能性が少ないので、その誤差についてフォローしなくても問題はない。
S507において、CPU103は、変数D、Eの領域をメモリ102上に確保し、前記したT5とT7の和をDに代入する。また、T5とT7の和の誤差をT7-(D-T5)から計算し、Eに代入する。
このように、CPU103は、与えられたすべてのiについて、S501〜S507の処理を行う。
図6は、図2に示したS205の詳細図である。なお、図6のS601〜S605は、図5のS503〜S507と同様の処理である。
S601において、CPU103は、変数S11、S12の領域をメモリ102上に確保し、前記したSUMとDの和をS11に代入する。また、SUMとDの和の誤差をS12に代入する。
S602において、CPU103は、変数S13、S14の領域をメモリ102上に確保し、前記したDSUMとEの和をS13に代入する。また、DSUMとEの和の誤差をS14に代入する。
S603において、CPU103は、変数S15、S16の領域をメモリ102上に確保し、前記したS11とS13の和をS15に代入する。また、S11とS13の和の誤差をS16に代入する。
S604において、CPU103は、変数S17の領域をメモリ102上に確保し、前記したS12とS14とS16の和をS17に代入する。
S605において、CPU103は、前記したS15とS17の和をSUMに代入し、S15とS17の和の誤差をDSUMに代入する。
このように、CPU103は、与えられたすべてのiについて、S601〜S605の処理を行う。
図2に戻り、S207において、CPU103は、SUMと補正項DSUMの和を演算し、SUMに代入する。
S208において、CPU103は、出力処理として、S207で代入したSUMの値を演算結果として出力部105に出力する。
このように、S201〜S208の各処理を行うことで、内積演算A・Bについての正確な演算結果を得ることができる。
また、このように正確な演算結果を得ることにより、高精度の内積計算を必要とする産業(例えば、ニューラルネットワーク、ベクトル量子化、敏感な数値シミュレーションを必要とする物理学分野)に本発明を応用することができる。
続いて、前記した内積演算の具体例について説明する(適宜各図参照)。なお、ここでは、理解を容易にするため、2次元ベクトルに関する内積演算の場合を例にとり説明する。また、データ処理装置1(図1参照)が各演算で使用する数値について、仮数部として保持できる桁数を8ビットとする(指数部を除く)。そして、演算結果の数値が8ビットを超えた場合、上位8ビットのみを保持し、残りのビットは切り捨てるものとする。
前記条件のもとで、2次元ベクトルA及びBを次のように設定する。
A=(A(1),A(2))、B=(B(1),B(2))
A(1)、A(2)、B(1)、B(2)は、二進数であり、それぞれの値は、次の通りである。
A(1)=10110111(十進数表記で「183」:以下同様に、かっこ内は十進数表記)
A(2)=10010101(149)
B(1)=11011010(218)
B(2)=11100011(227)
前記条件のとき、内積演算A・Bの正確な答えであるA・B(正解)は、次のようになる。
A・B(正解)=1001101111010110(39894)+
1000010000011111(33823)
=10001111111110101(73717)
そして、本実施形態のデータ処理装置1(図1参照)を用いない場合、すなわち、従来のように切り捨てによって生じた誤差を補正しない場合、内積演算A・Bの結果であるA・B(従来)は、次のようになる。
A・B(従来)=10011011*28(39680)+
10000100*28(33792)
=10001111*29(73216)
つまり、従来の演算方式では、73717−73216=501の誤差が生じてしまう。
次に、前記条件のときに、本実施形態のデータ処理装置1(図1参照)を用いて、内積演算A・Bの結果であるA・B(本願)を算出する演算について説明する(適宜各図参照)。
まず、S201において、S301に示すように、入力部104からデータを入力する。その結果、以下のように配列が初期化される。
A(1)=10110111(183)
A(2)=10010101(149)
B(1)=11011010(218)
B(2)=11100011(227)
次に、S202において、CPU103は、変数SUM、DSUMのS401に示すように、変数SUM及びDSUMの値を0に初期化する。
また、この例では2次元での内積演算を実施するため、S203における変数Nを2に初期化する。
そして、S202が実行された後、i=1としてS204が実行される。次に、積A(1)*B(1)における誤差を補正するために、S501において、CPU103は、ベクトル成分を以下のように分離する。
A(1)=A1(1)+A2(1)
B(1)=B1(1)+B2(1)
A1(1)=10110000(176)
A2(1)=00000111(7)
B1(1)=11010000(208)
B2(1)=00001010(10)
なお、ここでは、A(1)およびB(1)の各々について、A1(1)およびB1(1)のそれぞれ下4桁が0になるように分離したが、下3桁や下2桁などが0になるように分離してもよい。また、A(1)およびB(1)のいずれかだけを分離するようにしてもよい。
いずれにしても、このように、A(1)およびB(1)を、1のビットの最上位桁と最下位桁が分かれるように2つ以上の数に分離することで、以下の演算における誤差を少なくすることができるのである。
そして、S501が実行された後、S502において、変数S1、S2、S3、S4は以下のようになる。
S1=10001111*28(36608)
S2=11011100*23(1760)
S3=10110110*23(1456)
S4=01000110(70)
S502が実行された後、S503において、変数T1、T2は以下のようになる。
T1=10010101*28(38144)
T2=11100000(224)
また、S504において、変数T3、T4は以下のようになる。
T3=10111110*23(1520)
T4=00000110(6)
さらに、S505において、変数T5、T6は以下のようになる。
T5=10011010*28(39424)
T6=11110000(240)
また、S506において、変数T7は以下のようになる。
T7=11101011*21(470)
さらに、S507において、変数D、Eは以下のようになる。
D=10011011*28(39680)
E=11010110(214)
続いて、i=1としてS205が実行される。なお、ここでは、SUMとDSUMは初期値のままであるので、ともに0である。
まず、S601において、変数S11、S12は以下のようになる。
S11=10011011*28(39680)
S12=000000000(0)
また、S602において、変数S13、S14は以下のようになる。
S13=11010110(214)
S14=00000000(0)
さらに、S603において、変数S15、S16は以下のようになる。
S15=10011011*28(39680)
S16=11010110(214)
また、S604において、変数S17は以下のようになる。
S17=11010110(214)
そして、S605において、変数SUM、DSUMは以下のようになる。
SUM=10011011*28(39680)
DSUM=11010110(214)
次に、i=2としてS204が実行される。まず、積A(2)*B(2)における誤差を補正するために、S501において、ベクトル成分を以下のように分離する。
A(2)=A1(2)+A2(2)
B(2)=B1(2)+B2(2)
A1(2)=10010000(144)
A2(2)=00000101(5)
B1(2)=11100000(225)
B2(2)=00000011(3)
そして、S501が実行された後、S502において、変数S1、S2、S3、S4は以下のようになる。
S1=11111100*27(32256)
S2=11011000*21(432)
S3=10001100*23(1120)
S4=00001111(15)
S502が実行された後、S503において、変数T1、T2は以下のようになる。
T1=11111111*27(32640)
T2=00110000(48)
また、S504において、変数T3、T4は以下のようになる。
T3=10001101*23(1128)
T4=00000110(7)
さらに、S505において、変数T5、T6は以下のようになる。
T5=10000011*28(33536)
T6=11101000(232)
また、S506において、変数T7は以下のようになる。
T7=10001111*21(286)
さらに、S507において、変数D、Eは以下のようになる。
D=10000100*28(33792)
E=00011110(30)
続いて、i=2としてS205が実行される。なお、ここでは、SUMとDSUMの値は、次のようになっている。
SUM=10011011*28(39680)
DSUM=11010110(214)
まず、S601において、変数S11、S12は以下のようになる。
S11=10001111*29(73216)
S12=10000000*21(256)
また、S602において、変数S13、S14は以下のようになる。
S13=11110100(244)
S14=00000000(0)
さらに、S603において、変数S15、S16は以下のようになる。
S15=10001111*29(73216)
S16=11110100(244)
また、S604において、変数S17は以下のようになる。
S17=11111010*21(500)
そして、S605において、変数SUM、DSUMは以下のようになる。
SUM=10001111*29(73216)
DSUM=11111010*21(500)
最後に、S207において、CPU103は、SUM+DSUMをSUMに代入し、SUM=73716を得る。
なお、S207においては、実際には、SUMの値とDSUMの値を別々にメモリ102に記憶するので、丸め誤差などが生じることはない。
そして、出力処理S208において、CPU103は、演算結果、すなわち、A・B(本願)=10001111111110100(73716)を出力する。
つまり、A・B(正解)、A・B(従来)およびA・B(本願)の演算結果の十進数表記を並べて記載すると、次のようになり、A・B(本願)の誤差がA・B(従来)の誤差に比べて、極めて小さくなることがわかる。
A・B(正解)=73717
A・B(従来)=73216(誤差501)
A・B(本願)=73716(誤差1)
具体的な別の例として、IEEE754で規定された倍精度形式を用いた3次元での内積演算A・Bにおける精度改善処理を以下に示す。なお、以下の例では、数値は十進数表記とする。
3次元ベクトルA及びBを以下のように設定するとき、内積演算A・B(正解)は以下のようになる。
A=(a00,a01,a02)、B=(b00,b10,b20)
a00=1738663799
a01=773694423
a02=112614455
b00=1506009561
b10=2117293945
b20=421597465
A・B(正解)=a00*b00+a01*b10+a02*b20=4304060790507107549
まず、上記の条件で本発明を用いない場合、すなわち、丸め、情報落ち及び桁落ちで生じた誤差を補正しない場合、内積演算A・B(従来)は以下に示すような結果となる。
A・B(従来)=0.43040607905071073*1019
一方、上記の条件で、本発明を用いた場合、以下に示すような結果となる。まず、入力処理S201により、S301のように、入力装置104からデータを入力する。その結果、以下のように配列が初期化される。
A(1)=1738663799
A(2)=773694423
A(3)=112614455
B(1)=1506009561
B(2)=2117293945
B(3)=421597465
次に、初期化処理S202により、変数SUM、S401のように、変数SUM及びDSUMを0に初期化する。また、今回の例では3次元での内積演算を実施するため、S203における変数Nを3に初期化する。
初期化処理が実行された後、i=1としてS204処理が実行される。まず、積A(1)*B(1)における誤差を補正するために、S501により、ベクトル成分を以下のように分離する。なお、ここで、Dは十進数であることを示し、変数Dとは無関係である。また、右辺の末尾の2桁の数は、10を底とする指数の指数部を示す。
A1(1)=0.173866377600000000000000000000D+10
A2(1)=0.230000000000000000000000000000D+02
B1(1)=0.150600953600000000000000000000D+10
B2(1)=0.250000000000000000000000000000D+02
S501が実行された後、S502により、変数S1、S2、S3、S4は以下のようになる。
S1=0.261844422655376793600000000000D+19
S2=0.434665944000000000000000000000D+11
S3=0.346382193280000000000000000000D+11
S4=0.575000000000000000000000000000D+03
S502が実行された後、S503により、変数T1、T2は以下のようになる。
T1=0.261844427002036224000000000000D+19
T2=0.960000000000000000000000000000D+02
S503が実行された後、S504により、変数T3、T4は以下のようになる。
T3=0.346382199030000000000000000000D+11
T4=0.000000000000000000000000000000D+00
S504が実行された後、S505により、変数T5、T6は以下のようになる。
T5=0.261844430465858201600000000000D+19
T6=0.127000000000000000000000000000D+03
S505が実行された後、S506により、変数T7は以下のようになる。
T7=0.223000000000000000000000000000D+03
S506が実行された後、S507により、変数D、Eは以下のようになる。
D=0.261844430465858201600000000000D+19
E=0.223000000000000000000000000000D+03
i=1としてS204が実行された後、次にi=1としてS205が実行される。
まず、S601により、変数S11、S12は以下のようになる。
S11=0.261844430465858201600000000000D+19
S12=0.000000000000000000000000000000D+00
S601が実行された後、S602により、変数S13、S14は以下のようになる。
S13=0.223000000000000000000000000000D+03
S14=0.000000000000000000000000000000D+00
S602が実行された後、S603により、変数S15、S16は以下のようになる。
S15=0.261844430465858201600000000000D+19
S16=0.223000000000000000000000000000D+03
S603が実行された後、S604により、変数S17は以下のようになる。
S17=0.223000000000000000000000000000D+03
S604が実行された後、S605により、変数SUM、DSUMは以下のようになる。
SUM= 0.261844430465858201600000000000D+19
DSUM=0.223000000000000000000000000000D+03
i=1としてS205が実行された後、i=2としてS204処理が実行される。まず、積A(2)*B(2)における誤差を補正するために、S501により、ベクトル成分を以下のように分離する。
A1(2)=0.773694416000000000000000000000D+09
A2(2)=0.700000000000000000000000000000D+01
B1(2)=0.211729392000000000000000000000D+10
B2(2)=0.250000000000000000000000000000D+02
S501が実行された後、S502により、変数S1、S2、S3、S4は以下のようになる。
S1=0.163813848293475072000000000000D+19
S2=0.193423604000000000000000000000D+11
S3=0.148210574400000000000000000000D+11
S4=0.175000000000000000000000000000D+03
S502が実行された後、S503により、変数T1、T2は以下のようになる。
T1=0.163813850227711104000000000000D+19
T2=0.800000000000000000000000000000D+02
S503が実行された後、S504により、変数T3、T4は以下のようになる。
T3=0.346382199030000000000000000000D+11
T4=0.000000000000000000000000000000D+00
S504が実行された後、S505により、変数T5、T6は以下のようになる。
T5=0.163813851709816857600000000000D+19
T6=0.790000000000000000000000000000D+02
S505が実行された後、S506により、変数T7は以下のようになる。
T7=0.159000000000000000000000000000D+03
S506が実行された後、S507により、変数D、Eは以下のようになる。
D=0.163813851709816883200000000000D+19
E=-0.970000000000000000000000000000D+02
i=2としてS204が実行された後、次にi=2としてS205が実行される。まず、S601により、変数S11、S12は以下のようになる。
S11=0.425658282175675084800000000000D+19
S12=0.000000000000000000000000000000D+00
S601が実行された後、S602により、変数S13、S14は以下のようになる。
S13=0.126000000000000000000000000000D+03
S14=0.000000000000000000000000000000D+00
S602が実行された後、S603により、変数S15、S16は以下のようになる。
S15=0.425658282175675084800000000000D+19
S16=0.126000000000000000000000000000D+03
S603が実行された後、S604により、変数S17は以下のようになる。
S17=0.126000000000000000000000000000D+03
S604が実行された後、S605により、変数SUM、DSUMは以下のようになる。
SUM= 0.425658282175675084800000000000D+19
DSUM=0.126000000000000000000000000000D+03
i=2としてS205が実行された後、i=3としてS204処理が実行される。まず、積A(3)*B(3)における誤差を補正するために、S501により、ベクトル成分を以下のように分離する。
A1(3)=0.773694416000000000000000000000D+09
A2(3)=0.700000000000000000000000000000D+01
B1(3)=0.211729392000000000000000000000D+10
B2(3)=0.250000000000000000000000000000D+02
S501が実行された後、S502により、変数S1、S2、S3、S4は以下のようになる。
S1=0.474779682161446560000000000000D+17
S2=0.112614454000000000000000000000D+09
S3=0.421597464000000000000000000000D+09
S4=0.100000000000000000000000000000D+01
S502が実行された後、S503により、変数T1、T2は以下のようになる。
T1=0.474779683287591120000000000000D+17
T2=-0.200000000000000000000000000000D+01
S503が実行された後、S504により、変数T3、T4は以下のようになる。
T3=0.421597465000000000000000000000D+09
T4=0.000000000000000000000000000000D+00
S504が実行された後、S505により、変数T5、T6は以下のようになる。
T5=0.474779687503565760000000000000D+17
T6=-0.100000000000000000000000000000D+01
S505が実行された後、S506により、変数T7は以下のようになる。
T7=0.159000000000000000000000000000D+03
S506が実行された後、S507により、変数D、Eは以下のようになる。
D=0.474779687503565760000000000000D+17
E=-0.100000000000000000000000000000D+01
i=3としてS204が実行された後、次にi=3としてS205が実行される。まず、S601により、変数S11、S12は以下のようになる。
S11=0.430406079050710732800000000000D+19
S12=0.960000000000000000000000000000D+02
S601が実行された後、S602により、変数S13、S14は以下のようになる。
S13=0.125000000000000000000000000000D+03
S14=0.000000000000000000000000000000D+00
S602が実行された後、S603により、変数S15、S16は以下のようになる。
S15=0.430406079050710732800000000000D+19
S16=0.125000000000000000000000000000D+03
S603が実行された後、S604により、変数S17は以下のようになる。
S17=0.221000000000000000000000000000D+03
S604が実行された後、S605により、変数SUM、DSUMは以下のようになる。
SUM= 0.430406079050710732800000000000D+19
DSUM=0.221000000000000000000000000000D+03
最後にS206において、変数SUMとDSUMの和をSUMに代入することにより、変数SUMは以下のようになる。
SUM=0.430406079050710754900000000000D+19
以上より、本発明を用いた場合、内積演算A・B(本願)は以下に示すような結果となる。
A・B(本願)=0.4304060790507107549*1019
つまり、A・B(正解)、A・B(従来)およびA・B(本願)の演算結果を並べて記載すると、次のようになり、A・B(本願)の精度が極めて高いことがわかる。
A・B(正解)= 4304060790507107549
A・B(従来)=0.43040607905071073*1019 (誤差0.249*103
A・B(本願)=0.4304060790507107549*1019(誤差0)
以上で実施形態の説明を終えるが、本発明の態様はこれらに限定されるものではない。
たとえば、IEEE754で規定された単精度形式などを用いて演算を行ってもよい。
また、内積演算について説明したが、加算や乗算などの演算のみに適用してもよい。
さらに、ベクトルの次元数は、3次元以上であってもよい。
また、数値を所定の桁数以内にする場合は、切り捨てによるものでなくても、切り上げなどによるものであってもよい。
さらに、数値を所定の桁数以内にする場合は、十進数に変換したときに四捨五入する、などの別の方法を用いたものであってもよい。
また、減算の演算を行う場合も、加算の場合と同様の演算を行うことで、より正確な演算結果を得ることができる。
その他、ハードウェア構成や処理手順などの具体的な構成について、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。たとえば、2台以上の演算装置を組み合わせて使う場合に適用してもよい。
データ処理装置の構成図である。 データ処理装置の処理を示したフローチャートである。 入力処理S201の詳細図である。 初期化処理S202の詳細図である。 処理S204の詳細図である。 処理S205の詳細図である。
符号の説明
101 補助記憶部
102 メモリ
103 CPU
104 入力部
105 出力部

Claims (4)

  1. 乗算対象である第1の数と第2の数との積の演算を、二進浮動小数点を用いて行う演算装置であって、
    前記第1の数、前記第2の数、および、演算によって発生した数を、所定の桁数より下位の桁のビットを切り捨てることによってあるいは切り上げることによって所定の桁数内の数として記憶する記憶部と、
    前記記憶部に記憶された前記第1の数を、所定の上位数桁である第1の上位数と、残りの下位数桁である第1の下位数と、に分離し、
    前記記憶部に記憶された前記第2の数を、前記所定の上位数桁である第2の上位数と、残りの下位数桁である第2の下位数と、に分離し、
    前記第1の上位数と前記第2の上位数とを乗算して第1の乗算数とし、
    前記第1の上位数と前記第2の下位数とを乗算して第2の乗算数とし、
    前記第1の下位数と前記第2の上位数とを乗算して第3の乗算数とし、
    前記第1の下位数と前記第2の下位数とを乗算して第4の乗算数とし、
    前記第1の乗算数、前記第2の乗算数、前記第3の乗算数および前記第4の乗算数を任意の順番で3回の加算を行うことでその総和を算出するとき、各回における和とは別に各回の誤差それぞれを前記記憶部に記憶させ、前記各回の誤差すべてを加算して総誤差を算出し、3回の加算後の和に対して前記総誤差を加算することで前記総和を算出するとともに、そのときの誤差である総和誤差も算出する処理部と、
    を有することを特徴とする演算装置。
  2. 1次元以上の2つのベクトルの内積演算を行う場合、
    前記処理部は、
    各次元に関して前記総和と前記総和誤差とを算出し、それらを加算することで前記2つのベクトルの内積演算を行う
    ことを特徴とする請求項1に記載の演算装置。
  3. 乗算対象である第1の数と第2の数との積の演算を、二進浮動小数点を用いて行う演算装置における演算方法であって、
    前記演算装置は、前記第1の数、前記第2の数、および、演算によって発生した数を、所定の桁数より下位の桁のビットを切り捨てることによってあるいは切り上げることによって所定の桁数内の数として記憶する記憶部と、処理部とを備えており、
    前記処理部は、
    前記記憶部に記憶された前記第1の数を、所定の上位数桁である第1の上位数と、残りの下位数桁である第1の下位数と、に分離し、
    前記記憶部に記憶された前記第2の数を、前記所定の上位数桁である第2の上位数と、残りの下位数桁である第2の下位数と、に分離し、
    前記第1の上位数と前記第2の上位数とを乗算して第1の乗算数とし、
    前記第1の上位数と前記第2の下位数とを乗算して第2の乗算数とし、
    前記第1の下位数と前記第2の上位数とを乗算して第3の乗算数とし、
    前記第1の下位数と前記第2の下位数とを乗算して第4の乗算数とし、
    前記第1の乗算数、前記第2の乗算数、前記第3の乗算数および前記第4の乗算数を任意の順番で3回の加算を行うことでその総和を算出するとき、各回における和とは別に各回の誤差それぞれを前記記憶部に記憶させ、前記各回の誤差すべてを加算して総誤差を算出し、3回の加算後の和に対して前記総誤差を加算することで前記総和を算出するとともに、そのときの誤差である総和誤差も算出する
    ことを特徴とする演算方法。
  4. 1次元以上の2つのベクトルの内積演算を行う場合、
    前記処理部は、
    各次元に関して前記総和と前記総和誤差とを算出し、それらを加算することで前記2つのベクトルの内積演算を行う
    ことを特徴とする請求項3に記載の演算方法。
JP2005126326A 2005-04-25 2005-04-25 演算装置および演算方法 Expired - Fee Related JP4359258B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005126326A JP4359258B2 (ja) 2005-04-25 2005-04-25 演算装置および演算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005126326A JP4359258B2 (ja) 2005-04-25 2005-04-25 演算装置および演算方法

Publications (2)

Publication Number Publication Date
JP2006302180A JP2006302180A (ja) 2006-11-02
JP4359258B2 true JP4359258B2 (ja) 2009-11-04

Family

ID=37470363

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005126326A Expired - Fee Related JP4359258B2 (ja) 2005-04-25 2005-04-25 演算装置および演算方法

Country Status (1)

Country Link
JP (1) JP4359258B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102152374B1 (ko) * 2019-02-25 2020-09-07 주식회사 딥엑스 인공신경망의 비트 양자화 방법 및 시스템
CN118673263A (zh) * 2024-07-03 2024-09-20 昆仑芯(北京)科技有限公司 数据处理装置、方法、电子设备和存储介质

Also Published As

Publication number Publication date
JP2006302180A (ja) 2006-11-02

Similar Documents

Publication Publication Date Title
CN105468331B (zh) 独立的浮点转换单元
US8280939B2 (en) Methods and apparatus for automatic accuracy-sustaining scaling of block-floating-point operands
US11294627B2 (en) Floating point dot-product operator with correct rounding
CN111695671A (zh) 训练神经网络的方法及装置、电子设备
US11550544B2 (en) Fused Multiply-Add operator for mixed precision floating-point numbers with correct rounding
CN107077416A (zh) 用于以选择性舍入模式进行向量处理的装置和方法
CN110235099B (zh) 用于处理输入操作数值的装置和方法
WO2021136259A1 (zh) 浮点数乘法计算的方法、装置和算术逻辑单元
CN117216466B (zh) 数据处理方法、装置、系统及存储介质
JP4273071B2 (ja) 除算・開平演算器
JP4359258B2 (ja) 演算装置および演算方法
US9933999B2 (en) Apparatus, method and program for calculating the result of a repeating iterative sum
US20250378133A1 (en) Shared Partial Products for a Dot Product Operation in Hardware
JP4376904B2 (ja) 乗算装置
CN114637488A (zh) 人工智能运算电路
Strzodka et al. Mixed precision methods for convergent iterative schemes
US8041927B2 (en) Processor apparatus and method of processing multiple data by single instructions
US20140181170A1 (en) Arithmetic circuit and arithmetic method
JP2007257239A (ja) 計算装置、および、計算方法
US20250208831A1 (en) Method and system for decimal floating-point computation
US10353671B2 (en) Circuitry and method for performing division
Hass Synthesizing optimal fixed-point arithmetic for embedded signal processing
WO2024261944A1 (ja) 情報処理装置、情報処理方法、および、コンピュータ読み取り可能な非一時的記憶媒体
KR100974190B1 (ko) 부동 소수점을 이용한 복소수 곱셈방법
JP5376659B2 (ja) 積和演算装置及び積和演算装置の制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070530

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090525

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090807

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

Free format text: PAYMENT UNTIL: 20120814

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4359258

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20120814

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20130814

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees