一种适用于混合精度神经网络的定点乘加运算单元及方法
技术领域
本发明涉及数字电路领域,尤其涉及的是一种适用于混合精度神经网络的定点乘加运算单元及方法。
背景技术
当前人工智能算法在众多商用领域应用广泛,为了提高网络计算的性能,网络不同层的量化是提高网络运算效率的重要方法之一。作为算法实现的运算载体,人工智能芯片为了针对网络设计的特性,在数据处理的过程中对混合精度运算的比例需求日益增大。常规处理器采用多种不同精度的处理单元对混合精度运算进行处理,这种方法使得硬件开销过大,空闲资源冗余,以及不同精度硬件切换时延迟过多,减少通量,并且无法针对应用需求配置调整和最大化的利用硬件资源从而提高能效比和吞吐率,造成运行时间和运行面积上的浪费。
因此,现有技术还有待改进和发展。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种适用于混合精度神经网络的定点乘加运算单元及方法,旨在解决现有技术中需要采用多种不同精度的处理单元对混合精度运算进行处理,导致的硬件开销过大,空闲资源冗余等问题。
本发明解决问题所采用的技术方案如下:
第一方面,本发明实施例提供一种适用于混合精度神经网络的定点乘加运算方法,其中,所述方法包括:
获取模式信号和输入数据,根据所述模式信号确定数据输入位置,并将所述输入数据从所述数据输入位置输入乘法器中;
根据所述模式信号对所述乘法器生成的部分积进行处理,并执行求和操作,将所述求和操作后得到的数据作为目标和;
对所述目标和进行截选,将截选后得到的数据作为所述输入数据的点乘运算结果。
在一种实施方式中,所述获取模式信号和输入数据,根据所述模式信号确定数据输入位置,并将所述输入数据从所述数据输入位置输入乘法器中包括:
获取模式信号和输入数据,根据所述输入数据的精度确定调用的乘法器的数量;
当所述输入数据的最高精度高于所述乘法器的最高比特位时,调用的乘法器的数量大于1;
根据所述模式信号确定数据输入位置,将所述输入数据中最高精度的数据进行拆分,将拆分完毕后得到的输入数据从所述数据输入位置输入乘法器中;
当所述输入数据的最高精度低于或者等于所述乘法器的最高比特位时,调用的乘法器的数量为1;
根据所述模式信号确定数据输入位置,将所述输入数据从所述数据输入位置输入乘法器中。
在一种实施方式中,所述获取模式信号,根据所述模式信号对所述乘法器生成的部分积进行处理,并执行求和操作,将所述求和操作后得到的数据作为目标和包括:
获取模式信号,根据所述模式信号对所述乘法器生成的部分积进行处理;
将处理后得到的部分积生成部分拆分为第一部分积生成部分和第二部分积生成部分;
对所述第一部分积生成部分和所述第二部分积生成部分执行求和操作,将所述求和操作后得到的数据作为目标和。
在一种实施方式中,所述模式信号由输入数据的精度确定;所述处理至少包括以下操作中的一种:
对所述乘法器生成的预设区域的部分积进行屏蔽处理;
当调用的乘法器的数量大于1时,对进行低位运算的乘法器输出的部分积生成部分进行移位处理。
在一种实施方式中,当所述输入数据为相同精度,且所述输入数据的最高比特位小于或者等于所述乘法器的最高比特位时,所述对所述第一部分积生成部分和所述第二部分积生成部分执行求和操作,并基于所述求和操作得到目标和包括:
将所述第一部分积生成部分和所述第二部分积生成部分分别输入第一级压缩器a和第一级压缩器b中;
将所述第一级压缩器a和所述第一级压缩器b的输出结果共同输入至第二级压缩器c中;
将所述第二级压缩器c的输出结果输入加法器中,并将所述加法器的输出结果作为目标和。
在一种实施方式中,当所述输入数据为混合精度时,所述对所述第一部分积生成部分和所述第二部分积生成部分执行求和操作,并基于所述求和操作得到目标和包括:
获取所述输入数据的最高比特位数,并将所述输入数据的最高比特位数与所述乘法器的最高比特位数进行比较;
当所述输入数据的最高比特位数等于所述乘法器的最高比特位数时,将所述第一部分积生成部分和所述第二部分积生成部分分别输入第一级压缩器a和第一级压缩器b中;
将所述第一级压缩器a和所述第一级压缩器b的输出结果分别输入第一加法器和第二加法器中,并将所述第一加法器和所述第二加法器的输出结果之和作为目标和。
在一种实施方式中,当所述输入数据为混合精度时,所述对所述第一部分积生成部分和所述第二部分积生成部分执行求和操作,并基于所述求和操作得到目标和包括:
获取所述输入数据的最高比特位数,并将所述输入数据的最高比特位数与所述乘法器的最高比特位数进行比较;
当所述输入数据的最高比特位数大于所述乘法器的最高比特位数时,所述乘法器包括第一乘法器和第二乘法器,所述第二乘法器为低位运算乘法器;所述第一乘法器输出所述第一部分积生成部分,所述第二乘法器输出所述第二部分积生成部分;
将所述第一部分积生成部分直接输入第一加法器;
将所述第二部分积生成部分拆分后分别输入所述第一加法器和第二加法器中;
将所述第一加法器和所述第二加法器的输出结果之和作为目标和。
在一种实施方式中,所述对所述目标和进行截选,将截选后得到的数据作为所述输入数据的点乘运算结果包括:
根据所述输入数据的精度确定截选位宽;
根据所述截选位宽,将所述目标和从第0位开始进行截选操作,将所述截选操作后得到的数据作为所述输入数据的点乘运算结果。
在一种实施方式中,所述方法还包括:
确定所述输入数据的最高位对应的部分积生成部分,将所述部分积生成部分作为待调整部分积生成部分;
当所述输入数据的最高位为负数时,对所述待调整部分积生成部分进行取反加一处理。
第二方面,本发明实施例还提供一种适用于混合精度神经网络的定点乘加运算单元,其特征在于,所述运算单元包括:
位置确定模块,用于获取模式信号和输入数据,根据所述模式信号确定数据输入位置,并将所述输入数据从所述数据输入位置输入乘法器中;
部分积处理模块,用于根据所述模式信号对所述乘法器生成的部分积进行处理,并执行求和操作,将所述求和操作后得到的数据作为目标和;
结果生成模块,用于对所述目标和进行截选,将截选后得到的数据作为所述输入数据的点乘运算结果。
本发明的有益效果:本发明通过将不同精度的输入数据精度从不同位置输入乘法器中,根据模式信号控制所述乘法器屏蔽指定区域的部分积以后输出部分积生成部分,并对输出的部分积生成部分按不同精度对应的方法执行求和操作,从而实现混合精度的点乘运算。本发明中采用一种乘法器即可实现混合精度神经网络的点乘运算,解决了现有技术中需要采用多种不同精度的处理单元对混合精度运算进行处理,导致的硬件开销过大,空闲资源冗余等问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种适用于混合精度神经网络的定点乘加运算方法的流程示意图。
图2是本发明实施例提供的常规8bit×8bit乘法器的中产生的部分积的示意图。
图3是本发明实施例提供的常规8bit×8bit乘法器所用到的加法树结构。
图4是本发明实施例提供的基于一组8bit×8bit乘法器实现4组精度为2bit×2bit的输入数据的乘法运算的参考图。
图5是本发明实施例提供的基于一组8bit×8bit乘法器实现2组精度为4bit×4bit的输入数据的乘法运算的参考图。
图6是本发明实施例提供的基于8bit×8bit乘法器实现精度为1bit×1bit的输入数据的乘法运算的参考图。
图7是本发明实施例提供的基于8bit×8bit乘法器实现精度为3bit×3bit的输入数据的乘法运算的参考图。
图8是本发明实施例提供的基于8bit×8bit乘法器实现精度为5bit×5bit的输入数据的乘法运算的参考图。
图9是本发明实施例提供的基于8bit×8bit乘法器实现精度为6bit×6bit的输入数据的乘法运算的参考图。
图10是本发明实施例提供的基于8bit×8bit乘法器实现精度为7bit×7bit的输入数据的乘法运算的参考图。
图11是本发明实施例提供的基于8bit×8bit乘法器通过对部分积生成部分的拆分求和,实现两个4bit×8bit的混合精度的输入数据的乘法运算的参考图。
图12是本发明实施例提供的基于两组8bit×8bit乘法器实现混合精度为8bit×16bit的输入数据的乘法运算的参考图。
图13是本发明实施例提供的混合精度下,第一乘法器和第二乘法器的输出数据进行累加的示意图。
图14是本发明实施例提供的基于两组8bit×8bit乘法器架构实现8bit×xbit乘法的示意图,x=9~15bit。
图15是本发明实施例提供的基于两组8bit×8bit乘法器实现混合精度为8bit×15bit的输入数据的乘法运算的参考图。
图16是本发明实施例提供的一个8bit×8bit乘法器中包含符号位的部分积示意图。
图17是本发明实施例提供的运算单元的内部模块的参考图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
当前人工智能算法在众多商用领域应用广泛,为了提高网络计算的性能,网络不同层的量化是提高网络运算效率的重要方法之一。作为算法实现的运算载体,人工智能芯片为了针对网络设计的特性,在数据处理的过程中对混合精度运算的比例需求日益增大。常规处理器采用多种不同精度的处理单元对混合精度运算进行处理,这种方法使得硬件开销过大,空闲资源冗余,以及不同精度硬件切换时延迟过多,减少通量,并且无法针对应用需求配置调整和最大化的利用硬件资源从而提高能效比和吞吐率,造成运行时间和运行面积上的浪费。
针对现有技术的上述缺陷,本发明提供了一种适用于混合精度神经网络的定点乘加运算方法,通过将不同精度的输入数据精度从不同位置输入乘法器中,根据模式信号控制所述乘法器屏蔽指定区域的部分积以后输出部分积生成部分,并对输出的部分积生成部分按不同精度对应的方法执行求和操作,从而实现混合精度的点乘运算。本发明中采用一种乘法器即可实现混合精度神经网络的点乘运算,解决了现有技术中需要采用多种不同精度的处理单元对混合精度运算进行处理,导致的硬件开销过大,空闲资源冗余等问题。
如图1所示,所述方法包括如下:
步骤S100、获取模式信号和输入数据,根据所述模式信号确定数据输入位置,并将所述输入数据从所述数据输入位置输入乘法器中。
由于本实施例采用统一的乘法器进行混合精度神经网络的点乘运算,而乘法器的输入位置的比特位数是固定的,因此有可能出现输入数据的精度与乘法器的最高比特位数不相符的情况。为了使所述乘法器适用于不同精度的输入数据,本实施例需要获取模式信号和输入数据,根据所述模式信号确定数据输入位置,然后将所述输入数据从所述数据输入位置输入乘法器中。本实施例通过将不同精度的输入数据从不同的数据输入位置输入所述乘法器中,进而实现采用统一的乘法器进行混合精度神经网络的点乘运算。
在一种实现方式中,所述步骤S100具体包括如下步骤:
步骤S110、获取模式信号和输入数据,根据所述输入数据的精度确定调用的乘法器的数量;
步骤S120、当所述输入数据的最高精度高于所述乘法器的最高比特位时,调用的乘法器的数量大于1;
步骤S130、根据所述模式信号确定数据输入位置,将所述输入数据中最高精度的数据进行拆分,将拆分完毕后得到的输入数据从所述数据输入位置输入乘法器中;
步骤S140、当所述输入数据的最高精度低于或者等于所述乘法器的最高比特位时,调用的乘法器的数量为1;
步骤S150、根据所述模式信号确定数据输入位置,将所述输入数据从所述数据输入位置输入乘法器中。
由于本实施例采用统一的乘法器,而乘法器的最高比特位数固定,因此可能出现乘法器的精度与输入数据的精度不相符的情况,例如乘法器为8bit×8bit乘法器,而输入数据的精度为3bit×3bit,或者乘法器为8bit×8bit乘法器,而输入数据的精度为8bit×16bit。因此需要根据所述输入数据的精度确定调用的乘法器的数量。可以理解的是如果所述输入数据的精度超过了所述乘法器的精度,则无法通过一个乘法器对所述输入数据进行乘法运算,此时就需要调用多个乘法器。
具体地,当所述输入数据的最高精度高于所述乘法器的最高比特位时,调用的乘法器的数量大于1,然后根据所述模式信号确定数据输入位置,将所述输入数据中最高精度的数据进行拆分,将拆分完毕后得到的输入数据从所述数据输入位置输入乘法器中。举例说明,假设输入数据为混合精度8bit×16bit,而乘法器采用的是8bit×8bit乘法器,则此时需要调用2个8bit×8bit乘法器才能实现混合精度8bit×16bit的输入数据的乘法运算,其中8bit的那部分数据可以直接从指定的数据输入位置输入到乘法器中,而16bit的那一部分输入数据需要进行拆分以后才能分别输入到2个乘法器中(如图12所示)。
当所述输入数据的最高精度低于或者等于所述乘法器的最高比特位时,调用的乘法器的数量为1,根据所述模式信号确定数据输入位置,将所述输入数据从所述数据输入位置输入乘法器中。举例说明,当输入数据的精度为3bit×3bit,而乘法器采用的是8bit×8bit乘法器,则此时只需要调用1个8bit×8bit乘法器就能实现该输入数据的乘法运算,由于输入数据的最高精度并未超过乘法器的最高比特位,因此可以直接将该输入数据从指定的数据输入位置输入乘法器中进行运算(如图7所示)。
之后需要获取乘法器的输出结果,如图1所示,所述方法还包括如下步骤:
步骤S200、获取模式信号,根据所述模式信号对所述乘法器生成的部分积进行处理,并执行求和操作,将所述求和操作后得到的数据作为目标和。
具体地,由于本实施例采用的是统一的乘法器对不同精度的输入数据进行计算,因此乘法器的最高比特位数与输入数据的精度有可能出现不相等的情况,为了使乘法器的输出结果与所述输入数据相符,本实施例中引入了模式信号的概念,通过所述模式信号对所述乘法器生成的部分积进行处理,从而只留下所述输入数据对应的部分积生成部分。简言之,所述模式信号相当于一种控制指令,控制系统对所述乘法器生成的不同区域的部分积进行不同的处理。
在一种实现方式中,所述模式信号由输入数据的精度确定,所述处理至少包括以下2种操作中的一种:1.对所述乘法器生成的预设区域的部分积进行屏蔽处理。举例说明,假设所述乘法器为8bit×8bit乘法器,在所述8bit×8bit乘法器的基础上,通过模式信号对所述8bit×8bit乘法器生成的部分积进行门控选择,在特定的模式信号下不需要的部分积将被进行屏蔽处理,在一种实现方式中,所述屏蔽处理可以通过对不需要的部分积生成部分的输出结果进行置0或者置1实现(补码高位补位)。图4是4组2bit×2bit的输入数据的乘累加运算,相同深度的方块代表相同组的乘数输入数据,或者被乘数输入数据或者所述输入数据对应的部分积生成部分,对于这4组输入数据而言,会产生特定的模式信号,将这4组输入数据对应的部分积之外的其他部分积进行屏蔽处理。
2.当调用的乘法器的数量大于1时,对进行低位运算的乘法器输出的部分积生成部分进行移位处理。举例说明,当采用的乘法器为8bit×8bit乘法器,输入数据的精度为8bit×16bit时,由于输入数据的最大精度大于乘法器的最高比特位数,因此无法采用一个乘法器完成所述输入数据的乘法运算,必须调用2个乘法器,根据输入数据的精度会生成特定的模式信号,通过所述模式信号会对进行低位运算的乘法器输出的部分积生成部分进行移位处理(如图12所示)
处理完毕以后,需要将处理后得到的部分积生成部分拆分为第一部分积生成部分和第二部分积生成部分。然后对所述第一部分积生成部分和所述第二部分积生成部分执行求和操作,将所述求和操作后得到的数据作为目标和。具体地,本实施例中对所述第一部分积生成部分和所述第二部分积生成部分执行求和操作主要分为以下三种情况:
当所述输入数据为相同精度,且所述输入数据的最高比特位小于或者等于所述乘法器的最高比特位时,可以通过将所述第一部分积生成部分和所述第二部分积生成部分分别输入第一压缩器和第二压缩器中,然后将所述第一压缩器和所述第二压缩器的输出结果输入同一个加法器中,并将所述加法器的输出结果作为目标和。具体地,在实际应用中浮点乘法运算的快慢在很大程度上由尾数处理的速度决定,然而尾数处理过程中要产生大量的部分积,在对这些部分积进行累加的过程中,如果直接累加势必会大大延长尾数处理的时间,所以采用先对部分积进行压缩的方式,使部分积由n个最终压缩为2个,然后压缩后得到的2个部分积进行累加,累加后得到的结果即为本实施例需要的目标和。需要说明的是,本实施例中的压缩器实际属于一种特别的加法器。
举例说明,假设本实施例采用的乘法器为8bit×8bit乘法器,如图2和图3所示,常规8bit×8bit乘法器的实现方式,一共会产生8组逐步移位的部分积,8组部分积PP0-PP7拆分为两部分,并分别会经过第一级的两个42压缩器(CSA42),这两个42压缩器的输出结果会共同输入至第二级的一个42压缩器(CSA42),然后再将第二级的这个42压缩器(CSA42)的输出结果输入一级进位传递加法器(CPA)中求得最终的和,即目标和。如图5所示,假设第一级的两个压缩器分别为a、b,第二级的压缩器为c,假设输入数据为2个4bit×4bit的浮点数,则图5中的8个部分积生成部分将会被拆分为两部分,从上至下前4个部分积生成部分为一部分,即第一部分积生成部分;后4个部分积生成部分为一部分,即第二部分积生成部分,然后将所述第一部分积生成部分和所述第二部分积生成部分分别输入第一级压缩器a和第一级压缩器b中,将所述第一级压缩器a和所述第一级压缩器b的输出结果共同输入至第二级压缩器c中,再将所述第二级压缩器c的输出结果输入加法器中,最后将所述加法器的输出结果作为目标和。图6展示的是输入数据为1bit×1bit时,乘法器中的部分积生成部分的分布情况;图7展示的是输入数据为3bit×3bit时,乘法器中的部分积生成部分的分布情况;图8展示的是输入数据为5bit×5bit时,乘法器中的部分积生成部分的分布情况;图9展示的是输入数据为6bit×6bit时,乘法器中的部分积生成部分的分布情况;图10展示的是输入数据为7bit×7bit时,乘法器中的部分积生成部分的分布情况。这些图对应的实施例均符合输入数据的精度相同的条件,因此其中的部分积生成部分的拆分、压缩、求和的步骤与图5所示的实施例类似。
当所述输入数据为混合精度时,本实施例采取另外的方法来获取所述输入数据对应的目标和。首先需要获取所述输入数据中最高比特位数,并将所述最高比特位数与所述乘法器的最高比特位数进行比较,当所述最高比特位数等于所述乘法器的最高比特位数时,代表输入数据的最高精度并未超过乘法器的最高比特位,此时只需要调用一个乘法器进行乘法运算。则获取到第一部分积生成部分和第二部分积生成部分以后,将所述第一部分积生成部分和所述第二部分积生成部分分别输入第一级压缩器a和第一级压缩器b中,然后将所述第一级压缩器a和所述第一级压缩器b的输出结果分别输入第一加法器和第二加法器中,最后将所述第一加法器和所述第二加法器的输出结果之和作为目标和。简言之,本实施例对于混合精度的输入数据,采取对压缩后的部分积生成部分进行单独求和的操作,即将压缩后得到的两个部分积生成部分分别输入至不同的加法器中进行求和。
举例说明,如图11所示,假设本实施例采取常规8bit×8bit乘法器来实现2个4bit×8bit的混合精度的输入数据,此时产生的8个部分积生成部分,从上至下可以分为两个部分,前4个部分积生成部分为第一部分积生成部分,这4个部分积生成部分进行单独求和,即所述第一部分积生成部分输入一个压缩器中进行压缩以后,单独输入一个加法器中进行求和;后4个部分积生成部分为第二部分积生成部分,这4个部分积生成部分进行单独求和,即所述第二部分积生成部分输入另一个压缩器中进行压缩以后,单独输入另一个加法器中进行求和,然后再对2个加法器的输出结果进行求和。
然而混合精度的输入数据还可能出现输入数据的最高比特位数大于所述乘法器的最高比特位数的情况,可以理解的是当出现这种情况的时候,则无法仅依靠一个乘法器对该输入数据进行乘法运算,必须调用两个乘法器进行运算。如图13所示,获取所述输入数据的最高比特位数,并将所述输入数据的最高比特位数与所述乘法器的最高比特位数进行比较,当所述输入数据的最高比特位数大于所述乘法器的最高比特位数时,本实施例将调用的两个乘法器分为第一乘法器和第二乘法器,其中所述第二乘法器为进行低位运算的乘法器。为了区分两个乘法器生成的部分积生成部分,本实施例将所述第一乘法器生成的部分积生成部分作为第一部分积生成部分,将所述第二乘法器生成的部分积生成部分作为第二部分积生成部分。然后,所述第一部分积生成部分可以直接输入第一加法器中(CPA1),而所述第二部分积生成部分必须经过拆分以后分别输入所述第一加法器和所述第二加法器(CPA2)中。再将所述第一加法器和所述第二加法器的输出结果之和作为目标和。简言之,针对混合精度,且最高比特位数大于所述乘法器的最高比特位数的输入数据来说,为了避免造成过多的时序延迟,因此数据不需要经过压缩器压缩可以直接输入加法器中进行计算。且由于这种情况下需要调用2个乘法器,在系统累加实现层面上,需要通过对执行低位运算的乘法器产生的部分积生成部分整体进行右移才能实现后续正确的求和运算,因此在常规采用的一个加法器的基础上,还需要额外再调用另外一个加法器对右移以后超出的额外部分进行求和运算。举例说明,图12展示的是基于两组8bit×8bit乘法器架构实现8bit×16bit的输入数据的乘法运算,图14展示的是基于两组8bit×8bit乘法器架构实现8bit×xbit的输入数据的乘法运算,x=9~15bit,其中图15展示的是基于两组8bit×8bit乘法器架构实现8bit×15bit的输入数据的乘法运算,上述情况都属于输入数据的最高比特位大于乘法器的最高比特位的情况,因此都需要采取上述方法实现对部分积生成部分的求和运算。
获取到目标和以后,为了获取需要的点乘运算结果,如图1所示,所述方法还包括如下步骤:
步骤S300、对所述目标和进行截选,将截选后得到的数据作为所述输入数据的点乘运算结果。
具体地,本实施例获取到目标和以后还需要对求得的和进行不同位宽的截选才可以最终得到与所述模式信号以及输入数据相符的点乘运算结果。
在一种实现方式中,所述步骤S300具体包括如下步骤:
步骤S310、根据所述输入数据的精度确定截选位宽;
步骤S320、根据所述截选位宽,将所述目标和从第0位开始进行截选操作,将所述截选操作后得到的数据作为所述输入数据的点乘运算结果。
本实施例中截选位宽与输入数据的精度相关。具体地,相同精度的输入数据,其截选位宽为第0位至第8-n位,其中n为输入数据的精度,例如3bit×3bit的输入数据,其截选位宽为第0位至第5位;不同精度的输入数据,其截选位宽为第0位至第16-x,其中x为输入数据的最高比特位,取值为9-15,例如8bit×12bit的输入数据,其截选位宽为第0位至第4位。确定好截选位宽以后,根据所述截选位宽,将所述目标和从第0位开始进行截选操作,最后将所述截选操作后得到的数据作为所述输入数据的点乘运算结果。
在一种实现方法中,本实施例不仅可以支持不同精度的点乘运算,还可以满足带符号位运算和无符号位运算。因此所述方法还包括如下步骤:
步骤S1、确定所述输入数据的最高位对应的部分积生成部分,将所述部分积生成部分作为待调整部分积生成部分;
步骤S2、当所述输入数据的最高位为负数时,对所述待调整部分积生成部分进行取反加一处理。
具体地,为了满足带符号位的运算,本实施例首先确定与带符号位运算相关的部分积生成部分。在实际应用中,有符号位定点数乘法器的操作是基于补码输入实现的,其中正数的补码是本身,而负数的补码是带符号的二进制(包含符号位)直接按位取反再加一。本实施例将所述输入数据的最高位对应的部分积生成部分作为待调整部分积生成部分,当所述输入数据的最高位为负数时,然对所述待调整部分积生成部分进行取反加一处理,进而实现带符号位的运算。
举例说明,图16中展示了一个8bit×8bit乘法器的部分积生成部分生成示意图,其中前7个部分积生成部分PP0-PP6的生成与无符号位定点数乘法一样,而第8个部分积生成部分(PP7)的生成需要特殊处理:当符号位B7为0时,表示正数,则PP7为0;当符号位B7为1时,表示负数,则PP7为A7A6A5A4A3A2A1A0取反加一操作。同理,在2bit×2bit操作中,需要对PP1、PP3、PP5、PP7进行处理,在4bit×4bit和4bit×8bit的操作中,需要对PP3、PP7进行处理,当符号位为0时取0,当符号位为1时对该部分积生成部分进行取反加一操作。但是需要说明的是,在8bit×16bit的乘法器的操作则需要减少这样的操作,在进行低位运算的第二乘法器中的PP7的生成不需要类似的方法进行,只在第一乘法器中的PP7的生成则需要以类似的方法进行。除此之外,由于是补码计算,在加法操作中需要在数据左侧进行比特位宽度扩展时,增加的数据需要和原有数据的最高位相同,以保证数值大小上的相同。类似地,如图4、5所示,在2bit×2bit和4bit×4bit的操作中,两幅图中左侧没有用到的数据位置在输入到加法树操作时,其输入的数值也需要和实际有效数据的最高位相同,而不是简单的补0操作。
基于上述实施例,本发明还提供一种适用于混合精度神经网络的定点乘加运算单元,如图17所示,所述运算单元包括:
位置确定模块01,用于获取模式信号和输入数据,根据所述模式信号确定数据输入位置,并将所述输入数据从所述数据输入位置输入乘法器中;
部分积处理模块02,用于根据所述模式信号对所述乘法器生成的部分积进行处理,并执行求和操作,将所述求和操作后得到的数据作为目标和;
结果生成模块03,用于对所述目标和进行截选,将截选后得到的数据作为所述输入数据的点乘运算结果。
具体地,本实施例中采用的是统一的乘法器进行运算,然而乘法器的数量并不是固定不变的,运算单元调用的乘法器的数量可以通过所述输入数据的精度进行适应性的改变。可以理解的是当所述输入数据的最高比特位小于或者等于所述乘法器的最高比特位时,运算单元可以只调用一个乘法器既可以实现对输入数据的运算。而当所述输入数据的最高比特位大于所述乘法器的最高比特位时,则运算单元需要调用不止一个乘法器。举例说明,当运算单元中的乘法器为8bit×8bit的常规乘法器,且获取到3bit×3bit的输入数据,或者4bit×8bit的输入数据时,运算单元可以只调用一个乘法器,然后根据模式信号控制所述乘法器屏蔽指定区域的部分积以后输出部分积生成部分并对输出的部分积生成部分按不同精度对应的方法执行求和操作。当获取到8bit×16bit的输入数据时,运算单元则需要调用两个乘法器,根据模式信号控制两个乘法器屏蔽指定区域的部分积以后输出部分积生成部分,并对输出的部分积生成部分按不同精度对应的方法执行求和操作。
综上所述,本发明公开了一种适用于混合精度神经网络的定点乘加运算单元及方法,通过将不同精度的输入数据精度从不同位置输入乘法器中,根据模式信号控制所述乘法器屏蔽指定区域的部分积以后输出部分积生成部分,并对输出的部分积生成部分按不同精度对应的方法执行求和操作,从而实现混合精度的点乘运算。本发明中采用一种乘法器即可实现混合精度神经网络的点乘运算,解决了现有技术中需要采用多种不同精度的处理单元对混合精度运算进行处理,导致的硬件开销过大,空闲资源冗余等问题。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。