-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Slicing an array produces Vector{<:SubArray}
, hence allocates
#55
Comments
It's in fact much larger, as you want Although I'm not sure this difference matters much. Anything which makes or consumers this many slices is likely to be much more expensive. This assumption is why this package makes a simple Do you have a real use in which this cost isn't negligible? Note also that type-stability tends to matter for anything downstream of call: julia> @code_warntype nestedview(A, 2)
...
Static Parameters
T = Float64
L = 3
Arguments
#self#::Core.Const(ArraysOfArrays.nestedview)
A::Array{Float64, 3}
M::Int64
Body::ArrayOfSimilarArrays{Float64, _A, _B, 3, Array{Float64, 3}} where {_A, _B}
...
julia> tc(A) = @cast res[k][i,j] := A[i,j,k];
julia> @code_warntype tc(A)
MethodInstance for tc(::Array{Float64, 3})
from tc(A) @ Main REPL[482]:1
Arguments
#self#::Core.Const(tc)
A::Array{Float64, 3}
Locals
...
Body::Vector{SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}} |
Maybe worth adding that for tiny arrays, there is also an option to make SMatrix slices, which will often be faster downstream. With perhaps slightly weird notation: julia> @btime @cast res[k][i,j] := $A[i,j,k];
min 21.833 μs, mean 78.062 μs (4 allocations, 468.81 KiB)
julia> @btime @cast res[k]{i,j} := $A[i,j,k]; # makes .SMatrix, not type-stable
min 1.288 μs, mean 1.494 μs (10 allocations, 432 bytes)
julia> @btime @cast res[k]{i:3, j:3} := $A[i,j,k]; # makes .SMatrix of indicated size
min 24.054 ns, mean 40.098 ns (2 allocations, 80 bytes) |
Well here is my use case:
which confusingly gives
so maybe I should just stay away from StructArrrays because I don't understand how its storing contiguous matrices. |
Thanks or the responses. I've edited the code snippet to give more context. |
Vector{<:SubArray}
, hence allocates
The text was updated successfully, but these errors were encountered: