Spirit DSP 解码处算法指标
SpiritDSP是一家提供音视频方案的公司。以下主要就是整理一下该公司提供方案的一些算法的指标,以便作为日后的评估及程序优化的一个参考指标。
MP3解码
平台 |
ARM7 |
ARM9 |
ARM9E |
ARM11 |
Tensilica HFi2 |
Cortex-M3 |
Nios II |
TI C55xx |
平均MIPS |
19.5 |
17.5 |
8 |
7.5 |
5.7 |
23 |
18 |
12 |
峰值MIPS |
25 |
22 |
10 |
9.5 |
8 |
28 |
22 |
13 |
程序大小(KB) |
16.5 |
19.7 |
15 |
16.5 |
19.9 |
13.7 |
16 |
11.4 |
常量大小(KB) |
7.5 |
7.2 |
6.6 |
7.5 |
15 |
7.6 |
6.8 |
7.5 |
连续变量(KB) |
12.1 |
12.3 |
12.1 |
12.1 |
20.1 |
12.3 |
13.3 |
12.3 |
临时变量(KB) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
堆栈(KB) |
0.5 |
0.5 |
0.5 |
0.5 |
1 |
0.5 |
0.5 |
0.5 |
平台 |
AudioDE Revision2 |
平均MIPS |
5 |
峰值MIPS |
5.5 |
程序大小(KB) |
27 |
Y Memory(KB) |
15 |
X Memory(KB) |
12 |
WMA解码
阅读剩余部分...
偶然间,接触了一款DSP,认识了这么一个叫定点小数的东西。而之前接触到的却全是定点整数。
以8位为例,定点整数可以表达-128~127范围的数值。从右到左,每一位的权重分别为:2^0,2^1……2^6,最高位为符号位。而定点小数的表达范围则为-1 ~ 1-2^-7。从左到右,最高位为符号位,剩下位数的权得为:2^-1,2^-2……2^-7。
举个简单的例子,00010101,如果是定点整数,该值为16+4+1=21;如果是定点小数,该值为1/8+1/32+1/128=0.1640625。
那么,定点小数和定点整数,除了表达的数值外,在运算上会有什么区别呢?
先是位扩展。当8位扩至16位时,如果是定点整数,则在该数前补8个符号位。而如果是定点小数,则在该数后补8个0。再是16位到8位,定点整数则是丢弃高8BIT,定点小数则是丢弃低8BIT。因此,定点整数将会发生严重的溢出,而定点小数只会丢失部分精度。
在计算加减的时候,定点小数与定点整数没有太大的区别。在乘法上,就有一些区别了。比如说00000001 x 00000001。在定点整数的时候,由于1x1=1,因此结果为00000000 00000001。但是在定点小数时,由于00000001不再表示1,而是2^-7,因此,相乘的结果为 00000000 00000010,即2^-14。
也可以这么理解。由于定点小数的权重是由左向右的,由于两个带符号位的定点小数相乘,使得前面多出了一个符号位,因此需要左移一位来移出这个符号位。这样,从编码的字面值来看,定点小数相乘的结果是定点整数相乘结果的两倍。
那么定点小数究竟有什么好处呢?Hanny是这么理解的。在做乘法或乘加运算时,定点整数需要不断地移位来防止溢出,而定点小数则可直接实现。因为是小于1,所以定点小数在乘法运算过程永远不会溢出。
最后,今天是光棍节!55555