30 #ifndef HIPCUB_ROCPRIM_GRID_GRID_QUEUE_HPP_
31 #define HIPCUB_ROCPRIM_GRID_GRID_QUEUE_HPP_
33 #include <type_traits>
35 #include "../../../config.hpp"
37 BEGIN_HIPCUB_NAMESPACE
74 template <
typename OffsetT>
92 __host__ __device__ __forceinline__
93 static size_t AllocationSize()
95 return sizeof(OffsetT) * 2;
100 __host__ __device__ __forceinline__ GridQueue()
107 __host__ __device__ __forceinline__
GridQueue(
110 d_counters((OffsetT*) d_storage)
115 HIPCUB_DEVICE hipError_t FillAndResetDrain(
117 hipStream_t stream = 0)
119 hipError_t result = hipErrorUnknown;
121 d_counters[FILL] = fill_size;
122 d_counters[DRAIN] = 0;
127 HIPCUB_HOST hipError_t FillAndResetDrain(
129 hipStream_t stream = 0)
131 hipError_t result = hipErrorUnknown;
133 counters[FILL] = fill_size;
135 result = CubDebug(hipMemcpyAsync(d_counters, counters,
sizeof(OffsetT) * 2, hipMemcpyHostToDevice, stream));
140 HIPCUB_DEVICE hipError_t ResetDrain(hipStream_t stream = 0)
142 hipError_t result = hipErrorUnknown;
144 d_counters[DRAIN] = 0;
149 HIPCUB_HOST hipError_t ResetDrain(hipStream_t stream = 0)
151 hipError_t result = hipErrorUnknown;
152 result = CubDebug(hipMemsetAsync(d_counters + DRAIN, 0,
sizeof(OffsetT), stream));
158 HIPCUB_DEVICE hipError_t ResetFill(hipStream_t stream = 0)
160 hipError_t result = hipErrorUnknown;
162 d_counters[FILL] = 0;
167 HIPCUB_HOST hipError_t ResetFill(hipStream_t stream = 0)
169 hipError_t result = hipErrorUnknown;
170 result = CubDebug(hipMemsetAsync(d_counters + FILL, 0,
sizeof(OffsetT), stream));
176 HIPCUB_DEVICE hipError_t FillSize(
178 hipStream_t stream = 0)
180 hipError_t result = hipErrorUnknown;
182 fill_size = d_counters[FILL];
187 HIPCUB_HOST hipError_t FillSize(
189 hipStream_t stream = 0)
191 hipError_t result = hipErrorUnknown;
192 result = CubDebug(hipMemcpyAsync(&fill_size, d_counters + FILL,
sizeof(OffsetT), hipMemcpyDeviceToHost, stream));
198 HIPCUB_DEVICE OffsetT Drain(OffsetT num_items)
200 return atomicAdd(d_counters + DRAIN, num_items);
205 HIPCUB_DEVICE OffsetT Fill(OffsetT num_items)
207 return atomicAdd(d_counters + FILL, num_items);
212 #ifndef DOXYGEN_SHOULD_SKIP_THIS // Do not document
218 template <
typename OffsetT>
219 __global__
void FillAndResetDrainKernel(
220 GridQueue<OffsetT> grid_queue,
223 grid_queue.FillAndResetDrain(num_items);
228 #endif // DOXYGEN_SHOULD_SKIP_THIS
235 #endif // HIPCUB_ROCPRIM_GRID_GRID_QUEUE_HPP_