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

数据处理方法、装置、计算机设备和存储介质与流程

2022-06-05 15:47:16 来源:中国专利 TAG:


1.本公开涉及计算机技术领域,尤其涉及一种数据处理方法、装置、计算机设备和存储介质。


背景技术:

2.随着计算机技术的发展,神经网络(neural networks)也有了显著的进步,可以通过特定或者通用的处理器进行神经网络运算。相关技术中,在神经网络中数据类型多、运算量大、硬件限制等因素的影响下,神经网络运算的速度受到了很大限制。


技术实现要素:

3.有鉴于此,本公开提出了一种数据处理方法、装置、计算机设备和存储介质。
4.根据本公开的一方面,提供了一种数据处理方法,应用于多核处理器,所述多核处理器包括多个计算核簇,每个计算核簇包括多个计算核,所述方法包括:
5.获取第一数据和所述第一数据的标签信息,所述标签信息包括动态标签信息,所述动态标签信息包括拆分索引、目标存储空间的标识信息;
6.根据所述拆分索引将所述第一数据拆分为多个第二数据;
7.根据所述目标存储空间的标识信息,将所述多个第二数据分别存储至对应的目标存储空间,
8.其中,所述动态标签信息用于表征所述第一数据与所述多核处理器相关联的信息。
9.根据本公开的另一方面,提供了一种数据处理装置,应用于多核处理器,所述多核处理器包括多个计算核簇,每个计算核簇包括多个计算核,所述装置包括:
10.获取模块,获取第一数据和所述第一数据的标签信息,所述标签信息包括动态标签信息,所述动态标签信息包括拆分索引、目标存储空间;
11.拆分模块,根据所述拆分索引将所述第一数据拆分为多个第二数据;
12.存储模块,将根据所述目标存储空间的标识信息,将所述多个第二数据分别存储至对应的目标存储空间,
13.其中,所述动态标签信息用于表征所述第一数据与所述多核处理器相关联的信息。
14.根据本公开的另一方面,提供了一种机器学习运算装置,所述装置包括:
15.一个或多个上述数据处理装置,用于从其他处理装置中获取待运算数据和控制信息,并执行指定的机器学习运算,将执行结果通过i/o接口传递给其他处理装置;
16.当所述机器学习运算装置包含多个所述数据处理装置时,所述多个所述数据处理装置间可以通过特定的结构进行连接并传输数据;
17.其中,多个所述数据处理装置通过快速外部设备互连总线pcie总线进行互联并传输数据,以支持更大规模的机器学习的运算;多个所述数据处理装置共享同一控制系统或
拥有各自的控制系统;多个所述数据处理装置共享内存或者拥有各自的内存;多个所述数据处理装置的互联方式是任意互联拓扑。
18.根据本公开的另一方面,提供了一种组合处理装置,所述组合处理装置包括:
19.如上述机器学习运算装置、通用互联接口和其他处理装置;
20.所述机器学习运算装置与所述其他处理装置进行交互,共同完成用户指定的计算操作,
21.其中,所述组合处理装置还包括:存储装置,该存储装置分别与所述机器学习运算装置和所述其他处理装置连接,用于保存所述机器学习运算装置和所述其他处理装置的数据。
22.根据本公开的另一方面,提供了一种芯片,所述芯片包括上述组合处理装置。
23.根据本公开的另一方面,提供了一种板卡,所述板卡包括:存储器件、接口装置和控制器件以及如上述芯片;
24.其中,所述数据处理装置与所述存储器件、所述控制器件以及所述接口装置分别连接;
25.所述存储器件,用于存储数据;
26.所述接口装置,用于实现所述数据处理装置与外部设备之间的数据传输;
27.所述控制器件,用于对所述数据处理装置的状态进行监控,
28.其中,所述存储器件包括:多组存储单元,每一组所述存储单元与所述数据处理装置通过总线连接,所述存储单元为:ddr sdram;
29.所述数据处理装置包括:ddr控制器,用于对每个所述存储单元的数据传输与数据存储的控制;
30.所述接口装置为:标准pcie接口。
31.根据本公开的另一方面,提供了数据处理装置,所述装置包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时,实现如上述数据处理方法。
32.根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述数据处理方法。
33.本公开实施例所提供的数据处理方法、装置和存储介质,该方法包括:获取第一数据和第一数据的标签信息,标签信息包括动态标签信息,动态标签信息包括拆分索引、目标存储空间;根据拆分索引将第一数据拆分为多个第二数据;根据目标存储空间的标识信息,将多个第二数据分别存储至对应的目标存储空间,其中,动态标签信息用于表征第一数据与多核处理器相关联的信息。本公开的方法可以在确定第一数据及其动态标签之后,基于动态标签信息中的拆分索引、目标存储空间的标识信息对第一数据进行拆分、布局存储,使得第二数据能够适配多核处理器的多个内存通道,以便利用多核处理器中的多个计算核执行运算操作,提高了神经网络运算的处理效率和速度。
34.根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
35.包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
36.图1a示出根据本公开一实施例的计算机设备的框架示意图。
37.图1b、图1c示出根据本公开一实施例的多核处理器架构示意图。
38.图1d、图1e示出根据本公开一实施例的计算核簇的架构示意图。
39.图2示出根据本公开一实施例的数据处理方法的流程图。
40.图3示出根据本公开一实施例的第一数据包的示意图。
41.图4示出根据本公开一实施例的数据处理方法的流程图。
42.图5示出根据本公开一实施例的多核处理器1的架构示意图。
43.图6a示出根据本公开一实施例的多核处理器1执行运算指令a的运算任务分配示意图。
44.图6b、6c示出根据本公开一实施例的多核处理器1执行运算指令a的过程示意图。
45.图7示出根据本公开一实施例的数据处理装置的框图。
46.图8是示出根据本公开实施例的一种组合处理装置1200的结构图。
47.图9是示出根据本公开实施例的一种板卡1300的结构示意图。
具体实施方式
48.以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
49.在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
50.另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
51.本发明的数据处理方法可以应用于图1a所示的计算机设备中,该计算机设备可以包括主机101、设备102、主机内存103及设备内存104。主机101可以是通用处理器,设备103可以是神经网络加速器,但本发明不限制主机101与设备103的种类。该数据处理方法中数据流向是:主机101将主机内存103上的输入数据搬移到设备内存104;设备102从设备内存104读入输入数据,按照指令完成计算;设备102将计算结果写回设备内存104;主机101将设备内存104中的输出数据搬移到主机内存103。
52.随着计算机技术及大数据的发展,多核处理器逐渐成为主流,本实施例中的设备102可以是多核处理器,该多核处理器可以根据使用需要设置不同的架构。举例来说,多核处理器中可以包含多个计算核簇,每个计算核簇可以包括至少一个计算核,每个计算核簇可以设置有指定的存储器。图1b、图1c示出根据本公开一实施例的多核处理器架构示意图。图1d、图1e示出根据本公开一实施例的计算核簇的架构示意图。多核处理器可以为对称多处理器(symmetrical multi-processing,简称smp)架构,如图1b所示,假定该对称多处理器包括四个计算核簇(cluster)和四个存储器(片外设备内存)。计算核簇中的计算核
(core)可以通过路由节点r访问存储器。其中,4个存储器分别为对应的4个计算核簇的“本地存储器”,但由于其对称设置,每个计算核簇中计算核在访问4个存储器时均需要经过两个路由节点r,在不发生拥挤的情况下,访问任何一个存储器的速率是相同的。例如,图1b中计算核簇x的“本地存储器”即为存储器a,在进行数据存取的过程中计算核簇x所对应的数据优先存储于“本地存储器”,计算核簇和其对应的“本地存储器”之间设置有对应的内存通道,以使得计算核簇可以通过该内存通道访问自身的“本地存储器”。这样,可以降低不同计算核簇中的计算核访问同一个存储器的几率。
53.多核处理器也可以为非统一对称存储访问(non uniform memory access architecture,简称numa)架构,如图1c所示,假定非统一对称存储访问的多核处理器包括四个计算核簇和四个存储器。计算核簇中的计算核(core)可以通过路由节点r访问存储器。其中,4个存储器分别为对应的4个计算核簇的“本地存储器”,但由于其非对称设置,在不发生拥挤的情况下,每个计算核簇中计算核在访问其对应的“本地存储器”(如图1c中计算核簇n中的计算核访问存储器s)时,仅需要经过一个路由节点r,如计算核簇n中的计算核在访问存储器s的时候仅需要经过一个路由节点r,访问速率最快;每个计算核簇中计算核在访问其他非“本地存储器”需要经过至少两个路由节点r,访问速率慢。
54.可选地,在计算核簇设置多个计算核时,计算核簇中的组织架构也可以根据需要设置。计算核簇的架构可以是总线竞争型,如图1d所示,假定计算核簇中包括4个计算核,每个计算核均可以通过路由节点r进行存储器的访问。计算核簇的架构还可以是共享缓存型,如图1e所示,假定计算核簇中包括四个计算核,且设置有对应该计算核簇的核外缓存,计算核簇中的四个计算核共享该核外缓存。计算核簇中的每个计算核可以直接访问核外缓存且可以通过路由节点r访问存储器。
55.而为了实现神经网络运算任务等大数据量任务的加速,利用多核处理器进行运算时,一般会采用数据并行、模型并行和混合并行的方式进行具体的计算处理。数据并行是指不同的计算核处理同一神经网络的不同输入数据,相当于并行计算同一神经网络的多批次输入数据。模型并行是指不同的计算核处理同一神经网络同一输入数据的不同部分,也就是将神经网络中的各算子和数据进行拆解,每个计算核处理拆解后的一部分,相当于整个加速器并行处理一份输入数据。混合并行是指数据并行与模型并行的组合,比如计算核簇内使用模型并行,计算核簇间使用数据并行。但在多核处理器利用上述三种方式执行运算任务时,如何对算子、数据进行拆分、规划数据的存储位置,以保证运算任务的高效执行就是亟待解决的技术问题。
56.本公开提供一种数据处理方法,在实际执行神经网络运算任务之前,主机可以预先获取到第一数据以及第一数据的动态标签信息,而后根据动态标签信息中的拆分索引将第一数据拆分为多个第二数据,并根据动态标签信息中的目标存储空间的标识信息将多个第二数据分别存储至对应的目标存储空间,实现了针对第一数据的布局存储,使得多核处理器在执行运算任务时可以直接获取第二数据进行相关运算,提高了运算任务的处理效率和速度。本公开的数据处理方法具体可参见下文的描述。可选地,运行在主机中的编译器可以实现上述的数据处理方法。
57.图2示出根据本公开一实施例的数据处理方法的流程图。如图2所示,该方法应用于多核处理器,所述多核处理器包括多个计算核簇,每个计算核簇包括多个计算核,该方法
包括步骤s11至步骤s13的“标签使用步骤”。
58.在步骤s11中,获取第一数据和所述第一数据的标签信息,所述标签信息包括动态标签信息,所述动态标签信息包括拆分索引、目标存储空间的标识信息。
59.可选地,本公开的方法可以首先遍历神经网络的计算图,该神经网络的计算图可以包括至少一个数据节点(即第一数据),并分别确定该神经网络中各个第一数据的标签信息,该第一数据的标签信息可以包括动态标签信息和静态标签信息,并将该第一数据的标签信息绑定至相应的第一数据。进一步地,本公开的方法可以根据第一数据的标签信息对上述的神经网络进行处理。例如,根据第一数据的标签信息生成多核处理器可以执行的硬件指令,以使得多核处理器根据该硬件指令对神经网络进行相应的处理。
60.其中,静态标签信息可以用于表征所述第一数据参与所述神经网络运算相关联的信息,其可以包括以下至少一项:数据类别、静态数据类型、静态数据维度、静态数据维度顺序以及对应每个静态数据维度的维度值等信息。所述动态标签信息用于表征所述第一数据与所述多核处理器相关联的信息,其可以根据多核处理器的架构具体确定。动态标签信息可以包括以下至少一项:动态数据类型、动态数据维度顺序、分片参数、填充参数和数据尺寸、拆分索引、目标存储空间的标识以及目标交换层级等信息。该静态标签信息和动态标签信息的确定过程具体可参见下文的描述,此处不再赘述。
61.具体地,第一数据可以是参与神经网络运算的各种数据类别的数据,如:输入神经元(input neuron)、输出神经元(output neuron)、隐藏神经元(hidden neuron)、常量神经元(constant neuron)、输入权值(input weight)、输出权值(output weight)、常量权值(constant weight)和辅助数据(auxiliary)。第一数据还可以包括神经网络运算对应的指令,该指令可以是经编译后能够在多核处理器上直接被执行的硬件指令。本公开的方法中可以通过静态标签信息中的数据类别标识各个第一数据。
62.在本实施例中,动态标签信息中的拆分索引可以用于指示第一数据在当前多核处理器、某一指定数据类别的第一数据参与神经网络运算时需要拆分为多个第二数据的实现方案。其中,神经网络运算是指神经网络计算图中的计算节点,其可以包括卷积运算、全连接运算、池化运算、缩放运算等运算,本公开对此不作限制。神经网络运算中通常是对一个或多个输入数据进行运算处理,得到运算结果,第一数据可以是输入数据(包括但不限于输入神经元和输入权值)、运算结果(包括但不限于输出神经元),本公开对此不作限制。
63.在本实施例中,目标存储空间的标识信息可以用于指示每个第二数据需要存储至多核处理器的何处(也即存储至哪一个具体的存储空间)。如上文中介绍的多核处理器架构,多核处理器的存储空间可以包括本地存储器,或者还可以是核外缓存和本地存储器。目标存储空间的标识信息可以是存储每个第二数据的存储器(或核外缓存)所对应的编号、名称等能够区分存储器与其他存储器之间不同的身份标识,还可以是存储器或核外缓存的类别,也即存储器的类别标识或核外缓存的类别标识。
64.举例来说,在动态标签信息中的目标存储空间的标识信息为存储器的类别标识(假定目标存储空间为存储器)时,则其指示将多个第二数据依次存储至多个存储器中。在动态标签信息中的目标存储空间的标识信息为每个存储器的身份标识(假定目标存储空间为存储器)时,则其指示将多个第二数据依次存储至每个身份标识所对应的存储器中。本领域技术人员可以根据实际需要对存入动态标签信息中的目标存储空间的标识信息进行设
置,本公开对此不作限制。
65.在步骤s12中,根据所述拆分索引将所述第一数据拆分为多个第二数据。
66.在步骤s13中,根据所述目标存储空间的标识信息,将所述多个第二数据分别存储至对应的目标存储空间。以使每个计算核可以从对应的目标存储空间中获取第二数据进行运算,执行相应的运算任务。
67.可选地,本公开的数据处理方法,主机可以在编译时预先获取第一数据及其相应的动态标签信息,并根据该动态标签信息生成相应的指令,在运行时根据指令将第一数据拆分为多个第二数据,并将拆分后获得的第二数据存储至相应的目标存储空间。可选地,本公开的数据处理方法也可以在运行时传入第一数据的动态标签信息,并根据该动态标签信息将第一数据拆分为多个第二数据,并将拆分后的第二数据存储至相应的目标存储空间。应该清楚的是,此处的编译时(compiling time)是指对神经网络计算图进行编译生成指令的阶段;运行时(runtime)是指程序的运行环境。可选地,上述数据处理方法可以是由编译器实现的。
68.本公开实施例所提供的数据处理方法,可以在确定第一数据及其动态标签信息之后,基于动态标签信息中的拆分索引、目标存储空间的标识信息对第一数据进行拆分、布局存储,使得第二数据能够适配多核处理器的多个内存通道,以便利用多核处理器中的多个计算核执行运算操作,提高了神经网络运算的处理效率和速度。
69.在一种可能的实现方式中,所述动态标签信息还包括目标数据交换层级,该方法的“标签使用步骤”还可以包括:根据所述多核处理器的并行计算方式、所述目标存储空间的标识信息、所述目标数据交换层级,生成用于神经网络运算、对应于所述第一数据的第一指令,以使得各个计算核根据所述第一指令执行相应的运算任务。其中,所述第一指令可以包括以下至少一种:数据访存指令和数据运算指令。
70.在该实现方式中,主机可以在编译阶段生成上述第一指令。本公开的方法在编译时根据动态标签信息生成第一指令,从而可以通过第一指令将每个计算核所需执行的运算任务发送至对应的计算核,以使得计算核可以在接收到的第一指令的控制下执行其对应的、针对第一数据的运算任务,本公开对此不作限制。其中,数据访存指令可以用于指示计算核执行针对第二数据(也即第一数据拆分后的数据)存储和/或读取。本实施例中,通过动态标签信息中的目标存储空间标识信息和目标数据交换层级生成不同的数据访存指令,从而实现数据在不同计算核之间的交换。数据运算指令用于指示计算核执行的针对第二数据的详细运算,如,将第二数据对应的算术运算后得到运算结果。
71.可选地,上述第一指令也可以包括数据访存指令、数据交换指令和数据运算指令,其中的数据交换指令用于指示第二数据的交换层级以及在实际进行数据交换时如何进行数据交换。数据访存指令用于指示数据的存储和/或读取,数据运算指令用于计算核执行运算。
72.其中,目标数据交换层级可以用于指示第二数据是否需要在核间进行交换,该交换是指存储于核外缓存或存储器的第二数据除被计算该第二数据的计算核使用(作为待运算数据或者作为运算的结果)之外,是否还会被同一计算核簇中的其他计算核或者其他计算核簇中的计算核使用(作为待运算数据或者作为运算的结果)。目标数据交换层级所表示的数据交换可以包括:无交换、簇间数据交换、核间数据交换、存储器间数据交换。其中,“无
交换”可以是指数据不会被其他计算核使用,“簇间数据交换”可以是指数据会被其他计算核簇中的计算核使用,“核间数据交换”可以是指数据会被同一计算核簇中的计算核使用,“存储器间数据交换”可以是指数据会被不同计算核簇中的计算核使用。本技术实施例可以在编译时根据动态标签信息中的目标数据交换层级以及目标存储空间,并结合多核处理器的架构生成相应的第一指令,以使得多核处理器的各个计算核可以根据该第一指令执行相应的任务。
73.在一种可能的实现方式中,所述动态标签信息还可以包括目标数据交换层级,所述方法还可以包括:根据对应于所述第一数据的第二指令、所述多核处理器的并行计算方式、所述目标存储空间的标识信息、所述目标数据交换层级,确定每个计算核所需执行的运算任务。
74.在该实现方式中,第二指令用于指示计算核需要针对第一数据执行何种运算任务,包括如何获取第一数据、第一数据的动态标签信息、针对第一数据参与了神经网络的何种运算、需要调用哪些运算器、所得到的运算结果如何进行存储等与实际执行运算任务的过程相关的信息。
75.可选地,在第一数据所参与的神经网络运算、目标存储空间、多核处理器的并行计算方式和目标数据交换层级不同的情况下,计算核所执行的运算任务是不完全相同的。举例来说,例1,针对全连接mlp算子运算,第一数据包括输入权值、输入神经元和输出神经元,在采用数据并行方式执行运算任务时,输入权值会发生数据交换,输出神经元和输入神经元不会发生数据交换。其中,在计算核簇架构为总线竞争型时,输入权值会发生存储器间数据交换。在计算核簇架构为共享缓存型时,输入权值会发生簇间数据交换。例2,针对全连接mlp算子运算,第一数据包括输入权值、输入神经元和输出神经元,在采用模型并行方式执行运算任务时,输出神经元会发生数据交换,输入神经元和输入权值不会发生数据交换。其中,在计算核簇架构为总线竞争型时,输出神经元会发生簇间数据交换。例3,针对全连接mlp算子运算,第一数据包括输入权值、输入神经元和输出神经元,在采用混合并行方式执行运算任务时,输入神经元和输出神经元会发生数据交换,输入权值不会发生数据交换。在计算核簇架构为共享缓存型时,输出神经元会发生核间数据交换、簇间数据交换,输入神经元会发生簇间数据交换。
76.为便于理解“计算核所执行的运算任务”,下文描述了在第一数据包括输入神经元、输入权值和输出神经元时,根据动态标签信息确定出需要进行交换的数据的情况下,计算核所执行的运算任务。其中,计算核执行其对应的运算任务的过程参见下文“应用示例”部分所给出的示例。
77.在一种可能的实现方式中,在所述第一数据包括输入神经元、输入权值和输出神经元,且根据所述第一数据的动态标签信息确定对所述输出神经元进行数据交换时,计算核所执行的运算任务,可以包括:
78.每个计算核获取到输入神经元的多个第二数据中的第一目标数据和输入权值的多个第二数据中的第二目标数据,对所述第一目标数据和第二目标数据进行运算后得到的第一中间结果,并将所述第一中间结果存储至与该计算核对应的存储空间中;
79.所述多个计算核中的第一计算核获取至少两个第一中间结果,对所述至少两个第一中间结果进行运算处理得到第二中间结果并存储至所述第一计算核对应的存储空间;
80.所述多个计算核中的第二计算核获取至少两个第二中间结果,对所述至少两个第二中间结果进行运算得到运算结果,并将所述运算结果作为所述输出神经元存储所述目标存储空间。
81.在一种可能的实现方式中,在所述第一数据包括输入神经元、输入权值和输出神经元,且根据所述第一数据的动态标签信息确定对所述输入权值进行数据交换时,计算核所执行的运算任务,可以包括:
82.每个计算核用于获取到输入神经元的多个第二数据中的第一目标数据和输入权值的多个第二数据中的第二目标数据,对所述第一目标数据和第二目标数据进行运算后得到的第一种第一中间结果,并将所述第一种第一中间结果存储至对应的目标存储空间;
83.每个计算核用于获取到输入神经元的多个第二数据中的第一目标数据和输入权值的多个第二数据中与所述第二目标数据不同的第三目标数据,并对所述第一目标数据和第三目标数据进行运算后得到的第二种第一中间结果并存储至对应的目标存储空间;
84.所述多个计算核中的第一计算核获取至少两个第一中间结果,并对所述至少两个第一中间结果进行运算处理得到第二中间结果并存储至对应的目标存储空间,所述第一中间结果包括所述第一种第一中间结果和所述第二种第一中间结果;
85.所述多个计算核中的第二计算核获取至少两个第二中间结果,并对所述至少两个第二中间结果进行运算得到运算结果,并将所述运算结果作为所述输出神经元存储所述目标存储空间。
86.在一种可能的实现方式中,在所述第一数据包括输入神经元、输入权值和输出神经元,且根据所述第一数据的动态标签信息确定对所述输入神经元和所述输出神经元进行数据交换时,计算核所执行的运算任务,可以包括:
87.每个计算核用于获取到输入神经元的多个第二数据中的第一目标数据和输入权值的多个第二数据中的第二目标数据,并对所述第一目标数据和第二目标数据进行运算后得到的第一种第一中间结果,并将所述第一种第一中间结果存储至与该计算核对应的存储空间中;
88.每个计算核用于获取到输入神经元的多个第二数据中与所述第一目标数据不同的第四目标数据和所述第二目标数据,并对所述第四目标数据和第二目标数据进行运算后得到的第二种第一中间结果,并将所述第二种第一中间结果存储至与该计算核对应的存储空间中;
89.所述多个计算核中的第一计算核获取至少两个第一中间结果,并对所述至少两个第一中间结果进行运算处理得到第二中间结果并存储至所述第一计算核对应的存储空间,所述第一中间结果包括所述第一种第一中间结果和所述第二种第一中间结果;
90.所述多个计算核中的第二计算核获取至少两个第二中间结果,并对所述至少两个第二中间结果进行运算得到运算结果,并将所述运算结果作为所述输出神经元存储所述目标存储空间。
91.在一种可能的实现方式中,所述动态标签信息还包括动态数据类型、动态数据维度顺序、分片参数、填充参数,所述拆分索引(拆分索引的确定方式参见下文描述)包括:目标拆分维度、每个第二数据在所述第一数据的目标拆分维度上的起始拆分位置和结束拆分位置,步骤s12可以包括:
92.在确定所述第一数据的当前数据状态与所述动态标签信息不一致时,根据所述动态标签信息对所述第一数据进行处理,得到处理后第一数据;在所述目标拆分维度上,以每个第二数据在所述第一数据的目标拆分维度上的起始拆分位置和结束拆分位置为基准,将所述处理后第一数据拆分为多个第二数据。其中,所述数据状态包括数据类型、数据维度的顺序和维度值。
93.在该实现方式中,动态标签信息是在确定运行神经网络的处理器之后,根据静态标签信息(如下文所述)、神经网络的算法特征、处理器的算力、性能等确定的,以使得具有动态标签信息的第一数据能够适用于处理器的运算。当神经网络采用不同的处理器进行运算时,第一数据的动态标签信息可以不同。当两个处理器的性能、算力等参数相同时,第一数据的动态标签信息可能相同。
94.在该实现方式中,动态数据类型可以是根据运行神经网络的处理器所能处理的数据的类型、算力等确定的。如,某处理器能够处理16位浮点数,那么在利用该处理器运行神经网络时,待处理数据的动态数据类型即为16位浮点数。动态数据维度顺序可以是根据运行神经网络的处理器读取或存储数据的需求确定。分片参数可以根据运行神经网络的处理器的算力确定的,例如,某处理器每一次能够进行8个数的运算,则可以将分片参数设置为8。填充参数可以根据该待处理数据的静态数据维度的维度值、分片参数确定的,填充参数可以包括在数据的不同维度需要填充的数据的长度和/或所需填充的填充数值。数据尺寸或者称为数据的大小、数据量,其是根据静态数据维度的维度值、分片参数以及填充参数确定的数据在实际参与运算中的各运算维度值、数据位宽的乘积,如,某数据为矩阵,在运算过程中两个维度的其分别运算维度值为4、8,数据位宽为4,则该数据的数据尺寸则为4
×8×
4=128bytes。
95.在一种可能的实现方式中,第一数据的动态标签信息可以表示为:
96.dynamic:type2,dim_b1

