掌桥专利:专业的专利平台
掌桥专利
首页

指令生成装置、方法、设备、存储介质和计算机程序产品

文献发布时间:2024-04-18 19:58:21


指令生成装置、方法、设备、存储介质和计算机程序产品

技术领域

本发明涉及控制技术领域,特别是涉及一种指令生成装置、方法、设备、存储介质和计算机程序产品。

背景技术

随着神经网络能够解决的问题越来越复杂,神经网络的规模也逐渐增大,用于处理神经网络运算的神经网络处理器计算量非常庞大。

传统技术中,神经网络处理器由对应的指令生成装置下发的控制指令依次进行一组包括取数、计算和存数的操作。传统技术中的指令生成装置是按照指令序列逐个发送控制指令至神经网络处理器,控制处理器处理神经网络运算。

然而,上述指令生成装置会使得神经网络运算的执行效率比较低。

发明内容

基于此,有必要提供一种能够提高神经网络运算效率的指令生成装置、方法、设备、存储介质和计算机程序产品。

第一方面,本申请提供了一种指令生成装置,所述装置包括:取数指令发射模块、矩阵指令发射模块以及存数指令发射模块;

取数指令发射模块,用于获取目标神经网络对应的取数解码信号,根据取数解码信号生成取数指令;取数指令用于控制神经网络处理器根据取数指令获取输入特征图以及卷积核;

矩阵指令发射模块,用于获取目标神经网络对应的矩阵解码信号,根据矩阵解码信号生成矩阵计算指令;矩阵计算指令用于控制神经网络处理器根据矩阵计算指令对输入特征图和卷积核执行卷积计算的操作;

存数指令发射模块,用于获取目标神经网络对应的存数解码信号,根据存数解码信号生成存数指令;存数指令用于控制神经网络处理器将目标神经网络对应的输出特征图存储到目标地址。

在其中一个实施例中,取数解码信号包括第一硬件循环信号和第一地址生成信号;取数指令发射模块包括第一硬件循环控制单元和第一地址生成单元;

第一硬件循环控制单元,用于获取第一硬件循环信号,根据第一硬件循环信号执行第一硬件循环过程,得到第一序列组和第一掩码序列;

第一地址生成单元,用于获取第一地址生成信号、第一序列组和第一掩码序列,根据第一地址生成信号、第一序列组和第一掩码序列执行第一地址生成过程,得到取数指令。

在其中一个实施例中,第一硬件循环信号包括第一累加信号、第二累加信号、第三累加信号和第四累加信号,第一硬件循环控制单元包括第一累加器、第二累加器、第三累加器、第四累加器、第一有限状态机和第一掩码生成器;

第一累加器,用于获取第一累加信号,并根据第一累加信号执行第一累加操作,输出每次第一累加操作对应的第一累加结果至第一有限状态机和第一掩码生成器;

第二累加器,用于获取第二累加信号和第一累加结果,并根据第二累加信号和第一累加结果执行第二累加操作,输出每次第二累加操作对应的第二累加结果至第一有限状态机;

第三累加器,用于获取第三累加信号和第二累加结果,并根据第三累加信号和第二累加结果执行第三累加操作,输出每次第三累加操作对应的第三累加结果至第一有限状态机;

第四累加器,用于获取第四累加信号和第三累加结果,并根据第四累加信号和第三累加结果执行第四累加操作,输出每次第四累加操作对应的第四累加结果至第一有限状态机;

第一有限状态机,用于根据各第一累加结果、各第二累加结果、各第三累加结果和各第四累加结果,得到第一序列组;

第一掩码生成器,用于根据各第一累加结果,得到第一掩码序列。

在其中一个实施例中,第一地址生成信号包括输入特征图地址、卷积核地址、第一地址步长、上采样使能信号以及填充信号,第一地址生成单元包括第一地址生成寄存器和第二地址生成寄存器;

第一地址生成寄存器用于获取输入特征图地址和卷积核地址,并根据输入特征图地址和卷积核地址,生成第一基地址;

第二地址生成寄存器用于获取第一地址步长、上采样使能信号、填充信号、第一基地址、第一序列组和第一掩码序列,并根据第一地址步长、上采样使能信号、填充信号、第一基地址、第一序列组和第一掩码序列得到取数指令。

在其中一个实施例中,矩阵解码信号包括第二硬件循环信号、第二地址生成信号和矩阵配置信号;矩阵指令发射模块包括第二硬件循环控制单元、第二地址生成单元和矩阵配置单元;

矩阵配置单元,用于获取矩阵配置信号,并根据矩阵配置信号生成矩阵配置结果;

第二硬件循环控制单元,用于获取第二硬件循环信号,根据第二硬件循环信号执行第二硬件循环过程,得到第二序列组和第二掩码序列;

