Since last week I have my own Linux 64 bit machine. One of the first
issues with Pd-extended on this machine was a strongly increased CPU
load when audio input is temporarily shut off from parts of my patch.
Subnormals! After three hours of puzzling I identified at least one
offender: [cyclone/svf~].

Sorry that most of my posts to this list seem to be about subnormals.
That's quite boring. But they're seriously hogging my CPU time like a
swarm of grasshoppers. As I got this 64 bit machine so recently I
don't know if the issue with [cyclone/svf~] exists in earlier Pd-E
versions. Also, I can not understand why it happens, because the
object is protected against subnormals with function PD_BIGORSMALL().
This works well on all my other systems. Moreover, it works well for
other feedback delay objects like [lop~] on Linux 64 bit.

I'd like to know if anyone can confirm the issue. I was planning to do
my own state variable filter anyway, but it would be nice to have a
working [cyclone/svf~] as well. Check the object with attached patch
if you can. To be specific, I have the issue with Pd-E 0.43.4 for
Debian Squeeze amd64 from nightly builds. The i386 build is not
affected.

Katja
#N canvas 127 299 620 382 10;
#X symbolatom 18 351 72 0 0 0 - - -;
#X obj 18 323 makefilename %.70f;
#N canvas 0 50 190 245 nan 0;
#X obj 45 17 inlet;
#X obj 46 173 outlet;
#X obj 45 74 t b f;
#X msg 46 96 2;
#X obj 46 143 * 0;
#X obj 46 118 pow 1024;
#X msg 45 49 1024;
#X connect 0 0 6 0;
#X connect 2 0 3 0;
#X connect 2 1 5 1;
#X connect 3 0 5 0;
#X connect 4 0 1 0;
#X connect 5 0 4 0;
#X connect 6 0 2 0;
#X restore 18 44 pd nan;
#X obj 18 20 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#N canvas 0 50 168 259 inf 0;
#X obj 45 17 inlet;
#X obj 46 173 outlet;
#X obj 45 74 t b f;
#X msg 46 96 2;
#X obj 46 118 pow 1024;
#X msg 45 49 1024;
#X connect 0 0 5 0;
#X connect 2 0 3 0;
#X connect 2 1 4 1;
#X connect 3 0 4 0;
#X connect 4 0 1 0;
#X connect 5 0 2 0;
#X restore 71 44 pd inf;
#X obj 71 20 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X floatatom 18 181 8 0 0 0 - - -;
#X msg 72 114 1;
#X msg 72 84 0;
#X msg 113 108 \; pd dsp 1;
#X msg 113 147 \; pd dsp 0;
#X obj 113 85 loadbang;
#N canvas 0 50 200 224 unsig~ 0;
#X obj 32 40 inlet~;
#X obj 32 122 snapshot~;
#X obj 61 89 metro 200;
#X obj 61 62 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
;
#X obj 32 153 outlet;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X restore 18 266 pd unsig~;
#X floatatom 18 296 17 0 0 0 - - -;
#X text 183 133 Small floats which can't be expressed with the bits
of the datatype are also denormal \, more specifically: subnormal.
Computations with subnormal numbers are still possible \, but very
CPU intensive. Test: click 1 first \, then 0 to see how small the numbers
become. If all is OK \, numbers smaller than ~1e-19 are flushed to
zero. If not OK \, numbers smaller than 1e-39 are seen. These are subnormals.
Check CPU load difference. It is always possible to recover from subnormals
by sending a normal number (like 1) in.;
#X text 184 320 Katja Vetter Jan 2013;
#X text 183 18 NaN and inf are denormal numbers. When inf or nan starts
recirculating in a feedback delay line \, the object can't do further
calculations \, even if the input goes back to normal. Therefore Pd
must avoid writing nan or inf into a feedback delay line. Test: click
nan or inf first \, and 1 thereafter. If all is OK \, the output returns
to normal. If not OK \, inf or nan will stay at the output and the
patch must be reloaded to recover.;
#X obj 18 229 svf~ 1;
#N canvas 311 334 476 347 lop 0;
#N canvas 0 50 190 245 nan 0;
#X obj 45 17 inlet;
#X obj 46 173 outlet;
#X obj 45 74 t b f;
#X msg 46 96 2;
#X obj 46 143 * 0;
#X obj 46 118 pow 1024;
#X msg 45 49 1024;
#X connect 0 0 6 0;
#X connect 2 0 3 0;
#X connect 2 1 5 1;
#X connect 3 0 5 0;
#X connect 4 0 1 0;
#X connect 5 0 4 0;
#X connect 6 0 2 0;
#X restore 28 54 pd nan;
#X obj 28 30 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#N canvas 0 50 168 259 inf 0;
#X obj 45 17 inlet;
#X obj 46 173 outlet;
#X obj 45 74 t b f;
#X msg 46 96 2;
#X obj 46 118 pow 1024;
#X msg 45 49 1024;
#X connect 0 0 5 0;
#X connect 2 0 3 0;
#X connect 2 1 4 1;
#X connect 3 0 4 0;
#X connect 4 0 1 0;
#X connect 5 0 2 0;
#X restore 81 54 pd inf;
#X obj 81 30 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X floatatom 28 191 8 0 0 0 - - -;
#X msg 82 124 1;
#X msg 82 94 0;
#N canvas 0 50 200 224 unsig~ 0;
#X obj 32 40 inlet~;
#X obj 32 122 snapshot~;
#X obj 61 89 metro 200;
#X obj 61 62 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
;
#X obj 32 153 outlet;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X restore 28 276 pd unsig~;
#X floatatom 28 306 17 0 0 0 - - -;
#X obj 82 215 hsl 100 15 0 200 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 2800 0;
#X floatatom 92 240 5 0 0 0 - - -;
#X obj 28 239 lop~;
#X text 167 27 [lop~] is also protected with PD_BIGORSMALL().;
#X connect 0 0 4 0;
#X connect 1 0 0 0;
#X connect 2 0 4 0;
#X connect 3 0 2 0;
#X connect 4 0 11 0;
#X connect 5 0 4 0;
#X connect 6 0 4 0;
#X connect 7 0 8 0;
#X connect 9 0 10 0;
#X connect 9 0 11 1;
#X connect 11 0 7 0;
#X restore 466 312 pd lop;
#X text 183 261 IIR filters have internal feedback delay lines \, therefore
objects like [lop~] \, [hip~] and [biquad~] must be protected against
denormals. This is regularly done with macro or function PD_BIGORSMALL().
;
#X connect 1 0 0 0;
#X connect 2 0 6 0;
#X connect 3 0 2 0;
#X connect 4 0 6 0;
#X connect 5 0 4 0;
#X connect 6 0 17 0;
#X connect 7 0 6 0;
#X connect 8 0 6 0;
#X connect 11 0 9 0;
#X connect 12 0 13 0;
#X connect 13 0 1 0;
#X connect 17 0 12 0;
_______________________________________________
Pd-list@iem.at mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list

Reply via email to