一种VP9解码器并行流水线任务划分方法与流程

文档序号:11157562阅读:890来源:国知局
一种VP9解码器并行流水线任务划分方法与制造工艺
本发明涉及视频编解码技术,具体涉及VP9解码器流水线改进方法。
背景技术
:随着网络通信技术的快速发展,网络视频业务的需求日益增长,网络视频数据占据了互联网数据的绝大部分。2010年,谷歌开始推行WebM工程,致力于开发下一代开放、免授权费的视频压缩标准VP9。2013年2月21日,第一个支持VP9解码技术的谷歌Chroma网页浏览器发布了。VP9在编码率上较上一代编解码标准VP8和H.264提高了30%~50%,同时也与新一代的标准HEVC不相上下,但是却是以更大的计算量为代价的。因此,优化VP9解码流程成了改善VP9视频编解码技术的一个重要研究方向。目前,国内外有关于VP9视频编解码的研究工作少之又少,本发明将为VP9解码器提供一种是是可行的优化方案,并且为以后关于最新一代编码标准的技术提供参考。技术实现要素:本发明针对VP9解码器现有技术,提出一种VP9解码器并行流水线任务划分方法,具体技术方案如下。一种VP9解码器并行流水线任务划分方法,其包括如下步骤:(1)利用热点函数的运行时间来分析VP9解码器中熵解码、反量化、反变换、帧内预测、帧间预测、去块滤波以及像素自适应补偿各阶段的计算量,从而明确每个阶段中最耗时的计算部分;所述热点函数是各阶段中占用运行时间最长的一个或多个函数,包括复杂的计算模块或者重复调用许多次的计算模块;进而得到VP9解码器中熵解码、反量化、反变换、帧内预测、帧间预测、去块滤波以及像素自适应补偿各阶段占整个解码过程的时间比例,为后面的流水线划分提供基础;(2)对VP9解码器的各个阶段进行拆分和分级流水线分配,根据占整个解码过程的运行时间最长的阶段所进行的运动补偿拆分成并行的三个子模块,去块滤波拆分成两个子模块即垂直方向去块滤波和水平方向去块滤波,形成5级流水线结构,分别是熵解码作为第一级,三个子模块并行的运动补偿为第二级,帧内预测和反量化以及反变换构成第三级,垂直方向去块滤波为第四级,水平方向去块滤波为第五级。进一步地,步骤(1)所述的利用热点函数的运行时间来分析VP9解码器的各阶段计算量中,通过在程序中埋点来测量热点函数运行时间,根据热点函数的时间来计算VP9解码器中各阶段的运行时间。进一步地,步骤(2)所述对VP9解码器的各个阶段进行拆分和分级流水线分配中,以熵解码阶段的计算量占整个解码过程的比例作为基准,设计5级流水线,使每一级流水线运行时间相当且均控制在8%到12%之间,流水线无阻塞地运行。进一步地,步骤(2)所述对VP9解码器的各个阶段进行拆分和分级流水线分配中,将运动补偿拆分成三个并行的子模块:水平方向插值1/2像素点计算模块、垂直方向插值1/2像素点计算模块、1/4像素点计算模块,通过这三个模块的并行计算提高解码效率。进一步地,步骤(2)所述对VP9解码器的各个阶段进行拆分和分级流水线分配中,将去块滤波拆分成垂直去块滤波和水平去块滤波两个子模块作为两个串行运作的流水级,使这两级的运行时间与前面流水级时间相当,从而提高解码效率使流水线达到分级效果。与现有技术相比,本发明的优点与积极效果在于:1、本发明的方法首先采用热点函数的运行时间来分析VP9解码器的各阶段计算时间,从而明确每个阶段中最耗时的计算部分。由程序局部性原理,10%的代码占用了系统90%的运行时间。那么发现和解决这10%代码中存在的问题,就能对90%的运行时间进行优化。而且,程序运行时的瓶颈大部分存在于热点函数中,所以解决瓶颈问题也需要对热点函数加以剖析。热点函数分析就是抛开那些次要的冗余代码,着重分析程序中关键路径上的代码,这样有助于发现性能问题。2、本发明的方法对VP9解码器的各个阶段进行拆分和分级流水线分配,根据占整个解码过程的运行时间最长的阶段所进行的运动补偿拆分成并行的三个子模块,去块滤波拆分成两个子模块,即垂直方向去块滤波和水平方向去块滤波,与其余的模块形成流水线。形成5级流水线结构,分别是熵解码作为第一级,三个子模块并行的运动补偿为第二级,帧内预测和反量化以及反变换构成第三级,垂直方向去块滤波为第四级,水平方向去块滤波为第五级。本发明的流水线每一级的计算时间都彼此相当,这样,在同一时刻,各模块并行工作,处理任务在时间上相互重叠。数据流按一定的规则被分成宏块,各模块以宏块为单位对数据进行并行处理。附图说明图1是VP9解码器运行时间分布图。图2是VP9解码器流水线设计图。图3是具体任务并行划分方案图。图4是流水线工作示意图。具体实施方式下面结合附图对本发明的具体实施方式做进一步说明,但本发明的实施和保护范围不限于此。如图2所示是本发明基于VP9解码器各阶段的VP9解码器流水线设计图。通过在程序中埋点来测量热点函数运行时间,根据热点函数的时间来计算VP9运行分布时间,由各部分运行时间的分布知道,熵解码所占的计算量为8%,这一部分的计算无法进行并行或流水加速,因此在设计流水线的时候每级的计算量都应该在8%左右。另外在运动补偿时,需要用到参考帧中的像素值作为参考,也就是说在帧级别的数据流中存在帧间预测这个大的数据反馈通路,这个反馈涉及到从运动补偿,重构到去块滤波。因此为了保证数据流的单向性,将熵解码(VLD)设为第一级,所有后续模块为第二级,2级之间以宏块为单位传递数据。在前面有关计算量的统计知道,熵解码仅占整个计算量的8%左右,而后续所有阶段(包括帧内预测、反变换反量化、运动补偿和去块滤波)占74%左右,因此两个流水级的计算量极不平衡,必须将后续模块的加速并行。通过对数据流的分析,我们知道所有后续部分间的数据流在宏块级别基本上存在单向的数据流,唯一的数据反馈出现在帧内预测和重构像素,这是由于帧内预测时需要用到当前帧内之前已经重构的像素作为参考,因此为了避免这一反馈对流水线的破坏,我们将帧内预测和重构像素放到一个大的模块中划分为一个流水级,这样就保证了这个大的模块对于其上端模块和下端模块都具有单向的数据相关性。至此,后续部分中共有4个模块,分别是运动补偿模块,反变换反量化模块,帧内预测与重构模块以及去块滤波模块,这4个模块可以作为流水线的4个流水级。但是,从流水线各流水级计算量的均衡角度来看,这样划分流水级并不是合理的。这四个模块的计算量大概分别占41%,8%,8%,23%,为了使计算量均衡可以将第二、第三个模块合并为一个模块(帧内预测反变换反量化重构模块),这样三个模块的计算量分别为:运动补偿模块41%,帧内预测反变换反量化重构模块16%,去块滤波23%。另外,考虑到流水线的第一级也就是熵解码的计算量为8%,后续部分中宏块级别的流水线结构即使性能达到最好,计算量也是很不均衡的,因此必须要加速后续模块。对于运动补偿模块,从前面对数据流的分析我们知道,虽然分像素插值的三个部分的数据流具有单向性可以实现宏块级的三级流水,但是对于每个像素而言,数据流并不是都经过这3个部分,所以这种流水线的设计方案是不划算的。在进行像素内插计算时,像素间的计算没有相关性,因此,根据这种计算的无相关性,可以在3个任务上并行加速运动补偿模块,使每个任务的计算量达到13%左右。对于帧内预测反变换反量化重构模块,由于存在帧内预测和重构像素这个反馈回路,也不能实现流水线结构,只能根据块内数据的无相关性在2个核上进行并行加速,使1个任务的计算量达到8%左右,另一个任务的计算量为8%左右。对于去块滤波,从数据流分析中我们知道,在宏块级别去块滤波的二维方向上可以实现二级流水,每级的计算量为12%左右。因此,在后续的流水线级别划分中,我们可以划分为4个流水级,第一级为运动补偿模块,第二级为帧内预测反变换反量化重构模块,第三级为垂直方向去块滤波模块,第四级为水平方向去块滤波模块,这些流水级之间的数据以宏块为单位传递。如图3所示是本发明对于流水线中各项任务的具体分配,第一级的熵解码使用一个线程来进行完成,第二级的运动补偿划分为三个任务线程,第三级的帧内预测和反量化以及反变换构则分配到两个线程上执行,最后的第四级和第五级流水线则分配到一个线程上。如图4所示是基于宏块的流水线示意图。在同一时刻,各模块并行工作,处理任务在时间上相互重叠。数据流按一定的规则被分成数据块,各模块以数据块为单位对数据进行并行处理。表1指标性能CPUIntel(R)Xeon(R)E5-2660核心数8主频2.20GHzL3缓存20MB内存24GB操作系统Windows7专业版编译器微软VS2010平台v100编译器表2解码器的输入视频时间比VP9(foreman_480x272)68.9%VP9(Mobile_848x480)75%VP9(Ducks_1280x720)66.6%如表1所示是用于本发明用于验证的仿真平台环境。表2所示是解码效率性能测试结果。从结果可知,本方法对三种不同分辨率的视频序列下(480x272,848x480,1280x720)的解码时间均有减少,因此本发明所提出的VP9解码器并行流水线任务划分方法对解码效率有较大提升。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1