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)
Type | Name | Description |
---|---|---|
PrefixScan | scan | Prefix scan. |
uint32_t | size | Radix sort data size. |
uint32_t | groups | Radix sort group size. |
uint32_t | regions | Maximum 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)
Type | Name | Description |
---|---|---|
Buffer | data | Buffer of uint32_t data elements to sort. |
uint32_t | keys_offset | Keys elements offset index (4 aligned). |
uint32_t | data_offset | Data elements offset index (4 aligned). |
uint32_t | size | Number of uint32_t elements to sort. |
uint32_t | bits | Number 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)
Type | Name | Description |
---|---|---|
Buffer | data | Buffer of uint32_t data elements to sort. |
uint32_t | count | Number of regions to sort. |
uint32_t | keys_offsets | Keys elements offset index (4 aligned). |
uint32_t | data_offsets | Data elements offset index (4 aligned). |
uint32_t | sizes | Number of uint32_t elements to sort. |
uint32_t | bits | Number 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)
Type | Name | Description |
---|---|---|
Buffer | data | Buffer of uint32_t data elements to sort. |
Buffer | dispatch | Dispatch indirect buffer. |
uint32_t | offset | Dispatch indirect buffer offset. |
uint32_t | bits | Number of key bits to sort. |
uint32_t | max_size | Maximum 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)
Type | Name | Description |
---|---|---|
Buffer | data | Buffer of uint32_t data elements to sort. |
uint32_t | count | Number of regions to sort. |
Buffer | dispatch | Dispatch indirect buffer. |
uint32_t | offset | Dispatch indirect buffer offset. |
uint32_t | bits | Number of key bits to sort. |
uint32_t | max_size | Maximum 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)
Type | Name | Description |
---|---|---|
Buffer | data | Buffer of uint32_t data elements to sort. |
Buffer | count | Count indirect buffer. |
Buffer | dispatch | Dispatch indirect buffer. |
uint32_t | count_offset | Count indirect buffer offset. |
uint32_t | dispatch_offset | Dispatch indirect buffer offset. |
uint32_t | bits | Number of key bits to sort. |
uint32_t | max_size | Maximum number of elements to sort. |
Enums
Mode
Sort modes.
Name | Value | Description |
---|---|---|
ModeSingle | 0 | Single array sort. |
ModeMultiple | 1 | Multiple arrays sort. |
NumModes | 2 |
Flags
Sort flags.
Name | Value | Description |
---|---|---|
FlagNone | 0 | |
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
Type | Name | Description |
---|---|---|
uint32_t | keys_offset | Keys elements offset index (4 aligned). |
uint32_t | data_offset | Data elements offset index (4 aligned). |
uint32_t | size | Number of elements to sort. |
uint32_t | padding |