第二地址生成单元,用于获取矩阵配置结果、第二序列组、第二掩码序列和第二地址生成信号,根据矩阵配置结果、第二序列组、第二掩码序列和第二地址生成信号执行第二地址生成过程,得到矩阵计算指令。

在其中一个实施例中,存数解码信号包括第三硬件循环信号和第三地址生成信号;存数指令发射模块包括第三硬件循环控制单元和第三地址生成单元;

第三硬件循环控制单元,用于获取第三硬件循环信号,根据第三硬件循环信号执行第三硬件循环过程,得到第三序列组和第三掩码序列;

第三地址生成单元,用于获取第三序列组和第三地址生成信号,根据第三地址生成信号、第三序列组和第三掩码序列执行第三地址生成过程,得到存数指令。

第二方面,本申请提供了一种指令生成方法,所述方法包括:

获取取数解码信号,根据取数解码信号生成取数指令,取数指令用于控制神经网络处理器根据取数指令获取输入特征图以及卷积核;

获取矩阵解码信号,根据矩阵解码信号生成矩阵计算指令,矩阵计算指令用于控制神经网络处理器根据矩阵计算指令对输入特征图和卷积核执行卷积计算的操作;

获取存数解码信号,根据存数解码信号生成存数指令;存数指令用于控制神经网络处理器将目标神经网络对应的输出特征图存储到目标地址。

第三方面,本申请还提供了一种计算机设备。所述计算机设备包括如上述第一方面所述的指令生成装置。

第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述第二方面所述方法的步骤。

第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上述第二方面所述方法的步骤。

上述指令生成装置、方法、设备、存储介质和计算机程序产品,通过获取目标神经网络对应的取数解码信号,根据取数解码信号生成取数指令,取数指令用于控制神经网络处理器根据取数指令获取输入特征图以及卷积核;获取矩阵解码信号,根据矩阵解码信号生成矩阵计算指令,矩阵计算指令用于控制神经网络处理器根据矩阵计算指令对输入特征图和卷积核执行卷积计算的操作;获取存数解码信号,根据存数解码信号生成存数指令;存数指令用于控制神经网络处理器将目标神经网络对应的输出特征图存储到目标地址;这样,本申请中的取数指令发射模块、矩阵指令发射模块、向量指令发射模块以及存数指令发射模块并行生成控制指令,分别控制神经网络处理器进行取数、计算和存数的运算操作,能够控制神经网络处理器同时进行多组包括取数、计算和存数的运算操作,避免了传统技术中的控制装置逐个发送控制指令至神经网络处理器,控制处理器逐组进行运算操作造成的效率低下的问题,有效提高控制神经网络处理器处理神经网络运算的效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为一实施例的指令生成装置的应用环境图;

图2为图1中指令生成装置的一种模块结构;

图3为图2中取数指令发射模块的一种模块结构;

图4为图3中第一硬件循环控制单元的一种单元结构;

图5为图3中第一地址生成单元的一种单元结构;

图6为图2中矩阵指令发射模块的一种模块结构;

图7为图2中存数指令发射模块的一种模块结构。

附图标记说明:

100-取数指令发射模块,102-第一硬件循环控制单元,1022-第一累加器,1024-第二累加器,1026-第三累加器,1028-第四累加器,1032-第一有限状态机,1034-第一掩码生成器,104-第一地址生成单元,1042-第一地址生成寄存器,1044-第二地址生成寄存器,200-矩阵指令发射模块,202-矩阵配置单元,204-第二硬件循环控制单元,206-第二地址生成单元,300-存数指令发射模块,302-第三硬件循环控制单元,304-第三地址生成单元。

具体实施方式

为了便于理解本申请,下面将参照相关附图对本申请进行更全面的描述。附图中给出了本申请的实施例。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使本申请的公开内容更加透彻全面。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。

可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。举例来说,在不脱离本申请的范围的情况下,可以将第一电阻称为第二电阻,且类似地,可将第二电阻称为第一电阻。第一电阻和第二电阻两者都是电阻,但其不是同一电阻。

可以理解,以下实施例中的“连接”,如果被连接的电路、模块、单元等相互之间具有电信号或数据的传递,则应理解为“电连接”、“通信连接”等。

在此使用时,单数形式的“一”、“一个”和“所述/该”也可以包括复数形式,除非上下文清楚指出另外的方式。还应当理解的是,术语“包括/包含”或“具有”等指定所陈述的特征、整体、步骤、操作、组件、部分或它们的组合的存在,但是不排除存在或添加一个或更多个其他特征、整体、步骤、操作、组件、部分或它们的组合的可能性。

本申请实施例提供的指令生成装置,可以应用于如图1所示的应用环境中。其中,指令生成装置生成的指令发送到神经网络处理器的存储模块,用于控制存储模块提取出矩阵计算所需的输入特征图和卷积核发送到神经网络处理器的矩阵计算模块;指令生成装置生成的指令还发送到神经网络处理器的矩阵计算模块,用于控制矩阵计算模块对接收到的输入特征图和卷积核进行卷积计算,并将计算生成的输出特征图发送回存储模块;以及,指令生成装置生成的指令还发送到神经网络处理器的存储模块,用于控制存储模块将接收到的输出特征图存储到预设位置。

在一个实施例中,如图2所示,指令生成装置包括取数指令发射模块100、矩阵指令发射模块200和存数指令发射模块300。

取数指令发射模块100,用于获取目标神经网络对应的取数解码信号,根据取数解码信号生成取数指令;取数指令用于控制神经网络处理器根据取数指令获取输入特征图以及卷积核。

其中,目标神经网络对应的取数解码信号指的是外部取数程序经过编译形成的计算机可执行的取数代码信号。

示例性的,外部取数程序可以表示为:

for k in[0,K):

for p in[0,P):

for y in[0,KY):,

其中,K表示输入特征图的宽度,k表示执行当前取数操作的输入特征图宽度的第k个元素;P表示输入特征图的高度,p表示执行当前取数操作的输入特征图高度的第p个元素;KY表示卷积核对应的权值矩阵,y表示执行当前取数操作的卷积核中的第p个元素。

将上述外部取数程序进行编译,形成的取数解码信号可以表示为:

load.exec Ifmap

load.exec Weight,

其中,load指令用于将数据从外部存储器加载到计算机内存中,以供取数指令发射模块100使用;exec指令用于执行执行前缀的load指令;Ifmap表示输入特征图;Weight表示卷积核对应的权值矩阵。

矩阵指令发射模块200,用于获取目标神经网络对应的矩阵解码信号,根据矩阵解码信号生成矩阵计算指令;矩阵计算指令用于控制神经网络处理器根据矩阵计算指令对输入特征图和卷积核执行卷积计算的操作。

其中,目标神经网络对应的矩阵解码信号指的是外部矩阵计算程序经过编译形成的计算机可执行的矩阵计算代码信号。

示例性的,外部矩阵计算程序可以表示为:

其中,O表示执行当前矩阵计算操作得到的输出特征图,I表示执行当前矩阵计算操作的输入特征图,W表示执行当前矩阵计算操作的卷积核,j表示神经网络处理器的处理变量,当神经网络处理器包含8×8×8个INT8乘法器,表示该神经网络处理器一个周期可以处理一个8×8矩阵乘另一个8×8矩阵的矩阵乘法运算,此时j的取值范围为[0,8]。

将上述外部矩阵计算程序进行编译,形成的矩阵解码信号可以表示为:

mat.exec,

其中,mat指令可以用于执行矩阵运算,如矩阵相加、相乘、转置、求逆、求特征值等,具体的语法和支持的操作取决于所使用的编程语言或数学库,本申请对此不作限定。

存数指令发射模块300,用于获取目标神经网络对应的存数解码信号,根据存数解码信号生成存数指令;存数指令用于控制神经网络处理器将目标神经网络对应的输出特征图存储到目标地址。

其中,存数解码信号指的是外部程序经过编译形成的计算机可执行的存数代码信号。

示例性的,外部程序可以是上述矩阵计算程序中指定的输出对象O[k][p],将上述外部程序进行编译,形成的存数解码信号可以表示为:

store.exec Ofmap,

其中,Ofmap表示输出特征图。

上述实施例提供的指令生成装置,通过获取目标神经网络对应的取数解码信号,根据取数解码信号生成取数指令,取数指令用于控制神经网络处理器根据取数指令获取输入特征图以及卷积核;获取矩阵解码信号,根据矩阵解码信号生成矩阵计算指令,矩阵计算指令用于控制神经网络处理器根据矩阵计算指令对输入特征图和卷积核执行卷积计算的操作;获取存数解码信号,根据存数解码信号生成存数指令;存数指令用于控制神经网络处理器将目标神经网络对应的输出特征图存储到目标地址;这样,本实施例中的取数指令发射模块100、矩阵指令发射模块200、以及存数指令发射模块300并行生成控制指令,分别控制神经网络处理器进行取数、计算和存数的运算操作,能够控制神经网络处理器同时进行多组包括取数、计算和存数的运算操作,避免了传统技术中的控制装置逐个发送控制指令至神经网络处理器,控制处理器逐组进行运算操作造成的效率低下的问题,有效提高神经网络处理器处理神经网络运算的效率。

在一个实施例中,基于图2所示的实施例,如图3所示,取数指令发射模块100包括第一硬件循环控制单元102和第一地址生成单元104,取数解码信号包括第一硬件循环信号和第一地址生成信号。

