|
TDLS 0.2.0
Tiny Device-callable Linear Solvers
|
Runtime-size variant of the TiledLUpp solver. More...
Go to the source code of this file.
Classes | |
| struct | tdls::TiledLUppSolverDynamic< T, Config > |
| Runtime-size tiled dense LU factorization with logical partial pivoting and out-of-tile pivot recovery, solving one n x n system per call. More... | |
Macros | |
| #define | TDLS_LUPP_DYN_A(r, c) |
| Strided element (r, c) of the factor matrix, flat index remapped by Config.layout. | |
| #define | TDLS_LUPP_DYN_PIV(i) |
| Strided pivot entry i. | |
| #define | TDLS_LUPP_DYN_X(i) |
| Strided entry i of the solution vector. | |
| #define | TDLS_LUPP_DYN_B(i) |
| Strided entry i of the right-hand side. | |
| #define | TDLS_LUPP_DYN_XW(w, i) |
| Strided entry i of column w of a multi right-hand-side block. | |
| #define | TDLS_LUPP_DYN_BW(w, i) |
| Strided entry i of column w of a multi right-hand-side block of b, addressed exactly as TDLS_LUPP_DYN_XW (b and x share both strides). | |
| #define | TDLS_LUPP_DYN_Y(i) |
| Strided entry i of the fused right-hand side of solve_inplace. | |
Runtime-size variant of the TiledLUpp solver.
Same algorithm as TiledLUppSolverStatic (solver_static.hpp): tiled LU with logical partial pivoting, out-of-tile recovery, reciprocal-diagonal factored format, right- and left-looking schedules. The difference is that the system dimension n is a runtime function parameter instead of a template parameter. Only the tile size (Config.tile_size) stays compile-time: register tiles keep a fixed tile_size x tile_size footprint, while all loop bounds over tiles and inside partial tiles are runtime values.
Deliberate differences with the compile-time solver:
For equal shapes (same n, tile_size, schedule, TiledLUppConfig thresholds), results are bitwise identical to the compile-time solver: the arithmetic sequence is the same, only addressing and loop mechanics differ.
The compile-time solver is the performance path; this variant is the flexibility path (dimensions unknown at compile time, fast builds).
The matrix layout follows Config.layout, exactly as in the compile-time solver: row-major by default, the flat index remapped for column-major storage, resolved at compile time.
Preconditions: n >= 1. tile_size may exceed n (the grid is then a single partial tile). Offsets are computed in 32-bit arithmetic: the flat element index (for the matrix, n*n) must stay below 2^31 and the largest element offset of every array (for the matrix, (n*n-1)*A_stride) below 2^32.
| #define TDLS_LUPP_DYN_A | ( | r, | |
| c ) |
Strided element (r, c) of the factor matrix, flat index remapped by Config.layout.
| #define TDLS_LUPP_DYN_B | ( | i | ) |
Strided entry i of the right-hand side.
| #define TDLS_LUPP_DYN_BW | ( | w, | |
| i ) |
Strided entry i of column w of a multi right-hand-side block of b, addressed exactly as TDLS_LUPP_DYN_XW (b and x share both strides).
| #define TDLS_LUPP_DYN_PIV | ( | i | ) |
Strided pivot entry i.
| #define TDLS_LUPP_DYN_X | ( | i | ) |
Strided entry i of the solution vector.
| #define TDLS_LUPP_DYN_XW | ( | w, | |
| i ) |
Strided entry i of column w of a multi right-hand-side block.
| #define TDLS_LUPP_DYN_Y | ( | i | ) |
Strided entry i of the fused right-hand side of solve_inplace.