数字信号处理器的汇编程序优化方案的研究_第1页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字信号处理器的汇编程序优化方案的研究虽然目前大多数都支持缟程,但是在实际工程应用中,多是用c语言编写流程控制,搭建工程框架。详细的算法模块以及比较耗时的功能模块还是采纳汇编语言来编写。由于用汇编语言举行编程可以利用自身硬件结构的特点对其举行优化与精简,从而能够使一些复杂的算法和功能模块在实时性方面取得十分好的效果。文中从命令并行和软件流水二方面动身。以公司psl01系列电路的程序为实例,概括归纳出对dsp汇编程序举行优化的普通办法。1 引言数字信号处理器(dsp)相对于模拟信号处理器有很大的优越性,表现在精度高,灵便性大,牢靠性好,易于大规模集成等方面。随着创造工艺的进展和计算机体系结构的改

2、进,数字信号处理器的功能越来越强大,对信号处理系统的讨论重点又重新回到软件算法上,而不再像过去那样过多地考虑硬件的可实现性。随着dsp运算能力的不断提高,能够实时处理的信号带宽也大大增强,数字信号处理的讨论重点也由最初的非实时性应用转向高速实时应用。目前大多数dsp虽然都支持c语言编程,但是在实际工程应用中,最常用的办法是用c语言编写流程控制。搭建工程框架,详细的算法模块及比较耗时的功能模块还是采纳汇编语言来编写。这是由于c语言虽然具有易读性、可移植性等优点,但是它不便于对系统硬件资源的挺直控制,无法发挥dsp自身的特点,无法充分利用dsp系统结构中有限的资源。特殊是在硬实时性系统中,用汇编语

3、言举行编程可利用dsp自身硬件结构的特点对汇编程序举行优化与精简,往往能够使一些复杂的算法和功能模块在实时性方面取得十分好的效果。2 汇编程序优化dsp的种类繁多各类dsp都有其自身的硬件特点,而对dsp汇编程序举行优化的过程就是按照程序自身特点充分利用dsp硬件资源的过程。因此,详细到不同的器件其优化方式也不尽相同。目前比较流行的大多数dsf,都支持程序并行和软件流水,本文从这二方面动身,概括归纳出对汇编程序举行优化的普通办法。希翼能够在对不同dsp汇编程序优化的过程中提供一些思量方式上的切人点。为了易于解释,笔者提供了一些实例,这些例子均是用ad公司tsl01系列电路的汇编语言编写的。21

4、 加强程序并行程序的并行是汇编优化的关键。但是,在开头举行任何优化之前,必需了解从何处着手,首先了解瓶颈在何处。软件的某些部分可能只执行一次(初始化)或者只执行少数几次,费尽心思优化此部分代码并非明智之举,由于获得的整体节约效果是微不足道。对程序的优化应将主要力气集中在最为费时的部分。(1) 循环绽开达到并行通过对大量dsp程序的讨论可以发觉囫囵程序比较耗时的部分往往是在1个或几个大的循环中。这些循环部分又往往可分为取数、处理、储存处理结果3个挨次执行的步骤,这3个步骤有显然的时光先后关系惟独取了数才干处理。处理后才干存储结果,这种时光上的互相依靠性为程序的并行带来了十分大的困难。循环绽开是最

5、常用的一种优化技巧。1次循环处理过程中的各语句是具有很强的时光先后挨次的,但是在延续2次循环过程中的各种语句却是互相自立的,它们是以相同的语句处理不同的数据。因此可以采纳将循环次数减半,每2次(也可以是3次、4次等,应按照详细状况来确定,同时循环次数要做相应转变)循环合并为1次循环过程的办法来使程序并行,提高效率。例1是一段对图像举行二值化的代码的主要部分是一段2次的循环,并未经过优化;实例2是将其循环绽开,2次循环过程合并为1次循环的代码段(这里假设其每行像素个数为偶数,假如不为偶数只需在内循环外额外处理一个像素即可);实例3是循环绽开并举行优化精简后的代码段。这3段代码均用tsl01的汇编

6、语言编写,其中j4指向待处理的图像;i5指向处理后的图像;xro、xrl分离为图像行、列个数;xr2为二值化的阈值,像素灰度值大于或等于该值的使其等于该值,而像素灰度值小于该值的设为零。实例1:实例2:实例3:照实例3中的(1)、(2)所示,下一循环的取数和与阈值比较语句同上一循环中的命令达到了并行。分离运行实例1与实例3并计算其每个像素所花费的时光,可知实例1中平均每个像素花费712个时钟周期,而实例3中平均每个像素花费512个时钟周期,比优化前少用了差不多2个时钟周期。(2)提前取数达到并行在循环外提前取数,彻底打破循环中各命令间时光的先后挨次,增加其自立性并终于达到并行的目的,这也是一种

7、常用的办法。实例4利用此种办法,在实例3的基础上对实例1的代码段做了进一步的优化与精简。照实例4中所示,(1)在循环外提前举行了取数,并在(2)达到了并行,(3)、(4)对因为提前取数造成的指针移位和额外的赋值举行了修正。但是,在用法此办法举行精简优化时要特殊注重循环结束后对指针的修正。经计算。实例4平均每个像素所花费的时光为418个命令周期。实例4:(3)改换语句达到并行有时,不同的语句利用不同的硬件资源可以得到相同的结果。换一条语句执行转变原语句所用硬件资源。往往也能够增强程序的并行程度。例如dsp中往往提供自立的加法、乘法运算单元,同样一条赋值语句可以用加0或者乘l代替,这样就可以将本来

8、不能并行的从内存中取数语句和对寄存器赋值语句(这两条语句都要到资源)并行起来。这在许多参考资料中都可以见到。在此不再列举详细实例。(4)增强取数个数达到并行某些dsp还支持联合取数的功能,其寄存器可能是32位但是却支持64位数据的存取,即一条语句可完成二组数据的存取。而对这两组数据的处理却是互相自立、可以并行的,利用这一功能来达到优化,也不失为一种好办法。22 利用软件流水流水技术是提高dsp程序执行效率的另一种主要手段。它可以使若干条命令的不同执行阶段并行处理。有时因为相邻的几个命令行有可能用法相同的资源,其间又可能有相关性,从而使dsp在执行时自动插人延迟,使dsp的运行速度比预期的慢:有

9、时又可能因为命令本身的缘由造成延时(例如跳转命令),使得dsp的效率降低。因为流水技术本身的复杂性以及dsp硬件结构的多样性,这里不再研究造成这种延迟的种种缘由(实际上各个dsic的用法手册中均有具体的解释),只是想告知读者其实有时候只需要移动几条命令的位置就可以达到优化的目的。在这里仍继续采纳实例1的代码段作为例子(ti公司c6000系列电路的编程更适合此例,只是其汇编命令太复杂)。照实例5(1)所示,它将例3中并行的语句重新分开,变为二条语句执行。计算其效率可以发觉平均每个像素仍然花费512个命令周期,与将其并行的效率相同。这是由于取数与比较这二条命令共用了同一寄存器资源xr3,造成这二条语句间插入一个命令周期的延迟,而把语句插入到这两条命令之间,恰恰利用了这一延迟,达到了优化的效果。实例5:对汇编程序举行优化,应综合上面提到的各种办法。首先使循环内各语句在时光关系上尽量互相自立然后利用种种技巧最大限度地使语句并行;最后再考虑软件流水造成的延时,调节各条语句的位置尽量削减延时。3 结束语对特定dsp汇编程序举行优化的过程就是对其芯片结构充分认识利用的过程,程序优化与

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论