其中,第一硬件循环信号指的是取数解码信号中用于配置第一硬件循环控制单元102执行第一硬件循环过程的参数的信号,包括起始值、终止值和步长。

示例性的,第一硬件循环信号可以表示为:

load.loop[1]0,8,8

其中,loop[1]指令表示进行1级第一硬件循环过程的参数设置,上述第一硬件循环信号表示1级第一硬件循环过程的起始值为0,步长为8,终止值为8。

其中,第一地址生成信号指的是取数解码信号中用于配置第一地址生成单元104执行第一地址生成过程的参数的信号。

示例性的,第一地址生成信号可以表示为:

load.opstep[1]8,x,x

load.exec,

其中,opstep指令用于设置第一地址生成过程中的地址步长,上述第一地址生成信号load.opstep[1]表示1级第一地址生成过程对应的地址步长为8;load.exec表示根据load.opstep[1]信号的参数设置执行1级第一地址生成过程。

第一硬件循环控制单元102,用于获取第一硬件循环信号,根据第一硬件循环信号执行第一硬件循环过程,得到第一序列组和第一掩码序列。

其中,第一硬件循环过程可以有多级;第一序列组是根据多级第一硬件循环过程的循环结果得到的;第一掩码序列中的元素是根据第0级循环的循环结果计算得到的。

示例性的,第一硬件循环过程可以有3级,第一硬件循环信号可以表示为:

load.loop[2]0,P,1

load.loop[1]0,KY,1

load.loop[0]0,8,8

可以得到第一序列组的第一个序列为[0,0,0],分别对应2级、1级、0级第一硬件循环过程的起始值,第一掩码序列的第一个值对应于0级第一硬件循环过程的起始值;若经过一次第一硬件循环过程,得到第一序列组的第二个序列为[0,1,0],分别对应当前2级、1级、0级循环过程的循环结果,第一掩码序列的第二个值对应于当前0级循环过程的循环结果。

第一地址生成单元104,用于获取第一地址生成信号、第一序列组和第一掩码序列,根据第一地址生成信号、第一序列组和第一掩码序列执行第一地址生成过程,得到取数指令。

示例性的,当神经网络处理器包含8×8×8个INT8乘法器,表示该神经网络处理器一个周期可以处理一个8×8矩阵乘另一个8×8矩阵的矩阵乘法运算,这样,神经网络处理器的存储模块可以接受第一地址生成单元104生成的8个地址作为取数指令,控制存储模块按照取数指令对应的地址获取输入特征图和卷积核。第一地址生成单元104根据第一地址生成信号设置第一地址生成过程中的地址步长,根据地址步长、第一序列组和第一掩码序列,按照第一地址生成公式,得到8个地址作为取数指令。

本实施例中,取数指令发射模块100中的第一硬件循环控制单元102用于获取取数解码信号中的第一硬件循环信号,根据第一硬件循环信号执行第一硬件循环过程,得到第一序列组和第一掩码序列;第一地址生成单元104用于根据取数解码信号中的第一地址生成信号、第一序列组和第一掩码序列得到取数指令,这样,取数指令发射模块100根据取数解码信号独立生成取数指令,用于独立控制神经网络处理器的存储单元执行获取输入特征图和卷积核的操作,使得神经网络处理器在完成上一取数过程后即可进入当前取数过程,从而提高控制神经网络处理器处理神经网络运算的效率。

在一个实施例中,如图4所示,第一硬件循环控制单元102包括第一累加器1022、第二累加器1024、第三累加器1026、第四累加器1028、第一有限状态机1032和第一掩码生成器1034;第一硬件循环信号包括第一累加信号、第二累加信号、第三累加信号和第四累加信号。

第一累加器1022用于获取第一累加信号,并根据第一累加信号执行第一累加操作,输出每次第一累加操作对应的第一累加结果至第一有限状态机1032和第一掩码生成器1034。

其中,第一累加信号指的是第一硬件循环信号中用于配置第一累加器1022的参数的信号,包括起始值、终止值和步长。

示例性的,可以设置第一累加器1022执行的第一累加操作对应于第一硬件循环控制单元102的0级第一硬件循环过程,第一累加信号可以表示为:

load.loop[0]0,8,8,

其中,第一累加器1022执行的第一累加操作的起始值为0,终止值为8,步长为8,将起始值0作为第0个第一地址生成过程的第一累加结果输出至第一有限状态机1032和第一掩码生成器1034。在第1个第一地址生成过程中,执行第一累加操作,到达第一累加操作的终止值,第一累加结果回到起始值为0,将第一累加结果输出至第一有限状态机1032和第一掩码生成器1034。

第二累加器1024用于获取第二累加信号和第一累加结果,并根据第二累加信号和第一累加结果执行第二累加操作,输出每次第二累加操作对应的第二累加结果至第一有限状态机1032。

