CN117111881B - 支持多输入多格式的混合精度乘加运算器 - Google Patents
支持多输入多格式的混合精度乘加运算器 Download PDFInfo
- Publication number
- CN117111881B CN117111881B CN202310924106.XA CN202310924106A CN117111881B CN 117111881 B CN117111881 B CN 117111881B CN 202310924106 A CN202310924106 A CN 202310924106A CN 117111881 B CN117111881 B CN 117111881B
- Authority
- CN
- China
- Prior art keywords
- data
- bit
- circuit
- multiplication
- 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.)
- Active
Links
- 238000004364 calculation method Methods 0.000 claims abstract description 117
- 238000010606 normalization Methods 0.000 claims abstract description 16
- 230000008521 reorganization Effects 0.000 claims abstract description 15
- 230000000295 complement effect Effects 0.000 claims description 11
- 230000000694 effects Effects 0.000 abstract description 4
- 238000000034 method Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 9
- 238000013528 artificial neural network Methods 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 101100403145 Danio rerio mul1a gene Proteins 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- ROXBGBWUWZTYLZ-UHFFFAOYSA-N [6-[[10-formyl-5,14-dihydroxy-13-methyl-17-(5-oxo-2h-furan-3-yl)-2,3,4,6,7,8,9,11,12,15,16,17-dodecahydro-1h-cyclopenta[a]phenanthren-3-yl]oxy]-4-methoxy-2-methyloxan-3-yl] 4-[2-(4-azido-3-iodophenyl)ethylamino]-4-oxobutanoate Chemical compound O1C(C)C(OC(=O)CCC(=O)NCCC=2C=C(I)C(N=[N+]=[N-])=CC=2)C(OC)CC1OC(CC1(O)CCC2C3(O)CC4)CCC1(C=O)C2CCC3(C)C4C1=CC(=O)OC1 ROXBGBWUWZTYLZ-UHFFFAOYSA-N 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Abstract
本申请公开支持多输入多格式的混合精度乘加运算器,涉及芯片设计领域,乘法器组包括窄位乘法电路,根据比特数据执行整数或浮点数尾数部分的乘法计算输出计算结果;指数运算电路基于计算模式执行浮点数指数部分的计算输出指数计算结果;数据重组电路连接乘法器组和指数运算电路的输出,对多组乘法与指数计算结果进行数据重组;加法器连接数据重组电路的输出,对输出的重组数据进行数据拼接求和获得拼接数据;数据规格化电路连接指数运算电路和加法器的输出,将拼接数据和指数计算结果规格化为标准数据类型。该方案通过复用窄八位乘法器实现多输入多格式数据的乘法运算,且实现不同精度输出,达到节省电路资源和统一数据通路的效果。
Description
技术领域
本申请涉及芯片设计领域,特别涉及一种支持多输入多格式的混合精度乘加运算器。
背景技术
在现代化社会和工业中,人工智能的使用可以大幅提高效率和降低成本,比如互联网、大数据、物联网、自动驾驶等领域。但人工智能处理的对象和数据日益广泛,伴随的挑战是不同对象的输入数据和中间计算数据的格式随着应用场景的不同而多样化。在绝大多数场景下,包括图像、视频、语言等对象的人工智能计算中,卷积计算和矩阵计算是最基础的计算操作,这两种计算的最底层运算是乘法和加法的融合运算,也即乘加计算。因此在高性能、低功耗的神经网络加速器集成电路的设计(包括FPGA/IP/SOC/AISC)中,支持多种数据格式(包括整数和浮点数)输入的乘加融合计算是一种关键设计。
目前主流设计中为了加快计算速度和节省资源需求,电路会设计成只支持整数(包括8位,12位,或16位整数)运算。为了支持不同宽度的整数的乘法和加法计算,设计往往会采用独立的计算电路和统一的计算通路。独立的计算电路分别处理8位,12位,16位整数的乘法和加法;
统一的计算通路是用宽位(16位)计算电路来计算窄位(8位或12位)的乘法和加法。这些设计都会导致电路面积或资源开销大,从而对芯片成本造成负面影响。
发明内容
本申请提供一种支持多输入多格式的混合精度乘加运算器,解决面对多类型运算时设计电路面积和资源开销增大的问题。支持多输入多格式的混合精度乘加运算器包括:
乘法器组,包括若干窄位乘法电路,根据计算模式分配的比特数据执行整数或浮点数尾数部分的乘法计算,并输出多组乘法计算结果;计算模式根据输入乘加运算器中运算数据的类型确定,将运算数据拆分输入到所述乘法器组中的比特数据;
指数运算电路,基于计算模式执行浮点数指数部分的计算操作,并输出指数计算结果;
数据重组电路,分别连接所述乘法器组和所述指数运算电路的输出,基于计算模式对多组乘法计算结果,或对多组乘法计算结果与指数计算结果进行数据重组;
加法器电路,连接所述数据重组电路的输出,对输出的重组数据进行数据拼接求和,获得拼接数据;
数据规格化电路,分别连接所述指数运算电路和所述加法器电路的输出,基于计算模式将所述拼接数据,或对所述拼接数据和指数计算结果规格化为标准数据类型。
进一步地,乘加运算器总输入为两组32比特位数据,计算模式包括每组4个8位整数乘加计算、每组1个12位整数乘加计算、每组2个16位整数乘加计算、每组1个16位标准浮点数乘加计算、每组2个16位AI浮点数乘加计算、每组1个19位AI浮点数乘加计算。
进一步地,所述乘法器组包括4个相同的窄八位乘法电路,分别为第一乘法电路、第二乘法电路、第三乘法电路和第四乘法电路;每个乘法器电路输入两个8位数据段,输出的乘法计算结果为16位数据;
当运算数据为整数类型时,输入所述乘法电路的是各个整数的整数数据;
当运算数据为浮点类型时,输入所述乘法电路的是各个浮点数的尾数数据,输入所述指数运算电路的是各个浮点数的指数数据。
进一步地,整数类型和浮点数分别分为有符号数据和无符号数据;
所述乘法电路包括两组相同的符号处理模块、8位乘法器、异或门和第一数据选择器;所述符号处理模块输入8位数据段,输出处理后的有效数据段,所述有效数据段输入所述8位乘法器进行乘法运算,输出两个乘积结果;其中的第一乘积结果为乘积结果的最高位数据,第二乘积结果为低15位数据;
异或门输入两组比特数据的符号位数据,异或结果和第一乘积结果输入到所述第一数据选择器,所述第一数据选择器的输出为乘法计算结果的最高位数据,和所述第二乘积结果组成16位的乘法计算结果。
进一步地,每组所述符号处理模块包括相同的补码处理单元和第二数据选择器,所述补码处理单元的输入去除符号位的低7位数据,输出补码数据;所述第二数据选择器输入补码数据和8位数据段,输出所述有效数据段;
所述第一数据选择器和所述第二数据选择器基于计算模式确定乘法计算结果的最高位数据;当输入的8位数据段是有符号数据时,将异或门的异或结果作为所述第一数据选择器的输出,将原码数据作为所述第二数据选择器的输出;当输入的8位数据段是无符号数据时,将所述第一乘积结果作为所述第一数据选择器的输出,将8位数据段作为所述第二数据选择器的输出。
进一步地,所述指数运算电路输入浮点数据的指数数据位,包括最大值确定单元、绝对值计算单元和指数求和单元;所述最大值确定单元用于确定指数最大的运算数据,并输入所述绝对值计算单元;所述绝对值计算单元用于计算每个指数和最大指数的绝对差值,并输入所述数据重组电路;所述指数求和单元用于计算所有指数的合值,并输入所述数据规格化电路。
进一步地,当输入乘加运算器中的运算数据是8位整数时,直接将每组4个整数两两输入4个乘法电路进行计算;
当输入的运算数据是12位整数时,将每组1个整数拆分为低第8位和高4位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积;
当输入的运算数据是16位整数时,将每组2个整数拆分为低第8位和高8位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积;
当输入的运算数据是16位标准浮点数据时,将每组数据拆分为低第8位和包含符号位的高3位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积;
当输入的运算数据是16位AI浮点数据时,将每组2个包含符号位和尾数的数据段分别输入到第一和第二乘法电路进行分段乘积;其中,第三和第四乘法电路补0;
当输入的运算数据是19位AI浮点数据时,将每组1个尾数拆分为低第8位和包含符号位的高3位数据段,并分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积。
进一步地,所述数据重组电路包括四组移位选择单元,每组移位选择单元包含一个移位器和一个第三数据选择器;所述移位器连接所述绝对值计算单元的输出和乘法计算结果,所述第三数据选择器分别连接对应所述移位器和窄位乘法电路的输出;
所述移位器单元用于浮点数据的移位操作计算,所述第三数据选择器用于根据计算模式选择对整数乘法的高位和低位部分乘法计算结果重组输出,或将移位操作数据及浮点数乘法尾数部分的对齐输出。
进一步地,所述加法器电路包括两组一级加法器和一组二级加法器;两组一级加法器分别将两组移位选择单元按照高低位进行求和,并输入到二级加法器;二级加法器计算两组一级加法器输出的合数,获得18位的拼接数据。
进一步地,所述数据规格化电路包括进位饱和单元、规格化单元、拼接单元、位扩展单元和第四数据选择器;二级加法器输出的拼接数据分别输入到所述进位饱和单元和所述位扩展单元,所述位扩展单元根据标准数据长度对整数型拼接数据进行高位扩展;
所述进位饱和单元和所述指数求和单元的输出连接所述规格化单元,进而通过所述拼接单元将指数和尾数部分拼接成对应的标准数据长度的浮点型数据;
所述位扩展单元和所述拼接单元的输出连接所述第四数据选择器的输入端,所述第四数据选择器基于计算模型确定输出浮点型数据或整数型标准数据。
本申请实施例提供的技术方案带来的有益效果至少包括:
复用整数乘法和浮点尾数乘法的乘法器:通过窄位乘法器的拆分和运算结果的拼接来计算宽位整数乘法的结果,以及通过整数乘法器来计算浮点数尾数的乘法计算,以此节省电路资源,并且统一数据通路;
统一宽位加法器:通过统一的宽位加法器来实现多个输入数据的求和,可以减少电路资源,减少延迟并且统一数据通路;
输出结果归一化:把最后的计算结果规格化到标准数据,以利于后续计算操作。
附图说明
图1是支持多数据格式的混合精度乘加运算器的结构图;
图2是支持多数据格式的混合精度乘加运算器的细节图;
图3是乘法器组内乘法电路的电路示意图;
图4示出了不同数据类型和长度的格式;
图5是乘加运算器处理8位整数型数据的结构示意图;
图6是乘加运算器处理12位整数型数据的结构示意图;
图7是乘加运算器处理16位标准浮点型数据的结构示意图;
图8是乘加运算器处理16位AI浮点型数据的结构示意图;
图9是乘加运算器处理19位AI浮点型数据的结构示意图;
图10是指数运算电路的电路示意图;
图11是数据重组电路的电路示意图;
图12是加法器电路的电路示意图;
图13是数据规格化电路的电路示意图;
图14是支持多输入多格式的混合精度乘加运算方法的流程图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
因为传统的芯片设计需要面对多种数据类型输入计算的问题,所以会在芯片电路中集成多种独立的计算电路,分别处理8位,12位,16位整数的乘法和加法运算,或者是直接使用宽位计算电路,如用宽位(16位)计算电路来处理窄位(8位或12位)的乘法和加法运算,这两种方案都会导致芯片电路面积增大或资源开销增大/浪费的问题。主流设计中有以下几种解决方法:
把浮点计算交给非神经网络加速器来运算,比如通用CPU或者通用GPU。这种实现的副作用要么是计算缓慢(通用CPU),要么是功耗巨大(通用GPU)。
在神经网络加速器里加上额外独立的浮点运算电路,这种实现的副作用如下:
与定点整数运算电路没有复用,电路资源和面积开销太大。
控制和数据通路跟整数部分分开,从而造成编程困难或者延迟加长。
基于上述问题,本发明通过采用同一个电路设计,来支持所有的主流神经网络计算的数据格式,通过关键电路的复用到达节省资源、减少延迟、统一数据流、保持精确度的目的。
图1是本申请提供的支持多数据格式的混合精度乘加运算器的结构图,该乘加运算器包括乘法器组、指数运算电路、数据重组电路、加法器电路和数据规格化电路。乘法器组mul_prod包括若干窄位乘法电路,本方案中所描述的窄位乘法电路全部为窄八位乘法电路,也就是由普通8位乘法器组成的乘法电路,所有乘法电路共同组成乘法器组。乘法器电路的数量具体根据实际应用场景中可能处理的数据长度决定,本申请以最高32位进行说明,也就是由4组8位乘法电路组成。当输入该运算器输入运算数据后,首先需要确定计算模式,根据计算模式分配比特数据到各个乘法电路中执行整数或浮点数尾数部分的乘法计算,并输出多组乘法计算结果。因为运算器通常处理最常规的整数型数据和浮点型数据,而运算器对这两种类型的数据需要分别处理,而且同一类型数据的数据长度也可能不同,所以需要先确定计算模式,然后统一分配比特数据进行计算和后续的计算过程。
指数运算电路exp_op是专门用于处理包含浮点数据的模块,主要根据已确定的计算模式执行浮点数指数部分的计算操作,并输出指数计算结果。当计算模式指示不含浮点数据时,则不启用该运算电路。
数据重组电路data_reorder接收乘法器组和指数运算电路的输出,基于计算模式对多组乘法计算结果,或对多组乘法计算结果与指数计算结果进行数据重组。加法器电路adder4则接收数据重组电路的输出,对输出的重组数据进行数据拼接求和,获得拼接数据。数据规格化电路data_normal接收指数运算电路和加法器电路的输出,基于计算模式将拼接数据,或对拼接数据和指数计算结果规格化为标准数据类型。
此外,该运算器还包括寄存器DFF接在数据规格化电的下级,通过DFF缓存输出的即为最终计算结果。
图2是本申请实施例提供的支持多数据格式的混合精度乘加运算器的细节图;本申请以输入两组32比特数据为例,也就是x组和y组数据分别可以输入32位数据,最终输出规格化的32位高精度数据。这样就可以满足多种数据格式的数据计算,按照数据类型和长度可以将计算模式概括为如下几种情况:
1.x组4个8位整数(x1,x2,x3,x4),y组4个8位整数(y1,y2,y3,y4),两组中的4个整数两两相乘后求和运算(x1*y1+x2*y2+x3*y3+x4*y4);
2.x组1个12位整数,y组1个12位整,每组中的1个整数两两相乘运算;
3.x组1个16位整数、y组1个16位整,每组中的1个整数两两相乘运算;
4.x组2个16位标准浮点数(float16),y组2个16位标准浮点数,每组中的2个标准浮点数两两相乘后求和运算;
5.x组1个16位AI浮点数(brainfloat16),y组1个16位AI浮点数,每组中的1个标准浮点数两两相乘运算;
6.x组1个19位AI浮点数(tensorfloat32),y组1个19位AI浮点数,每组中的1个标准浮点数两两相乘运算。
上述的计算模式涵盖绝大部分乘加计算的数据类型,而完成这些乘加计算无需单独设计对应的电路结构,将其拆分(数据长度超过乘法器位宽时)输入至4个窄八位乘法电路mul。
窄八位乘法电路包括第一乘法电路mul0、第二乘法电路mul1、第三乘法电路mul2和第四乘法电路mul3。每个乘法器电路输入两个8位数据段,也就是根据计算模式拆分并分配的比特数据,其输出的乘法计算结果为16位数据。当运算数据为整数类型时,输入乘法电路的是各个整数的整数数据;当运算数据为浮点类型时,输入乘法电路的是各个浮点数的尾数数据,对应输入指数运算电路的是各个浮点数的指数数据。
图3是乘法器组内乘法电路的电路示意图,每个乘法电路包括两组相同的符号处理模块、8位乘法器、异或门和第一数据选择器。符号处理模块输入8位数据段,输出处理后的有效数据段,有效数据段输入8位乘法器进行乘法运算,输出第一和第二乘积结果。因为该乘法电路输出数据是16位的,所以第一乘积结果为乘积结果的最高位数据(第16位),第二乘积结果为低15位数据。
每组符号处理模块包括相同的补码处理单元和第二数据选择器,补码处理单元的输入去除符号位的低7位数据,输出原码数据。第二数据选择器输入原码数据和8位数据段,根据计算模式输出对应的有效数据段。
需要说明的是,第一数据选择器和第二数据选择器基于计算模式确定乘法计算结果的最高位数据,也就是mode信号控制其具体选通情况。当输入的8位数据段是有符号数据时,将异或门的异或结果作为第一数据选择器的输出,将原码数据作为第二数据选择器的输出。当输入的8位数据段是无符号数据时,将第一乘积结果作为第一数据选择器的输出,将8位数据段作为第二数据选择器的输出。
异或门输入两组比特数据的符号位数据(8位数据段的第8位数据),异或结果和第一乘积结果输入到第一数据选择器,第一数据选择器的输出为乘法计算结果的最高位数据(第16位数据),和第二乘积结果组成16位的乘法计算结果。
图3中a[7:0]表示x组输入的分段数据a(整数数据段或浮点数尾数段),b[7:0]表示y组输入的分段数据b,乘法电路后根据mode信号确定计算模式,当分段数据a不包括符号位时,第二数据选择器选择a[7:0]输出,此时的a’[7:0]即为a[7:0]。当分段数据a包含符号位时,最高位符号位a[7]不变,选取不含符号位的a[6:0],对其取反加1(inv+1)得到原码数据,此时有效数据a’[7:0]即为原码数据。b[7:0]的处理方式和a[7:0]同理,得到b’[7:0]。
a’[7:0]和b’[7:0]输入八位乘法器后计算得到o’[15]和o[14:0]输出,对于包含符号位的情况,a[7]和b[7]符号位通过异或门计算后,再和o’[15]输入第一数据选择器,第一数据选择器根据mode信号选通输出o[15]。o[15]和o[14:0]即为一个乘法计算结果o[15:0]。
前述说到,不同计算模式数据长度各不相同,还包括有符号和无符号情况,而乘法器只有八位,对于有符号和无符号的8位整数可以正常处理,而超过8位数的数据类型则需要根据具体数据长度进行分段拆分处理。图4示出了不同数据类型和长度的格式,乘法器处理整数数据和浮点数据的尾数mantissa,根据计算模式可以对输入的X[31:0]和Y[31:0]做如下拆分成:
1.当输入乘加运算器中的运算数据是8位整数时,直接将每组4个整数两两输入4个乘法电路进行计算。
如图5所示,带符号的int8-a和int8-0作为op_a和op_0分段数据输入mul0;int8-b和int8-1作为op_b和op_1分段数据输入mul1;int8-c和int8-2作为op_c和op_2分段数据输入mul2;int8-d和int8-3作为op_d和op_3分段数据输入mul3。无符号unit类似,此处不作赘述。
2.当输入的运算数据是12位整数时,将每组1个整数拆分为低第8位和高4位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积。
如图6所示,12位数据超过一个8位乘法器位宽,所以将其拆分输入到两个乘法器中,又因为需要高低位交叉相乘,这样每组最多仅能输入1个12位数据。即将int12-a拆分成op_a和op_b两个高低位,int12-0拆分成op_0和op_1两个高低位(op_a和op_0都是8个有效位,op_b和op_1中4个有效位,其余高位补0)。乘法电路计算的内容为:op_a*op_0、op_a*op_1、op_b*op_0和op_b*op_1。
3.当输入的运算数据是16位整数时,将每组1个整数拆分为低第8位和高8位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积。其计算原理示意图参考图6,区别在于拆分的两个高低位全部都是有效位。
此种设计模式牺牲的输入位宽,因为总输入X和Y的总位宽是32位,这样每组技能输入一个12位或16位宽整数数据,但好处是可以充分利用窄位乘法器,提高计算速度,减小硬件资源。当然,还可以将8位乘法器替换成12位乘法器,这样可以实现每组两个12位或16位整数输入,每个乘法器都可以得到复用,从而进一步提高单组计算效率。
4.当输入的运算数据是16位标准浮点数据时,将每组1个数据拆分为低第8位和包含符号位的高3位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积。
如图7所示,浮点数据必须包含符号位,16位标准浮点的尾数为[0:9]位,符号位s为[15],所以fp16-a拆分为[0:7]作为op_a,[9:8]+[15]作为op_b(高位补0,3个有效位),fp16-0的拆分以此类推,拆分后的数据段分别输入四个乘法器中进行分段乘积。乘积形式为:op_a*op_0、op_a*op_1、op_b*op_0和op_b*op_1,在输入乘法器时可以将四个乘积段随机输入mul0-mul3,不严格按照图7中输入。浮点数的指数部分计算则由指数运算电路执行,详见后文。
5.当输入的运算数据是16位AI浮点数据时,将每组2个包含符号位和尾数的数据段分别输入到第一和第二乘法电路进行分段乘积;其中,第三和第四乘法电路补0输入。
AI浮点型数据主要针对因特尔和英伟达公司系列产品的数据处理,因为总输入最多32位,所以每组只能输入两个浮点数据,而16位AI浮点数据的尾数为[6:0],加上符号位[15]后刚好凑成8位输入,所以一个浮点数据只需要占用一个8位乘法器。如图8所示,bf16-a拆分成[6:0]+[15]作为op_a输入mul 0,bf16-b拆分成[6:0]+[15]作为op_b输入mul 1。mul 3和mul 4全部补0,因为数据重组电路和加法器电路需要对4组乘法电路进行求和。bf16-0和bf16-1的拆分输入原则相同,此处不做赘述。
6.当输入的运算数据是19位AI浮点数据时,将每组1个尾数拆分为低第8位和包含符号位的高3位数据段,并分别输入到第一和第二乘法电路,,以及第三和第四乘法电路进行分段乘积。
32位总输入只能在每组输入一个19位的运算数据,又因为19位AI浮点数的尾数部分是[9:0],所以需要使用4个乘法器。bf19-a拆分成[0:7]作为op_a,[9:8]+[15]作为op_b(高位补0,3个有效位),乘积输入形式参见16位标准浮点数。
通过这种分段乘积的方法可以在不增加额外计算电路的情况下最大限度的复用窄八位乘法器,且通过mode信号实现控制不同格式和数据长度的乘法计算,实现多种精度计算。
图10是指数运算电路的电路示意图,该部分只有在输入包含浮点数据的情况下才会参与计算。指数运算电路exp_op输入一组(2个)或两组(4个)浮点数据的指数数据位,包括最大值确定单元max(exp_x,exp_y)、绝对值计算单元abs(max-exp)和指数求和单元sum(exp_x+exp_y)。
最大值确定单元用于确定指数最大的运算数据,并输入绝对值计算单元。
绝对值计算单元用于计算每个指数和最大指数的绝对差值,并输入数据重组电路data_reorder。
指数求和单元用于计算两个指数的合值,并输入数据规格化电路data_normal。
此电路结构的输入支持如下几种模式:
2个标准16位浮点数(float16),输入是2个5比特的指数,高3位补零;
4个AI 16位浮点数(brainfloat16),输入是4个8比特的指数;
2个AI 19位浮点数(tensorfloat32),输入是2个8比特的指数。
对应功能如下:
得到输入的2个或4个指数的最大值;
根据最大指数值和输入的2或4个指数,得到2个或者4个绝对差值后输出,用于后续浮点数尾数的移位对齐操作;
得到并输出2个或4个输入指数的两两相加值,用于后续浮点数乘法操作;
以16位AI浮点数(bf16)为例,exp_op输入x组的x_exp_a[7:0]和x_exp_b[7:0],输入y组的y_exp_a[7:0]和y_exp_b[7:0]。float16的指数位是[14:7]。对于16位标准浮点数bf16来说是每组一个输入,指数位[14:10]仅有5位,则x_exp_a[7:0]和y_exp_a[7:0]中的其他高位补0。
图11是数据重组电路的电路示意图,数据重组电路data_reorder包括四组移位选择单元,每组移位选择单元包含一个移位器和一个第三数据选择器。移位器连接绝对值计算单元abs(max-exp)的输出和乘法计算结果,第三数据选择器分别连接对应移位器和窄位乘法电路的输出。四个乘法电路的输出分别表示为a[15:0]、b[15:0]、c[15:0]和d[15:0],分别输入四个第三数据选择器,且四个第三数据选择器分别基于mode信号控制选通,选通输出依次表示为a’[15:0]、b’[15:0]、c’[15:0]和d’[15:0]。
移位器单元用于对浮点数据的移位操作计算,如左移和右移操作。第三数据选择器用于根据计算模式选择对整数乘法的高位和低位部分乘法计算结果重组输出,或将移位操作数据及浮点数乘法尾数部分的对齐输出。其中,在mode信号指示整数计算时移位器单元不工作。具体包括如下功能模式:
1.原始运算数据是8位整数,不做任何处理直送后续电路;
2.原始运算数据是12位整数,把低32位(a[15:0]和b[15:0])和高32位(c[15:0]和d[15:0])分别选择输出送给后续电路;
3.原始运算数据是16位整数,把低32位(a[15:0]和b[15:0])和高32位(c[15:0]和d[15:0])分别选择输出送给后续电路;
4.原始运算数据是16位标准浮点,把低32位(a[15:0]和b[15:0])和高32位(c[15:0]和d[15:0])分别根据输入的指数模块结果进行移位后选择输出送给后续电路;
5.原始运算数据是16位AI浮点,把低32位(a[15:0]和b[15:0])和高32位(c[15:0]和d[15:0])分别根据输入的指数模块结果进行移位后选择输出送给后续电路;
6.原始运算数据是19位AI浮点,把低32位(a[15:0]和b[15:0])和高32位(c[15:0]和d[15:0])分别根据输入的指数模块结果进行移位后选择输出送给后续电路。
图13是加法器电路的电路示意图,该加法器电路包括两组一级加法器和一组二级加法器。两组一级加法器分别将两组移位选择单元按照高低位进行求和,也就是a’[15:0]和b’[15:0]求和,c’[15:0]和d’[15:0]求和后输入到二级加法器。二级加法器计算两组一级加法器输出的合数,获得18位的拼接数据,即o[17:0]。
特别说明的是,该加法器电路还包括对低位数据的移位操作,具体是通过移动部分积的结果然后相加来得到宽位数据的最终乘法结果,因为分段乘积的求和过程需要对不同高低位的数据扩大倍数。
图13是数据规格化电路的电路示意图,数据规格化电路dta_normal包括进位饱和单元、规格化单元、拼接单元、位扩展单元和第四数据选择器。二加法器输出的拼接数据分别输入到进位饱和单元和位扩展单元,位扩展单元根据标准数据长度对整数型拼接数据进行高位扩展。
进位饱和单元和指数求和单元的输出连接规格化单元,进而通过拼接单元将指数和尾数部分拼接成对应的标准数据长度的浮点型数据。位扩展单元和拼接单元的输出连接第四数据选择器的输入端,第四数据选择器基于计算模型确定输出浮点型数据或整数型标准数据。具体包括如下功能模式:
原始运算数据是整数(包括8位、12位、16位整数)时,根据原始数据的输入格式在加法器的18位合数的结果上进行高位比特扩展得到标准的32位(int32)整数;在mode信号指示整数计算时移位器单元不工作。
当原始运算数据是浮点(包括16位、19位浮点)时,根据原始数据的输入格式,对加法器的18位合数结果先进行饱和或者四舍五入进位运算,然后根据指数模块的输入进行移位操作,最后根据指数模块的输入进行拼接得到32位标准浮点数(float32)。
最后输出结果根据输入模式(数据格式)选择32位整数或者32位浮点数输出到DFF中。
图14示出了一种支持多输入多格式的混合精度乘加运算方法的流程图,用于上述各实施例所述的支持多输入多格式的混合精度乘加运算器,方法包括如下:
S1,获取运算数据的输入格式;
S2,根据输入格式确定计算模式,并按照比特分配数据;
S3,根据输入格式,对乘法器运算结果按照高低位数据拼接后输出,或对乘法器运算结果和指数运算电路结果按照高低位移位和拼接后输出;
S4,将输出的数据输入到加法器电路中进行加法运算,输出加法结果;
S5,根据输入格式,对加法运算结果进行高位补0及饱和判断、规格化后输出。
综上所述,本申请提出的支持多输入多格式的混合精度乘加运算器包括如下技术效果:
复用整数乘法和浮点尾数乘法的乘法器:通过窄位乘法器的拆分和运算结果的拼接来计算宽位整数乘法的结果,以及通过整数乘法器来计算浮点数尾数的乘法计算,以此节省电路资源,并且统一数据通路;
统一宽位加法器:通过统一的宽位加法器来实现多个输入数据的求和,可以减少电路资源,减少延迟并且统一数据通路;
输出结果归一化:把最后的计算结果规格化到标准数据,32位带符号整数(int32),或者32位标准浮点(float32),以利于后续计算操作。
以上对本发明的较佳实施例进行了描述;需要理解的是,本发明并不局限于上述特定实施方式,其中未尽详细描述的设备和结构应该理解为用本领域中的普通方式予以实施;任何熟悉本领域的技术人员,在不脱离本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例,这并不影响本发明的实质内容;因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (9)
1.一种支持多输入多格式的混合精度乘加运算器,其特征在于,包括:
乘法器组,包括若干窄位乘法电路,根据计算模式分配的比特数据执行整数或浮点数尾数部分的乘法计算,并输出多组乘法计算结果;计算模式根据输入乘加运算器中运算数据的类型确定,将运算数据拆分输入到所述乘法器组中的比特数据;
指数运算电路,基于计算模式执行浮点数指数部分的计算操作,并输出指数计算结果;具体包括最大值确定单元、绝对值计算单元和指数求和单元;所述最大值确定单元用于确定指数最大的运算数据,并输入所述绝对值计算单元;所述绝对值计算单元用于计算每个指数和最大指数的绝对差值,并输入数据重组电路;所述指数求和单元用于计算两个指数的合值,并输入数据规格化电路;
数据重组电路,分别连接所述乘法器组和所述指数运算电路的输出,基于计算模式对多组乘法计算结果进行数据重组,或基于计算模式对多组乘法计算结果和指数计算结果进行数据重组;
加法器电路,连接所述数据重组电路的输出,对输出的重组数据进行数据拼接求和,获得拼接数据;
数据规格化电路,分别连接所述指数运算电路和所述加法器电路的输出,基于计算模式将所述拼接数据规格化为标准数据类型,或基于计算模式对所述拼接数据和指数计算结果规格化为标准数据类型。
2.根据权利要求1所述的支持多输入多格式的混合精度乘加运算器,其特征在于,乘加运算器总输入为两组32比特位数据,计算模式包括每组4个8位整数乘加计算、每组1个12位整数乘加计算、每组2个16位整数乘加计算、每组1个16位标准浮点数乘加计算、每组2个16位AI浮点数乘加计算、每组1个19位AI浮点数乘加计算。
3.根据权利要求2所述的支持多输入多格式的混合精度乘加运算器,其特征在于,所述乘法器组包括4个相同的窄八位乘法电路,分别为第一乘法电路、第二乘法电路、第三乘法电路和第四乘法电路;每个乘法器电路输入两个8位数据段,输出的乘法计算结果为16位数据;
当运算数据为整数类型时,输入所述乘法电路的是各个整数的整数数据;
当运算数据为浮点类型时,输入所述乘法电路的是各个浮点数的尾数数据,输入所述指数运算电路的是各个浮点数的指数数据。
4.根据权利要求3所述的支持多输入多格式的混合精度乘加运算器,其特征在于,整数类型和浮点数分别分为有符号数据和无符号数据;
所述乘法电路包括两组相同的符号处理模块、8位乘法器、异或门和第一数据选择器;所述符号处理模块输入8位数据段,输出处理后的有效数据段,所述有效数据段输入所述8位乘法器进行乘法运算,输出两个乘积结果;其中的第一乘积结果为乘积结果的最高位数据,第二乘积结果为低15位数据;
异或门输入两组比特数据的符号位数据,异或结果和第一乘积结果输入到所述第一数据选择器,所述第一数据选择器的输出为乘法计算结果的最高位数据,和所述第二乘积结果组成16位的乘法计算结果。
5.根据权利要求4所述的支持多输入多格式的混合精度乘加运算器,其特征在于,每组所述符号处理模块包括相同的补码处理单元和第二数据选择器,所述补码处理单元输入去除符号位的低7位数据,输出原码数据;所述第二数据选择器输入原码数据和8位数据段,输出所述有效数据段;
所述第一数据选择器和所述第二数据选择器基于计算模式确定乘法计算结果的最高位数据;当输入的8位数据段是有符号数据时,将异或门的异或结果作为所述第一数据选择器的输出,将原码数据作为所述第二数据选择器的输出;当输入的8位数据段是无符号数据时,将所述第一乘积结果作为所述第一数据选择器的输出,将8位数据段作为所述第二数据选择器的输出。
6.根据权利要求3所述的支持多输入多格式的混合精度乘加运算器,其特征在于,当输入乘加运算器中的运算数据是8位整数时,直接将每组4个整数两两输入4个乘法电路进行计算;
当输入的运算数据是12位整数时,将每组1个整数拆分为低第8位和高4位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积;
当输入的运算数据是16位整数时,将每组2个整数拆分为低第8位和高8位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积;
当输入的运算数据是16位标准浮点数据时,将每组数据拆分为低第8位和包含符号位的高3位数据段,分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积;
当输入的运算数据是16位AI浮点数据时,将每组2个包含符号位和尾数的数据段分别输入到第一和第二乘法电路进行分段乘积;其中,第三和第四乘法电路补0;
当输入的运算数据是19位AI浮点数据时,将每组1个尾数拆分为低第8位和包含符号位的高3位数据段,并分别输入到第一和第二乘法电路,以及第三和第四乘法电路进行分段乘积。
7.根据权利要求1所述的支持多输入多格式的混合精度乘加运算器,其特征在于,所述数据重组电路包括四组移位选择单元,每组移位选择单元包含一个移位器和一个第三数据选择器;所述移位器连接所述绝对值计算单元的输出和乘法计算结果,所述第三数据选择器分别连接对应所述移位器和窄位乘法电路的输出;
所述移位器单元用于浮点数据的移位操作计算,所述第三数据选择器用于根据计算模式选择对整数乘法的高位和低位部分乘法计算结果重组输出,或将移位操作数据及浮点数乘法尾数部分的对齐输出。
8.根据权利要求7所述的支持多输入多格式的混合精度乘加运算器,其特征在于,所述加法器电路包括两组一级加法器和一组二级加法器;两组一级加法器分别将两组移位选择单元按照高低位进行求和,并输入到二级加法器;二级加法器计算两组一级加法器输出的合数,获得18位的拼接数据。
9.根据权利要求8所述的支持多输入多格式的混合精度乘加运算器,其特征在于,所述数据规格化电路包括进位饱和单元、规格化单元、拼接单元、位扩展单元和第四数据选择器;二级加法器输出的拼接数据分别输入到所述进位饱和单元和所述位扩展单元,所述位扩展单元根据标准数据长度对整数型拼接数据进行高位扩展;
所述进位饱和单元和所述指数求和单元的输出连接所述规格化单元,进而通过所述拼接单元将指数和尾数部分拼接成对应的标准数据长度的浮点型数据;
所述位扩展单元和所述拼接单元的输出连接所述第四数据选择器的输入端,所述第四数据选择器基于计算模型确定输出浮点型数据或整数型标准数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310924106.XA CN117111881B (zh) | 2023-07-26 | 支持多输入多格式的混合精度乘加运算器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310924106.XA CN117111881B (zh) | 2023-07-26 | 支持多输入多格式的混合精度乘加运算器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117111881A CN117111881A (zh) | 2023-11-24 |
CN117111881B true CN117111881B (zh) | 2024-06-04 |
Family
ID=
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692202A (zh) * | 2009-09-27 | 2010-04-07 | 北京龙芯中科技术服务中心有限公司 | 一种64比特浮点乘加器及其浮点运算流水节拍处理方法 |
CN111767025A (zh) * | 2020-08-04 | 2020-10-13 | 腾讯科技(深圳)有限公司 | 包括乘累加器的芯片、终端及浮点运算的控制方法 |
CN111984224A (zh) * | 2020-08-24 | 2020-11-24 | 中国海洋大学 | 用于auv运动控制器的浮点数乘加ip核及控制方法 |
CN112783469A (zh) * | 2020-12-29 | 2021-05-11 | 深圳信息职业技术学院 | 一种用于执行浮点指数运算的方法及装置 |
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692202A (zh) * | 2009-09-27 | 2010-04-07 | 北京龙芯中科技术服务中心有限公司 | 一种64比特浮点乘加器及其浮点运算流水节拍处理方法 |
CN111767025A (zh) * | 2020-08-04 | 2020-10-13 | 腾讯科技(深圳)有限公司 | 包括乘累加器的芯片、终端及浮点运算的控制方法 |
CN111984224A (zh) * | 2020-08-24 | 2020-11-24 | 中国海洋大学 | 用于auv运动控制器的浮点数乘加ip核及控制方法 |
CN112783469A (zh) * | 2020-12-29 | 2021-05-11 | 深圳信息职业技术学院 | 一种用于执行浮点指数运算的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4080351A1 (en) | Arithmetic logic unit, and floating-point number multiplication calculation method and device | |
US20210349692A1 (en) | Multiplier and multiplication method | |
JP3583474B2 (ja) | 乗算装置 | |
US5148386A (en) | Adder-subtracter for signed absolute values | |
EP3782019B1 (en) | Multi-input floating-point adder | |
CN116661734B (zh) | 支持多输入多格式的低精度乘加运算器 | |
CN116820393A (zh) | 支持深度学习指令的多精度乘加单元及其应用方法 | |
WO2022170811A1 (zh) | 一种适用于混合精度神经网络的定点乘加运算单元及方法 | |
JP3436994B2 (ja) | シフト装置 | |
CN117111881B (zh) | 支持多输入多格式的混合精度乘加运算器 | |
CN110727412B (zh) | 一种基于掩码的混合浮点乘法低功耗控制方法及装置 | |
CN117111881A (zh) | 支持多输入多格式的混合精度乘加运算器 | |
US4823300A (en) | Performing binary multiplication using minimal path algorithm | |
US6460064B1 (en) | Multiplier for operating n bits and n/2 bits and method therefor | |
KR100317767B1 (ko) | 부동 소수점 2진 4 워드 포맷 승산 명령 유닛 | |
US7840628B2 (en) | Combining circuitry | |
CN112685001A (zh) | 一种Booth乘法器及其运算方法 | |
US20200133633A1 (en) | Arithmetic processing apparatus and controlling method therefor | |
Kang et al. | The design and implementation of multi-precision floating point arithmetic unit based on FPGA | |
CN117648959B (zh) | 支持神经网络运算的多精度操作数运算装置 | |
CN117289895A (zh) | 一种多精度复用的浮点乘加方法、图像处理方法及装置 | |
CN117008872A (zh) | 一种兼容多种格式的多精度融合乘累加运算装置及方法 | |
US20050210093A1 (en) | Data processing apparatus and method for comparing floating point operands | |
CN116974512A (zh) | 浮点运算装置、矢量处理装置、处理器及电子设备 | |
CN115904507A (zh) | 面向cgra的多精度小面积simd运算系统、方法、介质及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |