一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于卷积神经网络的处理方法及其系统与流程

2021-11-09 21:03:00 来源:中国专利 TAG:


1.本发明涉及神经网络领域,特别涉及一种基于卷积神经网络的处理方法和系统。


背景技术:

2.卷积神经网络(cnn)是一种用于进行图像处理的、包含卷积计算且具有深度结构的前馈神经网络,其被广泛用于图像分类、图像识别等。
3.近年来随着对神经网络算法的研究不断深入,深度学习技术迅速发展,已经被广泛应用到生活中的多个领域,特别是计算机视觉、语音识别和自然语言处理领域。卷积神经网络(cnn)作为深度学习技术的代表,凭借其强大的学习能力已经成为图像识别和分类任务中最有效的方法。
4.cnn作为一种计算密集型的深度学习模型,通常拥有大量的模型参数并且有比较高的计算需求。为了在图像识别和分类任务中获得更高的准确率,cnn模型的网络层次逐渐加深、规模更庞大、结构也更复杂。在性能提升的同时,也带来了更大的计算复杂度和参数存储需求。在通过处理器硬件对模型参数进行计算时,往往导致巨大的计算量需求、内存和带宽需求以及功耗较高的问题,这也导致了cnn模型在fpga、asic等资源有限且对功耗较为敏感的移动嵌入式硬件平台上的部署难以实现。
5.为了解决上述问题,对神经网络模型的压缩和加速方法成为深度学习领域研究的热点。一方面,是对基于fpga和asic等嵌入式硬件的加速芯片的研究,通过充分挖掘网络模型中算法的并行性,设计专用的电路结构实现对计算的并行加速。另一方面,是对网络模型中的参数进行压缩,目的是为了降低模型参数的数据量和计算量,进而减小模型实现的存储需求和计算复杂度。
6.当前主流的网络模型压缩方案主要有模型剪枝、低秩近似、参数量化和二值网络等几种。每种方案从不同的设计角度对网络模型进行压缩,均能取得相应的压缩效果。其中参数量化方案的基本设计思路是把网络模型中位宽较大的参数量化为低位宽低精度的量化数据来表示,进而减少参数的存储空间和计算复杂度。当前,参数量化作为一种通用的压缩方法,凭借其较高的压缩率和较低的性能损失受到了广泛的关注和应用。
7.传统的神经网络模型中较为核心的乘加计算,其输入输出的数据格式一般是采用64bit的双精度浮点数或者32bit的单精度浮点数,当网络模型规模较大时,对此类数据的存储和计算必然会产生巨大的存储需求、带宽需求、计算复杂度和功耗消耗。因此当前主流的网络模型均采用了参数量化的压缩方案对网络模型参数进行压缩,实现了从32bit单精度浮点数参数到16bit、8bit、4bit甚至更低位宽的整数数据格式的压缩。
8.对于不同的应用场景,不同的网络模型适用的参数量化精度会有所不同,甚至同一个网络模型中不同网络层参数的量化精度也存在不同,所以不同的网络模型在利用硬件加速芯片加速时,乘法计算的输入会存在多种不同精度的量化参数,出现不同位宽数据的计算需求。为了能支持对所有可能出现量化精度的参数的乘法运算,硬件实现上必须使用最高位宽参数位数的乘法器结构,且参数输入寄存器的通道大小也必须对应设计为最高位
宽,这将造成芯片硬件逻辑资源的严重浪费。
9.为了解决上述问题,实现神经网络加速芯片对不同应用场景的网络模型的通用性,当前研究提出了一种对网络原始参数数据切分处理的技术方案,即把参与乘法计算的高精度的高比特数切分成多个低比特片段,通过低比特片段之间的乘法运算来等价代替两个高比特原始数据的乘法操作。
10.例如:w和f的精度都是16bit,将w切分成两个8bit片段,即w的低8bit为wa、高8bit为wb,同理f也切分成fa和fb两个8bit片段。有:
11.w*f=wa*fa ((wa*fb wb*fa)<<8) (wb*fb<<16)
12.在硬件逻辑电路中只需要实现切分后大小的数据位宽的乘法器结构,它们既可以用来完成低比特的乘法运算,也可以完成高比特乘法运算。其中需要注意的一点是,切分后数据的大小必须为所支持的各种精度乘法运算原始参数的公约数。比如对于所有使用偶数大小位宽参数精度的模型来说,参数精度大小存在公约数2,所以可以选择按2bit大小对原始参数进行切分,在硬件加速器逻辑电路中只需实现2bit的乘法器结构,然后通过对切分后得到的2bit大小数据的特殊计算就可以等价得到原始参数的乘积结果。
13.使用该技术方案能大大提升神经网络加速芯片的通用性,能实现对不同应用场景的网络模型的加速。
14.上述公知技术说明中简单描述了一种当前比较实用的神经网络数据处理方案,即:为了实现神经网络加速芯片对不同应用场景中不同参数精度网络模型的通用性,提出的一种对网络模型原始参数数据进行切分处理的方法。
15.下面通过结合附图1详细介绍当前技术方案的具体实现过程。
16.当前神经网络加速芯片的硬件逻辑电路中,均由大规模的pe阵列来实现对大量参数数据的并行运算,pe计算单元的个数达到数千甚至上万个。设n-bit是pe的基本精度,每个pe含有一个n-bit*n-bit的乘法器、一个n-bit的权值参数w输入端口和一个n-bit的特征图参数f输入端口。一个pe一次可以完成一个n-bit*n-bit数据的乘法运算,在pe阵列中将这些乘法结果求和得到卷积神经网络的结果。所有大于n-bit精度的网络需要切分成n-bit进行计算。此处我们以n=2即pe的基本精度是2bit为例,对局部一组32个pe计算单元的运算过程来分析。分析结果可同理扩展到加速芯片的整个pe阵列,以及其它基本精度类型的pe。
17.当计算一个32通道的w和f都是2bit的网络时,w参数和f参数分别表示为w0,w1,...,w31和f0,f1,...,f31,此时不需要对数据切分的操作,直接将它们分别加载到对应的pe0,pe1,...,pe31计算单元,每个pe的乘法结果分别为p0,p1,...,p31。得到的最终运算结果为sum=p0 p1 ... p31。
18.而当计算一个32通道的w和f分别为4bit和8bit的网络时,则对两个参数进行2bit切分,4bit的w0被切分成低2bit数据w0a和高2bit数据w0b两个片段,同理8bit的f0按2bit切分后得到的数据自低位至高位分别是f0a、f0b、f0c、f0d共四个片段。使用低精度的pe完成对高精度网络的运算是通过每个高精度网络通道占用多个pe的方式实现,每个通道所占用的pe数是网络最高精度参数切分的片段数。在这个例子中每个通道占用4个pe,下面按通道0占用pe0~pe3、通道1占用pe4~pe7、

、通道7占用pe28~pe31为例。f参数的四个片段分别输入4个pe的f参数端口,w参数只有2个片段,将其复制一份,分别输入这4个pe的w参数
端口。要完成32通道4bit*8bit的乘加运算需要进行以下两轮计算。
19.轮1:将w0a同时送入pe0和pe2的w端口,w0b同时送入pe1和pe3,将f0a、f0b、f0c、f0d分别送入pe0、pe1、pe2、pe3的f端口。将w1a同时送入pe4和pe6,w1b同时送入pe5和pe7,将f1a、f1b、f1c、f1d分别送入pe4、pe5、pe6、pe7,以此类推,数据w7和f7送入pe28~pe31。对每个乘积结果p求和时需要进行不同的移位操作,有sum=p0 (p1<<4) (p2<<4) (p3<<8) ... p28 (p29<<4) (p30<<4) (p31<<8)。求和值写入sum寄存器。
20.轮2:f参数的输入不变,w参数的a片段和b片段进行交换,即将w0a同时送入pe1和pe3,w0b同时送入pe0和pe2,同理对w1~w7进行类似操作。求和时乘积结果p的移位操作与第一步骤中不同,有sum=sum (p0<<2) (p1<<2) (p2<<6) (p3<<6) ...
21. (p28<<2) (p29<<2) (p2<<6) (p31<<6)。这里p的求和必须累加到sum寄存器中。
22.上述过程完成了通道0~7的计算,要完成全部32个通道的计算只需分别对通道8~15、16~23、24~31再重复上述两轮计算即可。只是其中所有的求和都需要累加到sum寄存器中。这样通过8轮计算完成了32通道4bit的w参数和8bit的f参数的乘加运算。
23.按照上述运算过程,即可以实现用切分后低比特数据的特殊运算来等价实现对网络原始参数的运算。附图1显示了既支持权值和特征图都是2bit的网络,也支持权值参数是4bit特征图参数是8bit的网络。
24.当前方案中采用的数据切分相乘的方法,确实能够有效的解决硬件加速芯片对不同量化精度网络模型加速通用性的问题。不过此种方法同时也带来了严重的缺陷与不足,其中最重要的一点就是该方法的实现引入了过多额外的硬件逻辑电路,增加了硬件面积开销,同时也增大了功耗,这对硬件资源紧张、且对功耗较为敏感的移动嵌入式硬件加速平台来说是非常不友好的。并且因为增加了额外的逻辑电路,导致数据通路变长,增大了电路的延时,进而降低了加速芯片的运行频率,最终导致加速芯片的加速效果变差。
25.具体来说,引入的额外硬件逻辑电路主要为多路选择器结构,并且主要产生于以下三个实现操作中:
26.1:当网络模型的w或f参数的精度大于pe的基本精度而需要切分时,切分后得到的低比特数据片段需要实现交叉相乘操作,如上文例述中w参数a片段与b片段的交换,在硬件中是通过设置多路选择器结构来实现。并且网络模型参数的精度与pe的基本精度差距越大,切分得到的片段就越多,则多路选择器逻辑就越复杂。
27.2:当网络模型的w参数与f参数的精度不相等时,从缓存结构中加载参数到pe参与计算时,会存在从多个参数中选择一个加载的情况,如上文例述中对权值参数w0和w8的选择加载,这里需要实现多路选择器逻辑电路。并且不同的参数精度组合会需要不同的多路选择器结构,因此需要支持的参数精度组合越多,多路选择器逻辑电路越复杂。
28.3:根据数据切分处理方法,对每个pe的计算结果在求和前需要进行移位,即上文例述中对每个乘积结果p的移位操作,硬件中通过多路选择器结构来实现对移位位数的选择。同样,切分得到的片段越多,以及w与f不同的精度组合情况越多,移位操作需要选择的情况就越多,需要实现的多路选择器逻辑也就越复杂。
29.多路选择器的复杂度随网络参数的精度种类增加而增加。假定pe的基本精度是2bit,想要支持所有w和f为2bit、4bit、8bit、16bit以及它们的任意组合共16种,包含:w是2bit、f是2bit,w是2bit、f是4bit,w是4bit、f是2bit,...,到w是16bit、f是16bit。此时所需
的多路选择器逻辑已经远远大于原始pe的逻辑。在深度学习神经网络加速器中,除了片内内存之外,pe逻辑是加速器逻辑的主体。因此当前技术方案带来的额外硬件资源的开销对整个加速芯片来说影响巨大。
30.针对上述巨大的多路选择器逻辑的硬件资源消耗问题,本领域技术人员通常会从两个角度考虑去解决:
31.(1)增大pe的基本精度,可以实现减少多路选择器逻辑,比如将pe的基本精度设定为4bit。但是这种情况下pe在执行w和f都是2bit的网络时只能发挥出四分之一的运算能力,会造成硬件计算资源的浪费。
32.(2)减少加速器芯片对不同精度的支持,比如不支持16bit的w和f的网络,或者不支持w是8bit、f是2bit这种比较少见的情况进而减少多路选择器逻辑。但是这样做又会限制加速器的适应范围,尤其是无法支持超过其预先设定精度的网络。
33.上述两个解决方案都会带来很大问题,网络预先设置的最高精度太高,加速芯片所支持各种精度太丰富,会导致多路选择器增加的面积太大,浪费硬件资源。网络预先设置的最高精度太低,加速芯片所支持各种精度太少,又会造成芯片应用范围受到太大限制。这是两难的选择,更由于芯片研发周期长,应用变化快,在芯片研发阶段难以准确把握情况而恶化了这个问题。
34.还有一点需要指出,当前技术方案只支持参数精度是pe基本精度的2的n次方倍的情况。比如pe基本精度是2bit,可以支持4bit、8bit、16bit、32bit、...,但不能有效支持6bit、12bit、20bit、24bit等情形。


