Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
shamalgs::primitives::impl Namespace Reference

namespace to control implementation behavior More...

Classes

struct  Reference
 CPU reference implementation, computed on a host copy of the buffers. More...
struct  NaiveGpu
 Portable GPU kernel, one work-item per bin. More...
struct  GpuTeamFetching
 GPU kernel using a team-local cache to coalesce input reads. More...
struct  GpuOversubscribe
 GPU kernel oversubscribing a work-group per bin, reducing locally. More...
struct  Host
 Check all elements on host after copying the buffer back. More...
struct  SumReduction
 Check all elements via a sum reduction on device. More...
struct  AtomicEarlyExit
 Check all elements via a sum reduction on device. More...
struct  Fallback
 Fallback USM reduction (portable, no group reduction support required). More...
struct  StdScan
 std::exclusive_scan on a host copy of the buffer (portable fallback) More...
struct  LocalInsertionSort
 Sort each segment locally with an insertion sort, one kernel work-item per segment. More...
struct  MultiStdSort
 Copy back to host and sort each segment with std::sort, parallelized over OpenMP. More...
struct  BitonicSort
 Bitonic sort, updated USM kernel (see bitonicSort_updated_usm.hpp). More...
struct  StdSort
 Copy the buffers to host, std::sort the zipped key/value pairs, and copy back. More...
struct  BatcherOddEvenHostSerial
 Copy the buffers to host, sort with Batcher's odd-even merge sort, and copy back. More...
struct  BatcherOddEven
 Copy the buffers to host, sort with Batcher's odd-even merge sort, and copy back. More...

Enumerations

enum class  MaxStencilSize : u32 { Size16 = 16 , Size32 = 32 }

Functions

std::vector< std::string > get_default_impl_list_compute_histogram ()
 Get list of available compute_histogram implementations.
std::string get_current_impl_compute_histogram ()
 Get the current implementation for compute_histogram.
bool is_impl_set_compute_histogram ()
 Check if an implementation has been selected for compute_histogram.
void set_impl_compute_histogram (const std::string &impl)
 Set the implementation for compute_histogram.
void autoselect_impl_compute_histogram (const sham::DeviceScheduler_ptr &dev_sched)
 Select the default implementation for compute_histogram.
template<class T, class Tbins, class... Targs, class Tfunctor>
void compute_histogram_reference (const sham::DeviceBuffer< Tbins > &bin_edge_inf, const sham::DeviceBuffer< Tbins > &bin_edge_sup, size_t nbins, size_t element_count, Tfunctor &&functor, sham::DeviceBuffer< T > &result, const sham::DeviceBuffer< Targs > &...input_data)
template<class T, class Tbins, class... Targs, class Tfunctor>
void compute_histogram_naive_gpu (const sham::DeviceScheduler_ptr &dev_sched, const sham::DeviceBuffer< Tbins > &bin_edge_inf, const sham::DeviceBuffer< Tbins > &bin_edge_sup, size_t nbins, size_t element_count, Tfunctor &&functor, sham::DeviceBuffer< T > &result, const sham::DeviceBuffer< Targs > &...input_data)
template<class T, class Tbins, class... Targs, class Tfunctor>
void compute_histogram_gpu_team_fetching (const sham::DeviceScheduler_ptr &dev_sched, const sham::DeviceBuffer< Tbins > &bin_edge_inf, const sham::DeviceBuffer< Tbins > &bin_edge_sup, size_t nbins, size_t element_count, Tfunctor &&functor, sham::DeviceBuffer< T > &result, const sham::DeviceBuffer< Targs > &...input_data)
template<class T, class Tbins, class... Targs, class Tfunctor>
void compute_histogram_gpu_oversubscribe (const sham::DeviceScheduler_ptr &dev_sched, u32 group_size, const sham::DeviceBuffer< Tbins > &bin_edge_inf, const sham::DeviceBuffer< Tbins > &bin_edge_sup, size_t nbins, size_t element_count, Tfunctor &&functor, sham::DeviceBuffer< T > &result, const sham::DeviceBuffer< Targs > &...input_data)
std::vector< std::string > get_default_impl_list_is_all_true ()
 Get list of available is_all_true implementations, as config json strings.
std::string get_current_impl_is_all_true ()
 Get the current implementation for is_all_true, as a config json string.
bool is_impl_set_is_all_true ()
 Check if an implementation has been selected for is_all_true.
void set_impl_is_all_true (const std::string &impl)
 Set the implementation for is_all_true, from a config json string.
void autoselect_impl_is_all_true (const sham::DeviceScheduler_ptr &dev_sched)
 Select the default implementation for is_all_true.
std::vector< std::string > get_default_impl_list_reduction ()
 Get list of available reduction implementations, as config json strings.
std::string get_current_impl_reduction ()
 Get the current implementation for reduction, as a config json string.
bool is_impl_set_reduction ()
 Check if an implementation has been selected for reduction.
void set_impl_reduction (const std::string &impl)
 Set the implementation for reduction, from a config json string.
void autoselect_impl_reduction (const sham::DeviceScheduler_ptr &dev_sched)
 Select the default implementation for reduction.
std::vector< std::string > get_default_impl_list_scan_exclusive_sum_in_place ()
 Get list of available scan_exclusive_sum_in_place implementations.
std::string get_current_impl_scan_exclusive_sum_in_place ()
 Get the current implementation for scan_exclusive_sum_in_place.
bool is_impl_set_scan_exclusive_sum_in_place ()
 Check if an implementation has been selected for scan_exclusive_sum_in_place.
void set_impl_scan_exclusive_sum_in_place (const std::string &impl)
 Set the implementation for scan_exclusive_sum_in_place, from a config json string.
void autoselect_impl_scan_exclusive_sum_in_place (const sham::DeviceScheduler_ptr &dev_sched)
 Select the default implementation for scan_exclusive_sum_in_place.
std::vector< std::string > get_default_impl_list_segmented_sort_in_place ()
 Get list of available segmented sort in place implementations, as config json strings.
std::string get_current_impl_segmented_sort_in_place ()
 Get the current implementation for segmented sort in place, as a config json string.
bool is_impl_set_segmented_sort_in_place ()
 Check if an implementation has been selected for segmented sort in place.
void set_impl_segmented_sort_in_place (const std::string &impl)
 Set the implementation for segmented sort in place, from a config json string.
void autoselect_impl_segmented_sort_in_place (const sham::DeviceScheduler_ptr &dev_sched)
 Select the default implementation for segmented sort in place.
std::vector< std::string > get_default_impl_list_sort_by_key_pow2_len ()
 Get list of available sort by key pow2 len implementations, as config json strings.
std::string get_current_impl_sort_by_key_pow2_len ()
 Get the current implementation for sort by key pow2 len, as a config json string.
bool is_impl_set_sort_by_key_pow2_len ()
 Check if an implementation has been selected for sort by key pow2 len.
void set_impl_sort_by_key_pow2_len (const std::string &impl)
 Set the implementation for sort by key pow2 len, from a config json string.
void autoselect_impl_sort_by_key_pow2_len (const sham::DeviceScheduler_ptr &dev_sched)
 Select the default implementation for sort by key pow2 len.
std::vector< std::string > get_default_impl_list_sort_by_keys ()
 Get list of available sort by keys implementations, as config json strings.
std::string get_current_impl_sort_by_keys ()
 Get the current implementation for sort by keys, as a config json string.
bool is_impl_set_sort_by_keys ()
 Check if an implementation has been selected for sort by keys.
void set_impl_sort_by_keys (const std::string &impl)
 Set the implementation for sort by keys, from a config json string.
void autoselect_impl_sort_by_keys (const sham::DeviceScheduler_ptr &dev_sched)
 Select the default implementation for sort by keys.
template<class Tkey, class Tval>
void sort_by_key_pow2_len_bitonic_dispatch (const sham::DeviceScheduler_ptr &sched, sham::DeviceBuffer< Tkey > &buf_key, sham::DeviceBuffer< Tval > &buf_values, u32 len, MaxStencilSize stencil_size)

Variables

shamalgs::ImplVariantGlobal< Reference, NaiveGpu, GpuTeamFetching, GpuOversubscribe > compute_histogram_impl
shamalgs::ImplVariantGlobal< Host, SumReduction, AtomicEarlyExit > is_all_true_impl
shamalgs::ImplVariantGlobal< Fallback > reduction_impl
shamalgs::ImplVariantGlobal< StdScan > scan_exclusive_sum_in_place_impl
shamalgs::ImplVariantGlobal< LocalInsertionSort, MultiStdSort > segmented_sort_in_place_impl
shamalgs::ImplVariantGlobal< BitonicSort, StdSort > sort_by_key_pow2_len_impl
shamalgs::ImplVariantGlobal< StdSort, BatcherOddEvenHostSerial, BatcherOddEven > sort_by_keys_impl

Detailed Description

namespace to control implementation behavior

Enumeration Type Documentation

◆ MaxStencilSize

Max stencil size (tile width) used by the updated USM bitonic sort kernel Sizes 2, 4 and 8 are currently disabled (kept for easy re-enabling if needed)

Definition at line 30 of file sort_by_key_pow2_len.cpp.

Function Documentation

◆ autoselect_impl_compute_histogram()

void shamalgs::primitives::impl::autoselect_impl_compute_histogram ( const sham::DeviceScheduler_ptr & dev_sched)
inline

Select the default implementation for compute_histogram.

Definition at line 85 of file compute_histogram.hpp.

Here is the call graph for this function:

◆ autoselect_impl_is_all_true()

void shamalgs::primitives::impl::autoselect_impl_is_all_true ( const sham::DeviceScheduler_ptr & dev_sched)

Select the default implementation for is_all_true.

Definition at line 231 of file is_all_true.cpp.

Here is the call graph for this function:

◆ autoselect_impl_reduction()

void shamalgs::primitives::impl::autoselect_impl_reduction ( const sham::DeviceScheduler_ptr & dev_sched)

Select the default implementation for reduction.

Definition at line 111 of file reduction.cpp.

Here is the call graph for this function:

◆ autoselect_impl_scan_exclusive_sum_in_place()

void shamalgs::primitives::impl::autoselect_impl_scan_exclusive_sum_in_place ( const sham::DeviceScheduler_ptr & dev_sched)

Select the default implementation for scan_exclusive_sum_in_place.

Definition at line 193 of file scan_exclusive_sum_in_place.cpp.

Here is the call graph for this function:

◆ autoselect_impl_segmented_sort_in_place()

void shamalgs::primitives::impl::autoselect_impl_segmented_sort_in_place ( const sham::DeviceScheduler_ptr & dev_sched)

Select the default implementation for segmented sort in place.

Definition at line 147 of file segmented_sort_in_place.cpp.

Here is the call graph for this function:

◆ autoselect_impl_sort_by_key_pow2_len()

void shamalgs::primitives::impl::autoselect_impl_sort_by_key_pow2_len ( const sham::DeviceScheduler_ptr & dev_sched)

Select the default implementation for sort by key pow2 len.

Select the default implementation for sort by key (pow2 len).

Definition at line 123 of file sort_by_key_pow2_len.cpp.

Here is the call graph for this function:

◆ autoselect_impl_sort_by_keys()

void shamalgs::primitives::impl::autoselect_impl_sort_by_keys ( const sham::DeviceScheduler_ptr & dev_sched)

Select the default implementation for sort by keys.

Definition at line 97 of file sort_by_keys.cpp.

Here is the call graph for this function:

◆ compute_histogram_gpu_oversubscribe()

template<class T, class Tbins, class... Targs, class Tfunctor>
void shamalgs::primitives::impl::compute_histogram_gpu_oversubscribe ( const sham::DeviceScheduler_ptr & dev_sched,
u32 group_size,
const sham::DeviceBuffer< Tbins > & bin_edge_inf,
const sham::DeviceBuffer< Tbins > & bin_edge_sup,
size_t nbins,
size_t element_count,
Tfunctor && functor,
sham::DeviceBuffer< T > & result,
const sham::DeviceBuffer< Targs > &... input_data )
inline

Definition at line 269 of file compute_histogram.hpp.

◆ compute_histogram_gpu_team_fetching()

template<class T, class Tbins, class... Targs, class Tfunctor>
void shamalgs::primitives::impl::compute_histogram_gpu_team_fetching ( const sham::DeviceScheduler_ptr & dev_sched,
const sham::DeviceBuffer< Tbins > & bin_edge_inf,
const sham::DeviceBuffer< Tbins > & bin_edge_sup,
size_t nbins,
size_t element_count,
Tfunctor && functor,
sham::DeviceBuffer< T > & result,
const sham::DeviceBuffer< Targs > &... input_data )
inline

Definition at line 176 of file compute_histogram.hpp.

◆ compute_histogram_naive_gpu()

