调试 CUDA MMU 故障

Debugging CUDA MMU Fault

本文关键字:故障 MMU CUDA 调试      更新时间:2023-10-16

在我的代码中,我反复出现内存访问错误,我找不到发生这种情况的原因。

首先,CUDA 上的 MMU 错误是什么,我如何调试它的来源?目前它发生在定义 lambda 函数时,但是当我重写代码时,它发生在其他地方,所以它的行为非常未定义,我什至不知道如何开始调试它。

您所指的 MMU 故障可能是此处所述的 Xid 31 错误。

根据我的经验,最常见的原因是 CUDA 代码缺陷(由 CUDA 用户编写的代码,即 GPU 内核/设备代码(,导致在执行 GPU 内核期间发生错误。 根据我的经验,这些问题几乎总是可以使用cuda-memcheck捕获/本地化。 (也可以使用上述链接中所述的调试器(。

对于这些情况,开始调试的最佳方法是 IMO 开始使用此处描述的方法。 它基本上是我上面链接的文件中提到的内容。 使用该方法,cuda-memcheck通常能够将错误本地化为特定的源代码行。 此后,您可以使用内核内printf和/或调试器进行其他调试途径,如前所述。

如果cuda-memcheck没有报告任何问题,但每次运行特定应用程序时,系统日志中都会记录 Xid 31 错误,那么如第一个链接文档所示,这不是真正的最终用户可调试的(并且应该很少发生(,此时唯一的办法是在 developer.nvidia.com 提交错误, 使用此处描述的常规方法。