[Speex-dev] Speex inner_prod(), normalize, C64 MIPS
Jean-Marc Valin
Jean-Marc.Valin at USherbrooke.ca
Sat Feb 4 18:41:36 PST 2006
Le samedi 04 février 2006 à 11:38 -0600, Jerry Trantow a écrit :
> Ok, I hadn't verified inner product was called with values scaled to <=
> +-16384. That would make it safe to do a 32 bit add of the intermediate
> terms. I have implemented the 40-bit accumulator.
Actually, it you have a 40-bit accumulator, you can just do a loop on
"accumulator += *x++ * *y++" without worrying about anything
> The C64x has a _dotp2() instruction that does two 16x16 multiplies and adds
> the products together. Since the values are scaled to 16384, I can add the
> results of the two _dotp2()s together before the long add without worrying
> about overflow.
Why would you do that instead of just accumulating directly?
> I split a norm_shift() out of your normalize16(). This function can also be
> used twice in pitch_gain_search_3tap(). Are there any other places that
> would benefit from this optimized routine?
Not sure I see what it does exactly...
> PS. Here are the C64x MIPS vs Complexity results for the original code. I
> have been able to reduce the complexity 1 encoder to 15.7 MIPS.
>
> Encoder
> Complexity Original 32 Original 16
> 1 31.2 29.6
> 2 41.7 39.8
> 3 51.4 49.0
> 4 61.6
> 5
> 6
> 7 93.1
> 8
> 9 120.8
Could you explain what this means and what the 15.7 MIPS value means?
And what bit-rate?
Jean-Marc
More information about the Speex-dev
mailing list