具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先,参照图1来描述用于实现本发明实施例的电子设备100。电子设备100可用来实现本发明各实施例的神经网络的乘法处理方法以及其他运算。
如图1所示,电子设备100包括一个或多个处理器102、一个或多个存储器104、输入装置106、输出装置108以及数据采集器110,这些组件通过总线系统112和/或其它形式的连接机构(未示出)互连。应当注意,图1所示的电子设备100的组件和结构只是示例性的,而非限制性的,根据需要,所述电子设备也可以具有其他组件和结构。
所述处理器102可以采用数字信号处理器(DSP)、现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、ASIC(Application Specific Integrated Circuit)中的至少一种硬件形式来实现,所述处理器102可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制所述电子设备100中的其它组件以执行期望的功能。
所述存储器104可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器102可以运行所述程序指令,以实现下文所述的本发明实施例中(由处理器实现)的客户端功能以及/或者其它期望的功能。在所述计算机可读存储介质中还可以存储各种应用程序和各种数据,例如所述应用程序使用和/或产生的各种数据等。
所述输入装置106可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。
所述输出装置108可以向外部(例如,用户)输出各种信息(例如,图像或声音),并且可以包括显示器、扬声器等中的一个或多个。
所述数据采集器110用于进行数据采集,其中,数据采集器所采集的数据用于输入至所述神经网络中进行运算,例如,数据采集器可以拍摄用户期望的图像(例如照片、视频等),然后,将该图像输入至所述神经网络中进行运算,数据采集器还可以将所拍摄的图像存储在所述存储器104中以供其它组件使用。
示例性地,用于实现根据本发明实施例的神经网络的乘法处理方法的电子设备可以被实现为诸如摄像机、抓拍机、智能手机、平板电脑等智能终端。
当在FPGA(Field-Programmable Gate Array),DSP(Digital SignalProcessing),ARM(Advanced RISC Machine),ASIC(Application Specific IntegratedCircuit)等硬件上实现神经网络的算法时,特别是深度神经网络的算法时,卷积作为整个深度神经网络中计算操作最大的模块之一,乘法操作在其中也占据着非常大的比例。在现有的计算方式中,首先是对深度神经网络进行量化处理,量化过后的深度神经网络在卷积操作时低位宽输入的参数经过乘法器进行乘法计算时,需要计算相应位宽的乘法器进行乘法计算。例如,如果两个2位的二进制数进行乘法计算,此时,就需要一个2乘以2的乘法器对这两个2位的二进制数进行乘法计算。但是,上述乘法器会耗费大量的计算逻辑。由于FPGA的逻辑电路是有限的,因此通过现有的计算方式会造成FPGA的逻辑电路的大量浪费。基于此,本发明实施例中提出了一种神经网络的乘法处理方法,通过该处理方法能够在减少硬件的计算逻辑的情况下,仍能产生准确的预测结果。
根据本发明实施例,提供了一种神经网络的乘法处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在图1所示的电子设备或其他具有诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图2是根据本发明实施例的一种神经网络的乘法处理方法的流程图,如图2所示,该方法包括如下步骤:
步骤S202,在通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,对获取到的预设乘法指令进行编译,得到微指令集合,其中,所述微指令集合中包括至少一条微指令;
在本发明实施例中,当通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,获取到乘法指令。此时,就可以通过指令译码器对预设乘法指令进行编译,得到微指令集合。
步骤S204,基于所述微指令集合在所述处理器所对应的集成电路中确定乘法计算单元;
其中,处理器所对应的集成电路,是指构成处理器的相关电路本身。例如当处理器为FPGA时,处理器所对应的集成电路就是指该FPGA电路本身,而在所述处理器所对应的集成电路中确定的乘法计算单元就是该FPGA电路中的某个或几个实现相应功能的逻辑门阵列区域。
步骤S206,在所述微指令集合的控制下控制所述乘法计算单元对待计算数据进行乘法计算的相关操作;
其中,所述乘法计算单元中乘法器的数量为基于所述待计算数据确定出的,且所述乘法计算单元中乘法器的计算位宽低于所述待计算数据的位宽,所述乘法计算的相关操作包括:乘法操作,移位操作和加法操作。
在本实施例中,微指令集合中所包含的指令用于指示乘法计算单元执行对应的乘法计算操作,例如,乘法操作,移位操作和加法操作。
在本发明实施例中,可以基于微指令集合在集成电路中构建乘法计算单元,其中,该乘法计算单元中乘法器的计算位宽低于待计算数据的位宽。例如,如果待计算数据为01和10,在现有技术中,需要1个计算位宽为2位的乘法器来对该待计算数据进行计算,但是,该2位的乘法器会浪费更多计算资源。因此,在本发明实施例中,可以确定4个1位的乘法器,然后,基于4个1位的乘法器来对该待计算数据进行计算。也就是说,在本发明实施例中,每个乘法器的计算位宽是低于待计算数据的位宽的,从而能够节省集成电路的计算逻辑。其中,在本发明各个实施例中,计算位宽是指乘法器在运行时可以处理的最大位数,例如,通常所说的8位乘法器的计算位宽就是8位,16位乘法器的计算位宽就是16位。
进一步需要说明的是,该乘法处理方法不会受到待计算数据的位宽的限制。在现有技术中,一个2位的乘法器仅能对两位的数据进行乘法计算,而不能对其他位数的数据进行乘法计算;一个4位的乘法器仅能对四位的数据进行乘法计算,而不能对其他位数的数据进行乘法计算。但是,通过本发明实施所提供的方法,通过微指令集合能够在集成电路中选择对应的乘法计算单元来计算任意位宽的待计算数据,从而节省了大量的计算资源。
在本发明实施例中,首先,在通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,对获取到的预设乘法指令进行编译,得到微指令集合,其中,微指令集合中包括至少一条微指令;然后,基于微指令集合在处理器所对应的集成电路中确定乘法计算单元,并在微指令的控制下控制乘法计算单元对待计算数据进行乘法计算的相关操作,乘法计算的相关操作包括:乘法操作,移位操作和加法操作。在本发明实施例中,通过微指令集合控制使用位宽更低的乘法计算单元在对神经网络中的乘法运算进行计算的方式,即,通过位宽低于待计算数据位宽的乘法器的乘法操作以及移位操作与加法操作的组合运用,代替了传统的使用高位宽乘法器直接进行乘法运算的方式,能够缓解现有技术中存在的在通过硬件设备对神经网络的乘法运算进行计算时计算逻辑消耗较大的技术问题,从而实现了节省硬件资源的技术效果,大大节省了神经网络运算所需要的硬件配置。
在本发明实施例中,预先设置乘法指令(即,上述预设乘法指令)。当对神经网络计算节点中的乘法运算进行乘法计算时,则调用该预设乘法指令,并通过指令译码器对该预设乘法指令进行编译,得到微指令集合。在得到微指令集合之后,就可以基于微指令集合在集成电路中确定乘法计算单元。
需要说明的是,在预设乘法指令为多个的情况下,如果在某一指令所占计算资源不超过集成电路中最大容量的情况下,那么可以同时执行上述多个预设乘法指令。例如,预设乘法指令1为计算2个2位数的乘积,预设乘法指令2为计算2个4位数。在一个实施方式中,预设乘法指令1需要4个1位乘法器,预设乘法指令2需要16个1位乘法器,如果集成电路中的乘法器满足计算要求,那么可以并行执行预设乘法指令1和预设乘法指令2,以提高数据计算速度,同时加强逻辑资源的利用率。如果某一条指令占用计算资源过多,导致两条指令无法并行执行时,那么这两条指令可以按照串行执行的方式来依次执行。
在一个可选的实施方式中,步骤S204,基于所述微指令集合在所述处理器所对应的集成电路中确定乘法计算单元包括:
基于所述微指令集合在所述集成电路中确定多个N位乘法器,多个移位器和多个加法器,其中,每个N位乘法器的输出端与相应的移位器的输入端相连接,每个加法器的输入端与对应的两个移位器的输出端或对应的两个加法器的输出端相连接,以用于将每个N位乘法器的输出进行移位操作与相加操作从而得到所述乘法计算的结果,具体示例可参见图3、图7或图8以及相关文字描述。在本实施例中,一个N位乘法器的输出端与一个移位器的输入端相连接,一个加法器的输入端与任意两个移位器的输出端相连接,只要通过相关连接关系实现将每个N位乘法器的输出进行移位操作与相加操作从而得到所述乘法计算的结果即可,在此并不对具体连接关系进行限定。其中,N为所述乘法器的计算位宽。
在本发明实施例中,可以基于微指令集合在集成电路中确定多个N位乘法器,多个移位器和多个加法器。上述N可以取值为1,还可以取值为2,具体选择多少可以根据待计算数据的实际位宽来进行确定。
当N的取值为1时,乘法计算单元的结构如图3所示,从图3中可以看出,当待计算数据的位宽为n时,可以确定出n*n个1位乘法器,此时,还可以选择出n*n个1移位器。通过上述描述可知,在本实施例中,一个1位乘法器的输出端与一个移位器的输入端相连接,一个加法器的输入端与任意两个移位器的输出端相连接,即如图3所示,乘法器1与移位器1相连接,乘法器2与移位器2相连接,…,乘法器n*n与移位器n*n相连接。加法器1与移位器1和移位器2相连接,加法器H与移位器(n*n)-1和移位器n*n相连接,然后,加法器21与加法器1和与加法器2相连接,加法器H(H-1)与加法器H和与加法器(H-1)相邻的加法器相连接。最终,加法器F和加法器G与加法器K相连接,加法器K的输出结果即为乘法计算结果。
需要说明的是,如图3所示的乘法计算单元为一种可选的实施方式,当待计算数据不同时,可以按照如图3所示的规律对图3进行变化,从而满足待计算数据的计算逻辑,对比本实施例中不做具体限定。
例如,待计算数据的位宽为2位,此时,指令译码器对预设乘法指令进行编译之后,得到微指令集合。此时,就可以基于微指令集合在集成电路中确定4个1位乘法器,4个移位器,以及3个加法器。
又例如,待计算数据的位宽为3位和5位时,此时,指令译码器对预设乘法指令进行编译之后,得到微指令集合。此时,就可以基于微指令集合在集成电路中确定15个1位乘法器,15个移位器,以及8个加法器。
在一个实施例中,如图4所示,该方法包括如下步骤:
步骤S401,在通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,对所述预设乘法指令进行编译,得到第一组微指令,其中,所述第一组微指令中包括多个乘法指令,每个所述乘法指令中包括每个所述N位乘法器的输入数据,每个所述乘法指令用于指示对应的N位乘法器对输入数据进行乘法操作;
步骤S402,基于所述第一组微指令中所包括的多个乘法指令确定第一数量信息,其中,所述第一数量信息为所述多个N位乘法器的数量;
步骤S403,基于所述第一数量信息生成第一控制信号,其中,所述第一控制信号用于控制所述多个N位乘法器开启;
步骤S404,在所述微指令集合的控制下控制所述乘法计算单元对待计算数据进行乘法计算的相关操作。其中,步骤S404与上述步骤S206相同。
在本发明实施例中,在通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,对预设乘法指令进行编译,得到第一组微指令。在第一组微指令中包括多个乘法指令,每个所述乘法指令中包括每个所述N位乘法器的输入数据,每个所述乘法指令用于指示对应的N位乘法器对输入数据进行乘法操作。在得到第一组微指令之后,就可以基于第一组微指令中所包括的多个乘法指令确定第一数量信息,即所需要的多个N位乘法器的数量。在确定出多个N位乘法器的数量之后,就可以基于第一数量信息生成第一控制信号,以通过该第一控制信号控制多个N位乘法器开启。此时,就可以在第一组微指令的控制下控制多个N位乘法器对其对应的数据进行乘法计算。
例如,如果待计算数据为:01和11。上述预设乘法指令可以表示为:MUL 10 11 X,其中,X为输出。对该预设乘法指令进行编译之后,得到第一组微指令,即:MUL 1 1 X0,MUL1 1 X1,MUL 0 1 X2,MUL 0 1X3,其中,X0,X1,X2和X3分别为乘法器的输出数据。此时,可以基于第一组微指令确定出需要4个1位乘法器。接下来,就可以生成第一控制信号,并基于该第一控制信号控制4个1位乘法器开启,并通过4个1位乘法器,按照上述乘法指令对其对应的数据进行乘法计算。
在一个实施例中,如图5所示,该方法包括如下步骤:
步骤S501,在通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,对所述预设乘法指令进行编译,得到第二组微指令;其中,所述第二组微指令中包括多个移动指令,每个所述移动指令包括每个所述移位器所移动的数据和移动位数,每个所述移动指令用于指示对应的移位器对其所移动的数据进行移位操作;
需要说明的是,步骤S501可以与步骤S401同时来执行,即指令译码器在对预设乘法指令进行编译时,可以同时得到第一组微指令和第二组微指令。
步骤S502,基于所述第二组微指令中所包括的多个移动指令确定第二数量信息,其中,所述第二数量信息为所述多个移位器的信息的数量;
需要说明的是,步骤S502可以与步骤S402同时来执行,在基于第一组微指令中所包括的多个乘法指令确定第一数量信息的同时,还可以基于第二组微指令中所包括的多个移位指令确定第二数量信息。
步骤S503,基于所述第二数量信息生成第二控制信号,其中,所述第二控制信号用于控制所述多个移位器开启;
需要说明的是,步骤S503可以与步骤S403同时来执行,在基于第一数量信息生成第一控制信号的同时,还可以基于第二数量信息生成第二控制信号。
步骤S504,在所述微指令集合的控制下控制所述乘法计算单元对待计算数据进行乘法计算的相关操作。其中,步骤S504与上述步骤S206相同。
在本发明实施例中,在通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,对预设乘法指令进行编译,得到第一组微指令和第二组微指令。在第一组微指令中包括多个乘法指令,每个所述乘法指令中包括每个所述N位乘法器的输入数据,每个所述乘法指令用于指示对应的N位乘法器对输入数据进行乘法操作。在第二组微指令中包括多个移位指令,每个所述移动指令包括每个所述移位器所移动的数据和移动位数,每个所述移动指令用于指示对应的移位器对其所移动的数据进行移位操作。
在得到第一组微指令和第二组微指令之后,就可以基于第一组微指令中所携带的多个N位乘法器的信息确定第一数量信息,即所需要的多个N位乘法器的数量。以及基于第二组微指令中所携带的多个移位器的信息确定第二数量信息,即所需要的多个移位器的数量。
在确定出多个N位乘法器的数量和多个移位器的数量之后,就可以基于第一数量信息生成第一控制信号,以及基于第二数量信息生成第二控制信号。通过该第一控制信号控制多个N位乘法器开启,并通过第二控制信号控制多个移位器开启。此时,就可以在第一组微指令的控制下控制多个N位乘法器对其对应的数据进行乘法计算;以及在第二组微指令的控制下控制多个移位器对多个N位乘法器的输出数据进行移位操作。
例如,如果待计算数据为:01和11。上述预设乘法指令可以表示为:MUL 10 11 X,其中,X为输出。对该预设乘法指令进行编译之后,得到第一组微指令,即:MUL 1 1 X0,MUL1 1 X1,MUL 0 1 X2,MUL 0 1X3;以及得到第二组微指令,即:shift X0 0,shilf X1 1,shift X2 1,shiflt X3 2,其中,X0,X1,X2和X3为多个移位器所移动的数据,0,1,1和2为移动位数。此时,可以基于第一组微指令确定出需要4个1位乘法器;以及基于第二组微指令确定出需要4个移位器。接下来,就可以生成第一控制信号,并基于该第一控制信号控制4个1位乘法器开启;以及生成第二控制信号,并基于该第二控制信号控制4个移位器开启。
在一个实施例中,如图6所示,该方法包括如下步骤:
步骤S601,在通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,对所述预设乘法指令进行编译,得到第三组微指令;其中,所述第三组微指令中包括多个加法指令,且每个所述加法指令中包括每个加法器所累加的数据,每个所述加法指令用于指示对应的加法器对其所累加的数据进行累加操作;
需要说明的是,步骤S601可以与步骤S401和步骤S501同时来执行,即指令译码器在对预设乘法指令进行编译时,可以同时得到第一组微指令,第二组微指令和第三组微指令。
步骤S602,基于所述第三组微指令中所包括的多个加法指令确定第三数量信息,其中,所述第三数量信息为所述多个加法器的数量;
需要说明的是,步骤S602可以与步骤S402和步骤S502同时来执行,在基于第一组微指令中所包括的多个乘法指令确定第一数量信息,以及基于第二组微指令中所包括的多个移位指令确定第二数量信息的同时,还可以基于第三组微指令中所包括的加法指令确定第二数量信息。
步骤S603,基于所述第三数量信息生成第三控制信号,其中,所述第三控制信号用于控制所述多个加法器开启;
需要说明的是,步骤S503可以与步骤S403和步骤S503同时来执行,在基于第一数量信息生成第一控制信号,以及基于第二数量信息生成第二控制信号的同时,还可以基于第三数量信息生成第三控制信号。
步骤S604,在所述微指令集合的控制下控制所述乘法计算单元对待计算数据进行乘法计算的相关操作。其中,步骤S604与上述步骤S206相同。
在本发明实施例中,在通过处理器对神经网络计算节点中的乘法运算进行乘法计算时,对预设乘法指令进行编译,得到第一组微指令,第二组微指令和第三组微指令。在第一组微指令中包括多个乘法指令,每个所述乘法指令中包括每个所述N位乘法器的输入数据,每个所述乘法指令用于指示对应的N位乘法器对输入数据进行乘法操作据。在第二组微指令中包括多个移动指令,每个所述移动指令包括每个所述移位器所移动的数据和移动位数,每个所述移动指令用于指示对应的移位器对其所移动的数据进行移位操作。在第三组微指令中包括多个加法指令,每个所述加法指令中包括每个加法器所累加的数据,每个所述加法指令用于指示对应的加法器对其所累加的数据进行累加操作。
在得到第一组微指令,第二组微指令和第三组微指令之后,就可以基于第一组微指令中所包括的多个乘法指令确定第一数量信息,即所需要的多个N位乘法器的数量。以及基于第二组微指令中所包括的多个移位指令确定第二数量信息,即所需要的多个移位器的数量。以及基于第三组微指令中所包括的多个加法指令确定第三数量信息。
在确定出多个N位乘法器的数量和多个移位器的数量之后,就可以基于第一数量信息生成第一控制信号,以及基于第二数量信息生成第二控制信号,以及基于第三数量信息生成第三控制信号。通过该第一控制信号控制多个N位乘法器开启,并通过第二控制信号控制多个移位器开启,以及通过第三控制信号控制多个加法器开启。此时,就可以在第一组微指令的控制下控制多个N位乘法器对其对应的数据进行乘法计算;以及在第二组微指令的控制下控制多个移位器对多个N位乘法器的计算结果进行移位操作;以及在第三组微指令的控制下控制多个加法器对多个移位器的移位结果进行累加计算。
例如,如果待计算数据为:01和11。上述预设乘法指令可以表示为:MUL 10 11 X,其中,X为输出。对该预设乘法指令进行编译之后,得到第一组微指令,即:MUL 1 1 X0,MUL1 1 X1,MUL 0 1 X2,MUL 0 1X3;以及得到第二组微指令,即:shift X0 0,shift X1 1,shift X2 1,shift X3 2;第三组微指令,即:add X0 X1 o1,add X2 X3 o2,add o1 o2 X,其中,o1,o2和o3为上述三个加法器的累加计算结果,X为最终的输出。此时,可以基于第一组微指令确定出需要4个1位乘法器;以及基于第二组微指令确定出需要4个移位器;以及基于第三组微指令确定出需要3个加法器。接下来,就可以生成第一控制信号,并基于该第一控制信号控制4个1位乘法器开启;以及生成第二控制信号,并基于该第二控制信号控制4个移位器开启;以及生成第三控制信号,并基于该第三控制信号控制3个移位器开启。
需要说明的是,在本实施例中,乘法计算单元中乘法器的数量,以及乘法计算单元中乘法器的计算位宽可以是基于所述待计算数据中乘数的位宽和所述待计算数据中被乘数的位宽确定的。
具体地,当待计算数据中有任意一个数据的位宽为奇数时,此时乘法计算单元中N位乘法器的数量可以为N1*M1,N1和M1分别为待计算数据中两个数据的位宽,且该N位乘法器的位宽选择为1位宽的乘法器。
例如,当待计算数据分别为:00101和010时,则可以确定出待计算数据的位宽分别为5和3,为奇数。此时,可以确定出乘法计算单元中包含的多个N位乘法器的位宽为1位宽,且数量为15个,即15个1位宽的乘法器。
具体地,当待计算数据中有任意一个数据的位宽为偶数时,此时乘法计算单元中N位乘法器的数量可以为N2*M2,N2和M2分别为待计算数据中两个数据的位宽。
例如,当待计算数据分别为:01和10时,则可以确定出待计算数据的位宽分别为2和2,为偶数。此时,如果乘法计算单元中包含的多个N位乘法器的位宽为1位宽,此时,可以确定出多个N位乘法器的数量为4个,即4个1位宽的乘法器。
具体地,当待计算数据中数据的位宽为偶数时,在另一个可选的实施方式中,此时乘法计算单元中N位乘法器的数量可以为(N3/2)*(M3/2),N3和M3分别为待计算数据中两个数据的位宽。
例如,当待计算数据分别为:0001 0011 0010 1100和0010 1100 1110 0001时,则可以确定出待计算数据的位宽分别为16和16,为偶数。此时,如果乘法计算单元中包含的多个N位乘法器的位宽为2位宽,此时,可以确定出多个N位乘法器的数量为64个,即64个1位宽的乘法器。
需要说明的是,通过上述描述可知,在本实施例中,这里也可以通过预设指令集控制不断地用1位扩展成4位,8位的乘法器,或者用2位扩展成16位的乘法器,并且可以灵活实现3位,5位和7等位的乘法操作,以及两个操作数位宽不同的情况(例如,3bit权重和5bit特征图feature map),本发明实施例所提供的方法满足了特殊网络对特殊位宽的需求,从而灵活的实现神经网络的乘法计算。
本实施例中,可以结合图7至图9对上述过程进行描述。如图7所示,以2位宽的待计算数据为例进行介绍。
在量化神经网络中,已经完成从32位浮点数权重参数到8位、4位甚至更低的整数位权重的压缩。此时,量化神经网络在对输入数据进行乘法计算时,乘法的输入一般为高位宽的整型数据,例如,2位,4位和8位等数据进行乘法计算。由于神经网络中可能有不同位宽的计算需求,如果直接采用高位宽输入的乘法器,综合出来的硬件的电路中,所采用的逻辑门较多。基于此,在本发明实施例中,如图9所示,可以将高位乘法指令(其中,高位乘法指令可以理解为上述预设乘法指令)编译成低位乘法指令。如图9所示,将高位乘法指令:MUL1w1f a,b,c,c;MUL 1w1f e,f,0,d,进行编译,得到低位乘法指令MUL 1w1f a1,b1,c,c;MUL1w1f a1,b2,c,c;MUL 1w1f,a2,b1,c,c;MUL 1w1f a2,b2,c,c;MUL 1w1f e,f,0,d。在编译成低位乘法指令之后,就可以通过该低位乘法指令来控制低位乘法器来对待计算数据进行乘法运算,以降低硬件中逻辑门的使用,同时,还能够满足了特殊网络对特殊位宽的需求,根据不同乘法占用不同资源的情况下,可选择的实现并行指令执行,从而灵活的实现神经网络的乘法计算,提高资源的利用率。
假设,为待计算数据为2位的数据,如图7所示。在现有技术中,通过1个2位的乘法器来实现乘法操作,但是,在本发明实施例中,可以通过图7中右侧所示的逻辑电路来进行乘法运算,运算过程描述如下:
例如,待计算数据分别为:01和10。此时,可以基于第一控制信号控制4个1位乘法器开启。此时,就可以在第一组微指令的控制下控制该4个1位乘法器依次对待计算数据中每位数据进行乘法计算。如图8所示,例如,通过乘法器1计算A0=1和B0=0的乘积(即,C3),以及通过乘法器2计算A1=0和B0=0的乘积(即,C2),以及通过乘法器3计算A0=1和B1=1的乘积(即,C1),以及通过乘法器4计算A1=0和B1=1的乘积(即,C0)。在得到上述4个乘积之后,就可以在第二组微指令的控制下控制4个移位器对乘法计算结果进行移位操作,其中,4个移位器为基于第二控制信号控制开启的。具体地,移位器1用于对A1=0和B0=0的乘积向左移动0位,移位器2用于对A1=0和B0=0的乘积(即,C2)向左移动一位,移位器3用于对A0=1和B1=1的乘积向左移动一位,移位器4用于对A1=0和B1=1的乘积向左移动2位。最后,就可以在第三组微指令的控制下控制三个加法器对移位结果进行累加计算,其中,三个加法器为预先通过第三控制信号控制开启的(如图8所示的加法器1,加法器2和加法器3),进而,通过该加法器对上述三个移位器的移位结果进行累加计算,得到的最终计算结果为:10。
综上,通过上述描述可知,在量化神经网络卷积操作时,乘法的输入一般为高位宽的整型数据,例如,2位、4位、8位等,其中,神经网络中也存在不同位宽的乘法计算需求。如果直接采用为高位宽输入的乘法器,综合出来的硬件的电路中,所采用的逻辑门较多。在本实施例中,通过构建微指令集合(即,上述预设指令集合),包括乘法指令,移位指令,加法指令,多个N位乘法器来代替原本的高位乘法器,例如,采用4个1位的乘法器,以及移位操作代替原本的2位乘法器。也就是说,在本实施例中,能够以微指令的形式灵活的搭建不同位数乘法操作。而对于4位的乘法器可以同理的使用2位乘法器采用相同的结构替换,最终都替换为1乘1的乘法器,这里构建3位,5位和7位仍可以适用。
在另一实施例中,还提供了一种神经网络的乘法处理设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器中包括多个乘法器,所述处理器执行所述计算机程序时实现以下步骤:
所述处理器在对神经网络计算节点中的乘法运算进行乘法计算时,对获取到的预设乘法指令进行编译,得到微指令集合,其中,所述微指令集合中包括至少一条微指令;基于所述微指令集合在所述处理器所对应的集成电路中确定乘法计算单元,并在所述微指令集合的控制下控制所述乘法计算单元对待计算数据进行乘法计算的相关操作;其中,所述乘法计算单元的数量为基于所述待计算数据确定出的,且每个乘法计算单元的计算位宽低于所述待计算数据的位宽,所述乘法计算的相关操作包括:乘法操作,移位操作和加法操作。
在另一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述前述方法实施例所提供的方法的步骤。
本发明实施例所提供的神经网络的乘法处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。