JP2012505455A - Simd積和演算動作を行うための装置及び方法 - Google Patents

Simd積和演算動作を行うための装置及び方法 Download PDF

Info

Publication number
JP2012505455A
JP2012505455A JP2011530543A JP2011530543A JP2012505455A JP 2012505455 A JP2012505455 A JP 2012505455A JP 2011530543 A JP2011530543 A JP 2011530543A JP 2011530543 A JP2011530543 A JP 2011530543A JP 2012505455 A JP2012505455 A JP 2012505455A
Authority
JP
Japan
Prior art keywords
product
sum operation
data elements
data processing
vector
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.)
Granted
Application number
JP2011530543A
Other languages
English (en)
Other versions
JP5619751B2 (ja
Inventor
ムラデン・ワイルダー
ドミニク・ヒューゴ・サイムス
リチャード・エドワード・ブルース
Original Assignee
アーム・リミテッド
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 アーム・リミテッド filed Critical アーム・リミテッド
Publication of JP2012505455A publication Critical patent/JP2012505455A/ja
Application granted granted Critical
Publication of JP5619751B2 publication Critical patent/JP5619751B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8038Associative processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8076Details on data register access
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

SIMD積和演算動作を行うための装置及び方法は、制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うSIMDデータ処理回路を含む。命令デコーダ回路は、SIMDデータ処理回路と結合され、プログラム命令に応答して要求される制御信号を生成する。命令デコーダ回路は、入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復を示すスカラー値を有する単一の命令(本明細書では、繰返し積和演算命令と呼ぶ)に応答して、SIMD処理回路を制御する制御信号を生成し、これらの制御信号に応答して、SIMDデータ処理回路は積和演算プロセスの複数の反復を行い、各反復は、N個の積和演算データ要素をもたらすために並列なN個の積和演算動作の遂行を含む。各反復について、SIMDデータ処理回路は、前記第1ベクトルからN個の入力データ要素と、N個の入力データ要素の各々と乗算されるべき第2ベクトルから単一係数データ要素とを求める。積和演算プロセスの最後の反復においてもたらされたN個の積和演算データ要素は、次いで、N個の積和演算結果をもたらすために用いられる。この機構は、例えばFIRフィルタプロセスに要求されるような、SIMD積和演算動作を行うための特にエネルギー効率の良い機構を提供する。

Description

本発明は、SIMD(Single Instruction Multiple Data(単一命令多重データ))積和演算(MAC)動作を行うための装置及び方法に関する。
多数の個別のデータ要素に対して特定のデータ処理動作を行うことが必要なときに、こうした動作の遂行を加速させるための1つの公知の手法は、SIMD(単一命令多重データ)手法を採用することである。SIMD手法によれば、多数のデータ要素がレジスタ内に並んで配置され、次いで、これらのデータ要素に対して動作が並列に行われる。
SIMD手法から恩恵を受けることができる1つのタイプの動作は、A+B×C、又はA−B×Cの形態をとることができる積和演算動作である。乗算演算B×Cは、典型的にはBとCの異なる値について多数回行われ、各乗算結果が次いで、実行中の累算値Aから加算され(又は減算される)。
単一の積和演算結果を生成するのに要求される動作を考えると、複数の個別の乗算動作が要求され、SIMDデータ処理回路を用いることによって、複数のこれらの要求される乗算を並列に行って積和演算動作のスループットを増加させることができることが、上記の説明から理解されるであろう。
しかしながら、多数の積和演算結果をもたらすために多数の個別の積和演算動作が行われる必要があるが、そこでは各積和演算動作に用いられる入力データの間に大きな重複がある、或るタイプの動作も存在する。多数の積和演算動作が要求される場合の動作の1つの特定の例は、有限インパルス応答(FIR)フィルタ動作であり、これは、デジタル信号プロセッサ(DSP)において実装される標準的な信号処理タスクである。FIRフィルタ動作は、通信、音声処理、映像処理、又は画像処理のような多くの信号処理用途に通例用いられる。
多くの現代のデジタル信号プロセッサ、並びに、汎用マイクロプロセッサは、FIRフィルタ動作のような動作に存在するデータ・レベルの並列性を活用するためにSIMDデータ処理回路を用いる。しかしながら、重要な問題は、データ処理装置のSIMD機能を活用するために、どのようにしてFIRフィルタ動作を効果的にベクトル化するかである。
文献「Efficient Vectorization of the FIR Filter」、A Shahbahrami他著、 Computer Engineering Laboratory、Delft University of Technology、オランダ(インターネット上でhttp://ce.et.tudelft.nl/publicationfiles/1090_509_shahbahrami_prorisc2005.pdfで見られる)は、FIRフィルタ動作をベクトル化するための種々の技術を要約している。第1の技術によれば、FIRフィルタは、内部ループが単一の出力の幾つかの項を並列に計算するように、内部ループをベクトル化することによってベクトル化される。したがって、こうした手法によって、単一の積和演算結果を形成するために要求される多数の乗算動作が、SIMDデータ処理回路内で単一の反復の間に並列に行われ、したがって、各積和演算結果が順次に求められ、処理回路のSIMD機能は、各積和演算結果の計算をスピードアップするのに用いられる。説明された代替的な技術によれば、FIRフィルタの外部ループは、内部ループが幾つかの出力の1つの項を並列に計算するようにベクトル化される。したがって、この技術によれば、各反復において、要求される積和演算結果の各々に対して1つの積和演算計算が行われ、それにより、すべての要求される積和演算動作が並列に行われ、積和演算動作の各々についての最後の積和演算結果がプロセスの最後の反復の後で入手可能となる。文献はまた、内部ループと外部ループが同時にベクトル化される第3の機構を説明する。
内部ループをベクトル化するための1つの技術は、文献「AltiVec (TM) Technology: A second Generation SIMD Microprocessor Architecture」、M Phillip著、Motorola Inc、テキサス州オースティン(インターネット上でhttp://www.hotchips.org/archives/hcl0/2_Mon/HC10.S5/HC10.5.3.pdfで見られる)において説明され、そこではsum−across型命令が用いられる。この文書は、AltiVec乗算命令を用いて内部又は外部FIRループのいずれかをベクトル化するための技術を説明する。しかしながら、外部ループ技術は、データ並べ替え機能を同時に行わないベクトル乗算(又は積和演算)動作を用いる。
刊行物「A Programmable DSP for Low−Power, Low−Complexity Baseband Processing」、H Naess著、Norwegian University of Science and Technology、Department of Electronics and Telecommunications(インターネット上でhttp://www.diva−portal.org/ntnu/abstract.xsql?dbid=1095で見られる)は、繰返されるベクトル累算及びシフト動作を生み出す、外部ループをベクトル化するための技術を説明する。特に、この刊行物の図9は、2つのベクトル入力と内部シフトレジスタとを用いる動作を示す。この動作は、繰返しループ内での多数の命令の発行を通じて多数回実行される(例えば、この文書の表10において説明されるように)。内部シフトレジスタの使用はデータの幾つかの内部並べ替えを可能にするが、要求される計算を行うために繰返しループを通じて多数回反復することが必要であり、繰返しループが繰返されるたびに、命令がデコードされ実行される必要があり、新しいデータ値がメモリからアクセスされる必要がある。
前述の従来技術は、一般に、FIR計算の遂行を改善することを目的としている。しかしながら、別の大きな問題は電力消費である。本発明の発明者らは、FIR動作を行うときに要求されるような一連のMAC動作を行うときに、各反復の前にデータ要素を適切に順序付けるために要求される、3つの重要なアクティビティ、すなわち命令フェッチ及びデコード、積和演算計算、及びベクトルデータ並べ替え計算が存在することに気づいた。さらに、発明者らは、命令フェッチ及びデコードとベクトルデータ並べ替え計算に多大な電力が、例えば、総消費電力の25〜40%が消費されていたことに注目した。
したがって、公知の従来技術と比べたときに電力消費を減少させるSIMD積和演算動作を行うための改善された技術を提供することが望ましいであろう。
第1の態様から見ると、本発明は、制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うSIMDデータ処理回路と、前記SIMDデータ処理回路と結合されプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、を備えるデータ処理装置であって、前記命令デコーダ回路が、入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する繰返し積和演算(繰返しMAC)命令に応答して、前記SIMDデータ処理回路を制御する制御信号を生成し、積和演算プロセスの前記複数の反復を行い、積和演算プロセスの各反復は、N個の積和演算データ要素をもたらすためにN個の積和演算動作を並列に行うことを含み、各反復について、前記第1ベクトルからのN個の入力データ要素と、N個の積和演算動作の間にN個の入力データ要素の各々と乗算されるべき前記第2ベクトルからの単一係数データ要素とを求め、積和演算プロセスの最後の反復においてもたらされたN個の積和演算データ要素から導出されたN個の積和演算結果を出力する、データ処理装置を提供する。
本発明によれば、入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する、単一の命令が提供される(本明細書では、繰返しMAC命令と呼ぶ)。命令デコーダ回路は、こうした繰返しMAC命令に応答して、積和演算プロセスの複数の反復を行うためにSIMDデータ処理回路を制御するのに用いられる制御信号を生成し、各反復は、並列なN個の積和演算動作の遂行に関与する。各反復の間に、SIMDデータ処理回路は、第1ベクトルからN個の入力データ要素と、第2ベクトルから単一係数データ要素とを求める。複数の反復の遂行後に、SIMDデータ処理回路は、次いで、N個の積和演算結果を出力する。
したがって、本発明を用いて、単一の命令は、複数の積和演算結果を直接もたらすために、該命令の入力オペランドとして提供されたスカラー値によって求められる積和演算プロセスの複数の反復を、SIMDデータ処理回路に行わせるのに用いることができる。すべての指定された反復に対して要求されるすべてのデータ要素は、命令の入力オペランドとして提供される第1及び第2ベクトルから直接導出することができるので、ループを通る度にメモリへのアクセスを伴うプログラム・ループの実行を多数回要求する公知の従来技術と比べたときに、エネルギー消費の大幅な減少を実現することができる。特に、本発明は、複数の積和演算結果を生成するために、さらなるレジスタ又は命令の読出しなしに実行することができる単一の命令を提供し、公知の従来技術と比べたときにエネルギー消費を大幅に節約する。
本発明の繰返しMAC命令は、種々の目的のために用いられてもよい。しかしながら、一実施形態において、繰返しMAC命令は、FIRフィルタ動作を行うために用いられ、N個の積和演算結果は、N個のFIR結果からもたらされる。したがって、こうした本発明の実施形態によれば、単一の命令は、該単一の命令から複数のFIR結果を直接生成するために、SIMDデータ処理回路に積和演算プロセスの多数の反復を行わせるのに用いることができる。こうした手法は、こうしたFIR結果を生成するための特にエネルギー効率の良い機構を提供する。
SIMDデータ処理回路は、種々の方法で配置することができる。しかしながら、一実施形態において、SIMDデータ処理回路は、各反復についてのN個の入力データ要素と単一係数データ要素を求めるための状態機械を有する。1つの特定の実施形態において、SIMDデータ処理回路に提供される制御信号の1つは、要求される反復数Mを識別し、状態機械は、行われている反復に応じて変化される内部制御信号を生成し、各反復についての入力データ要素と単一係数データ要素を選択するために用いられる。
1つの特定の実施形態において、第1ベクトルにおける入力データ要素の数は、少なくともN+M−1であり、状態機械は、反復P−1に用いられたN個のデータ要素について、シフト動作を行わせることによって、反復PについてのN個の入力データ要素を求める。第1の反復が行われるとき、最初のN個の入力データ要素が選択される。
一実施形態において、状態機械は、各反復についての前記第2ベクトルから異なる係数データ要素を求める。しかしながら、幾つかの実施形態において、係数データ要素は、1以上の反復について同じに保たれる。これは、例えば、多数の個別の積和演算プロセスが単一の命令に応答して行われることを可能にすることができ、最後の反復後に、N個の積和演算結果が、各積和演算プロセスについてもたらされる。代替的に、係数データ要素を反復の度に変化させることによって、しかし入力データ要素を1以上の反復について同じに保つことによって、単一の命令に応答して多数の個別の積和演算プロセスが行われてもよい。
一実施形態において、繰返しMAC命令はまた、入力オペランドとして最初の積和演算データ要素のベクトルをも有する。代替的な実施形態において、こうした最初の積和演算データ要素のベクトルは提供されなくてもよく、代わりに、プロセスの開始時に累算器がゼロに初期化される。
本発明によれば、繰返しMAC命令は、その入力オペランドの1つとして、要求される複数の反復を示すスカラー値を指定するので、繰返しMAC命令に応答して要求される計算を行うためにSIMDデータ処理回路によってとられるクロックサイクルの数は予め定められず、繰返しMAC命令の任意の特定のインスタンスについて指定されたスカラー値に応じて大きく変化する。典型的には、データ処理装置の種々の他の構成要素のアクティビティと繰返しMAC命令に応答してSIMDデータ処理回路によって行われる計算との間に、或る種の依存が存在する。例えば、SIMDデータ処理回路による実行のためのプログラム・メモリからフェッチされた後続の命令は、それが繰返しMAC命令に対して要求される計算を終えるまで、SIMDデータ処理回路によって実行されることができない。さらに、データ処理装置の他の構成要素による実行のためにフェッチされた命令もまた、例えば、これらの命令が入力オペランドとしてN個の積和演算結果のいずれかを指定する場合に、SIMDデータ処理回路が繰返しMAC命令に応答して要求される計算を完了するまで、実行されることができない可能性がある。
こうした問題に起因する不必要な電力消費を軽減するために、一実施形態において、状態機械が、スカラー値から反復数Mを求め、複数の反復のうちの少なくとも1つが実行されている間、データ処理装置の1つ又は複数の構成要素にストール信号をアサートする。1つの特定の例において、ストール信号は、ストール信号がアサートされる間、命令フェッチを一時停止するのに用いられる。
ストール信号がアサートされる時間の長さは、特定の構成要素のパイプライン深さなどのような特徴を考慮に入れて、特定の実施形態に依存する。一実施形態において、1つだけを除くすべての複数の反復の間にストール信号がアサートされ、命令フェッチ・アクティビティにおいてあらゆる不必要な電力が消費されるのを回避することによって、大幅な電力の節約がもたらされる。
一実施形態において、各クロックサイクルで1つの反復が完了されるが、各クロックサイクルが1つの反復が完了されるという要件は存在せず、代替的な実施形態において、各反復の完了の間に1以上のクロックサイクルが存在してもよいことが理解されるであろう。
一実施形態において、データ処理装置は、データ要素を格納するためのSIMDレジスタ・バンクをさらに備え、SIMDデータ処理回路は、積和演算プロセスの前記複数の反復を行う前に、SIMDレジスタ・バンクのレジスタから前記第1及び第2ベクトルにアクセスし、積和演算プロセスの前記複数の反復の遂行の間、第1及び第2ベクトルに関してのSIMDレジスタ・バンクへのさらなるアクセスは要求されない。積和演算プロセスの複数の反復の遂行の間に、SIMDレジスタ・バンクにアクセスする必要性を回避することによって、大幅な電力の節約が実現される。
1つの特定の実施形態において、入力データ要素の第1ベクトルは、Nの倍数である多数の入力データ要素を有し、SIMDデータ処理回路は、SIMDレジスタ・バンクの多数のレジスタにアクセスすることによって前記入力データ要素にアクセスし、前記多数のレジスタの各々はN個の入力データ要素を含む。一実施形態において、係数データ要素の第2ベクトルは、N以下の多数の係数データ要素を有し、これらの係数データ要素は、SIMDレジスタ・バンクの1つのレジスタからアクセスされる。しかしながら、代替的な実施形態において、係数データ要素の第2ベクトルは、Nの倍数である多数の係数データ要素を有してもよく、SIMDデータ処理回路は、SIMDレジスタ・バンクの多数のレジスタにアクセスすることによって前記係数データ要素にアクセスする。
一実施形態において、データ処理装置は、N個の積和演算データ要素を格納するための積和演算レジスタをさらに備える。一実施形態において、この積和演算レジスタは、SIMDレジスタ・バンク内の1つ又は複数のレジスタによって提供されてもよいが、代替的な実施形態において、積和演算レジスタは、SIMDレジスタ・バンクとは別に提供される。
一実施形態において、入力データ要素の各々はXビットを備え、係数データ要素の各々はYビットを備え、積和演算レジスタに格納される各積和演算データ要素は、少なくともX+Yビットのサイズである。積和演算レジスタは、N個の積和演算データ要素を格納するので、積和演算レジスタは、SIMDレジスタ・バンク内の入力データ要素又は係数データ要素を格納するのに用いられるレジスタよりも広いものとなる必要があることが理解されるであろう。XとYは、異なるものとすることができるが、一実施形態において、XとYは、入力データ要素と係数データ要素が同じサイズとなるように、同じにされる。
各積和演算データ要素は、正確にX+Yビットのサイズであってもよいが、一実施形態において、積和演算レジスタは、積和演算データ要素を拡張形式で格納し、拡張形式は、オーバーフローを求めるのに用いられる付加的なビットを含む。したがって、N個の積和演算結果が、積和演算プロセスの最後の反復においてもたらされたN個の積和演算データ要素から導出されるとき、付加的なビットは、オーバーフローが発生した状況を検出し、且つ該当する積和演算データ要素を適宜修正するために考慮に入れることができる。N個の積和演算結果は、多くの方法で拡張形式から導出することができる。一実施形態において、拡張形式要素は、結果要素の範囲外の値がそれらの最も近い範囲内の値によって置き換えられるように、結果要素のサイズまで飽和される。別の実施形態において、結果要素は、拡張形式要素の選択された部分を取り、残りのビットを捨てることによって形成される。他の実施形態は、両方を行って、拡張形式要素の選択された部分を飽和させてもよい。
一実施形態において、入力データ要素と係数データ要素は実数であるが、他の実施形態において、入力データ要素と係数データ要素とのうちの少なくとも1つは、実部と虚部を備える複素数である。1つのこうした複素数の実施形態において、積和演算プロセスの各反復は、N個の複素積和演算データ要素をもたらすためにN個の複素積和演算動作を並列に行うことを含み、N個の積和演算結果の出力は複素数である。
一実施形態において、入力データ要素と係数データ要素とのうちの1つのみが複素数となる。例えば、入力データ要素は複素数であってもよく、一方、係数データ要素は実数である。1つのこうした実施形態において、係数データ要素は、複素積和演算動作を行う前に複素形式に変換されてもよい。
別の実施形態において、入力データ要素と係数データ要素との両方が、実部と虚部を備える複素数である。
一実施形態において、各複素積和演算動作は、対応する複素積和演算データ要素の実部と虚部をもたらすために、一連の乗算、加算及び減算動作の遂行を含む。
一実施形態において、係数データ要素は複素数であり、複素係数データ要素は、N個の複素積和演算動作が行われる前に共役にされてもよい。典型的には、これは、複素係数データ要素の虚部を無効にすることに関係する。こうした共役を行う能力は、積和演算プロセスの複数の反復の間に複素数が取り扱われる方法での融通性を提供することができる。こうした共役を指定することができる種々の方法があるが、一実施形態において、繰返しMAC命令の非共役変形と共役変形との両方を提供することができる。こうした共役繰返しMAC命令に応答して、命令デコーダ回路は、SIMDデータ処理回路にN個の複素積和演算動作を行う前に複素係数データ要素の虚部を無効にさせる、付加的な制御信号を生成するように配置される。
一実施形態において、積和演算動作は、各乗算結果を実行中の累算値に加算されるようにしてもよいが、代替的な実施形態において、積和演算動作は、乗算減算動作を形成してもよく、各乗算結果は、実行中の累算値から減算される。1つの特定の実施形態において、積和演算プロセスの複数の反復を生じさせ、その間、その積和演算動作が、実行中の累算値に乗算結果を加算させるようにする、繰返しMAC命令は、その後に、積和演算プロセスの複数の反復を行わせる、さらなる繰返しMAC命令が続いてもよく、そこでこのときには、行われた積和演算動作は、乗算結果を実行中の累算値から減算させるようにする。こうした命令の組合せは、例えば複素数に対する動作を行うときに有用となり得る。
一実施形態において、命令デコーダ回路によって生成された制御信号の1つは、丸めが要求されるかどうかを指定し、丸めが要求される場合、状態機械は、前記複数の反復のうちの1つにおいて行われる、例えば、前記最後の反復において、丸め増分を各積和演算動作の中に導入させるように配置される。したがって、繰返し積和演算命令は、丸めが要求されることを指定してもよく、状態機械は、こうした場合において、最後の反復を除くすべてを丸めなしに進めるように配置され、丸め増分については、要求される丸めを実施するために、最後の反復において行われた各積和演算動作の中に導入される。一例として入力データ要素と係数データ要素との各々が16ビットの長さである状況を考えると、もたらされた積和演算データ要素は32ビットのサイズとなるであろう。丸めが要求されない場合、32ビットの全結果が出力されるであろう。しかしながら、丸めが要求される場合、最上位の16ビットが結果として出力される必要があるが、結果に直接含められない最下位の16ビットを考慮に入れるために行われた丸め動作を伴う。要求される丸めを行うために、丸め増分は、ビット位置15で導入される(32ビット数は、ビット位置0〜31によって与えられ、ビット位置31は最上位のビットであると仮定する)。丸めが繰返しMAC命令によって指定されるとき、状態機械は、丸めプロセスが最後の積和演算結果を形成するのに用いられる最後の積和演算データ要素にのみ適用されることを保証するために、丸めが最後の反復の間でのみ適用されることを保証する。
しかしながら、上記で説明された実施形態において、丸め増分は最後の反復の間に導入されるが、代替的な実施形態において、丸め増分は、任意の1つの反復に導入することができ、それにより、丸めが最後の反復まで残される必要がない。
一実施形態において、命令デコーダ回路によって生成される制御信号の1つは、もたらされるべき積和演算データ要素が飽和する又は飽和しない、のいずれであるかを指定し、SIMDデータ処理回路内の累算回路は、前記制御信号に依存するように構成される。したがって、本発明の実施形態において、繰返しMAC命令の飽和する変形及び飽和しない変形を指定することができる。
スカラー値の選択に課される制約は、実装に依存するものとなるが、一実施形態において、スカラー値はN以下となるように制約される。
こうした実施形態において、要求される反復数がN以下であると仮定すると、単一の繰返しMAC命令を介して、N個の積和演算結果をもたらすために積和演算プロセスの複数の反復を行うことが可能であり、これらの積和演算結果は、必要とされる実際の最後の結果を表す。しかしながら、N個より多い反復が要求される場合、これは、一連の繰返しMAC命令の使用を通じて達成することができ、後続の各繰返しMAC命令は、直前の繰返しMAC命令からの積和演算結果を入力として取り上げる。したがって、一実施形態において、N+Q反復が要求される場合(ここでQはN以下である)、第1の繰返しMAC命令は、N個の反復を示すスカラー値を有し、後続するさらなる繰返しMAC命令は、Q回の反復を示すスカラー値を有し、最初の積和演算データ要素のベクトルとして第1の繰返しMAC命令に応答してSIMDデータ処理回路によって生成されたN個の積和演算結果を識別する。
一実施形態において、繰返しMAC命令によって指定される前記スカラー値が、行うことができる反復の最大数(典型的には第2ベクトルにおける係数データ要素の数)よりも大きい場合、スカラー値は前記最大数と等しく設定され、前記SIMDデータ処理回路は前記積和演算プロセスの前記最大数の反復を行う。
一実施形態において、命令デコーダ回路は、一連の繰返しMAC命令に応答して、一連の積和演算段階を行うように前記SIMDデータ処理回路を制御する制御信号を生成し、各積和演算段階は、前記積和演算プロセスの前記複数の反復を行い、少なくとも1つの積和演算段階は、前の積和演算段階によって生成されたN個の積和演算結果を入力として用いる。こうした手法は、種々の理由のため、例えば要求される反復数はNを上回ることから用いることができるが、1つの特定の実施形態において、一連の積和演算段階は、複素数に対して繰返しMAC動作を行うために用いられる。こうした状況において、入力データ要素と係数データ要素との両方が実部と虚部を含むことになり、要求される実数及び虚数積和演算結果をもたらすために4つの積和演算段階が要求される。
一連の積和演算段階が行われる必要がある一実施形態において、命令デコーダ回路は、単一の繰返しMAC命令に応答して、少なくとも2つの積和演算段階を行うために前記SIMDデータ処理回路を制御する制御信号を生成するように配置することができ、各積和演算段階は、前記積和演算プロセスの前記複数の反復を行い、各積和演算段階に対して要求される入力データ要素及び係数データ要素は、第1及び第2ベクトルから求められる。したがって、単一の繰返しMAC命令に応答して、多数の積和演算段階を並列に実行することができ、1つの特定の実施形態において、2つの積和演算段階が並列に行われることが可能である。これは、入力データ要素又は係数データ要素のいずれかが2つ以上の段階に対して再び使用される場合に有用である。なぜなら、これらのデータ要素がレジスタ・バンク/メモリから一度だけアクセスされることを必要とし、それにより、さらに改善されたエネルギーの節約をもたらすことを意味するからである。
1つの特定の実施形態において、入力データ要素は、2つの積和演算段階の間で再び使用され、1つの段階に対する各反復には、同じN個の入力データ要素を用いて、他の段階のカウンターパートの反復が後続する。2つの段階の各々に対して異なる係数データ要素が用いられるように各反復で係数データ要素は変化される。1つの特定の実施形態において、要求された係数データ要素を、N個の係数データ要素を含むSIMDレジスタの内容によって提供することができるように、スカラー値Mは、N/2以下となるように制約される。しかしながら、代替的に、このMに対する制約は、1以上のSIMDレジスタの内容を用いて、係数データ要素の第2ベクトルを提供することによって除去することができる。
第2の態様から見ると、本発明は、制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うSIMDデータ処理回路と、前記SIMDデータ処理回路と結合されプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、を用いてデータを処理する方法を提供し、前記方法は、制御信号を生成するために入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する繰返し積和演算(繰返しMAC)命令をデコードするステップと、積和演算結果をもたらすために前記SIMDデータ処理回路を前記制御信号で制御するステップと、を含み、積和演算結果は以下のステップによってもたらされる:積和演算プロセスの前記複数の反復を行うステップであって、積和演算プロセスの各反復が、N個の積和演算データ要素をもたらすためにN個の積和演算動作を並列に行うことを含むステップと、各反復について、前記第1ベクトルからN個の入力データ要素と、N個の積和演算動作の間に該N個の入力データ要素の各々と乗算されるべき単一係数データ要素を前記第2ベクトルから求めるステップと、積和演算プロセスの最後の反復においてもたらされたN個の積和演算データ要素から導出されたN個の積和演算結果を出力するステップ。
第3の態様から見ると、本発明は、データ処理装置の仮想機械実装を提供し、仮想機械実装は、入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する繰返し積和演算(繰返しMAC)命令に応答して、以下のステップによって、によって積和演算結果をもたらす:積和演算プロセスの前記複数の反復を行うステップであって、積和演算プロセスの各反復は、N個の積和演算データ要素をもたらすためにN個の積和演算動作を並列に行うことを含むステップと、各反復について、前記第1ベクトルからN個の入力データ要素と、前記第2ベクトルから、N個の積和演算動作の間に該N個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、積和演算プロセスの最後の反復においてもたらされたN個の積和演算データ要素から導出されたN個の積和演算結果を出力するステップ。
第4の態様から見ると、本発明は、制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うためのSIMDデータ処理手段と、プログラム命令に応答して前記制御信号を生成するための前記SIMDデータ処理手段と結合された命令デコーダ手段とを備える、データ処理装置を提供し、前記命令デコーダ手段は、入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する繰返し積和演算(繰返しMAC)命令に応答して、前記SIMDデータ処理手段を制御する制御信号を生成し、以下のステップにより、積和演算結果をもたらす:積和演算プロセスの前記複数の反復を行うステップであって、積和演算プロセスの各反復が、N個の積和演算データ要素をもたらすためにN個の積和演算動作を並列に行うことを含むステップと、各反復について、前記第1ベクトルからN個の入力データ要素と、前記第2ベクトルから、N個の積和演算動作の間に該N個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、積和演算プロセスの最後の反復においてもたらされたN個の積和演算データ要素から導出されたN個の積和演算結果を出力するステップ。
本発明は、単なる例として、付属の図面において例示説明されるそれらの実施形態を参照しながらさらに説明される。
本発明の一実施形態に係る繰返し積和演算命令に応答してSIMDデータ処理回路によって行われる積和演算プロセスの反復を概略的に例示説明する図である。 本発明の一実施形態に係る繰返し積和演算命令に応答してSIMDデータ処理回路によって行われる積和演算プロセスの反復を概略的に例示説明する図である。 本発明の実施形態の技術が採用され得るデータ処理装置を概略的に例示説明するブロック図である。 本発明の一実施形態のSIMD MAC回路をより詳細に例示説明する図である。 図3に示される状態機械の動作を例示説明する状態図である。 図3の実施形態に係る生成された種々の信号を例示説明するタイミング図である。 本発明の一実施形態に係る各反復において行われた積和演算プロセスを概略的に例示説明する図である。 本発明の一実施形態に係る種々の反復についてのN個の入力データ要素が入力データ要素の第1ベクトルからどのようにして導出されるかを概略的に例示説明する図である。 本発明の一実施形態に係る各反復に用いられる係数のベクトルが係数データ要素の第2ベクトルからどのようにして導出されるかを概略的に例示説明する図である。 本発明の実施形態の一連の繰返しMAC命令が複素数に対してFIRフィルタ動作を行うためにどのようにして用いられてもよいかを概略的に例示説明する図である。 SIMD MAC回路が単一の繰返しMAC命令に応答して2つの個別の積和演算段階を並列に行うことができる、図3に示された本発明の代替的な実施形態を例示説明する図である。 図10の回路のタイミング図である。 本発明の実施形態の繰返しMAC命令を用いてプログラムコードを実行するための仮想機械実装を概略的に例示説明する図である。
本発明の実施形態によれば、入力オペランドとして入力データ要素の第1ベクトル(vd)、係数データ要素の第2ベクトル(vc)、及び要求される複数の反復Mを示すスカラー値を取り上げる、繰返し積和演算(繰返しMAC)命令が提供される。随意的に、繰返しMAC命令はまた、入力オペランドとして最初の積和演算データ要素のベクトル(本明細書では最初の累算データ要素とも呼ばれる)を取り上げてもよい。
この命令が命令デコーダ回路によってデコードされるとき、次式によって与えられるベクトル累算器出力をもたらすためにSIMDデータ処理回路を制御するのに用いられる制御信号が生成される。
ベクトルにおけるすべての「i」に対して、
vacc[i]=vc[0]vd[i]+....+vc[M−1]vd[i+M−1]
最初の積和演算データ要素のベクトルが指定される場合、この式は、以下のようになる。
ベクトルにおけるすべての「i」に対して、
vacc[i]=vacc[i]+vc[0]vd[i]+....+vc[M−1]vd[i+M−l]
SIMDデータ処理回路は、並列処理のN個のレーンを提供するものとして見ることができ、一実施形態において、上記の式における変数「i」は、0からN−1までの間のすべての値をとる。したがって、図1A及び図1Bに例示説明されるように、SIMDデータ処理回路は、N個の積和演算結果を含むベクトル累算器出力10をもたらし、これらのN個の積和演算結果は、図1A又は図1Bに示されたMの反復の遂行後にもたらされる。図1Aは、最初の積和演算データ要素のベクトルが指定されない場合に行われる積和演算プロセスの反復を例示説明し、図1Bは、最初の積和演算データ要素のベクトルが指定される場合に行われる積和演算プロセスの反復を例示説明する。
図1A及び図1Bにおいて、および実に先述の式において、vacc、vc、又はvdの後の角括弧の数字は、演算されているこれらのベクトルの特定のデータ要素を示すことに注意されたい。したがって、図1A又は図1Bからはっきり分かるように、第1の反復の間、係数のベクトルvcからの第1係数データ要素は、並列処理のN個のレーンのすべてにおいて用いられ、各レーンは、第1入力データ要素から始めて、入力データ要素のベクトルvdからの異なる入力データ要素を取り上げる。反復2において、すべてのレーンにわたって次の係数データ要素が用いられ、用いられる入力データ要素のベクトルは、第1の反復において用いられるものと類似しているが、1つのデータ要素位置だけシフトされる。各反復の間で係数データ要素と入力データ要素が変化される様式は、M番目の反復によって、用いられている係数データ要素と入力データ要素は、図1A又は図1Bの右側の列に示されるものとなるように、同じである。
ベクトルvacc、vc、及びvdにおけるデータ要素は、実数又は複素数とすることができる。したがって、各反復は、実数又は複素積和演算動作を行うことができ、M番目の反復は、N個の実数又は複素結果をもたらす。複素積和演算動作が行われる例を考えると、図1A及び図1Bのボックスにおける乗算の各々は、対応する複素乗算結果データ要素の実部と虚部をもたらすために一連の乗算、加算及び減算動作の遂行が含まれる。特に、vc(k)vd(I)の一般的な場合を考えると、以下の計算が行われる。
実部乗算結果=[vdR(I)vcR(k)]−[vdI(I)vcI(k)]
虚部乗算結果=[vdR(I)vcI(k)]+[vdI(I)vcR(k)]
(式中、「R」は実数成分を表し、「I」は虚数成分を表す)。
実数及び虚数乗算結果は、次いで、前の実数及び虚数累算結果と累算される。
上記の例においては、入力データ要素と係数データ要素との両方が複素数であるが、代替的な実施形態においてこれらのうちの1つのみが、入力ベクトルにおいて複素数として提供されてもよい。例えば、入力データ要素は、複素数として提供されてもよいが、係数データ要素は、実数として提供されてもよい。
一実施形態において、こうした状況は、前述の複素実施形態の特別なケースとして取り扱われ、式中、vd及びvaccベクトルにおけるデータ要素は複素数であり、一方、vcにおける係数データ要素は実数である。この動作を行うために、実数vc要素は、以下のように複素数に内部的に変換することができる。
internal_vcR[k]=vc[k]
internal_vcI[k]=0
次いで、前述のように複素積和演算動作を行うことができる。
先に述べたように、本発明の実施形態によれば、図1A又は図1Bにおいて例示説明されたすべての動作は、単一の繰返しMAC命令に応答してSIMDデータ処理回路によって行うことができ、したがって、N個の積和演算結果10は、すべて単一の命令に応答してもたらされる。さらに、本発明の実施形態において、すべての要求された入力データ要素と係数データ要素は、図1A又は図1Bに示された計算が行われる前に、SIMDレジスタ・バンクからSIMDデータ処理回路の内部レジスタの中に読み出され、したがって、図1A又は図1Bにおいて例示説明された計算の遂行の間にさらにSIMDレジスタ・バンクにアクセスするあらゆる必要性を回避する。こうした機能を可能にするために、入力データ要素の第1ベクトルは、少なくともN+M−1のデータ要素を含み、係数データ要素の第2ベクトルは、少なくともM個の係数データ要素を含む。1つの特定の実施形態において、スカラー値Mは、N以下となるように制約され、上記の要件は、入力データ要素の第1ベクトルを形成するために2つのN−要素SIMDレジスタの内容を提供することによって、及び、係数データ要素の第2ベクトルを提供するために1つのN要素SIMDレジスタの内容を提供することによって満たされる。
繰返しMAC命令に応答して行われる動作は、種々の状況に有用であり得るが、それらはFIRフィルタ動作を行うための特にエネルギー効率の良い機構を提供し、ベクトル累算器出力10におけるM個の積和演算結果の各々は、FIR結果を形成する。
以下のCコードは、繰返しMAC機能的モデルの多数の変形の各々についての、標準ベクトル抽出及びスカラー乗算によるベクトルの観点で、図1A及び図1Bの上記で説明される動作の機能的モデルを提供する。
1)初期累算器がゼロに設定される、MACの繰返し。
Figure 2012505455
2)初期累算器が入力ベクトルとされる、MACの繰返し。
Figure 2012505455
3)初期累算器がゼロに設定される、MACの飽和繰返し。
Figure 2012505455
4)初期累算器が入力ベクトルとされる、MACの飽和繰返し。
Figure 2012505455
5)初期累算器がゼロに設定される、MACの飽和及び丸め繰返し。
Figure 2012505455
6)初期累算器が入力ベクトルとされる、MACの飽和及び丸め繰返し。
Figure 2012505455
7)初期累算器がゼロに設定される、乗算及び減算の繰返し。
Figure 2012505455
8)初期累算器が入力ベクトルとされる、乗算及び減算の繰返し。
Figure 2012505455
9)初期累算器がゼロに設定される、乗算及び減算の飽和繰返し。
Figure 2012505455
10)初期累算器を入力ベクトルとする、乗算及び減算の飽和繰返し。
Figure 2012505455
11)初期累算器がゼロに設定される、乗算及び減算の飽和及び丸め繰返し。
Figure 2012505455
12)初期累算器を入力ベクトルとする、乗算及び減算の飽和及び丸め繰返し。
Figure 2012505455
13)初期累算器がゼロに設定される、MAC複素繰返し。
Figure 2012505455
14)初期累算器を入力ベクトルとする、MAC複素繰返し。
Figure 2012505455
15)初期累算器がゼロに設定される、MACの複素共役繰返し。
Figure 2012505455
16)初期累算器を入力ベクトルとする、MACの複素共役繰返し。
Figure 2012505455
上記の例1を考えると、このCコードの第1のラインは、入力として入力データ要素ベクトルvd0及びvd1(共に入力データ要素の第1ベクトルvdを構成する)、係数データ要素のベクトルを形成する係数ベクトルvc、及び要求される反復数を示すスカラー値を形成する整数値Mを取り上げる、繰返しMAC命令を識別する。命令に応答して行われる動作が、次いで、Cコードの残りの部分で開始する。第1に、整数変数Pが初期化され、その後、積和演算ベクトルvaccがゼロに初期化される(これは、コード第2行、vint32L_t vacc=vdup_n_s32L(0);によって行われる)。ベクトルvd0、vd1、及びvc内の個々のデータ要素は16ビット幅であるのに対して、ベクトルvacc内の個々のデータ要素は、16ビット入力データと16ビット係数データ要素の乗算によってもたらされる乗算結果に適応するために、32ビット幅である。
次に、スカラー値Mに対して2つのチェックが行われる。特に、MがパラメータN(CコードにおいてELEMENTS16として参照される)よりも大きいか又は等しい場合、MはNに設定され、一方、それ以外の場合スカラー値Mは変化されないままである。第2に、Mが1未満である場合、Mは0に設定され、一方、それ以外の場合、M=M−1に設定される。
ループは、次いで、P=0で開始され、PがMよりも小さい間繰返される(Pは、ループが繰返されるたびに増分される)。各反復において、積和演算動作が行われる(vmlal_n_s16として識別される)。用いられる係数データ要素は、該単一係数データ要素を伴うベクトルvcからP番目の係数データ要素を選択するレーン取得手順を用いて求められ、次いで、ベクトルにブロードキャストされる(すなわち、すべて同じものであるN個の個別の係数データ要素を形成するために(このブロードキャスト機能は、vmlal_n_s16動作における「n」によって示される))。同じく示されるように、MAC動作への入力として要求されるN個の入力データ要素が、シフト動作vext_s16を用いてPの値に応じてvd0及びvd1から選択される。最後に、累算入力がベクトルvaccから取り上げられる。
ループの要求された数の反復が完了すると、結果を戻すために最後のvmlal_n_s16動作が行われる。この最後の反復は、ループに入る前にM=M−1に設定されたときに要求される。
例2は、例1と類似しているが、ここでは、最初の積和演算ベクトルvaccは、命令によって指定される。例3〜12は、各々の乗算減算バージョンと共に、飽和する変形と飽和し丸める変形を例示説明する。
例13は、例1と類似しているが、ベクトルvacc、vc、及びvdにおけるデータ要素は複素数であり、各反復において、複素積和演算動作(vmlal_n_c16として識別される)と複素シフト動作(vext_c16として識別される)が行われる。例15は、例13と類似しているが、積和演算動作が行われる前に係数データ要素の虚部の符号を反転させるために、係数データ要素が共役にされる。例14及び例16は、それぞれ例13及び例15と類似しているが、これらの例において、最初の積和演算ベクトルvaccは、命令によって指定される。例13〜例16は、実数の例1及び例2と対応する複素数変形(非共役形式と共役形式との両方における)を表すが、すべての実数の例1〜例12についての複素数変形を容易に提供することができることが理解されるであろう。
図2は、本発明の一実施形態に係るデータ処理装置を例示説明し、この特定の例において、データ処理装置は、デジタル信号プロセッサ(DSP)100の形態をとる。DSP100によって行われる動作は、種々の形態をとることができるが、一実施形態において、DSPは、無線ベースバンド処理機能を行うために用いられ。無線ベースバンドは、こうした集積回路の処理機能に対して重い要求を課す。要求されるデータ・スループットは大きく、すべての要素が高効率で用いられるように、DSP内に提供される異なる要素のバランスをとることが重要である。図2に示されるように、DSPは、SIMD積和演算回路110と種々の他のSIMD処理回路120とを含むSIMD部105を含む。SIMD MAC回路110と他のSIMD処理回路120との両方は、SIMD処理回路によって要求されるデータ要素のベクトルを格納するSIMDレジスタ・バンク140へのアクセスを有する。SIMD MAC回路110はまた、MAC動作の間に生成された累算データ要素を保持するのに用いられる1つ又は複数のSIMD累算レジスタ130へのアクセスを有する。
1つの例において、SIMD MAC回路110と他のSIMD処理回路120は、SIMDレジスタ・バンクから提供される算術値に対して乗算、加算、及びシャッフル動作を行うために用いることができる各々16ビット幅の32個の並列処理レーンを有する。要求される入力値を並列処理のレーンの各々に提供するために、SIMDレジスタ・バンク140内の1つ又は複数の入力値レジスタ内のそれぞれの要素から16ビットデータワードが取り上げられる。
SIMD回路は、しばしばパイプラインされ、一実施形態において、SIMD MAC回路は、計算の結果が、計算がパイプラインの中に発せられた3サイクル後に利用可能なとなるように、3段階のパイプラインを形成する。
一実施形態において、それぞれの処理レーンは、コントローラ160によってプログラム・メモリ165から検索される256ビットの超長命令語(VLIW)命令によって制御される。このVLIW命令はまた、典型的に、DSP100のスカラー部145内のスカラー処理回路150を制御するのに用いられるスカラー命令を含み、スカラー処理回路150は、1つ又は複数のスカラー・レジスタ・バンク155へのアクセスを有する。コントローラ160は、VLIW命令内の命令をデコードし、且つ要求される制御信号をSIMD部105内の回路とスカラー部145内の回路に送信するのに用いられる、1つ又は複数の命令デコーダを含む。コントローラはまた、ロード/格納ユニット170に対して、必要に応じておよび要求される場合、制御信号を送信して、SIMDレジスタ・バンク140又はスカラー・レジスタ・バンク155のいずれかに格納するために、データ・メモリ175からデータが読み込まれるようにさせるか、又はこれらのレジスタ・バンクからデータ・メモリ175にデータが戻されて格納されるようにする。
スカラー処理回路150は、上述のSIMD処理回路と並列に動作し、主に制御動作を行うように働く。スカラー処理回路の1つはまた、データ・メモリ175におけるデータ値にアクセスするのに用いられるメモリ・アクセス・アドレスを生成することを担当するアドレス生成ユニットを制御してもよい。一実施形態において、スカラー処理回路150は、1から3までの間のパイプライン段階を有し、データ・メモリ175は、3サイクル又は6サイクルの待ち時間を有する。
本発明の実施形態の繰返しMAC命令を考えると、こうした命令は、コントローラ160によってプログラム・メモリ165から読み込まれるVLIW命令内に現れてもよく、該繰返しMAC命令をデコードすると、SIMD MAC回路110に積和演算プロセスの複数の反復を行わせる制御信号が、SIMD部105に、特にSIMD MAC回路110に発せられ、それにより図1A又は図1Bにおいて概略的に例示説明される一連の動作を実施する。
図3は、要求される機能を提供するためにSIMD MAC回路110内に提供される構成要素をより詳細に例示説明する図である。レジスタ220及び222は、集合的に入力データ要素の第1ベクトルvdを形成するベクトルvd0及びvd1を最初に格納するために提供され、一方、レジスタ246は、係数データ要素の第2ベクトルを格納するのに用いられる。マルチプレクサ248、1:N変換器250、及びマルチプレクサ242を用いて、レジスタ240に格納される係数のベクトルを形成するために、各反復について単一係数データ要素を選択し、N個のレーンにわたってブロードキャストすることができる。積和演算プロセスの第1の反復の間、これは、第1係数データ要素を取り上げ、それをN個のレーンにわたってブロードキャストする1:N変換器244を介して達成され、それによりレジスタ246を用いることの1つのサイクル遅延が回避される。
第1の反復の間、レジスタ220は、ベクトルvd0(すなわち、ベクトルvdの第1のN個の入力データ要素)を含むが、後続の各反復について、レジスタ220の内容は、次の反復についての要求される入力データ要素を作製するために、レジスタ・バンク222(マルチプレクサ224を介して)からのデータ要素とレジスタ220の現在の内容とのうちの1つにおいて取り上げ、1つのデータ要素だけシフトを行う、シフト回路226を用いて変化され、この結果は、次いで、マルチプレクサ230を介してレジスタ220の中に戻るようにルーティングされる。
次いで、図3に示されるように、SIMD MAC回路110は、N個のレーンの並列処理の260を有し、各レーンは、ボックス260内で例示説明される構成要素を含み(レジスタ264は、すべてのレーンにまたがるものとして見ることができる)、各レーンは、入力レジスタ220、240の各々においてN個のデータ要素のうちの1つに対して動作する。特に、乗算回路262は、レジスタ220における入力データ要素のうちの1つを、レジスタ240からの係数データ要素と乗算し、その結果が、レジスタ264に格納される。次のクロックサイクルにおいて、ゼロに設定された回路272から提供された累算値とレジスタ264からの乗算結果を用いて加算器回路268によって累算動作が行われる。通常は、ライン217上の制御信号が、ゼロに設定する機能を使用不可にし、したがって、SIMD累算レジスタ130から累算結果が受信される。しかしながら、随意的に、繰返しMAC命令は、最初の累算値をゼロ値に指定してもよく、その場合、第1の反復の間に、ライン217上の制御信号がゼロに設定する機能を使用可能にし、したがって、第1サイクルにおいて用いられる累算値がないことが保証される。
繰返しMAC命令は、典型的には、各反復における乗算の結果が実行中の累算結果に加算される、乗算加算動作を指定するが、これは各反復における乗算結果が実行中の累算値から減算される乗算減算動作を代替的に指定してもよい。乗算減算動作が定義される場合、ライン216上の制御信号は、否定回路266に、レジスタ264におけるデータ要素を加算器268に入力する前に無効にさせる。
同様に、繰返しMAC命令は、もたらされる積和演算データ要素が飽和する又は飽和しない、のいずれであるかを指定してもよい。それらが飽和しない場合、典型的には、入力データ要素のサイズ及び/又は累算レジスタ130のサイズは、累算結果が飽和することがないように選択される。しかしながら、命令が、積和演算データ要素が飽和することを指定する場合、飽和回路270は、出力をSIMD累算レジスタ130にルーティングする前に加算器268からの出力を評価することを可能にする制御信号をパス219上で受信する。特に、飽和論理は、出力積和演算データ要素が最大正数から最小負数まで又はその逆の方向で遷移するかどうかを判定するためにオーバーフロー・ビットを評価し、遷移する場合、それぞれ最大正数又は最小負数に保持されるように結果を修正する。
制御信号218はまた、最後の反復の間に加算器268によって行われる加算の中に随意的な丸め増分が導入されることを可能にするために提供され、これは、繰返しMAC命令が、丸めが要求されることを指定する場合に用いられる。丸めが要求される場合、丸めは適正な数学的結果がもたらされることを保証するために最後の反復においてのみ行われることが重要であり、したがって、随意的な丸め増分値は最後の反復の間にのみ導入され、これは、より詳細に以下で説明される状態機械200によって制御される。
前述の種々の回路要素の動作は、SIMD MAC回路110によって実行されるべき各SIMD命令がコントローラ160によってデコードされるときに種々の制御信号を受信する、状態機械200によって制御される。
図3に示されるように、状態機械は、命令がデコーディングされる際に3つの信号を受信する。第1の信号は、パス202上で発せられた繰返し指示であり、この信号が設定される場合、これはデコードされている命令が繰返しMAC命令であることを示し、一方、設定されない場合、これはデコードされている命令が標準MAC命令であることを示す。パス204上で受信される信号は、反復数を与えるリピート信号であり、これは、スカラー・レジスタ・バンク155に格納されたスカラー値から提供され、標準MAC命令に対しては用いられない。受信される最後の信号は、パス206上で受信されるmult_cmd信号であり、積和演算が乗算加算又は乗算減算のいずれであるか、累算値が飽和する又は飽和しない、のいずれであるか、丸めが要求されるかどうか、最初の累算値が指定されるかどうか、動作の開始時に累算がクリアされるべきかどうか、及び任意の他の該当する制御信号といった、標準の乗算器コマンド情報を提供する。
代替的な実施形態において、リピート信号は、繰返しMAC命令の入力オペランドのうちの1つを形成するスカラー値から導出することができ、この場合、リピート信号は、スカラー・レジスタ・バンク155ではなくコントローラ160から提供される。
図4は、状態機械の2つの基本状態を示す。リセット後に、状態機械は繰返しなし状態300にあり、設定状態でのパス202上の繰返し信号、及び反復数を指定するパス204上のリピート信号を受信するまでは、繰返しなし状態にとどまる。これらの条件下で、状態機械の状態は、繰返しなし状態300から繰返し状態310に遷移する。状態機械は、多数の制御信号をSIMD MAC回路110内の種々の構成要素に発し、制御信号は、パス212上のmcyc_en信号を含み、それは、状態機械が繰返しなし状態300にある間は論理0値に設定され、状態機械が繰返し状態310にある間は論理1値に設定される。
繰返し状態310の間、状態機械は、mcyc_cnt信号と呼ばれるカウンタを維持するが、カウンタは、各反復が行われる際に最初のリピート信号値Mから減算され、mcyc_cnt信号が1以下のとき、状態機械は、繰返し状態310から繰返しなし状態300に戻るように遷移する。
図5は、状態機械200が、パス202、204、及び206上で受信する、3つの入力信号に応答して、もたらす種々の信号を例示説明するタイミング図であり、それらの受信信号が繰返しMAC命令の実行を識別する状況でのものである。
マルチプレクサ230を考えると、パス212上で状態機械200によって発せられたmcyc_en信号は、信号がアサートされるとマルチプレクサがその左側で(シフト回路226から)受信した入力をレジスタ220に出力するようにマルチプレクサを制御するのに用いられる。したがって、第1サイクルにおいて、mcyc_en信号をアサートする前に、SIMDレジスタ・バンクからの出力が、マルチプレクサを介してレジスタ220の中にルーティングされ、先に述べたように、これは、ベクトル・レジスタの内容vd0がレジスタ220内に置かれることを意味する。次のサイクルにおいて、マルチプレクサ230は、左側入力を選択するためにアサートされたmcyc_en信号によって準備され、先に説明したように、この左側入力は、レジスタ220の内容と、マルチプレクサ224の制御の下でレジスタ222から選択されるデータ要素の1つに基づいて、シフト回路226によって生成される。マルチプレクサ224は、図5に示されるmcyc_elem_sel信号を受信し、該信号に従ってレジスタ222から該当するデータ要素を選択する。したがって、図1A又は図1Bを参照すると、各反復についてのレジスタ220の内容は、各反復についての図1A又は図1Bに概略的に示された入力データ要素となることが分かるであろう。
マルチプレクサ242を考えると、繰返しMAC命令のない状態では、マルチプレクサ242の左側入力がレジスタ240上に伝搬される。特に、マルチプレクサ242は、パス212上で状態機械によって出力されるmcyc_en信号とパス202上で状態機械によって受信される繰返し信号とによって形成された2ビット制御信号を受信する。繰返しMAC命令のない状態では、両方のビットは論理0状態にクリアされる。繰返しMAC命令の発生時には、繰返し信号は、第1クロックサイクルの間はhighに設定されるが、mcyc_en信号は、次のクロックサイクルまで状態機械212によって設定状態で出力されない。したがって、第1クロックサイクルの間、レジスタ240への入力は、マルチプレクサ242への中間入力によって与えられ、これは、係数のベクトルvcにおける第1係数データ要素、すなわちvc[0]を用いて1:N変換器回路244によってもたらされる。後続の各サイクルについて、繰返しMAC命令の間、パス212上で発せられたmcyc_en信号が設定され、したがって、レジスタ240への入力は、先に説明したようにマルチプレクサ248の制御の下でレジスタ246における内容(すなわち、係数データ要素の第2ベクトル)から生成される、マルチプレクサ242への右側入力から取られる。マルチプレクサ248は、マルチプレクサ224と同様に、mcyc_elem_sel信号を受信し、したがって、係数データ要素の各々を順に処理する。マルチプレクサ248を考えると、これは、mcyc_elem_selがiである場合に係数データ要素i+1を選択する。
完全性のために、レジスタD240及びレジスタA220からの出力が、図5において例示説明され、VCは、第1の反復において用いられる係数のベクトルを示し、VDは、第1の反復おいて用いられる入力データ要素のベクトルを示すなどである。
図3に示されるように、パス206上で受信されたmult_cmd信号は、レジスタ205にラッチされ、その後、マルチプレクサ210上でルーティングされ、そこで、種々のコマンド情報がパス216、217、218、及び219上で第3のクロックサイクルにおいて伝搬される前に、レジスタ215上に伝搬されてもよい。ただコマンド情報の伝搬において要求される3サイクル遅延を保証するために、該コマンド情報が適正なサイクルで累算回路に送られるように2つのレジスタ205、215が挿入される。図5に示されるように、状態機械はまた、パス208上でマルチプレクサ210の別の入力にルーティングするために、mult_cmd信号の僅かに修正されたバージョンを生成し、次いで、mult_cmd_ex信号として、左側入力又は右側入力のいずれがマルチプレクサ215上に伝搬されるべきかを示す制御信号(mult_cmd_ex制御信号)をマルチプレクサに発することができる。mcyc_en又はmcyc_ex(図5に示されたmcyc_enのパイプラインされるバージョン)のいずれかがhighに設定される間、この制御信号はhighに設定される。
したがって、第1の反復について、図5に示されるように、受信されたmult_cmd OPは、パス208上でOP0として出力され、マルチプレクサ210からの出力に対して選択され、OP0は、OPが丸めを指定する場合で、OP0が、第1の反復に丸め増分が導入されないことを保証するために丸めを使用不可にすること以外はOPと同一である。最後の反復に至るまでの次の反復について、状態機械は、パス208上でOP1を発し、これは元のOPと同一のものとなるが、累算が常に使用可能にされ、丸めが常に使用不可にされ、OP1はマルチプレクサ210から伝搬される。既述のように、元のOPは、最初の累算がゼロに設定されるべきであることを識別し得るが、明らかにこれは第1の反復の間でのみ起こるべきであり、従って、累算を使用可能にすることが必要である。丸めは、適正な数学的丸めが起こることが保証されるように、最後のサイクルまで使用不可にされたままである必要がある。同じく図5に示されるように、最後の反復時に、mult_cmd_ex信号はOP2に設定され、これは元のOPと同一のものとなるが、累算が常に使用可能にされ、OP2はマルチプレクサ210から伝搬される。したがって、この時点で、元のOPが丸めを指定した場合、OP2もまた丸めを指定し、パス218上で丸め増分が導入されることになる。
図5におけるmult_cmd_ex信号は、動作の書き戻し段階を制御するために1つのサイクル後でレジスタ215から発せられる信号mult_cmd_wbをもたらす、マルチプレクサ210の出力を示す。
同じく図3に示されるように、パス212上で発せられたmcyc_en信号は、図5に示されたストール信号をもたらすために随意的にレジスタ214にラッチすることができる。これは、コントローラに、ストール信号がアサートされる間、命令フェッチを一時停止させるために用いることができ、それにより電力消費を減少させる。
図6は、本発明の実施形態においてN個のレーン260内のSIMD MAC回路110によって行われる積和演算動作を概略的に例示説明する。図6に示されるように、乗算器262内のN個のレーンは、N個の入力データ要素400と、単一係数データ要素をN回繰返すことによって形成される係数のベクトル410を受信し、それらに基づいて要求される乗算を行い、結果としてレジスタ264に格納されるN個の乗算データ要素420がもたらされる。入力データ要素と係数データ要素との各々が16ビット幅であると仮定すると、乗算データ要素の各々は少なくとも32ビット幅となる。
その後、N個の乗算データ要素420が、回路272から入力されるN個の積和演算データ要素430に加算される(又は随意的に否定回路266が有効とされる場合は減算される)。典型的には、これは、前の反復からのN個の積和演算データ要素となる又は最初の積和演算データ要素のベクトルとなる、SIMD累算レジスタ130の内容となる。代替的に、第1の反復について、N個の積和演算データ要素はすべてゼロに設定されてもよい。加算の結果は、N個の積和演算データ要素440の生成であり、これらはSIMD累算レジスタ130に戻されて格納される。
図7は、元の入力データ要素の第1ベクトルvdから各反復についてのN個の入力データ要素を生成するために、図3における回路要素220、222、224、及び226がどのようにして配置されるかを概略的に例示説明する。特に、最初にベクトルvd0 450はレジスタ220に格納され、ベクトルvd1460はレジスタ222に格納される。第1の反復では、レジスタ220における内容は変化されず、したがって、N個の入力データ要素470は乗算器262にルーティングされる。次の反復において、シフト回路226は、レジスタ220の現在の内容、すなわちベクトルvd0 450を受信し、尚且つ、レジスタ222に格納されたベクトルvd1から第1データ要素、すなわちvd[N]を受信し、1つのデータ要素だけ右シフト動作を行い、それにより、結果としてN個の入力データ要素480がもたらされ、マルチプレクサ230を介してレジスタ220の中に戻される。後続の各反復は、図1A又は図1Bに示される一連のN個の入力データ要素ベクトルがもたらされるのと同様の様式で進む。
図8は、各反復について用いられる係数のベクトルが、レジスタ246に格納された係数データ要素の第2ベクトルvcからどのようにして導出されるかを概略的に例示説明する。第1の反復時に、第1係数データ要素vc[0]が選択され、次いで、係数のベクトル510を形成するためにN回繰返される。先に説明したように、一実施形態において、これは実際には、1サイクルの伝搬遅延を回避するために、レジスタ246の内容を用いるのではなく1:N変換回路244を用いて達成される。次のサイクルにおいて、第2係数データ要素vc[1]が選択され、1:N変換器250からマルチプレクサ242を介してレジスタ240の中に入力される係数のベクトル520を形成するために、N回繰返される。後続の各反復について、次の係数データ要素が、図1A又は図1Bに示される一連の係数ベクトルがもたらされるように同じ方法で選択され、操作される。
上で説明された実施形態において、繰返しMAC命令は実数を処理する。しかしながら、先に説明したように、代替的な実施形態において、繰返しMAC命令は、複素数を処理するように配置されてもよく、この場合、すべてのデータ要素(入力データの第1ベクトル、第2係数のベクトル、及びN個の積和演算結果における)が複素数であり、すべての動作が複素動作である。図3の例を考えると、これは、乗算回路262を複素乗算器として配置することによって達成することができ、該複素乗算器は、実部と虚部を有する乗算結果をもたらすために要求される加算及び減算と共に段落0054〜0056において先に説明された実部と虚部の4つの乗算を行うように配置することができる。加算器268は、次いで、更新された複素累算値をもたらすために実部と虚部に対して要求される累算動作を行う複素加算器として配置することができる。乗算減算動作が行われている場合、無効化回路266は、加算器268に入力する前に乗算回路262によってもたらされる複素乗算結果を無効にする。
複素共役繰返しMAC命令が処理されている場合、要求される乗算演算を行う前に係数データ要素の虚部の符号を反転させる付加的な制御信号を乗算回路262に提供することができる。
上記の方法で複素数を取り扱うことの代替的方法として、複素数FIRフィルタはまた、図9に概略的に例示説明されるように、4つの非複素繰返しMAC命令を用いて組み立てることができる。特に、図9の上部において、積和演算結果の実数及び虚数成分をもたらすために要求される式が示される(「R」は実数成分を表し、「I」は虚数成分を表す)。図9の下半分において、これらの結果を生成するために要求される一連の4つの命令が示され、各命令についての入力オペランドは、角括弧で識別される。したがって、第1の繰返しMAC命令は、入力ベクトルとしてvdR及びvcRを用いて乗算加算を行い、最初のゼロの累算値を有する。すべての4つの命令について、スカラー値は同じ値Mに設定される。第2繰返しMAC命令は、次いで、入力ベクトルとしてvdI及びvcIを用い、最初の累算結果として第1の繰返しMAC命令によってもたらされる累算結果を設定して、vaccR結果の生成を完了する。第2繰返しMAC命令は減算変形のものであり、したがって、乗算減算動作を行うことに注意されたい。第3の及び第4の繰返しMAC命令は、次いで、同様の方法でvaccI結果を生成するが、この際、の2つの繰返しMAC命令のうちの第2のものは(繰返しMAC4)はまた、加算変形である。
上記で説明された本発明の実施形態において、各繰返しMAC命令は、入力データ要素の第1ベクトルと係数データ要素の第2ベクトルを受信し、N個の積和演算結果のうちの1つのセットを生成するが、代替的な実施形態において、1つの繰返しMAC命令は、N個の積和演算結果のうちの2つ以上のセットを生成するように配置することができ、その場合、入力オペランド又は係数データ要素のいずれかは、行われる2つ以上の積和演算プロセスの間で再び用いられる。こうした実施形態が、図10のブロック図と図11のタイミング図を参照しながら説明される。
図10において用いられる装置は、コントローラ160によってデコードされる単一の繰返しMAC命令にすべてが応答するN個の積和演算結果のうちの2つの個別のセットがもたらされるように、SIMD MAC回路110が2つの積和演算段階を並列に行うことを可能にするために用いられる。図10と先に説明された図3との比較から理解されるように、回路は基本的には同一のものであり、少しの修正を受ける。最初に、以下でより詳細に説明されるように、単一のSIMD累算レジスタ130の代わりに2つのSIMD累算レジスタ600、610が提供され、状態機械200によって発せられた制御信号によって制御される幾つかの関連するアクセス制御回路620が提供される。さらに、レジスタ220への入力を求めるために図3において用いられるマルチプレクサ230は、ここでは、状態機械200によって出力される制御信号から導出される2ビット信号によって制御される3つの入力マルチプレクサ630に置き換えられる。唯一の他の注意点は、図3においてマルチプレクサ224及び248は、両方とも状態機械からの同じ制御信号によって制御されるが、それらは、ここでは、図11のタイミング図を参照しながらより詳細に説明されるように、2つの異なる信号によって制御されることである。
図11のタイミング図と図5のタイミング図との比較から理解されるように、図11は、図5と類似しているが、付加的に、図10の回路内で用いられる追加の制御信号を示す。図10に示されるように、マルチプレクサ248は、図11に示されるように各反復の間に増分されるmcyc_c_sel信号によって制御される。指定される反復数はMであるが、2つの個別の積和演算段階が実施されている場合、mcyc_countは、2M−1から減少される。mcyc_c_sel信号が各反復の間に増分する結果として、各反復の間にレジスタD240から出力される係数のベクトルが変化することが分かる。
対照的に、図11から明らかなように、mcyc_b_sel信号によって制御されるマルチプレクサ224は、2回の反復毎にのみ増分される。図10に示されるように、レジスタA220からの出力は、中間入力としてマルチプレクサ630に戻るようにルーティングされる。mcyc_en信号が設定されるとき、マルチプレクサ630は、パス212上で状態機械200によって出力されるmcyc_a_en信号の値に応じて、レジスタ220にその中間入力又はその左側入力のいずれかを出力する。図11に示されるように、この信号は、各反復で設定状態とクリア状態との間で交互に変化し、その内容はmcyc_a_en信号がhighであることに応答して2つの反復毎に一度だけ更新することができるので、レジスタ220からの出力が2つの反復について同じに維持されることが保証される。
状態機械200からアクセス制御回路620によって受信されたmcyc_acc_ctrl信号はまた、第1の反復によって要求される最初の3つのサイクルがひとたび完了すると、クロックサイクル毎に周期変動する。この信号が論理0レベルである間に、SIMD累算レジスタ600がアクセスされ、該信号が論理1レベルである間に、SIMD累算レジスタ610がアクセスされる。これは、個別の積和演算段階の各々について維持された累算データ要素が、個別のSIMD累算レジスタ600、610内に個別に保持されることを保証する。
図10及び図11の上記の説明から理解されるように、この実施形態において、各反復について選択される入力データ要素のベクトルは、両方の積和演算段階について再び用いられる。しかしながら、係数データ要素は再び用いられず、代わりに、積和演算段階の各々について、係数データ要素の異なるベクトルが用いられ、第1積和演算段階は、ベクトルVC、VC、VCなどを用い、第2積和演算段階ベクトルVC、VC、VCを用いるなどである。したがって、この実施形態において、SIMDレジスタ・バンクにおけるレジスタの1つから提供される場合の係数データ要素の第2ベクトルは、交互の係数データ要素の各々が同じ積和演算段階に関係するようにパックされる個々の係数データ要素を含むことが分かる。この実施形態において、レジスタ246に格納されたN個の係数データ要素が、図11に示された係数データ要素のベクトルの2M個の個別のセットを提供するのに十分なものとなるように、スカラー値MはN/2以下となるように制約される。しかしながら、代替的な実施形態において、図10の回路は、係数データ要素の第2ベクトルを提供するために2つのSIMDレジスタの内容を用いることができるように修正することができ、それによりスカラー値MはN以下の任意の値となることができる。
2つの個別の積和演算段階がSIMD MAC回路110内で並列に行われることを可能にする単一の繰返しMAC命令の提供は、種々の状況において有用となり得る。一実施形態において、こうした命令は、複素数に対してFIRフィルタ動作を行うときに要求される種々の積和演算段階を行うときのエネルギー消費を減少させるために用いられる。例えば、図9を考えると、1つの命令は、vacc=vacc+vd.vcと、vacc=vacc+vd.vcとの両方の段階を行うために用いることができる。特に、vdR成分は、両方の段階の間で共有することができるが、係数データ要素の異なるベクトルは、図10及び図11を参照しながら先に説明された機構を用いて選択されることが明らかである。したがって、事実上、図9に示される2つの繰返しMAC命令「繰返しMAC1」及び「繰返しMAC3」によって行うことができる機能は、単一の繰返しMAC命令に包括することができる。同様に、2つの繰返しMAC命令「繰返しMAC2」及び「繰返しMAC4」によって行われる機能もまた、単一の繰返しMAC命令に包括することができるが、この場合、無効化回路266は、1つの累算レジスタにおいて乗算減算手順の結果が保持され、一方、他の累算レジスタにおいて乗算加算手順の結果が保持されるように、各反復の間で交互に有効にされ及び無効にされる必要がある。
すべての上記の実施形態において、スカラー値がN以下となるように制約される場合、多数の繰返しMAC命令を一つずつ用いることによってN個以上の反復が要求されるときの計算を行うことがさらに可能であり、後続の繰返しMAC命令は、その最初の積和演算データ要素として、直前の繰返しMAC命令によって生成されたN個の積和演算結果を取り上げることが理解されるであろう。
上で説明された技術は、上述の繰返しMAC命令を含む一連の固有の命令を実行するハードウェアによって行われてもよいが、代替的な実施形態において、こうした命令は、命令は仮想機械に固有のものであるが仮想機械は異なる固有の命令セットを有するハードウェア上で実行されるソフトウェアによって実装される、仮想機械環境で実行されてもよいことが理解されるであろう。仮想機械環境は、全命令セットの実行をエミュレートする全仮想機械環境を提供してもよく、又は、例えば、本発明の技術の命令を含む幾つかの命令のみがハードウェアによってトラップされ部分的仮想機械によってエミュレートされる、部分的なものであってもよい。
より詳細には、上記で説明された繰返しMAC命令は、全仮想機械又は部分的仮想機械に固有の命令として実行されてもよく、仮想機械は、その基礎となるハードウェア・プラットフォームと共に、組み合わされて前述のSIMD処理回路を提供するように動作する。
図12は、用いられ得るこうした仮想機械実装を例示説明する。先に説明された実施形態は、関係している命令をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点で本発明を実施するが、ハードウェア・デバイスの所謂、仮想機械実装を提供することも可能である。これらの仮想機械実装は、仮想機械プログラム880をサポートするホスト・オペレーティング・システム860を実行するホスト・プロセッサ840上で実行される。典型的には、妥当な速度で実行する仮想機械実装を提供するためには大型の強力なプロセッサが要求されるが、こうした手法は、互換性又は再使用の理由のために別のプロセッサに固有のコードを実行する要望があるときのような或る状況において正当化され得る。仮想機械プログラム880は、仮想機械プログラム880によってモデル化されるデバイスであるリアルハードウェアによって提供されるであろうアプリケーション・プログラム・インターフェースと同じものである、アプリケーション・プログラム900へのアプリケーション・プログラム・インターフェースを提供する。したがって、前述の繰返しMAC命令を含むプログラム命令は、それらの仮想機械ハードウェアとの相互作用をモデリングするために仮想機械プログラム880を用いてアプリケーション・プログラム900内から実行されてもよい。
特定の実施形態が本明細書に記載されたが、本発明はそれに限定されず、本発明の範囲内でそれへの多くの修正及び追加を行ってもよいことが理解されるであろう。例えば、本発明の範囲から逸脱することなく、以下の従属請求項の特徴と独立請求項の特徴との種々の組み合わせを作製することができる。
100 デジタル信号プロセッサ
105 SIMD部
110 SIMD積和演算回路
120 他のSIMD処理回路
130 SIMD累算レジスタ
140 SIMDレジスタ・バンク
145 スカラー部
150 スカラー処理回路
155 スカラー・レジスタ・バンク
160 コントローラ
165 プログラム・メモリ
170 ロード/格納ユニット
175 データ・メモリ

