Thanks. Cool ideas!

P

On Thursday, January 15, 2015 at 12:08:05 PM UTC-8, Mauro wrote:
>
> Have you read this recent thread and its examples? 
> https://groups.google.com/d/msg/julia-dev/JEiH96ofclY/_amm9Cah6YAJ 
>
> M 
>
> On Thu, 2015-01-15 at 20:50, Petr Krysl <[email protected] <javascript:>> 
> wrote: 
> > So the "call" syntax on a type works, but using the implementation 
> > referenced above, it is SLOW. 
> > 
> > # Slow, function callback 
> > function test1(f, n) 
> > summ=0 
> >     for i=1:n 
> >         summ=summ+f(i) 
> >     end 
> > return summ 
> > end 
> > 
> > g(i::Int)=i 
> > 
> > # Fast, hardwired function g() 
> > function test2(n) 
> > summ=0 
> >     for i=1:n 
> >         summ=summ+g(i) 
> >     end 
> > return summ 
> > end 
> > 
> > # Fast, using method defined for an object 
> > function test4{T}(o::T, n) 
> > summ=0 
> >     for i=1:n 
> >         summ=summ+get(o,i) 
> >     end 
> > return summ 
> > end 
> > 
> > type MyFun1 
> > end 
> > function get(o::MyFun1,i::Int) 
> >     return g(i) 
> > end 
> > 
> > # Slow, using "call" on a singleton 
> > type MyFun3 end 
> > call(::Type{MyFun3},i::Int)=g(i)::Int 
> > 
> > n=10002345; 
> > @time println("test1(g, n) = $( test1(g, n) )") 
> > @time println("test2(n) = $( test2(n) )") 
> > @time println("test4(MyFun1(), n) = $( test4(MyFun1(), n) )")   
> > @time println("test1(MyFun3, n) = $( test1(MyFun3, n) )") 
> > 
> > julia> include("fun.jl") 
> > test1(g, n) = 50023457750685 
> > elapsed time: 0.610016329 seconds (480173520 bytes allocated, 27.80% gc 
> > time) 
> > test2(n) = 50023457750685 
> > elapsed time: 0.003086749 seconds (75304 bytes allocated) 
> > test4(MyFun1(), n) = 50023457750685 
> > elapsed time: 0.004098207 seconds (90436 bytes allocated) 
> > test1(MyFun3, n) = 50023457750685 
> > elapsed time: 0.665630908 seconds (480184232 bytes allocated, 23.21% gc 
> > time) 
>
>

Reply via email to