TDLS 0.2.0
Tiny Device-callable Linear Solvers
Loading...
Searching...
No Matches
tdls::TiledLUppTileOperations< T, tile_size, unroll_inner > Struct Template Reference

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>

Inheritance diagram for tdls::TiledLUppTileOperations< T, tile_size, unroll_inner >:
[legend]
Collaboration diagram for tdls::TiledLUppTileOperations< T, tile_size, unroll_inner >:
[legend]

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.
 

Detailed Description

template<typename T, int tile_size, bool unroll_inner>
struct tdls::TiledLUppTileOperations< T, tile_size, unroll_inner >

tile_size x tile_size register-tile micro-kernels of the TiledLUpp solvers: the shared kernels plus the LU column elimination.

Template Parameters
Tscalar type
tile_sizetile size (int, row stride of the register tiles)
unroll_innerunroll knob, forwarded from the TiledLUpp solver configuration

Member Function Documentation

◆ eliminate_column()

template<typename T , int tile_size, bool unroll_inner>
template<int row_extent, int col_extent>
TDLS_HOST_DEVICE static TDLS_FORCEINLINE constexpr void tdls::TiledLUppTileOperations< T, tile_size, unroll_inner >::eliminate_column ( T *TDLS_RESTRICT t,
int k )
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.

Template Parameters
row_extentactive row extent of the tile
col_extentactive column extent of the tile
Parameters
[in,out]tregister tile
[in]kcolumn to eliminate

The documentation for this struct was generated from the following file: