当我尝试调试任意的CUDA应用程序,例如Nvidia GPU计算SDK4.0中的矩阵乘法或convolutionSeparable示例时,我总是得到类似于以下内容的输出:
Parallel Nsight Debug
CUDA grid launch failed: CUcontext: 2059192 CUmodule: 348912936 Function: _Z9matrixMulILi32EEvPfS0_S0_ii
……
……并显示一个具有以下内容的文件:
Parallel Nsight CUDA Debugger使用Nexus CUDA调试器调试的应用程序无法找到任何相关的源。这可能是出于以下几个原因:
1)尚未初始化数据自动化系统。确保cuInit已被调用,并返回一个成功的结果。
2)没有建立任何数据自动化系统上下文。一旦创建了上下文,就可以在上下文中检查内存。每个上下文在Visual线程视图中显示为单个“线程”。(线程)
3)在任何情况下都没有有效的数据自动化系统网格。必须启动网格才能命中断点。
4)在Visual线程视图中选择了“默认上下文”。此上下文是一个占位符,显示在没有可用的实际数据自动化系统上下文时。它没有显示真实的数据。
5)没有加载任何数据自动化系统模块。通过显示视图,可以看到在每个CUDA上下文中加载了哪些模块。(调试\x{e76f} Windows模块)
6)加载.cubin时未发现符号。该模块需要使用调试信息构建。请在生成时指定-G0开关。
7)运行内核时网格启动失败。
在运行过程中,相应的“.cu”文件中的每个断点都会被完全忽略。当我只是运行应用程序,没有Nsight调试,程序执行没有任何问题。
我能做些什么来解决这个问题?
我的设置:
发布于 2011-10-17 11:37:54
首先,您需要确保您的显示器是由英特尔集成图形驱动,而不是NVIDIA GPU。这是因为当您在CUDA代码中碰到一个断点时,您正在延迟整个GPU,所以如果使用相同的GPU来显示,那么您的系统就会自然锁定。
注意,用于并行Nsight的硬件要求表示您需要两个支持的GPU ,而您只有一个,但是如果我正确理解可以使用一个非Intel来显示(我还没有尝试过)。
假设上面的工作是有效的,那么您应该从尝试包含在并行Nsight中的示例开始。您可以在“开始”菜单中的并行Nsight菜单项中找到它们。
发布于 2011-10-25 15:47:24
库达网格的推出有多种原因。这个可能访问的数组超出了其分配的大小。在x86世界中,所谓的分割错误。我通过有选择地注释掉正在测试的部分内核来调试这些代码,直到错误消失。(我们以前称之为“狼栅栏调试”)。网格启动失败的另一个原因是内核执行时间过长(1秒或2秒)。
调试器没有帮助的原因是调试器只在一个块中停止了一个线程!您的访问错误将在此之前出现。此外,您也不能使用printf来查找错误,因为在网格启动失败时,输出不会被返回。
发布于 2017-05-24 10:23:39
要在已经给出的答案的基础上添加潜在的解决方案,一种避免错误的方法是运行具有管理员权限的NSight监视器。
https://stackoverflow.com/questions/7791826
复制相似问题