当segfaults时,Cuda设备代码不会抛出错误

时间:2013-11-01 17:11:59

标签: cuda segmentation-fault

拥有像这样的cuda内核

__global__ void kernel(...)
{
    free( 48190);
}

可能不是一个好主意。 假设48190不是在当前执行期间解除分配的有效地址。

如果我们在主机上,运行时可能会立即停止执行,抛出段错误并给我们一些令人讨厌的描述,例如“堆已经损坏”或其他什么。

但是如果除了消息之外它做了所有的事情呢?如果它到达那一点,它就会爆炸并退出,而不会告诉我发生了什么。这就是代码给我的东西。如果我在我的机器上写了上面的内核,它会编译,运行,如果这是我的程序所做的一切(只是调用那个内核),它会很高兴地退出而没有错误消息:(。我只是稍后才发现当我尝试做一个cudaMemcpy,因为它因error code 30: unknown error

而失败

我的问题是:这应该发生吗?有没有办法在内核调用出错时启用某种错误描述?

1 个答案:

答案 0 :(得分:3)

  

有没有办法在内核调用出错时启用某种消息描述?

是的,请进行cuda错误检查。它描述了here