融合乘加运算的模拟转让专利

申请号 : CN201580042993.1

文献号 : CN106575214B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : P·V·阿拉加迪A·E·格鲁贝尔C·霍S·G·霍尔陈林

申请人 : 高通股份有限公司

摘要 :

至少一个处理器可模拟第一运算元、第二运算元和第三运算元的融合乘加运算。所述至少一个处理器可进行以下操作:至少部分地基于所述第一运算元与所述第二运算元相乘,确定中间值;确定上部中间值或下部中间值中的至少一者,其中确定所述上部中间值包括朝向零将所述中间值以指定位数目舍入,并且其中确定所述下部中间值包括由所述上部中间值减去所述中间值;至少部分地基于所述第三运算元与所述上部中间值或所述下部中间值中的一者的相加或相减,确定上部值和下部值;以及通过所述上部值和所述下部值相加,确定模拟融合乘加结果。

权利要求 :

1.一种用于模拟第一运算元、第二运算元和第三运算元的融合乘加运算的方法,所述方法包括:至少部分地基于所述第一运算元与所述第二运算元相乘,通过至少一个处理器确定中间值;

通过所述至少一个处理器,确定上部中间值或下部中间值中的仅一者,其中确定所述上部中间值包括朝向零将所述中间值以指定位数目舍入,并且其中确定所述下部中间值包括由所述上部中间值减去所述中间值;

至少部分地基于所述第三运算元和所述中间值的指数之间的差,通过所述至少一个处理器确定上部值和下部值,其中确定所述上部值和所述下部值包含所述第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加;以及通过所述上部值和所述下部值相加,由所述至少一个处理器确定所述第一运算元、所述第二运算元和所述第三运算元的模拟融合乘加结果。

2.根据权利要求1所述的方法,其中至少部分地基于第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加,通过所述至少一个处理器确定上部值和下部值包括:响应于所述中间值的正负号与所述第三运算元的正负号相同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以上:通过所述至少一个处理器,将所述上部值设置成所述上部中间值,以及通过将所述下部中间值和所述第三运算元的总和舍入到最接近的奇数,由所述至少一个处理器确定所述下部值。

3.根据权利要求2所述的方法,其中所述指定阈值为2。

4.根据权利要求1所述的方法,其中至少部分地基于第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加,通过所述至少一个处理器确定上部值和下部值包括:响应于所述中间值的正负号与所述第三运算元的正负号相同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以下或所述中间值的所述指数等于或小于所述第三运算元的所述指数:通过将所述上部中间值和所述第三运算元的总和舍入到最接近的偶数,由所述至少一个处理器确定所述上部值,以及通过所述至少一个处理器,将所述下部值设置成0.0。

5.根据权利要求4所述的方法,其中所述指定阈值为2。

6.根据权利要求4所述的方法,其中:

确定所述中间值包括通过所述至少一个处理器,对所述第一运算元和所述第二运算元的乘积进行归一化;以及将所述上部中间值和所述第三运算元的所述总和舍入到最接近的偶数包括至少部分地基于通过对所述中间值进行归一化而产生的保护位、舍入位和粘滞位中的一或多者,通过所述至少一个处理器,将所述上部中间值和所述第三运算元的所述总和舍入到最接近的偶数。

7.根据权利要求1所述的方法,其中至少部分地基于第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加,确定所述上部值和所述下部值包括:响应于所述乘积的正负号与所述第三运算元的正负号不同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值:通过所述至少一个处理器,将所述上部值设置成所述上部中间值,以及通过将所述下部中间值和所述第三运算元的总和舍入到最接近的奇数,由所述至少一个处理器确定所述下部值。

8.根据权利要求1所述的方法,其中确定所述第一运算元、所述第二运算元和所述第三运算元的模拟融合乘加结果进一步包括:通过所述至少一个处理器,对所述上部值和所述下部值的总和进行归一化;以及通过所述至少一个处理器,将所述上部值和所述下部值的所述归一化总和舍入到偶数。

9.根据权利要求1所述的方法,其中:

所述第一运算元、所述第二运算元和所述第三运算元包括32位浮点数;

所述中间值的尾数包括48位;以及

所述指定位数目包括24位。

10.根据权利要求1所述的方法,其中确定上部中间值或下部中间值中的至少一者进一步包括:确定所述上部中间值;以及

响应于所述中间值的指数比所述第三运算元的指数大指定阈值以上,确定所述下部中间值。

11.一种用于模拟第一运算元、第二运算元和第三运算元的融合乘加运算的设备,所述设备包括:存储器,其经配置以存储所述第一运算元、所述第二运算元和所述第三运算元;以及至少一个处理器,其经配置以:至少部分地基于所述第一运算元与所述第二运算元相乘,确定中间值;

确定上部中间值或下部中间值中的仅一者,其中确定所述上部中间值包括朝向零将所述中间值以指定位数目舍入,并且其中确定所述下部中间值包括由所述上部中间值减去所述中间值;

至少部分地基于所述第三运算元和所述中间值的指数之间的差,确定上部值和下部值,包含所述第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加;以及通过所述上部值和所述下部值相加,确定所述第一运算元、所述第二运算元和所述第三运算元的模拟融合乘加结果。

12.根据权利要求11所述的设备,其中所述至少一个处理器经进一步配置以:响应于所述中间值的正负号与所述第三运算元的正负号相同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以上:将所述上部值设置成所述上部中间值,以及

通过将所述下部中间值和所述第三运算元的总和舍入到最接近的奇数,确定所述下部值。

13.根据权利要求11所述的设备,其中:

所述指定阈值为2。

14.根据权利要求11所述的设备,其中所述至少一个处理器经进一步配置以:响应于所述中间值的正负号与所述第三运算元的正负号相同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以下或所述中间值的所述指数等于或小于所述第三运算元的所述指数:通过将所述上部中间值和所述第三运算元的总和舍入到最接近的偶数,确定所述上部值,以及将所述下部值设置成0.0。

15.根据权利要求14所述的设备,其中所述指定阈值为2。

16.根据权利要求14所述的设备,其中所述至少一个处理器经进一步配置以:对所述第一运算元和所述第二运算元的乘积进行归一化;以及至少部分地基于通过对所述中间值进行归一化而产生的保护位、舍入位和粘滞位中的一或多者,将所述上部中间值和所述第三运算元的所述总和舍入到最接近的偶数。

17.根据权利要求11所述的设备,其中所述至少一个处理器经进一步配置以:响应于所述乘积的正负号与所述第三运算元的正负号不同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值:将所述上部值设置成所述上部中间值,以及

通过将所述下部中间值和所述第三运算元的总和舍入到最接近的奇数,确定所述下部值。

18.根据权利要求11所述的设备,其中所述至少一个处理器经进一步配置以:对所述上部值和所述下部值的总和进行归一化;以及

将所述上部值和所述下部值的所述归一化总和舍入到偶数。

19.根据权利要求11所述的设备,其中:

所述第一运算元、所述第二运算元和所述第三运算元包括32位浮点数;

所述中间值的尾数包括48位;以及

所述指定位数目包括24位。

20.根据权利要求11所述的设备,其中所述至少一个处理器经进一步配置以:确定所述上部中间值;以及

响应于所述中间值的指数比所述第三运算元的指数大指定阈值以上,确定所述下部中间值。

21.一种用于模拟第一运算元、第二运算元和第三运算元的融合乘加运算的设备,所述设备包括:用于至少部分地基于所述第一运算元与所述第二运算元相乘,通过至少一个处理器确定中间值的装置;

用于通过所述至少一个处理器确定上部中间值或下部中间值中的仅一者的装置,其中用于确定所述上部中间值的所述装置包括用于朝向零将所述中间值以指定位数目舍入的装置,并且其中用于确定所述下部中间值的所述装置包括用于由所述上部中间值减去所述中间值的装置;

用于至少部分地基于所述第三运算元和所述中间值的指数之间的差,通过所述至少一个处理器确定上部值和下部值的装置,其中确定所述上部值和所述下部值包含所述第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加;以及用于通过所述上部值和所述下部值相加,由所述至少一个处理器确定所述第一运算元、所述第二运算元和所述第三运算元的模拟融合乘加结果的装置。

22.根据权利要求21所述的设备,其中用于至少部分地基于第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加,通过所述至少一个处理器确定上部值和下部值的所述装置包括:用于响应于所述中间值的正负号与所述第三运算元的正负号相同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以上以进行以下操作的装置:将所述上部值设置成所述上部中间值,以及

通过将所述下部中间值和所述第三运算元的总和舍入到最接近的奇数,确定所述下部值。

23.根据权利要求21所述的设备,其中用于至少部分地基于所述第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加,通过所述至少一个处理器确定上部值和下部值的所述装置包括:用于响应于所述中间值的正负号与所述第三运算元的正负号相同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以下或所述中间值的所述指数等于或小于所述第三运算元的所述指数以进行以下操作的装置:通过将所述上部中间值和所述第三运算元的总和舍入到最接近的偶数,确定所述上部值,以及将所述下部值设置成0.0。

24.根据权利要求21所述的设备,其中用于至少部分地基于所述第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加确定所述上部值和所述下部值的所述装置包括:用于响应于所述乘积的正负号与所述第三运算元的正负号不同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以进行以下操作的装置:将所述上部值设置成所述上部中间值,以及

通过将所述下部中间值和所述第三运算元的总和舍入到最接近的奇数,确定所述下部值。

25.根据权利要求21所述的设备,其中用于确定所述第一运算元、所述第二运算元和所述第三运算元的模拟融合乘加结果的所述装置进一步包括:用于对所述上部值和所述下部值的总和进行归一化的装置;以及用于将所述上部值和所述下部值的所述归一化总和舍入到偶数的装置。

26.一种存储指令的非暂时性计算机可读存储媒体,当所述指令执行时,使一或多个可编程处理器进行以下操作:至少部分地基于第一运算元与第二运算元相乘,确定中间值;

确定上部中间值或下部中间值中的仅一者,其中确定所述上部中间值包括朝向零将所述中间值以指定位数目舍入,并且其中确定所述下部中间值包括由所述上部中间值减去所述中间值;

至少部分地基于所述第三运算元和所述中间值的指数之间的差,确定上部值和下部值,其中确定所述上部值和所述下部值包含第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加;以及通过所述上部值和所述下部值相加,确定所述第一运算元、所述第二运算元和所述第三运算元的模拟融合乘加结果。

27.根据权利要求26所述的非暂时性计算机可读存储媒体,其中至少部分地基于第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加,确定上部值和下部值包括:响应于所述中间值的正负号与所述第三运算元的正负号相同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以上:将所述上部值设置成所述上部中间值,以及

通过将所述下部中间值和所述第三运算元的总和舍入到最接近的奇数,确定所述下部值。

28.根据权利要求26所述的非暂时性计算机可读存储媒体,其中至少部分地基于第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加,确定上部值和下部值包括:响应于所述中间值的正负号与所述第三运算元的正负号相同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值以下或所述中间值的所述指数等于或小于所述第三运算元的所述指数:通过将所述上部中间值和所述第三运算元的总和舍入到最接近的偶数,确定所述上部值,以及将所述下部值确定为0.0。

29.根据权利要求26所述的非暂时性计算机可读存储媒体,其中至少部分地基于第三运算元与所述上部中间值或所述下部中间值中的所述仅一者相加,确定所述上部值和所述下部值包括:响应于所述乘积的正负号与所述第三运算元的正负号不同,且响应于所述中间值的指数比所述第三运算元的指数大指定阈值:将所述上部值设置成所述上部中间值,以及

通过将所述下部中间值和所述第三运算元的总和舍入到最接近的奇数,确定所述下部值。

30.根据权利要求26所述的非暂时性计算机可读存储媒体,其中确定所述第一运算元、所述第二运算元和所述第三运算元的模拟融合乘加结果进一步包括:确定所述上部值和所述下部值的总和;以及

将所述上部值和所述下部值的归一化总和确定为偶数。

说明书 :

融合乘加运算的模拟

技术领域

[0001] 本发明涉及计算机处理中的融合乘加运算的模拟。

背景技术

[0002] 融合乘加(FMA)为可加速和提高计算的精确度的浮点算术所需的IEEE标准754-2008的运算,例如点积、矩阵乘法、牛顿-拉斐森(Newton-Raphson)法等等。给定运算元a、b和c,FMA运算用于将操作数a和b相乘并将a和b的乘积与c相加。将a和b的乘积与c的总和舍入到最接近的偶数(RTE),以产生最终结果,如下:结果=RTE((a*b)+c)。
[0003] 未融合乘加运算可粗略估计FMA运算的结果。给定运算元a、b和c,未融合乘加运算用于将运算元a和b相乘、将a和b的乘积舍入到最接近的偶数,并将经舍入的a和b的乘积与c相加以产生最终结果,如下:结果=RTE(RTE(a*b)+c)。

发明内容

