H.265优化问题

来源:互联网 发布:狂发短信软件 编辑:程序博客网 时间:2024/05/22 10:26

1 为啥优化?

对计算量的需求增加了4倍以上,过高的计算和存储对H.265

TMS320c66是一款多核高性能的处理器8个内核和一个网络协处理.

优化处理:

对每一帧采取片级编码且用7个核实现并行处理,不采用CU或者帧级编码。其原因是:

(1)片是介于CU与帧之间的。因为CU(编码单元)会参考同一片中的其他CU。因此采用CU级编码会极大地增加核间通讯压力。

(2)各片之间没数据关联性,各片完全独立,待编码单元无需参考其他片即可完成编码。

(3)帧级编码对DDR和Cache有极高的要求,但DSP平台硬件资源有限,帧级编码无法实现。

进行结构化处理。

方法:

通过Intel VtuneAmplifer  工具统计热点函数及其所占用时间,可以得出编码过程耗时最多的是运动估计(Motion Estimation ME)

和模块决策(Mode decision MD).

帧内帧间预测都是运动估计,运动估计分整像素运动和分像素运动。

整像素运动估计(IME):将图像的的每一帧分成许多不重叠的宏块,先假设宏块内所有像素的位移量都相同,

然后对每个宏块到参考帧中某一给定的搜索范围内,根据一定的匹配准则,找出与当前最相似的块,即匹配块;匹配块与当前块的相对位移即运动矢量。

分像素运动估计(FME):由于自然物体运动的连续性,相邻两帧之间的块的运动矢量不一定是以整像素为基本单位的。IME完成粗精度的帧间匹配搜索,FME完成二分之一或四分之一像素精度的匹配。

模块决策就是寻找最佳匹配的过程。

IME与MD算法中,大部分操作都是SAD(运算都是矩阵运算)和SSD运算,考虑到SAD运算的特性,使用DSP平台的SIMD加速指令来实现优化。

SAD操作需要进行大量重复性的数学运算,指令级流水线可充分利用DSP提供的并行处理能力,实现处理速度的成倍提高。具体将块大小分类,根据矩阵行数据数量来进行分类组织。4xN,8xN,12xN,16xN,32xN,48xN,64xN.相同的行大小带来的好处是,每次行循环的循环次数和偏移量是固定的。这可以将判断控制行大小内层循环去掉,使得流水线在整个块的SAD和SSD计算过程中不会被打断,同时偏移量数量的减少减少了寄存器的使用数量。

采用数据重组目的是为了使数据运算通过SIMD指令并行运算,流水线的建立是为了使得SIMD指令充分并行执行。

采用Avgu4指令来替代C语言中的乘法后右移的取平均值方式。其可以实现1个指令周期取4对数据的平均值,大大减少了运算的时间。

由于块的运算,其行数都是4的倍数即行数能均分成2份,因此使用两个指针使得两行数据能够并行运算,减少判断是否到行尾的判断次数,使得流水线更加紧凑、效率高。

总结:结构优化,关键算法优化、IME优化,FME优化。

可优化的空间:如将MxN矩阵数据组织成Aligned类型以提高load指令的效率,更大范围内的数据共享可以减少load指令执行的次数,将指令级汇编应用到变换、量化等其他编码算法加速。

0 0
原创粉丝点击