CN117472325B - 一种乘法处理器、运算处理方法、芯片及电子设备 - Google Patents

一种乘法处理器、运算处理方法、芯片及电子设备 Download PDF

Info

Publication number
CN117472325B
CN117472325B CN202311824599.6A CN202311824599A CN117472325B CN 117472325 B CN117472325 B CN 117472325B CN 202311824599 A CN202311824599 A CN 202311824599A CN 117472325 B CN117472325 B CN 117472325B
Authority
CN
China
Prior art keywords
multiplication
data
floating point
multiplier
point number
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.)
Active
Application number
CN202311824599.6A
Other languages
English (en)
Other versions
CN117472325A (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.)
Beijing Xiangdixian Computing Technology Co Ltd
Original Assignee
Beijing Xiangdixian Computing Technology 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 Beijing Xiangdixian Computing Technology Co Ltd filed Critical Beijing Xiangdixian Computing Technology Co Ltd
Priority to CN202311824599.6A priority Critical patent/CN117472325B/zh
Publication of CN117472325A publication Critical patent/CN117472325A/zh
Application granted granted Critical
Publication of CN117472325B publication Critical patent/CN117472325B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/485Adding; Subtracting
    • 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
    • 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
    • G06F7/575Basic 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

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

一种乘法处理器、运算处理方法、芯片及电子设备
技术领域
本公开涉及技术领域,尤其涉及一种乘法处理器、运算处理方法、芯片及电子设备。
背景技术
目前,高性能芯片一般需要支持多个精度的浮点数以及整数的乘加操作(融合乘加FMA,fused multiply-add,或乘加MAC,multiply-accumulate)和乘法操作(MUL、multiply)。
为了使芯片支持各种精度浮点数、整数的乘加操作以及乘法操作,需要在芯片上针对各种精度浮点数、整数分别部署乘加器、以及乘法器,进而会占用较多的芯片面积。
发明内容
本公开的目的是提供一种乘法处理器、运算处理方法、芯片及电子设备。
根据本公开的第一个方面,提供一种乘法处理器,包括预处理模块以及运算模块,所述运算模块包括若干乘法单元以及累加单元,其中,所述若干乘法单元输入要求的位宽均不大于芯片支持的最小精度浮点数尾数的位宽;
所述预处理模块,用于获取至少一组乘法运算数据;其中乘法运算数据为多种精度浮点数、整数的乘法器和乘加器的待执行乘法运算的数据;
针对每组乘法运算数据分别执行:识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合;其中,每个运算组合中包括一对位宽满足任一乘法单元输入要求的数据;将若干运算组合分别输入到对应的若干乘法单元中;
所述乘法单元,用于对输入的数据执行乘法运算;
所述累加单元,用于分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果。
在一种实施方式中,所述乘法处理器与多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器分别连接;
所述预处理模块,具体用于从多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器的分别获取乘法运算数据。
在一种实施方式中,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数;
所述预处理模块,具体用于识别待执行乘法运算的浮点数的浮点数类型,根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的尾数部分;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合;
所述乘法单元,用于对输入的数据执行乘法运算;
所述累加单元,具体用于针对每组乘法运算数据,分别对其尾数部分对应的乘法单元的输出结果进行累加运算,得到每组乘法运算数据的尾数部分的运算结果。
在一种实施方式中,所述预处理模块,还用于根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的指数部分和符号部分,将得到的指数部分和符号部分发送至该待执行乘法运算浮点数对应的乘加器或乘法器。
在一种实施方式中,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数的尾数部分;
所述预处理模块,具体用于识别尾数部分对应的待执行乘法运算的浮点数的类型;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合。
在一种实施方式中,所述累加单元对全部乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的最大精度浮点数尾数的乘法运算;
所述累加单元对部分乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的其他精度浮点数尾数或整数的乘法运算。
在一种实施方式中,所述预处理模块,还用于检测当前乘法单元的利用情况以及当前待运算的乘法运算数据的类型;
根据当前待运算的乘法运算数据类型、当前未使用的乘法单元输入要求的位宽,从当前待运算的乘法运算数据中选择出一组或多组目标乘法运算数据,以使运算模块中的若干乘法单元得到最大化利用;
所述预处理模块,具体用于将所述一组或多组目标乘法运算数据对应的运算组合分别输入到对应的若干乘法单元中;
所述累加单元,具体用于针对该一组或多组目标乘法运算数据中的每一组乘法运算数据,分别将其对应的若干乘法单元的输出结果进行累加运算,得到针对该一组或多组目标乘法运算数据的运算结果。
在一种实施方式中,所述预处理模块,还用于将每组乘法运算数据的运算结果发生至其对应的乘加器或乘法器,以使乘加器或乘法器利用该运算结果进行后续计算。
根据本公开的第二个方面,提供一种运算处理方法,应用于乘法处理器,所述乘法处理器包括预处理模块以及运算模块,所述运算模块包括若干乘法单元以及累加单元,其中,所述若干乘法单元输入要求的位宽均不大于芯片支持的最小精度浮点数尾数的位宽;所述方法包括:
利用所述预处理模块获取至少一组乘法运算数据;其中乘法运算数据为多种精度浮点数、整数的乘法器和乘加器的待执行乘法运算的数据;
针对每组乘法运算数据分别执行:识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合;其中,每个运算组合中包括一对位宽满足任一乘法单元输入要求的数据;将若干运算组合分别输入到对应的若干乘法单元中;
利用所述乘法单元对输入的数据执行乘法运算;
利用所述累加单元分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果。
在一种实施方式中,所述乘法处理器与多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器分别连接;所述利用所述预处理模块获取至少一组乘法运算数据,包括:
利用所述预处理模块从多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器的分别获取乘法运算数据。
在一种实施方式中,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数;
所述识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合,包括:
识别待执行乘法运算的浮点数的浮点数类型,根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的尾数部分;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合;
所述利用所述累加单元分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果,包括:
针对每组乘法运算数据,分别利用所述累加单元对尾数部分对应的乘法单元的输出结果进行累加运算,得到针对乘法运算数据的尾数部分的运算结果。
在一种实施方式中,方法还包括:
利用所述预处理模块根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的指数部分和符号部分,将得到的指数部分和符号部分发送至该待执行乘法运算浮点数对应的乘加器或乘法器。
在一种实施方式中,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数的尾数部分;
所述识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合 包括:
识别尾数部分对应的待执行乘法运算的浮点数的类型;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合。
在一种实施方式中,所述累加单元对全部乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的最大精度浮点数尾数的乘法运算;
所述累加单元对部分乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的其他精度浮点数尾数或整数的乘法运算。
在一种实施方式中,方法还包括:
利用预处理模块检测当前乘法单元的利用情况以及当前待运算的乘法运算数据的类型;
根据当前待运算的乘法运算数据类型、当前未使用的乘法单元输入要求的位宽,从当前待运算的乘法运算数据中选择出一组或多组目标乘法运算数据,以使运算模块中的若干乘法单元得到最大化利用;
所述将若干运算组合分别输入到对应的若干乘法单元中,包括:
将所述一组或多组目标乘法运算数据对应的运算组合分别输入到对应的若干乘法单元中;
所述利用所述累加单元分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果,包括:
利用所述累加单元针对该一组或多组目标乘法运算数据中的每一组乘法运算数据,分别将其对应的若干乘法单元的输出结果进行累加运算,得到针对该一组或多组目标乘法运算数据的运算结果。
在一种实施方式中,方法还包括:
利用所述预处理模块将每组乘法运算数据的运算结果发生至其对应的乘加器或乘法器,以使乘加器或乘法器利用该运算结果进行后续计算。
根据本公开的第三个方面,提供一种芯片,包括第一个方面任一实施方式中的乘法处理器。
根据本公开的第四个方面,提供一种电子设备,包括第三个方面的芯片。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
图1为本公开一个实施例提供的各种浮点数以及整数的格式示意图;
图2为本公开一个实施例提供的乘加器和乘法器运算过程的示意图;
图3为本公开一个实施例提供的一种芯片的结构示意图;
图4为本公开一个实施例提供的一种乘法处理器的结构示意图;
图5为本公开一个实施例提供的一种针对两个FP32的尾数进行处理的流程示意图;
图6为本公开一个实施例提供的一种针对两个TF32或FP16的尾数进行处理的流程示意图;
图7为本公开一个实施例提供的一种针对两个BF16的尾数或INT8进行处理的流程示意图;
图8为本公开一个实施例提供的一种运算处理方法的流程示意图。
具体实施方式
在介绍本公开实施例之前,应当说明的是:
本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。
应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
目前,高性能芯片一般需要支持多个精度的浮点数以及整数的乘加计算操作(融合乘加FMA,fused multiply-add,或乘加MAC,multiply-accumulate)和乘法计算操作(MUL、multiply)。
其中,浮点数是一种数字表示方式,采用浮点数可以表达各种实数,在计算机系统的发展过程中曾经提出过多种方法来表达实数,例如相对于浮点数的定点数,在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。比如,货币的表达就可以采用这种方式,如99.00或00.99可以用于表达具有小数点后有两位的货币。但是由于在定点数中,小数点的位置固定,不利于表达特别大或特别小的数,因此目前绝大多数计算机系统采用了浮点数的表达方式来表达实数。
在浮点数中,用一个尾数(Mantissa),一个基数(Base),一个指数(Exponent),以及一个表示正负的符号来表达实数。比如,121.1可以表达为1.211×102,其中,1.211为尾数,10为基数,2为指数,浮点数利用指数表达了浮动小数点的效果,从而可以表达更大范围的实数。
由于在计算机中数值的表达都是基于二进制的,因此在计算机中,浮点数的基数默认为2,另外,尾数的位数被称为浮点数的精度。例如浮点数1.001101×24的精度为7。
在IEEE (美国电气和电子工程师学会)中规定了多种浮点格式,常见的包括FP64、FP32、TF32、FP16、BF16。在人工智能与高性能计算中,除了需要对浮点数进行计算,还需要对整数进行计算,常用的整数通常为INT8。
上述常用的浮点数以及整数的形式如图1所示。所有精度的浮点数表示都被分为三个部分:符号位(sign,s),指数位(exponent,e)和尾数位(fraction,f或者mantissa,m)。借助这三个字段,二级制浮点数均可以表示成(-1)s×1.f×2e-b的形式,其中b为 bias,b的选取与e的位宽有关,即b=2length(e)-1-1。
以FP32为例,该浮点数的指数位为8位,符号位为1位,尾数位为24位(含一个隐藏位)。其他浮点数的形式以此类推。整数INT8由于不区分符号位、尾数位和指数位,因此INT8为8位。
上面介绍了浮点数以及整数的格式,下面介绍乘加操作和乘法操作。
本文所描述的乘加操作包括FMA与MAC,其中FMA与MAC的计算操作类似,都是用于实现A×B+C的计算,即两个乘数相乘后,与一个加数进行相加。其中A、B、C可以都是某个精度的浮点数或者都是整数,两者不同之处仅在于最初的MAC操作会先完成A×B的乘积,将其结果数值修约到N个比特(N=对应浮点数位宽),然后才将修约后的结果与C的相加,再把结果修约到N个比特,相当于执行了两次修约;若该MAC操作只进行一次修约则称为FMA,FMA直接完成A×B+C的操作,获得最终的完整结果后方才修约到N个比特。由于减少了数值修约次数,这种操作可以提高运算结果的精度,以及提高运算效率和速率。
针对浮点数的FMA或MAC运算过程如图2左图所示,大体上都可以归为如下步骤:
1、浮点数拆分:即将用于计算的浮点数A、B、C按照符号位SING_A/B/C、指数位EXP_A/B/C和尾数位MANT_A/B/C进行拆分,这些不同字段位将送入后面的计算部件进行计算。
2、指数比较:
1)指数相加,A和B相乘得到AB,AB的指数EXP_AB=EXP_A+EXP_B。
2)求阶差,EXP_A+EXP_B-EXP_C=EXP_COMP,得到AB和C的指数阶差EXP_COMP。
3、尾数相乘:AB的尾数为MANT_AB={1,MANT_A}×{1,MANT_B}, {}为位拼接符。
4、尾数对阶移位:AB和C相加(尾数相加),需要先使这两个数的指数相同,这就需要根据前面得到的阶差EXP_COMP对C的尾数{1, MANT_C}进行移位,得到MANT_SHIFT_C。
如果EXP_COMP≥0,则需要将尾数右移(小数点左移)|EXP_COMP|;
如果EXP_COMP<0,则需要将尾数左移(小数点右移)|EXP_COMP|。
这里通过一定的转换也可以将对阶移位都统一为右移。
5、尾数相加: MANT_ABC=MANT_AB+MANT_SHIFT_C。
6、前导零检测/预测:如果AB和C之间阶差较小(≤1)且AB和C的符号位不同时,MANT_ABC可能是一个小于0的非规格化数(如0.0001xxx…xxx)。
前导零检测就是检测MANT_ABC第一个非0值前有多少个0,LEAD_ZEROS。
前导零预测则可以在尾数相加的同时对MANT_ABC的前导0进行预测加速计算,前导零预测一般由一个输入编码逻辑和前导零检测逻辑组成。
7、归一化移位:根据前面得到的前导零LEAD_ZEROS,对MANT_ABC进行左移LEAD_ZEROS位,得到规格化表示的尾数MANT_RN(1.xxx…xxx),并对应调整MANT_ABC指数位。
8、舍入和结果生成,如果尾数比规定位数长,则需要进行舍入。舍入后生成最终的结果数据SING_Y、EXP_Y、MANT_Y。
9、例外处理,生成的数据可能是无效数NaN_Y或者无穷数INF_Y,需要检测出来并标识。
10、浮点数合并,将符号位、指数位和尾数位拼接合并,Y={SING_Y,EXP_Y,MANT_Y}。
针对浮点数的MUL运算过程如图2右图所示,大体上可以归为如下步骤:
1、浮点数拆分:即将用于计算的浮点数A、B按照符号位SING_A/B、指数位EXP_A/B和尾数位MANT_A/B进行拆分,这些不同字段位将送入后面的计算部件进行计算。;
2、指数相加:AB的指数为EXP_AB=EXP_A+EXP_B;
3、尾数相乘:AB的尾数为MANT_AB={1,MANT_A}×{1,MANT_B};
4、归一化指数调整:尾数相乘的结果可能不是规格化表示的数据,需要进行指数位的调整,如{1,MANT_A}×{1,MANT_B}产生进位时,需要将AB的指数加1。
5、舍入和结果生成,如果尾数比规定位数长,则需要进行舍入。舍入后生成最终的结果数据SING_Y、EXP_Y、MANT_Y。
6、例外处理,生成的数据可能是无效数NaN_Y或者无穷数INF_Y,需要检测出来并标识。
7、浮点数合并,将符号位、指数位和尾数位拼接合并,Y={SING_Y,EXP_Y,MANT_Y}。
整数的乘加操作和乘法操作的过程会简单很多,整数的乘加操作主要包括一个整数乘法计算和一个整数加法计算,整数的乘法操作主要包括一个整数乘法计算。
目前,如果芯片想要支持多种浮点数(例如4种)和整数的乘加操作以及乘法操作,则需要针对4种浮点数分别部署4个完整的乘加器,并针对整数部署1个完整的乘加器;同时需要针对4种浮点数分别部署4个完整的乘法器,并针对整数部署1个的完整的乘法器。可见,如果想要芯片实现上述计算操作,则需要部署较多的硬件在芯片上,会占据较多的芯片面积。
发明人在研发过程中发现,各种精度浮点数、整数的乘法器和乘加器中,都有硬件需要实现乘法运算,在浮点数的乘加器以及乘法器中,具体是指执行两个乘数A和B的尾数相乘的计算单元。在整数乘加器和乘法器中,是指执行两个乘数相乘的计算单元。并且实现乘法运算的计算单元由于硬件相对复杂,因此其在乘法器或乘加器的整体硬件中会占据较大比例的面积。如果将上述针对各种精度浮点数、整数的乘加操作和乘法操作中的乘法运算都使用统一的乘法处理器进行处理,则可以有效减小芯片的占用面积。如图3所示,为本公开提出的一种芯片的示意图,在芯片上,各种乘加器和乘法器(多种浮点数FP32、TF32、FP16、BF16、整数INT8的乘加器和乘法器)可以共享该乘法处理器,而无须在各个乘加器或乘法器中分别部署乘法计算单元,进而可以有效减小占用芯片的面积。另外,该乘法处理器还可以不独立于全部的乘加器或乘法器,而是位于某个乘加器或乘法器中,其他乘加器和乘法器都共用该乘法处理器,比如,该乘法处理器可以位于针对FP32的乘加器中。
基于上述发明构思,如图4所示,本公开提出一种乘法处理器,包括预处理模块410以及运算模块420,运算模块420包括若干乘法单元以及累加单元,其中,若干乘法单元输入要求的位宽均不大于芯片支持运算的最小精度浮点数尾数的位宽;即输入要求的位宽都小于或等于芯片所支持运算的最小精度浮点数的尾数位宽,例如芯片所需要处理最小精度浮点数通常为BF16,其尾数位8bit,则若干乘法单元输入要求的位宽都小于或等于8bit。若干乘法单元中的各个乘法单元输入要求的位宽可以是相同的也可以是不同的。累加单元可以根据运算需求对部分或全部乘法单元的输出结果进行累加计算。例如,一共存在20个乘法单元,累加单元可以根据运算需求一次对20个乘法单元输出的结果进行累加计算,也可以根据运算需求一次只对2个乘法单元输出结果进行累加计算。
在实际工作中,预处理模块,用于获取至少一组乘法运算数据;其中,乘法运算数据为多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器和整数乘法器的待执行乘法运算的数据;
针对每组乘法运算数据分别执行:识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合;其中,每个运算组合中包括一对位宽满足任一乘法单元输入要求的数据;将若干运算组合分别输入到对应的若干乘法单元中;
乘法单元,用于对输入的数据执行乘法运算;
累加单元,用于分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果。
采用上述方案,可以将各种精度浮点数、整数的乘加器和乘法器中的乘法运算都使用该乘法处理器进行处理,即各种乘法器和乘加器中的乘法运算都共享该乘法处理器中的乘法单元和累加单元,无须在各种乘加器和乘法器中分别部署多种乘法计算单元,因此有效减小了芯片的占用面积。
下面对预处理模块410执行的工作进行详细说明。
预处理模块,在获取乘法运算数据时可以采用以下方式。
预处理模块可以是从上层设备获取各个乘法器、乘加器的乘法运算数据。其中,每个乘法器或乘加器的乘法运算数据称为1组乘法运算数据。预处理模块可以接收多个乘加器或乘法器对应的多组乘法运算数据。
例如,各个乘法器或乘加器通常是基于上层处理器发送的指令和数据进行计算,如发送给BF16乘加器的数据为三个格式为BF16的浮点数A、B、C,指令用于指示BF16乘加器执行A×B+C的计算;又如,发送给INT8乘法器的数据为两个格式为INT8的整数D、E,指令用于指示INT8乘法器执行D×E的计算。因此,乘法处理器中的预处理模块可以直接从上层设备获取各个乘法器、乘加器的乘法运算数据。
另外,由于各个乘法器和乘加器获取了本地需要计算的数据,并且,乘法处理器与多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器分别连接,因此,乘法处理器可以从多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器的分别获取乘法运算数据。
如图2以及上文的相关内容可知,在浮点数、整数的乘加器和乘法器中,乘法运算主要是用于对两个乘数进行相乘。因此,预处理模块获取的乘法运算数据可以是多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器、整数乘法器的待执行乘法运算的数值。对于多种精度浮点数的乘加器、多种精度浮点数的乘法器而言,获取的乘法运算数据可以为待执行乘法运算的浮点数。对于整数乘加器、整数乘法器而言,获取的乘法运算数据为待执行乘法运算的整数。
例如,某个乘加器需要执行A×B+C的操作,那么预处理模块获取的乘法运算数据具体是A和B。某个乘法器需要执行D×E的操作,那么预处理模块获取的乘法运算数据具体是D和E。
另外,在浮点数的乘法器或乘加器中,乘法运算具体是用于对两个乘数的尾数进行相乘。因此,预处理模块针对浮点数的乘加器或乘法器,获取的乘法运算数据还可以是多种精度浮点数的乘加器、多种精度浮点数的乘法器获取的待执行乘法运算的浮点数的尾数部分。例如,某个浮点数乘加器需要执行A×B+C的操作,那么预处理模块获取的乘法运算数据具体是A和B的尾数。某个浮点数乘法器需要执行D×E的操作,那么预处理模块获取的乘法运算数据具体是D和E的尾数。如图2即上文的相关内容可知,每个浮点数的乘加器或乘法器中都需要有相应的硬件单元来对浮点数进行拆分,得到尾数位、指数位以及符号位。因此,预处理模块在从各个浮点数乘加器或浮点数乘法器获取待执行乘法运算的浮点数的尾数部分时,可以是直接获取各个浮点数乘加器或浮点数乘法器拆分出的尾数部分。
上文介绍了预处理模块获取乘法运算数据的过程,下面介绍预处理模块对获取的乘法运算数据进行处理的过程。
预处理模块在获取了一组乘法运算数据后,还需识别该乘法运算数据的数据类型,并根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合,将若干运算组合分别输入到对应的若干乘法单元中。
在一个实施方式中,如果乘法运算数据是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数,则预处理模块,具体用于识别待执行乘法运算的浮点数的浮点数类型,根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的尾数部分;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合。
在本实施方式中,乘法单元,用于对输入的数据执行乘法运算;
累加单元,具体用于针对每组乘法运算数据,分别对其尾数部分对应的乘法单元的输出结果进行累加运算,得到每组乘法运算数据的尾数部分的运算结果。
在本实施方式中,预处理模块获取的乘法运算数据是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数,为了能够对浮点数的尾数进行乘法运算,预处理模块还需要识别待执行乘法运算的浮点数的浮点数类型,根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的尾数部分。如,预处理模块识别出待处理的数据为FP32,则对其1-23位进行截取,得到尾数部分。在识别时,可以是预先存储各个浮点数的总位宽,进而根据各个浮点数的总位宽进行识别。例如,如果识别该浮点数的位宽为32,则确定该浮点数的类型为FP32。又例如,如果识别该浮点数的位宽为为19,则确定该浮点数的类型为TF32。
为了进一步减少芯片的占用面积,识别浮点数的尾数位、指数位以及符号位的的硬件也可以只部署在乘法处理器中,各个乘法器和乘加器中并不需要部署。这样,乘法处理器可以用于对各个浮点数乘法器、浮点数乘加器需要计算的浮点数进行识别。在这种方式中,预处理模块,还用于根据浮点数类型对待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的指数部分和符号部分,将得到的指数部分和符号部分发送至该待执行乘法运算浮点数对应的乘加器或乘法器,以使对应的乘加器或乘法器能够基于指数部分和符号部分进行相应计算。
在另一个实施方式中,预处理模块在获取了乘法运算数据后,如果乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器获取的待执行乘法运算的浮点数的尾数部分;则预处理模块,具体用于识别尾数部分对应的待执行乘法运算的浮点数的类型;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合;
在本实施方式中,乘法单元,用于对输入的数据执行乘法运算;
累加单元,具体用于对尾数部分对应的乘法单元的输出结果进行累加运算,得到针对乘法运算数据的运算结果。
在本实施方式中,预处理模块,可以根据尾数部分的发送端确定浮点数的类型,由于预处理模块是从各个精度浮点数的乘加器和乘法器获取的尾数,因此可以根据各个乘加器和乘法器处理的浮点数类型来确定尾数对应的浮点数类型。
在一个实施方式中,如果乘法运算数据是整数乘加器或整数乘法器的待执行乘法运算的整数,则预处理模块,具体用于对获取的整数进行拆分重组得到若干运算组合;将若干运算组合分别输入到对应的若干乘法单元中;
乘法单元,用于对输入的数据执行乘法运算;
累加单元,具体用于对乘法运算数据对应的乘法单元的输出结果进行累加运算,得到针对乘法运算数据的尾数部分的运算结果。
下面对预处理模块根据数据类型对乘法运算数据(浮点数的尾数或者整数)进行拆分重组得到若干运算组合的过程进行说明。
上文提到运算模块420包括若干乘法单元以及累加单元,其中,若干乘法单元输入要求的位宽均不大于芯片支持处理的最小精度浮点数尾数的位宽,累加单元用于对乘法单元的输出结果进行累加计算。将若干乘法单元的输入位宽设置为不大于芯片支持的最小精度浮点数尾数的位宽,目的是为了使芯片支持的最小精度浮点数的尾数也能够输入到乘法单元中进行计算,即各个乘法单元可以用于处理全部精度的浮点数,而一般的芯片支持的最小精度的浮点数为BF16,其尾数位为8bit,因此,乘法单元的输入位宽可以设置为不大于8bit。当然,不同芯片支持的最小精度浮点数可能不同,因此本公开对乘法单元的输入位宽的具体数值并不进行限定,只要小于等于该芯片支持的最小精度浮点数的尾数位宽即可。
为了使乘法处理器能够并行的处理各个乘法器、乘加器的乘法运算,乘法处理器中的乘法单元的数量可以部署的较多,进而可以并行处理全部乘法器、乘加器的中的乘法计算,而考虑到芯片大多数情况下并非需要并行的运行全部乘法器、乘加器,且部署的乘法单元的数据过多也会占用一定的芯片面积,基于此,本公开提出在一个具体的实施方式中,累加单元对全部乘法单元的计算结果进行累加计算,可以用于计算一笔该芯片所支持处理的最大精度浮点数尾数的乘法运算。累加单元对部分乘法单元的计算结果进行累加计算,可以用于计算一笔该芯片所支持处理的其他精度浮点数尾数或整数的乘法运算。
例如,如果芯片所需要处理的浮点数为FP32、TF32、FP16、BF16,需要处理的整数为INT8。该芯片所需要处理的最大精度浮点数为FP32,尾数位为24bit,需要处理的最小精度浮点数为BF16,尾数位为8bit。可以在运算模块中,配置4个8×8、8个8×4、4个4×4一共16个乘法单元。该乘法处理器针对不同的乘法运算数据可以执行以下操作。
(1)如果预处理模块获取的乘法运算数据是两个FP32的尾数,即两个24位的二进制数a、b,预处理模块在识别出是两个FP32的尾数后,计算过程可以如图5所示,即将24bit被乘数a拆分为4部分,a3=a[23:16],a2=a[15:12],a1=a[11:8],a0=a[7:0];
将24bit乘数b拆分为4部分,b3=b[23:16],b2=b[15:12],b1=b[11:8],b0=b[7:0];
在重组后得到的运算组合包括:a0b0、a3b0、a0b3、a3b3、a1b0、a2b0、a0b1、a3b1、a0b2、a3b2、a1b3、a2b3、a1b1、a2b1、a1b2、a2b2。
4个8×8的乘法单元并行计算:a0b0=a0×b0、a3b0=a3×b0、a0b3=a0×b3、a3b3=a3×b3;
8个8×4的乘法单元并行计算:a1b0=a1×b0、a2b0=a2×b0、a0b1=a0×b1、a3b1=a3×b1、a0b2=a0×b2、a3b2=a3×b2、a1b3=a1×b3、a2b3=a2×b3;
4个4×4的乘法单元并行计算:a1b1=a1×b1、a2b1=a2×b1、a1b2=a1×b2、a2b2=a2×b2;
累加单元实现:
{32`h0,a0b0}+{28`h0,a1b0,8`h0}+{24`h0,a2b0,12`h0}+{16`h0,a3b0,16`h0}+{28`h0,a0b1,8`h0}+{24`h0,a1b1,16`h0}+{20`h0,a2b1,20`h0}+{12`h0,a3b1,24`h0}+{24`h0,a0b2,12`h0}+{20`h0,a1b2,20`h0}+{16`h0,a2b2,24`h0}+{8`h0,a3b2,28`h0}+{16`h0,a0b3,8`h16}+{12`h0,a1b3,8`h24}+{8`h0,a2b3,28`h0}+{a3b3,32`h0},得到a×b的最终结果,其中{}为位拼接符,n`h0表示n位0。
(2)如果获取的乘法运算数据是两个TF32或FP16的尾数(都为11bit),预处理模块在识别出是两个TF32或FP16的尾数后,即两个11位的二进制数a、b,可以先将a和b分别在高位补0,得到a0、b0(两个12位的二进制数),后续的处理过程可以如图6所示:
将12bit被乘数a0拆分为2部分,a01=a0[11:8],a00=a0[7:0];
将12bit被乘数b0拆分为2部分,b01=b0[11:8],b00=b0[7:0];
在重组后得到的运算组合包括:a00b00、a01b00、a00b01、a01b01。
1个8×8的乘法单元计算:a00b00=a00×b00;
2个8×4的乘法单元并行计算:a01b00=a01×b00、a00b01=a00×b01;
1个4×4的乘法单元计算:a01b01=a01×b01;
累加单元实现:
{8`h0,a00b00}+{4`h0,a01b00,8`h0}+{4`h0,a00b01,8`h0}+{a01b01,16`h0}得到最终a0xb0的结果,其中{}为位拼接符,n`h0表示n位0。
同理,用剩下的3个8×8、6个8×4、3个4×4乘法单元和累加单元可以实现a1×b1、a2×b2、a3×b3,其中a1、b1、a2、b2、a3、b3均为TF32或FP16。即采用全部乘法单元和累加单元可以同时实现4个TF32/FP16乘法器、乘加器中的乘法运算。
(3)如果获取的乘法运算数据是两个BF16的尾数或INT8 ,预处理模块在识别出是两个BF16的尾数或两个INT8后,处理过程可以如图7所示:
一种方式为图7中针对a0和b0的过程:a0和b0均为8bit,由于运算模块中的乘法单元包括8×8的乘法单元,因此,对a0、b0进行拆分重组可以理解为直接得到一组运算组合a0b0,即对a0、b0的拆分结果就是其自身。然后将a0b0输入到8×8的乘法单元中,直接得到a0b0的结果,由于只用了一个乘法单元,因此,累加运算可以理解为对该一个乘法单元的输出结果进行累加。
另一种方式为图7中针对a1×b1的过程:将8bit的a1拆分为2部分,a11=a1[7:4],a10=a1[3:0],拆分重组后得到的运算组合包括a10b1、a11b1,累加单元实现a1×b1={4`h0,a10b1}+{a11b1,4`h0}。
又一种方式为图7中a4×b4的过程:将8bit的a4拆分为2部分,a41=a4[7:4],a40=a4[3:0], 将8bit的b4分为2部分,b41=b4[7:4],b40=b4[3:0],拆分重组后得到的运算组合包括a40b40、a41b40、a40b41、a41b41,用4个4×4乘法单元实现a40b40=a40×b40、a41b40=a41×b40,a40b41=a40×b41、a41b41=a41×b41,累加单元实现:a4×b4
={8`h0,a40b40}+{4`h0,a41b40,4`h0}+{4`h0,a40b41,4`h0}+{a41b41,8`h0}。
同理,如图7所示,利用目前已有的乘法器可以同时处理9组BF16的尾数或两个INT8的乘法运算。
即a0和b0、a2和b2、a6和b6、a8和b8均为8bit,用4个8×8的乘法单元并行计算a0b0=a0×b0、a2b2=a2×b2、a6b6=a6×b6、a8b8=a8×b8;
将8bit的a1拆分为2部分,a11=a1[7:4],a10=a1[3:0],用2个8×4乘法单元实现a10b1=a10×b1、a11b1=a11×b1,累加单元实现a1×b1={4`h0,a10b1}+{a11b1,4`h0};
将8bit的b3拆分为2部分,b31=b3[7:4],b30=b3[3:0],用2个8×4乘法单元实现a3b30=a3×b30、a3b31=a3×b31,累加单元实现a3×b3={4`h0,a3b30}+{a3b31,4`h0};
将8bit的b5拆分为2部分,b51=b5[7:4],b50=b5[3:0],用2个8×4乘法单元实现a5b50=a5×b50、a5b51=a5×b51,累加单元实现a5×b5={4`h0,a5b50}+{a5b51,4`h0};
将8bit的a7拆分为2部分,a71=a7[7:4],a70=a7[3:0],用2个8×4乘法单元实现a70b7=a70×b7、a71b7=a71×b7,累加单元实现a7×b7={4`h0,a70b7}+{a71b7,4`h0};
将8bit的a4拆分为2部分,a41=a4[7:4],a40=a4[3:0], 将8bit的b4拆分为2部分,b41=b4[7:4],b40=b4[3:0],用4个4×4乘法单元实现a40b40=a40×b40、a41b40=a41×b40,a40b41=a40×b41、a41b41=a41×b41,
累加单元实现:a4×b4={8`h0,a40b40}+{4`h0,a41b40,4`h0}+{4`h0,a40b41,4`h0}+{a41b41,8`h0}。
可以理解的是上述内容为在一个具体的场景下,即在芯片所需要处理的浮点数为FP32、TF32、FP16、BF16,需要处理的整数为INT8的场景下,根据该处理需求设置的乘法器类型以及拆分组合方式。当芯片所需处理的浮点数类型是其他类型时,还可以是其他类型的乘法器和拆分组合方式,本公开对此不再进行赘述,只要满足这样的设置:累加单元对全部乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的最大精度浮点数尾数的乘法运算。累加单元对部分乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的其他精度浮点数尾数或整数的乘法运算。那么就均在本公开提出的发明构思之内。采用这种方式,在乘法处理器中,全部乘法单元同时工作可以用于处理一笔最大精度浮点数尾数的乘法运算,同时部分乘法单元同时工作还可以处理其他精度浮点数和整数的乘法运算,可以最大程度的节约芯片的面积。
上文提到,预处理模块会获取不止一组乘法运算数据,即会同时获取多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器的待执行乘法运算的数据,为了提高运算模块中若干乘法单元的利用率,并且最大程度提升并行处理能力。在一个实施方式中,预处理模块,还用于检测当前乘法单元的利用情况以及当前待运算的乘法运算数据的类型;
根据当前待运算的乘法运算数据类型、当前未使用的乘法单元输入要求的位宽,从当前待运算的乘法运算数据中选择出一组或多组目标乘法运算数据,以使运算模块中的若干乘法单元得到最大化利用;
所述预处理模块,具体用于,将所述一组或多组目标乘法运算数据对应的运算组合分别输入到对应的若干乘法单元中;
所述累加单元,具体用于针对该一组或多组目标乘法运算数据中的每一组乘法运算数据,分别将其对应的若干乘法单元的输出结果进行累加运算,得到针对该一组或多组目标乘法运算数据的运算结果。
采用上述方式,可以充分利用运算模块中的若干乘法单元,避免计算资源的浪费,同时提升并行处理能力。
以上述芯片所需要处理的浮点数包括FP32、TF32、FP16、BF16,需要处理的整数为INT8,在运算模块中,配置4个8×8、8个8×4、4个4×4一共16个乘法单元为例。
例如,如果预处理模块获取了3组乘法运算数据,一组为:两个FP32的尾数,一组为两个FP16的尾数,一组为两个TF32的尾数。并且检测到当前乘法单元都处于空闲状态。
由于对两个FP32的尾数的乘法运算可以占用运算模块中的全部乘法单元,因此可以选择该组FP32的尾数为目标乘法运算数据,将该目标乘法运算数据按照上文中描述的方式拆分组合后输入到全部乘法单元中进行运算。
又例如,如果预处理模块获取了3组乘法运算数据,一组为:两个FP32的尾数,一组为两个FP16的尾数,一组为两个TF32的尾数。并且检测到当前只有一个8×8的乘法单元、2个8×4的乘法单元、1个4×4的乘法单元都处于空闲状态。由于处于空闲状态的乘法单元可以完成一组FP16的尾数或一组TF32的尾数的乘法运算,而不能完成一组FP32的尾数的乘法计算,因此,可以选择一组FP16的尾数或一组TF32的尾数作为目标乘法运算数据按照上文中描述的方式拆分组合后输入到全部空闲的乘法单元中进行运算。
再例如,如果预处理模块获取了8组乘法运算数据,1组为:两个FP16的尾数,1组为两个TF32的尾数,6组为两个INT8整数,并且检测到当前乘法单元都处于空闲状态。
由于实现一组FP16的尾数或一组TF32的尾数的乘法运算同时需要1个8×8的乘法单元、2个8×4的乘法单元和1个4×4的乘法单元;实现一个整数的乘法运算,需要1个8×8的乘法单元、2个8×4的乘法单元或者4个4×4的乘法单元。
由于运算模块中共包括4个8×8、8个8×4、4个4×4一共16个乘法单元。因此,运算模块如果同时执行一组FP16的尾数(占用1个8×8的乘法单元、2个8×4的乘法单元和1个4×4的乘法单元)、一组TF32的尾数的乘法运算(占用1个8×8的乘法单元、2个8×4的乘法单元和1个4×4的乘法单元),和4组整数的乘法运算(占用2个8×8、4个84),则会剩余2个4×4的乘法单元处于空闲状态。运算模块如果同时执行一组FP16的尾数(占用1个8×8的乘法单元、2个8×4的乘法单元和1个4×4的乘法单元)和6组整数的乘法运算(占用3个8×8的乘法单元、6个8/>4的乘法单元),则会剩余3个4×4的乘法单元处于空闲状态。为了使运算模块中的若干乘法单元得到最大化利用,则选择一组FP16的尾数、一组TF32的尾数、4组整数作为目标乘法运算数据按照上文中描述的方式拆分组合后输入到全部空闲的乘法单元中进行运算。
可以理解的是,乘法处理器采用上述任一实施方式,得到了每组乘法运算数据的运算结果后,预处理模块还需要将每组乘法运算数据的运算结果发送至其对应的乘加器或乘法器,以使乘加器或乘法器利用该运算结果进行后续计算得到最终的乘加操作的结果或乘法操作的结果。
如图8所示,基于相同的发明构思,本公开还提供一种运算处理方法,应用于乘法处理器,所述乘法处理器包括预处理模块以及运算模块,所述运算模块包括若干乘法单元以及累加单元,其中,所述若干乘法单元输入要求的位宽均不大于芯片支持的最小精度浮点数尾数的位宽;所述方法包括:
S801,利用所述预处理模块获取至少一组乘法运算数据;其中乘法运算数据为多种精度浮点数、整数的乘法器和乘加器的待执行乘法运算的数据;
S802,针对每组乘法运算数据分别执行:识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合;其中,每个运算组合中包括一对位宽满足任一乘法单元输入要求的数据;将若干运算组合分别输入到对应的若干乘法单元中;
S803,利用所述乘法单元对输入的数据执行乘法运算;
S804,利用所述累加单元分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果。
在一种实施方式中,所述乘法处理器与多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器分别连接;
该S801,具体包括:
利用所述预处理模块从多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器的分别获取乘法运算数据。
在一种实施方式中,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数;
该S802,具体包括:
识别待执行乘法运算的浮点数的浮点数类型,根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的尾数部分;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合;
该S804,具体包括:
针对每组乘法运算数据,分别利用所述累加单元对尾数部分对应的乘法单元的输出结果进行累加运算,得到针对乘法运算数据的尾数部分的运算结果。
在一种实施方式中,方法还包括:
利用所述预处理模块根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的指数部分和符号部分,将得到的指数部分和符号部分发送至该待执行乘法运算浮点数对应的乘加器或乘法器。
在一种实施方式中,乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数的尾数部分;
该S802,具体包括:
识别尾数部分对应的待执行乘法运算的浮点数的类型;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合。
在一种实施方式中,所述累加单元对全部乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的最大精度浮点数尾数的乘法运算;
所述累加单元对部分乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的其他精度浮点数尾数或整数的乘法运算。
在一种实施方式中,方法还包括:
利用预处理模块检测当前乘法单元的利用情况以及当前待运算的乘法运算数据的类型;
根据当前待运算的乘法运算数据类型、当前未使用的乘法单元输入要求的位宽,从当前待运算的乘法运算数据中选择出一组或多组目标乘法运算数据,以使运算模块中的若干乘法单元得到最大化利用;
该S803,具体包括:
将所述一组或多组目标乘法运算数据对应的运算组合分别输入到对应的若干乘法单元中;
该S804,具体包括:利用所述累加单元针对该一组或多组目标乘法运算数据中的每一组乘法运算数据,分别将其对应的若干乘法单元的输出结果进行累加运算,得到针对该一组或多组目标乘法运算数据的运算结果。
在一种实施方式中,方法还包括:
利用所述预处理模块将每组乘法运算数据的运算结果发生至其对应的乘加器或乘法器,以使乘加器或乘法器利用该运算结果进行后续计算。
本公开实施例还提供一种芯片,该芯片包括上述乘法处理器。其中,芯片可以是GPU、TPU、CPU等,本公开对此不进行限定。
本公开实施例还提供一种电子设备,该电子设备包括上述的芯片。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机等。
以上尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改,本领域的技术人员在不脱离本公开的精神和范围的前提下,做出的变更和修改也应视为本公开实施例的保护范围。

Claims (16)

1.一种乘法处理器,部署于芯片上,所述芯片支持多种精度浮点数、整数的乘法和乘加运算;所述乘法处理器包括预处理模块以及运算模块,所述运算模块包括若干乘法单元以及累加单元,其中,所述若干乘法单元输入要求的位宽不全相同,且均不大于芯片支持的最小精度浮点数尾数的位宽;
所述预处理模块,用于获取至少一组乘法运算数据;其中乘法运算数据为多种精度浮点数、整数的乘法器和乘加器的待执行乘法运算的数据;
针对每组乘法运算数据分别执行:识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合;其中,每个运算组合中包括一对位宽满足任一乘法单元输入要求的数据;将若干运算组合分别输入到对应的若干乘法单元中;
所述乘法单元,用于对输入的数据执行乘法运算;
所述累加单元,用于分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果,其中,所述累加单元对全部乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的最大精度浮点数尾数的乘法运算;所述累加单元对部分乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的其他精度浮点数尾数或整数的乘法运算。
2.根据权利要求1所述的乘法处理器,所述乘法处理器与多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器分别连接;
所述预处理模块,具体用于从多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器的分别获取乘法运算数据。
3.根据权利要求2所述的乘法处理器,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数;
所述预处理模块,具体用于识别待执行乘法运算的浮点数的浮点数类型,根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的尾数部分;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合;
所述乘法单元,用于对输入的数据执行乘法运算;
所述累加单元,具体用于针对每组乘法运算数据,分别对其尾数部分对应的乘法单元的输出结果进行累加运算,得到每组乘法运算数据的尾数部分的运算结果。
4.根据权利要求3所述的乘法处理器,
所述预处理模块,还用于根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的指数部分和符号部分,将得到的指数部分和符号部分发送至该待执行乘法运算浮点数对应的乘加器或乘法器。
5.根据权利要求2所述的乘法处理器,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数的尾数部分;
所述预处理模块,具体用于识别尾数部分对应的待执行乘法运算的浮点数的类型;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合。
6.根据权利要求1所述的乘法处理器,
所述预处理模块,还用于检测当前乘法单元的利用情况以及当前待运算的乘法运算数据的类型;
根据当前待运算的乘法运算数据类型、当前未使用的乘法单元输入要求的位宽,从当前待运算的乘法运算数据中选择出一组或多组目标乘法运算数据,以使运算模块中的若干乘法单元得到最大化利用;
所述预处理模块,具体用于将所述一组或多组目标乘法运算数据对应的运算组合分别输入到对应的若干乘法单元中;
所述累加单元,具体用于针对该一组或多组目标乘法运算数据中的每一组乘法运算数据,分别将其对应的若干乘法单元的输出结果进行累加运算,得到针对该一组或多组目标乘法运算数据的运算结果。
7.根据权利要求1所述的乘法处理器,
所述预处理模块,还用于将每组乘法运算数据的运算结果发送至其对应的乘加器或乘法器,以使乘加器或乘法器利用该运算结果进行后续计算。
8.一种运算处理方法,应用于乘法处理器,部署于芯片上,所述芯片支持多种精度浮点数、整数的乘法和乘加运算;所述乘法处理器包括预处理模块以及运算模块,所述运算模块包括若干乘法单元以及累加单元,其中,所述若干乘法单元输入要求的位宽不全相同,且均不大于芯片支持的最小精度浮点数尾数的位宽;所述方法包括:
利用所述预处理模块获取至少一组乘法运算数据;其中乘法运算数据为多种精度浮点数、整数的乘法器和乘加器的待执行乘法运算的数据;
针对每组乘法运算数据分别执行:识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合;其中,每个运算组合中包括一对位宽满足任一乘法单元输入要求的数据;将若干运算组合分别输入到对应的若干乘法单元中;
利用所述乘法单元对输入的数据执行乘法运算;
利用所述累加单元分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果,其中,所述累加单元对全部乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的最大精度浮点数尾数的乘法运算;所述累加单元对部分乘法单元的计算结果进行累加计算,用于计算一笔该芯片所支持处理的其他精度浮点数尾数或整数的乘法运算。
9.根据权利要求8所述的方法,所述乘法处理器与多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器分别连接;所述利用所述预处理模块获取至少一组乘法运算数据,包括:
利用所述预处理模块从多种精度浮点数的乘加器、多种精度浮点数的乘法器、整数乘加器以及整数乘法器的分别获取乘法运算数据。
10.根据权利要求9所述的方法,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数;
所述识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合,包括:
识别待执行乘法运算的浮点数的浮点数类型,根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的尾数部分;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合;
所述利用所述累加单元分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果,包括:
针对每组乘法运算数据,分别利用所述累加单元对尾数部分对应的乘法单元的输出结果进行累加运算,得到针对乘法运算数据的尾数部分的运算结果。
11.根据权利要求10所述的方法,还包括:
利用所述预处理模块根据浮点数类型对该待执行乘法运算的浮点数进行截取,得到该待执行乘法运算的浮点数的指数部分和符号部分,将得到的指数部分和符号部分发送至该待执行乘法运算浮点数对应的乘加器或乘法器。
12.根据权利要求11所述的方法,所述乘法运算数据具体是多种精度浮点数的乘加器、多种精度浮点数的乘法器的待执行乘法运算的浮点数的尾数部分;
所述识别该组乘法运算数据的数据类型,根据数据类型对获取的乘法运算数据进行拆分重组得到若干运算组合 包括:
识别尾数部分对应的待执行乘法运算的浮点数的类型;根据浮点数类型对获取的尾数部分进行拆分重组得到若干运算组合。
13.根据权利要求8所述的方法,还包括:
利用预处理模块检测当前乘法单元的利用情况以及当前待运算的乘法运算数据的类型;
根据当前待运算的乘法运算数据类型、当前未使用的乘法单元输入要求的位宽,从当前待运算的乘法运算数据中选择出一组或多组目标乘法运算数据,以使运算模块中的若干乘法单元得到最大化利用;
所述将若干运算组合分别输入到对应的若干乘法单元中,包括:
将所述一组或多组目标乘法运算数据对应的运算组合分别输入到对应的若干乘法单元中;
所述利用所述累加单元分别对每组乘法运算数据对应的若干乘法单元的输出结果进行累加运算,得到每组乘法运算数据的运算结果,包括:
利用所述累加单元针对该一组或多组目标乘法运算数据中的每一组乘法运算数据,分别将其对应的若干乘法单元的输出结果进行累加运算,得到针对该一组或多组目标乘法运算数据的运算结果。
14.根据权利要求8所述的方法,还包括:
利用所述预处理模块将每组乘法运算数据的运算结果发送至其对应的乘加器或乘法器,以使乘加器或乘法器利用该运算结果进行后续计算。
15.一种芯片,包括权利要求1-7任一项所述的乘法处理器。
16.一种电子设备,包括权利要求15所述的芯片。
CN202311824599.6A 2023-12-28 2023-12-28 一种乘法处理器、运算处理方法、芯片及电子设备 Active CN117472325B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311824599.6A CN117472325B (zh) 2023-12-28 2023-12-28 一种乘法处理器、运算处理方法、芯片及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311824599.6A CN117472325B (zh) 2023-12-28 2023-12-28 一种乘法处理器、运算处理方法、芯片及电子设备

Publications (2)

Publication Number Publication Date
CN117472325A CN117472325A (zh) 2024-01-30
CN117472325B true CN117472325B (zh) 2024-04-30

Family

ID=89638219

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311824599.6A Active CN117472325B (zh) 2023-12-28 2023-12-28 一种乘法处理器、运算处理方法、芯片及电子设备

Country Status (1)

Country Link
CN (1) CN117472325B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117785113B (zh) * 2024-02-07 2024-05-17 北京壁仞科技开发有限公司 计算装置及方法、电子设备和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105607889A (zh) * 2015-10-29 2016-05-25 中国人民解放军国防科学技术大学 Gpdsp共享乘法器结构的定点浮点运算部件
CN114868108A (zh) * 2019-11-27 2022-08-05 亚马逊技术有限公司 组合多个整数和浮点数据类型的脉动阵列部件
CN116450086A (zh) * 2022-01-05 2023-07-18 腾讯科技(深圳)有限公司 包括乘累加器的芯片、终端和控制方法
CN117111881A (zh) * 2023-07-26 2023-11-24 深存科技(无锡)有限公司 支持多输入多格式的混合精度乘加运算器

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111767025B (zh) * 2020-08-04 2023-11-21 腾讯科技(深圳)有限公司 包括乘累加器的芯片、终端及浮点运算的控制方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105607889A (zh) * 2015-10-29 2016-05-25 中国人民解放军国防科学技术大学 Gpdsp共享乘法器结构的定点浮点运算部件
CN114868108A (zh) * 2019-11-27 2022-08-05 亚马逊技术有限公司 组合多个整数和浮点数据类型的脉动阵列部件
CN116450086A (zh) * 2022-01-05 2023-07-18 腾讯科技(深圳)有限公司 包括乘累加器的芯片、终端和控制方法
CN117111881A (zh) * 2023-07-26 2023-11-24 深存科技(无锡)有限公司 支持多输入多格式的混合精度乘加运算器

Also Published As

Publication number Publication date
CN117472325A (zh) 2024-01-30

Similar Documents

Publication Publication Date Title
CN107168678B (zh) 一种乘加计算装置及浮点乘加计算方法
CN110221808B (zh) 向量乘加运算的预处理方法、乘加器及计算机可读介质
CN112740171A (zh) 乘法和累加电路
CN110689125A (zh) 计算装置
CN117472325B (zh) 一种乘法处理器、运算处理方法、芯片及电子设备
US9274750B2 (en) System and method for signal processing in digital signal processors
KR20120053343A (ko) 부동 소수점의 복합 연산장치 및 그 연산방법
JPH02196328A (ja) 浮動小数点演算装置
KR20080055985A (ko) 선택가능 준정밀도를 가진 부동―소수점 프로세서
TWI763079B (zh) 用於浮點運算的乘法器、方法、積體電路晶片和計算裝置
US10949168B2 (en) Compressing like-magnitude partial products in multiply accumulation
CN112860220B (zh) 一种适用于多精度计算的可重构浮点乘加运算单元及方法
CN113076083B (zh) 数据乘加运算电路
CN112712172B (zh) 用于神经网络运算的计算装置、方法、集成电路和设备
CN116627379A (zh) 可重构的支持多精度浮点或定点运算的方法及系统
US20240118868A1 (en) Multiplier block for block floating point and floating point values
CN117873427A (zh) 一种算术逻辑单元、运算处理方法、芯片及电子设备
Zhang et al. Low-Cost Multiple-Precision Multiplication Unit Design For Deep Learning
Raghunath et al. A compact carry-save multiplier architecture and its applications
Gonzalez-Navarro et al. A binary integer decimal-based multiplier for decimal floating-point arithmetic
EP4231134A1 (en) Method and system for calculating dot products
US20240069865A1 (en) Fractional logarithmic number system adder
CN112416295B (zh) 用于浮点数据、张量数据运算的运算器
EP4206902A1 (en) Operation unit, method and apparatus for calculating floating-point number, and chip and calculation device
US20240176588A1 (en) Operation unit, processing device, and operation method of processing device

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