Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
linalg/precision.hpp
Go to the documentation of this file.
1#pragma once
2
5
6namespace uni20::linalg::detail
7{
11template <class S, class Selector, class Operation, class... Args>
12 requires((has_runtime_precision_v<S> &&
13 requires(Selector&& selector, Operation const& op, Precision p, Args&&... args) {
14 dispatch_kernel(std::forward<Selector>(selector), op, std::forward<Args>(args)..., p);
15 }) ||
16 (!has_runtime_precision_v<S> &&
17 requires(Selector&& selector, Operation const& op, Args&&... args) {
18 dispatch_kernel(std::forward<Selector>(selector), op, std::forward<Args>(args)...);
19 }))
20void dispatch_at_precision(Selector&& selector, Operation const& operation, Precision p, Args&&... args)
21{
22 require_precision<S>(p);
23 if constexpr (has_runtime_precision_v<S>)
24 dispatch_kernel(std::forward<Selector>(selector), operation, std::forward<Args>(args)..., p);
25 else
26 dispatch_kernel(std::forward<Selector>(selector), operation, std::forward<Args>(args)...);
27}
28} // namespace uni20::linalg::detail
Operation-tag backend dispatch over tensor-view operands.
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
Definition data_table.cpp:8