21 #ifndef ROCPRIM_DEVICE_DETAIL_CONFIG_DEVICE_SCAN_HPP_ 22 #define ROCPRIM_DEVICE_DETAIL_CONFIG_DEVICE_SCAN_HPP_ 24 #include "../../../type_traits.hpp" 25 #include "../device_config_helper.hpp" 26 #include <type_traits> 36 BEGIN_ROCPRIM_NAMESPACE
41 template<
unsigned int arch,
class value_type,
class enable =
void>
46 template<
class value_type>
48 static_cast<unsigned int>(target_arch::gfx908),
50 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
51 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
54 ::rocprim::block_load_method::block_load_transpose,
55 ::rocprim::block_store_method::block_store_transpose,
56 block_scan_algorithm::reduce_then_scan>
60 template<
class value_type>
62 static_cast<unsigned int>(target_arch::gfx908),
64 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
65 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
68 ::rocprim::block_load_method::block_load_transpose,
69 ::rocprim::block_store_method::block_store_transpose,
70 block_scan_algorithm::reduce_then_scan>
74 template<
class value_type>
77 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
78 && (sizeof(value_type) <= 2))>>
81 ::rocprim::block_load_method::block_load_transpose,
82 ::rocprim::block_store_method::block_store_transpose,
83 block_scan_algorithm::reduce_then_scan>
87 template<
class value_type>
89 static_cast<unsigned int>(target_arch::gfx908),
91 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
92 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
95 ::rocprim::block_load_method::block_load_transpose,
96 ::rocprim::block_store_method::block_store_transpose,
97 block_scan_algorithm::using_warp_scan>
101 template<
class value_type>
103 static_cast<unsigned int>(target_arch::gfx908),
105 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
106 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
109 ::rocprim::block_load_method::block_load_transpose,
110 ::rocprim::block_store_method::block_store_transpose,
111 block_scan_algorithm::using_warp_scan>
115 template<
class value_type>
117 static_cast<unsigned int>(target_arch::gfx908),
119 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
120 && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
123 ::rocprim::block_load_method::block_load_transpose,
124 ::rocprim::block_store_method::block_store_transpose,
125 block_scan_algorithm::using_warp_scan>
129 template<
class value_type>
132 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
133 && (sizeof(value_type) <= 1))>>
136 ::rocprim::block_load_method::block_load_transpose,
137 ::rocprim::block_store_method::block_store_transpose,
138 block_scan_algorithm::using_warp_scan>
142 template<
class value_type>
144 static_cast<unsigned int>(target_arch::gfx900),
146 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
147 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
150 ::rocprim::block_load_method::block_load_transpose,
151 ::rocprim::block_store_method::block_store_transpose,
152 block_scan_algorithm::reduce_then_scan>
156 template<
class value_type>
158 static_cast<unsigned int>(target_arch::gfx900),
160 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
161 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
164 ::rocprim::block_load_method::block_load_transpose,
165 ::rocprim::block_store_method::block_store_transpose,
166 block_scan_algorithm::using_warp_scan>
170 template<
class value_type>
173 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
174 && (sizeof(value_type) <= 2))>>
177 ::rocprim::block_load_method::block_load_transpose,
178 ::rocprim::block_store_method::block_store_transpose,
179 block_scan_algorithm::using_warp_scan>
183 template<
class value_type>
185 static_cast<unsigned int>(target_arch::gfx900),
187 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
188 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
191 ::rocprim::block_load_method::block_load_transpose,
192 ::rocprim::block_store_method::block_store_transpose,
193 block_scan_algorithm::using_warp_scan>
197 template<
class value_type>
199 static_cast<unsigned int>(target_arch::gfx900),
201 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
202 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
205 ::rocprim::block_load_method::block_load_transpose,
206 ::rocprim::block_store_method::block_store_transpose,
207 block_scan_algorithm::using_warp_scan>
211 template<
class value_type>
213 static_cast<unsigned int>(target_arch::gfx900),
215 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
216 && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
219 ::rocprim::block_load_method::block_load_transpose,
220 ::rocprim::block_store_method::block_store_transpose,
221 block_scan_algorithm::using_warp_scan>
225 template<
class value_type>
228 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
229 && (sizeof(value_type) <= 1))>>
232 ::rocprim::block_load_method::block_load_transpose,
233 ::rocprim::block_store_method::block_store_transpose,
234 block_scan_algorithm::using_warp_scan>
238 template<
class value_type>
240 static_cast<unsigned int>(target_arch::gfx906),
242 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
243 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
246 ::rocprim::block_load_method::block_load_transpose,
247 ::rocprim::block_store_method::block_store_transpose,
248 block_scan_algorithm::reduce_then_scan>
252 template<
class value_type>
254 static_cast<unsigned int>(target_arch::gfx906),
256 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
257 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
260 ::rocprim::block_load_method::block_load_transpose,
261 ::rocprim::block_store_method::block_store_transpose,
262 block_scan_algorithm::using_warp_scan>
266 template<
class value_type>
269 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
270 && (sizeof(value_type) <= 2))>>
273 ::rocprim::block_load_method::block_load_transpose,
274 ::rocprim::block_store_method::block_store_transpose,
275 block_scan_algorithm::reduce_then_scan>
279 template<
class value_type>
281 static_cast<unsigned int>(target_arch::gfx906),
283 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
284 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
287 ::rocprim::block_load_method::block_load_transpose,
288 ::rocprim::block_store_method::block_store_transpose,
289 block_scan_algorithm::using_warp_scan>
293 template<
class value_type>
295 static_cast<unsigned int>(target_arch::gfx906),
297 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
298 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
301 ::rocprim::block_load_method::block_load_transpose,
302 ::rocprim::block_store_method::block_store_transpose,
303 block_scan_algorithm::reduce_then_scan>
307 template<
class value_type>
309 static_cast<unsigned int>(target_arch::gfx906),
311 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
312 && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
315 ::rocprim::block_load_method::block_load_transpose,
316 ::rocprim::block_store_method::block_store_transpose,
317 block_scan_algorithm::reduce_then_scan>
321 template<
class value_type>
324 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
325 && (sizeof(value_type) <= 1))>>
328 ::rocprim::block_load_method::block_load_transpose,
329 ::rocprim::block_store_method::block_store_transpose,
330 block_scan_algorithm::using_warp_scan>
334 template<
class value_type>
336 static_cast<unsigned int>(target_arch::gfx1030),
338 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
339 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
342 ::rocprim::block_load_method::block_load_transpose,
343 ::rocprim::block_store_method::block_store_transpose,
344 block_scan_algorithm::using_warp_scan>
348 template<
class value_type>
350 static_cast<unsigned int>(target_arch::gfx1030),
352 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
353 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
356 ::rocprim::block_load_method::block_load_transpose,
357 ::rocprim::block_store_method::block_store_transpose,
358 block_scan_algorithm::using_warp_scan>
362 template<
class value_type>
365 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
366 && (sizeof(value_type) <= 2))>>
369 ::rocprim::block_load_method::block_load_transpose,
370 ::rocprim::block_store_method::block_store_transpose,
371 block_scan_algorithm::using_warp_scan>
375 template<
class value_type>
377 static_cast<unsigned int>(target_arch::gfx1030),
379 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
380 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
383 ::rocprim::block_load_method::block_load_transpose,
384 ::rocprim::block_store_method::block_store_transpose,
385 block_scan_algorithm::using_warp_scan>
389 template<
class value_type>
391 static_cast<unsigned int>(target_arch::gfx1030),
393 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
394 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
397 ::rocprim::block_load_method::block_load_transpose,
398 ::rocprim::block_store_method::block_store_transpose,
399 block_scan_algorithm::using_warp_scan>
403 template<
class value_type>
405 static_cast<unsigned int>(target_arch::gfx1030),
407 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
408 && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
411 ::rocprim::block_load_method::block_load_transpose,
412 ::rocprim::block_store_method::block_store_transpose,
413 block_scan_algorithm::using_warp_scan>
417 template<
class value_type>
420 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
421 && (sizeof(value_type) <= 1))>>
424 ::rocprim::block_load_method::block_load_transpose,
425 ::rocprim::block_store_method::block_store_transpose,
426 block_scan_algorithm::using_warp_scan>
430 template<
class value_type>
432 static_cast<unsigned int>(target_arch::unknown),
434 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
435 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
438 ::rocprim::block_load_method::block_load_transpose,
439 ::rocprim::block_store_method::block_store_transpose,
440 block_scan_algorithm::reduce_then_scan>
444 template<
class value_type>
446 static_cast<unsigned int>(target_arch::unknown),
448 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
449 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
452 ::rocprim::block_load_method::block_load_transpose,
453 ::rocprim::block_store_method::block_store_transpose,
454 block_scan_algorithm::reduce_then_scan>
458 template<
class value_type>
461 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
462 && (sizeof(value_type) <= 2))>>
465 ::rocprim::block_load_method::block_load_transpose,
466 ::rocprim::block_store_method::block_store_transpose,
467 block_scan_algorithm::reduce_then_scan>
471 template<
class value_type>
473 static_cast<unsigned int>(target_arch::unknown),
475 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
476 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
479 ::rocprim::block_load_method::block_load_transpose,
480 ::rocprim::block_store_method::block_store_transpose,
481 block_scan_algorithm::using_warp_scan>
485 template<
class value_type>
487 static_cast<unsigned int>(target_arch::unknown),
489 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
490 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
493 ::rocprim::block_load_method::block_load_transpose,
494 ::rocprim::block_store_method::block_store_transpose,
495 block_scan_algorithm::using_warp_scan>
499 template<
class value_type>
501 static_cast<unsigned int>(target_arch::unknown),
503 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
504 && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
507 ::rocprim::block_load_method::block_load_transpose,
508 ::rocprim::block_store_method::block_store_transpose,
509 block_scan_algorithm::using_warp_scan>
513 template<
class value_type>
516 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
517 && (sizeof(value_type) <= 1))>>
520 ::rocprim::block_load_method::block_load_transpose,
521 ::rocprim::block_store_method::block_store_transpose,
522 block_scan_algorithm::using_warp_scan>
526 template<
class value_type>
528 static_cast<unsigned int>(target_arch::gfx90a),
530 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
531 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
534 ::rocprim::block_load_method::block_load_transpose,
535 ::rocprim::block_store_method::block_store_transpose,
536 block_scan_algorithm::reduce_then_scan>
540 template<
class value_type>
542 static_cast<unsigned int>(target_arch::gfx90a),
544 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
545 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
548 ::rocprim::block_load_method::block_load_transpose,
549 ::rocprim::block_store_method::block_store_transpose,
550 block_scan_algorithm::reduce_then_scan>
554 template<
class value_type>
557 std::enable_if_t<(bool(rocprim::is_floating_point<value_type>::value)
558 && (sizeof(value_type) <= 2))>>
561 ::rocprim::block_load_method::block_load_transpose,
562 ::rocprim::block_store_method::block_store_transpose,
563 block_scan_algorithm::reduce_then_scan>
567 template<
class value_type>
569 static_cast<unsigned int>(target_arch::gfx90a),
571 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
572 && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
575 ::rocprim::block_load_method::block_load_transpose,
576 ::rocprim::block_store_method::block_store_transpose,
577 block_scan_algorithm::using_warp_scan>
581 template<
class value_type>
583 static_cast<unsigned int>(target_arch::gfx90a),
585 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
586 && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
589 ::rocprim::block_load_method::block_load_transpose,
590 ::rocprim::block_store_method::block_store_transpose,
591 block_scan_algorithm::using_warp_scan>
595 template<
class value_type>
597 static_cast<unsigned int>(target_arch::gfx90a),
599 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
600 && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
603 ::rocprim::block_load_method::block_load_transpose,
604 ::rocprim::block_store_method::block_store_transpose,
605 block_scan_algorithm::using_warp_scan>
609 template<
class value_type>
612 std::enable_if_t<(!bool(rocprim::is_floating_point<value_type>::value)
613 && (sizeof(value_type) <= 1))>>
616 ::rocprim::block_load_method::block_load_transpose,
617 ::rocprim::block_store_method::block_store_transpose,
618 block_scan_algorithm::using_warp_scan>
623 END_ROCPRIM_NAMESPACE
628 #endif // ROCPRIM_DEVICE_DETAIL_CONFIG_DEVICE_SCAN_HPP_ Deprecated: Configuration of device-level scan primitives.
Definition: block_histogram.hpp:62
Definition: device_config_helper.hpp:388
Definition: device_scan.hpp:42
Configuration of device-level scan primitives.
Definition: device_config_helper.hpp:294