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

Ordered backend selector values shared by tensor storage and linalg dispatch. More...

#include <concepts>
#include <string_view>
#include <tuple>
#include <type_traits>
#include <utility>
Include dependency graph for backend_selector.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_list< Backends >
 Ordered list of backend values tried by the dispatch walk. More...
 
struct  uni20::linalg::backend_selector_default< Operation, StoragePolicy >
 Uni20-owned operation-specific default for a storage policy. More...
 
struct  uni20::linalg::backend_selector_override< Operation, StoragePolicy >
 Optional global backend-selector override for an operation and storage policy. More...
 
struct  uni20::linalg::BlasBackend
 Backend family for BLAS dense linalg kernels, including MPLAPACK scalar adapters. More...
 
struct  uni20::linalg::CpuReferenceBackend
 Backend value for the reference host CPU dense linalg oracle. More...
 
struct  uni20::linalg::CublasBackend
 Backend value for cuBLAS dense linalg kernels. More...
 
struct  uni20::linalg::CudaReferenceBackend
 Backend value for generic CUDA runtime kernels and transfers. More...
 
struct  uni20::linalg::CusolverBackend
 Backend value for cuSOLVER dense factorization kernels. More...
 
struct  uni20::linalg::is_backend_list< T >
 
struct  uni20::linalg::is_backend_list< backend_list< Backends... > >
 
struct  uni20::linalg::LapackBackend
 Backend family for configured dense LAPACK kernels, including MPLAPACK scalar adapters. More...
 

Namespaces

namespace  uni20
 
namespace  uni20::linalg
 

Concepts

concept  uni20::linalg::KernelBackend
 Named backend value accepted as one dispatch candidate.
 
concept  uni20::linalg::KernelBackendSelector
 Single named backend or ordered backend list accepted by dispatch front ends.
 

Functions

template<class... Backends>
 uni20::linalg::backend_list (Backends...) -> backend_list< std::remove_cvref_t< Backends >... >
 
template<class Backend >
requires (!is_backend_list_v<Backend>)
constexpr auto uni20::linalg::normalize_backend_selector (Backend &&backend)
 Treat a single backend value as a one-entry backend list.
 
template<class... Backends>
constexpr auto uni20::linalg::normalize_backend_selector (backend_list< Backends... > selector) -> backend_list< Backends... >
 Return an explicit backend list unchanged.
 
template<class Operation , class FirstTensor , class... RestTensors>
constexpr auto uni20::linalg::select_backend (Operation const &operation, FirstTensor const &, RestTensors const &...)
 Select the default backend list for an operation on Tensor operands.
 
template<class FirstTensor , class... RestTensors, class Operation >
constexpr auto uni20::linalg::select_backend_for (Operation const &operation)
 Resolve the immutable backend selector for Tensor operand types.
 
template<class StoragePolicy , class Operation >
constexpr auto uni20::linalg::select_backend_for_storage (Operation const &operation)
 Resolve a backend selector directly from one storage policy.
 

Variables

template<class StoragePolicy >
constexpr bool uni20::linalg::enable_backend_neutral_storage = false
 Opt-in marker for storage policies that do not constrain backend selection.
 
template<class T >
constexpr bool uni20::linalg::is_backend_list_v = is_backend_list<std::remove_cvref_t<T>>::value
 

Detailed Description

Ordered backend selector values shared by tensor storage and linalg dispatch.