用CUDA在主机设备上进行char到int的转换

char to int conversion in host device with CUDA

本文关键字:char int 转换 CUDA 主机      更新时间:2023-10-16

我在CUDA程序的主机函数中将单个字符转换为整数时有麻烦。在

行之后
token[j] = token[j] * 10 + (buf[i] - '0' );

我使用cuda-gdb检查token[j]的值,我总是得到不同的数字,似乎没有一个模式。我也尝试过简单的铸造,而不是乘以十(我在另一个线程中看到),而不是减去"0",我似乎总是得到不同的结果。任何帮助都会很感激。这是我第一次发表关于堆栈溢出的文章,所以如果我的格式很糟糕,请让我休息一下。

一个苦苦挣扎的程序员

 __global__ void rread(unsigned int *table, char *buf, int *threadbytes, unsigned int *token) {
         int i = 0;
         int j = 0;
         *token = NULL;
         int tid = threadIdx.x;
         unsigned int key;
         char delim = ' ';
         for(i = tid * *threadbytes; i <(tid * *threadbytes) + *threadbytes ; i++)
         {
                 if (buf[i] != delim) { //check if its not a delim
                         token[j] = token[j] * 10 + (buf[i] - '0' );

写入令牌时存在竞争条件。

如果你想每个块有一个本地数组,你可以使用共享内存。如果希望每个线程都有一个本地数组,则需要使用本地的每线程内存,并在堆栈上声明该数组。在第一种情况下,您还必须处理块内的并发性。对于后者,您不必这样做,尽管您可能会潜在地浪费更多的内存(并减少协作)。