CN117008872A - 一种兼容多种格式的多精度融合乘累加运算装置及方法 - Google Patents
一种兼容多种格式的多精度融合乘累加运算装置及方法 Download PDFInfo
- Publication number
- CN117008872A CN117008872A CN202310972029.5A CN202310972029A CN117008872A CN 117008872 A CN117008872 A CN 117008872A CN 202310972029 A CN202310972029 A CN 202310972029A CN 117008872 A CN117008872 A CN 117008872A
- Authority
- CN
- China
- Prior art keywords
- bit
- precision
- mantissa
- input
- result
- 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 42
- 230000004927 fusion Effects 0.000 title claims abstract description 12
- 238000004364 calculation method Methods 0.000 claims abstract description 27
- 230000008569 process Effects 0.000 claims abstract description 25
- 230000011218 segmentation Effects 0.000 claims abstract description 10
- 238000010606 normalization Methods 0.000 claims description 22
- 238000009825 accumulation Methods 0.000 claims description 11
- 238000006073 displacement reaction Methods 0.000 claims description 10
- 239000000654 additive Substances 0.000 claims description 9
- 230000000996 additive effect Effects 0.000 claims description 9
- 230000008859 change Effects 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 4
- 230000000644 propagated effect Effects 0.000 claims description 2
- 238000013528 artificial neural network Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 6
- 230000006872 improvement Effects 0.000 description 4
- 230000008707 rearrangement Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
- G06F7/575—Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明提供了一种兼容多种格式的多精度融合乘累加运算装置及方法,所述装置包括多精度译码器、多精度乘累加运算模块和多精度编码器;多精度译码器和多精度编码器分别用于对输入操作数的译码和对输出结果的编码;多精度乘累加模块接受多精度译码器的输出,完成多精度的乘累加计算,计算结果作为多精度编码器的输入。本发明支持IEEE‑754浮点格式、Posit格式、定点格式、BFloat16、TensorFloat32在内的各种格式,针对乘累加运算过程中的尾数乘法、操作数相加、操作数移位、前导零计数等过程,本发明通过分段及硬件复用等手段提供了高效的多精度实现装置,使得运算单元整体实现了较高的面积效率及能效。
Description
技术领域
本发明涉及一种兼容多种格式的多精度融合乘累加运算装置及方法。
背景技术
近年来,深度神经网络应用广泛,在图像分类、目标检测、语音识别等领域都获得了巨大的成功。然而,神经网络的硬件部署通常需要大量的资源,尤其其中的乘累加(FMA)运算占据了大量的计算工作量,因此,设计硬件高效的乘累加运算单元对于神经网络在资源受限设备上的部署具有重要的意义。另一方面,现有的乘累加运算单元主要支持单精度下的运算,然而神经网络应用中不同网络层和操作的计算精度往往不同,通过使用多精度乘累加运算单元,在运算中实现灵活的精度配置,不仅能够大幅提高计算效率,降低能耗,低精度运算下也能减少神经网络的存储需求。因此,设计一种硬件高效的多精度乘累加运算单元,能更好地满足神经网络硬件部署的需求。
此外,尽管IEEE-754浮点格式被广泛应用,但Posit、BFloat16,TensorFloat32等一些新型格式也表现出在部分神经网络应用中的独特优势。因此,运算单元对上述多种格式的兼容支持也能极大提高其灵活性,增加应用场景。
为了在神经网络的运算中支持各种格式的多精度乘累加运算,一种方案是在硬件中同时实现各种格式、各种精度的单精度乘累加运算单元,以根据精度要求使能相应的单元完成运算,然而这种方案极大增加了硬件开销,不利于神经网络在资源受限型设备上的部署。此外,文献“谢歆昂,李凯,李博宇等.一种适用于多精度计算的可重构浮点乘加运算单元及方法[P].广东省:CN112860220B,2023-03-24.”中提出了一种适用于多精度计算的可重构浮点乘加运算单元,然而仅针对多精度乘法运算作出了优化,而不支持高效的多精度移位、多精度相加、多精度前导零计数等运算,从而限制了硬件面积效率、及能效的进一步提升。文献“Zhang H,Chen D,Ko S B.Efficient multiple-precision floating-pointfused multiply-add with mixed-precision support[J].IEEE Transactions onComputers,2019,68(7):1035-1048.”、“Zhang H,Chen D,Ko S B.New flexiblemultiple-precision multiply-accumulate unit for deep neural network trainingand inference[J].IEEE Transactions on Computers,2019,69(1):26-38.”和“Tan H,Tong G,Huang L,et al.Multiple-Mode-Supporting Floating-Point FMA Unit forDeep Learning Processors[J].IEEE Transactions on Very Large Scale Integration(VLSI)Systems,2022.”中提出了多精度的浮点乘累加运算单元,但仅支持有限的几种浮点格式或定点格式。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种兼容多种格式的多精度融合乘累加运算装置及方法,在译码输入与编码输出阶段能支持选择不同的数值格式,而在译码与编码中间的乘累加计算阶段则通过分段与硬件复用等手段在不同精度间实现资源共享,以减少支持多精度运算的硬件开销。相比直接例化不同运算单元以支持多种精度,本设计能实现更少的面积开销,更高的能效,从而更好地满足神经网络硬件部署的需求。
本发明装置包括多精度译码器、多精度乘累加运算模块和多精度编码器;
其中所述多精度译码器和多精度编码器分别用于对输入操作数的译码和对输出结果的编码;
所述多精度乘累加模块接受多精度译码器的输出,完成多精度的乘累加计算,计算结果作为多精度编码器的输入。
所述多精度译码器和多精度编码器支持多精度输入输出,还支持用户根据统一的译码器编码器输入输出数据排布规则自定义添加各种格式的译码、编码模块,从而实现对各种格式的兼容支持。
所述多精度译码器中输入32-bit的操作数,输出操作数的符号(4-bit)、指数(32-bit,有符号数)和尾数值(32-bit,保持左对齐,即小数点位于最高比特之后);在不同的精度模式下,输出的符号、指数及尾数值的有效数据位会发生如下变化,对于无效数据位填充0:
8-bit精度模式下,输出符号的4个位均有效,表示输入的4个8-bit操作数各自的符号;输出指数的32-bit均有效,每8-bit都是1个有符号数,表示输入的4个8-bit操作数各自的有效指数;输出的尾数的32-bit均有效,每8-bit表示输入的4个8-bit操作数各自的有效尾数;
16-bit精度模式下,输出符号的第2和第4比特有效,表示输入的2个16-bit操作数各自的符号;输出指数的每14-bit有效,表示输入的2个16-bit操作数各自的有效指数;输出尾数的32-bit均有效,每16-bit表示输入的2个16-bit操作数各自的有效尾数;
32-bit精度模式下,输出符号仅最高位有效,表示输入的1个32-bit操作数的符号;输出指数仅低14-bit有效,表示输入的1个32-bit操作数的有效指数;输出尾数的32-bit均有效,表示输入的1个32-bit操作数的有效尾数;
所述多精度编码器中输入符号(4-bit)、指数(32-bit,有符号数)和尾数值(32-bit,保持左对齐,即小数点位于最高比特之后),输出32-bit的编码结果;在不同的精度模式下,输入的符号、指数及尾数值的有效数据位会发生如下变化,无效数据位为0:
8-bit精度模式下,输入符号的4个位均有效,表示将输出的4个8-bit结果各自的符号;输入指数的32-bit均有效,每8-bit都是1个有符号数,表示将输出的4个8-bit结果各自的有效指数;输入尾数的32-bit均有效,每8-bit表示将输出的4个8-bit结果各自的有效尾数;
16-bit精度模式下,输入符号的第2和第4比特有效,表示将输出的2个16-bit结果各自的符号;输入指数的每14-bit有效,表示将输出的2个16-bit结果各自的有效指数;输入尾数的32-bit均有效,每16-bit表示将输出的2个16-bit结果各自的有效尾数;
32-bit精度模式下,输入符号仅最高位有效,表示将输出的1个32-bit结果的符号;输入指数仅低14-bit有效,表示将输出的1个32-bit结果的有效指数;输入尾数的32-bit均有效,表示将输出的1个32-bit操作数的有效尾数。
所述多精度译码器接收32-bit的输入操作数,产生统一的译码器输出,将多精度译码器的输出送入多精度乘累加运算模块,处理得到统一的编码器输入,然后送入多精度编码器,得到32-bit的多精度运算结果。
所述多精度乘累加运算模块包括多精度尾数相乘模块、多精度指数相加模块、多精度指数求差模块、多精度尾数对齐模块、多精度尾数相加模块、多精度尾数归一化与指数调整模块和多精度尾数舍入模块;
在所述多精度尾数相乘模块内,根据精度模式完成两个32-bit的尾数间的乘法,得到64-bit的乘积结果,具体包括:在32-bit精度模式下,两个32-bit的输入尾数通过32-bit的乘法器相乘得到64-bit的乘积结果;在16-bit精度模式下,两个32-bit的输入尾数各自的低16-bit通过16-bit的乘法器相乘,得到64-bit乘积结果的低32-bit的值,各自的高16-bit相乘,得到64-bit乘积结果的高32-bit的值;在8-bit精度模式下,两个32-bit的输入尾数各自的每8-bit通过8-bit的乘法器相乘,得到的四组16-bit乘积结果组合在一起即为64-bit的乘积结果;
将两个32-bit的输入尾数A,B每8-bit划分,各自得到四个子操作数A3,A2,A1,A0和B3,B2,B1,B0,再实现16个8-bit的子乘法器,分别为A0*B0,A0*B1,A1*B0,A0*B2,A1*B1,A2*B0,A0*B3,A1*B2,A2*B1,A3*B0,A1*B3,A2*B2,A3*B1,A2*B3,A3*B2,A3*B3;
将不同精度模式下32-bit的乘法器、16-bit的乘法器以及8-bit的乘法器均通过所述16个8-bit的子乘法器实现,根据不同的精度模式使能需要的子乘法器数,再将结果相加,从而实现在相同的硬件中的对多精度乘法运算的支持,具体包括:
在16-bit的精度模式下,输入的32-bit尾数A和B的低16-bit的乘法计算如下:
(A1A0)*(B1B0)
=((A1<<8)+A0)*((B1<<8)+B0)
=(A1*B1)<<16+(A1*B0+A0*B1)<<8+A0*B0
输入的32-bit尾数A和尾数B的高16-bit的乘法计算如下:
(A3A2)*(B3B2)
=((A3<<8)+A2)*((B3<<8)+B2)
=(A3*B3)<<16+(A3*B2+A2*B3)<<8+A2*B2
在16-bit精度模式下,仅需要将A0*B0,A0*B1,A1*B0,A1*B1,A2*B2,A2*B3,A3*B2,A3*B3这8个子乘法器的结果移位相加即能够得到16-bit精度模式下的尾数乘法运算结果;
在32-bit精度模式下,将全部16个子乘法器的结果移位相加即能够得到32-bit精度模式下的尾数乘法运算结果;
在8-bit精度模式下,将A0*B0,A1*B1,A2*B2,A3*B3四个子乘法器的结果移位相加即能够得到8-bit精度模式下的尾数乘法运算结果。
在多精度指数相加模块、多精度指数求差模块、多精度尾数相加模块和多精度尾数归一化与指数调整模块内,采用分段相加的方式,完成两个多精度数据的相加:
首先将输入的两个多精度数据各自划分为四个子操作数,分别为A3,A2,A1,A0,以及B3,B2,B1,B0,并通过四个子加法器A3+B3,A2+B2,A1+B1,A0+B0并行完成四组子操作数的相加,在8-bit精度模式下,四组子加法器的结果即为最终结果;在16-bit精度模式下,子加法器A0+B0和A2+B2产生的进位需要向前传播,即分别与子加法器A1+B1,A3+B3的结果相加;在32-bit精度模式下,四组子加法器产生的进位均需向高位传播,即子加法器A0+B0产生的进位需要与子加法器A1+B1的结果相加,相加后的结果产生的进位继续向高位传播,与子加法器A2+B2的结果相加,产生的进位继续与子加法器A3+B3的结果相加,得到最终的多精度相加结果。
在多精度尾数对齐模块内,需要根据加数和乘数的指数差完成多精度加数和乘数尾数的对齐,尾数对齐过程为:
在8-bit精度模式下,初始将8-bit的加数置于16-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于9时,加数右移量为0;当E小于等于-15时,加数右移量等于24;否则,加数右移量等于(9-E);
在16-bit精度模式下,初始将16-bit的加数置于32-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于17时,加数右移量为0;当E小于等于-31时,加数右移量为48;否则,加数右移量为(17-E);
在32-bit精度模式下,初始将32-bit的加数置于64-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于33时,加数右移量为0;当E小于等于-63时,加数右移量为96;否则,加数右移量为(33-E)。
根据精度模式控制信号完成多精度加数尾数和乘数尾数数据重排,满足在8-bit、16-bit及32-bit精度模式下,加数值初始位置位于其对应的乘数的左侧;所述多精度加数尾数是输入多精度操作数C的尾数;所述乘数尾数是输入多精度操作数A和B的尾数乘积;
得到重排后的加数尾数和乘数尾数后,加数尾数需要根据加数和乘数的指数差右移,以实现和乘数尾数的移位对齐;
通过分段移位来减少支持多精度模式下的动态移位的硬件开销,具体包括:
在8-bit精度模式下,重排后的加数每24-bit存在各自的右移移位量,移位量位于0~24之间;其中每24-bit对应一组输入操作数加数,共四组;
在16-bit精度模式下,重排后的加数每48-bit存在各自的右移移位量,移位量位于0~48之间;其中每48-bit对应一组输入操作数加数,共两组;
在32-bit精度模式下,重排后的96-bit的加数存在统一的右移移位量,移位量位于0~96之间;
根据精度模式控制信号能够确定每24-bit有效数据段d,c,b,a各自的移位量,分别为sft_amt_d,sft_amt_c,sft_amt_b,sft_amt_a,所述移位量sft_amt_d,sft_amt_c,sft_amt_b,sft_amt_a均利用7-bit数据位宽表示数据移位量,即sft_amt_d[6:0],sft_amt_c[6:0],sft_amt_b[6:0],sft_amt_a[6:0];
确定加数每段的对齐移位量后,通过分段与分级移位支持多精度的移位,具体包括:对于每24-bit的加数,并行地进入各自的移位器中完成五级移位,即移位量分别为其各自移位量的低5-bit所代表的值,移位量分别为:sft_amt_d[4:0],sft_amt_c[4:0],sft_amt_b[4:0],sft_amt_a[4:0];完成第1~5级的移位后,移位后的结果根据精度模式控制信号决定是否与高比特移出的位进行位或运算:
在8-bit精度模式下,无需进行位或运算;
在16-bit精度模式下,c段移位的结果需要与d段移出的位进行位或运算,a段移位后的结果需要与b段移出的位进行位或运算;
在32-bit精度模式下,a,b,c段移位的结果都需要与更高段移出的位进行位或运算;
完成第1~5级的分段移位后,a与b、c与d移位处理后的结果分别作为一个48-bit的数据整体参与第6级的移位,即根据移位量第6比特的值sft_amt_b[5],sft_amt_d[5]判断是否需要右移32-bit:当值为1时,需要右移32-bit,当值为0时,不需要移位;当处于32-bit精度模式下,低48-bit移位后的结果需要与高48-bit移出的位进行位或运算;
完成第6级的移位后,两个48-bit的移位结果组成一个96-bit的整体参与第7级的移位,即根据移位量第7比特的值sft_amd_d[6]选择是否需要右移64-bit,当值为1时,右移64-bit;当值为0时,不移位;最终的输出结果为多精度模式下加数移位对齐的结果。
在多精度尾数归一化与指数调整模块内,移位对齐后的加数和乘数尾数相加后的结果需要进行归一化移位,包括多精度前导零计数以确定移位量,以及根据移位量进行多精度移位两个过程;
对于多精度前导零计数,在8-bit精度模式下需要计算每24-bit结果(共四组)各自的前导零数cpm[3],cpm[2],cpm[1]和cpm[0];在16-bit精度模式下,需要计算每48-bit结果(共两组)各自的前导零数cph[1],cph[0];在32-bit精度模式下,计算96-bit整体结果的前导零数cps;
采用分段前导零计数的装置:对于每24-bit的输入d,c,b,a,先并行通过24-bit前导零计数模块计数其各自的前导零数cpm及数据有效信号vpm,分别为cpm[3],cpm[2],cpm[1],cpm[0]和vpm[3],vpm[2],vpm[1],vpm[0],前导零数为8-bit精度模式下的各段操作数后续的归一化移位量;对于16-bit精度模式下的两组前导零数cph[1],cph[0]和两组数据有效信号vph[1],vph[0],在8-bit精度模式下前导零数和数据有效信号的基础上通过选择器和加法器得到;对于32-bit精度模式下的前导零数cps和数据有效信号vps,在16-bit精度模式下的前导零数和数据有效信号的基础上通过选择器和加法器得到。
根据上述分段前导零计数的结果,即能够确定多精度尾数的归一化移位量,通过分段与分级移位即可实现后续多精度尾数的归一化移位过程。
本发明还提供了一种兼容多种格式的多精度融合乘累加运算方法,包括以下步骤:
步骤1,输入三个32比特的操作数A、B、C,及相应的配置信号,所述配置信号包括精度模式和数据格式,所述精度模式支持32-bit、16-bit和8-bit精度;所述数据格式支持传统浮点格式、Posit格式和定点格式;在后续步骤2~步骤8中完成多精度下A*B+C的运算:
32-bit精度模式下,支持1*32-bit的操作,输出结果D的全部32-bit即为32-bit的输入A,B,C乘累加的结果,表示为:D[31:0]=A[31:0]*B[31:0]+C[31:0];D[31:0]也就是输出结果D的全部32-bit的值,类似地,下文中D[15:0]意思是输出结果D的低16-bit的值,D[31:16]是输出结果D的高16-bit的值;
16-bit精度模式下,支持2*16-bit的操作,输出结果D的低16-bit、高16-bit的值分别为32-bit的输入A,B,C各自对应的低16-bit、高16-bit的值进行乘累加运算的结果:D[15:0]=A[15:0]*B[15:0]+C[15:0],D[31:16]=A[31:16]*B[31:16]+C[31:16];
8-bit精度模式下,支持4*8-bit的操作,输出结果D的每8-bit的值分别为32-bit的输入A,B,C的各自对应的每8-bit的值分别乘累加运算的结果,表示为:D[7:0]=A[7:0]*B[7:0]+C[7:0],D[15:8]=A[15:8]*B[15:8]+C[15:8],D[23:16]=A[23:16]*B[23:16]+C[23:16],D[31:24]=A[31:24]*B[31:24]+C[31:24];
步骤2,根据配置信号调用相应的译码器完成输入数据的译码过程,输出三个操作数A、B、C各自有效的符号、指数和尾数值;
步骤3,三个操作数A、B、C的指数值依次在多精度指数相加模块和多精度指数求差模块中完成指数相加,以及指数比较与求差,同时,A和B的尾数值在多精度尾数相乘模块内完成乘法运算得到乘数的尾数值;所述指数相加是指:A的指数加上B的指数,相加后的结果为乘数的指数;所述指数比较与求差是指:计算加数C的指数与所述乘数的指数的指数差;
步骤4,根据步骤3得到的结果,在多精度尾数对齐模块内完成乘数与加数的尾数的对齐;
步骤5,在多精度尾数相加模块内完成对齐后的乘数尾数与加数尾数的累加;
步骤6,在多精度尾数归一化与指数调整模块内,完成尾数的归一化移位;同时根据移位量调整最终结果的指数值;
步骤7,在多精度尾数舍入模块内,完成归一化后的尾数的舍入,得到最终结果的尾数值;
步骤8,根据配置信号调用相应的编码器完成最终结果的编码过程,输出运算结果。
有益效果:本发明通过统一译码器和编码器的输入输出数据排布,能支持IEEE-754浮点格式、Posit格式、定点格式、BFloat16、TensorFloat32等在内的各种格式。此外,针对乘累加运算过程中的尾数乘法、操作数相加、操作数移位、前导零计数等过程,本发明通过分段及硬件复用等手段提供了高效的多精度实现装置,使得运算单元整体实现了较高的面积效率及能效。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是兼容多种格式的多精度融合乘累加运算单元总体架构示意图。
图2是不同精度模式下译码器输出数据、以及编码器输入数据的有效位排布示意图。
图3是译码器与编码器中间的计算流程图。
图4是不同精度模式下尾数乘法要实现的计算示意图。
图5是利用8-bit的子乘法器实现32-bit的乘法装置示意图。
图6是多精度分段加法器装置示意图。
图7是8-bit精度模式下的加数、乘数尾数对齐过程示意图。
图8是不同精度模式下加数尾数和乘数尾数的数据重排示意图。
图9是多精度分段分级操作数移位装置示意图。
图10是多精度分段前导零计数装置示意图。
具体实施方式
如图1所示,本发明提供了提供一种兼容多种格式的多精度乘累加运算装置,包括多精度译码器、多精度乘累加运算模块和多精度编码器。其中所述多精度译码器和多精度编码器分别用于对输入操作数的译码和对输出结果的编码;所述多精度乘累加模块接受多精度译码器的输出,完成多精度的乘累加计算,计算结果作为多精度编码器的输入。
所述多精度译码器和多精度编码器支持多精度输入输出,还支持用户根据统一的译码器编码器输入输出数据排布规则自定义添加各种格式的译码、编码模块,从而实现对各种格式的兼容支持。
本发明还提供了一种兼容多种格式的多精度融合乘累加运算,包括如下步骤:
步骤1,输入三个32比特的操作数A、B、C,及相应的配置信号,所述配置信号包括精度模式和数据格式,所述精度模式支持32-bit、16-bit和8-bit精度;所述数据格式支持传统浮点格式、Posit格式和定点格式;在后续步骤2~步骤8中完成多精度下A*B+C的运算:
32-bit精度模式下,支持1*32-bit的操作,输出结果D的全部32-bit即为32-bit的输入A,B,C乘累加的结果,表示为:D[31:0]=A[31:0]*B[31:0]+C[31:0];D[31:0]也就是输出结果D的全部32-bit的值,类似地,下文中D[15:0]意思是输出结果D的低16-bit的值,D[31:16]是输出结果D的高16-bit的值;
16-bit精度模式下,支持2*16-bit的操作,输出结果D的低16-bit、高16-bit的值分别为32-bit的输入A,B,C各自对应的低16-bit、高16-bit的值进行乘累加运算的结果:D[15:0]=A[15:0]*B[15:0]+C[15:0],D[31:16]=A[31:16]*B[31:16]+C[31:16];
8-bit精度模式下,支持4*8-bit的操作,输出结果D的每8-bit的值分别为32-bit的输入A,B,C的各自对应的每8-bit的值分别乘累加运算的结果,表示为:D[7:0]=A[7:0]*B[7:0]+C[7:0],D[15:8]=A[15:8]*B[15:8]+C[15:8],D[23:16]=A[23:16]*B[23:16]+C[23:16],D[31:24]=A[31:24]*B[31:24]+C[31:24];
步骤2,根据配置信号调用相应的译码器完成输入数据的译码过程,输出三个操作数A、B、C各自有效的符号、指数和尾数值;
步骤3,三个操作数A、B、C的指数值依次在多精度指数相加模块和多精度指数求差模块中完成指数相加,以及指数比较与求差,同时,A和B的尾数值在多精度尾数相乘模块内完成乘法运算得到乘数的尾数值;所述指数相加是指:A的指数加上B的指数,相加后的结果为乘数的指数;所述指数比较与求差是指:计算加数C的指数与所述乘数的指数的指数差;
步骤4,根据步骤3得到的结果,在多精度尾数对齐模块内完成乘数与加数的尾数的对齐;
步骤5,在多精度尾数相加模块内完成对齐后的乘数尾数与加数尾数的累加;
步骤6,在多精度尾数归一化与指数调整模块内,完成尾数的归一化移位;同时根据移位量调整最终结果的指数值;
步骤7,在多精度尾数舍入模块内,完成归一化后的尾数的舍入,得到最终结果的尾数值;
步骤8,根据配置信号调用相应的编码器完成最终结果的编码过程,输出运算结果。
相比传统的单精度乘累加运算架构,本发明在支持的最高精度(32-bit)计算路径中增加了部分控制逻辑,充分利用分段和硬件复用等手段,从而在增加极少硬件开销的情况下,运算单元也能支持并行的低精度(16-bit或8-bit)运算。除此之外,通过定义统一的译码器编码器输入输出的数据排布模式,本发明支持添加自定义的基于各种格式的译码器、编码器,如传统浮点格式、Posit格式、定点格式等,以实现对多种格式的运算支持。
以下将详细介绍译码器编码器统一的数据排布模式,以及本发明提出的硬件高效的多精度尾数乘法、多精度操作数加法、多精度尾数对齐、多精度尾数归一化的实现方法与装置。
译码器编码器统一的数据排布模式:
为了提高运算单元的灵活性,增加其应用场景,本发明统一了译码器和编码器输入输出的数据排布模式,使得提出的多精度融合乘加运算单元能支持不同的数据格式,如IEEE-754浮点格式、Posit格式、BFloat16/TensorFloat-32及定点等格式。
具体而言,所述多精度译码器中输入32-bit的操作数,输出操作数的符号(4-bit)、指数(32-bit,有符号数)和尾数值(32-bit,保持左对齐,即小数点位于最高比特之后);在不同的精度模式下,输出的符号、指数及尾数值的有效数据位会发生如下变化,对于无效数据位填充0:
8-bit精度模式下,输出符号的4个位均有效,表示输入的4个8-bit操作数各自的符号;输出指数的32-bit均有效,每8-bit都是1个有符号数,表示输入的4个8-bit操作数各自的有效指数;输出的尾数的32-bit均有效,每8-bit表示输入的4个8-bit操作数各自的有效尾数;
16-bit精度模式下,输出符号的第2和第4比特有效,表示输入的2个16-bit操作数各自的符号;输出指数的每14-bit有效,表示输入的2个16-bit操作数各自的有效指数;输出尾数的32-bit均有效,每16-bit表示输入的2个16-bit操作数各自的有效尾数;
32-bit精度模式下,输出符号仅最高位有效,表示输入的1个32-bit操作数的符号;输出指数仅低14-bit有效,表示输入的1个32-bit操作数的有效指数;输出尾数的32-bit均有效,表示输入的1个32-bit操作数的有效尾数;
所述多精度编码器中输入符号(4-bit)、指数(32-bit,有符号数)和尾数值(32-bit,保持左对齐,即小数点位于最高比特之后),输出32-bit的编码结果;在不同的精度模式下,输入的符号、指数及尾数值的有效数据位会发生如下变化,无效数据位为0:
8-bit精度模式下,输入符号的4个位均有效,表示将输出的4个8-bit结果各自的符号;输入指数的32-bit均有效,每8-bit都是1个有符号数,表示将输出的4个8-bit结果各自的有效指数;输入尾数的32-bit均有效,每8-bit表示将输出的4个8-bit结果各自的有效尾数;
16-bit精度模式下,输入符号的第2和第4比特有效,表示将输出的2个16-bit结果各自的符号;输入指数的每14-bit有效,表示将输出的2个16-bit结果各自的有效指数;输入尾数的32-bit均有效,每16-bit表示将输出的2个16-bit结果各自的有效尾数;
32-bit精度模式下,输入符号仅最高位有效,表示将输出的1个32-bit结果的符号;输入指数仅低14-bit有效,表示将输出的1个32-bit结果的有效指数;输入尾数的32-bit均有效,表示将输出的1个32-bit操作数的有效尾数。
整体译码器的输出符号、指数及尾数有效数据示意图如图2所示,其中灰色填充部分为有效数据位,而空白部分为无效数据位,用零填充。
如图3所示,整体计算过程如下:所述多精度译码器接收32-bit的输入操作数,产生统一的译码器输出(也即符合上述规则的符号、指数及尾数值),将多精度译码器的输出送入多精度乘累加运算模块,处理得到统一的编码器输入(也即符合上述规则的运算结果的符号、指数及尾数值),然后送入多精度编码器,得到32-bit的多精度运算结果。
在符合上述输入输出规则下,使用者能自定义增加不同格式的译码器编码器,在运算中根据数据格式控制信号使能相应的译码器编码器。也可以在硬件中仅保留特定格式的译码器编码器,以减少额外的面积开销。
此外,根据本发明提出的数据排布模式,也能轻松拓展译码编码模块对更多精度(如64-bit输入)的支持。
多精度尾数相乘模块:
在多精度尾数相乘模块内,将根据精度模式完成两个32-bit的尾数间(即A,B的尾数)的乘法,得到64-bit的乘积结果。不同精度模式下的多精度尾数相乘模块要实现的计算如图4所示,其中A3,A2,A1,A0为8-bit的子操作数,A3A2,A1A0为16-bit的子操作数,A3A2A1A0为32-bit的操作数(B同理表示):
为了减少支持多精度乘法运算的硬件开销,本发明中将32-bit的乘法器按照所支持的最低精度模式,分解为16个8-bit的子乘法器实现,如图5所示,根据不同的精度模式使能需要的子乘法器,再将结果相加,即可实现在相同的硬件中对多精度乘法运算的支持。
以16-bit精度模式下的计算为例,输入的32-bit尾数A和B的低16-bit的乘法计算如下:
(A1A0)*(B1B0)
=((A1<<8)+A0)*((B1<<8)+B0)
=(A1*B1)<<16+(A1*B0+A0*B1)<<8+A0*B0
输入的32-bit尾数A和尾数B的高16-bit的乘法计算如下:
(A3A2)*(B3B2)
=((A3<<8)+A2)*((B3<<8+B2)
=(A3*B3)<<16+(A3*B2+A2*B3)<<8+A2*B2
因此,在16-bit精度模式下,仅需要将A0*B0,A0*B1,A1*B0,A1*B1,A2*B2,A2*B3,A3*B2,A3*B3这8个子乘法器的结果移位相加即能够得到16-bit精度模式下的尾数乘法运算结果;
在32-bit精度模式下,将全部16个子乘法器的结果移位相加即能够得到32-bit精度模式下的尾数乘法运算结果;
在8-bit精度模式下,将A0*B0,A1*B1,A2*B2,A3*B3四个子乘法器的结果移位相加即能够得到8-bit精度模式下的尾数乘法运算结果。
通过将乘法器分解为子乘法器实现,并根据精度模式使能需要的子乘法器,而绕过不需要的子乘法器,在增加极少量硬件开销的情况下实现了对多精度乘法运算的支持,同时减少了低精度运算时的动态功耗。
此外,根据上述思路,可以轻松拓展多精度乘法器对4-bit等更低精度、或64-bit,128-bit等更高精度乘法运算的支持。
多精度操作数相加模块:
在多精度指数相加模块、多精度指数求差模块、多精度尾数相加模块和多精度指数调整模块内,都涉及到两个多精度数据的相加。本发明采用分段相加的方式,可以减少计算延迟,同时避免了支持多精度相加带来的昂贵硬件开销。
如图6所示,具体而言,首先将输入的两个多精度数据各自划分为四个子操作数,分别为A3,A2,A1,A0,以及B3,B2,B1,B0,并通过四个子加法器A3+B3,A2+B2,A1+B1,A0+B0并行完成四组子操作数的相加,在8-bit精度模式下(即m[1:0]=2’b00),四组子加法器的结果即为最终结果;在16-bit精度模式下(即m[1:0]=2’b01),子加法器A0+B0和A2+B2产生的进位需要向前传播,即分别与子加法器A1+B1,A3+B3的结果相加;在32-bit精度模式下(即m[1:0]=2’b10),四组子加法器产生的进位均需向高位传播,即子加法器A0+B0产生的进位需要与子加法器A1+B1的结果相加,相加后的结果产生的进位继续向高位传播,与子加法器A2+B2的结果相加,产生的进位继续与子加法器A3+B3的结果相加,得到最终的多精度相加结果。
利用上述多精度分段加法器可以完成任意位宽的两个操作数的多精度相加。此外,依据上述设计思路,可以轻松拓展多精度加法器对如64-bit、128-bit等更多精度的支持。多精度尾数对齐模块:
在多精度尾数对齐模块内,需要根据加数和乘数的指数差完成加数和乘数尾数的对齐。以8-bit单精度模式为例,尾数对齐移位的过程如图7所示(其中填充图案部分代表有效的加数或乘数尾数,空白部分代表零):在8-bit精度模式下,初始将8-bit的加数置于16-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于9时,加数右移量为0;当E小于等于-15时,加数右移量等于24;否则,加数右移量等于(9-E);
在16-bit精度模式下,初始将16-bit的加数置于32-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于17时,加数右移量为0;当E小于等于-31时,加数右移量为48;否则,加数右移量为(17-E);
在32-bit精度模式下,初始将32-bit的加数置于64-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于33时,加数右移量为0;当E小于等于-63时,加数右移量为96;否则,加数右移量为(33-E)。
为了在多精度乘累加运算模块中支持多精度的尾数对齐,一种方案是按照图7思路在硬件单元中实现不同精度模式下的对齐移位模块,从而在运算中根据精度模式使能相应的模块。尽管设计思路简单,但硬件开销较大,尤其是冗余的动态移位过程,不仅降低了硬件利用率,也极大增加了运算功耗。因此,本发明提出了一种分段的多精度尾数移位对齐方案,在32-bit的单精度移位对齐装置基础上,仅增加了部分选择或控制逻辑,即可支持低精度模式下的尾数对齐移位,硬件利用率高。
具体而言,首先通过选择器完成加数尾数(即输入操作数C的尾数)和乘数尾数(即输入操作数A和B的尾数乘积)在不同数据精度模式下的数据重排,如图8所示(其中有图案填充部分为实际有效的加数或乘数数据,空白部分为零)。
根据精度模式控制信号完成多精度加数尾数和乘数尾数数据重排,满足在8-bit、16-bit及32-bit精度模式下,加数值初始位置位于其对应的乘数的左侧;所述多精度加数尾数是输入多精度操作数C的尾数;所述乘数尾数是输入多精度操作数A和B的尾数乘积;
得到重排后的加数尾数和乘数尾数之后,加数尾数需要根据加数和乘数的指数差右移,以实现和乘数尾数的移位对齐。本发明通过分段移位来减少支持多精度模式下的动态移位的硬件开销。
具体而言,在8-bit精度模式下,重排后的加数每24-bit存在各自的右移移位量,移位量位于0~24之间(可以利用5-bit的数表示该移位量);其中每24-bit对应一组输入操作数加数,共四组;
在16-bit精度模式下,重排后的加数每48-bit存在各自的右移移位量,移位量位于0~48之间(可以利用6-bit的数表示该移位量);其中每48-bit对应一组输入操作数加数,共两组;
在32-bit精度模式下,重排后的96-bit的加数存在统一的右移移位量,移位量位于0~96之间(可以利用7-bit的数表示该移位量);
根据精度模式控制信号能够确定每24-bit有效数据段d,c,b,a各自的移位量,分别为sft_amt_d,sft_amt_c,sft_amt_b,sft_amt_a,所述移位量sft_amt_d,sft_amt_c,sft_amt_b,sft_amt_a均利用7-bit数据位宽表示数据移位量,即sft_amt_d[6:0],sft_amt_c[6:0],sft_amt_b[6:0],sft_amt_a[6:0];
确定加数每段的对齐移位量后,通过分段与分级移位支持多精度的移位,具体包括:对于每24-bit的加数,并行地进入各自的移位器中完成五级移位(可以通过例如桶式移位器实现五级移位),即移位量分别为其各自移位量的低5-bit所代表的值,移位量分别为:sft_amt_d[4:0],sft_amt_c[4:0],sft_amt_b[4:0],sft_amt_a[4:0];完成第1~5级的移位后,移位后的结果根据精度模式控制信号(m[1:0])决定是否与高比特移出的位进行位或运算:
在8-bit精度模式下(即m[1:0]=2’b00),无需进行位或运算;
在16-bit精度模式下(即m[1:0]=2’b01),c段移位的结果需要与d段移出的位进行位或运算,a段移位后的结果需要与b段移出的位进行位或运算;
在32-bit精度模式下(即m[1:0]=2’b10),a,b,c段移位的结果都需要与更高段移出的位进行位或运算;
完成第1~5级的分段移位后,a与b、c与d移位处理后的结果分别作为一个48-bit的数据整体参与第6级的移位,即根据移位量第6比特的值sft_amt_b[5],sft_amt_d[5]判断是否需要右移32-bit:当值为1时,需要右移32-bit,当值为0时,不需要移位;当处于32-bit精度模式下(即m[1:0]=2’b10),低48-bit移位后的结果需要与高48-bit移出的位进行位或运算;
完成第6级的移位后,两个48-bit的移位结果组成一个96-bit的整体参与第7级的移位,即根据移位量第7比特的值sft_amd_d[6]选择是否需要右移64-bit,当值为1时,右移64-bit;当值为0时,不移位;最终的输出结果为多精度模式下加数移位对齐的结果。整体运算过程如图9所示。
按照上述设计思路,可以轻松对其他位宽、其他精度的多精度移位的支持。
在多精度尾数归一化与指数调整模块内,移位对齐后的加数和乘数尾数相加后的结果需要进行归一化移位,包括多精度前导零计数以确定移位量,以及根据移位量进行多精度移位两个过程;
对于多精度前导零计数,在8-bit精度模式下需要计算每24-bit结果(共四组)各自的前导零数cpm[3],cpm[2],cpm[1]和cpm[0];在16-bit精度模式下,需要计算每48-bit结果(共两组)各自的前导零数cph[1],cph[0];在32-bit精度模式下,计算96-bit整体结果的前导零数cps;
在16-bit精度模式下,需要计算每48-bit结果各自的前导零数,即cph[1],cph[0];在32-bit精度模式下,则计算96-bit整体结果的前导零数,即cps。为了减少硬件开销,采用分段前导零计数的装置:对于每24-bit的输入d,c,b,a,先并行通过24-bit前导零计数模块计数其各自的前导零数cpm及数据有效信号vpm(对于前导零计数模块的输出,一般而言,vpm=1,cpm为前导零数;但是当输入为全0时,则vpm=0,cpm=0),分别为cpm[3],cpm[2],cpm[1],cpm[0]和vpm[3],vpm[2],vpm[1],vpm[0],前导零数为8-bit精度模式下的各段操作数后续的归一化移位量;
对于16-bit精度模式下的两组前导零数cph[1],cph[0]和两组数据有效信号vph[1],vph[0],在8-bit精度模式下前导零数和数据有效信号的基础上通过选择器和加法器得到;比如,对于cph[1],当vpm[3]等于1时,cph[1]等于cpm[3];当vpm[3]等于0时,继续判断vpm[2]信号,若vpm[2]等于1,则cph[1]等于cpm[2]+24;否则,cph[1]等于0。cph[0]的值计算同理。
对于32-bit精度模式下的前导零数cps和数据有效信号vps,在16-bit精度模式下的前导零数和数据有效信号的基础上通过选择器和加法器得到。
多精度前导零计数的计算过程如图10所示,根据本设计思路,也能轻松拓展对其他精度(如64-bit)的支持。
根据上述分段前导零计数的结果,即能够确定多精度尾数的归一化移位量,多精度归一化移位的过程与上述多精度尾数对齐移位类似,采用分段与分级移位的方式,同时根据精度模式判断移位后的结果是否需要与上一段移出的位进行按位或运算,从而实现在增加极少数硬件开销的情况下支持多精度的归一化移位。
实施例
在具体的实施例中,基于本发明所提出的一种兼容多种格式的多精度融合乘累加运算装置及方法,实现了32-bit的多精度Posit乘累加运算单元,其支持1*32-bit或2*16-bit或4*8-bit的多精度运算。与此同时,利用现有的Posit单精度乘累加运算单元实现上述功能,则需要在硬件中同时实现四个8-bit的单精度Posit乘累加运算单元(Posit8-FMA)、两个16-bit的单精度Posit乘累加运算单元(Posit16-FMA)以及一个32-bit的单精度Posit乘累加运算单元(Posit32-FMA),从而根据精度模式控制信号使能需要的单精度乘累加运算单元。
将本方案实现的32-bit的多精度Posit乘累加运算单元与现有的基于8-bit、16-bit、32-bit的单精度乘累加运算单元在TSMC 28nm工艺下综合,比较二者的面积、功耗、延时、计算性能、面积效率以及能量效率如表1所示:
表1
可以看到,本方案在32-bit单精度乘累加运算单元基础上通过分段以及硬件复用等手段,在增加少量延时及面积开销的情况下,实现了对低精度并行计算的高效支持。此外,针对低精度并行的8-bit或16-bit运算,本方案相比对应的单精度实现,分别实现了1.65倍和1.23倍的计算性能提升,而针对32-bit的运算,在额外增加了控制与选择逻辑的情况下仅损失了部分计算性能。更重要的是,若想利用现有单精度乘累加运算单元实现本方案同等的多精度支持功能,需要实现四组8-bit乘累加单元、两组16-bit乘累加单元以及一组32-bit乘累加单元的组合,对比下来本方案实现了45.82%的面积降低以及78.66%的功耗降低,达到了较高的面积效率及能效。
此外,本装置除了对本实施例中的Posit格式支持,还能轻松拓展对其他格式,如传统浮点格式、定点格式等格式的支持,从而能够灵活应用于不同的计算场景。
本发明提供了一种兼容多种格式的多精度融合乘累加运算装置及方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (10)
1.一种兼容多种格式的多精度融合乘累加运算装置,其特征在于,包括多精度译码器、多精度乘累加运算模块和多精度编码器;
其中所述多精度译码器和多精度编码器分别用于对输入操作数的译码和对输出结果的编码;
所述多精度乘累加模块接受多精度译码器的输出,完成多精度的乘累加计算,计算结果作为多精度编码器的输入。
2.根据权利要求1所述的装置,其特征在于,所述多精度译码器和多精度编码器支持多精度输入输出,还支持用户根据统一的译码器编码器输入输出数据排布规则自定义添加各种格式的译码、编码模块,从而实现对各种格式的兼容支持。
3.根据权利要求2所述的装置,其特征在于,所述多精度译码器中输入32-bit的操作数,输出操作数的符号、指数和尾数值;在不同的精度模式下,输出的符号、指数及尾数值的有效数据位会发生如下变化,对于无效数据位填充0:
8-bit精度模式下,输出符号的4个位均有效,表示输入的4个8-bit操作数各自的符号;输出指数的32-bit均有效,每8-bit都是1个有符号数,表示输入的4个8-bit操作数各自的有效指数;输出的尾数的32-bit均有效,每8-bit表示输入的4个8-bit操作数各自的有效尾数;
16-bit精度模式下,输出符号的第2和第4比特有效,表示输入的2个16-bit操作数各自的符号;输出指数的每14-bit有效,表示输入的2个16-bit操作数各自的有效指数;输出尾数的32-bit均有效,每16-bit表示输入的2个16-bit操作数各自的有效尾数;
32-bit精度模式下,输出符号仅最高位有效,表示输入的1个32-bit操作数的符号;输出指数仅低14-bit有效,表示输入的1个32-bit操作数的有效指数;输出尾数的32-bit均有效,表示输入的1个32-bit操作数的有效尾数;
所述多精度编码器中输入符号、指数和尾数值,输出32-bit的编码结果;在不同的精度模式下,输入的符号、指数及尾数值的有效数据位会发生如下变化,无效数据位为0:
8-bit精度模式下,输入符号的4个位均有效,表示将输出的4个8-bit结果各自的符号;输入指数的32-bit均有效,每8-bit都是1个有符号数,表示将输出的4个8-bit结果各自的有效指数;输入尾数的32-bit均有效,每8-bit表示将输出的4个8-bit结果各自的有效尾数;
16-bit精度模式下,输入符号的第2和第4比特有效,表示将输出的2个16-bit结果各自的符号;输入指数的每14-bit有效,表示将输出的2个16-bit结果各自的有效指数;输入尾数的32-bit均有效,每16-bit表示将输出的2个16-bit结果各自的有效尾数;
32-bit精度模式下,输入符号仅最高位有效,表示将输出的1个32-bit结果的符号;输入指数仅低14-bit有效,表示将输出的1个32-bit结果的有效指数;输入尾数的32-bit均有效,表示将输出的1个32-bit操作数的有效尾数。
4.根据权利要求3所述的装置,其特征在于,所述多精度译码器接收32-bit的输入操作数,产生统一的译码器输出,将多精度译码器的输出送入多精度乘累加运算模块,处理得到统一的编码器输入,然后送入多精度编码器,得到32-bit的多精度运算结果。
5.根据权利要求4所述的装置,其特征在于,所述多精度乘累加运算模块包括多精度尾数相乘模块、多精度指数相加模块、多精度指数求差模块、多精度尾数对齐模块、多精度尾数相加模块、多精度尾数归一化与指数调整模块和多精度尾数舍入模块;
在所述多精度尾数相乘模块内,根据精度模式完成两个32-bit的尾数间的乘法,得到64-bit的乘积结果,具体包括:在32-bit精度模式下,两个32-bit的输入尾数通过32-bit的乘法器相乘得到64-bit的乘积结果;在16-bit精度模式下,两个32-bit的输入尾数各自的低16-bit通过16-bit的乘法器相乘,得到64-bit乘积结果的低32-bit的值,各自的高16-bit相乘,得到64-bit乘积结果的高32-bit的值;在8-bit精度模式下,两个32-bit的输入尾数各自的每8-bit通过8-bit的乘法器相乘,得到的四组16-bit乘积结果组合在一起即为64-bit的乘积结果;
将两个32-bit的输入尾数A,B每8-bit划分,各自得到四个子操作数A3,A2,A1,A0和B3,B2,B1,B0,再实现16个8-bit的子乘法器,分别为A0*B0,A0*B1,A1*B0,A0*B2,A1*B1,A2*B0,A0*B3,A1*B2,A2*B1,A3*B0,A1*B3,A2*B2,A3*B1,A2*B3,A3*B2,A3*B3;
将不同精度模式下32-bit的乘法器、16-bit的乘法器以及8-bit的乘法器均通过所述16个8-bit的子乘法器实现,根据不同的精度模式使能需要的子乘法器数,再将结果相加,从而实现在相同的硬件中的对多精度乘法运算的支持,具体包括:
在16-bit的精度模式下,输入的32-bit尾数A和B的低16-bit的乘法计算如下:
(A1A0)*(B1B0)
=((A1<<8)+A0)*((B1<<8)+B0)
=(A1*B1)<<16+(A1*B0+A0*B1)<<8+A0*B0
输入的32-bit尾数A和尾数B的高16-bit的乘法计算如下:
(A3A2)*(B3B2)
=((A3<<8)+A2)*((B3<<8)+B2)
=(A3*B3)<<16+(A3*B2+A2*B3)<<8+A2*B2
在16-bit精度模式下,将A0*B0,A0*B1,A1*B0,A1*B1,A2*B2,A2*B3,A3*B2,A3*B3这8个子乘法器的结果移位相加即能够得到16-bit精度模式下的尾数乘法运算结果;
在32-bit精度模式下,将全部16个子乘法器的结果移位相加即能够得到32-bit精度模式下的尾数乘法运算结果;
在8-bit精度模式下,将A0*B0,A1*B1,A2*B2,A3*B3四个子乘法器的结果移位相加即能够得到8-bit精度模式下的尾数乘法运算结果。
6.根据权利要求5所述的装置,其特征在于,在多精度指数相加模块、多精度指数求差模块、多精度尾数相加模块和多精度尾数归一化与指数调整模块内,采用分段相加的方式,完成两个多精度数据的相加:
首先将输入的两个多精度数据各自划分为四个子操作数,分别为A3,A2,A1,A0,以及B3,B2,B1,B0,并通过四个子加法器A3+B3,A2+B2,A1+B1,A0+B0并行完成四组子操作数的相加,在8-bit精度模式下,四组子加法器的结果即为最终结果;在16-bit精度模式下,子加法器A0+B0和A2+B2产生的进位需要向前传播,即分别与子加法器A1+B1,A3+B3的结果相加;在32-bit精度模式下,四组子加法器产生的进位均需向高位传播,即子加法器A0+B0产生的进位需要与子加法器A1+B1的结果相加,相加后的结果产生的进位继续向高位传播,与子加法器A2+B2的结果相加,产生的进位继续与子加法器A3+B3的结果相加,得到最终的多精度相加结果。
7.根据权利要求6所述的装置,其特征在于,在多精度尾数对齐模块内,需要根据加数和乘数的指数差完成多精度加数和乘数尾数的对齐,尾数对齐过程为:
在8-bit精度模式下,初始将8-bit的加数置于16-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于9时,加数右移量为0;当E小于等于-15时,加数右移量等于24;否则,加数右移量等于9-E;
在16-bit精度模式下,初始将16-bit的加数置于32-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于17时,加数右移量为0;当E小于等于-31时,加数右移量为48;否则,加数右移量为17-E;
在32-bit精度模式下,初始将32-bit的加数置于64-bit乘数的左侧,再根据加数与乘数的指数差E完成加数的右移移位对齐:当E大于等于33时,加数右移量为0;当E小于等于-63时,加数右移量为96;否则,加数右移量为33-E。
8.根据权利要求7所述的装置,其特征在于,根据精度模式控制信号完成多精度加数尾数和乘数尾数数据重排,满足在8-bit、16-bit及32-bit精度模式下,加数值初始位置位于其对应的乘数的左侧;所述多精度加数尾数是输入多精度操作数C的尾数;所述乘数尾数是输入多精度操作数A和B的尾数乘积;
得到重排后的加数尾数和乘数尾数后,加数尾数需要根据加数和乘数的指数差右移,以实现和乘数尾数的移位对齐;
通过分段移位来减少支持多精度模式下的动态移位的硬件开销,具体包括:
在8-bit精度模式下,重排后的加数每24-bit存在各自的右移移位量,移位量位于0~24之间;其中每24-bit对应一组输入操作数加数,共四组;
在16-bit精度模式下,重排后的加数每48-bit存在各自的右移移位量,移位量位于0~48之间;其中每48-bit对应一组输入操作数加数,共两组;
在32-bit精度模式下,重排后的96-bit的加数存在统一的右移移位量,移位量位于0~96之间;
根据精度模式控制信号能够确定每24-bit有效数据段d,c,b,a各自的移位量,分别为sft_amt_d,sft_amt_c,sft_amt_b,sft_amt_a,所述移位量sft_amt_d,sft_amt_c,sft_amt_b,sft_amt_a均利用7-bit数据位宽表示数据移位量,即sft_amt_d[6:0],sft_amt_c[6:0],sft_amt_b[6:0],sft_amt_a[6:0];
确定加数每段的对齐移位量后,通过分段与分级移位支持多精度的移位,具体包括:对于每24-bit的加数,并行地进入各自的移位器中完成五级移位,移位量分别为:sft_amt_d[4:0],sft_amt_c[4:0],sft_amt_b[4:0],sft_amt_a[4:0];完成第1~5级的移位后,移位后的结果根据精度模式控制信号决定是否与高比特移出的位进行位或运算:
在8-bit精度模式下,无需进行位或运算;
在16-bit精度模式下,c段移位的结果需要与d段移出的位进行位或运算,a段移位后的结果需要与b段移出的位进行位或运算;
在32-bit精度模式下,a,b,c段移位的结果都需要与更高段移出的位进行位或运算;
完成第1~5级的分段移位后,a与b、c与d移位处理后的结果分别作为一个48-bit的数据整体参与第6级的移位,即根据移位量第6比特的值sft_amt_b[5],sft_amt_d[5]判断是否需要右移32-bit:当值为1时,需要右移32-bit,当值为0时,不需要移位;当处于32-bit精度模式下,低48-bit移位后的结果需要与高48-bit移出的位进行位或运算;
完成第6级的移位后,两个48-bit的移位结果组成一个96-bit的整体参与第7级的移位,即根据移位量第7比特的值sft_amd_d[6]选择是否需要右移64-bit,当值为1时,右移64-bit;当值为0时,不移位;最终的输出结果为多精度模式下加数移位对齐的结果。
9.根据权利要求8所述的装置,其特征在于,在多精度尾数归一化与指数调整模块内,移位对齐后的加数和乘数尾数相加后的结果需要进行归一化移位,包括多精度前导零计数以确定移位量,以及根据移位量进行多精度移位两个过程;
对于多精度前导零计数,在8-bit精度模式下需要计算每24-bit结果各自的前导零数cpm[3],cpm[2],cpm[1]和cpm[0];在16-bit精度模式下,需要计算每48-bit结果各自的前导零数cph[1],cph[0];在32-bit精度模式下,计算96-bit整体结果的前导零数cps;
采用分段前导零计数的装置:对于每24-bit的输入d,c,b,a,先并行通过24-bit前导零计数模块计数其各自的前导零数cpm及数据有效信号vpm,分别为cpm[3],cpm[2],cpm[1],cpm[0]和vpm[3],vpm[2],vpm[1],vpm[0],前导零数为8-bit精度模式下的各段操作数后续的归一化移位量;对于16-bit精度模式下的两组前导零数cph[1],cph[0]和两组数据有效信号vph[1],vph[0],在8-bit精度模式下前导零数和数据有效信号的基础上通过选择器和加法器得到;对于32-bit精度模式下的前导零数cps和数据有效信号vps,在16-bit精度模式下的前导零数和数据有效信号的基础上通过选择器和加法器得到。
10.一种兼容多种格式的多精度融合乘累加运算方法,其特征在于,包括以下步骤:
步骤1,输入三个32比特的操作数A、B、C,及相应的配置信号,所述配置信号包括精度模式和数据格式,所述精度模式支持32-bit、16-bit和8-bit精度;所述数据格式支持传统浮点格式、Posit格式和定点格式;在后续步骤2~步骤8中完成多精度下A*B+C的运算:
32-bit精度模式下,支持1*32-bit的操作,输出结果D的全部32-bit即为32-bit的输入A,B,C乘累加的结果,表示为:D[31:0]=A[31:0]*B[31:0]+C[31:0];D[31:0]是输出结果D的全部32-bit的值;
16-bit精度模式下,支持2*16-bit的操作,输出结果D的低16-bit、高16-bit的值分别为32-bit的输入A,B,C各自对应的低16-bit、高16-bit的值进行乘累加运算的结果:D[15:0]=A[15:0]*B[15:0]+C[15:0],D[31:16]=A[31:16]*B[31:16]+C[31:16];
8-bit精度模式下,支持4*8-bit的操作,输出结果D的每8-bit的值分别为32-bit的输入A,B,C的各自对应的每8-bit的值分别乘累加运算的结果,表示为:D[7:0]=A[7:0]*B[7:0]+C[7:0],D[15:8]=A[15:8]*B[15:8]+C[15:8],D[23:16]=A[23:16]*B[23:16]+C[23:16],D[31:24]=A[31:24]*B[31:24]+C[31:24];
步骤2,根据配置信号调用相应的译码器完成输入数据的译码过程,输出三个操作数A、B、C各自有效的符号、指数和尾数值;
步骤3,三个操作数A、B、C的指数值依次在多精度指数相加模块和多精度指数求差模块中完成指数相加,以及指数比较与求差,同时,A和B的尾数值在多精度尾数相乘模块内完成乘法运算得到乘数的尾数值;所述指数相加是指:A的指数加上B的指数,相加后的结果为乘数的指数;所述指数比较与求差是指:计算加数C的指数与所述乘数的指数的指数差;
步骤4,根据步骤3得到的结果,在多精度尾数对齐模块内完成乘数与加数的尾数的对齐;
步骤5,在多精度尾数相加模块内完成对齐后的乘数尾数与加数尾数的累加;
步骤6,在多精度尾数归一化与指数调整模块内,完成尾数的归一化移位;同时根据移位量调整最终结果的指数值;
步骤7,在多精度尾数舍入模块内,完成归一化后的尾数的舍入,得到最终结果的尾数值;
步骤8,根据配置信号调用相应的编码器完成最终结果的编码过程,输出运算结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310972029.5A CN117008872A (zh) | 2023-08-03 | 2023-08-03 | 一种兼容多种格式的多精度融合乘累加运算装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310972029.5A CN117008872A (zh) | 2023-08-03 | 2023-08-03 | 一种兼容多种格式的多精度融合乘累加运算装置及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117008872A true CN117008872A (zh) | 2023-11-07 |
Family
ID=88566804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310972029.5A Pending CN117008872A (zh) | 2023-08-03 | 2023-08-03 | 一种兼容多种格式的多精度融合乘累加运算装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117008872A (zh) |
-
2023
- 2023-08-03 CN CN202310972029.5A patent/CN117008872A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107168678B (zh) | 一种乘加计算装置及浮点乘加计算方法 | |
CN107273090B (zh) | 面向神经网络处理器的近似浮点乘法器及浮点数乘法 | |
CN107291419B (zh) | 用于神经网络处理器的浮点乘法器及浮点数乘法 | |
US6763368B2 (en) | Method and apparatus for performing single-cycle addition or subtraction and comparison in redundant form arithmetic | |
CN101221490B (zh) | 一种具有数据前送结构的浮点乘加单元 | |
US20210349692A1 (en) | Multiplier and multiplication method | |
CN112860220B (zh) | 一种适用于多精度计算的可重构浮点乘加运算单元及方法 | |
US5148386A (en) | Adder-subtracter for signed absolute values | |
US5677861A (en) | Arithmetic apparatus for floating-point numbers | |
US6988119B2 (en) | Fast single precision floating point accumulator using base 32 system | |
US11106431B2 (en) | Apparatus and method of fast floating-point adder tree for neural networks | |
CN117111881B (zh) | 支持多输入多格式的混合精度乘加运算器 | |
CN110688086A (zh) | 一种可重构的整型-浮点加法器 | |
CN116933840A (zh) | 支持可变指数位宽的多精度Posit编解码运算装置及方法 | |
US5260889A (en) | Computation of sticky-bit in parallel with partial products in a floating point multiplier unit | |
CN116594590A (zh) | 一种浮点数据的多功能运算装置及方法 | |
US5623435A (en) | Arithmetic unit capable of performing concurrent operations for high speed operation | |
US4639887A (en) | Bifurcated method and apparatus for floating point addition with decreased latency time | |
EP3647939A1 (en) | Arithmetic processing apparatus and controlling method therefor | |
US5278782A (en) | Square root operation device | |
CN116627379A (zh) | 可重构的支持多精度浮点或定点运算的方法及系统 | |
US7054898B1 (en) | Elimination of end-around-carry critical path in floating point add/subtract execution unit | |
CN116450085A (zh) | 一种可扩展的BFloat16点乘运算器及微处理器 | |
US5170371A (en) | Method and apparatus for rounding in high-speed multipliers | |
US7401107B2 (en) | Data processing apparatus and method for converting a fixed point number to a floating point number |
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 |