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指令执行的次数,将指令级汇编应用到变换、量化等其他编码算法加速。
- H.265优化问题
- H.264率失真优化的模式选择问题
- H.264性能优化
- H.264优化方向
- h.264优化笔记
- SER2016 DIV1 问题 H: Paint(区间问题贪心+dp优化)
- h.264 率失真优化
- atlcontrols.h问题
- streams.h问题汇总
- intsafe.h找不到问题
- Qedit.h问题
- iostream.h找不到问题
- 问题 H : 猜数字
- 问题 H: 查找细胞
- 问题 H: 扫雷
- 问题 H 查找整数
- 问题 H: 逃出迷宫
- 问题 H: 生理周期
- leetcode---3Sum
- codeforces #300 A. Cutting Banner
- Linux学习笔记一(Linux常用命令1)
- 动态规划算法介绍:
- HDU-1116-Play on Words
- H.265优化问题
- HDU 2089 数位dp水题 统计区间中不包含62 和 4 的个数
- jQery命名空间
- Spark中组件Mllib的学习27之逻辑回归-多元逻辑回归,较大数据集,带预测准确度计算
- 230. Kth Smallest Element in a BST
- 文章标题
- vertica-dbvis实现failover和负载均衡
- C++第6次作业
- Deep Learning Hangzhou Meetup--华为2012实验室&深度学习国际群 联合举办