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

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

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

查看更多

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

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

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

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

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

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

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

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

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

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览