21 #ifndef ROCPRIM_DEVICE_DETAIL_CONFIG_DEVICE_SCAN_BY_KEY_HPP_    22 #define ROCPRIM_DEVICE_DETAIL_CONFIG_DEVICE_SCAN_BY_KEY_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 key_type, 
class value_type, 
class enable = 
void>
    46 template<
class key_type, 
class value_type>
    48     static_cast<unsigned int>(target_arch::gfx908),
    51     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
    52                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
    53                       && (sizeof(value_type) > 4))>>
    56                             ::rocprim::block_load_method::block_load_transpose,
    57                             ::rocprim::block_store_method::block_store_transpose,
    58                             block_scan_algorithm::using_warp_scan>
    62 template<
class key_type, 
class value_type>
    64     static_cast<unsigned int>(target_arch::gfx908),
    67     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
    68                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
    69                       && (sizeof(value_type) > 2))>>
    72                             ::rocprim::block_load_method::block_load_transpose,
    73                             ::rocprim::block_store_method::block_store_transpose,
    74                             block_scan_algorithm::reduce_then_scan>
    78 template<
class key_type, 
class value_type>
    80     static_cast<unsigned int>(target_arch::gfx908),
    83     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
    84                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
    85                       && (sizeof(value_type) > 1))>>
    88                             ::rocprim::block_load_method::block_load_transpose,
    89                             ::rocprim::block_store_method::block_store_transpose,
    90                             block_scan_algorithm::using_warp_scan>
    94 template<
class key_type, 
class value_type>
    96     static_cast<unsigned int>(target_arch::gfx908),
    99     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   100                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
   103                             ::rocprim::block_load_method::block_load_transpose,
   104                             ::rocprim::block_store_method::block_store_transpose,
   105                             block_scan_algorithm::reduce_then_scan>
   109 template<
class key_type, 
class value_type>
   111     static_cast<unsigned int>(target_arch::gfx908),
   114     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   115                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
   116                       && (sizeof(value_type) > 4))>>
   119                             ::rocprim::block_load_method::block_load_transpose,
   120                             ::rocprim::block_store_method::block_store_transpose,
   121                             block_scan_algorithm::using_warp_scan>
   125 template<
class key_type, 
class value_type>
   127     static_cast<unsigned int>(target_arch::gfx908),
   130     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   131                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
   132                       && (sizeof(value_type) > 2))>>
   135                             ::rocprim::block_load_method::block_load_transpose,
   136                             ::rocprim::block_store_method::block_store_transpose,
   137                             block_scan_algorithm::reduce_then_scan>
   141 template<
class key_type, 
class value_type>
   143     static_cast<unsigned int>(target_arch::gfx908),
   146     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   147                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
   148                       && (sizeof(value_type) > 1))>>
   151                             ::rocprim::block_load_method::block_load_transpose,
   152                             ::rocprim::block_store_method::block_store_transpose,
   153                             block_scan_algorithm::reduce_then_scan>
   157 template<
class key_type, 
class value_type>
   159     static_cast<unsigned int>(target_arch::gfx908),
   162     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   163                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
   166                             ::rocprim::block_load_method::block_load_transpose,
   167                             ::rocprim::block_store_method::block_store_transpose,
   168                             block_scan_algorithm::using_warp_scan>
   172 template<
class key_type, 
class value_type>
   174     static_cast<unsigned int>(target_arch::gfx908),
   177     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   178                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
   181                             ::rocprim::block_load_method::block_load_transpose,
   182                             ::rocprim::block_store_method::block_store_transpose,
   183                             block_scan_algorithm::using_warp_scan>
   187 template<
class key_type, 
class value_type>
   189     static_cast<unsigned int>(target_arch::gfx908),
   192     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   193                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
   196                             ::rocprim::block_load_method::block_load_transpose,
   197                             ::rocprim::block_store_method::block_store_transpose,
   198                             block_scan_algorithm::using_warp_scan>
   202 template<
class key_type, 
class value_type>
   204     static_cast<unsigned int>(target_arch::gfx908),
   207     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   208                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
   211                             ::rocprim::block_load_method::block_load_transpose,
   212                             ::rocprim::block_store_method::block_store_transpose,
   213                             block_scan_algorithm::reduce_then_scan>
   217 template<
class key_type, 
class value_type>
   219     static_cast<unsigned int>(target_arch::gfx908),
   222     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   223                       && (sizeof(value_type) <= 1))>>
   224     : scan_by_key_config_v2<256,
   226                             ::rocprim::block_load_method::block_load_transpose,
   227                             ::rocprim::block_store_method::block_store_transpose,
   228                             block_scan_algorithm::using_warp_scan>
   232 template<class key_type, class value_type>
   233 struct default_scan_by_key_config<
   234     static_cast<unsigned int>(target_arch::gfx908),
   237     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   238                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
   239                       && (sizeof(value_type) > 4))>>
   240     : scan_by_key_config_v2<256,
   242                             ::rocprim::block_load_method::block_load_transpose,
   243                             ::rocprim::block_store_method::block_store_transpose,
   244                             block_scan_algorithm::reduce_then_scan>
   248 template<class key_type, class value_type>
   249 struct default_scan_by_key_config<
   250     static_cast<unsigned int>(target_arch::gfx908),
   253     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   254                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
   255                       && (sizeof(value_type) > 2))>>
   256     : scan_by_key_config_v2<256,
   258                             ::rocprim::block_load_method::block_load_transpose,
   259                             ::rocprim::block_store_method::block_store_transpose,
   260                             block_scan_algorithm::reduce_then_scan>
   264 template<class key_type, class value_type>
   265 struct default_scan_by_key_config<
   266     static_cast<unsigned int>(target_arch::gfx908),
   269     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   270                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
   271                       && (sizeof(value_type) > 1))>>
   272     : scan_by_key_config_v2<64,
   274                             ::rocprim::block_load_method::block_load_transpose,
   275                             ::rocprim::block_store_method::block_store_transpose,
   276                             block_scan_algorithm::using_warp_scan>
   280 template<class key_type, class value_type>
   281 struct default_scan_by_key_config<
   282     static_cast<unsigned int>(target_arch::gfx908),
   285     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   286                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
   287     : scan_by_key_config_v2<256,
   289                             ::rocprim::block_load_method::block_load_transpose,
   290                             ::rocprim::block_store_method::block_store_transpose,
   291                             block_scan_algorithm::using_warp_scan>
   295 template<class key_type, class value_type>
   296 struct default_scan_by_key_config<
   297     static_cast<unsigned int>(target_arch::gfx908),
   300     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   301                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
   302                       && (sizeof(value_type) > 4))>>
   303     : scan_by_key_config_v2<128,
   305                             ::rocprim::block_load_method::block_load_transpose,
   306                             ::rocprim::block_store_method::block_store_transpose,
   307                             block_scan_algorithm::using_warp_scan>
   311 template<class key_type, class value_type>
   312 struct default_scan_by_key_config<
   313     static_cast<unsigned int>(target_arch::gfx908),
   316     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   317                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
   318                       && (sizeof(value_type) > 2))>>
   319     : scan_by_key_config_v2<256,
   321                             ::rocprim::block_load_method::block_load_transpose,
   322                             ::rocprim::block_store_method::block_store_transpose,
   323                             block_scan_algorithm::reduce_then_scan>
   327 template<class key_type, class value_type>
   328 struct default_scan_by_key_config<
   329     static_cast<unsigned int>(target_arch::gfx908),
   332     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   333                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
   334                       && (sizeof(value_type) > 1))>>
   335     : scan_by_key_config_v2<256,
   337                             ::rocprim::block_load_method::block_load_transpose,
   338                             ::rocprim::block_store_method::block_store_transpose,
   339                             block_scan_algorithm::reduce_then_scan>
   343 template<class key_type, class value_type>
   344 struct default_scan_by_key_config<
   345     static_cast<unsigned int>(target_arch::gfx908),
   348     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   349                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
   350     : scan_by_key_config_v2<128,
   352                             ::rocprim::block_load_method::block_load_transpose,
   353                             ::rocprim::block_store_method::block_store_transpose,
   354                             block_scan_algorithm::using_warp_scan>
   358 template<class key_type, class value_type>
   359 struct default_scan_by_key_config<
   360     static_cast<unsigned int>(target_arch::gfx908),
   363     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   364                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 8)
   365                       && (sizeof(value_type) > 4))>>
   366     : scan_by_key_config_v2<64,
   368                             ::rocprim::block_load_method::block_load_transpose,
   369                             ::rocprim::block_store_method::block_store_transpose,
   370                             block_scan_algorithm::reduce_then_scan>
   374 template<class key_type, class value_type>
   375 struct default_scan_by_key_config<
   376     static_cast<unsigned int>(target_arch::gfx908),
   379     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   380                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 4)
   381                       && (sizeof(value_type) > 2))>>
   382     : scan_by_key_config_v2<256,
   384                             ::rocprim::block_load_method::block_load_transpose,
   385                             ::rocprim::block_store_method::block_store_transpose,
   386                             block_scan_algorithm::using_warp_scan>
   390 template<class key_type, class value_type>
   391 struct default_scan_by_key_config<
   392     static_cast<unsigned int>(target_arch::gfx908),
   395     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   396                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 2)
   397                       && (sizeof(value_type) > 1))>>
   398     : scan_by_key_config_v2<256,
   400                             ::rocprim::block_load_method::block_load_transpose,
   401                             ::rocprim::block_store_method::block_store_transpose,
   402                             block_scan_algorithm::reduce_then_scan>
   406 template<class key_type, class value_type>
   407 struct default_scan_by_key_config<
   408     static_cast<unsigned int>(target_arch::gfx908),
   411     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   412                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 1))>>
   413     : scan_by_key_config_v2<256,
   415                             ::rocprim::block_load_method::block_load_transpose,
   416                             ::rocprim::block_store_method::block_store_transpose,
   417                             block_scan_algorithm::using_warp_scan>
   421 template<class key_type, class value_type>
   422 struct default_scan_by_key_config<
   423     static_cast<unsigned int>(target_arch::gfx908),
   426     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
   427                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
   428     : scan_by_key_config_v2<64,
   430                             ::rocprim::block_load_method::block_load_transpose,
   431                             ::rocprim::block_store_method::block_store_transpose,
   432                             block_scan_algorithm::using_warp_scan>
   436 template<class key_type, class value_type>
   437 struct default_scan_by_key_config<
   438     static_cast<unsigned int>(target_arch::gfx908),
   441     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
   442                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
   443     : scan_by_key_config_v2<128,
   445                             ::rocprim::block_load_method::block_load_transpose,
   446                             ::rocprim::block_store_method::block_store_transpose,
   447                             block_scan_algorithm::using_warp_scan>
   451 template<class key_type, class value_type>
   452 struct default_scan_by_key_config<
   453     static_cast<unsigned int>(target_arch::gfx908),
   456     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
   457                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
   458     : scan_by_key_config_v2<256,
   460                             ::rocprim::block_load_method::block_load_transpose,
   461                             ::rocprim::block_store_method::block_store_transpose,
   462                             block_scan_algorithm::reduce_then_scan>
   466 template<class key_type, class value_type>
   467 struct default_scan_by_key_config<
   468     static_cast<unsigned int>(target_arch::gfx908),
   471     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
   472                       && (sizeof(value_type) <= 1))>>
   473     : scan_by_key_config_v2<256,
   475                             ::rocprim::block_load_method::block_load_transpose,
   476                             ::rocprim::block_store_method::block_store_transpose,
   477                             block_scan_algorithm::reduce_then_scan>
   481 template<class key_type, class value_type>
   482 struct default_scan_by_key_config<
   483     static_cast<unsigned int>(target_arch::gfx900),
   486     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   487                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
   488                       && (sizeof(value_type) > 4))>>
   489     : scan_by_key_config_v2<256,
   491                             ::rocprim::block_load_method::block_load_transpose,
   492                             ::rocprim::block_store_method::block_store_transpose,
   493                             block_scan_algorithm::reduce_then_scan>
   497 template<class key_type, class value_type>
   498 struct default_scan_by_key_config<
   499     static_cast<unsigned int>(target_arch::gfx900),
   502     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   503                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
   504                       && (sizeof(value_type) > 2))>>
   505     : scan_by_key_config_v2<128,
   507                             ::rocprim::block_load_method::block_load_transpose,
   508                             ::rocprim::block_store_method::block_store_transpose,
   509                             block_scan_algorithm::reduce_then_scan>
   513 template<class key_type, class value_type>
   514 struct default_scan_by_key_config<
   515     static_cast<unsigned int>(target_arch::gfx900),
   518     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   519                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
   520                       && (sizeof(value_type) > 1))>>
   521     : scan_by_key_config_v2<128,
   523                             ::rocprim::block_load_method::block_load_transpose,
   524                             ::rocprim::block_store_method::block_store_transpose,
   525                             block_scan_algorithm::reduce_then_scan>
   529 template<class key_type, class value_type>
   530 struct default_scan_by_key_config<
   531     static_cast<unsigned int>(target_arch::gfx900),
   534     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   535                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
   536     : scan_by_key_config_v2<128,
   538                             ::rocprim::block_load_method::block_load_transpose,
   539                             ::rocprim::block_store_method::block_store_transpose,
   540                             block_scan_algorithm::using_warp_scan>
   544 template<class key_type, class value_type>
   545 struct default_scan_by_key_config<
   546     static_cast<unsigned int>(target_arch::gfx900),
   549     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   550                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
   551                       && (sizeof(value_type) > 4))>>
   552     : scan_by_key_config_v2<256,
   554                             ::rocprim::block_load_method::block_load_transpose,
   555                             ::rocprim::block_store_method::block_store_transpose,
   556                             block_scan_algorithm::reduce_then_scan>
   560 template<class key_type, class value_type>
   561 struct default_scan_by_key_config<
   562     static_cast<unsigned int>(target_arch::gfx900),
   565     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   566                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
   567                       && (sizeof(value_type) > 2))>>
   568     : scan_by_key_config_v2<256,
   570                             ::rocprim::block_load_method::block_load_transpose,
   571                             ::rocprim::block_store_method::block_store_transpose,
   572                             block_scan_algorithm::reduce_then_scan>
   576 template<class key_type, class value_type>
   577 struct default_scan_by_key_config<
   578     static_cast<unsigned int>(target_arch::gfx900),
   581     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   582                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
   583                       && (sizeof(value_type) > 1))>>
   584     : scan_by_key_config_v2<256,
   586                             ::rocprim::block_load_method::block_load_transpose,
   587                             ::rocprim::block_store_method::block_store_transpose,
   588                             block_scan_algorithm::reduce_then_scan>
   592 template<class key_type, class value_type>
   593 struct default_scan_by_key_config<
   594     static_cast<unsigned int>(target_arch::gfx900),
   597     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   598                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
   599     : scan_by_key_config_v2<256,
   601                             ::rocprim::block_load_method::block_load_transpose,
   602                             ::rocprim::block_store_method::block_store_transpose,
   603                             block_scan_algorithm::using_warp_scan>
   607 template<class key_type, class value_type>
   608 struct default_scan_by_key_config<
   609     static_cast<unsigned int>(target_arch::gfx900),
   612     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   613                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
   614     : scan_by_key_config_v2<64,
   616                             ::rocprim::block_load_method::block_load_transpose,
   617                             ::rocprim::block_store_method::block_store_transpose,
   618                             block_scan_algorithm::reduce_then_scan>
   622 template<class key_type, class value_type>
   623 struct default_scan_by_key_config<
   624     static_cast<unsigned int>(target_arch::gfx900),
   627     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   628                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
   629     : scan_by_key_config_v2<256,
   631                             ::rocprim::block_load_method::block_load_transpose,
   632                             ::rocprim::block_store_method::block_store_transpose,
   633                             block_scan_algorithm::using_warp_scan>
   637 template<class key_type, class value_type>
   638 struct default_scan_by_key_config<
   639     static_cast<unsigned int>(target_arch::gfx900),
   642     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   643                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
   644     : scan_by_key_config_v2<256,
   646                             ::rocprim::block_load_method::block_load_transpose,
   647                             ::rocprim::block_store_method::block_store_transpose,
   648                             block_scan_algorithm::reduce_then_scan>
   652 template<class key_type, class value_type>
   653 struct default_scan_by_key_config<
   654     static_cast<unsigned int>(target_arch::gfx900),
   657     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   658                       && (sizeof(value_type) <= 1))>>
   659     : scan_by_key_config_v2<256,
   661                             ::rocprim::block_load_method::block_load_transpose,
   662                             ::rocprim::block_store_method::block_store_transpose,
   663                             block_scan_algorithm::using_warp_scan>
   667 template<class key_type, class value_type>
   668 struct default_scan_by_key_config<
   669     static_cast<unsigned int>(target_arch::gfx900),
   672     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   673                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
   674                       && (sizeof(value_type) > 4))>>
   675     : scan_by_key_config_v2<256,
   677                             ::rocprim::block_load_method::block_load_transpose,
   678                             ::rocprim::block_store_method::block_store_transpose,
   679                             block_scan_algorithm::using_warp_scan>
   683 template<class key_type, class value_type>
   684 struct default_scan_by_key_config<
   685     static_cast<unsigned int>(target_arch::gfx900),
   688     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   689                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
   690                       && (sizeof(value_type) > 2))>>
   691     : scan_by_key_config_v2<128,
   693                             ::rocprim::block_load_method::block_load_transpose,
   694                             ::rocprim::block_store_method::block_store_transpose,
   695                             block_scan_algorithm::reduce_then_scan>
   699 template<class key_type, class value_type>
   700 struct default_scan_by_key_config<
   701     static_cast<unsigned int>(target_arch::gfx900),
   704     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   705                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
   706                       && (sizeof(value_type) > 1))>>
   707     : scan_by_key_config_v2<128,
   709                             ::rocprim::block_load_method::block_load_transpose,
   710                             ::rocprim::block_store_method::block_store_transpose,
   711                             block_scan_algorithm::reduce_then_scan>
   715 template<class key_type, class value_type>
   716 struct default_scan_by_key_config<
   717     static_cast<unsigned int>(target_arch::gfx900),
   720     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   721                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
   722     : scan_by_key_config_v2<128,
   724                             ::rocprim::block_load_method::block_load_transpose,
   725                             ::rocprim::block_store_method::block_store_transpose,
   726                             block_scan_algorithm::using_warp_scan>
   730 template<class key_type, class value_type>
   731 struct default_scan_by_key_config<
   732     static_cast<unsigned int>(target_arch::gfx900),
   735     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   736                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
   737                       && (sizeof(value_type) > 4))>>
   738     : scan_by_key_config_v2<256,
   740                             ::rocprim::block_load_method::block_load_transpose,
   741                             ::rocprim::block_store_method::block_store_transpose,
   742                             block_scan_algorithm::using_warp_scan>
   746 template<class key_type, class value_type>
   747 struct default_scan_by_key_config<
   748     static_cast<unsigned int>(target_arch::gfx900),
   751     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   752                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
   753                       && (sizeof(value_type) > 2))>>
   754     : scan_by_key_config_v2<256,
   756                             ::rocprim::block_load_method::block_load_transpose,
   757                             ::rocprim::block_store_method::block_store_transpose,
   758                             block_scan_algorithm::reduce_then_scan>
   762 template<class key_type, class value_type>
   763 struct default_scan_by_key_config<
   764     static_cast<unsigned int>(target_arch::gfx900),
   767     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   768                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
   769                       && (sizeof(value_type) > 1))>>
   770     : scan_by_key_config_v2<256,
   772                             ::rocprim::block_load_method::block_load_transpose,
   773                             ::rocprim::block_store_method::block_store_transpose,
   774                             block_scan_algorithm::reduce_then_scan>
   778 template<class key_type, class value_type>
   779 struct default_scan_by_key_config<
   780     static_cast<unsigned int>(target_arch::gfx900),
   783     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   784                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
   785     : scan_by_key_config_v2<256,
   787                             ::rocprim::block_load_method::block_load_transpose,
   788                             ::rocprim::block_store_method::block_store_transpose,
   789                             block_scan_algorithm::using_warp_scan>
   793 template<class key_type, class value_type>
   794 struct default_scan_by_key_config<
   795     static_cast<unsigned int>(target_arch::gfx900),
   798     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   799                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 8)
   800                       && (sizeof(value_type) > 4))>>
   801     : scan_by_key_config_v2<64,
   803                             ::rocprim::block_load_method::block_load_transpose,
   804                             ::rocprim::block_store_method::block_store_transpose,
   805                             block_scan_algorithm::using_warp_scan>
   809 template<class key_type, class value_type>
   810 struct default_scan_by_key_config<
   811     static_cast<unsigned int>(target_arch::gfx900),
   814     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   815                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 4)
   816                       && (sizeof(value_type) > 2))>>
   817     : scan_by_key_config_v2<256,
   819                             ::rocprim::block_load_method::block_load_transpose,
   820                             ::rocprim::block_store_method::block_store_transpose,
   821                             block_scan_algorithm::using_warp_scan>
   825 template<class key_type, class value_type>
   826 struct default_scan_by_key_config<
   827     static_cast<unsigned int>(target_arch::gfx900),
   830     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   831                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 2)
   832                       && (sizeof(value_type) > 1))>>
   833     : scan_by_key_config_v2<256,
   835                             ::rocprim::block_load_method::block_load_transpose,
   836                             ::rocprim::block_store_method::block_store_transpose,
   837                             block_scan_algorithm::reduce_then_scan>
   841 template<class key_type, class value_type>
   842 struct default_scan_by_key_config<
   843     static_cast<unsigned int>(target_arch::gfx900),
   846     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
   847                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 1))>>
   848     : scan_by_key_config_v2<256,
   850                             ::rocprim::block_load_method::block_load_transpose,
   851                             ::rocprim::block_store_method::block_store_transpose,
   852                             block_scan_algorithm::using_warp_scan>
   856 template<class key_type, class value_type>
   857 struct default_scan_by_key_config<
   858     static_cast<unsigned int>(target_arch::gfx900),
   861     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
   862                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
   863     : scan_by_key_config_v2<64,
   865                             ::rocprim::block_load_method::block_load_transpose,
   866                             ::rocprim::block_store_method::block_store_transpose,
   867                             block_scan_algorithm::using_warp_scan>
   871 template<class key_type, class value_type>
   872 struct default_scan_by_key_config<
   873     static_cast<unsigned int>(target_arch::gfx900),
   876     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
   877                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
   878     : scan_by_key_config_v2<256,
   880                             ::rocprim::block_load_method::block_load_transpose,
   881                             ::rocprim::block_store_method::block_store_transpose,
   882                             block_scan_algorithm::using_warp_scan>
   886 template<class key_type, class value_type>
   887 struct default_scan_by_key_config<
   888     static_cast<unsigned int>(target_arch::gfx900),
   891     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
   892                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
   893     : scan_by_key_config_v2<64,
   895                             ::rocprim::block_load_method::block_load_transpose,
   896                             ::rocprim::block_store_method::block_store_transpose,
   897                             block_scan_algorithm::reduce_then_scan>
   901 template<class key_type, class value_type>
   902 struct default_scan_by_key_config<
   903     static_cast<unsigned int>(target_arch::gfx900),
   906     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
   907                       && (sizeof(value_type) <= 1))>>
   908     : scan_by_key_config_v2<64,
   910                             ::rocprim::block_load_method::block_load_transpose,
   911                             ::rocprim::block_store_method::block_store_transpose,
   912                             block_scan_algorithm::using_warp_scan>
   916 template<class key_type, class value_type>
   917 struct default_scan_by_key_config<
   918     static_cast<unsigned int>(target_arch::gfx906),
   921     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   922                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
   923                       && (sizeof(value_type) > 4))>>
   924     : scan_by_key_config_v2<256,
   926                             ::rocprim::block_load_method::block_load_transpose,
   927                             ::rocprim::block_store_method::block_store_transpose,
   928                             block_scan_algorithm::using_warp_scan>
   932 template<class key_type, class value_type>
   933 struct default_scan_by_key_config<
   934     static_cast<unsigned int>(target_arch::gfx906),
   937     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   938                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
   939                       && (sizeof(value_type) > 2))>>
   940     : scan_by_key_config_v2<256,
   942                             ::rocprim::block_load_method::block_load_transpose,
   943                             ::rocprim::block_store_method::block_store_transpose,
   944                             block_scan_algorithm::using_warp_scan>
   948 template<class key_type, class value_type>
   949 struct default_scan_by_key_config<
   950     static_cast<unsigned int>(target_arch::gfx906),
   953     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   954                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
   955                       && (sizeof(value_type) > 1))>>
   956     : scan_by_key_config_v2<64,
   958                             ::rocprim::block_load_method::block_load_transpose,
   959                             ::rocprim::block_store_method::block_store_transpose,
   960                             block_scan_algorithm::using_warp_scan>
   964 template<class key_type, class value_type>
   965 struct default_scan_by_key_config<
   966     static_cast<unsigned int>(target_arch::gfx906),
   969     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
   970                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
   971     : scan_by_key_config_v2<64,
   973                             ::rocprim::block_load_method::block_load_transpose,
   974                             ::rocprim::block_store_method::block_store_transpose,
   975                             block_scan_algorithm::using_warp_scan>
   979 template<class key_type, class value_type>
   980 struct default_scan_by_key_config<
   981     static_cast<unsigned int>(target_arch::gfx906),
   984     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
   985                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
   986                       && (sizeof(value_type) > 4))>>
   987     : scan_by_key_config_v2<64,
   989                             ::rocprim::block_load_method::block_load_transpose,
   990                             ::rocprim::block_store_method::block_store_transpose,
   991                             block_scan_algorithm::reduce_then_scan>
   995 template<class key_type, class value_type>
   996 struct default_scan_by_key_config<
   997     static_cast<unsigned int>(target_arch::gfx906),
  1000     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1001                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
  1002                       && (sizeof(value_type) > 2))>>
  1003     : scan_by_key_config_v2<256,
  1005                             ::rocprim::block_load_method::block_load_transpose,
  1006                             ::rocprim::block_store_method::block_store_transpose,
  1007                             block_scan_algorithm::reduce_then_scan>
  1011 template<class key_type, class value_type>
  1012 struct default_scan_by_key_config<
  1013     static_cast<unsigned int>(target_arch::gfx906),
  1016     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1017                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
  1018                       && (sizeof(value_type) > 1))>>
  1019     : scan_by_key_config_v2<256,
  1021                             ::rocprim::block_load_method::block_load_transpose,
  1022                             ::rocprim::block_store_method::block_store_transpose,
  1023                             block_scan_algorithm::using_warp_scan>
  1027 template<class key_type, class value_type>
  1028 struct default_scan_by_key_config<
  1029     static_cast<unsigned int>(target_arch::gfx906),
  1032     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1033                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
  1034     : scan_by_key_config_v2<64,
  1036                             ::rocprim::block_load_method::block_load_transpose,
  1037                             ::rocprim::block_store_method::block_store_transpose,
  1038                             block_scan_algorithm::reduce_then_scan>
  1042 template<class key_type, class value_type>
  1043 struct default_scan_by_key_config<
  1044     static_cast<unsigned int>(target_arch::gfx906),
  1047     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1048                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
  1049     : scan_by_key_config_v2<64,
  1051                             ::rocprim::block_load_method::block_load_transpose,
  1052                             ::rocprim::block_store_method::block_store_transpose,
  1053                             block_scan_algorithm::reduce_then_scan>
  1057 template<class key_type, class value_type>
  1058 struct default_scan_by_key_config<
  1059     static_cast<unsigned int>(target_arch::gfx906),
  1062     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1063                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
  1064     : scan_by_key_config_v2<256,
  1066                             ::rocprim::block_load_method::block_load_transpose,
  1067                             ::rocprim::block_store_method::block_store_transpose,
  1068                             block_scan_algorithm::using_warp_scan>
  1072 template<class key_type, class value_type>
  1073 struct default_scan_by_key_config<
  1074     static_cast<unsigned int>(target_arch::gfx906),
  1077     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1078                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
  1079     : scan_by_key_config_v2<64,
  1081                             ::rocprim::block_load_method::block_load_transpose,
  1082                             ::rocprim::block_store_method::block_store_transpose,
  1083                             block_scan_algorithm::reduce_then_scan>
  1087 template<class key_type, class value_type>
  1088 struct default_scan_by_key_config<
  1089     static_cast<unsigned int>(target_arch::gfx906),
  1092     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1093                       && (sizeof(value_type) <= 1))>>
  1094     : scan_by_key_config_v2<64,
  1096                             ::rocprim::block_load_method::block_load_transpose,
  1097                             ::rocprim::block_store_method::block_store_transpose,
  1098                             block_scan_algorithm::using_warp_scan>
  1102 template<class key_type, class value_type>
  1103 struct default_scan_by_key_config<
  1104     static_cast<unsigned int>(target_arch::gfx906),
  1107     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1108                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
  1109                       && (sizeof(value_type) > 4))>>
  1110     : scan_by_key_config_v2<256,
  1112                             ::rocprim::block_load_method::block_load_transpose,
  1113                             ::rocprim::block_store_method::block_store_transpose,
  1114                             block_scan_algorithm::using_warp_scan>
  1118 template<class key_type, class value_type>
  1119 struct default_scan_by_key_config<
  1120     static_cast<unsigned int>(target_arch::gfx906),
  1123     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1124                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
  1125                       && (sizeof(value_type) > 2))>>
  1126     : scan_by_key_config_v2<256,
  1128                             ::rocprim::block_load_method::block_load_transpose,
  1129                             ::rocprim::block_store_method::block_store_transpose,
  1130                             block_scan_algorithm::using_warp_scan>
  1134 template<class key_type, class value_type>
  1135 struct default_scan_by_key_config<
  1136     static_cast<unsigned int>(target_arch::gfx906),
  1139     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1140                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
  1141                       && (sizeof(value_type) > 1))>>
  1142     : scan_by_key_config_v2<64,
  1144                             ::rocprim::block_load_method::block_load_transpose,
  1145                             ::rocprim::block_store_method::block_store_transpose,
  1146                             block_scan_algorithm::reduce_then_scan>
  1150 template<class key_type, class value_type>
  1151 struct default_scan_by_key_config<
  1152     static_cast<unsigned int>(target_arch::gfx906),
  1155     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1156                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
  1157     : scan_by_key_config_v2<64,
  1159                             ::rocprim::block_load_method::block_load_transpose,
  1160                             ::rocprim::block_store_method::block_store_transpose,
  1161                             block_scan_algorithm::using_warp_scan>
  1165 template<class key_type, class value_type>
  1166 struct default_scan_by_key_config<
  1167     static_cast<unsigned int>(target_arch::gfx906),
  1170     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1171                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
  1172                       && (sizeof(value_type) > 4))>>
  1173     : scan_by_key_config_v2<64,
  1175                             ::rocprim::block_load_method::block_load_transpose,
  1176                             ::rocprim::block_store_method::block_store_transpose,
  1177                             block_scan_algorithm::reduce_then_scan>
  1181 template<class key_type, class value_type>
  1182 struct default_scan_by_key_config<
  1183     static_cast<unsigned int>(target_arch::gfx906),
  1186     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1187                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
  1188                       && (sizeof(value_type) > 2))>>
  1189     : scan_by_key_config_v2<256,
  1191                             ::rocprim::block_load_method::block_load_transpose,
  1192                             ::rocprim::block_store_method::block_store_transpose,
  1193                             block_scan_algorithm::reduce_then_scan>
  1197 template<class key_type, class value_type>
  1198 struct default_scan_by_key_config<
  1199     static_cast<unsigned int>(target_arch::gfx906),
  1202     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1203                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
  1204                       && (sizeof(value_type) > 1))>>
  1205     : scan_by_key_config_v2<256,
  1207                             ::rocprim::block_load_method::block_load_transpose,
  1208                             ::rocprim::block_store_method::block_store_transpose,
  1209                             block_scan_algorithm::using_warp_scan>
  1213 template<class key_type, class value_type>
  1214 struct default_scan_by_key_config<
  1215     static_cast<unsigned int>(target_arch::gfx906),
  1218     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1219                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
  1220     : scan_by_key_config_v2<64,
  1222                             ::rocprim::block_load_method::block_load_transpose,
  1223                             ::rocprim::block_store_method::block_store_transpose,
  1224                             block_scan_algorithm::using_warp_scan>
  1228 template<class key_type, class value_type>
  1229 struct default_scan_by_key_config<
  1230     static_cast<unsigned int>(target_arch::gfx906),
  1233     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1234                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 8)
  1235                       && (sizeof(value_type) > 4))>>
  1236     : scan_by_key_config_v2<64,
  1238                             ::rocprim::block_load_method::block_load_transpose,
  1239                             ::rocprim::block_store_method::block_store_transpose,
  1240                             block_scan_algorithm::using_warp_scan>
  1244 template<class key_type, class value_type>
  1245 struct default_scan_by_key_config<
  1246     static_cast<unsigned int>(target_arch::gfx906),
  1249     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1250                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 4)
  1251                       && (sizeof(value_type) > 2))>>
  1252     : scan_by_key_config_v2<256,
  1254                             ::rocprim::block_load_method::block_load_transpose,
  1255                             ::rocprim::block_store_method::block_store_transpose,
  1256                             block_scan_algorithm::using_warp_scan>
  1260 template<class key_type, class value_type>
  1261 struct default_scan_by_key_config<
  1262     static_cast<unsigned int>(target_arch::gfx906),
  1265     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1266                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 2)
  1267                       && (sizeof(value_type) > 1))>>
  1268     : scan_by_key_config_v2<64,
  1270                             ::rocprim::block_load_method::block_load_transpose,
  1271                             ::rocprim::block_store_method::block_store_transpose,
  1272                             block_scan_algorithm::using_warp_scan>
  1276 template<class key_type, class value_type>
  1277 struct default_scan_by_key_config<
  1278     static_cast<unsigned int>(target_arch::gfx906),
  1281     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1282                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 1))>>
  1283     : scan_by_key_config_v2<64,
  1285                             ::rocprim::block_load_method::block_load_transpose,
  1286                             ::rocprim::block_store_method::block_store_transpose,
  1287                             block_scan_algorithm::using_warp_scan>
  1291 template<class key_type, class value_type>
  1292 struct default_scan_by_key_config<
  1293     static_cast<unsigned int>(target_arch::gfx906),
  1296     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  1297                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
  1298     : scan_by_key_config_v2<64,
  1300                             ::rocprim::block_load_method::block_load_transpose,
  1301                             ::rocprim::block_store_method::block_store_transpose,
  1302                             block_scan_algorithm::reduce_then_scan>
  1306 template<class key_type, class value_type>
  1307 struct default_scan_by_key_config<
  1308     static_cast<unsigned int>(target_arch::gfx906),
  1311     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  1312                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
  1313     : scan_by_key_config_v2<256,
  1315                             ::rocprim::block_load_method::block_load_transpose,
  1316                             ::rocprim::block_store_method::block_store_transpose,
  1317                             block_scan_algorithm::using_warp_scan>
  1321 template<class key_type, class value_type>
  1322 struct default_scan_by_key_config<
  1323     static_cast<unsigned int>(target_arch::gfx906),
  1326     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  1327                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
  1328     : scan_by_key_config_v2<64,
  1330                             ::rocprim::block_load_method::block_load_transpose,
  1331                             ::rocprim::block_store_method::block_store_transpose,
  1332                             block_scan_algorithm::using_warp_scan>
  1336 template<class key_type, class value_type>
  1337 struct default_scan_by_key_config<
  1338     static_cast<unsigned int>(target_arch::gfx906),
  1341     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  1342                       && (sizeof(value_type) <= 1))>>
  1343     : scan_by_key_config_v2<64,
  1345                             ::rocprim::block_load_method::block_load_transpose,
  1346                             ::rocprim::block_store_method::block_store_transpose,
  1347                             block_scan_algorithm::reduce_then_scan>
  1351 template<class key_type, class value_type>
  1352 struct default_scan_by_key_config<
  1353     static_cast<unsigned int>(target_arch::gfx1030),
  1356     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1357                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
  1358                       && (sizeof(value_type) > 4))>>
  1359     : scan_by_key_config_v2<128,
  1361                             ::rocprim::block_load_method::block_load_transpose,
  1362                             ::rocprim::block_store_method::block_store_transpose,
  1363                             block_scan_algorithm::using_warp_scan>
  1367 template<class key_type, class value_type>
  1368 struct default_scan_by_key_config<
  1369     static_cast<unsigned int>(target_arch::gfx1030),
  1372     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1373                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
  1374                       && (sizeof(value_type) > 2))>>
  1375     : scan_by_key_config_v2<128,
  1377                             ::rocprim::block_load_method::block_load_transpose,
  1378                             ::rocprim::block_store_method::block_store_transpose,
  1379                             block_scan_algorithm::reduce_then_scan>
  1383 template<class key_type, class value_type>
  1384 struct default_scan_by_key_config<
  1385     static_cast<unsigned int>(target_arch::gfx1030),
  1388     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1389                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
  1390                       && (sizeof(value_type) > 1))>>
  1391     : scan_by_key_config_v2<64,
  1393                             ::rocprim::block_load_method::block_load_transpose,
  1394                             ::rocprim::block_store_method::block_store_transpose,
  1395                             block_scan_algorithm::using_warp_scan>
  1399 template<class key_type, class value_type>
  1400 struct default_scan_by_key_config<
  1401     static_cast<unsigned int>(target_arch::gfx1030),
  1404     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1405                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
  1406     : scan_by_key_config_v2<64,
  1408                             ::rocprim::block_load_method::block_load_transpose,
  1409                             ::rocprim::block_store_method::block_store_transpose,
  1410                             block_scan_algorithm::using_warp_scan>
  1414 template<class key_type, class value_type>
  1415 struct default_scan_by_key_config<
  1416     static_cast<unsigned int>(target_arch::gfx1030),
  1419     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1420                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
  1421                       && (sizeof(value_type) > 4))>>
  1422     : scan_by_key_config_v2<256,
  1424                             ::rocprim::block_load_method::block_load_transpose,
  1425                             ::rocprim::block_store_method::block_store_transpose,
  1426                             block_scan_algorithm::using_warp_scan>
  1430 template<class key_type, class value_type>
  1431 struct default_scan_by_key_config<
  1432     static_cast<unsigned int>(target_arch::gfx1030),
  1435     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1436                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
  1437                       && (sizeof(value_type) > 2))>>
  1438     : scan_by_key_config_v2<256,
  1440                             ::rocprim::block_load_method::block_load_transpose,
  1441                             ::rocprim::block_store_method::block_store_transpose,
  1442                             block_scan_algorithm::using_warp_scan>
  1446 template<class key_type, class value_type>
  1447 struct default_scan_by_key_config<
  1448     static_cast<unsigned int>(target_arch::gfx1030),
  1451     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1452                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
  1453                       && (sizeof(value_type) > 1))>>
  1454     : scan_by_key_config_v2<64,
  1456                             ::rocprim::block_load_method::block_load_transpose,
  1457                             ::rocprim::block_store_method::block_store_transpose,
  1458                             block_scan_algorithm::reduce_then_scan>
  1462 template<class key_type, class value_type>
  1463 struct default_scan_by_key_config<
  1464     static_cast<unsigned int>(target_arch::gfx1030),
  1467     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1468                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
  1469     : scan_by_key_config_v2<128,
  1471                             ::rocprim::block_load_method::block_load_transpose,
  1472                             ::rocprim::block_store_method::block_store_transpose,
  1473                             block_scan_algorithm::reduce_then_scan>
  1477 template<class key_type, class value_type>
  1478 struct default_scan_by_key_config<
  1479     static_cast<unsigned int>(target_arch::gfx1030),
  1482     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1483                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
  1484     : scan_by_key_config_v2<64,
  1486                             ::rocprim::block_load_method::block_load_transpose,
  1487                             ::rocprim::block_store_method::block_store_transpose,
  1488                             block_scan_algorithm::using_warp_scan>
  1492 template<class key_type, class value_type>
  1493 struct default_scan_by_key_config<
  1494     static_cast<unsigned int>(target_arch::gfx1030),
  1497     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1498                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
  1499     : scan_by_key_config_v2<128,
  1501                             ::rocprim::block_load_method::block_load_transpose,
  1502                             ::rocprim::block_store_method::block_store_transpose,
  1503                             block_scan_algorithm::using_warp_scan>
  1507 template<class key_type, class value_type>
  1508 struct default_scan_by_key_config<
  1509     static_cast<unsigned int>(target_arch::gfx1030),
  1512     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1513                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
  1514     : scan_by_key_config_v2<128,
  1516                             ::rocprim::block_load_method::block_load_transpose,
  1517                             ::rocprim::block_store_method::block_store_transpose,
  1518                             block_scan_algorithm::using_warp_scan>
  1522 template<class key_type, class value_type>
  1523 struct default_scan_by_key_config<
  1524     static_cast<unsigned int>(target_arch::gfx1030),
  1527     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1528                       && (sizeof(value_type) <= 1))>>
  1529     : scan_by_key_config_v2<256,
  1531                             ::rocprim::block_load_method::block_load_transpose,
  1532                             ::rocprim::block_store_method::block_store_transpose,
  1533                             block_scan_algorithm::using_warp_scan>
  1537 template<class key_type, class value_type>
  1538 struct default_scan_by_key_config<
  1539     static_cast<unsigned int>(target_arch::gfx1030),
  1542     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1543                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
  1544                       && (sizeof(value_type) > 4))>>
  1545     : scan_by_key_config_v2<256,
  1547                             ::rocprim::block_load_method::block_load_transpose,
  1548                             ::rocprim::block_store_method::block_store_transpose,
  1549                             block_scan_algorithm::using_warp_scan>
  1553 template<class key_type, class value_type>
  1554 struct default_scan_by_key_config<
  1555     static_cast<unsigned int>(target_arch::gfx1030),
  1558     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1559                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
  1560                       && (sizeof(value_type) > 2))>>
  1561     : scan_by_key_config_v2<128,
  1563                             ::rocprim::block_load_method::block_load_transpose,
  1564                             ::rocprim::block_store_method::block_store_transpose,
  1565                             block_scan_algorithm::using_warp_scan>
  1569 template<class key_type, class value_type>
  1570 struct default_scan_by_key_config<
  1571     static_cast<unsigned int>(target_arch::gfx1030),
  1574     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1575                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
  1576                       && (sizeof(value_type) > 1))>>
  1577     : scan_by_key_config_v2<64,
  1579                             ::rocprim::block_load_method::block_load_transpose,
  1580                             ::rocprim::block_store_method::block_store_transpose,
  1581                             block_scan_algorithm::using_warp_scan>
  1585 template<class key_type, class value_type>
  1586 struct default_scan_by_key_config<
  1587     static_cast<unsigned int>(target_arch::gfx1030),
  1590     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1591                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
  1592     : scan_by_key_config_v2<64,
  1594                             ::rocprim::block_load_method::block_load_transpose,
  1595                             ::rocprim::block_store_method::block_store_transpose,
  1596                             block_scan_algorithm::reduce_then_scan>
  1600 template<class key_type, class value_type>
  1601 struct default_scan_by_key_config<
  1602     static_cast<unsigned int>(target_arch::gfx1030),
  1605     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1606                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
  1607                       && (sizeof(value_type) > 4))>>
  1608     : scan_by_key_config_v2<256,
  1610                             ::rocprim::block_load_method::block_load_transpose,
  1611                             ::rocprim::block_store_method::block_store_transpose,
  1612                             block_scan_algorithm::using_warp_scan>
  1616 template<class key_type, class value_type>
  1617 struct default_scan_by_key_config<
  1618     static_cast<unsigned int>(target_arch::gfx1030),
  1621     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1622                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
  1623                       && (sizeof(value_type) > 2))>>
  1624     : scan_by_key_config_v2<128,
  1626                             ::rocprim::block_load_method::block_load_transpose,
  1627                             ::rocprim::block_store_method::block_store_transpose,
  1628                             block_scan_algorithm::reduce_then_scan>
  1632 template<class key_type, class value_type>
  1633 struct default_scan_by_key_config<
  1634     static_cast<unsigned int>(target_arch::gfx1030),
  1637     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1638                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
  1639                       && (sizeof(value_type) > 1))>>
  1640     : scan_by_key_config_v2<64,
  1642                             ::rocprim::block_load_method::block_load_transpose,
  1643                             ::rocprim::block_store_method::block_store_transpose,
  1644                             block_scan_algorithm::reduce_then_scan>
  1648 template<class key_type, class value_type>
  1649 struct default_scan_by_key_config<
  1650     static_cast<unsigned int>(target_arch::gfx1030),
  1653     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1654                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
  1655     : scan_by_key_config_v2<128,
  1657                             ::rocprim::block_load_method::block_load_transpose,
  1658                             ::rocprim::block_store_method::block_store_transpose,
  1659                             block_scan_algorithm::reduce_then_scan>
  1663 template<class key_type, class value_type>
  1664 struct default_scan_by_key_config<
  1665     static_cast<unsigned int>(target_arch::gfx1030),
  1668     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1669                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 8)
  1670                       && (sizeof(value_type) > 4))>>
  1671     : scan_by_key_config_v2<256,
  1673                             ::rocprim::block_load_method::block_load_transpose,
  1674                             ::rocprim::block_store_method::block_store_transpose,
  1675                             block_scan_algorithm::using_warp_scan>
  1679 template<class key_type, class value_type>
  1680 struct default_scan_by_key_config<
  1681     static_cast<unsigned int>(target_arch::gfx1030),
  1684     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1685                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 4)
  1686                       && (sizeof(value_type) > 2))>>
  1687     : scan_by_key_config_v2<128,
  1689                             ::rocprim::block_load_method::block_load_transpose,
  1690                             ::rocprim::block_store_method::block_store_transpose,
  1691                             block_scan_algorithm::using_warp_scan>
  1695 template<class key_type, class value_type>
  1696 struct default_scan_by_key_config<
  1697     static_cast<unsigned int>(target_arch::gfx1030),
  1700     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1701                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 2)
  1702                       && (sizeof(value_type) > 1))>>
  1703     : scan_by_key_config_v2<128,
  1705                             ::rocprim::block_load_method::block_load_transpose,
  1706                             ::rocprim::block_store_method::block_store_transpose,
  1707                             block_scan_algorithm::using_warp_scan>
  1711 template<class key_type, class value_type>
  1712 struct default_scan_by_key_config<
  1713     static_cast<unsigned int>(target_arch::gfx1030),
  1716     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1717                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 1))>>
  1718     : scan_by_key_config_v2<256,
  1720                             ::rocprim::block_load_method::block_load_transpose,
  1721                             ::rocprim::block_store_method::block_store_transpose,
  1722                             block_scan_algorithm::using_warp_scan>
  1726 template<class key_type, class value_type>
  1727 struct default_scan_by_key_config<
  1728     static_cast<unsigned int>(target_arch::gfx1030),
  1731     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  1732                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
  1733     : scan_by_key_config_v2<128,
  1735                             ::rocprim::block_load_method::block_load_transpose,
  1736                             ::rocprim::block_store_method::block_store_transpose,
  1737                             block_scan_algorithm::reduce_then_scan>
  1741 template<class key_type, class value_type>
  1742 struct default_scan_by_key_config<
  1743     static_cast<unsigned int>(target_arch::gfx1030),
  1746     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  1747                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
  1748     : scan_by_key_config_v2<256,
  1750                             ::rocprim::block_load_method::block_load_transpose,
  1751                             ::rocprim::block_store_method::block_store_transpose,
  1752                             block_scan_algorithm::using_warp_scan>
  1756 template<class key_type, class value_type>
  1757 struct default_scan_by_key_config<
  1758     static_cast<unsigned int>(target_arch::gfx1030),
  1761     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  1762                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
  1763     : scan_by_key_config_v2<128,
  1765                             ::rocprim::block_load_method::block_load_transpose,
  1766                             ::rocprim::block_store_method::block_store_transpose,
  1767                             block_scan_algorithm::using_warp_scan>
  1771 template<class key_type, class value_type>
  1772 struct default_scan_by_key_config<
  1773     static_cast<unsigned int>(target_arch::gfx1030),
  1776     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  1777                       && (sizeof(value_type) <= 1))>>
  1778     : scan_by_key_config_v2<256,
  1780                             ::rocprim::block_load_method::block_load_transpose,
  1781                             ::rocprim::block_store_method::block_store_transpose,
  1782                             block_scan_algorithm::using_warp_scan>
  1786 template<class key_type, class value_type>
  1787 struct default_scan_by_key_config<
  1788     static_cast<unsigned int>(target_arch::unknown),
  1791     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1792                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
  1793                       && (sizeof(value_type) > 4))>>
  1794     : scan_by_key_config_v2<256,
  1796                             ::rocprim::block_load_method::block_load_transpose,
  1797                             ::rocprim::block_store_method::block_store_transpose,
  1798                             block_scan_algorithm::using_warp_scan>
  1802 template<class key_type, class value_type>
  1803 struct default_scan_by_key_config<
  1804     static_cast<unsigned int>(target_arch::unknown),
  1807     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1808                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
  1809                       && (sizeof(value_type) > 2))>>
  1810     : scan_by_key_config_v2<256,
  1812                             ::rocprim::block_load_method::block_load_transpose,
  1813                             ::rocprim::block_store_method::block_store_transpose,
  1814                             block_scan_algorithm::reduce_then_scan>
  1818 template<class key_type, class value_type>
  1819 struct default_scan_by_key_config<
  1820     static_cast<unsigned int>(target_arch::unknown),
  1823     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1824                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
  1825                       && (sizeof(value_type) > 1))>>
  1826     : scan_by_key_config_v2<64,
  1828                             ::rocprim::block_load_method::block_load_transpose,
  1829                             ::rocprim::block_store_method::block_store_transpose,
  1830                             block_scan_algorithm::using_warp_scan>
  1834 template<class key_type, class value_type>
  1835 struct default_scan_by_key_config<
  1836     static_cast<unsigned int>(target_arch::unknown),
  1839     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1840                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
  1841     : scan_by_key_config_v2<64,
  1843                             ::rocprim::block_load_method::block_load_transpose,
  1844                             ::rocprim::block_store_method::block_store_transpose,
  1845                             block_scan_algorithm::reduce_then_scan>
  1849 template<class key_type, class value_type>
  1850 struct default_scan_by_key_config<
  1851     static_cast<unsigned int>(target_arch::unknown),
  1854     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1855                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
  1856                       && (sizeof(value_type) > 4))>>
  1857     : scan_by_key_config_v2<128,
  1859                             ::rocprim::block_load_method::block_load_transpose,
  1860                             ::rocprim::block_store_method::block_store_transpose,
  1861                             block_scan_algorithm::using_warp_scan>
  1865 template<class key_type, class value_type>
  1866 struct default_scan_by_key_config<
  1867     static_cast<unsigned int>(target_arch::unknown),
  1870     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1871                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
  1872                       && (sizeof(value_type) > 2))>>
  1873     : scan_by_key_config_v2<256,
  1875                             ::rocprim::block_load_method::block_load_transpose,
  1876                             ::rocprim::block_store_method::block_store_transpose,
  1877                             block_scan_algorithm::reduce_then_scan>
  1881 template<class key_type, class value_type>
  1882 struct default_scan_by_key_config<
  1883     static_cast<unsigned int>(target_arch::unknown),
  1886     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1887                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
  1888                       && (sizeof(value_type) > 1))>>
  1889     : scan_by_key_config_v2<256,
  1891                             ::rocprim::block_load_method::block_load_transpose,
  1892                             ::rocprim::block_store_method::block_store_transpose,
  1893                             block_scan_algorithm::reduce_then_scan>
  1897 template<class key_type, class value_type>
  1898 struct default_scan_by_key_config<
  1899     static_cast<unsigned int>(target_arch::unknown),
  1902     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  1903                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
  1904     : scan_by_key_config_v2<128,
  1906                             ::rocprim::block_load_method::block_load_transpose,
  1907                             ::rocprim::block_store_method::block_store_transpose,
  1908                             block_scan_algorithm::using_warp_scan>
  1912 template<class key_type, class value_type>
  1913 struct default_scan_by_key_config<
  1914     static_cast<unsigned int>(target_arch::unknown),
  1917     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1918                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
  1919     : scan_by_key_config_v2<64,
  1921                             ::rocprim::block_load_method::block_load_transpose,
  1922                             ::rocprim::block_store_method::block_store_transpose,
  1923                             block_scan_algorithm::using_warp_scan>
  1927 template<class key_type, class value_type>
  1928 struct default_scan_by_key_config<
  1929     static_cast<unsigned int>(target_arch::unknown),
  1932     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1933                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
  1934     : scan_by_key_config_v2<256,
  1936                             ::rocprim::block_load_method::block_load_transpose,
  1937                             ::rocprim::block_store_method::block_store_transpose,
  1938                             block_scan_algorithm::using_warp_scan>
  1942 template<class key_type, class value_type>
  1943 struct default_scan_by_key_config<
  1944     static_cast<unsigned int>(target_arch::unknown),
  1947     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1948                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
  1949     : scan_by_key_config_v2<256,
  1951                             ::rocprim::block_load_method::block_load_transpose,
  1952                             ::rocprim::block_store_method::block_store_transpose,
  1953                             block_scan_algorithm::reduce_then_scan>
  1957 template<class key_type, class value_type>
  1958 struct default_scan_by_key_config<
  1959     static_cast<unsigned int>(target_arch::unknown),
  1962     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  1963                       && (sizeof(value_type) <= 1))>>
  1964     : scan_by_key_config_v2<256,
  1966                             ::rocprim::block_load_method::block_load_transpose,
  1967                             ::rocprim::block_store_method::block_store_transpose,
  1968                             block_scan_algorithm::using_warp_scan>
  1972 template<class key_type, class value_type>
  1973 struct default_scan_by_key_config<
  1974     static_cast<unsigned int>(target_arch::unknown),
  1977     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1978                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
  1979                       && (sizeof(value_type) > 4))>>
  1980     : scan_by_key_config_v2<256,
  1982                             ::rocprim::block_load_method::block_load_transpose,
  1983                             ::rocprim::block_store_method::block_store_transpose,
  1984                             block_scan_algorithm::reduce_then_scan>
  1988 template<class key_type, class value_type>
  1989 struct default_scan_by_key_config<
  1990     static_cast<unsigned int>(target_arch::unknown),
  1993     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  1994                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
  1995                       && (sizeof(value_type) > 2))>>
  1996     : scan_by_key_config_v2<256,
  1998                             ::rocprim::block_load_method::block_load_transpose,
  1999                             ::rocprim::block_store_method::block_store_transpose,
  2000                             block_scan_algorithm::reduce_then_scan>
  2004 template<class key_type, class value_type>
  2005 struct default_scan_by_key_config<
  2006     static_cast<unsigned int>(target_arch::unknown),
  2009     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2010                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
  2011                       && (sizeof(value_type) > 1))>>
  2012     : scan_by_key_config_v2<64,
  2014                             ::rocprim::block_load_method::block_load_transpose,
  2015                             ::rocprim::block_store_method::block_store_transpose,
  2016                             block_scan_algorithm::using_warp_scan>
  2020 template<class key_type, class value_type>
  2021 struct default_scan_by_key_config<
  2022     static_cast<unsigned int>(target_arch::unknown),
  2025     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2026                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
  2027     : scan_by_key_config_v2<256,
  2029                             ::rocprim::block_load_method::block_load_transpose,
  2030                             ::rocprim::block_store_method::block_store_transpose,
  2031                             block_scan_algorithm::using_warp_scan>
  2035 template<class key_type, class value_type>
  2036 struct default_scan_by_key_config<
  2037     static_cast<unsigned int>(target_arch::unknown),
  2040     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2041                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
  2042                       && (sizeof(value_type) > 4))>>
  2043     : scan_by_key_config_v2<128,
  2045                             ::rocprim::block_load_method::block_load_transpose,
  2046                             ::rocprim::block_store_method::block_store_transpose,
  2047                             block_scan_algorithm::using_warp_scan>
  2051 template<class key_type, class value_type>
  2052 struct default_scan_by_key_config<
  2053     static_cast<unsigned int>(target_arch::unknown),
  2056     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2057                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
  2058                       && (sizeof(value_type) > 2))>>
  2059     : scan_by_key_config_v2<256,
  2061                             ::rocprim::block_load_method::block_load_transpose,
  2062                             ::rocprim::block_store_method::block_store_transpose,
  2063                             block_scan_algorithm::reduce_then_scan>
  2067 template<class key_type, class value_type>
  2068 struct default_scan_by_key_config<
  2069     static_cast<unsigned int>(target_arch::unknown),
  2072     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2073                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
  2074                       && (sizeof(value_type) > 1))>>
  2075     : scan_by_key_config_v2<256,
  2077                             ::rocprim::block_load_method::block_load_transpose,
  2078                             ::rocprim::block_store_method::block_store_transpose,
  2079                             block_scan_algorithm::reduce_then_scan>
  2083 template<class key_type, class value_type>
  2084 struct default_scan_by_key_config<
  2085     static_cast<unsigned int>(target_arch::unknown),
  2088     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2089                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
  2090     : scan_by_key_config_v2<128,
  2092                             ::rocprim::block_load_method::block_load_transpose,
  2093                             ::rocprim::block_store_method::block_store_transpose,
  2094                             block_scan_algorithm::using_warp_scan>
  2098 template<class key_type, class value_type>
  2099 struct default_scan_by_key_config<
  2100     static_cast<unsigned int>(target_arch::unknown),
  2103     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2104                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 8)
  2105                       && (sizeof(value_type) > 4))>>
  2106     : scan_by_key_config_v2<64,
  2108                             ::rocprim::block_load_method::block_load_transpose,
  2109                             ::rocprim::block_store_method::block_store_transpose,
  2110                             block_scan_algorithm::reduce_then_scan>
  2114 template<class key_type, class value_type>
  2115 struct default_scan_by_key_config<
  2116     static_cast<unsigned int>(target_arch::unknown),
  2119     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2120                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 4)
  2121                       && (sizeof(value_type) > 2))>>
  2122     : scan_by_key_config_v2<256,
  2124                             ::rocprim::block_load_method::block_load_transpose,
  2125                             ::rocprim::block_store_method::block_store_transpose,
  2126                             block_scan_algorithm::using_warp_scan>
  2130 template<class key_type, class value_type>
  2131 struct default_scan_by_key_config<
  2132     static_cast<unsigned int>(target_arch::unknown),
  2135     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2136                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 2)
  2137                       && (sizeof(value_type) > 1))>>
  2138     : scan_by_key_config_v2<256,
  2140                             ::rocprim::block_load_method::block_load_transpose,
  2141                             ::rocprim::block_store_method::block_store_transpose,
  2142                             block_scan_algorithm::reduce_then_scan>
  2146 template<class key_type, class value_type>
  2147 struct default_scan_by_key_config<
  2148     static_cast<unsigned int>(target_arch::unknown),
  2151     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2152                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 1))>>
  2153     : scan_by_key_config_v2<256,
  2155                             ::rocprim::block_load_method::block_load_transpose,
  2156                             ::rocprim::block_store_method::block_store_transpose,
  2157                             block_scan_algorithm::using_warp_scan>
  2161 template<class key_type, class value_type>
  2162 struct default_scan_by_key_config<
  2163     static_cast<unsigned int>(target_arch::unknown),
  2166     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  2167                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
  2168     : scan_by_key_config_v2<64,
  2170                             ::rocprim::block_load_method::block_load_transpose,
  2171                             ::rocprim::block_store_method::block_store_transpose,
  2172                             block_scan_algorithm::using_warp_scan>
  2176 template<class key_type, class value_type>
  2177 struct default_scan_by_key_config<
  2178     static_cast<unsigned int>(target_arch::unknown),
  2181     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  2182                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
  2183     : scan_by_key_config_v2<128,
  2185                             ::rocprim::block_load_method::block_load_transpose,
  2186                             ::rocprim::block_store_method::block_store_transpose,
  2187                             block_scan_algorithm::using_warp_scan>
  2191 template<class key_type, class value_type>
  2192 struct default_scan_by_key_config<
  2193     static_cast<unsigned int>(target_arch::unknown),
  2196     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  2197                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
  2198     : scan_by_key_config_v2<256,
  2200                             ::rocprim::block_load_method::block_load_transpose,
  2201                             ::rocprim::block_store_method::block_store_transpose,
  2202                             block_scan_algorithm::reduce_then_scan>
  2206 template<class key_type, class value_type>
  2207 struct default_scan_by_key_config<
  2208     static_cast<unsigned int>(target_arch::unknown),
  2211     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  2212                       && (sizeof(value_type) <= 1))>>
  2213     : scan_by_key_config_v2<256,
  2215                             ::rocprim::block_load_method::block_load_transpose,
  2216                             ::rocprim::block_store_method::block_store_transpose,
  2217                             block_scan_algorithm::reduce_then_scan>
  2221 template<class key_type, class value_type>
  2222 struct default_scan_by_key_config<
  2223     static_cast<unsigned int>(target_arch::gfx90a),
  2226     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2227                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
  2228                       && (sizeof(value_type) > 4))>>
  2229     : scan_by_key_config_v2<256,
  2231                             ::rocprim::block_load_method::block_load_transpose,
  2232                             ::rocprim::block_store_method::block_store_transpose,
  2233                             block_scan_algorithm::using_warp_scan>
  2237 template<class key_type, class value_type>
  2238 struct default_scan_by_key_config<
  2239     static_cast<unsigned int>(target_arch::gfx90a),
  2242     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2243                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
  2244                       && (sizeof(value_type) > 2))>>
  2245     : scan_by_key_config_v2<256,
  2247                             ::rocprim::block_load_method::block_load_transpose,
  2248                             ::rocprim::block_store_method::block_store_transpose,
  2249                             block_scan_algorithm::reduce_then_scan>
  2253 template<class key_type, class value_type>
  2254 struct default_scan_by_key_config<
  2255     static_cast<unsigned int>(target_arch::gfx90a),
  2258     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2259                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
  2260                       && (sizeof(value_type) > 1))>>
  2261     : scan_by_key_config_v2<64,
  2263                             ::rocprim::block_load_method::block_load_transpose,
  2264                             ::rocprim::block_store_method::block_store_transpose,
  2265                             block_scan_algorithm::using_warp_scan>
  2269 template<class key_type, class value_type>
  2270 struct default_scan_by_key_config<
  2271     static_cast<unsigned int>(target_arch::gfx90a),
  2274     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2275                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
  2276     : scan_by_key_config_v2<64,
  2278                             ::rocprim::block_load_method::block_load_transpose,
  2279                             ::rocprim::block_store_method::block_store_transpose,
  2280                             block_scan_algorithm::reduce_then_scan>
  2284 template<class key_type, class value_type>
  2285 struct default_scan_by_key_config<
  2286     static_cast<unsigned int>(target_arch::gfx90a),
  2289     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2290                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
  2291                       && (sizeof(value_type) > 4))>>
  2292     : scan_by_key_config_v2<128,
  2294                             ::rocprim::block_load_method::block_load_transpose,
  2295                             ::rocprim::block_store_method::block_store_transpose,
  2296                             block_scan_algorithm::using_warp_scan>
  2300 template<class key_type, class value_type>
  2301 struct default_scan_by_key_config<
  2302     static_cast<unsigned int>(target_arch::gfx90a),
  2305     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2306                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
  2307                       && (sizeof(value_type) > 2))>>
  2308     : scan_by_key_config_v2<256,
  2310                             ::rocprim::block_load_method::block_load_transpose,
  2311                             ::rocprim::block_store_method::block_store_transpose,
  2312                             block_scan_algorithm::reduce_then_scan>
  2316 template<class key_type, class value_type>
  2317 struct default_scan_by_key_config<
  2318     static_cast<unsigned int>(target_arch::gfx90a),
  2321     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2322                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
  2323                       && (sizeof(value_type) > 1))>>
  2324     : scan_by_key_config_v2<256,
  2326                             ::rocprim::block_load_method::block_load_transpose,
  2327                             ::rocprim::block_store_method::block_store_transpose,
  2328                             block_scan_algorithm::reduce_then_scan>
  2332 template<class key_type, class value_type>
  2333 struct default_scan_by_key_config<
  2334     static_cast<unsigned int>(target_arch::gfx90a),
  2337     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2338                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
  2339     : scan_by_key_config_v2<128,
  2341                             ::rocprim::block_load_method::block_load_transpose,
  2342                             ::rocprim::block_store_method::block_store_transpose,
  2343                             block_scan_algorithm::using_warp_scan>
  2347 template<class key_type, class value_type>
  2348 struct default_scan_by_key_config<
  2349     static_cast<unsigned int>(target_arch::gfx90a),
  2352     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2353                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
  2354     : scan_by_key_config_v2<64,
  2356                             ::rocprim::block_load_method::block_load_transpose,
  2357                             ::rocprim::block_store_method::block_store_transpose,
  2358                             block_scan_algorithm::using_warp_scan>
  2362 template<class key_type, class value_type>
  2363 struct default_scan_by_key_config<
  2364     static_cast<unsigned int>(target_arch::gfx90a),
  2367     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2368                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
  2369     : scan_by_key_config_v2<256,
  2371                             ::rocprim::block_load_method::block_load_transpose,
  2372                             ::rocprim::block_store_method::block_store_transpose,
  2373                             block_scan_algorithm::using_warp_scan>
  2377 template<class key_type, class value_type>
  2378 struct default_scan_by_key_config<
  2379     static_cast<unsigned int>(target_arch::gfx90a),
  2382     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2383                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
  2384     : scan_by_key_config_v2<256,
  2386                             ::rocprim::block_load_method::block_load_transpose,
  2387                             ::rocprim::block_store_method::block_store_transpose,
  2388                             block_scan_algorithm::reduce_then_scan>
  2392 template<class key_type, class value_type>
  2393 struct default_scan_by_key_config<
  2394     static_cast<unsigned int>(target_arch::gfx90a),
  2397     std::enable_if_t<(bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2398                       && (sizeof(value_type) <= 1))>>
  2399     : scan_by_key_config_v2<256,
  2401                             ::rocprim::block_load_method::block_load_transpose,
  2402                             ::rocprim::block_store_method::block_store_transpose,
  2403                             block_scan_algorithm::using_warp_scan>
  2407 template<class key_type, class value_type>
  2408 struct default_scan_by_key_config<
  2409     static_cast<unsigned int>(target_arch::gfx90a),
  2412     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2413                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 8)
  2414                       && (sizeof(value_type) > 4))>>
  2415     : scan_by_key_config_v2<256,
  2417                             ::rocprim::block_load_method::block_load_transpose,
  2418                             ::rocprim::block_store_method::block_store_transpose,
  2419                             block_scan_algorithm::reduce_then_scan>
  2423 template<class key_type, class value_type>
  2424 struct default_scan_by_key_config<
  2425     static_cast<unsigned int>(target_arch::gfx90a),
  2428     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2429                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 4)
  2430                       && (sizeof(value_type) > 2))>>
  2431     : scan_by_key_config_v2<256,
  2433                             ::rocprim::block_load_method::block_load_transpose,
  2434                             ::rocprim::block_store_method::block_store_transpose,
  2435                             block_scan_algorithm::reduce_then_scan>
  2439 template<class key_type, class value_type>
  2440 struct default_scan_by_key_config<
  2441     static_cast<unsigned int>(target_arch::gfx90a),
  2444     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2445                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 2)
  2446                       && (sizeof(value_type) > 1))>>
  2447     : scan_by_key_config_v2<64,
  2449                             ::rocprim::block_load_method::block_load_transpose,
  2450                             ::rocprim::block_store_method::block_store_transpose,
  2451                             block_scan_algorithm::using_warp_scan>
  2455 template<class key_type, class value_type>
  2456 struct default_scan_by_key_config<
  2457     static_cast<unsigned int>(target_arch::gfx90a),
  2460     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 8)
  2461                       && (sizeof(key_type) > 4) && (sizeof(value_type) <= 1))>>
  2462     : scan_by_key_config_v2<256,
  2464                             ::rocprim::block_load_method::block_load_transpose,
  2465                             ::rocprim::block_store_method::block_store_transpose,
  2466                             block_scan_algorithm::using_warp_scan>
  2470 template<class key_type, class value_type>
  2471 struct default_scan_by_key_config<
  2472     static_cast<unsigned int>(target_arch::gfx90a),
  2475     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2476                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 8)
  2477                       && (sizeof(value_type) > 4))>>
  2478     : scan_by_key_config_v2<128,
  2480                             ::rocprim::block_load_method::block_load_transpose,
  2481                             ::rocprim::block_store_method::block_store_transpose,
  2482                             block_scan_algorithm::using_warp_scan>
  2486 template<class key_type, class value_type>
  2487 struct default_scan_by_key_config<
  2488     static_cast<unsigned int>(target_arch::gfx90a),
  2491     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2492                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 4)
  2493                       && (sizeof(value_type) > 2))>>
  2494     : scan_by_key_config_v2<256,
  2496                             ::rocprim::block_load_method::block_load_transpose,
  2497                             ::rocprim::block_store_method::block_store_transpose,
  2498                             block_scan_algorithm::reduce_then_scan>
  2502 template<class key_type, class value_type>
  2503 struct default_scan_by_key_config<
  2504     static_cast<unsigned int>(target_arch::gfx90a),
  2507     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2508                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 2)
  2509                       && (sizeof(value_type) > 1))>>
  2510     : scan_by_key_config_v2<256,
  2512                             ::rocprim::block_load_method::block_load_transpose,
  2513                             ::rocprim::block_store_method::block_store_transpose,
  2514                             block_scan_algorithm::reduce_then_scan>
  2518 template<class key_type, class value_type>
  2519 struct default_scan_by_key_config<
  2520     static_cast<unsigned int>(target_arch::gfx90a),
  2523     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 4)
  2524                       && (sizeof(key_type) > 2) && (sizeof(value_type) <= 1))>>
  2525     : scan_by_key_config_v2<128,
  2527                             ::rocprim::block_load_method::block_load_transpose,
  2528                             ::rocprim::block_store_method::block_store_transpose,
  2529                             block_scan_algorithm::using_warp_scan>
  2533 template<class key_type, class value_type>
  2534 struct default_scan_by_key_config<
  2535     static_cast<unsigned int>(target_arch::gfx90a),
  2538     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2539                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 8)
  2540                       && (sizeof(value_type) > 4))>>
  2541     : scan_by_key_config_v2<64,
  2543                             ::rocprim::block_load_method::block_load_transpose,
  2544                             ::rocprim::block_store_method::block_store_transpose,
  2545                             block_scan_algorithm::reduce_then_scan>
  2549 template<class key_type, class value_type>
  2550 struct default_scan_by_key_config<
  2551     static_cast<unsigned int>(target_arch::gfx90a),
  2554     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2555                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 4)
  2556                       && (sizeof(value_type) > 2))>>
  2557     : scan_by_key_config_v2<256,
  2559                             ::rocprim::block_load_method::block_load_transpose,
  2560                             ::rocprim::block_store_method::block_store_transpose,
  2561                             block_scan_algorithm::using_warp_scan>
  2565 template<class key_type, class value_type>
  2566 struct default_scan_by_key_config<
  2567     static_cast<unsigned int>(target_arch::gfx90a),
  2570     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2571                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 2)
  2572                       && (sizeof(value_type) > 1))>>
  2573     : scan_by_key_config_v2<256,
  2575                             ::rocprim::block_load_method::block_load_transpose,
  2576                             ::rocprim::block_store_method::block_store_transpose,
  2577                             block_scan_algorithm::reduce_then_scan>
  2581 template<class key_type, class value_type>
  2582 struct default_scan_by_key_config<
  2583     static_cast<unsigned int>(target_arch::gfx90a),
  2586     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 2)
  2587                       && (sizeof(key_type) > 1) && (sizeof(value_type) <= 1))>>
  2588     : scan_by_key_config_v2<256,
  2590                             ::rocprim::block_load_method::block_load_transpose,
  2591                             ::rocprim::block_store_method::block_store_transpose,
  2592                             block_scan_algorithm::using_warp_scan>
  2596 template<class key_type, class value_type>
  2597 struct default_scan_by_key_config<
  2598     static_cast<unsigned int>(target_arch::gfx90a),
  2601     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  2602                       && (sizeof(value_type) <= 8) && (sizeof(value_type) > 4))>>
  2603     : scan_by_key_config_v2<64,
  2605                             ::rocprim::block_load_method::block_load_transpose,
  2606                             ::rocprim::block_store_method::block_store_transpose,
  2607                             block_scan_algorithm::using_warp_scan>
  2611 template<class key_type, class value_type>
  2612 struct default_scan_by_key_config<
  2613     static_cast<unsigned int>(target_arch::gfx90a),
  2616     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  2617                       && (sizeof(value_type) <= 4) && (sizeof(value_type) > 2))>>
  2618     : scan_by_key_config_v2<128,
  2620                             ::rocprim::block_load_method::block_load_transpose,
  2621                             ::rocprim::block_store_method::block_store_transpose,
  2622                             block_scan_algorithm::using_warp_scan>
  2626 template<class key_type, class value_type>
  2627 struct default_scan_by_key_config<
  2628     static_cast<unsigned int>(target_arch::gfx90a),
  2631     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  2632                       && (sizeof(value_type) <= 2) && (sizeof(value_type) > 1))>>
  2633     : scan_by_key_config_v2<256,
  2635                             ::rocprim::block_load_method::block_load_transpose,
  2636                             ::rocprim::block_store_method::block_store_transpose,
  2637                             block_scan_algorithm::reduce_then_scan>
  2641 template<class key_type, class value_type>
  2642 struct default_scan_by_key_config<
  2643     static_cast<unsigned int>(target_arch::gfx90a),
  2646     std::enable_if_t<(!bool(rocprim::is_floating_point<key_type>::value) && (sizeof(key_type) <= 1)
  2647                       && (sizeof(value_type) <= 1))>>
  2648     : scan_by_key_config_v2<256,
  2650                             ::rocprim::block_load_method::block_load_transpose,
  2651                             ::rocprim::block_store_method::block_store_transpose,
  2652                             block_scan_algorithm::reduce_then_scan>
  2657 END_ROCPRIM_NAMESPACE
 Configuration of device-level scan-by-key operation. 
Definition: device_config_helper.hpp:417
Definition: device_config_helper.hpp:513
Deprecated: Configuration of device-level scan primitives. 
Definition: block_histogram.hpp:62
Definition: device_scan_by_key.hpp:42