我有一个内核,可能asm("trap;")在内核内部调用。但是,发生这种情况时,CUDA错误代码设置为启动失败,我无法重置它。
在CUDA Runtime API中,我们可以cudaGetLastError用来获取最后一个错误,同时将其重置为cudaSuccess。
是否可以使用Driver API做到这一点?
此类错误无法使用CUDA运行时API cudaGetLastError()函数进行重置。
CUDA运行时错误有两种类型:“粘滞”和“非粘滞”。“非粘性”错误是不会破坏上下文的错误。例如,一个cudaMalloc请求超过可用内存的请求将失败,但不会破坏上下文。这样的错误是“非粘性的”。
涉及意外终止CUDA内核的错误(包括您的trap示例,还包括内核内assert()故障,还包括运行时检测到的执行错误,例如越界访问)是“粘滞的”。您无法使用清除“粘性”错误cudaGetLastError()。清除运行时API中这些错误的唯一方法是cudaDeviceReset()(消除所有设备分配,并清除上下文)。
相应的驱动程序API函数是 cuDevicePrimaryCtxReset()
请注意,cudaDeviceReset()仅凭其本身不足以将GPU恢复为正常的功能行为。为此,“拥有”过程也必须终止。看这里。
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |