【问题标题】:debugging cuda files in visual studio在 Visual Studio 中调试 cuda 文件
【发布时间】:2013-01-01 11:00:16
【问题描述】:

我有一个 cpp 函数 (function.cpp"),我用它“mex”-ed。然后我在 Visual Studio 中打开 function.cpp 文件并将 Visual Studio 附加到正在运行的 matlab 进程。

当我在 matlab 中调用函数时,我可以在 function.cpp 文件中设置断点并逐步观察变量。

当我将函数更改为 cuda 文件 (function.cu) 时,调试过程会中断。按照上述过程,我仍然可以在 function.cu 内停止,但我看不到任何变量。当我尝试“观察”一个变量时,它显示“错误符号..未找到”

我在 Visual Studio 中安装了 nsight。问题:我如何在调试模式下观察文件 function.cu 中的变量,就像我对 function.cpp 文件所做的那样。这可能吗?

请注意,function.cu 不在项目中。它只是一个带有函数 cpp 代码的独立文件(比如 somefunction(){})。出于调试目的,我在 Visual Studio 中打开它。我正在使用“nvmex -g wrapper.cu”在 matlab 中编译 function.cu 文件 wrapper.cu 是一个 matlab mexfunction 包装器,它调用了在 function.cu 中编写的 somefunction()

【问题讨论】:

    标签: visual-studio-2010 debugging matlab cuda nsight


    【解决方案1】:

    您使用的是主机调试器 VS 调试器,因此它不知道如何调试设备程序。要在 Windows 中调试设备代码,您应该查看 Parallel Nsight Visual Studio Edition

    您可以在文档中搜索附加到正在运行的进程的指南,对于当前版本 (2.2),特定页面是 here

    【讨论】:

    • 非常感谢。按照您提供的链接,我能够将 Visual Studio 附加到 matlab 进程并在“main”函数中的断点处停止。但我无法在设备功能内停下来。当我放一个断点时,它说“不会击中断点......”。我拥有的代码不在项目中。它们只是单独的文件。我想知道我是否还需要做其他事情?
    【解决方案2】:

    您附加了 VS,但在函数“main”中停止。看起来您仍在访问 CPU 代码。当您按照 Tom 的建议附加调试器时,您是否在 Transport 下拉菜单中选择了“NVIDIA GPU Debugger”?

    【讨论】:

    • 这正是我所做的。我在传输下拉列表中选择了“NIVIDIA GPU 调试器”。但也许我可以犯一些其他的错误?
    【解决方案3】:

    要调试任何 cuda 代码,您需要一个没有运行桌面环境/服务器的 gpu。对于 Windows,这意味着您需要第二个 gpu。我不能 100% 确定它是否也必须是 nvida gpu。比你可以bedubg你的代码。 在 linux 下,您只能使用一个 gpu 进行调试,因为您可以关闭 x-server 并在每个命令行中使用 cuda-gdb 进行调试。 更多信息将为您提供cuda-gdb manual

    【讨论】:

    • -1 Windows 不再适用。见stackoverflow.com/questions/13239384/…
    • @Roger:对不起,这是我的错误。但是,是否所有 GPU 都可以进行单 GPU 调试,还是只能用于计算架构 3.0 及更高版本的动态并行?也许我会在周末用我只有 520m 的笔记本电脑测试它。
    • Nsight Visual Studio Edition 2.2 及更高版本支持单 GPU CUDA 调试,适用于所有 NVIDIA Compute Capability 1.1 或更高版本的设备。 Nsight 2.2 和 3.0 不支持对使用 CUDA 动态并行的应用程序进行单 GPU CUDA 调试。
    猜你喜欢
    • 2016-12-31
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2010-11-23
    • 2012-04-26
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多