现在的位置: 首页 > 综合 > 正文

HEVC中比较耗时的模块

2014年01月12日 ⁄ 综合 ⁄ 共 1244字 ⁄ 字号 评论关闭

先引用unix编程艺术第一章的一段话
Rob Pike,最伟大的C语言大师之一,在《Nos on C Programming》中从另一个稍微不同的角度表述了Unix的哲学
    原则1:你无法判定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。
    原则2:估量。在你没对代码进行估量,特别是没有找到最耗时的那个部分之前,别去优化速度。
    原则3:.......
    ......

根据大师的原则,我们必须找出整个HEVC编码框架中最耗时的地方,也就是整个编码框架的瓶颈所在。由于HEVC编码结构的基础CU,TU的是基于四叉树的划分,所以整个编码框架是一个递归的结构,编码器的优化包括两个方面
    1.预测和变换的快速模式选择
    2.关键瓶颈算法的优化
第一条预测和变换的快速模式选择,我们讲在后面的文章中进行讨论,这篇文章我们先讨论一下找出HEVC编码框架中最耗时的部分。
    为了找到编码框架中最耗时的算法,我们把编码的结构配置到最简单,即CU和TU的层数都为1,不做递归的划分,只做Intra的编码,配置如下:
#======== Unit definition ================
MaxCUWidth                    : 16          # Maximum coding unit width in pixel
MaxCUHeight                   : 16          # Maximum coding unit height in pixel
MaxPartitionDepth             : 1           # Maximum coding unit depth
QuadtreeTULog2MaxSize         : 4           # Log2 of maximum transform size for
                                            # quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize         : 3           # Log2 of minimum transform size for
                                            # quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter       : 1
QuadtreeTUMaxDepthIntra       : 1

CU的大小为16x16,TU的大小为8x8,开启VS2010的性能分析工具,可以找到最耗时的几个模块
1.RDOQ      量化的率失真优化 15%以上
2.HAD       harmand编码的SAD 20%
3.transform
4.quant  
其中RDOQ不是必须的模块,但是测试发现RDOQ对编码的效果有很大的提升,在开启RDOQ的情况下,同等PNSR情况下码率会降低5%左右。
还好这几个模块都可以很好的用SIMD来进行汇编优化,由此可见标准组织设计的巧妙。这些模块的具体算法,后面将会有详尽的论述。

下一篇的文章将对HEVC帧内预测的算法进行详细的分析。

抱歉!评论已关闭.