本发明专利技术公开了一种计算复杂度感知的视频解码宏块级并行调度方法,包含两项关键技术:一是根据熵解码和重排序之后的宏块信息,如非零系数个数、宏块帧间预测编码类型、运动矢量等,建立宏块解码复杂度预测线性模型,对每个模块进行复杂度分析,充分利用已知的宏块信息,提高并行效率;二是在满足宏块解码依赖的前提下,将宏块解码复杂度与计算并行相结合,对已获取的宏块复杂度进行排序,根据排序结果对宏块进行分组并发执行,分组大小根据GPU的计算能力动态确定,分组数目根据当前可并行的宏块数目动态确定,保证充分利用GPU的同时也控制内核函数发射次数,实现高效并行。另外,采用缓冲区的方式实现CPU和GPU的并行协同运行,充分利用资源,减少空闲等待。
【技术实现步骤摘要】
本专利技术属于视频解码
,更具体地,涉及,该方法是将压缩视频在异构多核平台上并行解码,利用对宏块解码各阶段计算复杂度的估计结果调度视频帧内宏块解码的并行执行顺序,减少并行处理同步开销,达到加速视频解码,节省系统能耗的效果。
技术介绍
目前,在数字电视、移动视频、视频监控等应用中,全高清1080P数字视频已经非常普及,视频分辨率正朝超高清,如4K、8K方向发展。视频分辨率的提高可以提供更好的用户体验,但是也使得编解码过程中的计算复杂度急剧增加,对其实时处理带来巨大挑战。新兴的CPU+GPU异构多核处理平台具有丰富的并行处理资源,因此如何利用多核处理器进行视频编解码的并行加速,提高视频编解码的吞吐率、减少延时是目前学术界和工业界的研究热点。近年来国内外对以Η.264为代表的混合框架视频编解码器的并行优化研究有很多工作,其中重要的一个策略是宏块级的并行技术,即让不存在依赖关系的多个宏块可在不同处理核上同时并行进行解码。在此方面,文献对宏块级并行解码做了比较系统化、理论化的研究,提出了一个关于宏块级并行调度策略的基本模型,分析了解码宏块级并行的可能性,并且考虑了多处理器(Chip Multiprocessors,CMPs)进行宏块解码的线程同步开销,来分析宏块并行的最大上限。所谓线程同步开销,就是由于解码各个宏块的时间不同,当一个线程解码某一个宏块时,需要等待其依赖的宏块解码完成,其等待时间为依赖宏块的解码最大时间,从而导致线程之间存在同步开销。该文提出了三种宏块调度策略:静态调度、动态调度和带尾提交(Tail Submit)调度。静态调度即按照预先指定的顺序(例如zigzag)进行调度。这种方法的优点就是实现简单,并且当宏块解码时间相近时能高效地进行并行解码,其不足是可扩展性较差,必须按照事先指定的顺序解码,而且当每个宏块解码时间相差很大时,线程同步时间开销大。动态调度策略利用一个任务队列,将没有依赖的宏块放到一个任务队列中,空闲线程从任务队列中取得宏块进行解码,更新依赖表,将去除依赖的宏块入列,等待处理。这种方法的优点就是能够实现动态调度,具有较强的扩展性,而且相比静态调度,能达到更好的并行效果,但其存在线程对队列的争用问题,导致线程获得宏块的时间开销变大,尤其是当线程数目变多的时候,争用开销更大。带尾提交也是一种动态调度策略。这种方法就是每当一个宏块去除依赖之后,如果有空闲线程,则直接进行解码,否则将宏块入列,等待处理。当有多个去依赖的可以解码的宏块时,将其中一个宏块直接处理,另外的待解码宏块放入任务队列。带尾提交的动态调度策略提高了吞吐率,缓解线程争用压力,是目前宏块级并行最好的调度策略之一,但仍然没有达到最佳性能。其原因有两个:首先,当处理器核增多时,对于全局队列的使用会引发大量的线程同步开销;其次,该方法未充分考虑Cache的局部性约束,因为多核之间存在潜在的垂直结构,即每一个核的访问速度不一致,导致通信开销和负载不均衡。中提出了一种自适应的动态调度策略,采用多个任务队列来减少线程对队列宏块的争用,并且在分配任务时,将相邻的宏块分配到相邻的处理核上,有意识地考虑了局部性和负载均衡。多队列方式能够有效地缓解线程争用队列的开销,但是可适用范围较小,只有当线程数目达到一定数量时才会体现出它的优势。上述调度方法以任务队列的形式来缓解线程同步的开销,但也带来了线程争用队列的开销,未能从根本消除或减小线程同步的开销;多队列方式能够有效地缓解线程争用队列的开销,但是可适用范围较小,只有当线程数目达到一定数量时才会体现出它的优势。而且上述宏块级调度策略全部是针对多核CPU的,只有在多核服务器(如32核cc-NUMA SGI工作站、TILE64、Cell BE等)上应用才适用。对于当前广泛应用的基于扩展卡的图形处理器(Graphics Processing Units,GPU)计算平台,这些调度算法是不适用的。因为CPU的核心数目相对还是较少,并行线程的数目是有限的,而现有的普通GPU—般都拥有上千个流处理器,基于CPU的调度方案线程数目是与CPU核心数目是保持在一个数量级别的,因此不能充分利用GPU所具有的众多流处理器。另外,采用队列和线程池的方式实现的并行调度方案需要做很多逻辑判断,而GPU更适合做算术运算,不适合做这种类型调度。因此需要有一种新的针对GPU的宏块级并行调度方法实现解码加速,充分利用通用GPU的计算能力以及运算特点,同时释放CHJ的资源完成其他任务。
技术实现思路
本专利技术的目的在于提供一种适用于GPU的计算复杂度感知的视频解码宏块级并行调度方法。其利用宏块解码过程的中间信息来估计解码各阶段计算复杂度,通过解码各阶段计算复杂度来实现宏块的并行调度,降低GHJ并行解码过程中的线程同步开销,从而提高并行处理效率。GPU主要适用于数据并行度高,浮点计算量大的计算任务。因为GPU将更多的晶体管用于数据处理而不是逻辑控制,所以对于数据密集度高且相关度低的计算可以充分利用GPU的并行计算能力,实现并行。基于GPU的通用计算(General-purpose computing ongraphics processing units,GPGPU)通常采用CPU+GPU模式,CPU负责处理复杂逻辑处理等计算,GPU负责数据密集型的大规模并行计算。本专利技术实施例中GPU与CPU的异构编程,编程模型见附图1,即串行代码段在CPU上执行,存在并行空间的代码段在GPU上并行执行,其中并行部分可以根据算法的特性,动态划分块大小。本专利技术所提出的计算复杂度感知的视频解码宏块级并行调度方法,对压缩视频流的各帧图像均按照如下方法处理:(1)对帧图像进行熵解码和重排序,并将结果存储到指定的缓冲区中:(11)将压缩视频流按照视频编码标准(例如H.264/AVC)规定的码流语法和语义对压缩码流进行解析,得到每个宏块的头信息(预测模式、编码块格式、量化参数、参考帧索弓丨、运动矢量等)和量化系数。(12)对步骤(11)中得到的每个宏块或者块的量化系数进行重排序,即反zig-zag扫描,将量化系数串按照对应块的二维矩阵形式进行存储,得到每个块对应像素的量化系数。(13)将步骤(11)和(12)中得到的每个宏块头信息和重排序之后的量化系数存储到指定的缓冲区中,供接下来的解码阶段使用。(2)根据步骤(13)中得到的宏块头信息和量化系数对该帧内每个宏块解码各阶段计算复杂度进行估计,得到每个宏块解码各阶段计算复杂度值:(21)根据预测模式、编码块格式、量化参数、参考帧索引、运动矢量建立宏块解码复杂度估计的线性模型。(22)将步骤(13)中得到的宏块头信息和量化系数代入到(21)建立的模型中,得到每个宏块解码各阶段计算复杂度值。(3)根据步骤(22)得到的宏块解码各阶段计算复杂度值,对宏块接下来的解码过程进行动态并行调度:(31)在满足宏块间依赖关系的前提下,将得到的宏块解码各阶段计算复杂度值进行排序,可以得到宏块解码各阶段对应计算复杂度的范围为。(32)将复杂度按照预设的区间划分,区间个数和大小根据GPU计算能力确定,计算能力强,则可并行宏块多,所以划分区间少,反之则多。(33)每个宏块对应各阶段计算复杂度值映射到相应区间,区间本文档来自技高网...
【技术保护点】
一种基于计算复杂度感知的视频解码宏块级并行调度方法,其特征在于,对压缩视频流的各帧图像均按照如下方法处理,所述方法包括如下步骤:(1)对帧图像进行熵解码和重排序,并将结果存储到指定的缓冲区中:(11)将压缩视频流按照视频编码标准规定的码流语法和语义对压缩码流进行解析,得到每个宏块的头信息和量化系数,所述每个宏块的头信息包括预测模式、编码块格式、量化参数、参考帧索引、运动矢量;(12)对步骤(11)中得到的每个宏块量化系数进行重排序,将量化系数串按照对应块的二维矩阵形式进行存储,得到每个块对应像素的量化系数;(13)将步骤(11)和(12)中得到的每个宏块头信息和重排序之后的量化系数存储到指定的缓冲区中,用于接下来的解码阶段使用;(2)根据步骤(13)中得到的宏块头信息和量化系数对该帧内每个宏块解码各阶段计算复杂度进行估计,得到每个宏块解码各阶段计算复杂度值:(21)根据预测模式、编码块格式、量化参数、参考帧索引、运动矢量建立宏块解码复杂度估计的线性模型;(22)将步骤(13)中得到的宏块头信息和量化系数代入到步骤(21)建立的模型中,得到每个宏块解码各阶段计算复杂度值;(3)根据步骤(22)得到的宏块解码各阶段计算复杂度值,对宏块接下来的解码过程进行动态并行调度:(31)在满足宏块间依赖关系的前提下,将得到的宏块解码各阶段计算复杂度值进行排序,得到宏块解码每个阶段对应计算复杂度的范围为[Cmin,Cmax];(32)将各阶段解码计算复杂度值按照预设的区间划分,区间个数和大小根据GPU计算能力确定,计算能力强,同时可并行的宏块多,则划分区间少,反之则多;(33)每个宏块对应解码计算复杂度值映射到相应区间,区间内部实现宏块级并行,区间之间实现多内核函数并行;(4)将步骤(13)中的熵解码和重排序的上下文传递到GPU存储区,结合步骤(3)中实现的调度方法,在GPU上实现反量化、反变换、运动补偿或帧内预测、去块滤波的并行化;(41)将每一个宏块上下文信息拷贝到GPU全局存储区,变换矩阵、查找表常量信息拷贝到常量存储区,减少频繁访存时间;使用异步传输,实现计算和数据传输的并行执行;(42)将步骤(13)中重排序之后的数据进行反量化操作,得到每个宏块频域的残差系数;由于反量化过程中宏块之间没有依赖关系,根据算法的特性以及每个宏块反量化的复杂度值,将可并行宏块进行分块,多内核函数并行执行,内核函数内部以像素为粒度实现全并行;(43)将步骤(42)得到的频域的残差系数通过反变换,得到每个宏块时域的残差系数;(44)将步骤(43)得到的残差系数通过运动补偿或帧内预测,得到原始宏块的像素值。运动补偿或帧内预测在保证宏块之间依赖关系的前提下,同样原理实现并行解码。(45)将步骤(44)得到的原始像素值进行滤波,去除块效应,得到最终输出的图像;由于去块滤波每个宏块的复杂度是接近的,因此这一过程的并行不进行调度,而是采用单内核函数,在满足宏块依赖的前提下实现并行;(5)将GPU上完成解码的当前帧拷贝回主机内存,同时存放在参考帧的缓冲区中,作为解码下一帧的参考帧。...
【技术特征摘要】
【专利技术属性】
技术研发人员:郭红星,潘俊夫,朱文周,
申请(专利权)人:华中科技大学,
类型:发明
国别省市:湖北;42
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。