用于直接存储器访问装置的数据搬运方法转让专利

申请号 : CN202111659117.7

文献号 : CN114399034B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 罗仕麟

申请人 : 北京奕斯伟计算技术股份有限公司

摘要 :

公开了用于直接存储器访问装置的数据搬运方法,所述用于直接存储器访问装置的数据搬运方法包括:由所述直接存储器访问装置接收对象数据搬运指令并译码所述对象数据搬运指令,其中,所述对象数据搬运指令包括第一字段,所述对象数据搬运指令的第一字段指示针对神经网络处理器的数据搬运操作;由所述直接存储器访问装置执行所述对象数据搬运指令。

权利要求 :

1.一种用于直接存储器访问装置的数据搬运方法,包括:

由所述直接存储器访问装置接收对象数据搬运指令并译码所述对象数据搬运指令,其中,所述对象数据搬运指令包括第一字段,所述对象数据搬运指令的第一字段指示针对神经网络处理器的数据搬运操作;

由所述直接存储器访问装置执行所述对象数据搬运指令,

其中,所述对象数据搬运指令包括第二数据搬运指令,所述第二数据搬运指令还包括第二字段,所述第二数据搬运指令的第二字段指示对原始数据的切割的状态信息,要搬运的数据为根据第一运算关系对所述原始数据进行切割而得到的,或者所述对象数据搬运指令包括第三数据搬运指令,所述第三数据搬运指令还包括第二字段,所述第三数据搬运指令的第二字段指示对要搬运的数据进行填充操作的控制信息,或者所述对象数据搬运指令包括第四数据搬运指令,所述第四数据搬运指令还包括第二字段,所述第四数据搬运指令的第二字段指示已完成对全部或部分要搬运的数据的搬运的状态信息。

2.根据权利要求1所述的数据搬运方法,其中,所述对象数据搬运指令还包括第一数据搬运指令,所述第一数据搬运指令还包括第二字段,所述第一数据搬运指令的第二字段指示数据搬运地址信息;

所述由所述直接存储器访问装置执行所述对象数据搬运指令,包括:

由所述直接存储器访问装置根据所述数据搬运操作和所述数据搬运地址信息,得到数据搬运请求,并根据所述数据搬运请求执行对于所述神经网络处理器的所述数据搬运操作。

3.根据权利要求2所述的数据搬运方法,其中,所述直接存储器访问装置包括指令虚拟通道存储单元和接口控制单元,所述指令虚拟通道存储单元用于存储第一数据搬运指令,所述接口控制单元用于将所述数据搬运指令转换为数据搬运请求,所述数据搬运方法包括:

自所述指令虚拟通道存储单元取出第一数据搬运指令;

所述接口控制单元根据所述数据搬运操作和所述数据搬运地址信息,将取出的所述第一数据搬运指令转换为所述数据搬运请求,并根据所述数据搬运请求执行对于所述神经网络处理器的所述数据搬运操作。

4.根据权利要求2或3所述的数据搬运方法,其中,所述神经网络处理器包括至少一个处理单元阵列,所述数据搬运地址信息基于要搬运的数据与所述处理单元阵列中的至少一个处理单元之间的映射关系得到。

5.根据权利要求4所述的数据搬运方法,其中,所述要搬运的数据为根据第一运算关系对所述原始数据进行切割而得到的,所述要搬运的数据与所述处理单元阵列中的至少一个处理单元的映射关系由所述第一运算关系确定。

6.根据权利要求2所述的数据搬运方法,其中,所述数据搬运的地址信息包括所述数据的偏址信息和长度信息。

7.根据权利要求1所述的数据搬运方法,其中,所述由所述直接存储器访问装置执行所述对象数据搬运指令,包括:由所述直接存储器访问装置将所述第二数据搬运指令搬运至所述神经网络处理器。

8.根据权利要求1所述的数据搬运方法,其中,所述由所述直接存储器访问装置执行所述对象数据搬运指令,包括:由所述直接存储器访问装置将所述第三数据搬运指令搬运至所述神经网络处理器。

9.根据权利要求1所述的数据搬运方法,其中,所述由所述直接存储器访问装置执行所述对象数据搬运指令,包括:由所述直接存储器访问装置将所述第四数据搬运指令搬运至所述神经网络处理器。

10.根据权利要求1‑9任一所述的方法,其中,所述对象数据搬运指令的第一字段还指示所述要搬运的数据的类型信息,其中,所述类型信息包括以下中的至少一项:非压缩神经元数据;

非压缩权重数据;以及

压缩权重数据。

11.根据权利要求1‑9任一所述的方法,其中,在所述对象数据搬运指令进入所述直接存储器访问装置之前,所述对象数据搬运指令还包括指示所述直接存储器访问装置的标识信息的第三字段,所述方法还包括:

对所述对象数据搬运指令的第三字段进行译码,并根据译码后的所述标识信息将所述对象数据搬运指令存储至所述直接存储器访问装置。

12.根据权利要求1‑9任一所述的方法,其中,所述直接存储器访问装置包括指令虚拟通道存储单元,所述指令虚拟通道存储单元包括对应于多个通道的多个存储区域,在所述对象数据搬运指令存入所述指令虚拟通道存储单元之前,所述对象数据搬运指令还包括指示所述存储区域的标识信息的第四字段,所述方法还包括:

对所述对象数据搬运指令的第四字段进行译码,并根据译码后的所述标识信息将其存入所述指令虚拟通道存储单元中对应的所述存储区域。

13.根据权利要求1‑9任一所述的方法,其中,所述对象数据搬运指令还包括指示优先级的第五字段。

14.根据权利要求1‑9任一所述的方法,其中,所述对象数据搬运指令为寄存器型指令。

15.根据权利要求2‑6任一所述的方法,其中,所述数据搬运请求为遵循AXI总线协议的数据请求。

16.根据权利要求1‑9任一所述的方法,其中,所述对象数据搬运指令为遵循SCIE总线协议接口的指令。

17.一种控制直接存储器访问装置写入指令的方法,所述直接存储器访问装置耦合至接口解码器,第五数据搬运指令的第一字段指示针对所述直接存储器访问装置的有效数读取操作,所述第五数据搬运指令还包括指示有效数的第二字段,所述有效数指示所述直接存储器访问装置用于存储指令的空间大小,所述方法包括:

由所述接口解码器对所述第五数据搬运指令的第二字段进行译码,根据译码后的所述有效数控制对象数据搬运指令在所述直接存储器访问装置中的写入,所述对象数据搬运指令包括第一字段,所述对象数据搬运指令的第一字段指示针对神经网络处理器的数据搬运操作,所述对象数据搬运指令由所述直接存储器访问装置接收并执行,其中,所述对象数据搬运指令包括第二数据搬运指令,所述第二数据搬运指令还包括第二字段,所述第二数据搬运指令的第二字段指示对原始数据的切割的状态信息,要搬运的数据为根据第一运算关系对所述原始数据进行切割而得到的,或者所述对象数据搬运指令包括第三数据搬运指令,所述第三数据搬运指令还包括第二字段,所述第三数据搬运指令的第二字段指示对要搬运的数据进行填充操作的控制信息,或者所述对象数据搬运指令包括第四数据搬运指令,所述第四数据搬运指令还包括第二字段,所述第四数据搬运指令的第二字段指示已完成对全部或部分要搬运的数据的搬运的状态信息。

18.根据权利要求17所述的方法,其中,所述第五数据搬运指令为寄存器型指令。

19.根据权利要求17所述的方法,其中所述第五数据搬运指令为遵循SCIE总线协议接口的指令。

说明书 :

用于直接存储器访问装置的数据搬运方法

技术领域

[0001] 本公开涉及芯片领域,更具体地涉及一种用于直接存储器访问装置的数据搬运方法、控制直接存储器访问装置写入指令的方法。

背景技术

[0002] 在计算机系统中,经常需要在I/O内存、内存与内存之间交换数据。直接存储器访问(Direct Memory Access,DMA)技术是一种高速的数据传输方式,允许在外部设备和存储器之间、存储器与存储器之间等直接传输数据。DMA过程主要由硬件来实现,此时外部设备和内存之间进行数据交换不通过中央处理器(Central Processing Unit,CPU)的控制,而是利用系统总线,由DMA硬件控制器控制总线直接完成外部设备和内存之间的数据交换。