其中,第二累加信号指的是第一硬件循环信号中用于配置第二累加器1024的参数的信号,包括起始值、终止值和步长。

示例性的,可以设置第二累加器1024执行的第二累加操作对应于第一硬件循环控制单元102的1级第一硬件循环过程,第二累加信号可以表示为:

load.loop[1]0,3,1,

其中,第二累加器1024执行的第二累加操作的起始值为0,终止值为3,步长为1,并将起始值0为第0个第一地址生成过程的第二累加结果输出至第一有限状态机1032。若第一累加结果到达第一累加操作的终止值,则第二累加器1024可以执行第二累加操作,经过一次第二累加操作,可以得到第二累加结果为1,未到达第二累加操作的终止值,将第二累加结果输出至第一有限状态机1032。

第三累加器用于获取第三累加信号和第二累加结果,根据第三累加信号和第二累加结果执行第三累加操作,输出每次第三累加操作对应的第三累加结果至第一有限状态机。

其中,第三累加信号指的是第一硬件循环信号中用于配置第三累加器1026的参数的信号,包括起始值、终止值和步长。

示例性的,可以设置第三累加器1026执行的第三累加操作对应于第一硬件循环控制单元102的2级第一硬件循环过程,第三累加信号可以表示为:

load.loop[2]0,3,1,

其中,第三累加器1026执行的第三累加操作的起始值为0,终止值为3,步长为1,并将起始值0为第0个第一地址生成过程的第三累加结果输出至第一有限状态机1032。

若第二累加结果未到达第二累加操作的终止值,不启动第三累加操作,将第三累加操作的起始值作为当前2级第一硬件循环过程的第三累加结果输出至第一有限状态机1032。

若第二累加结果到达第二累加操作的终止值,则第三累加器1026执行第三累加操作,经过一次第三累加操作,可以得到第三累加结果为1,未到达第三累加操作的终止值,将第三累加结果输出至第一有限状态机1032。

第四累加器用于获取第四累加信号和第三累加结果,并根据第四累加信号和第三累加结果执行第四累加操作,输出每次第四累加操作对应的第四累加结果至第一有限状态机。

其中,第四累加信号指的是第一硬件循环信号中用于配置第四累加器1028的参数的信号,包括起始值、终止值和步长。

示例性的,可以设置第四累加器1028执行的第四累加操作对应于第一硬件循环控制单元102的3级第一硬件循环过程,第三累加信号可以表示为:

load.loop[3]0,8,1,

其中,第四累加器1028执行的第四累加操作的起始值为0,终止值为8,步长为1,并将起始值0为第0个第一地址生成过程的第四累加结果输出至第一有限状态机1032。

若第三累加结果未到达第三累加操作的终止值,不启动第四累加操作,将第四累加操作的起始值作为当前3级第一硬件循环过程的第四累加结果输出至第一有限状态机1032。

若第三累加结果到达第三累加操作的终止值,则第四累加器1028执行第四累加操作,经过一次第四累加操作,可以得到第四累加结果为1,未到达第四累加操作的终止值,将第四累加结果输出至第一有限状态机1032。

第一有限状态机1032,用于根据各第一累加结果、第二累加结果、第三累加结果和第四累加结果,得到第一序列组。

其中,第一序列组指的是根据各第一累加结果、第二累加结果、第三累加结果和第四累加结果得到的序列的集合。

示例性的,在第0个第一地址生成过程中,第一累加结果、第二累加结果、第三累加结果和第四累加结果均为0,可以得到第一序列组的第一个值为[0,0,0,0],分别对应3级、2级、1级、0级第一硬件循环过程的起始值。

在第1个第一地址生成过程中,第一累加器1022执行了第一累加操作并到达第一累加操作的终止值,第一累加器1022重新回到起始值0,第二累加器1024执行了第二累加操作,得到第二累加结果为1,第三累加器1026和第四累加器1028未执行累加操作,可以得到第一序列组的第二个值为[0,0,1,0],分别对应3级、2级、1级、0级第一硬件循环过程的第四累加结果、第三累加结果、第二累加结果和第一累加结果。

第一掩码生成器1034,用于根据各第一累加结果,得到第一掩码序列。

其中,第一掩码序列中的各个值是对第一累加器1022在各个第一地址生成过程中得到的第一累加结果进行判断得到的。

本实施例中,第一硬件循环控制单元包括4个累加器,可以实现4级第一硬件循环过程,根据上一级别第一硬件循环过程对应的累加器的累加结果控制当前级别第一硬件循环过程对应的累加器的启停,根据各级累加结果得到第一序列组,这样,仅需要4个累加信号即可快速生成包括多个序列的第一序列组,可以用于生成多个取数指令,能够进一步缩减取数解码信号的规模,提高生成取数指令的效率,从而提高控制神经网络处理器处理神经网络运算的效率。

