一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于神经处理器电路的异步任务执行的制作方法

2022-10-26 19:16:22 来源:中国专利 TAG:

用于神经处理器电路的异步任务执行


背景技术:

1.1.本公开的技术领域
2.本公开涉及一种用于执行与神经网络相关的操作的电路,并且更具体地涉及以异步方式执行神经引擎任务和平面引擎任务。
3.2.相关技术描述
4.人工神经网络(ann)是使用连接节点的集合来处理输入数据的计算系统或模型。ann通常被组织成层,其中不同的层对其输入执行不同类型的转换。ann的扩展或变体诸如卷积神经网络(cnn)、递归神经网络(rnn)和深度信念网络(dbn)已受到大量关注。这些计算系统或模型通常涉及广泛的计算操作,包括相乘和累加。例如,cnn是一类主要使用输入数据和内核数据之间的卷积的机器学习技术,卷积可分解为相乘和累加操作。
5.根据输入数据的类型和待执行的操作,这些机器学习系统或模型可被不同地配置。此类变化的配置将包括例如预处理操作、输入数据中的通道数量、待使用的内核数据、待应用于卷积结果的非线性函数以及各种后处理操作的应用。使用中央处理单元(cpu)及其主存储器来实例化和执行各种配置的机器学习系统或模型相对容易,因为此类系统或模型仅通过更新代码即可实例化。然而,仅依赖于cpu进行这些机器学习系统或模型的各种操作将消耗中央处理单元(cpu)的大量带宽以及增加总体功率消耗。


技术实现要素:

6.实施方案涉及一种神经处理器电路,该神经处理器电路包括一个或多个平面引擎电路,该一个或多个平面引擎电路与由一个或多个神经引擎电路执行卷积操作并行地执行非卷积操作。该神经引擎电路对与一个或多个神经引擎任务对应的神经输入数据执行卷积操作以生成神经输出数据。该平面引擎电路对与一个或多个平面引擎任务对应的平面输入数据执行非卷积操作以生成平面输出数据。该神经处理器电路中的数据处理器电路通过控制由该平面引擎电路将该神经输出数据读取为该平面输入数据或由该神经引擎电路将该平面输出数据读取为该神经输入数据来解决该一个或多个神经引擎任务与该一个或多个平面引擎任务之间的数据依赖性。
7.在一个或多个实施方案中,并行地执行神经引擎任务中的两个或更多个神经引擎任务与平面引擎任务中的一个平面引擎任务,或者并行地执行平面引擎任务中的两个或更多个平面引擎任务与神经引擎任务中的一个神经引擎任务。
8.在一个或多个实施方案中,数据处理器电路包括缓冲器电路和数据控制电路。该缓冲器电路存储神经输出数据或平面输出数据中的至少一者。该数据控制电路响应于神经引擎任务或平面引擎任务依赖的该神经输出数据或该平面输出数据在该缓冲器电路中是可用的,选择性地使该一个或多个神经引擎能够读取对应于该神经引擎任务的神经输入数据,或者使该一个或多个平面引擎能够读取对应于该平面引擎任务的平面输入数据。
9.在一个或多个实施方案中,数据处理器电路进一步包括任务缓冲器,该任务缓冲器存储对应于神经引擎任务的子集和平面引擎任务的配置数据的条目。该配置数据指示用
于对应的神经引擎任务或对应的平面引擎任务的该数据控制电路的配置以及该神经引擎任务的子集和该平面引擎任务之间的数据依赖性。
10.在一个或多个实施方案中,神经处理器电路包括任务管理器电路。该任务管理器电路接收多个任务描述符,该多个任务描述符定义神经处理器电路的配置以执行对应的神经引擎任务或对应的平面引擎任务,提取对应于任务描述符的配置数据,以及将提取的配置数据发送到数据处理器电路以进行处理和存储。可在编译过程中生成该任务描述符。
11.在一个或多个实施方案中,数据处理器电路从任务缓冲器中丢弃用于完成的神经引擎任务或完成的平面引擎任务的该配置数据的第一部分,并且响应于丢弃该配置数据的第一部分而存储用于新的神经引擎任务或新的平面引擎任务的该配置数据的第二部分。
12.在一个或多个实施方案中,数据处理器电路通过控制一个或多个神经引擎电路将神经输出数据写入数据处理器电路中或一个或多个平面引擎电路将平面输出数据写入数据处理器电路中来解决一个或多个神经引擎任务与一个或多个平面引擎任务之间的数据冲突(hazard)。
13.在一个或多个实施方案中,非卷积操作包括减小平面输入数据的空间大小的操作和对平面输入数据的逐元素操作中的至少一者。
14.在一个或多个实施方案中,数据处理器电路使一个或多个神经引擎电路以如通过用于神经网络的编译过程确定的第一序列执行一个或多个神经引擎任务,并且使一个或多个平面引擎电路以如通过该编译过程确定的第二序列执行一个或多个平面引擎任务。
附图说明
15.图1是根据实施方案的电子设备的高级图。
16.图2是示出根据一个实施方案的电子设备中的部件的框图。
17.图3是示出根据一个实施方案的神经处理器电路的框图。
18.图4是根据一个实施方案的神经处理器电路中的神经引擎的框图。
19.图5是根据一个实施方案的神经处理器电路中的平面引擎的框图。
20.图6是示出根据一个实施方案的用于配置神经处理器电路的部件的光栅器和数据流控制电路的编程的图。
21.图7是示出根据一个实施方案的由任务列表表示的神经网络的示意性框图。
22.图8是示出根据一个实施方案的在神经处理器电路中执行任务的时序图。
23.图9是根据一个实施方案的数据处理器电路中的数据控制电路的框图。
24.图10是根据一个实施方案的神经处理器电路中的神经任务管理器的框图。
25.图11是示出根据一个实施方案的使用任务队列检索任务描述符的图。
26.图12是示出根据一个实施方案的任务描述符的图。
27.图13是示出根据一个实施方案的获取队列和配置队列的框图。
28.图14是示出根据一个实施方案的异步地处理神经引擎任务和平面引擎任务的方法的流程图。
29.仅仅出于示例目的,附图说明以及具体实施方式描述各种非限定性实施方案。
具体实施方式
30.现在将详细地参考实施方案,这些实施方案的示例在附图中示出。下面的详细描述中示出许多具体细节,以便提供对各种所描述的实施方案的充分理解。然而,可以在没有这些具体细节的情况下实施所述实施方案。在其他情况下,没有详细地描述众所周知的方法、过程、部件、电路和网络,从而不会不必要地使实施方案的各个方面晦涩难懂。
31.本公开的实施方案涉及在神经处理器电路中异步地由神经引擎电路执行神经引擎任务和由平面引擎电路执行平面引擎任务。该神经引擎电路在执行卷积操作时是有效率的,而平面引擎在执行非卷积操作时是有效率的。为了解决神经引擎任务和平面引擎任务中的数据的依赖性,存储用于在神经引擎电路和平面引擎电路处处理的输入数据的数据处理器电路仅在针对神经引擎任务或平面引擎任务的数据依赖性要求得到满足时才选择性地使该神经引擎电路和平面引擎电路能够访问该输入数据。数据处理器电路还使得来自神经引擎电路和平面引擎电路的待写入数据处理器电路中的输出数据不引起数据冲突。
32.示例性电子设备
33.本文描述了电子设备、此类设备的用户界面和使用此类设备的相关过程的实施方案。在一些实施方案中,该设备为还包含其他功能诸如个人数字助理(pda)和/或音乐播放器功能的便携式通信设备,诸如移动电话。便携式多功能设备的示例性实施方案包括但不限于来自apple inc.(cupertino,california)的设备、ipod设备、apple设备和设备。可选地使用其他便携式电子设备,诸如可穿戴设备、膝上型电脑或平板计算机。在一些实施方案中,该设备不是便携式通信设备,而是台式计算机或不是为便携式使用而设计的其他计算设备。在一些实施方案中,所公开的电子设备可包括触敏表面(例如,触摸屏显示器和/或触摸板)。下文结合图1描述的示例性电子设备(例如,设备100)可包括用于接收用户输入的触敏表面。电子设备还可包括一个或多个其他物理用户接口设备,诸如物理键盘、鼠标和/或操纵杆。
34.图1是根据一个实施方案的电子设备100的高级图。设备100可包括一个或多个物理按钮,诸如“home”按钮或菜单按钮104。菜单按钮104例如用于导航到在设备100上执行的一组应用程序中的任何应用程序。在一些实施方案中,菜单按钮104包括识别菜单按钮104上的指纹的指纹传感器。指纹传感器能够被用来确定菜单按钮104上的手指是否具有与为解锁设备100存储的指纹匹配的指纹。另选地,在一些实施方案中,菜单按钮104被实现为触摸屏上显示的图形用户界面(gui)中的软键。
35.在一些实施方案中,设备100包括触摸屏150、菜单按钮104、用于使设备开/关机和用于锁定设备的下压按钮106、音量调节按钮108、订户身份模块(sim)卡槽110、耳麦插孔112和对接/充电外部端口124。下压按钮106可被用于通过压下该按钮并将该按钮保持在压下状态达预定义的时间间隔来对设备进行开关机;通过压下该按钮并在该预定义的时间间隔过去之前释放该按钮来锁定设备;和/或对设备进行解锁或发起解锁过程。在另选的实施方案中,设备100还通过麦克风113接受用于激活或去激活某些功能的语音输入。设备100包括各种部件,包括但不限于存储器(可包括一个或多个计算机可读存储介质)、存储器控制器、一个或多个中央处理单元(cpu)、外围设备接口、rf电路、音频电路、扬声器111、麦克风113、输入/输出(i/o)子系统和其他输入或控制设备。设备100可包括一个或多个图像传感器164、一个或多个接近传感器166,以及一个或多个加速度计168。设备100可包括多于一种
类型的图像传感器164。每种类型可包括多于一个图像传感器164。例如,一种类型的图像传感器164可以是相机,并且另一类型的图像传感器164可以是用于由存储在设备100中的一个或多个机器学习模型执行的面部识别的红外传感器。设备100可包括图1中未示出的部件,诸如环境光传感器、点投影仪和用于支持面部识别的泛光照明器。
36.设备100仅是电子设备的一个示例,并且设备100可具有比上文列出的更多或更少的部件,其中一些部件可组合成一个部件或具有不同的配置或布置。以上列出的设备100的各种部件体现为硬件、软件、固件或其组合,包括一个或多个信号处理和/或专用集成电路(asic)。
37.图2是示出根据一个实施方案的设备100中的部件的框图。设备100可执行各种操作,包括实施一个或多个机器学习模型。出于此目的和其他目的,设备100可包括图像传感器202、片上系统(soc)部件204、系统存储器230、永久存储器(例如,闪存)228、运动传感器234和显示器216,以及其他部件。图2中所示的部件仅为例示性的。例如,设备100可包括图2中未示出的其他部件(诸如扬声器或麦克风)。另外,一些部件(诸如运动传感器234)可从设备100中省略。
38.图像传感器202是用于捕获图像数据的部件,并且可实现为例如互补金属氧化物半导体(cmos)有源像素传感器、相机、摄像机或其他设备。图像传感器202生成原始图像数据,其被发送到soc部件204以进行进一步处理。在一些实施方案中,由soc部件204处理的图像数据显示在显示器216上,存储在系统存储器230、永久存储器228中,或经由网络连接发送到远程计算设备。由图像传感器202生成的原始图像数据可以是bayer色彩内核阵列(cfa)图案。
39.运动传感器234是用于感测设备100的运动的部件或一组部件。运动传感器234可生成指示设备100的取向和/或加速度的传感器信号。传感器信号被发送到soc部件204以用于各种操作,诸如打开设备100或旋转显示器216上显示的图像。
40.显示器216是用于显示由soc部件204生成的图像的部件。显示器216可包括例如液晶显示器(lcd)设备或有机发光二极管(oled)设备。基于从soc部件204接收的数据,显示器116可显示各种图像,诸如菜单、所选择的操作参数、由图像传感器202捕获并由soc部件204处理的图像,和/或从设备100的用户界面接收的其他信息(未示出)。
41.系统存储器230是用于存储由soc部件204执行的指令以及用于存储由soc部件204处理的数据的部件。系统存储器230可体现为任何类型的存储器,包括例如动态随机存取存储器(dram)、同步dram(sdram)、双倍数据速率(ddr、ddr2、ddr3等)rambus dram(rdram)、静态ram(sram)或其组合。
42.永久存储器228是用于以非易失性方式存储数据的部件。即使电力不可用,永久存储器228也保留数据。永久存储器228可体现为只读存储器(rom)、闪存或其他非易失性随机存取存储器设备。永久存储器228存储设备100的操作系统和各种软件应用程序。永久存储器228也可存储一个或多个机器学习模型,诸如回归模型、随机森林模型、支持向量机(svm)诸如内核svm、以及人工神经网络(ann)诸如卷积网络网络(cnn)、递归网络网络(rnn)、自编码器、和长短期记忆(lstm)。机器学习模型可以是与神经处理器电路218和设备100的各种软件应用程序或传感器一起工作的独立模型。机器学习模型也可以是软件应用程序的一部分。机器学习模型可执行各种任务,诸如面部识别、图像分类、对象、概念和信息分类、语音
识别、机器翻译、声音识别、语音命令识别、文本识别、文本和上下文分析、其它自然语言处理、预测和建议。
43.存储在设备100中的各种机器学习模型可被完全训练、未经训练、或部分训练以允许设备100加强或继续在设备100被使用时训练机器学习模型。机器学习模型的操作包括在训练模型以及利用模型确定运行时间结果的各种计算。例如,在一种情况下,设备100捕获用户的面部图像并使用该图像继续改善用于锁定或解锁设备100的机器学习模型。
44.soc部件204体现为一个或多个集成电路(ic)芯片并执行各种数据处理过程。soc部件204可包括除了别的子部件之外的图像信号处理器(isp)206、中央处理器单元(cpu)208、网络接口210、传感器接口212、显示控制器214、神经处理器电路218、图形处理器(gpu)220、存储器控制器222、视频编码器224、存储控制器226和连接这些子组件的总线232。soc部件204可包括比图2中所示的子部件更多或更少的子部件。
45.isp 206是执行图像处理流水线的各级的电路。在一些实施方案中,isp 206可从图像传感器202接收原始图像数据,并且将原始图像数据处理成soc部件204的其他子部件或设备100的部件可用的形式。isp 206可执行各种图像操纵操作,诸如图像平移操作、水平和竖直缩放、色彩空间转换和/或图像稳定变换。
46.cpu 208可使用任何合适的指令集架构来实现,并且可被配置为执行在该指令集架构中定义的指令。cpu 208可以是使用各种指令集架构(isa)中的任一者的通用或嵌入式处理器,诸如x86、powerpc、sparc、risc、arm或mips isa,或任何其他合适的isa。尽管图2中示出了单个cpu,但是soc部件204可包括多个cpu。在多处理器系统中,每个cpu可共同实现相同的isa,但不是必需的。
47.图形处理单元(gpu)220是用于执行图形数据的图形处理电路。例如,gpu 220可渲染要显示到帧缓冲器中的对象(例如,包括整个帧的像素数据的帧缓冲器)。gpu 220可包括一个或多个图形处理器,该图形处理器可执行图形软件以执行部分或全部的图形操作或某些图形操作的硬件加速。
48.神经处理器电路218是基于包括相乘、相加和累加的计算来执行各种机器学习操作的电路。此类计算可被布置为例如执行各种类型的张量乘积,诸如张量积和输入数据和内核数据的卷积。神经处理器电路218是可配置电路,该可配置电路以快速且高功效的方式执行这些操作,同时缓解了cpu 208与神经网络操作相关联的资源密集型操作。神经处理器电路218可从传感器接口212、图像信号处理器206、永久存储器228、系统存储器230或其他源诸如网络接口210或gpu 220接收输入数据。神经处理器电路218的输出可被提供给设备100的各个部件诸如图像信号处理器206、系统存储器230或cpu 208用于各种操作。神经处理器电路218的结构和操作在下文中参考图3详细描述。
49.网络接口210是支持经由一个或多个网络(例如,载体或代理设备)在设备100和其他设备之间交换数据的子部件。例如,视频或其他图像数据可经由网络接口210从其他设备接收并且被存储在系统存储器230中以用于后续处理(例如,经由到图像信号处理器206的后端接口)和显示。网络可包括但不限于局域网(lan)(例如,以太网或公司网络)和广域网(wan)。经由网络接口210接收的图像数据可由isp 206进行图像处理过程。
50.传感器接口212是用于与运动传感器234交接的电路。传感器接口212从运动传感器234接收传感器信息并且处理传感器信息以确定设备100的取向或移动。
51.显示控制器214是用于发送要在显示器216上显示的图像数据的电路。显示控制器214从isp 206、cpu 208、图形处理器或系统存储器230接收图像数据,并将图像数据处理成适用于在显示器216上显示的格式。
52.存储器控制器222为用于与系统存储器230通信的电路。存储器控制器222可从系统存储器230读取数据以供isp 206、cpu 208、gpu 220或soc部件204的其他子部件处理。存储器控制器222还可将数据写入从soc部件204的各种子部件接收的系统存储器230。
53.视频编码器224是硬件、软件、固件或它们的组合,用于将视频数据编码成适用于存储在永久存储器128中的格式或者用于将数据传递到网络接口210以通过网络传输到另一设备。
54.在一些实施方案中,soc部件204的一个或多个子部件或这些子部件的一些功能可由在神经处理器电路218、isp 206、cpu 208或gpu 220上执行的软件部件来执行。此类软件部件可存储在系统存储器230、永久存储器228或经由网络接口210与设备100通信的另一设备中。
55.示例性神经处理器电路
56.神经处理器电路218是对神经处理器电路218的输入数据执行机器学习操作的可编程电路。机器学习操作可包括用于训练机器学习模型以及用于基于经训练的机器学习模型执行推断或预测的不同计算。
57.以cnn为机器学习模型的示例,cnn的训练可包括正向传播和反向传播。神经网络可包括输入层、输出层、和一个或多个中间层,该中间层可被称为隐藏层。每个层可包括一个或多个节点,该一个或多个节点可完全或部分地连接到相邻层中的其它节点。在正向传播中,神经网络基于前一层的输出在正向方向上执行计算。节点的操作可由一个或多个函数限定。限定节点的操作的函数可包括各种计算操作,诸如利用一个或多个内核的数据卷积、层的池化、张量乘积等。函数还可包括调节节点的输出的权重的激活函数。不同层中的节点可与不同函数相关联。例如,cnn可包括与池化层混合、并且之后跟着一个或多个完全连接的层的一个或多个卷积层。
58.机器学习模型中的函数中的每一者(包括内核)可与在训练期间能调节的不同系数相关联。另外,神经网络中的一些节点各自也可与决定正向传播中节点的输出的权重的激活函数相关联。常见的激活函数可包括阶跃函数、线性函数、s形函数、双曲正切函数(tanh)、和整流线性单元函数(relu)。在一批训练样本数据在正向传播中通过神经网络之后,可将结果与训练样本的训练标签进行比较以计算网络的损失函数,其表示网络的性能。进而,神经网络通过使用坐标下降诸如随机坐标下降(sgd)调节各个函数中的系数以改善损失函数的值来执行反向传播。
59.在训练中,设备100可使用神经处理器电路218执行正向传播和反向传播中的所有或一些操作。多轮正向传播和反向传播可由神经处理器电路218单独地或与其它处理器诸如cpu 208、gpu 220和isp 206协调地执行。训练可在损失函数不再改善(例如,机器学习模型已收敛)时或在特定训练样本的预定轮数之后完成。当使用设备100时,设备100可继续收集用于神经网络的附加训练样本。
60.为了预测或推断,设备100可接收一个或多个输入样本。神经处理器电路218可取输入样本执行正向传播以确定一个或多个结果。输入样本可以是图像、语音、文本文件、传
感器数据或其它数据。
61.机器学习中的数据和函数(例如,输入数据、内核、函数、层输出、梯度数据)可被保存并由一个或多个张量表示。与机器学习模型的训练和运行时间有关的常见操作可包括张量积、张量转置、张量逐元素操作、卷积、激活函数的应用、自动微分以确定张量中的值的梯度、统计和聚合(例如,平均、方差、标准偏差)、张量秩和尺寸操纵等。
62.虽然作为示例讨论了神经网络的训练和运行时间,但是神经处理器电路218也可用于其它类型的机器学习模型的操作,诸如内核svm。
63.参见图3,示例性神经处理器电路218除了别的部件之外可包括神经任务管理器310、多个神经引擎314a至314n(在下文中统称为“多个神经引擎314”并且还单独地称为“神经引擎314”)、内核直接存储器存取(dma)324、数据处理器电路318、数据处理器dma 320、平面引擎340和神经处理器(np)控制器350。神经处理器电路218可包括比图3中所示更少的部件或包括图3中未示出的附加的部件。
64.神经引擎314中的每一个神经引擎并行地执行机器学习的计算操作。根据操作负荷,整组神经引擎314可正在操作,或者仅神经引擎314的子集可正在操作,而其余神经引擎314被置于功率节省模式以节省功率。神经引擎314中的每一个神经引擎包括用于存储一个或多个内核、用于执行相乘累加操作以及用于后处理以生成输出数据328的部件,如下文参考图4详细描述。神经引擎314可专门执行计算量大的操作,诸如卷积操作和张量积操作。卷积操作可包括不同种类的卷积,诸如交叉通道卷积(累加来自不同通道的值的卷积)、逐通信卷积、和转置卷积。
65.平面引擎340可专门执行更简单的计算操作,其速度可主要取决于数据传输的输入和输出(i/o)速度而不是平面引擎340内的计算速度。这些计算操作可被称为受i/o限制的计算,并且在本文中也被称为“非卷积操作”。相比之下,神经引擎314可聚焦于复杂的计算,诸如卷积操作,其速度可主要取决于每个神经引擎314内的计算速度。例如,平面引擎340对于执行单个通道内的操作是高效的,而神经引擎314对于执行可能涉及数据重度累加的跨多个通道的操作是高效的。使用神经引擎314计算i/o约束的计算不可能在速度和功率消耗两个方面都是高效的。在一个实施方案中,输入数据可以是秩大于三(例如,具有三个或更多个维度)的张量。张量中的一组维度(两个或更多个)可被称为平面,而另一维度可被称为通道。神经引擎314可利用内核将张量中平面的数据卷积,并跨不同通道累加不同平面卷积的结果。另一方面,平面引擎340可专用于平面内的操作。
66.平面引擎340的电路可被编程用于多种模式下的一种模式下的操作,包括池化模式、逐元素模式和缩减模式。在池化模式下,平面引擎340缩减输入数据的空间尺寸。在逐元素模式下,平面引擎340生成从一个或多个输入的逐元素操作导出的输出。在缩减模式下,平面引擎340缩减张量的秩。例如,可将秩5张量缩减到秩2张量,或者可将秩3张量缩减到秩0张量(例如,标量)。下面参考图5进一步详细地论述平面引擎340的操作。
67.神经任务管理器310管理神经处理器电路218的总体操作。神经任务管理器310可从由cpu 208执行的编译器接收任务列表,将任务存储在其任务队列中,选择待执行的任务,并且向神经处理器电路218的其他部件发送任务命令以用于执行所选择的任务。数据可与指示要对数据执行的操作的类型的任务命令相关联。神经处理器电路218的数据包括从另一源诸如系统存储器230传输的输入数据、以及由神经处理器电路218在先前操作循环中
生成的数据。每个数据集可与指定要对数据执行的操作的类型的任务命令相关联。神经任务管理器310还可以在检测到事件诸如从cpu 208接收指令时执行任务的切换。在一个或多个实施方案中,神经任务管理器310将光栅器信息发送给神经处理器电路218的部件以使这些部件中的每一者能够跟踪、检索或处理输入数据和内核数据的适当部分。例如,神经任务管理器310可包括存储关于数据集的尺寸和秩的信息以供神经处理器电路218处理的寄存器。尽管在图3中神经任务管理器310被示出为神经处理器电路218的一部分,但是神经任务管理器310可以是神经处理器电路218外部的部件。
68.内核dma 324是从源(例如,系统存储器230)获取内核数据并将内核数据326a至326n发送到神经引擎314中的每一个神经引擎的读取电路。内核数据表示可从中提取内核元素的信息。在一个实施方案中,内核数据可以是在神经引擎314中的每一个神经引擎处解压缩的压缩格式。尽管在一些情况下提供给神经引擎314中的每一个神经引擎的内核数据可相同,但是在大多数情况下提供给神经引擎314中的每一个神经引擎的内核数据是不同的。在一个实施方案中,内核dma 324的直接存储器访问性质可允许内核dma 324直接从源获取和写入数据,而没有cpu 208参与。
69.数据处理器电路318管理神经处理器电路218的数据流量和任务绩效。数据处理器电路318可包括数据控制电路332和缓冲器334。缓冲器334是临时存储装置,其用于存储:与神经处理器电路218的操作相关联的数据,诸如从系统存储器230传输的输入数据(例如,来自机器学习模型的数据);以及在神经处理器电路218内生成的其它数据。可从系统存储器230传输输入数据。存储在数据处理器电路318中的数据可包括不同子集,所述不同子集被发送给各个下游部件,诸如神经引擎314和平面引擎340。
70.在一个实施方案中,缓冲器334被实施为可被神经引擎314和平面引擎340访问的非暂态存储器。缓冲器334可存储:用于馈送到对应的神经引擎314a至314n的输入数据322a至322n(本文还称为“神经输入数据”)和用于馈送到平面引擎340的输入数据342(本文还称为“平面输入数据”),以及用于馈送回到一个或多个神经引擎314或平面引擎340或发送到目标电路(例如,系统存储器230)的来自每个神经引擎314a至314n的输出数据328a至328n(本文还称为“神经输出数据”)和来自平面引擎340的输出数据344(本文还称为“平面输出数据”)。缓冲器334还可存储平面引擎340的输入数据342和输出数据344,并且允许神经引擎314与平面引擎340之间的数据交换。例如,神经引擎314的一个或多个输出数据328a至328n用作对平面引擎340的平面输入数据342。同样,平面引擎340的平面输出数据344可用作神经引擎314的输入数据322a至322n。神经引擎314或平面引擎340的输入可以是存储在缓冲器334中的任何数据。例如,在各个操作循环中,引擎之一从中获取以作为输入的源数据集可以是不同的。引擎的输入可以是先前循环中同一引擎的输出、不同引擎的输出、或存储在缓冲器334中的任何其它合适的源数据集。此外,缓冲器334中的数据集可被划分并发送给不同的引擎,以用于下一操作循环中的不同操作。缓冲器334中的两个数据集也可联合以用于下一操作。
71.数据处理器电路318的数据控制电路332可控制神经引擎314与平面引擎340之间的数据交换。数据处理器电路318与神经处理器电路218的其他部件的操作被协调使得存储在数据处理器电路318中的输入数据和中间数据可跨神经引擎314和平面引擎340处的多个操作被重复使用,从而减少往返于系统存储器230的数据传输。数据控制电路332可执行以
下操作中的一者或多者:(i)监视正被神经引擎314和平面引擎340处理的数据的大小和秩(例如,数据可以是一个或多个张量),(ii)基于与不同数据子集相关联的任务命令确定哪些数据子集被传输给神经引擎314或平面引擎340,(iii)确定数据被传输给神经引擎314和平面引擎340的方式(例如,数据处理器电路318可在广播模式下操作,其中相同的数据被馈送到神经引擎314的多个输入通道,使得多个或所有神经引擎314接收相同的数据,或者可在单播模式下操作,其中不同的神经引擎314接收不同的数据),和(iv)传输配置命令给平面引擎340以指示平面引擎340对其自己编程以用于在多个操作模式之一中操作。下面参考图9详细描述数据控制电路332的细节。
72.存储在缓冲器334中的神经处理器电路218的数据可以是图像数据、取向梯度(hog)数据的柱状图、音频数据、元数据、神经引擎314的前一循环的输出数据328、以及从soc部件204的其他部件接收的其他经处理的数据等等的一部分。
73.数据处理器dma 320包括从源(例如,系统存储器230)接收输入数据的片段以用于存储在缓冲器334中的读取电路以及将数据从缓冲器334转发到目标部件(例如,系统存储器)的写入电路。在一个实施方案中,数据处理器dma 320的直接存储器访问性质可允许数据处理器dma 320直接从源(例如,系统存储器230)获取和写入数据。而没有cpu 208参与。缓冲器334可以是在cpu 208不参与的情况下存储设备100的机器学习模型的数据的直接存储器访问缓冲器。
74.神经处理器(np)控制器350是执行各种操作以控制神经处理器电路218的整体操作的控制电路。np控制器350可通过设置部件中的寄存器来与cpu 208、神经处理器电路218的程序部件相连接并执行管家操作。np控制器350还可当神经处理器电路218开启时初始化神经处理器电路218中的部件。
75.示例性神经引擎架构
76.图4是根据一个实施方案的神经引擎314的框图。神经引擎314是执行各种操作以促进机器学习诸如卷积、张量积的电路,并且其它操作可涉及大的计算量。为此,神经引擎314接收输入数据322,基于所存储的内核数据对输入数据322执行相乘累加操作(例如,卷积操作),对相乘累加操作的结果执行进一步后处理操作,并且生成输出数据328。神经引擎314的输入数据322和/或输出数据328可以是单个通道的或跨多个通道。
77.神经引擎314可除了别的部件之外包括输入缓冲电路402、计算核416、神经引擎(ne)控件418、内核提取电路432、累加器414和输出电路424。神经引擎314可包括比图4中所示更少的部件或包括图4中未示出的另外的部件。
78.输入缓冲电路402是当神经处理器电路218的数据的子集被从源接收时存储该数据子集的电路。源可以是数据处理器电路318、平面引擎340或另一合适的部件。输入缓冲电路402发送用于当前任务或处理回路的数据的适当片段408给计算核416以用于处理。输入缓冲电路402可包括移位器410,该移位器对输入缓冲电路402的读取位置进行移位以改变发送给计算核416的数据的片段408。通过经由移位改变提供给计算核416的输入数据的片段,神经引擎314可基于较少数量的读取操作针对输入数据的不同片段执行相乘累加。在一个或多个实施方案中,神经处理器电路218的数据包括差异卷积组和/或输入通道的数据。
79.内核提取电路432是从内核dma 324接收内核数据326并提取内核系数422的电路。在一个实施方案中,内核提取电路432参考查找表(lut)并使用掩模来基于lut从压缩内核
数据326重建内核。该掩模指示重建内核中待用零填补的位置以及待用数字填充的剩余位置。将重建内核的内核系数422发送到计算核416以填充计算核416的乘加(mad)电路中的寄存器。在其他实施方案中,内核提取电路432接收未压缩格式的内核数据,并且在不参考lut或使用掩模的情况下确定内核系数。
80.计算核416是执行计算操作的可编程电路。为此,计算核416可包括mad电路mad0至madn以及后处理器428。mad电路mad0至madn中的每一者可将输入值存储在输入数据的片段408中并且将对应内核系数存储在内核系数422中。在mad电路中的每一个mad电路中将输入值和对应内核系数相乘以生成经处理的值412。
81.累加器414是从mad电路接收和存储经处理的值412的存储器电路。存储在累加器414中的经处理的值可作为反馈信息419被发送回以在mad电路处进行进一步相乘和相加操作,或者被发送到后处理器428以进行后处理。累加器414与mad电路组合形成了相乘累加器(mac)404。在一个或多个实施方案中,累加器414可具有子单元,其中每个子单元将数据发送到神经引擎314的不同部件。例如,在处理周期期间,存储在累加器414的第一子单元中的数据被发送到mac电路,同时存储在累加器414的第二子单元中的数据被发送到后处理器428。
82.后处理器428是对从累加器414接收的值412执行进一步处理的电路。后处理器428可执行操作,包括但不限于应用线性函数(例如,整流线性单元(relu))、归一化互相关性(ncc)、将对8位数据执行神经操作的结果合并成16位数据以及局部响应归一化(lrn)。此类操作的结果作为经处理的值417从后处理器428输出到输出电路424。在一些实施方案中,绕过后处理器428处的处理。例如,累加器414中的数据可直接发送给输出电路424以用于由神经处理器电路218的其它部件访问。
83.ne控件418基于神经处理器电路218的操作模式和参数来控制神经引擎314的其他部件的操作。根据不同的操作模式(例如,组卷积模式或非组卷积模式)或参数(例如,输入通道的数量和输出通道的数量),神经引擎314可以不同的顺序对不同的输入数据进行操作,将不同的值从累加器414返回到mac电路,并且在后处理器428处执行不同类型的后处理操作。为了配置神经引擎314的部件以期望的方式操作,ne控件418发送可被包括在信息419中的任务命令给神经引擎314的部件。ne控件418可包括光栅器430,该光栅器跟踪在神经引擎314处处理的当前任务或处理回路。
84.输入数据通常被分成更小的数据片,用于在多个神经引擎314或者神经引擎314和平面引擎340处进行并行处理。用于卷积操作的一组数据可被称为卷积组,其可分成多个较小单元。较小单元(片段)的层级结构可以是卷积组、切片、区块、工作单元、输出通道组、输入通道(cin)、用于输入步幅的子cin等。例如,卷积组可被分成若干切片;切片可分成若干区块;区块可分成若干工作单元;等等。在神经引擎314的上下文中,工作单元可以是输入数据的片段,诸如由平面引擎340处理的数据或神经引擎314的先前循环处理的数据,其具有生成在计算核416的单个循环期间适合神经引擎314的累加器414的输出值的尺寸。在一种情况下,每个工作单元的尺寸是256字节。在此类实施方案中,例如,工作单元可被成形为16
×
16、32
×
8、64
×
4、128
×
2或256
×
1数据集中的一者。在平面引擎340的上下文中,工作单元可以是(i)输入数据的片段,(ii)来自神经引擎314的数据或(iii)来自平面引擎340的先前循环的数据,其可在平面引擎340处同时处理。
85.光栅器430可执行与将输入数据分为较小单元(片段)相关联的操作,并通过mac 404和累加器414调控较小单元的处理。光栅器430保持跟踪输入/输出数据的片段的尺寸和秩(例如,组、工作单元、输入通道、输出通道)并且指示神经处理器电路218的部件用于正确处理输入数据的片段。例如,光栅器430在输入缓冲电路402中操作移位器410以将输入数据的正确片段408转发给mac 404并将完成的输出数据328发送给数据缓冲器334。神经处理器电路218的其它部件(例如,内核dma 324、数据处理器dma 320、数据缓冲器334、平面引擎340)也可具有其对应的光栅器,用于监视输入数据的划分以及不同部件中输入数据的各个分段的并行计算。
86.输出电路424从后处理器428接收经处理的值417,并且与数据处理器电路318交接以将经处理的值417存储在数据处理器电路318中。为此,输出电路424可以与在后处理器428中处理经处理的值417的顺序或格式不同的顺序或格式作为输出数据328发出。
87.神经引擎314中的部件可在配置周期期间由ne控件418和神经任务管理器310配置。为此,神经任务管理器310在配置周期期间将配置信息发送到神经引擎314。可配置参数和模式可包括但不限于输入数据元素和内核元素之间的映射、输入通道的数量、输出通道的数量、输出步幅的执行以及在后处理器428处启用/选择后处理操作。
88.示例性平面引擎架构
89.图5是根据一个实施方案的平面引擎340的框图。平面引擎340是与神经引擎314分开的电路并且可被编程为以不同的操作模式执行。例如,平面引擎340可在池化模式、缩减模式、增益偏置模式、和逐元素模式下操作,池化模式缩减数据的空间尺寸,缩减模式缩减张量的秩,增益偏置模式提供偏置和按缩放因子的缩放的单程加法,并且逐元素模式包括逐元素操作。为此,平面引擎340除了其他部件之外还可包括第一格式转换器502、第一过滤器506(在本文中也称为“多模水平过滤器506”)、行缓冲器510、第二过滤器514(在本文中也称为“多模竖直过滤器514”)、后处理器518、第二格式转换器522和平面引擎(pe)控件530(包括光栅器540)。平面引擎340可包括更少的部件或可包括图5a中未示出的其它部件。平面引擎340中的每个部件可被实施成电路或与固件或软件组合的电路。
90.可从保存在数据处理器电路318中的一个或多个源数据集获取平面引擎340的输入数据342。如果平面引擎340要处理的数据集大于平面引擎340能同时处理的数据的工作单元,则可将此类数据集分段成多个工作单元以用于作为输入数据342读取到平面引擎340。取决于平面引擎340的模式,输入数据342可包括来自一个或多个源数据集的数据。本文描述的源数据集是指保存在神经处理器电路218中用于处理的不同数据。神经处理器电路218的不同部件可生成或传输保存在数据处理器电路318中的数据。例如,神经引擎314、平面引擎340(其在先前操作循环中生成了数据)和系统存储器230可生成或传输保存在数据处理器电路318的不同存储器位置中的不同数据集。各个源数据集可表示不同的张量。在平面引擎340的操作循环中,不同的源数据集可被一起获取作为输入数据342。例如,在涉及两个不同张量相加以导出所得张量的逐元素模式下,输入数据342可包括来自两个不同源数据集的数据,每个源数据集提供单独的张量。在其它模式下,单个源数据集可提供输入数据342。例如,在池化模式下,可从单个源数据集获取输入数据342。
91.第一格式转换器502是对一种格式(例如,用于存储在缓冲器334中的格式)的输入数据342执行一个或多个格式转换到另一形式以用于在平面引擎340的后续部件中处理的
电路。此类格式转换可包括以下等等:将relu函数应用于输入数据342的一个或多个值、将输入数据342的一个或多个值转换为其绝对值、对包括在源中的张量转置、对输入数据342的一个或多个值应用增益、偏置输入数据342的一个或多个值、归一化或解除归一化输入数据342的一个或多个值、将浮点数转换为带符号或无符号的数(或反之亦然)、对数量子化、和改变张量的尺寸,诸如通过在一个或多个维度中广播张量的值以扩展张量的秩。到平面引擎340的转换后的输入数据342和未转换的输入数据342在本文中统称为“输入数据的版本”。
92.第一过滤器506是在一个方向上执行过滤操作的电路。为此目的,第一过滤器506除了其他部件之外可包括加法器、比较器和乘法器。第一过滤器506执行的过滤可以是例如平均、选择最大值或选择最小值。当平均时,加法器用于加和输入数据342的值,并且加权因子可利用乘法器应用于所述加和以获得平均值作为所得值。当选择最大值和最小值时,可使用比较器代替加法器和乘法器以选择值。
93.行缓冲器510是用于存储结果的存储器电路,诸如从第一过滤器506或第二过滤器514获得的一个或多个中间数据。行缓冲器510可存储不同行的值并且允许从第二过滤器514或其它下游部件访问以获取中间数据来用于进一步处理。在一些模式下,绕过行缓冲器510。行缓冲器510也可包括逻辑电路用于除仅存储中间数据以外执行附加操作。例如,行缓冲器510包括加法器电路512,加法器电路与存储器部件组合使得行缓冲器510能够充当累加器,累加器聚合从第一过滤器506或第二过滤器514的结果生成的数据以单独存储不缩减的维度的聚合数据。
94.类似于第一过滤器506,第二过滤器514执行过滤操作,但在与第一滤波器506不同的方向上执行过滤操作。为此目的,第二过滤器514除了其他部件之外可包括加法器、比较器和乘法器。在池化模式下,第一过滤器506在第一维度中执行过滤操作,而第二过滤器514在第二维度中执行过滤操作。在其它模式下,第一过滤器506和第二过滤器514可不同地操作。在缩减模式下,例如,第一过滤器506执行逐元素操作,而第二过滤器514充当缩减树用于聚合数据值。
95.后处理器518是执行从其他上游部件获取的值的进一步处理的电路。后处理器518可包括对于执行利用通用计算电路执行可能低效的某些类型的数学计算高效的专用电路。后处理器518执行的操作除了其他之外可包括在缩减模式下执行平方根操作和值的倒数。后处理器518可在其它操作模式下被绕过。
96.第二格式转换器522是将平面引擎340中先前部件的结果从一种格式转换为用于输出数据344的另一格式的电路。此类格式转换可包括以下等等:将relu函数应用于结果、对所得张量转置、归一化或解除归一化结果的一个或多个值、以及其它数字格式转换。输出数据344可作为神经处理器电路218的输出或作为对神经处理器电路218的其它部件(例如,神经引擎314)的输入被存储在数据处理器电路318中。
97.pe控件530是基于平面引擎340的操作模式控制平面引擎340中其他部件的操作的电路。根据不同操作模式,pe控件530对与平面引擎340中的不同部件相关联的寄存器编程,使得经编程的部件以某种方式操作。部件或平面引擎340中部件之间的连接的流水线也可被重新配置。在池化模式下,例如,被第一过滤器506处理的数据可被存储在行缓冲器510中,然后被第二过滤器514读取以用于进一步过滤。然而,在缩减模式下,数据由第一过滤器
506处理,接着在第二过滤器514处处理,然后在被编程为累加器的行缓冲器510中累加。在逐元素模式下,可绕过行缓冲器510。
98.pe控件530还包括光栅器540,其跟踪在平面引擎340处处理的当前任务或处理回路。光栅器540是跟踪输入数据的单元或片段和/或用于处理平面引擎340中的输入数据的回路的电路。光栅器540可控制每个操作循环中向平面引擎340的片段获取,并且可监视由平面引擎340处理的每个片段的尺寸和秩。例如,数据集的较小片段可按光栅器次序被获取作为输入数据342以用于在平面引擎340处处理,直到源数据集的所有片段被处理。在获取片段时,光栅器540监视数据集中片段的坐标。与数据集如何被分段到输入数据328中以用于在神经引擎314处处理相比,数据集被分段到输入数据342中以用于在平面引擎340处处理的方式可以是不同的。
99.用于在平面引擎340处处理的数据集可大于可在单个操作循环中处理的平面引擎340的容量。在这种情况下,平面引擎340获取数据集的不同片段作为多个操作循环中的输入数据342。所获取的片段可与先前获取的片段和/或将获取的下一片段部分地重叠。在一个实施方案中,重叠数据的部分仅被获取一次并且被重复使用以降低平面引擎340在获取数据中的时间和功率消耗成本。
100.示例性神经任务管理器和任务列表编译
101.图6是示出根据一个实施方案的神经处理器电路218的部件314、318、322、340中的光栅器614、622、624和数据控制电路332的编程的图。为了执行它们的功能,光栅器614、622、624和数据控制电路332接收指示输入数据和/或内核数据如何被分段并由神经处理器电路218的每个部件处理的配置数据610。该任务信息包括关于当前层的细节的信息(例如,输入和输出数据的维度、相关联内核的维度、输入数据边界处的填补类型)。光栅器614、622、624和数据控制电路332还可接收对其操作的约束(例如,是否允许或不允许图块宽度超过阈值)。发送到数据控制电路332的配置数据610可进一步包括关于数据依赖性和数据冲突的信息,使得数据控制电路332可将输入数据的读取从数据处理器电路318协调到神经引擎314和平面引擎340,并且将神经引擎314和平面引擎340的输出数据的写入协调到数据处理器电路318。
102.通过在神经处理器电路218的不同部件中提供光栅器,可减少在神经处理器电路218的部件之间传输的数据的开销。如果提供单个中央光栅器来控制神经处理器电路218的不同部件,则在这些数据中可能需要在这些部件之间传输的内核数据、输入数据和输出数据来识别任务回路中的相关联的位置,诸如卷积组、图块、切片、工作单元、输入通道和输出通道。通过使用分布式光栅器,不需要单独的元数据来在神经处理器电路218的部件之间传输内核数据、输入数据和输出数据。
103.神经网络可包括被实例化或实现为由神经处理器电路218执行的一系列任务的网络层或子层。图7是示出根据一个实施方案的由任务列表704表示的神经网络700的示意性框图。神经网络700包括网络层(或子层),该网络层(或子层)包括卷积层c1、c2、c3(包括子层c3
00
、c3
10
、c3
11
、c3
20
和c3
21
)、c4和非卷积层(例如,池化层)p1、p2、p3和p4。神经网络700是可由神经处理器电路218实例化的神经网络架构的示例。即,当神经网络700被转换成任务列表704以变得能够由神经处理器电路218执行时。也可由神经处理器电路218实例化具有不同类型的网络层或网络层次序的其他类型的神经网络架构。
104.神经网络700通过例如由cpu 208执行的编译器过程转换为任务列表704。该任务列表904包括一系列任务,包括神经引擎任务tc1到tc4(对应于卷积层c1到c4)和平面引擎任务p1到p5(对应于池化层p1到p5)。神经引擎任务tc3被划分成较小的神经引擎任务tc3
00
到tc3
21
(对应于子层c3
00
到c3
21
)。尽管列出为线性链接任务链,但是神经引擎任务和平面引擎任务不需要按此序列执行。相反,为了增加神经处理器电路218的效率,期望与神经引擎任务并行执行平面引擎任务,只要解决数据依赖性和数据冲突问题即可。在一个或多个实施方案中,保持如在编译器过程期间确定的神经引擎任务之间的任务序列和平面引擎任务之间的任务序列,但是可以切换平面引擎任务与神经引擎任务之间的序列。
105.每个任务与任务描述符相关联,该任务描述符限定神经处理器电路218的配置以执行任务。每个任务可对应于神经网络900的单个网络层、神经网络900的网络层的一部分或神经网络900的多个网络层。神经处理器电路218通过在神经任务管理器310的控制下执行任务列表904的任务来实例化神经网络900。
106.异步执行神经引擎任务和平面引擎任务
107.图8是示出根据一个实施方案的在神经处理器电路218中执行任务的时序图。在此示例中,任务按照tc1、tp1、tc2、tc3、tp2、tp3、tp4、tp5和tc4的序列开始。此类序列不与图7的任务列表704中的任务序列一致。因为任务tc3是长神经引擎任务,并且平面引擎340可以与神经引擎314并行执行操作,所以执行平面引擎任务tp2到tp4,同时执行神经引擎任务tc3。通过与任务tc3并行处理任务tp2到tp4,可以比按任务列表704的序列执行该过程更快速地获得任务tp5的数据。
108.尽管图8将相邻的神经引擎任务和相邻的平面引擎任务例示为被时间差分开以促进解释,但在实践中,执行相邻神经引擎任务和相邻平面引擎任务的时间可以重叠。神经引擎314和平面引擎340可采用流水线处理架构,其中它们可以接收用于一个任务的输入数据同时产生用于先前任务的输出数据,神经引擎314和平面引擎340可同时对不同任务上的数据进行操作。例如,神经引擎314可在任务tc2完成之前开始进行任务tc3,并且平面引擎340可在任务tp2完成之前开始进行任务tp3。
109.为了解决数据依赖性问题,数据控制电路332控制分别将神经输入数据和平面输入数据发送到神经引擎314和平面引擎340的时间。为此目的,数据控制电路332可包括如图9所示的访问使能电路910、光栅920和任务缓冲器930等其他部件。数据控制电路332可包括图9中未示出的其他部件。
110.任务缓冲器930是存储任务信息(或配置信息)942a到942x的条目的存储器电路。任务信息的每个条目942对应于神经引擎任务或平面引擎任务。可以从任务缓冲器930丢弃完成的任务的任务信息条目,并且将该任务信息条目替换为新任务的新任务条目。一些任务信息条目可包括待决任务的数据依赖性信息950,其指示输出数据用于由神经引擎314或平面引擎340执行该待决任务的一个或多个任务。任务信息条目还可包括指示对应任务的数据的数据源或目标与先前任务的数据的数据源或目标数据冲突信息。
111.访问使能电路910是可编程电路,其选择性地授予从数据处理器电路318的缓冲器334读取数据或将数据写入该缓冲器的访问权。神经引擎314和平面引擎340可被构造成使得它们的电路和部件不产生输出数据,直到提供输入数据为止。因此,访问使能电路910可通过防止神经引擎314或平面引擎340访问缓冲器334中的输入数据直到在缓冲器334中用
于未决任务的所有依赖数据可用,来使神经引擎314或平面引擎340推迟其未决任务。访问使能电路910可通过读取和分析包含在对应于任务的任务信息条目中的依赖性信息950来确定任务的数据依赖性,并且通过参考由光栅器920跟踪的任务的状态来确定所有依赖数据是否在缓冲器334中可用。以此方式,访问使能电路910可防止取决于先前任务的输出数据的下一任务的开始,直到先前任务的输出数据被存储在缓冲器334中并在缓冲器中可用。
112.访问使能电路910还可防止输出数据(由神经引擎314和平面引擎340生成)写入缓冲器334或读取输入数据以解决数据冲突问题。为此目的,访问使能电路910可参考如光栅器920所指示的操作的状态。基于所指示的状态,访问使能电路910可防止神经引擎314或平面引擎340将输出数据写入缓冲器334,直到另一操作或任务完成,或者防止神经引擎314或平面引擎340从缓冲器344读取用于当前任务的输入数据,直到来自先前任务的至少一部分输出数据存储在缓冲器334中。
113.光栅器920是跟踪在数据处理器电路318处处理的当前任务或过程循环的电路。光栅器920的功能和操作基本上与上文参考图4和图6详细解释的光栅器相同。在一个或多个实施方案中,在给定时间,光栅器920可跟踪与其它光栅器(例如,光栅器620和光栅器622)正跟踪的任务不同的任务。
114.示例性任务管理
115.图10是示出根据一个实施方案的神经任务管理器310的框图。神经任务管理器310对由神经处理器电路218执行用于一个或多个神经网络900的任务进行管理。除了其他部件之外,神经任务管理器310可包括任务仲裁器1002、任务队列1004a至1004n(在下文中统称为“多个任务队列1004”并且还单独地称为“任务队列1004”)、任务管理器直接存储器存取(dma)1006、获取队列1008和配置队列1010。神经任务管理器310可包括图10中未示出的其他部件。
116.任务仲裁器1002是从任务队列1004中选择任务以供神经处理器电路218执行的电路或电路和固件的组合。任务仲裁器1002将任务从任务队列1004出队,并且将任务置于配置队列1010中。在任务在配置队列中时,其被提交执行,并且神经处理器电路在任务由神经处理器电路218的其他部件执行之前对输入数据和内核数据执行预取。例如,任务仲裁器1002可以在多个任务队列1004之间执行固定优先级仲裁,并且从具有最高优先级的任务队列1004中选择任务以用于由任务管理器dma 1006从系统存储器230检索任务描述符1012。
117.神经任务管理器310可包括一个或多个任务队列1004。每个任务队列1004耦接到cpu 208和任务仲裁器1002。每个任务队列1004从cpu 208接收对任务的任务列表904的标引,这些任务当被神经处理器电路218执行时实例化神经网络900。存储在每个任务队列1004中的标引可包括指向系统存储器230中的任务描述符1012的任务列表904的一组指针和计数器。每个任务队列1004还可与限定任务队列1004的相对优先级的优先级参数相关联。任务的任务描述符1012指定用于执行任务的神经处理器电路218的配置。
118.任务管理器dma 1006耦接到任务仲裁器1002、系统存储器230和获取队列1008。任务管理器dma 1006包括从源(例如,系统存储器230)接收任务的任务描述符1012以存储在获取队列1008中的读取电路。例如,任务仲裁器1002根据任务队列1004的优先级选择任务队列1004,并且使用由所选择的任务队列1004标引的任务列表904来控制任务管理器dma 1006以选择任务的任务描述符1012。
119.获取队列1008是存储未决提交用于执行的任务的任务描述符1012的单个入口队列。获取队列1008耦接到任务管理器dma 1006以从系统存储器230接收任务描述符1012,并将任务描述符1012提供给配置队列1010,或将从任务描述符1012提取的配置数据1014提供给配置队列1010。
120.配置队列1010保持已提交用于执行的多个任务的配置数据1014。当任务在配置队列1010中时,内核dma 324可从系统存储器230获取内核数据以存储在神经引擎314的内核提取电路432中,并且数据处理器dma 320可从系统存储器230获取输入数据以存储在数据处理器电路318中。为了执行任务,内核提取电路432将预取的内核数据提供给神经引擎314的mac 404,并且数据缓冲器318将预取的输入数据提供给神经引擎314的mac 404。平面引擎340还访问数据处理器电路318以读取其输入数据342。在一些实施方案中,配置队列1010可包括保持从所提交的任务描述符1012提取的配置数据1014的多个队列。如结合图13更详细地讨论,配置队列1010进一步耦接到神经处理器电路218的其他部件,以根据配置数据1014来配置神经处理器电路218。
121.图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之间进行选择。
122.当选择特定任务队列1004时(例如,根据优先级参数1112),任务仲裁器1002标引头部参数1102、网络id 1104、基址索引1106以及基址表1114以用于从系统存储器230检索任务描述符1012,并且将任务描述符1012放置到获取队列1008中以发起用于执行任务的承诺。在每个配置周期中,任务仲裁器1002可根据由任务队列1004的任务列表904限定的任务的次序(诸如通过检索下一个任务描述符1012b等)继续将任务描述符1012放置到获取队列1008中。
123.图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、识别由任务实例化的神经网络700的神经网络标识符(id)1208、限定神经任务管理器310是否应该在执行任务之后发起任务切换(例如,执行不同任务队列1004的任务)的任务开关参数1210、限定是否应该从系统存储器230或数据处理器电
路318检索用于任务的输入数据的输入表面参数1212、限定任务的输出数据是否应该存储在系统存储器230或数据处理器电路318中的输出表面参数1214、促进神经处理器电路218的编程的各种(例如,基址)指针1216以及控制事件、异常或调试记录的一个或多个调试/异常参数1218。
124.地址数据1204a至1204n的每个实例(统称或单独地称为“地址数据1204”)限定用于对神经处理器电路218的部件进行编程的地址和数据有效载荷对。数据有效载荷可包括用于执行任务的输入数据和内核数据。例如,地址数据1204的每个实例包括限定数据有效载荷的寄存器数据、限定用于接收寄存器数据的神经处理电路218的目的地存储器位置的寄存器地址、以及限定待用寄存器数据写入的连续存储器位置(例如,寄存器)的数量的寄存器计数。在一些实施方案中,寄存器地址与存储在标头1202中的基址组合以限定每个存储器位置的完整地址。如果在编译时间处生成任务描述符1116,则实际运行时间地址可能是未知的。使用基址表1114避免了复制或更新具有动态分配地址的所有任务描述符。
125.在一个或多个实施方案中,地址数据1204a用于编程数据处理器电路318。地址数据1204a包括数据依赖性信息950,如上文参考图9所描述的。数据依赖性信息950被包括作为发送到数据处理器电路318的配置数据1014c的一部分。
126.图13是示出根据一个实施方案的获取队列1008和配置队列1010的框图。配置队列1010耦接到获取队列1008,该获取队列经由任务管理器dma 1006耦接到系统存储器230。配置队列1010进一步耦接到平面引擎340的光栅器540、一个或多个神经引擎314的光栅器714、数据处理器电路318的数据控制电路332、数据处理器dma 320的光栅器720和内核dma 324的光栅器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中。
127.配置队列1010存储提交用于由神经处理器电路218执行的任务的任务描述符1012。在一些实施方案中,配置队列1010包括多个单独的队列1310,每个队列存储从任务描述符1012提取的配置数据1014(包括配置数据1014a至1014f)的一部分。此外,队列1310各自耦接到神经处理器电路218的相应部件,以用于用配置数据1014对部件进行编程。通过配置队列1010的操作,神经任务管理器310编程光栅器540、714、720、722和数据控制电路332以执行上文在图3至图5中讨论的功能。例如,队列1310a耦接到平面引擎340的光栅540,以提供控制操作模式和参数的配置数据1014a,而队列1310b耦接到神经引擎314的光栅714,以提供配置数据1014b,该配置数据控制输入缓冲器电路402中的移位器410的操作以向mac 404转发输入数据的正确部分408,并且将完成的输出数据328发送到数据处理器电路318。
队列1310c耦接到数据处理器电路318的数据控制电路332,以提供配置数据1014c以填充任务缓冲器930、分段缓冲器334,以接收输出数据344、328以及发送输入数据322、342以供神经引擎314和平面引擎340处理。队列1310d是耦接到数据处理器dma 320的光栅器720以提供配置数据1014d的读取队列,该配置数据控制数据处理器dma 320从系统存储器230检索输入数据(例如,图块)并将输入数据存储在数据缓冲器318中。队列1310e是耦接到数据处理器dma 320的光栅器720以提供配置数据1014e的写入队列,该配置数据控制数据处理器dma 320将输出数据存储在系统存储器230中。队列1310f耦接到内核dma 322的光栅器722以提供配置数据1014f,该配置数据控制要接收哪些内核并将其分配给神经引擎314。
128.神经任务管理器架构处的示例性过程
129.图14是示出根据一个实施方案的异步地处理神经引擎任务和平面引擎任务的方法的流程图。该方法可包括不同的和/或附加的步骤,或者这些步骤可具有不同的次序。
130.数据处理器电路318控制1410由平面引擎340将神经输出数据读取为平面输入数据,或者控制由神经引擎314将平面输出数据读取为神经输入数据,以防止与神经输出数据或平面输出数据相关联的数据依赖性问题。在一个或多个实施方案中,数据处理器电路318通过不准许平面引擎340或神经引擎314访问存储在缓冲器334中的神经输出数据或平面输出数据来控制神经输出数据或平面输出数据的读取。
131.在数据处理器电路318允许神经引擎314读取缓冲器334中的神经输入数据时,神经引擎314执行1420对神经输入数据的卷积操作以执行神经引擎任务以及其他操作。除卷积(例如,relu)之外的操作也可由神经引擎执行。因此,神经输出数据由神经引擎314生成。
132.此外,在数据处理器电路318允许平面引擎314读取缓冲器334中的平面输入数据时,平面引擎340执行1430对平面输入数据的卷积操作以执行平面引擎任务以及其他操作。非卷积操作包括平面输入数据的池化、执行一个或多个平面输入的逐元素操作以及减小平面输入数据的空间大小。
133.在执行平面引擎任务或神经引擎任务期间或之后,数据处理器电路318控制1440将由神经引擎314和平面引擎340生成的输出数据写入缓冲器334。数据处理器电路318可确定是否可通过在缓冲器334中写入神经输出数据或平面输出数据而引起任何数据冲突,并且如果写入操作不引起数据冲突,则允许神经引擎314和平面引擎340将输出数据写入缓冲器。
134.虽然已经说明和描述了具体的实施方案和应用,但是应当理解,本发明不限于本文所公开的精确构造和部件以及,并且在不脱离本公开的实质和范围的情况下,可对本文所公开的方法和装置的布置、操作和细节进行对本领域的技术人员将显而易见的各种修改、改变和变型。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献