JP2019526866A - ベクトル積和命令 - Google Patents

ベクトル積和命令 Download PDF

Info

Publication number
JP2019526866A
JP2019526866A JP2019512719A JP2019512719A JP2019526866A JP 2019526866 A JP2019526866 A JP 2019526866A JP 2019512719 A JP2019512719 A JP 2019512719A JP 2019512719 A JP2019512719 A JP 2019512719A JP 2019526866 A JP2019526866 A JP 2019526866A
Authority
JP
Japan
Prior art keywords
vector
value
instruction
product
processing
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
JP2019512719A
Other languages
English (en)
Other versions
JP7203016B2 (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 JP2019526866A publication Critical patent/JP2019526866A/ja
Application granted granted Critical
Publication of JP7203016B2 publication Critical patent/JP7203016B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/30141Implementation provisions of register files, e.g. ports

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (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)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

装置2が、処理回路4と、いくつかのベクトル・レジスタ14と、いくつかのスカラー・レジスタ12とを備える。少なくとも1つのベクトル・レジスタ14と少なくとも1つのスカラー・レジスタ12とを指定するベクトル積和命令の復号をサポートする命令デコーダ6が与えられる。ベクトル積和命令に応答して、デコーダ6は、ベクトル積和命令を実施するように処理回路4を制御し、ベクトル積和命令において、処理の各レーンは、積値と加数値との差の和に対応するそれぞれの結果データ要素を生成し、積値は、第1のベクトル値のそれぞれのデータ要素と乗数値との積を含む。処理の各レーンにおいて、乗数値と加数値とのうちの少なくとも一方は、スカラー・レジスタ12に記憶されたスカラー値の部分として指定される。

Description

本技法は、データ処理の分野に関する。
いくつかのデータ処理システムは、ベクトル命令のソース・オペランド又は結果値が、多数のデータ要素を含むベクトルである、ベクトル命令の処理をサポートする。単一の命令に応答していくつかの別個のデータ要素の処理をサポートすることによって、コード密度が改善され、命令のフェッチング及び復号のオーバーヘッドが低減され得る。処理されるべきデータ値のアレイが、データ値をベクトル・オペランドのそれぞれの要素にロードすることと、単一のベクトル命令を使用してデータ値、いくつかの要素を一度に処理することとによって、より効率的に処理され得る。
少なくともいくつかの実例は、
データ処理を実施するための処理回路と、
複数のデータ要素を含むベクトル値を記憶するための複数のベクトル・レジスタと、
スカラー値を記憶するための複数のスカラー・レジスタと、
複数の結果データ要素を含む結果ベクトル値を生成するために、少なくとも1つのベクトル・レジスタと少なくとも1つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令(vector multiply−add instruction)によって指定された第1のベクトル・レジスタに記憶された第1のベクトル値に対する処理の複数のレーンを含むベクトル積和演算(vector multiply−add operation)を実施するように処理回路を制御するために、ベクトル積和命令を復号するための命令デコーダと
を備える装置であって、
処理の各レーンが、積値(product value)と加数値(addend value)との和又は差に対応する結果ベクトル値のそれぞれの結果データ要素を生成することを含み、積値が、第1のベクトル値のそれぞれのデータ要素と乗数値(multiplier value)との積に対応し、
処理の各レーンについて、乗数値と加数値とのうちの少なくとも一方が、ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む、
装置を提供する。
少なくともいくつかの実例は、
データ処理を実施するための手段と、
複数のデータ要素を含むベクトル値を記憶するための複数の手段と、
スカラー値を記憶するための複数の手段と、
複数の結果データ要素を含む結果ベクトル値を生成するために、ベクトル値を記憶するための少なくとも1つの手段とスカラー値を記憶するための少なくとも1つの手段とを指定するベクトル積和命令によって指定された、ベクトル値を記憶するための第1の手段に記憶された第1のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように、データ処理を実施するための手段を制御するために、ベクトル積和命令を復号するための手段と
を備える装置であって、
処理の各レーンが、積値と加数値との和又は差に対応する結果ベクトル値のそれぞれの結果データ要素を生成することを含み、積値が、第1のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
処理の各レーンについて、乗数値と加数値とのうちの少なくとも一方が、ベクトル積和命令によって指定された、スカラー値を記憶するための手段に記憶されたスカラー値の少なくとも部分を含む、
装置を提供する。
少なくともいくつかの実例は、
少なくとも1つのベクトル・レジスタと少なくとも1つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令を復号するステップと、
ベクトル積和命令に応答して、複数の結果データ要素を含む結果ベクトル値を生成するために、ベクトル積和命令によって指定された第1のベクトル・レジスタに記憶された第1のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように処理回路を制御するステップと
を含むデータ処理方法であって、
処理の各レーンが、積値と加数値との和又は差に対応する結果ベクトル値のそれぞれの結果データ要素を生成することを含み、積値が、第1のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
処理の各レーンについて、乗数値と加数値とのうちの少なくとも一方が、ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む、
データ処理方法を提供する。
少なくともいくつかの実例は、上記で説明された装置に対応する、命令実行環境を与えるようにホスト・データ処理装置を制御するためのプログラム命令を含む、仮想マシン・コンピュータ・プログラムを提供する。
仮想マシン・コンピュータ・プログラムを記憶するコンピュータ可読記憶媒体も、提供され得る。本記憶媒体は、非一時的記憶媒体であり得る。
本技法のさらなる態様、特徴及び利点は、添付の図面とともに読まれるべきである、実例の以下の説明から明らかであろう。
2つ又はそれ以上のデータ要素を含むベクトル値の処理をサポートする処理回路を有する装置の実例を概略的に示す図である。 積和演算についての加数値がスカラー・レジスタによって指定される、ベクトル積和命令の第1の変形態の実例を示す図である。 積和演算についての乗数値がスカラー・レジスタによって指定される、ベクトル積和命令の第2の変形態の実例を示す図である。 第2の変形態の別の実例を示す図である。 ベクトル積和命令の非破壊的変形態(non−destructive variant)を示す図である。 プレディケーション指示(predication indication)に基づいて結果ベクトルのいくつかの部分に関連する演算をマスキングする実例を示す図である。 ベクトル化されたループの終了に達したとき、ベクトル処理のレーンをマスキングするためのループ・ベース・プレディケーション(loop−based predication)の実例を示す図である。 ベクトル命令の実行の重複するそれぞれのビートの実例を示す図である。 ベクトル命令の実行の重複するそれぞれのビートの実例を示す図である。 ベクトル命令の実行の重複するそれぞれのビートの実例を示す図である。 ベクトル積和命令の減算変形態(subtract variant)を示す図である。 ベクトル積和命令の飽和変形態(saturating variant)を示す図である。 スカラー・レジスタがベクトル・オペランドのデータ要素サイズよりも広いとき、スカラー・レジスタに記憶されたスカラー値のより小さい部分がどのようにベクトル積和演算のために使用され得るかを示す図である。 ベクトル積和命令の要素拡大変形態(element−widening variant)の実例を示す図である。 ベクトル積和命令の要素サイズ保存変形態(element−size−preserving variant)の場合、対応する結果データ要素を生成するためにレーン結果をトランケートする5つの異なる実例を示す図である。 浮動小数点ベクトル積和演算の融合変形態(fused variant)を示す図である。 浮動小数点ベクトル積和演算の分割変形態(split variant)を示す図である。 ベクトル積和命令を処理する方法を示す流れ図である。 使用され得る仮想マシン実装形態を示す図である。
データ処理装置は、データ処理を実施するための処理回路と、多数のデータ要素を含むベクトル値を記憶するためのいくつかのベクトル・レジスタと、単一のデータ要素を含むスカラー値を記憶するためのいくつかのスカラー・レジスタとを有し得る。命令デコーダが、実行されるべきプログラム命令を復号し、これらの命令によって表されるデータ処理演算を実施するように処理回路を制御するために与えられ得る。命令デコーダは、少なくとも1つのベクトル・レジスタと少なくとも1つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令をサポートする。積和命令に応答して、命令デコーダは、ベクトル積和命令によって指定された第1のベクトル・レジスタに記憶された第1のベクトル値に対して実施される処理の多数のレーンを含むベクトル積和演算を実施するように処理回路を制御する。処理回路は、ベクトル積和演算の成果に基づいて、いくつかの結果データ要素を含む結果ベクトル値を生成する。処理の各レーンは、積値と加数値との和又は差に対応する結果ベクトル値のそれぞれの結果データ要素を生成することを含み、積値は、第1のベクトル値のそれぞれのデータ要素と乗数値との積に対応する。処理の各レーンについて、乗数値と加数値とのうちの少なくとも一方は、ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む。
単一のベクトル・レジスタ内に表される独立したデータ要素の処理の多数のレーンが単一の命令に応答して実施されるベクトル処理は、一般に、低電力又は回路面積ではなく性能のために設計された比較的大きいプロセッサ中で使用されている。そのような高性能なプロセッサでは、ベクトル・レジスタ・ファイル及びベクトル・データ経路は、一般に、回路面積が比較的大きく、スカラー処理のために使用されるスカラー・レジスタ・ファイル及びスカラー・データ経路も、回路面積が比較的大きい。したがって、これらのブロックの大きい回路面積は、スカラー・レジスタ・ファイルからベクトル処理回路にデータ値を送信するために比較的長い配線が必要となり、したがって、そのようなワイヤに沿った信号伝搬遅延があまりに長くなり、そのようなプロセッサのタイミング要件及び性能要求を満足することが困難になることを意味するので、ベクトル算術命令(vector arithmetic instruction)がスカラー・レジスタ・ファイルとベクトル・レジスタ・ファイルの両方に直接アクセスすることは、概して実際的ではなかった。したがって、スカラー・レジスタ・ファイルとベクトル・レジスタ・ファイルとの間でデータを転送するための数個の専用命令の他に、ベクトル算術命令は、一般に、入力オペランドのすべてを、ベクトル・レジスタに記憶されたベクトル・オペランドとして指定することになる。
しかしながら、最近、スカラー・レジスタ・ファイルとベクトル算術データ経路とがチップ上で互いにより近くなるように、ベクトル処理技法が、より低い電力消費とより小さい回路面積とをもつより小さいプロセッサ実装形態において使用され始めている。発明者は、このことが、処理回路がベクトル算術命令を処理するときにスカラー・レジスタにアクセスすることをより実際的にすると認識していた。とはいえ、異なる処理演算をサポートする際の最も大きいフレキシビリティのために、ベクトル処理のレーンの各々においてオペランドの各々について異なる数値が使用されることを可能にするために、ベクトル演算への入力の各々がベクトルとして指定されるべきであることが、通常予想されよう。多くのデータ処理アルゴリズムにおいて比較的共通である1つの算術演算は、積和演算であり、ここで、2つのオペランドが互いに乗算され、積及び第3のオペランドが、加算又は減算されて、結果が生成される。積和演算が3入力演算であるので、ベクトル積和命令が、3つの入力ベクトルを定義するために3つのベクトル・レジスタを指定することが予想されよう。
しかしながら、一般に、3つの入力オペランドを必要とする演算はほとんどなく、したがって、積和命令がそれの入力のすべてをベクトルとして指定する場合、これにより、他の演算のために使用される可能性が低い第3のベクトル・レジスタ読出しポートが、ベクトル・レジスタ・ファイルにおいて実装されることが必要となる。また、特定の処理装置が3つ以上のベクトル・レジスタ読出しポートを有する場合でも、読出しポートのすべてが所与の命令によって使用されるとは限らない場合、これにより、予備レジスタ読出しポートを使用して別の命令が並行して実行されることが可能になり得る。したがって、ベクトル積和演算の乗数値と加数値とのうちの少なくとも一方をスカラー値として指定することによって、これにより、第3のベクトル・レジスタ読出しポートがベクトル積和命令のために使用される必要が回避され、それにより、第3のレジスタ読取りポートをまったく実装しないことによって回路面積及び電力消費を節約すること、又は予備読取りポートを使用して別の命令が並行して実行することを可能にすることによって改善された性能を可能にすることのいずれかを行うことができる。
乗算値と加数値の一方又は両方を指定するためにスカラー・レジスタを使用することは、(レーンの各々が乗数及び/又は加数について同じ値を使用することに制限されることになるので)ベクトル積和命令の有用性を限定することになると予想され得るが、実際には、乗数と加数とのうちの少なくとも一方が、いずれにせよレーンの各々にわたって同じ値になる、いくつかの比較的共通の使用事例がある。たとえば、いくつかのデータ処理アルゴリズムにおける共通演算は、xの多数の値についての形式ax+bx+cx+dの多項式の評価であり得、それは、ベクトル積和命令を使用して行われ得、ここで、xについての異なる値が、入力ベクトルの異なる要素に割り振られ、係数a、b、c、dは各レーンについて同じである。したがって、少なくとも1つのスカラー入力をベクトル積和命令に与えることの別の利益は、これにより、ベクトル積和命令がそのオペランドの各々をベクトルとして指定した場合に必要とされるであろう、入力ベクトルの要素の各々にわたって同じスカラー値を複製するための追加の命令の必要がなくなることである。したがって、コード・サイズが減少されるか、又はコード密度が増加され得る。
図1は、ベクトル命令の処理をサポートするデータ処理装置2の実例を概略的に示す。これが、説明を簡単にするための簡略図であり、実際には、装置が、簡潔のために図1に示されていない多くの要素を有し得ることが諒解されよう。装置2は、命令デコーダ6によって復号された命令に応答して、データ処理を行うための処理回路4を備える。プログラム命令が、命令セット・アーキテクチャによって定義されたやり方で命令を処理するように処理回路4を制御する制御信号を生成するために、メモリ・システム8からフェッチされ、命令デコーダによって復号される。たとえば、デコーダ6は、算術演算、ロード/記憶演算、又は論理演算などの演算を実施するために適切なハードウェア・ユニットを処理回路4にアクティブ化させる、制御信号を生成するために、復号された命令のオペコードと、命令の任意の追加の制御フィールドとを解釈し得る。装置は、処理回路4によって処理されるべきデータ値と、処理回路の動作を構成するための制御情報とを記憶するためのレジスタ10のセットを有する。算術又は論理命令に応答して、処理回路4は、レジスタ10からオペランドを読み取り、命令の結果をレジスタ10に書き戻す。ロード/記憶命令に応答して、データ値は、処理論理を介してレジスタ10とメモリ・システム8との間で転送される。メモリ・システム8は、1つ又は複数のレベルのキャッシュ並びにメイン・メモリを含み得る。
レジスタ10は、単一のデータ要素を含むスカラー値を記憶するためのいくつかのスカラー・レジスタを備える、スカラー・レジスタ・ファイル12を含む。命令デコーダ6及び処理回路4によってサポートされるいくつかの命令は、スカラー・レジスタに書き戻されるスカラー結果を生成するためにスカラー・レジスタ12から読み取られたスカラー・オペランドを処理する、スカラー命令である。
レジスタ10は、それぞれ、多数のデータ要素を含むベクトル値を記憶するための、いくつかのベクトル・レジスタを含む、ベクトル・レジスタ・ファイル14をも含む。ベクトル命令に応答して、命令デコーダ6は、スカラー・レジスタ12に書き込まれるべきスカラー結果、又はベクトル・レジスタ14に書き込まれるべきさらなるベクトル結果のいずれかを生成するために、ベクトル・レジスタ14のうちの1つから読み取られたベクトル・オペランドのそれぞれの要素に対してベクトル処理のいくつかのレーンを実施するように、処理回路4を制御する。いくつかのベクトル命令は、1つ又は複数のスカラー・オペランドからベクトル結果を生成し得るか、又は、スカラー・レジスタ・ファイル中のスカラー・オペランドに対する追加のスカラー演算、並びにベクトル・レジスタ・ファイル14から読み取られたベクトル・オペランドに対するベクトル処理のレーンを実施し得る。したがって、いくつかの命令は、命令の1つ又は複数のソース・レジスタ及び宛先レジスタのうちの少なくとも1つがベクトル・レジスタ14であり、1つ又は複数のソース・レジスタ及び宛先レジスタのうちの別のものがスカラー・レジスタ12である、混合スカラー・ベクトル命令であり得る。ベクトル命令は、データ値がベクトル・レジスタ14とメモリ・システム8中のロケーションとの間で転送されることを引き起こすベクトル・ロード/記憶命令をも含み得る。ロード/記憶命令は、メモリ中のロケーションがアドレスの連続範囲に対応する、連続ベクトル・ロード/記憶命令、又は、いくつかの個別のアドレスを指定し、それらのアドレスの各々からのデータをベクトル・レジスタのそれぞれの要素にロードするか、若しくはベクトル・レジスタのそれぞれの要素からのデータを個別のアドレスに記憶するように、処理回路4を制御する、分散/集約(scatter/gather)タイプ・ベクトル・ロード/記憶命令を含み得る。
処理回路4は、様々な異なるデータ要素サイズをもつベクトルの処理をサポートし得る。たとえば、128ビット・ベクトル・レジスタ14は、たとえば、16個の8ビット・データ要素、8つの16ビット・データ要素、4つの32ビット・データ要素、又は2つの64ビット・データ要素に区分され得る。レジスタ・バンク10内の制御レジスタが、使用されている現在のデータ要素サイズを指定し得るか、又は代替的に、これは、実行されるべき所与のベクトル命令のパラメータであり得る。
レジスタ・バンク10は、処理回路4の演算を制御するための制御情報を記憶するためのレジスタをも含む。制御レジスタは、現在の実行ポイントに対応する命令のアドレスを示すためのプログラム・カウンタ・レジスタ、例外を扱うときにレジスタ状態をセーブ/復元するためのスタック・データ構造のメモリ・システム8中のロケーションのアドレスを示すスタック・ポインタ・レジスタ、及びそれに対する処理が関数の実行に続いて分岐することである関数復帰アドレスを記憶するためのリンク・レジスタなどのレジスタを含み得る。これらは、簡潔のために図1に示されていない。
図1に示されているように、レジスタは、ベクトル化されたループの進行を追跡するためのループ・カウンタ16と、ループ内で処理されているベクトルのデータ要素中のビット数を示すパラメータを記憶するための要素サイズ・レジスタ18と、1つのベクトル・レジスタ中の総ビット数を示すパラメータを記憶するためのベクトル幅レジスタ20と、ベクトル演算のプレディケーションを制御するためのベクトル・プレディケート・レジスタ22とをも含む。いくつかの例では、ベクトル幅レジスタ20は、所与のデバイスのためのベクトル・レジスタ14において実装される特定のベクトル幅に応じて装置の製造中に配線接続され得る。代替的に、ベクトル・レジスタ・ファイル14が、異なるベクトル幅をもつ異なる構成をサポートする場合、ベクトル幅レジスタ20は、使用されている現在の幅を示すためにプログラム可能であり得る。同様に、要素サイズ・レジスタ18は、所与の装置のために特定の要素サイズが常に使用される場合に配線接続されるか、又は装置が異なるデータ要素サイズのベクトルを用いる処理をサポートする場合に可変であるかのいずれかであり得る。ループ・カウンタ16が専用制御レジスタとして示されているが、他の実例は、ベクトル化されたループの進行を追跡するために汎用スカラー・レジスタ12のうちの1つを使用し得る。
図2は、ベクトル積和命令を処理する実例を概略的に示す。命令は、第1のベクトル・レジスタQ0と、第2のベクトル・レジスタQ1と、スカラー・レジスタR0とを指定する。この実例は、命令の破壊的変形態(destructive variant)を示しており、ここで、第1のベクトル・レジスタQ0は、積和演算において生成された結果データ要素がレジスタQ0に書き込まれて、レジスタQ0の対応する部分に前に記憶された値を上書きするように、命令のための結果レジスタとしても働く。これは、命令符号化における別個の宛先レジスタ指定子のための符号化空間の必要を回避し、これは、命令符号化空間がしばしば貴重であるので、有用であり得る。
図2は、スカラー・レジスタR0が、処理の各レーンにおける積和演算において使用されるべき加数値を指定し、ベクトル・レジスタQ0、Q1が、各レーンにおいて互いに乗算されるべき値を指定する、ベクトル積和命令の第1の変形態を示す。したがって、処理の各レーンは、Q0[i]*Q1[i]+R0に従って、それぞれの結果データ要素Q0’[i]を生成し、ここで、この実例では、ベクトルごとに4つのデータ要素があるので、0≦i≦3である。すなわち、処理の各レーンは、加数値R0と、第1のベクトルQ0及び第2のベクトルQ1のそれぞれのデータ要素の積との和に対応するそれぞれの結果データ要素を生成する。加数値R0は、レーンの各々について同じである。
このタイプの命令が有用であり得る計算の実例が、以下で示されている。ある適用例では、以下の多項式を評価することが望まれると考える。
ax+bx+cx+d(命令が有用である多くの他の事例がある)が、これは、良好な実例として働くことになる)。ホーナー法(Horner’s method)を使用して、これは、より計算効率の良い形式x(x(ax+b)+c)+dで表され得る。これは、通常、3つの乗算累算(multiply−accumulate)演算に等しい。
ある適用例では、処理時間を最小限に抑えるためにベクトル実装形態を使用してこの多項式を効率的に評価することが望まれる。旧来のベクトル実装形態では、そのようなベクトル実装形態は、(ベクトルごとに4つの要素を仮定すると)以下のようになるであろう。
(1)と(2)とを組み合わせて、単一のベクトル積和命令にすること、VMULADD Qd、Q1、Q2、Q3によって、これは、性能を著しく増加させることができる。しかしながら、得られた命令は、その場合(Q1、Q2、及びQ3のための)3つのベクトル読出しポート、並びにQdのための書込みベクトル・ポートを必要とする。これは、利用可能な十分な読出しポートがない(面積及び/又は電力制約のために限られる)か、又はそれらが、本来なら並行して実行することが可能であったであろう他の命令からリソースを盗むかのいずれかであるので、小さいコアに関する問題である。
形式(I1)ベクトル=ベクトル*ベクトル+スカラー、又は(I2)ベクトル=ベクトル*スカラー+ベクトルの積和命令を使用することによって、これらの命令は、代わりにスカラー・レジスタ・ファイルから読み出すことによって、ベクトル・レジスタ・ファイル読出しポート制約を回避する。これらの新しい命令の助けをかりて、上記の例示的なアルゴリズムは、以下に簡略化され得る。
必要なレジスタが利用可能であると仮定すると、ループ外で係数ロード及び初期複製を行うことなど、さらなる最適化が可能である。以下の図8〜図10で説明されるように、高効率な実装形態に寄与する、いくつかのデータ・ベクトルの処理をパイプライン化することも可能である。上記の実例は、命令のための1つの使用事例を示しているが、提案される命令は、当然多くの他の使用事例に好適である。
図3は、ベクトル積和命令の第2の変形態を示す。この場合も、命令は2つのベクトル・レジスタQ0、Q1とスカラー・レジスタR0とを指定し、第1のベクトル・レジスタQ0は命令のための宛先レジスタとして働く。この場合も、処理の各レーンは積和演算に対応し、ここで、2つの値が乗算されて、積を形成し、積は、次いで加数値に加算される。しかしながら、この変形態では、スカラー・レジスタは、各レーンにおいて第1の入力ベクトルQ0のそれぞれの要素と乗算されるべき乗数値R0を指定するが、加数は、第2の入力ベクトルQ1の対応するデータ要素である。したがって、第2の変形態の場合、所与の結果データ要素Q0’[i]は、Q0[i]*R0+Q1[i]に従って生成される。この場合も、この場合も、この実例では、0≦i≦3である。
図4は、図3に示されている第2の変形態の代替バージョンを示し、ここで、第2のベクトル・レジスタQ1は、Q0の代わりに宛先レジスタとして働く。したがって、図3では、乗算されているベクトル・オペランドが、結果を上書きされるが、図4では、加数として働くベクトル・オペランドが、結果を上書きされる。いくつかのシステムは、図3及び図4に示されているバージョンのうちの1つのみをサポートし得るが、他のシステムは両方のタイプをサポートし得る。
また、図5は、入力オペランドを定義する2つのベクトル・レジスタQ0、Q1とは別個の、命令のための宛先レジスタとして働く追加のベクトル・レジスタQ2を指定するベクトル積和命令の非破壊的変形態の実例を示す。この変形態を用いると、入力オペランドは、積和演算の結果として上書きされず、したがって、後続の命令による処理のために依然として利用可能である。いくつかのシステムは、図2〜図4に示されている破壊的変形態に加えて、図5に示されている非破壊的変形態をサポートし得るが、他の実装形態は、破壊的変形態と非破壊的変形態とのうちの一方のみを選定し得る。図5は、(スカラー・レジスタが加数を指定する)非破壊的命令として実装される命令の第2の変形態の実例を示しているが、他の実例は、(スカラー・レジスタが乗数を指定する)第1の変形態の非破壊的バージョンを同様に実装し得る。
同様に、以下で説明される実例は、簡潔のために、スカラー値が各レーンについての加数を指定する、図2に示されているベクトル積和命令の第1の変形態に対応する実例を使用して説明されるが、これらの実例の各々が、スカラーが乗数値を指定する、図3又は図4に示されている第2の変形態にも適用され得ることが諒解されよう。
また、ベクトル積和命令の別の変形態は、それぞれのスカラー値を使用して乗算値と加数値の両方を指定し得る。そのような変形態の場合、命令は、対応するベクトル・レジスタとスカラー・レジスタとを使用して1つのベクトル・オペランドと2つのスカラー・オペランドとを指定することになる。たとえば、命令は、ベクトル・レジスタQ0と、2つのスカラー・レジスタR0、R1とを指定し得、Q0’[i]=Q0[i]×R0+R1に従って各結果データ要素を生成し得る。この場合も、2つのベクトル・レジスタQ0、Q1と2つのスカラー・レジスタR0、R1とを指定する非破壊的バージョンも与えられ得、ここで、Q1[i]=Q0[i]×R0+R1である。
したがって、上記で説明された異なる変形態が与えられれば、概して、ベクトル積和命令は、少なくとも1つのベクトル・レジスタと少なくとも1つのスカラー・レジスタとを指定し得、第3のオペランドは、変形態に応じて、ベクトル又はスカラーのいずれかであり得る。
処理回路4は、所与のベクトル命令についての処理のレーンを、並行して、連続的に実施するか、又は部分的に並行して、及び部分的に順々に実施し得る。たとえば、いくつかの実装形態は、同じサイクルにおいて結果データ要素のすべてを生成するために並行して処理のレーンのすべてを実施するのに十分な算術回路ユニットを有し得る。他の回路実装形態は、一度に単一のレーンを処理する算術ユニットの単一のセットを与え得、この場合、各レーンは、別個のサイクルにおいて連続的に処理され得る。この場合の性能は、より遅くなり得るが、ベクトル・レーンを連続的に処理することは、それが、所与のアルゴリズムを処理するために必要とされる命令フェッチ及び命令復号演算の数を低減し、電力消費を低減するので、依然として、スカラー実装形態に勝る利点を与える。他の実装形態は、ベクトルの総幅よりも小さくなり得る一定のビット幅までを並行して処理することができる算術ユニットを有し得る。この場合、処理の2つ又はそれ以上のレーンのブロックが、並行して実施され得るが、ベクトル・サイズが、ハードウェアでサポートされるビット幅よりも大きい場合、ベクトル処理が部分的に並行して及び部分的に順々に行われるように、算術ユニットを通る多数のパスが、連続的に実施され得る。
上記の実例は、結果レジスタQ0’が処理のレーンの各々中の結果データ要素を用いて更新される場合を示している。しかしながら、結果ベクトルの所与の部分に関連する演算は、所与の部分がマスキングされるべきであるかどうかを識別するプレディケーション指示に基づいてマスキングされ得る。そのようなプレディケーションを実装するいくつかのやり方があり、そのうちの2つが図6及び図7に示されている。
図6は、結果ベクトルの対応する部分が、それの演算をマスキングされるべきであるかどうかに応じて、ベクトル・プレディケート・レジスタ(VPR:vector predicate register)22が、0又は1に設定され得るいくつかのプレディケート・ビットを含む、実例を示す。たとえば、VPR22の各ビットは、装置2によってサポートされる最も小さいデータ要素サイズに対応する結果ベクトルの部分に対応し得、結果ベクトルの所与の部分に関連するビットが0であるとき、これは、対応する演算が、ベクトル演算の結果が結果ベクトルのその部分に書き込まれることを防ぐためにマスキングされることを引き起こし得る。マスキングは、異なるやり方で実装され得る。一実例では、所定の値(たとえば0)が、マスキングされるべき結果ベクトルの部分に書き込まれ得る。別の実例では、結果ベクトルのマスキングされた部分は、それらがベクトル命令の結果として更新されないように、それらの前の値を保持し得る。別のオプションは、ともかく処理のマスキングされたレーンについての算術演算が実施されることを防ぐことである。いくつかの実装形態は、これらのマスキングオプションのうちの1つのみをサポートし得る。他の実装形態は2つ以上のオプションをサポートし得、プログラマー又はコンパイラは、どの特定のマスキングオプションが所与の命令のために使用されるべきであるかを指定することができる(たとえば、命令は、マスキングされた部分に0が書き込まれる0化マスキング、又はマスキングされていない部分についての結果が、それらの前の値を保存するマスキングされた部分中の既存の値とマージされるマージングマスキングを使用するものとして指定され得る)。図6に示されている実例では、レーン0及び3中のVPRビットは0であり、レーン1及び2中のVPRビットは1であり、これは、レーン0及び3がマスキングされるべきであるが、レーン1及び2がプレディケートされず、図2と同じやり方で処理されて、結果ベクトルの対応する部分を更新することを示す。図6は、図2に示されているベクトル積和命令の第1の変形態に適用される実例を示しているが、その実例が、第2の変形態、又は本明細書で説明される他の変形態のいずれにも適用され得ることが諒解されよう。
プレディケーションは、しばしば所与の処理アルゴリズムが、実施されるべき条件付き演算を必要とし得るので、有用であり得、ここで、ターゲット・データ値がある条件(たとえば、それがしきい値よりも大きいかどうか)に合致する場合、計算が必要とされるにすぎないことがある。ベクトル比較命令は、いくつかのターゲット値を関連する基準と比較し、各レーンについての基準が満足されるかどうかに従ってVPR22のビットを設定し得、次いで、これは、図6に示されているベクトル積和命令などの後続のベクトル命令の実行を制御し得る。
図6は、処理のレーン全体が後続のベクトル積和命令においてマスキングされるようにVPRビットが設定される場合を示す。しかしながら、ベクトル命令のために使用されているデータ要素サイズよりも小さい幅に対応する結果ベクトルの部分をマスキングすることも可能である。たとえば、VPR22を設定する比較命令が、後続の積和命令よりも小さいデータ要素サイズを使用する場合、これにより、積和命令のための処理の所与のレーンは、いくつかのVPRビットが1に設定され、いくつかのビットが0に設定され得、これにより、そのレーンについての結果データ要素のパート(part)のみが結果ベクトルの対応する部分に書き込まれ、他のパートがマスキングされ得る。したがって、マスキングは、データ要素サイズよりも細かいグラニュラリティにおいて制御され得る。
図6は、プレディケート・レジスタ22がベクトル積和命令の符号化において指定されない実例を示す。代わりに、プレディケート・レジスタ22は、任意のベクトル命令のマスキングを暗黙的に制御するデフォルト・レジスタである。しかしながら、別の手法は、マスキングを制御するために使用されるべきプレディケート指示を指定するプレディケート・レジスタへの明示的参照を用いてベクトル積和命令を符号化することである。たとえば、2つ又はそれ以上のプレディケート・レジスタのバンクが与えられ得、プレディケート・ビットの異なるセットが、後続のベクトル命令のプレディケーションを制御するためのプレディケート・レジスタに書き込まれ得、それらのベクトル命令は、各々、その命令のために使用されるべき特定のプレディケート・レジスタを参照する。明示的プレディケート・レジスタ参照を使用する手法は、プレディケート・ビットの多数のセットが同時に保持され得る場合、繰り返しプレディケート・レジスタを更新する必要が少なくなり得るので、コード・サイズを低減することにおいていくつかの利点を有することができる。一方、命令によって参照されない暗黙的プレディケート・レジスタを使用する、図6に示されている手法は、命令符号化空間を節約することと、より少数のプレディケート・レジスタを与えることによって回路面積及び電力消費を低減することとにおいて利点を有することができる。いずれかの手法が、本技法のベクトル積和命令とともに使用され得る。
図7は、プレディケーションの第2の実例を示す。ベクトル命令のための一般的な用途は、動作の一定のシーケンスが、メモリに記憶されたアレイ80の各要素a0、a1などに適用される必要がある、ベクトル化されたループにおけるものである。高レベル・コードで要素ごとに1回反復するループが、より少数の反復をもつループを含むベクトル化されたコードにコンパイルされ、その反復の各々は、要素のブロックをベクトル・レジスタにロードし、一連のベクトル命令を使用して要素を処理し、処理の各レーンの結果をメモリに記憶する。したがって、各反復は、1つのベクトル・レジスタ中のデータ要素の数に対応する要素のブロックを処理し得る。処理されるべきアレイ中の要素の総数がNEであり、1つのベクトル中のデータ要素の数が(データ要素サイズESで除算されたベクトル幅VWに等しい)NVである場合、アレイ全体は、NE/NV回の反復の最小値において処理され得る。しかしながら、しばしば、要素の総数NEは、1つのベクトル中の、したがって、ループの最後の反復中の要素の数NVの厳密な倍数でないことがあり、ベクトルの要素のすべてが、処理されるべき実数値で満たされるとは限らない。満たされていないレーンにおける処理がマスキングされずに進むことを可能にされる場合、これは誤差を生じることがある。たとえば、アレイ80の端部を越えたメモリ・アドレス空間は、ページ・テーブル中でマッピングされていないことがあり、したがって、アレイの末尾を処理する最終反復において「未使用」レーンのうちの1つについてロード/記憶演算が実施される場合、メモリ・アクセス障害、又はアレイに隣接するデータの破損があり得る。
したがって、ループの最終反復において未使用レーンにおける演算をマスキングすることが望ましいことがある。図1に示されているように、処理回路4は、所与のベクトル化されたループのどのレーンが有効にされるか又はマスキングされるかを制御するためのループ・プレディケーション回路90を与えられ得る。ベクトル化されたループを開始すると、ループ・カウンタ16は、ループにおいて処理されるべき要素の総数NEを指定する値に設定される。たとえば、ループ開始命令は、処理されるべき要素の数を指定し得、ループ・カウンタ16は、ループ開始命令に応答して設定され得る。ループの各反復の終了時に、NErem、すなわち、処理されるべき残りの要素の数を計算するために、1つのベクトル中の要素の数NVがループ・カウンタ16から減算される。所与のループ反復を開始すると、NErem<NVである場合、ループ・プレディケーション回路90は、たとえば、ベクトル処理のレーン自体を抑圧すること(たとえば、ロード/記憶要求が発行されることを防ぐこと)によって、及び/又はマスキングされたレーンにおける処理の結果の書込みを無効にすること、若しくは上記で説明されたようにマスキングされたレーンを0に設定することによって、ベクトル処理の上側のNV−NErem個のレーンに関連する演算をマスキングするように処理回路4を制御する。
したがって、ループ・プレディケーション回路90は、それが、命令符号化において明示的プレディケート参照を必要とすることなしに、いくつかのレーンをマスキングするように処理回路を直接制御し得るので、ベクトル積和命令自体の符号化から独立してプレディケーションを実装する別のやり方であり得る。図6に示されている手法と図7に示されている手法とは組み合わせられ得、いくつかの場合には、プレディケーション回路90によって与えられるプレディケート指示は、ループ・プレディケーション回路90又はプレディケート・レジスタ22のいずれかによってマスキングされない結果ベクトルのそれらの部分に結果が書き込まれるように、ベクトル処理のマスキング全体を制御するために、VPR22又は別のタイプのプレディケート・レジスタから与えられたプレディケート指示との論理積をとられ得る。
プレディケーションは、簡潔のために他の例に示されていないが、プレディケーションは、本明細書で示される実例のいずれかとともに使用され得る。したがって、処理回路は、ベクトル積和命令に応答して処理の多数のレーンを実施するように構成されるが、処理回路は、適用されているマスキングに応じて、常にレーンのすべてを行う必要があるとは限らないことが諒解されよう。
図8〜図10に示されているように、ベクトル命令(ベクトル積和命令を含むことが本明細書で説明される)の処理は、前のベクトル命令が完了する前に1つのベクトル命令を処理することが開始することができるようにインターリーブされ得る。特に、所与のベクトル命令に応答して、処理回路4は、ベクトルのセクションに各々対応する処理の多数のビートを実施し得、(ここで、そのセクションは、そのベクトル命令のために使用されている特定のデータ要素サイズよりも小さいか、それに等しいか、又はそれよりも大きくなり得)、処理回路は、第1のベクトル命令と第2のベクトル命令との重複実行をサポートし得、重複実行において、第2のベクトル命令のビートの第1のサブセットは、第1のベクトル命令のビートの第2のサブセットと並行して実施される。
この手法は、処理回路4が、命令の異なるクラスを処理するためのいくつかの別個のハードウェア・ブロックを含み得るので、有用であり得る。たとえば、メモリ・システム8と対話するロード/記憶命令は、専用ロード/記憶ユニットによって処理され得るが、算術又は論理命令は、算術論理ユニット(ALU:arithmetic logic unit)によって処理され得る。ALU自体は、さらに、乗算に関与する演算において実施するための乗算累算ユニット(MAC:multiply−accumulate unit)と、他の種類のALU演算を処理するためのさらなるユニットとに区分され得る。また、浮動小数点命令を扱うために浮動小数点ユニットが与えられ得る。また、ベクトル処理に関与しない純粋な(pure)スカラー命令が、ベクトル命令と比較して別個のハードウェア・ブロックによって扱われるか、又は同じハードウェア・ブロックを再利用することができる。
デジタル信号処理(DSP:digital signal processing)などのいくつかの適用例では、ほぼ等しい数のALU及びロード/記憶命令があり得、したがって、MACなどのいくつかの大きいブロックが、かなりの量の時間の間、アイドルのままにされ得る。この非効率性は、実行リソースが、より高い性能を獲得するためにベクトル・レーンの数を用いてスケーリングされるとき、ベクトル・アーキテクチャ上で悪化させられ得る。より小さいプロセッサ(たとえば、単一発行、インオーダー・コア)上では、十分にスケーリング・アウトされたベクトル・パイプラインの面積オーバーヘッドが、法外に高くなり得る。利用可能な実行リソースのより良好な使用を行いながら、面積影響を最小限に抑えるための1つの手法は、図8に示されているように、命令の実行を重複させることである。この実例では、3つのベクトル命令が、ロード命令VLDRと、乗算命令VMULと、シフト命令VSHRとを含み、すべてのこれらの命令は、それらの間にデータ依存性があるとしても、同時に実行していることがある。これは、VMULの要素1が、Q1の要素1のみに依存し、Q1レジスタの全体に依存せず、そのため、VLDRの実行が終了する前に、VMULの実行が開始することができるからである。命令が重複することを可能にすることによって、乗算器のような費用がかかるブロックが、より多くの時間、アクティブに保たれ得る。
したがって、マイクロアーキテクチャ実装形態がベクトル命令の実行を重複させることを可能にすることが望ましいことがある。しかしながら、アーキテクチャが、一定量の命令重複があることを仮定した場合、これは、マイクロアーキテクチャ実装形態が、アーキテクチャによって仮定された命令重複の量に実際に一致する場合、高効率を与え得るが、それは、異なる重複を使用するか又はまったく重複しない異なるマイクロアーキテクチャにスケーリングされる場合、問題を生じることがある。
代わりに、アーキテクチャが、図9の実例に示されているように様々な異なる重複をサポートし得る。ベクトル命令の実行は、「ビート」と呼ばれるパートに分割され、各ビートは、所定のサイズのベクトルの部分の処理に対応する。ビートは、完全に実行されるか又はまったく実行されないかのいずれかである、ベクトル命令のアトミック・パートであり、部分的に実行され得ない。1つのビートにおいて処理されるベクトルの部分のサイズは、アーキテクチャによって定義され、ベクトルの任意の断片であり得る。図9の実例では、ビートは、ベクトル命令ごとに4つのビートがあるように、ベクトル幅の1/4に対応する処理として定義される。明らかに、これは1つの実例にすぎず、他のアーキテクチャは、異なる数のビート、たとえば、2つ又は8つを使用し得る。1つのビートに対応するベクトルの部分は、処理されているベクトルのデータ要素サイズと同じサイズであるか、それよりも大きいか又は小さくなり得る。したがって、要素サイズが、実装形態ごとに変化するか又はラン・タイムにおいて異なる命令間で変化する場合でも、ビートは、ベクトル処理のある固定幅である。1つのビートにおいて処理されているベクトルの部分が、多数のデータ要素を含む場合、桁上げ信号(carry signal)は、各要素が独立して処理されることを保証するために、それぞれの要素の間の境界において無効にされ得る。1つのビートにおいて処理されるベクトルの部分が、要素のパートのみに対応し、ハードウェアが、いくつかのビートを並行して計算するには不十分である場合、処理の1つのビート中に生成された桁上げ出力は、2つのビートの結果が一緒にデータ要素を形成するように、処理の後続するビートに桁上げ入力として入力され得る。
図9に示されているように、処理回路4の異なるマイクロアーキテクチャ実装形態は、抽象アーキテクチャ・クロックの1つの「ティック(tick)」において異なる数のビートを実行し得る。ここで、「ティック」は、アーキテクチャ状態前進(advancement)のユニットに対応する(たとえば、単純なアーキテクチャ上では、各ティックは、次の命令をポイントするためにプログラム・カウンタを更新することを含む、命令を実行することに関連するすべてのアーキテクチャ状態を更新するインスタンスに対応し得る)。パイプライン化などの知られているマイクロアーキテクチャ技法は、単一のティックが、ハードウェア・レベルにおいて実施するために多数のクロック・サイクルを必要とし得ることと、実際、ハードウェア・レベルにおける単一のクロック・サイクルが、多数の命令の多数のパートを処理し得ることとを意味し得ることが、当業者によって諒解されよう。しかしながら、そのようなマイクロアーキテクチャ技法は、ティックがアーキテクチャ・レベルにおいてアトミックであるとき、ソフトウェアに対して可視でない。簡潔のために、そのようなマイクロアーキテクチャは、本開示のさらなる説明中に無視される。
図9の下部の実例に示されているように、いくつかの実装形態は、すべてのビートを1つのティック内で並行して処理するために十分なハードウェア・リソースを与えることによって、同じティック中にベクトル命令のすべての4つのビートをスケジュールし得る。これは、より高性能の実装形態に好適であり得る。この場合、命令全体が1つのティックにおいて完了され得るので、アーキテクチャ・レベルにおける命令間の重複の必要はない。
一方、より面積効率的な実装形態は、ティックごとに2つのビートのみを処理することができる、より狭い処理ユニットを与え得、図9の中間の実例に示されているように、命令実行が重複され得、第2のベクトル命令の第1及び第2のビートが、第1の命令の第3又は第4のビートと並行して行われ、ここで、それらの命令は、処理回路内の異なる実行ユニット上で実行される(たとえば、図9では、第1の命令は、ロード/記憶ユニットを使用して実行されるロード命令であり、第2の命令は、MACを使用して実行される乗算累算命令である)。
さらによりエネルギー/面積効率的な実装形態が、より狭く、一度に単一のビートのみを処理することができるハードウェア・ユニットを与え得、この場合、ティックごとに1つのビートが処理され、命令実行は、図9の上部の実例に示されているように、1つのビートだけ重複及びスタッガされ得る(これは、上記の図8に示された実例と同じである)。
図9に示されている重複はいくつかの実例にすぎず、他の実装形態も可能であることが諒解されよう。たとえば、処理回路4のいくつかの実装形態は、同じティックにおける並行した多数の命令のデュアル発行をサポートし得、したがって、命令のより大きいスループットがある。この場合、1つのサイクルにおいて一緒に開始する2つ又はそれ以上のベクトル命令は、次のサイクルにおいて開始する2つ又はそれ以上のベクトル命令と重複するいくつかのビートを有し得る。
異なる性能ポイントにスケーリングするために、実装形態ごとに重複の量を変化させることと同様に、ベクトル命令間の重複の量は、ラン・タイムにおけるプログラム内のベクトル命令の実行の異なるインスタンス間でも変わることができる。したがって、処理回路4は、所与の命令が前の命令に対して実行されるタイミングを制御するための回路を与えられ得る。これは、命令にとって利用可能なリソースを実装すること又はそれらに依存することがより困難であるいくつかのコーナーケースでは、命令を重複させないことを選択する自由をマイクロアーキテクチャに与える。たとえば、同じリソースを必要とする所与のタイプ(たとえば、乗算累算)の命令が、相次いであり、すべての利用可能なMAC又はALUリソースが、別の命令によってすでに使用されている場合、次の命令を実行することを開始するための十分な空いているリソースがないことがあり、したがって、重複することよりむしろ、第2の命令の発行は、第1の命令が完了するまで待機することがある。
図10に示されているように、介在するスカラー命令がある場合も、2つのベクトル命令間の重複が防がれ得る。これは、スカラー命令は、ベクトル命令の最後のビートの成果に依存し得、第2のベクトル命令は、それのビートのすべてにおいてスカラー結果に依存し、したがって、ベクトル命令をスカラー命令と重複させることを回避することが、より安全であり得るからである。
上記の実例は、加数が入力ベクトル要素と乗数との積に加算される、ベクトル積和命令の加算変形態(add variant)を示す。しかしながら、図11に示されているように、加数が積から減算される、ベクトル積和命令の減算変形態を与えることも可能である。図11は、図2に示している命令の第1の形式の場合の減算変形態を示しているが、減算変形態が、図3又は図4に示されている導入の第2の形式の場合にも与えられ得ることが諒解されよう。同様に、図5と同様の、減算変形態の非破壊的バージョンも与えられ得る。したがって、減算変形態の場合、結果ベクトルの結果データ要素は、積と加数との間の差に対応する(たとえば、Q0’[i]=Q0[i]*Q1[i]−R0)。したがって、積和演算への言及は、本明細書では積差演算(multiply−subtract operation)を包含する。実際には、減算変形態は、単に、積に加数を加算する前に加数をネゲートするために加数の2の補数を生成することによって実装され得るので、加算変形態と減算変形態の両方が、共通加算回路を使用して計算され得る。
ベクトル積和演算は、モジュラ算術又は飽和算術のいずれかを使用して各レーン結果を計算し得る。モジュラ算術では、演算の結果が、結果値中で利用可能なビット数を使用して表され得る最大値を超えたとき、結果は、それらのビットを使用して表せる範囲の最下端に「ラップ・アラウンド」し、結果は、より大きいビット数が利用可能であった場合に表されたであろう結果値の最下位部分を効果的に示す(結果がオーバーフローしたことを示すためにオーバーフロー・ビットが制御レジスタ中に設定され得る)。すなわち、結果値は、結果値中のビット数に依存する、ある定数を法とする真の結果と事実上等価である。
対照的に、飽和算術を用いると、真の結果が、結果値で表せる最大可能値を超えたとき、結果は最大値においてクランプされる。同様に、結果が、結果値で表せる最小値よりも小さい場合、結果は、最小値にクランプされ、ラップ・アラウンドしない。図12に示されているように、所与のレーンL[i]の結果が、飽和の場合の最小限界よりも小さいとき、結果データ要素Q0’[i]はその最小限界に等しく設定され、レーン結果L[i]が最小限界若しくは最大限界に等しいか、又は最小限界と最大限界との間にあるとき、結果データ要素Q0’[i]は単にレーン結果に等しく、より大きい結果が最大限界よりも大きいとき、結果データ要素Q0’[i]は最大限界に等しい。飽和が行われた場合(すなわち、レーン結果L[i]が最小値よりも小さいか、又は最大値よりも大きいかのいずれかである場合)、制御レジスタ中のスティッキー・ビットが1に設定される。結果が飽和しなかった場合、スティッキー・ビットはそれの前の値を保持する。したがって、命令のシーケンスを処理するとき、ひとたび1に設定された所与のレーンについてのスティッキー・ビットは、飽和がシーケンス中のある時点において行われたことを示すために、シーケンスの残りの間、1のままになる。いくつかのシステムは、ベクトル積和命令について、1つのみ、又はモジュラ算術若しくは飽和算術をサポートし得る。他の場合、処理回路4は、算術の両方の形式について、ベクトル積和命令変形態をサポートし得る。
上記の実例は、ベクトル積和命令が、各々4つのデータ要素を有するベクトルに適用される場合を示すが、明らかに、これは必須でなく、ベクトルは任意の数のデータ要素を含み得る。上述のように、いくつかのシステムでは、ベクトル・オペランドの所与の数のビットが、異なるデータ要素サイズに分割され得、たとえば、128ビット・ベクトルが、8ビット、16ビット、32ビット、又は64ビット・データ要素に分割され得る。したがって、図13は、各ベクトルが8つのデータ要素を含む代替例を示す。
いくつかのデータ要素サイズの場合、データ要素のサイズは、スカラー・レジスタ12のうちの1つの幅よりも狭くなり得る。たとえば、図13に示されているように、ベクトル積和命令の実行の所与のインスタンスのための各データ要素は一定のビット数Jを有し得るが、スカラー・レジスタR0はJビットよりも多くのビットを有し得る。この場合、スカラー・レジスタ中のスカラー値の部分のみが、ベクトル処理の各レーンにおける積和処理のための加数値又は乗数値として使用され得る。たとえば、図13に示されているように、スカラー・レジスタの選択された部分R0’は、最下位Jビットであり得、ここで、Jは、現在実行された命令のために使用された現在のデータ要素サイズである。代替的に、他の例は、ベクトル処理のために使用されるべきスカラー値の部分をスカラー・レジスタの最上位Jビットとして選択し得る。したがって、本明細書で説明されるすべての実例では、スカラー・レジスタ中のスカラー値全体が積和処理のために使用されることは必須でないが、データ要素サイズに対応する幅をもつスカラー値の部分のみが乗数値又は加数値として使用されることは可能であることが諒解されよう。
また、上記で示された実例は、入力ベクトルのデータ要素と同じサイズのデータ要素をもつ結果値を生成するが、これは必須でなく、図14に示されているように、Jビット・データ要素を有する1つ又は複数の入力ベクトルからKビット結果データ要素をもつ結果ベクトル値を生成する、ベクトル積和命令の要素拡大変形態が与えられ得、ここで、K>Jである。結果データ要素が入力データ要素よりも大きいとき、入力データ要素のすべてが結果に寄与するとは限らない。たとえば、図14の場合に示されているように、各結果データ要素Q0’[i]は、入力ベクトルの偶数番号のレーン0、2、4、6中の対応するデータ要素に基づいて生成され得、奇数番号の要素は無視され得る。代替例は、たとえば、奇数番号の要素を使用して、又はベクトルの上側又は下側の端部における隣接する要素のブロックを使用して、異なる位置から要素を選択し得る。代替的に、すべての入力要素は、入力要素の数が結果要素の数と同じであるように使用され得、この場合、結果ベクトルの幅は、入力ベクトルの幅よりも大きくなる。要素拡大命令を実装することが、特に有用であり得、ここで、各結果データ要素が入力データ要素のサイズの2倍であるように、K=2Jである。これは、積和処理の所与のレーンにおいて実施される乗算が、入力のビット数の2倍をもつ結果を生成することになるからであり、したがって、ベクトル積和命令の要素拡大変形態を使用することによって、この増加された精度が、結果において保持され得る。
一方で、結果ベクトル値が入力ベクトルのデータ要素と同じサイズ(Jビット)の結果データ要素を有するベクトル積和命令の要素サイズ保存変形態の場合、Jビット結果データ要素を生成するために積和演算のレーン結果L[i]をどのようにトランケートすべきかについての異なるオプションがある。概して、2つのJビット・データ要素を互いに乗算し、第3のJビット・データ要素を加算することは、ビット[2J:0]を含む2J+1ビット・レーン結果L[i]を生成し得、ここで、ビット0は最下位ビットを指し、ビット2Jは最上位ビットを指す。図15は、対応する結果データ要素Q0’[i]を生成するためにレーン結果L[i]をどのようにトランケートすべきかについての5つの実例を示す。
a) レーン結果L[i]の最下位Jビット(たとえば、2J+1ビット・レーン結果のビット[J−1:0])が選択され得る。
b) レーン結果L[i]の最上位Jビット(たとえば、2J+1ビット・レーン結果のビット[2J:J+1])が選択され得る。
c) レーン結果L[i]の最上位Jビットが選択され、レーン結果の少なくとも1つの下位ビットに基づいて丸められ得る。たとえば、選択された部分中に含まれない最上位ビットが選択された部分に加算されて、Jビット結果データ要素Q0’[i]に丸められ得るか、又は代替的に、2つ以上の下位ビットが丸めのために使用されて、より複雑な丸めモードが実装され得る。丸めを実施することによって、トランケーションによって引き起こされる結果に対する負バイアスが回避され得る。
d) レーン結果L[i]の最上位ビット[2J]が無視され、次のJ最上位ビット[2J−1:J]が、選択されて、結果が形成され得る。2J+1ビット結果の先頭ビットは、一般に、Jビット入力要素のうちの3つすべてがそれらの最大値にあるか又はその近くにある場合のみ、1になり、したがって、しばしば、大部分の計算について0になる。したがって、先頭ビット以外の次のJビットが、有用な情報をよりしばしば与え得、したがって、トランケートされた結果についてこれらを使用することが、好ましくなり得る。
e) 実例c)と同様のやり方で、レーン結果L[i]のビット[2J−1:J]は、少なくとも1つの下位ビットに基づいて丸められて、結果が生成され得る。
いくつかの実装形態は、これらのトランケーション技法のうちの1つのみをサポートし得るが、他の実装形態は、2つ以上をサポートし、プログラマー/コンパイラが所与の命令のためにどれが使用されるべきであるかを指定することを可能にし得る。
トランケートされた結果は、完全な2J+1ビット・レーン結果が実際に生成され、次いで、図15に示されているやり方でトランケートされた場合に生成されるであろう値に対応するが、ハードウェアがレーン結果の完全な2J+1ビットを実際に生成することは必須でないことに留意されたい。いくつかの場合には、ハードウェアがトランケートされた値を入力オペランドから直接生成することは、可能であり得る(たとえば、パートa)の実例では、レーン結果の上側ビットは、積和演算中に生成される必要はない)。したがって、ハードウェアが、2J+1ビット・レーン結果値からトランケートされた選択されたビットに対応する結果データ要素を生成することは、十分であるが、実際にこのようにして結果データ要素を生成する必要はない。
いくつかの実装形態は、積和命令の整数/固定小数点変形態と浮動小数点変形態の両方をサポートし得る。代替的に、他の実装形態は、ベクトル積和命令の整数/固定小数点変形態、又は浮動小数点変形態のみをサポートし得る。ベクトル積和命令の整数又は固定小数点変形態の場合、命令デコーダは、固定小数点又は整数算術(たとえば、2の補数2値算術)を使用して各結果データ要素を生成するためにベクトル積和演算を実施するように処理回路を制御し得る。一方、浮動変形態の場合、浮動小数点算術が使用され得る。値の各ビットがある固定有意性を有する整数又は固定小数点値とは異なり、浮動小数点値を用いると、データ値の有効ビットが仮数によって表され、別個の指数が、仮数の有意性を示すために与えられる。浮動小数点ユニットが(使用されている特定の浮動小数点フォーマットを使用して表され得る値に処理結果を丸めるために)浮動小数点値の丸めのために、又は(等価有意性の値を、それらを加算又は減算する前に生成するために)浮動小数点オペランドの整合のために、追加の回路を必要とし得るので、処理回路4内の一般に異なる処理ユニットが、それぞれ浮動小数点算術及び整数/固定小数点算術のために与えられ得る。
命令の浮動小数点変形態がサポートされる場合、これは、それぞれ、図16及び図17に示されているように、融合積和演算又は分割積和演算として実装され得る。融合積和を用いると、乗算が実施されて、丸められていない積値を生成し、丸められていない積は、最初に積を丸めずに加数値に加算される。したがって、図16の融合演算を用いると、積と加数との加算又は減算が実施された後に実施される単一の丸めステップのみがある。この手法は、追加の丸めステップを回避することが、丸められていない積の増加された精度を保持するので、いくつかの利点を有し、より正確な結果を与えることができるが、この手法はまた、性能を改善するために、乗算自体と並行して実施されるべき、加数値を丸められていない積と整合させるためのシフトを有効にする(とはいえ、融合積和に対するいくつかの手法は、加数値が演算の後の段において入力されることを可能にするために、後になるまで整合を遅延させることを決め得、これは、異なる命令間のパイプライン化を改善することができる)。
一方で、図17に示されている分割積和手法を用いると、乗算が第1に実施され、丸めステップが実施されて、丸められた積を生成し、丸められた積は、次いで後続の加算又は減算段において、整合された加数に加算され、その後に、加算器によって生成された和又は差を丸めるための第2の丸め演算が続いて、最終結果を生成する。分割手法は、いくつかの場合には、分割手法が、スタンド・アロン乗算又は加算命令を実行するために与えられる既存の乗算及び加算回路により効率的にオーバーレイし得るので、ハードウェアで実装するのがより簡単であり得る。
したがって、いくつかのシステム設計は、ベクトル積和命令の浮動変形態の場合、融合積和のみ、又は分割積和のみを実装し得る。他のシステムは、両方のタイプの演算をサポートし得、したがって、浮動小数点ベクトル積和命令の別個の融合積和変形態及び分割積和変形態があり得る。
ベクトル積和命令のいくつかの変形態は、上記で説明されている。概して、これらの変形態は、任意の所望の組合せで、たとえば、分割積和浮動小数点変形態で組み合わせられ得、分割積和浮動小数点変形態は加数値をスカラー値として指定し、入力ベクトルのうちの1つが宛先レジスタでもある破壊的形式を使用する。したがって、簡潔のために、これらの命令のすべての組合せが説明されたとは限らないが、必要に応じて異なる変形態を組み合わせることが可能である。概して、命令の異なる変形態は、演算のどんな変形態が処理回路によって実施されるべきであるかを指定するために、任意のやり方で、たとえば、異なる命令オペコードを使用することによって、又は命令符号化の別のビットフィールドを使用することによって区別され得る。たとえば、積和命令の変形態を定義するいくつかのパラメータはまた、命令符号化とは別に、たとえば、制御レジスタ中の制御ビットを使用して指定され得る。
図18は、ベクトル命令の処理の実例を示す流れ図である。ステップ103において、実行されるべき次の命令が、メモリ・システム8からフェッチされる。ステップ100において、命令デコーダ6は、処理されるべきフェッチされた命令が、少なくとも1つのスカラー・レジスタと少なくとも1つのベクトル・レジスタとを指定するベクトル積和命令であるかどうかを決定する。そのようなベクトル積和命令でない場合、命令は、遭遇される命令のタイプに適した様式で処理される。そのようなベクトル積和命令が遭遇されたとき、それは復号され、命令デコーダ6は、ステップ102において、ベクトル処理のいくつかのレーンを含むベクトル積和演算を実施するように処理回路4を制御するための制御信号を生成する。各プレディケートされないレーンは、積値と加数値との和又は差に対応する結果データ要素を生成し、ここで、積値は、第1のベクトル値のそれぞれのデータ要素と乗数との積である。加数値と乗数値とのうちの少なくとも一方が、ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の部分として指定される。
要約すれば、加数と乗数の一方又は両方を識別するためにスカラー・レジスタを使用するベクトル積和命令を与えることによって、これは、限られた数のみが物理的に与えられるので、又はリソースが同時に実行命令との間で共有されるので、限られたベクトル・レジスタ読出しポートをもつプロセッサ・コアに特に好適である、様々な共通算術演算のためのデータを処理する効率的なやり方を与える。命令はまた、いくつかの処理アルゴリズムを実装するために必要とされる命令の数を低減するのを助け、それにより、コード・サイズを減少させるか、又はコード密度を増加させる。実行されるべき命令の数を低減することも、性能を増加させ得る。
図19は、使用され得る仮想マシン実装形態を示す。前に説明された実施例は、関係する技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法に関して本発明を実装するが、ハードウェア・デバイスのいわゆる仮想マシン実装形態を与えることも可能である。これらの仮想マシン実装形態は、仮想マシン・プログラム130をサポートするホスト・オペレーティング・システム140を動作させる、ホスト・プロセッサ150上で動作する。一般に、妥当な速度で実行する仮想マシン実装形態を提供するために、大きい、強力なプロセッサが必要とされるが、そのような手法は、適合性又は再利用理由のために、別のプロセッサにネイティブなコードを動作させる要望があるときなど、いくつかの状況で正当化され得る。仮想マシン・プログラム130は、仮想マシン・プログラム130によってモデル化されたデバイスである実際のハードウェアによって提供されるであろう、ハードウェア・インターフェースと同様である仮想ハードウェア・インターフェースをゲスト・プログラム120に提供する。したがって、上記のメモリ・アクセスの制御を含むプログラム命令は、仮想マシン・ハードウェアとのそれらの対話をモデル化するために仮想マシン・プログラム130を使用して、ゲスト・プログラム120内から実行され得る。ゲスト・プログラム120は、ベア・メタル(bare metal)プログラムであり得、又は代替的に、それは、ホストOS140が仮想マシン・アプリケーション130を動作させるやり方と同様のやり方でアプリケーションを動作させる、ゲスト・オペレーティング・システムであり得る。異なるタイプの仮想マシンがあり、いくつかのタイプでは、仮想マシンは、ホストOS140の必要なしに、ホスト・ハードウェア150上で直接動作することも諒解されよう。
本出願では、「...ように構成された(configured to...)」という言葉は、装置の要素が、定義された動作を行うことが可能である構成を有することを意味するために使用される。このコンテキストにおいて、「構成」は、ハードウェア又はソフトウェアの相互接続の配列又は様式を意味する。たとえば、装置が、定義された動作を提供する専用ハードウェアを有し得るか、又は、プロセッサ若しくは他の処理デバイスが、機能を実施するようにプログラムされ得る。「ように構成された」は、装置要素が定義された動作を提供するために、何らかのやり方で変更されることを必要とすることを暗示しない。
本発明の例示的な実施例が、添付の図面を参照しながら本明細書では詳細に説明されたが、本発明がそれらの正確な実施例に限定されないこと、並びに、様々な変更及び修正が、添付の特許請求の範囲及び趣旨によって規定される本発明の範囲から逸脱することなく、当業者によってその中で実施され得ることを理解されたい。

