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)