一种嵌入式高性能RTK算法内存空间定量优化分配方法转让专利

申请号 : CN201410849666.4

文献号 : CN104503921B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 何盼王一皓刘刚谭春

申请人 : 中国科学院重庆绿色智能技术研究院

摘要 :

本发明涉及一种嵌入式高性能RTK算法内存空间定量优化分配方法,属于嵌入式软件优化领域。该方法在DSP或ARM芯片内存资源有限的环境下,通过对芯片内存储空间和芯片外存储空间对算法运行性能影响的定量分析,建立算法存储空间的优化模型并求解获得近似最优的芯片存储空间分配方案,实现快速解算RTK算法所需内存资源在芯片内存储以及芯片外存储之间的优化分配。本发明提供的一种嵌入式高性能RTK算法内存空间定量优化分配方法,在嵌入式系统芯片存储资源有限的前提下能够提高RTK算法性能,降低整体芯片能耗;能够减少程序员主观判断造成的内存分配错误,同时也能减少内存分配试验的次数,避免对分配方式进行手动的遍历搜索。

权利要求 :

1.一种嵌入式高性能RTK算法内存空间定量优化分配方法,其特征在于:该方法包括以下步骤:步骤一:分析内存空间分配的优化模型,所述优化模型如下所示:

其中,T表示算法的单次运行时间;g表示算法在片内存储中所占用的存储空间;G0表示片内存储所允许使用的存储空间;f0代表算法要求的解算频率;集合{N}为被放入片内存储的变量编号集合,j∈{N};gj为每个被放入片内存储的变量所需存储空间大小;Tj为变量被放入片内存储中运行对最终算法运行时间的影响;G0与f0为已知常量,f1与f2为与变量编号集合相关的函数;

步骤二:初始化统计并确立优化模型,具体包括以下步骤:1)静态内存统计;具体包括以下步骤:(1)统计片外存储和片内存储允许程序可占用空间的大小,分别为Go和G1;(2)对算法结构进行分析,算法各个步骤中所有可分离存储的变量xi,组成变量集{xi},1≤i≤n,其中n为可分离的变量个数,同时计算矩阵变量xi在运行过程中所占用的存储空间大小gi;

(3)如果gi>Go成立,则将该变量从变量集中删除,不对其内存空间进行分配;

2)动态内存和性能统计;

(1)将可分离的变量{xi}移动至片外存储中;同时运行RTK算法多次,统计算法单次执行平均时间T0;

(2)将变量集中的每个变量xi依次移动至片内存储中,同时运行RTK算法多次,计算RTK算法执行的平均时间Ti,统计单个变量占用内存量以及运行时间减少量ΔTi=T0-Ti,直至所有变量移动和统计完成;

3)通过统计变量建立内存及性能约束下的优化模型;

所述优化模型如下所示:

其中,算法整体运行时间T与片内存储的占用量g均为估计值;

步骤三:求解优化模型并获得分配方案,具体包括以下步骤:

1)定义二维矩阵用于存储计算过程中的子问题中间变量mik,其中1≤i≤n,1≤k≤G0,通过以下公式计算mik:

2)计算动态规划最优解所对应的变量集合{I};设变量k=G0,i=0,{I}=0,如果mik=mi+1,k,则{I}={{I},i};否则k=k-gi;进一步i=i+1,重复执行以上操作直到i=n;

3)根据ΔTj/gj(j∈{I})的比值对{I}中的值进行降序排列,得到分配方案组合;

步骤四:验证并确定最终方案,具体包括以下步骤:

1)将可分离变量均置于外部存储中,定义已选入片内存储的变量集合{N}=0,k=G0,统计变量集合{xi}此时所占用的平均存储空间G:若G≤G0,则将所有变量{xi}放入片内存储中,更新变量集合{N}={I},跳转至步骤3);

否则跳转至步骤2);

2)根据排序顺序从集合{I}中依次取出变量索引值j,将第j个变量从片外存储移入片内存储中,k=k-gj,{N}={{N},j},运行RTK算法,统计算法单次执行平均时间T,判断当前算法所需的计算频率f0,如果T≤1/f0,则不需要继续对该算法性能进行优化,内存空间分配方法退出,否则跳转至步骤3);

3)如果{N}={I}或k

说明书 :

一种嵌入式高性能RTK算法内存空间定量优化分配方法

技术领域

[0001] 本发明属于嵌入式软件优化领域,涉及一种嵌入式高性能RTK算法内存空间定量优化分配方法。

背景技术

