1#ifndef TDLS_SOLVERS_ARROWHEAD_LUPP_CONFIG_HPP
2#define TDLS_SOLVERS_ARROWHEAD_LUPP_CONFIG_HPP
360 return physical_rows<T>(config.block_row_interchange, S);
373 [[maybe_unused]]
const bool reg)
noexcept {
374 if (config.rhs_pass_width >= 0)
return config.rhs_pass_width;
398 return physical_rows_here<T>(interchange, S);
408 if (width >= 0)
return width;
409#if defined(TDLS_DETAIL_SIDE_DISPATCH)
410 if (!std::is_constant_evaluated())
return on_device_side() && reg ? 2 : 0;
427template<
typename T,
bool gpu>
430 const bool reg = physical_rows_on<T, gpu>(config.block_row_interchange, S);
431 config.block_row_interchange = reg ? RowInterchange::Physical : RowInterchange::Logical;
432 if (config.rhs_pass_width < 0) config.rhs_pass_width = gpu && reg ? 2 : 0;
constexpr TiledLUppConfig< T > arrowhead_physical_block_config(const ArrowheadLUppConfig< T > &config) noexcept
TiledLUpp configuration of the diagonal blocks eliminated in registers: that of arrowhead_block_confi...
Definition config.hpp:345
TDLS_HOST_DEVICE constexpr bool arrowhead_register_blocks(const ArrowheadLUppConfig< T > &config, const int S) noexcept
Whether the diagonal blocks of S unknowns are eliminated in registers (ArrowheadLUppConfig::block_row...
Definition config.hpp:359
TDLS_HOST_DEVICE constexpr int arrowhead_rhs_pass_width_here(const int width, const bool reg) noexcept
arrowhead_rhs_pass_width decided at run time on the side of the code, as arrowhead_register_blocks_he...
Definition config.hpp:407
TDLS_HOST_DEVICE constexpr int arrowhead_rhs_pass_width(const ArrowheadLUppConfig< T > &config, const bool reg) noexcept
The width of the passes over [A_kb | y_k] (ArrowheadLUppConfig::rhs_pass_width), -1 resolved: 2 on GP...
Definition config.hpp:372
TDLS_HOST_DEVICE constexpr bool arrowhead_register_blocks_here(const RowInterchange interchange, const int S) noexcept
Whether the diagonal blocks of S unknowns are eliminated in registers, decided at run time on the sid...
Definition config.hpp:397
ArrowheadStorage
Storage of an arrowhead matrix.
Definition config.hpp:63
@ Packed
Abb, the couplings A_bk, then the A_kb, then the D_k, each by rows or by columns.
@ Full
the full n x n matrix, zeros included: (r, c) at r * n + c, or c * n + r
constexpr TiledLUppConfig< T > arrowhead_block_config(const ArrowheadLUppConfig< T > &config) noexcept
TiledLUpp configuration of the diagonal blocks of an ArrowheadLUpp solver.
Definition config.hpp:326
constexpr ArrowheadLUppConfig< T > arrowhead_resolved_config(ArrowheadLUppConfig< T > config, const int S) noexcept
The configuration with the choices of the given hardware made explicit: block_row_interchange Physica...
Definition config.hpp:429
constexpr TiledLUppConfig< T > arrowhead_border_config(const ArrowheadLUppConfig< T > &config) noexcept
TiledLUpp configuration of the border system of an ArrowheadLUpp solver, a local row-major array what...
Definition config.hpp:444
ArrowheadCondensation
Condensation of an accepted block: what its Schur update and its recovery data spare,...
Definition config.hpp:93
ArrowheadCoupling
Pattern of the border-to-block couplings A_bk, the entries of the border rows in the columns of a blo...
Definition config.hpp:77
@ Dense
every border row may touch every unknown of every block
@ Diagonal
unknown i of a block touches border row coupling_row + i only
Toolchain detection and portability macros.
#define TDLS_HOST_DEVICE
__host__ __device__ under CUDA, the equivalent attributes under HIP, empty elsewhere.
Definition macros.hpp:50
Shared vocabulary and conventions of the solver families.
RowInterchange
Row interchanges of a factorization with partial pivoting.
Definition options.hpp:59
MatrixLayout
Memory layout of a dense matrix.
Definition options.hpp:213
Compile-time knobs of the ArrowheadLUpp solvers, carrying the tuned defaults.
Definition config.hpp:136
bool schur_in_place
Definition config.hpp:293
bool streamed_out_of_line
Definition config.hpp:311
ArrowheadStorage storage
Definition config.hpp:147
bool unroll_loops
Definition config.hpp:300
bool gather_rhs
Definition config.hpp:284
StructuralReal< T > block_oot_pivot_threshold
Definition config.hpp:247
int border_tile_size
Tile size of TiledLUpp on the border system.
Definition config.hpp:250
ArrowheadCondensation condensation
Definition config.hpp:193
MatrixLayout layout
Definition config.hpp:154
StructuralReal< T > block_relative_pivot_threshold
Definition config.hpp:241
StructuralReal< T > condensation_pivot_threshold
Definition config.hpp:173
ArrowheadCoupling coupling
Definition config.hpp:141
int rhs_pass_width
Definition config.hpp:274
RowInterchange block_row_interchange
Definition config.hpp:231
int block_tile_size
Definition config.hpp:205
Shape of an arrowhead matrix: a template argument of the compile-time solver, a function argument of ...
Definition config.hpp:111
int coupling_row
Definition config.hpp:121
int blocks
Number of diagonal blocks.
Definition config.hpp:117
int block
Number of unknowns of a diagonal block.
Definition config.hpp:115
int border
Number of border unknowns, ordered first.
Definition config.hpp:113
TDLS_HOST_DEVICE constexpr int n() const noexcept
Dimension of the matrix.
Definition config.hpp:125
Floating-point value stored as an odd integer mantissa and a power-of-two exponent,...
Definition structural_real.hpp:68
Compile-time knobs of the TiledLUpp solvers, carrying the tuned defaults.
Definition config.hpp:50
StructuralReal< T > relative_pivot_threshold
Definition config.hpp:139
MatrixLayout layout
Definition config.hpp:194
RowInterchange row_interchange
Definition config.hpp:99
int tile_size
Definition config.hpp:63
StructuralReal< T > oot_pivot_threshold
Definition config.hpp:111
bool unroll_loops
Definition config.hpp:174
Exact floating-point value admissible as a template argument.
Compile-time configuration of the TiledLUpp solver family.