Skip to main content

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)
TypeNameDescription
uint32_tsizeMaximum number of sorted elements.
uint32_tgroupsBitonic sort group size.
uint32_tregionsMaximum 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)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
uint32_tkeys_offsetKeys elements offset index (2 aligned).
uint32_tdata_offsetData elements offset index (2 aligned).
uint32_tsizeNumber 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)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
uint32_tcountNumber of regions to sort.
uint32_tkeys_offsetsKeys elements offset index (2 aligned).
uint32_tdata_offsetsData elements offset index (2 aligned).
uint32_tsizesNumber 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)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
BufferdispatchDispatch indirect buffer.
uint32_toffsetDispatch 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)
TypeNameDescription
BufferdataBuffer of uint32_t data elements to sort.
uint32_tcountNumber of regions to sort.
BufferdispatchDispatch indirect buffer.
uint32_toffsetDispatch 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)
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.

Enums

Mode

Sort modes.

NameValueDescription
ModeSingle0Single array sort.
ModeMultiple1Multiple arrays sort.
NumModes2

Flags

Sort flags.

NameValue
FlagNone0
FlagSingle(1 << ModeSingle)
FlagMultiple(1 << ModeMultiple)
FlagIndirect(1 << (NumModes + 0))
FlagOrder(1 << (NumModes + 1))
FlagsAll(FlagSingle | FlagMultiple | FlagIndirect | FlagOrder)

Structs

DispatchParameters

.

Variables

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