HPCombi
High Performance Combinatorics in C++ using vector instructions v1.0.3
|
#include <array>
#include <cassert>
#include <cstdint>
#include <functional>
#include <iostream>
#include <vector>
#include <unordered_set>
#include "hpcombi/perm16.hpp"
Classes | |
struct | PTransf16 |
Partial transformation of \(\{0\dots 15\}\); see HPCombi::Transf16; partial means it might not be defined everywhere. More... | |
Typedefs | |
using | epu8 |
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 | |
PTransf16 | act1 (PTransf16 x, PTransf16 y) |
PTransf16 | act0 (PTransf16 x, PTransf16 y) |
int | main () |
Variables | |
const PTransf16 | id {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} |
const PTransf16 | s0 {0, 1, 2, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 13, 14, 15} |
const PTransf16 | s1e {0, 1, 2, 3, 4, 5, 7, 6, 9, 8, 10, 11, 12, 13, 14, 15} |
const PTransf16 | s1f {0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 10, 11, 12, 13, 14, 15} |
const PTransf16 | s2 {0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 13, 14, 15} |
const PTransf16 | s3 {0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15} |
const PTransf16 | s4 {0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15} |
const PTransf16 | s5 {0, 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, 14, 15} |
const PTransf16 | s6 {0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 13, 15} |
const PTransf16 | s7 {1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 14} |
const uint8_t | FF = 0xff |
const uint8_t | FE = 0xfe |
const PTransf16 | gene |
const PTransf16 | genf |
using HPCombi::epu8 |
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 using this type use semantically equivalent types, eg a _m128 which is a vector containing 2 signed 64 bits integers. A flag tells the compiler to silently consider those types equivalent.
int main | ( | ) |
const uint8_t FE = 0xfe |
const uint8_t FF = 0xff |
const PTransf16 gene |
const PTransf16 id {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} |
const PTransf16 s0 {0, 1, 2, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 13, 14, 15} |
const PTransf16 s1e {0, 1, 2, 3, 4, 5, 7, 6, 9, 8, 10, 11, 12, 13, 14, 15} |
const PTransf16 s1f {0, 1, 2, 3, 4, 5, 8, 9, 6, 7, 10, 11, 12, 13, 14, 15} |
const PTransf16 s2 {0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12, 13, 14, 15} |
const PTransf16 s3 {0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15} |
const PTransf16 s4 {0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15} |
const PTransf16 s5 {0, 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, 14, 15} |
const PTransf16 s6 {0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 13, 15} |
const PTransf16 s7 {1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 14} |