bn,tiling,padding,size,split x[(1_0,1_n-1)

(i_i
×
n,i_(i 1)n-1)],store,swap
[0097]
其中,dynamic表示该标签信息为动态标签信息的标识。type2表示动态数据类型。dim_b1

bn表示动态数据维度顺序为b1

bn。tiling为分片参数。padding为填充参数,size为数据尺寸,其表示经过维度转换、tiling或padding之后的数据所占用存储空间的大小。split x[(1_0,1_n-1)

(i_i
×
n,i_(i 1)n-1)]表示拆分索引,其中,x表示目标拆分维度,拆分长度即为n。(1_0,1_n-1)表示第一个第二数据的起始拆分位置为0、结束拆分位置为n-1;(i_i
×
n,i_(i 1)n-1)表示第i个第二数据的起始拆分位置为i
×
n、结束拆分位置为(i 1)n-1。store表示目标存储空间的标识信息。swap表示目标数据交换层级。“,”、“[]”、“()”仅用于在本公开中分隔动态标签信息中的不同参数,并非动态标签信息的必备内容,实际应用中“,”、可以不存在,也可以由其他标识替代,本公开对此不作限制。
[0098]
在一种可能的实现方式中,在确定所述第一数据的当前数据状态与所述动态标签信息一致时,可以直接在所述目标拆分维度上,以每个第二数据在所述第一数据的目标拆分维度上的起始拆分位置和结束拆分位置为基准,将所述处理后第一数据拆分为多个第二数据。
[0099]
在一种可能的实现方式中,所述标签信息还包括静态标签信息,所述静态标签信息用于表征与所述第一数据所参与的神经网络运算相关联的信息,所述静态标签信息包括
以下至少一项:静态数据类型、静态数据维度、静态数据维度顺序以及对应每个静态数据维度的维度值。其中,在确定所述第一数据的当前数据状态与所述动态标签信息不一致时,根据所述动态标签信息对所述第一数据进行处理,得到处理后第一数据,包括以下至少一项:
[0100]
将所述第一数据的数据类型由所述静态数据类型转换为所述动态数据类型;
[0101]
将所述第一数据的数据维度的顺序由静态数据维度顺序调整为动态数据维度顺序;
[0102]
根据所述填充参数,对所述第一数据进行填充;
[0103]
根据所述分片参数,对所述第一数据进行切分。
[0104]
在该实现方式中,静态标签信息可以包括描述第一数据本身性质的数据类型、维度、维度值等信息,还包括基于第一数据所参与的神经网络运算相关的信息。因此,同一第一数据在不同的神经网络中的静态标签信息可能不同。静态标签信息可以在神经网络建立之后确定。第一数据的静态标签信息可以适用于任意运行神经网络的处理器,也即在不同的处理器中第一数据的静态标签信息是不变的。第一数据的静态标签信息可以是获取第一数据的过程(用户输入第一数据的过程)中处理器自动检测确定的,也可以是根据用户输入的信息确定的,本公开对此不作限制。
[0105]
在一种可能的实现方式中,静态标签信息还可以包括数据类别。所述数据类别包括以下任一项:指令、输入神经元、输出神经元、隐藏神经元、常量神经元、输入权值、输出权值、常量权值和辅助数据。其中,数据类别表示的第一数据在神经网络中属于何种类别的数据,是基于用户是否可见、在神经网络中所参与操作等信息确定的。静态数据类型表示的是第一数据的类型和位数,如静态数据类型可以为32位浮点数或8位定点数等。静态数据维度可以是一维、二维、多维等维度,静态数据维度顺序可以表示第一数据的存储和/或读取的维度顺序。
[0106]
可选地,静态数据维度可以包括但不限于以下至少一个:通道维度c、高度维度h、宽度维度w、数量维度n、深度维度d(用于三维卷积运算中)以及时间维度t(用于lstm等rnn网络运算中),记录或者表征静态数据维度顺序可以使用前面6个字母或者其他对应各个静态数据维度的标识的排列顺序来实现,排列中顺序在前或者在左的静态数据维度先于顺序在后或者在右的静态数据维度。或者,也可以默认排列中顺序在前或者在左的静态数据维度高于顺序在后或者在右的静态数据维度。比如,第一数据的静态数据维度顺序为nchw就代表第一数据是一个四维张量,其对应的静态数据维度顺序依次为数量维度n、通道维度c、高度维度h和宽度维度w,最高维是数量维度n,最低维是宽度维度w。第一数据的静态数据维度顺序为tnhwc代表第一数据为一个五维张量,其对应的静态数据维度顺序依次为时间维度t、数量维度n、高度维度h、宽度维度w和通道维度c,最高维是时间维度t,最低维是通道维度c。在实际用户输入或者多核处理器从物理存储器中获取时,第一数据会按照确定的静态数据维度顺序,映射成一维数组,存储在物理存储器上。对于一维张量(向量)可能不容易确定属于哪个维度。这种情况可以根据算子的算法定义确定。比如二维卷积中的偏置数据bias就是一维的,在算法定义中bias需要被叠加到输出特征图上,且每个输出通道叠加一个数,不同通道叠加的数不一样,因此一维bias的维度可以看成通道维度c。
[0107]
在该实现方式中,对应每个静态数据维度的维度值表示的是对应静态数据维度的长度或尺寸。例如,某第一数据为矩阵,静态数据维度包括行和列,静态数据维度顺序为行
优先,行的维度值为10、列的维度值为4,其表示行的长度为10、列的长度为4。
[0108]
在一种可能的实现方式中,第一数据的静态标签信息可以表示为:
[0109]
static:classification,type1,dim_a1

