CN115934030A - 算数逻辑单元、浮点数乘法计算的方法及设备 - Google Patents

算数逻辑单元、浮点数乘法计算的方法及设备 Download PDF

Info

Publication number
CN115934030A
CN115934030A CN202211628380.4A CN202211628380A CN115934030A CN 115934030 A CN115934030 A CN 115934030A CN 202211628380 A CN202211628380 A CN 202211628380A CN 115934030 A CN115934030 A CN 115934030A
Authority
CN
China
Prior art keywords
floating point
point number
precision
output
input
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
Application number
CN202211628380.4A
Other languages
English (en)
Other versions
CN115934030B (zh
Inventor
潘秋萍
林腾毅
沈胜宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202211628380.4A priority Critical patent/CN115934030B/zh
Publication of CN115934030A publication Critical patent/CN115934030A/zh
Application granted granted Critical
Publication of CN115934030B publication Critical patent/CN115934030B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/57Arithmetic 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)

Abstract

本申请公开了一种算数逻辑单元、浮点数乘法计算的方法及设备。本申请提供的算数逻辑单元用于计算机芯片,包括至少一个调整电路和至少一个乘加器。每个调整电路,用于获取输入浮点数,根据输入浮点数,调整得到输出浮点数,将输出浮点数输入至乘加器。每个乘加器,用于根据输出浮点数获得第一乘积结果,将第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果。因此,本申请通过调整电路将不同精度的输入浮点数转换为同一精度的输出浮点数,将不同精度的输入浮点数的乘法运算,转换为了同一精度的输出浮点数的乘法运算,这样,在计算设备中不必设计多种独立的不同精度乘法器,有效地节省了计算资源。

Description

算数逻辑单元、浮点数乘法计算的方法及设备
技术领域
本申请涉及数据处理技术领域,特别涉及一种算数逻辑单元、浮点数乘法计算的方法及设备。
背景技术
浮点数是计算机中一种重要的数字格式,在计算机中浮点数由符号、阶码和尾数三部分组成。为了满足不同业务对数据精度的不同需求,计算机通常需要具有对不同精度的浮点数进行乘法运算的能力。
目前,为了实现对不同精度浮点数的乘法运算需求,通常会对应不同的精度设计多个独立的乘法器。例如,在需要处理器同时支持半精度、单精度和双精度的乘法运算时,则可以在处理器等芯片中设计独立的至少三个乘法器,使其分别满足半精度、单精度和双精度浮点数的乘法运算需求。
在实现本申请的过程中,发明人发现相关技术至少存在以下问题:
在芯片中独立设计多个分别支持不同精度的乘法器,当***只使用其中一种精度的乘法器计算时,其余精度的乘法器处于闲置状态,十分浪费计算资源。
发明内容
本申请提供了一种逻辑计算单元、浮点数乘法计算的方法及设备,可以解决相关技术中浪费计算资源的技术问题。所述技术方案如下:
第一方面,本申请提供了一种算数逻辑单元,该算数逻辑单元,用于计算机芯片,算数逻辑单元包括至少一个调整电路和至少一个乘加器。其中,每个调整电路,用于获取输入浮点数,根据所述输入浮点数,调整得到输出浮点数,其中,所述输入浮点数为第一精度的浮点数,所述输出浮点数为第二精度的浮点数,将所述输出浮点数输入至所述乘加器。每个乘加器,用于根据所述输出浮点数获得第一乘积结果,将第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果。
通过调整电路将不同精度的输入浮点数转换为同一精度的输出浮点数,将不同精度的输入浮点数的乘法运算,转换为了同一精度的输出浮点数的乘法运算,这样,在计算设备中不必设计多种独立的不同精度乘法器,有效地节省了计算资源。
上述计算机芯片可以为中央处理器(Central Processing Unit,CPU)芯片、图形处理器(Graphics Processing Unit,GPU)芯片、现场可编程门阵列(Field-ProgrammableGate Array,FPGA)芯片、专用集成电路(Application Specific Intergrated Circuits,ASIC)芯片或其他人工智能(Artificial Intelligence,AI)芯片等,本申请不对计算机芯片的具体类型进行限制。
算数逻辑单元(arithmetic and logic unit,ALU)是指在运算器中执行算数运算(包括加减乘除等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)的实体电路。本申请的算数逻辑单元可以是专门用于进行浮点数运算的算数逻辑单元,可以称为浮点数ALU。
调整电路和乘加器是算数逻辑单元中的实体电路,调整电路与乘加器电性连接。乘加器用于对某一精度(如第一精度)的浮点数进行运算,而调整电路的作用是将非第二精度的浮点数转换为第二精度的浮点数,并输出给乘加器。从而,使得一种精度的乘加器,就可以支持多种精度浮点数的运算。
上述所示的方案,在算数逻辑单元进行运算时,调整电路获取第一精度的输入浮点数,然后,根据输入浮点数调整得到第二精度的输出浮点数。然后,将这输出浮点数输入至乘加器中。乘加器对第二精度浮点数进行乘加运算,得到第一乘积结果,然后,将第一乘积结果匹配为第一精度的浮点数的格式,并输出第一匹配结果。该第一匹配结果即为第一精度的输入浮点数的乘积结果。
需要说明的是,调整电路在将输出浮点数输入至乘加器时,可以是按照乘数组合的形式输入,即将多个输出浮点数划分成多组输出浮点数的组合,并依次输入至乘加器中。该输出浮点数的组合中可以包括分别来自两个输入浮点数的两个输出浮点数,也可以包括分别来自多个输入浮点数的多个输出浮点数,本申请对此不做限定。
例如,算数逻辑单元需要进行输入浮点数C和D的乘法计算,而调整电路将C拆分为c1和c2,将D拆分为d1和d2,则C×D=(c1+c2)×(d1+d2)=c1×d1+c1×d2+c2×d1+c2×d2。可见,将输入浮点数C和D的乘法计算,转换为4组输出浮点数的乘法计算。则调整电路可以确定4组输出浮点数组合,即c1和d1、c1和d2、c2和d1以及c2和d2,并将4组输出浮点数组合依次输入到乘加器中。则乘加器可以对4组输出浮点数的乘积进行累加,得到第一乘积结果。
为了便于说明,第一精度浮点数的精度可以表示为FP(1+E+M),第二精度浮点数的精度可以表示为FP(1+e+m),其中,1表示符号位宽,E表示输入浮点数的阶码位宽,e表示输出浮点数的阶码位宽,M表示输入浮点数的尾数位宽,m表示输出浮点数的尾数位宽。另外,对于输入浮点数和输出浮点数来说,其尾数部分均还包括一位隐藏的整数位。E、M、e、m均为正整数。
下面介绍几种典型的第一精度浮点数和第二精度浮点数:
如果第二精度浮点数的阶码位宽为9bit,例如,FP(1+9+10)和FP(1+9+11)。则第一精度浮点数可以为阶码位宽小于9bit的任何浮点数,例如,FP(1+5+10)、FP(1+8+7)和FP(1+8+23)。
如果第二精度浮点数的阶码位宽为12bit,例如,FP(1+12+10)、FP(1+12+11)和FP(1+12+13)。则第一精度浮点数可以为阶码位宽小于12bit的任何浮点数,例如,FP(1+5+10)、FP(1+8+7)、FP(1+8+23)和FP(1+11+52)。
需要说明的是,第一精度浮点数FP(1+5+10)、FP(1+8+7)、FP(1+8+23)和FP(1+11+52)还可以分别表示为半精度浮点数(half-precision floating-point format,FP16)、bfloat16、单精度浮点数(single-precision floating-point format,FP32)和双精度浮点数(double-precision floating-point format,FP64)。第二精度浮点数FP(1+9+10)、FP(1+9+11)、FP(1+12+10)、FP(1+12+11)和FP(1+12+13)还可以分别表示为FP20、FP21、FP23、FP24和FP26。
在一种可能的实现方式中,所述每个调整电路接收的输入浮点数的精度不同,所述每个乘加器接收的来自每个调整电路的输出浮点数的精度相同。
上述所示的方案,为了使算数逻辑单元可以兼容多种不同精度浮点数的运算,可以设置多个调整电路,每个调整电路接收的输入浮点数的精度不同,输出的输出浮点数的精度相同。也即,多个调整电路接收不同精度的输入浮点数,但可以输出同一精度的输出浮点数。
由于多个调整电路的输出浮点数的精度均相同,所以,可以只用一种精度的乘加器即可以进行后续的运算。该乘加器可以称为第二精度乘加器。
在实际应用中,算数逻辑单元在接收输入浮点数时,还可以接收模式信息,该模式信息可以指示对应的调整电路,则算数逻辑单元可以根据模式信息,将输入浮点数输入至对应的调整电路中。
在一种可能的实现方式中,所述输出浮点数的阶码位宽大于所述输入浮点数的阶码位宽。
上述所示的方案,输入浮点数的阶码位宽小于输出浮点数的阶码位宽,是为了保证拆分或转换出的输出浮点数的阶码实际值不超出输出浮点数的阶码位的表示范围。
应理解,如果输入浮点数的阶码位宽大于输出浮点数的阶码位宽,那么输入浮点数的阶码实际值的表示范围大于输出浮点数的阶码实际值的表示范围。则如果输入浮点数的阶码实际值超过输出浮点数的表示范围,那么,该输入浮点数的阶码实际值在输出浮点数的阶码位中无法表示。
而如果输入浮点数的阶码位宽等于输出浮点数的阶码位宽,那么虽然输入浮点数和输出浮点数的阶码实际值的表示范围相等。但是,当涉及到将输入浮点数拆分为多个输出浮点数的操作时,需要对输出浮点数的阶码实际值进行相应的调整,则这一调整可能会造成输出浮点数的阶码位无法表示阶码实际值。比如,输入浮点数的阶码实际值为表示范围的下限值,则如果对该阶码实际值的调整为减小某一数值,则调整后的阶码实际值超过的输出浮点数的阶码实际值的表示范围。
在另一种可能的实现方式中,输出浮点数的阶码位宽也可以小于输入浮点数的阶码位宽,则此时,可以额外存储一个阶码偏移值,该阶码偏移值和输出浮点数的阶码位存储的数值一起,共同表示该输出浮点数的阶码实际值,以解决输入浮点数的阶码实际值超过输出浮点数的阶码位的表示范围的问题。
在一种可能的实现方式中,所述每个乘加器包括运算子电路和格式处理子电路。所述运算子电路,用于接收所述输出浮点数,根据所述输出浮点数获得所述第一乘积结果。所述格式处理子电路,用于接收模式信号和所述第一乘积结果,根据所述模式信号将所述第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果,所述模式信号用于指示所述格式处理子电路输出精度,所述输出精度为所述输入浮点数的精度。
上述所示的方案,乘加器包括运算子电路和格式处理子电路,运算子电路和格式处理子电路连接。运算子电路用于对输入的输出浮点数组合进行乘加运算得到第一乘积结果,并将第一乘积结果输出给格式处理子电路。格式处理子电路接收第一乘积结果以及用于指示目标精度的模式信息,然后,格式处理子电路将第一乘积结果匹配为目标精度(如第一精度,即输入浮点数的精度)的浮点数格式,并输出第一匹配结果。
当调整电路根据输入浮点数得到一组输出浮点数组合时,运算子电路接收该一组输出浮点数,并对该一组输出浮点数中的浮点数进行乘法运算,得到第一乘积结果。然后,将该第一乘积结果输出给格式处理子电路,格式处理子电路将第一乘积结果匹配为模式信息指示的精度的浮点数格式,并输出第一匹配结果。
当调整电路根据输入浮点数得到多组输出浮点数组合时,该多组输出浮点数组合依次输入到运算子电路中。对于第一个输入的输出浮点数组合,运算子电路对该浮点数组合中的浮点数进行乘法运算,得到第一中间计算结果。对于第二个输入的输出浮点数组合,运算子电路对第二个输入的输出浮点数组合中的浮点数进行乘法运算,并将乘积结果与第一中间计算结果进行加法运算,得到第二中间计算结果。同样的,对于后续每个输入的输出浮点数组合,运算子电路对此次输入的输出浮点数组合中的浮点数进行乘法运算,并将乘积结果与上一中间计算结果进行加法运算,得到此次对应的中间计算结果。最后,当该多组输出浮点数组合均输入到运算子电路后,运算子电路即得到第一乘积结果。然后,将该第一乘积结果输出给格式处理子电路,格式处理子电路将第一乘积结果匹配为模式信息指示的精度的浮点数格式,并输出第一匹配结果。
在一种可能的实现方式中,所述输入浮点数的尾数位宽小于或等于所述输出浮点数的尾数位宽,则所述每个调整电路调整得到的所述输出浮点数的数量与接收到的所述输入浮点数的数量相同,每个输入浮点数与每个输出浮点数一一对应,每个输入浮点数与所述每个输入浮点数对应的输出浮点数表示的数值相同。
上述所示的方案,当输入浮点数的尾数位宽小于或等于输出浮点数的尾数位宽时,输入浮点数的尾数,可以在输出浮点数的尾数部分进行完整的表示。
以输入浮点数的阶码位宽小于输出浮点数的阶码位宽为例,对将第一精度的输入浮点数转换为第二精度的输出浮点数的转换过程进行说明:
符号位:使输出浮点数的符号值与输入浮点数的符号值相等。
阶码位:使输出浮点数的阶码实际值与输入浮点数的阶码实际值相等。可以理解的是,阶码实际值相等,并不意味着阶码存储值相等。由于阶码实际值等于阶码存储值减去固定偏移值,而不同精度的浮点数对应的固定偏移值一般不同(与阶码位宽有关),由于输出浮点数的阶码位宽大于输入浮点数的阶码位宽,所以输出浮点数和输入浮点数的阶码存储值并不相等。
尾数位:使输出浮点数的尾数与输入浮点数的尾数相等,由于输入浮点数的尾数位宽小于或等于输出浮点数的尾数位宽,则还需要在输出浮点数的后m-M位补0,其中,m为输出浮点数的尾数位宽,M为输入浮点数的尾数位宽。
在一种可能的实现方式中,所述输入浮点数的尾数位宽大于所述输出浮点数的尾数位宽,则所述每个调整电路调整得到的所述输出浮点数的数量大于接收到的所述输入浮点数的数量,每个输入浮点数对应多个输出浮点数,每个输入浮点数与所述每个输入浮点数对应的多个输出浮点数之和表示的数值相同。
上述所示的方案,当输入浮点数的尾数位宽大于输出浮点数的尾数位宽时,输入浮点数的尾数不能在一个输出浮点数的尾数部分进行完整的表示。因此,需要将输入浮点数拆分为多个输出浮点数,由多个输出浮点数的尾数部分共同表示一个输入浮点数的尾数。
每个输入浮点数可以拆分为N个输出浮点数,其中,N为(M+1)/(m+1)向上取整的值,M+1表示输入浮点数的尾数位宽加上一位隐藏的整数位,m+1表示输出浮点数的尾数位宽加上一位隐藏的整数位。当然,每个输入浮点数的尾数还可以拆分出大于N个输出浮点数,本申请对此不做限定。
以输入浮点数的阶码位宽小于输出浮点数的阶码位宽为例,对将第一精度的输入浮点数转换为第二精度的输出浮点数的转换过程进行说明:
符号位:使每个输出浮点数的符号值与输入浮点数的符号值相等。
尾数位:将输入浮点数的尾数拆分为多个尾数段,并使每个输出浮点数的尾数位存储一个尾数段。需要注意的是,输出浮点数可以按照多种方式存储来自于输入浮点数的尾数段,下面提供两种可选的方式:
第一种方式:将来自于输入浮点数的尾数段先进行左规操作至最高位为1,然后,将最高位1作为输出浮点数的整数位隐藏,并将尾数段中的其余尾数作为小数部分存储。可以理解的是,如果尾数段的最高位本来就为1,则就不需进行左规操作。如果无法左规操作至最高位为0,则说明该尾数段为0。
第二种方式:将来自于输入浮点数的尾数段的最高位直接作为输出浮点数的整数位,并将尾数段中的其余尾数作为小数部分存储。在这种情况下,拆分出的输出浮点数可能不为规约数。
阶码位:使每个输出浮点数的阶码实际值等于输入浮点数的阶码实际值减去阶码偏移量,其中,阶码偏移量等于输出浮点数所包含的尾数段中的最高位在输入浮点数的尾数位中所处的位次与输入浮点数最高位的位次之差。
在一种可能的实现方式中,所述每个输入浮点数对应的输出浮点数的个数根据所述输入浮点数的尾数位宽以及所述输出浮点数的尾数位宽确定。
所示的方案,可以设每个输入浮点数对应的输出浮点数的个数为N,M+1表示输入浮点数的尾数位宽加上一位隐藏的整数位,m+1表示输出浮点数的尾数位宽加上一位隐藏的整数位。
则N为(M+1)/(m+1)向上取整的值。
因此,当M小于或等于m时,即输入浮点数的尾数位宽小于或等于输出浮点数的尾数位宽时,一个输入浮点数转换为一个输出浮点数。
当M大于m时,即输入浮点数的尾数位宽大于输出浮点数的尾数位宽时,一个输入浮点数拆分为N个输出浮点数,N为大于或等于2的整数。
在一种可能的实现方式中,所述每个调整电路,具体用于:将每个输入浮点数的尾数拆分为多个尾数段,每个尾数段的位宽小于或等于所述输出浮点数的尾数位宽。根据每个输入浮点数的多个尾数段,确定每个输入浮点数对应的多个输出浮点数。
其中,该输出浮点数的尾数位宽是指包含了一位整数隐藏位的尾数位宽。
本申请实施例所示的方案,当输入浮点数的尾数位宽大于输出浮点数的尾数位宽时,输入浮点数的尾数不能在一个输出浮点数的尾数部分进行完整的表示。因此,需要将输入浮点数拆分为多个输出浮点数,由多个输出浮点数的尾数部分共同表示一个输入浮点数的尾数。
每个输入浮点数的尾数可以拆分为N个尾数段,其中,N为(M+1)/(m+1)向上取整的值,M+1表示输入浮点数的尾数位宽加上一位隐藏的整数位,m+1表示输出浮点数的尾数位宽加上一位隐藏的整数位。当然,每个输入浮点数的尾数还可以拆分出大于N个尾数段,本申请对此不做限定。
在将输入浮点数的尾数拆分为N个尾数段时,可以按照任意方式进行拆分,但是要保证拆分出的尾数段小于或等于输出浮点数的尾数位宽。例如,在拆分时,可以是拆分出N个等长度的尾数段,也可以是先尽可能拆分出与输出浮点数的尾数位宽相等的尾数段,本申请对拆分的具体方式不做限定。
对于不同的尾数段,包含该尾数段的输出浮点数的阶码实际值也不同。具体的,输出浮点数的阶码实际值等于输入浮点数的阶码实际值减去阶码偏移量,其中,阶码偏移量等于输出浮点数所包含的尾数段中的最高位在输入浮点数的尾数位中所处的位次与输入浮点数最高位的位次之差。
另外,对于拆分出的每个输出浮点数,其符号值与输入浮点数的符号值相等。
在一种可能的实现方式中,所述算数逻辑单元包括至少两个调整电路,所述至少两个调整电路中的第一调整电路用于获取第一精度的输入浮点数,第二调整电路用于获取第三精度的输入浮点数,所述第一调整电路将所述第一精度的输入浮点数调整为第二精度的输出浮点数,所述第二调整电路将所述第三精度的输入浮点数调整为第二精度的输出浮点数。所述至少一个乘加器,根据接收到的所述第二精度的输出浮点数,获得第二乘积结果,根据所述第二精度的输出浮点数所对应的调整电路的精度信息,将所述第二乘积结果匹配为对应精度的浮点数的格式,输出第二匹配结果。
其中,第三精度与第一精度不同。
本申请实施例所示的方案,在实际应用中,算数逻辑单元可能会涉及到不同精度浮点数之间的乘法运算,例如,第一精度的浮点数和第三精度的浮点数的乘法运算。则在处理时,第一调整电路可以将获取到的第一精度的输入浮点数调整为第二精度的输出浮点数,而第二调整电路可以将获取到的第三精度的输入浮点数调整为第二精度的输出浮点数。然后,第一调整电路和第二调整电路可以输出第二精度的输出浮点数至乘加器中,乘加器进行乘加运算以及格式匹配的处理,最终,得到第二匹配结果。
该第二匹配结果的精度可以是第一精度,也可以是第三精度,还可以是乘加器输出两个精度的第二匹配结果,分别为第一精度和第三精度。相应的,在将第二乘积结果匹配为第二匹配结果时,可以是根据第一调整电路的精度信息(即第一精度)将第二乘积结果匹配为第一精度的匹配结果,也可以是根据第二调整电路的精度信息(即第三精度)将第二乘积结果匹配为第三精度的匹配结果,还可以是根据第一调整电路和第二调整电路的精度信息将第二乘积结果分别匹配为第一精度的匹配结果和第三精度的匹配结果。
在一种可能的实现方式中,所述输入浮点数的格式满足电气与电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)二进制浮点数算术标准,所述输出浮点数的格式不满足所述IEEE二进制浮点数算术标准。
本申请实施例所示的方案,输入浮点数的格式可以满足IEEE二进制浮点数算数标准。
而由于输出浮点数仅仅是算数逻辑单元在计算的中间过程产生的数值,其不需要在存储器中进行存储,因此输出精度浮点数的格式可以不满足IEEE二进制浮点数算数标准。
输出精度浮点数可以根据应用需求进行阶码位宽和尾数位宽的自定义,例如,可以定义输出浮点数的阶码位宽较大,而尾数位宽相对较小。由于在浮点数的运算中,浮点数的阶码间只存在比较、加减等较为简单的逻辑,因此增加阶码位宽而引起增加的芯片面积较少,而浮点数的尾数间存在乘法运算,所需芯片面积与尾数位宽的平方成正比,因此尾数位宽较小,一定程度上可以减少芯片面积。
第二方面,本申请提供了一种浮点数乘法计算的方法,用于计算机芯片中的算数逻辑单元,该方法包括:
获取输入浮点数,根据所述输入浮点数,调整得到输出浮点数,其中,所述输入浮点数为第一精度的浮点数,所述输出浮点数为第二精度的浮点数;
根据所述输出浮点数获得第一乘积结果,将所述第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果。
在一种可能的实现方式中,所述输出浮点数的阶码位宽大于所述输入浮点数的阶码位宽。
在一种可能的实现方式中,所述根据所述输出浮点数获得所述第一乘积结果,将所述第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果,包括:
根据所述输出浮点数获得所述第一乘积结果;
接收模式信号,根据所述模式信号将所述第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果,所述模式信号用于指示所述输入浮点数的精度。
在一种可能的实现方式中,所述输入浮点数的尾数位宽小于或等于所述输出浮点数的尾数位宽,则根据所述输入浮点数,调整得到与所述输入浮点数数量相同的输出浮点数,每个输入浮点数与所述每个输入浮点数对应的输出浮点数表示的数值相同。
在一种可能的实现方式中,所述输入浮点数的尾数位宽大于所述输出浮点数的尾数位宽,则根据所述输入浮点数,调整得到的输出浮点数的数量大于所述输入浮点数的数量,每个输入浮点数对应多个输出浮点数,每个输入浮点数与所述每个输入浮点数对应的多个输出浮点数之和表示的数值相同。
在一种可能的实现方式中,所述每个输入浮点数对应的输出浮点数的个数根据所述输入浮点数的尾数位宽以及所述输出浮点数的尾数位宽确定。
在一种可能的实现方式中,所述调整步骤,包括:
将每个输入浮点数的尾数拆分为多个尾数段,每个尾数段的位宽小于或等于所述输出浮点数的尾数位宽;
根据每个输入浮点数的多个尾数段,确定每个输入浮点数对应的多个输出浮点数。
在一种可能的实现方式中,所述输入浮点数的格式满足电气与电子工程师协会IEEE二进制浮点数算术标准,所述输出浮点数的格式不满足所述IEEE二进制浮点数算术标准。
第三方面,提供了一种浮点数乘法计算的装置,该装置包括:
调整模块,用于获取输入浮点数,根据所述输入浮点数,调整得到输出浮点数,其中,所述输入浮点数为第一精度的浮点数,所述输出浮点数为第二精度的浮点数;
匹配模块,用于根据所述输出浮点数获得第一乘积结果,将所述第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果。
在一种可能的实现方式中,所述输出浮点数的阶码位宽大于所述输入浮点数的阶码位宽。
在一种可能的实现方式中,所述匹配模块,用于:
根据所述输出浮点数获得所述第一乘积结果;
接收模式信号,根据所述模式信号将所述第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果,所述模式信号用于指示所述输入浮点数的精度。
在一种可能的实现方式中,所述输入浮点数的尾数位宽小于或等于所述输出浮点数的尾数位宽,则根据所述输入浮点数,调整得到与所述输入浮点数数量相同的输出浮点数,每个输入浮点数与每个输出浮点数一一对应,每个输入浮点数与所述每个输入浮点数对应的输出浮点数表示的数值相同。
在一种可能的实现方式中,所述输入浮点数的尾数位宽大于所述输出浮点数的尾数位宽,则根据所述输入浮点数,调整得到的输出浮点数的数量大于所述输入浮点数的数量,每个输入浮点数对应多个输出浮点数,每个输入浮点数与所述每个输入浮点数对应的多个输出浮点数之和表示的数值相同。
在一种可能的实现方式中,所述每个输入浮点数对应的输出浮点数的个数根据所述输入浮点数的尾数位宽以及所述输出浮点数的尾数位宽确定。
在一种可能的实现方式中,所述调整模块,具体用于:
将每个输入浮点数的尾数拆分为多个尾数段,每个尾数段的位宽小于或等于所述输出浮点数的尾数位宽;
根据每个输入浮点数的多个尾数段,确定每个输入浮点数对应的多个输出浮点数。
在一种可能的实现方式中,所述输入浮点数的格式满足电气与电子工程师协会IEEE二进制浮点数算术标准,所述输出浮点数的格式不满足所述IEEE二进制浮点数算术标准。
第四方面,提供了一种芯片,该芯片包括至少一个如第一方面任一项所述的算数逻辑单元。
第五方面,提供了一种计算设备,该计算设备包括主板以及如第四方面所述的芯片;
所述芯片设置在所述主板上。
第六方面,提供了一种计算机可读存储介质,包括指令,当所述计算机可读存储介质中的指令由计算设备执行时,所述计算设备执行如第二方面所述的方法。
第七方面,提供了一种包含指令的计算机程序产品,当所述计算机程序产品在计算设备上运行时,所述计算设备执行如第二方面所述的方法。
第八方面,提供了一种运算器,该运算器包括如上述第一方面任一项所述的算数逻辑单元。
第九方面,提供了一种计算设备,包括存储器和处理器;
所述存储器用于存储计算机程序;
当所述处理器运行所述存储器中的计算机程序时,所述处理器执行所述第二方面任一项所述的方法。
第十方面,提供了一种计算设备,包括处理器和算数逻辑单元;
所述处理器用于获取输入浮点数,根据所述输入浮点数,调整得到输出浮点数,其中,所述输入浮点数为第一精度的浮点数,所述输出浮点数为第二精度的浮点数,将所述输出浮点数输入至所述算数逻辑单元;
所述算数逻辑单元,用于根据所述输出浮点数获得第一乘积结果,将所述第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果。
本申请实施例所示的方案,可以由处理器对输入浮点数进行精度调整,将第一精度的输入浮点数调整为第二精度的输出浮点数,并输出至算数逻辑单元。
算数逻辑单元可以根据输出浮点数获取第一乘积结果,并将第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果。算数逻辑单元的具体功能,可以参照第一方面所述的乘加器部分,在此不再赘述。
在一种可能的实现方式中,所述输出浮点数的阶码位宽大于所述输入浮点数的阶码位宽。
在一种可能的实现方式中,所述算数逻辑单元包括至少一个乘加器,每个乘加器对应的精度均为所述第二精度。
在一种可能的实现方式中,所述输入浮点数的格式满足电气与电子工程师协会IEEE二进制浮点数算术标准,所述输出浮点数的格式不满足所述IEEE二进制浮点数算术标准。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例所示的方案,通过调整电路将不同精度的输入浮点数调整为同一精度的输出浮点数,从而,将不同精度的输入浮点数的乘法运算,转换为了同一精度的输出浮点数的乘法运算,这样,在计算设备中不必额外设计多种独立的不同精度乘法器,有效地节省了计算资源。
附图说明
图1是本申请实施例提供的一种浮点数组成示意图;
图2是本申请实施例提供的一种芯片的逻辑架构图;
图3是本申请实施例提供的一种算数逻辑单元的逻辑架构图;
图4是本申请实施例提供的一种浮点数拆分转换子电路的结构;
图5是本申请实施例提供的一种调整电路的结构示意图;
图6是本申请实施例提供的一种乘加器的结构示意图;
图7是本申请实施例提供的一种浮点数拆分的示意图;
图8是本申请实施例提供的一种浮点数拆分的示意图;
图9是本申请实施例提供的一种浮点数拆分的示意图;
图10是本申请实施例提供的一种浮点数拆分的示意图;
图11是本申请实施例提供的一种浮点数乘法计算的方法的流程图;
图12是本申请实施例提供的一种浮点数乘法计算的装置的结构示意图;
图13是本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
为了便于对本申请记载的技术方案进行叙述,下面先对浮点数进行介绍:
浮点数是一种数字表示,在计算机中用以近似表示任意某个实数。浮点数可以采用科学计数法来表示,即用一个尾数、一个基数、一个阶码以及一个表示正负的符号来表达实数。比如,19.625用十进制科学计数法可以表达为1.9625×101,其中,1.9625为尾数,10为基数,1为阶码。再例如,19.625转换为二进制数为10011.101,则将其用二进制科学计数法可以表达为1.0011101×24其中,1.0011101为尾数,2为基数,4为阶码。浮点数利用阶码达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。
在计算机中一般按照一定的标准(如IEEE754标准)存储二进制浮点数,其中,二进制浮点数的最高有效位被指定为符号位;次高有效的E个有效位被指定为阶码位,用于存储浮点数的阶码;最后剩下的M个低有效位被指定为尾数位,用于存储浮点数的尾数。另外,二进制浮点数的尾数部分还包括一位隐藏的整数位,计算机中存储的二进制浮点数的基数一般默认为2。例如,上述1.0011101×24在计算机中存储的形式为,符号位为0,表示符号为正;尾数位为0011101,其中,整数位的1被隐藏;阶码位的阶码实际值为4,表示小数点浮动4位。
一个浮点数可以这样表示:vaule=(-1)s×2E×1.M或vaule=(-1)s×2E×0.M
其中,Value表示浮点数的实际值;(-1)s表示浮点数的符号,正或者负,当s=0时符号为正,当s=1时符号为负;E表示浮点数的阶码实际值,用于表征小数点浮动的位数;2表示基数;1.M和0.M表示浮点数的尾数,也可以称为有效数,其中,1或0为隐藏的整数位,当浮点数为规约数时,尾数为1.M,当浮点数为非规约数时,尾数为0.M。其中,非规约数是指阶码位全为0,且尾数位不全为0的浮点数,规约数是指阶码位不全为0的浮点数。因此,可以通过浮点数的阶码位和尾数位来判断浮点数隐藏的整数位,例如,如果阶码位全为0,且尾数位不全为0,则说明该浮点数为非规约数,可以判断隐藏的整数位为0。
如图1所示,以单精度浮点数为例,来对浮点数进行更加详细的说明。
单精度浮点数在计算机的存储占用4个字节(32bits),利用“浮点”(浮动小数点)的方法,表示一个范围很大的数值。
存储标准规定的单精度浮点数的32bits主要分为:符号位、阶码位和尾数位,其中,
符号位:存储位宽为1位,0代表正,1代表负。
阶码位:存储位宽为8位,阶码位也可以称为指数位。阶码存储值为0~255,标准规定的固定偏移值的等于2n-1-1,其中,n表示阶码位的存储位宽,所以单精度浮点数的固定偏移值为127,因此,阶码实际值的范围为:0-127=-127到255-127=128。通过采用阶码存储值减去固定的偏移值的方法表示浮点数的阶码实际值,例如:如果阶码存储值是100,则阶码实际值为100-127=-27。上述阶码存储的方法的好处是可以省略阶码的符号表示,这使得两个浮点数的阶码的大小的比较更为容易,因为非负数的比较完全可以从最高阶码数位遍历比较。
尾数位:存储位宽为23位,包括小数点右侧的23个小数位,即尾数的小数部分。尾数位还包括一个隐藏的整数位,即尾数的整数部分。因此,虽然只有23个小数位的尾数被存储,但是尾数位的总精度是24位。另外,尾数也可以称为有效数。
为了便于更好的理解单精度浮点数,下面以将十进制的0.15625存储为单精度浮点数为例,来对浮点数进行说明:
符号位:0.15625为正数,则符号位为0。
尾数位:将0.15625转化为二进制数为0.00101。将0.00101的小数点右移三位,使其整数位为1,则为1.01,由于单精度浮点数存储的尾数位为23位+1位(隐藏的整数位),即尾数1.01被表示为1.01000000000000000000000,由于整数位隐藏,则尾数的存储实际为01000000000000000000000。
阶码位:由于小数点右移了三位,所以,阶码实际值应为-3。然后,将阶码实际值加上固定偏移值,得到阶码存储值124,124转化为二进制数为01111100。
所以,最后得到的存储在计算机的单精度浮点数被表示为:00111110001000000000000000000000。
相应的,将单精度浮点数0 01111100 01000000000000000000000转换为十进制数的过程可以如下所述:
符号位为0则代表该数为正数,
尾数位为01000000000000000000000,同时阶码位不全为0,说明该单精度浮点数为规约数,尾数位的隐藏位为1,则尾数为1.01。
阶码存储值为01111100,转换成十进制数为124。将阶码存储值124减去固定偏移值27,得到阶码实际值-3。阶码实际值为-3,则说明小数点应当左移三位,则1.01的小数点左移三位为0.00101。
最后,将0.00101转换为十进制数即为0.15625。
需要说明的是,除了单精度浮点数之外,还存在双精度浮点数、四精度浮点数、半精度浮点数和bfloat16等精度的浮点数。
半精度浮点数的符号位的存储位宽为1位,阶码位的存储位宽为5位,尾数位的存储位宽为10位,另外,还有隐藏的1位整数。
双精度浮点数的符号位的存储位宽为1位,阶码位的存储位宽为11位,尾数位的存储位宽为52位,另外,还有隐藏的1位整数。
四精度浮点数的符号位的存储位宽为1位,阶码位的存储位宽为15位,尾数位的存储位宽为112为,另外,还有隐藏的1位整数
bfloat16的符号位的存储位宽为1位,阶码位的存储位宽为8位,尾数为的存储位宽为10位,另外,还有隐藏的1位整数。
这些精度的浮点数与单精度浮点数类似,在此不再赘述。
还需要说明的是,在上述多种类型的浮点数中均存在一些特殊的浮点数,这些浮点数在计算机中的存储形式如下所述:
正无穷:阶码位全为1,且尾数位全为0,符号位为0,可以表示为+INF。
负无穷:阶码位全为1,且尾数位全为0,符号位为1,可以表示为-INF。
非法数:阶码位全为1,且尾数位不全为0,可以表示为NaN。
本申请实施例提供了一种浮点数乘法计算的方法,该方法可以应用于芯片,该芯片包括控制器和运算器,运算器可以接收控制器的指令,执行对浮点数的乘法计算。其中,该芯片可以为中央处理器(Central Processing Unit,CPU)芯片、图形处理器(GraphicsProcessing Unit,GPU)芯片、现场可编程门阵列(Field-Programmable Gate Array,FPGA)芯片、专用集成电路(Application Specific Intergrated Circuits,ASIC)芯片或其他人工智能(Artificial Intelligence,AI)芯片等。
如图1所示,对芯片的逻辑架构进行说明。芯片包括控制器、运算器和存储器(Cache),控制器、运算器和存储器之间两两连接。控制器用于向存储器和运算器发送指令,以对存储器和运算器进行控制。运算器用于接收控制器发送的指令,并根据指令执行相应的处理,例如,执行本申请提供的浮点数乘法计算的方法。存储器也可以称为缓存,存储器中可以存储有数据,例如,可以存储有第一精度浮点数,可以将存储的数据发送给运算器,也可以接收运算器运算得到的数据。运算器中包括多个算数逻辑单元(arithmetic andlogic unit,ALU),该多个ALU可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。在该多个ALU中可以包括专门用于浮点数运算的浮点数ALU,浮点数ALU可以执行本申请提供的浮点数乘法计算的方法。
芯片还可以与内存(DRMA)连接,用于与内存交互数据和指令。如图1所示,内存与控制器和存储器连接,内存和控制器之间可以互相发送指令,内存和存储器之间可以互相发送数据,例如:控制器从内存读取指令,进一步地发送给运算器,由运算器执行指令,内存发送数据至芯片的存储器,存储器进一步地发送数据至运算器,以供运算器执行运算。
需要说明的是,图1所示的芯片的逻辑架构可以为任意一种芯片的逻辑架构,例如,CPU芯片或GPU芯片等。不同类型的芯片的主要区别在于控制器、存储器和运算器的比例不同。
相关技术中,为了实现计算机对不同精度浮点数的乘法运算需求,通常会在芯片中对应不同的精度设计多个独立的乘法器。例如,在需要芯片同时支持半精度、单精度和双精度的乘法运算时,则可以在芯片中设计独立的至少三个乘法器,使其分别满足半精度、单精度和双精度浮点数的乘法运算需求。在芯片中独立设计多个分别支持不同精度的乘法器,当***只使用其中一种精度的乘法器计算时,其余精度的乘法器处于闲置状态,十分浪费计算资源。
本申请实施例提供了一种算数逻辑单元,如图3所示,可以解决相关技术中存在的技术问题。该算数逻辑单元3中包括调整电路31和乘加器32。其中,调整电路31的功能是将多种类型的输入浮点数转换或拆分成同一精度的输出浮点数。乘加器32的功能是将调整电路31拆分或转换成的输出浮点数进行乘加运算,得到计算结果。从而,本申请实施例提供的运算器,可以将多种类型的输入浮点数的乘法运算,转换为同一精度的输出浮点数乘加运算。这样,不必在芯片中独立设计多个分别支持支持不同精度的乘法器,节约了计算资源。
需要说明的是,输入浮点数是指输入至调整电路31的浮点数,输出浮点数是指调整电路31输出的浮点数。输入浮点数的精度可以为第一精度(或第三精度),输出浮点数的精度可以为第二精度,因此,输入浮点数也可以称为第一精度浮点数(或第三精度浮点数),输出浮点数也可以称为第二精度浮点数。
算数逻辑单元3可以包括至少两个调整电路以及至少一个乘加器。每个调整电路所接收的输入浮点数的精度不同,每个调整电路的输出浮点数的精度相同。也即,至少两个调整电路接收不同精度的输入浮点数,但可以输出同一精度的输出浮点数。由于至少两个调整电路的输出浮点数的精度均相同,所以,可以只用一种精度的乘加器即可以进行后续的运算。在实际应用中,算数逻辑单元在接收输入浮点数时,还可以接收模式信息,该模式信息可以指示对应的调整电路,则算数逻辑单元可以根据模式信息,将输入浮点数输入至对应的调整电路中。
应理解,本申请中实施例提供的算数逻辑单元3的功能既可以通过软件实现,也可以通过硬件实现,还可以一部分通过软件实现,另一部分通过硬件实现(例如:调整电路31的功能通过执行软件代码实现,乘加器32的功能通过硬件电路实现)。需要说明的是,当调整电路31的功能由硬件实现的时候,调整电路31具体可以包含各种电路信号线、元器件等,电路可以是模拟电路也可以是数字电路,还可以是模拟电路和数字电路两者的混合电路;当调整电路31的功能由软件实现时,该模块的功能由CPU执行软件指令实现。
下面结合图4和图5所示,对调整电路31的功能进行更加详细的介绍:
图5所示,调整电路31包括浮点数拆分转换子电路311和乘数组合子电路312。
下面结合图4介绍浮点数拆分转换子电路311的内部结构和功能:
第一精度浮点数输入到浮点数拆分转换子电路311中,由浮点数拆分转换子电路311中的第一浮点数分解逻辑3111分解为符号、阶码和尾数。然后,由阶码调整逻辑3112对阶码进行调整,由尾数拆分或扩展逻辑3113对尾数进行拆分或扩展。最后,由第二精度浮点数组合逻辑3114将符号、调整后的阶码和拆分或扩展后的尾数进行组合,组合成第二精度浮点数。需要说明的是,在浮点数拆分转换子电路311中,如果采用的乘法器或乘加器支持符号、阶码和尾数的分散输入,则也可以舍弃第二精度浮点数组合逻辑3114,即前述第二精度浮点数组合逻辑3114为可选的。另外,浮点数拆分转换子电路311还可以接收模式信号,模式信号用于指示将何种第一精度浮点数转换为第二精度浮点数。例如,模式1可以是将FP16转换为一个FP26,模式2可以是将FP32拆分为两个FP26。关于浮点数拆分转换子电路311进行浮点数拆分和转换的原理和方法在后文中详细介绍。
如图5所示,将由浮点数拆分转换子电路311组合成的第二精度浮点数输入到乘数组合子电路312中,进行乘数组合,输出一个或多个第二精度浮点数组合。需要说明的是,图5所示的调整电路31包括两个浮点数拆分转换子电路311仅仅是示例性的,在实际应用中,调整电路31可以包括任意数量的浮点数拆分转换子电路311,例如,调整电路31可以包括一个浮点数拆分转换子电路311。调整电路31包括的浮点数拆分转换子电路311的数量越多,其进行的拆分或转换的速度也就越快。
然后,将第二精度浮点数组合输入到乘加器32中,最终,可以得到多个第一精度浮点数的乘法计算结果。
乘加器32可以如图6所示,乘加器32包括运算子电路321和规格处理子电路322。下面,以向乘加器32输入乘数a、b和累加数c(即a×b+c的运算)为例来对乘加器32的功能进行说明:
将乘数a、b和累加数c输入到运算子电路321中(a、b为前述调整电路31输出的一组第二精度浮点数组合),则运算子电路321将乘数a、b和c进行分解,得到a、b、c的符号、阶码和尾数。然后,计算a和b的乘法计算中间结果,如果a和b的符号相同,则符号的中间结果为0;对a和b的阶码进行相加,a和b的尾数进行相乘,得到阶码和尾数的中间结果。再然后,将乘法计算中间结果与c相加,得到a×b+c的中间计算结果,相加时,先进行对阶,即调整乘法计算中间结果的阶码与c的阶码相等,然后,进行尾数的相加或相减,得到a×b+c的第一乘积结果。
将a×b+c的第一乘积结果,输入到规格处理子电路322中,进行规格化处理,同时,规格处理子电路322还会接收模式信号,以确定规格化的目标精度。然后,规格处理子电路322将接收到的符号、阶码和尾数进行调整和组合,如尾数的舍入和阶码存储值的调整等,将第一乘积结果匹配为第一精度的浮点数格式,输出第一匹配结果。
需要补充说明的是,如果乘加器32支持浮点数的分散输入,则可以直接输入a、b、c的符号、阶码和尾数,运算子电路321就不必进行分解处理。c可以是外部输入的累加数,也可以是上一轮第二精度浮点数的乘加值,该乘加值可以是运算子电路输出的中间计算结果,本申请对此不做限定。为了减小精度损失,运算子电路321在进行对阶时,可以将浮点数的尾数进行扩展。运算子电路321输出的中间计算结果的阶码位宽大于或等于第二精度浮点数的阶码位宽,输出的中间计算结果的尾数位宽大于或等于输入的第一精度浮点数的尾数位宽。
下面,对浮点数拆分转换子电路311对第一精度浮点数拆分或转换为第二精度浮点数的原理进行详细的说明:
首先,为了便于叙述,先对第一精度浮点数和第二精度浮点数进行说明介绍:
第一精度浮点数的阶码位宽(即阶码的存储位宽)小于第二精度浮点数的阶码位宽。
第一精度浮点数的阶码位宽小于第二精度浮点数的阶码位宽,是为了保证拆分或转换出的第二精度浮点数的阶码实际值不超出第二精度浮点数的阶码位的表示范围。
应理解,如果第一精度浮点数的阶码位宽大于第二精度浮点数的阶码位宽,那么第一精度浮点数的阶码实际值的表示范围大于第二精度浮点数的表示范围。则如果第一精度浮点数的阶码实际值超过第二精度浮点数的表示范围,那么,该第一精度浮点数的阶码实际值在第二精度浮点数的阶码位中无法表示。
而如果第一精度浮点数的阶码位宽等于第二精度浮点数的阶码位宽,那么虽然第一精度浮点数和第二精度浮点数的阶码实际值的表示范围相等。但是,当涉及到将第一精度浮点数拆分为多个第二精度浮点数的操作时,需要对第二精度浮点数的阶码实际值进行相应的调整,则这一调整可能会造成第二精度浮点数的阶码位无法表示阶码实际值。比如,第一精度浮点数的阶码实际值为表示范围的下限值,则如果对该阶码实际值的调整为减小某一数值,则调整后的阶码实际值超过的第二精度浮点数的阶码实际值的表示范围。
为了便于说明,第一精度浮点数的精度可以表示为FP(1+E+M),第二精度浮点数的精度可以表示为FP(1+e+m),其中,1表示符号位宽,E表示第一精度浮点数的阶码位宽,e表示第二精度浮点数的阶码位宽,M表示第一精度浮点数的尾数位宽,m表示第二精度浮点数的尾数位宽,E小于e。另外,对于第一精度浮点数和第二精度浮点数来说,其尾数部分均还包括一位隐藏的整数位。E、M、e、m均为正整数。
下面介绍几种典型的第一精度浮点数和第二精度浮点数:
如果第二精度浮点数的阶码位宽为9bit,例如,FP(1+9+10)和FP(1+9+11)。则第一精度浮点数可以为阶码位宽小于9bit的任何浮点数,例如,FP(1+5+10)、FP(1+8+7)和FP(1+8+23)。
如果第二精度浮点数的阶码位宽为12bit,例如,FP(1+12+10)、FP(1+12+11)和FP(1+12+13)。则第一精度浮点数可以为阶码位宽小于12bit的任何浮点数,例如,FP(1+5+10)、FP(1+8+7)、FP(1+8+23)和FP(1+11+52)。
需要说明的是,第一精度浮点数FP(1+5+10)、FP(1+8+7)、FP(1+8+23)和FP(1+11+52)还可以分别表示为半精度浮点数(half-precision floating-point format,FP16)、bfloat16、单精度浮点数(single-precision floating-point format,FP32)和双精度浮点数(double-precision floating-point format,FP64)。第二精度浮点数FP(1+9+10)、FP(1+9+11)、FP(1+12+10)、FP(1+12+11)和FP(1+12+13)还可以分别表示为FP20、FP21、FP23、FP24和FP26。
需要补充的是,本申请中转换或者拆分得到的第二精度浮点数可以不是目前业界通用标准的浮点数格式。由于第二精度浮点数为运算器在计算的中间过程产生的数值,其不需要在存储器中进行存储,因此第二精度浮点数可以根据应用需求进行阶码位宽和尾数位宽的自定义,第二精度浮点数可以为任意精度的浮点数。第二精度浮点数的特点是阶码位宽较大,而尾数位宽相对较小。由于,在浮点数的运算中,浮点数的阶码间只存在比较、加减等较为简单的逻辑,因此增加阶码位宽而引起增加的芯片面积较少。而浮点数的尾数间存在乘法运算,所需芯片面积与尾数位宽的平方成正比,因此尾数位宽较小,一定程度上可以减少芯片面积。
在本申请的方案中,对于某一个第二精度浮点数来说,其可以支持阶码位宽小于其阶码位宽的任一第一精度浮点数的拆分或转换,本申请不对第二精度浮点数的具体精度、阶码位宽、尾数位宽作具体的限定,可以依据实际应用场景进行设计。
在实际应用中,如果第二精度浮点数的阶码位宽较大,则其可以支持较高精度的第一精度浮点数的拆分和转换,能够满足更多的场景,但是,制作乘加器或乘法器的成本也就较高,而且,为了避免拆分出的第二精度浮点数的数量过多,第二精度浮点数的尾数位宽也应较大。如果第二精度浮点数的阶码位宽较小,则制作乘加器或乘法器的成本会较低,但是,其只能支持较低精度浮点数的拆分和转换,可能无法满足对精度要求较高的场景。另外,如果第二精度浮点数的尾数位宽较大,则一个第一精度浮点数拆分出的第二精度浮点数的数量可能会较少,需要进行的乘法运算的数量也就较少,但是,制作乘加器和乘法器的成本会较高。如果第二精度浮点数的尾数位宽较小,则制作乘加器和乘法器的成本较低,但是,一个第一精度浮点数拆分出的第二精度浮点数的数量会较多,需要进行乘法运算的数量也就较多。所以,在实际应用中,应当根据芯片的具体应用场景并结合成本预算等,来定义合适的第二精度浮点数。
当本申请实施例提供的方法应用在AI芯片上时,由于AI芯片对浮点数精度的要求较多为FP16或FP32,一般不会涉及FP64精度的浮点数的计算,所以,为了节省成本,定义的第二精度浮点数的阶码位宽可以小一些,例如,阶码位宽可以为9bit,第二精度浮点数可以为FP20和FP21等。则可以实现将FP16的浮点数转换为FP20或FP21的浮点数;或者,可以实现将FP32的浮点数拆解为多个FP20或FP21的浮点数。
而当本申请实施例提供的方法应用在对浮点数的精度要求较高的高性能计算机群(High Performance Computing,HPC)中时,第二精度浮点数的阶码位宽应当大一些,例如,阶码位宽可以为12bit,第二精度浮点数可以为FP23、FP24和FP26等。则可以实现将FP64的浮点数拆解为多个FP23、FP24或FP26的浮点数。
下面以第一精度浮点数为FP(1+E+M),第二精度浮点数为FP(1+e+m)来对第一精度浮点数的转换和拆分原则进行说明:
值得注意的是,本申请实施例中,根据第一精度浮点数和第二精度浮点数的尾数位宽之间的大小,将第一精度浮点数转换为第二精度浮点数存在两种不同情况:
1、如果M小于或等于m,即:第一精度浮点数的尾数位宽小于或等于第二精度浮点数的尾数位宽,则对每个第一精度浮点数进行格式转换,得到多个第二精度浮点数,第一精度浮点数与第二精度浮点数成一一对应关系。
在转换时,使第二精度浮点数的符号值与第一精度浮点数的符号值相等。
阶码调整逻辑3112:使第二精度浮点数的阶码实际值与第一精度浮点数的阶码实际值相等。可以理解的是,阶码实际值相等,并不意味着阶码存储值相等。由于阶码实际值等于阶码存储值减去固定偏移值,而不同精度的浮点数对应的固定偏移值一般不同(与阶码位宽有关),由于第二精度浮点数的阶码位宽大于第一精度浮点数的阶码位宽,所以第一精度浮点数和第二精度浮点数的阶码存储值并不相等。
尾数拆分或扩展逻辑3113:使第二精度浮点数的尾数与第一精度浮点数的尾数相等,由于第一精度浮点数的尾数位宽小于或等于第二精度浮点数的尾数位宽,则还需要在第二精度浮点数的后m-M位补0。
最后,由第二精度浮点数组合逻辑3114将调整后的尾数、阶码和符号组合为第二精度浮点数。
下面,以两个具体的实例,来对第一精度浮点数的转换过程进行说明:
(1)将一个FP16转换成一个FP26。
如图7所示,标准格式的FP16包括1bit符号,5bit阶码和10bit尾数,另外,还有隐藏的1bit整数,对于一个标准格式的FP16,其尾数共有11bit。FP26包括1bit符号,12bit阶码和13bit尾数,另外,也包括隐藏的1bit整数,对于一个FP26,其尾数共有14bit。由于FP16的尾数位宽小于FP26的尾数位宽,所以,一个FP16可以直接转换成一个FP26。
在转换时,使FP26的符号值与FP16的符号值相等,使FP26的阶码实际值与FP16的阶码实际值相等,则FP26的阶码存储值等于阶码实际值加2047(212-1-1),将FP16的尾数作为FP26的尾数,同时,在FP26的尾数的后3bit补0。
另外,如果运算器中的乘法器或乘加器只支持规约数的运算,则如果FP16不为规约数,则可以先确定FP16的阶码实际值,然后,对FP16的尾数进行左规操作,直至整数位为1。使FP26包含左规后FP16的尾数,并使FP26的阶码实际值等于FP16的阶码实际值减去左规的位数。
例如,将10011.101的FP16格式的浮点数转换为FP26格式的浮点数。
10011.101的FP16格式的浮点数为:0 10011 0011101000,其中,符号位为0,阶码存储值为19,阶码实际值为19-15=4(固定偏移值为25-1-1=15),尾数为0011101000,隐藏的整数位为1。
将0 10011 0011101000转换为FP26格式的浮点数:符号位不变,均为0;阶码实际值相等,均为4,则FP26的阶码存储值为4+2047=2051,转换为12位二进制数为100000000011;尾数进行补零操作为0011101000000。
则最后转换得到的FP26为0 100000000011 0011101000000。
(2)将一个bfloat16转换成FP26。
如图8所示,标准格式的bfloat16包括1bit符号,8bit阶码和7bit尾数,另外,还有隐藏的1bit整数,对于一个标准格式的bfloat16,其尾数共有8bit。由于bfloat16的尾数位宽小于FP26的尾数位宽,所以,一个bfloat16可以直接转换成一个FP26。
在转换时,使FP26的符号值与bfloat16的符号值相等,使FP26的阶码实际值与bfloat16的阶码实际值相等,则FP26的阶码存储值等于阶码实际值加2047,将bfloat16的尾数作为FP26的尾数,同时,在FP26的尾数的后6bit补0。
另外,如果运算器中的乘法器或乘加器只支持规约数的运算,则如果bfloat16不为规约数,可以先确定bfloat16的阶码实际值,然后,对bfloat16的尾数进行左规操作,直至整数位为1。使FP26包含bfloat16左规后的尾数,并使FP26的阶码实际值等于bfloat16的阶码实际值减去左规的位数。
例如,将10011.101的bfloat16格式转换为FP26格式。
10011.101的bfloat16格式的浮点数为:0 10000011 0011101,其中,符号位为0,阶码存储值为131,阶码实际值为131-127=4(固定偏移值为28-1-1=127),尾数为0011101,隐藏的整数位为1。
将0 10000011 0011101转换为FP26格式的浮点数:符号位不变,均为0;阶码实际值相等,均为4,则FP26的阶码存储值为4+2047=2051,转换为12位二进制数为100000000011;尾数进行补零操作为0011101000000。
则最后转换得到的FP26为0 100000000011 0011101000000。
2、如果M大于m,即:第一精度浮点数的尾数位宽大于第二精度浮点数的尾数位宽,则对每个第一精度浮点数进行拆分,得到每个第一精度浮点数对应的N个第二精度浮点数,其中,N为(M+1)/(m+1)向上取整的值。
在拆分时,使每个第二精度浮点数的符号值与第一精度浮点数的符号值相等。
尾数拆分或扩展逻辑3112:将第一精度浮点数的尾数拆分为多个尾数段,并使每个第二精度浮点数的尾数位存储一个尾数段。需要注意的是,第二精度浮点数可以按照多种方式存储来自于第一精度浮点数的尾数段,下面提供两种可选的方式:
第一种方式:将来自于第一精度浮点数的尾数段先进行左规操作至最高位为1,然后,将最高位1作为第二精度浮点数的整数位隐藏,并将尾数段中的其余尾数作为小数部分存储。可以理解的是,如果尾数段的最高位本来就为1,则就不需进行左规操作。如果无法左规操作至最高位为0,则说明该尾数段为0。需要说明的是,对于第一种方式,在确定每个第二精度浮点数的阶码实际值时,还应当考虑到进行左规操作时,左规操作的位数。
第二种方式:将来自于第一精度浮点数的尾数段的最高位直接作为第二精度浮点数的整数位,并将尾数段中的其余尾数作为小数部分存储。在这种情况下,拆分出的第二精度浮点数可能不为规约数。
例如,对于001001000010这一尾数段,需要包含在FP26的尾数中,则FP26的尾数至少可以有以下两种形式:
第一种形式:1.0010000100000。这种形式对应上述第一种方式,将001001000010左规操作为1001000010,同时,将最高位1作为尾数的整数部分被隐藏,其余尾数作为尾数的小数部分存储,而且还需要在尾数的后四位补0。
第二种形式:0.0100100001000。这种形式对应上述第二种方式,将001001000010的最高位0作为尾数的整数部分,尾数段的其余尾数作为小数部分存储。在这种情况下,第二精度浮点数的隐藏位需要显示表示,而且还需要在尾数的后两位补0。
需要说明的是,对于不同的形式,相应的,阶码实际值也不同。例如,对于1.0010000100000和0.0100100001000,1.0010000100000对应的阶码实际值要比0.0100100001000对应的阶码实际值小2。
阶码调整逻辑3111使每个第二精度浮点数的阶码实际值等于第一精度浮点数的阶码实际值减去阶码偏移量,其中,阶码偏移量等于第二精度浮点数所包含的尾数段中的最高位在第一精度浮点数的尾数位中所处的位次与第一精度浮点数最高位的位次之差。
下面,以两个具体的实例,来对浮点数的拆分过程进行说明:
(1)将一个FP32拆分为两个FP26。
如图9所示,标准格式的FP32包括1bit符号,8bit阶码和23bit尾数,另外,还有隐藏的1bit整数,对于一个标准格式的FP32,其尾数共24bit。由于FP32的尾数位宽大于FP26的尾数位宽,且(1+23)/(1+13)小于2,所以,一个FP32可以拆分为两个FP26。
将一个FP32拆分为两个FP26可以有多种拆分方式,下面提供两种可能的拆分方式,将一个FP32拆分为两个FP26:
第一种拆分方式:
在拆分时,使两个FP26的符号值均与FP32的符号值相等。
将FP32的尾数分为两个尾数段,并使每个FP26的尾数包含一个尾数段。第一个尾数段可以为一个整数位和前13bit的尾数,第二个尾数段可以为第14bit到第23bit的尾数。
使包含第一个尾数段的FP26的阶码实际值与FP32的阶码实际值相等,阶码偏移量等于第一个尾数段的最高位在第一精度浮点数的尾数中的位次1减去1等于0。使包含第二个尾数段的FP26的阶码实际值等于FP32的阶码实际值减去阶码偏移量14,阶码偏移量等于第二个尾数段的最高位在第一精度浮点数的尾数中的位次15减去1等于14。另外,还需要在包含第二个尾数段的FP26的后4bit补0。
例如,FP32=(-1)s×2E×m,E为FP32的阶码实际值,m为FP32的尾数。
其中,m=x.xxxx xxxx xxxx xyyy yyyy yyy,x和y的取值均为0或1。
将m拆分为两个尾数段:
m=x.xxxx xxxx xxxx x000 0000 000+0.0000 0000 0000 0yyy yyyy yyy
=x.xxxx xxxx xxxx x+y.yyyy yyyy y×2-14
设x.xxxx xxxx xxxx=m1,y.yyyy yyyy y=m2,则两个拆分出的FP26分别为:FP26=(-1)s×2E×m1;FP26=(-1)s×2E-14×m2。
具体的,将10011.1011000101100011001的FP32格式的浮点数拆分为两个FP26格式的浮点数:
10011.1011000101100011001的FP32格式的浮点数为:
0 10000011 0011011000101100011001,其中,符号位为0,阶码存储值为131,阶码实际值为131-127=4(固定偏移值为28-1-1=127),尾数为0011011000101100011001,隐藏的整数位为1。
将0 10000011 0011011000101100011001拆分出两个FP26格式的浮点数:
将尾数1.00111011000101100011001拆分为两个尾数段,分别为:1.0011101100010和1.100011001,使第一个FP26格式的浮点数包含尾数段1.0011101100010,使第二个FP26格式的浮点数包含尾数段1.100011001。
第一个FP26格式的浮点数:符号位不变,均为0;阶码实际值相等,均为4,则FP26的阶码存储值为4+2047=2051,转换为12位二进制数为100000000011;尾数1.0011101100010的整数位被隐藏,则为0011101100010。因此,最后得到的第一个FP26格式的浮点数为:0100000000011 0011101100010。
第二个FP26格式的浮点数:符号位不变,均为0;阶码实际值等于4-14=-10,则FP26的阶码存储值为-10+2047=2037,转换为12位二进制数为011111110101;尾数1.100011001的整数位被隐藏,则为100011001,同时在后4位补零,得到1000110010000。因此,最后得到的第二个FP26格式的浮点数为:0 011111110101 1000110010000。
第二种拆分方式(如图9所示):
在拆分时,使两个FP26的符号值均与FP6432的符号值相等。
将FP32的尾数分为两个尾数段,并使每个FP26的尾数包含一个尾数段。第一个尾数段可以为一个隐藏的整数位和前11bit的尾数,第二个尾数段可以为第12bit到第23bit的尾数。
使包含第一个尾数段的FP26的阶码实际值与FP32的阶码实际值相等,使包含第二个尾数段的FP26的阶码实际值等于FP64的阶码实际值减去阶码偏移量12,阶码偏移量等于第二个尾数段的最高位在第一精度浮点数的尾数中的位次13减去1等于12。另外,还需要在拆分出的两个FP26的后2bit补0。
例如,FP32=(-1)s×2E×m,E为FP32的阶码实际值,m为FP32的尾数。
其中,m=x.xxxx xxxx xxxx xyyy yyyy yyy。x和y的取值均为0或1。
将m拆分为两个尾数段:
m=x.xxxx xxxx xxx0 0000 0000 000+0.0000 0000 000y yyyy yyyy y
=x.xxxx xxxx xxx+y.yyyy yyyy y×2-12
设x.xxxx xxxx xxx=m1,y.yyyy yyyy y=m2,
则两个拆分出的FP26分别为:FP26=(-1)s×2E×m1;FP26=(-1)s×2E-12×m2。
另外,如果运算器中的乘法器或乘加器只支持规约数的运算,则可以将来自于第一精度浮点数的尾数段先进行左规操作至最高位为1,然后,将最高位1作为第二精度浮点数的整数位,并将尾数段中的其余尾数作为小数部分存储。相应的,阶码实际值也应当根据左规操作的位数,进行相应的减少。
具体的,将10011.1011000101100011001的FP32格式的浮点数拆分为两个FP26格式的浮点数:
10011.1011000101100011001的FP32格式的浮点数为:
0 10000011 0011011000101100011001,其中,符号位为0,阶码存储值为131,阶码实际值为131-127=4(固定偏移值为28-1-1=127),尾数为0011011000101100011001,隐藏的整数位为1。
将0 10000011 0011011000101100011001按照第二种拆分方式拆分出两个FP26格式的浮点数:
将尾数1.00111011000101100011001拆分为两个尾数段,分别为:1.00111011000和101100011001,使第一个FP26格式的浮点数包含尾数段1.00111011000,使第二个FP26格式的浮点数包含尾数段1.01100011001。
第一个FP26格式的浮点数:符号位不变,均为0;阶码实际值相等,均为4,则FP26的阶码存储值为4+2047=2051,转换为12位二进制数为100000000011;尾数1.00111011000的整数位被隐藏,则为00111011000,同时,在后两位补零,得到0011101100000。因此,最后得到的第一个FP26格式的浮点数为:0 100000000011 0011101100000。
第二个FP26格式的浮点数:符号位不变,均为0;阶码实际值等于4-12=-8,则FP26的阶码存储值为-8+2047=2039,转换为12位二进制数为011111110111;尾数1.01100011001的整数位被隐藏,则为01100011001,同时在后两位补零,得到0110001100100。因此,最后得到的第二个FP26格式的浮点数为:0 0111111101110110001100100。
(2)将一个FP64拆分为四个FP26。
如图10所示,标准格式的FP64包括1bit符号,8bit阶码和52bit尾数,另外,还有隐藏的1bit整数,对于一个标准格式的FP64,其尾数共53bit。(52+1)/(13+1)大于3小于4,所以,一个FP64可以拆分为四个FP26。
将一个FP64拆分为四个FP26可以有多种拆分方式,下面提供一种可能的拆分方式,将一个FP64拆分为四个FP26:
在拆分时,使四个FP26的符号值均与FP64的符号值相等。
将FP64的尾数分为四个尾数段,并使每个FP26的尾数包含一个尾数段。第一个尾数段为一个隐藏整数位和前13bit的尾数,第二个尾数段为第14bit到第26bit的尾数,第三个尾数段为第27bit到第39bit的尾数,第四个尾数段为第40bit到第52bit的尾数。
使包含第一个尾数段的FP26的阶码实际值与FP64的阶码实际值相等;使包含第二个尾数段的FP26的阶码实际值等于FP64的阶码实际值减去阶码偏移量14,阶码偏移量等于第二个尾数段的最高位在第一精度浮点数的尾数的位次15减去1;使包含第三个尾数段的FP26的阶码实际值等于FP64的阶码实际值减去阶码偏移量27,阶码偏移量等于第三个尾数段的最高位在第一精度浮点数的尾数的位次28减去1;使包含第四个尾数段的FP26的阶码实际值等于FP64的阶码实际值减去阶码偏移量40,阶码偏移量等于第四个尾数段的最高位在第一精度浮点数的尾数的位次41减去1。另外,还需要在包含第二个、第三个和第四个尾数段的FP26的最后1bit补0。
例如,FP64=(-1)s×2E×m,E为FP64的阶码实际值,m为FP64的尾数。
其中,m=x.xxxx xxxx xxxx xyyy yyyy yyyy yyzz zzzz zzzz zzzw wwww wwwwwwww,x、y、z和w的取值均为1或0。
将m拆分为四个尾数段:
m=x.xxxx xxxx xxxx x000 0000 0000 0000 0000 0000 0000 0000 0000 0000+0.0000 00000000 0yyy yyyy yyyy yy00 0000 0000 0000 0000 0000 0000+0.00000000 0000 0000 0000 000000zz zzzz zzzz zzz0 0000 0000 0000+0.0000 0000 00000000 0000 0000 0000 0000 0000 0000000w wwww wwww wwww
=x.xxxx xxxx xxxx x+y.yyyy yyyy yyyy×2-14+z.zzzz zzzz zzzz×2-27+w.wwww wwww wwww×2-40
设x.xxxx xxxx xxxx=m1,y.yyyy yyyy yyyy=m2,z.zzzz zzzz zzzz=m3,w.wwww wwww wwww=m4,则
则四个拆分出的FP24分别为:FP26=(-1)s×2E×m1;FP26=(-1)s×2E-14×m2;FP26=(-1)s×2E-27×m3;FP26=(-1)s×2E-40×m4。
另外,如果运算器中的乘法器或乘加器只支持规约数的运算,则可以将来自于第一精度浮点数的尾数段先进行左规操作至最高位为1,然后,将最高位1作为第二精度浮点数的整数位,并将尾数段中的其余尾数作为小数部分存储。相应的,阶码实际值也应当根据左规操作的位数,进行相应的减少。
具体的,将10011.10110001011000110010011101101001011100100101001FP64格式的浮点数拆分四个FP26格式的浮点数:
10011.10110001011000110010011101101001011100100101001的FP64格式的浮点数为:
0 10000011 0011101100010110001100100111011010010111001001010010,其中,符号位为0,阶码存储值为131,阶码实际值为131-127=4(固定偏移值为28-1-1=127),尾数为0011101100010110001100100111011010010111001001010010,隐藏的整数位为1。
将尾数1.0011101100010110001100100111011010010111001001010010拆分为四个尾数段,分别为:1.0011101100010、1.100011001001、1.101101001011和1.001001010010,使第一个FP26格式的浮点数包含尾数段1.0011101100010,第二个FP26格式的浮点数包含尾数段1.100011001001,第三个FP26格式的浮点数包含尾数段1.101101001011,第四个FP26格式的尾数段浮点数包含尾数段1.001001010010。
第一个FP26格式的浮点数:符号位不变,均为0;阶码实际值相等,均为4,则FP26的阶码存储值为4+2047=2051,转换为12位二进制数为100000000011;尾数1.0011101100010的整数位被隐藏,则为0011101100010。因此,最后得到的第一个FP26格式的浮点数为:0100000000011 0011101100010。
第二个FP26格式的浮点数:符号位不变,均为0;阶码实际值等于4-14=-10,则FP26的阶码存储值为-10+2047=2037,转换为12位二进制数为011111110101;尾数1.100011001001的整数位被隐藏,则为100011001001,同时在后1位补零,得到1000110010010。因此,最后得到的第二个FP26格式的浮点数为:0 0111111101011000110010010。
第三个FP26格式的浮点数:符号位不变,均为0;阶码实际值等于4-27=-23,则FP26的阶码存储值为-23+2047=2024,转换为12位二进制数为011111101000;尾数1.101101001011的整数位被隐藏,则为101101001011,同时在后1位补零,得到1011010010110。因此,最后得到的第三个FP26格式的浮点数为:0 0111111010001011010010110。
第四个FP26格式的浮点数:符号位不变,均为0;阶码值实际值等于4-40=-36,则FP26的阶码存储值为-36+2047=2011,转换为12位二进制数为011111011011;尾数1.001001010010的整数位被隐藏,则为001001010010,同时在后1位补零,得到0010010100100。因此,最后得到的第四个FP26格式的浮点数为:0 0111110110110010010100100。
本申请实施例所示的算数逻辑单元,首先获取第一精度浮点数,并对获取到的第一精度浮点数进行转换或分解,得到对应的第二精度浮点数,然后,确定至少一组第二精度浮点数组合,每组第二精度浮点数组合中包括的第二精度浮点数分别对应不同的第一精度浮点数,最后,将得到的第二精度浮点数组合输入到第二精度乘加器中,得到第一精度浮点数的乘积结果。因此,本申请实施例通过将第一精度浮点数拆分或转换成第二精度浮点数,将第一精度浮点数的乘法运算,转换为了第二精度浮点数的乘法运算,这样,在计算设备中不必额外设计多种独立的第一精度乘法器,有效的节省了计算资源。
如图11所示,本申请实施例还提供了一种浮点数乘法计算的方法,该方法可以由上述芯片中的运算器实现,内容可以如下:
步骤1101、获取X个第一精度浮点数。
其中,X为大于或等于2的整数,X个第一精度浮点数可以为一组需要进行乘法运算的第一精度浮点数。X个可以为两个,也可以为两个以上,在本申请实施例中以X个为两个的情况进行描述。
在实施中,计算设备中的芯片中的运算器可以从存储器获取到待计算的X个第一精度浮点数。
步骤1102、根据每个第一精度浮点数,得到每个第一精度浮点数对应的第二精度浮点数。
其中,第一精度浮点数的阶码位宽小于第二精度浮点数的阶码位宽。
在实施中,在获取到第一精度浮点数之后,还需要将其拆分或转换为第二精度浮点数,以便于由统一的第二精度乘加器或乘法器,来实现多种类型的第一精度浮点数的运算。
需要说明的是,步骤1102的处理可以通过软件实现,也可以通过硬件实现。当步骤1102的功能由硬件执行时,可以是由一个固化的电路执行,例如,由图4和图5中浮点数拆分转换子电路311执行。当步骤1102的处理由软件实现时,可以由运算器执行控制器下发的指令实现。
关于步骤1102的详细内容,可以参照本申请实施例提供的算数逻辑单元部分中的浮点数拆分转换子电路31的相关内容,在此不再赘述。
步骤1103、确定至少一组第二精度浮点数组合,每组第二精度浮点数组合包括的X个第二精度浮点数分别对应不同的第一精度浮点数。
在实施中,对于两个第一精度浮点数C和D的乘法计算,将C拆分为c1和c2,将D拆分为d1和d2,则C×D=(c1+c2)×(d1+d2)=c1×d1+c1×d2+c2×d1+c2×d2。可见,将第一精度浮点数C和D的乘法计算,转换为4组第二精度浮点数的乘法计算,然后,再将4组第二精度浮点数的中间计算结果累加,得到最终的计算结果。因此,在通过步骤1102拆分或转换成一个或多个第二精度浮点数之后,还需要确定来自不同第一精度浮点数的第二精度浮点数组合。
下面以两个FP16或bfloat16分别转换得到一个FP26,两个FP32分别拆分得到两个FP26,两个FP64分别拆分得到两个FP26为例进行说明:
(1)两个FP16或bfloat16,分别转换得到一个FP26。
两个FP16或bfloat16分别为A1和B1,A1可以转换得到a1,B1可以转换得到b1,则可以得到a1和b1的组合。
(2)两个FP32分别拆分得到两个FP26。
两个FP32分别为A2和B2,A2可以拆分得到a2和a3,B2可以拆分得到b2和b3。则对于a2、a3,以及b2、b3之间,可以有以下组合:a2和b2、a2和b3、a3和b2以及a3和b3。
(3)两个FP64分别拆分得到四个FP26。
两个FP64分别为A3和B3,A3可以拆分得到a4、a5、a6和a7,B3可以拆分得到b4、b5、b6和b7。则对于a4、a5、a6和a7,以及b4、b5、b6和b7之间,可以有以下组合:a4和b4、a4和b5、a4和b6、a4和b7、a5和b4、a5和b5、a5和b6、a5和b7、a6和b4、a6和b5、a6和b6、a6和b7、a7和b4、a7和b5、a7和b6以及a7和b7。
需要说明的是,步骤1103的处理可以通过软件实现,也可以通过硬件实现。当步骤113的功能由硬件执行时,可以是由一个固化的电路执行,例如,由图5中乘数组合子电路312执行,具体的可以参照本申请实施例提供的算数逻辑单元部分中的乘数组合子电路312相关的内容。当步骤1102的处理由软件实现时,可以由运算器执行控制器下发的指令实现。
步骤1104、输入每组第二精度浮点数组合至乘加器,获得X个第一精度浮点数的乘积结果。
其中,该计算结果为第一精度浮点数。该乘加器可以为第二精度乘加器。
在实施中,对于上述得到的每种组合,可以输入到乘加器中进行计算,得到多个第一精度浮点数的计算结果。另外,还可以在输入组合的同时,输入相应的模式信号,该模式信号用于指示乘加器输出的计算结果的精度。关于乘加器的有关说明可以参照本申请实施例提供的算数逻辑单元部分,在此不再赘述。
在将确定出的多组第二精度浮点数组合输入到乘加器时,可以按照一定的输入顺序输入至乘加器中。在一种可能的实现方式中,按照每组第二精度浮点数中包括的第二精度浮点数的阶码实际值的和由小到大的顺序,将多组第二精度浮点数输入至乘加器中。也即,将两个第二精度浮点数的乘积越小的第二精度浮点数组合,优先输入到乘加器中。通过按照上述顺序输入,使得在乘加器中内部计算的精度损失较小。
在另一种可能的实现方式中,对于上述得到的每种组合,可以先输入到乘法器中进行计算,得到中间计算结果,该中间计算结果为第一精度浮点数。然后,再将得到的中间计算结果输入至累加器中进行累加,得到多个第一精度浮点数的计算结果。另外,还可以在向乘法器输入组合的同时,输入相应的模式信号,该模式信号用于指示乘法器输出的计算结果的精度。需要说明的是,该乘法器与乘加器32的逻辑架构可以相似,只是不具备加法运算相应的功能。
本申请实施例所示的方案,首先获取第一精度浮点数,并对获取到的第一精度浮点数进行转换或分解,得到对应的第二精度浮点数,然后,确定至少一组第二精度浮点数组合,每组第二精度浮点数组合中包括的第二精度浮点数分别对应不同的第一精度浮点数,最后,将得到的第二精度浮点数组合输入到乘加器中,得到第一精度浮点数的乘积结果。因此,本申请实施例通过将第一精度浮点数拆分或转换成第二精度浮点数,将第一精度浮点数的乘法运算,转换为了第二精度浮点数的乘法运算,这样,在计算设备中不必额外设计多种独立的第一精度乘法器,有效的节省了计算资源。
需要补充的是,上述记载的方案中,运算器获取到的第一精度浮点数的精度均是相同的,也即,运算器所涉及到的乘法运算仅仅是X个相同精度的第一精度浮点数的乘法运算。而在实际应用中,计算设备中还可能会涉及不同精度的浮点数的运算,则运算器相应的处理过程还可以包括如下步骤:
获取L个第三精度浮点数,第三精度浮点数的阶码位宽小于第二精度浮点数的阶码位宽,L大于或等于1。也即,获取X个第一精度浮点数和L个第三精度浮点数,具体的获取过程可以参照步骤1101的相关内容,在此不再赘述。关于第三精度浮点数,可以参照第一精度浮点数的介绍,在此不再赘述,第三精度浮点数可以理解为一种与获取的X个第一精度浮点数精度不同的第一精度浮点数。
根据第三精度浮点数,得到每个第三精度浮点数对应的第二精度浮点数。根据第三精度浮点数得到第二精度浮点数的具体过程,可以参照步骤1102的相关内容,在此不再赘述。
确定至少一组更新的第二精度浮点数组合,每组更新的第二精度浮点数中包括X+L个第二精度浮点数,其中,X+L个第二精度浮点数中包括X个第一精度浮点数对应的X个第二精度浮点数和L个第三精度浮点数对应的L个第二精度浮点数。也即,在确定第三精度浮点数对应的第二精度浮点数之后,将新得到的第二精度浮点数添加到基于第一精度浮点数得到的第二精度浮点数组合中,获得更新后的第二精度浮点数组合。
输入每组更新的第二精度浮点数组合至乘加器,获得X个第一精度浮点数和L个第三精度浮点数的乘积结果。
基于相同的技术构思,本申请实施例还提供了一种浮点数乘法计算的装置,如图12所示,该装置包括:
调整模块1201,用于获取X个输入浮点数,根据X个输入浮点数,调整得到Y个输出浮点数,其中,X个输入浮点数为第一精度的浮点数,Y个输出浮点数为第二精度的浮点数,Y、X分别为大于或等于2的正整数;
匹配模块1202,用于根据Y个输出浮点数获得第一乘积结果,将第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果。
在一种可能的实现方式中,输出浮点数的阶码位宽大于输入浮点数的阶码位宽。
在一种可能的实现方式中,匹配模块1202,用于:
根据Y个输出浮点数获得第一乘积结果;
接收模式信号,根据模式信号将第一乘积结果匹配为第一精度的浮点数的格式,输出第一匹配结果,模式信号用于指示输出第一精度的数值。
在一种可能的实现方式中,输入浮点数的尾数位宽小于或等于输出浮点数的尾数位宽,
调整模块1201,用于:
对X个输入浮点数进行转换,得到Y个输出浮点数,X等于Y,每个输入浮点数与每个输出浮点数一一对应,每个输入浮点数与每个输入浮点数对应的输出浮点数表示的数值相同。
在一种可能的实现方式中,输入浮点数的尾数位宽大于输出浮点数的尾数位宽,
调整模块1201,用于:
对X个输入浮点数进行拆分,得到Y个输出浮点数,Y大于X,每个输入浮点数对应多个输出浮点数,每个输入浮点数与每个输入浮点数对应的多个输出浮点数之和表示的数值相同。
在一种可能的实现方式中,每个输入浮点数对应的输出浮点数的个数根据输入浮点数的尾数位宽以及输出浮点数的尾数位宽确定。
在一种可能的实现方式中,调整模块1201,具体用于:
将每个输入浮点数的尾数拆分为多个尾数段,每个尾数段的位宽小于或等于输出浮点数的尾数位宽;
根据每个输入浮点数的多个尾数段,确定每个输入浮点数对应的多个输出浮点数。
在一种可能的实现方式中,调整模块1201,还用于获取L个输入浮点数,L个输入浮点数为第三精度的浮点数;根据L个输入浮点数,得到K个输出浮点数;K个输出浮点数为第二精度的浮点数,L和K分别为大于或等于1的正整数;
匹配模块1202,还用于根据Y个输出浮点数和K个输出浮点数,获得第二乘积结果,将第二乘积结果匹配为第一精度的浮点数的格式,输出第二匹配结果。
在一种可能的实现方式中,输入浮点数的格式满足电气与电子工程师协会IEEE二进制浮点数算术标准,输出浮点数的格式不满足IEEE二进制浮点数算术标准。
需要说明的是,上述各模块可以由处理器实现,或者处理器配合存储器来实现,或者,处理器执行存储器中的程序指令来实现。
还需要说明的是,上述实施例提供的浮点数乘法计算的装置在计算浮点数时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的浮点数乘法计算的装置与浮点数乘法计算的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
参见图13,本申请实施例提供了一种计算设备1300。该计算设备1300包括至少一个处理器1301,总线***1302,存储器1303。
上述处理器1301可以是一个通用中央处理器(central processing unit,CPU),网络处理器(network processor,NP),图形处理器(graphics processing unit)微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。
上述总线***1302可包括一通路,在上述组件之间传送信息。
上述存储器1303可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。
其中,存储器1303用于存储执行本申请方案的应用程序代码,并由处理器1301来控制执行。处理器1301用于执行存储器1303中存储的应用程序代码,从而实现本申请提出的浮点数计算方法。
在具体实现中,作为一种实施例,处理器1301可以包括一个或多个CPU。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的计算机可读存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请一个实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (15)

