本发明涉及一种神经网络maxout层运算装置和方法,用于根据maxout层运算指令执行maxout层运算。
背景技术:
当前计算机领域有越来越多的算法涉及到maxout层运算,以人工神经网络算法为例,多种神经网络算法中都含有大量的maxout层运算。在神经网络中,经常需要对于输入数据进行剪枝,对于一个maxout层输入数据,其数据为三维数据,分别为横坐标、纵坐标以及特征维度的数据,maxout运算的剪枝策略为在特征维度上压缩数据,即fj=max({fi|aj≤i≤bj}),其中fi为一个点对应的特征维度上的各个值,aj和bj标定出在该特征维度上选取数据的范围,最后得到值fj,即将同一个点的特征维度按预定方式分组取得每组中的最大值,作为这一点的新的一系列的特征,这样,可以在神经网络中获得不同特征层之间的相关信息,可以显著提升神经网络的识别能力。因此,maxout层运算成为目前各种计算装置在设计之初都需要考虑的一个重要问题。
在现有技术中,一种进行maxout层运算的已知方案是使用通用处理器,该方法通过通用寄存器堆和通用功能单元来执行通用指令,从而执行maxout层运算。然而,该方法的缺点之一是单个通用处理器多用于标量计算,在进行maxout层运算时运算性能较低。而使用多个通用处理器并行执行时,通用处理器之间的相互通讯又有可能成为性能瓶颈。
在另一种现有技术中,使用图形处理器(gpu)来进行神经网络maxout层运算,其中,通过使用通用寄存器堆和通用流处理单元执行通用simd指令来进行maxout层运算。然而,上述方案中,gpu片上缓存太小,在进行大规模maxout层运算时需要不断进行片外数据搬运,片外带宽成为了主要性能瓶颈。
在另一种现有技术中,使用专门定制的maxout层运算装置来进行神经网络maxout层运算,其中,使用定制的寄存器堆和定制的处理单元进行maxout层运算。然而,目前已有的专用maxout层运算装置受限于寄存器堆,不能够灵活地支持不同长度的maxout层运算。
综上所述,现有的不管是片上多核通用处理器、片间互联通用处理器(单核或多核)、还是片间互联图形处理器都无法进行高效的maxout层运算,并且这些现有技术在处理maxout层运算问题时存在着代码量大,受限于片间通讯,片上缓存不够,支持的maxout层规模不够灵活等问题。
技术实现要素:
(一)要解决的技术问题
本发明的目的在于,提供一种maxout层运算装置,解决现有技术中存在的受限于片间通讯、片上缓存不够、支持的maxout层长度不够灵活等问题。
(二)技术方案
本发明提供一种maxout层运算装置,用于根据maxout层运算指令执行maxout层运算,其特征在于,包括连接到存储模块的maxout层运算模块,maxout层运算模块包括:寄存器单元,用于存储maxout层输入数据地址,maxout层输入数据地址为maxout层输入数据在存储模块中的存储地址;加载/存储(load/store)单元,根据maxout层运算指令对应的maxout层输入数据地址从存储模块获取相应的maxout层输入数据;剪枝单元,对按特征优先存放的maxout层输入数据在特征维度上进行压缩,得到剪枝数据;以及运算单元,根据maxout层运算指令对剪枝数据执行相应运算以得到maxout层运算结果。
可选地,该装置还包括所述存储模块。
可选地,所述maxout层运算模块还包括数据转置单元,将按纵坐标或横坐标优先存放的数据转置成按特征优先存放的转置数据。
可选地,该装置还包括指令处理模块,从指令存储设备获取maxout层运算指令并发送到maxout层运算模块。
可选地,所述指令处理模块包括:
取指单元,用于从所述指令存储设备中获取maxout层运算指令;
译码单元,用于对获取的maxout层运算指令进行译码;
存储队列,用于对译码后的maxout层运算指令进行顺序存储;
指令寄存器,存储maxout层运算指令所需的地址数据;
依赖关系处理单元;以及
指令队列,
其中,依赖关系处理单元在向maxout层运算模块提供maxout层运算指令前,判断该maxout层运算指令与之前的maxout层运算指令是否访问相同存储空间,若是,则指示指令队列存储该maxout层运算指令,待所述之前的maxout层运算指令执行完毕后,将该maxout层运算指令提供给所述maxout层运算模块;否则,指示指令队列直接将该maxout层运算指令提供给所述maxout层运算模块。
可选地,所述存储模块还用于存储所述maxout层运算结果。
可选地,该装置还包括输入输出模块,用于存储模块从外部存储设备读取入maxout层输入数据和向外部存储设备写maxout层运算结果。
可选地,所述存储模块为高速暂存存储器。
可选地,所述maxout层运算指令包括一操作码和至少五个操作域,其中,所述操作码用于指示该maxout层运算指令的功能,所述五个操作域分别表示输入数据的起始地址、输入数据的数据长度,输出数据的起始地址、输出数据的数据长度,以及做maxout层运算的特征选取范围。
可选地,所述maxout层运算装置为多流水级结构,其中,maxout层数据转置单元处于第一流水级,剪枝单元处于第二流水级,运算单元处于第三流水级。
本发明还提供了一种使用maxout层运算装置执行maxout层运算的方法,包括:
s1,取指单元取出maxout层运算指令,并将该maxout层运算指令送往译码单元;
s2,译码单元对maxout层运算指令译码,并将maxout层运算指令送往存储队列;
s3,从指令寄存器中获取maxout层运算指令所对应的指令寄存器里 的数据信息以填充maxout层运算指令,所述数据信息包括maxout层输入数据起始地址、maxout层输入数据长度、maxout层输入数据的特征层数目,maxout层输入数据的图像单个特征层大小,做maxout运算的特征层大小,maxout层输出数据起始地址,maxout层输出数据长度;
s4,在取得需要的数据信息后,该maxout层运算指令被送往依赖关系处理单元,依赖关系处理单元分析该指令与前面的尚未执行结束的指令在数据上是否访问相同存储空间,如果是,则该条maxout层运算指令在指令队列中等待至其与前面的未执行结束的指令在数据上不再访问相同地址空间然后被发射,否则发射该maxout层运算指令;
s5,maxout层运算指令被发射到maxout层运算模块,maxout层运算模块从存储模块中取出需要的maxout层输入数据并完成maxout层运算指令对应运算;以及
s6,运算完成后,将结果写回至存储模块的指定地址,同时依赖关系处理单元中的该指令被提交。
(三)有益效果
本发明提供的maxout层运算装置,将参与计算的maxout层输入输出数据暂存在存储模块,例如暂存在高速暂存存储器(scratchpadmemory)上,使得maxout层运算过程中可以更加灵活有效地支持不同宽度的数据,提升包含大量神经网络maxout层运算任务的执行性能,本发明采用的指令具有精简的格式,使得指令集使用方便、支持的maxout层长度灵活。
附图说明
图1是根据本发明实施例的maxout层运算装置的结构示意图。
图2是根据本发明实施例的指令集的格式示意图。
图3是根据本发明另一实施例的maxout层运算装置的结构示意图。
图4是根据本发明实施例的maxout层运算装置执行maxout层运算的流程图。
具体实施方式
根据结合附图对本发明示例性实施例的以下详细描述,本发明的其它 方面、优势和突出特征对于本领域技术人员将变得显而易见。
在本发明中,术语“包括”和“含有”及其派生词意为包括而非限制;术语“或”是包含性的,意为和/或。
在本说明书中,下述用于描述本发明原理的各种实施例只是说明,不应该以任何方式解释为限制发明的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本发明的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不背离本发明的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同参考数字用于相似功能和操作。
根据本发明实施例的maxout运算,其是将输入层的神经元向量,分离成多个组,每一个组内的同一个输入点的不同特征层取最大值,作为该点的输出。
图1示意性示出了根据本发明实施例的maxout层运算装置1的框图。其中模块均可以通过硬件电路(例如包括但不限于fpga、cgra、专用集成电路asic、模拟电路和忆阻器等)实现。
如图1所示,maxout层运算装置1包括maxout层运算模块10。根据本发明的实施例,maxout层运算装置1还可以包括存储模块20。maxout层运算模块10连接到存储模块20。存储模块20用于存储maxout层输入数据,在一种实施方式中,该存储模块20可以是高速暂存存储器(scratchpadmemory),能够支持不同大小的maxout层输入输出数据。根据本发明实施例,将必要的maxout层运算数据暂存在高速暂存存储器上,使本运算装置在进行maxout层运算过程中可以灵活有效地支持不同宽度的数据,提升包含大量神经网络maxout层运算任务的执行性能。
maxout层运算模块10包括寄存器单元11、加载/存储(load/store)单元12、数据转置单元13、剪枝单元14、以及非线性运算单元15。
寄存器单元11用于存储maxout层输入数据地址,其中,maxout层输入数据地址为maxout层输入数据在存储模块20中的存储地址。在一种实施方式中,寄存器单元11可以包括标量寄存器堆,提供运算过程中所需 的标量寄存器,标量寄存器不只存放maxout层输入数据地址,还可以存放有标量数据。当涉及到重复使用maxout层的输入数据做运算时,maxout层运算模块10不仅可以从寄存器单元11中获取maxout层输入数据地址,还可以从寄存器单元11中获取相应的已经加载进来的maxout层输入数据。
maxout层运算模块10获取maxout层运算指令。然后,根据该运算指令的立即数或基于该运算指令从寄存器单元中11获取的maxout层输入数据地址,加载/存储单元12在存储模块20中获取相应的maxout层输入数据。根据本发明的实施例,加载/存储单元12可以将maxout层输入数据保存在寄存器单元11中。当涉及到重复使用maxout层的输入数据做运算时,maxout层运算模块10可以从寄存器单元11中获取相应的已经加载进来的maxout层输入数据。
接着,数据转置单元13、剪枝单元14、以及非线性运算单元15根据maxout层运算指令,使用获取的maxout层输入数据进行maxout层运算,得到maxout层运算结果,并将maxout层运算结果存储于存储模块20中。maxout层运算模块10为多流水级结构,其中,数据转置单元13处于第一流水级,剪枝单元14处于第二流水级,非线性运算单元15处于第三流水级。这些单元处于不同的流水级,当连续串行的多条maxout层运算指令的先后次序与相应单元所在流水级顺序一致时,可以更加高效地实现这一连串maxout层运算指令所要求的操作。
具体地,数据转置单元13将每个maxout层输入数据按纵坐标或横坐标优先存放的数据转置成按特征优先存放的转置数据(如果数据本身就是以特征优先存放,则不需要该转置操作)。按特征优先存放maxout层数据的方式是已知的,在此不做赘述。
对每个按特征优先存放的maxout层输入数据,剪枝单元14在特征维度上进行压缩,得到剪枝数据。具体地,剪枝单元14得到maxout层输入数据的特征分组中每个组的最大值,作为该转置数据对应的剪枝数据。例如,一个转置数据包括已分为三组的特征{f1,f2,f3},{f4,f5,f6},{f7,f8,f9},取每个组的最大值f2,f5,f9,作为其剪枝数据。该分组方式仅是示例性的,可以根据实际需要预先设定不同的分组方式。
运算单元15根据运算指令对剪枝单元14输出的剪枝数据执行相应运 算。根据本发明的实施例,所述运算可以是非线性运算如sigmoid运算、tanh运算、relu运算或softmax运算等。然后,运算单元15将运算结果返回给加载/存储单元12,加载/存储单元12可以将运算结果写入存储模块20中。
图2示出了本发明提供的指令集的格式示意图。如图2所示,maxout层运算指令包括一操作码和至少五个操作域,所述五个操作域分别表示输入数据的起始地址、输入数据的数据长度,输出数据的起始地址、输出数据的数据长度,以及做maxout层运算的特征选取范围。其中,操作码用于指示该maxout层运算指令的功能,maxout层运算装置通过识别该操作码可进行不同的maxout层运算,操作域用于指示该maxout层运算指令的数据信息,其中,数据信息可以是立即数或寄存器号。例如,要获取一个maxout层输入数据时,根据寄存器号可以在相应的寄存器中获取maxout层输入数据起始地址和maxout层输入数据长度,再根据maxout层输入数据起始地址和maxout层输入数据长度在存储模块20中获取相应地址存放的maxout层输入数据;要获得一个maxout层运算所需要整合的特征层个数,可以从操作域中的立即数获得;一个maxout层运算结果输出的起始地址和数据长度也同样从操作域中获得。
指令集包含有不同功能的maxout层输入数据运算指令,包括按特征优先存放数据格式maxout层运算指令和/或按图像纵坐标或横坐标优先存放数据格式maxout层运算指令。
根据按特征优先存放数据格式maxout层运算指令,maxout层运算模块10从存储模块20的指定地址或寄存器单元11取出指定大小的maxout层输入数据,在maxout层运算模块10中,对maxout层输入数据进行剪枝并执行相应操作,并将计算结果写回至存储模块20的指定地址。
根据按图像纵坐标或横坐标优先存放数据格式maxout层运算指令,maxout层运算模块10从存储模块20的指定地址或寄存器单元11取出指定长度的maxout层输入数据,在maxout层运算装置中首先在第一个流水级将数据转置为按特征优先存放的数据,然后对maxout层输入数据进行剪枝并执行相应操作,并将计算结果写回至存储模块20的指定地址。图3示出了根据本发明另一实施例的maxout层运算装置1的结构框图。如图3 所示,除了图1所示的maxout层运算模块10和存储模块20之外,maxout层运算装置1还包括指令处理模块30,用于从指令存储设备(未示出)获取maxout层运算指令,并对该maxout层运算指令进行处理后,提供给maxout层运算模块10。其中,指令处理模块30包括:
取指单元31,用于从指令存储设备获取maxout层运算指令;
译码单元32,用于对获取的maxout层运算指令进行译码;
存储队列33,用于对译码后的maxout层运算指令进行顺序存储;
指令寄存器34,存储指令所需的地址数据,填充指令;
依赖关系处理单元35;以及
指令队列36。
依赖关系处理单元35用于在向maxout层运算模块10提供maxout层运算指令前,判断该maxout层运算指令与之前的maxout层运算指令是否访问相同存储空间,若是,指示指令队列36存储该maxout层运算指令,待之前的maxout层运算指令执行完毕后,将该maxout层运算指令提供给所述maxout层运算模块10的相应单元;否则,指示指令队列36直接将该maxout层运算指令提供给所述maxout层运算模块10的相应单元。具体地,maxout层运算指令访问存储模块20时,前后指令可能会访问同一块存储空间,这种情况被称为前后指令的数据之间存在依赖关系。为了保证指令执行结果的正确性,当前指令如果被检测到与之前的指令的数据存在依赖关系,该指令必须在指令队列36内等待至所述依赖关系被消除。指令在执行过程中,同时也被缓存在依赖关系处理单元35中,当一条指令执行完之后,如果该指令同时也是依赖关系处理单元35中未被提交指令中最早的一条指令,该指令将被提交。一旦提交,该条指令进行的操作对装置状态的改变将无法撤销。
根据本发明的实施例,maxout层运算装置1还包括输入输出模块40可以将maxout层输入输出数据在存储模块20与外部存储设备(未示出)之间进行传输。例如,输入输出模块40可用于存储模块从外部存储设备读取入maxout层输入数据和向外部存储设备写maxout层运算结果
根据本发明的一种实施方式,用于本发明装置的指令集采用load/store结构,maxout层运算装置不会对内存中的数据进行操作,即所 需数据需要首先通过io指令将数据从外部存储搬运至内部存储模块20,然后才可以使用这些数据进行运算。本指令集采用精简指令集架构,指令集只提供最基本的maxout层运算操作,复杂的maxout层运算都由这些简单指令通过组合进行模拟,如输入层过大,导致需要切分开来进行运算的maxout层,则需要多个io指令和基本的maxout层指令进行组合执行,使得可以在高时钟频率下单周期执行指令。另外,本指令集采用定长指令,即每个指令的长度都是统一大小,使得本发明提出的maxout层运算装置在上一条指令的译码阶段对下一条指令进行取指,即在当取指单元将指令送至译码单元后,取指单元即可立即取下一条指令,同样,译码单元将指令送至存储队列后,译码单元可以立即解析下一条指令。
图4示出了根据本发明实施例供的maxout层运算装置执行maxout层运算的流程图,如图4所示,执行maxout层运算指令的过程包括:
s1,取指单元取出该条maxout层运算指令,并将该指令送往译码单元。
s2,译码单元对指令译码,并将指令送往存储队列。
s3,指令寄存器对指令进行填充。具体地,从指令寄存器中获取指令中五个操作域(该五个操作域分别表示输入数据的起始地址、输入数据的数据长度,输出数据的起始地址、输出数据的数据长度,以及做maxout层运算的特征选取范围(即,由多少个特征数据得到一个特征数据))所对应的数据信息以填充maxout层运算指令,包括输入数据起始地址、输入数据长度、输入数据的特征层数目,输入数据的单个特征层大小,做maxout层运算的特征层大小,输出数据起始地址,输出数据长度。
s4,在取得需要的数据信息后,该指令被送往依赖关系处理单元。依赖关系处理单元分析该指令与前面的尚未执行结束的指令在数据上是否存在依赖关系。该条指令需要在指令队列中等待至其与前面的未执行结束的指令在数据上不再存在依赖关系为止。
s5,依赖关系不存在后,该条maxout层运算指令被送往maxout层运算模块。maxout层运算模块根据所需数据的地址和长度从存储模块中取出需要的maxout层输入数据,然后在maxout层单元中完成指令对应操作。根据本发明的实施例,所述指令对应操作包括数据转置(当输入数据是横 坐标或纵坐标优先格式时执行该操作,当输入数据是特征优先格式时省略该操作)、剪枝、以及与指令相应的运算。根据本发明的实施例,所述运算可以是非线性运算如sigmoid运算、tanh运算、relu运算或softmax运算等。
s6,运算完成后,将结果写回至存储模块的指定地址,同时依赖关系处理单元中的该指令被提交。
本发明的maxout层运算装置及其中的各模块、单元可由软件、硬件、或固件实现。这些装置、模块、单元可以集成在一起实现或分离地实现并彼此通信或交互。例如,可以采用专用集成电路来集成实现。或者,其中的部分模块、单元可以实现为专用集成电路或固化有计算机程序代码的可编程器件,而部分模块、单元实现为通用计算器件运行存储在存储设备中的计算机程序代码。例如,可以将部分模块、单元等(如数据转置单元)实现为由软件实现数据的转置,而内部存储单元可由寄存器组实现或高速缓存单元实现等。
综上所述,本发明提供maxout层运算装置,并配合相应的精简指令集架构,能够很好地解决当前计算机领域越来越多的算法包含大量maxout层运算的问题,相比于已有的传统解决方案,本发明可以具有指令集精简、使用方便、支持的maxout层规模灵活、片上缓存充足等优点。本发明可以用于多种包含大量maxout层运算的计算任务,包括目前表现十分出色的人工神经网络算法的反相训练和正向预测等计算方法。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。