9#include <guanaqo/trace.hpp>
14template <
class T,
class Abi, micro_kernels::symv::KernelConfig Conf = {},
StorageOrder OA>
22 const index_t M = D.rows();
31 if (M == 0) [[unlikely]]
45template <MatrixStructure SA, simdifiable VA, simdifiable VB, simdifiable VD>
49 std::optional<
decltype(
simdify(D).as_const())> null;
55template <MatrixStructure SA, simdifiable VA, simdifiable VB, simdifiable VD>
59 std::optional<
decltype(
simdify(D).as_const())> null;
65template <MatrixStructure SA, simdifiable VA, simdifiable VB, simdifiable VC, simdifiable VD>
73template <MatrixStructure SA, simdifiable VA, simdifiable VB, simdifiable VD>
80template <MatrixStructure SA, simdifiable VA, simdifiable VB, simdifiable VC, simdifiable VD>
88template <MatrixStructure SA, simdifiable VA, simdifiable VB, simdifiable VD>
void symv_sub(Structured< VA, SA > A, VB &&B, VC &&C, VD &&D)
d = c - A b where A is symmetric
void symv_add(Structured< VA, SA > A, VB &&B, VC &&C, VD &&D)
d = c + A b where A is symmetric
void symv_neg(Structured< VA, SA > A, VB &&B, VD &&D)
d = -A b where A is symmetric
void symv(Structured< VA, SA > A, VB &&B, VD &&D)
d = A b where A is symmetric
#define GUANAQO_TRACE_LINALG(name, gflops)
void symv(view< const T, Abi, OA > A, view< const T, Abi > B, std::optional< view< const T, Abi > > C, view< T, Abi > D)
void symv_copy_register(view< const T, Abi, OA > A, view< const T, Abi > B, std::optional< view< const T, Abi > > C, view< T, Abi > D) noexcept
Generalized matrix multiplication d = c ± A⁽ᵀ⁾ b. Using register blocking.
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.