技术领域
[0001] 本发明属于计算机领域,尤其涉及一种低功耗自由指数域浮点数处理器。
相关背景技术
[0002] 近年来,在各领域的应用中对高动态范围的要求逐渐成为重要的一环,相对于定点数而言,等同数据位宽的浮点数具有更高的动态范围,所以浮点数越发受到重视。因此,强大计算系统通常采用浮点数处理器作为主处理器的一部分或者作为协处理器。
[0003] 浮点数用于近似表示某个实数,其格式通常包括符号位S、指数位E和尾数位M,可表示为{S,E,M},在计算机中为了便于存储,浮点数的幂的基数为2,即浮点数{S,E,M}=(-s E1) ×(1+M)×2。
[0004] 浮点数的精度由用于表示尾数的数据位宽界定。尾数数据位宽越大,浮点数的精度越高。现有的通用处理器中,大多采用IEEE 754标准的浮点数进行加、减、乘、除运算。在IEEE 754标准的32位浮点格式中,其具有1位符号位、8位指数位、23位尾数,其中,尾数二进制小数点左方的整数位是隐含的。IEEE 754同时还有一种更高精度、更高动态范围的64位格式。
[0005] 然而,无论采用何种浮点格式,由于浮点数自身的特点,决定了浮点数的运算更加复杂,因此如何提高浮点数运算速度并降低运算功耗成为现如今硬件设计的核心问题之一。
[0006] 通用处理器通常局限于单一的浮点数格式,固然这种格式能满足一些应用的精度以及动态范围的需求,然而其他应用可能不需要。例如神经网络算法中,对于指数较大的浮点数(局部诱导域)所需的精度较低;而指数较小的浮点数(权重或者方向传播算法中的权重变化量和梯度)则需要较高精度。因为在神经网络算法中的激活函数是非线性的,如sigmoid、tanh函数,不同精度局部诱导域经过激活函数作用后结果的准确度差别不大,高精度的局部诱导域浮点表示将造成不必要的功耗浪费。同样,权重、方向传播算法中的权重变化量和梯度则需要较高的精度,但是这类数据的是比较小,所需的动态范围较小,即指数较小。
[0007] CN200810216631所述的提供的浮动精度的浮点数格式及其运算方法中,浮点数的精度是可变的,但是其指数部分是固定不变。而且此种浮点数格式的数据结构较为复杂,不利于提高浮点运算速率。
[0008] CN200780006490所述的可选次精度的浮点数运算器,其中,浮点数的格式是固定不变,提供一个过剩位移除高精度尾数部分功率,从而降低浮点运算功率。然而此种方法中浮点数依然是采用上述的单一浮点数格式表示,将造成一定程度的存储空间及功耗的浪费。
具体实施方式
[0019] 本发明提供一种浮点数处理装置,包括转换单元和运算单元,转换单元接收标准格式浮点数,并将标准格式浮点数的位宽进行压缩,生成低位宽浮点数,运算单元对低位宽浮点数进行运算,得到运算结果。本发明能根据不同的标准格式浮点数,得到不同指数位宽的低位宽浮点数,该低位宽浮点数能够满足神经网络算法、图像处理等算法的数据精度要求的同时,避免了浮点数运算功率的浪费。
[0020] 根据本发明的一种实施方式,浮点数处理装置包括:
[0021] 转换单元,用于接收一组第一浮点数,并将该组第一浮点数转换为对应数量的第二浮点数,其中,一组第一浮点数中可包括一个或一个以上的第一浮点数,转换后得到相同数量的第二浮点数,每个第一浮点数与每个第二浮点数一一对应,每个所述第二浮点数包括1位符号位、N位指数位和C-N-1位尾数位,C、N为大于等于1的整数,C为第二浮点数的总位数,N的数值是由这组第一浮点数确定的;第一浮点数是标准格式浮点数,第二浮点数是由对标准格式浮点数进行位宽压缩后的低位宽浮点数。
[0022] 运算单元,用于对第二浮点数进行运算,得到运算结果。
[0023] 标准格式浮点数包括1位符号位、K1位指数位和K2位尾数位,例如IEEE 754定义的32位标准格式浮点数中,包括1位符号位、8位指数位和23位尾数位;标准格式浮点数的数值V1表达式为:
[0024] V1=(-1)S×(1+M)×2E,
[0025] 其中,S为标准格式浮点数的符号位的值、E为标准格式浮点数的K1位指数位的值,M为标准格式浮点数的K2位尾数位的值;
[0026] 低位宽浮点数中的N的数值为:
[0027] N=log2(Emax-Emin)/2,
[0028] 其中,Emax为一组标准格式浮点数中E的最大值,Emin为一组标准格式浮点数中E的最小值;本发明浮点数转换的原理是,针对一组标准格式浮点数,其指数位的位宽是固定的,但是指数位所对应的数值不尽相同,通过对一组标准格式浮点数中指数位所对应的数值进行分析,得到一个相对平均的指数位数值,根据该数值至少所需的位数,确定低位宽浮点数中指数位的位数N,根据设定的低位宽浮点数的总位数C和1位符号位,可知低位宽浮点数的尾数位为C-N-1位。
[0029] 以上是对低位宽浮点数中指数位、尾数位的位数的划分,然后需要确定低位宽浮点数中指数位、尾数位的数值。
[0030] 根据本发明的一种实施方式,低位宽浮点数的符号位等于标准格式浮点数的符号位;低位宽浮点数的C-N-1位尾数位等于标准格式浮点数K2位尾数位中的前C-N-1位;N位指数位的数值E′为:
[0031] E′=E-B+A,
[0032] 其中,B为标准格式浮点数的指数位的偏移量,例如,IEEE 754标准中32位浮点数的偏移量为127。A为低位宽浮点数的指数基数,其表达式为:
[0033] A=(Emax+Emin)/2。
[0034] 根据本发明的一种实施方式,转换单元还用于接收低位宽浮点数,并将低位宽浮点数转换为标准格式浮点数,其中:标准格式浮点数的符号位等于低位宽浮点数的符号位;标准格式浮点数K2位尾数位中的前C-N-1位等于低位宽浮点数的C-N-1位尾数位,后K2+1+N-C位为0;N位指数位的数值E′为:
[0035] E′=E-B+A。
[0036] 根据本发明的一种实施方式,转换单元包括第一寄存器和第二寄存器,第一寄存器用于存储N的数值,第一寄存器用于存储低位宽浮点数的指数基数A的数值。
[0037] 根据本发明的一种实施方式,浮点数处理装置还包括:存储单元,用于存储标准格式浮点数和低位宽浮点数。其中,存储单元、转换单元、运算单元两两连接,各部件中的浮点数均可双向流通,需要注意的是,运算单元只能对低位宽浮点数进行运算,故其输入输出的数据均是低位宽浮点数。
[0038] 根据本发明的一种实施方式,浮点数处理装置可以作为一个主处理器或协处理器,其利用一总线可与外部的其他的处理器进行数据交互。
[0039] 为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
[0040] 图1是本发明实施例提供的浮点数处理器的示意图,如图1所示,浮点数处理器1包括编解码组件2、浮点运算逻辑3和存储器(RAM)4,在本实施例中,采用编解码组件2作为转换单元进行浮点数转换,采用浮点运算逻辑3作为运算单元进行浮点数运算,采用存储器4作为存储单元进行浮点数存储。浮点数处理器外部连接有一外部输入设备5(鼠标/键盘)和总线6,输入设备5可直接向编解码组件2输入标准格式浮点数,浮点数处理器通过总线6可以作为一个主处理器或协处理器,其利用一总线可与外部的其他的处理器进行数据交互。
[0041] 编解码组件2包含一组配置寄存器(cfg)和一组指数基址寄存器(base)。配置寄存器(cfg)存储有低位宽浮点数的指数位的位数N,用于界定低位宽浮点数的指数和尾数,指数基址寄存器(base)存储有低位宽浮点数的指数基数A的数值,编解码组件2利用两个寄存器中的数值,实现标准格式浮点数和低位宽浮点数的编码(标准格式浮点数到低位宽浮点数的转换)和解码(低位宽浮点数到标准格式浮点数的转换)。
[0042] 浮点运算逻辑3耦合到数据存储器4和编解码组件2,处理所请求的低位宽浮点数。浮点运算逻辑3将运算结果输出到编解码组件2,编解码组件根据所执行的浮点运算请求将结果输出到存储单元4。
[0043] 本实施例在神经网络算法中将标准的32位浮点数转换为16位的低位宽浮点数。如图2所示,IEEE 754浮点数标准浮点数格式和16位宽自由指数域浮点数格式的对比,低位宽浮点数对应的配置寄存器值为N,则该浮点数中指数域位宽为N,尾数位宽为15-N。
[0044] 神经网络算法中,数据计算是按照不同层执行的。在神经网络的一层中,同一类数据的动态范围差别不大。同时,动态范围需求较高的数据对数据精度的要求相对较低,而精度需求较高的数据的动态范围需求较低。因此,采用两组寄存器控制低位宽浮点数的精度和动态范围。例如,一组标准格式浮点数的指数值在[Emin,Emax]区间内,利用公式:N=log2(Emax-Emin)/2,A=(Emax+Emin)/2,可得到配置寄存器(cfg)的值置为N(即分割位在第15-N位),其对应的指数基数寄存器(base)置为A。编码时,将IEEE 754浮点数的指数(减去偏移量127)加上A赋值给所述自由指数域浮点数的[14:15-N]位,并截取IEEE 754浮点数尾数的前15-N位赋值给低位宽浮点数的低15-N位,实现IEEE 754浮点数指数以及尾数到低位宽浮点数的编码。解码时,将IEEE 754浮点数的[14:15-N]减去A再加上127作为IEEE 754浮点数的指数,并在低位宽浮点数的低15-N位后补充N+7个0赋值给IEEE 754浮点数的尾数,实现低位宽浮点数到IEEE 754浮点数的解码。
[0045] 以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。