用于向量前导零、向量后导零、向量操作数1计数和向量奇偶性计算的功能单元的制作方法

文档序号:11864351阅读:410来源:国知局
用于向量前导零、向量后导零、向量操作数 1 计数和向量奇偶性计算的功能单元的制作方法与工艺

技术领域

本发明的领域一般涉及计算机系统,并且更具体地涉及一种用于执行向量乘加指令以及使用用于计算向量乘加结果的逻辑块的其它指令的处理器体系结构。



背景技术:

计算机科学领域广泛地认可两种类型的处理器体系结构,即“标量”和“向量”。标量处理器被设计成执行对单个数据集进行运算的指令,而向量处理器被设计成执行对多个数据集进行运算的指令。图1A和图1B呈现出演示标量处理器和向量处理器之间的基本差别的比较性示例。

图1A示出了标量“与”指令的示例,其中单个操作数集A和B“与”在一起以生成单数(singular)(或“标量”)结果C(即,AB=C)。作为对比,图1B示出了向量“与”指令的示例,其中两个操作数集A/B和D/E分别并行地“与”在一起以同时生成向量结果C、F(即,A“与”B=C且D“与”E=F)。

通常,本领域公知的是,两个输入操作数和输出结果存储在专用寄存器中。例如,许多指令将具有两个输入操作数。因此,将使用两个不同的输入寄存器来临时存储各输入操作数。而且,这些相同的指令将生成输出值,该输出值临时存储在第三(结果)寄存器中。在图1A和图1B中观察到各个输入寄存器101a、101b和102a、102b以及结果寄存器103a、103b。明显地,能够容易地辨别出“标量”对“向量”的特性。

也就是说,观察到图1A的标量设计输入寄存器101a和102a仅保持标 量值(分别为A和B)。同样,也观察到图1A的标量设计的结果寄存器103a仅保持标量值(C)。作为对比,观察到图1B的向量系统的输入寄存器101b和102b保持向量(寄存器101b中的A、D以及寄存器102b中的B、E)。同样,也观察到图1B的向量系统的结果寄存器103b保持向量值(C、F)。从术语上讲,图1B的向量系统的寄存器101b、102b和103b中的每个的内容能够统称为“向量”,并且向量内的各个单个的标量值能够称为“元素”。因此,观察到例如寄存器101b存储有“向量”A、D,其由“元素”A和“元素”D构成。

已知的是仅标量或SIMD乘运算已经实际上在半导体芯片处理器中实现为单个处理器指令。已知已经在半导体芯片处理器中实现的标量或SIMD乘指令包括:“乘”指令(MUL),其提供两个整数输入操作数的乘积的较低阶位;以及“乘高(multiply high)”指令(MULH),其提供标量整数乘运算的较高阶位。

已知在半导体处理器芯片中实现为标量或SIMD指令的其它指令包括“计数前导零”CLZ指令、“计数后导零”指令CTZ和“计数”指令CNT。标量CLZ指令接受标量输入A并且返回A中的在A中的最高阶1之前的0的数量(例如,如果A=1000,则CLZ的结果=0;如果A=0100,则CLZ的结果=1;如果A=0010,则CLZ的结果=2;等等)。标量CTZ指令接受标量输入A并且返回A中的在A中最低阶1之后的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的标量逻辑单元中的一个的实施例。如当前所描述的,标量逻辑单元能够对支持上述VMADD、VMADDH、VMADDL、VCLZ、VTLZ、VCNT和VPAR指令中的任一指令的输入向量A、B和C的各元素执行标量运算。

现在将说明当输入向量A、B和C的元素和输出向量R的元素被指定为浮点形式时VMADD指令的运算。如本领域所公知的,浮点的数值的表达呈现为(符号)*(尾数)*(指数)的形式,其中符号值表示数值是为正还是负,尾数值指定值的“数”,指数值指定值的阶。VMADD指令则可指定为如下:((A_sgn)(B_sgn)(A_mantissa)(B_mantissa)(A_exponent+B_exponent))+(C_sgn)(C_mantissa)(C_exponent)。

