|
HPCombi
High Performance Combinatorics in C++ using vector instructions v1.0.3
|
declaration of HPCombi::epu8. More...
#include <array>#include <cstddef>#include <cstdint>#include <ostream>#include <string>#include "builder.hpp"#include "debug.hpp"#include "vect_generic.hpp"#include "simde/x86/sse4.1.h"#include "simde/x86/sse4.2.h"#include "epu8_impl.hpp"Go to the source code of this file.
Namespaces | |
| namespace | HPCombi |
| namespace | std |
Typedefs | |
| using | HPCombi::epu8 = uint8_t __attribute__((vector_size(16))) |
| epu8 stands for Extended Packed Unsigned, grouped by 8 bits; this is the low level type chosen by Intel for their API to intrinsics, ie a SIMD vector of 16 unsigned bytes (16×8 = 128bits). | |
Functions | |
| constexpr uint8_t | HPCombi::operator""_u8 (unsigned long long arg) noexcept |
| Unsigned 8 bits int constant. | |
| bool | HPCombi::is_all_zero (epu8 a) noexcept |
| Test whether all the entries of a HPCombi::epu8 are zero. | |
| bool | HPCombi::is_all_one (epu8 a) noexcept |
| Test whether all the entries of a HPCombi::epu8 are one. | |
| bool | HPCombi::equal (epu8 a, epu8 b) noexcept |
| Equality of HPCombi::epu8. | |
| bool | HPCombi::not_equal (epu8 a, epu8 b) noexcept |
| Non equality of HPCombi::epu8. | |
| epu8 | HPCombi::permuted_ref (epu8 a, epu8 b) noexcept |
Apply a permutation b on the vector a: for i=0..16 {result[i] = a[b[i]}. | |
| epu8 | HPCombi::permuted (epu8 a, epu8 b) noexcept |
| Same as permuted_ref but with an optimized implementation using intrinsics. | |
| epu8 | HPCombi::shifted_right (epu8 a) noexcept |
| Left shifted of a HPCombi::epu8 inserting a 0. | |
| epu8 | HPCombi::shifted_left (epu8 a) noexcept |
| Right shifted of a HPCombi::epu8 inserting a 0. | |
| epu8 | HPCombi::reverted (epu8 a) noexcept |
| Reverting a HPCombi::epu8. | |
| epu8 | HPCombi::min (epu8 a, epu8 b) noexcept |
| Vector min between two HPCombi::epu8 0. | |
| epu8 | HPCombi::max (epu8 a, epu8 b) noexcept |
| Vector max between two HPCombi::epu8 0. | |
| bool | HPCombi::is_sorted (epu8 a) noexcept |
| Testing if a HPCombi::epu8 is sorted. | |
| epu8 | HPCombi::sorted (epu8 a) noexcept |
| Return a sorted HPCombi::epu8. | |
| epu8 | HPCombi::sorted8 (epu8 a) noexcept |
| Return a HPCombi::epu8 with both halves sorted. | |
| epu8 | HPCombi::revsorted (epu8 a) noexcept |
| Return a reverse sorted HPCombi::epu8. | |
| epu8 | HPCombi::revsorted8 (epu8 a) noexcept |
| Return a HPCombi::epu8 with both halves reverse sorted. | |
| epu8 | HPCombi::sort_perm (epu8 &a) noexcept |
Sort this and return the sorting permutation. | |
| epu8 | HPCombi::sort8_perm (epu8 &a) noexcept |
Sort this and return the sorting permutation. | |
| void | HPCombi::merge (epu8 &a, epu8 &b) noexcept |
| Merge two sorted epu8. | |
| epu8 | HPCombi::permutation_of_ref (epu8 a, epu8 b) noexcept |
| Same interface as permutation_of but with a different implementation. | |
| epu8 | HPCombi::permutation_of (epu8 a, epu8 b) noexcept |
| Find if a vector is a permutation of another one. | |
| epu8 | HPCombi::random_epu8 (uint16_t bnd) |
| A random HPCombi::epu8. | |
| epu8 | HPCombi::remove_dups (epu8 a, uint8_t repl=0) noexcept |
| Remove duplicates in a sorted HPCombi::epu8. | |
| uint8_t | HPCombi::horiz_sum_ref (epu8) noexcept |
| Same interface as horiz_sum but with a different implementation. | |
| uint8_t | HPCombi::horiz_sum_gen (epu8) noexcept |
| Same interface as horiz_sum but with a different implementation. | |
| uint8_t | HPCombi::horiz_sum4 (epu8) noexcept |
| Same interface as horiz_sum but with a different implementation. | |
| uint8_t | HPCombi::horiz_sum3 (epu8) noexcept |
| Same interface as horiz_sum but with a different implementation. | |
| uint8_t | HPCombi::horiz_sum (epu8 v) noexcept |
| Horizontal sum of a HPCombi::epu8. | |
| epu8 | HPCombi::partial_sums_ref (epu8) noexcept |
| Same interface as partial_sums but with a different implementation. | |
| epu8 | HPCombi::partial_sums_gen (epu8) noexcept |
| Same interface as partial_sums but with a different implementation. | |
| epu8 | HPCombi::partial_sums_round (epu8) noexcept |
| Same interface as partial_sums but with a different implementation. | |
| epu8 | HPCombi::partial_sums (epu8 v) noexcept |
| Horizontal partial sum of a HPCombi::epu8. | |
| uint8_t | HPCombi::horiz_max_ref (epu8) noexcept |
| Same interface as horiz_max but with a different implementation. | |
| uint8_t | HPCombi::horiz_max_gen (epu8) noexcept |
| Same interface as horiz_max but with a different implementation. | |
| uint8_t | HPCombi::horiz_max4 (epu8) noexcept |
| Same interface as horiz_max but with a different implementation. | |
| uint8_t | HPCombi::horiz_max3 (epu8) noexcept |
| Same interface as horiz_max but with a different implementation. | |
| uint8_t | HPCombi::horiz_max (epu8 v) noexcept |
| Horizontal sum of a HPCombi::epu8. | |
| epu8 | HPCombi::partial_max_ref (epu8) noexcept |
| Same interface as partial_max but with a different implementation. | |
| epu8 | HPCombi::partial_max_gen (epu8) noexcept |
| Same interface as partial_max but with a different implementation. | |
| epu8 | HPCombi::partial_max_round (epu8) noexcept |
| Same interface as partial_max but with a different implementation. | |
| epu8 | HPCombi::partial_max (epu8 v) noexcept |
| Horizontal partial sum of a HPCombi::epu8. | |
| uint8_t | HPCombi::horiz_min_ref (epu8) noexcept |
| Same interface as horiz_min but with a different implementation. | |
| uint8_t | HPCombi::horiz_min_gen (epu8) noexcept |
| Same interface as horiz_min but with a different implementation. | |
| uint8_t | HPCombi::horiz_min4 (epu8) noexcept |
| Same interface as horiz_min but with a different implementation. | |
| uint8_t | HPCombi::horiz_min3 (epu8) noexcept |
| Same interface as horiz_min but with a different implementation. | |
| uint8_t | HPCombi::horiz_min (epu8 v) noexcept |
| Horizontal sum of a HPCombi::epu8. | |
| epu8 | HPCombi::partial_min_ref (epu8) noexcept |
| Same interface as partial_min but with a different implementation. | |
| epu8 | HPCombi::partial_min_gen (epu8) noexcept |
| Same interface as partial_min but with a different implementation. | |
| epu8 | HPCombi::partial_min_round (epu8) noexcept |
| Same interface as partial_min but with a different implementation. | |
| epu8 | HPCombi::partial_min (epu8 v) noexcept |
| Horizontal partial sum of a HPCombi::epu8. | |
| epu8 | HPCombi::eval16_ref (epu8 v) noexcept |
| Same interface as eval16 but with a different implementation. | |
| epu8 | HPCombi::eval16_arr (epu8 v) noexcept |
| Same interface as eval16 but with a different implementation. | |
| epu8 | HPCombi::eval16_cycle (epu8 v) noexcept |
| Same interface as eval16 but with a different implementation. | |
| epu8 | HPCombi::eval16_popcount (epu8 v) noexcept |
| Same interface as eval16 but with a different implementation. | |
| epu8 | HPCombi::eval16 (epu8 v) noexcept |
| Evaluation of a HPCombi::epu8: count how many times each int of 0..15 appears in the input. | |
| uint64_t | HPCombi::first_diff_ref (epu8 a, epu8 b, size_t bound=16) noexcept |
| Same interface as first_diff but with a different implementation. | |
| uint64_t | HPCombi::first_diff_mask (epu8 a, epu8 b, size_t bound=16) noexcept |
| Same interface as first_diff but with a different implementation. | |
| uint64_t | HPCombi::first_diff (epu8 a, epu8 b, size_t bound=16) noexcept |
| The first difference between two HPCombi::epu8. | |
| uint64_t | HPCombi::last_diff_ref (epu8 a, epu8 b, size_t bound=16) noexcept |
| Same interface as last_diff but with a different implementation. | |
| uint64_t | HPCombi::last_diff_mask (epu8 a, epu8 b, size_t bound=16) noexcept |
| Same interface as last_diff but with a different implementation. | |
| uint64_t | HPCombi::last_diff (epu8 a, epu8 b, size_t bound=16) noexcept |
| The last difference between two HPCombi::epu8. | |
| bool | HPCombi::less (epu8 a, epu8 b) noexcept |
| Lexicographic comparison between two HPCombi::epu8. | |
| int8_t | HPCombi::less_partial (epu8 a, epu8 b, int k) noexcept |
| Partial lexicographic comparison between two HPCombi::epu8. | |
| uint64_t | HPCombi::first_zero (epu8 v, int bnd) noexcept |
| return the index of the first zero entry or 16 if there are none Only index smaller than bound are taken into account. | |
| uint64_t | HPCombi::last_zero (epu8 v, int bnd) noexcept |
| return the index of the last zero entry or 16 if there are none Only index smaller than bound are taken into account. | |
| uint64_t | HPCombi::first_non_zero (epu8 v, int bnd) noexcept |
| return the index of the first non zero entry or 16 if there are none Only index smaller than bound are taken into account. | |
| uint64_t | HPCombi::last_non_zero (epu8 v, int bnd) noexcept |
| return the index of the last non zero entry or 16 if there are none Only index smaller than bound are taken into account. | |
| epu8 | HPCombi::popcount16 (epu8 v) noexcept |
| a vector popcount function | |
| bool | HPCombi::is_partial_transformation (epu8 v, const size_t k=16) noexcept |
| Test for partial transformation. | |
| bool | HPCombi::is_transformation (epu8 v, const size_t k=16) noexcept |
| Test for transformation. | |
| bool | HPCombi::is_partial_permutation (epu8 v, const size_t k=16) noexcept |
| Test for partial permutations. | |
| bool | HPCombi::is_permutation_sort (epu8 v, const size_t k=16) noexcept |
| Same interface as is_permutation but with a different implementation. | |
| bool | HPCombi::is_permutation_eval (epu8 v, const size_t k=16) noexcept |
| Same interface as is_permutation but with a different implementation. | |
| bool | HPCombi::is_permutation (epu8 v, const size_t k=16) noexcept |
| std::ostream & | std::operator<< (std::ostream &stream, HPCombi::epu8 const &a) |
| std::string | std::to_string (HPCombi::epu8 const &a) |
Variables | |
| constexpr TPUBuild< epu8 > | HPCombi::Epu8 {} |
| Factory object acting as a class constructor for type HPCombi::epu8. | |
| constexpr uint64_t | HPCombi::prime = 0x9e3779b97f4a7bb9 |
| A prime number good for hashing. | |
declaration of HPCombi::epu8.
Contains renaming of some low level functions, eg simde_mm_testz_si128(a,a) → is_all_zero(a)