基于嵌入式SIMD处理器的音频解码优化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【Abstract】For multimedia embedded system, source code optimization methodology is the key to get high profile media performance. With more embedded CPU adopting RISC plus SIMD architecture, this paper puts forward a code optimization flow to implicitly and explicitly explore this processor architecture. This method is used to optimize and tune the implementation of a MP3 audio decoder on the XScale portable embedded system. It shows that using this methodology can quickly and easily redesign the software to increase 60% performance over the original software in short time. 【Key words】embedded RISC processor; SIMD architecture; MP3 decoding
作者简介:李晓潮(1970-),男,博士后,主研方向:嵌入式系统, 多媒体,混沌扩谱通信;焦李成,教授、博士、博士生导师;洪新华, 高级工程师;卢 潇,硕士
收稿日期:2008-04-20 E-mail:jeffli@
—13—
为此,把软件优化阶段进一步划分成 3 个子阶段,即高 级语言、编译器和汇编语言阶段,在高级和汇编语言阶段中 又分别包含算法优化、数据优化和指令优化 3 个重点。同时, 笔者发现经过 C 编译器优化后的程序依然具有很高的冗余度 和改善空间,可是如果完全通过手工编写的方式来重写代码, 不但对程序员的本身能力要求很高,而且会浪费许多开发的 时间和人工,使得工程的管理难度和费用增加,所以,较好 的方式是对编译器优化后的代码进行手工修改。根据实践的 结果,以这种方式的手动修改代码性能可以提高约 20%~30%。综上分析,提出软件优化流程如图 1 所示。
优化。 综上所述,为了实现基于 SIMD 架构的算法优化,需要
配合 SIMD 架构合理选择和修改算法,并采用手工汇编的方 式来编写程序。目前在嵌入式多媒体领域还没有太多这方面 的研究,鉴于 MP3 播放已经成为多媒体在手机中的典型应 用,因此,研究 RISC/SIMD 架构的 MP3 优化具有实际的市 场需求。为了提高软件开发的速度、效率和项目的可管理性, 本文提出基于这种架构的快速优化流程。
立体声处理
合成滤波
Frequency Inversion
IMDCT 变换
Al码流程
图 2 中的解码输入是 MP3 压缩音频码流,预处理提取数 据帧以及解码中需要用到的霍夫曼表号和比例因子等信息。 霍夫曼解码根据霍夫曼表对每个数据组中的压缩数据进行解 码得到 32 个子块(每个子块 18 个频域数据)共 576 个频域数 据。反量化对解码后的数据乘上量化因子,重新排序、立体 声处理和消除重叠都具有针对性,并非对所有数据都进行操 作。重新排序用于恢复霍夫曼编码时打乱的短子块次序,立 体声处理只针对立体声的双声道数据,消除重叠针对长子块 数据。IMDCT 对每一个子块的 18 个频域数据作反余弦变换 生成相应的时域信号,并作加窗和重叠相加操作计算出一个 子带的 18 个时域信号。子带合成滤波将得到的 32 个子带数 据合成为 18 块、每块 32 个 PCM 数据的声音信号输出。
在 LIBMAD 解码库中,霍夫曼解码和反量化操作是合并 在一起,即每解一个霍夫曼码就立即调用反量化函数对其进 行反量化操作。这样的模块划分大大增加了反量化函数的调 用次数,而且这 2 个模块都进行大量的查表操作,所使用的 查找表格也完全不同。为了利用缓存局部性将查找表项尽量 保留在缓存中,把这 2 个模块分在 2 个单独函数中处理。分 离前两者的调用关系如下:
分离后,2 个模块是整个解码函数 III_decode 的 2 个独 立子函数,每解一帧的数据只需调用一次反量化函数 III_ requantize 和霍夫曼解码 III_huffdecode 函数,调用次数从平 均每帧调用 127 次左右,下降到 1 次,执行时间降低了约一 倍。模块之间的调用关系如下:
III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part2_length){ … III_exponents(channel, sfbwidth, exponents); … III_requantize(value, exp); …
}
其中,III_huffdecode 是霍夫曼解码函数;III_requantize 是反 量化函数;III_exponents 是计算反量化所需指数值的函数。
子带合成滤波 40%
其他 7%
Huffman解码/反量化 24%
MDCTIV 29 %
图 3 主要模块占用处理时间的比例
其中,霍夫曼解码和反量化函数运行时间约占 24%; MDCT 变换包含了立体声处理、消除重叠、IMDCT 变换和频 率反转操作,一共占 29%;子带合成滤波函数占 40%;其他 一些辅助函数模块约占 7%。
2 代码优化流程
通常优化过程可以划分成 3 个阶段:系统分析,软件优 化和测试验证。系统分析着重对系统的软硬件作分析,包括 处理器架构(缓存、流水线等)、软件架构和模块分析等。测 试验证对优化后的代码进行测试和分析,对整个优化作最终 评价。软件优化是整个过程的关键,包括算法优化、数据优 化和指令优化等方面[3]。一般情况下,研究人员只在高级语 言阶段对算法和数据进行优化,而把指令优化放在汇编语言 阶段[5-6]。但是,随着处理芯片计算能力的提高和架构的扩展, 不能仅仅将乘、加法的次数作为算法评估的唯一标准,还要 考虑算法和架构的匹配度、数据在内存和寄存器之间搬移所 占的处理时间和数据计算精度等因素。因此,算法选择不能 仅仅停留高级语言阶段,而是要扩展到底层的汇编语言阶段。
1 概述
随着嵌入式芯片处理能力和功能的快速发展,多媒体已 成为嵌入式系统的重要应用之一,并且需要具备高品质播放、 低功耗和灵活扩展等特点。为了满足这些要求,目前的方案 大多采用基于可编程媒体处理器的硬件架构。由于媒体处理 算法具有小位宽和高并行的特点,适合采用并行硬件体系结 构,近年来,嵌入式媒体处理器中越来越多地采用 RISC 和 SIMD 的混合架构来解决处理器在媒体处理能力方面的瓶 颈[1]。然而,目前编译器尚不能够很好地实现 SIMD 指令的 自动编译[2],单纯依靠 C 程序并不能在该架构下取得最大的 性能优势,需要进行手工汇编以及算法修改。此外,由于处 理器能耗和程序所用指令之间关系密切[3],因此指令优化也 可以降低系统能耗。
Audio Decoder Code Optimization Based on Embedded SIMD Processor
LI Xiao-chao1,2, JIAO Li-cheng2, HONG Xin-hua1, LU Xiao1
(1. Embedded Software R&D Institute, Amoi Electronics Co. Ltd., Xiamen 361022; 2. College of Electronic Engineering, Xidian University, Xi’an 710071)

III_exponents(channel, sfbwidth, exponents);

}
此外,还可利用一些数据的特殊性来提高运行效率。在 MP3 编码时根据较大数值主要集中在低频部分且可以忽略高 频部分较小数据的机理,对每个数据组的 576 个频域数据采 用不同的比例因子和霍夫曼编码表格来进一步压缩编码码 长。这样处理后,MP3 压缩码流中的数据组可以分成 3 个区 域,即:大值区域,“1”值区域和“0”值区域,如图 4 所示。
针对嵌入式平台的音频优化主要针对 MP3,基于单个 RISC 核的优化可以节省音频解码 DSP 并由此带来的成本、 功耗和开发上的优势[3-5]。基于 SIMD 架构的优化研究大多基 于通用 CPU[6-9],通过对媒体扩展指令和编译优化开关的研 究,文献[6]认为算法和指令优化同等重要,两者结合才能取 得最好的优化效果,同时手工代码比编译器优化代码具有更 高的效率,优化的关键在于 SIMD 架构所提供的扩展指令集 是否支持特定的算法[6-7,10]。SIMD 架构下的算法研究主要集 中在 DCT, FFT 等,包括数据精度和归一化问题,文献[10] 对 SIMD 架构下 SR-FFT, SA-DCT 算法的改善效果作了比较 分析,文献[8]研究了如何归一化 Chen 算法使其更适合 16 bit 定点算法,文献[9]采用 Lee 算法[11]对 IDCT 和 MDCT 进行了
—14—
采用开源 LIBMAD 解码库作为优化的基线,运行平台是
基于 PXA270 的嵌入式系统。PXA270 是 Intel 公司推出的基
于 RISC/SIMD 架构芯片,除了 ARM V5TE 处理核之外,还
集成了 WMMX 媒体扩展协处理器,内核最高工作主频达
520 MHz,是专门针对移动终端市场推出的嵌入式系统平 台[13]。图 3 给出各主要模块占用处理时间的比例。
李晓潮 1,2,焦李成 2,洪新华 1,卢 潇 1
(1. 夏新电子有限公司智能软件所,厦门 361022;2. 西安电子科技大学电子工程学院,西安 710071)
摘 要:嵌入式处理器越来越多地采用 SIMD 并行架构来提升其媒体处理能力,该文提出基于该架构的优化流程,采用算法和处理器架构 紧密结合的优化原则,利用现有编译器来降低汇编编程工作量,对算法关键部分采用手工编程来确保优化效率。该流程被应用在基于 XScale 平台的 MP3 解码优化中,短时间内将解码效率提高 60%,接近 IPP 库的性能。 关键词:嵌入式 RISC 处理器;SIMD 并行处理架构;MP3 解码
嵌入式系统分析
处理器架构分析 高级语言阶段
模块划分优化 模块算法优化
应用软件分析
其他一些优化
软件优化
编译器以及编 译开关优化
联合测试验证 汇编语言阶段
达到预定目标
性能参数分析
寄存器和内存 分配优化
汇编程序架构 和指令优化
优化后的软件
图 1 嵌入式软件优化流程
3 算法介绍和模块分析
整个 MP3 解码流程可以分成 8 个部分[12],分别是预处理、 霍夫曼解码、反量化、重新排序、立体声处理、消除重叠、 IMDCT 变换,频率反转和合成滤波,如图 2 所示。
III_decode{ … III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch],
part2_length); III_requantize(xr[ch], channel, sfbwidth[ch]);
… } III_requantize(xr[ch], channel, sfbwidth[ch]) {
4 优化分析和实现
将整个代码分成 4 个部分进行优化,即霍夫曼解码、反 量化、MDCT 变换和子带合成滤波器。在高级语言阶段确定 各模块划分和调用次序,衡量算法的不同实现方法及其是否 适合汇编语言阶段的优化。在汇编语言阶段,主要对汇编代 码在算法、指令和内存等方面进行手工修改,使算法和处理 器架构相互契合。 4.1 模块和参数优化
第 35 卷 第 1 期 Vol.35 No.1 ·博士论文·
计算机工程 Computer Engineering
文章编号:1000—3428(2009)01—0013—04
文献标识码:A
2009 年 1 月 January 2009
中图分类号:TP311.54
基于嵌入式 SIMD 处理器的音频解码优化
相关文档
最新文档