|
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, 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, 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().