CN112055862A - 可扩展神经网络处理引擎 - Google Patents
可扩展神经网络处理引擎 Download PDFInfo
- Publication number
- CN112055862A CN112055862A CN201980029442.XA CN201980029442A CN112055862A CN 112055862 A CN112055862 A CN 112055862A CN 201980029442 A CN201980029442 A CN 201980029442A CN 112055862 A CN112055862 A CN 112055862A
- Authority
- CN
- China
- Prior art keywords
- neural
- data
- task
- processor circuit
- circuit
- 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
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 63
- 238000012545 processing Methods 0.000 title claims description 99
- 230000001537 neural effect Effects 0.000 claims abstract description 452
- 239000000872 buffer Substances 0.000 claims abstract description 132
- 238000000034 method Methods 0.000 claims description 64
- 238000000605 extraction Methods 0.000 claims description 19
- 230000004044 response Effects 0.000 claims description 8
- 230000004913 activation Effects 0.000 claims description 7
- 230000005540 biological transmission Effects 0.000 claims description 3
- 230000003213 activating effect Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 description 38
- 238000010586 diagram Methods 0.000 description 32
- 238000010801 machine learning Methods 0.000 description 19
- 230000002085 persistent effect Effects 0.000 description 9
- 230000033001 locomotion Effects 0.000 description 8
- 238000012546 transfer Methods 0.000 description 8
- 238000012805 post-processing Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000009849 deactivation Effects 0.000 description 4
- 238000013527 convolutional neural network Methods 0.000 description 3
- 230000006837 decompression Effects 0.000 description 3
- HNWFFTUWRIGBNM-UHFFFAOYSA-N 2-methyl-9,10-dinaphthalen-2-ylanthracene Chemical compound C1=CC=CC2=CC(C3=C4C=CC=CC4=C(C=4C=C5C=CC=CC5=CC=4)C4=CC=C(C=C43)C)=CC=C21 HNWFFTUWRIGBNM-UHFFFAOYSA-N 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000010606 normalization Methods 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000881 depressing effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 210000000118 neural pathway Anatomy 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000006641 stabilisation Effects 0.000 description 1
- 238000011105 stabilization Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
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
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3296—Power saving characterised by the action undertaken by lowering the supply or operating voltage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- 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/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/28—DMA
-
- 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)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Processing (AREA)
- Image Analysis (AREA)
Abstract
本发明公开了涉及具有用于实例化一个或多个神经网络的可扩展架构的神经处理器电路的实施方案。所述神经处理器电路包括耦接到所述神经处理器电路外部的存储器的数据缓冲器,以及多个神经引擎电路。为了执行实例化神经网络的任务,每个神经引擎电路使用输入数据和内核系数来生成输出数据。神经处理器电路可包括根据任务的配置数据被选择性地激活或解激活的多个神经引擎电路。此外,电子设备可包括被选择性地激活或解激活以执行任务的多个神经处理器电路。
Description
背景技术
1.技术领域
本公开涉及用于实现神经网络的电路,并且更具体地涉及对神经网络任务的可扩展处理。
2.相关技术描述
人工神经网络(ANN)是使用连接节点的集合来处理输入数据的计算***或模型。ANN通常被组织成层,其中不同的层对其输入执行不同类型的转换。ANN的扩展或变体诸如卷积神经网络(CNN)、深度神经网络(DNN)、递归神经网络(RNN)和深度信念网络(DBN)已受到大量关注。这些计算***或模型通常涉及广泛的计算操作,包括相乘和累加。例如,CNN是一类主要使用输入数据和内核数据之间的卷积的机器学习技术,卷积可分解为相乘和累加操作。
根据输入数据的类型和待执行的操作,这些机器学习***或模型可被不同地配置。此类变化的配置将包括例如预处理操作、输入数据中的通道数量、待使用的内核数据、待应用于卷积结果的非线性函数以及各种后处理操作的应用。使用中央处理单元(CPU)及其主存储器来实例化和执行各种配置的机器学习***或模型相对容易,因为此类***或模型仅通过更新代码即可实例化。然而,仅依赖于CPU进行这些机器学习***或模型的各种操作将消耗中央处理单元(CPU)的大量带宽以及增加总体功率消耗。
发明内容
实施方案涉及具有用于实例化一个或多个神经网络的可扩展架构的神经处理器电路。神经处理器电路可包括多个引擎电路,这些引擎电路根据配置数据被选择性地激活或解激活以支持对输入数据的并行处理,该配置数据对神经处理器电路进行编程以实例化或实现神经网络。神经处理器电路包括多个神经引擎电路、数据缓冲器以及内核提取电路。神经引擎电路被选择性地激活,并且这些神经引擎电路中的每个神经引擎电路被配置为对输入数据和内核系数执行卷积操作以生成输出数据。数据缓冲器位于该多个神经引擎电路与神经处理器电路外部的存储器之间。数据缓冲器存储来自存储器的输入数据以用于发送到神经引擎电路以及从神经引擎电路接收的输出数据。内核提取电路从神经处理器电路外部的存储器接收内核数据,并且将从内核数据提取的对应内核系数发送到被选择用于激活的神经引擎电路。
在一些实施方案中,神经任务管理器电路被配置为向神经引擎电路提供配置数据以激活或解激活用于任务的神经引擎电路中的一个或多个神经引擎电路。
在一些实施方案中,数据缓冲器响应于从神经任务管理器电路接收到配置数据而分配存储器空间以用于存储输入数据和输出数据。
在一些实施方案中,内核提取电路响应于从神经任务管理器接收到配置数据而分配存储器空间以用于存储内核数据。
在一些实施方案中,神经任务管理器电路被配置为向神经处理器电路提供配置数据以激活或解激活用于任务的神经处理器电路。电子设备可包括被选择性地激活或解激活的多个神经处理器电路。
在一些实施方案中,神经处理器电路的多个神经引擎电路被选择性地激活。神经引擎电路中的每个神经引擎电路被配置为对输入数据和内核系数执行卷积操作以生成输出数据。输入数据存储在神经引擎电路的数据缓冲器中以用于发送到神经引擎电路,以及从神经引擎电路接收的输出数据。从内核数据提取的对应内核系数被发送到被选择用于激活的神经引擎电路。
附图说明
图1是根据实施方案的电子设备的高级图。
图2是示出根据一个实施方案的电子设备中的部件的框图。
图3是示出根据一个实施方案的神经处理器电路的框图。
图4是根据一个实施方案的神经处理器电路中的神经引擎的框图。
图5是示出根据一个实施方案的用于在神经处理器电路处处理输入数据的回路的概念图。
图6是示出根据一个实施方案的将输入数据分段成切片、图块和工作单元的概念图。
图7是示出根据一个实施方案的神经处理器电路的部件中的光栅器的编程的图。
图8是示出根据一个实施方案的在神经处理器电路中处理输入数据的方法的流程图。
图9是示出根据一个实施方案的由任务的任务列表表示的神经网络的示意性框图。
图10是示出根据一个实施方案的神经任务管理器的框图。
图11是示出根据一个实施方案的使用任务队列取回任务描述符的图。
图12是示出根据一个实施方案的任务描述符的图。
图13是示出根据一个实施方案的神经任务管理器的获取队列和配置队列的框图。
图14是示出根据一个实施方案的在神经处理器电路中对任务进行管理的方法的流程图。
图15是示出根据一个实施方案的电子设备中的多个神经处理器电路的框图。
图16是示出根据一个实施方案的神经引擎的内核提取电路的框图。
图17是示出根据一个实施方案的利用可扩展神经处理器电路处理输入数据的方法的流程图。
仅仅出于示例目的,附图描绘以及详细说明描述各种非限定性实施方案。
具体实施方式
现在将详细地参考实施方案,这些实施方案的示例在附图中示出。下面的详细描述中示出许多具体细节,以便提供对各种所描述的实施方案的充分理解。然而,可以在没有这些具体细节的情况下实施所述实施方案。在其他情况下,没有详细地描述众所周知的方法、过程、部件、电路和网络,从而不会不必要地使实施方案的各个方面晦涩难懂。
本公开的实施方案涉及可扩展神经处理器电路,该可扩展神经处理器电路包括可被选择性地激活以实例化神经网络的多个神经引擎。对于处理周期,神经处理器电路的数据缓冲器(例如,耦接到***存储器以及第一神经引擎电路和第二神经引擎电路)向有源神经引擎电路中的每个神经引擎电路提供输入数据。有源神经引擎电路中的每个神经引擎电路可将不同的内核系数应用于输入数据以生成不同的输出数据。还可修改数据缓冲器和存储内核数据的内核存储器的大小。
示例性电子设备
本文描述了电子设备、此类设备的用户界面和使用此类设备的相关过程的实施方案。在一些实施方案中,该设备为还包含其他功能诸如个人数字助理(PDA)和/或音乐播放器功能的便携式通信设备,诸如移动电话。便携式多功能设备的示例性实施方案包括但不限于来自Apple Inc.(Cupertino,California)的设备、iPod设备、Apple设备和设备。可选地使用其他便携式电子设备,诸如可穿戴设备、膝上型电脑或平板计算机。在一些实施方案中,该设备不是便携式通信设备,而是台式计算机或不是为便携式使用而设计的其他计算设备。在一些实施方案中,所公开的电子设备可包括触敏表面(例如,触摸屏显示器和/或触摸板)。下文结合图1描述的示例电子设备(例如,设备100)可包括用于接收用户输入的触敏表面。电子设备还可包括一个或多个其他物理用户接口设备,诸如物理键盘、鼠标和/或操纵杆。
图1是根据一个实施方案的电子设备100的高级图。设备100可包括一个或多个物理按钮,诸如“home”按钮或菜单按钮104。菜单按钮104例如用于导航到在设备100上执行的一组应用程序中的任何应用程序。在一些实施方案中,菜单按钮104包括识别菜单按钮104上的指纹的指纹传感器。指纹传感器能够被用来确定菜单按钮104上的手指是否具有与为解锁设备100存储的指纹匹配的指纹。另选地,在一些实施方案中,菜单按钮104被实现为触摸屏上显示的图形用户界面(GUI)中的软键。
在一些实施方案中,设备100包括触摸屏150、菜单按钮104、用于使设备开/关机和用于锁定设备的下压按钮106、音量调节按钮108、订户身份模块(SIM)卡槽110、耳麦插孔112和对接/充电外部端口124。下压按钮106可被用于通过压下该按钮并将该按钮保持在压下状态达预定义的时间间隔来对设备进行开关机;通过压下该按钮并在该预定义的时间间隔过去之前释放该按钮来锁定设备;和/或对设备进行解锁或发起解锁过程。在另选的实施方案中,设备100还通过麦克风113接受用于激活或解激活某些功能的语音输入。设备100包括各种部件,包括但不限于存储器(可包括一个或多个计算机可读存储介质)、存储器控制器、一个或多个中央处理单元(CPU)、***设备接口、RF电路、音频电路、扬声器111、麦克风113、输入/输出(I/O)子***和其他输入或控制设备。设备100可包括一个或多个图像传感器164、一个或多个接近传感器166,以及一个或多个加速度计168。设备100可包括图1中未示出的部件。
设备100仅是电子设备的一个示例,并且设备100可具有比上文列出的更多或更少的部件,其中一些部件可组合成一个部件或具有不同的配置或布置。以上列出的设备100的各种部件体现为硬件、软件、固件或其组合,包括一个或多个信号处理和/或专用集成电路(ASIC)。
图2是示出根据一个实施方案的设备100中的部件的框图。设备100可执行包括图像处理在内的各种操作。出于此目的和其他目的,设备100可包括除了别的部件之外的图像传感器202、片上***(SOC)部件204、***存储器230、永久存储器(例如,闪存)228、运动(取向)传感器234和显示器216。图2中所示的部件仅为例示性的。例如,设备100可包括图2中未示出的其他部件(诸如扬声器或麦克风)。另外,一些部件(诸如运动传感器234)可从设备100中省略。
图像传感器202是用于捕获图像数据的部件,并且可实现为例如互补金属氧化物半导体(CMOS)有源像素传感器、相机、摄像机或其他设备。图像传感器202生成原始图像数据,其被发送到SOC部件204以进行进一步处理。在一些实施方案中,由SOC部件204处理的图像数据显示在显示器216上,存储在***存储器230、永久存储器228中,或经由网络连接发送到远程计算设备。由图像传感器202生成的原始图像数据可以是Bayer颜色内核阵列(CFA)图案(在下文中也称为“Bayer图案”)。
运动传感器234是用于感测设备100的运动的部件或一组部件。运动传感器234可生成指示设备100的取向和/或加速度的传感器信号。传感器信号被发送到SOC部件204以用于各种操作,诸如打开设备100或旋转显示器216上显示的图像。
显示器216是用于显示由SOC部件204生成的图像的部件。显示器216可包括例如液晶显示器(LCD)设备或有机发光二极管(OLED)设备。基于从SOC部件204接收的数据,显示器216可显示各种图像,诸如菜单、所选择的操作参数、由图像传感器202捕获并且由SOC部件204处理的图像,和/或从设备100的用户界面接收的其他信息(未示出)。
***存储器230是用于存储由SOC部件204执行的指令以及用于存储由SOC部件204处理的数据的部件。***存储器230可体现为任何类型的存储器,包括例如动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率(DDR、DDR2、DDR3等)RAMBUS DRAM(RDRAM)、静态RAM(SRAM)或其组合。在一些实施方案中,***存储器230可以各种格式存储像素数据或其他图像数据或统计。
永久存储器228是用于以非易失性方式存储数据的部件。即使电力不可用,永久存储器228也保留数据。永久存储器228可体现为只读存储器(ROM)、闪存或其他非易失性随机存取存储器设备。
SOC部件204体现为一个或多个集成电路(IC)芯片并执行各种数据处理过程。SOC部件204可包括除了别的子部件之外的图像信号处理器(ISP)206、中央处理器单元(CPU)208、网络接口210、传感器接口212、显示控制器214、神经处理器电路218、图形处理器(GPU)220、存储器控制器222、视频编码器224、存储控制器226和连接这些子组件的总线232。SOC部件204可包括比图2中所示的子部件更多或更少的子部件。
ISP 206是执行图像处理管道的各级的硬件。在一些实施方案中,ISP 206可从图像传感器202接收原始图像数据,并且将原始图像数据处理成SOC部件204的其他子部件或设备100的部件可用的形式。ISP 206可执行各种图像处理操作,诸如图像转译操作、水平和垂直缩放、颜色空间转换和/或图像稳定化变换,如下面参考图3详细描述的。
CPU 208可使用任何合适的指令集架构来实现,并且可被配置为执行在该指令集架构中定义的指令。CPU 208可以是使用各种指令集架构(ISA)中的任一者的通用或嵌入式处理器,诸如x86、PowerPC、SPARC、RISC、ARM或MIPS ISA,或任何其他合适的ISA。尽管图2中示出了单个CPU,但是SOC部件204可包括多个CPU。在多处理器***中,每个CPU可共同实现相同的ISA,但不是必需的。
图形处理单元(GPU)220是用于执行图形数据的图形处理电路。例如,GPU 220可渲染要显示到帧缓冲器中的对象(例如,包括整个帧的像素数据的帧缓冲器)。GPU 220可包括一个或多个图形处理器,该图形处理器可执行图形软件以执行部分或全部的图形操作或某些图形操作的硬件加速。
神经处理器电路218是基于包括相乘、相加和累加的计算来执行各种机器学习操作的电路。此类计算可被布置成执行例如输入数据和内核数据的卷积。神经处理器电路218是可配置电路,该可配置电路以快速且高功效的方式执行这些操作,同时缓解了CPU 208与神经网络操作相关联的资源密集型操作。神经处理器电路218可从传感器接口212、图像信号处理器206、***存储器230或其他源诸如网络接口210或GPU 220接收输入数据。神经处理器电路218的输出可被提供给设备100的各种部件,诸如用于各种操作的图像信号处理器206、***存储器230或CPU 208。神经处理器电路218的结构和操作在下文中参考图3详细描述。
网络接口210是支持经由一个或多个网络(例如,载体或代理设备)在设备100和其他设备之间交换数据的子部件。例如,视频或其他图像数据可经由网络接口210从其他设备接收并且被存储在***存储器230中以用于后续处理(例如,经由诸如下文在图3中讨论的到图像信号处理器206的后端接口)和显示。网络可包括但不限于局域网(LAN)(例如,以太网或公司网络)和广域网(WAN)。经由网络接口210接收的图像数据可由ISP 206进行图像处理过程。
传感器接口212是用于与运动传感器234交接的电路。传感器接口212从运动传感器234接收传感器信息并且处理传感器信息以确定设备100的取向或移动。
显示控制器214是用于发送要在显示器216上显示的图像数据的电路。显示控制器214从ISP 206、CPU 208、图形处理器或***存储器230接收图像数据,并将图像数据处理成适用于在显示器216上显示的格式。
存储器控制器222为用于与***存储器230通信的电路。存储器控制器222可从***存储器230读取数据以供ISP 206、CPU 208、GPU 220或SOC部件204的其他子部件处理。存储器控制器222还可将数据写入从SOC部件204的各种子部件接收的***存储器230。
视频编码器224是硬件、软件、固件或它们的组合,用于将视频数据编码成适用于存储在永久存储器128中的格式或者用于将数据传递到网络接口210以通过网络传输到另一设备。
在一些实施方案中,SOC部件204的一个或多个子部件或这些子部件的一些功能可由在ISP 206、CPU 208或GPU 220上执行的软件部件来执行。此类软件部件可存储在***存储器230、永久存储器228或经由网络接口210与设备100通信的另一设备中。
图像数据或视频数据可流过SOC部件204内的各种数据路径。在一个示例中,可从图像传感器202生成并由ISP 206处理原始图像数据,然后经由总线232和存储器控制器222发送到***存储器230。在图像数据存储在***存储器230中之后,它可由视频编码器224访问以进行编码,或者由显示器116访问以通过总线232进行显示。
示例神经处理器电路
神经处理器电路218是至少基于内核数据340对输入数据执行神经网络操作的可配置电路。为此,神经处理器电路218可包括除了别的部件之外的神经任务管理器310、多个神经引擎314A至314N(在下文中统称为“多个神经引擎314”并且还单独地称为“神经引擎314”)、内核直接存储器存取(DMA)324、数据缓冲器318和缓冲器DMA 320。神经处理器电路218可包括图3中未示出的其他部件。
神经引擎314中的每一个神经引擎并行地执行神经网络操作的计算操作。根据操作加载,整个神经引擎314集可***作或者仅神经引擎314子集可***作,同时其余神经引擎314被置于功率节省模式以节省功率。神经引擎314中的每一个神经引擎包括用于存储一个或多个内核、用于执行相乘累加操作以及用于后处理以生成输出数据328的部件,如下文参考图4详细描述。神经网络操作的一个示例是卷积操作。
神经任务管理器310管理神经处理器电路218的总体操作。神经任务管理器310可从由CPU 208执行的编译器接收任务列表,将任务存储在其任务队列中,选择待执行的任务,并且向神经处理器电路218的其他部件发送指令以用于执行所选择的任务。神经任务管理器310还可以在检测到事件诸如从CPU 208接收指令时执行任务的切换。在一个或多个实施方案中,神经任务管理器310将光栅器信息发送到神经处理器电路218的部件以使这些部件中的每一个部件能够跟踪、取回或处理输入数据和内核数据的适当部分,如下文参考图5至图7详细描述。尽管在图3中神经任务管理器310被示出为神经处理器电路218的一部分,但是神经任务管理器310可以是神经处理器电路218外部的部件。
内核DMA 324是从源(例如,***存储器230)获取内核数据并将内核数据326A至326N发送到神经引擎314中的每一个神经引擎的读取电路。内核数据表示可从中提取内核元素的信息。在一个实施方案中,内核数据可以是在神经引擎314中的每一个神经引擎处解压缩的压缩格式。尽管在一些情况下提供给神经引擎314中的每一个神经引擎的内核数据可相同,但是在大多数情况下提供给神经引擎314中的每一个神经引擎的内核数据是不同的。
数据缓冲器318是用于存储与神经网络操作相关联的数据的临时存储装置。在一个实施方案中,数据缓冲器318体现为可由全部神经引擎314访问的存储器。数据缓冲器318可存储用于馈送到对应神经引擎314A至314N的输入数据322A至322N,以及用于反馈到神经引擎314中或发送到目标电路(例如,***存储器230)的来自神经引擎314A至314N中的每一者的输出。数据缓冲器318与神经处理器电路218的其他部件的操作被协调使得存储在数据缓冲器318中的输入数据和中间数据跨神经引擎314处的多个操作被重复使用,从而减少往返于***存储器230的数据传输。数据缓冲器318可以广播模式或单播模式操作,在广播模式中将所有输入通道的输入数据馈送到所有神经引擎314,在单播模式中将输入通道的子集的输入数据馈送到每个神经引擎314。
除了别的之外,存储在数据缓冲器318中的输入数据322可以是图像数据、取向梯度(HOG)数据的柱状图、音频数据、元数据、神经引擎314的前一周期的输出数据328以及从SOC部件204的其他部件接收的其他经处理的数据的一部分。
缓冲器DMA 320包括从用于存储在数据缓冲器318中的源(例如,***存储器230)接收输入数据的一部分(例如,图块)的读取电路以及将数据从数据缓冲器318转发到目标(例如,***存储器)的写入电路。
示例神经引擎架构
图4是根据一个实施方案的神经引擎314的框图。神经引擎314执行各种操作以促进神经网络操作,诸如卷积、空间池化和局部响应归一化。神经引擎314接收输入数据322,基于所存储的内核数据对输入数据322执行相乘累加操作(例如,卷积操作),对相乘累加操作的结果执行进一步后处理操作,并且生成输出数据328。神经引擎314的输入数据322和/或输出数据328可以是单个通道或多个通道。
神经引擎314可包括除了别的部件之外的输入缓冲电路402、计算核416、神经引擎(NE)控制418、内核提取电路432、累加器414和输出电路424。神经引擎314可包括图4中未示出的另外的部件。
输入缓冲电路402是在从数据缓冲器318接收到输入数据322时存储该输入数据的一部分并且将用于当前任务或处理回路的输入数据的适当部分408发送到计算核416以进行处理的电路。输入缓冲电路402包括移位器410,该移位器对输入缓冲电路402的读取位置进行移位以改变发送到计算核416的输入数据的部分408。通过经由移位改变提供给计算核416的输入数据的部分,神经引擎314可基于较少数量的读取操作针对输入数据的不同部分执行相乘累加。在一个或多个实施方案中,输入数据322包括差异卷积组和/或输入通道的数据。
内核提取电路432是从内核DMA 324接收内核数据326并提取内核系数422的电路。在一个实施方案中,内核提取电路432参考查找表(LUT)并使用掩模来从压缩内核数据326重建内核。该掩模指示重建内核中待用零填补的位置以及待用数字填充的剩余位置。将重建内核的内核系数422发送到计算核416以填充计算核416的乘加(MAD)电路中的寄存器。在其他实施方案中,内核提取电路432接收未压缩格式的内核数据,并且在不参考LUT或使用掩模的情况下确定内核系数。
计算核416是执行计算操作的可编程电路。为此,计算核416可包括MAD电路MAD0至MADN以及后处理器428。MAD电路MAD0至MADN中的每一者可将输入值存储在输入数据的部分408中并且将对应内核系数存储在内核系数422中。在MAD电路中的每一个MAD电路中将输入值和对应内核系数相乘以生成经处理的值412。
累加器414是从MAD电路接收和存储经处理的值412的存储器电路。存储在累加器414中的经处理的值可作为反馈信息419被发送回以在MAD电路处进行进一步相乘和相加操作,或者被发送到后处理器428以进行后处理。累加器414与MAD电路组合形成了相乘累加器(MAC)404。在一个或多个实施方案中,累加器414可具有子单元,其中每个子单元将数据发送到神经引擎314的不同部件。例如,在处理周期期间,存储在累加器414的第一子单元中的数据被发送到MAC电路,同时存储在累加器414的第二子单元中的数据被发送到后处理器428。
后处理器428是对从累加器414接收的值412执行进一步处理的电路。后处理器428可执行操作,包括但不限于应用非线性函数(例如,整流线性单元(ReLU))、归一化互相关性(NCC)、将对8位数据执行神经操作的结果合并成16位数据以及局部响应归一化(LRN)。此类操作的结果作为经处理的值417从后处理器428输出到输出电路424。
NE控件418基于神经处理器电路218的操作模式和参数来控制神经引擎314的其他部件的操作。根据不同的操作模式(例如,组卷积模式或非组卷积模式)或参数(例如,输入通道的数量和输出通道的数量),神经引擎314可以不同的顺序对不同的输入数据进行操作,将不同的值从累加器414返回到MAC电路,并且在后处理器428处执行不同类型的后处理操作。为了将神经引擎314的部件配置为以期望的方式操作,NE控件418将控制信号发送到神经引擎的部件。NE控件418还可包括光栅器430,该光栅器跟踪在神经引擎314处处理的当前任务或处理回路,如下文参考图5至图7详细描述。
输出电路424从后处理器428接收经处理的值417,并且与数据缓冲器318进行交互以将经处理的值417存储在数据缓冲器318中。为此,输出电路424可以与在后处理器428中处理经处理的值417的顺序或格式不同的顺序或格式作为输出数据328发出。
神经引擎314中的部件可在配置周期期间由NE控件418和神经任务管理器310配置。为此,神经任务管理器310在配置周期期间将配置信息发送到神经引擎314。可配置参数和模式可包括但不限于输入数据元素和内核元素之间的映射、输入通道的数量、输出通道的数量、输出步幅的执行以及在后处理器428处启用/选择后处理操作。
对数据进行分段以用于在神经处理器电路处处理的操作
输入数据通常被分成更小的数据片,用于在多个神经引擎314处进行并行处理。通常执行多个操作循环以生成与神经网络相关联的任务的输出。由CPU 208执行的编译器分析神经网络的分级结构和节点,并且基于神经处理器电路218的硬件约束来确定如何对输入数据进行分段。编译器的功能之一是确定如何将输入数据分成用于在神经引擎314处处理的较小数据单元,以及如何在回路中迭代处理以产生用于任务的结果。
图5是示出根据一个实施方案的用于在神经处理器电路218处处理输入数据的回路的概念图。如果使用涉及多个卷积组的组卷积,则最外回路表示对卷积组的处理。组卷积是其中每个组中输入通道的输入数据仅用于生成每个组的输出通道的输出数据但不用于生成其他组的输出通道的输出数据的卷积。因此,组卷积的每个组可被视为单独的卷积操作。
每个卷积组的回路中是用于输入数据切片的处理回路。用于卷积操作的整个输入数据以重叠方式被分段成多条切片,如图6所示。重叠部分602、604、606是输入数据的在两个相邻切片中被过获取以为对应内核提供空间支持的部分。第二最外回路针对输入数据中的每个切片执行卷积操作。切片的回路内是用于切片的图块的处理回路。每个切片被分段成多个图块,如图6所示。重叠部分608、610、612、614是切片4中的输入数据的在两个相邻图块中被过获取以为对应内核提供空间支持的部分。最右边的图块通常将具有小于切片的其他图块的宽度。在一个实施方案中,每个图块的输入数据在读取周期中被加载到数据缓冲器318上,并且被重复用于图块的处理回路中的操作。在图块的处理回路中是用于工作单元的处理回路。每个图块被分段成多个工作单元,如图6所示。工作单元是具有在计算核416的单个周期期间产生拟合到神经引擎314的累加器414中的输出值的尺寸的输入数据的一部分。尽管每个工作单元的形状在图6中被示出为水平条,但是工作单元的形状可根据图块的形状和尺寸而不同。工作单元还具有表示过获取数据以为对应内核提供支持的重叠部分。尤其是,如果图块为高的,则用于切片的最后图块的工作单元可具有竖直条的形状。在一个或多个实施方案中,每个工作单元的尺寸是256字节。在此类实施方案中,例如,工作单元被成形为16×16、32×8、64×4、128×2或256×1维度中的一者。
对于每个工作单元,可为输出通道组(OCG)提供内部处理回路。由计算核416的单个周期为给定工作单元产生的输出通道的数量被称为OCG。根据操作模式,每个神经引擎314可处理用于输入数据单次加载到其输入缓冲电路402中的不同数量的输出通道(例如,8个通道、32个通道)的输出数据。
对于每个输出通道组,可为输入通道(Cin)提供内部处理回路。如果实施输入步幅以跳过某些输入数据,则可在用于输入通道(Cin)的处理回路内提供用于子输入通道(Sub-Cin)的回路。
对于每个输入通道或每个子输入通道,提供内部回路以用于处理内核的水平空间支持以及每个水平空间支持内的竖直支持。空间支持是指用于与内核卷积的输入数据,并且包括用于在输入数据的边缘处执行卷积的过获取输入数据。
过获取是指在当前切片、图块或工作单元中获取附加输入数据,使得可提供适当维度的输入数据以用于与内核卷积。在一个或多个实施方案中,在切片之间垂直地执行过获取以获得输入数据的附加行(在图6中示出为重叠部分602、604、606),在图块之间水平地执行过获取以获得输入数据的附加列(在图6中示出为重叠部分608、610、612、614),并且在图块内的工作单元之间垂直地执行过获取以获得输入数据的附加行。
对于用于内核的每个空间支持,提供了输出通道(OC)的内部处理回路以生成用于每个输出通道(Cout)的输出数据。在输出步幅实现空间上采样的情况下,提供用于处理每个子输出通道的附加内回路。在输出通道(OC)或子输出通道(如果实现输出步幅)的回路内执行内核系数和MAC操作的加载,以生成用于输出通道(OC)或子输出通道的输出数据。
图5的嵌套回路结构仅仅是例示性的。根据各种因素,可不同地省略、添加或结构化回路。例如,如果仅使用单个卷积组,则可移除最外回路。此外,可颠倒用于水平空间支持和竖直空间支持的回路结构。
在一个或多个实施方案中,如上参考图5和图6所述,与将输入空间划分为更小单元并处理这些更小单元相关联的操作由神经处理器电路218的各种部件中的光栅器714、718、720、722执行。光栅器是神经处理器电路218的各种部件中的电路,该电路保持跟踪输入/输出数据的区段(例如,组、工作单元、输入通道、输出通道)并且指示神经处理器电路的部件用于正确处理输入数据的区段。例如,缓冲器DMA 320中的光栅器720跟踪从***存储器230接收的图块和切片,同时数据缓冲器318中的光栅器718按顺序广播工作单元以供神经引擎314处理。内核DMA 322中的光栅器722确定要接收哪些内核并将其分配给神经引擎314,同时神经引擎314中的光栅器714操作输入缓冲电路402中的移位器410以将输入数据的正确部分408转发到MAC 404,并且将完成的输出数据328发送到数据缓冲器318。
图7是示出根据一个实施方案的神经处理器电路218的部件314、318、320、322中的光栅器714、718、720、722的编程的图。为了执行它们的功能,光栅器714、718、720、722中的每一者接收指示输入数据和/或内核数据如何被分段并由神经处理器电路218的每个部件处理的任务信息710(例如,配置数据)。该任务信息包括关于当前层的细节的信息(例如,输入和输出数据的维度、相关联内核的维度、输入数据边界处的填补类型)。光栅器714、718、720和722还可接收对其操作的约束(例如,是否允许或不允许图块宽度超过阈值)。
通过在神经处理器电路218的不同部件中提供光栅器,可减少在神经处理器电路218的部件之间传输的数据的开销。如果提供单个中央光栅器来控制神经处理器电路218的不同部件,则在这些数据中可能需要在这些部件之间传输的内核数据、输入数据和输出数据来识别任务回路中的相关联的位置,诸如卷积组、图块、切片、工作单元、输入通道和输出通道。通过使用分布式光栅器,不需要单独的元数据来在神经处理器电路218的部件之间传输内核数据、输入数据和输出数据。
在神经引擎架构处的示例过程
图8是示出根据一个实施方案的在神经处理器电路218中处理输入数据的方法的流程图。该方法可包括不同的和/或附加的步骤,或者这些步骤可具有不同的次序。
在神经任务管理器310对光栅器714、718、720、722进行编程之后,操作缓冲器DMA320的过程通过光栅器720指示804缓冲器DMA 320使缓冲器DMA 320从***存储器230接收输入数据的图块来发起。由缓冲器DMA 320所接收的图块被存储806在数据缓冲器318中。
然后,数据缓冲器318中的光栅器718指示808数据缓冲器318将工作单元发送到一个或多个神经引擎314。然后将该工作单元存储在一个或多个神经引擎314的输入缓冲电路402中。
在一个或多个实施方案中,输入缓冲电路402选择816待发送到MAC 404的工作单元的一部分以执行相乘累加操作。然后MAC 404使用对应内核对工作单元的所选择的部分执行820相乘累加操作。然后确定824整个工作单元是否在一个或多个神经引擎314处被处理。如果不是,则该工作单元的所选择的部分被移位器410移位828,并且返回执行820另一轮的相乘累加操作。
如果确定824整个工作单元被处理,则继续确定832该图块中的所有工作单元是否被处理。如果不是,则该过程通过使数据缓冲器318将下一个工作单元发送808到一个或多个神经引擎314而前进836至下一个工作单元,并且重复后续过程。
如果确定832该图块中的所有工作单元由神经引擎314处理,则该过程继续确定840用于输入数据的所有图块是否被处理。如果不是,则该过程通过使光栅器720指示804缓冲器DMA 320从***存储器230接收下一个图块并重复后续过程来前进844至下一个图块。
如果确定840输入数据的所有图块被处理,则该过程对于当前输入数据结束。然后,可重复该过程以处理下一个输入数据或前进至下一个任务。
上文参考图8所述的过程的实施方案仅仅是例示性的。可实施另外的回路,如上文参考图5所述。此外,可修改或省略该过程的顺序。
神经网络可包括被实例化或实现为由神经处理器电路218执行的一系列任务的网络层或子层。图9是示出根据一个实施方案的由任务列表904表示的神经网络900的示意性框图。神经网络900包括网络层(或子层),该网络层(或子层)包括卷积层C1、C2、C3(包括子层C300、C310、C311、C320和C321)、C5和C6以及池化层P2和P4。神经网络900是可由神经处理器电路218实例化的神经网络架构的示例。即,当神经网络900被转换成任务列表904以变得能够由神经处理器电路218执行时。也可由神经处理器电路218实例化具有不同类型的网络层或网络层次序的其他类型的神经网络架构。
神经网络900诸如由CPU 208转换为任务列表904。任务列表904包括限定一系列任务的线性链接列表,该系列任务包括任务C1、任务C2+P2、任务C300+P4、任务C310、任务C311+P4、任务C320、任务C321+P4、任务C5a、任务C5b和任务C6。每个任务与任务描述符相关联,该任务描述符限定神经处理器电路218的配置以执行任务。每个任务可对应于神经网络900的单个网络层、神经网络900的网络层的一部分或神经网络900的多个网络层。例如,任务C1对应于单个网络层C1,任务C2+P2对应于多个网络层C2和P2,并且任务C5a和C5b各自对应于网络层C5的一部分。神经处理器电路218通过在神经任务管理器310的控制下执行任务列表904的任务来实例化神经网络900。
图10是示出根据一个实施方案的神经任务管理器310的框图。神经任务管理器310对由神经处理器电路218执行用于一个或多个神经网络900的任务进行管理。除了其他部件之外,神经任务管理器310可包括任务仲裁器1002、任务队列1004A至1004N(在下文中统称为“多个任务队列1004”并且还单独地称为“任务队列1004”)、任务管理器直接存储器存取(DMA)1006、获取队列1008和配置队列1010。神经任务管理器310可包括图10中未示出的其他部件。
任务仲裁器1002是从任务队列1004中选择任务以供神经处理器电路218执行的电路或电路和固件的组合。任务仲裁器1002将任务从任务队列1004出队,并且将任务置于配置队列1010中。在任务在配置队列中时,其被提交执行,并且神经处理器电路在任务由神经处理器电路218的其他部件执行之前对输入数据和内核数据执行预取。例如,任务仲裁器1002可以在多个任务队列1004之间执行固定优先级仲裁,并且从具有最高优先级的任务队列1004中选择任务以用于由任务管理器DMA 1006从***存储器230取回任务描述符1012。
神经任务管理器310可包括一个或多个任务队列1004。每个任务队列1004耦接到CPU 208和任务仲裁器1002。每个任务队列1004从CPU 208接收对任务的任务列表904的标引,这些任务当被神经处理器电路218执行时实例化神经网络900。存储在每个任务队列1004中的标引可包括指向***存储器230中的任务描述符1012的任务列表904的一组指针和计数器。每个任务队列1004还可与限定任务队列1004的相对优先级的优先级参数相关联。任务的任务描述符1012指定用于执行任务的神经处理器电路218的配置。
任务管理器DMA 1006耦接到任务仲裁器1002、***存储器230和获取队列1008。任务管理器DMA 1006包括从源(例如,***存储器230)接收任务的任务描述符1012以存储在获取队列1008中的读取电路。例如,任务仲裁器1002根据任务队列1004的优先级选择任务队列1004,并且使用由所选择的任务队列1004标引的任务列表904来控制任务管理器DMA1006以选择任务的任务描述符1012。
获取队列1008是存储未决提交用于执行的任务的任务描述符1012的单个入口队列。获取队列1008耦接到任务管理器DMA 1006以从***存储器230接收任务描述符1012,并将任务描述符1012提供给配置队列1010,或将从任务描述符1012提取的配置数据1014提供给配置队列1010。
配置队列1010保持已提交用于执行的多个任务的配置数据1014。当任务在配置队列1010中时,内核DMA 324可从***存储器230获取内核数据以存储在神经引擎314的内核提取电路432中,并且缓冲器DMA 320可从***存储器230获取输入数据以存储在数据缓冲器318中。为了执行任务,内核提取电路432将预取的内核数据提供给神经引擎314的MAC404,并且数据缓冲器318将预取的输入数据提供给神经引擎314的MAC 404。在一些实施方案中,配置队列1010可包括保持从所提交的任务描述符1012提取的配置数据1014的多个队列。如结合图13更详细地讨论,配置队列1010进一步耦接到神经处理器电路218的其他部件,以根据配置数据1014来配置神经处理器电路218。
图11是示出根据一个实施方案的使用任务队列1004取回任务描述符1012的图。任务队列1004包括对存储在***存储器230中的任务描述符1012A至1012N的标引,诸如一组指针。为此,任务队列1004可包括存储头部参数1102、网络标识符(ID)1104、基址索引1106、尾部参数1108、计数参数1110和优先级参数1112的存储器。头部参数1102是指向在任务队列1004的头部存储任务描述符1012A的***存储器230的位置的指针。网络ID 1104识别任务队列1004的头部处的任务描述符1012的神经网络900,并且基址索引1106是在任务队列1004的头部处标记有任务描述符1012A的网络ID 1104的基址表1114的索引。计数参数1110限定任务队列1004中的任务描述符1012的数量。优先级参数1112限定任务队列1004的优先级,任务仲裁器1002使用该任务队列的优先级在多个任务队列1004之间进行选择。
当选择特定任务队列1004时(例如,根据优先级参数1112),任务仲裁器1002标引头部参数1102、网络ID 1104、基址索引1106以及基址表1114以用于从***存储器230取回任务描述符1012,并且将任务描述符1012放置到获取队列1008中以发起用于执行任务的承诺。在每个配置周期中,任务仲裁器1002可根据由任务队列1004的任务列表904限定的任务的次序(诸如通过取回下一个任务描述符1012B等)继续将任务描述符1012放置到获取队列1008中。
图12是示出根据一个实施方案的任务描述符1012的图。任务仲裁器1002将任务描述符1012从***存储器230放置在获取队列1008中,然后将其传输到配置队列1010。配置队列1010中的最高优先级(例如,先进)任务描述符1012用于配置神经处理器电路218以用于在配置周期期间执行。任务描述符1012包括配置数据1014,该配置数据包括任务描述符标头1202和地址数据1204A至1204N(在下文中称为“地址数据1204”)。任务描述符标头1202包括配置神经任务管理器310的各种操作(包括与任务选择和任务切换相关的操作)的配置数据1014。例如,任务描述符标头1202可由任务仲裁器1002解析以提取对神经任务管理器310和神经处理电路218的其他部件进行编程的配置数据1014。任务描述符标头1202可包括识别任务的任务标识符(ID)1206、识别由任务实例化的神经网络900的神经网络标识符(ID)1208、限定神经任务管理器310是否应该在执行任务之后发起任务切换(例如,执行不同任务队列1004的任务)的任务开关参数1210、限定是否应该从***存储器230或数据缓冲器318取回用于任务的输入数据的输入表面参数1212、限定任务的输出数据是否应该存储在***存储器230或数据缓冲器318中的输出表面参数1214、促进神经处理器电路218的编程的各种(例如,基址)指针1216以及控制事件、异常或调试记录的一个或多个调试/异常参数1218。
地址数据1204A至1204N的每个实例(统称或单独地称为“地址数据1204”)限定用于对神经处理器电路218的部件进行编程的地址和数据有效载荷对。数据有效载荷可包括用于执行任务的输入数据和内核数据。例如,地址数据1204的每个实例包括限定数据有效载荷的寄存器数据、限定用于接收寄存器数据的神经处理电路218的目的地存储器位置的寄存器地址、以及限定待用寄存器数据写入的连续存储器位置(例如,寄存器)的数量的寄存器计数。在一些实施方案中,寄存器地址与存储在标头1202中的基址组合以限定每个存储器位置的完整地址。如果在编译时间处生成任务描述符1116,则实际运行时间地址可能是未知的。使用基址表1114避免了复制或更新具有动态分配地址的所有任务描述符。
图13是示出根据一个实施方案的获取队列1008和配置队列1010的框图。配置队列1010耦接到获取队列1008,该获取队列经由任务管理器DMA 1006耦接到***存储器230。配置队列1010还耦接到一个或多个神经引擎314的光栅器714、数据缓冲器318的光栅器718、缓冲器DMA 320的光栅器720和内核DMA 322的光栅器722。获取队列1008存储用于未决且不提交执行的任务的任务描述符1012(例如,包括任务描述符标头1202和地址数据1204A至1204N)。获取队列1008减少了将下一个任务描述符1012从***存储器230读取到配置队列1010中的延迟。获取队列1008存储由任务仲裁器1002确定的最高优先级任务描述符1012。如果较高优先级的任务描述符1012已经入队(例如,从较高优先级的任务队列1004入队),则任务仲裁器1002可以替换存储在获取队列1008中的任务描述符1012。获取队列1008中的任务描述符1012不发起输入数据或内核预取,并且不影响任务队列优先级、指针或计数器。这样,通过将较高优先级的任务描述符1012写入获取队列1008中,可以容易地由较高优先级的任务描述符1012替换获取队列1008中的任务描述符1012。当存储在配置队列1010中的任务描述符1012由神经处理器电路218执行时,存储在获取队列1008中的任务描述符1012被传输到配置队列1010,并且后续任务的另一个任务描述符1012可以存储在获取队列1008中。
配置队列1010存储提交用于由神经处理器电路218执行的任务的任务描述符1012。在一些实施方案中,配置队列1010包括多个单独的队列1310,每个队列存储从任务描述符1012提取的配置数据1014(包括配置数据1014A至1014E)的一部分。此外,队列1310各自耦接到神经处理器电路218的相应部件,以用于用配置数据1014对部件进行编程。通过配置队列1010的操作,神经任务管理器310对光栅器714、718、720、722进行编程以执行上文在图7和图8中讨论的功能。例如,队列1310A耦接到神经引擎314的光栅器714以提供配置数据1014A,该配置数据控制输入缓冲电路402中的移位器410的操作以将输入数据的正确部分408转发到MAC 404,并且将完成的输出数据328发送到数据缓冲器318。队列1310B耦接到数据缓冲器318的光栅器718以提供配置数据1014B,该配置数据控制数据缓冲器318广播输入数据(例如,工作单元)以供神经引擎314处理。队列1310C是耦接到缓冲器DMA 320的光栅器720以提供配置数据1014C的读取队列,该配置数据控制缓冲器DMA 320以从***存储器230取回输入数据(例如,图块)并将输入数据存储在数据缓冲器318中。队列1310D是耦接到缓冲器DMA 320的光栅器720以提供配置数据1014D的写入队列,该配置数据控制缓冲器DMA320以将输出数据存储在***存储器230中。队列1310E耦接到内核DMA 322的光栅器722以提供配置数据1014E,该配置数据控制要接收哪些内核并将其分配给神经引擎314。在一些实施方案中,存储在配置队列1010中的任务描述符1012或配置数据1014不能被替换并且将以先进先出(FIFO)次序执行。
神经任务管理器架构处的示例过程
图14是示出根据一个实施方案的在神经处理器电路218中对任务进行管理的方法的流程图。该方法可包括不同的和/或附加的步骤,或者这些步骤可具有不同的次序。
CPU 208生成1402任务的任务描述符1012的任务列表904,这些任务当被神经处理器电路218执行时实例化神经网络900。例如,CPU 208可以从图像传感器202、***存储器230、永久存储装置228、网络接口210或一些其他部件接收用于机器学习操作的输入数据。机器学习操作可包括推断操作或训练操作。神经网络900可包括内核数据和包括网络层的神经网络架构。将输入数据应用于神经网络900以执行机器学习操作。可在机器学习训练过程中计算神经网络900的内核数据和网络层。CPU 208执行编译操作(离线或运行中)以将神经网络描述900转变成在本文中被称为任务列表904的任务描述符1012的链接列表。每个任务由任务描述符1012限定,并且当被神经处理器电路218执行时,每个任务实例化单个网络层、多个网络层或网络层的一部分。任务的每个任务描述符1012包括配置数据1014,诸如任务描述符标头1202和限定神经处理器电路218地址和数据有效载荷对的地址数据1204。数据有效载荷可包括神经网络900的内核数据与输入数据。配置数据1014还包括配置光栅器714、718、720和722的操作以执行任务的指令。
CPU 208将任务描述符1012的任务列表904存储1404在***存储器230中。在一些实施方案中,CPU 208或电子设备100外部的另一个CPU生成任务描述符1012并将任务描述符1012存储在永久存储装置228或一些其他非易失性存储器中。任务描述符1012连同内核数据和输入数据一起被加载到***存储器230中以供神经处理器电路218使用。CPU 208可经由总线232和存储器控制器222耦接到***存储器230。
任务列表904可包括标引***存储器230中的任务描述符1012的位置的指针集。此外,CPU 208可更新任务描述符1102的参数,诸如存储地址或网络ID。例如,任务列表904可包括分别限定***存储器230的开始寄存器地址和结束寄存器地址的头部参数1102和尾部参数1108,在该***存储器中存储了多个任务描述符1012。在一些实施方案中,对任务列表904中的注册地址的标引可以是部分地址,并且基址表1114用于限定对***存储器230的完整标引地址。在一些实施方案中,CPU 208可根据需要修补绝对地址。CPU 208可通过设置其基址寄存器来进一步配置神经处理器电路218。
神经任务管理器310的任务仲裁器1002将任务列表904入队1406以供神经处理器电路218执行。例如,神经任务管理器310包括多个任务队列1004A至1004N。任务队列1004可各自存储对任务列表904的标引。此外,根据任务队列1004所标引的任务列表904的优先级参数1112,任务队列1004被优先化以用于执行。
在一些实施方案中,CPU 208执行神经处理器电路218的一般配置以执行任务。如果神经处理器电路218尚未运行,则CPU 208可进一步启动神经处理器电路218。
任务仲裁器1002选择1408具有最高优先级的任务队列以用于执行。例如,在每个编程时间段中任务仲裁器1002基于任务队列1004的优先级参数或任务队列1004的任务列表904的比较来选择任务队列1004,并且从最高优先级任务队列1004执行来自任务列表904的任务。
神经处理器电路218执行1410来自所选择的任务队列的任务。例如,神经处理器电路218执行图8的方法以执行任务。神经任务管理器310的配置队列1010可将配置数据1014(或任务信息710)提供给神经处理器电路218的光栅器714、718、720、722,以对神经处理器电路218进行编程来执行任务,如图7所示。此外,该任务的执行可包括在任务处于配置队列1010中时处理预取的内核数据和输入数据。每个任务的执行可包括用于处理输入数据的多个处理回路,如图5和图6所示。任务仲裁器1002可在执行任务之后使任务从配置队列1010出队。
在一些实施方案中,为了执行任务,任务仲裁器1002控制任务管理器DMA 1006以取回任务列表904的任务的任务描述符1012并将任务描述符1012存储在获取队列1008中。在执行先前提交的任务之后,任务仲裁器1002可通过从配置队列1010移除任务描述符或任务的配置数据来使已执行任务出队。然后将当前任务的任务描述符1012或所提取的配置数据1014放置在来自获取队列1008的配置队列1010中。当该任务在配置队列1010中时,神经处理器电路218可发起内核DMA 324对内核数据从***存储器230到内核提取电路432的预取操作,以及缓冲器DMA 320对输入数据从***存储器230到数据缓冲器318的预取操作。
如果不同的任务队列具有较高的优先级,则在可能的情况下可以执行到具有较高优先级的任务队列的任务切换。为了执行任务切换(例如,到另一个机器学习操作),任务仲裁器1002用不同的任务队列1004中标引的另一个任务描述符替换获取队列1008中的任务。任务仲裁器1002可在任务切换完成之后通过将替换的任务存储到获取队列1008中来恢复由任务列表904限定的中断的机器学习操作。
在一些实施方案中,CPU 208确定1408任务列表904的优先级参数1110以选择任务队列。优先级参数1110限定机器学习操作的任务相对于由神经处理器电路218执行的其他机器学习操作的其他任务的优先级。CPU 208可促进多个机器学习操作的执行。机器学习操作可以是不同的,诸如通过使用不同的输入数据或不同的神经网络架构和内核数据。CPU208可以编程方式或基于用户输入来确定任务列表904的优先级参数。可以选择由具有最高优先级的任务队列1004标引的任务描述符1012以用于执行。任务队列的优先级由CPU 208确定,或者由来自先前执行的任务描述符的信息动态确定。
任务仲裁器1002确定1412任务列表904的所有任务是否已被执行。如果任务列表904的任务尚未执行,则该过程返回到步骤1410,其中任务仲裁器1002执行任务列表904的未执行任务。
如果任务列表904中的每个任务已被执行,则任务仲裁器1002从任务队列1004移除1414任务列表904。又如,在执行任务之后,可以从任务队列1004中移除对任务的任务描述符1012的标引。该过程可结束。又如,该过程可以返回到1402,其中CPU 208可继续生成用于其他机器学习操作的任务的任务描述符。在这种意义上,可重复该过程以根据指定的任务优先级将任务放置到任务队列中以用于由神经处理器电路218执行机器学习操作。
可扩展神经引擎
电子设备100和神经处理器电路218的各种部件可以是可扩展的,以便于对机器学习操作的并行处理。任务的配置数据可限定硬件部件的选择性使用。
神经处理器电路218的神经引擎314可针对特定任务被选择性地激活或解激活。参考图3,例如,神经处理器电路218包括神经引擎314A至314N。在一些示例中,神经处理器电路218可包括两个、八个或十六个神经引擎314。神经引擎314中的每个神经引擎耦接到数据缓冲器318。在一些实施方案中,数据缓冲器318在处理周期中将相同的输入数据广播到每个激活的神经引擎314。在处理周期中,神经引擎中的每个神经引擎将不同或相同的内核系数应用于输入数据以生成不同的输出值。例如,处理周期中来自不同神经引擎314的输出数据可包括与不同通道相关联的输出数据。神经处理器电路218的一个或多个神经引擎314可针对处理周期被解激活。解激活可导致神经引擎314被关断或置于功率节省模式(例如,使用比被激活时更少的功率)。
在一些实施方案中,数据缓冲器318在处理周期中存储输入数据的图块,并且将图块的工作单元或图块的工作单元的一部分提供给神经引擎314。神经引擎314可应用不同的内核系数,使得可由多个神经引擎314并行处理对图块的工作单元的不同操作。因此,可通过在神经处理器电路218中使用附加神经引擎314来减少神经处理器电路218用于处理输入数据的处理周期的数量。在另一个示例中,如果神经引擎314不用于处理降低功率消耗的任务,则该神经引擎可被解激活。
可扩展神经处理器电路
电子设备可包括不同数量的神经处理器电路218,其中每个神经处理器电路218针对特定任务被选择性地激活或解激活。图15是示出根据一个实施方案的电子设备1500中的多个神经处理器电路218的框图。电子设备1500包括总线232、CPU 208、***存储器230,并且还可包括如上结合图2讨论的电子设备100的其他部件。电子设备1500还包括耦接到***存储器230的神经互连电路1502以及神经处理器电路218A至218N。
神经互连电路1502包括神经互连缓冲器直接存储器存取(DMA)1504和神经互连数据缓冲器1506。神经互连缓冲器DMA 1504从***存储器230取回任务的配置数据并将配置数据存储在神经互连数据缓冲器1506中。神经互连数据缓冲器1506耦接到神经处理器电路218A至218N中的每个神经处理器电路的缓冲器DMA 320和数据缓冲器318。神经互连数据缓冲器1506将配置数据分配到神经处理器电路218A至218N,诸如被选择性地激活以用于处理任务的神经处理器电路218A至218N中的一个或多个神经处理器电路。
在一些实施方案中,神经互连数据缓冲器1506存储输入数据的切片或工作组,并且将切片的不同图块提供到神经处理器电路218A至218N中的一个或多个神经处理器电路。不同神经处理器电路218的数据缓冲器318可存储不同图块。神经处理器电路218的每个数据缓冲器318可在处理周期中向神经处理器电路218的神经引擎314中的每个神经引擎提供存储在数据缓冲器318中的图块的工作单元或工作单元的一部分。神经处理器电路314可使用不同的输入数据或不同的内核系数,使得可由多个神经处理器电路218并行处理对不同图块的不同操作。在一些实施方案中,多个神经处理器电路218可用于并行处理神经网络的不同任务。在一些实施方案中,不同的神经处理器电路218可并行处理用于不同神经网络的任务。
可通过使用附加神经处理器电路218来减少电子设备1500用于处理输入数据的处理周期的数量。如果电子设备的并非所有神经处理器电路218都致力于任务处理,则一个或多个神经处理器电路218可在一个或多个其他神经处理器电路218处理输入数据时以功率节省模式操作或被关断。
在一些实施方案中,多个神经处理器电路218可各自耦接到***存储器230。例如,每个神经处理器电路218的数据缓冲器318可直接从***存储器230取回配置数据、输入数据和内核数据。此处,神经互连电路1502可从电子设备中省略。
在一些实施方案中,屏障可用于支持多个神经处理器电路218以避免数据冒险。当神经处理器电路218尝试消耗输入数据或内核系数而该输入数据或内核系数尚未到达神经互连数据缓冲器1506或***存储器230时,发生数据冒险。数据冒险的示例可包括:(1)从***存储器230到神经互连数据缓冲器1506的内核预取,之后由神经处理器电路218消耗内核系数,(2)从***存储器230到神经互连数据缓冲器1506的输入数据负载,之后由神经处理器电路218消耗输入数据,(3)神经处理器电路218产生输出数据,之后由不同神经处理器电路消耗输出数据作为输入数据,(4)神经处理器电路218产生输出数据,之后由相同神经处理器电路218消耗输出数据作为内核系数,或者(5)神经引擎314产生数据输出数据,之后由神经处理器电路218消耗输出数据。
在一些实施方案中,针对内核数据或内核系数执行从***存储器230到神经互连数据缓冲器1506中的预取。神经互连缓冲器DMA 1504需要在神经处理器电路218消耗给定内核的系数之前完成对该给定内核的系数的传输。在神经处理器电路218比神经互连缓冲器DMA 1504进行数据传输更快的情况下,为了避免数据冒险,CPU 220可在神经任务管理器310内部预先配置断点寄存器,该断点寄存器在已达到所提供的任务ID之后立即停止神经处理器电路218的执行。断点寄存器包含该任务ID位字段和使能位。当神经互连缓冲器DMA1504完成可配置量的内核系数时,该神经互连缓冲器DMA向CPU 220发送中断,该CPU然后将断点寄存器更新为最近传输的内核系数的任务ID。如果神经互连缓冲器DMA 1504进行的数据传输在从神经处理器电路218读取的内核之前,则一切正常并且神经处理器电路218保持运行。在神经处理器电路218比神经互连缓冲器DMA 1504进行数据传输更快的情况下,神经处理器电路218将达到断点并停止,直到神经互连缓冲器DMA 1504已完成并且CPU 220重新激活神经处理器电路218的神经引擎314。
在(4)神经处理器电路218产生输出数据,之后由相同神经处理器电路218消耗输出数据作为内核系数的情况下,编译器在消耗任务的任务描述符中提供依赖任务ID。神经处理器电路218然后通过确保在具有依赖任务ID的任务完成执行(包括所有DMA写入)之前将不执行当前任务来避免硬件中的冒险。
在一些实施方案中,神经处理器电路218或电子设备100的其他部件(例如,CPU220、ISP 206等)可包括存储器扩展和旋转(MSR)电路。MSR电路相对于输入图像裁剪可变大小的输入片,并且在输入图像作为神经处理器电路218的输入数据之前将输入图像扩展到不同分辨率。例如,神经处理器电路218可通过提供不同大小的潜在对象的边界框来实例化执行对象检测的神经网络。MSR电路然后裁剪这些对象并将其扩展到相同的大小,使得执行对象分类的另一个消耗神经网络可对这些对象进行分类。
在一些实施方案中,神经处理器电路218可位于CPU 208、GPU 220、图像信号处理器206或电子设备100的其他部件中。另一个部件中的神经处理器电路218可如本文针对神经处理器电路218讨论的那样操作。例如,神经处理器电路218可与CPU 208、GPU 220或图像信号处理器206中的神经处理器电路一起操作,以处理输入数据切片的不同图块,或以其他方式并行处理输入数据。
在一些实施方案中,多个神经处理器电路218可运行单独的神经网络,或者通过使用编译器在空间上(宽度或高度)、在通道上对网络进行切片和/或将网络划分为单独的分支来加快单个神经网络的执行速度,以便这些切片可以跨神经处理器电路218进行调度。
可扩展数据缓冲器和内核提取电路
每个神经处理器电路218的数据缓冲器318的大小根据针对任务激活的激活的神经引擎314的数量为可扩展的。例如,数据缓冲器318的存储器空间的一部分可被分配用于存储被激活以用于执行任务的每个神经引擎314的输入数据和内核数据。此外,数据缓冲器318的总大小可对应于神经处理器电路218中的神经引擎314的数量,以及每个神经引擎314的MAC电路404的大小。在一些实施方案中,数据缓冲器318的大小被设定成足以存储用于图块的输入数据,该图块包括针对每个处理周期广播到神经引擎314中的每个神经引擎的工作单元、在每个处理周期中将被应用于工作单元的内核数据以及针对每个处理周期的任何其他配置数据(例如,用于光栅器的指令)。数据缓冲器318的大小也可被设定成足以存储由神经引擎314的MAC电路404从输入数据和内核数据生成的输出数据。输出数据可替换数据缓冲器318中的先前处理周期的输入数据,或者可存储在数据缓冲器318的不同位置中。在这种意义上,数据缓冲器318的大小或数据到数据缓冲器318的分配可变化以提供在神经处理器电路218中使用的神经引擎314的可扩展性。
每个神经引擎314的内核提取电路432的大小可为可扩展的,以支持具有输入数据的不同类型的神经操作。此外,神经引擎314的内核提取电路432可利用神经引擎314被选择性地激活或解激活。图16是示出根据一个实施方案的神经引擎314的内核提取电路432的框图。内核提取电路432是神经处理器电路218的部件,并且包括内核存储器1604和内核解压缩电路1606。内核存储器1604从神经处理器电路218的内核DMA 324接收内核数据326并存储内核数据326。内核解压缩电路1606使用内核数据326生成内核系数422,并且将内核系数422提供给神经处理器电路218的MAC电路404。内核解压缩电路1606以压缩格式将内核数据326转换为内核系数422。内核存储器1604的大小或数据到内核存储器1604的分配能够变化以支持可扩展的内核大小。
在一些实施方案中,神经引擎314的MAC 404中的MAD电路的数量也可被扩展以支持内核大小。例如,位于或激活于神经引擎314中的MAD电路的数量可对应于内核系数422的数量,以便于在处理周期中处理提供给MAD电路MAD0至MADN的内核系数422中的每个内核系数。
在一些实施方案中,每个神经引擎314包括X个MAD电路。因此,神经处理器电路218中的N个神经引擎314在每个处理周期中提供至多N*X个操作。此外,电子设备中的M个神经处理器电路218在每个处理周期中提供至多N*M*X个操作。在一个示例中,电子设备可包括单个神经处理器电路218(M=1),每个神经处理器电路具有八个神经引擎314(N=8),其中每个神经引擎314包括256个MAD电路(X=256),以在每个处理周期中提供至多2,048个操作。在另一个示例中,电子设备可包括两个神经处理器电路218(M=2),每个神经处理器电路具有十六个神经引擎314(N=16),其中每个神经引擎314包括256个MAD电路(X=256),以在每个处理周期中提供至多8,192个操作。
除了电子设备100/1500的部件和神经处理电路218是可扩展的之外,连接这些部件的各种织物、总线和/或接口的大小也可以是可扩展的,以便于这些部件之间的数据传输。
神经处理器架构处的示例性可扩展处理
图17是示出根据一个实施方案的利用可扩展神经处理器电路处理输入数据的方法的流程图。该方法可包括不同的和/或附加的步骤,或者这些步骤可具有不同的次序。
CPU 208根据电子设备的计算资源生成1702任务的配置数据。配置数据可限定用于任务的部件诸如神经处理器电路218和神经引擎318的激活和解激活。配置数据还可限定将输入数据分配到激活的神经处理器电路的数据缓冲器318的存储器空间中,以及将内核数据分配到激活的神经引擎314的内核存储器1604的存储器空间中。
可由任务描述符1012限定用于每个任务的配置数据。CPU 208执行编译操作以基于输入数据和神经网络900的网络层以及可用计算资源来生成任务的任务描述符1012。配置数据可包括地址数据1204,该地址数据限定用于输入数据和内核数据的神经处理器电路218地址和数据有效载荷对。在一些实施方案中,CPU 208针对并行实现的多个神经网络生成任务的配置数据。每个神经网络的任务可以在单独的编译操作中生成。
如上所述,可基于电子设备和神经处理器电路218的资源来生成配置数据。例如,CPU 208可以根据电子设备的计算资源将神经网络的网络层的处理优化为任务,该电子设备的计算资源包括神经处理器电路218的数量、神经处理器电路218中的神经引擎314的数量、神经处理器电路的数据缓冲区318的大小、神经引擎314中的MAD电路的数量以及神经引擎314中的内核提取电路432的大小。配置数据可限定光栅器的行为以控制如何将内核数据和输入数据提供给每个激活的神经处理器电路218的数据缓冲器318。对于每个神经处理器电路218,配置数据可限定如何将输入数据的部分和从内核数据提取的内核系数提供给神经处理器电路218的每个激活的神经引擎314。如果神经处理器电路218或神经引擎314不用于任务,则配置数据可指定未使用部件的解激活。
***存储器230存储1704任务的配置数据。例如,CPU 208将任务的配置数据提供给***存储器230。此外,CPU 208可将任务列表入队至神经任务管理器310的任务队列1004中。
在一些实施方案中,***存储器230存储输入数据的多个图块。例如,***存储器230可存储用于卷积组的输入数据,每个卷积组包括多个切片,并且每个切片包括多个图块。在一些实施方案中,***存储器230存储属于不同卷积组或不同神经网络的多个图块。
神经处理器电路218的缓冲器DMA 320取回1706从***存储器230到神经处理器电路218的数据缓冲器318的输入数据,并且神经处理器电路218的内核DMA 324取回1706从***存储器230到缓冲器提取电路432的内核数据。例如,当将任务的配置数据置于神经处理器电路218的神经任务管理器310的配置队列1010中时,缓冲器DMA 320和内核DMA 324分别对输入数据和内核数据执行预取。在输入数据和内核数据的处理周期之前,预取导致输入数据存储在数据缓冲器318中,并且内核数据存储在每个神经引擎314的内核提取电路432中。可选择数据缓冲器318或内核提取电路432(例如,内核存储器1604)的大小以支持神经处理器电路218中的神经引擎314的利用,并且可根据神经引擎314的配置数据以及激活和解激活来分配可用存储器空间的子集。
在一些实施方案中,多个激活的神经处理器电路218并行地执行步骤1706。每个神经处理器电路218的缓冲器DMA 320可根据配置数据来取回存储在***存储器230中的输入数据的多个图块中的一个图块。此外,每个神经处理器电路218的内核DMA 324取回要与由神经处理器电路218的缓冲器DMA 320取回的输入数据一起处理的内核数据。
在一些实施方案中,一个或多个神经处理器电路218可在未用于处理周期时被解激活。解激活可包括将神经处理器电路218置于功率节省模式或使神经处理器电路218断电。此处,解激活的神经处理器电路218不从***存储器230取回输入数据或内核数据。
神经处理器电路218的数据缓冲器318向神经处理器电路218的神经引擎314的MAC电路404提供1708存储在数据缓冲器318中的输入数据的一部分,并且神经处理器电路218的内核提取电路432将从内核数据生成的内核系数提供1708给神经处理器电路218的神经引擎314的MAC电路404。接收输入数据和内核数据的神经引擎314可为激活的神经引擎314。神经处理器电路218的一个或多个神经引擎314可在不用于处理周期时被解激活,诸如通过被置于功率节省模式或断电。
提供给神经处理器电路218的激活的神经引擎314中的每个神经引擎的输入数据的部分可包括存储在神经处理器电路218的数据缓冲器318中的输入数据的图块的工作单元。在一些实施方案中,神经处理器电路218的激活的神经引擎314接收相同(例如,工作单元或工作单元的一部分)的输入数据,并且在处理周期中将不同的内核系数应用于输入数据。多个神经处理器电路218可并行地执行步骤1708,使得神经处理器电路218在处理周期中处理不同的输入数据。在相同的处理周期中,神经处理器电路218的多个神经引擎314可负责将不同的内核系数应用于相同的输入数据。此处,多个神经引擎314可并行操作以在处理周期中生成不同通道的输出数据。在后续处理周期中,提供给神经引擎314的输入数据可不同,或者由神经引擎314使用的内核数据可不同,或者两者。
神经处理器电路218的神经引擎314使用输入数据的部分和内核系数来生成1710输出数据。例如,每个神经处理电路218可基于在处理周期中提供给激活的神经引擎314的MAC电路404的输入数据和内核数据来在处理周期中生成不同的输出数据。
在一些实施方案中,神经引擎314执行多个处理周期以实现用于处理输入数据的回路,如图5至图8所示。例如,神经处理器电路218的神经引擎314可在不同的处理周期中处理输入数据的图块的不同工作单元。在另一个示例中,不同的神经处理器电路218可在处理周期中处理输入数据的公共切片的不同图块。在另一个示例中,不同的神经处理器电路218可在处理周期中处理不同的神经网络,诸如不同输入数据的不同图块。
神经处理器电路218的神经引擎314将输出数据存储1712在神经处理器电路218的数据缓冲器318中。在执行一个或多个处理周期之后,来自神经处理器电路218的每个神经引擎314的输出数据被存储在神经处理器电路218的数据缓冲器318中。
神经任务管理器310为神经处理器电路218确定1714存储在神经处理器电路218的数据缓冲器318中的输出数据是否为用于由神经处理器电路218执行的后续任务的输入数据。该确定可基于任务的配置数据,诸如任务的任务描述符1012的输出表面参数1214。
如果存储在数据缓冲器318中的输出数据是用于后续任务的输入数据,则方法返回到1408,在该处将输入数据和对应内核系数提供给神经处理器电路218的神经引擎314的MAC电路404。在后续任务中,可根据后续的配置数据选择性地激活或解激活不同的部件,诸如神经处理器电路218或神经引擎314。
如果存储在数据缓冲器318中的输出数据不是用于后续任务的输入数据,则神经处理器电路218的缓冲器DMA 320将来自数据缓冲器318的输出数据存储到***存储器230。该方法可结束。
在一些实施方案中,神经处理器电路218可在处理周期中执行预取操作,该预取操作生成针对来自***存储器230的后续输入数据的输出数据以供神经处理器电路218在后续处理周期中处理。
在一些实施方案中,来自第一神经处理器电路218的输出数据用作第二神经处理器电路218的输入数据。例如,来自第一神经处理器电路218的输出数据可存储在***存储器230中,并且***存储器230可将输出数据提供给第二神经处理器电路218作为输入数据。
步骤1706至1716可由电子设备的多个神经处理器电路218执行(诸如并行执行)以提高由电子设备执行的机器学习操作的速度。可由神经互连数据缓冲器1506或***存储器230收集来自每个神经处理器电路218的输出数据。根据任务的配置数据,可将输出数据提供给一个或多个神经处理器电路218作为后续处理周期的输入数据。
虽然已经说明和描述了具体的实施方案和应用,但是应当理解,本发明不限于本文所公开的精确构造和部件以及,并且在不脱离本公开的实质和范围的情况下,可对本文所公开的方法和装置的布置、操作和细节进行对本领域的技术人员将显而易见的各种修改、改变和变型。
Claims (20)
1.一种神经处理器电路,包括:
多个神经引擎电路,所述多个神经引擎电路被选择性地激活,所述神经引擎电路中的每个神经引擎电路被配置为对输入数据和内核系数执行卷积操作以生成输出数据;
数据缓冲器,所述数据缓冲器位于所述多个神经引擎电路与所述神经处理器电路外部的存储器之间,所述数据缓冲器被配置为存储来自所述存储器的所述输入数据以用于发送到所述神经引擎电路以及从所述神经引擎电路接收的所述输出数据;以及
内核提取电路,所述内核提取电路被配置为从所述神经处理器电路外部的所述存储器接收内核数据,所述内核提取电路被配置为将从所述内核数据提取的对应内核系数发送到被选择用于激活的神经引擎电路。
2.根据权利要求1所述的神经处理器电路,还包括神经任务管理器电路,所述神经任务管理器电路被配置为向所述神经引擎电路提供配置数据以激活或解激活用于任务的所述神经引擎电路中的一个或多个神经引擎电路。
3.根据权利要求2所述的神经处理器电路,其中所述数据缓冲器被进一步配置为:响应于从所述神经任务管理器电路接收到所述配置数据,而分配存储器空间以用于存储所述输入数据和所述输出数据。
4.根据权利要求3所述的神经处理器电路,其中所述神经处理器电路包括耦接到所述存储器和所述数据缓冲器的缓冲器直接存储器存取(DMA),所述缓冲器DMA被配置为从所述存储器取回所述输入数据并根据所述配置数据将所述输入数据提供到所述数据缓冲器的所述存储器空间。
5.根据权利要求2所述的神经处理器电路,其中所述内核提取电路被进一步配置为:响应于从所述神经任务管理器接收到所述配置数据,而分配存储器空间以用于存储所述内核数据。
6.根据权利要求2所述的神经处理器电路,还包括耦接到所述***存储器的处理器,所述处理器被配置为生成定义实例化一个或多个神经网络的任务的所述配置数据。
7.根据权利要求2所述的神经处理器电路,其中所述多个神经引擎电路中的每个神经引擎电路在被解激活时以功率节省模式操作。
8.根据权利要求1所述的神经处理器电路,还包括神经任务管理器电路,所述神经任务管理器电路被配置为向所述神经处理器电路提供配置数据以激活或解激活用于任务的所述神经处理器电路。
9.根据权利要求8所述的神经处理器电路,其中所述神经处理器电路在被解激活时以功率节省模式操作。
10.一种用于处理输入数据的方法,包括:
选择性地激活神经处理器电路的多个神经引擎电路,所述神经引擎电路中的每个神经引擎电路被配置为对输入数据和内核系数执行卷积操作以生成输出数据;
将所述输入数据存储在所述神经引擎电路的数据缓冲器中以用于发送到所述神经引擎电路,以及存储从所述神经引擎电路接收的所述输出数据;以及
将从内核数据提取的对应内核系数发送到被选择用于激活的神经引擎电路。
11.根据权利要求10所述的方法,还包括向所述神经引擎电路提供配置数据以激活或解激活用于任务的所述神经引擎电路中的一个或多个神经引擎电路。
12.根据权利要求11所述的方法,还包括响应于所述配置数据来分配所述数据缓冲器的存储器空间以用于存储所述输入数据和所述输出数据。
13.根据权利要求12所述的方法,还包括从存储器取回所述输入数据并根据所述配置数据将所述输入数据提供到所述数据缓冲器的所述存储器空间。
14.根据权利要求11所述的方法,还包括:
响应于来自所述神经任务管理器的所述配置数据,分配内核提取电路的存储器空间以用于存储所述内核数据;以及
将所述内核数据存储在所述内核提取电路中。
15.根据权利要求11所述的方法,还包括生成定义实例化一个或多个神经网络的任务的所述配置数据。
16.根据权利要求11所述的方法,其中所述多个神经引擎电路中的每个神经引擎电路在被解激活时以功率节省模式操作。
17.根据权利要求10所述的方法,还包括向所述神经处理器电路提供配置数据以激活或解激活用于任务的所述神经处理器电路。
18.根据权利要求17所述的方法,其中所述神经处理器电路在被解激活时以功率节省模式操作。
19.一种包括神经处理器电路的集成电路(IC)***,所述神经处理器电路包括:
多个神经引擎电路,所述多个神经引擎电路被选择性地激活,所述神经引擎电路中的每个神经引擎电路被配置为对输入数据和内核系数执行卷积操作以生成输出数据;
数据缓冲器,所述数据缓冲器位于所述多个神经引擎电路与所述神经处理器电路外部的存储器之间,所述数据缓冲器被配置为存储来自所述存储器的所述输入数据以用于发送到所述神经引擎电路以及从所述神经引擎电路接收的所述输出数据;以及
内核提取电路,所述内核提取电路被配置为从所述神经处理器电路外部的所述存储器接收内核数据,所述内核提取电路被配置为将从所述内核数据提取的对应内核系数发送到被选择用于激活的神经引擎电路。
20.根据权利要求19所述的IC***,其中所述神经处理器电路还包括神经任务管理器电路,所述神经任务管理器电路被配置为向所述神经引擎电路提供配置数据以激活或解激活用于任务的所述神经引擎电路中的一个或多个神经引擎电路。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/971,882 US11537838B2 (en) | 2018-05-04 | 2018-05-04 | Scalable neural network processing engine |
US15/971,882 | 2018-05-04 | ||
PCT/US2019/025894 WO2019212689A1 (en) | 2018-05-04 | 2019-04-04 | Scalable neural network processing engine |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410505012.3A Division CN118396047A (zh) | 2018-05-04 | 2019-04-04 | 可扩展神经网络处理引擎 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112055862A true CN112055862A (zh) | 2020-12-08 |
CN112055862B CN112055862B (zh) | 2024-05-07 |
Family
ID=66248700
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980029442.XA Active CN112055862B (zh) | 2018-05-04 | 2019-04-04 | 可扩展神经网络处理引擎 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11537838B2 (zh) |
KR (2) | KR102572705B1 (zh) |
CN (1) | CN112055862B (zh) |
WO (1) | WO2019212689A1 (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11537838B2 (en) | 2018-05-04 | 2022-12-27 | Apple Inc. | Scalable neural network processing engine |
US11360809B2 (en) * | 2018-06-29 | 2022-06-14 | Intel Corporation | Multithreaded processor core with hardware-assisted task scheduling |
US10831693B1 (en) * | 2018-09-27 | 2020-11-10 | Amazon Technologies, Inc. | Multicast master |
US10613977B1 (en) * | 2018-09-27 | 2020-04-07 | Amazon Technologies, Inc. | Target port with distributed transactions |
US11295205B2 (en) * | 2018-09-28 | 2022-04-05 | Qualcomm Incorporated | Neural processing unit (NPU) direct memory access (NDMA) memory bandwidth optimization |
US11861484B2 (en) * | 2018-09-28 | 2024-01-02 | Qualcomm Incorporated | Neural processing unit (NPU) direct memory access (NDMA) hardware pre-processing and post-processing |
US10747516B1 (en) * | 2019-03-21 | 2020-08-18 | Xilinx, Inc. | Applications for hardware accelerators in computing systems |
US11461622B2 (en) * | 2019-06-28 | 2022-10-04 | Amazon Technologies, Inc. | Dynamic code loading for multiple executions on a sequential processor |
US11513799B2 (en) * | 2019-11-04 | 2022-11-29 | Apple Inc. | Chained buffers in neural network processor |
US11741350B2 (en) | 2019-11-27 | 2023-08-29 | Amazon Technologies, Inc. | Efficient utilization of processing element array |
KR20210093127A (ko) * | 2020-01-17 | 2021-07-27 | 에스케이하이닉스 주식회사 | Aim 장치 |
US12014202B2 (en) | 2020-02-13 | 2024-06-18 | Samsung Electronics Co., Ltd. | Method and apparatus with accelerator |
US11599780B2 (en) | 2020-03-02 | 2023-03-07 | Apple Inc. | Asynchronous task execution for neural processor circuit |
CN111008982A (zh) * | 2020-03-10 | 2020-04-14 | 光子算数(北京)科技有限责任公司 | 基于光子神经网络芯片的数据处理方法及相关装置或设备 |
US20220036158A1 (en) * | 2020-07-29 | 2022-02-03 | Apple Inc. | Task skew management for neural processor circuit |
US11972348B2 (en) * | 2020-10-30 | 2024-04-30 | Apple Inc. | Texture unit circuit in neural network processor |
US11475240B2 (en) * | 2021-03-19 | 2022-10-18 | Apple Inc. | Configurable keypoint descriptor generation |
US20230079975A1 (en) * | 2021-09-10 | 2023-03-16 | Arm Limited | Power management for system-on-chip |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030065631A1 (en) * | 2001-10-03 | 2003-04-03 | Mcbride Chad B. | Pipelined hardware implementation of a neural network circuit |
WO2009077073A1 (en) * | 2007-11-28 | 2009-06-25 | Honda Research Institute Europe Gmbh | Artificial cognitive system with amari-type dynamics of a neural field |
US20110119322A1 (en) * | 2009-11-13 | 2011-05-19 | International Business Machines Corporation | On-Chip Networks for Flexible Three-Dimensional Chip Integration |
US20150032962A1 (en) * | 2013-07-25 | 2015-01-29 | International Business Machines Corporation | Three-dimensional processing system having multiple caches that can be partitioned, conjoined, and managed according to more than one set of rules and/or configurations |
US20170011006A1 (en) * | 2015-07-06 | 2017-01-12 | Samsung Electronics Co., Ltd. | Device and method to process data in parallel |
US20170011288A1 (en) * | 2015-07-10 | 2017-01-12 | Samsung Electronics Co., Ltd. | Neural network processor |
US20170103316A1 (en) * | 2015-05-21 | 2017-04-13 | Google Inc. | Computing convolutions using a neural network processor |
CN107003710A (zh) * | 2014-11-20 | 2017-08-01 | 苹果公司 | 包括多个相异的处理器核心的处理器 |
CN107003709A (zh) * | 2014-11-20 | 2017-08-01 | 苹果公司 | 包括实现指令集架构不同部分的多个不同处理器内核的处理器 |
CN107454966A (zh) * | 2015-05-21 | 2017-12-08 | 谷歌公司 | 用于神经网络处理器的预取权重 |
CN107533667A (zh) * | 2015-05-21 | 2018-01-02 | 谷歌公司 | 神经网络处理器中的向量计算单元 |
US9858636B1 (en) * | 2016-06-30 | 2018-01-02 | Apple Inc. | Configurable convolution engine |
CN107633298A (zh) * | 2017-03-10 | 2018-01-26 | 南京大学 | 一种基于模型压缩的递归神经网络加速器的硬件架构 |
CN107729996A (zh) * | 2016-08-11 | 2018-02-23 | 图芯芯片技术有限公司 | 零系数跳过卷积神经网络引擎 |
CN107886166A (zh) * | 2016-09-29 | 2018-04-06 | 北京中科寒武纪科技有限公司 | 一种执行人工神经网络运算的装置和方法 |
US9940534B1 (en) * | 2016-10-10 | 2018-04-10 | Gyrfalcon Technology, Inc. | Digital integrated circuit for extracting features out of an input image based on cellular neural networks |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0480867A (ja) | 1990-07-23 | 1992-03-13 | Mitsubishi Electric Corp | 演算回路 |
JPH04127364A (ja) | 1990-09-19 | 1992-04-28 | Nec Corp | 積和算器 |
US9978014B2 (en) | 2013-12-18 | 2018-05-22 | Intel Corporation | Reconfigurable processing unit |
US9507565B1 (en) | 2014-02-14 | 2016-11-29 | Altera Corporation | Programmable device implementing fixed and floating point functionality in a mixed architecture |
US10373050B2 (en) | 2015-05-08 | 2019-08-06 | Qualcomm Incorporated | Fixed point neural network based on floating point neural network quantization |
US11423311B2 (en) | 2015-06-04 | 2022-08-23 | Samsung Electronics Co., Ltd. | Automatic tuning of artificial neural networks |
US20190073582A1 (en) | 2015-09-23 | 2019-03-07 | Yi Yang | Apparatus and method for local quantization for convolutional neural networks (cnns) |
JP6700712B2 (ja) * | 2015-10-21 | 2020-05-27 | キヤノン株式会社 | 畳み込み演算装置 |
FR3045892B1 (fr) | 2015-12-21 | 2018-06-22 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Circuit neuronal optimise, architecture et procede pour l'execution des reseaux de neurones. |
US10157309B2 (en) | 2016-01-14 | 2018-12-18 | Nvidia Corporation | Online detection and classification of dynamic gestures with recurrent convolutional neural networks |
US10565492B2 (en) | 2016-12-31 | 2020-02-18 | Via Alliance Semiconductor Co., Ltd. | Neural network unit with segmentable array width rotator |
US10311002B2 (en) * | 2017-05-15 | 2019-06-04 | International Business Machines Corporation | Selectable peripheral logic in programmable apparatus |
US10445402B1 (en) * | 2017-09-29 | 2019-10-15 | Ambarella, Inc. | Fast and energy-efficient region of interest pooling for object detection with convolutional neural network |
US11537838B2 (en) | 2018-05-04 | 2022-12-27 | Apple Inc. | Scalable neural network processing engine |
-
2018
- 2018-05-04 US US15/971,882 patent/US11537838B2/en active Active
-
2019
- 2019-04-04 WO PCT/US2019/025894 patent/WO2019212689A1/en active Application Filing
- 2019-04-04 KR KR1020207033125A patent/KR102572705B1/ko active IP Right Grant
- 2019-04-04 KR KR1020237028820A patent/KR20230129575A/ko not_active Application Discontinuation
- 2019-04-04 CN CN201980029442.XA patent/CN112055862B/zh active Active
-
2022
- 2022-11-21 US US17/991,373 patent/US11989640B2/en active Active
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030065631A1 (en) * | 2001-10-03 | 2003-04-03 | Mcbride Chad B. | Pipelined hardware implementation of a neural network circuit |
WO2009077073A1 (en) * | 2007-11-28 | 2009-06-25 | Honda Research Institute Europe Gmbh | Artificial cognitive system with amari-type dynamics of a neural field |
US20110119322A1 (en) * | 2009-11-13 | 2011-05-19 | International Business Machines Corporation | On-Chip Networks for Flexible Three-Dimensional Chip Integration |
US20150032962A1 (en) * | 2013-07-25 | 2015-01-29 | International Business Machines Corporation | Three-dimensional processing system having multiple caches that can be partitioned, conjoined, and managed according to more than one set of rules and/or configurations |
CN107003710A (zh) * | 2014-11-20 | 2017-08-01 | 苹果公司 | 包括多个相异的处理器核心的处理器 |
CN107003709A (zh) * | 2014-11-20 | 2017-08-01 | 苹果公司 | 包括实现指令集架构不同部分的多个不同处理器内核的处理器 |
CN107454966A (zh) * | 2015-05-21 | 2017-12-08 | 谷歌公司 | 用于神经网络处理器的预取权重 |
CN107533667A (zh) * | 2015-05-21 | 2018-01-02 | 谷歌公司 | 神经网络处理器中的向量计算单元 |
US20170103316A1 (en) * | 2015-05-21 | 2017-04-13 | Google Inc. | Computing convolutions using a neural network processor |
US20170011006A1 (en) * | 2015-07-06 | 2017-01-12 | Samsung Electronics Co., Ltd. | Device and method to process data in parallel |
US20170011288A1 (en) * | 2015-07-10 | 2017-01-12 | Samsung Electronics Co., Ltd. | Neural network processor |
US9858636B1 (en) * | 2016-06-30 | 2018-01-02 | Apple Inc. | Configurable convolution engine |
CN107729996A (zh) * | 2016-08-11 | 2018-02-23 | 图芯芯片技术有限公司 | 零系数跳过卷积神经网络引擎 |
CN107886166A (zh) * | 2016-09-29 | 2018-04-06 | 北京中科寒武纪科技有限公司 | 一种执行人工神经网络运算的装置和方法 |
US9940534B1 (en) * | 2016-10-10 | 2018-04-10 | Gyrfalcon Technology, Inc. | Digital integrated circuit for extracting features out of an input image based on cellular neural networks |
CN107633298A (zh) * | 2017-03-10 | 2018-01-26 | 南京大学 | 一种基于模型压缩的递归神经网络加速器的硬件架构 |
Non-Patent Citations (2)
Title |
---|
CHEN, Y-H. ET AL: "Eyeriss: An Energy-Efficient Reconfigurable Accelerator for Deep Convolutional Neural Networks", 《IEEE JOURNAL OF SOLID-STATE CIRCUITS》, vol. 52, no. 1, pages 127 - 138, XP011638633, DOI: 10.1109/JSSC.2016.2616357 * |
GAUTSCHI, M. ET AL: "Near-Threshold RISC-V Core with DSP Extensions for Scalable IoT Endpoint Devices", 《 IEEE TRANSACTIONS ON VERY LARGE SCALE INTEGRATION (VLSI) SYSTEMS》, vol. 25, no. 10, pages 2700 - 2713, XP011661469, DOI: 10.1109/TVLSI.2017.2654506 * |
Also Published As
Publication number | Publication date |
---|---|
KR20200143479A (ko) | 2020-12-23 |
US11537838B2 (en) | 2022-12-27 |
US20190340491A1 (en) | 2019-11-07 |
WO2019212689A1 (en) | 2019-11-07 |
KR102572705B1 (ko) | 2023-08-31 |
CN112055862B (zh) | 2024-05-07 |
US20230099652A1 (en) | 2023-03-30 |
US11989640B2 (en) | 2024-05-21 |
KR20230129575A (ko) | 2023-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112055862B (zh) | 可扩展神经网络处理引擎 | |
KR102607234B1 (ko) | 뉴럴 네트워크 프로세서에서 태스크들을 할당하기 위한 시스템들 및 방법들 | |
US11640316B2 (en) | Compiling and scheduling transactions in neural network processor | |
US20240069957A1 (en) | Systems and Methods for Task Switching in Neural Network Processor | |
US11200490B2 (en) | Processing group convolution in neural network processor | |
CN112074847A (zh) | 拆分用于在神经网络处理器中处理的输入数据 | |
US11934941B2 (en) | Asynchronous task execution for neural processor circuit | |
US20230394276A1 (en) | Subtask storage for streaming convolutions in neural network processor | |
CN116762084A (zh) | 用于神经处理器电路的分支操作 | |
US20220237438A1 (en) | Task context switch for neural processor circuit | |
CN118396047A (zh) | 可扩展神经网络处理引擎 | |
US20240095541A1 (en) | Compiling of tasks for streaming operations at neural processor | |
US20230289291A1 (en) | Cache prefetch for neural processor circuit | |
US20240220764A1 (en) | Efficient zero padding in convolution at neural processor |
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 |