嵌入式软件算法优化


在这里插入图片描述

一、算法优化原则

(1)等效原则:优化前后程序实现的功能一致;
(2)有效原则:优化后要比优化前运行速度快或占用存储空间小,或二者兼有;
(3)经济原则:优化程序要付出较小的代价,取得较好的结果。

二、算法优化方法

1.系统优化

(1)编译器优化等级配置(-O0/-O1/-O2/-O3)
(2)流水线多线程结构(pipeline)

2.算法优化(需要理解算法原理)

(1)使用快速算法
(2)算法流程和结构调整

3.代码优化

(1)定点化(Q格式/乘以10x
(2)查表
(3)除法优化(改为移位/避免多次计算同一除法)
(4)尽量减少if…else
(5)数据拷贝优化(使用快速拷贝算法/使用指针)
(6)函数调用参数个数尽量不超过4个
ARM调用时,4个以下的形参通过寄存器传递,第5个以上的形参通过存储器栈传递。如果有更多的参数调用,则可将相关的参数组织在一个结构体内,用传递结构体指针来代替参数。
(7)switch语句用法的优化
对case值按照可能性排序,将最可能发生的情况放在第一个,最不可能的情况放在最后一个,可以提高switch语句块的执行速度。
(8)少用全局变量,多用局部变量
全局变量是放在数据存储器中的,定义了全局变量,MCU就少了一个可以利用的数据存储器空间,太多的全局变量,会导致编译器 无足够的内存分配;而局部变量则大多定位于MCU内部的寄存器中。在绝大多数的MCU中,使用寄存器的操作速度比数据存储器快,指令也更灵活,有利于生成质量更高的代码,而且局部变量所占用的寄存器和数据存储器在不同的模块中可以重复利用。
(9)尽量使用小的数据类型
在所定义的变量满足使用要求的条件下,优先使用顺序为:字符型(char)>整型(int)>长整型(long int)>浮点型(float)。对除法来说,使用无符号数比有符号数会有更高的效率。在实际调用中,尽量减少数据类型的强制转换;少用浮点运算,如果运算的结果能够控制在误差之内,则可用长整型代替浮点型。
(10)自加自减
例:
优化前a=a+1、a=a-1
优化后++a、–a

4.使用硬件资源(需要熟悉芯片架构及资源)

(1)多核(多arm核/多DSP、多GPU)
(2)多线程
(3)芯片自带硬件算法(海思IVE等)
(4)异构芯片的单个DSP/GPU
(5)快速存储器(cache/DTCM/ITCM/CMX/三级缓存/乒乓buffer)+DMA

5.汇编

(1)伪汇编(intrinsic asm/VPU向量处理单元)(Neon指令/Movidius伪汇编指令)
If…else优化:判断并行的多个数据是否同时满足条件,若满足则再做相同的处理,若不满足,则以条件的结果为系数乘以算法处理的结果。
(2)汇编(最后选择)

参考文献:
https://blog.csdn.net/xuxinshao/article/details/4818212

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值