30 #ifndef HIPCUB_ROCPRIM_BLOCK_BLOCK_SHUFFLE_HPP_ 31 #define HIPCUB_ROCPRIM_BLOCK_BLOCK_SHUFFLE_HPP_ 33 #include <type_traits> 35 #include "../../../config.hpp" 37 #include "../thread/thread_operators.hpp" 39 #include <rocprim/block/block_shuffle.hpp> 41 BEGIN_HIPCUB_NAMESPACE
50 int ARCH = HIPCUB_ARCH>
58 BLOCK_DIM_X * BLOCK_DIM_Y * BLOCK_DIM_Z > 0,
59 "BLOCK_DIM_X * BLOCK_DIM_Y * BLOCK_DIM_Z must be greater than 0" 63 typename ::rocprim::block_shuffle<
71 typename base_type::storage_type& temp_storage_;
74 using TempStorage =
typename base_type::storage_type;
83 : temp_storage_(temp_storage)
94 base_type::offset(input,output,distance);
103 unsigned int distance = 1)
105 base_type::rotate(input,output,distance);
110 template <
int ITEMS_PER_THREAD>
111 HIPCUB_DEVICE
inline void Up(
112 T (&input)[ITEMS_PER_THREAD],
113 T (&prev)[ITEMS_PER_THREAD])
115 base_type::up(input,prev);
122 template <
int ITEMS_PER_THREAD>
123 HIPCUB_DEVICE
inline void Up(
124 T (&input)[ITEMS_PER_THREAD],
125 T (&prev)[ITEMS_PER_THREAD],
128 base_type::up(input,prev,block_suffix);
134 template <
int ITEMS_PER_THREAD>
135 HIPCUB_DEVICE
inline void Down(
136 T (&input)[ITEMS_PER_THREAD],
137 T (&next)[ITEMS_PER_THREAD])
139 base_type::down(input,next);
145 template <
int ITEMS_PER_THREAD>
146 HIPCUB_DEVICE
inline void Down(
147 T (&input)[ITEMS_PER_THREAD],
148 T (&next)[ITEMS_PER_THREAD],
151 base_type::down(input,next,block_prefix);
159 return private_storage;
165 #endif // HIPCUB_ROCPRIM_BLOCK_BLOCK_SHUFFLE_HPP_ HIPCUB_DEVICE void Rotate(T input, T &output, unsigned int distance=1)
Each threadi obtains the input provided by threadi+distance.
Definition: block_shuffle.hpp:100
HIPCUB_DEVICE void Up(T(&input)[ITEMS_PER_THREAD], T(&prev)[ITEMS_PER_THREAD])
The thread block rotates its blocked arrangement of input items, shifting it up by one item...
Definition: block_shuffle.hpp:111
Definition: test_hipcub_block_load_store.kernels.hpp:167
HIPCUB_DEVICE BlockShuffle(TempStorage &temp_storage)
Definition: block_shuffle.hpp:82
Definition: block_shuffle.hpp:51
HIPCUB_DEVICE void Down(T(&input)[ITEMS_PER_THREAD], T(&next)[ITEMS_PER_THREAD], T &block_prefix)
The thread block rotates its blocked arrangement of input items, shifting it down by one item...
Definition: block_shuffle.hpp:146
HIPCUB_DEVICE void Down(T(&input)[ITEMS_PER_THREAD], T(&next)[ITEMS_PER_THREAD])
The thread block rotates its blocked arrangement of input items, shifting it down by one item...
Definition: block_shuffle.hpp:135
HIPCUB_DEVICE void Up(T(&input)[ITEMS_PER_THREAD], T(&prev)[ITEMS_PER_THREAD], T &block_suffix)
The thread block rotates its blocked arrangement of input items, shifting it up by one item...
Definition: block_shuffle.hpp:123
HIPCUB_DEVICE void Offset(T input, T &output, int distance=1)
Each threadi obtains the input provided by threadi+distance.
Definition: block_shuffle.hpp:89