CN114461176A - 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 - Google Patents
一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 Download PDFInfo
- Publication number
- CN114461176A CN114461176A CN202210376801.2A CN202210376801A CN114461176A CN 114461176 A CN114461176 A CN 114461176A CN 202210376801 A CN202210376801 A CN 202210376801A CN 114461176 A CN114461176 A CN 114461176A
- Authority
- CN
- China
- Prior art keywords
- result
- addend
- floating point
- multiplication
- mantissa
- 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.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims description 11
- 238000004364 calculation method Methods 0.000 claims abstract description 183
- 238000000034 method Methods 0.000 claims description 43
- 238000012545 processing Methods 0.000 claims description 30
- 230000008569 process Effects 0.000 claims description 15
- 238000004458 analytical method Methods 0.000 claims description 14
- 238000007781 pre-processing Methods 0.000 claims description 9
- 230000000295 complement effect Effects 0.000 claims description 3
- 239000000047 product Substances 0.000 description 203
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000001514 detection method Methods 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 4
- 238000009877 rendering Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000003190 augmentative effect Effects 0.000 description 2
- 239000012467 final product Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
- G06F7/575—Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Abstract
本公开提供了一种算术逻辑单元,包括特定乘加器以及浮点数控制电路;所述特定乘加器是对单精度浮点数乘加器改造得到的;所述浮点数控制电路,用于接收待乘加计算的三个双精度浮点数,所述三个双精度浮点数中包括两个乘数以及一个加数,针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器;特定乘加器,用于对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路;浮点数控制电路,用于接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种算术逻辑单元、浮点数处理方法、GPU芯片、电子设备。
背景技术
图形处理器GPU芯片是用于处理图像和图形相关运算工作的微处理器,其需要具备很强的浮点数计算的能力,其中,对于浮点数的计算中最常见也最常用的计算即为乘加计算,随着技术的不断发展,目前需要图形处理器GPU具备对双精度浮点数进行乘加的计算能力,然而目前业界的图形处理器仅具备对单精度浮点数进行乘加的能力,如果需要GPU具备对双精度浮点数进行乘加的计算能力,则需要设计和开发针对双精度浮点数的乘加器,并将开发的针对双精度浮点数的乘加器部署在GPU芯片上,采用这种方式会面临较高的设计难度,同时也需要较长的研发周期,另外将完整的双精度浮点数的乘法器部署在GPU芯片上,也大大占用了GPU芯片的面积。
发明内容
针对上述技术问题,本公开提供一种算术逻辑单元、浮点数处理方法、GPU芯片、电子设备,技术方案如下。
根据本公开的第一方面,提供了一种算术逻辑单元包括:特定乘加器以及浮点数控制电路;所述特定乘加器是对单精度浮点数乘加器改造得到的;所述特定乘加器的输入要求为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且不大于双精度浮点数尾数位宽的预定位宽;
所述浮点数控制电路,用于接收待乘加计算的三个双精度浮点数,所述三个双精度浮点数中包括两个乘数以及一个加数,针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器;
特定乘加器,用于对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路;
所述浮点数控制电路,用于接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
在一个实施例中,所述算术逻辑单元还包括格式解析电路;
所述格式解析电路,用于接收待进行乘加计算的浮点数;确定所接收的浮点数的类型;若所接收的浮点数为双精度浮点数,则将待进行乘加计算的双精度浮点数发送至所述浮点数控制器。
在一个实施例中,所述格式解析电路,还用于在所接收的浮点数为单精度浮点数的情况下,对每个作为乘数的单精度浮点数进行预处理,以使预处理后的单精度浮点数的尾数满足所述特定乘加器的输入要求;将处理后的单精度浮点数发送至所述特定乘法器;任一所述特定乘加器,还用于对一组处理后的单精度浮点数进行乘加计算得到乘加结果,所述乘加结果为单精度浮点数。
在一个实施例中,所述特定乘加器输入要求具体为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且小于双精度浮点数尾数位宽的预定位宽;
所述浮点数控制电路,具体用于针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数;其中任一子尾数满足所述特定乘加器的输入要求;将两个乘数对应的子尾数进行交叉组合得到四组组合结果,每组组合结果中包括两个对应于不同乘数的子尾数;将一组组合结果确定为特定乘加器的计算对象,将四组组合结果输入至所述特定乘法器;
所述特定乘加器,具体用于对接收到的每组组合结果中的两个子尾数相乘,得到一个子乘积;将子乘积发送至浮点数控制电路;
所述浮点数控制电路,具体用于对接收到的四个子乘积进行移位相加,得到尾数乘积结果;对所述两个乘数的阶码相加,得到阶码乘积结果;将尾数乘积结果与阶码乘积结果组合得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
在一个实施例中,所述浮点数控制电路,具体用于针对每一乘数,将其尾数从最高位截取预设位数作一子尾数,并且将剩余尾数补位后作为子尾数,其中两个子尾数的位宽相同且满足所述特定乘法器的输入要求。
在一个实施例中,所述浮点数控制电路,具体用于对所述三个双精度浮点数的符号进行异或,基于异或结果确定所述两个乘数的乘积结果与所述加数的计算方式;比较乘积结果的阶码与加数的阶码大小;
在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码大的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的右移,得到调整后加数的尾数;将调整后的加数的尾数与乘积结果的尾数相加,得到相加结果的尾数,以乘积结果的阶码为相加结果的阶码得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
在一个实施例中,所述浮点数控制电路,还用于在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码小的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的左移,得到调整后加数的尾数;
将调整后加数的尾数与乘积结果的尾数相加,对相加结果进行对应于所述左移的右移,得到相加结果的尾数,以加数的阶码为相加结果的阶码,得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述乘加结果的符号与加数的符号一致。
在一个实施例中,所述浮点数控制电路,还用于在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码大的情况下,将乘积结果的阶码调整为所述加数的阶码,并对乘积结果的尾数进行左移,得到调整后的乘积结果;调整后的乘积结果与调整前的乘积结果数值不变;将调整后的乘积结果减去加数,得到相减结果,对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号相反。
在一个实施例中,所述浮点数控制电路,还用于在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码小的情况下,将加数的阶码调整为所述乘积结果的阶码,并对加数的尾数进行左移,得到调整后的加数;调整后的加数与调整前的加数数值不变;将调整后的加数与乘积结果相减,得到相减结果;对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
在一个实施例中,所述浮点数控制电路,还用于在将所述乘积结果与所述加数进行相加前,确定所述乘积结果阶码与所述加数的阶码的差值;在所述差值大于预设阈值,且所述乘积结果大的情况下,基于所述乘积结果确定最终乘加结果;在所述加数大的情况下,基于所述加数确定最终乘加结果。
在一个实施例中,所述浮点数控制电路,还用于在接收到待乘加计算的三个双精度浮点数后,确定所述三个双精度浮点数的合法性,在所述三个双精度浮点数均合法的情况下,对所述三个双精度浮点数进行处理和计算。
根据本公开实施例的第二个方面,提供了一种浮点数处理方法,应用于算术逻辑单元,所述算术逻辑单元包括特定乘加器以及浮点数控制电路;所述特定乘加器是对单精度浮点数乘加器改造得到的;所述特定乘加器的输入要求为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且不大于双精度浮点数尾数位宽的预定位宽;所述方法包括:
所述浮点数控制电路接收待乘加计算的三个双精度浮点数,所述三个双精度浮点数中包括两个乘数以及一个加数,针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器;
特定乘加器对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路;
所述浮点数控制电路接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
在一个实施例中,所述算术逻辑单元还包括格式解析电路;所述方法还包括:
所述格式解析电路接收待进行乘加计算的浮点数;确定所接收的浮点数的类型;若所接收的浮点数为双精度浮点数,则将待进行乘加计算的双精度浮点数发送至所述浮点数控制器。
在一个实施例中,所述方法还包括:
所述格式解析电路在所接收的浮点数为单精度浮点数的情况下,对每个作为乘数的单精度浮点数进行预处理,以使预处理后的单精度浮点数的尾数满足所述特定乘加器的输入要求;将处理后的单精度浮点数发送至所述特定乘法器;
任一所述特定乘加器对一组处理后的单精度浮点数进行乘加计算得到乘加结果,所述乘加结果为单精度浮点数。
在一个实施例中,所述特定乘加器输入要求具体为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且小于双精度浮点数尾数位宽的预定位宽;所述针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器,包括:针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数;其中任一子尾数满足所述特定乘加器的输入要求;将两个乘数对应的子尾数进行交叉组合得到四组组合结果,每组组合结果中包括两个对应于不同乘数的子尾数;将一组组合结果确定为特定乘加器的计算对象,将四组组合结果输入至所述特定乘法器;
所述特定乘加器对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路,包括:
所述特定乘加器对接收到的每组组合结果中的两个子尾数相乘,得到一个子乘积;将子乘积发送至浮点数控制电路;
所述浮点数控制电路接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数,包括:
所述浮点数控制电路对接收到的四个子乘积进行移位相加,得到尾数乘积结果;对所述两个乘数的阶码相加,得到阶码乘积结果;将尾数乘积结果与阶码乘积结果组合得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
在一个实施例中,所述针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数,包括:
针对每一乘数,将其尾数从最高位截取预设位数作一子尾数,并且将剩余尾数补位后作为子尾数,其中两个子尾数的位宽相同且满足所述特定乘法器的输入要求。
在一个实施例中,所述将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,包括:
对所述三个双精度浮点数的符号进行异或,基于异或结果确定所述两个乘数的乘积结果与所述加数的计算方式;比较乘积结果的阶码与加数的阶码大小;
在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码大的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的右移,得到调整后加数的尾数;将调整后的加数的尾数与乘积结果的尾数相加,得到相加结果的尾数,以乘积结果的阶码为相加结果的阶码得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
在一个实施例中,所述方法还包括:在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码小的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的左移,得到调整后加数的尾数;
将调整后加数的尾数与乘积结果的尾数相加,对相加结果进行对应于所述左移的右移,得到相加结果的尾数,以加数的阶码为相加结果的阶码,得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述乘加结果的符号与加数的符号一致。
在一个实施例中,所述方法还包括:在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码大的情况下,将乘积结果的阶码调整为所述加数的阶码,并对乘积结果的尾数进行左移,得到调整后的乘积结果;调整后的乘积结果与调整前的乘积结果数值不变;将调整后的乘积结果减去加数,得到相减结果,对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号相反。
在一个实施例中,所述方法还包括:在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码小的情况下,将加数的阶码调整为所述乘积结果的阶码,并对加数的尾数进行左移,得到调整后的加数;调整后的加数与调整前的加数数值不变;将调整后的加数与乘积结果相减,得到相减结果;对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
在一个实施例中,所述浮点数控制电路在将所述乘积结果与所述加数进行相加前,还包括:
所述浮点数控制电路确定所述乘积结果阶码与所述加数的阶码的差值;在所述差值大于预设阈值,且所述乘积结果大的情况下,基于所述乘积结果确定最终乘加结果;在所述加数大的情况下,基于所述加数确定最终乘加结果。
在一个实施例中,所述浮点数控制电路在接收到待乘加计算的三个双精度浮点数后还包括:
确定所述三个双精度浮点数的合法性,在所述三个双精度浮点数均合法的情况下,对所述三个双精度浮点数进行处理和计算。
根据本公开实施例的第三个方面,提供了一种GPU芯片,包括上述算术逻辑单元。
根据本公开实施例的第四个方面,提供了一种电子设备,包括上述芯片。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,此处所说明的附图用来提供对本公开的进一步理解,构成本公开的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本公开实施例的一种单精度浮点数组成示意图;
图2为本公开实施例的一种算术逻辑单元的结构示意图;
图3为本公开实施例的另一种算术逻辑单元的结构示意图;
图4为本公开实施例的一种浮点数处理方法的流程示意图;
图5为本公开实施例的另一种浮点数处理方法的流程示意图;
图6为本公开实施例的一种GPU芯片的结构示意图。
具体实施方式
为了使本公开实施例中的技术方案及优点更加清楚明白,下面将结合附图对本公开实施例中的技术方案及优点进一步详细的说明,显然,所描述的实施例仅仅是本公开的一部分实施例,而不是全部的实施例,需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合,基于本公开中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
在本公开中使用的术语是仅仅是为了描述特定实施例,而非为了限制申请的保护范围。在本公开中,除非上下文清楚地表示其他含义,否则所使用的单数形式的“一种”、“所述”和“该”也包括复数形式。还应当理解,本文中使用的术语“和/或”包括列出的多个相关联项目的任意或所有可能组合。
应当理解,尽管在本公开可能采用术语“第一”、“第二”等等来描述各种信息,但是这些信息不应当受这些术语限制。这些术语仅用来将一种类型的信息与另一种类型的信息区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果、例如”可以被解释成为“在……时”或“当……时”或“响应于确定”。 还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
图形处理器GPU芯片是用于处理图像和图形相关运算工作的微处理器,其需要具备很强的浮点数计算的能力,其中,对于浮点数的计算中最常见也最常用的计算即为乘加计算,GPU通常会以硬件形式预先配置多种算术逻辑单元(arithmetic and logic unit),即实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU,用于对不同数据进行计算,ALU中包括乘加器、加法器等,专用于对数据进行特定的计算。其中,乘加器通常是专用于某种数据的乘加器,例如,用于对单精度浮点数进行乘加计算的乘加器无法对双精度浮点数进行乘加计算,用于对整数进行乘加计算的ALU,无法对浮点数进行乘加计算等。
随着技术的不断发展,目前需要图形处理器GPU具备对双精度浮点数进行乘加的计算能力,然而目前业界的图形处理器仅具备对单精度浮点数进行乘加的能力,即仅具备单精度浮点数的乘加器,如果需要GPU具备对双精度浮点数进行乘加的计算能力,则需要设计和开发针对双精度浮点数的乘加器,并将开发的针对双精度浮点数的乘加器部署在GPU芯片上,采用这种方式会面临较高的硬件设计难度,同时也需要较长的研发周期,另外将完整的双精度浮点数的乘法器部署在GPU芯片上,也大大占用了GPU芯片的面积。
为了解决上述问题,本公开提出对GPU芯片中现有的单精度浮点数的乘加器进行简单改造得到特定乘加器,让特定乘加器既能对单精度浮点数进行乘加计算,也能完成对双精度浮点数进行乘加计算中的部分计算,另外,单独开发浮点数控制电路,使浮点数控制电路配合特定乘加器能够完成对双精度浮点数的乘加计算。采用上述方式,不需要完整的开发双精度浮点数的乘加器,降低了设计难度、缩短了研发周期,同时由于浮点数控制电路相对于双精度浮点数乘加器更为简单,因此占用芯片面积也较少,可以理解为,将双精度浮点数乘加器的一部分功能承载在了单精度浮点数的乘加器上,不需要将完整的双精度浮点数的乘加器部署在GPU芯片上,就可以让GPU芯片处理双精度浮点数的乘加计算,因此节省了GPU芯片的面积。
为了便于对本公开中的技术方案进行描述,下面先对浮点数进行说明:
浮点数是一种数字表示方式,采用浮点数可以表达各种实数,在计算机系统的发展过程中曾经提出过多种方法来表达实数,例如相对于浮点数的定点数,在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。比如,货币的表达就可以采用这种方式,如99.00或00.99可以用于表达具有小数点后有两位的货币。但是由于在定点数中,小数点的位置固定,不利于表达特别大或特别小的数,因此目前绝大多数计算机系统采用了浮点数的表达方式来表达实数。
在浮点数中,用一个尾数(Mantissa),一个基数(Base),一个指数(Exponent),以及一个表示正负的符号来表达实数。比如,121.1可以表达为1.211*102,其中,1.211为尾数,10为基数,2为指数,浮点数利用指数表达了浮动小数点的效果,从而可以表达更大范围的实数。
由于在计算机中数值的表达都是基于二进制的,因此在计算机中,浮点数的基数默认为2,另外,尾数的位数被称为浮点数的精度。例如浮点数1.001101 × 24的精度为7。
在IEEE (美国电气和电子工程师学会)中规定了多种浮点格式,常见的包括单精度浮点数、双精度浮点数、扩展双精度浮点数等。其中,单精度浮点数是32位的,即一个单精度浮点数需要占用连续的32位,其中符号占1位,指数占8位,尾数占23位,还有一个隐含位。双精度浮点数是64位的,其中,符号占1位,指数占11位,尾数占52位,还有一个隐含位。扩展双精度浮点数是80位的,其中符号占1位,指数占15位,尾数占64位。IEEE754标准规定一个实数V可以用:V=(-1)s×M×2E的形式表示,其中S为符号,其可以为0表示浮点数为正数,可以为1表示浮点数为负数,M为尾数,E为指数。
如图1所示,为单精度浮点数(32位浮点数)在计算机中存储时的示意图,其中,该单精度浮点数在计算机中共占用32位(4字节),其中该连续的32位中,分为三个域,包括:符号域、指数域以及尾数域,其中保存的值分别用于表示给定单精度浮点数中的符号,指数和尾数,因此通过尾数以及可以调节的指数就可以表达给定的数值了。
如图1所示,符号域位宽为1位,0代表正,1代表负。指数也称为阶码,指数域位宽为8位。存储值为0—255,为了应对负数的情况,需要将实际的指数加上一个偏差值(Bias)作为保存在指数域中的值,偏差值为2(指数位数 -1)-1,单精度的偏差值为2(8-1)-1=127,因此,在指数域中的值为指数的实际值加上127,因此,该8位的指数可以表示的实际值是-127—128。比如,单精度的实际指数值0在指数域中将保存为127;而保存在指数域中的 64则表示实际的指数值-63。
尾数域位宽为23位,包括小数点右侧的23个小数位,即尾数的小数部分,尾数还包括一个隐藏的整数位,即尾数的整数部分,因此虽然只有23个小数位的尾数被存储,但是尾数位的总精度为24位。
同理,双精度浮点数(64位浮点数)在计算机中存储时共占用64位(8字节),其中该连续的64位中,分为三个域,包括:符号占1位、指数占11位,尾数占52位,另外其尾数也包括一个隐藏的整数位,即尾数的整数部分。根据上述内容可知,不同精度的浮点数在计算机中存储的形式不同。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
如图2所示,为本公开提出的一种算术逻辑单元的结构示意图,其中,包括一个浮点数控制电路210,以及一个或多个特定乘加器220,图中示出的为4个特定乘加器。目前市面上不同GPU中每个算术逻辑单元ALU中的单精度浮点数的乘加器数量不同,可以对算术逻辑单元ALU中的每个单精度浮点数的乘加器均进行改造,得到特定乘加器220,例如Imagination公司生产的GPU中每个算术逻辑单元ALU中的单精度浮点数的乘加器数量为4个,则对该4个乘加器均进行改造得到四个特定乘加器。
其中,浮点数乘加器整体的计算内容为:计算两个乘数的积,然后计算两个乘数的积与加数的和。如,计算A*B+C,其中,A、B、C均是浮点数形式,A和B为乘数,C为加数。浮点数乘加器的输入为A、B、C,输出为乘加结果。单精度浮点数乘加器的输入中,两个乘数和一个加数均为单精度浮点数,输出也为单精度浮点数。本公开提出对单精度浮点数进行改造,具体的是将特定乘加器的输入要求改造为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且不大于双精度浮点数尾数位宽的预定位宽。其他输入要求与单精度浮点数乘加器的输入要求一致。结合上述图1以及相关内容可知单精度浮点数的尾数位宽实际为24位,因此目前单精度浮点数乘加器的输入中三个浮点数的尾数位宽为24位,而双精度浮点数的尾数位宽实际为53位,本公开将单精度浮点数乘加器输入的乘数的尾数位宽扩展为不小于双精度浮点数尾数位宽的1/2,且不大于双精度浮点数尾数位宽的预定位宽,如扩展为27位。
浮点数控制电路,在接收待乘加计算的三个双精度浮点数后,可以针对两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至特定乘加器;
特定乘加器,对输入的计算对象进行乘法计算,将计算结果返回至浮点数控制电路;
所述浮点数控制电路,用于接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将乘积结果与加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
采用上述方式,不需要完整的开发双精度浮点数的乘加器,只需要对现有的单精度浮点数的乘加器进行改造,以及仅需开发具备加法器功能(整数加法器以及浮点数加法器)的浮点数控制电路,整体降低了设计难度、缩短了研发周期,同时由于浮点数控制电路相对于双精度浮点数乘加器更为简单,因此硬件电路占用面积也较少,可以理解为,将双精度浮点数乘加器的一部分功能承载在了单精度浮点数的乘加器上,不需要将完整的双精度浮点数的乘加器部署在GPU芯片上,就可以让GPU芯片可以处理双精度浮点数的乘加计算,因此节省了GPU芯片的面积。
下面对上述浮点数控制电路以及特定乘加器所执行的功能进行说明:
在一个实施例中,特定乘加器输入要求具体为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且小于双精度浮点数尾数位宽的预定位宽,即乘数的尾数位宽为27位-52位时,所述浮点数控制电路,具体用于针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数;其中任一子尾数满足所述特定乘加器的输入要求;将两个乘数对应的子尾数进行交叉组合得到四组组合结果,每组组合结果中包括两个对应于不同乘数的子尾数;将一组组合结果确定为特定乘加器的计算对象,将四组组合结果输入至所述特定乘法器;
具体的,浮点数控制电路针对每一乘数,可以将其尾数从最高位截取预设位数作为一子尾数,并且将剩余尾数补位后作为另一子尾数,其中两个子尾数的位宽相同且满足所述特定乘加器的输入要求。
如,特定乘加器要求为输入的乘数的尾数位宽为27位,双精度浮点数的尾数位宽为53位,则可以将53位的尾数拆分前27位以及后26位,为了满足特定乘加器的输入要求,可以将后26位的最后补一位0,得到27位的数据。则针对乘数A会得到子尾数A1(A的尾数的前27位)、子尾数A2(A的尾数的后26位以及一位0),针对乘数B会得到子尾数B1(B的尾数的前27位)、子尾数B2(B的尾数的后26位以及一位0)。将两个子尾数进行交叉组合得到的四组组合结果分别为A1*B1,A1*B2,A2*B1,A2*B2,其中每组组合结果即为特定乘加器的计算对象,可以将四组组合结果输入到特定乘加器中进行计算。
如上述图2以及相关内容所述,算术逻辑单元可以有一个或多个特定乘加器,如果仅有一个特定乘加器,则将四组组合结果依次输入到特定乘加器中进行计算。如果存在多个特定乘加器,则可以并行的将多个组合结果分别输入到多个特定乘加器中进行计算,如上述的例子,Imagination公司生产的GPU中的算术逻辑单元中,通常存在四个特定乘加器,因此可以将四组组合结果并行的输入到四个特定乘加器中进行计算。
如上述所描述的,单精度浮点数乘加器具备对单精度浮点数进行相乘,以及相加的能力。而对于两个浮点数的乘法计算,实际上就是计算两个浮点数尾数的乘积以及计算两个浮点数的阶码的和,并将得到的结果进行组合,得到最终的乘加结果。因此单精度浮点数乘加器具备对尾数进行乘积的能力,特定乘加器只是将单精度浮点数的输入位宽以及输出内容进行了改造,其输出内容具体可以为:在输入的内容为两个乘数以及一个加数时(乘数和加数均为浮点数形式),则输出针对这三个数的乘加结果;在输入的内容为两个乘数时(两个乘数均为整数形式,双精度浮点数的尾数或子尾数可以理解为整数),则输出针对这两个数的乘积。因此,特定乘加器依然具备对尾数进行乘积的能力,进而特定乘加器在接收到组合结果后,可以对接收到的每组组合结果中的两个子尾数相乘,得到一个子乘积,将子乘积发送至浮点数控制电路。可以理解为在处理双精度浮点数时,利用了单精度浮点数乘加器对于尾数进行乘积的能力。如上述的例子中,其中一个组合结果为A1*B1,则该特定乘加器计算A1*B1,得到一个子乘积,将子乘积发送至浮点数控制电路。
浮点数控制电路,在接收针对四个组合结果的四个子乘积后,可以将四个子乘积进行移位相加,得到尾数乘积结果;对两个乘数的阶码相加,得到阶码乘积结果;将尾数乘积结果与阶码乘积结果组合得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
沿用上述例子,四组组合结果分别为A1*B1,A1*B2,A2*B1,A2*B2,其中A1和B1是两个乘数A和B尾数的高位,而A2和B2是两个乘数A和B尾数的低位,在对四组子乘积进行相加时需要进行移位相加。结合上述例子,A1、A2、B1、B2均为27位,其中,A1*B1的结果D3作为两个尾数高位的结果需要左移52位,而A1*B2的结果D2,A2*B1的结果D1分别需要左移25位,A2*B2的结果D0需要右移2位。
即移位相加的尾数乘积结果F= D0>>2+D1<<25+D2<<25+D3<<52,即得到的尾数乘积结果即为106位,同时,为了保证后续计算结果的舍入和移位能够正常进行,因此可以扩展若干个保护位,本公开对保护位的数量不进行限定,例如,可以是扩展2位用作保护位,则将乘积结果的尾数扩充为108位。可以理解的是,在特定乘加器的输入要求中,对于乘数的尾数输入的位宽不为27位时,进行移位相加时会移位不同的位数,上述仅是以27位为例进行了说明。
在得到尾数乘积结果后,可以对两个乘数即A和B的阶码进行相加,得到阶码乘积结果,尾数乘积结果以及阶码乘积结果进行组合得到两个乘数的乘积结果。例如,乘数A为X*2Y,乘数B为Z*2W,可以理解的是,为了便于介绍,这里未体现浮点数形式。尾数乘积结果即为(X*Z),而阶码乘积结果即为(Y+W),得到的两个乘数的乘积结果即为(X*Z)*2(Y+W)。
由于乘积结果的尾数为108位,为了使加数的尾数能够与该乘积结果的尾数进行对齐,因此也需要对加数的尾数进行扩充,即在其尾数后面补55个0,由于其尾数为53位(包含一个隐藏位),因此总共也为108位。
将乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
具体的,浮点数控制电路将乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果的方式可以如下:
对所述三个双精度浮点数(两个乘数以及一个加数)的符号进行异或,基于异或结果确定所述两个乘数的乘积结果与所述加数的计算方式,在异或结果为1时,确定计算方式为相减,在异或结果为0时,确定计算方式为相加。
如上文介绍,浮点数的符号位中,0表示正数,1表示负数。三个双精度浮点数A、B、C具有的符号情况,以及异或结果可以如表1所示。
表1
如表格中第一行,在两个乘数的符号位为0、加数符号位为1时,异或结果为1,即确定乘积结果与加数的计算方式为相减,其他情况以此类推。
在确定了乘积结果与加数的计算方式后,可以确定乘积结果的阶码与加数阶码的大小关系,基于计算方式以及阶码大小关系,在对乘积结果与加数计算时,可以分为以下四种情况:
(1)在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码大的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的右移,得到调整后加数的尾数;将调整后的加数的尾数与乘积结果的尾数相加,得到相加结果的尾数,以乘积结果的阶码为相加结果的阶码得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
具体的,在乘积结果的阶码大的情况下,为了使乘加结果与加数可以相加,首先就需要对加数的阶码调整为乘积结果的阶码,同时保证调整了阶码后加数的数值不变,则需要对加数的尾数进行右移。
例如,乘积结果的阶码为100,而加数的阶码为98,则将加数的阶码调整为100,同时将加数的尾数右移2位,即阶码变大后需要缩小尾数,才能保证加数的数值不变。其中,由于调整后的加数的阶码与乘积结果的阶码一致,因此相加结果的阶码即为乘积结果的阶码,调整后的加数与乘积结果的阶码一致,因此可以进行相加,并对相加结果进行截取,得到临时乘加结果。
具体的,相加之后需要判断相加结果的尾数的第109位是否为1,即判断尾数的最高位是否为1,如果是1,则需要将相加结果的阶码加1,得到临时乘加结果的阶码,同时从相加结果的尾数中截取第108位到56位作为临时乘加结果的尾数。乘积结果或者加数的小数点在108位与107位之间,如果第109位为1,则将小数点左移到108到109之间,为了保证数值不变,则需要将阶码加1,同时根据上述内容介绍可知,双精度浮点数的尾数的第一位1是隐藏位,因此截取108-56位作为临时乘加结果的尾数,即隐藏了第一个1。
如果临时乘加结果的尾数的第109位不为1,则确定相加结果的阶码为临时乘加结果的阶码,同时从相加结果的尾数中截取第107位到55位作为临时乘加结果的尾数。由于是相加,因此符号位与加数的符号位一致。采用上述方式确定了临时乘加结果。即如果第109位不是1,则不需要移动小数点,并且隐藏第108位,截取107到55位作为临时乘加结果。下面截取的方式和理由也相同,不再进行赘述。
(2)在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码小的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的左移,得到调整后加数的尾数;
将调整后加数的尾数与乘积结果的尾数相加,对相加结果进行对应于所述左移的右移,得到相加结果的尾数,以加数的阶码为相加结果的阶码,得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述乘加结果的符号与加数的符号一致。
具体的,在乘积结果的阶码小的情况下,为了使乘加结果与加数可以相加,首先就需要保证加数的阶码与乘积结果的阶码一致,才能对尾数进行相加,因此可以根据加数与乘积结果的阶码差对加数的尾数进行相应的左移,得到调整后加数的尾数;
例如,乘积结果的阶码为98,而加数的阶码为100,则可以将加数的尾数左移2位,得到调整后的加数的尾数。
将调整后的阶码的尾数与乘积结果的尾数相加后,可以将尾数相加的结果进行右移,结合上述例子,左移了2位,则需要右移2位,得到相加结果的尾数,并以加数的阶码作为相加结果的阶码,得到相加结果。在得到相加结果后,需要对相加结果进行截取得到临时乘加结果,具体的,相加之后需要判断相加结果的尾数的第109位是否为1,即判断尾数的最高位是否为1,如果是1,则需要将相加结果的阶码加1,得到临时乘加结果的阶码,同时从相加结果的尾数中截取第108位到56位作为临时乘加结果的尾数。
如果临时乘加结果的尾数的第109位不为1,则确定相加结果的阶码为临时乘加结果的阶码,同时从相加结果的尾数中截取第107位到55位作为临时乘加结果的尾数。由于是相加,因此符号位与加数的符号位一致。采用上述方式确定了临时乘加结果。
(3)所述浮点数控制电路,还用于在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码大的情况下,将乘积结果的阶码调整为所述加数的阶码,并对乘积结果的尾数进行左移,得到调整后的乘积结果;调整后的乘积结果与调整前的乘积结果数值不变;将调整后的乘积结果减去加数,得到相减结果,对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号相反。
具体的,在乘积结果的阶码大的情况下,为了使乘积结果可以与加数相减,首先就需要保证加数的阶码与乘积结果的阶码一致,才能对尾数进行相减,另外由于是做减法,因此差值可能会较小,为了提升差值的精度,本公开提出在做减法时,将阶码较大的乘积结果调整为阶码与加数相同,这样其尾数就会变大,进而尾数的差值也就会尽可能的大,因此可以根据加数与乘积结果的阶码差对乘积结果的尾数进行相应的左移,得到调整后乘积结果;
例如,乘积结果的阶码为100,而加数的阶码为98,则可以将乘积结果的尾数左移2位,得到调整后的乘积结果的尾数。
将调整后的乘积结果与加数相减时,由于乘积结果的阶码大,因此调整后的乘积结果的尾数数值更大,因此将调整后的乘积结果与加数相减,具体是指调整后的乘积结果减加数,得到相减结果。在得到相减结果后,需要对相减结果进行截取得到临时乘加结果。
具体的,相减之后需要确定相减结果的尾数的第一个1所在尾数的位置,基于该位置确定临时乘加结果的阶码,为了便于描述将该位置称为定阶位置,将该定阶位置所在的比特位称为定阶数值,调整后的乘积结果与加数的阶码一致,临时乘加结果的阶码为加数的阶码减去107再加上定阶数值。
由于乘加结果以及扩充后的加数的尾数均为108位,减去107位可以将尾数的小数点右移到尾数的最后一位,再加上定阶数值,即将小数点再移动到该第一个1的后面。根据上述关于浮点数的介绍可知,双精度浮点数的尾数的第一位必须是1,且需要隐藏,因此这里需要确定第一个1的位置,并将小数点定在该1的后面,同时根据小数点移动的信息确定阶码的大小,即确定临时乘加结果的阶码为加数的阶码减去107再加上定阶数值。在确定了阶码后,需要对尾数的该第一个1后面的53位进行截取作为临时乘加结果的尾数。由于是相减,且加数的数值小,因此临时乘加结果的符号与加数的符号相反。采用上述方式确定了临时乘加结果。
(4)所述浮点数控制电路,还用于在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码小的情况下,将加数的阶码调整为所述乘积结果的阶码,并对加数的尾数进行左移,得到调整后的加数;调整后的加数与调整前的加数数值不变;将调整后的加数与乘积结果相减,得到相减结果;对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
具体的,在加数的阶码大的情况下,为了使乘积结果可以与加数相减,首先就需要保证加数的阶码与乘积结果的阶码一致,才能对尾数进行相减,另外由于是做减法,因此差值可能会较小,为了提升差值的精度,本公开提出在做减法是,将阶码较大的加数调整为阶码与乘积结果相同,这样其尾数就会变大,进而尾数的差值也就会尽可能的大,因此可以根据加数与乘积结果的阶码差对加数的尾数进行相应的左移,得到调整后加数;
将调整后的加数与乘积结果相减后,由于加数的阶码大,因此其数值更大,因此将调整后的乘积结果与加数相减,具体是指调整后的加数减乘积结果,得到相减结果。在得到相减结果后,需要对相减结果进行截取得到临时乘加结果。
具体的,相减之后需要确定相减结果的尾数的第一个1所在尾数的位置,基于该位置确定临时乘加结果的阶码,如上文,将该位置称为定阶位置,将该定阶位置所在的比特位称为定阶数值;乘积结果与调整后的加数的阶码一致,临时乘加结果的阶码为乘积结果的阶码减去107再加上定阶数值;
由于乘加结果以及扩充后的加数的尾数均为108位,减去107位可以将尾数的小数点右移到尾数的最后一位,再加上定阶数值,即将小数点再移动到该第一个1的后面。根据上述介绍可以,双精度浮点数的尾数的第一位必须是1,且需要隐藏,因此这里需要确定第一个1的位置,并将小数点定在该1的后面,同时根据小数点移动的信息确定阶码的大小,即确定临时乘加结果的阶码为加数的阶码减去107在加上定阶位置的数值。在确定了阶码后,需要对尾数该第一个1后面的53位进行截取作为临时乘加结果的尾数。由于是相减,且加数的数值大,因此临时乘加结果的符号与加数的符号一致。采用上述方式确定了临时乘加结果。
上面介绍了在四种情况下得到临时乘加结果的方式,进一步,需要对临时乘加结果进行舍入处理,得到最终的乘加结果,上述得到临时乘加结果的尾数均为53位(不包括隐藏位)目的是留出一位用于舍入处理。
具体的,需要判断临时乘加结果尾数的1到52位是否均为1,如果均为1,且第0位也为1,即尾数均为1,则需要将临时乘加结果的阶码加1得到最终乘加结果的阶码,同时,确定最终乘加结果的尾数为全0。
如果临时乘加结果尾数的尾数1到52位均为1,且第0位为0,确定最终乘加结果的尾数为临时乘加结果尾数的尾数1到52位,确定临时乘加结果的阶码为最终乘加结果的阶码。
如果临时乘加结果尾数的尾数1到52位不均为1,且第0位为1,则确定最终乘加结果的尾数为临时乘加结果尾数的尾数1到52位加1,确定临时乘加结果的阶码为最终乘加结果的阶码。
如果临时乘加结果尾数的尾数1到52位不均为1,且第0位为0,则确定最终乘加结果的尾数为临时乘加结果尾数的尾数1到52位,确定临时乘加结果的阶码为最终乘加结果的阶码。上述舍入过程中,基于保留的尾数的最后一位确定舍入结果。
采用上述方式,可以在特定乘加器输入要求具体为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且小于双精度浮点数尾数位宽的预定位宽,即乘数的尾数位宽为27位-52位时,对三个双精度浮点数进行计算,得到针对该三个双精度浮点数的乘加结果。
在另一个实施例中,特定乘加器输入要求具体为:乘数的尾数位宽为双精度浮点数的尾数位宽。
浮点数控制电路,具体可以将两个乘数的尾数确定为特定乘加器的计算对象,将两个乘数的尾数输入至所述特定乘加器。特定乘加器,具体用于对两个乘数的尾数进行乘法计算,将尾数乘积结果返回至所述浮点数控制电路;所述浮点数控制电路,具体用于接收尾数乘积结果,对所述两个乘数的阶码相加,得到阶码乘积结果;将尾数乘积结果与阶码乘积结果组合得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
例如,乘数A为X*2Y,乘数B为Z*2W,浮点数控制电路,可以将乘数A和乘数B的尾数X和Z作为计算对象输入到特定乘加器中,特定乘加器计算X*Z,将X*Z的计算结果返回给浮点数控制电路,浮点数控制电路,计算Y+W,得到的两个乘数的乘积结果即为(X*Z)*2(Y+W)。进一步,计算乘积结果与加数的和,得到三个双精度浮点数的乘加结果。计算乘积结果与加数的和的过程,可以参照上一实施例中的内容,这里不再进行详述。
本实施例与上一实施例相比对于双精度浮点数的处理更快,不需要对乘数的尾数进行处理得到子尾数,直接将乘积的尾数输入到特定乘加器即可,浮点数控制电路也不需要对特定乘加器的输出结果进行处理。但是,在处理单精度浮点数时需要补充的尾数较多,具体内容可以参照后文。领域技术人员可以根据实际需求确定对特定乘加器的输入进行改造的方式。
为了提升计算的效率,以及确定计算的必要性,浮点数控制电路在计算临时乘加结果前,即在得到了乘积结果后,还用于确定乘积结果与加数阶码的差值,在乘积结果阶码较大且差值大于预设阈值的情况下,直接基于所述乘积结果确定最终乘加结果,即确定临时乘加结果为该乘积结果,并且对临时乘加结果进行截取和舍入得到最终乘积结果。
例如,预设阈值为106,即乘积结果的阶码与加数的阶码差值大于106,则可以确定乘积结果与加数的数值差距较大,可以直接认为乘积结果即为最终乘加结果,进而提升整体的计算效率。具体的,可以是将两个乘数的符号进行异或,基于异或结果确定最终乘加结果的符号,确定最终乘加结果的109位是否为1,如果为1,则确定阶码为两个乘数的阶码相加再减去1022,截取尾数的57至108位作为最终乘积结果的尾数,如果不为1,则确定阶码为两个乘数的阶码相加再减去1023,截取尾数的56至107位作为最终乘积结果的尾数。
在加数阶码较大,且差值大于预设阈值的情况下,不执行计算临时乘加结果的过程,直接基于所述加数确定最终乘加结果,即确定最终乘加结果为该加数。例如,预设阈值为55,即加数与乘积结果的阶码差值大于55,则可以确定加数与乘积结果的数值差距较大,可以直接认为加数即为最终乘加结果,进而提升整体的计算效率。
在加数和乘积结果的差值小于预设阈值的情况下,按照上述方式对乘积结果与加数进行计算,并得到最终乘加结果。
上述描述的内容均为浮点数控制电路以及特定乘加器对于双精度浮点数进行处理的过程,可以理解的是,由于特定乘加器是由单精度浮点数的乘加器改造得到的,因此本公开提出的算术逻辑单元,不仅可以用于处理双精度浮点数的计算,同时也可以处理单精度浮点数的乘加计算。
如图3所示,该算术逻辑单元还包括格式解析电路230;该格式解析电路,用于接收待进行乘加计算的浮点数;确定所接收的浮点数的类型;若所接收的浮点数为双精度浮点数,则将待进行乘加计算的双精度浮点数发送至所述浮点数控制器。即格式解析电路在确定浮点数为双精度浮点数的情况下,直接将浮点数发送给浮点数控制电路,由浮点数控制电路对双精度浮点数进行上述处理。格式解析电路具体可以是接收片外,如接收中央处理器发送的待进行乘加计算的浮点数。
格式解析电路在确定所接收的浮点数为单精度浮点数的情况下,对每个作为乘数的单精度浮点数进行预处理,以使预处理后的单精度浮点数的尾数满足所述特定乘加器的输入要求;将处理后的单精度浮点数发送至所述特定乘法器。
由于特定乘加器是对单精度浮点数的输入进行了改造,因此如果想要特定乘加器能够对接收的浮点数进行计算处理,则需要对单精度浮点数形式的乘数进行预处理,具体是按照特定乘加器的输入要求,对乘数的尾数进行扩充,即对乘数的尾数低位上补充预设数量的0,以使两个乘数的尾数可以满足特定乘加器的输入要求。
任一所述特定乘加器,在接收到了两个处理后的乘数以及一个单精度浮点数的加数后,可以对这一组处理后的单精度浮点数进行乘加计算得到乘加结果,所述乘加结果为单精度浮点数。
具体的,延用上述例子,例如特定乘加器的输入要求为:乘数的尾数为27;则需要对每个乘数的尾数在低位补充4个0,以将两个乘数的23位的尾数扩充为27位。特定乘加器对两个尾数为27位的乘数进行相乘后,对乘积结果尾数的后8位丢弃,得到处理后的乘积结果,即可以利用处理后的乘积结果与加数进行相加,得到乘加结果,其中乘加结果为单精度浮点数。可以理解的是,由于特定乘加器就是由单精度浮点数乘加器改造而来的,因此这里并不需要对乘加器内部的计算过程进行过多修改,仅仅是对乘积结果丢弃了尾数的后8位,以使该乘积结果转化为了两个单精度浮点数的乘积结果,进而可以继续执行后续的加法运算,当然,上述丢弃8位是指在输入的乘数尾数为27位时执行的,在特定乘加器的输入要求为其他位数时,对乘积结果丢弃的位数也不同。
根据上述公开的内容可知,本公开提出的算术逻辑单元,既能处理单精度浮点数的乘加计算,也能处理双精度浮点数的乘加计算,同时该算术逻辑单元中不需要部署完整的双精度浮点数的乘加器,因此节约了芯片的面积。
为了避免无效的计算,浮点数控制电路在对接收到了双精度浮点数进行处理前,即在接收到待乘加计算的三个双精度浮点数后,需要确定三个双精度浮点数的合法性,在三个双精度浮点数均合法的情况下,对所述三个双精度浮点数进行处理和计算,其中确定双精度浮点数是否合法包括检查以下格式:
非数判断:任一乘数或加数,阶码全1,尾数不全0。
无穷判断:任一乘数或加数阶码全1,尾数全0。
饱和判断:任一乘数或加数的阶码除最低位以外全1,尾数全1。
全零判断:任一乘数或加数阶码和尾数全0。
在满足上述任一情况的情况下,浮点数控制电路不对获取的双精度浮点数进行计算,在不满足上述任一情况的情况下,才进行计算,以避免进行无用的计算,浪费处理资源。
另外,在计算精度要求不高时,为了提升计算效率,算术逻辑单元还可以包括前处理电路,格式解析电路在确定接收到的浮点数是双精度浮点数的情况下,除了将双精度浮点数发送至浮点数控制电路,还可以发送至前处理单元进行处理,前处理单元用于将两个乘数的尾数进行截取,使该尾数满足特定乘加器的要求,将加数的尾数进行截取为满足单精度位宽的尾数,并将三个双精度浮点数的阶码转化为单精度浮点数的阶码表示范围内的阶码,将三个处理后的浮点数发送至特定乘加器进行计算,特定乘加器可以对三个前处理后的浮点数按照对单精度浮点数进行计算的方式得到输出结果,即将三个双精度浮点数通过丢失精度的方式进行转化,以使特定乘加器能够对该三个双精度浮点数按照对单精度浮点数计算的方式进行计算。前处理单元,将两个乘数的尾数进行截取,具体可以是对双精度浮点数的尾数的高位的预定位数进行截取,如预定位数为27位,则截取27位;将加数的尾数的高位的23位进行截取得到满足单精度位宽的尾数;将三个双精度浮点数的阶码转化为单精度浮点数的阶码表示范围内的阶码,可以是分别判断各个双精度浮点数的阶码对应的数值是否在单精度浮点数的阶码表示范围内,如果在则直接将该数值转化为单精度浮点数阶码的表示形式,如果不在,则确定单精度浮点数的阶码的极值作为转化后的阶码,如,单精度浮点数阶码的表示范围为-127—128,则双精度浮点数的阶码的数值小于-127时,则将其近似为-127,在双精度浮点数的阶码的数值大于128时,则将其近似为128,如果双精度浮点数的阶码的数值在-127—128,则只需要将双精度浮点数的阶码转化为单精度浮点数的阶码的表示形式而数值不变。
具体的,格式解析电路,可以根据中央处理器发送的处理指令中的指示信息,决定将双精度浮点数发送给前处理电路还是浮点数控制电路进行处理,其中执行信息中可以携带计算精度要求,在计算精度要求较高时,将双精度浮点数发送给浮点数控制电路进行处理,在在计算精度要求较低时,将双精度浮点数发送给前处理电路进行处理。
另外,格式解析电路在接收到指令后,可以对该指令进行安全检测,若指令的安全等级大于预设安全等级时,才执行该指令否则丢弃该指令,具体的可以是通过寄存器存储预设安全等级,通过对比指令携带的安全等级和预设安全等级的大小进行安全检测。
如图4所示,与上述提出的一种算术逻辑单元相对应,本说明书还提出一种浮点数处理方法,应用于该算术逻辑单元,该方法包括:
S401,所述浮点数控制电路接收待乘加计算的三个双精度浮点数,所述三个双精度浮点数中包括两个乘数以及一个加数,针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器;
S402,特定乘加器对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路;
S403,所述浮点数控制电路接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
在一个实施例中,所述算术逻辑单元还包括格式解析电路;所述方法还包括:
所述格式解析电路接收待进行乘加计算的浮点数;确定所接收的浮点数的类型;若所接收的浮点数为双精度浮点数,则将待进行乘加计算的双精度浮点数发送至所述浮点数控制器。
在一个实施例中,所述方法还包括:所述格式解析电路在所接收的浮点数为单精度浮点数的情况下,对每个作为乘数的单精度浮点数进行预处理,以使预处理后的单精度浮点数的尾数满足所述特定乘加器的输入要求;将处理后的单精度浮点数发送至所述特定乘法器;
任一所述特定乘加器对一组处理后的单精度浮点数进行乘加计算得到乘加结果,所述乘加结果为单精度浮点数。
在一个实施例中,所述特定乘加器输入要求具体为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且小于双精度浮点数尾数位宽的预定位宽;所述针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器,包括:针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数;其中任一子尾数满足所述特定乘加器的输入要求;将两个乘数对应的子尾数进行交叉组合得到四组组合结果,每组组合结果中包括两个对应于不同乘数的子尾数;将一组组合结果确定为特定乘加器的计算对象,将四组组合结果输入至所述特定乘法器;
所述特定乘加器对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路,包括:
所述特定乘加器对接收到的每组组合结果中的两个子尾数相乘,得到一个子乘积;将子乘积发送至浮点数控制电路;
所述浮点数控制电路接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数,包括:
所述浮点数控制电路对接收到的四个子乘积进行移位相加,得到尾数乘积结果;对所述两个乘数的阶码相加,得到阶码乘积结果;将尾数乘积结果与阶码乘积结果组合得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
在一个实施例中,所述针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数,包括:针对每一乘数,将其尾数从最高位截取预设位数作一子尾数,并且将剩余尾数补位后作为子尾数,其中两个子尾数的位宽相同且满足所述特定乘法器的输入要求。
在一个实施例中,所述将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,包括:
对所述三个双精度浮点数的符号进行异或,基于异或结果确定所述两个乘数的乘积结果与所述加数的计算方式;比较乘积结果的阶码与加数的阶码大小;
在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码大的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的右移,得到调整后加数的尾数;将调整后的加数的尾数与乘积结果的尾数相加,得到相加结果的尾数,以乘积结果的阶码为相加结果的阶码得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
在一个实施例中,方法还包括:
在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码小的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的左移,得到调整后加数的尾数;
将调整后加数的尾数与乘积结果的尾数相加,对相加结果进行对应于所述左移的右移,得到相加结果的尾数,以加数的阶码为相加结果的阶码,得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述乘加结果的符号与加数的符号一致。
在一个实施例中,方法还包括:
在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码大的情况下,将乘积结果的阶码调整为所述加数的阶码,并对乘积结果的尾数进行左移,得到调整后的乘积结果;调整后的乘积结果与调整前的乘积结果数值不变;将调整后的乘积结果减去加数,得到相减结果,对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号相反。
在一个实施例中,方法还包括:
在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码小的情况下,将加数的阶码调整为所述乘积结果的阶码,并对加数的尾数进行左移,得到调整后的加数;调整后的加数与调整前的加数数值不变;将调整后的加数与乘积结果相减,得到相减结果;对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
在一个实施例中, 所述浮点数控制电路在将所述乘积结果与所述加数进行相加前,还包括:
所述浮点数控制电路确定所述乘积结果阶码与所述加数的阶码的差值;在所述差值大于预设阈值,且所述乘积结果大的情况下,基于所述乘积结果确定最终乘加结果;在所述加数大的情况下,基于所述加数确定最终乘加结果。
在一个实施例中,所述浮点数控制电路在接收到待乘加计算的三个双精度浮点数后还包括:
确定所述三个双精度浮点数的合法性,在所述三个双精度浮点数均合法的情况下,对所述三个双精度浮点数进行处理和计算。
如图5所示,本公开提出一种具体的浮点数处理方法,包括:
S501,格式解析电路对指令进行安全检测,在安全检测通过后执行S502;
S502,确定浮点数的类型,如果浮点数的类型为单精度浮点数则执行503;
如果浮点数的类型为双精度浮点数则执行S504;
S503,特定乘加器对单精度浮点数进行计算,确定单精度浮点数的乘加结果;
S504,确实计算精度要求,精度要求高则执行S505,要求低则执行S506;
S505,浮点数控制电路对双精度浮点数进行处理,配合特定乘加器确定双精度浮点数的乘加结果;
S506,前处理电路对双精度浮点数进行处理,配合特定乘加器确定双精度浮点数的乘加结果。
本公开实施例还提供一种GPU种芯片,包括上述算术逻辑单元。
本公开实施例还提供一种电子设备,该电子设备包括上述芯片的电子装置。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
在一个具体的实施例中,本公开中所描述GPU,如图6所示,其至少包括:
GPU core,用来处理命令,例如处理画图的命令,根据画图命令,执行图像渲染的Pipeline。其中,GPU core里面主要包含了计算单元,用于执行shader编译后的指令,属于可编程模块,由大量的ALU组成;Cache(存储器),用于缓存GPU core的数据,以减少对内存的访问;控制器(图中未示出)另外,GPU core 还具有多种功能模块,例如光栅化(3D渲染管线的一个固定的阶段)、Tilling(TBR和TBDR GPU架构中对一帧进行划片处理)、裁剪(3D渲染管线的一个固定的阶段,裁剪掉观察范围外,或者背面不显示的图元)、后处理(对画完的图进行缩放,裁剪,旋转等操作)等。
通用DMA,用于执行主机内存到GPU显卡内存之间的数据搬移,例如,用于3D画图的vertex数据,通用DMA将vertex数据从主机内存搬到GPU显卡内存;
片上网络,用于SOC上各个master和salve之间的数据交换;
应用处理器,用于SOC上各个模块任务的调度,例如GPU渲染完一帧图后通知应用处理器,应用处理器再启动显示控制器将GPU画完的图显示到屏幕上;
PCIe控制器,用于和主机通信的接口,实现PCIe协议,使GPU显卡通过PCIe接口连接到主机上。主机上运行了图形API,以及显卡的驱动等程序;
内存控制器,用于连接内存设备,用于保存SOC上的数据;
显示控制器,用于控制将内存里的frame buffer以显示接口(HDMI, DP等)输出到显示器上;
视频解码器,用于将主机硬盘上的编码的视频解码成能显示的画面。
视频编码器,用于将主机硬盘上原始的视频码流编码成指定的格式返回给主机。
如图所示,本公开中的算术逻辑单元为该图中的ALU。
以上尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改,本领域的技术人员在不脱离本公开的精神和范围的前提下,做出的变更和修改也应视为本公开实施例的保护范围。
Claims (24)
1.一种算术逻辑单元,其特征在于,包括特定乘加器以及浮点数控制电路;所述特定乘加器是对单精度浮点数乘加器改造得到的;所述特定乘加器的输入要求为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且不大于双精度浮点数尾数位宽的预定位宽;
所述浮点数控制电路,用于接收待乘加计算的三个双精度浮点数,所述三个双精度浮点数中包括两个乘数以及一个加数,针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器;
所述特定乘加器,用于对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路;
所述浮点数控制电路,用于接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到针对所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
2.根据权利要求1所述的算术逻辑单元,其特征在于,所述算术逻辑单元还包括格式解析电路;
所述格式解析电路,用于接收待进行乘加计算的浮点数;确定所接收的浮点数的类型;若所接收的浮点数为双精度浮点数,则将待进行乘加计算的双精度浮点数发送至所述浮点数控制器。
3.根据权利要求2所述的算术逻辑单元,其特征在于,
所述格式解析电路,还用于在所接收的浮点数为单精度浮点数的情况下,对每个作为乘数的单精度浮点数进行预处理,以使预处理后的单精度浮点数的尾数满足所述特定乘加器的输入要求;将预处理后的单精度浮点数发送至所述特定乘法器;
任一所述特定乘加器,还用于对一组预处理后的单精度浮点数进行乘加计算得到乘加结果,所述乘加结果为单精度浮点数。
4.根据权利要求1所述的算术逻辑单元,其特征在于,所述特定乘加器输入要求具体为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且小于双精度浮点数尾数位宽的预定位宽;
所述浮点数控制电路,具体用于针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数;其中任一子尾数满足所述特定乘加器的输入要求;将两个乘数对应的子尾数进行交叉组合得到四组组合结果,每组组合结果中包括两个对应于不同乘数的子尾数;将一组组合结果确定为特定乘加器的计算对象,将所述四组组合结果输入至所述特定乘法器;
所述特定乘加器,具体用于对接收到的每组组合结果中的两个子尾数相乘,得到一个子乘积;将子乘积发送至浮点数控制电路;
所述浮点数控制电路,具体用于对接收到的四个子乘积进行移位相加,得到尾数乘积结果;对所述两个乘数的阶码相加,得到阶码乘积结果;将尾数乘积结果与阶码乘积结果组合得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
5.根据权利要求4所述的算术逻辑单元,其特征在于,
所述浮点数控制电路,具体用于针对每一乘数,将其尾数从最高位截取预设位数作一子尾数,并且将剩余尾数补位后作为子尾数,其中两个子尾数的位宽相同且满足所述特定乘法器的输入要求。
6.根据权利要求5所述的算术逻辑单元,其特征在于,
所述浮点数控制电路,具体用于对所述三个双精度浮点数的符号进行异或,基于异或结果确定所述两个乘数的乘积结果与所述加数的计算方式;比较乘积结果的阶码与加数的阶码大小;
在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码大的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的右移,得到调整后加数的尾数;将调整后的加数的尾数与乘积结果的尾数相加,得到相加结果的尾数,以乘积结果的阶码为相加结果的阶码得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
7.根据权利要求6所述的算术逻辑单元,其特征在于,
所述浮点数控制电路,还用于在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码小的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的左移,得到调整后加数的尾数;
将调整后加数的尾数与乘积结果的尾数相加,对相加结果进行对应于所述左移的右移,得到相加结果的尾数,以加数的阶码为相加结果的阶码,得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述乘加结果的符号与加数的符号一致。
8.根据权利要求7所述的算术逻辑单元, 其特征在于,
所述浮点数控制电路,还用于在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码大的情况下,将乘积结果的阶码调整为所述加数的阶码,并对乘积结果的尾数进行左移,得到调整后的乘积结果;调整后的乘积结果与调整前的乘积结果数值不变;将调整后的乘积结果减去加数,得到相减结果,对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号相反。
9.根据权利要求8所述的算术逻辑单元,其特征在于,
所述浮点数控制电路,还用于在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码小的情况下,将加数的阶码调整为所述乘积结果的阶码,并对加数的尾数进行左移,得到调整后的加数;调整后的加数与调整前的加数数值不变;将调整后的加数与乘积结果相减,得到相减结果;对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
10.根据权利要求4所述的算术逻辑单元,其特征在于,
所述浮点数控制电路,还用于在将所述乘积结果与所述加数进行相加前,确定所述乘积结果阶码与所述加数的阶码的差值;在所述差值大于预设阈值,且所述乘积结果大的情况下,基于所述乘积结果确定最终乘加结果;在所述加数大的情况下,基于所述加数确定最终乘加结果。
11.根据权利要求1所述的算术逻辑单元,其特征在于,
所述浮点数控制电路,还用于在接收到待乘加计算的三个双精度浮点数后,确定所述三个双精度浮点数的合法性,在所述三个双精度浮点数均合法的情况下,对所述三个双精度浮点数进行处理和计算。
12.一种浮点数处理方法,其特征在于,应用于算术逻辑单元,所述算术逻辑单元包括特定乘加器以及浮点数控制电路;所述特定乘加器是对单精度浮点数乘加器改造得到的;所述特定乘加器的输入要求为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且不大于双精度浮点数尾数位宽的预定位宽;所述方法包括:
所述浮点数控制电路接收待乘加计算的三个双精度浮点数,所述三个双精度浮点数中包括两个乘数以及一个加数,针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器;
特定乘加器对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路;
所述浮点数控制电路接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
13.根据权利要求12所述的方法,其特征在于,所述算术逻辑单元还包括格式解析电路;所述方法还包括:
所述格式解析电路接收待进行乘加计算的浮点数;确定所接收的浮点数的类型;若所接收的浮点数为双精度浮点数,则将待进行乘加计算的双精度浮点数发送至所述浮点数控制器。
14.根据权利要求13所述的方法,其特征在于,所述方法还包括:
所述格式解析电路在所接收的浮点数为单精度浮点数的情况下,对每个作为乘数的单精度浮点数进行预处理,以使预处理后的单精度浮点数的尾数满足所述特定乘加器的输入要求;将处理后的单精度浮点数发送至所述特定乘法器;
任一所述特定乘加器对一组处理后的单精度浮点数进行乘加计算得到乘加结果,所述乘加结果为单精度浮点数。
15.根据权利要求12所述的方法,其特征在于,所述特定乘加器输入要求具体为:乘数的尾数位宽为不小于双精度浮点数尾数位宽的1/2,且小于双精度浮点数尾数位宽的预定位宽;所述针对所述两个乘数的尾数确定特定乘加器的计算对象,将计算对象输入至所述特定乘加器,包括:针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数;其中任一子尾数满足所述特定乘加器的输入要求;将两个乘数对应的子尾数进行交叉组合得到四组组合结果,每组组合结果中包括两个对应于不同乘数的子尾数;将一组组合结果确定为特定乘加器的计算对象,将四组组合结果输入至所述特定乘法器;
所述特定乘加器对输入的计算对象进行乘法计算,将计算结果返回至所述浮点数控制电路,包括:
所述特定乘加器对接收到的每组组合结果中的两个子尾数相乘,得到一个子乘积;将子乘积发送至浮点数控制电路;
所述浮点数控制电路接收特定乘加器的计算结果,根据所述计算结果得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数,包括:
所述浮点数控制电路对接收到的四个子乘积进行移位相加,得到尾数乘积结果;对所述两个乘数的阶码相加,得到阶码乘积结果;将尾数乘积结果与阶码乘积结果组合得到所述两个乘数的乘积结果;将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,所述乘加结果为双精度浮点数。
16.根据权利要求15所述的方法,其特征在于,所述针对两个乘数中的每一乘数,将其尾数进行处理得到两个子尾数,包括:
针对每一乘数,将其尾数从最高位截取预设位数作一子尾数,并且将剩余尾数补位后作为子尾数,其中两个子尾数的位宽相同且满足所述特定乘法器的输入要求。
17.根据权利要求16所述的方法,其特征在于,所述将所述乘积结果与所述加数进行相加,得到所述三个双精度浮点数的乘加结果,包括:
对所述三个双精度浮点数的符号进行异或,基于异或结果确定所述两个乘数的乘积结果与所述加数的计算方式;比较乘积结果的阶码与加数的阶码大小;
在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码大的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的右移,得到调整后加数的尾数;将调整后的加数的尾数与乘积结果的尾数相加,得到相加结果的尾数,以乘积结果的阶码为相加结果的阶码得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
18.根据权利要求17所述的方法,其特征在于,所述方法还包括:
在确定乘积结果与所述加数的计算方式为相加且乘积结果的阶码小的情况下,根据加数与乘积结果的阶码差对加数的尾数进行相应的左移,得到调整后加数的尾数;
将调整后加数的尾数与乘积结果的尾数相加,对相加结果进行对应于所述左移的右移,得到相加结果的尾数,以加数的阶码为相加结果的阶码,得到相加结果,对相加结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述乘加结果的符号与加数的符号一致。
19.根据权利要求18所述的方法,其特征在于,所述方法还包括:
在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码大的情况下,将乘积结果的阶码调整为所述加数的阶码,并对乘积结果的尾数进行左移,得到调整后的乘积结果;调整后的乘积结果与调整前的乘积结果数值不变;将调整后的乘积结果减去加数,得到相减结果,对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号相反。
20.根据权利要求19所述的方法,其特征在于,所述方法还包括:
在确定乘积结果与所述加数的计算方式为相减且乘积结果的阶码小的情况下,将加数的阶码调整为所述乘积结果的阶码,并对加数的尾数进行左移,得到调整后的加数;调整后的加数与调整前的加数数值不变;将调整后的加数与乘积结果相减,得到相减结果;对相减结果进行截取得到临时乘加结果,对临时乘加结果进行舍入得到最终乘加结果,所述最终乘加结果的符号与加数的符号一致。
21.根据权利要求15所述的方法,其特征在于,所述浮点数控制电路在将所述乘积结果与所述加数进行相加前,还包括:
所述浮点数控制电路确定所述乘积结果阶码与所述加数的阶码的差值;在所述差值大于预设阈值,且所述乘积结果大的情况下,基于所述乘积结果确定最终乘加结果;在所述加数大的情况下,基于所述加数确定最终乘加结果。
22.根据权利要求12所述的方法,其特征在于,所述浮点数控制电路在接收到待乘加计算的三个双精度浮点数后还包括:
确定所述三个双精度浮点数的合法性,在所述三个双精度浮点数均合法的情况下,对所述三个双精度浮点数进行处理和计算。
23.一种GPU芯片,其特征在于,包括上述权利要求1-11任一项所述的算术逻辑单元。
24.一种电子设备,其特征在于,包括权利要求23所述的芯片。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210376801.2A CN114461176B (zh) | 2022-04-12 | 2022-04-12 | 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210376801.2A CN114461176B (zh) | 2022-04-12 | 2022-04-12 | 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114461176A true CN114461176A (zh) | 2022-05-10 |
CN114461176B CN114461176B (zh) | 2022-07-19 |
Family
ID=81417772
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210376801.2A Active CN114461176B (zh) | 2022-04-12 | 2022-04-12 | 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114461176B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115190102A (zh) * | 2022-07-22 | 2022-10-14 | 北京象帝先计算技术有限公司 | 信息广播方法、装置、电子单元、soc及电子设备 |
CN117389512A (zh) * | 2023-12-06 | 2024-01-12 | 摩尔线程智能科技(北京)有限责任公司 | 一种算术逻辑单元alu系统、电子设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5880984A (en) * | 1997-01-13 | 1999-03-09 | International Business Machines Corporation | Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments |
CN104808965A (zh) * | 2015-05-06 | 2015-07-29 | 苏州中晟宏芯信息科技有限公司 | 支持三操作数浮点连加的浮点乘加装置及其操作方法 |
CN109643228A (zh) * | 2016-10-01 | 2019-04-16 | 英特尔公司 | 用于浮点乘加运算的低能耗尾数乘法 |
CN113076083A (zh) * | 2021-06-04 | 2021-07-06 | 南京后摩智能科技有限公司 | 数据乘加运算电路 |
CN113138750A (zh) * | 2020-01-20 | 2021-07-20 | 华为技术有限公司 | 算数逻辑单元、浮点数乘法计算的方法及设备 |
-
2022
- 2022-04-12 CN CN202210376801.2A patent/CN114461176B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5880984A (en) * | 1997-01-13 | 1999-03-09 | International Business Machines Corporation | Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments |
CN104808965A (zh) * | 2015-05-06 | 2015-07-29 | 苏州中晟宏芯信息科技有限公司 | 支持三操作数浮点连加的浮点乘加装置及其操作方法 |
CN109643228A (zh) * | 2016-10-01 | 2019-04-16 | 英特尔公司 | 用于浮点乘加运算的低能耗尾数乘法 |
CN113138750A (zh) * | 2020-01-20 | 2021-07-20 | 华为技术有限公司 | 算数逻辑单元、浮点数乘法计算的方法及设备 |
CN113076083A (zh) * | 2021-06-04 | 2021-07-06 | 南京后摩智能科技有限公司 | 数据乘加运算电路 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115190102A (zh) * | 2022-07-22 | 2022-10-14 | 北京象帝先计算技术有限公司 | 信息广播方法、装置、电子单元、soc及电子设备 |
CN115190102B (zh) * | 2022-07-22 | 2024-04-16 | 北京象帝先计算技术有限公司 | 信息广播方法、装置、电子单元、soc及电子设备 |
CN117389512A (zh) * | 2023-12-06 | 2024-01-12 | 摩尔线程智能科技(北京)有限责任公司 | 一种算术逻辑单元alu系统、电子设备和存储介质 |
CN117389512B (zh) * | 2023-12-06 | 2024-02-23 | 摩尔线程智能科技(北京)有限责任公司 | 一种算术逻辑单元alu系统、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114461176B (zh) | 2022-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11797303B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
US8615542B2 (en) | Multi-function floating point arithmetic pipeline | |
CN114461176B (zh) | 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备 | |
CN106990937B (zh) | 一种浮点数处理装置和处理方法 | |
US8106914B2 (en) | Fused multiply-add functional unit | |
US9465578B2 (en) | Logic circuitry configurable to perform 32-bit or dual 16-bit floating-point operations | |
US8037119B1 (en) | Multipurpose functional unit with single-precision and double-precision operations | |
US11816482B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
US20150039661A1 (en) | Type conversion using floating-point unit | |
US10297001B2 (en) | Reduced power implementation of computer instructions | |
KR100911786B1 (ko) | 다목적 승산-가산 기능 유닛 | |
KR20130098328A (ko) | 부동 소수점 제산을 수행하기 위한 방법 및 장치 | |
WO2016028443A1 (en) | Emulation of fused multiply-add operations | |
US8930433B2 (en) | Systems and methods for a floating-point multiplication and accumulation unit using a partial-product multiplier in digital signal processors | |
US6298365B1 (en) | Method and system for bounds comparator | |
US9519459B2 (en) | High efficiency computer floating point multiplier unit | |
US6233595B1 (en) | Fast multiplication of floating point values and integer powers of two | |
US7747669B2 (en) | Rounding of binary integers | |
CN116700663A (zh) | 一种浮点数处理方法及装置 | |
Kuang et al. | A multi-functional multi-precision 4D dot product unit with SIMD architecture | |
CN116700664A (zh) | 一种确定浮点数平方根的方法及装置 | |
CN116700666A (zh) | 一种浮点数处理方法及装置 | |
CN116700665A (zh) | 一种确定浮点数平方根倒数的方法及装置 | |
CN115718586A (zh) | 像素颜色混合操作方法、图形绘制方法、装置和设备 | |
CN116974517A (zh) | 浮点数处理方法、装置、计算机设备和处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231124 Address after: 401135 No. 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing Patentee after: Xiangdixian Computing Technology (Chongqing) Co.,Ltd. Address before: Room 901, 901, floor 9 (09), building 1, yard 5, Anding Road, Chaoyang District, Beijing 100029 Patentee before: Beijing xiangdixian Computing Technology Co.,Ltd. |
|
TR01 | Transfer of patent right |