浮点运算定点化方法及系统与流程

文档序号:13137865阅读:1155来源:国知局
浮点运算定点化方法及系统与流程

本发明涉及可编程处理器,尤其涉及了一种浮点运算定点化方法及系统。



背景技术:

目前,由于深度学习算法的不断进步,人工智能技术取得了巨大突破。在深度学习中,机器可以在监督或不受监督的方式下从大量数据中学习一项任务。大规模监督式学习已经在机器视觉、语音识别、自然语言处理等应用领域取得成功。而人工神经网络(artificialneuralnetwork)目前在深度学习领域应用最为广泛,用神经网络识别和分类需要进行大量的浮点运算,因此计算硬件已成为目前神经网络应用中最主要的瓶颈。而且随着计算数据量的大幅增加,深度学习转移到云平台时,对负责神经网络运算的硬件性能提出了更高的要求。

在神经网络运算方面,业内通常采用高性能gpu(graphicsprocessingunit,图形处理器)来提升计算效率,并取得了显著的加速效果,但gpu在带来高性能计算的同时存在高功耗的缺点,使其在应用环境上有所限制。相比gpu,fpga(fieldprogrammablegatearray,可编程逻辑门阵列)可以在较低功耗下实现并行处理和计算,并能灵活实现各种不同的神经网络架构,作为一种既能加速算法又能不显著增加功耗的计算平台在神经网络加速计算方面适用于更多的应用场合,特别是当应用在数据中心时有其独特优势。

单精度浮点数为ieee标准754浮点数格式之一。ieee标准754采用{s,e,m}表示一个浮点数n,n的实际值n由公式n=(-1)s×1.m×2e表示。n,s,e,m采用二进制表示,n,s,e,m分别为n,s,e,m对应的实际数值。s表示n的符号位。对应值s满足:n>0时,s=0;n<0时,s=1。e表示n的指数位,位于s和m之间的若干位。对应值e值也可正可负。m表示n的有效数位,它位于n末尾,为有效数的小数部分。有效数为1.m,1为隐含位是多出来的1位精度。对于单精度浮点数,e的位宽为8位,m的位宽为23位,总共32位;对于半精度浮点数,e的位宽为5位,m的位宽为10位,总共16位。关于浮点数的详细说明参见ieee标准754,在此不再赘述。

神经网络的识别分类需要进行大量的浮点运算,但是相比gpu,目前fpga的浮点计算资源主要是支持浮点运算的dsp(digitalsignalprocessor,数字信号处理器)数量有限,使其在计算性能上并不占优势。同时由于神经网络一般使用单精度浮点格式表示数据,单精度浮点数据的位宽达到32位,虽然精度较高,但使fpga在和ddr读写数据时效率较低,并使fpga需要使用较多的逻辑资源用于浮点数据的传输处理以及较多的ram资源用于浮点数据的存储,资源占用较多不利于fpga的时序收敛,会导致fpga的性能受限以及产生更大的功耗。以上的这些问题都会导致fpga在进行浮点运算时性能较低。

目前在深度学习领域有一种采用较小位宽的定点数据的优化方法,这种方法由于数据降低到了比较小的位宽例如8位,能够提升数据的传输存储效率、降低资源消耗以及提升计算性能,但是只能针对特定的神经网络,其网络参数需要专门的训练,对于一般已有的采用浮点数据运算的神经网络无法满足计算精度要求,会引起神经网络的识别分类结果产生较大偏差。



技术实现要素:

本发明针对现有技术中采用标准浮点数据运算的神经网络无法满足计算性能要求这个缺点,提供了一种浮点运算定点化方法及系统。

为了解决上述技术问题,本发明通过下述技术方案得以解决:

一种浮点运算定点化方法,包括以下步骤:

根据预设的数值范围以及计算的精度需求,调整可调精度浮点数据的指数和有效位,预先将单精度浮点格式的参数数据转换为可调精度浮点数据;

计算时将所述可调精度浮点数据转换为定点数据并用于计算,并将计算产生的中间结果转换为可调精度浮点数据;

待全部计算完成后产生最终结果,将最终结果转换为单精度浮点格式数据。

作为一种可实施方式,所述可调精度浮点数据包括符号、指数和有效数;

所述可调精度浮点数据的指数的位宽和有效数的位宽随所述数值范围和所述精度要求的变化做相应调整。

作为一种可实施方式,所述将单精度浮点格式的参数数据转换为可调精度浮点数据的具体步骤包括:

单精度浮点数据定点化,将含有小数的单精度浮点数据乘以系数后转换为定点整数;

将转换后的定点整数表示为二进制数,并根据可调精度浮点数据有效数所支持的位宽对此二进制定点整数向右移位,移位后的数据即有效数,并根据移位的位数确定指数,将有效数添加上指数和符号位后即为可调精度浮点数据。

作为一种可实施方式,所述将所述可调精度浮点数据转换为定点数据的具体步骤包括:

根据所述可调精度浮点数据的指数大小对所述可调精度浮点数据的有效数向左移位,移位的位数由指数确定;

移位后判断符号位,如果是负数将移位后的数据采用补码表示。

作为一种可实施方式,所述根据预设的数值范围以及计算的精度需求的具体设置过程为:

将神经网络模型训练好的参数数据进行归纳分析,确定参数数据的最大值和最小值,并对神经网络模型中的单精度浮点格式数据进行模拟计算得到计算结果,根据计算结果确定数值范围以及计算的精度要求,为可调精度浮点数据转换过程中的指数和有效数的调整提供依据。

一种浮点运算定点化系统,包括:

第一转换模块,用于根据预设的数值范围以及计算的精度需求,调整可调精度浮点数据的指数和有效位,预先将单精度浮点格式的参数数据转换为可调精度浮点数据;

第二转换模块,用于计算时将所述可调精度浮点数据转换为定点数据并用于计算,并将计算产生的中间结果转换为可调精度浮点数据;

第三转换模块,用于待全部计算完成后产生最终结果,将最终结果转换为单精度浮点格式数据。

作为一种可实施方式,所述第一转换模块设置为:

所述可调精度浮点数据包括符号、指数和有效数;

所述可调精度浮点数据的指数的位宽和有效数的位宽随所述数值范围和所述精度要求的变化做相应调整。

作为一种可实施方式,所述第一转换模块设置为:

所述将单精度浮点格式的参数数据转换为可调精度浮点数据的具体步骤包括:

单精度浮点数据定点化,将含有小数的单精度浮点数据乘以系数后转换为定点整数;

将转换后的定点整数表示为二进制数,并根据可调精度浮点数据有效数所支持的位宽对此二进制定点整数向右移位,移位后的数据即有效数,并根据移位的位数确定指数,将有效数添加上指数和符号位后即为可调精度浮点数据。

作为一种可实施方式,所述第二转换模块设置为:

根据所述可调精度浮点数据的指数大小对所述可调精度浮点数据的有效数向左移位,移位的位数由指数确定;

移位后判断符号位,如果是负数将移位后的数据采用补码表示。

作为一种可实施方式,所述第一转换模块设置为:

将神经网络模型训练好的参数数据进行归纳分析,确定参数数据的最大值和最小值,并对神经网络模型中的单精度浮点格式数据进行模拟计算得到计算结果,根据计算结果确定数值范围以及计算的精度要求,为可调精度浮点数据转换过程中的指数和有效数的调整提供依据。

本发明由于采用了以上技术方案,具有显著的技术效果:

本发明提供了一种浮点运算定点化方法和系统,降低转换过程和计算过程中的误差和降低最终结果的精度损失;同时用较小的位宽来表示数据,降低了用于数据存储的资源占用以及提升传输数据的效率,从而实现在不明显影响计算精度的情况下显著提升浮点运算性能。

附图说明

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

图1是本发明的整体流程示意图;

图2是本发明的整体结构示意图;

图3是本发明的可调精度浮点数格式示意图;

图4是图1中的定点运算过程示意图;

图5是采用本发明的方法实现的神经网络运算结构框图。

具体实施方式

下面结合实施例对本发明做进一步的详细说明,以下实施例是对本发明的解释而本发明并不局限于以下实施例。

示例性方法:

一种浮点运算定点化方法,如图1所示,包括以下步骤:

s1、根据预设的数值范围以及计算的精度需求,调整可调精度浮点数据的指数和有效位,预先将单精度浮点格式的参数数据转换为可调精度浮点数据;

s2、计算时将所述可调精度浮点数据转换为定点数据并用于计算,并将计算产生的中间结果转换为可调精度浮点数据;

s3、待全部计算完成后产生最终结果,将最终结果转换为单精度浮点格式数据。

在此,需要讲述的是,参数数据是指:神经网络模型经过训练得到的参数数据,并且用于后续计算的数据。也就是说,整篇发明是对此参数数据进行转换的。

以下实施例都是基于本发明的示例性方法展开的,都不会脱离本发明示例性方法的保护范围。

实施例1

一种浮点运算定点化方法,包括以下步骤:

s1、根据预设的数值范围以及计算的精度需求,调整可调精度浮点数据的指数和有效位,预先将单精度浮点格式的参数数据转换为可调精度浮点数据;

s2、计算时将所述可调精度浮点数据转换为定点数据并用于计算,并将计算产生的中间结果转换为可调精度浮点数据;

s3、待全部计算完成后产生最终结果,将最终结果转换为单精度浮点格式数据。

在一般的神经网络系统中,都是采用单精度浮点格式的数据进行运算,参与计算的网络模型参数数据和需要识别分类的输入的图像数据位宽均为32位,由于参与计算的网络模型参数数据提前已知,为提升传输效率预先将这部分数据转换为位宽较小(16位)或者更小位宽的可调精度浮点格式数据。

在实际的神经网络模型中,参数数据均为有限范围内的小数,首先要对浮点数进行定点化,即将浮点数据转换为定点整数,方法为将小数乘以一个系数k,此系数按步骤一所确定的精度要求进行调整,此系数越大,小数转换为定点整数的精度越高,并且定点运算后的最终结果与浮点运算相比误差越小,但此系数越大,会导致中间结果的数值较大,底层实现时会耗费更多资源,所以此系数数值需要根据实际应用的要求采用合适的数值。

定点整数的有效数据位宽大小不一,需进行转换统一到相同的16位位宽。对于位宽较大的数据,需要进行位宽的压缩,方法是对有效数据进行移位,并用较少的位数表示较大的移位位数,例如用2位的数据表示移位,数值为1代表右移3位,数值为2代表右移6位,数值为3代码右移9位,相当于使用最多2位的新数据代替了原数据最多9位的数据。在使用和标准半精度浮点数相同的数据位宽情况下有利于fpga使用较少的逻辑资源实现定点数据的转换,和标准浮点数类似,其包括符号、指数和有效数三部分,并且可根据步骤s1评估的数值范围和精度要求的不同,可相应调整指数和尾数的位宽以满足不同的神经网络运算要求。那么,请看下面实施过程,重点介绍可调精度浮点数据,在本发明中,采用可调精度浮点数据是因为可以用16位位宽数据或者更小的位宽数据表示更大位宽的数据,计算时不能用可调精度浮点数据直接计算,需要转换为定点数据送入定点dsp才能计算。

更进一步地,在本实施例中,所述可调精度浮点数据包括符号、指数和有效数;

所述可调精度浮点数据的指数的位宽和有效数的位宽随所述数值范围和所述精度要求的变化能做相应地调整。

也就是说,其实,此类可调精度浮点数据和标准浮点数类似,如图3所示,包括符号、指数和有效数三部分,并且可根据步骤s1评估的数值范围和精度要求的不同,可相应调整指数和有效数的位宽以满足不同的神经网络运算要求。但是,可调精度浮点数据在使用和标准半精度浮点数相同的数据位宽的情况下具有更高的精度,并有利于fpga使用较少的逻辑资源实现定点数据的转换。

本实施例中,所述的可调精度浮点数具有为以下情况:

1、可调精度浮点数据的符号位与标准浮点数含义相同,符号位s为0代表正数,s为1代表负数;

2、可调精度浮点数据的指数每增加1代表原数据的二进制数在向可调精度浮点数据的转换过程中有效数右移了一定位数t,即数值大小除以2的t次方,按照实际数值范围和精度的需求,移动的位数t可以进行自定义;

3、指数后为定点整数移位后的有效数。

可调精度浮点数据n={s,e,m}代表的实际数值为n=(-1)s×m×2t×e,s、e、m分别为符号、指数、有效数的二进制表示,s、e、m、t为十进制表示的实际数值。因此可调精度浮点数据所能表示的数值为[-1×m×2t×e,m×2t×e]之间的整数。定点整数转换为可调精度浮点数据的过程就是把某个数值在[-1×m×2t×e,m×2t×e]之间的整数转换为{s,e,m}所表示的n的过程。

更进一步地,所述将分析后的浮点数据转换成可调精度浮点数据的具体步骤包括:

单精度浮点数据定点化,将含有小数的浮点数据转换为定点整数;

