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