alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
WarpSingleThread.hpp
Go to the documentation of this file.
1/* Copyright 2022 Sergei Bastrakov, David M. Rogers, Bernhard Manfred Gruber, Aurora Perego
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
8
9#include <cstdint>
10
11namespace alpaka::warp
12{
13 //! The single-threaded warp to emulate it on CPUs.
14 class WarpSingleThread : public interface::Implements<ConceptWarp, WarpSingleThread>
15 {
16 };
17
18 namespace trait
19 {
20 template<>
21 struct GetSize<WarpSingleThread>
22 {
23 static auto getSize(warp::WarpSingleThread const& /*warp*/)
24 {
25 return 1;
26 }
27 };
28
29 template<>
30 struct Activemask<WarpSingleThread>
31 {
32 static auto activemask(warp::WarpSingleThread const& /*warp*/)
33 {
34 return 1u;
35 }
36 };
37
38 template<>
39 struct All<WarpSingleThread>
40 {
41 static auto all(warp::WarpSingleThread const& /*warp*/, std::int32_t predicate)
42 {
43 return predicate;
44 }
45 };
46
47 template<>
48 struct Any<WarpSingleThread>
49 {
50 static auto any(warp::WarpSingleThread const& /*warp*/, std::int32_t predicate)
51 {
52 return predicate;
53 }
54 };
55
56 template<>
57 struct Ballot<WarpSingleThread>
58 {
59 static auto ballot(warp::WarpSingleThread const& /*warp*/, std::int32_t predicate)
60 {
61 return predicate ? 1u : 0u;
62 }
63 };
64
65 template<>
66 struct Shfl<WarpSingleThread>
67 {
68 template<typename T>
69 static auto shfl(
70 warp::WarpSingleThread const& /*warp*/,
71 T val,
72 std::int32_t /*srcLane*/,
73 std::int32_t /*width*/)
74 {
75 return val;
76 }
77 };
78
79 template<>
80 struct ShflUp<WarpSingleThread>
81 {
82 template<typename T>
83 static auto shfl_up(
84 warp::WarpSingleThread const& /*warp*/,
85 T val,
86 std::uint32_t /*srcLane*/,
87 std::int32_t /*width*/)
88 {
89 return val;
90 }
91 };
92
93 template<>
94 struct ShflDown<WarpSingleThread>
95 {
96 template<typename T>
97 static auto shfl_down(
98 warp::WarpSingleThread const& /*warp*/,
99 T val,
100 std::uint32_t /*srcLane*/,
101 std::int32_t /*width*/)
102 {
103 return val;
104 }
105 };
106
107 template<>
108 struct ShflXor<WarpSingleThread>
109 {
110 template<typename T>
111 static auto shfl_xor(
112 warp::WarpSingleThread const& /*warp*/,
113 T val,
114 std::int32_t /*srcLane*/,
115 std::int32_t /*width*/)
116 {
117 return val;
118 }
119 };
120 } // namespace trait
121} // namespace alpaka::warp
The single-threaded warp to emulate it on CPUs.
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto all(TWarp const &warp, std::int32_t predicate) -> std::int32_t
Evaluates predicate for all active threads of the warp and returns non-zero if and only if predicate ...
Definition Traits.hpp:114
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto ballot(TWarp const &warp, std::int32_t predicate)
Evaluates predicate for all non-exited threads in a warp and returns a 32- or 64-bit unsigned integer...
Definition Traits.hpp:164
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto shfl_up(TWarp const &warp, T value, std::uint32_t offset, std::int32_t width=0)
Exchange data between threads within a warp. It copies from a lane with lower ID relative to caller....
Definition Traits.hpp:236
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto activemask(TWarp const &warp) -> decltype(trait::Activemask< interface::ImplementationBase< ConceptWarp, TWarp > >::activemask(warp))
Returns a 32- or 64-bit unsigned integer (depending on the accelerator) whose Nth bit is set if and o...
Definition Traits.hpp:90
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto any(TWarp const &warp, std::int32_t predicate) -> std::int32_t
Evaluates predicate for all active threads of the warp and returns non-zero if and only if predicate ...
Definition Traits.hpp:137
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto shfl_down(TWarp const &warp, T value, std::uint32_t offset, std::int32_t width=0)
Exchange data between threads within a warp. It copies from a lane with higher ID relative to caller....
Definition Traits.hpp:274
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto getSize(TWarp const &warp) -> std::int32_t
Returns warp size.
Definition Traits.hpp:65
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto shfl_xor(TWarp const &warp, T value, std::int32_t mask, std::int32_t width=0)
Exchange data between threads within a warp. It copies from a lane based on bitwise XOR of own lane I...
Definition Traits.hpp:312
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_ACC auto shfl(TWarp const &warp, T value, std::int32_t srcLane, std::int32_t width=0)
Exchange data between threads within a warp.
Definition Traits.hpp:198
Tag used in class inheritance hierarchies that describes that a specific interface (TInterface) is im...
Definition Interface.hpp:15