CN115713104A - 用于神经网络的数据处理电路、神经网络电路和处理器 - Google Patents
用于神经网络的数据处理电路、神经网络电路和处理器 Download PDFInfo
- Publication number
- CN115713104A CN115713104A CN202211502566.5A CN202211502566A CN115713104A CN 115713104 A CN115713104 A CN 115713104A CN 202211502566 A CN202211502566 A CN 202211502566A CN 115713104 A CN115713104 A CN 115713104A
- Authority
- CN
- China
- Prior art keywords
- unit
- instruction
- instruction queue
- queue
- operand
- 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
- Advance Control (AREA)
Abstract
本申请提供了一种用于神经网络的数据处理电路、神经网络电路和处理器。数据处理电路包括M个计算单元以及输出单元。M个计算单元之间两两连接。M个计算单元分别与输出单元连接。第i个计算单元被配置为:接收第一指令队列以及操作数;确定第一指令队列中的第一个指令为目标指令,目标指令与第i个计算单元匹配;删除目标指令,以形成第二指令队列;对操作数进行处理;向输出单元以及M个计算单元输出第二指令队列和处理后的操作数;第一指令队列包括源指令队列或者第二指令队列。输出单元被配置为:接收第二指令队列;确定第二指令队列中的第一个指令为输出指令;将处理后的操作数输出。本申请的技术方案提高了神经网络的计算效率。
Description
技术领域
本申请涉及芯片散热技术领域,尤其涉及一种用于神经网络的数据处理电路、神经网络电路和处理器。
背景技术
随着科学技术的不断进步,深度学习算法的类型和应用领域也在不断拓展。作为深度学习算法的实现基础,神经网络的重要性是不言而喻的。
当下,人们对于深度学习算法的处理速度的要求越来越高。由此,出现了专门用于神经网络计算的神经网络处理器。这些神经网络处理器在实现深度学习算法的计算的过程中,往往需要对数据进行一系列的连续计算。在这样的连续计算的过程中,需要对数据存储单元进行多次读取和写入。这样高频率的存储器访问,降低了计算效率,并增加了总功耗。
因此,如何提高神经网络的计算效率是亟需解决的问题。
发明内容
本申请的目的在于提供一种用于神经网络的数据处理电路、神经网络电路和处理器,从而提高神经网络的计算效率。
在第一方面,本申请提供一种用于神经网络的数据处理电路。该数据处理电路包括:M个计算单元以及输出单元。M个计算单元之间两两连接。M个计算单元分别与输出单元连接。M为大于1的整数。M个计算单元中的第i个计算单元被配置为:接收第一指令队列以及与第一指令队列对应的操作数;确定第一指令队列中的第一个指令为目标指令,其中,目标指令与第i个计算单元匹配;从第一指令队列中删除目标指令,以形成第二指令队列;对与第一指令队列对应的操作数进行处理;以及,向输出单元以及M个计算单元输出第二指令队列和处理后的操作数。第一指令队列包括源指令队列或者第二指令队列。i为整数,且i的取值范围为1至M。输出单元被配置为:接收第二指令队列;确定第二指令队列中的第一个指令为输出指令;以及,将处理后的操作数输出。
根据一些可能的实施方式,M个计算单元中每一个计算单元的输出端可以与M个计算单元的输入端以及输出单元的输入端连接。
根据一些可能的实施方式,第一指令队列和第二指令队列中的每一个指令可以具有K个比特。K为正整数,并且K满足2K≥M+1。
根据一些可能的实施方式,第i个计算单元可以包括多路选择单元和基本运算单元。多路选择单元与基本运算单元连接。多路选择单元被配置为:接收第一指令队列以及与第一指令队列对应的操作数;确定第一指令队列中的第一个指令是否为目标指令;以及,响应于第一指令队列中的第一个指令是目标指令,将第一指令队列以及与第一指令队列对应的操作数输出至基本运算单元。基本运算单元被配置为:从第一指令队列中删除目标指令,以形成第二指令队列;对第一指令队列对应的操作数进行处理;以及,向输出单元以及M个计算单元输出第二指令队列和处理后的操作数。
根据一些可能的实施方式,第i个计算单元可以包括以下至少之一:ALU单元、IMAC单元、FADD单元、FMUL单元、I2F单元、F2I单元以及RSS单元。
根据一些可能的实施方式,M个计算单元可以用于以下至少之一:量化计算、反量化计算。
根据一些可能的实施方式,在M个计算单元用于量化计算的情况下,M个计算单元可以包括I2F单元、FMUL单元、FADD单元以及F2I单元。I2F单元被配置为:确定来自数据存储单元的第一指令队列中的第一个指令为定点-浮点转换指令;对来自数据存储单元的操作数进行定点-浮点转换;删除该第一指令队列中的所述定点-浮点转换指令,以形成第二指令队列;将转换结果作为操作数以及该第二指令队列作为第一指令队列输入FMUL单元。FMUL单元被配置为:确定来自I2F单元的第一指令队列中的第一个指令为浮点乘法指令;对来自I2F单元的操作数进行浮点乘法运算;删除该第一指令队列中的浮点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入FADD单元。FADD单元被配置为:确定来自FMUL单元的第一指令队列中的第一个指令为浮点加法指令;对来自FMUL单元的操作数进行浮点加法运算;删除该第一指令队列中的浮点加法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入F2I单元。F2I单元被配置为:确定来自FADD单元的第一指令队列中的第一个指令为浮点-定点转换指令;对来自FADD单元的操作数进行浮点-定点转换;删除该第一指令队列中的定点-浮点转换指令,以形成第二指令队列;以及,将转换结果作为操作数以及该第二指令队列输入输出单元。
根据一些可能的实施方式,在M个计算单元用于量化计算的情况下,M个计算单元可以包括IMAC单元、RSS单元以及ALU单元。IMAC单元被配置为:确定来自数据存储单元的第一指令队列中的第一个指令为定点乘法指令;对来自数据存储单元的操作数进行定点乘法运算;删除该第一指令队列中的定点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入RSS单元。RSS单元被配置为:确定来自IMAC单元的第一指令队列中的第一个指令为移位指令;对来自IMAC单元的操作数进行移位;删除该第一指令队列中的移位指令,以形成第二指令队列;以及,将移位结果作为操作数以及该第二指令队列作为第一指令队列输入ALU单元。ALU单元被配置为:确定来自RSS单元的第一指令队列中的第一个指令为定点加法指令;对来自RSS单元的操作数进行定点加法运算;删除该第一指令队列中的定点加法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列输入输出单元。
根据一些可能的实施方式,在M个计算单元用于反量化计算的情况下,M个计算单元可以包括ALU单元、I2F单元以及FMUL单元。ALU单元被配置为:确定来自数据存储单元的第一指令队列中的第一个指令为定点减法指令;对来自数据存储单元的操作数进行定点减法运算;删除该第一指令队列中的定点减法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入I2F单元。I2F单元被配置为:确定来自ALU单元的第一指令队列中的第一个指令为定点-浮点转换指令;对来自ALU单元的操作数进行定点-浮点转换;删除该第一指令队列中的定点-浮点转换指令,以形成第二指令队列;以及,将转换结果作为操作数以及该第二指令队列作为第一指令队列输入FMUL单元。FMUL单元被配置为:确定来自I2F单元的第一指令队列中的第一个指令为浮点乘法指令;对来自I2F单元的操作数进行浮点乘法运算;删除该第一指令队列中的浮点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列输入输出单元。
根据一些可能的实施方式,在M个计算单元用于反量化计算的情况下,M个计算单元可以包括ALU单元、IMAC单元以及RSS单元。ALU单元被配置为:确定来自数据存储单元的第一指令队列中的第一个指令为定点减法指令;对来自数据存储单元的操作数进行定点减法运算;删除该第一指令队列中的定点减法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入IMAC单元。IMAC单元被配置为:确定来自ALU单元的第一指令队列中的第一个指令为定点乘法指令;对来自ALU单元的操作数进行定点乘法运算;删除该第一指令队列中的定点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入RSS单元。RSS单元被配置为:确定来自IMAC单元的第一指令队列中的第一个指令为移位指令;对来自IMAC单元的操作数进行移位;删除该第一指令队列中的移位指令,以形成第二指令队列;以及,将移位结果作为操作数以及该第二指令队列输入输出单元。
在第二方面,本申请提供一种神经网络电路。该神经网络电路包括数据处理电路和数据存储单元。数据处理电路是如第一方面及其任一实施方式所述的数据处理电路。数据存储单元与所述数据处理电路连接并且被配置为存储操作数。
在第三方面,本申请提供一种神经网络处理器。该神经网络芯片包括至少一个神经网络电路以及控制电路。神经网络电路是如第二方面所述的神经网络电路。控制电路与神经网络电路连接并且被配置为控制神经网络电路。
在根据本申请的数据处理电路中,在接收到第一指令队列以及与第一指令队列对应的操作数之后,每一个计算单元在第一指令队列中的第一个指令与自身匹配的情况下对操作数进行处理,并且删除第一个指令,之后将处理后的操作数和新的第一指令队列输出至全部计算单元和输出单元的输入端;直至第一指令队列中仅存在输出指令,通过输出单元将处理后的操作数输出。如此,在第一指令队列中在输出指令之前依次包括多个指令的情况下,与这些指令匹配的各计算单元能够按照指令的顺序依次对操作数进行处理,并在全部的处理完成之后通过输出单元将处理后的操作数输出。以此方式,各计算单元按照第一指令队列中的多个指令的顺序以流水线方式依次对操作数处理,而不需要对每一个计算单元处理得到的中间结果进行存储和读取,从而减少了对存储器的访问次数,降低了存储器的访问频率,进而提高了计算效率并降低了总功耗。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1示出了相关技术中的神经网络处理器的架构的示意图。
图2示出了本申请实施例的用于神经网络的数据处理电路的示意性结构图。
图3示出了本申请实施例的源指令队列的示意性结构图。
图4示出了本申请实施例的数据处理电路中的计算单元的示意性结构图。
图5示出了本申请实施例的数据处理电路中的多路选择单元的示意性结构图。
图6示出了本申请实施例的用于神经网络的数据处理电路的示例性结构的示意图。
图7示出了本申请实施例的数据处理电路实现第一量化算子的示意图。
图8示出了本申请实施例的数据处理电路实现第二量化算子的示意图。
图9示出了本申请实施例的数据处理电路实现第一反量化算子的示意图。
图10示出了本申请实施例的数据处理电路实现第二反量化算子的示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的主题的例子。此外,在附图中的各个部件之间的比例关系仅为示意性的,而非实际的比例关系。
随着科学技术的不断进步,深度学习算法的类型和应用领域也在不断拓展。作为深度学习算法的实现基础,神经网络的重要性是不言而喻的。
当下,人们对于深度学习算法的处理速度的要求越来越高。由此,出现了专门用于神经网络计算的神经网络处理器。
图1示出了相关技术中的神经网络处理器的架构的示意图。如图1所示,神经网络处理器1中至少包括控制单元10以及至少一个处理单元20。
控制单元10用于控制处理单元20进行数据处理。具体地,控制单元10可以向处理单元20发送指令,从而实现对处理单元20的控制。
处理单元20用于在控制单元10的控制下进行数据的存储和处理。处理单元20的数量可以是一个或者多个。在神经网络领域,需要处理的数据通常是张量(tensor)。张量是神经网络中的一个数据单元,并且具有N(batch,批)、C(channel,通道)、H(height,高)、W(width,宽)四个维度。因此,张量可以采用NCHW格式进行存储。在神经网络处理器1对张量进行处理时,将张量按照通道放在不同的处理单元20中进行存储和处理。也就是说,神经网路处理器1中每一个处理单元20可以对张量的一个或多个通道中的数据进行存储和处理。
具体地,处理单元20包括数据处理单元100、数据存储单元200和总线300。总线300用于传输数据和/或指令。数据处理单元100和数据存储单元200通过总线300相互连接。在每一个处理单元20中,数据存储单元200用于存储张量的一个或多个通道中的数据。存储在数据存储单元200中的数据可以被称为操作数。在来自控制单元10的指令的作用下,该处理单元20中的数据处理单元100对操作数进行处理。
如图1中所示,张量可以划分为通道1、通道2、……、通道N。在此情况下,通道1中的数据由第一个处理单元进行处理,通道2中的数据由第二个处理单元进行处理,以此类推。当然,在实际应用中可能存在张量中通道的数量大于处理单元的数量的情况。例如,张量具有N个通道,并且采用K(K<N)个处理单元进行处理。在此情况下,张量的通道1至通道K分别由K个处理单元进行处理;之后,通道K+1则转而由第一个处理单元进行处理,通道K+2由第二个处理单元进行处理。
在这样的神经网络处理器实现深度学习算法的计算的过程中,往往需要对操作数进行一系列的连续计算。然而,在连续计算的过程中,需要在每一次计算之后将计算结果存储到数据存储单元,并且在下一次计算开始时再从数据存储单元中读取计算结果。这意味着对数据存储单元进行多次读取和写入。这样高频率的存储器访问,降低了计算效率,并增加了总功耗。
因此,如何提高神经网络的计算效率是亟需解决的问题。
本申请实施例提供一种用于神经网络的数据处理电路。与图1中的数据处理单元类似,本申请实施例中的数据处理电路的功能是对操作数进行存储和处理。
图2示出了本申请实施例的用于神经网络的数据处理电路的示意性结构图。如图2所示,数据处理电路100包括:M个计算单元110以及输出单元120。M个计算单元110之间两两连接。M个计算单元110分别与输出单元120连接。M为大于1的整数。M个计算单元110中的第i个计算单元110被配置为:接收第一指令队列以及与第一指令队列对应的操作数;确定第一指令队列中的第一个指令为目标指令,其中,目标指令与第i个计算单元匹配;从第一指令队列中删除目标指令,以形成第二指令队列;对与第一指令队列对应的操作数进行处理;以及,向输出单元120以及M个计算单元110输出第二指令队列和处理后的操作数。第一指令队列包括源指令队列或者第二指令队列。i为整数,且i的取值范围为1至M。输出单元120被配置为:接收第二指令队列;确定第二指令队列中的第一个指令为输出指令;以及,将处理后的操作数输出。
在一实施例中,M个计算单元110中的每一个计算单元110的输出端可以与全部M个计算单元110的输入端连接。也就是说,每一个计算单元110输出的第二指令队列和操作数可以到达全部M个计算单元110的输入端处。如此,从一个计算单元110输出的第二指令队列和操作数在到达另一个计算单元110的输入端处时,则分别可以作为第一指令队列以及与第一指令队列对应的操作数被另一个计算单元110接收。可以理解的是,因为M个计算单元110中的任意两个计算单元110之间均具有以上连接关系,所以指令队列和操作数可以在任意两个计算单元110之间发送和接收。
在一实施例中,M个计算单元110中的每一个计算单元110的输出端可以与输出单元120的输入端连接。也就是说,每一个计算单元110输出的第二指令队列和操作数可以到输出单元120的输入端处。因此,从每一个计算单元110输出的第二指令队列和操作数均可以到达输出单元120的输入端处。
在数据处理电路100进行操作数的处理之前,数据处理电路100可以接收来自外部的源指令队列、以及与源指令队列对应的操作数(也可以称为源操作数)。在实际应用中,源指令队列和操作数可以具有相同或者不同的来源。在一实施例中,源指令队列可以来自于控制电路,并且操作数可以来自于数据存储单元。在一实施例中,源指令队列可以来自于指令存储单元,并且操作数可以来自于数据存储单元。在此情况下,指令存储单元和数据存储单元可以属于同一个存储电路,也可以属于不同的存储电路。为了接收来自外部的源指令队列,数据处理电路100可以具有输入端IN。一方面,输入端IN可以与位于数据处理电路100外部的控制电路、数据存储单元、指令存储单元中的至少一个进行连接,以实现源指令队列和操作数的输入。另一方面,输入端IN可以与M个计算单元110以及输出单元120连接,以便于将来自外部的源指令队列和操作数输入到M个计算单元110以及输出单元120。
图3示出了本申请实施例的源指令队列的示意性结构图。如图3所示,在一实施例中,源指令队列可以包括多个指令。这些指令是按照先后顺序依次布置和存储的。这些指令包括至少一个操作指令CMD和一个输出指令RES。每一个操作指令CMD用于对操作数进行相应的处理。输出指令RES用于将最后得到的操作数从数据处理电路100输出。具体地,至少一个操作指令CMD可以包括第一个操作指令CMD1、第二个操作指令CMD2、第三个操作指令CMD3、……、第t个操作指令CMDt。在此,t可以是正整数。
可以理解的是,指令可以由一个或多个字段组成。在一实施例中,指令可以包括一个字段。该字段包含与该指令对应的运算类型对应的编码。在一实施例中,指令可以包括多个字段。这多个字段至少包括信息字段和编码字段。类型字段用于表示指令的相关信息。编码字段包含与该指令的运算类型对应的编码。需要说明的是,本申请实施例中的指令可以还可能包括其它内容,本申请实施例对此不做具体限定。
为了实现M个计算单元110和输出单元120之间的互连,数据处理电路100内可以设置有互连区域130。在互连区域130内布置有多条连接线。这些连接线可以用于实现M个计算单元110之间的两两连接,以及M个计算单元110分别与输出单元120之间的连接。进一步地,互连区域130内的连接线还可以用于实现从输入端IN到M个计算单元110以及输出单元120的连接。可以理解的是,用于实现以上连接的连接线也可以不设置在特定区域内,本申请实施例对此不做具体限定。
对于M个计算单元110中的每一个计算单元110,该计算单元110的输入端与(包括自身在内的)M个计算单元110以及输入端IN连接。具体来说,计算单元110的输入端可以包括M+1个输入通道。每一个输入通道与M个计算单元110和输入端IN之一连接。
在一实施例中,第一指令队列和第二指令队列中的每一个指令可以具有K个比特。对于每一个计算单元110,接收的第一个指令队列和输出的第二指令队列均包括有至少一个指令。每一个指令与M个计算单元110中的一个计算单元110或输出单元120匹配。换句话说,每一个指令用于识别与之对应的计算单元110或输出单元120。由于数据处理电路100中具有M个计算单元110和一个输出单元120,每一个指令至少采用K个比特进行编码。K为正整数,并且K满足2K≥M+1。
在此,对M个计算单元110中的第i个计算单元110的功能进行具体说明。可以理解的是,i是取值范围为1至M的任意整数。也就是说,以下说明适用于M个计算单元110中的任一计算单元110。
第i个计算单元110的输入端与输入端IN和全部M个计算单元110连接。在第i个计算单元110的输入端处可以具有来自于IN的源指令队列和/或来自于M个计算单元110中的至少一个计算单元110的第二指令队列,以及与源指令队列和/或第二指令队列对应的操作数。第i个计算单元110接收第一指令队列。第一指令队列是源指令队列或第二指令队列,并且第一指令队列中的第一个指令与第i个计算单元110匹配。在此情况下,第一指令队列中与第i个计算单元110匹配的第一个指令被称为目标指令。在确定目标指令之后,第i个计算单元110将目标指令从第一指令队列中删除。删除目标指令之后的第一指令队列被作为第二指令队列。与此同时,第i个计算单元接收到与第一指令队列对应的操作数,并对操作数进行处理。最后,第i个计算单元110将第二指令队列以及处理后的操作数输出。由于M个计算单元110以及输出单元120之间的连接关系,第二指令队列和处理后的操作数将被输出至M个计算单元110以及输出单元120。
图4示出了本申请实施例的数据处理电路中的计算单元的示意性结构图。如图4所述,在一实施例中,计算单元110可以包括多路选择单元MUX和基本运算单元OPN。
多路选择单元MUX被配置为:接收第一指令队列以及与第一指令队列对应的操作数;确定第一指令队列中的第一个指令是否为目标指令;以及,响应于第一指令队列中的第一个指令是目标指令,将第一指令队列以及与第一指令队列对应的操作数输出至基本运算单元OPN。
可以看出,多路选择单元MUX需要确定第一指令队列中的第一个指令是否为目标指令。换句话说,多路选择单元MUX需要从M+1个输入通道中确定具有目标指令的第一指令队列所在的输入通道。
图5示出了本申请实施例的数据处理电路中的多路选择单元的示意性结构图。如图5所示,多路选择单元MUX可以包括M+1个输入通道以及一个输出端。在M+1个输入通道中,每个输入通道可以用于输入一个指令队列以及与该指令队列对应的操作数。例如,第一个输入通道用于输入指令队列Q_1和操作数OPD_1,第二个输入通道用于输入指令队列Q_2和操作数OPD_2,……,第M个输入通道用于输入指令队列Q_m和操作数OPD_m,第M+1个输入通道用于输入指令队列Q_m+1和操作数OPD_m+1。输出端上的指令队列Q和操作数OPD则是各个输入通道中的指令队列Q1、Q2、……、Q_m、Q_m+1中的一个指令队列以及该指令队列对应的操作数。
可以理解的是,需要确保在同一时间,在M+1个输入通道中,仅有一个输入通道中的指令队列是其中第一个指令为目标指令的第一指令队列。如此,多路选择单元MUX可以根据目标指令,将目标指令所在的第一指令队列以及与第一指令队列对应的操作数通过输出端输出。
基本运算单元OPN被配置为:从第一指令队列中删除目标指令,以形成第二指令队列;对第一指令队列对应的操作数进行处理;以及,向输出单元120以及M个计算单元110输出第二指令队列和处理后的操作数。
数据处理电路100中的M个计算单元110可以是具有不同功能的计算单元。在一实施例中,第i个计算单元110可以包括以下至少之一:ALU(算数逻辑单元)单元、IMAC(定点乘积累加)单元、FADD(浮点加法)单元、FMUL(浮点乘积)单元、I2F(定点-浮点转换)单元、F2I(浮点-定点转换)单元以及RSS(定点移位)单元。具体地,第i个计算单元110中的基本运算单元OPN可以是以下之一:ALU运算单元、IMAC运算单元、FADD运算单元、FMUL运算单元、I2F运算单元、F2I运算单元以及RSS运算单元。ALU运算单元用于进行定点操作数的加法/减法操作、定点/浮点操作数的比较操作等。IMAC运算单元用于进行定点操作数的乘法操作、三个操作数的乘积累加操作等。FADD运算单元用于进行浮点操作数的加法操作等。FMUL运算单元用于进行浮点操作数的乘法操作等。I2F运算单元用于进行定点到浮点的转换。F2I运算单元用于进行浮点到定点的转换。RSS运算单元用于进行定点操作数的移位操作。需要说明的是,数据处理电路100中的计算单元110还可以包括其它基本运算单元,或者数据处理电路100中也可能不具有上述计算单元110中的一种或多种,本申请实施例对此不做具体限定。
需要说明的是,在本申请实施例中的数据处理电路100中,操作数可以包括一个或多个张量的数据。例如,操作数可以包括一个张量的数据。此时,可以采用I2F运算单元、F2I运算单元、RSS运算单元等对操作数进行处理。又例如,操作数可以包括两个张量的数据。换句话说,操作数的数量为两个。此时,可以采用ALU运算单元、IMAC运算单元、FADD运算单元、FMUL运算单元、RSS运算单元等进行两个操作数之间的运算,也可以采用I2F运算单元、F2I运算单元等对两个操作数之一进行处理。再例如,操作数可以包括三个或更多个张量的数据。
进一步地,在一实施例中,数据处理电路100中的输出单元120可以包括多路选择单元MUX和输出电路OUT。多路选择单元MUX可以包括M个输入通道以及一个输出端。在M个输入通道中,每个输入通道可以用于输入一个第二指令队列以及与该指令队列对应的操作数。可以理解的是,需要确保在同一时间,在M个输入通道中,仅有一个输入通道中的第二指令队列是其中第一个指令为输出指令的第二指令队列。如此,多路选择单元MUX可以根据输出指令,将输出指令所在的第二指令队列以及与该第二指令队列对应的操作数通过输出端输出。可以理解的是,由于输出指令通常是源指令队列中的最后一个指令,所以多路选择单元MUX确定的第二指令队列可能仅具有一个指令,即输出指令。当然,可以理解的是,多路选择单元MUX也可以包括M+1个输入通道。在这M+1个输入通道中,M个输入通道分别与M个计算单元110连接,并且一个输入通道与数据处理电路110的输入端IN连接。在M+1个输入通道中,仅有一个输入通道中的源指令队列或第二指令队列中的第一个指令为输出指令。
输出电路OUT用于在接收到来自多路选择单元MUX的第二指令队列以及操作数的情况下,将操作数输出。在一实施例中,输出电路OUT可以将操作数输出至数据存储单元。
图6示出了本申请实施例的用于神经网络的数据处理电路的示例性结构的示意图。以此示例性结构为例,对数据处理电路100进行示例性说明。
如图6所示,数据处理电路100包括输入端IN、七个计算单元110、输出单元120。
输入端IN配置为输入源操作指令和操作数。输入端IN与数据处理电路100中的全部多路选择单元MUX的输入端连接。因此,源操作指令和操作数可以到达全部多路选择单元MUX的输入端。
每一个计算单元110中包括多路选择单元MUX和基本运算单元OPN。七个计算单元110中的基本运算单元OPN分别为:ALU运算单元、IMAC运算单元、FADD运算单元、FMUL运算单元、I2F运算单元、F2I运算单元以及RSS运算单元。多路选择单元MUX的输入端具有八个输入通道。这八个输入通道分别与输入端IN以及七个计算单元110的输出端连接。多路选择单元MUX的输出端与对应的基本运算单元OPN连接。多路选择单元MUX配置为将输入端处与该计算单元110(即其中的基本运算单元OPN)对应的的指令队列和操作数传递到对应的基本运算单元OPN。基本运算单元OPN配置为将指令队列中的第一个指令删除并对操作数进行处理,之后输出第二指令队列和处理后的操作数。
输出单元120包括多路选择单元MUX和输出电路OUT。多路选择单元MUX的输入端具有八个输入通道。这八个输入通道分别与输入端IN以及七个计算单元110的输出端连接。多路选择单元MUX的输出端与输出电路OUT连接。多路选择单元MUX配置为将输入端处与输出单元120对应的的指令队列和操作数传递到输出电路OUT。
在此,结合图2所示的数据处理电路以及图3所示的源指令队列,对数据处理电路100的工作流程进行说明。数据处理电路100接收到源指令队列以及操作数。源指令队列依次可以包括多个指令。这些指令既包括操作指令CMD1、CMD2、……、CMDt,也包括输出指令RES。在此情况下,数据处理电路的工作流程包括以下步骤。
首先,数据处理电路100中的一个计算单元110确定源指令队列为第一指令队列。也就是说,源指令队列中的第一个指令CMD1是与本计算单元110匹配的目标指令。之后,本计算单元110对与源指令队列对应的操作数进行处理,得到处理后的操作数。然后,本计算单元110将源指令队列中的第一个指令CMD1删除,以形成第二指令队列。本计算单元110最后将形成的第二指令队列和处理后的操作数输出。
其次,数据处理电路100中的另一个计算单元110确定第一步中得到的第二指令队列为第一指令队列。也就是说,第一指令队列中的第一个指令CMD2是与本计算单元110匹配的目标指令。之后,本计算单元110对于第一指令队列对应的操作数(即第一步中得到的操作数)进行处理,以得到处理后的操作数。然后,本计算单元110将第一指令队列中的第一个指令CMD2删除,以形成第二指令队列。本计算单元110将最后将形成的第二指令队列和处理后的操作数输出。
之后,以此类推,根据得到的第二指令队列中的指令CMD3至CMDt,数据处理电路110中的计算单元110对操作数依次进行处理。需要说明的是,在一些情况下,源指令队列中的多个操作指令CMD1、CMD2、……、CMDt之间可以是彼此不同的。对应地,数据处理电路110中的不同计算单元110根据这些操作指令CMD1、CMD2、……、CMDt依次对操作数进行处理。但是,在另一些情况下,源指令队列中的多个操作指令CMD1、CMD2、……、CMDt中可能具有两个或更多个相同的操作指令。此时,在相同的操作指令的控制下,数据处理电路110中的同一个计算单元110可以对操作数进行多次处理。对此,本申请实施例不做具体限定。
最后,数据处理电路100中的输出单元120确定经过与CMDt对应的计算单元110处理得到的第二指令队列中的第一个指令为输出指令。随后,输出单元120将与该第二指令队列对应的操作数(即与CMDt对应的计算单元110处理得到的操作数)输出。
至此,在源指令队列的作用下,数据处理电路100实现了对操作数的处理。
在根据本申请的数据处理电路中,在接收到第一指令队列以及与第一指令队列对应的操作数之后,每一个计算单元在第一指令队列中的第一个指令与自身匹配的情况下对操作数进行处理,并且删除第一个指令,之后将处理后的操作数和新的第一指令队列输出至全部计算单元和输出单元的输入端;直至第一指令队列中仅存在输出指令,通过输出单元将处理后的操作数输出。如此,在第一指令队列中在输出指令之前依次包括多个指令的情况下,与这些指令匹配的各计算单元能够按照指令的顺序依次对操作数进行处理,并在全部的处理完成之后通过输出单元将处理后的操作数输出。以此方式,各计算单元按照第一指令队列中的多个指令的顺序以流水线方式依次对操作数处理,而不需要对每一个计算单元处理得到的中间结果进行存储和读取,从而减少了对存储器的访问次数,降低了存储器的访问频率,进而提高了计算效率并降低了总功耗。
在实际应用中,本申请实施例中的数据处理电路可以实现对操作数的各种处理。
在一实施例中,数据处理电路可以配置为实现操作数的量化计算和/或反量化计算。量化计算是指从原始数值范围映射到预设数值范围的映射过程。反之,反量化计算是指从预设数值范围至原始数值范围的映射过程。原始数值范围是指一个数原本的数值范围。原始数值范围可以取决于该数的类型和比特数。例如,对于浮点数、有符号整数、无符号整数这些不同的类型,该数通常具有不同的原始数值范围。又例如,在比特数为32位、16位、8位的情况下,该数的原始数值范围也是不同的。预设数值范围是指对该数进行处理后所在的数值范围。预设数值范围可以根据实际的需要来确定。同样地,预设数值范围也可以取决于类型和比特数。例如,对于浮点数、有符号整数、无符号整数这些不同的类型,该数通常具有不同的预设数值范围。又例如,在比特数为32位、16位、8位的情况下,该数的预设数值范围也是不同的。可以理解的是,原始数值范围和预设数值范围通常是不同的。
需要说明的是,在实现量化计算/反量化计算的过程中,输入数据处理电路的操作数可以包括第一操作数和第二操作数。第一操作数是需要进行量化/反量化的操作数。第二操作数是用于帮助实现第一操作数的量化/反量化的操作数。可以理解的是,在本技术领域中,第一操作数所属的张量可以是按照通道存储的。因此,对于该张量在同一通道内的全部元素,第二操作数可以是不变的。
在本申请实施例中,针对量化计算定义了两种量化算子,即第一量化算子和第二量化算子。此外,在本申请实施例中,针对反量化计算也定义了两种量化算子,即第一反量化算子和第二反量化算子。
图7示出了本申请实施例的数据处理电路实现第一量化算子的示意图。如图7所示,第一量化算子是以I2F单元、FMUL单元、FADD单元以及F2I单元为基础实现的。相应地,数据处理电路至少包括:I2F单元、FMUL单元、FADD单元、F2I单元以及输出单元。
I2F单元被配置为:确定来自数据存储单元的第一指令队列中的第一个指令为定点-浮点转换指令;对来自数据存储单元的操作数进行定点-浮点转换;删除该第一指令队列中的所述定点-浮点转换指令,以形成第二指令队列;将转换结果作为操作数以及该第二指令队列作为第一指令队列输入FMUL单元。
在此,来自数据存储单元的第一指令队列是源指令队列。源指令队列中的多个操作指令依次为:定点-浮点转换指令、浮点乘法指令、浮点加法指令以及浮点-定点转换指令。源指令队列和对应的操作数OPD通过数据处理电路的输入端输入。操作数OPD是定点类型的数据。例如,操作数OPD可以是32位、16位、或8位的定点数。
具体地,I2F单元确定第一指令队列(即源指令队列)中的第一个指令为定点-浮点转换指令。因为定点-浮点转换指令与I2F单元匹配,所以I2F单元对与第一指令队列对应的操作数OPD进行定点-浮点转换。经过定点-浮点转换的操作数OPD则变成浮点数。例如,经过定点-浮点转换后,操作数OPD可以是32位的浮点数。此外,I2F单元将第一指令队列中的定点-浮点转换指令删除,以形成第二指令队列。
FMUL单元被配置为:确定来自I2F单元的第一指令队列中的第一个指令为浮点乘法指令;对来自I2F单元的操作数进行浮点乘法运算;删除该第一指令队列中的浮点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入FADD单元。
具体地,FMUL单元确定来自I2F单元的第一指令队列(即I2F单元形成的第二指令队列)中的第一个指令为浮点乘法指令。因为浮点乘法指令与FMUL单元对应,所以FMUL单元对来自I2F单元的操作数OPD和另一操作数OPD1进行乘法运算,以得到处理后的操作数OPD。由于操作数OPD是浮点数,并且另一操作数OPD1也是浮点数,处理后的操作数OPD依然是浮点数。此外,FMUL单元将第一指令队列中的浮点乘法指令删除,以形成第二指令队列。
FADD单元被配置为:确定来自FMUL单元的第一指令队列中的第一个指令为浮点加法指令;对来自FMUL单元的操作数进行浮点加法运算;删除该第一指令队列中的浮点加法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入F2I单元。
具体地,FADD单元确定来自FMUL单元的第一指令队列(即FMUL单元形成的第二指令队列)中的第一个指令为浮点加法指令。因为浮点加法指令与FADD单元对应,所以FADD单元对来自FMUL单元的操作数OPD和又一操作数OPD2进行加法运算,以得到处理后的操作数OPD。由于操作数OPD是浮点数,并且又一操作数OPD2也是浮点数,处理后的操作数OPD依然是浮点数。此外,FADD单元将第一指令队列中的浮点乘加法指令删除,以形成第二指令队列。
F2I单元被配置为:确定来自FADD单元的第一指令队列中的第一个指令为浮点-定点转换指令;对来自FADD单元的操作数进行浮点-定点转换;删除该第一指令队列中的定点-浮点转换指令,以形成第二指令队列;以及,将转换结果作为操作数以及该第二指令队列输入输出单元。
具体地,F2I单元确定来自FADD单元的第一指令队列(即FADD单元形成的第二指令队列)中的第一个指令为浮点-定点转换指令。因为浮点-定点转换指令与F2I单元对应,所以F2I单元对来自FADD单元的操作数OPD进行浮点-定点转换,以得到处理后的操作数OPD。处理后的操作数OPD是定点数。此外,F2I单元将第一指令队列中的浮点-定点转换指令删除,以形成第二指令队列。
可以理解的是,F2I单元输出的操作数OPD即为第一量化算子对来自数据存储单元的操作数OPD的量化计算结果。之后,数据处理电路中的输出单元可以根据第二指令队列中仅剩的输出指令,将F2I单元输出的操作数OPD输出至数据存储单元。
可以看出,在使用以本申请实施例的数据处理电路为基础实现的第一量化算子对操作数进行量化计算的过程中,仅需要在最初从数据处理单元读取一次操作数并且在量化计算完成之后将量化结果写入数据存储单元。在I2F单元、FMUL单元、FADD单元中的每一个计算单元处理完成后不需要进行操作数的写入和读取。如此,与相关技术中的数据处理电路相比,本申请实施例的数据处理电路能够减少三次对于数据存储单元的读写,第一量化算子的量化计算的实施得到了300%的加速。
图8示出了本申请实施例的数据处理电路实现第二量化算子的示意图。如图7所示,第二量化算子是以IMAC单元、RSS单元以及ALU单元为基础实现的。相应地,数据处理电路至少包括:IMAC单元、RSS单元、ALU单元以及输出单元。
IMAC单元被配置为:确定来自数据存储单元的第一指令队列中的第一个指令为定点乘法指令;对来自数据存储单元的操作数进行定点乘法运算;删除该第一指令队列中的定点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入RSS单元。
在此,来自数据存储单元的第一指令队列是源指令队列。源指令队列中的多个操作指令依次为:定点乘法指令、移位指令以及定点加法指令。源指令队列和对应的操作数OPD通过数据处理电路的输入端输入。操作数OPD是定点类型的数据。例如,操作数OPD可以是32位、16位、或8位的定点数。
具体地,IMAC单元确定第一指令队列(即源指令队列)中的第一个指令为定点乘法指令。因为定点乘法指令与IMAC单元匹配,所以IMAC单元对操作数OPD与另一操作数OPD1进行定点乘法运算,以得到处理后的操作数OPD。由于操作数OPD是定点数,并且另一操作数OPD1也是定点数,处理后的操作数OPD为定点数。此外,IMAC单元将第一指令队列中的定点乘法指令删除,以形成第二指令队列。
RSS单元被配置为:确定来自IMAC单元的第一指令队列中的第一个指令为移位指令;对来自IMAC单元的操作数进行移位;删除该第一指令队列中的移位指令,以形成第二指令队列;以及,将移位结果作为操作数以及该第二指令队列作为第一指令队列输入ALU单元。
具体地,RSS单元确定来自IMAC单元的第一指令队列(即IMAC单元形成的第二指令队列)中的第一个指令为移位指令。因为移位指令与RSS单元对应,所以RSS单元在又一操作数OPD2的作用下对来自IMAC单元的操作数OPD进行移位,以得到处理后的操作数OPD。处理后的操作数OPD依然是定点数。此外,RSS单元将第一指令队列中的移位指令删除,以形成第二指令队列。
ALU单元被配置为:确定来自RSS单元的第一指令队列中的第一个指令为定点加法指令;对来自RSS单元的操作数进行定点加法运算;删除该第一指令队列中的定点加法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列输入输出单元。
具体地,ALU单元确定来自RSS单元的第一指令队列(即RSS单元形成的第二指令队列)中的第一个指令为定点加法指令。因为定点加法指令与ALU单元对应,所以ALU单元对来自RSS单元的操作数OPD和再一操作数OPD3进行定点加法运算,以得到处理后的操作数OPD。由于操作数OPD是定点数,并且再一操作数OPD3也是定点数,处理后的操作数OPD是定点数。此外,ALU单元将第一指令队列中的定点加法指令删除,以形成第二指令队列。
可以理解的是,ALU单元输出的操作数OPD即为第二量化算子对来自数据存储单元的操作数OPD的量化计算结果。之后,数据处理电路中的输出单元可以根据第二指令队列中仅剩的输出指令,将ALU单元输出的操作数OPD输出至数据存储单元。
可以看出,在使用以本申请实施例的数据处理电路为基础实现的第二量化算子对操作数进行量化计算的过程中,仅需要在最初从数据处理单元读取一次操作数并且在量化计算完成之后将量化结果写入数据存储单元。在IMAC单元和RSS单元中的每一个计算单元处理完成后不需要进行操作数的写入和读取。如此,与相关技术中的数据处理电路相比,本申请实施例的数据处理电路能够减少两次对于数据存储单元的读写,第二量化算子的量化计算的实施得到了200%的加速。
图9示出了本申请实施例的数据处理电路实现第一反量化算子的示意图。如图9所示,第一反量化算子是以ALU单元、I2F单元以及FMUL单元为基础实现的。相应地,数据处理电路至少包括:ALU单元、I2F单元、FMUL单元以及输出单元。
ALU单元被配置为:确定来自数据存储单元的第一指令队列中的第一个指令为定点减法指令;对来自数据存储单元的操作数进行定点减法运算;删除该第一指令队列中的定点减法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入I2F单元。
在此,来自数据存储单元的第一指令队列是源指令队列。源指令队列中的多个操作指令依次为:定点减法指令、定点-浮点转换指令以及浮点乘法指令。源指令队列和对应的操作数OPD通过数据处理电路的输入端输入。操作数OPD是定点类型的数据。例如,操作数OPD可以是32位、16位、或8位的定点数。
具体地,ALU单元确定第一指令队列(即源指令队列)中的第一个指令为定点减法指令。因为定点减法指令与ALU单元匹配,所以ALU单元对与第一指令队列对应的操作数OPD和另一操作数OPD1进行定点减法运算。由于操作数OPD是定点数,并且另一操作数OPD1也是定点数,处理后的操作数OPD依然是定点数。此外,ALU单元将第一指令队列中的定点减法指令删除,以形成第二指令队列。
I2F单元被配置为:确定来自ALU单元的第一指令队列中的第一个指令为定点-浮点转换指令;对来自ALU单元的操作数进行定点-浮点转换;删除该第一指令队列中的定点-浮点转换指令,以形成第二指令队列;以及,将转换结果作为操作数以及该第二指令队列作为第一指令队列输入FMUL单元。
具体地,I2F单元确定来自ALU单元的第一指令队列(即ALU单元形成的第二指令队列)中的第一个指令为定点-浮点转换指令。因为定点-浮点转换指令与I2F单元对应,所以I2F单元对来自ALU单元的操作数OPD进行定点-浮点转换,以得到处理后的操作数OPD。转换后的操作数OPD是例如32位的浮点数。此外,I2F单元将第一指令队列中的定点-浮点转换指令删除,以形成第二指令队列。
FMUL单元被配置为:确定来自I2F单元的第一指令队列中的第一个指令为浮点乘法指令;对来自I2F单元的操作数进行浮点乘法运算;删除该第一指令队列中的浮点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列输入输出单元。
具体地,FMUL单元确定来自I2F单元的第一指令队列(即I2F单元形成的第二指令队列)中的第一个指令为浮点乘法指令。因为浮点乘法指令与FMUL单元对应,所以FMUL单元对来自I2F单元的操作数OPD和又一操作数OPD2进行乘法运算,以得到处理后的操作数OPD。由于操作数OPD是浮点数,并且又一操作数OPD2也是浮点数,处理后的操作数OPD依然是浮点数。此外,FMUL单元将第一指令队列中的浮点乘法指令删除,以形成第二指令队列。
可以理解的是,FMUL单元输出的操作数OPD即为第一反量化算子对来自数据存储单元的操作数OPD的反量化计算结果。之后,数据处理电路中的输出单元可以根据第二指令队列中仅剩的输出指令,将FMUL单元输出的操作数OPD输出至数据存储单元。
可以看出,在使用以本申请实施例的数据处理电路为基础实现的第一反量化算子对操作数进行反量化计算的过程中,仅需要在最初从数据处理单元读取一次操作数并且在量化计算完成之后将反量化结果写入数据存储单元。在ALU单元和I2F单元中的每一个计算单元处理完成后不需要进行操作数的写入和读取。如此,与相关技术中的数据处理电路相比,本申请实施例的数据处理电路能够减少两次对于数据存储单元的读写,第一反量化算子的反量化计算的实施得到了200%的加速。
图10示出了本申请实施例的数据处理电路实现第二反量化算子的示意图。如图10所示,第二反量化算子是以ALU单元、IMAC单元以及RSS单元为基础实现的。相应地,数据处理电路至少包括:ALU单元、IMAC单元、RSS单元以及输出单元。
ALU单元被配置为:确定来自数据存储单元的第一指令队列中的第一个指令为定点减法指令;对来自数据存储单元的操作数进行定点减法运算;删除该第一指令队列中的定点减法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入IMAC单元。
在此,来自数据存储单元的第一指令队列是源指令队列。源指令队列中的多个操作指令依次为:定点减法指令、定点乘法指令以及移位指令。源指令队列和对应的操作数OPD通过数据处理电路的输入端输入。操作数OPD是定点类型的数据。例如,操作数OPD可以是32位、16位、或8位的定点数。
具体地,ALU单元确定来自数据存储单元的第一指令队列(即源指令队列)中的第一个指令为定点减法指令。因为定点减法指令与ALU单元匹配,所以ALU单元对操作数OPD和另一操作数OPD1进行定点减法运算,以得到处理后的操作数OPD。处理后的操作数OPD是定点数。此外,ALU单元将第一指令队列中的定点减法指令删除,以形成第二指令队列。
IMAC单元被配置为:确定来自ALU单元的第一指令队列中的第一个指令为定点乘法指令;对来自ALU单元的操作数进行定点乘法运算;删除该第一指令队列中的定点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入RSS单元。
具体地,IMAC单元确定第一指令队列(即来自IMAC单元的第二指令队列)中的第一个指令为定点乘法指令。因为定点乘法指令与IMAC单元匹配,所以IMAC单元对操作数OPD与又一操作数OPD2进行定点乘法运算,以得到处理后的操作数OPD。由于操作数OPD是定点数,并且又一操作数OPD2也是定点数,处理后的操作数OPD为定点数。此外,IMAC单元将第一指令队列中的定点乘法指令删除,以形成第二指令队列。
RSS单元被配置为:确定来自IMAC单元的第一指令队列中的第一个指令为移位指令;对来自IMAC单元的操作数进行移位;删除该第一指令队列中的移位指令,以形成第二指令队列;以及,将移位结果作为操作数以及该第二指令队列输入输出单元。
具体地,RSS单元确定来自IMAC单元的第一指令队列(即IMAC单元形成的第二指令队列)中的第一个指令为移位指令。因为移位指令与RSS单元对应,所以RSS单元在再一操作数OPD3的作用下对来自IMAC单元的操作数OPD进行移位,以得到处理后的操作数OPD。处理后的操作数OPD依然是定点数。此外,RSS单元将第一指令队列中的移位指令删除,以形成第二指令队列。
可以理解的是,RSS单元输出的操作数OPD即为第一反量化算子对来自数据存储单元的操作数OPD的反量化计算结果。之后,数据处理电路中的输出单元可以根据第二指令队列中仅剩的输出指令,将RSS单元输出的操作数OPD输出至数据存储单元。
可以看出,在使用以本申请实施例的数据处理电路为基础实现的第二反量化算子对操作数进行反量化计算的过程中,仅需要在最初从数据处理单元读取一次操作数并且在量化计算完成之后将反量化结果写入数据存储单元。在ALU单元和I2F单元中的每一个计算单元处理完成后不需要进行操作数的写入和读取。如此,与相关技术中的数据处理电路相比,本申请实施例的数据处理电路能够减少两次对于数据存储单元的读写,第二反量化算子的反量化计算的实施得到了200%的加速。
需要说明的是,对于上述示例中的量化计算和反量化计算,第二操作数OPD1、OPD2、OPD3是除了操作数OPD之外的其它操作数的总称。在实际应用中,第二操作数OPD1、OPD2、OPD3可以是来自于同一个张量的数据,也可以是来自于不同张量的数据。此外,在一实施例中,第二操作数OPD1、OPD2、OPD3中的至少一个可以是按照通道变化的。也就是说,对于张量的同一个通道内的操作数OPD,对应的第二操作数OPD1、OPD2、OPD3中的至少一个可以是不变的。在遍历张量的一个通道内的全部数据并切换到张量的另一个通道时,第二操作数OPD1、OPD2、OPD3中的至少一个可以改变。
可以理解的是,张量中的不同通道的数据可以由不同的计算单元进行处理。因此,一个计算单元在实现针对一个通道内的操作数的量化计算和反量化计算的过程中,第二操作数的数值可以是固定的。
基于相同的发明构思,本申请实施例提供一种神经网络电路。该神经网络电路包括数据处理电路和数据存储单元。数据处理电路是根据本申请实施例的数据处理电路。数据存储单元与所述数据处理电路连接并且被配置为存储操作数。
在第三方面,本申请提供一种神经网络处理器。该神经网络芯片包括至少一个神经网络电路以及控制电路。神经网络电路是如本申请实施例的神经网络电路。控制电路与神经网络电路连接并且被配置为控制神经网络电路。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (12)
1.一种用于神经网络的数据处理电路,其特征在于,包括:M个计算单元以及输出单元;
其中,所述M个计算单元之间两两连接,所述M个计算单元分别与所述输出单元连接,其中,M为大于1的整数;
所述M个计算单元中的第i个计算单元被配置为:接收第一指令队列以及与所述第一指令队列对应的操作数;确定所述第一指令队列中的第一个指令为目标指令,其中,所述目标指令与所述第i个计算单元匹配;从所述第一指令队列中删除所述目标指令,以形成第二指令队列;对与所述第一指令队列对应的操作数进行处理;以及,向所述输出单元以及所述M个计算单元输出所述第二指令队列和处理后的操作数;其中,所述第一指令队列包括源指令队列或者所述第二指令队列;i为整数,且i的取值范围为1至M;
所述输出单元被配置为:接收所述第二指令队列;确定所述第二指令队列中的第一个指令为输出指令;以及,将所述处理后的操作数输出。
2.根据权利要求1所述的数据处理电路,其特征在于,所述M个计算单元中每一个计算单元的输出端与所述M个计算单元的输入端以及所述输出单元的输入端连接。
3.根据权利要求1所述的数据处理电路,其特征在于,所述第一指令队列和所述第二指令队列中的每一个指令具有K个比特,其中,K为正整数,并且K满足2K≥M+1。
4.根据权利要求1所述的数据处理电路,其特征在于,所述第i个计算单元包括:多路选择单元和基本运算单元;其中,所述多路选择单元与所述基本运算单元连接;
所述多路选择单元被配置为:接收所述第一指令队列以及与所述第一指令队列对应的操作数;确定所述第一指令队列中的第一个指令是否为所述目标指令;以及,响应于所述第一指令队列中的第一个指令是所述目标指令,将所述第一指令队列以及与所述第一指令队列对应的操作数输出至所述基本运算单元;
所述基本运算单元被配置为:从所述第一指令队列中删除所述目标指令,以形成所述第二指令队列;对所述第一指令队列对应的操作数进行处理;以及,向所述输出单元以及所述M个计算单元输出所述第二指令队列和所述处理后的操作数。
5.根据权利要求1所述的数据处理电路,其特征在于,所述第i个计算单元包括以下至少之一:算术逻辑ALU单元、定点乘法IMAC单元、浮点加法FADD单元、浮点乘法FMUL单元、定点-浮点转换I2F单元、浮点-定点转换F2I单元以及移位RSS单元。
6.根据权利要求1所述的数据处理电路,其特征在于,所述M个计算单元用于以下至少之一:量化计算、反量化计算。
7.根据权利要求6所述的数据处理电路,其特征在于,在所述M个计算单元用于量化计算的情况下,所述M个计算单元包括I2F单元、FMUL单元、FADD单元以及F2I单元;
所述I2F单元被配置为:确定来自所述数据存储单元的第一指令队列中的第一个指令为定点-浮点转换指令;对来自所述数据存储单元的操作数进行定点-浮点转换;删除该第一指令队列中的所述定点-浮点转换指令,以形成第二指令队列;将转换结果作为操作数以及该第二指令队列作为第一指令队列输入所述FMUL单元;
所述FMUL单元被配置为:确定来自所述I2F单元的第一指令队列中的第一个指令为浮点乘法指令;对来自所述I2F单元的操作数进行浮点乘法运算;删除该第一指令队列中的所述浮点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入所述FADD单元;
所述FADD单元被配置为:确定来自所述FMUL单元的第一指令队列中的第一个指令为浮点加法指令;对来自所述FMUL单元的操作数进行浮点加法运算;删除该第一指令队列中的所述浮点加法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入所述F2I单元;
所述F2I单元被配置为:确定来自所述FADD单元的第一指令队列中的第一个指令为浮点-定点转换指令;对来自所述FADD单元的操作数进行浮点-定点转换;删除该第一指令队列中的所述定点-浮点转换指令,以形成第二指令队列;以及,将转换结果作为操作数以及该第二指令队列输入所述输出单元。
8.根据权利要求6所述的数据处理电路,其特征在于,在所述M个计算单元用于量化计算的情况下,所述M个计算单元包括IMAC单元、RSS单元以及ALU单元;
所述IMAC单元被配置为:确定来自所述数据存储单元的第一指令队列中的第一个指令为定点乘法指令;对来自所述数据存储单元的操作数进行定点乘法运算;删除该第一指令队列中的所述定点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入所述RSS单元;
所述RSS单元被配置为:确定来自所述IMAC单元的第一指令队列中的第一个指令为移位指令;对来自所述IMAC单元的操作数进行移位;删除该第一指令队列中的所述移位指令,以形成第二指令队列;以及,将移位结果作为操作数以及该第二指令队列作为第一指令队列输入所述ALU单元;
所述ALU单元被配置为:确定来自所述RSS单元的第一指令队列中的第一个指令为定点加法指令;对来自所述RSS单元的操作数进行定点加法运算;删除该第一指令队列中的所述定点加法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列输入所述输出单元。
9.根据权利要求6所述的数据处理电路,其特征在于,在所述M个计算单元用于反量化计算的情况下,所述M个计算单元包括ALU单元、I2F单元以及FMUL单元;
所述ALU单元被配置为:确定来自所述数据存储单元的第一指令队列中的第一个指令为定点减法指令;对来自所述数据存储单元的操作数进行定点减法运算;删除该第一指令队列中的所述定点减法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入所述I2F单元;
所述I2F单元被配置为:确定来自所述ALU单元的第一指令队列中的第一个指令为定点-浮点转换指令;对来自所述ALU单元的操作数进行定点-浮点转换;删除该第一指令队列中的所述定点-浮点转换指令,以形成第二指令队列;以及,将转换结果作为操作数以及该第二指令队列作为第一指令队列输入所述FMUL单元;
所述FMUL单元被配置为:确定来自所述I2F单元的第一指令队列中的第一个指令为浮点乘法指令;对来自所述I2F单元的操作数进行浮点乘法运算;删除该第一指令队列中的所述浮点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列输入所述输出单元。
10.根据权利要求6所述的数据处理电路,其特征在于,在所述M个计算单元用于反量化计算的情况下,所述M个计算单元包括ALU单元、IMAC单元以及RSS单元;
所述ALU单元被配置为:确定来自所述数据存储单元的第一指令队列中的第一个指令为定点减法指令;对来自所述数据存储单元的操作数进行定点减法运算;删除该第一指令队列中的所述定点减法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入所述IMAC单元;
所述IMAC单元被配置为:确定来自所述ALU单元的第一指令队列中的第一个指令为定点乘法指令;对来自所述ALU单元的操作数进行定点乘法运算;删除该第一指令队列中的所述定点乘法指令,以形成第二指令队列;以及,将运算结果作为操作数以及该第二指令队列作为第一指令队列输入所述RSS单元;
所述RSS单元被配置为:确定来自所述IMAC单元的第一指令队列中的第一个指令为移位指令;对来自所述IMAC单元的操作数进行移位;删除该第一指令队列中的所述移位指令,以形成第二指令队列;以及,将移位结果作为操作数以及该第二指令队列输入所述输出单元。
11.一种神经网络电路,其特征在于,包括:
如权利要求1至10中任一项所述的数据处理电路;以及
数据存储单元,与所述数据处理电路连接并且被配置为存储操作数。
12.一种神经网络芯片,其特征在于,包括:
至少一个如权利要求11所述的神经网络电路;以及
控制电路,与所述神经网络电路连接并且被配置为控制所述神经网络电路。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211502566.5A CN115713104A (zh) | 2022-11-28 | 2022-11-28 | 用于神经网络的数据处理电路、神经网络电路和处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211502566.5A CN115713104A (zh) | 2022-11-28 | 2022-11-28 | 用于神经网络的数据处理电路、神经网络电路和处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115713104A true CN115713104A (zh) | 2023-02-24 |
Family
ID=85235025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211502566.5A Pending CN115713104A (zh) | 2022-11-28 | 2022-11-28 | 用于神经网络的数据处理电路、神经网络电路和处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115713104A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116107728A (zh) * | 2023-04-06 | 2023-05-12 | 之江实验室 | 一种任务执行方法、装置、存储介质及电子设备 |
-
2022
- 2022-11-28 CN CN202211502566.5A patent/CN115713104A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116107728A (zh) * | 2023-04-06 | 2023-05-12 | 之江实验室 | 一种任务执行方法、装置、存储介质及电子设备 |
CN116107728B (zh) * | 2023-04-06 | 2023-08-18 | 之江实验室 | 一种任务执行方法、装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11698773B2 (en) | Accelerated mathematical engine | |
JP7469407B2 (ja) | ニューラルネットワーク計算ユニットにおける入力データのスパース性の活用 | |
CN107608715B (zh) | 用于执行人工神经网络正向运算的装置及方法 | |
EP3575952B1 (en) | Arithmetic processing device, information processing device, method and program | |
JP5647859B2 (ja) | 乗累算演算を実行するための装置および方法 | |
US11023807B2 (en) | Neural network processor | |
KR101202445B1 (ko) | 프로세서 | |
CN110705703B (zh) | 基于脉动阵列的稀疏神经网络处理器 | |
CN113853601A (zh) | 用于矩阵运算的装置和方法 | |
US20220391172A1 (en) | Implementation of Softmax and Exponential in Hardware | |
CN115713104A (zh) | 用于神经网络的数据处理电路、神经网络电路和处理器 | |
CN113626759A (zh) | 使用低位宽点积引擎对高位宽数求和 | |
CN110766136B (zh) | 一种稀疏矩阵与向量的压缩方法 | |
EP4206993A1 (en) | Configurable pooling processing unit for neural network accelerator | |
CN113052304A (zh) | 用于具有部分读取/写入的脉动阵列的系统和方法 | |
US20220012304A1 (en) | Fast matrix multiplication | |
CN113591031A (zh) | 低功耗矩阵运算方法及装置 | |
GB2614705A (en) | Neural network accelerator with configurable pooling processing unit | |
JP6604393B2 (ja) | ベクトルプロセッサ、演算実行方法、プログラム | |
EP1936492A1 (en) | SIMD processor with reduction unit | |
CN110764602B (zh) | 用于降低存储开销的汇流阵列 | |
GB2614327A (en) | Configurable pooling process unit for neural network accelerator | |
Zhang | Systolic Architectures for Efficient Deep Neural Network Implementations with Assured Performance | |
CN117648958A (zh) | 一种卷积神经网络加速器、数据处理方法及电子设备 | |
CN112862086A (zh) | 一种神经网络运算处理方法、装置及计算机可读介质 |
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 |