用户
 找回密码
 立即注册
buddy 该用户已被删除
发表于 2013-8-19 21:49:20
21972
版主大人,目前程序里每个线程都需要对一个长度为49的数据排序。之前程序直接使用冒泡法,但是觉得太费时。就采用了快速排序。程序逻辑是:
__device__ void quickSort(float *data,int left,int right)
{
       if(left>right)
             return;
       int i=left,j=right,pivot=data[left];
      while(i<j)
       {
                 while( (i<j) && (pivot <= data[j]) )
                           j--;
                 if(i<j)
                       data[i++]=data[j];
                while( (i<j) && (data[i] <= pivot) )
                        i++;
                if(i<j)
                  data[j--]=data[i];
        }
    data[j]=pivot;
    quickSort(data,left,i-1);
    quickSort(data,i+1,right);
}

__global__ void kernel1()
{
       int i=blockDim.x*blockIdx.x+threadIdx.x;
      ....//其他操作
     float v[49]={其他操作中获得}
     quickSort(v,0,48)

}

1、但是经过自己测试,如果kerne1<<<1,1>>>没问题。而其他方式排序出来的结果都是零值。不知道为什么。
2、对于此类问题,如何排序的问题,版主是否还有更好的建议?
先谢过版主大人!
使用道具 举报 回复
发表于 2013-8-19 22:27:42
试图直接使用一个CPU版本的代码来骗取论坛为您实现GPU版,是不地道也是不厚道的。

楼主自重。
使用道具 举报 回复 支持 反对
发表于 2013-8-23 08:58:22
横扫千军 发表于 2013-8-19 22:27
试图直接使用一个CPU版本的代码来骗取论坛为您实现GPU版,是不地道也是不厚道的。

楼主自重。 ...

;P;P;P;P;P;P;P;P;P;P;P;P
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册