这是一个我一直在努力的简单测试程序(以帮助调试我在运行求和函数上的工作),我似乎无法找到什么错误。该程序只是在一个小列表上调用我的运行总和函数,并尝试打印出数据。创造所有麻烦的那条线是被注释掉的那条线。它的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]);
}
答案 0 :(得分:1)
感谢大家的帮助。我找到了这个bug。经过大量调试后,我意识到我(非常非常愚蠢地)忘记了我在内核中使用了外部分配的共享数据这一事实。