JP2009075676A - マイクロプロセッサ - Google Patents

マイクロプロセッサ Download PDF

Info

Publication number
JP2009075676A
JP2009075676A JP2007241583A JP2007241583A JP2009075676A JP 2009075676 A JP2009075676 A JP 2009075676A JP 2007241583 A JP2007241583 A JP 2007241583A JP 2007241583 A JP2007241583 A JP 2007241583A JP 2009075676 A JP2009075676 A JP 2009075676A
Authority
JP
Japan
Prior art keywords
complex
data
imaginary part
register
real part
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007241583A
Other languages
English (en)
Inventor
Hideki Matsuyama
英樹 松山
Masayuki Daito
正行 大東
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.)
NEC Electronics Corp
Original Assignee
NEC Electronics Corp
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 NEC Electronics Corp filed Critical NEC Electronics Corp
Priority to JP2007241583A priority Critical patent/JP2009075676A/ja
Priority to US12/232,072 priority patent/US8271571B2/en
Publication of JP2009075676A publication Critical patent/JP2009075676A/ja
Pending 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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

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

Abstract

【課題】積和演算におけるスケーリングによる計算精度の低下を、追加のレジスタを過度に使用することなく抑制する。
【解決手段】複素積和演算ユニット13は、(1)第1の複素数データの実部又は虚部と第3の複素数データの実部とを乗算する乗算器1320、(2)第1の複素数データの虚部又は実部と第3の複素数データの虚部とを乗算する乗算器1321、(3)第2の複素数データの実部又は虚部と第4の複素数データの実部とを乗算する乗算器1322、(4)第2の複素数データの虚部又は実部と第4の複素数データの虚部とを乗算する乗算器1323、(5)乗算器1320〜1323の出力値(各々最大32ビット長)を相互に加算又は減算して1つの演算結果を出力する第1の加減算部(加減算器1340、1341並びに加算器1350)、(6)第1の加減算部の出力値をレジスタ長が64ビットである第3のレジスタに加算する加算器1370を有する。
【選択図】図3

Description

本発明は、複素数のFIR(Finite Impulse Response)フィルタ演算などで多用される複素数の積和演算を実行するための演算ユニットを有するマイクロプロセッサに関する。
FIRフィルタの入出力を表す時間表現の一般式は(1)式で表される。
Figure 2009075676
(1)式において、mはFIRフィルタのタップ数を示し、W[k]がk番目のタップに関するフィルタ係数を表す。また、X[n−k]は入力複素数データ列であり、Y[n]は、FIRフィルタ出力である。このように、FIRフィルタ演算は、いわゆる"畳み込み演算"であり、積和演算の繰り返しによって実行される。
FIRフィルタ演算をマイクロプロセッサに効率よく実行させるための様々な提案が行われている。例えば、非特許文献1には、128ビット長のデータを一括処理可能なSIMD(Single Instruction Multiple Data)アーキテクチャを採用したプロセッサに、複素数のFIRフィルタ演算を実行させるためのプログラム例が開示されている。
非特許文献1に記載されたプロセッサはSIMDアーキテクチャを採用している。つまり、非特許文献1に記載されたプロセッサは、同様の積和演算回路を複数個有しており、1つの命令に応じて複数のデータ(ベクトルデータ)を入力し、これら複数のデータに対して並行して積和演算処理を行い、複数の積和演算結果データを出力する。
以下では、タップ数mが4であるときのFIRフィルタ演算を、非特許文献1に開示された思想に従って実行する例を説明する。なお、非特許文献1には、16ビット長のデータを8並列化した128ビット長のベクトルデータを処理可能なマイクロプロセッサに関して記載されている。しかしながら、説明の容易化のために、以下では、16ビット長のデータを4並列化した64ビット長のベクトルデータを取り扱うマイクロプロセッサについて説明する。また、説明の容易化のために、(1)式の畳み込みの演算式を(2)式のように変形する。
Figure 2009075676
(2)式により得られる出力データY[n]は、4つの複素積の総和によって表される。図12は、Y[0]〜Y[3]までを図示したものである。非特許文献1に開示されたプロセッサは、SIMDアーキテクチャによる並列処理の効果を高めるために、2並列であれば、1つのアキュムレータを使用してY[n]〜Y[n+1]を並行して計算する。また、4並列であれば、非特許文献1に開示されたプロセッサは、2つのアキュムレータ・レジスタを使用して、Y[n]〜Y[n+3]を並行して計算する。
例えば、Y[0]及びY[1]を並行して計算する場合、図12に示すように、第1ステップでは、2つの複素積W[0]*X[0]及びW[0]*X[1]の実部及び虚部が計算され、結果がアキュムレータに格納される。続く第2ステップでは、2つの複素積W[1]*X[1]及びW[1]*X[2]の実部及び虚部が計算され、結果がアキュムレータに加算される。同様に第3及び第4ステップを実行することによって、アキュムレータにY[0]及びY[1]の実部及び虚部が得られる。図13は、図12に示した第1〜第4ステップの計算を実行する際に使用されるベクトルデータ群を示している。なお、レジスタR2〜R13のレジスタ長は、いずれも64ビットである。図13に示した複数のレジスタのうち、レジスタR2〜R5は、入力データX[0]〜X[4]の実部及び虚部を格納している。例えば、レジスタR2は、X[0]の実部X[0]及び虚部X[0]、並びにX[1]の実部X[1]及び虚部X[1]を格納している。X[0]、X[0]、X[1]及びX[1]のデータ長は、いずれも16ビットである。また、レジスタR6〜R13は、フィルタ係数W[1]〜[3]を保持するレジスタである。
SIMDアーキテクチャの演算ユニットの具体例を図14A及びBに示す。図14A及びBは、乗算器9320及び9321、加算器9330並びに加算器9340を要素とする第1の積和演算回路と、乗算器9322及び9323、加算器9331並びに加算器9341を要素とする第2の積和演算回路が並行して設けた構成を示している。なお、図14A及びBに示した演算ユニットの構成は、発明者等が非特許文献1の記載に基づいて従来のマイクロプロセッサの改良を検討する過程で考案したものであり、非特許文献1に開示された公知の構成ではない。
図14Aは、図12に示した第1ステップの計算のうち、2つの複素積W[0]*X[0]及びW[0]*X[1]の実部を求める計算が、積和演算の実行を指示する1つの命令に基づいて実行される過程を示している。W[0]*X[0]の実部は、アキュムレータとして使用されるレジスタR0の下位側の32ビットに格納され、W[0]*X[1]の実部は、レジスタR0の上位側の32ビットに格納される。
一方、図14Bは、図12に示した第1ステップの計算のうち、2つの複素積W[0]*X[0]及びW[0]*X[1]の虚部を求める計算が、積和演算の実行を指示する1つの命令に基づいて実行される過程を示している。W[0]*X[0]の虚部は、アキュムレータとして使用されるレジスタR1の下位側の32ビットに格納され、W[0]*X[1]の虚部は、レジスタR1の上位側の32ビットに格納される。
なお、図14A及びBのように、乗算結果を格納するアキュムレータのレジスタ長が乗算結果のデータ長と同一である場合には、オーバーフローの発生を防止するために、アキュムレータに格納される累積値を適切にスケーリングする必要がある。このようなスケーリングの実行は、計算精度の低下をもたらす。このため、積和演算の結果を格納するアキュムレータのレジスタ長を、累積加算される乗算結果のデータ長に比べて大きくする技術が知られている(例えば特許文献1及び2を参照)。例えば、乗算結果データが32ビットである場合に、これらを累積加算する積和演算のアキュムレータのレジスタ長が48ビット又は64ビットとされる。
AltiVec Complex FIR、[online]、2002年10月28日、Freescale Semiconductor, Inc.、[2007年9月6日検索]、インターネット<URL: http://www.freescale.com/webapp/sps/site/overview.jsp?code=DRPPCALTVCCFIR> 特開平10−134032号公報 米国特許第7,120,783号明細書
本願の発明者等は、図12、13、14A及び14Bを参照して説明した複素数のFIRフィルタ演算をSIMDアーキテクチャによって高速化する技術に、スケーリングによる計算精度の低下を防止するために積和演算結果を格納するアキュムレータのレジスタ長を増大させる技術を適用すると、積和演算用のアキュムレータに割り当てるべきレジスタの数が増加する問題があることを見出した。例えば、図14Aの構成について見ると、64ビット長のレジスタR0だけでは、各々が32ビットを越える2つの積和演算結果を保持することは不可能であり、新たにもう1つのレジスタを積和演算用のアキュムレータに割り当てる必要がある。通常、命令のオペランド数には制約があり、命令オペランドで指定できるレジスタ数も制約されることが多い。このため、使用する命令セットによっては、積和演算用のアキュムレータ数の増加が困難な場合もある。
本発明の第1の態様にかかるマイクロプロセッサは、実行制御部、第1乃至第3のレジスタ、並びに複素積和演算ユニットを有する。前記実行制御部は、複素数の積和演算を指示する複素積和演算命令を含む命令を取得し、当該命令の実行を制御する。
前記第1のレジスタは、レジスタ長が少なくとも2m+1ビットであって、それぞれが2m−1ビット長の実部及び2m−1ビット長の虚部からなる2ビット長の第1の複素数データ及び第2の複素数データを格納可能である。同様に、前記第2のレジスタは、レジスタ長が少なくとも2m+1ビットであって、それぞれが2m−1ビット長の実部及び2m−1ビット長の虚部からなる2ビット長の第3の複素数データ及び第4の複素数データを格納可能である。また、前記第3のレジスタは、レジスタ長が少なくとも2+2ビットである。
一方、前記複素積和演算ユニットは、前記複素積和演算命令を取得した前記実行制御部による制御に基づいて、前記第1及び第2のレジスタに格納された複素数データを入力して複素演算を実行するとともに、得られた複素演算結果と前記第3のレジスタの格納値とを加算した値によって前記第3のレジスタを上書きする。さらに、前記複素積和演算ユニットは、前記第1及び第3の複素数データの積と前記第2及び第4の複素数データの積との実部どうしの和又は虚部どうしの和を算出し、得られた前記実部どうしの和又は虚部どうしの和を前記第3のレジスタの格納値に加算する。
前記第1の態様にかかるマイクロプロセッサにおいて、前記複素積和演算ユニットは、2つの複素乗算結果の実部どうし又は虚部どうしを加算した結果である1つの演算結果を生成する。ここで、2つの複素乗算結果の実部及び虚部のデータ長はそれぞれ最大2+1ビットである。したがって、2つの複素乗算結果の実部どうし又は虚部同士を加算して得られる1つの演算結果のデータ長は、最大2+2ビットである。前記第1の態様にかかるマイクロプロセッサは、この1つの演算結果を、レジスタ長が少なくとも2+2ビットである第3のレジスタの格納値に加算する。
このように、前記複素積和演算ユニットは、前記第1のレジスタに保持されたベクトルデータ(第1及び第2の複素数データ)及び前記第2のレジスタに保持されたベクトルデータ(第3及び第4の複素数データ)を用いて1つの演算結果を生成し、得られた演算結果を複素積の実部又は虚部のデータ長(2+1ビット)より大きなレジスタ長(2+2ビット以上)とされた第3のレジスタに加算することとした。つまり、前記第1の態様にかかるマイクロプロセッサは、前記第3のレジスタを積和演算用のアキュムレータとして使用することで、追加のレジスタを過度に使用することなく、スケーリングに伴う計算精度の低下を抑制することができる。
本発明により、積和演算結果を格納するアキュムレータのオーバーフローを回避するためのスケーリングに起因する計算精度の低下を、追加のレジスタを過度に使用することなく抑制することが可能なマイクロプロセッサを提供できる。
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
<発明の実施の形態1>
本実施の形態にかかるマイクロプロセッサ1を図1に示す。マイクロプロセッサ1は、アドレスバス52及びデータバス53を介して命令メモリ50及びデータメモリ51に接続されている。命令メモリ50は、マイクロプロセッサ1により実行される命令列を格納するメモリである。また、データメモリ51は、マイクロプロセッサ1に入力されるデータや、マイクロプロセッサ1によって処理されたデータが格納されるメモリである。なお、図1では、論理的な構成単位である命令メモリ50及びデータメモリ51を示しているが、これらはそれぞれ、ROM(Read Only Memory)、RAM(Random Access Memory)若しくはフラッシュメモリ、又はこれらの組合せ等により構成される。
実行制御部10は、命令メモリ50から命令をフェッチし、フェッチした命令をデコードする。より具体的に述べると、実行制御部10は、フェッチした命令の命令種別を判定し、命令オペランドを取得し、命令デコードにより得られたこれらの情報に応じて、後述するプログラムカウンタ(PC)11、レジスタファイル12、複素積和演算ユニット13に対してデータ若しくは制御信号又はこれら両方を出力する。
プログラムカウンタ11は、実行制御部10によるフェッチ対象となる命令のアドレスが保持されるレジスタである。プログラムカウンタ11の値は実行制御部10によって更新される。
レジスタファイル12は、複数の汎用レジスタの集合である。本実施の形態では、図1に示すように、レジスタファイル12が16本の汎用レジスタR0乃至R15を有するものとして説明する。また、汎用レジスタR0乃至R15は、それぞれ64ビットのレジスタとする。なお、ここでの汎用レジスタR0乃至15の数並びにレジスタ長が一例にすぎないことはもちろんである。汎用レジスタR0乃至R15は、複素積和演算ユニット13の入力データ及び出力データを格納するアキュムレータ、あるいはメモリアクセス時のアドレス指定を行うためのアドレスレジスタなど、様々な用途に使用可能なレジスタである。
複素積和演算ユニット13は、複素積和演算命令をデコードした実行制御部10の制御に従って、複素積和演算を実行する。1つの複素積和演算命令がデコードされたことに応じて複素積和演算ユニット13が実行する演算処理の例を図2に示す。図2において、X[i]、X[i]、X[i+1]、X[i+1]、W[i]、W[i]、W[i+1]及びW[i+1]の各々は、16ビット長である。また、X[i]及びX[i]は、それぞれ複素数X[i]の実部及び虚部を意味し、W[i]及びW[i]は、複素数W[i]の実部及び虚部を意味する。
図2の例では、複素積和演算ユニット13は、64ビット長のレジスタR2に保持された2つの複素数データX[i]及びX[i+1]と、64ビット長のレジスタR0保持された2つの複素数データW[i]及びW[i+1]を入力し、W[i]*X[i]+W[i+1]*X[i+1]の実部を演算する。そして、複素積和演算ユニット13は、得られた32〜34ビット長の演算結果を64ビット長のレジスタR0の保持値DTと加算し、このDTとの加算結果によってレジスタR0を上書きする。また、図2には示していないが、複素積和演算ユニット13は、W[i]*X[i]+W[i+1]*X[i+1]の虚部を演算し、演算結果をレジスタR0に加算することも可能である。
次に、図1及び2に示した複素積和演算ユニット13の具体的な構成例について説明する。図3は、複素積和演算ユニット13の構成例を示すブロック図である。図3の構成例は、3ステージパイプライン構造を採用している。なお、図3に示す複素積和演算ユニット13の構成が一例に過ぎないことはもちろんあり、当業者であれば、図3及び後述する説明並びに技術常識に基づいて様々な変形が可能である。
図3において、IN1[0]〜IN1[3]は、レジスタファイル12から複素積和演算ユニット13のIN1端子に供給される64ビットデータであり、IN1[0]〜IN1[3]の各々は16ビットである。同様に、IN2[0]〜IN2[3]は、レジスタファイル12から複素積和演算ユニット13のIN2端子に供給される64ビットデータであり、IN2[0]〜IN2[3]の各々は16ビットである。
セレクタ1310は、IN1端子に供給されるIN1[0]及びIN1[1]を入力し、実行制御部10から供給される1ビット論理信号S_ISELが"0"であるときにIN1[0]を選択して出力し、S_ISELが"1"であるときにIN1[1]を選択して出力する。
セレクタ1311は、セレクタ1310のIN1端子に供給されるIN1[0]及びIN1[1]を入力し、実行制御部10から供給される1ビット論理信号S_ISELが"0"であるときにIN1[1]を選択して出力し、S_ISELが"1"であるときにIN1[0]を選択して出力する。つまり、セレクタ1311及び1312は、互いに相補的に動作し、一方がIN1[0]を選択する場合にもう一方がIN1[1]を選択する。
乗算器1320は、IN2端子に供給される16ビットデータIN2[0]と、セレクタ1310の出力データを乗算し、32ビット長の乗算結果を出力する。乗算器1321は、IN2端子に供給される16ビットデータIN2[1]と、セレクタ1310の出力データを乗算し、32ビット長の乗算結果を出力する。乗算器1320及び1321の出力は、パイプラインラッチ1330及び1331にそれぞれ保持される。
次に、第2のパイプラインステージにおいて、加減算器1340は、パイプラインラッチ1330及び1331に保持された2つの乗算結果を入力し、これらを加算又は減算する。加減算器1340の出力データは、33ビット長である。加減算器1340の演算内容は、実行制御部10から供給される2ビット制御信号MAD_FNC[1:0]によって制御される。加減算器1340の動作ロジックを図4(a)及び(b)に示す。加減算器1340は、図4(b)のテーブルに従って、A+B、A−B、B−Aの3通りの計算を実行する。
一方、セレクタ1312及び1313、乗算器1322及び1323、パイプラインラッチ1332及び1333並びに加減算器1341は、4つの16ビットデータIN1[2]、IN1[3]、IN2[2]、及びIN2[3]に対して、上述したセレクタ1310及び1311、乗算器1320及び1321、パイプラインラッチ1330及び1331並びに加減算器1340と同様の演算を実行する。
加算器1350は、加減算器1340及び1341の2つの出力を加算する。加算器1350の出力データは、34ビット長である。加算器1350の出力は、パイプラインラッチ1360に保持される。
最後に、第3パイプラインステージにおいて、加算器1370は、パイプラインラッチ1360に保持された34ビット長の演算結果を、IN3端子に供給される64ビットデータに加算して得られる64ビットデータを出力する。複素積和演算ユニット13に積和演算を実行させる場合には、IN3端子へのデータ供給元レジスタ及びOUT1端子の出力先レジスタを同一とすればよいが、これらに各々別個のレジスタを指定してもよい。
上述した図3の構成例では、セレクタ1310及び1311、乗算器1320及び1321、パイプラインラッチ1330及び1331並びに加減算器1340によって、IN1[0]及びIN1[1]に供給される第1の複素数データ(例えばX[i]及びX[i])と、IN2[0]及びIN2[1]に供給される第3の複素数データ(例えばW[i]及びW[i])との乗算結果の実部又は虚部を求めることができる。
同様に、セレクタ1312及び1313、乗算器1322及び1323、パイプラインラッチ1332及び1333並びに加減算器1341によって、IN1[2]及びIN1[3]に供給される第2の複素数データ(例えばX[i+1]及びX[i+1])と、IN2[2]及びIN2[3]に供給される第4の複素数データ(例えばW[i+1]及びW[i+1])との乗算結果の実部又は虚部を求めることができる。
したがって、図3の構成例では、加算器1350の出力は、2つの複素乗算結果の実部どうし又は虚部どうしの加算結果となる。つまり、複素積和演算ユニット13は、合計4つの複素数データを入力し、2つの複素乗算を並行して実行することで複素乗算結果の実部(又は虚部)を2つ求める。さらに、複素積和演算ユニット13は、これら2つの値(複素乗算結果の実部又は虚部)を加算器1350によって加算した後に、さらに、加算器1370によって過去の累積値に加算するよう構成されている。
続いて以下では、マイクロプロセッサ1に、図12に示したのと同じタップ数m=4のFIRフィルタ演算を実行させる手順について説明する。上述したように、図12の例は、SIMDアーキテクチャを有するマイクロプロセッサの並列処理性能を活用するため、2つの出力データY[0]及びY[1]に関する2つの複素乗算(具体的には、W[0]*X[0]及びW[0]*X[1])を並行して計算することを特徴としていた。これに対して、以下に説明するマイクロプロセッサ1によるFIRフィルタ演算の実行例は、1つの出力データY[0]を得るための2つの複素乗算を並行して行ったうえ、これら2つの乗算結果を加算して1つの出力データを生成する点が特徴である。具体的には、図5に示すように、第1ステップでは、2つの複素積の和"W[0]*X[0]+W[1]*X[1]"の実部及び虚部が計算され、結果がアキュムレータに格納される。続く第2ステップでは、2つの複素積の和"W[2]*X[2]+W[3]*X[3]"の実部及び虚部が計算され、結果がアキュムレータに加算される。これにより、アキュムレータにY[0]の実部及び虚部が得られる。同様に、第3及び第4ステップを実行することによって、アキュムレータにY[1]の実部及び虚部が得られる。
なお、マイクロプロセッサ1は、2つの複素乗算命令によって図5の第1ステップの計算を実行する。2つの複素乗算命令の一方は、"W[0]*X[0]+W[1]*X[1]"の実部を求めるための命令(VCMADRE命令)であり、もう一方は、"W[0]*X[0]+W[1]*X[1]"の虚部を求めるための命令(VCMADIM命令)である。
図6Aは、図5の第1ステップの実部を計算するためのVCMADRE命令に応じた複素積和演算ユニット13の動作を示している。図6Aに示すように、VCMADRE命令では3つのオペランドが指定される。第1オペランド及び第2オペランドとして指定されたレジスタR2及びR3は、複素積和演算の対象である複素数データX[0]、X「1」、W[0]及びW[1]の実部及び虚部を格納するレジスタである。また、第3オペランドとして指定されたレジスタR0は、複素積和演算の結果を格納するアキュムレータとして使用されるレジスタである。このVCMADRE命令をデコードした実行制御部10の制御に基づいて、乗算器1320及び1321並びに加減算器1340が、X[0]*W[0]の実部を算出する。また、この計算に並行して、乗算器1322及び1323並びに加減算器1341が、X[1]*W[1]の実部を算出する。さらに、加算器1350が、X[0]*W[0]及びX[1]*W[1]の実部どうしを加算する。最後に、加算器1370が、加算器1350の出力をレジスタR0の格納値に加算する。これにより、"W[0]*X[0]+W[1]*X[1]"の実部が、累積値DTとしてレジスタR0に保持される。
一方、図6Bは、図5の第1ステップの虚部を計算するためのVCMADIM命令に応じた複素積和演算ユニット13の動作を示している。VCMADIM命令も3つのオペランドを含む。これら3つのオペランドの役割は、上述したVCMADRE命令と同様である。つまり、第1オペランド及び第2オペランドとして指定されたレジスタR2及びR3は、複素積和演算の対象である複素数データX[0]、X「1」、W[0]及びW[1]の実部及び虚部を格納するレジスタである。また、第3オペランドとして指定されたレジスタR1は、複素積和演算の結果を格納するアキュムレータとして使用されるレジスタである。このVCMADIM命令をデコードした実行制御部10の制御に基づいて、乗算器1320及び1321並びに加減算器1340が、X[0]*W[0]の虚部を算出する。また、この計算に並行して、乗算器1322及び1323並びに加減算器1341が、X[1]*W[1]の虚部を算出する。さらに、加算器1350が、X[0]*W[0]及びX[1]*W[1]の虚部どうしを加算する。最後に、加算器1370が、加算器1350の出力をレジスタR1の格納値に加算する。これにより、"W[0]*X[0]+W[1]*X[1]"の虚部が、累積値DTとしてレジスタR1に保持される。
図6C及びDは、図5の第1ステップの計算に引き続いて実行される図5の第2ステップに対応するVCMADRE命令及びVCMADIM命令の実行過程を示している。図6Cに示すVCMADRE命令をデコードした実行制御部10の制御に基づいて、乗算器1320及び1321並びに加減算器1340が、X[2]*W[2]の実部を計算する。また、この計算に並行して、乗算器1322及び1323並びに加減算器1341が、X[3]*W[3]の実部を計算する。さらに、加算器1350が、X[2]*W[2]及びX[3]*W[3]の実部どうしを加算する。最後に、加算器1370が、加算器1350の出力をレジスタR0の格納値DT(具体的には、先に保持されていた"W[0]*X[0]+W[1]*X[1]"の実部)に加算する。これにより、出力データY[0]の実部が、レジスタR0に保持される。
図6Dに示すVCMADIM命令をデコードした実行制御部10の制御に基づいて、乗算器1320及び1321並びに加減算器1340が、X[2]*W[2]の虚部を計算する。また、この計算に並行して、乗算器1322及び1323並びに加減算器1341が、X[3]*W[3]の虚部を計算する。さらに、加算器1350が、X[2]*W[2]及びX[3]*W[3]の虚部どうしを加算する。最後に、加算器1370が、加算器1350の出力をレジスタR0の格納値DT(具体的には、先に保持されていた"W[0]*X[0]+W[1]*X[1]"の虚部)に加算する。これにより、出力データY[0]の虚部が、レジスタR1に保持される。
なお、上述した通り、複素積和演算ユニット13が有するセレクタ1310及び1311並びに加減算器1340及び1341の動作は、実行制御部10から複素積和演算ユニット13に供給される制御信号S_ISEL及びMAD_FNC[1:0]によって制御される。図7のテーブルは、図6A乃至Dに示したVCMADRE命令及びVCMADIM命令がデコードされたことに応じて実行制御部10から複素積和演算ユニット13に供給される制御信号群の組合せを示している。
上述したように、本実施の形態にかかるマイクロプロセッサ1は、複素積和演算の実行に適した複素積和演算ユニット13を有して構成され、複素積和演算の1つの出力データ(例えばY[0])を得るための2つの複素乗算(例えば、W[0]*X[0]及びW[1]*X[1])を並行して行ったうえ、これら2つの乗算結果を加算して1つの出力データを生成する点が特徴である。
複素積和演算ユニット13は、64ビット長の2つの入力レジスタ(例えば、レジスタR2及びR3)から合計4つの複素数データ(例えば、X[0]、X[1]、W[0]及びW[1])を入力し、これら4つの複素数データを用いた2つの複素乗算(例えば、W[0]*X[0]及びW[1]*X[1])を並行して実行することで複素乗算結果の実部(又は虚部)を2つ求める。さらに、複素積和演算ユニット13は、得られた2つの複素乗算結果の実部(又は虚部)を加算器1350によって加算した値(例えば、"W[0]*X[0]+W[1]*X[1]"の実部)を、アキュムレータとして使用される64ビット長の出力レジスタ(例えばレジスタR0)の格納値に加算する。
このような構成によって、マイクロプロセッサ1は、1つの出力レジスタ(例えばレジスタR0)に1つの出力データ(例えば、"W[0]*X[0]+W[1]*X[1]"の実部)を保持できればよい。つまり、マイクロプロセッサ1は、2つの複素乗算結果の実部(又は虚部)をアキュムレータに保持しておく必要がある図14A及びBに示した構成例とは異なる。このため、マイクロプロセッサ1は、アキュムレータとして使用される64ビット長の出力レジスタの全体を積和演算結果の格納のために使用することができ、追加のレジスタを使用することなく、スケーリングに伴う計算精度の低下を抑制することができる。
<発明の実施の形態2>
本実施の形態にかかるマイクロプロセッサ2の構成を図8に示す。マイクロプロセッサ2は、複素積和演算ユニット23の構成が上述した複素積和演算ユニット13と相違する。発明の実施の形態1で説明した複素積和演算ユニット13は、2つの複素積の実部どうしの和及び虚部どうしの和(例えば、"W[0]*X[0]+W[1]*X[1]"の実部及び虚部)を2つの命令(例えば、VCMADRE命令及びVCMADIM命令)によって求めるよう構成されていた。これに対して、複素積和演算ユニット23は、ハードウェアの並列度を高めることで、2つの複素積の実部どうしの和及び虚部どうしの和を1つの命令によって求めるよう構成されている。複素積和演算ユニット23は、レジスタファイル12に含まれる4つのレジスタから4つの64ビットデータを入力し、演算結果である2つの64ビットデータをレジスタファイル12に含まれる2つのレジスタに出力するよう構成された4入力2出力の演算ユニットである。また、複素積和演算ユニット23の動作は、実行制御部20によって制御される。
複素積和演算ユニット23の構成例を図9に示す。以下では、図3との相違点に着目して図9の構成を説明する。図9において、乗算器1320〜1323、パイプラインラッチ1330〜1333、加減算器1340及び1341、加算器1350、パイプラインラッチ1360、並びに加算器1370は、図3に示したものと同一である。説明の便宜上、以下では、これらのハードウェアを共通ハードウェア群と呼ぶ。図9の構成では、これらの共通ハードウェア群に加えて、共通ハードウェア群と同じ機能を有する追加ハードウェア群が設けられている。すなわち、追加ハードウェア群は、乗算器1324〜1327、パイプラインラッチ1334〜1337、加減算器1342及び1343、加算器1351、パイプラインラッチ1361、並びに加算器1371である。図8に示す構成によれば、共通ハードウェア群が、2つの複素積の和(例えば、"W[0]*X[0]+W[1]*X[1]")の実部を計算する。また、この計算に並行して、追加ハードウェア群が、2つの複素積の和(例えば、"W[0]*X[0]+W[1]*X[1]")の虚部を計算する。
つまり、複素積和演算ユニット23は、上述した複素積和演算ユニット13が2回に分けて行っていた「2つの複素積和の和の実部及び虚部を求める計算」、例えば、"W[0]*X[0]+W[1]*X[1]"の実部及び虚部を求める計算を並行して実行できるよう構成されている。このため、乗算器1320及び1321に対する入力データ選択用に設けていたセレクタ1310及び1311は、図9の構成例では不要である。
続いて以下では、マイクロプロセッサ2に、図5に示したタップ数m=4のFIRフィルタ演算の第1ステップ及び第2ステップを実行させる手順について説明する。マイクロプロセッサ2は、1つの複素乗算命令(VCMAD命令)によって図5の第1ステップの計算を実行する。つまり、VCMAD命令に応じて、"W[0]*X[0]+W[1]*X[1]"の実部及び虚部を計算する。
図10Aは、図5の第1ステップを計算するためのVCMAD命令に応じた複素積和演算ユニット23の動作を示している。図10Aに示すように、VCMAD命令では4つのオペランドが指定される。第1オペランド及び第2オペランドとして指定されたレジスタR2及びR3は、複素積和演算の対象である複素数データX[0]、X「1」、W[0]及びW[1]の実部及び虚部を格納するレジスタである。また、第3及び第4オペランドとして指定されたレジスタR0及びR1は、複素積和演算の結果を格納するアキュムレータとして使用されるレジスタである。具体的には、"W[0]*X[0]+W[1]*X[1]"の実部の計算結果がレジスタR0に加算され、"W[0]*X[0]+W[1]*X[1]"の虚部の計算結果がレジスタR1に加算される。
図10Aについてより詳細に説明する。VCMAD命令をデコードした実行制御部20の制御に基づいて、乗算器1320及び1321並びに加減算器1340が、X[0]*W[0]の実部を算出する。一方、乗算器1322及び1323並びに加減算器1341が、X[1]*W[1]の実部を算出する。さらに、乗算器1324及び1325並びに加減算器1342が、X[0]*W[0]の虚部を算出し、乗算器1326及び1327並びに加減算器1343が、X[1]*W[1]の虚部を算出する。続いて、加算器1350が、X[0]*W[0]及びX[1]*W[1]の実部どうしを加算する。また、加算器1351が、X[0]*W[0]及びX[1]*W[1]の虚部どうしを加算する。最後に、加算器1370が、加算器1350の出力をレジスタR0の格納値に加算する。また、加算器1371が、加算器1351の出力をレジスタR1の格納値に加算する。これにより、"W[0]*X[0]+W[1]*X[1]"の実部が、累積値DTとしてレジスタR0に保持される。また、"W[0]*X[0]+W[1]*X[1]"の虚部が、累積値DTとしてレジスタR1に保持される。
図10Bは、図5の第1ステップの計算に引き続いて実行される図5の第2ステップに対応するVCMAD命令の実行過程を示している。図10Bの実行過程は、入力データが異なることを除いて図10Aと同様である。第2ステップの実行によって、出力データY[0]の実部がレジスタR0に保持され、Y[0]の虚部がレジスタR1に保持される。
なお、複素積和演算ユニット23が有する加減算器1340〜1343の動作は、実行制御部20から複素積和演算ユニット23に供給される制御信号MAD_FNCL[1:0]及びMAD_FNCR[1:0]によって制御される。図11のテーブルは、図10A及びBに示したVCMAD命令がデコードされたことに応じて実行制御部10から複素積和演算ユニット13に供給される制御信号群の組合せを示している。
本実施の形態にかかるマイクロプロセッサ2も、上述したマイクロプロセッサ1と同様に、複素積和演算の1つの出力データ(例えばY[0])を得るための2つの複素乗算(例えば、W[0]*X[0]及びW[1]*X[1])を並行して行ったうえ、これら2つの乗算結果を加算して1つの出力データを生成する点が特徴である。ただし、マイクロプロセッサ1が2命令で行っていた「2つの複素積和の和の実部及び虚部を求める計算」を1命令で実行できるように、複素積和演算ユニット23の演算ハードウェアの並列度を向上させている。
このような構成によって、マイクロプロセッサ2は、2つの出力データ(例えば、"W[0]*X[0]+W[1]*X[1]"の実部及び虚部)を2つの出力レジスタ(例えばレジスタR0及びR1)に保持できればよい。これに対して、図14A及びBに示した構成のハードウェア並列度を向上させると4つの出力データ(例えば、W[0]*X[0]の実部及び虚部と、W[0]*X[1]の実部及び虚部)を保持する必要がある。これらを比較すると、マイクロプロセッサ2は、アキュムレータに保持すべき積和演算結果のデータ量を削減することができ、スケーリングを回避するために用意すべきレジスタサイズ、レジスタ数を削減することができる利点がある。
なお、図1及び図8には、複素積和演算ユニット13及び23を除く他の処理ユニットを示していないが、マイクロプロセッサ1及び2が他の処理ユニットを有してもよいことはもちろんである。例えば、マイクロプロセッサ1及び2は、浮動小数点演算ユニット、整数演算ユニット、ロード/ストアユニット等を有してもよい。
また、例えば、レジスタR0〜R15のレジスタ長を128ビットとして、複素積和演算ユニット13及び23のハードウェア並列度を2倍とすれば、図5の第1ステップ及び第2ステップを並行して実行することができる。このように、レジスタR0〜R15のレジスタ長を大きくしてデータの並列度を高めると共に、複素積和演算ユニット13及び23のハードウェア並列度をさらに向上させてもよい。
また、発明の実施の形態1及び2では、複素積和演算結果を格納するアキュムレータとして、レジスタファイル12内の汎用レジスタ(レジスタR0〜R15のいずれか)を使用し、複素積和演算命令(VCMADRE命令、VCMADIM命令、VCMAD命令)のオペランドにおいてアキュムレータを明示的に指定するものとして説明した。しかしながら、複素積和演算結果が格納されるアキュムレータは、専ら積和演算結果の格納のために設けられた専用レジスタであってもよい。また、複素積和演算結果が格納されるアキュムレータは、複素積和演算命令のオペランドに明示的に指定されず、予め決定されているものでもよい。
また、発明の実施の形態1及び2では、複素乗算結果のデータ長32ビットに対して、複素積和演算結果を格納するアキュムレータのサイズを64ビット長としたが、64ビットのレジスタの一部のみ(例えば48ビット)を複素乗算結果の格納のために使用しても良い。また、複素乗算結果を格納するアキュムレータのサイズは、複素乗算結果のデータ長の2倍未満であってもよい。例えば、4つの複素乗算結果(各々が32ビット長)を加算した結果の最大データ長は、34ビット長であるから、複素乗算結果を格納するアキュムレータのサイズは、少なくとも34ビット長とすればよい。
また、図3及び9に示した複素積和演算ユニット13及び23の構成が一例に過ぎないことは上述した通りであり、図3及び9は、複素積和演算ユニット13及び23のハードウェア構成を限定するものではない。例えば、加減算器1340及び1341並びに加算器1350における加減算の順序を適宜変更してもよいし、これらを一体のハードウェアとして構成してもよい。
また、発明の実施の形態1及び2では、タップ数m=4の比較的簡易なFIRフィルタ演算の具体例に関して説明した。しかしながら、FIRフィルタのタップ数mをより大きくした場合のFIRフィルタ演算も、上述したVCMADRE命令及びVCMADIM命令の繰り返し実行回数、又はVCMAD命令の繰り返し実行回数を増大させることで、マイクロプロセッサ1又は2により容易に演算可能である。
また、発明の実施の形態1及び2では、X[0]及びW[0]等の複素数データがレジスタR0〜R15のいずれかに格納される際に、レジスタの下位ビット側に実部が格納され、上位ビット側に虚部が格納されるものとして説明した。しかしながら、発明の実施の形態1及び2で説明したマイクロプロセッサ1及び2は、複素数データの格納順序を、上述した{虚部、実部}という格納順序に限定するものではない。すなわち、マイクロプロセッサ1及び2は、{実部、虚部}の順序で格納された複素数データを用いた複素積和演算も実行可能である。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
発明の実施の形態1にかかるマイクロプロセッサのブロック図である。 発明の実施の形態1にかかるマイクロプロセッサが有する複素積和演算ユニットの入出力データを示す概念図である。 発明の実施の形態1にかかるマイクロプロセッサが有する複素積和演算ユニットの構成例を示す図である。 発明の実施の形態1にかかる複素積和演算ユニットが有する加減算器の動作ロジックを示す図である。 複素積和演算の実行手順を説明するための図である。 発明の実施の形態1にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。 発明の実施の形態1にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。 発明の実施の形態1にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。 発明の実施の形態1にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。 発明の実施の形態1にかかるマイクロプロセッサによって複素積和演算を実行する際の制御信号の状態を示すテーブルである。 発明の実施の形態2にかかるマイクロプロセッサのブロック図である。 発明の実施の形態2にかかるマイクロプロセッサが有する複素積和演算ユニットの構成例を示す図である。 発明の実施の形態2にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。 発明の実施の形態2にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。 発明の実施の形態2にかかるマイクロプロセッサによって複素積和演算を実行する際の制御信号の状態を示すテーブルである。 背景技術に関するマイクロプロセッサに複素積和演算を実行させる際の手順を説明するための図である。 背景技術に関するマイクロプロセッサに複素積和演算を実行させる際に使用されるベクトルデータを示す図である。 背景技術に関するマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。 背景技術に関するマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
符号の説明
1、2 マイクロプロセッサ
10、20 実行制御部
11 プログラムカウンタ
12 レジスタファイル
13、23 複素積和演算ユニット
50 命令メモリ
51 データメモリ
52 アドレスバス
53 データバス
1310〜1313 セレクタ
1320〜1327 乗算器
1330〜1337 パイプラインラッチ
1340〜1343 加減算器
1350、1351 加算器
1360、1361 パイプラインラッチ
1370、1371 加算器
R0〜R15 レジスタ

