JP2010539593A - 重複オペランドを使用したsimdの内積演算 - Google Patents

重複オペランドを使用したsimdの内積演算 Download PDF

Info

Publication number
JP2010539593A
JP2010539593A JP2010524899A JP2010524899A JP2010539593A JP 2010539593 A JP2010539593 A JP 2010539593A JP 2010524899 A JP2010524899 A JP 2010524899A JP 2010524899 A JP2010524899 A JP 2010524899A JP 2010539593 A JP2010539593 A JP 2010539593A
Authority
JP
Japan
Prior art keywords
source register
vector
subset
vector elements
dot product
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
JP2010524899A
Other languages
English (en)
Other versions
JP5201641B2 (ja
JP2010539593A5 (ja
Inventor
シー. モイヤー、ウィリアム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NXP USA Inc
Original Assignee
NXP USA Inc
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 NXP USA Inc filed Critical NXP USA Inc
Publication of JP2010539593A publication Critical patent/JP2010539593A/ja
Publication of JP2010539593A5 publication Critical patent/JP2010539593A5/ja
Application granted granted Critical
Publication of JP5201641B2 publication Critical patent/JP5201641B2/ja
Expired - Fee Related 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/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
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register

Landscapes

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

Abstract

データ処理システム(10)は、複数の汎用レジスタ(34)と、少なくとも2つの内積を同時に実行するためのベクトル内積命令を含む1つ以上の命令を実行するためのプロセッサ回路とを含む。ベクトル内積命令は、各々複数のベクトル要素を格納するための第1および第2のソースレジスタを特定する。第1の内積は、第1のソースレジスタのベクトル要素の第1のサブセットと第2のソースレジスタのベクトル要素の第1のサブセットとの間で実行され、第2の内積は、第1のソースレジスタのベクトル要素の第2のサブセットと第2のソースレジスタのベクトル要素の第2のサブセットとの間で実行される。第2のソースレジスタの第1および第2のサブセットは異なり、第2のソースレジスタの第1および第2のサブセットの少なくとも2つのベクトル要素が重複している。

Description

本開示は、一般にデータ処理システムに関し、より具体的には、データ処理システム内で重複オペランドを用いたSIMDの内積演算に関する。
ベクトルの複数要素に対する演算の並行実行を可能にすることにより、データ処理システムの性能向上を実現することができる。例えば、単一命令複数データ(SIMD)スカラプロセッサ(「ショートベクトル・マシン」とも称される)は、任意の既存スカラ汎用レジスタ(GPR)を使用しつつ、限られたベクトル処理を許容する。例えば、32個のスカラ64ビットGPRを有するデータ処理システムにおいて、各スカラレジスタは、2つの32ビットベクトル要素、4つの16ビットベクトル要素、または8つの8ビットベクトル要素を保持することが可能であり、それによって2つの32ビットベクトル演算、4つの16ビットベクトル演算、または8つの8ビットベクトル演算を実行可能である。
SIMDアーキテクチャは、線形フィルタを広範囲に使用する画像処理や他のアルゴリズムなど、様々なアルゴリズムの性能を強化するのに適している。ただし、基底のハードウェアベクトルの次元で、これらのアルゴリズム内で処理される配列次元の効率的なマッピングが許容されないと、非効率が生まれる。
本発明の実施形態に係るデータ処理システムをブロック図形式で表す図である。 本発明の実施形態に係る図1のデータ処理システムによって実行可能なSIMD内積命令を表す図である。 本発明の実施形態に係るSIMD内積演算時における図1の実行ユニットとスカラ・レジスタ・ファイルとの一部をブロック図形式で表した図である。 本発明の実施形態に係るオフセットを使用したSIMD内積演算時における図1の実行ユニットとスカラ・レジスタ・ファイルとの一部をブロック図形式で表した図である。
本発明を添付の図に一例として示すが、これらは本発明を制限するものでない。添付の図において、同様の参照符号は同様の要素を表す。図内の要素は、簡潔化と明瞭化のために示されるものであり、必ずしも正しいスケールで描かれてはいない。
利用可能なデータ並列が多いので、SIMD演算は、ベクトル×行列演算や行列×行列演算の性能向上を見込むことができる。これらの演算は、画像処理アルゴリズムなど、様々なアルゴリズムで広く使用されている。例えば、現在の画像処理アルゴリズムおよび他のアルゴリズムは、特徴認識プロセスの一部として線形フィルタを広く使用する。ただし、基底のハードウェアベクトルの次元で、これらのアルゴリズム内で処理される配列または行列次元の効率的なマッピングが許容されないと、非効率が生まれることがある。例えば、現在利用可能なあるSIMDアーキテクチャは、8バイトのベクトル(各々が8バイトのベクトル要素)をサポートする。このアーキテクチャでは、上位4つのベクトル要素と下位4つのベクトル要素とで独立した内積演算の実行を処理する命令が提供される。これは、4×4の行列と4要素ベクトルでの演算では非常に効率的だが、画像処理アルゴリズムで一般に使用される3×3および5×5の行列での演算では効率が低下する。
例えば、多くの画像処理アルゴリズムで、演算は、あるピクセルとその直近の8個(つまり3×3行列を伴う)または近隣の24個(つまり5×5の行列を伴う)のピクセルで実行される。5×5の線形フィルタを使用した場合には、3×3の線形フィルタと比較して、人為的な影響の少ない良好な結果が生成されるのが一般的だが、効率が悪く、必要な計算が多い。そのため、本発明の一実施形態では、現在利用可能なSIMDアーキテクチャを使用して、5×5の行列演算の効率が3×3の行列演算の効率と同等またはそれを上回るような改良型SIMD内積命令が提供される。一実施形態において、この効率改善は、SIMDアーキテクチャ内で2つの追加8ビット×8ビット乗算器だけを犠牲にして実現することができる。
本明細書で使用されているとおり、「バス」という用語は、データ、アドレス、コントロール、またはステータスなど1つ以上の各種情報を転送する目的で使用され得る複数の信号または導体を意味する目的で使用される。本明細書で述べられている導体は、単一の導体、複数の導体、一方向性導体、または双方向性導体であることに関連して例示または記載されている場合がある。ただし、実施形態が異なれば、導体の実装形態も異なる場合がある。例えば、双方向性導体ではなく、個別の一方向性の導体を使用することがあり、その逆もあり得る。また、複数の導体に代えて、連続方式または時間多重化方式で多重信号を転送する単一の導体を使用してもよい。同様に、多重信号を伝達する単一の導体を、これらの信号のサブセットを伝達する各種導体に分離してもよい。そのため、信号を伝送するための数々のオプションが存在する。
図1は、本発明の一実施形態によるデータ処理システム10をブロック図形式で表している。データ処理システム10は、プロセッサ14と、メモリ12と、入出力装置(I/O)16と、他の周辺機器18と、システムバス20とを含む。メモリ12は導体22を介してシステムバス20に双方向に連結され、I/O16は導体24を介してシステムバス20に双方向に連結され、他の周辺機器18は導体26を介してシステムバス20に双方向に連結され、プロセッサ14は導体58を介してシステムバス20に双方向に連結されている。一実施形態において、他の周辺機器18は1つ以上の周辺機器を含んでもよく、各々は、汎用非同期送受信回路(UART)、リアル・タイム・クロック(RTC)、キーボードコントローラ、他のメモリなど、任意の種類の周辺機器であってよい。他の周辺機器18の一部または全部は、導体62を介してデータ処理システム10に外部情報を通信してもよい。I/O回路16は、例えば導体60を介してデータ処理システム10に外部情報を送受信する任意の種類のI/O回路を含んでもよい。メモリ12は、読み取り専用メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、不揮発性メモリ(フラッシュなど)等、任意の種類のメモリであってよい。データ処理システム10は、図示されている以外の要素を含んでもよく、含む要素が図示されている要素より多くても少なくてもよい。例えば、データ処理システム10は、任意の数のメモリまたはプロセッサを含んでもよい。
プロセッサ14は、例えば、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサなど、任意の種類であってよい。一実施形態において、プロセッサ14は、プロセッサコアまたはプロセッサ回路と呼ばれることもある。別の実施形態において、プロセッサ14は、マルチプロセッサデータ処理システムにおける多数のプロセッサの1つであってもよい。さらに、図示されてはいないものの、プロセッサ14はパイプライン型プロセッサであってもよい。図1に示す一実施形態において、プロセッサ14は、制御ユニット28と、命令ユニット30と、実行ユニット32と、スカラ・レジスタ・ファイル34と、バス・インタフェース・ユニット(BIU)36と、ロード/ストアユニット38とを含む。制御ユニット28は、導体40を介して命令ユニット30に、導体42を介して実行ユニット32に、導体46を介してスカラ・レジスタ・ファイル34に、そして導体48を介してロード/ストアユニット38に双方向に連結される。実行ユニット32は、導体44を介してスカラ・レジスタ・ファイル34に双方向に連結され、スカラ・レジスタ・ファイル34は、導体50を介してロード/ストアユニット38に双方向に連結される。BIU36は、導体54を介して命令ユニット30に、導体52を介してロード/ストアユニット38に双方向に連結される。プロセッサ14は、導体58に連結されている導体56を介して、システムバス20と双方向に通信することができる。なお、プロセッサ14は、例示されているよりも多くの回路を含んでもよく、追加回路は導体58に連結されてもよい。すなわち、導体56は、導体58の全体または一部を介してシステムバス20と通信してもよい。なお、プロセッサ14の全体または一部は、処理回路と呼ばれることもある。
演算時、命令ユニット30は、BIU36とシステムバス20とを介して、メモリ12などのメモリから命令をフェッチし、制御ユニット28との間で制御情報を送受信する。命令ユニット30は、従来技術において公知の任意の種類の命令ユニットであってよく、従来技術において公知のとおりに動作するため、本明細書では詳しくは説明しない。命令ユニット30は制御ユニット28に命令を提供し、制御ユニット28は、受信したこれらの命令の実行を、例えば実行ユニット32やロード/ストアユニット38を通じて制御する。実行ユニット32およびロード/ストアユニット38はともに、必要に応じて、スカラ・レジスタ・ファイル34と直接的に、または制御ユニット28を介して通信することができる。例えば、制御ユニット28は、ロード/ストアユニット38とBIU36とを介して、命令を実行するとき必要に応じて(メモリ12などの)メモリからスカラ・レジスタ・ファイル34内のレジスタにデータをロードすることができるとともに、命令を実行するとき必要に応じて、スカラ・レジスタ・ファイル34内のレジスタから(メモリ12などの)メモリにデータをストアすることができる。例えば、一実施形態では、ロード/ストアユニット38は、制御ユニット28から導体48を介して提供された制御情報に基づき、導体50を介してスカラ・レジスタ・ファイル34と直接通信する(それによってデータを読み書きする)ことができる。実行ユニット32は、スカラ・レジスタ・ファイル34内に記憶(ストア)されたデータを使用して、算術、論理、シフト、または他の演算を実行することができ、制御ユニット28を経由して命令ユニット30から受信した命令を実行するために、必要に応じてスカラ・レジスタ・ファイル34内のレジスタに結果をストアすることができる。実行ユニット32は、例えば、算術論理ユニット(ALU)や浮動小数点ユニット等を含んでもよく、これらのユニットは、例えば、乗算器、加算器、アキュムレータ、中間結果用の記憶装置等を含んでもよい。
スカラ・レジスタ・ファイル34は、N個(Nは1以上の任意の整数)の汎用レジスタ(GPR)を含む。一実施形態において、スカラ・レジスタ・ファイル34は、32個の64ビット・レジスタを含む。本明細書で使用されるスカラレジスタは、1つの1次元マップを持ち、したがって1行のデータだけを保持するレジスタ(1×Mビットレジスタなど)を表す。Mは1以上の任意の整数を取り得る。一実施形態において、Mは64であり、したがって各レジスタは、64ビット量を格納することができる。スカラ・レジスタ・ファイル34は、導体46を介して、制御ユニット28との間で制御情報またはデータを送受信することができる。
プロセッサ14の動作は一般に当業者であれば理解し得る。そのため、本明細書では、プロセッサ14について、図2から図4を参照して記載されている様々な実施形態を理解する上で必要な部分を除き、さらに詳しくは記載しない。また、スカラ汎用レジスタファイルに格納されているオペランドを有するデータ処理システムの既存設計は、本明細書に記載されている内積命令を実行するために、必要に応じて変更してもよいという点に注意されたい。さらに、スカラ・レジスタ・ファイルを使用してもよいことから、現在の既存デザインを、本明細書に記載される命令を許容するように改変してもよいという点にも注意されたい(ただし、本明細書に記載されている実施形態は、任意の種類のレジスタファイルで使用してもよく、スカラ・レジスタ・ファイルだけに限定されないという点に注意されたい)。
図2は、図1のプロセッサ14などの処理回路によって実行され得る内積命令を表している。例えば、この命令は、この命令を制御ユニット28に適宜提供する命令ユニット30によってフェッチされる。そのため、制御ユニット28は、後でさらに詳述するように、受信した命令を実行するように必要に応じてロード/ストアユニット38と実行ユニット32とに対して指示し、データをストアするために必要に応じてスカラ・レジスタ・ファイル34を使用することができる。なお、本明細書で使用されるベクトル要素(またはレジスタ要素)は、最大でもスカラGPRのサイズまでの要素を表すが、GPRのサイズより小さいこともある。例えば、スカラ・レジスタ・ファイル34が64ビット・レジスタ(M=64)を含む場合には、ベクトル要素が64ビット以下のサイズということもある。例えば、1つの64ビットGPRが8つのベクトル要素を保持できるように、ベクトル要素が1バイト(8ビット)ということもある。また、1つの64ビットGPRが4つのベクトル要素を保持できるように、ベクトル要素がハーフワード(16ビット)ということもある。同様に、1つの64ビットGPRが2つの要素を保持できるように、ベクトル要素がワード(32ビット)ということもある。また、本明細書で使用されているとおり、バイトは「b」、ハーフワードは「h」、ワードは「w」で表されるという点に注意されたい(なお、代替実施形態において、ワードまたはハーフワードの定義が異なる場合もあり、例えば、ワードが32ビットではなく16ビットを表すことがあるが、本明細書では、説明を容易にするために、ワードは32ビットを表す)。
図2は、内積命令evdotp5b[a]を示す。この命令は、2つの同時5バイトベクトル内積を実行する。一実施形態において、evdotp5b[a]は、宛先レジスタ(rD)と、2つのソースレジスタ(rAおよびrB)と、オフセットとを指定することができる32ビット命令である。命令の末尾に「a」がある場合(evdot5baなど)には蓄積を表し、命令の末尾に「a」がない場合(evdot5bなど)には蓄積を表さない。図2の実施形態に示すとおり、evdotp5b[a]命令は、演算コード、宛先レジスタ(rD)、2つのソースレジスタ(rAおよびrB)、オフセット、Aビット、サブ演算コードなど、様々なフィールドを含む。なお、代替実施形態において、フィールドの配置が異なってもよく、異なる数のビットを使用して、命令と、図2に示される配置以外の様々なフィールドの各々とを定義してもよい。
図2の命令は、2つの5バイト同時内積演算を実行する。宛先rDのワードごとに、rAにおける5バイトペアの符号付き整数ベクトル要素と、rBにおける符号無し整数ベクトル要素とが乗算され、5つの16ビットの中間積を生成する。これらの中間積は、32ビットまで符号拡張が可能で、合算されて2つの和を生成する。命令に「a」がない場合には、蓄積が実行されないため、中間積の2つの合計の各々はrDの対応ワードに配置される。すなわち、2つの合計のうちの一方は、ビット位置0〜31など、rDの第1のワード要素に格納されるのに対し、2つの命令結果の他方は、ビット位置32〜63など、rDの第2のワード要素に格納される。命令に「a」がある場合には、蓄積が実行される。この場合、2つの和の各々は、アキュムレータ(ACC1またはACC2)の対応ワードに追加されて、rDの対応ワードに格納される。rDでの結果も、その後アキュムレータに配置される。
一実施形態において、rAの5つのベクトル要素は、同じものが両方の同時内積演算で使用されるのに対し、rBの5つのベクトル要素は、2つの異なるサブセットが2つの同時内積演算に使用される。すなわち、この実施形態においては、rBの5つのベクトル要素の第1のサブセットが2つの同時内積演算のうちの一方に使用され、rBの5つのベクトル要素の第2のサブセットが2つの同時内積演算の他方に使用される。一実施形態において、第1のサブセットおよび第2のサブセットは、重複しているベクトル要素を含む。例えば、図3を参照して後述するとおり、rAでは最初の5つのベクトル要素が同時内積演算の両方に使用できるのに対し、rBの第1のサブセットは、rBの最初の5つのベクトル要素を含むことができ、rBの第2のサブセットは、rBの第2から第6のベクトル要素をrBに含むことができる。なお、この実施形態においては、同時内積演算に使用されるrBのベクトル要素の2つのサブセットが、rB内で1要素ずつ相互にシフトされるだけである。そのため、rBの第1および第2のサブセットにおける5つのベクトル要素のうち、4つは重複する。一実施形態において、2つの同時内積演算に使用されるオペランドは、rAの係数セットとrBのデータサンプルとから2つの出力値を計算して、5×5のフィルタリング演算を支援するように選択されてもよい。一実施形態において、第1のピクセル値X(rBの第3のベクトル要素に対応する第1のピクセル値X)と同じ行にある直近の近隣値が、1つの計算内積に関与してもよく、その一方で、第2のピクセル値Y(rBの第4の要素に対応する第2のピクセル値Y)の直近の近隣値が、第2の同時内積演算に関与して、2つの独立出力値を生成してもよい。この場合、XとYとの隣接値が重複するため、rBの重複するベクトル要素は、同時内積計算に関与している。
オフセットフィールドは、rAのどの5つのベクトル要素が内積演算のために選択されるべきかを表す。すなわち、オフセットがゼロである場合やオフセットが存在しない場合には、(図3の実施例に示すとおり)第1の5つのベクトル要素が用いられる。ただし、オフセットが2である場合には、(図4の実施例に示すとおり)第3から第7のベクトル要素が使用される。2というオフセット(オフセット=2)を使用する図4を参照して記載されるとおり、rAの第3から第7のベクトル要素が両方の同時内積演算に使用されるのに対し、rBの第1のサブセットは、rBの第3から第7のベクトル要素を含み、rBの第2のサブセットは、rBの第4から第8のベクトル要素を含む。なお、図3と図4との実施例において、rAの5つのベクトル要素とrBの第1のサブセットの5つのベクトル要素とは、同じベクトル要素位置(すなわち図3の第1の5つのベクトル要素および図4の第3から第7までのベクトル要素)に対応する。ただし、代替実施形態において、rB用の追加オフセットフィールドを使用するなど、このことが当てはまらない場合もある。代替実施形態においては、rAのベクトル要素およびrBのベクトル要素用の独立オフセットフィールドが指定されてもよい。加えて、代替実施形態が提供するrBの要素の第1および第2のサブセットの重複の度合は異なってもよい。
例示されている実施形態において、rA、rB、およびrDの各々は、スカラ・レジスタ・ファイル34の内の64ビット・レジスタの1つである。また、図2の実施形態において、ソースレジスタrAは5つの符号付き整数要素を提供し、ソースレジスタrBは5つの符号無し整数要素を提供する。ただし、代替実施形態においては、rAとrBとの各々が符号付きまたは符号無しベクトル要素を格納することができ、rAとrBとの各々が分数または整数ベクトル要素を格納することができるという点に注意されたい。そのため、様々な演算コードまたはサブ演算コードエンコーディングを使用して、rAとrBとの各々が符号付きなのか符号無しなのか、あるいは分数なのか整数なのかを表してもよい。あるいは、evdotp5b[a]命令の追加フィールドを使用して、rAとrBとの各々が符号付きなのか符号無しなのか、あるいは分数なのか整数なのかを表してもよい。また、様々な演算コードまたはサブ演算コードエンコーディングあるいは追加フィールドを使用して、中間積が剰余積なのか飽和積なのか、あるいは中間積の和が実行されるのか差が実行されるのかを表してもよい。また、代替実施形態においては、オフセットフィールドが存在しなくてもよく、その場合には、rAの第1の5つのベクトル要素が常に使用される。さらに別の実施形態では、第2のオフセットフィールドが提供されて、rBのどの要素が選択されるべきかを表してもよい。また、命令のフィールドの明示に使用される命令フォーマットは様々であってよいという点に注意されたい。例えば、様々なオプションの組み合せを提供する様々な命令を一斉に使用したり、命令内の追加フィールドを使用して、ユーザが様々なオプションを選択できるようにしたりしてもよい。evdotp5b[a]の様々な演算例について、図3および図4を参照して以下説明する。
図3は、実行ユニット32およびスカラ・レジスタ・ファイル34の一部と、(蓄積が実行され、オフセットフィールドが存在しないか、ゼロとして提供される)evdotp5ba命令の演算を表すデータフロー例とを示す。図3は、ソースレジスタrAを表すレジスタ66と、ソースレジスタrBを表すレジスタ64と、第1のワードであるWORD1および第2のワードであるWORD2を有する宛先レジスタrDを表すレジスタ94とを含む。図3はまた、中間積を格納するための記憶位置68および70と、内積を格納するための記憶位置86とを含む。図3はまた、第1のワードであるACC1と第2のワードであるACC2とを含むアキュムレータ88も含む。図3はまた、2つの同時内積演算の一方を実行するのに使用される乗算器71〜75および加算器82と、2つの同時内積演算の他方の実行に使用される乗算器76〜80および加算器84とを含む。図3はまた、内積結果の各々にアキュムレータ88の値を加算してrDを更新する目的で使用される加算器90,92を含む。なお、rDが更新されると、アキュムレータ88も、更新されたrDの値で更新される。
演算時に、rA(レジスタ66)は8つのベクトル要素a0〜a7を格納し、rB(レジスタ64)は8つのベクトル要素b0〜b7を格納する。図3の実施例はオフセットを指定しないか、オフセットとしてゼロを使用するため、同時内積演算の両方がrA(a0〜a4)の第1の5つのベクトル要素を使用する。そのため、2つの同時内積演算の一方はrBの第1の5つのベクトル要素(b0〜b4)を使用するのに対し、2つの同時内積演算の他方は、rBの次の5つのベクトル要素(b1〜b5)を使用する。b1〜b5は、b0〜b4に対して1要素シフトしたものである。なお、b0〜b4は、rBの第1のサブセットと呼ばれることがあり、b1〜b5はrBの第2のサブセットと呼ばれることがある。記憶位置70は、a0〜a4およびb0〜b4という積の対に対応する5つの中間積を格納する。すなわち、乗算器76はa0をb0倍して、結果を記憶位置70の第1のフィールドに格納し、乗算器77はa1をb1倍して、結果を記憶位置70の第2のフィールドに格納し、乗算器78はa2をb2倍して、結果を記憶位置70の第3のフィールドに格納し、乗算器79はa3をb3倍して、結果を記憶位置70の第4のフィールドに格納し、乗算器80はa4をb4倍して、結果を記憶位置70の第5のフィールドに格納する。次に、これら5つの中間積は加算器84によって合計され、得られた和は記憶位置86の第1のワードに格納される。記憶位置68は、a0〜a4およびb1〜b5という積の対に対応する5つの中間積を格納する。すなわち、乗算器71はa0をb1倍して、結果を記憶位置68の第1のフィールドに格納し、乗算器72はa1をb2倍して、結果を記憶位置68の第2のフィールドに格納し、乗算器73はa2をb3倍して、結果を記憶位置68の第3のフィールドに格納し、乗算器74はa3をb4倍して、結果を記憶位置68の第4のフィールドに格納し、乗算器75はa4をb5倍して、結果を記憶位置68の第5のフィールドに格納する。次に、これらの5つの中間積は加算器82によって合計され、得られた和は記憶位置86の第2のワードに格納される。
そのため、レジスタ86は、第1の結果用の乗算器76〜80および加算器84と、第2の結果用の乗算器71〜75および加算器82とを使用して同時に実行された2つの内積結果を格納するという点に注意されたい。その後加算器90を使用して、(a0〜a4とb0〜b4との内積から得られた)第1の内積結果を、アキュムレータ88の第1のワードに格納されている対応アキュムレータ値ACC1に加算する。得られた和は、rD(レジスタ94)の第1の対応ワードWORD1に格納される。同様に、加算器92を(加算器90によって実行される加算と同時に)使用して、(a0〜a4とb1〜b5との内積から得られた)第2の内積結果を、アキュムレータ88の第2のワードに格納されている対応アキュムレータ値ACC2に加算する。得られた和は、rDの第2の対応ワードであるWORD2に格納される。その後、rDに格納された値をアキュムレータ88に格納して、ACC1とACC2との値を新しい結果で更新することができる。
なお、蓄積が実行されない実施形態においては、図3のレジスタ86がrDを表す。rDは、2つの同時内積演算の結果を直接格納する。
図4は、実行ユニット32およびスカラ・レジスタ・ファイル34の一部と、(蓄積が実行され、オフセットフィールドが2に設定される)evdotp5ba命令の演算を表す別のデータフロー例とを示す。図4の演算は、図3の演算と類似しており、同様の数字は同様の要素を表す。図4のデータフローは、オフセットとして(rAにおけるベクトル要素のオフセットに対応する)2が使用されることを除き、図3のデータフローと類似している。すなわち、a0〜a4およびb0〜b4と、a0〜a4およびb1〜b4との同時内積を実行する図3の実施例とは異なり、図4の実施例は、a2〜a6およびb2〜b6と、a2〜a6およびb3〜b7との同時内積を実行する。すなわち、使用されているrAの5つのベクトル要素がa0から2要素分オフセットされることに注意されたい。そのため、図3の実施例の対応サブセットと比較して、rBの第1のサブセットの5つのベクトル要素と、rBの第2のサブセットの5つのベクトル要素とは、2要素分オフセットされている。なお、図3の実施例に示すとおり、rBの第1のサブセット(b2−b6)と比較して、rBの第2のサブセット(b3−b7)は、rBの5つのベクトル要素のうちの4が2つの同時内積演算で重複するように1要素分シフトしている。
図4の実施例を参照すると、記憶位置70は、a2〜a6およびb2〜b6という積の対に対応する5つの中間積を格納する。すなわち、乗算器76はa2をb2倍して、結果を記憶位置70の第1のフィールドに格納し、乗算器77はa3をb3倍して、結果を記憶位置70の第2のフィールドに格納し、乗算器78はa4をb4倍して、結果を記憶位置70の第3のフィールドに格納し、乗算器79はa5をb5倍して、結果を記憶位置70の第4のフィールドに格納し、乗算器80はa6をb6倍して、結果を記憶位置70の第5のフィールドに格納する。次に、これら5つの中間積は加算器84によって合計され、得られた和は記憶位置86の第1のワードに格納される。記憶位置68は、a2〜a6およびb3〜b7という積の対に対応する5つの中間積を格納する。すなわち、乗算器71はa2をb3倍して、結果を記憶位置68の第1のフィールドに格納し、乗算器72はa3をb4倍して、結果を記憶位置68の第2のフィールドに格納し、乗算器73はa4をb5倍して、結果を記憶位置68の第3のフィールドに格納し、乗算器74はa5をb6倍して、結果を記憶位置68の第4のフィールドに格納し、乗算器75はa6をb7倍して、結果を記憶位置68の第5のフィールドに格納する。次に、これらの5つの中間積は加算器82によって合計され、得られた和は記憶位置86の第2のワードに格納される。
そのため、レジスタ86は、第1の結果用の乗算器76〜80および加算器84と、第2の結果用の乗算器71〜75および加算器82とを使用して同時に実行された2つの内積結果を格納するという点に注意されたい。その後加算器90を使用して、(a2〜a6とb2〜b6との内積から得られた)第1の内積結果を、アキュムレータ88の第1のワードに格納されている対応アキュムレータ値ACC1に加算する。得られた和は、rD(レジスタ94)の第1の対応ワードWORD1に格納される。同様に、加算器92を(加算器90によって実行される加算と同時に)使用して、(a2〜a6とb3〜b7との内積から得られた)第2の内積結果を、アキュムレータ88の第2のワードに格納されている対応アキュムレータ値ACC2に加算する。得られた和は、rDの第2の対応ワードであるWORD2に格納される。その後、rDに格納された値をアキュムレータ88に格納して、ACC1とACC2との値を新しい結果で更新することができる。
なお、蓄積が実行されない実施形態においては、図4のレジスタ86がrDを表す。rDは、2つの同時内積演算の結果を直接格納する。
なお、ベクトル要素を8つずつ格納するレジスタを使用して効率的な3×3または4×4の行列演算を提供しているシステムでは、ソースレジスタの4要素の対応する互いに素な(すなわち重複しない)セットに対して1対の内積演算が実行される場合には、8つの加算器だけが提供されるのが一般的である。ただし、このようなシステムは、5×5の行列演算(あるいは8つのベクトル要素を格納するレジスタと適合しない他の次元)では非効率的である。そのため、本明細書に記載のとおり、2つの追加乗算器(例えば75および80)とソースレジスタrBの重複サブセットを使用することにより、5×5の内積演算の効率が改善されることがある点に注意されたい。これらの種類の演算は、5×5の行列演算に大きく依存するアプリケーションで特に有用となり得る。他の次元の行列演算に大きく依存することのある他の種類の演算においては、少数の追加乗算器があり、a0〜aNおよびb0〜bNと、a0〜aNおよびb1〜b(N+1)との同時内積を実行できるevdotp5b[a]命令と同様の命令を使用することができる。また、代替実施形態において、rAおよびrBの様々なサブセットを使用することができる。例えば、図3で提供されているサブセット例rAとrBとではなく、rAの第1のサブセットおよびrBの第1のサブセットと、rAの第2のサブセットおよびrBの第2のサブセットとの同時内積を実行してもよく、rAのサブセットの各々は、同じサブセットであっても、重複する要素を有する異なるサブセットであってもよく、rBのサブセットの各々も、同じサブセットであっても、重複する要素を有する異なるサブセットであってもよい。また、rBの要素にオフセットが追加されてもよい。例えば図3では、rBに対してオフセットとして2が指定された場合、rBの第1のサブセットがb0〜b4で、第2のサブセットがb1〜b5となるのではなく、2つの内積演算の一方の第1のサブセットがb2〜b6で、他方の内積演算の第2のサブセットがb3〜b7となる。また、重複指定子が、rBの要素に追加されて、rBの第2のサブセットがrBの第1のサブセットに対してどれだけのベクトル要素分シフトするかを表してもよい。例えば図3では、rBに対して2という重複指定子が指定された場合、rBの第1のサブセットがb0〜b4で、第2のサブセットがb1〜b5となるのではなく、2つの内積演算の一方の第1のサブセットがb0〜b4で、他方の内積演算の第2のサブセットがb2〜b6となる。
以上により、重複するオペランドを2つの同時内積演算で使用する場合に、5つのベクトル要素の同時内積演算が2つ実行される5×5の内積演算など、一部の行列演算の効率を改善する命令と回路とが提供されることが理解されるべきである。すなわち、8つのベクトル要素レジスタを使用した効率的な3×3や4×4の行列演算の場合には、8つの乗算器だけがシステムで提供されるのが一般的であるが、2つの追加乗算器の存在と、重複するオペランドの使用とにより、8つのベクトル要素レジスタを使用したさらに効率的な5×5の行列演算が実現される。
記載されているevdotp5b[a]命令の変形に加え、本発明の実施形態は、1対の4×4内積計算を伴う従来の内積演算を実行するために、他の公知の命令をサポートしてもよい。4×4内積演算時には、追加乗算器が使用されないため、不要なエネルギー消費を防ぐために電源を落としたり、ゲート制御を行ったりしてもよい。追加乗算器と、関連する加算回路との有効化を、実行される演算の種類に基づいて条件化することによって、データ処理システムの電源消費を最適化してもよい。あるいは、追加乗算器の出力が実行中の命令の一部として必要でない場合には、この出力を、ゼロなど所定の出力値に強制的に制限してもよい。
一実施形態において、データ処理システムは、複数の汎用レジスタと、1つ以上の命令を実行するためのプロセッサ回路とを備える。1つ以上の命令は、少なくとも2つの内積を同時に実行するためのベクトル内積命令を含む。ベクトル内積命令は、複数の汎用レジスタから第1のソースレジスタと第2のソースレジスタとを特定する。第1のソースレジスタと第2のソースレジスタとの各々は、複数のベクトル要素を格納するためのものである。少なくとも2つの内積のうちの第1の内積は、第1のソースレジスタのベクトル要素の第1のサブセットと、第2のソースレジスタのベクトル要素の第1のサブセットとの間で実行される。少なくとも2つの内積のうちの第2の内積は、第1のソースレジスタのベクトル要素の第2のサブセットと、第2のソースレジスタのベクトル要素の第2のサブセットとの間で実行される。第2のソースレジスタのベクトル要素の第1および第2のサブセットは異なっており、第2のソースレジスタの第1および第2のサブセットの少なくとも2つのベクトル要素は重複している。
さらなる実施形態において、ベクトル内積命令は、第1の内積の結果と第2の内積の結果とを格納するための宛先レジスタをさらに特定する。
さらに別の実施形態において、プロセッサ回路はアキュムレータをさらに含み、ベクトル内積命令は、第1の内積の結果とアキュムレータの第1の値との和と、第2の内積の結果とアキュムレータの第2の値との和とを格納するための宛先レジスタをさらに特定する。
さらに別の実施形態において、第1のソースレジスタの第1および第2のサブセットは同じサブセットである。
さらに別の実施形態において、第1のソースレジスタのベクトル要素の第1のサブセットは、第2のソースレジスタのベクトル要素の第1のサブセットと同じベクトル要素位置に対応している。
さらに別の実施形態において、ベクトル内積命令は、第1のソースレジスタのどのベクトル要素を第1のソースレジスタのベクトル要素の第1のサブセットに含ませるべきかを少なくとも示す際に使用するオフセットをさらに示す。さらにまた別の実施形態において、ベクトル内積命令は、第2のソースレジスタのどのベクトル要素を第2のソースレジスタのベクトル要素の第1のサブセットに含ませるべきかを少なくとも示す際に使用する第2のオフセットをさらに示す。
さらに別の実施形態において、ベクトル内積命令は、第2のソースレジスタのどのベクトル要素を第2のソースレジスタのベクトル要素の第1のサブセットに含ませるべきかを少なくとも示す際に使用するオフセットをさらに示す。
別の実施形態において、データ処理システムは、複数の汎用レジスタと、1つ以上の命令を実行するためのプロセッサ回路とを備える。1つ以上の命令は、少なくとも2つの内積を同時に実行するためのベクトル内積命令を含む。ベクトル内積命令は、複数の汎用レジスタから第1のソースレジスタと第2のソースレジスタとを特定する。第1のソースレジスタと第2のソースレジスタとの各々は、複数のベクトル要素を格納するためのものである。少なくとも2つの内積のうちの第1の内積は、第1のソースレジスタの5つのベクトル要素の第1のサブセットと、第2のソースレジスタの5つのベクトル要素の第1サブセットとの間で実行される。少なくとも2つの内積のうちの第2の内積は、第1のソースレジスタの5つのベクトル要素の第2のサブセットと、第2のソースレジスタの5つのベクトル要素の第2サブセットとの間で実行される。第2のソースレジスタの第1および第2のサブセットの4つのベクトル要素が重複している。
別の実施形態のさらなる実施形態において、ベクトル内積命令は、第1の内積の結果と第2の内積の結果とを格納するための宛先レジスタをさらに特定する。
他の実施形態のさらに別の実施形態において、プロセッサ回路はアキュムレータをさらに含み、ベクトル内積命令は、第1の内積の結果とアキュムレータの第1の値との和と、第2の内積の結果とアキュムレータの第2の値との和とを格納するための宛先レジスタをさらに特定する。
他の実施形態のさらに別の実施形態において、第1のソースレジスタの第1および第2のサブセットは同じサブセットである。
他の実施形態のさらに別の実施形態において、第1のソースレジスタのベクトル要素の第1のサブセットは、第2のソースレジスタのベクトル要素の第1のサブセットと同じベクトル要素位置に対応している。
他の実施形態のさらに別の実施形態において、ベクトル内積命令によって特定される第1および第2のソースレジスタの各々は、8つのベクトル要素を格納するためのものであり、プロセッサ回路は10個の乗算器を備え、そのうちの5つは、第1の内積を実行するためのものであり、残りの5つは、第2の内積を実行するためのものである。
別の実施形態のさらに別の実施形態において、ベクトル内積命令は、第1または第2のソースレジスタのどのベクトル要素が、第1または第2のソースレジスタのベクトル要素の第1のサブセットに含まれるべきかを少なくとも示す際に使用するオフセットをさらに示す。
さらに別の実施形態において、同時内積演算を実行するための方法は、複数の汎用レジスタを提供すること、および1つ以上の命令を実行するためのプロセッサ回路を提供することを備える。1つ以上の命令は、少なくとも2つの内積を同時に実行するためのベクトル内積命令を含む。ベクトル内積命令は、複数の汎用レジスタから第1のソースレジスタと第2のソースレジスタとを特定する。第1のソースレジスタと第2のソースレジスタとの各々は、複数のベクトル要素を格納するためのものである。少なくとも2つの内積のうちの第1の内積は、第1のソースレジスタのベクトル要素の第1のサブセットと、第2のソースレジスタのベクトル要素の第1のサブセットとの間で実行される。少なくとも2つの内積のうちの第2の内積は、第1のソースレジスタのベクトル要素の第2のサブセットと、第2のソースレジスタのベクトル要素の第2のサブセットとの間で実行される。第2のソースレジスタの第1および第2のサブセットは異なっており、第2のソースレジスタの第1および第2のサブセットの少なくとも2つのベクトル要素は重複している。
さらに別の実施形態のさらなる実施形態において、ベクトル内積命令は、第1の内積の結果と第2の内積の結果とを格納するための宛先レジスタをさらに特定する。
さらに別の実施形態のさらに別の実施形態において、プロセッサ回路はアキュムレータをさらに含み、ベクトル内積命令は、第1の内積の結果とアキュムレータの第1の値との和と、第2の内積の結果とアキュムレータの第2の値との和とを格納するための宛先レジスタをさらに特定する。
さらに別の実施形態のさらに別の実施形態において、第1のソースレジスタの第1および第2のサブセットは同じサブセットである。
さらに別の実施形態のさらに別の実施形態において、ベクトル内積命令は、第1または第2のソースレジスタのどのベクトル要素が、第1または第2のソースレジスタのベクトル要素の第1のサブセットに含まれるべきかを少なくとも示す際に使用するオフセットをさらに示す。
本発明を実装する装置は、ほとんどの場合、当業者に公知の電子部品と回路とから成るので、回路の詳細は、本発明の基底概念の理解と認識のため、および本発明の教示の混乱または逸脱を防ぐために上記のとおり必要とみなされる程度以上には説明しない。
上記実施形態の一部は、適宜様々な情報処理システムを使用して実装してもよい。例えば、図1およびその説明は、例示的な情報処理SIMDアーキテクチャについて記載しているものの、この例示的なアーキテクチャは、本発明の各種態様について述べる際の有用な参考情報を提供する目的でのみ提示されている。当然のことながら、アーキテクチャに関する説明は、単純化されており、本発明に従って使用できる多くの様々な種類の適切なアーキテクチャの1つにすぎない。当業者であれば、論理ブロック間の境界が単なる例示であり、代替実施形態において、論理ブロックまたは回路要素を統合したり、各種論理ブロックまたは回路要素に割り当てる機能を変更したりしてもよいことを認識し得る。
このように、本明細書に描写されているアーキテクチャは単なる例示であり、実際、同じ機能を実現するアーキテクチャが他にも数多く実装可能であることを理解すべきである。抽象的であるが確かな意味で、同じ機能を実現するための構成部品のいかなる配置も所望の機能が実現されるように効果的に「関連付け」られる。それ故、特定の機能を実現するために結合されている本明細書のいずれか2つの構成部品は、アーキテクチャまたは中間構成部品に関係なく、所望の機能が実現されるように相互に「関連付け」られているものとみなすことができる。同様に、そのように関連付けられているいずれか2つのコンポーネントは、所望の機能を実現するために、相互に「動作可能に接続」または「動作可能に連結」されているとみなすことができる。
また、例えば一実施形態において、システム10の図示要素は、単一の集積回路上または同一装置内に存在する回路である。あるいは、システム10が、任意の数の別個の集積回路や、相互に接続されている別個の装置を含んでもよい。例えば、メモリ12は、プロセッサ14と同じ集積回路上または別個の集積回路上に位置してもよく、システム10の他の要素とは別の周辺機器またはスレーブ内に位置してもよい。他の周辺機器18および入出力回路16も、別個の集積回路または装置に位置してもよい。また、例えばシステム10またはその一部が、物理回路の、あるいは物理回路に変換可能な論理表現のソフト表示またはコード表示であってもよい。そのため、システム10は、任意の適切な種類のハードウェア記述言語で具現化されてもよい。
当業者は、上述の演算の機能間の境界が単なる例示にすぎないことを認識し得る。複数の演算の機能は単一の演算に統合されてもよく、単一の演算の機能が追加演算に分散されてもよい。さらに、代替実施形態は、特定の演算に関する複数の事例を含んでもよく、演算の順序は、他の各種実施形態で変更してもよい。
一実施形態において、システム10は、パーソナル・コンピュータ・システムなどのコンピュータシステムである。他の実施形態が、異なる種類のコンピュータシステムを含んでもよい。コンピュータシステムは、1人以上のユーザに独立した計算能力を与えるように設計され得る情報処理システムである。コンピュータシステムは、メインフレーム、ミニコンピュータ、サーバ、ワークステーション、パーソナルコンピュータ、ノートパッド、パーソナル携帯情報端末、電子ゲーム機、自動車および他の組み込みシステム、携帯電話および他の各種無線機器を含むがこれらに限定されない数々の形態であってよい。典型的なコンピュータシステムは、少なくとも1つの処理ユニットと、関連付けられているメモリと、いくつかの入出力(I/O)機器を含む。
本発明は、本明細書において特定の実施形態を参照して記載されているものの、請求項に定める本発明の範囲を逸脱しなければ、各種変形および変更を行うことができる。例えば、他のSIMDアーキテクチャを使用したり、異なるベクトル要素のサブセットを定義したりしてもよい。したがって、仕様および図は、限定的な意味ではなく、例示的な意味で考慮されるべきであり、このような変形はすべて本発明の範囲内に含まれるものと意図される。本明細書において特定の実施形態に関して記載されているいかなる利点、効果、または課題への解決策も、任意またはすべての請求項の必須の、あるいは本質的な特徴または要素として解釈されることを意図するものではない。
本明細書で使用されている「連結」という用語は、直接連結または機械式連結に限定されることを意図するものではない。本明細書で使用されている「1つの」という用語は、1つまたはそれ以上と定義される。特に明記しない限り、「第1」および「第2」などの用語は、それらの語句が修飾する要素を区別する目的で使用されている。そのため、これらの用語は、そのような要素の時間的またはその他の優先順位を表すことを必ずしも意図するものではない。

Claims (20)

  1. データ処理システムであって、
    複数の汎用レジスタと、
    1つ以上の命令を実行するためのプロセッサ回路と
    を備え、前記1つ以上の命令は、少なくとも2つの内積を同時に実行するためのベクトル内積命令を含み、前記ベクトル内積命令は、前記複数の汎用レジスタから第1のソースレジスタと第2のソースレジスタとを特定し、前記第1のソースレジスタと前記第2のソースレジスタとの各々は、複数のベクトル要素を格納するためのものであり、
    前記少なくとも2つの内積のうちの第1の内積は、前記第1のソースレジスタのベクトル要素の第1のサブセットと、前記第2のソースレジスタのベクトル要素の第1のサブセットとの間で実行され、
    前記少なくとも2つの内積のうちの第2の内積は、前記第1のソースレジスタのベクトル要素の第2のサブセットと、前記第2のソースレジスタのベクトル要素の第2のサブセットとの間で実行され、
    前記第2のソースレジスタの前記第1および第2のサブセットは異なっており、
    前記第2のソースレジスタの前記第1および第2のサブセットの少なくとも2つのベクトル要素が重複している、データ処理システム。
  2. 前記ベクトル内積命令が、前記第1の内積の結果と前記第2の内積の結果とを格納するための宛先レジスタをさらに特定する、請求項1に記載のデータ処理システム。
  3. 前記プロセッサ回路がアキュムレータをさらに含み、前記ベクトル内積命令が、前記第1の内積の結果と前記アキュムレータの第1の値との和と、前記第2の内積の結果と前記アキュムレータの第2の値との和とを格納するための宛先レジスタをさらに特定する、請求項1に記載のデータ処理システム。
  4. 前記第1のソースレジスタの前記第1および第2のサブセットが同じサブセットである、請求項1に記載のデータ処理システム。
  5. 前記第1のソースレジスタのベクトル要素の第1のサブセットが、前記第2のソースレジスタのベクトル要素の第1のサブセットと同じベクトル要素位置に対応している、請求項1に記載のデータ処理システム。
  6. 前記ベクトル内積命令は、前記第1のソースレジスタのどのベクトル要素を前記第1のソースレジスタのベクトル要素の第1のサブセットに含ませるべきかを少なくとも示すために使用するオフセットをさらに示す、請求項1に記載のデータ処理システム。
  7. 前記ベクトル内積命令は、前記第2のソースレジスタのどのベクトル要素を前記第2のソースレジスタのベクトル要素の第1のサブセットに含ませるべきかを少なくとも示すために使用するオフセットをさらに示す、請求項6に記載のデータ処理システム。
  8. 前記ベクトル内積命令は、前記第2のソースレジスタのどのベクトル要素を前記第2のソースレジスタのベクトル要素の第1のサブセットに含ませるべきかを少なくとも示すために使用するオフセットをさらに示す、請求項1に記載のデータ処理システム。
  9. 複数の汎用レジスタと、
    1つ以上の命令を実行するためのプロセッサ回路と
    を備え、前記1つ以上の命令は、少なくとも2つの内積を同時に実行するためのベクトル内積命令を含み、前記ベクトル内積命令は、前記複数の汎用レジスタから第1のソースレジスタと第2のソースレジスタとを特定し、前記第1のソースレジスタと前記第2のソースレジスタとの各々は、複数のベクトル要素を格納するためのものであり、
    前記少なくとも2つの内積のうちの第1の内積は、前記第1のソースレジスタの5つのベクトル要素の第1のサブセットと、前記第2のソースレジスタの5つのベクトル要素の第1のサブセットとの間で実行され、
    前記少なくとも2つの内積のうちの第2の内積は、前記第1のソースレジスタの5つのベクトル要素の第2のサブセットと、前記第2のソースレジスタの5つのベクトル要素の第2のサブセットとの間で実行され、
    前記第2のソースレジスタの前記第1および第2のサブセットの4つのベクトル要素が重複している、データ処理システム。
  10. 前記ベクトル内積命令が、前記第1の内積の結果と前記第2の内積の結果とを格納するための宛先レジスタをさらに特定する、請求項9に記載のデータ処理システム。
  11. 前記プロセッサ回路がアキュムレータをさらに含み、前記ベクトル内積命令が、前記第1の内積の結果と前記アキュムレータの第1の値との和と、前記第2の内積の結果と前記アキュムレータの第2の値との和とを格納するための宛先レジスタをさらに特定する、請求項9に記載のデータ処理システム。
  12. 前記第1のソースレジスタの前記第1および第2のサブセットが同じサブセットである、請求項9に記載のデータ処理システム。
  13. 前記第1のソースレジスタのベクトル要素の第1のサブセットが、前記第2のソースレジスタのベクトル要素の第1のサブセットと同じベクトル要素位置に対応している、請求項9に記載のデータ処理システム。
  14. 前記ベクトル内積命令によって特定される前記第1および第2のソースレジスタの各々は8つのベクトル要素を格納するためのものであり、前記プロセッサ回路は10個の乗算器を含み、10個の乗算器のうちの5つは前記第1の内積を実行するためのものであり、残りの5つは前記第2の内積を実行するためのものである、請求項9に記載のデータ処理システム。
  15. 前記ベクトル内積命令は、前記第1または第2のソースレジスタのどのベクトル要素を前記第1または第2のソースレジスタのベクトル要素の前記第1のサブセットに含ませるべきかを少なくとも示すために使用するオフセットをさらに示す、請求項9に記載のデータ処理システム。
  16. 同時内積演算を実行するための方法であって、
    複数の汎用レジスタを提供すること、
    1つ以上の命令を実行するためのプロセッサ回路を提供すること
    を備え、前記1つ以上の命令は、少なくとも2つの内積を同時に実行するためのベクトル内積命令を含み、前記ベクトル内積命令は、前記複数の汎用レジスタから第1のソースレジスタと第2のソースレジスタとを特定し、前記第1のソースレジスタと前記第2のソースレジスタとの各々は、複数のベクトル要素を格納するためのものであり、
    前記少なくとも2つの内積のうちの第1の内積は、前記第1のソースレジスタのベクトル要素の第1のサブセットと、前記第2のソースレジスタのベクトル要素の第1のサブセットとの間で実行され、
    前記少なくとも2つの内積のうちの第2の内積は、前記第1のソースレジスタのベクトル要素の第2のサブセットと、前記第2のソースレジスタのベクトル要素の第2のサブセットとの間で実行され、
    前記第2のソースレジスタの前記第1および第2のサブセットは異なっており、
    前記第2のソースレジスタの前記第1および第2のサブセットの少なくとも2つのベクトル要素が重複している、方法。
  17. 前記ベクトル内積命令が、前記第1の内積の結果と前記第2の内積の結果とを格納するための宛先レジスタをさらに特定する、請求項16に記載の方法。
  18. 前記プロセッサ回路がアキュムレータをさらに含み、前記ベクトル内積命令が、前記第1の内積の結果と前記アキュムレータの第1の値との和と、前記第2の内積の結果と前記アキュムレータの第2の値との和とを格納するための宛先レジスタをさらに特定する、請求項16に記載の方法。
  19. 前記第1のソースレジスタの前記第1および第2のサブセットが同じサブセットである、請求項16に記載の方法。
  20. 前記ベクトル内積命令は、前記第1または第2のソースレジスタのどのベクトル要素を前記第1または第2のソースレジスタのベクトル要素の前記第1のサブセットに含ませるべきかを少なくとも示すために使用するオフセットをさらに示す、請求項16に記載の方法。
JP2010524899A 2007-09-13 2008-07-28 重複オペランドを使用したsimdの内積演算 Expired - Fee Related JP5201641B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/854,630 2007-09-13
US11/854,630 US8631224B2 (en) 2007-09-13 2007-09-13 SIMD dot product operations with overlapped operands
PCT/US2008/071327 WO2009035774A1 (en) 2007-09-13 2008-07-28 Simd dot product operations with overlapped operands

Publications (3)

Publication Number Publication Date
JP2010539593A true JP2010539593A (ja) 2010-12-16
JP2010539593A5 JP2010539593A5 (ja) 2011-09-15
JP5201641B2 JP5201641B2 (ja) 2013-06-05

Family

ID=40452385

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010524899A Expired - Fee Related JP5201641B2 (ja) 2007-09-13 2008-07-28 重複オペランドを使用したsimdの内積演算

Country Status (4)

Country Link
US (1) US8631224B2 (ja)
JP (1) JP5201641B2 (ja)
KR (1) KR101482540B1 (ja)
WO (1) WO2009035774A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019526866A (ja) * 2016-09-13 2019-09-19 エイアールエム リミテッド ベクトル積和命令

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8595467B2 (en) * 2009-12-29 2013-11-26 International Business Machines Corporation Floating point collect and operate
US8478969B2 (en) * 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
JP5528976B2 (ja) 2010-09-30 2014-06-25 株式会社メガチップス 画像処理装置
WO2013101018A1 (en) 2011-12-29 2013-07-04 Intel Corporation Dot product processors, methods, systems, and instructions
US9355061B2 (en) 2014-01-28 2016-05-31 Arm Limited Data processing apparatus and method for performing scan operations
GB2523805B (en) * 2014-03-06 2021-09-01 Advanced Risc Mach Ltd Data processing apparatus and method for performing vector scan operation
US10049082B2 (en) 2016-09-15 2018-08-14 Altera Corporation Dot product based processing elements
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
GB2563878B (en) * 2017-06-28 2019-11-20 Advanced Risc Mach Ltd Register-based matrix multiplication
US11294679B2 (en) 2017-06-30 2022-04-05 Intel Corporation Apparatus and method for multiplication and accumulation of complex values
WO2019005115A1 (en) * 2017-06-30 2019-01-03 Intel Corporation APPARATUS AND METHOD FOR MULTIPLICATION AND CUMULATION OF COMPLEX VALUES
US11409525B2 (en) * 2018-01-24 2022-08-09 Intel Corporation Apparatus and method for vector multiply and accumulate of packed words
US10642620B2 (en) * 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0375868A (ja) * 1989-08-17 1991-03-29 Sony Corp 行列データ乗算装置
JPH05267992A (ja) * 1992-03-18 1993-10-15 Sony Corp フイルタ回路
JPH10124484A (ja) * 1996-10-16 1998-05-15 Hitachi Ltd データプロセッサ及びデータ処理システム
JP2000322235A (ja) * 1999-05-07 2000-11-24 Sony Corp 情報処理装置
JP2001256199A (ja) * 2000-03-13 2001-09-21 Hitachi Ltd データプロセッサ及びデータ処理システム
JP2001290633A (ja) * 2000-04-07 2001-10-19 Nintendo Co Ltd ベクトルレジスタからスカラ値を直接取得する方法および装置
JP2002229970A (ja) * 2001-01-31 2002-08-16 Fujitsu Ltd Simd積和演算方法、積和演算回路、および、半導体集積回路装置

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04242861A (ja) * 1990-12-28 1992-08-31 Sony Corp 内積演算回路
US5721892A (en) * 1995-08-31 1998-02-24 Intel Corporation Method and apparatus for performing multiply-subtract operations on packed data
US6094637A (en) 1997-12-02 2000-07-25 Samsung Electronics Co., Ltd. Fast MPEG audio subband decoding using a multimedia processor
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6477203B1 (en) * 1998-10-30 2002-11-05 Agilent Technologies, Inc. Signal processing distributed arithmetic architecture
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US6898691B2 (en) 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
US7103756B2 (en) * 2002-09-30 2006-09-05 Hewlett-Packard Development Company, L.P. Data processor with individually writable register subword locations
US7275147B2 (en) * 2003-03-31 2007-09-25 Hitachi, Ltd. Method and apparatus for data alignment and parsing in SIMD computer architecture
US6847313B2 (en) 2003-06-30 2005-01-25 Intel Corporation Rational sample rate conversion
GB2409061B (en) 2003-12-09 2006-09-13 Advanced Risc Mach Ltd Table lookup operation within a data processing system
US8332452B2 (en) 2006-10-31 2012-12-11 International Business Machines Corporation Single precision vector dot product with “word” vector write mask

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0375868A (ja) * 1989-08-17 1991-03-29 Sony Corp 行列データ乗算装置
JPH05267992A (ja) * 1992-03-18 1993-10-15 Sony Corp フイルタ回路
JPH10124484A (ja) * 1996-10-16 1998-05-15 Hitachi Ltd データプロセッサ及びデータ処理システム
JP2000322235A (ja) * 1999-05-07 2000-11-24 Sony Corp 情報処理装置
JP2001256199A (ja) * 2000-03-13 2001-09-21 Hitachi Ltd データプロセッサ及びデータ処理システム
JP2001290633A (ja) * 2000-04-07 2001-10-19 Nintendo Co Ltd ベクトルレジスタからスカラ値を直接取得する方法および装置
JP2002229970A (ja) * 2001-01-31 2002-08-16 Fujitsu Ltd Simd積和演算方法、積和演算回路、および、半導体集積回路装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
KR101482540B1 (ko) 2015-01-14
JP5201641B2 (ja) 2013-06-05
KR20100075494A (ko) 2010-07-02
US8631224B2 (en) 2014-01-14
US20090077345A1 (en) 2009-03-19
WO2009035774A1 (en) 2009-03-19

Similar Documents

Publication Publication Date Title
JP5201641B2 (ja) 重複オペランドを使用したsimdの内積演算
JP7052171B2 (ja) プロセッサ、システム及び方法
KR101515311B1 (ko) 승산-승산-누산 명령 수행
CN107741842B (zh) 用于执行点积运算的指令和逻辑
RU2263947C2 (ru) Целочисленное умножение высокого порядка с округлением и сдвигом в архитектуре с одним потоком команд и множеством потоков данных
US20240078283A1 (en) Apparatuses, methods, and systems for instructions of a matrix operations accelerator
CN109716290B (zh) 用于经融合的乘加的系统、装置和方法
JP7481069B2 (ja) 連鎖タイル演算を実施するためのシステムおよび方法
JP2021057004A (ja) 行列演算アクセラレータの命令のための装置、方法、及びシステム
ES2934513T3 (es) Sistemas y métodos para omitir operaciones matriciales intrascendentes
CN107533460B (zh) 紧缩有限冲激响应(fir)滤波处理器、方法、系统和指令
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
EP4020169A1 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
US20110072238A1 (en) Method for variable length opcode mapping in a VLIW processor
EP3716050B1 (en) Using fuzzy-jbit location of floating-point multiply-accumulate results
US6275925B1 (en) Program execution method and program execution device
CN112149050A (zh) 用于增强的矩阵乘法器架构的装置、方法和系统
JPH1115660A (ja) マイクロプロセッサ
TW202418114A (zh) 用於矩陣運算加速器之指令的裝置,方法和系統
US20030163500A1 (en) 64-bit scaled sum-of-product operations in a 32-bit environment

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110727

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110727

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20120227

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130206

R150 Certificate of patent or registration of utility model

Ref document number: 5201641

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20160222

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

LAPS Cancellation because of no payment of annual fees