JP2019511056A - 複素数乗算命令 - Google Patents

複素数乗算命令 Download PDF

Info

Publication number
JP2019511056A
JP2019511056A JP2018549815A JP2018549815A JP2019511056A JP 2019511056 A JP2019511056 A JP 2019511056A JP 2018549815 A JP2018549815 A JP 2018549815A JP 2018549815 A JP2018549815 A JP 2018549815A JP 2019511056 A JP2019511056 A JP 2019511056A
Authority
JP
Japan
Prior art keywords
instruction
vector
complex multiplication
product
real
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2018549815A
Other languages
English (en)
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 JP2019511056A publication Critical patent/JP2019511056A/ja
Pending legal-status Critical Current

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/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/30141Implementation provisions of register files, e.g. ports
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields

Landscapes

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

Abstract

複素数の実数部を表す少なくとも1つの実数データ要素と、複素数の虚数部を表す少なくとも1つの虚数要素とを含む複数のデータ要素を含む第1および第2のオペランドベクトル上で動作するための複素数乗算命令の第1および第2の形式を提供する。命令の第1および第2の形式のうちの1つは宛先ベクトルの少なくとも1つの実数要素をターゲットとし、他方は少なくとも1つの虚数要素をターゲットとする。各命令の1つを実行することにより、(a+ib)*(c+id)の形式の複素数乗算は、比較的少数の命令および2つのベクトルレジスタ読み出しポートのみを使用して計算することができ、それによりFFTなどのDSPアルゴリズムを、比較的低電力のハードウェア実装を使用してより効率的に計算することができる。

Description

