Csound Csound-dev Csound-tekno Search About

[Csnd] Re: Re: Re: Re: Help Request: Excessive CPU Usage

Date2008-08-27 20:27
From"Art Hunkins"
Subject[Csnd] Re: Re: Re: Re: Help Request: Excessive CPU Usage
Thanks, Andres; you spotted the problem.
 
I changed the first $DEPTH code line to:
        if ($DEPTH == 0) || (p1 > 1) goto skip
and CPU usage declined to a reasonable range: between 30-40%.
 
What was different in my other .csd was that the code for instr 1 was separate from the others, and only instr 1 included the event spawning.
 
Again, many thanks.
 
Art Hunkins
----- Original Message -----
Sent: Wednesday, August 27, 2008 2:44 PM
Subject: [Csnd] Re: Re: Re: Help Request: Excessive CPU Usage

Hi Art,

The problem is you spawn a new instance of the reverb instrument with every voice. Maybe you can turnon the reverb instrument using turnon2, and get rid of the event_i line. I think this is the problem.

Cheers,
Andrés


On Wed, Aug 27, 2008 at 11:40 AM, Art Hunkins <abhunkin@uncg.edu> wrote:
Thanks, Steven.

Yes, of course, you're correct.

The same problem remains, however, with the correction made.

(I gather that in csound "=" may act like "==" in such evalation cases.)

Art Hunkins

----- Original Message ----- From: "Steven Yi" <stevenyi@gmail.com>
To: <csound@lists.bath.ac.uk>
Sent: Wednesday, August 27, 2008 12:24 PM
Subject: [Csnd] Re: Help Request: Excessive CPU Usage



HI Art,

I didn't get to take a deep look, butr shouldn't the code read:

$DEPTH == 0

and

p1 == 1

?

steven

On Wed, Aug 27, 2008 at 9:20 AM, Art Hunkins <abhunkin@uncg.edu> wrote:
I've a problem with the .csd below. The $DEPTH macro (0 or 1) either routes
output additionally through a global reverb (i17, reverbsc) or not. CPU
usage with $DEPTH = 0 (no reverb) is 20%; with reverb ($DEPTH = 1) it is a
whopping 80% (with occasional audio breakup). This is far too much of a
"reverb premium" - even processing 15 voices.

A comparable .csd, which does the same with 7 (also always on) voices uses
15% CPU without reverb, 20% with reverb. This is the kind of premium (33%)
that I expect.

Question: what is causing the excessive CPU usage below when $DEPTH = 1?

The issue is crucial because this is one of a series of .csd's I intend to
convert to Activities soon for the OLPC project.

Incidentally, you can run this without MIDI controller as long as at least
one MIDI input device is in your system. All voices are active at all times,
so CPU usage is constant.

Thanks for any and all insight.

Art Hunkins


; ON THE SIXTH DAY: Family (2008) for realtime Csound5 - by Arthur B.
Hunkins
; Sixth-Fam.csd - requires MIDI device with 16 pots/sliders

<CsoundSynthesizer>
<CsOptions>

-odac0 -m0d -M0 --expression-opt -b128 -B2048 -+raw_controller_mode=1

</CsOptions>
<CsInstruments>

#define CHAN #1# ; 0 = CC7, CHAN 1-16
#define CTRL1 #20# ; bank 1 - 1st # (of 8); valid = 0 - 120
#define CTRL2 #28# ; bank 2 - 1st # (of 8); valid = 0 - 120
#define DEPTH #0# ; 1 = depth; 0 = no depth
#define SRATE #44100# ; SampleRATE choices: 44100, 48000

sr      = $SRATE
ksmps   = 10
nchnls  = 2

     seed 0

ga1     init 0
ga2     init 0
gkpan   init .5
gkperc  init 0

instr 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

     if $DEPTH = 0 goto skip
     event_i "i", 17, 0, 3600
skip:
indx    =          p1 - 1
imult   tab_i      indx, 3
imult   =          imult * 55
ictrl   =          (p1 > 8? $CTRL2 + indx - 8: $CTRL1 + indx)
kamp2   ctrl7      ($CHAN > 0? $CHAN: indx + 1), ($CHAN > 0? ictrl: 7), 0, 1
kamp    table      kamp2 * 512, 1
kamp    port       kamp, .01
kmod2   rspline    1.4, 2, 1.5, 2.5
kmod    rspline    (p1 > 1? .85: .89), 1, 25, 30
kfreq   jspline    (p1 > 12? .2: .25), 1, 2
kpw     jspline    p7, 1, 2
kfmod   lfo        p4, imult
aout    vco2       p4 * kamp * kmod * kmod2, imult + (p1 > 1? kfreq: 0) +
(p1 > 12? kfmod: 0), p5, p6 + kpw
ktrig   trigger    kamp2, .01, 0
     if ktrig == 0 goto skip2
krand   rnd31      .5, .7
krand   =          (p1 > 1? krand: 0)
     if ($DEPTH = 0) || (p1 = 1) goto skip2
kdepth  unirand    .9
kdepth  =          (p1 > 1? kdepth: 0)
skip2:
a1,a2,a3,a4 pan aout, .5 + (kamp2 * krand), 1, 2, 1
     if ($DEPTH = 0) || (p1 = 1) goto skip3
ga1     =          ga1 + (a1 * kdepth)
ga2     =          ga2 + (a2 * kdepth)
a1a     =          a1 * (1 - kdepth)
a2a     =          a2 * (1 - kdepth)
     outs       a1a - (.2 * a2a), a2a - (.2 * a1a)
     goto fin
skip3:
     outs       a1 - (.2 * a2), a2 - (.2 * a1)

fin:    endin

     instr 17

aL, aR  reverbsc   ga1, ga2, .95, 800, sr, .25
     outs       aL * .4, aR * .4

ga1     =    0
ga2     =    0

     endin

</CsInstruments>

<CsScore>

f1 0 512 16 1 511 2.2 1000
f2 0 8193 7 0 8193 1
f3 0 16 -2 1 2 3 5 7 8 9 10 1 2 3 4 5 6 7 8
i1 0 3600 3000 4 .5 .015 0
i2 0 3600 1700 4 .6 .02 0
i3 0 3600 1600 4 .7 .02 0
i4 0 3600 1200 4 .8 .017 0
i5 0 3600 700 4 .9 .014 0
i6 0 3600 700 4 .95 .01 0
i7 0 3600 400 2 .5 .02 0
i8 0 3600 400 2 .6 .02 0
i9 0 3600 750 2 .7 .02 0
i10 0 3600 950 2 .8 .02 0
i11 0 3600 950 2 .9 .017 0
i12 0 3600 1000 2 .95 .014 0
i13 0 3600 1500 4 .6 .02
i14 0 3600 1500 4 .7 .02
i15 0 3600 1300 4 .8 .02
i16 0 3600 1450 4 .9 .02

e

</CsScore>
</CsoundSynthesizer>


Send bugs reports to this list.
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe
csound"



Send bugs reports to this list.
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"



Send bugs reports to this list.
To unsubscribe, send email sympa@lists.bath.ac.uk with body "unsubscribe csound"



--


Andrés