本发明属于计算机领域,尤其涉及一种非线性函数运算装置及方法。
背景技术:
::算术逻辑单元(arithmeticlogicunit,缩写alu)是进行整数运算的结构。在计算机中,算术逻辑单元(alu)是专门执行算术和逻辑运算的数字电路。alu是计算机中央处理器的最重要组成部分,甚至连最小的微处理器也包含alu作计数功能。在现代cpu(centralprocessingunit,中央处理器)和gpu(graphicsprocessingunit,图形处理器)中已含有功能强大和复杂的alu;一个单一的元件也可能含有alu。大部分alu都可以完成以下运算:整数算术运算(加、减,有时还包括乘和除,不过成本较高),位逻辑运算(与、或、非、异或),移位运算(将数据向左或向右移位或浮动特定位),移位可被认为是乘以2或除以2。算数逻辑单元通常只含有线性运算部件,当算数逻辑单元进行复杂的幂运算等操作时,通常需要好几个运算周期。为了加快处理器的运算速度,cpu和gpu中通常会集成fpu(floating-pointunit,浮点运算单元)。fpu是专门用于浮点运算的处理器,并且可能支持一些超越函数的计算,例如log2x。现有技术在计算非线性函数时,通常是将复杂的运算拆解成简单的运算,再经过几个运算周期后才能得到结果。这使得运算速度慢,运算装置面积大,功耗高。技术实现要素:(一)要解决的技术问题本发明的目的在于,提供一种非线性函数运算装置及方法,解决现有技术在计算线性函数时运算速度慢、运算装置面积大、功耗高等问题。(二)技术方案本发明提供一种非线性函数运算装置,用于根据一输入的浮点数计算非线性函数的函数值,装置包括:查表部,其存储有多个线性函数的斜率值和截距值,其中,多个线性函数由非线性函数分段线性拟合而得到,并且,查表部根据浮点数获取相应的斜率值k和截距值b;线性拟合部,用于根据查表得到的斜率值k和截距值b,得到相应的线性函数y=k×x+b,并将浮点数代入线性函数,得到线性函数的函数值,以作为浮点数在非线性函数中的函数值。本发明还提供一种非线性函数运算方法,用于根据一输入的浮点数计算非线性函数的函数值,方法包括:s1,根据浮点数从多个线性函数中获取一个线性函数的斜率值k和截距值b,其中,多个线性函数由非线性函数分段线性拟合而得到;s2,根据得到的斜率值k和截距值b,得到相应的线性函数y=k×x+b,并将浮点数代入所述线性函数,得到线性函数的函数值,以作为浮点数在非线性函数中的函数值。(三)有益效果本发明将非线性函数拟合为多个线性函数,只需针对不同的自变量选择相应的线性函数,故在运算时只需要进行简单的加法和乘法运算,因此简化硬件设计,并提高运算速度,同时降低芯片功耗和面积。附图说明图1是本发明实施例提供的非线性函数运算装置的结构图。图2是本发明实施例提供的非线性函数运算装置的内部结构图。图3是本发明实施例中线性拟合部的内部结构图。图4是本发明实施例的非线性函数运算的原理图。具体实施方式本发明提供一种非线性函数运算装置及方法,装置包括查表部和线性拟合部,查表部存储有多个线性函数的斜率值和截距值,并根据浮点数获 取相应的斜率值k和截距值b;线性拟合部根据查表得到的斜率值k和截距值b,得到相应的线性函数y=k×x+b,并将浮点数代入线性函数,得到线性函数的函数值,以作为浮点数在非线性函数中的函数值。本发明将非线性函数拟合为多个线性函数,只需针对不同的自变量选择相应的线性函数,故在运算时只需要进行简单的加法和乘法运算,因此简化硬件设计,并提高运算速度,同时降低芯片功耗和面积。本发明提供一种非线性函数运算装置,用于根据一输入的浮点数计算非线性函数的函数值,装置包括:查表部,其存储有多个线性函数的斜率值和截距值,其中,多个线性函数由非线性函数分段线性拟合而得到,并且,查表部根据浮点数获取相应的斜率值k和截距值b;由于通过一组斜率值和截距值可以确定一个线性函数,因此,斜率值和截距值在存储时要有对应关系;线性拟合部,用于根据查表部得到的斜率值k和截距值b,得到相应的线性函数y=k×x+b,并将浮点数代入线性函数,得到线性函数的函数值,以作为浮点数在所述非线性函数中的函数值。本发明的原理是,将复杂的非线性函数拟合为多段线性函数,应该可知,分段的区间越小,线性函数与非线性函数的函数值越接近,亦即精度越高。确定输入的浮点数落入分段中的哪一段,由此确定出此段对应的线性函数,并将浮点数代入线性函数中,得到相应的函数值。根据本发明的一种实施方式,查表部包括斜率截距存储部和选择部,其中,斜率截距存储部用于存储多个线性函数所对应的斜率值和截距值,选择部用于根据浮点数在斜率截距存储部中选择并获取相应的斜率值k和截距值b。根据本发明的一种实施方式,装置还包括有一配置部,用于将非线性函数的自变量分段为n个区间,在每个区间内,将非线性函数拟合为一个线性函数,分别得到n个线性函数,并获取n个线性函数的斜率值和截距值,其中,将n个线性函数的斜率值和截距值存储于斜率截距存储部,每组斜率值和截距值一一对应于n个区间中一个区间的序号index,并将序号index存储于选择部,其中,序号index的取值范围为[0,n-1]。因此,选择部根据浮点数落入哪个区间,获取相应的区间的序号index,并根据 序号index在斜率截距存储部得到相应的斜率值k和截距值b。根据本发明的一种实施方式,配置部还设定非线性函数自变量取值范围为(-r,r),并将边界值r的指数部分作为一偏移值bias输入至选择部,所述选择部根据浮点数及偏移值bias,确定序号index,并根据所述序号index得到对应的斜率值和截距值。需要说明的是,线性函数不可能覆盖所有非线性函数的取值,故可设定非线性函数自变量取值范围为(-r,r),以是的在(-r,r)中进行线性拟合。在设定好后,输入的浮点数落入(-r,r)中,这样只需根据浮点数所在区间就可得到相应的序号index,但是,输入的浮点数也有可能不落入(-r,r)中,这时如何得到相应的序号index,因此,本发明通过引入一偏移值bias,配合浮点数,可在浮点数落入或者不落入取值范围(-r,r)时,都能得到相应的序号index,具体包括:当bias-exp<0时,在所述浮点数为正数情况下,index取n-1,在所述浮点数为负数情况下序号index取0,其中,exp为所述浮点数的指数部分;当0≤bias-exp<w-1时,index=2w-1+2w-1-m-1+frac[f-1:f-(w-1-m-1)+1]其中,frac为浮点数的尾数部分,w为序号index的位宽,并且,w=log2n,m=bias-exp,f为所述浮点数的尾数的位宽,然后将index的每一位和所述浮点数的符号位进行异或运算;当bias-exp≥w-1,index最高位为浮点数的符号位取反,低w-1位均为浮点数的符号位。根据本发明的一种实施方式,线性拟合部包括乘法器和加法器,其中,乘法器用于将查表得到的斜率值k与浮点数相乘,得到相乘结果,加法器用于将乘法器得到相乘结果与查表得到的截距值b相加,得到线性函数的函数值y。本发明提供还一种非线性函数运算方法,用于根据一输入的浮点数计算非线性函数的函数值,方法包括:s1,根据浮点数从多个线性函数中获取一个线性函数的斜率值k和截距值b,其中,多个线性函数由所述非线性函数分段线性拟合而得到;s2,根据得到的斜率值k和截距值b,得到相应的线性函数y=k×x+b,并将所述浮点数代入线性函数,得到线性函数的函数值,以作为浮点数在所述非线性函数中的函数值。根据本发明的一种实施方式,方法还包括:s0,用于将所述非线性函数的自变量分段为n个区间,在每个区间内,将非线性函数拟合为一个线性函数,分别得到n个线性函数,并获取所述n个线性函数的斜率值和截距值,其中,每组斜率值和截距值一一对应于n个区间中一个区间的序号index,序号index的取值范围为[0,n-1]。根据本发明的一种实施方式,步骤s0还包括,设定非线性函数自变量取值范围为(-r,r),并将边界值r的指数部分作为一偏移值bias;步骤s1还包括,根据浮点数及所述偏移值bias,确定序号index,并根据序号index得到对应的斜率值和截距值。根据本发明的一种实施方式,s1中,根据浮点数及所述偏移值bias,确定序号index,包括:当bias-exp<0时,在所述浮点数为正数情况下,index取n-1,在所述浮点数为负数情况下序号index取0,其中,exp为所述浮点数的指数部分;当0≤bias-exp<w-1时,index=2w-1+2w-1-m-1+frac[f-1:f-(w-1-m-1)+1]其中,frac为所述浮点数的尾数部分,w为序号index的位宽,并且,w=log2n,m=bias-exp,f为浮点数的尾数的位宽,然后将index的每一位和所述浮点数的符号位进行异或运算;当bias-exp≥w-1,index最高位为浮点数的符号位取反,低w-1位均为浮点数的符号位。为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。图1是本发明实施例提供的非线性函数运算装置的结构图,如图1所示,装置包括查表部5和线性拟合部6,其中,查表部5用于根据由输入的自变量的值x,以及外部配置进来的偏移量bias,查找到对应的分段线性拟合的斜率和截距。查表部5包括序号选择部1和斜率截距存储部2,序号选择部1用于根据输入的自变量值x和配置的偏移量bias计算出index,斜率截距存储部2用于根据序号选择部1计算出的index,选出斜率及截距。线性拟合部6用于根据查表部5得到的斜率和截距通过线性拟合的方 法得到最后结果。线性拟合部6包括乘法器3和加法器4,其中,乘法器3用于计算k*x,加法器4用于计算k*x+b。图2是本发明实施例提供的非线性函数运算装置的内部结构图,如图2所示,查表部5的输入值是非线性函数的自变量,以及偏移值。序号选择部1根据所述自变量x和偏移量计算出index。斜率截距存储部2中,table_k和table_b里存储了非线性函数分段线性拟合的直线斜率和截距,table_k和table_b里的值是可以配置的,在开始计算之前,它们的值应该已完成配置。根据以上所述算出的index,可以选出要使用的斜率table_k[index],和截距table_b[index]。图3是本发明实施例中线性拟合部的内部结构图,如图3所示,线性拟合部6有三个输入,x表示自变量,即外部输入需要进行非线性变换的值,k和b是查表得到的截距和斜率,输出是最终的结果f(x),线性拟合部6实现的运算是:f(x)=k*x+b。图4是本发明实施例的非线性函数运算的原理图,如图4所示,查表部3的输入是自变量x,查找部件3根据x的值找到对应的斜率k和截距b,并将k和b输出,在乘法器4中计算k*x,并将结果和b输出,在加法器5中计算k*x+b,计算得到最终的结果。以下通过计算非线性函数以进一步解释本发明,将非线性函数的自变量分段为n=64个区间,取值范围r设为7.75,即取值区间为(-7.75,7.75),通过线性拟合以上函数所得到的插值表为:table_k=[0,0.00048656316525353121,0.00061973162484223741,0.00078928936655365655,0.0010051440297105911,0.0012798783909594086,0.0016294587358847128,0.0020741221116775564,0.0026394821537513336,0.0033578984220486922,0.0042701575375603202,0.0054275134806431417,0.0068941251757849761,0.0087499054356052815,0.011093746329263701,0.014046996903534316,0.017756918346970331,0.022399600632704755,0.028181459980468879,0.035337917880121604, 0.044127182785956003,0.054816271160400852,0.067655703617413618,0.082839110694275894,0.10044501610076587,0.12036137423557895,0.14220006304664759,0.16521866898611015,0.18827848066541336,0.20987496057486665,0.22827132183028082,0.24173985504038351,0.24887167444405783,0.24887167444405978,0.24173985504038323,0.22827132183028037,0.20987496057486754,0.18827848066541422,0.16521866898610904,0.14220006304664773,0.1203613742355779,0.10044501610076662,0.082839110694276047,0.067655703617414242,0.054816271160399312,0.044127182785955642,0.035337917880122131,0.028181459980469011,0.022399600632704762,0.017756918346970005,0.014046996903534123,0.011093746329263798,0.0087499054356035919,0.0068941251757841807,0.0054275134806434523,0.0042701575375596592,0.0033578984220488948,0.0026394821537508726,0.002074122111678265,0.0016294587358859139,0.0012798783909593549,0.001005144029710878,0.00078928936655333173,0.00061973162484123137,0.00048656316525207165,0]table_b=[0,0.0041993251816466815,0.0051986385576176901,0.0064299574345850303,0.0079452052890187242,0.009807238238936004,0.012091883136726765,0.01489024369806616,0.018311254971669941,0.022484429652995856,0.027562682295467392,0.033725030746198308,0.041178847029904868,0.050161149061534412,0.060938175678893231,0.073802158887859029,0.089063797665378613,0.10703847125951904, 0.12802378192384653,0.15226575415464311,0.17991125218316206,0.21094542275377304,0.24511595347355658,0.28185147996324666,0.32019008490568668,0.35874483153772002,0.39574347031640295,0.42918193126900617,0.45711585573612518,0.47807264767380625,0.4915012059787659,0.49811232472098371,0.49994440545964863,0.50005559454035076,0.50188767527901634,0.50849879402123443,0.52192735232619281,0.54288414426387344,0.57081806873099528,0.60425652968359678,0.6412551684622817,0.67980991509431143,0.71814852003675334,0.75488404652644192,0.78905457724623107,0.82008874781683905,0.84773424584535517,0.87197621807615311,0.8929615287404804,0.9109362023346228,0.92619784111214154,0.93906182432110619,0.94983885093847398,0.95882115297009929,0.96627496925379974,0.97243731770453612,0.97751557034700309,0.98168874502833281,0.98510975630192921,0.98790811686326541,0.99019276176106386,0.9920547947109799,0.99357004256541748,0.99480136144239018,0.99580067481836443,1]令输入自变量x为16位浮点小数0.25,其指数exp为13,尾数frac为b’0000000000,bias为17,m为bias-exp=4,落入0≤bias-exp<w-1区间,可得index为26-1+26-1-4-1+frac[16-1:16-(6-1-4-1)+1],即25+20+0=33。根据index从上述插值表中选出斜率k为k[33]=0.248871674444,截距b为b[33]=0.50005559454,k×x+b的值为0.562273513151,而根据函 数采用线性拟合方式算出的结果为0.562176500886,误差为-9.7012265e-05。综上所述,本发明通过采用线性拟合方式,避免了复杂运算,如对数计算,通过采用乘法,加法这类速度更快的运算操作,提高计算速度,同时,避免了复杂的硬件设计,例如log2x的运算部件,降低了芯片面积和功耗。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12