处理乘加运算的装置和处理乘加运算的方法与流程

文档序号:11198955阅读:319来源:国知局
处理乘加运算的装置和处理乘加运算的方法与流程

本申请涉及计算机领域,并且更具体地,涉及一种处理乘加运算的装置和处理乘加运算的方法。



背景技术:

计算机在对输入数据进行处理时经常会用到乘加运算,计算机在执行乘加运算时是先对输入数据进行乘法运算,然后再对乘法运算得到的数据进行加法运算。由于输入数据一般是线性域中的数据,而线性域中的数据占用的位宽一般比较大(例如,32位),这样计算机在进行乘加运算时就需要占用较多的资源。此外,由于乘加运算中包含了大量的乘法运算,而乘法运算的运算量较大,运算速度也比较慢,这样就导致计算机在进行乘加运算时运算效率较低。

为了解决上述问题,现有技术中提出了一种处理乘加运算的方案,该方案将线性域中的输入数据转化为对数域中的数据,从而将线性域中的乘法运算转化为对数域中的加法运算。通过将线性域中的数据转化为对数域中的数据能够减少数据占用的位宽(例如,原始数据为32位的数据,取对数后占用的位宽变成了5位),此外,将线性域中的乘法转化为对数域中的加法运算也能提高计算效率。

但是,上述方案在完成对数域中的加法运算后,还需要将对数域中的数据再转化为线性域中的数据,并对这些线性域中的数据进行加法运算以得到乘累加的最终结果。在进行加法运算时,由于线性域中的数据占用的位宽较大,从而导致计算机在执行加法运算时仍需要占用较多的资源。



技术实现要素:

本申请提供一种处理乘加运算的装置和方法,以降低计算功耗。

第一方面,提供了一种处理乘加运算的装置,该装置包括:第一加法器,用于对输入的第一数据和第二数据进行加法运算,得到第一中间数据,其中,所述第一数据和所述第二数据的数值分别为logaa和logab,所述第一中间数据的数值为m,所述第一数据和第二数据是对多个原始数据中的第一原始数据a和第二原始数据b分别取对数后得到的;第二加法器,用于对输入的第三数据和第四数据进行加法运算,得到第二中间数据,其中,所述第三数据和所述第四数据的数值分别为logac和logad,所述第二中间数据的数值为n,所述第三数据和第四数据是对所述多个原始数据中的第三原始数据c和第四原始数据d分别取对数后得到的,其中,a为大于0且不等于1的整数,m和n为实数,且m大于等于n;对数加法器,所述对数加法器的输入端口与所述第一加法器以及所述第二加法器的输出端口相连,所述对数加法器用于根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值;其中,所述第一加法器、所述第二加法器以及所述对数加法器由硬件电路实现。

上述第一加法器、第二加法器以及对数加法器可以是基于专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)等各种硬件电路实现的。

本申请中,通过将指数形式的数据之间的加和转化为具有较低位宽的数值的加和,实现了将高位宽的数据运算转化到低位宽的数据运算,能够在计算过程中减少对资源的占用,从而降低计算功耗。

应理解,与am、an相比,m与an-m是位宽较低的数据,通过位宽较低的数据的加和来计算位宽较高的数据am与an的加和,能够避免采用高位宽的加法器,能够降低计算芯片的面积,降低计算功耗。还应理解,上述a、b、c、d均为大于0的实数。

上述将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值可以是将m与an-m的和作为(logea)*loga(a*b+c*d)的近似值。

应理解,上述a具体可以为2。

可选地,上述对数加法器还可以用于根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与-an-m的和近似确定为(logea)*loga(a*b-c*d)的数值。

上述乘加运算是广义的乘法运算,该乘法运算既可以包括乘积之间的相加运算,也可以包括乘积之间的相减运算。例如,上述乘法运算既可以包括a*b+c*d,也可以包括a*b-c*d。

