alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
concepts.hpp
Go to the documentation of this file.
1/* Copyright 2024 René Widera
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
7#include "alpaka/concepts.hpp"
10
11#include <concepts>
12#include <string>
13
14namespace alpaka::onHost
15{
16 namespace internal::concepts
17 {
18 template<typename T>
19 concept Device = requires(T device) {
20 { alpaka::internal::GetName::Op<T>{}(device) } -> std::convertible_to<std::string>;
21 { internal::MakeEvent::Op<T>{}(device) };
22 { internal::GetNativeHandle::Op<T>{}(device) };
23 { internal::GetDeviceProperties::Op<T>{}(device) };
24 };
25
26 template<typename T>
27 concept Platform = requires(T platform) {
28 { alpaka::internal::GetName::Op<T>{}(platform) };
29 };
30
31 template<typename T>
32 concept Queue = requires(T device) {
33 { alpaka::internal::GetName::Op<T>{}(device) } -> std::convertible_to<std::string>;
34 { internal::GetNativeHandle::Op<T>{}(device) };
35 };
36
37 template<typename T>
38 concept QueueHandle = requires(T t) {
39 typename T::element_type;
41 };
42
43 template<typename T>
44 concept PlatformHandle = requires(T t) {
45 typename T::element_type;
46 requires Platform<typename T::element_type>;
47 };
48
49 template<typename T>
50 concept DeviceHandle = requires(T t) {
51 typename T::element_type;
53 };
54 } // namespace internal::concepts
55
56 namespace concepts
57 {
58 template<typename T>
59 concept NameHandle = requires(T t) {
60 typename T::element_type;
62 };
63
64 template<typename T>
65 concept StaticNameHandle = requires(T t) {
66 typename T::element_type;
68 };
69 } // namespace concepts
70
71} // namespace alpaka::onHost
constexpr Device device
Definition scope.hpp:70
Functionality which is usable on the host CPU controller thread.
Definition api.hpp:40
Device(Handle< T_Device > &&) -> Device< ALPAKA_TYPEOF(alpaka::internal::getApi(std::declval< T_Device >())), ALPAKA_TYPEOF(alpaka::internal::getDeviceKind(std::declval< T_Device >()))>
Queue(Handle< T_Queue > &&, T_QueueKind) -> Queue< Device< ALPAKA_TYPEOF(alpaka::internal::getApi(std::declval< T_Queue >())), ALPAKA_TYPEOF(alpaka::internal::getDeviceKind(std::declval< T_Queue >()))>, T_QueueKind >