One of the limitations with the Pd DSP chain *is* it's style of modularity. The stream is broken down into indivisible blocks. The tree is parallel at the top, but as you go down the tree, it becomes more and more serial. There would be a bottleneck, where the parallel processes aren't used. In order to get a generic speedup, those "indivisible blocks" have to be divisible. And this is not always possible--
afaict, it is just a problem of scheduling ... scheduling a serialized (topologically sorted) dsp graph is very easy and very efficient ... just iterate over an array (nova) or a memory region (pd) ... it is actually scheduled in advance ...
a parallel dsp graph scheduler would introduce some dispatching code between the nodes ... probably we need to maintain ready/waiting queues that we have to access in order to make our scheduling decisions ... which is way more expensive than just going to the next node in a dsp chain ...
so for small "parallel" graphs like: osc~ line~ | / | / *~ | dac~
the parallel execution of osc~ and line~ is probably more expensive than running osc~->line~->*~->dac~
so i don't think, it is a problem of splitting up indivisible blocks, but rather to combine these indivisible blocks to reasonably large serial chunks ...
You'd have to start almost from scratch to design an ideal parallelized Pd.
yes, probably :)
tim
-- tim@klingt.org ICQ: 96771783 http://tim.klingt.org
Nothing exists until or unless it is observed. An artist is making something exist by observing it. And his hope for other people is that they will also make it exist by observing it. I call it 'creative observation.' Creative viewing. William S. Burroughs