- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
H算法的优化策略
H.264算法的优化策略
摘自/Article/Video/200909/2151.html???更新时间:2009-9-14?
1 代码优化的主要方法
通过代码移植能够获得在DSP上初步运行的代码,但是它由于没有考虑到DSP自身的硬件特点,不适合DSP强大的并行处理能力,因此执行效率低下,不能满足我们的实时要求,需要对其进行进一步优化。
对DSP代码进行优化的手段有以下三个层次,分别是:项目级(Project)优化,算法级(algorithm)优化,指令级(instruction)优化。下面对这三种优化手段分别进行介绍。
1)项目级优化
项目级优化,是对项目的整体优化,主要手段有以下几点:首先是在对整个项目进行编译链接生成DSP代码时,合理选择配置编译器选项,并针对这些参数选择,对程序进行调整和修正。其中进行的工作有:
项目编译时,通过-o3选项来调用最高级别的软件流水线优化,通过-mw选项来调用软件流水线循环反馈,从而增大软件编译成DSP代码的并行性。
项目编译时,用-pm,-o3和-mt选项来改善循环,多重循环,庞大循环体循环的性能。
只读变量声明成const型,循环计数器定义为int型,从而加大DSP代 码的并行性。
其次对程序结构进行调整,对不适合DSP执行的语句进行改写,以提高代码的并行性。例如,DSP处理器并行性很高, 能够对代码进行流水线处理,但是原始代码存在大量条件判断语句,会对流水线造成中断,不利于代码的并行处理,因此,可以采用判断提前,去除不必要的判断等 方式减少判断语句对流水线的中断。
2)算法级优化
算法级优化,就是利用H.264的自身特点,采用一些快速算法,在不影响编码质量的前提下,提高编码器速度,从而在速度和质量上达到一个较好的平衡。
3)指令级优化
上述方法无法达到要求时,就要进行指令级优化。C64x系列DSP有丰富的具有高度并行性处理能力的指令。下面介绍一些C64x系列DSP媒体处理相关指令。
ADD4:加法指令,一次执行4对8位数的加法。一个寄存器有32位, 可以存放4个8位数据。计算中,两个源寄存器中的四组对应8位数据 分别相加,结果存放在目标寄存器中。
AVGU4:一次执行4对8位无符号数据求平均运算。计算中,两个源 寄存器中的4组8位无符号型紧缩字求平均,结果以4个8位紧缩字的 形式存放在目标寄存器中。
DOTPU4:一次执行4对8位无符号数据点乘运算。计算中,两个源寄 存器中的4组8位无符号型紧缩字对应相乘,乘积相加,所得结果存放 在32位寄存器中
SUBABS4:一次执行4对8位无符号数据求差绝对值运算。计算中,两个源寄存器中的4组8位无符号型紧缩字对应相减,差值求绝对值,所得结果以4个8位紧缩字的形式存放在目标寄存器中。
LDB/LDH/LDW/LDDW:将8位,16位,32位或64位数据读入目标寄 存器中,所读取的数据在内存中是地址align(32位对齐)的数据。
LDNW/LDNDW:将一个32位或64位的非对齐数据读入目标寄存器 中。
STB/STH/STW/STDW:将8位,16位,32位或64位数据写入内存中, 所写入的数据在内村中是地址align(32位对齐)的数据。
STNW/STNDW:将一个32位或64位的非对齐数据写入内存中。
除了这些高并行度的指令,TI还提供了丰富的算法库[37],如Image/Video Processing Library图像/视频处理库(IMGLib),Digital signal processor Library数字信号处理库(DSPLib)等。这些算法库中的函数都是已经充分优化过的算法模块,而且大都提供对应的C、线性汇编和汇编源代码,并有 文档进行API介绍。所以要充分利用。
2 算法关键模块的优化
对模块的优化分三步进行。先认真分析代码,并进行相应的调整,例如尽量减少有判断跳转的代码,特别是在for循环 中,因为判断跳转会打断软件流水。可以用查表或者用_cmpgtu4、_cmpeq4等intrinsic来代替比较判断指令,从而巧妙地替代判断跳转语 句。同时还可以采用TI的CCS中所提供的#pragma,为编译器提供尽量多的信息。这些信息包括for循环的次数信息、数据对齐信息等。如果经过这部 分优化后还无法满足系统要求,则对这部分模块使用线性汇编来实现。
2.1 整数变换和量化
整数变换和反变换的运算步骤见下表:
图1 DCT与IDCT的运算步骤
整数运算和反变换的次数极多,比如,在D1格式下,4?4DCT等要做21600次,如果算上其他大小宏块的这些变换,时间消耗还是很多的,所以仍然有优化的必要。下面以整数变换为例介绍如何用线性汇编对C语言代码进行优化:
1)预测残差的输入
DCT和IDCT优
文档评论(0)