C/C++/CUDA里面有没有合适的并行排序方法,适用于结构体一级排序

如果是host端的代码可以用斯鲁阿斯特。用法跟STL针对在VECTOR上的sort函数一样。
-----------------------------------------------------------------------------------
2017-08-12更新。。。后面都删除了

■网友
不知道需要排序的数据量有多大

用CUDA Samples\\v8.0\\6_Advanced\\cdpAdvancedQuicksort来说明

原函数:
static __device__ __forceinline__ void big_bitonicsort_kernel(unsigned *indata, unsigned *outdata, unsigned *backbuf, unsigned int offset, unsigned int len)
输入输出都是 纯数据。

我当时也是用结构体,uint2.x是数据,uint2.y是数据的序号

只做了一点修改,其实很简单,输入输出都用你的结构体,比较的时候用数据:
(注意粗体代码,这里只是提供一个思路,数据交换都在显存,是比较慢的做法)
extern "C"
__global__ void bigBinoticSort(uint2 *arr, int len, uint2 *buf) //需要算法空间buf
{
\tunsigned len2 = 1 \u0026lt;\u0026lt; (__btflo(len - 1u) + 1);//

\tunsigned int MAX = 0xffffffffu;
\tunsigned id = threadIdx.x;
\tif (id \u0026gt;= len2) return;
\tunsigned iter = blockDim.x;
\tfor (unsigned i = id; i \u0026lt; len2; i += iter) {
\t\tif (i \u0026gt;= len) {
buf.x = MAX;
\t\t}
\t}


\t__syncthreads();

\tint count = 0;
\tfor (unsigned k = 2; k \u0026lt;= len2; k *= 2)
\t{
\t\tfor (unsigned j = k \u0026gt;\u0026gt; 1; j \u0026gt; 0; j \u0026gt;\u0026gt;= 1)
\t\t{
\t\t\tfor (unsigned i = id; i \u0026lt; len2; i += iter)
\t\t\t{
\t\t\t\tunsigned swapIdx = i ^ j;

\t\t\t\tif (swapIdx \u0026gt; i)
\t\t\t\t{

\t\t\t\t\tuint2 myelem, other;
//结构体输入
\t\t\t\t\tif (i \u0026lt; len) myelem = arr;
\t\t\t\t\telse myelem = buf;

\t\t\t\t\tif (swapIdx \u0026lt; len) other = arr;
\t\t\t\t\telse other = buf;
\t\t\t\t\tbool swap = false;

//数据比较 注意 结构体.x
\t\t\t\t\tif ((i \u0026amp; k) == 0 \u0026amp;\u0026amp; myelem.x \u0026gt; other.x) swap = true;
\t\t\t\t\tif ((i \u0026amp; k) == k \u0026amp;\u0026amp; myelem.x \u0026lt; other.x) swap = true;

//结构体输出
\t\t\t\t\tif (swap) {
if (swapIdx \u0026lt; len) arr = myelem;
\t\t\t\t\t\telse buf = myelem;

\t\t\t\t\t\tif (i \u0026lt; len) arr = other;
\t\t\t\t\t\telse buf = other;
\t\t\t\t\t}
\t\t\t\t}
\t\t\t}
\t\t\t__syncthreads();

\t\t}
\t}
【C/C++/CUDA里面有没有合适的并行排序方法,适用于结构体一级排序】 }

■网友
结构体有指针,可以把key和指针做一个配对来排序,不想自己写gpu排序的话,nv也有相应的库


    推荐阅读