DSP平台c语言编程优化方法(精).pdfVIP

  • 3
  • 0
  • 约1.03万字
  • 约 9页
  • 2021-06-25 发布于湖北
  • 举报
实用文档 dsp 编程优化方法 工作阶段:工作流程一般分为三个阶段。 阶段一:直接按照需要用 C语言实现功能。在实际的 DSP应用中,许多算法都是 非常复杂,直接用汇编代码编写,虽然优化效率很高,可是实现的难度却很大, 所以一般都采用先用 C语言来实现,然后编译运行,利用 C64X开发环境的 profile?clock 工具测试程序运行时间,若不能满足要求,则进行第二阶段。 阶段二: C 语言级的优化。选择 C64X开发环境提供的优化方式以及充分运用其他 技巧,优化 C代码,若还不能满足效率要求,则进行第三步。 阶段三:汇编级的优化。将上一阶段 C程序中优化效率较低的部分提出来,用线 性汇编语言编写,利用汇编优化器进行优化。汇编优化器的作用是让开发人员在 不考虑 C64X流水线结构和分配其内部寄存器的情况下,编写线形汇编语言程 序,然后汇编优化器通过分配寄存器和循环优化将汇编语言程序转化为利用流水 线方式的高速并行汇编程序。 上述的三个阶段不是都必须经过,当在某一阶段获得了期望的性能,就不必进行 下一阶段的优化。 1) 选用 C编译器提供的优化选项 在编译器中提供了分为若干等级和种类的自动优化选项,如下: ● -o :使能软件流水和其他优化方法 ● -pm :使能程序级优化 ● -mt :使能编译器假设程序中没有数据存储混淆,可进一步优化代码。 ● -mg :使能分析( profile )优化代码 ● -ms :确保不产生冗余循环,从而减小代码尺寸 ● -mh :允许投机执行 ● -mx :使能软件流水循环重试,基于循环次数对循环试用多个方案,以便选择 最佳方案。 根据实际编译的程序,选择合适的优化选项,进行源程序的优化。 2) 减小存储器相关性 为使指令达到最大效率, C64X编译器尽可能将指令安排为并行执行。为使指令并 行操作,编译器必须知道指令间的关系,因为只有不相关的指令才可以并行执 行。当编译器不能确定两条指令是否相关时,则编译器假定它们是相关的,从而 不能并行执行。设计中常采用关键字 const 来指定目标, const 表示一个变量或 一个变量的存储单元保持不变。因此,在代码中加入关键字 const ,可以去除指 令间的相关性。例如下面的程序: void vecsum(short *sum,short*in1,short*in2,unsigned int N) 文案大全 实用文档 { int i; for(i=0;iN;i++) sum[i]=in1[i]+in2[i]; } 由其相关图 2(a) 可见,写 sum可能对指针 in1 、in2 所指向的地址有影响,从而 in1 和 in2 的读操作必须 等到写 sum操作完成之后才能进行,降低了流水效率,为帮助编译器确定存储器 的相关性,使用 const 关键字来指定一个目标,上面的源程序可改为含关键字 const 的优化源代码: void vecsum(short * sum, const short*in1,const short*in2,unsigned int N) { int i; for(i=0;iN;i++) sum[i]=in1[i]+in2[i]; } 由其相关图 2(b) 可见,由于使用了关键字 const ,消除了指令之间的相关路径, 从而使编译器能够判别内存操作之间的相关性,找到更好的指令执行方案。 3) 使用内联函数( intrinsics ) 内联函数是 C64X编译器提供的专门函数,它们与嵌入式的汇编指令是一一对应 的,其目的是快速优化 C源程序。在源程序中调用内联函数,与调用一般的函数 相同,只不过内联函数名称前有下划线作特殊标识。当汇编指令功能不易采用 C 语言表达

文档评论(0)

1亿VIP精品文档

相关文档