刘品
学以致用---博主简介:专注语音、视频数字信号处理方面的研究以及算法在手机平台上面的移植和优化。涉及语音/音频编解码,语音增强,语音识别,语音音质客观评估,VOIP语音引擎 Qos算法模块和声音变速不变调和变调不变速等功能实现。熟悉ARM 各个系列的CPU,用ARMv4,ARMv5,ARMv6 and Cortex Neon 汇编优化相关算法代码,争取perforamance 最优。目前主要Windows mobile and Android platform上做相关speech/audio算法以及应用开发, HEVC 编解码器PC 和手机上的开发与应用。(交流Email:liupin.2008@gmail.com)

二十四  提高专业技能之 “完整DataSheet”

                                     Write by Liupin 2010-4-9

   在嵌入式软件设计中,往往你完成一个单独模块的软件功能,在release时往往要一张较为完整的datasheet,从这中能获取主要feature和对资源的要求,如CPU loading, Memeory size. 如何为软件提供一较为完整的datasheet? 在这篇文章中,我将较为详细的介绍。先来看看一些公司的datasheet,主要是以Codec project为例,如MP3 decoder.

  1. 先来看看spiritDsp 在其网站上提供的Datasheet 信息。个人认为这是一家非常规范的公司,不仅仅其优化Codec性能在行内是首屈一指的,而且各项文档也是很完善。

SPIRIT-MP3-Decoder-Datasheet.pdf

http://www.spiritdsp.com/datasheets/SPIRIT-MP3-Decoder-Datasheet.pdf

 

 

例举Feature,Specifications and Resource Requirements, 如大家要看更为完整的datasheet就看上面的linking.

 

2 罗列一下Datasheet包括的内容。

1)                          主要的特点

2)                          Specification,这一部分可有可无的,就是整体简单介绍一下Codec。这些在相应的spec都能

获取。

3)                          ResourceRequirements

    这一部分有很多版本,有的像spirit这样很详细的,有的就只要MIPS/Code size/RW size/RO size,有的还会把stack/heap size 也加入。

MIPS/MCPS---- CPU loading parameter

ProgramMemory size

RW memorysize

RO memorysize 等

 

3 怎么完善自己Codec Datasheet

1)     Featureand Specification 是很容易填写的,在codec spec and requirement book 中都会有详细的说明。

2)     ResourceRequirements

这部分往往很难填写的完整和准确,这一部分是本blog重点探究的东西。

 

探究一:MIPS 与 MCPS 区别

For the platform of ADS, the MIPSand the MCPS are all retrieved from the soft simulink. The MCPS can be got asfollowing formula:

MIPS  = total_instrunctions/(play_time*10^6);

MCPS  = total_cycles/(play_time*10^6);

 

Gernerally speaking, we can concern with the MCPS just for the realdevice, we can estimate the MCPS according to the following formula:

MCPS = (decoded_time/play_time) *dominant_frequency_CPU;

 

where the play_time has some to do with thesample rate for audio and the frame rate for video.

 

   从上面的可以知道MCPS和MIPS的不同。平时用得较多且实用的是MCPS, 这个能直接反应出CPU loading和 功耗。

由于一条指令可能要多个Cycles, 还有就是可能出现pipeline stall 和 跳转,考虑这些复杂的因素,导致很难确定MCPS与MIPS的转换关系,但我们还能得到不同ARM系列的CPI(每条指令的平均时钟周期数) 值来大致转换MCPS and MIPS.

 

    探究二:Simulator and device get the MCPS 差异

    现在等到MCPS往往有二种方式,一种是在simulator环境下,如RVDS4.0下得到这些数据,另一种放到实际的devices上跑,等到在某一系统中的实际performance data.

    Simulator performance testing: 只是简单模拟CPU对算法的执行情况,对单纯的算法时间性能较准确的测试。

    Devices performance testing: 由于实际的设备中,往往有CPU不是全力在工作,所以实际CPU MHz是一个比峰值小的值,这也是导致二个值的误差原因。

    Standalone performance testing: 考虑到实际的CPU和系统,测试出来的值往往比simulator所得到的值偏大。同时实际系统中,由于系统还在跑很多别的系统程序,还有Cache的影响导致测出的数据不准确或每次测得的值发生变化。所以应该多测试几次,在测试Codec performance时,最好不要运行别的系统程序。

 

    探究三:时间性能参数怎样测才会准,以及如何比较这些数据。

    例如,同时的MP3 decoder, 不同的公司会提供不同的MCPS Datasheet,那如何判别那个Codec性能好。由于测试的码流和测试的平台不一样,往往导致这些MCPS数据没有什么可比性,只能做一下参考。

    要得到更加准确和有参考价值的MCPS数据,那应该指定码流和测试的平台,这样才能得到相对准确的数据。

 

   探究三:如何得到memory size.

1)首先弄清应该要列举那几种size, 也就是嵌入式系统更关注那几个size. 我认为有以下几个。

Program size/Code size  ---- 这个是衡量Codec要多少bss 段memory, 往往有些系统会要求这个值应该小于多少的。

 

RO size --- 这个也就是constant table size

 

RW size --- 这个应该是malloc space, 也就是heap, 这个值很重要,嵌入式系统拿到这个值就知道Codec在运行中对memory需求size.

 

还有一个 Stack: 这个也很关键,有的application或CPU对这个参数也有自己的限定,所以也应该要把这个值拿到。

 

    2 ) 如何获取这些值。

 

       分二种情况,一种是在VS2005/VS2008; 一种是在RVDS下。 个人觉得在RVDS下较为方便和准确

 

       二种情况下都是通过生成对应的Map文件来实现的。

VS2005/VS2008:打开如下编译选项:

 

RVDS 下,在IDE或makefile中,加如下编译选项:

LFLAGS += --map  --info totals --symbols --list ./test.map

 

RVDS下将会生成test.map文件,文件中有会有如下信息,我们通过这些信息就有得到很多size.

 

 

 

==============================================================================

 

Image component sizes

      Code (inc.data)   RO Data    RW Data   ZI Data      Debug  

       888        208         48          0     40960      10995   Object Totals

         8          4         48          0          0          0  (incl. Generated)

         0          0         0          0          0          1  (incl. Padding)

     51036        934     27836        680        524     16284   Library Totals

        10          0          0          0          0          0  (incl. Padding)

==============================================================================

      Code (inc.data)   RO Data    RW Data   ZI Data      Debug  

     51924       1142     27884        680      41484     18788   Grand Totals

     51924       1142     27884        608      41484     18788   ELF Image Totals(compressed)

     51924       1142     27884        608          0          0  ROM Totals

 

==============================================================================

 

    TotalRO  Size (Code + RO Data)                79808 ( 77.94kB)

    TotalRW  Size (RW Data + ZI Data)             42164 (  41.18kB)

    Total ROMSize (Code + RO Data + RW Data)     80416 (  78.53kB)

 

==============================================================================

 

3)     如何得到stack size.

Stack 也就是函数的局部变量所占空间的大小,在VS2005/VS2008下还没有很好的方法来获取这个数据,在RVDS下有如下方法,通过对stack先染色,然后再做测试就能获取这个数据。

 

 

 

 

 

posted on 2010-08-13 09:06  liupin  阅读(1425)  评论(2编辑  收藏  举报

-->