本发明涉及一种slam(simultaneouslocalizationandmapping,即时定位与建图)运算装置和方法,用于根据不同需求对slam算法的运算进行加速。
背景技术:
在未知的环境中自主导航是移动机器人(例如无人地面和空中载具等)的一个基本能力。slam任务中即时定位与建图的定位主要完成机器人的位置在地图中的确定工作,建图的主要任务是是机器人根据环境建立对应环境的地图。在缺乏位置环境初始地图的情况下这就需要机器人能够实时地构建地图并且利用地图完成自身的定位,完成这项任务所需要的slam算法随之产生。然而在移动机器人有限的计算能力和严格的功耗要求下精确地实现slam算法是现实中所面临的最大问题之一。首先,slam算法因为有实时性的要求因而需要极高的运算速度来完成类似帧与帧间短时间的大量运算,其次slam算法由于受到移动机器人的限制对功耗有着苛刻的要求,最后slam算法种类众多运算类型较广,因此设计的加速器需要支持各种类型的slam算法。
在现有技术中,一种实现slam算法的方式是直接在通用处理器(cpu)上进行运算,该方法的缺点之一是单个通用处理器的运算性能较低,无法满足常见slam运算实时性需求。而多个通用处理器并行执行时,通用处理器之间相互通信又成为了性能瓶颈。
另一种实现slam算法的方式是在图形处理器(gpu)上进行运算,这种方法通过使用通用寄存器堆和通用流处理单元执行通用simd指令来支持上述算法。虽然该方法是专门用来执行图形图像运算的设备,但是由于slam算法运算的复杂性,该方法并不能够很好的支持其后续运算,也就是无法对slam算法的整体运算进行有效加速。同时,gpu片上缓存太小,更无法满足大量的slam算法的运算需求。此外,由于在实际应用领域中,将cpu或gpu等类似的结构移植到机器人上是一件比较困难的事情,所以,尚且没有一款实用性强、灵活性高的专用slam硬件加速器结构。我们设计的装置是一款符合要求的专用slam硬件加速器,对应的我们设计了这套装置的方法,它可以被设计成专用芯片、嵌入式芯片等硬件,从而可以应用到机器人、计算机、手机等应用中。
技术实现要素:
(一)要解决的技术问题
本发明的目的在于,提供一种slam硬件加速器的装置和方法。
(二)技术方案
根据本发明的一方面,提供一种slam硬件加速器的装置,包括:
存储部分,用于存储输入数据、临时运算结果数据、最终运算结果数据、运算过程所需的指令集和/或算法参数数据;
运算部分,与所述存储部分连接,用于完成对slam相关算法和应用的计算;
控制部分,连接所述存储部分和运算部分,用于控制和协调存储部分和运算部分。
优选的,所述存储部分包括:
输入存储模块:用于存储输入输出数据;
中间结果存储模块:用于存储中间运算结果;
最终结果存储模块:用于存储最终运算结果;
指令存储模块:用于存储运算过程所需的指令集;和/或
缓冲存储模块:用于数据的缓冲存储。
优选的,所述运算部分包括:
针对slam相关算法和应用而设计的加速和处理slam运算的加速运算装置;
slam相关算法和应用中包含但不能由所述加速运算装置完成的其他运算的其他运算装置。
优选的,所述加速运算装置包含向量运算单元和矩阵运算单元。
优选的,所述
其他运算装置用于完成在算法和应用中使用但又不由加速运算装置完成的运算。
优选的,所述运算部分通过硬件电路实现。
优选的,所述控制部分
连接存储部分的每个模块和运算部分,控制部分由一个先进先出队列和一个控制处理器组成,先进先出队列用于存储控制信号,控制处理器用于取出待执行的控制信号,对控制逻辑进行分析后,对存储部分和运算部分进行控制和协调。
优选的,所述指令集包括:
控制操作指令类,用于选取待执行的运行指令的控制;
数据操作指令类,用于控制数据的传输;
宏运算指令类,用于完整的运算操作;
多维数据运算指令类,用于控制多维数据的运算操作;和/或
一维数据运算指令类,用于控制一维数据的运算操作。
优选的,所述控制操作指令类包括指跳转指令和分支指令,跳转指令包括直接跳转指令和间接跳转指令,分支指令包括条件分支指令。
优选的,所述宏运算指令类包括卷积运算指令或池化运算指令。
优选的,所述多维数据运算指令类用于要求运算单元执行多维数据的运算,多维数据的运算包括多维数据与多维数据间的运算,多维数据与一维向量数据间的运算以及多维数据与一维标量数据之间的运算。
优选的,所述一维数据运算指令类,用于要求运算单元执行一维数据的运算,所述一维数据包括一维向量和一维标量。
优选的,所述一维向量数据的运算包括一维向量与一维向量之间的运算,以及一维向量与标量之间的运算。
优选的,所述一维标量数据的运算包括标量与标量之间的运算。
优选的,还包括汇编器,用于在运行过程中,选择使用指令集中的指令类型。
根据本发明的另一方面,还提供根据以上任一所述装置进行slam运算的方法,在于通过存储部分的指令集由控制部分来控制数据的运输、运算和程序的运行,其中包括:
步骤一:将存储部分的输入数据运输至运算部分;
步骤二:在运算部分根据运算过程的所需的指令集执行运算;
步骤三:传输并保存运算结果数据;
步骤四:重复上述过程直至运算完毕。
(三)有益效果
本发明提供的slam硬件加速器的装置和方法,能够有效根据不同的需求对slam算法进行加速,能够适用于各种slam算法和多种不同的输入数据类型,满足不同需求的运算,具有灵活性强、可配置程度高、运算速度快、功耗低等优点。
本发明的装置和方法与现有的技术相比具有如下效果:
1)运算部分能够根据不同需求对不同输入类型的数据进行运算;
2)运算部分也可以通过缓冲存储模块实现数据的一定程度的共享,降低了数据的重用距离;
3)指令的设计支持各种基本的操作类型,使得装置的可配置性很高;
4)矩阵和向量运算单元的设计再配合标量运算单元的设计可以支持各种类型的运算,并且显著地加快运算速度;
5)运算部分和存储部分的设计以及指令的安排极大地降低了执行时的功耗。
附图说明
图1是本发明一实施例提供的slam硬件加速器的装置的结构示意图。
图2是本发明又一实施例提供的slam硬件加速器的的结构示意图。
图3是本发明一实施例提供的slam硬件加速器的标量运算单元的一个实施例的结构示意图。
图4是本发明一实施例提供的slam硬件加速器的向量运算单元的一个实施例的结构示意图。
图5是本发明一实施例提供的slam硬件加速器的矩阵运算单元的一个实施例的结构示意图。
图6是本发明一实施例提供的slam硬件加速器完成三维坐标l2范数运算的一个实施例的示意图。
图7是本发明一实施例提供的slam硬件加速器完成16维方阵矩阵乘法运算的一个实施例的示意图。
图8是本发明一实施例提供的基于扩展卡尔曼滤波方法(ekf)的slam的算法在本装置上配置实现的示意图。
图9是本发明一实施例提供的指令类型示意图。
图10是本发明一实施例提供的一种宏运算指令的应用示意图。
图11是本发明一实施例提供的一种一维数据运算指令的一个实施例。
图12是本发明一实施例提供的一种sift特征提取算法在本装置上配置实现的示意图。
图13是本发明一实施例提供的一种基于g2o框架的图优化算法在本装置上配置实现的示意图。
图14是本发明一实施例提供的一种卷积运算指令的执行流程图。
图15是本发明一实施例提供的一种图像累加指令的执行流程图。
图16是本发明一实施例提供的一种滤波运算指令的执行流程图。
图17是本发明一实施例提供的一种局部极值指令的执行流程图。
图18是本发明一实施例提供的一种二维卷积运算操作的执行流程图。
图19是本发明一实施例提供的一种一维向量点积运算的执行流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
图1是本发明一实施例提供的slam硬件加速器的装置的结构示意图。如图1所示,本加速器主要分为三个部分,控制部分、运算部分和存储部分。控制部分向运算部分和存储部分发出控制信号,来控制二者的运行,协调二者间的数据传输。存储部分用于存储相关数据,包括输入数据、中间结果、最终结果、指令、缓存等等,可以根据需求不同,对具体的存储数据内容、存储组织方式和存取调用方式进行不同的规划。运算部分包含多种运算器,用于数据的运算,包括标量运算单元、向量运算单元和矩阵运算单元的一个或多个的组合,其中,运算器能够根据不同需求对不同输入类型的数据进行运算。运算部分也可以通过缓冲存储模块实现数据的一定程度的共享,降低了数据的重用距离。
图2是本发明又一个实施例的slam硬件加速器的装置的结构示意图。如图2所示,本实施例是要求能够加速基于图像的slam算法的运算过程,减少数据交换,节约存储空间。故本装置的结构为,控制部分连接存储部分的每个模块和运算部分,由一个先进先出队列和一个控制处理器组成,先进先出队列用于存储控制信号,控制处理器用于取出待执行的控制信号,对控制逻辑进行分析后,对存储部分和运算部分进行控制和协调。存储部分分为四个模块,输入存储模块、输出存储模块、中间结果存储模块和缓存模块。运算部分主要用于加速图像处理部分的运算、云图构建的运算、图像匹配的运算和图像优化的运算,故运算单元也主要分为三个模块,标量运算模块、向量运算模块和矩阵运算模块,三个模块可以采用流水线的方式执行也可以并行地执行。
图3是本发明的一个实施例,介绍了一种可用于本装置的标量运算单元的装置示意图,其中的spe表示单独的标量运算单元。标量运算单元主要用于解决slam算法中不能用来加速的运算部分以及部分复杂的运算如三角函数运算等,同时也能解决访存一致性问题,是加速器的重要组成之一。标量运算单元所直接相关的存储模块是中间结果存储模块和缓冲存储模块。标量运算需要的操作数可以在中间结果存储模块中,也可以在缓冲存储模块中。标量运算的结果可以存放到中间结果存储模块中,也可以输出到缓冲模块中,取决于实际需要。
图4是本发明的一个实施例,介绍了一种可用于本装置的向量运算单元的装置示意图,整个向量运算单元由多个基本运算单元构成,图中vpe是向量运算的基本运算单元。向量运算单元可以用于解决slam算法中的向量运算部分和所有具有向量运算特性的运算部分,例如向量的点乘等,也可以实现高效的数据级并行和任务级并行。与其直接相关的存储模块有中间结果存储模块和缓冲模块。向量运算单元的每个基本单元可以通过配置实现并行地执行同样的操作,也可以通过配置实现不同的操作。向量运算单元所直接相关的存储模块是中间结果存储模块和缓冲存储模块。向量运算需要的操作数可以在中间结果存储模块中,也可以在缓冲存储模块中。向量运算的结果可以存放到中间结果存储模块中,也可以输出到缓冲模块中,取决于实际需要。
图5是本发明的另一实施例,介绍了一种可用于本装置的矩阵运算单元装置示意图,能够满足加速所有的矩阵运算类型以及和矩阵运算类型相似的运算类型的运算的要求,其中的mpe表示矩阵运算单元的基本运算单元。矩阵运算单元由多个基本运算单元构成,图示的情况是一个运算单元阵列。矩阵运算单元对外的数据交换模式有多种,可以是2d的交换模式也可以是1d的交换模式。同时运算单元支持内部单元之间的数据访问模式,可以极大地降低局部性数据的重用距离,实现高效地加速。与矩阵运算单元直接相关的存储模块是中间结果存储模块和缓冲存储模块。矩阵运算需要的操作数可以在中间结果存储模块中,也可以在缓冲存储模块中。矩阵运算的结果可以存放到中间结果存储模块中,也可以输出到缓冲模块中,取决于实际需要。
图6是本发明的一个实施例,介绍了一种用本装置进行三维坐标l2范数运算的流程图。假定三维坐标的三个数据存放在中间存储模块中,首先通过配置指令从中间存储模块取出操作数分别输入到向量运算单元的三个基本运算单元vpe上,三个vpe每个vpe执行的运算是乘法运算,乘法的两个操作数是取出的坐标的某个数和自身,乘法运算的结果会经过缓冲存储模块再输入到标量运算单元中,在标量运算单元中完成三个乘法运算结果的求和操作,然后执行开方运算。最后的运算结果根据需要输出到中间结果存储模块或是缓冲存储模块中。
图7是本发明的一个实施例,介绍了一种本装置进行n维方阵矩阵乘法运算的一种可行配置的流程图。例如对于n=16的情形,假设要完成矩阵a和矩阵b的乘法操作得到矩阵c,图中矩阵运算单元中的基本运算单元个数为256个,每个运算单元在运算过程中负责计算出最终结果数据,运算所需的矩阵数据存放在中间结果存储模块。运算开始先从中间结果存储模块取出a的每个操作数到缓冲存储模块,缓冲存储模块将数据按照行顺序输入到矩阵运算单元的每个基本运算单元mpe中,b矩阵的操作数也会同样被取到缓冲存储模块中,由指令调度按照列顺序分步输入到每个pe中。pe中的每个a的数和b的数会完成乘法操作,每次每个pe完成乘法操作后的结果不会送出,而是和存放在pe的寄存器中上次结果累加,这样当所有b的数输入到pe以后每个pe保存的结果就是最终得到的c矩阵的每个位置的数。最后c的数据根据需要存放到中间结果存储模块中或是留在缓冲存储模块中。
图8是本发明的一个实施例,介绍了一种本装置进行基于扩展卡尔曼滤波方法(ekf)的slam的算法的配置和运算示意图。ekf算法基本可以分为三大步,分别是computetruedata、ekfpredict(预测)和ekfupdate(更新)。在computetruedata中,通过运动模型得到真实的坐标。在ekfpredict中新的机器人的位姿通过上次的预测值和控制输入更新的机器人预测。在ekfupdate中计算与周围环境参照点的关联信息,更新预测出的位姿和协方差矩阵。computetruedata中主要涉及的运算是低维的向量处理操作如三维坐标的欧式距离运算等,因此大部分运算可以使用向量运算单元进行运算,其中还涉及到角度的三角函数运算等典型的标量运算,因此也需要在标量运算单元上进行少量的运算。ekfpredict这一步中涉及多次较大规模的矩阵操作如矩阵乘法等,为了得到较好的加速,这部分操作可以放在矩阵运算单元上执行,同时也有些较小的向量操作因此也需要向量运算单元发挥作用。ekfupdate这步操作运算种类较多,而且各种运算相互交替,例如有典型的矩阵svd(singularvaluedecomposition,奇异值分解)分解、cholesky分解等操作,这些操作由矩阵乘法、向量加减、向量范数、三角函数等细小的操作组成,同时使用到矩阵运算单元、向量运算单元和标量运算单元。从存储模块上看,基于ekf的slam算法的输入是waypoints(路径点)和landmarks(环境参照点)等点的坐标,数据量不大,因此只需要在初始时从输入存储模块中载入这些数据。在中间的运算过程中,一般情况下由于存储的设计数据量不会超过中间结果存储模块的大小,因此一般不需要与输入存储模块有频繁的数据交换,降低了能耗与运行时间。最后slam算法在输出时将计算结果输出到输出存储模块,完成整个算法的硬件配置和实现。
图9是本发明提供的指令类型示意图。
本发明的指令集包含控制操作指令类、数据操作指令类、宏运算指令类、多维数据运算指令类、一维数据运算指令类等多种类型。每种指令类又可细分为多种不同的指令,每种指令以开头的指令编码进行区分,如图9所示,在每种指令类中选择了几种具有代表性的指令及其编码并将其列出。
控制操作指令类,主要用于控制程序的运行。指令编码为jump表示跳转指令,用于执行跳转功能。根据后面的操作码的不同,可以分为直接跳转指令和间接跳转指令。指令编码为cb表示条件跳转指令,用于执行条件跳转功能。
数据操作指令类,主要用于控制数据的传输。指令编码为ld/st表示用于dram(dynamicrandomaccessmemory,动态随机存取存储器)与sram(staticrandomaccessmemory,静态随机存取存储器)中传输数据,即ld表示从dram中读取数据并载入到sram中,st表示将sram中的数据传输至dram中并进行存储。指令编码为mov表示在sram之间传输数据。指令编码为rd/wr表示用于sram与buffer(缓冲器)之间传输数据,其中rd表示从sram中读取数据到buffer,wr表示将buffer中的数据存储回sram中。宏运算指令类,作为粗粒度的数据运算操作指令,用于相对完整的运算操作。
指令编码为conv表示卷积运算指令,用于实现卷积及类卷积运算,即把输入的数据分别和相应的权值相乘并求和,并且该指令考虑到数据的局部重用性,具体的执行过程为,如图14:
s1,按照指令的要求从图像数据的起始地址开始取出图像数据,从权值数据的起始地址开始取出权值数据。
s2,将图像数据按照对应的运算要求传送到相应的多维运算单元中,将权值数据广播给多维运算单元中的每个运算元素(pe)。
s3,每个pe将输入的图像数据和对应的权值数据相乘,并和运算单元内部的寄存器内的数据相加并存储回寄存器中(该寄存器需初始化为0)。
s4,对于已经在多维运算单元中的图像数据按照多维运算单元规定的传输规则在多维运算单元内部进行传输,对于不在多维运算单元中的图像数据从buffer中读取并传输到指定的运算位置。这种方法利用了卷积运算时的数据的重用性,从而大大减少了数据的搬运次数。
s5,重复步骤s3-s4,直到该pe计算完毕,将结果输出至指令规定的存储的目的地址中保存。
s6,重新读取数据并重复上述操作,直到输出图像中的所有像素点都计算并保存完毕,指令结束。
指令编码为pool表示池化运算指令,用于实现池化及类池化运算,即对规定数目的数据求取平均值或求取最大/小值或进行降采样操作,其具体实现流程与卷积运算指令相似。
指令编码为imgacc表示图像累加指令,用于完成图像的处理并进行累加或类似的运算功能。其具体的执行过程如下,如图15:
s1,根据指令要求从图像数据的起始地址开始读取图像数据,并将多维运算单元中的所有运算元素(pe)初始化为0。
s2,每个时钟周期,将多维运算单元中的原数据依次向上传递一行,而后向多维运算单元中传递一行新的数据,并将新传入的一行与原最后一行的数据的对应列进行累加,累加结果作为新的最后一行的数据。重复操作,直到填满多维运算单元。
s3,每个时钟周期,依次将多维运算单元中的数据向右传递并累加,即第一个时钟周期,将第一列数据向右传递,第二列加上从第一列传来的数据,并保存。第二个时钟周期,第二列数据向右传递,第三列数据与第二列传来的数据相加并保存,以此类推。最终得到所需的图像的积分累加结果。
s4,保存多维运算单元中的所有数据到指令指定的目的地址,并对最下面一行和最右面一列数据进行缓存。
s5,将多维运算数据初始化为0,重新进行下一次运算,直到全部图像计算完毕。其中,需要注意的是,在后续运算时,当图像的宽度或长度超过多维运算单元的单次处理大小的时候,需在非首次运算的时候累加上缓存的数据,以保证运算结果的正确。
指令编码为box表示一种滤波指令,用于完成图像的box滤波操作。该算法的操作流程是,为了求得图像的局部矩阵之和,首先建立一个数组a,宽高与原图像相等,然后对这个数组赋值,每个元素的值a[i]赋为该点与图像原点所构成的矩形中所有像素的和,而后求得局部矩阵之后,只需要通过a矩阵的4个元素的加减操作即可完成。故该宏指令主要分为两步操作,如图16:
s1,根据指令从起始地址读取所需数据,传入到多维运算单元中对传入数据依次进行累加,并保存在规定的目的地址1中。
s2,根据指令所需的数据,从目的地址1中读取数据,对数据进行加减操作,得到滤波结果,保存到目的地址2中,即为所需的最终结果。
由于在数据累加过程中,类似于卷积运算指令,数据具有局部重用性,故该指令支持在多维运算单元内部对数据进行传输。
指令编码为localexterma表示局部极值指令,用于完成处理图像时判断局部极值的操作,即判断指定位置的数据是否是该组数据中的极值。具体而言,该宏指令主要分为两步操作,如图17:
s1,将多维运算单元中的每个pe中的寄存器值初始化为一个足够小/大的值,从数据起始地址读取数据传入到多维运算单元当中,而后每个pe对传入数据与寄存器内保存的数据进行比较运算,得到较大/小值保存回寄存器内,直到规定数据比较完毕。即每个pe中得到了指定数据流的最大/小值。
s2,根据指令,读取指定位置的数据重新传入多维数据运算单元中,每个pe比较传入该pe中的数据是否与寄存器内保存的最大/小值相同,相同输出1,不同输出0。
指令编码为countcmp表示比较操作,用于利用计数器完成比较的操作,即读取待比较数据和阈值传递到多维运算单元中,每个pe对传入的数据流依次和阈值进行比较并计数待遍历完传入的数据,输出大于或小于该阈值的数据的个数。
多维数据运算指令类,作为细粒度运算操作指令之一,主要用于控制多维数据的运算操作。多维数据包括二维以及二维以上的数据,其中包含多维数据分别与多维数据、一维向量数据、一维标量数据等进行的运算指令。以矩阵为例,mmmm,是矩阵与矩阵的乘法运算指令,属于多维数据与多维数据进行的运算指令的一种,类似的还有mmam,即矩阵与矩阵的加法运算指令;mmmv,是矩阵与一维向量的乘法运算指令,属于多维数据与一维向量数据进行的运算指令的一种,类似的还有mmav,即矩阵与一维向量的加法运算指令;mmms,是矩阵与一维标量的乘法运算指令,属于多维数据与一维标量数据进行的运算指令的一种,类似的还有mmas,即矩阵与一维标量的加法运算指令。除此之外,多维数据运算指令类还能够兼容一维数据之间的运算,例如mvmv,实现的是一维向量与一维向量的乘法运算指令,mmov实现了一维向量与一维向量的外积运算指令。
一维数据运算指令类,作为细粒度运算操作指令类之一,主要用于控制一维数据的运算操作,其中,一维数据又主要分为一维向量数据和一维标量数据两种。例如,vvmv,是一维向量与一维向量的乘法运算指令,类似的vvav,表示一维向量与一维向量的加法运算指令。vvms,是一维向量与一维标量之间的乘法运算指令。ssss,表示一维标量运算的指令,用于完成求取该一维标量的开方运算。ssrs,表示用于求取随机数的运算。mv是移动操作指令,用于运算过程中取寄存器或立即数。
图10是本发明提供的一种宏指令操作conv在一种硬件结构上完成一个二维卷积运算操作的实施例。二维卷积的运算过程是,对于一个二维输入图像,有一个卷积核在输入图像上滑动,每次卷积核对当前位置覆盖的二维数据图像的数据进行滤波,即卷积核和被覆盖的图像数据进行对位相乘,而后将香橙后的结果进行累加,记得到所需的滤波结果。而后,卷积核滑动至下一位置,重复运算直到全部运算完成。由于卷积操作的应用十分广泛,而且大量出现,所以本专利设计的卷积操作可以充分利用硬件结构上的数据可重用性,将数据进行合理的分配和传输,将硬件的利用率提高到最大。为加强说明,附以一具体的实施例,如图10所示。在本实施例中,定义输入为一个图像或者矩阵,输出也是一个图像或者矩阵,均以分块的形式存储在指定的位置。硬件结构以一个矩阵操作单元(mpu)为例,该操作单元中包含m*n个矩阵运算部件(mpe),每个运算部件内含有所需要的运算器和用于暂存中间数据的寄存器。如图18具体运算过程为:
s1,读取一条卷积操作的宏指令,由操作编码和操作数组成。指令操作编码为conv,表示进行的是卷积运算。操作数共有7个,分别为da、sa1、sa2、ix、iy、kx、ky,其中,da表示目的地址,即输出结果的存储地址;sa1为起始地址1,表示读取待运算的图像的起始地址;sa2为起始地址2,表示读取待运算的卷积核的起始地址;ix和iy分别表示图像x方向和y方向上大小,即通过这两个变量定义了待运算的图像的大小;kx和ky分别表示卷积核的大小。
s2,根据指令,把输入图像数据从sram中读取到buffer中的对应位置,等待运算,这里要求mpu中的每一个mpe计算输出图像的一个像素点。
s3,向每个mpe中传输相应的输入的图像数据。由于每个mpe中运算时的卷积核相同,故采用广播的方式将卷积核广播给每一个mpe。而后每个mpe将传入的输入数据和对应的卷积核数据进行相乘,而后保存到各自mpe的寄存器之中。
s4,由于卷积操作的运算数据具有局部重用性,故下一拍待运算的输入图像数据即为右边的mpe当前拍进行运算的数据,故将输入图像数据依次向左传递,最右边的mpe所需的数据不在mpu中,故需重新从buffer中读取。待数据传输完毕,每个mpe将输入图像数据和对应的卷积核数据进行相乘,并将所得的积与该mpe的寄存器中的数据进行累加,再次存入寄存器中。
s5,重复步骤s4,直到所有卷积核数据和对应的输入图像数据运算完毕,即得到了每个mpe得到了输出图像的1个像素点,将结果输出并保存到指令中目的地址定义的位置。
s6,重复上述步骤,直到输出图像中所有像素点计算完毕。
利用宏指令可以充分利用数据的局部重用性,大大减少了数据搬运次数,提高了运算效率。譬如,当m=3,n=3时,该mpu能够同时进行9个像素点的卷积运算,耗时9个时候时钟周期。
类似的。我们提供了大量的宏指令操作,如卷积,虽然其完成的操作能够有其他类型的指令操作完成,但是由于宏指令操作的存在,能够使得操作指令更加简洁高效。另外,宏指令能够很好的处理数据的重用问题,能够提高数据的利用率,减少数据的传输,降低功耗,提高性能。
图11是本发明提供的一种多维数据运算指令的一个实施例,实现了一维向量和一维向量间的点积运算,类似的,向量乘法、向量加法、向量比较等运算都是采用类似的运算流程。每个向量运算单元(vpu)包含mm个向量运算部件(vpe),每个vpe能够完成一对输入数据的运算。详细的运算流程如图19,首先将mm对待运算的数据分别输入给mm个vpe,分别执行一次乘法之后,存入vpe内部的寄存器中,同时输入mm对待运算的数据分别输入给mm个vpe,分别执行一次乘法之后,将乘积与内部寄存器内暂存的上一次的乘积进行累加,累加结果再次送入内部寄存器内暂存。重复上述操作直到所有输入都已被计算完毕。而后将向量运算单元的结果从最右段开始左传,最右端的vpe直接将寄存器内的数据传递给其左边的vpe,当其左边的vpe接收到从右边传来的数据后,与自己内部的寄存器内的数据进行累加后,将累加结果继续左传,依次类推。最终,点积运算结果将会在最左端的vpe中得到,按要求输出即可。
图12是本发明提供的一个实施例,介绍了在sift特征提取算法在本装置上的配置实现的过程。sift(scale-invariantfeaturetransform)特征提取算法是rgbdslam算法的关键运算之一。第一步是建立图像金字塔操作gaussianpyramid,包含了图像平滑等基本的图像操作,在本装置中可以进一步分解为多个convolution(卷积)和pooling(降采样)的操作。接下来进行高斯差分dog的操作,这个操作可以看做是在图像金字塔塔的不同面之间做矩阵的减法操作。一旦dog操作完成,局部极值搜索的操作可以通过调用宏指令localextrema来完成。搜索局部极值后进行特征点的确定,特征点滤波(kpfilter),这一步操作由大量的向量和标量运算组成,例如向量点乘、矩阵行列式等。最后通过多个向量和标量的运算操作计算邻近点的直方图来计算出关键点的描述子(keypoint)。其中计算直方图操作可以通过宏指令hist完成,该操作由向量比较等向量运算操作组成。邻近像素区域的旋转操作用矩阵向量的乘法来实现。某些特殊的函数操作如exponential等主要通过标量运算单元来实现。
图13是本发明提供的一个实施例,介绍了在本装置上配置实现g2o图优化算法的示意流程图。g2o是一个解决非线性图优化问题的框架,很多典型的slam算法如rgbdslam和orbslam等基于图方法的slam算法都是以该框架为基础的。给定两个图节点的位姿约束和初始位姿,误差矩阵和雅克比矩阵的运算可以通过矩阵运算操作和向量运算操作来完成,例如矩阵的乘法和累加操作等。然后通过误差矩阵和雅克比矩阵建立一个能够优化目标函数的线性系统,这一步可以通过矩阵和向量运算单元来完成,其中也涉及包括矩阵乘法和累加等操作。然后求解这个线性系统,我们可以使用preconditionedconjugategradient(pcg)算法来实现(我们也可以通过cholesky分解的方法或稀疏矩阵的方法或上三角分解方法来实现)。pcg操作可以被分解为分块的矩阵和向量的乘法和加法操作,具体实现时可以通过宏指令pcg来实现。最后位姿的优化操作也可以通过矩阵和向量的乘法和加法等操作来完成。
本发明实施例的装置和方法可以应用于以下(包括但不限于)场景中:数据处理、机器人、无人机、自动驾驶、电脑、打印机、扫描仪、电话、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备等各类电子产品;飞机、轮船、车辆等各类交通工具;电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机等各类家用电器;以及包括核磁共振仪、b超、心电图仪等各类医疗设备。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。