template<class T, class Tbins, class... Targs, class Tfunctor>
void shamalgs::primitives::impl::compute_histogram_naive_gpu ( const sham::DeviceScheduler_ptr & dev_sched,
const sham::DeviceBuffer< Tbins > & bin_edge_inf,
const sham::DeviceBuffer< Tbins > & bin_edge_sup,
size_t nbins,
size_t element_count,
Tfunctor && functor,
sham::DeviceBuffer< T > & result,
const sham::DeviceBuffer< Targs > &... input_data )
inline

Definition at line 137 of file compute_histogram.hpp.

◆ compute_histogram_reference()

template<class T, class Tbins, class... Targs, class Tfunctor>
void shamalgs::primitives::impl::compute_histogram_reference ( const sham::DeviceBuffer< Tbins > & bin_edge_inf,
const sham::DeviceBuffer< Tbins > & bin_edge_sup,
size_t nbins,
size_t element_count,
Tfunctor && functor,
sham::DeviceBuffer< T > & result,
const sham::DeviceBuffer< Targs > &... input_data )
inline

Definition at line 94 of file compute_histogram.hpp.

◆ get_current_impl_compute_histogram()

std::string shamalgs::primitives::impl::get_current_impl_compute_histogram ( )
inline

Get the current implementation for compute_histogram.

Definition at line 71 of file compute_histogram.hpp.

◆ get_current_impl_is_all_true()

std::string shamalgs::primitives::impl::get_current_impl_is_all_true ( )

Get the current implementation for is_all_true, as a config json string.

Definition at line 219 of file is_all_true.cpp.

◆ get_current_impl_reduction()

std::string shamalgs::primitives::impl::get_current_impl_reduction ( )

Get the current implementation for reduction, as a config json string.

Definition at line 99 of file reduction.cpp.

◆ get_current_impl_scan_exclusive_sum_in_place()

std::string shamalgs::primitives::impl::get_current_impl_scan_exclusive_sum_in_place ( )

Get the current implementation for scan_exclusive_sum_in_place.

Get the current implementation for scan_exclusive_sum_in_place, as a config json string

Definition at line 176 of file scan_exclusive_sum_in_place.cpp.

◆ get_current_impl_segmented_sort_in_place()

std::string shamalgs::primitives::impl::get_current_impl_segmented_sort_in_place ( )

Get the current implementation for segmented sort in place, as a config json string.

Get the current implementation for segmented sort in place.

Definition at line 132 of file segmented_sort_in_place.cpp.

◆ get_current_impl_sort_by_key_pow2_len()

std::string shamalgs::primitives::impl::get_current_impl_sort_by_key_pow2_len ( )

Get the current implementation for sort by key pow2 len, as a config json string.

Get the current implementation for sort by key (pow2 len).

Definition at line 108 of file sort_by_key_pow2_len.cpp.

◆ get_current_impl_sort_by_keys()

std::string shamalgs::primitives::impl::get_current_impl_sort_by_keys ( )

Get the current implementation for sort by keys, as a config json string.

Get the current implementation for sort by keys.

Definition at line 83 of file sort_by_keys.cpp.

◆ get_default_impl_list_compute_histogram()

std::vector< std::string > shamalgs::primitives::impl::get_default_impl_list_compute_histogram ( )
inline

Get list of available compute_histogram implementations.

Definition at line 66 of file compute_histogram.hpp.

◆ get_default_impl_list_is_all_true()

std::vector< std::string > shamalgs::primitives::impl::get_default_impl_list_is_all_true ( )

Get list of available is_all_true implementations, as config json strings.

Definition at line 214 of file is_all_true.cpp.

◆ get_default_impl_list_reduction()

std::vector< std::string > shamalgs::primitives::impl::get_default_impl_list_reduction ( )

Get list of available reduction implementations, as config json strings.

Definition at line 94 of file reduction.cpp.

◆ get_default_impl_list_scan_exclusive_sum_in_place()

std::vector< std::string > shamalgs::primitives::impl::get_default_impl_list_scan_exclusive_sum_in_place ( )

Get list of available scan_exclusive_sum_in_place implementations.

Get list of available scan_exclusive_sum_in_place implementations, as config json strings

Definition at line 171 of file scan_exclusive_sum_in_place.cpp.

◆ get_default_impl_list_segmented_sort_in_place()

std::vector< std::string > shamalgs::primitives::impl::get_default_impl_list_segmented_sort_in_place ( )

Get list of available segmented sort in place implementations, as config json strings.

Get list of available segmented sort in place implementations.

Definition at line 127 of file segmented_sort_in_place.cpp.

◆ get_default_impl_list_sort_by_key_pow2_len()

std::vector< std::string > shamalgs::primitives::impl::get_default_impl_list_sort_by_key_pow2_len ( )

Get list of available sort by key pow2 len implementations, as config json strings.

Get list of available sort by key (pow2 len) implementations.

Definition at line 103 of file sort_by_key_pow2_len.cpp.

◆ get_default_impl_list_sort_by_keys()

std::vector< std::string > shamalgs::primitives::impl::get_default_impl_list_sort_by_keys ( )

Get list of available sort by keys implementations, as config json strings.

Get list of available sort by keys implementations.

Definition at line 78 of file sort_by_keys.cpp.

◆ is_impl_set_compute_histogram()

bool shamalgs::primitives::impl::is_impl_set_compute_histogram ( )
inline

Check if an implementation has been selected for compute_histogram.

Definition at line 76 of file compute_histogram.hpp.

◆ is_impl_set_is_all_true()

bool shamalgs::primitives::impl::is_impl_set_is_all_true ( )

Check if an implementation has been selected for is_all_true.

Definition at line 222 of file is_all_true.cpp.

◆ is_impl_set_reduction()

bool shamalgs::primitives::impl::is_impl_set_reduction ( )

Check if an implementation has been selected for reduction.

Definition at line 102 of file reduction.cpp.

◆ is_impl_set_scan_exclusive_sum_in_place()

bool shamalgs::primitives::impl::is_impl_set_scan_exclusive_sum_in_place ( )

Check if an implementation has been selected for scan_exclusive_sum_in_place.

Definition at line 181 of file scan_exclusive_sum_in_place.cpp.

◆ is_impl_set_segmented_sort_in_place()

bool shamalgs::primitives::impl::is_impl_set_segmented_sort_in_place ( )

Check if an implementation has been selected for segmented sort in place.

Definition at line 137 of file segmented_sort_in_place.cpp.

◆ is_impl_set_sort_by_key_pow2_len()

bool shamalgs::primitives::impl::is_impl_set_sort_by_key_pow2_len ( )

Check if an implementation has been selected for sort by key pow2 len.

Check if an implementation has been selected for sort by key (pow2 len).

Definition at line 113 of file sort_by_key_pow2_len.cpp.

◆ is_impl_set_sort_by_keys()

bool shamalgs::primitives::impl::is_impl_set_sort_by_keys ( )

Check if an implementation has been selected for sort by keys.

Definition at line 88 of file sort_by_keys.cpp.

◆ set_impl_compute_histogram()

void shamalgs::primitives::impl::set_impl_compute_histogram ( const std::string & impl)
inline

Set the implementation for compute_histogram.

Definition at line 79 of file compute_histogram.hpp.

◆ set_impl_is_all_true()

void shamalgs::primitives::impl::set_impl_is_all_true ( const std::string & impl)

Set the implementation for is_all_true, from a config json string.

Definition at line 225 of file is_all_true.cpp.

◆ set_impl_reduction()

void shamalgs::primitives::impl::set_impl_reduction ( const std::string & impl)

Set the implementation for reduction, from a config json string.

Definition at line 105 of file reduction.cpp.

◆ set_impl_scan_exclusive_sum_in_place()

void shamalgs::primitives::impl::set_impl_scan_exclusive_sum_in_place ( const std::string & impl)

Set the implementation for scan_exclusive_sum_in_place, from a config json string.

Set the implementation for scan_exclusive_sum_in_place.

Definition at line 186 of file scan_exclusive_sum_in_place.cpp.

◆ set_impl_segmented_sort_in_place()

void shamalgs::primitives::impl::set_impl_segmented_sort_in_place ( const std::string & impl)

Set the implementation for segmented sort in place, from a config json string.

Set the implementation for segmented sort in place.

Definition at line 140 of file segmented_sort_in_place.cpp.

◆ set_impl_sort_by_key_pow2_len()

void shamalgs::primitives::impl::set_impl_sort_by_key_pow2_len ( const std::string & impl)

Set the implementation for sort by key pow2 len, from a config json string.

Set the implementation for sort by key (pow2 len).

Definition at line 116 of file sort_by_key_pow2_len.cpp.

◆ set_impl_sort_by_keys()

void shamalgs::primitives::impl::set_impl_sort_by_keys ( const std::string & impl)

Set the implementation for sort by keys, from a config json string.

Set the implementation for sort by keys.

Definition at line 91 of file sort_by_keys.cpp.

◆ sort_by_key_pow2_len_bitonic_dispatch()

template<class Tkey, class Tval>
void shamalgs::primitives::impl::sort_by_key_pow2_len_bitonic_dispatch ( const sham::DeviceScheduler_ptr & sched,
sham::DeviceBuffer< Tkey > & buf_key,
sham::DeviceBuffer< Tval > & buf_values,
u32 len,
MaxStencilSize stencil_size )

Dispatch to the updated USM bitonic sort kernel, picking its MaxStencilSize non-type template parameter at runtime from the enum value stored in BitonicSort

Definition at line 134 of file sort_by_key_pow2_len.cpp.

Here is the call graph for this function:

Variable Documentation

◆ compute_histogram_impl

shamalgs::ImplVariantGlobal<Reference, NaiveGpu, GpuTeamFetching, GpuOversubscribe> shamalgs::primitives::impl::compute_histogram_impl
inline
Initial value:
{[](const sham::DeviceScheduler_ptr &dev_sched, auto &self) {
if (dev_sched->ctx->device->prop.type == sham::DeviceType::GPU) {
self.set(GpuOversubscribe{});
} else {
self.set(NaiveGpu{});
}
}}
GPU kernel oversubscribing a work-group per bin, reducing locally.

Definition at line 57 of file compute_histogram.hpp.

◆ is_all_true_impl

shamalgs::ImplVariantGlobal<Host, SumReduction, AtomicEarlyExit> shamalgs::primitives::impl::is_all_true_impl
Initial value:
{
[](const sham::DeviceScheduler_ptr &, auto &self) {
self.set(Host{});
}}
Check all elements on host after copying the buffer back.

Definition at line 208 of file is_all_true.cpp.

◆ reduction_impl

shamalgs::ImplVariantGlobal< Fallback > shamalgs::primitives::impl::reduction_impl
Initial value:
{[](const sham::DeviceScheduler_ptr &, auto &self) {
self.set(Fallback{});
}}
Fallback USM reduction (portable, no group reduction support required).
Definition reduction.cpp:34

Definition at line 85 of file reduction.cpp.

◆ scan_exclusive_sum_in_place_impl

shamalgs::ImplVariantGlobal< StdScan > shamalgs::primitives::impl::scan_exclusive_sum_in_place_impl
Initial value:
{[](const sham::DeviceScheduler_ptr &, auto &self) {
self.set(StdScan{});
}}
std::exclusive_scan on a host copy of the buffer (portable fallback)

Definition at line 154 of file scan_exclusive_sum_in_place.cpp.

◆ segmented_sort_in_place_impl

shamalgs::ImplVariantGlobal<LocalInsertionSort, MultiStdSort> shamalgs::primitives::impl::segmented_sort_in_place_impl
Initial value:
{
[](const sham::DeviceScheduler_ptr &, auto &self) {
self.set(MultiStdSort{});
}}
Copy back to host and sort each segment with std::sort, parallelized over OpenMP.

Definition at line 121 of file segmented_sort_in_place.cpp.

◆ sort_by_key_pow2_len_impl

shamalgs::ImplVariantGlobal<BitonicSort, StdSort> shamalgs::primitives::impl::sort_by_key_pow2_len_impl
Initial value:
{
[](const sham::DeviceScheduler_ptr &, auto &self) {
self.set(BitonicSort{});
}}
Bitonic sort, updated USM kernel (see bitonicSort_updated_usm.hpp).

Definition at line 97 of file sort_by_key_pow2_len.cpp.

◆ sort_by_keys_impl

shamalgs::ImplVariantGlobal<StdSort, BatcherOddEvenHostSerial, BatcherOddEven> shamalgs::primitives::impl::sort_by_keys_impl
Initial value:
{[](const sham::DeviceScheduler_ptr &, auto &self) {
self.set(StdSort{});
}}
Copy the buffers to host, std::sort the zipped key/value pairs, and copy back.

Definition at line 73 of file sort_by_keys.cpp.