首页 / 专利库 / 视听技术与设备 / 运动补偿时间滤波 / 一种计算复杂度感知的视频解码宏块级并行调度方法

一种计算复杂度感知的视频解码宏级并行调度方法

阅读:1029发布:2020-06-03

专利汇可以提供一种计算复杂度感知的视频解码宏级并行调度方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种计算复杂度 感知 的视频解码宏 块 级并行调度方法,包含两项关键技术:一是根据熵解码和重排序之后的宏块信息,如非零系数个数、宏块 帧 间预测编码类型、 运动矢量 等,建立宏块解码复杂度预测线性模型,对每个模块进行复杂度分析,充分利用已知的宏块信息,提高并行效率;二是在满足宏块解码依赖的前提下,将宏块解码复杂度与计算并行相结合,对已获取的宏块复杂度进行排序,根据排序结果对宏块进行分组并发执行,分组大小根据GPU的计算能 力 动态确定,分组数目根据当前可并行的宏块数目动态确定,保证充分利用GPU的同时也控制 内核 函数发射次数,实现高效并行。另外,采用缓冲区的方式实现CPU和GPU的并行协同运行,充分利用资源,减少空闲等待。,下面是一种计算复杂度感知的视频解码宏级并行调度方法专利的具体信息内容。

1.一种基于计算复杂度感知的视频解码宏级并行调度方法,其特征在于,对压缩视频流的各图像均按照如下方法处理,所述方法包括如下步骤:
(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上完成解码的当前帧拷贝回主机内存,同时存放在参考帧的缓冲区中,作为解码下一帧的参考帧。
2.根据权利要求1所述的计算复杂度感知的视频解码宏块级并行调度方法,其特征在于,所述步骤(12)中的重排序是具体为:反zig-zag扫描。
3.根据权利要求1或2所述的计算复杂度感知的视频解码宏块级并行调度方法,其特征在于,所述步骤(44)具体为:将步骤(43)得到的残差系数通过运动补偿或帧内预测,得到原始宏块的像素值,其中宏块头信息中的宏块类型(mb_type),可确定宏块编码类型是帧间或者帧内,如果是帧间模式,则通过运动补偿得到原始像素值,如果是帧内模式,则通过帧内预测得到原始像素值。

说明书全文

一种计算复杂度感知的视频解码宏级并行调度方法

技术领域

[0001] 本发明属于视频解码技术领域,更具体地,涉及一种计算复杂度感知的视频解码宏块级并行调度方法,该方法是将压缩视频在异构多核平台上并行解码,利用对宏块解码各阶段计算复杂度的估计结果调度视频内宏块解码的并行执行顺序,减少并行处理同步开销,达到加速视频解码,节省系统能耗的效果。

背景技术

[0002] 目前,在数字电视、移动视频、视频监控等应用中,全高清1080P数字视频已经非常普及,视频分辨率正朝超高清,如4K、8K方向发展。视频分辨率的提高可以提供更好的用户体验,但是也使得编解码过程中的计算复杂度急剧增加,对其实时处理带来巨大挑战。新兴的CPU+GPU异构多核处理平台具有丰富的并行处理资源,因此如何利用多核处理器进行视频编解码的并行加速,提高视频编解码的吞吐率、减少延时是目前学术界和工业界的研究热点。近年来国内外对以H.264为代表的混合框架视频编解码器的并行优化研究有很多工作,其中重要的一个策略是宏块级的并行技术,即让不存在依赖关系的多个宏块可在不同处理核上同时并行进行解码。
[0003] 在此方面,文献[Meenderinck et.al.Scalability of Macroblock-level Parallelism for H.264 Decoding.ICPADS,pp.236-243,2009]对宏块级并行解码做了比较系统化、理论化的研究,提出了一个关于宏块级并行调度策略的基本模型,分析了解码宏块级并行的可能性,并且考虑了多处理器(Chip Multiprocessors,CMPs)进行宏块解码的线程同步开销,来分析宏块并行的最大上限。所谓线程同步开销,就是由于解码各个宏块的时间不同,当一个线程解码某一个宏块时,需要等待其依赖的宏块解码完成,其等待时间为依赖宏块的解码最大时间,从而导致线程之间存在同步开销。该文提出了三种宏块调度策略:静态调度、动态调度和带尾提交(Tail Submit)调度。静态调度即按照预先指定的顺序(例如zigzag)进行调度。这种方法的优点就是实现简单,并且当宏块解码时间相近时能高效地进行并行解码,其不足是可扩展性较差,必须按照事先指定的顺序解码,而且当每个宏块解码时间相差很大时,线程同步时间开销大。动态调度策略利用一个任务队列,将没有依赖的宏块放到一个任务队列中,空闲线程从任务队列中取得宏块进行解码,更新依赖表,将去除依赖的宏块入列,等待处理。这种方法的优点就是能够实现动态调度,具有较强的扩展性,而且相比静态调度,能达到更好的并行效果,但其存在线程对队列的争用问题,导致线程获得宏块的时间开销变大,尤其是当线程数目变多的时候,争用开销更大。带尾提交也是一种动态调度策略。这种方法就是每当一个宏块去除依赖之后,如果有空闲线程,则直接进行解码,否则将宏块入列,等待处理。当有多个去依赖的可以解码的宏块时,将其中一个宏块直接处理,另外的待解码宏块放入任务队列。带尾提交的动态调度策略提高了吞吐率,缓解线程争用压,是目前宏块级并行最好的调度策略之一,但仍然没有达到最佳性能。其原因有两个:首先,当处理器核增多时,对于全局队列的使用会引发大量的线程同步开销;其次,该方法未充分考虑Cache的局部性约束,因为多核之间存在潜在的垂直结构,即每一个核的访问速度不一致,导致通信开销和负载不均衡。[Vu,Dung,Jilong Kuang,and Laxmi Bhuyan."An Adaptive Dynamic Scheduling Scheme for H.264/AVC Decoding on Multicore Architecture."Multimedia and Expo(ICME),2012IEEE International Conference on.IEEE,2012]中提出了一种自适应的动态调度策略,采用多个任务队列来减少线程对队列宏块的争用,并且在分配任务时,将相邻的宏块分配到相邻的处理核上,有意识地考虑了局部性和负载均衡。多队列方式能够有效地缓解线程争用队列的开销,但是可适用范围较小,只有当线程数目达到一定数量时才会体现出它的优势。
[0004] 上述调度方法以任务队列的形式来缓解线程同步的开销,但也带来了线程争用队列的开销,未能从根本消除或减小线程同步的开销;多队列方式能够有效地缓解线程争用队列的开销,但是可适用范围较小,只有当线程数目达到一定数量时才会体现出它的优势。而且上述宏块级调度策略全部是针对多核CPU的,只有在多核服务器(如32核cc-NUMA SGI工作站、TILE64、Cell BE等)上应用才适用。对于当前广泛应用的基于扩展卡的图形处理器(Graphics Processing Units,GPU)计算平台,这些调度算法是不适用的。因为CPU的核心数目相对还是较少,并行线程的数目是有限的,而现有的普通GPU一般都拥有上千个流处理器,基于CPU的调度方案线程数目是与CPU核心数目是保持在一个数量级别的,因此不能充分利用GPU所具有的众多流处理器。另外,采用队列和线程池的方式实现的并行调度方案需要做很多逻辑判断,而GPU更适合做算术运算,不适合做这种类型调度。因此需要有一种新的针对GPU的宏块级并行调度方法实现解码加速,充分利用通用GPU的计算能力以及运算特点,同时释放CPU的资源完成其他任务。

发明内容

[0005] 本发明的目的在于提供一种适用于GPU的计算复杂度感知的视频解码宏块级并行调度方法。其利用宏块解码过程的中间信息来估计解码各阶段计算复杂度,通过解码各阶段计算复杂度来实现宏块的并行调度,降低GPU并行解码过程中的线程同步开销,从而提高并行处理效率。
[0006] GPU主要适用于数据并行度高,浮点计算量大的计算任务。因为GPU将更多的晶体管用于数据处理而不是逻辑控制,所以对于数据密集度高且相关度低的计算可以充分利用GPU的并行计算能力,实现并行。基于GPU的通用计算(General-purpose computing on graphics processing units,GPGPU)通常采用CPU+GPU模式,CPU负责处理复杂逻辑处理等计算,GPU负责数据密集型的大规模并行计算。本发明实施例中GPU与CPU的异构编程,编程模型见附图1,即串行代码段在CPU上执行,存在并行空间的代码段在GPU上并行执行,其中并行部分可以根据算法的特性,动态划分块大小。
[0007] 本发明所提出的计算复杂度感知的视频解码宏块级并行调度方法,对压缩视频流的各帧图像均按照如下方法处理:
[0008] (1)对帧图像进行熵解码和重排序,并将结果存储到指定的缓冲区中:
[0009] (11)将压缩视频流按照视频编码标准(例如H.264/AVC)规定的码流语法和语义对压缩码流进行解析,得到每个宏块的头信息(预测模式、编码块格式、量化参数、参考帧索引、运动矢量等)和量化系数。
[0010] (12)对步骤(11)中得到的每个宏块或者块的量化系数进行重排序,即反zig-zag扫描,将量化系数串按照对应块的二维矩阵形式进行存储,得到每个块对应像素的量化系数。
[0011] (13)将步骤(11)和(12)中得到的每个宏块头信息和重排序之后的量化系数存储到指定的缓冲区中,供接下来的解码阶段使用。
[0012] (2)根据步骤(13)中得到的宏块头信息和量化系数对该帧内每个宏块解码各阶段计算复杂度进行估计,得到每个宏块解码各阶段计算复杂度值:
[0013] (21)根据预测模式、编码块格式、量化参数、参考帧索引、运动矢量建立宏块解码复杂度估计的线性模型。
[0014] (22)将步骤(13)中得到的宏块头信息和量化系数代入到(21)建立的模型中,得到每个宏块解码各阶段计算复杂度值。
[0015] (3)根据步骤(22)得到的宏块解码各阶段计算复杂度值,对宏块接下来的解码过程进行动态并行调度:
[0016] (31)在满足宏块间依赖关系的前提下,将得到的宏块解码各阶段计算复杂度值进行排序,可以得到宏块解码各阶段对应计算复杂度的范围为[Cmin,Cmax]。
[0017] (32)将复杂度按照预设的区间划分,区间个数和大小根据GPU计算能力确定,计算能力强,则可并行宏块多,所以划分区间少,反之则多。
[0018] (33)每个宏块对应各阶段计算复杂度值映射到相应区间,区间内部实现宏块级并行,区间之间实现多内核函数并行。
[0019] (4)将步骤(13)中的熵解码和重排序的上下文传递到GPU存储区,结合(3)中实现的调度方法,在GPU上实现反量化、反变换、运动补偿帧内预测、去块滤波的并行化计算。
[0020] (41)将每一个宏块上下文信息拷贝到GPU全局存储区(Global Memory),变换矩阵、查找表等常量信息拷贝到常量存储区(Constant Memory),减少频繁访存时间。使用异步传输,实现GPU和CPU的协同工作,以及计算和数据传输的并行执行。
[0021] (42)将步骤(13)中重排序之后的数据进行反量化操作,得到每个宏块频域的残差系数。由于反量化过程中宏块之间没有依赖关系,根据算法的特性以及每个宏块反量化的复杂度值,将可并行宏块进行分块,多内核函数并行执行,内核函数内部以像素为粒度实现全并行。
[0022] (43)将步骤(42)得到的频域的残差系数通过反变换,得到每个宏块时域的残差系数。反变换过程中宏块之间也没有依赖关系,因此并行调度方法同反量化过程基本一致,只是由于算法不同,实现的方式不一样。
[0023] (44)将步骤(43)得到的残差系数通过运动补偿或帧内预测,得到原始宏块的像素值。其中宏块头信息中的宏块类型(mb_type),可确定宏块编码类型是帧间或者帧内,如果是帧间模式,则通过运动补偿,得到原始像素值,如果是帧内模式,则通过帧内预测得到原始像素值。运动补偿或帧内预测在保证宏块之间依赖关系的前提下,同样原理实现并行化。
[0024] (45)将步骤(44)得到的原始像素值进行滤波,去除块效应,得到最终输出的图像。由于每个宏块的去块滤波的复杂度是接近的,因此这一过程的并行不用考虑复杂度进行调度,而是采用单内核函数,在满足宏块依赖的前提下实现并行。
[0025] (5)将GPU上完成解码的当前帧拷贝回主机内存,同时存放在参考帧的缓冲区中,作为解码下一帧的参考帧。
[0026] 本发明的技术效果体现在:
[0027] 本发明提出的计算复杂度感知的视频解码宏块级并行调度方法包含两项关键技术:一是根据熵解码和重排序之后的宏块信息,如非零系数个数、宏块帧间预测编码类型、运动矢量等,建立宏块解码复杂度预测模型;二是在满足宏块解码依赖的前提下,将宏块解码复杂度估计与计算并行度相结合,实现动态宏块并行调度,并对可并行的宏块进行分组并行执行,减少GPU线程之间同步开销,提高并行效率。
[0028] 关键技术一,宏块各阶段复杂度估计建模。分析解码各个阶段的算法特性,熵解码和重排序可并行的空间较小,且逻辑运算较多,不适合在GPU上实现,因此将解码过程分为两个部分。在CPU上实现熵解码和重排序两个模块,在GPU上实现反量化、反变换、运动补偿或帧内预测、去块滤波四个模块。在原始的串行解码或者多核并行解码过程中,宏块完成熵解码和重排序之后,没有充分利用当前解码的宏块的基本信息,直接进行下一解码模块,没有充分达到并行效果。[田婷,余胜生,郭红星,等.视频解码计算复杂度的线性建模理论及在线预测方法[J].计算机学报,2012,35(10):2048-2062.]中提到,解码复杂度的估计方法主要有两类,基于统计分析和基于预测的方法,本发明采用基于统计分析的方法来进行复杂度估计。根据熵解码之后的宏块信息,非零系数个数、宏块编码预测类型、运动矢量进行线性建模,对每个模块的复杂度进行分析。此方法比较简单,也能有效利用已知的宏块信息。
[0029] 关键技术二,宏块解码复杂度与并行调度相结合,实现高效并行。根据已有的宏块复杂度信息,对宏块解码复杂度进行排序,根据排序结果对宏块进行分组并发执行,分组大小根据GPU的计算能力动态确定,分组数目根据当前可并行的宏块数目动态确定,保证充分利用GPU的同时也控制内核函数的发射次数,将内核发射的开销尽量降低。
[0030] 另外,当CPU正在执行码流读取、熵解码、重排序时,GPU处于空闲状态,因为需要等待CPU的计算结果,而当GPU执行反变换、反量化、运动补偿或帧内预测、去块滤波时,CPU是处于空闲状态的,对于硬件的利用率不高,因此采用缓冲区的方式实现CPU和GPU的并行协同运行,即CPU进行N+1帧的熵解码、重排序操作,GPU执行N帧的反变换、反量化、运动补偿或帧内预测、去块滤波模块,充分利用资源,减少空闲等待。
[0031] 综上所述,本发明提供了一种适用于GPU的计算复杂度感知的视频解码宏块级并行调度方法,充分利用GPU的特性,实现高效并行解码。

附图说明

[0032] 图1 CPU与GPU(以Nvidia CUDA为例)异构编程模型;
[0033] 图2是本发明实施例中本发明的系统结构图。
[0034] 图3是本发明实施例中宏块解码依赖示意图;
[0035] 图4是本发明实施例中宏块解码并行空间示意图;
[0036] 图5是本发明实施例中宏块并行调度模型;
[0037] 图6是本发明实施例中CPU与GPU协同工作示意图;

具体实施方式

[0038] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0039] 本发明的系统结构图见附图2,其中将整个解码过程分成三个大的阶段,CPU计算模块、调度模块、GPU并行计算模块。CPU计算模块包含熵解码和重排序两个计算阶段,调度模块包含GPU上执行的各阶段的复杂度估计建模和计算及并行调度,GPU并行计算模块实现反量化、反变换、运动补偿或帧内预测、去块滤波四个计算过程的GPU并行化。
[0040] 以FFMEPG中H.264/AVC解码器解码1080P(1920×1080)视频为例,对压缩视频流的各帧图像均按照如下方法处理:
[0041] (1)对帧图像进行熵解码和重排序,并将结果存储到指定的缓冲区中:
[0042] (11)在解码之前,先将解码流程的各个阶段进行解耦合,分成两个大的部分:CPU执行部分和GPU执行部分。CPU执行部分包含熵解码和重排序两个部分,GPU部分包含反量化、反变换、运动补偿或帧内预测和去块滤波四个部分。
[0043] (12)以帧图像分辨率1920×1080为例,其包含120×68个16×16的宏块。以宏块单位对当前帧码流按照H.264/AVC协议规定的语法与语义进行解析,可以得到每一个宏块的头信息(预测模式、编码块格式、量化参数、参考帧索引、运动矢量等)和量化系数。
[0044] (13)对步骤(12)中得到的每个宏块或者块的量化系数进行重排序,即反zig-zag扫描,将量化系数串按照对应块的二维矩阵形式进行存储,得到每个块对应像素的量化系数。
[0045] (14)将步骤(12)和(13)中得到的每个宏块头信息和重排序之后的量化系数存储到指定的缓冲区中,供接下来的解码阶段使用。CPU和GPU各自的执行模块都有对应的上下文信息,仅重排序之后的上下文需要从CPU传输到GPU,其他各个连续模块之间都可以直接复用上下文。
[0046] (2)根据熵解码之后得到的当前帧所有宏块的信息,根据建立的复杂度预测模型,进行复杂度预测,具体为:
[0047] (21)对于每个宏块,直接利用步骤(14)中得到的宏块信息,主要根据宏块类型(mb_type)、非零系数个数(non_zero_coef)、宏块预测模式(mb_pred)、运动矢量(motion vector,MV)等来进行复杂度预测,分别建立解码各阶段的计算复杂度与宏块头信息及量化系数的线性模型。由于熵解码(Variable Length Decoding,VLD)之后的模块才会在GPU上进行并行处理,所以预测每个宏块的复杂度时,只考虑熵解码之后的各个模块复杂度。
[0048] (22)去块滤波对于每一个宏块的基本操作都是一样的,即根据边界强度进行相应的滤波操作,所以在估计计算复杂度的时候可以不需要考虑,因此可以将宏块解码总的计算复杂度定义为(I),其中Ctotal表示重排序之后除去块滤波外各个阶段计算复杂度之和,Ciq表示每个宏块反量化过程计算复杂度,Cidct表示每个宏块反变换过程计算复杂度,Cmc/ip表示每个宏块运动估计或帧内预测过程计算复杂度,
[0049] Ctotal=Ciq+Cidct+Cmc/ip   (I)
[0050] (23)反量化与反变换模块对每个固定大小的压缩域系数块进行相同的加法和乘法操作,其计算复杂度与宏块头信息和量化系数无关,而是由视频分辨率大小决定的,分辨率大,对应宏块数目多,则所需反量化和反变换的操作多,宏块内部计算量是一样的。但是目前所采用的优化反变换算法会利用其中的多个系数为零这个特点对计算过程进行简化,在这种情况下反变换的计算量与非零系数的个数和出现位置有关,为了适应两种情况,反量化和反变换复杂度可定义为公式(II)和(III),其中ncoef表示非零系数个数,aiq表示优化条件下每个宏块内部一个非零系数反量化计算复杂度,即有Ciq=aiq×ncoef,而在非优化条件下每一个宏块反量化计算复杂度为常量biq,即Ciq=biq,同理,ait表示优化条件下每个宏块内部一个非零系数反变换计算复杂度,bit为常量,表示在非优化条件下每一个宏块反变换化计算复杂度,
[0051] Ciq=aiq×ncoef+biq   (II)
[0052] Cit=ait×ncoef+bit   (III)
[0053] 对于运动补偿或帧内预测主要分为两个计算模块,获取参考块所需的计算复杂度和残差求和的计算复杂度。残差求和对于每一个宏块的基本操作都是一样的,而获取参考块的计算复杂度取决于块的类型(mb_type)、块预测模式(mb_pred)及运动矢量(motion vector),此参数都为宏块头组成参数,预测模式越复杂、分数精度的运动矢量都将导致宏块头变得更长,所以可以认为宏块头长度与运动补偿或帧内预测复杂度呈正相关,表达式可定义为(IV),其中lh表示宏块头长度,amc/ip表示宏块头每个码元预取数据平均计算复杂度,bmc/ip为常量,表示每个宏块残差求和计算复杂度,
[0054] Cmc/ip=amc/ip×lh+bmc/ip   (IV)
[0055] (24)在满足宏块间依赖关系的前提下,将解码过程中得到的宏块信息依次代入到(II)、(III)、(IV)得到宏块解码各阶段的计算复杂度值。
[0056] (3)根据步骤(24)得到的宏块解码各阶段计算复杂度值,对宏块接下来的解码过程进行动态并行调度:
[0057] (31)在满足宏块间依赖关系的前提下,将可并行宏块的各解码阶段复杂度值进行排序,得到宏块复杂度的范围为[Cmin,Cmax]。在解码过程中,帧内预测和运动向量预测会依赖其相邻的左、左上、上、右上四个宏块解码完成,去块滤波依赖于其相邻的左和上边两个宏块解码完成,依赖关系见附图3。由此依赖关系可得到宏块空间并行图4,其中箭头指向的黑色宏块是可以并行解码的,因为它们所依赖的宏块已经解码完成。
[0058] (32)将复杂度按区间划分,如[Cmin,C1),[C1,C2),...,[Cn,Cmax]。区间个数和大小根据GPU计算能力确定,计算能力强,设备流处理器多则划分的区间就少,反之划分区间多,尽量保证每一个区间宏块间计算复杂度相近。
[0059] (33)每个宏块对应的复杂度值映射到相应区间。区间内部实现宏块级并行,区间之间实现多内核函数并行。并行调度模型见附图5,将可并行宏块根据每个阶段的计算复杂度进行排序,将宏块按照复杂度区间进行重新分组,以多个内核函数并行执行所有宏块组。
[0060] (4)将步骤(14)中的熵解码和重排序的上下文传递到GPU存储区,结合(3)中实现的调度方法,在GPU上实现反量化、反变换、运动补偿或帧内预测、去块滤波的并行化:
[0061] (41)将每一个宏块上下文信息拷贝到GPU全局存储区(Global Memory),变换矩阵、查找表等常量信息拷贝到常量存储区(Constant Memory),减少频繁访存时间。使用异步传输,实现计算和数据传输的并行执行,模型图见附图6,其中CPU进行N+1帧的熵解码、重排序操作,将其计算结果传递到GPU的缓冲区,用于GPU完成解码过程中余下的计算,GPU执行N帧的反变换、反量化、运动补偿或帧内预测、去块滤波模块。
[0062] (42)将步骤(14)中重排序之后的数据进行反量化操作,得到每个宏块频域的残差系数。由于反量化过程中宏块之间没有依赖关系,根据算法的特性以及每个宏块反量化的复杂度值,将可并行宏块进行分块,多内核函数并行执行,内核函数内部以像素为粒度实现全并行。
[0063] (43)将步骤(42)得到的频域的残差系数通过反变换,得到每个宏块时域的残差系数。反变换过程中宏块之间也没有依赖关系,并行调度方法与反量化类似。
[0064] (44)将步骤(43)得到的残差系数通过运动补偿或帧内预测,得到原始宏块的像素值。其中宏块头信息中的宏块类型(mb_type),可确定宏块编码类型是帧间或者帧内,如果是帧间模式,则通过运动补偿,得到原始像素值,如果是帧内模式,则通过帧内预测得到原始像素值。运动补偿或帧内预测在保证宏块之间依赖关系前提下,同样原理实现并行化。
[0065] (45)将步骤(44)得到的原始像素值进行滤波,去除块效应,得到最终输出的图像。由于去块滤波每个宏块的复杂度是接近的,因此该过程的并行不用考虑计算复杂度进行调度,而是采用单内核函数,在满足宏块依赖的前提下实现并行化。
[0066] (5)将GPU上完成解码的当前帧拷贝回主机内存,同时存放在GPU参考帧的缓冲区中,作为解码下一帧的参考帧。
[0067] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