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