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也有相应的库
推荐阅读
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- 车车人|为什么老司机进隧道开车时都不愿走右侧车道?原来里面大有学问!
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 在英雄联盟里面跟别人solo有啥技巧吗一对一的那种〒_〒?
- 为啥滴滴和快的的专车业务在叫车的产品流程里面没有参考uber的派单的模式而是继续采用司机抢单的模式
- 男子眼睛不适一年多,去医院一看,里面竟有一小截树枝!
- 电池|最近上市的新车里面居然有超多SUV?最帅的都在这了
- C、C++、java等编程语言都有哪些坑
- 请问这段代码是啥意思,从一个仿造网站上下载的软件里面的,对电脑有危害吗
- 胖哥汽车|火花塞只坏了1个,修车工却全部换新,里面到底有什么猫腻?