一种通过算法控制单元进行调度计算的硬件结构

文档序号:32305406发布日期:2022-11-23 09:49阅读:48来源:国知局
1.本公开属于人工智能神经网络
技术领域
:,特别涉及一种通过算法控制单元进行调度计算的硬件结构。
背景技术
::2.端侧神经网络计算,在fpga中进行部署,通常需要考虑到fpga本身硬件可编程的灵活性,同时也需要考虑神经网络发展较快,各种网络结构层出不穷,如何在硬件上面对各种计算资源和结构进行灵活配置,以通过软件编程的方式快速部署新的网络,满足不同网络参数、不同输入图像,这对硬件架构设计提出了很高的要求。现有的基于fpga部署的卷积神经网络多是针对某一单一网络的特定部署,可编程性和灵活性有限。技术实现要素:3.鉴于此,本公开提供了一种通过“algorithmzoo”进行调度计算的硬件结构,包括系统寄存器控制单元sysregisters,算法控制单元algorithmzoo,计算阵列单元pe-array,片上存储单元memory,risc-v处理器,双倍速率动态存储器ddr和向量处理单元vpu,其中,所述算法控制单元algorithmzoo包括数据传输模块trans、卷积运算模块conv、深度可分离卷积计算控制模块dwcon、反卷积计算控制模块dconv、池化控制模块pooling和数据变形模块reshape。4.优选的,5.该硬件结构应用于卷积神经网络计算或者应用于具有并行计算需求的调度计算。6.优选的,7.通过所述risc-v处理器控制系统寄存器控制单元sysregisters的方式来控制算法控制单元algorithmzoo包括的模块完成相应的计算任务。8.优选的,9.对于新的卷积神经网络算法,先将其中的算子进行抽象后再将新的算子计算控制加入到算法控制单元algorithmzoo中,来完成对新的卷积神经网络算法的支持。10.优选的,11.所述片上存储单元memory在该卷积神经网络计算中的存在形式为n个块bank的片上存储条,对应块bank的片上存储条读写端口独立,其中n为整数。12.优选的,13.所述数据传输模块trans用于将数据从双倍速率动态存储器ddr搬移到片上存储单元memory,将片上存储单元memory的数据搬移到双倍速率动态存储器ddr和将片上存储单元memory的数据在片上存储单元memory内部做搬移。14.优选的,15.所述卷积运算模块conv通过一个状态机实现,总共分三个状态:idel态、计算态和计算完成态。16.优选的,17.所述池化控制模块pooling将每个通道的卷积运算替换成了求最大值、最小值或平均值的操作,实现特征图的逐通道内数据的缩放操作。18.优选的,19.所述数据变形模块reshape实现特征图的重组、缩放以及维度转换。20.优选的,21.所述反卷积计算控制模块dconv支持通用反卷积运算,或者是针对特定算子进行的优化计算,其中,针对特定算子进行的优化计算的整体处理步骤如下:第一、在离线时将权重数据进行变换,拆分成4个独立的部分;第二、将输入特征图通过reshape指令,将输入特征图也拆分成4个独立的特征图;第三、分别对所述4个独立部分的权重数据和4个独立的特征图进行传统卷积运算,得到4个计算结果;第四、将所述4个计算结果进行重组,得到反卷积运算的结果。22.通过上述技术方案,通过其硬件设计,可以进行传统卷积、depthwise卷积核elementwise卷积、反卷积、padding、reshape等进行计算,进而完成神经网络计算。并且通过对“algorithmzoo”的扩充实现,我们可以通过编程灵活支持常见的神经网络计算硬件实现。附图说明23.图1是本公开一个实施例中所提供的一种通过“algorithmzoo”进行调度计算的通用硬件设计结构图;24.图2是本公开一个实施例中卷积神经网络的计算过程图;25.图3是本公开一个实施例中数据从ddr搬移到片上memory图;26.图4是本公开一个实施例中数据从memory搬移到ddr图;27.图5是本公开一个实施例中数据从memory搬移到memory图;28.图6是本公开一个实施例中conv计算控制结构图;29.图7是本公开一个实施例中conv计算内部控制状态机图;30.图8是本公开一个实施例中conv计算对应pe-array计算分布图;31.图9是本公开一个实施例中dwc计算内部控制状态机图;32.图10是本公开一个实施例中dwc计算对应pe-array计算分布图;33.图11是本公开一个实施例中特征图变形算子流程图;34.图12(a)至图12(b)是本公开一个实施例中反卷积运算的拆分与合并方式图;35.图13是本公开一个实施例中反卷积的处理流程图;36.图14是本公开一个实施例中zu3eg中部署本硬件结构示意图;37.图15(c)至图15(d)是本公开一个实施例中shufflenetv2中stage计算结构图;38.图16是本公开一个实施例中shufflenetv2计算过程图;39.图17是本公开一个实施例中shufflenetv2计算过程中处理器调度流程图。具体实施方式40.为进一步描述本发明,下面结合附图1至图17对其作进一步说明。41.在一个实施例中,其公开了一种通过“algorithmzoo”进行调度计算的硬件结构,包括系统寄存器控制单元sysregisters,算法控制单元algorithmzoo,计算阵列单元pe-array,片上存储单元memory,risc-v处理器,双倍速率动态存储器ddr和向量处理单元vpu,其中,所述算法控制单元algorithmzoo包括数据传输模块trans、卷积运算模块conv、深度可分离卷积计算控制模块dwcon、反卷积计算控制模块dconv、池化控制模块pooling和数据变形模块reshape。42.在这个实施例中,可以在risc-v处理器中用软件来调度计算,而在硬件中,只需要实现“algorithmzoo”中的算子计算即可实现具有软件可编程的神经网络加速器。“algorithmzoo”就是“算法动物园”,在本公开中是很多算法的集合意思,现有技术中在量子计算中也存在类似概念,例如“quantumalgorithmzoo”。43.卷积神经网络计算架构如图1所示,通过risc-v处理器编程来实现神经网络的计算调度,该risc-v处理器可以是基于冯诺·依曼结构,也可以是哈佛架构;通过sysregisters完成对“algorithmzoo”中的各个算法模块的控制调度;“algorithmzoo”主要完成各种算法模块的控制实现,其中包括数据传输模块trans、卷积运算模块conv、深度可分离卷积计算控制dwcon、反卷积计算控制模块dconv、池化控制模块pooling、reshape模块;memory在该卷积神经网络计算中,采用n个bank的memory条实现,当然不同的硬件设计实现中,也可以使用更多的memory条,对应bank的memory条读写端口独立;pe-array采用8*8的pe计算阵列,其中每一个pe单元能够完成8*8的一个矩阵运算,这样可以构成一个8*8*8的计算并行度,vpu中主要完成累加、bias加操作、pooling等操作;ddr主要存储各种参数,包括权重、bias、输入featuremap和输出featuremap。44.对于某一个神经网络,其计算图可以抽象如图2虚线框a所示:输入图像的前处理过程,输入图像经过前处理之后进入到网络的第1层计算,第1层计算输出作为第2层的计算输入,再经过第2层的计算,再经过第n-1层的计算,最后通过第n层的计算,第n层的计算输出再经过后处理之后,整个神经网络即计算结束。每一层的计算又可以分解为虚线框b中的计算过程:对于输入的featuremap(其尺寸为宽度为xi,高度为yi,共有ci个通道)经过n个group的计算,这些计算通常为卷积计算,其对应的卷积核大小为m×n,共有ki个通道,最后的输出featuremap大小为宽度为xo,高度为yo,共有co个通道。每一个计算group,又可以通过“algorithmzoo”中的trans、conv、dwc、dconv、pooling、reshape等算子控制调度pe-arry计算完成。软件编码可以用如下的伪代码表示:[0045][0046][0047]对于一个神经网络计算任务,完整的计算流程如下:通过external将权重文件、bias文件、输入图像放入ddr中,然后risc-v启动控制计算的程序开始执行,程序在运行中主要控制“algorithmzoo”中的trans、conv、dwc、dconv、pooling和reshape模块,进而调度pe-array、vpu和memory模块进行相关计算,最后再将计算完成的结果存入ddr中。[0048]在另一个实施例中,所述片上存储单元memory在该卷积神经网络计算中的存在形式为n个块bank的片上存储条,对应块bank的片上存储条读写端口独立,其中n为整数。[0049]在另一个实施例中,所述数据传输模块trans用于将数据从双倍速率动态存储器ddr搬移到片上存储单元memory,将片上存储单元memory的数据搬移到双倍速率动态存储器ddr和将片上存储单元memory的数据在片上存储单元memory内部做搬移。[0050]就该实施例而言,trans主要负责以下三方面的工作:(1)将数据从ddr搬移到片上memory;应用典型场景为数据放在memory中之后,为之后的conv等计算做准备;(2)将片上memory的数据搬移到ddr;应用典型场景为conv计算结果,需要写入到ddr中;(3)将片上memory的数据在memory内部做搬移;该应用类似于计算机体系结构指令集中的move操作。[0051]数据从ddr搬移到片上memory时,如图3所示,sysregisters模块向trans模块配置ddr的源地址,搬移长度,memory的目的地址(包括bank号,bank内部地址),配置好这些参数后,trans模块内部的命令通道会将sysregisters配置的ddr基地址转换为axi总线的地址通道数据,将数据长度根据axi总线的burst长度决定要进行多少次的axi传输(此处为读操作),命令通道同时会记录sysregisters配置的memory的地址,然后由trans模块发起axi传输启动信号,这样即可将数据从ddr读出来,之后读出来的数据通过数据通道做位宽转换和时钟域变换,然后将数据写到对应的memory中(确定的bank好,offset地址),当最后一个数据写入到memory中对应的bank地址中时,trans模块向sysregisters模块发出传输完成指示,进而risc-v处理器即可知道当前的trans操作是否完成,程序可以继续向后执行。[0052]数据从memory搬移到ddr中,如图4所示,和数据从ddr搬移到ddr类似:sysregisters模块向trans模块配置ddr的源地址,配置memory搬移长度,memory的目的地址(包括bank号,bank内部地址),配置好这些参数后,trans模块内部的命令通道会将sysregisters配置的ddr基地址转换为axi总线的地址通道数据,将数据长度根据axi总线的burst长度决定要进行多少次的axi传输(此处为写操作),命令通道同时会记录sysregisters配置的memory的地址,然后由trans模块发起axi传输启动信号,这样即可将数据从memory读出来,之后读出来的数据通过数据通道做位宽转换和时钟域变换,然后将数据写到对应的ddr中,当最后一个数据写入到ddr中时,trans模块向sysregisters模块发出传输完成指示,进而risc-v处理器即可知道当前的trans操作是否完成,程序可以继续向后执行。[0053]数据从memory搬移到memory中,如图5所示,和数据从ddr搬移到ddr类似:sysregisters模块向trans模块配置源memory搬移长度,源memory的地址,memory的目的地址(包括bank号,bank内部地址),配置好这些参数后,trans模块内部的命令通道会向sysregisters配置的memory的地址发送读请求,这样即可将数据从memory读出来,之后读出来的数据通过数据通道写到对应的ddr中,当最后一个数据写入到目的memory中,trans模块向sysregisters模块发出传输完成指示,进而risc-v处理器即可知道当前的trans操作是否完成,程序可以继续向后执行。[0054]在另一个实施例中,所述卷积运算模块conv通过一个状态机实现,总共分三个状态:idel态、计算态和计算完成态。[0055]就该实施例而言,conv计算可以完成传统卷积计算以及深度神经网络逐点卷积计算。对于传统卷积计算,通过对卷积窗适当变形,转换为深度神经网络的逐点卷积计算。[0056]对于深度神经网络逐点卷积计算,主要通过conv模块完成卷积核大小配置、输入channel数和输出channel数配置,是否需要padding等,计算的源操作数地址(包括bank号,bank内部地址),计算完成之后的目的地址(包括bank号,bank内部地址),然后启动pe-arry进行计算,计算过程中,pe-array自动从片上memory读取数据进行计算,在每一个pe单元中做完乘累加操作,计算完成之后,将计算结果送外vpu模块,由vpu模块进行多个输入channel之间partialsum的累加、以及bias的加操作,最终由vpu将计算结果再写入到目的memory中。整个过程如图6所示。[0057]计算过程中,conv模块内部按照一个卷积核粒度所覆盖的输入featuremap行进行计算,通过一个状态机实现,如图7所示,总共分三个状态:idel态、计算态(异形虚线框中的计算流程)、计算完成态(反馈计算完成)。当sysregs下发start_calc计算开始执行后,conv内部从idle态切换到“计算态”,在计算态中,conv模块最基本的计算粒度就是“8×8×8”的一个并行度计算,该并行度计算由pe-array阵列支持完成;先进行输入featuremap的channel方向计算,featuremap的channel方向计算实际是一个channel/8次的循环计算过程;如果输入featuremap的方向完成计算,则进行卷积kernalwidth方向的计算,并且kernalwidth方向切换时,再次进入到“8×8×8”的粒度计算,并再次进行featuremap的channel方向计算,进而进入一个kernalwidth方向的循环计算,而每一个kernalwidth方向的循环计算内部实际是一个featuremap输入channel/8的循环计算;完成kernalwidth方向计算后,再次进行kernalhight方向的计算,并且kernalhight方向切换时,再次进入到“8×8×8”的粒度计算,进而进入新的kernalwidth计算循环和输入featuremap的channel方向计算循环;完成kernalhight方向计算后,得到输出featuremapchannel/8组内的8组输出,这8组输出中,每组中包含8个输出通道;进一步进行outfeaturemap的channel/8组内计算,如果ofm的channel/8组内计算没有完成,则继续进行包含前述几个循环计算过程的循环计算,直到ofm的channel/8组内计算完成;ofm的channel/8计算完成后,再进入到输入featuremap的width方向计算上来,输入featuremap的width计算,依然是一个width/8的组计算,该组中的计算粒度就是前述的所有循环计算的一个循环,当输入featuremap的width/8组内计算能完成之后,这样即完成了一个卷积核粒度所覆盖的输入featuremap行计算。[0058]在做逐点卷积计算的过程中,计算数据的流动方向为a、b两个方向,pe-array中的的所有8*8个pe单元都参与计算,如图8所示。[0059]在另一个实施例中,对于depthwise卷积(dwc),其计算过程的控制和上述描述的conv计算调度过程类似。不同的是dwc计算的控制状态机如图9所示,可以从图9看出dwc的计算过程不需要进行输出featuremap的channel/8组内计算循环过程,因此depthwise卷积的输出featuremapchannel数和输入featuremapchannel数相等,并且不需要输入channel之间卷积计算结果的累加。除此之外,dwc的实际计算过程和上述conv的计算过程一样。[0060]在做depthwise卷积计算的过程中,pe-array数据的流动方向为a、b两个方向,此时只需要第一行pe(1×8)单元参与计算,如图10所示。[0061]在另一个实施例中,所述池化控制模块pooling将每个通道的卷积运算替换成了求最大值、最小值或平均值的操作,实现特征图的逐通道内数据的缩放操作。[0062]就该实施例而言,池化(pooling)算子可以实现特征图的逐通道内数据的缩放操作,其计算流程与depth-wise卷积类似,主要是将每个通道的卷积运算替换成了求最大值、最小值或平均值的操作。进行pooling计算时,比如计算2×2maxpooling计算,则通过pooling模块参数配置,主要配置需要读取的memory的源地址(包括bank号,bank内部地址),并且配置pe阵列计算为求max操作,然后启动pe阵列计算,此时对于a、b两个方向的数据在每个pe阵列中求max操作,对于2×2的maxpooling操作,通过配置pooling模块,可以一次完成两行数据的2×2的maxpooling操作。[0063]在另一个实施例中,所述数据变形模块reshape实现特征图的重组、缩放以及维度转换。[0064]就该实施例而言,数据变形(reshape)运算可以实现特征图的重组与缩放、以及维度转换。首先,特征图拆分,支持分别按行、列、通道方向将特征图拆分成多块,分别放到独立的空间中,该算子可以实现神经网络中的特征图分割、shuffle算子。其次,特征图拼接,支持多块特征图按照行、列、通道方向进行合并,可以实现神经网络中的特征图merge、concat算子。再次,特征图缩放,支持将一个特征图的内容按照最邻近、双线性差值方式进行运算。还有,将特征图按照不同的行、列、通道的循环次序进行重排,以及按照矩阵乘或向量矩阵乘的输入要求对特征图进行重排。标准的数据变形流程如图11所示。[0065]在algorithmzoo中,通过配置不同参数的reshape命令,可以实现不同的特征图转换操作。该算子还可以与其他算子结合,实现更复杂的功能。例如,反卷积运算等。[0066]在另一个实施例中,所述反卷积计算控制模块dconv支持通用反卷积运算,或者是针对特定算子进行的优化计算,其中,针对特定算子进行的优化计算的整体处理步骤如下:第一、在离线时将权重数据进行变换,拆分成4个独立的部分;第二、将输入特征图通过reshape指令,将输入特征图也拆分成4个独立的特征图;第三、分别对所述4个独立部分的权重数据和4个独立的特征图进行传统卷积运算,得到4个计算结果;第四、将所述4个计算结果进行重组,得到反卷积运算的结果。[0067]就该实施例而言,反卷积(deconvolution)运算与传统卷积类似,都是采用一个通用模板对特征图进行逐点匹配。与传统卷积不同的是,反卷积并非将模板作用在输入特征图上,将多点输入的计算结果进行求和,而是将模板作用在输出特征图上,在输出的各个节点上进行累加。当卷积stride=1时,卷积与反卷积可以等效为相同的运算;当stride大于1时,反卷积与卷积有所区别。该硬件设计支持两种反卷积运算方式,一种是通用反卷积运算,一种是针对特定算子进行的优化计算。对于任意stride的反卷积运算,可以首先对输入特征图进行差值变换,然后采用传统卷积运算来得到最终的反卷积结果。特别的,对于kernel大小为3x3,stride=2的反卷积运算,可以将其转化为4个普通的卷积运算,并将结果进行reshape操作,从而得到最终的反卷积结果。[0068]通用反卷积的处理流程如下:首先在离线时将权重数据进行变换,以适应传统卷积运算。之后,将输入特征图通过reshape指令,在每个点的所有通道后插入特定数量的0,或者复制当前点的所有通道。最后,将变换后的特征图和权重送入传统卷积算子中,完成运算,得到反卷积计算结果。[0069]上述计算方法由于出现了大量的0值,矩阵较为稀疏,有很大的优化空间。本硬件设计针对kernel大小为3x3、stride为2的反卷积运算进行专门优化。将符合上述特点的反卷积进行拆解,如图12(a)至图12(b)所示。由于3x3的卷积窗在遍历充满规则0值得稀疏输入特征图时,会出现4种典型的场景,分别是四周4个点有非零值,上下边缘2个点有非零值,左右边缘2个点有非零值,中心1个点有非零值。同时将权重按照对应的方式进行拆解,可以得到4种独立的卷积运算。[0070]优化后的反卷积运算整体处理流程如图13所示,首先在离线时将权重数据进行变换,拆分成4个独立的部分,以适应优化后的计算。之后,将输入特征图通过reshape指令,将输入特征图也拆分成4个独立的特征图。然后,分别对着4个部分进行传统卷积运算。最终,将这4个部分进行重组,得到反卷积运算的结果。[0071]在algorithmzoo中,反卷积以拆分后的reshape与conv算子存在。在上层处理程序中进行顺序调度,即可以实现这两种反卷积操作。[0072]在另一个实施例中,该硬件设计应用于卷积神经网络计算或者应用于具有并行计算需求的调度计算。[0073]在另一个实施例中,通过所述risc-v处理器控制sysregisters的方式来控制algorithmzoo包括的模块完成相应的计算任务。[0074]就该实施例而言,卷积神经网络计算架构具有可扩展性:该计算结构中,通过rsic-v控制sysregisters的方法来控制“algorithmzoo”的模块完成相应计算任务;可以对这个计算结构中的该控制方式进行改变,比如通过自定义指令集的方式来控制调度“algorithmzoo”中的模块完成计算,从而进一步提高整个架构的编程灵活性。[0075]“algorithmzoo”也具有可扩展性:目前的“algorithmzoo”中包括trans计算、conv计算、dwc计算、dconv计算、pooling计算、reshape计算,还可以向“algorithmzoo”中添加更多的计算类型控制模块,该硬件设计具有很强的计算算法可扩展性。[0076]在另一个实施例中,对于新的卷积神经网络算法,先将其中的算子进行抽象后再将新的算子计算控制加入到algorithmzoo中,来完成对新的卷积神经网络算法的支持。[0077]就该实施例而言,卷积神经网络计算具有可扩展性:对于新出现的神经网络算法,可以将其中的算子进行抽象,新的算子计算控制只需要加入到“algorithmzoo”中,即可完成对新神经网络算子的支持,进而支持新的神经网络算法;对于没有新算子,或者原有设计本身就支持的神经网络,只需要修改risc-v的计算控制流程和参数,即可完成对原有支持网络不同特性的支持。[0078]在另一个实施例中,该硬件结构在fpga上面具体实现的过程。[0079]本硬件设计,部署的硬件板卡是ultra96。ultra96是基于linaro96boardsconsumeredition(ce)规范、基于arm的xilinxzynqultrascale+tmmpsoc开发板。该电路板主fpga芯片是xilinxzynqultrascale+mpsoczu3ega484,板卡具有micron2gb(512mx32)lpddr4内存,我们安装了16gbmicrosd。[0080]ultrascale+mpsoczu3eg的主要结构如图14所示。主要包括ps(processingsystem)、pl(programmablelogic)。其中ps主要包括arm处理器和ddrcontrol控制器。我们的基于“algorithmzoo”进行调度计算的通用硬件设计就部署在pl中,用标识。ps和pl、arm和ddrcontrol模块均通过axi总线进行互联。[0081]xilinx公布的zu3eg资源情况如表1:[0082]资源类别lut(k)dsp(个)ram36k(个)资源数量71360216[0083]表1[0084]zu3eg共有71k的lookuptable(lut),360个dsp,216个36kram。我们在该芯片上部署本硬件结构所占用的资源如表2所示:[0085]资源类别lut(k)dsp(个)ram36k(个)资源数量1016064资源占比(%)14.1%44.4%29.6[0086]表2[0087]占用lut数量为10k,占用dsp数量160个,占用36kram的数量为64个。其中lut占用,在整个芯片的lut资源中占比为14.1%;dsp占用在整个芯片中为44.4%;36kram占用在整个芯片中占比为29.6。而算力在200mhz时,可以达到200gops。[0088]shufflenetv2神经网络的主干结构如表3。主要由conv1卷积层、maxpool池化层、计算阶段stage2(包含1个stride为2的卷积层重复计算1次,1个stride为1的卷积层重复计算3层)、计算阶段stage3(包含1个stride为2的卷积层重复计算1次,1个stride为1的卷积层重复计算7次)、计算阶段stage4(包含1个stride为2的卷积层重复计算1次,1个stride为1的卷积层重复计算3次)和最终的conv5卷积层。[0089]计算层输出大小卷积核尺寸步长循环次数image224×224ꢀꢀꢀconv1112×1123×321maxpool56×563×321stage228×282128×2813stage314×142114×1417stage47×7217×713conv57×71×111[0090]表3[0091]其中,对于stage2、stage3、stage4,这些卷积都由图15(c)至图15(d)的计算结构构成。[0092]其中,计算结构图15(c),先进行一次chanelsplit操作,将输入featuremap的按照通道均分,一半送给左分支,一半送给右分支;右侧分支包含1个1×1的conv卷积层、1个3×3的depthwiseconv卷积层、1个1×1的conv卷积层;最终将两个分支的结果进行一个拼接concat操作,之后进行通道洗牌(channelshuffle)操作,然后输出到下一个计算stage。[0093]计算结构图15(d),直接将输入featuremap分别送个左右分支,左侧分支包含1个3×3的stride为2的depthwiseconv操作、1个1×1的conv操作;右侧分支包含1个1×1的conv卷积层、1个3×3的stride为2的depthwiseconv卷积层、1个1×1的conv卷积层;最后将两个分支计算的结果进行一个拼接concat操作,之后进行通道洗牌(channelshuffle)操作,然后输出到下一个计算stage。[0094]对于channelsplit、channelconcat、channelshuffle操作,使用trans计算,将memory中的数据存储到不同位置就可以实现;对于conv操作直接使用硬件中对应的conv计算即可;对于depthwiseconv,直接使用硬件中对应的dwc计算即可完成。因此对于shufflenet这样的网络,其主要计算过程conv1、maxpooling、stage2、stage3、stage4和conv5均可以用本硬件设计,直接实现对应的函数计算。然后把这些计算再用函数的形式定义,此处定义为这样5个函数:shufflenet_conv1()、shufflenet_maxpooling()、shufflenet_module_c()、shuffenet_module_d()、shufflenet_conv5()。其中shufflenet_conv1()函数主要实现conv1的计算调度,shufflenet_maxpooling()函数主要实现maxpooling的计算调度,shufflenet_module_c()函数主要实现上图15(c)的计算结构,shufflenet_module_d()函数主要实现上图15(d)的计算结构。[0095]有了对应的软件代码计算实现,risc-v处理器和本硬件设计之间计算控制可以用图16简要描述。risc-v处理器中通过编程,主要调度shufflenet_conv1()、shufflenet_maxpooling()、shufflenet_module_c()、shuffenet_module_d()、shufflenet_conv5()的函数实现,而shufflenet_conv1()、shufflenet_maxpooling()、shufflenet_module_c()、shuffenet_module_d()、shufflenet_conv5()内的计算又由algorithmzoo中的控制调度模块实现。[0096]risc-v处理器(不限于risc-v结构,其他处理器也可以)中,采用如图17所示的程序设计,就可以完成整个shufflenetv2的计算调度控制。其中repeat_num代表计算过程中stage计算的重复次数,n为表3中stage重复计算次数值。[0097]完成shufflenetv2神经网络部署之后,实际测试完成输入图像时640×360分辨率,实际处理帧率为53帧每秒;整个板子的功耗为9.3w。[0098]尽管以上结合附图对本公开的实施方案进行了描述,但本公开并不局限于上述的具体实施方案和应用领域,上述的具体实施方案仅仅是示意性的、指导性的,而不是限制性的。本领域的普通技术人员在本说明书的启示下和在不脱离本公开权利要求所保护的范围的情况下,还可以做出很多种的形式,这些均属于本公开保护之列。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1