首页 / 专利库 / 电脑零配件 / 微处理器 / 微处理器中执行FMA指令的方法和微处理器

微处理器中执行FMA指令的方法和微处理器

阅读:874发布:2020-05-08

专利汇可以提供微处理器中执行FMA指令的方法和微处理器专利检索,专利查询,专利分析的服务。并且本 发明 涉及 微处理器 中执行FMA指令的方法和微处理器。该微处理器包括FMA执行逻辑,其中FMA执行逻辑判断要在部分乘积加法器中还是在第二累加级中将累加数操作数C累加到乘数操作数A和被乘数操作数B的部分乘积。该逻辑计算Aexp+Bexp‑Cexp的阶码差并且在C为非规格化的情况下确定C中的前导零的数量。在C向A和B的乘积的累加可能会引起 块 消去的情况下、在ExpDelta大于或等于‑K的情况下以及在C为非规格化并且C的前导零的数量加上K所得到的值超过‑ExpDelta的情况下,该微处理器将C与A和B的部分乘积累加,其中K与部分乘积加法器中的数据通路的宽度有关。部分乘积加法器和第二累加级中的资源的策略性使用使得延迟缩短。,下面是微处理器中执行FMA指令的方法和微处理器专利的具体信息内容。

1.一种微处理器中执行FMA指令即浮点乘法累加指令的方法,所述FMA指令具有各自具有有效数和阶码的乘数操作数、被乘数操作数和累加数操作数,所述方法用于应对所述累加数操作数为非规格化并且所述乘数操作数和所述被乘数操作数的乘积将会引起下溢的特殊情况,所述方法包括以下步骤:
确定所述乘数操作数的阶码和所述被乘数操作数的阶码的和与所述累加数操作数的阶码之间的阶码差;
确定非规格化的累加数操作数的有效数中的前导零的数量;
在所述前导零的数量加上非负整数常数所得到的值超过所述阶码差的情况下,将所述累加数操作数的有效数左移位以产生左移位累加数值并且在部分乘积加法器中将所述左移位累加数值累加到所述乘数操作数的有效数和所述被乘数操作数的有效数的部分乘积;
使用采用2的补码减法的第一电路来生成第一阶码差值,所述第一阶码差值是所述乘数操作数的阶码和所述被乘数操作数的阶码的乘积与所述累加数操作数的阶码之间的差,并且使用所述第一阶码差值来控制对所述累加数操作数的有效数进行右移位的右移位器;
使用采用1的补码减法的第二电路来生成第二阶码差值,所述第二阶码差值是所述乘数操作数的阶码和所述被乘数操作数的阶码的乘积与所述累加数操作数的阶码之间的差,并且使用所述第二阶码差值来控制对所述累加数操作数的有效数进行左移位的左移位器;
以及
在满足第一条件的情况下,选择右移位的累加数操作数的有效数与所述部分乘积累加;以及
在满足第二条件的情况下,选择左移位的累加数操作数的有效数与所述部分乘积累加。
2.根据权利要求1所述的方法,其中,所述累加数操作数的有效数被移位与所述阶码差的绝对值相等的量,以产生所述左移位累加数值。
3.根据权利要求1所述的方法,其中,所述非负整数常数是与数据通路的宽度有关的值,其中所述数据通路用于对所述乘数操作数的有效数和所述被乘数操作数的有效数的部分乘积进行求和。
4.根据权利要求3所述的方法,其中,所述非负整数常数等于所述数据通路的宽度减去所述被乘数操作数的有效数的宽度的两倍所得到的差值。
5.根据权利要求1所述的方法,其中,还包括以下步骤:
临时右移位所述累加数操作数的有效数的副本,以生成右移位累加数值;
将所述右移位累加数值和所述左移位累加数值两者提供给选择电路;以及选择所述右移位累加数值和所述左移位累加数值其中之一或者零,以与所述乘数操作数的有效数和所述被乘数操作数的有效数的部分乘积累加在一起。
6.根据权利要求5所述的方法,其中,所述临时右移位将所述累加数操作数的有效数的副本右移位与所述阶码差相等的量。
7.根据权利要求5所述的方法,其中,所述选择所述右移位累加数值和所述左移位累加数值其中之一或者零是根据所述累加数操作数的绝对值与所述乘数操作数和所述被乘数操作数的乘积的绝对值的比较来进行的,其中,在比所述乘积的绝对值大X的基础上、所述累加数操作数的绝对值更大的情况下,选择零并且不在所述部分乘积加法器中进行所述累加数操作数与所述部分乘积的累加,其中X是所述部分乘积加法器的数据通路中所设置的位的数量的函数。
8.一种微处理器中执行FMA指令即浮点乘法累加指令的方法,所述FMA指令具有各自具有有效数和阶码的乘数操作数、被乘数操作数和累加数操作数,所述方法用于应对所述累加数操作数为非规格化并且所述乘数操作数和所述被乘数操作数的乘积将会引起下溢的情况,所述方法包括以下步骤:
确定所述乘数操作数的阶码和所述被乘数操作数的阶码的和与所述累加数操作数的阶码之间的阶码差;
确定所述累加数操作数的有效数能被左移位并仍适应部分乘积求和的数据通路的最大左移位量;以及
在非规格化的累加数操作数的有效数中的前导零的数量加上所述最大左移位量所得到的值超过所述阶码差的情况下,左移位所述累加数操作数的有效数以产生左移位累加数值,并且在部分乘积加法器中将所述累加数操作数累加到所述乘数操作数的有效数和所述被乘数操作数的有效数的部分乘积。
9.一种微处理器中执行FMA指令即浮点乘法累加指令的方法,所述FMA指令具有各自具有有效数和阶码的乘数操作数、被乘数操作数和累加数操作数,所述方法包括以下步骤:
确定所述乘数操作数的阶码和所述被乘数操作数的阶码的和与所述累加数操作数的阶码之间的阶码差;
判断所述累加数操作数是否为非规格化,在所述累加数操作数为非规格化的情况下,确定所述累加数操作数的有效数中存在的前导零的数量;
从所述阶码差中减去所述前导零的数量以得到调整后的阶码差值;
在满足第一条件的情况下,在部分乘积加法器内将所述累加数操作数与所述乘数操作数和所述被乘数操作数的部分乘积累加;以及
在不满足所述第一条件的情况下,在第一累加操作中对所述乘数操作数和所述被乘数操作数的部分乘积进行求和,以生成乘积,然后在第二累加操作中将所述累加数操作数累加到所述乘积,
其中,在调整后的阶码差值为-1或大于-1的情况下,满足所述第一条件,并且在调整后的阶码差值为-2并且所述累加数操作数向所述乘积的累加是有效减法的情况下,也满足所述第一条件。
10.一种微处理器中执行FMA指令即浮点乘法累加指令的方法,所述FMA指令具有各自具有有效数和阶码的乘数操作数、被乘数操作数和累加数操作数,所述方法包括以下步骤:
确定所述乘数操作数的阶码和所述被乘数操作数的阶码的和与所述累加数操作数的阶码之间的阶码差;
判断所述累加数操作数是否为非规格化,若否,则确定所述累加数操作数的有效数中存在的前导零的数量;
从所述阶码差中减去所述前导零的数量以得到调整后的阶码差值;
将所述乘数操作数的有效数和所述被乘数操作数的有效数的最大部分乘积的最高有效位即MSB与部分乘积加法器的指定位的位置对齐;
确定用于表示部分乘积加法器数据通路中的比所述指定位的位置更高的位的位置的数量的常数K;
在满足第一条件的情况下,在所述部分乘积加法器中将所述累加数操作数与所述乘数操作数和所述被乘数操作数的部分乘积累加;以及
在不满足所述第一条件的情况下,在第一累加操作中对所述乘数操作数和所述被乘数操作数的部分乘积进行求和,以生成乘积,然后在第二累加操作中将所述累加数操作数累加到所述乘积,
其中,在调整后的阶码差值为-K或大于-K的情况下,满足所述第一条件,并且在调整后的阶码差值为-K-1并且所述累加数操作数向所述乘积的累加是有效减法的情况下,也满足所述第一条件。
11.一种微处理器,包括:
FMA执行逻辑即浮点乘法累加执行逻辑,其被配置为执行形式为±A*B±C的浮点乘法累加指令,其中A、B和C分别是所输入的各自具有有效数和阶码的乘数操作数、被乘数操作数和累加数操作数;
其中,所述FMA执行逻辑包括部分乘积加法器,所述部分乘积加法器用于将A和B的部分乘积相加;
所述部分乘积加法器被配置为针对所输入的操作数的子集将C与A和B的部分乘积累加,其中在所述所输入的操作数中,C的绝对值小于或接近于A和B的乘积的绝对值,所述FMA执行逻辑被配置为通过以下步骤来应对C为非规格化的特殊情况:
确定A的阶码和B的阶码的和与C的阶码之间的阶码差;
确定非规格化的C中的前导零的数量;以及
在所述前导零的数量加上非负整数常数所得到的值超过所述阶码差的情况下,使C左移位以产生左移位C值,然后在所述部分乘积加法器中将所述左移位C值累加到A和B的部分乘积,
其中,所述微处理器还包括:
左移位器,其被配置为对C进行左移位;
右移位器,其被配置为对C进行右移位;
1的补码减法器,其被配置为从乘积阶码减去C的阶码以生成所述阶码差的第一表示,其中所述乘积阶码是A的阶码和B的阶码的和;
2的补码减法器,其被配置为从乘积阶码减去C的阶码以生成所述阶码差的第二表示,并且将所述第二表示馈送至所述右移位器,其中所述乘积阶码是A的阶码和B的阶码的和;
以及
反向器,其被配置为接收所述1的补码减法器所生成的所述阶码差的所述第一表示的至少一部分,将所述至少一部分反向,并且将反向结果馈送至所述左移位器;
其中,所述FMA执行逻辑被配置为在输入组中进行选择以与A和B的部分乘积累加,所述输入组包括所述左移位器的输出和所述右移位器的输出。
12.根据权利要求11所述的微处理器,其中,所述非负整数常数等于数据通路的宽度减去所述被乘数操作数的有效数的宽度的两倍所得到的差值。
13.根据权利要求11所述的微处理器,其中,
所述FMA执行逻辑被配置为在包括C的移位值和零的输入组中进行选择以与A和B的部分乘积累加;
所述FMA执行逻辑被配置为根据C的绝对值与A和B的乘积的绝对值的比较来在所述输入组中进行选择;
在比所述乘积的绝对值大X的基础上、C的绝对值更大的情况下,选择零并且不在所述部分乘积加法器中进行C与所述部分乘积的累加;以及
X是所述部分乘积加法器的数据通路中所设置的位的数量的函数。
14.根据权利要求11所述的微处理器,其中,
所述FMA执行逻辑被配置为在包括C的移位值和零的输入组中进行选择以与A和B的部分乘积累加;以及
所述FMA执行逻辑被配置为根据C的阶码与A的阶码与B的阶码之和的比较来在所述输入组中进行选择。
15.根据权利要求14所述的微处理器,其中,所述FMA执行逻辑被配置为:在C为非规格化的情况下,还根据C中的前导零的数量来在所述输入组中进行选择。
16.一种微处理器,包括:
FMA执行逻辑即浮点乘法累加执行逻辑,其被配置为执行形式为±A*B±C的浮点乘法累加指令,其中A、B和C分别是所输入的各自具有有效数和阶码的乘数操作数、被乘数操作数和累加数操作数;
其中,所述FMA执行逻辑包括第一级和第二级,所述第一级和所述第二级分别用于针对所输入的操作数的第一子集和第二子集将C累加到A和B的乘积,
针对所输入的操作数的第一子集,在所述FMA执行逻辑生成规格化非冗余和之前,在所述第一级中将C累加到A和B的部分乘积,
针对所输入的操作数的第二子集,在所述第二级中将C累加到A和B的部分乘积的规格化非冗余和,以及
所述FMA执行逻辑被配置为通过以下步骤来应对所述累加数操作数为非规格化并且所述乘数操作数和所述被乘数操作数的乘积将会引起下溢的特殊情况:
确定所述乘数操作数的阶码和所述被乘数操作数的阶码的和与所述累加数操作数的阶码之间的阶码差;
确定非规格化的累加数操作数的有效数中的前导零的数量;以及
在所述前导零的数量加上与所述第一级中的数据通路的宽度有关的非负整数常数所得到的值超过A的阶码与B的阶码之和减去C的阶码所得到的值的情况下,左移位所述累加数操作数的有效数以产生左移位累加数值,然后在所述第一级中对C进行累加。
17.根据权利要求16所述的微处理器,其中,所述非负整数常数是所述累加数操作数的有效数能被左移位并仍适应部分乘积求和数据通路的最大左移位量。
18.一种微处理器,包括:
FMA执行逻辑即浮点乘法累加执行逻辑,其被配置为执行形式为±A*B±C的浮点乘法累加指令,其中A、B和C分别是所输入的各自具有有效数和阶码的乘数操作数、被乘数操作数和累加数操作数;
其中,所述FMA执行逻辑包括第一级和第二级,所述第一级和所述第二级分别用于针对所输入的操作数的第一子集和第二子集将C累加到A和B的乘积,
针对所输入的操作数的第一子集,在所述FMA执行逻辑生成规格化非冗余和之前,在所述第一级中将C累加到A和B的部分乘积,
针对所输入的操作数的第二子集,在所述第二级中将C累加到A和B的部分乘积的规格化非冗余和,
所述FMA执行逻辑被配置为计算出ExpDelta的值,其中ExpDelta等于A的阶码和B的阶码的和减去C的阶码所得到的值,所述计算包括针对A的阶码、B的阶码和C的阶码中的任何偏差进行校正;
所述FMA执行逻辑还被配置为在C为非规格化的情况下确定C中的前导零的数量;以及所输入的操作数的第一子集包括:
ExpDelta大于或等于-K的规格化操作数的情况,其中K与所述第一级中的数据通路的宽度有关;
针对C向A和B的乘积的累加引起消去的可能性的ExpDelta的情况;以及所述前导零的数量加上K所得到的值超过-ExpDelta的、涉及非规格化C的情况,其中,所输入的操作数的第二子集包括不在所述第一子集中的A、B和C的值。

说明书全文

微处理器中执行FMA指令的方法和微处理器

[0001] 相关申请
[0002] 本申请涉及2015年6月24日提交的标题为“Non-Atomic Split-Path Fused Multiply-Accumulate”的第14/748,817号美国专利申请(“’817申请”)和2016年7月5日提交的标题为“Chained Split Execution of Fused Compound Arithmetic Operations”的第15/202,351号美国专利申请(“’351申请”),两者的全部内容通过引用包含于此。

技术领域

[0003] 本发明涉及用于进行算术运算(更特别地,熔合FMA运算)的微处理器设计。

背景技术

[0004] 呈现本背景技术以针对本公开提供有含义的上下文。本背景技术可以包括不构成现有技术或者包括并非是现有技术的一部分的要素的问题描述和主题。因此,不应将本背景技术中的任何内容视为现有技术,除非该内容是不言自明且可证实的背景技术。
[0005] 浮点乘法累加(FMA)逻辑是现代计算机处理器的关键组件。在FMA操作中,执行逻辑进行可由±A*±B±C(其中A、B和C各自是分别表示乘数、被乘数和累加数的浮点数)表示的操作。
[0006] FMA设计的目标之一是缩短关键时序通路。这引领一些FMA设计者分析不同类别的FMA计算并且设计对某些类型的FMA计算而言最优化的逻辑。例如,授予Srinivasan的US2012/072703描述了用于对累加数操作数进行累加的具有近和远的数据通路的整体乘法累加单元。近的通路应对如下情况:乘数阶码(exponent)的乘积与累加数阶码之间的差(以下称为ExpDelta)处于(-2,-1,0,1)的阈值范围内。远的通路应对其它情况。
[0007] ’817申请描述了如下逻辑:针对远比Srinivasan大的操作数输入组,将累加数与部分乘积累加。简言之,如果累加数的大小相对于乘积的大小而言足够小从而不需要超出数据通路可容纳的阶码对齐左移位,则累加数可以注入到部分乘积加法器中。例如,如果部分乘积加法器数据通路等于1加上两倍的有效数宽度所得到的值,则在ExpDelta≥-1的情况下,将累加数与部分乘积累加。如果该操作将引起有效减法,则对于ExpDelta=-2的情况,累加同样在部分乘积加法器中进行。然而对于其它情况,累加数是在生成了部分乘积的规格化(normalized)非冗余和之后单独进行累加的。如这里所使用的,ExpDelta是指被乘数和乘数的阶码的和减去累加数阶码所得到的值。
[0008] 利用这两个参考,基于操作数阶码值来确定通路或累加级。但对于非规格化操作数而言,并不能立即知晓真正的阶码值(即,在非规格化值被规格化为无限精度阶码的情况下阶码将会成为的值)。结果,针对一个或多个非规格化操作数的ExpDelta计算,无法准确反映累加数操作数可以在部分乘积加法器内对齐的可能性。此外,由于无法知晓非规格化累加数的真正大小,因此非规格化输入可能会在分体(split-unit)FMA的设计中带来复杂性。相对于下溢(underflow)乘积,非规格化累加数可能小于或大于下溢乘积。这在对非规格化累加数进行恰当对齐以进行累加方面带来了挑战。
[0009] 典型的现有技术应对非规格化输入的问题的方式是对输入进行预规格化。这是通过使FMA逻辑在FMA单元的前端针对各操作数的前导零的数量进行计数来实现的。遗憾的是,该初始前导零的确定成为关键通路的一部分,从而减慢了FMA逻辑的执行速度。另一危害是预规格化可能会对指令造成延迟。一些设计花费多个处理器周期来容纳预规格化。这可能会带来以下情形:需要对指令进行重播,并且依赖于该指令的任何指令都得被延迟。

