返回代码与异步错误
了解内核为何默认会静默失败
返回代码与异步错误 是 CoddyKit 上的免费 CUDA Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CUDA Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CUDA Academy 课程共包含 4 节课。
CUDA 出错的两种方式
CUDA 以两种方式报告问题:API 调用立即返回的返回码,以及内核产生的延迟异步错误。了解这两种方式非常关键。🧭
API 调用会返回错误码
大多数 CUDA 运行时调用都会返回一个cudaError_t。cudaSuccess 表示一切正常;其他任何值都表示出现了可以处理的问题。
cudaError_t err = cudaMalloc(&d, n);立即检查
对于cudaMalloc这类同步调用,返回码就是最终结果。请立即将它与 cudaSuccess 比较,并在继续执行前做出响应。
if (err != cudaSuccess) return 1;内核不会返回结果
使用三重括号启动内核时,没有可供测试的返回值。因此,启动失败无法用同样简单的方式报告。
myKernel<<<g, b>>>(d); // no code to check为什么内核是异步的
启动操作是异步的:CPU 将工作加入队列后继续执行。下一行代码运行时,GPU 甚至可能还没有开始工作。
错误会延迟出现
由于工作会稍后执行,内核崩溃会变成异步错误。它会在未来的某个调用中出现,而不是在启动语句本身出现。
默认情况下不会显示
如果您从不检查,一个损坏的内核就会静默失败。程序看似正常运行,输出却可能是乱码或全零。
两种启动错误
启动可能在两个阶段失败:启动时发现的错误配置,以及执行期间发现的越界访问等运行时故障。
持续存在的错误
严重故障会让上下文进入持续存在的错误状态。之后的每个 CUDA 调用都会返回同一个错误,直到您重新启动程序。
通过同步强制发现异步错误
要让隐藏的故障暴露出来,请调用cudaDeviceSynchronize。它会等待内核完成,并返回内核遇到的任何运行时错误。
cudaError_t e = cudaDeviceSynchronize();可靠的习惯
经验法则是:检查每个 API 调用的返回码,并通过同步来捕获内核错误。两者结合,就不会遗漏任何故障。
快速检查
测试您对内核如何报告失败的理解。
回顾:两条错误路径
API 调用会立即提供返回码,而内核会异步失败。检查错误码并进行同步,确保没有问题悄悄溜过。🎉
常见问题解答
「返回代码与异步错误」课时是免费的吗?
是的 — 「返回代码与异步错误」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CUDA Academy 课程的其余内容,请升级到 CoddyKit PRO。 CUDA Academy 课程共包含 4 节课。
「返回代码与异步错误」这节课中我会学到什么?
了解内核为何默认会静默失败 你通过在浏览器中直接运行的动手代码来练习 CUDA Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 CUDA Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 CUDA Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「返回代码与异步错误」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 CUDA Academy 课中编写并运行代码吗?
能。每节 CUDA Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。