On Tue, 2008-04-15 at 19:45 +0200, Christian Schoenebeck wrote:
  Yeah, I'm respawning this topic ...
 because I was curious how the GCC vector extension situation changed meanwhile
 and wrote a small benchmark for mixing signals with and without gain. You can
 find it here:
        
http://download.linuxsampler.org/dev/mixdown.tar.gz
 I compared a pure C++ implementation vs. the hand crafted SSE assembly code
 (by Sampo Savolainen, Ardour) and of course an implementation utilizing GCC's
 vector extensions. On my very weak, but environment friendly ;-) VIA box the
 GCC vector implementation outperforms the other two solutions (using GCC
 4.2.3 BTW):
 Benchmarking mixdown (no coeff):
 pure C++                : 670 ms
 ASM SSE                 : 200 ms
 GCC vector extensions   : 180 ms
 Benchmarking mixdown (WITH coeff):
 pure C++                : 890 ms
 ASM SSE                 : 300 ms
 GCC vector extensions   : 230 ms 
Great stuff, very interesting. It seems it's finally getting easier to
vectorize functions. Too bad the code is awfully slow for non-sse
compiles. That still leaves the responsibility of choosing the fastest
algorithms per architecture at runtime to the application developers.
What about gcc 4.3.0 performance? I seem to recall that 4.3 should have
even better vectorization support.
I have to test whether I could squeeze a few more cycles out of
compute_peak(). That algorithm is the sole reason I started writing SSE
for ardour. The function uses a huge amount of computing time without
optimization.
  Sampo