Skip to content

Commit e007d7c

Browse files
author
Andy Ferris
committed
More updates to README
1 parent 5beb45f commit e007d7c

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

README.md

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -127,29 +127,22 @@ inv(m4) # Take advantage of specialized fast methods
127127

128128
## Approach
129129

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
133138
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".
153146

154147
## API Details
155148
### Indexing

0 commit comments

Comments
 (0)