用于执行人工神经网络正向运算的装置及方法与流程

文档序号:13512736阅读:149来源:国知局
用于执行人工神经网络正向运算的装置及方法与流程

本披露涉及一种用于执行人工神经网络正向运算的装置及方法。



背景技术:

数据处理是大部分算法需要经过的步骤或阶段,在计算机引入数据处理领域后,越来越多的数据处理通过计算机来实现,现有的算法中有计算设备在进行神经网络的数据计算时速度慢,效率低。

披露内容

本披露实施例提供了一种神经网络运算装置及方法,可提升计算装置的处理速度,提高效率。

第一方面,提供一种用于执行人工神经网络正向运算的装置,包括浮点数据统计模块、浮点数据转换单元和浮点数据运算模块,所述浮点数据统计模块用于对所述人工神经网络正向运算所需的各个类型的数据进行统计分析,得到指数位偏移量offset及指数位的长度el;

所述浮点数据转换单元用于根据所述浮点数据统计模块得到的所述指数位偏移量offset及指数位的长度el来实现长位数浮点数据类型向短位数浮点数据类型的转换;

所述浮点数据运算模块用于在所述浮点数据转换单元将所有所述人工神经网络正向运算中所需的输入、权值和/或偏置数据均采用短位数浮点数据类型表示之后,对所述短位数浮点数据进行人工神经网络正向运算;

所述人工神经网络正向运算的指令为矩阵运算指令,包括:操作码和操作域;

所述操作码,用于识别不同的矩阵运算指令;

所述操作域,用于指示所述矩阵运算指令的数据信息,所述数据信息为指定大小的立即数或指定大小的数据对应的寄存器号。

第二方面,提供一种执行人工神经网络正向运算的方法,包括以下步骤:

获取所述人工神经网络各个层的长位数浮点数据,包括每一层的权值、偏置和/或输入输出值;

对获得的所述长位数浮点数据进行分析,获得存储所述长位数浮点数据所需的指数位偏移量offset及指数位的长度el;

根据所述指数位偏移量offset及指数位的长度el,将所有所述长位数浮点数据采用短位数浮点数据类型表示;

对所述短位数浮点数据执行人工神经网络正向运算;

所述人工神经网络正向运算的指令为矩阵运算指令,包括:操作码和操作域;

所述操作码,用于识别不同的矩阵运算指令;

所述操作域,用于指示所述矩阵运算指令的数据信息,所述数据信息为指定大小的立即数或指定大小的数据对应的寄存器号。

可以看出,通过本披露实施例,计算装置设置有寄存器单元了存储介质,其分别存储标量数据以及矩阵数据,并且本披露为两种存储器分配了单位读取方式以及批量读取方式,通过对矩阵数据的特点分配匹配其特征的数据读取方式,能够很好的利用带宽,避免因为带宽的瓶颈对矩阵计算速度的影响,另外,对于寄存器单元来说,由于其存储的为标量数据,设置了标量数据的读取方式,提高了带宽的利用率,所以本披露提供的技术方案能够很好的利用带宽,避免带宽对计算速度的影响,所以其具有计算速度快,效率高的优点。

附图说明

图1a是一种计算装置结构示意图。

图1b是另一种计算装置结构示意图。

图2是本披露实施例提供的计算装置的结构示意图。

图2a是本披露实施例提供的矩阵计算单元的结构示意图。

图2b是本披露实施例提供的流水级的结构示意图。

图3是本披露实施例披露的一种矩阵计算方法的流程示意图。

图4是本披露实施例提供的指令集的格式示意图。

图5是本披露实施例提供的另一种计算装置的结构示意图。

图6是本披露实施例提供的计算装置执行矩阵乘向量指令的流程图。

图6a是本披露实施例提供的计算装置的另一种结构示意图。

图7为根据本披露一实施例的用于存储数据的短位数浮点数据结构的具体表示方法;

图8为根据本披露一实施例的用于执行人工神经网络正向运算的装置中浮点数据统计模块的示例框图;

图9为根据本披露一实施例的用于执行人工神经网络正向运算的装置中正向运算模块的短位数浮点计算部分的示例框图;

图10为根据本披露一实施例的神经网络正向运算过程的示例框图;

图11示意性示出了根据本披露一实施例的用于执行人工神经网络正向运算装置的运算流程示例框图。

具体实施方式

本披露提供一种矩阵计算装置,包括存储单元、寄存器单元和矩阵运算单元,存储单元中存储有矩阵,寄存器单元中存储有矩阵存储的地址矩阵运算单元根据矩阵运算指令在寄存器单元中获取矩阵地址,然后,根据该矩阵地址在存储单元中获取相应的矩阵,接着,根据获取的矩阵进行矩阵运算,得到矩阵运算结果。本披露将参与计算的矩阵数据暂存在高速暂存存储器上,使得矩阵运算过程中可以更加灵活有效地支持不同宽度的数据,提升包含大量矩阵计算任务的执行性能。

