cuda-gdb 在 Linux 上的 nsight 中不起作用

Posted

技术标签:

【中文标题】cuda-gdb 在 Linux 上的 nsight 中不起作用【英文标题】:cuda-gdb not working in nsight on linux 【发布时间】:2012-10-11 01:44:50 【问题描述】:

我在我的 Ubuntu 12.10 中安装了 cuda 5,它运行良好,我也可以在终端中通过 cuda-gdb 编译和调试。我正在尝试使用 nsight,它可以毫无问题地编译和执行我的代码,但是当我尝试调试时出现以下错误

Error in final launch sequence
Failed to execute MI command:
-gdb-set cuda api_failures ignore
Error message from debugger back end:
Undefined set cuda command: "api_failures ignore".  Try "help set cuda".
Undefined set cuda command: "api_failures ignore".  Try "help set cuda".

我正在使用 ubuntu 12.10 64 位并使用 optirun (bumblebee) 启动 cuda 可执行文件和 nsight,因为我有 GTX 675M (optimus)。我通过 apt-get 安装了 cuda-gdb,我得到了 4.2 版:

frederico@zeus:~/Dropbox/coisas/projetos/delta_cuda$ cuda-gdb --version
NVIDIA (R) CUDA Debugger
4.2 release
Portions Copyright (C) 2007-2012 NVIDIA Corporation
GNU gdb (GDB) 7.2

我认为这不是问题,因为我可以单独使用它(无需 nsight)。我也将 nsight 更改为使用 optirun 启动 cuda-gdb,但仍然收到相同的错误。

【问题讨论】:

【参考方案1】:

问题出在 cuda-gdb 的版本上,我必须使用 cuda-gdb 版本 5。它带有工具包版本 5,只是对 /usr/bin 进行了符号舔,它就可以工作了。

【讨论】:

您收到此消息是因为 Nsight 尝试运行仅在 CUDA 5.0 中引入的较新的 cuda-gdb 命令之一。 您的解决方案有效,但很难在您不是管理员的多用户系统上设置。大多数时候,系统管理员不愿意在/usr/bin 中添加指向/opt 的链接...【参考方案2】:

可以用 nsight 和 bumblebee 调试 CUDA 程序。 (nsight v.5.0.0, bumblebee 3.2.1, Debian sid)

您只需将调试器命令行 (CUDA GDB Executable) 替换为: 项目资源管理器 -> 右键单击​​您的项目 -> 选择“调试为” -> 单击“调试配置...” -> 选择“调试器”选项卡

CUDA GDB 可执行文件:optirun --no-xorg cuda-gdb (另一种可能性是制作一个小的 shell 脚本,如下所示:/usr/bin/opti-cuda-gdb

#!/bin/bash
optirun --no-xorg /usr/bin/cuda-gdb $*

这种方式 optirun 不会为 gdb 启动虚拟屏幕,GPU 不接受图形并且可以进行调试。

希望有帮助!

【讨论】:

【参考方案3】:

无需创建此链接。

您可以在 Run/Debug Configurations... 菜单中选择 nsight 使用的 cuda-gdb 可执行文件。 在此菜单中,单击 C/C++ Application 下的应用程序,然后选择 Debugger 选项卡,您可以在其中浏览文件系统并将路径设置为 cuda-gdb-5.0可执行文件。

【讨论】:

那行得通。但是,对我而言,将其设置为所有用户比向管理员解释情况要大 我再次不同意。因为如果每个用户都使用 cuda-gdb-5.0,那么它应该安装在默认位置,或者用户 PATH 应该相应地更新到该位置。不过,享受cuda-gdb :)

以上是关于cuda-gdb 在 Linux 上的 nsight 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何将 cuda-gdb 与使用 nvcc 编译的静态库的 g++ 链接程序一起使用?

cuda-gdb:“CUDA_EXCEPTION_9:Warp Hardware Stack Overflow”的含义/出现

CUDA 核函数调试:cuda-gdb,cuda printf, cuda assert 读书笔记

CUDA 中大小为 4 的非法写入

“CudaLaunch返回(0x9)”,以及程序计时问题

Windows 上的 WaitOnAddress() 在 Linux 上的完全等价物是啥?