Proper SIMD operations as shuffling, splitting and merging SIMD vectors
Variables | |
| constexpr auto | eve::broadcast = functor<broadcast_t> |
| Computes the. | |
| constexpr auto | eve::combine = functor<combine_t> |
| Combines two SIMD values in a larger one. | |
| constexpr auto | eve::gather = functor<gather_t> |
| Load a SIMD value with values selected from a memory region at the given offsets. | |
| constexpr auto | eve::has_equal_in = functor<has_equal_in_t> |
| Given two simd_values: x, match_against returns a logical mask. The res[i] == eve::any(x[i] == match_against);. | |
| constexpr auto | eve::iterate_selected = functor<iterate_selected_t> |
| a utility to do scalar iteration over all true elements in a logical. | |
| constexpr auto | eve::scan = functor<scan_t> |
| Computes the generalized prefix sum over a simd value. | |
| constexpr auto | eve::scatter = functor<scatter_t> |
| Store a SIMD register to memory using scattered indexes. | |
| constexpr auto | eve::sort = functor<sort_t> |
| sorts a register in a accedning order according to a comparator. | |
| constexpr auto | eve::zip = functor<zip_t> |
| Callable for SoA value constructions. | |
| constexpr callable_broadcast_group_ | eve::broadcast_group = {} |
| Computes the TODO. | |
| constexpr callable_deinterleave_groups_shuffle_ | eve::deinterleave_groups_shuffle = {} |
| Callable object for a deinterleave groups shuffle. | |
|
inlineconstexpr |
Computes the.
Defined in Header
Parameters
Return value
|
inlineconstexpr |
Computes the TODO.
Defined in Header
Parameters
Return value
The value of TODO is returned.
TODO
|
inlineconstexpr |
Combines two SIMD values in a larger one.
Defined in Header
Parameters
Return value
|
inlineconstexpr |
Callable object for a deinterleave groups shuffle.
deinterleaves elements from one or two registers
Accepts either a register and a group size or two registers and a group size group is how many elements are treated as one chunk, example:
01234567, group_size = 1 ==> 02461235 0123 4567, group_size = 2 ==> 01452367
|
inlineconstexpr |
Load a SIMD value with values selected from a memory region at the given offsets.
Parameters
Return value
|
inlineconstexpr |
Given two simd_values: x, match_against returns a logical mask. The res[i] == eve::any(x[i] == match_against);.
Optional last parameter allows to overwrite the equality from eve::is_equal to an arbitrary simd binary predicate.
We took the idea for the operation from: "Faster-Than-Native Alternatives for x86 VP2INTERSECT Instructions" by Guillermo Diez-Canas. Link: https://arxiv.org/abs/2112.06342
Defined in Header
Parameters
Return value
|
inlineconstexpr |
a utility to do scalar iteration over all true elements in a logical.
Sometimes (for example in parsing) you need to perform scalar operations for each element that matches a predicate. This is a low level utility to help you do that. The predicate for iteration should return true if you want to break, false otherwise.
Parameters
Return value
|
inlineconstexpr |
Computes the generalized prefix sum over a simd value.
Parameters
Return value
|
inlineconstexpr |
Store a SIMD register to memory using scattered indexes.
Store each element of a given SIMD value vin different memory address computed form a base SIMD compatible iterator ptr and a SIMD integral value idx used as indexes.
A call to eve::scatter(v,ptr,idx) is semantically equivalent to:
Parameters
eve::scatter can be masked using Relative conditionals to skip scattering of certain elements.
The call eve::scatter[cond](v,p,i) is semantically equivalent to:
|
inlineconstexpr |
sorts a register in a accedning order according to a comparator.
Sorting algorithm, based on sorting networks.
Also our implementation is not directly based on any specific one, people we are definitely not the first people to do this. Here is a list of previous work that was looked at.
Parameters
Return value
|
inlineconstexpr |
Callable for SoA value constructions.
Defined in Header
Parameters
Return value