Claims (6)

  1. 複素数の積和演算を指示する複素積和演算命令を含む命令を取得し、当該命令の実行を制御する実行制御部と、
    第1乃至第3のレジスタと、
    前記複素積和演算命令を取得した前記実行制御部による制御に基づいて、前記第1及び第2のレジスタに格納された複素数データを入力して複素演算を実行するとともに、得られた複素演算結果と前記第3のレジスタの格納値とを加算した値によって前記第3のレジスタを上書きする複素積和演算ユニットとを備え、
    前記第1のレジスタは、レジスタ長が少なくとも2m+1ビットであって、それぞれが2m−1ビット長の実部及び2m−1ビット長の虚部からなる2ビット長の第1の複素数データ及び第2の複素数データを格納可能であり、
    前記第2のレジスタは、レジスタ長が少なくとも2m+1ビットであって、それぞれが2m−1ビット長の実部及び2m−1ビット長の虚部からなる2ビット長の第3の複素数データ及び第4の複素数データを格納可能であり、
    前記第3のレジスタは、レジスタ長が少なくとも2+2ビットであり、
    前記複素積和演算ユニットは、
    前記第1及び第3の複素数データの積と前記第2及び第4の複素数データの積との実部どうしの和又は虚部どうしの和を算出し、得られた前記実部どうしの和又は虚部どうしの和を前記第3のレジスタの格納値に加算する、マイクロプロセッサ。
  2. 前記複素積和演算ユニットは、
    (1)前記第1の複素数データの実部又は虚部と前記第3の複素数データの実部とを乗算して、最大2ビット長の乗算結果を出力する第1の乗算部と、
    (2)前記第1の複素数データの虚部又は実部と前記第3の複素数データの虚部とを乗算して、最大2ビット長の乗算結果を出力する第2の乗算部と、
    (3)前記第2の複素数データの実部又は虚部と前記第4の複素数データの実部とを乗算して、最大2ビット長の乗算結果を出力する第3の乗算部と、
    (4)前記第2の複素数データの虚部又は実部と前記第4の複素数データの虚部とを乗算して、最大2ビット長の乗算結果を出力する第4の乗算部と、
    (5)少なくとも前記第1乃至第4の乗算部の4つの出力値を相互に加算又は減算して、1つの加減算結果を出力する第1の加減算部と、
    (6)前記第1の加減算部の出力値と前記第3のレジスタの格納値とを加算し、得られた加算結果を前記第3のレジスタに出力する第1の累積加算部と、
    を有する、請求項1に記載のマイクロプロセッサ。
  3. 前記第1の加減算部は、
    前記第1及び第2の乗算部の出力値を加算又は減算することで、前記第1の複素数と前記第3の複素数との乗算結果の実部又は虚部を出力する第1の加減算器と、
    前記第3及び第4の乗算部の出力値を加算又は減算することで、前記第2の複素数と前記第4の複素数との乗算結果の実部又は虚部を出力する第2の加減算器と、
    前記第1及び第2の加減算器の出力値を加算する第1の加算器と、
    を有する、請求項2に記載のマイクロプロセッサ。
  4. 前記複素積和演算命令は、前記第1乃至第3のレジスタを指定するオペランド含む、請求項1乃至3のいずれか1項に記載のマイクロプロセッサ。
  5. 前記複素積和演算命令は、2つの複素数データの乗算結果の実部の累積加算を指示する実部積和演算命令、及び2つの複素数データの乗算結果の虚部の累積加算を指示する虚部積和演算命令のいずれかであって、
    前記複素積和演算ユニットは、
    前記第1の乗算器に対して、前記第1の複素数データの実部又は虚部を選択的に供給する第1のセレクタ回路と、
    前記第2の乗算器に対して、前記第1の複素数データの実部又は虚部を選択的に供給する第2のセレクタ回路と、
    前記第3の乗算器に対して、前記第2の複素数データの実部又は虚部を選択的に供給する第3のセレクタ回路と、
    前記第4の乗算器に対して、前記第2の複素数データの実部又は虚部を選択的に供給する第4のセレクタ回路とを備え、
    前記実行制御部は、
    前記実部積和演算命令を実行する場合に、前記第1のセレクタ回路に前記第1の複素数の実部を供給させ、前記第2のセレクタ回路に前記第1の複素数の虚部を供給させ、前記第3のセレクタ回路に前記第3の複素数の実部を供給させ、前記第4のセレクタ回路に前記第3の複素数の虚部を供給させ、前記第1及び第2の加減算器に減算処理を実行させ、
    前記虚部積和演算命令を実行する場合に、前記第1のセレクタ回路に前記第1の複素数の虚部を供給させ、前記第2のセレクタ回路に前記第1の複素数の実部を供給させ、前記第3のセレクタ回路に前記第3の複素数の虚部を供給させ、前記第4のセレクタ回路に前記第3の複素数の実部を供給させ、前記第1及び第2の加減算器に加算処理を実行させる、請求項3又は請求項3に従属する請求項4に記載のマイクロプロセッサ。
  6. レジスタ長が少なくとも2+2ビットである第4のレジスタをさらに備え、
    前記第1の乗算部は、前記第1の複素数データの実部と前記第3の複素数データの実部とを乗算し、
    前記第2の乗算部は、前記第1の複素数データの虚部と前記第3の複素数データの虚部とを乗算し、
    前記第3の乗算部は、前記第2の複素数データの実部と前記第4の複素数データの実部とを乗算し、
    前記第3の乗算部は、前記第2の複素数データの虚部と前記第4の複素数データの虚部とを乗算し、
    前記複素積和演算ユニットは、
    (7)前記第1の複素数データの虚部と前記第3の複素数データの実部とを乗算して、最大2ビット長の乗算結果を出力する第5の乗算部と、
    (8)前記第1の複素数データの実部と前記第3の複素数データの虚部とを乗算して、最大2ビット長の乗算結果を出力する第6の乗算部と、
    (9)前記第2の複素数データの虚部と前記第4の複素数データの実部とを乗算して、最大2ビット長の乗算結果を出力する第7の乗算部と、
    (10)前記第2の複素数データの実部と前記第4の複素数データの虚部とを乗算して、最大2ビット長の乗算結果を出力する第8の乗算部と、
    (11)少なくとも前記第5乃至第8の乗算部の4つの出力値を相互に加算し、1つの加減算結果を出力する第2の加減算部と、
    (12)前記第2の加減算部の出力値と前記第4のレジスタの格納値とを加算し、得られた加算結果を前記第4のレジスタに出力する第2の累積加算部と、
    をさらに有する、請求項1乃至4のいずれか1項に記載のマイクロプロセッサ。
JP2007241583A 2007-09-18 2007-09-18 マイクロプロセッサ Pending JP2009075676A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007241583A JP2009075676A (ja) 2007-09-18 2007-09-18 マイクロプロセッサ
US12/232,072 US8271571B2 (en) 2007-09-18 2008-09-10 Microprocessor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007241583A JP2009075676A (ja) 2007-09-18 2007-09-18 マイクロプロセッサ

Publications (1)

Publication Number Publication Date
JP2009075676A true JP2009075676A (ja) 2009-04-09

Family

ID=40455727

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007241583A Pending JP2009075676A (ja) 2007-09-18 2007-09-18 マイクロプロセッサ

Country Status (2)

Country Link
US (1) US8271571B2 (ja)
JP (1) JP2009075676A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015055971A (ja) * 2013-09-11 2015-03-23 富士通株式会社 積和演算回路及び積和演算システム
JP2019511056A (ja) * 2016-04-01 2019-04-18 エイアールエム リミテッド 複素数乗算命令

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120077164A (ko) * 2010-12-30 2012-07-10 삼성전자주식회사 Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
US20140207838A1 (en) * 2011-12-22 2014-07-24 Klaus Danne Method, apparatus and system for execution of a vector calculation instruction
SG11201504834TA (en) 2012-12-18 2015-07-30 Huawei Tech Co Ltd Communications method, system, and apparatus for optical network system
US9384168B2 (en) 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
EP2851786A1 (en) * 2013-09-23 2015-03-25 Telefonaktiebolaget L M Ericsson (publ) Instruction class for digital signal processors
US10089078B2 (en) * 2016-09-23 2018-10-02 Stmicroelectronics S.R.L. Circuit for performing a multiply-and-accumulate operation
CN110892393B (zh) * 2017-04-11 2024-07-05 多伦多大学管理委员会 用于在同态加密下加速安全计算的同态处理单元(hpu)
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US11243765B2 (en) 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10552154B2 (en) * 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US11074073B2 (en) 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10795677B2 (en) 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10664277B2 (en) * 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US10452394B2 (en) * 2017-11-28 2019-10-22 Intel Corporation Apparatus and method for complex multiplication
US10489154B2 (en) * 2017-11-28 2019-11-26 Intel Corporation Apparatus and method for complex multiply and accumulate
US11768681B2 (en) * 2018-01-24 2023-09-26 Intel Corporation Apparatus and method for vector multiply and accumulate of packed bytes
US11409525B2 (en) * 2018-01-24 2022-08-09 Intel Corporation Apparatus and method for vector multiply and accumulate of packed words
US10521226B2 (en) 2018-03-30 2019-12-31 Intel Corporation Efficient implementation of complex vector fused multiply add and complex vector multiply
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US11194585B2 (en) * 2019-03-25 2021-12-07 Flex Logix Technologies, Inc. Multiplier-accumulator circuitry having processing pipelines and methods of operating same
US11474825B2 (en) * 2019-03-27 2022-10-18 Intel Corporation Apparatus and method for controlling complex multiply-accumulate circuitry
US12061910B2 (en) * 2019-12-05 2024-08-13 International Business Machines Corporation Dispatching multiply and accumulate operations based on accumulator register index number

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04190453A (ja) * 1990-11-26 1992-07-08 Fujitsu Ltd 複素数の演算処理方式
JPH10134032A (ja) * 1996-09-04 1998-05-22 Seiko Epson Corp 情報処理回路、マイクロコンピュータ及び電子機器
JPH11306163A (ja) * 1998-04-23 1999-11-05 Nec Corp 積和演算装置
JP2001056808A (ja) * 1999-06-10 2001-02-27 Lucent Technol Inc 行列計算を行うためのプロセッサ素子のパイプライン処理線形アレー
JP2001256038A (ja) * 1999-11-15 2001-09-21 Texas Instr Inc <Ti> 柔軟な乗算ユニットを有するデータ・プロセッサ
US6411979B1 (en) * 1999-06-14 2002-06-25 Agere Systems Guardian Corp. Complex number multiplier circuit
US20060271764A1 (en) * 2005-05-24 2006-11-30 Coresonic Ab Programmable digital signal processor including a clustered SIMD microarchitecture configured to execute complex vector instructions

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6556044B2 (en) * 2001-09-18 2003-04-29 Altera Corporation Programmable logic device including multipliers and configurations thereof to reduce resource utilization
US5953241A (en) * 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US7120783B2 (en) 1999-12-22 2006-10-10 Ubicom, Inc. System and method for reading and writing a thread state in a multithreaded central processing unit
TW501344B (en) * 2001-03-06 2002-09-01 Nat Science Council Complex-valued multiplier-and-accumulator
US7685405B1 (en) * 2005-10-14 2010-03-23 Marvell International Ltd. Programmable architecture for digital communication systems that support vector processing and the associated methodology

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04190453A (ja) * 1990-11-26 1992-07-08 Fujitsu Ltd 複素数の演算処理方式
JPH10134032A (ja) * 1996-09-04 1998-05-22 Seiko Epson Corp 情報処理回路、マイクロコンピュータ及び電子機器
JPH11306163A (ja) * 1998-04-23 1999-11-05 Nec Corp 積和演算装置
JP2001056808A (ja) * 1999-06-10 2001-02-27 Lucent Technol Inc 行列計算を行うためのプロセッサ素子のパイプライン処理線形アレー
US6411979B1 (en) * 1999-06-14 2002-06-25 Agere Systems Guardian Corp. Complex number multiplier circuit
JP2001256038A (ja) * 1999-11-15 2001-09-21 Texas Instr Inc <Ti> 柔軟な乗算ユニットを有するデータ・プロセッサ
US20060271764A1 (en) * 2005-05-24 2006-11-30 Coresonic Ab Programmable digital signal processor including a clustered SIMD microarchitecture configured to execute complex vector instructions

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015055971A (ja) * 2013-09-11 2015-03-23 富士通株式会社 積和演算回路及び積和演算システム
JP2019511056A (ja) * 2016-04-01 2019-04-18 エイアールエム リミテッド 複素数乗算命令

