ANN: StaticArrays.jl v0.1.0

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

ANN: StaticArrays.jl v0.1.0

Andy Ferris
Hi all,

I would like to announce the upcoming v0.1.0 version of StaticArrays, which marks a certain point of maturity in this package. Bluntly put, the goal of StaticArrays is to improve performance over `Base.Array` for small arrays and when the size of an array is a (compile-time) constant. In this case, many optimizations can be made, including stack-allocating the container, unrolling loops and writing specialized algorithms for specific sizes (e.g. 3x3 eigendecomposition is much faster with a specialized algorithm than via LAPACK). A sample of speedups on 3x3 matrices of Float64 is:

Matrix multiplication            -> 8.2x speedup
Matrix multiplication (mutating) -> 3.1x speedup
Matrix addition                  -> 45x speedup
Matrix addition (mutating)       -> 5.1x speedup
Matrix determinant               -> 170x speedup
Matrix inverse                   -> 125x speedup
Matrix symmetric eigenvalue      -> 105x speedup
Matrix Cholesky decomposition    -> 23.6x speedup

There is a significant advantage in using statically sized array for 2D and 3D geometry and similar applications where the dimensionality is small and known in advance.

Julia has a rich history of fixed size array packages, including FixedSizeArrays.jl (originally for Julia v0.4) and ImmutableArrays.jl (originally for Julia v0.3). Discussions (including the worry that we would need yet another package for Julia v0.6!) have lead the StaticArrays repository to be moved to the JuliaArrays github organization, and a decision to move forward with this package. After discussions with Simon Danisch, we would like to recommend new users utilize StaticArrays, while existing users of FixedSizedArrays might consider porting over to StaticArrays sometime during the life-cycle of Julia v0.5 (of course both FixedSizeArrays and ImmutableArrays remain fully functional). Advantages include compatibility with and subtyping of `AbstractArray`, and wide range of provided array types, and some measurable but modest speed improvements.

Kind regards,
Andy Ferris

PS - I would love to see an announcements page on Discourse!