论文部分内容阅读
龙芯2K1000B是面向工业控制、移动智能终端的嵌入式So C,视频解码是其重要的应用场景。其视频子系统中包括以CPU作为处理核心的软件解码器和硬件视频处理单元(Video Processing Unit,VPU)。CPU解码器一般基于高级编程语言实现,虽然解码效率低于硬件解码器,但具有格式兼容性好和算法升级灵活的优势,可以作为视频解码系统在低分辨率解码时的重要补充。VPU解码器虽然解码效率高,但需要使用大量的物理地址连续内存,从提高系统资源利用率角度出发,需要对其内存管理方法进行适配和优化。论文以目前被广泛使用的H.264视频格式作为研究对象,基于龙芯2K1000B平台对其视频解码系统进行软件层次的适配和优化。论文对龙芯2K1000B解码系统在H264视频解码中存在的问题进行分析和优化。对于CPU解码器,首先评估了当前基于FFmpeg的H.264解码器性能。利用Perf等性能分析工具,找到熵解码、运动补偿、环路滤波、反量化等主要的性能瓶颈模块。然后针对瓶颈模块的计算特点,利用龙芯多媒体SIMD指令对运动插值和环路滤波两个耗时模块进行了内嵌汇编的优化。在此基础上充分利用移位指令、解包指令以及龙芯平台丰富的寄存器资源,分别对数据加载和中间数据存取进行了优化,提高了解码器性能。对于VPU解码器,首先对解码器原始内存管理方案的预留方式和分配方法进行了分析。然后适配了连续内存分配器(Contiguous Memory Allocation,CMA)机制对VPU的内存预留进行优化,使得VPU不需要长期独占连续物理内存。在此基础上,改进了原始内存分配方法中基于固定内存块进行申请和分配的方式,实现了根据解码器实际需求进行动态内存申请和分配的方法,提高VPU内存的真实利用率。最后在搭载了2K1000B和Linux操作系统的龙芯2K派开发上对优化结果进行了测试。对于CPU解码器,实验测试结果表明,经过龙芯多媒体SIMD指令优化后整体的解码帧率提升幅度在30%以上。其中720P分辨率的高清视频解码帧率可以达到24帧。对于VPU解码器,优化后的基于CMA的内存预留方式可将内存消耗控制在64MB以内并且不长期占用。优化后的动态内存分配方式分配耗时在250毫秒以内,同时VPU的内存真实利用率均高于95%。