Claims (24)

  1. データ処理を実施するための処理回路と、
    複数のデータ要素を含むベクトル値を記憶するための複数のベクトル・レジスタと、
    スカラー値を記憶するための複数のスカラー・レジスタと、
    複数の結果データ要素を含む結果ベクトル値を生成するために、少なくとも1つのベクトル・レジスタと少なくとも1つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令によって指定された第1のベクトル・レジスタに記憶された第1のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように前記処理回路を制御するために、前記ベクトル積和命令を復号するための命令デコーダと
    を備える装置であって、
    処理の各レーンが、積値と加数値との和又は差に対応する前記結果ベクトル値のそれぞれの結果データ要素を生成することを含み、前記積値が、前記第1のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
    処理の各レーンについて、前記乗数値と前記加数値とのうちの少なくとも一方が、前記ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む、装置。
  2. 処理の各レーンについて、前記乗数値と前記加数値とのうちの一方が前記スカラー値の前記少なくとも部分を含み、前記乗数値と前記加数値とのうちの他方が、前記ベクトル積和命令によって指定された第2のベクトル・レジスタに記憶された第2のベクトル値のそれぞれのデータ要素を含む、請求項1に記載の装置。
  3. 前記ベクトル積和命令の第1の変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記ベクトル積和演算において、処理の各レーンについて、前記加数値が前記スカラー値の前記少なくとも部分を含み、前記乗数値が前記第2のベクトル値の前記それぞれのデータ要素を含む、請求項2に記載の装置。
  4. 前記ベクトル積和命令の第2の変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記ベクトル積和演算において、処理の各レーンについて、前記乗数値が前記スカラー値の前記少なくとも部分を含み、前記加数値が前記第2のベクトル値の前記それぞれのデータ要素を含む、請求項2及び3のいずれか一項に記載の装置。
  5. 前記処理回路は、前記結果ベクトル値の所与の部分がマスキングされるべき部分であることを識別するプレディケーション指示に応答して、前記所与の部分に関連する演算をマスキングするように構成された、請求項1から4までのいずれか一項に記載の装置。
  6. 前記結果データ要素の各部分についての前記プレディケーション指示が、前記ベクトル積和命令によって指定されたプレディケート・レジスタにおいて指定される、請求項5に記載の装置。
  7. 前記結果データ要素の各部分についての前記プレディケーション指示が、前記ベクトル積和命令の符号化から独立して、プレディケーション回路によって与えられるか、又はプレディケート・レジスタにおいて指定される、請求項5に記載の装置。
  8. 所与のベクトル命令に応答して、前記処理回路が、ベクトル値のセクションに各々対応する処理の複数のビートを実施するように構成され、
    前記処理回路が、第1のベクトル命令と第2のベクトル命令との重複実行をサポートするように構成され、前記重複実行において、前記第2のベクトル命令のビートの第1のサブセットが、前記第1のベクトル命令のビートの第2のサブセットと並行して実施される、請求項1から7までのいずれか一項に記載の装置。
  9. 前記ベクトル積和命令の加算変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、ここで、処理の各レーンが、前記加数値と前記積値との前記和に対応する前記それぞれの結果データ要素を生成することを含む、請求項1から8までのいずれか一項に記載の装置。
  10. 前記ベクトル積和命令の減算変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、ここで、処理の各レーンが、前記加数値と前記積値との前記差に対応する前記それぞれの結果データ要素を生成することを含む、請求項1から9までのいずれか一項に記載の装置。
  11. 前記ベクトル積和命令の飽和変形態に応答して、前記命令デコーダは、処理の対応するレーンの結果が所定の範囲外にあるとき、前記結果ベクトル値の所与の結果データ要素を前記所定の範囲の最小値又は最大値にクランプするように前記処理回路を制御するように構成された、請求項1から10までのいずれか一項に記載の装置。
  12. 前記第1のベクトル値が、前記処理回路によってサポートされる複数のデータ要素サイズのうちの1つを有するデータ要素を含む、請求項1から11までのいずれか一項に記載の装置。
  13. 前記第1のベクトル値の前記データ要素のデータ要素サイズが前記スカラー・レジスタの幅よりも小さいとき、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記乗数値と前記加数値とのうちの前記少なくとも一方が、前記データ要素サイズに対応する幅を有する前記スカラー値の部分に対応する、請求項1から12までのいずれか一項に記載の装置。
  14. 前記ベクトル積和命令の整数又は固定小数点変形態に応答して、前記命令デコーダが、整数又は固定小数点算術を使用して前記結果ベクトル値の前記それぞれの結果データ要素を生成するように前記処理回路を制御するように構成された、請求項1から13までのいずれか一項に記載の装置。
  15. 前記ベクトル積和命令の要素拡大変形態に応答して、前記命令デコーダが、Kビット結果データ要素を含む前記結果ベクトル値を生成するために、Jビット・データ要素を含む前記第1のベクトル値に対して前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、ここで、K>Jである、請求項14に記載の装置。
  16. 前記ベクトル積和命令の要素サイズ保存変形態に応答して、前記命令デコーダが、Jビット結果データ要素を含む前記結果ベクトル値を生成するために、Jビット・データ要素を含む前記第1のベクトル値に対して前記ベクトル積和演算を実施するように前記処理回路を制御するように構成された、請求項14及び15のいずれか一項に記載の装置。
  17. 前記ベクトル積和命令の前記要素サイズ保存変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、ここで、処理の所与のレーンについて、前記それぞれの結果データ要素が、
    前記積値と前記加数値との前記和又は前記差に対応する値の最下位Jビットと、
    前記和又は前記差に対応する前記値の最上位Jビットと、
    前記和又は前記差に対応する前記値の最上位Jビットであって、前記最上位Jビットよりも小さい、前記和又は前記差に対応する前記値の少なくとも1つの下位ビットに基づいて丸められた、最上位Jビットと、
    前記積値と前記加数値との前記和又は前記差に対応する2J+1ビット値のビット[2J−1:J]と、
    前記2J+1ビット値のビット[J−1:0]のうちの少なくとも1つに基づいて丸められた、前記2J+1ビット値のビット[2J−1:J]と
    のうちの1つに対応する、請求項16に記載の装置。
  18. 前記ベクトル積和命令の浮動小数点変形態に応答して、前記命令デコーダが、浮動小数点算術を使用して前記結果ベクトル値の前記それぞれの結果データ要素を生成するために、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成された、請求項1から13までのいずれか一項に記載の装置。
  19. 前記ベクトル積和命令の分割浮動小数点変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記ベクトル積和演算において、処理の各レーンが、前記第1のベクトル値の前記それぞれのデータ要素と前記乗数値との丸められた積を生成することと、前記丸められた積と前記加数値との和又は差に従って前記結果ベクトル値の前記それぞれの結果データ要素を生成することとを含む、請求項18に記載の装置。
  20. 前記ベクトル積和命令の融合浮動小数点変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記ベクトル積和演算において、処理の各レーンが、前記第1のベクトル値の前記それぞれのデータ要素と前記乗数値との丸められていない積を生成することと、前記丸められていない積と前記加数値との和又は差に従って前記結果ベクトル値の前記それぞれの結果データ要素を生成することとを含む、請求項18及び19のいずれか一項に記載の装置。
  21. データ処理を実施するための手段と、
    複数のデータ要素を含むベクトル値を記憶するための複数の手段と、
    スカラー値を記憶するための複数の手段と、
    複数の結果データ要素を含む結果ベクトル値を生成するために、ベクトル値を記憶するための少なくとも1つの手段とスカラー値を記憶するための少なくとも1つの手段とを指定するベクトル積和命令によって指定された、ベクトル値を記憶するための第1の手段に記憶された第1のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように、データ処理を実施するための前記手段を制御するために、前記ベクトル積和命令を復号するための手段と
    を備える装置であって、
    処理の各レーンが、積値と加数値との和又は差に対応する前記結果ベクトル値のそれぞれの結果データ要素を生成することを含み、前記積値が、前記第1のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
    処理の各レーンについて、前記乗数値と前記加数値とのうちの少なくとも一方が、前記ベクトル積和命令によって指定された、スカラー値を記憶するための手段に記憶されたスカラー値の少なくとも部分を含む、装置。
  22. 少なくとも1つのベクトル・レジスタと少なくとも1つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令を復号するステップと、
    前記ベクトル積和命令に応答して、複数の結果データ要素を含む結果ベクトル値を生成するために、前記ベクトル積和命令によって指定された第1のベクトル・レジスタに記憶された第1のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように処理回路を制御するステップと
    を含むデータ処理方法であって、
    処理の各レーンが、積値と加数値との和又は差に対応する前記結果ベクトル値のそれぞれの結果データ要素を生成することを含み、前記積値が、前記第1のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
    処理の各レーンについて、前記乗数値と前記加数値とのうちの少なくとも一方が、前記ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む、データ処理方法。
  23. 請求項1から20までのいずれか一項に記載の装置に対応する、命令実行環境を与えるようにホスト・データ処理装置を制御するためのプログラム命令を含む、仮想マシン・コンピュータ・プログラム。
  24. 請求項23に記載の仮想マシン・コンピュータ・プログラムを記憶するコンピュータ可読記憶媒体。
