用于向量整数乘加指令的功能单元的制作方法

文档序号:6361834阅读:294来源:国知局
专利名称:用于向量整数乘加指令的功能单元的制作方法
技术领域
本发明领域一般地涉及计算机系统,并且尤其涉及用于执行向量乘加指令以及使用逻辑块的其它指令的处理器体系结构,其中该逻辑块用于计算向量乘加结果。
背景技术
两种类型的处理器体系结构在计算机科学领域中被广泛认知:“标量”和“向量”。标量处理器被设计成执行对单个数据集进行操作的指令,然而向量处理器被设计成执行对多个数据集进行操作的指令。图1A和图1B示出比较示例,展示了标量处理器和向量处理器之间的基本差异。图1A示出标量AND (与)指令的示例,其中对单个操作数集(A和B)进行与操作(ANDed)以产生单个(或“标量”)结果C (即,AB=C)。相比之下,图1B示出向量AND指令的示例,其中两个操作数集A/B和D/E分别被并行地进行与操作以同时产生向量结果C和F(BP, A.AND.B=C 和 D.AND.E=F)。如本领域所公知的,通常输入操作数和输出结果两者均存储在专用寄存器中。例如,许多指令将具有两个输入操作数。因此,两个不同的输入寄存器将被用于临时存储相应输入操作数。此外,这些相同指令将产生输出值,该输出值将被临时存储在第三(结果)寄存器中。在图1A和图1B中观察到相应输入101a,b和102a,b以及结果寄存器103a,b。显著地,“标量”对比“向量”特征是容易区分的。S卩,观察到,图1A的标量设计的输入寄存器IOla和102a仅仅保存标量值(分别为A和B)。同样,还观察到,图1A的标量设计的结果寄存器103a仅保存标量值(C)。相比之下,观察到,图1B的向量系统的输入寄存器IOlb和102b保存向量(在寄存器IOlb中保存A、D,以及在寄存器102b中保存B、E)。同样,还观察到图1B的向量系统的结果寄存器103a保存向量值(C、F)。就术语而言,图1B的向量系统的寄存器101b、102b和103b中的每一个的内容可被整体地称为“向量”,并且向量内的各个标量值中的每一个可被称为“元素”。因此,例如,观察到,寄存器IOlb存储“向量” A、D,“向量” A、D由“元素” A和“元素” D组成。已知只有标量或SMD乘法操作已在半导体芯片处理器中被实际地实现为单个处理器指令。已知已在半导体芯片处理器中实现的标量或SMD乘法指令包括“乘”指令(MUL)和“乘高”指令(MULH),其中“乘”指令提供两个整数输入操作数的乘积的低阶位,而“乘高”指令提供标量整数乘法操作的高阶位。已知已在半导体处理器芯片中被实现为标量或SMD指令的其它指令包括“前导零计数” CLZ指令、“尾随零计数”指令CTZ、以及“计数”指令CNT。标量CLZ指令接收标量输入A并返回在A中最高阶I之前的A中O的数量(例如,如果A=1000,则CLZ的结果=0 ;如果A=0100,则CLZ的结果=1 ;如果A=0010,则CLZ的结果=2 ;等等)。标量CTZ指令接收标量输入A并返回在A中最低阶I之后的A中O的数量(例如,如果A=1000,则CTZ的结果=3 ;如果A=OlOO,则CTZ的结果=2 ;如果A=OOlO,则CTZ的结果=1 ;等等)。标量CNT指令接收标量输入A并返回A中的I的数量(例如,如果A=IOll,则CLZ的结果=3 ;如果A=IOOl,则CLZ的结果=2 ;如果A=OOlO,则CLZ的结果=1 ;等等)。


本发明在附图中作为示例而非限制地示出,其中类似的附图标记指示相似的元件,附图中:图1a和图1b不出标量和向量逻辑操作;图2示出向量乘加功能单元;图3示出可用于图2的功能单元200j至200_N中的每一个的电子功能单元的实施例;图4a示出向量浮点乘加操作;图4b示出向量整数浮点操作;图5示出图3的功能单元的实施例,该功能单元具有用于执行前导零、尾随零、操作数I计数以及奇偶指令的扩展逻辑;图6a到图6d分别示出以下指令的执行:前导零确定、尾随零确定、操作数I计数以及操作数奇偶确定;图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_l) * (B_l)) +C_l ;标量逻辑单元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还示出,为了实现与SMD操作相对的向量操作,可将掩模层并入到输出电路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的各个元素内的I的计数;以及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_符号与[符号具有不同值则为负。乘积指数块302通过采用下列中的较大者来确定最终结果的指数的初始计算:i) (A_指数+B_指数);以及ii)C_指数。即,如果C值远大于A和B的乘积,则C项的阶将控制最终结果的阶。同样,如果AB远大于C,则AB的阶将控制最终结果的阶。加法器305执行AB+C运算的加法。然而,显著地,在可按浮点形式执行加法之前,在实施例中,使AB项的指数(S卩,与乘法器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输出处的尾数值可能在第一个I被观察到之前具有一串前导
O。在这种情况下,为了产生较高精度的结果,在加法器305输出处的尾数值的二进制小数点应被移位以产生具有整数作为其第一个值的尾数。例如,如果向加法器提供AB尾数及符号项-5.555566…以及C尾数及符号项+5.555555…,那么加法器305将产生输出-0.000011...。为了提高最终结果的精度,来自加法器305的结果的二进制小数点应向右移位5位以采用1.111111…的形式。由于二进制小数点向右移位对应于指数值的变化,因此指数值也将需要改变。在该特定示例中,将尾数二进制小数点向右移位5位对应于将指数值减小5。因此,当在加法器305输出处提供的尾数项具有前导零时,不仅其二进制小数点需要向右移位,而且乘积指数块303的输出处的指数项也需要被减小。在此,前导I预感器块306、归一化移位器307和指数加法器308被用于完成这些任务。

具体地,前导I预感器306标记加法器输出中的第一个(最左端)I的位置,并且向归一化移位器307指示加法器输出的二进制小数点应向右移位多少,并且向指数加法器308指示来自指数块302的指数值应被减小多少。在实施例中,加法器输出的二进制小数点的向右移动实际上是通过将加法器输出的数字内容向左移动来完成的。在相同的或者其它的实施例中,加法器308理解来自前导I预感器306的值要从乘积指数302输出值中减去。在实施例中,前导I预感器如下操作。对于被提供给加法器305的这两个输入操作数(S卩,AB项的尾数和C项的尾数),前导I预感器306单独地确定这两项中的前导I位置并且标记这对前导I位置的最左位位置。例如,如果AB项的尾数是0001100101…并且C项的尾数是0000100000…,那么前导I预感器306将标记第四位位置,因为(AB尾数项的)第四位位置是这两个操作数中的最左端(或最高阶)的前导I。假设该确定是加法器305输出的前导I位置。在许多情况下,该假设将是正确的并且用于确定由归一化移位器307执行的加法器输出移位量以及由加法器308执行的指数减小量。在一些情况下该假设将是错误的。在上述示例中提供的这两个操作数将由加法器相加以产生加法器输出0010000101…。在假设不正确的情况下,如在本示例中,这两个操作数的相加导致由前导I预感器所标识的位位置处的进位项(即,由前导I预感器所标识的加法器输出的位位置是0),因此由前导I预感器所标识的位置的左边一个位置的位位置是I。如此,在实施例中,在释放由前导I预感器306标记的假定值之前,其中该假定值作为加法器输出应被移位的量以及其指数应被减小的量,逻辑电路执行下列中的任一个或两者作为“检查”:1)查看由前导I指示器所标识的加法器305输出的位置是否是O ;ii)查看加法器305输出中正好位于由前导I指示器所标识的位置左边的位置是否是I。如果这些条件中的任一个是真,那么正确的答案不是由前导I指示器306所标记的位位置,而是正好位于由前导I指示器所标记的位位置左边的位位置。在这种情况下,前导I指示器将基本上校正其假设并且向移位器307和加法器308提供正确信息。在此值得注意的是,使用前导I预感器的原因是确定前导I位置的过程有些广泛并且可能花费一个或多个时钟周期。同样,由加法器305执行的加法也有些广泛并且可能花费一个或多个时钟周期。如果前导I确定被配置成“跟随”加法器305,那么将会花费两个或更多个时钟周期来确定AB+C的和以及该和的前导I位置。但是,利用图3所示的体系结构,加法器305的求和以及预感器306的前导I确定很大程度上并行进行,从而与串行方法相比减少了花费的总时钟周期时间。此外,即使前导I预感器306的结果可能是错误的并且因此被检查,上述“检查”操作也相对简单并且用于执行检查的逻辑端对端相对短,使得检查操作的时间代价可接受并且因此维持较好的整体解决方案。一旦移位器307已将加法器305的结果移位并且加法器308已减少了指数值(如果任何此类移位和指数减小是可应用的),FMADD指令(AB+C)的“答案”已基本上被确定。执行最终处理以将其答案与期望精度和适当格式联接。该处理的一部分包括对尾数值进行舍入。在实施例中,指令可指定两种不同精度中的任一种:单精度或双精度。在进一步的实施例中,与双精度值相联接的位数量是单精度值所联接的两倍(或近似两倍)。在进一步的实施例中,单精度格式是由用于符号的I个位、用于尾数的23个位以及用于指数的8个位所组成的32位,并且双精度格式是由用于符号的I个位、用于尾数的52个位以及用于指数的11个位所组成的64位。在更进一步的实施例中,在功能单元300内部,利用高达128位的精度计算尾数。在此,乘法器301的输出宽度被布线成128位以处理两个64位整数值的整数乘法。同样,加法器305输出和移位器307输出也是128位。如此,在多个实施例中,由功能单元300在内部计算的结果的尾数的位数可超出实际上作为最终结果的尾数提供的位数。因此,舍入操作查看最终提供的尾数之下的任何位是否是I一其被称为粘着位。在图3的体系结构中,尾随零逻辑块309确定移位器307的输出中的尾随零的数量。当与功能单元300的计算中的附加位的数量相比时,该数量指示最终提供的尾数之下的位中是否存在I。如果将尾数向左移位以消除前导O同时移位底部的零,那么需要考虑附加尾随零的数量(其与前导I块306所计算的向左移位量相等)。在此,为了正确地计算移位器307的输出中的尾随零的数量,尾随零检测器309应知晓由前导I预感器306施加的任何移位,因此尾随零检测器309也被观察到从前导I预感器306接收输入。确定从最低阶(最右端)位位置开始并且向左逐位移动至每一个下一高阶位位置的零的数量,直至最低有效(最右端)值I的位置。如果尾随零的数量延伸至或超出(向左)给定精度尾数的最低有效(最右端)位位置,那么最低有效位位置被保持在其当前值(即,不进行上舍入)。否则,即发生上舍入,并且针对可适用精度的尾数的最低有效位位置增加:i)从O到1,或者ii)从I到O并且出现波动至下一较高位位置的进位项。上舍入加法器310用于将值I加到移位器307中的结果尾数的最低有效位位置,以用于可适用的精度。采用加法器310的输出作为遵循期望精度的最终尾数值。在一实施例中,一直采用加法器310的输出作为遵循期望精度的最终尾数值,其中如果没有发生上舍入则将值O有效地加到移位器307输出,并且如果确实发生上舍入则在最右端位置处将值I加到移位器307输出以用于给定精度。如图3所示,粘着位计算逻辑311基于尾随零检测逻辑309的输出和期望精度来确定上舍入是否是必要的,并且上舍入控制逻辑312根据粘着位的确定,在最低有效位位置处将O或I提供到加法器310以用于期望精度(如果没有上舍入发生则将加入0,如果有上舍入要发生则加入I)。注意,在图3的实施例中,尾随零检测逻辑309对提供到加法器305的操作数进行操作,使得类似于前导I预感器306,其可与加法器305并行地操作。在进一步的实施例中,尾随零检测器标识每个操作数中为I的最低有效(最右端)位值,并且标记这两个操作数中的最低有效位位置,作为确定加法器305输出中的尾随零数量的基础。由前导I预感器所引起的任何移位也可由尾随零检测器309来解决。即,对于给定精度,加法器305结果的任何移位将影响在确定它们是否延伸到或超出移位器307输出的最低有效位之前需要检测多少个零。注意,用于尾随零检测的该方法不需要任何“检查”(如前导I预感器那样),因为不可能(从数学方面而言)发生错误。以上描述是就VMADD指令的浮点计算而言撰写的。在整数VMADD指令的情况下,整数操作数被简单地提供给乘法器301输入。在此,在支持53位双精度浮点尾数计算的实施例中,乘法器被设计成处理64位整数乘法。如此,乘法器输出是128位宽。在64位整数操作的情况下,在一实施例中,用64个零填补C项左侧,使得其最低有效位与乘法器301输出的最低有效位对齐。即,被提供给加法器305的C项操作数具有64位零作为其左半部分以及具有64位C输入操作数作为其右半部分。由于该实施例支持I双精度或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、前导I预感器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)。基本上并行地,预测加法器结果的前导I (406)。相对于AB+C的和结果检查对前导I的预测(407)。基于前导IDE确定,将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的各个元素内的I的计数;以及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项的尾数的数据路径上提供O的良性值。相对于为所提供的操作数提供前导零计数的VCLZ指令,比较图5与图3,注意逻辑506被实现为前导I和前导O预感器逻辑电路(与图3的前导I预感器逻辑电路相对)。在此,注意操作数中前导O的数量与操作数中前导I的位置有关。具体地,对于位宽度已知的操作数,前导O的数量等于操作数的位宽度与操作数中前导I的位位置之间的差。记住,在一实施例中,前导I预感器306确定用于VMADD指令的AB和C尾数项两者中的前导I位置并且标记这两项的最高阶(最左端)前导I的位置。在此,因为对齐移位器504被配置成对VLCZ指令的AB项提供值0,所以仅C项的前导I位置(用于VLCZ指令的操作数)被标记。由此,可确定操作数的前导零的数量。注意,如果可应用的位长度被指定或以其它方式已知,则不同的操作数位长度可被容易地处理(例如,32位或64位)。记住,图3的前导I预感器306被视为“预感器”是因为在某些情况下它的初始答案可能是不正确的。具体地,需要检查加法器305的输出。但是,在VCLZ指令的情况下,不会发生这种问题,因为加法器305未被使用。如此,来自逻辑506的“答案”是正确的,无需检查。前导O计数最后被传递到格式化逻辑513以为指令提供适当格式的答案。在一实施例中,前导O计数(类似于用于VMADD指令的前导I计数)被传递到指数调整加法器508,指数调整加法器508将其转发到格式化逻辑513。相对于为输入操作数提供尾随零计数的VCTZ指令,操作数C被传递到尾随零确定逻辑509。根据图3的讨论可知,尾随零确定逻辑309标识每个操作数(AB和C)中值为I的最低有效(最右端)位,并且标记这两个操作数中的最低有效位位置作为确定加法器305的输出中的尾随零数量的基础。相对于VCTZ指令的操作应用相同操作,另外注意AB项被设置为零使得仅C项(用于VCTZ指令的操作数)控制由逻辑509提供的最终答案。答案被最终路由到格式化逻辑513,格式化逻辑513为指令提供答案(可由诸如指数调整加法器508之类的另一个块预先处理该答案)。相对于VCNT指令,I计数逻辑520为C操作数中存在的I数量计数,并且答案被最终路由到格式化逻辑513。相对于VPAR指令,奇偶逻辑530确定C操作数的奇偶值(例如,操作数中存在奇数个I还是偶数个I)并且该答案被最终路由到格式化逻辑513,格式化逻辑513为指令提供该答案。图6a到图6d示出当图5的功能单元500的上述操作被并行地执行N次以实现向量操作时图2的功能单元200的操作。对于VCLZ指令,参见图6A,接收操作数/元素的输入向量(601a),确定每一个操作数中的前导O的数量(602a)以及为每一个操作数提供具有前导O计数的输出向量(603a)。对于VCTZ指令,参见图6B,接收操作数/元素的输入向量(601b),确定每一个操作数中的尾随O数量(602b)以及为每一个操作数提供具有尾随O计数的输出向量(603b)。对于VCNT指令,参见图6C,接收操作数/元素的输入向量(601c),确定每一个操作数中的I数量(602c)以及为每一个操作数提供具有I计数的输出向量(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 (其存在不同类型,诸如DDR RAM、EDO RAM等);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之间具有双向点对点链路。在上述说明书中,已经参考特定示例性实施例描述了本发明。然而,显然可对这些实施例作出各种修改和改变,而不背离如所附权利要求所述的本发明的更宽泛精神和范围。因此,说明书和附图应被认为是说明性而非限制性意义。
权利要求
1.一种向量功能单元,其中所述向量功能单元被实现在半导体芯片上以执行N维向量操作,所述向量功能单元包括: N个功能单元,所述N个功能单元中的每一个包括逻辑电路,所述逻辑电路用于执行: 第一整数乘加指令,其提供第一整数乘加运算的最高阶位而不提供最低阶位; 第二整数乘加指令,其提供第二整数乘加运算的最低阶位而不提供最高阶位;以及 掩模电路,用于允许提供来自所述N个功能单元中的所选单元的输出结果。
2.如权利要求1所述的向量功能单元,其特征在于,所述N个功能单元中的每一个还包括用于执行浮点乘加指令的逻辑电路。
3.如权利要求1所述的向量功能单元,其特征在于,所述功能单元中的每一个支持32位和64位操作。
4.如权利要求1所述的向量功能单元,其特征在于,所述功能单元中的每一个包括在加法器之前的第一移位寄存器以及在所述加法器之后的第二移位寄存器。
5.如权利要求4所述的向量功能单元,其特征在于,所述加法器的输出的位宽大于所述第一整数乘法指令和所述第二整数乘法指令中任一个的标量结果的位宽。
6.如权利要求5所述的向量功能单元,其特征在于,所述移位寄存器耦合到计算AB项的指数值和C项的指数值之差的逻辑电路。
7.一种方法,包括: 在半导体芯片上执行向量操作,包括利用在所述半导体芯片上实现的向量功能单元执行第一向量指令以及利用所述向量功能单元执行第二向量指令,所述向量功能单元对元素进行掩模以实现向量操作,所述第一向量指令是提供最高阶位而不提供最低阶位的第一向量整数乘加指令,所述第二向量指令是提供最低阶位而不提供最高阶位的第二向量乘加指令。
8.如权利要求7所述的方法,其特征在于,还包括在计算系统的不同存储位置中存储所述第一指令的结果并且存储所述第二指令的结果。
9.如权利要求7所述的方法,其特征在于,所述方法还包括利用所述向量功能单元执行向量浮点乘加指令。
10.如权利要求9所述的方法,其特征在于,还包括对于所述向量整数乘加指令和所述向量浮点乘加指令中的每一个使用相同加法器执行AB项和C项的求和。
11.如权利要求7所述的方法,其特征在于,所述第一向量整数乘加指令的结果提供比所述第二向量整数乘加指令的结果更多的位。
12.如权利要求11所述的方法,其特征在于,所述第一整数乘加指令提供64位,且所述第二向量整数乘加指令提供32位。
13.一种计算系统,包括: 硬盘驱动器;以及 处理器,所述处理器被实现在半导体芯片上以执行N维向量操作,所述处理器包括N个功能单元,所述N个功能单元中的每一个包括逻辑电路,所述逻辑电路用于执行: 第一整数乘加指令,其提供第一整数乘加运算的最高阶位而不提供最低阶位;以及 第二整数乘加指令,其提供第二整数乘加运算的最低阶位而不提供最高阶位; 所述处理器还包括用于允许提供来自所述N个功能单元中的所选单元的输出结果的掩模电路。
14.如权利要求13所述的计算系统,其特征在于,所述N个功能单元中的每一个还包括用于执行浮点乘加指令的逻辑电路。
15.如权利要求13所述的计算系统,其特征在于,所述功能单元中的每一个支持32位和64位操作。
16.如权利要求13所述的计算系统,其特征在于,所述功能单元中的每一个包括在加法器之前的第一移位寄存器以及在所述加法器之后的第二移位寄存器。
17.如权利要求16所述的计算系统,其特征在于,所述加法器的输出的位宽大于所述第一整数乘法指令和所述第二整数乘法指令中任一个的标量结果的位宽。
18.如权利要求16所述的计算系统,其特征在于,所述移位寄存器耦合到计算AB项的指数值和C项的指数值之差的逻辑电路。
全文摘要
描述了一种向量功能单元,其被实现在半导体芯片上以执行N维向量操作。向量功能单元包括N个功能单元。N个功能单元中的每一个包括逻辑电路,该逻辑电路用于执行提供第一整数乘加运算的最高阶位而不提供最低阶位的第一整数乘加指令,以及提供第二整数乘加运算的最低阶位而不提供最高阶位的第二整数乘加指令。
文档编号G06F9/30GK103119579SQ201180045903
公开日2013年5月22日 申请日期2011年9月23日 优先权日2010年9月24日
发明者J·韦德梅耶, S·萨姆德若拉, R·高利弗 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1