[0002] 随着电子信息产业的发展,嵌入式系统的应用已逐渐渗透到工业控制、定位导航、移动终端等多个领域。在定位导航领域中,基于全球卫星定位导航系统的高精度定位设备是测量测绘、工程放样、飞机定位中必不可少的设备。由于该设备一般应用于野外作业,嵌入式系统及基于芯片的定位算法是其运行的关键要素。实时动态差分法(RTK)作为一种新兴的测量方法,采用了载波相位动态实时差分方法,能够在野外实时得到厘米级定位精度,是目前高精度定位测量的主要算法。而在实际应用中,RTK算法对计算资源的要求较高:一方面,动态测量环境需要RTK算法具备较高的性能,其固定解的输出频率在1Hz~20Hz范围内;另一方面,RTK算法本身涉及较多高维浮点数矩阵运算且矩阵维数不定,在运算过程中需要消耗较多的存储资源。由于嵌入式系统中的CPU及内存资源有限,RTK算法在嵌入式系统中的实现常常受到一定制约。
[0003] 针对一般的广泛算法,早期研究主要关注硬件途径的优化方法,从软件代码本身出发进行优化主要集中在编译级、源程序级以及算法优化中。编译级优化涉及到改变代码的语言以及组成方式,其优化空间有限;算法级优化能够提高算法的运行性能,但RTK算法作为目前较为成熟的定位算法,其定位步骤已基本确定,算法级优化空间也不大;源程序级优化介于上述两者之间,可对算法的存储空间、语句执行顺序进行优化,具有较大发展空间。针对特定的RTK算法,现有技术未对其在嵌入式系统中的实现代码优化进行讨论。在RTK算法中涉及到比较频繁的滤波、最小二乘等方法,其中矩阵的乘除、搜索等操作具有较高的时间复杂性,是影响RTK算法效率的主要因素。对该部分代码进行优化,语句的执行顺序的调整对其影响不大,但算法相关的矩阵在片内和片外的存储位置将对算法的执行造成较大影响。但卫星接收机中常用的ARM或DSP芯片存储有限,无法将与算法相关的所有矩阵均放入片内存储中。虽然有技术提到将运算较为频繁的矩阵放入芯片内部存储,将其他矩阵放入片外DDR存储中,但对频繁运算的矩阵的判断仅限于直观定性分析,未提出定量的判断准则,对内存空间的分配划分或者极大的依赖于程序员的主观判断结果,或者需要程序员的反复测试,可能造成判断不准,无法达到存储空间分配的优化效果。

发明内容

