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>
- Re: Compilation: Avoiding inlining