Как сравнить массивы char в CUDA C ++?

0

Мне нужна функция в cuda, которая получает массив символов и если они совпадают, функция возвращает значение, но когда я проверяю этот код, всегда возвращаю 0, как ни одно из этих условий не соответствует. до сих пор я пробовал это:

__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, если так, то почему? Первый пример должен работать, если вы не забыли загрузить массив char в cuda-mem.
  • 0
    Я анализирую этот способ, потому что у меня есть математическая функция, сохраненная в структуре (у меня нет простой задачи оценки задачи, такой как простая сумма или умножение), но мне нужно оценить много различных значений для вычисления быстрее, чем процессор может сделать ,
Показать ещё 2 комментария
Теги:
arrays
cuda
char

1 ответ

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;
  }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню