一种低成本MPEG-4 AAC解码器的优化策略
引言
MPEG4先进音频编码(AAC)是典型的数字信号处理(DSP)应用,算法以浮点操作为主,而出于成本和功耗的考虑,便携式设备一般是定点平台,需要将浮点算法转换为定点算法。定点平台给DSP带来的最大挑战是:如何保证计算结果的精确性;如何满足计算复杂性的需求,达到性能约束。
便携式AAC解码产品平台可分为专用ASIC[1]、DSP核[2],以及DSP核或RISC核结合专用硬件加速模块 [3]。这些平台存在着成本高和功耗高等问题,不太适合低成本便携产品。随着主流RISC微处理器的性能不断增强,如果由单一RISC处理器实现系统控制和音频解码功能,那么将为最终产品降低成本和功耗提供极大的优势。参考文献[4]在单RISC平台实现MPEG2 AAC实时解码,但定点化过程采用模拟的方法,软件优化集中于汇编级,造成设计时间长、可移植性差。笔者提出一种先进的优化策略,实现了在低成本SoC平台上MPEG4 AAC LC Profile实时解码。
1 目标架构、性能评估方法与优化流程
1.1 目标架构
目标架构基于AMBA总线规范研发的一款嵌入式片上系统(SoC),内核为ARM7TDMI,主频为75~100 MHz。
随着嵌入式处理器计算能力的提高,数据通信变成性能主要瓶颈。ARM7TDMI内核无Cache,访问存储器不具有流水特性。为了提高系统性能,在外部存储器接口控制器(EMI)模块中设计了指令预取FIFO,充分利用SDRAM的流水特性;同时,内嵌20 KB片上高速存储部件(ESRAM)。这为优化策略提供了结构基础。
1.2 性能评估方法
评估嵌入式软件性能一般有3种方法:评估板、软硬件协同验证和指令集模拟器(ISS)。指令集模拟器采用C语言高层建模,由于抽象层次较高,精度不如前两种方法,但可以快速建立系统原型,修改方便,利于调试,模拟速度快。本文采用指令集模拟器建立系统平台。
ARMulator是 ARM公司提供的指令集模拟器。ARMulator不仅可以仿真 ARM处理器的体系结构和指令集,同时提供扩展机制描述硬件,可建立存储器和处理器外围设备的高层模型。ARMulator仿真器主要通过对指定地址空间的读/写实现对扩展设备模型的调用,可以方便地建立总线从设备模型。总线主设备的模型建立过程比较复杂,模型不能模拟主设备与内核抢占总线情况;同时,与硬件设计思路相去甚远。这样带来的问题是:①无法建立用于性能评估的SoC系统模型;②建立的模型无法用于指导和验证硬件设计。
本文的解决思路是建立总线模型,提供接近实际硬件的总线接口,同时集成节拍精度存储器接口(EMI)模型以及SDRAM和SRAM存储器模型。软件代码加载到存储器模型中,由ARM ISS解释执行,每次内存存取将调用模型、总线模型仲裁主设备模型和内核的总线请求,模拟两者抢占总线以及对从设备访问等操作,并得到执行指令数、周期数等各种信息。利用benchmark程序在实际芯片和模型上对比实验,证明模型的准确性可以达到95%左右,完全达到建模和性能分析工具的要求。
系统模型平台如图1所示。通过总线接口规范添加模型是很简便的。利用这一平台,可以进行软件优化和系统性能的评估,也可以作为软硬件划分的平台。
图 1 系统模型架构
1.3 优化流程
低成本系统采用定点处理器,由于浮点算法需要采用浮点库仿真的方法实现,影响了系统的性能,因此需要使用近似定点数算法来代替浮点算法。浮点—定点转换策略一般基于数据仿真方法,该方法的最大缺陷就是需要大量仿真时间,而且测试结果具有一定的片面性。本文采用基于统计分析的方法实现浮点—定点的转换,在满足信噪比约束条件下大大缩短转换时间。定点化后软件由于算法选择和编译产生的代码冗余,需要进一步的优化。在本文建立的系统模型平台上确定软件瓶颈,之后进行算法和汇编级优化,本文的优化集中在计算密集部分。由于片外SDRAM的访问等待时间较长,因此软件大量的运行时间消耗在外部存储器访问上。优化程序执行时间可以通过加快存储器介质访问速度实现,即将代码放入片上ESRAM。出于成本考虑,片上ESRAM容量有限,如何最有效利用片上RAM成为急需解决的问题。本文运用面向性能优化的片上存储器容量定制策略来解决这一问题。
总体优化流程如图2所示。
图2 设计方法学
2 优化过程
2.1 基于统计分析的浮点—定点转换方法
从硬件开销和解码性能角度,我们希望定点化的字长尽量短;但为了保证解码效果(即计算精度),我们得出相反的结论,因此浮定点转换过程如何在性能和效果两个约束间达到最佳的平衡成为需要解决的问题。本文利用基于统计分析的定点近似程序信噪比计算方法,在满足一定信噪比限制条件下,计算出最佳转换参数。限于篇幅,具体策略详见参考文献[5]。这一策略结合上文介绍的仿真平台,可以用于在软硬件划分过程中确定硬件加速模块的最佳字长。
根据设定信噪比计算出最佳转换参数,实现工具半自动进行浮点到定点的转换,在保证转换效果前提下大大缩短转换时间。实验结果表明,浮点算法和定点算法间信噪比为80 dB左右,达到了高保真音质。
2.2 软件优化
嵌入式软件优化主要分成两个层次:高级语言层次算法优化和汇编语言级的代码优化。本文软件优化在两个层次进行了部分工作。
定点化后的MPEG4 AAC解码程序,在上文介绍的仿真平台上运行,并利用ARMulator提供的Profile工具,得到了程序函数级的时间分配信息。其中,滤波器组(FilterBank)占了66.96%的CPU运行时间。滤波器组中最重要的算法IMDCT占了57.26%的CPU运行时间,IMDCT是计算密集型操作,算法比较规则,因此软件优化重点就是IMDCT。
IMDCT的表达式如下:
此式的计算量很大,Duhamel提出了利用N/4点的FFT[6]的IMDCT快速算法。此快速算法流程如图3所示。
图3 IMDCT快速算法
FFT算法包含大量的复数乘法,可利用处理器提供的有符号数乘法和乘加指令手工修改汇编代码进行优化。
2.3 片上存储器优化
随着嵌入式处理器计算能力的提高,计算负载已不再是系统的主要瓶颈,系统芯片(SoC)设计的难题主要是嵌入式微处理器的高主频速度与片外存储器的低读取速度不相匹配,这很大程度上限制了系统的性能,所以提出加入片上高速存储器,以弥补硬件无Cache的缺陷。将全部软件代码和数据放入片上ESRAM当然最理想,但出于成本考虑且ESRAM容量有限,因此多大容量的ESRAM可以满足解码实时性约束是需要考虑的。
如图4所示,本文面向性能优化的片上存储器优化策略的流程主要由两个循环构成,采用了可变粒度的指令流划分方法。根据这种策略,在最佳容量能够减少超过80%的片外存储器访问次数[7],且最佳容量一般不超过程序大小的4%。本文的片上存储器容量已经确定为20 KB,所以只需内循环6步即可。
图4 容量定制策略流程
首先在平台上运行解码程序,利用ARMulator分析应用程序;在生成代码详细的Profile和Trace信息的基础上,使用自行开发的代码生成器完成应用程序的代码搬移,并在应用程序运行前完成内存布局修改,从而大幅提高了软件的运行效率,平均达到原来的一倍。
3 结论
在本文介绍的仿真平台上,对执行完各个优化步骤后的解码软件性能进行评估。素材为2通道,128 kbps,采样频率为44.1 kHz。结果表明,可以实现AAC实时播放。表1为软件性能表。
表1 软件性能表
本文所提出的优化策略能极大地提高设计的效率,只需花费约0.18年/人就完成了解码软件的移植和优化。本文优化流程集中在高层,通过自动化手段极大地缩短了上市时间;利用高层建模手段,建立虚拟原型,基本无验证和评估成本,同时有利于设计空间的探索。
标签: 软件优化 MPEG4 浮点—定点转换 存储器优化 AAC解码器
相关文章
发表评论