一种改进的浮点乘加器及浮点乘加计算方法与流程

文档序号:11250596阅读:1668来源:国知局
一种改进的浮点乘加器及浮点乘加计算方法与流程

本发明实施例涉及计算机硬件结构与电路设计技术领域,尤其涉及一种改进的浮点乘加器及浮点乘加计算方法。



背景技术:

近年来各类机器学习算法例如深度卷积神经网络在多个领域得到了广泛的应用,而且这些机器学习算法随着技术的更新变得更加计算密集与存储密集,相应所需要的计算资源和存储资源也在不断增加。为了解决这一问题,开发专用硬件成了学术界与工业界所公认的解决办法之一。学术界与工业界提出了很多不同架构的硬件加速平台。但是目前还没有一种对硬件电路进行优化设计实现提高运算效率的方法,因此,提供一种对硬件电路进行优化提高浮点乘加器的运算效率是目前业界亟待解决的技术问题。



技术实现要素:

为了解决现有技术中存在的问题,本发明实施例提供一种改进的浮点乘加器及浮点乘加计算方法。

一方面,本发明实施例提供一种改进的浮点乘加器,包括至少两个浮点部分乘法器和一个多输入加法器,所述浮点部分乘法器由符号位异或电路、尾数乘法器和指数加法器组成,所述浮点部分乘法器接收归一化浮点数并进行乘法计算输出非归一化浮点数,所述加法器接收所述非归一化浮点数并将输入的非归一化浮点数累加并输出归一化浮点数,所述非归一化浮点数由符号位、非归一化尾数和指数部分构成,所述归一化浮点数由符号位、归一化尾数和指数部分构成。

另一方面,本发明实施例提供一种浮点乘加计算方法,包括:

接收至少四个归一化浮点数输入;

将所述归一化浮点数进行乘法运算,得到非归一化浮点数;

将所述非归一化浮点数进行加法运算,得到归一化浮点数。

本发明实施例提供的改进的浮点乘加器及浮点乘加计算方法,通过设置至少两浮点部分乘法器和一个多输入加法器,浮点部分乘法器只包括符号位异或电路、尾数乘法器和指数加法器不包括归一化模块,接收归一化浮点数进过乘法运算之后输出非归一化浮点数由加法器进行加法运算并输出归一化浮点数,从硬件电路方面对浮点乘加器进行了优化并提高了浮点乘加器的运算效率,降低了硬件电路的面积和功耗。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的浮点乘加器的结构示意图;

图2是本发明实施例提供的浮点乘加器中浮点部分乘法器的结构示意图;

图3是本发明实施例提供的十六输入浮点乘加器结构示意图;

图4是本发明实施例提供的十六输入浮点乘加器中八输入加法器结构示意图;

图5是本发明实施例提供的浮点乘加计算方法流程示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1是本发明实施例提供的浮点乘加器的结构示意图,图2是本发明实施例提供的浮点乘加器中浮点部分乘法器的结构示意图,如图1和图2所示,本发明实施例提供的浮点乘加器包括至少两个浮点部分乘法器1和一个多输入加法器2,所述浮点部分乘法器由符号位异或电路11、尾数乘法器12和指数加法器13组成,所述浮点部分乘法器1接收归一化浮点数并进行乘法计算得到非归一化浮点数,所述加法器2将所述非归一化浮点数累加并输出归一化浮点数,所述非归一化浮点数由符号位、非归一化尾数和指数部分构成,所述归一化浮点数由符号位、归一化尾数和指数部分构成。

卷积神经网络的运算是由大量的连续乘法加法构成的,现有技术中的运算方法是利用多个独立的浮点乘法器和一个多输入加法器进行运算:每一次乘法计算都输出归一化浮点数,再将乘法计算输出的归一化浮点数作为多输入加法器的输入,而多输入加法器也是由多个加法器构成的加法树,每次加法运算都输出一个归一化浮点数作为下一级加法运算的输入。这里提到的归一化浮点数是指符合ieee754标准的浮点数。本发明实施例提供的浮点乘加器由多个浮点部分乘法器1和一个多输入加法器2构成,所谓浮点部分乘法器是指只由符号位异或电路11、尾数乘法器12和指数加法器13组成不包含归一化模块的乘法器。当进行乘加运算时,一个浮点部分乘法器接收两个归一化浮点数输入,由符号位异或电路11对两个浮点数的符号位进行异或运算获得新的符号位,由尾数乘法器12对两个浮点数的尾数位进行乘法运算获得新的尾数位,由指数加法器13对两个浮点数的指数位上的指数进行加法运算获得新的指数位。由于尾数乘法器12是对两个浮点数的尾数位进行乘法运算,得到的新的尾数位不能保证仍满足归一化的要求,因此得到的结果是非归一化尾数,新的符号位、非归一化尾数和新的指数位构成非归一化浮点数。经过浮点部分乘加器运算得到的非归一化浮点数直接作为多输入加法器的输入,经过加法运算之后得到符合归一化要求的归一化浮点数。

