alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
Api.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
9#include "alpaka/concepts.hpp"
10#include "alpaka/mem/trait.hpp"
12
13#include <string>
14
15namespace alpaka
16{
17 namespace api
18 {
19 struct Host : detail::ApiBase
20 {
22
23 auto get() const
24 {
25 return this;
26 }
27
28 void _()
29 {
30 static_assert(concepts::Api<Host>);
31 }
32
33 static std::string getName()
34 {
35 return "Host";
36 }
37 };
38
39 constexpr auto host = Host{};
40 } // namespace api
41
42 namespace onHost::trait
43 {
44 template<>
45 struct IsPlatformAvailable::Op<api::Host> : std::true_type
46 {
47 };
48
49 template<>
50 struct IsDeviceSupportedBy::Op<deviceKind::Cpu, api::Host> : std::true_type
51 {
52 };
53
54 template<>
55 struct IsDeviceSupportedBy::Op<deviceKind::NumaCpu, api::Host> : std::true_type
56 {
57 };
58
59 template<typename T_DeviceKind>
60 struct GetMaxThreadsPerBlock::Op<api::Host, T_DeviceKind, exec::CpuSerial>
61 {
62 consteval uint32_t operator()(api::Host const, T_DeviceKind const, exec::CpuSerial const) const
63 {
64 return 1u;
65 }
66 };
67
68 template<typename T_DeviceKind>
70 {
71 consteval uint32_t operator()(api::Host const, T_DeviceKind const, exec::CpuOmpBlocks const) const
72 {
73 return 1u;
74 }
75 };
76
77 template<typename T_DeviceKind>
79 {
80 consteval uint32_t operator()(api::Host const, T_DeviceKind const, exec::CpuTbbBlocks const) const
81 {
82 return 1u;
83 }
84 };
85 } // namespace onHost::trait
86
87 namespace trait
88 {
89
90 template<typename T_Type>
92 {
93 constexpr uint32_t operator()(api::Host const, deviceKind::Cpu const) const
94 {
95 return alpaka::onHost::internal::getCPUSimdWidth<T_Type>();
96 }
97 };
98
99 template<>
101 {
102 constexpr uint32_t operator()(api::Host const, deviceKind::Cpu const) const
103 {
104 return alpaka::onHost::internal::getCPUNumPipelines();
105 }
106 };
107
108 template<>
110 {
111 constexpr uint32_t operator()(api::Host const, deviceKind::Cpu const) const
112 {
113 return alpaka::onHost::internal::getCPUCachelineSize();
114 }
115 };
116
117 template<typename T_Type>
119 {
120 constexpr uint32_t operator()(api::Host const, deviceKind::NumaCpu const) const
121 {
122 return alpaka::onHost::internal::getCPUSimdWidth<T_Type>();
123 }
124 };
125
126 template<>
128 {
129 constexpr uint32_t operator()(api::Host const, deviceKind::NumaCpu const) const
130 {
131 return alpaka::onHost::internal::getCPUNumPipelines();
132 }
133 };
134
135 template<>
137 {
138 constexpr uint32_t operator()(api::Host const, deviceKind::NumaCpu const) const
139 {
140 return alpaka::onHost::internal::getCPUCachelineSize();
141 }
142 };
143
144 } // namespace trait
145
146 namespace onAcc::internal::trait
147 {
148 template<typename T_Acc>
149 struct AutoIndexMapping::Op<T_Acc, api::Host, deviceKind::Cpu>
150 {
151 constexpr auto operator()(T_Acc const&, api::Host, deviceKind::Cpu) const
152 {
153 return layout::Contiguous{};
154 }
155 };
156
157 template<typename T_Acc>
158 struct AutoIndexMapping::Op<T_Acc, api::Host, deviceKind::NumaCpu>
159 {
160 constexpr auto operator()(T_Acc const&, api::Host, deviceKind::NumaCpu) const
161 {
162 return layout::Contiguous{};
163 }
164 };
165 } // namespace onAcc::internal::trait
166} // namespace alpaka
Concept to check for APIs.
Definition api.hpp:42
constexpr auto host
Definition Api.hpp:39
constexpr Api api
Definition tag.hpp:24
main alpaka namespace.
Definition alpaka.hpp:76
auto get() const
Definition Api.hpp:23
Host element_type
Definition Api.hpp:21
static std::string getName()
Definition Api.hpp:33
consteval uint32_t operator()(api::Host const, T_DeviceKind const, exec::CpuOmpBlocks const) const
Definition Api.hpp:71
consteval uint32_t operator()(api::Host const, T_DeviceKind const, exec::CpuTbbBlocks const) const
Definition Api.hpp:80
consteval uint32_t operator()(api::Host const, T_DeviceKind const, exec::CpuSerial const) const
Definition Api.hpp:62
constexpr uint32_t operator()(api::Host const, deviceKind::Cpu const) const
Definition Api.hpp:93
constexpr uint32_t operator()(api::Host const, deviceKind::NumaCpu const) const
Definition Api.hpp:120
constexpr uint32_t operator()(api::Host const, deviceKind::Cpu const) const
Definition Api.hpp:111
constexpr uint32_t operator()(api::Host const, deviceKind::NumaCpu const) const
Definition Api.hpp:138
constexpr uint32_t operator()(api::Host const, deviceKind::Cpu const) const
Definition Api.hpp:102
constexpr uint32_t operator()(api::Host const, deviceKind::NumaCpu const) const
Definition Api.hpp:129