卷积扩展指令的执行方法以及相关产品与流程

文档序号:17665502发布日期:2019-05-15 22:40阅读:126来源:国知局
卷积扩展指令的执行方法以及相关产品与流程

本披露涉及神经网络技术领域,具体涉及一种卷积扩展指令的实现方法以及相关产品。



背景技术:

卷积神经网络是近年来广泛应用于模式识别、图像处理等领域的一种高效识别算法,它具有结构简单、训练参数少和适应性强、平移、旋转、缩放等特点。由于cnn/dnn的特征检测层通过训练数据进行学习,所以在使用cnn/dnn时,避免了显示的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。

在已有的计算机领域应用中,与卷积运算相关的应用十分普遍。本发明专注于卷积神经网络,目前可以执行此种运算的主流装置如下:

在现有技术中,一种进行卷积神经网络运算的已知方案是使用通用处理器,该方法通过通用寄存器堆和通用功能部件来执行通用指令,从而执行卷积神经网络运算。然而,该方法的缺点之一是单个通用处理器多用于标量计算,在进行卷积神经网络运算时运算性能较低。而使用多个通用处理器并行执行时,通用处理器之间的相互通讯又有可能成为性能瓶颈。

在另一种现有技术中,使用图形处理器(gpu)来进行向量计算,其中,通过使用通用寄存器堆和通用流处理单元执行通用simd指令来进行卷积神经网络运算。然而,上述方案中,gpu片上缓存太小,在进行大规模卷积神经网络运算时需要不断进行片外数据搬运,片外带宽成为了主要性能瓶颈。

披露内容

本披露实施例提供了一种卷积扩展指令的实现方法以及卷积扩展指令及相关产品,可实现提升性能瓶颈,降低功耗的优点。

第一方面,本披露实施例提供一种卷积扩展指令的执行方法,所述方法包括如下步骤:

计算装置从存储器读取所述卷积扩展指令获取所述卷积扩展指令的输入数据、卷积核以及变换op操作;

所述卷积扩展指令包括:操作码和操作域,所述操作码包括:所述卷积扩展指令的标识;所述操作域包括:卷积子域和op子域,所述卷积子域包括:存储输入数据的地址和卷积核的地址,所述op子域包括:所述op操作的标识码;

计算装置依据所述op操作的标识码确定所述op操作以及所述op操作的对象,所述计算装置依据所述op操作的对象对所述输入数据和卷积核执行op操作和卷积运算得到运算结果。

可选的,所述op操作包括:转置操作、共轭操作、blas变换、reshape变换或pad变换。

可选的,所述计算装置依据所述op操作的对象对所述输入数据和卷积核执行op操作和卷积运算得到所述运算结果,包括:

如所述op操作的对象包括输入数据和卷积核,所述计算装置将所述输入数据执行op操作得到变换输入数据,将卷积核执行op操作得到变换卷积核,将变换输入数据和变换卷积核执行卷积运算得到所述运算结果;

如所述op操作的对象包括中间结果,所述中间结果为所述输入数据和卷积核的卷积运算结果,所述计算装置将所述输入数据和卷积核执行卷积运算得到中间结果,将所述中间结果执行op操作得到所述运算结果;

如所述op操作的对象包括中间结果、输入数据和卷积核,所述计算装置将所述输入数据执行op操作得到变换输入数据,将卷积核执行op操作得到变换卷积核,将变换输入数据和变换卷积核执行卷积运算得到变换中间结果,将所述变换中间结果执行op变换得到所述运算结果。

可选的,所述操作域还包括:激活子域包括,所述激活子域包括:激活操作的标识码或所述激活操作的插值表地址,所述方法还包括:

计算装置通过所述激活子域对所述运算结果执行激活操作得到所述指令的最终结果。

可选的,计算装置通过所述激活子域对所述运算结果执行激活操作得到所述指令的最终结果,包括:

如所述激活子域包括:激活操作的插值表地址,计算装置提取所述激活操作的插值表地址对应的插值表,将所述运算结果与所述插值表执行激活运算得到所述指令的最终结果;

如所述激活子域包括:激活操作的标识码,计算装置识别所述激活操作的标识码确定所述激活操作,读取所述激活操作的插值表,将所述插值表与所述运算结果执行激活运算得到所述指令的最终结果。

第二方面,提供一种计算装置,所述计算装置包括:存储器、运算单元、互联模块、运算单元、控制器单元和数据访问单元;

其中,所述运算单元,包括:加法运算器、乘法运算器和op变换器;

控制器单元,用于从存储器读取所述卷积扩展指令获取所述卷积扩展指令的输入数据、卷积核以及变换op操作;

所述卷积扩展指令包括:操作码和操作域,所述操作码包括:所述卷积扩展指令的标识;所述操作域包括:卷积子域和op子域,所述卷积子域包括:存储输入数据的地址和卷积核的地址,所述op子域包括:所述op操作的标识码;

数据访问单元,用于获取所述输入数据的地址和卷积核的地址对应的输入数据以及卷积核;

所述控制器单元,用于依据所述op操作的标识码确定所述op操作以及所述op操作的对象;

所述运算单元,用于依据所述op操作的对象对所述输入数据和卷积核执行op操作和卷积运算得到运算结果。

可选的,所述op操作包括:转置操作、共轭操作、blas变换、reshape变换或pad变换。

可选的,所述运算单元,具体用于如所述op操作的对象包括输入数据和卷积核,所述计算装置将所述输入数据执行op操作得到变换输入数据,将卷积核执行op操作得到变换卷积核,将变换输入数据和变换卷积核执行卷积运算得到所述运算结果;

如所述op操作的对象包括中间结果,所述中间结果为所述输入数据和卷积核的卷积运算结果,所述计算装置将所述输入数据和卷积核执行卷积运算得到中间结果,将所述中间结果执行op操作得到所述运算结果;

如所述op操作的对象包括中间结果、输入数据和卷积核,所述计算装置将所述输入数据执行op操作得到变换输入数据,将卷积核执行op操作得到变换卷积核,将变换输入数据和变换卷积核执行卷积运算得到变换中间结果,将所述变换中间结果执行op变换得到所述运算结果。

可选的,所述操作域还包括:激活子域,所述激活子域包括:激活操作的标识码或所述激活操作的插值表地址;

所述运算单元,用于通过所述激活子域对所述运算结果执行激活操作得到所述指令的最终结果。

可选的,所述运算单元,具体用于如所述激活子域包括:激活操作的插值表地址,计算装置提取所述激活操作的插值表地址对应的插值表,将所述运算结果与所述插值表执行激活运算得到所述指令的最终结果;

如所述激活子域包括:激活操作的标识码,计算装置识别所述激活操作的标识码确定所述激活操作,读取所述激活操作的插值表,将所述插值表与所述运算结果执行激活运算得到所述指令的最终结果。

第三方面,提供一种计算机可读存储介质,其特征在于,其存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行第一方面提供的方法。

第四方面,提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行第一方面所述的方法。

第五方面,提供一种芯片,所述芯片包括第二方面提供的计算装置。

第六方面,提供一种芯片封装结构,所述芯片封装结构包括第五方面提供的芯片。

第七方面,提供一种板卡,所述板卡包括第六方面提供的芯片封装结构。

第八方面,提供一种电子装置,所述电子装置包括第七方面提供的一种板卡。

可以看出,通过本披露实施例,其具有单一指令实现卷积运算以及op操作的优点,所以其具有减少计算时间,节省功耗的优点。

附图说明

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

图1是本披露提供的一种计算设备的结构示意图。

图2a是本披露实施例提供的互联模块的示意框图。

图2b是本披露实施例提供的用于执行卷积神经网络正向运算的装置中主运算模块的示意框图。

图2c是本披露实施例提供的用于执行卷积神经网络正向运算的装置中从运算模块的示意框图。

图3是本披露实施例提供的卷积神经网络运算装置执行卷积变换指令的流程图。

图3a是本披露实施例提供的一种卷积核的示意图。

图3b是本披露实施例提供的一种输入数据的示意图。

图3c是本披露实施例提供的一种卷积核的移动的示意图。

图3d是本披露实施例提供的另一种卷积核的移动的示意图。

图3e是本披露实施例提供的又一种卷积核的移动的示意图。

具体实施方式

下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。

本披露的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本披露的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

