CN116450085A - 一种可扩展的BFloat16点乘运算器及微处理器 - Google Patents
一种可扩展的BFloat16点乘运算器及微处理器 Download PDFInfo
- Publication number
- CN116450085A CN116450085A CN202310608760.XA CN202310608760A CN116450085A CN 116450085 A CN116450085 A CN 116450085A CN 202310608760 A CN202310608760 A CN 202310608760A CN 116450085 A CN116450085 A CN 116450085A
- Authority
- CN
- China
- Prior art keywords
- mantissa
- stage
- module
- exponent
- sum
- 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
- 238000012545 processing Methods 0.000 claims abstract description 71
- 238000010606 normalization Methods 0.000 claims abstract description 31
- 230000000295 complement effect Effects 0.000 claims abstract description 25
- 238000004364 calculation method Methods 0.000 claims abstract description 8
- 238000007667 floating Methods 0.000 claims description 86
- 238000012937 correction Methods 0.000 claims description 17
- 239000013598 vector Substances 0.000 claims description 14
- 230000001502 supplementing effect Effects 0.000 claims description 10
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 claims description 7
- HVXBOLULGPECHP-UHFFFAOYSA-N combretastatin A4 Natural products C1=C(O)C(OC)=CC=C1C=CC1=CC(OC)=C(OC)C(OC)=C1 HVXBOLULGPECHP-UHFFFAOYSA-N 0.000 claims description 4
- 230000006835 compression Effects 0.000 claims description 3
- 238000007906 compression Methods 0.000 claims description 3
- 238000000605 extraction Methods 0.000 claims description 2
- 238000013136 deep learning model Methods 0.000 abstract description 7
- 238000012549 training Methods 0.000 abstract description 5
- 238000000034 method Methods 0.000 description 15
- 238000013135 deep learning Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 101100269618 Streptococcus pneumoniae serotype 4 (strain ATCC BAA-334 / TIGR4) aliA gene Proteins 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 101150026430 manA gene Proteins 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011160 research 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种可扩展的BFloat16点乘运算器及微处理器,所述可扩展的BFloat16点乘运算器包括以4项点乘单元为基础单元通过组合求和的方式连接的点乘运算单元,所述4项点乘单元包括输入处理模块、尾数乘法模块、指数处理模块、符号位逻辑模块、尾数对齐模块、尾数取补模块、尾数加法模块、前导零计数器、规格化模块、舍入模块以及输出寄存器,且上述部件形成三级流水段结构,且第一级流水段、第二级流水段和第三级流水段在3个时钟周期完成1次4项点乘运算。本发明旨在实现一种可扩展的BFloat16点乘运算硬件架构以解决深度学习模型中点乘运算存在很长的计算延迟,影响模型训练和推理速度的问题。
Description
技术领域
本发明涉及微处理器设计领域,具体涉及一种可扩展的BFloat16点乘运算器及微处理器。
背景技术
BFloat16是一种新型的浮点数据类型,由1位符号位、8位偏移指数位和7位尾数位组成。与传统的IEEE 754定义的32位单精度(SP)浮点数相比,16位的BFloat16格式应用到深度学习模型时占用更少的内存和传输带宽,在数据计算时消耗更少的硬件资源。同时,BFloat16有着与单精度浮点数等长的指数位,BFloat16可以满足绝大多数深度学习模型中与单精度浮点数相同的数值范围要求。进一步的研究表明,在深度学习领域中可以使用BFloat16作为一种优化技术,可以提高训练模型时CPU和GPU之间的通信效率,进而提升深度学习任务的速度和性能。因此,探索硬件架构上的BFloat16的运算单元设计,是加速深度学习应用的一种方式。
点乘运算也称为向量内积(vector inner product),是一种常见的线性代数运算。点积运算广泛存在于深度学习应用中,可以用于计算两个向量之间的相似度,也可以用于神经网络中的全连接层、卷积操作等。传统的点积运算使用乘加单元循环相加的方式来实现,以计算n项的点乘运算Z=A0×B0+A1×B1+…+An-1×Bn-1为例,该方式需要使用乘加单元进行n次计算得到结果,存在很长的计算延迟。另一种方式是先使用并行的乘法器计算Ai×Bi(i=0,1,…,n-1),再使用log2 n级级联的并行加法器将每个积加到一起得到最终的点乘结果,这种实现方式可以极大缩短点乘运算的延迟。然而,由于浮点加法运算涉及对阶求和、舍入等操作,上述的第二种方式仍然存在缩短点乘运算延迟的探索空间。
在一项点乘电路的现有研究中,对支持IEEE 754规定的单精度浮点数的4项点乘运算做了优化,该电路以Z=(A0×B0+A1×B1)+(A2×B2+A3×B3)的方式计算4项的点乘,并将中间舍入操作与移位对齐操作合并,同时省略中间的加法和规格化操作,以减少点乘运算的延迟。在另一项研究中,对单精度浮点数和双精度浮点数的4项点乘单元做了优化,设计了一种新的硬件架构,该电路在得到4个浮点数尾数乘积后,对这4个尾数乘积同时进行对齐相加,这种方式进一步减少了点乘运算的延迟。然而,在深度学习应用中点乘运算的项数不定,这两种点乘硬件架构仅面向4项的点乘运算,无法充分满足深度学习应用的计算需求。同时,这两种电路不支持BFloat16数据格式,不适用于使用BFloat16数据格式的深度学习模型中。因此,探索支持BFloat16数据格式、可扩展的点乘单元的硬件架构,对于满足当前深度学习模型减少内存使用和通信带宽的需求、加速模型训练和推理速度至关重要。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种可扩展的BFloat16点乘运算器及微处理器,本发明旨在实现一种可扩展的BFloat16点乘运算硬件架构以解决深度学习模型中点乘运算存在很长的计算延迟,影响模型训练和推理速度的问题。
为了解决上述技术问题,本发明采用的技术方案为:
一种可扩展的BFloat16点乘运算器,包括以4项点乘单元为基础单元通过组合求和的方式连接的点乘运算单元,所述4项点乘单元包括输入处理模块、尾数乘法模块、指数处理模块、符号位逻辑模块、尾数对齐模块、尾数取补模块、尾数加法模块、前导零计数器、规格化模块、舍入模块以及输出寄存器,所述输入处理模块用于从输入的向量中提取符号位、指数和尾数,所述尾数乘法模块用于执行进行尾数乘法,所述指数处理模块用于计算指数的最大指数和以及最大指数和与其他指数和的差值;所述符号位逻辑模块用于计算浮点数符号位;所述尾数对齐模块用于根据最大指数和与其他指数和的差值对尾数积进行移位;所述尾数取补模块用于根据浮点数符号位对移位后的尾数积进行取补;所述尾数加法模块用于对取补后的尾数积进行求和得到尾数和;所述前导零计数器用于计算尾数和的前导零个数,所述规格化模块用于对尾数和进行规格化移位和指数更新;所述舍入模块用于对规格化移位后的尾数进行舍入,并将最终的符号位、指数位、尾数位合并得到4项点乘运算的最终结果并通过输出寄存器输出。
可选地,所述4项点乘单元为三级流水段结构,所述输入处理模块、尾数乘法模块、指数处理模块以及符号位逻辑模块构成第一级流水段,所述尾数对齐模块、尾数取补模块以及尾数加法模块构成第二级流水段,所述前导零计数器、规格化模块、舍入模块以及输出寄存器构成第三级流水段,所述第一级流水段、第二级流水段和第三级流水段在3个时钟周期完成1次4项点乘运算。
可选地,所述指数处理模块包括用于计算指数的最大指数和的最大指数和逻辑运算电路,所述最大指数和逻辑运算电路包括四个加法器、两个第一级减法器、两个第一级选择器、一个第二级减法器和一个第二级选择器,每一个加法器用于将八个输入指数exp_a、exp_b、exp_c、exp_d、exp_e、exp_f、exp_g、exp_h的两个求和,每两个加法器的输出端共同连接一个第一级减法器和一个第一级选择器,且第一级减法器用于将两个加法器的输出做减法运算后作为控制信号、以控制选择器在两个加法器的输出择一输出至第二级减法器和第二级选择器,第二级减法器用于将两个第一级选择器的输出做减法运算后作为控制信号以控制第二级选择器在两个第一级选择器的输出中择一作为计算得到的最大指数和。
可选地,所述指数处理模块还包括用于计算最大指数和与其他指数和的差值的差值逻辑计算电路,所述差值逻辑计算电路包括四个减法器,所述四个减法器用于将最大指数和逻辑运算电路输出的最大指数及其一个加法器的输出结果做减法运算,从而得到最大指数和与其他指数和的差值。
可选地,所述尾数取补模块以4项点乘单元的第4组浮点数乘积的符号位为基准并作为点积运算最终的符号位,比较其他浮点数乘积的符号位与基准是否相同,并对不相同的浮点数乘积的尾数积进行取补运算,以取补后相加的电路来取代减法电路,同时计算不同符号位的个数count,并对尾数积进行两位的符号位扩展。
可选地,所述尾数加法模块将取补后的尾数积连同第4个尾数积经过一次压缩器CSA4:2压缩成两个加数sum和carry的形式,再通过传播进位加法器CPA将压缩得到的两个加数sum和carry相加得到4个尾数积之和,最后根据尾数积之和的两位符号位sig[0]和不同符号位的个数count判断是否需要进行取补运算,以及是否需要对基准符号位进行修正,包括:
(a),在count=0时,不需要进行取补运算和符号修正;
(b),在count=1时,如果sig[0]=1,则判定不需要进行取补运算和符号修正;sig[0]=0,则判定需要进行取补运算,并对符号位进行取反;
(c),在count=2时,如果sig[0]=1,则判定需要进行取补运算,并对符号位进行取反;sig[0]=0,则判定不需要进行取补运算和符号修正;
(d),在count=3时,如果sig[0]=1,则判定不需要进行取补运算和符号修正;sig[0]=0,则判定需要进行取补运算,并对符号位进行取反。
可选地,所述以4项点乘单元为基础单元通过组合求和的方式连接的点乘运算单元为64项点乘运算单元。
可选地,所述64项点乘运算单元包括3级的浮点数加法,且由第一级流水段S0、第二级流水段S1、第三级流水段S2、第四级流水段S3以及第五级流水段S4共5级流水段组成,其中第一级流水段S0包含输入处理模块、尾数乘法模块、指数处理模块和符号位逻辑模块;第二级流水段S1包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第三级流水段S2包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第四级流水段S3包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第五级流水段S4包含前导零计数模块、规格化模块和舍入模块。
可选地,所述第一级流水段S0用于完成对2个位宽为64×16的输入向量X、Y中所有BFloat16操作数的符号位、指数、尾数的提取,完成尾数的乘法,以及第一级浮点数加法的指数处理,每8个指数作为一组,得到第一级浮点数加法的最大指数和以及最大指数和与其他指数和的差值;所述第二级流水段S1用于完成第一级浮点数加法的尾数求和:每4个来自第一级流水段S0的尾数积、符号位作为一组,根据第一级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第一级浮点数加法的尾数和以及符号位;同时,完成第二级浮点数的指数处理,每4个来自第一级浮点加法的最大指数和作为一组,得到第二级的最大指数和以及指数差值;所述第三级流水段S2用于完成第二级浮点数加法的尾数求和:每4个来自第一级浮点数加法的尾数和、符号位作为一组,根据第二级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第二级浮点数加法的尾数和以及符号位;同时,完成第三级浮点数的指数处理,每4个来自第二级浮点加法的最大指数和作为一组,求第三级的最大指数和以及指数差值;所述第四级流水段S3用于完成第三级浮点数加法的尾数求和:每4个来自第二级浮点数加法的尾数和、符号位作为一组,根据第三级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第三级浮点数加法的尾数和以及符号位;所述第五级流水段S4用于统计第三级浮点数加法得到的尾数的前导零个数,再进行包括规格化移位和指数更新在内的规格化,和舍入操作,得到最终的计算结果Rst并输出。
此外,本发明还提供一种微处理器,包括带有算术逻辑单元ALU的微处理器本体,算术逻辑单元ALU中带有点乘运算器,点乘运算器为所述可扩展的BFloat16点乘运算器。
和现有技术相比,本发明主要具有下述优点:
1、本发明在计算BFloat16点乘运算时,与传统的使用并行乘法器和级联加法器方式相比,显著降低了计算延迟。
2、本发明实现了一种可扩展的点乘运算硬件架构实现方式,能够适应不同数据量计算需求的深度学习模型。
3、本发明采用流水化的实现方式,能够以较小的面积开销提供充分的BFloat16浮点运算能力。
附图说明
图1为本发明实施例中4项点乘单元(基础单元)的结构示意图。
图2为本发明实施例中最大指数和逻辑运算电路的结构示意图。
图3为本发明实施例中64项点乘运算单元的结构示意图。
具体实施方式
本实施例提供一种可扩展的BFloat16点乘运算器,包括以4项点乘单元为基础单元通过组合求和的方式连接的点乘运算单元,如图1所示,4项点乘单元包括输入处理模块、尾数乘法模块、指数处理模块、符号位逻辑模块、尾数对齐模块、尾数取补模块、尾数加法模块、前导零计数器、规格化模块、舍入模块以及输出寄存器,所述输入处理模块用于从输入的向量中提取符号位、指数和尾数,所述尾数乘法模块用于执行进行尾数乘法,所述指数处理模块用于计算指数的最大指数和以及最大指数和与其他指数和的差值;所述符号位逻辑模块用于计算浮点数符号位;所述尾数对齐模块用于根据最大指数和与其他指数和的差值对尾数积进行移位;所述尾数取补模块用于根据浮点数符号位对移位后的尾数积进行取补;所述尾数加法模块用于对取补后的尾数积进行求和得到尾数和;所述前导零计数器用于计算尾数和的前导零个数,所述规格化模块用于对尾数和进行规格化移位和指数更新;所述舍入模块用于对规格化移位后的尾数进行舍入,并将最终的符号位、指数位、尾数位合并得到4项点乘运算的最终结果并通过输出寄存器输出。图1中,A、B是两组输入操作数;Valid是输入有效信号;Rst是运算结果,即向量A与向量B点乘的结果;图中所有箭头旁边的数字表示线路中的数据位宽,灰色图框表示流水线寄存器。
如图1所示,本实施例中的4项点乘单元为三级流水段结构(图1中的虚线用于表示不同级流水段结构),所述输入处理模块、尾数乘法模块、指数处理模块以及符号位逻辑模块构成第一级流水段,所述尾数对齐模块、尾数取补模块以及尾数加法模块构成第二级流水段,所述前导零计数器、规格化模块、舍入模块以及输出寄存器构成第三级流水段,所述第一级流水段、第二级流水段和第三级流水段在3个时钟周期完成1次4项点乘运算。
第一级流水段主要有四个模块,分别为输入处理模块、尾数乘法模块、指数处理模块、符号位逻辑模块。输入处理模块首先根据BFloat16数据格式生成两组尾数集合、两组尾数集合和两组符号位集合,作为其他三个模块的输入。接着,符号位逻辑模块计算浮点数符号位。尾数乘法器模块按照尾数集合中各元素的对应关系,乘法模块计算尾数积。指数处理模块依次计算指数和、比较得到最大指数和、计算最大指数和与其他指数和的差值。本实施例中指数处理模块包括用于计算指数的最大指数和的最大指数和逻辑运算电路,如图2所示,最大指数和逻辑运算电路包括四个加法器、两个第一级减法器、两个第一级选择器、一个第二级减法器和一个第二级选择器,每一个加法器用于将八个输入指数exp_a、exp_b、exp_c、exp_d、exp_e、exp_f、exp_g、exp_h的两个求和,每两个加法器的输出端共同连接一个第一级减法器和一个第一级选择器,且第一级减法器用于将两个加法器的输出做减法运算后作为控制信号、以控制选择器在两个加法器的输出择一输出至第二级减法器和第二级选择器,第二级减法器用于将两个第一级选择器的输出做减法运算后作为控制信号以控制第二级选择器在两个第一级选择器的输出中择一作为计算得到的最大指数和。图2中,exp_a、exp_b、exp_c、exp_d、exp_e、exp_f、exp_g、exp_h是指数处理模块的8个输入指数;exp_max是指数处理模块的运算结果,即最大的指数和。加法器用来计算两个数的和;减法器用来计算两个数的差;选择器用来从两个输入中选择一个输入作为输出。最大指数和逻辑运算电路的工作原理如下:(1)使用加法器计算两两指数和,exp_sum1=exp_a+exp_b,exp_sum2=exp_c+exp_d,以此类推,得到四个指数和exp_sum1、exp_sum2、exp_sum3、exp_sum4。其中四个指数和比每个指数都多一位,保证加法结果不会溢出。(2)使用减法器计算两两指数和的差值:exp_diff_12=exp_sum1-exp_sum2,exp_diff_34=exp_sum3-exp_sum4。其中,exp_diff_12、exp_diff_34比四个指数和都多一位,记为S位。使用2路选择器,根据exp_diff_12的S位决定减法结果是否为正数,以此来选择exp_sum1和exp_sum2这两者中较大的指数,记为exp_large12,判断逻辑为:如果exp_diff_12.S为1,则exp_large12=exp_sum2;反之,exp_large12=exp_sum1。以类似的方式得到exp_large34。(3)计算exp_large12与exp_large34的差值,exp_diff,并根据S位得到这两者的最大值exp_max,该过程与(2)类似。此时,exp_max也是四个指数和的最大值,即:计算得到的最大指数和。
计算最大指数和exp_max与其他指数和的差值。该部分仅需使用减法器对exp_max与四个指数和做减法运算即可。具体地,本实施例指数处理模块还包括用于计算最大指数和与其他指数和的差值的差值逻辑计算电路,所述差值逻辑计算电路包括四个减法器,所述四个减法器用于将最大指数和逻辑运算电路输出的最大指数及其一个加法器的输出结果做减法运算,从而得到最大指数和与其他指数和的差值。
第二级流水段完成4个尾数乘积的求和操作,主要由尾数对齐模块、尾数取补模块和尾数加法模块三部分组成。尾数对齐模块根据最大指数和与其他指数和的差值,对尾数积进行移位操作。本实施例中,尾数取补模块以4项点乘单元的第4组浮点数乘积的符号位为基准并作为点积运算最终的符号位,比较其他浮点数乘积的符号位与基准是否相同,并对不相同的浮点数乘积的尾数积进行取补运算,以取补后相加的电路来取代减法电路,同时计算不同符号位的个数count,并对尾数积进行两位的符号位扩展。
本实施例中,尾数加法模块将取补后的尾数积连同第4个尾数积经过一次压缩器CSA4:2压缩成两个加数sum和carry的形式,再通过传播进位加法器CPA将压缩得到的两个加数sum和carry相加得到4个尾数积之和,最后根据尾数积之和的两位符号位sig[0]和不同符号位的个数count判断是否需要进行取补运算,以及是否需要对基准符号位进行修正,包括:
(a),在count=0时,不需要进行取补运算和符号修正;
(b),在count=1时,如果sig[0]=1,则判定不需要进行取补运算和符号修正;sig[0]=0,则判定需要进行取补运算,并对符号位进行取反;
(c),在count=2时,如果sig[0]=1,则判定需要进行取补运算,并对符号位进行取反;sig[0]=0,则判定不需要进行取补运算和符号修正;
(d),在count=3时,如果sig[0]=1,则判定不需要进行取补运算和符号修正;sig[0]=0,则判定需要进行取补运算,并对符号位进行取反。
第三级流水线由前导零计数模块、规格化模块(包括规格化移位器和指数更新电路两部分)和舍入模块三部分组成。前导零计数模块计算前导零的个数。规格化模块对尾数和进行移位使得最高有效位为“1”,同时将最大指数和减去移位量得到更新后的指数。舍入模块将规格化后的尾数向零舍入,并将最终的符号位、指数位、尾数位合并,得到4项点乘运算的最终结果。
以计算BFloat16数据格式的4项点乘运算Z=A0×B0+A1×B1+A2×B2+A3×B3为例,4项点乘单元进行4项点乘运算的过程如下:1)输入处理模块从两组BFloat16浮点数A、B中提取出两个符号位,记为sig0[3:0]和sig1[3:0]、两个指数位,记为exp0[3:0][7:0]和exp1[3:0][7:0],以及尾数位,并对尾数位进行前导“1”扩展得到扩展后的尾数位,记为man0[3:0][7:0]和man1[3:0][7:0]。2)尾数乘法模块将尾数两两相乘得到尾数之积(尾数积),可表示为:
man_prd[i]=man0[i]×man1[i]
上式中,man_prd[i]表示第i个尾数积,且有i=0,1,2,3。
符号位逻辑模块对符号位进行异或运算,可表示为:
sig[i]=sig0[i]⊕sig1[i]
上式中,sig[i]表示第i个符号位的异或运算,sig0[i]和sig1[i]分别为两个符号位的第i个符号位,⊕为异或运算。指数处理模块首先计算指数和,可表示为:
exp_sum[i]=exp0[i]+exp1[i](i=0,1,2,3),
上式中,exp_sum[i]表示第i个指数和。
再将指数和两两比较得到最大指数和,具体地:先将exp_sum[0]与exp_sum[1]、exp_sum[2]与exp_sum[3]做比较,得到各自最大值exp_max_01和exp_max_23,再将exp_max_01和exp_max_23做比较得到两者的最大值exp_max(同时也是4个指数和的最大值),如图2所示;接着,计算指数和最大值exp_max与其他指数和的差值,exp_diff[i]=exp_max-exp_sum[i](i=0,1,2,3),作为尾数积的移位移位量。3)尾数对齐模块首先将4个尾数积进行低位的零扩展,得到扩展后的32位尾数积;再根据指数和最大值exp_max与其他指数和的差值exp_diff[3:0],分别对4个尾数进行相应的右移操作,得到对齐后的尾数积man_shift[3:0]。4)尾数取补模块以第四个浮点数乘积的符号位sig[3]为基准,对符号位不同的尾数乘积进行取补运算,并对尾数乘积进行两位的符号位扩展,得到man_inv[3:0];统计不同符号位的个数count。5)尾数加法模块使用压缩器CSA4:2将man_inv[3:0]压缩成两个加数,再使用加法器CPA将压缩后的加数相加得到尾数和man_sum[35:0]。根据尾数和的两位符号位man_sum[35:34]和不同符号位个数count,判断是否需要对尾数和进行取补操作,以及是否需要对结果符号位进行修正,得到用原码表示的尾数和man_sum_inv[33:0],以及结果符号位sig_rslt。判断逻辑如下:(a).count=0时,不需要进行取补运算和符号修正。(b).count=1时,如果man_sum[34]=1,则不需要进行取补运算和符号修正;man_sum[34]=0,则需要进行取补运算,并对符号位进行取反。(c).count=1时,如果man_sum[34]=1,则需要进行取补运算,并对符号位进行取反;man_sum[34]=0,则不需要进行取补运算和符号修正。(d).count=3时,如果man_sum[34]=1,则不需要进行取补运算和符号修正;man_sum[34]=0,则需要进行取补运算,并对符号位进行取反。6)前导零计数器统计man_sum_inv[33:0]的前导零个数lza_count。7)规格化模块将man_sum_inv[33:0]左移lza_count位得到规格化的尾数和man_sum_shift[33:0],使得其最高位man_sum_shift[33]为“1”;同时,将最大指数exp_max减去前导零个数lza_count和指数偏移量,得到结果指数exp_rslt[7:0]。8)舍入模块采用向零舍入的方式,对规格化的尾数进行舍入操作,并去除最高有效位的“1”,得到结果的尾数man_rslt[7:0]。将结果符号位、结果指数和结果尾数组合,得到4项点乘运算的结果rslt[15:0]。具体地,rslt[15:0]={sig_rslt,exp_rslt[7:0],man_rslt[7:0]}。
本实施例中以4项点乘单元为基础单元,通过组合求和的方式实现更多项的点乘单元。其中,在对基础点乘模块产生的中间值求和的过程中,使用与基础点乘单元类似的指数处理模块和相同的尾数求和模块,而这里的指数处理模块以4个来自上一级4项浮点数点乘运算的最大指数和作为输入,不需要再进行指数相加。此外,在进行浮点数加法运算时,将上一级的对齐求和过程与下一级的指数处理过程(计算最大指数、阶差)合并到同一个流水线段,并舍去中间的规格化和舍入阶段,来减少整个点乘运算的延迟。作为一种可选的实施方式,本实施例中以4项点乘单元为基础单元通过组合求和的方式连接的点乘运算单元为64项点乘运算单元。
如图3所示,本实施例中64项点乘运算单元包括3级的浮点数加法,且由第一级流水段S0、第二级流水段S1、第三级流水段S2、第四级流水段S3以及第五级流水段S4共5级流水段组成。其中,第一级流水段S0包含输入处理模块、尾数乘法模块、指数处理模块和符号位逻辑模块;第二级流水段S1包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第三级流水段S2包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第四级流水段S3包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第五级流水段S4包含前导零计数模块、规格化模块和舍入模块。图3中,输入X和输入Y是两组1024位的输入向量;输出Rst是运算结果,即向量X与向量Y点乘的结果。S0指第一级流水线,S1第二级流水线,以此类推。ED表示指数处理,完成从输入指数中得到最大指数和/最大指数以及最大指数/最大指数和与其他指数/指数和的差值;MUL表示尾数乘法;SUM表示尾数求和,包括尾数对齐移位、取补以及尾数加法;LZC表示前导零计数;NORM表示规格化,完成规格化移位以及指数更新;RD表示舍入模块,该模块完成对结果的舍入。其中:
第一级流水段S0用于完成对2个位宽为64×16的输入向量X、Y中所有BFloat16操作数的符号位、指数、尾数的提取,完成尾数的乘法,以及第一级浮点数加法的指数处理,每8个指数作为一组,得到第一级浮点数加法的最大指数和以及最大指数和与其他指数和的差值;
第二级流水段S1用于完成第一级浮点数加法的尾数求和:每4个来自第一级流水段S0的尾数积、符号位作为一组,根据第一级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第一级浮点数加法的尾数和以及符号位;同时,完成第二级浮点数的指数处理,每4个来自第一级浮点加法的最大指数和作为一组,得到第二级的最大指数和以及指数差值;
第三级流水段S2用于完成第二级浮点数加法的尾数求和:每4个来自第一级浮点数加法的尾数和、符号位作为一组,根据第二级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第二级浮点数加法的尾数和以及符号位;同时,完成第三级浮点数的指数处理,每4个来自第二级浮点加法的最大指数和作为一组,求第三级的最大指数和以及指数差值;
第四级流水段S3用于完成第三级浮点数加法的尾数求和:每4个来自第二级浮点数加法的尾数和、符号位作为一组,根据第三级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第三级浮点数加法的尾数和以及符号位;
第五级流水段S4用于统计第三级浮点数加法得到的尾数的前导零个数,再进行包括规格化移位和指数更新在内的规格化,和舍入操作,得到最终的计算结果Rst并输出。
以计算BFloat16数据格式的64项点乘运算Z=A0×B0+A1×B1+…+A63×B63为例,本实施例中将64项点乘运算划分成16个4项点乘运算,分别由基础点乘单元计算得到;再将这16个点乘结果相加得到最64项点乘运算结果。具体过程如下:
1)使用16个基础单元计算得到16个4项点乘运算结果作为中间结果(sig_cluster[15:0],man_sum_cluster[15:0],exp_max_cluster[15:0])。
2)以每4个中间结果的指数exp_max_cluster[i×4+3:i×4](i=0,1,2,3)为一组,计算得到第二级指数最大值exp_max_acc[3:0]。具体地,
exp_max_acc[i]=MAX(exp_max_cluster[i×4],exp_max_cluster[i×4+1],exp_max_cluster[i×4+2],exp_max_cluster[i×4+3]),(i=0,1,2,3)
上式中,MAX表示计算最大值。
并计算指数最大值与其他指数的差值exp_diff_cluster。该过程与4项点乘单元的尾数移位、取补、求和的过程同时进行。
3)每4个中间结果的尾数man_sum_cluster[i×4+3:i×4](i=0,1,2,3)、符号位为一组sig_cluster[i×4+3:i×4](i=0,1,2,3),根据exp_diff_cluster和符号位对尾数进行对齐移位、取补和求和运算,并修正符号位,得到第二级的点乘结果(sig_acc[3:0],man_sum_acc[3:0],exp_max_acc[3:0])。该过程与4项点乘单元的对应过程类似,这里不在赘述。同时,计算第三级指数最大值exp_max_final,具体地,exp_max_final=MAX(exp_max_acc[3:0]),(i=0,1,2,3)。并计算指数最大值与其他指数的差值exp_diff_acc。
4)根据exp_diff_acc和符号位对man_sum_acc进行对齐移位、取补和求和过程,并进行规格化和舍入操作。该过程与4项点乘单元的对应过程类似,这里不在赘述。经过舍入后,得到64项点乘运算结果。
综上所述,本实施例中设计了一种面向深度学习应用的新型4项点乘运算单元和一种可扩展的点乘硬件架构,该架构支持BFloat16数据类型,用于加速深度学习应用中的全连接层、卷积等过程,加速深度学习模型的推理和训练过程。其中,4项点乘单元采用一种新型的模块设计方式和流水线划分方式,使得各流水段的延迟更均衡,并且在计算点乘运算时比传统的实现方式延迟更低。同时,本实施例中展示了一种可扩展的方式,并实现了64项的点乘单元,可扩展的点乘单元可以满足更多样的深度学习应用计算需求。
此外,本实施例还提供一种微处理器,包括带有算术逻辑单元ALU的微处理器本体,算术逻辑单元ALU中带有点乘运算器,点乘运算器为前述可扩展的BFloat16点乘运算器。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种可扩展的BFloat16点乘运算器,其特征在于,包括以4项点乘单元为基础单元通过组合求和的方式连接的点乘运算单元,所述4项点乘单元包括输入处理模块、尾数乘法模块、指数处理模块、符号位逻辑模块、尾数对齐模块、尾数取补模块、尾数加法模块、前导零计数器、规格化模块、舍入模块以及输出寄存器,所述输入处理模块用于从输入的向量中提取符号位、指数和尾数,所述尾数乘法模块用于执行进行尾数乘法,所述指数处理模块用于计算指数的最大指数和以及最大指数和与其他指数和的差值;所述符号位逻辑模块用于计算浮点数符号位;所述尾数对齐模块用于根据最大指数和与其他指数和的差值对尾数积进行移位;所述尾数取补模块用于根据浮点数符号位对移位后的尾数积进行取补;所述尾数加法模块用于对取补后的尾数积进行求和得到尾数和;所述前导零计数器用于计算尾数和的前导零个数,所述规格化模块用于对尾数和进行规格化移位和指数更新;所述舍入模块用于对规格化移位后的尾数进行舍入,并将最终的符号位、指数位、尾数位合并得到4项点乘运算的最终结果并通过输出寄存器输出。
2.根据权利要求1所述的可扩展的BFloat16点乘运算器,其特征在于,所述4项点乘单元为三级流水段结构,所述输入处理模块、尾数乘法模块、指数处理模块以及符号位逻辑模块构成第一级流水段,所述尾数对齐模块、尾数取补模块以及尾数加法模块构成第二级流水段,所述前导零计数器、规格化模块、舍入模块以及输出寄存器构成第三级流水段,所述第一级流水段、第二级流水段和第三级流水段在3个时钟周期完成1次4项点乘运算。
3.根据权利要求2所述的可扩展的BFloat16点乘运算器,其特征在于,所述指数处理模块包括用于计算指数的最大指数和的最大指数和逻辑运算电路,所述最大指数和逻辑运算电路包括四个加法器、两个第一级减法器、两个第一级选择器、一个第二级减法器和一个第二级选择器,每一个加法器用于将八个输入指数exp_a、exp_b、exp_c、exp_d、exp_e、exp_f、exp_g、exp_h的两个求和,每两个加法器的输出端共同连接一个第一级减法器和一个第一级选择器,且第一级减法器用于将两个加法器的输出做减法运算后作为控制信号、以控制选择器在两个加法器的输出择一输出至第二级减法器和第二级选择器,第二级减法器用于将两个第一级选择器的输出做减法运算后作为控制信号以控制第二级选择器在两个第一级选择器的输出中择一作为计算得到的最大指数和。
4.根据权利要求3所述的可扩展的BFloat16点乘运算器,其特征在于,所述指数处理模块还包括用于计算最大指数和与其他指数和的差值的差值逻辑计算电路,所述差值逻辑计算电路包括四个减法器,所述四个减法器用于将最大指数和逻辑运算电路输出的最大指数及其一个加法器的输出结果做减法运算,从而得到最大指数和与其他指数和的差值。
5.根据权利要求4所述的可扩展的BFloat16点乘运算器,其特征在于,所述尾数取补模块以4项点乘单元的第4组浮点数乘积的符号位为基准并作为点积运算最终的符号位,比较其他浮点数乘积的符号位与基准是否相同,并对不相同的浮点数乘积的尾数积进行取补运算,以取补后相加的电路来取代减法电路,同时计算不同符号位的个数count,并对尾数积进行两位的符号位扩展。
6.根据权利要求5所述的可扩展的BFloat16点乘运算器,其特征在于,所述尾数加法模块将取补后的尾数积连同第4个尾数积经过一次压缩器CSA4:2压缩成两个加数sum和carry的形式,再通过传播进位加法器CPA将压缩得到的两个加数sum和carry相加得到4个尾数积之和,最后根据尾数积之和的两位符号位sig[0]和不同符号位的个数count判断是否需要进行取补运算,以及是否需要对基准符号位进行修正,包括:
(a),在count=0时,不需要进行取补运算和符号修正;
(b),在count=1时,如果sig[0]=1,则判定不需要进行取补运算和符号修正;sig[0]=0,则判定需要进行取补运算,并对符号位进行取反;
(c),在count=2时,如果sig[0]=1,则判定需要进行取补运算,并对符号位进行取反;sig[0]=0,则判定不需要进行取补运算和符号修正;
(d),在count=3时,如果sig[0]=1,则判定不需要进行取补运算和符号修正;sig[0]=0,则判定需要进行取补运算,并对符号位进行取反。
7.根据权利要求6所述的可扩展的BFloat16点乘运算器,其特征在于,所述以4项点乘单元为基础单元通过组合求和的方式连接的点乘运算单元为64项点乘运算单元。
8.根据权利要求7所述的可扩展的BFloat16点乘运算器,其特征在于,所述64项点乘运算单元包括3级的浮点数加法,且由第一级流水段S0、第二级流水段S1、第三级流水段S2、第四级流水段S3以及第五级流水段S4共5级流水段组成,其中第一级流水段S0包含输入处理模块、尾数乘法模块、指数处理模块和符号位逻辑模块;第二级流水段S1包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第三级流水段S2包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第四级流水段S3包含尾数对齐模块、尾数取补模块、尾数求和模块和指数处理模块;第五级流水段S4包含前导零计数模块、规格化模块和舍入模块。
9.根据权利要求8所述的可扩展的BFloat16点乘运算器,其特征在于,所述第一级流水段S0用于完成对2个位宽为64×16的输入向量X、Y中所有BFloat16操作数的符号位、指数、尾数的提取,完成尾数的乘法,以及第一级浮点数加法的指数处理,每8个指数作为一组,得到第一级浮点数加法的最大指数和以及最大指数和与其他指数和的差值;所述第二级流水段S1用于完成第一级浮点数加法的尾数求和:每4个来自第一级流水段S0的尾数积、符号位作为一组,根据第一级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第一级浮点数加法的尾数和以及符号位;同时,完成第二级浮点数的指数处理,每4个来自第一级浮点加法的最大指数和作为一组,得到第二级的最大指数和以及指数差值;所述第三级流水段S2用于完成第二级浮点数加法的尾数求和:每4个来自第一级浮点数加法的尾数和、符号位作为一组,根据第二级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第二级浮点数加法的尾数和以及符号位;同时,完成第三级浮点数的指数处理,每4个来自第二级浮点加法的最大指数和作为一组,求第三级的最大指数和以及指数差值;所述第四级流水段S3用于完成第三级浮点数加法的尾数求和:每4个来自第二级浮点数加法的尾数和、符号位作为一组,根据第三级浮点数加法的指数处理操作得到的指数差,对尾数进行对齐移位、取补及相加,得到第三级浮点数加法的尾数和以及符号位;所述第五级流水段S4用于统计第三级浮点数加法得到的尾数的前导零个数,再进行包括规格化移位和指数更新在内的规格化,和舍入操作,得到最终的计算结果Rst并输出。
10.一种微处理器,包括带有算术逻辑单元ALU的微处理器本体,所述算术逻辑单元ALU中带有点乘运算器,其特征在于,所述点乘运算器为权利要求1~9中任意一项所述可扩展的BFloat16点乘运算器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310608760.XA CN116450085A (zh) | 2023-05-25 | 2023-05-25 | 一种可扩展的BFloat16点乘运算器及微处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310608760.XA CN116450085A (zh) | 2023-05-25 | 2023-05-25 | 一种可扩展的BFloat16点乘运算器及微处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116450085A true CN116450085A (zh) | 2023-07-18 |
Family
ID=87135858
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310608760.XA Pending CN116450085A (zh) | 2023-05-25 | 2023-05-25 | 一种可扩展的BFloat16点乘运算器及微处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116450085A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117251132A (zh) * | 2023-09-19 | 2023-12-19 | 上海合芯数字科技有限公司 | 定浮点simd乘加指令融合处理装置、方法及处理器 |
-
2023
- 2023-05-25 CN CN202310608760.XA patent/CN116450085A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117251132A (zh) * | 2023-09-19 | 2023-12-19 | 上海合芯数字科技有限公司 | 定浮点simd乘加指令融合处理装置、方法及处理器 |
CN117251132B (zh) * | 2023-09-19 | 2024-05-14 | 上海合芯数字科技有限公司 | 定浮点simd乘加指令融合处理装置、方法及处理器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107168678B (zh) | 一种乘加计算装置及浮点乘加计算方法 | |
US7395304B2 (en) | Method and apparatus for performing single-cycle addition or subtraction and comparison in redundant form arithmetic | |
US6813626B1 (en) | Method and apparatus for performing fused instructions by determining exponent differences | |
US7080111B2 (en) | Floating point multiply accumulator | |
CN101221490B (zh) | 一种具有数据前送结构的浮点乘加单元 | |
US20020194239A1 (en) | Floating point overflow and sign detection | |
US6988119B2 (en) | Fast single precision floating point accumulator using base 32 system | |
US11294627B2 (en) | Floating point dot-product operator with correct rounding | |
CN112860220A (zh) | 一种适用于多精度计算的可重构浮点乘加运算单元及方法 | |
CN116400883A (zh) | 一种可切换精度的浮点乘加器 | |
CN116450085A (zh) | 一种可扩展的BFloat16点乘运算器及微处理器 | |
CN116661733A (zh) | 一种支持多种精度的乘法器及微处理器 | |
CN116594590A (zh) | 一种浮点数据的多功能运算装置及方法 | |
JP3436994B2 (ja) | シフト装置 | |
US5831884A (en) | Apparatus for performing arithmetic operation of floating point numbers capable of improving speed of operation by performing canceling prediction operation in parallel | |
WO2024078033A1 (zh) | 一种浮点数平方根计算方法及浮点数计算模块 | |
US7054898B1 (en) | Elimination of end-around-carry critical path in floating point add/subtract execution unit | |
US6813628B2 (en) | Method and apparatus for performing equality comparison in redundant form arithmetic | |
US6598065B1 (en) | Method for achieving correctly rounded quotients in algorithms based on fused multiply-accumulate without requiring the intermediate calculation of a correctly rounded reciprocal | |
CN116627379A (zh) | 可重构的支持多精度浮点或定点运算的方法及系统 | |
CN116974512A (zh) | 浮点运算装置、矢量处理装置、处理器及电子设备 | |
CN112783470A (zh) | 一种用于执行浮点对数运算的装置和方法 | |
Yehia et al. | A redundant decimal floating-point adder | |
US6055553A (en) | Apparatus for computing exponential and trigonometric functions | |
Lutz et al. | Fused FP8 4-Way Dot Product With Scaling and FP32 Accumulation |
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 |