JP4359258B2 - 演算装置および演算方法 - Google Patents
演算装置および演算方法 Download PDFInfo
- 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
Links
Images
Landscapes
- Complex Calculations (AREA)
Description
そして、これら単精度および倍精度の拡張形式が演算に用いられる場合もある。
そこで、内積演算の精度を改善するものとして、いくつかの装置が提案されている。
そこで、本発明は、前記問題点に鑑みてなされたものであり、より正確な浮動小数点を用いた演算を行うことを目的とする。
データ処理装置1は、補助記憶部101、メモリ(記憶部)102、処理部としてのCPU(Central Processing Unit)103、入力部104、出力部105および入出力インタフェース106を備えて構成される。
コンパイラ112は、プログラム111をコンパイル・リンクするものである。
実行モジュール113は、コンパイラ112によってコンパイル・リンクされたモジュールである。
CPU103は、各種演算処理を行うものであり、メモリ102、入出力インタフェース106を介して実行モジュール113を実行する役割を果たす。
入力部104は、各種実行コマンドなどを入力する入力装置である。
出力部105は、各種実行結果などを出力する出力装置である。
入出力インタフェース106は、図1に示すように、各構成間の入出力のインタフェースの役割を果たすものである。
まず、操作者により入力部104から入力されたコンパイルコマンドは、入出力インタフェース106を介して、メモリ102にストアされる。メモリ102では、補助記憶部101のプログラム111が、コンパイラ112によってコンパイル・リンクされ、機械語コードである実行モジュール113が生成される。
メモリ102にストアされた実行結果は、CPU103によって、入出力インターフェイス106を介して、出力部105に出力される。
このようなSUM、DSUMを用いることにより、データ処理装置1において数値の乗算や加算などの演算を行う場合、次のような効果がある。すなわち、メモリ102やCPU103が記憶(保持)できる桁数が決まっているので、それによる数値のずれを誤差として記憶し、その後の演算においてもその誤差を使用することで、演算全体の誤差を減らしたり、なくしたりすることが可能となる。
そして、CPU103は、A(i)を、1のビットの最上位桁と最下位桁が分かれるようにA1(i)とA2(i)に分離する。
なお、この分離は、A(i),B(i)のいずれかのみに行うようにしてもよい。
これにより、A(i)*B(i)は、S1+S2+S3+S4で表現されることとなる。
これにより、和S1+S2で生じた丸めや情報落ちによる誤差をフォローすることができる。
これにより、和S3+S4で生じた丸めや情報落ちによる誤差をフォローすることができる。
これにより、和T1+T3で生じた丸めや情報落ちによる誤差をフォローすることができる。
なお、このT7は、大きな誤差を生じる可能性が少ないので、その誤差についてフォローしなくても問題はない。
このように、CPU103は、与えられたすべてのiについて、S501〜S507の処理を行う。
このように、CPU103は、与えられたすべてのiについて、S601〜S605の処理を行う。
S208において、CPU103は、出力処理として、S207で代入したSUMの値を演算結果として出力部105に出力する。
また、このように正確な演算結果を得ることにより、高精度の内積計算を必要とする産業(例えば、ニューラルネットワーク、ベクトル量子化、敏感な数値シミュレーションを必要とする物理学分野)に本発明を応用することができる。
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(正解)=1001101111010110(39894)+
1000010000011111(33823)
=10001111111110101(73717)
A・B(従来)=10011011*28(39680)+
10000100*28(33792)
=10001111*29(73216)
A(1)=10110111(183)
A(2)=10010101(149)
B(1)=11011010(218)
B(2)=11100011(227)
また、この例では2次元での内積演算を実施するため、S203における変数Nを2に初期化する。
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)を、1のビットの最上位桁と最下位桁が分かれるように2つ以上の数に分離することで、以下の演算における誤差を少なくすることができるのである。
S1=10001111*28(36608)
S2=11011100*23(1760)
S3=10110110*23(1456)
S4=01000110(70)
T1=10010101*28(38144)
T2=11100000(224)
T3=10111110*23(1520)
T4=00000110(6)
T5=10011010*28(39424)
T6=11110000(240)
T7=11101011*21(470)
D=10011011*28(39680)
E=11010110(214)
S11=10011011*28(39680)
S12=000000000(0)
S13=11010110(214)
S14=00000000(0)
S15=10011011*28(39680)
S16=11010110(214)
S17=11010110(214)
SUM=10011011*28(39680)
DSUM=11010110(214)
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)
S1=11111100*27(32256)
S2=11011000*21(432)
S3=10001100*23(1120)
S4=00001111(15)
T1=11111111*27(32640)
T2=00110000(48)
T3=10001101*23(1128)
T4=00000110(7)
T5=10000011*28(33536)
T6=11101000(232)
T7=10001111*21(286)
D=10000100*28(33792)
E=00011110(30)
SUM=10011011*28(39680)
DSUM=11010110(214)
S11=10001111*29(73216)
S12=10000000*21(256)
S13=11110100(244)
S14=00000000(0)
S15=10001111*29(73216)
S16=11110100(244)
S17=11111010*21(500)
SUM=10001111*29(73216)
DSUM=11111010*21(500)
なお、S207においては、実際には、SUMの値とDSUMの値を別々にメモリ102に記憶するので、丸め誤差などが生じることはない。
A・B(正解)=73717
A・B(従来)=73216(誤差501)
A・B(本願)=73716(誤差1)
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(従来)=0.43040607905071073*1019
A(1)=1738663799
A(2)=773694423
A(3)=112614455
B(1)=1506009561
B(2)=2117293945
B(3)=421597465
A1(1)=0.173866377600000000000000000000D+10
A2(1)=0.230000000000000000000000000000D+02
B1(1)=0.150600953600000000000000000000D+10
B2(1)=0.250000000000000000000000000000D+02
S1=0.261844422655376793600000000000D+19
S2=0.434665944000000000000000000000D+11
S3=0.346382193280000000000000000000D+11
S4=0.575000000000000000000000000000D+03
T1=0.261844427002036224000000000000D+19
T2=0.960000000000000000000000000000D+02
T3=0.346382199030000000000000000000D+11
T4=0.000000000000000000000000000000D+00
T5=0.261844430465858201600000000000D+19
T6=0.127000000000000000000000000000D+03
T7=0.223000000000000000000000000000D+03
D=0.261844430465858201600000000000D+19
E=0.223000000000000000000000000000D+03
まず、S601により、変数S11、S12は以下のようになる。
S11=0.261844430465858201600000000000D+19
S12=0.000000000000000000000000000000D+00
S13=0.223000000000000000000000000000D+03
S14=0.000000000000000000000000000000D+00
S15=0.261844430465858201600000000000D+19
S16=0.223000000000000000000000000000D+03
S17=0.223000000000000000000000000000D+03
SUM= 0.261844430465858201600000000000D+19
DSUM=0.223000000000000000000000000000D+03
A1(2)=0.773694416000000000000000000000D+09
A2(2)=0.700000000000000000000000000000D+01
B1(2)=0.211729392000000000000000000000D+10
B2(2)=0.250000000000000000000000000000D+02
S1=0.163813848293475072000000000000D+19
S2=0.193423604000000000000000000000D+11
S3=0.148210574400000000000000000000D+11
S4=0.175000000000000000000000000000D+03
T1=0.163813850227711104000000000000D+19
T2=0.800000000000000000000000000000D+02
T3=0.346382199030000000000000000000D+11
T4=0.000000000000000000000000000000D+00
T5=0.163813851709816857600000000000D+19
T6=0.790000000000000000000000000000D+02
T7=0.159000000000000000000000000000D+03
D=0.163813851709816883200000000000D+19
E=-0.970000000000000000000000000000D+02
S11=0.425658282175675084800000000000D+19
S12=0.000000000000000000000000000000D+00
S13=0.126000000000000000000000000000D+03
S14=0.000000000000000000000000000000D+00
S15=0.425658282175675084800000000000D+19
S16=0.126000000000000000000000000000D+03
S17=0.126000000000000000000000000000D+03
SUM= 0.425658282175675084800000000000D+19
DSUM=0.126000000000000000000000000000D+03
A1(3)=0.773694416000000000000000000000D+09
A2(3)=0.700000000000000000000000000000D+01
B1(3)=0.211729392000000000000000000000D+10
B2(3)=0.250000000000000000000000000000D+02
S1=0.474779682161446560000000000000D+17
S2=0.112614454000000000000000000000D+09
S3=0.421597464000000000000000000000D+09
S4=0.100000000000000000000000000000D+01
T1=0.474779683287591120000000000000D+17
T2=-0.200000000000000000000000000000D+01
T3=0.421597465000000000000000000000D+09
T4=0.000000000000000000000000000000D+00
T5=0.474779687503565760000000000000D+17
T6=-0.100000000000000000000000000000D+01
T7=0.159000000000000000000000000000D+03
D=0.474779687503565760000000000000D+17
E=-0.100000000000000000000000000000D+01
S11=0.430406079050710732800000000000D+19
S12=0.960000000000000000000000000000D+02
S13=0.125000000000000000000000000000D+03
S14=0.000000000000000000000000000000D+00
S15=0.430406079050710732800000000000D+19
S16=0.125000000000000000000000000000D+03
S17=0.221000000000000000000000000000D+03
SUM= 0.430406079050710732800000000000D+19
DSUM=0.221000000000000000000000000000D+03
SUM=0.430406079050710754900000000000D+19
A・B(本願)=0.4304060790507107549*1019
A・B(正解)= 4304060790507107549
A・B(従来)=0.43040607905071073*1019 (誤差0.249*103)
A・B(本願)=0.4304060790507107549*1019(誤差0)
たとえば、IEEE754で規定された単精度形式などを用いて演算を行ってもよい。
また、内積演算について説明したが、加算や乗算などの演算のみに適用してもよい。
さらに、ベクトルの次元数は、3次元以上であってもよい。
さらに、数値を所定の桁数以内にする場合は、十進数に変換したときに四捨五入する、などの別の方法を用いたものであってもよい。
その他、ハードウェア構成や処理手順などの具体的な構成について、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。たとえば、2台以上の演算装置を組み合わせて使う場合に適用してもよい。
102 メモリ
103 CPU
104 入力部
105 出力部
Claims (4)
- 乗算対象である第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次元以上の2つのベクトルの内積演算を行う場合、
前記処理部は、
各次元に関して前記総和と前記総和誤差とを算出し、それらを加算することで前記2つのベクトルの内積演算を行う
ことを特徴とする請求項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回の加算後の和に対して前記総誤差を加算することで前記総和を算出するとともに、そのときの誤差である総和誤差も算出する
ことを特徴とする演算方法。 - 1次元以上の2つのベクトルの内積演算を行う場合、
前記処理部は、
各次元に関して前記総和と前記総和誤差とを算出し、それらを加算することで前記2つのベクトルの内積演算を行う
ことを特徴とする請求項3に記載の演算方法。
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)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR102152374B1 (ko) * | 2019-02-25 | 2020-09-07 | 주식회사 딥엑스 | 인공신경망의 비트 양자화 방법 및 시스템 |
| CN118673263A (zh) * | 2024-07-03 | 2024-09-20 | 昆仑芯(北京)科技有限公司 | 数据处理装置、方法、电子设备和存储介质 |
-
2005
- 2005-04-25 JP JP2005126326A patent/JP4359258B2/ja not_active Expired - Fee Related
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 |