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