@@ -127,29 +127,22 @@ inv(m4) # Take advantage of specialized fast methods
127
127
128
128
## Approach
129
129
130
- Primarily, the package provides methods for common ` AbstractArray ` functions,
131
- specialized for (potentially immutable) statically sized arrays. Many of
132
- Julia's built-in method definitions inherently assume mutability, and further
130
+ The package provides an range of different useful built-in ` StaticArray ` types,
131
+ which include mutable and immutable arrays based upon tuples, arrays based upon
132
+ structs, and wrappers of ` Array ` . There is a relatively simple interface for
133
+ creating your own, custom ` StaticArray ` types, too.
134
+
135
+ This package also provides methods for a wide range of ` AbstractArray ` functions,
136
+ specialized for (potentially immutable) ` StaticArray ` s. Many of Julia's
137
+ built-in method definitions inherently assume mutability, and further
133
138
performance optimizations may be made when the size of the array is know to the
134
- compiler (by loop unrolling, for instance).
135
-
136
- At the lowest level, ` getindex ` on statically sized arrays will call ` getfield `
137
- on types or tuples, and in this package ` StaticArray ` s are limited to
138
- ` LinearFast() ` access patterns with 1-based indexing. What this means is that
139
- all ` StaticArray ` s support linear indexing into a dense, column-based storage
140
- format. By simply defining ` size(::Type{T}) ` and ` getindex(::T, ::Integer) ` ,
141
- the ` StaticArray ` interface will look after multi-dimensional indexing,
142
- ` map ` /` map! ` , ` reduce ` , ` broadcast ` /` broadcast! ` , matrix multiplication and a
143
- variety of other operations.
144
-
145
- Finally, since ` StaticArrays <: DenseArray ` , many methods such as ` sqrtm ` ,
146
- ` eig ` , ` chol ` , and more are already defined in ` Base ` . Fast, specialized methods
147
- for ` det ` , ` inv ` , ` eig ` and ` chol ` are provided for square matrices up to 3×3.
148
- Meanwhile, conversion to pointers let us interact with LAPACK and similar C/Fortran libraries through
149
- the existing ` StridedArray ` interface. In some instances mutable ` StaticArray ` s
150
- (` MVector ` or ` MMatrix ` ) will be returned, while in other cases the definitions
151
- fall back to ` Array ` . This approach gives us maximal versatility now while
152
- retaining the ability to implement more fast specializations in the future.
139
+ compiler. One example of this is by loop unrolling, which has a substantial
140
+ effect on small arrays and tends to automatically triger LLVM's SIMD
141
+ optimizations. Another way performance is boosted is by providing specialized
142
+ methods for ` det ` , ` inv ` , ` eig ` and ` chol ` where the algorithm depends on the
143
+ precise dimensions of the input. In combination with intelligent fallbacks to
144
+ the methods in Base, we seek to provide a comprehensive support for statically
145
+ sized arrays, large or small, that hopefully "just works".
153
146
154
147
## API Details
155
148
### Indexing
0 commit comments