Re: Compile and Total
- To: mathgroup at smc.vnet.net
- Subject: [mg120280] Re: Compile and Total
- From: Yves Klett <yves.klett at googlemail.com>
- Date: Sat, 16 Jul 2011 05:42:32 -0400 (EDT)
- References: <201107150120.VAA23682@smc.vnet.net> <ivosnc$q79$1@smc.vnet.net>
I wonder if in general a message/warning about MainEvaluate-calls should be issued. Regards, Yves Am 15.07.2011 10:11, schrieb DrMajorBob: > Mathematica isn't compiling EITHER of your user functions, error message > or not. Both functions are SetDelayed and Compile has Attribute HoldAll, > hence Compile knows zero, zip, nada about g and h. > > Compile does replace Total with a compiled version: > > << CompiledFunctionTools` > > fC = Compile[{{x, _Real, 1}}, Total[x]]; > CompilePrint@fC > > " > 1 argument > 1 Integer register > 1 Real register > 1 Tensor register > Underflow checking off > Overflow checking off > Integer overflow checking on > RuntimeAttributes -> {} > > T(R1)0 = A1 > I0 = 4 > Result = R0 > > 1 R0 = TotalAll[ T(R1)0, I0]] > 2 Return > " > > For g, no such luck: > > g[x_] := Total[x] > gC = Compile[{{x, _Real, 1}}, g@x]; > CompilePrint@gC > > " > 1 argument > 2 Tensor registers > Underflow checking off > Overflow checking off > Integer overflow checking on > RuntimeAttributes -> {} > > T(R1)0 = A1 > Result = T(R1)1 > > 1 T(R1)1 = MainEvaluate[ Hold[g][ T(R1)0]] > 2 Return > " > > And for h (despite the lack of an error message): > > h[x_] := x/Total[x] > hC = Compile[{{x, _Real, 1}}, h[x], {{_Total, _Real}}]; > CompilePrint@hC > > " > 1 argument > 2 Tensor registers > Underflow checking off > Overflow checking off > Integer overflow checking on > RuntimeAttributes -> {} > > T(R1)0 = A1 > Result = T(R1)1 > > 1 T(R1)1 = MainEvaluate[ Hold[h][ T(R1)0]] > 2 Return > " > > Bobby > > On Thu, 14 Jul 2011 20:20:19 -0500, Neil Stewart > <neil.stewart at warwick.ac.uk> wrote: > >> Hello, >> >> I'm having some trouble using Compile[]. I've stripped my trouble down >> to a >> few basic examples. >> >> Compiling Total[x] works: >> >> data = Range[1, 10] >> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} >> >> fC = Compile[{{x, _Real, 1}}, Total[x]] >> CompiledFunction[{x}, Total[x], -Compiled Code-] >> >> fC[data] >> 55 >> >> But compiling a function g[x_]:=Total[x] does not: >> >> g[x_] := Total[x] >> gC = Compile[{{x, _Real, 1}}, g[x]] >> CompiledFunction[{x}, g[x], -Compiled Code-] >> >> gC[data] >> CompiledFunction::cfex: Could not complete external evaluation at >> instruction 1; proceeding with uncompiled evaluation. >> >> 55 >> >> Yet it is not something about my user function as h[x_] := x/Total[x] >> works: >> >> h[x_] := x/Total[x] >> hC = Compile[{{x, _Real, 1}}, h[x]] >> CompiledFunction[{x}, h[x], -Compiled Code-] >> >> hC[data] >> {0.0181818, 0.0363636, 0.0545455, 0.0727273, 0.0909091, 0.109091, >> 0.127273, 0.145455, 0.163636, 0.181818} >> >> It's not something about Total[] as I get the same results with >> Apply[Plus, >> x] instead. >> >> Any comments or insight will be extremely gratefully received. >> >> Best, >> Neil. >> > >
- References:
- Compile and Total
- From: Neil Stewart <neil.stewart@warwick.ac.uk>
- Compile and Total