2013-11-25 33 views
-1

我想在cuda中添加2個char數組,但沒有任何工作。 我試着使用:在cuda中添加char數組

char temp[32]; 
strcpy(temp, my_array); 
strcat(temp, my_array_2); 

當我用這個內核 - 我得到error : calling a __host__ function("strcpy") from a __global__ function("Process") is not allowed

在此之後,我試着在主機使用這些功能,而不是在內核 - 沒有錯誤,但加入後我得到像ĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶ這樣的奇怪符號。

那麼,我如何在CUDA中添加兩個(或更多)char數組?

回答

5

那麼,我如何在CUDA中添加兩個(或更多)char數組?

編寫自己的函數:

__device__ char * my_strcpy(char *dest, const char *src){ 
    int i = 0; 
    do { 
    dest[i] = src[i];} 
    while (src[i++] != 0); 
    return dest; 
} 

__device__ char * my_strcat(char *dest, const char *src){ 
    int i = 0; 
    while (dest[i] != 0) i++; 
    my_strcpy(dest+i, src); 
    return dest; 
} 

雖然我們在這,herestrcmp

+0

Okey,一切看起來不錯,但只是一個問題 - 我添加不同長度的數組,我不知道應該從哪個'pos'添加以及什麼是數組'len'。我該如何解決這個問題? – Eddwhis

+0

我修復了代碼,使它們或多或少地重複了C++'strcat'和'strcpy'的功能。這是非常基本的C代碼。 –

+0

謝謝你,作品完美! – Eddwhis

1

正如錯誤信息所解釋的,您正試圖從全局內核(「GPU函數」)調用主機函數(「CPU函數」)。在全局內核中,您只能訪問由CUDA運行時API提供的功能,該功能不包含C標準庫(其中定義了strcpystrcat)。

你必須根據你想要做的事情創建你自己的str*函數。你想並行連接一個字符數組,還是串行地在每個線程中執行?

+0

所以我怎麼可以添加2個字符數組? – Eddwhis

+0

@Eddwhis您必須創建自己的'strcat'內核才能在GPU中運行。 –