[PD] why does PD round numbers? (in tables, in messageboxes, etc)
Miller Puckette
msp at ucsd.edu
Tue Apr 10 19:31:18 CEST 2012
Hi all -
It's a wierd thing abut TK that drawing polygons is far more efficient
than drawing arrays of points; "polygons" are primitive objects that
are apparently optimized internally to TK whereas arrays of points have
to be drawn one by one (TK thinks they're each a separate object).
cheers
Miller
On Tue, Apr 10, 2012 at 07:24:31PM +0200, katja wrote:
> Thanks for your tips, Jonathan. Anyway, while you were writing the
> mail I was already doing a test patch where update times of a 32
> million samples array and table are tested, see attached.
>
> I ran the test with Pd-extended 0.43.1 and Pd-double on OSX. For an
> array with that length, update takes ~3 seconds. For a table displayed
> graphically, ~3.1 seconds. Surprisingly, drawing as points (instead of
> polygon) takes almost 5 seconds. The deviation between repeated
> measurements, a few dozen milliseconds, was about as large as the
> difference between Pd-extended and Pd-double. I've verified that
> double precision numbers are indeed displayed with a maximum of 14
> significant digits in Pd-double.
>
> I also checked the time for writing 32 million samples to a table
> without graphical display. This took ~170 milliseconds for Pd-extended
> and ~ 220 milliseconds for Pd-double.
>
> Later I'll do another test where transmission over network is more
> specifically tested.
>
> Katja
>
>
>
> On Tue, Apr 10, 2012 at 7:05 PM, Jonathan Wilkes <jancsika at yahoo.com> wrote:
> > ----- Original Message -----
> >
> >> From: katja <katjavetter at gmail.com>
> >> To: pd-list at iem.at
> >> Cc:
> >> Sent: Tuesday, April 10, 2012 9:45 AM
> >> Subject: Re: [PD] why does PD round numbers? (in tables, in messageboxes, etc)
> >>
> >> 2012/4/10 IOhannes m zmölnig <zmoelnig at iem.at>:
> >>> On 04/10/12 10:33, katja wrote:
> >>
> >>> i was talking about pd/pd-gui communication (and keep the number format for
> >>> both saving and pd/gui communication the same).
> >>> when displaying/updating a table every single number is converted to text
> >>> using printf, send over the wire and then converted back to a number for
> >>> drawing the table.
> >>> it makes a difference if you have to transmit 44100
> >>> *4 bytes or 44100*12 bytes.
> >>
> >> Ah I see. It is not uncommon to display complete audio files, much
> >> more than 44100 samples.
> >
> > I've never seen a patch that _displays_ all the data for an array that large. To
> >
> > transmit 44,100 drawing instructions you need a _canvas_ size of "44100" and
> >
> > if anyone has actually needed to do that in a patch I'd really like to see it.
> >
> >
> >> So all these samples are converted to text
> >> and back to numbers, as they go over the network?
> >
> > No. See plot_vis inside g_template.c. There is not a 1-to-1 correspondence between
> > # of array elements and rectangles/polygon-coords on the tk canvas (at least for
> > garrays, not sure about data structures). If you create a 44100 element array
> > and make the "size" field in that arrays canvas dialog "2", Pd will only send
> > data to the gui for those 2 pixels, not for the entire array. However, it will loop
> > through the entire array on the c side _every_ time plot_vis is called, in order to
> > figure out what info should be sent to the gui.
> >
> > For example: running with -d 3, create an array with 10,000,000 elements.
> > Now make the "size" field in its canvas dialog "2".
> > Select the array.
> > Click an array key to move it.
> > Notice the lag, but also notice Pd is only sending two commands to the gui to
> > draw the elements.
> > It's because Pd must loop through 5,000,000 elements before it hits the next pixel
> > where it needs to send another drawing instruction to the gui!
> >
> >> (While in the end,
> >> only a couple hundred values are displayed). And every character goes
> >> through the loop in binbuf_text() with all it's cases... well that is
> >> a bottleneck which should not be further aggravated.
> >> At least this
> >> performance issue can be quickly tested, using Pd vs Pd-double. I'll
> >> make a test patch for that.
> >
> > Keep in mind that you're using a horribly implemented feature of Pd to do your
> > test-- that is, if you're using garrays. For example, moving an array shouldn't
> >
> > send _any_ element data to the gui. It doesn't in Pd-l2ork because it just moves
> >
> > everything by tag, using one line of tk, thus there is no bottleneck in that case.
> >
> > A practical test I can think of to compare 4byte vs 12byte payload is
> >
> > something like [metro 100]--[tabwrite~] animation for a visible garray. I'd be
> >
> > curious to know if there is a significant performance difference there.
> >
> >
> > -Jonathan
> >
> >
> >>
> >> Katja
> >>
> >> _______________________________________________
> >> Pd-list at iem.at mailing list
> >> UNSUBSCRIBE and account-management ->
> >> http://lists.puredata.info/listinfo/pd-list
> >>
> >
> _______________________________________________
> Pd-list at iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
More information about the Pd-list
mailing list