CN103119579B - 用于向量整数乘加指令的功能单元 - Google Patents

用于向量整数乘加指令的功能单元 Download PDF

Info

Publication number
CN103119579B
CN103119579B CN201180045903.6A CN201180045903A CN103119579B CN 103119579 B CN103119579 B CN 103119579B CN 201180045903 A CN201180045903 A CN 201180045903A CN 103119579 B CN103119579 B CN 103119579B
Authority
CN
China
Prior art keywords
vector
instruction
integer
multiply
add
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.)
Expired - Fee Related
Application number
CN201180045903.6A
Other languages
English (en)
Other versions
CN103119579A (zh
Inventor
J·韦德梅耶
S·萨姆德若拉
R·高利弗
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of CN103119579A publication Critical patent/CN103119579A/zh
Application granted granted Critical
Publication of CN103119579B publication Critical patent/CN103119579B/zh
Expired - Fee Related 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
    • 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
    • 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • 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/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/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

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

Abstract

描述了一种向量功能单元,其被实现在半导体芯片上以执行N维向量操作。向量功能单元包括N个功能单元。N个功能单元中的每一个包括逻辑电路,该逻辑电路用于执行:提供第一整数乘加运算的最高阶位而不提供最低阶位的第一整数乘加指令,以及提供第二整数乘加运算的最低阶位而不提供最高阶位的第二整数乘加指令。

Description

用于向量整数乘加指令的功能单元
发明领域
本发明领域一般地涉及计算机系统,并且尤其涉及用于执行向量乘加指令以及使用逻辑块的其它指令的处理器体系结构,其中该逻辑块用于计算向量乘加结果。
背景技术
两种类型的处理器体系结构在计算机科学领域中被广泛认知:“标量”和“向量”。标量处理器被设计成执行对单个数据集进行操作的指令,然而向量处理器被设计成执行对多个数据集进行操作的指令。图1A和图1B示出比较示例,展示了标量处理器和向量处理器之间的基本差异。
图1A示出标量AND(与)指令的示例,其中对单个操作数集(A和B)进行与操作(ANDed)以产生单个(或“标量”)结果C(即,AB=C)。相比之下,图1B示出向量AND指令的示例,其中两个操作数集A/B和D/E分别被并行地进行与操作以同时产生向量结果C和F(即,A.AND.B=C和D.AND.E=F)。
如本领域所公知的,通常输入操作数和输出结果两者均存储在专用寄存器中。例如,许多指令将具有两个输入操作数。因此,两个不同的输入寄存器将被用于临时存储相应输入操作数。此外,这些相同指令将产生输出值,该输出值将被临时存储在第三(结果)寄存器中。在图1A和图1B中观察到相应输入101a,b和102a,b以及结果寄存器103a,b。显著地,“标量”对比“向量”特征是容易区分的。
即,观察到,图1A的标量设计的输入寄存器101a和102a仅仅保存标量值(分别为A和B)。同样,还观察到,图1A的标量设计的结果寄存器103a仅保存标量值(C)。相比之下,观察到,图1B的向量系统的输入寄存器101b和102b保存向量(在寄存器101b中保存A、D,以及在寄存器102b中保存B、E)。同样,还观察到图1B的向量系统的结果寄存器103a保存向量值(C、F)。就术语而言,图1B的向量系统的寄存器101b、102b和103b中的每一个的内容可被整体地称为“向量”,并且向量内的各个标量值中的每一个可被称为“元素”。因此,例如,观察到,寄存器101b存储“向量”A、D,“向量”A、D由“元素”A和“元素”D组成。
已知只有标量或SIMD乘法操作已在半导体芯片处理器中被实际地实现为单个处理器指令。已知已在半导体芯片处理器中实现的标量或SIMD乘法指令包括“乘”指令(MUL)和“乘高”指令(MULH),其中“乘”指令提供两个整数输入操作数的乘积的低阶位,而“乘高”指令提供标量整数乘法操作的高阶位。
已知已在半导体处理器芯片中被实现为标量或SIMD指令的其它指令包括“前导零计数”CLZ指令、“尾随零计数”指令CTZ、以及“计数”指令CNT。标量CLZ指令接收标量输入A并返回在A中最高阶1之前的A中0的数量(例如,如果A=1000,则CLZ的结果=0;如果A=0100,则CLZ的结果=1;如果A=0010,则CLZ的结果=2;等等)。标量CTZ指令接收标量输入A并返回在A中最低阶1之后的A中0的数量(例如,如果A=1000,则CTZ的结果=3;如果A=0100,则CTZ的结果=2;如果A=0010,则CTZ的结果=1;等等)。标量CNT指令接收标量输入A并返回A中的1的数量(例如,如果A=1011,则CLZ的结果=3;如果A=1001,则CLZ的结果=2;如果A=0010,则CLZ的结果=1;等等)。
附图说明
本发明在附图中作为示例而非限制地示出,其中类似的附图标记指示相似的元件,附图中:
图1a和图1b示出标量和向量逻辑操作;
图2示出向量乘加功能单元;
图3示出可用于图2的功能单元200_1至200_N中的每一个的电子功能单元的实施例;
图4a示出向量浮点乘加操作;
图4b示出向量整数浮点操作;
图5示出图3的功能单元的实施例,该功能单元具有用于执行前导零、尾随零、操作数1计数以及奇偶指令的扩展逻辑;
图6a到图6d分别示出以下指令的执行:前导零确定、尾随零确定、操作数1计数以及操作数奇偶确定;
图7示出半导体处理器的示图;
图8示出计算系统的示图。
具体实施方式
一些计算机系统可能需要“乘加”操作。乘加操作执行运算(A*B)+C,其中A、B和C中的每一个均为输入操作数。图2示出能够执行向量乘加指令(VMADD)的向量处理功能单元200的高级体系结构视图。如图2所示,功能单元包括N个标量逻辑单元200_1到200_N,每个逻辑单元对输入向量的相应元素进行标量乘加操作。在此,输入寄存器203保存输入向量A=A_1、A_2、...A_N;输入寄存器204保存输入向量B=B_1、B_2、...B_N;以及输入寄存器205保存输入向量C=C_1、C_2、...C_N。标量逻辑单元200_1执行运算((A_1)*(B_1))+C_1;标量逻辑单元200_2执行运算((A_2)*(B_2))+C_2;...;以及标量逻辑单元200_N执行运算((A_N)*(B_N))+C_N。在实施例中,每个标量逻辑单元支持32位操作数操作模式和64位操作数操作模式两者。由逻辑单元200_1到200_N产生的各个结果202_1到202_N对应于由向量功能单元200提供的输出向量的各个元素,该输出向量存储在输出寄存器中。
图2还示出,为了实现与SIMD操作相对的向量操作,可将掩模层并入到输出电路206中。向量操作可被视为在以下方面与SIMD操作不同:输入操作数的尺寸对于向量机是可变的但对于SIMD机是固定的。改变图2的向量机中的元素数量的能力借助可在输出206执行的掩模来表示。具体地,可以通过它自身的相应写逻辑电路(未示出)对每个输出元素进行写入。在实施例中,写逻辑电路可对任何输出元素位置进行。通过仅对与有效向量操作数元素相对应的那些元素启用写逻辑电路,可以处理长度可变的向量。其作用是基本上仅启用标量功能单元200_1到200_N中与有效向量元素相对应的那些用于操作。此外,掩模使得针对有效元素检测到的任何算术例外被呈现,同时抑制不活动元素的例外。
如以下将要进一步详细描述的,除计算向量乘加指令之外,功能单元200还能够计算许多附加向量指令,诸如下列中的一个或多个:i)用于整数操作数的向量乘加高指令(VMADDH),其提供向量乘加运算的高阶位;ii)用于整数操作数的向量乘加(VMADDL),其提供向量乘加运算的低阶位;iii)向量前导零计数指令(VCLZ),其接收输入向量C并提供输出向量作为结果,该输出向量的元素分别对应于输入向量C的元素的前导零计数;iv)向量尾随零计数指令(VCTZ),其接收输入向量C并提供输出向量作为结果,该输出向量的元素分别对应于输入向量C的元素的尾随零计数;v)向量计数指令(VCNT),其接收输入向量C并提供输出向量作为结果,该输出向量的各个元素分别对应于输入向量C的各个元素内的1的计数;以及vi)向量奇偶指令(VPAR),其接收输入向量C并提供输出向量作为结果,该输出向量的各个元素分别对应于输入向量C的各个元素的奇偶状态(奇或偶)。利用VMADD指令,以上列举的指令中的每一个由向量输入A、B和C的相应输入操作数元素的标量执行来完成。在进一步的实施例中,再一次如以下更详细描述的,由功能单元200执行的任何/全部指令对浮点以及整数操作数是可操作的。
图3示出图2的标量逻辑单元之一的实施例。如当前所述,标量逻辑单元能够对输入向量A、B和C的相应元素执行标量操作,以支持前述VMADD、VMADDH、VMADDL、VCLZ、VTLZ、VCNT和VPAR指令中的任何一种。
现在将描述当输入向量A、B、C的元素以及输出向量R的元素以浮点指定时的VMADD指令的操作。如本领域已知的,浮点中的数值的联接方式采用(符号)*(尾数)*(指数)的形式,其中符号值指示数值是正还是负,尾数值指定数值的“数字”,指数(exponent)值指定数值的阶数。VMADD指令可被如下指定((A_符号)(B_符号)(A_尾数)(B_尾数)(A_指数+B_指数))+(C_符号)(C_尾数)(C_指数)。
参见图3,乘法器301计算(A_符号)(B_符号)(A_尾数)(B_尾数)项作为至少(A_尾数)(B_尾数)的显式计算。乘积的符号可如下容易地计算出:i)如果A_符号与B_符号具有相同的值则为正;或者ii)如果A_符号与B_符号具有不同值则为负。乘积指数块302通过采用下列中的较大者来确定最终结果的指数的初始计算:i)(A_指数+B_指数);以及ii)C_指数。即,如果C值远大于A和B的乘积,则C项的阶将控制最终结果的阶。同样,如果AB远大于C,则AB的阶将控制最终结果的阶。
加法器305执行AB+C运算的加法。然而,显著地,在可按浮点形式执行加法之前,在实施例中,使AB项的指数(即,与乘法器301的输出相关联的指数)与C项的指数相同。指数差块303和移位器304用于实现该过程。具体地,指数差块303取AB项的指数与C项的指数之间的差(即,i)(A_指数+B_指数);以及ii)C_指数之间的差)。这两项的较小者也被标识(例如,通过分析乘积指数块302的输出)。这两项的较小者的尾数的二进制小数点位置,即AB乘积项或C项——具有较小的指数项的任一个——的尾数的二进制小数点位置“向左”移位特定数量的位位置,该数量对应于由差块303所确定的这两项之间的指数差。经移位的项以及其它未移位的项被传递到加法器305。
作为示例,如果AB乘积项对应于5.5555E8且C项对应于2.2222E6,则C项的尾数(2.2222)的二进制小数点位置将由移位器304向左移位两位(0.02222),使得加法器305可正确地将具有相同指数值的两个数的尾数相加。在该示例中,加法器305将正确地将5.5555E8和0.02222E8相加。因此,在实施例中,移位器304被耦合到差块303的输出以确定要向AB项和C项之一的尾数的二进制小数点位置应用的正确移位数量。在进一步的实施例中,AB项和C项之一的尾数的二进制小数点位置被移位而其它的未被移位。移位的尾数值以及未移位的尾数值被提供到加法器305。当然,在差块303确定AB项和C项的指数相同的情形中,不执行移位并且AB项和C项两者的尾数被未移位地传递到加法器305。
在实施例中,AB项和C项的符号值也被传递到加法器305,使得例如如果C项的符号是负,那么正确地进行有效减法AB–C。在这两项之间的有效减法(即,当AB项的符号不同于C项的符号时)与这两项的绝对值大致相等的情况下,加法器305的输出可能是接近于零的数。因此,加法器305输出处的尾数值可能在第一个1被观察到之前具有一串前导0。在这种情况下,为了产生较高精度的结果,在加法器305输出处的尾数值的二进制小数点应被移位以产生具有整数作为其第一个值的尾数。
例如,如果向加法器提供AB尾数及符号项-5.555566…以及C尾数及符号项+5.555555…,那么加法器305将产生输出-0.000011…。为了提高最终结果的精度,来自加法器305的结果的二进制小数点应向右移位5位以采用1.111111…的形式。由于二进制小数点向右移位对应于指数值的变化,因此指数值也将需要改变。在该特定示例中,将尾数二进制小数点向右移位5位对应于将指数值减小5。因此,当在加法器305输出处提供的尾数项具有前导零时,不仅其二进制小数点需要向右移位,而且乘积指数块303的输出处的指数项也需要被减小。在此,前导1预感器块306、归一化移位器307和指数加法器308被用于完成这些任务。
具体地,前导1预感器306标记加法器输出中的第一个(最左端)1的位置,并且向归一化移位器307指示加法器输出的二进制小数点应向右移位多少,并且向指数加法器308指示来自指数块302的指数值应被减小多少。在实施例中,加法器输出的二进制小数点的向右移动实际上是通过将加法器输出的数字内容向左移动来完成的。在相同的或者其它的实施例中,加法器308理解来自前导1预感器306的值要从乘积指数302输出值中减去。
在实施例中,前导1预感器如下操作。对于被提供给加法器305的这两个输入操作数(即,AB项的尾数和C项的尾数),前导1预感器306单独地确定这两项中的前导1位置并且标记这对前导1位置的最左位位置。例如,如果AB项的尾数是0001100101…并且C项的尾数是0000100000…,那么前导1预感器306将标记第四位位置,因为(AB尾数项的)第四位位置是这两个操作数中的最左端(或最高阶)的前导1。假设该确定是加法器305输出的前导1位置。在许多情况下,该假设将是正确的并且用于确定由归一化移位器307执行的加法器输出移位量以及由加法器308执行的指数减小量。
在一些情况下该假设将是错误的。在上述示例中提供的这两个操作数将由加法器相加以产生加法器输出0010000101…。在假设不正确的情况下,如在本示例中,这两个操作数的相加导致由前导1预感器所标识的位位置处的进位项(即,由前导1预感器所标识的加法器输出的位位置是0),因此由前导1预感器所标识的位置的左边一个位置的位位置是1。如此,在实施例中,在释放由前导1预感器306标记的假定值之前,其中该假定值作为加法器输出应被移位的量以及其指数应被减小的量,逻辑电路执行下列中的任一个或两者作为“检查”:i)查看由前导1指示器所标识的加法器305输出的位置是否是0;ii)查看加法器305输出中正好位于由前导1指示器所标识的位置左边的位置是否是1。如果这些条件中的任一个是真,那么正确的答案不是由前导1指示器306所标记的位位置,而是正好位于由前导1指示器所标记的位位置左边的位位置。在这种情况下,前导1指示器将基本上校正其假设并且向移位器307和加法器308提供正确信息。
在此值得注意的是,使用前导1预感器的原因是确定前导1位置的过程有些广泛并且可能花费一个或多个时钟周期。同样,由加法器305执行的加法也有些广泛并且可能花费一个或多个时钟周期。如果前导1确定被配置成“跟随”加法器305,那么将会花费两个或更多个时钟周期来确定AB+C的和以及该和的前导1位置。但是,利用图3所示的体系结构,加法器305的求和以及预感器306的前导1确定很大程度上并行进行,从而与串行方法相比减少了花费的总时钟周期时间。此外,即使前导1预感器306的结果可能是错误的并且因此被检查,上述“检查”操作也相对简单并且用于执行检查的逻辑端对端相对短,使得检查操作的时间代价可接受并且因此维持较好的整体解决方案。
一旦移位器307已将加法器305的结果移位并且加法器308已减少了指数值(如果任何此类移位和指数减小是可应用的),FMADD指令(AB+C)的“答案”已基本上被确定。执行最终处理以将其答案与期望精度和适当格式联接。该处理的一部分包括对尾数值进行舍入。在实施例中,指令可指定两种不同精度中的任一种:单精度或双精度。在进一步的实施例中,与双精度值相联接的位数量是单精度值所联接的两倍(或近似两倍)。在进一步的实施例中,单精度格式是由用于符号的1个位、用于尾数的23个位以及用于指数的8个位所组成的32位,并且双精度格式是由用于符号的1个位、用于尾数的52个位以及用于指数的11个位所组成的64位。在更进一步的实施例中,在功能单元300内部,利用高达128位的精度计算尾数。在此,乘法器301的输出宽度被布线成128位以处理两个64位整数值的整数乘法。同样,加法器305输出和移位器307输出也是128位。
如此,在多个实施例中,由功能单元300在内部计算的结果的尾数的位数可超出实际上作为最终结果的尾数提供的位数。因此,舍入操作查看最终提供的尾数之下的任何位是否是1—其被称为粘着位。在图3的体系结构中,尾随零逻辑块309确定移位器307的输出中的尾随零的数量。当与功能单元300的计算中的附加位的数量相比时,该数量指示最终提供的尾数之下的位中是否存在1。如果将尾数向左移位以消除前导0同时移位底部的零,那么需要考虑附加尾随零的数量(其与前导1块306所计算的向左移位量相等)。在此,为了正确地计算移位器307的输出中的尾随零的数量,尾随零检测器309应知晓由前导1预感器306施加的任何移位,因此尾随零检测器309也被观察到从前导1预感器306接收输入。
确定从最低阶(最右端)位位置开始并且向左逐位移动至每一个下一高阶位位置的零的数量,直至最低有效(最右端)值1的位置。如果尾随零的数量延伸至或超出(向左)给定精度尾数的最低有效(最右端)位位置,那么最低有效位位置被保持在其当前值(即,不进行上舍入)。否则,即发生上舍入,并且针对可适用精度的尾数的最低有效位位置增加:i)从0到1,或者ii)从1到0并且出现波动至下一较高位位置的进位项。
上舍入加法器310用于将值1加到移位器307中的结果尾数的最低有效位位置,以用于可适用的精度。采用加法器310的输出作为遵循期望精度的最终尾数值。在一实施例中,一直采用加法器310的输出作为遵循期望精度的最终尾数值,其中如果没有发生上舍入则将值0有效地加到移位器307输出,并且如果确实发生上舍入则在最右端位置处将值1加到移位器307输出以用于给定精度。如图3所示,粘着位计算逻辑311基于尾随零检测逻辑309的输出和期望精度来确定上舍入是否是必要的,并且上舍入控制逻辑312根据粘着位的确定,在最低有效位位置处将0或1提供到加法器310以用于期望精度(如果没有上舍入发生则将加入0,如果有上舍入要发生则加入1)。
注意,在图3的实施例中,尾随零检测逻辑309对提供到加法器305的操作数进行操作,使得类似于前导1预感器306,其可与加法器305并行地操作。在进一步的实施例中,尾随零检测器标识每个操作数中为1的最低有效(最右端)位值,并且标记这两个操作数中的最低有效位位置,作为确定加法器305输出中的尾随零数量的基础。由前导1预感器所引起的任何移位也可由尾随零检测器309来解决。即,对于给定精度,加法器305结果的任何移位将影响在确定它们是否延伸到或超出移位器307输出的最低有效位之前需要检测多少个零。注意,用于尾随零检测的该方法不需要任何“检查”(如前导1预感器那样),因为不可能(从数学方面而言)发生错误。
以上描述是就VMADD指令的浮点计算而言撰写的。在整数VMADD指令的情况下,整数操作数被简单地提供给乘法器301输入。在此,在支持53位双精度浮点尾数计算的实施例中,乘法器被设计成处理64位整数乘法。如此,乘法器输出是128位宽。在64位整数操作的情况下,在一实施例中,用64个零填补C项左侧,使得其最低有效位与乘法器301输出的最低有效位对齐。即,被提供给加法器305的C项操作数具有64位零作为其左半部分以及具有64位C输入操作数作为其右半部分。由于该实施例支持1双精度或64位整数以及2单精度或232位整数操作的运算,对于32位整数,这两个C项中每一个的上半部分(每32位)用零来填补以使得它们变为64位宽。在32位整数操作的情况下,适当地填补了C项。在一实施例中,通过利用移位器304将C项向右移位,有效地完成了零填补。在进一步的实施例中,对于整数操作,指数差块303用于根据整数运算精度来指定移位量。即,例如,对于64位整数操作,指数差块303被配置成将输入信号发送至移位器304,该信号导致移位器304将C项向右移位64位;以及对于32位操作,指数差块303被配置成将输入信号发送至移位器304,该信号导致移位器304将C项向右移位96位。
加法器305将乘法器输出和经移位、经对齐的C项值相加以确定AB+C的整数值。因为AB+C整数值的大小可能超出最终结果的可允许位宽度,因此在一实施例中,加法器305的输出的高半部分或低半部分由移位器作为最终结果来传递。例如,在其中加法器305的输出是128位宽且应用64位整数操作的实施例中,指令的结果仅可为64位宽但是内部功能单元计算128位整数值。如此,对于整数操作VMADDH和VMADDL存在两种不同的VMADD指令。VMADDH提供128位加法器输出的最高有效64位,并且VMADDL提供128位加法器输出的最低有效64位。在整数VMADD操作的情况下,除了可能向加法器310加入无意义的零之外,不使用乘积指数块302、前导1预感器307、指数加法器308、尾随零检测器309、粘着位逻辑311以及上舍入控制逻辑312。
图4a示出上述功能单元的浮点VMADD操作的实施例,并且图4b示出上述功能单元的整数VMADDL/H操作的实施例。参见图4a,将操作数A和B的相应尾数值相乘(401)。基本上并行地,确定AB项和C项的指数值之差(402),并且采用AB项指数和C项指数中的最大者作为结果的初始指数(403)。基于所确定的AB项和C项的指数之差,将具有较小指数的项的尾数移位(404)以与具有较大指数的项的尾数对齐。随后将AB项和C项的经对齐的尾数相加(405)。基本上并行地,预测加法器结果的前导1(406)。相对于AB+C的和结果检查对前导1的预测(407)。基于前导1DE确定,将AB+C的尾数求和的结果移位从而以整数值作为开头(408)并且调整指令的指数结果(409)。如果必要则执行上舍入(410)并且基于指定精度提供尾数值。
参见图4b,将整数A和B项相乘(411)并且填补C项(412)以与AB乘积对齐。将AB和C整数项相加(413)。如果指令指定高部分则提供AB+C的高部分,或者如果指令指定低部分则提供AB+C的低部分。注意,与VMADDL连续地执行VMADDH并且将结果存储在分开的位置允许系统保持AB+C的总值。
值得重复的是,对功能单元300的上述说明描述了可在向量功能单元中多次例示,使得向量乘加指令(VMADD)被执行的功能单元。
图3的功能单元300还可被增强以执行以下指令中的任何一个或多个的标量分量:i)向量前导零计数指令(VCLZ),其接收输入向量C并提供输出向量作为结果,该输出向量的元素分别对应于输入向量C的元素的前导零计数;ii)向量尾随零计数指令(VCTZ),其接收输入向量C并提供输出向量作为结果,该输出向量的元素分别对应于输入向量C的元素的尾随零计数;iii)向量计数指令(VCNT),其接收输入向量C并提供输出向量作为结果,该输出向量的各个元素分别对应于输入向量C的各个元素内的1的计数;以及iv)向量奇偶指令(VPAR),其接收输入向量C并提供输出向量作为结果,该输出向量的各个元素分别对应于输入向量C的各个元素的奇偶状态(奇或偶)。
图5示出增强功能单元500,其包括附加逻辑和逻辑上方的布线以及图3所示的布线,以执行VCLZ、VCTZ、VCNT和VPAR指令的标量分量。在一实施例中,相对于这些指令,沿着接收AB+C指令的C操作数的数据路径接收由图5的功能单元500所处理的向量的元素。应当强调,这仅仅是一种方法,并且从设计者选择方面而言,可沿着AB+C指令的A、B和C操作数中任何一个的数据路径来接收VCLZ、VCTZ、VCNT和VPAR指令中任何一种的操作数。为方便起见,未示出用于执行VMADD指令的多个逻辑块之间的互连。应当理解,此类互连是存在的(例如,如图3所示)。当然,可利用半导体逻辑电路来实现图3和图5两者所示的任何块。
根据图5的特定实施例,因为VCLZ、VCTZ、VCNT和VPAR指令中的任何一种的操作数是沿着C操作数的数据路径接收的,所以操作数由对齐移位器504接收(注意,任何“移位器”可被实现为移位寄存器)。当指令指定VCLZ、VCTZ、VCNT和VPAR指令——与VMADD指令相对——中的任何一种时,对齐移位器忽略来自指数差单元503的任何输入并且简单地将C操作数至少提供给用于相应指令的可应用逻辑。即,用于VCLZ指令的逻辑506,用于VCTZ指令的逻辑509,以及用于VCNT指令的逻辑530。此外,对齐移位器504在承载用于VMADD指令的AB项的尾数的数据路径上提供0的良性值。
相对于为所提供的操作数提供前导零计数的VCLZ指令,比较图5与图3,注意逻辑506被实现为前导1和前导0预感器逻辑电路(与图3的前导1预感器逻辑电路相对)。在此,注意操作数中前导0的数量与操作数中前导1的位置有关。具体地,对于位宽度已知的操作数,前导0的数量等于操作数的位宽度与操作数中前导1的位位置之间的差。记住,在一实施例中,前导1预感器306确定用于VMADD指令的AB和C尾数项两者中的前导1位置并且标记这两项的最高阶(最左端)前导1的位置。在此,因为对齐移位器504被配置成对VLCZ指令的AB项提供值0,所以仅C项的前导1位置(用于VLCZ指令的操作数)被标记。由此,可确定操作数的前导零的数量。注意,如果可应用的位长度被指定或以其它方式已知,则不同的操作数位长度可被容易地处理(例如,32位或64位)。
记住,图3的前导1预感器306被视为“预感器”是因为在某些情况下它的初始答案可能是不正确的。具体地,需要检查加法器305的输出。但是,在VCLZ指令的情况下,不会发生这种问题,因为加法器305未被使用。如此,来自逻辑506的“答案”是正确的,无需检查。前导0计数最后被传递到格式化逻辑513以为指令提供适当格式的答案。在一实施例中,前导0计数(类似于用于VMADD指令的前导1计数)被传递到指数调整加法器508,指数调整加法器508将其转发到格式化逻辑513。
相对于为输入操作数提供尾随零计数的VCTZ指令,操作数C被传递到尾随零确定逻辑509。根据图3的讨论可知,尾随零确定逻辑309标识每个操作数(AB和C)中值为1的最低有效(最右端)位,并且标记这两个操作数中的最低有效位位置作为确定加法器305的输出中的尾随零数量的基础。相对于VCTZ指令的操作应用相同操作,另外注意AB项被设置为零使得仅C项(用于VCTZ指令的操作数)控制由逻辑509提供的最终答案。答案被最终路由到格式化逻辑513,格式化逻辑513为指令提供答案(可由诸如指数调整加法器508之类的另一个块预先处理该答案)。
相对于VCNT指令,1计数逻辑520为C操作数中存在的1数量计数,并且答案被最终路由到格式化逻辑513。相对于VPAR指令,奇偶逻辑530确定C操作数的奇偶值(例如,操作数中存在奇数个1还是偶数个1)并且该答案被最终路由到格式化逻辑513,格式化逻辑513为指令提供该答案。
图6a到图6d示出当图5的功能单元500的上述操作被并行地执行N次以实现向量操作时图2的功能单元200的操作。对于VCLZ指令,参见图6A,接收操作数/元素的输入向量(601a),确定每一个操作数中的前导0的数量(602a)以及为每一个操作数提供具有前导0计数的输出向量(603a)。对于VCTZ指令,参见图6B,接收操作数/元素的输入向量(601b),确定每一个操作数中的尾随0数量(602b)以及为每一个操作数提供具有尾随0计数的输出向量(603b)。对于VCNT指令,参见图6C,接收操作数/元素的输入向量(601c),确定每一个操作数中的1数量(602c)以及为每一个操作数提供具有1计数的输出向量(603c)。对于VPAR指令,参见图6D,接收操作数/元素的输入向量(601d),确定每一个操作数的奇偶性(602d)以及为每一个操作数提供具有奇偶性的输出向量(603d)。
如上所述,以上所讨论的功能单元可在半导体处理器的指令执行单元内实现。
图7示出通用处理核700,其被认为是描述了许多不同类型的处理核体系结构,诸如复杂指令集(CISC)、精简指令集(RISC)以及超长指令字(VLIW)。图7的通用处理核700包括:1)取出单元703,其(例如从高速缓存和/或存储器)取出指令;2)解码单元704,其解码指令;3)调度单元705,其确定对执行单元706的时序和/或指令发布次序(注意调度器是可选的);4)执行单元706,其执行指令(典型指令执行单元包括分支执行单元、整数算术执行单元(例如ALU)、浮点算术执行单元(例如FPU)以及存储器访问执行单元);以及5)回退单元707,其表明指令成功完成。注意,处理核700可以或者可以不采用微代码708。
尽管上述功能单元示出端对端硬连接数据路径,但是总的来说上述任何/全部处理有可能利用微代码而不是专用逻辑来实现。在微代码处理器的情况下,微操作码通常被存储在其上构建处理器的半导体芯片内的非易失性机器可读介质(诸如只读存储器(ROM))中并且导致处理器内的执行单元执行由指令调用的期望功能。
具有上述功能的处理器也可被实现到多种计算系统中。图8示出计算系统(例如计算机)的实施例。图8的示例性计算系统包括:1)一个或多个处理器801,其可被设计成包括向量逻辑简化指令;2)存储器控制中枢(MCH)802;3)系统存储器803(其存在不同类型,诸如DDRRAM、EDORAM等);4)高速缓存804;5)I/O控制中枢(ICH)805;6)图形处理器806;7)显示器/屏幕807(其存在不同类型,诸如阴极射线管(CRT)、平板、薄膜晶体管(TFT)、液晶显示器(LCD)、DPL等);一个或多个I/O器件808。
一个或多个处理器801执行指令以便于执行计算系统实现的任何软件例程。指令经常涉及对数据执行的某类操作。数据和指令两者被存储在系统存储器803和高速缓存804中。高速缓存804通常被设计成等待时间比系统存储器803更短。例如,高速缓存804可被集成到与处理器相同的硅芯片上和/或利用较快SRAM单元来构造,同时系统存储器803可利用较慢DRAM单元来构造。通过趋向于在与系统存储器803相对的高速缓存804中存储较频繁使用的指令和数据,改善了计算系统的整体性能效率。
故意使系统存储器803可用于计算系统内的其它组件。例如,从多个接口(例如,键盘和鼠标、打印机端口、局域网端口、调制解调器端口等)接收到计算系统的或从计算系统的内部存储元件(例如,硬盘驱动器)取回的数据在它们被软件程序的实现过程中的一个或多个处理器801操作之前经常在系统存储器803中被临时性地排队。类似地,软件程序所确定的应当通过计算系统接口之一从计算系统发送到外部实体或存储到内部存储元件的数据在其被发送或存储之前经常在系统存储器903中被临时性地排队。
ICH805负责确保此类数据在系统存储器803与其适当的相应计算系统接口(以及内部存储器件,如果计算系统是这样设计的话)之间正确地传递。MCH802负责管理处理器801、接口以及内部存储元件之间对于系统存储器803访问的多种竞争请求,这些请求可能在时间上彼此紧接地出现。
一个或多个I/O器件808同样被实现在典型计算系统中。I/O器件通常负责将数据传递到计算系统(例如,网络适配器)和/或传递来自计算系统的数据;或者,对于大规模非易失性存储而言,在计算系统内部(例如硬盘驱动器)传递数据。ICH805在其自身与所示I/O器件808之间具有双向点对点链路。
在上述说明书中,已经参考特定示例性实施例描述了本发明。然而,显然可对这些实施例作出各种修改和改变,而不背离如所附权利要求所述的本发明的更宽泛精神和范围。因此,说明书和附图应被认为是说明性而非限制性意义。

Claims (14)

1.一种向量功能单元,其中所述向量功能单元被实现在半导体芯片上以执行N维向量操作,所述向量功能单元包括:
a)N个功能单元,所述N个功能单元中的每一个包括逻辑电路,所述逻辑电路用于执行:
第一整数乘加指令,其提供第一整数乘加运算的最高阶位而不提供最低阶位;
第二整数乘加指令,其提供第二整数乘加运算的最低阶位而不提供最高阶位;以及,
浮点乘加指令,
所述逻辑电路包括乘法器、加法器以及移位寄存器以支持所述第一整数乘加指令和所述第二整数乘加指令以及所述浮点乘加指令,所述移位寄存器插在所述加法器之前以将C项与所述乘法器的AB项对齐来支持所述第一整数乘加指令和所述第二整数乘加指令以及所述浮点乘加指令,其中与对于所述整数乘加指令相比,对于所述浮点乘加指令,不同的移位策略被用于所述移位寄存器,所述移位策略包括标识浮点值的尾数值中的前导零的数量以及作为响应基于所确定的前导零的数量将所述尾数值移位,其中所述前导零进一步可用于调整所述浮点值的指数值;以及
b)掩模电路,该掩模电路用于允许提供来自所述N个功能单元中的所选单元的输出结果。
2.如权利要求1所述的向量功能单元,其特征在于,所述功能单元中的每一个支持32位和64位操作。
3.如权利要求1所述的向量功能单元,其特征在于,所述功能单元中的每一个包括在所述加法器之后的第二移位寄存器。
4.如权利要求3所述的向量功能单元,其特征在于,所述加法器的输出的位宽大于所述第一整数乘加指令和所述第二整数乘加指令中任一个的标量结果的位宽。
5.如权利要求4所述的向量功能单元,其特征在于,所述移位寄存器耦合到用于计算AB项的指数值和C项的指数值之差的逻辑电路。
6.一种用于执行向量操作的方法,包括:
在半导体芯片上执行向量操作,包括利用在所述半导体芯片上实现的向量功能单元执行第一向量指令,
利用所述向量功能单元执行第二向量指令,以及
利用所述向量功能单元执行第三向量指令,所述向量功能单元对元素进行掩模以提供所述向量操作的所选元素,
所述第一向量指令是提供最高阶位而不提供最低阶位的第一向量整数乘加指令,所述第二向量指令是提供最低阶位而不提供最高阶位的第二向量乘加指令,所述第三向量指令是浮点乘加指令,其中相同的乘法器、加法器和移位寄存器被用于对于相同的向量元素位置执行所述第一向量指令、所述第二向量指令和所述第三向量指令,并且其中所述移位寄存器被用于对于所述第一向量指令、所述第二向量指令和所述第三向量指令中的每一个将C项与所述乘法器的AB项对齐,其中与对于所述第一向量指令和所述第二向量指令相比,对于所述第三向量指令,不同的移位策略被用于所述移位寄存器,所述移位策略包括标识浮点值的尾数值中的前导零的数量以及作为响应基于所确定的前导零的数量将所述尾数值移位,其中所述前导零进一步可用于调整所述浮点值的指数值。
7.如权利要求6所述的方法,其特征在于,还包括在计算系统的不同存储位置中存储所述第一向量指令的结果并且存储所述第二向量指令的结果。
8.如权利要求6所述的方法,其特征在于,所述第一向量整数乘加指令的结果提供比所述第二向量整数乘加指令的结果更多的位。
9.如权利要求8所述的方法,其特征在于,所述第一向量整数乘加指令提供64位,且所述第二向量整数乘加指令提供32位。
10.一种计算系统,包括:
非易失性存储单元;以及
处理器,所述处理器被实现在半导体芯片上以执行N维向量操作,所述处理器包括N个功能单元,所述N个功能单元中的每一个包括逻辑电路,所述逻辑电路用于执行:
第一整数乘加指令,其提供第一整数乘加运算的最高阶位而不提供最低阶位;以及
第二整数乘加指令,其提供第二整数乘加运算的最低阶位而不提供最高阶位;以及
浮点乘加指令,
所述逻辑电路包括乘法器、加法器以及移位寄存器以支持所述第一整数乘加指令和所述第二整数乘加指令以及所述浮点乘加指令,所述移位寄存器插在所述加法器之前以将C项与所述乘法器的AB项对齐来支持所述第一整数乘加指令和所述第二整数乘加指令以及所述浮点乘加指令,其中与对于所述整数乘加指令相比,对于所述浮点乘加指令,不同的移位策略被用于所述移位寄存器,所述移位策略包括标识浮点值的尾数值中的前导零的数量以及作为响应基于所确定的前导零的数量将所述尾数值移位,其中所述前导零进一步可用于调整所述浮点值的指数值;并且
所述处理器还包括用于允许提供来自所述N个功能单元中的所选单元的输出结果的掩模电路。
11.如权利要求10所述的计算系统,其特征在于,所述功能单元中的每一个支持32位和64位操作。
12.如权利要求10所述的计算系统,其特征在于,所述功能单元中的每一个包括在所述加法器之后的第二移位寄存器。
13.如权利要求12所述的计算系统,其特征在于,所述加法器的输出的位宽大于所述第一整数乘加指令和所述第二整数乘加指令中任一个的标量结果的位宽。
14.如权利要求12所述的计算系统,其特征在于,所述移位寄存器耦合到用于计算AB项的指数值和C项的指数值之差的逻辑电路。
CN201180045903.6A 2010-09-24 2011-09-23 用于向量整数乘加指令的功能单元 Expired - Fee Related CN103119579B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/890,497 2010-09-24
US12/890,497 US8667042B2 (en) 2010-09-24 2010-09-24 Functional unit for vector integer multiply add instruction
PCT/US2011/052899 WO2012040545A2 (en) 2010-09-24 2011-09-23 Functional unit for vector integer multiply add instruction

