template<typename TArrayExtents, typename TRecordDim, Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
struct llama::mapping::SoA< TArrayExtents, TRecordDim, TBlobs, TSubArrayAlignment, TLinearizeArrayIndexFunctor, PermuteFieldsSingleBlob >
Struct of array mapping. Used to create a View via allocView. We recommend to use multiple blobs when the array extents are dynamic and an aligned single blob version when they are static.
- Template Parameters
-
TBlobs | If OnePerField, every element of the record dimension is mapped to its own blob. |
TSubArrayAlignment | Only relevant when TBlobs == Single, ignored otherwise. If Align, aligns the sub arrays created within the single blob by inserting padding. If the array extents are dynamic, this may add some overhead to the mapping logic. |
TLinearizeArrayIndexFunctor | Defines how the array dimensions should be mapped into linear numbers and how big the linear domain gets. |
PermuteFieldsSingleBlob | Defines how the record dimension's fields should be permuted if Blobs is Single. See PermuteFieldsInOrder, PermuteFieldsIncreasingAlignment, PermuteFieldsDecreasingAlignment and PermuteFieldsMinimizePadding. |
Definition at line 46 of file SoA.hpp.
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
using llama::mapping::SoA< TArrayExtents, TRecordDim, TBlobs, TSubArrayAlignment, TLinearizeArrayIndexFunctor, PermuteFieldsSingleBlob >::Permuter = PermuteFieldsSingleBlob<FlatRecordDim<TRecordDim> > |
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
constexpr llama::mapping::SoA< TArrayExtents, TRecordDim, TBlobs, TSubArrayAlignment, TLinearizeArrayIndexFunctor, PermuteFieldsSingleBlob >::SoA |
( |
TArrayExtents |
extents, |
|
|
TRecordDim |
= {} |
|
) |
| |
|
inlineexplicitconstexpr |
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
template<std::size_t... RecordCoords>
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
template<std::size_t... RecordCoords>
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
constexpr auto llama::mapping::SoA< TArrayExtents, TRecordDim, TBlobs, TSubArrayAlignment, TLinearizeArrayIndexFunctor, PermuteFieldsSingleBlob >::blobSize |
( |
[[maybe_unused] ] size_type |
blobIndex | ) |
const -> size_type
|
|
inlineconstexpr |
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
constexpr Blobs llama::mapping::SoA< TArrayExtents, TRecordDim, TBlobs, TSubArrayAlignment, TLinearizeArrayIndexFunctor, PermuteFieldsSingleBlob >::blobs = TBlobs |
|
inlinestaticconstexpr |
template<typename TArrayExtents , typename TRecordDim , Blobs TBlobs = Blobs::OnePerField, SubArrayAlignment TSubArrayAlignment = TBlobs == Blobs::Single ? SubArrayAlignment::Align : SubArrayAlignment::Pack, typename TLinearizeArrayIndexFunctor = LinearizeArrayIndexRight, template< typename > typename PermuteFieldsSingleBlob = PermuteFieldsInOrder>
constexpr SubArrayAlignment llama::mapping::SoA< TArrayExtents, TRecordDim, TBlobs, TSubArrayAlignment, TLinearizeArrayIndexFunctor, PermuteFieldsSingleBlob >::subArrayAlignment = TSubArrayAlignment |
|
inlinestaticconstexpr |