1、.页眉.页脚马克思主义与社会科学方法论论文设计 学生信息姓名 学号 院系 专业 邮箱 电话 论文题目视频解码器在异构多核系统上的实现及并行优化研究背景和意义、文献综述随着视频内容清晰度和视频编码标准复杂度的不断提升,视频实时播放对设备性能需求越来越高。近年来,随着 GPU(Graphic Process Unit,图形处理器)硬件的飞速发展,如何充分利用GPU 的强大的计算能力来提高视频解码速度逐渐成为研究热点。为了减少了不同异构平台间的差异,统一异构平台规范,Apple、Intel,NVIDIA,AMD 等业界巨头联合制定了开放运算语言OpenCL 标准。它提供了一个面向系统通用目的并行编程
2、的开放式、免费标准,为视频解码器的优化提供了机会。在 H.264 解码过程中,去块滤波( deblocking filter)部分耗时通常占整体耗时的 10%到 40%左右。如果能对其进行有效的优化,对整体解码速度将会有明显的提升。然而囿于 H.264 标准规定的滤波顺序的限制,在保持输出视频视觉质量(Subjective video quality)和峰值信噪比(PSNR,Peak Signal to Noise Ratio)的条件下,很难对去块滤波部分进行并行优化,因为宏块(Macroblock)间存在很强的数据依赖性。在保证数据依赖的情况下,人们通常在多核上采用基于宏块并行的 wavef
3、ront 方法。本文采用两种并行策略。第一种是传统的 2D-wavefront 方法,通过对顺序滤波过程的分析,在保证整个滤波过程中宏块间数据依赖的情况下,尽量提升并行度,以提高滤波速度。第二种则是在画质和滤波速度中权衡利弊,以宏块间的依赖关系为代价,对所有宏块进行并发滤波操作,来进一步提高滤波速度。本文充分利用 OpenCL 平台的 SPMD(single program multi data)以及异构的特点,针对FFmpeg 中的 H.264 解码器,分别采用上述两种策略对滤波过程进行并行化改进。实验结果表明,第一种策略由于为了保持数据依赖导致滤波时核函数发射次数过多,相比 CPU 单线程
4、慢了 20 多倍,第二种策略在不考虑内存传输耗时的情况下,滤波速度相比 CPU 单线程提高了 50%左右。.页眉.页脚研究目标、主要内容和框架研究 H.264 解码器在 GPU 上的优化实现,在开发成本、功耗、系统效率以及普及标准方面都有重大意义。在开发成本方面,GPU 的通用计算的开发成本与软件开发类似,远低于硬件开发成本,因此更新更快,在修复 bug、改善性能上都能更快的响应。在功耗方面,由于 GPU 在能耗比方面通常要高于 CPU,因此完成相同的工作,GPU 的功耗通常也小于 CPU,那么基于 GPU 的解码器系统在功耗上相比 CPU 也很有优势。在效率方面,由于解码工作转移到 GPU
5、执行,那么 CPU 的负载下降,那么 CPU 则可以同时做别的工作,整体系统的流畅度也会随之上升。在普及标准方面,H.264 解码器的优化可以使更多设备能够支持新修订标准编码视频的解码工作。这样能够使得新修订的普及工作更加顺畅,让更多的终端用户享受到新修订带来的技术优势。尽管如此,由于解码流程中的存在复杂的数据依赖,如果不能很好的处理这些依赖,尽可能提高并行度,在解码速度上并不会有太大的提升,甚至反而会下降。如果能有效的解决数据依赖问题,提高并行度,对将来视频编解码也会有好的一面。摘要 IAbstract II目录 III1 绪言1.1 课题背景1.2 课题研究的目的和意义1.3 国内外概况1
6、.3.1 视频编解码1.3.2 GPGPU1.3.3 相关研究1.4 课题的主要研究工作2 视频编码与 OpenCL2.1 H.2642.1.1 环路滤波2.2 OpenCL.页眉.页脚主要采用2.2.1 OpenCL 架构2.2.2 OpenCL 运行时2.2.3 OpenCL 存储层次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.1 Pinned 内存与 Paged 内存4.2.2 映射访问与直接访问4.2.3 小结4.3
7、 实验结果5 不足和展望致谢参考文献本文主要的研究对象是 H.264 编码中的去块滤波部分。在 H.264 解码过程中滤波所占比率通常达到了整个过程耗时的 20%到 40%左右 23,在 H.264 的解码过程中仅次于运动补偿(Motion Compensation) 。运动补偿虽然在解码过程中占用时间最多,但是相比去块滤波,其每个宏块的计算量太大,不太适合 GPU 的小粒度的大规模并行。因此本文选择去块滤波部分作为具体研究对象,尝试基于 OpenCL 平台对其进行优化。论文框架如下:.页眉.页脚的研究方法(马克思主义方法论)在开始准备本篇论文之前,我主要考虑到了当前客观条件:例如电脑主流硬件
8、的性能,开源软件平台目前的发展水平以及 OpenCL 标准的适用度等等。毕竟这些客观条件在提供给我们做研究的基础设施的同时也制约着我们的所作所为。想想看,我们所拥有的电脑毕竟只是普通个人电脑而不是超级计算机,所以要考虑到硬件的性能和资源的有限性。因而我们需要把握住“度” ,做研究要脚踏实地,实事求是,但同时又要充分发挥自己的主观能动性,要敢想敢做,不畏艰难。毕竟,马克思主义方法论教导我们一切从实际出发,实事求是,重视意识的作用,在尊重客观规律的前提下充分发挥人的主观能动性。于是我预先通读所有有关 H.264 视频编解码的技术文档,FFmpeg 源代码以及 OpenCL 架构。当我没有思路的时候
9、就去 ACM 和 IEEE 官网查询相关大牛的论文拜读。一个月后基本了解所有相关知识点,能做出一些 demo 程序运行,但是深入 FFmpeg 解码部分的源码时遇到了很大的阻碍,因为解码时宏块间的数据依赖过强,要实现宏块间的并行优化很难。所有第一步我必须解除这些数据依赖才能进行下一步的 GPU 并行解块。实践是认识的来源、动力、目的、检验标准,是认识的基础,认识依赖于实践。从实践中获得认识、发展认识、检验认识,并用认识去指导实践。我一边实践自己的想法,在实践中遇到阻碍时就去查询技术文档或者研读相关论文,了解缘由后再继续实践,编码测试。实践决定认识(理论) ,认识(理论)对实践有反作用,正确的认
10、识、科学的理论对实践有指导作用。所以我一直逼迫自己每天至少阅读一篇经典论文,然后参阅详细的技术文档,再编码实现自己的想法,最后验证结果是否合理是否达到预期效果。在此过程中一定要杜绝固步自封,反对教条主义,反对思想僵化,每天光想不做不阅读已有的技术成果,获取已有的科学理论知识,最终会得不偿失。因为马克思主义方法论指导我们必须坚持实践第一的观点,重视科学理论的指导作用,与此同时还要坚持理论和实践相结合的原则。由于认识随实践的发展而不断深化、扩展、推移,所以一边实践一边学习相关知识,最终我对 H.264 的编解码标准和OpenCL 的架构了解的越来越深入,最终促使我完成了两种并行优化策略。当然在实现
11、优化策略的过程中,我也遇到了很多困难,主观上我自己有时做事过于浮躁,感情用事,客观上视频解码牵涉的知识点非常之多,不仅牵涉到计算机编程还涉及大量数学公式理论,视觉心里学常识,数字信号处理等等。主观加上客观因素给我很大的压力,使我深深体会到事物的发展都是内因和外因共同起作用的结果;内因是事物变化发展的根据;外因是条件;外因通过内因起作用。马克思主义方法论指导我们坚持用内因和外因辨证关系的观点看问题,要重视内因的作用,同时也不能忽视外因。两方面兼顾,在认真实践编码实现的同时,同时掌握科学研究方法,最终才能做出相对理想的实验结果,甚是欣慰。.页眉.页脚创新与不足随着视频信息的爆炸性增长,视频压缩亟待
12、发展。更大的压缩比带来的则是编解码所需的更大的计算量。而与此相对的,GPU 的计算能力不断上升,加上 GPU 通用计算技术的不断成熟,利用 GPGPU 来优化视频解码有着良好的前景。然而在利用 GPU 通用计算技术优化视频解码的过程中存在着很多问题,比如大并行度所需的数据不相关性,以及异构系统中的带宽限制等问题都制约着 GPU 视频解码的发展。本文在 OpenCL 平台上对 FFmpeg 的 H.264 视频解码器的去块滤波部分进行了并行优化。本文的主要创新与不足如下:(1) 提出两种并行策略。在分析了 H.264 视频解码流程中的去块滤波的过程之上,提出两种基于 OpenCL 的并行优化策略
13、。这两种策略分别倾向于视频解码质量与视频解码速度。由于滤波过程中的数据依赖很强,如果要保证数据依赖,要并行化的话,则需要 GPU 的调度会比较复杂,在滤波速度上会有影响,第一种并行策略就是在保证数据依赖的情况下,进行 GPU 调度的。而第二种策略则优先速度,忽略宏块间的依赖,直接对所有宏块并行滤波,这样速度上会有很大提升,但最终产生的图像的质量上会有一定影响。(2) 分析异构系统中内存传输方式之间的区别。在 OpenCL 平台中主机内存分为Paged 和 Pinned 两种,而 Pinned 内存在传输上相比 Pinned 内存有很大优势。而在内存访问上分为 Direct 和 Map 两种方式
14、,Map 在小数据操作上比较有优势,Direct 则是大段内存拷贝上优势较大。基于分析结果,对程序内存调度上进行了优化。(3) 并基于异构平台的特点进行优化。包括分支精简、内存传输、内存对齐、以及工作组调度等。由于 GPU 的 SPMD 的特性,在多线程程序分支时会导致性能急剧下降,因此通过将分支精简可以很大的提升多线程性能。另外,GPU 的内存访问,在不对齐的情况下会导致很大的性能损失,因此在在显存中对齐内存也能够很大的提升性能。(4) 基于 FFmpeg 实现了上述两种策略。尽管由于 FFmpeg 针对 CPU 已经非常优化,导致最终结果并没有 FFmpeg 在 CPU 上实现的快。但仍然
15、能保证视频实时回放的效率,并能够在播放时稍微降低 CPU 的占用率。a) 然而还有不足之处,本文提出的基于 OpenCL 的优化方案在以下几个方面还有待完善:(5) 系统结构的缺陷,由于基于 PCI-E 的 GPU 和 CPU 之间的通讯依靠 PCI-E 接口的带宽。现行的 PCI-E 接口带宽相比一般的内存带宽并没有优势,导致数据传输开销很大。因此应该考虑在基于 AMD 提出的 hUMA(Heterogeneous Uniform Memory Access,异构统一内存访问)系统上实现并行优化,这样就能极大地减.页眉.页脚参考文献少内存复制开销。(6) 核函数的复杂性,现阶段每个线程处理一
16、个宏块,那么就需要对一个宏块内 3 个通道所有边缘进行滤波,工作量和分支数都太多,很影响核函数性能。下一步应该基于更细粒度的并行,如边缘或是方向等,来保证核函数的工作效率。(7) 整合流水线机制,异构系统有一个很大的优势就是存在两类处理单元。那么将CPU 的处理部分和 GPU 的处理部分做成两级流水线则可以提升系统整体的吞吐量。1 Horowitz M, Joch A, Kossentini F, et al. H. 264/AVC baseline profile decoder complexity analysis. Circuits and Systems for Video Tech
17、nology, IEEE Transactions on, 2003, 13(7): 704-716.2 Ayadi L A, Dammak T, Loukil H, et al. A novel hardware architecture of deblocking filter in H. 264/AVC. In: Sciences and Techniques of Automatic Control and Computer Engineering (STA), 2013 14th International Conference on. Sousse. IEEE, 2013: 474
18、-479.3 Lappalainen V, Hallapuro A, Hamalainen T D. Complexity of optimized H. 26L video decoder implementation. Circuits and Systems for Video Technology, IEEE Transactions on, 2003, 13(7): 717-725.4 Meenderinck C, Azevedo A, Juurlink B, et al. Parallel scalability of video decoders. Journal of Sign
19、al Processing Systems, 2009, 57(2): 173-194.5 Zhao Z, Liang P. Data partition for wavefront parallelization of H. 264 video encoder. In: Circuits and Systems, 2006. ISCAS 2006. Proceedings. 2006 IEEE International Symposium on. IEEE, 2006: 4 pp.-2672.6 Zhao Z, Liang P. A highly efficient parallel al
20、gorithm for H. 264 video encoder. In: Acoustics, Speech and Signal Processing, 2006. ICASSP 2006 Proceedings. 2006 IEEE International Conference on. IEEE, 2006, 5: V-V.7 Chen Y K, Li E Q, Zhou X, et al. Implementation of H. 264 encoder and decoder on personal computers. Journal of Visual Communicati
21、on and Image Representation, 2006, 17(2): 509-532.8 Sun S, Wang D, Chen S. A highly efficient parallel algorithm for H. 264 encoder based on macro-block region partition. In: High Performance Computing and Communications. Springer Berlin Heidelberg, 2007: 577-585.9 Wang S W, Yang S S, Chen H M, et a
22、l. A multi-core architecture based parallel framework for H. 264/AVC deblocking filters. Journal of Signal Processing Systems, 2009, 57(2): 195-211.页眉.页脚10 Sihn K H, Baik H, Kim J T, et al. Novel approaches to parallel H. 264 decoder on symmetric multicore systems. In: Acoustics, Speech and Signal P
23、rocessing, 2009. ICASSP 2009. IEEE International Conference on. IEEE, 2009: 2017-2020.11 lvarez Mesa M, Ramrez A, Azevedo A, et al. Scalability of macroblock-level parallelism for H. 264 decoding. In: Parallel and Distributed Systems (ICPADS), 2009 15th International Conference on. IEEE, 2009: 236-2
24、43.12 Azevedo A, Meenderinck C, Juurlink B, et al. Parallel H. 264 decoding on an embedded multicore processor. In: High Performance Embedded Architectures and Compilers. Springer Berlin Heidelberg, 2009: 404-418.13 Meenderinck C, Azevedo A, Alvarez M, et al. Parallel scalability of H. 264. In: Proc
25、eedings of the first Workshop on Programmability Issues for Multi-Core Computers. 2008.14 Tan Y H, Lee W S, Tham J Y, et al. Complexity scalable H. 264/AVC encoding. Circuits and Systems for Video Technology, IEEE Transactions on, 2010, 20(9): 1271-1275.15 Baker M A, Dalale P, Chatha K S, et al. A s
26、calable parallel H. 264 decoder on the cell broadband engine architecture. In: Proceedings of the 7th IEEE/ACM international conference on Hardware/software codesign and system synthesis. ACM, 2009: 353-362.16 Tan Y H, Lee W S, Tham J Y, et al. Complexity scalable rate-distortion optimization for H.
27、 264/AVC. In: Image Processing (ICIP), 2009 16th IEEE International Conference on. IEEE, 2009: 3397-3400.17 Kim K, Lee J, Park H, et al. Automatic H. 264 encoder synthesis for the cell processor from a target independent specification. In: Embedded Systems for Real-Time Multimedia, 2008. ESTImedia 2
28、008. IEEE/ACM/IFIP Workshop on. IEEE, 2008: 95-100.18 Yang S S, Wang S W, Wu J L. A parallel algorithm for H. 264/AVC deblocking filter based on limited error propagation effect. In: Multimedia and Expo, 2007 IEEE International Conference on. IEEE, 2007: 1858-1861.19 Yan C, Dai F, Zhang Y, et al. Pa
29、rallel deblocking filter for H. 264/AVC implemented on Tile64 platform. In: Multimedia and Expo (ICME), 2011 IEEE International Conference on. Barcelona, Spain. 2011 IEEE, 2011: 1-6.20 Su H, Zhang C, Chai J, et al. A efficient parallel deblocking filter based on GPU: Implementation and optimization.
30、 In: Communications, Computers and Signal Processing (PacRim), 2011 IEEE Pacific Rim Conference on. Victoria, BC. IEEE, 2011: 280-285.21 Liu T, Yang E, Cheng R, et al. CUDA-based H. 264/AVC deblocking filtering. In: .页眉.页脚Audio Language and Image Processing (ICALIP), 2010 International Conference on
31、. Shanghai. IEEE, 2010: 1547-1551.22 高媛, 胡瑞敏, 陈皓. 基于 BS 预判的 H. 264 去块滤波优化算法. 计算机工程与应用, 2008, 43(34): 38-40.23 钟睿 , 吴东伟, 何明一. 一种高效的 H. 264 去块滤波方法. 计算机工程与应用, 2007, 43(6): 92-94.24 周芦明, 刘春生, 罗亮, 等. 基于纹理方向自适应的 H. 264 去块滤波算法. 数据采集与处理, 2010, 4: 021.25 颜洪奎 , 朱珍民, 沈燕飞, 等. 一种 H. 264/AVC 的自适应去块效应滤波快速算法. 计算机工程与应用, 2008, 29: 020.26 刘虎, 孙召敏 , 陈启美. CUDA 架构下 H. 264 快速去块滤波算法. 计算机应用, 2010, 30(12): 3252-3254.27 范灵俊 , 颜成钢, 宋风龙, 等. H. 264 去块滤波算法在众核结构上的并行优化. 小型微型计算机系统, 2011, 32(11): 2263-2267.28 URL:http:/ URL:http:/www.khronos.org/30 URL:http:/www.ffmpeg.org/