




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【Word版本下载可任意编辑】数字信号处理器的汇编程序优化方案的分析虽然目前大多数DSP都支持C语言缟程,但是在实际工程应用中,多是用C语言编写流程控制,搭建工程框架。
具体的算法模块以及比较耗时的功能模块还是采用汇编语言来编写。因为用汇编语言开展编程可以利用电路自身硬件构造的特点对其开展优化与精简,从而能够使一些复杂的算法和功能模块在实时性方面取得非常好的效果。文中从指令并行和软件流水二方面出发。以ADI公司PSl01系列电路的程序为实例,概括归纳出对DSP汇编程序开展优化的一般方法。
1引言
数字信号处理器(DSP)相对于模拟信号处理器有很大的优越性,表现在精度高,灵活性大,可靠性好,易于大规模集成等方面。随着半导体制造工艺的发展和计算机体系构造的改良,数字信号处理器的功能越来越强大,对信号处理系统的研究重点又重新回到软件算法上,而不再像过去那样过多地考虑硬件的可实现性。
随着DSP运算能力的不断提高,能够实时处理的信号带宽也大大增加,数字信号处理的研究重点也由初的非实时性应用转向高速实时应用。
目前大多数DSP虽然都支持C语言编程,但是在实际工程应用中,常用的方法是用C语言编写流程控制。搭建工程框架,具体的算法模块及比较耗时的功能模块还是采用汇编语言来编写。这是因为C语言虽然具有易读性、可移植性等优点,但是它不便于对系统硬件资源的直接控制,无法发挥DSP自身的特点,无法充分利用DSP系统构造中有限的资源。特别是在硬实时性系统中,用汇编语言开展编程可利用DSP自身硬件构造的特点对汇编程序开展优化与精简,往往能够使一些复杂的算法和功能模块在实时性方面取得非常好的效果。
2汇编程序优化
DSP的种类繁多.各类DSP都有其自身的硬件特点,而对DSP汇编程序开展优化的过程就是根据程序自身特点充分利用DSP硬件资源的过程。因此,具体到不同的器件.其优化方式也不尽相同。目前比较流行的大多数DSF,都支持程序并行和软件流水,本文从这二方面出发,概括归纳出对汇编程序开展优化的一般方法。希望能够在对不同DSP汇编程序优化的过程中提供一些思考方式上的切人点。为了易于说明,笔者提供了一些实例,这些例子均是用AD公司TSl01系列电路的汇编语言编写的。
2.1加强程序并行
程序的并行是汇编优化的关键。但是,在开始开展任何优化之前,必须了解从何处着手,首先了解瓶颈在何处。软件的某些部分可能只执行(初始化)或者只执行少数几次,费尽心思优化此部分代码并非明智之举,因为获得的整体节省效果是微乎其微。对程序的优化应将主要力量集中在为费时的部分。
(1)循环展开到达并行
通过对大量DSP程序的研究.可以发现整个程序比较耗时的部分往往是在1个或几个大的循环中。这些循环部分又往往可分为取数、处理、储存处理结果3个顺序执行的步骤,这3个步骤有明显的时间先后关系.只有取了数才能处理。处理后才能存储结果,这种时间上的相互依赖性为程序的并行带来了非常大的困难。
循环展开是常用的一种优化技巧。1次循环处理过程中的各语句是具有很强的时间先后顺序的,但是在连续2次循环过程中的各种语句却是相互独立的,它们是以相同的语句处理不同的数据。因此可以采用将循环次数减半,每2次(也可以是3次、4次等,应根据具体情况来确定,同时循环次数要做相应改变)循环合并为1次循环过程的方法来使程序并行,提高效率。
例1是一段对图像开展二值化的代码的主要部分.是一段2次的循环,并未经过优化;实例2是将其循环展开,2次循环过程合并为1次循环的代码段(这里假设其每行像素个数为偶数,如果不为偶数只需在内循环外额外处理一个像素即可);实例3是循环展开并开展优化精简后的代码段。这3段代码均用TSl01的汇编语言编写,其中j4指向待处理的图像;i5指向处理后的图像;xrO、xrl分别为图像行、列个数;xr2为二值化的阈值,像素灰度值大于或等于该值的使其等于该值,而像素灰度值小于该值的设为零。
实例1:
实例2:
实例3:
如实例3中的(1)、(2)所示,下一循环的取数和与阈值比较语句同上一循环中的指令到达了并行。分别运行实例1与实例3并计算其每个像素所花费的时间,可知实例1中平均每个像素花费7.12个时钟周期,而实例3中平均每个像素花费5.12个时钟周期,比优化前少用了差不多2个时钟周期。
(2)提前取数到达并行
在循环外提前取数,彻底打破循环中各指令间时间的先后顺序,增强其独立性并终到达并行的目的,这也是一种常用的方法。实例4利用此种方法,在实例3的根底上对实例1的代码段做了进一步的优化与精简。
如实例4中所示,(1)在循环外提前开展了取数,并在(2)到达了并行,(3)、(4)对由于提前取数造成的指针移位和额外的赋值开展了修正。但是,在使用此方法开展精简优化时要特别注意循环结束后对指针的修正。经计算。实例4平均每个像素所花费的时间为4.18个指令周期。
实例4:
(3)改换语句到达并行
有时,不同的语句利用不同的硬件资源可以得到相同的结果。换一条语句执行.改变原语句所用硬件资源。往往也能够增加程序的并行程度。例如DSP中往往提供独立的加法、乘法运算单元,同样一条赋值语句可以用加0或者乘l代替,这样就可以将原来不能并行的从内存中取数语句和对存放器赋值语句(这两条语句都要到总线资源)并行起来。这在许多参考资料中都可以见到。在此不再列举具体实例。
(4)增加取数个数到达并行
某些DSP还支持联合取数的功能,其存放器可能是32位.但是却支持64位数据的存取,即一条语句可完成二组数据的存取。而对这两组数据的处理却是相互独立、可以并行的,利用这一功能来到达优化,也不失为一种好方法。
2.2利用软件流水
流水技术是提高DSP程序执行效率的另一种主要手段。它可以使若干条指令的不同执行阶段并行处理。有时由于相邻的几个指令行有可能使用相同的资源,其间又可能有相关性,从而使DSP在执行时自动插人延迟,使DSP的运行速度比预期的慢:有时又可能由于指令本身的原因造成延时(例如跳转指令),使得DSP的效率降低。由于流水技术本身的复杂性以及DSP硬件构造的多样性,这里不再讨论造成这种延迟的种种原因(事实上各个DSIC的使用手册中均有详细的说明),只是想告诉读者其实有时候只需要移动几条指令的位置就可以到达优化的目的。在这里仍继续采用实例1的代码段作为例子(TI公司C6000系列电路的编程更适合此例,只是其汇编指令太复杂)。
如实例5(1)所示,它将例3中并行的语句重新分开,变为二条语句执行。计算其效率可以发现平均每个像素仍然花费5.12个指令周期,与将其并行的效率相同。这是因为取数与比较这二条指令共用了同一存放器资源xr3,造成这二条语句间插入一个指令周期的延迟,而把语句插入到这两条指令之间,恰恰利用了这一延迟,到达了优化的效果。
实例5:
对汇编程序开展优化,应综合上面提到的各种方法。首先使循环内各语句在时间关系上尽量相互独立.然后利用种种技巧限度地使语句并行;再考虑软件流水造成的延时,调整各条语句的位置.尽量减少延时。
3结束语
对特定DSP汇编程序开展优化的过程就是对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国人教版初中信息技术七年级上册第一单元第3课六、《进一步修饰文稿》教学设计
- 湘美版二年级下册第19课 蹦蹦跳跳教学设计
- 湘教版七年级下册4.1.2相交直线所成的角第1课时教学设计及反思
- 27 一个粗瓷大碗 教学设计-2024-2025学年语文三年级上册统编版001
- 归去来兮辞文言知识归纳
- 血管通路的选择与护理
- 2024年秋新人教PEP版三年级上册英语教学课件 Unit 5 Part A 第1课时
- 防积水安全培训
- 采购合同合同管理专业情报收集重点基础知识点
- 安全生产事故预防规划师重点基础知识点
- 教务处教学教案作业检查记录表
- 电梯设备故障记录表
- 血透室传染病登记本
- DB50∕T 341-2009 城乡社区消防安全管理规范
- 干粉灭火器点检记录表(样表)
- 伍光和自然地理学4版知识点总结课后答案
- 手压式手电筒设计(棘轮机构及电路设计)
- 滇10J6-1住宅厨房、卫生间烟气道及管道井构造图集
- 华中科技大学版五年级信息技术教案
- 600MW超临界锅炉给水控制系统分析
- 固定收益研究报告透过x系统看银行间交易未来发展
评论
0/150
提交评论