需要说明的是,本披露具体实施方式中的矩阵具体可以为mn矩阵、1n矩阵或m1矩阵,其中m、n为大于等于2的整数。当矩阵为1n矩阵或m1矩阵时,也可以称为向量,下述矩阵均可以为上述三种类型矩阵中的任意一种,下面不在赘述。以人工神经网络算法为例,多种神经网络算法中都含有大量的矩阵运算。在神经网络中,输出神经元的运算表达式为y=f(wx+b),其中w是第一矩阵,x是第二矩阵、b是第三矩阵,计算输出矩阵y的过程为矩阵w与矩阵x相乘,加上矩阵b。因此,矩阵运算成为目前各种计算装置在设计时需要考虑的问题,现有的矩阵的计算速度慢,无法满足用户对计算装置的要求,效率低。

参阅图1a,图1a为一种计算装置,在如图1a所示的矩阵的计算装置中,其包含多个通用处理器101(cpu),每个cpu均包含自身的内存,其处理的方法可以为,多个cpu并行处理矩阵的计算,此方案虽在在矩阵的计算中采用并行处理的方式,但是其并不能有效的提高效率,因为对于矩阵运算中,第二矩阵运算的结果可能需要使用第一矩阵运算的结果,具体的,第一矩阵运算为f(1)=a+b,第二矩阵运算为:f(2)=f(1)+c,对于第二矩阵运算来说,其需要提取第一矩阵运算的结果f(1)才能够进行实际的矩阵计算处理,此种情况在神经网络计算中尤为突出,由于多个cpu并行处理矩阵运算,那么在矩阵计算的分配时,很有可能cpu1执行第一矩阵运算,cpu2执行第二矩阵运算,那么对于cpu2来说,其需要从cpu1提取第一矩阵运算的结果f(1),所以对于多cpu并行处理矩阵来说,多个cpu之间的通讯成为矩阵运算的瓶颈,影响矩阵计算的速度。

参阅图1b,图1b为另一种计算装置,在如图1b所示的计算装置中,其包含有图形处理器(gpu)102,通过gpu102来执行矩阵的运算,对于gpu来说,其本身也包含内存1021,gpu102在处理矩阵运算时,gpu102需要从内存1021中提取矩阵运算所需的矩阵,矩阵由于其数据量大,单个矩阵所占用的存储空间比标量要大很多,对于gpu102来说,虽然其运算能够非常强,但是gpu102的内存的容量不够,无法存储大量的矩阵,为了解决这个问题,图1b配置了片外数据库103,gpu102可以从片外数据库103中读取矩阵,具体的读取方式为,gpu102从片外数据库103中提取待计算的矩阵,将该矩阵存储在内存1021中,在执行矩阵运算时,进行矩阵指令的译码处理,然后从内存1021中提取该矩阵进行计算。此技术方案在执行矩阵计算中,gpu102进行矩阵指令的译码会占用gpu很大部分的计算能力,,影响矩阵的计算速度,效率低。

本披露中提到的输入神经元和输出神经元并非是指整个神经网络的输入层中神经元和输出层中神经元,而是对于网络中任意相邻的两层,处于网络前馈运算下层中的神经元即为输入神经元,处于网络前馈运算上层中的神经元即为输出神经元。以卷积神经网络为例,设一个卷积神经网络有l层,k=1,2,...,l-1,对于第k层和第k+1层来说,我们将第k层称为输入层,其中的神经元为所述输入神经元,第k+1层称为输出层,其中的神经元为所述输出神经元。即除最顶层外,每一层都可以作为输入层,其下一层为对应的输出层。

本披露具体实施方式提供一种矩阵计算方法,该矩阵计算方法在如图2所示的计算装置内完成,如图2所示,该计算装置包括:

存储介质201、用于存储矩阵。优选的该存储介质可以是存储器(优选的高速暂存存储器),能够支持不同长度的矩阵数据;本披露将必要的计算数据暂存在存储器(优选的高速暂存存储器)上(scratchpadmemory),使本运算装置在进行矩阵运算过程中可以更加灵活有效地支持不同长度的数据。上述存储介质还可以为片外数据库、数据库或其他的能够存储的介质等等。

标量数据存储单元202(例如标量寄存器单元),用于存储标量数据,其中,该标量数据包括但不限于:矩阵数据在存储介质201的地址以及矩阵与标量运算时的标量。在一种实施方式中,标量寄存器单元可以是标量寄存器堆,提供运算过程中所需的标量寄存器,标量寄存器不只存放矩阵地址,还存放有标量数据。当涉及到矩阵与标量的运算时,运算单元不仅要从寄存器单元中获取矩阵地址,还要从寄存器单元中获取相应的标量。

运算单元203,用于获取并执行第一运算指令。如图2a所示,该运算单元包括多个运算器,该运算器包括但不限于:矩阵加法运算器231、矩阵乘法运算器232、大小比较运算器233、非线性运算运算器234和矩阵标量乘法运算器235。

该方法如图3所示,包括如下步骤:

步骤s301、运算单元203获取第一运算指令,所述第一运算指令包括:执行该指令所需的矩阵读取指示。

在步骤s301中,上述执行该指令所需的矩阵读取指示具体可以为多种,例如,在本披露一个可选的技术方案中,上述执行该指令所需的矩阵读取指示可以为所需矩阵的存储地址。又如,在本披露另一个可选的技术方案中,上述执行该指令所需的矩阵读取指示可以为所需矩阵的标识,该标识的表现形式可以为多种,例如,矩阵的名称,又如,矩阵的识别号,再如该矩阵在寄存器单元的寄存器号或地址,标识还可以包括矩阵的大小。

下面通过一个实际的例子来说明上述第一运算指令包含的执行该指令所需的矩阵读取指示,这里假设该矩阵运算公式为f(x)=a+b,其中,a、b均为矩阵。那么在第一运算指令中除了携带该矩阵运算公式外,还可以携带该矩阵运算公式所需矩阵的存储地址,具体的,例如a的存储地址为0000-0fff,b的存储地址为1000-1fff。又如,可以携带a以及b的标识,例如a的标识为0101,b的标识为1010。

步骤s302、运算单元203依据该矩阵读取指示向所述存储介质201发送读取命令。

上述步骤s302的实现方法具体可以为:

如该矩阵读取指示可以为所需矩阵的存储地址,运算单元203向该存储介质201发送该读取该存储地址的读取命令并采用批量读取方式获取对应的矩阵。

又如该矩阵读取指示可以为所需矩阵的标识时,运算单元203依据该标识从标量数据存储单元处采用单个读取方式读取该标识对应的存储地址,然后运算单元203向该存储介质201发送该读取该存储地址的读取命令并采用批量读取方式获取对应的矩阵。

上述单个读取方式具体可以为,每次读取均为单个的数据,例如1bit或者多bit,1字节,4字节,8字节数据。此时设置单个读取方式的原因为,对于标量数据来说,其占用的容量非常小,如果采用批量数据读取方式,那么读取的数据量容易大于所需的数据的容量,这样会导致带宽的浪费,所以对于标量的数据这里采用单个读取方式来读取以减少带宽的浪费。

步骤s303、运算单元203采用批量读取方式读取该指示对应的矩阵,对该矩阵执行所述第一运算指令。

上述步骤s303中批量读取方式具体可以为,每次读取均为多个的数据,,即无论其所需的数据量是多少,其每次读取的均为多个的数据,此批量读取的数据方式非常适合大数据的读取,对于矩阵来说,由于其所占用的容量大,如果采用单个读取方式,其读取的速度会非常慢,所以这里采用批量读取方式来获取多个的数据从而快速读取矩阵数据,避免因为读取矩阵数据过慢影响矩阵计算速度的问题。

本披露提供的技术方案的计算装置设置有标量数据存储单元和存储介质,其分别存储标量数据以及矩阵数据,并且本披露为两种存储器分配了单位读取方式以及批量读取方式,通过对矩阵数据的特点分配匹配其特征的数据读取方式,能够很好的利用带宽,避免因为带宽的瓶颈对矩阵计算速度的影响,另外,对于寄存器单元来说,由于其存储的为标量数据,设置了标量数据的读取方式,提高了带宽的利用率,所以本披露提供的技术方案能够很好的利用带宽,避免带宽对计算速度的影响,所以其具有计算速度快,效率高的优点。

可选的,上述对该矩阵执行所述第一运算指令具体可以为:

对该矩阵执行第一流水级的计算得到第一结果,将第一结果输入到第二流水级执行第二流水级的计算得到第二结果,将第二结果输入到第三流水级执行第三流水级计算得到第三结果,将第三结果存储至存储介质201。上述流水级的操作流程图如图2b所示。

上述第一流水级包括但不限于:矩阵加法计算器、矩阵乘法计算器等等。

上述第二流水级包括但不限于:大小比较计算器等等。

上述第三流水级包括但不限于:非线性运算器、矩阵标量乘法器等等。

将矩阵分三个流水级运算主要是为了提高运算的速度,对于矩阵的计算来说,例如采用如图1a所示的通用处理器在计算时,其运算的步骤具体可以为,处理器对矩阵进行计算得到第一结果,然后将第一结果存储在内存中,处理器从内存读取第一结果执行第二次计算得到第二结果,然后将第二结果存储在内存中,处理器从内从读取第二结果执行第三次计算得到第三结果,然后将第三结果存储在内存中。从上述计算的步骤可以看出,在通用处理器进行矩阵计算时,其并没有分流水级进行计算,那么每次计算完毕后均需要将计算完的数据进行保存,下次计算时需要再次读取,所以此方案需要重复存储读取多次数据,对于本披露的技术方案来说,第一流水级计算的第一结果直接进入第二流水级进行计算,第二流水级计算的第二结果直接进入到第三流水级进行计算,第一流水级与第二流水级计算的第一结果和第二结果无需存储,首先其减少了内存的占用空间,其次,其避免了结果的多次存储以及读取,提高了带宽的利用率,进一步提高了计算效率。

在本披露另一实施例中,可以自由组合各流水部件或者采取一级流水级。例如将第二个流水级和第三个流水级合并,或者将第一和第二以及第三个流水线都合并或者各个流水级负责不同的运算可以排列组合。例如,第一级流水负责比较运算,部分乘法运算,第二级流水负责非线性运算和矩阵标量乘法等组合。

可选的,上述计算装置还可以包括:缓存单元204,用于缓存第一运算指令。指令在执行过程中,同时也被缓存在指令缓存单元中,当一条指令执行完之后,如果该指令同时也是指令缓存单元中未被提交指令中最早的一条指令,该指令将背提交,一旦提交,该条指令进行的操作对装置状态的改变将无法撤销。在一种实施方式中,指令缓存单元可以是重排序缓存。

可选的,上述方法在步骤s301之前还可以包括:

确定该第一运算指令与第一运算指令之前的第二运算指令是否存在关联关系,如第一运算指令与第一运算指令之前的第二运算指令存在关联关系,则在第二运算指令执行完毕以后,从缓存单元中提取出该第一运算指令传递至运算单元203。如第一运算指令与该第一运算指令之前的指令无关联关系,则直接将第一运算指令传递至运算单元。

上述确定该第一运算指令与第一运算指令之前的第二运算指令是否存在关联关系的具体实现方法可以为:

依据该第一运算指令提取该第一运算指令中所需矩阵的第一存储地址区间,依据该第二运算指令提取该第二运算指令中所需矩阵的第二存储地址区间,如第一存储地址区间与第二存储地址区间具有重叠的区域,则确定第一运算指令与第二运算指令具有关联关系。如第一存储地址区间与第二存储地址区间无重叠的区域,则确定第一运算指令与第二运算指令不具有关联关系。

此存储地区区间中有重叠区域出现说明第一运算指令与第二运算指令访问了相同的矩阵,对于矩阵来说,由于其存储的空间比较大,比如采用相同的存储区域作为判断是否为关联关系的条件,可能出现的情况是,第二运算指令访问的存储区域包含了第一运算指令访问的存储区域,例如,第二运算指令访问a矩阵存储区域、b矩阵存储区域和c矩阵存储区域,如果a、b存储区域相邻或a、c存储区域相邻,则第二运算指令访问的存储区域为,a、b存储区域以及c存储区域,或a、c存储区域以及b存储区域。这种情况下,如果第一运算指令访问的为a矩阵与d矩阵的存储区域,那么第一运算指令访问的矩阵的存储区域无法与第二运算指令范文的矩阵的存储区域相同,如果采用相同的判断条件,则确定第一运算指令与第二运算指令不关联,但是实践证明,此时第一运算指令与第二运算指令属于关联关系,所以本披露通过是否有重叠区域来判断是否为关联关系的条件,能够避免上述情况的误判。

下面以一个实际的例子来说明何种情况属于关联关系,何种情况属于非关联关系。这里假设第一运算指令所需的矩阵为a矩阵和d矩阵,其中a矩阵的存储区域为【0001,0fff】,d矩阵的存储区域为【a000,afff】,对于第二运算指令所需的矩阵为a矩阵、b矩阵和c矩阵,其分别对应的存储区域为【0001,0fff】、【1000,1fff】、【b000,bfff】,对于第一运算指令来说,其对应的存储区域为:【0001,0fff】、【a000,afff】,对于第二运算指令来说,其对应的存储区域为:【0001,1fff】、【b000,bfff】,所以第二运算指令的存储区域与第一运算指令的存储区域具有重叠区域【0001,0fff】,所以第一运算指令与第二运算指令具有关联关系。

这里假设第一运算指令所需的矩阵为e矩阵和d矩阵,其中a矩阵的存储区域为【c000,cfff】,d矩阵的存储区域为【a000,afff】,对于第二运算指令所需的矩阵为a矩阵、b矩阵和c矩阵,其分别对应的存储区域为【0001,0fff】、【1000,1fff】、【b000,bfff】,对于第一运算指令来说,其对应的存储区域为:【c000,cfff】、【a000,afff】,对于第二运算指令来说,其对应的存储区域为:【0001,1fff】、【b000,bfff】,所以第二运算指令的存储区域与第一运算指令的存储区域不具有重叠区域,所以第一运算指令与第二运算指令无关联关系。

图4是本披露提供的指令集的格式示意图,如图4所示,运算指令包括一操作码和至少一操作域,其中,操作码用于指示该运算指令的功能,运算单元通过识别该操作码可进行不同的矩阵运算,操作域用于指示该运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,例如,要获取一个矩阵时,根据寄存器号可以在相应的寄存器中获取矩阵起始地址和矩阵长度,再根据矩阵起始地址和矩阵长度在存储介质中获取相应地址存放的矩阵。

