|
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} |