1.一种处理器芯片,包括:
控制器,用于处理N类浮点数,每类浮点数对应一个第一精度,所述N类浮点数所对应的N个第一精度不同,所述N为大于等于2的整数;
算数逻辑单元ALU,包括:
N个调整电路,每个调整电路用于:
从所述控制器获取输入浮点数,所述输入浮点数为所述N类浮点数中的其中一类;
将所述输入浮点数从第一精度转换为第二精度,得到输出浮点数,其中所述N个调整电路所输出的N个输出浮点数的精度都为第二精度;
乘加器,所述乘加器连接至所述N个调整电路,用于:
从所述N个调整电路接收转换后的输出浮点数;
对所述输出浮点数进行运算生成第一运算结果;
将所述第一运算结果转换为所述输入浮点数的第一精度。
2.根据权利要求1所述的处理器芯片,其特征在于,所述输出浮点数的阶码位宽大于所述输入浮点数的阶码位宽。
3.根据权利要求1或2所述的处理器芯片,其特征在于,所述每个乘加器包括运算子电路和格式处理子电路;
所述运算子电路,用于接收所述输出浮点数,根据所述输出浮点数获得所述第一运算结果;
所述格式处理子电路,用于:
接收模式信号和所述第一运算结果,根据所述模式信号将所述第一运算结果由第二精度转换为为第一精度,所述模式信号用于指示所述格式处理子电路的输出精度;
输出所述第一运算结果。
4.根据权利要求1-3任一项所述的处理器芯片,其特征在于,所述输入浮点数的尾数位宽小于或等于所述输出浮点数的尾数位宽,则所述N个调整电路中的每个调整电路用于:
将所述输入浮点数调整为一个输出浮点数,所述输入浮点数表示的数值与所述输出浮点数表示的数值相同。
5.根据权利要求1-3任一项所述的处理器芯片,其特征在于,所述输入浮点数的尾数位宽大于所述输出浮点数的尾数位宽,则所述每个调整电路用于将所述输入浮点数转换为多个输出浮点数,每个输入浮点数表示的数值与所述多个输出浮点数之和所表示的数值相同。
6.根据权利要求5所述的处理器芯片,其特征在于,所述每个输入浮点数对应的输出浮点数的个数根据所述输入浮点数的尾数位宽以及所述输出浮点数的尾数位宽确定。
7.根据权利要求1-6任一项所述的处理器芯片,其特征在于,所述输入浮点数的格式满足电气与电子工程师协会IEEE二进制浮点数算术标准,所述输出浮点数的格式不满足所述IEEE二进制浮点数算术标准。
8.一种计算设备,其特征在于,所述计算设备包括主板以及如权利要求1-7任意一项所述的芯片;
所述芯片设置在所述主板上。
9.一种浮点数乘法计算的方法,其特征在于,由处理器芯片执行,所述处理器芯片包括控制器及算数逻辑单元ALU,所述算数逻辑单元包括N个调整电路和乘加器,所述方法包括:
所述控制器处理N类浮点数,每类浮点数对应一个第一精度,所述N类浮点数对应的N个第一精度不同,所述N为大于等于2的整数;
所述N个调整电路中的每个调整电路从所述控制器获取输入浮点数,所述输入浮点数为所述N类浮点数中的其中一类;将所述输入浮点数从第一精度转换为第二精度,得到输出浮点数,其中所述N个调整电路所输出的N个输出浮点数的精度都为第二精度;
所述乘加器从所述N个调整电路接收转换后的输出浮点数;对所述输出浮点数进行运算生成第一运算结果;将所述第一运算结果转换为所述输入浮点数的第一精度。
10.根据权利要求9所述的方法,其特征在于,所述输出浮点数的阶码位宽大于所述输入浮点数的阶码位宽。
11.根据权利要求9或10所述的方法,其特征在于,所述每个乘加器包括运算子电路和格式处理子电路,所述乘加器对所述输出浮点数进行运算生成第一运算结果包括;
所述运算子电路接收所述输出浮点数,根据所述输出浮点数获得所述第一运算结果;
所述格式处理子电路接收模式信号和所述第一运算结果,根据所述模式信号将所述第一运算结果由第二精度转换为为第一精度,所述模式信号用于指示所述格式处理子电路输出精度,输出所述第一运算结果。
12.根据权利要求9-11任一项所述的方法,其特征在于,所述输入浮点数的尾数位宽小于或等于所述输出浮点数的尾数位宽,所述每个调整电路将所述输入浮点数从第一精度转换为第二精度,得到输出浮点数包括:
所述每个调整电路将所述输入浮点数调整为一个输出浮点数,所述输入浮点数表示的数值与所述输出浮点数表示的数值相同。
13.根据权利要求9-11任一项所述的方法,其特征在于,所述输入浮点数的尾数位宽大于所述输出浮点数的尾数位宽,所述每个调整电路将所述输入浮点数从第一精度转换为第二精度,得到输出浮点数包括:
所述每个调整电路将所述输入浮点数转换为多个输出浮点数,每个输入浮点数表示的数值与所述多个输出浮点数之和所表示的数值相同。
14.根据权利要求13所述的方法,其特征在于,所述每个输入浮点数对应的输出浮点数的个数根据所述输入浮点数的尾数位宽以及所述输出浮点数的尾数位宽确定。
15.根据权利要求9-14任一项所述的方法,其特征在于,所述输入浮点数的格式满足电气与电子工程师协会IEEE二进制浮点数算术标准,所述输出浮点数的格式不满足所述IEEE二进制浮点数算术标准。
CN202211628380.4A 2020-01-20 2020-03-31 算数逻辑单元、浮点数乘法计算的方法及设备 Active CN115934030B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211628380.4A CN115934030B (zh) 2020-01-20 2020-03-31 算数逻辑单元、浮点数乘法计算的方法及设备

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
CN202010066005X 2020-01-20
CN202010066005 2020-01-20
CN202211628380.4A CN115934030B (zh) 2020-01-20 2020-03-31 算数逻辑单元、浮点数乘法计算的方法及设备
CN202010245293.5A CN113138750A (zh) 2020-01-20 2020-03-31 算数逻辑单元、浮点数乘法计算的方法及设备

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN202010245293.5A Division CN113138750A (zh) 2020-01-20 2020-03-31 算数逻辑单元、浮点数乘法计算的方法及设备