本技術は、データ処理の技術分野に関する。
データ処理アプリケーションの中には、実部と虚部、すなわちa+ibという形式の数を持つ複素数の処理があり、ここでiは−1の平方根を表す(−1の平方根を‘j’で表すこともできるが、ここでは‘i’を使用する)。複素数演算は、高速フーリエ変換(FFT)の計算など、デジタル信号処理(DSP)アプリケーションに特に役立つ。
一部のDSPアルゴリズムは、r=(a+ib)*(c+id)の形式の多数の乗算を必要とする可能性があるので、プロセッサが複素数乗算を処理する方法は、性能に影響を与える要因となり得る。
少なくとも一部の例は、データ処理装置を提供し、装置は、
データ処理を実行する処理回路と、
データ処理を実行するように処理回路を制御する命令をデコードする命令デコーダと
を含み、
ここで命令デコーダは、第1および第2オペランドベクトルに対する部分複素数乗算演算を実行して宛先ベクトルの少なくとも1つのターゲット要素を第1の積および第2の積の加算または減算結果に依存する値に設定するように処理回路を制御するために複素数乗算命令をデコードするように構成され、第1および第2のオペランドベクトルならびに宛先ベクトルの各々は、複素数の実数部を表す少なくとも1つの実数要素と、複素数の虚数部を表す少なくとも1つの虚数要素とを含む複数のデータ要素を含み、
複素数乗算命令の第1の形式に応答して、命令デコーダは、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの対応する実数要素との積を含む第1の積、および第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの対応する虚数要素との積を含む第2の積で部分複素数乗算演算を実行するように処理回路を制御するように構成され、
複素数乗算命令の第2の形式に応答して、命令デコーダは、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの虚数要素との積を含む第1の積、および第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの実数要素との積を含む第2の積で部分複素数乗算演算を実行するように処理回路を制御するように構成され、
複素数乗算命令の第1および第2の形式のうちの1つに応答して、命令デコーダは、宛先ベクトルの少なくとも1つの実数要素を含む前記少なくとも1つのターゲット要素で部分複素数乗算演算を実行するように処理回路を制御するように構成され、
複素数乗算命令の第1および第2の形式のうちの他方に応答して、命令デコーダは、宛先ベクトルの少なくとも1つの虚数要素を含む前記少なくとも1つのターゲット要素で部分複素数乗算演算を実行するように処理回路を制御するように構成され、そして、
複素数乗算命令の第1および第2の形式のうちの少なくとも1つに応答して、命令デコーダは、前記少なくとも1つのターゲット要素以外の宛先ベクトルの少なくとも1つの要素の更新を抑制するように処理回路を制御するように構成されている。
少なくとも一部の例は、データ処理装置を提供し、装置は、
データ処理実行手段と、
データ処理を実行するようにデータ処理手段を制御する命令をデコードする手段と
を含み、
ここでデコード手段は、第1および第2オペランドベクトルに対する部分複素数乗算演算を実行して宛先ベクトルの少なくとも1つのターゲット要素を第1の積および第2の積の加算または減算結果に依存する値に設定するようにデータ処理実行手段を制御するために複素数乗算命令をデコードするように構成され、第1および第2のオペランドベクトルならびに宛先ベクトルの各々は、複素数の実数部を表す少なくとも1つの実数要素と、複素数の虚数部を表す少なくとも1つの虚数要素とを含む複数のデータ要素を含み、
複素数乗算命令の第1の形式に応答して、デコード手段は、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの対応する実数要素との積を含む第1の積、および第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの対応する虚数要素との積を含む第2の積で部分複素数乗算演算を実行するようにデータ処理実行手段を制御するように構成され、
複素数乗算命令の第2の形式に応答して、デコード手段は、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの虚数要素との積を含む第1の積、および第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの実数要素との積を含む第2の積で部分複素数乗算演算を実行するようにデータ処理実行手段を制御するように構成され、
複素数乗算命令の第1および第2の形式のうちの1つに応答して、デコード手段は、宛先ベクトルの少なくとも1つの実数要素を含む前記少なくとも1つのターゲット要素で部分複素数乗算演算を実行するようにデータ処理実行手段を制御するように構成され、
複素数乗算命令の第1および第2の形式のうちの他方に応答して、デコード手段は、宛先ベクトルの少なくとも1つの虚数要素を含む前記少なくとも1つのターゲット要素で部分複素数乗算演算を実行するようにデータ処理実行手段を制御するように構成され、そして、
複素数乗算命令の第1および第2の形式のうちの少なくとも1つに応答して、デコード手段は、前記少なくとも1つのターゲット要素以外の宛先ベクトルの少なくとも1つの要素の更新を抑制するようにデータ処理実行手段を制御するように構成されている。
少なくとも一部の例は、データ処理方法を提供し、方法は、
第1および第2オペランドベクトルに対する部分複素数乗算演算を実行して宛先ベクトルの少なくとも1つのターゲット要素を第1の積および第2の積の加算または減算結果に依存する値に設定するように処理回路を制御するために複素数乗算命令をデコードするステップを含み、第1および第2のオペランドベクトルならびに宛先ベクトルの各々は、複素数の実数部を表す少なくとも1つの実数要素と、複素数の虚数部を表す少なくとも1つの虚数要素とを含む複数のデータ要素を含み、
ここで複素数乗算命令の第1の形式に応答して、部分複素数乗算演算は、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの対応する実数要素との積を含む第1の積、および第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの対応する虚数要素との積を含む第2の積で実行され、
複素数乗算命令の第2の形式に応答して、部分複素数乗算演算は、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの虚数要素との積を含む第1の積、および第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの実数要素との積を含む第2の積で実行され、
複素数乗算命令の第1および第2の形式のうちの1つに応答して、部分複素数乗算演算は、宛先ベクトルの少なくとも1つの実数要素を含む前記少なくとも1つのターゲット要素で実行され、
複素数乗算命令の第1および第2の形式のうちの他方に応答して、部分複素数乗算演算は、宛先ベクトルの少なくとも1つの虚数要素を含む前記少なくとも1つのターゲット要素で実行され、そして、
複素数乗算命令の第1および第2の形式のうちの少なくとも1つに応答して、前記少なくとも1つのターゲット要素以外の宛先ベクトルの少なくとも1つの要素を更新するステップは抑制される。
少なくとも一部の例は、上述した装置に対応する命令実行環境を提供するようにホストデータ処理装置を制御するプログラム命令を含む仮想マシンコンピュータプログラムを提供する。
仮想マシンコンピュータプログラムを格納したコンピュータ可読な記憶媒体を提供することもできる。記憶媒体は、非一時的な記憶媒体であってもよい。
本技術のさらなる態様、特徴および利点は、添付の図面と併せて読まれるべき以下の実施例の説明から明らかになるであろう。
ベクトル命令の実行をサポートするデータ処理装置の一例を概略的に示す。 ベクトル命令を使用して2つの複素数を乗算する別の手法を示す比較例である。 複素数乗算命令の第1の形式および第2の形式を使用して2つの複素数を乗算する例を示す。 複素数共役乗算を計算する命令の第1および第2の形式を使用する例を示す。 複素数乗算命令の第1および第2の形式の第2のバージョンを概略的に示す。 複素数の実数部または虚数部を表すベクトルの実数および虚数要素を割り当てる様々な例を示す。 宛先ベクトルのターゲット要素を生成するための切り捨てを実行する方法を示す。 宛先ベクトルのターゲット要素を生成するための切り捨てを実行する別の方法を示す。 複素数乗算命令の要素拡大型変形を示す。 命令の要素拡大型変形に応答して切り捨てを実行する代替方法を示す。 命令の要素拡大型変形に応答して切り捨てを実行する別の代替方法を示す。 ベクトル予測命令をベクトル命令に先行させることによってベクトル命令の予測を制御する例を概略的に示す。 ベクトル化されたループの処理中に予測を制御する例を概略的に示す。 ベクトル命令の実行のそれぞれのビートをオーバーラップさせる例を示す。 ベクトル命令の実行のそれぞれのビートをオーバーラップさせる例を示す。 ベクトル命令の実行のそれぞれのビートをオーバーラップさせる例を示す。 複素数乗算命令を処理する方法を示すフロー図である。 使用可能な仮想マシン実装を示す。
一部の特定例を以下に説明する。本発明はこれらの特定例に限定されないことが理解されよう。
データ処理装置は、第1および第2オペランドベクトルに対する部分複素数乗算演算を実行して宛先ベクトルの少なくとも1つのターゲット要素を第1の積および第2の積の加算または減算結果に依存する値に設定するように処理回路を制御するための複素数乗算命令のデコードをサポートする命令デコーダを有する。第1および第2のオペランドベクトルならびに宛先ベクトルの各々は、複素数の実数部を表す少なくとも1つの実数要素と、複素数の虚数部を表す少なくとも1つの虚数要素とを含む複数のデータ要素を含む。
複素数乗算命令には2つの形式が用意されている。どちらの形式も、宛先ベクトルの少なくとも1つのターゲット要素を、第1の積および第2の積の加算または減算結果に依存する値に設定する。複素数乗算命令の第1の形式の場合、命令デコーダは、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの対応する実数要素との積を含む第1の積、および第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの対応する虚数要素との積を含む第2の積で部分複素数乗算演算を実行するように処理回路を制御する。複素数乗算命令の第2の形式の場合、第1の積は第1のオペランドベクトルの実数要素と第2のオペランドベクトルの虚数要素との積を含み、第2の積は第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの実数要素との積を含む。複素数乗算命令の第1および第2形式のうちの1つは、宛先ベクトルの少なくとも1つの実数要素を含むターゲット要素を有し、他方は宛先ベクトルの少なくとも1つの虚数要素をターゲットとする。複素数乗算命令の第1および第2の形式のうちの少なくとも1つは、少なくとも1つのターゲット要素以外の宛先ベクトルの少なくとも1つの要素の更新を抑制する。
この手法にはいくつかの利点がある。第1に、複素数の実数部および虚数部がベクトルの各要素によって表される専用の複素数乗算命令を提供することは、(a+ib)(c+id)の形式の乗算が、より少ない命令を使用して、かつ乗算の個々の項(例えばac、ibc、iad、−bd)を、累算して最終結果にする前に一時的に記憶するために非常に多くのベクトルレジスタを割り当てる必要なく計算されるので、従来のベクトル乗算命令のみをサポートするシステムと比較して性能を高め、レジスタ圧力を低減することができる。メモリのスピルおよびフィルの必要性が減り、それによりパフォーマンスが大幅に向上するので、比較的低電力の実装ではこの減少したレジスタ圧力は重要な要素になる可能性がある。また、複素数乗算命令の第1および第2の形式(そのうちの1つが宛先の実数要素をターゲットとし、他方が虚数要素をターゲットとする)を提供することにより、2つの命令および2つのベクトルレジスタ読み出しポートを使用するだけで完全な複素数乗算結果を計算することができる。第3のレジスタ読み出しポートを実装する必要性を回避することにより、比較的低電力の実装でかなり大きな回路面積と省電力とを提供することができる。
簡略化のために、命令の第1/第2形式のそれぞれの第1および第2の積は、以下のように称する。
・R*R−命令の第1の形式の第1の積であり、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの実数要素との積に対応する。
・I*I−命令の第1の形式の第2の積であり、第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの虚数要素との積に対応する。
・R*I−命令の第2の形式の第1の積であり、第1のオペランドベクトルの実数要素と第2のオペランドベクトルの虚数要素との積に対応する。
・I*R−命令の第2の形式の第2の積であり、第1のオペランドベクトルの虚数要素と第2のオペランドベクトルの実数要素との積に対応する。
複素数乗算命令の第1および第2の形式は、例えば、異なるオペコードを使用することによって、または命令が第1の形式であるか第2の形式であるかを指定するための命令コード化に別のパラメータを提供することによって、どのような方法でも区別することができる。
ベクトルが実数要素と虚数要素とに分割される特定の方法は、所与のプロセッサ実装に対して任意に選択できる実装選択である。ベクトルの実数要素または虚数要素に格納された数値は、それらの要素が複素数の実数または虚数の要素であるかどうかを識別する必要はないことに留意されたい。ベクトル要素は、1の倍数(実数要素の場合)またはiの倍数(虚数要素の場合)を表す数値を格納するだけであってもよい。しかし、処理回路のハードウェアは、ベクトル内の適切な位置から実数/虚数要素を読み取り、上述した様々な積によって実数/虚数要素を結合し、命令が第1の形式であるか第2の形式であるかによって宛先の実数要素または虚数要素に値を入れる回路配線を含むことができる。したがって、要素が実数/虚数要素であるかどうかは、ベクトル自体に格納された値ではなく、積を計算するための処理回路に設けられたハードウェア相互接続の観点で反映される。複素数乗算命令を使用してプログラムを書いたりコンパイルしたりする場合、複素数の実数要素および虚数要素を表す適切な値を入力オペランドの実数および虚数要素に代入し、宛先ベクトルの結果を適切に解釈するのはプログラマまたはコンパイラ次第であり得る。したがって、「実数」および「虚数」という用語は、要素の第1のサブセットおよび要素の第2のサブセットの単純にラベルと見なすことができる。
処理回路は、1つのベクトル内で異なるデータ要素サイズをサポートすることができる。例えば、128ビットのベクトルは、2個の64ビットデータ要素、4個の32ビットデータ要素、8個の16ビットデータ要素、または16個の8ビットデータ要素に分割することができる。処理回路は、複素数乗算命令に関連するパラメータに基づいてデータ要素の数を決定することができ、パラメータは、命令コードでは即値として、またはパラメータを含むレジスタを示す値として指定することができる。パラメータは、データ要素の数、またはデータ要素の幅(要素あたりのビット数)、またはデータ要素の数を決定できる他の任意の値のいずれかを示すことができる。
したがって、複素数乗算命令が2つの要素のみを含むベクトル上で動作する場合、ベクトルは1つの実数要素および1つの虚数要素のみを有することができる。他の実行例では、ベクトルは3つ以上のデータ要素を有することができ、この場合、ベクトルに実数/虚数要素を配置する様々な方法がある。実数/虚数要素がベクトル内でインタリーブされることは特に有用である。例えば、実数要素は偶数要素であり、虚数要素は奇数要素であり、逆もまた同様である。実数要素および虚数要素をインタリーブすることにより、複素数乗算命令の第1および第2形式によって加算または減算されるそれぞれの積を形成するための乗算が、2つ以上のベクトルレーンにまたがるより長いクロスレーン信号パスを必要とするのではなく、同じベクトルレーン内にあるかすぐ隣のベクトルレーンにのみ交差することのどちらかに制限され得るので、ハードウェア設計がより効率的になる。
入力ベクトルに2つ以上の実数要素および2つ以上の虚数要素がある場合、複素数乗算命令は、処理回路をトリガして、宛先ベクトルの2つ以上のターゲット要素を設定することができ、各ターゲット要素は第1のオペランドベクトルの実数/虚数要素のそれぞれのペアと、第2のオペランドベクトルの実数/虚数要素のそれぞれのペアを使用して計算される第1/第2の積の和/差に対応する。例えば、実数/虚数要素がインタリーブされている場合、隣接する2つの要素(1つの実数要素および1つの虚数要素)の各レーンは、第1/第2オペランドベクトル内の対応するレーンの実数要素および虚数要素の処理結果に基づいて設定されたターゲット要素(実数要素または虚数要素のいずれか)を有することができる。
上述したように、複素数乗算命令の第1および第2の形式のうちの1つは、宛先ベクトルの実数要素をターゲットとし、他方は虚数要素をターゲットとし、第1の形式はR*RおよびI*Iの和または差を計算し、第2の形式はR*IおよびI*Rの和または差を計算する。完全な複素数乗算は、通常、R*R、I*I、R*IおよびI*Rのそれぞれの1つを計算することを必要とするため、同じソースレジスタを指定し、同じ宛先レジスタをターゲットとする、各形式の1つの命令を含む命令のペアを実行することによって、完全な複素数乗算演算を実行して、実数部および虚数部の両方を含む複素数結果を生成することができる。複素数乗算命令の2つの形式が実行される順序は、どちらの方法でも複素数の両方の部分が計算されるため、特に重要ではない。しかし、2番目に実行される複素数乗算命令の第1および第2形式のうちの1つは、先行する複素数乗算命令の結果を上書きすることを避けるために、設定されているターゲット要素以外の目的ベクトルの少なくとも1つの要素の更新を抑制することができる。したがって、複素数乗算命令の第1および第2の形式のうちの少なくとも1つは、処理回路をトリガして、ターゲット要素以外の宛先ベクトルの少なくとも1つの非ターゲット要素の更新を抑制することができる。命令の第1および第2の形式のうちの一方のみがこの更新の抑制を引き起こす場合、プログラマまたはコンパイラは、同じ複素数積の異なる部分を計算するための第1/第2形式の複素数乗算命令のペア内で非ターゲット要素の更新を抑止する形式が2番目に実行されることを保証しなければならない。しかし、複素数乗算命令の第1および第2の形式の両方が処理回路をトリガして非ターゲット要素の更新を抑止する場合、より大幅な柔軟性が提供され、プログラマ/コンパイラは、どの順序ででも命令の第1/第2の形式を自由にコーディングすることができる。
一部の例は、処理回路が、宛先ベクトルの特定の部分に関連する演算のマスキングを制御するための予測情報に応答するベクトル演算の予測をサポートすることができる。これは例えばif−then型の条件付き演算を実装するのに有用であり得る。予測を提供するにはいくつかの方法がある。例えば、一部のシステムは、ベクトル命令の前に実行して比較条件の結果を評価し、かつ比較結果に基づいてベクトルのどの部分をマスクすべきかを指定する予測情報を設定する予測命令をサポートすることができる。また、一部のシステムは、他の命令の一部のベクトルレーンをマスキングするための予測情報を設定するために書き込むことができるいくつかの一般的な予測レジスタを提供してもよく、この場合、予測されるベクトル命令は、予測レジスタのうちのどれが命令を予測するかを示すパラメータを有していてもよい。もう1つの手法は、ループによって処理されるデータ要素の総数がベクトル長の正確な倍数ではない場合、ベクトル化されたループの実行時に、ループの最終反復に到達したときにベクトルのいくつかのレーンを部分的に予測することをサポートするシステムを指す。
予測が実行される方法に関係なく、宛先ベクトルの非ターゲット要素の更新を抑制する複素数乗算命令の形式の場合、この抑制は、その非ターゲット要素に対応する宛先ベクトルの一部がマスクされる部分であることを予測指示が識別しているかどうかにかかわらず起こり得る。この予測は、複素数乗算命令に応答してターゲット要素が実際に更新されるかどうかに影響を及ぼす可能性があるが、たとえ宛先ベクトルの対応する部分がマスクされるべきではないことを予測指示が識別していても、更新を抑制される非ターゲット要素は、複素数乗算命令に応答して更新されない。
複素数乗算命令のいくつかの変形が提供され得る。これらの変形の各々は上述の第1の形式および第2の形式の両方を有し、第1の形態および第2の形態は、実数要素および虚数要素の一方または他方をそれぞれターゲットとする。
例えば、命令デコーダは、第1および第2の積が加算されてターゲット要素に設定される値を生成する加算変形と、第1および第2の積が減算される減算変形をサポートすることができる。これは、形式(a+ib)(c+id)の標準複素数乗算、および形式(a−ib)(c+id)の複素数共役乗算の両方を実行するのに非常に有用である。例えば、標準複素数乗算は、第1の形式の減算変形複素数乗算命令と第2の形式の加算変形複素数乗算命令とを使用して実施することができる。複素数共役乗算演算は、第1の形式の加算変形複素数乗算命令と第2の形式の減算変形複素数乗算命令とを使用して実施することができる。複素数乗算命令の加算および減算変形は、異なるオペコードを有するか、またはそれらの命令コード化の別のパラメータによって区別することができる。
命令デコーダはまた、複素数乗算命令の第1(非転置)のバージョンおよび第2(転置)のバージョンをサポートすることができ、これらは、第1および第2の形式のどちらが宛先ベクトルの実数要素をターゲットとし、どちらが虚数要素をターゲットとするかという点で異なる。
非転置バージョンの場合、第1の形式は、宛先ベクトルの少なくとも1つの実数要素をターゲットとし、第2の形式は、少なくとも1つの虚数要素をターゲットとする。したがって、第1の形式は、1つ以上の実数要素をR*RとI*Iの和または差に対応する値に設定し、第2の形式は、1つ以上の虚数要素をR*IとI*Rの和または差に対応する値に設定する。これにより、(a±ib)*(c+id)の形式の従来の複素数乗算が計算される。
一方、転置バージョンでは、第1の形式は、少なくとも1つの虚数要素をターゲットとし、第2の形式は、宛先ベクトルの少なくとも1つの実数要素をターゲットとする。したがって、第1の形式は、1つ以上の虚数要素をR*RとI*Iの和または差に対応する値に設定し、第2の形式は、1つ以上の実数要素をR*IとI*Rの和または差に対応する値に設定する。これにより、2つの複素数に追加係数±iが乗算される、±i*(a±ib)*(c+id)の形式の乗算が計算される。これは、ベクトルの実数/虚数要素を転置して複素数乗算結果に±iを乗算する命令を追加する必要がないため、一部のDSPアルゴリズムでは有用であり得る。
一部の実装では、命令デコーダは、第1の(非転置)バージョンまたは第2の(転置)バージョンのみを実装することができるが、他の実装では第1および第2のバージョンの両方に対する命令デコーダサポートがあってもよい。
複素数乗算命令の他の変形例は、整数/固定小数点演算を使用して積および和/差が計算される整数または固定小数点変形、および浮動小数点演算によって積および和/差が計算される浮動小数点変形を含むことができる。浮動小数点の変形例では、第1/第2のオペランドベクトルおよび宛先ベクトルの各要素は、所与の浮動小数点形式、例えば、IEEEによって定義されるような倍精度、単精度または半精度の浮動小数点形式で表される。場合によっては、異なる浮動小数点形式に対応する命令の様々な変形を提供することができる。
宛先ベクトルと比較して、第1および第2のオペランドベクトルのデータ要素の相対的なサイズの点で異なる、様々な形式の命令が存在してもよい。要素拡大型変形は、より広いKビットデータ要素(例えば、Kは2*Jであってもよい)を有する宛先ベクトルを生成するために、Jビットデータ要素を有する第1および第2のオペランドベクトルに作用し得る。第1/第2の積を生成するための乗算はより広いデータ値をもたらすので、この手法は、最終結果において保持される積の精度をあげることを可能にする。実際には、Jビット値の2つの積を生成し、その積を加算または減算すると、通常、(2J+1)ビット値が得られるので、これをKビット(2Jビット)値に減らす場合、ビットを破棄することによる切り捨てを必要とすることがある。1つの手法は、中間値の最上位Kビットを選択し、最下位ビットを破棄することであってもよい。しかし、2J+1ビット(K+1ビット)の中間値の最上位ビットは、ほとんどの場合、冗長ビットになるが、これは、乗算される元の値のすべてが最大可能な大きさを持つ場合に限り、第1および第2の積の和または差が、上位ビットにオーバーフローするだけであるからである。したがって、別の手法では中間値の最上位ビットを破棄し、最下位Kビットを切り捨て結果として選択することができ、これにより最下位ビットを保持することができ、精度を維持するために有用な情報を提供する可能性が高くなる。
宛先ベクトルが第1および第2のオペランドベクトルのJビットデータ要素と同じサイズのJビットデータ要素を有する、複素数乗算命令の要素サイズ保持型変形を提供することもできる。ここでも、第1および第2の積を加算または減算した結果に対応する中間値の切り捨てが必要となることがある。ここでもやはり、切り捨ては中間値の最上位Jビットを使用するか、最上位ビットが冗長ビットである可能性が高いので、最上位ビットを無視して次の最上位Jビットを選択することができる。
切り捨てを実行するとき、選択されたJビットよりも低いビットを単に破棄すると、結果の大きさを系統的に減少させる傾向があるため、複素数乗算のシーケンスの結果にバイアスが生じる可能性がある。バイアスを低減するために、中間値を切り捨てる場合、選択されたJビットは、選択されたJビットよりも中間値の少なくとも1つ下位のビットに基づいて丸められてもよい(例えば、Jビットを選択する前に、切り捨てられた値を、Jビットを使用して表現可能な2J+1中間結果の最も近い値に効果的に丸めるために、選択されたJビットの最下位ビットに対応する中間値のビット位置に最上位の破棄されたビットのビット値を加えることによる)。
一部のシステムは、ベクトル命令全体の並列処理をサポートすることができ、結果ベクトルの各要素は並列に生成される。しかし、一部の低電力実装では、宛先ベクトルのすべての要素を並列に計算するのに十分なハードウェアがないこともある。一部の実施態様では、所与のベクトル命令に応答して、処理回路は複数の処理のビートを実行してもよく、各ビートはベクトル値の一部に対応し、処理回路は、第1および第2のベクトル命令のオーバーラップ実行をサポートすることができ、ここで第2のベクトル命令のビートの第1のサブセットは、第1のベクトル命令のビートの第2のサブセットと並列に実行される。ビートは、ベクトルのある一定のサイズの部分に対応してもよく、これはデータ要素の大きさとは無関係であってもよい。複数のベクトル命令の実行をオーバーラップさせると、ハードウェアリソースの利用率を高めることができる。実行のオーバーラップ性質は、システム上で実行されている例外ハンドラなどのソフトウェアやデバッガから見ることができる。このようなオーバーラップ実行は、上述した形式の複素数乗算命令にも使用することができる。
図1は、ベクトル命令の処理をサポートするデータ処理装置2の一例を概略的に示す。これは、説明を容易にするための簡略化された図であり、実際には、装置は、簡潔さのために図1に示されていない多くの要素を有することが理解されよう。装置2は、命令デコーダ6によってデコードされた命令に応答してデータ処理を実行するための処理回路4を含む。プログラム命令はメモリシステム8からフェッチされ、命令デコーダによってデコードされ、命令セットアーキテクチャによって定義された方法で命令を処理するように処理回路4を制御する制御信号を生成する。例えば、デコーダ6は、デコードされた命令のオペコードおよび命令の任意の追加の制御フィールドを解釈して、処理回路4に適切なハードウェアユニットを起動させて、算術演算、ロード/格納演算、または論理演算などの演算を実行させる制御信号を生成することができる。この装置は、処理回路4によって処理されるデータ値および処理回路の動作を構成するための制御情報を格納するためのレジスタのセット10を有する。算術または論理命令に応答して、処理回路4は、レジスタ10からオペランドを読み出し、命令の結果をレジスタ10に書き戻す。ロード/格納命令に応答して、データ値は、処理ロジックを介してレジスタ10とメモリシステム8との間で移動される。メモリシステム8は、メインメモリだけでなく、1つ以上のレベルのキャッシュを含むことができる。
レジスタ10は、単一のデータ要素を含むスカラー値を格納するためのいくつかのスカラーレジスタを含むスカラーレジスタファイル12を含む。命令デコーダ6および処理回路4によってサポートされる一部の命令は、スカラーレジスタ12から読み出されたスカラーオペランドを処理して、スカラーレジスタに書き戻されるスカラー結果を生成するスカラー命令である。
レジスタ10はまた、複数のデータ要素を含むベクトル値をそれぞれ格納するいくつかのベクトルレジスタを含むベクトルレジスタファイル14を含む。ベクトル命令に応答して、命令デコーダ6は、処理回路4を制御して、ベクトルレジスタ14の1つから読み出されたベクトルオペランドの各要素に対してベクトル処理のいくつかのレーンを実行し、スカラーレジスタ12に書き込まれるスカラー結果またはベクトルレジスタ14に書き込まれるさらなるベクトル結果のいずれかを生成する。一部のベクトル命令は、1つ以上のスカラーオペランドからベクトル結果を生成することができ、またはベクトルレジスタファイル14から読み出されたベクトルオペランドに対するベクトル処理のレーンだけでなく、スカラーレジスタファイルのスカラーオペランドに対する追加のスカラー演算を実行することができる。したがって、一部の命令は、1つ以上のソースレジスタおよび命令の宛先レジスタの少なくとも1つがベクトルレジスタ14であり、1つ以上のソースレジスタおよび宛先レジスタのもう1つがスカラーレジスタ12である混合スカラーベクトル命令であってもよい。ベクトル命令はまた、データ値をベクトルレジスタ14とメモリシステム8内の位置との間で移動させるベクトルロード/格納命令を含むことができる。ロード/格納命令は、メモリ内の位置がアドレスの連続範囲に対応する連続ベクトルロード/格納命令、またはいくつかの離散アドレスを指定するスキャッタ/ギャザー型ベクトルロード/格納命令を含ことができ、これは、これらのアドレスの各々からのデータをベクトルレジスタの各要素にロードするか、またはベクトルレジスタの各要素からのデータを離散アドレスに格納するように処理回路4を制御する。
処理回路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は、特定の要素サイズが常に所与の装置に使用されている場合は固定であるか、装置が異なるデータ要素サイズのベクトルでの処理をサポートする場合は変数であり得る。一部の例では、例えば各ベクトル命令がその命令に使用される要素サイズを指定する場合、要素サイズレジスタ18は省略されてもよい。ループカウンタ16は専用の制御レジスタとして示されているが、他の例では、ベクトル化されたループの進行を追跡するために汎用スカラーレジスタ12の1つを使用することができる。
複素数の実数部および虚数部がベクトルレジスタにインタリーブされた複素数演算を実行するための命令は、性能を向上させ、レジスタ圧力を下げることができる。比較的少数のベクトルレジスタしか持たない実装(例えば、一部のハードウェアシステムは8個のベクトルレジスタを提供するだけのこともある)では、処理されるすべての値を収容するのに十分なレジスタがない場合、レジスタ内容をメモリに流出させ、後でレジスタファイルに値を読み戻すための追加のロード/格納演算が必要になる可能性があるので、レジスタ圧力はプロセッサ全体の性能において重要な要素となり得る。例えば、8個のベクトルレジスタを有するシステムでは、命令デコーダ内の複素数演算サポートがないと、標準ベクトル乗算命令は、レジスタ流出なしで基数2のFFTを実現するだけであるが、複素数演算サポートがあると、レジスタ流出なしで基数4のFFTを実現できる。結果として、複素数算術命令を追加することによって得られる全体的なスピードアップは、Q31のFFTで最大56%になる。
しかし、複素数乗算命令が実施される特定の方法は、性能、回路面積および電力消費に影響を及ぼす可能性がある。図2は、代替手法による複素数乗算命令を使用した比較例を示す。図2の上部に示すように、2つの複素数a+ibとc+idとを乗算するには、積項ac、ibc、iad、−bdを生成するために4回の乗算が必要であるため、多くの場合、1つのベクトル命令で複素数乗算を実装するのは現実的ではない。図2に示す手法では、最初にVMOV命令が実行され、累算器ベクトルレジスタQ0がゼロにクリアされる。次に、2つの複素数乗算ベクトル命令が実行され、それぞれが累算器レジスタQ0および2つの入力オペランドベクトルQ1、Q2を入力としてとる。ベクトルレジスタQ0、Q1、Q2のそれぞれは、複素数の実数部を表現する実数要素(R)として割り当てられた偶数要素0、2を有し、奇数要素1、3は複素数の虚数部を表すための虚数要素(I)として割り当てられている。隣接する実数/虚数要素0、1および2、3のペアはそれぞれ異なる複素数を表し、例えばベクトルQ1の要素0、1は複素数a0+ib0を表し、ベクトルQ1の要素2、3は別の複素数a1+ib1を表す。同様に、Q2レジスタは、レジスタQ1の対応する内容で乗算される対応する複素数c0+id0およびc1+id1を表す。複素数乗算命令の第1の命令VCMLAは、図2の上部に示される和の最初の2つの項ac、ibcを計算し、その結果を累算器レジスタQ0に累算する。同様に、第2の複素数乗算命令は、図2に示す和の第3項および第4項iad、−bdを計算し、これらを累算器レジスタQ0に累算する。最終累算器値において、隣接する実数/虚数要素の各ペアは、Q1、Q2の対応する部分によって表される複素数の積に対応する複素数値を表す。
より大規模な実装では、例えば、この手法はアウトオブオーダ・プロセッサにとってより効率的になり得るので、この手法はいくつかの利点を持ち得る。しかし、低消費電力の実装では、いくつかの欠点がある。第1に、累算器レジスタQ0をゼロにするために追加の命令が必要とされ、メモリ内のコード密度を低下させ、性能を低下させる。また、各ベクトル乗算命令は、それらの結果を累算器レジスタQ0に累算するので、3つの入力ベクトル(累算器レジスタQ0の古い値および2つの入力ベクトルQ1、Q2)を必要とする。したがって、第3のベクトルレジスタ読み出しポートが必要である。比較的小規模な実装では、2つ以上のベクトル読み出しポートを必要とする命令は他にないので、1つのタイプの命令のためだけに第3のレジスタ読み出しポートを追加する領域および電力コストを正当化するのは非常に困難である。
これは、図3に示す形式の命令を使用することで回避できる。図3の上部の和に示すように、複素数乗算は、結果の実数部が1つの命令によって計算され、虚数部が別の命令によって計算されるようにリファクタリングされる。命令の第1および第2の形式が提供され、そのうちの1つは宛先ベクトルの実数要素をターゲットとし、他方は虚数要素をターゲットとする。隣接するベクトルレーンの各ペアにおいて、命令の第1の形式(以下の例では「X」なしの命令ニーモニックによって示される)は、第1の積ac(R*R)および第2の積bd(I*I)を生成し、第1および第2の積を加算または減算し、その結果を対応するターゲット要素(この例では実数要素)に書き込む。一方、隣接するベクトルレーンの各ペアについて、命令の第2の形式(「X」を有する命令ニーモニックによって示される)は、第1の積ad(R*I)および第2の積bc(I*R)を生成し、第1および第2の積を加算または減算し、その結果を対応するターゲット要素(この例では虚数要素)に書き込む。各命令は要素の半分に書き込むため、命令の2つの形式が実行された後、レジスタ全体が書き込まれており、最初にレジスタをゼロにする必要はない。さらに、命令の各形式のターゲット要素には、必要なすべての積が含まれているため、以前の結果に累算する必要がなく、第3のレジスタ読み出しポートと累算器をクリアするための追加の命令との必要性は回避できる。
命令の加算および減算変形を提供する。加算変形(ニーモニックVMMLADまたはVMMLADXで示される)では、第1/第2の積が追加されて、対応するターゲット要素が形成される。減算変形(ニーモニックVMMLSDまたはVMMLSDXによって示される)では、第1/第2の積が減算されて、対応するターゲット要素が形成される。したがって、図3では、第1の形式の減算変形命令(VMMLSD)が実行され、レジスタQ0の要素0(実数要素)を、レジスタQ1、Q2の対応する部分の値a0+ib0およびc0+id0の複素数積の実数部を表す値a0c0−b0d0に設定し、同様にレジスタQ0の要素2(実数要素)を値a1c1−b1d1に設定する。第2の形式の加算変形命令VMMLADXも実行され、レジスタQ0の要素1(虚数要素)を、レジスタQ1、Q2の値a0+ib0およびc0+id0の複素数積の虚数部を表す値a0d0+b0c0に設定し、同様にレジスタQ0の要素3(虚数要素)を値a1d1+b1c1に設定する。
あるいは、図4に示すように、第1の形式の加算変形命令(VMMLAD)および第2の形式の減算変形命令(VMMLSDX)を実行することによって、形式r=(a−ib)(c+id)の複素数共役乗算を計算することができる。したがって、第1の形式は、R*RおよびI*I積の和に基づいて、宛先ベクトルQ0の実数要素をターゲットとし、第2の形式は、R*IおよびI*R積の差に基づいて、虚数要素をターゲットとする。
図3および図4の両方の例では、命令は、第1のバージョン(「T」なしの命令ニーモニックで示される非転置バージョン)であり、命令の第1の形式は宛先レジスタQ0の実数要素をターゲットとし、第2の形式は虚数要素をターゲットとする。
しかし、図5に示すように、命令の第1の形式が虚数要素をターゲットとし、第2の形式が実数要素をターゲットとする、これらの命令の第2のバージョンも提供され得る。第2のバージョンは、「T」を含む命令ニーモニックによって示される転置バージョンである。したがって、今回は、宛先レジスタQ0の実数要素はR*IおよびI*Rの積に基づいて設定され、虚数要素はR*RおよびI*Iの積に基づいて設定される。図5に示すように、これは±i*(a+ib)*(c+id)という形式の計算を評価するのに役立ち得る。それ以外は、図5の動作は図3および図4の動作と同様である。
第1/第2の形式の複素数乗算命令の一方または両方に応答して、命令デコーダ6は、非ターゲット要素の更新を抑制するように処理回路4を制御し、先行する命令の結果を上書きしないようにする。第1/第2の形式のうちの1つのみが非ターゲット要素の更新の抑制をトリガする場合、その命令は命令のペアのうち2番目に実行されるべきである。しかし、両方の形式が非ターゲット要素の更新を抑制する場合、命令のペアはどの順序で実行されてもよい。
図3から図5は、実数要素が偶数番目の位置0、2である要素であり、虚数要素が奇数番目の要素1、3である例を示す。しかし、図6に示すように、実数要素および虚数要素は逆であることもあり、虚数要素は偶数番目の要素に対応し、実数要素は奇数番目に対応する。図6の上部2つの例に示すように、図3から図5に示すすべての乗算が、2つ以上のレーンにわたる乗算を必要とするのではなく、隣接するベクトルレーンのペア内にとどまるように、実数要素および虚数要素をインタリーブすることは有用であり得る。それにもかかわらず、図6の下部の例に示すように、実数要素および虚数要素を違うように配置することも可能である。
上記のタイプの命令は、複素数乗算演算の結果を計算するのに適しているが、他の目的にも使用できる。実数要素は複素数の実数要素を表すのに適しており、虚数要素は虚数要素を表すのに適しているが、プログラマは同じ命令に対して別の用途を見つけることができる。例えば、図4に示す複素数乗算命令の加算変形を実行することは、隣接レーンの積の和を宛先レジスタの単一要素に累算する比較的簡単な方法であり得るので、一部のプログラマは、実数の何らかの処理のためにもこのタイプの命令を使用することを選択できる。したがって、命令は、複素数演算に使用することのみに限定されない。
図3から図5の例では、命令はデータ要素のサイズを保持するので、宛先レジスタQ0は入力オペランドQ1、Q2と同じサイズのデータ要素を有する。しかし、整数/固定小数点演算が使用され、データ要素がそれぞれJビットを含む場合、Jビット要素の2つの積の和は2J+1ビットを有するので、指定されたターゲット要素に書き込まれるJビット値を生成するために切り捨てが実行される。図7は、切り捨てを実行するための第1の手法を示す。この場合、2J+1ビットの中間結果[2J:0]の上位Jビット[2J:J+1]がターゲット要素に書き込まれるように選択され、切り捨てが実行され、かつJビットの結果がターゲット要素に書き込まれる前に、次の最上位ビット位置[J]のビット値1を中間結果に加算することにより、バイアスを減らすために結果が丸められる。他の形態の丸めも実行できることを理解されたい。
図8は、切り捨てに対する別の手法を示しており、これは、中間結果の最上位ビットを無視し、代わりに、切り捨てを実行するときに中間結果の次のJ個の最上位ビット[2J−1:J]を選択し、次の最上位ビット[J−1]に基づいて、選択されたビットを丸める。2J+1ビットの中間結果の最上位ビット[2J]がしばしば冗長ビットであるので、多くの場合これによって精度がより高くなり得るが、それは元の入力要素すべてが可能な限り大きな正または負の大きさを持つ場合にのみこのビットが使用されるためである。したがって、ビット[J]はビット[2J]よりも「興味深い」結果を含む可能性がより高いので、このビットを最終結果に保持することが好ましい場合がある。この手法では、最上位ビット[2J]は決して使用されないので、これはハードウェアによって明示的に計算される必要はない(例えば、ハードウェアは、2J+1ビット中間結果の下位2Jビットを決定するための回路のみを有していてもよい)。(2J+1)ビットの中間結果の最上位ビットが(最上位ビットを無視することによって情報が失われないように)常に冗長ビットであることを保証するために、命令セットアーキテクチャは、プログラマまたはコンパイラに、複素数乗算を実行する前にすべての入力値を2で割る(それによって、最上位ビットを必要とする極度の大きさを避ける)ように要求することがあり、複素数乗算の結果が生成されると、その結果に4をかけて、中間結果の最上位ビットが計算されたのと同じ数値結果を与える。
図7および図8は、切り捨ての限界の1桁下にある1つの下位ビットのみを使用して丸めを実行する例を示しているが、多くの下位ビットを考慮した丸め技法を使用することもできる。特に、命令の浮動小数点変形の場合、既知の浮動小数点丸め技術によって追加のビットを考慮することができる。
図9に示すように、要素が入力オペランドQ1、Q2の要素の2倍の幅を有する宛先ベクトルQ0を生成する、命令の要素拡大型変形を提供することも可能である。この場合、入力要素の半分だけが結果に影響する可能性がある。複素数乗算命令は、オペランドベクトルQ1、Q2の要素の上半分または下半分のどちらを使用して宛先を計算すべきかを指定することができる(例えば、図9では、命令はオペランドベクトルの下半分に作用する)。要素拡大型変形では、2Jビット幅広データ要素を形成するための2J+1ビット中間値の切り捨ては、図10に示すように(図7と同様に)最上位2Jビット[2J:1]を選択することによって、または図11に示すように(図8と同様に)最上位ビットを無視して最下位2Jビット[2J−1:0]を選択することによって行うことができる。
上述の例は、入力ベクトルがそれぞれ(2つの実数要素および2つの虚数要素がインタリーブされた)4つのデータ要素を含むことを示しているが、異なる数の要素で命令を実行することもできることを理解されたい。
図12に示すように、複素数乗算命令は、2つの入力ベクトルQA、QBのそれぞれの要素を比較してそれらが何らかのテスト条件を満たすかどうかを判定し、かつ各比較の結果に応じて、ベクトル予測レジスタ(VPR:Vector Predication Register)22を設定するベクトル予測命令(VPT命令:Vector Predication Instruction)を複素数乗算命令より先行させることによって、予測の対象となる。VPR22は、処理回路4がサポートする最小要素サイズの粒度で、ベクトルレジスタの一部にそれぞれ対応するいくつかの予測フラグを含む。例えば、最小要素サイズが8ビットである128ビットベクトルレジスタの場合、ベクトルレジスタの8ビットチャンクにそれぞれ対応する16個の予測フラグを提供することができる。
この例では、テスト条件は、Qaの所与の要素がQbの対応する要素よりも大きいか等しいかどうかであるが、テスト条件の他の例は、より大きいか等しいか、より小さいか、より小さいか等しいか、等しいか、等しくないか、を含む。この例では、テスト条件はレーン0、1および3では合格したが、レーン2では失敗した。したがって、VPT命令に応答して、処理回路4は、レーン2に対応するVPR22の一部分の予測フラグを0に設定し、レーン0、1、3に対応するVPRの他の部分の予測フラグを1に設定する。この例のように、VPT命令の要素サイズは32ビット(最小要素サイズの8ビットよりも大きい)であり、4つの隣接する予測フラグのブロックは、それぞれのレーンに対応して0または1に設定される。この例では、0の予測フラグは、ベクトル演算の対応する部分がマスクされるべきであることを示す一方、1は対応する部分がマスクされるべきでないことを示し、他の例は逆のマッピングを使用する。
VPT命令に続いて複素数乗算命令が実行される際、処理回路4は、VPRが0に設定されている対応する予測フラグを有する場合、宛先ベクトルの所与の部分に関連する演算をマスクする。この例では、宛先ベクトルの要素4/5に対応するVPRの部分内の予測フラグが0であるので、これらの要素は複素数乗算命令に応答して更新されない。したがって、複素数乗算命令VMMLSDの第1の形式は、通常はこの命令がターゲットとする実数要素であるが、VPRの対応する部分が0であったため、宛先ベクトルQ0の要素4を更新しない。他の実数要素0、2および6は、VPR22内の1に等しい予測ビットに対応するため、更新される。同様に、命令の第2の形式は、これもVPRによってマスクされるので要素5を更新しないが、依然として虚数要素1、3、7に書き込む。両方の形式の複素数乗算命令では、VPR内の対応する値が1であるか0であるかにかかわらず、非ターゲット要素は更新を抑制される。
VPRの予測ビットが0であるときに、レジスタの所与の部分に関連する演算をマスクすることができるいくつかの方法がある。例えば、マスキングは、宛先レジスタのその部分に格納されている以前の値を保持しながら、宛先レジスタの対応する部分を0にクリアすること、またはその部分に関連する動作が全く実行されない(例えば、メモリからのロード、そのレーンの乗算、加算または減算を実行しない)ように抑制することによって実施することができる。一部の実装では、予測情報に応答して宛先レジスタの一部の部分に対する更新をマスキングするために提供されるハードウェアを再利用して、複素数乗算命令に応答して非ターゲット要素の更新も抑制することができる。しかし、予測とは異なり、非ターゲット要素のこのマスキングは、VPR22の対応する部分の内容にかかわらず、複素数乗算命令に応答して行われる。
図13は、予測の別の例を示す。ベクトル命令の一般的な用途は、メモリに格納された配列の各要素に特定の一連の動作を適用する必要がある、ベクトル化ループである。高レベルのコード中の要素ごとに1回反復するループは、反復回数の少ないループを含むベクトル化コードにコンパイルすることができ、反復の各々は要素のブロックをベクトルレジスタにロードし、一連のベクトル命令を使用して要素を処理し、各レーンの処理の結果をメモリに戻して格納する。したがって、ループの各反復は、1つのベクトルレジスタ内のデータ要素の数に対応する要素のブロックを処理することができる。処理される配列内の要素の総数がNEであり、1つのベクトル内のデータ要素の数がNV(ベクトル幅VWをデータ要素サイズESで割ったものに等しい)の場合、配列全体はNE/NV反復の最小値において処理される。しかし、多くの場合、要素の総数NEは、1つのベクトル内の要素の数NVの正確な倍数ではない可能性があるので、ループの最後の反復では、ベクトルのすべての要素が、処理されるべき値で埋められるわけではない。未充填レーンでの処理がマスクされずに進行することが許可されると、エラーを引き起こす可能性がある。例えば、配列の終わりを越えるメモリアドレス空間はページテーブルにマップされていない可能性があるので、アレイの末尾を処理する最後の反復で「未使用」レーンの1つに対してロード/格納演算が実行されると、メモリアクセスフォルトまたはアレイに隣接するデータの破損が生じる可能性がある。
したがって、ループの最後の反復において未使用のレーンの演算をマスクすることが望ましい場合がある。図1に示すように、処理回路4には、所与のベクトル化ループのどのレーンがイネーブルまたはマスクされるかを制御するループ予測回路90が設けられてもよい。ベクトル化ループを開始する際、ループカウンタ16を、ループ内で処理されるべき要素の総数NEを指定する値に設定することができる。例えば、ループ開始命令は、要素の数を指定することができる。ループの各反復の終わりに、ループカウンタ16から1つのベクトル内の要素の数NVが減算され、処理されるべき残りの要素の数NEremainingが計算される。所定のループ反復を開始する際、NEremaining<NVである場合、ループ予測回路90は処理回路4を制御して、例えば、ベクトル処理のレーン自体を抑制する(例えばロード/格納要求が発行されないようにする)、および/またはマスクされたレーンにおける処理結果の書き込みを無効にすることによって、ベクトル処理の上位NV−NEremainingレーンに関連する演算をマスクする。
したがって、ループ予測回路90が一部のレーンをマスクすべきであると判定したときに複素数乗算命令が反復して実行される場合、これらのマスクされたレーンではターゲット要素(命令の形式およびバージョンに応じて実数または虚数)は更新されない。例えば、図13において、ループ予測回路90は、ベクトルのレーン2および3がマスクされるべきであると決定し、そのため、VMMLSD命令は、マスクされていないレーンの要素0(実数要素)のみを更新し、マスクされたレーン内の要素2(実数要素)は更新しない。マスクされていないレーン1内の非ターゲット要素(この例では虚数)は、ループ予測回路90によってレーンが予測されているかどうかにかかわらず、依然として複素数乗算命令によって更新されない。
上記の例は、ベクトルの各レーンでの演算が並列に行われることを示すが、これは必須ではない。
処理回路4は、異なるクラスの命令を処理するためのいくつかの異なるハードウェアブロックを含むことができる。例えば、メモリシステム8と相互作用するロード/格納命令は専用のロード/格納ユニットによって処理され、算術または論理命令は算術論理ユニット(ALU)204によって処理される。ALU自体は、乗算を含む演算を実行するための乗算累算ユニット(MAC)と、他の種類のALU演算を処理するための別のユニットとにさらに分割されてもよい。浮動小数点命令を処理するために浮動小数点ユニットを提供することもできる。いかなるベクトル処理も含まない純粋なスカラー命令も、ベクトル命令と比較して別個のハードウェアブロックによって、または同じハードウェアブロックを再使用することによって処理できる。
デジタル信号処理(DSP)などの一部のアプリケーションでは、ALUとロード/格納命令との数がほぼ同じであるため、MACなどの一部の大きなブロックがかなりの時間アイドル状態になる可能性がある。実行リソースがより高い性能を得るためにベクトルレーンの数でスケーリングされるため、この非効率性は、ベクトル・アーキテクチャ上で悪化する可能性がある。より小さなプロセッサ(例えば、シングルイシュー、インオーダーコア)では、完全にスケーリングされたベクトルパイプラインの領域オーバーヘッドは禁止されることがある。利用可能な実行リソースをより良く使用しながら領域の影響を最小限に抑える手法の1つは、図14に示すように、命令の実行をオーバーラップさせることである。この例では、3つのベクトル命令は、ロード命令VLDR、乗算命令VMULおよびシフト命令VSHRを含み、これらの命令はすべて、それらの間にデータ依存関係があっても同時に実行することができる。これは、VMULの要素1がQ1の要素1のみに依存し、Q1レジスタ全体ではないため、VLDRの実行が終了する前にVMULの実行が開始できるためである。命令をオーバーラップさせることにより、乗算器のような高価なブロックをより長く有効に保つことができる。
したがって、マイクロアーキテクチャの実装がベクトル命令の実行をオーバーラップできるようにすることが望ましい場合がある。しかし、アーキテクチャが一定量の命令オーバーラップがあると仮定すると、アーキテクチャによって仮定される命令オーバーラップの量とマイクロアーキテクチャ実装が実際に一致する場合、これは高い効率を提供し得るが、異なるオーバーラップを使用するか全くオーバーラップしない異なるマイクロアーキテクチャにスケーリングされる場合に問題を引き起こす可能性がある。
代わりに、アーキテクチャは、図15の例に示すように、異なるオーバーラップの範囲をサポートすることができる。ベクトル命令の実行は、「ビート」と呼ばれる部分に分割され、各ビートは、所定のサイズのベクトルの部分の処理に対応する。ビートは、完全に実行されるか、全く実行されないベクトル命令の不可分部分であり、部分的に実行することはできない。1つのビートで処理されるベクトルの部分のサイズはアーキテクチャによって定義され、ベクトルの任意の部分であり得る。図15の例では、ベクトル幅の4分の1に対応する処理としてビートが定義されているので、ベクトル命令当たり4つのビートがある。明らかに、これは一例に過ぎず、他のアーキテクチャでは、例えば2または8のような異なる数のビートを使用することができる。1つのビートに対応するベクトルの部分は同じサイズとすることができ、処理されるベクトルのデータ要素サイズよりも大きいかまたは小さい。したがって、要素サイズが実装ごとに異なる場合であっても、または異なる命令間の実行時に変化しても、ビートはベクトル処理の一定の固定幅である。1つのビートで処理されるベクトルの部分が複数のデータ要素を含む場合、各要素が独立して処理されることを確実にするために、各要素間の境界でキャリー信号を無効にすることができる。1つのビートで処理されるベクトルの部分が要素の一部のみに対応し、ハードウェアが複数のビートを並列に計算するには不十分である場合、1つのビートの処理中に生成されるキャリー出力は、2つのビートの結果が共にデータ要素を形成するように、処理の次のビートにキャリー入力として入力される。
図15に示すように、処理回路4の異なるマイクロアーキテクチャの実装は、抽象的なアーキテクチャクロックの1つの「ティック」において異なる数のビートを実行することができる。ここで、「ティック」は、アーキテクチャ状態の進展の単位に対応する(例えば、単純なアーキテクチャでは、各ティックは、次の命令を指すようにプログラムカウンタを更新することを含む、命令を実行することに関連するすべてのアーキテクチャ状態を更新するインスタンスに対応することができる)。パイプライン化のような既知のマイクロアーキテクチャ技術は、単一のティックがハードウェアレベルで実行するために複数のクロックサイクルを必要とする可能性があることを意味し、実際はハードウェアレベルで単一のクロックサイクルが複数の命令の複数の部分を処理する可能性があることを、当業者は理解するだろう。しかし、このようなマイクロアーキテクチャ技術は、ティックがアーキテクチャレベルでは不可分なので、ソフトウェアからは見えない。簡潔さのために、このようなマイクロアーキテクチャは、本開示のさらなる説明では省略する。
図15の下の例に示すように、一部の実装では、1つのティック内ですべてのビートを並列処理するのに十分なハードウェアリソースを提供することによって、同じティック内でベクトル命令の4つのビートすべてをスケジュールすることができる。これは、より高性能な実装に適している可能性がある。この場合、1つのティック内で命令全体が完了できるので、アーキテクチャレベルで命令間のオーバーラップは必要ない。
一方、より面積効率のよい実装は、1ティックにつき2つのビートのみを処理することができるより狭い処理ユニットを提供することができ、図15の中間の例に示すように、命令実行は、第2のベクトル命令の第1および第2のビートが第1の命令の第3または第4のビートと並列に実行されてオーバーラップさせることができ、これらの命令は、処理回路内の異なる実行ユニット上で実行される(例えば、図15で、第1の命令はロード/格納ユニットを使用して実行される格納命令であり、第2の命令はMACを使用して実行される乗算累算命令である)。
さらにエネルギー/面積効率のよい実装は、一度に1つのビートのみを処理することができる、より狭いハードウェアユニットを提供することができ、この場合、1ティックにつき1ビートが処理され、図15の上の例に示すように、命令の実行は1ビートだけオーバーラップしてずれる(これは上の図14の例と同じである)。
図15に示すオーバーラップはほんの一例であり、他の実装も可能であることが理解されよう。例えば、処理回路4の一部の実装は、同じティック内で複数の命令の並列の二重発行をサポートすることができるので、命令のスループットがより高くなる。この場合、1つのサイクルで一緒に開始する2つ以上のベクトル命令は、次のサイクルで開始する2つ以上のベクトル命令といくつかのビートをオーバーラップさせることができる。
実装ごとにオーバーラップ量を様々な実行点にスケーリングするだけでなく、ベクトル命令間のオーバーラップ量も、プログラム内のベクトル命令の異なる実行インスタンス間で実行時に変更することができる。したがって、処理回路4には、前の命令に対して所与の命令が実行されるタイミングを制御するための回路が設けられてもよい。これにより、マイクロアーキテクチャは、実装が難しい特定のコーナーケースで命令をオーバーラップさせないか、命令で使用可能なリソースに依存するかを自由に選択できる。例えば、同じリソースを必要とする所与のタイプの連続命令(例えば、乗累算)があり、使用可能なすべてのMACまたはALUリソースが既に別の命令によって使用されている場合、次の命令を開始するための十分な空きリソースがないかもしれないので、オーバーラップさせるのではなく、第1の命令が完了するまで第2の命令の発行を待つことができる。
図16に示すように、2つのベクトル命令間のオーバーラップは、介在するスカラー命令がある場合でも防ぐことができる。これは、スカラー命令がベクトル命令の最後のビートの結果に依存する可能性があり、第2のベクトル命令がそのすべてのビートにおけるスカラー結果に依存する可能性があるためで、したがって、ベクトル命令をスカラー命令とオーバーラップさせない方が安全かもしれない。
このようなオーバーラップ実行は、上述したタイプの複素数乗算命令にも使用することができる。したがって、複素数乗算命令のための処理のビートのそれぞれは、他の命令とのオーバーラップを伴って、すべて並列に、またはいくつかのアーキテクチャティックにわたって順次行われてもよい。
しかし、オーバーラップした実行が許可されている場合、命令セットアーキテクチャでは、プログラマが複素数乗算命令の宛先レジスタおよびオペランドレジスタのうちの1つの両方と同じベクタレジスタを指定しないように指定すると有用であり得る(例:VMMLSD Q0、Q1、Q2の代わりにVMMLSD Q0、Q0、Q1)。データ要素サイズがビートサイズと等しいかより大きい1ビート/ティックの実装では、ソースと宛先の両方と同じレジスタQ0を指定すると、次のビートで必要とされるソース値がソース/宛先レジスタから読み出される前に、共通のソース/宛先レジスタQ0の所与の要素が1つのビート内で上書きされる可能性があるので、結果が不確実になるリスクがある。これは、2または4ビート/ティックの実装またはデータ要素サイズが1ビート/ティック実装のビートサイズよりも小さい場合では問題にはならないが、それは、この場合、ベクトルの隣接要素の実数部/虚数部が並列に読み取られるからである。しかし、実行するコードを記述しているプログラマは、どの特定のマイクロアーキテクチャの実装が所与のシステムで使用されているかが分からないので、1ビート/ティックの実装で実行するとリスクがある。
1ビート/ティック実装に対する1つの解決方法は、宛先レジスタがソースレジスタの1つと同じである場合を検出するための追加の回路を追加することであり、そうする場合、例えば、入力の1つを異なるレジスタに一時的にコピーすることによって、エラーをトリガするか、命令によって参照されるレジスタを再マッピングするためである。しかし、実際には、このような追加回路のオーバーヘッドは正当化されそうにない。実際には、上述のように、複素数乗算命令は同じ入力および宛先レジスタを使用して第1/第2の形式の命令のペアで使用されることが多く、ペアの第1の命令が第2の命令に必要な入力オペランドを上書きするため、プログラマが宛先レジスタにソースレジスタの1つと同じものを指定することを選択する可能性は非常に低い。したがって、実際には、プログラマは、これらのタイプの命令のソース/宛先の両方と同じレジスタを指定する可能性は低いので、これを防ぐ特別な回路を追加するオーバーヘッドが正当化されない可能性がある。代わりに、命令セットアーキテクチャは、プログラマがこれらの複素数乗算命令のソースおよび宛先の両方と同じレジスタを使用すると、結果が正しいことが保証されないことを指定すればよい。これは非常に稀なケースに対処するための費用負担を避けることにより、面積および電力効率のよりよいハードウェア実装を提供することができる。
図17は、複素数乗算命令を実行する方法を示すフロー図である。ステップ50において、実行すべき次の命令がデコードのためにフェッチされ、命令デコーダが命令タイプを決定する。命令が複素数乗算命令でない場合、命令デコーダは、そのタイプの命令に適した動作を実行するように処理回路を制御する。複素数乗算命令に遭遇すると、ステップ52で、命令デコーダは、命令が第1の形式であるか第2の形式であるかを判定する。また、ステップ54で、命令デコーダは、命令が第1のバージョンであるか第2のバージョンであるかを判定する。命令が第1の形式および第1のバージョンである場合、ステップ56で、ターゲット要素は宛先の少なくとも1つの実数要素であり、命令が第1の形式および第2のバージョンである場合、ステップ58で、ターゲット要素は少なくとも1つの虚数要素である。また、命令の第1の形式について、ステップ60で、命令デコーダは、ベクトルQ1の実数要素とベクトルQ2の実数要素との積に対応する第1の積と、Q1の虚数要素とQ2の対応する虚数要素との積に対応する第2の積とを生成するように処理回路4を制御するための制御情報を生成する。
一方、命令が第2の形式であった場合、ステップ62で、命令デコーダは、命令が第1のバージョンであるか第2のバージョンであるかを判定する。命令が第1のバージョンである場合、ステップ64で、ターゲット要素は少なくとも1つの虚数要素であると判定され、命令が第2のバージョンである場合、ステップ66で、ターゲットは少なくとも1つの実数要素であると判定される。ステップ68で、命令デコーダ6は、Q1の実数要素とQ2の虚数要素との積に対応する第1の積と、Q1の虚数要素とQ2の実数要素との積としての第2の積とを生成するように処理回路4を制御するための制御信号を生成する。
命令が実行のために発行され、ステップ60、68で定義された積が入力ベクトルQ1、Q2の実数/虚数要素の各ペアに対して生成され、ステップ70で、対応する第1および第2の積が加算または減算される(命令が加算変形か減算変形かによる)。ステップ72で、加算または減算の結果に依存する値が、予測によってマスクされていない各ターゲット要素に書き込まれる。必要に応じて、加算/減算の結果の丸めおよび切り捨てが実行され、ビット数を宛先ベクトルのデータ要素サイズに縮小する。ステップ74で、処理回路は、その要素に対して何らかの予測が指定されているかどうかにかかわらず、その命令によってターゲットとされなかった少なくとも1つの非ターゲット要素の更新を抑制する。
ソースベクトルレジスタに対するQ1およびQ2の選択は任意であり、どのレジスタが使用されるかは、アーキテクチャによって固定でもよいことが理解されよう。あるいは、他の実施形態では、複素数乗算命令は、どのレジスタがソースベクトル値を含むかを示すパラメータを含むことができる。同様に、宛先レジスタQ0は固定でもよく、複素数乗算命令のパラメータによって選択されてもよい。
図18は、使用可能な仮想マシン実装を示す。前述の実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム130をサポートするホストオペレーティングシステム140を実行するホストプロセッサ150上で実行される。一般的に、大規模なプロセッサは、妥当な速度で実行する仮想マシンの実装を提供する必要があるが、そのような手法は、互換性や再利用のために別のプロセッサに固有のコードを実行することが望まれる場合など、特定の状況において正当化される可能性がある。仮想マシンプログラム130はゲストプログラム120に仮想ハードウェアインターフェースを提供するが、ゲストプログラム120は、仮想マシンプログラム130によってモデル化されるデバイスである実際のハードウェアによって提供されるハードウェアインターフェースと同じである。したがって、上述のメモリアクセスの制御を含むプログラム命令は、仮想マシンハードウェアとの相互作用をモデル化するために、仮想マシンプログラム130を使用してゲストプログラム120内から実行されてもよい。ゲストプログラム120は、ベアメタルプログラムであってもよく、またはホストOS140が仮想マシンアプリケーション130を実行するのと同様の方法でアプリケーションを実行するゲストオペレーティングシステムであってもよい。様々なタイプの仮想マシンが存在し、一部のタイプでは、仮想マシンは、ホストOS140を必要とせずにホストハードウェア150上で直接実行されることも理解されよう。
本出願において、「〜に構成された」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの配置または相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサまたは他の処理装置が機能を実行するようにプログラムされてもよい。「構成されている」は、定義された動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
本発明の例示的な実施形態を添付図面を参照して本明細書に詳細に説明したが、本発明はこれらの厳密な実施形態に限定されないこと、および添付の特許請求の範囲によって規定される本発明の範囲および趣旨から逸脱することなく、様々な変更および修正が当業者によって実施され得ることが理解されるであろう。

Claims (22)

  1. データ処理装置であって、
    データ処理を実行する処理回路と、
    前記データ処理を実行するように前記処理回路を制御する命令をデコードする命令デコーダと
    を含み、
    前記命令デコーダが、第1および第2オペランドベクトルに対する部分複素数乗算演算を実行して宛先ベクトルの少なくとも1つのターゲット要素を第1の積および第2の積の加算または減算結果に依存する値に設定するように前記処理回路を制御するために複素数乗算命令をデコードするように構成され、前記第1および第2のオペランドベクトルならびに前記宛先ベクトルの各々が、複素数の実数部を表す少なくとも1つの実数要素と、複素数の虚数部を表す少なくとも1つの虚数要素とを含む複数のデータ要素を含み、
    複素数乗算命令の第1の形式に応答して、前記命令デコーダが、前記第1のオペランドベクトルの実数要素と前記第2のオペランドベクトルの対応する実数要素との積を含む前記第1の積、および前記第1のオペランドベクトルの虚数要素と前記第2のオペランドベクトルの対応する虚数要素との積を含む前記第2の積で前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成され、
    前記複素数乗算命令の第2の形式に応答して、前記命令デコーダが、前記第1のオペランドベクトルの実数要素と前記第2のオペランドベクトルの虚数要素との積を含む前記第1の積、および前記第1のオペランドベクトルの虚数要素と前記第2のオペランドベクトルの実数要素との積を含む前記第2の積で前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成され、
    前記複素数乗算命令の前記第1および第2の形式のうちの1つに応答して、前記命令デコーダが、前記宛先ベクトルの少なくとも1つの実数要素を含む前記少なくとも1つのターゲット要素で前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成され、
    前記複素数乗算命令の前記第1および第2の形式のうちの他方に応答して、前記命令デコーダが、前記宛先ベクトルの少なくとも1つの虚数要素を含む前記少なくとも1つのターゲット要素で前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成され、そして、
    前記複素数乗算命令の前記第1および第2の形式のうちの少なくとも1つに応答して、前記命令デコーダが、前記少なくとも1つのターゲット要素以外の前記宛先ベクトルの少なくとも1つの要素の更新を抑制するように前記処理回路を制御するように構成されている、データ処理装置。
  2. 前記第1および第2のオペランドベクトルが3つ以上のデータ要素を含む複素数乗算命令に応答して、前記命令デコーダが、それぞれが複数の虚数要素とインタリーブされている複数の実数要素を含む前記第1および第2のオペランドベクトルを処理するように前記処理回路を制御するように構成されている、請求項1に記載のデータ処理装置。
  3. 前記処理回路が、前記複素数乗算命令に関連するパラメータに応答して、前記第1および第2オペランドベクトル内の実数および虚数要素の数を決定するように構成され、前記パラメータが、
    前記実数要素および前記虚数要素の前記数を示す即値、
    前記実数要素および前記虚数要素の幅を示す即値、
    前記実数要素および前記虚数要素の前記数を示す値を含むレジスタを示す値、および、
    前記実数要素および前記虚数要素の前記幅を示す値を含むレジスタを示す値、
    のうちの1つである、請求項2に記載のデータ処理装置。
  4. 前記処理回路が、所与の部分をマスクされる部分として識別する予測指示に応答して、前記宛先ベクトルの前記所与の部分に関連する演算をマスクするように構成されている、請求項1から3のいずれか一項に記載のデータ処理装置。
  5. 前記複素数乗算命令の前記第1および第2の形式の前記少なくとも1つに応答して、前記命令デコーダが、前記少なくとも1つの要素に対応する前記宛先ベクトルの一部がマスクされる部分であることを前記予測指示が識別しているかどうかにかかわらず、前記少なくとも1つのターゲット要素以外の前記宛先ベクトルの前記少なくとも1つの要素の更新を抑制するように前記処理回路を制御するように構成されている、請求項4に記載のデータ処理装置。
  6. 前記複素数乗算命令の加算変形に応答して、前記命令デコーダは、前記少なくとも1つのターゲット要素を、前記第1の積および前記第2の積を加算した結果に依存する値に設定するように前記処理回路を制御するように構成されており、
    前記複素数乗算命令の減算変形に応答して、前記命令デコーダが、前記少なくとも1つのターゲット要素を、前記第1の積および前記第2の積を減算した結果に依存する値に設定するように前記処理回路を制御するように構成されている、請求項1から5のいずれか一項に記載のデータ処理装置。
  7. 前記複素数乗算命令の第1のバージョンに応答して、前記命令デコーダが、前記少なくとも1つのターゲット要素を使用して前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成されており、前記少なくとも1つのターゲット要素は、
    前記複素数乗算命令が前記第1の形式である場合、前記宛先ベクトルの少なくとも1つの実数要素と、
    前記複素数乗算命令が前記第2の形式である場合、前記宛先ベクトルの少なくとも1つの虚数要素と
    を含む、請求項1から6のいずれか一項に記載のデータ処理装置。
  8. 前記複素数乗算命令の第2のバージョンに応答して、前記命令デコーダが、前記少なくとも1つのターゲット要素を使用して前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成されており、前記少なくとも1つのターゲット要素は、
    前記複素数乗算命令が前記第1の形式である場合、前記宛先ベクトルの少なくとも1つの虚数要素と、
    前記複素数乗算命令が前記第2の形式である場合、前記宛先ベクトルの少なくとも1つの実数要素と
    を含む、請求項1から7のいずれか一項に記載のデータ処理装置。
  9. 前記複素数乗算命令の要素拡大型変形に応答して、前記命令デコーダが、Kビットのデータ要素を含む前記宛先ベクトルを生成するために、Jビットのデータ要素を含む前記第1および第2オペランドベクトルに対して前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成されており、ここでK>Jである、請求項1から8のいずれか一項に記載のデータ処理装置。
  10. K=2Jであり、前記複素数乗算命令の前記要素拡大型変形に応答して、前記命令デコーダが、前記宛先ベクトルの前記少なくとも1つのターゲット要素のそれぞれを、
    前記第1の積および前記第2の積を加算または減算した結果に対応するK+1ビット値の最上位Kビット、および、
    前記K+1ビット値の最下位Kビットのいずれか1つに設定するように構成されている、請求項9に記載のデータ処理装置。
  11. 前記複素数乗算命令の要素サイズ保持型変形に応答して、前記命令デコーダが、Jビットのデータ要素を含む前記宛先ベクトルを生成するために、Jビットのデータ要素を含む前記第1および第2オペランドベクトルに対して前記部分乗算演算を実行するように前記処理回路を制御するように構成されている、請求項1から10のいずれか一項に記載のデータ処理装置。
  12. 前記複素数乗算命令の前記要素サイズ保持型変形に応答して、前記命令デコーダが、前記宛先ベクトルの前記少なくとも1つのターゲット要素のそれぞれを、前記第1の積および前記第2の積を加算または減算した結果に対応する中間値の切り捨てを含むJビット値に設定するように前記処理回路を制御するように構成される、請求項11に記載のデータ処理装置。
  13. 前記複素数乗算命令の前記要素サイズ保持型変形に応答して、前記命令デコーダが、前記中間値のJビットを選択するステップ、および前記選択されたJビットより前記中間値の少なくとも1つ下位のビットに基づいて前記選択されたJビットの丸めを行うステップを含む前記切り捨てを実行するように前記処理回路を制御するように構成される、請求項12に記載のデータ処理装置。
  14. 前記中間値が2J+1ビットを含み、前記切り捨てが前記(2J+1)ビット値の最上位Jビットを選択するステップを含む、請求項12および13のいずれか一項に記載のデータ処理装置。
  15. 前記中間値が、2J+1ビット[2J:0]を含み、前記切り捨てが前記(2J+1)ビット値のビット[2J−1:J]を選択するステップを含む、請求項12および13のいずれか一項に記載のデータ処理装置。
  16. 前記複素数乗算命令の整数または固定小数点変形に応答して、前記命令デコーダが、整数または固定小数点演算を使用して前記少なくとも1つのターゲット要素を生成するために、前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成されている、請求項1から15のいずれか一項に記載のデータ処理装置。
  17. 前記複素数乗算命令の浮動小数点変形に応答して、前記命令デコーダが、浮動小数点演算を使用して前記少なくとも1つのターゲット要素を生成するために、前記部分複素数乗算演算を実行するように前記処理回路を制御するように構成されている、請求項1から9および11のいずれか一項に記載のデータ処理装置。
  18. ベクトル命令に応答して、前記処理回路が複数の処理のビートを実行するように構成されており、各ビートがベクトル値の一部に対応する処理を含み、
    前記処理回路が第1および第2のベクトル命令のオーバーラップ実行をサポートするように構成され、前記第2のベクトル命令のビートの第1のサブセットが、前記第1のベクトル命令のビートの第2のサブセットと並列に実行される、請求項1から17のいずれか一項に記載のデータ処理装置。
  19. データ処理装置であって、
    データ処理を実行する手段と、
    前記データ処理を実行するように前記データ処理実行手段を制御する命令をデコードする手段と
    を含み、
    前記デコードする手段が、第1および第2オペランドベクトルに対する部分複素数乗算演算を実行して宛先ベクトルの少なくとも1つのターゲット要素を第1の積および第2の積の加算または減算結果に依存する値に設定するように前記データ処理実行手段を制御するために複素数乗算命令をデコードするように構成され、前記第1および第2のオペランドベクトルならびに前記宛先ベクトルの各々は、複素数の実数部を表す少なくとも1つの実数要素と、複素数の虚数部を表す少なくとも1つの虚数要素とを含む複数のデータ要素を含み、
    前記複素数乗算命令の第1の形式に応答して、前記デコードする手段が、前記第1のオペランドベクトルの実数要素と前記第2のオペランドベクトルの対応する実数要素との積を含む前記第1の積、および前記第1のオペランドベクトルの虚数要素と前記第2のオペランドベクトルの対応する虚数要素との積を含む前記第2の積で前記部分複素数乗算演算を実行するように前記データ処理実行手段を制御するように構成され、
    前記複素数乗算命令の第2の形式に応答して、前記デコードする手段が、前記第1のオペランドベクトルの実数要素と前記第2のオペランドベクトルの虚数要素との積を含む前記第1の積、および前記第1のオペランドベクトルの虚数要素と前記第2のオペランドベクトルの実数要素との積を含む前記第2の積で前記部分複素数乗算演算を実行するように前記データ処理実行手段を制御するように構成され、
    前記複素数乗算命令の前記第1および第2の形式のうちの1つに応答して、前記デコードする手段が、前記宛先ベクトルの少なくとも1つの実数要素を含む前記少なくとも1つのターゲット要素で前記部分複素数乗算演算を実行するように前記データ処理実行手段を制御するように構成され、
    前記複素数乗算命令の前記第1および第2の形式のうちの他方に応答して、前記デコード手段が、前記宛先ベクトルの少なくとも1つの虚数要素を含む前記少なくとも1つのターゲット要素で前記部分複素数乗算演算を実行するように前記データ処理実行手段を制御するように構成され、そして、
    前記複素数乗算命令の前記第1および第2の形式のうちの少なくとも1つに応答して、前記デコード手段が、前記少なくとも1つのターゲット要素以外の前記宛先ベクトルの少なくとも1つの要素の更新を抑制するように前記データ処理実行手段を制御するように構成されている、データ処理装置。
  20. データ処理方法であって、
    第1および第2オペランドベクトルに対する部分複素数乗算演算を実行して宛先ベクトルの少なくとも1つのターゲット要素を第1の積および第2の積の加算または減算結果に依存する値に設定するように処理回路を制御するために複素数乗算命令をデコードするステップを含み、前記第1および第2のオペランドベクトルならびに前記宛先ベクトルの各々が、複素数の実数部を表す少なくとも1つの実数要素と、複素数の虚数部を表す少なくとも1つの虚数要素とを含む複数のデータ要素を含み、
    前記複素数乗算命令の第1の形式に応答して、前記部分複素数乗算演算が、前記第1のオペランドベクトルの実数要素と前記第2のオペランドベクトルの対応する実数要素との積を含む前記第1の積、および前記第1のオペランドベクトルの虚数要素と前記第2のオペランドベクトルの対応する虚数要素との積を含む前記第2の積で実行され、
    前記複素数乗算命令の第2の形式に応答して、前記部分複素数乗算演算が、前記第1のオペランドベクトルの実数要素と前記第2のオペランドベクトルの虚数要素との積を含む前記第1の積、および前記第1のオペランドベクトルの虚数要素と前記第2のオペランドベクトルの実数要素との積を含む前記第2の積で実行され、
    前記複素数乗算命令の前記第1および第2の形式のうちの1つに応答して、前記部分複素数乗算演算が、前記宛先ベクトルの少なくとも1つの実数要素を含む前記少なくとも1つのターゲット要素で実行され、
    前記複素数乗算命令の前記第1および第2の形式のうちの他方に応答して、前記部分複素数乗算演算が、前記宛先ベクトルの少なくとも1つの虚数要素を含む前記少なくとも1つのターゲット要素で実行され、そして、
    前記複素数乗算命令の前記第1および第2の形式のうちの少なくとも1つに応答して、前記少なくとも1つのターゲット要素以外の前記宛先ベクトルの少なくとも1つの要素を更新するステップが抑制される、データ処理方法。
  21. 請求項1から18のいずれか一項に記載の装置に対応する命令実行環境を提供するようにホストデータ処理装置を制御するプログラム命令を含む、仮想マシンコンピュータプログラム。
  22. 請求項21に記載の仮想マシンコンピュータプログラムを格納した、コンピュータ可読な記憶媒体。
