{% extends "config_template" %}

{% macro get_header_guard() %}
ROCPRIM_DEVICE_DETAIL_CONFIG_DEVICE_SEGMENTED_RADIX_SORT_HPP_
{%- endmacro %}

{% macro kernel_configuration(measurement) -%}
segmented_radix_sort_config_params{
    {{ measurement['cfg']['rb'] }},
    kernel_config_params{ {{ measurement['cfg']['bs'] }}, {{ measurement['cfg']['ipt'] }} },
{% if measurement['cfg']['wsc']['pa'] == 1 -%}
        warp_sort_config_params{
            {{ measurement['cfg']['wsc']['pa'] }},
            {{ measurement['cfg']['wsc']['lwss'] }}, {{ measurement['cfg']['wsc']['ipts'] }},
            {{ measurement['cfg']['wsc']['bss'] }}, {{ measurement['cfg']['wsc']['pt'] }},
            {{ measurement['cfg']['wsc']['lwsm'] }}, {{ measurement['cfg']['wsc']['iptm'] }},
            {{ measurement['cfg']['wsc']['bsm'] }} },
{% else -%}
        warp_sort_config_params{0},
{% endif -%}
    {{ measurement['cfg']['eupws'] }} }
{%- endmacro %}

{% macro config_picker() -%}
template<class Target, class key_type, class value_type> constexpr auto segmented_radix_sort_config_picker()
{%- endmacro %}

{% macro enable_if(benchmark_of_target) -%}
{{ benchmark_of_target.get_enable_if("segmented_radix_sort_config_params") }}
{%- endmacro %}

{% macro default_case() -%}
return segmented_radix_sort_config_params_base<key_type, value_type>();
{%- endmacro %}

{% macro fallback_config(fallback_target) -%}
    return segmented_radix_sort_config_picker<
        comp_target<{{ fallback_target.target.as_str() }}>,
        key_type,
        value_type>();
{%- endmacro %}
