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>
51 class BlockShuffle :
public ::rocprim::block_shuffle<
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;
77 BlockShuffle() : temp_storage_(private_storage())
83 : temp_storage_(temp_storage)
92 HIPCUB_DEVICE
inline void Offset(
97 base_type::offset(input,output,distance);
106 HIPCUB_DEVICE
inline void Rotate(
109 unsigned int distance = 1)
111 base_type::rotate(input,output,distance);
121 template <
int ITEMS_PER_THREAD>
122 HIPCUB_DEVICE
inline void Up(
123 T (&input)[ITEMS_PER_THREAD],
124 T (&prev)[ITEMS_PER_THREAD])
126 base_type::up(input,prev);
138 template <
int ITEMS_PER_THREAD>
139 HIPCUB_DEVICE
inline void Up(
140 T (&input)[ITEMS_PER_THREAD],
141 T (&prev)[ITEMS_PER_THREAD],
144 base_type::up(input,prev,block_suffix);
155 template <
int ITEMS_PER_THREAD>
156 HIPCUB_DEVICE
inline void Down(
157 T (&input)[ITEMS_PER_THREAD],
158 T (&next)[ITEMS_PER_THREAD])
160 base_type::down(input,next);
171 template <
int ITEMS_PER_THREAD>
172 HIPCUB_DEVICE
inline void Down(
173 T (&input)[ITEMS_PER_THREAD],
174 T (&next)[ITEMS_PER_THREAD],
177 base_type::down(input,next,block_prefix);
182 TempStorage& private_storage()
184 HIPCUB_SHARED_MEMORY TempStorage private_storage;
185 return private_storage;
191 #endif // HIPCUB_ROCPRIM_BLOCK_BLOCK_SHUFFLE_HPP_