On Wed, Aug 7, 2013 at 2:57 AM, Roman Haefeli <reduzent@gmail.com> wrote:
On Wed, 2013-08-07 at 08:40 +0200, IOhannes m zmölnig wrote:
> On 08/07/13 03:15, Miller Puckette wrote:
> > Hmmm...  I was umnder the impression that, except for the overhead of block~
> > and switch~ objects, there would be no difference in DSP execution time
> > between a patch having lots of subpatches and one with the same amount of
> > computation all thrown in one window.  I haven't made any measurements but
> > theoreticall at least there shouldn't be any difference.
>
> i once did make measurements, and they showed that your assumption is
> correct.
>
> or at least, it showed that it *was* correct at that time. this was on a
> P2-400MHz in 1998 or so, where a 16 channel spatialization patch would
> eat about 95% of the CPU - regardless of whether you used a single huge
> patch or organized the code into subpatches/abstractions.
>
> eventually i went for using abstractions, and let the PC run at 95% for
> the 2 weeks show.

I once made some informal tests to measure the overhead of [switch~]. It
turned out it is quite big and if you're running hundreds or thousands
instances of [switch~] you probably gain nothing by turning DSP off in
subpatches. I don't know what the sweet spot is it seems using [switch~]
is only worth for subpatches with a minimum amount of (DSP) complexity.

Roman


I don't know why this is so...  
When you add a [switch~] object, it adds a prologue and epilogue around the perform routines from each object in the subpatch.  The runtime behavior is just like [block~], except when the patch is switched off, the switch prologue returns a pointer to the epilogue, instead of the next item in the dsp chain (don't quote me--I may need to read some code to find exact behavior, but that's the gist of it).

To me, this is pretty minimal and reasonable.  Maybe there's an unintended consequence like cache misses when skipping over part of the dsp chain.

 Chuck