Re: Slow Show/Graphics in v6.0

*To*: mathgroup at smc.vnet.net*Subject*: [mg80990] Re: Slow Show/Graphics in v6.0*From*: David Bailey <dave at Remove_Thisdbailey.co.uk>*Date*: Fri, 7 Sep 2007 02:05:31 -0400 (EDT)*References*: <fbljvd$qf5$1@smc.vnet.net>

Alex Shvydky wrote: > Hello, > > Just wanted to share my puzzlement (utter disappointment/ > frastration) with a ridiculously slow speed of Show/Graphics > routines in the v6.0 of Mathematica as compared to 5.2, > which to me at this point makes v6.0 plain unusable. > > Working with hydrodynamic simulations I need to > visualize the computational grid. So I wrote > simple Mathematica routines to draw a simulation grid. > In 5.2 they worked fabulously for the past couple of > years. > > Here's an example. > First, set up two 2dimensional x- and y-coordinate > arrays. > > Timing[ > mr = 350; > mt = 350; > xar = Table[((ir - 1.)/(mr - 1.))*Cos[Pi*((it - 1.)/(mt - 1.))], > {it, 1, mt}, {ir, 1, mr}]; > yar = Table[((ir - 1.)/(mr - 1.))*Sin[Pi*((it - 1.)/(mt - 1.))], > {it, 1, mt}, {ir, 1, mr}]; > ] > > In v6.0 it took > Out[3]= {2.312, Null} > In v5.2 it took > {0.281 Second, Null} > > Which is an order of magnitude difference, but hold on. > Now let's plot the mesh by simply constructing table > of edges of all the cells (I am aware that the algorithm > below is very unoptimized and can be made faster etc. etc. > It was not my intention to discuss here what should be the > fastest algorithm to plot a 2-d mesh, > nor was it my intention to debate the issue why one > would need to plot such a large mesh in the first place..., > but rather to compare the execution time for an IDENTICAL > code on v6.0 and v5.2. and get some confirmation/explanation > of such a suspiciously slow execution speed!).: > > Timing[ > Show[ > Graphics[{Hue[0.7], AbsoluteThickness[0.1], > Table[{Line[{{xar[[it,ir]], yar[[it,ir]]}, > {xar[[it,ir + 1]],yar[[it,ir + 1]]}, > {xar[[it + 1,ir + 1]], yar[[it + 1,ir + 1]]}, > {xar[[it + 1,ir]], yar[[it + 1,ir]]}}]}, > {ir, 1, mr - 1}, {it, 1, mt - 1}] > }], > PlotRange -> {{-1, 1}, {0, 1}}, AspectRatio -> 1/2, Axes -> True, > DisplayFunction -> $DisplayFunction, ImageSize -> 800]] > > While the timing as, it is returned by the Timing[] function, > is smaller in the v6.0: > {1.703, <Here goes the actual graphics>} > vs. > {2.094 Second, -Graphics-} > in v5.2 > > > The actual cell evaluation time in v.6.0 is 124.11 seconds > vs. 2.22 seconds in v 5.2. ???!!!!!!! > > Could anybody please confirm this. Also it would be helpful > if someone from Wolfram Research would explain if > that is intended (unavoidable) by design or maybe > a simple setting (which I am unaware of) or a future patch > will be able to fix it. > > Also, it is horribly slow to resize the above graphics > in v5.2 you just grab the corned and drag. In v6.0 you > must do it 10-100 times slower (is it possible > that I just have a very poor graphics card?). > > > Thanks, > Alex Shvydky > As an alternative to reverting to Mathematica 5.2, you could just use the 5.2 graphics: << Version5`Graphics` This seems to work well with your example. I have encountered something similar with some code that wrote a curve containing a very large number of points of varying hue. The core of the problem is that V6 graphics transfers the entire Graphics structure to the frontend(FE) for rendering. If that expression is excessively complicated, things get very slow. To be fair to WRI, I think in both your case and mine, there was really far more detail than would actually show - so the design decision to use the FE for rendering (which has a lot of other advantages) was not so bad. I solved my problem (without reverting to 5.2 graphics) by adding each point to a Raster object (in the kernel) and transferring that to the FE. Once I had remembered to pack the array (as Bret did in his modification of your code) the result was quite acceptable. David Bailey http://www.dbaileyconsultancy.co.uk