JP2004021573A - データ処理装置 - Google Patents
データ処理装置 Download PDFInfo
- Publication number
- JP2004021573A JP2004021573A JP2002175169A JP2002175169A JP2004021573A JP 2004021573 A JP2004021573 A JP 2004021573A JP 2002175169 A JP2002175169 A JP 2002175169A JP 2002175169 A JP2002175169 A JP 2002175169A JP 2004021573 A JP2004021573 A JP 2004021573A
- Authority
- JP
- Japan
- Prior art keywords
- data
- instruction
- input
- processing device
- 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.)
- Pending
Links
- 238000004364 calculation method Methods 0.000 claims abstract description 15
- 238000000034 method Methods 0.000 abstract description 20
- 238000010586 diagram Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 8
- 230000010365 information processing Effects 0.000 description 4
- 239000011159 matrix material Substances 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 108010076504 Protein Sorting Signals Proteins 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 229910021421 monocrystalline silicon Inorganic materials 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3875—Pipelining a single stage, e.g. superpipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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/5443—Sum of products
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Abstract
【課題】高速な乗算、および加算処理を実行する演算器を提供する。また、乗加算命令が存在しない命令セットに対しても適用できるものとする。
【解決手段】データ処理装置に含まれる演算回路を、データA及びBが入力されA*Bの計算のための部分信号であるサム信号(113)とキャリ信号(114)を出力する乗算部(EMUL1)と、前記サム信号と前記キャリ信号を加算しA*Bの最終結果を計算する第1加算部(EADD1)と、データE、前記サム信号、前記キャリ信号とを受けてA*BにEを加算した結果を計算する動作が可能な第2加算部(EADD2)とを有するよう構成する。この演算回路は、選択回路104,105により乗算(A*B)、加算(D+E)、及び乗加算(A*B+E)の3種の演算を選択して実行可能とされる。この演算回路により乗算命令と加算命令の列に対して乗算―加算のデータ依存処理を高速で行えようになる。また、乗加算計算のための特別の演算器を追加せずに既存の乗算器と加算器の変形で演算回路が実現できるのでチップ面積効率を高めることができる。
【選択図】 図1
【解決手段】データ処理装置に含まれる演算回路を、データA及びBが入力されA*Bの計算のための部分信号であるサム信号(113)とキャリ信号(114)を出力する乗算部(EMUL1)と、前記サム信号と前記キャリ信号を加算しA*Bの最終結果を計算する第1加算部(EADD1)と、データE、前記サム信号、前記キャリ信号とを受けてA*BにEを加算した結果を計算する動作が可能な第2加算部(EADD2)とを有するよう構成する。この演算回路は、選択回路104,105により乗算(A*B)、加算(D+E)、及び乗加算(A*B+E)の3種の演算を選択して実行可能とされる。この演算回路により乗算命令と加算命令の列に対して乗算―加算のデータ依存処理を高速で行えようになる。また、乗加算計算のための特別の演算器を追加せずに既存の乗算器と加算器の変形で演算回路が実現できるのでチップ面積効率を高めることができる。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明はディジタル情報処理装置、信号処理装置に関する。更には、信号処理装置に含まれる乗算器及び加算器等に関するものである。
【0002】
【従来の技術】
この明細書で参照される文献は以下の通りであり、文献はその文献番号によって参照することとする。[文献1]:Chandrakasann他編“Deign of High−Performance MicroprocessorCircuits”、IEEE Press、2000年、第181頁−第200頁、 [文献2]:特開2001−92636(英国特許公開2355823号公報(2001年5月2日公開))。
【0003】
[文献1]は、ディジタル情報処理、信号処理で用いられる乗算器及び加算器の各々の要素回路を開示する。乗算器に関しては高速化のために、nビット*nビットの乗算での各々のビット積はキャリセーブ加算器で加えられ、最後に2nビットのキャリ伝播加算器(CPA)で加算される技法が紹介されており、またBoothアルゴリズムによって加算すべき部分積の数を削減可能であると紹介されている。この乗算器は乗算命令によって活性化される。一方、加算器に関しては、高速化のためのキャリ先見加算器が用いられ、nビット+nビットの加算処理をオーダーlog(n)の演算時間で処理可能であることが紹介されている。なお、上記の乗算器の中でキャリ伝播加算器は加算器の別な言い方に過ぎないので、キャリ伝播加算器の高速化技法も本加算器の高速化技法に同一になる。この加算器は加算命令によって活性化されるし、またロードストア命令のアドレッシングの中の加算処理という形でも活性化される。
【0004】
[文献2]は、乗算と加算を組み合わせた、いわゆる乗加算器のハードウェアを開示している。即ち、[文献2]の図3Aは、ヒューズド乗算・累加FPUにおいては仮数Bと仮数Cを部分乗算器に与え、その結果の2つのデータと仮数Aの合計3つのデータをキャリーセーブ加算器によって加算する構造が示されている。この演算器はB*C+Aの積和演算結果を出力する。
【0005】
【発明が解決しようとする課題】
乗算および加算はディジタル情報処理、信号処理で頻度が高い処理である。一例として情報処理の中の数値処理でN*Nの行列にNのベクトルを掛ける行列演算は、Nの2乗回の乗算と、N(N−1)回、(Nが大なるときの主要項はいずれもNの2乗)の加算処理からなる。またディジタル信号処理分野でのFIR(有限インパルス応答)フィルタ処理はN個の入力信号列にN個の重み付け係数を掛けた総和の演算になるので、N回の乗算と、(N−1)回の加算処理からなる。また、前述の2つの例は、積項を累算する処理になることから、積和演算形式とも呼ばれ、1回の積と1回の和のペア、つまり積和演算を単位演算とみなして、積和演算を繰り返すことによって解が得られる。
【0006】
本願発明者等は、本願に先立って1チップのマイクロプロセッサ(MPU)における乗加算演算の必要性と従来からの命令との整合性及びその具体的な回路の実現方法について検討を行い以下のような課題を見いだした。
【0007】
即ち、マイクロプロセッサは、乗算命令及び加算命令を有し、それに対応して専用乗算器と専用加算器とを有しているものが多い。しかしながら乗加算命令については、全てのマイクロプロセッサが持つ訳では無く、一部のマイクロプロセッサは、伝統的に乗加算命令を持っていない。この乗加算命令を持たないマイクロプロセッサでは、積和演算が出現した場合には、既にある乗算命令及び加算命令を組み合わせて実行することはできる。しかしながらこの場合には、乗算器と加算器を順次通過することになり、各々に含まれるNビットのキャリ伝播加算器を2回通ることになるため、演算速度は最小にはならない。乗加算器の専用ハードウェアを用いた場合に比べるとほぼキャリ伝搬加算器1段分の処理時間を余分に費やしてしまう。
【0008】
このため、マイクロプロセッサの命令体系を拡張して新たに乗加算命令とそれに対応した乗加算器を追加する方法が考えられるが、この場合には(1)既にある、乗算器と加算器とほぼ同様の回路からなる乗加算器を重複して追加することとなり、追加回路のためにチップ面積を無駄に使ってしまう、(2)過去に乗算命令及び加算命令を用いて乗加算を実現してしまったプログラムを動作する際には、乗加算命令でプログラムが書かれていないので乗加算器による演算速度の向上の恩恵が得られない、などの課題が発生する。
【0009】
更に、専用の乗加算命令を使用する場合には、プログラムが乗算の中間計算結果を利用しない場合には演算時間の短縮の恩恵がえられるが、中間計算結果を利用する場合には演算時間の短縮ができない場合が生ずる。典型的には以下のような計算例においてこのような課題が発生する。即ち、レジスタR0−R15上で演算するレジスタ演算命令セットを想定して、
(データ#1)*(データ#2)を計算して(データ#3)とし、
(データ#3)+(データ#4)を計算して(データ#5)とし、
(データ#3)+(データ#6)を計算して(データ#7)とする処理を行う場合を考える。この場合に乗加算命令を適切に用いるなら、{(データ#1)*(データ#2)}+(データ#4)という乗加算処理を行うことになるが、(データ#5)は得られるが、乗算した時点での(データ#3)相当が残らないことになってしまう。この問題を回避するには、(データ#3)を再度乗算するか、あるいは(データ#5)に{(データ#6)−(データ#4)}のような差分値を加えて(データ#7)を得る処理を要する。前者の場合には乗算回数が2倍必要である、後者の場合には減算処理を1回余分に必要となる。
【0010】
さらに別な回避策として乗加算命令を用いないで、単純な乗算命令と加算命令を利用して乗算結果を得て、その結果に2回加算すれば演算数は余分に発生しないが、乗加算命令による演算時間の短縮も起こらないため、乗加算命令を追加した意義は失われる。
【0011】
本願発明が解決しようとする課題の代表的なものは以下の通りである。即ち、第1には乗加算演算器を有しない命令セットを持つデータ処理装置に対して、高速な乗加算処理を提供することにある。
【0012】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、データ処理装置に含まれる演算回路を、第1及び第2データが入力され前記第1及び第2データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、前記サム信号と前記キャリ信号を加算し前記第1及び第2データ間の積の結果を計算する第1加算部と、前記第1加算部の計算結果を出力する第1出力ノードと、第3データ、前記サム信号、前記キャリ信号とを受けて前記第1及び第2データ間の積に前記第3データを加算した結果を計算する動作が可能な第2加算部と、前記第2加算部の計算結果を出力する第2出力ノードとを有するよう構成する。この演算回路は、乗算、加算、及び乗加算とを選択して実行可能とされる。
【0013】
【発明の実施の形態】
以下、本発明に係るデータ処理装置の好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、特に制限されないが、公知のCMOS(相補型MOSトランジスタ)やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような1個の半導体基板上に形成される。
図1は本発明の演算器および、その周辺のデータ処理回路を含むブロック図である。データ処理回路は、順序回路であるフリップフロップやパイプライン動作に必要な追加のフィードバックループである。
101は乗算アレイ本体部分MA、102はブースエンコーダBEである。103、107は64ビットキャリ伝播加算器である。104、105は2入力のセレクタであり、106は64ビットのフルアダー列である。101、102は乗算入力信号A(第1入力ノード)、B(第2入力ノード)の積をキャリ保存で計算して、サム113、キャリ114を出力する。キャリ伝播加算器103に113、114を入力して、AとBの積を115(第1出力ノード)に得る。109は3入力セレクタである。
乗算アレイ101、ブースエンコーダ102でまとめて1クロック処理、キャリ伝播加算器103で1クロック処理、フルアダー106とキャリ伝播加算器107でまとめて1クロック処理を行う。この3つの処理はマイクロプロセッサで言う1ステージ処理に相当する。それを抽象的に乗算部(EMUL1)(110)、第1加算部(EADD1)(111)、第2加算部(EADD2)(112)と呼ぶことにする。それらステージの間の動作は後に別のタイミング図を用いて説明する。
乗算部(110)、第1加算部(111)の組み合わせにより乗算が行うことができる。なお、本例では32ビット*32ビットを計算して64ビットを出力する。ここで、この明細書では*を乗算を示す記号として用いる。
第2加算部(112)は64ビット+64ビットを計算して64ビットを出力する。第2加算部(112)は、D+EとA*B+Eの2通りの演算が可能である。より具体的に説明すると3入力セレクタ109が図の中の下側の入力を選択し、2入力のセレクタ104、105がともに下側の入力を選択すると、106に(値ゼロ)+D+Eが印加され、第2加算部(112)は、D+Eを計算する。また2入力のセレクタ104、105がともに上側の入力を選択すると、サム113+キャリ114+Eが印加され、EADD2ブロック(312)は、A*B+Eを計算する。
本演算器を用い、第2加算部(112)がA*B+Eの演算を行う場合、1つの特徴は、第1加算処理と、第2加算処理を開始することが可能であるという点である。本並列処理により、処理が高速化される。具体的に高速化されるケースは命令セットの定める演算に依存して異なるが以下の説明により理解できるであろう。
図2は乗算アレイ101と102の説明で、MA101の内部をより詳細に展開したものである。従来技術1の第198頁に示されるBoothの算法を使うことにより、32*32の乗算は人間の筆算のイメージの32項のデータではなく、その約半分である17項のデータを加算して、サムとキャリを出力できることが知られている。ここで、202−1、202−2、...、202−15はそれぞれ必要な数のビット数フルアダーであり、17項をツリー状に加算して、図1のMA101の出力信号であるサムとキャリを出力している。なお、201はブースセレクタである。ブースセレクタの遅延時間が仮にフルアダーの遅延時間の2倍であるとするならば、この乗算アレイのトータル遅延時間はフルアダーの遅延時間の8倍であることが図から読み取れるであろう。
図3は本演算器を用いたプロセッサLSIの全体ブロック図を示したものである。301は命令キャッシュ、302は命令デコーダユニットであり、302がデコードした命令に基づき、演算器とデータの移動を制御する、303は整数部演算器であり、304は整数レジスタファイルである。305は浮動小数点演算器であり、306は浮動小数点レジスタファイルである。307はデータキャッシュであり、レジスタファイル305、306との間のデータの入出力をロードストア命令に応答して行う。308はバスインターフェースユニットであり、LSI外部との間の入出力を行う。
図1の演算器は303の整数部演算器の中に含まれる。図1の他に命令セットの要請に応じてシフト演算器、マルチメディア演算器等が含まれるが、それらの間の配置方法は専門化には特に難しくないので、記載を省略する。
LSI全体の中で303の整数部演算器は命令デコーダユニット302から指示された演算を行うことが主機能である。1つの演算命令に応答して、整数部演算器303は整数レジスタファイル304から演算に必要なデータを受け取り、演算後に演算結果をデータを整数レジスタファイル304に返す。
図3からわかるように本発明の思想を用いた演算器が適用可能なプロセッサLSIは、特殊な構成に限定されていない。一般的なプロセッサに広く適用できることが読み取れるであろう。
図4はプロセッサの命令パイプラインを示したものである。5段パイプライン構成をとり、先のEMUL1、EADD2は第3ステージに、EADD1は第四ステージにて処理される。
図5―図7は図4のパイプラインに従って、図1の演算ハードウェアが動作する例をステージ単位で説明したものである。いずれも横軸は時間を示す。
図5は1つの乗算命令を実行し、その乗算結果(R3)を参照する加算命令をパイプライン上の1クロック遅れで実行する場合である。EADD2ステージの開始時点で乗算処理はEMUL1まで終了しており、最終的な乗算結果はまだ得られていない。そのためEMUL1の出力であるサム信号、キャリ信号をEADD2にバイパスする。このバイパス処理はセレクタ104, 105が上側を選択することによって達成される。
図6は1つの乗算命令を実行し、その乗算結果(R3)を参照する加算命令をパイプライン上の2クロック遅れで実行する場合である。EADD2ステージの開始時点で乗算処理はEADD1まで終了しており、最終的な乗算結果が得られている。そのためEADD1の出力である乗算結果信号をEADD2にバイパスする。このバイパス処理はセレクタ104, 105が下側を、セレクタ109が3つの入力のうち上から2番目を選択することによって達成される。
図7は別の動作例を示している。1つの乗算命令を実行し、その乗算結果を参照しない加算命令をパイプライン上の1クロック遅れで実行する場合である。乗算結果をバイパスする必要はないので、加算データを入力をレジスタR6から読み出しで加算処理は達成される。このバイパス処理はセレクタ104, 105が下側を、セレクタ109が3つの入力のうち上から3目を選択することによって達成される。
積和演算の一般化したニーモニック列を1つ示す。特定の命令セットに依存しないが各々の命令セットに対応させることは容易である。
MUL R0, R4, R8 (R0 * R4 → R8)
ADD R8, R14, R14 (R8 + R14 → R14)
MUL R1, R5, R9
ADD R9, R14, R14
MUL R2, R6, R10
ADD R10, R14, R14
となる。この命令列により数式 x = a * b + c * d + e * fが計算できる。命令列からわかるように、乗算結果はすぐ直後で加算処理により用いられている
図8は命令デコードユニット302の中に存在し、乗算―加算の依存関係のある命令列を検出する論理回路を示す。サムとキャリをEADD2側にバイパスする判定は1つの乗算命令と、その1クロック遅れでパイプラインを実行する1つの加算命令を検出し、かつ乗算結果を加算命令が使うか否かを判定する論理である。
801は命令デコーダの中のデコード組み合わせ論理部でありDステージに同期して命令をデコードする。802,803はタイミングをとるための、フリップフロップであり、この2つのフリップフロップ出力はE1ステージ同期となる。804A、804Bはレジスタ番号の比較器、805は2入力ORゲートであり、論理和を出力する。806は3入力ANDゲートであり、論理積を出力する。802は命令デコーダから乗算結果を受け取り、803は乗算結果を格納するレジスタ番号を格納する。804Aの下側の入力にDステージでの演算命令の入力レジスタのうち1つの番号を、804Bの下側の入力にDステージでの演算命令の入力レジスタのうちもう1つの番号を、806の上から2番目の入力に加算命令のデコード結果を与えることにより、結果として806の出力に1つの乗算命令と、その1クロック遅れでパイプラインを実行する1つの加算命令を検出し、かつ乗算結果を加算命令が使うか否かを判定結果を出力することができる。
図9は図5−8で説明したプロセッサの外部仕様(マニュアル)のレイテンシの部分の一部を示している。レイテンシの単位はクロック時間である。乗算命令のレイテンシは1または2となる。1となるのは図6のように乗算結果を加算命令に渡す場合であり、2となるのは乗算結果を加算命令以外に渡す場合である。例えば数式a*b*cを計算するときは、乗算結果をさらに乗算結果に渡すことになり、レイテンシは2になる。
しかしながら、従来技術で説明したように、乗算と加算は乗加算の形で用いられることが一般的なアプリケーションプログラムで、最も多い。頻繁に用いられる、乗算結果を加算命令に渡す場合のレイテンシが(2でなく)1であることは、平均レイテンシをほぼ1に下げられるという効果を持つ。このように本願発明の構成の側面は、乗算命令の実行のレイテンシが乗算命令の後に実行される命令によって変動することによっても特徴的に把握される。
図10は図3のハードウェアを用いながら、別な命令セットで制御されるプロセッサでのタイミング図の例である。この命令セットでは2つのレジスタの乗算値を第3のレジスタ(例ではR3)にセットし、さらに2つのレジスタの乗算値に第4のレジスタを加算したものを第5のレジスタにセットするものである。図3においてEMUL1, EADD1によって第3のレジスタにセットすべき乗算結果を算出し、同時にEMUL1, EADD2によって第5のレジスタにセットすべき乗加算結果を算出する。
【0014】
この演算ではユーザプログラムからは2つの演算が行え、かつ従来の乗加算命令の問題点であった、乗算した時点の中間結果を取り出すことができないという難点が解消されていることが特徴である。
【0015】
以上の実施例による発明の効果を述べると以下のようになる。
【0016】
(a)本願の演算回路を乗加算命令を命令セットに含まないプロセッサに適用する場合には、第1に乗算命令と加算命令を連続して実行する際に、実行が短縮化されるという効果が存在する。第2に従来命令セットの体系を変更せずに高速化が図れるという効果が存在する。即ち、既存のコンパイル済みのプログラムを実行させても高速化ができる。命令体系を変えて(乗加算命令を追加)高速化する場合には、既存のプログラムをソースから再コンパイルが必要になりそのソフトウェア変更の負担は大きい。第3に乗算と加算の実行の際に、乗算の中間結果が後で再利用できるようになる効果が存在する。本願の演算回路は、元々ある乗算器と加算器を統合したものなので、面積のオーバヘッドを招かないことに注意されたい。
【0017】
(b)本願の演算回路を乗加算命令を命令セットに含むプロセッサに適用する場合には、第1に乗算、加算、乗加算をまとめて実現できるので演算回路の面積が小さくなる。第2に乗加算の実行の際に、乗算の中間結果が後で再利用できるようになる効果が存在する。
【0018】
(c)本願の演算回路を、単一の命令で乗算演算と乗加算演算の双方を行うような命令セットを含むプロセッサに適用する場合には、乗算演算と乗加算演算の両方が乗算に関するハードウェアを兼用しつつ、同時に乗加算演算を高速に行えるという効果が存在する。
【0019】
【発明の効果】
本願発明の代表的な効果の一つは、乗加算演算器を有しない命令セットを持つデータ処理装置に対して、乗加算処理の高速化が図れることにある。
【図面の簡単な説明】
【図1】本発明の演算器および、その周辺のデータ処理回路を含むブロック図である。
【図2】乗算アレイ101の内部ブロック図である。
【図3】本演算器を用いたプロセッサLSIの全体ブロック図を示したものである。
【図4】本発明を用いたプロセッサの乗算および加算命令のパイプラインステージ図である。
【図5】動作例。
【図6】動作例。
【図7】動作例。
【図8】乗算、加算の依存命令列を検出する論理。
【図9】外部仕様(マニュアル)のレイテンシ部分の一部。
【図10】動作例。
【符号の説明】
101―乗算アレイ(Multiply Array:MA)、102−ブースエンコーダ(Booth Encoder:BE)、103、107−キャリ伝播加算器、104、105、109−セレクタ、106―64ビットのフルアダー、108−フリップフロップ、110−EMUL1ステージ、111−EADD1ステージ、112−EADDステージ、113−サム信号、114−キャリ信号、201:ブースセレクタ、202−1から202−15:フルアダー、301―命令キャッシュ、302―命令デコードユニット、303−整数演算ユニット、304―整数レジスタファイル、305−浮動小数点演算ユニット、306―浮動小数点レジスタファイル、307―データキャッシュ、308―バスインターフェースユニット
801−命令デコーダの組み合わせ論理部分、802、803−フリップフロップ、804A、804B−一致比較器、805−2入力ORゲート、806−3入力ANDゲート。
【発明の属する技術分野】
本発明はディジタル情報処理装置、信号処理装置に関する。更には、信号処理装置に含まれる乗算器及び加算器等に関するものである。
【0002】
【従来の技術】
この明細書で参照される文献は以下の通りであり、文献はその文献番号によって参照することとする。[文献1]:Chandrakasann他編“Deign of High−Performance MicroprocessorCircuits”、IEEE Press、2000年、第181頁−第200頁、 [文献2]:特開2001−92636(英国特許公開2355823号公報(2001年5月2日公開))。
【0003】
[文献1]は、ディジタル情報処理、信号処理で用いられる乗算器及び加算器の各々の要素回路を開示する。乗算器に関しては高速化のために、nビット*nビットの乗算での各々のビット積はキャリセーブ加算器で加えられ、最後に2nビットのキャリ伝播加算器(CPA)で加算される技法が紹介されており、またBoothアルゴリズムによって加算すべき部分積の数を削減可能であると紹介されている。この乗算器は乗算命令によって活性化される。一方、加算器に関しては、高速化のためのキャリ先見加算器が用いられ、nビット+nビットの加算処理をオーダーlog(n)の演算時間で処理可能であることが紹介されている。なお、上記の乗算器の中でキャリ伝播加算器は加算器の別な言い方に過ぎないので、キャリ伝播加算器の高速化技法も本加算器の高速化技法に同一になる。この加算器は加算命令によって活性化されるし、またロードストア命令のアドレッシングの中の加算処理という形でも活性化される。
【0004】
[文献2]は、乗算と加算を組み合わせた、いわゆる乗加算器のハードウェアを開示している。即ち、[文献2]の図3Aは、ヒューズド乗算・累加FPUにおいては仮数Bと仮数Cを部分乗算器に与え、その結果の2つのデータと仮数Aの合計3つのデータをキャリーセーブ加算器によって加算する構造が示されている。この演算器はB*C+Aの積和演算結果を出力する。
【0005】
【発明が解決しようとする課題】
乗算および加算はディジタル情報処理、信号処理で頻度が高い処理である。一例として情報処理の中の数値処理でN*Nの行列にNのベクトルを掛ける行列演算は、Nの2乗回の乗算と、N(N−1)回、(Nが大なるときの主要項はいずれもNの2乗)の加算処理からなる。またディジタル信号処理分野でのFIR(有限インパルス応答)フィルタ処理はN個の入力信号列にN個の重み付け係数を掛けた総和の演算になるので、N回の乗算と、(N−1)回の加算処理からなる。また、前述の2つの例は、積項を累算する処理になることから、積和演算形式とも呼ばれ、1回の積と1回の和のペア、つまり積和演算を単位演算とみなして、積和演算を繰り返すことによって解が得られる。
【0006】
本願発明者等は、本願に先立って1チップのマイクロプロセッサ(MPU)における乗加算演算の必要性と従来からの命令との整合性及びその具体的な回路の実現方法について検討を行い以下のような課題を見いだした。
【0007】
即ち、マイクロプロセッサは、乗算命令及び加算命令を有し、それに対応して専用乗算器と専用加算器とを有しているものが多い。しかしながら乗加算命令については、全てのマイクロプロセッサが持つ訳では無く、一部のマイクロプロセッサは、伝統的に乗加算命令を持っていない。この乗加算命令を持たないマイクロプロセッサでは、積和演算が出現した場合には、既にある乗算命令及び加算命令を組み合わせて実行することはできる。しかしながらこの場合には、乗算器と加算器を順次通過することになり、各々に含まれるNビットのキャリ伝播加算器を2回通ることになるため、演算速度は最小にはならない。乗加算器の専用ハードウェアを用いた場合に比べるとほぼキャリ伝搬加算器1段分の処理時間を余分に費やしてしまう。
【0008】
このため、マイクロプロセッサの命令体系を拡張して新たに乗加算命令とそれに対応した乗加算器を追加する方法が考えられるが、この場合には(1)既にある、乗算器と加算器とほぼ同様の回路からなる乗加算器を重複して追加することとなり、追加回路のためにチップ面積を無駄に使ってしまう、(2)過去に乗算命令及び加算命令を用いて乗加算を実現してしまったプログラムを動作する際には、乗加算命令でプログラムが書かれていないので乗加算器による演算速度の向上の恩恵が得られない、などの課題が発生する。
【0009】
更に、専用の乗加算命令を使用する場合には、プログラムが乗算の中間計算結果を利用しない場合には演算時間の短縮の恩恵がえられるが、中間計算結果を利用する場合には演算時間の短縮ができない場合が生ずる。典型的には以下のような計算例においてこのような課題が発生する。即ち、レジスタR0−R15上で演算するレジスタ演算命令セットを想定して、
(データ#1)*(データ#2)を計算して(データ#3)とし、
(データ#3)+(データ#4)を計算して(データ#5)とし、
(データ#3)+(データ#6)を計算して(データ#7)とする処理を行う場合を考える。この場合に乗加算命令を適切に用いるなら、{(データ#1)*(データ#2)}+(データ#4)という乗加算処理を行うことになるが、(データ#5)は得られるが、乗算した時点での(データ#3)相当が残らないことになってしまう。この問題を回避するには、(データ#3)を再度乗算するか、あるいは(データ#5)に{(データ#6)−(データ#4)}のような差分値を加えて(データ#7)を得る処理を要する。前者の場合には乗算回数が2倍必要である、後者の場合には減算処理を1回余分に必要となる。
【0010】
さらに別な回避策として乗加算命令を用いないで、単純な乗算命令と加算命令を利用して乗算結果を得て、その結果に2回加算すれば演算数は余分に発生しないが、乗加算命令による演算時間の短縮も起こらないため、乗加算命令を追加した意義は失われる。
【0011】
本願発明が解決しようとする課題の代表的なものは以下の通りである。即ち、第1には乗加算演算器を有しない命令セットを持つデータ処理装置に対して、高速な乗加算処理を提供することにある。
【0012】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、データ処理装置に含まれる演算回路を、第1及び第2データが入力され前記第1及び第2データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、前記サム信号と前記キャリ信号を加算し前記第1及び第2データ間の積の結果を計算する第1加算部と、前記第1加算部の計算結果を出力する第1出力ノードと、第3データ、前記サム信号、前記キャリ信号とを受けて前記第1及び第2データ間の積に前記第3データを加算した結果を計算する動作が可能な第2加算部と、前記第2加算部の計算結果を出力する第2出力ノードとを有するよう構成する。この演算回路は、乗算、加算、及び乗加算とを選択して実行可能とされる。
【0013】
【発明の実施の形態】
以下、本発明に係るデータ処理装置の好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、特に制限されないが、公知のCMOS(相補型MOSトランジスタ)やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような1個の半導体基板上に形成される。
図1は本発明の演算器および、その周辺のデータ処理回路を含むブロック図である。データ処理回路は、順序回路であるフリップフロップやパイプライン動作に必要な追加のフィードバックループである。
101は乗算アレイ本体部分MA、102はブースエンコーダBEである。103、107は64ビットキャリ伝播加算器である。104、105は2入力のセレクタであり、106は64ビットのフルアダー列である。101、102は乗算入力信号A(第1入力ノード)、B(第2入力ノード)の積をキャリ保存で計算して、サム113、キャリ114を出力する。キャリ伝播加算器103に113、114を入力して、AとBの積を115(第1出力ノード)に得る。109は3入力セレクタである。
乗算アレイ101、ブースエンコーダ102でまとめて1クロック処理、キャリ伝播加算器103で1クロック処理、フルアダー106とキャリ伝播加算器107でまとめて1クロック処理を行う。この3つの処理はマイクロプロセッサで言う1ステージ処理に相当する。それを抽象的に乗算部(EMUL1)(110)、第1加算部(EADD1)(111)、第2加算部(EADD2)(112)と呼ぶことにする。それらステージの間の動作は後に別のタイミング図を用いて説明する。
乗算部(110)、第1加算部(111)の組み合わせにより乗算が行うことができる。なお、本例では32ビット*32ビットを計算して64ビットを出力する。ここで、この明細書では*を乗算を示す記号として用いる。
第2加算部(112)は64ビット+64ビットを計算して64ビットを出力する。第2加算部(112)は、D+EとA*B+Eの2通りの演算が可能である。より具体的に説明すると3入力セレクタ109が図の中の下側の入力を選択し、2入力のセレクタ104、105がともに下側の入力を選択すると、106に(値ゼロ)+D+Eが印加され、第2加算部(112)は、D+Eを計算する。また2入力のセレクタ104、105がともに上側の入力を選択すると、サム113+キャリ114+Eが印加され、EADD2ブロック(312)は、A*B+Eを計算する。
本演算器を用い、第2加算部(112)がA*B+Eの演算を行う場合、1つの特徴は、第1加算処理と、第2加算処理を開始することが可能であるという点である。本並列処理により、処理が高速化される。具体的に高速化されるケースは命令セットの定める演算に依存して異なるが以下の説明により理解できるであろう。
図2は乗算アレイ101と102の説明で、MA101の内部をより詳細に展開したものである。従来技術1の第198頁に示されるBoothの算法を使うことにより、32*32の乗算は人間の筆算のイメージの32項のデータではなく、その約半分である17項のデータを加算して、サムとキャリを出力できることが知られている。ここで、202−1、202−2、...、202−15はそれぞれ必要な数のビット数フルアダーであり、17項をツリー状に加算して、図1のMA101の出力信号であるサムとキャリを出力している。なお、201はブースセレクタである。ブースセレクタの遅延時間が仮にフルアダーの遅延時間の2倍であるとするならば、この乗算アレイのトータル遅延時間はフルアダーの遅延時間の8倍であることが図から読み取れるであろう。
図3は本演算器を用いたプロセッサLSIの全体ブロック図を示したものである。301は命令キャッシュ、302は命令デコーダユニットであり、302がデコードした命令に基づき、演算器とデータの移動を制御する、303は整数部演算器であり、304は整数レジスタファイルである。305は浮動小数点演算器であり、306は浮動小数点レジスタファイルである。307はデータキャッシュであり、レジスタファイル305、306との間のデータの入出力をロードストア命令に応答して行う。308はバスインターフェースユニットであり、LSI外部との間の入出力を行う。
図1の演算器は303の整数部演算器の中に含まれる。図1の他に命令セットの要請に応じてシフト演算器、マルチメディア演算器等が含まれるが、それらの間の配置方法は専門化には特に難しくないので、記載を省略する。
LSI全体の中で303の整数部演算器は命令デコーダユニット302から指示された演算を行うことが主機能である。1つの演算命令に応答して、整数部演算器303は整数レジスタファイル304から演算に必要なデータを受け取り、演算後に演算結果をデータを整数レジスタファイル304に返す。
図3からわかるように本発明の思想を用いた演算器が適用可能なプロセッサLSIは、特殊な構成に限定されていない。一般的なプロセッサに広く適用できることが読み取れるであろう。
図4はプロセッサの命令パイプラインを示したものである。5段パイプライン構成をとり、先のEMUL1、EADD2は第3ステージに、EADD1は第四ステージにて処理される。
図5―図7は図4のパイプラインに従って、図1の演算ハードウェアが動作する例をステージ単位で説明したものである。いずれも横軸は時間を示す。
図5は1つの乗算命令を実行し、その乗算結果(R3)を参照する加算命令をパイプライン上の1クロック遅れで実行する場合である。EADD2ステージの開始時点で乗算処理はEMUL1まで終了しており、最終的な乗算結果はまだ得られていない。そのためEMUL1の出力であるサム信号、キャリ信号をEADD2にバイパスする。このバイパス処理はセレクタ104, 105が上側を選択することによって達成される。
図6は1つの乗算命令を実行し、その乗算結果(R3)を参照する加算命令をパイプライン上の2クロック遅れで実行する場合である。EADD2ステージの開始時点で乗算処理はEADD1まで終了しており、最終的な乗算結果が得られている。そのためEADD1の出力である乗算結果信号をEADD2にバイパスする。このバイパス処理はセレクタ104, 105が下側を、セレクタ109が3つの入力のうち上から2番目を選択することによって達成される。
図7は別の動作例を示している。1つの乗算命令を実行し、その乗算結果を参照しない加算命令をパイプライン上の1クロック遅れで実行する場合である。乗算結果をバイパスする必要はないので、加算データを入力をレジスタR6から読み出しで加算処理は達成される。このバイパス処理はセレクタ104, 105が下側を、セレクタ109が3つの入力のうち上から3目を選択することによって達成される。
積和演算の一般化したニーモニック列を1つ示す。特定の命令セットに依存しないが各々の命令セットに対応させることは容易である。
MUL R0, R4, R8 (R0 * R4 → R8)
ADD R8, R14, R14 (R8 + R14 → R14)
MUL R1, R5, R9
ADD R9, R14, R14
MUL R2, R6, R10
ADD R10, R14, R14
となる。この命令列により数式 x = a * b + c * d + e * fが計算できる。命令列からわかるように、乗算結果はすぐ直後で加算処理により用いられている
図8は命令デコードユニット302の中に存在し、乗算―加算の依存関係のある命令列を検出する論理回路を示す。サムとキャリをEADD2側にバイパスする判定は1つの乗算命令と、その1クロック遅れでパイプラインを実行する1つの加算命令を検出し、かつ乗算結果を加算命令が使うか否かを判定する論理である。
801は命令デコーダの中のデコード組み合わせ論理部でありDステージに同期して命令をデコードする。802,803はタイミングをとるための、フリップフロップであり、この2つのフリップフロップ出力はE1ステージ同期となる。804A、804Bはレジスタ番号の比較器、805は2入力ORゲートであり、論理和を出力する。806は3入力ANDゲートであり、論理積を出力する。802は命令デコーダから乗算結果を受け取り、803は乗算結果を格納するレジスタ番号を格納する。804Aの下側の入力にDステージでの演算命令の入力レジスタのうち1つの番号を、804Bの下側の入力にDステージでの演算命令の入力レジスタのうちもう1つの番号を、806の上から2番目の入力に加算命令のデコード結果を与えることにより、結果として806の出力に1つの乗算命令と、その1クロック遅れでパイプラインを実行する1つの加算命令を検出し、かつ乗算結果を加算命令が使うか否かを判定結果を出力することができる。
図9は図5−8で説明したプロセッサの外部仕様(マニュアル)のレイテンシの部分の一部を示している。レイテンシの単位はクロック時間である。乗算命令のレイテンシは1または2となる。1となるのは図6のように乗算結果を加算命令に渡す場合であり、2となるのは乗算結果を加算命令以外に渡す場合である。例えば数式a*b*cを計算するときは、乗算結果をさらに乗算結果に渡すことになり、レイテンシは2になる。
しかしながら、従来技術で説明したように、乗算と加算は乗加算の形で用いられることが一般的なアプリケーションプログラムで、最も多い。頻繁に用いられる、乗算結果を加算命令に渡す場合のレイテンシが(2でなく)1であることは、平均レイテンシをほぼ1に下げられるという効果を持つ。このように本願発明の構成の側面は、乗算命令の実行のレイテンシが乗算命令の後に実行される命令によって変動することによっても特徴的に把握される。
図10は図3のハードウェアを用いながら、別な命令セットで制御されるプロセッサでのタイミング図の例である。この命令セットでは2つのレジスタの乗算値を第3のレジスタ(例ではR3)にセットし、さらに2つのレジスタの乗算値に第4のレジスタを加算したものを第5のレジスタにセットするものである。図3においてEMUL1, EADD1によって第3のレジスタにセットすべき乗算結果を算出し、同時にEMUL1, EADD2によって第5のレジスタにセットすべき乗加算結果を算出する。
【0014】
この演算ではユーザプログラムからは2つの演算が行え、かつ従来の乗加算命令の問題点であった、乗算した時点の中間結果を取り出すことができないという難点が解消されていることが特徴である。
【0015】
以上の実施例による発明の効果を述べると以下のようになる。
【0016】
(a)本願の演算回路を乗加算命令を命令セットに含まないプロセッサに適用する場合には、第1に乗算命令と加算命令を連続して実行する際に、実行が短縮化されるという効果が存在する。第2に従来命令セットの体系を変更せずに高速化が図れるという効果が存在する。即ち、既存のコンパイル済みのプログラムを実行させても高速化ができる。命令体系を変えて(乗加算命令を追加)高速化する場合には、既存のプログラムをソースから再コンパイルが必要になりそのソフトウェア変更の負担は大きい。第3に乗算と加算の実行の際に、乗算の中間結果が後で再利用できるようになる効果が存在する。本願の演算回路は、元々ある乗算器と加算器を統合したものなので、面積のオーバヘッドを招かないことに注意されたい。
【0017】
(b)本願の演算回路を乗加算命令を命令セットに含むプロセッサに適用する場合には、第1に乗算、加算、乗加算をまとめて実現できるので演算回路の面積が小さくなる。第2に乗加算の実行の際に、乗算の中間結果が後で再利用できるようになる効果が存在する。
【0018】
(c)本願の演算回路を、単一の命令で乗算演算と乗加算演算の双方を行うような命令セットを含むプロセッサに適用する場合には、乗算演算と乗加算演算の両方が乗算に関するハードウェアを兼用しつつ、同時に乗加算演算を高速に行えるという効果が存在する。
【0019】
【発明の効果】
本願発明の代表的な効果の一つは、乗加算演算器を有しない命令セットを持つデータ処理装置に対して、乗加算処理の高速化が図れることにある。
【図面の簡単な説明】
【図1】本発明の演算器および、その周辺のデータ処理回路を含むブロック図である。
【図2】乗算アレイ101の内部ブロック図である。
【図3】本演算器を用いたプロセッサLSIの全体ブロック図を示したものである。
【図4】本発明を用いたプロセッサの乗算および加算命令のパイプラインステージ図である。
【図5】動作例。
【図6】動作例。
【図7】動作例。
【図8】乗算、加算の依存命令列を検出する論理。
【図9】外部仕様(マニュアル)のレイテンシ部分の一部。
【図10】動作例。
【符号の説明】
101―乗算アレイ(Multiply Array:MA)、102−ブースエンコーダ(Booth Encoder:BE)、103、107−キャリ伝播加算器、104、105、109−セレクタ、106―64ビットのフルアダー、108−フリップフロップ、110−EMUL1ステージ、111−EADD1ステージ、112−EADDステージ、113−サム信号、114−キャリ信号、201:ブースセレクタ、202−1から202−15:フルアダー、301―命令キャッシュ、302―命令デコードユニット、303−整数演算ユニット、304―整数レジスタファイル、305−浮動小数点演算ユニット、306―浮動小数点レジスタファイル、307―データキャッシュ、308―バスインターフェースユニット
801−命令デコーダの組み合わせ論理部分、802、803−フリップフロップ、804A、804B−一致比較器、805−2入力ORゲート、806−3入力ANDゲート。
Claims (17)
- 演算回路を有するデータ処理装置であって、
前記演算回路は、
第1データが入力される第1入力ノードと、
第2データが入力される第2入力ノードと、
前記第1及び第2データが入力され、前記第1及び第2データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、
前記サム信号と前記キャリ信号を加算し、前記第1及び第2データ間の積の結果を計算する第1加算部と、
前記第1加算部の計算結果を出力する第1出力ノードと、
第3データの入力される第3入力ノードと、
前記第3データ、前記サム信号、前記キャリ信号とを受けて前記第1及び第2データ間の積に前記第3データを加算した結果を計算する動作が可能な第2加算部と、
前記第2加算部の計算結果を出力する第2出力ノードとを有するデータ処理装置。 - 請求項1において、
前記データ処理装置の命令セットは、2つのデータ間の積を計算して結果を出力する乗算命令と、2つのデータ間の積を計算して結果を出力する乗算命令とを含み、
前記演算回路は、
第4データの入力される第4入力ノードと、
前記サム信号とゼロ信号の何れかを選択して前記第2加算部の入力に供給する第1選択回路と、
前記キャリ信号と前記第4データの何れかを選択して前記第2加算部の入力に供給する第2選択回路とを有し、
前記データ処理装置に前記第3及び第4データの加算のための前記加算命令が入力された場合に、前記第1選択回路はゼロ信号を選択するとともに、前記第2選択回路は前記第4データを選択し、前記第2出力ノードから前記第3及び第4データの加算結果を出力するデータ処理装置。 - 請求項2において、
前記データ処理装置に前記第1データと前記第2データの乗算のための前記乗算命令が入力された場合に、前記第1加算部は前記第1出力ノードから前記第1及び第2データの乗算結果を出力するデータ処理装置。 - 請求項1において、
前記データ処理装置の命令セットは、2つのデータ間の積を計算して結果を出力する乗算命令と、2つのデータ間の積を計算して結果を出力する乗算命令とを含み、
前記演算回路は、
第4データの入力される第4入力ノードと、
前記サム信号とゼロ信号の何れかを選択して前記第2加算部の入力に供給する第1選択回路と、
前記キャリ信号と前記第4データの何れかを選択して前記第2加算部の入力に供給する第2選択回路とを有し、
前記データ処理装置に、前記第1及び第2データの乗算のための前記乗算命令、及び前記第1及び第2データ間の乗算結果に前記第3データを加算するための前記加算命令が連続して入力された場合に、前記第1選択回路は前記サム信号を選択し、前記第2選択回路は前キャリ信号を選択し、前記第2加算部は前記第2出力ノードから前記第1及び第2データ間の積に前記第3データを加算した結果を出力するデータ処理装置。 - 請求項1において、
前記演算回路は、
第4データの入力される第4入力ノードと、
前記サム信号とゼロ信号の何れかを選択して前記第2加算部の入力に供給する第1選択回路と、
前記キャリ信号と前記第4データの何れかを選択して前記第2加算部の入力に供給する第2選択回路とを有し、
前記第1加算部は、前記サム信号と前記キャリ信号の和を計算する第1キャリ伝搬加算器であり、
前記第2加算部は、前記第1及び第2選択回路の出力信号及び前記第4データが入力されるキャリ保存加算器と、前記キャリ保存加算器の出力を受けて前記第2出力ノードに結果を出力する第2キャリ伝搬加算器を含むデータ処理装置。 - 請求項1において、
前記データ処理装置の命令セットは、2つのデータ間の積を計算して結果を出力する乗算命令と、2つのデータ間の積を計算して結果を出力する乗算命令と、2つのデータの積の結果に第3のデータを加算して結果を出力する乗加算命令とを含み、
前記演算回路は、前記乗算命令、前記加算命令、及び前記乗加算命令を実行可能とされるデータ処理装置。 - 請求項6において、
前記第1加算部は、前記サム信号と前記キャリ信号の和を計算する第1キャリ伝搬加算器を含み、
前記第2加算部は、キャリ保存加算器と、前記キャリ保存加算器の出力を受けて前記第2出力ノードに結果を出力する第2キャリ伝搬加算器を含むデータ処理装置。 - 請求項1において、
前記乗算部は、乗算アレイとブースエンコーダを含み、
前記第1加算部は、前記サム信号と前記キャリ信号の和を計算する第1キャリ伝搬加算器を含み、
前記第2加算部は、キャリ保存加算器と、前記キャリ保存加算器の出力を受けて前記第2出力ノードに結果を出力する第2キャリ伝搬加算器とを含むデータ処理装置。 - 請求項1において、
前記データ処理装置の命令セットは、2つのデータを加算する加算命令、及び2つのデータを乗算する乗算命令とを含み、
前記データ処理装置は、前記乗算命令に引き続き前記加算命令が入力されているか否かを判定するとともに、前記乗算命令の計算結果を引き続いて実行すべき加算命令が利用するか否かを判定する手段を更に有するデータ処理装置。 - 請求項1において、前記演算回路は、前記データ処理装置に入力される命令に応じて、2入力1出力乗算器、2入力1出力加算器、3入力1出力乗加算器のいずれかとして動作可能なデータ処理装置。
- 請求項1において、前記データ処理装置は、第1レジスタと、第2レジスタと、第3レジスタとを更に有し、
前記データ処理装置は第1命令を受けた場合には、前記第1レジスタと前記第2レジスタのそれぞれのデータの積を前記演算回路で計算して前記第1及び第2レジスタの何れかに格納し、
前記データ処理装置は第2命令を受けた場合には、前記第1レジスタと前記第2レジスタのそれぞれのデータの乗算して、その結果に対する前記第3レジスタのデータを加算しを前記演算回路で計算して前記第1、第2、及び第3レジスタの何れかに1つに格納するデータ処理装置。 - 2つのデータを乗算する乗算命令を命令セットに含むデータ処理装置であって、前記乗算命令を実行するために必要とするレイテンシは、前記乗算命令の後に実行される命令によって、変動するデータ処理装置。
- 請求項12において、
前記データ処理装置は、2つのデータを加算する加算命令を前記命令セットに更に含み、
前記乗算命令を実行するために必要とするレイテンシは、前記加算命令の実行レイテンシと同じ1とされる場合と、前記加算命令の実行レイテンシの半分の1/2とされる場合を含むデータ処理装置。 - 請求項12において、前記データ処理装置は前記乗算命令と前記加算命令を実行するための演算回路を有し、
前記演算回路は、
第1及び第2データが入力され、前記第1及び第2データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、
前記サム信号と前記キャリ信号を加算し、前記第1及び第2データ間の積の結果を計算する第1加算部と、
第3データ、前記サム信号、前記キャリ信号とを受けて前記第1及び第2データ間の積に前記第3データを加算した結果を計算する動作が可能な第2加算部とを有するデータ処理装置。 - 演算回路を有するデータ処理装置であって、
前記演算回路は、
第1データが入力される第1入力ノードと、
第2データが入力される第2入力ノードと、
前記第1及び第2データが入力され、前記第1及び第2データ間の積の計算のための部分信号であるサム信号とキャリ信号を出力する乗算部と、
前記サム信号と前記キャリ信号を加算し、前記第1及び第2データ間の積の結果を計算する第1加算部と、
前記第1加算部の計算結果を出力する第1出力ノードと、
第3データの入力される第3入力ノードと、
第4データの入力される第4入力ノードと、
第2加算部と、
前記第2加算部の計算結果を出力する第2出力ノードとを有し、
前記第2加算部は、前記第3データ、前記サム信号、前記キャリ信号を加算する動作と、前記第3データと前記第4データを加算する動作とが切り替え可能とされるデータ処理装置。 - 請求項15において、前記演算回路は、前記データ処理装置に入力される命令に応じて、2入力1出力乗算器、2入力1出力加算器、3入力1出力乗加算器のいずれかとして動作可能なデータ処理装置
- 請求項15において、
前記データ処理装置の命令セットは、2つのデータを加算する加算命令、及び2つのデータを乗算する乗算命令とを含み、
前記データ処理装置は、前記乗算命令に引き続き前記加算命令が入力されているか否かを判定するとともに、前記乗算命令の計算結果を引き続いて実行すべき加算命令が利用するか否かを判定する手段を更に有するデータ処理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002175169A JP2004021573A (ja) | 2002-06-17 | 2002-06-17 | データ処理装置 |
US10/443,809 US20030233384A1 (en) | 2002-06-17 | 2003-05-23 | Arithmetic apparatus for performing high speed multiplication and addition operations |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002175169A JP2004021573A (ja) | 2002-06-17 | 2002-06-17 | データ処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004021573A true JP2004021573A (ja) | 2004-01-22 |
Family
ID=29728017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002175169A Pending JP2004021573A (ja) | 2002-06-17 | 2002-06-17 | データ処理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20030233384A1 (ja) |
JP (1) | JP2004021573A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2007094047A1 (ja) * | 2006-02-14 | 2009-07-02 | 富士通株式会社 | 演算装置および演算方法 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8725537B2 (en) * | 2005-09-12 | 2014-05-13 | Mymedicalrecords, Inc. | Method and system for providing online records |
US8121855B2 (en) | 2005-09-12 | 2012-02-21 | Mymedicalrecords.Com, Inc. | Method and system for providing online medical records |
US8117045B2 (en) * | 2005-09-12 | 2012-02-14 | Mymedicalrecords.Com, Inc. | Method and system for providing online medical records |
US11269630B2 (en) * | 2019-03-29 | 2022-03-08 | Intel Corporation | Interleaved pipeline of floating-point adders |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5457805A (en) * | 1992-06-30 | 1995-10-10 | Nec Corporation | Microcomputer enabling high speed execution of product-sum operation |
US5636155A (en) * | 1993-04-27 | 1997-06-03 | Matsushita Electric Industrial Co., Ltd. | Arithmetic processor and arithmetic method |
US5784305A (en) * | 1995-05-01 | 1998-07-21 | Nec Corporation | Multiply-adder unit |
FR2819073B1 (fr) * | 2000-12-28 | 2003-02-28 | St Microelectronics Sa | Microarchitecture d'unite arithmetique |
-
2002
- 2002-06-17 JP JP2002175169A patent/JP2004021573A/ja active Pending
-
2003
- 2003-05-23 US US10/443,809 patent/US20030233384A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2007094047A1 (ja) * | 2006-02-14 | 2009-07-02 | 富士通株式会社 | 演算装置および演算方法 |
JP4482052B2 (ja) * | 2006-02-14 | 2010-06-16 | 富士通株式会社 | 演算装置および演算方法 |
Also Published As
Publication number | Publication date |
---|---|
US20030233384A1 (en) | 2003-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7225212B2 (en) | Extended precision accumulator | |
Quinnell et al. | Floating-point fused multiply-add architectures | |
US6904446B2 (en) | Floating point multiplier/accumulator with reduced latency and method thereof | |
KR101173405B1 (ko) | 부스 곱셈 방법들 및 시스템들을 위한 전력-효율적인 부호 확장 | |
GB2464292A (en) | SIMD processor circuit for performing iterative SIMD multiply-accumulate operations | |
Mueller et al. | The vector floating-point unit in a synergistic processor element of a Cell processor | |
JP2002108606A (ja) | スティッキービット生成回路及び乗算器 | |
Trong et al. | P6 binary floating-point unit | |
Saleh et al. | A floating-point fused add-subtract unit | |
US6363476B1 (en) | Multiply-add operating device for floating point number | |
JP3683773B2 (ja) | Simd演算を実行するために標準macユニットを利用する浮動小数点ユニット | |
Lutz | Fused multiply-add microarchitecture comprising separate early-normalizing multiply and add pipelines | |
Quinnell et al. | Bridge floating-point fused multiply-add design | |
US20040267861A1 (en) | Advanced execution of extended floating-point add operations in a narrow dataflow | |
Meher | On efficient retiming of fixed-point circuits | |
JP2004021573A (ja) | データ処理装置 | |
EP1116101B1 (en) | Arithmetic unit with, and method of selectively delaying a multiplication result | |
JP4482052B2 (ja) | 演算装置および演算方法 | |
GB2396708A (en) | Arithmetic logic unit with feedback to a first adder via registers and output via a second adder. | |
US6725360B1 (en) | Selectively processing different size data in multiplier and ALU paths in parallel | |
Bruintjes | Design of a fused multiply-add floating-point and integer datapath | |
JP3462054B2 (ja) | 並列加減算回路 | |
JP3695820B2 (ja) | 浮動小数点積和演算器 | |
US6792442B1 (en) | Signal processor and product-sum operating device for use therein with rounding function | |
Brunelli et al. | A flexible multiplier for media processing |