用于浮点数据、张量数据运算的运算器的制作方法

文档序号:24072933发布日期:2021-02-26 16:06阅读:192来源:国知局
用于浮点数据、张量数据运算的运算器的制作方法

[0001]
本发明涉及计算机数学计算领域,尤其涉及一种用于浮点数据、张量数据运算的运算器。


背景技术:

[0002]
神经网络算法使用浮点格式的张量数据进行加法、乘法、乘法累加等运算。为了平衡精度与运算速度,通常使用半精度浮点格式。
[0003]
常用的半精度浮点格式是fp16格式,fp16半精度浮点的表示方法如下:
[0004]
(1)如果exponent位全部为0:
[0005]
如果fraction位全部为0,则表示数字0;
[0006]
如果fraction位不为0,则表示一个非常小的数字(subnormal numbers),其计算公式为:
[0007][0008]
(2)如果exponent位全部为1:
[0009]
如果fraction位全部为0,则表示数字
±
inf;
[0010]
如果fraction位不为0,则表示nan;
[0011]
(3)exponent位的其他情况:
[0012]
计算公式为
[0013][0014]
从上述fp16的表达规则来看,其数据表达方式根据exponent的内容可分为三种情况:exponent全为0、exponent全为1或其他。这使得fp16的计算需要首先判断exponent值的内容再决定数据表达方式,含有大量控制规则逻辑。
[0015]
另外,fp16大部分情况下所使用的数据表达方式为
[0016][0017]
两个fp16数据如下:
[0018][0019][0020]
他们之间的乘法可以表达为:
[0021]
[0022]
最终,两个fp16数据的乘法计算由如下计算组成:
[0023]
(1)s3=s1+s2
[0024]
(2)e3=(e1+e2-15)
[0025]
(3)
[0026]
因此,fp16数据的乘法运算由多个加法、乘法和除法操作组成,硬件实现十分复杂。同理,fp16数据的加法运算也同样十分复杂,严重影响神经网络算法的处理效率。


技术实现要素:

[0027]
本发明旨在克服上述现有技术的至少一种缺陷(不足),提供一种用于浮点数据、张量数据运算的运算器,基于一种新型的半精度浮点表达方式及运算实现方法,以重构浮点运算及简化张量运算步骤,提升神经网络算法等大数据量运算的处理能力。
[0028]
为实现上述目的,本发明提出了一种用于浮点数据运算的运算器,所述运算器用于执行乘法运算或加法运算,包括两个输入浮点数据及其指数值和一个输出浮点数据及其指数值,所述输入浮点数据和输出浮点数据采用ef16数据格式表示,
[0029]
所述ef16数据的数值表示公式为:
[0030]
(-1)
signbit
×2(-exponent)
×
fraction
[0031]
其中,signbit为符号值;exponent为指数值;fraction为小数值;
[0032]
在所述运算器中,
[0033]
第一个输入浮点数据表示为s1+f1、e1两部分;
[0034]
另一个输入浮点数据表示为s2+f2、e2两部分;
[0035]
输出浮点数据表示为s3+f3、e3两部分;
[0036]
其中s1、s2、s3为符号值;e1、e2、e3为指数值;f1、f2、f3为小数值。
[0037]
进一步的,所述ef16数据的数据位宽为21位,包括位宽为1比特的符号位、位宽为5比特的指数位和位宽为15比特的小数位。
[0038]
进一步的,所述运算器是用于执行乘法运算的乘法器,所述乘法器的乘法运算表示为:
[0039]
在e3未指定时,s3=s1+s2;f3=f1*f2;e3=e1+e2;或
[0040]
在e3指定时,s3=s1+s2;f3=f1*f2>>e,其中e=e3-e1-e2,>>表示向右移位运算。
[0041]
进一步的,所述运算器是用于执行加法运算的加法器,所述加法器执行加法运算的前置条件为e1=e2;
[0042]
所述加法器的加法运算表示为:
[0043]
(s3+f3)=(s1+f1)+(s2+f2)。
[0044]
本发明的用于浮点数据运算的运算器,其输入、输出采用ef16数据格式表示。ef16数据有更好的小数表达范围,且最大值表示范围与fp16数据基本相同;其exponent值直接表示半精度浮点数据的指数值,无需执行exponent-15运算,从而简化了两个ep16数据运算的数学表达;其fraction值对应的小数值无需做运算,在满足运算前置条件下,在进行加法运算或乘法运算时,可直接对两个ef16数据的小数值进行相加或相乘处理,从
而可以有效简化浮点数据的运算,提高浮点数据的计算效率。
[0045]
本发明还提出了一种用于张量数据运算的运算器,其特征在于,包括两个输入张量数据及其共享e值和一个输出张量数据及其共享e值,其中,所述张量数据的每个数用ef16数据格式的s+f表示,其中s为ef16数据的符号值,f为ef16数据的小数值;所述张量数据的共享e值为ef16数据的指数值;根据所述共享e值的数量所述张量数据表示为e值共享张量数据和分离通道e值共享张量数据;
[0046]
所述ef16数据的数值表示公式为:
[0047]
(-1)
signbit
×2(-exponent)
×
fraction
[0048]
其中,signbit为符号值;exponent为指数值;fraction为小数值;
[0049]
所述e值共享张量数据表示:张量数据中的所有数共享一个共享e值;
[0050]
所述分离通道e值共享张量数据表示:张量数据拥有c个通道,每个通道具有一个共享e值,每个共享e值仅在每个通道内的数据间共享;
[0051]
所述运算器用于执行张量数据的乘法运算、加法运算或乘法累加运算。
[0052]
进一步的,所述共享e值是以所述张量数据的参数方式传输。
[0053]
进一步的,所述运算器是用于执行张量数据乘法运算的乘法器,所述乘法器的输入、输出为所述e值共享张量数据,所述乘法器的乘法运算表示为:
[0054]
两个具有相同尺寸的张量数据,每个数对应相乘,得到相同尺寸的过程张量数据;
[0055]
两个具有相同尺寸的张量数据的共享e值相加,得到过程张量数据的共享e值;
[0056]
在输出张量数据的共享e值未指定时,将过程张量数据及其共享e值赋值给输出张量数据及其共享e值;在输出张量数据的共享e值指定时,由过程张量数据的每个数根据对应的指定的共享e值和过程张量数据的共享e值的差值向右移位后生成输出张量数据。
[0057]
进一步的,所述运算器是用于执行张量数据乘法运算的乘法器,所述乘法器的输入、输出为所述分离通道e值共享张量数据,所述乘法器的乘法运算表示为:
[0058]
两个具有相同尺寸、c个通道的张量数据,每个数对应相乘,得到相同尺寸的过程张量数据;
[0059]
两个具有相同尺寸、c个通道的张量数据,各对应通道的共享e值相加,得到过程张量数据的c个通道的共享e值;
[0060]
在输出张量数据的共享e值未指定时,将过程张量数据及其共享e值赋值给输出张量数据及其共享e值;在输出张量数据的共享e值指定时,由过程张量数据的每个数根据对应的指定的共享e值和过程张量数据的共享e值的差值向右移位后生成输出张量数据。
[0061]
进一步的,所述运算器是用于执行张量数据加法运算的加法器,所述加法器的输入、输出为所述e值共享张量数据,
[0062]
所述加法器的加法运算表示为:
[0063]
满足运算前置条件:两个相同尺寸的张量数据的共享e值相同;
[0064]
两个相同尺寸的张量数据,每个数对应相加,得到相同尺寸的过程张量数据;
[0065]
以输入张量数据的共享e值为过程张量数据的共享e值;
[0066]
在输出张量数据的共享e值未指定时,将过程张量数据及其共享e值赋值给输出张量数据及其共享e值;在输出张量数据的共享e值指定时,由过程张量数据的每个数根据对应的指定的共享e值和过程张量数据的共享e值的差值向右移位后生成输出张量数据。
[0067]
进一步的,所述运算器是用于执行张量数据加法运算的加法器,所述加法器的输入、输出为所述分离通道e值共享张量数据,
[0068]
所述加法器的加法运算表示为:
[0069]
满足运算前置条件:两个相同尺寸的张量数据中各通道的共享e值相同;
[0070]
两个相同尺寸的张量数据,每个数对应相加,得到新的相同尺寸的张量数据;
[0071]
以输入张量数据的各分离通道的共享e值为过程张量数据的各分离通道共享e值;
[0072]
在输出张量数据的共享e值未指定时,将过程张量数据及其共享e值赋值给输出张量数据及其共享e值;在输出张量数据的共享e值指定时,由过程张量数据的每个数根据对应的指定的共享e值和过程张量数据的共享e值的差值向右移位后生成输出张量数据。
[0073]
进一步的,所述运算器是用于执行张量数据乘法累加运算的乘法累加器,所述乘法累加器的输入、输出为所述e值共享张量数据,所述乘法累加器的乘法累加运算表示为:
[0074]
两个具有相同尺寸的张量数据,每个数对应相乘,得到相同尺寸的第一过程张量数据;
[0075]
将过程张量数据的每个数相互累加在一起,形成所有维度的尺寸均为1的第二过程张量数据;
[0076]
两个具有相同尺寸的张量数据的共享e值相加,得到第二过程张量数据的共享e值;
[0077]
在输出张量数据的共享e值未指定时,将第二过程张量数据及其共享e值赋值给输出张量数据及其共享e值;在输出张量数据的共享e值指定时,由第二过程张量数据的每个数根据对应的指定的共享e值和过程张量数据的共享e值的差值向右移位后生成输出张量数据。
[0078]
进一步的,所述运算器是用于执行张量数据乘法累加运算的乘法累加器,所述乘法累加器的输入、输出为所述分离通道e值共享张量数据,所述乘法累加器的乘法累加运算表示为:
[0079]
两个具有相同尺寸、c个通道的张量数据,每个数对应相乘,得到相同尺寸的第一张量数据;
[0080]
将过程张量数据的每个数相互累加在一起,形成通道维度尺寸为c,其它维度的尺寸为1的第二过程张量数据;
[0081]
两个具有相同尺寸、c个通道的张量数据,各对应通道的共享e值相加,得到第二过程张量数据的c个通道的共享e值;
[0082]
在输出张量数据的共享e值未指定时,将第二过程张量数据及其共享e值赋值给输出张量数据及其共享e值;在输出张量数据的共享e值指定时,由第二过程张量数据的每个数根据对应的指定的共享e值和过程张量数据的共享e值的差值向右移位后生成输出张量数据。
[0083]
张量数据通过对共享e值(指数值)的提取,将张量数据分为整数部分和共享的指数部分,大大简化了张量数据的格式,通过本运算器,将张量数据之间的浮点数据运算简化为整数的乘法运算、加法运算、乘法累加运算和指数的加法运算,可以大大提高神经网络的运算速度。
附图说明
[0084]
图1是本发明的e值共享ef16张量数据结构示意图;
[0085]
图2是本发明的分离通道e值共享ef16张量数据结构示意图;
[0086]
图3是本发明的e值共享ef16张量乘法运算示意图;
[0087]
图4是本发明的e值共享ef16张量乘法运算简图;
[0088]
图5是本发明的e值共享ef16张量加法运算示意图;
[0089]
图6是本发明的e值共享ef16张量加法运算简图;
[0090]
图7是本发明的e值共享ef16张量乘法累加运算示意图;
[0091]
图8是本发明的e值共享ef16张量乘法累加运算简图;
[0092]
图9是本发明的分离通道e值共享ef16张量乘法累加运算示意图;
[0093]
图10是本发明的分离通道e值共享ef16张量乘法累加运算简图。
具体实施方式
[0094]
本发明附图仅用于示例性说明,不能理解为对本发明的限制。为了更好说明以下实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
[0095]
实施例1
[0096]
本发明提出一种针对神经网络计算机数据、张量数据的半精度浮点表达方式,我们称这种半精度浮点表达方式为ef16。
[0097]
ef16基本表达方式:
[0098]
ef16数据的位宽为21比特,其浮点数的表达方式如下:
[0099]
(-1)
signbit
×2(-exponent)
×
fraction
[0100]
其中signbit为符号值,用s表示;exponent为指数值,用e表示,fraction为小数值,用f表示,这样,ef16数据可以表达为s+e+f。
[0101]
根据上述公式,可以算出ef16可表达的最小数为:
[0102]
0 11111
2*
0000000000000012=2-31
×
1≈0.00000000046566
[0103]
最大数为:
[0104]
0 00000
2*
1111111111111112=20×
32768≈32768
[0105]
fp16和ef16数据表达范围对比如下,可以看到ef16有更好的小数表达范围,且最大值表示范围与fp16基本相同:
[0106][0107]
ef16与其他浮点数表达方式对比如下:
[0108][0109]
ef16数据的乘法运算:
[0110]
两个输入ef16数据如下:
[0111]
(-1)
s1
×2(-e1)
×
f1
[0112]
(-1)
s2
×2(-e2)
×
f2
[0113]
他们之间的乘法可以表达为:
[0114]
(-1)
(s1+s2)
×2(-(e1+e2))
×
(f1*f2)
[0115]
在本示例中,将ef16数据表示为s+f和e两部分,第一个输入浮点数据表示为s1+f1、e1两部分;另一个输入浮点数据表示为s2+f2、e2两部分;输出浮点数据表示为s3+f3、e3两部分(在本文中s1和s1、s2和s2、e1和e1、e2和e2、f1和f1、f2和f2等分别表示相同的含义,为行文方便,在公式表达上采用小写字母,在文字叙述时采用大写字母);
[0116]
ef16数据的乘法运算,可以表示为:
[0117]
在e3未指定时,s3=s1+s2;f3=f1*f2;e3=e1+e2;或
[0118]
在e3指定时,s3=s1+s2;f3=f1*f2>>e,其中e=e3-e1-e2,>>表示向右移位运算。
[0119]
ef16数据的加法运算:
[0120]
在本示例中,ef16数据的加法运算的前置条件为e1=e2;
[0121]
ef16数据的加法运算表示为:
[0122]
(s3+f3)=(s1+f1)+(s2+f2)。
[0123]
依上述制定的针对神经网络张量数据的半精度浮点表达方式ef16,及ef16浮点数据的乘法运算和加法运算规则,本发明的该实施例中,构建用于浮点数据的运算器,该运算器支持ef16浮点数据的乘法运算和加法运算。
[0124]
该ef16浮点数据的运算器包括两个输入ef16浮点数据和一个输出ef16浮点数据,每个ef16浮点数据在运算时被分成s+f值和e值,以便进行分别计算,其中s表示ef16数据的符号位,f表示ef16数据的小数位,e表示ef16数据的指数位。
[0125]
具体的,在运算器中,
[0126]
第一个输入浮点数据表示为s1+f1、e1两部分;
[0127]
另一个输入浮点数据表示为s2+f2、e2两部分;
[0128]
输出浮点数据表示为s3+f3、e3两部分;
[0129]
其中s1、s2、s3为符号值;e1、e2、e3为指数值;f1、f2、f3为小数值。
[0130]
所述乘法器的乘法运算表示为:
[0131]
在e3未指定时,s3=s1+s2;f3=f1*f2;e3=e1+e2;或
[0132]
在e3指定时,s3=s1+s2;f3=f1*f2>>e,其中e=e3-e1-e2,>>表示向右移位运算。
[0133]
上述运算方法可以通过软件、硬件或软硬件结合的方式实现,形成乘法器、加法器等神经网络计算模块的基础运算单元,以执行两个浮点数据之间的乘法运算、加法运算。
[0134]
本发明的用于浮点数据运算的运算器可实现如下技术效果:
[0135]
本发明的用于浮点数据运算的运算器,其输入、输出采用ef16数据格式表示。ef16数据有更好的小数表达范围,且最大值表示范围与fp16数据基本相同;其exponent值直接表示半精度浮点数据的指数值,无需做exponent-15的运算,从而简化了两个ep16数据运算的数学表达;其fraction值对应的小数值无需做运算,在满足运算前置条件下,在进行加法运算或乘法运算时,可直接对两个ef16数据的小数值进行相加或相乘处理,从而可以有效简化浮点数据的运算,提高浮点数据的计算效率。
[0136]
实施例2
[0137]
ef16张量数据:
[0138]
ef16是一种专门针对张量数据提出的半精度浮点格式,当数据类型是张量数据时,所有张量数据共享相同的指数值(exponent值),以下简称e值。
[0139]
举例说明,一个尺寸为(h,w,c)的ef16张量数据如图1所示。
[0140]
其中,张量数据中每个数仅使用ef16数据中的s+f共16位来表达(具体为带符号整数),所有数据共享相同的e值,该e值作为张量数据的参数而进行传输,我们称这种ef16格式的张量数据为e值共享ef16张量数据。
[0141]
另外,还可以使得拥有c个通道的ef16张量数据拥有c个e值,每个e值仅在每个通道内的h
×
w个数据间共享,我们称这种ef16张量数据为分离通道e值共享张量数据,一个尺寸为(h,w,c)的分离通道e值共享ef16张量数据如图2所示。
[0142]
e值共享ef16张量数据支持乘法运算,加法运算和乘法累加运算。其中,乘法运算指两个尺寸为(h,w,c)的张量数据,每个数对应相乘,得到新的尺寸为(h,w,c)的张量数据;加法运算指两个尺寸为(h,w,c)的张量数据,每个数对应相加,得到新的尺寸为(h,w,c)的张量数据;乘法累加运算指两个尺寸为(h,w,c)的张量数据,每个数对应相乘并相互累加在一起,得到新的尺寸为(1,1,1)的张量数据。
[0143]
分离通道e值共享ef16张量数据支持乘法运算,加法运算和分离通道乘法累加运算。其中,乘法运算指两个尺寸为(h,w,c)的张量数据,每个数对应相乘,得到新的尺寸为(h,w,c)的张量数据;加法运算指两个尺寸为(h,w,c)的张量数据,每个数对应相加,得到新的尺寸为(h,w,c)的张量数据;分离通道乘法累加运算指两个尺寸为(h,w,c)的张量数据,每个数对应相乘并相互累加在一起,得到新的尺寸为(1,1,c)的张量数据。
[0144]
(1)e值共享ef16张量乘法运算
[0145]
如图3所示,三个张量拥有相同的尺寸(h,w,c),三个张量的共享的e1、e2和e3由系统根据神经网络数据的特征提前决定,因此,浮点张量数据中每个数的浮点乘法被简化为如图4所示的乘法和移位操作。
[0146]
另外,分离通道e值共享ef16张量乘法运算与上述e值共享ef16张量乘法运算十分相似,唯一不同是张量数据由上述的e值共享ef16张量数据替换为分离通道e值共享ef16张量数据。
[0147]
(2)e值共享ef16张量加法运算
[0148]
如图5所示,三个张量拥有相同的尺寸(h,w,c),且三个张量必须拥有相同的共享e值,此时,浮点张量数据中每个数的浮点加法被简化为如图6所示的加法操作。
[0149]
另外,分离通道e值共享ef16张量乘法运算与上述e值共享ef16张量乘法运算十分相似,唯一不同是张量数据由上述的e值共享ef16张量数据替换为分离通道e值共享ef16张量数据,且分离通道e值共享ef16张量数据中所有的e相等。
[0150]
(3)e值共享ef16张量乘法累加运算
[0151]
如7图所示,两个张量拥有相同的尺寸(h,w,c),两个张量的共享e1和共享e2由系统根据神经网络数据的特征提前决定。乘法累加得到的计算结果的e值等于e1+e2,可根据后续操作的需求,对乘法累加数据进行相应的移位操作。浮点张量数据中每个数的浮点乘法累加被简化为如图8所示的乘法累加操作。
[0152]
(4)分离通道e值共享ef16张量乘法累加运算
[0153]
如图9所示,对于乘法累加操作,分离通道e值共享张量数据按照如下述所示分离通道乘法累加运算方法,其中,c个通道是完全分离的,乘法累加运算仅发生在通道内的h和w范围内的数之间,如图10所示。
[0154]
需要说明的是,本领域技术人员应该了解,为便于理解,在示例中,均采用可通过实体结构表达的三个维度的张量数据做示例性说明,以说明指数值共享张量数据和分离通道指数值共享张量数据的各个区别,但在实际数据计算中,并不会限定张量数据的维度。
[0155]
依上述ef16张量数据的乘法运算、加法运算和乘法累加运算规则,本发明的该实施例中还构建了用于张量数据运算的运算器。
[0156]
该运算器包括两个输入张量数据及其共享e值和一个输出张量数据及其共享e值,其中,所述张量数据的每个数用ef16数据格式的s+f表示,其中s为ef16数据的符号值,f为ef16数据的小数值,所述共享e值为ef16数据的指数值;根据所述共享e值的数量所述张量数据表示为e值共享张量数据和分离通道e值共享张量数据;
[0157]
所述e值共享张量数据表示:张量数据中的所有数共享一个共享e值;
[0158]
所述分离通道e值共享张量数据表示:张量数据拥有c个通道,每个通道具有一个共享e值,每个共享e值仅在每个通道内的数据间共享。
[0159]
根据张量数据的分类,用于张量数据运算的运算器具体包括:用于e值共享张量数据运算的乘法器、加法器和乘法加法累加器;和用于分离通道e值共享张量数据运算的乘法器、加法器和乘法加法累加器。
[0160]
在运算器的输出,可根据神经网络应用的需求,对输出张量数据的共享e值进行指定。在输出张量数据的共享e值指定时,由运算过程中产生的新的张量数据的每个数根据对应的输出张量数据的共享e值和新的张量数据的共享e值的差值向右移位后生成输出张量数据。
[0161]
上述运算方法可以通过软件、硬件或软硬件结合的方式实现,形成乘法器、加法器、乘法累加器等神经网络计算模块的基础运算单元,以执行两个张量数据之间的乘法运算、加法运算、乘法累加运算。
[0162]
本发明的用于张量数据运算的运算器可实现如下技术效果:
[0163]
张量数据通过对共享e值(指数值)的提取,将张量数据分为整数部分和共享的指数部分,大大简化了张量数据的格式,通过本运算器,将张量数据之间的浮点数据运算简化
为整数的乘法运算、加法运算、乘法累加运算和指数的加法运算,可以大大提高神经网络的运算速度。
[0164]
在神经网络计算中,可以对各张量数据的共享e值做预先指定,从而使张量数据的运算和e值(指数值)无关,或简化张量数据的运算过程。
[0165]
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1