an,{x1

xn}
[0110]
其中,static为表示标签信息为静态标签信息的标识。classification表示数据类别,type1表示静态数据类型。dim_a1

an中的n表示静态数据维度,a1

an表示静态数据维度顺序为a1

an。a1的维度值为x1

an的维度值为xn。“,”、“{}”仅用于在本公开中分隔静态标签信息中的不同参数,并非静态标签信息的必备内容,实际应用中“,”、“{}”可以不存在,也可以由其他标识替代,本公开对此不作限制。
[0111]
应当理解的是,本领域技术人员可以根据实际需要对静态标签信息、数据类别的标识,以及静态标签信息中各参数的位置进行设置,本公开对此不作限制。
[0112]
在一种可能的实现方式中,所述方法“标签使用步骤”还可以包括常量数据打包步骤,该步骤包括:在所述第一数据包括多个常量数据时,根据所述多核处理器中计算核的总数,对每个常量数据拆分获得的多个第二数据进行打包处理,形成对应于每个计算核的多个第一数据包后存储,以使每个计算核根据加载到的第一数据包执行对应的运算操作。第一数据包的数量可以与计算核总数相同。
[0113]
其中,第一数据包可以包括常量数据区和标记区,常量数据区可以包括每一个常量数据拆分所获得的多个第二数据中的一个,标记区可以包括以下至少一项:常量总数据量标记、所述第一数据所参与的神经网络运算中隐藏层的隐藏层总数据量标记、所述神经网络运算中的输入出地址标记。本技术实施例中,通过对常量数据进行打包处理,从而在运算过程中可以将常量数据一次性搬运至多核处理器的相应计算核,无需重复搬运,从而可以提高运算效率。
[0114]
在该实现方式中,“常量数据打包步骤”可以在神经网络的编译阶段执行,在编译阶段可以根据第一数据的数据静态标签信息(如静态标签信息中的数据类别)获取到的对应于神经网络的常量数据,并将至少一个常量数据分别拆分后打包为多个第一数据包,其中,第一数据包的数量可以等于多核处理器中计算核的数量。并且,在计算核执行被分配的运算任务之前,主机可以预先将每个第一数据包发送至计算核对应的“本地存储器”或“核外缓存”中,计算核可以将第一数据包加载至本地内存中,以便于执行后续运算任务。这样,计算核可以将执行运算任务所需的常量数据预先得到,简化了计算核执行运算任务的过程,且由于预先得到常量数据还可以提高计算核执行运算任务的速度,进而实现针对第一数据运算的速度提升。
[0115]
在该实现方式中,常量数据可以是指在多核处理器的架构、神经网络确定之后,且在执行运算任务的过程中不会发生变化(或者说不会频繁改动)的数据。由于训练后的神经网络的模型参数基本不发生变化,因此该常量数据可以包括第一数据中的权值参数、偏移量参数、缩放参数、贝塔参数等,经编译后获得的第一指令在计算过程中也不会发生变化,因此该常量数据还可以包括上述的第一指令。当然,该常量数据还可以包括执行运算任务需要的第三数据。
[0116]
其中,部分常量数据可以根据其拆分索引拆分为多个第二数据以供不同的计算核使用,如,第一数据、卷积滤波器参数(权值参数)、偏移量参数、缩放参数、贝塔参数;也有部分常量数据可能不需要拆分。而对于第三数据可以根据计算核所需执行的运算任务确定其
所需的第三数据。
[0117]
为便于描述本文也将常量数据根据对应的拆分索引被拆分后得到的每个第二数据称为常量数据块。
[0118]
在该实现方式中,常量总数据量标记用于记录第一数据包中所有常量数据块的总数据量。常量总数据量标记还可以记录第一数据包中所有常量数据块的总数据量和每个常量数据块的数据量。所述神经网络运算中隐藏层的隐藏层总数据量,用于记录神经网络中隐藏层数据的总数据量。隐藏层总数据量还可以指示每个隐藏层数据的大小、神经网络中隐藏层数据的总数据量,所有隐藏层数据的数据量之和即为隐藏层总数据量。所述神经网络中的输入出地址是指输入数据的地址和输出数据的地址,输入数据可以是计算核需要每次执行运算任务时所获取的待运算数据,输出数据可以是对待运算数据进行运算后所得到的结果。
[0119]
在一种可能的实现方式中,第一数据包中常量数据、隐藏层数据以及输入出地址等可以按照特定顺序进行排列,形成不同的数据段。上述的“常量数据打包步骤”还包括计算各个数据段的段内偏移。上述的“常量数据打包步骤”还可以包括以下至少一项操作:确定第一段内偏移、确定第二段内偏移、确定第三段内偏移。本公开的方法中对上述操作的执行顺序不做具体限定,其可以按照特定的顺序顺次执行,也可以并行执行。
[0120]
其中,
[0121]“确定第一段内偏移”:根据每个第一数据包的常量总数据量和所包含的每个第二数据的数据量,确定每个第二数据在对应的第一数据包的常量数据段中的第一段内偏移并记录。这样,计算核可以根据第一段内偏移从常量数据段中按照每个常量数据块的第一段内偏移可以读取到对应的常量数据块。常量数据段即为第一数据包中记录常量数据块的一段数据段。
[0122]“确定第二段内偏移”:根据每个第一数据包的输入出地址总数据量、所包含的每个输入地址的数据量和每个输出地址的数据量,确定每个输入地址和每个输出地址在对应的第一数据包的地址数据段中的第二段内偏移并记录。地址数据段用于记录输入地址和输出的数据段。这样,使得计算核可以根据第二段内偏移获取每个输入地址和/或输出地址,进一步获取输入数据、存储运算得到的结果。
[0123]“确定第三段内偏移”:根据每个第一数据包的隐藏层总数据量、所包含的每个隐藏层数据的数据量,确定每个隐藏层数据在对应的第一数据包的隐藏层数据段中的第三段内偏移并记录。隐藏层数据段用于记录每个隐藏层数据的数据量(也即大小)。这样,使得计算核可以根据第三段内偏移从隐藏层总数据量中确定出每个隐藏层数据的数据量,提升打包处理的速度和效率。
[0124]
图3示出根据本公开一实施例的第一数据包的示意图。举例来说,“常量数据打包步骤”中,先确定需要拆分打包的多个常量数据,如图3所示,假定常量数据包括以下几个:指令1(也即第一指令)和指令2(也即第一指令)、卷积滤波器。且这些常量数据会分配给计算核1、2使用,则根据指令1和指令2、卷积滤波器的标签信息可以确定:指令1、指令2分别为计算核1、计算核2所要执行的指令,卷积滤波器需要根据拆分索引拆分成卷积滤波器数据块1和卷积滤波器数据块2,分别为计算核1、2使用。而根据输入地址和输出地址确定出计算核1所需的为输入地址1(获取其全部待运算数据的地址)、输出地址1(存储其运算完成得到
的运算结果的地址),计算核2所需的为输入地址2(获取其全部待运算数据的地址)、输出地址2(存储其运算完成得到的运算结果的地址)。而后对指令1、指令2、卷积滤波器数据块1、卷积滤波器数据块2、输入地址1、输入地址2、输出地址1、输出地址2按照计算核的使用情况重新排序,打包成计算核1所需的第一数据包1和计算核2所需的第一数据包2,并在第一数据包1、第一数据包2中记录常量总数据量标记。
[0125]
以第一数据包1为例,还需要计算地址数据段中输入地址1、输出地址2的第二段内偏移,由于输入地址1和输出地址1的数据量分别为8,则输入地址1的第二段内偏移即为“0”,输出地址1的第二段内偏移即为“8”。计算指令1、卷积滤波器数据块1的第一段内偏移,由于指令1的数据量为2048、卷积滤波器数据块1为1024,则指令1的第一段内偏移为“0”,卷积滤波器数据块1的第一段内偏移为“2048”,第一数据包1中常量总数据量标记即为“3072”。最终在计算核执行被分配的运算任务之前,主机可以将第一数据包1、第一数据包2分别发送至计算核1、计算核2,或者分别发送至计算核1、计算核2访问的目标存储空间。
[0126]
在一种可能的实现方式中,在执行步骤s11之前,主机还可以预先执行“标签生成步骤”,用于生成第一数据的动态标签信息和静态标签信息,其中,动态标签信息可以包括所述第一数据的拆分索引、目标存储空间和目标数据交换层级。
[0127]
图4示出根据本公开一实施例的数据处理方法的流程图。在一种可能的实现方式中,如图4所示,“标签生成步骤”可以包括步骤s14至步骤s16。
[0128]
在步骤s14中,获取第一数据以及所述第一数据的标签信息,所述第一数据用于参与神经网络运算,标签信息包括静态标签信息(如上文所述)和动态标签信息(不含拆分索引、目标存储空间和目标数据交换层级,但包括上文所述的其他信息)。
[0129]
在步骤s15中,根据确定的所述第一数据参与的操作所对应的算子的参数、所述多核处理器中的内存通道数和所述标签信息,确定出将所述第一数据拆分成多个第二数据所需的拆分索引。
[0130]
在本实施例中,算子的参数用于表示或描述该算子所需进行的运算的种类、实现其对应运算所需的参数,如卷积运算、池化运算等的算子的参数。
[0131]
在一种可能的实现方式中,步骤s15可以包括:
[0132]
根据确定的所述第一数据参与的操作所对应的算子的参数和所述标签信息,从拆分策略数据库中确定出所述第一数据所对应的拆分策略;
[0133]
根据所述拆分策略、所述多核处理器中的内存通道数和所述标签信息,确定出将所述第一数据拆分成多个第二数据所需的拆分索引。
[0134]
其中,所述拆分策略包括所述第一数据的至少一个可拆分维度以及每个可拆分维度对应的优先级别。所述拆分索引中的目标拆分维度为所述至少一个可拆分维度中被选中的维度。
[0135]
在该实现方式中,拆分策略可以指示数据在参与不同的多核处理器中、不同类型的神经网络运算、作为运算中不同的数据类别所对应的、可选的拆分方式,据此可以将数据按照不同的方式进一步拆分为多个数据。而拆分索引中的目标拆分维度是从拆分策略的多个可拆分维度中确定出的,进而根据目标拆分维度再进一步确定出每个第二数据在所述第一数据的目标拆分维度上的起始拆分位置和结束拆分位置,最终得到拆分索引。拆分策略可以是预设确定的,该预先确定的拆分策略可以以拆分策略数据库的形式存储于存储器
中。当然,在其他实施例中,拆分策略也可以是数据处理装置根据第一数据参与的运算以及多核处理器的运算器特性实际确定的。其中,所述拆分策略数据库中记录有预先确定的拆分策略,不同数据类别的数在不同算子中设置有对应的拆分策略。
[0136]
举例来说,在第一数据(如输入神经元、输入权值等)作为“输入”参与运算时,利用拆分索引可以用于将第一数据拆分为多个第二数据,进而实现运算。在第一数据(如输出神经元等)作为“输出”参与运算时,拆分索引可以用于指示或者说预见由于“输入”的拆分后运算使得最终得到的输出神经元(也即最终运算结果)会是由几个中间结果在进行运算得到,其指示的实际上是中间结果与输出神经元之间的拆分关系;或者由于输出神经元数据的尺寸限制,其可能不具备拆分的可能,也即其没有对应的拆分索引。在实际的运算任务中通常是对一个或多个待运算数据进行运算处理,得到运算结果,所确定的拆分索引可以是一个或多个待运算数据、运算结果中的任意一个数据的,本公开对此不作限制。
[0137]
在步骤s16中,将所述拆分索引增加到所述动态标签信息中,以使所述多核处理器能够基于所述标签信息对所述第一数据进行所述神经网络运算。
[0138]
在本实施例中,将拆分索引加入动态标签信息之后,多核处理器在利用第一数据(第一数据为待运算数据)执行运算任务时,可以根据该动态标签中的拆分索引将第一数据拆分为多个第二数据后执行运算任务(也即执行上述步骤s12);也可以在执行运算任务的过程中根据拆分索引确定相关计算过程如何进行(如第一数据为运算结果)。这样,在标签信息的辅助下,多核处理器可以简化运算任务中所涉及数据的拆分和布局过程,提高运算任务的运算速度。
[0139]
在一种可能的实现方式中,在执行步骤s14之前,还可以先通过“确定动态标签信息的步骤”预先得到执行步骤s14-步骤s16所需的动态标签信息(也即获得不含拆分索引、目标存储空间和目标数据交换层级,但包括上文所述的其他信息的动态标签信息),确定动态标签信息的步骤包括:获取运行神经网络的目标处理器(也即上述多核处理器)的信息。目标处理器的信息中可以包括目标处理器所能处理的数据的数据类型,目标处理器的读取、存储数据的维度顺序,目标处理器每一次处理的数据位数(或处理的数的个数)等与目标数量的算力和性能相关的信息。进而,数据处理装置可以根据目标处理器的信息和第一数据的静态标签信息,通过以下至少一项操作确定第一数据的动态标签信息:
[0140]
根据目标处理器所能处理的数据的数据类型确定动态数据类型;
[0141]
根据目标处理器的读取、存储数据的维度顺序确定动态数据维度顺序;
[0142]
根据目标处理器每一次处理的数据位数确定分片参数;
[0143]
根据分片参数、静态数据维度的维度值确定填充参数;
[0144]
根据静态数据维度的维度值、分片参数以及填充参数确定数据尺寸。
[0145]
在一种可能的实现方式中,装置可以根据第一数据对应于神经网络的出度、入度和第一数据参与的神经网络中的操作,确定第一数据的数据类别。
[0146]
在该实现方式中,入度表示该第一数据作为数据节点所参与的前续操作节点的数量(该第一数据为前续操作节点的输出),出度表示第一数据作为数据节点所参与的后续操作节点的数量(该第一数据为后续操作节点的输入)。例如,某第一数据cc可以是1个前续操作节点的输出、3个后续操作节点的输入,则该第一数据cc的出度为3、入度为1。可以为不同的数据类别设置不同的代码,以进行区分。如下表1所示,描述了不同数据类别的数据所具
有的特点和对应的标识。
[0147]
表1数据类别、对应标识及数据特点
[0148][0149]
其中,指令的出度和入度为零,用于触发神经网络运算指示针对待运算数据和/或计算核的运算任务。输入神经元、常量神经元、输入权值、常量权值、辅助数据的出度大于1、入度为0。输出神经元、输出权值的出度为0、入度大于或等于1。隐藏神经元的出度和入度均大于或等于1。
[0150]
在一种可能的实现方式中,根据确定的所述第一数据参与的操作所对应的算子的参数和所述标签信息,从拆分策略数据库中确定出所述第一数据所对应的拆分策略,可以包括:
[0151]
获取对应所述神经网络的计算图,所述计算图中包括操作节点、数据节点、数据节点与操作节点之间的连接关系;其中,所述数据节点可以包含所述第一数据的标签信息,所述第一数据的标签信息包括静态标签信息和动态标签信息;
[0152]
获得所述计算图中所述第一数据所在数据节点所连接的目标操作节点的信息,所述目标操作节点的信息包括实现所述目标操作节点的操作所对应的算子的参数;
[0153]
根据所述算子的参数和所述第一数据的静态标签信息,从拆分策略数据库中确定出所述第一数据所对应的拆分策略。
[0154]
在该实现方式中,可以首先根据神经网络的计算图确定静态标签信息和部分动态标签信息(不包括拆分索引、目标存储空间、目标数据交换层级),并该确定的标签信息与相应的数据节点进行绑定存储。
[0155]
在该实现方式中,所述静态标签信息还可以包括数据类别,进一步地,可以根据所述算子的参数和所述第一数据的数据类别,从拆分策略数据库中确定出所述第一数据所对应的拆分策略。举例来说,参考下述表2,假定基于上述步骤确定出第一数据所参与的操作所对应的算子为二维卷积conv、其数据类别为输入权值,则其对应的拆分策略为“可拆分维度为n、待选存储空间为cluster、待选数据交换层级为no”。假定基于上述步骤确定出第一数据所参与的操作所对应的算子为二维卷积conv、其数据类别为输入神经元,则其对应的拆分策略为“可拆分维度为n、h、w(优先级别依次降低),在可拆分维度为n时,待选存储空间为mem,待选数据交换层级为no;在可拆分维度为h或w时,待选存储空间为cluster、待选数据交换层级为cluster”。
[0156]
在一种可能的实现方式中,根据所述第一数据所对应的拆分策略、所述多核处理器中的内存通道数和所述标签信息,确定出将所述第一数据拆分成多个第二数据的拆分索引,可以包括:
[0157]
根据所述内存通道数和根据所述标签信息确定的所述第一数据在参与所述神经网络运算过程中的每个维度的运算维度值,从所述至少一个可拆分维度中确定出目标拆分维度,以及确定出对应于所述目标拆分维度的拆分长度,所述拆分长度为所述第二数据在所述目标拆分维度方向上的长度;
[0158]
根据所述内存通道数、所述第一数据在所述目标拆分维度上的运算维度值和所述拆分长度,确定出将所述第一数据拆分成多个第二数据的拆分索引。
[0159]
在该实现方式中,运算维度值是指第一数据在实际进行运算的过程中,各个维度的维度值。
[0160]
在本实施例中,由于对第一数据进行拆分的目的是为了尽可能的利用多核处理器实现并行处理。因此,在确定拆分长度之前,可以先确定第二数据的目标个数,进而根据目标拆分维度的维度值和目标个数确定出拆分长度。可以先判断目标拆分维度的运算维度值与多核处理器的计算核总数(也即多核处理器中所包含的计算核的数量)、内存通道数之间的大小关系,进而根据大小关系进一步采用对应的方式确定拆分长度,也即如下方式一、方式二、方式三。
[0161]
方式一,在目标拆分维度的运算维度值大于或等于计算核总数时,将第二数据的目标个数确定为与计算核总数一致,拆分长度即为第一数据在所述目标拆分维度上的运算维度值与计算核总数相除所得的比值,且在该比值不为整数时可以利用预设的取整函数(如下文所述)进行取整处理,进而得到拆分长度。其中,取整函数可以包括向下取整函数(如floor function,也即floor函数,取不大于所述比值的最大整数)、向上取整函数(如ceil函数,取大于或等于所述比值的最小整数)、四舍五入取整函数(如rounding function,也即round函数,对所述比值按照指定小数位数进行四舍五入运算得到的整数)等取整函数。这样,可以保证每一个计算核均参与到实际的运算过程中,减少多核处理器的算力闲置,提高了运算的效率和速度。
[0162]
方式二,在目标拆分维度的运算维度值小于计算核总量、且大于或等于内存通道数时,将内存通道数确定为第二数据的目标个数,拆分长度即为第一数据在所述目标拆分维度上的运算维度值与内存通道数相除所得的比值,且在该比值不为整数时可以利用预设的取整函数进行取整处理,进而得到拆分长度。
[0163]
方式三,在目标拆分维度的运算维度值小于内存通道数时,将目标拆分维度的运算维度值确定为第二数据的目标个数,拆分长度即为目标拆分维度的运算维度值的单位长度。
[0164]
通过上述确定拆分长度的方式一、二、三进行拆分长度的确定,可以保证多核处理器中的计算核都参与到运算任务中,保证运算任务的高效、高速执行。
[0165]
在一种可能的实现方式中,所述静态标签信息可以包括:静态数据维度、对应每个静态数据维度的维度值,所述动态标签信息可以包括动态数据类型、填充参数、数据尺寸,其中,根据所述拆分策略、所述多核处理器中的内存通道数和所述标签信息,确定出将所述第一数据拆分成多个第二数据所需的拆分索引,还可以包括:
[0166]
根据所述第一数据的每个静态数据维度的维度值和填充参数,确定所述第一数据在参与所述神经网络运算过程中的每个维度的运算维度值。可以将每个静态数据维度的维度值与填充参数中对应该静态数据维度的填充数据长度之和确定为运算维度值。
[0167]
在该实现方式中,还可以基于第一数据已有的静态标签信息和动态标签信息采用其他方式计算出运算维度值,本公开对此不作限制。
[0168]
在一种可能的实现方式中,还可以预先计算出运算维度值并将其存储至动态标签信息中。以便于直接从动态标签信息中获取到运算维度值仅为进行拆分长度、拆分索引的确定,简化拆分索引是确定过程,提高效率。
[0169]
在一种可能的实现方式中,根据所述内存通道数和所述第一数据在参与所述神经网络运算过程中的每个维度的运算维度值,从所述至少一个可拆分维度中确定出目标拆分维度,以及确定出对应于所述目标拆分维度的拆分长度,可以包括:
[0170]
在所述可拆分维度为多个时,按照优先级别由高到低的顺序依次判断可拆分维度是否满足拆分条件,在确定当前可拆分维度满足拆分条件时,将当前可拆分维度确定为所述目标拆分维度,
[0171]
其中,所述拆分条件包括:所述第一数据在当前可拆分维度上的运算维度值大于或等于所述内存通道数。
[0172]
举例来说,假定第一数据具有三个维度“w1、w2、w3”、各维度的运算维度值w1=2、w2=32、w3=64,其对应的拆分策略中可拆分维度为w1和w3,且w1的优先级高于w3。若多核处理器的通道数为4,先判断第一数据优先级最高的“可拆分维度为w1”是否满足拆分条件,而由于w1的运算维度值2是小于“通道数4”不满足拆分条件;则继续判断下一个“可拆分维度w3”是否满足拆分条件,而由于w3的运算维度值32满足拆分条件,则将第一数据的w3作为目标拆分维度。
[0173]
在一种可能的实现方式中,在所有的可拆分维度均不满足拆分条件时,也即每个可拆分维度上的运算维度值均小于内存通道数,可以将可拆分维度上运算维度值最大的确定为目标拆分维度。这样,可以保证针对该第一数据利用多核处理器中较多的计算核执行运算任务。
[0174]
举例来说:
[0175]
例1,假定多核处理器包括2个内存通道,2个计算核簇,每个计算核簇中包括2个计算核。若某第一数据包括三个维度a、b、c,且各维度的维度值为a=1,b=4,c=2。若其可拆分维度为a、b,且a的优先级别高于b。则,先判断可拆分维度a,由于a=1小于内存通道数2(即不满足拆分条件),则a不可作为目标拆分维度。继续判断可拆分维度b,由于b=4大于内存通道数,将可拆分维度b确定为目标拆分维度。进一步地,由于b=4等于计算核总数4,则可以将第二数据的目标个数确定为与计算核总数4相同,拆分长度=目标拆分维度b的维度值4
÷
计算核总数4=1。
[0176]
例2,假定多核处理器包括2个内存通道,2个计算核簇,每个计算核簇中包括2个计算核。若某第一数据包括三个维度a、b、c,且各维度的维度值为a=1,b=4,c=2。若其可拆分维度为a、c,且a的优先级别高于c。则,先判断可拆分维度a,由于a=1小于内存通道数2(即不满足拆分条件),则a不可作为目标拆分维度。继续判断可拆分维度c,由于c=2小于计算核总数且等于内存通道数,可以将可拆分维度c确定为目标拆分维度。进一步地,由于c=
2小于计算核总数4且等于内存通道数,则可以将第二数据的目标个数确定为与内存通道数2相同,拆分长度=目标拆分维度c的维度值2
÷
内存通道数2=1。
[0177]
例2,假定多核处理器包括4个内存通道,2个计算核簇,每个计算核簇中包括2个计算核。若某第一数据包括三个维度a、b、c,且各维度的维度值为a=1,b=2,c=2。若其可拆分维度为a、c,且a的优先级别高于c。则,先判断可拆分维度a,由于a=1小于内存通道数4(即不满足拆分条件),则a不可作为目标拆分维度。继续判断可拆分维度c,由于c=2仍小于内存通道数4(即不满足拆分条件)。此时,由于c=2>a=1,则将可拆分维度c确定为目标拆分维度。进一步地,由于c=2小于内存通道数4,则可以将第二数据的目标个数确定为目标拆分维度c的维度值2,拆分长度=目标拆分维度c的维度值2。
[0178]
需要说明的是,在实际运算过程中,运算任务多是至少两个待运算数据之间进行算术运算得到运算结果,则可以将待运算数据以及运算结果作为上述第一数据进行拆分索引的确定。
[0179]
在本实施例中,第一数据在参与运算任务的过程中,由于算子的不同、目标拆分维度的不同、多核处理器架构的不同,为便于不同的计算核对第一数据的使用,还需要对拆分第一数据后得到的第二数据的目标存储空间进行设置,以保证实际利用第二数据执行对应运算任务的计算核读写便利、快捷。
[0180]
在一种可能的实现方式中,步骤s15可以包括:根据确定的所述第一数据参与的操作所对应的算子的参数、所述多核处理器的运算器特性和所述标签信息(包括动态数据类型和数据类别),确定出所述第一数据所对应的至少一个可拆分维度以及每个可拆分维度对应的优先级别。
[0181]
在该实现方式中,多核处理器的运算器特性可以包括:执行不同算子的运算时不同数据类别的数据可以拆分的维度,拆分不同的维度是否与多核处理器本身的硬件设置相匹配、或者与多核处理器被使用者设置的处理能力相匹配,不同拆分维度的设置对运算效率的影响等与处理器本身的硬件设置、用户定义设置相关的特性。这样,可以在保证能确定拆分策略的同时,满足运算的效率和速度要求。
[0182]
在该实现方式中,可以预先根据已有的算子的参数、多核处理器的运算器特性、标签信息的情况训练出用于确定拆分策略的策略模型;或者也可以建立算子的参数、多核处理器的运算器特性、标签信息与拆分策略之间的对应关系,进而实时确定第一数据的拆分策略。
[0183]
在一种可能的实现方式中,所述多核处理器设置有多个计算核簇,每个计算核簇包括多个计算核,所述“标签生成步骤”还可以包括:
[0184]
根据确定的所述第一数据参与的操作所对应的算子的参数、所述多核处理器中设置的存储空间,确定出每个可拆分维度所对应的待选存储空间;
[0185]
根据所述目标拆分维度,从所述待选存储空间中确定出所述第一数据对应的目标存储空间,并将所述目标存储空间的标识信息增加到所述动态标签信息中,
[0186]
其中,所述存储空间别包括多个存储器(如图1d所示,多核处理器中并未设置计算核簇的核外缓存);或者所述存储空间包括多个存储器、多个核外缓存(如图1e所示,多核处理器中设置有计算核簇的核外缓存),每个计算核能够访问所述多个存储器中任意一个,每个计算核簇中的多个计算核共享对应的一个核外缓存。
[0187]
在该实现方式中,可以预先根据已有的算子的参数、多核处理器中设置的存储空间设定情况训练出用于确定待选存储空间的模型;或者也可以建立算子的参数、多核处理器设置的存储空间与待选存储空间之间的对应关系,进而实时确定第一数据的待选存储空间。
[0188]
在该实现方式中,多核处理器是设置有多个存储器,每个计算核簇可以通过与对应的“本地存储器”之间的通道进行访问,也可以通过通道与路由节点访问其他存储器。多核处理器中因架构的不同核外缓存可以设置,也可以不设置。可以实时根据算子的参数、所述多核处理器中设置的存储空间,确定出每个可拆分维度所对应的待选存储空间,算子的不同会影响待选存储空间的选定,而多核处理器中设置的存储空间是否含有核外缓存是为算子提供可供选择的目标。
[0189]
在该实现方式中,待选存储空间可以是一个或多个,确定待选存储空间的过程中,还可以确定出每个待选存储空间所对应的可拆分维度。每一个待选存储空间均与一个或多个可拆分维度相对应,不同的可拆分维度可以对应于同一个待选存储空间,一个可拆分维度仅有对应的一个待选存储空间(也即,一个可拆分维度不能与两个不同的待选存储空间对应)。进而将待选存储空间中对应的可拆分维度包括目标拆分维度的一个,确定为目标存储空间。
[0190]
举例来说,图5示出根据本公开一实施例的多核处理器1的架构示意图,如图5所示,多核处理器1包括存储器1和存储器2、计算核簇1(包括计算核1、计算核2)及其对应的核外缓存1、计算核簇2(包括计算核3、计算核4)及其对应的核外缓存2,计算核通过路由节点r访问存储器。其中,存储器的类别标识为mem,核外缓存的类别标识为cluster,存储器1、存储器2的标识信息分别为mem1和mem2,核外缓存1、核外缓存2的标识信息分别为cluster1和cluster2。假定第一数据a为输入神经元,其会被拆分成两个第二数据a1、a2,并且需要存储至存储器中。则存入动态标签信息中的可以是表示存储器这个存储空间类别的标识信息“mem”(a1和a2可以分别存入mem1和mem2中),也可以是存储器1和存储器2本身的标识信息“mem1”和“mem2”。
[0191]
在一种可能的实现方式中,所述拆分策略还包括待选存储空间,每个可拆分维度设置有对应的待选存储空间,所述“标签生成步骤”还可以包括:根据所述目标拆分维度,从所述待选存储空间中确定出目标存储空间,并将所述目标存储空间的标识信息增加到所述动态标签信息中,
[0192]
其中,所述存储空间包括多个存储器;或者所述存储空间包括多个存储器、多个核外缓存,每个计算核能够访问所述多个存储器中任意一个,每个计算核簇中的多个计算核共享对应的一个核外缓存。
[0193]
在该实现方式中,可以预先确定出数据的待选存储空间情况,并将其存入拆分策略数据库中,以简化目标存储空间的确定过程,提高数据处理的速度和效率。
[0194]
在一种可能的实现方式中,所述“标签生成步骤”还可以包括:
[0195]
根据确定的所述第一数据参与的操作所对应的算子的参数、所述多核处理器的运算器特性、所述标签信息,确定出每个可拆分维度所对应的待选数据交换层级;
[0196]
根据所述目标拆分维度,从所述待选数据交换层级中确定出所述第一数据对应的目标数据交换层级,并将所述目标数据交换层级增加到所述动态标签信息中。
[0197]
在该实现方式中,可以根据算子的参数、所述多核处理器的运算器特性、所述标签信息情况训练出用于确定待选数据交换层级的模型;或者也可以建立算子的参数、所述多核处理器的运算器特性、所述标签信息与待选数据交换层级之间的对应关系,进而实时确定第一数据的待选数据交换层级。
[0198]
在该实现方式中,待选数据交换层级可以是一个或多个,确定待选数据交换层级的过程中,还可以确定出每个待选数据交换层级所对应的可拆分维度。每一个待选数据交换层级与一个或多个可拆分维度相对应,不同的可拆分维度可以对应于同一个待选数据交换层级,一个可拆分维度仅有对应的一个待选数据交换层级(也即,一个可拆分维度不能与两个不同的待选数据交换层级对应)。进而将待选数据交换层级中对应的可拆分维度包括目标拆分维度的一个,确定为目标数据交换层级。
[0199]
在一种可能的实现方式中,所述拆分策略还包括每个可拆分维度所对应的待选数据交换层级,所述“标签生成步骤”还包括:
[0200]
将至少一个待选数据交换层级中与所述目标拆分维度相对应的待选数据交换层级,确定为所述第一数据对应的目标数据交换层级,并将所述目标数据交换层级增加到所述动态标签信息中。
[0201]
在该实现方式中,可以预先确定出数据的待选数据交换层级,并将其存入拆分策略数据库中,以简化目标数据交换层级的确定过程,提高数据处理的速度和效率。
[0202]
在本实施例中,可以预先根据上文所述当时对第一数据的拆分策略进行设置。为进一步说明拆分策略的设定,以图5所示的多核处理器的架构、第一数据为图像数据为例,下述表2给出了本公开实施例中第一数据的拆分策略示例。
[0203]
表2拆分策略示例
[0204][0205]
其中,可拆分维度n表示数量维度,可拆分维度h表示高度维度,可拆分维度w表示宽度维度,可拆分维度c表示通道维度。
[0206]
待选存储空间中“mem”为存储器的类别标识,“cluster”表示核外缓存的标识。
[0207]
待选数据交换层级中“no”表示无交换,“cluster”表示进行簇间数据交换,“core”表示进行核间数据交换。同一数据中在前的可拆分维度的优先级别高于在后出现的可拆分维度的优先级别,以“二维卷积conv”中的输入神经元为例,其可拆分维度为n、h、w,优先级别从高到低依次为n、h、w。
[0208]
在本实施例中,可以预先根据上文所述与拆分策略(包括可拆分维度、待选存储空间、待选数据交换维度)相关的参考信息与拆分策略的对应关系指定拆分策略实时确定模型,进而根据模型实时确定出第一数据的可拆分维度、待选存储空间、待选数据交换维度,进而在第一数据的动态标签信息中增加拆分索引、目标存储空间的标识信息、目标数据交换层级。也可以预先根据参考信息确定出拆分策略数据库,在其中记载所需的各种拆分策略,本公开对此不作限制。
[0209]
应用示例
[0210]
以下结合“对运算指令a进行处理”作为一个示例性应用场景,给出根据本公开实施例的应用示例,以便于理解数据处理方法的流程。本领域技术人员应理解,以下应用示例仅仅是出于便于理解本公开实施例的目的,不应视为对本公开实施例的限制。
[0211]
示例1
[0212]
假定处理该运算指令a所涉及到的数据包括输入神经元i、输入权值w和输出神经元o,执行该运算指令a的多核处理器为图5所示的多核处理器1该运算指令a为全连接mlp运算,并采用模型并行的方式进行数据运算。输入神经元i、输入权值w和输出神经元o分别为1
×
1024、1024
×
4、1
×
4的数据,具体运算为i
×
w=o。则可以将输入神经元i、输入权值w和输出神经元o分为作为“第一数据”,确定出其对应的拆分索引、目标存储空间和目标数据交换层级。
[0213]
输入神经元i的标签信息:static:in,float32,dim_nc,{1 1024}dynamic:float16,dim_nc,c=256,c=0,2kb。也即,i的数据类别为输入神经元,静态数据类型为float32,静态数据维度为n和c,维度n的维度值为1,维度c的维度值为1024,静态数据维度顺序为nc。动态数据类型为float16,动态数据维度顺序为nc,分片参数为在维度c的方向上按照256的长度进行分片,填充参数为在维度c的方向上以“0”为填充值进行填充,数据尺寸为2kb。
[0214]
输入权值w的标签信息:static:iw,float32,dim_cn,{1000 4}dynamic:float16,dim_nc,c=512,c=24,8000字节。也即,w的数据类别为输入权值,静态数据类型为float32,静态数据维度为n和c,维度n的维度值为4,维度c的维度值为1000,静态数据维度顺序为cn。动态数据类型为float16,动态数据维度顺序为nc,分片参数为在维度c的方向上按照512的长度进行分片,填充参数为在维度c的方向上以“24”为填充值进行填充,数据尺寸为8000字节。
[0215]
输出神经元o的标签信息:static:on,float32,dim_nc,{1 4}dynamic:float16,dim_nc,c=4,c=0,8kb。也即,o的数据类别为输出神经元,静态数据类型为float32,静态数据维度为n和c,维度n的维度值为1,维度c的维度值为4,静态数据维度顺序为nc。动态数据类型为float16,动态数据维度顺序为nc,分片参数为在维度c的方向上按照4的长度进行分片,填充参数为在维度c的方向上以“0”为填充值进行填充,数据尺寸为8kb。
[0216]
在“标签生成步骤”中:
[0217]
对于输入神经元i:假定根据预先确定的拆分策略数据库可知其可拆分维度包括n、c(n的优先级别高于c的优先级别),而由于输入神经元i为1
×
1024,多核处理器1包括2个通道。首先,针对可拆分维度n进行判断,通道数2大于输入神经元i在维度n上的运算维度值(确定方式参考上文),则可拆分维度n不可作为目标拆分维度;而后,对可拆分维度c进行判断,通道数2小于输入神经元i在维度c上的运算维度值,则将可拆分维度c确定为目标拆分维度。进一步可以确定出拆分长度为l=1024
÷
4(计算核总数)=512。则输入神经元i的拆分索引即为c[(0,255),(256,511),(512,767),(768,1023)]。继续基于目标拆分维度c预先确定的拆分策略数据库可知:输入神经元i的目标存储空间为“mem”(也即存储器),目标数据交换层级为“no”也即无交换。则输入神经元i的标签信息增加后为:static:in,float32,dim_nc,{1 1024}dynamic:float16,dim_nc,c=256,c=0,2kb,c[(0,255),(256,511),(512,767),(768,1023)],mem,no。
[0218]
基于与输入神经元i相同的过程,可以判断出输入权值w的标签信息在增加后为:static:iw,float32,dim_cn,{1000 4}dynamic:float16,dim_nc,c=512,c=24,8000字节,n[(0,255),(256,511),(512,767),(768,1023)],mem,no。输出神经元o的标签信息在增加后为:static:on,float32,dim_nc,{1 4}dynamic:float16,dim_nc,c=4,c=0,8kb,c[(0,3)],cluster,core。
[0219]
在“标签使用步骤”中:
[0220]
基于上述输入神经元i、输入权值w、输出神经元o的标签信息,多核处理器1在执行运算指令a时,图6a示出根据本公开一实施例的多核处理器1执行运算指令a的运算任务分配示意图,图6b、6c示出根据本公开一实施例的多核处理器1执行运算指令a的过程示意图,结合图6a、图6b可知其具体过程为:
[0221]
多核处理器1或者为多核处理器1分配任务的处理器根据输入神经元i、输入权值w的标签信息,先判断当前输入神经元i、输入权值w的数据状态是否与对应的动态标签信息一致,在不一致时需要进行处理以使得处理后得到的数据与对应的动态标签信息一致。其中,以输入权值w需要处理为例,其处理过程参见图6a,可以先将输入权值w的数据类型由32位浮点数转换为16位浮点数。而后对输入权值w进行转置处理,使其数据维度顺序与“dim_nc”一致。基于分片参数“512”,将输入权值w切分为两个数据分片。而后根据填充参数“24”对尺寸与分片参数不对应的数据分片进行填充,如均用0进行填充补位,最终,得到处理后的输入权值w,也即4
×
1024的输入权值w。
[0222]
而后根据拆分索引将输入神经元i、输入权值w进行如图6a所示的拆分。将输入神经元拆分为i1、i2、i3、i4,将输入权值w拆分为w1、w2、w3、w4。并按照如图6b所示将i1、i2、w1、w2分别存入其对应的目标存储空间存储器1,将i3、i4、w3、w4分别存入其对应的目标存储空间存储器2。
[0223]
而后,针对运算指令a的具体运算过程中各计算核所要执行的运算任务为:
[0224]
计算核1从存储器1中获取i1、w1并进行计算得到第一中间结果o1,而后存入其对应的本地内存nb中;计算核2从存储器1中获取i2、w2并进行计算得到第一中间结果o2,并将第一中间结果o2存入核外缓存1;计算核3从存储器2中获取i3、w3并进行计算得到第一中间结果o3,而后存入其对应的本地内存nb中;计算核4从存储器2中获取i4、w4并进行计算得到第一中间结果o4,并将第一中间结果o4存入核外缓存2。
[0225]
下一步,计算核1从核外缓存1中获取到o2,将o2与o1相加得到第二中间结果o5,而后存入其对应的本地内存nb中;计算核3从核外缓存2中获取到o4,将o4与o3相加得到第二中间结果o6,并将第二中间结果o6存储至核外缓存2中。
[0226]
再之后,计算核1从核外缓存2中获取到o6,将o5与o6相加得到运算结果o7(也即输出神经元o),并将o7存入存储器1,完成运算任务。
[0227]
其中,由于输出神经元o的目标存储空间为核外缓存cluster,目标数据交换层级为核间数据交换core,所以,计算核2、4会将其运算得到的结果o2、o4存储至对应的核外缓存,计算核3会将其得到的o6存储至核外缓存2中。这样,才能保证计算核1和计算核3可从核外缓存中获取到所需的第一中间结果或第二中间结果。
[0228]
示例2
[0229]
示例2与示例1的区别在于多核处理器的结构发生了变化,示例2中的多核处理器2并未设置核外缓存。
[0230]
在“标签生成步骤”中:
[0231]
基于与示例1相同的过程,结合对应多核处理器2的拆分策略数据库(本公开未示出),可以确定其仅输出神经元o的标签信息中目标存储空间和目标数据交换层级发生变化,即,static:on,float32,dim_nc,{1 4}dynamic:float16,dim_nc,c=4,c=0,8kb,c[(0,3)],mem,cluster。与示例1的区别在于输出神经元o的目标存储空间和目标数据交换层级发生了变化。
[0232]
在“标签使用步骤”中:
[0233]
结合图6a、图6c可知其具体过程相比于示例1的区别在于:
[0234]
计算核1从存储器1中获取i1、w1并进行计算得到第一中间结果o1,而后存入其对应的本地内存nb中;计算核2从存储器1中获取i2、w2并进行计算得到第一中间结果o2,并将第一中间结果o2存入存储器1;计算核3从存储器2中获取i3、w3并进行计算得到第一中间结果o3,而后存入其对应的本地内存nb中;计算核4从存储器2中获取i4、w4并进行计算得到第一中间结果o4,并将第一中间结果o4存入存储器2。
[0235]
下一步,计算核1从存储器1中获取到o2,将o2与o1相加得到第二中间结果o5,而后存入其对应的本地内存nb中;计算核3从存储器2中获取到o4,将o4与o3相加得到第二中间结果o6,并将第二中间结果o6存储至存储器2中。
[0236]
再之后,计算核1从存储器2中获取到o6,将o5与o6相加得到运算结果o7(也即输出神经元o),并将o7存入存储器1,完成运算任务。
[0237]
其中,由于输出神经元o的目标存储空间为存储器mem,目标数据交换层级为簇间数据交换cluster,所以,计算核2、4会将其运算得到的结果o2、o4分别存储至对应的存储器1、2,计算核3会将其得到的o6存储至存储器2中。这样,才能保证计算核1和计算核3可从存储器中获取到所需的第一中间结果或第二中间结果。
[0238]
需要说明的是,尽管以上述实施例作为示例介绍了数据处理方法如上,但本领域技术人员能够理解,本公开应不限于此。事实上,用户完全可根据个人喜好和/或实际应用场景灵活设定各步骤、模块,只要符合本公开的技术方案即可。
[0239]
图7示出根据本公开一实施例的数据处理装置的框图。如图7所示,所述装置应用于多核处理器,所述多核处理器包括多个计算核簇,每个计算核簇包括多个计算核,所述装
置包括:信息获取模块51、数据拆分模块52和数据存储模块53。
[0240]
信息获取模块51,获取第一数据和所述第一数据的标签信息,所述标签信息包括动态标签信息,所述动态标签信息包括拆分索引、目标存储空间的标识信息。
[0241]
数据拆分模块52,根据所述拆分索引将所述第一数据拆分为多个第二数据。
[0242]
数据存储模块53,根据所述目标存储空间的标识信息,将所述多个第二数据分别存储至对应的目标存储空间。
[0243]
其中,所述动态标签信息用于表征所述第一数据与所述多核处理器相关联的信息。
[0244]
在一种可能的实现方式中,所述动态标签信息还包括目标数据交换层级,所述装置还可以包括:
[0245]
指令生成模块,根据所述多核处理器的并行计算方式、所述目标存储空间的标识信息、所述目标数据交换层级,生成用于神经网络运算、对应于所述第一数据的第一指令,以使得各个计算核根据所述第一指令执行相应的运算任务;其中,所述第一指令包括以下至少一种:数据访存指令和数据运算指令。
[0246]
在一种可能的实现方式中,所述动态标签信息还包括目标数据交换层级,所述装置还可以包括:
[0247]
运算任务确定模块,根据对应于所述第一数据的第二指令、所述多核处理器的并行计算方式、所述目标存储空间的标识信息、所述目标数据交换层级,确定每个计算核所需执行的运算任务。
[0248]
在一种可能的实现方式中,在所述第一数据包括输入神经元、输入权值和输出神经元,且根据所述第一数据的动态标签信息确定对所述输出神经元进行数据交换时,计算核所执行的运算任务,可以包括:
[0249]
每个计算核用于获取到输入神经元的多个第二数据中的第一目标数据和输入权值的多个第二数据中的第二目标数据,对所述第一目标数据和第二目标数据进行运算后得到的第一中间结果,并将所述第一中间结果存储至与该计算核对应的存储空间中;
[0250]
所述多个计算核中的第一计算核获取至少两个第一中间结果,对所述至少两个第一中间结果进行运算处理得到第二中间结果并存储至所述第一计算核对应的存储空间;
[0251]
所述多个计算核中的第二计算核获取至少两个第二中间结果,对所述至少两个第二中间结果进行运算得到运算结果,并将所述运算结果作为所述输出神经元存储所述目标存储空间。
[0252]
在一种可能的实现方式中,在所述第一数据包括输入神经元、输入权值和输出神经元,且根据所述第一数据的动态标签信息确定对所述输入权值进行数据交换时,计算核所执行的运算任务,可以包括:
[0253]
每个计算核用于获取到输入神经元的多个第二数据中的第一目标数据和输入权值的多个第二数据中的第二目标数据,对所述第一目标数据和第二目标数据进行运算后得到的第一种第一中间结果,并将所述第一种第一中间结果存储至对应的目标存储空间;
[0254]
每个计算核用于获取到输入神经元的多个第二数据中的第一目标数据和输入权值的多个第二数据中与所述第二目标数据不同的第三目标数据,并对所述第一目标数据和第三目标数据进行运算后得到的第二种第一中间结果并存储至对应的目标存储空间;
[0255]
所述多个计算核中的第一计算核获取至少两个第一中间结果,并对所述至少两个第一中间结果进行运算处理得到第二中间结果并存储至对应的目标存储空间,所述第一中间结果包括所述第一种第一中间结果和所述第二种第一中间结果;
[0256]
所述多个计算核中的第二计算核获取至少两个第二中间结果,并对所述至少两个第二中间结果进行运算得到运算结果,并将所述运算结果作为所述输出神经元存储所述目标存储空间。
[0257]
在一种可能的实现方式中,在所述第一数据包括输入神经元、输入权值和输出神经元,且根据所述第一数据的动态标签信息确定对所述输入神经元和所述输出神经元进行数据交换时,计算核所执行的运算任务,可以包括:
[0258]
每个计算核用于获取到输入神经元的多个第二数据中的第一目标数据和输入权值的多个第二数据中的第二目标数据,并对所述第一目标数据和第二目标数据进行运算后得到的第一种第一中间结果,并将所述第一种第一中间结果存储至与该计算核对应的存储空间中;
[0259]
每个计算核用于获取到输入神经元的多个第二数据中与所述第一目标数据不同的第四目标数据和所述第二目标数据,并对所述第四目标数据和第二目标数据进行运算后得到的第二种第一中间结果,并将所述第二种第一中间结果存储至与该计算核对应的存储空间中;
[0260]
所述多个计算核中的第一计算核获取至少两个第一中间结果,并对所述至少两个第一中间结果进行运算处理得到第二中间结果并存储至所述第一计算核对应的存储空间,所述第一中间结果包括所述第一种第一中间结果和所述第二种第一中间结果;
[0261]
所述多个计算核中的第二计算核获取至少两个第二中间结果,并对所述至少两个第二中间结果进行运算得到运算结果,并将所述运算结果作为所述输出神经元存储所述目标存储空间。
[0262]
在一种可能的实现方式中,所述动态标签信息还包括动态数据类型、动态数据维度顺序、分片参数、填充参数,所述拆分索引包括:目标拆分维度、每个第二数据在所述第一数据的目标拆分维度上的起始拆分位置和结束拆分位置,其中,所述数据拆分模块52可以包括:
[0263]
数据处理子模块,在确定所述第一数据的当前数据状态与所述动态标签信息不一致时,根据所述动态标签信息对所述第一数据进行处理,得到处理后第一数据;
[0264]
拆分子模块,在所述目标拆分维度上,以每个第二数据在所述第一数据的目标拆分维度上的起始拆分位置和结束拆分位置为基准,将所述处理后第一数据拆分为多个第二数据,
[0265]
其中,所述数据状态包括数据类型、数据维度的顺序和维度值。
[0266]
在一种可能的实现方式中,所述标签信息还可以包括静态标签信息,所述静态标签信息用于表征与所述第一数据所参与的神经网络运算相关联的信息,所述静态标签信息可以包括以下至少一项:静态数据类型、静态数据维度、静态数据维度顺序以及对应每个静态数据维度的维度值,
[0267]
其中,数据处理子模块所执行的处理可以包括以下至少一项:
[0268]
将所述第一数据的数据类型由所述静态数据类型转换为所述动态数据类型;
[0269]
将所述第一数据的数据维度的顺序由静态数据维度顺序调整为动态数据维度顺序;
[0270]
根据所述填充参数,对所述第一数据进行填充;
[0271]
根据所述分片参数,对所述第一数据进行切分。
[0272]
在一种可能的实现方式中,在所述第一数据包括多个常量数据时,所述装置还包括:
[0273]
数据打包模块,根据所述多核处理器中计算核的总数,对每个常量数据拆分获得的多个第二数据进行打包处理,形成对应于每个计算核的多个第一数据包后存储,以使每个计算核根据加载到的第一数据包执行对应的运算操作;所述第一数据包的数量与计算核总数相同;
[0274]
其中,所述第一数据包包括每一个常量数据拆分所获得的多个第二数据中的一个,所述第一数据包还包括以下至少一项:常量总数据量标记、所述第一数据所参与的神经网络运算中隐藏层的隐藏层总数据量标记、所述神经网络运算中的输入出地址标记。
[0275]
在一种可能的实现方式中,数据打包模块还用于执行以下至少一项操作:
[0276]
根据每个第一数据包的常量总数据量和所包含的每个第二数据的数据量,确定每个第二数据在对应的第一数据包的常量数据段中的第一段内偏移并记录;
[0277]
根据每个第一数据包的输入出地址总数据量、所包含的每个输入地址的数据量和每个输出地址的数据量,确定每个输入地址和每个输出地址在对应的第一数据包的地址数据段中的第二段内偏移并记录;
[0278]
根据每个第一数据包的隐藏层总数据量、所包含的每个隐藏层数据的数据量,确定每个隐藏层数据在对应的第一数据包的隐藏层数据段中的第三段内偏移并记录。
[0279]
在一种可能的实现方式中,所述装置还包括:
[0280]
标签确定模块,在拆分所述第一数据之前,确定所述第一数据的拆分索引、目标存储空间和目标数据交换层级。
[0281]
本公开实施例所提供的装置,可以在确定第一数据及其动态标签之后,基于动态标签信息中的拆分索引、目标存储空间的标识信息对第一数据进行拆分、布局存储,使得第二数据能够适配多核处理器的多个内存通道,以便利用多核处理器中的多个计算核执行运算操作,提高了神经网络运算的处理效率和速度。
[0282]
本公开实施例还提供了数据处理装置,所述装置包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时,实现如上述数据处理方法。
[0283]
本公开实施例还提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述数据处理方法。
[0284]
本公开提供一种机器学习运算装置,该机器学习运算装置可以包括一个或多个上述数据处理装置,用于从其他处理装置中获取待运算数据和控制信息,执行指定的机器学习运算。该机器学习运算装置可以从其他机器学习运算装置或非机器学习运算装置中获得神经网络计算宏指令或待执行神经网络计算指令,并将执行结果通过i/o接口传递给外围设备(也可称其他处理装置)。外围设备譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口,服务器。当包含一个以上数据处理装置时,数据处理装置间可以通过特定的结构进行链接并传输数据,譬如,通过pcie总线进行互联并传输数据,以支持更大规模的神经网络的运算。
此时,可以共享同一控制系统,也可以有各自独立的控制系统;可以共享内存,也可以每个加速器有各自的内存。此外,其互联方式可以是任意互联拓扑。
[0285]
该机器学习运算装置具有较高的兼容性,可通过pcie接口与各种类型的服务器相连接。
[0286]
图8是示出根据本公开实施例的一种组合处理装置1200的结构图。如图8中所示,该组合处理装置1200包括计算处理装置1202、接口装置1204、其他处理装置1206和存储装置1208。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置1210。计算处理装置1202可以为上述机器学习运算装置,或者上述数据处理装置。
[0287]
在不同的实施例中,本公开的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为多核人工智能处理器。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能计算核(也即上文所述计算核)或者人工智能计算核的部分硬件结构。
[0288]
在示例性的操作中,本公开的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本公开的其他处理装置可以包括中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本公开的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
[0289]
在一个或多个实施例中,该其他处理装置可以作为本公开的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和/或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
[0290]
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给其他处理装置。
[0291]
附加地或可选地,本公开的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据。例如,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
[0292]
在一些实施例里,本公开还公开了一种芯片(例如图9中示出的芯片1302)。在一种实现中,该芯片是一种系统级芯片(system on chip,soc),并且集成有一个或多个如图8中所示的组合处理装置。该芯片可以通过对外接口装置(如图9中示出的对外接口装置1306)
与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如dram接口)等。在一些实施例中,本公开还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本公开还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图9对该板卡进行详细地描述。
[0293]
图9是示出根据本公开实施例的一种板卡1300的结构示意图。如图9中所示,该板卡包括用于存储数据的存储器件1304,其包括一个或多个存储单元1310。该存储器件可以通过例如总线等方式与控制器件1308和上文所述的芯片1302进行连接和数据传输。进一步,该板卡还包括对外接口装置1306,其配置用于芯片(或芯片封装结构中的芯片)与外部设备1312(例如服务器或计算机等)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准pcie接口等。
[0294]
在一个或多个实施例中,本公开板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(micro controller unit,mcu),以用于对所述芯片的工作状态进行调控。
[0295]
根据上述结合图8和图9的描述,本领域技术人员可以理解本公开也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
[0296]
根据不同的应用场景,本公开的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本公开的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本公开的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本公开方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0297]
需要说明的是,为了简明的目的,本公开将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本公开的方案并不受所描述的动作的顺序限制。因此,依据本公开的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本公开所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本公开某个或某些方案的实现并不一
定是必需的。另外,根据方案的不同,本公开对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本公开某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
[0298]
在具体实现方面,基于本公开的公开和教导,本领域技术人员可以理解本公开所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0299]
在本公开中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本公开实施例所述方案的目的。另外,在一些场景中,本公开实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0300]
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本公开的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本公开实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于u盘、闪存盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0301]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如cpu、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static random access memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
[0302]
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领
域的其它普通技术人员能理解本文披露的各实施例。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献