CN111047035A - 神经网络处理器、芯片和电子设备 - Google Patents

神经网络处理器、芯片和电子设备 Download PDF

Info

Publication number
CN111047035A
CN111047035A CN201911253030.2A CN201911253030A CN111047035A CN 111047035 A CN111047035 A CN 111047035A CN 201911253030 A CN201911253030 A CN 201911253030A CN 111047035 A CN111047035 A CN 111047035A
Authority
CN
China
Prior art keywords
data
module
processing unit
instruction
neural network
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.)
Granted
Application number
CN201911253030.2A
Other languages
English (en)
Other versions
CN111047035B (zh
Inventor
袁生光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN201911253030.2A priority Critical patent/CN111047035B/zh
Priority claimed from CN201911253030.2A external-priority patent/CN111047035B/zh
Publication of CN111047035A publication Critical patent/CN111047035A/zh
Priority to PCT/CN2020/132792 priority patent/WO2021115149A1/zh
Application granted granted Critical
Publication of CN111047035B publication Critical patent/CN111047035B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements

Abstract

本申请实施例提供一种神经网络处理器、芯片和电子设备,神经网络处理器包括:第一处理模块,所述第一处理模块包括具有专用寄存器的卷积处理单元;通用寄存器,所述通用寄存器与所述卷积处理单元连接;和加载存储模块,所述加载存储模块与所述通用寄存器连接,所述加载存储模块还通过所述专用寄存器与所述卷积处理单元连接;所述加载存储模块用于加载数据到所述通用寄存器和加载数据到所述卷积处理单元的专用寄存器中的至少一个。本申请实施例可以提高神经网络处理器加载数据的速度。

Description

神经网络处理器、芯片和电子设备
技术领域
本申请涉及电子技术领域,特别涉及一种神经网络处理器、芯片和电子设备。
背景技术
人工神经网络(artificial neural networks,ANN)从信息处理角度对神经元网络进行抽象,建立某种简单模型,按照不同的连接方式组成不同的网络。这些研究通常被称为深度学习(deep learning)、计算机学习(computer learning)等类似术语。
相关技术中,神经网络处理器中的处理单元往往与数据存储交互,在数据传输过程中,传输速度较慢。
发明内容
本申请实施例提供一种神经网络处理器、芯片和电子设备,可以提高神经网络处理器加载数据的速度。
本申请实施例公开一种神经网络处理器,包括:
第一处理模块,所述第一处理模块包括具有专用寄存器的卷积处理单元;
通用寄存器,所述通用寄存器与所述卷积处理单元连接;和
加载存储模块,所述加载存储模块与所述通用寄存器连接,所述加载存储模块还通过所述专用寄存器与所述卷积处理单元连接;
所述加载存储模块用于加载数据到所述通用寄存器和加载数据到所述卷积处理单元的专用寄存器中的至少一个。
本申请实施例还公开一种芯片,所述芯片包括神经网络处理器,所述神经网络处理器为如上所述的神经网络处理器。
本申请实施例还公开一种电子设备,包括:
系统总线;
外部存储器;
中央处理器;和
神经网络处理器,所述神经网络处理器为如上所述的神经网络处理器;
其中,所述神经网络处理器通过所述系统总线连接所述外部存储器和所述中央处理器,所述神经网络处理器受控于所述中央处理器从所述外部存储器中获取待处理数据、及对所述待处理数据进行处理以得到处理结果,并将所述处理结果反馈到所述外部存储器。
本申请实施例中,神经网络处理器通过加载存储模块可以将数据同时加载到通用寄存器和卷积处理单元的专用寄存器,从而可以提高加载数据的速度。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图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为本申请实施例提供的电子设备的结构示意图。
图26为本申请实施例提供的数据处理方法的一种流程示意图。
图27为本申请实施例提供的数据处理方法的另一种流程示意图。
图28为本申请实施例提供的数据加载方法的流程示意图。
具体实施方式
本申请实施例提供的技术方案可以应用于各种需要对输入图像进行图像处理以得到相应地输出图像的场景,本申请实施例对此并不限定。诸如,本申请实施例提供的技术方案可以应用于计算机视觉等领域的各种场景,比如:人脸识别、图像分类、目标检测及语义分割等。
请参阅图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可以存储计算结果。在多个处理单元的运算过程中,可以做到0 fallback到外部存储器,可以不需要将上一个算子的结算结果fallback到外部存储,对soc的带宽需求比较低,从而节省了系统带宽,减少了算子间的计算延迟。
在一些实施例中,该数据存储模块240可以是共享的存储模块。该数据存储模块220可以具有多个并行访问的Bank,诸如三个、四个等。可以根据实际需要对其进行灵活的划分。
请参阅图6,图6为本申请实施例提供的数据存储模块的结构示意图,数据存储模块240包括至少两个数据存储单元241和至少两个地址译码单元242。其中,地址译码单元242的数量不大于数据存储单元241的数量,例如,数据存储单元241的数量为四个,地址译码单元242的数量为四个。每一个地址译码单元a包括四个输出端口,每一个输出端口对应一个数据存储单元241。四个数据存储单元241,诸如:数据存储单元a,数据存储单元b,数据存储单元c和数据存储单元d,四个地址译码单元242,诸如地址译码单元a、地址译码单元b、地址译码单元c和地址译码单元d。
四个地址译码单元242均与一个数据存储单元241连接,一个地址译码单元242包括四个输出端口,一个地址译码单元242的输出端口的数量与数据存储模块240内的数据存储单元的数量相等,也即,一个地址译码单元242的输出端口对应一个数据存储单元241,例如,每一个地址译码单元a的第一输出端口与数据存储单元a对应,第二输出端口与数据存储单元b对应,第三输出端口与数据存储单元c对应,第四输出端口与数据存储单元d对应。
一个输出端口所输出的数据可以用于存储到与输出端口对应的一个数据存储单元内。例如:将地址译码单元a与数据存储单元a对应的第一输出端口输出的数据,地址译码单元b与数据存储单元a对应的第一输出端口输出的数据,地址译码单元c与数据存储单元a对应的第一输出端口输出的数据,地址译码单元d与数据存储单元a对应的第一输出端口输出的数据均存储到数据存储单元a中,因此,可以实现每一个地址译码单元内的数据可以存储到任意一个数据存储单元241中,从而可以实现数据存储单元241之间的共享。
一个输出端口用于输出一类数据,同一个地址译码单元242的四个输出端口对应的数据类型不同,例如,一个地址译码单元242的第一输出端口用于输出特征图,第二输出端口用于输出特征参数。
每一个地址译码单元242还包括三个输入端口,三个输入端口分别用于接收外部端口(port)传输的信号、数据和地址信息。每一个地址译码单元242根据接收到的信号、数据以及地址信息编译形成四个数据。
地址译码单元242的数量与外部端口的数量一致,例如,当外部端口的数量为四个,对应的地址译码单元242的数量为四个,外部端口传输的数据可以通过地址译码单元242存储至任意一个数据存储单元241内,实现数据存储模块240内的资源共享。外部端口可以为处理单元的端口,也可以为数据总线的端口,只要可以实现向数据存储单元存储数据以及从数据存储单元读取数据的端口,均是本申请实施例保护的范围。
数据存储模块240还包括至少两个数据合并单元243,诸如四个。每一个数据合并单元243包括至少两个数据输入端和一个数据输出端,每一数据合并单元243通过至少两个数据输入端接收与一数据存储单元241对应的所有数据,并将所有数据处理后存储到与该数据对应的数据存储单元241内,可以实现数据存储模块240有规律的处理数据,可以提高数据处理的效率,同时,也可以避免数据存储混乱的现象发生。
每一个数据合并单元243对应一个数据存储单元241,每一数据合并单元243的一个数据输入端连接与一数据存储单元241对应的所有地址译码单元242的输出端口,也即,一个数据合并单元243连接所有的地址译码单元242,通过一个数据合并单元243处理多个地址译码单元242的数据,可以提高数据存储的效率。
数据合并单元243采用按位或操作来数量数据,按位或是双目运算。只要对应的二个二进位有一个为1时,结果位就为1。按位或运算逻辑比较简单,运算速度较快,可以提高数据合并单元243的处理效率,进而可以提高数据存储模块240的存储效率。
一个数据合并单元243与一个数据存储单元241对应,例如,数据合并单元a与数据存储单元a对应,数据合并单元b与数据存储单元b对应,地址译码单元a译码形成的一个数据传输至与数据存储单元a对应的数据合并单元a进行处理,处理后的数据可以传输至数据存储单元a进行存储。可以实现数据存储模块240快速、高效的存储数据。
还需要说明是的,第二处理模块230诸如标量处理单元232所需要处理的数据可以不从数据存储模块240中获取,标量处理单元232所需要处理的数据可以由其接收到指令携带或者由其他方式传输。
请参阅7,图7为本申请实施例提供的神经网络处理器的第六种结构示意图。图7所示的神经网络处理器与图5所示的神经网络处理器的区别在于:图7中的第二处理模块230诸如标量处理单元232与指令分发模块220连接、且图7中的第二处理模块230诸如标量处理单元232与数据存储模块240不连接。而图5中的第二处理模块230诸如标量处理单元232与指令分发模块220连接、且图5中的第二处理模块230诸如标量处理单元232与数据存储模块240连接。图7中的第二处理模块230诸如标量处理单元232所需要处理的数据可以由其接收到指令携带,或者说图7中的第二处理模块230诸如标量处理单元232所需要处理的数据可以由指令分发模块220所分发的指令携带。本申请实施例还可以给第二处理模块230诸如标量处理单元232设置一个单独的数据存储模块。
需要说明的是,数据存储模块240还可以与指令分发模块220连接,指令分发模块220根据数据存储模块240是否存储有待处理数据确定是否发射指令。
请参阅8,图8为本申请实施例提供的神经网络处理器的第七种结构示意图。指令分发模块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不向发射指令。从而可以避免不必要的指令分发,节省功耗。
请参阅9,图9为本申请实施例提供的神经网络处理器的第八种结构示意图。本申请实施例提供的神经网络处理器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中。
请参阅图10,图10为本申请实施例提供的神经网络处理器的第九种结构示意图。神经网络处理单元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。
请参阅图11,图11为本申请实施例提供的神经网络处理器的第十种结构示意图,图11示出了指令存储模块250与系统总线接口280连接,外部存储器可以直接将程序或者说神经网络处理器200所需的指令存储到指令存储模块250。
需要说明的是,当指令存储模块250为IRAM时,本申请实施例还可以将指令存储模块250通过其他接口与外部存储器连接。以便于外部处理器可以将指令或者说程序直接写入到指令存储模块250,或者说是指令的初始化。
因此,本申请实施例数据搬移模块260和指令搬移模块270是两个相互分开的单元模块,分别实现数据和指令的传输,或者说搬移。或者说本申请实施例需要设置两个DMA来实现数据和指令的搬移。数据搬移模块260需要设置一个或多个逻辑通道,指令搬移模块270需要设置一个或多个物理通道。在此以指令搬移模块270为例进行说明。
诸如本申请实施例数据搬移模块260可以为一个单独的DMA,在此定义为DMA1;指令搬移模块270可以为一个单独的DMA,在此定义为DMA2。即DMA1可以进行数据的搬移,DMA2可以进行指令的搬移。
请参阅图12,图12为本申请实施例提供的神经网络处理器中直接存储访问的第一种结构示意图。图12所示的DMA260a相当于为数据搬移模块260的部分结构示意图。DMA260a包括多个逻辑通道262a和一个仲裁单元264a。多个逻辑通道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以实现不同搬移的需求。
请参阅图13,图13为本申请实施例提供的神经网络处理器中直接存储访问的第二种结构示意图。图13所示的直接存储访问260b在功能上相当于指令搬移模块270和数据搬移模块260,或者说图13所示的直接存储访问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的个数可以为一个。
请继续参阅图13,DMA260b还可以包括第一仲裁单元263b,该第一仲裁单元263b与系统总线接口连接。
请结合图14,图14为本申请实施例提供的神经网络处理器的第十一种结构示意图。第一仲裁单元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还可以通过其他结构与其他部件实现连接,以实现数据的搬移。
请继续参阅图15和图16,图15为本申请实施例提供的神经网络处理器中直接存储访问的第三种结构示意图,图16为本申请实施例提供的神经网络处理器的第十二种结构示意图。DMA260b还可以包括第二仲裁单265b,第二仲裁单265b可以与存储接口266b连接。该存储接口266b可以连接存储模块(memory,或者为BUF),该存储模块与DMA260b可以位于同一个NPU中,该存储模块与DMA260b也可以不位于同一个NPU中。诸如DMA260b位于NPU中,存储模块可以位于NPU中,存储模块也可以位于其它器件中。第二仲裁单265b可以与每一个逻辑通道261b连接,且第一仲裁单元263b和第二仲裁单265b连接同一个逻辑通道261b时,可以由一选择器连接到同一个逻辑通道261b。存储接口266b可以设置在DMA260b外,也可以设置在DMA260b内。
请继续参阅图15和图16,DMA260b还可以包括第三仲裁单元267b,第三仲裁单元267b和外设接口268b,外设接口268b可以连接外部设备,该外部设备与DMA260b位于不同的器件中,诸如DMA260b位于NPU中,外部设备为CPU等。第三仲裁单元267b可以与每一个逻辑通道261b连接,且第一仲裁单元263b和第三仲裁单元267b连接同一个逻辑通道261b时,可以由一选择器连接同一逻辑单元261b。其中,外设接口268b可以设置在DMA260b外,也可以设置在DMA260b内。
请继续参阅图15和图16,本申请实施例DMA260b还可以同时包括第一仲裁单元263b、第二仲裁单元265b及第三仲裁单元267b。第一仲裁单元263b连接系统总线接口264b,第二仲裁单元265b连接存储接口266b,第三仲裁单元267b连接外设接口268b,第一仲裁单元263b、第二仲裁单元265b及第三仲裁单元267b均与可以与逻辑通道261b连接,当第一仲裁单元263b、第二仲裁单元265b及第三仲裁单元267b连接有一个逻辑通道261b时,可以由一个选择器连接在一个逻辑通道261b和三个仲裁单元之间。
需要说明的是,本申请实施例还可以设置其他仲裁单元以通过其他接口连接其他元件。
请参阅图17,图17为本申请实施例提供的神经网络处理器的第十三种结构示意图。图17示出了图13或图15的直接存储访问260b与神经网络处理器200其他元件的一种连接关系。该直接存储访问260b连接系统总线接口280、指令存储模块250及数据存储模块240,直接存储访问260b可以通过系统总线接口280将数据搬移到数据存储模块240,直接存储访问260b可以通过系统总线接口280将指令搬移到指令存储模块250,直接存储访问260b还可以通过系统总线接口280将数据存储模块240所存储的数据搬移到外部存储器。
本申请实施例神经网络处理器200中第一处理模块210的数据可以直接存储到数据存储模块240,数据存储模块240的数据也可以加载到第一处理模块210,从而使得程序比较精简。然而,为了加快数据的存取速度,本申请实施例还可以在数据存储模块240和第一处理模块210之间增加通用寄存器。下面结合附图对具有通用寄存器的神经网络处理器进行详细说明。
请参阅图18,图18为本申请实施例提供的神经网络处理器的第十四种结构示意图。神经网络处理器200还可以包括通用寄存器290和加载存储模块202。
通用寄存器290与第一处理模块210连接,通用寄存器290可以与第一处理模块210中的所有的处理单元连接。诸如通用寄存器290与第一处理模块210的卷积处理单元212、向量处理单元214连接。卷积处理单元212和向量处理单元214均可以从通用寄存器290中获取所需的数据。当然,卷积处理单元212和向量处理单元214也均可以将各自的处理结果存储到通用寄存器290。需要说明的是,图17所示出的第一处理模块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对数据进行处理,诸如卷积处理。从而可以提高加载数据的速度。
需要说明的是,图18仅示出神经网络处理器200的部分元件,图18所示神经网络处理器200的其他元件可以参阅图1至图17,为了详细说明本申请实施例加载存储模块202和通用寄存器290与神经网络处理器200其他元件的关系,下面结合图19进行详细说明。
请参阅图19,图19为本申请实施例提供的神经网络处理器的第十五种结构示意图。加载存储模块(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不集成在一个模块中。
请参阅图20,图20为本申请实施例提供的神经网络处理器的第十六种结构示意图。神经网络处理器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连接。
请参阅图21,图21为本申请实施例提供的神经网络处理器的第十七种结构示意图。神经网络处理器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连接。
需要说明的是,图20和图21仅示出神经网络处理器200的部分元件,图20和图21所示神经网络处理器200的其他元件可以参阅图1至图19,为了详细说明本申请实施例数据搬移引擎204与其他元件的关系,以及数据搬移引擎204具体实现数据的搬移,下面结合图22进行详细说明。
请参阅图22,图22为本申请实施例提供的神经网络处理器的第十八种结构示意图。本申请实施例神经网络处理器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可以对待处理数据进行卷积处理。卷积神经网络中的卷积层的输入包括输入数据(如从外部获取的待处理数据)和权重数据,卷积层的主要计算流程是对输入数据和权重数据进行卷积运算得到输出数据。其中,进行卷积运算的主体为卷积处理单元,也可以理解为,神经网络处理器的卷积处理单元对输入数据和权重数据进行卷积运算得到输出数据。需要说明的是,权重数据在一些情况下可以理解为一个或多个卷积核。下面针对卷积运算进行详细说明。
输入数据的大小为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为输入数据的批数。
卷积处理单元先对输入数据按卷积核的大小进行取窗,取窗后的窗体区域与权重数据中的一个卷积核进行乘累加运算得到一个数据,随后分别在W方向和H方向滑动窗体再进行乘累加运算得H’×W’个数据,最后遍历K个卷积核得到K×H’×W’个数据。
当然,卷积处理单元还可以采用其他方式的卷积运算方式。下面对另一种方式的卷积运算进行详细说明。请参阅图23,图23本申请实施例提供的神经网络处理器中卷积处理单元卷积运算示意图。其中,输入数据大小仍然为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可以不相等,以利于乘累加阵列的设置。
卷积处理单元可以用于:根据卷积核对输入数据进行一次取窗操作,得到第一窗体区域,第一窗体区域沿深度方向包括第一数量层的第一深度数据;获取多个卷积核,多个卷积核沿深度方向包括第一数量层的第二深度数据;将一层的第一深度数据与多个卷积核同一层的第二深度数据进行乘累加运算,得到第一运算数据。
卷积处理单元还可以对多层进行运算,卷积处理单元还用于将多层的第一深度数据对应的多个第一运算数据累加得到目标运算数据。即,基于上述实施例中单层运算的方式,将多层的第一深度数据与多个卷积核多层的第二深度数据进行乘累加运算,得到多个第一运算数据累加后得到目标运算数据。
卷积处理单元可以将其运算结果存储到数据存储模块,也可以将运算结果传输到向量处理单元或整形处理单元以进行进一步的计算操作。
本申请实施例所提供的神经网络处理器200可以集成为一个芯片。
请参阅图24,图24为本申请实施例提供的芯片的结构示意图。芯片20包括神经网络处理器200,该神经网络处理器200具有可以参阅以上内容,在此不再赘述。该芯片20可以应用到电子设备中。
需要说明的是,本申请实施例的神经网络处理器200也可以与其他处理器、存储器等集成在一个芯片中。
为了进一步说明本申请实施例神经网络处理器200的整体运作过程,下面结合其他处理器、存储器进行描述。
请参阅图25,图25为本申请实施例提供的电子设备的结构示意图。电子设备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的位置等。
需要说明的是,图25所示的神经网络处理器还可以替换成其他图示的神经网络处理器。
下面从本申请实施例通过神经网络处理器对数据进行处理的方法步骤和对数据进行加载的方法步骤的角度进行描述。
请参阅图26,图26为本申请实施例提供的数据处理方法的流程示意图。该数据处理方法是基于以上所述神经网络处理器对数据进行处理。该数据处理方法包括:
1001,接收待处理数据和多条指令。该待处理数据可以是需要采用神经网络处理器进行处理的图像数据和权重数据。可以采用数据搬移模块260通过系统总线接口280从外部存储器600中读取需要进行处理的数据。当然也可以采用DMA260b通过系统总线接口266b从外部存储器中搬移需要进行处理的数据。接收到待处理数据后可以将所述待处理数据加载到所述数据存储模块240。
该多条指令可以是计算指令,也可以是控制指令。可以采用指令搬移模块270通过系统总线接口280从外部读取需要的指令。当然也可以采用DMA260b通过系统总线接口266b从外部搬移所需指令。还可以是外部直接将指令写入到NPU200。接收到多条指令后,可以将该多条指令加载到所述指令存储模块240。
1002,将所述多条指令并行发射到所述多个处理单元。神经网络处理器200的指令分发模块220可以根据接收到的多条指令,将该多条指令在一个时钟周期内发射到各自的处理单元,以使得各个处理单元依据该指令来实现对待处理数据的处理。其中,该指令分发模块220可以将多条指令在一个时钟周期内发射到第一处理模块210的至少两个处理单元中。该指令分发模块220可以将多条指令在一个时钟周期内发射到标量处理单元232和第一处理模块210的至少一个处理单元中。
需要说明的是,为确保指令分发模块220所发射下去的指令均是有用的,或者说指令分发模块220将指令发射下去后各个处理单元有根据该指令对数据进行处理,本申请实施例在指令分发模块220发射指令之前,指令分发模块220先向数据存储模块240发送一个判断信号,待从数据存储模块240返回信号时,指令分发模块240可以基于该返回信号确定数据存储模块240是否缓存有待处理数据。如果指令分发模块220确定出数据存储模块240未存储有待处理数据,则指令分发模块240则不会将指令发射到各个处理单元。而只有在指令分发模块220确定出数据存储模块240存储有待处理数据时,指令分发模块240才会将指令发射到多个处理单元。
1003,所述多个处理单元根据所述多条指令对所述待处理数据进行处理,以得到处理结果。各个处理单元230对待处理数据处理完成后,会得到处理结果。本申请实施例多个处理单元230还可以将所述处理结果写入到所述数据存储模块240。进而采用数据搬移模块260及系统总线接口280可以将该处理结果传输到外部存储器600。
数据处理完成后,本申请实施例神经网络处理器的指令分发模块220如果收到结束标识指令,则认为程序已经执行完毕,发出中断给上层软件,结束NPU200的工作。如果没有结束则返回到1002,继续取指执行指令发射,一直到程序执行完毕。
请参阅图27,图27为本申请实施例提供的数据处理方法的流程示意图。该数据处理方法是基于以上所述神经网络处理器对数据进行处理。该数据处理方法包括:
2001,根据第一条件将所述通用寄存器的数据搬移到所述标量寄存器。其中第一条件可以为第一指令。数据搬移引擎204可以根据第一指令将通用寄存器290的数据搬移到标量寄存器2322,具体内容可以参阅以上内容,在此不再赘述。
2002,根据第二条件将所述通用寄存器的数据搬移到所述标量寄存器。其中第二条件可以为第二指令。数据搬移引擎204可以根据第二指令将标量寄存器2322的数据搬移到通用寄存器290,具体内容可以参阅以上内容,在此不再赘述。
请参阅图28,图28为本申请实施例提供的数据加载方法的流程示意图。该数据加载方法基于以上神经网络处理器200加载数据,该数据加载方法包括:
3001,将第一数据加载到具有专用寄存器的卷积处理单元。其中,具有专用寄存器2122的卷积处理单元212可以参阅以上内容,在此不再赘述。
3002,将第二数据存储到通用寄存器,所述第一数据和所述第二数据的类型不同。其中,通用寄存器290可以参阅以上内容,在此不再赘述。本申请实施例可以通过LSU290实现数据的加载或传输,具体加载或传输方式可以参阅以上内容,在此不再赘述。其中第一数据和第二数据具体可以参阅以上内容,在此不再赘述。
以上对本申请实施例提供的神经网络处理器、芯片和电子设备进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请。同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (20)

1.一种神经网络处理器,其特征在于,包括:
第一处理模块,所述第一处理模块包括具有专用寄存器的卷积处理单元;
通用寄存器,所述通用寄存器与所述卷积处理单元连接;和
加载存储模块,所述加载存储模块与所述通用寄存器连接,所述加载存储模块还通过所述专用寄存器与所述卷积处理单元连接;
所述加载存储模块用于加载数据到所述通用寄存器和加载数据到所述卷积处理单元的专用寄存器中的至少一个。
2.根据权利要求1所述的神经网络处理器,其特征在于,所述神经网络处理器还包括:
数据存储模块,所述数据存储模块用于存储数据,所述数据存储模块与所述加载存储模块连接;
所述加载存储模块用于将所述数据存储模块中的数据加载到所述通用寄存器和所述卷积处理单元的专用寄存器中的至少一个;
所述加载存储模块还用于将所述通用寄存器的数据存储到所述数据存储模块。
3.根据权利要求2所述的神经网络处理器,其特征在于,所述数据存储模块所存储的数据包括第一数据和第二数据,所述第一数据和所述第二数据的一者为图像数据,另一者为权重数据;
所述加载存储模块还用于将所述第一数据加载到所述卷积处理单元的专用寄存器;
所述加载存储模块还用于将所述第二数据加载到所述通用寄存器;
所述卷积处理单元还用于从所述通用寄存器获取所述第二数据。
4.根据权利要求2所述的神经网络处理器,其特征在于,所述加载存储模块和所述数据存储模块集成在一起;或
所述加载存储模块和所述数据存储模块分开设置。
5.根据权利要求1所述的神经网络处理器,其特征在于,所述通用寄存器包括多个向量寄存器和多个预测寄存器。
6.根据权利要求1至5任一项所述的神经网络处理器,其特征在于,所述神经网络处理器还包括:
指令分发模块,所述指令分发模块与所述卷积处理单元连接,所述指令分发模块用于并行发射多条指令。
7.根据权利要求6所述的神经网络处理器,其特征在于,所述指令分发模块还用于在一个时钟周期内并行发射多条指令。
8.根据权利要求6所述的神经网络处理器,其特征在于,所述指令分发模块还用于根据指令的类型并行发射多条指令。
9.根据权利要求6所述的神经网络处理器,其特征在于,所述指令分发模块所发射的指令包括细粒度指令,所述指令分发模块用于将所述细粒度指令发射到所述卷积处理单元,所述卷积处理单元用于根据一条细粒度指令对其所接收到的数据进行一次向量内积运算。
10.根据权利要求6所述的神经网络处理器,其特征在于,所述第一处理模块还包括与所述指令分发模块连接的向量处理单元,所述指令分发模块用于将所述多条指令并行发射到所述卷积处理单元和所述向量处理单元。
11.根据权利要求10所述的神经网络处理器,其特征在于,所述第一处理模块还包括与所述指令分发模块连接的整形处理单元,所述指令分发模块用于将所述多条指令并行发射到所述卷积处理单元、所述向量处理单元和所述整形处理单元。
12.根据权利要求6所述的神经网络处理器,其特征在于,所述神经网络处理器还包括第二处理模块,所述第二处理模块包括与所述指令分发模块连接的标量处理单元,所述指令分发模块用于将所述多条指令并行发射到所述卷积处理单元和所述标量处理单元。
13.根据权利要求10或12所述神经网络处理器,其特征在于,所述神经网络处理器还包括用于存储数据的数据存储模块,所述数据存储模块与所述卷积处理单元连接。
14.根据权利要求13所述神经网络处理器,其特征在于,所述数据存储模块还与所述指令分发模块连接;
所述指令分发模块还用于:
根据所述数据存储模块存储有待处理的数据并行发射多条指令;
根据所述指令缓存单元未存储待处理的数据不发射指令。
15.根据权利要求13所述神经网络处理器,其特征在于,所述数据存储模块还与所述标量处理单元连接。
16.根据权利要求14所述的神经网络处理器,其特征在于,所述神经网络处理器还包括:
系统总线接口,所述系统总线接口用于与系统总线连接;
数据搬移模块,所述数据搬移模块连接所述数据存储模块和所述系统总线接口,所述数据搬移模块用于搬移数据;
指令存储模块,所述指令存储模块与所述指令分发模块连接,所述指令存储模块用于存储所述指令分发模块所需要发射的部分指令或全部指令;和
指令搬移模块,所述指令搬移模块连接所述指令存储模块和所述系统总线接口,所述指令搬移模块用于搬移指令。
17.根据权利要求14所述的神经网络处理器,其特征在于,所述神经网络处理器还包括:
系统总线接口,所述系统总线接口用于与系统总线连接;
数据搬移模块,所述数据搬移模块连接所述数据存储模块和所述系统总线接口,所述数据搬移模块用于搬移数据;和
指令存储模块,所述指令存储模块连接所述指令分发模块和所述系统总线接口,所述指令存储模块用于存储所述指令分发模块所需要发射的全部指令。
18.根据权利要求14所述的神经网络处理器,其特征在于,所述神经网络处理器还包括:
系统总线接口,所述系统总线接口用于与系统总线连接;和
直接存储访问,所述直接存储访问包括至少一条物理通道、至少一条逻辑通道和第一仲裁单元,所述至少一条物理通道和至少一条逻辑通道通过所述第一仲裁单元连接所述系统总线接口,所述至少一个物理通道与所述指令存储模块连接,所述至少一个逻辑通道与所述数据存储模块连接。
19.一种芯片,其特征在于,包括神经网络处理器,所述神经网络处理器为如权利要求1至18任一项所述的神经网络处理器。
20.一种电子设备,其特征在于,包括:
系统总线;
外部存储器;
中央处理器;和
神经网络处理器,所述神经网络处理器为如权利要求1至18任一项所述的神经网络处理器;
其中,所述神经网络处理器通过所述系统总线连接所述外部存储器和所述中央处理器,所述神经网络处理器受控于所述中央处理器从所述外部存储器中获取待处理数据、及对所述待处理数据进行处理以得到处理结果,并将所述处理结果反馈到所述外部存储器。
CN201911253030.2A 2019-12-09 2019-12-09 神经网络处理器、芯片和电子设备 Active CN111047035B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201911253030.2A CN111047035B (zh) 2019-12-09 神经网络处理器、芯片和电子设备
PCT/CN2020/132792 WO2021115149A1 (zh) 2019-12-09 2020-11-30 神经网络处理器、芯片和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911253030.2A CN111047035B (zh) 2019-12-09 神经网络处理器、芯片和电子设备

Publications (2)

Publication Number Publication Date
CN111047035A true CN111047035A (zh) 2020-04-21
CN111047035B CN111047035B (zh) 2024-04-19

Family

ID=

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112130901A (zh) * 2020-09-11 2020-12-25 山东云海国创云计算装备产业创新中心有限公司 基于risc-v的协处理器、数据处理方法及存储介质
WO2021115149A1 (zh) * 2019-12-09 2021-06-17 Oppo广东移动通信有限公司 神经网络处理器、芯片和电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107590535A (zh) * 2017-09-08 2018-01-16 西安电子科技大学 可编程神经网络处理器
US20180307976A1 (en) * 2017-04-19 2018-10-25 Beijing Deephi Intelligence Technology Co., Ltd. Device for implementing artificial neural network with separate computation units
CN109034373A (zh) * 2018-07-02 2018-12-18 鼎视智慧(北京)科技有限公司 卷积神经网络的并行处理器及处理方法
WO2019029785A1 (en) * 2017-08-07 2019-02-14 Renesas Electronics Corporation MATERIAL CIRCUIT
US20190102640A1 (en) * 2017-09-29 2019-04-04 Infineon Technologies Ag Accelerating convolutional neural network computation throughput
CN110097174A (zh) * 2019-04-22 2019-08-06 西安交通大学 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180307976A1 (en) * 2017-04-19 2018-10-25 Beijing Deephi Intelligence Technology Co., Ltd. Device for implementing artificial neural network with separate computation units
WO2019029785A1 (en) * 2017-08-07 2019-02-14 Renesas Electronics Corporation MATERIAL CIRCUIT
CN107590535A (zh) * 2017-09-08 2018-01-16 西安电子科技大学 可编程神经网络处理器
US20190102640A1 (en) * 2017-09-29 2019-04-04 Infineon Technologies Ag Accelerating convolutional neural network computation throughput
CN109034373A (zh) * 2018-07-02 2018-12-18 鼎视智慧(北京)科技有限公司 卷积神经网络的并行处理器及处理方法
CN110097174A (zh) * 2019-04-22 2019-08-06 西安交通大学 基于fpga和行输出优先的卷积神经网络实现方法、系统及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021115149A1 (zh) * 2019-12-09 2021-06-17 Oppo广东移动通信有限公司 神经网络处理器、芯片和电子设备
CN112130901A (zh) * 2020-09-11 2020-12-25 山东云海国创云计算装备产业创新中心有限公司 基于risc-v的协处理器、数据处理方法及存储介质

Also Published As

Publication number Publication date
WO2021115149A1 (zh) 2021-06-17

Similar Documents

Publication Publication Date Title
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
CN107679621B (zh) 人工神经网络处理装置
KR102346079B1 (ko) 벡터 계산 유닛
KR102443546B1 (ko) 행렬 곱셈기
CN111047036B (zh) 神经网络处理器、芯片和电子设备
CN110991619A (zh) 神经网络处理器、芯片和电子设备
CN103221933A (zh) 从通用寄存器文件向simd寄存器文件移动数据的方法和装置
CN111091181B (zh) 卷积处理单元、神经网络处理器、电子设备及卷积运算方法
Xu et al. A dedicated hardware accelerator for real-time acceleration of YOLOv2
CN111274025A (zh) 用于在ssd中加速数据处理的系统和方法
US6269435B1 (en) System and method for implementing conditional vector operations in which an input vector containing multiple operands to be used in conditional operations is divided into two or more output vectors based on a condition vector
CN111047035B (zh) 神经网络处理器、芯片和电子设备
CN111047035A (zh) 神经网络处理器、芯片和电子设备
CN112463218A (zh) 指令发射控制方法及电路、数据处理方法及电路
CN115081600A (zh) 执行Winograd卷积的变换单元、集成电路装置及板卡
US20220100575A1 (en) Method and apparatus for a configurable hardware accelerator
KR102661605B1 (ko) 벡터 계산 유닛
CN117667212A (zh) 指令控制装置、方法、处理器、芯片和板卡
CN117437113A (zh) 用于对图像数据进行加速处理的系统、方法及存储介质
CN115079927A (zh) 暂存卷积结果的缓存、计算装置、集成电路装置及板卡
CN111291871A (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
GR01 Patent grant