2013-01-01 69 views
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); 
} 

回答

1

那麼我試過下面的定義樣式,而不是「int partitions [1024];」。 //測試有10個元素(需要將其更改爲10到1024),則將所有值設置爲0.

unsigned int *test; 
test=(unsigned int*) malloc(10*sizeof(unsigned int)); 
test=new unsigned int[10]; 
for(int w=0;w<10;w++) 
    test[w]=0;