Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
linalg/backends/blas/mpfr.hpp
Go to the documentation of this file.
1#pragma once
2
8
9namespace uni20::linalg
10{
12template <MutableRankedMdspecLike<2> C, mpfr_detail::RuntimeScalar S, RankedMdspecLike<2> A, RankedMdspecLike<2> B>
13 requires HostWritableMdspec<C> && HostReadableMdspec<A> && HostReadableMdspec<B> &&
14 std::same_as<typename C::value_type, S> && std::same_as<typename A::value_type, S> &&
15 std::same_as<typename B::value_type, S>
16consteval auto kernel_accepts_types(BlasBackend, gemm_op const&, C&, S const&, A&, B&, S const&, Precision)
17{
18 return kernel_types_maybe;
19}
20
22template <MutableRankedMdspecLike<2> C, mpfr_detail::RuntimeScalar S, RankedMdspecLike<2> A, RankedMdspecLike<2> B>
24 std::same_as<typename C::value_type, S> && std::same_as<typename A::value_type, S> &&
25 std::same_as<typename B::value_type, S>
26KernelAttempt try_kernel(BlasBackend, gemm_op const&, C& c, S const& alpha, A& a, B& b, S const& beta, Precision p)
27{
28 if (p.is_exact()) return KernelAttempt::unsupported_instance;
29 ERROR_IF(a.extent(1) != b.extent(0) || c.extent(0) != a.extent(0) || c.extent(1) != b.extent(1),
30 "GEMM operand shapes do not agree");
31 if (c.extent(0) == 0 || c.extent(1) == 0) return KernelAttempt::success;
35 auto cs = ca.mdspan();
36 auto as = aa.mdspan();
37 auto bs = ba.mdspan();
38 auto av = mpfr_detail::pack(as, p, alpha != 0 && a.extent(1) != 0);
39 auto bv = mpfr_detail::pack(bs, p, alpha != 0 && a.extent(1) != 0);
40 auto cv = mpfr_detail::pack(cs, p, beta != 0);
41 mplapack::gemm(a.extent(0), b.extent(1), a.extent(1), alpha, mpfr_detail::values(av), mpfr_detail::values(bv), beta,
42 mpfr_detail::values(cv), p);
43 mpfr_detail::unpack(cv, cs);
45}
46
47} // namespace uni20::linalg
RAII leases that resolve device descriptors and tensor views to mdspans.
Synchronous packed-array boundary to the serial MPFR/MPC provider.
Exact arithmetic or an explicit binary working precision.
Definition core/precision.hpp:13
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.
Definition cli.cpp:6
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
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
Definition data_table.cpp:8
auto acquire_host_read_access_sync(Mdspan const &mdspan)
Acquire a directly host-accessible read-only mdspan.
Definition access.hpp:616
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-independent operation values used with normalized kernel operands.
Backend family for BLAS dense linalg kernels, including MPLAPACK scalar adapters.
Definition backend_selector.hpp:27
Fixed-output dense matrix multiplication operation tag.
Definition operation_tags.hpp:84
#define ERROR_IF(cond,...)
Definition trace.hpp:389