[pulseaudio-discuss] mini svolume vectorization framework

Jason Newton nevion at gmail.com
Sun Apr 3 04:15:05 PDT 2011

The goal was speed speed speed and DRY as much as possible with a touch 
of robustness to odd configurations.  This code uses intrinsics to do 
the SIMD stuff. Build time dependency on boost. It should (I hope) be 
comparable if not faster than the orc stuff.  Readability is arguable 
and I should mention I got the ideas for some of the things I did from 
Eigen (the template library for linear algebra).  Unfortinately given 
the need for saturating multiplies, eigen itself was unsuitable for 
integral types in the volume code.

Inside is a basic tested version for 16bit SSE2 svolume mixing, it is 
only integrated inside the testing routine in svolume_sse.c.  float 
support was also added but is untested.  neon code was also added but is 
untested (I don't have an arm machine to test on).  a non-vectorized 
implementation was also included (yet again untested).  So why submit 
the patch now?  To get some feedback from others - ie here's what things 
look like and perform, shall we carry forward?

This also lead to the discovery of a sort of bug in the reference 
implementation and others using its same technique:
154: 7fff != 5028 (0012 * 4740b0d)
936: 7fff != 1f2c (0007 * 4740b0d)
This is from the signed short result checking code in said testing 
routine  from which my results differed from the current c reference 
implementation.  The lhs is my results where as the rhs is from the 
reference.  Clearly the reference implementation is not performing a 
saturating multiply in all cases though these are some big volume 
numbers one probably wont' see in practice.  Still, confused me for a 
while when I first started working on this code and that big number is a 
valid volume inside the scope of these functions (int32).

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-mini-vectorization-framework-for-svolume-utilizing-C++.patch
Type: text/x-patch
Size: 21233 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20110403/76f9898a/attachment.bin>

More information about the pulseaudio-discuss mailing list