发明内容

[0003] 根据本公开的第一方面,提出了一种搬运数据的方法,用于神经网络处理器,所述神经网络处理器包括至少一个处理单元阵列,所述方法包括:接收第一指令,其中,所述第一指令指示要搬运的目标数据的地址信息,所述目标数据的地址信息基于所述目标数据与所述处理单元阵列中的至少一个处理单元之间的映射关系得到;根据所述目标数据的地址信息生成数据搬运请求;以及根据所述数据搬运请求针对所述神经网络处理器进行所述目标数据的搬运。
[0004] 在一些实施例中,在根据所述目标数据的地址信息生成所述数据搬运请求之前,所述方法还包括:对所述第一指令进行译码以得到所述目标数据的地址信息。
[0005] 在一些实施例中,所述第一指令还包括通道标识,所述通道标识指示所述神经网络处理器中的多个通道中的目标通道,所述方法还包括:对所述第一指令进行译码以得到所述通道标识;以及根据所述通道标识将所述第一指令写入目标存储区域,其中所述目标存储区域与所述目标通道具有对应关系。
[0006] 在一些实施例中,所述方法还包括:根据所述神经网络处理器发送的用于握手的信号,将所述第一指令从所述目标存储区域读出以用于生成所述数据搬运请求。
[0007] 在一些实施例中,由目标直接存储器访问装置接收所述第一指令并响应所述数据搬运请求,所述方法还包括:接收初始指令,对所述初始指令进行译码得到所述第一指令以及用于执行所述第一指令的所述目标直接存储器访问装置的DMA标识;以及根据所述 DMA标识将所述第一指令提供至所述目标直接存储器访问装置。
[0008] 在一些实施例中,所述初始指令还指示指令类型,所述方法还包括:对所述初始指令进行译码以在得到所述第一指令的过程中还得到所述指令类型;以及响应于所述指令类型为预设指令类型,将所述第一指令写入所述目标存储区域。
[0009] 在一些实施例中,还包括:响应于对所述第一指令的写入或读出,控制有效数的减少或增加,其中,所述有效数指示所述目标存储区域用于存储指令的空间大小。
[0010] 在一些实施例中,所述根据所述神经网络处理器发送的用于握手的信号,将所述第一指令从所述目标存储区域读出以用于生成所述数据搬运请求,包括:对所述多个通道进行轮询调度以选中所述目标通道;以及根据所述目标通道发送的用于握手的信号,将所述第一指令从所述目标存储区域读出以用于生成所述数据搬运请求。
[0011] 在一些实施例中,在将所述第一指令从所述目标存储区域读出之前,所述方法还包括:确定所述目标存储区域是否为空;以及响应于所述目标存储区域为非空,从所述目标存储区域读出所述第一指令。
[0012] 在一些实施例中,在将所述第一指令写入目标存储区域之前,所述方法还包括:确定所述目标存储区域是否为满;以及响应于所述目标存储区域为非满,将所述第一指令写入至所述目标存储区域。
[0013] 根据本公开的第二方面,提出了一种直接存储器访问装置,用于神经网络处理器,其中,所述神经网络处理器包括至少一个处理单元阵列,所述装置包括:接收单元,其配置为接收第一指令,其中,所述第一指令指示要搬运的目标数据的地址信息,所述目标数据的地址信息基于所述目标数据与所述处理单元阵列中的至少一个处理单元之间的映射关系得到;接口控制单元,其配置为根据所述目标数据的地址信息生成数据搬运请求,根据所述数据搬运请求针对所述神经网络处理器进行所述目标数据的搬运。
[0014] 在一些实施例中,所述接口控制单元还包括:第一译码单元,其配置为对所述第一指令进行译码以得到所述目标数据的地址信息。
[0015] 在一些实施例中,所述第一指令还包括通道标识,所述通道标识指示所述神经网络处理器中的多个通道中的目标通道,所述装置还包括:第二译码单元,其配置为对所述第一指令进行译码以得到所述通道标识;指令虚拟通道存储单元;以及指令写控制单元,其配置为根据所述通道标识将所述第一指令写入所述指令虚拟通道存储单元的目标存储区域,其中所述目标存储区域与所述目标通道具有对应关系。
[0016] 在一些实施例中,还包括:指令读控制单元,其配置为根据所述神经网络处理器发送的用于握手的信号,将所述第一指令从所述目标存储区域读出以用于生成所述数据搬运请求。
[0017] 在一些实施例中,由目标直接存储器访问装置接收所述第一指令并响应所述数据搬运请求,所述目标直接存储器访问装置耦合至接口解码器,所述接口解码器包括:第三译码单元,其配置为接收初始指令,对所述初始指令进行译码得到所述第一指令以及用于执行所述第一指令的所述目标直接存储器访问装置的DMA标识;以及根据所述DMA标识将所述第一指令提供至所述目标直接存储器访问装置。
[0018] 在一些实施例中,所述初始指令还指示指令类型,所述接口解码器还包括:第四译码单元,其配置为对所述初始指令进行译码以在得到所述第一指令的过程中还得到所述指令类型,响应于所述指令类型为预设指令类型,将所述第一指令写入所述目标存储区域。
[0019] 在一些实施例中,还包括:有效数记录单元,其配置用于响应于对所述第一指令的写入或读出,控制有效数的减少或增加,其中,所述有效数指示所述目标存储区域用于存储指令的空间大小。
[0020] 在一些实施例中,所述指令读控制单元还包括:轮询调度单元,其配置对所述多个通道进行轮询调度以选中所述目标通道;以及指令读控制模块,其配置为根据所述目标通道发送的用于握手的信号,将所述第一指令从所述目标存储区域读出以用于生成所述数据搬运请求。
[0021] 在一些实施例中,所述指令读控制单元还配置为:在将所述第一指令从所述目标存储区域读出之前,确定所述目标存储区域是否为空;以及响应于所述目标存储区域为非空,从所述目标存储区域读取所述第一指令。
[0022] 在一些实施例中,所述指令写控制单元还配置为:在将所述第一指令写入目标存储区域之前,确定所述目标存储区域是否为满;以及响应于所述目标存储区域为非满,将所述第一指令存储至所述目标存储区域。
[0023] 根据本公开的第三方面,提出了一种计算机系统,包括:根据本公开第二方面的任一所述直接存储器访问装置;以及所述神经网络处理器,其中,所述神经网络处理器与所述直接存储器访问装置电性耦合。
[0024] 在一些实施例中,还包括:接口解码器,其配置为接收初始指令且对所述初始指令进行译码以得到所述第一指令,并将译码得到的所述第一指令提供给所述直接存储器访问装置。
[0025] 在一些实施例中,还包括:辅助处理器,其配置用于提供所述初始指令到所述接口解码器。
[0026] 在一些实施例中,所述辅助处理器通过第一数据传输协议与所述接口解码器耦接,所述神经网络处理器通过第二数据传输协议与所述直接存储器访问装置耦接,所述第一数据传输协议和所述第二数据传输协议不同。
[0027] 根据本公开提供的用于直接存储器访问装置的数据搬运方法、控制直接存储器访问装置写入指令的方法可以简化DMA的硬件结构,提高神经网络数据处理系统的灵活性。

附图说明

