CN101438239A - 微处理器中的紧缩加减运算 - Google Patents

微处理器中的紧缩加减运算 Download PDF

Info

Publication number
CN101438239A
CN101438239A CNA2007800053280A CN200780005328A CN101438239A CN 101438239 A CN101438239 A CN 101438239A CN A2007800053280 A CNA2007800053280 A CN A2007800053280A CN 200780005328 A CN200780005328 A CN 200780005328A CN 101438239 A CN101438239 A CN 101438239A
Authority
CN
China
Prior art keywords
word
register
operand
alu
totalizer
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
CNA2007800053280A
Other languages
English (en)
Inventor
龙尼·彼得森
埃里克·K·雷诺
厄于温·斯特伦
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.)
Atmel Corp
Original Assignee
Atmel Corp
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 Atmel Corp filed Critical Atmel Corp
Publication of CN101438239A publication Critical patent/CN101438239A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • 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
    • 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
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/382Reconfigurable for different fixed word lengths
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49921Saturation, i.e. clipping the result to a minimum or maximum value

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Discrete Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

微处理器对从寄存器堆(19)的指定源寄存器(REGA、REGB)的指定顶部(_T)或底部(_B)半字位置获得的半字运算数并行执行紧缩半字加法和减法运算,且此类运算的和与差结果被紧缩到指定目的地寄存器(DST_REG)的各自顶部和底部半字位置中。所述微处理器包含具有加法器电路的算术逻辑单元(ALU 11),所述加法器电路可选择性地分为独立的半字加法器(13、15),所述半字加法器可独立选择(ADDSUB_CTL_T、ADDSUB_CTL_B)以对所述选定半字运算数(OP_B_T、OP_A_T、OP_B_B、OP_AB)执行加法运算或减法运算。所述ALU的所述半字加法器经由在所述顶部和底部半字位置中间进行选择的一组多路复用器(21-26)从源寄存器存取所述运算数。还可提供具有对所述和与差结果的等分及饱和修改的运算。

Description

