基于CPU+GPU异构平台实现HEVC中熵编码环节的并行处理方法与流程

文档序号:16979185发布日期:2019-02-26 19:20阅读:201来源:国知局
基于CPU+GPU异构平台实现HEVC中熵编码环节的并行处理方法与流程

本发明属于数字视频压缩编码技术领域,涉及到在高效视频编码hevc(highefficiencyvideocoding,也称为h.265或称为hevc/h.265)协议标准中的熵编码环节如何实现高效并行处理的方法,以达到显著提升hevc编码器的计算效率的目的。



背景技术:

随着互联网和信息技术的迅速发展,多媒体技术在社会生活中起到了越来越重要的作用。而视频作为一种重要的信息载体,具有直观性、确切性、高效性及广泛性等优点,广泛应用在社会各个领域。随着人们对视频分辨率和清晰度等需求的不断提高,数字视频的发展从最初的352×240分辨率发展到高清(1920×1080)进而再到超高清(4k×2k及以上),视频数据量也随之大幅度增加。然而实际信道及存储设备的容量却是有限的,因此,视频数据压缩已成为视频技术应用和发展中必不可少的关键技术。

作为最新一代高效视频编码标准,hevc由国际电信联盟的视频编码专家组(itu-t/vceg)和国际标准化组织及国际电工委员会(iec)的运动图像专家组(iso/iecmpeg)于2013年正式发布。hevc包含了最新的视频编码技术,与前一代视频编码标准h.264/avc相比,hevc可以在保证相同的编码质量前提下,能够节省约50%的码率。hevc在获得出色视频压缩性能的同时也使得编码过程的计算复杂度显著增加(据统计是h.264/avc的2-4倍),从而给编码器的实时处理的实现带来了巨大挑战。因此,设计高效快速的hevc编码算法现已成为视频数据压缩领域的一个重要研究课题。

在hevc编码器中主要包括预测(帧内预测和帧间预测)、变换、量化、率失真优化、反量化、反变换、滤波(去方块效应滤波和样点自适应补偿滤波)、图像重构及熵编码等环节,目前除了熵编码环节以外针对其它各个环节现已分别设计出了相应的高效并行处理算法,进而通过采用gpu和多线程编程技术实现并行计算来显著提升这些环节的计算效率。但对于其中的熵编码环节,由于在hevc中采用的是基于上下文的自适应二进制算术编码(context-basedadaptivebinaryarithmeticcoding:cabac)方法,该计算过程本身是一种递推运算,在对后一数据的进行编码计算时需要用到对前一数据的编码结果,因此只能在已经求出对前一数据的编码结果之后才能对后一数据进行编码,故只能按照数据的前后顺序依次进行串行运算,而不适于做并行处理,所以难以使该环节的计算速度得到大规模的提高。在整个hevc编码过程中有两个环节涉及到熵编码计算,一个是在进行率失真优化时需要对图像中各个cu数据块分别求出每个cu块的码率信息以获得其最佳编码参数,另一个是对已经求出全部最佳编码参数后的整帧图像的全部待编码数据进行最终的熵编码以产生该帧图像压缩后的比特码流。

实验测试结果表明,采用第七代i7cpu(例如,coretmi7-7700)在对高清(1080p)视频图像在数据压缩比为100-130倍下,用hevc中的熵编码算法完成一幅整帧图像的最终熵编码环节平均耗时14--17毫秒。而对于预测、变换、量化、反量化、反变换、率失真优化、滤波及图像重构等全部环节,通过采用一块gpu卡(例如gtx-1080)进行并行处理平均可在32--36毫秒内完成。因此,对于整个hevc编码器,熵编码环节现已成为实现实时处理的瓶颈问题。如何设计出高效的熵编码算法以显著节省该环节的处理时间,对于实现hevc编码器的实时处理十分关键。

目前,针对提高hevc编码器的计算效率的研究主要集中于算法改进和硬件加速。2014年发表的硕士学位论文(赵亚楠.新一代视频编码标准hevc的并行化研究[d].上海交通大学,2014.)针对预测环节同时采用粗粒度并行和细粒度并行两种并行方式,从编码树单元ctu级和ctu内部两个层级进行并行化研究。该方法能在一定程度上提高hevc编码器的计算效率,但因为细粒度并行仅涉及到cu级并行,其并行度较小,而且并没有针对熵编码环节做并行化处理,因此其加速效果无法满足对实时性的需求。2014年发表于浙江大学学报的论文(周承涛,田翔,陈耀武.hevc编码单元尺寸快速选择算法[j].浙江大学学报:工学版,2014,48(8):1451-1460.)提出了深度单一性的概念,利用相邻单元编码深度的选择,跳过某些出现概率比较小的深度,从而加快cu块划分速度,该方法虽然使得编码速度提高了约25%,但由于跳过一些cu划分深度,使得hevc编码器最终的编码质量受到一定影响。2016年发表于journalofvisualcommunicationandimagerepresentation杂志上的文献(tariqj,kwongs,yuanh.hevcintramodeselectionbasedonratedistortion(rd)costandsumofabsolutedifference(sad)[j].journalofvisualcommunicationandimagerepresentation,2016,35:112-119.)分析了率失真(rdcost)与绝对误差和(sad)之间的二次关系,得到估计率失真代价的近似计算公式,以此可以省掉求取率失真代价中对各个cu块进行熵编码所需要的耗时。但由于该方法对各个cu块的码长是做近似估算,这样就会给率失真的计算带来误差,从而对图像的编码质量造成一定损失。2018年发表的文献(cebrián-márquezg,galianov,migallónh,etal.heterogeneouscpuplusgpuapproachesforhevc[j].thejournalofsupercomputing,2018,april2:1-12.)对基于片级(slice)的并行方案以及基于层级(tile)的并行方案两种方法进行了实现,该方法也使得编码器的计算效率得到了一定程度的提高。但该方法仅为片级或层级并行,并行度受限,无法使其计算效率得到更大规模的提升。以上方法并没有涉及到对已经确定好最佳编码参数后的整帧图像的最终熵编码环节进行并行化处理。而如前所述,该环节本身在处理一帧高清图像(1080p)时平均耗时14--17毫秒。因此,如何有效地节省该环节的处理时间,对于实现整个hevc编码器的实时处理是至关重要的。



技术实现要素:

本发明提出一种适合在cpu+gpu异构平台上实现的hevc编码器的并行处理方法,该方法将整帧图像的最终熵编码环节和预测、变换、量化、率失真优化、反量化、反变换、滤波及图像重构等其它全部环节一起进行并行处理、同步运行,达到显著提升hevc整体编码器的计算效率的目的。

在hevc中,对于每一幅当前帧图像都要首先进行预测、变换、量化、率失真优化、反量化、反变换、滤波、图像重构及熵编码等环节的运算。由于在预测、变换、量化、滤波及图像重构这些环节中均可以通过设法对其所涉及的待处理数据进行有效的划分而设计出高效的并行处理算法,同时通过利用gpu的众核结构和多线程编程技术高效并行地实现对这些数据的处理,从而可以大规模地提升这些环节的计算效率。但对于hevc中的熵编码过程,尤其对于整帧图像进行最终的熵编码环节,如前所述是采用cabac方法进行编码,这种基于上下文的自适应二进制算术编码方法在对每个数据进行编码时都需要用到对其前一数据的编码结果,故在该环节中对所要处理的待编码数据需要按照各个数据的前后顺序依次串行地处理,而若将这些数据划分成很多小单元进行并行处理,则会破坏前后数据之间的因果关系而产生编码误差。因此,在该熵编码环节中不能像在其它环节中那样通过数据划分做并行处理而使其计算效率得到显著的提升。

然而根据hevc标准协议可知,对于某一帧视频图像全部待编码数据的最终熵编码环节,此时虽然在该熵编码环节内部仍须按照这些数据间的前后顺序采用串行方式对各个数据进行编码,但该计算过程却同对下一帧图像的预测、变换、量化、率失真优化、反量化、反变换、滤波及图像重构等环节并不存在数据之间的相互依赖关系,二者可以分别独立进行计算。根据这一分析,本发明提出此“基于cpu+gpu异构平台实现hevc中熵编码环节的高效并行处理方法”。该方法的主要思路是将当前帧图像的最终熵编码环节与对下一帧图像的处理中除了最终熵编码环节以外的全部其它环节做并行处理-亦即对当前帧图像的熵编码用cpu进行处理,对下一帧图像的预测、变换、量化、率失真优化、反量化、反变换、滤波及图像重构等全部环节用gpu进行处理,cpu和gpu二者同时并行计算。通过采用这种并行处理方案,可以省去上述二者之中耗时较短的环节(即最终熵编码环节)所需要花费的处理时间,从而显著提高hevc编码器的整体计算速度。

本发明实现hevc编码器并行处理的技术方案如下:

(1)采用二核或二核以上的cpu(例如i7-7700或以上档次)和一个gpu卡(例如gtx-1080或以上档次)构成一个cpu+gpu异构计算平台,用于实现本发明所述的hevc编码器并行处理方法;

(2)如说明书附图所示,在cpu上设置两个线程(分别称为“cpu主线程”和“cpu从线程”),在gpu上设置一个多线程(称为“gpu多线程”)。其中“cpu主线程”负责整个编码器系统的计算流程控制、对“cpu从线程”和“gpu多线程”的调度、以及cpu与gpu之间的数据信息交流,“cpu从线程”负责实现对前一帧图像所有待编码数据的最终熵编码环节,“gpu多线程”负责实现对当前帧图像的预测、变换、量化、率失真优化、反量化、反变换、滤波及图像重构等全部环节;所述的对gpu多线程所涉及的图像的预测、变换、量化、反量化、反变换、滤波及图像重构等全部环节,采用下述学位论文中阐述的并行算法:1)杜军杰.hevc帧内预测关键技术并行算法的设计与实现[d],大连理工大学硕士学位论文,2015年;2)张维龙.hevc关键模块并行算法的设计与基于gpu的实现[d],大连理工大学硕士学位论文,2016年;

(3)对于率失真优化过程中对各个cu数据块的熵编码环节,由于该环节是与对当前图像的预测、变换、量化等处理环节结合在一起的,在本方案中预测、变换、量化等环节是由gpu通过“gpu多线程”做并行处理,而且此时是以cu数据块为单元进行计算,故在此过程中可以用“gpu多线程”对每一个cu数据块仍按原串行熵编码算法对该cu块中的各个数据进行编码,而对不同的cu数据块进行并行编码,由此实现cu级的并行熵编码,提高该环节的计算效率。

本发明提出的实现hevc编码器中最终熵编码环节的高效并行处理方法,能够使得hevc编码器省去对各帧视频数据进行最终熵编码所需要的处理时间,从而使系统的整体计算效率得到显著提升。实验表明,将本发明提出的hevc编码器并行处理技术在当前消费级的cpu+gpu计算平台上实现(例如,用一台coretmi7-7700计算机加配一块gtx-1080gpu卡),在对高清(1080p)视频图像的数据压缩比达100-130倍下,可以取得27-31帧/秒的视频编码速率,能够满足实时处理(≥25帧/秒)的要求。否则,若在对各帧图像进行最终熵编码时不采用本发明提出的并行熵编码方案,而采用原来的串行方法,则无法省去该环节所需要的计算耗时(14-17毫秒),从而在该平台下不能实现高清视频图像数据的实时编码压缩。本发明针对率失真优化过程中各个cu数据块的熵编码提出了实现cu级的并行熵编码方案,通过执行该并行方案可以使率失真优化环节的计算效率得到进一步的提高。

附图说明

附图1是本发明的流程示意图。

具体实施方式

以下结合技术方案和说明书附图阐述本发明的具体实施例。

设待编码的视频图像序列长度为n(第0-n-1帧),实施步骤如下:

步骤1:如说明书附图所示,从t0时刻开始至t1时间内,首先由cpu端的cpu主线程向gpu端传送视频序列中的第0帧图像数据,并向gpu发出调度指令,启动gpu多线程采用如前面所述的“实现hevc编码器并行处理的技术方案”对第0帧图像进行预测(此处为帧内预测)、变换、量化、率失真优化、反量化、反变换及图像重构等环节的并行计算。在此期间,cpu主线程与gpu端将有多次的信息交流,cpu主线程会根据gpu端返回的信息所反映的当前gpu端上的gpu多线程的任务执行状况,启动不同的gpu多线程以完成不同环节的处理任务;当gpu端中的gpu多线程完成第0帧图像的重构计算任务后向cpu主线程返回任务结束标志,cpu主线程收到结束标志后,将gpu多线程产生的第0帧的全部待编码数据传到cpu中;在此期间cpu从线程处于空闲状态;

步骤2:从t1时刻开始至t2时间内,cpu主线程启动cpu从线程由该从线程对第0帧全部待编码数据进行熵编码,cpu主线程同时将下一帧(第1帧)图像数据传送到gpu端,并启动gpu端的gpu多线程对第1帧图像进行预测(帧间预测)、变换、量化、率失真优化、反量化、反变换、滤波及图像重构等环节的并行计算。在此期间,cpu主线程与gpu端同样将有多次的信息交流,cpu主线程会根据gpu端返回的信息所反映的当前gpu端上的gpu多线程的任务执行状况,启动不同的gpu多线程以完成不同环节的处理任务。此时cpu主线程与cpu从线程之间也将有信息交流,掌控cpu从线程的任务完成状况。当gpu端中的gpu多线程完成第1帧图像的重构计算任务后向cpu主线程返回任务结束标志,cpu主线程收到结束标志后,将gpu多线程产生的第1帧的全部待编码数据传到cpu中;

步骤3:从t2时刻开始至t3时间内,cpu端的cpu主线程、cpu从线程以及gpu端的gpu多线程分别进行与在步骤2中完全同样的操作处理,所不同的是在此步骤里由cpu主线程向gpu端传送的是第2帧图像数据、gpu多线程处理的也是该帧数据、cpu主线程启动cpu从线程对第1帧全部待编码数据进行熵编码、cpu主线程最后是将这一时段内由gpu多线程产生的第2帧图像的全部待编码数据传到cpu中;

步骤4:从tn时刻开始至tn+1时间内(n=3,4,…,n-1),在该步骤中cpu端的cpu主线程、cpu从线程以及gpu端的gpu多线程所进行的操作处理仍然与在步骤2或步骤3中几乎同样的操作处理,不同的是在此步骤里由cpu主线程向gpu端传送的是第n帧图像数据、gpu多线程处理的也是新传过来的这一帧数据、cpu主线程启动cpu从线程对第n-1帧全部待编码数据进行熵编码、以及cpu主线程最后是将这一时段内由gpu多线程产生的第n帧图像的全部待编码数据传到cpu中。此外,与前述步骤有所不同的是:在该步骤中由gpu多线程对第n帧图像所做的预测处理既有可能是帧间预测又有可能是帧内预测,具体为哪一种预测是由事先规定的预测选择算法来决定。在实际运行过程中,是由cpu主线程根据预测选择算法决定对当前帧图像的预测方式,并向gpu发出相应的调度指令,随之由gpu多线程按指令对当前帧图像进行相应的帧内预测或者帧间预测运算。其它所有操作则与步骤2或步骤3完全相同;

步骤5:重复步骤4直到tn时刻为止,到tn时刻已对第n-1帧(最后一帧)图像完成除了最终的熵编码环节以外的全部处理操作,并且已将该帧图像的全部待编码数据传送到了cpu端;

步骤6:在tn时刻,由cpu主线程向cpu从线程发通知由该从线程对第n-1帧的全部待编码数据进行最终的熵编码,获得该最后一帧图像最终压缩后的码流数据。至此,对整个视频图像序列的编码过程结束。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1