Claims (30)

  1. データ処理装置であって、
    制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うSIMDデータ処理回路と、
    前記SIMDデータ処理回路と結合されプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、
    を備え、
    前記命令デコーダ回路が、入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する繰返し積和演算(繰返しMAC)命令に応答して、前記SIMDデータ処理回路を制御する制御信号を生成し、
    積和演算プロセスの前記複数の反復を行い、前記積和演算プロセスの各反復は、N個の積和演算データ要素をもたらすためにN個の積和演算動作を並列に行うことを含み、
    各反復について、前記第1ベクトルからN個の入力データ要素と、前記第2ベクトルからN個の積和演算動作の間にN個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求め、
    前記積和演算プロセスの最後の反復においてもたらされた前記N個の積和演算データ要素から導出されたN個の積和演算結果を出力する、
    データ処理装置。
  2. 前記繰返しMAC命令がFERフィルタ動作を行うために用いられ、前記N個の積和演算結果がN個のFIR結果からもたらされる、請求項1に記載のデータ処理装置。
  3. 前記SIMDデータ処理回路が、各反復についてのN個の入力データ要素と単一係数データ要素を求めるための状態機械を有する、請求項1又は請求項2に記載のデータ処理装置。
  4. 前記第1ベクトルにおける入力データ要素の数が少なくともN+M−1であり、前記状態機械が、反復P−1に用いられるN個のデータ要素に関して、シフト動作を生じさせることによって、反復PについてのN個の入力データ要素を求める、請求項3に記載のデータ処理装置。
  5. 前記状態機械が、各反復についての前記第2ベクトルから異なる係数データ要素を求める、請求項3又は請求項4に記載のデータ処理装置。
  6. 前記繰返しMAC命令がまた、入力オペランドとして最初の積和演算データ要素のベクトルをも有する、上記請求項のいずれかに記載のデータ処理装置。
  7. いかなる前記最初の積和演算データ要素のベクトルも指定されず、前記積和演算プロセスの第1の反復の前に前記N個の積和演算データ要素がゼロに設定される、請求項1から請求項5までのいずれかに記載のデータ処理装置。
  8. 前記状態機械がスカラー値から反復数Mを求め、前記複数の反復のうちの少なくとも1つが実行されている間、前記データ処理装置の1つ又は複数の構成要素にストール信号をアサートする、請求項3に従属するとき上記請求項のいずれかに記載のデータ処理装置。
  9. 前記複数の反復のうちの1つだけを除くすべての反復の間、前記ストール信号がアサートされる、請求項8に記載のデータ処理装置。
  10. データ要素を格納するためのSIMDレジスタ・バンクをさらに備え、前記SIMDデータ処理回路が、前記積和演算プロセスの前記複数の反復を行う前に、前記SIMDレジスタ・バンクのレジスタから前記第1及び第2ベクトルにアクセスし、それにより、前記積和演算プロセスの前記複数の反復の遂行の間、前記第1及び第2ベクトルに関しての前記SIMDレジスタ・バンクへのさらなるアクセスは要求されない、上記請求項のいずれかに記載のデータ処理装置。
  11. 前記入力データ要素の第1ベクトルが、Nの倍数である多数の入力データ要素を有し、前記SIMDデータ処理回路が、前記SIMDレジスタ・バンクの多数のレジスタにアクセスすることによって前記入力データ要素にアクセスし、前記多数のレジスタの各々がN個の入力データ要素を含む、請求項10に記載のデータ処理装置。
  12. N個の積和演算データ要素を格納するための積和演算レジスタをさらに備える、請求項10又は請求項11に記載のデータ処理装置。
  13. 前記入力データ要素の各々がXビットを備え、前記係数データ要素の各々がYビットを備え、前記積和演算レジスタに格納される各積和演算データ要素が少なくともX+Yビットのサイズである、請求項12に記載のデータ処理装置。
  14. 前記積和演算レジスタが、前記積和演算データ要素を拡張形式で格納し、前記拡張形式が、オーバーフローを求めるのに用いられる付加的なビットを含む、請求項13に記載のデータ処理装置。
  15. 前記入力データ要素と前記係数データ要素とのうちの少なくとも1つが、実部と虚部を備える複素数であり、
    前記積和演算プロセスの各反復が、N個の複素積和演算データ要素をもたらすためにN個の複素積和演算動作を並列に行うことを含み、
    前記N個の積和演算結果の出力が複素数である、
    上記請求項のいずれかに記載のデータ処理装置。
  16. 前記入力データ要素と前記係数データ要素との両方が、実部と虚部を備える複素数である、請求項15に記載のデータ処理装置。
  17. 前記各複素積和演算動作が、対応する前記複素積和演算データ要素の実部と虚部をもたらすために一連の乗算、加算及び減算動作の遂行を含む、請求項15又は請求項16に記載のデータ処理装置。
  18. 前記係数データ要素が複素数であり、各反復において、前記N個の複素積和演算動作が行われる前に前記複素係数データ要素が共役にされる、請求項15から請求項17までのいずれかに記載のデータ処理装置。
  19. 前記積和演算動作が乗算減算動作である、上記請求項のいずれかに記載のデータ処理装置。
  20. 前記命令デコーダ回路によって生成された前記制御信号の1つが、丸めが要求されるかどうかを指定し、丸めが要求される場合、前記状態機械が、丸め増分が、前記複数の反復のうちの1つにおいて行われる各積和演算動作の中に導入されるように配置される、請求項3に従属するとき上記請求項のいずれかに記載のデータ処理装置。
  21. 前記命令デコーダ回路によってもたらされた前記制御信号の1つが、もたらされるべき前記積和演算データ要素が飽和する又は飽和しない、のいずれであるかを指定し、前記SIMDデータ処理回路内の累算回路が、前記制御信号に依存するように構成される、上記請求項のいずれかに記載のデータ処理装置。
  22. 前記スカラー値がN以下である、上記請求項のいずれかに記載のデータ処理装置。
  23. QはN以下であるN+Q反復が要求され、QがN以下の場合、第1の繰返しMAC命令は、N個の反復を示すスカラー値を有し、後続するさらなる繰返しMAC命令が、Q回の反復を示すスカラー値を有し、最初の積和演算データ要素のベクトルとして前記第1の繰返しMAC命令に応答して前記SIMDデータ処理回路によって生成された前記N個の積和演算結果を識別する、請求項22に記載のデータ処理装置。
  24. 前記繰返しMAC命令によって指定される前記スカラー値が、行うことができる反復の最大数よりも大きい場合、前記スカラー値は前記最大数と等しく設定され、前記SIMDデータ処理回路が前記積和演算プロセスの前記最大数の反復を行う、上記請求項のいずれかに記載のデータ処理装置。
  25. 前記命令デコーダ回路が、一連の繰返しMAC命令に応答して、一連の積和演算段階を行うように前記SIMDデータ処理回路を制御する制御信号を生成し、各積和演算段階は、前記積和演算プロセスの前記複数の反復を行い、少なくとも1つの積和演算段階が、前記前の積和演算段階によって生成されたN個の積和演算結果を入力として用いる、上記請求項のいずれかに記載のデータ処理装置。
  26. 前記命令デコーダ回路が、単一の繰返しMAC命令に応答して、少なくとも2つの積和演算段階を行うために前記SIMDデータ処理回路を制御する制御信号を生成し、各積和演算段階は、前記積和演算プロセスの前記複数の反復を行い、各積和演算段階に対して要求される入力データ要素及び係数データ要素が、第1及び第2ベクトルから求められる、請求項1から請求項24までのいずれかに記載のデータ処理装置。
  27. 前記多数の積和演算段階が、複素数に対して繰返されるMAC動作を行うために用いられる、請求項25又は請求項26に記載のデータ処理装置。
  28. 制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うSIMDデータ処理回路と、前記SIMDデータ処理回路と結合されプログラム命令に応答して前記制御信号を生成する命令デコーダ回路と、を用いてデータを処理する方法であって、
    制御信号を生成するために入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する繰返し積和演算(繰返しMAC)命令をデコードするステップと、
    積和演算結果をもたらすために前記SIMDデータ処理回路を前記制御信号で制御するステップと、
    を含み、制御する前記ステップが、
    前記積和演算プロセスの前記複数の反復を行うステップであって、前記積和演算プロセスの各反復が、N個の積和演算データ要素をもたらすためにN個の積和演算動作を並列に行うことを含むステップと、
    各反復について、前記第1ベクトルからN個の入力データ要素と、前記第2ベクトルからN個の積和演算動作の間にN個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、
    前記積和演算プロセスの最後の反復においてもたらされた前記N個の積和演算データ要素から導出されたN個の積和演算結果を出力するステップと、
    を含む、方法。
  29. データ処理装置の仮想機械実装であって、入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する繰返し積和演算(繰返しMAC)命令に応答して、
    積和演算プロセスの前記複数の反復を行うステップであって、前記積和演算プロセスの各反復が、N個の積和演算データ要素をもたらすためにN個の積和演算動作を並列に行うことを含むステップと、
    各反復について、前記第1ベクトルからN個の入力データ要素と、前記第2ベクトルからN個の積和演算動作の間にN個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、
    前記積和演算プロセスの最後の反復においてもたらされた前記N個の積和演算データ要素から導出されたN個の積和演算結果を出力するステップと、
    によって積和演算結果をもたらす、仮想機械実装。
  30. データ処理装置であって、
    制御信号に応答して多数のデータ要素に対してデータ処理動作を並列に行うためのSIMDデータ処理手段と、
    プログラム命令に応答して前記制御信号を生成するための前記SIMDデータ処理手段と結合された命令デコーダ手段と、
    を備え、前記命令デコーダ手段が、入力オペランドとして入力データ要素の第1ベクトル、係数データ要素の第2ベクトル、及び要求される複数の反復Mを示すスカラー値を有する繰返し積和演算(繰返しMAC)命令に応答して、前記SIMDデータ処理回路を制御する制御信号を生成し、
    積和演算プロセスの前記複数の反復を行うステップであって、前記積和演算プロセスの各反復が、N個の積和演算データ要素をもたらすためにN個の積和演算動作を並列に行うことを含むステップと、
    各反復について、前記第1ベクトルからN個の入力データ要素と、前記第2ベクトルからN個の積和演算動作の間にN個の入力データ要素の各々と乗算されるべき単一係数データ要素とを求めるステップと、
    前記積和演算プロセスの最後の反復においてもたらされた前記N個の積和演算データ要素から導出されたN個の積和演算結果を出力するステップと、
    によって積和演算結果をもたらす、
    データ処理装置。