结合第一方面,在第一方面的某些实现方式中,所述对数加法器用于根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值,包括:确定对所述多个原始数据进行处理时需要达到的目标精度;在所述目标精度低于第一精度的情况下,将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值。

上述第一精度可以是预先设置的,当目标精度低于第一精度可以认为对原始数据处理时要求的精度较低。

通过比较目标精度与预设的精度的大小关系能够确定对原始数据进行处理时的精度要求,当精度要求较低时可以直接将m+an-m近似确定为(logea)*loga(a*b+c*d)的数值,能够根据处理原始数据的精度要求来灵活确定(logea)*loga(a*b+c*d)的数值,能够保证原始数据的精度要求,并提高运算效率。

结合第一方面,在第一方面的某些实现方式中,所述对数加法器具体用于:根据误差补偿表确定an-m的误差补偿值,其中,所述误差补偿表包含k个数值以及所述k个数值的误差补偿值,其中,所述k个数值是将[-1,1]分成k份得到的,所述k个误差补偿值是将所述k个数值代入到误差补偿项得到的,k和l均为大于1的整数;将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值。

在确定(logea)*loga(a*b+c*d)的数值时除了m+an-m之外,还可以将an-m的误差补偿值考虑进去,能够进一步提高计算精度。

结合第一方面,在第一方面的某些实现方式中,所述对数加法器将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值,包括:确定对所述多个原始数据进行处理时需要达到的目标精度;在所述目标精度高于第二精度的情况下,将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值。

当目标精度高于第二精度时,可以认为对原始数据处理时要求的精度较高,此时在确定(logea)*loga(a*b+c*d)的数值时可以将an-m的误差补偿值考虑进去,以确保(logea)*loga(a*b+c*d)的数值的精度。另外,上述第二精度可以与第一精度相同,第二精度也可以大于第一精度。

结合第一方面,在第一方面的某些实现方式中,所述k是根据所述目标精度确定的。

当目标精度较高时,k可以是一个较大的数值,而当目标精度较低时,k可以是一个较小的数值。

k的数值越大,将[-1,1]划分的越细,这样在查询误差补偿表确定an-m的误差补偿值是能够取得更精确的结果。

结合第一方面,在第一方面的某些实现方式中,所述l是根据所述目标精度确定的。

当l的数值越大时,误差补偿项的项数越多,根据该误差补偿项得到的误差补偿值就越准确,因此,当目标精度较高时,l可以是一个较大的数值,而当目标精度较低时,l可以是一个较小的数值。

结合第一方面,在第一方面的某些实现方式中,所述对数加法器具体包括:移位电路,用于根据n-m对a进行移位运算,得到an-m;子加法电路,用于对m和an-m进行加法运算,得到m+an-m

结合第一方面,在第一方面的某些实现方式中,所述对数加法器还包括:减法电路,用于对m和n进行减法运算,得到m-n或者n-m;比较电路,用于比较m-n或者n-m与零的大小关系;选择电路,用于在m-n大于等于零的情况下,选择出m和n-m,或者,用于在n-m小于等于零的情况下,选择出m和n-m。

结合第一方面,在第一方面的某些实现方式中,所述装置还包括:转换器,用于根据(logea)*loga(a*b+c*d)近似得到a*b+c*d的值,其中,所述转换器由硬件电路实现。

结合第一方面,在第一方面的某些实现方式中,所述装置还包括:量化器,用于对所述a*b+c*d的值进行量化,以达到预设的数据位宽。

第二方面,提供了一种处理乘加运算的方法,该方法包括:对输入的第一数据和第二数据进行加法运算,得到第一中间数据,其中,所述第一数据和所述第二数据的数值分别为logaa和logab,所述第一中间数据的数值为m,所述第一数据和第二数据是对多个原始数据中的第一原始数据a和第二原始数据b分别取对数后得到的;对输入的第三数据和第四数据进行加法运算,得到第二中间数据,其中,所述第三数据和所述第四数据的数值分别为logac和logad,所述第二中间数据的数值为n,所述第三数据和第四数据是对所述多个原始数据中的第三原始数据c和第四原始数据d分别取对数后得到的,其中,a为大于0且不等于1的整数,m和n为实数,且m大于等于n;根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值。

结合第二方面,在第二方面的某些实现方式中,所述根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值包括:确定对所述多个原始数据进行处理时需要达到的目标精度;在所述目标精度低于第一精度的情况下,将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值。

结合第二方面,在第二方面的某些实现方式中,所述方法还包括:根据误差补偿表确定an-m的误差补偿值,其中,所述误差补偿表包含k个数值以及所述k个数值的误差补偿值,其中,所述k个数值是将[-1,1]分成k份得到的,所述k个误差补偿值是将所述k个数值代入到误差补偿项得到的,k和l均为大于1的整数;将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值。

结合第二方面,在第二方面的某些实现方式中,所述将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值,包括:确定对所述多个原始数据进行处理时需要达到的目标精度;在所述目标精度高于第二精度的情况下,将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值。

结合第二方面,在第二方面的某些实现方式中,所述k是根据所述目标精度确定的。

结合第二方面,在第二方面的某些实现方式中,所述根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值,包括:根据n-m对a进行移位运算,得到an-m;对m和an-m进行加法运算,得到m+an-m

结合第二方面,在第二方面的某些实现方式中,所述根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值,包括:对m和n进行减法运算,得到m-n或者n-m;比较m-n或者n-m与零的大小关系;在m-n大于等于零的情况下,选择出m和n-m,或者,用于在n-m小于等于零的情况下,选择出m和n-m。

结合第二方面,在第二方面的某些实现方式中,所述方法还包括:根据(logea)*loga(a*b+c*d)近似得到a*b+c*d的值,其中,所述转换器由硬件电路实现。

结合第二方面,在第二方面的某些实现方式中,所述方法还包括:对所述a*b+c*d的值进行量化,以达到预设的数据位宽。

附图说明

图1是现有技术中处理乘加运算的方法的示意性流程图;

图2是本申请实施例处理乘加运算的装置的示意性框图;

图3是本申请实施例处理乘加运算的装置的示意性框图;

图4是本申请实施例处理乘加运算的装置的示意性框图;

图5是本申请实施例处理乘加运算的方法的示意性流程图;

图6是本申请实施例处理乘加运算的方法的示意性流程图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。为了更好地本申请实施例的处理数据的装置,下面先结合图1对现有技术中处理乘加运算的方法进行简单的介绍。

图1示出了现有技术中处理乘加运算的方法的示意性流程图。

在图1中,四个乘法器(第一乘法器、第二乘法器、第三乘法器以及第四乘法器)分别对四对数据进行乘法运算,得到4个32位的数据,接下来,第一加法器和第二加法器分别对四个乘法器输出的4个32位的数据进行加法运算,得到两个32位的数据,接下来第三加法器再对第一加法器和第二加法器输出的两个32位的数据进行加法运算,得到一个32位的数据,最后再对加法运算得到的一个32位的数据进行量化处理,得到16位的数据。

由于乘法器的能耗和芯片面积均远大于加法器,因此,在计算机内部如果乘法器过多则会导致能耗较高,计算效率也比较低。为了解决该问题,现有技术提出了一种处理乘加运算的方案。该方案将线性域中的数据转化为对数域中的数据,从而将线性域中的乘法运算转化为对数域中的加法运算。

下面以线性域中的数据a、b、c、d为例,对a*b+c*d的计算过程进行详细的介绍:

首先,将线性域中的a、b、c和d转化为对数域中的数据,得到:

x=log2a,y=log2b,z=log2c,w=log2d,其中,a=2x,b=2y,c=2z,d=2w

其次,将线性域中的乘法运算转化为对数域中的加法运算,得到:

a*b+c*d=2x+y+2z+w

因此,a与b的乘法运算就转化成了x与y的加法运算,c与d的乘法运算就转化成了z与w的加法运算。最后再通过x+y以及z+w分别计算出2x+y+2z+w,然后将2x+y与2z+w相加就可以得到a×b+c×d的运算结果。

虽然该方案将线性域中的乘法运算转化成了对数域中的加法运算,避免了进行乘法运算,但是在完成了对数域中的加法运算之后,还要将对数域中的数据(x、y、z、w)转化为线性域中的数据(2x+y、2z+w)然后再相加,由于对数域中的数据占用的位宽较少(例如,x、y、z、w占用的数据位宽为5位),线性域中的数据占用的位宽较多(例如,2x+y、2z+w占用的数据位宽为32位),因此,在将对数域中的数据转化为线性域中数据之后仍需要采用高位宽的加法器来执行加法运算,导致计算机在执行加法运算时仍需要占用的较多的资源。

因此,本申请实施例提出了一种处理乘加运算的装置,该装置能够将较高位宽的指数形式的数据之间的加法运算转化为较低位宽的数据之间的加法运算,能够在计算过程减少对资源的占用,从而降低计算功耗。

图2是本申请实施例的处理数据的装置的示意性框图。图2的装置200包括:

第一加法器210,用于对输入的第一数据和第二数据进行加法运算,得到第一中间数据,其中,第一数据和第二数据的数值分别为logaa和logab,第一中间数据的数值为m,第一数据和第二数据是对多个原始数据中的第一原始数据a和第二原始数据b分别取对数后得到的;

第二加法器220,用于对输入的第三数据和第四数据进行加法运算,得到第二中间数据,其中,第三数据和第四数据的数值分别为logac和logad,第二中间数据的数值为n,第三数据和第四数据是对多个原始数据中的第三原始数据c和第四原始数据d分别取对数后得到的,其中,a为大于0且不等于1的整数,m和n为实数,且m大于等于n。

上述原始数据可以是处理图像时的rgb像素数据。

上述a的取值可以为2。

在对上述多个原始数据进行处理,得到多个中间数据时,可以先将原始数据之间的乘积运算转化为对数域中的加法运算,然后得到指数形式的多个中间数据。

对数加法器230,对数加法器230的输入端口与第一加法器210以及第二加法器220的输出端口相连,对数加法器230用于根据第一加法器210和第二加法器220输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值。

上述第一加法器210、第二加法器220以及对数加法器230可以由硬件电路实现。具体地,上述第一加法器210、第二加法器220以及对数加法器230可以是基于专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)等各种硬件电路实现的。

本申请中,通过将指数形式的数据之间的加法运算转化为具有较低位宽的数值的加法运算,实现了将高位宽的数据运算转化到低位宽的数据运算,能够在计算过程中减少对资源的占用,从而降低计算功耗。

具体地,由于m与an-m占用的数据位宽小于am和an占用的数据位宽,因此,本申请实施例中,通过将am和an的高位宽的加法运算转换成了m与an-m之间的低位宽的加法运算,减少了计算过程中对系统资源的占用,能够提高计算效率。

可选地,上述对数加法器230既可以将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值,也可以将m与-an-m的和近似确定为(logea)*loga(a*b-c*d)的数值。

上述乘加运算是广义的乘加运算,既可以包括乘积之间的相加运算,也可以包括乘积之间的相减运算。例如,该乘加运算既可以包括a*b+c*d,也可以包括a*b-c*d。

可选地,上述对数加法器230在根据第一加法器210和第二加法器220输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值,具体包括:确定对多个原始数据进行处理时需要达到的目标精度;在目标精度低于第一精度的情况下,将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值。

上述第一精度可以是预先设置的,当目标精度低于第一精度可以认为对原始数据处理时要求的精度较低。通过比较目标精度与预设的精度的大小关系能够确定对原始数据进行处理时的精度要求,当精度要求较低时可以直接将m+an-m近似确定为(logea)*loga(a*b+c*d)的数值。因此,本申请能够根据处理原始数据的精度要求来灵活确定(logea)*loga(a*b+c*d)的数值,能够保证原始数据的精度要求,并提高运算效率。