Publications (2)

Publication Number Publication Date
CN103119579A CN103119579A (zh) 2013-05-22
CN103119579B true CN103119579B (zh) 2016-08-03

Family

ID=45871744

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180045903.6A Expired - Fee Related CN103119579B (zh) 2010-09-24 2011-09-23 用于向量整数乘加指令的功能单元

Country Status (9)

Country Link
US (1) US8667042B2 (zh)
JP (2) JP2013543174A (zh)
KR (1) KR101427637B1 (zh)
CN (1) CN103119579B (zh)
BR (1) BR112013006744A2 (zh)
DE (1) DE112011103196T5 (zh)
GB (1) GB2497450B (zh)
TW (1) TWI455021B (zh)
WO (1) WO2012040545A2 (zh)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101595637B1 (ko) 2011-04-01 2016-02-18 인텔 코포레이션 벡터 친숙형 명령어 형식 및 그의 실행
US8930432B2 (en) * 2011-08-04 2015-01-06 International Business Machines Corporation Floating point execution unit with fixed point functionality
WO2013095553A1 (en) 2011-12-22 2013-06-27 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US9355068B2 (en) 2012-06-29 2016-05-31 Intel Corporation Vector multiplication with operand base system conversion and re-conversion
US10095516B2 (en) * 2012-06-29 2018-10-09 Intel Corporation Vector multiplication with accumulation in large register space
US9122475B2 (en) * 2012-09-28 2015-09-01 Intel Corporation Instruction for shifting bits left with pulling ones into less significant bits
US9372692B2 (en) 2012-12-29 2016-06-21 Intel Corporation Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality
US9323531B2 (en) 2013-03-15 2016-04-26 Intel Corporation Systems, apparatuses, and methods for determining a trailing least significant masking bit of a writemask register
US9990202B2 (en) * 2013-06-28 2018-06-05 Intel Corporation Packed data element predication processors, methods, systems, and instructions
US20150052330A1 (en) * 2013-08-14 2015-02-19 Qualcomm Incorporated Vector arithmetic reduction
CN103677742B (zh) * 2013-12-13 2016-08-17 广西科技大学 多浮点操作数加/减运算控制器
WO2015096167A1 (en) * 2013-12-28 2015-07-02 Intel Corporation Rsa algorithm acceleration processors, methods, systems, and instructions
US9507565B1 (en) 2014-02-14 2016-11-29 Altera Corporation Programmable device implementing fixed and floating point functionality in a mixed architecture
US9524143B2 (en) * 2014-06-26 2016-12-20 Arm Limited Apparatus and method for efficient division performance
US9678749B2 (en) * 2014-12-22 2017-06-13 Intel Corporation Instruction and logic for shift-sum multiplier
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US11061672B2 (en) * 2015-10-02 2021-07-13 Via Alliance Semiconductor Co., Ltd. Chained split execution of fused compound arithmetic operations
US20170177336A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Hardware cancellation monitor for floating point operations
US10671347B2 (en) * 2016-01-28 2020-06-02 International Business Machines Corporation Stochastic rounding floating-point multiply instruction using entropy from a register
US10489152B2 (en) 2016-01-28 2019-11-26 International Business Machines Corporation Stochastic rounding floating-point add instruction using entropy from a register
GB2553783B (en) * 2016-09-13 2020-11-04 Advanced Risc Mach Ltd Vector multiply-add instruction
US10474458B2 (en) * 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US11436010B2 (en) 2017-06-30 2022-09-06 Intel Corporation Method and apparatus for vectorizing indirect update loops
CN109388427A (zh) * 2017-08-11 2019-02-26 龙芯中科技术有限公司 向量处理方法、向量处理单元和微处理器
US10732929B2 (en) * 2018-01-09 2020-08-04 Samsung Electronics Co., Ltd. Computing accelerator using a lookup table
DE102018209901A1 (de) * 2018-06-19 2019-12-19 Robert Bosch Gmbh Recheneinheit, Verfahren und Computerprogramm zum Multiplizieren zumindest zweier Multiplikanden
JPWO2020066375A1 (ja) * 2018-09-25 2021-08-30 日本電気株式会社 情報処理装置、情報処理方法、プログラム
JP7115211B2 (ja) * 2018-10-18 2022-08-09 富士通株式会社 演算処理装置および演算処理装置の制御方法
CN113396401A (zh) 2019-03-15 2021-09-14 英特尔公司 多贴片存储器管理
US20230075534A1 (en) * 2021-08-19 2023-03-09 International Business Machines Corporation Masked shifted add operation

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1180864A (zh) * 1996-08-19 1998-05-06 三星电子株式会社 多媒体信号处理器中的单指令多数据处理方法及其装置
US6324638B1 (en) * 1999-03-31 2001-11-27 International Business Machines Corporation Processor having vector processing capability and method for executing a vector instruction in a processor
TW200929062A (en) * 2007-10-22 2009-07-01 Ibm Scalar float register overlay on vector register file for efficient register allocation and scalar float and vector register sharing

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4849923A (en) 1986-06-27 1989-07-18 Digital Equipment Corporation Apparatus and method for execution of floating point operations
US4852039A (en) 1987-06-19 1989-07-25 Digital Equipment Corporation Apparatus and method for accelerating floating point addition and subtraction operations by accelerating the effective subtraction procedure
JPH03251916A (ja) * 1990-03-01 1991-11-11 Toshiba Corp 浮動小数点加減算装置
JPH0520028A (ja) * 1990-12-28 1993-01-29 Matsushita Electric Ind Co Ltd 加減算のための浮動小数点演算装置の仮数部処理回路
US5317527A (en) 1993-02-10 1994-05-31 Digital Equipment Corporation Leading one/zero bit detector for floating point operation
US5341319A (en) 1993-02-10 1994-08-23 Digital Equipment Corporation Method and apparatus for controlling a rounding operation in a floating point multiplier circuit
JP3257278B2 (ja) * 1994-09-19 2002-02-18 株式会社日立製作所 冗長なシフト数予測とシフト誤り補正を用いた正規化装置
JP3691538B2 (ja) * 1995-03-07 2005-09-07 富士通株式会社 ベクトルデータ加算方法及びベクトルデータ乗算方法
US5784305A (en) * 1995-05-01 1998-07-21 Nec Corporation Multiply-adder unit
EP0837390A1 (en) * 1996-10-18 1998-04-22 Texas Instruments Incorporated Improvements in or relating to microprocessor integrated circuits
JPH10143355A (ja) * 1996-10-30 1998-05-29 Texas Instr Inc <Ti> 種々の書式のオペランドを高効率で乗算する能力を有するマイクロプロセッサ及びその演算方法
US5928316A (en) * 1996-11-18 1999-07-27 Samsung Electronics Co., Ltd. Fused floating-point multiply-and-accumulate unit with carry correction
KR100291383B1 (ko) * 1996-11-18 2001-09-17 윤종용 디지털신호처리를위한명령을지원하는모듈계산장치및방법
US6401194B1 (en) 1997-01-28 2002-06-04 Samsung Electronics Co., Ltd. Execution unit for processing a data stream independently and in parallel
JP3544846B2 (ja) * 1997-02-13 2004-07-21 株式会社東芝 論理回路及び浮動小数点演算装置
US5991531A (en) * 1997-02-24 1999-11-23 Samsung Electronics Co., Ltd. Scalable width vector processor architecture for efficient emulation
US6578059B1 (en) 1998-10-10 2003-06-10 Institute For The Development Of Emerging Architectures, L.L.C. Methods and apparatus for controlling exponent range in floating-point calculations
US6378067B1 (en) 1998-10-12 2002-04-23 Idea Corporation Exception reporting architecture for SIMD-FP instructions
US6292886B1 (en) 1998-10-12 2001-09-18 Intel Corporation Scalar hardware for performing SIMD operations
US6321327B1 (en) 1998-12-30 2001-11-20 Intel Corporation Method for setting a bit associated with each component of packed floating-pint operand that is normalized in SIMD operations
US6480872B1 (en) * 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
US6360241B1 (en) 1999-02-01 2002-03-19 Compaq Information Technologies Goup, L.P. Computer method and apparatus for division and square root operations using signed digit
US6732135B1 (en) 1999-02-01 2004-05-04 Hewlett-Packard Development Company, L.P. Method and apparatus for accumulating partial quotients in a digital processor
US6366942B1 (en) 1999-02-01 2002-04-02 Compaq Information Technologies Group Lp Method and apparatus for rounding floating point results in a digital processing system
US7127483B2 (en) 2001-12-26 2006-10-24 Hewlett-Packard Development Company, L.P. Method and system of a microprocessor subtraction-division floating point divider
US8090928B2 (en) * 2002-06-28 2012-01-03 Intellectual Ventures I Llc Methods and apparatus for processing scalar and vector instructions
US7831804B2 (en) * 2004-06-22 2010-11-09 St Microelectronics S.R.L. Multidimensional processor architecture
US7707236B2 (en) * 2004-08-13 2010-04-27 Analog Devices, Inc. Methods and apparatus for an efficient floating point ALU
US7225323B2 (en) * 2004-11-10 2007-05-29 Nvidia Corporation Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines
KR100911786B1 (ko) * 2004-11-10 2009-08-12 엔비디아 코포레이션 다목적 승산-가산 기능 유닛
US20060179092A1 (en) 2005-02-10 2006-08-10 Schmookler Martin S System and method for executing fixed point divide operations using a floating point multiply-add pipeline
US7543119B2 (en) * 2005-02-10 2009-06-02 Richard Edward Hessel Vector processor
JP2006227939A (ja) * 2005-02-17 2006-08-31 Matsushita Electric Ind Co Ltd 演算装置
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
US20070074008A1 (en) 2005-09-28 2007-03-29 Donofrio David D Mixed mode floating-point pipeline with extended functions
US20090063608A1 (en) * 2007-09-04 2009-03-05 Eric Oliver Mejdrich Full Vector Width Cross Product Using Recirculation for Area Optimization
US7809925B2 (en) * 2007-12-07 2010-10-05 International Business Machines Corporation Processing unit incorporating vectorizable execution unit
US7945764B2 (en) * 2008-01-11 2011-05-17 International Business Machines Corporation Processing unit incorporating multirate execution unit
US8356160B2 (en) * 2008-01-15 2013-01-15 International Business Machines Corporation Pipelined multiple operand minimum and maximum function
US8139061B2 (en) * 2008-08-01 2012-03-20 International Business Machines Corporation Floating point execution unit for calculating a one minus dot product value in a single pass
US8555034B2 (en) * 2009-12-15 2013-10-08 Oracle America, Inc. Execution of variable width vector processing instructions
US8606840B2 (en) * 2010-03-17 2013-12-10 Oracle International Corporation Apparatus and method for floating-point fused multiply add
US8629867B2 (en) * 2010-06-04 2014-01-14 International Business Machines Corporation Performing vector multiplication
US20110320765A1 (en) * 2010-06-28 2011-12-29 International Business Machines Corporation Variable width vector instruction processor
US8676871B2 (en) * 2010-09-24 2014-03-18 Intel Corporation Functional unit capable of executing approximations of functions
US9092213B2 (en) * 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1180864A (zh) * 1996-08-19 1998-05-06 三星电子株式会社 多媒体信号处理器中的单指令多数据处理方法及其装置
US6324638B1 (en) * 1999-03-31 2001-11-27 International Business Machines Corporation Processor having vector processing capability and method for executing a vector instruction in a processor
TW200929062A (en) * 2007-10-22 2009-07-01 Ibm Scalar float register overlay on vector register file for efficient register allocation and scalar float and vector register sharing

