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
- Follow-Ups:
- Re: Compilation: Avoiding inlining
- From: Oliver Ruebenkoenig <ruebenko@wolfram.com>
- Re: Compilation: Avoiding inlining
- References:
- Re: Compilation: Avoiding inlining
- From: DmitryG <einschlag@gmail.com>
- Re: Compilation: Avoiding inlining