[0004] 本发明呈现用于经由使用辅助指令来模拟融合乘加(FMA)运算的技术。根据本发明的技术,可经由辅助指令模拟FMA运算,以使得用于执行未融合乘加运算的现有硬件可用于模拟融合乘加运算,而不需要其它专用硬件。
[0005] 在本发明的一个实例中,用于模拟第一运算元、第二运算元和第三运算元的融合乘加运算的方法可包含至少部分地基于第一运算元与第二运算元相乘,通过至少一个处理器确定中间值。方法可进一步包含通过至少一个处理器确定上部中间值或下部中间值中的至少一者,其中确定上部中间值包括朝向零将中间值以指定位数目舍入,并且其中确定下部中间值包括由上部中间值减去中间值。方法可进一步包含至少部分地基于第三运算元与较高中间值或较低中间值中的一者相加,通过至少一个处理器确定上部值和下部值。方法可进一步包含通过上部值和下部值相加,由至少一个处理器确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果。
[0006] 在另一个实例中,用于模拟第一运算元、第二运算元和第三运算元的融合乘加运算的设备可包含经配置以存储第一运算元、第二运算元和第三运算元的存储器。设备可进一步包含至少一个处理器,其经配置以:至少部分地基于第一运算元与第二运算元相乘,确定中间值;确定上部中间值或下部中间值中的至少一者,其中确定上部中间值包括朝向零将中间值以指定位数目舍入,并且其中确定下部中间值包括由上部中间值减去中间值;至少部分地基于第三运算元与上部中间值或下部中间值中的一者相加,确定上部值和下部值;以及通过上部值和下部值相加,确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果。
[0007] 在另一个实例中,用于模拟第一运算元、第二运算元和第三运算元的融合乘加运算的设备可包含用于至少部分地基于第一运算元与第二运算元相乘而确定中间值的装置。所述设备可进一步包含用于通过至少一个处理器确定上部中间值或下部中间值中的至少一者的装置,其中用于确定上部中间值的装置包括用于朝向零将中间值以指定位数目舍入的装置,并且其中用于确定下部中间值的装置包括用于由上部中间值减去中间值的装置。
所述设备可进一步包含装置,所述装置用于至少部分地基于第三运算元与上部中间值或下部中间值中的一者相加,通过至少一个处理器确定上部值和下部值。所述设备可进一步包含装置,所述装置用于通过上部值和下部值相加,由至少一个处理器确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果。
[0008] 在本发明的另一实例中,计算机可读存储媒体可存储指令,所述指令在经执行时使一或多个可编程处理器进行以下操作:至少部分地基于第一运算元与第二运算元相乘,确定中间值;确定上部中间值或下部中间值中的至少一者,其中确定上部中间值包括朝向零将中间值以指定位数目舍入,并且其中确定下部中间值包括由上部中间值减去中间值;至少部分地基于第三运算元与上部中间值或下部中间值中的一者相加,确定上部值和下部值;以及通过上部值和下部值相加,确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果。
[0009] 随附图式及以下描述中陈述一或多个实例的细节。其它特征、目标及优点将根据所述描述及图式以及权利要求书而显而易见。

附图说明

[0010] 图1为绘示实例浮点数格式的框图。
[0011] 图2为绘示用于模拟融合乘加运算的实例技术的框图。
[0012] 图3为绘示模拟融合乘加运算中的示例性情形的框图。
[0013] 图4为绘示模拟融合乘加运算中的示例性情形的框图。
[0014] 图5为绘示可经配置以实施本发明的一或多个方面的实例计算装置的框图。
[0015] 图6为绘示用于模拟融合乘加运算的实例过程的流程图。

具体实施方式