参照图3,乘法器301计算(A_sgn)(B_sgn)(A_mantissa)(B_mantissa)项,至少作为(A_mantissa)(B_mantissa)的显式计算。乘积的符号可容易地计算为:i)如果A_sgn和B_sgn具有相同的值,则为正;或者,ii)如果A_sgn和B_sgn具有不同的值,则为负。乘积指数块302通过取如下两者中的较大者来确定最终结果的指数的初始计算:i)(A_exponent+B_exponent);以及,ii)C_exponent。也就是说,如果C值比A和B的乘积大得多,则C项的阶将控制最终结果的阶。同样,如果AB比C大得多,则AB的阶将控制最终结果的阶。

加法器305执行AB+C相加的计算。然而,注意的是,在以浮点形式执行相加之前,在实施例中,使得AB项的指数(即,与乘法器301的输出相关联的指数)与C项的指数相同。指数差块303和移位器304用于实现该处理。具体地,指数差块303取得AB项的指数与C项的指数之间的差(即,i)(A_exponent+B_exponent)以及ii)C_exponent之间的差)。还识别两项中的较小者(例如,通过分析乘积指数块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)确认恰在由前导1指示器识别的位置的左边的加法器305输出的位置是否为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的输出宽度被配线(wire)为128位,以处理两个64位整数值的整数相乘。同样,加法器305的输出和移位器307的输出也是128位。

因此,在各个实施例中,针对结果的尾数由功能单元300在内部计算出的位数会超过实际上呈现为最终结果的尾数的位数。这样,舍入运算确认最终呈现的尾数以下的任何位是否为1,该位称为粘接位(sticky bit)。在图3的体系结构中,后导零逻辑块309确定移位器307的输出中后导零的数量。当与在功能单元300的计算中附加位的数量相比时该数量指示最终呈现的尾数以下的位中是否存在1。如果尾数左移以消除前导零同时使末尾的零移位,则需要考虑到与由前导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,后导零检测逻辑309能够与加法器305并行地运算。在另一实施例中,后导零检测器识别每个操作数中的最低有效(最右边)位的值1,并且标记两个操作数中的最低有效位的位置作为确定加法器305的输出中的后导零的数量的基础。任何由于前导1预测器引起的移位也通过后导零检测器309解释。也就是说,对于既定精度,加法器305导致的任何移位将影响在确定出它们是否扩展至或超过移位器307输出的最低有效位之前需要检测多少零。注意,用于后导零检测的该方法不需要任何“校验”(如同前导1预测器),因为不可能发生错误(从数学上讲)。

上述说明是针对VMADD指令的浮点计算而撰写的。在整数VMADD指令的情况下,整数操作数仅提供给乘法器301的输入。此处,在支持53b双精度浮点尾数计算的实施例中,乘法器被设计为处理64b整数乘法。因此,乘法器输出为128位宽。在64位整数运算的情况下,在实施例中,C项以64个零填补到左边,使得其最低有效位与乘法器301输出的最低有效位对齐。也就是说,提供给加法器305的C项操作数具有作为其左半部的64个零位以及作为其右半部的64位C输入操作数。由于实施例支持1个双精度或64b整数以及2个单精度或2个32b整数运算的计算,对于32b整数,两个C项中的每个(每个32b)的上半部以零填补以使其为64b宽。在32位整数运算的情况下,适当地填补C项。在实施例中,零填补是通过移位器304将C项向右移位来有效地实现的。在另一实施例中,对于整数运算,指数差块303用于根据整数计算的精度来指定移位的量。也就是说,例如,对于64位整数运算,指数差块303被配置为将输入信号发送到移位器304,这使移位器304向右移位C项的64位;并且,对于32位运算,指数差块303被配置为发送输入信号到移位器304,这使移位器304向右移位C项的96位。

加法器305将乘法器输出相加并且将C项值进行移位、对齐以确定AB+C的整数值。因为AB+C的整数值的大小可能超过最终结果的容许位宽,在实施例中,加法器305的输出的高半部和低半部由移位器307传递 而作为最终结果。例如,在加法器305的输出为128位宽并且64位整数运算应用的实施例中,指令的结果仅能够为64位宽,而整数功能单元计算128位的整数值。因此,存在用于整数运算的两种不同的VMADD指令:VMADDH和VMADDL。VMADDH提供128位加法器输出的最高有效64位,并且VMADDL提供128位加法器输出的最低有效64位。在整数VMADD运算的情况下,不使用乘积指数块302、前导1预测器307、指数加法器308、后导零检测器309、粘接位逻辑311和进位舍入控制逻辑312,除了可能将不相干零增加到加法器310。

图4a示出了如上所述的功能单元的浮点VMADD运算的实施例,并且图4b示出了如上所述的功能单元的整数VMADDL/H运算的实施例。参照图4a,操作数A和B的各尾数值相乘401。基本上并行地,确定402AB项和C项的指数值之间的差,并且AB项指数和C项指数的最大值被用作结果的初始指数403。基于AB项和C项的指数之间的确定的差,具有较小指数的项的尾数移位404,以与具有较大指数的项的尾数对齐。然后,将AB项和C项的对齐的尾数相加405。基本上并行地,预测加法器结果的前导1 406。相对于AB+C的求和结果来校验407前导1的预测。基于前导1的确定,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操作数的数据路径接收的,所以通过对位移位器304来接收操作数(注意,任一“移位器”均能够实现为移位寄存器)。当指令指定VCLZ、VCTZ、VCNT和VPAR指令中的任一个(与VMADD指令相对)时,对位移位器忽略来自指数差单元503的任何输入并且仅将C操作数至少提供给各个指令的可应用逻辑。也就是说,用于VCLZ指令的逻辑506、用于VCTZ指令的逻辑509以及用于VCNT指令的逻辑530。另外,对位移位器504呈现载有VMADD指令的AB项的尾数的数据路径上的良性零值。

相对于呈现用于所提供的操作数的前导零计数的VCLZ指令,将图5与图3比较,注意,逻辑506实现为前导1预测器逻辑电路和前导0预测器逻辑电路(与图3的前导1预测器逻辑电路306相对)。此处,注意的是,操作数中的前导0的数量与操作数中前导1的位置相关。具体地,对于已知位宽的操作数,前导0的数量与操作数的位宽和操作数中前导1的位位置之间的差相等。之前提到,在实施例中,前导1预测器306确定用于VMADD指令的AB和C两者的尾数项中的前导1的位置,并且对这两个 项中的最高阶(最左边)前导1的位置进行标记。此处,因为对位移位器504被配置为呈现用于VLCZ指令的AB项的值0,所以仅对C项(VLCZ指令的操作数)的前导1位置加标记。通过这些,能够确定操作数的前导零的数量。注意的是,假设可应用位长度被指定或其它方式已知,则能够容易地处理不同操作数的位长度(例如,32位或64位)。

之前提到,图3的前导1预测器306被视为“预测器”,是因为在一些情形下其初始答案可能不正确。具体地,必须对加法器305的输出进行校验。然而,在VCLZ指令的情况下,因为不使用加法器305,所以问题不会出现。这样,来自逻辑506的“答案”是正确的并且不需要进行校验。然后,最终将前导零计数传递到格式化逻辑513以便以指令适当的格式呈现答案。在实施例中,前导零计数(类似于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),并且答案最终被路由到格式化逻辑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(存在不同类型的系统存储器,诸如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可供计算系统内的其它构件使用。例如,从与计算系统的各个接口(例如,键盘和鼠标、打印机端口、LAN端口、调制解调器端口等)接收或从计算系统的内部存储元件(例如,硬盘驱动器)取回的数据通常在其由软件程序实现的一个或多个处理器801操作之前临时排队到系统存储器803中。类似地,软件程序确定的数据应当通过计算系统接口中的一个从计算系统发送到外部实体,或者存储到内部存储元件中,通常在其被传送或存储之前临时排队到系统存储器803中。

ICH 805负责确保这些数据在系统存储器803及其合适的相应计算系统接口(以及内部存储器件(如果计算系统是如此设计的))之间正确地传递。MCH 802负责管理处理器801、接口和可能在时间上相对于彼此邻近地出现的内部存储元件中的用于系统存储器803存取的各种争先请求。

一个或多个I/O器件808还实现在典型的计算系统中。I/O器件通常负责将数据传送到计算系统(例如,网络适配器)和/或从计算系统传送数据;或者用于计算系统内的大规模非易失性存储(例如,硬盘驱动器)。ICH 805具有在其本身和观察到的I/O器件808之间的双向点对点链路。

在前面的说明书中,已经参照本发明的具体示例性实施例描述了本发明。然而,显然可以对示例性实施例进行各种修改和改变,而不偏离如随附的权利要求书中阐述的本发明的较宽的主旨和范围。因此,说明书和附图应被视为示例性的而不是限制性的意义。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1