0
我在内核函数中有char类型的问题。我想分裂大char类型为小char类型。CUDA分割字符数组
__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工作正常)。
您未提供足够的代码信息。你应该发布一个完全可编译和可执行的代码,以便愿意帮助你的人可以运行并检查它。在此之前,您可以通过添加[错误检查]来开始测试代码(http://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-for-errors-使用-cuda-runtime-api)并使用'cuda-memcheck'来避开出界错误,就像在[CUDA标签信息页面]中提到的那样(http://stackoverflow.com/tags/CUDA /信息)。 – JackOLantern
@MorbidFuzzball假设BiExponent的大小为80x100000,则该行不会超出BiExponent的结尾,如注释中所示。我们可以同意k被for循环约束为小于100000,对吧?然后80 * 99999 + 79小于80x100000。这与所启动的线程数无关,但启动的线程数应小于100,000。 –