CN110914800A - 基于寄存器的复数处理 - Google Patents

基于寄存器的复数处理 Download PDF

Info

Publication number
CN110914800A
CN110914800A CN201880046750.9A CN201880046750A CN110914800A CN 110914800 A CN110914800 A CN 110914800A CN 201880046750 A CN201880046750 A CN 201880046750A CN 110914800 A CN110914800 A CN 110914800A
Authority
CN
China
Prior art keywords
complex
components
data items
real
imaginary
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
CN201880046750.9A
Other languages
English (en)
Other versions
CN110914800B (zh
Inventor
埃里克·比斯康迪
姆布·埃约勒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
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 ARM Ltd filed Critical ARM Ltd
Publication of CN110914800A publication Critical patent/CN110914800A/zh
Application granted granted Critical
Publication of CN110914800B publication Critical patent/CN110914800B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/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

提供了设备、方法、程序及复数处理指令,以支持对输入数据向量的向量处理运算,输入数据向量包括在输入数据向量中的相应位置处的多个输入数据项。响应于指令,从第一源寄存器中的交替位置提取至少一个第一组数据项,并且从第二源寄存器中的交替位置提取至少一个第二组数据项,其中在第一源寄存器和第二源寄存器中的连续数据项包括相应组复数的交替实部和虚部。使用两组数据项作为操作数,来产生结果复数分量组,并且该结果复数分量组是应用于两组复数的复数运算的复数结果的实部和虚部中的一者。将该结果复数分量组应用于目的地寄存器。

Description

基于寄存器的复数处理
技术领域
本公开涉及一种数据处理设备。更具体而言,涉及在数据处理设备中执行复数运算。
背景技术
可能需要数据处理设备在各种情况下执行复数计算。一些数据处理系统支持向量指令的处理,其中由向量处理指令来指定的源操作数或结果值是包括多个数据项的向量,该多个数据项要并行执行指定的数据处理运算。复数的两部结构(即,其实部和虚部)意味着提供可以向量化方式执行复数运算的数据处理系统并非是微不足道的。
发明内容
在一个示例实施例中,有一种设备,包括:指令解码器电路,用于解码指令;及数据处理电路,用于将由指令所指定的向量处理运算选择性地应用于输入数据向量,输入数据向量包括在输入数据向量中的相应位置处的多个输入数据项,其中该指令解码器电路是响应于指定复数运算、第一源寄存器、第二源寄存器及目的地寄存器的复数处理指令,来产生控制信号,以控制该数据处理电路进行以下操作:从该第一源寄存器中的交替位置提取至少一个第一组数据项,其中在该第一源寄存器中的连续数据项包括一第一组复数的交替实数和虚数分量;从该第二源寄存器中的交替位置提取至少一个第二组数据项,其中在该第二源寄存器中的连续数据项包括一第二组复数的交替实数和虚数分量;使用该第一组数据项和该第二组数据项作为操作数,来产生一结果复数分量组,其中该结果复数分量组是应用于该第一组复数和该第二组复数的该复数运算的复数结果的实部和虚部中的一者;及将该结果复数分量组应用于该目的地寄存器。
在另一示例实施例中,有一种操作数据处理设备的方法,包括以下步骤:解码指令;将由指令所指定的向量处理运算选择性地应用于输入数据向量,输入数据向量包括在输入数据向量中的相应位置处的多个输入数据项;响应于指定复数运算、第一源寄存器、第二源寄存器及目的地寄存器的复数处理指令,来产生控制信号,以控制该数据处理设备的数据处理电路进行以下操作:从该第一源寄存器中的交替位置提取至少一个第一组数据项,其中在该第一源寄存器中的连续数据项包括一第一组复数的交替实数和虚数分量;从该第二源寄存器中的交替位置提取至少一个第二组数据项,其中在该第二源寄存器中的连续数据项包括一第二组复数的交替实数和虚数分量;使用该第一组数据项和该第二组数据项作为操作数,来产生一结果复数分量组,其中该结果复数分量组是应用于该第一组复数和该第二组复数的该复数运算的复数结果的实部和虚部中的一者;及将该结果复数分量组应用于该目的地寄存器。
在另一示例实施例中,有一种设备,包括:用于解码指令的单元;用于将由指令所指定的向量处理运算选择性地应用于输入数据向量的单元,输入数据向量包括在输入数据向量中的相应位置处的多个输入数据项;用于响应于指定复数运算、第一源寄存器、第二源寄存器及目的地寄存器的复数处理指令,来产生控制信号的单元,以控制在数据处理设备中的用于数据处理的单元进行以下操作:从该第一源寄存器中的交替位置提取至少一个第一组数据项,其中在该第一源寄存器中的连续数据项包括一第一组复数的交替实数和虚数分量;从该第二源寄存器中的交替位置提取至少一个第二组数据项,其中在该第二源寄存器中的连续数据项包括一第二组复数的交替实数和虚数分量;使用该第一组数据项和该第二组数据项作为操作数,来产生一结果复数分量组,其中该结果复数分量组是应用于该第一组复数和该第二组复数的该复数运算的复数结果的实部和虚部中的一者;及将该结果复数分量组应用于该目的地寄存器。
在另一示例实施例中,有一种用于控制主机数据处理设备以提供指令执行环境的计算机程序,包括:指令解码程序逻辑,用于解码指令;及数据处理程序逻辑,用于将由指令所指定的向量处理运算选择性地应用于输入数据向量结构,输入数据向量结构包括在该输入数据向量结构中的相应位置处的多个输入数据项,其中该指令解码程序逻辑是响应于指定复数运算、第一源数据结构、第二源数据结构及目的地数据结构的复数处理指令,来产生控制信号,以控制该数据处理程序逻辑进行以下操作:从该第一源数据结构中的交替位置提取至少一个第一组数据项,其中在该第一源数据结构中的连续数据项包括一第一组复数的交替实数和虚数分量;从该第二源数据结构中的交替位置提取至少一个第二组数据项,其中在该第二源数据结构中的连续数据项包括第二组复数的交替实数和虚数分量;使用该第一组数据项和该第二组数据项作为操作数,来产生结果复数分量组,其中该结果复数分量组是应用于该第一组复数和该第二组复数的该复数运算的复数结果的实部和虚部中的一者;及将该结果复数分量组应用于该目的地数据结构。
附图说明
将仅经由举例的方式,并参考如附图所示的本技术的实施例,来进一步描述本技术,其中:
图1示意性图示在一个实施例中的数据处理设备;
图2示意性图示在一个实施例中的执行非加宽复数运算的数据处理电路;
图3示意性图示在一个实施例中的执行加宽复数运算的数据处理电路;
图4示意性图示在一个实施例中的在复数运算之前进行复制运算的数据处理电路;
图5示出在响应于四种带符号乘法复数指令的实施例中的数据处理电路的运算;
图6图示在使用诸如图5中所示的复数指令之后,使用缩小移位运算,以产生最终组的向量化复数;
图7A-7D示意性图示在一个实施例中的响应于四种不同类型的复数点积指令的数据处理电路;
图8示出在使用诸如图7A-7D中所示的复数点积指令之后,在一个实施例中执行的一系列运算,以返回到初始数据精度;
图9A-9D示意性图示在一个实施例中的响应于四种不同类型的非加宽复数点积指令的数据处理电路;
图10示出在一个实施例中执行的一系列运算,以便在执行诸如图9A-9D所示的指令之后,返回到初始数据精度;
图11A和11B示意性图示在一个实施例中用于支持复数加法指令的数据处理电路,指令进一步包括换位参数;
图12示出在一个实施例中的响应于四个相应换位参数而执行的一组四个换位;
图13示出当执行一个实施例的方法时所采取的一系列步骤;及
图14示意性示出在一个实施例中提供模拟器实现的系统的部件。
具体实施方式
至少一些实施例提供了一种设备,包括:指令解码器电路,用于解码指令;及数据处理电路,用于将由指令所指定的向量处理运算选择性地应用于输入数据向量,输入数据向量包括在输入数据向量中的相应位置处的多个输入数据项,其中该指令解码器电路是响应于指定复数运算、第一源寄存器、第二源寄存器及目的地寄存器的复数处理指令,来产生控制信号,以控制该数据处理电路进行以下操作:从该第一源寄存器中的交替位置提取至少一个第一组数据项,其中在该第一源寄存器中的连续数据项包括一第一组复数的交替实数和虚数分量;从该第二源寄存器中的交替位置提取至少一个第二组数据项,其中在该第二源寄存器中的连续数据项包括一第二组复数的交替实数和虚数分量;使用该第一组数据项和该第二组数据项作为操作数,来产生结果复数分量组,其中该结果复数分量组是应用于该第一组复数和该第二组复数的该复数运算的复数结果的实部和虚部中的一者;及将该结果复数分量组应用于该目的地寄存器。
可能需要现代数据处理系统在各种情况下进行复数算术计算,例如在数字通信、雷达系统及光学系统中,仅举几个例子。此外,能够以向量化方式处理数据(即,将由单个指令所并行指定的数据处理运算应用于在数据向量内的多个数据项)的数据处理系统可以在处理量和处理效率方面带来优势。然而,由于数种原因,将向量处理技术应用于复数数据并非是微不足道的。首先,复数的固有结构(实数和虚数分量)意味着必须将数据处理系统配置以正确处理在向量中的更大组数据项内的每个单独的复数数据项的这些相应部分,并且此外输入数据的向量化性质增加了对能将两组复数的相应分量在给定复数运算中汇集在一起的方式的进一步限制。本技术提供了一种方法,其中数据处理电路从在每个源寄存器中的交替位置提取一组数据项,也就是说,在认识到源寄存器保存一组连续数据项的地方,此处那些数据项在一组复数的实数分量和虚数分量之间交替,并且将实数分量和虚数分量配对,以形成单独的复数。因此,数据处理电路因此能够例如从源寄存器拉出实数分量(尽管应注意的是,在其他示例中,其可同样地提取虚数分量作为替代或补充)。因此,数据处理电路然后可以将所需的复数运算应用于从相应源寄存器提取的分量,以产生结果复数分量组,其中该结果复数分量组是复数运算的复数结果的一组实数分量或虚部。注意到,这不是要排除也产生的另一组复数分量(即,可产生一组复数的实部和虚部两者),但是在一些实施例中,仅产生一个或另一个。然后将结果复数分量组应用于在复数处理指令中所指定的目的地寄存器,其中此应用可以采用多种形式。例如,可将结果组简单存储在目的地寄存器中,或者可将结果组用目的地寄存器的现有内容来累加(通过各种数学方法)。
如上所述,结果复数分量组可取决于所定义的特定复数处理指令而变化,但是在一些实施例中,结果复数分量组是复数结果的一组实数分量。同样,在其他实施例中,结果复数分量组是复数结果的一组虚数分量。
可将响应于复数处理指令而由数据处理电路所产生的结果复数分量组以各种方式应用于目的地寄存器,但是在一些实施例中,数据处理电路是响应于控制信号,来将结果复数分量组应用于目的地寄存器中的连续位置中。因此,在结果复数分量组是复数运算的复数结果的实部和虚部的一者的情况,这意味着目的地寄存器的内容与第一和第二源寄存器的内容是格式不同(即,在第一和第二源寄存器保存一组复数的连续对实数和虚数分量的情况),目的地寄存器仅保存连续实数分量或连续虚数分量。这使得能界定大量的复数运算,但仍然能够在向量处理配置内处理结果。
事实上,在一些这样的实施例中,结果复数分量组的每个复数分量皆比第一和第二组数据项的每个数据项更宽。因此,对结果复数分量组的分量的此扩大意味着尽管在向量处理环境内运算,结果复数分量组的精度仍可更佳地保留,否则其可能需要对结果组的复数分量进行显著截断,以便使它们适合进入它们相应的向量处理通道。因此应理解的是,本技术提供了一种方法,其中例如结果组复数的实数分量和虚数分量可由两个单独的指令来确定,而之后有机会将这些分量重新组合为连续组实数和虚数复数对。
尽管如此,尽管在上述的一些实施例中,数据处理电路可以将结果复数分量组应用于目的地寄存器中的连续位置中,但是在一些实施例中,数据处理电路产生结果组复数实数分量和相应的结果组复数虚数分量,而然后可将这些在它们的应用中交错到目的地寄存器,从而得到连续的实数和虚数分量对(形成连续组复数)。因此,在一些实施例中,数据处理电路是响应于控制信号,以将结果复数分量组应用于与另一结果复数分量组交错的目的地寄存器中的交替位置中,其中当结果复数分量组是复数结果的一组实数分量时,另一结果复数分量组是复数结果的一组虚数分量,及其中当结果复数分量组是复数结果的一组虚数分量时,另一结果复数分量组是复数结果的一组实数分量。
可将数据处理电路从在第一和第二源寄存器中的它们相应交替位置提取第一组数据项和第二组数据项的方式不同地界定,并且实际上在一些实施例中可不同地对其控制,例如在一些实施例中,复数处理指令进一步指定是否从在第一源寄存器中的奇数位置或偶数位置提取第一组数据项,及其中复数处理指令进一步指定是否从在第二源寄存器中的奇数位置或偶数位置提取第二组数据项。“奇数”和“偶数”位置在本文还可以称为“底部”和“顶部”位置。
在提取第一和第二组数据项以便执行复数运算之前,还可以进一步将数据处理应用于第一源寄存器和第二源寄存器中的至少一者,并且在一些实施例中,复数处理指令进一步指定用于第一源寄存器和第二源寄存器中的至少一者的复制索引,及其中数据处理电路是进一步响应于控制信号,以将由复制索引所指示的一源复数组复制在第一源寄存器和第二源寄存器中的至少该者中。因此,对第一和第二源寄存器中的至少一者的“索引”使得程序员能够识别保存在相应寄存器中的数据子集,而然后可再现该子集,使得对第一和第二数据组的提取然后使用所再现的该子集。例如,取决于所界定的索引的性质,复制索引可指定向量寄存器的预定部分的两半中的一个,而然后该复制使得该指定的一半被复制到在每个预定部分的另一半中。仅举一个特定示例,在将复制索引应用于向量寄存器的单元长度是128位并且复制索引指定此单元的上半部分的情况,并且在本技术已经使用该128位空间来存储四个连续的32位复数分量(即,两个64位复数)的情况,则复制将导致所识别的64位复数被复制到该128位单元内的相邻64位空间中。该运算跨向量寄存器的整个宽度重复。
虽然上面示例给出了正在执行的单个复制,但是在一些实施例中,对一源复数组的复制包括多于对一源复数组的单个复制。例如,在复制索引指定向量的给定单元的四分之一的情况,则可将该四分之一复制三次,以便填充整个单元。除了上面的128位单元的示例,但是在复数分量每个都是16位的示例中,那么这将导致所识别的32位复数(16位实数和16位虚数分量)被复制到该128位单元上的其他三个32位部分。可将这样的“索引”应用于本文所述的任何指令。
虽然在一些实施例中从第一源寄存器提取仅单个组数据项(表示在第一源寄存器中的一组复数的一组实数分量或一组虚数分量),但是在一些实施例中,提取实数和虚数分量两者。因此,在这些实施例中,从第一源寄存器提取的至少一个第一组数据项包括第一组数据项和第三组数据项,其中当第一组数据项是第一组复数的实数分量时,第三组数据项是第一组复数的虚数分量,并且当第一组数据项是第一组复数的虚数分量时,第三组数据项是第一组复数的实数分量,及其中数据处理电路是进一步响应于控制信号,来进一步使用第三组数据项作为操作数,来产生结果复数分量组。因此,数据处理电路然后具有第一组复数的实数和虚数分量两者,以参与复数运算,此适用于所界定的特定复数处理指令(及因此的复数运算)。
同样在一些实施例中,从第二源寄存器提取的至少一个第二组数据项包括第二组数据项和第四组数据项,其中当第二组数据项是第二组复数的实数分量时,第四组数据项是第二组复数的虚数分量,并且当第二组数据项是第二组复数的虚数分量时,第四组数据项是第二组复数的实数分量,及其中数据处理电路是进一步响应于控制信号,来进一步使用第四组数据项作为操作数,来产生结果复数分量组。
复数运算可采取各种形式,但是在一些实施例中,复数运算是复数点积运算,及其中数据处理电路包括累加电路,该累加电路响应于控制信号,来从第一组复数的实数和虚数分量对中的一组对与第二组复数的实数和虚数分量对中的一组对的部分乘积累加结果复数分量组。在一些实施例中,复数运算包括复数乘法运算。在一些实施例中,复数运算是复数加法运算。在一些实施例中,复数运算是复数减法运算。
本技术进一步提供了,可在复数运算之前,执行对第一和第二组复数中的一个或两个的分量的额外操纵,因为已经发现到,这使得能特别有效地确定所需的复数结果,否则其可能例如需要预先执行额外指令,以便操纵第一和第二源寄存器中的至少一者的内容。因此,一些实施例提供了复数处理指令进一步指定换位参数,并且数据处理电路是响应于控制信号,以在对第一和第二组复数应用复数运算之前,对第一和第二组复数中的至少一者应用换位运算。
可将应用于第一和第二组复数中的至少一者的该换位运算不同地界定。其可称为“旋转”,并且实际上在一些情况下可对应于在复数平面上围绕原点表示的复数的旋转,但是本技术不限于对应于这种“真正”旋转的换位,并且在一些实施例中,换位运算包括以下项目中的至少一者:在至少一个第一组复数和第二组复数中,用虚数分量代替实数分量;用实数分量代替虚数分量;交换实数和虚数分量;取反实数分量;及取反虚数分量。
可以各种方式提供换位参数,但是在一些实施例中,复数处理指令将换位参数指定为立即值。尽管如上所述,换位并不总是直接对应于在复数平面上的真正旋转,但是换位参数有时在本文称为“旋转值”,并且在一些实施例中,可采用一组四个值中的一个,其(类似于复数平面旋转示例)可标记为0、90、180、及270,参考在复数平面上旋转四分之一圈的旋转角度。
如上所述,可以各种方式将结果复数分量组应用于目的地寄存器,但是在一些实施例中,将结果复数分量组应用于目的地寄存器包括将结果复数分量组存储在目的地寄存器中。在其他实施例中,将结果复数分量组应用于目的地寄存器包括:将结果复数分量组与目的地寄存器的内容进行累加。
虽然可将目的地寄存器指定为与第一和第二源寄存器两者不同的寄存器,但是在一些实施例中,可界定“破坏性”运算,其中目的地寄存器是第一源寄存器和第二源寄存器中的一者。
数据处理电路处理对于界定为保存结果值的存储器而该结果值变得太大的情况的方式可采取各种形式。例如,该值可以环绕(即,超过最大值返回到0),而在一些实施例中,复数运算是饱和运算(即,换句话说,超过最大值,结果被保存为该最大值)。
至少一些实施例提供了一种操作数据处理设备的方法,包括以下步骤:解码指令;将由指令所指定的向量处理运算选择性地应用于输入数据向量,输入数据向量包括在输入数据向量中的相应位置处的多个输入数据项;响应于指定复数运算、第一源寄存器、第二源寄存器及目的地寄存器的复数处理指令,来产生控制信号,以控制该数据处理设备的数据处理电路进行以下操作:从该第一源寄存器中的交替位置提取至少一个第一组数据项,其中在该第一源寄存器中的连续数据项包括一第一组复数的交替实数和虚数分量;从该第二源寄存器中的交替位置提取至少一个第二组数据项,其中在该第二源寄存器中的连续数据项包括一第二组复数的交替实数和虚数分量;使用该第一组数据项和该第二组数据项作为操作数,来产生一结果复数分量组,其中该结果复数分量组是应用于该第一组复数和该第二组复数的该复数运算的复数结果的实部和虚部中的一者;及将该结果复数分量组应用于该目的地寄存器。
至少一些实施例提供了一种设备,包括:用于解码指令的单元;用于将由指令所指定的向量处理运算选择性地应用于输入数据向量的单元,输入数据向量包括在输入数据向量中的相应位置处的多个输入数据项;用于响应于指定复数运算、第一源寄存器、第二源寄存器及目的地寄存器的复数处理指令,来产生控制信号的单元,以控制在数据处理设备中的用于数据处理的单元进行以下操作:从该第一源寄存器中的交替位置提取至少一个第一组数据项,其中在该第一源寄存器中的连续数据项包括一第一组复数的交替实数和虚数分量;从该第二源寄存器中的交替位置提取至少一个第二组数据项,其中在该第二源寄存器中的连续数据项包括一第二组复数的交替实数和虚数分量;使用该第一组数据项和该第二组数据项作为操作数,来产生一结果复数分量组,其中该结果复数分量组是应用于该第一组复数和该第二组复数的该复数运算的复数结果的实部和虚部中的一者;及将该结果复数分量组应用于该目的地寄存器。
至少一些实施例提供了一种用于控制主机数据处理设备以提供指令执行环境的计算机程序,包括:指令解码程序逻辑,用于解码指令;及数据处理程序逻辑,用于将由指令所指定的向量处理运算选择性地应用于输入数据向量结构,输入数据向量结构包括在该输入数据向量结构中的相应位置处的多个输入数据项,其中该指令解码程序逻辑是响应于指定复数运算、第一源数据结构、第二源数据结构及目的地数据结构的复数处理指令,来产生控制信号,以控制该数据处理程序逻辑进行以下操作:从该第一源数据结构中的交替位置提取至少一个第一组数据项,其中在该第一源数据结构中的连续数据项包括一第一组复数的交替实数和虚数分量;从该第二源数据结构中的交替位置提取至少一个第二组数据项,其中在该第二源数据结构中的连续数据项包括一第二组复数的交替实数和虚数分量;使用该第一组数据项和该第二组数据项作为操作数,来产生一结果复数分量组,其中该结果复数分量组是应用于该第一组复数和该第二组复数的该复数运算的复数结果的实部和虚部中的一者;及将该结果复数分量组应用于该目的地数据结构。
至少一些实施例提供了一种以非暂时方式存储根据上述的计算机程序实施例的计算机程序的计算机可读取存储介质
现在参考附图描述一些特定实施例。
图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指定第一源寄存器S1、第二源寄存器S2及目的地寄存器Z。此外,在此实施例中,复数乘法指令进一步指定所涉及的复数分量的数据大小,即具有指示这些是32位值的“.s”的额外说明。响应于此指令(或者如将从图1的上文描述理解的那样,严格来说,响应于由解码电路18响应于指令所产生的控制信号),数据处理电路从第一源寄存器S1和第二源寄存器S2两者提取一组实数复数分量和一组虚数复数分量,这些分量中的每一者是32位值。如由在图2中标注源寄存器S1和S2的内容的示例分量所见,每个源寄存器的内容是一系列复数分量对,即实数和虚数分量。在源寄存器中的数据的此结构是有用的,因为复数是存储在一起,无论是在寄存器中还是在它们从中加载的内存位置中,这意味着与加载和解交错运算以从内存加载单独的实数和虚数分量相关的复杂度并非必要。此外,提供所示指令和支持它的数据处理电路意味着可直接处理在每个源寄存器中的交错的实数和虚数分量,使得能使用连续的加载和存储指令,来将这些组值带入寄存器中并且将它们返回到内存,增加了实施方式的便利性并且支持改善的效能。在图2所示的复数乘法指令的特定示例中,显示了一组乘法单元30,其从第一和第二源寄存器接收相应的一对输入。应注意的是,尽管在图中仅显示和明确标记了在每个源寄存器中和在目的地寄存器中的一组四个分量,但是本技术提供了可以跨向量寄存器的整个宽度来复制此处理(如由图的左侧和右侧的虚线所指示)。由乘法单元30所执行的乘法运算的结果向加法单元32提供一对输入,注意到,在两个情况中,将加法单元的输入中的一者在被应用于该加法单元之前取反(即,实施减法)。然后将加法单元32的结果存储于结果寄存器Z中的相应位置中。在此示例中,在指定了32位值的情况,由加法单元32所产生的一组结果值分别是32位值。
图2的CMUL指令所属的由本技术所提供的一示例组指令是非加宽指令,其为:
·CMUL:具有旋转的复数乘法;
·CMLA:具有旋转的复数乘法累加;
·SQRDCMULH:具有旋转的带符号饱和舍去加倍复数乘法,给回高半部分;及
·SQRDCMLAH:具有旋转的带符号饱和舍去加倍复数乘法累加,给回高半部分。
图3示意性图示在一个实施例中的另一复数处理指令,示出了与图2的示例的一些显著差异。在此示例中,指令命名SQDMLALBT对应于“带符号加倍乘法加上长的底部顶部”。如在图3中可见,关于提供来支持此指令的数据处理电路,一组四个乘法单元36从第一和第二源寄存器接收输入,其中该指令再次指定(“s”)为应从每个指令提取一组“单个”32位值。注意到,此指令的“底部顶部”特征指示了要从第一源寄存器zs1提取对分量的下半部分,并且要从第二源寄存器zs2提取该对分量的上半部分。在这些对之间的乘法运算的结果是其将一个输入提取到一组加法单元38,加法单元将此组值加到从目的地寄存器zd提取的值,即这是累加运算。此外,注意到,该指令将在目的地寄存器中的分量的大小指定为“d”,即64位值。换句话说,此运算是加宽运算。作为所示指令的结果,在源寄存器zs1与源寄存器zs2中的一组复数之间产生乘法结果的一组虚数分量,并且将该组虚数分量累加在目的地寄存器zd中,允许相对于输入分量来加宽结果分量,从而保留精度。如在图2的例子般,尽管在图中仅明确显示了从每个源寄存器提取并且在目的地寄存器中累加的一组四个分量,但是本技术提供了可跨向量寄存器的整个宽度来复制此处理(如由图的左侧和右侧的虚线和省略号所指示)。
由图3的SQDMLALBT指令所属的本技术提供的一示例组指令,其为加宽指令,加宽指令指定加上/减去底部/顶部底部/顶部(其中底部和顶部指的是所存取的复数的下半部分和上半部分,即每个复数的实部和虚部),其为:
·SQDMLALB:带符号乘法加上长的底部底部;
·SQDMLSLB:带符号乘法减去长的底部底部;
·SQDMLALT:带符号乘法加上长的顶部顶部;
·SQDMLSLT:带符号乘法减去长的顶部顶部;
·SQDMLALBT:带符号乘法加上长的底部顶部;及
·SQDMLSLBT:带符号乘法减去长的底部顶部。
注意到,这些都是“MLA”(乘法加上-又名乘法累加)指令,还提供了“MUL”版本(即,纯乘法版本),例如用于累加过程的第一次迭代,其中不应该累加目的地寄存器的任何预先存在的内容。对于这些,只需要将在上面列表中的“MLA”替换为“MUL”。
图4示意性图示了提供以支持根据本技术的另一示例指令的一个实施例中的数据处理电路,即复数乘法累加指令。在图4中特别注意的是,第二源寄存器zs2的复制索引(“[1]”)的额外说明。如图所示,在将所支持的处理的向量化性质应用于128位颗粒中的情况(即,在这些128位颗粒中而跨向量寄存器的宽度重复所示的处理),及在指令指定了输入分量大小为单个(即,32位)的情况,复制索引的说明为“1”指示了应该将由128位颗粒的上半部分中的一对32位值所表示的复数复制到下半部分中。注意到,在其他示例中,例如如若指令要在相同的128位颗粒内指定“半个”(即,16位)值,则颗粒的内容将代表两倍的复数(即,将有八个16位值),并且此复制索引将导致该组中的(四个中的)第二复数被复制到其他三个中。然而,考虑到图4所示的特定示例,在复制之后,从第一和第二源寄存器提取的分量向乘法单元40提供一对输入,其实际上可以是与图2中所示的单元30相同的乘法单元。类似地,一对乘法单元40的结果向加法单元42提供输入。如在图2的例子般,注意到,加法单元42中的两个具有取反的其输入的一个,但是与图2的示例相反,在图4的示例中的指令是累加运算,所以保存在目的地寄存器中的相应分量的现有内容向加法单元42提供额外输入。因此产生的结果值形成目的地寄存器zds3的相应分量的新内容。注意到,这不是一个加宽指令,即结果分量与输入分量的大小相同,而因此,在此指令的动作之后,目的地寄存器的内容是一组复数的一组交错的实数和虚数分量,即与两个源寄存器具有相同的格式。如在图2和图3的例子般,尽管在图中仅明确示出了从每个源寄存器提取并且在目的地寄存器中累加的一组四个分量,但是本技术提供了可跨向量寄存器的整个宽度复制此处理(如由图的左侧和右侧的虚线和省略号所指示)。
图5图示了在一些实施例中的另一组指令的运算。这些皆可视为加宽指令,其产生一组连续的实数复数分量(在第一指令的示例中)或一组连续的虚数分量(在所示的第三和第四指令的示例中)。还注意到,每个指令指定了要处理的数据组件的大小以及所产生的结果数据组件的大小(如上文针对图2-4所述),尽管本文的特定大小在图中是通用的,例如<Zda>.<T>和<Zn><Tb>。可见到,在图5的符号中,在处理结束时,所产生的实数和虚数结果已经解交错,并且目的地寄存器Zda包含所有实数结果及目的地寄存器Zdb包含所有虚数结果。转到图6,然后可使用缩小移位运算,来重新排序来自寄存器Za和Zb的数据,以便在目的地寄存器Zc中产生所示的结果复数分量组,其中这些是原始源寄存器Zn和Zm的连续复数格式(图5),而因此不需要进一步重新布置数据。因此可将此组结果复数在连续存储操作中存储回内存。如在前面图的例子般,尽管在图5和图6中仅明确示出了从每个源寄存器提取并且在目的地寄存器中累加的一组四个分量,但是本技术提供了可跨向量寄存器的整个宽度复制此处理。
例如,利用这些乘法加上/减去底部/顶部底部/顶部指令的示例程序系列指令(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的示例实施例中示出,连同提供来支持它们的数据处理电路一起。在支持这种复数点积运算的第一种方法中,如图7A-7D所示,单独地计算结果值的实部和虚部。因此,这允许了所示出的一组指令对结果数据产生加宽效果,其可在图7A-7D的示例中见到,将数据精度扩展四倍,即其中输入复数分量(实数和虚数)是每个16位值,而结果值是64位值。每个点积单元50从相应的一组四个输入分量计算出部分乘积,该相应的一组四个输入分量来自从每个源寄存器取得的一对复数的相应实数和虚数分量。注意到,在一些情况(标记为“-1”)中,将给定输入取反。因此所产生的部分乘积将由加法电路52来累加。还如这些图中所示,这些运算是累加运算,其中目的地寄存器的相应部分的现有内容形成对产生最终结果的加法单元的进一步输入。因此,在图7A-7D中所示的运算的简要概述中,CDOTRE累加两个复数乘法的实部、CDOTIM累加两个复数乘法的虚部、CCDOTRE累加两个共轭复数乘法的实部、及CCDOTIM累加两个共轭复数乘法的的虚部。
在使用这些指令中的两个(取决于是否执行“常规”复数乘法或共轭复数乘法)之后,为了返回到初始数据精度,可以执行一系列运算,诸如图8所示。可见到,在寄存器Za、Zb、Zc及Zd中的实数和虚数分量受限于缩小移位运算,以便将两组相应的实数和虚数分量交错到目的地寄存器Ze和Zf中,而然后执行另一缩小移位运算,以进一步减少分量大小(并且返回到原始源寄存器的分量大小),并且交错实数和虚数分量,以将最终复数结果提供到一个寄存器中。如在前面图的例子般,可跨向量寄存器的整个宽度复制在图7A-7D和8中明确示出的电路和处理。
可通过考虑以下两个示例代码系列(2)和(3),来理解本技术的益处,该两个示例代码系列表示与根据使用诸如图7A-7D中所示出的指令的本技术所采取的方法相比较的这种复数点积处理的先前技术实施方式。可见到,本技术的CDOT指令允许了数据处理电路的计算处理量的显著改进(2倍),而同时增加了累加净空(用于16位输入的64位累加器,即4倍)。
示例先前技术代码系列(复数点积的
Figure BDA0002364965180000161
NEONTM实施方式)(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.re*b.re
smlal v5.4s,v1.4h,v2.4h//c.im+=a.im*b.re
smlsl v4.4s,v1.4h,v3.4h//c.re-=a.re*b.im
smlal v5.4s,v0.4h,v3.4h//c.im+=a.re*b.im
smlal2v6.4s,v0.8h,v2.8h//c.re+=a.re*b.re
smlal2v7.4s,v1.8h,v2.8h//c.im+=a.im*b.re
smlsl2v6.4s,v1.8h,v3.8h//c.re-=a.re*b.im
smlal2v7.4s,v0.8h,v3.8h//c.im+=a.re*b.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.re*b.re
cdotim z5.d,z0.h,z1.h//c.im+=a.im*b.re
cdotre z6.d,z2.h,z3.h//c.re+=a.re*b.re
cdotim z7.d,z2.h,z3.h//c.im+=a.im*b.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的示例中,仅界定了一个指令,即SQRDCDOT,但是在四个示例中所示的对于此指令的四个不同反应导因于在指令中的额外参数的使用(即,#0、#90、#180及#270),其表示换位,即指示组合每个源寄存器的相应实数和虚数分量的特定方式。藉由类似于复数平面中的复数的旋转,这些在本文中通俗地称为“旋转”,尽管重要的是要理解到,执行的换位普遍不严格对应于复数平面中的旋转。可参考图12进一步理解,其中针对“旋转值”的四个不同值从第一和第二源寄存器取得的分量的对应使用,其中可见到,用于第二源寄存器的换位事实上对应于通过以旋转参数值给定的角度的旋转而在所表示的复数的复数平面上的旋转,然而对于应用于第一源寄存器的例子中的换位并不是这种情况,而因此一般认为这些换位并非严格是在复数平面上的旋转。乘法单元54的结果将一对第一输入提供到图9A-9D中所示的累加(加法)单元56,其具有提供另一输入(即,用于累加)的目的地寄存器的相应部分的现有内容。虽然根据此方法来产生实数和虚数分量,以产生复数点积结果,但是这仍然是加宽运算,其具有所产生的实数和虚数分量是实数和虚数输入分量的大小的两倍。如在上述的第一种方法般,使用图9A-9D的SQRDCDOT指令的指令然后可接着进行一对缩小移位运算,如在图10可见,以将数据返回到初始数据精度并且将实数和虚数结果交错在一个目的地寄存器中而实数和虚数分量在另一目的地寄存器中,以在单个目的地寄存器中产生单一组复数分量,其具有形成复数值的交错的实数和虚数分量。如在前面图的例子般,可跨向量寄存器的整个宽度复制在图9A-9D和10中明确示出的电路和处理。
如现在所述,上述的“旋转值”还可以有用地应用于本文所述的许多其他复数处理指令。例如,复数加法指令可在以破坏性方式来将一对组件加到第一源向量的对应组件之前,将在第二源向量中的复数旋转90度或270度(当以极坐标表示考虑时)。
复数乘法加上指令执行操作数的转换以允许,藉由结合指令中的两个,来建立对复数的乘法加上运算。所执行的转换如下:(1)将在第二源向量中的复数在乘上第一源向量的复制实数分量之前旋转0度或180度(以极坐标形式考虑时)。(2)将在第二源向量中的复数在乘上第一源向量的复制虚数分量之前旋转90度或270度(以极坐标形式考虑时)。然后将结果乘积加到目的和被加数向量的对应分量。使用这些转换,可有利地结合两个指令。例如,如若我们考虑以下系列:
SQRDCMLAH Zda.S,Zn.S,Zm.S,#A
SQRDCMLAH Zda.S,Zn.S,Zm.S,#B
然后A和B的有意义的结合是:
A=0,B=90。在此例子中,将在Zn和Zm中的复数的两个向量相乘,并且将乘积加到在Zda中的复数。
A=0,B=270。在此例子中,将在Zn中的共轭复数乘上在Zm中的复数,并且将乘积加到在Zda中的复数。
A=180,B=270。在此例子中,将在Zn和Zm中的复数的两个向量相乘,并且将在Zda中的复数减去乘积。
A=180,B=90。在此例子中,将在Zn中的共轭复数乘上在Zm中的复数,并且将在Zda中的复数减去乘积。
如上所述,加宽复数定点指令解交错复数值的实数和虚数分量,而同时对其进行处理,以便产生具有比输入值更高数值精度的复数结果的分量(即,它们是“加宽”)。因此,这些指令与处理每个复数的实数和虚数分量在一起的其他复数指令显著不同,使得复数结果的两个分量都被写入在目的地的相邻组件。当产生复数乘法加上的结果的加宽分量时,以下指令是有用的:
·SQDMLALBT:加宽虚数值;
·SQDMLSLT:加宽实数值;
·SQDMLALB:加宽共轭实数值;及
·SQDMLSLBT:加宽共轭虚数值。
定点复数点积指令将源向量划界成一对例如8位或16位带符号整数复数。在每一对中,将在第一源向量中的复数值乘上在第二源向量中的对应复数值,并且将结果的加宽乘积相加且加到例如累加器的32位或64位组件,其与在第一源向量中的一对复数重迭。
除了提供基本点积乘积功能之外,这些指令解交错复数值。因此,源向量包含复数的交错的实数和虚数分量,但是目的向量保存一独占组宽的实数或宽的虚数分量。对这些指令使用旋转值:
如若旋转为0,则结果将是包含复数点积运算的实数分量的向量。
如若旋转为90,则结果将是包含复数点积运算的虚数分量的向量。
如若旋转为180,则结果将是包含共轭复数点积运算的实数分量的向量。
如若旋转为270,则结果将是包含共轭复数点积运算的虚数分量的向量。
带符号/无符号整数复数点积指令将源向量划界成一对例如8位或16位带符号/无符号整数复数。在每一对内,将在第一源向量中的复数值乘上在第二源向量中的对应复数值,并且将结果的加宽乘积相加并且加到例如累加器的32位或64位组件(目的组件),其与在第一源向量中的一对复数对齐。
在执行乘法步骤之前,基于旋转参数,来转换从被乘数源向量读取的值。取决于立即旋转值,将源复数的部分的无、一个或两个部分置换及/或取反。对这些指令使用旋转值:
如若旋转为0,则将来自第二源的复数的奇数分量取反,并且目的向量包含复数点积运算的实数分量。
如若旋转为90,则交换来自第二源的复数的实部和虚部,并且目的向量包含复数点积运算的虚数分量。
如若旋转为180,则没有应用的转换,并且目的向量包含共轭复数点积运算的实数分量。
如若旋转为270,则将来自第二源的复数的偶数分量取反,然后交换从第二源导出的结果向量的实部和虚部,并且目的向量包含共轭复数点积运算的虚数分量。
在一些实施例中,复数运算可以是各种复数加法(即,包括复数减法),并且在图11A和图11B中示意性图示了支持其中一些的数据处理电路。再次利用上述的“旋转值”,而在图11A的示例中使用#90的值并且在图11B的示例中使用#270的值。注意到,如图所示,这些旋转值(一组四个)实际上是建议以2位值表示,其中在这些示例中,00对应于#90并且01对应于#270。
图11A和11B所示的示例代表了提供来支持复数加法指令的数据处理电路,其在一个示例指令组中被界定为SQCADD或UQADD(即,饱和复数加法指令的带符号或无符号变体),其中饱和意味着在结果的每个分量中的结果值不会环绕,而是会以预定的最大值饱和。因此,加法单元60从输入源寄存器的相应实数和虚数分量取得输入,并且(注意到,将一些输入取反)将它们相加,以产生在目的地寄存器中所交错的实数和虚数分量。使用不同的旋转参数值,可以实现对组合第一和第二源寄存器中的复数的实数和虚数分量的全部所需置换。如在前面图的例子般,可跨向量寄存器的整个宽度复制在图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,其中取决于所遇到的复数指令的特定类型,从第一源寄存器提取实数及/或虚数分量,并且在步骤108,从第二源寄存器提取实数及/或虚数分量。应注意的是,步骤106和108的提取典型将并行执行,而为了清楚起见在图13中仅以此连续的方式描述。然后在步骤110,使用这些提取的分量,来执行复数运算。步骤112确定是否此为交错结果。当它是,则流程经由步骤114继续,其中将实数和虚数结果分量在它们的应用中交错于目的地寄存器中,并且当它不是,则此流程经由步骤116继续,其中将交错结果然后是一组实数结果分量或一组虚数结果分量应用于指定的目的地寄存器。无论经由任何路径,流程然后返回到步骤100,以供待解码的下一个指令。
图14示出了可使用的一种模拟器实施方式。虽然前述的实施例在用于操作支持相关技术的特定处理硬件的设备和方法方面实施了本发明,但是还可以提供经由使用计算机程序所实施的根据本文所述的实施例的指令执行环境。这种计算机程序通常称为模拟器,只要它们提供硬件架构的基于软件的实施方式。模拟器计算机程序的种类包括模拟器、虚拟机、模型、及包括动态二进制翻译器的二进制翻译器。典型地,模拟器实施方式可以在主机处理器730上执行,可选地执行支持模拟器程序710的主机操作系统720。在一些布置中,在硬件与所提供的指令执行环境(及/或在相同主机处理器上提供的多个不同的指令执行环境)之间可以存在多层模拟。历史上,需要功能强大的处理器来提供以合理的速度执行的模拟器实施方式,但是这种方法在某些情况下可能是合理的,诸如当出于兼容性或再使用的原因而希望将本地代码执行于另一处理器时。例如,模拟器实施方式可对指令执行环境提供主机处理器硬件不支持的额外功能,或者提供与不同硬件架构典型相关的指令执行环境。在Robert Bedichek于Winter 1990USENIX Conference所发表的“Some EfficientArchitecture Simulation Techniques”(第53-63页)中给了对模拟的概述。
就参考特定硬件构造或特征而先前已描述的实施例而言,在模拟的实施例中,可由合适的软件构造或特征,来提供等效功能。例如,可将特定电路在仿真的实施例中实施为计算机程序逻辑。类似地,可将诸如寄存器或闪存的内存硬件在仿真的实施例中实施为软件数据结构。在主机硬件(例如,主机处理器730)上存在在前述实施例中所参考的一个或更多个硬件组件的布置中,一些模拟的实施例可在适当的情况下使用主机硬件。
可将模拟器程序710存储于计算机可读取存储介质(其可以是非瞬时介质)上,并且对目标代码700提供程序接口(指令执行环境),其与由模拟器程序710所建模的硬件架构的应用程序编程接口相同。因此,可使用模拟器程序710,来从指令执行环境内执行包括上述的复数处理指令的目标代码700的程序指令,使得实际上不具有上述的设备的硬件特征的主计算机730可以仿真这些特征。
简言之,提供了总体的设备、方法、程序和复数处理指令,以支持对输入数据向量的向量处理运算,输入数据向量包括在输入数据向量中的相应位置的多个输入数据项。响应于指令,从第一源寄存器中的交替位置提取至少一个第一组数据项,并且从第二源寄存器中的交替位置提取至少一个第二组数据项,其中在第一和第二源寄存器中的连续数据项包括相应组复数的交替实数和虚数分量。使用两组数据项作为操作数,来产生结果复数分量组,并且该结果复数分量组是应用于该两组复数的复数运算的复数结果的实部和虚部中的一者。将该结果复数分量组应用于目的地寄存器。
在本案中,词语“经配置以...”用于表示设备的组件具有能够执行所界定的运算的配置。在此上下文中,“配置”指的是硬件或软件的互连的布置或方式。例如,设备可具有提供所界定的运算的专用硬件,或者处理器或其他处理装置可经程序化以执行功能。“经配置以”并非意味着设备组件需要以任何方式改变,以便提供所界定的运算。
尽管已经参考附图在本文中详细描述了说明性实施例,但是应理解的是,本发明不限于那些精确的实施例,并且本领域技术人员可在不偏离由所附权利要求所界定的本发明的范畴和精神的情况下,在其中实现各种改变、添加及修改。例如,在不偏离本发明的范畴的情况下,可对独立权利要求的特征进行对附属权利要求的特征的各种结合。

Claims (25)

1.一种设备,包括:
指令解码器电路,用于解码指令;以及
数据处理电路,用于将由所述指令指定的向量处理运算选择性地应用于输入数据向量,所述输入数据向量包括在所述输入数据向量中的相应位置处的多个输入数据项,
其中所述指令解码器电路响应于指定复数运算、第一源寄存器、第二源寄存器和目的地寄存器的复数处理指令来产生控制信号,以控制所述数据处理电路:
从所述第一源寄存器中的交替位置提取至少一个第一组数据项,其中在所述第一源寄存器中的连续数据项包括第一组复数的交替实数分量和虚数分量;
从所述第二源寄存器中的交替位置提取至少一个第二组数据项,其中在所述第二源寄存器中的连续数据项包括第二组复数的交替实数分量和虚数分量;
使用所述第一组数据项和所述第二组数据项作为操作数,来产生结果复数分量组,其中所述结果复数分量组是应用于所述第一组复数和所述第二组复数的所述复数运算的复数结果的实部和虚部中的一者;以及
将所述结果复数分量组应用于所述目的地寄存器。
2.根据权利要求1所述的设备,其中,所述结果复数分量组是所述复数结果的一组实数分量。
3.根据权利要求1所述的设备,其中,所述结果复数分量组是所述复数结果的一组虚数分量。
4.根据前述权利要求中任一项所述的设备,其中,所述数据处理电路响应于所述控制信号,来将所述结果复数分量组应用于所述目的地寄存器中的连续位置中。
5.根据权利要求4所述的设备,其中,所述结果复数分量组中的每个复数分量比所述第一组数据项和所述第二组数据项中的每个数据项更宽。
6.根据权利要求1至3中任一项所述的设备,其中,所述数据处理电路响应于所述控制信号,来将所述结果复数分量组应用于与另一结果复数分量组交错的、所述目的地寄存器中的交替位置中,
其中当所述结果复数分量组是所述复数结果的一组实数分量时,所述另一结果复数分量组是所述复数结果的一组虚数分量,
并且其中当所述结果复数分量组是所述复数结果的一组虚数分量时,所述另一结果复数分量组是所述复数结果的一组实数分量。
7.根据前述权利要求中任一项所述的设备,其中,所述复数处理指令还指定是否要从所述第一源寄存器中的奇数位置或偶数位置提取所述第一组数据项,并且其中所述复数处理指令还指定是否要从所述第二源寄存器中的奇数位置或偶数位置提取所述第二组数据项。
8.根据前述权利要求中任一项所述的设备,其中,所述复数处理指令还指定用于所述第一源寄存器和所述第二源寄存器中的至少一者的复制索引,并且其中所述数据处理电路进一步响应于所述控制信号,来复制由所述第一源寄存器和所述第二源寄存器中的至少一者中的所述复制索引指示的源复数组。
9.根据权利要求8所述的设备,其中,对所述源复数组的复制包括多于对所述源复数组的单个复制。
10.根据前述权利要求中任一项所述的设备,其中,从所述第一源寄存器提取的所述至少一个第一组数据项包括所述第一组数据项和第三组数据项,
其中当所述第一组数据项是所述第一组复数的实数分量时,所述第三组数据项是所述第一组复数的虚数分量,并且当所述第一组数据项是所述第一组复数的虚数分量时,所述第三组数据项是所述第一组复数的实数分量,并且
其中所述数据处理电路进一步响应于所述控制信号,来进一步使用所述第三组数据项作为操作数,以产生所述结果复数分量组。
11.根据前述权利要求中任一项所述的设备,其中,从所述第二源寄存器提取的所述至少一个第二组数据项包括所述第二组数据项和第四组数据项,
其中当所述第二组数据项是所述第二组复数的实数分量时,所述第四组数据项是所述第二组复数的虚数分量,并且当所述第二组数据项是所述第二组复数的虚数分量时,所述第四组数据项是所述第二组复数的实数分量,并且
其中所述数据处理电路进一步响应于所述控制信号,来进一步使用所述第四组数据项作为操作数,以产生所述结果复数分量组。
12.根据权利要求10或权利要求11所述的设备,其中,所述复数运算是复数点积运算,并且其中所述数据处理电路包括累加电路,所述累加电路响应于所述控制信号,来累加来自所述第一组复数的一组实数分量和虚数分量对与所述第二组复数的一组实数分量和虚数分量对的部分乘积的结果复数分量组。
13.根据权利要求1至11中任一项所述的设备,其中,所述复数运算包括复数乘法运算。
14.根据权利要求1至11中任一项所述的设备,其中,所述复数运算是复数加法运算或复数减法运算。
15.根据前述权利要求中任一项所述的设备,其中,所述复数处理指令还指定换位参数,并且所述数据处理电路响应于所述控制信号,来在将所述复数运算应用于所述第一组复数和所述第二组复数之前,对所述第一复数和所述第二组复数中的至少一者应用换位运算。
16.根据权利要求15所述的设备,其中,所述换位运算包括在至少一个所述第一组复数和所述第二组复数中,执行以下项目中的至少一者:
用虚数分量代替实数分量;
用实数分量代替虚数分量;
交换实数分量和虚数分量;
取反实数分量;以及
取反虚数分量。
17.根据权利要求15或权利要求16所述的设备,其中,所述复数处理指令将所述换位参数指定为立即值。
18.根据前述权利要求中任一项所述的设备,其中,将所述结果复数分量组应用于所述目的地寄存器包括:将所述结果复数分量组存储在所述目的地寄存器中。
19.根据前述权利要求中任一项所述的设备,其中,将所述结果复数分量组应用于所述目的地寄存器包括:将所述结果复数分量组与所述目的地寄存器的内容进行累加。
20.根据前述权利要求中任一项所述的设备,其中,所述目的地寄存器是所述第一源寄存器和所述第二源寄存器中的一者。
21.根据前述权利要求中任一项所述的设备,其中,所述复数运算是饱和运算。
22.一种操作数据处理设备的方法,包括以下步骤:
解码指令;
将由所述指令指定的向量处理运算选择性地应用于输入数据向量,所述输入数据向量包括在所述输入数据向量中的相应位置处的多个输入数据项;
响应于指定复数运算、第一源寄存器、第二源寄存器和目的地寄存器的复数处理指令,来产生控制信号,以控制所述数据处理设备的数据处理电路:
从所述第一源寄存器中的交替位置提取至少一个第一组数据项,其中在所述第一源寄存器中的连续数据项包括第一组复数的交替实数分量和虚数分量;
从所述第二源寄存器中的交替位置提取至少一个第二组数据项,其中在所述第二源寄存器中的连续数据项包括第二组复数的交替实数分量和虚数分量;
使用所述第一组数据项和所述第二组数据项作为操作数,来产生结果复数分量组,其中所述结果复数分量组是应用于所述第一组复数和所述第二组复数的复数运算的复数结果的实部和虚部中的一者;以及
将所述结果复数分量组应用于所述目的地寄存器。
23.一种设备,包括:
用于解码指令的单元;
用于将由所述指令指定的向量处理运算选择性地应用于输入数据向量的单元,所述输入数据向量包括在所述输入数据向量中的相应位置处的多个输入数据项;
用于响应于指定复数运算、第一源寄存器、第二源寄存器和目的地寄存器的复数处理指令,来产生控制信号的单元,以控制在所述数据处理设备中的用于数据处理的单元:
从所述第一源寄存器中的交替位置提取至少一个第一组数据项,其中在所述第一源寄存器中的连续数据项包括第一组复数的交替实数分量和虚数分量;
从所述第二源寄存器中的交替位置提取至少一个第二组数据项,其中在所述第二源寄存器中的连续数据项包括第二组复数的交替实数分量和虚数分量;
使用所述第一组数据项和所述第二组数据项作为操作数,来产生结果复数分量组,其中所述结果复数分量组是应用于所述第一组复数和所述第二组复数的复数运算的复数结果的实部和虚部中的一者;以及
将所述结果复数分量组应用于所述目的地寄存器。
24.一种用于控制主机数据处理设备以提供指令执行环境的计算机程序,包括:
指令解码程序逻辑,用于解码指令;以及
数据处理程序逻辑,用于将由所述指令指定的向量处理运算选择性地应用于输入数据向量结构,所述输入数据向量结构包括在所述输入数据向量结构中的相应位置处的多个输入数据项,
其中所述指令解码程序逻辑响应于指定复数运算、第一源数据结构、第二源数据结构和目的地数据结构的复数处理指令,来产生控制信号,以控制所述数据处理程序逻辑:
从所述第一源数据结构中的交替位置提取至少一个第一组数据项,其中在所述第一源数据结构中的连续数据项包括第一组复数的交替实数分量和虚数分量;
从所述第二源数据结构中的交替位置提取至少一个第二组数据项,其中在所述第二源数据结构中的连续数据项包括第二组复数的交替实数分量和虚数分量;
使用所述第一组数据项和所述第二组数据项作为操作数,来产生结果复数分量组,其中所述结果复数分量组是应用于所述第一组复数和所述第二组复数的复数运算的复数结果的实部和虚部中的一者;以及
将所述结果复数分量组应用于所述目的地数据结构。
25.一种计算机可读取存储介质,所述计算机可读取存储介质以非暂时方式存储根据权利要求24所述的计算机程序。
CN201880046750.9A 2017-07-20 2018-07-02 基于寄存器的复数处理 Active CN110914800B (zh)

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
CN110914800A true CN110914800A (zh) 2020-03-24
CN110914800B CN110914800B (zh) 2023-12-05

Family

ID=59771743

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880046750.9A Active CN110914800B (zh) 2017-07-20 2018-07-02 基于寄存器的复数处理

Country Status (9)

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

Families Citing this family (1)

* 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

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071403A1 (en) * 2003-09-29 2005-03-31 Broadcom Corporation Method, system, and computer program product for executing SIMD instruction for flexible FFT butterfly
US20050125476A1 (en) * 2003-12-09 2005-06-09 Arm Limited Data processing apparatus and method for performing arithmetic operations in SIMD data processing
CN102197369A (zh) * 2008-10-08 2011-09-21 Arm有限公司 用于执行simd乘法-累积运算的装置及方法
CN102937967A (zh) * 2012-10-11 2013-02-20 南京中兴新软件有限责任公司 数据冗余实现方法及装置
CN103873522A (zh) * 2012-12-14 2014-06-18 联想(北京)有限公司 一种电子设备及应用于电子设备的文件分块方法

Family Cites Families (19)

* 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
US6839728B2 (en) 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US7376812B1 (en) * 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US9465611B2 (en) * 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
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
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
US20070198815A1 (en) 2005-08-11 2007-08-23 Coresonic Ab Programmable digital signal processor having a clustered SIMD microarchitecture including a complex short multiplier and an independent vector load unit
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
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 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
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
US20170177359A1 (en) 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations
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 (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071403A1 (en) * 2003-09-29 2005-03-31 Broadcom Corporation Method, system, and computer program product for executing SIMD instruction for flexible FFT butterfly
US20050125476A1 (en) * 2003-12-09 2005-06-09 Arm Limited Data processing apparatus and method for performing arithmetic operations in SIMD data processing
CN102197369A (zh) * 2008-10-08 2011-09-21 Arm有限公司 用于执行simd乘法-累积运算的装置及方法
CN102937967A (zh) * 2012-10-11 2013-02-20 南京中兴新软件有限责任公司 数据冗余实现方法及装置
CN103873522A (zh) * 2012-12-14 2014-06-18 联想(北京)有限公司 一种电子设备及应用于电子设备的文件分块方法

Also Published As

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

Similar Documents

Publication Publication Date Title
KR101202445B1 (ko) 프로세서
JP7454377B2 (ja) データ処理装置における拡大算術計算
JP7148526B2 (ja) データ処理装置におけるベクトルによる要素演算
KR20190119076A (ko) 데이터 처리장치에서의 곱셈-누적
CN110914800B (zh) 基于寄存器的复数处理
US20100115232A1 (en) Large integer support in vector operations
JP7324754B2 (ja) ベクトル・キャリー付き加算命令
EP3655852B1 (en) Vector interleaving in a data processing apparatus
US20050154773A1 (en) Data processing apparatus and method for performing data processing operations on floating point data elements
WO2021250392A1 (en) Mixed-element-size instruction
CN112230993A (zh) 数据处理方法及装置、电子设备
TW202305588A (zh) 用於向量組合指令之處理設備、方法、及電腦程式
TW202411860A (zh) 多外積指令
JPH02181870A (ja) ディジタル信号処理装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant