35 #define QSORT_STACK_SIZE 32
36 #define QSORT_MIN_SIZE 16
37 #define MULTICORE_MIN_SIZE (1 << 13)
68 for (
int i = 1; i <
size; i++)
70 int j = start + i - 1;
71 while (j >= start && compareFunc(data, j + 1, j))
73 swapFunc(data, j, j + 1);
81 int FW::median3(
int low,
int high,
void* data,
SortCompareFunc compareFunc)
87 int c = (low + high) >> 1;
90 if (compareFunc(data, h, l))
swap(l, h);
91 if (compareFunc(data, c, l)) c = l;
92 return (compareFunc(data, h, c)) ? h : c;
101 swapFunc(data, median3(low, high, data, compareFunc), high - 1);
111 while (compareFunc(data, i, high - 1));
114 while (compareFunc(data, high - 1, j));
116 FW_ASSERT(i >= low && j >= low && i < high && j < high);
120 swapFunc(data, i, j);
125 swapFunc(data, i, high - 1);
149 insertionSort(low, high - low, data, compareFunc, swapFunc);
156 int i = partition(low, high, data, compareFunc, swapFunc);
182 if (i - spec->
low >= 2)
188 if (spec->
high - i > 2)
191 childSpec->
low = i + 1;
217 qsort(start, end, data, compareFunc, swapFunc);
235 qsortMulticore(task);
243 U32 a = ((
U32*)data)[idxA];
244 U32 b = ((
U32*)data)[idxB];
245 return (a < b) ? -1 : (a > b) ? 1 : 0;
257 U64 a = ((
U64*)data)[idxA];
258 U64 b = ((
U64*)data)[idxB];
259 return (a < b) ? -1 : (a > b) ? 1 : 0;
271 S32 a = ((
S32*)data)[idxA];
272 S32 b = ((
S32*)data)[idxB];
273 return (a < b) ? -1 : (a > b) ? 1 : 0;
285 S64 a = ((
S64*)data)[idxA];
286 S64 b = ((
S64*)data)[idxB];
287 return (a < b) ? -1 : (a > b) ? 1 : 0;
299 F32 a = ((
F32*)data)[idxA];
300 F32 b = ((
F32*)data)[idxB];
301 return (a < b) ? -1 : (a > b) ? 1 : 0;
313 F64 a = ((
F64*)data)[idxA];
314 F64 b = ((
F64*)data)[idxB];
315 return (a < b) ? -1 : (a > b) ? 1 : 0;
int compareF64(void *data, int idxA, int idxB)
int compareU32(void *data, int idxA, int idxB)
void swapS32(void *data, int idxA, int idxB)
void sort(void *data, int start, int end, SortCompareFunc compareFunc, SortSwapFunc swapFunc, bool multicore=false)
CUdevice int ordinal char int CUdevice dev CUdevprop CUdevice dev CUcontext ctx CUcontext ctx CUcontext pctx CUmodule const void image CUmodule const void fatCubin CUfunction CUmodule const char name void p CUfunction unsigned int bytes CUtexref pTexRef CUtexref CUarray unsigned int Flags CUtexref int CUaddress_mode am CUtexref unsigned int Flags CUaddress_mode CUtexref int dim CUarray_format int CUtexref hTexRef CUfunction unsigned int numbytes CUfunction int float value CUfunction int CUtexref hTexRef CUfunction int int grid_height CUevent unsigned int Flags CUevent hEvent CUevent hEvent CUstream unsigned int Flags CUstream hStream GLuint bufferobj unsigned int CUdevice dev CUdeviceptr unsigned int CUmodule const char name CUdeviceptr unsigned int bytesize CUdeviceptr dptr void unsigned int bytesize void CUdeviceptr unsigned int ByteCount CUarray unsigned int CUdeviceptr unsigned int ByteCount CUarray unsigned int const void unsigned int ByteCount CUarray unsigned int CUarray unsigned int unsigned int ByteCount void CUarray unsigned int unsigned int CUstream hStream const CUDA_MEMCPY2D pCopy CUdeviceptr const void unsigned int CUstream hStream const CUDA_MEMCPY2D CUstream hStream CUdeviceptr unsigned char unsigned int N CUdeviceptr unsigned int unsigned int N CUdeviceptr unsigned int unsigned short unsigned int unsigned int Height CUarray const CUDA_ARRAY_DESCRIPTOR pAllocateArray CUarray const CUDA_ARRAY3D_DESCRIPTOR pAllocateArray unsigned int CUtexref CUdeviceptr unsigned int bytes CUcontext unsigned int CUdevice device GLenum texture GLenum GLuint buffer GLenum GLuint renderbuffer GLenum GLsizeiptr const GLvoid * data
MulticoreLauncher & push(TaskFunc func, void *data, int firstIdx=0, int numTasks=1)
void swapF64(void *data, int idxA, int idxB)
MulticoreLauncher * launcher
#define MULTICORE_MIN_SIZE
int compareS64(void *data, int idxA, int idxB)
int compareS32(void *data, int idxA, int idxB)
SortCompareFunc compareFunc
void swapU32(void *data, int idxA, int idxB)
int compareF32(void *data, int idxA, int idxB)
void swapU64(void *data, int idxA, int idxB)
int compareU64(void *data, int idxA, int idxB)
void(* SortSwapFunc)(void *data, int idxA, int idxB)
FW_CUDA_FUNC void swap(T &a, T &b)
void swapS64(void *data, int idxA, int idxB)
CUdevice int ordinal char int CUdevice dev CUdevprop CUdevice dev CUcontext ctx CUcontext ctx CUcontext pctx CUmodule const void image CUmodule const void fatCubin CUfunction CUmodule const char name void p CUfunction unsigned int bytes CUtexref pTexRef CUtexref CUarray unsigned int Flags CUtexref int CUaddress_mode am CUtexref unsigned int Flags CUaddress_mode CUtexref int dim CUarray_format int CUtexref hTexRef CUfunction unsigned int numbytes CUfunction int float value CUfunction int CUtexref hTexRef CUfunction int int grid_height CUevent unsigned int Flags CUevent hEvent CUevent hEvent CUstream unsigned int Flags CUstream hStream GLuint bufferobj unsigned int CUdevice dev CUdeviceptr unsigned int CUmodule const char name CUdeviceptr unsigned int bytesize CUdeviceptr dptr void unsigned int bytesize void CUdeviceptr unsigned int ByteCount CUarray unsigned int CUdeviceptr unsigned int ByteCount CUarray unsigned int const void unsigned int ByteCount CUarray unsigned int CUarray unsigned int unsigned int ByteCount void CUarray unsigned int unsigned int CUstream hStream const CUDA_MEMCPY2D pCopy CUdeviceptr const void unsigned int CUstream hStream const CUDA_MEMCPY2D CUstream hStream CUdeviceptr unsigned char unsigned int N CUdeviceptr unsigned int unsigned int N CUdeviceptr unsigned int unsigned short unsigned int unsigned int Height CUarray const CUDA_ARRAY_DESCRIPTOR pAllocateArray CUarray const CUDA_ARRAY3D_DESCRIPTOR pAllocateArray unsigned int CUtexref CUdeviceptr unsigned int bytes CUcontext unsigned int CUdevice device GLenum texture GLenum GLuint buffer GLenum GLuint renderbuffer GLenum GLsizeiptr size
bool(* SortCompareFunc)(void *data, int idxA, int idxB)
void swapF32(void *data, int idxA, int idxB)