【问题标题】:How to compare arrays of char in CUDA C++?如何比较 CUDA C++ 中的字符数组?
【发布时间】:2013-11-05 05:21:31
【问题描述】:

我需要 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.

我能做什么?

【问题讨论】:

  • 这看起来不对 - 你是在 cuda 的 GPU 端解析代码吗?如果是,为什么?如果您记得将 char 数组上传到 cuda-mem,第一个示例应该可以工作。
  • 我之所以这样解析,是因为我有一个数学函数保存在一个结构中(我没有问题评估简单的运算,如简单的求和或乘法),但我需要评估许多不同的值ecuation 比 cpu 更快。
  • 哦,没关系,是的,第一个代码有效,我忘了我还有另一个函数可以检查是运算符还是函数。谢谢!但实际上它应该是另一种更容易比较的方式,如果我有一个非常大的数组怎么办?
  • 在 K&R 中有一个 strcmp 算法实现,基本上是对正在比较的两个数组进行的 for 循环。你可以写一个这样的函数,ints也在string.h strcmp中,我不记得如果那是在cuda中

标签: c++ arrays cuda char


【解决方案1】:

这个怎么样:

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

【讨论】:

    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2011-08-12
    • 2014-11-01
    相关资源
    最近更新 更多