Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
ops/gemv.hpp
Go to the documentation of this file.
1#pragma once
2
13
14#if UNI20_BACKEND_BLAS
16#endif
17
18#include <utility>
19
20namespace uni20::linalg
21{
22
32template <class BackendSelector, uni20::MutableRankedTensorView<1> OutputTensor, class Scalar,
33 uni20::RankedTensorView<2> MatrixTensor, uni20::RankedTensorView<1> InputTensor>
34void gemv(BackendSelector&& selector, OutputTensor&& output, Scalar alpha, MatrixTensor const& matrix,
35 InputTensor const& input, Scalar beta)
36{
37 auto output_span = uni20::mdspec_of(output);
38 auto matrix_span = uni20::mdspec_of(matrix);
39 auto input_span = uni20::mdspec_of(input);
40 dispatch_kernel(std::forward<BackendSelector>(selector), gemv_op{}, output_span, alpha, matrix_span, input_span,
41 beta);
42}
43
45template <uni20::MutableRankedTensorView<1> OutputTensor, class Scalar, uni20::RankedTensorView<2> MatrixTensor,
46 uni20::RankedTensorView<1> InputTensor>
47void gemv(OutputTensor&& output, Scalar alpha, MatrixTensor const& matrix, InputTensor const& input, Scalar beta)
48{
49 auto selector = select_backend(gemv_op{}, output, matrix, input);
50 gemv(selector, std::forward<OutputTensor>(output), alpha, matrix, input, beta);
51}
52
53} // namespace uni20::linalg
BLAS backend adapter for operation-tag GEMV dispatch.
Reference CPU GEMV backend for tensor-view operands.
Concept for numeric scalar types (integer, real, or complex).
Definition scalar_concepts.hpp:81
Operation-tag backend dispatch over tensor-view operands.
Definition linalg/async.hpp:28
void gemv(BackendSelector selector, async::Async< OutputTensor > &output, Alpha &&alpha, async::Async< MatrixTensor > const &matrix, async::Async< InputTensor > const &input, Beta &&beta)
Schedule fixed-output GEMV through an explicit backend selector.
Definition async/gemv.hpp:73
constexpr auto select_backend(Operation const &operation, FirstTensor const &, RestTensors const &...)
Select the default backend list for an operation on Tensor operands.
Definition backend_selector.hpp:252
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
constexpr decltype(auto) mdspec_of(Tensor &tensor) noexcept(noexcept(tensor.mdspec()))
Return a tensor's immediate or descriptor-backed multidimensional metadata.
Definition tensor/concepts.hpp:50
mpreal beta(mpreal const &a, mpreal const &x)
Real Beta function; positive rational/integer pairs retain exact values.
Definition mpreal_special.hpp:164
Backend-independent operation values used with normalized kernel operands.
Dense matrix-vector multiplication operation tag.
Definition operation_tags.hpp:90
Concepts for tensor-level objects that resolve mdspan kernel operands.