Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
linalg/backends/cpu/contract.hpp
Go to the documentation of this file.
1#pragma once
2
14
15#include <type_traits>
16
17namespace uni20::linalg
18{
19namespace detail::cpu_contract_backend
20{
21
22template <class OutputMdspec, class LhsMdspec, class RhsMdspec>
25
26template <class OutputMdspec, class Scalar, class LhsMdspec, class RhsMdspec, std::size_t LhsRank, std::size_t RhsRank,
27 std::size_t ContractedRank>
28consteval bool contraction_types_compatible()
29{
33 return uni20::linalg::cpu::ContractionCompatible<output_span, Scalar, lhs_span, rhs_span, LhsRank, RhsRank,
34 ContractedRank>;
35}
36
37} // namespace detail::cpu_contract_backend
38
40template <std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank,
43 requires detail::cpu_contract_backend::HostContractionAccess<OutputMdspec, LhsMdspec, RhsMdspec>
45 OutputMdspec&, Scalar const&, LhsMdspec&, RhsMdspec&, Scalar const&)
46{
47 if constexpr (detail::cpu_contract_backend::contraction_types_compatible<OutputMdspec, Scalar, LhsMdspec, RhsMdspec,
48 LhsRank, RhsRank, ContractedRank>())
49 return kernel_types_yes;
50 else
51 return kernel_types_no;
52}
53
55template <std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank,
58 requires detail::cpu_contract_backend::HostContractionAccess<OutputMdspec, LhsMdspec, RhsMdspec>
60 OutputMdspec& output, Scalar alpha, LhsMdspec& lhs, RhsMdspec& rhs, Scalar beta)
61{
62 auto output_access = acquire_host_write_access_sync(output);
63 auto lhs_access = acquire_host_read_access_sync(lhs);
64 auto rhs_access = acquire_host_read_access_sync(rhs);
65 auto& output_span = output_access.mdspan();
66 auto& lhs_span = lhs_access.mdspan();
67 auto& rhs_span = rhs_access.mdspan();
68 uni20::linalg::cpu::contract(output_span, alpha, lhs_span, rhs_span, beta, operation.axes);
70}
71
72} // namespace uni20::linalg
RAII leases that resolve device descriptors and tensor views to mdspans.
Mdspec metadata supporting host read acquisition.
Definition access.hpp:688
Mutable mdspec metadata supporting host write acquisition.
Definition access.hpp:694
Mutable mdspec-like type with a specified static rank.
Definition mdspan/concepts.hpp:487
An mdspec-like type with a specified static rank.
Definition mdspan/concepts.hpp:454
Concept for numeric scalar types (integer, real, or complex).
Definition scalar_concepts.hpp:81
Report whether resolved mdspans support reference contraction expressions.
Definition linalg/cpu/contract.hpp:268
Operation-tag backend dispatch over tensor-view operands.
Accessor-respecting reference CPU tensor contraction.
void contract(OutputMdspan &output, Scalar alpha, LhsMdspan &lhs, RhsMdspan &rhs, Scalar beta, ContractionAxes< LhsRank, RhsRank, ContractedRank > const &axes)
Execute a fixed-output pairwise contraction over resolved host mdspans.
Definition linalg/cpu/contract.hpp:294
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
constexpr KernelAcceptance< KernelTypeAcceptance::no > kernel_types_no
Report that a backend rejects the argument types.
Definition dispatch_error.hpp:34
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::yes > kernel_types_yes
Report that a backend accepts every instance of the argument types.
Definition dispatch_error.hpp:40
std::remove_cvref_t< decltype(std::declval< detail::host_read_mdspan_lease_t< Mdspec > & >().mdspan())> host_read_mdspan_t
Read-only mdspan type resolved by host descriptor acquisition.
Definition access.hpp:679
auto acquire_host_read_access_sync(Mdspan const &mdspan)
Acquire a directly host-accessible read-only mdspan.
Definition access.hpp:616
std::remove_cvref_t< decltype(std::declval< detail::host_write_mdspan_lease_t< Mdspec > & >().mdspan())> host_write_mdspan_t
Writable mdspan type resolved by host descriptor acquisition.
Definition access.hpp:684
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 value for the reference host CPU dense linalg oracle.
Definition backend_selector.hpp:55
Fixed-output pairwise tensor contraction operation.
Definition operation_tags.hpp:98