指令生成方法、装置及电子设备与流程

文档序号:33712758发布日期:2023-04-01 00:36阅读:49来源:国知局
指令生成方法、装置及电子设备与流程

1.本公开涉及神经网络技术领域,尤其涉及一种指令生成方法、装置及电子设备。


背景技术:

2.在芯片的硬件电路设计中,通常会为芯片中的每个处理单元(processing element,pe)设置相应的控制器(control)。若芯片上有多个pe,会为每个pe单独设计一个对应的control。因此,在芯片包括多个pe时,多个pe与多个control之间的电路设计较复杂。
3.为了简化电路设计,相关技术提出一种多pe模式的电路设计方式,多pe模式是指多个pe同时与一个control连接,通过该control同时控制多个pe执行相同类型的控制指令。在多pe模式的实际应用中,有可能出现待执行指令无法均匀分配到多个pe的情况,例如,待执行指令包括2个load指令,而pe有3个,那么就会出现有的pe上分配了load指令,而有的pe上没有分配load指令。此时,control将无法控制多个pe同时执行相同类型的控制指令,从而导致数据无法处理。


技术实现要素:

4.现有的神经网络加速器无法支持多pe模式下部分指令数据的处理。
5.为了解决上述技术问题,提出了本公开。本公开的实施例提供了一种指令生成方法、装置及电子设备,在生成神经网络加速器可执行的合成指令序列时,充分考虑了多个待执行指令序列中的指令的指令类型,从而使神经网络加速器能够支持多pe模式下所有指令数据的处理。
6.根据本公开的一个方面,提供了一种用于神经网络加速器的指令生成方法,包括:首先,确定神经网络加速器包括的多个处理单元各自对应的待执行指令序列;其次,基于多个处理单元对应的多个待执行指令序列中的指令类型,在确定多个待执行指令序列中的第i个指令的指令类型不完全相同的情况下,将第i个指令的位置确定为待处理指令位置;接着,基于待处理指令位置,在待插入指令序列中插入与目标指令类型相同的指令,得到更新后的多个待执行指令序列;其中,待插入指令序列为多个待执行指令序列中,待处理指令位置的指令类型与目标指令类型不同的至少一个指令序列;最后,基于更新后的多个待执行指令序列,生成神经网络加速器的合成指令序列。
7.基于本方案,通过根据多个处理单元对应的多个待执行指令序列中的指令的指令类型,生成神经网络加速器的合成指令序列。即在生成神经网络加速器可执行的指令时,充分考虑了多个处理单元对应的多个待执行指令序列中的指令的指令类型,因此生成的合成指令序列符合多pe模式的数据处理规则。从而将不符合多pe模式的数据处理规则所要求的指令,转变成符合多pe模式的数据处理规则所要求的指令,以实现指令数据的处理。
8.根据本公开的一个方面,提供了一种用于神经网络加速器进行指令生成装置,包括:第一确定模块,用于确定神经网络加速器包括的多个处理单元各自对应的待执行指令
序列;第二确定模块,用于基于第一确定模块得到的多个处理单元对应的多个待执行指令序列中的指令类型,在确定多个待执行指令序列中的第i个指令的指令类型不完全相同的情况下,将第i个指令的位置确定为待处理指令位置;插入模块,用于基于第二确定模块确定的待处理指令位置,在待插入指令序列中插入与目标指令类型相同的指令,得到更新后的多个待执行指令序列;其中,待插入指令序列为多个待执行指令序列中,待处理指令位置的指令类型与目标指令类型不同的至少一个指令序列;生成模块,用于基于插入模块得到的更新后的多个待执行指令序列,生成神经网络加速器的合成指令序列。
9.根据本公开的一个方面,提供了一种计算机可读存储介质,存储介质存储有计算机程序,计算机程序用于执行上述任一的方法。
10.根据本公开的一个方面,提供了一种电子设备,该电子设备包括:处理器;用于存储处理器可执行指令的存储器;处理器,用于从存储器中读取可执行指令,并执行指令以实现上述任一的方法。
附图说明
11.通过结合附图对本公开实施例进行更详细的描述,本公开的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本公开实施例的进一步理解,并且构成说明书的一部分,与本公开实施例一起用于解释本公开,并不构成对本公开的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
12.图1是现有技术一示例性实施例提供的多pe硬件电路设计图。
13.图2是本公开一示例性实施例提供的多pe模式对应的硬件电路设计图。
14.图3是本公开一示例性实施例提供的多pe对应的多个指令序列。
15.图4是本公开所适用的系统的示例性结构图。
16.图5是本公开一示例性实施例提供的一种电子设备的结构示意图。
17.图6是本公开一示例性实施例提供的另一种电子设备的结构示意图。
18.图7是本公开一示例性实施例提供的用于神经网络加速器的指令生成方法的流程示意图之一。
19.图8是本公开一示例性实施例提供的用于神经网络加速器的指令生成方法的流程示意图之二。
20.图9是本公开一示例性实施例提供的用于神经网络加速器的指令生成方法的流程示意图之三。
21.图10是本公开一示例性实施例提供的用于神经网络加速器的指令生成方法的流程示意图之四。
22.图11是本公开一示例性实施例提供的用于神经网络加速器的指令生成方法的流程示意图之五。
23.图12是本公开一示例性实施例提供的用于神经网络加速器的指令生成方法的流程示意图之六。
24.图13是本公开一示例性实施例提供的应用神经网络加速器的指令生成方法处理多个指令序列的示意图之一。
25.图14是本公开一示例性实施例提供的应用神经网络加速器的指令生成方法处理
多个指令序列的示意图之二。
26.图15是本公开一示例性实施例提供的一种指令生成装置的结构图。
27.图16是本公开一示例性实施例提供的一种电子设备的结构图。
具体实施方式
28.下面,将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。
29.通常,在芯片包含多个pe时,芯片的硬件电路设计方式是:为多个pe中的每个pe单独设计一个对应的control,然后将每个pe与其对应的control相连。从而在每个control接收到任务后,先解析任务对应的待执行指令,然后控制与该control相连的pe执行该待执行指令。
30.图1示例性的示出了一种芯片的硬件电路设计图。该硬件电路中包括3个control和3个pe,3个control分别是control0、control1和control2。3个pe分别是pe0、pe1和pe2。其中,control0和pe0连接,control1和pe1连接,control2和pe2连接。当control0接收到任务后,先解析任务对应的待执行指令,然后控制pe0执行该待执行指令,pe0执完行该待执行指令后输出数据运算结果。control1、pe1,以及control2、pe2处理数据的方式与control0、pe0处理数据的方式相似,在此不再赘述。
31.基于上述硬件电路设计,在芯片包含多个pe的情况下,每个pe与其对应的control都要单独设计连线,这种设计方式较为复杂。为了简化硬件电路设计,提出了多pe模式的这种设计方式。多pe模式的硬件电路设计为:一个control对应多个pe,即一个control与多个pe相连。这样一来,不仅能够减少control的数量,同时也能够减少多个control与pe之间的连线。多pe模式的数据处理规则为:一个control同时控制多个pe执行相同类型的待执行指令,以输出数据运算结果。
32.图2示例性的示出了一种多pe模式的芯片硬件电路设计图,该硬件电路设计图中包括1个control和3个pe,1个control是指control0,3个pe分别是pe0、pe1和pe2。其中,pe0、pe1和pe2均与control0连接。在control0接收到任务后,先解析任务对应的待执行指令,然后控制pe0、pe1和pe2同时执行相同指令类型的待执行指令。示例性的,以control0解析任务对应的待执行指令为load指令为例,control0可以向pe0至pe3下发一条多pe的load指令,以控制pe0、pe1和pe2执行load指令。该多pe的load指令可以为:load addr_pe0=1234addr_pe1=2234addr_pe2=3234。
33.结合上述可知,多pe模式要求多个pe同时执行相同指令类型的待执行指令。当待执行指令无法均匀分配到各个pe上,或者,预先设置每个pe处理不同的任务时,那么各个pe要执行的指令序列必然存在差异,就会出现一个control无法控制多个pe执行同一指令类型的待执行指令的情况,从而无法实现数据处理。例如,待执行指令包括5个load指令,而pe只有3个,那么就会出现有的pe上分配了2个load指令,有的pe上分配了1个load指令的情况,导致一个control无法控制多个pe执行同一指令类型的待执行指令,从而无法实现数据处理。
34.图3示例性的示出了多pe模式下,多个pe对应的多个指令序列。多个指令序列分别
是pe0的指令序列0、pe1的指令序列1以及pe2的指令序列2。结合图3可知,pe0的指令序列0中共有六条指令,pe1的指令序列1中共有七条指令,pe2的指令序列2中共有四条指令。
35.其中,pe0的指令序列0从第一个指令(即第一行的指令)到最后一个指令(即第六行的指令)依次是load 1,conv 2,store 3,load 4,conv 5和store 6。pe1的指令序列1从第一个指令(即第一行的指令)到最后一个指令(即第七行的指令)依次是load a,conv b,conv c,store d,load e,conv f和store g。pe2的指令序列2从第一个指令(即第一行的指令)到最后一个(即第四行的指令)的指令依次是load

,conv

,conv

和store


36.结合前述可知,多pe模式的数据处理规则为一个control同时控制多个pe执行相同类型的待执行指令,那么对于图3所示的多个指令序列而言,数据处理的过程为:control同时处理指令序列0、指令序列1以及指令序列2中的第一个指令(即第一行的指令),然后同时处理指令序列0、指令序列1以及指令序列2中的第二个指令(即第二行的指令),依次类推,直到处理完指令序列0、指令序列1以及指令序列2中最后一行的指令为止。
37.其中,指令序列0的第一个指令为load 1、指令序列1的第一个指令为load a、指令序列2的第一个指令为load

。指令序列0、指令序列1和指令序列2的第一个指令的指令类型相同,均是load指令。因此,指令序列0、指令序列1和指令序列2的第一个指令符合多pe模式的数据处理规则,control可以通过多pe指令控制pe0至pe2执行相同类型的load指令。
38.指令序列0的第二个指令、指令序列1的第二个指令和指令序列2的第二个指令的指令类型均是conv指令,也符合多pe模式的数据处理规则。
39.指令序列0的第三个指令、指令序列1的第三个指令和指令序列2的第三个指令的指令类型包括store指令和conv指令,即指令序列0、指令序列1和指令序列2中的第三个指令的指令类型不完全相同,因此指令序列0、指令序列1和指令序列2中的第三个指令不符合多pe模式的数据处理规则。
40.指令序列0的第四个指令、指令序列1的第四个指令和指令序列2的第四个指令的指令类型包括load指令和store指令,即指令序列0、指令序列1和指令序列2中的第四个指令的指令类型不完全相同,因此指令序列0、指令序列1和指令序列2中的第四个指令也不符合多pe模式的数据处理规则。
41.指令序列0的第五个指令和指令序列1的第五个指令的指令类型包括conv指令和load指令,并且指令序列2只有四个指令,没有第五个指令。因此指令序列0、指令序列1和指令序列2中的第五个指令也不符合多pe模式的数据处理规则。
42.指令序列0的第六个指令和指令序列1的第六个指令的指令类型包括store指令和conv指令,并且指令序列2只有四个指令,没有第六个指令。因此指令序列0、指令序列1和指令序列2中的第五个指令也不符合多pe模式的数据处理规则。
43.指令序列1的第七个指令的指令类型为store指令,指令序列0和指令序列2均没有第七个指令,所以指令序列0、指令序列1和指令序列2中的第七个指令也不符合多pe模式的数据处理规则。
44.综上,指令序列0、指令序列1和指令序列2中的指令从第三行指令开始,均不符合多pe模式的数据处理规则,因此在多pe模式下,指令序列0、指令序列1和指令序列2存在无法处理的指令。
45.因此为了解决多pe模式下,部分指令无法处理的问题,本公开实施例提供了一种
用于神经网络加速器的指令生成方法,该方法先确定出各指令序列中第i个指令的指令类型不完全相同的待处理指令位置,由于待处理指令位置对应的指令的指令类型不完全相同,那么说明待处理指令位置上至少包括两种指令类型。由于多pe模式下,多个pe的指令是同时处理的,那么就要求多个pe的指令的指令类型必须保持一致,所以需要从至少两种指令类型中选择出一种指令类型,作为待处理指令位置上指令的指令类型,将未被选中的指令类型对应的指令所在的指令序列作为待插入指令序列。将待插入指令序列的待处理指令位置处的指令下移一位,在空出的位置上填充选中的指令类型对应的指令。选中的指令类型对应的指令为待插入指令序列中的指令,插入选中的指令类型对应的指令不会破坏现有数据。这样,能够保证多个pe对应的多个指令序列被同时处理时,指令类型一致,从而实现多pe模式下的数据计算。
46.图4为本公开实施例提供的一种执行神经网络运算的系统,该系统包括编译侧设备41和运行侧设备42,编译侧设备用于生成神经网络的合成指令序列,运行侧设备42用于通过运行编译侧设备41提供的合成指令序列来执行神经网络运算,这些运算包括但不限于:卷积运算、池化运算、激活函数运算等。
47.在一些实施例中,编译侧设备41可通过电子设备50来实现。该电子设备20可以包括但不限于个人计算机、服务器计算机、多处理器系统、基于微处理器的系统等。
48.在一些实施例中,运行侧设备42可通过电子设备60来实现。该电子设备30可以包括但不限于神经网络加速器或者神经网络芯片等。
49.图5为本公开实施例提供的一种电子设备50的结构示意图,如图5所示,电子设备50包括至少一个处理器51和存储器52。
50.处理器51用于执行本公开实施例中的用于神经网络加速器的指令生成方法,该处理器51可以为强性能的中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)等支持神经网络指令序列编译的处理器,或者具有编译处理能力和/或指令执行能力的其他形式的处理单元。
51.存储器52可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。该易失性存储器例如可以包括随机存取存储器(random-access memory,ram)和/或高速缓冲存储器(cache)等。该非易失性存储器例如可以包括只读存储器(read-only memory,rom)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器51可以运行程序指令,以实现下文的用于神经网络加速器的指令生成方法。
52.在一些实施例中,如图5所示,电子设备50还可以包括输入装置53和输出装置54。输入装置53可以包括例如键盘、鼠标等等,可供编译人员输入神经网络的参数,例如,多个pe的指令序列等。输出装置54可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等,可供编译人员查看编译的最终结果或编译过程中的中间数据等。
53.需要说明的是,本公开实施例对于电子设备50的具体结构不作限定,电子设备50可以包括比图5所示的更多或更少的部件。例如,电子设备50还可以包括总线、输入/输出接口等组件。
54.图6为本公开实施例提供的一种电子设备60的结构示意图,如图6所示,电子设备
60可以包括:控制单元61和计算单元62,控制单元61用于运行指令以控制计算单元62执行下述对神经网络模型中的池化层进行池化运算的方法。
55.控制单元61可以包括一个或多个处理器或者具有神经网络运算能力和/或指令执行能力的其他形式的处理单元。该处理器可以包括但不限于gpu、大脑处理器(brain processing unit,bpu)、张量处理单元(tensor processing unit,tpu)等支持神经网络相关计算的处理器。在一些实施例中,控制单元61用于根据神经网络加速器的指令(例如,卷积运算指令、池化运算指令以及激活函数运算指令等)控制计算单元62执行相应运算。
56.计算单元62包括运算电路,该运算电路可配置为执行神经网络的运算操作,该运算操作包括但不限于卷积运算、池化运算、激活函数运算等运算中的任一项或多项。
57.在一些实施例中,电子设备60还可以包括缓冲存储器63和片外存储器64。缓冲存储器63可以包括一个或多个独立的缓存存储器或者具有数据高速缓存能力的处理单元,并且可以在控制单元61的控制下对片外存储器64进行访存。在一些实施例中,缓冲存储器61可以为速度快、容量小的静态存取存储器,比如,静态随机存取存储器(static random access memory,sram)。示例性地,缓冲存储器63可配置为接收来自片外存储器64的输入特征数据的至少一部分和/或卷积核的数据并缓存以供计算单元62使用,以及还可配置为接收并缓存计算单元62输出的输出特征数据,并将该输出特征数据输出到片外存储器64中。
58.片外存储器64可以包括一个或多个独立的存储器或者具有数据存储能力的处理单元,并且可以在控制单元61的控制下供缓冲存储器63进行访存。在一些实施例中,片外存储器64为速度慢、容量大的动态存取存储器,比如动态随机存取存储器(dynamic random access memory,dram)。在一些实施例中,片外存储器64为双倍数据速率(double data rate,ddr)。
59.需要说明的是,本公开实施例对于电子设备60的具体结构不作限定,电子设备60可以包括比图6所示的更多或更少的部件。例如,电子设备60还可以总线等组件。
60.本公开下述实施例的方法可以应用于图像处理、智能驾驶等众多需要进行神经网络计算的领域,例如,通过执行本公开实施例提供的方法可以在图像处理领域对图像数据进行处理。
61.图7为本公开实施例提供的一种用于神经网络加速器的指令生成方法,该方法可以应用于编译侧设备71,如图7所示,该方法包括以下步骤701-步骤704。
62.步骤701、确定神经网络加速器包括的多个处理单元各自对应的待执行指令序列。
63.在一些实施例中,该神经网络加速器可以为任一能够执行神经网络算法的加速器,例如,该神经网络加速器可以为大脑处理器(brain processing unit,bpu)、神经网络处理器(neural network processing unit,npu)等。本公开实施例对于神经网络加速器的类型不作限定,下述实施例以神经网络加速器为bpu为例进行示例性说明。
64.示例性地,上述处理单元可以为pe,神经网络加速器包括的多个处理单元可以共用一个控制器。即,该多个pe可以按照多pe模式被设计在硬件电路中。当编译人员输入任务,或者神经网络加速器内部运行触发任务时,神经网络加速器为多个pe中的每个pe分配任务,根据分配的任务生成相应的待执行指令序列。上述多个pe中各pe对应的待执行指令序列包括的指令个数可能相同,也可能不同,本公开实施例对此不作限定。
65.示例性的,参见图2,神经网络加速器中的多个处理单元包括pe0、pe1和pe2,pe0对
应的待执行指令序列可以为图3所示的指令序列0、pe1对应的待执行指令序列可以为图3所示的指令序列1、pe2对应的待执行指令序列可以为图3所示的指令序列2。
66.步骤702、基于多个处理单元对应的多个待执行指令序列中的指令类型,在确定多个待执行指令序列中的第i个指令的指令类型不完全相同的情况下,将第i个指令的位置确定为待处理指令位置。
67.在确定出多个pe各自对应的待执行指令序列后,基于多pe模式的数据处理规则,首先判断多个待执行指令序列中的指令是否符合要求。
68.多pe模式的数据处理规则为:一个control同时控制多个pe执行相同类型的待执行指令。即多个pe对应的待执行指令序列需要满足各待执行指令序列中第i个指令的指令类型相同。如果各待执行指令序列中第i个指令的指令类型不完全相同(例如,部分相同或完全不同),就需要对各待执行指令序列进行处理,以确保各待执行指令序列中第i个指令的指令类型相同。
69.需要说明的是,i为整数。各待执行指令序列中的第i个指令位于指令序列的同一行,因此可以按“行”遍历每个pe对应的待执行指令序列中的指令,以判断多个pe各自对应的待执行指令序列中每一行的指令的指令类型是否一致。
70.若各pe对应的待执行指令序列中,每一行指令的指令类型相同,那么可以直接按照多pe模式的数据处理规则对多个指令序列进行处理,以输出数据运算结果。
71.若各pe对应的待执行指令序列中,存在指令类型不完全相同的一行指令时,可以将该行所属的位置确定为待处理指令位置。例如,若各pe对应的待执行指令序列中第i个指令的指令类型不完全相同(即第i行指令的指令类型不完全相同),则将第i个指令的位置确定为待处理指令位置。该待处理指令位置也可以是第i行指令的位置。
72.示例性的,参见图3,在pe0对应的指令序列0、pe1对应的指令序列1以及pe2对应的指令序列2中,按“行”遍历指令序列0、指令序列1以及指令序列2的每行指令。由于指令序列0、指令序列1以及指令序列2的第三行对应的指令为store 3、conv c和conv

