- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DSP处理器C语言优化
DSP处理器C语言优化?(2009-03-04 21:21:58)转载▼标签:?it分类:?技术专题来源:孔庆峰, DSP核心应用工程经理 Analog Devices, Inc.????其实我不是很会写文章,想要把技术性文章写的有意思就更难了。不过这一段日子总是有一种冲动想要写点什么,把自己了解的有关Blackfin C语言优化和系统优化方面的技巧和知识写下来,和正在从事这方面工作朋友们分享,也许有些帮助,也算是对自己过去一段时间工作的总结。?????在文章开始之前,我想先问读者一个问题:您的DSP代码里有多少是汇编,这些汇编里有多少是您自己写的??????曾几何时汇编编程是DSP工程师的一张名片。很多人到现在谈起汇编编程还是颇为自豪的,搞得你想说自己不会都要鼓起点勇气——那眼神是恨不得把你送回火星去。这主要是因为在最开始的时候DSP上的C语言编译器不是很普遍,编译器的水平也还在起步阶段,很难用到DSP相应的硬件特性,编译效率值得商榷。而且那时DSP应用场景和复杂度远不比今天,基本上限制在数字信号处理的典型算法上,FFT,FIR,IIR滤波器,等等。这些函数和滤波器的实现相对今天的应用比较简单,用汇编语言也容易突出DSP的硬件特性。还有一个原因是那时候DSP普遍都跑的很慢,基本上在几十兆的水平。这也限制了C语言的使用。试想一下一段C代码跑的比汇编慢十倍,几十兆的DSP一下就变几兆了。?????但是今天再来看这所有的一切是完全不一样了。首先是DSP的应用范围越来越广,客户越来越多的希望用同一颗芯片,在同一个平台上实现更多的设计和应用。这对DSP的设计,DSP和MCU的融合都带来重大影响。DSP和MCU之间也不是过往那井水不犯河水的安宁。随着DSP和MCU的主频先后突破1GHz,在很多应用中DSP和MCU相伴相生的场景也开始被一颗强壮的芯代替,或者DSP或者MCU。在这样的应用中,操作系统,文件系统,USB协议栈,TCP/IP,海量数据存储,样样都会用到。数字信号处理也从骨灰级的滤波器变成全系列音视频处理,OFDM基带处理,天线阵列信号处理,彩色图像重建… 试想一下这些应用哪一个不是成千上万行代码。汇编语言在编程复杂度,可移植性和可维护性上真的是遇到了前所未有的挑战。而与此相对应的是C语言和C语言编译器的蓬勃发展。今天您可以很容易找到上面提到所有这些应用和算法的C语言实现,而C语言编译器在编译效率和成熟度上都有很大的突破。也让C语言在DSP上的应用得以受到愈来愈高的重视。?但是C语言本身并不是为DSP定义的——C语言在PC上的默认条件在嵌入式处理器上不成立,比方说存储空间无限,比方说内存连续,更不要说如何绑定DSP特殊的硬件支持。所以要充分发挥DSP的能力,C语言优化是一下一张DSP工程师的名片。不会C语言优化,OK,你可以回火星,地球很危险。?1. 拳谱总纲?????闲话不表。在深入到细节之前,我想先从宏观的角度讨论一下C语言优化一些大的原则。就好像我们在学七伤拳之前先来背背拳谱总纲,提纲挈领很重要。这些原则可以用图1来说明。??图1:C语言优化性能曲线。?????在这张图里我们看到的是一根程序性能随C语言和汇编语言在程序中比例变化而变化的曲线。整条性能曲线开始在A点,可以把它叫做out-of-box A点,就是程序员或者用户用自己未经优化的C语言程序在DSP上编译和运行能够达到的性能。这个性能取决于程序的复杂度和编译器的性能,但通常不会很高,大约在30%左右。这未经优化的C语言我们把它叫做out-of-box C。这里的30%是什么意思呢,就是你有一个600MHz的DSP去运行out-of-box C的程序,内核被占满了,但能做的有用的事情(性能)只相当于一个180MHz的DSP。为什么会这样呢,前面已经提到了,那就是out-of-box C不是为DSP量身定做的,不能充分用到DSP的各项性能。好,从A点开始向B点运动,我们就进入了今天要讨论的范围,也就是进入了“Box”。这个时候我们在out-of-box C的基础上,在C语言的范围内面向我们要使用的DSP,对程序经行优化,就来到了B点。在B点,能够达到的性能是大约70%~80%。要注意,从A点到B点,所有的工作都是在C语言的范围内进行的,并没有进入汇编语言的范畴。这个时候的C语言可以叫它做Optimized C,它是在out-of-box C的基础上加入针对当前DSP的扩展而形成的。如果沿着性能曲线进一步向前,就进入了汇编语言的范畴,也就是程序员开始把一部分重要的,大量消耗cycle的程序改写为汇编。随着被改写的程序的增多和进入汇编领域的深入,我们达到了整条性能曲线的顶点——C点。这时大致有20%左右的代码已经被汇编语言代替,而程序的性能也已经超过了90%,也就是我们基本
文档评论(0)