MathGroup Archive 2011

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

Search the Archive

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.
>>
> 
> 


  • Prev by Date: Re: Keeping it real
  • Next by Date: Re: Compile and Total
  • Previous by thread: Re: Compile and Total
  • Next by thread: Re: Compile and Total