融合向量乘法器和使用其进行运算的方法与流程

文档序号:15828684发布日期:2018-11-03 00:11阅读:363来源:国知局

本公开涉及计算机领域,进一步涉及融合向量乘法器和使用其进行运算的方法。

背景技术

随着大数据时代的来临,神经网络算法成为了近些年人工智能领域的一个研究热点,在模式识别、图像分析、智能机器人等方面都得到了广泛的应用。但是,由于该算法常用于处理大数据的情况,其中又包含多层的结构,大量的运算,使其对运算速度和运算规格提出了更高的要求。一方面给运算器的运算规模和运算速度提出了要求,因为面对大量的数据和神经网络算法中大量的运算,运算器要能够快速地完成所需的运算的任务,这就给运算器的速度提出了要求。另一方面,给运算器的动态可配置性提出了要求,这是因为在运算时,大量的运算数据,其数据规格未必相同,层与层之间的数据位宽和数据数量也不一定相同。同时,在能够容忍一定范围的精度损失的情况下,数据位宽的降低能够有效提高运算器的运算效率。在精度和效率二者的权衡需求下,增加了数据位宽的多样性和运算过程中数据位宽的动态可变性,所以运算器需要具有动态可配置性,满足不同的数据规格和不同的数据位宽的要求。

在现有技术中,一种实现神经网络的方式是直接在通用处理器(cpu)或者图形处理器(gpu)上进行运算,这种方法或者因其结构因兼顾通用性,故无法针对神经网络的运算进行有效加速,或者因其片上缓存太小,无法满足大量的神经网络的运算的要求。另一种实现方式就是在现场可编程逻辑门阵列(fpga)或者专用集成电路(asic)上面针对神经网络进行设置和运算,但是一方面,fpga的主频过低,能耗较大,对神经网络运算进行可配置编程的时候受限于fpga本身的资源,故并不利于对神经网络运算进行加速,也不能够满足不同的数据规格和数据位宽的要求;另一方面,即使利用asic对神经网络进行设计并加速,但是这些装置都大多都受限于其存储装置和运算装置,只能支持固定长度的数据存储和运算,无法动态配置不同位宽的数据间的运算,灵活性不足。

公开内容

(一)要解决的技术问题

本公开的目的在于,提供一种计算位宽动态可配置的处理装置及方法,以解决以上所述的至少一项技术问题

(二)技术方案

根据本公开的一方面,提供一种融合向量乘法器,用于向量间内积运算,其中待运算的向量为乘数向量和被乘数的维度均为n+1,特征在于包括:

n+1个乘法子单元,分别用于对向量每一维度进行乘法操作,每次取乘数向量每一维度低n位进行乘法操作,每次取出n位后,该n位从乘数向量的每一维度的二进制数中移出,其中,n大于1且小于n+1;

加法树,每次对n+1个乘法子单元同次操作后的结果进行相加;

结果寄存器,寄存加法树每次相加的结果,并送入加法树参与下次运算。

在进一步的实施方案中,每一所述乘法子单元包括用于每次移出乘数低n位的第一移位寄存器。

在进一步的实施方案中,每一所述乘法子单元还包括用于对每次进行乘法操作后的结果进行移位的第二移位寄存器。

在进一步的实施方案中,每一所述乘法子单元包括输入选择电路,用于每次输入被乘数向量中对应维度的数以及乘数向量对应维度的低n位,乘数的低n位值分别与被乘数做“与”运算,送入所述第二移位寄存器。

在进一步的实施方案中,所述n为2。

在进一步的实施方案中,所述第二移位寄存器进行移位按照如下方式:如输入的数据为第i次操作的n位中的j位运算结果,则当次数据左移位数为:(i-1)*n+(j-1);其中i介于1和之间,表示向下取整;j介于1至n之间。

根据本公开的再一方面,提供一种使用以上任一所述融合向量乘法器进行运算的方法,包括:

将所述乘数向量和被乘数各自对应的维度分别送入乘法子单元进行运算,其中每一乘法子单元对向量每一维度进行乘法操作,每次取乘数向量每一维度低n位进行乘法操作,每次取出n位后,该n位从乘数向量的每一维度的二进制数中移出,其中,n大于1且小于n+1;

采用加法树每次对n+1个乘法子单元同次操作后的结果进行相加;

应用结果寄存器寄存加法树每次相加的结果,并送入加法树参与下次运算,直至乘数为0。

在进一步的实施方案中,还包括:在每次乘法子单元运算时,通过第一移位寄存器每次移出乘数低n位;以及通过第二移位寄存器对每次进行乘法操作后的结果进行移位。

在进一步的实施方案中,所述第二移位寄存器进行移位按照如下方式:如输入的数据为第i次操作的n位中的j位运算结果,则当次数据左移位数为:(i-1)*n+(j-1);其中i介于1和之间,表示向下取整;j介于1至n之间。

根据本公开的再一方面,提供一种神经网络运算装置,包括以上任一所述的融合向量乘法器。所述第二移位寄存器进行移位按照如下方式:如输入的数据为第i次操作的n位中的j位运算结果,则当次数据左移位数为:(i-1)*n+(j-1);其中i介于1和之间,表示向下取整;j介于1至n之间。

(三)有益效果

本公开提供的融合向量乘法器可以有效利用数据的稀疏性,只进行有效的运算,即非0数据之间的运算。从而减少了无效的运算,加快运算速度,提高了性能功耗比。。通过采用基础乘法器、稀疏乘法器和/或融合向量乘法器改变运算顺序,大大减少了对移位值的计数操作从而有效提高了性能功耗比。

附图说明

图1是本公开一实施例提供的计算位宽动态可配置的神经网络处理器的处理装置的结构示意图。

图2是本公开另一实施例提供的计算位宽动态可配置的神经网络处理器的处理装置结构示意图。

图3是本公开再一实施例提供的计算位宽动态可配置的神经网络处理器的结构示意图。

图4是本公开又一实施例提供的计算位宽动态可配置的神经网络处理器的另一个实施例的结构示意图。

图5是本公开提供的一个实施例的基础乘法器装置的结构示意图。

图6是本公开提供的一个实施例的稀疏乘法器装置的结构示意图。

图7是本公开提供的一个实施例的基础乘法器或稀疏乘法器进行向量乘法的装置的结构示意图。

图8是本公开提供的一个实施例的融合向量乘法器进行向量乘法的装置的结构示意图。

图9是本公开提供的融合向量乘法器装置和其他乘法器装置具体实施流程的结构示意图。

图10是本公开一实施例提供的计算位宽动态可配置的神经网络处理器的方法流程图。

具体实施方式

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。

图1是本公开实施例提供的计算位宽动态可配置的神经网络处理器的处理装置的结构示意图。如图1所示,本装置主要分为三个部分,控制部分、运算部分和存储部分。控制部分向运算部分和存储部分发出控制信号,来控制二者的运行,协调二者间的数据传输。存储部分用于存储相关数据,相关数据包括运算结果,输入数据(包括神经网络的待运算数据和控制指令)、神经网络参数和查找表,还可以包括中间结果、最终结果、神经元、突触、待缓存数据等等,可以根据需求不同,对具体的存储数据内容、存储组织方式和存取调用方式进行不同的规划。运算部分包含多种运算器,用于数据的运算,包括加法器、基础乘法器、稀疏乘法器和/或融合向量乘法器,其中,运算器能够满足不同计算位宽的数据进行运算,根据不同的需求,可以进行不同位宽的运算数据之间的运算。

图2是本公开一个实施例的神经网络处理器的装置的结构示意图。如图2所示,本装置的结构为,控制部分连接存储部分的每个模块或子模块和运算部分,由一个先进先出队列和一个控制处理器组成,先进先出队列用于存储控制信号,控制处理器用于取出待执行的控制信号,对控制逻辑进行分析后,对存储部分和运算部分进行控制和协调。存储部分分为三个模块,输入存储模块、输出存储模块、突触存储模块,其中输出存储模块可以用于存储中间结果和最终结果。运算部分主要用于加速卷积层、全连接层或/和池化(pooling)层的运算,故运算部分也主要分为三个模块,乘法器模块、加法树模块和进行非线性运算模块(如,该模块可以完成sigmoid函数运算),三个模块可以采用流水线的方式并行执行。本装置能够加速卷积神经网络的运算过程,减少片内片外的数据交换,节约存储空间。

图3是本公开另一个实施例的神经网络处理器的处理装置的结构示意图。如图3所示,本装置的结构为,控制部分连接存储部分的每个模块和运算部分,由一个先进先出队列和一个控制处理器组成,先进先出队列用于存储控制信号,控制处理器用于取出待执行的控制信号,对控制逻辑进行分析后,对存储部分和运算部分进行控制和协调。存储部分主要包含输入存储模块、输出存储模块和突触存储模块。本装置中,将突触存储模块分为多个模块,同时,配置多个运算单元。每一次运算的时候,输入存储模块向所有的运算单元传递输入数据,突触存储模块向对应的运算单元传递突触数据,运算模块进行运算后,将结果写到输出存储模块中。这样,在参数多的大规模运算当中,明显提高了运算效率。本装置能够有效加速卷积神经网络的运算过程,尤其适用于网络规模比较大,参数比较多的情况。

图4是本公开再一个实施例的神经网络处理器的装置的结构示意图。如图4所示,本装置的结构为,控制部分连接存储部分的每个模块和运算部分,由一个指令队列和一个解码器组成,每一次执行新的指令时,从指令队列中取出一条新的指令,送入解码器,通过解码器进行解码,将控制信息送入每个存储模块和运算模块。存储部分包括四个模块,输入存储模块、输出存储模块、突触存储模块和缓存模块,其中输出存储模块可以用于存储中间结果和最终结果。其中,每一次输入存储模块和突触存储模块向运算部分传递数据,都是先将数据传入缓存模块中,再送入相应的运算模块中,同样的,当运算模块运算完毕,将结果也是先送入缓存模块中,再从缓存模块写入输出存储模块。运算部分主要由多个运算模块组成,包括第一运算模块和第二运算模块。运算模块间可以并行执行相关运算,也可以相互传递数据,从而降低具有局部性的数据的重用距离,进一步提高运算速度。第一运算模块主要用于加速神经网络算法中相同或不同计算位宽的线性运算,包括:矩阵间乘法、加法、乘法混合加法;矩阵和向量;矩阵和常数;向量间;向量与常数;常数与常数,还可以用于比较运算、选择最大/小值等,优选的运算包括点积、矩阵乘法和/或矩阵加法运算。第二运算模块用于完成上述第一运算模块中未完成的运算,包括非线性运算、除法运算、单独的加法运算或单独的乘法运算。这样的好处是能够根据控制指令,在计算过程中,对数据动态调整位宽,从而使得运算部分、存储部分的硬件利用率能够得到进一步提升。

图5是本公开的又一实施例的用于本装置的基础乘法器装置示意图,能够满足计算位宽动态可配置的要求。如图5所示,m位的被乘数和n位的乘数,其中m,n均为正整数,也就是说,这里的被乘数和乘数的位数可以相等,也可以不相等。将乘数的低n位(n为正整数,且1<n≤n)输入至输入选择中,当乘数的低n值分别与被乘数做“与”运算,即乘数该位值为1,则取被乘数本身,否则取0。同时,将乘数送入第一移位寄存器中进行移位,将低n位移出,则下一次再输入至输入选择中的为新的低n位。输入选择后的结果向上输入到第二移位寄存器进行相应的移位,再送入加法树中进行累加。这里进行累加的是进行输入选择并进行移位后的数据和之前进行累加的结果。得到结果后作为中间结果存入结果寄存器。待下一次被乘数进行输入选择后进行移位时,结果寄存器取出中间结果送入加法树(器)中进行累加。当乘数全为0时,乘法运算结束。

为更清楚的表明该基础乘法器的运算流程,我们给出一个具体实施例,假定被乘数为10111011,即m=8,乘数为1011,即n=4。

当n=2时,即每次移动2位的时候,该运算过程如下:首先,取出乘数的最低2位的11,和被乘数一起送入输入选择单元,选择均为被乘数本身,送入第一移位寄存器,最低位对应的选择出的被乘数无需移位,即10111011,次低位对应的选择出的被乘数左移1位,即101110110,送入加法树中,由于之前没有数字相加,故送入结果寄存器的为10111011与101110110的和,即1000110001。而后,乘数右移2位后取其最低2位,即10,和被乘数一起送入输入选择单元中,得到0和10111011,而后通过移位寄存器,0左移了2位还是0,10111011左移3位为10111011000,和结果寄存器中的1000110001一起送入加法树中进行运算,得到100000001001,送入结果寄存器中。此时,乘数右移2位,全部为0,即运算结束,结果寄存器中即为最终结果,即100000001001。

图6是本公开提供的一实施例用于本装置的稀疏乘法器装置示意图,能够满足要求的计算位宽动态可配置的要求。顾名思义,稀疏乘法器针对稀疏运算的情况,即当乘数或者被乘数用稀疏表示的方式表示出1的位置时,可以进一步提高了运算的有效性,加快运算速度。如图6所示,m位的被乘数和n位的乘数,其中m,n均为正整数,也就是说,这里的被乘数和乘数的位数可以相等,也可以不相等。这里,乘数用稀疏表示的方法,用绝对或相对位置的方式表示该乘数中1的位置。这里,我们的运算部分是可配置的,故当采用不同的表示方法进行运算时,运算器内部的装置可以根据需求进行配置。譬如,可以当结果寄存器进行累加时无需移位,那么可以规定此时和结果寄存器相接的移位寄存器不工作,此时乘数的移位信息也可以不传递到该移位寄存器中。相关具体细节均可以根据需要做相应的调整,来完成对被乘数的移位和对结果的累加等相关具体细节。

为更清楚的表明该稀疏乘法器的运算流程,我们给出一个具体实施例,假定被乘数为10111011,即m=8,乘数为00100010,即n=8。当采用绝对的表示方式来表示乘数,那么用绝对位置表示出乘数中1的位置,假定我们把数的最右侧一位称为第0位,第0位的左侧一位称为第1位,以此类推。那么,该乘数表示为(1,5)。同时,我们要求该实施例中的与结果寄存器相连的移位寄存器不工作,乘数的数据无需传递给该移位寄存器。那么首先取出乘数的第一个数,即1,表示在第1位处有一个1。将被乘数送入移位寄存器,然后移动1位后为101110110送入加法器。由于之前数字相加,故送入结果寄存器的结果为101110110。而后取出乘数的下一个1的位置,即5,和被乘数一起送入移位寄存器。在移位寄存器中,将被乘数右移5位,得到1011101100000,送入加法器。同时取出结果寄存器中的结果101110110,由于采用的这种绝对表示的方法无需进行移位,故可直接将该结果送入加法器进行累加,得到1100011010110。累加后的结果再次送入结果寄存器。此时,乘数中的1都已经计算完毕,故运算结束。如果采用相对的方式表示乘数,并定义其表示方法为从最高位(最左边)的第一个不为0的数字开始,到最低位,每两个不为0的数字间相距的位数。对于00100010,在第一个不为0的数字和下一个不为0的数字之间相距4位,在第二个不为0的数字到最低位,相距1位,故表示为(4,1)。这里,我们要求该实施例中的与结果寄存器相连的和与被乘数相连的移位寄存器均需要工作。首先,取出乘数的第一个数字4,送入两个移位寄存器中,那么将被乘数右移4位,和结果寄存器中的数据右移4位后送入加法器中进行累加。此时结果寄存器的数据为0,故得到累加结果101110110000,送入结果寄存器保存。而后,取出乘数的第二个数字1,那么将该值送入移位寄存器中,得到101110110和1011101100000,送入加法器进行累加,得到结果1100011010110。该结果再次送入结果寄存器。此时,乘数中的1都已经计算完毕,故运算结束。这样,可以有效利用数据的稀疏性,只进行有效的运算,即非0数据之间的运算。从而减少了无效的运算,加快运算速度,提高了性能功耗比。

图8是本公开提供的一个实施例的融合向量乘法器进行向量乘法的装置的结构示意图。这里,我们假定计算向量的内积值,将相应维度的数据送入乘法器中等待运算,如图8所示。这里,要求的维度相同,均为(n+1),但是每一维度的位宽不一定相同,同时假定每次取n位进行运算,其中n为大于1且不大于的一个维度的位宽的正整数。首先,取b0的低n位和a0同时送入第一个输入选择中,将b0的低n位分别与a0做与运算,得到的选择的结果送入后面的移位寄存器进行移位。取移位后,将结果送入加法树中。在此过程中,每个维度都和第一维度进行着相同的操作。而后通过加法树,对这些维度送入的数据进行累加,并将结果寄存器中的值送入加法树中,一同进行累加,得到累加后的结果再送入结果寄存器中。在运算的同时,每一维度的bi(i=0,1,……,n)值送入移位寄存器中右移n位后,重复上述操作,即取移位后的bi(i=0,1,……,n)值的最低n位和对应的ai(i=0,1,……,n)值一起送入输入选择中进行选择,再送入移位寄存器中进行移位,而后送入加法树中进行累加。不断重复该过程直到每一维度的bi(i=0,1,……,n)值全为0,运算结束,此时结果寄存器中的数据即为所求的最终结果。利用该乘法器能够灵活的配置待运算数据的位宽,无需在每进行一组数据乘法时就需要重新对被乘数移位位数进行计数的过程。同时,当数据位数比较低或者向量位数比较高的时候,能够极大地利用数据低位宽、向量高维度的特性,可以采用流水线的方式并行执行该过程,降低运行所需时间,进一步加快运算速度,提高性能功耗比。

我们可以采用多种方式来完成向量的内积运算,结合图7、图8和图9进行说明。首先我们假定的维度为8,即n=7,的位宽为8位,即的每一维度均为8位,即ai={ai7…ai1ai0},其中i=0,1,……,7;的位宽为4位,即的每一维度均为4位,即bi={bi3bi2bi1bi0},其中i=0,1,……,7。那么向量内积

采用基础乘法器或上述的基础或稀疏乘法器(假定n为2,即每次乘数移动2位)时的运算流程分为两个阶段:首先分别计算各自分量的乘积,然后再进行求和,如图7所示。具体的说,对于某一维度ai和bi进行计算,移位计数器清零。第一个时钟周期取bi的最低两位bi0,bi1,输入选择、移位、送入加法器,得到ai*bi0bi1的值,并将移位计数器加2;第二个时钟周期,bi右移2位后取最低两位得到最低位bi2,bi3,输入选择、移位得到ai*bi2bi3,将结果与之前的和相加,得到最终结果ai*bi0bi1bi2bi3,即得到该维度的最终结果ai*bi。进行下一维度的运算,输入ai+1和bi+1,移位计数器清零……直到每一维度运算完毕,得到(a0*b0,a1*b1,……,a7*b7),阶段1运算完毕。而后,在阶段2,将乘积送入一个加法树中进行加法运算,得到最终的向量内积的结果,即在阶段1中,可以选择1个乘法器,依次计算每个维度;也可以提供多个乘法器并行运算,在一个乘法器中完成一个维度的运算,如图7所示。当采用多个乘法器时,每个维度的乘数bi的移位值都需要重新进行计数。该阶段的乘法器采用上述的基础乘法器或者稀疏乘法器均可。

利用融合向量乘法器,是直接整体进行水平方式的累加运算,其结构如图8所示,将每一维度的一个分量的乘积运算完毕即送入加法树中进行累加,直到运算完毕,得到最终结果。其运算流程如图9的椭圆形框所示,第一个时钟周期,每一维计算得到ai*bi0(i=0,1,……,7)的乘积,送入加法树中累加,计算结果送入结果寄存器,移位计数器加1;第二个时钟周期,每一维根据移位计数器计算得到2*ai*bi1(i=0,1,……,7)的乘积,和结果寄存器的数据一同送入加法树中累加,移位计数器加1;第三个时钟周期,每一维根据移位计数器计算得到4*ai*bi2(i=0,1,……,7)的乘积,和结果寄存器的数据一同送入加法树中累加,移位计数器加1;最后,第四个时钟周期,计算得到8*ai*bi3(i=0,1,……,7)的乘积,和结果寄存器的数据一同送入加法树中累加,得到最终结果。因此我们在4个运算周期之后就得到了所需要的结果,运算过程中,共移位3次。而一般的乘法器,每个数据运算都需要进行移位操作,即,在有4个操作数的情况下,共需要4*3=12次移位操作。所以,我们的设计,通过改变运算顺序,大大减少了对移位值的计数操作从而有效提高了性能功耗比。

综上所述,利用该装置和方法能够明显提高神经网络的运算速度,同时具有动态可配置性,满足数据位宽的多样性和运算过程中数据位宽的动态可变性的相关要求,具有灵活性强、可配置程度高、运算速度快、功耗低等优点。

在一个实施例里,本公开公开了一个芯片,其包括了上述神经网络处理器。

在一个实施例里,本公开公开了一个芯片封装结构,其包括了上述芯片。

在一个实施例里,本公开公开了一个板卡,其包括了上述芯片封装结构。

在一个实施例里,本公开公开了一个电子装置,其包括了上述板卡。

电子装置包括但不限于数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。

所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。

根据本公开实施例的另一方面,还提供一种计算位宽动态可配置的神经网络处理器的方法,参见图10所示,包括步骤:

s0:控制部分生成控制指令,传送给存储部分和运算部分;

s1:存储部分根据接收的控制指令,向运算部分输入神经网络的待运算数据;

s2:运算部分根据接收的控制指令,选择第一运算模块中的对应类型的乘法器和加法器;

s3:运算部分根据输入的待运算数据和神经网络参数以及控制指令,对不同计算位宽的神经网络的待运算数据进行运算。

进一步的,步骤s3中第一运算模块包括采用加法器,以及基础乘法器、稀疏乘法器和/或融合向量乘法器对神经网络的待运算数据进行运算。

本公开所提供的实施例中,应理解到,所揭露的相关装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述部分或模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个部分或模块可以结合或者可以集成到一个系统,或一些特征可以忽略或者不执行。

本领域技术人员可以知晓,以上各功能单元/模块都可以是硬件,比如该硬件可以是电路,包括数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器等等。所述计算装置中的计算模块可以是任何适当的硬件处理器,比如cpu、gpu、fpga、dsp和asic等等。所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如rram,dram,sram,edram,hbm,hmc等等。以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

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