E.V.E
v2022.03.00

Detailed Description

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
TypeValue type stored inside eve::soa_vector

Classes

struct  eve::aligned_allocator< T, Lanes >
 Standard-compliant allocator handling the allocation and deallocation of segment of aligned memory. More...
 
struct  eve::aligned_ptr< Type, Lanes >
 Wrapper for non-owning aligned pointers. More...
 
struct  eve::stack_buffer< T >
 A stack buffer for a simd-value. More...
 
struct  eve::soa_ptr< Ptrs >
 a low level abstruction that is like a tuple of pointers to parallel arrays. We think that in code one should use views::zip_iterator instead, it can do everything soa_ptr can and more. We are still trying to figure out how/where these abstructions should live. More...
 

Typedefs

template<typename T >
using eve::unaligned_t = decltype(unalign(std::declval< T >()))
 Required header: #include <eve/module/core.hpp> More...
 

Enumerations

enum class  eve::over : std::size_t
 
enum class  eve::under : std::size_t
 

Functions

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...
 

Variables

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...