Cuda Memcpy Device to Host:未指定的错误启动失败

时间:2013-07-06 20:53:16

标签: cuda

这是一个我一直在努力的简单测试程序(以帮助调试我在运行求和函数上的工作),我似乎无法找到什么错误。该程序只是在一个小列表上调用我的运行总和函数,并尝试打印出数据。创造所有麻烦的那条线是被注释掉的那条线。它的cudaMemcpy(DeviceToHost)。当该行是代码的一部分时,我得到的错误是:

CUDA error at: student_func.cu:136 unspecified launch failure
cudaGetLastError() terminate called after throwing an instance of
'thrust::system::system_error' what(): unload of CUDA runtime failed

我根本不知道这有什么不对,它让我疯了。我尝试使用具有相同结果的常规旧malloc。我已经确认输入数据被复制到设备阵列中(通过在内核中打印),但是无法将结果从设备复制回主机。我真的很感激任何帮助!在此先感谢:)

unsigned int numElems = 100;
unsigned int blockLength = min( (unsigned int) 1024, (unsigned int) numElems);
unsigned int gridLength = ceil ( (float) numElems / (float) blockLength );

unsigned int* d_in;

unsigned int* h_in;
checkCudaErrors(cudaMallocHost(&h_in, sizeof(unsigned int) * numElems));

for (int i = 0; i < numElems; i++)
{
   h_in[i] = i;
}

checkCudaErrors(cudaMalloc(&d_in, sizeof(unsigned int) * numElems));
checkCudaErrors(cudaMemcpy(d_in, h_in, sizeof(unsigned int) * numElems, cudaMemcpyHostToDevice));

exclusive_running_sum<<< gridLength, blockLength >>>(d_in, d_in, numElems);
cudaDeviceSynchronize(); checkCudaErrors(cudaGetLastError());

//this line is a problem!!
//checkCudaErrors(cudaMemcpy(h_in, d_in, sizeof(unsigned int) * numElems, cudaMemcpyDeviceToHost));

for (int i = 0; i < numElems; i++)
{
    printf("%i %i\n", i, h_in[i]);
}

1 个答案:

答案 0 :(得分:1)

感谢大家的帮助。我找到了这个bug。经过大量调试后,我意识到我(非常非常愚蠢地)忘记了我在内核中使用了外部分配的共享数据这一事实。