指令集包含有不同功能的运算指令:

矩阵乘向量指令(mmv),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出设定长度的矩阵数据和向量数据,在运算单元中进行矩阵乘向量的乘法运算,并将结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址;值得说明的是,向量可以作为特殊形式的矩阵(只有一行元素的矩阵)存储于存储器(优选的高速暂存存储器或者标量寄存器堆)中。

向量乘矩阵指令(vmm),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出设定长度的向量数据和矩阵数据,在运算单元中进行向量乘矩阵的乘法运算,并将结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址;值得说明的是,向量可以作为特殊形式的矩阵(只有一行元素的矩阵)存储于存储器(优选的高速暂存存储器或者标量寄存器堆)中。

矩阵乘标量指令(vms),根据该指令,装置存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出设定长度的矩阵数据,从标量寄存器堆的指定地址中取出指定大小的矩阵数据,在运算单元中进行标量乘矩阵的乘法运算,并将计算结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址,需要说明的是,标量寄存器堆不仅存储有矩阵的地址,还存储有标量数据。

张量运算指令(tens),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的两个指定地址取出分别取出设定长度的两块矩阵数据,在运算单元中对两矩阵数据进行张量运算,并将计算结果写回。优选的,并将计算结果写回至存储器(优选的存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵加法指令(ma),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的两个指定地址取出分别取出设定长度的两块矩阵数据,在运算单元中对两矩阵进行加法运算,并将计算结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵减法指令(ms),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的两个指定地址取出分别取出设定长度的两块矩阵数据,在运算单元中对两矩阵进行减法运算,并将计算结果写回。优选的,并将计算结果写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵检索指令(mr),根据该指令,装置从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出设定长度的向量数据,从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出指定大小的矩阵数据,在运算单元中,该向量是索引向量,输出的向量中的第i个元素是以索引向量的第i个元素作为索引,在矩阵的第i列中找到的数,该输出向量写回至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵加载指令(ml),根据该指令,装置从指定外部源地址载入设定长度的数据至存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址。

矩阵存储指令(ms),根据该指令,装置将存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址的设定长度的矩阵数据存至外部目的地址处。

矩阵搬运指令(mmove),根据该指令,装置将存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址的设定长度的矩阵数据存至存储器(优选的高速暂存存储器或者标量寄存器堆)的另一指定地址处。

上述指令中的设定长度可以由用户自行设定,在一个可选的实施方案中,用户可以将该设置长度设置为一个值,当然在实际应用中,用户也可以将该设置长度设置为多个值。本披露具体实施方式并不限定该设定长度的具体值以及个数。为使本披露的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本披露进一步详细说明。

参阅图5,图5为本披露具体实施方式提供的另一种计算装置50,如图所示的实施例中的具体实施方案、细化方案或技术效果可以参见如图2或图3所示实施例中的描述,这里不再赘述。图5所示,计算装置50包括:存储介质501、标量数据存储单元单元502(优选的为标量寄存器单元)、矩阵计算单元503和控制单元504;

存储介质501,用于存储矩阵;

标量数据存储单元502,用于存储标量数据,所述标量数据至少包括:所述矩阵在所述存储介质内的存储地址;

控制单元504,用于控制所述矩阵计算单元获取第一运算指令,所述第一运算指令包括执行所述指令所需的矩阵读取指示;

运算单元503,用于依据所述矩阵读取指示向所述存储介质发送读取命令;依据采用批量读取方式读取所述矩阵读取指示对应的矩阵,对该矩阵执行所述第一运算指令。

可选的,上述矩阵读取指示包括:所述指令所需的矩阵的存储地址或所述指令所需矩阵的标识。

可选的如所述矩阵读取指示为所述指令所需矩阵的标识时,

控制单元504,用于控制所述运算单元依据所述标识从所述寄存器单元出采用单位读取方式读取所述标识对应的存储地址,控制所述运算单元向所述存储介质发送读取所述存储地址的读取命令并采用批量读取方式获取所述矩阵。

可选的,运算单元503,具体用于对该矩阵执行第一流水级的计算得到第一结果,将第一结果输入到第二流水级执行第二流水级得到第二结果,将所述第二结果输入到第三流水级执行第三流水级得到第三结果,将所述第三结果输入到所述矩阵存储器进行存储。

可选的,所述计算装置还包括:

缓存单元505,用于缓存待执行的运算指令;

所述控制单元504,用于将待执行的运算指令缓存于所述缓存单元504内。

可选的,控制单元504,用于确定所述第一运算指令与所述第一运算指令之前的第二运算指令是否存在关联关系,如所述第一运算指令与所述第二运算指令存在关联关系,则将所述第一运算指令缓存与所述缓存单元内,在所述第二运算指令执行完毕后,从所述缓存单元提取所述第一运算指令传输至所述运算单元;

所述确定该第一运算指令与第一运算指令之前的第二运算指令是否存在关联关系包括:

依据所述第一运算指令提取所述第一运算指令中所需矩阵的第一存储地址区间,依据所述第二运算指令提取所述第二运算指令中所需矩阵的第二存储地址区间,如所述第一存储地址区间与所述第二存储地址区间具有重叠的区域,则确定所述第一运算指令与所述第二运算指令具有关联关系,如所述第一存储地址区间与所述第二存储地址区间不具有重叠的区域,则确定所述第一运算指令与所述第二运算指令不具有关联关系。

可选的,上述控制单元503,可以用于从指令缓存单元获取运算指令,并对该运算指令进行处理后,提供给所述运算单元。其中,控制单元503可以划分为三个模块,分别为:取指模块5031、译码模块5032和指令队列模块5033,

取指模5031,用于从指令缓存单元中获取运算指令;

译码模块5032,用于对获取的运算指令进行译码;

指令队列5033,用于对译码后的运算指令进行顺序存储,考虑到不同指令在包含的寄存器上有可能存在依赖关系,用于缓存译码后的指令,当依赖关系被满足之后发射指令。

参阅图6,图6是本披露实施例提供的计算装置执行矩阵乘向量指令的流程图,如图6所示,该计算装置的硬件结构参阅图5所示的结构,如图5所示的存储介质以高速暂存存储器为例,执行矩阵乘向量指令的过程包括:

步骤s601,计算装置控制取指模块取出矩阵乘向量指令,并将该矩阵乘向量指令送往译码模块。

步骤s602,译码模块对该矩阵乘向量指令译码,并将该矩阵乘向量指令送往指令队列。

步骤s603,在指令队列中,该矩阵乘向量指令需要从标量寄存器堆中获取指令中五个操作域所对应的标量寄存器里的数据,该数据包括输入向量地址、输入向量长度、输入矩阵地址、输出向量地址和输出向量长度。

步骤s604,控制单元确定所述矩阵乘向量指令与矩阵乘向量指令之前的运算指令是否存在关联关系,如存在关联关系,将矩阵乘向量指令存入到缓存单元,如不存在关联管理,将该矩阵乘向量指令传输至运算单元。

步骤s605,运算单元根据五个操作域所对应的标量寄存器里的数据从高速暂存器中取出需要的矩阵和向量数据,然后在运算单元中完成乘法运算。

步骤s606,运算单元运算完成后,将结果写入存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址,重排序缓存中的该矩阵乘向量指令被提交。

上述图6中的矩阵计算指令以矩阵乘向量指令为例,在实际应用中,如图6所示实施例中的矩阵乘向量指令可以用向量乘矩阵指令、矩阵乘标量指令、张量运算指令、矩阵加法指令、矩阵减法指令、矩阵检索指令、矩阵加载指令、矩阵存储指令或矩阵搬运指令替换,这里不——赘述。

参阅图6a,图6a提供了一种计算装置,该计算装置包括:存储介质611(可选的)、寄存器单元612、互联模块613、运算单元614、控制单元615和数据访问单元616;

其中,运算单元614包括:加法计算器、乘法计算器、比较器、激活运算器中至少二种。

互联模块613,用于控制运算单元614中计算器的连接关系使得该至少二种计算器组成不同的计算拓扑结构。

指令存储单元(可以是寄存器单元,指令缓存,高速暂存存储器)612,用于存储该运算指令、数据块的在存储介质的地址、运算指令对应的计算拓扑结构。

该运算指令可以包括:操作域以及操作码,以卷积计算指令为例,如表1所示,其中,寄存器0、寄存器1、寄存器堆2、寄存器3、寄存器4可以为操作域。其中,每个寄存器0、寄存器1、寄存器2、寄存器3、寄存器4可以是一个或者多个寄存器。

存储介质611可以为片外存储器,当然在实际应用中,也可以为片内存储器,用于存储数据块,该数据块具体可以为n维数据,n为大于等于1的整数,例如,n=1时,为1维数据,即向量,如n=2时,为2维数据,即矩阵,如n=3或3以上时,为多维数据。

控制单元615,用于从寄存器单元612内提取运算指令、该运算指令对应的操作域以及该运算指令对应的第一计算拓扑结构,将该运算指令译码成执行指令,该执行指令用于控制运算单元执行运算操作,将该操作域传输至数据访问单元616,将该计算拓扑结构传输至互联模块613。

数据访问单元616,用于从存储介质611中提取该操作域对应的数据块,并将该数据块传输至互联模块613。

互联模块613、用于接收第一计算拓扑结构和数据块。一个实施例里,互联模块613还根据第一计算拓扑结构对数据块重新摆放。

运算单元614,用于该执行指令调用运算单元614的计算器对该数据块执行运算操作得到运算结果,将该运算结果传输至数据访问单元存储在存储介质内。一个实施例里,运算单元614,用于按第一计算拓扑结构以及该执行指令调用计算器对重新摆放的数据块执行运算操作得到运算结果,将该运算结果传输至数据访问单元存储在存储介质内。

另一个实施例里,互联模块613、用于依据控制运算单元614中计算器的连接关系形成第一计算拓扑结构。

本披露还公开了一种用于执行人工神经网络正向运算的装置,在一种可选的实施方案中,该用于执行人工神经网络正向运算的装置可以为如图6a所示的计算装置,该计算装置还可以包括定点数据转换模块及相应的定点数据运算模块,所述定点数据转换模块包括浮点数据统计模块和数据转换单元;上述如图6a所示的计算装置还可以添加如图7或图8所示的单元或模块。其中,浮点数据统计模块用于统计及计算获得人工神经网络正向运算中存储各个类型数据所需的指数位偏移及指数位所需的比特位数;浮点数据转换单元用于实现短位数浮点数据类型与长位数浮点数据类型,例如32位浮点数据类型的转换;浮点运算模块用于完成针对于短位数浮点数据所需的各类运算。

其中,″长位数浮点数据″表示原来的浮点数据,例如32位浮点数据,也可以是针对标准的64位或者16位浮点数等,这里只是以32位为具体实施例进行说明;″较少位数浮点数据″,又名″短位数浮点数据″,表示相对于原来的浮点数据来说,采用更少的位数来表示的浮点数据。

根据本披露实施例的多层人工神经网络的正向运算,包括两层或者两层以上的多个神经元。对于正向运算中所需的输入、权值、偏置等数据,均采用短位数浮点数据类型表示,并用短位数浮点数据类型参与各个层之间的运算。

图7示出了根据本披露一实施例的用于存储数据的短位数浮点数据结构的具体表示方法。其中,1位bit位用于表示符号,m位用于表示指数部分,n位用于表示有效位部分,由于浮点表示法要求第一位有效数字不能为0,对于二进制来说,只能为1,因此有效位的最高位1可以作为隐藏位,不写入内存,所以实际表示的浮点数有效位数为(n+1)位;相比于32位浮点数据表示形式,本披露采用的短位浮点数据表示形式除了占用比特位数更少外,对于神经网络中同一层、同一类型的数据,如第一个卷积层的所有权值数据,还另外设置了两个标志位,其中标志位offset用于记录指数位的初始偏移,实际指数位表示=指数位表示数据+偏移量(offset),标志位el用于记录指数位所占用的bit数m,则有效位所占bit数n=x-1-m。

图8示出了浮点数据统计模块的示例框图。包括数据提取单元21、统计单元22和分析单元23。该模块的目的是,通过提取采用32位浮点数据类型的神经网络中的所有32位浮点数据,并通过分析这些数据得到神经网络中用短位数浮点描述各个不同类型数据所需的指数位偏移(offset)及指数位长度(el),以便在之后的短位数浮点正向运算中有更好的效果。其中,数据提取单元用于提取32位浮点正向训练中各个不同类型的数据;统计单元用于统计同一类型数据的数据范围及各个数据段的数据分布情况;分析单元根据统计单元统计的结果,得出用短位数浮点表示各个类型数据应当设定的指数位长度(el)及指数位偏移(offset),指数位长度(el)的设定使得可表示的数据范围尽可能包含该类型的所有数据。

图9示出了正向运算模块的短位数浮点计算部分的示例框图。包括运算缓存单元31、数据转换单元32、舍入单元33。其中:运算缓存单元用精度较高的数据类型存储正向运算的中间结果,这是由于在正向运算时,加法或者乘法运算可能会导致数据范围扩大;运算结束后,对超出短位数浮点精度范围的数据,进行舍入操作,接着通过数据转换单元32将缓存区的数据转换为短位数浮点数据。

舍入单元33可以完成对超出短位浮点精度范围的数据进行舍入操作,该单元可以为随机舍入单元、四舍五入单元、向上舍入单元、向下舍入单元、截断舍入单元等,通过不同的舍入单元可以实现对超出短位数浮点精度范围数据进行不同的舍入操作。

随机舍入单元执行如下操作:

其中,y表示随机舍入后的短位浮点数据,x表示随机舍入前的32位浮点数据,ε为当前短位数浮点数据表示格式所能表示的最小正整数,即2offset(x-1-el)表示对原数据x直接截得短位数浮点数据所得的数(类似于对小数做向下取整操作),w.p.表示概率,即随机舍入获得的数据y为的概率为的概率为

四舍五入单元执行如下操作:

其中,y表示四舍五入后的短位浮点数据,x表示四舍五入前的长位浮点数据,ε为当前短位数浮点数据表示格式所能表示的最小正整数,即2offset(x-1-el)为ε的整数倍,其值为小于或等于x的最大数。

向上舍入单元执行如下操作:

其中,y表示向上舍入后的短位浮点数据,x表示向上舍入前的长位浮点数据,为ε的整数倍,其值为大于或等于x的最小数,ε为当前短位数浮点数据表示格式所能表示的最小正整数,即2offset-(x-1-el)

向下舍入单元执行如下操作:

其中,y表示向上舍入后的短位浮点数据,x表示向上舍入前的长位浮点数据,为ε的整数倍,其值为小于或等于x的最大数,ε为当前短位数浮点数据表示格式所能表示的最小正整数,即2offset-(x-1-el)

截断舍入单元执行如下操作:

y=[x];

其中,y表示截断舍入后的短位浮点数据,x表示截断舍入前的长位浮点数据,[x]表示对原数据x直接截得短位数浮点数据所得的数。

本披露还公开了一种执行人工神经网络正向运算的方法,具体实施步骤为:

通过已训练好的神经网络32位浮点模型获取神经网络各个层的32位浮点模型数据,包括每一层的权值、偏置、输入输出值及其它数据参数。

对不同层,不同类型数据单独进行分析,获得各类型用短位浮点类型表示所需要的各个参数,包括需要多少位作为指数位,多少位作为有效位数,以及指数位所需表示的范围等。

对统计得到的短位浮点表示方式用于神经网络正向运算,即神经网络正向运算中所有数据用短位浮点格式表示,同时,对神经网络的权值和偏置数据保留一份32位浮点数据表示的副本,然后做正向训练。对于正向运算中,某些运算会导致数据范围扩大,如加法、乘法等,需要用缓存空间存储中间计算结果,中间结果用32位浮点形式存储,计算完后再转回相应的短位浮点格式。32位浮点转短位浮点过程需要用舍入方式,其中包括随机舍入、四舍五入舍入等,分别表示如下:

随机舍入的具体操作如下式所示:

其中,y表示随机舍入后的短位浮点数据,x表示随机舍入前的32位浮点数据,ε为当前短位数浮点数据表示格式所能表示的最小正整数,即2offset-(x-1-el)表示对原数据x直接截得短位数浮点数据所得的数(类似于对小数做向下取整操作),w.p.表示概率,即随机舍入获得的数据y为的概率为的概率为

四舍五入的具体操作如下式所示:

其中,y表示四舍五入后的短位浮点数据,x表示四舍五入前的长位浮点数据,ε为当前短位数浮点数据表示格式所能表示的最小正整数,即2offset-(x-1-el)为ε的整数倍,其值为小于或等于x的最大数。

向上舍入的具体操作如下式所示:

其中,y表示向上舍入后的短位浮点数据,x表示向上舍入前的长位浮点数据,为ε的整数倍,其值为大于或等于x的最小数,ε为当前短位数浮点数据表示格式所能表示的最小正整数,即2offset-(x-1-el)

向下舍入的具体操作如下式所示:

其中,y表示向上舍入后的短位浮点数据,x表示向上舍入前的长位浮点数据,为ε的整数倍,其值为小于或等于x的最大数,ε为当前短位数浮点数据表示格式所能表示的最小正整数,即2offset-(x-1-el)

截断舍入的具体操作如下式所示:

y=[x]:

其中,y表示截断舍入后的短位浮点数据,x表示截断舍入前的长位浮点数据,[x]表示对原数据x直接截得短位数浮点数据所得的数。

正向运算结束后,做反向运算时,需要通过短位浮点转32位浮点数据转换单元将正向运算中的数据转换为32位浮点参与反向运算,其中,参与反向运算的权值和偏置数据用正向运算中保留的32位浮点数据表示的副本,反向运算结束后,在通过32位浮点转短位浮点数据转换单元转为短位浮点参与之后的正向运算,同时,仍对神经网络的权值和偏置数据保留32位浮点数据表示的副本,转换过程中需要做舍入操作,操作同正向运算中的舍入操作。

重复进行如上所述的正向及反向运算直到神经网络训练完成。

图10为根据本披露一实施例的单层人工神经网络正向运算流程图。该流程图描述利用本披露的装置和指令集实现的一种单层神经网络正向运算的过程。该运算过程在如图2、图5或图6a所示的计算装置中实现。对于每一层来说,首先对输入神经元向量进行加权求和计算出本层的中间结果向量。该中间结果向量加偏置并激活得到输出神经元向量。将输出神经元向量作为下一层的输入神经元向量。

图11示意性示出了根据本披露一实施例的运算流程示例框图。其中,正向运算模块51包含了图9所示的短位数浮点计算模块,正向运算得到的除权值、偏置外的参数在进行反向传播时要先通过短位数-32位浮点转换单元53转换成32位浮点数进行反向传播运算,反向运算模块53进行的反向传播运算结束后,需要通过32位-短位数浮点转换单元54转换成短位数浮点数据,在转换过程中,需对超出短位数浮点精度范围的数据进行舍入操作,此处舍入操作由舍入单元55完成,同图9中的舍入操作。

通过将正向运算的数据用短位数浮点表示,充分利用了短位数浮点数据格式的数据范围空间,相对于32位浮点数据表示,极大地减少了存储网络参数所需的空间,优化了硬件的面积功耗比。

以上所述的具体实施例,对本披露的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本披露的具体实施例而已,并不用于限制本披露,凡在本披露的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本披露的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1