31 static constexpr std::string_view
name =
"looped_gemm_contraction";
36template <
class GemmSelector>
39namespace detail::looped_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, OutputMdspec& output_source, LhsMdspec& lhs_source,
50 output_matrix& output,
Scalar alpha, lhs_matrix& lhs, rhs_matrix& rhs) {
62 class GemmSelector, std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank,
63 MutableRankedContractionMdspecLike<ContractionAxes<LhsRank, RhsRank, ContractedRank>::output_rank> OutputMdspec,
65 RankedContractionMdspecLike<RhsRank> RhsMdspec>
68 LhsMdspec&, RhsMdspec&,
Scalar const&)
70 if constexpr (detail::looped_gemm_contraction_backend::gemm_dispatch_types_compatible<GemmSelector, OutputMdspec,
71 Scalar, LhsMdspec, RhsMdspec>())
84 class GemmSelector, std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank,
85 MutableRankedContractionMdspecLike<ContractionAxes<LhsRank, RhsRank, ContractedRank>::output_rank> OutputMdspec,
87 RankedContractionMdspecLike<RhsRank> RhsMdspec>
88 requires(detail::looped_gemm_contraction_backend::gemm_dispatch_types_compatible<GemmSelector, OutputMdspec,
Scalar,
89 LhsMdspec, RhsMdspec>())
91 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
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
void dispatch_kernel(BackendSelector &&selector, Op op, Args &&... args)
Normalize a selector and dispatch or report that every eligible backend declined.
Definition dispatch.hpp:374
auto try_make_looped_contraction_gemm_plan(OutputMdspec const &output, LhsMdspec const &lhs, RhsMdspec const &rhs, ContractionAxes< LhsRank, RhsRank, ContractedRank > const &axes) -> std::optional< LoopedContractionGemmPlan >
Try to leave one residual M or N dimension around a GEMM projection.
Definition contraction_strides.hpp:256
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
auto make_offset_contraction_matrix_mdspec(Mdspec &span, ContractionMatrixProjection const &projection, uni20::index_type element_offset) -> offset_contraction_matrix_mdspec_t< Mdspec >
Project a rank-two mdspec slice at one nonnegative element offset.
Definition contraction_strides.hpp:390
typename detail::contraction_strides::OffsetContractionMatrixMdspec< std::remove_cvref_t< Mdspec > >::type offset_contraction_matrix_mdspec_t
Rank-two strided metadata type whose storage origin may be advanced.
Definition contraction_strides.hpp:347
std::ptrdiff_t index_type
Definition types.hpp:19
mpreal beta(mpreal const &a, mpreal const &x)
Real Beta function; positive rational/integer pairs retain exact values.
Definition mpreal_special.hpp:164
Extents and strides for one rank-two projection of a contraction operand.
Definition contraction_strides.hpp:106
Contract through a loop of GEMMs selected from one retained execution selector.
Definition linalg/backends/looped_gemm/contract.hpp:30
static constexpr std::string_view name
Definition linalg/backends/looped_gemm/contract.hpp:31
GemmSelector gemm_selector
Definition linalg/backends/looped_gemm/contract.hpp:33
Fixed-output pairwise tensor contraction operation.
Definition operation_tags.hpp:98
Fixed-output dense matrix multiplication operation tag.
Definition operation_tags.hpp:84