0
我想運行此代碼快速排序沒有遞歸,它運行時,我輸入字符數組,但當我嘗試輸入字符串,它返回符號不字符串中輸出。如何輸入數組的字符串快速排序在cuda
所以,如果有人知道我在這段代碼中犯的錯誤,我將不勝感激。因爲我的計劃是讀取文件txt並將信息表單文件存儲在一個數組中,然後以快速排序輸入該數組。
此代碼在CUDA中實現。
void quick_p(char c[][30], int count)
{
int partitions[1024];
int newpartitions[1024];
partitions[0]=0;
partitions[1]=count-1;
int threads=1;
char *dev_c;
cudaMalloc((void**)&dev_c, count * sizeof(char));
int *dev_p;
int *dev_pn;
cudaMalloc((void**)&dev_p , 1024 * sizeof(int));
cudaMalloc((void**)&dev_pn, 1024 * sizeof(int));
cudaMemcpy(dev_c, c, count * sizeof(char), cudaMemcpyHostToDevice);
while(true)
{
cudaMemcpy(dev_p, partitions , sizeof(partitions), cudaMemcpyHostToDevice);
cudaMemcpy(dev_pn, newpartitions , sizeof(newpartitions), cudaMemcpyHostToDevice);
Split<<<1,threads>>>(&dev_c,dev_p,dev_pn,threads);
// get result back and loop again
cudaMemcpy(newpartitions,dev_pn, sizeof(partitions), cudaMemcpyDeviceToHost);
int tmp=0;
for(int i=0;i<threads*2;i++)
{
int idx=i*2;
if (newpartitions[idx]<newpartitions[idx+1] && newpartitions[idx+1]-newpartitions[idx]>=1)
{
partitions[tmp]=newpartitions[idx];
partitions[tmp+1]=newpartitions[idx+1];
tmp+=2;
}
}
threads=tmp/2;
if (threads==0)
break;
} // end main loop
cudaMemcpy(c,dev_c, count* sizeof(unsigned char), cudaMemcpyDeviceToHost);
cudaFree(dev_c);
cudaFree(dev_p);
cudaFree(dev_pn);
}