CN109901814A - 自定义浮点数及其计算方法和硬件结构 - Google Patents

自定义浮点数及其计算方法和硬件结构 Download PDF

Info

Publication number
CN109901814A
CN109901814A CN201910114677.0A CN201910114677A CN109901814A CN 109901814 A CN109901814 A CN 109901814A CN 201910114677 A CN201910114677 A CN 201910114677A CN 109901814 A CN109901814 A CN 109901814A
Authority
CN
China
Prior art keywords
bit
customized
floating
index
indicate
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
Application number
CN201910114677.0A
Other languages
English (en)
Inventor
张煜祺
刘功申
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Jiaotong University
Original Assignee
Shanghai Jiaotong University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN201910114677.0A priority Critical patent/CN109901814A/zh
Publication of CN109901814A publication Critical patent/CN109901814A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明提供了一种具有共享指数的自定义浮点数,把基于32‑bit浮点数的神经网络模型压缩到8‑bit,大幅度压缩了模型的大小的同时降低运算操作复杂度。在自定义的浮点数运算中,采用的是整数乘法和加法运算。与32‑bit浮点数乘法相比,自定义浮点数的乘法运算节省了17倍的能量消耗,30倍芯片面积;加法运算节省28倍能量消耗,116倍芯片面积。在全连接层的网络参数中,传输到片外存储器的数据所需的内存带宽减少了4倍。自定义浮点数有助于在片上缓冲器中保持4倍以上的参数。在硬件实现中,结合8‑bit的自定义浮点数与乘法器封装结构,实现在运算单元CU上运算增快整个神经网络的运行速度和吞吐量。

Description