[0004] 有鉴于此,本发明的目的在于提供一种嵌入式高性能RTK算法内存空间定量优化分配方法,该方法从快速解算RTK算法结构出发,通过将不同的算法矩阵进行分离存储,改变算法矩阵的存储位置,达到提高RTK算法性能,降低整体芯片能耗的目的。
[0005] 为达到上述目的,本发明提供如下技术方案:
[0006] 一种嵌入式高性能RTK算法内存空间定量优化分配方法,该方法包括以下步骤:
[0007] 步骤一:分析内存空间分配的优化模型;所述优化模型如下所示:
[0008] Min T=f1(Tj),g=f2(gj)
[0009] s.t.g≤G0,
[0010] s.t.T≤1/f0
[0011] 其中,T表示算法的单次运行时间;g表示算法在片内存储中所占用的存储空间;G0表示片内存储所允许使用的存储空间;f0代表算法要求的解算频率;集合{N}为被放入片内存储的变量编号集合,j∈{N};gj为每个被放入片内存储的变量所需存储空间大小;Tj为变量被放入片内存储中运行对最终算法运行时间的影响;G0与f0为已知常量,f1与f2为与变量编号集合相关的函数;
[0012] 该方法通过内存空间分配的优化模型将对算法性能有较大影响的变量放入片内存储中,而将其他变量放入片外存储中以降低算法运行的时间,提高其性能并达到RTK解算频率的要求;
[0013] 步骤二:初始化统计并确立优化模型;
[0014] 步骤三:求解优化模型并获得分配方案;
[0015] 步骤四:验证并确定最终方案。
[0016] 进一步,所述步骤二具体包括以下步骤:
[0017] 1)静态内存统计;具体包括以下步骤:(1)统计片外存储和片内存储允许程序可占用空间的大小,分别为Go和G1;(2)对算法结构进行分析,算法各个步骤中所有可分离存储的变量xi,组成变量集{xi},1≤i≤n,其中n为可分离的变量个数,同时计算矩阵变量xi在运行过程中所占用的存储空间大小gi;(3)如果gi>Go成立,则将该变量从变量集中删除,不对其内存空间进行分配;
[0018] 2)动态内存和性能统计;
[0019] (1)将可分离的变量{xi}移动至片外存储中;同时运行RTK算法多次,统计算法单次执行平均时间T0;
[0020] (2)将变量集中的每个变量xi依次移动至片内存储中,同时运行RTK算法多次,计算RTK算法执行的平均时间Ti,统计单个变量占用内存量以及运行时间减少量△Ti=T0-Ti,直至所有变量移动和统计完成;
[0021] 3)通过统计变量建立内存及性能约束下的优化模型;
[0022] 所述优化模型如下所示:
[0023]
[0024] s.t.g≤G0,
[0025] s.t.T≤1/f0
[0026] 其中,算法整体运行时间T与片内存储的占用量g均为估计值。
[0027] 进一步,所述步骤三中求解优化模型采用动态规划方法,具体包括以下步骤:
[0028] 1)定义二维矩阵用于存储计算过程中的子问题中间变量mik,其中1≤i≤n,1≤k≤G0,通过以下公式计算mik:
[0029] ;
[0030]
[0031] 2)计算动态规划最优解所对应的变量集合{I};设变量k=G0,i=0,{I}=0,如果mik=mi+1,k,则{I}={{I},i};否则k=k-gi;进一步i=i+1,重复执行以上操作直到i=n;
[0032] 3)根据△Tj/gj(j∈{I})的比值对{I}中的值进行降序排列,得到分配方案组合。
[0033] 进一步,所述步骤四具体包括以下步骤:
[0034] 1)将可分离变量均置于外部存储中,定义已选入片内存储的变量集合{N}=0,k=G0,统计变量集合{xi}此时所占用的平均存储空间G:
[0035]
[0036] 若G≤G0,则将所有变量{xi}放入片内存储中,更新变量集合{N}={I},跳转至步骤3);否则跳转至步骤2);
[0037] 2)根据排序顺序从集合{I}中依次取出变量索引值j,将第j个变量从片外存储移入片内存储中,k=k-gj,{N}={{N},j},运行RTK算法,统计算法单次执行平均时间T,判断当前算法所需的计算频率f0,如果T≤1/f0,则不需要继续对该算法性能进行优化,内存空间分配方法退出,否则跳转至步骤3);
[0038] 3)如果{N}={I}或k
[0039] 本发明的有益效果在于:当片内存储空间无法满足RTK算法变量存储的需求时,本发明提供的一种嵌入式高性能RTK算法内存空间定量优化分配方法对算法变量在片内和片外存储空间中进行分配,通过建立优化模型,在保障不超出片内存储的约束下,提高算法性能,使其能够满足RTK快速解算频率的需求。本发明提供的一种嵌入式高性能RTK算法内存空间定量优化分配方法,与定性的内存移动方法相比,能够减少程序员主观判断造成的内存分配错误,同时也能减少内存分配试验的次数,避免对分配方式进行手动的遍历搜索。

附图说明

[0040] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步的详细描述,其中:
[0041] 图1为本发明所述方法的流程图;
[0042] 图2为方法初始化以及模型建立流程图;
[0043] 图3为模型求解及分配方案确定流程图。

具体实施方式

