kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 业界动态> DSP编程技巧之:程序优化

DSP编程技巧之:程序优化

2015-09-18
关键词: DSP 编程技巧

  上一期讲解了DSP编程技巧之:编译流程与处理器选项,这期继续讲解程序优化。在二三十年前人们刚开始使用C语言代替汇编进行开发的时候,因为当初的处理器/控制器性能很弱,而编译器的能力也有限,所以形成了一些C语言编程效率不高的印象。但是今天的硬件性能已经非常强大,而编译器的能力也是日新月异,如果我们不熟练掌握汇编编程中的一些关键技术,编写的汇编代码的效率已经很难超过编译器从C语言转换出来的汇编代码了。
  如果我们使用C语言进行编程的话,编译器除了可以把我们的加减乘除这样的操作转换为ADD、MPY以及相关的寻址、寄存器操作外,还可以在编译产生汇编代码的过程中进行不同程度的优化。优化的过程要根据器件的特点与指令集等进行有针对性的配置,所以在不同的器件上同一段C代码优化产生的结果可能不一样,但是其基本思想都是一致的;甚至是不同公司的编译器,在优化选项和优化效果上面也是基本一致的。在CCS软件的编译器中,我们可以使用的基本的优化级别有5级,如表1所示。需要注意的是,别名就是我们在编译器选项中实际使用的名字,因为字体的原因,看起来可能会有混淆,以-O0为例,其中的第一个是字母O是大写的字母0,表示优化Optimization,而不是阿拉伯数字的0;第二个才是是阿拉伯数字中的零,用数字表示优化的序号或者说优化的程度。
  根据需要,我们可以选择需要的优化级别,例如可以选择优化代码的尺寸,从而减小代码占用的存储器空间;一般情况下使用-O2或者-O3可以实现在代码运行速度、代码占用的存储器空间和编译速度几个因素之间的最优化。但是优化也是有一定的代价的,首先编译的时间会随着优化级别的提高而增加;其次如果我们的代码不够严谨,可能会产生意外的结果,例如某些看起来没用的变量直接被编译器给“忽视”了,但是我们本来保留它可能是有目的的,例如用来做为调试用的变量,结果它被优化掉了而失去了意义,这时我们就需要使用一些特殊的C语言关键字告诉编译器,这个变量用在这里是有其它目的的,不能把它给优化掉,等等;这些以后可以详解。
  关于优化的更多细节,大家可以参考一些有关高效编程的书,因为编译器虽然可以对代码进行优化,如果我们的代码写的太烂,编译器估计也要吐血了。

  在上面的文章里,我们提到了DSP编程中程序优化最常使用到的选项问题,主要提到的几个选项包括-O1、-O2、-O3、-O4等等。虽然我们是以DSP为例进行说明的,但是对于其它的处理器,例如ARM、CPU、一些高级的单片机如MSP430、PIC等等和一些编译环境,例如Keil、Xilinx SDK等,它们使用的一般的优化选项和基本内容也是大同小异的,即同样的优化级别,优化的目的都是基本一致的。
  这些都是基本的操作,如果我们的目的仅仅是优化代码性能或者尺寸的话。如果我们想了解优化过程中产生和使用的更多信息的话,对于DSP本身而言,它的一些其它特性对于程序的运行性能也是非常关键的,此时在基本的优化选项基础上,我们又要注意一下高级的优化选项的影响。例如,某些汇编指令在做诸如FFT变化的时候能够成倍的提高效率,所以开启高级优化选项使得编译器有针对性地生成相关的指令就非常重要。下面我们看一下编译器的高级优化选项有哪些。因为要考虑到指令集等因素,这里以C28x系列为例进行分析。

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map