JP2011530543A 2008-10-08 2009-09-16 Simd積和演算動作を行うための装置及び方法 Active JP5619751B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0818491.3 2008-10-08
GB0818491A GB2464292A (en) 2008-10-08 2008-10-08 SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
GB0915208.3 2009-09-01
GB0915208.3A GB2464178B (en) 2008-10-08 2009-09-01 Apparatus and method for performing simd multiply - accumulate operations
PCT/GB2009/002225 WO2010040977A1 (en) 2008-10-08 2009-09-16 Apparatus and method for performing simd multiply-accumulate operations

Publications (2)

Publication Number Publication Date
JP2012505455A true JP2012505455A (ja) 2012-03-01
JP5619751B2 JP5619751B2 (ja) 2014-11-05

Family

ID=40042526

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011530543A Active JP5619751B2 (ja) 2008-10-08 2009-09-16 Simd積和演算動作を行うための装置及び方法

Country Status (9)

Country Link
US (1) US8443170B2 (ja)
EP (1) EP2350813B1 (ja)
JP (1) JP5619751B2 (ja)
KR (1) KR20110090915A (ja)
CN (1) CN102197369B (ja)
GB (2) GB2464292A (ja)
IL (1) IL211767A0 (ja)
TW (1) TW201020805A (ja)
WO (1) WO2010040977A1 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016537723A (ja) * 2013-11-15 2016-12-01 クゥアルコム・インコーポレイテッドQualcomm Incorporated フィルタベクトル処理動作のためのタップ付き遅延線を利用するベクトル処理エンジンと、関連するベクトル処理システムおよび方法
JP2016537724A (ja) * 2013-11-15 2016-12-01 クゥアルコム・インコーポレイテッドQualcomm Incorporated ベクトル処理動作のために実行ユニットに入力ベクトルデータのインフライトフォーマット変換を提供するためにベクトルデータメモリと実行ユニットとの間でデータフローパスにおいてフォーマット変換回路を利用するベクトル処理エンジン(vpe)および関連するベクトル処理システムと方法
JP2016541057A (ja) * 2013-11-15 2016-12-28 クゥアルコム・インコーポレイテッドQualcomm Incorporated ベクトルデータメモリに記憶される出力ベクトルデータのインフライト並び替えを提供するために実行ユニットとベクトルデータメモリとの間でデータフローパスにおいて並び替え回路を利用するベクトル処理エンジン(vpe)および関連するベクトルプロセッサシステムと方法
JP2019526866A (ja) * 2016-09-13 2019-09-19 エイアールエム リミテッド ベクトル積和命令

