|
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 >::regT = typename SimdT::reg |
| 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 |
| tensorium::solver::Gauss< K >::assert | ( | n | = =A_in.cols &&n==b_in.size() | ) |
|
inline |
References MathsUtils::_abs(), MathsUtils::_swap(), B, M, n, rowi(), rowj(), and W.
|
inline |
|
inlinestatic |
References MathsUtils::_abs(), MathsUtils::_swap(), assert(), tensorium::Matrix< K, RowMajor >::cols, 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 | ) |
| aligned_vector< K > tensorium::solver::Gauss< K >::rowj | ( | n | ) |
| size_t tensorium::solver::Gauss< K >::rows | ( | ) | const |
| Vector< K > tensorium::solver::Gauss< K >::x | ( | n | ) |
References n.
| Vector<K> tensorium::solver::Gauss< K >::B = b_in |
| const Vector<K>& tensorium::solver::Gauss< K >::b_in |
Referenced by assert().
| size_t tensorium::solver::Gauss< K >::block_size |
| aligned_vector<K> tensorium::solver::Gauss< K >::data |
| if (n >= 1024) return Jacobi<K> Matrix<K> tensorium::solver::Gauss< K >::M = A_in |
| const size_t tensorium::solver::Gauss< K >::n = A_in.rows |
| const size_t tensorium::solver::Gauss< K >::W = SimdT::width |
| return tensorium::solver::Gauss< K >::x |
Referenced by for().