下面以卷积运算指令为例来说明卷积指令运算的方法,该卷积指令可以应用在神经网络中,当然在实际应用中,也可以应用到其他的计算场景内,本披露并不限制上述卷积指令具体的实现场景,该卷积运算指令也可以称为卷积神经网络。对于卷积指令来说,其实际需要执行的公式可以为s=s(∑wxi+b)其中,即将卷积核w(可包括多个数据)乘以输入数据xi,

进行求和,然后可以根据实际的计算加上偏置b得到初步计算结果h,然后初步计算结果还可做激活运算s(h),以得到最终的输出结果s。依据该公式即可以得到该计算拓扑结构为,乘法运算器-加法运算器-激活运算器。

对于现有的卷积指令,如果需要执行激活运算,其需要通过多个指令来执行,以上述公式为例,首先,其需要通过卷积运算指令得到初步计算结果h,然后在通过卷积激活指令对该h执行激活运算,即需要至少两个卷积指令来得到上述公式的结果s,此种方式首先对于卷积指令的数量来说需要多个数量,另外,对于芯片或计算装置其由于需要重复调用数据,所以其需要更多的计算开销,并且功耗也更高。

本披露提供了一种计算装置,该计算装置如图1所示,包括:存储介质111、寄存器单元112、互联模块113、运算单元114、控制器单元115和数据访问单元116;

其中,运算单元114可以包括:乘法计算器、加法运算器和op变换器,当然该运算单元还可以包括:比较器、激活运算器中至少一种。

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

寄存器单元112,用于存储运算指令、输入数据、卷积核在存储介质的地址、卷积指令对应的计算拓扑结构。

存储介质111可以为片外存储器,当然在实际应用中,也可以为片内存储器,用于存储输入数据、卷积核,该输入数据、卷积核具体可以为向量、矩阵或多维数据。

控制器单元115,用于从寄存器单元112内提取运算指令(具体可以为卷积指令)、该运算指令对应的操作域以及该运算指令对应的第一计算拓扑结构,将该运算指令译码成执行指令,该执行指令用于控制运算单元执行运算操作,将该操作域传输至数据访问单元116,将该计算拓扑结构传输至互联模块113。

数据访问单元116,用于从存储介质111中提取该操作域对应的输入数据、卷积核,并将该输入数据、卷积核传输至运算单元114。

互联模块113、用于依据控制运算单元114中计算器的连接关系形成第一计算拓扑结构。

运算单元114,用于按第一计算拓扑结构以及该执行指令调用计算器对该数据块执行运算操作得到运算结果,将该运算结果传输至数据访问单元存储在存储介质内。

该运算指令可以如图1所示,包括:操作域以及操作码,以卷积运算指令为例,操作域可以包括:卷积子域和激活子域,如表1所示,其中,寄存器号(可选的,寄存器也可以是寄存器堆)0、寄存器号(可选的,寄存器堆)1、寄存器号(可选的,寄存器堆)2、寄存器号(可选的,寄存器堆)3、寄存器号4,寄存器号0、寄存器号1、寄存器号2、寄存器号3可以为卷积子域,具体的,寄存器号4可以为激活子域。

表1:

上述扩展命令可以为conv_op时,该扩展指令的操作可以包括op域。

该运算指令还可以如表2所示,包括:操作码conv_ac_op、寄存器号(可选的,寄存器堆)0、寄存器号(可选的,寄存器堆)1、寄存器号(可选的,寄存器堆)2、寄存器号(可选的,寄存器堆)3、寄存器号(可选的,寄存器堆)4、辅助操作码,寄存器号0、寄存器号1、寄存器号2、寄存器号3可以为卷积子域,寄存器号4可以为激活子域,op操作码可以为op子域,具体的,如表2所示。

表2:

当为激活函数插值表地址时,对于计算装置,其可以节省激活计算器的设置,并且对于激活函数插值表地址的设置还可以节省译码器解析开销,降低计算量,节省芯片功耗和面积。下面详细说明其具体的实现方式,如conv_activate包含激活函数插值表地址,则conv_activate指令在执行完卷积操作以后得到卷积操作的结果(即中间结果),然后提取该激活函数插值表地址对应的插值表对该卷积操作的结果执行激活运算直接得到结果。此方式只需要读取一次conv_activate指令,并且执行也无需单独的激活计算器执行,所以其具有解析指令开销小,降低计算量,节省硬件配置的优点,如果conv_activate包含激活函数操作码,则conv_activate指令在执行完卷积操作以后得到卷积操作的结果,解析该激活函数操作码得到对应的激活函数,然后将该激活函数发送给激活计算器,激活计算器依据该激活函数提取插值表对该卷积操作的结果执行激活运算,其需要解析多次指令,另外需要单独的激活计算器来执行激活运算。

上述运算指令可以包括卷积指令集,该指令集包含有不同功能的卷积神经网络conv指令、conv_activate指令、conv_op以及config指令、io指令、nop指令、jump指令、move指令。

如表1和表2所示的辅助操作码具体可以为包含有计算操作以及计算器连接关系。以op操作为例,对于op操作有多种,假设1表示转置,0表示共轭,假设该辅助操作码可以为4bit,在实际应用中也可以为其他的比特数量,例如6bit、8bit等等,对于conv_op的辅助操作码,如其为1111,则可以表示为,转置操作,需要执行转置操作的可以包括:输入数据、卷积核、初步计算结果,这里假设1111的第2个bit表示输入数据是否执行op操作,第3个bit表示卷积核是否执行op操作,第4个bit表示初步计算结果是否执行op操作,假设1可以为执行op操作,假设0可以为不执行op操作。当然在实际应用中也可以是其他的操作。

在一种实施例中,conv_activate指令包括:

卷积激活指令,根据该指令,装置分别从存储器(优选的,为高速暂存存储器)的指定地址取出设定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,然后将输出结果做激活函数运算;上述设定大小可以由厂家或用户自行定义。

卷积激活指令具体可以包括:

卷积神经网络maxout指令,具体可以包括:装置分别从存储器(优选的,为高速暂存存储器)的指定地址取出设定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,然后将输出结果做maxout激活;上述设定大小可以由厂家或用户自行定义。对于卷积神经网络maxout指令的具体表现形式可以为,在conv_activate指令的操作域的寄存器号4中添加maxout的插值表或maxout操作码。

对于maxout,其数学表达式可以为:

wherezij=xtwij+bij

其中,hi表示maxout的输出结果,wij表示卷积核,bij表示偏置,xt表示输入数据的转置。

卷积神经网络prelu指令,用于根据该指令对计算装置的输出结果做prelu激活,装置分别从高速暂存存储器的指定地址取出设定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,然后将输出结果做prelu激活;对于卷积神经网络prelu指令的具体表现形式可以为,在conv_activate指令的操作域的寄存器号4中添加prelu的插值表或prelu操作码。

卷积神经网络rrelu指令,用于根据该指令对计算装置的输出结果做rrelu激活,装置分别从高速暂存存储器的指定地址取出设定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,然后将输出结果做rrelu激活;对于卷积神经网络rrelu指令的具体表现形式可以为,在conv_activate指令的操作域的寄存器号4中添加rrelu的插值表或rrelu操作码。

卷积神经网络leakyrelu指令,用于根据该指令对计算装置的输出结果做leakyrelu激活,装置分别从高速暂存存储器的指定地址取出设定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,然后将输出结果做leakyrelu激活;对于卷积神经网络leakyrelu指令的具体表现形式可以为,在conv_activate指令的操作域的寄存器号4中添加rrelu的插值表或leakyrelu操作码。

对于relu,其数学表达式为:f(x)=max(0,x);

leakyrelu、rrelu、prelu,其数学表达式可以为:

f(x)=αx(x<0),f(x)=x(x≥0);

对于上述数学表达式,针对不同的α取值对应leakyrelu、rrelu或prelu,当α>0时,为prelu;当α<0时,为leakyrelu,当α为高斯分布的随机数时,为rrelu。

conv_activate指令也可以包括其他的运算指令,进行非线性激活或线性激活操作。

在一种实施例中,conv_op指令包括:

卷积变换指令,根据该指令,装置分别从存储器(优选的,为高速暂存存储器)的指定地址取出设定大小的输入数据和卷积核,在op(共轭或转置)运算部件中对输入数据和/或卷积核做变换操作,然后在卷积运算部件中做卷积操作,然后将输出结果做变换;上述设定大小、op类型可以由厂家或用户自行定义。

卷积变换指令具体包括:

卷积神经网络reshape指令,用于根据该指令对计算装置的输出结果做reshape操作,装置分别从存储器(优选的,为高速暂存存储器)的指定地址取出设定大小的输入数据和卷积核,在op运算部件中做reshape(维度重整,如nchw->chwn等)操作,然后在卷积运算部件中做卷积操作,然后将输出结果做reshape操作;上述设定大小可以由厂家或用户自行定义。

所谓维度重整,指的是卷积运算的输入数据和卷积核的四个维度进行重整。

图3a所示的m个卷积核,每个卷积核为5*3*3的三维数据块,那么其运算窗口也为5*3*3的三维数据块,对于如图3a所示的m个卷积核中的kh以及kw表示其kh对应的维度为输入数据的h维度,该kw表示的对应的维度为输入数据的w维度。图3c、3d、3e中灰色部分方块是每一次滑动运算窗口进行运算使用的数据,其滑动的方向可以是以h为滑动方向以后在以w为滑动方向或以w为滑动方向完成以后在以h为滑动方向。具体地,对于卷积来说是,每一个滑动窗口处的运算是图中灰色部分方块表示的数据块与“图3a卷积1-卷积核”表示的m个卷积核数据块分别进行内积运算,卷积将对每一个滑动窗口位置对应每一个卷积核输出一个数值,即对于每个滑动窗口具有m个输出数值;所述“图3a-图3e”中均使用一个方块表示一个数值,也可以称为一个权值;示意图中所使用的数字均仅限举例说明,实际情况中维度数据可能是任意数值(包括某个维度为1的情况,这种情况下,所述四维数据块自动成为三维数据块,例如,当同时计算的样本数量为1的情况下,输入数据就是一个三维数据块;在例如,当卷积核数量为1的情况下,卷积和数据为一个三维数据块)。使用所述芯片装置进行输入数据b和卷积核a之间的卷积运算;

对于一个卷积层,其权值(所有的卷积核)如“图3a卷积1-卷积核”所示,记其卷积核的数量为m,每个卷积核由c个kh行kw列的矩阵组成,所以卷积层的权值可以表示为一个四个维度分别是m,c,kh,kw的四维数据块;卷积层的输入数据为四维数据块,由n个三维数据块组成,每个所述三维数据块由c个h行w列的特征矩阵组成(即四个维度分别是n,c,h,w的数据块);

卷积神经网络pad指令,用于根据该指令对计算装置的输出结果做pad操作,装置分别从存储器(优选的,为高速暂存存储器)的指定地址取出设定大小的输入数据和卷积核,在op运算部件中对卷积核做pad(外围扩增)操作,然后在卷积运算部件中做卷积操作;上述设定大小可以由厂家或用户自行定义。对于卷积神经网络pad指令的具体表现形式可以为,在conv_op或conv_ac_op指令的操作域的辅助操作码中添加pad操作码。

外围扩增指的是对于卷积核的外围多加了n圈数据,n是正整数。n可以是1.这时候这个指令格式不变。圈的意思是原先kh*kw大小的二维数据块,通过外围补数扩大为(kh+2n)*(kw+2n).

n如果大于1,要么指令格式增加一个操作域(寄存器5),来存储这个n的数值,即在conv_op的操作域增加一个寄存器5,该寄存器5用于存储n的数值。如果指令格式不变,执行指令的方法改变,在执行conv指令之前,利用config指令来调用n的数值,在执行conv指令之前执行pad操作。

另外数据可以全为0,这是最基本的pad操作。

可选的,数据可以是0和1随机分布的。这种情况下,操作码得改成conv-pad-random。方法得多一步为:使用随机数生成器生成pad需要填充的数,共(kh+2n)*(kw+2n)–kh*hw个数据.

卷积神经网络crop指令,用于根据该指令对计算装置的输出结果做crop操作,装置分别从存储器(优选的,为高速暂存存储器)的指定地址取出设定大小的输入数据和卷积核,在op运算部件中对输入做crop(尺寸裁剪),然后在卷积运算部件中做卷积操作,上述设定大小可以由厂家或用户自行定义。

尺寸裁剪的定义是从原本h*w大小的二维数据块,截取出其中h1*w1大小的二维数据块,其中h1和w1小于等于h和w。

卷积神经网络dilate指令,用于根据该指令对计算装置的输出结果做dilate操作,装置分别从存储器(优选的,为高速暂存存储器)的指定地址取出设定大小的输入数据和卷积核,在op运算部件中对卷积核做dilate(内部插0)操作,然后在卷积运算部件中做卷积操作;上述设定大小可以由厂家或用户自行定义。

dilate(内部插0)的定义是:对于kh*kw大小的卷积核,在其内部(前面提到的pad是在外围)均匀或随机地插0或随机数,起到了对卷积核“稀释”的效果,这样做可以增强卷积核的特征提取效果。

conv_op指令也可以包括其他的变换指令,例如对输入、权值做blas变换等。

上述指令集包含有不同功能的卷积神经网络conv_ac_op指令以及config指令、io指令、nop指令、jump指令和move指令。

在一种实施例中,conv_ac_op可以通过辅助操作码的设置,实现conv、acticate和op操作的任意组合。

图2a示意性示出了互连模块113的一种实施方式:h树模块。互连模块113构成主运算模块5和多个从运算模块6之间的数据通路,是由多个节点构成的二叉树通路,每个节点将上游的数据同样地发给下游的两个节点,将下游的两个节点返回的数据进行合并,并返回给上游的节点。例如,在卷积神经网络开始计算阶段,主运算模块5内的神经元数据通过互连模块4发送给各个从运算模块6;当从运算模块6的计算过程完成后,当从运算模块的计算过程完成后,每个从运算模块输出的神经元的值会在互连模块中逐级拼成一个完整的由神经元组成的向量。举例说明,假设装置中共有n个从运算模块,则输入数据xi被发送到n个从运算模块,每个从运算模块将输入数据xi与该从运算模块相应的卷积核做卷积运算,得到一标量数据,各从运算模块的标量数据被互连模块4合并成一个含有n个元素的中间向量。假设卷积窗口总共遍历得到a*b个(x方向为a个,y方向为b个,x、y为三维正交坐标系的坐标轴)输入数据xi,则对a*b个xi执行上述卷积操作,得到的所有向量在主运算模块中合并得到a*b*n的三维中间结果。

图2b示出了根据本披露实施例的用于执行卷积神经网络正向运算的装置中主运算模块5的结构的示例框图。如图2c所示,主运算模块5包括第一运算单元51、第一数据依赖关系判定单元52和第一存储单元53。

其中,第一运算单元51包括向量加法单元511以及激活单元512。第一运算单元51接收来自控制器单元的控制信号,完成主运算模块5的各种运算功能,向量加法单元511用于实现卷积神经网络正向计算中的加偏置操作,该部件将偏置数据与所述中间结果对位相加得到偏置结果,激活运算单元512对偏置结果执行激活函数操作。所述偏置数据可以是从外部地址空间读入的,也可以是存储在本地的。

第一数据依赖关系判定单元52是第一运算单元51读写第一存储单元53的端口,保证第一存储单元53中数据的读写一致性。同时,第一数据依赖关系判定单元52也负责将从第一存储单元53读取的数据通过互连模块4发送给从运算模块,而从运算模块6的输出数据通过互连模块4直接发送给第一运算单元51。控制器单元2输出的指令发送给计算单元51和第一数据依赖关系判定单元52,来控制其行为。

存储单元53用于缓存主运算模块5在计算过程中用到的输入数据和输出数据。

图2c示出了根据本披露实施例的用于执行卷积神经网络正向运算的装置中从运算模块6的结构的示例框图。如图2a所示,每个从运算模块6包括第二运算单元61、数据依赖关系判定单元62、第二存储单元63和第三存储单元64。

第二运算单元61接收控制器单元2发出的控制信号并进行卷积运算。第二运算单元包括op变换单元808,向量乘单元611和累加单元612,分别负责卷积运算中的向量乘运算、累加运算以及op变换操作。

第二数据依赖关系判定单元62负责计算过程中对第二存储单元63的读写操作。第二数据依赖关系判定单元62执行读写操作之前会首先保证指令之间所用的数据不存在读写一致性冲突。例如,所有发往数据依赖关系单元62的控制信号都会被存入数据依赖关系单元62内部的指令队列里,在该队列中,读指令的读取数据的范围如果与队列位置靠前的写指令写数据的范围发生冲突,则该指令必须等到所依赖的写指令被执行后才能够执行。

第二存储单元63缓存该从运算模块6的输入数据和输出标量数据。

第三存储单元64缓存该从运算模块6在计算过程中需要的卷积核数据。

图3是本披露实施例提供的卷积神经网络运算装置执行卷积变换指令的流程图,如图3所示,执行卷积神经网络指令的过程包括,这里的卷积神经网络指令以:conv_ac_op为例,在实际应用中,也可以为其他的扩展指令,例如conv_activate或conv_op指令:如该扩展指令为conv_op指令时,只需要执行op操作即可,无需执行s9中对偏置数据执行激活操作,即如该扩展指令为conv_op指令时,该偏置数据即为最终的输出结果。如该扩展指令为conv_activate指令时,该运算装置无需op模块,步骤s7中也无需执行op变换。

在步骤s1,在寄存器单元112的首地址处预先存入一条io指令。

在步骤s2,运算开始,控制器单元115从寄存器单元112的首地址读取该条io指令,根据译出的控制信号,数据访问单元116从存储介质111读取相应的所有卷积神经网络运算指令,并将其缓存在寄存器单元112中。

在步骤s3,控制器单元115从寄存器单元11读入下一条io指令,根据译出的控制信号,数据访问单元116从存储介质111读取主运算模块5需要的所有数据(例如,包括输入数据、用于作快速的激活函数运算的插值表、用于配置运算器件参数的常数表、偏置数据等)至主运算模块5的第一存储单元53。

在步骤s4,控制器单元115从寄存器单元11读入下一条io指令,根据译出的控制信号,数据访问单元116从存储介质111读取从运算模块6需要的卷积核数据。

在步骤s5,控制器单元115从寄存器单元11读入下一条config指令,根据译出的控制信号,装置配置该层神经网络计算需要的各种常数。例如,第一运算单元51、第二运算单元61根据控制信号里的参数配置单元内部寄存器的值,所述参数包括例如激活函数需要的数据;以及op运算所需的各项常数,如pad的n、crop的h1和w1、reshape的维度顺序等。

在步骤s6,控制器单元115接着从寄存器单元11读入下一条conv_ac_op指令,根据译出的控制信号,主运算模块5首先通过互联模块113将卷积窗口内的输入数据发给各从运算模块6,保存至从运算模块6的第二存储单元63,之后,再依据指令移动卷积窗口。

在步骤s7,根据conv_ac_op指令译出的控制信号,从运算模块6的运算单元61从第三存储单元64读取卷积核,从第二存储单元63读取输入数据,op模块对该输入数据以及卷积核做op变化,然后从运算模块6的运算单元61执行输入数据(op变换)和卷积核(op变换)的卷积运算,将中间结果通过互联模块113返回。

在步骤s8,在互联模块113中,各从运算模块6返回的中间结果被逐级拼成完整的中间向量。

在步骤s9,主运算模块5得到互连模块4返回的中间向量,卷积窗口遍历所有输入数据,主运算模块将所有返回向量拼接成中间结果;(可选的)根据conv_ac_op指令译出的控制信号,从第一存储单元53读取偏置数据,与中间结果通过向量加单元511相加得到偏置结果,主运算模块5读取conv_ac_op寄存器号4内激活函数插值表地址对应的插值表,将偏置结果和插值表做激活运算得到最后的输出数据,并将最后的输出数据写回至第一存储单元53中。

在步骤s10,控制器单元115接着从指令存储单元读入下一条io指令,根据译出的控制信号,数据访问单元116将第一存储单元53中的输出数据存至外部地址空间指定地址,运算结束。

本披露实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任何一种卷积扩展指令的实现方法的部分或全部步骤。

本披露实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种卷积扩展指令的实现方法的部分或全部步骤。

本公开另一实施例,还公开了一种芯片,其包括了上述实施例的神经网络计算装置(如图1所示)。

本公开的另一实施例,还公开了一种芯片封装结构,其包括了上述芯片。

本公开的另一实施例,还公开了一种板卡,其包括了上述芯片封装结构。

本公开的另一实施例,还公开了一种电子装置,其包括了上述板卡。

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

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

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

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

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

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

另外,在本披露各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。

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