Skip to main content

RadixSort

The RadixSort class offers a versatile and efficient implementation of the radix sort algorithm, supporting both single and multiple array sorting, indirect dispatch modes, and auto-key sorting. It is designed for high-performance computing tasks, including sorting large datasets in simulations, rendering, and physics engines. With a range of modes and flags, the class is highly customizable to meet various sorting requirements. Its dispatch methods enable flexible and scalable sorting in complex data processing scenarios.

#include <parallel/TellusimRadixSort.h>

Constructors

RadixSort()

Methods

Clear sort.

void clear()

Check sort.

bool isCreated(Flags flags) const

Sort parameters.

uint32_t getDataSize() const
uint32_t getGroupSize() const
uint32_t getSortElements() const
uint32_t getUpdateElements() const
uint32_t getMaxElements() const
uint32_t getMaxRegions() const
PrefixScan getPrefixScan() const
Buffer getDataBuffer() const

Create radix sort.

bool create(const Device &device, Mode mode, PrefixScan &scan, uint32_t size, uint32_t groups = 256, uint32_t regions = 1, Async *async = nullptr)
bool create(const Device &device, Flags flags, PrefixScan &scan, uint32_t size, uint32_t groups = 256, uint32_t regions = 1, Async *async = nullptr)
TypeNameDescription
PrefixScanscanPrefix scan.
uint32_tsizeRadix sort data size.
uint32_tgroupsRadix sort group size.
uint32_tregionsMaximum number of multiple regions.

Dispatch single in-place radix sort.

bool dispatch(Compute &compute, Buffer &data, uint32_t keys_offset, uint32_t data_offset, uint32_t size, Flags flags = FlagNone, uint32_t bits = 32)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
uint32_tkeys_offsetKeys elements offset index (4 aligned).
uint32_tdata_offsetData elements offset index (4 aligned).
uint32_tsizeNumber of uint32_t elements to sort.
uint32_tbitsNumber of key bits to sort.

Dispatch multiple in-place radix sorts.

bool dispatch(Compute &compute, Buffer &data, uint32_t count, const uint32_t *keys_offsets, const uint32_t *data_offsets, const uint32_t *sizes, Flags flags = FlagNone, uint32_t bits = 32)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
uint32_tcountNumber of regions to sort.
uint32_tkeys_offsetsKeys elements offset index (4 aligned).
uint32_tdata_offsetsData elements offset index (4 aligned).
uint32_tsizesNumber of uint32_t elements to sort.
uint32_tbitsNumber of key bits to sort.

Dispatch single in-place indirect radix sort.

bool dispatchIndirect(Compute &compute, Buffer &data, Buffer &dispatch, uint32_t offset, Flags flags = FlagNone, uint32_t bits = 32, uint32_t max_size = Maxu32)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
BufferdispatchDispatch indirect buffer.
uint32_toffsetDispatch indirect buffer offset.
uint32_tbitsNumber of key bits to sort.
uint32_tmax_sizeMaximum number of elements to sort.

Dispatch multiple in-place indirect radix sorts.

bool dispatchIndirect(Compute &compute, Buffer &data, uint32_t count, Buffer &dispatch, uint32_t offset, Flags flags = FlagNone, uint32_t bits = 32, uint32_t max_size = Maxu32)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
uint32_tcountNumber of regions to sort.
BufferdispatchDispatch indirect buffer.
uint32_toffsetDispatch indirect buffer offset.
uint32_tbitsNumber of key bits to sort.
uint32_tmax_sizeMaximum number of elements to sort.

Dispatch multiple in-place indirect radix sorts.

bool dispatchIndirect(Compute &compute, Buffer &data, Buffer &count, Buffer &dispatch, uint32_t count_offset, uint32_t dispatch_offset, Flags flags = FlagNone, uint32_t bits = 32, uint32_t max_size = Maxu32)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
BuffercountCount indirect buffer.
BufferdispatchDispatch indirect buffer.
uint32_tcount_offsetCount indirect buffer offset.
uint32_tdispatch_offsetDispatch indirect buffer offset.
uint32_tbitsNumber of key bits to sort.
uint32_tmax_sizeMaximum number of elements to sort.

Enums

Mode

Sort modes.

NameValueDescription
ModeSingle0Single array sort.
ModeMultiple1Multiple arrays sort.
NumModes2

Flags

Sort flags.

NameValueDescription
FlagNone0
FlagSingle(1 << ModeSingle)Enable Single array sort mode.
FlagMultiple(1 << ModeMultiple)Enable Multi array sort mode.
FlagIndirect(1 << (NumModes + 0))Enable Dispatch Indirect mode.
FlagOrder(1 << (NumModes + 1))Enable Order (auto keys) mode.
FlagTracing(1 << (NumModes + 2))Set FlagTracing for data buffer.
FlagScratch(1 << (NumModes + 3))Set FlagScratch for data buffer.
FlagsAll(FlagSingle | FlagMultiple | FlagIndirect | FlagOrder)

Structs

DispatchParameters

.

Variables

TypeNameDescription
uint32_tkeys_offsetKeys elements offset index (4 aligned).
uint32_tdata_offsetData elements offset index (4 aligned).
uint32_tsizeNumber of elements to sort.
uint32_tpadding