1马克思主义与社会科学方法论论文设计学生信息姓名学号院系专业邮箱电话论文题目视频解码器在异构多核系统上的实现及并行优化研究背景和意义、文献综述随着视频内容清晰度和视频编码标准复杂度的不断提升,视频实时播放对设备性能需求越来越高。近年来,随着GPU(GraphicProcessUnit,图形处理器)硬件的飞速发展,如何充分利用GPU的强大的计算能力来提高视频解码速度逐渐成为研究热点。为了减少了不同异构平台间的差异,统一异构平台规范,Apple、Intel,NVIDIA,AMD等业界巨头联合制定了开放运算语言OpenCL标准。它提供了一个面向系统通用目的并行编程的开放式、免费标准,为视频解码器的优化提供了机会。在H.264解码过程中,去块滤波(deblockingfilter)部分耗时通常占整体耗时的10%到40%左右。如果能对其进行有效的优化,对整体解码速度将会有明显的提升。然而囿于H.264标准规定的滤波顺序的限制,在保持输出视频视觉质量(Subjectivevideoquality)和峰值信噪比(PSNR,PeakSignaltoNoiseRatio)的条件下,很难对去块滤波部分进行并行优化,因为宏块(Macroblock)间存在很强的数据依赖性。在保证数据依赖的情况下,人们通常在多核上采用基于宏块并行的wavefront方法。本文采用两种并行策略。第一种是传统的2D-wavefront方法,通过对顺序滤波过程的分析,在保证整个滤波过程中宏块间数据依赖的情况下,尽量提升并行度,以提高滤波速度。第二种则是在画质和滤波速度中权衡利弊,以宏块间的依赖关系为代价,对所有宏块进行并发滤波操作,来进一步提高滤波速度。本文充分利用OpenCL平台的SPMD(singleprogrammultidata)以及异构的特点,针对FFmpeg中的H.264解码器,分别采用上述两种策略对滤波过程进行并行化改进。实验结果表明,第一种策略由于为了保持数据依赖导致滤波时核函数发射次数过多,相比CPU单线程慢了20多倍,第二种策略在不考虑内存传输耗时的情况下,滤波速度相比CPU单线程提高了50%左右。2研究目标、主要内容和框架研究H.264解码器在GPU上的优化实现,在开发成本、功耗、系统效率以及普及标准方面都有重大意义。在开发成本方面,GPU的通用计算的开发成本与软件开发类似,远低于硬件开发成本,因此更新更快,在修复bug、改善性能上都能更快的响应。在功耗方面,由于GPU在能耗比方面通常要高于CPU,因此完成相同的工作,GPU的功耗通常也小于CPU,那么基于GPU的解码器系统在功耗上相比CPU也很有优势。在效率方面,由于解码工作转移到GPU执行,那么CPU的负载下降,那么CPU则可以同时做别的工作,整体系统的流畅度也会随之上升。在普及标准方面,H.264解码器的优化可以使更多设备能够支持新修订标准编码视频的解码工作。这样能够使得新修订的普及工作更加顺畅,让更多的终端用户享受到新修订带来的技术优势。尽管如此,由于解码流程中的存在复杂的数据依赖,如果不能很好的处理这些依赖,尽可能提高并行度,在解码速度上并不会有太大的提升,甚至反而会下降。如果能有效的解决数据依赖问题,提高并行度,对将来视频编解码也会有好的一面。摘要IAbstractII目录III1绪言1.1课题背景1.2课题研究的目的和意义1.3国内外概况1.3.1视频编解码1.3.2GPGPU1.3.3相关研究1.4课题的主要研究工作2视频编码与OpenCL2.1H.2642.1.1环路滤波2.2OpenCL2.2.1OpenCL架构3主要采用的研2.2.2OpenCL运行时2.2.3OpenCL存储层次3宏块并行策略3.1基本思路3.2优化方案3.2.1减少分支3.2.2工作组调度3.2.3内存访问3.3实验结果3.4本章小结4不考虑依赖的宏块级并行4.1基本思路4.2内存传输性能分析4.2.1Pinned内存与Paged内存4.2.2映射访问与直接访问4.2.3小结4.3实验结果5不足和展望致谢参考文献本文主要的研究对象是H.264编码中的去块滤波部分。在H.264解码过程中滤波所占比率通常达到了整个过程耗时的20%到40%左右[2][3],在H.264的解码过程中仅次于运动补偿(MotionCompensation)。运动补偿虽然在解码过程中占用时间最多,但是相比去块滤波,其每个宏块的计算量太大,不太适合GPU的小粒度的大规模并行。因此本文选择去块滤波部分作为具体研究对象,尝试基于OpenCL平台对其进行优化。论文框架如下:4究方法(马克思主义方法论)在开始准备本篇论文之前,我主要考虑到了当前客观条件:例如电脑主流硬件的性能,开源软件平台目前的发展水平以及OpenCL标准的适用度等等。毕竟这些客观条件在提供给我们做研究的基础设施的同时也制约着我们的所作所为。想想看,我们所拥有的电脑毕竟只是普通个人电脑而不是超级计算机,所以要考虑到硬件的性能和资源的有限性。因而我们需要把握住“度”,做研究要脚踏实地,实事求是,但同时又要充分发挥自己的主观能动性,要敢想敢做,不畏艰难。毕竟,马克思主义方法论教导我们一切从实际出发,实事求是,重视意识的作用,在尊重客观规律的前提下充分发挥人的主观能动性。于是我预先通读所有有关H.264视频编解码的技术文档,FFmpeg源代码以及OpenCL架构。当我没有思路的时候就去ACM和IEEE官网查询相关大牛的论文拜读。一个月后基本了解所有相关知识点,能做出一些demo程序运行,但是深入FFmpeg解码部分的源码时遇到了很大的阻碍,因为解码时宏块间的数据依赖过强,要实现宏块间的并行优化很难。所有第一步我必须解除这些数据依赖才能进行下一步的GPU并行解块。实践是认识的来源、动力、目的、检验标准,是认识的基础,认识依赖于实践。从实践中获得认识、发展认识、检验认识,并用认识去指导实践。我一边实践自己的想法,在实践中遇到阻碍时就去查询技术文档或者研读相关论文,了解缘由后再继续实践,编码测试。实践决定认识(理论),认识(理论)对实践有反作用,正确的认识、科学的理论对实践有指导作用。所以我一直逼迫自己每天至少阅读一篇经典论文,然后参阅详细的技术文档,再编码实现自己的想法,最后验证结果是否合理是否达到预期效果。在此过程中一定要杜绝固步自封,反对教条主义,反对思想僵化,每天光想不做不阅读已有的技术成果,获取已有的科学理论知识,最终会得不偿失。因为马克思主义方法论指导我们必须坚持实践第一的观点,重视科学理论的指导作用,与此同时还要坚持理论和实践相结合的原则。由于认识随实践的发展而不断深化、扩展、推移,所以一边实践一边学习相关知识,最终我对H.264的编解码标准和OpenCL的架构了解的越来越深入,最终促使我完成了两种并行优化策略。当然在实现优化策略的过程中,我也遇到了很多困难,主观上我自己有时做事过于浮躁,感情用事,客观上视频解码牵涉的知识点非常之多,不仅牵涉到计算机编程还涉及大量数学公式理论,视觉心里学常识,数字信号处理等等。主观加上客观因素给我很大的压力,使我深深体会到事物的发展都是内因和外因共同起作用的结果;内因是事物变化发展的根据;外因是条件;外因通过内因起作用。马克思主义方法论指导我们坚持用内因和外因辨证关系的观点看问题,要重视内因的作用,同时也不能忽视外因。两方面兼顾,在认真实践编码实现的同时,同时掌握科学研究方法,最终才能做出相对理想的实验结果,甚是欣慰。5创新与不足随着视频信息的爆炸性增长,视频压缩亟待发展。更大的压缩比带来的则是编解码所需的更大的计算量。而与此相对的,GPU的计算能力不断上升,加上GPU通用计算技术的不断成熟,利用GPGPU来优化视频解码有着良好的前景。然而在利用GPU通用计算技术优化视频解码的过程中存在着很多问题,比如大并行度所需的数据不相关性,以及异构系统中的带宽限制等问题都制约着GPU视频解码的发展。本文在OpenCL平台上对FFmpeg的H.264视频解码器的去块滤波部分进行了并行优化。本文的主要创新与不足如下:(1)提出两种并行策略。在分析了H.264视频解码流程中的去块滤波的过程之上,提出两种基于OpenCL的并行优化策略。这两种策略分别倾向于视频解码质量与视频解码速度。由于滤波过程中的数据依赖很强,如果要保证数据依赖,要并行化的话,则需要GPU的调度会比较复杂,在滤波速度上会有影响,第一种并行策略就是在保证数据依赖的情况下,进行GPU调度的。而第二种策略则优先速度,忽略宏块间的依赖,直接对所有宏块并行滤波,这样速度上会有很大提升,但最终产生的图像的质量上会有一定影响。(2)分析异构系统中内存传输方式之间的区别。在OpenCL平台中主机内存分为Paged和Pinned两种,而Pinned内存在传输上相比Pinned内存有很大优势。而在内存访问上分为Direct和Map两种方式,Map在小数据操作上比较有优势,Direct则是大段内存拷贝上优势较大。基于分析结果,对程序内存调度上进行了优化。(3)并基于异构平台的特点进行优化。包括分支精简、内存传输、内存对齐、以及工作组调度等。由于GPU的SPMD的特性,在多线程程序分支时会导致性能急剧下降,因此通过将分支精简可以很大的提升多线程性能。另外,GPU的内存访问,在不对齐的情况下会导致很大的性能损失,因此在在显存中对齐内存也能够很大的提升性能。(4)基于FFmpeg实现了上述两种策略。尽管由于FFmpeg针对CPU已经非常优化,导致最终结果并没有FFmpeg在CPU上实现的快。但仍然能保证视频实时回放的效率,并能够在播放时稍微降低CPU的占用率。a)然而还有不足之处,本文提出的基于OpenCL的优化方案在以下几个方面还有待完善:(5)系统结构的缺陷,由于基于PCI-E的GPU和CPU之间的通讯依靠PCI-E接口的带宽。现行的PCI-E接口带宽相比一般的内存带宽并没有优势,导致数据传输开销很大。因此应该考虑在基于AMD提出的hUMA(HeterogeneousUniformMemoryAccess,异构统一内存访问)系统上实现并行优化,这样就能极大地减少内存复制开销。(6)核函数的复杂性,现阶段每个线程处理一个宏块,那么就需要对一个宏块内3个通道所有边缘进行滤波,工作量和分支数都太多,很影响核函数性能。下一步应该基于更细粒度的并行,如边缘或是方向等,来保证核函数的工作效率。6参考文献(7)整合流水线机制,异构系统有一个很大的优势就是存在两类处理单元。那么将CPU的处理部分和GPU的处理部分做成两级流水线则可以提升系统整体的吞吐量。[1]HorowitzM,JochA,KossentiniF,etal.H.264/AVCbaselineprofiledecodercomplexityanalysis.CircuitsandSystemsforVideoTechnology,IEEETransactionson,2003,13(7):704-716.[2]AyadiLA,DammakT,LoukilH,etal.AnovelhardwarearchitectureofdeblockingfilterinH.264/AVC.In:SciencesandTechniquesofAutomaticControlandComputerEngineering(STA),201314thInternationalConferenceon.Sousse.IEEE,2013:474-479.[3]LappalainenV,HallapuroA,HamalainenTD.ComplexityofoptimizedH.26Lvideodecoderimplementation.CircuitsandSystemsforVideoTechnology,IEEETransactionson,2003,13(7):717-725.[4]MeenderinckC,AzevedoA,JuurlinkB,etal.Parallel