运算装置和方法与流程

文档序号:17009591发布日期:2019-03-02 02:11阅读:161来源:国知局
运算装置和方法与流程

本公开涉及人工智能技术领域,更具体地涉及一种运算装置和方法。



背景技术:

多层神经网络被广泛应用于分类识别等任务,近年来,由于其较高的识别率和较高的可并行性,受到学术界和工业界的广泛关注。

目前一些性能较好的神经网络通常都非常庞大,这也意味着这些神经网络需要大量的计算资源和存储资源。大量的计算和存储资源的开销会降低神经网络的运算速度,同时,对硬件的传输带宽以及运算器的要求也大大提高。



技术实现要素:

(一)要解决的技术问题

本公开提供了一种运算装置和方法,以至少部分解决以上所提出的技术问题。

(二)技术方案

根据本公开的一个方面,提供了一种神经网络运算装置,包括:

运算模块,用于执行神经网络运算;以及

幂次转换模块,与所述运算模块连接,用于将神经网络运算的输入数据和/或输出数据转换为幂次数据。

在一些实施例中,所述输入数据包括输入神经元数据、输入权值数据,所述输出数据包括输出神经元数据、输出权值数据,所述幂次数据包括幂次神经元数据、幂次权值数据。

在一些实施例中,所述幂次转换模块包括:

第一幂次转换单元,用于将所述运算模块的输出数据转换为幂次数据;以及

第二幂次转换单元,用于将所述运算模块的输入数据转换为幂次数据。

在一些实施例中,所述运算模块还包括:第三幂次转换单元,用于将幂次数据转换为非幂次数据。

在一些实施例中,所述的神经网络运算装置,还包括:

存储模块,用于存储数据和运算指令;

控制模块,用于控制数据和运算指令的交互,其接收该存储模块发送的数据和运算指令,并将运算指令译码成运算微指令;其中,

所述运算模块包括运算单元,用于接收所述控制模块发送的数据和运算微指令,并根据运算微指令对其接收的权值数据和神经元数据执行神经网络运算。

在一些实施例中,所述控制模块包括:运算指令缓存单元、译码单元、输入神经元缓存单元、权值缓存单元以及数据控制单元;其中

运算指令缓存单元,与所述数据控制单元连接,用于接收该数据控制单元发送的运算指令;

译码单元,与所述运算指令缓存单元连接,用于从运算指令缓存单元中读取运算指令,并将其译码成运算微指令;

输入神经元缓存单元,与所述数据控制单元连接,用于从该数据控制单元获取相应的幂次神经元数据;

权值缓存单元,与所述数据控制单元连接,用于从数据控制单元获取相应的幂次权值数据;

数据控制单元,与所述存储模块连接,用于实现所述存储模块分别与所述运算指令缓存单元、所述权值缓存单元以及所述输入神经元缓存单元之间的数据和运算指令交互;其中,

所述运算单元分别与所述译码单元、输入神经元缓存单元及权值缓存单元连接,接收运算微指令、幂次神经元数据、幂次权值数据,根据所述运算微指令对运算单元接收的幂次神经元数据、幂次权值数据执行相应的神经网络运算。

在一些实施例中,所述的神经网络运算装置,还包括:输出模块,其包括输出神经元缓存单元,用于接收所述运算模块输出的神经元数据;

其中,所述幂次转换模块包括:

第一幂次转换单元,与所述输出神经元缓存单元及所述运算单元连接,用于将所述输出神经元缓存单元输出的神经元数据转换为幂次神经元数据以及将运算单元输出的权值数据转换为幂次权值数据;

第二幂次转换单元,与所述存储模块连接,用于将输入所述存储模块的神经元数据、权值数据分别转换为幂次神经元数据、幂次权值数据;

所述运算模块还包括:第三幂次转换单元,与所述运算单元连接,用于将幂次神经元数据、幂次权值数据分别转换为非幂次神经元数据、非幂次权值数据。

在一些实施例中,所述第一幂次转换单元还与所述数据控制单元连接,用于所述运算模块输出的神经元数据、权值数据分别转换为幂次神经元数据、幂次权值数据并发送至所述数据控制单元,以作为下一层神经网络运算的输入数据。

在一些实施例中,所述幂次神经元数据包括符号位和幂次位,所述符号位用于表示所述幂次神经元数据的符号,所述幂次位用于表示所述幂次神经元数据的幂次位数据;所述符号位包括一位或多位比特位数据,所述幂次位包括m位比特位数据,m为大于1的正整数;

所述幂次权值数据表示权值数据的数值采用其幂指数值形式表示,其中,所述幂次权值数据包括符号位和幂次位,符号位采用一位或多位比特位表示权值数据的符号,幂次位采用m位比特位表示权值数据的幂次位数据,m为大于1的正整数。

在一些实施例中,所述神经网络运算装置还包括存储模块,该存储模块预存有编码表,该编码表包括幂次位数据以及指数数值,所述编码表用于通过幂次神经元数据、幂次权值数据的每个幂次位数据获取与幂次位数据对应的指数数值。

在一些实施例中,所述编码表还包括一个或多个置零幂次位数据,所述置零幂次位数据对应的幂次神经元数据、幂次权值数据为0。

在一些实施例中,最大的幂次位数据对应幂次神经元数据、幂次权值数据为0,或最小的幂次位数据对应幂次神经元数据、幂次权值数据为0。

在一些实施例中,所述编码表的对应关系为幂次位数据最高位代表置零位,幂次位数据的其他m-1位对应指数数值。

在一些实施例中,所述编码表的对应关系为正相关关系,存储模块预存一个整数值x和一个正整数值y,最小的幂次位数据对应指数数值为x;其中,x表示偏置值,y表示步长。

在一些实施例中,最小的幂次位数据对应指数数值为x,最大的幂次位数据对应幂次神经元数据、幂次权值数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据+x)*y。

在一些实施例中,y=1,x的数值=-2m-1

在一些实施例中,所述编码表的对应关系为负相关关系,存储模块预存一个整数值x和一个正整数值y,最大的幂次位数据对应指数数值为x;其中,x表示偏置值,y表示步长。

在一些实施例中,最大的幂次位数据对应指数数值为x,最小的幂次位数据对应幂次神经元数据、幂次权值数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据-x)*y。

在一些实施例中,y=1,x的数值等于2m-1

在一些实施例中,将神经元数据、权值数据分别转换成幂次神经元数据、幂次权值数据包括:

sout=sin

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout,表示对数据x做取下整操作;或,

sout=sin

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout,表示对数据x做取上整操作;或,

sout=sin

dout+=[log2(din+)]

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据;sin为输入数据的符号,sout为输出数据的符号;din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout;[x]表示对数据x做四舍五入操作。

根据本公开的另一个方面,提供了一种神经网络运算方法,包括:

执行神经网络运算;以及

在执行神经网络运算之前,将神经网络运算的输入数据转换为幂次数据;和/或在执行神经网络运算之后,将神经网络运算的输出数据转换为幂次数据。

在一些实施例中,所述输入数据包括输入神经元数据、输入权值数据,所述输出数据包括输出神经元数据、输出权值数据,所述幂次数据包括幂次神经元数据、幂次权值数据。

在一些实施例中,在执行神经网络运算之前,将神经网络运算的输入数据转换为幂次数据的步骤包括:

将输入数据中的非幂次数据转换为幂次数据;以及

接收并存储运算指令、所述幂次数据。

在一些实施例中,在接收并存储运算指令、所述幂次数据的步骤和执行神经网络运算的步骤之间,还包括:

读取运算指令,并将其译码成各运算微指令。

在一些实施例中,在执行神经网络运算的步骤中,根据运算微指令对幂次权值数据和幂次神经元数据进行神经网络运算。

在一些实施例中,在执行神经网络运算之后,将神经网络运算的输出数据转换为幂次数据的步骤包括:

输出神经网络运算后得到的数据;以及

将神经网络运算后得到的数据中的非幂次数据转换为幂次数据。

在一些实施例中,将神经网络运算后得到的数据中的非幂次数据转换为幂次数据并发送至所述数据控制单元,以作为神经网络运算下一层的输入数据,重复神经网络运算步骤和非幂次数据转换成幂次数据步骤,直到神经网络最后一层运算结束。

在一些实施例中,在存储模块中预存一个整数值x和一个正整数值y;其中,x表示偏置值,y表示步长;通过改变存储模块预存的整数值x和正整数值y,以调整神经网络运算装置所能表示的幂次数据范围。

根据本公开的又一个方面,提供了一种使用所述的神经网络运算装置的方法,其中,通过改变存储模块预存的整数值x和正整数值y,以调整神经网络运算装置所能表示的幂次数据范围。

(三)有益效果

从上述技术方案可以看出,本公开运算装置和方法至少具有以下有益效果其中之一:

(1)利用幂次数据表示方法存储神经元数据,减小存储网络数据所需的存储空间,同时,该数据表示方法简化了神经元与权值数据的乘法操作,降低了对运算器的设计要求,加快的神经网络的运算速度。

(2)将运算后得到的神经元数据转换为幂次神经元数据,减小了神经网络存储资源和计算资源的开销,有利于提高神经网络的运算速度。

(3)对于非幂次神经元数据在输入到神经网络运算装置前可先经过幂次转换,再输入神经网络运算装置,进一步减小了神经网络存储资源和计算资源的开销,提高了神经网络的运算速度。

(4)本公开的数据筛选装置和方法将参与筛选操作的数据和指令暂存在专用缓存上,可以更加高效地对不同存储结构、不同大小的数据进行数据筛选操作。

(5)采用异构内核进行神经网络运算,可以根据实际神经网络的类型和规模选用不同的内核进行运算,充分利用硬件实际的运算能力,降低成本,减少功耗开销。

(6)不同的内核进行不同层的运算,不同层之间并行运算,可以充分利用神经网络的并行性,提高了神经网络运算的效率。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1a为依据本公开一实施例的神经网络运算装置的结构示意图。

图1b为依据本公开另一实施例的神经网络运算装置的结构示意图。

图1c为本公开实施例的运算单元功能示意图。

图1d为本公开实施例的运算单元另一功能示意图。

图1e为本公开实施例的主处理电路的功能示意图。

图1f为依据本公开实施例的神经网络运算装置的另一结构示意图。

图1g为依据本公开实施例的神经网络运算装置的又一结构示意图。

图1h为依据本公开实施例的神经网络运算方法流程图。

图1i为依据本公开实施例的编码表的示意图。

图1j为依据本公开实施例的编码表的另一示意图。

图1k为依据本公开实施例的编码表的另一示意图。

图1l为依据本公开实施例的编码表的另一示意图。

图1m为依据本公开实施例的幂次数据的表示方法示意图。

图1n为依据本公开实施例的权值与幂次神经元的乘法操作示意图。

图1o为依据本公开实施例的权值与幂次神经元的乘法操作示意图。

图2a为依据本公开实施例的神经网络运算装置的结构示意图。

图2b为依据本公开实施例的神经网络运算方法流程图。

图2c为依据本公开实施例的幂次数据的表示方法示意图。

图2d为依据本公开实施例的神经元与幂次权值的乘法操作示意图。

图2e为依据本公开实施例的神经元与幂次权值的乘法操作示意图。

图2f为依据本公开实施例的神经网络运算方法流程图。

图2g为依据本公开实施例的幂次数据的表示方法示意图。

图2h为依据本公开实施例的幂次神经元与幂次权值的乘法操作示意图。

图3a是本公开提出的运算装置的结构示意图。

图3b是本公开提出的运算装置的信息流示意图。

图3c是本公开提出的运算装置中运算模块的结构示意图。

图3d是本公开提出的运算模块进行矩阵运算示意图。

图3e是本公开提出的运算装置中运算控制模块的结构示意图。

图3f是本公开一实施例提出的运算装置的详细结构示意图。

图3g是本公开另一实施例提出的运算方法的流程图。

图4a为本公开实施例的数据筛选装置的整体结构示意图。

图4b为本公开实施例的数据筛选单元功能示意图。

图4c是本公开实施例的数据筛选装置的具体结构示意图。

图4d是本公开实施例的数据筛选装置的另一具体结构示意图。

图4e是本公开实施例的数据筛选方法的流程图。

图5a示意性示出了本公开一实施例的异构多核神经网络处理器。

图5b示意性示出了本公开另一实施例的异构多核神经网络处理器。

图5c为本公开另一实施例的神经网络运算方法流程图。

图5d为本公开另一实施例的神经网络运算方法流程图。

图5e示意性示出了本公开另一实施例的异构多核神经网络处理器。

图5f示意性示出了本公开另一实施例的异构多核神经网络处理器。

具体实施方式

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。

需要说明的是,在附图或说明书描述中,相似或相同的部分都使用相同的图号。附图中未绘示或描述的实现方式,为所属技术领域中普通技术人员所知的形式。另外,虽然本文可提供包含特定值的参数的示范,但应了解,参数无需确切等于相应的值,而是可在可接受的误差容限或设计约束内近似于相应的值。实施例中提到的方向用语,例如“上”、“下”、“前”、“后”、“左”、“右”等,仅是参考附图的方向。因此,使用的方向用语是用来说明并非用来限制本公开的保护范围。

本公开的一实施例中,如图1a所示,运算装置,包括:运算模块1-1,用于执行神经网络运算;以及幂次转换模块1-2,与所述运算模块连接,用于将神经网络运算的输入神经元数据和/或输出神经元数据转换为幂次神经元数据。

在另一实施例中,如图1b所示,运算装置,包括:

存储模块1-4,用于存储数据和运算指令;

控制模块1-3,与所述存储模块连接,用于控制数据和运算指令的交互,其接收该存储模块发送的数据和运算指令,并将运算指令译码成运算微指令;

运算模块1-1,与所述控制模块连接,接收该控制模块发送的数据和运算微指令,并根据运算微指令对其接收的权值数据和神经元数据执行神经网络运算;以及

幂次转换模块1-2,与所述运算模块连接,用于将神经网络运算的输入神经元数据和/或输出神经元数据转换为幂次神经元数据。

本领域人员可以理解,存储模块可以集成在运算装置内部,也可以作为片外存储器,设置在运算装置外部。

具体而言,请继续参照图1b所示,所述存储模块包括:存储单元1-41,用于存储数据和运算指令。

所述控制模块包括:

运算指令缓存单元1-32,与所述数据控制单元连接,用于接收数据控制单元发送的运算指令;

译码单元1-33,与所述运算指令缓存单元连接,用于从运算指令缓存单元中读取运算指令,并将其译码成各运算微指令;

输入神经元缓存单元1-34,与所述数据控制单元连接,用于接收数据控制单元发送的神经元数据;

权值缓存单元1-35,与所述数据控制单元连接,用于接收从数据控制单元发送的权值数据;

数据控制单元1-31,与存储模块连接,用于实现存储模块分别与运算指令缓存单元、权值缓存单元以及输入神经元缓存单元之间的数据和运算指令交互。

所述运算模块包括:运算单元1-11,分别与所述译码单元、输入神经元缓存单元及权值缓存单元连接,接收各运算微指令、神经元数据及权值数据,用于根据各运算微指令对其接收的神经元数据和权值数据执行相应的运算。

在一可选的实施例中,运算单元包括但不仅限于:第一部分的第一个或多个乘法器;第二部分的一个或者多个加法器(更具体的,第二个部分的加法器也可以组成加法树);第三部分的激活函数单元;和/或第四部分的向量处理单元。更具体的,向量处理单元可以处理向量运算和/或池化运算。第一部分将输入数据1(in1)和输入数据2(in2)相乘得到相乘之后的输出(out),过程为:out=in1*in2;第二部分将输入数据in1通过加法器相加得到输出数据(out)。更具体的,第二部分为加法树时,将输入数据in1通过加法树逐级相加得到输出数据(out),其中in1是一个长度为n的向量,n大于1,过程为:out=in1[1]+in1[2]+...+in1[n],和/或将输入数据(in1)通过加法数累加之后和输入数据(in2)相加得到输出数据(out),过程为:out=in1[1]+in1[2]+...+in1[n]+in2,或者将输入数据(in1)和输入数据(in2)相加得到输出数据(out),过程为:out=in1+in2;第三部分将输入数据(in)通过激活函数(active)运算得到激活输出数据(out),过程为:out=active(in),激活函数active可以是sigmoid、tanh、relu、softmax等,除了做激活操作,第三部分可以实现其他的非线性函数,可将将输入数据(in)通过运算(f)得到输出数据(out),过程为:out=f(in)。向量处理单元将输入数据(in)通过池化运算得到池化操作之后的输出数据(out),过程为out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。

所述运算单元执行运算包括第一部分是将所述输入数据1和输入数据2相乘,得到相乘之后的数据;和/或第二部分执行加法运算(更具体的,为加法树运算,用于将输入数据1通过加法树逐级相加),或者将所述输入数据1通过和输入数据2相加得到输出数据;和/或第三部分执行激活函数运算,对输入数据通过激活函数(active)运算得到输出数据;和/或第四部分执行池化运算,out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。以上几个部分的运算可以自由选择一个多个部分进行不同顺序的组合,从而实现各种不同功能的运算。计算单元相应的即组成了二级,三级,或者四级流水级架构。

在另一可选的实施例中,所述运算单元可以包括一个主处理电路以及多个从处理电路。

所述主处理电路,用于将将一个输入数据分配成多个数据块,将所述多个数据块中的至少一个数据块以及多个运算指令中的至少一个运算指令发送给所述从处理电路;

所述多个从处理电路,用于依据该运算指令对接收到的数据块执行运算得到中间结果,并将运算结果传输给所述主处理电路;

所述主处理电路,用于将多个从处理电路发送的中间结果进行处理得到该运算指令的结果,将该运算指令的结果发送给所述数据控制单元。

在一种可选实施例中,运算单元如图1c所示,可以包括分支处理电路;其中,

主处理电路与分支处理电路连接,分支处理电路与多个从处理电路连接;

分支处理电路,用于执行转发主处理电路与从处理电路之间的数据或指令。

在又一可选的实施例中,运算单元如图1d所示,可以包括一个主处理电路和多个从处理电路。可选的,多个从处理电路呈阵列分布;每个从处理电路与相邻的其他从处理电路连接,主处理电路连接所述多个从处理电路中的k个从处理电路,所述k个基础电路为:第1行的n个从处理电路、第m行的n个从处理电路以及第1列的m个从处理电路。

k个从处理电路,用于在所述主处理电路以及多个从处理电路之间的数据以及指令的转发。

可选的,如图1e所示,该主处理电路还可以包括:转换处理电路、激活处理电路、加法处理电路中的一种或任意组合;

转换处理电路,用于将主处理电路接收的数据块或中间结果执行第一数据结构与第二数据结构之间的互换(例如连续数据与离散数据的转换);或将主处理电路接收的数据块或中间结果执行第一数据类型与第二数据类型之间的互换(例如定点类型与浮点类型的转换);

激活处理电路,用于执行主处理电路内数据的激活运算;

加法处理电路,用于执行加法运算或累加运算。

所述从处理电路包括:

乘法处理电路,用于对接收到的数据块执行乘积运算得到乘积结果;

转发处理电路(可选的),用于将接收到的数据块或乘积结果转发。

累加处理电路,所述累加处理电路,用于对该乘积结果执行累加运算得到该中间结果。

在再一可选的实施例中,该运算指令可以为矩阵乘以矩阵的指令、累加指令、激活指令等等运算指令。

所述输出模块1-5包括:输出神经元缓存单元1-51,与所述运算单元连接,用于接收运算单元输出的神经元数据;

所述幂次转换模块包括:

第一幂次转换单元1-21,与所述输出神经元缓存单元连接,用于将所述输出神经元缓存单元输出的神经元数据转换为幂次神经元数据;以及

第二幂次转换单元1-22,与所述存储模块连接,用于将输入所述存储模块的神经元数据转换为幂次神经元数据。而对于神经网络输入数据中的幂次神经元数据,则直接存入存储模块。

若所述神经网络运算装置利用i/o模块实现数据输入/输出,所述第一和第二幂次转换单元也可设置在i/o模块与运算模块之间,以将神经网络运算的输入神经元数据和/或输出神经元数据转换为幂次神经元数据。

可选的,所述运算装置可包括:第三幂次转换单元1-23,用于将幂次神经元数据转换为非幂次神经元数据。非幂次神经元数据经第二幂次转换单元转换为幂次神经元数据后输入至运算单元中执行运算,运算过程中,为提高精度,可选择性的设置第三幂次转换单元,用于将幂次神经元数据转换为非幂次神经元数据,第三幂次转换单元可以设在所述运算模块外部(如图1f所示)也可以设在所述运算模块内部(如图1g所示),运算之后输出的非幂次神经元数据可利用第一幂次转换单元转换成幂次神经元数据,再反馈至数据控制单元,参与后续运算,以加快运算速度,由此可形成闭合循环。

当然,运算模块输出的数据也可以直接发送至输出神经元缓存单元,由输出神经元缓存单元发送至数据控制单元而不经由幂次转换单元。

其中,存储模块可以从外部地址空间接收数据和运算指令,该数据包括神经网络权值数据、神经网络输入数据等。

另外,幂次转换操作有多种可选方式。下面列举本实施例所采用的三种幂次转换操作:

第一种幂次转换方法:

sout=sin

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout,表示对数据x做取下整操作。

第二种幂次转换方法:

sout=sin

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout,表示对数据x做取上整操作。

第三种幂次转换方法:

sout=sin

dout+=[log2(din+)]

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据;sin为输入数据的符号,sout为输出数据的符号;din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout;[x]表示对数据x做四舍五入操作。

需要说明的是,本公开幂次转换方式除了四舍五入取整、向上取整、向下取整之外,还可以是向奇数取整、向偶数取整、向零取整和随机取整。其中,优选的为四舍五入取整、向零取整和随机取整以减小精度损失。

另外,本公开实施例还提供了一种神经网络运算方法,所述神经网络运算方法,包括:执行神经网络运算;以及在执行神经网络运算之前,将神经网络运算的输入神经元数据转换为幂次神经元数据;和/或在执行神经网络运算之后,将神经网络运算的输出神经元数据转换为幂次神经元数据。

可选的,在执行神经网络运算之前,将神经网络运算的输入神经元数据转换为幂次神经元数据的步骤包括:将输入数据中的非幂次神经元数据转换为幂次神经元数据;以及接收并存储运算指令、所述幂次神经元数据及权值数据。

可选的,在接收并存储运算指令、所述幂次神经元数据及权值数据的步骤和执行神经网络运算的步骤之间,还包括:读取运算指令,并将其译码成各运算微指令。

可选的,在执行神经网络运算的步骤中,根据运算微指令对权值数据和幂次神经元数据进行神经网络运算。

可选的,在执行神经网络运算之后,将神经网络运算的输出神经元数据转换为幂次神经元数据的步骤包括:输出神经网络运算后得到的神经元数据;以及将神经网络运算后得到的神经元数据中的非幂次神经元数据转换为幂次神经元数据。

可选的,将神经网络运算后得到的神经元数据中的非幂次神经元数据转换为幂次神经元数据并发送至所述数据控制单元,以作为神经网络运算下一层的输入幂次神经元,重复神经网络运算步骤和非幂次神经元数据转换成幂次神经元数据步骤,直到神经网络最后一层运算结束。

具体而言,本公开实施例的神经网络为多层神经网络,在一些实施例中,对于每层神经网络可按图1h所示的运算方法进行运算,其中,神经网络第一层输入幂次神经元数据可通过存储模块从外部地址读入,若外部地址读入的数据已经为幂次数据则直接传入存储模块,否则先通过幂次转换单元转换为幂次数据,此后各层神经网络的输入幂次神经元数据可由在该层之前的一层或多层神经网络的输出幂次神经元数据提供。请参照图1h,本实施例单层神经网络运算方法,包括:

步骤s1-1,获取运算指令、权值数据及神经元数据。

其中,所述步骤s1-1包括以下子步骤:

s1-11,将运算指令、神经元数据及权值数据输入存储模块;其中,对幂次神经元数据直接输入存储模块,对非幂次神经元数据经过所述第二幂次转换单元转换后输入存储模块;

s1-12,数据控制单元接收该存储模块发送的运算指令、幂次神经元数据及权值数据;

s1-13,运算指令缓存单元、输入神经元缓存单元及权值缓存单元分别接收所述数据控制单元发送的运算指令、幂次神经元数据及权值数据并分发给译码单元或运算单元。

所述幂次神经元数据表示神经元数据的数值采用其幂指数值形式表示,具体为,幂次神经元数据包括符号位和幂次位,符号位用一位或多位比特位表示幂次神经元数据的符号,幂次位用m位比特位表示幂次神经元数据的幂次位数据,m为大于1的正整数。存储模块的存储单元预存有编码表,提供幂次神经元数据的每个幂次位数据对应的指数数值。编码表设置一个或者多个幂次位数据(即置零幂次位数据)为指定对应的幂次神经元数据为0。也就是说,当幂次神经元数据的幂次位数据是编码表里的置零幂次位数据时候,表示该幂次神经元数据为0。其中,所述编码表可以有灵活的存储方式,既可以是表格形式进行存储,还可以是通过函数关系进行的映射。

编码表的对应关系可以是任意的。

例如,编码表的对应关系可以是乱序的。如图1i所示一种m为5的编码表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为3。幂次位数据为00010的时候对应指数数值为4。幂次位数据为00011的时候对应指数数值为1。幂次位数据为00100的时候对应幂次神经元数据为0。

编码表的对应关系也可以是正相关的,存储模块预存一个整数值x和一个正整数值y,最小的幂次位数据对应指数数值为x,其他任意一个或多个幂次位数据对应幂次神经元数据为0。x表示偏置值,y表示步长。在一种实施例情况下,最小的幂次位数据对应指数数值为x,最大的幂次位数据对应幂次神经元数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据+x)*y。通过预设定不同的x和y以及通过改变x和y的数值,幂次的表示范围变得可配,可以适用于需要不同数值范围的不同的应用场景。因此,本神经网络运算装置的应用范围更加广泛,使用更加灵活可变,可根据用户需求来做调整。

在一种实施例里,y为1,x的数值等于-2m-1。由此幂次神经元数据所表示的数值的指数范围为-2m-1~2m-1-1。

在一种实施例里,如图1j所示一种m为5,x为0,y为1的编码表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为1。幂次位数据为00010的时候对应指数数值为2。幂次位数据为00011的时候对应指数数值为3。幂次位数据为11111的时候对应幂次神经元数据为0。如图1k所示另一种m为5,x为0,y为2的编码表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为2。幂次位数据为00010的时候对应指数数值为4。幂次位数据为00011的时候对应指数数值为6。幂次位数据为11111的时候对应幂次神经元数据为0。

编码表的对应关系可以是负相关的,存储模块预存一个整数值x和一个正整数值y,最大的幂次位数据对应指数数值为x,其他任意一个或多个幂次位数据对应幂次神经元数据为0。x表示偏置值,y表示步长。在一种实施例情况下,最大的幂次位数据对应指数数值为x,最小的幂次位数据对应幂次神经元数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据-x)*y。通过预设定不同的x和y以及通过改变x和y的数值,幂次的表示范围变得可配,可以适用于需要不同数值范围的不同的应用场景。因此,本神经网络运算装置的应用范围更加广泛,使用更加灵活可变,可根据用户需求来做调整。

在一种实施例里,y为1,x的数值等于2m-1。由此幂次神经元数据所表示的数值的指数范围为-2m-1-1~2m-1

如图1l所示一种m为5的编码表的部分内容,幂次位数据为11111的时候对应数数值为0。幂次位数据为11110的时候对应指数数值为1。幂次位数据为11101的时候对应指数数值为2。幂次位数据为11100的时候对应指数数值为3。幂次位数据为00000的时候对应幂次神经元数据为0。

编码表的对应关系可以是幂次位数据最高位代表置零位,幂次位数据其他m-1位对应指数数值。当幂次位数据最高位为0时,对应幂次神经元数据为0;当幂次位数据最高位为1时,对应幂次神经元数据不为0。反之亦可,即当幂次位数据最高位为1时,对应幂次神经元数据为0;当幂次位数据最高位为0时,对应幂次神经元数据不为0。用另一种语言来描述,即幂次神经元数据的幂次位被分出一个比特来指示幂次神经元数据是否为0。

在一个具体实例图1m所示,符号位为1位,幂次位数据位为7位,即m为7。编码表为幂次位数据为11111111的时候对应幂次神经元数据为0,幂次位数据为其他数值的时候幂次神经元数据对应相应的二进制补码。当幂次神经元数据符号位为0,幂次位为0001001,则其表示具体数值为29,即512;幂次神经元数据符号位为1,幂次位为1111101,则其表示具体数值为-2-3,即-0.125。相对于浮点数据,幂次数据只保留数据的幂次位,极大减小了存储数据所需的存储空间。

通过幂次数据表示方法,可以减小存储神经元数据所需的存储空间。在本实施例所提供示例中,幂次数据为8位数据,应当认识到,该数据长度不是固定不变的,在不同场合下,根据数据神经元的数据范围采用不同的数据长度。

步骤s1-2,根据运算微指令对权值数据和神经元数据进行神经网络运算。其中,所述步骤s2包括以下子步骤:

s1-21,译码单元从运算指令缓存单元中读取运算指令,并将其译码成各运算微指令;

s1-22,运算单元分别接收所述译码单元、输入神经元缓存单元及权值缓存单元发送的运算微指令、幂次神经元数据以及权值数据,并根据运算微指令对权值数据和幂次神经元数据进行神经网络运算。

所述幂次神经元与权值乘法操作具体为,幂次神经元数据符号位与权值数据符号位做异或操作;编码表的对应关系为乱序的情况下查找编码表找出幂次神经元数据幂次位对应的指数数值,编码表的对应关系为正相关的情况下记录编码表的指数数值最小值并做加法找出幂次神经元数据幂次位对应的指数数值,编码表的对应关系为负相关的情况下记录编码表的最大值并做减法找出幂次神经元数据幂次位对应的指数数值;将指数数值与权值数据幂次位做加法操作,权值数据有效位保持不变。

具体实例一如图1n所示,权值数据为16位浮点数据,符号位为0,幂次位为10101,有效位为0110100000,则其表示的实际数值为1.40625*26。幂次神经元数据符号位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次神经元数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元为000110,则其表示的实际数值为64,即26。权值的幂次位加上幂次神经元的幂次位结果为11011,则结果的实际数值为1.40625*212,即为神经元与权值的乘积结果。通过该运算操作,使得乘法操作变为加法操作,减小计算所需的运算量。

具体实例二如图1o所示,权值数据为32位浮点数据,符号位为1,幂次位为10000011,有效位为10010010000000000000000,则其表示的实际数值为-1.5703125*24。幂次神经元数据符号位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次神经元数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元为111100,则其表示的实际数值为-2-4。(权值的幂次位加上幂次神经元的幂次位结果为01111111,则结果的实际数值为1.5703125*20,即为神经元与权值的乘积结果。

步骤s1-3,第一幂次转换单元将神经网络运算后的神经元数据转换成幂次神经元数据。

其中,所述步骤s1-3包括以下子步骤:

s1-31,输出神经元缓存单元接收所述计算单元发送的神经网络运算后得到的神经元数据;

s1-32,第一幂次转换单元接收所述输出神经元缓存单元发送的神经元数据,并将其中的非幂次神经元数据转换为幂次神经元数据。

其中,可选的幂次转换操作有多种,根据实际的应用需求选择。本实施例中列举了三种幂次转换操作:

第一种幂次转换方法:

sout=sin

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout,表示对数据x做取下整操作。

第二种幂次转换方法:

sout=sin

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout,表示对数据x做取上整操作。

第三种幂次转换方法:

sout=sin

dout+=[log2(din+)]

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据;sin为输入数据的符号,sout为输出数据的符号;din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout;[x]表示对数据x做四舍五入操作。

另外,通过幂次转换单元获得的幂次神经元数据可作为神经网络运算下一层的输入幂次神经元,再重复步骤1至步骤3直到神经网络最后一层运算结束。通过改变存储模块预存的整数值x和正整数值y,可以调整神经网络运算装置所能表示的幂次神经元数据范围。

在另一个实施例里,本公开还提供了一种使用所述神经网络运算装置的方法,通过改变存储模块预存的整数值x和正整数值y,以调整神经网络运算装置所能表示的幂次神经元数据范围。

在本公开的另一些实施例中,与前述实施例不同的是,所述运算装置的幂次转换模块,与所述运算模块连接,用于将神经网络运算的输入数据和/或输出数据转换为幂次数据。

具体的,所述输入数据包括输入神经元数据、输入权值数据,所述输出数据包括输出神经元数据、输出权值数据,所述幂次数据包括幂次神经元数据、幂次权值数据。

也就是说,在前述实施例的基础上,此处的幂次转换模块除了可以对神经元数据进行幂次转换之外,还可以对权值数据进行幂次转换,另外,运算结果中的权值数据转换为幂次权值数据之后,可直接发送至数据控制单元,参与后续运算。运算装置的其余模块、单元组成、功能用途及连接关系与前述实施例类似。

如图2a所示,本实施例神经网络运算装置中,包括存储模块2-4、控制模块2-3、运算模块2-1、输出模块2-5及幂次转换模块2-2。

所述存储模块包括:存储单元2-41,用于存储数据和指令;

所述控制模块包括:

数据控制单元2-31,与所述存储单元连接,用于存储单元和各缓存单元之间的数据和指令交互;

运算指令缓存单元2-32,与所述数据控制单元连接,用于接收数据控制单元发送的指令;

译码单元2-33,与所述指令缓存单元连接,用于从指令缓存单元中读取指令,并将其译码成各运算指令;

输入神经元缓存单元2-34,与所述数据控制单元连接,用于接收数据控制单元发送的神经元数据;

权值缓存单元2-35,与所述数据控制单元连接,用于接收从数据控制单元发送的权值数据。

所述运算模块包括:运算单元2-11,与所述控制模块连接,接收该控制模块发送的数据和运算指令,并根据运算指令对其接收的神经元数据及权值数据执行神经网络运算;

所述输出模块包括:输出神经元缓存单元2-51,与所述运算单元连接,用于接收运算单元输出的神经元数据;并将其发送至所述数据控制单元。由此可作为下一层神经网络运算的输入数据;

所述幂次转换模块可包括:

第一幂次转换单元2-21,与所述输出神经元缓存单元及所述运算单元连接,用于将所述输出神经元缓存单元输出的神经元数据转换为幂次神经元数据以及将运算单元输出的权值数据转换为幂次权值数据;和/或

第二幂次转换单元2-22,与所述存储模块连接,用于将输入所述存储模块的神经元数据、权值数据分别转换为幂次神经元数据、幂次权值数据;

可选的,所述运算装置还包括:第三幂次转换单元2-23,与所述运算单元连接,用于将幂次神经元数据、幂次权值数据分别转换为非幂次神经元数据、非幂次权值数据。

需要说明的是,此处仅以幂次转换模块同时包括第一幂次转换单元、第二幂次转换单元和第三幂次转换单元为例进行说明,但实际上,所述幂次转换模块可以包括第一幂次转换单元、第二幂次转换单元和第三幂次转换单元的其中任一,同前述图1b、1f、1g所示的实施例。

非幂次神经元数据、权值数据经第二幂次转换单元转换为幂次神经元数据、幂次权值数据后输入至运算单元中执行运算,运算过程中,为提高精度,可通过设置第三幂次转换单元,将幂次神经元数据、幂次权值数据转换为非幂次神经元数据、非幂次权值数据,第三幂次转换单元可以设在所述运算模块外部也可以设在所述运算模块内部,运算之后输出的非幂次神经元数据可利用第一幂次转换单元转换成幂次神经元数据,再反馈至数据控制单元,参与后续运算,以加快运算速度,由此可形成闭合循环。

另外,所述权值数据幂次转换的具体操作方法与前述实施例相同,此处不再赘述。

在一些实施例中,所述神经网络为多层神经网络,对于每层神经网络可按图2b所示的运算方法进行运算,其中,神经网络第一层输入幂次权值数据可通过存储单元从外部地址读入,若外部地址读入的权值数据已经为幂次权值数据则直接传入存储单元,否则先通过幂次转换单元转换为幂次权值数据。请参照图2b,本实施例单层神经网络运算方法,包括:

步骤s2-1,获取指令、神经元数据及幂次权值数据。

其中,所述步骤s2-1包括以下子步骤:

s2-11,将指令、神经元数据及权值数据输入存储单元;其中,对幂次权值数据直接输入存储单元,对非幂次权值数据经过幂次转换单元转换后输入存储单元;

s2-12,数据控制单元接收该存储单元发送的指令、神经元数据及幂次权值数据;

s2-13,指令缓存单元、输入神经元缓存单元及权值缓存单元分别接收所述数据控制单元发送的指令、神经元数据及幂次权值数据并分发给译码单元或运算单元。

所述幂次权值数据表示权值数据的数值采用其幂指数值形式表示,具体为,幂次权值数据包括符号位和幂次位,符号位用一位或多位比特位表示权值数据的符号,幂次位用m位比特位表示权值数据的幂次位数据,m为大于1的正整数。存储单元预存有编码表,提供幂次权值数据的每个幂次位数据对应的指数数值。编码表设置一个或者多个幂次位数据(即置零幂次位数据)为指定对应的幂次权值数据为0。也就是说,当幂次权值数据的幂次位数据是编码表里的置零幂次位数据时候,表示该幂次权值数据为0。编码表的对应关系与前述实施例中类似,此处不再赘述。

在一个具体实例图2c所示,符号位为1位,幂次位数据位为7位,即m为7。编码表为幂次位数据为11111111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次权值数据对应相应的二进制补码。当幂次权值数据符号位为0,幂次位为0001001,则其表示具体数值为29,即512;幂次权值数据符号位为1,幂次位为1111101,则其表示具体数值为-2-3,即-0.125。相对于浮点数据,幂次数据只保留数据的幂次位,极大减小了存储数据所需的存储空间。

通过幂次数据表示方法,可以减小存储权值数据所需的存储空间。在本实施例所提供示例中,幂次数据为8位数据,应当认识到,该数据长度不是固定不变的,在不同场合下,根据数据权值的数据范围采用不同的数据长度。

步骤s2-2,根据运算指令对神经元数据及幂次权值数据进行神经网络运算。其中,所述步骤s2包括以下子步骤:

s2-21,译码单元从指令缓存单元中读取指令,并将其译码成各运算指令;

s2-22,运算单元分别接收所述译码单元、输入神经元缓存单元及权值缓存单元发送的运算指令、幂次权值数据以及神经元数据,并根据运算指令对神经元数据及幂次表示的权值数据进行神经网络运算。

所述神经元与幂次权值乘法操作具体为,神经元数据符号位与幂次权值数据符号位做异或操作;编码表的对应关系为乱序的情况下查找编码表找出幂次权值数据幂次位对应的指数数值,编码表的对应关系为正相关的情况下记录编码表的指数数值最小值并做加法找出幂次权值数据幂次位对应的指数数值,编码表的对应关系为负相关的情况下记录编码表的最大值并做减法找出幂次权值数据幂次位对应的指数数值;将指数数值与神经元数据幂次位做加法操作,神经元数据有效位保持不变。

具体实例一如图2d所示,神经元数据为16位浮点数据,符号位为0,幂次位为10101,有效位为0110100000,则其表示的实际数值为1.40625*26。幂次权值数据符号位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次权值为000110,则其表示的实际数值为64,即26。幂次权值的幂次位加上神经元的幂次位结果为11011,则结果的实际数值为1.40625*212,即为神经元与幂次权值的乘积结果。通过该运算操作,使得乘法操作变为加法操作,减小计算所需的运算量。

具体实例二如图2e所示,神经元数据为32位浮点数据,符号位为1,幂次位为10000011,有效位为10010010000000000000000,则其表示的实际数值为-1.5703125*24。幂次权值数据符号位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元为111100,则其表示的实际数值为-2-4。(神经元的幂次位加上幂次权值的幂次位结果为01111111,则结果的实际数值为1.5703125*20,即为神经元与幂次权值的乘积结果。

可选的,还包括步骤s2-3,将神经网络运算后的神经元数据输出并作为下一层神经网络运算的输入数据。

其中,所述步骤s2-3可包括以下子步骤:

s2-31,输出神经元缓存单元接收所述计算单元发送的神经网络运算后得到的神经元数据。

s2-32,将输出神经元缓存单元接收的神经元数据传输给数据控制单元,通过输出神经元缓存单元获得的神经元数据可作为神经网络运算下一层的输入神经元,再重复步骤s2-1至步骤s2-3直到神经网络最后一层运算结束。

另外,通过幂次转换单元获得的幂次神经元数据可作为神经网络运算下一层的输入幂次神经元,再重复步骤s2-1至步骤s2-3直到神经网络最后一层运算结束。通过改变存储单元预存的整数值x和正整数值y,可以调整神经网络运算装置所能表示的幂次神经元数据范围。

在一些实施例中,所述神经网络为多层神经网络,对于每层神经网络可按图2f所示的运算方法进行运算,其中,神经网络第一层输入幂次权值数据可通过存储单元从外部地址读入,若外部地址读入的数据已经为幂次权值数据则直接传入存储单元,否则先通过幂次转换单元转换为幂次权值数据;而神经网络第一层输入幂次神经元数据可通过存储单元从外部地址读入,若外部地址读入的数据已经为幂次数据则直接传入存储单元,否则先通过幂次转换单元转换为幂次神经元数据,此后各层神经网络的输入神经元数据可由在该层之前的一层或多层神经网络的输出幂次神经元数据提供。请参照图2f,本实施例单层神经网络运算方法,包括:

步骤s2-4,获取指令、幂次神经元数据及幂次权值数据。

其中,所述步骤s2-4包括以下子步骤:

s2-41,将指令、神经元数据及权值数据输入存储单元;其中,对幂次神经元数据及幂次权值数据直接输入存储单元,对非幂次神经元数据及非幂次权值数据则经过所述第一幂次转换单元转换为幂次神经元数据及幂次权值数据后输入存储单元;

s2-42,数据控制单元接收该存储单元发送的指令、幂次神经元数据及幂次权值数据;

s2-43,指令缓存单元、输入神经元缓存单元及权值缓存单元分别接收所述数据控制单元发送的指令、幂次神经元数据及幂次权值数据并分发给译码单元或运算单元。

所述幂次神经元数据及幂次权值数据表示神经元数据及权值数据的数值采用其幂指数值形式表示,具体为,幂次神经元数据及幂次权值数据均包括符号位和幂次位,符号位用一位或多位比特位表示神经元数据及权值数据的符号,幂次位用m位比特位表示神经元数据及权值数据的幂次位数据,m为大于1的正整数。存储单元的存储单元预存有编码表,提供幂次神经元数据及幂次权值数据的每个幂次位数据对应的指数数值。编码表设置一个或者多个幂次位数据(即置零幂次位数据)为指定对应的幂次神经元数据及幂次权值数据为0。也就是说,当幂次神经元数据及幂次权值数据的幂次位数据是编码表里的置零幂次位数据时候,表示该幂次神经元数据及幂次权值数据为0。

在一个具体实例方式中,如图2g所示,符号位为1位,幂次位数据位为7位,即m为7。编码表为幂次位数据为11111111的时候对应幂次神经元数据及幂次权值数据为0,幂次位数据为其他数值的时候幂次神经元数据及幂次权值数据对应相应的二进制补码。当幂次神经元数据及幂次权值数据符号位为0,幂次位为0001001,则其表示具体数值为29,即512;幂次神经元数据及幂次权值数据符号位为1,幂次位为1111101,则其表示具体数值为-2-3,即-0.125。相对于浮点数据,幂次数据只保留数据的幂次位,极大减小了存储数据所需的存储空间。

通过幂次数据表示方法,可以减小存储神经元数据及权值数据所需的存储空间。在本实施例所提供示例中,幂次数据为8位数据,应当认识到,该数据长度不是固定不变的,在不同场合下,根据神经元数据及权值数据的数据范围采用不同的数据长度。

步骤s2-5,根据运算指令对幂次神经元数据及幂次权值数据进行神经网络运算。其中,所述步骤s5包括以下子步骤:

s2-51,译码单元从指令缓存单元中读取指令,并将其译码成各运算指令;

s2-52,运算单元分别接收所述译码单元、输入神经元缓存单元及权值缓存单元发送的运算指令、幂次神经元数据及幂次权值数据,并根据运算指令对幂次神经元数据及幂次权值数据进行神经网络运算。

所述幂次神经元与幂次权值乘法操作具体为,幂次神经元数据符号位与幂次权值数据符号位做异或操作;编码表的对应关系为乱序的情况下查找编码表找出幂次神经元数据及幂次权值数据幂次位对应的指数数值,编码表的对应关系为正相关的情况下记录编码表的指数数值最小值并做加法找出幂次神经元数据及幂次权值数据幂次位对应的指数数值,编码表的对应关系为负相关的情况下记录编码表的最大值并做减法找出幂次神经元书记及幂次权值数据幂次位对应的指数数值;将幂次神经元数据对应的指数数值与幂次权值数据对应的指数数值做加法操作。

具体实例一如图2h所示,幂次神经元数据和幂次权值数据符号位为1位,幂次位数据位为4位,即m为4。编码表为幂次位数据为1111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元数据为00010,则其表示的实际数值为22。幂次权值为00110,则其表示的实际数值为64,即26。幂次神经元数据和幂次权值数据的乘积为01000,其表示的实际数值为28

可以看到,幂次神经元数据和幂次权值的乘法运算相比于浮点数据的乘法以及浮点数据和幂次数据的乘法都更加的简单方便。

本实施例方法还可进一步包括,步骤s2-6,将神经网络运算后的神经元数据输出并作为下一层神经网络运算的输入数据。

其中,所述步骤s2-6包括以下子步骤:

s2-61,输出神经元缓存单元接收所述计算单元发送的神经网络运算后得到的神经元数据。

s2-62,将输出神经元缓存单元接收的神经元数据传输给数据控制单元,通过输出神经元缓存单元获得的神经元数据可作为神经网络运算下一层的输入神经元,再重复步骤s4至步骤s6直到神经网络最后一层运算结束。

由于神经网络运算后得到的神经元数据也为幂次数据,将其传输给数据控制单元所需带宽相比于浮点数据所需带宽大大减少,因此进一步减小了神经网络存储资源和计算资源的开销,提高了神经网络的运算速度。

另外,所述幂次转换的具体操作方法与前述实施例相同,此处不再赘述。

所公开的实施例的所有的单元都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器,dna计算机。

本公开的一个实施例提供了一种运算装置,包括:

运算控制模块3-2,用于确定分块信息;以及

运算模块3-3,用于根据所述分块信息对运算矩阵进行分块、转置及合并运算,以得到所述运算矩阵的转置矩阵。

具体的,所述分块信息可以包括分块大小信息,分块方式信息,分块合并信息的至少一种。其中,分块大小信息表示将所述运算矩阵进行分块后,所获得的各个分块矩阵的大小信息。分开方式信息表示对所述运算矩阵进行分块的方式。分开合并信息表示将各个分块矩阵进行转置运算后,重新合并获得运算矩阵的转置矩阵的方式。

由于本公开运算装置可以对运算矩阵进行分块,通过对多个分块矩阵分别进行转置运算得到多个分块矩阵的转置矩阵,最终对多个分块矩阵的转置矩阵进行合并,得到运算矩阵的转置矩阵,因此可以实现使用一条单独指令在常数时间复杂度内完成任意大小矩阵的转置操作。相比较传统的矩阵转置操作实现方法,本公开在降低操作时间复杂度的同时也使矩阵转置操作的使用更为简单高效。

如图3a~3b所示,在本公开的一些实施例中,所述运算装置,还包括:

地址存储模块3-1,用于存储运算矩阵的地址信息;以及

数据存储模块3-4,用于存储原始矩阵数据,该原始矩阵数据包括所述运算矩阵,并存储运算后的转置矩阵;

其中,所述运算控制模块用于从地址存储模块提取运算矩阵的地址信息,并根据运算矩阵的地址信息分析得到分块信息;所述运算模块用于从运算控制模块获取运算矩阵的地址信息及分块信息,根据运算矩阵的地址信息从数据存储模块提取运算矩阵,并根据分块信息对运算矩阵进行分块、转置及合并运算,得到运算矩阵的转置矩阵,并将运算矩阵的转置矩阵反馈至数据存储模块。

如图3c所示,在本公开的一些实施例中,上述运算模块包括矩阵分块单元、矩阵运算单元和矩阵合并单元,其中:

矩阵分块单元3-31:用于从运算控制模块获取运算矩阵的地址信息及分块信息,并根据运算矩阵的地址信息从数据存储模块提取运算矩阵,根据分块信息对运算矩阵进行分块运算得到n个分块矩阵;

矩阵运算单元3-32,用于获取n个分块矩阵,并对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;

矩阵合并单元3-33,用于获取并合并n个分块矩阵的转置矩阵,得到所述运算矩阵的转置矩阵,其中,n为自然数。

举例而言,如图3d所示,对于存储于数据存储模块中的一运算矩阵x,运算模块的矩阵分块单元从数据存储模块中提取所述运算矩阵x,根据分块信息对运算矩阵x进行分块运算操作,得到4个分块矩阵x1、x2、x3、x4,并输出至矩阵运算单元;矩阵运算单元从矩阵分块单元中获取这4个分块矩阵,并对这4个分块矩阵分别进行转置运算操作,得到4个分块矩阵的转置矩阵x1t、x2t、x3t、x4t,并输出至矩阵合并单元;矩阵合并单元从矩阵运算单元中获取这4个分块矩阵的转置矩阵并进行合并,得到运算矩阵的转置矩阵xt,还可进一步将转置矩阵xt输出至数据存储模块。

在本公开的一些实施例中,上述运算模块还包括缓存单元3-34,用于缓存n个分块矩阵,以供矩阵运算单元获取。

在本公开的一些实施例中,上述矩阵合并单元还可以包括存储器,用于暂时存储获取的分块矩阵的转置矩阵,当矩阵运算单元完成所有分块矩阵的运算后,矩阵合并单元即可获取到所有分块矩阵的转置矩阵,再对n个分块矩阵的转置矩阵进行合并操作,得到转置后的矩阵,并将输出结果写回到数据存储模块中。

本领域技术人员应当可以理解的是,上述矩阵分块单元、矩阵运算单元及矩阵合并单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。所述矩阵分块单元及矩阵合并单元可包括一个或多个控制元件、所述矩阵运算单元可包括一个或多个控制元件、计算元件。

如图3e所示,在本公开的一些实施例中,上述运算控制模块包括指令处理单元3-22、指令缓存单元3-21和矩阵判断单元3-23,其中:

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

指令处理单元,用于从指令缓存单元中获取矩阵运算指令,对矩阵运算指令进行译码,并根据译码后的矩阵运算指令从地址存储模块中提取运算矩阵的地址信息;

矩阵判断单元,用于根据运算矩阵的地址信息判断是否需要进行分块,并根据判断结果得到分块信息。

在本公开的一些实施例中,上述运算控制模块还包括依赖关系处理单元3-24,用于判断译码后的矩阵运算指令和运算矩阵的地址信息是否与上一运算存在冲突,若存在冲突,则暂存译码后的矩阵运算指令和运算矩阵的地址信息;若不存在冲突,则发射译码后的矩阵运算指令和运算矩阵的地址信息至矩阵判断单元。

在本公开的一些实施例中,上述运算控制模块还包括指令队列存储器3-25,用于缓存存在冲突的译码后的矩阵运算指令和运算矩阵的地址信息,当所述冲突消除后,将所缓存的译码后的矩阵运算指令和运算矩阵的地址信息发射至矩阵判断单元。

具体地,矩阵运算指令访问数据存储模块时,前后指令可能会访问同一块存储空间,为了保证指令执行结果的正确性,当前指令如果被检测到与之前的指令的数据存在依赖关系,该指令必须在指令队列存储器内等待至依赖关系被消除。

在本公开的一些实施例中,上述指令处理单元包括取指单元3-221和译码单元3-222,其中:

取指单元,用于从指令缓存单元中获取矩阵运算指令,并将此矩阵运算指令传输至译码单元;

译码单元,用于对矩阵运算指令进行译码,根据该译码后的矩阵运算指令从地址存储模块中提取运算矩阵的地址信息,并将译码后的矩阵运算指令和提取的运算矩阵的地址信息传输至所述依赖关系处理单元。

在本公开的一些实施例中,上述运算装置还包括输入输出模块,用于向数据存储模块输入所述运算矩阵,还用于从数据存储模块获取运算后的转置矩阵,并输出运算后的转置矩阵。

在本公开的一些实施例中,上述运算矩阵的地址信息为矩阵的起始地址信息和矩阵大小信息。

在本公开的一些实施例中,运算矩阵的地址信息是矩阵在数据存储模块中的存储地址。

在本公开的一些实施例中,地址存储模块为标量寄存器堆或通用内存单元;数据存储模块为高速暂存存储器或通用内存单元。

在本公开的一些实施例中,地址存储模块可以是标量寄存器堆,提供运算过程中所需的标量寄存器,标量寄存器不只存放矩阵地址,还可存放有标量数据。当对大规模矩阵进行转置时进行了分块操作后,标量寄存器中的标量数据可以用于记录矩阵块的数量。

在本公开的一些实施例中,数据存储模块可以是高速暂存存储器,能够支持不同大小的矩阵数据。

在本公开的一些实施例中,矩阵判断单元用于判断矩阵大小,如果超过规定的最大规模m,则需要对矩阵进行分块操作,矩阵判断单元根据此判断结果分析得到分块信息。

在本公开的一些实施例中,指令缓存单元,用于存储待执行的矩阵运算指令。指令在执行过程中,同时也被缓存在指令缓存单元中,当一条指令执行完之后,如果该指令同时也是指令缓存单元中未被提交指令中最早的一条指令,该指令将被提交,一旦提交,该条指令进行的操作对装置状态的改变将无法撤销。该指令缓存单元可以是重排序缓存。

在本公开的一些实施例中,矩阵运算指令为矩阵转置运算指令,包括操作码和操作域,其中,操作码用于指示该矩阵转置运算指令的功能,矩阵运算控制模块通过识别该操作码确认进行矩阵转置操作,操作域用于指示该矩阵转置运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,例如,要获取一个矩阵时,根据寄存器号可以在相应的寄存器中获取矩阵起始地址和矩阵规模,再根据矩阵起始地址和矩阵规模在数据存储模块中获取相应地址存放的矩阵。

本公开使用一种新的运算结构简单高效的实现对矩阵的转置运算,降低了这一运算的时间复杂度。

本公开还公开了一种运算方法,包括以下步骤:

步骤1、运算控制模块从地址存储模块提取运算矩阵的地址信息;

步骤2、运算控制模块根据运算矩阵的地址信息得到分块信息,并将运算矩阵的地址信息和分块信息传输至运算模块;

步骤3、运算模块根据运算矩阵的地址信息从数据存储模块提取运算矩阵;并根据分块信息将运算矩阵分成n个分块矩阵;

步骤4、运算模块对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;

步骤5、运算模块合并n个分块矩阵的转置矩阵,得到运算矩阵的转置矩阵并反馈至数据存储模块;

其中,n为自然数。

以下通过具体实施例对本公开提出的运算装置及方法进行详细描述。

在一些实施例中,如图3f所示,本实施例提出一种运算装置,包括地址存储模块、运算控制模块、运算模块、数据存储模块和输入输出模块3-5,其中

可选的,所述运算控制模块包括指令缓存单元、指令处理单元、依赖关系处理单元、指令队列存储器和矩阵判断单元,其中指令处理单元又包括取指单元和译码单元;

可选的,所述运算模块包括矩阵分块单元、矩阵缓存单元、矩阵运算单元和矩阵合并单元;

可选的,所述地址存储模块为一标量寄存器堆;

可选的,所述数据存储模块为一高速暂存存储器;输入输出模块为一io直接内存存取模块。

以下对运算装置的各组成部分进行详细说明:

取指单元,该单元负责从指令缓存单元中取出下一条将要执行的运算指令,并将该运算指令传给译码单元;

译码单元,该单元负责对运算指令进行译码,并将译码后的运算指令发送至标量寄存器堆,得到标量寄存器堆反馈的运算矩阵的地址信息,将译码后的运算指令和得到的运算矩阵的地址信息传输给依赖关系处理单元;

依赖关系处理单元,该单元处理运算指令与前一条指令可能存在的存储依赖关系。矩阵运算指令会访问高速暂存存储器,前后指令可能会访问同一块存储空间。为了保证指令执行结果的正确性,当前运算指令如果被检测到与之前的运算指令的数据存在依赖关系,该运算指令必须缓存至指令队列存储器内等待至依赖关系被消除;如当前运算指令与之前的运算指令不存在依赖关系,则依赖关系处理单元直接将运算矩阵的地址信息和译码后的运算指令传输至矩阵判断单元。

指令队列存储器,考虑到不同运算指令所对应的/指定的标量寄存器上有可能存在依赖关系,用于缓存存在冲突的译码后的运算指令和相应的运算矩阵的地址信息,当依赖关系被满足之后发射译码后的运算指令和相应的运算矩阵的地址信息至矩阵判断单元;

矩阵判断单元,用于根据运算矩阵的地址信息判断矩阵大小,如果超过规定的最大规模m,则需要对矩阵进行分块操作,矩阵判断单元根据此判断结果分析得到分块信息,并将运算矩阵的地址信息和得到的分块信息传输至矩阵分块单元。

矩阵分块单元,该单元负责根据运算矩阵的地址信息,从高速暂存器中提取需进行转置运算的运算矩阵,并根据分块信息对该运算矩阵进行分块,得到n个分块矩阵。矩阵缓存单元,该单元用于缓存经过分块后的n个分块矩阵,依次传输至矩阵运算单元进行转置运算;

矩阵运算单元,负责依次从矩阵缓存单元中提取分块矩阵进行转置运算,并将转置后的分块矩阵传输至矩阵合并单元;

矩阵合并单元,负责接收并暂时缓存转置后的分块矩阵,待所有分块矩阵都进行完转置运算后,对n个分块矩阵的转置矩阵进行合并运算,得到运算矩阵的转置矩阵。

标量寄存器堆,提供装置在运算过程中所需的标量寄存器,为运算提供运算矩阵的地址信息;

高速暂存器,该模块是矩阵数据专用的暂存存储装置,能够支持不同大小的矩阵数据。

io内存存取模块,该模块用于直接访问高速暂存存储器,负责从高速暂存存储器中读取数据或写入数据。

在一些实施例中,如图3g所示,本实施例提出一种运算方法,用于执行大规模矩阵的转置运算,具体包括以下步骤:

步骤1、运算控制模块从地址存储模块提取运算矩阵的地址信息,具体包括以下步骤:

步骤1-1、取指单元提取运算指令,并将运算指令送至译码单元;

步骤1-2、译码单元对运算指令进行译码,根据译码后的运算指令从地址存储模块获取运算矩阵的地址信息,并将译码后的运算指令和运算矩阵的地址信息送往依赖关系处理单元;

步骤1-3、依赖关系处理单元分析该译码后的运算指令与前面的尚未执行结束的指令在数据上是否存在依赖关系;具体而言,所述依赖关系处理单元可根据运算指令所需读取的寄存器的地址,判断该寄存器是否存在待写入的情况,如有,则存在依赖关系,待数据写回后,才可执行该运算指令。

若存在依赖关系,该条译码后的运算指令与相应的运算矩阵的地址信息需要在指令队列存储器中等待至其与前面的未执行结束的指令在数据上不再存在依赖关系为止;

步骤2、运算控制模块根据运算矩阵的地址信息得到分块信息;

具体的,依赖关系不存在后,指令队列存储器发射该条译码后的运算指令与相应的运算矩阵的地址信息至矩阵判断单元,判断矩阵是否需要进行分块,矩阵判断单元根据判断结果得到分块信息,并将分块信息和运算矩阵的地址信息传输至矩阵分块单元;

步骤3、运算模块根据运算矩阵的地址信息从数据存储模块提取运算矩阵;并根据分块信息将运算矩阵分成n个分块矩阵;

具体的,矩阵分块单元根据传入的运算矩阵的地址信息从数据存储模块中取出需要的运算矩阵,再根据传入的分块信息,将运算矩阵分成n个分块矩阵,完成分块后依次将每个分块矩阵传入到矩阵缓存单元;

步骤4、运算模块分别对n个分块矩阵进行转置运算,得到n个分块矩阵的转置矩阵;

具体的,矩阵运算单元依次从矩阵缓存单元提取分块矩阵,并对每个提取的分块矩阵进行转置操作,再将得到的每个分块矩阵的转置矩阵传入到矩阵合并单元。

步骤5、运算模块合并n个分块矩阵的转置矩阵,得到运算矩阵的转置矩阵,并将该转置矩阵反馈给数据存储模块,具体包括以下步骤:

步骤5-1、矩阵合并单元接收每个分块矩阵的转置矩阵,当接收到的分块矩阵的转置矩阵数量达到总的分块数后,对所有的分块进行矩阵合并操作,得到运算矩阵的转置矩阵;并将该转置矩阵反馈至数据存储模块的指定地址;

步骤5-2、输入输出模块直接访问数据存储模块,从数据存储模块中读取运算得到的运算矩阵的转置矩阵。

本公开提到的向量可以是0维向量,1维向量,2维向量或者多维向量。其中,0维向量也可以被称为标量,2维也可以被称为矩阵。

本公开的一个实施例提出了一种数据筛选装置,参见图4a,包括:存储单元4-3,用于存储数据和指令,其中数据包括待筛选数据和位置信息数据。

寄存器单元4-2,用于存放存储单元中的数据地址。

数据筛选模块4-1,包括数据筛选单元4-11,数据筛选模块根据指令在寄存器单元中获取数据地址,根据该数据地址在存储单元中获取相应的数据,并根据获取的数据进行筛选操作,得到数据筛选结果。

数据筛选单元功能示意图如图4b所示,其输入数据为待筛选数据和位置信息数据,输出数据可以只包含筛选后数据,也可以同时包含筛选后数据的相关信息,相关信息例如是向量长度、数组大小、所占空间等。

进一步地,参见图4c,本实施例的数据筛选装置具体包括:

存储单元4-3,用于存储待筛选数据、位置信息数据和指令。

寄存器单元4-2,用于存放存储单元中的数据地址。

数据筛选模块4-1包括:

指令缓存单元4-12,用于存储指令。

控制单元4-13,从指令缓存单元中读取指令,并将其译码成具体操作微指令。

i/o单元4-16,将存储单元中的指令搬运到指令缓存单元中,将存储单元中的数据搬运到输入数据缓存单元和输出缓存单元中,也可以将输出缓存单元中的输出数据搬运到存储单元中。

输入数据缓存单元4-14,存储i/o单元搬运的数据,包括待筛选数据和位置信息数据。

数据筛选单元4-11,用于接收控制单元传来的微指令,并从寄存器单元获取数据地址,将输入数据缓存单元传来的待筛选数据和位置信息数据作为输入数据,对输入数据进行筛选操作,完成后将筛选后数据传给输出数据缓存单元。

输出数据缓存单元4-15,存储输出数据,输出数据可以只包含筛选后数据,也可以同时包含筛选后数据的相关信息,如向量长度、数组大小、所占空间等等。

本实施例的数据筛选装置适用于多种筛选对象,待筛选数据可以是向量或高维数组等,位置信息数据既可以是二进制码,也可以是向量或高维数组等,其每个分量为0或1。其中,待筛选数据的分量和位置信息数据的分量可以是一一对应的。本领域技术人员应当可以理解的是,位置信息数据的每个分量为1或0只是位置信息的一种示例性的表示方式,位置信息的表示方式并不局限在这一种表示方式。

可选的,对于位置信息数据中每个分量使用0或1表示时,数据筛选单元对输入数据进行筛选操作具体包括,数据筛选单元扫描位置信息数据的每个分量,若分量为0,则删除该分量对应的待筛选数据分量,若分量为1,则保留该分量对应的待筛选数据分量;或者,若位置信息数据的分量为1,则删除该分量对应的待筛选数据分量,若分量为0,则保留该分量对应的待筛选数据分量。当扫描完毕,则筛选完成,得到筛选后数据并输出。此外,在进行筛选操作的同时,还可以对筛选后数据的相关信息进行记录,如向量长度、数组大小、所占空间等等,根据具体情况决定是否同步进行相关信息的记录和输出。需要说明的是,位置信息数据的每个分量采用其他表示方式进行表示时,数据筛选单元还可以配置与表示方式相应的筛选操作。

以下通过实例说明数据筛选的过程。

例一:

设待筛选数据为向量(1010134243),需要筛选的是小于100的分量,那么输入的位置信息数据也是向量,即向量(11010)。经过筛选后的数据可以仍保持向量结构,并且可以同时输出筛选后数据的向量长度。

其中,位置信息向量可以是外部输入的,也可以是内部生成的。可选的,在本公开装置还可以包括位置信息生成模块,位置信息生成模块可以用于生成位置信息向量,该位置信息生成模块与数据筛选单元连接。具体而言,位置信息生成模块可以通过向量运算生成位置信息向量,向量运算可以是向量比较运算,即通过对待筛选向量的分量逐一与预设数值比较大小得到。需要说明的是,位置信息生成模块还可以根据预设条件选择其他向量运算生成位置信息向量。。本例中规定位置信息数据的分量为1则保留对应的待筛选数据分量,分量为0则删除对应的待筛选数据分量。

数据筛选单元初始化一个变量length=0,用以记录筛选后数据的向量长度;

数据筛选单元读取输入数据缓存单元的数据,扫描位置信息向量的第1个分量,发现其值为1,则保留待筛选向量的第1个分量的值1,length=length+1;

扫描位置信息向量的第2个分量,发现其值为1,则保留待筛选向量的第2个分量的值0,length=length+1;

扫描位置信息向量的第3个分量,发现其值为0,则删去待筛选向量的第3个分量的值101,length不变;

扫描位置信息向量的第4个分量,发现其值为1,则保留待筛选向量的第4个分量的值34,length=length+1;

扫描位置信息向量的第5个分量,发现其值为0,则保留待筛选向量的第5个分量的值243,length不变;

保留下来的值组成筛选后向量(1034)及其向量长度为length=3,并由输出数据缓存单元存储。

在本实施例的数据筛选装置中,数据筛选模块还可以包括一结构变形单元4-17,可以对输入数据缓存单元的输入数据、以及输出数据缓存单元的输出数据的存储结构进行变形,如将高维数组展开为向量,将向量变为高维数组等等。可选的,将高维数据展开的方式可以是行优先,也可以是列优先,还可以根据具体情况选择其他的展开方式。

例二:

设待筛选数据为四维数组需要筛选的是偶数值,那么输入的位置信息数组是筛选后数据为向量结构,不输出相关信息。本例中规定位置信息数据的分量为1,则保留对应的待筛选数据分量,分量为0则删除对应待筛选数据分量。

数据筛选单元读取输入数据缓存单元的数据,扫描位置信息数组的第(1,1)个分量,发现其值为0,则删去待筛选数组的第(1,1)个分量的值1;

扫描位置信息数组的第(1,2)个分量,发现其值为1,则保留待筛选数组的第(1,2)个分量的值4;

扫描位置信息数组的第(2,1)个分量,发现其值为0,则删去待筛选数组的第(2,1)个分量的值61;

扫描位置信息数组的第(2,2)个分量,发现其值为1,则保留待筛选数组的第(2,2)个分量的值22;

结构变形单元将保留下来的值变为向量,即筛选后数据为向量(422),并由输出数据缓存单元存储。

在一些实施例中,如图4d所示,所述数据数据筛选模块还可进一步包括:计算单元4-18。由此,本公开装置可同时实现数据筛选及处理,即可得到一种数据筛选及处理装置。所述计算单元的具体结构同前述实施例,此处不再赘述。

本公开提供了一种利用所述的数据筛选装置进行数据筛选的方法,包括:

数据筛选模块在寄存器单元中获取数据地址;

根据数据地址在存储单元中获取相应的数据;以及

对获取的数据进行筛选操作,得到数据筛选结果。

在一些实施例中,所述数据筛选模块在寄存器单元中获取数据地址的步骤包括:数据筛选单元从寄存器单元中获取待筛选数据的地址和位置信息数据的地址。

在一些实施例中,所述根据数据地址在存储单元中获取相应的数据的步骤包括以下子步骤:

i/o单元将存储单元中的待筛选数据和位置信息数据传递给输入数据缓存单元;以及

输入数据缓存单元将待筛选数据和位置信息数据传递给数据筛选单元。

可选的,所述i/o单元将存储单元中的待筛选数据和位置信息数据传递给输入数据缓存单元的子步骤和所述输入数据缓存单元将待筛选数据和位置信息数据传递给数据筛选单元的子步骤之间还包括:判断是否进行存储结构变形。

如果进行存储结构变形,则输入数据缓存单元将待筛选数据传给结构变形单元,结构变形单元进行存储结构变形,将变形后的待筛选数据传回输入数据缓存单元,之后执行所述输入数据缓存单元将待筛选数据和位置信息数据传递给数据筛选单元的子步骤;如果否,则直接执行所述输入数据缓存单元将待筛选数据和位置信息数据传递给数据筛选单元的子步骤。

在一些实施例中,所述对获取的数据进行筛选操作,得到数据筛选结果的步骤包括:数据筛选单元根据位置信息数据,对待筛选数据进行筛选操作,将输出数据传递给输出数据缓存单元。

如图4e所示,在本公开的一具体实施例中,所述数据筛选方法的步骤具体如下:

步骤s4-1,控制单元从指令缓存单元中读入一条数据筛选指令,并将其译码为具体操作微指令,传递给数据筛选单元;

步骤s4-2,数据筛选单元从寄存器单元中获取待筛选数据和位置信息数据的地址;

步骤s4-3,控制单元从指令缓存单元中读入一条i/o指令,将其译码为具体操作微指令,传递给i/o单元;

步骤s4-4,i/o单元将存储单元中的待筛选数据和位置信息数据传递给输入数据缓存单元;

判断是否进行存储结构变形,如果是,则执行步骤s4-5,如果否,则直接执行步骤s4-6。

步骤s4-5,输入数据缓存单元将数据传给结构变形单元,并进行相应存储结构变形,然后将变形后的数据传回输入数据缓存单元,然后转步骤s4-6;

步骤s4-6,输入数据缓存单元将数据传递给数据筛选单元,数据筛选单元根据位置信息数据,对待筛选数据进行筛选操作;

步骤s4-7,将输出数据传递给输出数据缓存单元,其中输出数据可以只包含筛选后数据,也可以同时包含筛选后数据的相关信息,如向量长度,数组大小、所占空间等等。

至此,已经结合附图对本公开实施例进行了详细描述。依据以上描述,本领域技术人员应当对本公开的一种数据筛选装置和方法有了清楚的认识。

本公开的一个实施例提供了一种神经网络处理器,包括:存储器、高速暂存存储器和异构内核;其中,所述存储器,用于存储神经网络运算的数据和指令;所述高速暂存存储器,通过存储器总线与所述存储器连接;所述异构内核,通过高速暂存存储器总线与所述高速暂存存储器连接,通过高速暂存存储器读取神经网络运算的数据和指令,完成神经网络运算,并将运算结果送回到高速暂存存储器,控制高速暂存存储器将运算结果写回到存储器。

其中,所述异构内核指包括至少两种不同类型的内核,也即两种不同结构的内核。

在一些实施例中,所述异构内核包括:多个运算内核,其具有至少两种不同类型的运算内核,用于执行神经网络运算或神经网络层运算;以及一个或多个逻辑控制内核,用于根据神经网络运算的数据,决定由所述专用内核和/或所述通用内核执行神经网络运算或神经网络层运算。

进一步的,所述多个运算内核包括m个通用内核和n个专用内核;其中,所述专用内核专用于执行指定神经网络/神经网络层运算,所述通用内核用于执行任意神经网络/神经网络层运算。可选的,所述通用内核可以为cpu,所述专用内核可以为npu。

在一些实施例中,所述高速暂存存储器包括共享高速暂存存储器和/或非共享高速暂存存储器;其中,所述一共享高速暂存存储器通过高速暂存存储器总线与所述异构内核中的至少两个内核对应连接;所述一非共享高速暂存存储器通过高速暂存存储器总线与所述异构内核中的一内核对应连接。

具体而言,所述高速暂存存储器可以仅包括一个或多个共享高速暂存存储器,每一个共享高速暂存存储器与异构内核中的多个内核(逻辑控制内核、专用内核或通用内核)连接。所述高速暂存存储器也可以仅包括一个或多个非共享高速暂存存储器,每一个非共享高速暂存存储器与异构内核中的一个内核(逻辑控制内核、专用内核或通用内核)连接。所述高速暂存存储器也可以同时包括一个或多个共享高速暂存存储器、以及一个或多个非共享高速暂存存储器,其中,每一个共享高速暂存存储器与异构内核中的多个内核(逻辑控制内核、专用内核或通用内核)连接,每一个非共享高速暂存存储器与异构内核中的一个内核(逻辑控制内核、专用内核或通用内核)连接。

在一些实施例中,所述逻辑控制内核通过高速暂存存储器总线与所述高速暂存存储器连接,通过高速暂存存储器读取神经网络运算的数据,并根据神经网络运算的数据中的神经网络模型的类型和参数,决定由专用内核和/或通用内核作为目标内核来执行神经网络运算和/或神经网络层运算。其中,可以在内核之间加入通路,所述逻辑控制内核可通过控制总线直接向所述向目标内核发送信号,也可经所述高速暂存存储器存储器向所述向目标内核发送信号,从而控制目标内核执行神经网络运算和/或神经网络层运算。

本公开的一个实施例提出了一种异构多核神经网络处理器,参见图5a,包括:存储器11、非共享高速暂存存储器12和异构内核13。

存储器11,用于存储神经网络运算的数据和指令,数据包括偏置、权值、输入数据、输出数据、以及神经网络模型的类型和参数等当然,所述输出数据也可以不存储在存储器;指令包括神经网络运算对应的各种指令,例如config指令、compute指令、io指令、nop指令、jump指令、move指令等。存储器11中存储的数据和指令可以通过非共享高速暂存存储器12传送到异构内核13中。

非共享高速暂存存储器12,包括多个高速暂存存储器121,每一高速暂存存储器121均通过存储器总线与存储器11连接,通过高速暂存存储器总线与异构内核13连接,实现异构内核13与非共享高速暂存存储器12之间、非共享高速暂存存储器12与存储器11之间的数据交换。当异构内核13所需的神经网络运算数据或指令未存储在非共享高速暂存存储器12中时,非共享高速暂存存储器12先通过存储器总线从存储器11中读取所需的数据或指令,然后将其通过高速暂存存储器总线送入到异构内核13中。

异构内核13,包括一逻辑控制内核131、一通用内核132以及多个专用内核133,逻辑控制内核131、通用内核132以及每一专用内核133均通过高速暂存存储器总线与一高速暂存存储器121对应连接。

异构内核13用以从非共享高速暂存存储器12中读取神经网络运算的指令和数据,完成神经网络运算,并将运算结果送回到非高速共享缓存12,控制非共享高速暂存存储器12将运算结果写回到存储器11。

逻辑控制内核131从非共享高速暂存存储器12中读入神经网络运算数据和指令,根据数据中的神经网络模型的类型和参数,判断是否存在支持该神经网络运算且能完成该神经网络运算规模的专用内核133,如果存在,则交由对应的专用内核133完成该神经网络运算,如果不存在,则交由通用内核132完成该神经网络运算。为了确定专用内核的位置及其是否空闲,可以使用为每类内核(支持同一层的专用内核属于一类,通用内核属于一类)设置一张表(称为专用/通用内核信息表),表中记录同类内核的编号(或地址)以及其当前是否空闲,初始均为空闲,之后空闲状态的更改有逻辑控制内核与内核间的直接或间接通信来维护,表中的内核编号可以在此网络处理器初始化时进行一遍扫描得到,这样即可支持动态可配置的异构内核(即可以随时更改异构内核中的专用处理器类型及数目,更改之后就会扫描更新内核信息表);可选的,也可以不支持异构内核的动态配置,这时就只需要把表中的内核编号固定即可,不需要多次扫描更新;可选的,如果每类专用内核的编号总是连续的,可以记录一个基址,然后用连续的若干比特位即可表示这些专用内核,用比特0或1即可表示其是否处于空闲状态。为了判断出网络模型的类型和参数,可以在逻辑控制内核中设置一个译码器,根据指令判断出网络层的类型,并可以判断出是通用内核的指令还是专用内核的指令,参数、数据地址等也可以从指令中解析出来;可选的,还可以规定数据包含一个数据头,其中包含各网络层的编号及其规模,以及对应计算数据及指令的地址等,并设一个专门的解析器(软件或硬件均可)来解析这些信息;可选的,将解析出的信息存储到指定区域。为了根据解析出来的网络层编号及规模决定使用哪个内核,可以在逻辑控制内核中设置一个内容寻址存储器cam(contentaddressablememory),其中的内容可以实现为可配置的,这就需要逻辑控制内核提供一些指令来配置/写这个cam,cam中的内容有网络层编号,各个维度所能支持的最大规模,以及支持该层的专用内核信息表的地址和通用内核信息表地址,此方案下,用解析出来的层编号来找到对应表项,并比较规模限制;若满足则取专用内核信息表的地址,去其中寻找一个空闲的专用内核,根据其编号发送控制信号,为其分配计算任务;如果在cam中没有找到对应层,或超出了规模限制,或专用内核信息表中无空闲内核,则取通用内核信息表中寻找一个空闲的通用内核,根据其编号发送控制信号,为其分配计算任务;如果在两张表中均为找到空闲的内核,则将此任务添加到一个等待队列中,并添加一些必要的信息,一旦有一个可计算此任务的空闲内核,则将其分配给它进行计算。

当然,确定专用内核的位置及其是否空闲可以有多种方式,上述确定专用内核的位置及其是否空闲的方式仅是作为示例说明。每一专用内核133可以独立完成一种神经网络运算,例如脉冲神经网络(snn)运算等指定的神经网络运算,并将运算结果写回到其对应连接的高速暂存存储器121中,控制该高速暂存存储器121将运算结果写回到存储器11。

通用内核132可以独立完成超过专用内核所能支持的运算规模的或者所有专用内核133都不支持的神经网络运算,并将运算结果写回到其对应连接的高速暂存存储器121中,控制该高速暂存存储器121将运算结果写回到存储器11。

本公开的一个实施例提出了一种异构多核神经网络处理器,参见图5b,包括:存储器21、共享高速暂存存储器22和异构内核23。

存储器21,用于存储神经网络运算的数据和指令,数据包括偏置、权值、输入数据、输出数据、和神经网络模型的类型和参数,指令包括神经网络运算对应的各种指令。存储器中存储的数据和指令通过共享高速暂存存储器22传送到异构内核23中。

共享高速暂存存储器22,通过存储器总线与存储器21相连,通过共享高速暂存存储器总线与异构内核23进行连接,实现异构内核23与共享高速暂存存储器22之间、共享高速暂存存储器22与存储器21之间的数据交换。

当异构内核23所需的神经网络运算数据或指令未存储在共享高速暂存存储器22中时,共享高速暂存存储器22先通过存储器总线从存储器21中读取所需的数据或指令,然后将其通过高速暂存存储器总线送入到异构内核23中。

异构内核23,包括一逻辑控制内核231、多个通用内核232以及多个专用内核233,逻辑控制内核231、通用内核232以及专用内核233均通过高速暂存存储器总线与共享高速暂存存储器22连接。

异构内核23用以从共享高速暂存存储器22中读取神经网络运算数据和指令,完成神经网络运算,并将运算结果送回到高速共享缓存22,控制共享高速暂存存储器22将运算结果写回到存储器21。

另外当逻辑控制内核231与通用内核232之间、逻辑控制内核231与专用内核233之间、通用内核232之间以及专用内核233之间需要进行数据传输时,发送数据的内核可以将数据通过共享高速暂存存储器总线先传输到共享高速暂存存储器22,然后再将数据传输到接收数据的内核,而不需要经过存储器21。

对于神经网络运算来说,其神经网络模型一般包括多个神经网络层,每个神经网络层利用上一神经网络层的运算结果进行相应的运算,其运算结果输出给下一神经网络层,最后一个神经网络层的运算结果作为整个神经网络运算的结果。在本实施例异构多核神经网络处理器中,通用内核232和专用内核233均可以执行一个神经网络层的运算,利用逻辑控制内核231、通用内核232以及专用内核233共同完成神经网络运算,以下为了描述方便,将神经网络层简称为层。

其中,每一专用内核233可以独立执行一层运算,例如神经网络层的卷积运算、全连接层、拼接运算、对位加/乘运算、relu运算、池化运算、batchnorm运算等,且神经网络运算层的规模不能过大,即不能超出对应的专用内核的所能支持的神经网络运算层的规模,也就是说专用内核运算对层的神经元和突触的数量有限制,在层运算结束后,将运算结果写回到共享高速暂存存储器22中。

通用内核232用于执行超过专用内核233所能支持的运算规模的或者所有专用内核都不支持的层运算,并将运算结果写回到共享高速暂存存储器22中,控制共享高速暂存存储器22将运算结果写回到存储器21。

进一步地,专用内核233和通用内核232将运算结果写回到存储器21后,逻辑控制内核231会向执行下一层运算的专用内核或通用内核发送开始运算信号,通知执行下一层运算的专用内核或通用内核开始运算。

更进一步的,专用内核233和通用内核232在接收到执行上一层运算的专用内核或通用内核发送的开始运算信号,且当前无正在进行的层运算时开始运算,若当前正在进行层运算,则将当前层运算完成,并将运算结果写回到共享高速暂存存储器22中后开始运算。

逻辑控制内核231从共享高速暂存存储器22中读入神经网络运算数据,针对其中的神经网络模型的类型和参数,对神经网络模型的每个层进行解析,对于每一层,判断是否存在支持该层运算且能完成该层运算规模的专用内核233,如果存在,则将该层的运算交由对应的专用内核233运算,如果不存在,则将该层的运算交由通用内核232进行运算。逻辑控制内核231还设置通用内核232和专用内核233进行层运算所需的数据和指令的对应地址,通用内核232和专用内核233读取对应地址的数据和指令,执行层运算。

对于执行第一层运算的专用内核233和通用内核232,逻辑控制内核231会在运算开始时对该专用内核233或通用内核232发送开始运算信号,而在神经网络运算结束后,执行最后一层运算的专用内核233或通用内核232会对逻辑控制内核231发送开始运算信号,逻辑控制内核231在接收到开始运算信号后,控制共享高速暂存存储器22将运算结果写回到存储器21中。

本公开的一个实施例提供了一种利用第一实施例所述的异构多核神经网络处理器进行神经网络运算的方法,参见图5c,步骤如下:

步骤s5-11:异构内核13中的逻辑控制内核131通过非共享高速暂存存储器12从存储器11中读取神经网络运算的数据和指令;

步骤s5-12:异构内核13中的逻辑控制内核131根据数据中的神经网络模型的类型和参数,判断是否存在符合条件的专用内核,符合条件是指该专用内核支持该神经网络运算且能完成该神经网络运算规模(规模限制可以是专用内核固有的,此时可以询问内核设计厂家;也可以是人为规定的(比如通过实验发现,超过一定规模,通用内核更有效),在配置cam时可以设定规模限制)。如果专用内核m符合条件,则专用内核m作为目标内核,并执行步骤s5-13,否则执行步骤s5-15,其中,m为专用内核编号,1≤m≤m,m为专用内核数量。

步骤s5-13:异构内核13中的逻辑控制内核131向目标内核发送信号,激活该目标内核,同时将所要进行的神经网络运算的数据和指令对应的地址发送到该目标内核。

步骤s5-14:目标内核根据获取的地址通过非共享高速暂存存储器12从存储器11中获取神经网络运算的数据和指令,进行神经网络运算,然后将运算结果通过非共享高速暂存存储器12输出到存储器11中,运算完成。

进一步的,接上述步骤s5-12,如果不存在符合条件的专用内核,则接下来执行步骤s5-15至s5-16。

步骤s5-15:异构内核13中的逻辑控制内核131向通用内核132发送信号,激活通用内核132,同时将所要进行的神经网络运算的数据和指令对应的地址发送到通用内核132。

步骤s5-16:通用内核132根据获取的地址通过非共享高速暂存存储器12从存储器11中获取神经网络运算的数据和指令,进行神经网络运算,然后将运算结果通过非共享高速暂存存储器12输出到存储器中11,运算完成。

本公开的一个实施例提供了一种利用第二实施例所述的异构多核神经网络处理器进行神经网络运算的方法,参见图5d,步骤如下:

步骤s5-21:异构内核23中的逻辑控制内核231通过共享高速暂存存储器22从存储器21中读取神经网络运算的数据和指令。

步骤s5-22:异构内核23中的逻辑控制内核231对数据中的神经网络模型的类型和参数进行解析,对于神经网络模型中第1到i层,分别判断是否存在符合条件的专用内核,i为神经网络模型的层数,符合条件是指该专用内核支持该层运算且能完成该层运算规模,并为每一层运算分配对应的通用内核或专用内核。

对于神经网络模型第i层运算,1≤i≤i,若专用内核m符合条件,则选择专用内核m执行神经网络模型第i层运算,m为专用内核编号,1≤m≤m,m为专用内核数量。如果没有专用内核符合条件,则选择通用内核m+n执行神经网络模型第i层运算,m+n为通用内核的编号,1≤n≤n,n为通用内核数量,其中将专用内核233和通用内核232统一编号(即专用内核和通用内核一起进行编号,例如x个专用内核,y个通用内核,则可以从1开始编号,编至x+y,每个专用内核、通用内核对应1至x+y中的一个编号;当然也可以专用内核和通用内核单独分别编号,例如x个专用内核,y个通用内核,则专用内核可以从1开始编号,编至x,通用内核可以从1开始编号,编至y,每个专用内核、通用内核对应一个编号),此时专用内核可能与通用内核编号相同,但只是逻辑编号相同,可以根据其物理地址来寻址,最后得到与神经网络模型第1到i层运算对应的内核序列。即该内核序列共有1个元素,每一元素为一专用内核或通用内核,依序对应神经网络模型第1到i层运算。例如内核序列1a,2b,...,il,其中1、2、i表示神经网络层的编号,a、b、1表示专用内核或通用内核的编号。

步骤s5-23:异构内核23中的逻辑控制内核231将所要进行的层运算的数据和指令对应的地址发送到执行该层运算的专用内核或通用内核,并向执行该层运算的专用内核或通用内核发送内核序列中下一个专用内核或通用内核的编号,其中向执行最后一层运算的专用内核或通用内核发送的是逻辑控制内核的编号。

步骤s5-24:异构内核23中的逻辑控制内核231向内核序列中第一个内核发送开始运算信号。第一专用内核233或通用内核232在接收到开始运算信号之后,若当前存在未完成的运算,则继续完成运算,然后,继续从数据和指令对应的地址读取数据和指令,进行当前层运算。

步骤s5-25:第一专用内核233或通用内核232在完成当前层运算之后,将运算结果传送到共享高速暂存存储器22的指定地址,同时,向内核序列中第二个内核发送开始运算信号。

步骤s5-26:以此类推,内核序列中每一内核接收到开始运算信号之后,若当前存在未完成的运算,则继续完成运算,然后,继续从数据和指令对应的地址读取数据和指令,进行其对应的层运算,将运算结果传送到共享高速暂存存储器22的指定地址,同时,向内核序列中下一个内核发送开始运算信号。其中,内核序列最后一个内核是向逻辑控制内核231发送开始运算信号。

步骤s5-27:逻辑控制内核231接收到开始运算信号后,控制共享高速暂存存储器22将各个神经网络层的运算结果写回到存储器21中,运算完成。

如图5e所示,本实施例是对上述第一实施例的进一步扩展。实施例一(图1)高速暂存存储器121是每个核专用的,专用内核1只能访问高速暂存存储器3,而不能访问其它高速暂存存储器,其它内核也是一样,因此121构成的整体12就具有非共享的性质。但是,如果内核j要使用内核i(i≠j)的计算结果(此结果最初存放在内核i对应的高速暂存存储器中),内核i就必须先把此结果从高速暂存存储器写入存储器11,然后内核j还要从存储器11读入其可以访问的高速暂存存储器,这个过程后,内核j才能使用这一结果。为使这一过程更加便捷,在此基础上增加一个n×n的数据交换网络34,比如可以用crossbar实现,这样每一个内核(331或332或333)均可以访问所有高速暂存存储器(321)。此时32就具有了共享性质。

采用本实施例(对应图5e)的装置进行神经网络运算的方法的如下:

步骤s5-31:异构内核33中的逻辑控制内核331通过高速暂存存储器32从存储器31中读取神经网络运算的数据和指令;

步骤s5-32:异构内核33中的逻辑控制内核331根据数据中的神经网络模型的类型和参数,判断是否存在符合条件的专用内核,符合条件是指该专用内核支持该神经网络运算且能完成该神经网络运算规模。如果专用内核m符合条件,则专用内核m作为目标内核,并执行步骤s5-33,否则执行步骤s5-35,其中,m为专用内核编号。

步骤s5-33:异构内核33中的逻辑控制内核331向目标内核发送信号,激活该目标内核,同时将所要进行的神经网络运算的数据和指令对应的地址发送到该目标内核。

步骤s5-34:目标内核根据获取的地址(从高速暂存存储器32中)获取神经网络运算的数据和指令,进行神经网络运算,然后将运算结果存入高速暂存存储器32中,运算完成。

步骤s5-35:异构内核33中的逻辑控制内核331向通用内核332发送信号,激活通用内核332,同时将所要进行的神经网络运算的数据和指令对应的地址发送到通用内核332。

步骤s5-36:通用内核332根据获取的地址(从高速暂存存储器32中)获取神经网络运算的数据和指令,进行神经网络运算,然后将运算结果存入高速暂存存储器32中,运算完成。

进一步,可以对存储器与高速暂存存储器之间的连接方式进行更改。由此产生新的实施例,如图5f所示。其相对于图5e所述实施例的差别在于存储器41与高速暂存存储器42间的连接方式。原先采用总线连接,在多个高速暂存存储器321写存储器31时,要排队,效率不高(参见图5e)。现在将这里的结构抽象为一个1输入n输出的数据交换网络,可以使用多种多样的拓扑结构来实现这个功能,比如星型结构(存储器41与n个高速暂存存储器421均有专门的通路连接)、树状结构(存储器41在树根位置,高速暂存存储器421在树叶位置)等。

需要说明的是,本公开中对逻辑控制内核的数量、专用内核的数量、通用内核的数量、共享或非共享高速暂存存储器的数量、存储器的数量均不作限制,可根据神经网络运算的具体要求适当调整。

至此,已经结合附图对本公开实施例进行了详细描述。依据以上描述,本领域技术人员应当对本公开的一种异构多核神经网络处理器和神经网络运算方法有了清楚的认识。

在一些实施例里,本公开还提供了一种芯片,其包括了上述运算装置。

在一些实施例里,本公开还提供了一种芯片封装结构,其包括了上述芯片。

在一些实施例里,本公开还提供了一种板卡,其包括了上述芯片封装结构。

在一些实施例里,本公开还提供了一种电子设备,其包括了上述板卡。

电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。

所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:read-onlymemory,简称:rom)、随机存取器(英文:randomaccessmemory,简称:ram)、磁盘或光盘等。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

需要说明的是,在附图或说明书正文中,未绘示或描述的实现方式,均为所属技术领域中普通技术人员所知的形式,并未进行详细说明。此外,上述对各元件和方法的定义并不仅限于实施例中提到的各种具体结构、形状或方式,本领域普通技术人员可对其进行简单地更改或替换,例如:

本公开的控制模块并不限定于实施例的具体组成结构,所属技术领域的技术人员熟知的可实现存储模块和运算单元之间数据、运算指令交互的控制模块,均可用于实现本公开。

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

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