Families Citing this family (97)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8484443B2 (en) * 2008-08-15 2013-07-09 Apple Inc. Running multiply-accumulate instructions for processing vectors
GB2483902B (en) * 2010-09-24 2018-10-24 Advanced Risc Mach Ltd Vector floating point argument reduction
US8725989B2 (en) * 2010-12-09 2014-05-13 Intel Corporation Performing function calls using single instruction multiple data (SIMD) registers
KR20120077164A (ko) * 2010-12-30 2012-07-10 삼성전자주식회사 Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
CN102231624B (zh) * 2011-07-28 2014-02-12 中国人民解放军国防科学技术大学 面向向量处理器的浮点复数块fir的向量化实现方法
US9021233B2 (en) * 2011-09-28 2015-04-28 Arm Limited Interleaving data accesses issued in response to vector access instructions
GB2497070B (en) 2011-11-17 2015-11-25 Advanced Risc Mach Ltd Cryptographic support instructions
US10318291B2 (en) 2011-11-30 2019-06-11 Intel Corporation Providing vector horizontal compare functionality within a vector register
US9665371B2 (en) 2011-11-30 2017-05-30 Intel Corporation Providing vector horizontal compare functionality within a vector register
CN104040488B (zh) 2011-12-22 2017-06-09 英特尔公司 用于给出相应复数的复共轭的矢量指令
WO2013095614A1 (en) 2011-12-23 2013-06-27 Intel Corporation Super multiply add (super madd) instruction
CN104011664B (zh) 2011-12-23 2016-12-28 英特尔公司 使用三个标量项的超级乘加(超级madd)指令
US9483810B2 (en) 2011-12-28 2016-11-01 Intel Corporation Reducing the number of IO requests to memory when executing a program that iteratively processes contiguous data
US10095516B2 (en) * 2012-06-29 2018-10-09 Intel Corporation Vector multiplication with accumulation in large register space
US9355068B2 (en) 2012-06-29 2016-05-31 Intel Corporation Vector multiplication with operand base system conversion and re-conversion
US9256480B2 (en) 2012-07-25 2016-02-09 Mobileye Vision Technologies Ltd. Computer architecture with a hardware accumulator reset
EP2690548B1 (en) * 2012-07-26 2018-08-29 Mobileye Vision Technologies Ltd. Computer architecture with a hardware accumulator reset
KR101893796B1 (ko) 2012-08-16 2018-10-04 삼성전자주식회사 동적 데이터 구성을 위한 방법 및 장치
US9411584B2 (en) 2012-12-29 2016-08-09 Intel Corporation Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality
US9411592B2 (en) * 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
CN103077008B (zh) * 2013-01-30 2014-12-03 中国人民解放军国防科学技术大学 数组相加运算汇编库程序的地址对齐simd加速方法
US11593357B2 (en) * 2013-03-15 2023-02-28 Datatempest, Llc Databases and methods of storing, retrieving, and processing data
US20150143076A1 (en) * 2013-11-15 2015-05-21 Qualcomm Incorporated VECTOR PROCESSING ENGINES (VPEs) EMPLOYING DESPREADING CIRCUITRY IN DATA FLOW PATHS BETWEEN EXECUTION UNITS AND VECTOR DATA MEMORY TO PROVIDE IN-FLIGHT DESPREADING OF SPREAD-SPECTRUM SEQUENCES, AND RELATED VECTOR PROCESSING INSTRUCTIONS, SYSTEMS, AND METHODS
US9684509B2 (en) 2013-11-15 2017-06-20 Qualcomm Incorporated Vector processing engines (VPEs) employing merging circuitry in data flow paths between execution units and vector data memory to provide in-flight merging of output vector data stored to vector data memory, and related vector processing instructions, systems, and methods
US9792118B2 (en) 2013-11-15 2017-10-17 Qualcomm Incorporated Vector processing engines (VPEs) employing a tapped-delay line(s) for providing precision filter vector processing operations with reduced sample re-fetching and power consumption, and related vector processor systems and methods
GB2522990B (en) * 2013-12-20 2016-08-03 Imagination Tech Ltd Processor with virtualized instruction set architecture and methods
US10671387B2 (en) 2014-06-10 2020-06-02 International Business Machines Corporation Vector memory access instructions for big-endian element ordered and little-endian element ordered computer code and data
US20160026607A1 (en) * 2014-07-25 2016-01-28 Qualcomm Incorporated Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media
US9519460B1 (en) 2014-09-25 2016-12-13 Cadence Design Systems, Inc. Universal single instruction multiple data multiplier and wide accumulator unit
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
CN104880694A (zh) * 2015-06-04 2015-09-02 南车株洲电力机车研究所有限公司 一种信号处理的方法及系统
US10459723B2 (en) * 2015-07-20 2019-10-29 Qualcomm Incorporated SIMD instructions for multi-stage cube networks
GB2540943B (en) * 2015-07-31 2018-04-11 Advanced Risc Mach Ltd Vector arithmetic instruction
EP3125109B1 (en) 2015-07-31 2019-02-20 ARM Limited Vector length querying instruction
US10101997B2 (en) 2016-03-14 2018-10-16 International Business Machines Corporation Independent vector element order and memory byte order controls
US10459700B2 (en) 2016-03-14 2019-10-29 International Business Machines Corporation Independent vector element order and memory byte order controls
US9870341B2 (en) * 2016-03-18 2018-01-16 Qualcomm Incorporated Memory reduction method for fixed point matrix multiply
GB2548908B (en) * 2016-04-01 2019-01-30 Advanced Risc Mach Ltd Complex multiply instruction
CN107315715B (zh) * 2016-04-26 2020-11-03 中科寒武纪科技股份有限公司 一种用于执行矩阵加/减运算的装置和方法
WO2018012828A1 (ko) * 2016-07-13 2018-01-18 김태형 다기능 연산 장치 및 고속 푸리에 변환 연산 장치
US11023231B2 (en) * 2016-10-01 2021-06-01 Intel Corporation Systems and methods for executing a fused multiply-add instruction for complex numbers
KR101971173B1 (ko) * 2016-11-23 2019-04-22 주식회사 모르미 병렬 처리부 및 병렬 처리 장치
US10216479B2 (en) * 2016-12-06 2019-02-26 Arm Limited Apparatus and method for performing arithmetic operations to accumulate floating-point numbers
EP3336691B1 (en) 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
GB2558220B (en) * 2016-12-22 2019-05-15 Advanced Risc Mach Ltd Vector generating instruction
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
IL267998B2 (en) * 2017-02-23 2023-12-01 Advanced Risc Mach Ltd Element by vector operations in a data processing device
CN107085827B (zh) * 2017-04-27 2020-06-16 中国电子科技集团公司第二十八研究所 基于硬件平台实现的超分辨力图像复原方法
KR102343652B1 (ko) * 2017-05-25 2021-12-24 삼성전자주식회사 벡터 프로세서의 서열 정렬 방법
US20200104100A1 (en) * 2017-06-30 2020-04-02 Intel Corporation Apparatus and method for multiplication and accumulation of complex values
KR101981109B1 (ko) * 2017-07-05 2019-05-22 울산과학기술원 연산 속도를 향상시킨 simd mac 유닛, 그 동작 방법 및 simd mac 유닛의 배열을 이용한 콘볼루션 신경망 가속기
GB2564696B (en) * 2017-07-20 2020-02-05 Advanced Risc Mach Ltd Register-based complex number processing
US11042375B2 (en) * 2017-08-01 2021-06-22 Arm Limited Counting elements in data items in a data processing apparatus
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
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
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US10802826B2 (en) * 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication 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
US11074073B2 (en) * 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10749502B2 (en) * 2017-09-29 2020-08-18 Intel Corporation Apparatus and method for performing horizontal filter operations
US20190102186A1 (en) * 2017-09-29 2019-04-04 Intel Corporation Systems, apparatuses, and methods for multiplication and accumulation of vector packed unsigned values
US10552154B2 (en) 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US20190102198A1 (en) * 2017-09-29 2019-04-04 Intel Corporation Systems, apparatuses, and methods for multiplication and accumulation of vector packed signed values
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법
US10346163B2 (en) 2017-11-01 2019-07-09 Apple Inc. Matrix computation engine
US20190196829A1 (en) * 2017-12-21 2019-06-27 Elmoustapha Ould-Ahmed-Vall Apparatus and method for vector multiply and subtraction of signed doublewords
US10705839B2 (en) * 2017-12-21 2020-07-07 Intel Corporation Apparatus and method for multiplying, summing, and accumulating sets of packed bytes
US10642620B2 (en) 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product
US10970078B2 (en) 2018-04-05 2021-04-06 Apple Inc. Computation engine with upsize/interleave and downsize/deinterleave options
US10884976B2 (en) 2018-05-22 2021-01-05 Morumi Co., Ltd. Parallel processing unit and device for parallel processing
CN109214273A (zh) * 2018-07-18 2019-01-15 平安科技(深圳)有限公司 人脸图像比对方法、装置、计算机设备及存储介质
US10754649B2 (en) 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes
WO2020027785A1 (en) * 2018-07-31 2020-02-06 The University Of Tokyo Data processing apparatus
US10831488B1 (en) 2018-08-20 2020-11-10 Apple Inc. Computation engine with extract instructions to minimize memory access
US20200341772A1 (en) * 2019-04-29 2020-10-29 DeGirum Corporation Efficient Architectures For Deep Learning Algorithms
US11347511B2 (en) * 2019-05-20 2022-05-31 Arm Limited Floating-point scaling operation
CN113924622B (zh) * 2019-06-04 2022-09-09 美光科技公司 存储器阵列外围中的位串累加
US11416261B2 (en) * 2019-08-08 2022-08-16 Blaize, Inc. Group load register of a graph streaming processor
US11481223B2 (en) * 2019-08-08 2022-10-25 Blaize, Inc. Reducing operations of sum-of-multiply-accumulate (SOMAC) instructions
US11947959B2 (en) * 2019-09-10 2024-04-02 Micron Technology, Inc. Re-using processing elements of an artificial intelligence processor
US11762658B2 (en) * 2019-09-24 2023-09-19 Advanced Micro Devices, Inc. Matrix multiplication unit with flexible precision operations
US11455368B2 (en) 2019-10-02 2022-09-27 Flex Logix Technologies, Inc. MAC processing pipeline having conversion circuitry, and methods of operating same
US11010862B1 (en) 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors
US11307860B1 (en) 2019-11-22 2022-04-19 Blaize, Inc. Iterating group sum of multiple accumulate operations
US20230185531A1 (en) * 2021-12-15 2023-06-15 Flex Logix Technologies, Inc. Multiply-accumulate with broadcast data
US20230266968A1 (en) * 2022-02-21 2023-08-24 Flex Logix Technologies, Inc. Broadcast data, shared weight multiply-accumulate

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212361A (ja) * 1996-02-07 1997-08-15 Mitsubishi Electric Corp データ処理装置およびデータ処理方法
JPH10134032A (ja) * 1996-09-04 1998-05-22 Seiko Epson Corp 情報処理回路、マイクロコンピュータ及び電子機器
JP2000187583A (ja) * 1998-12-22 2000-07-04 Toshiba Corp プロセッサ
JP2000215028A (ja) * 1998-10-06 2000-08-04 Texas Instr Inc <Ti> 乗算器/アキュムレ―タ・ユニット
JP2000322235A (ja) * 1999-05-07 2000-11-24 Sony Corp 情報処理装置
JP2003122734A (ja) * 2001-10-18 2003-04-25 Sharp Corp データ処理装置
JP2006146644A (ja) * 2004-11-22 2006-06-08 Sony Corp プロセッサ

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2943464B2 (ja) * 1991-12-09 1999-08-30 松下電器産業株式会社 プログラム制御方法及びプログラム制御装置
GB2317469B (en) * 1996-09-23 2001-02-21 Advanced Risc Mach Ltd Data processing system register control
FR2790322A1 (fr) * 1999-02-26 2000-09-01 Koninkl Philips Electronics Nv Recepteur, circuit programmable et procede de calcul de filtres numeriques
US6526430B1 (en) * 1999-10-04 2003-02-25 Texas Instruments Incorporated Reconfigurable SIMD coprocessor architecture for sum of absolute differences and symmetric filtering (scalable MAC engine for image processing)
US20020010848A1 (en) * 2000-05-29 2002-01-24 Shoichi Kamano Data processing system
US7054895B2 (en) * 2001-06-21 2006-05-30 Ligos Corporation System and method for parallel computing multiple packed-sum absolute differences (PSAD) in response to a single instruction
US7376812B1 (en) 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
JP2004362086A (ja) * 2003-06-03 2004-12-24 Matsushita Electric Ind Co Ltd 情報処理装置および機械語プログラム変換装置
US7480690B2 (en) * 2003-12-29 2009-01-20 Xilinx, Inc. Arithmetic circuit with multiplexed addend inputs
US7434034B2 (en) * 2004-09-13 2008-10-07 Ati Technologies Inc. SIMD processor executing min/max instructions
CN101416216B (zh) * 2006-03-30 2012-11-21 日本电气株式会社 并行图像处理系统控制方法和设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212361A (ja) * 1996-02-07 1997-08-15 Mitsubishi Electric Corp データ処理装置およびデータ処理方法
JPH10134032A (ja) * 1996-09-04 1998-05-22 Seiko Epson Corp 情報処理回路、マイクロコンピュータ及び電子機器
JP2000215028A (ja) * 1998-10-06 2000-08-04 Texas Instr Inc <Ti> 乗算器/アキュムレ―タ・ユニット
JP2000187583A (ja) * 1998-12-22 2000-07-04 Toshiba Corp プロセッサ
JP2000322235A (ja) * 1999-05-07 2000-11-24 Sony Corp 情報処理装置
JP2003122734A (ja) * 2001-10-18 2003-04-25 Sharp Corp データ処理装置
JP2006146644A (ja) * 2004-11-22 2006-06-08 Sony Corp プロセッサ

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HALLVARD NAESS, A PROGRAMMABLE DSP FOR LOW-POWER, LOW-COMPLEXITY BASEBAND PROCESSING, JPN7013002210, 17 June 2006 (2006-06-17), pages 20 - 24, ISSN: 0002555690 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016537723A (ja) * 2013-11-15 2016-12-01 クゥアルコム・インコーポレイテッドQualcomm Incorporated フィルタベクトル処理動作のためのタップ付き遅延線を利用するベクトル処理エンジンと、関連するベクトル処理システムおよび方法
JP2016537724A (ja) * 2013-11-15 2016-12-01 クゥアルコム・インコーポレイテッドQualcomm Incorporated ベクトル処理動作のために実行ユニットに入力ベクトルデータのインフライトフォーマット変換を提供するためにベクトルデータメモリと実行ユニットとの間でデータフローパスにおいてフォーマット変換回路を利用するベクトル処理エンジン(vpe)および関連するベクトル処理システムと方法
JP2016541057A (ja) * 2013-11-15 2016-12-28 クゥアルコム・インコーポレイテッドQualcomm Incorporated ベクトルデータメモリに記憶される出力ベクトルデータのインフライト並び替えを提供するために実行ユニットとベクトルデータメモリとの間でデータフローパスにおいて並び替え回路を利用するベクトル処理エンジン(vpe)および関連するベクトルプロセッサシステムと方法
JP2019526866A (ja) * 2016-09-13 2019-09-19 エイアールエム リミテッド ベクトル積和命令
US11188330B2 (en) 2016-09-13 2021-11-30 Arm Limited Vector multiply-add instruction
JP7203016B2 (ja) 2016-09-13 2023-01-12 アーム・リミテッド ベクトル積和命令

