本发明涉及通信领域,具体涉及一种面向稀疏神经网络的片上系统。
背景技术:
神经网络稀疏化很大程度上减少了算法的计算量和数据存储量,这有助于将大规模的神经网络算法部署在存储、计算资源和能耗有限的嵌入式设备中。但是稀疏化带来的数据不规则性使得稀疏网络在通用平台上执行效率非常低。为了使硬件更好地执行稀疏神经网络算法,研究人员设计了各种各样的稀疏神经网络加速器,此外,面向稀疏神经网络的片上系统研究也逐渐展开。
现有的稀疏神经网络加速器与片上系统存在几个问题:
a、加速器的计算并行度和访存效率受限于神经网络稀疏化规则;
b、稀疏网络中非零元位置的不确定性导致加速器中数据复用困难;
c、需要为加速器设计专用的编译器,通用性较差。
在片上系统中,cpu的利用率太低,系统的的整体加速效果一般。
技术实现要素:
为解决上述问题,本发明提出一种面向稀疏神经网络的片上系统,通过下述技术方案实现:
一种面向稀疏神经网络的片上系统,其特征在于,包括主处理器、协处理器、系统从设备以及片外存储器,
所述主处理器与主处理器通信连接;
所述系统从设备与主处理器通信连接;
所述片外存储器从系统接口与所述从系统通信连接;
其中,
所述主处理器将神经网络算法中的矩阵计算分解为向量计算,执行程序筛选重组稀疏神经网络中参与计算的稀疏向量,将稀疏神经网络中的稀疏向量转换成稠密的向量,并向所述协处理器发送加速指令,由所述协处理器执行稠密向量的加速计算。
所述主处理器包括开源处理器、数据通路、一级数据缓存和一级指令缓存,其中:
所述主处理器用于将神经网络算法中的矩阵计算分解为向量计算,将稀疏神经网络的神经元矩阵和权重矩阵展开成原始的稀疏向量,并筛选重组稀疏神经网络中的;
所述数据通路用于主处理器和协处理器之间的数据交互;
所述一级数据缓存用于存储主处理器和协处理器的计算数据;
所述一级指令缓存用于存储主处理器的处理指令;
所述主处理器和协处理器共享一级数据缓存。
进一步的,所述系统从设备包括spiflash控制器和调试接口uart;
所述spiflash控制器用于利用spi接口将所述片外存储器集成到所述片上系统中;
所述调试接口uart为所述片上系统的调试接口,用于接收上位机的指令或向上位机发送指令。
进一步的,系统上电后,所述主处理器从spiflash控制器开始依次读取一个块的指令缓存到一级缓存地址中,执行程序筛选重组稀疏神经网络中参与计算的原始的稀疏向量。
进一步的,所述原始的稀疏向量包括稀疏神经元向量和稀疏权重向量,所述片上系统采用直接索引的方式,存储稀疏神经元向量和稀疏权重向量中的非零元素以及稀疏神经元向量和稀疏权重向量对应的索引标志。
进一步的,所述主处理器对稀疏神神经元向量和稀疏权重向量的索引标志进行与计算,得到参与计算的稀疏神经元向量或稀疏权重向量在原始向量中索引标志,通过得到的索引标志对非零神经元计数向量和非零权重计数向量进行筛选,得到参与计算的非零神经元和非零权重分别在非零神经元组成向量和非零权重组成向量中的位置坐标,根据非零神经元组成向量和非零权重组成向量索引到最后参与计算的非零元素,并将索引到的非零元素按照顺序重组为稠密向量。
进一步的,当组成的稠密向量数据位宽达到所述主处理器与所述协处理器之间接口的位宽时,所述主处理器通过rocc接口向所述协处理器发送加速指令。
进一步的,所述主处理器将重组后的稠密向量存储到一级数据缓存中,所处协处理器接收到加速指令后直接从所述一级缓存中访问稠密向量。
进一步的,所述所述协处理器包括控制译码单元、地址生成器、点积计算单元、向量加计算单元、激活函数计算单元、池化操作单元、最大值索引计算单元和编码器,其中:
所述控制译码单元用于解析rocc指令,得到协处理器访存起始地址,并且在算法执行过程中控制数据流的流向;
所述地址生成器用于计算卷积神经网络算法执行过程中的访存地址;所述卷积神经网络算法包括卷积层算法、全连接层算法和输出层算法;
所述点积计算单元、向量加计算单元、激活函数计算单元、最大值索引计算单元采用级联的结构,用于进行执行对应的点积计算、向量加计算、激活函数计算以及最大值索引计算;
所述编码器用于对所述点积计算单元、向量加计算单元、激活函数计算单元、池化操作单元的计算结果进行编码。
进一步的,所述协处理器执行卷积层算法时,其数据流经过最大池化计算后发送至编码器压缩,然后将非零元素和非零元素对应的索引标志写入一级数据缓存中;
执行全连接层算法时,其数据流经过激活函数计算单元计算后即执行在线编码压缩,然后将非零元素和非零元素对应的索引标志写入一级数据缓存;其最后一层全连接层输出经过压缩之后发送给最大值索引单元进行计算;
执行输出层算法时,通过最大值索引计算单元的计算结果直接通过访存请求信号接口写入一级数据缓存。
本发明的有益效果是,该系统中主处理器对稀疏神经网络进行预处理,交给加速单元执行的是稠密的向量,这样使得加速器可以执行稀疏度任意大小的稀疏神经网络,也使加速器中的硬件资源能够充分利用,提高了数据处理的效率;此外,系统采用主处理器+协处理器的异构片上系统结构,主处理器与协处理器共享一级数据缓存,主处理器与协处理器之间进行数据交互延迟短,增加了访存带宽;并且加速器的计算单元采用级联的方式连接,有效地复用的中间的计算结果,提高了数据利用率,减少了数据的访存次数。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1为本发明的面向稀疏神经网络的片上系统构架示意图,其中标识的意义为:rocketcpu:处理器;datapath:数据通路;l1icache:一级指令缓存;l1dcache:一级数据缓存;roccinterface:协处理器接口,rocc接口;ccexception:处理器发送给协处理器的异常信号;ccinterrupt:协处理器发送给处理器的中断信号;corecmd:处理器向协处理器发送指令的信号;memreq:访存请求信号;memresp:访存响应信号;spiflashcontroller:spiflash控制器;spiflash:spi接口外接的片外flash存储器。
图2为本发明实施例中数据筛选重组原理图,图中的标记含义为:1:稀疏神经元向量;2:非零神经元组成的向量;3:非零神经元计数向量;4:稀疏神经元向量对应的索引比特串;5:稀疏权重向量对应的索引比特串;6:非零权重计数向量;7:非零权重组成的向量;8:稀疏权重向量;9:参与计算的神经元与权重对应1、8向量的索引比特串;10:参与计算的非零神经元在2中的位置;11:参与计算的非零神经元组成的向量;12:参与计算的非零权重在7中的位置;13:参与计算的非零权重组成的向量。
图3为本发明实施例中协处理器加速器架构图,图中的标记含义为:roccinterface:协处理器接口;rocc-in:协处理器输入端口;rocc-out:协处理器输出端口;corecmd、memreq、memresp、ccexception、ccinterrupt:协处理器发送给处理器的中断信号;decodercontroller:协处理器译码控制单元;addr:协处理器地址生成器;encoder:编码器;vdp:向量点积计算单元;va:向量加计算单元;relu:激活函数计算单元;maxpool:最大池化计算单元;argmax:最大值索引计算单元。
具体实施方式
在下文中,可在本发明的各种实施例中使用的术语“包括”或“可包括”指示所发明的功能、操作或元件的存在,并且不限制一个或更多个功能、操作或元件的增加。此外,如在本发明的各种实施例中所使用,术语“包括”、“具有”及其同源词仅意在表示特定特征、数字、步骤、操作、元件、组件或前述项的组合,并且不应被理解为首先排除一个或更多个其它特征、数字、步骤、操作、元件、组件或前述项的组合的存在或增加一个或更多个特征、数字、步骤、操作、元件、组件或前述项的组合的可能性。
在本发明的各种实施例中,表述“或”或“a或/和b中的至少一个”包括同时列出的文字的任何组合或所有组合。例如,表述“a或b”或“a或/和b中的至少一个”可包括a、可包括b或可包括a和b二者。
在本发明的各种实施例中使用的表述(诸如“第一”、“第二”等)可修饰在各种实施例中的各种组成元件,不过可不限制相应组成元件。例如,以上表述并不限制所述元件的顺序和/或重要性。以上表述仅用于将一个元件与其它元件区别开的目的。例如,第一用户装置和第二用户装置指示不同用户装置,尽管二者都是用户装置。例如,在不脱离本发明的各种实施例的范围的情况下,第一元件可被称为第二元件,同样地,第二元件也可被称为第一元件。
应注意到:如果描述将一个组成元件“连接”到另一组成元件,则可将第一组成元件直接连接到第二组成元件,并且可在第一组成元件和第二组成元件之间“连接”第三组成元件。相反地,当将一个组成元件“直接连接”到另一组成元件时,可理解为在第一组成元件和第二组成元件之间不存在第三组成元件。
在本发明的各种实施例中使用的术语仅用于描述特定实施例的目的并且并非意在限制本发明的各种实施例。如在此所使用,单数形式意在也包括复数形式,除非上下文清楚地另有指示。除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本发明的各种实施例所属领域普通技术人员通常理解的含义相同的含义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本发明的各种实施例中被清楚地限定。
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
实施例1
一种面向稀疏神经网络的片上系统,在本实施例里,包括所述主处理器类型开源处理器rocket、协处理器类型的神经网络加速器、系统总线tilelink、调试接口uart、spiflash控制器以及片外的spiflash存储器。其中,处理器作为系统的主设备;神经网络加速器作为主处理器的协处理器,协处理器通过rocc接口与主处理器连接;uart和spiflash控制器作为系统的从设备,从设备通过tilelink总线与主处理器连接;spiflash作为片外存储通过spiflash控制器内的spi接口集成到系统中。处理器主要负责将神经网络算法中的矩阵计算分解成向量计算,然后依据神经元和权重的索引标志筛选出参与计算的非零数据,再将筛选后的非零元素依次重组为连续存储的稠密向量。此后,主处理器通过rocc接口向协处理器发送加速指令,协处理器执行稠密向量的加速计算。注:神经元和权重均采用直接索引的方式存储,只存非零元素以及所有元素的索引标志,索引标志用比特串表示,比特串中’0’表示当前位置为零元素,’1’表示当前位置为非零元素。
实施例2
如图1所示,本实施例是基于risc-v开源处理器进行创造的异构片上系统。系统中集成了rocketcpu、协处理器加速器、spiflash控制器、uart和片外spiflash。rocketcpu作为系统的主处理器,执行神经网络算法的加速器作为其协处理器,主处理器与协处理器之间通过rocc接口紧密耦合,二者共享l1dcache。spiflash是片外的程序存储器,外接在spiflash控制器上,其内部存储了程序的二进制文件,系统上电复位后cpu从spiflash基地址开始依次读取一个块的指令缓存到l1icache中。然后,cpu执行程序筛选重组稀疏神经网络中参与计算的非零神经元和非零权重,将稀疏神经网络中的稀疏向量转换成稠密的向量,当组成的向量总的数据位宽达到rocc接口的位宽,cpu就通过rocc接口的corecmd接口向协处理器发送加速指令,协处理器执行神经网络算法。与此同时,cpu继续筛选未筛选过的稀疏神经元向量与权重向量,为协处理器的下一轮加速器计算提供数据源。协处理器通过memreq接口向lidcache发送访存地址、计算结果和有效标志信号;主处理器通过memresp接口向协处理器写入待计算数据。cpu执行到异常程序,将异常信号通过ccexception告知协处理器。协处理器执行完向量计算,通过ccinterrupt中断cpu。uart作为系统的调试接口,可接收上位机指令或者向上位机发送指令,主要用于辅助原型验证。
稀疏神经元和权重的存储与筛选重组原理如图2所示。将稀疏神经网络的神经元矩阵和权重矩阵展开成原始的稀疏向量,分别对应图中1、8标号对应的稀疏向量。本发明采取直接索引的方式存储稀疏向量,即只存储稀疏向量的非零元素(如图2中2、7标号对应的向量)和稀疏向量对应的索引标志(如图2中4、5标号对应的比特串)。索引比特串中的‘1’表示稀疏向量当前位置的元素是非零元素,‘0’表示稀疏向量当前位置的元素是零元素。在神经网络算法中,当对应位置权重和神经元均为非零元素时,相应位置的神经元和权重对计算结果才有贡献。因此,在神经元和权重交给协处理器加速器计算之前,cpu需要对稀疏神经元和权重进行筛选重组。为了便于cpu确立索引到的非零元素在2、7中的位置,额外增加两个计数向量(如图2中的3、6标号对应的向量)用于记录非零元的坐标。具体的筛选重组过程分三个步骤,如图2中标识的step1、step2和step3。step1通过将稀疏神经元的索引比特串和稀疏权重的索引比特串进行与操作,得到的向量(如图2中的9标号)表示参与计算的神经元或者权重在原始向量中的位置信息。step2将step1得到的索引比特串作为标号为3、6向量的选择信号,当比特位是‘1’,表示当前坐标的非零元参与计算,否则不参与。经过筛选,得到了标号为10、12的向量,这两个向量内的元素表示最终参与计算的非零元在2、7中的坐标。step3根据2、7向量元素索引到最后参与计算的非零元素,并且将索引到的非零元素按照顺序重组为稠密的向量,如图中标号11、13表示的向量。cpu将重组后向量存储到l1dcache中,以便协处理器直接从l1dcache中访问数据,从而节省访存时间。
神经网络算法可分解为点积、向量加法、激活函数计算、池化操作和最大值索引计算。卷积神经网络算法中卷积层包含了点积、向量加、激活函数计算和池化操作;全连接层包含了点积、向量加、激活函数计算;输出层为argmax层,主要操作为求最大值索引。针对通用的卷积神经网络,本实施例采用如图3所示的协处理器加速器。加速器通过rocc接口与主处理器耦合,其内部包含了控制译码单元decodercontroller、地址生成器addr、点积计算单元vdp、向量加计算单元va、激活函数计算单元relu、池化操作单元maxpool、最大值索引计算单元argmax和编码器encoder。控制译码单元解析rocc指令,得到加速器访存起始地址,并且在算法执行过程中控制数据流的流向。地址生成器主要用于计算算法执行过程中的访存地址。加速器内的计算单元采用级联的结构,上一级计算单元产生的计算结果可以直接供下一计算单元使用,中间计算结果无需写回l1dcache。加速器在执行卷积层、全连接层和输出层的最终输出路径有较大区别。执行卷积层算法时,数据流经过maxpool计算单元后交给编码器encoder压缩处理,然后再将非零元素和对应的索引比特串写回l1dcache;执行全连接层时,数据流经过relu计算单元后即可执行在线编码压缩处理操作,然后再将非零元素和对应的索引比特串写回l1dcache,值得注意的是最后一层全连接层输出经过压缩之后直接交给argmax单元进一步处理;执行输出层时,argmax单元的计算结果直接通过memreq接口写回l1dcache,无需要在线压缩处理。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。