用C语言进行DSP软件设计的优化考虑
- 格式:pdf
- 大小:167.52 KB
- 文档页数:4
DSP程序优化方法(2)5、循环优化( 1)、充分分解小的循环要充分利用 CPU的指令缓存,就要充分分解小的循环。
特别是当循环体本身很小的时候,分解循环可以提高性能。
注意 :很多编译器并不能自动分解循环。
不好的代码:// 3D 转化:把矢量 V 和 4x4 矩阵 M 相乘for (i = 0 ; i < 4 ; i ++){r[i] = 0 ;for (j = 0 ; j < 4 ; j ++){r[i] += M[j][i]*V[j] ;}}推荐的代码:r[0] = M[0][0]*V[0] + M[1][0]*V[1] + M[2][0]*V[2] + M[3][0]*V[3] ;r[1] = M[0][1]*V[0] + M[1][1]*V[1] + M[2][1]*V[2] + M[3][1]*V[3] ;r[2] = M[0][2]*V[0] + M[1][2]*V[1] + M[2][2]*V[2] + M[3][2]*V[3] ;r[3] = M[0][3]*V[0] + M[1][3]*V[1] + M[2][3]*V[2] + M[3][3]*v[3] ;( 2)、提取公共部分对于一些不需要循环变量参加运算的任务可以把它们放到循环外面,这里的任务包括表达式、函数的调用、指针运算、数组访问等,应该将没有必要执行多次的操作全部集合在一起,放到一个 init 的初始化程序中进行。
( 3)、延时函数通常使用的延时函数均采用自加的形式:void delay (void){unsigned int i;for (i=0;i<1000;i++) ;}将其改为自减延时函数:void delay (void){unsigned int i;for (i=1000;i>0;i--) ;}两个函数的延时效果相似,但几乎所有的 C 编译对后一种函数生成的代码均比前一种代码少 1~3 个字节,因为几乎所有的 MCU 均有为0 转移的指令,采用后一种方式能够生成这类指令。
DSP环境下C语言编程的优化实现在DSP环境下进行C语言编程的优化实现是为了提高程序的执行效率、降低资源消耗和节省功耗。
在进行DSP编程优化时,主要涉及到以下几个方面:算法优化、数据类型选择、循环优化、内存管理和代码调度等。
首先,在进行算法优化时,应尽量减少不必要的计算和存储操作。
可以通过优化数学公式、简化计算步骤、减少冗余计算等方式来优化算法。
此外,还可以考虑使用并行计算、积分图像算法等技术来加速计算过程。
其次,对于数据类型选择来说,应根据具体的需求来选择合适的数据类型。
例如,对于整数计算,可以使用DSP环境提供的定点数运算,而对于浮点数计算,可以使用浮点数运算器进行优化。
此外,还可以合理选择数据结构,如使用数组来存储数据、使用指针来访问数组等。
第三,在循环优化方面,应尽量减少循环次数和循环体内的计算量。
可以采用循环展开、循环变量合并、循环交换等技术来优化循环结构。
此外,还可以考虑使用向量指令、SIMD技术等来实现并行计算,提高循环的执行效率。
第四,内存管理也是优化的重要环节之一、在DSP环境下,内存访问的性能往往是性能瓶颈之一、因此,应尽量减少内存访问次数和内存读写操作。
可以使用局部变量来减少对全局变量的访问,采用缓存技术提高数据的访问效率,合理利用寄存器和DMA等来提高内存的读写速度。
最后,在代码调度方面,可以通过指令级优化来提高代码的执行效率。
可以使用乱序执行、超标量执行等技术来提高指令级并行度。
此外,还可以使用循环展开、代码消除、代码复用等技术来减少指令的执行次数和分支预测失败的概率。
综上所述,DSP环境下的C语言编程优化实现涉及到算法优化、数据类型选择、循环优化、内存管理和代码调度等多个方面。
通过优化这些环节,可以提高程序的执行效率、降低资源消耗和节省功耗,从而满足实时性和资源限制的要求。
DSP环境下C语言编程的优化实现1 引言DSP(Digital Signal Processor,数字信号处理器)是一种具有特殊结构的微处理器。
自20世纪80年代初诞生以来,DSP在短短的十多年间里得到了飞速的发展。
随着DSP性能价格比和开发手段的不断提高,DSP已经在通信和信息系统、信号与信号处理、自动控制、雷达、军事、航空航天、医疗、家用电器等许多领域得到了广泛的应用。
与单片机相比,DSP多用于算法比较复杂、乘加运算量比较大的应用,如通信、雷达、音视频处理等。
为了追求代码的高效,过去一般用汇编语言来编制DSP程序。
随着DSP应用范围不断延伸,应用的日趋复杂,汇编语言程序在可读性、可修改性、可移植性和可重用性的缺点日益突出,软件需求与软件生产力之间的矛盾日益严重。
引入高级语言(如C语言、C++、Java),可以解决该矛盾。
在高级语言中,C语言无疑是最高效、最灵活的。
各个DSP 芯片公司都相继推出了相应的C语言编译器。
鉴于DSP应用的复杂度,在用C语言进行DSP软件开发时,一般先在基于通用微处理器的PC机或工作站上对算法进行仿真,仿真通过后再将C程序移植到DSP平台中。
按照软件开发的顺序,相应的优化工作包括两个部分:一是仿真环境中的优化,二是DSP目标环境中的进一步优化。
本文主要探讨的是前者,给出了在DSP开发环境下有效C语言编程的策略,以获得最高效的编译代码;并针对策略,设计了具体实例,并比较了不同策略在TMS320C54x CCS(v1.2)和TMS320C6000 CCS(v1.2)环境下编译的结果。
2 DSP开发环境下有效C编程的策略基于通用微处理器的PC机环境中的优化工作是针对C程序的通用特性来考虑的。
这方面的优化工作主要包括数据类型选择、数值操作优化、快速算法、变量定义和使用优化、函数调用优化、程序流程优化以及计算表格化等。
2.1 数据类型标准C语言提供了丰富的数据类型整型、浮点、枚举、指针、结构、联合等。
DSP 环境下C 代码的手工汇编优化刘浩然,王 冠(南开大学 天津 300071)摘 要:由于DSP 器件的特殊结构,使得该平台上C 编译器的效率较低,编译生成的汇编代码含有大量冗余,无法充分发挥DSP 强大的运算能力,因而对C 语言程序进行手工汇编优化就成为DSP 软件开发和移植中常用的方法。
TMS320C5410是TI 推出的一款16位定点DSP 芯片,结合在该芯片上优化实现G.729语音编码压缩算法的经验,详细探讨了手工汇编优化过程中使用的优化策略以及其他注意事项。
关键词:DSP ;TMS320C5410;C 代码;汇编;优化中图分类号:TP313 文献标识码:B 文章编号:1004373X (2006)1209204Optimizing Assemble Code Compiled with C Code for DSP ApplicationsL IU Haoran ,WAN G Guan(Nankai University ,Tianjin ,300071,China )Abstract :For the special architecture of DSP ,the C compiler for DSP platform is inefficient.The assemble code compiled with C code is redundant ,so it is necessary to optimize by hand.With the experience of optimizing and realizing G.729C source code on TMS320C5410fixedpoint DSP chip ,the technology is used to optimize assemble code and something elseshould be paid attention to are introduced.K eywords :DSP ;TMS320C5410;C code ;assemble ;optimization收稿日期:200511291 引 言数字信号处理是20世纪60年代发展起来的新兴学科,已广泛应用于数字通信、雷达、遥感、语音图像处理、测控、自动控制等诸多领域。
基于DSP环境下C语言的编程优化朱业腾【摘要】DSP is a new technology, has the advantages of real-time, time and other advantages, in such a system, can use reasonable internal structure, special realization of digital signal processing, signal processing to improve the effectiveness of. But with the increasingly widespread application of DSP, assembly language program readability, portability and other defects gradually exposed, and the assembly language is non structured language for structured programming is difficult for large, we should adopt more advanced language to complete the work. Compared to the existing assembly language, C language is undoubtedly the most efficient and flexible, and how to achieve the optimization of C programming in the DSP environment has received widespread attention. This article will start from the characteristics of DSP, in-depth analysis of the DSP environment in C programming language optimization measures, hoping to provide some reference for the improvement of the DSP platform.%DSP作为一项新型技术,具有实时、准时等优势,在此类系统中,能够运用合理的片内结构,实现对数字信号的专门性处理,提高信号处理有效性.但随着DSP 应用范围愈发广泛,汇编语言程序可读性、可移植性等缺陷逐渐暴露出来,且汇编语言是非结构化语言,对于大型的结构化程序设计难以胜任,要求我们采用更为高级的语言完成该项工作.相比较现有汇编语言,C语言无疑是最为高效和灵活的,如何在DSP环境下实现对C语言编程优化受到了广泛关注.文章将从DSP的特点出发,深入分析在DSP环境下C语言编程的优化措施,希望对DSP平台完善提供参考.【期刊名称】《电子测试》【年(卷),期】2017(000)020【总页数】2页(P41,27)【关键词】DSP环境;C语言;编程优化【作者】朱业腾【作者单位】中国船舶重工集团公司第七二三研究所,江苏扬州,225000【正文语种】中文相比较单片机,DSP多用于算法较为复杂、乘加运算量较大的通信、雷达及音视频处理等方面。
-86-信息科学控制贯穿于整个施工过程,期限长,控制面广,企业应逐步建立和完善适合本企业的管理体系,加强管理,合理预测,积极采取措施,有效地控制工程造价。
参考文献[1]龚维丽.工程造价的确定与控制[M].第二版,北京:中国计划出版社,2001.[2]宋军.对工程造价管理的几点认识[J].建筑时报,2006-6-26.[3]吴涛.施工项目经理手册[M].北京:地震出版社,1998.[4]王书强,许宏林.浅谈工程造价控制中的索赔与反索赔[J].青岛建筑工程学院学报,2005,26(3).[5]孙丽,殷桂敏.浅谈工程造价管理体制改革[J].青岛理工大学学报,2005,26(5).责任编辑:宋义(上接143页)引言DSP在实时和准实时系统中使用非常普遍。
在这类系统中,对计算的实时性与准确性要求很高,而DSP有适合信号处理的片内结构,有专为数字信号处理所设计的指令系统,这些特点使其能迅速地执行信号处理操作。
DSP应用的日趋复杂,汇编语言程序在可读性、可修改性、可移植性和可重用性上的缺点日益突现;同时汇编语言是一种非结构化的语言,对于大型的结构化程序设计已经逐渐难以胜任,这就要求我们采用更高级的语言去完成这一工作。
而在高级语言中,C语言无疑是最高效、最灵活的。
性能要求比较高的场合,例如在语音图像处理方面,必须对某些程序代码进行优化。
在C语言编程的时候需要对算法的结构和程序的流程进行优化,才能在有限的资源的条件下,提高算法的执行速度,提高算法的运行效率,满足实时性要求。
1优化步骤以TMS320C55xC代码优化为例,具有代表性,一般的DSP软件开发的优化步骤分为写C代码,优化C代码,写汇编代码,优化汇编代码。
下面对这个软件开发流程进行解释:1.1写C代码用和ANSIC兼容的C55xC编译器可以在不知道C55xDSP知识的情况下开发c程序。
CCS可以找出c代码中效率不高的部分。
实现代码功能后,可以通过选择高层优化编译器选项。
剖析DSP编程优化的7个方法方法一把浮点运算改成定点运算因为C6x DSP板并不支持浮点运算,但我们的原始程序代码是浮点运算的格式,所以必须改成定点运算,而其修改后的执行速度也会加快很多。
我们采用Q-format 规格来表示浮点运算。
以下将介绍其相关原理。
定点DSP使用固定的小数点来表示小数部份的数字,这也造成了使用上的限制,而为了要分类不同范围的小数点,我们必须使用Q-format的格式。
不同的Q-format表示不同的小数点位置,也就是整数的范围。
Q15数字的格式,要注意在小数点后的每一位,表示下一位为前一位的二分之一,而MSB (most-significant-bit ) 则被指定成有号数( Sign bit )。
当有号数被设成0而其余位设成1时,可得到最大的正数(7FFFH ) ;而当有号数被设成1而其余位设成0时,可得到最大的负数( 8000H ) 。
所以Q15格式的范围从-1到0.9999694 (@1) ,因此我们可以藉由把小数点向右移位,来增加整数部份的范围,Q14格式的范围增为-2.0到1.9999694 (@2) ,然而范围的增加却牺牲了精确度。
方法二建立表格( table )原来程序的设计是除了要读AAC的档案外,在译码时,还要再另外读取一些C语言程序代码的内容再做计算,如读取一些数值做sin、cos、exp的运算,但是为了加快程序的执行速度,故将这这些运算的结果建成表格,内建在程序中,可以不必再做额外的计算动做,以加速程序。
方法三减短程序的长度1.去除Debug的功能原本程序在Debug的阶段时,就加了许多用来侦测错误的部份,程序Debug完后,已经没有错误发生,所以就可以把这些部份给去除,以减少程序的长度,也可以减少程序执行时的时脉数,加快程序的速度。
2.去除计算时脉( clock ) 功能原本程序可以计算执行程序所需的时脉数,我们也可以把这些部份给去除,如果有需要计。