CN118034642A - 浮点运算方法、装置、电子设备及存储介质 - Google Patents
浮点运算方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN118034642A CN118034642A CN202410268795.8A CN202410268795A CN118034642A CN 118034642 A CN118034642 A CN 118034642A CN 202410268795 A CN202410268795 A CN 202410268795A CN 118034642 A CN118034642 A CN 118034642A
- Authority
- CN
- China
- Prior art keywords
- vector
- elements
- sum
- mantissa
- exponent
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 55
- 239000013598 vector Substances 0.000 claims abstract description 457
- 238000004364 calculation method Methods 0.000 claims abstract description 122
- 230000015654 memory Effects 0.000 claims description 36
- 238000004590 computer program Methods 0.000 claims description 20
- 238000007781 pre-processing Methods 0.000 claims description 9
- 238000012821 model calculation Methods 0.000 claims description 6
- 238000010606 normalization Methods 0.000 claims description 5
- 239000000047 product Substances 0.000 description 11
- 238000010586 diagram Methods 0.000 description 6
- 230000000295 complement effect Effects 0.000 description 5
- 238000013473 artificial intelligence Methods 0.000 description 4
- 238000013528 artificial neural network Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Landscapes
- Complex Calculations (AREA)
Abstract
本申请公开一种浮点运算方法、装置、电子设备及存储介质,浮点运算方法包括:根据模型运算指令,获取第一向量和第二向量,第一向量包括多个第一元素,第二向量包括多个第二元素,第一元素和第二元素为浮点型数据,第一元素和第二元素一一对应;对第一向量中的所有元素和第二向量中的所有元素进行指数运算得到指数计算结果;根据指数计算结果对第一向量中的所有元素和第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量;将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果;根据指数计算结果和尾数乘加结果进行规格化处理得到模型运算结果。本申请无需在乘加运算过程中进行对阶移位操作,提高计算效率。
Description
技术领域
本发明涉及人工智能技术领域,更具体地,涉及一种浮点运算方法、装置、电子设备及存储介质。
背景技术
目前,在一些业界主流AI(Artificial Intelligence,人工智能)处理器中,内积的应用场景十分广泛,例如在神经网络的推理以及训练中,所有涉及卷积的网络层,都需要进行大量的乘加运算。在神经网络的推理和训练中,常用的数据类型为浮点型,相较于定点型,浮点型数据具有较大的动态范围,可以表示的数值范围远大于定点数。
由于神经网络(NN)模型的规模和计算量不断增加,传统的AI处理器通常会在独立的计算和内存之间进行大量数据移动。内存计算(CIM)通过将乘加运算集成到内存(如静态随机存取内存(SRAM)和电阻式RAM(ReRAM))中,以减少数据搬运,提高计算效率。
现有技术中,对浮点型向量进行乘加运算时,先将向量中相同位置上的浮点型元素通过浮点乘法器进行乘法操作,再将乘法结果通过浮点加法树进行分级的加法操作,最终得到计算结果。由于向量中不同位置的乘法结果的指数不同,因此加法操作之前需要对乘法结果进行对阶移位操作,即乘法结果的指数对齐,尾数相应的移位。在内存计算单元进行对阶移位操作会增加芯片的复杂性和成本、降低计算效率和增加存储需求。
发明内容
鉴于上述问题,本发明的目的在于提供一种浮点运算方法、装置、电子设备及存储介质,无需在乘加运算过程中进行对阶移位操作,提高计算效率,降低算法的复杂性和芯片成本。
根据本发明的第一方面,提供一种浮点运算方法,包括:根据模型运算指令,获取第一向量和第二向量,其中,所述第一向量包括多个第一元素,第二向量包括多个第二元素,所述第一元素和所述第二元素为浮点型数据,所述第一元素和所述第二元素一一对应;对所述第一向量中的所有元素和所述第二向量中的所有元素进行指数运算得到指数计算结果;根据所述指数计算结果对所述第一向量中的所有元素和所述第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量;将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果;根据所述指数计算结果和所述尾数乘加结果进行规格化处理得到模型运算结果。
优选地,对所述第一向量中的所有元素和所述第二向量中的所有元素进行指数运算得到指数计算结果包括:对多个第一元素和多个第二元素分别取出指数部分以得到多个第一指数和多个第二指数;将多个第一指数和多个第二指数对应相加,生成多个指数和;从多个指数和中确定最大的指数和,作为最大指数和;将所述多个指数和以及最大指数和作为所述指数计算结果。
优选地,根据所述指数计算结果对所述第一向量中的所有元素和所述第二向量中的所有元素进行尾数预对齐尾数预对齐得到第一尾数向量和第二尾数向量包括:对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行预处理以得到多个第一中间尾数和多个第二中间尾数,其中,所述第一中间尾数和所述第二中间尾数均包括多个冗余位;将所述最大指数和与所述多个指数和进行减法运算得到多个指数差值;根据所述多个指数差值计算多个第一中间尾数的第一移位值和多个第二中间尾数的第二移位值,对应位置的所述第一移位值和所述第二移位值之和为相应的所述指数差值,所述第一移位值和所述第二移位值为非负整数;根据所述第一移位值和所述第二移位值分别对多个第一中间尾数和多个第二中间尾数进行尾数预对齐得到第一尾数向量和第二尾数向量。
优选地,根据所述多个指数差值计算第一向量中所有第一元素的第一移位值和第二向量中所有第二元素的第二移位值包括:对多个第一中间尾数和多个第二中间尾数分别计算冗余位的个数以得到多个第一冗余数和多个第二冗余数;将多个第一冗余数和多个第二冗余数对应相加,生成多个冗余和;将多个所述指数差值与相应的所述冗余和进行比较;当所述指数差值小于或等于所述冗余和时,根据第一冗余数和所述指数差值计算第一移位值和第二移位值;当所述指数差值大于所述冗余和时,根据所述指数差值的均值计算第一移位值和第二移位值。
优选地,根据第一冗余数和所述指数差值计算第一移位值和第二移位值包括:将所述指数差值与第一冗余数比较;当所述指数差值小于等于第一冗余数时,将所述指数差值作为第一移位值,第二移位值为0;当所述指数差值大于第一冗余数时,将第一冗余数作为第一移位值,以及将所述指数差值和所述第一冗余数的差值作为第二移位值。
优选地,根据所述指数差值的均值计算第一移位值和第二移位值包括:当所述指数差值为正偶数时,将所述指数差值的平均值作为第一移位值以及将所述指数差值和所述第一移位值的差值作为第二移位值;当所述指数差值为正奇数时,将所述指数差值与1的差的平均值作为第一移位值以及将所述指数差值和所述第一移位值的差值作为第二移位值。
优选地,根据所述指数差值的均值计算第一移位值和第二移位值包括:对所述指数差值与所述冗余和进行减法运算以得到待分配差值;当所述待分配差值为正偶数时,将所述待分配差值的平均值和第一冗余数之和作为第一移位值,以及将所述指数差值和所述第一移位值的差值作为第二移位值;当所述待分配差值为正奇数时,将所述待分配差值与1的差的平均值和第一冗余数之和作为第一移位值,以及将所述指数差值和所述第一移位值的差值作为第二移位值。
优选地,所述浮点运算方法还包括:将所述第一向量和第二向量分别分组得到L个第一子向量和L个第二子向量,所述第一子向量包括M个第一元素,所述第二子向量包括M个第二元素,L和M均为正整数;对L个第一子向量中的所有第一元素和L个第二子向量中的所有第二元素分别取出指数部分得到L个第一指数计算结果;根据L个第一指数计算结果对L个第一子向量和L个第二子向量进行尾数预对齐得到L个第一尾数向量和L个第二尾数向量;将L个第一尾数向量和L个第二尾数向量分别进行乘加运算得到L个尾数乘加结果;根据L个第一指数计算结果和L个尾数乘加结果得到第一和向量,所述第一和向量包括L个第一和结果。
优选地,所述浮点运算方法还包括:对第一和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果;根据第二指数结果对所有第一和结果进行移位对阶以得到多个第一和中间尾数;对多个第一和中间尾数进行求和处理得到第二和结果;根据所述第二指数计算结果和所述第二和结果得到模型运算结果。
优选地,所述浮点运算方法还包括:将第一和向量分组得到多个第一子和向量,每个第一子和向量包括P个第一和结果,P为正整数;对每个子和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果;根据所述第二指数计算结果对每个子和向量中的所有第一和结果进行移位对阶,得到相应的中间和向量;将中间和向量中的所有元素进行求和处理得到相应的第二和结果;根据所述第二指数计算结果对所述第二和结果进行规格化处理,得到第三和结果,所述第三和结果为浮点数据;将多个第三和结果进行浮点数求和得到模型运算结果。
根据本发明的第二方面,提供一种浮点运算装置,包括:获取模块,用于根据模型运算指令,获取第一向量和第二向量,其中,所述第一向量包括多个第一元素,第二向量包括多个第二元素,所述第一元素和所述第二元素为浮点型数据,所述第一元素和所述第二元素一一对应;指数运算模块,用于对所述第一向量中的所有元素和所述第二向量中的所有元素进行指数运算得到指数计算结果;尾数预对齐模块,用于根据所述指数计算结果对所述第一向量中的所有元素和所述第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量;乘加运算模块,用于将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果;移位模块,用于根据所述指数计算结果和所述尾数乘加结果进行规格化处理得到模型运算结果。
优选地,所述指数运算模块还用于对多个第一元素和多个第二元素分别取出指数部分以得到多个第一指数和多个第二指数;将多个第一指数和多个第二指数对应相加,生成多个指数和;从多个指数和中确定最大的指数和,作为最大指数和;将所述多个指数和以及最大指数和作为所述指数计算结果。
优选地,所述尾数预对齐模块包括:预处理单元,用于对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行预处理以得到多个第一中间尾数和多个第二中间尾数,其中,所述第一中间尾数和所述第二中间尾数均包括多个冗余位;差值计算单元,用于将所述最大指数和与所述多个指数和进行减法运算得到多个指数差值;移位值计算单元,用于根据所述多个指数差值计算第一向量中所有第一元素的第一移位值和第二向量中所有第二元素的第二移位值,对应位置的所述第一移位值和所述第二移位值之和为相应的所述指数差值,所述第一移位值和所述第二移位值为非负整数;尾数预对齐单元,用于根据所述第一移位值和所述第二移位值分别对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行尾数预对齐得到第一尾数向量和第二尾数向量。
优选地,所述浮点运算装置还包括:向量分组模块,用于将所述第一向量和第二向量分别分组得到L个第一子向量和L个第二子向量,所述第一子向量包括M个第一元素,所述第二子向量包括M个第二元素。
优选地,所述指数运算模块还用于对L个第一子向量中的所有第一元素和L个第二子向量中的所有第二元素分别取出指数部分得到L个第一指数计算结果;所述尾数预对齐模块还用于根据L个第一指数计算结果对L个第一子向量和L个第二子向量进行尾数预对齐得到L个第一尾数向量和L个第二尾数向量;所述乘加运算模块还用于将L个第一尾数向量和L个第二尾数向量进行乘加运算得到L个尾数乘加结果;所述浮点运算装置还包括:和模块,用于根据L个第一指数计算结果和L个尾数乘加结果得到第一和向量,所述第一和向量包括L个第一和结果。
优选地,所述指数运算模块还用于对第一和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果;所述移位模块还用于根据第二指数结果对所有第一和结果进行移位对阶以得到多个第一和中间尾数;所述和模块还用于对多个第一和中间尾数进行求和处理得到第二和结果;以及根据所述第二指数计算结果和所述第二和结果得到模型运算结果。
优选地,所述向量分组模块还用于将第一和向量分组得到多个第一子和向量,每个第一子和向量包括P个第一和结果,P为正整数;所述指数运算模块还用于对每个子和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果;所述移位模块还用于根据所述第二指数计算结果对每个子和向量中的所有第一和结果进行移位对阶,得到相应的中间和向量;所述和模块还用于将中间和向量中的所有元素进行求和处理得到相应的第二和结果;所述移位模块还用于根据所述第二指数计算结果对所述第二和结果进行规格化处理,得到第三和结果,所述第三和结果为浮点数据;所述和模块还用于将多个第三和结果进行浮点数求和得到模型运算结果。
根据本发明的第三方面,提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述所述的浮点运算方法。
根据本发明的第四方面,提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述所述的浮点运算方法。根据本发明的第五方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方面所提供的方法。
本发明提供的浮点运算方法、装置、电子设备及存储介质,对第一向量和第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量,将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果,在计算单元内直接进行乘加计算即可,无需在乘加运算过程中进行对阶移位操作,提高计算效率,降低算法的复杂性和芯片成本。
进一步地,对第一向量和第二向量中的所有元素进行预处理增加冗余位,然后对第一向量和第二向量中的所有元素进行尾数预对齐,可以减少尾数中有效数值的丢失,从而减少精度损失,提高计算精度。
进一步地,对第一向量和第二向量进行分组,每组子向量的所有元素进行尾数预对齐之后直接进行乘加运算,可以根据存算单元的位宽来确定分组方式和每组子向量的元素个数,从而提高存算单元的可配置性,使其适用于不同位宽的存算单元,具有较高的通用性。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示出本发明第一实施例提供的浮点运算方法的流程图;
图2示出本发明第一实施例提供的浮点运算方法中步骤S130的流程图;
图3示出本发明第二实施例提供的浮点运算方法的流程图;
图4示出本发明第二实施例提供的浮点运算方法的计算示意图;
图5示出本发明第三实施例提供的浮点运算方法的流程图;
图6示出本发明第三实施例提供的浮点运算方法的计算示意图;
图7示出本发明实施例提供的浮点运算装置的结构示意图;
图8示出本发明实施例提供的电子设备的结构示意图。
具体实施方式
以下将参照附图更详细地描述本发明的各种实施例。在各个附图中,相同的元件采用相同或类似的附图标记来表示。为了清楚起见,附图中的各个部分没有按比例绘制。
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
图1示出本发明实施例提供的浮点运算方法的流程图。如图1所示,本发明实施例提供的浮点运算方法可应用于内积运算场景中,浮点运算方法包括以下步骤。
在步骤S110中,根据模型运算指令,获取第一向量和第二向量。
在本实施例中,所述第一向量和所述第二向量为模型的输入数据。第一向量包括多个第一元素,第二向量包括多个第二元素,所述第一元素和所述第二元素为浮点型数据,所述第一元素和所述第二元素一一对应。浮点型数据具有相同的浮点数类型,例如fp32、bf16或fp16、fp8等。
可以理解的是,模型包括神经网络模型,模型运算指令是指对两个向量进行内积运算的指令。第一向量及第二向量是用于进行内积运算的向量,是模型输入的向量。首先,根据模型运算指令获取第一向量及第二向量,第一向量中包括N个第一元素,第二向量中包括N个第二元素。
浮点数的浮点格式一般都遵循IEEE754标准,包含S/E/M三部分,S为符号位(Sign),E为指数位(exponent,exp),M为尾数位(mantissa,man),如下表所示。常见的集中浮点数有FP16、FP32和FP64。其中符号位都是1bit,不同浮点数类型的指数位和尾数位所占的数据位宽不同。
符号位(sign) | 指数位(exp) | 尾数位(man) | |
FP16 | 1bit | 5bit | 10bit |
FP32 | 1bit | 8bit | 23bit |
FP64 | 1bit | 11bit | 52bit |
对于两个浮点数A和B,A=(-1)Sa×Ma×2Ea,B=(-1)Sb×Mb×2Eb,其中,Sa为A的符号位,Ma为A的尾数,Ea为A的指数,则A×B的结果为:A×B=(-1)Sa+Sb×Ma×Mb×2(Ea+Eb);可以看到需要计算Ma×Mb的定点乘法结果,以及Ea+Eb的定点加法结果。对于浮点内积运算,即完成两个向量的乘加运算,向量a=[a0,a1,……,aN-1]和b=[b0,b1,……,bN-1]的点积定义为:a·b=a0×b0+a1×b1+……+aN-1×bN-1。
在步骤S120中,对所述第一向量中的所有元素和所述第二向量中的所有元素进行指数运算得到指数计算结果。
在本实施例中,对多个第一元素和多个第二元素分别取出指数部分以得到多个第一指数(Ea0,Ea1,……EaN-1)和多个第二指数(Eb0,Eb1,……EbN-1);将多个第一指数和多个第二指数对应相加,生成多个指数和(Ea0+Eb0,Ea1+Eb1,……EaN-1+EbN-1);从多个指数和中确定最大的指数和,作为最大指数和Emax;将所述多个指数和(Ea0+Eb0,Ea1+Eb1,……EaN-1+EbN-1)以及最大指数和Emax作为所述指数计算结果。
在步骤S130中,根据所述指数计算结果对所述第一向量中的所有元素和所述第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量。
在本实施例中,将所述最大指数和Emax与所述多个指数和(Ea0+Eb0,Ea1+Eb1,……EaN-1+EbN-1)进行减法运算得到多个指数差值(ΔE0,ΔE1,……,ΔEN-1),其中,ΔE0=Emax-(Ea0+Eb0),ΔE1=Emax-(Ea1+Eb1),ΔEN-1=Emax-(EaN-1+EbN-1)。根据多个指数差值计算第一向量中所有第一元素的尾数的第一移位值Va以及第二向量中所有第二元素的尾数的第二移位值Vb,对应第一元素的尾数的第一移位值Va和第二元素的尾数的第二移位值Vb之和等于相应的指数差值ΔE,例如,Va0+Vb0=ΔE0,Va1+Vb1=ΔE1,……,VaN-1+VbN-1=ΔEN-1。根据第一移位值Va和第二移位值Vb分别对第一元素的尾数Ma和第二元素的尾数Mb进行尾数预对齐(即将第一元素的尾数Ma向右移位Va个位数以及将第二元素的Mb移位Vb个位数),得到第一尾数向量Mas和第二尾数向量Mbs。
在一个优选地实施例中,参见图2,步骤S130包括步骤S131-步骤S134。
在步骤S131中,对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行预处理以得到多个第一中间尾数和多个第二中间尾数,其中,所述第一中间尾数和所述第二中间尾数均包括多个冗余位。
在本实施例中,读取第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行预处理以得到多个第一中间尾数Mar和多个第二中间尾数Mbr,具体地,将多个第一元素的尾数和多个第二元素的尾数分别采用较高精度的定点数格式保存,第一中间尾数比第一元素的尾数增加多个冗余位,第二中间尾数比第二元素的尾数增加多个冗余位,例如以补码形式或者原码形式保存。
以FP16为例进行说明,读取第一元素的10位尾数Ma,并采用16位的定点数(INT16)保存第一元素的尾数Ma以得到第一中间尾数Mar。同样地,读取第二元素的10位尾数Mb,并采用16位的定点数(INT16)保存第一元素的尾数Mb以得到第一中间尾数Mbr。例如,对于规格化的元素,在10位尾数M的最高位左边加上隐含的1,此时尾数M需要11位,根据符号位将尾数M转换成补码,此时补码至少需要12位,采用16位来保存尾数M,为了提高精度,把补码左移4位,此时,补码格式为Q2.14,即整数部分为2位,小数部分为14位。
在步骤S132中,将所述最大指数和与所述多个指数和进行减法运算得到多个指数差值。
在本实施例中,将所述最大指数和Emax与所述多个指数和(Ea0+Eb0,Ea1+Eb1,……EaN-1+EbN-1)进行减法运算得到多个指数差值(ΔE0,ΔE1,ΔEN-1),其中,ΔE0=Emax-(Ea0+Eb0),ΔE1=Emax-(Ea1+Eb1),ΔEN-1=Emax-(EaN-1+EbN-1)。根据多个指数差值计算第一向量中所有第一元素的尾数的第一移位值Va以及第二向量中所有第二元素的尾数的第二移位值Vb,对应第一元素的尾数的第一移位值Va和第二元素的尾数的第二移位值Vb之和等于相应的指数差值ΔE,例如,Va0+Vb0=ΔE0,Va1+Vb1=ΔE1,……,VaN-1+VbN-1=ΔEN-1。
在步骤S133中,根据所述多个指数差值计算第一向量中所有第一元素的第一移位值和第二向量中所有第二元素的第二移位值,对应位置的所述第一移位值和所述第二移位值之和为相应的所述指数差值,所述第一移位值和所述第二移位值为非负整数。
在本实施例中,对多个第一中间尾数Mar和多个第二中间尾数Mbr分别计算冗余位的个数以得到多个第一冗余数Ra和多个第二冗余数Rb;将多个第一冗余数Ra和多个第二冗余数Rb对应相加,生成多个冗余和Rsum;将多个所述指数差值ΔE与相应的所述冗余和Rsum进行比较;当所述指数差值ΔE小于或等于所述冗余和Rsum时,根据第一冗余数Ra和所述指数差值ΔE计算第一移位值Va和第二移位值Vb;当所述指数差值ΔE大于所述冗余和Rsum时,根据所述指数差值ΔE的均值计算第一移位值Va和第二移位值Vb。
具体地,当所述指数差值ΔE小于或等于所述冗余和Rsum时,将所述指数差值ΔE与第一冗余数Ra比较;当所述指数差值ΔE小于等于第一冗余数Ra时,将所述指数差值ΔE作为第一移位值Va,第二移位值Vb为0,即Va=ΔE,Vb=0;当所述指数差值ΔE大于第一冗余数Ra时,将第一冗余数Ra作为第一移位值Va,以及将所述指数差值ΔE和所述第一冗余数Ra的差值作为第二移位值Vb,即Va=Ra,Vb=ΔE-Ra。
当所述指数差值ΔE大于所述冗余和Rsum时,当所述指数差值ΔE为正偶数时,将所述指数差值ΔE的平均值作为第一移位值Va以及将所述指数差值ΔE和所述第一移位值Va的差值作为第二移位值Vb,即Va=ΔE/2,Vb=ΔE-Va=ΔE/2;当所述指数差值ΔE为正奇数时,将所述指数差值ΔE与1的差的平均值作为第一移位值Va以及将所述指数差值ΔE和所述第一移位值Va的差值作为第二移位值Vb,即Va=(ΔE-1)/2,Vb=ΔE-Va=(ΔE+1)/2。
在一个优选的实施例中,当所述指数差值ΔE大于所述冗余和Rsum时,对所述指数差值ΔE与所述冗余和Rsum进行减法运算以得到待分配差值ΔEk=ΔE-Ra-Rb;当所述待分配差值ΔEk为正偶数时,将所述待分配差值ΔEk的平均值和第一冗余数Ra之和作为第一移位值Va,以及将所述指数差值ΔE和所述第一移位值Va的差值作为第二移位值Vb,即Va=Ra+(ΔE-Rsum)/2=(ΔE+Ra-Rb)/2,Vb=ΔE-Va=(ΔE-Ra+Rb)/2;当所述所述待分配差值ΔEk为正奇数时,将所述待分配差值ΔEk与1的差的平均值和第一冗余数Ra之和作为第一移位值Va以及将所述指数差值ΔE和所述第一移位值Va的差值作为第二移位值Vb,即Va=Ra+(ΔE-Rsum-1)/2=(ΔE+Ra-Rb-1)/2,Vb=ΔE-Va=(ΔE-Ra+Rb+1)/2。
在步骤S134中,根据所述第一移位值和所述第二移位值分别对多个第一中间尾数和多个第二中间尾数进行尾数预对齐得到第一尾数向量和第二尾数向量。
在本实施例中,对多个第一中间尾数Mar右移第一移位值Va和多个第二中间尾数Mbr右移第二移位值Vb以进行尾数预对齐得到第一尾数向量Mas和第二尾数向量Mbs,第一尾数向量Mas=[Mas0,Mas1,……,MasN-1],第二尾数向量Mbs=[Mbs0,Mbs1,……,MbsN-1]。在尾数右移的过程中,可以使用RNE(round to nearest even)进行取舍以提高精度。
在步骤S140中,将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果。
在本实施例中,将第一尾数向量Mas和第二尾数向量Mbs进行乘加运算得到尾数乘加结果Macc,Macc=Mas0×Mbs0+Mas1×Mbs1+……+MasN-1×MbsN-1。
在步骤S150中,根据所述指数计算结果和所述尾数乘加结果进行规格化处理得到模型运算结果。
在本实施例中,将指数计算结果和尾数乘加结果构建一个规格化的浮点数。通过对尾数乘加结果进行移位,以及根据移位对指数计算结果进行处理使其在浮点类型的规格化范围内。
本发明提供的浮点运算方法,对第一向量和第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量,将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果,在计算单元内直接进行乘加计算即可,无需在累积过程中进行对阶移位操作,提高计算效率,降低算法的复杂性和芯片成本。
进一步地,对第一向量和第二向量中的所有元素进行预处理增加冗余位,然后对第一向量和第二向量中的所有元素进行尾数预对齐,可以减少尾数中有效数值的丢失,从而减少精度损失,提高计算精度。
图3示出本发明第二实施例提供的浮点运算方法的流程图。如图3所示,所述浮点运算方法包括以下步骤。
在步骤S201中,根据模型运算指令,获取第一向量和第二向量。
在本实施例中,所述第一向量和所述第二向量为模型的输入数据。第一向量包括多个第一元素,第二向量包括多个第二元素,所述第一元素和所述第二元素为浮点型数据,所述第一元素和所述第二元素一一对应。浮点型数据具有相同的浮点数类型,例如fp32、bf16或fp16、fp8等。
可以理解的是,模型包括神经网络模型,模型运算指令是指对两个向量进行内积运算的指令。第一向量及第二向量是用于进行内积运算的向量,是模型输入的向量。首先,根据模型运算指令获取第一向量及第二向量,第一向量中包括N个第一元素,第二向量中包括N个第二元素。
在步骤S202中,将所述第一向量和第二向量分别分组得到L个第一子向量和L个第二子向量,所述第一子向量包括M个第一元素,所述第二子向量包括M个第二元素。
在本实施例中,每个子向量所包含的元素个数根据存算单元的位宽以及元素的数据类型计算得到,例如存算单元的位宽为128bit,元素的浮点数类型为FP16,即存储每个元素的所需位数为16bit,每个子向量所包含的元素为8个。
具体地,参见图4,若N为M的整数倍,则L=N/M,则第一子向量分别为a1=[a0,a1,……,aM-1],a2=[aM,aM+2,……,a2M-1],……,aL=[aN-M,aN-M,……,aN-1];第二子向量分别为b1=[b0,b1,……,bM-1],b2=[bM,bM+2,……,b2M-1],……,bL=[bN-M,bN-M,……,bN-1]。
若N不为M的整数倍,则需要对第一向量和第二向量进行扩展,再将扩展后的向量进行分组,例如,可以在第一向量和第二向量的末尾元素后增加M-c个元素(c为N除以M的余数),增加的元素全为0,这样L=k+1(k为N除以M的商);则第一子向量分别为a1=[a0,a1,……,aM-1],a2=[aM,aM+2,……,a2M-1],……,aL=[akM,akM+1,……,akM+M-1];第二子向量分别为b1=[b0,b1,……,bM-1],b2=[bM,bM+2,……,b2M-1],……,bL=[bkM,bkM+1,……,bkM+M-1]。
在步骤S203中,对L个第一子向量中的所有第一元素和L个第二子向量中的所有第二元素分别取出指数部分得到L个第一指数计算结果。
在本实施例中,对于L个第一子向量中的每个第一子向量与L个第二子向量中的每个第二子向量,将位置对应相同的第一元素与第二元素分别取出指数部分并计算得到相应的第一指数计算结果。例如,第i个第一子向量中所有第一元素与第i个第二子向量中所有第二元素取出指数部分以得到多个第一指数(Ea(i-1)M,Ea(i-1)M+1,……EaiM-1)和多个第二指数(Eb(i-1)M,Eb(i-1)M+1,……Eb3M-1);将多个第一指数和多个第二指数对应相加,生成第三个子向量的多个指数和(Ea(i-1)M+Eb(i-1)M,Ea(i-1)M+1+Eb(i-1)M+1,……EaiM-1+EbiM-1);从第i个子向量的多个指数和中确定最大的指数和,作为第i个子向量的最大指数和E1max_i;将所述多个指数和(Ea(i-1)M+Eb(i-1)M,Ea(i-1)M+1+Eb(i-1)M+1,……EaiM-1+EbiM-1)以及最大指数和E1max_i作为第i个子向量的第一指数计算结果,其中,i为正整数,且i≤L。
在步骤S204中,根据L个第一指数计算结果对L个第一子向量和L个第二子向量进行尾数预对齐得到L个第一尾数向量和L个第二尾数向量。
在本实施例中,对于L个第一子向量中的每个第一子向量与L个第二子向量中的每个第二子向量,将位置对应相同的第一元素与第二元素进行尾数预对齐得到L个第一尾数向量和L个第二尾数向量。例如,根据第i个子向量的第一指数计算结果对第i个第一子向量中所有第一元素与第i个第二子向量中所有第二元素进行尾数预对齐得到第i个第一尾数向量和第i个第二尾数向量。
具体地,将第i个子向量的最大指数和E1max_i,与所述第i个子向量的多个指数和(Ea(i-1)M+Eb(i-1)M,Ea(i-1)M+1+Eb(i-1)M+1,……EaiM-1+EbiM-1)进行减法运算得到第i个子向量的多个指数差值(ΔE(i-1)M,ΔE(i-1)M+1,……,ΔEiM-1),其中,ΔE(i-1)M=E1max_i-(Ea(i-1)M+Eb(i-1)M),ΔE(i-1)M+1=E1max_i-(Ea(i-1)M+1+Eb(i-1)M+1),ΔEiM-1=E1max_i-(EaiM-1+EbiM-1)。根据第i个子向量的多个指数差值计算第i个子向量中所有第一元素的尾数的第一移位值Vai以及第i个子向量中所有第二元素的尾数的第二移位值Vbi,对应位置的第一元素的尾数的第一移位值Va和第二元素的尾数的第二移位值Vb之和等于相应的指数差值ΔE,例如,Va(i-1)M+Vb(i-1)M=ΔE(i-1)M,Va(i-1)M+1+Vb(i-1)M+1=ΔE(i-1)M+1,……,VaiM-1+VbiM-1=ΔEiM-1。根据第一移位值Va和第二移位值Va分别对第一元素的尾数Ma和第二元素的尾数Mb进行尾数预对齐(即将第一元素的尾数Ma向右移位Va个位数以及将第二元素的Mb移位Vb个位数),得到第i个子向量的第一尾数向量Masi和第二尾数向量Mbsi。
相应位置的第一子向量与第二子向量的尾数预对齐操作与第一实施例相同,在此不再赘述。
在步骤S205中,将L个第一尾数向量和L个第二尾数向量分别进行乘加运算得到L个尾数乘加结果。
在本实施例中,对于L个第一尾数向量中的每个第一尾数向量与L个第一尾数向量中的每个第二尾数向量,将位置对应相同的第一尾数与第二尾数进行乘加运算得到相应位置的尾数乘加结果。因此,L个第一尾数向量和L个第二尾数向量分别进行乘加运算得到L个尾数乘加结果Msum。
在步骤S206中,根据L个第一指数计算结果和L个尾数乘加结果得到第一和向量,所述第一和向量包括L个第一和结果。
在本实施例中,对于L个第一指数计算结果中的最大指数和与L个尾数乘加结果,将位置对应相同的最大指数和与尾数乘加结果构成第一和结果。即第i个最大指数和作为第i个第一和结果的指数,第i个尾数乘加结果作为第i个第一和结果的尾数。L个第一和结果组成第一和向量Sum。Sum=[Sum1,Sum2,……,SumL],Sum1=a1×b1=Msum1×2E1max_1,Sum2=a2×b2=Msum2×2E1max_2;……,SumL=aL×bL=MsumL×2E1max_L。
在步骤S207中,对第一和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果。
在本实施例中,将L个第一和结果的指数部分取出得到L个第一和指数[E1max_1,E1max_2,……,E1max_L],以及将L个第一和指数中的最大指数E2max和L个第一和指数[E1max_1,E1max_2,……,E1max_L]作为第二指数计算结果。其中,L个第一和指数为L个第一指数计算结果中的最大指数和,即第i个第一和指数为第i个指数计算结果中的最大指数和。
在步骤S208中,根据第二指数计算结果对所有第一和结果进行移位对阶以得到多个第一和中间尾数。
在本实施例中,将第二指数计算结果中的最大指数E2max与L个第一和指数[E1max_1,E1max_2,……,E1max_L]进行减法运算得到L个指数差值,然后根据L个指数差值对L个第一和结果的尾数进行移位得到L个第一和中间尾数。
在步骤S209中,对多个第一和中间尾数进行求和处理得到第二和结果。
在本实施例中,将L个第一和中间尾数进行加法运算得到第二和结果Macc。存储所述第二和结果Macc所需的位数根据L的大小动态变化。
在步骤S210中,根据所述第二指数计算结果和所述第二和结果得到模型运算结果。
在本实施例中,将第二指数计算结果中的最大指数E2max和第二和结果Macc构建一个规格化的浮点数;通过对第二和结果Macc进行移位,以及根据移位对第二指数计算结果进行处理使其在浮点类型的规格化范围内,得到模型运算结果Acc。
本发明提供的浮点运算方法,对第一向量和第二向量进行分组,每组子向量的所有元素进行尾数预对齐之后直接进行乘加运算,可以根据存算单元的位宽来确定分组方式和每组子向量的元素个数,从而提高存算单元的可配置性,使其适用于不同位宽的存算单元,具有较高的通用性。
图5示出本发明第三实施例提供的浮点运算方法的流程图。如图5所示,所述浮点运算方法包括以下步骤。
在步骤S301中,根据模型运算指令,获取第一向量和第二向量。
在步骤S302中,将所述第一向量和第二向量分别分组得到L个第一子向量和L个第二子向量,所述第一子向量包括M个第一元素,所述第二子向量包括M个第二元素。
在步骤S303中,对L个第一子向量中的所有第一元素和L个第二子向量中的所有第二元素分别取出指数部分得到L个第一指数计算结果。
在步骤S304中,根据L个第一指数计算结果对L个第一子向量和L个第二子向量进行尾数预对齐得到L个第一尾数向量和L个第二尾数向量。
在步骤S305中,将L个第一尾数向量和L个第二尾数向量分别进行乘加运算得到L个尾数乘加结果。
在步骤S306中,根据L个第一指数计算结果和L个尾数乘加结果得到第一和向量,所述第一和向量包括L个第一和结果。
本实施例中的步骤S301-步骤S306与第一实施例中的步骤S201-步骤S206相同,在此不再赘述。
在步骤S307中,将第一和向量分组得到多个第一子和向量,每个第一子和向量包括P个第一和结果。
在本实施例中,参见图6,将第一和向量中的L个第一和结果进行分组得到H个第一子和向量,每个第一子和向量包括P个第一和结果。若L是P的整数倍,则H=L/P;若L不是P的整数倍,则第一和向量进行扩展然后再分组,第一和向量扩展需要补充的零元素的个数为P-d,d为L除以P的余数,H=e+1,e为L除以P的商。
在步骤S308中,对每个子和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果。
在本实施例中,每个子和向量中所有第一和结果的指数以及最大指数作为第二指数计算结果。
在步骤S309中,根据所述第二指数计算结果对每个子和向量中的所有第一和结果进行移位对阶,得到多个中间和向量。
在本实施例中,每个子和向量根据其对应的最大指数以及每个子和向量中所有第一和结果的指数进行减法运算得到多个指数差值,根据多个指数差值对所有第一和结果的尾数进行移位以得到相应的多个第一和中间尾数,多个第一和中间尾数构成中间和向量。多个子向量经过尾数预对齐得到多个中间和向量。
在步骤S310中,将每个中间和向量中的所有元素进行求和处理得到多个第二和结果。
在本实施例中,将每个中间和向量中的所有元素求和得到多个第二和结果。
在步骤S311中,根据所述第二指数计算结果对所述第二和结果进行规格化处理,得到第三和结果,所述第三和结果为浮点数据。
在本实施例中,将位置对应相同的第二指数计算结果中的指数以及第二和结果构一个规格化的浮点数。通过对第三和结果Macc进行移位,以及根据移位对第二指数计算结果进行处理使其在浮点类型的规格化范围内,得到第三和结果Acc1、Acc2,……,AccP。由于在求和过程中进行分组,使得每个分组内的元素个数是预设定的,那么存储和结果所需的位数是固定的。
在步骤S312中,将多个第三和结果进行浮点数求和得到模型运算结果。
在本实施例中,将多个第三和结果直接进行加法运算得到模型运算结果Acc。
本发明提供的浮点运算方法,对第一向量和第二向量进行分组,每组子向量的所有元素进行尾数预对齐之后直接进行乘加运算,可以根据存算单元的位宽来确定分组方式和每组子向量的元素个数,从而提高存算单元的可配置性,使其适用于不同位宽的存算单元,具有较高的通用性。
图7示出本发明实施例提供的浮点运算装置的结构示意图。如图7所示,所述浮点运算装置包括获取模块710、指数运算模块720、尾数预对齐模块730、乘加运算模块740以及移位模块750。
获取模块710,用于根据模型运算指令,获取第一向量和第二向量,其中,所述第一向量包括多个第一元素,第二向量包括多个第二元素,所述第一元素和所述第二元素为浮点型数据,所述第一元素和所述第二元素一一对应。
在本实施例中,所述第一向量和所述第二向量为模型的输入数据。第一向量包括多个第一元素,第二向量包括多个第二元素,所述第一元素和所述第二元素为浮点型数据,所述第一元素和所述第二元素一一对应。浮点型数据具有相同的浮点数类型,例如fp32、bf16或fp16、fp8等。
对于两个浮点数A和B,A=(-1)Sa×Ma×2Ea,B=(-1)Sb×Mb×2Eb,其中,Sa为A的符号位,Ma为A的尾数,Ea为A的指数,则A×B的结果为:A×B=(-1)Sa+Sb×Ma×Mb×2(Ea+Eb);可以看到需要计算Ma×Mb的定点乘法结果,以及Ea+Eb的定点加法结果。对于浮点内积运算,即完成两个向量的乘加运算,向量a=[a0,a1,……,aN-1]和b=[b0,b1,……,bN-1]的点积定义为:a·b=a0×b0+a1×b1+……+aN-1×bN-1。
指数运算模块720用于对所述第一向量中的所有元素和所述第二向量中的所有元素进行指数运算得到指数计算结果。
在本实施例中,指数运算模块720对多个第一元素和多个第二元素分别取出指数部分以得到多个第一指数(Ea0,Ea1,……EaN-1)和多个第二指数(Eb0,Eb1,……EbN-1);将多个第一指数和多个第二指数对应相加,生成多个指数和(Ea0+Eb0,Ea1+Eb1,……EaN-1+EbN-1);从多个指数和中确定最大的指数和,作为最大指数和Emax;将所述多个指数和(Ea0+Eb0,Ea1+Eb1,……EaN-1+EbN-1)以及最大指数和Emax作为所述指数计算结果。
尾数预对齐模块730用于根据所述指数计算结果对所述第一向量中的所有元素和所述第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量。
在本实施例中,尾数预对齐模块730将所述最大指数和Emax与所述多个指数和(Ea0+Eb0,Ea1+Eb1,……EaN-1+EbN-1)进行减法运算得到多个指数差值(ΔE0,ΔE1,……,ΔEN-1),其中,ΔE0=Emax-(Ea0+Eb0),ΔE1=Emax-(Ea1+Eb1),ΔEN-1=Emax-(EaN-1+EbN-1)。根据多个指数差值计算第一向量中所有第一元素的尾数的第一移位值Va以及第二向量中所有第二元素的尾数的第二移位值Vb,对应第一元素的尾数的第一移位值Va和第二元素的尾数的第二移位值Vb之和等于相应的指数差值ΔE,例如,Va0+Vb0=ΔE0,Va1+Vb1=ΔE1,……,VaN-1+VbN-1=ΔEN-1。根据第一移位值Va和第二移位值Vb分别对第一元素的尾数Ma和第二元素的尾数Mb进行尾数预对齐(即将第一元素的尾数Ma向右移位Va个位数以及将第二元素的Mb移位Vb个位数),得到第一尾数向量Mas和第二尾数向量Mbs。
在一个优选地实施例中,所述尾数预对齐模块730包括预处理单元731、差值计算单元732、移位值计算单元733和尾数预对齐单元734。其中,预处理单元731用于对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行预处理以得到多个第一中间尾数和多个第二中间尾数,其中,所述第一中间尾数和所述第二中间尾数均包括多个冗余位;差值计算单元732用于将所述最大指数和与所述多个指数和进行减法运算得到多个指数差值;移位值计算单元733用于根据所述多个指数差值计算第一向量中所有第一元素的第一移位值和第二向量中所有第二元素的第二移位值,对应位置的所述第一移位值和所述第二移位值之和为相应的所述指数差值,所述第一移位值和所述第二移位值为非负整数;尾数预对齐单元734用于根据所述第一移位值和所述第二移位值分别对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行尾数预对齐得到第一尾数向量和第二尾数向量。本实施例提供的尾数预对齐模块与第一实施例提供的尾数预对齐的步骤对应,具体描述参考第一实施例,在此不再赘述。
乘加运算模块740用于将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果。
在本实施例中,将第一尾数向量Mas和第二尾数向量Mbs进行乘加运算得到尾数乘加结果Macc,Macc=Mas0×Mbs0+Mas1×Mbs1+……+MasN-1×MbsN-1。
移位模块750用于根据所述指数计算结果和所述尾数乘加结果进行规格化处理得到模型运算结果。
在本实施例中,将指数计算结果和尾数乘加结果构建一个规格化的浮点数。通过对尾数乘加结果进行移位,以及根据移位对指数计算结果进行处理使其在浮点类型的规格化范围内。
在一个优选地实施例中,所述浮点运算装置还包括向量分组模块760和和模块770,其中,所述向量分组模块760用于将所述第一向量和第二向量分别分组得到L个第一子向量和L个第二子向量,所述第一子向量包括M个第一元素,所述第二子向量包括M个第二元素。
所述指数运算模块720还用于对L个第一子向量中的所有第一元素和L个第二子向量中的所有第二元素分别取出指数部分得到L个第一指数计算结果。
所述尾数预对齐模块730还用于根据L个第一指数计算结果对L个第一子向量和L个第二子向量进行尾数预对齐得到L个第一尾数向量和L个第二尾数向量。
所述乘加运算模块740还用于将L个第一尾数向量和L个第二尾数向量进行乘加运算得到L个尾数乘加结果。
和模块770用于根据L个第一指数计算结果和L个尾数乘加结果得到第一和向量,所述第一和向量包括L个第一和结果。
所述指数运算模块720还用于对第一和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果。
所述移位模块750还用于根据第二指数结果对所有第一和结果进行移位对阶以得到多个第一和中间尾数。
所述和模块770还用于对多个第一和中间尾数进行求和处理得到第二和结果;以及根据所述第二指数计算结果和所述第二和结果得到模型运算结果。
本实施例提供的浮点运算装置与第二实施例提供的浮点运算方法相对应,具体描述参考第二实施例,在此不再赘述。
在一个优选的实施例中,所述向量分组模块760还用于将第一和向量分组得到多个第一子和向量,每个第一子和向量包括P个第一和结果,P为正整数。
所述指数运算模块720还用于对每个子和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果。
所述移位模块750还用于根据所述第二指数计算结果对每个子和向量中的所有第一和结果进行移位对阶,得到相应的中间和向量。
所述和模块770还用于将中间和向量中的所有元素进行求和处理得到相应的第二和结果。
所述移位模块750还用于根据所述第二指数计算结果对所述第二和结果进行规格化处理,得到第三和结果,所述第三和结果为浮点数据。
所述和模块770还用于将多个第三和结果进行浮点数求和得到模型运算结果。
本实施例提供的浮点运算装置与第三实施例提供的浮点运算方法相对应,具体描述参考第三实施例,在此不再赘述。
本发明提供的浮点运算装置,对第一向量和第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量,将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果,在计算单元内直接进行乘加计算即可,无需在累积过程中进行对阶移位操作,提高计算效率,降低算法的复杂性和芯片成本。
进一步地,对第一向量和第二向量中的所有元素进行预处理增加冗余位,然后对第一向量和第二向量中的所有元素进行尾数预对齐,可以减少尾数中有效数值的丢失,从而减少精度损失,提高计算精度。
进一步地,对第一向量和第二向量进行分组,每组子向量的所有元素进行尾数预对齐之后直接进行乘加运算,可以根据存算单元的位宽来确定分组方式和每组子向量的元素个数,从而提高存算单元的可配置性,使其适用于不同位宽的存算单元,具有较高的通用性。
图8是本发明实施例提供的电子设备的结构示意图。如图8所示,该实施例的电子设备800包括:至少一个处理器801(图8中仅示出一个)处理器、存储器802以及存储在所述存储器802中并可在所述至少一个处理器801上运行的计算机程序803,所述处理器801执行所述计算机程序803时实现上述计算图处理方法的步骤。
所述电子设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该电子设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,图8仅仅是电子设备800的举例,并不构成对电子设备800的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器801可以是中央处理单元(Central Processing Unit,CPU),该处理器801还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器802在一些实施例中可以是所述电子设备800的内部存储单元,例如电子设备800的硬盘或内存。所述存储器802在另一些实施例中也可以是所述电子设备800的外部存储设备,例如所述电子设备800上配备的插接式硬盘,智能存储卡(Smart MediaCard,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器802还可以既包括所述电子设备800的内部存储单元也包括外部存储设备。所述存储器802用于存储操作系统、应用程序、引导装载程序(Boot Loader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器802还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行时实现可实现上述各个方法实施例中的步骤。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到装置/电子设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
依照本发明的实施例如上文所述,这些实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施例。显然,根据以上描述,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地利用本发明以及在本发明基础上的修改使用。本发明仅受权利要求书及其全部范围和等效物的限制。
Claims (19)
1.一种浮点运算方法,其特征在于,包括:
根据模型运算指令,获取第一向量和第二向量,其中,所述第一向量包括多个第一元素,第二向量包括多个第二元素,所述第一元素和所述第二元素为浮点型数据,所述第一元素和所述第二元素一一对应;
对所述第一向量中的所有元素和所述第二向量中的所有元素进行指数运算得到指数计算结果;
根据所述指数计算结果对所述第一向量中的所有元素和所述第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量;
将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果;
根据所述指数计算结果和所述尾数乘加结果进行规格化处理得到模型运算结果。
2.根据权利要求1所述的浮点运算方法,其特征在于,对所述第一向量中的所有元素和所述第二向量中的所有元素进行指数运算得到指数计算结果包括:
对多个第一元素和多个第二元素分别取出指数部分以得到多个第一指数和多个第二指数;
将多个第一指数和多个第二指数对应相加,生成多个指数和;
从多个指数和中确定最大的指数和,作为最大指数和;
将所述多个指数和以及最大指数和作为所述指数计算结果。
3.根据权利要求2所述的浮点运算方法,其特征在于,根据所述指数计算结果对所述第一向量中的所有元素和所述第二向量中的所有元素进行尾数预对齐尾数预对齐得到第一尾数向量和第二尾数向量包括:
对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行预处理以得到多个第一中间尾数和多个第二中间尾数,其中,所述第一中间尾数和所述第二中间尾数均包括多个冗余位;
将所述最大指数和与所述多个指数和进行减法运算得到多个指数差值;
根据所述多个指数差值计算多个第一中间尾数的第一移位值和多个第二中间尾数的第二移位值,对应位置的所述第一移位值和所述第二移位值之和为相应的所述指数差值,所述第一移位值和所述第二移位值为非负整数;
根据所述第一移位值和所述第二移位值分别对多个第一中间尾数和多个第二中间尾数进行尾数预对齐得到第一尾数向量和第二尾数向量。
4.根据权利要求3所述的浮点运算方法,其特征在于,根据所述多个指数差值计算第一向量中所有第一元素的第一移位值和第二向量中所有第二元素的第二移位值包括:
对多个第一中间尾数和多个第二中间尾数分别计算冗余位的个数以得到多个第一冗余数和多个第二冗余数;
将多个第一冗余数和多个第二冗余数对应相加,生成多个冗余和;
将多个所述指数差值与相应的所述冗余和进行比较;
当所述指数差值小于或等于所述冗余和时,根据第一冗余数和所述指数差值计算第一移位值和第二移位值;
当所述指数差值大于所述冗余和时,根据所述指数差值的均值计算第一移位值和第二移位值。
5.根据权利要求4所述的浮点运算方法,其特征在于,根据第一冗余数和所述指数差值计算第一移位值和第二移位值包括:
将所述指数差值与第一冗余数比较;
当所述指数差值小于等于第一冗余数时,将所述指数差值作为第一移位值,第二移位值为0;
当所述指数差值大于第一冗余数时,将第一冗余数作为第一移位值,以及将所述指数差值和所述第一冗余数的差值作为第二移位值。
6.根据权利要求4所述的浮点运算方法,其特征在于,根据所述指数差值的均值计算第一移位值和第二移位值包括:
当所述指数差值为正偶数时,将所述指数差值的平均值作为第一移位值以及将所述指数差值和所述第一移位值的差值作为第二移位值;
当所述指数差值为正奇数时,将所述指数差值与1的差的平均值作为第一移位值以及将所述指数差值和所述第一移位值的差值作为第二移位值。
7.根据权利要求4所述的浮点运算方法,其特征在于,根据所述指数差值的均值计算第一移位值和第二移位值包括:
对所述指数差值与所述冗余和进行减法运算以得到待分配差值;
当所述待分配差值为正偶数时,将所述待分配差值的平均值和第一冗余数之和作为第一移位值,以及将所述指数差值和所述第一移位值的差值作为第二移位值;
当所述待分配差值为正奇数时,将所述待分配差值与1的差的平均值和第一冗余数之和作为第一移位值,以及将所述指数差值和所述第一移位值的差值作为第二移位值。
8.根据权利要求1所述的浮点运算方法,其特征在于,还包括:
将所述第一向量和第二向量分别分组得到L个第一子向量和L个第二子向量,所述第一子向量包括M个第一元素,所述第二子向量包括M个第二元素,L和M均为正整数;
对L个第一子向量中的所有第一元素和L个第二子向量中的所有第二元素分别取出指数部分得到L个第一指数计算结果;
根据L个第一指数计算结果对L个第一子向量和L个第二子向量进行尾数预对齐得到L个第一尾数向量和L个第二尾数向量;
将L个第一尾数向量和L个第二尾数向量分别进行乘加运算得到L个尾数乘加结果;
根据L个第一指数计算结果和L个尾数乘加结果得到第一和向量,所述第一和向量包括L个第一和结果。
9.根据权利要求8所述的浮点运算方法,其特征在于,还包括:
对第一和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果;
根据第二指数结果对所有第一和结果进行移位对阶以得到多个第一和中间尾数;
对多个第一和中间尾数进行求和处理得到第二和结果;
根据所述第二指数计算结果和所述第二和结果得到模型运算结果。
10.根据权利要求8所述的浮点运算方法,其特征在于,还包括:
将第一和向量分组得到多个第一子和向量,每个第一子和向量包括P个第一和结果,P为正整数;
对每个子和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果;
根据所述第二指数计算结果对每个子和向量中的所有第一和结果进行移位对阶,得到相应的中间和向量;
将中间和向量中的所有元素进行求和处理得到相应的第二和结果;
根据所述第二指数计算结果对所述第二和结果进行规格化处理,得到第三和结果,所述第三和结果为浮点数据;
将多个第三和结果进行浮点数求和得到模型运算结果。
11.一种浮点运算装置,其特征在于,包括:获取模块,用于根据模型运算指令,获取第一向量和第二向量,其中,所述第一向量包括多个第一元素,第二向量包括多个第二元素,所述第一元素和所述第二元素为浮点型数据,所述第一元素和所述第二元素一一对应;
指数运算模块,用于对所述第一向量中的所有元素和所述第二向量中的所有元素进行指数运算得到指数计算结果;
尾数预对齐模块,用于根据所述指数计算结果对所述第一向量中的所有元素和所述第二向量中的所有元素进行尾数预对齐得到第一尾数向量和第二尾数向量;
乘加运算模块,用于将第一尾数向量和第二尾数向量进行乘加运算得到尾数乘加结果;
移位模块,用于根据所述指数计算结果和所述尾数乘加结果进行规格化处理得到模型运算结果。
12.根据权利要求11所述的浮点运算装置,其特征在于,所述指数运算模块还用于对多个第一元素和多个第二元素分别取出指数部分以得到多个第一指数和多个第二指数;将多个第一指数和多个第二指数对应相加,生成多个指数和;从多个指数和中确定最大的指数和,作为最大指数和;将所述多个指数和以及最大指数和作为所述指数计算结果。
13.根据权利要求12所述的浮点运算装置,其特征在于,所述尾数预对齐模块包括:
预处理单元,用于对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行预处理以得到多个第一中间尾数和多个第二中间尾数,其中,所述第一中间尾数和所述第二中间尾数均包括多个冗余位;
差值计算单元,用于将所述最大指数和与所述多个指数和进行减法运算得到多个指数差值;
移位值计算单元,用于根据所述多个指数差值计算第一向量中所有第一元素的第一移位值和第二向量中所有第二元素的第二移位值,对应位置的所述第一移位值和所述第二移位值之和为相应的所述指数差值,所述第一移位值和所述第二移位值为非负整数;
尾数预对齐单元,用于根据所述第一移位值和所述第二移位值分别对第一向量中所有第一元素的尾数和第二向量中所有第二元素的尾数进行尾数预对齐得到第一尾数向量和第二尾数向量。
14.根据权利要求11所述的浮点运算装置,其特征在于,还包括:
向量分组模块,用于将所述第一向量和第二向量分别分组得到L个第一子向量和L个第二子向量,所述第一子向量包括M个第一元素,所述第二子向量包括M个第二元素。
15.根据权利要求14所述的浮点运算装置,其特征在于,所述指数运算模块还用于对L个第一子向量中的所有第一元素和L个第二子向量中的所有第二元素分别取出指数部分得到L个第一指数计算结果;所述尾数预对齐模块还用于根据L个第一指数计算结果对L个第一子向量和L个第二子向量进行尾数预对齐得到L个第一尾数向量和L个第二尾数向量;
所述乘加运算模块还用于将L个第一尾数向量和L个第二尾数向量进行乘加运算得到L个尾数乘加结果;
所述浮点运算装置还包括:
和模块,用于根据L个第一指数计算结果和L个尾数乘加结果得到第一和向量,所述第一和向量包括L个第一和结果。
16.根据权利要求15所述的浮点运算装置,其特征在于,所述指数运算模块还用于对第一和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果;
所述移位模块还用于根据第二指数结果对所有第一和结果进行移位对阶以得到多个第一和中间尾数;
所述和模块还用于对多个第一和中间尾数进行求和处理得到第二和结果;以及根据所述第二指数计算结果和所述第二和结果得到模型运算结果。
17.根据权利要求15所述的浮点运算装置,其特征在于,所述向量分组模块还用于将第一和向量分组得到多个第一子和向量,每个第一子和向量包括P个第一和结果,P为正整数;
所述指数运算模块还用于对每个子和向量中的所有第一和结果分别取出指数部分得到第二指数计算结果;
所述移位模块还用于根据所述第二指数计算结果对每个子和向量中的所有第一和结果进行移位对阶,得到相应的中间和向量;
所述和模块还用于将中间和向量中的所有元素进行求和处理得到相应的第二和结果;
所述移位模块还用于根据所述第二指数计算结果对所述第二和结果进行规格化处理,得到第三和结果,所述第三和结果为浮点数据;
所述和模块还用于将多个第三和结果进行浮点数求和得到模型运算结果。
18.一种电子设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-10中任一项所述的浮点运算方法。
19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-10中任一项所述的浮点运算方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410268795.8A CN118034642A (zh) | 2024-03-08 | 2024-03-08 | 浮点运算方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410268795.8A CN118034642A (zh) | 2024-03-08 | 2024-03-08 | 浮点运算方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118034642A true CN118034642A (zh) | 2024-05-14 |
Family
ID=90985734
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410268795.8A Pending CN118034642A (zh) | 2024-03-08 | 2024-03-08 | 浮点运算方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118034642A (zh) |
-
2024
- 2024-03-08 CN CN202410268795.8A patent/CN118034642A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4727508A (en) | Circuit for adding and/or subtracting numbers in logarithmic representation | |
EP0377837B1 (en) | Floating point unit having simultaneous multiply and add | |
CN1172539A (zh) | 利用截尾泰勒级数的对数/反对数转换器及其使用方法 | |
CN112596697A (zh) | 使用分解的分量数字的浮点乘法硬件 | |
US10949168B2 (en) | Compressing like-magnitude partial products in multiply accumulation | |
CN1173930A (zh) | 利用二次项的对数/反对数转换器及其使用方法 | |
US20200301995A1 (en) | Information processing apparatus, information processing method, and program | |
US20230056304A1 (en) | Using a low-bit-width dot product engine to sum high-bit-width numbers | |
CN114341796A (zh) | 带符号多字乘法器 | |
CN117472325B (zh) | 一种乘法处理器、运算处理方法、芯片及电子设备 | |
CN112463112B (zh) | 点积累加方法及装置 | |
CN114296682A (zh) | 浮点数处理装置、方法、电子设备、存储介质及芯片 | |
US11550544B2 (en) | Fused Multiply-Add operator for mixed precision floating-point numbers with correct rounding | |
US5278782A (en) | Square root operation device | |
EP3798929A1 (en) | Information processing apparatus, information processing method, and information processing program | |
KR20170138143A (ko) | 단일 곱셈-누산 방법 및 장치 | |
CN113625989A (zh) | 数据运算装置、方法、电子设备及存储介质 | |
CN117420982A (zh) | 包括融合乘累加器的芯片、设备及数据运算的控制方法 | |
CN118034642A (zh) | 浮点运算方法、装置、电子设备及存储介质 | |
CN116166217A (zh) | 执行浮点操作的系统和方法 | |
EP0738959A1 (en) | Method and apparatus for finding arctangents | |
US20210216867A1 (en) | Information processing apparatus, neural network computation program, and neural network computation method | |
CN114860193A (zh) | 一种用于计算Power函数的硬件运算电路及数据处理方法 | |
CN114265575A (zh) | 浮点数处理方法、装置、电子设备及存储介质 | |
JP7137067B2 (ja) | 演算処理装置、学習プログラム及び学習方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |