#ifndef BT_RADIXSORT32_H #define BT_RADIXSORT32_H #include "btOpenCLArray.h" struct btSortData { int m_key; int m_value; }; #include "btBufferInfoCL.h" class btRadixSort32CL { btOpenCLArray* m_workBuffer1; btOpenCLArray* m_workBuffer2; btOpenCLArray* m_workBuffer3; btOpenCLArray* m_workBuffer4; btOpenCLArray* m_workBuffer3a; btOpenCLArray* m_workBuffer4a; cl_command_queue m_commandQueue; cl_kernel m_streamCountSortDataKernel; cl_kernel m_streamCountKernel; cl_kernel m_prefixScanKernel; cl_kernel m_sortAndScatterSortDataKernel; cl_kernel m_sortAndScatterKernel; bool m_deviceCPU; class btPrefixScanCL* m_scan; class btFillCL* m_fill; public: struct btConstData { int m_n; int m_nWGs; int m_startBit; int m_nBlocksPerWG; }; enum { DATA_ALIGNMENT = 256, WG_SIZE = 64, BLOCK_SIZE = 256, ELEMENTS_PER_WORK_ITEM = (BLOCK_SIZE/WG_SIZE), BITS_PER_PASS = 4, NUM_BUCKET=(1<& keysIn, btOpenCLArray& keysOut, btOpenCLArray& valuesIn, btOpenCLArray& valuesOut, int n, int sortBits = 32); ///keys only void execute(btOpenCLArray& keysInOut, int sortBits = 32 ); void execute(btOpenCLArray& keyValuesInOut, int sortBits = 32 ); void executeHost(btOpenCLArray& keyValuesInOut, int sortBits = 32); void executeHost(btAlignedObjectArray& keyValuesInOut, int sortBits = 32); }; #endif //BT_RADIXSORT32_H