JP2019512719A 2016-09-13 2017-08-14 ベクトル積和命令 Active JP7203016B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1615526.9 2016-09-13
GB1615526.9A GB2553783B (en) 2016-09-13 2016-09-13 Vector multiply-add instruction
PCT/GB2017/052386 WO2018051057A1 (en) 2016-09-13 2017-08-14 Vector multiply-add instruction

Publications (2)

Publication Number Publication Date
JP2019526866A true JP2019526866A (ja) 2019-09-19
JP7203016B2 JP7203016B2 (ja) 2023-01-12

Family

ID=57234431

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019512719A Active JP7203016B2 (ja) 2016-09-13 2017-08-14 ベクトル積和命令

Country Status (9)

Country Link
US (1) US11188330B2 (ja)
EP (1) EP3513281B1 (ja)
JP (1) JP7203016B2 (ja)
KR (1) KR102413832B1 (ja)
CN (1) CN109661647B (ja)
GB (1) GB2553783B (ja)
IL (1) IL264683B (ja)
TW (1) TWI763698B (ja)
WO (1) WO2018051057A1 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
US11327862B2 (en) * 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11507374B2 (en) 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11340904B2 (en) 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
CN112286578A (zh) * 2019-07-25 2021-01-29 北京百度网讯科技有限公司 由计算设备执行的方法、装置、设备和计算机可读存储介质
CN110750232B (zh) * 2019-10-17 2023-06-20 电子科技大学 一种基于sram的并行乘加装置
CN111027018B (zh) * 2019-12-20 2023-03-31 支付宝(杭州)信息技术有限公司 加速计算设备建模的方法、装置、计算设备及介质
US11887647B2 (en) * 2020-04-09 2024-01-30 Micron Technology, Inc. Deep learning accelerator and random access memory with separate memory access connections
US11355175B2 (en) 2020-04-09 2022-06-07 Micron Technology, Inc. Deep learning accelerator and random access memory with a camera interface
US11874897B2 (en) 2020-04-09 2024-01-16 Micron Technology, Inc. Integrated circuit device with deep learning accelerator and random access memory
CN112181494B (zh) * 2020-09-28 2022-07-19 中国人民解放军国防科技大学 一种浮点物理寄存器文件的实现方法
CN113220268B (zh) * 2021-06-11 2022-08-02 上海交通大学 光电混合乘累加计算结构
CN114579083B (zh) * 2022-05-09 2022-08-05 上海擎昆信息科技有限公司 一种基于矢量处理器的数据处理装置和方法
US20240103858A1 (en) * 2022-09-22 2024-03-28 Apple Inc. Instruction Support for Matrix Multiplication