[0028] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员而言,在没有做出创造性劳动的前提下,还可以根据这些附图获得其他的附图。以下附图并未刻意按实际尺寸等比例缩放绘制,重点在于示出本发明的主旨。
[0029] 图1示出了采用2×2的滤波器进行卷积运算的一个示意性示例;
[0030] 图2示出了一种神经网络处理器的架构示意图;
[0031] 图3示出了单个PE执行一维卷积运算的一个示意性示例;
[0032] 图4至图7示出了PE阵列中的至少部分PE执行二维卷积运算的一个示意性示例;
[0033] 图8和图9示出了对滤波器进行切割的一些方法的示意性示例;
[0034] 图10示出了RISC‑V指令集中R‑type指令的结构的示意图;
[0035] 图11概念性地示出了对本公开中的偏址信息的说明;
[0036] 图12概念性地示出了对本公开中的长度信息的说明;
[0037] 图13概念性地示出了对本公开中的DMA的通道信息的说明;
[0038] 图14概念性地示出了对本公开中的要搬运的数据的切割状态信息的说明;
[0039] 图15示出了根据本公开的第一类型指令的一个示例;
[0040] 图16示出了根据本公开的第二类型指令的一个示例;
[0041] 图17示出了根据本公开的第三类型指令的一个示例;
[0042] 图18示出了多段连续数据的一个示意性示例;
[0043] 图19示出了包括指示多段连续数据的起始地址和特征信息的编码的指令一个示例;
[0044] 图20示出了根据本公开的用于对多段连续数据进行搬运的指令的另一个示例;
[0045] 图21示出了应用本公开中的DMA的系统的一个示例架构图;
[0046] 图22示出了根据本公开的DMA架构的一个示例的结构示意图;
[0047] 图23示出了根据本公开的DMA架构的另一个示例的结构示意图。

具体实施方式