在一个实施例中,如图5所示,第一地址生成信号包括输入特征图地址、卷积核地址、第一地址步长、上采样使能信号以及填充信号,第一地址生成单元104包括第一地址生成寄存器1042和第二地址生成寄存器1044。

其中,第一地址步长包括输入特征图地址的步长和卷积核地址的步长;上采样使能信号和填充信号根据神经网络处理器的实际情况确定,若神经网络处理器在处理目标神经网络时使用了上采样操作,则上采样使能信号为1,否则为0;若神经网络处理器在处理目标神经网络时进行了填充操作,则填充信号为1,否则为0。

第一地址生成寄存器1042用于获取输入特征图地址和卷积核地址,并根据输入特征图地址和卷积核地址,生成第一基地址。

其中,第一基地址是在输入特征图地址和卷积核地址处重新起算。

示例性的,第一地址生成寄存器1042获取输入特征图地址KP和卷积核地址KY,在此基础上设置第一基地址为0。

示例性的,第一地址生成寄存器1042可以是SPM存储器(ScratchPad Memory,便签式存储器)。

第二地址生成寄存器1044用于获取第一地址步长、上采样使能信号、填充信号、第一基地址、第一序列组和第一掩码序列,并根据第一地址步长、上采样使能信号、填充信号、第一基地址、第一序列组和第一掩码序列得到取数指令。

其中,取数指令是第二地址生成寄存器1044对第一地址步长、上采样使能信号、填充信号、第一基地址、第一序列组和第一掩码序列进行以下处理得到的:

第二地址生成寄存器1044根据第一地址步长opstep[i]、第一基地址base_addr和第一序列组{loop_index[i]}、上采样使能信号upsample_en[i],得到第一循环地址loop_addr,具体计算可以表示为:

其中,i表示第一硬件循环过程的级数,取值范围为[0,3],oft[i]表示i的奇偶,i为奇数时oft[i]=1,i为偶数时oft[i]=0,第一循环地址loop_addr可以表示为二进制形式。

第二地址生成寄存器1044根据第一掩码序列pad_mask[i]和第一循环地址loop_addr得到一个第一硬件循环过程中生成的取数指令编号stride_id[n],具体计算过程可以表示为:

stride_id[n]=pad_mask[n]?loop_addr[2:0]+(n-pad)×opstep[0]>>upsample_en[n]:0,

其中,n的取值范围根据神经网络处理器的实际情况确定;取数指令编号stride_id[n]可以表示为二进制形式。

针对一个第一硬件循环过程,第二地址生成寄存器1044根据取数指令编号stride_id[n]确定第一地址跳变量stride_step[n]:

若取数指令编号stride_id[n]大于或者等于0,且二进制形式的取数指令编号stride_id[n]的第3位和第4位均为0,则确定第一地址跳变量stride_step[n]为0;

若取数指令编号stride_id[n]大于或者等于0,且二进制形式的取数指令编号stride_id[n]的第3位和第4位不全为0,则根据二进制形式的取数指令编号stride_id[n]的第4位和第一地址步长确定第一地址跳变量stride_step[n];

若取数指令编号stride_id[n]小于0,则根据第一地址步长的相反数确定第一地址跳变量stride_step[n]。

针对一个第一硬件循环过程,第二地址生成寄存器1044根据第一序列组{loop_index[i]}

middle_addr[n]=loop_addr[12:3],stride_id[n][2:0]

addr[n]=middle_addr[n]+stride_step[n]。

在一种可能的实施方式中,第二地址生成寄存器1044可以是VRF存储器(VectorRegister File,寄存器堆存储器)。

本实施例中,第一地址生成单元104中的第一地址生成寄存器1042用于获取输入特征图地址和卷积核地址,并根据输入特征图地址和卷积核地址,生成第一基地址;第二地址生成寄存器1044用于获取第一地址步长、上采样使能信号、填充信号、第一基地址、第一序列组和第一掩码序列,并根据第一地址步长、上采样使能信号、填充信号、第一基地址、第一序列组和第一掩码序列得到取数指令,这样,第一地址生成单元104在生成取数指令的过程中考虑了上采样和填充两种神经网络处理方式,使得本实施例中的取数指令对神经网络处理器的控制范围更广,从而扩大本实施例中指令生成装置的应用范围。

在一个实施例中,如图6所示,矩阵指令发射模块200包括矩阵配置单元202、第二硬件循环控制单元204和第二地址生成单元206;矩阵解码信号包括第二硬件循环信号、第二地址生成信号和矩阵配置信号。

其中,矩阵配置单元206用于获取矩阵配置信号,根据矩阵配置信号生成矩阵配置结果。

示例性的,矩阵配置信号可以表示为:

mat.config.bs 64,x,x

其中,config指令可以用于配置矩阵执行模块中的数制和数据格式,矩阵配置信号中bs表示二进制,64表示数据格式的最大步长为64。

