DSP

嵌入式下的编译器级和芯片级的优化介绍

2019-07-13 15:47发布

http://blog.sina.com.cn/s/blog_ebbe6d790102vd1x.html

最近一朋友跟我抱怨说某算法在PC下跑得很快,而在某强大DSP下时间却怎么也降不下来,我问他都做了哪些DSP下的优化工作,他说“什么二维转一维、少用if…else之类的、尽量使用指针、改进算法”等等这些,说了一堆,就是没有编译器级的优化和芯片级的高级优化工作,除非算法本身就不算复杂,否则只做C语言代码级和算法级优化的意义是不大的, 速度还是提不上去。 咱们追求高性能的嵌入式芯片方向是对的,但是嵌入式芯片性能好并不代表着算法速度就一定快,关键是你有多了解你所用的编译器、有多了解你所用的芯片。嵌入式厂商除不断提升芯片主频和增加各种协处理器、外设之外,还提供了对各系列芯片的很多零碎的优化方法供大家使用(对于DSP芯片,这些方法的中的大多数大嘴已在博客中有介绍),而芯片厂商并没有非常非常清楚的一步步的把所有编译器级、芯片级优化方法都集中在一起并非常清楚的介绍给大家(虽然手册很多,但过于零散,介绍的并不到位,比如并没有充分结合各种DSP编译器、开发环境来介绍,使得大家学习起来很费解),多数优化方法还是要靠大家不断去总结、摸索、学习。换句话说,嵌入式芯片厂商把一半的优化工作交给嵌入式移植优化工程师来做。 【这里多说一些,只做C语言代码级和算法级工作的工程师最多只能算上嵌入式移植工程师,也就是说算法在嵌入式芯片下能跑而已,而真正懂得编译器级、和芯片级优化的工程师才能算上真正意义上嵌入式优化工程师。如果算法必须用在嵌入式下,如果无法提速,至少达到咱们的最低可用速度的话,即使算法效果再好又有何用呢?】。
DSP下常用的编译器级、芯片级优化方法的主要方法请查看大嘴的往期文章或自行查看各类手册,而对于ARMFPGA下肯定也有自己的芯片级方法,大嘴并不懂这两类芯片, 无法向大家介绍,希望有ARMFPGA算法优化高手和大嘴一起分享。无论学习哪种芯片下的高级优化方法必定要经过相对较漫长的时间来慢慢磨出来(比如几年的时间),特别是没人带而光靠自己摸索的朋友(我见过自学了好几年DSP移植优化的朋友,走了很多弯路,效率很低),大家切勿着急,最好找个熟悉嵌入式优化的朋友去跟他学习。