[0048] 下面将结合附图对本发明实施例中的技术方案进行清楚、完整地描述,显而易见地,所描述的实施例仅仅是本发明的部分实施例,而不是全部的实施例。基于本发明实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,也属于本发明保护的范围。
[0049] 如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。
[0050] 虽然本申请对根据本申请的实施例的系统中的某些模块做出了各种引用,然而,任何数量的不同模块可以被使用并运行在用户终端和/或服务器上。所述模块仅是说明性的,并且所述系统和方法的不同方面可以使用不同模块。
[0051] 本申请中使用了流程图用来说明根据本申请的实施例的系统所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,根据需要,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
[0052] 神经网络是受大脑神经元结构及神经传到原理启发建立的数学计算模型,基于这类模型实现智能计算的方式称为脑启发计算。例如,神经网络包括多种形式的网络结构,例如,反向传播(Back Propagation,BP)神经网络、卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LSTM)等,例如,卷积神经网络还可以细分为全卷积网络、深度卷积网络、U型网络(U‑Net)等。
[0053] 神经网络的卷积运算是对输入特征图和滤波器/卷积核做矩阵内积。图1示出了采用 2×2的滤波器进行卷积运算的一个示意性示例。如图1所示,滤波器F的尺寸为2×2的矩阵,输入特征图X的尺寸为3×3的矩阵,输入特征图X和滤波器F执行卷积运算后得到输出特征图O,输出特征图O的尺寸为2×2的矩阵,那么输出特征图O的卷积运算结果如下:
[0054] O11=F11X11+F12X12+F21X21+F22X22
[0055] O12=F11X12+F12X13+F21X22+F22X23
[0056] O21=F11X21+F12X22+F21X31+F22X32
[0057] O22=F11X22+F12X23+F21X32+F22X33
[0058] 由于神经网络的计算量,尤其是对于具有大尺寸的输入特征图的卷积层的计算量非常大,这通常需要将神经网络中的一个卷积层的计算操作进行分解。例如,对于同一卷积层的不同部分的卷积操作可以彼此独立进行,这些分解后的任务交由多个处理单元并行执行计算,之后再将这些处理单元的计算结果进行合并,得到整个卷积层的计算结果,然后该网络层的计算结果可以作为下一卷积层的输入。
[0059] 神经网络处理器(Neural‑network Processing Unit,NPU)是一类专用于人工智能(特别是人工神经网络、机器视觉、机器学习等)硬件加速的微处理器或计算系统,有时也被称为人工智能加速器(AI Accelerator)。
[0060] 图2示出了一种神经网络处理器的架构示意图,例如Eyeriss架构的神经网络处理器。如图2所示,该神经网络处理器包括处理单元(PE)阵列110、全局缓存120以及内存130。该处理单元阵列110包括多行和多列(例如12行×12列)处理单元,这些处理单元通过片上互联彼此耦接且共享全局缓存120,该片上互联例如为片上网络(NoC)。每个处理单元具有计算功能,并且例如还可以具有自身的局域缓存,例如包括乘累加器(MAC) 以及用于缓存输入的向量(或矩阵)的缓存或寄存器阵列。每个PE可以访问其周围的其他PE、该PE自身的本地缓存和全局缓存。全局缓存120进一步通过例如总线与内存130 耦接。
[0061] 在工作过程中,例如一个网络层(例如卷积层)计算所需的卷积核(Flt)、输入特征图(Ifm)等的数据从内存130读入到全局缓存120中,然后从全局缓存120,卷积核(Flt)、输入图像(Img)被输入到处理单元阵列110进行计算,对于不同图像像素的计算任务被分配到不同的处理单元(即进行映射)。在计算过程产生的部分累加和(Psum1)被暂存到全局缓存中,如果后续的计算中需要之前产生的部分累加和(Psum1)进行进一步的累加运算,则可以再从全局缓存120中将所需的部分累加和(Psum2)读入到处理单元阵列 110进行运算。完成一个卷积层的运算所得到的输出特征图(Ofm)可以从全局缓存120 中输出到内存130中在保存,例如可用于下一网络层(例如卷积层)的计算所使用。
[0062] 例如,对于处理单元阵列110产生的数据,特别是涉及稀疏矩阵的情况,可以将这些数据进行压缩存储;一种用于稀疏矩阵的压缩方式为RLC编码,RLC编码可以将将连续的0编码为0的个数,从而节约存储空间。当数据从处理单元阵列110存入内存130的过程中,可以使用编码器,对数据进行压缩编码;对应地,当数据从内存130读入处理单元阵列110的过程中,可以使用解码器,对数据进行解压缩。
[0063] 图3示出了单个PE执行一维卷积运算的一个示意性示例。如图3所示,滤波器的行和输入特征图的行为一维向量,在进行卷积运算过程中,滤波器权重保持不变,滑动输入特征图的窗口,依次通过乘法器/加法器(MAC)进行乘加运算得到乘加结果,通过整理所得的乘加结果可以得出输出特征图。
[0064] 图4至图7示出了PE阵列中的至少部分PE执行二维卷积运算的一个示意性示例。如图4所示,对尺寸为5×5的输入特征图和尺寸为3×3的滤波器执行卷积运算后得到尺寸为 3×3的输出特征图。在图4示出的卷积运算的示例中,输入特征图的行的数量为5,滤波器的行的数量为3,输出特征图的行的数量为3,因此可以采用尺寸为3×3的PE阵列来执行图4中示出的卷积运算。
[0065] 如图5所示,3×3的PE阵列中的每个PE可以执行如图3所示的一维卷积运算。PE 1、 PE 2和PE 3为3×3的PE阵列中的第一行,PE 1、PE 2和PE 3中的滤波器权重分别为滤波器的第一行、第二行、第三行。PE 1、PE 2和PE 3中的输入特征图特征值分别为输入特征图的第一行、第二行、第三行,PE 3中的乘加结果累加到PE 2中的乘加结果,PE 2 中的乘加结果累加到PE 1中的乘加结果,最后得到输出特征图的第一行。PE 4、PE 5和PE 6为3×3的PE阵列中的第二行,PE 4、PE 5和PE 6中的滤波器权重分别为滤波器的第一行、第二行、第三行,PE 4、PE 5和PE 6中的输入特征图特征值分别为输入特征图的第二行、第三行、第四行,PE 6中的乘加结果累加到PE 5中的乘加结果,PE 5中的乘加结果累加到PE 4中的乘加结果,最后得到输出特征图的第二行。PE 7、PE 8和PE 9为 3×3的PE阵列中的第三行,PE 7、PE 8和PE 9中的滤波器权重分别为滤波器的第一行、第二行、第三行,PE 7、PE 8和PE 9中的输入特征图特征值分别为输入特征图的第三行、第四行、第五行,PE 9中的乘加结果累加到PE 8中的乘加结果,PE 8中的乘加结果累加到PE 7中的乘加结果,最后得到输出特征图的第三行。
[0066] 图6和图7分别示意性地说明了图5中3×3的PE阵列在执行卷积运算过程中过滤器权重和输入特征图特征值的复用方式。如图6所示,滤波器权重的第一行、第二行、第三行依次分别在3×3的PE阵列的第一行、第二行、第三行水平地重复使用。如图7所示,输入特征图特征值的第二行在PE 4与其对角线位置处的PE 2之间重复使用,输入特征图特征值的第三行在PE 7与其对角线位置处的PE 5、PE 3之间重复使用,输入特征图特征值的第四行在PE 8与其对角线位置处的PE 6之间重复使用。
[0067] 通过以上的描述可知,Eyeriss架构的神经网络处理器中的PE阵列通过过滤器权重的行在PE之间水平地重复使用以及输入特征图特征值的行在PE的对角线之间重复使用,实现了行固定式(Row Stationary,RS)数据流。另外,通过以上的描述可知,在行固定式数据流中,输入特征图特征值的行和滤波器权重的行与PE阵列中的至少一个PE之间存在映射关系,例如,如图6和图7所示,输入特征图特征值的第一行和滤波器权重的第一行与PE 1存在映射关系、输入特征图特征值的第二行和滤波器权重的第二行与PE 4存在映射关系等,为了描述之方便,本文可以将上述映射关系记为输入特征图的映射关系或滤波器的映射关系或权重的映射关系等。
[0068] 为了实现本公开所描述的行固定式数据流,一种方案提出了对输入特征图以及滤波器进行切割,图8和图9示出了对滤波器进行切割的一些方法的示意性示例。图8中的801 示出了一个滤波器,其包括四个维度,分别为高度、长度、通道和数量维度,其中单个滤波器的高度的大小为R、长度的大小为S、通道的个数为C,滤波器的数量为M。图8中的802示出了对滤波器进行切割的方法,如802处所示,可以将第1个滤波器的通道C拆分成至少一个通道组,该通道组的通道个数为G,其中G<C。图8中的803示出了对滤波器进行切割的另一种方法,如803处所示,可以以第1个滤波器的高度和长度维度上的单个权重为基础逐个进行拆分,而每个拆分后滤波器的通道个数仍为C。图9中的901示出了一个二维滤波器,其包括高度R、长度S两个维度,该滤波器的尺寸为5×5。图9中的902示出了对滤波器进行切割的方法,如902处所示,可以以两个3×3的滤波器为基准将5×5的滤波器进行切割。图9中的903示出了对滤波器进行切割的另一方法,如903处所示,可以以1×5的滤波器或5×1的滤波器为基准将5×5的滤波器进行切割。
[0069] 可以使用一些算法对输入特征图或滤波器的数据进行切割,切割后的输入特征图或滤波器的部分数据具有本文所描述的输入特征图或滤波器的映射关系。
[0070] 直接存储器访问(Direct Memory Access,DMA)是指不通过中央处理器(Central Processing Unit,CPU)而直接与系统内存交互数据的接口技术,其常用于计算机体系中数据的搬运。在本公开中,实现DMA过程的硬件结构可以称为直接存储器访问装置或 DMA装置,为了描述之方便,DMA装置和DMA可以互换使用。滤波器或输入特征图的数据通常在存储器中以连续的方式存储,例如图8中的801的第1个滤波器的存储方式如下:先在通道方向依次存储(例如C0至Cn),然后在长度方向依次存储(例如S0至Sn) 从而形成图e中示出的“Z”形连续存储;最后在高度方向依次存储(例如R0至Rn)。
[0071] 在一些行固定式数据流的神经网络处理器(Neural‑Network Processing Unit,NPU)(例如上文中描述的Eyeriss架构的神经网络处理器)系统中,DMA需要根据输入特征图或滤波器的映射关系进行数据搬运。一些算法可以在各个维度上对输入特征图或滤波器的数据进行切割,得到的数据通常为不连续的,因此得到的数据具有复杂的输入特征图或滤波器的映射关系。若由DMA来解析输入特征图或滤波器的映射关系,并根据解析后的结果对输入特征图或滤波器的数据进行搬运,则需要较为复杂的DMA的硬件结构来执行该解析功能。
[0072] 为了解决上述技术问题,本公开提出了一种基于协处理器控制DMA的指令方案,通过协处理器执行一些算法来对输入特征图或滤波器的数据进行切割并输出指令,切割后的输入特征图或滤波器的部分数据具有输入特征图或滤波器的映射关系,DMA对协处理器输出的指令进行译码并根据译码结果来进行数据的搬运,从而简化了DMA的硬件结构并提高了神经网络处理器(例如RS型NPU)系统的灵活性。
[0073] 下面结合图10至图17对本公开中的指令的结构和组合进行描述。
[0074] RISC‑V指令集是一个基于精简指令集(Reduced Instruction Set Computing RISC,RISC) 原则的开源指令集架构。图10示出了RISC‑V指令集中R‑type指令(又称寄存器型指令) 的结构的示意图。如图10所示,R‑type指令的域为32比特,包括7比特的opcode、5比特的rd、3比特的func3、5比特的rs1、5比特的rs2和7比特的func7,其中opcode指示操作码,rd指示目的寄存器的编号,func3为可扩展的操作码/功能码,rs1指示第一源寄存器的编号,rs2指示第二源寄存器的编号,func7为可扩展的操作码/功能码。
[0075] 在RISC‑V指令集中,opcode用于指示指令的类型,R‑type指令的opcode为固定值 [0110011]。R‑type指令中的func3用于指示R‑type指令的不同功能,这些功能包括地址、逻辑、运算等,其中指示地址的R‑type指令的func3为固定值[000]。
[0076] 在本公开中,通过opcode和func3可以指示指令的类型为R‑type指令以及指令为指示地址的数据搬运指令,为了描述之方便,本文中指令指示的功能为地址的指令与数据搬运指令可以互换使用,例如func3指示的功能为地址的指令可以与数据搬运指令互换使用。
[0077] 在本公开中,可以用R‑type指令的func7中的一些比特(例如,三个比特)对数据搬运指令的类型进行编码。在一个示例中,可以用R‑type指令的func7中的三个比特对数据搬运指令的以下五种类型进行编码:
[0078] ①:对输入特征图的非压缩数据的请求;
[0079] ②:对滤波器的非压缩数据的请求;
[0080] ③:对滤波器的压缩数据的请求;
[0081] ④:读取对输入特征图的数据的请求的有效数;
[0082] ⑤:读取对滤波器的数据的请求的有效数。
[0083] 示例性地,对以上数据搬运指令的五种类型的编码如下:
[0084]
[0085]
[0086] 在本公开中,由DMA对数据搬运指令进行解析并根据解析后的信息执行该数据搬运指令的过程称为由DMA执行该数据搬运指令,而该数据搬运指令称为对象数据搬运指令。例如,这里的第①、②、③为对象数据搬运指令。如在本公开下文中即将描述的,由DMA 执行对象数据搬运指令可以实现对数据(例如输入特征图或滤波器的数据)的搬运,也可以实现对指令(例如本公开下文中即将描述的第二类型指令)的搬运。即,数据搬运指令可以实现对不同对象的搬运,既包括实现对数据的搬运,也包括实现对指令的搬运。
[0087] 在本公开中,数据搬运指令中5比特的rs1、rs2、rd分别指示第一源寄存器、第二源寄存器、目的寄存器的地址。在本公开中,第一源寄存器、第二源寄存器、目的寄存器中的至少一个可以采用至少部分比特来对与DMA根据输入特征图或滤波器的映射关系进行数据搬运相关联的信息进行编码。
[0088] 为了描述之方便,本文将DMA根据输入特征图或滤波器的映射关系进行数据搬运简称为数据搬运。
[0089] 在一个示例中,可以用32比特长的第一源寄存器来对数据搬运中要搬运的数据的地址信息进行编码。在本公开中,要搬运的数据的地址信息可以包括基址信息和偏址信息。图11概念性地示出了对本公开中的偏址信息的说明。如图11所示,滤波器的四个维度分别是长度R、宽度S、通道C、数量M,基址信息可以是该滤波器中的第一个权重(如图 11中第1个滤波器的第1个通道中左上角“黑色方框”所示)在存储器中的地址信息,这里的存储器可以是动态随机存取存储器(Dynamic Random Access Memory,DRAM)也可以是静态随机存取存储器(Static Random‑Access Memory,SRAM)。若要搬运的权重数据为第M个滤波器的第1个通道的数据,则偏址信息可以是滤波器中要搬运的权重中的第一权重(如图11中第M个滤波器的第1个通道中左上角“黑色方框”所示)在存储器中的地址信息,偏址信息可以指示滤波器中要搬运的权重中的第一个权重相对于基址处的权重的偏移信息。
[0090] 在另一个示例中,要搬运的数据的基址信息可以是预置的地址信息(例如通过软件来配置),而要搬运的数据的偏址信息可以通过协处理器执行一些算法来获得,这样第一源寄存器可以采用至少部分比特来对偏址信息进行编码而无需对基址信息进行编码,从而简化了编码方式,提高了DMA对数据搬运指令的译码效率。示例性地,使用第一源寄存器对本公开所描述的五种类型的数据搬运指令的偏址信息的编码方式如下:
[0091]
[0092] 在一个示例中,可以用第二源寄存器的至少部分比特来对除上文所描述的要搬运的数据的地址信息之外的其他与数据搬运相关联的信息进行编码。示例性,可以用32比特长的第二源寄存器中的部分比特(例如13比特)来对要搬运的数据的长度信息进行编码。
[0093] 图12概念性地示出了对本公开中的长度信息的说明。如图12所示,若要搬运的权重数据为第M个滤波器的第1个通道的数据,则长度信息为第M个滤波器的第1个通道的数据在存储器中长度,该长度信息可以反映为第M个滤波器的第1个通道的数据的长度,即要搬运的权重数据的第一个权重与最后一个权重(如图12中第M个滤波器的第1 个通道中右下角“黑色方框”所示)的长度信息。
[0094] 示例性地,使用第二源寄存器中的部分比特对本公开所描述的五种类型的数据搬运指令的长度信息的编码方式如下:
[0095]
[0096] 在另一个示例中,可以用第二源寄存器的至少部分比特来对执行数据搬运指令的 DMA的标识信息(ID)进行编码。在行固定式数据流的NPU系统中,可以使用多个DMA 来执行数据搬运的任务,例如数据搬运的第一任务可以由第一DMA来执行、数据搬运的第二任务可以由第二DMA来执行等等。
[0097] 示例性地,使用第二源寄存器中的部分比特对本公开所描述的五种类型的数据搬运指令的DMA ID的编码方式如下:
[0098]
[0099] 在又一个示例中,可以用第二源寄存器的至少部分比特来对执行数据搬运指令的 DMA中的通道信息进行编码。下面结合图13对本公开中的DMA的通道信息进行说明。
[0100] Eyeriss V2是行固定式数据流的神经网络处理器,其提出了如图13所示的架构。如图13所示,Eyeriss V2包括多个全局缓冲器(Global Buffer,GLB)和多个PE,每个GLB 用于存储DMA通过执行数据搬运指令而搬运的数据或指令,每个PE配置有GLB,PE和 GLB通过
2D网状网络连接在一起。DMA在执行数据搬运指令时,被搬运的数据或指令可以存储到不同的GLB或GLB集群。例如,被搬运的数据或指令可以存储到图13中A 处的GLB集群,也可以存储到图13中的B处的GLB集群;或者,被搬运的数据或指令可以存储到A处的GLB集群中的第一个GLB,也可以存储到A处的GLB集群中第二个 GLB等等。为了描述之方便,以下将可以存储被搬运的数据或指令的GLB或GLB集群简称为GLB。在该示例中,DMA在执行数据搬运指令时,被搬运的数据或指令可以存储到不同的GLB,其所对应的DMA中的数据通道也可以不同。
例如,被搬运的数据或指令可以存储到8个不同的GLB,DMA可以包括对应于这8个GLB的8个数据通道。这里的数据通道可以为本公开上文中所描述的DMA的通道。
[0101] 示例性地,使用第二源寄存器中的部分比特对本公开所描述的五种类型的数据搬运指令的通道信息的编码方式如下:
[0102]
[0103] 在又一个示例中,可以用第二源寄存器的至少部分比特来对数据搬运中的要搬运的数据的切割状态信息进行编码。
[0104] 下面结合图14来对本公开中的要搬运的数据的切割状态信息进行说明。如图14所示,在输入特征图的通道维度上,“C0”表示针对一个PE的数据搬运所做的切割的范围,“C1”表示针对一个PE集群的数据搬运所做的切割的范围,“C2”表示针对一个GLB 的数据搬运所做的切割的范围,“C3”表示针对本次数据搬运的任务所做的切割的范围。在本公开中,针对一次数据搬运的任务所要搬运的数据可以为原始数据,例如图14中示出的切割前的全部输入特征图数据可以为原始数据。输入特征图在其他维度上的切割与图 14中示出的在通道维度的切割类似,并且输出特征图和滤波器在其各项维度上的切割与输入特征图在其各项维度上的切割类似,这里不再赘述。本公开中的切割状态信息可以是对要搬运的数据在其至少一个维度上所做的最后一次切割的信息。示例性地,使用第二源寄存器中的4比特对多个维度上所做的最后一次切割的信息(记为_last)的编码如下:
[0105]
[0106] 在又一个示例中,可以用第二源寄存器的至少部分比特来对数据搬运中的要搬运的数据的操作信息进行编码。在本公开中,对要搬运的数据的操作信息可以为在对要搬运的数据执行数据搬运之前,对其执行操作以使操作后的数据适配于执行神经网络的运算的信息。在一个示例中,对要搬运的数据的操作信息可以为填充(Padding)操作的信息。示例性地,使用第二源寄存器中的4比特对填充操作的信息的编码如下:
[0107]
[0108] 在又一示例中,可以用第二源寄存器的至少部分比特来对数据搬运中的要搬运的数据的切割状态信息和操作信息进行联合编码。
[0109] 在该示例中,可以将第二源寄存器的部分比特作为切割状态信息和操作信息的识别码。例如,用第二源寄存器的8比特来对切割状态信息和操作信息进行联合编码,其中高位的4比特作为切割状态信息和操作信息的识别码,低位的4比特作为切割状态信息或操作信息的编码。示例性地,使用第二源寄存器中的8比特对数据搬运中的要搬运的数据的切割状态信息和操作信息进行联合编码的编码如下:
[0110]
[0111]
[0112] 在又一个示例中,可以用第二寄存器的至少部分比特对数据搬运中的搬运状态信息进行编码。
[0113] 在该示例中,搬运状态信息可以是针对要搬运的数据中的部分数据的搬运状态信息,也可以是针对要搬运的数据中的全部数据的搬运状态信息。例如,搬运状态信息可以包括向GLB搬运的数据已完成的信息,也可以包括数据搬运的任务已完成的信息。在该示例中,可以用第二寄存器的4比特来对搬运状态信息进行编码,例如,向GLB搬运的数据已完成的信息和/或数据搬运的任务已完成的信息可以被编码为0001。
[0114] 在又一示例中,可以用第二源寄存器的至少部分比特来对多个搬运状态信息进行联合编码。
[0115] 在该示例中,可以将第二源寄存器的部分比特作为各个搬运状态信息的识别码。例如,可以将第二源寄存器的其中2比特作为第一搬运状态信息(例如,向GLB搬运的数据已完成的信息)和第二搬运状态信息(例如,数据搬运的任务已完成的信息)的识别码。优选地,可以用R‑type指令中ACMD FLAG域的字段对第一搬运状态信息和第二搬运状态信息的识别信息进行编码。示例性地,使用第二源寄存器中的6比特来对第一搬运状态信息和第二搬运状态信息进行联合编码的编码如下:
[0116]
[0117] 在一个示例中,可以用目的寄存器的至少部分比特来对对输入特征图的数据的请求的有效数或对对滤波器的数据的请求的有效数进行编码。在该示例中,对数据的请求的有效数可以是对数据的请求的个数。例如,若有效数为5,则表示存在5个对数据的请求。
[0118] 示例性地,使用目的寄存器中的至少部分比特对本公开所描述的有效数的编码方式如下:
[0119]
[0120] 上述内容结合图10至图14对本公开中指令的结构和组合的编码方式进行了说明,下面继续结合图15至图17对本公开中指令的功能进行说明。
[0121] 本公开中的指令包括用于对要搬运的数据执行搬运的数据搬运指令和用于对控制信息执行搬运的数据搬运指令。为了描述之方便,本公开将用于对要搬运的数据执行搬运的数据搬运指令记为第一类型指令,将用于对控制信息执行搬运的数据搬运指令记为第二类型指令。
[0122] 图15示出了根据本公开的第一类型指令的一个示例。如图15所示,该指令为R‑type 指令(通过opcode为固定值[0110011]来指示),该指令为数据搬运指令(通过func3为固定值[000]来指示),该指令对应的数据搬运指令的类型为①(通过本公开中的func7的编码来指示)。该指令的第一源寄存器中的至少部分比特指示要搬运的数据的偏址信息,该指令中的第二源寄存器中的至少部分比特指示要搬运的数据的长度信息。在一个可选的示例中,第一类型指令还可以包括本公开上文描述的DMA的标识信息的编码和DMA中的通道信息的编码中的至少一个。示例性地,在图15示出的第一类型指令中,其第二源寄存器中的至少部分比特可以指示DMA的标识信息和/或DMA中的通道信息。
[0123] 图16示出了根据本公开的第二类型指令的一个示例。如图16所示,该指令为R‑type 指令(通过opcode为固定值[0110011]来指示),该指令为数据搬运指令(通过func3为固定值[000]来指示),该指令对应的数据搬运指令的类型为①(通过本公开中的func7的编码来指示)。该指令的第一源寄存器不再指示要搬运的数据的偏址信息,以及该指令中的第二源寄存器也不再指示要搬运的数据的长度信息。该指令的第二源寄存器中的至少部分比特指示本公开上文中描述的要搬运的数据的操作信息。在一个可选的示例中,第二类型指令还可以包括本公开上文描述的要搬运的数据的切割状态信息的编码和一个或多个搬运状态信息的编码中的至少一个。示例性,在图16示出的第二类型指令中,其第二源寄存器中的至少部分比特可以指示要搬运的数据的切割状态信息和/或一个或多个搬运状态信息。
[0124] 在一个可选的示例中,本公开中的第一类型指令和第二类型指令中的第二源寄存器的至少部分比特可以用来对第一类型指令和第二类型指令的优先级进行编码。在该示例中,指令的优先级指示指令的发送顺序,优先级高的指令发送顺位高,优先级低的指令发送顺位低。在该示例中,包括本公开上文中描述的要搬运的数据的操作信息的编码的第二类型指令以及包括本公开上文中描述的要搬运的数据的切割状态信息的编码的第二类型指令处于第一顺位的优先级,本公开中的第一类型指令处于第二顺位的优先级,包括本公开上文描述的一个或多个搬运状态信息的编码的第二类型指令处于第三顺位的优先级。
[0125] 在一个可选的示例中,第一类型指令可以包括指示搬运状态信息的编码。例如,第一类型指令可以包括本公开上文中所描述的第一搬运状态信息的编码。为了将包括指示搬运状态信息的编码的第一类型指令和不包括指示搬运状态信息的编码的第一类型指令进行区分,可以将该区分信息进行编码。示例性地,可以用第二源寄存器的4比特来对该区分信息进行编码,例如,包括指示搬运状态信息的编码的第一类型指令可以被编码为0010,不包括指示搬运状态信息的编码的第一类型指令可以被编码为0001。可选地,包括指示搬运状态信息的编码的第一类型指令的优先级低于不包括指示搬运状态信息的编码的第一类型指令的优先级。
[0126] 本公开的指令还包括用于读取本公开上文中所描述的有效数的数据搬运指令,为了描述之方便,可以将用于读取有效数的数据搬运指令记为第三类型指令。
[0127] 图17示出了根据本公开的第三类型指令的一个示例。如图17所示,该指令为R‑type 指令(通过opcode为固定值[0110011]来指示),该指令为数据搬运指令(通过func3为固定值[000]来指示),该指令对应的数据搬运指令的类型为④(通过本公开中的func7的编码来指示)。该指令中的目的寄存器中的至少部分比特指示本公开上文中所描述的有效数,该指令中第二源寄存器中的至少部分比特指示本公开上文中所描述的DMA ID。通过该指令可以读取相应DMA中存储的对数据的请求的个数。在另一个示例中,图17示出的第三类型指令中的第二源寄存器中的至少部分比特还指示本公开上文中所描述的通道 ID。
[0128] 在本公开的数据搬运中,要搬运的数据可以是一段连续数据,该段连续数据中的起始地址可以由本公开上文所描述的偏址信息确定,该段连续数据的大小可以由本公开上文所描述的长度信息确定。通过本公开上文所描述的第一类型指令和第二类型指令,可以实现对一段连续数据的搬运以及针对该段连续数据的控制信息的搬运。
[0129] 然而,本公开并不局限于此,在本公开的数据搬运中,要搬运的数据也可以是多段连续数据。下面结合图18至图20对本公开中的用于对多段连续数据进行搬运的指令的一个示例进行说明。
[0130] 图18示出了多段连续数据的一个示意性示例。如图18所示,第1段连续数据的起始地址为其第一个数据的地址,第1段连续数据共有四个数据,除去第一个数据后,剩余数据的长度信息为3个,因此第1段连续数据的长度信息为3;第2段连续数据的第一个数据的地址与第1段连续数据的最后一个数据的地址之间的间隔称为步长,第2段连续数据的长度信息与第1段连续数据的长度信息相同(即为3);第3段连续数据的第一个数据的地址与第2段连续数据的最后一个数据的地址之间的间隔也为步长,第3段连续数据的长度信息与第1段连续数据的长度信息相同(即为3);依次类推,共有N段连续数据。由图18可知,通过起始地址、长度、步长以及段数可以确定多段连续数据中每个数据的地址。
[0131] 在本公开的数据搬运中,为了实现对多段连续数据的搬运,需要对多段连续数据的起始地址和特征信息进行编码,图19示出了包括指示多段连续数据的起始地址和特征信息的编码的指令一个示例。
[0132] 如图19所示,该指令包括地址域和控制域,地址域可以用至少一个比特对多段连续数据的起始地址进行编码,控制域可以用多个比特对多段连续数据的特征信息进行编码,其中特征信息包括图18中示出的长度信息、步长信息、段数信息。
[0133] 在本公开中,包括指示多段连续数据的起始地址和特征信息的编码的指令可以是 R‑type指令。图20示出了根据本公开的用于对多段连续数据进行搬运的指令的另一个示例。
[0134] 如图20所示,该指令为R‑type指令(通过opcode为固定值[0110011]来指示),该指令为数据搬运指令(通过func3为固定值[000]来指示),该指令对应的数据搬运指令的类型为①(通过本公开中的func7的编码来指示)。该指令的第一源寄存器中的至少部分比特可以指示多段连续数据的偏址信息。例如,用第一源寄存器中的27比特对偏址信息进行编码。该指令的第二源寄存器中的至少部分比特可以指示本公开结合图18所描述的长度信息。例如,用第二源寄存器中的8比特对长度信息进行编码。该指令的第二源寄存器中的至少部分比特可以指示本公开结合图18所描述的段数信息。例如,用第二源寄存器中的5比特对段数信息进行编码。在该示例中,可以使用该指令的第一源寄存器中的部分比特和第二源寄存器中的部分比特对本公开结合图18所描述的步长信息进行编码。例如用第一源寄存器中的
5比特作为步长信息的高位编码,用第二源寄存器中8比特作为步长信息的低位编码。通过联合使用第一源寄存器中的部分比特和第二源寄存器中的部分比特的方式对步长信息进行编码可以充分利用源寄存器资源。
[0135] 在一个可选的示例中,上述结合图19和图20所描述的指令还可以包括指示本公开上文中所描述的DMA ID和通道ID中的至少一个的编码。
[0136] 为了形成一套完整的指令集,可以使用R‑type指令中的ACDM FLAG字段的2比特对本公开中的指令进行编码。举例而言,以下四种指令:用于对要搬运的数据执行搬运的数据搬运指令、用于对控制信息执行搬运的数据搬运指令、用于对要搬运的数据为多段连续数据执行搬运的数据搬运指令、包含指示第二搬运状态信息(例如,数据搬运的任务已完成的信息)的编码的数据搬运指令,其对应的ACDM FLAG字段的编码如下:
[0137]
[0138] 以上对本公开中的指令进行了描述,本公开提出了一种基于协处理器控制DMA的指令方案,通过协处理器执行一些算法来对输入特征图或滤波器的数据进行切割并输出指令,切割后的输入特征图或滤波器的部分数据具有输入特征图或滤波器的映射关系,DMA对协处理器输出的指令进行译码并根据译码结果来进行数据的搬运,从而简化了DMA的硬件结构并提高了RS NPU系统的灵活性。
[0139] 如本公开上文所述,在复杂的行固定式数据流的NPU系统中,DMA需要根据数据的映射关系进行数据搬运。由于该NPU系统中数据的不连续性以及映射关系的复杂性,若根据数据的具体映射关系设计相应的DMA硬件结构来执行数据搬运,则导致DMA的硬件结构将极为复杂,并且根据数据的某一映射关系设计的DMA硬件结构将会固化数据的映射关系导致该NPU系统不灵活。
[0140] 为了解决上述技术问题,本公开提出了一种基于协处理器的DMA方案,通过协处理器执行一些算法来对输入特征图或滤波器的数据进行切割并输出指令,切割后的输入特征图或滤波器的部分数据具有输入特征图或滤波器的映射关系,DMA对协处理器输出的指令进行译码并根据译码结果来进行数据的搬运,从而简化了DMA的硬件结构并提高了 RS NPU系统的灵活性。
[0141] 图21示出了应用本公开中的DMA的系统的一个示例架构图。如图21所示,该系统包括内存、DMA和神经网络处理器,内存用于存储神经网络的数据,例如卷积核或输入特征图,内存可以为片外的DRAM也可以为片上的SRAM。神经网络处理器可以为本公开中结合图2或图13所描述的神经网络处理器,该神经网络处理器包括片上网络和多个 PE阵列,这些PE阵列通过片上网络互联。DMA可以通过总线连接神经网络处理器内部的片上网络以及PE阵列,负责内存与神经网络处理器中的PE阵列之间的数据搬运。
[0142] 图22示出了根据本公开的DMA架构的一个示例的结构示意图。如图22所示,DMA 包括指令读控制单元、指令写控制单元、指令虚拟通道存储单元、接口控制单元。指令写控制单元用于将接收到的第一指令写入指令虚拟通道存储单元,该第一指令指示要搬运的目标数据的地址信息,而目标数据的地址信息是基于目标数据与神经网络处理器的PE阵列中的至少一个PE之间的映射关系得到,例如目标数据具有本公开中所描述的输入特征图或滤波器的映射关系。在该示例中,目标数据的地址信息为目标数据在内存中的地址信息。在另一示例中,该第一指令可以为本公开结合附图15所描述的第一类型指令。指令虚拟通道存储单元用于存储第一指令,其可以为SRAM。指令读控制单元用于根据通道的状态信息将第一指令从指令虚拟通道存储单元读入至接口控制单元。例如,若通道处于空闲状态,则可以将第一指令取出并传送至接口控制单元;若通道处于繁忙状态,则禁止将第一指令取出。接口控制单元用于根据目标数据的地址信息生成数据搬运请求,并将该数据搬运请求传送至片上网络,片上网络根据该数据搬运请求从内存中搬运目标数据至接口控制单元,接口控制单元再将该目标数据传输至对应通道的后级模块(例如GLB)。
[0143] 图23示出了根据本公开的DMA架构的另一个示例的结构示意图。如图23所示,SCIE (扩展版串行通信接口的英文缩写)解码器处于协处理器时钟域,协处理器通过SCIE总线接口输出指令。需要认识到,协处理器输出的指令可以是本公开上文中所描述的指令。示例性地,协处理器输出的指令可以是本公开结合附图15所描述的第一类型指令,其中该第一类型指令的第二源寄存器的部分比特还指示DMA ID和DMA中的通道ID。示例性地,协处理器输出的指令也可以是本公开结合附图17所描述的第三类型指令,其中该第三类型指令的第二源寄存器的部分比特还指示DMA中的通道ID。为了描述之方便,本公开下文中将这里的该第一类型指令记为指令1,将该第三类型指令记为指令3。
[0144] SCIE解码器包括第一指令解码器(例如可以对应于本公开中的第四译码单元),协处理器输出的指令1或指令3被传输至第一指令解码器。第一指令解码器用于对指令1或指令3进行第一层解码,用于判断协处理器输出的指令是否为预设类型以及输出的指令是读指令还是写指令。示例性地,第一指令解码器可以用于判断协处理器输出的指令是否为 R‑type的数据搬运指令。在该示例中,第一指令解码器通过对指令1或指令3中的opcode 字段和func3字段进行译码,得到指令1或指令3为R‑type的数据搬运指令。第一指令解码器还可以用于判断指令是读指令还是写指令,若第一指令解码器的译码结果为协处理器输出的指令为本公开上文中所描述的第①或②或③种类型的数据搬运指令,则指令为写指令;若第一指令解码器的译码结果为协处理器输出的指令为本公开上文中所描述的第④或⑤种类型的数据搬运指令,则指令为读指令。在该示例中,第一指令解码器通过对指令1 或指令3中的func7字段进行译码,得到指令1为写指令,指令3为读指令。
[0145] SCIE解码器还可以包括指令先进先出队列(First Input First Output,FIFO)和有效数解码器,若第一指令解码器的译码结果为协处理器输出的指令为预设类型以及输出的指令是写指令,则将解码后的指令写入指令FIFO;若第一指令解码器的译码结果为协处理器输出的指令为预设类型以及输出的指令是读指令,则根据解码后的读指令读取DMA中的有效数计数器的数值。示例性地,第一指令解码器对指令1中的func7字段进行译码后,可以将译码后的指令1写入指令FIFO;第一指令解码器对指令3中的func7字段进行译码后,SCIE解码器可以根据译码后的指令3读取DMA中有效数计数器的数值,并通过有效数解码器对读取的有效数进行译码,从而得到DMA中的一个或多个通道中可写入的写指令个数(即本公开上文中的对数据的请求的个数)。
[0146] 在协处理器时钟域,指令FIFO中每写入一个写指令,可以控制DMA中的有效数计数器减1。例如,译码后的指令1写入指令FIFO时,可以控制有效数计数器减1。若SCIE 解码器解析出指令3的有效数为0(即DMA没有继续存入指令的空间),则译码后的指令1需要等待写入指令FIFO,直至解析出有效数为不为0(即DMA存在继续存入指令的空间)才将译码后的指令1写入指令FIFO。
[0147] SCIE解码器还包括第二指令解码器(例如可以对应本公开中的第三译码单元),指令FIFO可以将译码后的指令1传输至第二指令解码器。第二指令解码器可以对指令进行第二层解码,用于判断指令被传输至哪个DMA。在该示例中,第二指令解码器通过对指令1中的指示DMA ID的字段进行译码,得到指令1将被写入哪个DMA的信号。图23 中的DMA是根据译码后的DMA ID而确定的。第二指令解码器对指令1进行译码后,可以将译码后的指令1传输至第三指令解码器。
[0148] 图23中的DMA处于NPU时钟域,第三指令解码器(例如可以对应本公开中的第二译码单元)位于DMA中。由于DMA与协处理器处于不同的时钟域,SCIE解码器中的指令FIFO可以使用异步FIFO进行指令同步。第三指令解码器可以对指令进行第三层解码,用于判断指令被写入DMA中的哪个通道。在该示例中,第三指令解码器通过对指令1中的指示通道ID的字段进行译码,得到指令1将被写入DMA中的哪个通道。
[0149] DMA还包括指令写控制模块和指令虚拟通道存储单元。指令虚拟通道存储单元包括对应于每个通道的存储区域。如图23所示,DMA包括通道1、通道2、通道3、通道4、通道5、通道6、通道7、通道8共八个通道,每个通道对应本公开中上文所描述的GLB。 DMA用于分别在对应的通道上向GLB搬运数据,指令虚拟通道存储单元包括八个存储区域,每个存储区域用于存储对应通道上的写指令。例如若DMA用于在通道1上向GLB#1 搬运数据,则存储区域#1存储通道1上的写指令;若DMA用于在通道2上向GLB#2搬运数据,则存储区域#2存储通道2上的写指令等等。指令写控制模块用于根据第三指令解码器的译码结果将译码后的指令写入到指令虚拟通道存储单元中对应通道的存储区域。例如,若第三指令解码器的译码结果为通道1,则指令写控制模块可以将译码后的指令1 写入指令虚拟通道存储单元中对应于通道1的存储区域#1。
[0150] 在一个可选的示例中,指令写控制模块可以对写入地址进行控制。指令虚拟通道存储单元中每个存储区域的起始地址和终止地址可以通过DMA中的配置单元进行配置。在该示例中,配置单元处于外围总线(Advanced Peripheral Bus,APB)时钟域,其通过APB 接口进行交互。若指令写控制模块从一个存储区域中的一个写入地址成功写入一条指令,则指令写控制模块可以控制写入地址加1以便下次从该存储区域的下一个写入地址写入指令。当写入地址到达该存储区域的终止地址后,指令写控制模块可以控制写入地址翻转以便下次从该存储区域的起始地址写入指令。
[0151] 在一个可选的示例中,指令写控制模块还可以对指令虚拟通道存储单元中对应通道的存储区域是否为满进行判断。若对应通道的存储区域已满(即没有再次存储写指令的地址空间),则输出对应通道已满的信号,可选地,若对应通道的存储区域已满且仍有写请求,则输出错误信号。若对应通道的存储区域未满(即有再次存储写指令的地址空间),则输出写使能信号(记为wr_en),指令虚拟通道存储单元可以根据写使能信号将译码后的指令写入到对应通道的存储区域。例如,若第三指令解码器的译码结果为通道1且指令写控制模块输出了写使能信号,则指令写控制模块可以将译码后的指令1写入指令虚拟通道存储单元中对应于通道1的存储区域#1。至此,DMA完成了对指令1的写入,指令1 写入指令虚拟通道存储单元的数据流如图23中的α虚线所示。
[0152] 下面继续结合图23对指令1的读取过程进行说明。
[0153] DMA还包括轮询调度模块和指令读控制模块。轮询调度模块用于确定从指令虚拟通道单元中的哪个通道读取写入的写指令,轮询调度模块可以产生通道标签信号(ch_tag),并将通道标签信号传输至指令读控制模块。指令读控制模块根据通道标签读取指令虚拟通道存储单元中对应通道的写指令。例如,指令1被写入至指令虚拟通道存储单元中通道1 对应的存储区域#1,若轮询调度模块产生的信号为通道1标签信号,则指令读控制模块可以从存储区域#1中读取指令1。
[0154] 指令读控制模块可以对读取地址进行控制。指令虚拟通道存储单元中每个存储区域的起始地址和终止地址可以通过DMA中的配置单元进行配置。若指令读控制模块从一个存储区域中的一个读取地址成功读出一条指令,则指令读控制模块可以控制读取地址加1 以便下次从该存储区域的下一个读取地址读取指令。当读取地址到达该存储区域的终止地址后,指令读控制模块可以控制读取地址翻转以便下次从该存储区域的起始地址读取指令。
[0155] 在一个可选的示例中,指令读控制模块还可以根据通道标签信号对指令虚拟通道存储单元中对应通道的存储区域是否为空进行判断,若对应通道的存储区域没有可读取的指令,则返回指令为空的信号,可选地,若对应通道的存储区域为空且仍有读请求,则输出错误信号;若对应通道的存储区域有可读取的指令,则返回读使能信号(记为rd_en),轮询调度模块可以根据读使能信号对要读取指令的通道进行选择。
[0156] 指令读控制模块每次成功从指令虚拟通道存储单元读取一条指令,可以控制有效数计数器加1。示例性地,指令读控制模块每次成功读取一条指令,可以产生有效数递增信号(记为credit_add),然后通过同步器将该credit_add信号同步至有效数计数器以使有效数计数器的数值加1。在图23的示例中,通过动态调整有效数计数器的数值可以实时反应指令虚拟通道存储单元中存储区域的可用空间大小,降低了指令写入的错误率,提高了 NPU系统的性能。
[0157] DMA还包括AXI接口控制模块,轮询调度模块受AXI接口控制模块反馈的后级模块(如在图23示例中的GLB)握手信号和AXI握手信号控制,这些握手信号用于指示通道的状态以及切换时机。示例性地,若当前通道1上正在进行数据搬运,这表示当前通道 1不是空闲状态,则通道1上不会有用于握手的信号(例如有效AXI请求)产生;若当前通道1上已经完成数据搬运任务或者当前通道1处于空闲状态,则通道1可以产生用于握手的信号。示例性地,若当前AXI接口控制模块正在进行数据处理(下文即将详细描述),则不会有用于握手的信号(例如有效AXI请求)产生;若当前AXI接口控制模块处于空闲状态,则可以产生用于握手的信号。
[0158] 指令读控制模块可以从指令虚拟通道存储单元读取指令至AXI接口控制模块,AXI 接口控制模块接收到从指令虚拟通道存储单元读出的指令后,会对该指令进行第四层解码 (例如对应本公开中的第一译码单元),用于将AXI接口控制模块的后级模块(例如在图23示例中的GLB)需要的数据内容提取出来并根据提取的数据内容进行转换操作,可以同时产生与提取的数据内容对应的AXI请求。在该示例中,AXI接口控制模块接收到指令1后,通过对指令1中指示偏址信息和长度信息的字段进行译码,得到要搬运的数据的地址信息,然后AXI接口控制模块根据该要搬运的数据的地址信息进行突发长度(Burst Length)控制、跨4K地址检查等操作,同时产生对应的AXI请求。至此,DMA完成了对指令1的读取并将指令1转换成NPU系统可以识别的AXI请求。
[0159] DMA可以将AXI请求传输至片上网络,片上网络根据AXI请求可以从SRAM读取要搬运的数据并进行数据搬运,或者可以从DRAM读取要搬运的数据并进行数据搬运。从SRAM或DRAM向对应通道的GLB搬运数据的数据流如图23中的γ虚线所示。
[0160] DMA还包括处于APB时钟域的中断控制模块。在所有要搬运的数据和/或指令传输完成后,AXI接口控制模块可以产生传输完成信号(记为trans_done)表示任务完成。中断控制模块根据接收到的传输完成信号产生中断信号并输出。DMA还包括处于APB时钟域的性能监测器,用于对DMA的性能进行测试。
[0161] 在本公开中,图23中示出的DMA对本公开中的第二类型指令的写入和读取过程与对指令1的写入和读取过程类似,其区别之处在于:第二类型指令在从指令虚拟通道存储单元读出之后,直接传送至DMA的后级模块(例如GLB)而无需将第二类型指令转换成 AXI请求,从而实现对第二类型指令所载的信息(例如本公开上文中所描述的控制信息或状态信息)的传输。
[0162] 本申请使用了特定词语来描述本申请的实施例。如“第一/第二实施例”、“一实施例”、和/或“一些实施例”意指与本申请至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一替代性实施例”并不一定是指同一实施例。此外,本申请的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
[0163] 此外,本领域技术人员可以理解,本申请的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本申请的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本申请的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
[0164] 除非另有定义,这里使用的所有术语(包括技术和科学术语)具有与本发明所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非这里明确地这样定义。
[0165] 上面是对本发明的说明,而不应被认为是对其的限制。尽管描述了本发明的若干示例性实施例,但本领域技术人员将容易地理解,在不背离本发明的新颖教学和优点的前提下可以对示例性实施例进行许多修改。因此,所有这些修改都意图包含在权利要求书所限定的本发明范围内。应当理解,上面是对本发明的说明,而不应被认为是限于所公开的特定实施例,并且对所公开的实施例以及其他实施例的修改意图包含在所附权利要求书的范围内。本发明由权利要求书及其等效物限定。