Also Published As

Publication number Publication date
US20090077154A1 (en) 2009-03-19
US8271571B2 (en) 2012-09-18

Similar Documents

Publication Publication Date Title
JP2009075676A (ja) マイクロプロセッサ
JP5619751B2 (ja) Simd積和演算動作を行うための装置及び方法
KR101515311B1 (ko) 승산-승산-누산 명령 수행
CN103999078B (zh) 具有包含用于fir滤波的矢量卷积函数的指令集的矢量处理器
EP2435906B1 (en) Dsp engine with implicit mixed operands
JP2009048532A (ja) マイクロプロセッサ
JP5544240B2 (ja) マルチmacアーキテクチャにおける低電力firフィルタ
JP2007531072A (ja) プログラム可能なプロセッサ及び拡張演算を伴う方法
US20090248769A1 (en) Multiply and accumulate digital filter operations
GB2553783A (en) Vector multiply-add instruction
JP2003296096A (ja) シリアル演算パイプライン、演算装置、算術論理演算回路およびシリアル演算パイプラインによる演算方法
JP2009527035A (ja) マイクロプロセッサにおけるパックされた加減演算
JPS6125188B2 (ja)
JP2683488B2 (ja) 3−1論理演算装置
CN104133748B (zh) 用以在微处理器内组合来自多个寄存器单元的对应半字单元的方法及系统
JP5059508B2 (ja) マイクロプロセッサ
US6675286B1 (en) Multimedia instruction set for wide data paths
JP5794385B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP4482052B2 (ja) 演算装置および演算方法
US20180349097A1 (en) Processor with efficient arithmetic units
GB2396708A (en) Arithmetic logic unit with feedback to a first adder via registers and output via a second adder.
GB2523805A (en) Data processing apparatus and method for performing vector scan operation
US20090265529A1 (en) Processor apparatus and method of processing multiple data by single instructions
CN113485751A (zh) 执行伽罗瓦域乘法的方法、运算单元和电子装置
WO2020090025A1 (ja) 演算処理装置および演算処理装置の制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100312

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120705

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120710

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121106