JP2018549815A 2016-04-01 2017-02-22 複素数乗算命令 Pending JP2019511056A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1605557.6A GB2548908B (en) 2016-04-01 2016-04-01 Complex multiply instruction
GB1605557.6 2016-04-01
PCT/GB2017/050443 WO2017168118A1 (en) 2016-04-01 2017-02-22 Complex multiply instruction

Publications (1)

Publication Number Publication Date
JP2019511056A true JP2019511056A (ja) 2019-04-18

Family

ID=58108685

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018549815A Pending JP2019511056A (ja) 2016-04-01 2017-02-22 複素数乗算命令

Country Status (9)

Country Link
US (1) US10628155B2 (ja)
EP (1) EP3436928B1 (ja)
JP (1) JP2019511056A (ja)
KR (1) KR20180132085A (ja)
CN (1) CN108885550B (ja)
GB (1) GB2548908B (ja)
IL (1) IL261429B (ja)
TW (1) TWI728068B (ja)
WO (1) WO2017168118A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2564696B (en) * 2017-07-20 2020-02-05 Advanced Risc Mach Ltd Register-based complex number processing
CN107894966A (zh) * 2017-12-11 2018-04-10 上海齐网网络科技有限公司 一种基于流水线的块浮点模式下的fft处理器引擎原型
EP3499362B1 (en) * 2017-12-13 2022-11-30 ARM Limited Vector add-with-carry instruction
US10732929B2 (en) * 2018-01-09 2020-08-04 Samsung Electronics Co., Ltd. Computing accelerator using a lookup table
JP7159696B2 (ja) * 2018-08-28 2022-10-25 富士通株式会社 情報処理装置,並列計算機システムおよび制御方法
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
WO2020066375A1 (ja) * 2018-09-25 2020-04-02 日本電気株式会社 情報処理装置、情報処理方法、プログラム
US11823052B2 (en) * 2019-10-11 2023-11-21 Qualcomm Incorporated Configurable MAC for neural network applications
CN117093268B (zh) * 2023-10-19 2024-01-30 超睿科技(长沙)有限公司 一种向量处理方法、系统、设备及存储介质

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05233682A (ja) * 1992-02-21 1993-09-10 Matsushita Electric Ind Co Ltd ディジタル信号処理装置
JP2001256038A (ja) * 1999-11-15 2001-09-21 Texas Instr Inc <Ti> 柔軟な乗算ユニットを有するデータ・プロセッサ
JP2005025718A (ja) * 2003-06-30 2005-01-27 Intel Corp Simd整数乗算上位丸めシフト
JP2005521176A (ja) * 2002-03-22 2005-07-14 インテル コーポレイション データマスクマッピング情報取得方法
JP2008506191A (ja) * 2004-07-08 2008-02-28 アソクス リミテッド 可変サイズの高速直交変換を実施する方法および機器
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
JP2009075676A (ja) * 2007-09-18 2009-04-09 Nec Electronics Corp マイクロプロセッサ
US20120166511A1 (en) * 2010-12-22 2012-06-28 Hiremath Chetan D System, apparatus, and method for improved efficiency of execution in signal processing algorithms
JP2015219823A (ja) * 2014-05-20 2015-12-07 富士通株式会社 プロセッサ
US20150378734A1 (en) * 2014-06-30 2015-12-31 Microunity Systems Engineering, Inc. System and methods for expandably wide operand instructions

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7072929B2 (en) * 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
US20040073773A1 (en) * 2002-02-06 2004-04-15 Victor Demjanenko Vector processor architecture and methods performed therein
US9465611B2 (en) 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
US7793072B2 (en) * 2003-10-31 2010-09-07 International Business Machines Corporation Vector execution unit to process a vector instruction by executing a first operation on a first set of operands and a second operation on a second set of operands
US8200945B2 (en) * 2003-11-07 2012-06-12 International Business Machines Corporation Vector unit in a processor enabled to replicate data on a first portion of a data bus to primary and secondary registers
US8423979B2 (en) * 2006-10-12 2013-04-16 International Business Machines Corporation Code generation for complex arithmetic reduction for architectures lacking cross data-path support
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US8650240B2 (en) * 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
GB2474901B (en) * 2009-10-30 2015-01-07 Advanced Risc Mach Ltd Apparatus and method for performing multiply-accumulate operations
KR20120077164A (ko) * 2010-12-30 2012-07-10 삼성전자주식회사 Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
CN104115115B (zh) * 2011-12-19 2017-06-13 英特尔公司 用于多精度算术的simd整数乘法累加指令
EP2851786A1 (en) * 2013-09-23 2015-03-25 Telefonaktiebolaget L M Ericsson (publ) Instruction class for digital signal processors

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05233682A (ja) * 1992-02-21 1993-09-10 Matsushita Electric Ind Co Ltd ディジタル信号処理装置
JP2001256038A (ja) * 1999-11-15 2001-09-21 Texas Instr Inc <Ti> 柔軟な乗算ユニットを有するデータ・プロセッサ
JP2005521176A (ja) * 2002-03-22 2005-07-14 インテル コーポレイション データマスクマッピング情報取得方法
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
JP2005025718A (ja) * 2003-06-30 2005-01-27 Intel Corp Simd整数乗算上位丸めシフト
JP2008506191A (ja) * 2004-07-08 2008-02-28 アソクス リミテッド 可変サイズの高速直交変換を実施する方法および機器
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
JP2009075676A (ja) * 2007-09-18 2009-04-09 Nec Electronics Corp マイクロプロセッサ
US20120166511A1 (en) * 2010-12-22 2012-06-28 Hiremath Chetan D System, apparatus, and method for improved efficiency of execution in signal processing algorithms
JP2015219823A (ja) * 2014-05-20 2015-12-07 富士通株式会社 プロセッサ
US20150378734A1 (en) * 2014-06-30 2015-12-31 Microunity Systems Engineering, Inc. System and methods for expandably wide operand instructions