Also Published As

Publication number Publication date
TW201020805A (en) 2010-06-01
EP2350813B1 (en) 2017-04-12
GB2464178A (en) 2010-04-14
WO2010040977A1 (en) 2010-04-15
GB2464292A (en) 2010-04-14
GB2464178B (en) 2012-08-08
JP5619751B2 (ja) 2014-11-05
CN102197369B (zh) 2015-04-22
EP2350813A1 (en) 2011-08-03
IL211767A0 (en) 2011-06-30
CN102197369A (zh) 2011-09-21
US8443170B2 (en) 2013-05-14
GB0818491D0 (en) 2008-11-12
US20100274990A1 (en) 2010-10-28
GB0915208D0 (en) 2009-10-07
KR20110090915A (ko) 2011-08-10

Similar Documents

Publication Publication Date Title
JP5619751B2 (ja) Simd積和演算動作を行うための装置及び方法
JP5647859B2 (ja) 乗累算演算を実行するための装置および方法
CN109661647B (zh) 数据处理装置和方法
US7376812B1 (en) Vector co-processor for configurable and extensible processor architecture
US8271571B2 (en) Microprocessor
US7937559B1 (en) System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes
US7814297B2 (en) Algebraic single instruction multiple data processing
US8200948B2 (en) Apparatus and method for performing re-arrangement operations on data
JP2009527035A (ja) マイクロプロセッサにおけるパックされた加減演算
JP2019511056A (ja) 複素数乗算命令
Cheikh et al. Efficient mathematical accelerator design coupled with an interleaved multi-threading RISC-V microprocessor
JP3723115B2 (ja) 単一命令多重データ処理
EP1936492A1 (en) SIMD processor with reduction unit
Cheema et al. Application-specific SIMD synthesis for reconfigurable architectures
Chiu et al. A multi-streaming SIMD architecture for multimedia applications
Takala General-purpose DSP processors
Tyamanavar et al. FPGA Implementation of a 32-Bit MIPS Processor
KR100343459B1 (ko) 자바 프로세서
Sohail et al. Using DSP-ASIP for Image Processing Applications
Subbanagari A special unit to speed up a DSP processor
Simha The Design of a Custom 32-Bit SIMD Enhanced Digital Signal Processor
WO2004027602A1 (en) System and method for a fully synthesizable superpipelined vliw processor
Grigore et al. Implementing a complex FIR filter on a novel parallel DSP architecture
JP2001034603A (ja) 積和演算処理装置
Gnatyuk et al. A Multimedia DSP processor design

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120314

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130606

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130618

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130823

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131218

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140407

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140707

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140714

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140725

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140917

R150 Certificate of patent or registration of utility model

Ref document number: 5619751

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250