MathGroup Archive 2011

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

Search the Archive

Re: Compilation: Avoiding inlining

  • To: mathgroup at smc.vnet.net
  • Subject: [mg121458] Re: Compilation: Avoiding inlining
  • From: DmitryG <einschlag at gmail.com>
  • Date: Fri, 16 Sep 2011 05:46:10 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <j4se88$so6$1@smc.vnet.net>

Here is a program with (* Definition of the equations *) made one-
step, that performs the same as in my previous post:

**************************************************************************

(* Runge-Kutta-4 routine *)
makeCompRK[fIn_] :=
  With[{f = fIn},
   Compile[{{x0, _Real,
      1}, {t0, _Real}, {tMax, _Real}, {n, _Integer}},
    Module[{h, K1, K2, K3, K4, SolList, x = x0, t},
     h = (tMax - t0)/n;
     SolList = Table[x0, {n + 1}];
     Do[t = t0 + k h;
      K1 = h f[t, x];
      K2 = h f[t + (1/2) h, x + (1/2) K1];
      K3 = h f[t + (1/2) h, x + (1/2) K2];
      K4 = h f[t + h, x + K3];
      x = x + (1/6) K1 + (1/3) K2 + (1/3) K3 + (1/6) K4;
      SolList[[k + 1]] = x

      , {k, 1, n}];
     SolList](*,CompilationTarget->"C"*)]];

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

(* Compilation *)
tt0 = AbsoluteTime[];
Timing[RK4Comp = makeCompRK[F];]
AbsoluteTime[] - tt0
Print[];

(* Setting parameters and Calculation *)
x0 = Table[ RandomReal[{0, 1}], {i, 1, NN}];   t0 = 0;    tMax =
200;   n = 500;
tt0 = AbsoluteTime[];
Sol = RK4Comp[x0, t0, tMax, n];
AbsoluteTime[] - tt0

Print["Compilation: ", Developer`PackedArrayQ@Sol]

(* Plotting time dependences *)

x1List = Table[{1. t0 + (tMax - t0) k/n, Sol[[k + 1, 1]]}, {k, 0,
n}];
x2List = Table[{1. t0 + (tMax - t0) k/n, Sol[[k + 1, 2]]}, {k, 0, n}];
x3List = Table[{1. t0 + (tMax - t0) k/n, Sol[[k + 1, 3]]}, {k, 0, n}];
ListLinePlot[{x1List, x2List, x3List}, PlotMarkers -> Automatic,
 PlotStyle -> {Blue, Green, Red}, PlotRange -> {0, 1}]

**********************************************************

As I understand, it is the command Evaluate that is responsible for
inlining, making the size of the compiled code grow with NN and
impossibility to compile in C. However, the program compiled with
Mathematica runs fast.

Removing Evaluate makes the compiled code small and independent of NN,
also compiling in C becomes possible. In this case, unfortunately, the
program runs slowly.

Dmitry




  • Prev by Date: Re: Coloring function
  • Next by Date: Re: AspectRatio unpredictable
  • Previous by thread: Re: Compilation: Avoiding inlining
  • Next by thread: Re: Compilation: Avoiding inlining