Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

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

Search the Archive

Re: Compilation: Avoiding inlining

  • To: mathgroup at smc.vnet.net
  • Subject: [mg121553] Re: Compilation: Avoiding inlining
  • From: DmitryG <einschlag at gmail.com>
  • Date: Mon, 19 Sep 2011 07:06:54 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201109160946.FAA12301@smc.vnet.net> <j4vana$dal$1@smc.vnet.net> <j51str$pg4$1@smc.vnet.net>

On Sep 17, 6:31 am, DmitryG <einsch... at gmail.com> wrote:
> Hi Oliver,
>
> thank you for your response! I am interested now in the systems of
> equations that are non-vectorizable. By mistake, in my first post I
> have used a system of equations that can be vectorized and this turned
> the discussion away from the topic. But in my second post, I have a
> non-vectorizable system of equations.
>
> I have identified three ways to define the system of equations. Below
> are the results with Mathematica compilation.
>
> 1)
> (* Definition of the equations *)
> NN = 1000;
> F = Function[{t, x}, Table[ -x[[i]] Sin[0.1 t]^2/(1 +100 Sum[x[[i +
> j]], {j, 1, Min[3, NN - i]}]^2), {i, 1, NN}]];
>
> >> Evaluation time 24.4983979 - slow execution.   No inlining. Compiled code 189 lines independently of NN. Compilation in C gives practically the same speed
>
> 2)
> (* Definition of the equations *)
> NN = 1000;
> F = Function[{t, x}, Table[ Unevaluated[-x[[i]] Sin[0.1 t]^2/(1 +100
> Sum[x[[i + j]], {j, 1, Min[3, NN - i]}]^2)], {i, 1, NN}]];
>
> >> Evaluation time 4.7582721.   No inlining. Compiled code 93 lines independently of NN.  Compilation in C gives practically the same speed
>
> 3)
> (* Definition of the equations *)
> NN = 1000;
> F = Function[{t, x}, Evaluate[Table[ -x[[i]] Sin[0.1 t]^2/(1 +100
> Sum[x[[i + j]], {j, 1, Min[3, NN - i]}]^2), {i, 1, NN}]]];
>
> >> Evaluation time 1.0680555 - fastest execution.   Here we have inlining of the code, the size of the compiled code increases with NN. Compilation in C is impossible.
>
> One can see that there are many different ways with very different
> results, and it is very important to find the best one - more
> important than to buy a faster computer;-))
>
> Does in make sense to introduce F as a compiled function, as you have
> done in your response? We already make compilation of the RK-4
> procedure with F injected into it.
>
> Best,
>
> Dmitry

One more way to define the equations:

4)
(* Definition of the equations *)
NN = 1000;
F = Function[{t, x}, Table[ -x[[i]] Sin[0.1 t]^2/(1 +100
Evaluate[Sum[x[[i +
j]], {j, 1, Min[3, NN - i]}]]^2), {i, 1, NN}]];

>> Evaluation time 89.35 - slowest execution!.   No inlining. Compiled code 145 lines independently of NN. Compilation in C gives practically the same speed

In all the programs above make n=500 steps.

To summarize, although, theoretically, with compilation in C
Mathematica has to be as fast as C, practically it is not. There are
too many variants to define the functions in the RHS of the ODE's and
the speeds are very different. So far there is absolutely no advantage
of C over Mathematica's own compiler. Of all variants, inlining the
code (that is a bad way of programming) leads to fastest execution.

I still hope that Wolfram will come up with the optimal way to solve
generic non-vectorizable systems of ODE's with compilation, this can
be done one time for the whole future life.

Dmitry




  • Prev by Date: Re: Eliminate works but Solve does not?
  • Next by Date: Re: Compilation: Avoiding inlining
  • Previous by thread: Re: Compilation: Avoiding inlining
  • Next by thread: Re: Compilation: Avoiding inlining