MathGroup Archive 1997

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Version 3.0 Speed

  • To: mathgroup at smc.vnet.net
  • Subject: [mg7426] Re: [mg7408] Version 3.0 Speed
  • From: David Withoff <withoff>
  • Date: Sat, 31 May 1997 15:07:53 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

> Hello folks,
> 
> Define
> 
> v[x_, y_, nmax_] :=
>   ((4/Pi) Sum[(1/(2 m - 1)) Sin[(2 m - 1) Pi y] Exp[-(2 m - 1) Pi x],
>               {m, 1, nmax}])
> 
> and evaluate
> 
> Plot3D[Evaluate[v[x, y, 400]], {x, 0, 1.3}, {y, 0, 1}, 
>        PlotRange -> {0, 1}, Boxed -> False,
>        ViewPoint -> {1.741, -2.565, 1.356},
>        PlotPoints -> 27, BoxRatios -> {1, 1, 1},
>        AxesLabel -> {"x (b)", "y (b)", "V (Vo)"}
>       ]//Timing
> 
> On a PowerMac 7500/100 with plenty of memory, Version 3.0 takes about 650
> seconds to generate the plot, whereas Version 2.2.2 takes only about 15
> seconds. Why is Version 3.0 so slow comparatively, by a factor of over 40?
> 
> Thanks a lot.
> 
> Patrick Tam

This difference is a result of a change in the way that CompiledFunction
handles overflow and underflow.  For example, in cases of machine
underflow, CompiledFunction gives zero in Version 2.2:

In[1]:= f = Compile[{x}, Exp[x]]     

Out[1]= CompiledFunction[{x}, Exp[x], -CompiledCode-]

In[2]:= f[-100000.]

Out[2]= 0.

but in Version 3.0 it switches to uncompiled evaluation:

In[1]:= f = Compile[{x}, Exp[x]]     

Out[1]= CompiledFunction[{x}, Exp[x], -CompiledCode-]

In[2]:= f[-100000.]

CompiledFunction::cfn: 
   Numerical error encountered at instruction 3; proceeding with uncompiled
     evaluation.

                      -43430
Out[2]= 3.562949565 10

The compiler is called automatically from Plot3D.  Compiled evaluation
is faster for this example than uncompiled evaluation.  Many of the terms
in v[x, y, 400] generate machine underflow within the range of the plot.
Version 2.2 just replaces these terms with zero and continues with compiled
evaluation, which is often wrong, but which is probably ok in this example.
Version 3.0 is more careful, and switches to uncompiled evaluation when it
detects underflow, but that extra care has the unfortunate side effect of
making this calculation slower.  Getting reliable answers is nice, but
getting answers quickly is also nice.  Maybe in some future version of
Mathematica there will be a way to get the best of both designs.

Dave Withoff
Wolfram Research


  • Prev by Date: Re: Dashed GridLines appear impossible
  • Next by Date: Re: List manipulation
  • Previous by thread: Re: [Q] Approximating polynomials w/several variables
  • Next by thread: A Physicist's Guide to Mathematica