如何使用Driver API将cuda错误重置为成功?

时间:2017-04-27 13:28:37

标签: cuda

我有一个内核,可能在内核中调用asm("trap;")。但是当发生这种情况时,CUDA错误代码设置为启动失败,我无法重置它。

在CUDA Runtime API中,我们可以使用cudaGetLastError获取上一个错误,同时将其重置为cudaSuccess

有没有办法用Driver API做到这一点?

1 个答案:

答案 0 :(得分:3)

使用CUDA Runtime API cudaGetLastError()函数无法重置此类错误。

CUDA运行时错误有两种类型:“粘性”和“非粘性”。 “非粘性”错误是那些不会破坏上下文的错误。例如,要求超过可用内存的cudaMalloc请求将失败,但它不会破坏上下文。这样的错误是“非粘性的”。

涉及意外终止CUDA内核的错误(包括您的trap示例,也包括内核assert()失败,以及运行时检测到的执行错误,例如越界访问)都是“粘性的” ”。您无法使用cudaGetLastError()清除“粘滞”错误。清除运行时API中的这些错误的唯一方法是cudaDeviceReset()(它消除了所有设备分配,并消除了上下文)。

相应的驱动程序API函数为cuDevicePrimaryCtxReset()

请注意,cudaDeviceReset()本身不足以将GPU恢复到正常的功能行为。为了实现这一点,“拥有”过程也必须终止。见here