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

Async Tensor wrappers for matrix-product overwrite and update operations. More...

#include <uni20/async/async.hpp>
#include <uni20/async/awaiters.hpp>
#include <uni20/async/debug_scheduler.hpp>
#include <uni20/common/trace.hpp>
#include <uni20/linalg/async/concepts.hpp>
#include <uni20/linalg/async/detail/output.hpp>
#include <uni20/linalg/async/dispatch.hpp>
#include <uni20/linalg/ops/matrix_product.hpp>
#include <uni20/tensor/output.hpp>
#include <concepts>
#include <memory>
#include <tuple>
#include <type_traits>
#include <utility>
Include dependency graph for async/matrix_product.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  uni20
 
namespace  uni20::linalg
 

Functions

template<uni20::AsyncTensorOutput Output, RankedTensorView< 2 > A, RankedTensorView< 2 > B>
requires detail::CompatibleMatrixProductTensors<Output, A, B>
void uni20::linalg::add_product (async::Async< Output > &output, async::Async< A > const &a, async::Async< B > const &b, std::optional< Precision > p={})
 Schedule a unit-coefficient accumulation using storage-selected backends.
 
template<uni20::MutableRankedTensorView< 2 > OutputTensor, uni20::RankedTensorView< 2 > LhsTensor, uni20::RankedTensorView< 2 > RhsTensor, class Alpha = uni20::tensor_element_t<OutputTensor>>
requires uni20::AsyncTensorOutput<OutputTensor> && detail::CompatibleMatrixProductTensors<OutputTensor, LhsTensor, RhsTensor> && AsyncOperationScalar<Alpha, uni20::tensor_element_t<OutputTensor>>
void uni20::linalg::add_product (async::Async< OutputTensor > &output, async::Async< LhsTensor > const &lhs, async::Async< RhsTensor > const &rhs, Alpha &&alpha, std::optional< Precision > p={})
 Schedule output += alpha * lhs * rhs using the static Tensor selector.
 
template<class BackendSelector , uni20::MutableRankedTensorView< 2 > OutputTensor, uni20::RankedTensorView< 2 > LhsTensor, uni20::RankedTensorView< 2 > RhsTensor, class Alpha = uni20::tensor_element_t<OutputTensor>>
requires uni20::AsyncTensorOutput<OutputTensor> && detail::CompatibleMatrixProductTensors<OutputTensor, LhsTensor, RhsTensor> && AsyncOperationScalar<Alpha, uni20::tensor_element_t<OutputTensor>>
void uni20::linalg::add_product (BackendSelector selector, async::Async< OutputTensor > &output, async::Async< LhsTensor > const &lhs, async::Async< RhsTensor > const &rhs, Alpha &&alpha, std::optional< Precision > p={})
 Schedule output += alpha * lhs * rhs with an explicit backend selector.
 
template<KernelBackendSelector Selector, uni20::AsyncTensorOutput Output, RankedTensorView< 2 > A, RankedTensorView< 2 > B>
requires detail::CompatibleMatrixProductTensors<Output, A, B>
void uni20::linalg::add_product (Selector selector, async::Async< Output > &output, async::Async< A > const &a, async::Async< B > const &b, std::optional< Precision > p={})
 Schedule a unit-coefficient accumulation at inferred or explicit precision.
 
template<uni20::AsyncTensorOutput Output, RankedTensorView< 2 > A, RankedTensorView< 2 > B>
requires detail::CompatibleMatrixProductTensors<Output, A, B>
void uni20::linalg::assign_product (async::Async< Output > &output, async::Async< A > const &a, async::Async< B > const &b, std::optional< Precision > p={})
 Schedule a unit-coefficient product using storage-selected backends.
 
template<uni20::MutableRankedTensorView< 2 > OutputTensor, uni20::RankedTensorView< 2 > LhsTensor, uni20::RankedTensorView< 2 > RhsTensor, class Alpha = uni20::tensor_element_t<OutputTensor>>
requires uni20::AsyncTensorOutput<OutputTensor> && detail::CompatibleMatrixProductTensors<OutputTensor, LhsTensor, RhsTensor> && AsyncOperationScalar<Alpha, uni20::tensor_element_t<OutputTensor>>
void uni20::linalg::assign_product (async::Async< OutputTensor > &output, async::Async< LhsTensor > const &lhs, async::Async< RhsTensor > const &rhs, Alpha &&alpha, std::optional< Precision > p={})
 Schedule output = alpha * lhs * rhs using the static Tensor selector.
 
template<class BackendSelector , uni20::MutableRankedTensorView< 2 > OutputTensor, uni20::RankedTensorView< 2 > LhsTensor, uni20::RankedTensorView< 2 > RhsTensor, class Alpha = uni20::tensor_element_t<OutputTensor>>
requires uni20::AsyncTensorOutput<OutputTensor> && detail::CompatibleMatrixProductTensors<OutputTensor, LhsTensor, RhsTensor> && AsyncOperationScalar<Alpha, uni20::tensor_element_t<OutputTensor>>
void uni20::linalg::assign_product (BackendSelector selector, async::Async< OutputTensor > &output, async::Async< LhsTensor > const &lhs, async::Async< RhsTensor > const &rhs, Alpha &&alpha, std::optional< Precision > p={})
 Schedule output = alpha * lhs * rhs with an explicit backend selector.
 
template<KernelBackendSelector Selector, uni20::AsyncTensorOutput Output, RankedTensorView< 2 > A, RankedTensorView< 2 > B>
requires detail::CompatibleMatrixProductTensors<Output, A, B>
void uni20::linalg::assign_product (Selector selector, async::Async< Output > &output, async::Async< A > const &a, async::Async< B > const &b, std::optional< Precision > p={})
 Schedule a unit-coefficient product at inferred or explicit precision.
 
template<uni20::MutableRankedTensorView< 2 > OutputTensor, uni20::RankedTensorView< 2 > LhsTensor, uni20::RankedTensorView< 2 > RhsTensor, class Alpha , class Beta >
requires uni20::AsyncTensorOutput<OutputTensor> && detail::CompatibleMatrixProductTensors<OutputTensor, LhsTensor, RhsTensor> && AsyncOperationScalar<Alpha, uni20::tensor_element_t<OutputTensor>> && AsyncOperationScalar<Beta, uni20::tensor_element_t<OutputTensor>>
void uni20::linalg::gemm (async::Async< OutputTensor > &output, Alpha &&alpha, async::Async< LhsTensor > const &lhs, async::Async< RhsTensor > const &rhs, Beta &&beta, std::optional< Precision > p={})
 Schedule fixed-output GEMM using the static Tensor selector.
 
template<class BackendSelector , uni20::MutableRankedTensorView< 2 > OutputTensor, uni20::RankedTensorView< 2 > LhsTensor, uni20::RankedTensorView< 2 > RhsTensor, class Alpha , class Beta >
requires uni20::AsyncTensorOutput<OutputTensor> && detail::CompatibleMatrixProductTensors<OutputTensor, LhsTensor, RhsTensor> && AsyncOperationScalar<Alpha, uni20::tensor_element_t<OutputTensor>> && AsyncOperationScalar<Beta, uni20::tensor_element_t<OutputTensor>>
void uni20::linalg::gemm (BackendSelector selector, async::Async< OutputTensor > &output, Alpha &&alpha, async::Async< LhsTensor > const &lhs, async::Async< RhsTensor > const &rhs, Beta &&beta, std::optional< Precision > p={})
 Schedule fixed-output GEMM with an explicit backend selector.
 

Detailed Description

Async Tensor wrappers for matrix-product overwrite and update operations.