JP2020527795A - レジスタベースの複素数処理 - Google Patents

レジスタベースの複素数処理 Download PDF

Info

Publication number
JP2020527795A
JP2020527795A JP2020501122A JP2020501122A JP2020527795A JP 2020527795 A JP2020527795 A JP 2020527795A JP 2020501122 A JP2020501122 A JP 2020501122A JP 2020501122 A JP2020501122 A JP 2020501122A JP 2020527795 A JP2020527795 A JP 2020527795A
Authority
JP
Japan
Prior art keywords
complex
data items
component
real
result
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
JP2020501122A
Other languages
English (en)
Other versions
JP7343473B2 (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 JP2020527795A publication Critical patent/JP2020527795A/ja
Application granted granted Critical
Publication of JP7343473B2 publication Critical patent/JP7343473B2/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/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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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
    • 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
    • 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/4806Computations with complex numbers
    • G06F7/4812Complex multiplication

Landscapes

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

Abstract

入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルに対してベクトル処理演算をサポートするための、装置、方法、プログラム、及び複素数処理命令が提供される。命令に応答して、データ項目の少なくとも1つの第1のセットが第1のソース・レジスタ内の交互する位置から抽出され、データ項目の少なくとも1つの第2のセットが第2のソース・レジスタ内の交互する位置から抽出され、ここで第1及び第2のソース・レジスタ内の連続データ項目は複素数の個々のセットの交互する実数成分及び虚数成分を含む。複素数成分の結果セットが、データ項目の2つのセットをオペランドとして使用して生成され、複素数成分の結果セットは、複素数の2つのセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである。複素数成分の結果セットがデスティネーション・レジスタに適用される。

Description

本開示はデータ処理装置に関する。より詳細には、データ処理装置で複素数演算を実施することに関する。
データ処理装置は様々なコンテキストにおいて複素数計算を実施することが要求され得る。いくつかのデータ処理システムは、ソース・オペランド又はベクトル処理命令によって指定される結果値が指定されるデータ処理演算に並列にかけられる複数のデータ項目を含むベクトルであるベクトル命令の処理をサポートする。複素数の2部構造(すなわち、その実数部、及び虚数部)は、ベクトル化されるやり方で複素数演算を実施することができるデータ処理システムを提供することが単純ではないことを意味している。
Robert Bedichek、「Some Efficient Architecture Simulation Techniques」、1990年冬季USENIX Conference、53〜63頁
一実例の実施例において、命令をデコードするための命令デコーダ回路と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路とを備える装置があり、命令デコーダ回路は複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理回路が、第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第1のセット及び複素数の第2のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することとを行うように制御するための制御信号を生成する。
別の実例の実施例において、データ処理装置を動作させる方法があり、方法は、命令をデコードするステップと、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するステップと、複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置のデータ処理回路が第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第1のセット及び複素数の第2のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することと、を行うように制御するための制御信号を生成するステップとを含む。
別の実例の実施例において、命令をデコードする手段と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用する手段と、複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置内のデータ処理が第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第1のセット及び複素数の第2のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することと、を行うための手段を制御するための制御信号を生成する手段とを含む装置がある。
別の実例の実施例において、命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムがあり、コンピュータ・プログラムは、命令をデコードするための命令デコード・プログラム・ロジックと、入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む入力データ・ベクトル構造体への命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックとを含み、命令デコード・プログラム・ロジックは複素数演算、第1のソース・データ構造体、第2のソース・データ構造体、及びデスティネーション・データ構造体を指定する複素数処理命令に応答して、データ処理プログラム・ロジックが、第1のソース・データ構造体内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、第1のソース・データ構造体内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、第2のソース・データ構造体内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、第2のソース・データ構造体内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第1のセット及び複素数の第2のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、複素数成分の結果セットをデスティネーション・データ構造体に適用することと、を行うように制御するための制御信号を生成する。
本技法は、その実施例を参照して添付の図面に図示されるように、単に実例としてさらに説明される。
一実施例における、データ処理装置を概略的に示す図である。 一実施例における、非拡大(non−widening)複素数演算を実施するデータ処理回路を概略的に示す図である。 一実施例における、拡大(widening)複素数演算を実施するデータ処理回路を概略的に示す図である。 一実施例における、複製演算から複素数演算を始めるデータ処理回路を概略的に示す図である。 符号付き乗算複素数命令の4つの種類に応じた実施例における、データ処理回路の動作の図である。 ベクトル化された複素数の最終的なセットを生成するための、図5で示されるものなどの複素数命令の使用に続くナロー・シフト(narrowing shift)演算の使用の図である。 図7A−7Dは、一実施例における、4つの異なるタイプの複素数ドット積命令に応じたデータ処理回路を概略的に示す図である。 初期のデータ精度に戻るために、図7A〜図7Dで示されるものなどの複素数ドット積命令の使用に続いて一実施例で実行される一連の演算を示す図である。 図9A−9Dは、一実施例における、4つの異なるタイプの非拡大複素数ドット積命令に応じたデータ処理回路を概略的に示す図である。 初期のデータ精度に戻るために、図9A〜9Dで示されるものなどの命令の実行に続いて一実施例で実行される一連の演算を示す図である。 図11A−11Bは、一実施例における、さらに転置パラメータを含む、複素数加算命令をサポートするためのデータ処理回路を概略的に示す図である。 一実施例における4つの個々の転置パラメータに応じて実行される4つの転置のセットを示す図である。 一実施例の方法を実行する際に行われる一連のステップを示す図である。 一実施例において、シミュレータ実装形態を提供するシステムのコンポーネントを概略的に示す図である。
少なくともいくつかの実施例は、命令をデコードするための命令デコーダ回路と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路とを備える装置であり、命令デコーダ回路は複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理回路が、第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第1のセット及び複素数の第2のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することとを行うように制御するための制御信号を生成する、装置を提供する。
現代のデータ処理システムは、様々なコンテキスト、例えば数例を挙げると、デジタル通信、レーダ・システム、及び光学システムにおいて、複素数の算術的計算を実施するよう要求されることがある。さらには、ベクトル化されたやり方でデータを処理することができる(すなわち、単一の命令によって指定されるデータ処理演算をデータ・ベクトル内の複数のデータ項目に対して並列に適用することができる)データ処理システムは、スループット及び処理効率の点から有利性をもたらすことができる。しかしながら、複素数データにベクトル処理技法を適用することは、いくつかの理由で単純ではない。まず、複素数の固有の構造(実数成分及び虚数成分)は、データ処理システムが、ベクトル内のデータ項目の大きなセット内のそれぞれの別個の複素数のデータ項目のこれらの個々の部分を正確に扱えるように構成されなければならないこと、さらには、入力データがベクトル化されている性質により、複素数の2つのセットの個々の成分を所与の複素数演算でまとめることができるやり方に対してさらなる制約が加えられることを意味している。本技法は、データ処理回路がソース・レジスタのそれぞれにおいて交互する位置、つまりソース・レジスタが連続データ項目のセットを保持しており、ここでこれらのデータ項目は複素数のセットの実数成分と虚数成分との交互になっており、且つ実数成分と虚数成分とが別個の複素数を形成するために対(または「ペア」ともいう)となっていると認識される場所、からデータ項目のセットを抽出する手法を提供する。それによって、データ処理回路は例えば、ソース・レジスタから実数成分を引き出すことができる(他の実例では代替又は追加で、同様に虚数成分を抽出できることに留意すべきであるが)。よって、データ処理回路は次いで必要とされる複素数演算を、個々のソース・レジスタから抽出した成分に適用して、結果セットの複素数成分を作ることができ、ここで複素数成分の結果セットは、複素数演算の複素数結果の実数成分のセット、又は虚数部のいずれかである。これは、複素数成分のさらなるセットがやはり生成されることを排除するものではないこと、すなわち、複素数のセットの実数部及び虚数部の両方が生成され得るが、いくつかの実施例においてはどちらか一方しか生成されないことに留意されたい。次いで複素数成分の結果セットは複素数処理命令で指定されるデスティネーション・レジスタに適用されるが、この適用は様々な形態を取ることができる。例えば、結果セットは単にデスティネーション・レジスタに格納することができるか、又はデスティネーション・レジスタの既存の内容に累算する(数学的方法の一種)ことができる。
上で言及したように、複素数成分の結果セットは、定義された特定の複素数処理命令に依存して変化することができるが、いくつかの実施例において、複素数成分の結果セットは複素数結果の実数成分のセットである。同様に、他の実施例では、複素数成分の結果セットは複素数結果の虚数成分のセットである。
複素数処理命令に応答してデータ処理回路によって生成された複素数成分の結果セットは、様々な方法でデスティネーション・レジスタに適用することができるが、いくつかの実施例において、データ処理回路は制御信号に応答して複素数成分の結果セットをデスティネーション・レジスタ内の連続位置に適用する。それにより、複素数成分の結果セットが複素数演算の複素数結果の実数部及び虚数部のうちの1つである場合、これはデスティネーション・レジスタの内容が第1及び第2のソース・レジスタの内容とは異なるフォーマットであること、すなわち、第1及び第2のソース・レジスタが複素数のセットの実数成分及び虚数成分の連続する対を保持している場合、デスティネーション・レジスタは連続する実数成分又は連続する虚数成分のいずれかのみを保持していることを意味している。これによって、多様な複素数演算を定義することが可能となるが、結果については、ベクトル処理構成内で扱われることができるだけである。
実際一部のそのような実施例において、複素数成分の結果セットのそれぞれの複素数成分は、データ項目の第1及び第2のセットのそれぞれのデータ項目より拡大している。それにより、複素数成分の結果セットの成分のこの拡大は、複素数成分の結果セットの精度が、ベクトル処理環境内で演算するにもかかわらずより良好に保存され、そうでなければ結果セットの複素数成分は、それらをベクトル処理の自身の個々のレーンにフィットさせるために、著しい切り捨てを必要としていたかも知れないことを意味している。したがって、本技法は例えば、複素数の結果セットの実数成分及び虚数成分を2つの別個の命令によって決定することができ、その後これらの成分を実数及び虚数の複素数対の連続するセットに再結合する機会を伴う手法を提供するものであることを理解すべきである。
それにもかかわらず、上で言及したいくつかの実施例においてデータ処理回路は複素数成分の結果セットをデスティネーション・レジスタの連続位置に適用することができるが、いくつかの実施例においては、データ処理回路は複素数実数成分の結果セット、及び対応する複素数虚数成分の結果セットの両方を生成し、これらは連続する実数成分−虚数成分対が結果として複素数の連続するセットを形成するよう、デスティネーション・レジスタへの適用においてインターリーブすることができる。それにより、いくつかの実施例において、データ処理回路は制御信号に応答して、複素数成分の結果セットを、複素数成分のさらなる結果セットでインターリーブされるデスティネーション・レジスタ内の交互する位置に適用し、複素数成分の結果セットが複素数結果の実数成分のセットである場合、複素数成分のさらなる結果セットは複素数結果の虚数成分のセットであり、複素数成分の結果セットが複素数結果の虚数成分のセットである場合、複素数成分のさらなる結果セットは複素数結果の実数成分のセットである。
データ処理回路がデータ項目の第1のセット及びデータ項目の第2のセットを第1及び第2のソース・レジスタ内のそれらの個々の交互する位置から抽出するやり方は様々に定義することができ、実際いくつかの実施例において様々に制御することができ、例えば、いくつかの実施例において複素数処理命令は、データ項目の第1のセットが第1のソース・レジスタの奇数番号位置又は偶数番号位置から抽出されるかどうかをさらに指定し、複素数処理命令は、データ項目の第2のセットが第2のソース・レジスタの奇数番号位置又は偶数番号位置から抽出されるかどうかをさらに指定する。「奇数」及び「偶数」位置は、本明細書で「下位(又はボトム(bottom))」及び「上位(又はトップ(top))」位置と称されることもある。
また、複素数演算を実施するために、データ項目の第1及び第2のセットが抽出される前に、第1のソース・レジスタ及び第2のソース・レジスタのうちの少なくとも1つに適用されるさらなるデータ処理があってもよく、いくつかの実施例において、複素数処理命令は、第1のソース・レジスタ及び第2のソース・レジスタのうちの少なくとも1つについての複製インデックスをさらに指定し、データ処理回路はさらに制御信号に応答して、第1のソース・レジスタ及び第2のソース・レジスタのうちの少なくとも1つにおける複製インデックスによって示される複素数のソース・セットを複製する。したがって、第1及び第2のソース・レジスタのうちの少なくとも1つの「インデックス付け」によって、プログラマは個々のレジスタに保持されているデータのサブセットを識別することができ、このサブセットは再作成することができ、それにより第1及び第2のデータ・セットの抽出が次いでこの再作成されたサブセットを使用することができる。例えば、定義されるインデックスの性質に依存して、複製インデックスはベクトル・レジスタの所定の部分の2つの2分の1のうちの1つを指定することができ、次いで複製によってその指定された2分の1を、それぞれ所定の部分内の他の2分の1にコピーする。具体的な一実例を挙げると、複製インデックスが適用されるベクトル・レジスタの単位が128ビット長であり、複製インデックスがこの単位の上半分を指定し、本技法がその128ビットの空間を利用して4つの連続する32ビットの複素数成分(すなわち、2つの64ビットの複素数)を格納してある場合、複製によって、識別された64ビットの複素数を、その128ビット単位中で隣接する64ビット空間に複製する。この動作は、ベクトル・レジスタの全幅にわたって繰り返される。
上記実例は一回実施される複製を示しているが、いくつかの実施例において、複素数のソース・セットの複製は、複素数のソース・セットの複数回の複製を含む。例えば、複製インデックスがベクトルの所与の単位の4分の1を指定する場合、この4分の1は単位すべてを満たすために3回複製することができる。上記実例の128ビット単位をそのままにしておくが、複素数成分はそれぞれの16ビットである一実例においては、これによって識別された32ビットの複素数(16ビットの実数成分及び16ビットの虚数成分)が、この128ビット単位上にある他の3つの32ビットの部分に複製される。このような「インデックス付け」を本明細書で説明される命令のあらゆるものに適用することができる。
いくつかの実施例においては、単一のデータ項目のセットのみが第1のソース・レジスタから抽出されており、第1のソース・レジスタ内の複素数のセットの実数成分のセット又は虚数成分のセットのいずれかを表現しているが、いくつかの実施例では実数成分及び虚数成分の両方が抽出される。それにより、これらの実施例では、第1のソース・レジスタから抽出されるデータ項目の少なくとも1つの第1のセットは、データ項目の第1のセット及びデータ項目の第3のセットを含み、データ項目の第1のセットが複素数の第1のセットの実数成分である場合、データ項目の第3のセットは複素数の第1のセットの虚数成分であり、データ項目の第1のセットが複素数の第1のセットの虚数成分である場合、データ項目の第3のセットは複素数の第1のセットの実数成分であり、またデータ処理回路は制御信号にさらに応答して、さらにデータ項目の第3のセットをオペランドとして使用して、複素数成分の結果セットを生成する。したがって、データ処理回路は複素数演算における改善のために複素数の第1のセットの実数成分及び虚数成分の両方を有しており、定義された特定の複素数処理命令(したがって、複素数演算)に適当である。
同様に、いくつかの実施例において、第2のソース・レジスタから抽出されるデータ項目の少なくとも1つの第2のセットは、データ項目の第2のセット及びデータ項目の第4のセットを含み、データ項目の第2のセットが複素数の第2のセットの実数成分である場合、データ項目の第4のセットは複素数の第2のセットの虚数成分であり、データ項目の第2のセットが複素数の第2のセットの虚数成分である場合、データ項目の第4のセットは複素数の第2のセットの実数成分であり、またデータ処理回路は制御信号にさらに応答して、さらにデータ項目の第4のセットをオペランドとして使用して、複素数成分の結果セットを生成する。
複素数演算は様々な形態を取ることができるが、いくつかの実施例において、複素数演算は、複素数ドット積演算であり、データ処理回路は制御信号に応答して、複素数の第1のセットの実数成分−虚数成分対の対のセット、並びに複素数の第2のセットの実数成分−虚数成分対の対のセット、の部分積から複素数成分の結果セットを累算する累算回路を備える。いくつかの実施例において、複素数演算は複素数乗算演算を含む。いくつかの実施例において、複素数演算は複素数加算演算である。いくつかの実施例において、複素数演算は複素数減算演算である。
本技法は複素数の第1及び第2のセットの1つ又は両方の成分の追加的な操作が複素数演算に先立って実行され得ることをさらに提供するが、これは特に必要とされる複素数結果の効率的な決定を可能とすると見出されているためであり、例えば、そうでなければ第1及び第2のソース・レジスタのうちの少なくとも1つの内容を操作するために追加的な命令が予め実行されることを必要としていたであろう。ひいては、いくつかの実施例は複素数処理命令がさらに転置パラメータを指定すること、またデータ処理回路が制御信号に応答して、複素数の第1及び第2のセットへの複素数演算の適用に先立って複素数の第1及び第2のセットのうちの少なくとも1つに対して転置演算を適用することを提供する。
複素数の第1及び第2のセットのうちの少なくとも1つに適用されるこの転置演算は、様々に定義することができる。これは「回転」と称されることがあり、実際、いくつかの事例においては、原点を中心とする複素数平面において表現される複素数の回転に対応することができるが、本技法はそのような「真」の回転に対応する転置に限定されず、いくつかの実施例においては、転置演算は以下のうちの少なくとも1つを含む:少なくとも1つの複素数の第1のセット及び複素数の第2のセットにおいて、実数成分の虚数成分での置換、虚数成分の実数成分での置換、実数成分と虚数成分の交換、実数成分を負の値にすること(negation)、及び虚数成分を負の値にすること。
転置パラメータは様々な方法で与えられ得るが、いくつかの実施例において、複素数処理命令は即値として転置パラメータを指定する。上で言及したように、転置は常に複素数平面内の真の回転に直接対応しているわけではないが、それにもかかわらず、転置パラメータは本明細書において所々「回転値」と称され、いくつかの実施例において、4つの値のセットのうちの1つを取ることができ、複素数平面の回転の実例に類似して、複素数平面内の4分の1回転の回転角を指して0、90、180、及び270と記されていることがある。
上で言及したように、複素数成分の結果セットは様々な方法でデスティネーション・レジスタに適用することができるが、いくつかの実施例において、複素数成分の結果セットをデスティネーション・レジスタに適用することは、複素数成分の結果セットをデスティネーション・レジスタに格納することを含む。他の実施例において、複素数成分の結果セットをデスティネーション・レジスタに適用することは、複素数成分の結果セットをデスティネーション・レジスタの内容で累算することを含む。
デスティネーション・レジスタは、第1及び第2のソース・レジスタ両方とは別個のレジスタとして指定することができるが、いくつかの実施例において、デスティネーション・レジスタが第1のソース・レジスタ及び第2のソース・レジスタのうちの1つである「相殺的」演算を定義することができる。
データ処理回路が、結果値がその値を保持するよう定義された記憶装置には大きくなり過ぎてしまう状況を扱うやり方は、様々な形態を取ることができる。例えば、値はラップ・アラウンドする(すなわち、最大値を超えると0に戻る)ことができる、一方でいくつかの実施例において、複素数演算は飽和演算(すなわち、換言すると、最大値を超えると結果はその最大値のまま保持される)である。
少なくともいくつかの実施例は、データ処理装置を動作させる方法を提供し、方法は、命令をデコードするステップと、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するステップと、複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置のデータ処理回路が、第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第1のセット及び複素数の第2のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することとを行うように制御するための制御信号を生成するステップとを含む。
少なくともいくつかの実施例は、装置を提供し、装置は、命令をデコードする手段と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用する手段と、複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置内のデータ処理が、第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第1のセット及び複素数の第2のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することとを行うための手段を制御するための制御信号を生成する手段とを備える。
少なくともいくつかの実施例は、命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムを提供し、コンピュータ・プログラムは、命令をデコードするための命令デコード・プログラム・ロジックと、入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む入力データ・ベクトル構造体への命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックとを含み、命令デコード・プログラム・ロジックは複素数演算、第1のソース・データ構造体、第2のソース・データ構造体、及びデスティネーション・データ構造体を指定する複素数処理命令に応答して、データ処理プログラム・ロジックが、第1のソース・データ構造体内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、第1のソース・データ構造体内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、第2のソース・データ構造体内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、第2のソース・データ構造体内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第1のセット及び複素数の第2のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、複素数成分の結果セットをデスティネーション・データ構造体に適用することとを行うように制御するための制御信号を生成する。
少なくともいくつかの実施例は、上で言及したコンピュータ・プログラムの実施例にしたがってコンピュータ・プログラムを非一時的に記憶するコンピュータ可読記憶媒体を提供する。
いくつかの特定の実施例を次に図面を参照して説明する。
図1は本技法の様々な実例を具現化し得るデータ処理装置10を概略的に図示している。装置は、それが実行する一連の命令に応答してデータ項目に対してデータ処理演算を実施するデータ処理回路12を備える。これらの命令は、データ処理装置がアクセス権を有するメモリ14から取り出され、当業者に馴染みのあるやり方でこの目的のためにフェッチ回路16が設けられる。さらには、フェッチ回路16によって取り出された命令は命令デコーダ回路18を通過し、命令デコーダ回路18は、処理回路12並びにレジスタ20のセット、及びロード/ストア・ユニット22の、設定及び動作の様々な態様を制御するように構成される制御信号を生成する。一般的に、データ処理回路12はパイプライン様式に構成することができるが、その詳細は本技法に関連性がない。当業者であれば図1が表す全体的な構成には馴染みがあるが、そのさらなる詳細な説明は、単に簡略化のためここでは省略する。図1から分かるように、レジスタ20はそれぞれ複数のデータ要素についての記憶装置を備え、それによって処理回路はデータ処理演算を指定されたレジスタ内の指定されたデータ要素に適用することができるか、又はデータ処理演算を指定されたレジスタ内の指定されたデータ要素の群(「ベクトル」)に適用することができる。特に、図示されるデータ処理装置はベクトル化されたデータ処理演算のパフォーマンス、具体的にはレジスタ20に保持されるデータ要素の観点から、複素数処理命令の実行に関連しており、そのさらなる説明をいくつかの具体的な実施例を参照して以下でより詳細に与える。命令の実行においてデータ処理回路12によって必要とされるデータ値、及びそれらのデータ処理命令の結果として生成されるデータ値は、ロード/ストア・ユニット22によって、メモリ14に書き込まれ、メモリ14から読み出される。図1のメモリ14は一般的に、本技法の命令を記憶することができるコンピュータ可読記憶媒体の実例として、典型的には処理回路がその後に実行する所定の命令のシーケンスの一部(「プログラム」)として、見なされ得ることにも留意されたい。しかしながら処理回路は、RAM内の、ROM内の、ネットワーク・インターフェースを介して、などの、様々な異なるソースからそのようなプログラムにアクセスすることができる。本開示は、処理回路12が実行することができる様々な新規な命令を説明しており、これらの命令の実行などをサポートするために以下の図面はこれらの命令の性質、データ処理回路における変形例のさらなる説明を与える。
図2は一実施例における、複素数乗算命令をサポートするための、データ処理回路を概略的に図示している。図面の下部に見られるように、複素数乗算命令CMULは第1のソース・レジスタS1、第2のソース・レジスタS2、及びデスティネーション・レジスタZを指定している。さらに、この実施例において、複素数乗算命令は関与する複素数成分のデータ・サイズをさらに指定しており、すなわちこれらが32ビット値であることを示す「.s」の追加的な指定を伴う。この命令に応答して(又は、図1の上述から理解されるように厳密に言うと、命令に応答してデコーダ回路18によって生成された制御信号に応答して)データ処理回路は第1のソース・レジスタS1及び第2のソース・レジスタS2の両方から実数の複素数成分のセット及び虚数の複素数成分のセットを抽出し、これらの成分のそれぞれは32ビット値である。図2においてソース・レジスタS1及びS2の内容を記している実例の成分から分かるように、それぞれのソース・レジスタの内容は複素数成分対、すなわち、実数成分及び虚数成分のシーケンスである。ソース・レジスタ内のデータのこの構造は、複素数が共にレジスタ内のこの場所、及びそれらをロードしてきたメモリ場所の両方に格納されるという点で有用であり、これは別個の実数成分及び虚数成分をメモリからロードするための演算をロードすること及びデインタリーブすることに関連する複雑さが、必要ではないことを意味している。さらには、図示される命令及びそれをサポートするためのデータ処理回路の提供は、それぞれのソース・レジスタ内のインターリーブされた実数成分及び虚数成分を直接処理することができ、それによって連続的なロード及びストア命令の使用がこれらの値のセットをレジスタに入れ、またメモリに戻すことを可能にしており、さらに実装を容易にし、パフォーマンスの改善をサポートしていることを意味している。図2に図示される複素数乗算命令の具体的な実例において、第1及び第2のソース・レジスタから入力の個々の対を受信する乗算ユニット30のセットが示されている。図面にはそれぞれのソース・レジスタ及びデスティネーション・レジスタ内には4つの成分のセットのみが示されて明示的に記されているが、本技法はこの処理がベクトル・レジスタの全幅にわたって(図面の左右への破線によって示されるように)複製することができることを提供することに留意すべきである。乗算ユニット30によって実施される乗法演算の結果は、対になった入力を加算ユニット32に与え、2つの実体(instance)のうち加算ユニット用の入力の1つは加算ユニットに適用される前に負の値にされる(すなわち、減算を実装するため)ことに留意されたい。次いで加算ユニット32の結果は、結果レジスタZ内の個々の位置に格納される。この実例において、32ビット値が指定されている場合、加算ユニット32によって生成された結果値のセットはそれぞれ32ビット値である。
図2のCMUL命令が属する、非拡大命令である、本技法によって提供される実例の命令のセットは次の通りである:
? CMUL : complex multiply with rotation;
? CMLA : complex multiply accumulate with rotation;
? SQRDCMULH : signed saturating rounding doubling complex multiply with rotation, returning high half; and
? SQRDCMLAH : signed saturating rounding doubling complex multiply-accumulate with rotation, returning high half.
(上記命令セットの訳は以下の通り)
・CMUL:回転ありの複素数乗算
・CMLA:回転ありの複素数乗累算
・SQRDCMULH:上位半分を返す、回転ありの符号付き飽和丸め付きダブル複素数乗算
・SQRDCMLAH:上位半分を返す、回転ありの符号付き飽和丸め付きダブル複素数乗累算
図3は一実施例における別の複素数処理命令を概略的に図示しており、図2の実例とのいくつかの顕著な差異を示している。この実例において、命令の命名規則SQDMLALBTは「符号付き ダブル 乗算 加算 Long 下位 上位」(“signed doubling multiply add long bottom top”)に対応している。図3から分かるように、この命令をサポートするために与えられるデータ処理回路の観点から、4つの乗算ユニット36のセットは第1及び第2のソース・レジスタから入力を受信し、命令はやはり「シングルの」32ビット値のセットがそれぞれから抽出されるべきであるよう指定「s」している。この命令の「下位 上位」(“bottom top”)の特徴は、成分対の下半分は第1のソース・レジスタzs1から抽出され、成分対の上半分は第2のソース・レジスタzs2から抽出されることを示していることに留意されたい。これらの対同士の乗法演算の結果、加算ユニット38のセットへの1つの入力を抽出し、加算ユニット38はこの値のセットをデスティネーション・レジスタzdから抽出される値へ加算する、すなわち、これは累算演算である。さらには、命令はデスティネーション・レジスタ内の成分のサイズを「d」すなわち64ビット値として指定することに留意されたい。換言すると、この演算は拡大演算である。図示される命令の結果として、ソース・レジスタzs1内の複素数のセットとソース・レジスタzs2内の複素数のセットとの乗算の結果の虚数成分のセットが生成され、デスティネーション・レジスタzdに累算され、結果成分が入力成分に対して拡大することを可能にしており、それによって精度が保存される。図2の事例のように、図面では4つの成分のセットのみがそれぞれのソース・レジスタから抽出されてデスティネーション・レジスタに累算されるように明示的に示されているが、本技法はこの処理がベクトル・レジスタの全幅にわたって複製することができる(図面の左右への破線及び省略によって示されるように)ことを提供する。
図3のSQDMLALBT命令が属する、拡大命令であり、加算/減算下位/上位下位/上位(ここで下位及び上位はアクセスされる複素数の下半分及び上半分を指す、すなわちそれぞれの複素数の実数部及び虚数部)を指定する、本技法によって提供される実例の命令のセットは次の通りである:
? SQDMLALB : signed multiply add long bottom bottom;
? SQDMLSLB : signed multiply subtract long bottom bottom;
? SQDMLALT : signed multiply add long top top;
? SQDMLSLT : signed multiply subtract long top top;
? SQDMLALBT : signed multiply add long bottom top; and
? SQDMLSLBT : signed multiply subtract long bottom top.
(上記命令セットの訳は以下の通り)
・SQDMLALB:符号付き 乗算 加算 Long 下位 下位
・SQDMLSLB:符号付き 乗算 減算 Long 下位 下位
・SQDMLALT:符号付き 乗算 加算 Long 上位 上位
・SQDMLSLT:符号付き 乗算 減算 Long 上位 上位
・SQDMLALBT:符号付き 乗算 加算 Long 下位 上位
・SQDMLSLBT:符号付き 乗算 減算 Long 下位 上位
これらはすべて「MLA」(乗算加算(multiply add)−乗累算としても知られる)命令であり、「MUL」バージョン(すなわち純粋に乗算のバージョン)が、例えばデスティネーション・レジスタのあらゆる既存の内容が累算されるべきではない累算処理の初回の繰り返しでの使用のために、やはり与えられることに留意されたい。これらのためには、上記列挙の「MLA」をちょうど「MUL」に置き換える必要がある。
図4は、本技法にしたがって、別の実例の命令、すなわち複素数乗累算命令をサポートするために一実施例において提供されるデータ処理回路を概略的に図示している。図4において特に留意すべきこととして、第2のソース・レジスタzs2についての複製インデックス([1])の追加的な指定が挙げられる。図面で示されるように、サポートされる処理のベクトル化された性質が128ビットの粒度で適用される場合、すなわち図示される処理がベクトル・レジスタの幅にわたってこれらの128ビットの粒度で繰り返される場合、且つ命令が、入力成分サイズがシングルすなわち32ビットであると指定する場合、複製インデックスを「1」と指定することは、128ビットの粒度の上半分にある32ビット値の対によって表される複素数が、その下半分に複製されるべきであることを示す。他の実例において、例えば、命令が同じ128ビット粒度内で「ハーフ」(すなわち16ビット)の値を指定する場合、粒度の内容は2倍の数の複素数を表すことになり、すなわち8個の16ビット値があることになり、この複製インデックスによってそのセット内の(4つのうち)第2の複素数が他の3つに複製されることになることに留意されたい。しかしながら、図4に示される具体的な実例を考慮すると、複製に続いて第1及び第2のソース・レジスタから抽出された成分は、実際には図2に示されるユニット30と同じ乗算ユニットであってもよい乗算ユニット40への入力の対を与える。同様に、乗算ユニット40の対の結果は加算ユニット42への入力を与える。図2における事例のように、加算ユニット42のうち2つは負の値にされた入力のうちの1つを有しているが、図2の実例とは対照的に、図4の実例における命令は累算演算であり、そのためデスティネーション・レジスタで保持される個々の成分の既存の内容は、加算ユニット42へ追加的な入力を与えることに留意されたい。このように生成された結果値は、デスティネーション・レジスタzds3の個々の成分の新しい内容を形成する。これは拡大命令ではない、すなわち結果成分が入力成分と同じサイズであり、したがって、この命令のアクションに続くデスティネーション・レジスタの内容は、複素数のセットのインターリーブされた実数成分及び虚数成分のセットであること、すなわち2つのソース・レジスタが有するのと同一のフォーマットであることに留意されたい。図2及び図3の事例のように、図面では4つの成分のセットのみがそれぞれのソース・レジスタから抽出されてデスティネーション・レジスタに累算されるように明示的に示されているが、本技法はこの処理がベクトル・レジスタの全幅にわたって複製することができる(図面の左右への破線及び省略によって示されるように)ことを提供する。
図5は、いくつかの実施例におけるさらなる命令のセットの動作を図示している。これらはすべていずれかの連続する実数の複素数成分のセット(第1の命令の実例において)又は連続する虚数成分のセット(第3及び第4の命令の実例において)を生成する拡大命令であることが分かる。やはり、図2〜図4について上述したように、それぞれの命令は処理されるデータ要素のサイズ、及び生成される結果データ要素のサイズを指定するが、ここでは具体的なサイズは図面では汎用のままである、例えば<Zda>.<T>及び<Zn><Tb>であることに留意されたい。図5の表記では、処理の終了において、作られた実数及び虚数の結果はデインタリーブされており、デスティネーション・レジスタZdaはすべての実数結果を含み、且つZdbはすべての虚数結果を含むことが分かる。図6に目を移すと、次にデスティネーション・レジスタZcの複素数成分の図示される結果セットを作るために、ナロー・シフト演算を使用してレジスタZa及びZbからのデータを並べ替えることができるが、この場合これらは元々のソース・レジスタZn及びZm(図5)の連続する複素数のフォーマットであり、したがってデータのさらなる再配置は必要とされない。したがってこの複素数の結果のセットは連続的なストア動作でメモリに格納し戻すことができる。先の図面の事例のように、図5及び図6においては4つの成分のセットのみがそれぞれのソース・レジスタから抽出されてデスティネーション・レジスタに累算されるように明示的に示されているが、本技法はこの処理がベクトル・レジスタの全幅にわたって複製することができることを提供する。
これらの乗算 加算/減算 下位/上位 下位/上位命令(“multiply add/subtract bottom/top bottom/top instructions”)を利用する命令(1)の実例のプログラム・シーケンスは、例えば次の通りであり得る:
実例のコード・シーケンス(1):
...
.Loop:
...
LD1<Tb> <Zn>.<Tb>,<Pn>/z,[<Xn>]
LD1<Tb> <Zm>.<Tb>,p/z,[<Xm>]
SQDMLALB <Zda>.<T>,<Zn>.<Tb>,<Zm>.<Tb>
SQDMLSLT <Zda>.<T>,<Zn>.<Tb>,<Zm>.<Tb>
SQDMLALTB <Zdb>.<T>,<Zn>.<Tb>,<Zm>.<Tb>
SQDMLALTB <Zdb>.<T>,<Zm>.<Tb>,<Zn>.<Tb>
...
.endLoop:
SQSHRNB <Zda>.<Tb>,<Zda>.<T>,<imm>
SQSHRNT <Zda>.<Tb>,<Zdb>.<T>,<imm>
ST1 <Zda>.<Tb>,<Pd>,[Xd]
上で言及した乗算命令と同じく、本技法はまた様々な複素数ドット積命令を提供し、その一部を、それらをサポートするために与えられるデータ処理回路と併せて図7A〜図7Bの実例の実施例に示す。そのような複素数ドット積演算をサポートする第1の手法では、図7A〜図7Dが図示するように結果値の実数部及び虚数部は別個に計算される。それにより、これは示される命令のセットが結果データに対して拡大する効果を生み出すことを可能にし、図7A〜図7Dの実例から分かるように、データ精度を4倍高める、すなわち入力複素数成分(実数及び虚数)がそれぞれ16ビット値である場合、結果値は64ビット値である。ドット積ユニット50は、それぞれのソース・レジスタから得られる複素数の対の、個々の実数成分及び虚数成分からの4つの入力成分の個々のセットからそれぞれ部分積を算出する。「−1」と付されるいくつかの実体において、与えられる入力が負の値にされることに留意されたい。このように生成される部分積が、加算回路52によって累算される。やはりこれらの図面で図示されるように、これらの演算は累算演算であり、デスティネーション・レジスタの個々の部分の既存の内容は、最終的な結果を生成する加算ユニットに対するさらなる入力を形成する。それにより、図7A〜図7Dで示される演算の簡略な概要において、CDOTREは2つの複素数乗算の実数部を累算し、CDOTIMは2つの複素数乗算の虚数部を累算し、CCDOTREは2つの複素共役乗算の実数部を累算し、CCDOTIMは2つの複素共役乗算の虚数部を累算する。
これらの命令のうちの2つの使用に続き(「通常の」複素数乗算が実施されているか、又は複素共役乗算かどうかに依存する)、初期のデータ精度に戻るため、図8に示されるような一連の演算を実行することができる。見て分かるように、レジスタZa、Zb、Zc、及びZd内の実数成分及び虚数成分は、個々の実数成分及び虚数成分の2つのセットをデスティネーション・レジスタZe及びZfにインターリーブするためにナロー・シフト演算にかけられ、次いで成分サイズをさらに削減し(そして元々のソース・レジスタの成分サイズに戻る)、1つのレジスタ内に最終的な複素数結果を与えるよう実数成分及び虚数成分をインターリーブするためにさらなるナロー・シフト演算が実施される。先の図面の事例のように、図7A〜図7D、及び図8で明示的に示される回路及び処理は、ベクトル・レジスタの全幅にわたって複製することができる。
本技法の利益は、次の2つの実例のコード・シーケンス(2)及び(3)を考慮することによって理解され得、それらは図7A〜図7Dで図示されるようなものなどの命令を使用する本技法にしたがって取られる手法と比較した場合の、そのような複素数ドット積処理の先行技術の実装形態を表している。本技法のCDOT命令によって、データ処理回路の計算スループットの著しい改善(2倍)を可能にし、一方で累算ヘッドルームを増加させている(16ビット入力に対して64ビットの累算器、すなわち4倍)ことが分かる。
実例の先行技術のコード・シーケンス(ARM(登録商標) NEON(商標)の、複素数ドット積の実装形態)(2):
...
.Loop:
...
//aとbから8つの複素数値をロード
ld2 {v0.8h,v1.8h},[aPtr],#32
ld2 {v2.8h,v3.8h},[bPtr],#32

smlal v4.4s,v0.4h,v2.4h //c.re+=a.reb.re
smlal v5.4s,v1.4h,v2.4h //c.im+=a.imb.re
smlsl v4.4s,v1.4h,v3.4h //c.re−=a.reb.im
smlal v5.4s,v0.4h,v3.4h //c.im+=a.reb.im
smlal2 v6.4s,v0.8h,v2.8h //c.re+=a.reb.re
smlal2 v7.4s,v1.8h,v2.8h //c.im+=a.imb.re
smlsl2 v6.4s,v1.8h,v3.8h //c.re−=a.reb.im
smlal2 v7.4s,v0.8h,v3.8h //c.im+=a.reb.im
...
.endLoop:
...
add v4.4s,v4.4s,v6.4s
add v5.4s,v5.4s,v7.4s
addv s4,v4.4s //実数に対して水平の累算
addv s5,v5.4s //虚数に対して水平の累算
sqshrn h4,s4,#16 //実数を16右シフト
sqshrn h5,s5,#16 //虚数を16右シフト
st2 {v4.h,v5.h}[0],[outPtr] //出力を格納
本技法による実例のコード・シーケンス(CDOTを使用する複素数ドット積について)(3):
...
.Loop:
...
//aとbから8つの複素数値をロード
ld1h z0.h,<Pn>/z,[aPtr,#0]
ld1h z2.h,<Pn>/z,[aPtr,#16]
ld1h z1.h,<Pn>/z,[bPtr,#0]
ld1h z3.h,<Pn>/z,[bPtr,#16]

cdotre z4.d,z0.h,z1.h //c.re+=a.reb.re
cdotim z5.d,z0.h,z1.h //c.im+=a.imb.re

cdotre z6.d,z2.h,z3.h //c.re+=a.reb.re
cdotim z7.d,z2.h,z3.h //c.im+=a.imb.re
...
.endLoop:
...
sqrshrnb z8.s,z4.d,#16
sqrshrnb z8.s,z6.d,#16
sqrshrnb z9.s,z5.d,#16
sqrshrnb z9.s,z7.d,#16

sqrshrnb z10.h,z8.s,#16
sqrshrnb z10.h,z9.s,#16

rev z11.h,<Pm>/m,z10.h
uzip1 z12.s,<Pm>/m,z11.s
str s12,[cPtr]
...
また本技法によって複素数ドット積演算をサポートする代替的な手法が提供され、図9A〜図9D及び図10を参照して次に議論する。ここで、上で議論した複素数ドット積命令とは対照的に、データの拡大は2倍だけであり、図9A〜図9Dの実例から分かるように、ドット積命令の結果はやはり結果レジスタ内でインターリーブされる(すなわち、交互する実数成分及び虚数成分)。この手法では、図9A〜図9Dから分かるように、個々のソース・レジスタから抽出された成分に対する演算の初期のセットは、乗算ユニット54によって実施される乗法演算だけである。図7A〜図7Dの実例のように、ある入力は負の値にされることに留意されたい。また、図9A〜図9Dの実例では命令は1つだけ定義され、すなわちSQRDCDOTであるが、4つの実例において示されるこの命令に対して4つの異なる応答が、命令内の追加的なパラメータ(すなわち、#0、#90、#180、及び#270)の使用から生じ、これらのパラメータは転置を表している、すなわちそれぞれのソース・レジスタの個々の実数成分及び虚数成分を結合する特定のやり方を示していることにも留意されたい。これらは複素数平面内の複素数の回転と類似していることから口語表現的には「回転」と称されるが、実施される転置は一般的には複素数平面内の回転に厳密に対応しないと理解することが重要である。これは、成分の対応する使用が「回転値」の4つの異なる値について第1及び第2のソース・レジスタから得られる図12をさらに参照して理解され得ることであるが、ここで第2のソース・レジスタについて使用される転置が実際に、回転パラメータ値によって与えられる回転角によって表される複素数の複素数平面内の回転に対応していることが分かるが、これは第1のソース・レジスタの場合に適用される転置についてはこの通りではなく、それゆえ一般的にこれらの転置が厳密には複素数平面内の回転ではないとコメントされる。乗算ユニット54の結果は、図9A〜図9Dに示される累算(加算)ユニット56に第1の入力の対を与え、この時デスティネーション・レジスタの個々の部分の既存の内容がさらなる入力(すなわち累算用)を与える。したがって、実数成分及び虚数成分の両方がこの手法にしたがって生成され、複素数ドット積結果を作るが、それにもかかわらず、これはなお生成された実数及び虚数成分が、実数及び虚数の入力成分のサイズの2倍となる、拡大演算である。上述の第1の手法のように、図9A〜図9DのSQRDCDOT命令の、命令の使用にはナロー・シフト演算の対が続くことができ、データを初期のデータ精度に戻し、実数及び虚数結果を1つのデスティネーション・レジスタにインターリーブすることができ、この時別のデスティネーション・レジスタ内の実数及び虚数成分は複素数成分の単一のセットを作り、インターリーブされた実数成分及び虚数成分は図10から分かるように単一のデスティネーション・レジスタ内に複素数値を形成する。先の図面の事例のように、図9A〜図9D、及び図10で明示的に示される回路及び処理は、ベクトル・レジスタの全幅にわたって複製することができる。
上で言及した「回転値」はまた本明細書で説明される他の複素数処理命令の多くに有用に適用することができ、次に説明する。例えば、複素数加算命令は、極表示で考えると、要素の対を相殺的なやり方で第1のソース・ベクトルの対応する要素に加算する前に、第2のソース・ベクトル内で複素数を90度又は270度回転させることができる。
複素数乗算加算命令は、2つの命令を結合することにより複素数に対して乗算加算演算の作成を可能とするためにオペランドの変形を実施する。変形は次のように実施される:(1)極形式で考えて、第2のソース・ベクトル内の複素数を、第1のソース・ベクトルの重複している実数成分を乗算する前に、0度、又は180度回転させる。(2)極形式で考えて、第2のソース・ベクトル内の複素数を、第1のソース・ベクトルの重複している虚数成分を乗算する前に、90度、又は270度回転させる。得られる積は次いでデスティネーション且つ加数ベクトルの対応する成分に加算される。これらの変形を使用して、2つの命令を有利に結合することができる。例えば、次のシーケンスを考える場合:
SQRDCMLAH Zda.S,Zn.S,Zm.S,#A
SQRDCMLAH Zda.S,Zn.S,Zm.S,#B
この時AとBとの意味のある結合は次の通りである:
A=0,B=90。この場合、Zn及びZm内の複素数の2つのベクトルは乗算され、その積がZda内の複素数に加算される。
A=0,B=270。この場合、Zn内の複素数の共役はZm内の複素数で乗算され、その積がZda内の複素数に加算される。
A=180,B=270。この場合、Zn及びZm内の複素数の2つのベクトルは乗算され、その積がZda内の複素数から減算される。
A=180,B=90。この場合、Zn内の複素数の共役はZm内の複素数で乗算され、その積がZda内の複素数から減算される。
上述のように、拡大複素数固定小数点命令は、複素数値の実数成分及び虚数成分をデインタリーブするが、一方で入力値よりも数値精度のより高い複素数結果の成分を生成するためにそれらを処理する(すなわち、それらが「拡大する」)。したがって、これらの命令は、複素数結果の両方の成分をデスティネーションにおいて隣接する要素に書き込むべくそれぞれの複素数の実数成分及び虚数成分を一緒に処理する他の複素数命令とは、殊に異なっている。以下の命令は複素数乗算加算の結果の拡大した成分を生成する際、有用である:
・SQDMLALBT:拡大した虚数
・SQDMLSLT:拡大した実数
・SQDMLALB:拡大した共役実数
・SQDMLSLBT:拡大した共役虚数
固定小数点複素数ドット積命令は、ソース・ベクトルを例えば8ビット、又は16ビットの符号付き整数複素数の対にデリミットする。それぞれの対の中で、第1のソース・ベクトル内の複素数値は第2のソース・ベクトル内の対応する複素数値で乗算され、得られる拡大した積は合計され、第1のソース・ベクトル内の複素数の対をオーバーラップさせる累算器の例えば32ビット又は64ビット要素に加算される。
これらの命令は、基本的なドット積の機能性を提供することに加え複素数値をデインタリーブする。したがって、ソース・ベクトルはインターリーブされた複素数の実数成分及び虚数成分を含むが、デスティネーション・ベクトルは拡大実数成分又は拡大虚数成分のいずれかの排他的セットを保持している。これらの命令についての回転値を使用すると次の通りである:
回転が0の場合、結果は複素数ドット積演算の実数成分を含むベクトルである。
回転が90の場合、結果は複素数ドット積演算の虚数成分を含むベクトルである。
回転が180の場合、結果は複素共役ドット積演算の実数成分を含むベクトルである。
回転が270の場合、結果は複素共役ドット積演算の虚数成分を含むベクトルである。
符号付き/符号なし整数複素数ドット積命令は、ソース・ベクトルを例えば8ビット、又は16ビットの符号付き/符号なし整数複素数の対にデリミットする。それぞれの対の中で、第1のソース・ベクトル内の複素数値は第2のソース・ベクトル内の対応する複素数値で乗算され、得られる拡大した積は合計され、第1のソース・ベクトル内の複素数の対をアラインする累算器の、例えば32ビット又は64ビット要素(デスティネーション要素)に加算される。
被乗数ソース・ベクトルから読み出された値は、乗算ステップが実施される前に回転パラメータに基づいて変形される。イミディエイトな回転値に依存して、ソース複素数の部分のうちの1つ又は両方が並べ替えられる、及び/又は負の値にされるか、ソース複素数の部分のいずれも並べ替えられない、及び/又は負の値にされない。これらの命令についての回転値を使用すると次の通りである:
回転が0の場合、第2のソースからの複素数の奇数番号の成分が負の値にされ、デスティネーション・ベクトルは複素数ドット積演算の実数成分を含む。
回転が90の場合、第2のソースからの複素数の実数部と虚数部がスワップされ、デスティネーション・ベクトルは複素数ドット積演算の虚数成分を含む。
回転が180の場合、変形は適用されず、デスティネーション・ベクトルは複素共役ドット積演算の実数成分を含む。
回転が270の場合、第2のソースからの複素数の偶数番号の成分が負の値にされ、次に第2のソースから導出されて得られるベクトルの実数部と虚数部がスワップされ、デスティネーション・ベクトルは複素共役ドット積演算の虚数成分を含む。
いくつかの実施例において、複素数演算は様々な複素数加算(すなわち、複素数減算を含む)であってもよく、これらの一部をサポートするためのデータ処理回路を図11A及び図11Bに概略的に図示している。繰り返しになるが、上で言及される「回転値」が利用され、図11Aの実例では#90の値が使用され、図11Bの実例では#270の値が使用される。図面で示されるように、これらの回転値(4つのセットである)は実際には2ビット値で表現されるよう提案され、これらの実例では00は#90に対応し、01は#270に対応していることに留意されたい。
図11A及び図11Bで示される実例は、複素数加算命令をサポートするよう提供されるデータ処理回路の表現であり、一実例において、命令セットはSQCADD又はUQADDのいずれかとして定義され(すなわち、飽和複素数加算命令の符号付き又は符号なしの変形例)、ここで飽和とは結果のそれぞれの成分内の結果値がラップ・アラウンドしないが、所定の最大値において飽和することを意味している。したがって、加算ユニット60は入力ソース・レジスタの個々の実数成分及び虚数成分から入力を得、(いくつかの入力は負の値にされることに留意されたい)これらを合計してデスティネーション・レジスタ内でインターリーブされる実数成分及び虚数成分を作る。回転パラメータの異なる値を使用して、第1及び第2のソース・レジスタ内の、すべての必要とされる複素数の実数成分及び虚数成分の結合の並べ替えを達成することができる。先の図面の事例のように、図11A及び図11Bで明示的に示される回路及び処理は、ベクトル・レジスタの全幅にわたって複製することができる。
さらなる実例において、SUBLTB及びADDLBT命令はインターリーブされた実数成分及び虚数成分に対して動作し、拡大命令である。これらの命令は、X及びYを複素数として複素数加算(X+jY)又は(X−jY)の結果の拡大した成分を生成する際、有用である:
ADDLBT:(X+jY)を計算する際の拡大した虚数値
SUBLBT:(X+jY)を計算する際の拡大した実数値
SUBLTB:(X−jY)を計算する際の拡大した虚数値
ADDLBT:(X−jY)を計算する際の拡大した実数値
図13は、一実施例の方法を実施する際に行われる一連のステップを示している。フローは、ステップ100から始まると考えることができるが、ここで受信された命令のシーケンス内の次の命令がデコードされる。次いでステップ102で、これが本技法の複素数命令かどうか判断される。そうではない場合、フローはステップ104に進みここでこれらの命令が適当に処理されるが、これは本開示が考慮するところではない。次にフローはステップ100に戻り、次の命令をデコードする。しかしながら、これが複素数命令である場合は、フローはステップ106に進み、ここで遭遇する複素数命令の特定のタイプに依存して、第1のソース・レジスタから実数成分及び/又は虚数成分が抽出され、ステップ108において第2のソース・レジスタから実数成分及び/又は虚数成分が抽出される。ステップ106及びステップ108の抽出は典型的には並列に実施され、図13では明瞭さのために、これを順次的な様式で説明するだけであることに留意すべきである。ステップ110において、これらの抽出された成分を使用して複素数演算が実施される。ステップ112はこれがインターリーブされる結果か、そうでないかを判断する。次にフローがステップ114に進む場合、実数及び虚数の結果成分が、デスティネーション・レジスタに適用される際にインターリーブされ、そうではなくこのフローがステップ116に進む場合は、この時実数の結果成分のセット又は虚数の結果成分のセットいずれかであるインターリーブされる結果が指定されたデスティネーション・レジスタに適用される。どのルートを取っても、次の命令をデコードするためにフローはステップ100に戻る。
図14は使用され得るシミュレータ実装形態を図示している。先に説明された実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本発明を実装している一方、本明細書で説明される実施例にしたがっており、コンピュータ・プログラムの使用を通じて実装される命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、しばしばシミュレータと称される。シミュレータ・コンピュータ・プログラムの種類としては、エミュレータ、仮想マシン、モデル、及びダイナミック・バイナリ変換器を含むバイナリ変換器が挙げられる。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティングシステム720を実行させ、シミュレータ・プログラム710をサポートする、ホスト・プロセッサ730上で実行することができる。いくつかの構成において、ハードウェアと提供される命令実行環境との間に複数のシミュレーションのレイヤ、及び/又は同一のホスト・プロセッサ上に設けられる複数の別個の命令実行環境があってもよい。歴史的には、適度な速度で実行するシミュレータ実装形態を提供するためにはパワーのあるプロセッサが要求されてきたが、そのような手法は一定の状況下で正当化されてもよく、例えば互換性又は再使用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。例えば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加的な機能性を伴う命令実行環境を提供すること、又は典型的には異なるハードウェア・アーキテクチャに関連付けられる命令実行環境を提供することができる。シミュレーションの概略はRobert Bedichek、「Some Efficient Architecture Simulation Techniques」、1990年冬季USENIX Conference、53〜63頁に示されている。
ある程度、その実施例は特定のハードウェア構築物又は特徴を参照して以前に説明されており、シミュレートされる実施例においては、等価な機能性が適切なソフトウェア構築物又は特徴によって提供され得る。例えば、特定の回路がコンピュータ・プログラム・ロジックとしてシミュレートされる実施例に実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアが、ソフトウェア・データ構造体としてシミュレートされた実施例に実装されてもよい。以前に説明された実施例において参照されるハードウェア要素の1つ又は複数がホスト・ハードウェアに存在する構成(例えば、ホスト・プロセッサ730)において、いくつかのシミュレートされる実施例は適切であればホスト・ハードウェアを利用することができる。
シミュレータ・プログラム710はコンピュータ可読記憶媒体(非一時的媒体であってもよい)に記憶することができ、ターゲット・コード700にプログラム・インターフェース(命令実行環境)を提供するが、ターゲット・コード700はシミュレータ・プログラム710によってモデリングされるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同一のものである。したがって、上述の複素数処理命令を含むターゲット・コード700のプログラム命令は、命令実行環境内からシミュレータ・プログラム710を使用して実行することができ、それによって、上で議論した装置のハードウェア特徴を実際には有していないホスト・コンピュータ730がこれらの特徴をエミュレートすることができる。
簡単で全体的な概要としては、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルに対してベクトル処理演算をサポートするための、装置、方法、プログラム、及び複素数処理命令が提供される。命令に応答して、データ項目の少なくとも1つの第1のセットが第1のソース・レジスタ内の交互する位置から抽出され、データ項目の少なくとも1つの第2のセットが第2のソース・レジスタ内の交互する位置から抽出され、ここで第1及び第2のソース・レジスタ内の連続データ項目は複素数の個々のセットの交互する実数成分及び虚数成分を含む。複素数成分の結果セットが、データ項目の2つのセットをオペランドとして使用して生成され、複素数成分の結果セットは、複素数の2つのセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの1つである。複素数成分の結果セットがデスティネーション・レジスタに適用される。
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び趣旨を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組合せが可能である。

Claims (25)

  1. 命令をデコードするための命令デコーダ回路と、
    入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路と
    を備え、
    前記命令デコーダ回路は複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、前記データ処理回路が、
    前記第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、前記第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、
    前記第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、前記第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、
    前記データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、前記複素数成分の結果セットは、前記複素数の第1のセット及び前記複素数の第2のセットに適用された前記複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、
    前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することと
    を行うように制御するための制御信号を生成する、装置。
  2. 前記複素数成分の結果セットは前記複素数結果の実数成分のセットである、請求項1に記載の装置。
  3. 前記複素数成分の結果セットは前記複素数結果の虚数成分のセットである、請求項1に記載の装置。
  4. 前記データ処理回路は前記制御信号に応答して前記複素数成分の結果セットを前記デスティネーション・レジスタ内の連続位置に適用する、請求項1から3までのいずれかに記載の装置。
  5. 前記複素数成分の結果セットのそれぞれの複素数成分は、前記データ項目の第1及び第2のセットのそれぞれのデータ項目より拡大している、請求項4に記載の装置。
  6. 前記データ処理回路は前記制御信号に応答して、前記複素数成分の結果セットを、複素数成分のさらなる結果セットでインターリーブされる前記デスティネーション・レジスタ内の交互する位置に適用し、
    前記複素数成分の結果セットが前記複素数結果の実数成分のセットである場合、前記複素数成分のさらなる結果セットは前記複素数結果の虚数成分のセットであり、
    前記複素数成分の結果セットが前記複素数結果の虚数成分のセットである場合、前記複素数成分のさらなる結果セットは前記複素数結果の実数成分のセットである、
    請求項1から3までのいずれかに記載の装置。
  7. 前記複素数処理命令は、前記データ項目の第1のセットが前記第1のソース・レジスタの奇数番号位置又は偶数番号位置から抽出されるかどうかをさらに指定し、前記複素数処理命令は、前記データ項目の第2のセットが前記第2のソース・レジスタの奇数番号位置又は偶数番号位置から抽出されるかどうかをさらに指定する、請求項1から6までのいずれかに記載の装置。
  8. 前記複素数処理命令は、前記第1のソース・レジスタ及び前記第2のソース・レジスタのうちの少なくとも1つについての複製インデックスをさらに指定し、前記データ処理回路はさらに前記制御信号に応答して、前記第1のソース・レジスタ及び前記第2のソース・レジスタのうちの前記少なくとも1つにおける前記複製インデックスによって示される複素数のソース・セットを複製する、請求項1から7までのいずれかに記載の装置。
  9. 前記複素数のソース・セットの複製は、前記複素数のソース・セットの複数回の複製を含む、請求項8に記載の装置。
  10. 前記第1のソース・レジスタから抽出される前記データ項目の少なくとも1つの第1のセットは、前記データ項目の第1のセット及びデータ項目の第3のセットを含み、
    前記データ項目の第1のセットが前記複素数の第1のセットの実数成分である場合、前記データ項目の第3のセットは前記複素数の第1のセットの虚数成分であり、前記データ項目の第1のセットが前記複素数の第1のセットの虚数成分である場合、前記データ項目の第3のセットは前記複素数の第1のセットの実数成分であり、
    前記データ処理回路は前記制御信号にさらに応答して、さらに前記データ項目の第3のセットをオペランドとして使用して、前記複素数成分の結果セットを生成する、請求項1から9までのいずれかに記載の装置。
  11. 前記第2のソース・レジスタから抽出される前記データ項目の少なくとも1つの第2のセットは、前記データ項目の第2のセット及びデータ項目の第4のセットを含み、
    前記データ項目の第2のセットが前記複素数の第2のセットの実数成分である場合、前記データ項目の第4のセットは前記複素数の第2のセットの虚数成分であり、前記データ項目の第2のセットが前記複素数の第2のセットの虚数成分である場合、前記データ項目の第4のセットは前記複素数の第2のセットの実数成分であり、
    前記データ処理回路は前記制御信号にさらに応答して、さらに前記データ項目の第4のセットをオペランドとして使用して、前記複素数成分の結果セットを生成する、請求項1から10までのいずれかに記載の装置。
  12. 前記複素数演算は、複素数ドット積演算であり、前記データ処理回路は前記制御信号に応答して、前記複素数の第1のセットの実数成分−虚数成分対の対のセット、並びに前記複素数の第2のセットの実数成分−虚数成分対の対のセット、の部分積から前記複素数成分の結果セットを累算する累算回路を備える、請求項10又は11に記載の装置。
  13. 前記複素数演算は複素数乗算演算を含む、請求項1から11までのいずれかに記載の装置。
  14. 前記複素数演算は複素数加算演算、又は複素数減算演算である、請求項1から11までのいずれかに記載の装置。
  15. 前記複素数処理命令がさらに転置パラメータを指定し、前記データ処理回路が前記制御信号に応答して、前記複素数の第1及び第2のセットへの前記複素数演算の適用に先立って前記複素数の第1及び第2のセットのうちの少なくとも1つに対して転置演算を適用する、請求項1から14までのいずれかに記載の装置。
  16. 前記転置演算は、
    少なくとも1つの前記複素数の第1のセット及び前記複素数の第2のセットにおいて、
    実数成分の虚数成分での置換、
    虚数成分の実数成分での置換、
    実数成分と虚数成分の交換、
    実数成分を負の値にすること、及び
    虚数成分を負の値にすること
    のうちの少なくとも1つを含む、請求項15に記載の装置。
  17. 前記複素数処理命令は即値として前記転置パラメータを指定する、請求項15又は16に記載の装置。
  18. 前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することは、前記複素数成分の結果セットを前記デスティネーション・レジスタに格納することを含む、請求項1から17までのいずれかに記載の装置。
  19. 前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することは、前記複素数成分の結果セットを前記デスティネーション・レジスタの内容で累算することを含む、請求項1から18までのいずれかに記載の装置。
  20. 前記デスティネーション・レジスタは前記第1のソース・レジスタ及び前記第2のソース・レジスタのうちの1つである、請求項1から19までのいずれかに記載の装置。
  21. 前記複素数演算は飽和演算である、請求項1から20までのいずれかに記載の装置。
  22. データ処理装置を動作させる方法であって、
    命令をデコードするステップと、
    入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用するステップと、
    複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、前記データ処理装置のデータ処理回路が、
    前記第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、前記第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、
    前記第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、前記第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、
    前記データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、前記複素数成分の結果セットは、前記複素数の第1のセット及び前記複素数の第2のセットに適用された前記複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、
    前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することと
    を行うように制御するための制御信号を生成するステップと
    を含む、方法。
  23. 命令をデコードする手段と、
    入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用する手段と、
    複素数演算、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置内のデータ処理が、
    前記第1のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、前記第1のソース・レジスタ内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、
    前記第2のソース・レジスタ内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、前記第2のソース・レジスタ内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、
    前記データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、前記複素数成分の結果セットは、前記複素数の第1のセット及び前記複素数の第2のセットに適用された前記複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、
    前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することと
    を行うための手段を制御するための制御信号を生成する手段と
    を備える、装置。
  24. 命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
    命令をデコードするための命令デコード・プログラム・ロジックと、
    入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトル構造体への前記命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックと
    を含み、
    前記命令デコード・プログラム・ロジックは複素数演算、第1のソース・データ構造体、第2のソース・データ構造体、及びデスティネーション・データ構造体を指定する複素数処理命令に応答して、前記データ処理プログラム・ロジックが、
    前記第1のソース・データ構造体内の交互する位置からデータ項目の少なくとも1つの第1のセットを抽出することであって、前記第1のソース・データ構造体内の連続データ項目は複素数の第1のセットの交互する実数成分及び虚数成分を含む、抽出することと、
    前記第2のソース・データ構造体内の交互する位置からデータ項目の少なくとも1つの第2のセットを抽出することであって、前記第2のソース・データ構造体内の連続データ項目は複素数の第2のセットの交互する実数成分及び虚数成分を含む、抽出することと、
    前記データ項目の第1及び第2のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、前記複素数成分の結果セットは、前記複素数の第1のセット及び前記複素数の第2のセットに適用された前記複素数演算の複素数結果の実数部及び虚数部のうちの1つである、生成することと、
    前記複素数成分の結果セットを前記デスティネーション・データ構造体に適用することと
    を行うように制御するための制御信号を生成する、コンピュータ・プログラム。
  25. 請求項24に記載の前記コンピュータ・プログラムを非一時的に記憶するコンピュータ可読記憶媒体。
JP2020501122A 2017-07-20 2018-07-02 レジスタベースの複素数処理 Active JP7343473B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1711700.3A GB2564696B (en) 2017-07-20 2017-07-20 Register-based complex number processing
GB1711700.3 2017-07-20
PCT/GB2018/051851 WO2019016507A1 (en) 2017-07-20 2018-07-02 COMPLEX NUMBER PROCESSING BASED ON REGISTERS

Publications (2)

Publication Number Publication Date
JP2020527795A true JP2020527795A (ja) 2020-09-10
JP7343473B2 JP7343473B2 (ja) 2023-09-12

Family

ID=59771743

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020501122A Active JP7343473B2 (ja) 2017-07-20 2018-07-02 レジスタベースの複素数処理

Country Status (9)

Country Link
US (1) US11210090B2 (ja)
EP (1) EP3655851B1 (ja)
JP (1) JP7343473B2 (ja)
KR (1) KR102586259B1 (ja)
CN (1) CN110914800B (ja)
GB (1) GB2564696B (ja)
IL (1) IL271635B2 (ja)
TW (1) TWI773783B (ja)
WO (1) WO2019016507A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018174936A1 (en) * 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatuses for tile matrix multiplication and accumulation
GB2564696B (en) 2017-07-20 2020-02-05 Advanced Risc Mach Ltd Register-based complex number processing
CN118012506B (zh) * 2024-04-08 2024-06-07 龙芯中科技术股份有限公司 二进制翻译优化方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5579253A (en) * 1994-09-02 1996-11-26 Lee; Ruby B. Computer multiply instruction with a subresult selection option
JP2002527808A (ja) * 1998-10-09 2002-08-27 ボプス インコーポレイテッド マンアレイアーキテクチャにおける複素数乗算及び高速フーリエ変換(fft)の効率的な実現
US20050193185A1 (en) * 2003-10-02 2005-09-01 Broadcom Corporation Processor execution unit for complex operations
JP2009505214A (ja) * 2005-08-11 2009-02-05 コアソニック アーベー 短い複素乗算器及び独立ベクトル・ロード・ユニットを含むクラスタードsimdマイクロ・アーキテクチャを有するプログラマブル・デジタル信号プロセッサ
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7376812B1 (en) * 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US7660840B2 (en) * 2003-09-29 2010-02-09 Broadcom Corporation Method, system, and computer program product for executing SIMD instruction for flexible FFT butterfly
GB2411976B (en) * 2003-12-09 2006-07-19 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2411975B (en) * 2003-12-09 2006-10-04 Advanced Risc Mach Ltd Data processing apparatus and method for performing arithmetic operations in SIMD data processing
GB2409066B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US9557994B2 (en) * 2004-07-13 2017-01-31 Arm Limited Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
CN101825998B (zh) * 2010-01-22 2012-09-05 龙芯中科技术有限公司 向量复数乘法运算的处理方法及相应的装置
US20120166511A1 (en) * 2010-12-22 2012-06-28 Hiremath Chetan D System, apparatus, and method for improved efficiency of execution in signal processing algorithms
KR20120077164A (ko) * 2010-12-30 2012-07-10 삼성전자주식회사 Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
CN102937967B (zh) * 2012-10-11 2018-02-27 南京中兴新软件有限责任公司 数据冗余实现方法及装置
CN103873522B (zh) * 2012-12-14 2018-07-06 联想(北京)有限公司 一种电子设备及应用于电子设备的文件分块方法
US9880845B2 (en) * 2013-11-15 2018-01-30 Qualcomm Incorporated Vector processing engines (VPEs) employing format conversion circuitry in data flow paths between vector data memory and execution units to provide in-flight format-converting of input vector data to execution units for vector processing operations, and related vector processor systems and methods
US20170177362A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Adjoining data element pairwise swap processors, methods, systems, and instructions
GB2548908B (en) * 2016-04-01 2019-01-30 Advanced Risc Mach Ltd Complex multiply instruction
US11023231B2 (en) * 2016-10-01 2021-06-01 Intel Corporation Systems and methods for executing a fused multiply-add instruction for complex numbers
GB2564696B (en) 2017-07-20 2020-02-05 Advanced Risc Mach Ltd Register-based complex number processing

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5579253A (en) * 1994-09-02 1996-11-26 Lee; Ruby B. Computer multiply instruction with a subresult selection option
JP2002527808A (ja) * 1998-10-09 2002-08-27 ボプス インコーポレイテッド マンアレイアーキテクチャにおける複素数乗算及び高速フーリエ変換(fft)の効率的な実現
US20050193185A1 (en) * 2003-10-02 2005-09-01 Broadcom Corporation Processor execution unit for complex operations
JP2009505214A (ja) * 2005-08-11 2009-02-05 コアソニック アーベー 短い複素乗算器及び独立ベクトル・ロード・ユニットを含むクラスタードsimdマイクロ・アーキテクチャを有するプログラマブル・デジタル信号プロセッサ
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations

Also Published As

Publication number Publication date
TWI773783B (zh) 2022-08-11
IL271635B1 (en) 2023-10-01
CN110914800B (zh) 2023-12-05
KR102586259B1 (ko) 2023-10-10
GB2564696A (en) 2019-01-23
GB2564696B (en) 2020-02-05
TW201908964A (zh) 2019-03-01
US11210090B2 (en) 2021-12-28
CN110914800A (zh) 2020-03-24
GB201711700D0 (en) 2017-09-06
KR20200026992A (ko) 2020-03-11
IL271635B2 (en) 2024-02-01
WO2019016507A1 (en) 2019-01-24
JP7343473B2 (ja) 2023-09-12
EP3655851A1 (en) 2020-05-27
IL271635A (en) 2020-02-27
EP3655851B1 (en) 2022-12-14
US20210026628A1 (en) 2021-01-28

Similar Documents

Publication Publication Date Title
US8255446B2 (en) Apparatus and method for performing rearrangement and arithmetic operations on data
JP2020508513A (ja) データ処理装置における拡大算術計算
JP7148526B2 (ja) データ処理装置におけるベクトルによる要素演算
JP7324754B2 (ja) ベクトル・キャリー付き加算命令
JP7343473B2 (ja) レジスタベースの複素数処理
JP2020508512A (ja) データ処理装置における乗累算
JP7186212B2 (ja) データ処理装置におけるベクトル・インタリーブ
US20240319999A1 (en) A processing apparatus, method and computer program for a vector combining instruction
TW202305588A (zh) 用於向量組合指令之處理設備、方法、及電腦程式
TW202349232A (zh) 用於執行外積操作之技術
TW202411860A (zh) 多外積指令
GB2617829A (en) Technique for handling data elements stored in an array storage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220720

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221020

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230207

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230508

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230831

R150 Certificate of patent or registration of utility model

Ref document number: 7343473

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150