请教 W806 程序运行效率及优化问题

发布于 2022-05-04 00: 58: 18

请教一下 W806 的程序优化技巧, 我的代码之前是运行在 cortex M4 内核单片机上的, 168M 下妥妥跑完, 主要是跑语音算法, 但是同样代码移植到 W806 上连原算法的一半都跑不到, 我尝试将代码中部分 const 型参数表和样本转为普通的单精度 float 或 char 型存储, 并将程序中一些从数组中调用的参数转为固定值, 情况有所好转, 但也只跑完了一半任务.
目前所有程序只是在连接 CKLINK 的仿真状态下运行, 我不知道这是否有一定关系, 然后芯片没有挂外部 FLASH 或 PSRAM, 所有运行变量也都去掉 const 属性, 代码优化等级到 O3, 程序都是在芯片内部跑, 另外我检查了 CPU 的 cache 控制寄存器, 是处于打开状态
根据现象我觉得应该可能的原因是 CPU 的指令和数据存取速度跟不上, 或浮点运算器本身耗时过长,
当前项目完成了底层外设的移植, 并已和算法内核完成对接, 只苦于没有完成运算任务, 希望能指点下是否还有优化空间, 比如是否要将代码段或数据指定到特定的内存区域, 或者其他什么方式可以提升运行效率的. 非常感谢

查看更多

关注者
0
被浏览
1. 8k
3 个回答
ZYQ
ZYQ 2022-05-04
我已不再支持 W80X 任何相关问题的回复, 请大家不要私信, 有问题找 isme 谢谢

你的这个分析是很有道理的, 确实是这样的, 你可以去除调试器跑一下, 虽然开启了 cache, 关于你的想法将代码段放到 RAM 中是可行的, 但是需要考虑你得 RAM 是否能够容纳这么大的代码段, 可以将部分函数放到 RAM 中执行以达到加快执行效率, 如果可以的话能否放出代码, 看看能到否帮你优化下

大信
大信 认证专家 2022-05-04
硬件开发, 软件开发, 系统开发, 工程架构, 方案设计

优化有很多方法, 主要是看你代码的结构以及指令的类型:
如果你代码有较多的地址访问, 读取常量数据, 那么将代码复制到 RAM 中会有很大的速度提升. 这地地址访问是编译时产生的, 比如复杂结构体的使用, 将造成大量的间接地址的访问.

如果你代码有大量的计算, 特别是浮点计算, 以及三角函数等高级代数的计算, 那么在一些算法下, 想办法, 把算法改造成定点整数的算法, 这样使速度会加快. 如果代码中, 有大量的超函数计算, 那么可以考虑查表法, 不用调用系统的函数库.

另外就是代码指令优化, 分析代码中重复运行比较高的段落, 将此段落编为汇编代码, 然后手动优化汇编代码, 完成代码指令的优化.

使用多种方法, 可以达到提升程序运行速度与效率.

okeybomb
okeybomb 2022-05-04
这家伙很懒, 什么也没写!

非常感谢两位大佬的解答, 大概有了一定的改善思路, 还是要试试看有没有优化空间, 准备先将部分代码放到 RAM 跑试试, 再拼一下

撰写答案

请登录后再发布答案, 点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览