将转换后的定点整数表示为二进制数,并根据可调精度浮点数据有效数的位宽对二进制数进行移位,移位之后确立符号位,确立好符号位之后采用十六进制表示,形成可调精度浮点数据。在此,确立符号位之后采用的十六进制表示只是数据的表示方法,也就是说,也可以采用二进制表示方法进行表示,本事例中只是采用了用十六进制表示,当然,也能用二进制表示。表示成二进制或十六进制都可以为本发明中的可调精度浮点数据。

下面以具体实例来讲是如何将分析后的浮点数据转换成可调精度浮点数据的。

举一个具体的实例来详细说明这个转换步骤:

下面以浮点数-15.712为例来说明,单精度浮点数到可调精度浮点数据的转换,过程如下:

第一步:单精度浮点数据定点化,将含有小数的浮点数据转换为定点整数;即单精度浮点数据-15.712乘以系数4096等于-64356.352,经过四舍五入取整为-64356;

第二步,将转换后的定点整数表示为二进制数,并根据单精度浮点数据有效数的位宽对二进制数进行移位,移位之后确立符号位,确立好符号位之后采用十六进制表示,形成可调精度浮点数据,简单的说就是:将转换后整数用二进制表示,并根据位宽进行移位:-64356的绝对值64356用二进制表示为(1111101101100100)b,位宽为16位,超出了有效数13位的位宽,因此需要进行移位,由于只需要向右移位3位就能将位宽降低到有效数的位宽,因此确定指数e为1,用2位的二进制表示为(01)b,移位后的有效数为(1111101101100)b,由于为负数,因此符号位s为(1)b,因此用半精度浮点格式表示的64356为(1011111101101100)b,用十六进制表示为(bf6c)h,经过上述步骤,浮点数-15.712转换为16位的(bf6c)h。

同样以单精度浮点数-15.712为例说明浮点数到可调精度浮点数据的另一种转换,转换过程如下:

第一步,数据定点化,将小数转换为定点整数:-15.712乘以系数8192等于-128712.704,经过四舍五入取整为-128713;

第二步,将转换后的定点整数表示为二进制数,并根据单精度浮点数据有效数的位宽对二进制数进行移位,移位之后确立符号位,确立好符号位之后采用十六进制表示,形成可调精度浮点数据,简单的说就是:将转换后整数用二进制表示,并根据位宽进行移位:-128713的绝对值128713用二进制表示为(11111011011001001)b,位宽为17位,超出了有效数12位的位宽,因此需要进行移位,需要向右移位6位刚好将位宽降低到有效数的位宽范围内,因此确定指数e为3即(011)b,移位后的有效数为(011111011011)b,由于为正数,因此符号位s为(1)b,因此用半精度浮点格式表示的128713为(1011011111011011)b,用十六进制表示为(b7db)h,经过上述步骤,浮点数-15.712转换为16位的(b7db)h。

本发明中单精度浮点数转换为可调精度浮点数据的转换方法并不限于上述示例,也可根据实际应用需要对转换过程中涉及的指数位数、有效数位数、指数移位位数和小数转换为整数的系数等进行自定义调整。

单精度浮点数转换为16位位宽的可调精度浮点数后位宽减小一半,因此fpga或其它神经网络运算芯片和ddr内存交互时数据传输的效率提升了一倍,特别地,在使用fpga作为神经网络运算芯片时传输使用的逻辑资源和存储使用的ram资源减少了一半。

更进一步地,将所述可调精度浮点数据转换成定点数据的具体步骤包括:

根据所述可调精度浮点数据的指数大小对所述可调精度浮点数据的有效数向左移位,移位的位数由指数确定;

移位后判断符号位,如果是负数将移位后的数据采用补码表示。

更具体的讲,在fpga或其它神经网络运算芯片内部将可调精度浮点数据送入到定点dsp进行运算前需要将可调精度浮点还原为定点数据,需要根据符号、指数对有效数进行处理,转换为定点数据,即为s3中定点整数转换为可调精度浮点数据的逆向转换,步骤如下:

第一步:根据所述可调精度浮点数据的指数大小对所述可调精度浮点数据的有效数进行移位,以上述结果为例,可调精度浮点数据(bf6c)h指数为1,因为指数移位位数为3,所以对有效数(1f6c)h左移3位变为(fb60)h。

第二步:移位后判断符号位,如果是负数,确立好符号之后将移位后的可调精度浮点数据采用补码表示;(bf6c)h符号为1,用18位的补码表示为(304a0)h。

上述转换过程中,还原出的定点整数为-64352,与-64356.352的误差为4.352,精度约为99.9932%。