Citations (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS641059A (en) * 1986-07-16 1989-01-05 Nec Corp Vector computing system
US5081573A (en) * 1984-12-03 1992-01-14 Floating Point Systems, Inc. Parallel processing system
JPH0476772A (ja) * 1990-07-18 1992-03-11 Hitachi Ltd ベクトルデータ処理装置
US5226171A (en) * 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
JPH0962655A (ja) * 1995-08-24 1997-03-07 Hitachi Ltd マルチプロセッサシステム
JP2001256199A (ja) * 2000-03-13 2001-09-21 Hitachi Ltd データプロセッサ及びデータ処理システム
JP2005174298A (ja) * 2003-12-09 2005-06-30 Arm Ltd “ベクトル×スカラ”演算
JP2006039840A (ja) * 2004-07-26 2006-02-09 Nec Computertechno Ltd ベクトル処理装置、情報処理装置、および、ベクトル処理方法
JP2006171827A (ja) * 2004-12-13 2006-06-29 Seiko Epson Corp 演算処理装置および演算処理プログラム
JP2008083947A (ja) * 2006-09-27 2008-04-10 Nec Computertechno Ltd 情報処理装置、記憶領域制御方法及びプログラム
JP2010539593A (ja) * 2007-09-13 2010-12-16 フリースケール セミコンダクター インコーポレイテッド 重複オペランドを使用したsimdの内積演算
JP2011096254A (ja) * 2009-10-30 2011-05-12 Arm Ltd 乗累算演算を実行するための装置および方法
JP2012505455A (ja) * 2008-10-08 2012-03-01 アーム・リミテッド Simd積和演算動作を行うための装置及び方法
JP2013543173A (ja) * 2010-09-24 2013-11-28 インテル・コーポレーション ベクトル先頭ゼロ、ベクトル末尾ゼロ、ベクトルオペランド1sカウントおよびベクトルパリティ計算のための機能ユニット
JP2015194844A (ja) * 2014-03-31 2015-11-05 Necプラットフォームズ株式会社 情報処理装置及び制御方法
WO2016003740A1 (en) * 2014-07-02 2016-01-07 Via Alliance Semiconductor Co., Ltd. Split-path fused multiply-accumulate operation using first and second sub-operations

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4974198A (en) 1986-07-16 1990-11-27 Nec Corporation Vector processing system utilizing firm ware control to prevent delays during processing operations
US5197130A (en) 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
JP3857614B2 (ja) * 2002-06-03 2006-12-13 松下電器産業株式会社 プロセッサ
US7877582B2 (en) 2008-01-31 2011-01-25 International Business Machines Corporation Multi-addressable register file
US8667042B2 (en) * 2010-09-24 2014-03-04 Intel Corporation Functional unit for vector integer multiply add instruction
CN101986264B (zh) * 2010-11-25 2013-07-31 中国人民解放军国防科学技术大学 用于simd向量微处理器的多功能浮点乘加运算装置
US9411585B2 (en) * 2011-09-16 2016-08-09 International Business Machines Corporation Multi-addressable register files and format conversions associated therewith
CN107102844B (zh) * 2011-12-23 2021-06-08 英特尔公司 超级乘加(超级madd)指令
CN104011664B (zh) * 2011-12-23 2016-12-28 英特尔公司 使用三个标量项的超级乘加(超级madd)指令
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US9275014B2 (en) * 2013-03-13 2016-03-01 Qualcomm Incorporated Vector processing engines having programmable data path configurations for providing multi-mode radix-2x butterfly vector processing circuits, and related vector processors, systems, and methods
CN103440121B (zh) * 2013-08-20 2016-06-29 中国人民解放军国防科学技术大学 一种面向向量处理器的三角矩阵乘法向量化方法
CN104461449B (zh) * 2014-11-14 2018-02-27 中国科学院数据与通信保护研究教育中心 基于向量指令的大整数乘法实现方法及装置
CN105373367B (zh) * 2015-10-29 2018-03-02 中国人民解放军国防科学技术大学 支持标向量协同工作的向量simd运算结构

Patent Citations (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5081573A (en) * 1984-12-03 1992-01-14 Floating Point Systems, Inc. Parallel processing system
US5226171A (en) * 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
JPS641059A (en) * 1986-07-16 1989-01-05 Nec Corp Vector computing system
JPH0476772A (ja) * 1990-07-18 1992-03-11 Hitachi Ltd ベクトルデータ処理装置
JPH0962655A (ja) * 1995-08-24 1997-03-07 Hitachi Ltd マルチプロセッサシステム
JP2001256199A (ja) * 2000-03-13 2001-09-21 Hitachi Ltd データプロセッサ及びデータ処理システム
JP2005174298A (ja) * 2003-12-09 2005-06-30 Arm Ltd “ベクトル×スカラ”演算
JP2006039840A (ja) * 2004-07-26 2006-02-09 Nec Computertechno Ltd ベクトル処理装置、情報処理装置、および、ベクトル処理方法
JP2006171827A (ja) * 2004-12-13 2006-06-29 Seiko Epson Corp 演算処理装置および演算処理プログラム
JP2008083947A (ja) * 2006-09-27 2008-04-10 Nec Computertechno Ltd 情報処理装置、記憶領域制御方法及びプログラム
JP2010539593A (ja) * 2007-09-13 2010-12-16 フリースケール セミコンダクター インコーポレイテッド 重複オペランドを使用したsimdの内積演算
JP2012505455A (ja) * 2008-10-08 2012-03-01 アーム・リミテッド Simd積和演算動作を行うための装置及び方法
JP2011096254A (ja) * 2009-10-30 2011-05-12 Arm Ltd 乗累算演算を実行するための装置および方法
JP2013543173A (ja) * 2010-09-24 2013-11-28 インテル・コーポレーション ベクトル先頭ゼロ、ベクトル末尾ゼロ、ベクトルオペランド1sカウントおよびベクトルパリティ計算のための機能ユニット
JP2015194844A (ja) * 2014-03-31 2015-11-05 Necプラットフォームズ株式会社 情報処理装置及び制御方法
WO2016003740A1 (en) * 2014-07-02 2016-01-07 Via Alliance Semiconductor Co., Ltd. Split-path fused multiply-accumulate operation using first and second sub-operations

Also Published As

Publication number Publication date
US11188330B2 (en) 2021-11-30
GB2553783B (en) 2020-11-04
KR102413832B1 (ko) 2022-06-28
GB2553783A (en) 2018-03-21
TW201812571A (zh) 2018-04-01
EP3513281A1 (en) 2019-07-24
JP7203016B2 (ja) 2023-01-12
IL264683B (en) 2021-10-31
CN109661647B (zh) 2023-03-03
EP3513281B1 (en) 2022-11-23
KR20190045316A (ko) 2019-05-02
US20190196825A1 (en) 2019-06-27
GB201615526D0 (en) 2016-10-26
TWI763698B (zh) 2022-05-11
CN109661647A (zh) 2019-04-19
WO2018051057A1 (en) 2018-03-22

Similar Documents

Publication Publication Date Title
JP7203016B2 (ja) ベクトル積和命令
EP3436928B1 (en) Complex multiply instruction
WO2015118299A1 (en) A data processing apparatus and method for performing segmented operations
CN108780395B (zh) 矢量预测指令
US9965275B2 (en) Element size increasing instruction
CN111381880A (zh) 加载-存储指令
CN111381939A (zh) 多线程处理器中的寄存器文件
JP5326314B2 (ja) プロセサおよび情報処理装置
JP2006228190A (ja) 入力値に逆数演算を実施して結果値を作り出すデータ処理装置および方法
US11106465B2 (en) Vector add-with-carry instruction
US11714641B2 (en) Vector generating instruction for generating a vector comprising a sequence of elements that wraps as required
US11275712B2 (en) SIMD controller and SIMD predication scheme

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200807

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210818

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210916

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211206

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220427

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220725

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20221226

R150 Certificate of patent or registration of utility model

Ref document number: 7203016

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150