Publications (2)

Publication Number Publication Date
CN115934030A true CN115934030A (zh) 2023-04-07
CN115934030B CN115934030B (zh) 2024-01-16

Family

ID=76809505

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202010245293.5A Pending CN113138750A (zh) 2020-01-20 2020-03-31 算数逻辑单元、浮点数乘法计算的方法及设备
CN202211628380.4A Active CN115934030B (zh) 2020-01-20 2020-03-31 算数逻辑单元、浮点数乘法计算的方法及设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202010245293.5A Pending CN113138750A (zh) 2020-01-20 2020-03-31 算数逻辑单元、浮点数乘法计算的方法及设备

Country Status (4)

Country Link
US (1) US20220350567A1 (zh)
EP (1) EP4080351A4 (zh)
CN (2) CN113138750A (zh)
WO (1) WO2021147395A1 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200218508A1 (en) * 2020-03-13 2020-07-09 Intel Corporation Floating-point decomposition circuitry with dynamic precision
US20220188073A1 (en) * 2020-12-11 2022-06-16 Amazon Technologies, Inc. Data-type-aware clock-gating
US20230004523A1 (en) * 2021-06-30 2023-01-05 Amazon Technologies, Inc. Systolic array with input reduction to multiple reduced inputs
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
CN113703717B (zh) * 2021-08-31 2024-01-26 南京英锐创电子科技有限公司 二进制浮点数乘法运算电路及其控制方法、计算装置
CN113703840B (zh) * 2021-08-31 2024-06-07 上海阵量智能科技有限公司 数据处理装置、方法、芯片、计算机设备及存储介质
WO2023028884A1 (zh) * 2021-08-31 2023-03-09 华为技术有限公司 一种浮点数计算电路以及浮点数计算方法
CN116700663A (zh) * 2022-02-24 2023-09-05 象帝先计算技术(重庆)有限公司 一种浮点数处理方法及装置
CN114461176B (zh) * 2022-04-12 2022-07-19 北京象帝先计算技术有限公司 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备
CN115034163A (zh) * 2022-07-15 2022-09-09 厦门大学 一种支持两种数据格式切换的浮点数乘加计算装置
CN115827555B (zh) * 2022-11-30 2024-05-28 格兰菲智能科技有限公司 数据处理方法、计算机设备、存储介质和乘法器结构
CN116401069A (zh) * 2023-05-08 2023-07-07 深圳市欧朗博科技有限公司 一种精度可调整及数据自整合的基带芯片架构方法
CN117785113B (zh) * 2024-02-07 2024-05-17 北京壁仞科技开发有限公司 计算装置及方法、电子设备和存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104991757A (zh) * 2015-06-26 2015-10-21 浪潮(北京)电子信息产业有限公司 一种浮点处理方法及浮点处理器
CN105224284A (zh) * 2015-09-29 2016-01-06 北京奇艺世纪科技有限公司 一种浮点数处理方法及装置
US20160188293A1 (en) * 2014-12-31 2016-06-30 Nxp B.V. Digital Signal Processor
CN108694038A (zh) * 2017-04-12 2018-10-23 英特尔公司 专用处理块中的混合精度浮点运算电路
CN109739555A (zh) * 2019-01-04 2019-05-10 腾讯科技(深圳)有限公司 包括乘累加模块的芯片、终端及控制方法
CN109901814A (zh) * 2019-02-14 2019-06-18 上海交通大学 自定义浮点数及其计算方法和硬件结构

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9274750B2 (en) * 2012-04-20 2016-03-01 Futurewei Technologies, Inc. System and method for signal processing in digital signal processors
CN108958705B (zh) * 2018-06-26 2021-11-12 飞腾信息技术有限公司 一种支持混合数据类型的浮点融合乘加器及其应用方法
US10853067B2 (en) * 2018-09-27 2020-12-01 Intel Corporation Computer processor for higher precision computations using a mixed-precision decomposition of operations
US11169776B2 (en) * 2019-06-28 2021-11-09 Intel Corporation Decomposed floating point multiplication
CN110442323B (zh) * 2019-08-09 2023-06-23 复旦大学 进行浮点数或定点数乘加运算的装置和方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160188293A1 (en) * 2014-12-31 2016-06-30 Nxp B.V. Digital Signal Processor
CN104991757A (zh) * 2015-06-26 2015-10-21 浪潮(北京)电子信息产业有限公司 一种浮点处理方法及浮点处理器
CN105224284A (zh) * 2015-09-29 2016-01-06 北京奇艺世纪科技有限公司 一种浮点数处理方法及装置
CN108694038A (zh) * 2017-04-12 2018-10-23 英特尔公司 专用处理块中的混合精度浮点运算电路
CN109739555A (zh) * 2019-01-04 2019-05-10 腾讯科技(深圳)有限公司 包括乘累加模块的芯片、终端及控制方法
CN109901814A (zh) * 2019-02-14 2019-06-18 上海交通大学 自定义浮点数及其计算方法和硬件结构

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
PRATEEK SINGH ETC.: "Optimized floating point arithmetic unit", 2014 ANNUAL IEEE INDIA CONFERENCE (INDICON) *
张明东;戴丹丹;: "基于FPGA双精度浮点运算器乘法模块的研究", 集宁师范学院学报, no. 02 *
朱峰: "浮点估值模块设计和形式化验证研究", 中国优秀硕士学位论文全文数据库 *

Also Published As

Publication number Publication date
EP4080351A1 (en) 2022-10-26
EP4080351A4 (en) 2023-02-08
CN115934030B (zh) 2024-01-16
US20220350567A1 (en) 2022-11-03
WO2021147395A1 (zh) 2021-07-29
CN113138750A (zh) 2021-07-20

Similar Documents

Publication Publication Date Title
CN115934030A (zh) 算数逻辑单元、浮点数乘法计算的方法及设备
US9639326B2 (en) Floating-point adder circuitry
CN105468331B (zh) 独立的浮点转换单元
CN117149130B (zh) 一种应用于fpga嵌入式dsp的多精度浮点乘法器结构
KR100203468B1 (ko) 부동소수점수를 위한 산술연산장치
KR20120053344A (ko) 부동 소수점 데이터와 정수형 데이터 간의 변환장치 및 그 방법
US20170293471A1 (en) Arithmetic units and related converters
KR20150079389A (ko) 부동 소수점 수를 정수로 변환하기 위한 전자 장치 및 시스템, 및 그것의 작동 방법
CN117111881B (zh) 支持多输入多格式的混合精度乘加运算器
KR20170138143A (ko) 단일 곱셈-누산 방법 및 장치
WO2022170811A1 (zh) 一种适用于混合精度神经网络的定点乘加运算单元及方法
CN112527239B (zh) 一种浮点数据处理方法及装置
CN110727412B (zh) 一种基于掩码的混合浮点乘法低功耗控制方法及装置
US9720648B2 (en) Optimized structure for hexadecimal and binary multiplier array
CN116933840A (zh) 支持可变指数位宽的多精度Posit编解码运算装置及方法
JP6919539B2 (ja) 演算処理装置および演算処理装置の制御方法
CN113126954A (zh) 浮点数乘法计算的方法、装置和算术逻辑单元
JP2645422B2 (ja) 浮動小数点演算処理装置
CN111142840A (zh) 基于fpga的数据计算方法和装置
US20230289141A1 (en) Operation unit, floating-point number calculation method and apparatus, chip, and computing device
JPH0251732A (ja) 浮動小数点演算器
THUAN A NOVEL QUOTIENT PREDICTION FOR FLOATING-POINT DIVISION
CN116756465A (zh) 计算单元、计算核心、数据计算方法、芯片及电子设备
Ravi et al. Design of high performance double precision hybrid ALU for SoC applications
CN114637488A (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