SIMD-aware container for product types.
EVE provides various element to simplify the management of SIMD-compatible memory like functions and allocators for requesting SIMD-compatible block of memory, pointer wrapper to discriminate aligned memory from regular one, and alignment computation functions.
Convenience header:
#include <eve/memory.hpp>
Required header: #include <eve/memory/soa_vector.hpp>
soa_vector is a container similar to std::vector
but optimized to store [product types](eve::product_type) using a Structure Of Array layout compatible with SIMD processing.
- Template Parameters
-
Type | Value type stored inside eve::soa_vector |
|
template<std::integral T> |
constexpr auto | eve::align (T v, over alignment) noexcept |
| Realigns integral value over a given power-of-2 alignment constraint. More...
|
|
template<std::integral T> |
constexpr auto | eve::align (T v, under alignment) noexcept |
| Realigns integral value under a given power-of-2 alignment constraint. More...
|
|
template<typename T > |
constexpr auto | eve::align (T *ptr, over alignment) noexcept |
| Realigns a pointer over a given power-of-2 alignment constraint. More...
|
|
template<typename T > |
constexpr auto | eve::align (T *ptr, under alignment) noexcept |
| Realigns a pointer under a given power-of-2 alignment constraint. More...
|
|
template<std::size_t A, typename T , typename Other > |
constexpr bool | eve::is_aligned (aligned_ptr< T, Other > const &ptr) noexcept |
| Checks if an aligned_ptr is aligned on a given alignment. More...
|
|
template<std::size_t Alignment, std::integral T> |
constexpr bool | eve::is_aligned (T v) noexcept |
| Checks if a pointer satisfy an alignment constraint. More...
|
|
template<std::size_t Alignment, typename T > |
constexpr bool | eve::is_aligned (T *ptr) noexcept |
| Checks if a pointer satisfy an alignment constraint. More...
|
|
template<typename T , typename Lanes > |
constexpr bool | eve::is_aligned (T *ptr, Lanes lanes) noexcept |
| Checks if a pointer satisfy an alignment constraint. More...
|
|
|
constexpr callable_read_ | eve::read = {} |
| Callable object reading single value from memory. More...
|
|
constexpr callable_store_ | eve::store = {} |
| Callable object computing //! description NOT FOUND. More...
|
|
constexpr callable_store_equivalent_ | eve::store_equivalent = {} |
| Callable object, customisation point. If an iterator's store operation can be done as a store to some other iterator/pointer - this is a transformation to customize. More...
|
|
constexpr callable_unalign_ | eve::unalign = {} |
| Callable object for computing an unaligned version of a relaxed iterator. More...
|
|
constexpr callable_write_ | eve::write = {} |
| Callable object writing single value from memory. More...
|
|