Layouts
sdlt::layout namespace
Rather than having different container types for different data
layouts, the library uses the types from the layout namespace as a template
parameter to the n_container.
Available layouts are defined in the namespace layout and summarized
in table below.
Layout
| Description
|
---|---|
| Structure of Arrays: Each data member of
the Primitive will have its own N-dimensional array. The arrays are placed
back-to-back inside a contiguous buffer. Template parameter AlignOnColumnIndexT
identifies which column of the row dimension should be cache line aligned. The
AlignOnColumnIndexT of each row is cache line aligned.
|
| Structure of Arrays Per Row: Each data member of the
Primitive will have its own 1-dimensional array for the row dimension (Soa1d)
placed back to back. The AlignOnColumnIndexT of each row is cache line aligned.
Multiple of these Soa1d's are laid out sequentially to model the remaining
dimensions, effictively becoming an Array of Structures of Arrays where the SOA
where the size of the array is the row's extent. This can be particularly
efficient when the extent of the row can be fixed<NumberT>.
Note : If the size of the row isn't known at compile
time, consider adding an additional dimension that is fixed<Number> and
dividing the row up by that fixed<NumberT>.
|
| Array of Structures Accessed by Struct:
Primitives are laid out in native format back to back in memory and access
happens via structure or member access. Nested structures will drill down
through the structure members in a nested manner.
|
| Array of Structures Accessed by Stride:
Primitives are laid out in native format back to back in memory and accessed
through pointers to built in types with a stride to account for the size of the
Primitive. Can be useful if aos_by_struct doesn't vectorize.
|
Description
The classes are empty and only for specialization of containers for
denoted layouts.