E.V.E
v2023.02.15
Algorithms and Views

Detailed Description

Algorithms and Views.

This module provides implementation of SIMD versions of some std ranges algorithms. Take care that some prerequisite and syntaxes are not fully standard conformant

Required header:

#include <eve/module/algo.hpp>

Modules

 Algorithms
 Provides SIMD implementation of standard algorithms.
 
 Concepts
 Provides Concepts for algorithms and related components.
 
 Views
 Provides views to work with SIMD algorihms.
 

Classes

struct  eve::algo::ptr_iterator< Ptr, Cardinal >
 An eve iterator on top of pointer or aligned pointer. More...
 
struct  eve::algo::range_ref_wrapper< Rng >
 a non_owning_range wrapper around owning range. Should be created via range_ref More...
 

Variables

constexpr auto eve::algo::fill = function_with_traits<fill_>[default_simple_algo_traits]
 a version of std::fill
 
constexpr auto eve::algo::for_each = function_with_traits<for_each_>
 a basic for_each algorithm. More...
 
constexpr auto eve::algo::iota = function_with_traits<iota_>[copy.get_traits()]
 SIMD version of std::iota For conversion/overflow behaviour, should follow the standard. More...
 
constexpr range_ref_ eve::algo::range_ref
 for a non_owning_range returns it, otherwise returns a range_ref_wrapper. More...
 
constexpr auto eve::algo::reverse = function_with_traits<reverse_>[no_unrolling][no_aligning]
 SIMD version of std::reverse. More...
 
constexpr auto eve::algo::reverse_copy = function_with_traits<reverse_copy_>[algo::unroll<1>]
 SIMD version of std::reverse_copy. More...
 
constexpr auto eve::algo::swap_ranges = function_with_traits<swap_ranges_>[default_simple_algo_traits]
 SIMD version of std::swap_ranges. More...
 
constexpr auto eve::algo::no_aligning = ::rbr::flag( no_aligning_tag{} )
 Traits for disabling alignment handling in algorithm. More...
 
constexpr auto eve::algo::no_unrolling = unroll<1>
 Convinient equivalent to unroll<1>.
 
constexpr auto eve::algo::expensive_callable = ::rbr::flag( expensive_callable_tag{} )
 NOTE: equivalent to no_aligning + no_unrolling By default eve algorithms will assume that the passed predicates/computation are failry simple and will unroll and align data accesses. More...
 
constexpr auto eve::algo::fuse_operations = ::rbr::flag( fuse_operations_tag{} )
 Some algorithms (for example transform_reduce) can be implemented more efficient if you fuse multiple operations provided in a single function. More...
 
constexpr auto eve::algo::allow_frequency_scaling = ::rbr::flag( allow_frequency_scaling_tag{} )
 On intel using 64 byte registers requires processor to scale down it's frequency. This is only benefitial if you have a very large set of data to process. Otherwise it will likely degrade performance not only of the SIMD code but also of the code that follows. More...
 
constexpr auto eve::algo::transform_inplace = function_with_traits<transform_inplace_>[default_simple_algo_traits]
 same as; More...
 
constexpr auto eve::algo::transform_to = function_with_traits<transform_to_>[default_simple_algo_traits]
 SIMD version of std::transform. More...