CUDA拆分char数组

时间:2013-11-09 22:48:50

标签: c++ cuda gpu

我在内核函数中遇到char类型的问题。我希望将大型char类型拆分为小型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工作正常)。

1 个答案:

答案 0 :(得分:2)

在此问题中编写内核的方式,delete运算符未正确定位。

您正在最内层for循环的每次传递中执行delete运算符。这是不正确的。可能你想要它的定位如下:

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

请注意,delete之后有两个紧密的括号,而不是之后的所有3个,而不是之后的所有3个。