2011-10-17 103 views
3

当我尝试调试任意CUDA应用程序时,例如来自Nvidia的GPU计算SDK 4.0的矩阵乘法或convolutionSeparable样品,我总是得到相同的输出:CUDA Nvidia NSight调试:“CUDA网格启动失败”


Parallel Nsight Debug 
CUDA grid launch failed: CUcontext: 2059192 CUmodule: 348912936 Function: _Z9matrixMulILi32EEvPfS0_S0_ii 
…… 
…… 

而且具有以下内容的文件被显示出来:


    Parallel Nsight CUDA Debugger 

应用贝因g使用Nexus CUDA调试器进行调试,无法找到任何关联的源代码 。这可能是由于多种原因:

1)CUDA尚未初始化。 确保cuInit已被调用,并返回成功的结果。

2)没有创建CUDA上下文。 创建上下文后,可以在上下文中检查内存。每个上下文 在Visual Studio线程视图中显示为单个“线程”。 (调试| Windows |主题)

3)在任何情况下都没有活动的CUDA网格。 必须启动一个网格才能达到断点。

4)您已在Visual Studio线程视图中选择“默认上下文”。 当上下文没有可用的实际CUDA 时,此上下文是一个占位符。它不显示真实的数据。

5)没有加载CUDA模块。 您可以通过显示 Visual Studio模块视图来查看哪些模块已加载到每个CUDA上下文中。 (Debug | Windows | Modules)

6)未找到加载的.cubin的符号。 该模块需要使用调试信息进行构建。建筑时请指定 -G0开关。

7)运行内核时网格启动失败。


相应的“.CU”文件中的每个断点在运行过程中完全被忽略。当我只运行应用程序时,如果没有Nsight Debugging,程序将毫无问题地执行。

我能做些什么来解决这个问题?

我的设置:

  • 1xIntel GPU和1x NV 570GTX,我想使用本地调试选项
  • 赢7专业版64位
  • 开发信封:VS2008或VS2010
  • CUDA 4.0 & Parallel Nsight 2.0
  • NV驱动程序Vers。:285。38
  • WPF是禁用
  • TDR被禁用
  • Windows上运行的基本模式(无航空)
  • 项目Propertys:CUDA运行时API - > GPU->生成GPU调试信息 - >是(-G0)

回答

2

首先,您需要确保您的显示器由英特尔集成显卡驱动,而不是NVIDIA GPU。这是因为当你在CUDA代码中出现断点时,你会拖延整个GPU,所以如果使用相同的GPU进行显示,那么你的系统会自然锁定。

注意,hardware requirements并行Nsight表明你需要两个支持的GPU的,而你只有一个,但if I understand correctly有可能使用非英特尔GPU显示(我没试过)。

假设上述工作正常,您应该首先尝试使用Parallel Nsight附带的示例。您可以在开始菜单的Parallel Nsight菜单组中找到它们。

+0

我的显示器目前由intel设备驱动,这肯定是因为否则这会导致一些其他NSight错误消息。我知道,因为我已经尝试过了。据我所知,需要一个额外的任意图形设备,在我看来这听起来很合理。 – Impulse

+0

@Impulse您是否尝试过Parallel Nsight示例(而不是CUDA SDK示例)? – Tom

+0

是的,我尝试过SDK样本,并且使用Parallel Nsight提供了matrixMul样本。 输出为这个特殊的例子: 并行Nsight调试 CUDA网格发射失败:CUcontext:46427088 CUmodule:139693888功能:_Z9matrixMulPfS_S_ii – Impulse

2

CUDA Grid Launch有各种各样的原因。这可能是访问超出其分配的大小的数组。 x86世界中的什么被称为分段错误。我通过有选择地注释掉正在测试的内核部分来调试这些错误,直到错误消失。 (我们以前称之为狼围栏调试)。网格启动失败的另一个原因是如果内核执行时间太长(1或2秒)。

调试器没有帮助的原因是调试器只停止1块中的1个线程!您的访问错误即将到来。也不能使用printf来查找错误,因为在网格启动失败的情况下输出不会返回。

+1

但是奇怪的是,内核是没有调试选项normaly运行。 – Impulse

0

对此的答案绝对是使用正确的驱动程序来安装Parallel NSight。对于最新版本(当前为2.1 RC2),这是驱动程序版本285.86。对于当前的稳定版本2.0,这是驱动程序版本270.81,另一个海报提到。

1

要在已有的答案之上添加潜在解决方案,避免错误的一种方法是使用管理员权限运行NSight监视器。

+0

这对我来说没有任何改变,调试失败,而没有调试内核的执行没有问题。 – user2965003