23 template<alpaka::concepts::Api T_Api>
24 struct Op : std::false_type
31 template<alpaka::concepts::Executor T_Executor,
typename T_Device>
32 struct Op : std::false_type
37 template<alpaka::concepts::Executor T_Executor,
internal::concepts::DeviceHandle T_DeviceHandle>
45 template<alpaka::concepts::DeviceKind T_DeviceKind,
typename T_Api>
46 struct Op : std::false_type
51 template<
typename T_Kernel, concepts::ThreadSpec T_Spec>
56 alpaka::unused(kernel, spec);
65 uint32_t
operator()(
auto const&... args)
const requires(
false)
67 alpaka::unused(args...);
72 template<onHost::concepts::ThreadSpec T_ThreadSpec, alpaka::concepts::KernelBundle T_KernelBundle>
77 uint32_t
operator()(T_ThreadSpec
const spec, [[maybe_unused]] T_KernelBundle
const& kernelBundle)
const
85 requires requires() { std::declval<T_KernelFn>().dynSharedMemBytes; } ||
requires() {
86 BlockDynSharedMemBytes<T_KernelFn, T_Spec>{std::declval<T_KernelFn>(), std::declval<T_Spec>()}(
87 std::declval<remove_restrict_t<std::decay_t<T_Args>>>()...);
95 if constexpr(
requires {
97 std::declval<remove_restrict_t<std::decay_t<T_Args>>>()...);
101 [&](
auto const&... args)
103 kernelBundle.m_args);
107 return kernelBundle.m_kernelFn.dynSharedMemBytes;
112 template<onHost::concepts::ThreadSpec T_ThreadSpec, alpaka::concepts::KernelBundle T_KernelBundle>
117 template<onHost::concepts::ThreadSpec T_ThreadSpec, alpaka::concepts::KernelBundle T_KernelBundle>
132 consteval uint32_t
operator()(T_Api
const, T_DeviceKind
const, T_Exec
const)
const
135 sizeof(T_Api) &&
false,
136 "Missing definition of GetMaxThreadsPerBlock for this combination of API, device kind, "
155 constexpr auto supportedExecutors(internal::concepts::DeviceHandle
auto deviceHandle,
auto const listOfExecutors)
160 [&](
auto executor)
constexpr
179 [&](
auto devTag)
constexpr
184 template<onHost::concepts::ThreadSpec T_ThreadSpec, alpaka::concepts::KernelBundle T_KernelBundle>
190 template<onHost::concepts::ThreadSpec T_ThreadSpec, alpaka::concepts::KernelBundle T_KernelBundle>
193 alpaka::unused(spec, kernelBundle);
209 template<alpaka::concepts::Api T_Api, alpaka::concepts::DeviceKind T_DeviceKind, alpaka::concepts::Executor T_Exec>
The class used to bind kernel function object and arguments together. Once an instance of this class ...
#define ALPAKA_TYPEOF(...)
Get the type of instance.
Concept to check for APIs.
Concept to check if something is a device kind.
Concept to check for an executor.
Concept to check if a type is a ThreadSpec.
constexpr auto allDevices
constexpr auto allExecutors
list of all executors supported by alpaka
Functionality which is usable on the host CPU controller thread.
consteval bool hasUserDefinedDynSharedMemBytes(T_ThreadSpec spec, T_KernelBundle const &kernelBundle)
constexpr auto defaultExecutor(internal::concepts::DeviceHandle auto deviceHandle)
Select a default executor for the given device.
constexpr auto supportedDevices(auto const api)
consteval uint32_t getMaxThreadsPerBlock(T_Api api, T_DeviceKind deviceKind, T_Exec exec)
A safe(ish) compile time lower bound on max threads per block for a given combination of API,...
consteval bool isExecutorSupportedBy(auto executor, internal::concepts::DeviceHandle auto const &deviceHandle)
consteval bool isPlatformAvaiable(alpaka::concepts::Api auto api)
constexpr auto supportedExecutors(internal::concepts::DeviceHandle auto deviceHandle, auto const listOfExecutors)
constexpr uint32_t getDynSharedMemBytes(T_ThreadSpec spec, T_KernelBundle const &kernelBundle)
ALPAKA_FN_INLINE constexpr decltype(auto) apply(T_Func &&func, T_TupleLike &&tuple)
Applies a function to the elements of a tuple-like object.
BlockDynSharedMemBytes(T_Kernel kernel, T_Spec spec)
uint32_t operator()(auto const &... args) const
Get amount of dynamic shared memory in bytes.
uint32_t operator()(T_Spec const spec, KernelBundle< T_KernelFn, T_Args... > const &kernelBundle) const
static constexpr bool zeroSharedMemory
uint32_t operator()(T_ThreadSpec const spec, T_KernelBundle const &kernelBundle) const
consteval uint32_t operator()(T_Api const, T_DeviceKind const, T_Exec const) const