【问题标题】:CUDA Nvidia NSight Debugging: "CUDA grid launch failed"CUDA Nvidia NSight 调试:“CUDA 网格启动失败”
【发布时间】:2011-12-09 03:52:00
【问题描述】:

当我尝试调试任意 CUDA 应用程序时,例如Nvidia GPU Computing SDK 4.0 中的矩阵乘法或卷积可分离样本,我总是得到类似于以下内容的输出:


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

并且出现了一个包含以下内容的文件:


                   Parallel Nsight CUDA Debugger

使用 Nexus CUDA 调试器调试的应用程序无法 找到任何相关的来源。这可能有多种原因:

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

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

3) 在任何上下文中都没有活动的 CUDA 网格。 必须启动网格才能到达断点。

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

5) 没有加载任何 CUDA 模块。 您可以通过显示 Visual Studio 模块视图。 (调试 | Windows | 模块)

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

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


相应“.cu”文件中的每个断点在运行期间都将被完全忽略。当我只运行应用程序时,没有 Nsight 调试,程序执行没有任何问题。

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

我的设置:

  • 1xIntel GPU 和 1x NV 570GTX,我想使用本地调试选项
  • Win 7. Pro 64Bit
  • 开发环境:VS2008 或 VS2010
  • CUDA 4.0 和并行 Nsight 2.0
  • NV 驱动程序版本:285.38
  • WPF 已禁用
  • TDR 已禁用
  • Windows 在基本模式下运行(无 aero)
  • 项目属性:Cuda Runtime API -> GPU-> 生成 GPU 调试信息 -> 是 (-G0)

【问题讨论】:

    标签: debugging breakpoints gpu cuda


    【解决方案1】:

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

    【讨论】:

    • 在没有任何变化并且调试失败之后,这为我完成了,而没有调试内核执行没有问题。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 但奇怪的是内核在没有调试选项的情况下运行正常。
      【解决方案4】:

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

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

      假设上述方法有效,您应该首先尝试 Parallel Nsight 中包含的示例。您可以在开始菜单的 Parallel Nsight 菜单组中找到它们。

      【讨论】:

      • 我的显示器目前由英特尔设备驱动,这是肯定的,否则这会导致其他一些 NSight 错误消息。我知道,因为我已经尝试过了。据我了解,需要一个额外的任意图形设备,我认为这听起来很合理。
      • @Impulse 您是否尝试过 Parallel Nsight 示例(相对于 CUDA SDK 示例)?
      • 是的,我尝试了 SDK 示例和 Parallel Nsight 提供的 matrixMul 示例。此特定示例的输出:Parallel Nsight Debug CUDA grid launch failed: CUcontext: 46427088 CUmodule: 139693888 Function: _Z9matrixMulPfS_S_ii
      猜你喜欢
      • 2013-07-15
      • 2014-11-20
      • 1970-01-01
      • 2011-08-09
      • 2016-12-31
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多