|
TDLS 0.2.0
Tiny Device-callable Linear Solvers
|
tile_size x tile_size register-tile micro-kernels of the TiledLUpp solvers: the shared kernels plus the LU column elimination. More...
#include <tile_operations.hpp>
Static Public Member Functions | |
| template<int row_extent, int col_extent> | |
| TDLS_HOST_DEVICE static TDLS_FORCEINLINE constexpr void | eliminate_column (T *TDLS_RESTRICT t, int k) noexcept |
| Gaussian elimination of column k inside the diagonal tile. | |
Static Public Member Functions inherited from tdls::TileOperations< T, tile_size, unroll_inner > | |
| template<int k_extent> | |
| TDLS_HOST_DEVICE static TDLS_FORCEINLINE constexpr void | swap_rows (T *TDLS_RESTRICT t, int k, int r) noexcept |
| Row swap k <-> r inside the KExKE active part of the tile, compile-time indexed on both sides. | |
| template<int diag_extent, int col_extent> | |
| TDLS_HOST_DEVICE static TDLS_FORCEINLINE constexpr void | trsm_left_unit (const T *TDLS_RESTRICT lu, T *TDLS_RESTRICT B) noexcept |
| B := L^-1 B, with L the unit lower part of the factored diagonal tile. L is KDxKD, B is KDxC. | |
| template<int diag_extent, int row_extent> | |
| TDLS_HOST_DEVICE static TDLS_FORCEINLINE constexpr void | trsm_right (const T *TDLS_RESTRICT lu, T *TDLS_RESTRICT B) noexcept |
| B := B U^-1, with U the upper part of the factored diagonal tile. U is KDxKD, B is RxKD. | |
| template<int row_extent, int col_extent, int k_extent> | |
| TDLS_HOST_DEVICE static TDLS_FORCEINLINE constexpr void | gemm_sub (T *TDLS_RESTRICT Ct, const T *TDLS_RESTRICT At, const T *TDLS_RESTRICT Bt) noexcept |
| Ct -= At*Bt with per-element dot-product accumulation. At is RxK, Bt is KxC, Ct is RxC. | |
tile_size x tile_size register-tile micro-kernels of the TiledLUpp solvers: the shared kernels plus the LU column elimination.
| T | scalar type |
| tile_size | tile size (int, row stride of the register tiles) |
| unroll_inner | unroll knob, forwarded from the TiledLUpp solver configuration |
|
inlinestaticconstexprnoexcept |
Gaussian elimination of column k inside the diagonal tile.
Scales the sub-column by 1/pivot and updates the trailing block. Extents <row_extent, col_extent> bound the active part of the tile. The RECIPROCAL of the pivot is stored at the diagonal slot: every downstream consumer (trsm_right, backward substitution, out-of-tile replays) multiplies instead of dividing. The division is paid once here, where it already had to happen.
| row_extent | active row extent of the tile |
| col_extent | active column extent of the tile |
| [in,out] | t | register tile |
| [in] | k | column to eliminate |