本实施例提供的浮点乘加器从电路结构上进行优化设计,通过设置至少两浮点部分乘法器1和一个多输入加法器2,浮点部分乘法器1只包括符号位异或电路11、尾数乘法器12和指数加法器13不包括归一化模块,接收归一化浮点数进过乘法运算之后输出非归一化浮点数由加法器进行加法运算并输出归一化浮点数,从硬件电路方面对浮点乘加器进行了优化并提高了浮点乘加器的运算效率,降低了硬件电路的面积和功耗。

在上述实施例的基础上,进一步地,所述加法器包括:指数比较器、尾数移位器、舍入模块和归一化模块,以将输入的非归一化浮点数累加并输出归一化浮点数。

具体的,浮点部分乘法器输出的非归一化浮点数作为多输入加法器的输入,其中,输入的非归一化浮点数的指数部分首先经过指数比较器根据比较结果对输入的非归一化尾数经过尾数移位器进行对齐操作,再经过定点加法器进行累加,累加得到的结果经过舍入模块之后再经过归一化模块进行归一化处理,就可以输出归一化浮点数。

本发明实施例提供的浮点乘加器利用浮点部分乘法器对输入的归一化浮点数进行乘法计算将得到的非归一化浮点数输入多输入加法器,再通过多输入加法器中的指数比较器、尾数移位器、舍入模块和归一化模块将输入的非归一化浮点数累加并输出归一化浮点数,通过在电路级别优化浮点数乘法计算来减少硬件代价,因此提高了运算效率,降低了额外的归一化开销,降低了功耗。

在上述实施例的基础上,进一步地,所述加法器中的舍入模块的舍入机制包括:截断舍入、向上舍入、向下舍入或最近舍入。

具体的,截断舍入、向上舍入、向下舍入和最近舍入是四种不同的数据处理方式,用于对数据进行舍入处理。为了方便说明,我们以十进制数字0.4、0.5、0.6、1.5、2.4和2.5分别针对这四种舍入方式进行舍入的结果进行说明。

表1不同舍入方式进行数据处理的结果示例

表1是不同舍入方式进行数据处理的结果示例,如表1所示,截断舍入的方式是将小数点之后的数据完全舍去只保留小数点之前的数字,这种舍入方式在电路实现方面作为简单,可以有效的降低电路的设计难度,提高计算效率降低电路功耗,但是其计算精度比较低,适用于精度要求低的计算场景。向上舍入、向下舍入和最近舍入这三种方式都是四舍六入,其中不同点在于对五的处理,向上舍入是将五向较大数字进行进位计算,0.5经过向上舍入变成1,1.5向上舍入变成2,以此类推,此处不再赘述;向下舍入是将五向较小数字进行舍去计算,0.5经过向下舍入变成0,1.5经过向下舍入变成1,以此类推,此处不再赘述;最近舍入又成向偶舍入,是将五向最近的偶数进行舍入,例如0.5在0和1之间,其中0为偶数,因此0.5经过最近舍入变成0,1.5在1和2之间,其中2是偶数,因此1.5经过最近舍入变成2,同理2.5经过最近舍入变成2,3.5经过最近舍入变成4,以此类推,此处不再赘述。由于对五的处理方式不同,向上舍入、向下舍入和最近舍入这三种舍入方式处理的数据在误差方面也有各自的特点:向上舍入将五向较大数字进行进位计算,因此数据整体会向上偏移;向下舍入将五向较小数字进行舍去计算,因此数据整体会向下偏移;而最近舍入处理的数据会将整数部分为奇数的数字向上舍入,整数部分为偶数的数字向下舍入,从而在整体上减少了有舍入方式带来的数据偏差,提高数据的精度,但是从电路设计上来说最近舍入的电路设计作为复杂,因此在不同的精度要求下可以对舍入方式进行合理选择。