微处理器中的紧缩加减运算
技术领域
本发明大体涉及计算机处理硬件中的指令处理和算术运算的执行,且涉及用于改进此类运算的执行效率的对此类处理硬件的特定修改。本发明更明确地说涉及尤其用于快速傅里叶变换和相关变换的实施中的蝶式运算。
背景技术
如今多种应用(从音频和视频信号处理及多媒体压缩到汽车碰撞检测)在其算法中使用信号的离散变换。此类离散变换包含(例如)离散余弦变换和离散傅里叶变换,其通常需要以超过每秒几十兆位的数据速率实时执行,这不仅需要高时钟速率和快速处理器,而且还需要此类处理器进行的变换计算和数据处理的高效。离散变换运算通常可通过使用快速傅里叶变换(FFT)来有效地计算,所述FFT具有两个基本“特点”,即时间抽取(库利-图基(Cooley-Tukey))和频率抽取(桑德-图基(Sande-Tukey))。FFT的两个特点均包含所谓的“蝶式”计算作为基本计算元素。蝶式计算还用于其它变换(例如,沃尔什-哈德玛(Walsh-Hadamard))中和维特比(Viterbi)编码/解码算法中。因此,处理硬件中蝶式计算的有效执行在许多应用中具有重要价值。
基本蝶式计算涉及复式运算数的实和虚分量的加法和减法两者。举例来说,在时间抽取FFT变体中,用于对复值a、b、ci、A和B执行一个蝶式运算的代表性伪码给定如下,其中Re()和Im()表示复值的各自实和虚分量:
Re(tmp):=Re(b)Re(ci)-Im(b)Im(ci);
Im(tmp):=Re(b)Im(ci)+Im(b)Re(ci);
Re(A):=Re(a)+Re(tmp);
Re(B):=Re(a)-Re(tmp);
Im(A):=Im(a)+Im(tmp);
Im(B):=Im(a)-Im(tmp);
根据此计算,我们可以看到,对同一输入运算数发生加法和减法运算两次。
如果计算中使用的定点运算数的精确度是微处理器的字长度的一半,且如果微处理器的ALU支持用于对紧缩半字操作的单指令多数据(SIMD)指令,那么微处理器可能用于在一个运算中执行加法和减法两者。举例来说,由ARM有限公司(在英国设立)提供的ARM11处理器具有可对紧缩数据同时执行半字加法和减法的指令。因此,指令SADDSUBX Rd、Rn、Rm和UADDSUBX Rd、Rn、Rm实行以下的各自有符号和无符号型式:
Rd[31:16]:=Rn[31:16]+Rm[15:0]以及
Rd[15:0]:=Rn[15:0]-Rm[31:16]。
同样,指令SSUBADDX Rd、Rn、Rm和USUBADDX Rd、Rn、Rm实行以下的各自有符号和无符号型式:
Rd[31:16]:=Rn[31:16]-Rm[15:0]以及
Rd[15:0]:=Rn[15:0]+Rm[31:16]。
然而,这些指令无法执行蝶式运算的加减运算,除非两个半字运算数被紧缩在同一寄存器中,这需要额外处理。
第2004/0078404号美国专利申请公开案(Macy等人)描述一种处理器,其(尤其)可对第一运算数的四个紧缩数据元素(x3、x2、x1、x0)和第二运算数的四个紧缩数据元素(y3、y2、y1、y0)执行水平或内部加减运算,以产生包括四个紧缩数据元素(y2+y3、y1-y0、x2+x3、x1-x0)或者(y2-y3、y1+y0、x2-x3、x1+x0)的结果,以便使得可有效计算8点时间抽取沃尔什-哈德玛变换。还建议快速傅里叶变换的计算与SIMD乘法运算组合。
第6,754,687号美国专利(Kurak、Jr等人)描述一种用于对二维数据矩阵有效计算反向离散余弦变换的处理系统。所述计算包含执行蝶式(BFLYS)指令,所述指令由对四个半字数据(四个紧缩16位运算数)或双字数据(两个32位运算数)的独立加法和减法运算组成。
发明内容
本发明提供一种执行紧缩半字加法和减法运算的方法,其中我们可指定使用哪些半字作为运算数,即使当其存储在不同源寄存器中时也如此。半字运算数可位于寄存器的顶部或底部部分或其它可寻址存储位置中。各自的和与差结果紧缩到指定目的地寄存器的各自顶部和底部部分中。加法和减法两者并行实行。还可提供具有对所述和与差结果的等分和有符号或无符号饱和修改的半字加法与减法运算。
本发明还提供对微处理器的修改以实施此紧缩半字加法和减法运算。处理器的ALU可分为双半字加法器,且运算数可经由根据用于此运算的经解码指令而产生的多路复用器控制从指定源寄存器存取。半字加法器可经设定以在一个加法器中执行加法且在另一加法器中执行减法,来自这些加法器的和与差输出供应到目的地寄存器的各自顶部和底部部分。
附图说明
图1是根据本发明用于执行紧缩加减运算的微处理器硬件的相关部分的示范性实施的示意框图。
图2是更详细展示用于在将结果存储在目的地寄存器中之前执行对紧缩加减结果的等分或饱和修改的图1的实施中的结果修改逻辑的示意框图。
具体实施方式
本发明提供一种用于加速通常用于执行快速傅里叶变换或其它类似变换的蝶式计算的若干部分的构件和方法。明确地说,对相同半字运算数的紧缩半字加法和减法运算可在微处理器中实施。术语“微处理器”意指包含加载存储(RISC)和存储器定向(CISC)两种结构的多种数据处理硬件,且包含通用处理器和专用处理器(例如,数字信号处理器)两者以及嵌入式处理器。可通过处理器的指令集内的相应指令向微处理器指示紧缩加减运算。
示范性微处理器实施可包含32位字长度,其中计算中使用的定点数具有16位(半字)精确度和(1.15)格式,这意味着每一半字的最高有效位表示符号,而剩余15个次有效位是分数位。半字可紧缩到寄存器或存储器字的顶部和底部部分中,其中位[31:16]中的顶部部分是与位[15:0]中的底部部分分离的值。虽然在一些实例中将复值的实部和虚部放置到同一寄存器或存储器字的相应顶部和底部部分中可能看上去是便利的,但这并非绝对必需,从效率的观点来看甚至不合乎需要,因为为了保持实部和虚部合起来为一值在运算之后必需对数据改组。通常最好就是知道其在其可能被放置的任何字中的位置。本发明提供的灵活性允许执行紧缩加减运算,即使当半字运算数位于不同寄存器中时也如此。
参看图1,可见微处理器的相关部分,其已经特别修改以有效地实施本发明。算术逻辑单元(ALU)11具有耦合在两个半字加法器13与15之间的多路复用器17。多路复用器17接收控制信号PROPAGATE_CARRY。当此控制信号等于1时,将来自底部半字加法器15的CARRY_OUT作为CARRY_IN供应到顶部半字加法器13,从而使组件13、15和17成为正常的全字加法器。然而,每当控制信号PROPAGATE_CARRY设定为零时,来自底部半字加法器15的CARRY_OUT未传播到顶部半字加法器13中。而是,顶部半字加法器13从多路复用器17接收零作为其CARRY_IN值。有效地,将PROPAGATE_CARRY设定为零使字加法器成为两个独立半字加法器13和15。此零控制设定是根据本发明执行紧缩半字加减运算时使用的设定。
顶部和底部半字加法器13和15还接收各自控制信号ADDSUB_CTL_T和ADDSUB_CTL_B,其确定是否执行加法或减法,即是否将对相应的半字运算数输入OP_B_T或OP_B_B求补数。当任一或两个控制信号设定为零时,相关输入OP_B_T或OP_B_B处提供的值保持不变且执行加法(A+B)。当任一或两个控制信号设定为一时,相关输入OP_B_T或OP_B_B处提供的值被求补数且执行减法(A-B)。对于紧缩半字加减运算,这些控制信号中的一者(例如,ADDSUB_CTL_T)针对加法设定,而这些控制信号中的另一者(例如,ADDSUB_CTL_B)针对减法设定,使得顶部和底部半字加法器13和15对半字运算数执行各自加法和减法运算。
AUL 11能够存取含有各种寄存器的寄存器堆19。在紧缩半字加减运算中,寄存器堆19中的两个寄存器(此处表示为REG A和REG B)由相应指令指示为用于运算的源寄存器,而寄存器堆19中的另一寄存器(此处表示为DST REG)由指令指示为用于运算结果的目的地寄存器。对于紧缩数据,寄存器堆中的寄存器中的每一者具有为顶部半字(即,REGA_T、REGB_T和DST_REG_T)和不同的底部半字(即,REGA_B、REGB_B和DST_REG_B)两者指定的存储位置。
为了改进灵活性,AUL 11已经修改使得其经由一组多路复用器21-26间接地从指令指定的寄存器(表示为REG A和REG B)存取运算数,所述多路复用器供应来自各自源寄存器REG A和REG B的选定半字运算数输入。
当供应到多路复用器22、23、25和26的控制信号HALFWORD_ADD设定为零时,其促使来自各自寄存器A和B的各自顶部和底部半字作为运算数输入被供应到AUL 11的各自顶部和底部半字加法器13和15。与设定为一的控制信号PROPAGATE_CARRY组合,AUL 11将作为正常全字加法器而工作。
然而,当HALFWORD_ADD设定为一时,多路复用器22和23将把由多路复用器21从REG B选择的相同半字作为半字运算数输入供应到两个半字加法器13和15。此半字运算数当被输入到顶部半字加法器13中时表示为OP_B_T,且当被输入到底部半字加法器15中时表示为OP_B_B。(在相同半字被选择作为两个半字加法器13和15的运算数输入的这种情况下,运算数通常也可表示为OP_B。)同样,多路复用器25和26将把由多路复用器24从REG A选择的相同半字作为半字运算数输入供应到两个半字加法器13和15。此半字运算数当被输入到顶部半字加法器13中时表示为OP_A_T,且当被输入到底部半字加法器15中时表示为OP_A_B。(同样,在相同半字被选择作为两个半字加法器13和15的运算数输入的情况下,运算数也可表示为OP_A。)与设定为零的控制信号PROPAGATE_CARRY组合,AUL 11将作为一对半字加法器而工作。
供应到各自多路复用器21和24的控制信号OP_B_TOP和OP_A_TOP确定选择来自各自寄存器REG B和REG A的顶部还是底部半字。如果控制信号中的任一者或两者设定为一,那么将选择相应顶部半字作为相关半字运算数。
因此,相关的一些控制信号组合包含:
(a)HALFWORD_ADD=0,PROPAGATE_CARRY=1,
OP_A_TOP=X(无关),OP_B_TOP=X,
ADDSUB_CTL_T=ADDSUB_CTL_B=0;then DST:=A+B。
这是计算和的正常全字加法器。
(b)HALFWORD_ADD=0,PROPAGATE_CARRY=1,
OP_A_TOP=X,OP_B_TOP=X,
ADDSUB_CTL_T=ADDSUB_CTL_B=1;then DST:=A-B。
这是计算差的正常全字加法器。
(c)HALFWORD_ADD=1,PROPAGATE_CARRY=0,
OP_A_TOP=0,OP_B_TOP=0,
ADDS UB_CTL_T=0,ADDS UB_CTL_B=1;
then DST_REG_T:=REGA_B+REGB_B,
DST_REG_B:=REGA_B-REGB_B。
这将来自寄存器A和B的底部半字的各自和与差放置到目的地寄存器的各自顶部和底部半字位置中。
(d)与(c)相同,除了
ADDSUB_CTL_T=1,ADDSUB_CTL_B=0;
then DST_REG_T:=REGA_B-REGB_B,
DST_REG_B:=REGA_B+REGB_B。
此变体将来自寄存器A和B的底部半字的各自差与和放置到目的地寄存器的各自顶部和底部半字位置中。
(e)与(c)相同,除了
OP_A_TOP=1,OP_B_TOP=1;
then DST_REG_T:=REGA_T+REGB_T,
DST_REG_B:=REGA_T-REGB_T。
这使用来自寄存器A和B的顶部半字作为运算数。使和与差的目的地反向的类似于(d)的变体也是可能的。
(f)与(c)相同,除了
OP_A_TOP=0,OP_B_TOP=1;
then DST_REG_T:=REGA_B+REGB_T,
DST_REG_B:=REGA_B-REGB_T。
这使用来自REG A的底部半字和来自REG B的顶部半字作为运算数。
同样,
(g)与(c)相同,除了
OP_A_TOP=1OP_B_TOP=0,
then DST_REG_T:=REGA_T+REGB_B,
DST_REG_B:=REGA_T-REGB_B。
这使用来自REG A的顶部半字和来自REG B的底部半字作为运算数。
在任一变体(f)或(g)中,如果ADDSUB_CTL_T=1、ADDSUB_CTL_B=0,那么与(d)中一样,我们可使和与差的目的地反向使得差进入DST REG的顶部半字中。
使用具有图1中所见的修改的微处理器,我们可更有效地执行在执行变换函数的过程中所使用的蝶式计算。蝶式计算解析为以下示范性汇编码:
Multiply tmp_real,b_real,ci_real;
Negate ci_imag_neg,ci_imag;
Multiply_accumulate tmp_real,b_imag,ci_imag_neg;
Shift_right tmp_real,tmp_real>>15;
(!在乘法产生32位定点乘积之后右移15位恢复原始16位(1.15)格式。)
Multiply tmp_imag,b_real,ci_imag;
Multiply_accumulate tmp_imag,b_imag,ci_real;
Shift_right tmp_imag,tmp_real>>15;
Paddsub.h a_b_real,a_real:b,tmp_real:b;
Paddsub.h a b_imag,a_imag:b,tmp_imag:b;
具体地说,可执行紧缩半字加法和减法运算(paddsub.h),其中从指定源寄存器的顶部或底部部分选择相同半字运算数,且将和与差紧缩到指定目的地寄存器的各自顶部和底部半字中(没有饱和),例如上文的选项(c)或(e)。这允许蝶式计算的四个先前独立的和与差运算:
Re(A):=Re(a)+Re(tmp);
Re(B):=Re(a)-Re(tmp);
Im(A):=Im(a)+Im(tmp);
Im(B):=Im(a)-Im(tmp);
现组合为一对紧缩半字加法-减法运算:
PADDSUB.H(a_b_real,a_real:b,tmp_real:b);
PADDSUB.H(a_b_imag,a_imag:b,tmp_imag:b);
其中所陈述的第一参数是指定的目的地寄存器,且所陈述的最后两个参数是指定的A和B源寄存器,此处识别为使用来自那些寄存器的底部半字。
对应于指令
PADDSUB.H dstreg,regA:<regApart>,
regB:<regBpart>(其中regApart、regBpart∈{t,b})的运算的等效功能性可以伪码术语便利地描述为:
If(regApart==t)
Op_A=regA[wordlength-1:wordlength/2];
Else
Op_A=regA[(wordlength/2)-1:0];
If(regBpart==t)
Op_B=regB[wordlength-1:wordlength/2];
Else
Op_B=regB[(wordlength/2)-1:0];
Rd[wordlehgth-1;wordlength/2]:=OpA+OpB;
Rd[{wordlength/2)-1:0]:=OpA-OpB;
(然而,注意,处理器硬件在一个操作时钟周期中将此紧缩加减运算作为单个统一动作而实行而不是类似软件的描述所建议的连续步骤序列。)此功能描述的if-else行由选择到达ALU 11的Op_A和Op_B半字运算数输入的多路复用器21-26在图1的处理器电路中实行。功能描述的最后两行对应于由半字加法器13和15且通过将和与差结果提供到目的地寄存器DST REG的各自顶部和底部半字位置而实行的加法和减法运算。
或者,可替代地使用相应的指令PSUBADD.H。这与上述紧缩加法-减法运算PADDSUB.H相同,除了和与差结果的目的地反向而使得差进入顶部半字中且和进入底部半字中以外。
Rd[wordlength-1:wordlength/2]:=OpA-OpB;
Rd[wordlength/2-1:0]:=OpA+OpB;
这对应于变体(d),和上文描述的变体(e)、(f)或(g)等的类似反向目的地型式。
根据本发明的紧缩加法和减法的其它变化是可能的。举例来说,一个或一个以上其它指令可提供具有等分的紧缩加减运算(paddsubh.sh和psubaddh.sh)。等分涉及在将半字和与差结果写入到目的地寄存器之前执行半字和与差结果的算术除以二(经实施为右移一个位位置)。算术右移(asr)保留最高有效位的符号,即:
(asr值[15:0]=({值[15],值[15:1]}),
其中{a,b}指示a与b的串联。等分通常用于数字信号处理(DSP)应用中,因为其允许限制结果的增长。
一个或一个以上其它指令可提供具有有符号或无符号饱和的紧缩加减运算(paddsubs.sh、paddsubs.uh、psubadds.sh、psubadds.uh)。饱和用于使由上溢或下溢状况引起的误差最小化。如果两个运算数的和或差在可由数字格式表示的范围之外,那么和或差经设定为可由所述格式表示的最大或最小数值。
在无符号饱和的情况下,半字值0000H到FFFFH可表示从0到65535(或者,分数值0到65535/65536)范围内的自然数。在正数的加法期间可发生上溢,而在正数的减法期间可发生下溢。上溢或下溢状况通过从相关半字加法器产生进位输出来检测。在由加法引起的上溢的情况下,将饱和值FFFFH(最大无符号数)指派为结果。在由减法引起的下溢的情况下,将饱和值0(最小无符号数)指派为结果。
在有符号饱和的情况下,半字值在从-32768到32767(由有符号位8000H到FFFFH和0000H到7FFFH表示)范围内。(等效分数值也可由这些有符号位表示。)两个正值的加法可超过范围中的最大值(上溢),从正值中减去负值也可如此,在所述情况下,最大(最正的)有符号数(由7FFFH表示)将被指派给结果。同样,两个负值的加法或从负值中减去正值可产生落在范围中的最小值以下的和或差结果,在所述情况下,将指派最小(最负的)有符号数(由8000H表示)来替代结果。通过确定四个状况中的任一者来检测存在上溢或下溢且因此需要饱和,即:
if((-addsub_ctl & ((op_a[15] & op_b[15] &-sumdiff[15])|
(-op_a[15] & -op_b[15] & sumdiff[15])))|
(addsub_ctl & ((op_a[15] & -op_b[15] & -sumdiff[15])|
(-op_a[15] & op_b[15] & sumdiff[15])))|
此处,-意味着逻辑否(NOT),&意味着逻辑与(AND),且|意味着逻辑或(OR)。在将每一运算数的符号位(半字位15)与和/差结果进行比较时指示上溢/下溢状况。上溢可简单地通过运算数A的符号位而与下溢区分:
if(OP_a[15])then MODOUT[15:0]=0x8000
else MODOUT[15:0]=0x7fff;
为了实施变化,结果-修改逻辑单元31可插入在从ALU 11和相应目的地寄存器半字DST_REG_T和DST_REG_B输出的和/差输出SUMDIFF_T与SUMDIFF_B之间。结果-修改逻辑31如图2中更详细展示为不同的,但通常是用于各自结果SUMDIFF_T和SUMDIFF_B的顶部和底部半字目的地的相同的结果-修改逻辑子单元31T和31B。图2还展示这些子单元需要的各种参数和控制输入。施加到此逻辑单元31的控制信号HWMOD[1:0]将确定将施加变化中的哪一者(即,没有具有无符号饱和或有符号饱和的修改)。到达ALU(符号位)的运算数输入连同各自ADDSUB_CTL信号一起也耦合到逻辑子单元31T和31B。对应于顶部和底部输出SUMDIFF_T和SUMDIFF_B的逻辑将相同。来自此逻辑单元的经修改的输出[15:0]用作。

Claims (9)

1.一种处理器电路,其适于对一对选定运算数执行紧缩半字加法和减法运算,所述处理器电路包括:
算术逻辑单元(ALU),其具有加法器电路,所述加法器电路可选择性地分为两个半字加法器,每一半字加法器可独立选择以对在所述半字加法器的各自运算数输入处接收的运算数执行加法或减法运算,所述ALU可存取具有拥有顶部和底部半字存储位置的一组可选择寄存器的寄存器堆,所述ALU的所述半字加法器的输出可选择性地耦合到所述寄存器堆中的指令指定的目的地寄存器的各自顶部和底部半字存储位置;以及
一组多路复用器,其耦合在所述寄存器堆与所述ALU的所述半字加法器的所述运算数输入之间,所述组多路复用器经配置以响应于指令确定的控制信号从所述寄存器堆的所指定第一源寄存器的所指定顶部或底部半字选择第一运算数输入,且从所述寄存器堆的所指定第二源寄存器的所指定顶部或底部半字选择第二运算数输入,所述所指定第二源寄存器未必与所述所指定第一源寄存器相同。
2.根据权利要求1所述的处理器电路,其中所述组多路复用器包含第一组多路复用器,其响应于顶部/底部控制信号以用于在来自所述指定第一和第二源寄存器的顶部和底部半字运算数之间进行选择。
3.根据权利要求2所述的处理器电路,其中所述组多路复用器进一步包括第二组多路复用器,其响应于半字/全字控制信号以用于在来自所述指定第一和第二源寄存器的半字与全字运算数之间进行选择。
4.根据权利要求1所述的处理器电路,其中所述ALU包含耦合在底部半字加法器的进位输出与顶部半字加法器的进位输入之间的多路复用器,所述多路复用器响应于传播进位控制信号以用于在传播所述进位输出以产生全字加法器与不传播所述进位输出以产生独立的半字加法器之间进行选择。
5.根据权利要求1所述的处理器电路,其中所述两个半字加法器响应于独立加/减控制信号以用于指定由所述各自半字加法器进行的运算数输入的加法或减法。
6.根据权利要求1所述的处理器电路,其进一步包括耦合在所述ALU与所述目的地寄存器的输出之间的结果-修改逻辑,其中所述结果-修改逻辑经配置以对所述ALU的所述各自半字输出选择性地实施指令指定的等分、无符号饱和、有符号饱和无修改中的任何一者或一者以上。
7.一种在处理器电路的单一操作周期中执行紧缩半字加法和减法运算的方法,所述方法包括:
借助一组多路复用器,从可由算术逻辑单元(ALU)存取的寄存器堆的所指定第一源寄存器的所指定顶部或底部半字中选择第一运算数;
借助一组多路复用器,从所述寄存器堆的所指定第二源寄存器的所指定顶部或底部半字中选择第二运算数,所述指定第二源寄存器未必与所述指定第一源寄存器相同;
在所述ALU中,在所述处理器电路的单一操作周期中并行执行所述选定第一和第二运算数的各自半字加法和半字减法;以及
将从所述并行半字加法和半字减法运算中产生的和与差提供到所述寄存器堆的所指定目的地寄存器的各自顶部和底部半字位置。
8.根据权利要求7所述的方法,其进一步包括在将所述和与差提供到所述所指定目的地寄存器的各自顶部和底部半字位置之前经由移位来等分所述和与差。
9.根据权利要求7所述的方法,其进一步包括检测所述各自和与差中的上溢或下溢状况,且如果检测到任何此类状况,那么在将所述和或差提供到所述所指定目的地寄存器之前使其中发生此类状况的所述和或差饱和。
CNA2007800053280A 2006-02-13 2007-01-17 微处理器中的紧缩加减运算 Pending CN101438239A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/352,711 2006-02-13
US11/352,711 US7555514B2 (en) 2006-02-13 2006-02-13 Packed add-subtract operation in a microprocessor

Publications (1)

Publication Number Publication Date
CN101438239A true CN101438239A (zh) 2009-05-20

Family

ID=38370019

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2007800053280A Pending CN101438239A (zh) 2006-02-13 2007-01-17 微处理器中的紧缩加减运算

Country Status (8)

Country Link
US (2) US7555514B2 (zh)
EP (1) EP1987424A4 (zh)
JP (1) JP2009527035A (zh)
KR (1) KR20080094833A (zh)
CN (1) CN101438239A (zh)
NO (1) NO20083888L (zh)
TW (1) TW200816045A (zh)
WO (1) WO2007095408A2 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102375805A (zh) * 2011-10-31 2012-03-14 中国人民解放军国防科学技术大学 面向向量处理器的基于simd的fft并行计算方法
CN109328334A (zh) * 2016-07-02 2019-02-12 英特尔公司 用于累积式求和的系统、装置和方法

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7555514B2 (en) * 2006-02-13 2009-06-30 Atmel Corportation Packed add-subtract operation in a microprocessor
US10802990B2 (en) * 2008-10-06 2020-10-13 International Business Machines Corporation Hardware based mandatory access control
US9563401B2 (en) 2012-12-07 2017-02-07 Wave Computing, Inc. Extensible iterative multiplier
US10289382B2 (en) 2012-12-20 2019-05-14 Wave Computing, Inc. Selectively combinable directional shifters
US9933996B2 (en) 2012-12-20 2018-04-03 Wave Computing, Inc. Selectively combinable shifters
US9395988B2 (en) 2013-03-08 2016-07-19 Samsung Electronics Co., Ltd. Micro-ops including packed source and destination fields
US9830150B2 (en) * 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US20180088946A1 (en) * 2016-09-27 2018-03-29 Intel Corporation Apparatuses, methods, and systems for mixing vector operations
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10552154B2 (en) 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US11243765B2 (en) * 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11074073B2 (en) 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10795677B2 (en) 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11880683B2 (en) * 2017-10-31 2024-01-23 Advanced Micro Devices, Inc. Packed 16 bits instruction pipeline
US11502715B2 (en) * 2020-04-29 2022-11-15 Eagle Technology, Llc Radio frequency (RF) system including programmable processing circuit performing block coding computations and related methods
US11411593B2 (en) * 2020-04-29 2022-08-09 Eagle Technology, Llc Radio frequency (RF) system including programmable processing circuit performing butterfly computations and related methods

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6385634B1 (en) 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US5721892A (en) 1995-08-31 1998-02-24 Intel Corporation Method and apparatus for performing multiply-subtract operations on packed data
GB2317466B (en) * 1996-09-23 2000-11-08 Advanced Risc Mach Ltd Data processing condition code flags
US5909572A (en) * 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
GB2326253A (en) * 1997-06-10 1998-12-16 Advanced Risc Mach Ltd Coprocessor data access control
US6408320B1 (en) * 1998-01-27 2002-06-18 Texas Instruments Incorporated Instruction set architecture with versatile adder carry control
US7395302B2 (en) 1998-03-31 2008-07-01 Intel Corporation Method and apparatus for performing horizontal addition and subtraction
US6839728B2 (en) 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6272512B1 (en) 1998-10-12 2001-08-07 Intel Corporation Data manipulation instruction for enhancing value and efficiency of complex arithmetic
JP2002544587A (ja) * 1999-05-12 2002-12-24 アナログ デバイセス インコーポレーテッド デジタル信号プロセッサ計算コア
US6754687B1 (en) 1999-11-12 2004-06-22 Pts Corporation Methods and apparatus for efficient cosine transform implementations
JP3716695B2 (ja) * 1999-12-24 2005-11-16 日本電気株式会社 高速アダマール変換器
KR100399932B1 (ko) * 2001-05-07 2003-09-29 주식회사 하이닉스반도체 메모리의 양을 감소시키기 위한 비디오 프레임의압축/역압축 하드웨어 시스템
US6986023B2 (en) * 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
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
GB2409065B (en) 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
KR100645442B1 (ko) 2005-07-25 2006-11-14 삼성전자주식회사 칼라 하프톤 스크린 설계 방법 및 그 장치
US7555514B2 (en) 2006-02-13 2009-06-30 Atmel Corportation Packed add-subtract operation in a microprocessor

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102375805A (zh) * 2011-10-31 2012-03-14 中国人民解放军国防科学技术大学 面向向量处理器的基于simd的fft并行计算方法
CN102375805B (zh) * 2011-10-31 2014-04-02 中国人民解放军国防科学技术大学 面向向量处理器的基于simd的fft并行计算方法
CN109328334A (zh) * 2016-07-02 2019-02-12 英特尔公司 用于累积式求和的系统、装置和方法
CN109328334B (zh) * 2016-07-02 2024-04-12 英特尔公司 用于累积式求和的系统、装置和方法

Also Published As

Publication number Publication date
EP1987424A4 (en) 2009-07-29
US20070192396A1 (en) 2007-08-16
US20090265410A1 (en) 2009-10-22
WO2007095408A2 (en) 2007-08-23
WO2007095408A3 (en) 2008-11-20
EP1987424A2 (en) 2008-11-05
TW200816045A (en) 2008-04-01
NO20083888L (no) 2008-09-11
JP2009527035A (ja) 2009-07-23
KR20080094833A (ko) 2008-10-24
US8224883B2 (en) 2012-07-17
US7555514B2 (en) 2009-06-30

Similar Documents

Publication Publication Date Title
CN101438239A (zh) 微处理器中的紧缩加减运算
KR102447636B1 (ko) 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법
US7236995B2 (en) Data processing apparatus and method for converting a number between fixed-point and floating-point representations
US11347511B2 (en) Floating-point scaling operation
RU2263947C2 (ru) Целочисленное умножение высокого порядка с округлением и сдвигом в архитектуре с одним потоком команд и множеством потоков данных
KR101300431B1 (ko) 내적 연산을 수행하기 위한 명령 및 논리
US7724261B2 (en) Processor having a compare extension of an instruction set architecture
KR101515311B1 (ko) 승산-승산-누산 명령 수행
US7680873B2 (en) Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
US5675758A (en) Processor having primary integer execution unit and supplemental integer execution unit for performing out-of-order add and move operations
RU2275677C2 (ru) Способ, устройство и команда для выполнения знаковой операции умножения
JPH10116268A (ja) ベクトルレジスタの複数バンクを用いた単一命令複数データ処理
JPH02226420A (ja) 浮動小数点演算実行装置
JP4891252B2 (ja) 汎用乗算加算機能ユニット
US20040230773A1 (en) Multi-pipe dispatch and execution of complex instructions in a superscalar processor
US6999985B2 (en) Single instruction multiple data processing
US8015228B2 (en) Data processing apparatus and method for performing a reciprocal operation on an input value to produce a result value
US6732259B1 (en) Processor having a conditional branch extension of an instruction set architecture
GB2423385A (en) Determining an initial estimate of a result value of a reciprocal operation
US20060218380A1 (en) Add-shift-round instruction with dual-use source operand for DSP
US20060218377A1 (en) Instruction with dual-use source providing both an operand value and a control value
US7260711B2 (en) Single instruction multiple data processing allowing the combination of portions of two data words with a single pack instruction
US7580968B2 (en) Processor with scaled sum-of-product instructions
Fuller Motorola PowerPC Microprocessor With AltiVec Technology–The System Engineers Answer to Revolutionizing Life Cycle COTS Design Paradigms with Software-Based High Performance Computing
JP2006171827A (ja) 演算処理装置および演算処理プログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20090520