在一些实施例中,上述对数加法器230具体用于:根据误差补偿表确定an-m的误差补偿值,其中,误差补偿表包含k个数值以及k个数值的误差补偿值,其中,k个数值是将[-1,1]分成k份得到的,k个误差补偿值是将k个数值代入到误差补偿项得到的,k和l均为大于1的整数;将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值。

在确定(logea)*loga(a*b+c*d)的数值时除了m+an-m之外,还可以将an-m的误差补偿值考虑进去,能够进一步提高计算精度。

可选地,在根据m+an-m以及an-m的误差补偿值确定(logea)*loga(a*b+c*d)时,k个数值可以是将[0,1]划分成k份得到的。

而在根据m-an-m以及-an-m的误差补偿值确定(logea)*loga(a*b-c*d)时,k个数值可以是将[-1,0]划分成k份得到的。

应理解,在将[-1,1]、[0,1]或者[-1,0]分成k份时可以是将这些区间进行平均划分而得到k个数值。

应理解,根据误差补偿表确定an-m的误差补偿值可以是通过查询误差补偿表确定an-m的误差补偿值。具体可以是在误差补偿表中先查询k个数值中与an-m最接近的一个数值,然后将数值的误差补偿值确定为an-m的误差补偿值。

可选地,对数加法器230将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值,具体包括:确定对多个原始数据进行处理时需要达到的目标精度;在目标精度高于第二精度的情况下,将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值。

当目标精度高于第二精度时,可以认为对原始数据处理时要求的精度较高,此时在确定(logea)*loga(a*b+c*d)的数值时可以将an-m的误差补偿值考虑进去,以确保(logea)*loga(a*b+c*d)的数值的精度。另外,上述第二精度可以与第一精度相同。

可选地,作为一个实施例,上述对数加法器230在确定(logea)*loga(a*b+c*d)的数值时还可以先确定n-m的绝对值与第一阈值的大小关系;如果n-m的绝对值大于或者等于第一阈值,那么对数加法器230可以直接将m近似确定为(logea)*loga(a*b+c*d)的数值。

当n-m的绝对值较大时,an-m的数值与m相比非常小,因此,在计算时可以将an-m忽略掉,而直接将m的值近似确定为(logea)*loga(a*b+c*d)的数值,能够减少计算的复杂度。

例如,n=2,m=10,第一阈值为5,n-m的绝对值大于第一阈值,a-8的数值与10相比非常小,可以将a-8的数值忽略,直接将10确定为(logea)*loga(a*b+c*d)的数值。

当n-m的绝对值小于第一阈值的情况下,对数加法器230仍将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值。

在一些实施例中,k是根据目标精度确定的。具体地,当目标精度较高时,k可以是一个较大的数值,而当目标精度较低时,k可以是一个较小的数值。

具体地,k的数值越大,将[-1,1]划分的越细,误差补偿表中包含的数据越多,这时根据误差补偿表查询an-m的误差补偿值能够得到更精确的结果。

在一些实施例中,l是根据目标精度确定的。

具体地,当l的数值越大时,误差补偿项的项数越多,根据该误差补偿项得到的误差补偿值就越精确,而当l的数值越小时,误差补偿项的项数越小,根据该误差补偿项得到的误差补偿值就越不准确,因此,当目标精度较高时,l可以是一个较大的数值,而当目标精度较低时,l可以是一个较小的数值。

在本申请中,通过灵活设置k、l的数值,能够灵活地调整对原始数据处理的精度。

可选地,在一些实施例中,上述对数加法器230具体包括:

移位电路2301,用于根据n-m对a进行移位运算,得到an-m

子加法电路2302,用于对m和an-m进行加法运算,得到m+an-m

可选地,在一些实施例中,上述对数加法器230还包括:

减法电路2303,用于对m和n进行减法运算,得到m-n或者n-m;

比较电路2304,用于比较m-n或者n-m与零的大小关系;

选择电路2305,用于在m-n大于等于零的情况下,选择出m和n-m,或者,用于在n-m小于等于零的情况下,选择出m和n-m。

应理解,移位电路2301在根据n-m对a进行移位运算之前,可以先从选择电路2305中获取n-m,子加法电路2302在对m和an-m进行加法运算之前,可以先从选择电路2305中获取m。

另外,减法电路2303在对m和n进行减法运算时,可以以其中任意一个作为被减数,另一个作为减数,从而得到m-n或者n-m。

可选地,作为一个实施例,上述装置200还包括:转换器240,用于根据(logea)*loga(a*b+c*d)近似得到a*b+c*d的值。

可选地,作为一个实施例,上述装置200还包括:量化器250,用于对a*b+c*d的值进行量化,以达到预设的数据位宽。

上述转换器240和量化器250均可由硬件电路实现,具体地,转换器240和量化器250可以是基于asic、fpga等硬件电路实现。

其中,量化是指将不同位宽的数据进行匹配,例如,第一步计算出来得到的数据的位宽为8位,而第二步运算需要的位宽为5位,那么这时需要将8位的数据截断成5位的数据,以满足第二步中的计算对位宽的要求,具体实现可以是将8位数据中大于5位数据的最大值都调整为5位最大值,将小于5位最小值都调整为5位最小值,其他值不变。

图3是本申请实施例的处理乘加运算的对数加法器300的示意性框图。

对数加法器300具体包括:减法电路310、比较电路320、选择电路330、移位电路340、误差补偿电路350以及加法电路360。

假设存在原始数据a、b、c、d,需要计算a*b+c*d的数值,那么先对原始数据取对数,得到x=logaa,y=logab,z=logac和w=logad,并且令x+y=m,z+w=n,那么,a*b+c*d=am+an,也就是说可以通过计算am+an的数值得到a*b+c*d的数值。

下面对对数加法器300确定am+an的数值过程进行详细的介绍。n和m是输入的5bit的数据(假设m>n),sign表示n和m的符号位是否相同,例如,当sign为1时表示am和an同号,当sign为0时表示am和an异号(这里对sign为1的情况进行说明),装置300计算am+an的具体步骤如下:

401、减法电路310对n和m做差,得到n-m或者m-n;

402、比较电路320获取减法电路310运算得到的结果n-m或者m-n,并将n-m或者m-n与零进行大小比较;

403、选择电路330根据n-m或者m-n与零的大小关系从n和m中选出较大的数m以及n-m;

404、移位电路340根据n-m对a执行移位运算,得到an-m

405、误差补偿电路350计算an-m的误差补偿值;

误差补偿电路350具体可以是一个多选一的选择器组合电路,误差补偿电路350还可以称为误差补偿表,即图中的虚线部分。

下面对误差补偿表的生成过程进行详细的介绍。

根据泰勒公式对ln(1+x)展开,得到:

当x∈[-1,1]时,该级数收敛。因此可以上式(1)写成:

ln(1+x)=x+error(x)(2)

在(2)式中,error(x)表示展开式中二次项以及高次项的和,只要保留足够高的多次项,就可以保证足够高的精度。

由于loga(x)与ln(x)之间相差一个常数,即loga(x)=c*ln(x),因此,loga(x)也可以按照展开成公式(2)的形式,其中,c=logae

当x>y时,

loga(ax+ay)=x+loga(1+ay-x)

=c[x+ay-x+error(x)](3)

同理,可以得到,

loga(ax-ay)=c[x-ay-x+error(x)](4)

根据上述公式(3)可得:

loga(am+an)=c[m+an-m+error(an-m)](5)

(logea)*loga(am+an)=c[m+an-m+error(an-m)](6)