。第四行对应的指令为load4、store d和store

。第五行对应的指令为conv 5、load e和/。第六行对应的指令为store 6、conv f和/。第七行对应的指令为/、store g和/。其中,/代表该位置的数据为空。因此,可以确定指令类型不完全相同的“行”是第三行、第四行、第五行、第六行,以及第七行。故将指令序列0、指令序列1以及指令序列2中的第三行、第四行、第五行、第六行,以及第七行对应的位置作为待处理指令位置。
73.步骤703、基于待处理指令位置,在待插入指令序列中插入与目标指令类型相同的指令,得到更新后的多个待执行指令序列。
74.其中,待插入指令序列为多个待执行指令序列中,待处理指令位置的指令类型与目标指令类型不同的至少一个指令序列。
75.为了能够利用多pe模式的数据处理规则,对多个指令序列中的指令进行处理,当确定出多个指令序列中存在指令类型不完全相同的行时,可以在待插入指令序列的待处理指令位置(即指令类型不完全相同的行)插入与目标指令类型相同的指令,以使得更新后的多个待执行指令序列中位于该待处理指令位置的指令类型均为目标指令类型。
76.步骤704、基于更新后的多个待执行指令序列,生成神经网络加速器的合成指令序列。
77.示例性的,合成指令可以为多pe指令。由于更新后的多个待执行指令序列中位于同一行的指令类型均相同,因此可以基于更新后的多个待执行指令序列中每行的指令,生成神经网络加速器的多pe指令序列。
78.本公开实施例中的编译侧设备在生成神经网络加速器可执行的指令时,充分考虑了多个处理单元对应的多个待执行指令序列中的指令的指令类型,因此生成的合成指令序列符合多pe模式的数据处理规则。即能够实现将不符合多pe模式的数据处理规则所要求的指令,转变成符合多pe模式的数据处理规则所要求的指令,从而实现指令数据的处理。
79.在一些实施例中,如图8所示,在上述图7所示实施例的基础上,上述步骤703可以包括步骤801-步骤803。
80.步骤801、基于待处理指令位置,确定目标指令类型。
81.具体的,根据待处理指令位置中的指令,确定目标指令类型。
82.结合图3,在pe0对应的指令序列0、pe1对应的指令序列1以及pe2对应的指令序列2中,待处理指令位置为指令序列0、指令序列1以及指令序列2中的第三行、第四行、第五行、第六行,以及第七行所对应的位置。
83.示例性的,以指令序列0、指令序列1以及指令序列2中的第三行是待处理指令位置为例,确定目标指令类型的过程为:确定指令序列0、指令序列1以及指令序列2中的第三行对应的指令为store 3、conv c和conv

。根据store 3、conv c和conv

,确定出指令序列0、指令序列1以及指令序列2中的第三行的目标指令类型。
84.在一些实施例中,如图9所示,上述步骤801可以包括步骤901-步骤902。
85.步骤901、基于待处理指令位置,确定每个待执行指令序列中位于待处理指令位置的第一指令的指令类型。
86.示例性的,参见图3,以指令序列0、指令序列1以及指令序列2中的第三行是待处理指令位置为例,那么第一指令有可能是store 3、conv c或conv


87.步骤902、基于每个第一指令的指令类型,确定目标指令类型。
88.若第一指令是store 3,store 3的指令类型为store,则目标指令类型是store。若第一指令是conv c,conv c的指令类型为conv,则目标指令类型是conv。若第一指令是conv

,conv

的指令类型为conv,则目标指令类型也是conv。
89.在确定目标指令类型时,可以将各待执行指令序列中位于待处理指令位置的任一指令类型确定为目标指令类型,也可以根据各待执行指令序列中同一指令类型的数量,将数量最多的指令类型确定为目标指令类型。下面分别对这两种确定目标指令类型的方式进行说明。
90.在一些实施例中,如图10所示,上述步骤902可以包括步骤1001。
91.步骤1001、基于每个第一指令的指令类型,将任一第一指令的指令类型确定为目标指令类型。
92.在确定出待处理指令位置后,待处理指令位置对应多个指令,第一指令可以是多个指令中的任一个指令。从多个指令中选择出第一指令之后,将第一指令的指令类型确定为目标指令类型。
93.示例性的,参见图3,以指令序列0、指令序列1以及指令序列2中的第三行是待处理指令位置为例,那么第一指令是从store 3、conv c以及conv

中选择出的,第一指令可以
是store 3、conv c以及conv

中的任一个。若选择的第一指令是store 3,则目标指令类型store。若选择的第一指令是conv c,则目标指令类型conv。若选择的第一指令是conv

,则目标指令类型也是conv。
94.在一些实施例中,如图11所示,在上述图9所示实施例的基础上,上述步骤902可以包括步骤1101-步骤1102。
95.步骤1101、基于每个第一指令的指令类型,确定同一指令类型的指令数量。
96.待处理指令位置包括多个指令,多个指令的指令类型可以都不相同,还可以部分相同,部分不同。若多个指令的指令类型都不相同时,说明同一指令类型的指令数量都为1。若多个指令的指令类型部分相同,部分不同时,将同一指令类型的指令数量进行计数,以得出不同指令类型中每种指令类型对应的指令数量。
97.示例性的,参见图3,以指令序列0、指令序列1以及指令序列2中的第三行是待处理指令位置为例,第一指令为store 3、conv c以及conv

。第一指令的指令类型包括store和conv c,store类型对应的指令数量是1,conv类型对应的指令数量是2。
98.步骤1102、将同一指令类型的指令数量最多的指令类型确定为目标指令类型。
99.在确定出同一指令类型的指令数量后,将指令数量最多的指令类型确定为目标指令类型。将指令数量最多的指令类型作为目标指令类型,那么待插入指令序列会变少,相应的插入指令的次数也会变少。插入的次数变少,那么出错也会变少。所以,采用这种方式不仅可以提高数据处理效率,还能降低数据处理的错误率。
100.示例性的,参见图3,以指令序列0、指令序列1以及指令序列2中的第三行是待处理指令位置为例,由于第一指令中指令类型为store的指令数量为1,指令类型为conv c的指令数量为2。因此,选择conv作为目标指令类型。
101.步骤802、在多个待执行指令序列中,将待处理指令位置的指令类型与目标指令类型不同的指令序列确定为待插入指令序列。
102.结合步骤801可知,目标指令类型是根据待处理指令位置中的指令确定出的。由于各待执行指令序列中待处理指令位置的指令类型不完全相同,因此在确定目标指令类型后,待处理指令位置中的指令可以分为与目标指令类型一致的指令和与目标指令类型不一致的指令。将与目标指令类型不一致的指令所属的指令序列认为是待插入指令序列。
103.示例性的,参见图3,以指令序列0、指令序列1以及指令序列2中的第三行是待处理指令位置为例,那么目标指令类型有可能是store或者conv。
104.若目标指令类型是store,与store的指令类型一致的指令是指令序列0中的store 3,与store的指令类型不一致的指令是指令序列1中的conv c和指令序列2中的conv

。所以待插入指令序列是指令序列1和指令序列2。
105.若目标指令类型是conv,与conv的指令类型一致的指令是指令序列1中的conv c和指令序列2中的conv

,与conv的指令类型不一致的指令是指令序列0中的store 3。所以待插入指令序列是指令序列0。
106.步骤803、在待插入指令序列中插入与目标指令类型相同的指令,得到更新后的多个待执行指令序列。
107.示例性的,参见图3,以指令序列0、指令序列1以及指令序列2中的第三行是待处理指令位置为例,若目标指令类型是store,则在指令序列1和指令序列2中插入与store类型
相同的指令,得到更新后的指令序列1和指令序列2;更新后的指令序列0、指令序列1、指令序列2中第三行的指令类型均为store。若目标指令类型是conv,则在指令序列0中插入与conv类型相同的指令,得到更新后的指令序列0;更新后的指令序列0、指令序列1、指令序列2中第三行的指令类型均为conv。
108.在一些实施例中,如图12所示,在上述图8所示实施例的基础上,上述步骤803包括步骤1201-步骤1202。
109.步骤1201、根据目标指令类型,在待插入指令序列中确定与目标指令类型相同的指令。
110.结合图10和图11可知,目标指令类型的确定方式有两种。在确定出目标指令类型后,根据目标指令类型,在待插入指令序列中,确定出目标指令类型对应的指令。查找到的指令至少满足两个条件,第一个条件为指令的指令类型为目标指令类型。第二个条件为插入指令后,不破坏待插入指令序列的数据运算结果,以确保插入指令后与插入指令前的数据运算结果相同。
111.步骤1202、在待插入指令序列中的待处理指令位置处插入与目标指令类型相同的指令。
112.在利用图11所示的方式,确定出目标指令类型后,可以示例性参考图13所示的第一种处理方案,在待插入指令序列中的待处理指令位置处插入与目标指令类型相同的指令。
113.图13中的(a)示例性的示出了pe0的指令序列0、pe1的指令序列1以及pe2的指令序列2。指令序列0、指令序列1以及指令序列2中的第一行的指令数据的指令类型都是一致的,基于多pe模式的数据处理规则处理即可。指令序列0、指令序列1以及指令序列2中的第二行的指令数据的指令类型也是一致的,基于多pe模式的数据处理规则处理即可。指令序列0、指令序列1以及指令序列2中的第三行指令数据的指令类型包括store和conv。为了提高数据处理效率,可以采用图11所示的方式,将指令序列0、指令序列1以及指令序列2中的第三行的目标指令类型确定为conv。
114.根据目标指令类型conv,可以确定出待插入指令序列为指令序列0,并在指令序列0中确定与目标指令类型conv一致的指令包括conv 2和conv 5。由于conv 2较conv 5距离指令序列0的第三行更近,并且在指令序列0的第三行插入conv 2,相当于重复计算conv 2,不会破坏指令序列0的数据运算结果。因此,在指令序列0确定出与目标指令类型conv一致的指令为conv 2。
115.接着,将conv 2插入指令序列0中的第三行,并将图13中的(b)中的标识11所指示的指令序列0中第三行以及第三行以后的指令数据均下移一位,得到如图13中的(c)所示的指令序列0。指令序列0中第三行以及第三行以后的指令数据下移后的位置参见图13中的(c)中的标识11对应的方框。
116.在第三行插入目标指令之后,还需继续遍历各指令序列中的第四行指令,若指令序列0、指令序列1和指令序列2中第四行指令的指令类型相同,则无需更新第四行指令,直接生成多pe指令即可。若指令序列0、指令序列1和指令序列2中第四行指令的指令类型不完全相同,则需要按照上述图7至图12任一实施例所示的指令生成方法,更新第四行指令,并生成第四行指令对应的多pe指令。依次类推直到处理完最后一行指令为止,可以得到更新
后的3个待执行指令序列,而且更新后的3个待执行指令序列中每行的指令的指令类型均相同。
117.对指令序列0、指令序列1和指令序列2中第四行到第七行的指令进行上述处理后,可以得到如图13中的(d)所示的更新后的指令序列0、更新后的指令序列1和更新后的指令序列2。更新后的指令序列0从第一行到第七行的指令依次是load 1,conv 2,conv 2,store 3,load 4,conv 5和store6。更新后的指令序列1从第一行到第七行的指令依次是load a,conv b,conv c,store d,load e,conv f和store g。更新后的指令序列2从第一行到第七行的指令依次是load

,conv

,conv

,load

,load

,conv

和load

。很显然,更新后的指令序列0、更新后的指令序列1和更新后的指令序列2中同一行指令的指令类型均相同。
118.在得到更新后的多个待执行指令序列后,将更新后的多个待执行指令序列中每一行的指令合并,生成神经网络加速器的合成指令序列。
119.具体的,将更新后的指令序列0、指令序列1和指令序列2中的指令数据合并,得到合成指令序列,即图13中的(e)所示的多pe指令。多pe指令包括7个子pe指令,7个子pe指令分别是load 1,a,

;conv 2,b,

,conv 2,c,

,store 3,d,

,load 4,e,

,conv 5,f,

和store6,g,


120.在利用图10所示的方式,确定出目标指令类型后,可以示例性参考图14所示的第二种处理方案,在待插入指令序列中的待处理指令位置处插入与目标指令类型相同的指令。
121.基于图13中的(a)示例性的示出了pe0的指令序列0、pe1的指令序列1以及pe2的指令序列2。首先对指令序列0、指令序列1以及指令序列2中的第三行的指令数据进行调整。指令序列0、指令序列1以及指令序列2中的第三行指令数据的指令类型包括store和conv。利用图10所示的方式,可以将指令序列0、指令序列1以及指令序列2中的第三行的目标指令类型确定为store或者conv。
122.示例性的,以指令序列0、指令序列1以及指令序列2中的第三行的目标指令类型是store为例,对第二种处理方案进行说明。
123.根据目标指令类型store,可以确定出待插入指令序列为指令序列1和指令序列2,那么需要在指令序列1和指令序列2中分别确定出与目标指令类型store一致的指令。指令序列1中与目标指令类型store一致的指令有store d和store g。由于store d较store g距离指令序列1的第三行更近,因此,在指令序列1确定出与目标指令类型store一致的指令为store d。指令序列2中与目标指令类型store一致的指令只有store

。所以,在指令序列2确定出与目标指令类型store一致的指令为store


124.接着,将store d插入指令序列1中第三行,将store

插入指令序列2中第三行,并将图14中的(a)中的标识12所指示的指令序列1中原始的第三行和第三行以后的指令数据,以及指令序列2中原始的第三行和第三行以后的指令数据均下移一位,得到如图14中的(b)所示的指令序列1和指令序列2。指令序列1中第三行和第三行以后的指令数据,指令序列2中第三行和第三行以后的指令数据,下移后的位置参见图14中的(b)中的标识12对应的方框。
125.在第三行插入目标指令之后,还需继续遍历各指令序列中的第四行指令,若指令序列0、指令序列1和指令序列2中第四行指令的指令类型相同,则无需更新第四行指令,直
接生成多pe指令即可。若指令序列0、指令序列1和指令序列2中第四行指令的指令类型不完全相同,则需要按照上述图7至图12任一实施例所示的指令生成方法,更新第四行指令,并生成第四行指令对应的多pe指令。依次类推直到处理完最后一行指令为止,可以得到更新后的3个待执行指令序列,而且更新后的3个待执行指令序列中每行的指令的指令类型均相同。
126.在一些实施例中,在利用多pe模式的数据处理规则计算指令时,还可以将待插入指令序列中的待处理指令位置处的指令的数据运算结果存储在非活跃地址,将原始的待插入指令序列中除待处理指令位置处的指令以外的其他指令(即未插入指令时待执行指令序列中的指令)的数据运算结果存储在活跃地址。其中,非活跃地址为用于存储无效数据的地址。活跃地址为用于存储有效数据的地址。
127.例如,以待插入指令序列包括指令1和指令2,插入的指令为指令3,将指令3插入指令1和指令2之间为例,如果将指令1、指令2和指令3的数据运算结果均存储在活跃地址(例如,将指令1、指令2和指令3的数据运算结果分别存储在活跃地址1、活跃地址2和活跃地址3),那么,在执行指令2时,会从活跃地址3读取指令3的数据运算结果,并按照指令2的指令类型对该指令3的数据运算结果进行处理。这与原始的待插入指令序列在执行指令2时,会从活跃地址1读取指令1的数据运算结果,并按照指令2的指令类型对该指令1的数据运算结果进行处理不同,因此会导致插入指令3以后的数据运算结果与未插入指令3时的数据运算结果不同。
128.如果将指令3的数据运算结果存储在非活跃地址(如,非活跃地址1),指令1和指令2的数据运算结果分别存储在活跃地址1和活跃地址2,那么,在执行指令2时,由于非活跃地址1存储的指令3的数据运算结果无效,因此会从活跃地址1读取指令1的数据运算结果,并按照指令2的指令类型对该指令1的数据运算结果进行处理。这与原始的待插入指令序列在执行指令2时,会从活跃地址1读取指令1的数据运算结果,并按照指令2的指令类型对该指令1的数据运算结果进行处理完全相同,因此插入指令3以后的数据运算结果与未插入指令3时的数据运算结果完全相同。
129.也就是说,本技术通过将插入指令的数据运算结果存储在非活跃地址,以使插入指令的数据运算结果不会参与到原始的待插入指令序列中各指令的运算,因此,能够确保插入指令后的数据运算结果与未插入指令后的数据运算结果相同。
130.图15为本公开实施例提供的一种指令生成装置,如图15所示,该指令生成装置1500包括第一确定模块1501、第二确定模块1502、插入模块1503和生成模块1504。
131.第一确定模块1501,用于确定神经网络加速器包括的多个处理单元各自对应的待执行指令序列。
132.第二确定模块1502,用于基于第一确定模块得到的多个处理单元对应的多个待执行指令序列中的指令类型,在确定多个待执行指令序列中的第i个指令的指令类型不完全相同的情况下,将第i个指令的位置确定为待处理指令位置。
133.插入模块1503,用于基于第二确定模块确定的待处理指令位置,在待插入指令序列中插入与目标指令类型相同的指令,得到更新后的多个待执行指令序列;其中,待插入指令序列为多个待执行指令序列中,待处理指令位置的指令类型与目标指令类型不同的至少一个指令序列。
134.生成模块1504,用于基于插入模块得到的更新后的多个待执行指令序列,生成神经网络加速器的合成指令序列。
135.在一些实施例中,插入模块1503包括:第一确定单元、第二确定单元和第三确定单元。第一确定单元,用于基于待处理指令位置,确定目标指令类型。第二确定单元,用于在多个待执行指令序列中,将待处理指令位置的指令类型与第二确定单元确定的目标指令类型不同的指令序列确定为待插入指令序列。第三确定单元,用于在第二确定单元确定的待插入指令序列中插入与目标指令类型相同的指令,得到更新后的多个待执行指令序列。
136.在一些实施例中,第一确定单元包括第一确定子单元和第二确定子单元。第一确定子单元用于基于待处理指令位置,确定每个待执行指令序列中位于待处理指令位置的第一指令的指令类型。第二确定子单元,用于基于每个第一指令的指令类型,确定目标指令类型。
137.在一些实施例中,第二确定子单元,具体用于基于每个第一指令的指令类型,将任一第一指令的指令类型确定为目标指令类型。
138.在一些实施例中,第二确定子单元,具体用于基于每个第一指令的指令类型,确定同一指令类型的指令数量;以及将同一指令类型的指令数量最多的指令类型确定为目标指令类型。
139.在一些实施例中,第三确定单元具体用于根据目标指令类型,在待插入指令序列中确定与目标指令类型相同的指令;以及在待插入指令序列中的待处理指令位置处插入与目标指令类型相同的指令,得到更新后的多个待执行指令序列。
140.图16为本公开实施例提供的一种电子设备的结构图,如图16所示,该电子设备1600包括一个或多个处理器1601和存储器1602。
141.处理器1601可以是中央处理单元(cpu)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备1600中的其他组件以执行期望的功能。
142.存储器1602可以包括一个或多个计算机程序产品,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器1601可以运行程序指令,以实现上文的本公开的各个实施例的指令生成方法以及/或者其他期望的功能。
143.在一个示例中,电子设备1600还可以包括:输入装置1603和输出装置1604,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
144.当然,为了简化,图16中仅示出了该电子设备1600中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备1600还可以包括任何其他适当的组件。
145.除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,计算机程序指令在被处理器运行时使得处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的指令生成方法中的步骤。
146.计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,程序设计语言包括面向对象的程序设计语言,诸如java、c++
等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
147.此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令在被处理器运行时使得处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的指令生成方法中的步骤。
148.计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
149.以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
150.本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
151.还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
152.提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
153.为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1