当前位置 : 安防网>安防技术>一卡通>阅读正文

程序在DSP上的优化

作者: 时间:2008-10-04
    本系统压缩部分程序以AVS参考代码rm52f为编码部分的源代码基础,针对AVS编码算法和DSP的特点对其结构和算法进行了调整和改进。对程序作如下优化:
      (1)合理设置结构体和变量类型。经常用到的数组变量不放到结构体中,否则要进行双级寻址,降低效率:对变量长度进行合理定义,严格合理区分8位、16位、32位的变量分配,能用小的则不用大的。(注意: 在循环体中,循环计数变量应一律使用int型,即32位,而不要使用 short 型)
      (2) 循环展开。过多过深的循环不利于编译器做软件流水优化,影响 DSP并行处理,因此根据 DSP 特性适当拆开内循环,可以使 DSP在一个周期内执行多条指令。优化循环较好的方法是抽出循环作为单独文件,对其重新编写、编译和单独执行。由于内层循环是惟一可以进行软件流水的循环,所以应该注意以下问题(否则会使循环不能进行软件流水,严重影响性能):①可以包括内联函数,但不可包括函数调用;② 不可有条件终止、提前退出指令;③ 必须递减计数且在0时终止(可用 -o2 、- o3 自动转换);④ 不可在循环体中修改循环计数值 。
      (3)使用EDMA方式进行数据搬移,这在CPU频繁访问外部存储器数据时能大大节省CPU资源。其主要实现了下列数据传输:视频数据从片外存储器传到片内 Cache 中;编码数据从片内传输到片外保存;做运动补偿时,将片外对应的参考块数据传输到片内。
      (4) 使用内联函数和线性汇编。DSP提供了许多非常有用的内联函数( Int ri nsics),使用这些内联函数可以很大程度地提高程序运行速度。对于耗时最多的运动估计和DCT变换部分进行线性汇编能大大提高程序的执行效率。使用线性汇编和标准汇编相比,不必考虑并行指令安 排、指令延迟、寄存器使用和功能单元的使用,可以大大缩短编写代码的时间,且效率远远高于 C 程序。
      (5)利用编译选顶。可以通过参数-o3的设置进行最高级别的软件流水线优化;可以通过参数 -mt告诉编译器源程序没有使用混叠技术,以此提高编译器优化的效果;可以通过参数 pm 的设置,使编译器对程序级代码进行优化。使用C64xx型DSP时,应使用 mv6400编译选项, 以便对此类 DSP 进行更高级别的优化。
      (6) 利用快速算法。AVS 编码器中,运动估计耗时相当大。优化运动估计的搜索次序,采用自适应的搜索策略可以较大地提高运动估计的速度,比如使用 Fast ME来进行优化。另外在1/4像素插值方面也可进行一些调整,以避免重复计算 。
上一篇:AVS的主要技术
下一篇:没有了
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册