|
NumericAL
A header-only C++20 lexer built on REAL
|
The vector path's tile: gemm_mr × gemm_nr elements of C in registers (gemm_kernel), each product rounded before its sum unless the compiler contracts c + a·b into a fused multiply-add.
More...
#include <gemm.hpp>
Classes | |
| struct | session |
| Nothing to turn on around a task. More... | |
Static Public Member Functions | |
| static constexpr bool | reads_b_in_place (std::size_t ldb) noexcept |
Whether B's rows ldb apart are read in place: no farther apart than a packed sliver's (and a B that one block of rows of A reads once, wherever its rows are: gemm_packed). | |
| static void | pack_a (const T *a, std::size_t lda, std::size_t rows, std::size_t kc, T *out) |
| A's slivers for this tile (gemm_pack_a). | |
| static void | tile (std::size_t kc, const T *ap, const T *bp, std::size_t ldb, T *c, std::size_t ldc, std::size_t rows, std::size_t cols) |
C += Aₚ·Bₚ for one tile of C (rows × cols) over a panel of depth kc, B's rows ldb apart. | |
Static Public Attributes | |
| static constexpr std::size_t | mr {gemm_mr} |
| The tile's rows. | |
| static constexpr std::size_t | nr {gemm_nr<T>} |
| The tile's columns. | |
| static constexpr std::size_t | depth {gemm_kc} |
| The panel depth. | |
| static constexpr std::size_t | block_rows {gemm_mc} |
| static constexpr std::size_t | b_in_place_rows {mr} |
| The most rows of A for which gemm_packed reads B in place at any distance between its rows (where reads_b_in_place does at all): one row of tiles, each of B's slivers read once. Six AVX2 cores, B of 300 to 800 square: 1 to 8 rows 22 to 40 % faster, 16 to 72 up to 2.5 times slower, B read again for each row of tiles. | |
| static constexpr std::size_t | speedup {gemm_kernel_speedup} |
| The weight of its work (gemm_kernel_speedup). | |
| static constexpr std::size_t | serial_below {1} |
| Every product with work shares it (gemm_shares). | |
The vector path's tile: gemm_mr × gemm_nr elements of C in registers (gemm_kernel), each product rounded before its sum unless the compiler contracts c + a·b into a fused multiply-add.
|
inlinestatic |
A's slivers for this tile (gemm_pack_a).
|
inlinestaticconstexprnoexcept |
Whether B's rows ldb apart are read in place: no farther apart than a packed sliver's (and a B that one block of rows of A reads once, wherever its rows are: gemm_packed).
|
staticconstexpr |
The most rows of A for which gemm_packed reads B in place at any distance between its rows (where reads_b_in_place does at all): one row of tiles, each of B's slivers read once. Six AVX2 cores, B of 300 to 800 square: 1 to 8 rows 22 to 40 % faster, 16 to 72 up to 2.5 times slower, B read again for each row of tiles.
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
Every product with work shares it (gemm_shares).
|
staticconstexpr |
The weight of its work (gemm_kernel_speedup).