31 static constexpr std::string_view
name =
"direct_gemm_contraction";
36template <
class GemmSelector>
39namespace detail::direct_gemm_contraction_backend
42template <
class GemmSelector,
class OutputMdspec,
class Scalar,
class LhsMdspec,
class RhsMdspec>
43consteval bool gemm_dispatch_types_compatible()
48 return requires(GemmSelector
const& selector, output_matrix& output,
Scalar alpha, lhs_matrix& lhs, rhs_matrix& rhs) {
57 class GemmSelector, std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank,
58 MutableRankedContractionMdspecLike<ContractionAxes<LhsRank, RhsRank, ContractedRank>::output_rank> OutputMdspec,
60 RankedContractionMdspecLike<RhsRank> RhsMdspec>
63 LhsMdspec&, RhsMdspec&,
Scalar const&)
65 if constexpr (detail::direct_gemm_contraction_backend::gemm_dispatch_types_compatible<GemmSelector, OutputMdspec,
66 Scalar, LhsMdspec, RhsMdspec>())
74 class GemmSelector, std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank,
75 MutableRankedContractionMdspecLike<ContractionAxes<LhsRank, RhsRank, ContractedRank>::output_rank> OutputMdspec,
77 RankedContractionMdspecLike<RhsRank> RhsMdspec>
78 requires(detail::direct_gemm_contraction_backend::gemm_dispatch_types_compatible<GemmSelector, OutputMdspec,
Scalar,
79 LhsMdspec, RhsMdspec>())
81 contract_op<LhsRank, RhsRank, ContractedRank> const& operation, OutputMdspec& output,
Ordered backend selector values shared by tensor storage and linalg dispatch.
Concept for numeric scalar types (integer, real, or complex).
Definition scalar_concepts.hpp:81
Stride grouping and direct-GEMM projections for tensor contraction.
Operation-tag backend dispatch over tensor-view operands.
Fixed-output Tensor GEMM front end.
Definition linalg/async.hpp:28
auto make_contraction_matrix_mdspec(Mdspec &span, ContractionMatrixProjection const &projection) -> contraction_matrix_mdspec_t< Mdspec >
Project an mdspec into one rank-two GEMM operand without acquiring its handle.
Definition contraction_strides.hpp:367
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
bool try_dispatch_kernel(BackendSelector &&selector, Op op, Args &&... args)
Normalize a selector and try each eligible backend until one performs the operation.
Definition dispatch.hpp:348
typename detail::contraction_strides::ContractionMatrixMdspec< std::remove_cvref_t< Mdspec > >::type contraction_matrix_mdspec_t
Rank-two strided metadata type retaining an operand descriptor or immediate handle.
Definition contraction_strides.hpp:342
auto try_make_direct_contraction_gemm_plan(OutputMdspec const &output, LhsMdspec const &lhs, RhsMdspec const &rhs, ContractionAxes< LhsRank, RhsRank, ContractedRank > const &axes) -> std::optional< DirectContractionGemmPlan >
Try to collapse merged contraction groups to three rank-two GEMM operands.
Definition contraction_strides.hpp:227
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
mpreal beta(mpreal const &a, mpreal const &x)
Real Beta function; positive rational/integer pairs retain exact values.
Definition mpreal_special.hpp:164
Contract directly through one GEMM selected from a retained execution selector.
Definition linalg/backends/direct_gemm/contract.hpp:30
GemmSelector gemm_selector
Definition linalg/backends/direct_gemm/contract.hpp:33
static constexpr std::string_view name
Definition linalg/backends/direct_gemm/contract.hpp:31
Fixed-output pairwise tensor contraction operation.
Definition operation_tags.hpp:98
Fixed-output dense matrix multiplication operation tag.
Definition operation_tags.hpp:84