cuda错误检测
参考链接
cuda错误检测方法
宿主线程维护着一个初始化为cudaSuccess的cudaError_t类型变量,但出现错误时,该变量都会被错误代码替换。在调用cudaGetLastError()时,就会返回此变量,并将其置为cudaSucess。
CUDA 提供了相应的错误信息函数,常用的有以下两个:
cudaGetErrorName()
: 返回错误代码
cudaGetErrorString()
: 返回错误说明
在 CUDA 运行时,每个线程都会维护一个初始值为 cudaSuccess 的错误变量,并在每次发生错误时被错误代码覆盖,使用如下两个函数可以检测出现错误时的错误代码:
同时提供了两个捕捉错误的函数:
cudaGetLastError()
返回维护的错误变量值,会重置错误码
cudaPeekAltError()
返回维护的错误变量值,不重置错误码
另外,__global__函数是异步执行的,如果需要与CPU同步,还需要使用cudaDeviceSynchronize()函数实现同步。所以如果调用完核函数后马上调用cudaGetLastError(),很可能返回cudaSuccess,但核函数运行到某一位置时仍然报错。而且,当函数执行与错误检测不在同一个文件中时,可恢复的错误可能不会被检测到。
注意:以下几种情况错误可能不会被捕捉或被发现
- 错误为可恢复错误类型,如 12,使用
cudaGetLastError()
之后,错误码会被清理重置,需要及时返回;- 错误捕捉位置在另一个工程。例如:将核函数封装成动态库后,在其他工程中调用此函数并进行错误检测,这时不会发现可恢复的错误;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!