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