CN115982528A - 基于Booth算法的近似预编码卷积运算方法及*** - Google Patents
基于Booth算法的近似预编码卷积运算方法及*** Download PDFInfo
- Publication number
- CN115982528A CN115982528A CN202211489970.3A CN202211489970A CN115982528A CN 115982528 A CN115982528 A CN 115982528A CN 202211489970 A CN202211489970 A CN 202211489970A CN 115982528 A CN115982528 A CN 115982528A
- Authority
- CN
- China
- Prior art keywords
- partial product
- multiplier
- multiplicand
- result
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
本发明提供了一种基于Booth算法的近似预编码卷积运算方法及***,包括:步骤S1:乘数和被乘数输入乘法器通过近似预编码模块进行部分积分离,将分离后的被乘数相关部分积输入至加法树模块完成压缩,将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;步骤S2:将乘法器结果进行符号位扩展,并将扩展后的乘法器结果输入累加模块进行移位和相加操作,并将移位相加操作结果进行进位补偿。
Description
技术领域
本发明涉及计算机技术领域,具体地,涉及基于Booth算法的近似预编码卷积运算方法及***,更为具体地,面向基于卷积神经网络(CNNs)的乘累加单元设计,基于现场可编程门阵列(FPGA)和专用集成电路(ASIC),提供一种基于Booth算法的近似预编码8比特乘累加单元(MAC),实现多精度、低延时、小面积和低功耗的卷积运算单元电路。
背景技术
卷积神经网络(CNN)已广泛利用于图像识别等领域。然而,不断增加的CNN模型尺寸对内存大小、带宽和计算提出更高的要求。因此,许多研究者使用模型量化来降低卷积神经网络的存储和计算需求。通常,CNN模型中的权重是经过训练和保存的32位单精度浮点格式,在硬件部署时浮点模型转化为定点模型以便于计算。现已有大量实验证明通过使用8比特的精度来表示权重和激活值,并不会为压缩后的模型带来明显的精度退化。
通过对CNN模型进行模型量化,一定程度上缓解了存储密集的问题。然而目前传统的卷积运算阵列并不能有效地利用模型量化的优势来解决稠密计算的问题,大多数卷积运算阵列的乘累加单元使用固定的高精度乘法器进行运算,但是卷积层量化后的乘累加操作并不需要这么高的精度,硬件资源会有大量的逻辑闲置。除此之外,不同的应用场景对卷积运算单元的精度要求也不一样,固定精度的卷积运算单元缺乏灵活性。
因此,研究者开始探索如何设计以8比特作为最高精度的可调精度运算单元。传统的方案是将高精度乘法器分解成几个低精度乘法器,卷积运算单元可以被配置为不同的计算精度。由于将一次高精度乘法拆解为了数个低精度乘法操作,该方案相较于固定精度运算单元,吞吐率与能效比得到了有效提升。
然而可调精度的运算单元的设计同样存着巨大的挑战。一方面,随着性能的提升,使用低精度乘法单元进行拼接的方案需要复杂的可配置逻辑,增大了面积的同时降低了时序余量。另一方面,随着精度的降低,激活值和权重对带宽的需求变高,配置数据通路的逻辑资源变得进一步复杂。如何满足多精度乘累加运算需求,减小卷积运算单元的逻辑复杂度的同时有效利用带宽资源成为关键课题。
常规卷积运算单元中的乘法器电路使用比特拼接的方式完成多精度运算,增加了加法树电路复杂度的同时,可配置逻辑成为卷积运算单元的主要面积消耗和关键路径。如何优化Booth编码逻辑、加法树和可配置逻辑的逻辑复杂度,改善乘累加电路的时序成为主要问题。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于Booth算法的近似预编码卷积运算方法及***。
根据本发明提供的一种基于Booth算法的近似预编码卷积运算方法,包括:
步骤S1:乘数和被乘数输入乘法器通过近似预编码模块进行部分积分离,将分离后的被乘数相关部分积输入至加法树模块完成压缩,将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;
步骤S2:将乘法器结果进行符号位扩展,并将扩展后的乘法器结果输入累加模块进行移位和相加操作,将移位相加操作结果进行进位补偿。
优选地,所述步骤S1采用:
步骤S1.1:被乘数的权重通过基-4Booth乘法器进行编码操作;
步骤S1.2:乘数与编码操作后的被乘数进行解码生成部分积;
步骤S1.3:将生成的部分积通过近似预编码模块分离为被乘数相关部分积和乘数相关部分积;
步骤S1.4:被乘数相关部分积通过加法树模块进行压缩,得到压缩后的被乘数相关部分积;将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果。
优选地,所述步骤S1.2采用:
编码操作后的被乘数与乘数基于近似计算模式进行解码生成部分积或编码操作后的被乘数与乘数基于精确计算模式进行解码生成部分积;
所述近似计算模式是硬件电路通过移位的方式生成部分积;
所述精确计算模式是硬件电路通过相加的方式生成部分积。
优选地,所述近似预编码模块采用:
步骤S1.3.1:将生成的部分积使用符号位进行扩展;
步骤S1.3.2:将符号位扩展后的部分积分离为被乘数相关部分积和乘数相关部分积;其中,所述乘数相关部分积是由权重确定的无符号数;所述被乘数相关部分积是随激活值变化的部分积。
优选地,所述加法树模块采用:
提取被乘数的每一行部分积的有效位,当有效位为2比特时,则直接输出乘法器结果;当有效位不为2比特,判断当前部分积的生成方式;
当当前部分积的生成方式是近似计算模式时,则将被乘数部分积按照预设要求划分为右上、右下、左上、左下四个部分,将四个部分的部分积两两相加,生成第一层结果;第一层结果包括相加之后的部分积和进位;将相加之后的部分积和进位通过加法链相加得到乘法器结果;
当当前部分积的生成方式是精确计算模式时,则将部分积的第一行和第二行相或操作,得到相或操作后的结果,再将相或操作后的结果与剩余部分积进行相加操作,生成第一层结果;第一层结果包括相加之后的部分积和进位,将相加之后的部分积和进位相加得到乘法器结果。
优选地,所述步骤S2采用:一个w位的有符号数,一个a位的有符号数;N个乘积累加后,若要将其表示为一个q位的有符号数,则q累加数据位宽满足如下:
累加模块在完成N次乘累加操作后再进行计算结果的提取。
根据本发明提供的一种基于Booth算法的近似预编码卷积运算***,包括:
模块M1:乘数和被乘数输入乘法器通过近似预编码模块进行部分积分离,将分离后的被乘数相关部分积输入至加法树模块完成压缩,将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;
模块M2:将乘法器结果进行符号位扩展,并将扩展后的乘法器结果输入累加模块进行移位和相加操作,将移位相加操作结果进行进位补偿。
优选地,所述模块M1采用:
模块M1.1:被乘数的权重通过基-4Booth乘法器进行编码操作;
模块M1.2:乘数与编码操作后的被乘数进行解码生成部分积;
模块M1.3:将生成的部分积通过近似预编码模块分离为被乘数相关部分积和乘数相关部分积;
模块M1.4:被乘数相关部分积通过加法树模块进行压缩,得到压缩后的被乘数相关部分积;将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;
所述模块M1.2采用:
编码操作后的被乘数与乘数基于近似计算模式进行解码生成部分积或编码操作后的被乘数与乘数基于精确计算模式进行解码生成部分积;
所述近似计算模式是硬件电路通过移位的方式生成部分积;
所述精确计算模式是硬件电路通过相加的方式生成部分积;
所述近似预编码模块采用:
模块M1.3.1:将生成的部分积使用符号位进行扩展;
模块M1.3.2:将符号位扩展后的部分积分离为被乘数相关部分积和乘数相关部分积;其中,所述乘数相关部分积是由权重确定的无符号数;所述被乘数相关部分积是随激活值变化的部分积。
优选地,所述加法树模块采用:
提取被乘数的每一行部分积的有效位,当有效位为2比特时,则直接输出乘法器结果;当有效位不为2比特,判断当前部分积的生成方式;
当当前部分积的生成方式是近似计算模式时,则将被乘数部分积按照预设要求划分为右上、右下、左上、左下四个部分,将四个部分的部分积两两相加,生成第一层结果;第一层结果包括相加之后的部分积和进位;将相加之后的部分积和进位通过加法链相加得到乘法器结果;
当当前部分积的生成方式是精确计算模式时,则将部分积的第一行和第二行相或操作,得到相或操作后的结果,再将相或操作后的结果与剩余部分积进行相加操作,生成第一层结果;第一层结果包括相加之后的部分积和进位,将相加之后的部分积和进位相加得到乘法器结果。
优选地,所述模块M2采用:一个w位的有符号数,一个a位的有符号数;N个乘积累加后,若要将其表示为一个q位的有符号数,则q累加数据位宽满足如下:
累加模块在完成N次乘累加操作后再进行计算结果的提取。
与现有技术相比,本发明具有如下的有益效果:乘法器总体结构通过采用Booth算法减少了加法树所需的逻辑资源;乘法器的近似预编码模块不仅移除传统Booth乘法器所需编码逻辑,而且分离了被乘数部分积,这同时减少了乘法器的面积和计算延迟;乘法器的加法树结构适配多种运算场景;卷积运算单元的可配置累加模块复用加法器资源。本发明实现了一种基于卷积神经网络的低功耗、小面积、扩展性强的乘累加单元。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为电路整体结构示意图。
图2为乘法器并行运算示意图。
图3为预编码模块结构示意图。
图4为基-16Booth近似计算结构示意图。
图5为加法树模块电路示意图。
图6为可配置逻辑累加模块示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
实施例1
根据本发明提供的一种基于Booth算法的近似预编码卷积运算方法,包括:
步骤S1:乘数和被乘数输入乘法器通过近似预编码模块进行部分积分离,将分离后的被乘数相关部分积输入至加法树模块完成压缩,将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;
步骤S2:将乘法器结果进行符号位扩展,并将扩展后的乘法器结果输入累加模块进行移位和相加操作,将移位相加操作结果进行进位补偿。
将所述基于Booth算法的近似预编码卷积运算方法运用至图像分类的实际应用中,将基于Booth算法的卷积运算单元(PE)应用于图片分类领域,每层网络的特征图和权重经过缓存进入PE单元的乘数和被乘数端口,控制信号经过CPU进入模式配置单元,PE单元完成编码、分离和累加等操作后,其输出结果送至输出缓存;直至所有网络运算完毕,最终所有PE的单元输出结果进入处理单元完成图像分类。
具体地,所述步骤S1采用:
步骤S1.1:被乘数的权重通过基-4Booth乘法器进行编码操作;
步骤S1.2:乘数与编码操作后的被乘数进行解码生成部分积;
步骤S1.3:将生成的部分积通过近似预编码模块分离为被乘数相关部分积和乘数相关部分积;
步骤S1.4:被乘数相关部分积通过加法树模块进行压缩,得到压缩后的被乘数相关部分积;将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果。
具体地,所述步骤S1.2采用:
编码操作后的被乘数与乘数基于近似计算模式进行解码生成部分积或编码操作后的被乘数与乘数基于精确计算模式进行解码生成部分积;
所述近似计算模式是硬件电路通过移位的方式生成部分积;
所述精确计算模式是硬件电路通过相加的方式生成部分积。
具体地,所述近似预编码模块采用:
步骤S1.3.1:将生成的部分积使用符号位进行扩展;
步骤S1.3.2:将符号位扩展后的部分积分离为被乘数相关部分积和乘数相关部分积;其中,所述乘数相关部分积是由权重确定的无符号数;所述被乘数相关部分积是随激活值变化的部分积。
具体地,所述加法树模块采用:
提取被乘数的每一行部分积的有效位,当有效位为2比特时,则直接输出乘法器结果;当有效位不为2比特,判断当前部分积的生成方式;
当当前部分积的生成方式是近似计算模式时,则将被乘数部分积按照预设要求划分为右上、右下、左上、左下四个部分,将四个部分的部分积两两相加,生成第一层结果;第一层结果包括相加之后的部分积和进位;将相加之后的部分积和进位通过加法链相加得到乘法器结果;
当当前部分积的生成方式是精确计算模式时,则将部分积的第一行和第二行相或操作,得到相或操作后的结果,再将相或操作后的结果与剩余部分积进行相加操作,生成第一层结果;第一层结果包括相加之后的部分积和进位,将相加之后的部分积和进位相加得到乘法器结果。
具体地,所述步骤S2采用:一个w位的有符号数,一个a位的有符号数;N个乘积累加后,若要将其表示为一个q位的有符号数,则q累加数据位宽满足如下:
累加模块在完成N次乘累加操作后再进行计算结果的提取。
根据本发明提供的一种基于Booth算法的近似预编码卷积运算***,包括:
模块M1:乘数和被乘数输入乘法器通过近似预编码模块进行部分积分离,将分离后的被乘数相关部分积输入至加法树模块完成压缩,将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;
模块M2:将乘法器结果进行符号位扩展,并将扩展后的乘法器结果输入累加模块进行移位和相加操作,将移位相加操作结果进行进位补偿。
具体地,所述模块M1采用:
模块M1.1:被乘数的权重通过基-4Booth乘法器进行编码操作;
模块M1.2:乘数与编码操作后的被乘数进行解码生成部分积;
模块M1.3:将生成的部分积通过近似预编码模块分离为被乘数相关部分积和乘数相关部分积;
模块M1.4:被乘数相关部分积通过加法树模块进行压缩,得到压缩后的被乘数相关部分积;将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果。
具体地,所述模块M1.2采用:
编码操作后的被乘数与乘数基于近似计算模式进行解码生成部分积或编码操作后的被乘数与乘数基于精确计算模式进行解码生成部分积;
所述近似计算模式是硬件电路通过移位的方式生成部分积;
所述精确计算模式是硬件电路通过相加的方式生成部分积。
具体地,所述近似预编码模块采用:
模块M1.3.1:将生成的部分积使用符号位进行扩展;
模块M1.3.2:将符号位扩展后的部分积分离为被乘数相关部分积和乘数相关部分积;其中,所述乘数相关部分积是由权重确定的无符号数;所述被乘数相关部分积是随激活值变化的部分积。
具体地,所述加法树模块采用:
提取被乘数的每一行部分积的有效位,当有效位为2比特时,则直接输出乘法器结果;当有效位不为2比特,判断当前部分积的生成方式;
当当前部分积的生成方式是近似计算模式时,则将被乘数部分积按照预设要求划分为右上、右下、左上、左下四个部分,将四个部分的部分积两两相加,生成第一层结果;第一层结果包括相加之后的部分积和进位;将相加之后的部分积和进位通过加法链相加得到乘法器结果;
当当前部分积的生成方式是精确计算模式时,则将部分积的第一行和第二行相或操作,得到相或操作后的结果,再将相或操作后的结果与剩余部分积进行相加操作,生成第一层结果;第一层结果包括相加之后的部分积和进位,将相加之后的部分积和进位相加得到乘法器结果。
具体地,所述模块M2采用:一个w位的有符号数,一个a位的有符号数;N个乘积累加后,若要将其表示为一个q位的有符号数,则q累加数据位宽满足如下:
累加模块在完成N次乘累加操作后再进行计算结果的提取。
实施例2
实施例2是实施例1的优选例
本发明针对多精度神经网络应用,设计了一种基于Booth算法的8比特近似预偏置卷积运算电路,本发明同样可用来设计16比特和32比特的卷积运算单元,可以应用于FPGA和ASIC。该电路主要包括乘法器模块、近似预编码模块、加法树模块、累加电路模块。该卷积运算电路支持4个2比特、2个4比特和1个8比特三种精度乘法运算。通过复用了部分积、加法树和累加单元,拥有较高的资源利用率;通过移除编码逻辑减小电路整体延时和面积,设计通用的加法树和累加模块兼容更多场景的应用,实现多精度,低延时,小面积和低功耗的卷积运算单元电路。
本发明提出的基于Booth算法8比特运算可以针对有无符号运算,并行计算模式分为8比特乘法、2个4比特乘法、4个2比特乘法。本发明在针对2n运算时,可以选择2个2n-1比特乘法、4个2n-2乘法。
本设计方法要求不同模式下累加数据位宽q满足2q-1≥N·2w-1(2a-1)+1。其中,N为不同模式下累加的数目,w为权重位宽,a为激活值位宽。
在完成了Booth算法的编码操作后,将N次预编码模块提取出乘数产生的可预测值提前进行累加。当进行第一次乘累加时,将可预测值的累加值输入至累加模块进行求和。本发明提出的预编码算法可适配任何大小的卷积核,兼容不同并行度的模式计算。
累加结果为N个部分积与N个可预测值的和,为了防止结果溢出,常规计算电路会扩展一位m作为符号位。但在本发明中,将sum1当作无符号数。在预编码模块提取时,把一个有符号数拆分为一个正数和一个有符号数,可能发生如下表所示几种情况。只有当提取后的部分积是正数且结果是负数时,会发生正溢出,此时正正相加所得负数是最终结果。
最终结果 | 提取后的部分积 | 可预测值累加 | 说明 |
正数 | 正数 | 正数 | 两个正数较小,相加无溢出 |
正数 | 负数 | 正数 | 正负相加,一定无溢出 |
负数 | 负数 | 正数 | 正负相加,一定无溢出 |
负数 | 正数 | 正数 | 正正相加,符号位溢出1 |
为了将本发明所使用的电路结构推广至16比特、32比特和64比特乘法器中,本发明使用解码选择生成部分积,针对不同精度乘法运算。解码选择的输入根据不同模式进行选择输入。
本发明使用的加法树结构将部分积分为四个部分,当精度较低时,相加输出所需资源越多,所以考虑对其直接输出。当到两个最高精度时,相加输出所消耗的资源会明显小于直接输出。所以本发明提出了将部分积划分为左上、左下、右上和右下四个部分,在四个部分内,使用直接输出,对最后的4行结果再进行相加输出。
实施例3
实施例3是实施例1的优选例
根据本发明提供的一种基于Booth算法的8比特近似预编码卷积运算单元,该方法适用于多种工艺、多种型号FPGA,电路的整体结构如图1所示。该电路主要包括乘法器模块、近似预编码模块、加法树模块和累加电路模块。电路设计方法主要包括模式配置方法、预编码算法、电路结构规划。
乘法器模块
基-4Booth乘法器由编码模块和解码选择模块组成,乘法器的整体结构如图1中虚框所示。8比特乘数经过编码模块后,每3比特乘数编码生成符号位、乘1和乘2信号,总共生成4组信号,每组信号占3比特,共12比特。4组信号对被乘数依次取反、乘1或者乘2,电路上4组信号通过解码选择逻辑生成部分积。针对不同精度乘法运算,解码选择单元的输入根据不同模式进行选择,不同模式的乘法运算复用解码选择单元。解码逻辑生成的4组部分积移位后两两相加,合成2组部分积;2组部分积移位后,合成16比特输出结果。
本发明提出的乘法器主要应用于多精度乘法运算,其支持的并行度主要为4个2比特运算、2个4比特运算和1个8比特运算,乘数与被乘数相乘拼接示意图如图2所示。
模式为0时,乘法器进行1个8比特运算。4组部分积相加,输出结果填充至16比特信号中;
模式为1时,乘法器进行2个4比特运算。输入2个4比特放置乘法器两个输入的高4位,另外2个输入放置乘法器的低4位。4组部分积两两相加后,2个8比特输出结果填充至16比特信号中;
模式为2时,乘法器进行4个2比特乘法运算。输入2个2比特放置乘法器两个输入的高2位,后面的乘法依次放置到乘法器的次高位、次低位和低2位。4个4比特输出结果不经过加法直接输出至16比特信号。
近似预编码模块
乘法器进行运算中,需要对乘数编码以减小被乘数的部分积行数。考虑乘法器在神经网络的卷积单元应用时,权重是经过训练后确定的“常量”,而激活值是针对不同输入向量会发生改变的“变量”。编码模块可以选择对激活值或者权重进行编码,那么被乘数产生部分积。如果对“常量”即权重进行编码,编码逻辑的结果在整个卷积过程中是可提前运算的。利用这一特性,本发明将8比特乘法器中的四个编码逻辑取出,如图3所示灰色模块,直接输入12比特编码后的结果。
通过将编码逻辑提前运算,本发明移除了片上的编码模块,该方案减小了面积的同时增大了时序裕量。代价是需要更大的内存和带宽存储预编码的权重值。相较于激活值,权重的比特稀疏是较为“不敏感”的,体现到混合精度量化的结果中,权重比特位宽会更小,压缩比会更大,所以由预编码逻辑引起的更高权重存储需求是可接受的。
Booth乘法器在部分和计算中可以通过符号位扩展完成整体运算。高比特乘法运算中面积和功耗因符号位扩展会变差,但对于2比特和4比特运算,符号位扩展所带来的损失不大。本发明使用符号位扩展技术,对部分和符号位取反,在每行前面加1。
本发明除了移除编码逻辑,还对部分积的符号扩展位进行预处理,提前计算编码逻辑在部分积中生成的无符号数。在运算卷积神经网络的卷积块时,3乘3或者5乘5的结果需要累加在一起。由于权重是预先训练的,所以卷积块内累加可以分为两个部分,如图3所示,第一部分是随激活值变化的部分积,第二部分是由权重确定的无符号数。本发明提出预编码逻辑只需要计算第一部分产生的结果,第二部分生成的无符号数在其他设备提前累加后,输入至卷积运算单元的累加模块,有效利用卷积运算单元的累加资源。
下表展示了在不同模式下,可预测值的累加结果,其中s为乘数编码后的符号位。N个可预测值都是无符号数,N个可预测值累加结果为m位无符号数,取值[0,2m-1]。N个部分积累加结果为n位有符号位数,取值为[-2n-1,2n-1-1],且n一定大于m,其原因是n的大小是N个最大的16比特有符号数累加得到的,而可预测值小于最大的16比特有符号数。
模式 | 运算模式 | 可预测值 |
0 | 8比特乘法 | N{0101_0110_0s0s_0s0s} |
1 | 4比特乘法 | N{0110_0s0s_0110_0s0s} |
2 | 2比特乘法 | N{000s_000s_0000_000s} |
本发明所提出的乘法器在原有精确计算的基础上,提出一种可配置的近似计算模式,如图4所示。在常见乘法运算场景比如图像处理和卷积运算,合理的近似计算已被证明对结果影响甚微。本发明使用混合Booth编码的方式,对乘数低4位进行基-16编码,编码后结果如公式1所示,N为整数的二进制表达,n-1默认为0,公式2为基-4编码的公式,公式3为基-16编码公式。然而精确基-16编码逻辑无法利用原有基-4选通逻辑,所以考虑采用近似基-16编码。通过将编码后的结果限制为2的幂次方,如公式4所示,硬件电路可以通过移位的方式进行部分积生成。体现在本发明中,基-16部分积生成电路等效为低两行部分积按位或逻辑输出。
加法树模块
由于乘法器支持近似和精确计算两种模式,所以通过预编码逻辑产生4行部分积后,有两种加法树运算顺序,计算顺序如图5所示。
精确计算顺序如下:
在第一个运算周期中,提取每一行部分积4比特有效位,对应图2中乘数与被乘数相乘结果,该16比特结果为4个2比特乘法输出结果。该结果通过模式选择直接输出,此时消耗16个二选一选通器(mux)。
在第二个运算周期中同时计算右上、右下、左上、左下四个部分,将四个部分的两行部分积两两相加,此时不是将2个8比特直接输出,而是将左上和右下10个部分积与0进行mux。该操作会消耗10个mux,相较于16比特信号直接输出,节约了6个mux。
在第三个运算周期中完成最后2行部分积求和。模式为4比特运算时,第二个运算周期输出结果加0输出;模式为8比特运算时,2行部分积和2个进位通过加法链相加输出。
对于近似乘法模式来说:
第一运算周期结果保持不变,需要消耗16个mux进行4比特结果直接输出。
第二运算周期同时完成第一行和第二行相或操作、3个部分相加操作,相比较精确计算模式,近似计算节约了左上部分相加运算所需加法器资源。最后将2个8比特直接通过16个mux直接输出。
第三运算周期对2行部分积和1个进位相加输出。
综上,近似计算在兼容精确计算结构的同时,时序和面积都要优于精确计算。
加法树结构中2比特乘法结果直接输出,4比特乘法和8比特乘法结果通过部分积累加输出。该选择是基于mux消耗作为考虑的,以64比特乘法支持5种精度为例,消耗mux资源如下表所示,p为模式并行度。
精度 | 直接输出消耗mux资源 | 相加输出消耗mux资源 |
2比特 | 4p | 28p |
4比特 | 8p | 24p |
8比特 | 16p | 16p |
16比特 | 32p | 8p |
32比特 | 64p | 8p |
累加电路模块
为了防止卷积神经网络累加结果出现溢出,乘法器的16比特结果需要拆分后放入累加电路,如图1所示。
本发明针对混合精度乘法器提出一种硬件兼容的累加电路,结构如图6所示。16位输出结果首先根据配置信号进行符号位扩展,然后与外部输入的信号进行累加。以4个4比特和1个16比特输出结果为例:
4个4比特输出结果分别填充psum_out[47:36]、psum_out[35:24]、psum_out[23:12]、psum_out[11:0],进入4个12比特加法器,与输入的C[47:36]、C[35:24]、C[23:12]、C[11:0]累加,C为电路的累加值,此时不需要考虑进位;
1个16比特输出结果填充psum_out[47:0],分成4部分后也进入4个12比特加法器,同样与输入的4部分累加值进行累加。配置单元会控制上一结果进位与当前结果相加输出。
配置单元通过控制进位来完成不同模式下的累加计算,复用了4个12比特的加法器资源。
不同模式下累加数据位宽满足以下要求。一个w位的有符号数,一个a位的有符号数。N个这样的乘积累加后,若要将其表示为一个q位的有符号数,则q需满足公式5。
然后累加模块可在完成N次乘累加操作后再进行计算结果的提取。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的***、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的***、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的***、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种基于Booth算法的近似预编码卷积运算方法,其特征在于,包括:
步骤S1:乘数和被乘数输入乘法器通过近似预编码模块进行部分积分离,将分离后的被乘数相关部分积输入至加法树模块完成压缩,将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;
步骤S2:将乘法器结果进行符号位扩展,并将扩展后的乘法器结果输入累加模块进行移位和相加操作,将移位相加操作结果进行进位补偿。
2.根据权利要求1所述的基于Booth算法的近似预编码卷积运算方法,其特征在于,所述步骤S1采用:
步骤S1.1:被乘数的权重通过基-4Booth乘法器进行编码操作;
步骤S1.2:乘数与编码操作后的被乘数进行解码生成部分积;
步骤S1.3:将生成的部分积通过近似预编码模块分离为被乘数相关部分积和乘数相关部分积;
步骤S1.4:被乘数相关部分积通过加法树模块进行压缩,得到压缩后的被乘数相关部分积;将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果。
3.根据权利要求1所述的基于Booth算法的近似预编码卷积运算方法,其特征在于,所述步骤S1.2采用:
编码操作后的被乘数与乘数基于近似计算模式进行解码生成部分积或编码操作后的被乘数与乘数基于精确计算模式进行解码生成部分积;
所述近似计算模式是硬件电路通过移位的方式生成部分积;
所述精确计算模式是硬件电路通过相加的方式生成部分积。
4.根据权利要求1所述的基于Booth算法的近似预编码卷积运算方法,其特征在于,所述近似预编码模块采用:
步骤S1.3.1:将生成的部分积使用符号位进行扩展;
步骤S1.3.2:将符号位扩展后的部分积分离为被乘数相关部分积和乘数相关部分积;其中,所述乘数相关部分积是由权重确定的无符号数;所述被乘数相关部分积是随激活值变化的部分积。
5.根据权利要求1所述的基于Booth算法的近似预编码卷积运算方法,其特征在于,所述加法树模块采用:
提取被乘数的每一行部分积的有效位,当有效位为2比特时,则直接输出乘法器结果;当有效位不为2比特,判断当前部分积的生成方式;
当当前部分积的生成方式是近似计算模式时,则将被乘数部分积按照预设要求划分为右上、右下、左上、左下四个部分,将四个部分的部分积两两相加,生成第一层结果;第一层结果包括相加之后的部分积和进位;将相加之后的部分积和进位通过加法链相加得到乘法器结果;
当当前部分积的生成方式是精确计算模式时,则将部分积的第一行和第二行相或操作,得到相或操作后的结果,再将相或操作后的结果与剩余部分积进行相加操作,生成第一层结果;第一层结果包括相加之后的部分积和进位,将相加之后的部分积和进位相加得到乘法器结果。
7.一种基于Booth算法的近似预编码卷积运算***,其特征在于,包括:
模块M1:乘数和被乘数输入乘法器通过近似预编码模块进行部分积分离,将分离后的被乘数相关部分积输入至加法树模块完成压缩,将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;
模块M2:将乘法器结果进行符号位扩展,并将扩展后的乘法器结果输入累加模块进行移位和相加操作,将移位相加操作结果进行进位补偿。
8.根据权利要求7所述的基于Booth算法的近似预编码卷积运算***,其特征在于,所述模块M1采用:
模块M1.1:被乘数的权重通过基-4Booth乘法器进行编码操作;
模块M1.2:乘数与编码操作后的被乘数进行解码生成部分积;
模块M1.3:将生成的部分积通过近似预编码模块分离为被乘数相关部分积和乘数相关部分积;
模块M1.4:被乘数相关部分积通过加法树模块进行压缩,得到压缩后的被乘数相关部分积;将压缩后的被乘数相关部分积和乘数相关部分积相加得到乘法器结果;
所述模块M1.2采用:
编码操作后的被乘数与乘数基于近似计算模式进行解码生成部分积或编码操作后的被乘数与乘数基于精确计算模式进行解码生成部分积;
所述近似计算模式是硬件电路通过移位的方式生成部分积;
所述精确计算模式是硬件电路通过相加的方式生成部分积;
所述近似预编码模块采用:
模块M1.3.1:将生成的部分积使用符号位进行扩展;
模块M1.3.2:将符号位扩展后的部分积分离为被乘数相关部分积和乘数相关部分积;其中,所述乘数相关部分积是由权重确定的无符号数;所述被乘数相关部分积是随激活值变化的部分积。
9.根据权利要求7所述的基于Booth算法的近似预编码卷积运算***,其特征在于,所述加法树模块采用:
提取被乘数的每一行部分积的有效位,当有效位为2比特时,则直接输出乘法器结果;当有效位不为2比特,判断当前部分积的生成方式;
当当前部分积的生成方式是近似计算模式时,则将被乘数部分积按照预设要求划分为右上、右下、左上、左下四个部分,将四个部分的部分积两两相加,生成第一层结果;第一层结果包括相加之后的部分积和进位;将相加之后的部分积和进位通过加法链相加得到乘法器结果;
当当前部分积的生成方式是精确计算模式时,则将部分积的第一行和第二行相或操作,得到相或操作后的结果,再将相或操作后的结果与剩余部分积进行相加操作,生成第一层结果;第一层结果包括相加之后的部分积和进位,将相加之后的部分积和进位相加得到乘法器结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211489970.3A CN115982528A (zh) | 2022-11-25 | 2022-11-25 | 基于Booth算法的近似预编码卷积运算方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211489970.3A CN115982528A (zh) | 2022-11-25 | 2022-11-25 | 基于Booth算法的近似预编码卷积运算方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115982528A true CN115982528A (zh) | 2023-04-18 |
Family
ID=85971171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211489970.3A Pending CN115982528A (zh) | 2022-11-25 | 2022-11-25 | 基于Booth算法的近似预编码卷积运算方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115982528A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116991359A (zh) * | 2023-09-26 | 2023-11-03 | 上海为旌科技有限公司 | Booth乘法器、混合Booth乘法器及运算方法 |
CN117170623A (zh) * | 2023-11-03 | 2023-12-05 | 南京美辰微电子有限公司 | 面向神经网络计算的多位宽重构近似张量乘加方法与*** |
CN117850736A (zh) * | 2024-03-06 | 2024-04-09 | 北京壁仞科技开发有限公司 | 乘法电路模块与乘法运算方法 |
-
2022
- 2022-11-25 CN CN202211489970.3A patent/CN115982528A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116991359A (zh) * | 2023-09-26 | 2023-11-03 | 上海为旌科技有限公司 | Booth乘法器、混合Booth乘法器及运算方法 |
CN116991359B (zh) * | 2023-09-26 | 2023-12-22 | 上海为旌科技有限公司 | Booth乘法器、混合Booth乘法器及运算方法 |
CN117170623A (zh) * | 2023-11-03 | 2023-12-05 | 南京美辰微电子有限公司 | 面向神经网络计算的多位宽重构近似张量乘加方法与*** |
CN117170623B (zh) * | 2023-11-03 | 2024-01-30 | 南京美辰微电子有限公司 | 面向神经网络计算的多位宽重构近似张量乘加方法与*** |
CN117850736A (zh) * | 2024-03-06 | 2024-04-09 | 北京壁仞科技开发有限公司 | 乘法电路模块与乘法运算方法 |
CN117850736B (zh) * | 2024-03-06 | 2024-05-31 | 北京壁仞科技开发有限公司 | 乘法电路模块与乘法运算方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115982528A (zh) | 基于Booth算法的近似预编码卷积运算方法及*** | |
CN111062472B (zh) | 一种基于结构化剪枝的稀疏神经网络加速器及其加速方法 | |
US20180046897A1 (en) | Hardware accelerator for compressed rnn on fpga | |
CN111832719A (zh) | 一种定点量化的卷积神经网络加速器计算电路 | |
US10810484B2 (en) | Hardware accelerator for compressed GRU on FPGA | |
CN107704916B (zh) | 一种基于fpga实现rnn神经网络的硬件加速器及方法 | |
CN106909970B (zh) | 一种基于近似计算的二值权重卷积神经网络硬件加速器计算装置 | |
CN110288086B (zh) | 一种基于Winograd的可配置卷积阵列加速器结构 | |
CN110852416B (zh) | 基于低精度浮点数数据表现形式的cnn硬件加速计算方法及*** | |
WO2021051463A1 (en) | Residual quantization of bit-shift weights in artificial neural network | |
CN105183425B (zh) | 一种具有高精度低复杂度特性的固定位宽乘法器 | |
CN110543936B (zh) | 一种cnn全连接层运算的多并行加速方法 | |
Kala et al. | UniWiG: Unified winograd-GEMM architecture for accelerating CNN on FPGAs | |
CN114647399B (zh) | 一种低能耗高精度近似并行定宽乘法累加装置 | |
US10853037B1 (en) | Digital circuit with compressed carry | |
CN115407965B (zh) | 一种基于泰勒展开的高性能近似除法器及误差补偿方法 | |
CN113283587A (zh) | 一种Winograd卷积运算加速方法及加速模块 | |
CN117170623B (zh) | 面向神经网络计算的多位宽重构近似张量乘加方法与*** | |
Thomas | Design and simulation of radix-8 booth encoder multiplier for signed and unsigned numbers | |
CN113902109A (zh) | 一种神经网络规则化位串行计算的压缩方法及装置 | |
CN116205244B (zh) | 一种数字信号处理结构 | |
CN111492369A (zh) | 人工神经网络中移位权重的残差量化 | |
CN110825346A (zh) | 一种低逻辑复杂度的无符号近似乘法器 | |
CN111258544A (zh) | 乘法器、数据处理方法、芯片及电子设备 | |
CN113283591B (zh) | 基于Winograd算法和近似乘法器的高效卷积实现方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |