在陷阱指令后,如何将CUDA错误重置为驱动程序API的成功



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

在CUDA运行时API中,我们可以使用cudaGetLastError获取最后一个错误,并且在此期间,将其重置为cudaSuccess

有没有办法使用驱动程序API?

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

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

涉及涉及CUDA内核意外终止的错误(包括您的trap示例,也包括内核assert()故障,也检测到的执行错误,例如诸如Out-Out-Out-Out-Out-Out-Out-Off-BONDS访问(。您无法使用cudaGetLastError()清除"粘性"错误。在运行时API中清除这些错误的唯一方法是cudaDeviceReset()(它消除了所有设备分配并擦除上下文(。

相应的驱动程序API功能是cuDevicePrimaryCtxReset()

请注意,cudaDeviceReset()本身不足以将GPU恢复到适当的功能行为。为了实现这一目标,"拥有"过程也必须终止。看这里。

相关内容

  • 没有找到相关文章

最新更新