自定义浮点数及其计算方法和硬件结构
技术领域
本发明涉及卷积神经网络技术领域,具体地,涉及一种自定义浮点数及其计算方法和硬件结构,尤其是设计涉及一种基于自定义浮点和共享指数的,在FPGA卷积神经网络的乘法器封装结构。
背景技术
在最近对卷积神经网络(CNN)的研究中,为了最大限度地提高准确性,大多数模型都不太关注它们的复杂性。例如,现代深度CNN模型中,如AlexNet、GoogleNet、ResNet均需要数百万个参数和数十亿的算术运算,其所需要的极高的计算复杂度和大量的资源消耗阻碍其嵌入式设备的实现。
降低数据的表示精度是加速训练和减少内存带宽的常用方法。在内存需求方面,缩短位宽可以使更少的位数被用于读取或存储相同数量的值。在硬件平台上,降低精度也可同时减少运算时间,提高吞吐量。32-bit单精度浮点数是CNN模型中的常用数据类型。32-bit单精度浮点数表示和其对应的实际值如图1所示,尤其应用在FPGA的浮点乘法器上,具有高精度而高功耗、面积大的特点。许多研究者探索了CNN训练中权重或激活使用较短位宽的定点表示。例如,使用16-bit动态定点表示,提出一种称为Ristretto的定点量化方法。然而,他们没有考虑相应表示方法和硬件加速器的合作。动态定点数如图2所示,其小数点的位置可实时更新。动态定点数可以简化计算,但由于小数点位置的范围限制,通常只适用于CNNs的推理过程,而不能适应在大规模CNNs的训练中。在浮点数的最新研究方面,使用迷你浮点表示方法(9-bit),但是结果上仅给出了基于Cifar-10的top 5精确度。
在硬件加速的实践中,GPU被广泛应用于训练和分类任务,然而GPU的功耗(100W)对于定制的数据表示方法来说太高。相反,基于FPGA的CNN加速器更适合于高可重构性、低功耗和高能量效率的应用。此外,对于新的数据表示计算,FPGA仍然有很大的发展空间。
与本申请相关的现有技术是专利文献CN108763159,公开了一种基于FPGA的LSTM前向运算加速器,采用软硬件协同模式工作。硬件部分包含了三种加速器设计:单DMA模式LSTM神经网络前向算法加速器,双DMA模式LSTM神经网络前向算法加速器以及稀疏LSTM网络前向算法加速器。所述加速器用于长短期记忆(LSTM:Long short-term memory)网络前向计算部分的加速,其中包含了矩阵-向量乘法模块、Element-wise运算模块以及激活函数模块。其中单DMA模式加速器在性能、能效比方面均有良好的运算效果;而双DMA模式加速器和稀疏网络加速器在能效比方面效果较好,并且更加节省FPGA的片上存储资源。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种自定义浮点数及其计算方法和硬件结构。
根据本发明提供的一种自定义浮点数,由整数部分和共享指数组成,整数部分由1位符号位和Z-1位尾数位组成,Z表示整数部分的位数,共享指数是8位,共享指数的位宽和单精度浮点数相同。
优选地,当将原始数据从单精度浮点格式量化为自定义浮点数时,使用共享指数,所述共享指数来自原始数据的绝对最大值,如下式表示:
Es=Emax-(Z-2)
其中,F表示原始数据的单精度浮点数据集,f表示原始数据的单精度浮点数据集中的一个单精度浮点数据,E表示指数,Emax表示原始数据的单精度浮点数据集F中的绝对最大值的指数;Z表示整数部分I的位数,共享指数ES的值由Emax和Z计算得到。
根据本发明提供的一种利用所述的自定义浮点数的计算方法,采用整数的乘法运算来代替原有的32位浮点数乘法运算,其中,乘法运算是将两个n-bit自定义浮动点值相乘,以产生具有2(n-1)bits尾数、1bit符号和更新共享指数,如下式表示:
MC=MA×MB
ES,C=ES,A+ES,B
其中,SA、SB、SC分别表示数据A、B、C的符号位,MA、MB、MC为数据A、B、C尾数位,ES,A、ES,B、ES,C表示A、B、C对应的共享指数。
优选地,采用整数加法运算来代替原有的32位浮点数加法运算,其中,加法运算如下式表示:
ES,C=ES,A=ES,B
iC=iA+iB
其中,ES,A、ES,B、ES,C分别表示A、B、C对应的共享指数;iA、iB、iC分别表示A、B、C对应的整数部分。
优选地,在卷积神经网络中的量化中,每个层的输出使用一个R和ES,如下式表示:
iC=i>>R,ES,C=ES+R
其中,R表示整数部分I右移的位数;Acc表示累加器的位宽,LZC()是返回前导零位计数的函数;i表示原数据集的整数部分;iC表示量化后的标准自定义浮点数的整数部分;I表示整数部分;Z表示整数部分I的位数;ES,C表示C对应的共享指数;ES表示共享指数。
根据本发明提供的一种实现所述的自定义浮点数的硬件结构,在一个DSP片上封装两个尾数部分的乘法运算。
优选地,在DSP片上通过预加法器进行累加移位。
与现有技术相比,本发明具有如下的有益效果:
1、本发明引入了具有共享指数的自定义浮点表示方法,来代替常用的单精度浮点数,提高运算精度,以特定的数据格式,在CNN训练和推理中可以使用整数的计算操作操作,以简化计算;
2、本发明提供了一种乘法器封装结构,在FPGA中将两个乘法器封装在单个DSPslice上,可以有效提高资源效率和计算密度;
3、本发明的高效计算单元将扩大整个神经网络的并行性,进一步实现吞吐量和计算密度的大幅度提升。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为单精度浮点表示法示意图;
图2为定点表示实例示意图,图中箭头表示小数点位置,对应的数据是相应的整数值乘以2-4和2-6,其比例因子在动态定点是不同的;
图3为共享指数的8-bit自定义浮点;
图4为N-bit自定义浮点数的乘法和累加(MAC);
图5为基于不同宽度的自定义浮点数的网络归一化精度,共享指数为8位;
图6为在单个DSP slice上封装两个乘法器;
图7为乘法器封装结构的数据路径;
图8为计算单元的硬件实现。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
根据本发明提供的一种自定义浮点数,由整数部分和共享指数组成,整数部分由1位符号位和Z-1位尾数位组成,Z表示整数部分的位数,共享指数是8位,共享指数的位宽和单精度浮点数相同。
具体地,当将原始数据从单精度浮点格式量化为自定义浮点数时,使用共享指数,共享指数来自原始数据的绝对最大值,如下式表示:
Es=Emax-(Z-2)
其中,F表示原始数据的单精度浮点数据集,f表示原始数据的单精度浮点数据集中的一个单精度浮点数据,E表示指数,Emax表示原始数据的单精度浮点数据集F中的绝对最大值的指数;Z表示整数部分I的位数,共享指数ES的值由Emax和Z计算得到。
根据本发明提供的一种利用所述的自定义浮点数的计算方法,乘法运算是将两个n-bit自定义浮动点值相乘,以产生具有2(n-1)bits尾数、1bit符号和更新共享指数,如下式表示:
MC=MA×MB
ES,C=ES,A+ES,B
其中,SA、SB、SC分别表示数据A、B、C的符号位,MA、MB、MC为数据A、B、C尾数位,ES,A、ES,B、ES,C表示A、B、C对应的共享指数。
具体地,采用整数加法运算来代替原有的32位浮点数加法运算,其中,加法运算如下式表示:
ES,C=ES,A=ES,B
iC=iA+iB
其中,ES,A、ES,B、ES,C分别表示A、B、C对应的共享指数;iA、iB、iC分别表示A、B、C对应的整数部分。
具体地,在卷积神经网络中的量化中,每个层的输出使用一个R和ES,如下式表示:
iC=i>>R,ES,C=ES+R
其中,R表示整数部分I右移的位数;Acc表示累加器的位宽,LZC()是返回前导零位计数的函数;i表示原数据集的整数部分;iC表示量化后的标准自定义浮点数的整数部分;I表示整数部分;Z表示整数部分I的位数;ES,C表示C对应的共享指数;ES表示共享指数。
根据本发明提供的一种实现所述的自定义浮点数的硬件结构,在一个DSP片上封装两个尾数部分的乘法运算。
具体地,在DSP片上通过预加法器进行累加移位。
根据本发明提供的一种利用所述的自定义浮点数的计算系统,采用乘法运算,其中,乘法运算是将两个n-bit自定义浮动点值相乘,以产生具有2(n-1)bits尾数、1bit符号和更新共享指数,如下式表示:
MC=MA×MB
ES,C=ES,A+ES,B
其中,SA、SB、SC分别表示数据A、B、C的符号位,MA、MB、MC为数据A、B、C尾数位,ES,A、ES,B、ES,C表示A、B、C对应的共享指数。本发明提供的基于自定义浮点和共享指数的CNN乘法器封装结构,具有共享指数的自定义浮点数据表示结构,可以在保持精度的前提下,把基于32-bit浮点数的神经网络模型压缩到8-bit,成功大幅度压缩了模型的大小同时降低运算操作复杂度。在自定义的浮点数运算中,采用的是整数乘法和加法运算。整数运算可以在卷积层中实现芯片面积和能量的显著降低,其中卷积层包含超过90%的所需算术运算。与32-bit浮点数乘法相比,自定义浮点数乘法运算节省了17倍的能量消耗,30倍芯片面积;加法运算节省28倍能量消耗,116倍芯片面积。另一方面在全连接层的网络参数中,传输到片外存储器的数据也将减少,因为使用8位自定义浮点,所需的内存带宽减少了4倍。同时,自定义浮点数有助于在片上缓冲器中保持4倍以上的参数。在硬件实现中,结合8-bit的自定义浮点数与乘法器封装结构,可以实现在运算单元CU上运算的并行以增快整个神经网络的运行速度和吞吐量。
卷积神经网络(CNN)采用单精度浮点表示方法,计算复杂度高,资源消耗大,阻碍了CNN在嵌入式设备中的应用。单精度浮点数具有高精度,但尤其在FPGA的浮点乘法器上有极大的面积和功耗。为了降低计算复杂度,低精度浮点和动态不动点表示的数据表示方法备受关注。动态不动点的小数点位置是可以根据每层运算更新的,实现了算术简化,适用于CNN的推理过程,而由于小数点位置的范围有限,不适合大规模CNN的训练。本发明中引入了具有共享指数的自定义浮点如图3所示,替代32位的单精度浮点数。自定义浮点数的尾数是7位,指数是一些共享的分组变量,如权重,激活,偏差,每层的输出。特别地,共享指数是8位与32位浮点数相同,与保持相同位宽动态不动点数相比,具有更大的数据范围。
本发明提出的数据表示有助于在硬件实现中减少存储器带宽、用于元件处理的芯片面积和能量消耗。在实现步骤方面,第一步压缩数据,首先调整数据的表示方法,在神经网络的训练和推理中,把激活和权重的数据由32位单精度浮点数表示方法替换为8位自定义浮点数,其次把乘法和加法调整到自定义浮点数对应特定的运算方法。在这个过程中,通过不同位宽自定义浮点数在四个最新常用CNN模型中的表现来决定合适的位宽,在实验后,发现8-bit是最适宜的自定义浮点数位宽。第二步,压缩数据后,利用神经网络的微调来改善逐位压缩带来的信息损失。对于AlexNet、SqueezeNet和ResNet这三个经典大规模CNN模型,将激活和权重压缩为8位自定义浮点数后,仍能保持近似的性能,经过微调后,精确损失可以忽略不计(小于0.8%),而GoogleNet具有1.7%的精度损失。另一方面,由于自定义浮点表示的特殊性,在CNN的训练和推理中可以使用整数乘法和累加操作,以极大简化计算。
在硬件实现方面,本发明提出了一种乘法器封装结构,在FPGA中将两个乘法器封装在单个DSP片上时,降低了资源需求。如图6所示,激活A,B和权重C的两次乘法的被一次实现。具体而言,A,B的尾数将被打包为21位的值:在DSP切片上通过预加法器累加移位的A和B。整个乘法器封装体系结构,如图6所示,由于计算主要取决于整数部分,因此必须分别管理尾数和符号位。DSP的输出分为尾数AC,BC两部分,需要将其与对应的符号位相结合,组成乘法输出AC,BC。在Xilinx Kintex-7平台上设计并评估了基于乘法器封装的自定义浮点数计算单元。实验结果表明,与采用32位浮点的原CU相比,本发明提出的方案可以节省75%的DSP片、94.7%的LUT和85.1%的FF。由于神经网络的计算是由一组CU并行构成的,因此所提出的高效CU通过扩大整个神经网络的并行性而导致高吞吐量和计算密度。
以下针对本发明的具体细节和效果进行详细阐述。
本发明提出的自定义浮点格式由整数部分I和共享指数ES组成,即Z-bit自定义浮点数意味着Z-bit的整数部分由1bit符号位和Z-1bits尾数相结合。图3显示了8-bit自定义浮点数,具有8-bit共享指数。共享指数的位宽和单精度浮点数相同。如图2所示,9-bit定点只需要3-bit指数来表示小数点位置。因此,在同一位宽的情况下,自定义浮点数比动态定点具有更大的指数范围,以保证数据精度。具体而言,对于每一层,权重、激活、偏置、输出和相应的梯度都具有其单独的共享指数,并可实时更新。尾数部分,隐式位“1”在此可见。计算主要集中在整数部分,因此,整数运算可以在卷积层上实现对芯片面积和能量消耗的显著降低。此外,由于位宽降低,在全连接层上,传输到片外存储器的数据也将大幅度减少。
自定义浮动点格式是单精度浮点与定点之间的折衷,其中浮点数的指数为每个操作而变化,而定点中比例因子从未改变。因此,自定义浮动点结合了两者的优点:比浮点更高的计算密度和比定点更高的有效精度。自定义浮点数与动态定点数也有一些相似之处,但其指数范围和获得方法不同。对于动态定点,预先训练成千上万张单精度浮点图像,分析各层的参数和产生的输出,然后确定适合网络某一部分的指数,而其他部分则仍保留为单精度浮点数。然而,对于自定义浮动点,可以在没有任何预训练的情况下获得指数,这更有效。
自定义浮点的基础计算单元是当将数据从单精度浮点格式量化为自定义浮动点时,共享指数来自原始数据的绝对最大值。F是原始数据的单精度浮点数据集,E是指数,Emax表示原始数据F中的绝对最大值的指数。
共享指数ES的值由Emax和Z(整数部分I的位数)决定;
ES=Emax-(Z-2) (2)
CNNs中需要的数据的自定义浮点表示方法;
公式3表示对于原始数据集F中的任何数fn都可以由与其对应的自定义浮点数整数部分in和共享指数ES共同表示,n表示对于任何数据都可以用自定义浮点数表示方法。
自定义浮点的基本操作如下:
·乘法:将两个n-bit自定义浮动点值相乘,以产生具有2(n-1)bits尾数、1bit符号和更新共享指数。SA,SB,SC分别表示数据A、B、C的符号位,MA,MB,MC为A、B、C尾数部分,ES,A,ES,B,ES,C表示A,B,C对应的共享指数。
Shared exponent:ES,C=ES,A+ES,B
·加法:对I:<S,M>使用32位整数加法器,所有结果共享相同的指数。
ES,C=ES,A=ES,B,iC=iA+iB (5)
·量化:将32-bit输出的最终结果量化为下一层的n-bit。32-bit I右移位R位以适应n-bit自定义浮点的表示方法。每个层的输出仅使用一个R和ES。Acc是累加器的位宽(ACC=32),LZC()是返回前导零位计数的函数。
iC=i>>R,ES,C=Es+R
通常,如图4所示,为了保证在计算中没有精度损失,n位有符号层激活和权重将相乘以产生2n-1bits乘积,该乘积将累积到(2n-1)+X bits。X是log2(每个输出值乘法次数),对于深度CNNs[12],X∈[10,16]。因此,在此项工作中,32-bit整数加法器可以保证累积没有溢出:即,如果n=8,2n-1+X<32。在累加之后,输出将被量化为n-bit。输出精度的降低对整体正确率的影响很小,因为权重值[12]的大小聚集中零附近。因此,在每次累加的过程中,可能是具有相似概率的增加或减少。
对于不同位宽的自定义浮点精度,在四个深度CNN网络上实现精度降低:AlexNet、SqueezeNet、GoogleNet、和ResNet。所有的实验结果都是top-1精度,并用单精度浮动点的top-1精度进行归一化,如图5所示。虽然不同的网络具有不同的性能,但自定义浮动点的最佳位宽是8位,这适用于大多数精度损失较小的模型。在另一方面,所有网络的精度将以一定的阈值急剧增加。因此,在一定的边界之后,较大的比特宽度将对性能的影响较小。虽然9-bit也是可以接受的,但8-bit是精度和性能权衡的最佳选择。
其中,微调是CNNs常用的一种方法。在基于Caffe框架实现,并在Matlab的MatCovNet中实现。这是一个积极的方式来弥补由位宽度减少造成的精度下降。在过程中,将重新定制自定义浮点数网络的参数。每当测试网络精度时,权重和激活都被量化。
对于精度分析,根据表1,给出四个深层CNN网络:AlexNet、SqueezeNet、GoogleNet和ResNet在微调前后的8位压缩定制浮点网络的结果。该框架以Matlab为基础,以Cifar-10为数据集。卷积层和完全连通层的参数和每层输出都是基于自定义浮点表示的,并且结果都是top-1精度。这些压缩网络的性能与基线非常接近,其中SqueezeNet、ResNet的准确率下降均小于0.6%,而较大的AlexNet和GoogLeNet的丢失略大(分别为0.8%和1.7%)。低精度网络可以使网络规模更小,由于SqueezeNet在自定义浮点数格式中的尺寸小于2MB,因而可以适合于在智能移动系统中实现。
在减少内存带宽方面,以AlexNet的第二层为例。32-bit浮点的内存流量为4.08GB/GFlop,基于本次提出的自定义浮点数的内存流量将减少4倍至1.02GB/GFlop。此外,两个8-bit值可以保存在16-bit位宽的存储中,没有存储浪费。此外,有助于在片上缓冲器中保存4倍以上的参数。
表一基于自定义浮点的网络精度比较
本发明提出的一种乘法器封装结构,在一个DSP slice上封装两个尾数部分的乘法。图6显示了基于8-bit自定义浮点数在一个DSP slice上的实现激活A、B和权重C的两个乘法A×C、B×C。具体而言,A、B尾数将通过DSP slices上的预加法器,把向左移位14-bit的数据A和B被打包成21-bit的数值。因此,所需的至少21×7-bit乘法器,这将被精确地包装在DSP48E1slice上的25×18-bit乘法器里。
一般来说,对于整个乘法器封装架构,如图7所示,因为计算主要依赖于整数部分,指数是共享的,不需单独计算,尾数和符号位必须分别管理。乘法器封装结构的输入是数据A,B,C的尾数部分MA,MB,MC,和对应的符号位SA,SB,SC,输出是乘积AC,BC的整数部分IAC,IBC。在单个DSP中实现尾数MAC,MBC的乘法,将DSP的输出拆分为两个部分:尾数MAC,MBC,并将其与相应符号位结合起来,产生IAC,IBC的输出。
特别地,在乘法器封装架构中,两个激活将乘以相同的权重,因此,激活应该来自相同的输入特征映射。自定义浮点数的指数可以被一些分组变量,如权重,激活,偏差,以及每层的输出所共享。特别地,共享指数为8-bit与单精度浮点数的指数位数相同,比相同位宽的动态定点有更大的数据范围,其中动态定点的小数点可以逐层改变。本发明的实现工作中每个变量为8-bit,包括1bit符号和7-bit尾数,称为8-bit自定义浮点数,具有共享指数。
其中,计算单元(CU)是一个小的可并行化的乘法和加法结构。神经网络的计算将由一组并行运行的CU构成。因此,具有高的计算密度和效率的CU将直接提高整个神经网络的性能。CU的细节设计如图8所示:代替两个原始CU,只需要一个基于打包乘法器的CU就得以实现相同的结果。这意味着新的CU的效率等于原始CU的两倍。进一步,由整数类型的乘法和加法替代原本的浮点数类型的计算方法。这将实现更高的效率,以节省FPGA上的算术时间和资源。
表2分析了3×3内核乘法器和CUs在不同数据和乘法器类型下的归一化资源需求。将所有输出的结果归一化为一个乘法器或一个原始CU的硬件需求。
表二在3*3kernel中不同乘法器和CU的归一化资源需求
与所提出的压缩乘法器相比,DSP slices数量比32位浮点节省4倍,比16位浮点节省2倍。此外,由于自定义浮点简化计算操作为整数运算,LUT和FF的大小比其他数据表示类型要小得多。
表三在0.45nm 0.9V不同操作的粗略成本
基于8-bit封装乘法器自定义浮点的CU,与其他类型相比,节省了预期的DSPslices,而LUT、FF分别节省了89%和76%。随着资源需求的急剧减少,更多的CU可以并行运行在FPGA上,从而获得更高的吞吐量。因此,通过将自定义浮点的数据类型与包装乘法器相结合,可以期望FPGA上的整个神经网络具有更高的资源效率。
本发明粗略地评估了32位浮点和自定义浮点数的MAC操作的功率和面积需求,如表3所示。由于整数运算,与32位浮点相比,自定义浮点表示大大减少了面积和功率。此外,还没有把本项提出的方法的整个神经网络在FPGA上实现,这将作为未来的工作,进一步详细评估功耗和吞吐量。
根据本发明提供的数据表示方法,可以在硬件实现中,减少4倍存储器带宽,在乘法中减少28倍,加法中减少116倍元件处理的芯片面积,乘法中减少17倍,加法中减少30倍的能量消耗。同时,基于8-bit自定义浮点数的CNN压缩网络和原网络具有相似的性能。对于AlexNet、SqueezeNet和ResNet模型在微调后,top-1精确度损失少于0.8%,而GoogleNet具有1.7%的损失,总体而言,精确度损失可忽略。在硬件实现方面,针对FPGA上硬件利用率不够的缺陷,本发明的目的是提供了一种乘法器封装结构,在FPGA中将两个乘法器封装在单个DSP slice上。根据本发明的方法可以有效提高资源效率和计算密度。基于自定义浮点数和乘法器封装的计算单元(CU)是在Xilinx Kintex-7上进行设计和评估的。实验结果表明,与单精度浮点数的CU相比,根据本发明提供的方法可以节省75%的DSP sl ice,94.7%的LUT和85.1%的FFs。由于CNN的计算由一组CU并行构成,因此本发明的高效计算单元将扩大整个神经网络的并行性,进一步实现吞吐量和计算密度的大幅度提升。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

Claims (10)

1.一种自定义浮点数,其特征在于,主要由整数部分和共享指数组成,整数部分主要由1位符号位和Z-1位尾数位组成,Z表示整数部分的位数,共享指数是8位,共享指数的位宽和单精度浮点数相同。
2.根据权利要求1所述的自定义浮点数,其特征在于,由整数部分和共享指数组成,整数部分由1位符号位和Z-1位尾数位组成;
当将原始数据从单精度浮点格式量化为自定义浮点数时,使用共享指数,所述共享指数来自原始数据的绝对最大值,如下式表示:
Es=Emax-(Z-2)
其中,F表示原始数据的单精度浮点数据集,f表示原始数据的单精度浮点数据集中的一个单精度浮点数据,E表示指数,Emax表示原始数据的单精度浮点数据集F中的绝对最大值的指数;Z表示整数部分I的位数,共享指数ES的值由Emax和Z计算得到。
3.一种利用权利要求1所述的自定义浮点数的计算方法,其特征在于,采用整数的乘法运算来代替原有的32位浮点数乘法运算,其中,乘法运算是将两个n-bit自定义浮动点值相乘,以产生具有2(n-1)bits尾数、1bit符号和更新共享指数,如下式表示:
MC=MA×MB
ES,C=ES,A+ES,B
其中,SA、SB、SC分别表示数据A、B、C的符号位,MA、MB、MC为数据A、B、C尾数位,ES,A、ES,B、ES,C表示A、B、C对应的共享指数。
4.根据权利要求3所述的自定义浮点数的计算方法,其特征在于,采用整数加法运算来代替原有的32位浮点数加法运算,其中,加法运算如下式表示:
ES,C=ES,A=ES,B
iC=iA+iB
其中,ES,A、ES,B、ES,C分别表示A、B、C对应的共享指数;iA、iB、iC分别表示A、B、C对应的整数部分。
5.根据权利要求3所述的自定义浮点数的计算方法,其特征在于,在卷积神经网络中的量化中,每个层的输出使用一个R和ES来把每层输出量化为8位的自定义浮点数,如下式表示:
iC=i>>R,ES,C=ES+R
其中,R表示整数部分I右移的位数;Acc表示累加器的位宽,LZC()是返回前导零位计数的函数;i表示原数据集的整数部分;iC表示量化后的标准自定义浮点数的整数部分;I表示整数部分;Z表示整数部分I的位数;ES,C表示C对应的共享指数;ES表示共享指数。
6.一种实现权利要求1所述的自定义浮点数的硬件结构,其特征在于,在一个DSP片上封装两个尾数部分的乘法运算。
7.根据权利要求6所述的自定义浮点数的硬件结构,其特征在于,在DSP片上通过预加法器进行累加移位。
8.一种利用权利要求1所述的自定义浮点数的计算系统,其特征在于,采用乘法运算,其中,乘法运算是将两个n-bit自定义浮动点值相乘,以产生具有2(n-1)bits尾数、1bit符号和更新共享指数,如下式表示:
MC=MA×MB
ES,C=ES,A+ES,B
其中,SA、SB、SC分别表示数据A、B、C的符号位,MA、MB、MC为数据A、B、C尾数位,ES,A、ES,B、ES,C表示A、B、C对应的共享指数。
9.根据权利要求8所述的自定义浮点数的计算系统,其特征在于,采用加法运算,其中,加法运算如下式表示:
ES,C=ES,A=ES,B
iC=iA+iB
其中,ES,A、ES,B、ES,C分别表示A、B、C对应的共享指数;iA、iB、iC分别表示A、B、C对应的整数部分。
10.根据权利要求3所述的自定义浮点数的计算系统,其特征在于,在卷积神经网络中的量化中,每个层的输出使用一个R和ES,如下式表示:
iC=i>>R,ES,C=ES+R
其中,R表示整数部分I右移的位数;Acc表示累加器的位宽,LZC()是返回前导零位计数的函数;i表示原数据集的整数部分;iC表示量化后的标准自定义浮点数的整数部分;I表示整数部分;Z表示整数部分I的位数;ES,C表示C对应的共享指数;ES表示共享指数。
CN201910114677.0A 2019-02-14 2019-02-14 自定义浮点数及其计算方法和硬件结构 Pending CN109901814A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910114677.0A CN109901814A (zh) 2019-02-14 2019-02-14 自定义浮点数及其计算方法和硬件结构

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910114677.0A CN109901814A (zh) 2019-02-14 2019-02-14 自定义浮点数及其计算方法和硬件结构

