【问题标题】:Add char arrays in cuda在 cuda 中添加 char 数组
【发布时间】:2013-12-10 16:00:16
【问题描述】:

我正在尝试在 cuda 中添加 2 个字符数组,但没有任何效果。 我尝试使用:

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 中添加两个(或更多)字符数组?

【问题讨论】:

    标签: arrays cuda char addition


    【解决方案1】:

    那么,如何在 CUDA 中添加两个(或更多)字符数组?

    编写你自己的函数:

    __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

    【讨论】:

    • 好吧,一切看起来都不错,但只有一个问题 - 我正在添加不同长度的数组,但我不知道应该从哪个 pos 添加以及什么是数组 'len'。我该如何解决这个问题?
    • 我已经修复了代码,因此它们或多或少地复制了 c++ strcatstrcpy 的功能。这是非常基本的 C 代码。
    【解决方案2】:

    正如错误消息所述,您正试图从全局内核(“GPU 函数”)调用主机函数(“CPU 函数”)。在全局内核中,您只能访问由 CUDA 运行时 API 提供的函数,该 API 不包括 C 标准库(其中定义了 strcpystrcat)。

    您必须根据自己的需要创建自己的str* 函数。你想并行连接一个字符数组,还是在每个线程中串行连接?

    【讨论】:

    • 那么如何添加 2 个字符数组?
    • @Eddwhis 您必须创建自己的strcat 内核才能在 GPU 中运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2012-12-21
    相关资源
    最近更新 更多