Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
Classes | Namespaces | Functions
contract.hpp File Reference

Fixed-output pairwise Tensor contraction front end. More...

#include <uni20/common/trace.hpp>
#include <uni20/linalg/backends/cpu/contract.hpp>
#include <uni20/linalg/backends/direct_gemm/contract.hpp>
#include <uni20/linalg/backends/looped_gemm/contract.hpp>
#include <uni20/linalg/contraction_axes.hpp>
#include <uni20/linalg/dispatch.hpp>
#include <uni20/linalg/operation_tags.hpp>
#include <uni20/tensor/concepts.hpp>
#include <uni20/tensor/output.hpp>
#include <array>
#include <concepts>
#include <cstddef>
#include <memory>
#include <tuple>
#include <type_traits>
#include <utility>
Include dependency graph for linalg/ops/contract.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  uni20::linalg::backend_selector_default< contract_op< LhsRank, RhsRank, ContractedRank >, StoragePolicy >
 Install GEMM contraction strategies around a storage execution selector. More...
 

Namespaces

namespace  uni20
 
namespace  uni20::linalg
 

Functions

template<class BackendSelector , class OutputTensor , class LhsTensor , class RhsTensor , std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
requires detail::CompatibleContractionTensors<OutputTensor, LhsTensor, RhsTensor> && uni20::MutableRankedTensorView<OutputTensor, ContractionAxes<LhsRank, RhsRank, ContractedRank>::output_rank> && uni20::RankedTensorView<LhsTensor, LhsRank> && uni20::RankedTensorView<RhsTensor, RhsRank>
void uni20::linalg::contract (BackendSelector &&selector, OutputTensor &&output, uni20::tensor_element_t< OutputTensor > alpha, LhsTensor const &lhs, RhsTensor const &rhs, ContractionAxes< LhsRank, RhsRank, ContractedRank > axes, uni20::tensor_element_t< OutputTensor > beta)
 Contract two tensors into an existing fixed-storage output.
 
template<class BackendSelector , class OutputTensor , class LhsTensor , class RhsTensor , std::size_t ContractedRank>
requires detail::CompatibleContractionTensors<OutputTensor, LhsTensor, RhsTensor> && (ContractedRank <= uni20::tensor_mdspec_t<LhsTensor>::rank()) && (ContractedRank <= uni20::tensor_mdspec_t<RhsTensor>::rank()) && (uni20::tensor_mdspec_t<OutputTensor>::rank() == uni20::tensor_mdspec_t<LhsTensor>::rank() + uni20::tensor_mdspec_t<RhsTensor>::rank() - 2 * ContractedRank)
void uni20::linalg::contract (BackendSelector &&selector, OutputTensor &&output, uni20::tensor_element_t< OutputTensor > alpha, LhsTensor const &lhs, RhsTensor const &rhs, std::array< std::pair< std::size_t, std::size_t >, ContractedRank > requested_axes, uni20::tensor_element_t< OutputTensor > beta)
 Contract two tensors using an explicit selector and raw axis pairs.
 
template<class OutputTensor , class LhsTensor , class RhsTensor , std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
requires detail::CompatibleContractionTensors<OutputTensor, LhsTensor, RhsTensor> && uni20::MutableRankedTensorView<OutputTensor, ContractionAxes<LhsRank, RhsRank, ContractedRank>::output_rank> && uni20::RankedTensorView<LhsTensor, LhsRank> && uni20::RankedTensorView<RhsTensor, RhsRank>
void uni20::linalg::contract (OutputTensor &&output, uni20::tensor_element_t< OutputTensor > alpha, LhsTensor const &lhs, RhsTensor const &rhs, ContractionAxes< LhsRank, RhsRank, ContractedRank > axes, uni20::tensor_element_t< OutputTensor > beta)
 Contract two tensors using their default backend selector.
 
template<class OutputTensor , class LhsTensor , class RhsTensor , std::size_t ContractedRank>
requires detail::CompatibleContractionTensors<OutputTensor, LhsTensor, RhsTensor> && (ContractedRank <= uni20::tensor_mdspec_t<LhsTensor>::rank()) && (ContractedRank <= uni20::tensor_mdspec_t<RhsTensor>::rank()) && (uni20::tensor_mdspec_t<OutputTensor>::rank() == uni20::tensor_mdspec_t<LhsTensor>::rank() + uni20::tensor_mdspec_t<RhsTensor>::rank() - 2 * ContractedRank)
void uni20::linalg::contract (OutputTensor &&output, uni20::tensor_element_t< OutputTensor > alpha, LhsTensor const &lhs, RhsTensor const &rhs, std::array< std::pair< std::size_t, std::size_t >, ContractedRank > requested_axes, uni20::tensor_element_t< OutputTensor > beta)
 Contract two tensors using storage policy and raw axis pairs.
 

Detailed Description

Fixed-output pairwise Tensor contraction front end.