i did some benchmarks of pd's phasor~ code against a straight-forward implementation on my pentium-m, when implementing the objects for nova. the straight-forward implementation ran about 20 to 30 % faster than the pd-style implementation.
Do you still have the code from the straight forward implementation?
i'm not sure, if i still have the benchmark code somewhere on my machine, the phasor~/osc~ implementation can be found at http://svn.klingt.org/nova/trunk/source/language/dsp/oscillator.cpp ...
code like sqare root or inverse square root can be coded by just utilizing the rsqrtps and sqrtps opcodes, with a 14 bit precision, when working on the sse unit ...
14bit precision would leave a lot to be desired in Pd. Are there high precision operators?
erm, according to the comments in d_math.c, miller's code only precise for 8 mantissa bits and sqrt/rsqrt are aliases for q8_sqrt/q8_rsqrt
An alternative would be to special-case the offending code somehow. This could be part of a larger effort to make the DSP code modular so that SSE instructions and whatnot could also be "plugged in". Worth thinking about...
according to the gcc manual, simple vectorizable operactions, that's used for audio processing, can be autovectorized, if (and only if) the programmer takes care of both alignment and aliasing issues ...
Is complying with -fstrict-aliasing enough to take care of the aliasing issues?
aeh, no ... when referring to the term aliasing when talking about of vectorizable functions, i'm referring to the aliasing of pointers as function arguments ... it should be described in the gcc manual in detail ...
tim
-- tim@klingt.org ICQ: 96771783 http://tim.klingt.org
Silence is only frightening to people who are compulsively verbalizing. William S. Burroughs