MathGroup Archive 1998

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

Search the Archive

Re: Compile lesson



Ersek_Ted%PAX1A@mr.nawcad.navy.mil wrote:

> Way back on 24 April 1997 Dave Withoff debugged some Compile code a
> user
> sent to the mathgroup.  Before Dave debugged the code it ran slower
> than  normal Mathematica code.  Dave explained that you should try to
> get nothing  but a list of pseudocode instructions in the compiled
> function.
>
> More precisely, if you say
> In[1]:=   funct=Compile[{vars},  blah; blah; blah ] Then you should be
>
> able to do:
> In[2]:=  funct[[3]]
> and get a list of lists, where each of the sublists are all integers.
>
> As I understand it your compiled function will execute quickly as long
>
> as  can be converted to all psuedocode instructions.  Function "demo1"
>
> below is  an example of a function that was compiled into 100%
> pseudocode  instructions.  This is good.
>
> In[1]:=
> demo1=Compile[{x},Module[{y=0.0},
>    If[x<0,y=2*x;];
>    y+5 ]];
> demo1[[3]]
>
> Out[1]=
> {{1,2},
> 4,1,0},{15,0.,1},{14,0,0},{24,0,2},{98,0,2,0},{90,0,6},{14,2,1},{24,
> 1,
>     3},{38,3,0,3},{20,3,1},{91,1},{14,5,1},{24,1,3},{34,1,3,3},{9,3}}
>
> ____________________________________
>
> The next line has the same problem as the function Dave debugged.  The
>
> If  statement will return a Real if (x<0), and return Null if (x>=0).
> The  compiler doesn't know what the If statement will return, so it
> isn't  translated into pseudocode.
>
> In[2]:=
> demo2=Compile[{x},Module[{y=0.0},
>    If[x<0,y=2*x];
>    y+5]];
> demo2[[3]]
>
> Out[2]=
> {{1,2},{4,1,0},{15,0.,1},{14,0,0},{24,0,2},{98,0,2,0},{31,
>     Function[{x},If[x<0,y=2
> x]],{y,3,0,1,Module},6,0,17},{14,5,1},{24,1,3},{
>     34,1,3,3},{9,3}}
>
> ________________________________________ The next function tries to
> change the value of the function's argument. This can't be done with
> pseudocode instructions, so standard Mathematica  code is used.
>
> In[3]:=
> demo3=Compile[{x}, If[x>10^20,x=10^20;];   ]; demo3[[3]]
>
> Out[3]=
> {{1, 2}, {4, 1, 0}, {14, 10, 0}, {37, 0, 0, 1},
>   {37, 1, 1, 1, 2}, {19, 2, 1}, {37, 1, 1, 1, 2},
>   {37, 0, 0, 2, 1}, {24, 1, 1}, {98, 1, 0, 0},
>   {90, 0, 3}, {31, Function[{x}, x = 10^20], 6, 0, 17},
>   {91, 1}, {12, 187}}
>
> ________________________________________ The next function tries to
> use
> a Global variable.  We can't do this either  with pseudocode
> instructions, so standard Mathematica code is used.
>
> In[4]:=
> num=10;
> demo4=Compile[{x},x+num];
> demo4[[3]]
>
> Out[4]=
> {{1,2},{4,1,0},{31,Function[{x},num],3,0,1},{34,0,1,1},{9,1}}
>
> ________________________________________ Any Mathematica function can
> be
> used inside compile, but there may be no  advantage in using Compile
> if
> some of the functions can't be translated into  pseudocode.  As
> demonstrated above your code may not translate into  pseudocode even
> if
> all the functions used are supported  by Compile.
>
> In the lines above I gave a few reasons why Compile may not be able to
>
> translate a function into pseudocode.  If any members of the group
> have
> other things to avoid inside Compile I would like to hear about them.
>
> Ted Ersek

  Actaully i do have a problem. When i try to include an "Eigenvalues"
function inside compile, it always returns something like "rank of
reult is different that tank of object". I do define my argument as a
rank 2 object, but still i failed to get a code which compiles a module
of eigenvalues calculation. Any help is greatly appreciated, even if
this help is "this cannot be done". Thanks in advance. Ahmed Maarouf




  • Prev by Date: Re: Mathematica 3.0 Palette for Physics SI Fundamental Constants
  • Next by Date: Re: Some basic Help
  • Prev by thread: Compile lesson
  • Next by thread: `Collect' with complex numbers??