alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
Traits.hpp
Go to the documentation of this file.
1/* Copyright 2024 Benjamin Worpitz, Bernhard Manfred Gruber, Jan Stephan, Andrea Bocci
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
9
10#include <algorithm>
11#include <cctype>
12#include <cstddef>
13#include <string>
14#include <vector>
15
16namespace alpaka
17{
18 //! The device traits.
19 namespace trait
20 {
21 //! The device type trait.
22 template<typename T, typename TSfinae = void>
23 struct DevType;
24
25 //! The device get trait.
26 template<typename T, typename TSfinae = void>
27 struct GetDev;
28
29 //! The device name get trait.
30 template<typename TDev, typename TSfinae = void>
31 struct GetName;
32
33 //! The device memory size get trait.
34 template<typename TDev, typename TSfinae = void>
36
37 //! The device free memory size get trait.
38 template<typename T, typename TSfinae = void>
40
41 //! The device warp size get trait.
42 template<typename T, typename TSfinae = void>
44
45 //! The device preferred warp size get trait.
46 template<typename T, typename TSfinae = void>
48
49 //! The device reset trait.
50 template<typename T, typename TSfinae = void>
51 struct Reset;
52 } // namespace trait
53
54 //! The device type trait alias template to remove the ::type.
55 template<typename T>
56 using Dev = typename trait::DevType<T>::type;
57
58 struct ConceptGetDev;
59
60 struct ConceptDev;
61
62 namespace concepts
63 {
64 template<typename TDev>
65 concept Device = requires { requires interface::ImplementsInterface<ConceptDev, std::decay_t<TDev>>::value; };
66 } // namespace concepts
67
68 //! True if TDev is a device, i.e. if it implements the ConceptDev concept.
69 template<typename TDev>
70 [[deprecated("use the alpaka::concepts::Device instead.")]] inline constexpr bool isDevice
72
73 //! \return The device this object is bound to.
74 template<typename T>
75 ALPAKA_FN_HOST auto getDev(T const& t)
76 {
77 using ImplementationBase = interface::ImplementationBase<ConceptGetDev, T>;
79 }
80
81 namespace detail
82 {
83 inline auto trim(std::string s) -> std::string
84 {
85 auto const pred = [](char c) { return !std::isspace(c); };
86 s.erase(std::find_if(rbegin(s), rend(s), pred).base(), end(s));
87 s.erase(begin(s), std::find_if(begin(s), end(s), pred));
88 return s;
89 }
90 } // namespace detail
91
92 //! \return The device name with leading/trailing space characters trimmed off.
93 template<typename TDev>
94 ALPAKA_FN_HOST auto getName(TDev const& dev) -> std::string
95 {
97 }
98
99 //! \return The memory on the device in Bytes. Returns 0 if querying memory
100 //! is not supported.
101 template<typename TDev>
102 ALPAKA_FN_HOST auto getMemBytes(TDev const& dev) -> std::size_t
103 {
105 }
106
107 //! \return The free memory on the device in Bytes.
108 //
109 //! \note Do not use this query if getMemBytes returned 0.
110 template<typename TDev>
111 ALPAKA_FN_HOST auto getFreeMemBytes(TDev const& dev) -> std::size_t
112 {
114 }
115
116 //! \return The supported warp sizes on the device in number of threads.
117 template<typename TDev>
118 ALPAKA_FN_HOST auto getWarpSizes(TDev const& dev) -> std::vector<std::size_t>
119 {
121 }
122
123 //! \return The preferred warp size on the device in number of threads.
124 template<typename TDev>
125 ALPAKA_FN_HOST constexpr auto getPreferredWarpSize(TDev const& dev) -> std::size_t
126 {
128 }
129
130 //! Resets the device.
131 //! What this method does is dependent on the accelerator.
132 template<typename TDev>
133 ALPAKA_FN_HOST auto reset(TDev const& dev) -> void
134 {
136 }
137
138 namespace trait
139 {
140 //! Get device type
141 template<typename TDev>
142 struct DevType<TDev, std::enable_if_t<interface::ImplementsInterface<ConceptDev, TDev>::value>>
143 {
145 };
146 } // namespace trait
147} // namespace alpaka
#define ALPAKA_FN_HOST
Definition Common.hpp:43
auto trim(std::string s) -> std::string
Definition Traits.hpp:83
typename detail::ImplementationBaseType< TInterface, TDerived >::type ImplementationBase
Returns the type that implements the given interface in the inheritance hierarchy.
Definition Interface.hpp:66
The alpaka accelerator library.
ALPAKA_FN_HOST constexpr auto getPreferredWarpSize(TDev const &dev) -> std::size_t
Definition Traits.hpp:125
ALPAKA_FN_HOST auto getName(TDev const &dev) -> std::string
Definition Traits.hpp:94
ALPAKA_FN_HOST auto getWarpSizes(TDev const &dev) -> std::vector< std::size_t >
Definition Traits.hpp:118
ALPAKA_FN_HOST auto reset(TDev const &dev) -> void
Resets the device. What this method does is dependent on the accelerator.
Definition Traits.hpp:133
ALPAKA_FN_HOST auto getFreeMemBytes(TDev const &dev) -> std::size_t
Definition Traits.hpp:111
ALPAKA_FN_HOST auto getMemBytes(TDev const &dev) -> std::size_t
Definition Traits.hpp:102
typename trait::DevType< T >::type Dev
The device type trait alias template to remove the ::type.
Definition Traits.hpp:56
ALPAKA_FN_HOST auto getDev(T const &t)
Definition Traits.hpp:75
constexpr bool isDevice
True if TDev is a device, i.e. if it implements the ConceptDev concept.
Definition Traits.hpp:71
STL namespace.
The device type trait.
Definition Traits.hpp:23
The device get trait.
Definition Traits.hpp:27
The device free memory size get trait.
Definition Traits.hpp:39
The device memory size get trait.
Definition Traits.hpp:35
The device name get trait.
Definition Traits.hpp:31
The device preferred warp size get trait.
Definition Traits.hpp:47
The device warp size get trait.
Definition Traits.hpp:43
The device reset trait.
Definition Traits.hpp:51