[0016] 总的来说,本发明描述用于经由辅助指令模拟融合乘加(FMA)运算的技术,以使得FMA运算可使用现有乘法和加法硬件执行,而不需要专用的加法器来将第一和第二运算元的中间乘积与第三运算元相加。因为第一和第二运算元的中间乘积可包括比第一运算元或第二运算元单独一者更多的位,并没有使用专用加法器硬件对中间乘积和第三运算元进行求和,处理器可将中间乘积划分成上部部分和下部部分,以使得第三运算元可经由正常的加法器硬件而与上部部分或下部部分相加,并且上部部分和下部部分可经组合以提供模拟融合乘加结果。
[0017] 例如中央处理单元(CPU)、图形处理单元(GPU)等等的处理器可执行对浮点值进行运算的FMA运算。图1为绘示实例浮点格式的概念图。如图1中所示,具有值-82.3125的浮点数50可以32位IEEE 754-2008浮点格式表示。此类32位浮点格式可被视为单精度格式,而64位浮点格式可被视为双精度格式,并且16位浮点格式可被视为半精度格式。单精度IEEE 754-2008浮点格式(即,32位浮点数)(例如浮点数50)可包含正负号位52、指数54和尾数56。
正负号位52可为32位数值中的单个位,指数54可包含32位数值中的8位,并且尾数56可包含
32位数值中的23位。
[0018] 作为一个实例,如果浮点数50的正负号为负,那么正负号位52可为1,并且如果浮点数50的正负号为正,那么正负号位52可为0,且作为另一实例,反之亦然。指数54可具有127的偏置,以使得未偏置的指数可根据指数54的值,通过从指数54的值中减去127来计算。
尾数56可使其整数位隐藏。例如,浮点值-82.3125可等于-1.01001001012*26。在此实例中,正负号位52可设置成1。指数54可为100001012,其由于指数54中127的偏置而为133(即,6+
127),并且尾数56可为010010010100000000000002,因为1.01001001012的整数位1可隐藏。
以此方式,尾数56可表示24位值,即使尾数56可占据浮点数50中的23位。
[0019] 在浮点计算期间,处理器还可跟踪保护位57、舍入位58和粘滞位59。当在对尾数56进行归一化和舍入期间移位尾数56时,保护位57、舍入位58和粘滞位59可进行填充。例如,如果尾数56的值为110011,那么110011的向右移位可产生值011001,并且保护位57可被设置成1以存储已移位的最右位。011001的后一向右移位可产生值001100,现在保护位57中的1可存储在舍入位58中,并且保护位57可被设置成1以存储已移位的最右位。随后的001100的向右移位可产生值000110,存储在舍入位58中的1可经移位以存储在粘滞位59中,存储在保护位57中的1可经移位以存储在舍入位58中,并且保护位57可被设置成0以存储已移位的最右位。000110的后一向右移位可产生值000011。在此情况下,一旦粘滞位被设置成1,它就可保持为1,而不管舍入位58的值如何。因此,存储在粘滞位59中的1保持在粘滞位59中,存储在舍入位58中的1可舍弃,存储在保护位57中的0可经移位以存储在舍入位58中,并且保护位57可被设置成0以存储已移位的最右位。如可见,1可首先移位到保护位57中,随后移位到舍入位58中,接着移位到粘滞位59中。一旦1被移位到粘滞位59中,1就可保持在粘滞位59中,而不管额外的移位如何,但存储在舍入位58中的位可简单地在另一向右移位之后舍弃。
可替代地,粘滞位59可为对已经向舍入位58的右侧进行移位的全部位执行“或”运算的结果。
[0020] 浮点数50可以数种方式进行舍入,例如,使用IEEE754-2008中指定的舍入模式中的一者。对浮点数50进行舍入可包含将尾数56舍入到指定位数目。处理器可向右移位尾数56,并且可调整指数54的值以补偿所述移位。在舍入到最接近的偶数(round-to-nearest-even)的舍入模式中,数值可被舍入到最接近的值。如果数值落在两个同等最接近的值之间的中间位置,那么将它舍入到在舍入到最接近的偶数的舍入模式中具有偶数最低有效位的最接近的值。
[0021] 朝向零将浮点数50以指定位数目舍入可通过降低保护位57、舍入位58和粘滞位59来截断浮点数50。此外,如果浮点数50为加法的中间结果,那么除了保护位57、舍入位58和粘滞位59之外,两个运算元的24位尾数的加法还可产生25位尾数。在此情况下,中间结果将必须进行归一化。为了实现这个,处理器可将浮点数50的尾数56向右移位一位,并且还可将浮点数50的指数54增加1。类似地,如果浮点数50为减法的中间结果,那么两个运算元的24位尾数的减法可产生24位尾数,其中运算元的最高有效位中的一或多者为零。在此情况下,中间结果可通过向左移位直到尾数的最高有效位变成1来进行归一化,并且指数可相应地以移位的量值递减。
[0022] 将浮点数(例如浮点数50)舍入到最接近的偶数的结果可分别至少部分地基于保护位57、舍入为58和粘滞位59的值。应注意,在归一化之后执行舍入。在舍入到最接近的偶数(RTE)的情况下,如果保护位为1且舍入位和/或粘滞位为1,那么将1加到24位尾数中。此外,如果24位尾数的最低有效位为1,那么在保护位进行设置和舍入且粘滞位为零的情况下,将1加到尾数的LSB中。在舍入到奇数(round-to-odd,RTO)的情况下,如果任一一或多个位保护、舍入或粘滞为1,那么将1经“或”运算成24位尾数的最低有效位。
[0023] 如上文所论述,FMA运算可对三个浮点运算元的集合进行运算。表1示出了示例性FMA运算的步骤。给定运算元op0=0x7674400016,op1=0x2721A20016,和op2=0x2088E3EF16,处理器可确定FMA(op1,op2,op3)=RTE((op1*op2)+op3):
[0024] 表1
[0025]
[0026] 如上方表1中所示,处理器可将op0与op1相乘。响应于op0与op1相乘以产生值p,处理器可通过将指数增加1来对所得值p进行归一化以产生值n。随后,处理器可将op2与n相加。为了将两个浮点值相加,处理器可右移待添加的两个浮点值中的较小者,以使得它们的指数相同。因为值n具有未偏置指数61,处理器可对op2进行移位,所述op2将未偏置指数-62向右移位123,以产生值t,所述值t具有匹配具有值n的未偏置指数的未偏置指数61。响应于将op2移位,处理器可对值n和t进行求和、对总和进行归一化,并可将n和t的总和舍入到最接近由24位尾数构成的32位结果的偶数,从而产生FMA结果0x5E1A36D116。
[0027] 如图1中所示,单精度IEEE 754-2008浮点值(例如浮点数50)可包含23位尾数56。如上文所论述,因为尾数56可使其整数位隐藏,所以23位尾数56实际上可表示24位尾数值。
考虑到保护位、舍入位和粘滞位,27位加法器可用于将两个单精度(即,32位)浮点值相加,包含将两个24位尾数值和保护位、舍入位和粘滞位的两个集合相加。
[0028] 因为处理器使第一运算元与第二运算元相乘在一起以产生与第三运算元相加的中间值来执行FMA运算,所以包含两个24位尾数值相乘的第一运算元乘以第二运算元可产生具有48位尾数值的中间值。考虑到48位尾数值,可能需要处理器包含51位加法器来将48位中间值与第三运算元的24位尾数相加。
[0029] 将51位加法器而不是27位加法器并入到处理器的潜在缺点可包含对处理器具有更高的空间和功率要求。此外,由于携载整个此类大量位的总和,可能会产生关键路径问题。粗略估计FMA运算的结果而不需要额外加法器来处理51位加法的一种方法可为未融合乘加运算。如上文所论述,未融合乘加运算可将为op0和op1的24位尾数的乘积的48位中间值下舍入到24位,并将24位中间值与op2相加,接着对总和结果进行舍入。
[0030] 在一些实例中,处理器可包含可能能够执行未融合乘加运算而不是FMA运算的硬件。此类硬件可包含用以执行未融合乘加运算的数字电路、硬件乘法器、加法器、硬件逻辑等等。在一些实例中,硬件可包括硬件流水线。因为在未融合乘加运算中,第一和第二运算元的中间乘积在其与第三运算元进行求和之前被舍去,所以用于执行未融合乘加运算的硬件可能不包含用于加上较大浮点值的专用加法器。例如,在表1中所示的实例中,处理器可将由op0和op1相乘产生的48位尾数下舍入到24位,之后再将op3与所述乘积相加。
[0031] 然而,未融合乘加运算有时可能会提供不同于FMA运算的结果的不精确结果。在表1中所示的实例中,如果处理器替代地计算op1、op2和op3的未融合乘加结果,那么结果可替代地为0x5E1A36D016,其不同于FMA运算的结果0x5E1A36D116。例如,因为在未融合乘加中,为归一化值p的结果的值n的尾数可被下舍入到24位尾数值0x9A36D0h,所以总和n+t的尾数可为0x9A36D0h,而不是0x9A36D0800000h。因此,尽管保护位、舍入位和粘滞位可为1 0 0,但由于将尾数0x9A36D0800000h归一化,所以紧接在未融合乘加中的乘法运算和保护位丢失之后,这个值被舍入到0x9A36D0。在未融合乘加的相加阶段期间,保护位、舍入位和粘滞位可为001,因此,将具有保护位、舍入位和粘滞位值001的尾数0x9A36D0h舍入到最接近的偶数的结果可为0x9A3 6D0h,这产生了未融合乘加结果0x5E1A36D016。
[0032] 根据本发明的各方面,处理器可使用用于计算未融合乘加运算以相比于未融合乘加运算更加精确地模拟FMA运算的相同现有硬件。通过利用现有的加法器硬件来模拟FMA运算,处理器可能不需要提供额外的51位加法器来执行单精度浮点数的FMA运算。至少一个处理器可经配置以:至少部分地基于第一运算元与第二运算元相乘,确定中间值;确定上部中间值或下部中间值中的至少一者,其中确定上部中间值包括朝向零将中间值以指定位数目舍入,并且其中确定下部中间值包括由上部中间值减去中间值;至少部分地基于第三运算元的合适位与上部中间值或下部中间值中的一者相加/相减,确定上部值和下部值;以及通过上部值和下部值相加,确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果。处理器加上还是减去第三运算元可至少部分地基于中间乘积和第三运算元的正负号是相同还是不同的。
[0033] 如上文所论述,对于单精度浮点值,第一运算元和第二运算元的两个24位尾数的乘积可产生48位中间值,并且可能需要51位加法器通过将中间值的48位尾数和第三运算元的24位尾数相加来执行FMA运算。替代地,为了在没有额外的51位加法器的情况下模拟FMA运算,处理器可将中间值的尾数划分成位的上部部分和位的下部部分。例如,对于中间值的48位尾数,处理器可将中间值的48位尾数平均地划分成包含48位尾数中的上部24位[47到
24]的位的上部部分和包含48位尾数中的下部24位[23到0]的位的下部部分。
[0034] 处理器可经配置以确定上部中间值和下部中间值中的至少一者,其中上部中间值的尾数包括48位尾数中的上部24位,并且其中下部中间值包括48位尾数中的下部24位。处理器可至少部分地基于第三运算元与上部中间值和下部中间值中的一者相加,确定上部值和下部值,并且可进一步通过上部值和下部值相加,确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果。
[0035] 图2为绘示用于模拟FMA运算的实例过程的框图。更确切地说,处理器可模拟运算元60、62和64的FMA运算,其中模拟运算RTE((运算元60*运算元62)+运算元64)。如图2中所示,运算元60、62和64可各自为类似于图1中所示的浮点数50的32位单精度浮点值,并且运算元60、62和64可分别包含尾数66、68和70。
[0036] 处理器可使运算元60和62相乘以产生中间值72,其还可为浮点值。如上文所论述,因为运算元60和62可为单精度浮点值,所以尾数66和68各自可为24位(23位尾数加上一个隐藏整数位),并且运算元60和62相乘可包含尾数66和68相乘以产生中间值72中的48位尾数。处理器可对中间值72的尾数进行归一化,并且可在概念上将中间值72的归一化尾数划分成上部部分74和下部部分76。划分中间值72的归一化尾数可包含将归一化尾数平均地划分成两个大小相等的半部,以使得上部部分74包含尾数的上部24位,下部部分76包含尾数的下部24位。
[0037] 处理器可通过向零将中间值72舍入到中间值72的尾数的一半位(即,向零将48位尾数舍入到24位),确定上部中间值78。处理器还可通过由上部中间值78减去中间值72,确定下部中间值80。因此,上部中间值78可包含作为其尾数的上部部分74,下部中间值80可包含作为其尾数的下部部分76。应注意,由于中间值72已经被拆分成上部中间值78和下部中间值80,所以下部中间值80的指数值可能比上部中间值78的指数值小24。此外,在一些实例中,下部中间值80的指数值可能超出单精度浮点格式的指数值的有效范围。
[0038] 处理器可至少部分地基于运算元64和中间值72的指数之间的差,确定处理器将运算元64是加到上部中间值78还是加到下部中间值80,来产生所得上部值86或产生下部值88。在浮点算术中,如果两个浮点值具有相同指数,那么这两个浮点值可相加在一起,且无需移位这两个浮点值中的任一者。因此,具有不同指数的两个浮动值相加可包含移位浮点值中的一者的尾数以使得这两个浮点值具有相同指数,以及将所得尾数相加。同样,处理器可至少部分地基于运算元64的尾数和/或中间值72的尾数所需移位的数量,确定将运算元
64是加到上部中间值78还是加到下部中间值80,以使得运算元64的指数匹配上部中间值78或下部中间值80的指数。
[0039] 在一些实例中,如果处理器将运算元64加到上部中间值78以产生上部值86,那么处理器可将下部值88设置成0.0。在一些其它实例中,如果处理器将运算元64加到下部中间值80以产生下部值88,那么处理器可将上部值86设置成上部中间值78的值。
[0040] 响应于产生上部值86和下部值88,处理器可将上部值86与下部值88相加。处理器可对上部值86和下部值88的总和进行归一化,并可将上部值86和下部值88的归一化总和舍入成最接近的偶数,以产生关于运算元62、64和66的模拟FMA运算的所得值90。
[0041] 如上文所论述,处理器可至少部分地基于运算元64和中间值72的指数之间的差,确定处理器将运算元64是加到上部中间值78还是加到下部中间值80来产生所得上部值86或下部值88。图3为绘示其中中间值72的指数和运算元64的指数之间的差大于2并且其中中间值72和运算元64的正负号相同的情形的框图。换句话说,运算元64指数比中间值72的指数小2以上,以使得运算元64的尾数70可右移两个以上位,并且运算元64的指数可相应地增加2以上的值,以便运算元64的指数等于中间值72的指数。可替代地,图3中所示的情形可表达为其中运算元64的无正负号值小于中间值72除以4。
[0042] 如图3中所示,其中中间值72的指数和运算元64的指数之间的差大于2的运算元64的实例可包含情形92、94、96、98和100。在情形92中,中间值72的指数和运算元64的指数大于48,以使得处理器可将尾数70向右移位48位以上,以将运算元64的指数增加48以上,从而使得运算元64的指数与中间值72的指数的值相同。
[0043] 在情形94中,中间值72的指数和运算元64的指数正好为48,以使得处理器可正好将尾数70向右移位48位,以将运算元64的指数正好增加48,从而使得运算元64的指数与中间值72的指数的值相同。在情形96中,中间值72的指数和运算元64的指数大于24且小于48,以使得处理器可将尾数70向右移位24位以上48位以下,以将运算元64的指数增加24以上48以下,从而使得运算元64的指数与中间值72的指数的值相同。
[0044] 在情形98中,中间值72的指数和运算元64的指数正好为24,以使得处理器可正好将尾数70向右移位24位,以将运算元64的指数正好增加24,从而使得运算元64的指数与中间值72的指数的值相同。在情形100中,中间值72的指数和运算元64的指数大于2且小于24,以使得处理器可将尾数70向右移位2位以上24位以下,以将运算元64的指数增加2以上24以下,从而使得运算元64的指数与中间值72的指数的值相同。
[0045] 在图3中所示的情形92、94、96、98和100中的每一者中,为了模拟融合乘加运算,处理器可确定中间值72和运算元64的正负号是否相同。可替代地,处理器可确定中间值72和运算元64的正负号是否相同。响应于确定中间值72和运算元64的正负号相同,并且中间值72的指数和运算元64的指数之间的差大于2或运算元64的值小于中间值72除以4,处理器可将上部值86设置成上部中间值78。处理器还可将运算元64与下部中间值80相加、对运算元
64和下部中间值80的总和进行归一化,并且可将运算元64和下部中间值80的归一化总和舍入到最接近的奇数,从而产生下部值88。处理器可将上部值86和下部值88相加、对上部值86和下部值88的总和进行归一化,并且可将上部值86和下部值88的归一化总和舍入到最接近的偶数,从而产生模拟融合乘加结果90。
[0046] 类似地,处理器可模拟融合乘减运算。融合乘减运算可为其中中间值72和运算元64的正负号不同的融合乘加。在情形92、94、96、98和100中,处理器可确定中间值72和运算元64的正负号是否不同。响应于确定中间值72和运算元64的正负号不同,处理器可将上部值86设置成上部中间值78。处理器还可从下部中间值80中减去运算元64、对下部中间值80和运算元64的差进行归一化,并且可将下部中间值80和运算元64的归一化差舍入到奇数,从而产生下部值88。处理器可从上部值86中减去下部值88、对上部值86和下部值88的差进行归一化,并且可将上部值86和下部值88的归一化总和舍入到最接近的偶数,从而产生模拟融合乘减结果90。
[0047] 图4为绘示一种情形的框图,在所述情形中,中间值72的指数和运算元64的指数之间的差小于或等于二,或运算元64的指数大于或等于中间值72的指数,并且中间值72和运算元64的正负号相同。换句话说,运算元64的指数比中间值72的指数小2或2以下,或运算元64的指数大于中间值72的指数。运算元64的尾数70可右移两次或更少,并且运算元64的指数相应地增加不超过2,以便运算元64的指数等于中间值72的指数。可替代地,图4中所示的情形可表达为其中运算元64的无正负号值大于或等于中间值72除以4。
[0048] 如图4中所示,其中中间值72的指数和运算元64的指数之间的差小于或等于2的运算元64的实例可包含情形102、104、106、108、110、112、114和116。在情形102中,中间值72的指数和运算元64的指数正好为2,以使得处理器可将尾数70向右移位2位,以将运算元64的指数正好增加2,从而使得运算元64的指数与中间值72的指数的值相同。
[0049] 在情形104中,中间值72的指数和运算元64的指数正好为1,以使得处理器可将尾数70向右移位1位,以将运算元64的指数正好增加1,从而使得运算元64的指数与中间值72的指数的值相同。
[0050] 在情形106中,中间值72的指数与运算元64的指数相同,以使得处理器不需要对尾数70进行移位。在情形108中,运算元64的指数正好比中间值72的指数大1,以使得处理器可将中间值72的尾数正好向右移位1位,以将中间值72的指数正好增加1,从而使得运算元64的指数与中间值72的指数的值相同。在情形110中,运算元64的指数比中间值72的指数大2,以使得处理器可正好将中间值72的尾数向右移位2位,以将中间值72的指数正好增加2,从而使得运算元64的指数与中间值72的指数的值相同。
[0051] 在情形112中,运算元64的指数比中间值72的指数大2以上且24以下,以使得处理器可将中间值72的尾数向右移位2以上且24以下个位,以将中间值72的指数增加2以上且24以下,从而使得运算元64的指数与中间值72的指数的值相同。在情形114中,运算元64的指数正好比中间值72的指数大24,以使得处理器可正好将中间值72的尾数向右移位24位,以将中间值72的指数正好增加24,从而使得运算元64的指数与中间值72的指数的值相同。
[0052] 在情形116中,运算元64的指数比中间值72的指数大24以上,以使得处理器可将中间值72的尾数向右移位24位以上,以将中间值72的指数增加24以上,从而使得运算元64的指数与中间值72的指数的值相同。
[0053] 在图4中所示的情形102、104、106、108、110、112、114和116中的每一者中,为了模拟融合乘加运算,处理器可确定中间值72和运算元64的正负号是否相同。处理器还可确定运算元64的指数是否比中间值72的指数大不超过2、与其相同或比其小不超过2。响应于确定中间值72和运算元64的正负号相同,并进一步响应于确定运算元64的指数比中间值72的指数大不超过2、与其相同或比其小不超过2,处理器可将下部值88设置成0.0。如果对于图4中所示的情形102、104、106、108、110、112、114和116,运算元64和中间值72具有相同正负号,那么处理器可将下部值88设置成0.0,而不管运算元64和中间值72的指数如何。处理器还可将运算元64与上部中间值78相加、对运算元64和上部中间值78的总和进行归一化,并且可将运算元64和上部中间值78的归一化总和舍入到最接近的偶数,从而产生上部值86。在此实例中,处理器的相乘阶段发送上部部分74和MSB、第二MSB以及下部部分76的剩余位的或,以分别形成保护位73、舍入位75和粘滞位77。处理器可将上部值86和下部值88相加、对上部值86和下部值88的总和进行归一化,并且将上部值86和下部值88的归一化总和舍入到最接近的偶数,从而产生模拟融合乘加结果90。
[0054] 类似地,在图4中所示的情形102、104、106、108、110、112、114和116中,处理器可模拟融合乘减运算。如上文所论述,融合乘减运算可为其中中间值72和运算元64的正负号不同的融合乘加。在情形102、110、112、114和116中,处理器可将下部值88设置成0.0。在情形104、106和108中,GPU可将下部值88设置成下部部分76的下部22位(即,[21:0])。
[0055] 对于情形102、104、106,处理器可将运算元64和上部中间值78相加、对上部中间值78和运算元64的总和进行归一化,并且可将上部中间值78和运算元64的归一化总和舍入到最接近的偶数,从而产生上部值86。如上文所提及,舍入以产生上部值86可至少部分地基于由相乘阶段产生的保护位、舍入位和粘滞位。处理器可将上部值86和下部值88相加、对上部值86和下部值88的总和进行归一化,并且将上部值86和下部值88的归一化总和舍入到最接近的偶数,从而产生模拟融合乘加结果90。
[0056] 对于情形108、110、112、114和116,当运算元64和中间值72的正负号不同时,处理器可对具有来自下部中间值80的保护位、舍入位和粘滞位的上部中间值78与运算元64进行求和、对运算元64和上部中间值78的总和进行归一化,并且可将运算元64和上部中间值78的归一化总和舍入到最接近的偶数,从而产生上部值86。处理器可将上部值86和下部值88相加、对上部值86和下部值88的总和进行归一化,并且将上部值86和下部值88的归一化总和舍入到最接近的偶数,从而产生模拟融合乘加结果90。
[0057] 在图4中所示的情形102、104、106、108、110、112、114和116中的每一者中,处理器还可通过对运算元60和62的乘积进行归一化以产生中间值72来保持保护位73、舍入位75和粘滞位77,以使得将运算元64和上部中间值78的归一化总和或差舍入到最接近的偶数以产生上部值86的结果可至少部分地基于来自对运算元60和62的乘积进行归一化的一或多个保护位73、舍入位75和粘滞位77的值中的一或多个值。例如,在情形102、104和106中,将运算元64和上部中间值78的归一化总和或差舍入到最接近的偶数以产生上部值86可基于来自对运算元60和62的乘积进行归一化的保护位73、舍入位75和粘滞位77,它们分别充当用于上部中间值78的保护位、舍入位和粘滞位。
[0058] 在情形108中,来自对运算元60和62的乘积进行归一化的保护位73的值可为舍入位,并且通过对来自对运算元60和62的乘积进行归一化的舍入位75与来自对运算元60和62的乘积进行归一化的粘滞位77进行或运算产生的结果可充当粘滞位。73的LSB变成保护位。处理器可基于这些保护位、舍入位和粘滞位,将运算元64和上部中间值78的归一化总和或差舍入到最接近的偶数,从而产生上部值86。
[0059] 在情形110、112、114和116中,通过对来自对运算元60和62的乘积进行归一化的保护位73与来自对运算元60和62的乘积进行归一化的舍入位75以及来自对运算元60和62的乘积进行归一化的粘滞位77进行或运算而产生的结果可充当粘滞位。处理器可基于保护位、舍入位和粘滞位,将运算元64和上部中间值78的归一化总和舍入到最接近的偶数,从而产生上部值86。
[0060] 表2概括同时用于模拟融合乘加和模拟融合乘减的情形92到116:
[0061] 表2
[0062]
[0063] 如表2中所示,所列情形对应于图3和4中所示的情形92到116。上部值可表示上部值86,下部值可表示下部值88,“uh”可表示上部中间值78,“ul”可表示下部中间值80,并且“c”可表示运算元64。ADD列可表示用于融合乘加的上部值86和/或下部值88的值,SUB列可表示用于融合乘减的上部值86和/或下部值88的值。“{”正负号可表示一或多个位的级联,“|”正负号可表示一或多个位的逻辑或。“g”、“r”和“s”可分别表示保护位73、舍入位75和粘滞位77,它们通过对来自下部部分76的最高有效位的中间值72进行归一化而产生。
[0064] 对于情形96,如果ul-c产生负值,那么处理器可表示呈两个互补形式的所得负值,因为处理器的乘法器可能不能够对所得负值进行归一化。对于情形104和106,(uh{ul(grs))-c的所得值可因此小到所得值可表示为反常数。例如,所得值可具有指数值-127,所述指数值在舍入步骤之后变成-126。
[0065] 对于情形110、112、114和116,uh可右移2个或2个以上的位。经移位值的位1充当舍入位75。经移位值的位0可利用(g|r|s)的结果进行或运算以形成粘滞位77。因此,在情形110、112、114和116中,uh|(g|r|s)可代表利用uh的LSB对通过保护位73、舍入位75和粘滞位
77进行或运算而得到的结果进行或运算以形成粘滞位77。
[0066] 图5为绘示可经配置以实施本发明的一或多个方面的实例计算装置的框图。如图5中所示,计算装置202可为计算装置,包含(但不限于)视频装置、媒体播放器、机顶盒、无线手持机(例如移动电话及所谓的智能电话)、个人数字助理(PDA)、桌上型计算机、膝上型计算机、游戏控制台、视频会议单元、平板计算装置等等。在图5的实例中,计算装置202可包含中央处理单元(CPU)206、系统存储器210和GPU 212。计算装置202还可包含显示处理器214、收发器模块203、用户接口204和显示器208。收发器模块203和显示处理器214可都为与CPU 206和/或GPU 212相同的集成电路(IC)的部分,可都处于包含CPU 206和/或GPU 212的一或多个IC的外部,或可在包含CPU 206和/或GPU 212的IC外部的IC中形成。
[0067] 出于清晰性的目的,计算装置202可包含图5中未示出的额外模块或单元。例如,计算装置202可包含扬声器和麦克风(图5中均未示出)以在计算装置202为移动无线电话的实例中实行电话通信,或在计算装置202为媒体播放器的情况下包含扬声器。计算装置220还可包含摄像机。此外,计算装置202中所示的各个模块和单元在计算装置202的每一实例中可能不是必需的。例如,在其中计算装置202为桌上型计算机或经装备以与外部用户接口或显示器介接的其它装置的实例中,用户接口204和显示器208可处于计算装置202的外部。
[0068] 用户接口204的实例包含(但不限于)轨迹球、鼠标、键盘和其它类型的输入装置。用户接口204还可为触摸屏且可并入作为显示器208的部分。收发器模块203可包含电路以允许计算装置202和另一装置或网络之间的无线或有线通信。收发器模块203可包含调制器、解调器、放大器和其它用于有线或无线通信的此类电路。
[0069] 处理器206可为微处理器,例如中央处理单元(CPU),其经配置以处理供执行的计算机程序的指令。处理器206可包括控制计算装置202的操作的通用或专用处理器。用户可将输入提供到计算装置202以使处理器206执行一或多个软件应用程序。在处理器206上执行的软件应用程序可包含(例如)操作系统、字处理器应用程序、电子邮件应用程序、电子表格应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一程序。另外,处理器206可执行GPU驱动程序222以控制GPU 212的操作。用户可经由一或多个输入装置(未示出)将输入提供到计算装置202,所述输入装置例如键盘、鼠标、麦克风、触摸板或经由用户输入接口204而耦合到计算装置202的另一输入装置。处理器206可经配置以执行本文针对模拟FMA运算所揭示的技术中的任一者。
[0070] 在处理器206上执行的软件应用程序可包含一或多个图形呈现指令,其指示处理器206将图形数据呈现到显示器208。在一些实例中,软件指令可符合图形应用程序编程接口(API),比如开放图形库 API、开放图形库嵌入系统(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API,或任一其它公开或专有标准图形API。在其它实例中,软件指令可符合其它API,例如开放计算语言(OpenCL)API。为了处理图形呈现指令,处理器206可向GPU 212发出一或多个图形呈现命令(例如,通过GPU驱动程序222),以使GPU 212执行呈现图形数据中的一些或全部。在一些实例中,待呈现的图形数据可包含一系列图形基元,例如,点、线、三角形、四边形、三角带等。通常,可由用于函数(例如反正弦、反正切、幂等等)的编译程序提供数学函数库。这些函数可使用有理多顶式实施。对于此类库函数实施方案,使用FMA指令可潜在地提供更高的精度和执行速度。
[0071] GPU 212可经配置以执行图形操作,从而将一或多个图形基元呈现到显示器208。因此,当在处理器206上执行的软件应用程序中的一者需要图形处理时,处理器206可将图形命令和图形数据提供到GPU 212,以便呈现到显示器208。图形数据可包含(例如)绘制命令、状态信息、基元信息、纹理信息等。在一些情况下,GPU 212可利用高度并行结构建构,所述结构提供比处理器206更加有效的复杂的图形相关操作的处理。例如,GPU 212可包含经配置以通过并行方式在多个顶点或像素上操作的多个处理元件,例如着色器单元。在一些情况下,GPU 212的高度并行性质允许相比于使用处理器206将场景直接绘制到显示器208,GPU 212更加快速地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)绘制到显示器208上。
[0072] 在一些情况下,GPU 212可被整合到计算装置202的母板中。在其它情况下,GPU 212可存在于安装在计算装置202的母板中的端口中的图形卡上,或可以其它方式并入在外围装置内,所述外围装置经配置以与计算装置202交互操作。GPU 212可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP),或其它等效的集成或离散逻辑电路。GPU 212还可包含一或多个处理器核心,以使得GPU 212可被称为多核处理器。GPU 212可经配置以执行本文针对模拟FMA操作所揭示的技术中的任一者。
[0073] GPU 212可直接耦合到图形存储器240。因此,GPU 212可从图形存储器240读取数据,并将数据写入到图形存储器240,而无需使用总线。换句话说,GPU 212可使用本地存储装置而非芯片外存储器在本地处理数据。此类图形存储器240可称为芯片上存储器。这允许GPU 212通过消除GPU 212经由总线读取和写入数据的需要而以更有效的方式操作,其中经由总线操作可经历繁重的总线业务。然而,在一些情况下,GPU 212可不包含单独的存储器,而是经由总线利用系统存储器210。图形存储器240可包含一或多个易失性或非易失性存储器或存储装置,比如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。
[0074] 在一些实例中,GPU 212可在系统存储器210中存储完全成形的图像。显示处理器214可从系统存储器210检索所述图像,并输出使显示器208的像素照亮以显示所述图像的值。显示器208可为显示由GPU 212产生的图像内容的计算装置202的显示器。显示器208可为液晶显示器(LCD)、有机发光二极管显示器(OLED)、阴极射线管(CRT)显示器、等离子显示器或另一类型的显示装置。
[0075] GPU 212可包含MUL-ADD单元224,其可为经配置以执行未融合乘加运算的数字电路。MUL-ADD单元224可包含数字电路、硬件乘法器、加法器、硬件逻辑等等,以执行对执行未融合乘加运算来说需要的浮点算术和逻辑运算。GPU 212可利用MUL-ADD单元224来模拟FMA运算。GPU 212还可包含额外硬件,例如对于执行浮点数的舍入、移位和归一化的硬件,以辅助MUL-ADD单元224模拟FMA操作。在一些实例中,处理器206还可包含MUL-ADD单元224和额外的硬件,它们可共同经配置以根据本文所揭示的技术来模拟FMA运算。
[0076] 在一些实例中,使用至少MUL-ADD单元224的处理器206或GPU 212可经配置以模拟第一运算元、第二运算元和第三运算元的FMA运算。为了模拟FMA运算,处理器206或GPU 212可进行以下操作:至少部分地基于第一运算元与第二运算元相乘,确定中间值;确定上部中间值或下部中间值中的至少一者,其中确定上部中间值包括朝向零将中间值以指定位数目舍入,并且其中确定下部中间值包括由上部中间值减去中间值;至少部分地基于第三运算元与上部中间值或下部中间值中的一者相加,确定上部值和下部值;以及通过上部值和下部值相加,确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果。
[0077] 图6为绘示用于模拟FMA运算的实例过程的流程图。如图6中所示,所述过程可包含至少部分地基于第一运算元与第二运算元相乘,通过处理器206或GPU 212确定中间值(602)。
[0078] 在一些实例中,第一运算元、第二运算元和第三运算元可包括32位浮点数,中间值的尾数可包括48位,并且指定位数目可包括24位。
[0079] 所述过程可进一步包含通过处理器206或GPU 212确定上部中间值或下部中间值中的至少一者,其中确定上部中间值可包括朝向零将中间值以指定位数目舍入,并且其中确定下部中间值可包括由上部中间值减去中间值(604)。在一些实例中,确定上部中间值或下部中间值中的至少一者可进一步包含确定上部中间值,并且响应于中间值的指数比第三运算元的指数大指定阈值以上,确定下部中间值。
[0080] 所述过程可进一步包含至少部分地基于第三运算元与上部中间值或下部中间值中的一者相加,通过处理器206或GPU 212确定上部值和下部值(606)。
[0081] 在一些实例中,至少部分地基于第三运算元与上部中间值或下部中间值中的一者相加,通过处理器206或GPU 212确定上部值和下部值可包含响应于中间值的正负号与第三运算元的正负号相同,且响应于中间值的指数比第三运算元的指数大指定阈值以上:通过处理器206或GPU 212,将上部值设置成上部中间值,并通过将下部中间值和第三运算元的总和舍入到最接近的奇数,由处理器206或GPU 212确定下部值。在一些实例中,指定阈值可为2,因为当指数差为1或0时,可能会发生抵消。
[0082] 在一些实例中,至少部分地基于第三运算元与上部中间值或下部中间值中的一者相加,通过处理器206或GPU 212确定上部值和下部值可包含响应于中间值的正负号与第三运算元的正负号相同,且响应于中间值的指数比第三运算元的指数大指定阈值以下或中间值的指数等于或小于第三运算元的指数:通过将上部中间值和第三运算元的总和舍入到最接近的偶数,由处理器206或GPU 212确定上部值,并通过处理器206或GPU 212,将下部值设置成0.0。在一些实例中,指定阈值可为2。在一些实例中,确定中间值可包含通过处理器206或GPU 212,对第一运算元和第二运算元的乘积进行归一化,并且将上部中间值和第三运算元的总和舍入到最接近的偶数可包含至少部分地基于通过对中间值进行归一化而产生的保护位、舍入位和粘滞位中的一或多者,通过处理器206或GPU 212,将上部中间值和第三运算元的总和舍入最接近的偶数。
[0083] 在一些实例中,至少部分地基于第三运算元与上部中间值或下部中间值中的一者相加,确定上部值和下部值可包含响应于乘积的正负号与第三运算元的正负号不同,且响应于中间值的指数比第三运算元的指数大指定阈值:通过处理器206或GPU 212,将上部值设置成上部中间值,并通过将下部中间值和第三运算元的总和舍入到最接近的奇数,由处理器206或GPU 212确定下部值。
[0084] 所述过程可进一步包含通过上部值和下部值相加,通过处理器206或GPU 212确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果(608)。
[0085] 在一些实例中,确定第一运算元、第二运算元和第三运算元的模拟融合乘加结果可进一步包含通过处理器206或GPU 212,对上部值和下部值的总和进行归一化,并通过处理器206或GPU 212,将上部值和下部值的归一化总和舍入到偶数。
[0086] 尽管本发明讨论用于模拟单精度浮点数的FMA运算的技术,但应理解,本文所论述的技术可同等地适用于半精度浮点数、双精度浮点数、任何其它经设定大小的浮点数,以及以任何其它可适用的浮点格式表示的浮点数。
[0087] 在一或多个实例中,所描述的功能可在硬件、软件、固件或其任何组合中实施。如果在软件中实施,那么可以将功能作为一或多个指令或代码存储在计算机可读媒体上或经由计算机可读媒体传输。计算机可读媒体可包含计算机数据存储媒体或通信媒体,所述通信媒体包含促进将计算机程序从一处传递到另一处的任何媒体。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本发明中描述的技术的指令、代码和/或数据结构的任何可用媒体。借助于实例而非限制,此类计算机可读媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置,或任何可用于携载或存储呈指令或数据结构形式的所要程序代码且可由计算机存取的其它媒体。并且,任何连接被适当地称为计算机可读媒体。例如,如果使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL)或例如红外线、无线电及微波等无线技术从网站、服务器或其它远程源传输软件,那么所述同轴电缆、光纤电缆、双绞线、DSL或例如红外线、无线电及微波等无线技术包含在媒体的定义中。如本文所使用,磁盘和光盘包含压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软性磁盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光以光学方式再现数据。上述各项的组合也应包含在计算机可读媒体的范畴内。
[0088] 代码可由一或多个处理器(例如一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效的集成或离散逻辑电路)执行。因此,如本文中所使用的术语“处理器”和“处理单元”可指代前述结构或适于实施本文中所描述的技术的任何其它结构中的任一者。另外,在一些方面中,本文中所描述的功能性可以在经配置以用于编码和解码的专用硬件和/或软件模块内提供,或可并入在组合编解码器中。并且,所述技术可完全实施于一或多个电路或逻辑元件中。
[0089] 本发明的技术可在各种装置或设备中实施,包含无线手持机、集成电路(IC)或一组IC(即,芯片组)。本发明中描述各种组件、模块或单元是为了强调经配置以执行所揭示的技术的装置的功能方面,但未必需要通过不同硬件单元实现。相反,如上文所描述,各种单元可以结合合适的软件和/或固件而组合在编码解码器硬件单元中,或者通过可交互操作硬件单元的集合来提供,所述硬件单元包含如上文所描述的一或多个处理器。
[0090] 已描述了各种实例。这些和其它实例在所附权利要求书的范畴内。