2013-10-25 20 views
0

我需要一個cuda函數來接收一個字符數組,如果它們匹配,函數會返回一個值,但是當我測試這段代碼時,總是返回0,就像這些條件都不匹配一樣。到目前爲止,我試過這個:如何比較CUDA C++中char的數組?

__device__ float operate_1(float num, char func[]) { 

     if(func[0] == 's' && func[1] == 'i' && func[2] == 'n' ) 

      return sinf(num * PI/180.0); 

     else if(func[0] == 'c' && func[1] == 'o' && func[2] == 's' ) 

      return cosf(num * PI/180.0); 

     else if(func[0] == 'l' && func[1] == 'o' && func[2] == 'g' ) 

      return logf(num); 

     else if(func[0] == 'e') 

      return expf (num); 

     return 0; } 
     //evaluates an operator. 

和這個代碼也是,但不像上一個那樣工作。

__device__ float operate_1(float num, char func[]) { 

     if(func == "sin") 

      return sinf(num * PI/180.0); 

     else if(func == "cos") 

      return cosf(num * PI/180.0); 

     else if(func == "log") 

      return logf(num); 

     else if(func == "e") 

      return expf (num); 

     return -0; } 
     //evaluates an operator. 

我能做些什麼?

+0

這看起來錯誤 - 你在解析CUDA的GPU方面的代碼,如果是這樣,爲什麼?第一個例子應該可以工作,如果你已經記得把你的char數組上傳到cuda-mem。 –

+0

我解析這種方式,因爲我有一個數學函數保存在一個結構(我沒有問題評估簡單的操作,像一個簡單的總和或乘法),但我需要評估許多不同的值ecuation比cpu更快做。 –

+0

哦,沒關係,是的第一個代碼工作,我忘了我有另一個函數,檢查是否是一個操作符或函數。謝謝! 但實際上它應該是另一種更容易比較的方式,如果我有一個非常大的陣列呢? K&R中的 –

回答

2

如何:

__device__ int my_strcmp(const char *str_a, const char *str_b, unsigned len = 256){ 
    int match = 0; 
    unsigned i = 0; 
    unsigned done = 0; 
    while ((i < len) && (match == 0) && !done){ 
    if ((str_a[i] == 0) || (str_b[i] == 0)) done = 1; 
    else if (str_a[i] != str_b[i]){ 
     match = i+1; 
     if ((int)str_a[i] - (int)str_b[i]) < 0) match = 0 - (i + 1);} 
    i++;} 
    return match; 
    }