This is largely a known issue: we don't specialize functions like sort on the 
values of function arguments. I'm not sure, however, why using a generic 
function is twice as slow as using an anonymous one, and I'm also not entirely 
sure why there's so much allocation.

> On Jul 3, 2014, at 1:43 PM, gentlebeldin <[email protected]> wrote:
> 
> I'm porting some of my programs (solutions of Project Euler problems, btw) 
> from Java to Julia, to check claims concerning performance. Don't you worry, 
> no spoilers, here. But there is a solution where I needed sorting. As long 
> that's sorting by natural order, that seems to work ok, and the Julia version 
> is almost (but not quite) as fast as the Java program. But as soon as I 
> introduce a transformation...
> Here are some results illustrating what I mean:
> 
> julia> a=rand(1000000)
> 1000000-element Array{Float64,1}:
>  ⋮        
> 
> julia> @elapsed sort(a)
> 0.20693414
> 
> julia> @elapsed sort(a,by=identity)
> 0.210779277
> 
> julia> @elapsed sort(a,by=x->x)
> 2.501326137
> 
> julia> f(x)=x
> f (generic function with 1 method)
> 
> julia> @elapsed sort(a,by=f)
> 5.012442935
> 
> julia> @allocated sort(a)
> 8000192
> 
> julia> @allocated sort(a,by=f)
> 1623226064
> 
> Any thoughts what eats up all that time, and all that memory?
> 

Reply via email to