Re: Compilation: Avoiding inlining

*To*: mathgroup at smc.vnet.net*Subject*: [mg121561] Re: Compilation: Avoiding inlining*From*: Oliver Ruebenkoenig <ruebenko at wolfram.com>*Date*: Tue, 20 Sep 2011 06:07:52 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <201109191106.HAA19637@smc.vnet.net>

On Mon, 19 Sep 2011, DmitryG wrote: > 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 You can even generate code that is faster than C; in certain problems you can exploit Mathmatica's symbolic properties. > too many variants to define the functions in the RHS of the ODE's and That is due to the fact that many ways lead to Rome. Because Mathematica has a vast reservoir to express ideas you have to understand well which road you chose. > the speeds are very different. So far there is absolutely no advantage > of C over Mathematica's own compiler. Of all variants, inlining the I do not see how that conclusion can be derived from the above. Also, I have shown in last post, how compilation to "C" increases speed once more; and I think further speed improvements in the code are possible too. You can write very inefficient c code, too. > code (that is a bad way of programming) leads to fastest execution. > Why is inlining bad. Is the inlining of code that a c compiler does bad? The point is that it is generated code. > I still hope that Wolfram will come up with the optimal way to solve Could you outline what such an optimal way would look like for you? > generic non-vectorizable systems of ODE's with compilation, this can > be done one time for the whole future life. Also, if you have working C code, that seems to do what you want in the way you want, why do you not just link that into Mathematica? So, what are the timings for your c code? > > Dmitry > > Oliver

**References**:**Re: Compilation: Avoiding inlining***From:*DmitryG <einschlag@gmail.com>