tile_size x tile_size register-tile micro-kernels shared by the solver families.
More...
|
| 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.
|
| |
template<typename T, int tile_size, bool unroll_inner>
struct tdls::TileOperations< T, tile_size, unroll_inner >
tile_size x tile_size register-tile micro-kernels shared by the solver families.
- Template Parameters
-
| T | scalar type |
| tile_size | tile size (int, row stride of the register tiles) |
| unroll_inner | unroll knob, forwarded from the solver configuration |
template<typename T , int tile_size, bool unroll_inner>
template<int row_extent, int col_extent, int k_extent>
|
|
inlinestaticconstexprnoexcept |
Ct -= At*Bt with per-element dot-product accumulation. At is RxK, Bt is KxC, Ct is RxC.
- Template Parameters
-
| row_extent | row extent of Ct and At |
| col_extent | column extent of Ct and Bt |
| k_extent | inner extent (columns of At, rows of Bt) |
- Parameters
-
| [in,out] | Ct | accumulator tile |
| [in] | At | left factor tile |
| [in] | Bt | right factor tile |
template<typename T , int tile_size, bool unroll_inner>
template<int k_extent>
|
|
inlinestaticconstexprnoexcept |
Row swap k <-> r inside the KExKE active part of the tile, compile-time indexed on both sides.
The equality test against every unrolled row index keeps the tile addressing static; a dynamic t[r*tile_size+j] would spill the tile. k_extent bounds both loops, so the phantom slots of trailing tiles are never touched, as in every other micro-kernel.
- Template Parameters
-
| k_extent | active extent of the tile |
- Parameters
-
| [in,out] | t | register tile |
| [in] | k | destination row |
| [in] | r | source row to swap in |
template<typename T , int tile_size, bool unroll_inner>
template<int diag_extent, int row_extent>
|
|
inlinestaticconstexprnoexcept |
B := B U^-1, with U the upper part of the factored diagonal tile. U is KDxKD, B is RxKD.
The diagonal of lu must already hold the pivot RECIPROCALS: no divisions here.
- Template Parameters
-
| diag_extent | extent of the factored diagonal tile |
| row_extent | row extent of B |
- Parameters
-
| [in] | lu | factored diagonal tile (L\U, reciprocal diagonal) |
| [in,out] | B | updated register tile |