I think this might be a problem with Julia 0.3. I see it on Julia 0.3, but not 
on the development branch for Julia 0.4.

 — John

On Dec 5, 2014, at 6:27 PM, Will Dobbie <[email protected]> wrote:

> Hi,
> 
> I have a program which copies elements between two arrays of immutables in a 
> tight loop. The sizes of the arrays never change. I've been struggling to get 
> it to avoid spending a large chunk of its time in the garbage collector. I 
> have an example of what I mean below.
> 
> With arrays of Int64 I get:
> elapsed time: 0.164429425 seconds (0 bytes allocated)
> 
> With arrays of an immutable the same size as Int64 I get:
> elapsed time: 1.421834146 seconds (320000000 bytes allocated, 15.97% gc time)
> 
> My understanding was arrays of immutables should behave like arrays of 
> structs in C and not require heap allocation. Is there a way I can achieve 
> that? I'm using Julia 0.3.3.
> 
> Thanks,
> Will
> 
> 
> 
> module immtest
> 
> immutable Vec2
>       x::Float32
>       y::Float32
> end
> 
> # typealias element_type Vec2         # Results in allocation in the loop 
> below
> typealias element_type Int64          # Does not cause allocation
> 
> function runtest(reps)
>       dst = resize!(element_type[], 100_000)
>       src = resize!(element_type[], 10)
> 
>       @time begin
>               for i=1:reps
>                       copy!(dst, 1000, src, 1, length(src))
>                       # dst[1000:1009] = src          # same performance as 
> above
>               end
>       end
> end
> 
> runtest(10_000_000)
> 
> end
> 

Reply via email to