BitonicSort
The BitonicSort class implements an efficient parallel bitonic sorting algorithm designed for sorting large datasets on GPUs. It supports both single and multiple array sorting, and provides flexible configurations through various modes and flags. The class can handle sorting tasks that involve both direct and indirect dispatching, making it suitable for complex scenarios such as sorting multiple regions or handling different element alignments.
#include <parallel/TellusimBitonicSort.h>
Constructors
BitonicSort()
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 getMaxRegions() const
Create bitonic sort.
bool create(const Device &device, Mode mode, uint32_t size, uint32_t groups = 256, uint32_t regions = 1, Async *async = nullptr)
bool create(const Device &device, Flags flags, uint32_t size, uint32_t groups = 256, uint32_t regions = 1, Async *async = nullptr)
Type | Name | Description |
---|---|---|
uint32_t | size | Maximum number of sorted elements. |
uint32_t | groups | Bitonic sort group size. |
uint32_t | regions | Maximum number of multiple regions. |
Dispatch single in-place bitonic sort.
bool dispatch(Compute &compute, Buffer &data, uint32_t keys_offset, uint32_t data_offset, uint32_t size, Flags flags = FlagNone)
Type | Name | Description |
---|---|---|
Buffer | data | Buffer of uint32_t data elements to sort. |
uint32_t | keys_offset | Keys elements offset index (2 aligned). |
uint32_t | data_offset | Data elements offset index (2 aligned). |
uint32_t | size | Number of uint32_t elements to sort. |
Dispatch multiple in-place bitonic 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)
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 (2 aligned). |
uint32_t | data_offsets | Data elements offset index (2 aligned). |
uint32_t | sizes | Number of uint32_t elements to sort. |
Dispatch single in-place indirect local bitonic sort.
bool dispatchIndirect(Compute &compute, Buffer &data, Buffer &dispatch, uint32_t offset, Flags flags = FlagNone)
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. |
Dispatch multiple in-place indirect local bitonic sorts.
bool dispatchIndirect(Compute &compute, Buffer &data, uint32_t count, Buffer &dispatch, uint32_t offset, Flags flags = FlagNone)
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. |
Dispatch multiple in-place indirect local bitonic sorts.
bool dispatchIndirect(Compute &compute, Buffer &data, Buffer &count, Buffer &dispatch, uint32_t count_offset, uint32_t dispatch_offset, Flags flags = FlagNone)
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. |
Enums
Mode
Sort modes.
Name | Value | Description |
---|---|---|
ModeSingle | 0 | Single array sort. |
ModeMultiple | 1 | Multiple arrays sort. |
NumModes | 2 |
Flags
Sort flags.
Name | Value |
---|---|
FlagNone | 0 |
FlagSingle | (1 << ModeSingle) |
FlagMultiple | (1 << ModeMultiple) |
FlagIndirect | (1 << (NumModes + 0)) |
FlagOrder | (1 << (NumModes + 1)) |
FlagsAll | (FlagSingle | FlagMultiple | FlagIndirect | FlagOrder) |
Structs
DispatchParameters
.
Variables
Type | Name | Description |
---|---|---|
uint32_t | keys_offset | Keys elements offset index (2 aligned). |
uint32_t | data_offset | Data elements offset index (2 aligned). |
uint32_t | size | Number of elements to sort. |
uint32_t | padding |