在我的代码中,我反复得到内存访问错误,我找不到为什么会发生这种情况的原因。
首先,什么是CUDA上的MMU错误,以及如何调试它的来源?目前它发生在定义lambda函数时,但当我重写代码时,它发生在其他地方,所以它的行为非常不确定,我甚至不知道如何开始调试它。
发布于 2020-07-07 17:33:26
您所指的内存管理单元故障可能是here中描述的XID31错误。
在我的经验中,最常见的原因是CUDA代码缺陷(由CUDA用户编写的代码,即GPU内核/设备代码),导致在执行GPU内核期间发生错误。根据我的经验,使用cuda-memcheck几乎总是可以捕获/本地化这些问题。(您也可以使用上面的链接中所述的调试器)。
对于这些情况,开始调试的最佳方法IMO是开始使用所述的here方法。它本质上就是我上面链接的文档中提到的内容。使用这种方法,cuda-memcheck通常能够为您将错误定位到特定的源代码行。此后,您可以使用内核内printf和/或调试器来实现其他调试途径,如上所述。
如果cuda-memcheck没有报告任何问题,但是每次您运行特定的应用程序时都会在系统日志中记录Xid 31错误,那么正如第一个链接文档中所指出的,这不是真正的最终用户可调试的(并且应该是很少发生的),此时唯一的办法是使用here描述的通用方法在developer.nvidia.com上提交一个错误。
https://stackoverflow.com/questions/62771985
复制相似问题