本实施例中,对所述定点数据进行数据处理:将所述定点数据转换为半精度浮点数据并输出的具体过程可以参见以下具体实例:

在对单精度浮点数转换为可调精度浮点数据的过程中采用了乘以系数k的操作,因此实际定点运算是用原数值的k倍进行运算,当两个可调精度浮点数据进行一次乘法运算后,实际结果为原结果的k的平方倍,在fpga内部数据运算的流程上需要对所有数值按统一的倍数进行运算,因此乘法运算后的结果需要除以k再进行后续的运算。

图4为定点运算过程示意图,神经网络中最常用的运算为乘法和加法,因此以y=a×b+c为例,对前面所述的数据处理和运算过程进行了说明,数据均用十进制表示,可以看到在经过一次乘法和一次加法后定点运算结果保持了较高的准确度,和浮点运算结果相比误差较小。

定点运算后的中间结果需要存储到ddr之前同样需要进行定点数据到可调精度浮点数据的转换,以提升数据传输的效率以及方便再次读回fpga时数据的统一处理。

定点运算的最终结果转换为单精度浮点数据输出,因此对于外部应用来说,实时运算时输入和输出的均为单精度浮点数,此浮点运算定点化方法对于采用单精度浮点数据的神经网络具有较强的兼容性。

系统结构的实施例

一种浮点运算定点化系统,如图2所示,包括:

第一转换模块1,用于根据预设的数值范围以及计算的精度需求,调整可调精度浮点数据的指数和有效位,预先将单精度浮点格式的参数数据转换为可调精度浮点数据;

第二转换模块2,用于计算时将所述可调精度浮点数据转换为定点数据并用于计算,并将计算产生的中间结果转换为可调精度浮点数据;

第三转换模块3,用于待全部计算完成后产生最终结果,将最终结果转换为单精度浮点格式数据。

所述第一转换模块1设置为:

所述可调精度浮点数据包括符号、指数和有效数;

所述可调精度浮点数据的指数的位宽和有效数的位宽随所述数值范围和所述精度要求的变化做相应调整。

所述第一转换模块1设置为:

所述将单精度浮点格式的参数数据转换为可调精度浮点数据的具体步骤包括:

单精度浮点数据定点化,将含有小数的单精度浮点数据乘以系数后转换为定点整数;

将转换后的定点整数表示为二进制数,并根据可调精度浮点数据有效数所支持的位宽对此二进制定点整数向右移位,移位后的数据即有效数,并根据移位的位数确定指数,将有效数添加上指数和符号位后即为可调精度浮点数据。

所述第二转换模块2设置为:

根据所述可调精度浮点数据的指数大小对所述可调精度浮点数据的有效数向左移位,移位的位数由指数确定;

移位后判断符号位,如果是负数将移位后的数据采用补码表示。

所述第一转换模块1设置为:

将神经网络模型训练好的参数数据进行归纳分析,确定参数数据的最大值和最小值,并对神经网络模型中的单精度浮点格式数据进行模拟计算得到计算结果,根据计算结果确定数值范围以及计算的精度要求,为可调精度浮点数据转换过程中的指数和有效数的调整提供依据。

具体神经网络框架图,如图5所示,图5为采用浮点运算定点化方法的神经网络运算结构框图,输入的图像数据和分类识别结果均采用了单精度浮点格式,无需额外的转换,可以较好地兼容目前采用单精度浮点数据的神经网络;网络模型参数由于预先已知,数据转换在上位机完成并提前下发至ddr存储,中间计算结果存储至ddr之前在fpga或其它神经网络运算芯片内部完成数据转换,网络模型参数和中间计算结果由于采用了可调精度浮点格式,数据在fpga或其它神经网络运算芯片和ddr之间的传输效率提升了一倍,并且在fpga或其它神经网络运算芯片内存储时使用的资源降低了一半;在fpga或其它神经网络运算芯片内部所有的数据转换处理均为实时转换,增加的处理时间相比于整个计算时间可忽略不计,内部运算时采用定点数据,从而使运算性能得到大幅提升。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

此外,需要说明的是,本说明书中所描述的具体实施例,其零、部件的形状、所取名称等可以不同。凡依本发明专利构思所述的构造、特征及原理所做的等效或简单变化,均包括于本发明专利的保护范围内。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,只要不偏离本发明的结构或者超越本权利要求书所定义的范围,均应属于本发明的保护范围。

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