第二硬件循环控制单元204,用于获取第二硬件循环信号,根据第二硬件循环信号执行第二硬件循环过程,得到第二序列组和第二掩码序列。

其中,第二硬件循环控制单元204的结构与第一硬件循环控制单元102的结构相同,第二硬件循环过程可以有多级,每级第二硬件循环过程由一个累加器控制,根据上一级第二硬件循环过程对应的累加器的累加结果控制当前级第二硬件循环过程对应的累加器的启停,根据各级累加结果得到第二序列组;第二掩码序列是根据多个第二硬件循环过程的第0级循环的循环结果计算得到的。

在一种可能的实施方式中,第二硬件循环过程可以有4级。示例性的,第二硬件循环信号可以表示为:

mat.loop[3]0,8,1

mat.loop[2]0,3,1

mat.loop[1]0,3,1

mat.loop[0]0,8,8,

其中,mat.loop[0]指令表示进行0级第二硬件循环过程的参数设置,上述第二硬件循环信号表示0级第二硬件循环过程的起始值为0,步长为8,终止值为8。

可以得到第二序列组的第一个序列为[0,0,0,0],分别对应3级、2级、1级、0级第一硬件循环过程的起始值,第二掩码序列的第一个值对应于0级第二硬件循环过程的起始值;若经过一次第二硬件循环过程,得到第二序列组的第二个序列为[0,0,1,0],分别对应当前3级、2级、1级、0级循环过程的循环结果,第二掩码序列的第二个值对应于当前0级循环过程的循环结果。

第二地址生成单元206,用于获取矩阵配置结果、第二序列组、第二掩码序列和第二地址生成信号,根据矩阵配置结果、第二序列组、第二掩码序列和第二地址生成信号执行第二地址生成过程,得到矩阵计算指令。

其中,第二地址生成单元206的结构与第一地址生成单元104相同,包括第三地址生成寄存器和第四地址生成寄存器。

其中,第二地址生成信号包括输入特征图地址、卷积核地址、第二地址步长、上采样使能信号以及填充信号。

第三地址生成寄存器用于获取输入特征图地址和卷积核地址,并根据输入特征图地址和卷积核地址,生成第二基地址。

第四地址生成寄存器用于获取矩阵配置结果、第二地址步长opstep

具体计算可以表示为:

其中,j表示第二硬件循环过程的级数,取值范围为[0,3],oft

stride_id

其中,t的取值范围根据神经网络处理器的实际情况确定;矩阵计算指令编号stride_id

stride_step

其中,big_step指的矩阵配置信号中的最大步长。

middle_addr

addr

示例1,当神经网络处理器包含8×8×8个INT8乘法器,表示该神经网络处理器一个周期可以处理一个8×8矩阵乘另一个8×8矩阵的矩阵乘法运算,这样,神经网络处理器的存储模块可以接受8个地址作为矩阵计算指令,供给矩阵计算模块进行计算,即t的取值范围为[0,7]。

第二地址生成信号可以表示为:

mat.opstep[3]48,x,x

mat.opstep[2]16,x,x

mat.opstep[1]8,x,x

mat.opstep[0]1,x,x

mat.exec 0,x,x,

其中,第三地址生成寄存器在输入特征图地址和卷积核地址的基础上设置第二基地址base_addr

当第二序列组的其中一个序列为[1,1,2,0]时:

loop_addr

stride_step

可得此时的矩阵计算指令为:[87,86,85,84,83,82,81,80]。

示例2,当神经网络处理器以填充的方式处理目标神经网络,并设置填充信号为1,其他设置与示例1相同,当第二序列组的其中一个序列为[1,1,2,0]时:

loop_addr

stride_step

addr

可得此时的矩阵计算指令为:[86,85,84,83,82,81,80,16],其中由于第1个数是填充的,故第一个数对应的指令将会被舍弃。

示例3,当神经网络处理器以上采样的方式处理目标神经网络,并设置1级和0级循环过程的上采样使能信号为1,其他设置与示例1相同,当第二序列组的其中一个序列为[1,1,2,0]时:1级循环过程的oft

loop_addr

stride_step

可得此时的矩阵计算指令为:[75,75,74,74,73,73,72,72]。

示例4,当矩阵指令发射模块需要发射指令控制神经网络处理器处理目标神经神经网络时卷积核滑动步长为2,第二地址生成信号的0级循环可以表示为:mat.opstep[0]2,x,x;其他设置与示例1相同,当第二序列组的其中一个序列为[1,1,2,0]时:

loop_addr

stride_step

addr

可得此时的矩阵计算指令为:[150,148,146,144,86,84,82,80]。