发明内容

[0010] 提供本发明内容以引入以下在具体实施方式和附图部分中进一步描述的主题。以下所述的主题可以包括对于本发明或者对于本发明的一些实施例而言并非必要的要素和方面以及特定计算或处理事情的方式。因此,本发明内容不应当用于限制要求保护的主题的范围。
[0011] 在一方面,提供一种用于在微处理器的FMA计算中处理非规格化累加数的方法。微处理器确定乘数的阶码和被乘数的阶码的和与累加数操作数的阶码之间的阶码差。微处理器还确定非规格化累加数操作数的有效数中的前导零的数量。在前导零的数量加上非负整数常数所得到的值超过阶码差的绝对值的情况下,将累加数操作数左移位并且与乘数和被乘数的部分乘积相加。
[0012] 在一个实现中,非负整数常数是累加数操作数的有效数可以左移位并仍适应部分乘积求和数据通路的最大左移位量。
[0013] 在另一方面,微处理器在确定出前导零的数量和阶码差之后,从阶码差减去前导零的数量,以得到调整后的阶码差值。微处理器还判断是否满足涉及调整后的阶码差值的值的第一条件以及累加是否将引起有效减法。如果满足第一条件,则微处理器在部分乘积加法器中将累加数与乘数和被乘数的部分乘积累加。如果不满足第一条件,则微处理器首先在部分乘积加法器内计算乘积,然后在第二累加操作中累加该乘积。
[0014] 在又一方面,微处理器将最大部分乘积的最高有效位(MSB)与部分乘积加法器数据通路的指定位的位置对齐,确定用于表示部分乘积加法器数据通路中的比指定位的位置高的位的位置的数量的常数K,并且判断调整后的阶码差值是否至少为-K或者在有效减法的情况下是否至少为-K-1。
[0015] 在又一方面,微处理器被设置为包括FMA执行逻辑,该FMA执行逻辑包括部分乘积加法器。部分乘积加法器被配置为针对所输入的操作数值的如下子集将C与A和B的部分乘积累加,其中在该子集中,C的绝对值小于或接近于A和B的乘积的绝对值。FMA执行逻辑被配置为通过确定阶码差的值和非规格化C中的前导零的数量来应对C为非规格化的特殊情况。在前导零的数量加上非负整数常数所得到的和超过阶码差的情况下,微处理器则对C进行左移位以产生要在部分乘积加法器中累加到A和B的部分乘积的值。
[0016] 在又一方面,微处理器被设置为针对所输入的操作数的第一子集和第二子集分别在第一级或第二级中对C进行累加。针对所输入的操作数的第一子集,在FMA执行逻辑生成规格化非冗余和之前,将C累加到A和B的部分乘积。针对所输入的操作数的第二子集,将C累加到A和B的部分乘积的规格化非冗余和。FMA执行逻辑还被配置为应对累加数为非规格化并且乘数操作数和被乘数操作数的乘积将会引起下溢的特殊情况。在前导零的数量加上与第一级中的数据通路的宽度有关的非负整数常数所得到的值超过A的阶码与B的阶码的和减去C的阶码所得到的值的情况下,通过对C进行左移位并且在第一级中对C进行累加来应对该特殊情况。
[0017] 在附加方面,微处理器被设置为计算阶码差并且确定非规格化累加数C中的前导零的数量。微处理器还针对以下多个情况在生成规格化非冗余和之前将C与A和B的部分乘积累加,其中该多个情况包括:ExpDelta大于或等于-K的规格化操作数情况,其中K与部分乘积加法器中的数据通路的宽度有关;针对C向A和B的乘积的累加引起消去的可能性的ExpDelta情况;以及前导零的数量加上K所得到的值超过-ExpDelta的涉及非规格化C的情况。

附图说明

[0018] 针对以下说明和附图,本发明的这些和其它目的、特征和优点将变得更好理解。
[0019] 图1是根据本发明的具有包括分级FMA逻辑的执行单元的流线微处理器核的一个实施例的简化图。
[0020] 图2是图1的FMA逻辑的一个实施例的框图,其中,针对FMA输入的第一子集和第二子集分别在第一级和第二级中对累加数进行累加。
[0021] 图3是图2的FMA逻辑的第一级中的用于处理非规格化数的控制逻辑的一个实施例的框图。
[0022] 图4是示出用于确定要注入到图3的部分乘积求和逻辑中的值的选择逻辑的一个实施例的图。
[0023] 图5是示出双精度所用的64位IEEE FMA数类型的图。
[0024] 图6是示出数据通路的宽度与累加数在该数据通路内对齐以与部分乘积进行累加的能之间的示例性而非限制性关系的图。
[0025] 图7是示出在ExpDelta等于+9的FMA计算中的部分乘积加法器数据通路中将没有进行布斯(Booth)重新编码的部分乘积与累加数对齐的简化图。
[0026] 图8是示出在ExpDelta等于+34的FMA计算中的部分乘积加法器数据通路中将没有进行Booth重新编码的部分乘积与累加数对齐的简化图。
[0027] 图9是示出在ExpDelta等于-1的作为有效减法的FMA计算中的部分乘积加法器数据通路中将没有进行Booth重新编码的部分乘积与累加数对齐的简化图。
[0028] 图10是示出在ExpDelta等于-4的FMA计算中的部分乘积加法器数据通路中将部分乘积与累加数对齐的简化图。

具体实施方式

