11#include <guanaqo/trace.hpp>
35 const index_t M = A.rows(), K = A.cols(), N = B.cols();
39 if (M == 0 || N == 0 || K == 0) [[unlikely]]
52template <MatrixStructure SA, simdifiable VA, simdifiable VB, simdifiable VD,
int RotB = 0>
59template <MatrixStructure SA, simdifiable VA, simdifiable VD,
int RotB = 0>
66template <MatrixStructure SB, simdifiable VA, simdifiable VB, simdifiable VD,
int RotA = 0>
71 {.struc_A =
transpose(SB), .rotate_B = RotA}>(
76template <MatrixStructure SB, simdifiable VB, simdifiable VD,
int RotA = 0>
constexpr FlopCount trsm(index_t m, index_t n)
Triangular solve of m×n matrices.
void trsm(Structured< VA, SA > A, VB &&B, VD &&D, with_rotate_B_t< RotB >={})
D = A⁻¹ B with A triangular.
constexpr MatrixStructure transpose(MatrixStructure s)
#define GUANAQO_TRACE_LINALG(name, gflops)
void trsm(view< const T, Abi, OA > A, view< const T, Abi, OB > B, view< T, Abi, OD > D)
void trsm_copy_register(view< const T, Abi, OA > A, view< const T, Abi, OB > B, view< T, Abi, OD > D) noexcept
Triangular solve D = (A⁽ᵀ⁾)⁻¹ B⁽ᵀ⁾ where A⁽ᵀ⁾ is lower triangular.
typename detail::simdified_abi< V >::type simdified_abi_t
constexpr with_rotate_B_t< I > with_rotate_B
constexpr bool simdify_compatible
constexpr auto simdify(simdifiable auto &&a) -> simdified_view_t< decltype(a)>
constexpr with_rotate_A_t< I > with_rotate_A
simd_view_types< std::remove_const_t< T >, Abi >::template view< T, Order > view
Aligned allocation for matrix storage.
Light-weight wrapper class used for overload resolution of triangular and symmetric matrices.