[0044] 下面将结合附图,对本发明的优选实施例进行详细的描述。
[0045] 本发明的技术方案是通过建立芯片存储空间和算法运行性能间的优化模型并求解获得最优的芯片存储空间分配方案,包括以下步骤:
[0046] 1.分析内存空间分配的优化模型:该内存分配方法的思想在于在片内存储允许的情况下,尽可能将对算法性能有较大影响的数组、矩阵等变量放入片内存储中,而将其他变量放入片外存储中以降低算法运行的时间,提高其性能并达到RTK解算频率的要求:
[0047] Min T=f1(Tj),g=f2(gj)
[0048] s.t.g≤G0  (1)
[0049] s.t.T≤1/f0
[0050] 其中j∈{N}
[0051] 其中,T表示算法的单次运行时间,g表示算法在片内存储中所占用的存储空间,G0表示片内存储所允许使用的存储空间,f0代表算法要求的解算频率,集合{N}为被放入片内存储的变量编号集合,gj为每个被放入片内存储的变量所需存储空间大小,Tj为变量被放入片内存储中运行对最终算法运行时间的影响。在该模型中,G0与f0为已知常量,f1与f2为与变量编号集合相关的函数,所以本方法主要通过求解{N}获得变量在片内存储与片外存储划分的最优集合,保持存储约束的情况下获得性能最大化。
[0052] 2.参数初始化:为求解步骤1中所示的优化方程并获得最优分配方案,首先需要统计优化方程中的常量值以及运行时间、内存与变量选择的函数关系,包括以下内容:
[0053] ①静态内存统计:首先统计片外存储和片内存储允许程序可占用空间的大小,分别设为Go和G1。其次对算法结构进行分析,判断算法各个步骤中所有可分离存储的存储结构、数组、矩阵等并变量xi,组成变量集{xi},1≤i≤n,其中n为可分离的变量个数,同时计算矩阵变量xi在运行过程中所占用的存储空间大小gi。如果gi>Go成立,则将该变量从变量集中删除,不对其内存空间进行分配。
[0054] ②动态内存、性能统计:将可分离的数组、矩阵等变量{xi}均置于外部存储中,同时运行RTK算法多次,统计以及算法单次执行平均时间T0。此后对变量集中的每个变量xi执行以下操作:将变量xi放入片内存储中,变量集中的其他变量均置于片外存储中,运行RTK算法多次,计算此时RTK算法执行的平均时间Ti,计算该时间与初始时间的差值△Ti=T0-Ti。
[0055] ③确立优化模型:根据上述步骤的测试,建立待求解的优化模型为:
[0056]
[0057] 其中,算法整体运行时间T与片内存储的占用量g均为估计值,可用于分配方案的求解,但不适用于实际性能和存储量的计算。由于算法性能的优化是不断循环深入的过程,所以在该模型求解中将内存占用量g的优化作为主要目标。
[0058] 3.求解优化模型获得内存分配方案:为求解步骤2中所示的优化模型,采用动态规划方法:
[0059] ①定义二维矩阵用于存储计算过程中的子问题中间变量mik,其中1≤i≤n,1≤k≤G0,通过以下公式计算mik:
[0060]   (3)
[0061]
[0062] ②计算动态规划最优解所对应的变量集合{I}:假设变量k=G0,i=0,{I}=0,如果mik=mi+1,k,则{I}={{I},i};否则k=k-gi。同时i=i+1,重复执行以上操作直到i=n。
[0063] ③得到分配方案组合:根据△Tj/gj(j∈{I})的比值对{I}中的值进行降序排列。
[0064] 4.验证并确定方案:实验变量集合{I}并获得最终分配方案{N}。
[0065] ①根据步骤1的措施,将可分离的数组、矩阵等变量均置于外部存储中,定义已选入片内存储的变量集合{N}=0,k=G0。统计变量集合{xi}此时所占用的平均存储空间G:
[0066]
[0067] 假如G≤G0成立,则将所有变量{xi}放入片内存储中,更新变量集合{N}={I},进入步骤③,否则执行下一步骤。
[0068] ②根据排序顺序从集合{I}中依次取出变量索引值j,将第j个变量从片外存储移入片内存储中,k=k-gj,{N}={{N},j}。运行RTK算法,统计算法单次执行平均时间T,判断当前算法所需的计算频率f0,如果T≤1/f0,则不需要继续对该算法性能进行优化,内存空间分配方法退出,否则进入下一步骤。
[0069] ③如果{N}={I}或实际片内存储无剩余空间即k
[0070] 实施例
[0071] 本实施例采用DSP6748芯片作为RTK算法的解算芯片,为对技术方案的执行进行简要说明,本例主要选取双频RTK算法中的卡尔曼滤波步骤进行内存性能的优化。该芯片内部可用于算法局部变量的存储为G0兆,同时采用DDR芯片作为外部存储,存储空间为G1兆。算法要求执行频率为10Hz,将所有算法变量置于DDR中算法执行时间为T>100ms。
[0072] 1.初始化统计及建立优化模型(图2):卡尔曼滤波的主要步骤为
[0073] 卡尔曼滤波状态更新操作:
[0074]
[0075]
[0076] 卡尔曼滤波预测操作:
[0077]
[0078]
[0079]
[0080] 该过程主要采用了11个实数变量矩阵,矩阵向量类型为双精度浮点数。假设此时用于计算的卫星颗数为w,矩阵大小分别为:
[0081]
[0082] 假设11个矩阵的大小均不超过G0,将11个矩阵依次单个移入片内存储中,得到可节约的算法运行时间分别为△T1到△T11。建设建立优化模型如式(2),即从1到11个变量中选择适当子集满足 同时 最小。
[0083] 2.求解优化模型并获得分配方案(图3):采用动态规划方法计算获得子集={1,2,4,5,8,9,10,11},根据△Tj/gj比值降序排列后为{9,5,4,8,2,11,1,10}。从集合{I}中依次选择对应的矩阵放入片内存储中,并运行RTK算法测试当前运行时间是否达到解算频率要求。当放入矩阵9,5,4,8,2,11后测试得到此时T≤100ms而仅放入矩阵9,5,4,8,2时运行时间T>100ms,故此时得到需要放入片内存储的矩阵分别为 F, Kr,k,Hr,k,vr,k,除此之外的其他矩阵可放入片外存储中。
[0084] 最后说明的是,以上优选实施例仅用以说明本发明的技术方案而非限制,尽管通过上述优选实施例已经对本发明进行了详细的描述,但本领域技术人员应当理解,可以在形式上和细节上对其作出各种各样的改变,而不偏离本发明权利要求书所限定的范围。