将error(an-m)按照泰勒级数展开,根据精度要求,保留三级、四级或者更多级的高次项,对x属于[-1,1]的取值范围平均分成k等分(k是一个正整数),将结果记录到一个k选1选择器组合电路中,该选择器称为误差补偿表。对计算精度要求高的场景,将误差补偿值与对数加法电路中其他部分的结果相加;对计算精度要求低的场景,可以关闭误差补偿表相关所有电路,不使用该部分功能。

406、加法器360对m、an-m以及an-m的误差补偿值进行加法运算,得到(logea)*loga(am+an)的数值。

由上述公式(1)至(6)可知,(logea)*loga(a*b+c*d)等于m+an-m与误差项error(an-m)的和,由于在实际计算误差项error(an-m)的过程中,只能展开有限项数的泰勒级数,因此,m+an-m或者m+an-m与误差项error(an-m)的和只是近似作为(logea)*loga(a*b+c*d)的数值。

应理解,对数加法器300在确定了(logea)*loga(am+an)的数值之后,还可以进一步根据(logea)*loga(am+an)的数值来确定am+an的数值,或者是不计算出am+an的数值,而是将(logea)*loga(am+an)的数值输入其它运算电路进行运算。

图4是本申请实施例处理乘加运算的装置的示意性框图。图4的装置400由主控cpu、ddr内存、axi总线、计算芯片组成。其中,计算芯片包括输入缓存模块、计算引擎模块以及输出控制模块等。其中,输入缓存模块用于存储输入的原始数据,计算引擎模块用于对原始数据进行计算,输出控制模块对计算引擎模块输出的计算结果的输出进行控制。

应理解,图2所示的装置200以及图3所示的装置300可以对应于图4中的计算芯片,该计算芯片能够实现上文中由装置200和装置300对数据的处理过程。另外,上述装置200和装置300还可以直接对应于图4中的计算引擎模块,该计算引擎模块能够实现上文中由装置200和装置300对数据的处理过程。另外,上述计算引擎模块还可以是基于硬件电路实现的。

图5是本申请实施例的处理乘加运算的装置进行乘加运算的示意性流程图。具体地,图5可以具体表示上文中装置400进行乘加运算的示意性流程图。应理解,图5表示的可以是对多个数据进行乘累加的计算过程。

501、输入缓存模块将缓存的线性域中的图像数据转化为对数域中的数据;

502、计算引擎模块在对数域下对数值进行加法运算,从而计算出线性域下的数值相乘的结果;

503、计算引擎模块对线性域下的数据相乘后得到的结果进行相加,通过比较电路、移位电路以及误差补偿电路等完成指数的相加运算,得到处理结果。

504、输出控制模块将计算引擎模块输出的数据进行量化,对齐下一级运算的数据位宽,并输出。

在实际计算过程中可能会重复进行步骤502至步骤504的计算过程。

上文结合图2至图4对本申请实施例的处理乘加运算的装置进行了详细的描述,下面结合图6对本申请实施例的处理乘加运算的方法进行描述。应理解,图2至图4中的处理乘加运算的装置能够实现图6中的处理乘加运算的方法,图6中处理乘加运算的方法与图2至图5中的处理乘加运算的装置是对应的。为了简洁,下面适当省略重复的描述。

图6是本申请实施例处理数据的方法的示意性流程图。图6的方法可以由上述处理数据的装置200、装置300或者装置400来执行。图6的方法600包括:

610、对输入的第一数据和第二数据进行加法运算,得到第一中间数据,其中,所述第一数据和所述第二数据的数值分别为logaa和logab,所述第一中间数据的数值为m,所述第一数据和第二数据是对多个原始数据中的第一原始数据a和第二原始数据b分别取对数后得到的;

620、对输入的第三数据和第四数据进行加法运算,得到第二中间数据,其中,所述第三数据和所述第四数据的数值分别为logac和logad,所述第二中间数据的数值为n,所述第三数据和第四数据是对所述多个原始数据中的第三原始数据c和第四原始数据d分别取对数后得到的,其中,a为大于0且不等于1的整数,m和n为实数,且m大于等于n;

630、根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值。

本申请中,通过将指数形式的数据之间的加和转化为具有较低位宽的数值的加和,实现了将高位宽的数据运算转化到低位宽的数据运算,能够在计算过程中减少对资源的占用,从而降低计算功耗。具体而言,与am、an相比,m与an-m是位宽较低的数据,通过位宽较低的数据的加和来计算位宽较高的数据am与an的加和,能够避免采用高位宽的加法器,能够降低计算芯片的面积,降低计算功耗。

另外,上述a具体可以为2。

可选地,作为一个实施例,所述根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值包括:确定对所述多个原始数据进行处理时需要达到的目标精度;在所述目标精度低于第一精度的情况下,将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值。

上述第一精度可以是预先设置的,当目标精度低于第一精度可以认为对原始数据处理时要求的精度较低。通过比较目标精度与预设的精度的大小关系能够确定对原始数据进行处理时的精度要求,当精度要求较低时可以直接将m+an-m近似确定为(logea)*loga(a*b+c*d)的数值,能够根据处理原始数据的精度要求来灵活确定(logea)*loga(a*b+c*d)的数值,能够保证原始数据的精度要求,并提高运算效率。

可选地,作为一个实施例,上述方法600还包括:根据误差补偿表确定an-m的误差补偿值,其中,所述误差补偿表包含k个数值以及所述k个数值的误差补偿值,其中,所述k个数值是将[-1,1]分成k份得到的,所述k个误差补偿值是将所述k个数值代入到误差补偿项得到的,k和l均为大于1的整数;将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值。

在确定(logea)*loga(a*b+c*d)的数值时除了m+an-m之外,还可以将an-m的误差补偿值考虑进去,能够进一步提高计算精度。

可选地,作为一个实施例,所述将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值,包括:确定对所述多个原始数据进行处理时需要达到的目标精度;在所述目标精度高于第二精度的情况下,将m+an-m与an-m的误差补偿值的和近似确定为(logea)*loga(a*b+c*d)的数值。

当目标精度高于第二精度时,可以认为对原始数据处理时要求的精度较高,此时在确定(logea)*loga(a*b+c*d)的数值时可以将an-m的误差补偿值考虑进去,以确保(logea)*loga(a*b+c*d)的数值的精度。另外,上述第二精度可以与第一精度相同。

可选地,作为一个实施例,所述k是根据所述目标精度确定的。

可选地,作为一个实施例,所述l是根据所述目标精度确定的。

当目标精度较高时,k可以是一个较大的数值,而当目标精度较低时,k可以是一个较小的数值。k的数值越大将[-1,1]划分的越细,这样在查询误差补偿表确定an-m的误差补偿值是能够取得更准确的结果。

当l的数值越大时,误差补偿项的项数越多,根据该误差补偿项得到的误差补偿值就越准确,因此,当目标精度较高时,l可以是一个较大的数值,而当目标精度较低时,l可以是一个较小的数值。

可选地,作为一个实施例,所述根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值,包括:根据n-m对a进行移位运算,得到an-m;对m和an-m进行加法运算,得到m+an-m

可选地,作为一个实施例,所述根据所述第一加法器和所述第二加法器输入的m和n得到an-m,并将m与an-m的和近似确定为(logea)*loga(a*b+c*d)的数值,包括:对m和n进行减法运算,得到m-n或者n-m;比较m-n或者n-m与零的大小关系;在m-n大于等于零的情况下,选择出m和n-m,或者,用于在n-m小于等于零的情况下,选择出m和n-m。

可选地,作为一个实施例,上述方法600还包括:根据(logea)*loga(a*b+c*d)近似得到a*b+c*d的值。

可选地,作为一个实施例,上述方法600还包括:对所述a*b+c*d的值进行量化,以达到预设的数据位宽。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

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