ArrayLayouts.jl
ArrayLayouts.jl copied to clipboard
Memory allocation with `copyto!` in some circumstances
I notice that copyto!
sometimes allocates. I guess this could be avoided by simply adding @inline
in front of the copyto!
s?
Here is an example with BlockArrays:
using BenchmarkTools
using BlockArrays
dest = rand(4, 4)
src = BlockMatrix(rand(4, 4), [2, 2], [2, 2])
@btime copyto!($dest, $src)
Staring from a fresh Julia session, the above results in one allocation:
julia> @btime copyto!($dest, $src)
87.933 ns (1 allocation: 48 bytes)
There is no allocation if I do the following, which is exactly what copyto!
does:
using ArrayLayouts: MemoryLayout, _copyto!
@btime _copyto!(MemoryLayout($dest), MemoryLayout($src), $dest, $src)
julia> @btime _copyto!(MemoryLayout($dest), MemoryLayout($src), $dest, $src)
73.099 ns (0 allocations: 0 bytes)