Also Published As

Publication number Publication date
GB2548908B (en) 2019-01-30
GB2548908A (en) 2017-10-04
TWI728068B (zh) 2021-05-21
CN108885550A (zh) 2018-11-23
US20190310847A1 (en) 2019-10-10
EP3436928A1 (en) 2019-02-06
US10628155B2 (en) 2020-04-21
TW201737075A (zh) 2017-10-16
IL261429B (en) 2020-10-29
WO2017168118A1 (en) 2017-10-05
KR20180132085A (ko) 2018-12-11
CN108885550B (zh) 2023-03-03
IL261429A (en) 2018-10-31
EP3436928B1 (en) 2020-05-27

Similar Documents

Publication Publication Date Title
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
TWI728068B (zh) 複數乘法指令
US8443170B2 (en) Apparatus and method for performing SIMD multiply-accumulate operations
KR100705507B1 (ko) 확장가능한 프로세서 아키텍처에 진보된 명령어들을부가하는 방법 및 장치
CN108780395B (zh) 矢量预测指令
KR20180066146A (ko) 벡터 데이터 전송 명령어
CN111381939A (zh) 多线程处理器中的寄存器文件
CN111381880A (zh) 加载-存储指令
KR20180067582A (ko) 벡터 로드 명령어
JP2012252374A (ja) 情報処理装置
US11106465B2 (en) Vector add-with-carry instruction
Finlayson et al. An overview of static pipelining
JP7048612B2 (ja) ベクトル生成命令
Finlayson et al. Improving low power processor efficiency with static pipelining

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200214

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210326

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210407

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210629

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20211117