Tensorium
|
Direct Gaussian elimination solver with SIMD acceleration. More...
#include <LinearSolver.hpp>
Public Types | |
using | SimdT = simd::SimdTraits<K, DefaultISA> |
using | regT = typename SimdT::reg |
Public Member Functions | |
size_t | rows () const |
__attribute__ ((always_inline, hot, flatten)) static inline Vector< K > solve(const Matrix< K > &A_in | |
Solve the linear system \( Ax = b \). | |
assert (n==A_in.cols &&n==b_in.size()) | |
Vector< K > | x (n) |
aligned_vector< K > | rowi (n) |
aligned_vector< K > | rowj (n) |
for (size_t i=0;i< n;++i) | |
for (size_t ii=n;ii-- > 0;) | |
Static Public Member Functions | |
static void | raw_row_echelon (Matrix< K > &A, Vector< K > *b=nullptr, K eps=1e-12) |
Public Attributes | |
size_t | block_size |
aligned_vector< K > | data |
const Vector< K > & | b_in |
const size_t | n = A_in.rows |
if(n >=1024) return Jacobi< K > Matrix< K > | M = A_in |
Vector< K > | B = b_in |
const size_t | W = SimdT::width |
return | x |
Direct Gaussian elimination solver with SIMD acceleration.
This solver uses LU-style elimination with partial pivoting. For large systems ( \( n \geq 1024 \)), it redirects to Jacobi.
K | Scalar type (must be floating-point) |
using tensorium::solver::Gauss< K >::SimdT = simd::SimdTraits<K, DefaultISA> |
tensorium::solver::Gauss< K >::__attribute__ | ( | (always_inline, hot, flatten) | ) | const & |
Solve the linear system \( Ax = b \).
Performs Gaussian elimination followed by back-substitution. Uses unrolled and SIMD-optimized loops for performance.
A_in | Input matrix \( A \in \mathbb{R}^{n \times n} \) |
b_in | Right-hand side vector \( b \in \mathbb{R}^n \) |
std::runtime_error | if matrix is singular or ill-conditioned |
Referenced by tensorium::solver::Gauss< K >::raw_row_echelon().
|
inline |
References MathsUtils::_abs(), MathsUtils::_swap(), tensorium::solver::Gauss< K >::B, f(), tensorium::solver::Gauss< K >::M, tensorium::solver::Gauss< K >::n, tensorium::solver::Gauss< K >::rowi(), tensorium::solver::Gauss< K >::rowj(), UNROLL, and tensorium::solver::Gauss< K >::W.
References tensorium::solver::Gauss< K >::B, tensorium::solver::Gauss< K >::M, tensorium::solver::Gauss< K >::n, tensorium::solver::Gauss< K >::rowi(), tensorium::solver::Gauss< K >::W, and tensorium::solver::Gauss< K >::x.
|
inlinestatic |
References MathsUtils::_abs(), MathsUtils::_swap(), tensorium::solver::Gauss< K >::assert(), tensorium::Matrix< K, RowMajor >::cols, f(), tensorium::solver::Gauss< K >::n, tensorium::Matrix< K, RowMajor >::rows, and tensorium::Matrix< K, RowMajor >::swap_rows().
Referenced by tensorium::row_echelon().
aligned_vector< K > tensorium::solver::Gauss< K >::rowi | ( | n | ) |
Referenced by tensorium::solver::Gauss< K >::for(), and tensorium::solver::Gauss< K >::for().
aligned_vector< K > tensorium::solver::Gauss< K >::rowj | ( | n | ) |
size_t tensorium::solver::Gauss< K >::rows | ( | ) | const |
Referenced by tensorium::solver::Gauss< K >::for(), and tensorium::solver::Gauss< K >::for().
size_t tensorium::solver::Gauss< K >::block_size |
aligned_vector<K> tensorium::solver::Gauss< K >::data |
Referenced by tensorium::solver::Gauss< K >::for(), and tensorium::solver::Gauss< K >::for().
const size_t tensorium::solver::Gauss< K >::n = A_in.rows |
const size_t tensorium::solver::Gauss< K >::W = SimdT::width |
Referenced by tensorium::solver::Gauss< K >::for(), and tensorium::solver::Gauss< K >::for().
return tensorium::solver::Gauss< K >::x |
Referenced by tensorium::solver::Gauss< K >::for().