上述实施例中,矩阵指令发射模块中包括的矩阵配置单元用于获取矩阵配置信号,并根据矩阵配置信号生成矩阵配置结果,用于控制第二硬件循环控制单元和第二地址生成单元中的各个数据的数制和形状,这样,可以通过设置不同的矩阵配置信号使得矩阵指令发射模块发射的矩阵计算指令能够适应不同场景下的神经网络处理器,扩大了指令生成装置的应用场景。

在一个实施例中,如图7所示,存数解码信号包括第三硬件循环信号和第三地址生成信号;存数指令发射模块300包括第三硬件循环控制单元302和第三地址生成单元304;

第三硬件循环控制单元302,用于获取第三硬件循环信号,根据第三硬件循环信号执行第三硬件循环过程,得到第三序列组和第三掩码序列。

其中,第三硬件循环控制单元302的结构与第一硬件循环控制单元102相同。

第三地址生成单元304,用于获取第三序列组和第三地址生成信号,根据第三地址生成信号、第三序列组和第三掩码序列执行第三地址生成过程,得到存数指令。

其中,第三地址生成单元304的结构与第一地址生成单元104相同。

上述实施例中,存数指令发射模块300根据存数解码信号独立生成存数指令,用于独立控制神经网络处理器的存储单元执行存储输出特征图的操作,使得神经网络处理器在完成上一存数过程后即可进入当前存数过程,从而提高控制神经网络处理器处理神经网络运算的效率。

在一个实施例中,提供了一种指令生成方法,该方法包括:

获取取数解码信号,根据取数解码信号生成取数指令,取数指令用于控制神经网络处理器根据取数指令获取输入特征图以及卷积核;获取矩阵解码信号,根据矩阵解码信号生成矩阵计算指令,矩阵计算指令用于控制神经网络处理器根据矩阵计算指令对输入特征图和卷积核执行卷积计算的操作;获取存数解码信号,根据存数解码信号生成存数指令;存数指令用于控制神经网络处理器将目标神经网络对应的输出特征图存储到目标地址。

在一个实施例中,取数解码信号包括第一硬件循环信号和第一地址生成信号;取数指令发射模块包括第一硬件循环控制单元和第一地址生成单元;根据第一硬件循环信号执行第一硬件循环过程,得到第一序列组和第一掩码序列;根据第一地址生成信号、第一序列组和第一掩码序列执行第一地址生成过程,得到取数指令。

在一个实施例中,第一硬件循环信号包括第一累加信号、第二累加信号、第三累加信号和第四累加信号,根据第一累加信号执行第一累加操作,输出每次第一累加操作对应的第一累加结果;根据第二累加信号和第一累加结果执行第二累加操作,输出每次第二累加操作对应的第二累加结果;根据第三累加信号和第二累加结果执行第三累加操作,输出每次第三累加操作对应的第三累加结果;根据第四累加信号和第三累加结果执行第四累加操作,输出每次第四累加操作对应的第四累加结果;根据各第一累加结果、各第二累加结果、各第三累加结果和各第四累加结果,得到第一序列组;根据各第一累加结果,得到第一掩码序列。

在一个实施例中,第一地址生成信号包括输入特征图地址、卷积核地址、第一地址步长、上采样使能信号以及填充信号,根据输入特征图地址和卷积核地址,生成第一基地址;根据第一地址步长、上采样使能信号、填充信号、第一基地址、第一序列组和第一掩码序列得到取数指令。

在一个实施例中,矩阵解码信号包括第二硬件循环信号、第二地址生成信号和矩阵配置信号;根据矩阵配置信号生成矩阵配置结果;根据第二硬件循环信号执行第二硬件循环过程,得到第二序列组和第二掩码序列;根据矩阵配置结果、第二序列组、第二掩码序列和第二地址生成信号执行第二地址生成过程,得到矩阵计算指令。

在一个实施例中,存数解码信号包括第三硬件循环信号和第三地址生成信号;根据第三硬件循环信号执行第三硬件循环过程,得到第三序列组和第三掩码序列;根据第三地址生成信号、第三序列组和第三掩码序列执行第三地址生成过程,得到存数指令。

在一个实施例中,提供了一种计算机设备,包括如上述各装置实施例中的指令生成装置。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

在本说明书的描述中,参考术语“有些实施例”、“其他实施例”、“理想实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特征包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性描述不一定指的是相同的实施例或示例。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

相关技术
  • 图像分类方法及装置、电子设备、计算机程序及存储介质
  • 保险产品的测试方法及装置、存储介质及电子设备
  • 产品开发方法、装置、计算机设备及存储介质
  • 产品数据同步方法、装置、计算机设备及存储介质
  • 产品数据的数据同步方法、装置、计算机设备及存储介质
  • 产品推荐方法、装置、设备、存储介质和计算机程序产品
  • 产品部署方法、装置、设备、存储介质及计算机程序产品
技术分类

06120116484501