【问题标题】:Debug JCuda program调试JCuda程序
【发布时间】:2013-08-02 08:04:57
【问题描述】:


我想知道 JCuda 项目的最佳调试器是什么(如果存在)。
我知道对于普通的 CUDA 应用程序,有 cuda-gdb 和 cuda-memcheck 之类的工具,我想知道是否可以将它们中的任何一个或类似的工具用于 JCuda 项目。
谢谢!

【问题讨论】:

    标签: debugging cuda nsight cuda-gdb jcuda


    【解决方案1】:

    您应该能够使用常规 CUDA 调试器(例如 Nsight 或 cuda-gdb)来调试 JCuda 应用程序中的 GPU 代码。您可以使用 Java 调试器(例如 Eclipse)来调试 Java 代码。 但是没有可以无缝调试 Java 和 CUDA 代码的调试器。

    【讨论】:

    • 感谢您的回答,但我需要的是可以在设备代码执行期间提供帮助的调试器。我使用 JCuda 从 Java 启动 CUDA 内核。我知道本机 CUDA 代码可以通过一种方式进行调试,例如,内存泄漏或其他有用的优化信息,但在这种情况下我无法使用这些信息。如果您可以提供我可以遵循的示例或教程,那就太好了! :)
    • 您可以尝试附加到 Java 进程来调试 CUDA 代码。这就是调试任何 JNI 代码的方式。
    • 感谢您的建议。不幸的是,在 linux 上我无法使用单个 GPU 进行调试,所以我将在我的 Windows PC 上尝试它,希望它可以工作。
    【解决方案2】:

    在 Linux 上,您可以使用 Nvidia Nsight (cuda-gdb)。

    设置启动可执行文件的调试会话:

    • 以 root 身份启动 Nsight(令人惊讶,但对我来说是必要的)
    • 转到运行菜单 > 调试配置...
    • 右键单击“C/C++ 应用程序”,选择新建
    • 在主选项卡下
      • 将可执行文件(字段 C/C++ 应用程序)设置为 /usr/bin/java 或任何正确的路径
    • 在参数选项卡下
      • 设置启动参数,例如-jar target/MyApp.jar
      • 设置工作目录
    • 在调试器选项卡下
      • 设置“CUDA GDB 初始化文件”路径(见下文)
      • 设置其他选项,例如启用 CUDA memcheck

    由于 Java 在内部出于某些过于聪明的目的使用了分段错误,因此您需要使用以下 GDB 选项创建一个文件,并将其指向为“CUDA GDB 初始化文件”。请注意,通过设置此选项,您将无法在自己的 JNI 代码中捕获分段错误错误。这应该不是问题。

    handle SIGSEGV nostop noprint pass
    

    如果你用调试符号编译你的内核,你就可以调试它们。

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 2020-08-27
      • 2011-06-17
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多