CN111091181B - 卷积处理单元、神经网络处理器、电子设备及卷积运算方法 - Google Patents
卷积处理单元、神经网络处理器、电子设备及卷积运算方法 Download PDFInfo
- Publication number
- CN111091181B CN111091181B CN201911253109.5A CN201911253109A CN111091181B CN 111091181 B CN111091181 B CN 111091181B CN 201911253109 A CN201911253109 A CN 201911253109A CN 111091181 B CN111091181 B CN 111091181B
- Authority
- CN
- China
- Prior art keywords
- data
- convolution
- processing unit
- module
- instruction
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Advance Control (AREA)
Abstract
本申请实施例提供一种卷积处理单元、神经网络处理器、电子设备及卷积运算方法,所述卷积处理单元用于:根据卷积核对输入数据进行一次取窗操作,得到第一窗体区域,所述第一窗体区域沿深度方向包括第一数量层的第一深度数据;获取多个卷积核,所述多个卷积核沿深度方向包括第一数量层的第二深度数据;以及将一层的所述第一深度数据与所述多个卷积核同一层的所述第二深度数据进行乘累加运算,得到第一运算数据。得到的目标运算数据的格式与输入数据的格式相同,不需要变形,可以直接作为下一运算层(如卷积层或池化层)的输入,省去了格式变化步骤,提高了卷积运算的整体效率。
Description
技术领域
本申请涉及电子技术领域,特别涉及一种卷积处理单元、神经网络处理器、电子设备及卷积运算方法。
背景技术
卷积神经网络(Convolutional Neural Networks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deeplearning)的代表算法之一。在卷积神经网络中,卷积运算是卷积神经网络中最主要的计算,卷积运算的效率直接影响卷积神经网络的效率。相关技术中,卷积神经网络中的卷积运算效率不够高。
发明内容
本申请实施例提供一种卷积处理单元、神经网络处理器、电子设备及卷积运算方法,可以提高卷积神经网络中卷积运算的效率。
本申请实施例公开一种卷积处理单元,所述卷积处理单元用于:
根据卷积核对输入数据进行一次取窗操作,得到第一窗体区域,所述第一窗体区域沿深度方向包括第一数量层的第一深度数据;
获取多个卷积核,所述多个卷积核沿深度方向包括第一数量层的第二深度数据;以及
将一层的所述第一深度数据与所述多个卷积核同一层的所述第二深度数据进行乘累加运算,得到第一运算数据。
本申请实施例还公开一种神经网络处理器,其包括:
数据缓存单元,存储输入数据;
卷积处理单元,所述卷积处理单元通过所述数据缓存单元获取输入数据,所述卷积处理单元为上述所述的卷积处理单元。
本申请实施例还公开一种电子设备,其包括:
系统总线;以及
神经网络处理器,所述神经网络处理器为上述所述的神经网络处理器,所述神经网络处理器与所述系统总线连接。
本申请实施例还公开一种卷积运算方法,其包括:
根据卷积核对输入数据进行一次取窗操作,得到第一窗体区域,所述第一窗体区域沿深度方向包括第一数量层的第一深度数据;
获取多个卷积核,所述多个卷积核沿深度方向包括第一数量层的第二深度数据;
将一层的所述第一深度数据与所述多个卷积核同一层的所述第二深度数据进行乘累加运算,得到第一运算数据。
将多层的所述第一深度数据对应的多个所述第一运算数据累加得到目标运算数据。
本申请实施例中,卷积处理单元对输入数据的卷积运算中,可以将输入数据的第一窗体区域和多个卷积核乘累加运算,具体将第一窗体区域的一层第一深度数据和多个卷积核同一层的第二深度数据进行乘累加运算,得到第一运算数据,得到的目标运算数据的格式与输入数据的格式相同,不需要变形,可以直接作为下一运算层(如卷积层或池化层)的输入,省去了格式变化步骤,提高了卷积运算的整体效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的神经网络处理器的第一种结构示意图。
图2为本申请实施例提供的神经网络处理器的第二种结构示意图。
图3为本申请实施例提供的神经网络处理器的第三种结构示意图。
图4为本申请实施例提供的神经网络处理器的第四种结构示意图。
图5为本申请实施例提供的神经网络处理器的第五种结构示意图。
图6为本申请实施例提供的神经网络处理器的第六种结构示意图。
图7为本申请实施例提供的神经网络处理器的第七种结构示意图。
图8为本申请实施例提供的神经网络处理器的第八种结构示意图。
图9为本申请实施例提供的神经网络处理器的第九种结构示意图。
图10为本申请实施例提供的神经网络处理器的第十种结构示意图。
图11为本申请实施例提供的神经网络处理器的第十一种结构示意图。
图12为本申请实施例提供的神经网络处理器的第十二种结构示意图。
图13为本申请实施例提供的神经网络处理器的第十三种结构示意图。
图14为本申请实施例提供的神经网络处理器的第十四种结构示意图。
图15为本申请实施例提供的神经网络处理器的第十五种结构示意图。
图16为本申请实施例提供的神经网络处理器的第十六种结构示意图。
图17本申请实施例提供的神经网络处理器中卷积处理单元的输入数据示意图。
图18本申请实施例提供的神经网络处理器中卷积处理单元的权重数据示意图。
图19本申请实施例提供的神经网络处理器中卷积处理单元的卷积运算示意图。
图20本申请实施例提供的神经网络处理器中卷积处理单元的另一卷积运算示意图。
图21为本申请实施例提供的芯片的结构示意图。
图22为本申请实施例提供的电子设备的结构示意图。
图23为本申请实施例提供的卷积运算方法的第一种流程示意图。
图24为本申请实施例提供的卷积运算方法的第二种流程示意图。
图25为本申请实施例提供的卷积运算方法的第三种流程示意图。
具体实施方式
本申请实施例提供的技术方案可以应用于各种需要对输入图像进行图像处理以得到相应地输出图像的场景,本申请实施例对此并不限定。诸如,本申请实施例提供的技术方案可以应用于计算机视觉等领域的各种场景,比如:人脸识别、图像分类、目标检测及语义分割等。
请参阅图1,图1为本申请实施例提供的神经网络处理器的第一种结构示意图。神经网络处理器(Neural Network Process Unit,NPU)200可包括第一处理模块210和指令分发模块220。
第一处理模块210可包括一个或多个处理单元,诸如第一处理模块210包括卷积处理单元212和向量处理单元214。本申请实施例的第一处理模块210所包括的多个处理单元均可对向量进行处理。需要说明的是,本申请实施例并不对第一处理模块210所处理数据的类型进行限定。
卷积处理单元212也可以称为卷积运算单元,卷积处理单元212还可以称为卷积计算引擎。卷积处理单元212内部可包含有多个乘加单元(Multiplication Add Cell,MAC),该乘加单元的个数可以为几千个,诸如卷积处理单元212内部可包含4096个乘加单元,可以分成16个cell,每个cell可以计算最大元素数是256向量内积操作。
向量处理单元214也可以称为向量计算单元,还可以称为单指令多数据(SingleInstruction Multiple Data,SIMD)处理单元。向量处理单元214是一个元素级向量计算引擎,可以处理常规的向量间的加减乘除等算术操作,同时也可以处理比特级的与、或、非、异或等逻辑操作。需要说明的是,本申请实施例的向量处理单元214还可以支持线性整流函数(Rectified Linear Unit,ReLU)、PRelu等常见的激活函数操作。还需要说明的是,本申请实施例的向量处理单元214还也可以通过查表法支持非线性激活函数Sigmoid和Tanh。
指令分发模块220也可以称为指令预处理模块。指令分发模块220与第一处理模块210连接,指令分发模块220可以与第一处理模块210中的每一个处理单元连接,诸如指令分发模块220与第一处理模块210中的卷积处理单元212和向量处理单元214连接。指令分发模块220可以发射指令到第一处理模块210,即指令分发模块220可以发射指令到第一处理模块210的处理单元。
在一些实施例中,指令分发模块220可以并行发射多条指令到第一处理模块210,诸如指令分发模块220可以并行发射多条指令到卷积处理单元212和向量处理单元214。举例来说,指令分发模块220可以将多条指令在一个时钟周期内并行发射到卷积处理单元212和向量处理单元214。从而本申请实施例可以支持多发射指令操作,可以同时高效的执行多条指令,诸如卷积处理单元212和向量处理单元214可分别执行卷积计算指令和向量计算指令。卷积处理单元212和向量处理单元214接收到指令后,卷积处理单元212和向量处理单元214根据指令对各自接收到的数据进行处理,以得到处理结果。由此本申请实施例可以提升计算效率,或者说可以提高NPU处理数据的效率。
可以理解的是,指令分发模块220所并行发射出的多条指令,所对应的处理单元在执行过程中没有资源上的冲突。
指令分发模块220所发射的多条指令中可以包括细粒度指令,指令分发模块220可以将细粒度指令发射到卷积处理单元212,卷积处理单元212在接收到细粒度指令后,卷积处理单元212根据细粒度指令可对其所接收到的数据进行一次向量内积运算。
应理解的是,指令分发模块220所发射的细粒度指令并不限于卷积处理单元212,指令分发模块220也可以将细粒度指令发射到向量处理单元214或第一处理模块210的其它处理单元中。
还应理解的是,本申请实施例指令分发模块220可以发射的指令并不限于细粒度指令。本申请实施例并不对指令分发模块220发射的指令进行限定。需要说明的是,指令可以包括不同的类型,诸如计算类型的指令、控制类型的指令等,其中计算类型指令可以包括第一计算指令、第二计算指令、第三计算指令等。
其中,细粒度指令对应的操作可以精确每个时钟周期,不同于粗粒度的处理器,即不同于一条指令需要处理器执行比较多的时钟周期才能够完成。还可以理解为,细粒度指令还体现为处理单元的计算粒度较细。诸如卷积处理单元212基于一个细粒度指令可以完成一个基本的向量内积操作。而粗粒度的处理器基于一个指令可以完成矩阵乘法,可以理解的是,矩阵乘法可以由多个向量内积运算组成。由此可见,本申请实施例可以支持多发射细粒度的指令操作,本申请实施例可以提高编程的灵活性,通用性较好。
本申请实施例指令分发模块220可以并行将第一计算指令发射到卷积处理单元212以及将第二计算指令发射到向量处理单元214。比如指令分发模块220在一个时钟周期内将第一计算指令发射到卷积处理单元212以及将第二计算指令发射到向量处理单元214。卷积处理单元212可以根据指令分发模块220所发射的第一计算指令对其所接收到的数据进行向量内积操作。以及向量处理单元214根据指令分发模块220所发射的第二计算指令对其所接收到的数据进行向量计算操作。
需要说明的是,第一处理模块210中处理单元并不限于卷积处理单元212和向量处理单元214,或者说第一处理模块210还可以包括其他处理单元。诸如第一处理模块210还整形处理单元等。
请参阅图2,图2为本申请实施例提供的神经网络处理器的第二种结构示意图。本申请实施例提供的神经网络处理器200的第一处理模块210可以包括卷积处理单元214、向量处理单元214和整形处理单元216,卷积处理单元212和向量处理单元214可以参阅图1所示的卷积处理单元212和向量处理单元214,在此不再赘述。整形处理单元也可以称为整形引擎。
整形处理单元216与指令分发模块220连接,指令分发模块220还可以将多条指令并行发射到卷积处理单元212、向量处理单元214以及整形处理单元216。诸如指令分发模块220还可以将多条指令在一个时钟周期内并行发射到卷积处理单元212、向量处理单元214以及整形处理单元216。整形处理单元216根据指令分发模块220所发射的指令诸如第三计算指令对其接收到的数据进行处理。整形处理单元216可以支持常见的Tensor的Reshape操作,比如维度转置,按照一个维度进行切分,数据填充Padding等。
需要说明的是,指令分发模块220的指令发射并不限于第一处理模块210。其他一些实施例中,指令分发模块220还可以将指令发射到其他处理模块。
请参阅图3,图3为本申请实施例提供的神经网络处理器的第三种结构示意图。本申请实施例提供的神经网络处理器200可以包括第一处理模块210、第二处理模块230和指令分发模块220。该第一处理模块210至少包括卷积处理单元212,当然该第一处理模块210也可以包括其他处理单元诸如向量处理单元214、整形处理单元216。卷积处理单元212可以其接收到的数据进行向量内积运算,具有可以参阅以上内容,在此不再赘述。向量处理单元214具体可以参阅以上内容,在此不再赘述。整形处理单元216具体可以参阅以上内容,在此不再赘述。
第二处理模块230可以对标量数据进行处理,第二处理模块230至少包括标量处理单元232(Scalar Process Unit,SPU)。标量处理单元232可以是一个兼容RISC-V指令集的处理单元。其中,标量处理单元232可以包括标量寄存器堆(Scalar Register File,SRF),即标量处理单元232可以包括多个标量寄存器。
指令分发模块220连接第一处理模块210和第二处理模块230,指令分发模块220可以将多条指令并行发射到第一处理模块210和第二处理模块230。诸如指令分发模块220可以将多条指令在一个时钟周期内并行发射到卷积处理单元212和标量处理单元232。
应理解,第一处理模块210还包括其他处理单元时,指令分发模块220还可以将多条指令在一个时钟周期内并行发射到其他处理单元。诸如指令分发模块220将多条指令在一个时钟周期内并行发射到卷积处理单元212、向量处理单元214及标量处理单元232,还比如指令分发模块220将多条指令在一个时钟周期内并行发射到卷积处理单元212、整形处理单元216及标量处理单元232,再比如指令分发模块220将多条指令在一个时钟周期内并行发射到卷积处理单元212、向量处理单元214、整形处理单元216及标量处理单元232。
还应理解,在实际过程中,指令分发模块220所发射的指令并不限于此,指令分发模块220根据神经网络处理器200处理数据的需求可以将不同的指令并行发射到同一个处理模块中的多个处理单元,或者将不同的指令并行发射到不同处理模块中的处理单元。以上仅是本申请实施例所提供的技术方案中指令分发单元220并行发射多条指令的几种举例说明。本申请实施例所提供的技术方案指令分发单元220发射指令的方式并不限于此。比如:指令分发单元220将多条指令并行发射到标量处理单元232和向量处理单元214。再比如:指令分发单元220将多条指令并行发射到整形处理单元216和向量处理单元214。
标量处理单元232根据指令分发模块220所分发的指令诸如控制指令对其接收到的数据进行处理。标量处理单元232可以接收或者说是标量指令,诸如控制指令,标量处理单元232主要负神经网络处理器200的标量运算。
需要说明的是,标量处理单元232不仅可以从指令分发模块220接收指令,还可以将新的程序计数器(PC)的值传输到指令分发模块220。
请参阅图4,图4为本申请实施例提供的神经网络处理器的第四种结构示意图。标量处理单元232不仅可以从指令分发模块220接收指令,还可以将新的程序计数器(PC)的值传输到指令分发模块220。标量处理单元232可以执行标量计算指令(加减乘除、逻辑操作)、分支指令(条件判断操作)、跳转指令(函数调用)。当处理分支指令和跳转指令时,标量处理单元232会将新的PC值返回给指令分发模块220,以使得指令分发模块220下一次分发指令时从新的PC来取指。
请参阅图5,图5为本申请实施例提供的神经网络处理器的第五种结构示意图。本申请实施例提供的神经网络处理器200还包括数据存储模块(Buffer,BUF)240,数据存储模块240可以存储数据,诸如图像数据、权重数据等。
数据存储模块240可以与第一处理模块210和第二处理模块230连接。诸如数据存储模块240与标量处理单元232、卷积处理单元212、向量处理单元214及整形处理单元216连接。数据存储单元240与标量处理单元232、卷积处理单元212、向量处理单元214及整形处理单元216均可以传输数据,诸如数据存储单元240与卷积处理单元212、向量处理单元214及整形处理单元216直接传输数据。由此,本申请实施例在数据存储模块220和各个处理单元诸如卷积处理单元212、向量处理单元214之间可以实现数据的直接传输,可以提升NPU200的性能。
第一处理模块210对数据的处理可以是:卷积处理单元212和向量处理单元214在接收到指令分发单元220所并行发射的指令诸如第一计算指令、第二计算指令时,卷积处理单元212和向量处理单元214可以数据存储模块240读取其所需要处理的数据诸如待处理数据。卷积处理单元212和向量处理单元214对该待处理数据进行处理操作,以得到处理结果,并将该处理结果存储到数据缓存模块240。
卷积处理单元212和向量处理单元214处理数据可以是:卷积处理单元212在接收到指令分发单元220所发射的指令诸如第一计算指令时,卷积处理单元212会根据该第一计算指令从数据存储模块240读取其所需要处理的数据诸如待处理数据。卷积处理单元212从数据存储模块240读取到其所需要处理的数据后,卷积处理单元212会根据该第一计算指令执行相应的操作诸如向量内积计算,以得到中间计算结果。卷积处理单元212可以将该中间计算结果存储到数据存储模块240中。向量处理单元214可以从数据存储模块240中获取该中间计算结果、并对该中间计算结果进行第二次计算处理诸如池化操作,以得到处理结果,并将该处理结果存储到数据缓存模块240。
数据存储模块240所存储的数据可以是原始数据和权重数据,诸如待处理数据,或者说数据存储模块240所存储的数据是需要至少一个处理单元进行处理诸如运算处理的数据。数据存储模块240所存储的数据也可以是处理结果,或者说数据存储模块240所存储的数据是经过至少一个处理单元对待处理数据进行处理后的数据。需要说明的是,数据存储模块240实际所存储的数据并不限于此,数据存储模块240还可以存储其他数据。
需要说明的是,卷积处理单元212和向量处理单元214处理数据并不限于此,卷积处理单元212和向量处理单元214还可以通过信号线直接相连。
卷积处理单元212和向量处理单元214处理数据还可以是:卷积处理单元212在接收到指令分发单元220所发射的指令诸如第一计算指令时,卷积处理单元212会根据该第一计算指令从数据存储模块240读取其所需要处理的数据诸如待处理数据。卷积处理单元212从数据存储模块240读取到其所需要处理的数据后,卷积处理单元212会根据该第一计算指令执行相应的操作诸如向量内积计算,以得到中间计算结果。卷积处理单元212可以将该中间计算结果传输到向量处理单元214。向量处理单元214对该中间计算结果进行第二次计算处理诸如池化处理、后续的激活、量化操作或者是和下一层的操作进行融合,同时处理两层算子的操作,以得到处理结果,并将该处理结果存储到数据缓存模块240。
需要说明的是,卷积处理单元212还可以与第一处理模块210的其他处理单元诸如整形处理单元216通过信号线连接。第一处理模块210对数据的还可以是卷积处理单元212处理完成后将其计算得到的中间计算结果直接传输到整形处理单元216或第一处理模块210中的其他处理单元以进行其他计算操作。或者第一处理模块210对数据的还可以是卷积处理单元212处理完成后将其计算得到的中间计算结果存储到数据缓存模块240,再由整形处理单元216或第一处理模块210中的其他处理单元从数据缓存模块240获取该中间计算结果、并对该中间计算结果做进一步的处理操作诸如整形操作,以得到处理结果。整形处理单元216或第一处理模块210中的其他处理单元将该处理结果存储到数据缓存模块240。
应理解,在第一处理模块210的各个处理单元在相互传输数据进行处理过程中,可以不将中间计算结果存储到数据缓存模块240,数据缓存模块240可以存储原始数据和权重,而不存储中间计算结果。不仅可以节省数据缓存模块240的存储空间,还可以减少数据存储模块240的访问,降低功耗,提升神经网络处理器200的性能。
还应理解的是,本申请实施例第一处理模块210其他处理单元之间对数据处理的方式可以类比以上第一处理模块210中卷积处理单元212和向量处理单元214的方式。本申请实施例第一处理模块210其他处理单元之间对数据处理的方式在此不再一一举例说明。
本申请实施例数据存储模块220可以存储计算结果。在多个处理单元的运算过程中,可以做到0fallback到外部存储器,可以不需要将上一个算子的结算结果fallback到外部存储,对soc的带宽需求比较低,从而节省了系统带宽,减少了算子间的计算延迟。
在一些实施例中,该数据存储模块240可以是共享的存储模块。该数据存储模块220可以具有多个并行访问的Bank,诸如三个、四个等。可以根据实际需要对其进行灵活的划分。
请参阅图6,图6为本申请实施例提供的神经网络处理器的第六种结构示意图。图8所示的神经网络处理器与图5所示的神经网络处理器的区别在于:图6中的第二处理模块230诸如标量处理单元232与指令分发模块220连接、且图6中的第二处理模块230诸如标量处理单元232与数据存储模块240不连接。而图10中的第二处理模块230诸如标量处理单元232与指令分发模块220连接、且图10中的第二处理模块230诸如标量处理单元232与数据存储模块240连接。图6中的第二处理模块230诸如标量处理单元232所需要处理的数据可以由其接收到指令携带,或者说图6中的第二处理模块230诸如标量处理单元232所需要处理的数据可以由指令分发模块220所分发的指令携带。本申请实施例还可以给第二处理模块230诸如标量处理单元232设置一个单独的数据存储模块。
需要说明的是,数据存储模块240还可以与指令分发模块220连接,指令分发模块220根据数据存储模块240是否存储有待处理数据确定是否发射指令。
请参阅12,图7为本申请实施例提供的神经网络处理器的第七种结构示意图。指令分发模块220与数据存储模块240连接,指令分发模块220可以向数据存储模块240发送一个索引,数据存储模块240根据指令分发模块220所发送的索引返回一个信号。当数据存储模块240中存储有待处理数据时,数据存储模块240向指令分发模块220返回存储有待处理数据的信号,诸如“1”。当数据存储模块240中未存储有待处理数据时,数据存储模块240向指令分发模块220返回未存储有待处理数据的信号,诸如“0”。
指令分发模块220根据其接收到的不同的返回信号以做出不同的动作。诸如若指令分发模块220接收到“1”时,指令分发模块220确定出数据存储模块240存储有待处理数据,进而指令分发模块220将多条指令并行发射出去。若指令分发模块220接收到“0”时,指令分发模块220确定出数据存储模块240未存储有待处理数据,此时指令分发模块220不向发射指令。从而可以避免不必要的指令分发,节省功耗。
请参阅13,图8为本申请实施例提供的神经网络处理器的第八种结构示意图。本申请实施例提供的神经网络处理器200还可以包括指令存储模块250,指令存储模块250也可以称为指令存储模块(Instruction Cache,ICache)。指令存储模块250可以存储一些细粒度的指令,诸如计算指令、控制指令等。或者说指令存储模块250用于存储NPU的指令。需要说明的是,指令存储模块250所存储的指令还可以为其他指令。指令存储模块250与指令分发模块220连接,指令存储模块250可以将其所存储的指令发送到指令分发模块220。或者说指令分发模块220可以从指令存储模块250获取多条指令。
指令分发模块220从指令存储模块250获取指令的过程可以是:指令分发模块220向指令存储模块250发送取指请求,当在指令存储模块250中找到与该取指请求相对应的指令时,即为指令命中,指令存储模块250响应该取指请求将与该取指请求相对应的指令发送至指令分发模块220。而当在指令存储模块250中未找到与该取指请求相对应的指令时,称为指令缺失,指令存储模块250会暂停(Hold)响应取指请求,同时指令存储模块250会发送指令获取请求以等待指令返回到指令存储模块250,然后指令存储模块250再响应取指请求将与取指请求相对应的指令发送至指令分发模块220。
指令分发模块220从指令存储模块250获取指令的过程可以理解为:当指令分发模块220所需要的指令已经存储在指令存储模块250时,指令分发模块220可以直接从指令存储模块250获取。而当指令分发模块220所需要的指令至少有一条不在指令存储模块250时,需要通过指令存储模块250从其他位置诸如外部存储器读取指令分发模块220所需要的指令、并将该指令返回给指令分发模块220。
需要说明的是,本申请实施例指令分发模块220和指令存储模块250可以是相互分离的两个部分。当然,指令分发模块220和指令存储模块250也可以组成一个指令预处理模块,或者说指令分发模块220可以和指令存储模块250为指令预处理模块中的两个部分。
还需要说明的是,指令存储模块250所存储的每一条指令都具有相应的类型,指令分发模块220可以基于指令的类型对多条指令进行发射。诸如指令分发模块220将第一类型的指令发射到卷积处理单元212,指令分发模块220将第二类型的指令发射到标量处理单元232。指令的类型诸如为跳转指令、分支指令、卷积计算指令、向量计算指令、整形计算指令等。
本申请实施例指令存储模块250并不限于仅存储NPU200的一部分指令。本申请实施例的指令存储模块250还可以存储NPU200的所有指令,指令存储模块250可以称为指令存储器(Instruction RAM,IRAM),或者称为程序存储器。上层软件诸如外部处理器可以直接将程序写入到IRAM中。
请参阅图9,图9为本申请实施例提供的神经网络处理器的第九种结构示意图。神经网络处理单元200还可以包括数据搬移模块260、指令搬移模块270和系统总线接口280。
系统总线接口280与系统总线连接,该系统总线可以是电子设备诸如智能手机的系统总线。系统总线接口280与系统总线连接可以实现与其他处理器、外部存储器之间进行数据传输。系统总线接口280可以将内部读写请求转换成符合总线接口协议诸如先进可拓展接口(Advanced extensible interface,AXI)协议的总线读写请求。
数据搬移模块260连接系统总线接口280和数据存储模块240,数据搬移模块260用于搬移数据,可以将外部数据搬移到数据存储模块240,也可以将数据存储模块240的数据搬移到外部。诸如数据搬移模块260通过系统总线接口280从系统总线读取数据、并将其所读取的数据写入到数据存储模块240。数据搬移模块260还可以将数据存储模块240所存储的数据或者说是处理结果传输到外部存储器,诸如数据搬移模块260将第一处理模块210中各个处理单元的处理结果传输外部存储器。即数据搬移模块260通过系统总线接口280可以实现内部数据和外部存储之间进行数据搬移。
其中,数据搬移模块260可以为直接存储访问(Direct memory access,DMA),DMA可将数据从一个地址空间搬移到另一个地址空间。数据搬移的地址空间可以是内部存储器,也可以是外设接口。通常提前在RAM上存储控制DMA数据搬移的描述符,描述符包括源端地址空间、目的端地址空间、数据长度等信息。软件对DMA进行初始化,数据开始搬移,这个搬移的过程可以脱离NPU独立进行,提高NPU的效率,减小NPU负担。
指令搬移模块270连接系统总线接口280和指令存储模块250,指令搬移模块270用于搬移指令,或者说指令搬移模块270用于读取指令,以将外部的指令搬移到指令存储模块250。诸如指令搬移模块270通过系统总线接口280从系统总线读取指令、并将其所读取的指令存储到指令存储模块250。当指令存储模块250的指令缺失时,指令存储模块250会请求指令搬移模块270向系统总线接口280发出读指令请求,以读取相应的指令并存储到指令存储模块250。指令搬移模块270可以为直接存储访问。当然,指令存储模块250也可以通过指令搬移模块270直接将所有的指令写入到指令存储模块250。
请参阅图10,图10为本申请实施例提供的神经网络处理器的第十种结构示意图,图10示出了指令存储模块250与系统总线接口280连接,外部存储器可以直接将程序或者说神经网络处理器200所需的指令存储到指令存储模块250。
需要说明的是,当指令存储模块250为IRAM时,本申请实施例还可以将指令存储模块250通过其他接口与外部存储器连接。以便于外部处理器可以将指令或者说程序直接写入到指令存储模块250,或者说是指令的初始化。
因此,本申请实施例数据搬移模块260和指令搬移模块270是两个相互分开的单元模块,分别实现数据和指令的传输,或者说搬移。或者说本申请实施例需要设置两个DMA来实现数据和指令的搬移。数据搬移模块260需要设置一个或多个逻辑通道,指令搬移模块270需要设置一个或多个物理通道。在此以指令搬移模块270为例进行说明。
诸如本申请实施例数据搬移模块260可以为一个单独的DMA,在此定义为DMA1;指令搬移模块270可以为一个单独的DMA,在此定义为DMA2。即DMA1可以进行数据的搬移,DMA2可以进行指令的搬移。
请参阅图11,图11为本申请实施例提供的神经网络处理器中直接存储访问的第一种结构示意图。图11所示的DMA260a相当于为数据搬移模块260的部分结构示意图。DMA260a包括多个逻辑通道262a和一个仲裁单元254a。多个逻辑通道262a均与仲裁单元264a连接,仲裁单元264a可通过系统总线接口连接系统总线。需要说明的是,仲裁单元264a也可以通过其他接口连接外设和存储中的至少一者。
其中,逻辑通道262a的个数可以为h个,h为大于1的自然数,即逻辑通道262a可以至少为两个。每个逻辑通道262a都可以接收数据搬移请求诸如请求1、请求2、请求f,并基于数据搬移请求进行数据搬移操作。
每个DMA260a的逻辑通道262a可以完成描述符生成、解析、控制等功能,具体情况根据命令请求(request)的构成来确定。当多个逻辑通道262a同时接收到数据搬移的请求时,通过仲裁单元264a可以选出一个请求,进入读请求队列266a和写请求队列268a,等待数据搬移。
逻辑通道262a需要软件介入,由软件提前配置描述符或者寄存器,完成初始化来进行数据搬移。DMA260a所有逻辑通道262a对于软件都是可见的,由软件来进行调度。而有些业务场景,如内部引擎诸如指令分发模块(或者说指令预处理模块)自主进行数据搬移时,不需要经过软件来调度,则不能使用此类DMA260a的逻辑通道262a。因此不方便根据业务需求灵活地移植,过于依赖软件调度。
基于此,本申请实施例还提供一种DMA以实现不同搬移的需求。
请参阅图12,图12为本申请实施例提供的神经网络处理器中直接存储访问的第二种结构示意图。图12所示的直接存储访问260b在功能上相当于指令搬移模块270和数据搬移模块260,或者说图12所示的直接存储访问260b将指令搬移模块270和数据搬移模块260的功能合并在一起。直接存储访问260b可包括至少一个逻辑通道261b和至少一个物理通道262b,至少一个逻辑通道261b和至少一个物理通道262b并行,也可以理解为至少一个逻辑通道261b和至少一个物理通道262b共同连接到同一个接口。从而至少一个物理通道262b和至少一个逻辑通道261b可以并行的搬移指令和数据。由于物理通道262b对指令的搬移由内部引擎诸如指令分发模块自主发出请求,不需要经过上层软件的调度,从而可以整个DMA260b对软件调度的依赖,更加方便搬移数据,进而更加方便根据业务需求灵活地搬移数据。可以理解的是,本申请实施例采用一个DMA260b即可实现指令和数据的搬移,还可以节省单元模块的个数。
其中逻辑通道261b可以响应于上层软件调度的搬移请求进行数据搬移。该上层软件可以是可编程单元,诸如中央处理器(CPU)。
其中逻辑通道261b的个数可以为n个,n可以为大于或等于1的自然数。诸如逻辑通道261b的个数为一个、两个、三个等。需要说明的是,逻辑通道261b的实际个数可根据实际产品的需求进行设置。
其中物理通道262b可以响应于内部引擎的搬移请求进行数据搬移,该内部引擎可以是NPU的指令分发模块,或者说是指令预处理模块。
其中物理通道262b的个数可以为m个,m可以为大于或等于1的自然数。诸如物理通道262b的个数为一个、两个、三个等。需要说明的是,物理通道262b的实际个数可根据实际产品的需求进行设置。在一些实施例中,逻辑通道261b的个数可以为两个,物理通道262b的个数可以为一个。
请继续参阅图12,DMA260b还可以包括第一仲裁单元263b,该第一仲裁单元263b与系统总线接口连接。
请结合图13,图13为本申请实施例提供的神经网络处理器的第十一种结构示意图。第一仲裁单元263b与系统总线接口264b,可以理解的是,该系统总线接口264b可等同于系统总线接口280。第一仲裁单元263b可通过该系统总线接口264b与系统总线连接,该第一仲裁单元263b还分别与所有的物理通道262b以及所有的逻辑通道261b连接,以便于逻辑通道261b、物理通道262b从系统总线搬移数据和指令。当多个通道同时发起读/写请求时,第一仲裁单元263b可以仲裁出一个读/写请求发送给系统总线接口264b。诸如一个逻辑通道261b和一个物理通道262b同时发起读/写请求时,第一仲裁单元263b可以仲裁出一个物理通道262b的读/写请求发送给系统总线接口264b,或者第一仲裁单元263b可以仲裁出一个逻辑通道261b的读/写请求发送给系统总线接口264b。
其中,系统总线接口264b可以设置在DMA260b外。需要说明的是,系统总线接口264b也可以设置在DMB260b内,即系统总线接口264b可以是DMA260b的一部分。
在一些实施例中,第一仲裁单元263b可以对至少一个物理通道262b和至少一个逻辑通道261b的带宽进行重新分配。
在一些实施例中,逻辑通道261b可以包括逻辑通道接口2612b、描述符控制模块2614b和数据传输模块2616b。逻辑通道接口2612b可以与数据存储模块诸如图5所示的数据存储模块240连接,逻辑通道接口2612b、描述符控制模块2614b及数据传输模块2616b依次连接,数据传输模块2616b还与第一仲裁单元263b连接,以通过系统总线接口264b与系统总线连接。
逻辑通道接口2612b可以由上层软件下发命令的格式所确定,逻辑通道接口2612b可以含有描述符的地址。描述符控制模块2614b根据上层软件下发的命令来索引描述符,解析数据源端地址、目的端地址、数据长度等信息,对DMA260b的传输数据模块2616b发起读写数据命令。数据传输模块2616b接收上一级(描述符控制模块2614b)的读写数据命令,将该读写数据命令转换成所需信号,可以先读后写,完成数据搬移,返回响应给描述符控制模块2614b。
逻辑通道261b搬移数据的具体过程如下:
配置DMA260b的控制状态寄存器(Control Status Register,CSR)269b。需要说明的是,DMA260b搬移数据需要满足几个条件:数据从哪里传(源地址),数据传到哪里去(目的地址),数据在什么时间传输(触发源,或者说触发信号)。需要将DMA260b的各种参数、条件配置完成才能够实现数据的搬移。可以采用上层软件设置源地址、目的地址以及触发源。
实际应用中,可以将DMA260b的各种参数及条件设置在控制状态寄存器269b中,或者说将DMA260b的配置信息以及参数,如工作模式、仲裁优先级、接口信息等设置在控制状态寄存器269b中。在一些实施例中,比如在控制状态寄存器269b中设置外设寄存器的地址、数据存储器的地址、需要传输数据的数据量、各个通道之间的优先级、数据传输的方向、循环模式、外设和存储器的增量模式、外设和存储器的数据宽度等。
上层软件对DMA260b的逻辑通道261b下发数据搬移命令至逻辑通道接口2612b,或者说上层软件对DMA260b的逻辑通道261b下发数据搬移请求至逻辑通道接口2612b,可编程单元对DMA260b的逻辑通道261b下发数据搬移命令时一并携带有描述符的地址,或者直接携带有描述符。并通过逻辑通道接口2612b将该描述符的地址或者描述符传输到描述符控制模块2614b。
描述符控制单元2614b若接收到的是描述符的地址,则描述符控制单元2614b根据该描述符的地址读取描述符。即索引描述符。然后基于该描述符进行解析,即生成数据搬移所需信息,如数据源端地址空间、目的端地址空间、数据长度等。而当描述符控制单元2614b接收到的是描述符,则描述符控制单元2614b直接解析描述符。
描述符控制单元2614b解析完成描述符后,数据传输模块2616b可遵循先读后写的原则,将描述符控制单元2614b所解析描述符而生产的信息转换成系统总线接口264b所需传输的信号,并传输至第一仲裁单元263b。
第一仲裁单元263b在接收到多个逻辑通道261b同时发起的读/写请求时,可以仲裁出一个发送到系统总线接口264b。
而当第一仲裁单元263b同时接收到有来自逻辑通道261b发起的读/写请求以及来自物理通道262b发起的读/写请求时,第一仲裁单元263b同样可以仲裁出一个发送到系统总线接口264b,并通过系统总线接口264b传输到系统总线。
DMA260b的读/写请求传输到系统总线后,系统总线完成读写命令,源端地址空间的数据写入目的端地址空间。从而完成数据搬移。
其中,物理通道262b可以通过接口与内部引擎诸如指令分发模块连接,该接口可以包含进行指令搬移的配置和参数。当然该物理通道262b进行指令搬移的配置和参数也可以由控制状态寄存器269b来配置。
需要说明的是,DMA260b还可以通过其他结构与其他部件实现连接,以实现数据的搬移。
请继续参阅图14和图15,图14为本申请实施例提供的神经网络处理器中直接存储访问的第三种结构示意图,图15为本申请实施例提供的神经网络处理器的第十二种结构示意图。DMA260b还可以包括第二仲裁单265b,第二仲裁单265b可以与存储接口266b连接。该存储接口266b可以连接存储模块(memory,或者为BUF),该存储模块与DMA260b可以位于同一个NPU中,该存储模块与DMA260b也可以不位于同一个NPU中。诸如DMA260b位于NPU中,存储模块可以位于NPU中,存储模块也可以位于其它器件中。第二仲裁单265b可以与每一个逻辑通道261b连接,且第一仲裁单元263b和第二仲裁单265b连接同一个逻辑通道261b时,可以由一选择器连接到同一个逻辑通道261b。其中,存储接口266b可以设置在DMA260b外,也可以设置在DMA260b内。
请继续参阅图14和图15,DMA260b还可以包括第三仲裁单元267b,第三仲裁单元267b和外设接口268b,外设接口268b可以连接外部设备,该外部设备与DMA260b位于不同的器件中,诸如DMA260b位于NPU中,外部设备为CPU等。第三仲裁单元267b可以与每一个逻辑通道261b连接,且第一仲裁单元263b和第三仲裁单元267b连接同一个逻辑通道261b时,可以由一选择器连接同一逻辑单元261b。其中,外设接口268b可以设置在DMA260b外,也可以设置在DMA260b内。
请继续参阅图14和图15,本申请实施例DMA260b还可以同时包括第一仲裁单元263b、第二仲裁单元265b及第三仲裁单元267b。第一仲裁单元263b连接系统总线接口264b,第二仲裁单元265b连接存储接口266b,第三仲裁单元267b连接外设接口268b,第一仲裁单元263b、第二仲裁单元265b及第三仲裁单元267b均与可以与逻辑通道261b连接,当第一仲裁单元263b、第二仲裁单元265b及第三仲裁单元267b连接有一个逻辑通道261b时,可以由一个选择器连接在一个逻辑通道261b和三个仲裁单元之间。
需要说明的是,本申请实施例还可以设置其他仲裁单元以通过其他接口连接其他元件。19和图15所示出的仲裁单元的个数实际可以为一个、两个或三个。即当图14和图15所示出的仲裁单元为一个时,可以为第一仲裁单元263b,可参阅图12和图13。当图14和图15所示出的仲裁单元为两个时,可以是第一仲裁单元263b和第二仲裁单元265b,也可以是第一仲裁单元263b和第三仲裁单元267b。当19和图15所示出的仲裁单元为三个时,可以是第一仲裁单元263b、第二仲裁单元265b及第三仲裁单元267b。
请参阅图11,图11为本申请实施例提供的神经网络处理器的第十一种结构示意图。图11示出了图12或图14的直接存储访问260b与神经网络处理器200其他元件的一种连接关系。该直接存储访问260b连接系统总线接口280、指令存储模块250及数据存储模块240,直接存储访问260b可以通过系统总线接口280将数据搬移到数据存储模块240,直接存储访问260b可以通过系统总线接口280将指令搬移到指令存储模块250,直接存储访问260b还可以通过系统总线接口280将数据存储模块240所存储的数据搬移到外部存储器。
本申请实施例神经网络处理器200中第一处理模块210的数据可以直接存储到数据存储模块240,数据存储模块240的数据也可以加载到第一处理模块210,从而使得程序比较精简。然而,为了加快数据的存取速度,本申请实施例还可以在数据存储模块240和第一处理模块210之间增加通用寄存器。下面结合附图对具有通用寄存器的神经网络处理器进行详细说明。
请参阅图12,图12为本申请实施例提供的神经网络处理器的第十二种结构示意图。神经网络处理器200还可以包括通用寄存器290和加载存储模块202。
通用寄存器290与第一处理模块210连接,通用寄存器290可以与第一处理模块210中的所有的处理单元连接。诸如通用寄存器290与第一处理模块210的卷积处理单元212、向量处理单元214连接。卷积处理单元212和向量处理单元214均可以从通用寄存器290中获取所需的数据。当然,卷积处理单元212和向量处理单元214也均可以将各自的处理结果存储到通用寄存器290。需要说明的是,图12所示出的第一处理模块210中处理单元的个数并不限于此,诸如第一处理模块210还包括整形处理单元。
其中,通用寄存器290可以包括多个寄存器,诸如通用寄存器290包括多个向量寄存器292。再比如通用寄存器290包括多个预测寄存器294。还比如通用寄存器290包括多个向量寄存器292和多个预测寄存器294。其中,多个向量寄存器292可以简称为向量寄存器堆(Vector Register File,VRF)。其中,多个预测寄存器294可以简称为预测寄存器堆(Predicate Register File,PRF),预测寄存器也可以称为谓词寄存器。通用寄存器290中各个寄存器的类型及个数可以根据实际需求设置。以提高软件编程的灵活性。
其中,卷积处理单元212可以具有专用寄存器2122,该专用寄存器2122可以存储数据,诸如卷积处理单元212的专用寄存器2122为两个,分别为第一专用寄存器和第二专用寄存器,第一专用寄存器可以存储图像数据,第二专用寄存器可以存储权重。
加载存储模块(Load Store Unit,LSU)202与通用寄存器290连接,加载存储模块202可以将数据加载到通用寄存器290,便于第一处理模块210的各个处理单元从通用寄存器290获取数据。加载存储模块202还可以与卷积处理单元212的专用寄存器2122连接,加载存储模块202还可以将数据直接加载到卷积处理单元212的专用寄存器2122,以便于卷积处理单元212对数据进行处理,诸如卷积处理。从而可以提高加载数据的速度。
需要说明的是,图12仅示出神经网络处理器200的部分元件,图12所示神经网络处理器200的其他元件可以参阅图1至图11,为了详细说明本申请实施例加载存储模块202和通用寄存器290与神经网络处理器200其他元件的关系,下面结合图13进行详细说明。
请参阅图13,图13为本申请实施例提供的神经网络处理器的第十三种结构示意图。加载存储模块(Load Store Unit,LSU)290连接通用寄存器290和数据存储模块240。加载存储模块202可以将数据存储模块240的数据加载到通用寄存器290,第一处理模块210的处理单元诸如卷积处理单元212、向量处理单元214、整形处理单元216可以根据指令从通用寄存器290中获取所需要处理的数据。通用寄存器290可以与多个处理单元连接,诸如通用寄存器290与卷积处理单元212连接,且通用寄存器290还与向量处理单元214和整形处理单元216中的至少一者连接。从而,卷积处理单元212、向量处理单元214、整形处理单元216均可以从通用寄存器290获取所需要处理的数据。
卷积处理单元212、向量处理单元214、整形处理单元216也均可以将各自的处理结果存储到通用寄存器290。进而加载存储模块202可以将通用寄存器290中的处理结果存储到数据存储模块240,数据存储模块240可以通过直接存储访问或数据搬移模块260将处理结果传输到外部存储器中。
需要说明的是,本申请实施例第二处理模块230诸如标量处理单元232不与通用寄存器290连接,如上所述,本申请实施例标量处理单元232所需要处理的数据可以由其所接收的指令携带。本申请实施例标量处理单元232也可以与数据存储模块240连接,以从数据存储模块240获取所需处理的数据。
本申请实施例加载存储模块202不仅可以将数据存储模块240的数据存储通用寄存器290,还可以加载其它位置。比如加载存储模块202还直接与卷积处理单元212连接,该加载存储模块202直接与卷积处理单元212连接可以理解为加载存储模块202和卷积处理单元212之间未连接有如上所述的通用寄存器290。加载存储模块202与卷积处理单元212连接可以理解为加载存储模块202与卷积处理单元212的专用寄存器2122连接,诸如加载存储模块202与卷积处理单元212中的其中一个专用寄存器2122连接,加载存储模块202可以直接将数据存储模块240的数据诸如权重加载到卷积处理单元212的其中一个专用寄存器2122。可以理解的是,加载存储模块202也可以直接将其他数据诸如图像数据加载到卷积处理单元212的其中一个专用寄存器2122。
由此本申请实施例加载存储模块202可以将数据存储模块240的数据直接加载到卷积处理单元212,加载存储模块202还可以将数据存储模块240的数据存储到通用寄存器290,第一处理模块210的处理单元诸如卷积处理单元212可以基于其接收到的指令从通用寄存器290获取相应的数据。诸如加载存储模块202可以将第一数据直接加载到卷积处理单元212,加载存储模块202可以将第二数据存储到通用寄存器290,卷积处理单元212可以从通用寄存器290中获取到该第二数据。第一数据和第二数据的类型可以不同,诸如第一数据为权重,第二数据为图像数据。从而本申请实施例卷积处理单元212可以从不同的通路接收到所需要处理的数据,相比卷积处理单元212从同一通路接收到所需处理的数据可以加快数据加载的速度,进而可以提高神经网络处理器200的运算速率。而且,本申请实施例可以简化指令集,使得其易于实现。同时,本申请实施例还更加容易优化编译器。
需要说明的是,加载存储模块202将第一数据直接加载到卷积处理单元212,以及加载存储模块202将第二数据加载到通用寄存器290后,也可以由第一处理模块210的其他处理单元诸如向量处理单元214从通用寄存器290中获取到该第二数据。
还需要说明的是,加载存储模块202还可以将其他数据诸如第三数据加载到通用寄存器290,可以由第一处理模块210的一个或多个处理单元诸如整形处理单元216从通用寄存器290中获取该第三数据。该第三数据的类型可以与第一数据、第二数据的类型均不同。
加载存储模块202还与指令分发模块220连接,加载存储模块202可以接收指令分发模块220所发射的指令,加载存储模块202可以根据指令分发模块240所发射的指令将数据存储模块240的数据进行存储到通用寄存器290或/和加载到卷积处理单元212。加载存储模块202还可以根据指令分发模块240所发射的指令将存储在通用寄存器290的处理结果存储到数据存储模块240。该处理结果诸如为向量处理单元214的处理结果。
需要说明的是,指令分发模块220可以在一个时钟周期内将多条指令并行发射到第一处理模块210、第二处理模块230及加载存储模块202。诸如指令分发模块220可以在一个时钟周期内将多条指令并行发射到标量处理单元232、卷积处理单元212、向量处理单元214和加载存储模块202。
其中加载存储模块202与数据存储模块240可以集成在一起,而作为一个模块的两部分。当然,加载存储模块202与数据存储模块240也可以分开设置,或者说加载存储模块202与数据存储模块240不集成在一个模块中。
请参阅图14,图14为本申请实施例提供的神经网络处理器的第十四种结构示意图。神经网络处理器200还可以包括数据搬移引擎204。该数据搬移引擎204也可以称为寄存器堆数据搬移引擎(MOVE)。该数据搬移引擎204可以实现不同寄存器之间数据的搬移,以便于第一处理模块210的处理单元诸如卷积处理单元212和第二处理模块230的处理单元诸如标量处理单元232从NPU200内部获取所需的数据进行处理,而无需将数据传输到NPU200外部经由上层软件处理后再返还到NPU200。或者说述数据搬移引擎204可以实现不同寄存器之间的数据交互,从而就可以节省NPU200中的一些数据从NPU200向外部传输的过程,减少了NPU200与上层软件诸如CPU的交互,提高了NPU200处理数据的效率。同时,还可以减少外部CPU的工作负载。
数据搬移引擎204连接通用寄存器290和第二处理模块230的标量处理单元232,该标量处理单元232具有可以参阅以上内容,在此不再赘述。该标量处理单元232包括有多个标量寄存器2322,简称为标量寄存器堆,标量处理单元232通过标量寄存器2322与数据搬移引擎204连接。该通用寄存器290中具有多个寄存器,简称寄存器堆,通用寄存器290通过其内的寄存器堆与数据搬移引擎204连接。需要说明的是,通用寄存器290的多个寄存器可以全部与数据搬移引擎204连接。需要说明的是,通用寄存器290的多个寄存器也可以是一部分与数据搬移引擎204连接。
请参阅图15,图15为本申请实施例提供的神经网络处理器的第十五种结构示意图。神经网络处理器200中的通用寄存器290可以包括多个向量寄存器292,简称向量寄存器堆,本申请实施例向量寄存器292可以全部与数据搬移引擎204连接,本申请实施例向量寄存器292也可以一部分与数据搬移引擎204连接,该一部分可以理解为至少为一个向量寄存器,且不是全部向量寄存器。
神经网络处理器200中的通用寄存器290可以包括多个预测寄存器294,简称预测寄存器堆,也可以称为谓词寄存器堆,本申请实施例预测寄存器294可以全部与数据搬移引擎204连接,本申请实施例预测寄存器294也可以一部分与数据搬移引擎204连接。
需要说明的是,通用寄存器290包括多种类型的寄存器时,通用寄存器290可以通过所有类型的寄存器与数据搬移引擎204连接。通用寄存器290也可以通过其中部分类型的寄存器与数据搬移引擎204连接,诸如神经网络处理器200的通用寄存器290包括多个向量寄存器292和多个预测寄存器294时,通用寄存器290仅通过多个向量寄存器292与数据搬移引擎204连接。
需要说明的是,图14和图15仅示出神经网络处理器200的部分元件,图14和图15所示神经网络处理器200的其他元件可以参阅图1至图13,为了详细说明本申请实施例数据搬移引擎204与其他元件的关系,以及数据搬移引擎204具体实现数据的搬移,下面结合图16进行详细说明。
请参阅图16,图16为本申请实施例提供的神经网络处理器的第十六种结构示意图。本申请实施例神经网络处理器200的一些数据诸如第一处理模块210的卷积处理单元212、向量处理单元214或整形处理单元216所处理的数据需要进行标量计算时,可以将该数据存储到通用寄存器290中,数据搬移引擎204可以将该数据搬移到标量处理单元232,由标量处理单元232对该数据进行标量计算。待标量处理单元232对该数据计算完成,得到计算结果时,可以由该数据搬移引擎204将该计算结果搬移到通用寄存器290,第一处理模块210中相应的处理单元可以从通用寄存器290中获取该计算结果。从而本申请实施例NPU200中的数据搬移均在NPU200内部,相比NPU200将数据传输到外部,经外部上层软件诸如CPU处理完成后再返还到NPU200可以减少NPU200与外部的交互,提升NPU200处理数据的效率。
其中,第一处理模块210的卷积处理单元212、向量处理单元214或整形处理单元216所处理的数据需要进行标量计算诸如第一处理模块210的卷积处理单元212、向量处理单元214或整形处理单元216处理得到的中间结果需要进行判断操作。该判断操作可以由标量处理单元232完成。或者说通用寄存器290所存储的数据为待判断数据,该待判断数据需要进行判断操作,数据搬移引擎201将该待判断数据搬移到标量处理单元232的标量寄存器2322,以进行判断操作。
本申请实施例神经网络处理器200的一些数据诸如标量处理单元232的标量数据需要变换成向量数据时,数据搬移引擎204可以将该标量数据搬移到通用寄存器290,第一处理模块210中相应的处理单元诸如向量处理单元214可以从通用寄存器290中获取该标量数据,以将其变换成向量数据。需要说明的是,标量数据需要变换成向量数据也可以称为标量数据需要拓展成向量数据。比如一个32位数据复制成16个一样的数据组成一个512bit的向量。
在实际应用中,指令分发模块220与数据搬移引擎204连接,指令分发模块220可以将指令发射到数据搬移引擎204,数据搬移引擎204可以根据其接收到的指令来执行数据搬移的操作。诸如指令分发模块220向数据搬移引擎204发射第一指令,数据搬移引擎204根据第一指令将通用寄存器290的数据搬移到标量处理单元232的标量寄存器2322。再比如指令分发模块220向数据搬移引擎204发射第二指令,数据搬移引擎204根据第二指令将标量寄存器2322的数据搬移到通用寄存器290。
需要说明的是,指令分发模块220可以在一个时钟周期内将多条指令并行发射到第一处理模块210、第二处理模块230、加载存储模块202和数据搬移引擎204。诸如指令分发模块220可以在一个时钟周期内将多条指令并行发射到卷积处理单元212、向量处理单元214、标量处理单元232、加载存储模块202和数据搬移引擎204。
神经网络处理器200可以进行卷积神经网络运算、循环神经网络运算等,下面以卷积神经网络运算为例,神经网络处理器200从外部获取待处理数据(如图像数据),神经网络处理器200内的卷积处理单元212可以对待处理数据进行卷积处理。卷积神经网络中的卷积层的输入包括输入数据(如从外部获取的待处理数据)和权重数据,卷积层的主要计算流程是对输入数据和权重数据进行卷积运算得到输出数据。其中,进行卷积运算的主体为卷积处理单元,也可以理解为,神经网络处理器的卷积处理单元对输入数据和权重数据进行卷积运算得到输出数据。需要说明的是,权重数据在一些情况下可以理解为一个或多个卷积核。下面针对卷积运算进行详细说明。
请参阅图17和图18,图17本申请实施例提供的神经网络处理器中卷积处理单元的输入数据示意图,图18本申请实施例提供的神经网络处理器中卷积处理单元的权重数据示意图。输入数据的大小为H×W×C1,权重数据的大小为K×R×S×C2,其中,H为输入数据的高度,W为输入数据的宽度,C1为输入数据的深度,K为权重数据的输出数,即卷积核的个数,R为权重数据的高度,即卷积核的高度,S为权重数据的宽度,即卷积核的宽度,C2为权重数据的深度,即卷积核的深度,其中,权重数据的C2和输入数据的C1相等,因为C2和C1均为对应的深度数值并且相等,为了方便理解,下面的C2和C1都用C替代,也可以理解为C2=C1=C。输入数据大小还可以为N×H×W×C,N为输入数据的批数。
请参阅图19,图19本申请实施例提供的神经网络处理器中卷积处理单元的卷积运算示意图。卷积处理单元先对输入数据按卷积核的大小进行取窗,取窗后的窗体区域与权重数据中的一个卷积核进行乘累加运算得到一个数据,随后分别在W方向和H方向滑动窗体再进行乘累加运算得H’×W’个数据,最后遍历K个卷积核得到K×H’×W’个数据。具体的运算步骤可以如下(也可以理解为卷积处理单元进行卷积运算的具体步骤如下):
1、从起始点(W=0,H=0)对输入数据按卷积核的大小进行取窗,得到一个窗体区域;
2、从K个卷积核中选取一个未计算过的卷积核;
3、将取窗后的窗体区域与卷积核进行点乘,然后进行累加得到一个数据;
4、在W方向滑动窗体,得到新的窗体(窗体大小不变);
5、依次重复步骤3、4,直到W方向边界,这样得到W’个数据;
6、回到W方向起始点,在H方向按照一个步长滑动窗体,得到新的窗体(窗体大小不变);
7、重复步骤3-6,直到H方向边界,这样得到H’×W’个数据,其中,到达H方向边界后,仍然需要重复步骤3-5;
8、重复步骤2-7,遍历K个卷积核,进行计算得到K×H’×W’个数据。
卷积处理单元中用于卷积运算的乘累加阵列(MAC Array)的大小(L×M)是固定的,其中,L为进行乘累加运算的长度,M为并行进行乘累加运算的单元数,也可以理解为一个周期可以进行M个长度为L的乘累加运算。将上面卷积运算过程中的乘累加运算(如上面的步骤3-4)分配到卷积处理单元上进行并行计算的步骤如下(也可以理解为卷积处理单元利用乘累加阵列进行乘累加运算的具体步骤如下):
1、对输入数据在HW平面上按卷积核大小进行取窗,并在深度方向上将输入数据分割成C/L个长度为L的数据段;
2、沿W方向滑动窗体,并在深度方向上将输入数据均分割成C/L个长度为L的数据段,继续沿W方向滑动窗体M-2次后得到M组输入数据,每组有C/L个数据段;
3、在深度方向上将卷积核分割成C/L个长度为L的数据段,对权重数据中K个卷积核均进行该操作,得到K组权重数据,每组有C/L个数据段;
4、取M组输入数据的第i(i=1,2,…,C/L)个数据段,得到M个输入数据段;
5、取K组权重数据的第f(f=1,2,…,K)组数据中的第i(i=1,2,…,C/L)个数据段,得到一个权重数据段;
6、使用MAC阵列(L×M)对M个输入数据段(深度为L)和1个权重数据段(权重数据广播复用)进行乘累加运算,得到M个输出的部分结果;
7、递增i,并重复步骤4、5、6,输出的M个数据累加到之前计算的M个数据之上,至此得到M个完整的输出结果,其中,i从1递增到C/L。
需要说明的是,上述步骤中的顺序可以根据需要进行调整。例如,步骤2和3的顺序可以对调。又例如,步骤4和5的步骤可以对调。
本实施例中,通过将输入数据和权重数据进行划分,利用MAC阵列一次可以对M个窗体和一个卷积核的数据进行乘累加运算,充分利用MAC阵列可以快速完成卷积运算。需要说明的是,本实施例中,C大于L,K大于L,W大于M,当C/L、K/L、W/M中的一个或多个不整除时,需要对不整除的数取整并加1,具体的为获取其整数部分后再加1。
当然,卷积处理单元还可以采用其他方式的卷积运算方式。下面对另一种方式的卷积运算进行详细说明。请参阅图20,图20本申请实施例提供的神经网络处理器中卷积处理单元的另一卷积运算示意图。其中,输入数据大小仍然为H×W×C,权重数据(一个或多个卷积核)大小仍然为K×R×S×C。当然,输入数据大小还可以为N×H×W×C,N为数据输入的批数。
卷积处理单元先对输入数据按卷积核的大小进行取窗,取窗后的第一窗体区域与权重数据中的所有卷积核进行乘累加运算得到一个数据,随后分别在W方向和H方向滑动窗体再进行乘累加运算得H’×W’×K个数据。具体的运算步骤如下(也可以理解为卷积处理单元进行卷积运算的具体步骤如下):
1、从起始点(W=0,H=0)对输入数据按卷积核的大小(R×S)进行取窗,得到第一窗体区域(R×S×C);
2、将取窗后的第一窗体区域与K个卷积核分别进行乘累加得到K个数据;
3、在W方向按照一个第一滑动步长滑动取窗,得到新的第一窗体区域(第一窗体区域的大小不变),其中第一滑动步长可以根据需要设置;
4、依次重复步骤2、3,直到W方向边界,这样得到W’×K个数据,其中,W’=(W-S)/第一滑动步长+1。例如,若W=7,S=3,第一滑动步长=2,则W’=3。又例如,若W=7,S=3,第一滑动步长=1,则W’=5;
5、回到W方向起始点,在H方向按照一个第二滑动步长滑动窗体,其中H方向的第二滑动步长可以根据需要设置,得到新的第一窗体区域(第一窗体区域的大小不变),例如,在H方向按照一个第二滑动步长(H方向的第二滑动步长为1)滑动窗体后,坐标可以为(W=0,H=1)。
6、重复步骤2-5,直到H方向边界,这样得到H’×W’×K个数据。需要说的是,每次沿W方向滑动窗体都直到W方向边界,最后一次在H方向滑动取窗到达边界后,仍然在W方向滑动取窗直至W方向边界(即重复步骤2-4)。
卷积运算单元包括用于卷积运算的乘累加阵列(MAC Array),乘累加阵列的大小(L×M)是固定的,其中,L为进行乘累加运算的长度,M为并行进行乘累加运算的单元数,也可以理解为一个周期可以进行M个长度为L的乘累加运算。将上面卷积运算过程中的乘累加运算(即上面的步骤2)分配到卷积运算单元上进行并行运算的步骤如下(也可以理解为卷积处理单元利用乘累加阵列进行乘累加运算的具体步骤如下):
1、从起始点(W=0,H=0)对输入数据在HW平面上按卷积核大小(R×S)进行取窗,得到第一窗体区域,并在深度方向上将第一窗体区域分割成C/L个长度为L的数据段;需要说明的是,可以得到第一窗体区域后对第一窗体区域分割成C/L个长度为L的数据段,也可以先将输入数据分割成C/L个长度为L的数据段后,再得到第一窗体区域,第一窗体区域包括C/L个长度为L的数据段;可以理解为,第一窗体区域沿深度方向可以包括C/L层的第一深度数据;
2、在深度方向上将卷积核分割成C/L个长度为L的数据段,对权重数据中K个卷积核均进行该操作,得到K组权重数据,每组有C/L个权重数据段;可以理解为,每个卷积核沿深度方向包括C/L个长度为L的权重数据段;还可以将K个卷积核分割成K/M个卷积核组,每组卷积核组都包括M个卷积核的权重数据;
3、取输入数据的第一窗体区域的第i(i=1,2,…,C/L)层第一深度数据,得到1个第一深度数据;
4、取第f(f=1,2,…,K/M)组卷积核组的第i(i=1,2,…,C/L)层第二深度数据,得到M个第二深度数据;
5、使用MAC阵列对1个第一深度数据和M个第二深度数据(权重数据广播复用)进行乘累加运算,得到M个第一运算数据;M个权重数据段为M个卷积核的权重数据段;
6、递增i,并重复步骤3-5,输出的M个第一运算数据累加到之前计算的M个第一运算数据之上,至此得到M个目标运算数据;其中,i从1开始并递增到C/L;
7、递增f,并重复步骤3-6,完成K/M次计算后得到K个输出。其中,k从1开始并递增到K/M。
其中,输入数据的高度H、宽度W和深度C都是随机的,即,输入数据的大小可以有非常多的格式,如输入数据的宽度W是不确定,输入数据的宽度W除以乘累加阵列并行进行乘累加运算的单元数M,大多数情况下无法得到整数,这样在乘累加运算过程中,就会浪费部分乘累加运算单元。本实施例中,利用卷积核的个数K除以乘累加阵列并行进行乘累加运算的单元数M,卷积核的个数K一般都采用固定的数并且为2的n次方数(即2n),或者为有限的几个数中一个(如K为32、64、128、256中的一个),如此,设置乘累加运算单元时,可以将乘累加运算的单元数M设置为与K的数量相同或整倍数,如M为32、64、128等中的一个。本实施例可以充分利用乘累加运算单元,减少乘累加运算单元的浪费,提高了卷积运算的效率。本实施例中的进行乘累加运算的单元数M对应的卷积核的个数K,是一个维度方向的划分,若进行乘累加运算的单元数M对应的是滑动的窗体区域,对应的不仅包括宽度W维度还包括H维度,两个维度的对应不利于折叠。
此外,本实施例中的输出的目标运算数据的格式为H’×W’×K,其与输入数据的格式相同,不需要再对其进行形变,就可以直接作为下一运算层(如下一层卷积层或下一层池化层等)的输入数据。而且目标运算数据是深度方向连续的数据,在存储时可以存储连续的数据,后续再读取目标运算数据是也是连续的,硬件加载时,不需要多次计算地址,优化计算效率。
需要说明的是,本实施例中,C大于L,K大于M,当C/L、K/M中的一个或两个不整除时,需要对不整除的数取整并加1,具体的为获取其整数部分后再加1。示例性地,乘累加阵列(MAC Array)中L和M采用相同的数值,如均为64。对输入数据在深度方向上按64长度粒度进行补齐。沿深度方向分割成1×1×64的数据块,深度不足64时,补齐到64,数据组织方式为N×H×W×(c×C’),其中c=64,C’为C除c向上取整。对权重数据在深度方向上按64长度粒度进行补齐。权重数据沿深度方向分割成1×1×64的数据块,深度不足64时,补齐到64,卷积核个数大于64时,按64粒度分割成多组。调整后数据组织方式为R×S×(c×C’)×(k×K’),其中c=64,C’为C除c向上取整,k=64,K’为K除k向上取整。
本实施例在卷积运算过程中,卷积处理单元还可以用于将一个窗体区域对应的K个目标运算数据传输到下一层并用于进行运算;或者将N个第一窗体区域对应的N×K个目标运算数据传输到下一层并用于进行运算,其中,N小于输入数据的第一窗体区域的总数量。
因为对每一个第一窗体区域都进行了完整的运算,即每一个第一窗体区域(包括深度方向)的所有数据都与所有的卷积核(包括深度方向)都进行了乘累加运算,得到的目标运算数据是完整的,那可以将一个或多个第一窗体区域对应的目标运算数据先传输到下一层,而不需要等待所有的输入数据都运算完成再传输,当传输到下一层的部分目标运算数据可以作为下一层运算的最小单元时(如部分目标运算数据可以作为下一层输入数据的一个窗体区域包括的数据),下一层可以开始运算,不需要等待上一层的全部运算结果,提高了卷积运算的效率,缩短了卷积运算的时长。此外,因为卷积运算单元所在的NPU内部缓存一般很小,无法存放较大大的中间结果。若卷积运算完成的数据的格式是K×H’×W’的,这样需要计算完这一层的结果才能进行下一层的计算,并且其输出的数据较大需要缓存到外部内存(即NPU外的内存)。而本实施例卷积运算完成的结果是H’×W’×K格式的,则可以在H’×W’平面上计算出部分结果后就可以直接进行下一层的计算的输入数据,较小的NPU内部缓存只需存储1×W’×K或N1×W’×K或N1×N2×K,其中N1可以远小于H’,N2可以远小于W’,不需要再将输出结果缓存到外部内存,再从外部内存读取进行下一层的运算,这样可以很大程度上缓解了带宽压力,同时提高了运算效率。另外,在融合层(Fusion Layer)场景下可以很方便的进行流水作业。
其中,当待传输到下一层的目标运算数据与上一次传输的目标运算数据有重复数据时,去除重复数据得到目标数据;以及将目标数据传输到下一层。可以优化数据的传输和存储,当然也可以每次都将目标运算数据传输出去,将其覆盖重复的数据。
乘累加阵列(MAC Array)进行乘累加运算的长度L可以等于并行进行乘累加运算的单元数M,因为乘累加阵列的L和M相等,乘累加运算出来的结果的数据两个方向的值相等,可以方便的对运算出来的结果进行调整。当然,在其他一些实施例中,乘累加阵列的L和M可以不相等,以利于乘累加阵列的设置。
可以理解的,在一些实施例中,当卷积核的个数K等于或小于乘累加阵列的并行计算的单元数M时,卷积核的个数K不需要再进行划分。例如,本实施例中的乘累加阵列可以将并行计算的单元数M设置为较大的值,或者卷积核的个数较少。此时,卷积处理单元可以用于:
将输入数据在深度方向上划分为C/L层第一深度数据,以及将多个卷积核在深度方向上划分为C/L层第二深度数据;
将第i层第一深度数据与K个卷积核的第i层第二深度数据进行乘累加运算,得到K个第一中间数据;以及
递增i,得到新的K个第一中间数据,并累加之前得到的K个第一中间数据,并得到K个目标运算数据,直至i从1递增到C/L。
在另一些实施例中,当卷积核的深度C等于或小于乘累加阵列进行乘累加的长度L时,卷积核的深度C不需要再进行划分。例如,本实施例中的乘累加阵列可以将进行乘累加的长度L设置为较大的值,或者输入数据和卷积核的深度C较小。此时,卷积处理单元可以用于:
将多个卷积核划分为K/M个卷积核组;
将第i层第一深度数据与第f组中所有卷积核的第i层第二深度数据进行乘累加运算,得到M个第一中间数据;
递增i,得到新的M个第一中间数据,并累加之前得到的M个第一中间数据,并得到M个第二中间数据,其中,i从1递增到C;以及
递增f,得到新的M个第二中间数据,其中,f从1递增到K/M,得到K个目标运算数据。
在一些实施例中,可以对卷积处理单元的单层运算进行说明,具体的,卷积处理单元可以用于:
根据卷积核对输入数据进行一次取窗操作,得到第一窗体区域,第一窗体区域沿深度方向包括第一数量层的第一深度数据;
获取多个卷积核,多个卷积核沿深度方向包括第一数量层的第二深度数据;
将一层的第一深度数据与多个卷积核同一层的第二深度数据进行乘累加运算,得到第一运算数据。
卷积处理单元还可以对多层进行运算,具体的,卷积处理单元还用于将多层的第一深度数据对应的多个第一运算数据累加得到目标运算数据。即,基于上述实施例中单层运算的方式,将多层的第一深度数据与多个卷积核多层的第二深度数据进行乘累加运算,得到多个第一运算数据累加后得到目标运算数据。
需要说明的是,卷积运算过程中,还可以增加偏差数据,卷积层对输入数据和权重数据进行卷积运算,再将计算出的结果加上偏差数据即可得到输出结果。
卷积处理单元可以将其运算结果存储到数据存储模块,也可以将运算结果传输到向量处理单元或整形处理单元以进行进一步的计算操作。
本申请实施例所提供的神经网络处理器200可以集成为一个芯片。
请参阅图21,图21为本申请实施例提供的芯片的结构示意图。芯片20包括神经网络处理器200,该神经网络处理器200具有可以参阅以上内容,在此不再赘述。该芯片20可以应用到电子设备中。
需要说明的是,本申请实施例的神经网络处理器200也可以与其他处理器、存储器等集成在一个芯片中。
为了进一步说明本申请实施例神经网络处理器200的整体运作过程,下面结合其他处理器、存储器进行描述。
请参阅图22,图22为本申请实施例提供的电子设备的结构示意图。电子设备20可以包括神经网络处理器200、系统总线400、外部存储器600和中央处理器800。神经网络处理器200、外部存储器600及中央处理器800均与系统总线400连接,以使得神经网络处理器200与外部存储器600可以实现数据的传输。
系统总线400通过系统总线接口280与神经网络处理器200实现连接。系统总线400可以通过其他系统总线接口与中央处理器800及外部存储器600连接。
神经网络处理器200受控于所述中央处理器800从外部存储器600中获取待处理数据、及对待处理数据进行处理以得到处理结果,并将处理结果反馈到外部存储器600
当需要采用神经网络处理器200进行数据处理时,电子设备20的上层驱动软件诸如中央处理器800将当前需要执行程序的配置写入到对应的寄存器中,比如:工作模式、程序计数器(Program Counter,PC)的初始值、配置参数等。然后,数据搬移模块260将待处理的数据诸如图像数据、权重数据通过系统总线接口280从外部存储器600中读取过来,并写入到数据存储模块240。指令分发模块220按照初始PC开始取指令。当取到指令后,指令分发模块220根据指令的类型将指令发射到对应的处理单元。各个处理单元根据具体的指令来执行不同的操作,然后将结果写入到数据存储模块240。
其中,该寄存器为神经网络处理器200的配置状态寄存器,或者称为控制状态寄存器,其可以设定神经网络处理器200的工作模式,比如输入数据的位宽,程序初始PC的位置等。
需要说明的是,图22所示的神经网络处理器还可以替换成其他图示的神经网络处理器。
请参阅图23,图23为本申请实施例提供的卷积运算方法的第一种流程示意图。本实施例还提供一种卷积运算方法,卷积运算方法包括:
4001,根据卷积核对输入数据进行一次取窗操作,得到第一窗体区域,第一窗体区域沿深度方向包括第一数量层的第一深度数据。
4002,获取多个卷积核,多个卷积核沿深度方向包括第一数量层的第二深度数据。
4003,将一层的第一深度数据与多个卷积核同一层的第二深度数据进行乘累加运算,得到第一运算数据。
4004,将多层的第一深度数据对应的多个第一运算数据累加得到目标运算数据。
卷积运算方法中,卷积处理单元先对输入数据按卷积核的大小进行取窗,取窗后的第一窗体区域与权重数据中的所有卷积核进行乘累加运算得到一个数据,随后分别在W方向和H方向滑动窗体再进行乘累加运算得H’×W’×K个数据。请参阅图24,图24为本申请实施例提供的卷积运算方法的第二种流程示意图。具体的卷积运算方法如下(也可以理解为卷积处理单元的卷积运算方法的具体步骤如下):
5001、从起始点(W=0,H=0)对输入数据按卷积核的大小(R×S)进行取窗,得到第一窗体区域(R×S×C);
5002、将取窗后的第一窗体区域与K个卷积核分别进行乘累加得到K个数据;
5003、在W方向按照一个第一滑动步长滑动取窗,得到新的第一窗体区域(第一窗体区域的大小不变),其中第一滑动步长可以根据需要设置;
5004、依次重复步骤5002和5003,直到W方向边界,这样得到W’×K个数据,其中,W’=(W-S)/第一滑动步长+1。例如,若W=7,S=3,第一滑动步长=2,则W’=3。又例如,若W=7,S=3,第一滑动步长=1,则W’=5;
5005、回到W方向起始点,在H方向按照一个第二滑动步长滑动窗体,其中H方向的第二滑动步长可以根据需要设置,得到新的第一窗体区域(第一窗体区域的大小不变),例如,在H方向按照一个第二滑动步长(H方向的第二滑动步长为1)滑动窗体后,坐标可以为(W=0,H=1)。
5006、重复步骤5002-5005,直到H方向边界,这样得到H’×W’×K个数据。需要说的是,每次沿W方向滑动窗体都直到W方向边界,最后一次在H方向滑动取窗到达边界后,仍然在W方向滑动取窗直至W方向边界(即重复步骤5002-5004)。
其中,步骤5003也可以理解为,沿输入数据第一方向滑动取窗,并得到多个第一窗体区域,直至第一方向滑动取窗到达边界。步骤5005也可以理解为,返回输入数据第一方向起点,并按照滑动步长沿第二方向滑动取窗,直至第二方向滑动取窗到达边界,其中,每次沿第二方向滑动一个滑动步长后,均沿第一方向滑动取窗,直至第一方向滑动取窗到达边界。
请参阅图25,图25为本申请实施例提供的卷积运算方法的第三种流程示意图。卷积运算单元包括用于卷积运算的乘累加阵列(MAC Array),乘累加阵列的大小(L×M)是固定的,其中,L为进行乘累加运算的长度,M为并行进行乘累加运算的单元数,也可以理解为一个周期可以进行M个长度为L的乘累加运算。将上面卷积运算过程中的乘累加运算(即上面的步骤5002)分配到卷积运算单元上进行并行运算的步骤如下(也可以理解为卷积处理单元利用乘累加阵列进行乘累加运算的具体步骤如下):
5021、从起始点(W=0,H=0)对输入数据在HW平面上按卷积核大小(R×S)进行取窗,得到第一窗体区域,并在深度方向上将第一窗体区域分割成C/L个长度为L的数据段;需要说明的是,可以得到第一窗体区域后对第一窗体区域分割成C/L个长度为L的数据段,也可以先将输入数据分割成C/L个长度为L的数据段后,再得到第一窗体区域,第一窗体区域包括C/L个长度为L的数据段;可以理解为,第一窗体区域沿深度方向可以包括C/L层的第一深度数据;
5022、在深度方向上将卷积核分割成C/L个长度为L的数据段,对权重数据中K个卷积核均进行该操作,得到K组权重数据,每组有C/L个权重数据段;可以理解为,每个卷积核沿深度方向包括C/L个长度为L的权重数据段;还可以将K个卷积核分割成K/M个卷积核组,每组卷积核组都包括M个卷积核的权重数据;
5023、取输入数据的第一窗体区域的第i(i=1,2,…,C/L)层第一深度数据,得到1个第一深度数据;
5024、取第f(f=1,2,…,K/M)组卷积核组的第i(i=1,2,…,C/L)层第二深度数据,得到M个第二深度数据;
5025、使用MAC阵列对1个第一深度数据和M个第二深度数据(权重数据广播复用)进行乘累加运算,得到M个第一运算数据;M个权重数据段为M个卷积核的权重数据段;
5026、递增i,并重复步骤5023-5025,输出的M个第一运算数据累加到之前计算的M个第一运算数据之上,至此得到M个目标运算数据;其中,i从1开始并递增到C/L;
5027、递增f,并重复步骤5023-5026,完成K/M次计算后得到K个目标运算数据。其中,f从1开始并递增到K/M。
其中,输入数据的高度H、宽度W和深度C都是随机的,即,输入数据的大小可以有非常多的格式,如输入数据的宽度W是不确定,输入数据的宽度W除以乘累加阵列并行进行乘累加运算的单元数M,大多数情况下无法得到整数,这样在乘累加运算过程中,就会浪费部分乘累加运算单元。本实施例中,利用卷积核的个数K除以乘累加阵列并行进行乘累加运算的单元数M,卷积核的个数K一般都采用固定的数并且为2的n次方数(即2n),或者为有限的几个数中一个(如K为32、64、128、256中的一个),如此,设置乘累加运算单元时,可以将乘累加运算的单元数M设置为与K的数量相同或整倍数,如M为32、64、128等中的一个。本实施例可以充分利用乘累加运算单元,减少乘累加运算单元的浪费,提高了卷积运算的效率。本实施例中的进行乘累加运算的单元数M对应的卷积核的个数K,是一个维度方向的划分,若进行乘累加运算的单元数M对应的是滑动的窗体区域,对应的不仅包括宽度W维度还包括H维度,两个维度的对应不利于折叠。
此外,本实施例中的输出的目标运算数据的格式为H’×W’×K,其与输入数据的格式相同,不需要再对其进行形变,就可以直接作为下一运算层(如下一层卷积层或下一层池化层等)的输入数据。而且目标运算数据是深度方向连续的数据,在存储时可以存储连续的数据,后续再读取目标运算数据是也是连续的,硬件加载时,不需要多次计算地址,优化计算效率。
在一些实施例中,步骤5021-5027还可以替换为其他步骤,具体可以包括:
将输入数据在深度方向上划分为C/L层第一深度数据,以及将多个卷积核在深度方向上划分为C/L层第二深度数据;
将第i层第一深度数据与K个卷积核的第i层第二深度数据进行乘累加运算,得到K个第一中间数据;以及
递增i,得到新的K个第一中间数据,并累加之前得到的K个第一中间数据,并得到K个目标运算数据,其中,i从1递增到C/L。
在一些实施例中,步骤5021-5027还可以替换为其他步骤,具体可以包括:
将多个卷积核划分为K/M个卷积核组;
将第i层第一深度数据与第F组中所有卷积核的第i层第二深度数据进行乘累加运算,得到M个第一中间数据;
递增i,得到新的M个第一中间数据,并累加之前得到的M个第一中间数据,并得到M个第二中间数据,其中,i从1递增到C;以及
递增f,得到新的M个第二中间数据,其中,f从1递增到K/M,得到K个目标运算数据。
上述实施例中,乘累加阵列的L可以等于M,当然乘累加阵列的L也可以不等于M。
在得到K个目标运算数据之后,卷积运算方法还可以包括:将一个窗体区域对应的K个目标运算数据传输到下一层并用于进行运算;或将N个第一窗体区域对应的N×K个目标运算数据传输到下一层并用于进行运算,其中,N小于输入数据的第一窗体区域的总数量。
在将K个或N×K个目标运算数据之后,卷积运算方法还可以包括:
当待传输到下一层的目标运算数据与上一次传输的目标运算数据有重复数据时,去除重复数据得到目标数据;以及将目标数据传输到下一层。
以上对本申请实施例提供的卷积处理单元、神经网络处理器、电子设备及卷积运算方法进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请。同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (8)
1.一种卷积处理单元,其特征在于,所述卷积处理单元用于:
根据卷积核对输入数据进行一次取窗操作,得到第一窗体区域,所述第一窗体区域沿深度方向包括第一数量层的第一深度数据;
获取多个卷积核,所述多个卷积核沿深度方向包括第一数量层的第二深度数据;
将一层的所述第一深度数据与所述多个卷积核同一层的所述第二深度数据进行乘累加运算,得到第一运算数据;以及
将多层的所述第一深度数据对应的多个所述第一运算数据累加得到目标运算数据;
其中,所述输入数据的深度和所述卷积核的深度为C,所述卷积核的数量为K,所述卷积处理单元包括乘累加阵列,所述乘累加阵列为L×M,其中L为进行乘累加运算的长度,M为并行进行乘累加运算的单元数;
所述卷积处理单元还用于:
将所述输入数据在深度方向上划分为C/L层第一深度数据,以及将多个所述卷积核在深度方向上划分为C/L层第二深度数据;
将第i层所述第一深度数据与K个所述卷积核的第i层所述第二深度数据进行乘累加运算,得到K个第一中间数据;以及
递增i,得到新的K个第一中间数据,并累加之前得到的K个第一中间数据,并得到K个目标运算数据,其中,i从1递增到C/L;
或者,所述卷积处理单元还用于:
将多个所述卷积核划分为K/M个卷积核组;
将第i层所述第一深度数据与第f组中所有所述卷积核的第i层所述第二深度数据进行乘累加运算,得到M个第一中间数据;
递增i,得到新的M个第一中间数据,并累加之前得到的M个第一中间数据,并得到M个第二中间数据,其中,i从1递增到C;以及
递增f,得到新的M个第二中间数据,其中,f从1递增到K/M,得到K个目标运算数据;
或者,所述卷积处理单元还用于:
将所述输入数据在深度方向上划分为C/L层第一深度数据;
将多个所述卷积核在深度方向上划分为C/L层第二深度数据;
将多个所述卷积核还划分为K/M个卷积核组;
将第i层所述第一深度数据与第f组中所有所述卷积核的第i层所述第二深度数据进行乘累加运算,得到M个第一中间数据;
递增i,得到新的M个第一中间数据,并累加之前得到的M个第一中间数据,其中,i从1递增到C/L,并得到M个第二中间数据;以及
递增f,得到新的M个第二中间数据,其中,f从1递增到K/M,得到K个目标运算数据。
2.根据权利要求1所述的卷积处理单元,其特征在于,所述乘累加阵列的L等于M。
3.根据权利要求1或2所述的卷积处理单元,其特征在于,所述卷积处理单元还用于:
沿所述输入数据第一方向滑动取窗,并得到多个第一窗体区域,直至第一方向滑动取窗到达边界;
返回所述输入数据第一方向起点,并按照第二滑动步长沿第二方向滑动取窗,直至第二方向滑动取窗到达边界,其中,每次沿第二方向滑动一个第二滑动步长后,均沿第一方向滑动取窗,直至第一方向滑动取窗到达边界。
4.根据权利要求3所述的卷积处理单元,其特征在于,所述卷积处理单元还用于:
将一个窗体区域对应的K个所述目标运算数据传输到下一层并用于进行运算;或
将N个第一窗体区域对应的N×K个所述目标运算数据传输到下一层并用于进行运算,其中,所述N小于所述输入数据的第一窗体区域的总数量。
5.根据权利要求4所述的卷积处理单元,其特征在于,所述卷积处理单元还用于:
当待传输到下一层的所述目标运算数据与上一次传输的所述目标运算数据有重复数据时,去除重复数据得到目标数据;以及
将目标数据传输到下一层。
6.一种神经网络处理器,其特征在于,包括:
数据缓存单元,存储输入数据;
卷积处理单元,所述卷积处理单元通过所述数据缓存单元获取输入数据,所述卷积处理单元为如权利要求1-5任一项所述的卷积处理单元。
7.一种电子设备,其特征在于,包括:
系统总线;以及
神经网络处理器,所述神经网络处理器为如权利要求6所述的神经网络处理器,所述神经网络处理器与所述系统总线连接。
8.一种卷积运算方法,其特征在于,应用于权利要求1至5任一项所述的卷积处理单元,所述方法包括:
根据卷积核对输入数据进行一次取窗操作,得到第一窗体区域,所述第一窗体区域沿深度方向包括第一数量层的第一深度数据;
获取多个卷积核,所述多个卷积核沿深度方向包括第一数量层的第二深度数据;
将一层的所述第一深度数据与所述多个卷积核同一层的所述第二深度数据进行乘累加运算,得到第一运算数据;
将多层的所述第一深度数据对应的多个所述第一运算数据累加得到目标运算数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911253109.5A CN111091181B (zh) | 2019-12-09 | 2019-12-09 | 卷积处理单元、神经网络处理器、电子设备及卷积运算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911253109.5A CN111091181B (zh) | 2019-12-09 | 2019-12-09 | 卷积处理单元、神经网络处理器、电子设备及卷积运算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111091181A CN111091181A (zh) | 2020-05-01 |
CN111091181B true CN111091181B (zh) | 2023-09-05 |
Family
ID=70394767
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911253109.5A Active CN111091181B (zh) | 2019-12-09 | 2019-12-09 | 卷积处理单元、神经网络处理器、电子设备及卷积运算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111091181B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112200300B (zh) * | 2020-09-15 | 2024-03-01 | 星宸科技股份有限公司 | 卷积神经网络运算方法及装置 |
CN111931123B (zh) * | 2020-10-14 | 2020-12-25 | 南京风兴科技有限公司 | 边界卷积计算方法、装置、硬件加速器及计算机设备 |
CN116629320B (zh) * | 2023-07-21 | 2023-11-28 | 美智纵横科技有限责任公司 | 神经网络的优化方法、装置、存储介质及芯片 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107608715A (zh) * | 2017-07-20 | 2018-01-19 | 上海寒武纪信息科技有限公司 | 用于执行人工神经网络正向运算的装置及方法 |
CN107844828A (zh) * | 2017-12-18 | 2018-03-27 | 北京地平线信息技术有限公司 | 神经网络中的卷积计算方法和电子设备 |
CN110147251A (zh) * | 2019-01-28 | 2019-08-20 | 腾讯科技(深圳)有限公司 | 用于计算神经网络模型的架构、芯片及计算方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102415508B1 (ko) * | 2017-03-28 | 2022-07-01 | 삼성전자주식회사 | 컨볼루션 신경망 처리 방법 및 장치 |
-
2019
- 2019-12-09 CN CN201911253109.5A patent/CN111091181B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107608715A (zh) * | 2017-07-20 | 2018-01-19 | 上海寒武纪信息科技有限公司 | 用于执行人工神经网络正向运算的装置及方法 |
CN107844828A (zh) * | 2017-12-18 | 2018-03-27 | 北京地平线信息技术有限公司 | 神经网络中的卷积计算方法和电子设备 |
CN110147251A (zh) * | 2019-01-28 | 2019-08-20 | 腾讯科技(深圳)有限公司 | 用于计算神经网络模型的架构、芯片及计算方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111091181A (zh) | 2020-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111047036B (zh) | 神经网络处理器、芯片和电子设备 | |
US10282659B2 (en) | Device for implementing artificial neural network with multiple instruction units | |
US10824939B2 (en) | Device for implementing artificial neural network with flexible buffer pool structure | |
US10902315B2 (en) | Device for implementing artificial neural network with separate computation units | |
KR102661605B1 (ko) | 벡터 계산 유닛 | |
EP3836031A2 (en) | Neural network processor, chip and electronic device | |
US20200004514A1 (en) | High parallelism computing system and instruction scheduling method thereof | |
CN111091181B (zh) | 卷积处理单元、神经网络处理器、电子设备及卷积运算方法 | |
CN115516450B (zh) | 推理引擎电路架构 | |
WO2023173639A1 (zh) | 加速器执行的方法和电子设备 | |
CN111047035B (zh) | 神经网络处理器、芯片和电子设备 | |
CN114661353A (zh) | 支持多线程的数据搬运装置及处理器 | |
Liu et al. | Resource and data optimization for hardware implementation of deep neural networks targeting FPGA-based edge devices | |
US20220114234A1 (en) | Matrix processing engine with coupled dense and scalar compute | |
US20240320496A1 (en) | Methods and Apparatus For Packet Reorder Flow in a Neural Network Processing System | |
CN112214443B (zh) | 设置于图形处理器中的二次卸载装置和方法 | |
CN115698937A (zh) | 用于深度学习任务调度的硬件电路 | |
WO2022063269A1 (en) | Method and apparatus for configurable hardware accelerator | |
CN112230931B (zh) | 适用于图形处理器的二次卸载的编译方法、装置和介质 | |
Feng et al. | Fast schedulability analysis using commodity graphics hardware | |
CN117437113A (zh) | 用于对图像数据进行加速处理的系统、方法及存储介质 | |
WO2024059633A1 (en) | Compiling of tasks for streaming operations at neural processor | |
WO2024049859A1 (en) | Parallel processing architecture with memory block transfers |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |