拥有这样的 cuda 内核
__global__ void kernel(...)
{
free( 48190);
}
可能不是一个好主意。假设这48190
不是在当前执行期间释放的有效地址。
如果我们在主机上,运行时可能会立即停止执行,抛出一个段错误并给我们一些令人讨厌的描述,比如“堆已损坏”之类的。
但是,如果除了消息之外它做了所有的事情呢?如果当它到达那个点时,它会爆炸并退出而没有告诉我发生了什么。这就是那个代码给我的。如果我在我的机器上编写了上面的内核,它会编译、运行,如果这是我的程序所做的一切(只是调用那个内核)它会很高兴地退出而没有错误消息:(。我后来才知道当我尝试做一个 cudaMemcpy 出错了,因为它失败了error code 30: unknown error
我的问题是:这应该发生吗?当内核调用出现问题时,有什么方法可以启用某种错误描述?