[0029] 以下说明本发明的例示性典型实施例。为了清楚,本说明书中并不描述实际实现的所有特征,因为本领域技术人员应理解,在任何这种实际实施例的开发中,大量特定实现的决定是为了达到诸如服从系统相关及商业相关的约束等的根据实现而有所变化的特定目标而作出的。此外,应理解,这种开发工作可能是复杂且耗费时间的,但尽管如此,这将会是本领域技术人员享有本公开的益处而进行的常规工作。对优选实施例的各种修改对于本领域技术人员而言将变得明显,并且这里所定义的一般原则可以应用于其它实施例。因此,并不意图将本发明局限于这里所示出并描述的特定实施例,而是要符合与这里所公开的原理和新颖特征一致的最宽范围。
[0030] 现在将参考附图说明本发明。仅为了说明而在附图中示意性示出各种结构、系统和装置,从而不使具有本领域技术人员已知的详情的本发明难以理解。然而,为了描述并说明本发明的例示性示例而包括附图。
[0031] 微处理器概要
[0032] 现在参考图1,示出用于例示微处理器10的框图。微处理器10具有多个执行单元,这些执行单元包括被配置为执行FMA计算的整体或分体逻辑8。在一个实施例中,通过如’817申请中所述的改进的乘法器和改进的加法器来进行FMA计算。在另一实施例中,通过整体FMA执行单元来进行FMA计算,其中,已经将该整体FMA执行单元改进成包括第一级和第二级以分别针对FMA输入的第一子集和第二子集来进行累加数的累加。
[0033] 微处理器10还包括指令高速缓存2、指令转译器和/或微代码ROM 4、重命名单元和保留站6、(可选的)(针对使用分体FMA逻辑的实施例的)舍入(rounding)高速缓存11、架构寄存器16和(包括重命名寄存器的)重排序缓冲器14。其它功能单元(未示出)可以包括微代码单元;分支预测器;包括高速缓存存储器层级(例如,1级数据高速缓存、2级高速缓存)的存储器子系统、存储器排序缓冲器和存储器管理单元;数据预取单元;以及总线接口单元;等等。微处理器10具有非循序(out-of-order)执行微架构,在该非循序执行微架构中可以不按照程序顺序来发出指令以供执行。更具体地,可以不按照程序顺序来发出由架构指令(或宏指令)所转译或转换成的微指令。微指令的程序顺序与微指令所转译或转换自的各架构指令的程序顺序相同。微处理器10还具有超标量微架构,该微架构能够每时钟周期向执行单元发出多个指令以供执行。在一个实现中,微处理器10以与x86指令集架构兼容的方式提供指令的执行。
[0034] 架构FMA指令1沿着微处理器的指令流水线(pipeline)5从取指单元向执行单元行进。从用于高速缓存从系统存储器所获取的架构指令1的指令高速缓存2取指架构指令1。指令转译器和/或微代码ROM 4将从指令高速缓存2取指的架构指令1转译或转换成微处理器10的微架构的微指令集的微指令3。执行单元8和9执行微指令。由架构指令1转译或转换成的微指令3实现架构指令1。重命名单元6按程序顺序针对微指令3接收并分配ROB 14中的条目,利用所分配的ROB条目的索引来更新微指令3,将各微指令3分派到与将要执行该微指令
3的执行单元相关联的适当的保留站6,并且进行针对该微指令3的寄存器重命名和依赖性生成。
[0035] FMA逻辑
[0036] 图2是示出图1的FMA逻辑8的一个实施例的简化框图。该图的左上部分示出操作数输入21,该操作数输入21包括浮点乘数A、浮点被乘数B和浮点累加数C。控制逻辑22、累加数对齐和注入逻辑24、乘法器阵列26以及第二级累加逻辑41接收这些操作数输入的一个或多个或者全部。在块21的正下方,该图示出与FMA计算相关联的符号和运算符指示符23。
[0037] FMA逻辑8被再划分为第一级30和第二级40。第一级30主要集中于操作数A和B的乘法。第一级30还针对操作数输入的第一子集将操作数C累加到A和B的乘积。第二级40主要集中于针对操作数输入的第二子集将C累加到A和B的乘积。
[0038] FMA逻辑8还被配置为执行仅涉及乘法的指令以及仅涉及加法或减法的指令。特别地,第一级30被配置为不仅进行FMA操作的部分,而且还执行仅涉及乘数和被乘数的标准浮点乘法指令。同样地,第二级40还被配置为执行完全不涉及乘法的标准浮点加法和减法指令。
[0039] 在一个实施例中,第一级30和第二级40被包括在整体执行单元中。在类似于’817和’351申请的另一实施例中,第一级被包括在改进的乘法器单元中并且第二级被包括在改进的加法器单元中,其中该乘法器单元和加法器单元这两者(一般如任何执行单元那样)具有由操作数总线供给的输入操作数端口和连接至ROM 14的输出端口。
[0040] 控制逻辑22接收操作数A、B和C的阶码以及符号和运算符指示符23,并且确定ExpDelta值。ExpDelta值是指乘数的阶码和被乘数操作数的阶码的和减去累加数操作数的阶码所得到的值。以下进一步说明该值。总的来说,该值提供如下指示:相对于乘数和被乘数的乘积,阶码对齐的累加数应右移位或左移位多少。(阶码对齐是指对操作数进行左移位或右移位以使得所有操作数共用同一阶码值。)该值不仅可用于判断累加数是否能够适应部分乘积求和数据通路,而且还可用于在乘积求和数据通路92内使累加数对齐。与该ExpDelta计算一致地,控制逻辑22选择累加数是将在部分乘积加法器32(PPA)中累加还是将在第二级累加逻辑41中累加。
[0041] 累加数对齐和注入逻辑24接收操作数C、符号和运算符指示符23以及来自控制逻辑22的ExpDelta值。逻辑24使用该信息来有条件地对齐操作数C并将操作数C注入到PPA 32中。如果控制逻辑22选择第二级累加逻辑41来累加C,则如参考图3中的mux 74所论述的,累加数对齐和注入逻辑24将零值注入PPA32。
[0042] 乘法器阵列26接收操作数A和B,并且将操作数A和B相乘以产生多个部分乘积,并且将该多个部分乘积发送到PPA32。
[0043] PPA 32不仅接收部分乘积以及有条件地接收阶码对齐的操作数C,还接收符号和运算符指示符23。利用该信息,PPA 32生成和与进位向量,其中该和与进位向量相加时产生最终和。
[0044] 最终加法器34将从PPA 32接收到的和与进位向量相加,从而产生非冗余预规格化和。
[0045] 前导数字预测器和编码器36也接收和与进位向量,由此产生用于对非冗余预规格化和进行规格化的移位值。
[0046] 规格化移位器38接收非冗余预规格化和,并且使用移位值来对非冗余预规格化和进行规格化。规格化移位器38产生中间值。
[0047] 对于FMA操作,提供第一级舍入和阶码生成逻辑46以生成舍入位(’817申请还将舍入位称为计算控制位),以通知是否需要在第二级中进行累加并且引导由第二级舍入和阶码生成逻辑48所进行的最终舍入。对于这些操作,第一级舍入和阶码生成逻辑46接收规格化移位器38所产生的中间值并且在不舍入规格化移位器38的输出的情况下生成舍入位。
[0048] 第一级舍入和阶码生成逻辑46还被配置为完成标准浮点乘法(与乘法累加相区分)操作。对于这些标准浮点乘法操作,第一级舍入和阶码生成逻辑46接收规格化移位器38所产生的中间值,进行完全及最终的舍入,并生成最终值。
[0049] 如第二级40所示,累加逻辑41被配置为经由专用总线或网络来接收第一级30所生成的中间值。累加逻辑41将C累加到该中间值并产生预舍入输出。如前所述,第二级40还被配置为使用从两个输入操作数端口接收到的值来完整地进行标准浮点加法和减法(同样与FMA计算相区分)。
[0050] 第二级舍入和阶码生成逻辑48从第二级累加逻辑41接收预舍入输出,进行完全及最终的舍入,并生成最终值。
[0051] 如图底部所示,乘法器45从第一级30和第二级40接收最终值,并且基于从控制逻辑22接收到的选择值来选择这些值其中之一作为FMA逻辑8的输出。
[0052] ExpDelta相对于PPA的关系
[0053] 在描述用于处理非规格化累加数输入的FMA逻辑8内的电路的一个实施例之前,描述ExpDelta的不同值相对于部分乘积数据通路92的关系是有益的。
[0054] 如果PPA数据通路92(图7和8)足够宽(至少约为最大支持操作数的有效数宽度的三倍),则可以在PPA 32内累加C。一些现有技术所使用的该方法需要大得多的PPA 32以及大得多的对齐移位器和最终加法器34。遗憾的是,移位器越大并且最终加法器34越大,延迟越大。这相应地使得FMA逻辑更难以满足处理器的周期时间目标。
[0055] 在并非显而易见的方式中,将部分乘积和C的累加分离到第一级和第二级中(在有策略地进行的情况下),以带来更快速操作的可能性。这允许第一级和第二级这两者中的对齐移位器和数据通路更小,以使得与由于需要两个累加和/或部分舍入操作而失去的优点相比能够得到总体上速度更快的优点。在如’817申请所论述的那样与舍入指示符的生成相结合地进行的情况下,还允许通过单独的特别改进的乘法器和加法器执行单元来以两个步骤进行FMA操作。此外,这允许特别改进的乘法器进行标准乘法操作,并且该特别改进的加法器能够进行标准加法操作,从而远比传统的FMA执行单元更高效。
[0056] 以上所述的益处依赖于将部分乘积与C的累加有策略地分离到第一级和第二级中。该策略的一方面是针对FMA操作数值的子集在PPA 32中而不是在累加逻辑41中累加C。该策略的另一方面是确定该子集的边界。
[0057] 例如,在潜在的块消去(mass cancellation)的所有情况下,跨ExpDelta值-2~+1的在PPA 32中累加C存在优点。这是由于在块消去的情况下,由此得到的值可能需要在舍入之前被规格化。在C在PPA 32内累加的情况下,第一级30中的全面规格化移位器38可以进行规格化。这避免了需要使用(或者需要在整体FMA单元中提供)第二级中的同样全面的规格化移位器。
[0058] 在累加数小于乘积的所有情况下,C在PPA 32内累加也存在优点。特别地,这避免了在累加逻辑41中提供最大支持操作数的有效数宽度的至少两倍宽的累加数据通路的必要性。
[0059] 这可以通过以下事实来说明:在数的标准累加中,假设结果精度与输入操作数的精度相同,则一般仅有单个操作数对舍入以及舍入用的粘滞位(sticky bit)的确定有影响。如果如此,则宽度为仅一个有效数加一的数据通路足以(与粘滞收集逻辑一起)进行累加。在粘滞和舍入位的计算中,任何更低的有效位均计算在内。
[0060] 但在FMA计算中,A和B的乘积产生有效数宽度的两倍宽的中间结果。如果C的绝对大小小于该乘积的绝对大小,则该乘积和C两者均可以影响舍入和粘滞位。因此,对于这种C值而言,需要更宽的数据通路(至少为有效数宽度的两倍宽)来将乘积累加到C。在累加逻辑41中容纳这种累加将需要加宽累加逻辑41中的数据通路,这会影响计算延迟。这因而将不仅延迟FMA计算,而且还延迟使用FMA逻辑8来进行的标准加法和减法计算。
[0061] 由于上述理由,因此’817申请开创了如下策略:在部分乘积加法器32中应对所有块消去和相对小的C的情况,而在所有其余情况下使用改进的加法器的累加逻辑来将C累加到A和B的乘积,并且保持PPA数据通路的宽度93最小。如上所述,由此得到的一个优点是在改进的加法器(或加法级)中可以不使用在其它情况下将需要的电路(诸如规格化器等),或者在仅处理FMA的电路中从改进的加法器消除了该在其它情况下将需要的电路,这是因为在改进的乘法器(或者乘法级)内应对舍入前将需要规格化的所有情况。这潜在地简化了改进的加法器(或加法级)的电路。同时,将PPA数据通路的宽度93保持为最小,这使得PPA数据通路92的复杂度最小化,并且由于需要更小的对齐,因而明显使得时间延迟最小化。
[0062] 在实现以上策略的情况下,(对于规格化操作数而言)A、B和C的值的(其中C可以在PPA 32中累加的)子集依赖于PPA的宽度和ExpDelta的值。ExpDelta表示乘数阶码Aexp和被乘数阶码Bexp的和与累加数阶码Cexp之间的差。由于阶码有偏差(bias),因此减去一倍的偏差值(即,Aexp+Bexp-Cexp-1×bias)
[0063] 根据阶码的幂属性的乘积,在将底数相同的两个数相乘的情况下,将阶码相加。因此,A与B相乘将得到等于Aexp+Bexp的阶码。在将乘数阶码和被乘数阶码相加之后,从该和减去累加数阶码Cexp看起来可能奇怪。但减去Cexp的目的与为了表示A和B的乘积的绝对大小而进行的Aexp+Bexp这一加法的目的不同。减去Cexp揭示了A和B的乘积的绝对大小与C的绝对大小之间的阶码差。该阶码差等于累加数C需要左移位或右移位以使累加数阶码与乘积阶码对齐的位数。
[0064] 因此,ExpDelta连同PPA 32的数据通路的宽度的知识一起,揭示了累加数C在移位之后是否可以在PPA 32中与部分乘积累加。结合以下的表1~3并且结合图7~10,在有限宽度的数据通路中将累加数与部分乘积对齐的问题将变得更清楚。
[0065] 为了例示该问题,呈现涉及对IEEE 754 64位浮点二进制数的FMA操作(没有进行Booth重新编码)的三个简化示例。这些示例假定PPA数据通路的宽度93等于有效数宽度的两倍加1(即,2×53+1=107位,标记为位0~位106),其中,规格化的乘数和被乘数输入的最大大小的部分乘积的MSB是对齐的,从而填充数据通路92的第三最高有效位列。为了维持例示的简要,这些示例假定没有使用Booth重新编码。然而,在使用Booth重新编码的情况下,这些原理也同样适用。
[0066] 示例1:A*B+C,其中,A=1.1×2-510;B=1.1×2-510;以及C=1.101×2-1021。A和B的阶码的和是-1020,比C的阶码-1021大(1)。因此,ExpDelta=-1020-(-1021)=+1。与阶码-1020相对应的最大部分乘积的MSB占据位列104。由于A*B大于C,因此C的MSB可以在数据通路92的位列103中对齐,并且在PPA 32中累加C。实际上,如以下的表所示,即使ExpDelta为-
1(即,C的MSB在第二MSB列中),或者在有效减法的情况下ExpDelta为-2(即,C的MSB在MSB位列中),C仍将适应PPA 32。在有效减法的情况下,将不会存在这种累加将上溢到MSB位列的左侧(即,位的位置106)的险。
[0067] 数据通路位的位置: 106 105 104 103 102 101 100 99..00部分乘积n-1:       1 1 0 0 0..0
部分乘积n:     1 1 0 0 0 0..0
累加数       1 1 0 1 0..0
[0068] 表1:数据通路中的部分乘积和累加数的相对位置
[0069] 然而,在非规格化累加数的情况下,ExpDelta分析是复杂的。由于非规格化累加数的有效数具有一个或多个前导零,因此非规格化累加数阶码Cexp值不表示累加数C的规格化阶码。实际上,规格化阶码应是Cexp-NLZ,其中NLZ是累加数C中的前导零的数量。前导零经由左移位有效地给予了累加数C一些额外空间,以在PPA数据通路92中与部分乘积对齐。
[0070] 作为实际问题,使累加数C对齐的该额外机会(或者有可能为需求)仅在乘积产生下溢的情况下存在,其中,下溢乘积在大小上大于或者至少非常接近于非规格化累加数。以下的示例2和3示出涉及非规格化累加数的情形:对于PPA数据通路92中的累加,一种是非规格化累加数可以对齐的情形,另一种是非规格化累加数不能对齐的情形。
[0071] 示例2:A*B+C,其中,A=1.1×2-512;B=1.1×2-513;以及C=0.0001101×2-1022(非规格化后)。由于A*B大于C,因此C可以在数据通路中与A和B的乘积的右侧对齐并且在PPA 32中求和。然而,仅通过比较阶码,这并不明显。A和B的阶码的和是-1025,比非规格化后的C的阶码-1022小(3)。最大部分乘积的MSB始终对齐以占据位列104,因此这次位列104与阶码-1025相对应。在前导零不计算在内的情况下,看起来C将会需要与位的位置107中的MSB对齐,从而与阶码-1022相对应。由于在本示例中,PPA 32没有提供位的位置107,因此仅基于阶码的检查,看起来无法在PPA 32中进行C的累加。然而,在规格化的情况下,C的真正值-1026
为1.101×2 。阶码-1026小于A和B的阶码的和,因此C可以在数据通路92中对齐。
[0072] 数据通路位的位置: 106 105 104 103 102 101 100 99..00部分乘积n-1:       1 1 0 0 0
部分乘积n:     1 1 0 0 0 0
累加数 0 0 0 1 1 0 1 0
[0073] 表2:数据通路中的部分乘积和累加数的相对位置
[0074] 示例3:A*B+C,其中,A=1.1×2-515;B=1.1×2-515;以及C=0.0001101×2-1022(非规格化后)。在本示例中,A*B显著小于C,因此C不能在数据通路92中与A和B的乘积累加。A和B的阶码的和是-1030,比非规格化后的C的阶码-1022小(8)。即使在前导零计算在内或者找出了C的规格化阶码(-1026)的情况下,C相对于部分乘积的左侧需要进行过远的对齐而不能适应PPA 32也变得明显。因此,C的累加不能在PPA 32中进行。
[0075]
[0076] 表3:累加数不适应数据通路
[0077] 然而,如果PPA数据通路的宽度93比针对本示例所设计的宽度宽两个位的位置(以PPA 32和最终加法器34中的延迟增大而累加逻辑41的延迟并不相应减小为代价),则仍C可以在PPA 32中累加。
[0078] 以上示例示出如下的有限状况:假设下溢值大于、等于或非常接近于非规格化累加数,则即使在乘积下溢的情况下也可以在PPA 32中累加非规格化累加数。
[0079] 图7~10包括PPA 32中的非规格化累加数的累加的其它例示。这些例示提供以下更简单的示例:数据通路92被配置为仅容纳针对有效数提供23位(加1个隐式位)的32位IEEE 754浮点数。
[0080] 如图7所示,浮点数的有效数的部分乘积计算产生部分乘积90a~90n,其中如果没有使用Booth重新编码,则90a~90n各自相对于先前的部分乘积(如果存在)偏移1位。最高有效部分乘积91b的MSB与等于0的ExpDelta相对应,可选地,与初始计算出的乘积阶码相对应,并且该乘积阶码是单独确定的。
[0081] 二进制乘法的本质意味着部分乘积通路92必须为最少2m-1位,刚好容纳部分乘积,其中部分乘积的MSB的阶码将等于乘数和被乘数的阶码的和Aexp+Bexp。在部分乘积相加之后,由此生成和与进位向量(carry vector),则需要额外的位(使得总共为2m位,该2m位的MSB的阶码与阶码Aexp+Bexp+1相对应)。这里,PPA 32提供2m+1位,以容纳所有潜在块消去情况的累加,其中这些累加可能需要在舍入前进行包括有效减法(其中ExpDelta=-2)的规格化。
[0082] 图7还示出具有比最大部分乘积(即,ExpDelta=+9)小9个二进制数量级的阶码的累加数C。由于C适应该部分乘积数据通路92,因此C可以在数据通路92中累加。
[0083] 图8示出配置在49位宽的数据通路92内的两个IEEE 754 32位浮点数的乘法的24个部分乘积,重申,为了简便而没有使用Booth重新编码。ExpDelta为+34的累加数C与部分乘积阶码对齐,使得C可以在数据通路92中累加。累加数的最高有效位在数据通路92中累加。其余的位进入粘滞位收集电路以供舍入FMA计算的结果使用。
[0084] 图9示出累加数C的大小略大于最大部分乘积(ExpDelta=-2)的大小的计算。假定该计算是有效减法,则C可以在PPA 32中累加。
[0085] 与此相对,图10示出累加数C显著大于最大部分乘积(ExpDelta=-5)的计算。如果C是规格化数,则数据通路92的宽度不足以容纳C在PPA 32中的累加。在优选实施例中,反而C将必须在部分乘积加在一起之后累加,由此(至少)产生进位与和向量,并且还可能产生非冗余和向量。然而,如果C是非规格化数,并且至少前三个最高有效位为0,则C可以在数据通路92中累加,只要供给(诸如这里所述的)逻辑以检测该条件即可。
[0086] 如以上可以看出,关于C是否可以在PPA数据通路92中累加的判断与ExpDelta、PPA数据通路92中的额外位的数量以及C为非规格化的情况下的前导零的数量有关。如’817申请中所示,该判断还与FMA计算是否将构成有效减法有关。在图6中示出该关系。图6示出根据数据通路92的宽度等而可以在PPA 32中进行操作数C的累加所针对的输入操作数的子集的范围。对于不属于可适用子集的输入操作数,操作数C的累加在第二级累加逻辑41中进行。
[0087] 非规格化处理
[0088] 上述处置方法示出可以在PPA 32中累加非规格化累加数的状况。现在将注意力转向用于识别这些状况并处理非规格化累加数以在PPA 32内累加的逻辑。
[0089] 图3是用于在图2的FMA逻辑的第一级中处理非规格化数的控制逻辑22的一个实施例的简化框图。控制逻辑22检查输入操作数的阶码,判断累加数C是否为非规格化,并且判断累加数C(规格化或非规格化)是否将在PPA中累加。
[0090] 该图的顶部示出计算作为乘数阶码与被乘数阶码之和的乘积阶码(即,Aexp+Bexp)的求和块54。最初,该值是有双倍偏差的。根据IEEE 754,浮点数是有偏差的,使得对于阶码而言值“1”实际上表示最小可表示的阶码值,对于64位浮点数而言为-1022。两个有偏差的阶码相加生成具有两倍偏差的值。因此,求和块54包括用以减去一倍的偏差的逻辑,以产生偏差一致的乘积阶码值。
[0091] 在一个特定实现中,提供减法块61和62这两个逻辑,减法块61和62各自减去累加数阶码以产生ExpDelta值。减法块61使用2的补码(complement)减法来运算ExpDelta。减法块62使用1的补码减法来运算ExpDelta。减法块61所产生的结果被馈送到右移位器72中。减法块62的结果的N个最低有效位被反向器63反向并被馈送到左移位器68和比较电路66中。
[0092] 提供两个减法块61和62的原因是使得累加的两个情况(一个情况涉及正的或接近正的ExpDelta,并且另一个情况涉及显著为负的ExpDelta)均可以利用1的补码减法和2的补码减法的相对效率。1的补码减法针对负的结果比针对正的结果相对更高效,这是因为针对正的结果需要进行校正。负的结果仅需要被反向以确定绝对值,这是反相器63的目的。与此相对,2的补码减法针对正的结果比针对负的结果相对更高效。由于PPA 32最终将针对正的ExpDelta仅接收右移位器72的结果,并且针对负的ExpDelta仅接收左移位器的结果,因此将利用1的补码减法器62和2的补码减法器61所生成的ExpDelta值分别馈入左移位器68和右移位器72是有利的。
[0093] 应注意,反向器63仅需要接收并反向没有偏差的ExpDelta的N个最低有效位。将N的值设置为累加数C可以左移位并且累加数C的值仍适应数据通路92的最大量(舍入至最接近的2的幂)。例如,64位IEEE数具有53位有效数。如果累加数C向乘数乘以被乘数的乘积的左侧移位了53位以上(加上数据通路所提供的任何附加位列),则累加数C不能适应数据通路92。数64(即,26)是53之后的第一个2的幂。因此,在本示例中,优选将N设置为6。
[0094] 存在不在PPA 32中累加的一组非规格化累加数输入。这包括但不限于对于双精度数而言ExpDelta为-55或以下的输入。这些是累加数C的大小远大于乘积的大小的输入。对于这种输入,不存在第一级累加。代替地,计算乘积,运算舍入和粘滞位,并且将乘积、舍入和粘滞位传送到第二级。第二级通过对下溢乘积输入进行非规格化(即,将其右移位)来响应下溢乘积输入,这使下溢乘积输入与非规格化累加数输入正确对齐。因此,代替尝试在第一级中将非规格化累加数输入左移位(其中,数据通道92的宽度不足以容纳该移位),第二级将下溢乘积右移位与ExpDelta相等的量。第二级的宽度足以容纳第一级的运算乘积,将该运算乘积右移位ExpDelta,并且完成包括舍入的运算。
[0095] 没有偏差的ExpDelta值的其它位[MSB:N]被并入范围发现器64。范围发现器64是检测ExpDelta是否是非常大的负数(例如,-64或以下)的组合电路(例如,ExpDelta的所有MSB的逻辑“与”)。如果是,则这表示非规格化累加数相对于下溢乘积仍过大而不能在PPA数据通路92中累加。在FMA逻辑87仅可处理双精度数的实现中ExpDelta例如在-55~-63之间的情形中,(以下论述的)比较器66防止C在数据通路中累加。
[0096] 在求和块54正计算乘积阶码时,前导零编码器52计算累加数的有效数中的前导零NLZ的数量。加法器58将NLZ与常数Kdatapath相加。Kdatapath表示设置在PPA数据通路92中与A和B乘积的MSB对齐的位列左侧的位列的数量。在优选实施例中,Kdatapath等于1。加法器的输出AccShftLMax表示数据通路可以容纳的最大累加数左移位量。
[0097] 比较器66将AccShftLMax与对于负的ExpDelta而言等于ExpDelta的绝对值的反向器63的输出进行比较。如果AccShftLMax大于ExpDelta,则向将在稍后论述其逻辑的组合逻辑块70发送专用非规格化状态(special-denorm-case,SDC)信号。如果为真,则SDC信号表示累加数阶码,其中该累加数阶码的大小大于下溢乘积阶码(如负的ExpDelta所表示的)但不足以大到防止C在PPA数据通路92中累加。如果没有生成SDC信号,则C不能在PPA数据通路92中累加。
[0098] 控制逻辑22还与判断是否可以在PPA数据通路92中累加非规格化累加数并行且大致同时地,临时对Cmant进行左移位和右移位以在PPA数据通路92中临时累加Cmant。首先,在确定为操作是有效减法的情况下,反向器对Cmant进行反向。接着,(‘817申请中所述的)EffSub信号用作多工器(mux)56上的选择信号以在Cmant的反向值和非反向值之间进行选择。左移位器68和右移位器72两者均接收所选择的累加数值,由此分别生成左移位值AccShftL和右移位值AccShftR。
[0099] 将左移位值AccShftL和右移位值AccShftR以及以下说明的旁路或零值馈送到多工器74中,然后将多工器74所选择的值注入PPA 32。多工器74从组合逻辑70接收两个选择信号:旁路选择信号和ShiftL选择信号。
[0100] 尽管这对于本发明而言仅具有次要的重要性,但控制逻辑22还示出’817申请中所述的从Z位产生Z’位(实质上是级选择位)的“或”电路。Z’位表示是否在PPA数据通路92内进行C的累加。应用于’817申请的例示电路的Z’位而不是Z位将与其它计算控制指示符一起传递到’817申请的改进加法器。
[0101] 图4示出图3的组合逻辑70的多工器选择逻辑。所示的特定的评价顺序是示例性的而不是关键性的。在块91中,组合逻辑70评价或接收关于正被执行的指令是FMA指令还是诸如标准浮点乘法等的一些其它指令的信号。如果是标准浮点乘法,则流程进入块101。如果是FMA指令,则流程进入块93。在块93中,如果乘数A和被乘数B的乘积为零(例如,如预计算操作数标记位所示),则流程也进入块101。如果乘积非零,则流程进入块95。在块95中,组合逻辑70评价或接收关于累加数C是否为非规格化的信号。如果为非规格化,则流程进入块97。如果不为非规格化,则流程进入块103。在块103中,逻辑70评价ExpDelta是否在’817申请的图2中所述的第一级(即,改进的乘法器)中累加的ExpDelta/EffSub数空间中。如果是,则流程进入块105。如果不是,则流程进入块101。在块97中,组合逻辑评价或接收关于ExpDelta是否在AccShiftLMax所定义的范围内的信号。如果是,则流程进入块99。如果不是,则流程进入块101。
[0102] 如果任何上述判断使得流程进入块101,则在块101中,逻辑70选择零或旁路值以注入PPA 92。
[0103] 如果任何上述判断使得流程进入块99,则在块99中,逻辑70选择C的左移位值以注入PPA 92。
[0104] 如果任何上述判断使得流程进入块105,则在块105中,逻辑70选择C的右移位值以注入PPA 92。
[0105] 图5示出双精度编码所用的64位IEEE FMA数类型。图5所示的位示意图在对非规格化数的处理中所涉及的一些约束以及可在部分乘积数据通路92内对数累加的状况进行概念化方面是有用的。该图的顶行110示出符号、阶码和小数位区域。第二行112和第三行113示出与规格化数相关联的阶码值的范围(1~max-1)。第四行114示出如何使用针对阶码的0值来表示非规格化数。第五行115示出如何使用类非规格化数来表示正零和负零。最后两行116和117示出如何保留最大阶码值以用于表示正无穷和负无穷以及非数(NAN)值。
[0106] 从图5可以看出,例如,最小非规格化数(表示为除LSB位置中的单个1的位以外,小数中全为0)是最小可表示规格化数的大小的2-52倍。在下溢乘积的部分乘积如2-1076一样小的情况下,可以在PPA数据通路92中累加这种数。可以在PPA 32中累加的非规格化累加数值的范围随着非规格化累加数的大小的增大而减小。
[0107] 图5针对FMA逻辑8处理非规格化操作数的IEEE 754表征的方式的注释提供背景。在FMA逻辑8接收到操作数时,通过检查阶码位和尾数位来表征操作数。如果阶码位全为零并且尾数位为非零,则如图5的行114所示,操作数被识别为非规格化输入值。尽管所有的阶码位均为零,但非规格化数的阶码隐含地与规格化数的最小可表示阶码相同。在双精度浮点数的情况下,最小可表示阶码是-1022(对于规格化数在阶码区域中使用1来表示,对于非规格化数在阶码区域中使用0来表示)。尽管非规格化数享有规格化数的最小可表示阶码,但所有非规格化数均小于最小可表示规格化数,这是因为所有规格化数的隐式MSB为1,而非规格化数的相应隐式位将是0。
[0108] 因此,在IEEE操作数被接收到FMA逻辑8的数据通路中的情况下,进行一些适应。一方面,提供显式位以表示IEEE隐式位。此外,与以上论述一致,针对规格化数使用1来表示隐式位并且针对非规格化数使用0来表示隐式位。此外,响应于非规格化输入值,可以校正阶码区域的LSB(即,设置为1),并且余下隐含位为0。这确保了非规格化数与规格化数恰当地对齐。
[0109] 在将非规格化累加数从存储器接收到FMA逻辑8、但不存在足够的前导零来左移位累加数以使得累加数与部分乘积对齐的情况下,将累加延迟到FMA逻辑8的第二级40(例如,改进的加法器)。第二级40不仅接收下溢乘积,而且还接收校正了阶码的非规格化累加数。
[0110] 这留给第二级40与其在其它情况下必须进行的作业相比更简单的作业。第二级40检查所输入的阶码值。较大的阶码值对应于累加数。较小的阶码值对应于下溢乘积值。这使得第二级40对下溢乘积值进行右移位。计算在改进的加法器中的远通路中行进。该计算的结果可以是非规格化的。然而,如果该计算是有效加法,则该计算可以使得产生规格化数。在任一情况下,远通路的舍入仅舍入到与数据大小相关联的惯常LSB。对于诸如SSE和AVX等的一些指令集架构(ISA),现在与下溢结果是否产生例外无关地完成计算。对于诸如原始x87ISA等的其它ISA,第二级40将被配置为满足特殊要求,诸如在x87ISA的情况下,满足如下的要求:如果没有屏蔽下溢例外,则在舍入和最终阶码调整之前对和进行规格化。
[0111] 图6示出用于在PPA 32中进行操作数C的累加的输入操作数的子集。第一行显示ExpDelta数的行。第一列示出0~52的范围内的限定值。该限定值是通过为了进位和其它目的而由PPA数据通路所提供的MSB位列左侧的位的数量的和来决定的,如果FMA计算是有效减法,则该和加一,如果累加数C是非规格化的,则该和加上非规格化累加数操作数中的前导零的数量。
[0112] 尽管已经详细描述了本发明及其目的、特征和优点,但本发明也包括其它实施例。例如,本发明可适用于包括十进制和十六进制的浮点的其它编码,而并非仅适用于传统二进制IEEE 754。
[0113] 以软件算法以及针对计算机存储器内的数据位的操作的符号表示的形式呈现了本发明的部分和相应的详细描述。这些描述和表示是本领域技术人员将他们的工作的实质有效地传达给本领域其他技术人员所用的描述和表示。这里所使用的术语算法如一般使用那样被视为用于得到期望结果的前后一致的步骤序列。这些步骤是需要对物理量进行物理操作的步骤。经常地但并非必须地,这些量采用能够被存储、传递、组合、比较以及以其它方式进行操作的光、电或磁信号的形式。已经证实了主要是为了常用的原因而将这些信号称为位、值、元素、符号、字符、项或数等有时是方便的。
[0114] 然而,应铭记,所有这些和类似的术语要与适当的物理量相关联并且仅是应用于这些量的方便标签。除非另有具体说明,或者从论述可以明显看出,诸如“处理”或“运算”或“计算”或“判断”或“显示”等的术语是指计算机系统、微处理器、中央处理器或类似电子运算装置的动作和处理,其中这些电子运算装置将计算机系统的寄存器和存储器内的表示为物理、电子量的数据处理并转换成计算机系统存储器或寄存器或其它这种信息存储、传输或显示装置内的类似地表示为物理量的其它数据。
[0115] 还注意,实现本发明的方面的软件通常编码在一些形式的程序存储介质上或者经由一些类型的传输介质来实现。程序存储介质可以是电子的(例如,只读存储器、闪速只读存储器、电子可编程只读存储器)、随机存取存储器磁性的(例如,软盘硬盘驱动器)或光学的(例如,致密盘只读存储器或“CD ROM”),并且可以是只读的或者随机存取的。类似地,传输介质可以是金属迹线、双绞线、同轴线缆、光纤或本领域已知的一些其它合适传输介质。本发明不限于任何给定实现的这些方面。
[0116] 以上公开的特定实施例仅是例示性的,并且本领域技术人员应理解,他们可以容易地使用所公开的概念和具体实施例作为设计或修改实施本发明的相同目的所用的其它结构的基础,并且在没有背离如所附权利要求书所述的本发明的范围的情况下可以在此进行各种修改、置换和变动。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