本实施例提供的浮点乘加器中包含多种舍入机制,可以在满足不同运算的需求的基础上降低电路设计的难度,提高运算效率和精度。

在上述实施例的基础上,进一步地,所述指数比较器找出输入数据中最大的指数值,所述尾数移位器再根据所述最大的指数值进行移位操作使尾数位对齐。

具体的,输入的归一化浮点数经过浮点部分乘法器进行乘法计算后输出的非归一化浮点数作为多输入加法器的输入,其中,输入的非归一化浮点数的指数部分首先经过指数比较器得到最大的指数值,然后这个最大的指数值和各个输入的指数相减求得偏移量,尾数数值的小数点根据偏移量进行左移,电路上小数点的位置是固定的,因此各个输入的尾数部分根据偏移量经过尾数移位器右移,完成尾数对齐的要求。再经过定点加法器进行累加,累加得到的结果经过舍入模块之后再经过归一化模块进行归一化处理,就可以输出归一化浮点数。

这里使用指数比较器获得各个输入中最大的指数值再根据最大的指数值和各个指数值的差进行尾数对齐,这样结果的指数部分就确定为最大的指数值,尾数对齐了之后相加就可以得到相应的尾数值,在进行尾数相加时可以直接使用定点加法器,进一步提高了运算效率。

在上述实施例的基础上,进一步地,所述加法器还包括脉动寄存器,将所述尾数移位器和指数比较器的结果进行存储,以增加加法器的流水线。

卷积神经网络的运算是由大量的连续乘法加法构成的,因此浮点乘加器的运算效率还受到运算频率的影响。本发明实施例提供的浮点乘加器中,在多输入加法器中添加脉冲寄存器对尾数移位器和指数比较器的结果进行保存,每次输入的多个归一化浮点数经过浮点部分乘加器做乘法运算之后变成非归一化浮点数输入多输入加法器,在多输入加法器中经过指数比较器之后将比较结果存储在脉冲寄存器中,再经过尾数移位器之后将移位后的尾数存储在相应的脉冲寄存器中,这样一来这些数据都存入了脉冲寄存器中,浮点乘加器就可以接收下一批输入开始进行新一轮的运算,而脉冲寄存器中的数据则继续进行接下来的运算,进入舍入模块进行舍入运算,再进入归一化模块进行归一化运算输出归一化浮点数。

通过在加法器中添加脉冲寄存器对尾数移位器和指数比较器的结果进行存储可以有效提高运算的频率,从而提高整体运算效率。

在上述各实施例的基础上,进一步地,所述归一化模块在所述加法器运算的末端,对计算结果进行归一化处理。

前面提到现有技术中的浮点乘加器采用连续的乘法和加法进行浮点运算,每一次运算的结果都是归一化浮点数,本发明实施例提供的浮点乘加器去除了所有中间环节的归一化模块,只保留加法器末端的归一化模块,这样整个运算过程中的乘法和加法运算都是定点运算大大降低了计算的复杂程度,提高了运算效率,在加法器的末端添加归一化模块则保证输出的是符合标准的归一化浮点数。

图3是本发明实施例提供的十六输入浮点乘加器结构示意图,图4是本发明实施例提供的十六输入浮点乘加器中八输入加法器结构示意图,如图3和图4所示,所述乘加器包括八个浮点部分乘加器301和一个八输入加法器302。

浮点部分乘法器由尾数乘法器和指数加法器组成,并且包括符号位的异或电路。浮点部分乘法器的输出由非归一化尾数,指数还有符号位构成,并且作为多输入加法器的输入。八输入加法器包括:指数比较器401、尾数移位器402、脉冲寄存器403、舍入模块404和归一化模块405等。在实现过程中,八输入加法器可以根据工作需要来选择内部实现的舍入方式。

在工作时,上一级浮点部分乘法器的输出作为输入,输入到八输入加法器中。8个指数首先同过指数比较器生成最大指数的值,然后该指数最大值与各个输入指数相减求得不同的偏移量。然后,尾数部分根据偏移量右移,完成尾数对齐的要求。对齐后的尾数再经过尾数求和电路计算出总和。最后经过归一化模块得到归一化的最终结果。

本发明实施例提供的浮点乘加器具有八个浮点部分乘加器和一个八输入加法器,可以将十六个归一化浮点数输入进行乘加运算后输出符合标准的归一化浮点数,并且通过添加脉冲寄存器403实现了两段流水,提高了运算频率,进而缩小了整体电路面积降低功耗,提高了运算效率。

图5是本发明实施例提供的浮点乘加计算方法流程示意图,如图5所示,方法包括:

步骤10、接收至少四个归一化浮点数输入;

步骤20、将所述归一化浮点数进行乘法运算,得到非归一化浮点数;

步骤30、将所述非归一化浮点数进行加法运算,得到归一化浮点数。

具体的,首先介绍归一化浮点数输入,然后将接收的归一化浮点数进行乘法运算,但是在进行乘法运算时不做归一化处理直接用得到非归一化的浮点数进行加法运算,在完成加法运算之后再做归一化处理得到符合标准的归一化浮点数。由于在运算过程中只在最后进行归一化处理,节省了对乘法运算进行归一化处理的步骤,因此提高了计算效率。

在上述实施例的基础上,进一步地,所述得到非归一化浮点数的步骤具体为:

将所述归一化浮点数的符号位经过符号异或电路得到所述非归一化浮点数的符号位;

将所述归一化浮点数的尾数位经过尾数乘法器得到所述非归一化浮点数的非归一化尾数位;

将所述归一化浮点数的指数位经过指数加法器得到所述非归一化浮点数的指数位;

将所述符号位、非归一化尾数位和指数位组成的非归一化浮点数输出。

浮点数由符号位、尾数位和指数位三部分组成,浮点数乘法运算即:将符号位进行异或运算,同号得正异号得负;将尾数位相乘;再将指数位相加。因此在接收输入的归一化浮点数之后,利用符合异或电路将所述浮点数的符号位进行异或运算,得到新的符号;利用尾数乘法器将输入的归一化浮点数的尾数位相乘得到新的尾数;利用指数加法器在将归一化浮点数的指数位相加得到新的指数。在进行尾数位相乘之后,得到我尾数位可能已经不符合归一化要求了,因此称之为非归一化尾数。由新的符号、尾数和指数组成的浮点数称为非归一化浮点数。将得到的非归一化浮点数作为多输入加法器的输入,在进行加法运算之后得到符合标准的归一化浮点数。

本发明实施例提供的方法,通过简化归一化浮点数乘法运算中的归一化步骤,在进行加法运算之后再输出归一化浮点数,提高了浮点乘加计算的效率。

在上述实施例的基础上,进一步地,所述将所述非归一化浮点数进行加法运算,得到归一化浮点数的步骤具体为:

接收全部所述非归一化浮点数;

将各个非归一化浮点数的指数进行比较,得到最大的指数;

将所述最大的指数与各个非归一化浮点数的指数分别作差,得到各非归一化浮点数的偏移量;

根据所述偏移量,将各非归一化浮点数的尾数对齐;

将所述对齐后的各非归一化尾数进行带符号求和,得出总和;

将所述总和与指数位经过舍入模块和归一化模块得到归一化浮点数进行输出。

接收的归一化浮点数经过乘法运算之后变成非归一化浮点数继续进行加法运算,在进行加法运算时:首先接收全部非归一化浮点数;再将各个非归一化浮点数的指数位进行比较,得到其中最大的指数;然后将最大的指数和各个指数进行减法运算,减法运算得到的差值即为各非归一化浮点数尾数部分的偏移量;根据偏移量将各个非归一化浮点数的尾数部分进行移位对齐;然后再将对齐后的各个非归一化尾数进行带符号的加法运算,得出总和;得到的总和可能不满足归一化要求,因此还需要经过舍入模块和归一化模块使结果符合归一化要求,得到归一化浮点数进行输出。

本发明实施例提供的方法通过简化归一化浮点数乘法运算中的归一化步骤,在进行加法运算中先通过比较指数位计算偏移量对尾数位进行移位对齐,然后将对齐后的尾数位进行带符号加法运算,再对得到的总和与指数位经过舍入模块和归一化模块后得到符合规定的归一化浮点数,提高了浮点乘加计算的效率。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1