batmat 0.0.13
Batched linear algebra routines
Loading...
Searching...
No Matches
trtri.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <batmat/assume.hpp>
9#include <guanaqo/trace.hpp>
10
11namespace batmat::linalg {
12
13namespace detail {
14template <class T, class Abi, micro_kernels::trtri::KernelConfig Conf, StorageOrder OA,
15 StorageOrder OD>
16 requires(Conf.struc != MatrixStructure::General)
18 // Check dimensions
19 BATMAT_ASSERT(D.rows() == D.cols()); // TODO: could be relaxed
20 BATMAT_ASSERT(A.rows() == D.rows());
21 BATMAT_ASSERT(A.cols() == D.cols());
22 const index_t M = D.rows(), N = D.cols();
23 [[maybe_unused]] const auto fc = flops::trtri(M);
24 GUANAQO_TRACE_LINALG("trtri", total(fc) * D.depth());
25 // Degenerate case
26 if (M == 0 || N == 0) [[unlikely]]
27 return;
29}
30} // namespace detail
31
32/// @addtogroup topic-linalg
33/// @{
34
35/// @name Triangular inversion of batches of matrices
36/// @{
37
38/// D = A⁻¹ with A, D lower triangular
39template <simdifiable VA, simdifiable VD>
47
48/// D = A⁻¹ with A, D upper triangular
49template <simdifiable VA, simdifiable VD>
55
56/// D = D⁻¹ with D lower triangular
57template <simdifiable VD>
63
64/// D = D⁻¹ with D upper triangular
65template <simdifiable VD>
69
70/// @}
71
72/// @}
73
74} // namespace batmat::linalg
#define BATMAT_ASSERT(x)
Definition assume.hpp:14
constexpr FlopCount trtri(index_t m)
Triangular inversion of an m×m matrix.
Definition flops.hpp:199
void trtri(Structured< VA, MatrixStructure::LowerTriangular > A, Structured< VD, MatrixStructure::LowerTriangular > D)
D = A⁻¹ with A, D lower triangular.
Definition trtri.hpp:41
#define GUANAQO_TRACE_LINALG(name, gflops)
void trtri(view< const T, Abi, OA > A, view< T, Abi, OD > D)
Definition trtri.hpp:17
void trtri_copy_register(view< const T, Abi, OA > A, view< T, Abi, OD > D) noexcept
Definition trtri.tpp:132
typename detail::simdified_abi< V >::type simdified_abi_t
Definition simdify.hpp:204
constexpr bool simdify_compatible
Definition simdify.hpp:207
constexpr auto simdify(simdifiable auto &&a) -> simdified_view_t< decltype(a)>
Definition simdify.hpp:214
simd_view_types< std::remove_const_t< T >, Abi >::template view< T, Order > view
Definition uview.hpp:70
Light-weight wrapper class used for overload resolution of triangular and symmetric matrices.
constexpr auto transposed() const &