版主大人,目前程序里每个线程都需要对一个长度为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、对于此类问题,如何排序的问题,版主是否还有更好的建议?
先谢过版主大人!
|