Also Published As

Publication number Publication date
CN103119579A (zh) 2013-05-22
JP2015111421A (ja) 2015-06-18
KR20130063532A (ko) 2013-06-14
GB2497450B (en) 2017-08-02
TW201237743A (en) 2012-09-16
US8667042B2 (en) 2014-03-04
US20120078992A1 (en) 2012-03-29
BR112013006744A2 (pt) 2019-09-24
GB201303473D0 (en) 2013-04-10
WO2012040545A2 (en) 2012-03-29
GB2497450A (en) 2013-06-12
WO2012040545A3 (en) 2012-06-14
JP2013543174A (ja) 2013-11-28
DE112011103196T5 (de) 2013-09-19
KR101427637B1 (ko) 2014-08-07
WO2012040545A9 (en) 2012-10-04
TWI455021B (zh) 2014-10-01
JP6248328B2 (ja) 2017-12-20

Similar Documents

Publication Publication Date Title
CN103119579B (zh) 用于向量整数乘加指令的功能单元
US10649733B2 (en) Multiply add functional unit capable of executing scale, round, getexp, round, getmant, reduce, range and class instructions
CN103119578B (zh) 用于向量前导零、向量后导零、向量操作数1计数和向量奇偶性计算的功能单元
US8676871B2 (en) Functional unit capable of executing approximations of functions
CN103109262B (zh) 在半导体芯片上实现的向量逻辑归约操作
US11182127B2 (en) Binary floating-point multiply and scale operation for compute-intensive numerical applications and apparatuses
CN103119532B (zh) 处理器、指令执行方法和计算系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160803