[vorbis-dev] SIMD instructions

Segher Boessenkool segher at koffie.nl
Wed Feb 5 22:52:11 PST 2003



Monty wrote:
> 
> 
>>1.
>>SSE2 uses 64-bit floats, Vorbis uses 32-bit...
>>If we use 64-bit precision instead of 32, the result will be different.
> 
> 
> You get slightly different rounding.  It doesn't matter one bit
> (actually... it matters considerably less than one bit).  No aspect of
> Vorbis for which an arithmetic result is roundoff-sensitive uses
> floats.

Huh?  That can't be what you meant.

>>I've made an encoder/decoder with 64-bit precision
>>(I've changed float(s) to double(s) almost everywhere),
>>but the sound-result has changed, the tone was a little
>>different (not correct).
> 
> Then you have a bug, or you're imagining the problem.  You ears have
> given you a hint, now go use some tools that can tell you for certain.

100% agreed.

> I expect that
> even with rc3 in assembly, the 1.0 version wins on performance.

To that, too.

> Segher is right:

And to that, of course.

> Memory use patterns are a good initial target.

Attack plan:

-- everything should fit into cache/sram;
-- except possibly huge huffman books: find an efficient
    way to handle those.

> Otherwise, you'll get yourself into a position where you have a
> difficult-to-maintain assembly Vorbis decoder that took a long time to
> write being outperformed by a carefully tuned pure-C version that took
> less time to make.

If "assemblification" took more time, or even a significant portion
(like 10%) of the time needed to do algorithmic improvements, you're
doing something terribly wrong indeed.  Small easy significant-gain
hacks is where assembler code shines.

 > It's happened to GOGO and LAME, where the C tuning
> outperformed the original translation into assembly, and the assembly
> took ten times as long.

Really ten times?  Wow.

The worst thing about assembly in a context like this is that it
is obsolete almost as soon as you write it, being obsoleted by either
code changes or target changes (newer cpu's need different scheduling
and/or code selection).  The second doesn't apply if you control the
target hardware, i.e. you write it for local use only or you are
a hardware manufacturer.

<p>But by all means, go ahead if you really want to.

<p>Segher

<p>--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'vorbis-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the Vorbis-dev mailing list