12#include <guanaqo/trace.hpp>
17template <
class T,
class Abi, index_t R, StorageOrder OD>
18 requires(std::is_same_v<Abi, datapar::scalar_abi<T>> && OD == StorageOrder::ColMajor)
24 const index_t M = D.rows(), N = D.cols();
27 if (M == 0 || N == 0) [[unlikely]]
34 requires(std::is_same_v<Abi, datapar::scalar_abi<T>> && OD == StorageOrder::ColMajor)
41 const index_t M = D.rows(), N = D.cols();
44 if (M == 0 || N == 0) [[unlikely]]
57template <index_t R = 4, MatrixStructure SD, simdifiable VA, simdifiable VD>
62 static_assert(
decltype(
simdify(D.
value))::storage_order == StorageOrder::ColMajor);
68template <index_t R = 4, MatrixStructure SD, simdifiable VD>
80 static_assert(
decltype(
simdify(A))::storage_order == StorageOrder::ColMajor);
81 static_assert(
decltype(
simdify(C.
value))::storage_order == StorageOrder::ColMajor);
82 static_assert(
decltype(
simdify(D.
value))::storage_order == StorageOrder::ColMajor);
94 static_assert(
decltype(
simdify(A))::storage_order == StorageOrder::ColMajor);
95 static_assert(
decltype(
simdify(C.
value))::storage_order == StorageOrder::ColMajor);
96 static_assert(
decltype(
simdify(D.
value))::storage_order == StorageOrder::ColMajor);
102template <index_t R = 4, index_t S = 8, MatrixStructure SD, simdifiable VA, simdifiable VD>
109template <index_t R = 4, index_t S = 8, MatrixStructure SD, simdifiable VA, simdifiable VD>
116template <index_t R = 4, index_t S = 8, simdifiable VC, MatrixStructure SD, simdifiable VD>
119 decltype(
simdify(D.
value).as_const()) null{{.data =
nullptr, .rows = 0, .cols = 0}};
124template <index_t R = 4, index_t S = 8, MatrixStructure SD, simdifiable VD>
constexpr FlopCount syrk_potrf(index_t m, index_t n, index_t k)
Fused symmetric rank-k update and Cholesky factorization of an m×n matrix with m≥n.
constexpr FlopCount potrf(index_t m, index_t n)
Cholesky factorization and triangular solve for an m×n matrix with m≥n.
void small_potrf(Structured< VA, SD > A, Structured< VD, SD > D)
D = chol(A) with A symmetric, D triangular.
void small_syrk_sub_potrf_left(VA &&A, Structured< VC, SD > C, Structured< VD, SD > D)
D = chol(C-AAᵀ) with C symmetric, D triangular.
void small_potrf_left(Structured< VC, SD > C, Structured< VD, SD > D)
D = chol(C) with C symmetric, D triangular.
void small_syrk_add_potrf_left(VA &&A, Structured< VC, SD > C, Structured< VD, SD > D)
D = chol(C+AAᵀ) with C symmetric, D triangular.
#define GUANAQO_TRACE_LINALG(name, gflops)
deduced_abi< Tp, 1 > scalar_abi
void small_potrf_left(view< const T, Abi, OD > A, view< const T, Abi, OD > C, view< T, Abi, OD > D)
void small_potrf(view< const T, Abi, OD > A, view< T, Abi, OD > D)
void small_potrf_left(view< const T, datapar::scalar_abi< T > > A, view< const T, datapar::scalar_abi< T > > C, view< T, datapar::scalar_abi< T > > D) noexcept
void small_potrf(view< const T, datapar::scalar_abi< T > > A, view< T, datapar::scalar_abi< T > > L, index_t n=-1) noexcept
typename detail::simdified_abi< V >::type simdified_abi_t
constexpr bool simdify_compatible
constexpr auto simdify(simdifiable auto &&a) -> simdified_view_t< decltype(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.