0

我对内核函数中的 char 类型有疑问。我想将大字符类型拆分为小字符类型。

    __global__ void kernelExponentLoad(char* BiExponent,int lines){ 
  // BiExponent is formed from 80x100000 numbers
        const int numThreads = blockDim.x * gridDim.x;
        const int threadID = blockIdx.x * blockDim.x + threadIdx.x;
        for (int k = threadID; k < 100000; k += numThreads){
            char* cstr = new char[80];
            for(int i=0; i<80; i++){    
            cstr[i] = BiExponent[(k*80)+i];
            ...
            delete[] cstr;
            }
        }
    }

这是我的解决方案不起作用 - 内核在启动后崩溃(停止工作)。“char *BiExponent”中的数据正常(函数 printf 工作正常)。

4

1 回答 1

2

您的内核在这个问题中的编写方式,您的delete操作员没有正确定位。

delete您在最里面的 for 循环的每一次传递中都执行运算符。这是不正确的。可能您希望它像这样定位:

__global__ void kernelExponentLoad(char* BiExponent,int lines){ 
// BiExponent is formed from 80x100000 numbers
    const int numThreads = blockDim.x * gridDim.x;
    const int threadID = blockIdx.x * blockDim.x + threadIdx.x;
    for (int k = threadID; k < 100000; k += numThreads){
        char* cstr = new char[80];
        for(int i=0; i<80; i++){    
            cstr[i] = BiExponent[(k*80)+i];
            }
        ...
        delete[] cstr;
    }
}

请注意,在 the 之后和之前有两个右大括号delete,而不是如您所示的所有 3 个之后。

于 2013-11-11T16:04:38.740 回答