簡體   English   中英

如何在CUDA中輸入要快速排序的字符串數組

[英]How to input array of string to quicksort in cuda

我試圖運行此代碼以快速進行排序而不進行遞歸,當我輸入一個char數組時,它將運行,但是當我嘗試輸入字符串時,它在輸出中返回的不是符號。

因此,如果有人知道我在這段代碼中犯了什么錯誤,我將不勝感激。 因為我的計划是讀取文件txt並將信息表單文件存儲在數組中,然后以quicksort輸入此數組。

此代碼在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);
}

好吧,我嘗試了下面的定義樣式,而不是“ int partitions [1024];”。 // test有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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM