CN102497550A - H.264编码中运动补偿插值的并行加速方法及装置 - Google Patents
H.264编码中运动补偿插值的并行加速方法及装置 Download PDFInfo
- Publication number
- CN102497550A CN102497550A CN201110398920XA CN201110398920A CN102497550A CN 102497550 A CN102497550 A CN 102497550A CN 201110398920X A CN201110398920X A CN 201110398920XA CN 201110398920 A CN201110398920 A CN 201110398920A CN 102497550 A CN102497550 A CN 102497550A
- Authority
- CN
- China
- Prior art keywords
- pixel
- gpu
- interpolation
- obtains
- video
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000001133 acceleration Effects 0.000 title claims abstract description 5
- 238000004364 calculation method Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 10
- 238000005457 optimization Methods 0.000 claims description 6
- 230000008878 coupling Effects 0.000 claims description 5
- 238000010168 coupling process Methods 0.000 claims description 5
- 238000005859 coupling reaction Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 abstract description 3
- 238000004458 analytical method Methods 0.000 abstract description 2
- 230000003247 decreasing effect Effects 0.000 abstract 1
- 230000015654 memory Effects 0.000 description 8
- 238000012360 testing method Methods 0.000 description 4
- 230000015572 biosynthetic process Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000000205 computational method Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种H.264编码中运动补偿插值的并行加速方法及装置,所述的方法包括为:主处理器根据待运行的视频编码任务需要的资源和协处理器GPU上的剩余计算资源,决定新增视频编码任务的分配;协处理器GPU根据插值操作的分数像素类型和数据依赖关系,将分数像素插值运算操作按预定规则处理。引入了异构多核系统,针对数据间的依赖性进行去耦合分析,提出了对运动补偿插值进行并行化的方法,充分发挥了异构多核系统中GPU的大规模数据并行计算能力,在完全不影响图像质量的前提下,降低了CPU利用率,满足了多路、高清视频编码的实时性需求。
Description
一、技术领域
本发明属于视频编码技术领域,更具体地,在一些异构多核系统中实现对视频编码过程中的运动补偿插值并行加速的方法及装置。
二、背景技术
H.264视频编码为了消除视频数据的冗余,采用了帧内预测、帧间预测运动估计、运动补偿、熵编码等方法。其中,H.264中使用了1/4像素精度的运动补偿,这是相对于之前的编码器能够提高编解码性能的原因之一。1/4像素精度的运动补偿相对于在H.263/MPEG2中仅适用1/2像素精度来说可以使编码想能提高2dB,而1/8像素精度对后被H.264舍去了的原因是它只能在性能上提升1dB而需要以更加高昂的计算复杂度来换取。
由于在H.264中采用了树状结构的运动补偿,即将一个16×16的宏块分割成16×8,8×16,8×8,8×4,4×8,4×4的子块,在帧间预测时,这些不同大小的块都是从参考帧中相同大小分割的块来预测得到,并且预测得到的运动矢量可以是非整像素点的,从而提高预测的精度。但是参考帧没有分像素点,所以必须通过对周边整像素点的上采样插值来获得1/2像素和1/4像素。由于帧间预测是在一帧图像内进行的,需要对整帧图像的整像素点进行插值得出对应的分像素点,所以需要进行大量重复的插值操作。在H.264中分为1/2像素和1/4像素插值两部分,具体分布如图1所示。
H.264标准里,半像素插值使用一个六抽头的滤波器,其系数为(1,-5,20,-5,1),例如图1中b、h、m、s所对应的水平和垂直半像素点首先需要使用六抽头滤波器通过整像素点来计算出中间值b1、h1、m1、s1,然后将他们截断到[0~255]的范围内的到相应的b、h、m、s:
b1=E-5×F+20×G+20×H-5×I+J
h1=A-5×C+20×G+20×M-5×R+T
m1=B-5×D+20×H+20×N-5×S+U
s1=K-5×L+20×M+20×N-5×P+Q
b=Clip((b1+16)>>5)
h=Clip((h1+16)>>5)
m=Clip((m1+16)>>5)
s=Clip((s1+16)>>5)
其中Clip(*)是将*截断至[0~255]的范围内。
在图1中aa、bb、cc、dd、ee、ff、gg、hh也是通过上述方法获得。
类似的,中心半像素点j可以通过以下的方式得到:
j=Clip(((cc-5×dd+20×h1+20×m1-5×ee+ff)+512)>>10)
或者
j=Clip(((aa-5×bb+20×b1+20×s1-5×gg+hh)+512)>>10)
另外,1/4像素插值使用的是二值线性滤波器,例如图1中a、c、d、n、f、i、k、q、e、g、p、r所对应的1/4像素点由下式获得:
a=Clip((G+b+1)>>1)
c=Clip((H+b+1)>>1)
d=Clip((G+h+1)>>1)
n=Clip((M+h+1)>>1)
f=Clip((b+j+1)>>1)
i=Clip((h+j+1)>>1)
k=Clip((j+m+1)>>1)
q=Clip((j+s+1)>>1)
e=Clip((b+h+1)>>1)
g=Clip((b+m+1)>>1)
p=Clip((h+s+1)>>1)
r=Clip((m+s+1)>>1)
其中Clip(*)是将*截断至[0~255]的范围内。
可以看出,H.264运动补偿插值需要很大的计算量,每个整像素点都要计算出其相应的1/2像素点和1/4像素点,其中1/2像素点有3个,1/4像素点有12个。如此高的计算复杂度严重限制了H.264对高清视频以及超高清视频的实时编码,所以有必要探寻一种能够有效加快运动补偿插插值计算的方法以加速分像素点的计算。
传统的H.264编码器如JM模型和X264编码器在运动补偿插值中都是使用的串行的方式进行的,即以光栅扫描的方式首先进行1/2像素的计算,然后再进行1/4的计算。即使在X264编码其中已经使用了像MMX(Multi Media Extension多媒体增强指令集)、SSE(StreamingSIMD Extensions单指令多数据流扩展)这些SIMD(Single Instruction Multiple Data单指令多数据)指令集优化,有了一定的并发能力,但是对于高清视频巨大的计算强度仍然显得有些吃力,毕竟CPU的架构主要是针对串行的应用程序进行设计的。随着GPGPU的不断发展,越来越多的PC机都有独立的GPU,同时像CUDA(Compute Unified Device Architecture统一计算设备架构)一系列的GPU平台不断推出,这使得大规模数据的并行计算成为可能。H.264运动补偿插值的过程中数据量很庞大,但是数据计算过程中的耦合性不是很强,所以比较容易实现大量数据的并行化,完全可以利用GPU来取代CPU实现运动补偿插值的计算。
三、发明内容
本发明引入了异构多核系统,针对数据间的依赖性进行去耦合分析,提出了对运动补偿插值进行并行化的方法,充分发挥了异构多核系统中GPU的大规模数据并行计算能力,在完全不影响图像质量的前提下,降低了CPU利用率,同时加快了高清视频的编码速度,特别适用于高清视频实时编码的需求。
为了实现上述目标,本发明提供一种异构多核的并行化计算方法,其整体框架如图2所示。
整个系统是由主处理器CPU和协处理器GPU组成的。主处理器CPU负责编码任务的控制、各路视频数据的编码(除运动补偿插值等外)、多路编码重建帧数据的同步、向协处理器GPU传送重建帧数据(待插值)、接受协处理器GPU传送回来的插值后数据、将插值后数据进行分离移交各路编码、视频输出。
协处理器GPU负责编码任务中接受CPU传输过来的待插值数据、对待插值数据进行并行化插值计算、将插值计算结果送回主处理器CPU以进行下一步的编码过程。
图2中编码任务路数可以仅为一路视频编码,也可以是多路视频编码。多路数据整合单元的作用是将各路视频编码同步,使每路编码都同步到获得重建帧,等待运动补偿插值的地方。然后将每路编码视频的重建帧数据集中并传送至协处理器GPU,以此提高数据吞吐量,减少总的数据传输时间。同理,数据分离单元是指主处理器CPU将协处理器GPU传送回来的插值后数据分离为每路视频编码对应的数据,以继续每一路视频的编码。
图2中主处理器CPU中的请求控制单元的作用是通过计算视频编码任务需要的资源和协处理器GPU上的剩余计算资源,来决定视频编码任务的分配,即是否将新视频编码任务添加到当前多路视频编码队列中,请求控制单元的处理流程如图3所示。
请求控制单元获得新的一路视频编码请求后,经过四个步骤对该请求做出响应:
步骤1:计算该路请求需占用GPU资源数目。每路视频编码占用GPU上的资源由该路编码视频的视频属性和编码算法属性决定。视频属性是指视频的分辨率,不同的分辨率的视频所需的运算量不同,在GPU上所占用的资源数目也不同。编码算法属性是指编码算法中运动补偿插值所要达到的分数像素精度和插值时所用的滤波器性质等。有的编码算法只要达到1/2像素精度,而有的算法要求为1/4甚至是1/8像素精度,在H.264/AVC编码中,运动补偿的精度为1/4像素精度。不同分数像素精度所要求的计算量随像素精度的提高以指数形式递增,所以不同分数像素精度在GPU上要求的资源数目也不同。滤波器性质是指编码算法中所用的滤波器的维度、阶数、滤波系数等等,不同性质的滤波器所要求的计算资源也不同。
步骤2:查看当前多路视频编码已经占用的GPU资源。当前多路视频编码已经占用的GPU上的资源为当前多路视频编码队列中每路视频编码所占用的GPU资源总和。
步骤3:计算当前GPU剩余资源,当前GPU剩余资源为GPU上最大资源数目减去当前多路视频编码占用的GPU资源数目。GPU上最大资源数是指在协处理器GPU上能够开辟的最大线程thread数目,最大线程数目等于在GPU上所能开辟的最多的块block数目乘以块中能开辟的最大线程thread数目。
步骤4:比较当前GPU剩余资源数目和新的一路视频编码请求所需资源数目。如果GPU剩余资源数目大于新的一路视频编码请求所需资源数目,则请求成功,并将该路视频编码添加至当前多路视频编码队列中;否则请求失败,取消该路视频编码请求。
图1所示的协处理器GPU中视频编码任务的运动补偿插值并行计算,其步骤分为五步,具体如图4所示:
步骤一:接受CPU传输过来的重建帧数据,该数据为待插值数据;
步骤二:以并行的方式执行预定规则中的步骤1;
步骤三:以并行的方式执行预定规则中的步骤2;
步骤四:以并行的方式执行预定规则中的步骤3;
步骤五:将插值计算的结果传回主处理器CPU以进行各路视频的编码的后续部分。
在整个插值的过程中,像素精度为1/4像素,需要对整数像素进行插值得到1/2像素和1/4像素,其中1/2像素可以分为水平方向1/2像素、垂直方向1/2像素和中心1/2像素。水平方向1/2像素和垂直方向1/2像素可以直接由整数像素通过六抽头滤波器进行插值得到,滤波器系数为(1,-5,20,20,-5,1);中心1/2像素由水平方向1/2像素或者垂直方向1/2像素通过六抽头滤波器进行插值得到,滤波器系数也为(1,-5,20,20,-5,1);1/4像素由整数像素和多有1/2像素通过线性维纳滤波器进行插值得到,滤波系数为(1,1)。所以分数像素的计算存在数据依赖关系,不同类型的分像素计算需分先后,在协处理器GPU进行分像素插值操作时,可以设置三种预定规则:
预定规则1:步骤1:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得水平方向1/2像素点和垂直方向1/2像素点;步骤2:在GPU上由一帧图像的整数像素点和步骤1中获得的水平方向1/2像素点或者垂直方向1/2像素点通过六抽头滤波器获得中心1/2像素点;步骤3:在GPU上由一帧图像的整数像素点、步骤1中获得的水平方向1/2像素点、步骤1中获得的垂直方向1/2像素点、步骤2中获得的中心1/2像素点通过线性维纳滤波器获得所有的1/4像素点。
预定规则2:步骤1:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得水平方向1/2像素点;步骤2:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得垂直方向1/2像素点,由一帧图像的整数像素点和步骤1中获得的水平方向1/2像素点通过六抽头滤波器获得中心1/2像素点;步骤3:在GPU上由一帧图像的整数像素点、步骤1中获得的水平方向1/2像素点、步骤2中获得的垂直方向1/2像素点和中心1/2像素点通过线性维纳滤波器获得所有的1/4像素点。
预定规则3:步骤1:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得垂直方向1/2像素点;步骤2:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得水平方向1/2像素点,由一帧图像的整数像素点和步骤1中获得的垂直方向1/2像素点通过六抽头滤波器获得中心1/2像素点;步骤3:在GPU上由一帧图像的整数像素点、步骤1中获得的垂直方向1/2像素点、步骤2中获得的水平方向1/2像素点和中心1/2像素点通过线性维纳滤波器获得所有的1/4像素点。
在预定规则的三个步骤中,为每个水平方向1/2像素点和垂直方向1/2像素点、中心1/2像素点和每个1/4像素点的计算都分配一个线程;在每个步骤中,所有的计算都是以GPU核为单位的并行和GPU核内部的流处理器的并发的方式进行。
三个预定规则的第三个步骤都是一样的,而第一步和第二步存在着差别。具体来说,预定规则1中步骤1计算水平方向和垂直方向1/2像素,而预定规则2和预定规则3则分别把垂直方向1/2像素和水平方向1/2像素的计算放到步骤2中。这样可以灵活选取预定规则来适应不同的硬件系统,以达到最高的硬件使用效率。比如:在以CUDA架构为基础的系统中,由于在使用共享缓存时可能会出现冲突bank conflict,则预定规则2和预定规则3相对于预定规则1会是更好的选择。
预定规则中每个步骤所要求的GPU上的资源数目是不同的,这意味着当前多路编码所占用的GPU资源为预定规则三个步骤中所占最多资源的步骤决定。
四、附图说明
图11/4像素插值像素分布图
图2H.264编码中运动补偿插值的并行加速示意图
图3主处理器CPU中的请求控制单元的处理流程图
图4协处理器GPU中的并行插值流程图
图5运动补偿插值优化的系统框架图
图6运动补偿插值中数据依赖关系Level one
图7运动补偿插值中数据依赖关系Level two
图8运动补偿插值中数据依赖关系Level three
图9并行化运动补偿的具体实现示意图
五、具体实施方式
以下结合附图和具体的实施用例来对本发明进一步额详细说明
在H.264视频编码中,使用运动估计和运动补偿来进行帧间预测,从而达到了大大提高了编码压缩效率、降低码流的效果。运动估计和运动补偿获得相应块的运动矢量,该运动矢量为1/4像素精度。由于原始图像只有整像素点,没有1/2和1/4分像素点,所以需要对整帧的图像进行内插来获得这些分像素点。通过对内插后的图像进行具有分像素精度的运动矢量搜索。运动搜索的1/4像素精度是H.264编码图像质量比以往H.26x系列视频编解码标准更好的重要因素。运动补偿插值用了一个六抽头的滤波器(滤波系数:1,-5,20,20,-5,1)来对图像内插,1/4像素精度的插值提高了图像重建的精度,但需要对原始图像每个整像素点都要内插得到3个1/2像素点和12个1/4像素点,从而大大增加了实现的复杂度。
现有的H.264编码器都是使用串行的方式对进行运动补偿插值,即使是使用了诸如MMX、SSE等指令集优化的策略,其并行程度也比较有限。随着现有GPGPU的快速发展,其计算能力特别是并行计算能力得到了飞速的提升。像NVIDIA公司的CUDA就是提供了并行环境开发的平台,该平台不但可以充分利用GPU的大规模数据并行能力,还提供了友好的编程环境。
本发明旨在提升H.264编码器的编码速度,采用了CPU+GPU的异构多核架构,通过将编码模块中运动补偿插值模块移植到GPU上并行实现,通过充分发挥CPU和GPU各自的优势,实现编码速度的提升。
需要指出的是GPU虽然有大规模并行计算的能力,但是由于缺少足够的缓存,对于一些分支判断比较复杂的应用其性能会急剧下降。H.264编码器中存在着大量的分支预测,并不是所有的编码模块都适合移植到GPU上实现并行计算的。另一方面,CPU上有着大量的cache存储器,其目的就是为了适应一些高复杂度判断以及有着大量分支预测的应用程序,所以可以通过将需要较高的计算量但是分支预测不是很多的模块放在GPU上运行,将分支预测较高的模块放在CPU上运行可以充分利用GPU和CPU各自的优点,避开其缺点,从而提高系统的效率。
本发明针对在运动补偿插值中分数像素点的计算之间数据耦合度较低,将除运动补偿插值以外的模块保留在CPU上运行,而仅将运动补偿插值放在GPU上进行计算,整个流程框架如图5所示。
为了能够让插值部分更有效地移植到GPU上,我们需要对插值计算的数据进行去耦合,从而可以让插值操作在使用SIMD的GPU上更大程度的实现数据的并行操作。
H.264编码运动补偿插值中存在三个层次的依赖关系。
Level one:水平方向1/2像素点和垂直方向1/2像素点都是使用六抽头滤波器通过整像素点获得,而这两类1/2像素点之间没有任何的数据依赖关系。
Level two:中心1/2像素不是通过整像素点获得,而是使用六抽头滤波器通过在level one中得到的水平方向1/2像素点或者垂直方向1/2像素点获得。图7显示了中心1/2像素需要在水平1/2像素或者垂直1/2像素点计算可得后便可以计算获得。
Level three:1/4像素点使用线性维纳滤波器通过整像素点和1/2像素点来获得。图8(a)中的1/4像素点通过一个整像素点和水平方向1/2像素点得到,图8(b)中的1/4像素点全部由1/2像素点来得到。图8表明了1/4像素点的插值必须要在所有1/2像素点插值完成后才可进行。
插值计算的依赖关系决定了各个分像素点计算的先后顺序。前面提及的三个level,它们的计算是有先后顺序的,level two在level one之后,而level three在level two之后。在每个level中的计算却是没有任何相互的依赖关系,所以在每个level中的操作都可以同时进行。由于同一个level中的每个像素的操作都是相同的,所以完全可以利用SIMD技术将其在GPU上并行处理,从而实现加速。
通过前面依赖关系的讨论,下面就以基于的CUDA架构的单路视频编码运动补偿插值并行优化的方案为例,进一步说明本发明提出的一种H.264编码中运动补偿插值的并行优化方法的实现过程,如图9所示。
步骤1,将原始整像素点值从CPU传给GPU,GPU对这些整像素点值以并行的方式进行插值。
步骤2,在GPU上,对整像素点进行纵向插值,获得垂直方向1/2像素点,如图9第二步所示。
步骤3,在GPU上,对整像素点进行横向插值,获得水平方向1/2像素点;同时对步骤二中获得的垂直方向1/2像素点进行横向插值,获得中心1/2像素点。计算水平方向1/2像素点和中心1/2像素点所需要的整像素点和垂直方向1/2像素点之间没有任何数据耦合,所以可以将垂直方向1/2像素点和中心1/2像素点通过并行计算获得。至此,所有1/2像素点计算完成。
步骤4,使用整像素点和步骤2、步骤3中计算得到的1/2像素点计算1/4像素点。至此,所有1/2像素点和1/4像素点全部计算完成。
步骤五,将经过插值得到的所有分像素点值传回GPU以继续插值之后的编码操作。
需要指出的是,这里我们采用了预定规则3而不是预定规则1进行插值的计算,采用该规则的原因是在具体的实现方案中选择了CUDA作为平台,这样做更好的减少CUDA中共享内存的bank conflict。在CUDA编程中,为了能够提高数据的读取速度,需要把数据放入shared memory,而在进行并行化实现时,如果同一个half warp中的线程去读取同一个bank中的数据,则会出现bank conflict。在图6中我们可以看到,如果在level one中的水平方向1/2像素点和垂直方向1/2像素点同时在CUDA上同时计算,那么他们需要同时去读取最左上方的整像素点,由于这些整像素点存放在shared memory中,而计算水平方向1/2像素点和垂直方向1/2像素点由不同的线程完成,从而会产生bank conflict,使得读取该点的操作变成串行而不是并行,降低了并行性能。通过将水平方向的像素点的计算放在步骤3可以避免这一问题。当然这样做是因为CUDA本身的硬件架构的限制,在其他的硬件架构中,可能使用其他预定规则可以更加高效。
基于上面的方案,利用以下环境对该方案进行了测试:GeForce 9800GT PCIe显卡(拥有14个SM,总共112个SP),Intel四核CPU Q8300,2G DDR2内存。运行环境为Linux OpenSuse11.1,CUDA toolkit and SDK 2.3。对X264编码器仅仅使用CPU进行编码和使用CPU+GPU的架构进行编码得到了测试数据,如表1所示:
表1 CPU和GPU运动补偿插值编码测试
从测试结果中可以看到,如果抛开存储器访问,那么使用GPU进行运动补偿插值的速度是使用CPU进行运动补偿插值速度的两倍左右。即使将存储器访问时延算上,那么对于1080P以及D1的视频GPU的运动补偿插值速度相对于CPU还有10%左右的提升。需要指出的是,首先GPU的时钟频率没有CPU快,只有CPU的一半左右,其次X264编码器本身已经使用了诸如MMX、SSE这些SIMD指令集优化,使得CPU得到了充分利用。从测试结果中还可以看出,利用GPU除了在编码速度上可以得到提升,还可以为CPU分担一部分资源占用,降低编码过程中的CPU占用率。对于同一分辨率的视频,在GPU上进行计算的步骤以及计算量都是一样的,所以相同分辨率不同内容的视频在GPU上进行运动补偿插值的时间是相同的,这点可以从表中得到印证。该方案的加速方法是基于实现的层面,并没有打破插值的原理,所以最终图像的质量不会有任何的影响。
本发明提供了一种H.264编码中运动补偿插值的一种并行优化方法,该方法是将H.264编码中的运动补偿插值部分移植到GPU上实现并行运算,相对于CPU能够在一定程度上获得编码速度的提升,同时还可以降低CPU资源占用率。其特点是需要首先对要在GPU上计算的部分去除数据间计算的相关性,以充分发挥GPU的并行计算能力。该方法特别适用于高分辨率以及多路视频编码,能够获得显著的编码速度提升。
最后应说明的是,以上实例只是针对所提方案的一个实现例程,只是为了说明本发明而不是限制本发明描述的技术方案;因此尽管本说明书参考上述的实施实例对本发明进行详细的说明,但本领域的普通技术人员应当理解,仍然可以对本发明进行修改或者等同替换;而一切不脱离本发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。
Claims (10)
1.H.264编码中运动补偿插值的并行加速方法及装置,其特征在于:
(1)主处理器CPU(Central Processor Unit中央处理单元)根据待运行的视频编码任务需要的资源和协处理器GPU(Graphic Processor Unit图形处理单元)上的剩余计算资源,决定新增视频编码任务的分配;
(2)协处理器GPU根据插值操作的分数像素类型和数据依赖关系,将分数像素插值运算操作按预定规则处理。
2.根据权利要求1所述的H.264编码中运动补偿插值的并行加速方法及装置,其特征在于:所述待运行的视频编码任务利用主处理器CPU和协处理器GPU构成的异构多核系统,实现视频编码的并行加速;待运行的视频编码任务可以是一路视频编码任务,也可以是多路视频编码任务。
3.根据权利要求1所述的H.264编码中运动补偿插值的并行加速方法及装置,其特征在于:所述视频编码任务所需要的资源,是指视频编码任务中移植到协处理器GPU进行计算的部分所需要占用GPU的资源;这些资源的大小由被编码的视频属性和编码算法的属性决定,视频属性指视频的分辨率等,编码算法的属性指编码时插值所要达到的分像素精度、插值时所用滤波器的计算复杂度等。
4.根据权利要求1所述的H.264编码中运动补偿插值的并行加速方法及装置,其特征在于:所述协处理器GPU上的剩余计算资源,是指协处理器GPU所能提供的最大资源数减去当前正在执行的视频编码任务占用的资源数所得到的资源数,GPU上所能提供的最大资源数是指在协处理器GPU上能够开辟的最大线程thread数目,最大线程数目等于在GPU上所能开辟的最多的块block数目乘以每个块中能开辟的最大线程数目;另外,由于具体的系统实时性需求不同,根据不同的系统实际需求,对应的GPU最大资源数目还受限于GPU实际运行时所能够真正达到并行化线程数目的最大值,从而相应的剩余资源数也会发生改变;
5.根据权利要求1所述的H.264编码中运动补偿插值的并行加速方法及装置,其特征在于:所述主处理器CPU决定视频编码任务的分配,是指CPU根据待编码视频任务的视频属性和编码算法属性,计算出其中一路视频编码任务要占用协处理器GPU上所需资源数目,如果该所需资源数大于当前GPU上的剩余资源,则CPU取消增加该路视频编码任务请求;如果该所需资源数小于等于当前GPU上的剩余资源,则CPU执行增加一路视频编码任务,以此类推,直至CPU分配完待编码视频任务或者因GPU剩余资源不足而取消增加编码视频任务为止。
6.根据权利要求1中所述的H.264编码中运动补偿插值的并行加速方法和装置中的预定规则,其特征在于:所述插值操作的分数像素类型,是指在插值过程中,需要插值生成不同位置和不同精度的分数像素;分数像素根据位置和精度分为水平方向1/2像素、垂直方向1/2像素、中心1/2像素、1/4像素。
7.根据权利要求1中所述的H.264编码中运动补偿插值的一种并行加速方法和装置中的预定规则,其特征在于:所述插值操作中数据的依赖关系,是指在插值过程中,中心1/2像素由水平方向1/2像素或者垂直方向1/2像素计算得到,1/4像素由所有1/2像素计算得到,所以水平方向1/2像素或者垂直方向1/2像素必须在中心1/2像素和1/4像素之前计算获得,中心1/2像素需要在1/4像素之前计算获得。
8.根据权利要求1中所述的H.264编码中运动补偿插值的并行加速方法和装置中的预定规则,其特征在于:根据插值过程中数据的依赖关系,在协处理器GPU上需要分步骤进行分数像素的插值操作,可以设置3种预定规则:预定规则1、预定规则2和预定规则3,具体如下:
预定规则1:步骤1:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得水平方向1/2像素点和垂直方向1/2像素点;步骤2:在GPU上由一帧图像的整数像素点和步骤1中获得的水平方向1/2像素点或者垂直方向1/2像素点通过六抽头滤波器获得中心1/2像素点;步骤3:在GPU上由一帧图像的整数像素点、步骤1中获得的水平方向1/2像素点、步骤1中获得的垂直方向1/2像素点、步骤2中获得的中心1/2像素点通过线性维纳滤波器获得所有的1/4像素点;
预定规则2:步骤1:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得水平方向1/2像素点;步骤2:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得垂直方向1/2像素点,由一帧图像的整数像素点和步骤1中获得的水平方向1/2像素点通过六抽头滤波器获得中心1/2像素点;步骤3:在GPU上由一帧图像的整数像素点、步骤1中获得的水平方向1/2像素点、步骤2中获得的垂直方向1/2像素点和中心1/2像素点通过线性维纳滤波器获得所有的1/4像素点;
预定规则3:步骤1:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得垂直方向1/2像素点;步骤2:在GPU上由一帧图像的整数像素点通过六抽头滤波器获得水平方向1/2像素点,由一帧图像的整数像素点和步骤1中获得的垂直方向1/2像素点通过六抽头滤波器获得中心1/2像素点;步骤3:在GPU上由一帧图像的整数像素点、步骤1中获得的垂直方向1/2像素点、步骤2中获得的水平方向1/2像素点和中心1/2像素点通过线性维纳滤波器获得所有的1/4像素点。
9.根据权利要求4所述编码所需资源的计算、权利要求8中所述的预定规则,其特征在于:所述预定规则的三个步骤中,为每个水平方向1/2像素点和垂直方向1/2像素点、中心1/2像素点和每个1/4像素点的计算都分配一个线程;在每个步骤中,所有的计算都是以GPU核为单位的并行和GPU核内部的流处理器的并发的方式进行;编码所需的资源数由各预定规则中三个步骤中所需最多资源的步骤决定。
10.H.264编码中运动补偿插值的并行加速装置,其特征在于,包括主处理器CPU和协处理器GPU,主处理器用于适合CPU架构的视频编码操作、待编码视频任务的分配以及将计算获得的中间结果(如重建帧数据)传送给协处理器GPU;协处理器用于适合GPU架构的视频编码模块,采用并行优化进行加速,并将计算的结果传回主处理器;
所述适合主处理器CPU架构的模块主要是分支判断、数据耦合度高的操作所属的模块;
所述适合协处理器GPU架构的模块主要是计算量及数据量较大,但计算指令单一,数据耦合度较小的操作,如运动补偿插值等。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110398920XA CN102497550A (zh) | 2011-12-05 | 2011-12-05 | H.264编码中运动补偿插值的并行加速方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110398920XA CN102497550A (zh) | 2011-12-05 | 2011-12-05 | H.264编码中运动补偿插值的并行加速方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102497550A true CN102497550A (zh) | 2012-06-13 |
Family
ID=46189333
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110398920XA Pending CN102497550A (zh) | 2011-12-05 | 2011-12-05 | H.264编码中运动补偿插值的并行加速方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102497550A (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103297777A (zh) * | 2013-05-23 | 2013-09-11 | 广州高清视信数码科技股份有限公司 | 一种用于加速视频编码速度的方法及装置 |
CN104378642A (zh) * | 2014-10-29 | 2015-02-25 | 南昌大学 | 一种基于cuda的h.264分数像素快速插值方法 |
CN105022693A (zh) * | 2015-08-10 | 2015-11-04 | 网易(杭州)网络有限公司 | 一种应用程序的性能测试方法及装置 |
CN105245896A (zh) * | 2015-10-09 | 2016-01-13 | 传线网络科技(上海)有限公司 | Hevc并行运动补偿方法及装置 |
CN105654418A (zh) * | 2014-11-27 | 2016-06-08 | 三星电子株式会社 | 图形处理单元和包括其的装置 |
CN105791876A (zh) * | 2016-03-14 | 2016-07-20 | 杭州电子科技大学 | 基于低复杂度分层插值的hevc分像素运动估计方法 |
WO2016155474A1 (en) * | 2015-04-03 | 2016-10-06 | Huawei Technologies Co., Ltd. | Acceleration framework with direct data transfer mechanism |
CN106031177A (zh) * | 2014-02-18 | 2016-10-12 | 微软技术许可有限责任公司 | 用于硬件加速的视频编码的主编码器 |
CN107172426A (zh) * | 2017-06-23 | 2017-09-15 | 西安电子科技大学 | 基于双MIC的OpenCL并行帧率上转换方法 |
CN108052384A (zh) * | 2017-12-27 | 2018-05-18 | 联想(北京)有限公司 | 一种任务处理方法、服务平台及电子设备 |
CN109495743A (zh) * | 2018-11-15 | 2019-03-19 | 上海电力学院 | 一种基于异构多处理平台的并行化视频编码方法 |
WO2020135368A1 (zh) * | 2018-12-24 | 2020-07-02 | 华为技术有限公司 | 一种帧间预测的方法和装置 |
CN113411611A (zh) * | 2021-06-30 | 2021-09-17 | 脸萌有限公司 | 视频图像处理方法、设备及电子设备 |
US11706444B2 (en) | 2018-12-24 | 2023-07-18 | Huawei Technologies Co., Ltd. | Inter prediction method and apparatus |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101123723A (zh) * | 2006-08-11 | 2008-02-13 | 北京大学 | 基于图形处理器的数字视频解码方法 |
CN101754013A (zh) * | 2008-11-28 | 2010-06-23 | 汤姆森许可贸易公司 | 由图形处理单元支持的视频解码方法 |
CN101908035A (zh) * | 2010-07-30 | 2010-12-08 | 北京华傲精创科技开发有限公司 | 视频编解码方法、gpu及其与cpu的交互方法及系统 |
CN102036043A (zh) * | 2010-12-15 | 2011-04-27 | 成都市华为赛门铁克科技有限公司 | 视频数据处理方法、装置及视频监控系统 |
CN102143386A (zh) * | 2010-01-28 | 2011-08-03 | 复旦大学 | 一种基于图形处理器的的流媒体服务器加速方法 |
US20110193978A1 (en) * | 2010-02-11 | 2011-08-11 | Microsoft Corporation | Generic platform video image stabilization |
-
2011
- 2011-12-05 CN CN201110398920XA patent/CN102497550A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101123723A (zh) * | 2006-08-11 | 2008-02-13 | 北京大学 | 基于图形处理器的数字视频解码方法 |
CN101754013A (zh) * | 2008-11-28 | 2010-06-23 | 汤姆森许可贸易公司 | 由图形处理单元支持的视频解码方法 |
CN102143386A (zh) * | 2010-01-28 | 2011-08-03 | 复旦大学 | 一种基于图形处理器的的流媒体服务器加速方法 |
US20110193978A1 (en) * | 2010-02-11 | 2011-08-11 | Microsoft Corporation | Generic platform video image stabilization |
CN101908035A (zh) * | 2010-07-30 | 2010-12-08 | 北京华傲精创科技开发有限公司 | 视频编解码方法、gpu及其与cpu的交互方法及系统 |
CN102036043A (zh) * | 2010-12-15 | 2011-04-27 | 成都市华为赛门铁克科技有限公司 | 视频数据处理方法、装置及视频监控系统 |
Non-Patent Citations (2)
Title |
---|
杨晓琴: "H.264快速运动估计算法及其在CUDA上的实现", 《CNKI优秀硕士学位论文全文库》, 19 October 2011 (2011-10-19), pages 2 - 6 * |
苏俊峰等: "基于DXVA的多路H.264高清视频解码器的实现", 《电视技术》, vol. 35, no. 18, 17 September 2011 (2011-09-17), pages 30 - 33 * |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103297777A (zh) * | 2013-05-23 | 2013-09-11 | 广州高清视信数码科技股份有限公司 | 一种用于加速视频编码速度的方法及装置 |
CN106031177A (zh) * | 2014-02-18 | 2016-10-12 | 微软技术许可有限责任公司 | 用于硬件加速的视频编码的主编码器 |
CN104378642A (zh) * | 2014-10-29 | 2015-02-25 | 南昌大学 | 一种基于cuda的h.264分数像素快速插值方法 |
CN105654418A (zh) * | 2014-11-27 | 2016-06-08 | 三星电子株式会社 | 图形处理单元和包括其的装置 |
CN105654418B (zh) * | 2014-11-27 | 2021-01-05 | 三星电子株式会社 | 图形处理单元和包括其的装置 |
US10067893B2 (en) | 2015-04-03 | 2018-09-04 | Futurewei Technologies, Inc. | Acceleration framework with direct data transfer mechanism |
WO2016155474A1 (en) * | 2015-04-03 | 2016-10-06 | Huawei Technologies Co., Ltd. | Acceleration framework with direct data transfer mechanism |
CN105022693A (zh) * | 2015-08-10 | 2015-11-04 | 网易(杭州)网络有限公司 | 一种应用程序的性能测试方法及装置 |
CN105022693B (zh) * | 2015-08-10 | 2019-03-19 | 网易(杭州)网络有限公司 | 一种应用程序的性能测试方法及装置 |
CN105245896A (zh) * | 2015-10-09 | 2016-01-13 | 传线网络科技(上海)有限公司 | Hevc并行运动补偿方法及装置 |
CN105791876A (zh) * | 2016-03-14 | 2016-07-20 | 杭州电子科技大学 | 基于低复杂度分层插值的hevc分像素运动估计方法 |
CN105791876B (zh) * | 2016-03-14 | 2018-11-13 | 杭州电子科技大学 | 基于低复杂度分层插值的hevc分像素运动估计方法 |
CN107172426B (zh) * | 2017-06-23 | 2019-10-11 | 西安电子科技大学 | 基于双MIC的OpenCL并行帧率上转换方法 |
CN107172426A (zh) * | 2017-06-23 | 2017-09-15 | 西安电子科技大学 | 基于双MIC的OpenCL并行帧率上转换方法 |
CN108052384A (zh) * | 2017-12-27 | 2018-05-18 | 联想(北京)有限公司 | 一种任务处理方法、服务平台及电子设备 |
CN108052384B (zh) * | 2017-12-27 | 2022-01-18 | 联想(北京)有限公司 | 一种任务处理方法、服务平台及电子设备 |
CN109495743A (zh) * | 2018-11-15 | 2019-03-19 | 上海电力学院 | 一种基于异构多处理平台的并行化视频编码方法 |
CN109495743B (zh) * | 2018-11-15 | 2021-10-08 | 上海电力学院 | 一种基于异构多处理平台的并行化视频编码方法 |
WO2020135368A1 (zh) * | 2018-12-24 | 2020-07-02 | 华为技术有限公司 | 一种帧间预测的方法和装置 |
US11706444B2 (en) | 2018-12-24 | 2023-07-18 | Huawei Technologies Co., Ltd. | Inter prediction method and apparatus |
CN113411611A (zh) * | 2021-06-30 | 2021-09-17 | 脸萌有限公司 | 视频图像处理方法、设备及电子设备 |
CN113411611B (zh) * | 2021-06-30 | 2023-06-20 | 脸萌有限公司 | 视频图像处理方法、设备及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102497550A (zh) | H.264编码中运动补偿插值的并行加速方法及装置 | |
CN102547296B (zh) | 移动估计加速电路、移动估计方法及环路滤波加速电路 | |
CN105491377B (zh) | 一种计算复杂度感知的视频解码宏块级并行调度方法 | |
CN101754013B (zh) | 由图形处理单元支持的视频解码方法 | |
Cheung et al. | Video coding on multicore graphics processors | |
CN106851293B (zh) | 用于帧内预测的解码图像的装置 | |
CN109495743B (zh) | 一种基于异构多处理平台的并行化视频编码方法 | |
CN101908035A (zh) | 视频编解码方法、gpu及其与cpu的交互方法及系统 | |
CN105791829B (zh) | 一种基于多核平台的hevc并行帧内预测方法 | |
CN105323586B (zh) | 一种用于多核并行视频编码和解码的共享内存接口 | |
CN102625108A (zh) | 一种基于多核处理器实现的h.264解码方法 | |
CN102143361B (zh) | 一种视频编码方法和装置 | |
CN102572430B (zh) | 一种基于可重构技术的h.264去块滤波算法的实现方法 | |
CN102238383B (zh) | 用于视频编解码器的多总线体系结构 | |
KR20130095927A (ko) | 비디오 파라미터를 이용한 복잡도 측정 기반의 병렬 인-루프 화소 보정에 대한 부호화/복호화 장치 및 방법 | |
CN103414901A (zh) | 一种快速jpeg2000图像压缩系统 | |
CN105245896A (zh) | Hevc并行运动补偿方法及装置 | |
CN101707716A (zh) | 视频编码器和编码方法 | |
Momcilovic et al. | Exploiting task and data parallelism for advanced video coding on hybrid CPU+ GPU platforms | |
CN106851298A (zh) | 一种高效视频编码方法及装置 | |
CN102932643A (zh) | 一种适用于hevc标准的扩展可变块运动估计电路 | |
Jiang et al. | Highly paralleled low-cost embedded HEVC video encoder on TI KeyStone multicore DSP | |
CN102333222B (zh) | 二维离散小波变换电路及应用该电路的图像压缩方法 | |
CN107454406A (zh) | 基于avs+的vr全景视频直播高速解码方法及系统 | |
CN103780914B (zh) | 环路滤波加速电路及环路滤波方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120613 |