技术实现要素:

35.基于以上描述当前研究中技术方案的不足,本发明提出了一种创新的神经网络的处理方法和装置,解决了现有技术方案实现过程中引入过多额外多路选择器逻辑而造成的增加硬件开销、增加功耗、降低加速芯片运行频率的问题,并且能降低硬件逻辑的设计复杂度。同时取消了对网络参数模型精度的各种限制。
36.针对当前技术方案的不足和缺陷,本发明提出了一种基于卷积神经网络的处理方法及系统,消除了当前技术方案的不足和缺陷,完成对网络模型中参数的乘加运算。
37.具体地,提供一种基于卷积神经网络的处理方法,由pe阵列实现对大量参数数据的并行运算,设n-bit是pe的基本精度,每个pe含有一个n-bit*n-bit的乘法器、一个n-bit的权值参数w输入端口和一个n-bit的特征图参数f输入端口,这个pe阵列对大于n-bit参数切分的n-bit参数片段进行运算,x表示权值参数w的比特数值;y表示特征图参数f参数比特数值;x和y是n的整数倍,当x/n大于1或y/n大于1时进行运算,所述方法包括以下步骤:
38.步骤1,预置sum寄存器;
39.步骤2,使用pe进行多轮计算,每轮计算时所加载的w参数的n-bit片段是对应w参数的同位权片段,所加载的f参数的n-bit片段是对应f参数的同位权片段,根据预先安排计算顺序,对每轮进行计算,包括:将本轮的w和f参数n-bit片段加载到对应的pe单元中,pe的乘法结果是p0,p1,...,pz,对每个pe的乘法结果求和,得到s=p0 p1 ... pz;s的位权是w片段的位权乘以f片段的位权;将本轮的计算结果s与sum进行累加;每轮对sum进行累加后,将s的位权赋予sum。
40.如图4所示,所述步骤2包括,根据预先安排计算顺序,确保相邻轮的计算结果s的位权相等,或者不等时大值除以小值是2的n次方;其中,每轮的计算步骤是:
41.步骤2.1,将本轮的w和f参数n-bit片段加载到对应的pe单元中,pe的乘法结果是p0,p1,...,pz,对每个pe的乘法结果求和,得到s=p0 p1 ... pz;s的位权是w片段的位权乘以f片段的位权;
42.步骤2.2,将本轮的计算结果s与sum进行累加;其中,累加的方法是:
43.如果sum的位权为不确定状态或者sum的位权与s的位权相等,则将s加sum置于sum中;
44.如果sum的位权除以s的位权是2的n次方,则将s加sum循环左移n-bit置于sum中;
45.如果s的位权除以sum的位权是2的n次方,则将s加sum循环右移n-bit置于sum中;
46.步骤2.3,每轮对sum进行累加后,将s的位权赋予sum。
47.上述的所述步骤2中的加法如果是有符号加法,则符号扩展的位数不能越过sum的最高位减去它的位权所表示的2进制bit数。
48.进一步包括在上述的步骤2中:所述的预先安排计算顺序是,使多轮计算结束后取出sum时,sum的位权是1。
49.进一步包括在上述的步骤2中,所述的预先安排计算顺序是:
50.轮1到轮n,w参数片段都是w0p
m
,w1p
m
,...,wzp
m
,f参数遍历所有参数片段,即从片段1到片段n:f0q1,f1q1,...,fzq1,...,f0q
n
,f1q
n
,...,fzq
n
;遍历顺序可以是自1至n或自n至1;
51.轮n 1到轮2*n,w参数片段都是w0p
m-1
,w1p
m-1
,...,wzp
m-1
,f参数片段与轮1到轮n相同,只是遍历顺序与之相反;
52.轮2*n 1到轮3*n,w参数片段都是w0p
m-2
,w1p
m-2
,...,wzp
m-2
,f参数片段与轮1到轮n相同,遍历顺序也与之相同;
53.……
54.轮(m-2)*n 1到轮(m-1)*n,w参数片段都是w0p2,w1p2,...,wzp2,f参数片段与轮1到轮n相同,遍历顺序与轮(m-3)*n 1到轮(m-2)*n相反;
55.轮(m-1)*n 1到轮m*n,w参数片段都是w0p1,w1p1,...,wzp1,f参数片段与轮1到轮n相同,遍历顺序与轮(m-2)*n 1到轮(m-1)*n相反;
56.上述步骤中,z 1表示通道数;x表示w参数比特数值;y表示f参数比特数值;
57.w参数的切分数值分别为:w0pi,w1pi,
……
,wzpi,i=1,
……
,m,其中m=x/n;
58.f参数的切分数值分别为:f0q
j
,f1q
j
,
……
,fzq
j
,j=1,
……
,n,其中n=y/n。
59.进一步包括在步骤2中,所述的预先安排计算顺序是:
60.轮1到轮n,w参数片段都是w0p1,w1p1,...,wzp1,f参数遍历所有参数片段,即从片段1到片段n:f0q1,f1q1,...,fzq1,...,f0q
n
,f1q
n
,...,fzq
n
;遍历顺序可以是自1至n或自n至1;
61.轮n 1到轮2*n,w参数片段都是w0p2,w1p2,...,wzp2,f参数片段与轮1到轮n相同,只是遍历顺序与之相反;
62.轮2*n 1到轮3*n,w参数片段都是w0p3,w1p3,...,wzp3,f参数片段与轮1到轮n相同,遍历顺序也与之相同;
63.……
64.轮(m-2)*n 1到轮(m-1)*n,w参数片段都是w0p
m-1
,w1p
m-1
,...,wzpm-1
,f参数片段与轮1到轮n相同,遍历顺序与轮(m-3)*n 1到轮(m-2)*n相反;
65.轮(m-1)*n 1到轮m*n,w参数片段都是w0p
m
,w1p
m
,...,wzp
m
,f参数片段与轮1到轮n相同,遍历顺序与轮(m-2)*n 1到轮(m-1)*n相反;
66.上述步骤中,z 1表示通道数;x表示w参数比特数值;y表示f参数比特数值;
67.w参数的切分数值分别为:w0p
i
,w1p
i
,
……
,wzp
i
,i=1,
……
,m,其中m=x/n;
68.f参数的切分数值分别为:f0q
j
,f1q
j
,
……
,fzq
j
,j=1,
……
,n,其中n=y/n。
69.可以,进一步包括在步骤2中,所述的预先安排计算顺序是:
70.轮1到轮m,f参数片段都是f0q
n
,f1q
n
,...,fzq
n
,w参数遍历所有参数片段,即从片段1到片段m:w0p1,w1p1,...,wzp1,...,w0p
m
,w1p
m
,...,wzp
m
;遍历顺序可以是自1至m或自m至1;
71.轮m 1到轮2*m,f参数片段都是f0q
n-1
,f1q
n-1
,...,fzq
n-1
,w参数片段与轮1到轮m相同,只是遍历顺序与之相反;
72.轮2*m 1到轮3*m,f参数片段都是f0q
n-2
,f1q
n-2
,...,fzq
n-2
,w参数片段与轮1到轮m相同,遍历顺序也与之相同;
73.……
74.轮(n-2)*m 1到轮(n-1)*m,f参数片段都是f0q2,f1q2,...,fzq2,w参数片段与轮1到轮m相同,遍历顺序与轮(n-3)*m 1到轮(n-2)*m相反;
75.轮(n-1)*m 1到轮n*m,f参数片段都是f0q1,f1q1,...,fzq1,w参数片段与轮1到轮m相同,遍历顺序与轮(n-2)*m 1到轮(n-1)*m相反;
76.上述步骤中,z 1表示通道数;x表示w参数比特数值;y表示f参数比特数值;
77.w参数的切分数值分别为:w0p
i
,w1p
i
,
……
,wzp
i
,i=1,
……
,m,其中m=x/n;
78.f参数的切分数值分别为:f0q
j
,f1q
j
,
……
,fzq
j
,j=1,
……
,n,其中n=y/n。
79.还可以,进一步包括在步骤2中,所述的预先安排计算顺序是:
80.轮1到轮m,f参数片段都是f0q1,f1q1,...,fzq1;w参数遍历所有参数片段,即从片段1到片段m:w0p1,w1p1,...,wzp1,...,w0p
m
,w1p
m
,...,wzp
m
;遍历顺序可以是自1至m或自m至1;
81.轮m 1到轮2*m,f参数片段都是f0q2,f1q2,...,fzq2,w参数片段与轮1到轮m相同,只是遍历顺序与之相反;
82.轮2*m 1到轮3*m,f参数片段都是f0q3,f1q3,...,fzq3,w参数片段与轮1到轮m相同,遍历顺序也与之相同;
83.……
84.轮(n-2)*m 1到轮(n-1)*m,f参数片段都是f0q
n-1
,f1q
n-1
,...,fzqn-1,w参数片段与轮1到轮m相同,遍历顺序与轮(n-3)*m 1到轮(n-2)*m相反;
85.轮(n-1)*m 1到轮n*m,f参数片段都是f0q
n
,f1q
n
,...,fzq
n
,w参数片段与轮1到轮m相同,遍历顺序与轮(n-2)*m 1到轮(n-1)*m相反;
86.上述步骤中,z 1表示通道数;x表示w参数比特数值;y表示f参数比特数值;
87.w参数的切分数值分别为:w0p
i
,w1p
i
,
……
,wzp
i
,i=1,
……
,m,其中m=x/n;
88.f参数的切分数值分别为:f0q
j
,f1q
j
,
……
,fzq
j
,j=1,
……
,n,其中n=y/n。
89.如图5所示,本技术的所述步骤2进一步还可以包括:
90.所述的根据预先安排计算顺序,以计算结果s的位权自大至小排序,使相邻轮的计算结果s的位权相等,或者前一轮除以后一轮是2的n次方;其中,每轮的计算步骤是:
91.步骤2.1,将本轮的w和f参数n-bit片段加载到对应的pe单元中,pe的乘法结果是p0,p1,...,pz,对每个pe的乘法结果求和,得到s=p0 p1 ... pz;s的位权是w片段的位权乘以f片段的位权;
92.步骤2.2,将本轮的计算结果s与sum进行累加;其中,累加的方法是:
93.如果sum的位权为不确定状态或者sum的位权与s的位权相等,则将s加sum置于sum中;
94.如果sum的位权除以s的位权是2的n次方,则将s加sum左移n-bit置于sum中;
95.步骤2.3,每轮对sum进行累加后,将s的位权赋予sum。
96.上述的n=2或4。
97.所述步骤1中预置sum寄存器是给sum赋予初值;所述的给sum赋予初值包括将0置于sum寄存器中,sum的位权设为不确定。
98.上述的w和f的bit数是n-bit的k倍,其中k是正整数。
99.本技术还包括一种基于卷积神经网络的处理系统,无论网络模型参数的精度高低,每个通道都只占用1个pe,每个pe每次加载此通道的一个参数片段进行乘加运算,依次加载不同的参数片段以实现所有w与f参数片段之间的交叉乘积;每次加载w和f参数时,对于pe阵列中乘法结果需要求和在一起的所有pe单元,w参数输入端加载相同位权的w参数片段,f参数输入端加载相同位权的f参数片段。
100.对参数片段的加载计算顺序有两种:(1)按照两个参数片段位权的乘积自高至低进行加载计算;(2)两个参数片段位权的乘积,在连续两次计算中相等,或其中大值与小值的比值等于2的n次方,其中n为pe基本精度大小。
101.所述系统用于应用上述方法。
102.所述系统包括乘法器、寄存器、多选一多路选择器;所述的多选一多路选择器为二选一多路选择器、三选一多路选择器。
103.这里需要说明的是:位权用于表示一个数中的某一位的权值,以二进制为例,bit0的位权是2的0次方等于1,bit1的位权是2,bit2的位权是4等等。这里将位权应用于一个多bit的数,指这个数最低位的位权,一般情况下是2的0次方等于1。但有两种例外情况:(1)一个参数是原参数中的切分片段,这时参数片段的位权是其最低的二进制位在原参数中的位权,因此常常不为1。(2)一个参数进行循环位移后原来的最低二进制位在位移后的位权,即左移n-bit其位权需乘以2的n次方,右移n-bit其位权需乘以2的-n次方,因此常常不为1。
104.本技术的优势在于:解决了现有技术方案实现过程中引入过多额外多路选择器逻辑而造成的增加硬件开销、增加功耗、降低加速芯片运行频率的问题,并且能降低硬件逻辑的设计复杂度。同时取消了对网络参数模型精度的各种限制。
附图说明
105.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,并不
构成对本发明的限定。
106.图1是本发明涉及的现有技术的示意框图。
107.图2是本发明涉及的系统的示意框图。
108.图3是本发明涉及的方法的流程示意框图。
109.图4是本发明涉及的一个方法的流程示意图。
110.图5是本发明涉及的另一个方法的流程示意图。
111.图6是本发明涉及的方法的具体实施例流程示意图。
具体实施方式
112.目前,本领域常用的技术术语包括:
113.参数片段:网络模型高精度参数按pe基本精度进行切分后得到的数据片段。例如:16bit精度的w参数,按8bit切分成两个片段,即w的低8bit为wa、高8bit为wb。wa和wb就是参数片段。
114.参数片段位权:一个参数片段最低位在原参数中的位权。比如上面例子中,wa的bit0在w中也是bit0,位权是1;wb的bit0在w中是bit8,位权是256。因此参数片段wa的位权是1,参数片段wb的位权是256。
115.本技术涉及的系统及其方法是:无论网络模型参数的精度高低,每个通道都只占用1个pe,每个pe每次加载此通道的一个参数片段进行乘加运算,依次加载不同的参数片段以实现w与f所有片段之间的交叉乘积。每次加载w和f参数时,乘法计算结果需要求和在一起的所有pe的w端口加载相同位权的w参数片段,f端口加载相同位权的f参数片段。参数片段的加载计算顺序,按照两个参数片段位权的乘积自高至低进行。
116.具体实现过程为:对网络模型中的w参数和f参数精度大于pe基本精度的情况,把原始参数按照pe的基本精度进行切分,假设每个通道的w切分为wa、wb、...,每个通道的f切分为fa、fb、...。在加载w和f到pe上时,无论w和f的精度如何,都是将对应通道的w和f参数加载到对应的pe上,但是只加载切分后的一个参数片段:a、b、...等,而且所有pe的w参数输入端口加载同一个位权片段,比如w0a,w1a,...,w31a,所有f参数输入端口也加载同一个位权片段,比如f0b,f1b,...,f31b。因为是相同位权的片段,它们在原始参数中的比特位置相同,因此对每个pe的乘法计算结果p的求和不需要任何位移,消除了当前技术方案中求和操作使用的多路选择器逻辑。每次加载不同的片段就可以得到所有片段之间的交叉乘积,不再像当前技术方案需要从不同的pe参数输入端口加载参数实现对参数片段的交叉相乘,消除了pe输入端的多路选择器逻辑。但是在完成p的求和结果与sum寄存器中现有的数据的加法操作时,可能会有数据位移需要,我们可以通过合理安排参数片段计算的先后顺序,按照两个参数片段位权的乘积自高至低的方式进行计算,使这个位移量仅可能是0和pe基本精度两种之一。
117.下面通过图2所示来详细介绍实现过程:
118.为了与当前技术方案的方法形成对比,此处同样以大规模pe阵列中局部的一组32个pe计算单元的运算过程,pe的基本精度仍然是2bit。
119.我们仍然计算2个网络模型,第一个是32个通道w和f都是2bit的网络。与现有技术相同,w0,w1,...,w31和f0,f1,...,f31加载到对应的pe0,pe1,...,pe31计算单元,对32个
pe的乘法结果p0,p1,...,p31求和,结果为sum=p0 p1 ... p31。
120.第二个是32通道w和f分别为4bit和8bit的网络。进行2bit切分,w0,...,w31被切分成w0a,...,w31a和w0b,...,w31b,f0,...,f31被切分成f0a,...,f31a、f0b,...,f31b、f0c,...,f31c、f0d,...,f31d。片段在参数中的位置自低至高为a,b,c,d。如图2所示。
121.按照本发明技术方案的方法,需要以下八次实现计算,如图6所示,具体如下:
122.先将sum寄存器置0
123.1.分别将参数片段w0b,...,w31b和f0d,...,f31d加载到对应的pe单元pe0,...,pe31中,每个pe的乘法结果是p0,...,p31,求和得到s=p0 p1 ,..., p31,得到sum=sum s。
124.2.加载w0b,...,w31b和f0c,...,f31c。求和结果s累加时,sum寄存器需左移2bit,得到sum=(sum<<2) s。
125.3.加载w0a,...,w31a和f0d,...,f31d。求和结果s累加时,sum寄存器无需位移,得到sum=sum s。
126.4.加载w0a,...,w31a和f0c,...,f31c。求和结果s累加时,sum寄存器需左移2bit,得到sum=(sum<<2) s。
127.5.加载w0b,...,w31b和f0b,...,f31b。求和结果s累加时,sum寄存器无需位移,得到sum=sum s。
128.6.加载w0b,...,w31b和f0a,...,f31a。求和结果s累加时,sum寄存器需左移2bit,得到sum=(sum<<2) s。
129.7.加载w0a,...,w31a和f0b,...,f31b。求和结果s累加时,sum寄存器无需位移,得到sum=sum s。
130.8.加载w0a,...,w31a和f0a,...,f31a。求和结果s累加时,sum寄存器需左移2bit,得到sum=(sum<<2) s。
131.通过以上八次计算,完成了32通道4bit的w参数和8bit的f参数的乘加运算。所需要的计算次数与现有技术相同。但是消除了绝大部分多路选择器逻辑。只需要一个简单的二选一多路选择器逻辑实现对sum寄存器中的原始数值或其位移值的选择,因为只存在左移两位和无位移两种情况。我们还看到,无论网络的w参数和f参数的精度是多少,只要是pe基本精度(这个例子中是2bit)的整数倍,就能够被这个系统有效支持。
132.下面是一个32通道8bit的w参数和8bit的f参数的乘加运算例子,需要16次运算,先将sum寄存器置0:
133.1.加载w0d,...,w31d和f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
134.2.加载w0c,...,w31c和f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
135.3.加载w0d,...,w31d和f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
136.4.加载w0d,...,w31d和f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
137.5.加载w0c,...,w31c和f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=
sum s
138.6.加载w0b,...,w31b和f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
139.7.加载w0a,...,w31a和f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
140.8.加载w0b,...,w31b和f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
141.9.加载w0c,...,w31c和f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
142.10.加载w0d,...,w31d和f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
143.11.加载w0c,...,w31c和f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
144.12.加载w0b,...,w31b和f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
145.13.加载w0a,...,w31a和f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
146.14.加载w0a,...,w31a和f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
147.15.加载w0b,...,w31b和f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
148.16.加载w0a,...,w31a和f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
149.上述方法的缺点是需要将切分后的参数片段多次从存储系统中读出来,加载给pe,这增加了参数读出的功耗。上述例子中每个w片段平均读出3.5次,f片段平均读出3次。可以通过增加累加逻辑的多路选择器来改善这个问题,即增加右移逻辑。
150.下面是一个32通道8bit的w参数和8bit的f参数的乘加运算例子,减少w的读出,每个w片段读出1次,f片段平均读出3.25次,注意这里所有的位移都是循环位移。
151.先将sum寄存器置0
152.1.加载w0d,...,w31d和f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
153.2.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
154.3.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
155.4.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
156.5.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
157.6.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
158.7.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
159.8.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
160.9.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
161.10.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
162.11.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
163.12.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
164.13.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
165.14.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
166.15.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
167.16.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
168.如果还有更多通道,比如:64、128、256等等;或者存在多个w,比如3x3的卷积核,这时周围的3x3个f需要分别乘以对应的3x3个w而非仅仅1个f乘以1个w,这等价于通道数的成倍增加。这种更多通道的计算一般是反复使用同一个32通道的pe阵列硬件,导致计算次数或轮数的成倍增加。为了最终sum的位权是1,上述例子中开始的32通道的各轮排序应该做相应的调整,可以是:
169.先将sum寄存器置0
170.1.加载w0d,...,w31d和f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
171.2.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
172.3.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
173.4.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
174.5.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
175.6.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2)
s
176.7.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
177.8.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
178.9.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
179.10.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
180.11.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
181.12.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
182.13.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
183.14.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
184.15.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
185.16.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
186.也可以是:
187.先将sum寄存器置0
188.1.加载w0a,...,w31a和f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
189.2.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
190.3.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
191.4.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
192.5.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
193.6.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
194.7.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
195.8.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
196.9.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
197.10.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
198.11.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
199.12.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
200.13.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
201.14.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
202.15.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
203.16.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
204.还可以是:
205.先将sum寄存器置0
206.1.加载w0a,...,w31a和f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
207.2.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
208.3.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
209.4.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
210.5.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
211.6.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
212.7.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
213.8.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
214.9.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
215.10.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
216.11.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2)
s
217.12.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
218.13.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
219.14.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
220.15.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
221.16.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
222.下面是一个32通道8bit的w参数和8bit的f参数的乘加运算例子,减少f的读出,每个f片段读出1次,w片段平均读出3.25次,注意这里所有的位移都是循环位移。
223.先将sum寄存器置0
224.1.加载w0a,...,w31a和f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
225.2.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
226.3.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
227.4.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
228.5.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
229.6.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
230.7.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
231.8.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
232.9.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
233.10.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
234.11.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
235.12.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
236.13.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2)
s
237.14.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
238.15.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
239.16.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
240.如果还有更多通道,比如:64、128、256等等;或者存在多个w,比如3x3的卷积核,这时周围的3x3个f需要分别乘以对应的3x3个w而非仅仅1个f乘以1个w,这等价于通道数的成倍增加。这种更多通道的计算一般是反复使用同一个32通道的pe阵列硬件,导致计算次数或轮数的成倍增加。为了最终sum的位权是1,上述例子中开始的32通道的各轮排序应该做相应的调整,可以是:
241.先将sum寄存器置0
242.1.加载w0d,...,w31d和f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
243.2.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
244.3.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
245.4.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
246.5.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
247.6.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
248.7.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
249.8.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
250.9.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
251.10.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
252.11.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
253.12.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
254.13.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
255.14.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
256.15.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
257.16.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
258.也可以是:
259.先将sum寄存器置0
260.1.加载w0a,...,w31a和f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
261.2.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
262.3.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
263.4.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
264.5.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
265.6.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
266.7.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
267.8.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
268.9.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
269.10.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
270.11.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
271.12.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
272.13.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
273.14.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
274.15.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
275.16.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2)
s
276.还可以是:
277.先将sum寄存器置0
278.1.加载w0d,...,w31d和f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
279.2.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
280.3.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
281.4.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
282.5.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
283.6.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
284.7.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
285.8.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
286.9.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
287.10.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
288.11.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
289.12.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
290.13.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
291.14.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
292.15.加载w0c,...,w31c到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
293.16.加载w0d,...,w31d到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum>>2) s
294.在以上这8个例子里,需要一个三选一多路选择器逻辑,实现在sum寄存器的原始值、其循环左移两位的值、其循环右移两位的值三个值中选择一个。
295.对sum进行循环位移,其含义是我们一个数值在硬件上的表达方式改变了。通常一个数的bit0放在硬件的bit0上、bit<j>放在硬件的bit<j>上、最高位bit<n>放在硬件的bit
<n>上。经过循环位移后,一个数的bit<j>放在硬件的bit<j-k>上(j-k>=0时)或者bit<j>放在硬件的bit<n 1 (j-k)>上(j-k<0时),这里k>=0。此时如果s和sum是有符号数,则s到sum的累加的符号扩展不能到硬件的bit<n>,只能到bit<n-k>。
296.此外,高bit的w和f的bit数并非必须是2bit的2的k次方倍数,比如2、4、8、16等等,只要是2bit的k倍就可以。下面是一个32通道6bit的w参数和10bit的f参数的乘加运算例子。这里w参数切分成3个2bit片段wa~wc,f参数切分成5个片段fa~fe,需要进行15次运算:
297.1.加载w0c,...,w31c和f0e,...,f31e到pe0,...,pe31,s=p0 ,..., p31,sum=sum s
298.2.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
299.3.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
300.4.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
301.5.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
302.6.加载w0b,...,w31b到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
303.7.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
304.8.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
305.9.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
306.10.w不变,加载f0e,...,f31e到pe0,...,pe31,s=p0 ,..., p31,sum=(sum>>2) s
307.11.加载w0a,...,w31a到pe0,...,pe31,f不变,s=p0 ,..., p31,sum=(sum<<2) s
308.12.w不变,加载f0d,...,f31d到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
309.13.w不变,加载f0c,...,f31c到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
310.14.w不变,加载f0b,...,f31b到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
311.15.w不变,加载f0a,...,f31a到pe0,...,pe31,s=p0 ,..., p31,sum=(sum<<2) s
312.另外,考虑到此技术方案实现过程中需要的移位操作相对较少,因此移位操作的实现可以选择以软件的方式实现,即不再需要实现多路选择器逻辑电路结构。
313.本发明提出的这种创新的乘法处理方法和系统方案,与当前现有技术相比,极大的减少了硬件逻辑开销,节省了芯片面积,加速了网络模型中乘加运算的速度,降低了计算复杂度,同时减少了功耗。且因额外逻辑电路的减少,缩短了数据传输通路,降低了电路中的延时,增大了加速芯片的运行频率,提升了芯片的加速效率。
314.另外,针对上文中提到的现有技术对于网络模型参数高精度以及多种精度组合支持的困难,本发明的技术方案可以完全消除这个困难。针对现有技术只能支持pe基本精度的2的n次方整数倍精度的限制,本发明的技术方案消除了这个限制,只受数学原理给出的pe基本精度的n倍精度的限制,即对于所有pe基本精度整数倍的参数精度类型,本发明方案均能有效的支持。
315.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献