Publications (1)

Publication Number Publication Date
CN109901814A true CN109901814A (zh) 2019-06-18

Family

ID=66944834

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910114677.0A Pending CN109901814A (zh) 2019-02-14 2019-02-14 自定义浮点数及其计算方法和硬件结构

Country Status (1)

Country Link
CN (1) CN109901814A (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111049836A (zh) * 2019-12-16 2020-04-21 北京澎思科技有限公司 数据处理方法、电子设备及计算机可读存储介质
CN111126593A (zh) * 2019-11-07 2020-05-08 复旦大学 可重构的自然语言深度卷积神经网络加速器
CN111930342A (zh) * 2020-09-15 2020-11-13 浙江大学 一种针对规格化浮点数的误差无偏近似乘法器及其实现方法
CN112181360A (zh) * 2019-07-04 2021-01-05 福建天泉教育科技有限公司 浮点数的乘法运算方法及计算机可读存储介质
CN112596697A (zh) * 2019-10-02 2021-04-02 脸谱公司 使用分解的分量数字的浮点乘法硬件
CN112598078A (zh) * 2020-12-28 2021-04-02 北京达佳互联信息技术有限公司 混合精度训练方法、装置、电子设备及存储介质
WO2021083154A1 (en) * 2019-10-30 2021-05-06 Huawei Technologies Co., Ltd. Method and apparatus for quantization of neural networks post training
WO2022088157A1 (zh) * 2020-10-31 2022-05-05 华为技术有限公司 一种浮点数计算电路以及浮点数计算方法
CN115934030A (zh) * 2020-01-20 2023-04-07 华为技术有限公司 算数逻辑单元、浮点数乘法计算的方法及设备
CN117130664A (zh) * 2023-10-23 2023-11-28 北京星宇天航科技有限公司 用于芯片检测任务的人工智能芯片计算方法、装置及芯片

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107480770A (zh) * 2017-07-27 2017-12-15 中国科学院自动化研究所 可调节量化位宽的神经网络量化与压缩的方法及装置
CN108805796A (zh) * 2017-05-05 2018-11-13 英特尔公司 用于整数深度学习原语的动态精度管理
CN109063825A (zh) * 2018-08-01 2018-12-21 清华大学 卷积神经网络加速装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108805796A (zh) * 2017-05-05 2018-11-13 英特尔公司 用于整数深度学习原语的动态精度管理
CN107480770A (zh) * 2017-07-27 2017-12-15 中国科学院自动化研究所 可调节量化位宽的神经网络量化与压缩的方法及装置
CN109063825A (zh) * 2018-08-01 2018-12-21 清华大学 卷积神经网络加速装置

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112181360B (zh) * 2019-07-04 2023-06-16 福建天泉教育科技有限公司 浮点数的乘法运算方法及计算机可读存储介质
CN112181360A (zh) * 2019-07-04 2021-01-05 福建天泉教育科技有限公司 浮点数的乘法运算方法及计算机可读存储介质
CN112596697A (zh) * 2019-10-02 2021-04-02 脸谱公司 使用分解的分量数字的浮点乘法硬件
WO2021083154A1 (en) * 2019-10-30 2021-05-06 Huawei Technologies Co., Ltd. Method and apparatus for quantization of neural networks post training
CN111126593A (zh) * 2019-11-07 2020-05-08 复旦大学 可重构的自然语言深度卷积神经网络加速器
CN111126593B (zh) * 2019-11-07 2023-05-05 复旦大学 可重构的自然语言深度卷积神经网络加速器
CN111049836A (zh) * 2019-12-16 2020-04-21 北京澎思科技有限公司 数据处理方法、电子设备及计算机可读存储介质
CN115934030B (zh) * 2020-01-20 2024-01-16 华为技术有限公司 算数逻辑单元、浮点数乘法计算的方法及设备
CN115934030A (zh) * 2020-01-20 2023-04-07 华为技术有限公司 算数逻辑单元、浮点数乘法计算的方法及设备
CN111930342A (zh) * 2020-09-15 2020-11-13 浙江大学 一种针对规格化浮点数的误差无偏近似乘法器及其实现方法
CN111930342B (zh) * 2020-09-15 2021-01-19 浙江大学 一种针对规格化浮点数的误差无偏近似乘法器及其实现方法
WO2022088157A1 (zh) * 2020-10-31 2022-05-05 华为技术有限公司 一种浮点数计算电路以及浮点数计算方法
CN112598078A (zh) * 2020-12-28 2021-04-02 北京达佳互联信息技术有限公司 混合精度训练方法、装置、电子设备及存储介质
CN112598078B (zh) * 2020-12-28 2024-04-19 北京达佳互联信息技术有限公司 混合精度训练方法、装置、电子设备及存储介质
CN117130664A (zh) * 2023-10-23 2023-11-28 北京星宇天航科技有限公司 用于芯片检测任务的人工智能芯片计算方法、装置及芯片
CN117130664B (zh) * 2023-10-23 2024-01-09 北京星宇天航科技有限公司 用于芯片检测任务的人工智能芯片计算方法、装置及芯片

Similar Documents

Publication Publication Date Title
CN109901814A (zh) 自定义浮点数及其计算方法和硬件结构
Liang et al. FP-BNN: Binarized neural network on FPGA
CN107451658B (zh) 浮点运算定点化方法及系统
CN111062472B (zh) 一种基于结构化剪枝的稀疏神经网络加速器及其加速方法
CN106529670B (zh) 一种基于权重压缩的神经网络处理器、设计方法、芯片
CN109635944A (zh) 一种稀疏卷积神经网络加速器及实现方法
CN112292816B (zh) 处理核心数据压缩和存储系统
CN110070178A (zh) 一种卷积神经网络计算装置及方法
CN110880038A (zh) 基于fpga的加速卷积计算的系统、卷积神经网络
CN109146067B (zh) 一种基于FPGA的Policy卷积神经网络加速器
Garland et al. Low complexity multiply-accumulate units for convolutional neural networks with weight-sharing
CN109447241A (zh) 一种面向物联网领域的动态可重构卷积神经网络加速器架构
WO2021057085A1 (zh) 一种基于混合精度存储的深度神经网络加速器
CN109871949A (zh) 卷积神经网络加速器及加速方法
CN114647399B (zh) 一种低能耗高精度近似并行定宽乘法累加装置
CN111382860A (zh) 一种lstm网络的压缩加速方法及fpga加速器
Li et al. High-performance convolutional neural network accelerator based on systolic arrays and quantization
Lo et al. Energy efficient fixed-point inference system of convolutional neural network
Kung et al. Term revealing: Furthering quantization at run time on quantized dnns
Kung et al. Term quantization: Furthering quantization at run time
Mao et al. Fta-gan: A computation-efficient accelerator for gans with fast transformation algorithm
Bharathi et al. Vlsi Implementation Of Multiply And Accumulate Unit Using Offset Binary Coding Distributed Arithmetic
CN103955585B (zh) 一种适用于低功耗容错电路的fir滤波器结构
Li et al. An efficient CNN accelerator using inter-frame data reuse of videos on FPGAs
Choi et al. A high-throughput hardware accelerator for lossless compression of a DDR4 command trace

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20190618

RJ01 Rejection of invention patent application after publication