[Pdmtl] Analyse audio en C?

Mathieu Bouchard matju at artengine.ca
Wed May 20 14:06:50 EDT 2009

On Wed, 20 May 2009, Stephen Sinclair wrote:

> I was curious about Alex's comment only because in my opinion Pd is 
> actually quite close to optimal in this regard... once you connect a 
> chain of DSP blocks, they are essentially just called one after the 
> other, by walking down a list of function pointers.  From my 
> understanding it's effectively as fast as C++ virtual functions.

Yes, or a bit faster, even, but there are lots more time spent reading 
signals from RAM and storing them back to RAM, even if you have a good 
cache. This is even more obvious once you try accelerations like MMX/SSE, 
and it even becomes a big bottleneck. In that case, the solution is to 
merge operations together so that less read/writes need to be done. You'd 
start with the most common operation sequences. For example, if a bunch of 
[*~ constant] followed by [+~] all of it together is a very common 
operation (it is), then you can replace it by something all-in-one (which 
has already been done).

The alternative is to make a compiler for patches that can take advantage 
of that. However, not only it requires the source code of all DSP classes 
you might put together, it also requires them to be formatted using C 
macros in such a manner that the compiler can pick up pieces and glue them 
together. (I suppose that this compiler would in turn use GCC). Let's call 
this beyond our reach for the foreseeable future. (!)

> One step better is if you don't need to dereference a pointer, i.e., 
> call a function directly (like non-virtual functions, or normal C 
> functions), and one step better (the best possible) is when functions 
> are inlined, which removes the function call overhead completely.

I said the above because even if you compile a bunch of direct calls to 
the DSP functions of Pd, it won't save much time, even if GCC has the 
luxury of being able to inline them, and does. You need to be able to 
remove the massive read/writes to get a significant gain, unless you need 
to have a very small block size (as in your STK example).

  _ _ __ ___ _____ ________ _____________ _____________________ ...
| Mathieu Bouchard - tél:+1.514.383.3801, Montréal, Québec

More information about the Pdmtl mailing list