Re: Compile lesson
- To: mathgroup@smc.vnet.net
- Subject: [mg12368] Re: [mg12308] Compile lesson
- From: Ahmed Maarouf <maarouf@student.physics.upenn.edu>
- Date: Sun, 10 May 1998 02:04:51 -0400
- References: <199805072251.SAA00969@smc.vnet.net.>
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
- References:
- Compile lesson
- From: Ersek_Ted%PAX1A@mr.nawcad.navy.mil
- Compile lesson