微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于TMS320DM3730的H.264编码器移植与优化方法研究

基于TMS320DM3730的H.264编码器移植与优化方法研究

时间:05-18 来源:互联网 点击:


通过对程序速度性能的要求和代码结构的考虑,最终选择的编译选项为:-mv6400+ -pm -o3 -op3 -mf3 -mt。
3.2 内存优化
DSP的内部存储器和外部存储器由于总线频率的限制所以存在较大的读取速度差异,DM3730中片上内存的访问频率为300 MHZ,而对SDRAM的访问频率最高为133 MHZ,若利用静态地址分配将一些使用频繁而比较大的结构体或数组指定到片上内存中,那样程序的运行速度将会得到很大的提高。故可以将一些使用频繁的动态内存分配改为静态内存分配,然后将静态分配的常用的数据结构比如帧存储区利用DATA_SECTION指定段地址,通过.cmd文件将指定的段放置到片上内存中。
3.3 C语富代码的优化
1)使用内联函数
CCS的C6000编译器提供了一些经过汇编优化的C内联函数,可以使用这些内联函数替换x264中的相应函数,提高程序的运行速度。在x264中使用的内联函数有:_abs()、_amem4()、_amem4_const()、_pack2()、_paek14()、_min2()、_max2()、_dotpu4()等。
2)使用数据对齐指令DATA_ALIGN
数据对齐指令的完整的语法是:
#pragma DATA_ALIGN(symbol,constant)

该指令的作用是将对象symbol排列到constant指定的列边界上以方便读取。例如DM3730是支持对非对齐双字的一次性读取,但是如果内存地址对齐,同一个时钟周期内可以同时进行两组双字的读取,而如果不对齐则只能读取一组。因此在定义数组时使用DATA_ALIGN指令,可以大大减少数据读取时内存地址不对齐的情况,增加程序的并行性。
3)使用最小循环次数指令MUST_ITERATE
最小循环次数指令的完整语法是:
#pragma MUST_ITERATE(min,max,multiple)
其中min和max分别代表了循环的最小和最大迭代次数,multiple表明了循环次数是其倍数。使用最小循环次数程序指令可以通过通知编译器至少进行多少次循环,那样编译器可以将min次循环进行展开进行软件流水,进行循环之间并行处理,提高程序运行速度。
3.4 汇编代码的优化
C语言编译器通常只能完成大部分的工作,这个阶段的C语言代码在DSP端运行的效率并不是很高,为了进一步改善性能,对那些算法简单但计算量大且使用很频繁的函数使用汇编语言进行编写实现,可以大大提高程序运行速度。例如快速DCT变换、SAD、量化等算法过程可以考虑用汇编语言来编写。
线性汇编是TI公司简化C6000系列DSP的汇编语言而开发设计的,介于高级语言和机器语言之间。线性汇编语言的指令系统和普通的汇编语言的指令系统基本相同。在编写线性汇编语言的时候是不需要考虑到指令的延时、寄存器的使用和功能单元的分配,C6000编译器提供了汇编优化器进行汇编优化,会综合指令的延时、寄存器的使用和功能单元的分配进行优化,让线性汇编语言尽量的进行软件流水和指令的并行处理,提高汇编的运行速度。DM3730的DSP核为C64x+系列,线性汇编在上面是可以完美运行的。


表2所示为使用CCS中的profile工具测量的一些函数的C语言函数和线性汇编函数在DM3730上运行时钟周期对比。

4 实验结果分析
x264编码器移植成功后,使用标准CIF格式视频序列对移植和优化后的x264编码器在DM3730上进行测试,测试结果如下表3所示。


从表3可以看出,x264程序经过优化后,峰值信噪比有略微的下降,但该下降不影响整体视频效果,而编码速度得到了大大的提高。

5 结束语
文中基于DM3730平台,描述了进行x264编码器移植应该注意的主要问题,然后通过编译选项优化、内存优化、C语言代码的优化和汇编代码的优化等优化方法对x264编码器进行了优化。最后视频编码测试表明,优化的效果显著,且均值信噪比下降不多。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top