14template <MutableRankedMdspecLike<2> C, mplapack_binary80_detail::Binary80Scalar S, RankedMdspecLike<2> A,
15 RankedMdspecLike<2> B>
16 requires HostWritableMdspec<C> && HostReadableMdspec<A> && HostReadableMdspec<B> &&
17 std::same_as<typename C::value_type, S> && std::same_as<typename A::value_type, S> &&
18 std::same_as<typename B::value_type, S>
25template <MutableRankedMdspecLike<2> C, mplapack_binary80_detail::Binary80Scalar S, RankedMdspecLike<2> A,
26 RankedMdspecLike<2> B>
28 std::same_as<typename C::value_type, S> && std::same_as<typename A::value_type, S> &&
29 std::same_as<typename B::value_type, S>
32 ERROR_IF(a.extent(1) != b.extent(0) ||
c.extent(0) != a.extent(0) ||
c.extent(1) != b.extent(1),
33 "GEMM operand shapes do not agree");
38 auto cs = ca.mdspan();
39 auto as = aa.mdspan();
40 auto bs = ba.mdspan();
44 mplapack::gemm(a.extent(0), b.extent(1), a.extent(1), alpha, mplapack_binary80_detail::values(av),
45 mplapack_binary80_detail::values(bv),
beta, mplapack_binary80_detail::values(cv));
46 mplapack_binary80_detail::unpack(cv, cs);
51template <MutableRankedTensorView<2> C, mplapack_binary80_detail::Binary80Scalar S, RankedMdspecLike<2> A,
52 RankedMdspecLike<2> B>
54 std::same_as<tensor_element_t<C>, S> && std::same_as<typename A::value_type, S> &&
55 std::same_as<typename B::value_type, S>
62template <MutableRankedTensorView<2> C, mplapack_binary80_detail::Binary80Scalar S, RankedMdspecLike<2> A,
63 RankedMdspecLike<2> B>
65 std::same_as<tensor_element_t<C>, S> && std::same_as<typename A::value_type, S> &&
66 std::same_as<typename B::value_type, S>
69 auto shape = detail::matrix_product_shape(a, b);
76template <MutableRankedTensorView<2> C, mplapack_binary80_detail::Binary80Scalar S, RankedMdspecLike<2> A,
77 RankedMdspecLike<2> B>
79 std::same_as<tensor_element_t<C>, S> && std::same_as<typename A::value_type, S> &&
80 std::same_as<typename B::value_type, S>
87template <MutableRankedTensorView<2> C, mplapack_binary80_detail::Binary80Scalar S, RankedMdspecLike<2> A,
88 RankedMdspecLike<2> B>
90 std::same_as<tensor_element_t<C>, S> && std::same_as<typename A::value_type, S> &&
91 std::same_as<typename B::value_type, S>
93 S
const& alpha, A& a, B& b)
95 auto& output =
prepare_output(storage, detail::matrix_product_shape(a, b));
RAII leases that resolve device descriptors and tensor views to mdspans.
Binary80 scalar eligibility and logical host packing for BLAS/LAPACK adapters.
A lightweight, thread-safe, reference-counted storage for a single object.
Definition shared_storage.hpp:94
Mdspec metadata supporting host read acquisition.
Definition access.hpp:688
Mutable mdspec metadata supporting host write acquisition.
Definition access.hpp:694
Operation-tag backend dispatch over tensor-view operands.
Backend-independent dense matrix-product shape validation.
auto pack(Span const &span, bool read=true)
Definition binary80_common.hpp:23
Definition linalg/async.hpp:28
KernelAttempt try_kernel(BlasBackend, gemm_op const &, C &c, S const &alpha, A &a, B &b, S const &beta)
Pack logical host values and execute GEMM through value-preserving provider conversion.
Definition linalg/backends/blas/binary80.hpp:30
KernelAttempt
Result of one runtime kernel backend attempt.
Definition kernel_attempt.hpp:27
consteval auto kernel_accepts_types(BlasBackend, gemm_op const &, C &, S const &, A &, B &, S const &)
Accept host-readable native binary80 operands, including transforming accessors.
Definition linalg/backends/blas/binary80.hpp:19
constexpr KernelAcceptance< KernelTypeAcceptance::maybe > kernel_types_maybe
Report that runtime operand values determine backend acceptance.
Definition dispatch_error.hpp:37
constexpr KernelAcceptance< KernelTypeAcceptance::yes > kernel_types_yes
Report that a backend accepts every instance of the argument types.
Definition dispatch_error.hpp:40
void gemm(std::size_t m, std::size_t n, std::size_t k, float80 const &alpha, std::span< float80 const > a, std::span< float80 const > b, float80 const &beta, std::span< float80 > c)
Packed column-major binary80 GEMM; provider representations stay private.
Definition binary80.cpp:193
Output & prepare_output(Output &output, RequiredExtents const &required)
Prepare a mutable tensor output with the specified shape.
Definition tensor/output.hpp:104
auto acquire_host_read_access_sync(Mdspan const &mdspan)
Acquire a directly host-accessible read-only mdspan.
Definition access.hpp:616
constexpr decltype(auto) mdspec_of(Tensor &tensor) noexcept(noexcept(tensor.mdspec()))
Return a tensor's immediate or descriptor-backed multidimensional metadata.
Definition tensor/concepts.hpp:50
mpreal beta(mpreal const &a, mpreal const &x)
Real Beta function; positive rational/integer pairs retain exact values.
Definition mpreal_special.hpp:164
auto acquire_host_write_access_sync(Mdspan &mdspan)
Acquire a directly host-accessible writable mdspan.
Definition access.hpp:626
Backend family for BLAS dense linalg kernels, including MPLAPACK scalar adapters.
Definition backend_selector.hpp:27
Replaceable-output dense matrix product operation tag.
Definition operation_tags.hpp:75
Fixed-output dense matrix multiplication operation tag.
Definition operation_tags.hpp:84
Shape preparation contracts for tensor operation outputs.
#define ERROR_IF(cond,...)
Definition trace.hpp:389